diff --git a/package.json b/package.json index 2383c0b7..8b983ac1 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,7 @@ "build": "tsc", "dev": "tsc -w", "pub": "rm -rf ./src/types/hardhat.ts && cp ./src/types/*.d.ts ./lib/types && tsc && yarn publish", + "copyTypes": "node ./scripts/copyTypes.js", "prepush": "yarn lint --max-warnings=0", "prepare": "husky install", "prettier": "prettier --write .", @@ -31,8 +32,10 @@ "@commitlint/config-conventional": "^17.0.3", "@gearbox-protocol/eslint-config": "^1.4.1", "@gearbox-protocol/prettier-config": "^1.4.1", + "@typechain/ethers-v5": "10.0.0", "@types/jest": "^28.1.7", "@types/node": "^18.7.6", + "@types/rimraf": "^3.0.2", "axios": "^0.27.2", "dotenv": "^16.0.1", "eslint": "^8.22.0", @@ -41,16 +44,18 @@ "jest": "^28.1.3", "lint-staged": ">=10", "prettier": "^2.7.1", + "rimraf": "^3.0.2", "ts-node": "^10.9.1", "tslog": "^3.3.3", + "typechain": "^8.1.0", "typescript": "^4.7.4" }, "prettier": "@gearbox-protocol/prettier-config", "lint-staged": { - "*.{ts,js}": [ + "*.{ts}": [ "eslint --fix", "prettier --write" ], - "*.{sol,json,md}": "prettier --write" + "*.{json,md}": "prettier --write" } } diff --git a/scripts/copyTypes.js b/scripts/copyTypes.js new file mode 100644 index 00000000..b83eb743 --- /dev/null +++ b/scripts/copyTypes.js @@ -0,0 +1,35 @@ +const { resolve } = require("path"); +const { sync: rimraf } = require("rimraf"); +const { glob, runTypeChain } = require("typechain"); + +/** + * This script copies required types from contracts repository + * Which is supposed to be available at `../contracts-v2` + * + * Untils contracts-v2 are published, we have to run it manually and commit src/types + */ +async function main() { + const src = resolve(process.cwd(), "../contracts-v2/artifacts"); + const dst = resolve(process.cwd(), "src/types"); + const allFiles = glob(src, [ + // interfaces + "!(build-info)/**/I?([A-Z]|st)+([a-zA-Z0-9_]).json", + "**/interfaces/**/+([a-zA-Z0-9_]).json", + // temporary exceptions + "**/Multicall2.json", + ]); + + rimraf(dst); + + const result = await runTypeChain({ + cwd: process.cwd(), + filesToProcess: allFiles, + allFiles, + outDir: dst, + target: "ethers-v5", + }); + + console.info(`Copied ${result.filesGenerated} files`); +} + +main().catch(console.error); diff --git a/src/apy/convexAPY.ts b/src/apy/convexAPY.ts index d5a02180..995e7c7d 100644 --- a/src/apy/convexAPY.ts +++ b/src/apy/convexAPY.ts @@ -16,12 +16,12 @@ import { ConvexPhantomTokenData } from "../tokens/convex"; import { CurveLPTokenData } from "../tokens/curveLP"; import { supportedTokens, tokenDataByNetwork } from "../tokens/token"; import { - CurveV1AdapterStETH, - CurveV1AdapterStETH__factory, IBaseRewardPool, IBaseRewardPool__factory, IConvexToken, IConvexToken__factory, + ICurvePool, + ICurvePool__factory, } from "../types"; import { MCall, multicall } from "../utils/multicall"; import { AwaitedRes } from "../utils/types"; @@ -132,7 +132,7 @@ function getCVXMintAmount(crvAmount: BigNumber, cvxSupply: BigNumber) { type IBaseRewardPoolInterface = IBaseRewardPool["interface"]; type IConvexTokenInterface = IConvexToken["interface"]; -type CurveV1AdapterStETHInterface = CurveV1AdapterStETH["interface"]; +type CurveV1AdapterStETHInterface = ICurvePool["interface"]; interface GetPoolDataProps { basePoolAddress: string; @@ -168,7 +168,7 @@ async function getPoolData({ }, { address: swapPoolAddress, - interface: CurveV1AdapterStETH__factory.createInterface(), + interface: ICurvePool__factory.createInterface(), method: "get_virtual_price()", }, { @@ -189,7 +189,7 @@ async function getPoolData({ [ AwaitedRes, AwaitedRes, - AwaitedRes, + AwaitedRes, AwaitedRes, ...Array>, ] diff --git a/src/pathfinder/path.ts b/src/pathfinder/path.ts index 476db932..47a851aa 100644 --- a/src/pathfinder/path.ts +++ b/src/pathfinder/path.ts @@ -12,7 +12,7 @@ import { } from "../tokens/token"; import { TokenType } from "../tokens/tokenType"; import { YearnLPToken } from "../tokens/yearn"; -import { SwapPathFinder__factory } from "../types"; +import { ISwapPathFinder__factory } from "../types"; import { detectNetwork } from "../utils/network"; import { PartialRecord } from "../utils/types"; import { pathFindersByNetwork } from "./contracts"; @@ -113,7 +113,7 @@ export class Path { }); const lpPaths = await initialPath.withdrawTokens(); - const pathFinder = SwapPathFinder__factory.connect( + const pathFinder = ISwapPathFinder__factory.connect( pathFindersByNetwork[networkType].PATH_FINDER, provider, ); diff --git a/src/payload/creditAccount.ts b/src/payload/creditAccount.ts index 8793aeda..74e3a4e5 100644 --- a/src/payload/creditAccount.ts +++ b/src/payload/creditAccount.ts @@ -1,4 +1,4 @@ -import { CreditAccountDataStruct } from "../types/contracts/core/DataCompressor"; +import { CreditAccountDataStruct } from "../types/contracts/interfaces/IDataCompressor.sol/IDataCompressor"; export type TokenBalancePayload = CreditAccountDataStruct["balances"]; diff --git a/src/strategies/convex.ts b/src/strategies/convex.ts index 9ed65593..b73ef249 100644 --- a/src/strategies/convex.ts +++ b/src/strategies/convex.ts @@ -12,9 +12,9 @@ import { ConvexPhantomTokenData } from "../tokens/convex"; import { CurveLPTokenData } from "../tokens/curveLP"; import { supportedTokens, tokenDataByNetwork } from "../tokens/token"; import { - ConvexV1BaseRewardPoolAdapter__factory, - ConvexV1BoosterAdapter__factory, - ConvexV1ClaimZapAdapter__factory, + IBooster__factory, + IClaimZap__factory, + IConvexV1BaseRewardPoolAdapter__factory, } from "../types"; import { MultiCallStruct } from "../types/contracts/interfaces/ICreditFacade.sol/ICreditFacade"; import { CurveStrategies } from "./curve"; @@ -26,28 +26,29 @@ export class ConvexBoosterCalls { amount: BigNumberish, stake: boolean, ) { - return ConvexV1BoosterAdapter__factory.createInterface().encodeFunctionData( - "deposit", - [pid, amount, stake], - ); + return IBooster__factory.createInterface().encodeFunctionData("deposit", [ + pid, + amount, + stake, + ]); } public static depositAll(pid: BigNumberish, stake: boolean) { - return ConvexV1BoosterAdapter__factory.createInterface().encodeFunctionData( + return IBooster__factory.createInterface().encodeFunctionData( "depositAll", [pid, stake], ); } public static withdraw(pid: BigNumberish, amount: BigNumberish) { - return ConvexV1BoosterAdapter__factory.createInterface().encodeFunctionData( - "withdraw", - [pid, amount], - ); + return IBooster__factory.createInterface().encodeFunctionData("withdraw", [ + pid, + amount, + ]); } public static withdrawAll(pid: BigNumberish) { - return ConvexV1BoosterAdapter__factory.createInterface().encodeFunctionData( + return IBooster__factory.createInterface().encodeFunctionData( "withdrawAll", [pid], ); @@ -56,41 +57,41 @@ export class ConvexBoosterCalls { export class ConvexPoolCalls { public static stake(amount: BigNumberish) { - return ConvexV1BaseRewardPoolAdapter__factory.createInterface().encodeFunctionData( + return IConvexV1BaseRewardPoolAdapter__factory.createInterface().encodeFunctionData( "stake", [amount], ); } public static stakeAll() { - return ConvexV1BaseRewardPoolAdapter__factory.createInterface().encodeFunctionData( + return IConvexV1BaseRewardPoolAdapter__factory.createInterface().encodeFunctionData( "stakeAll", ); } public static withdraw(amount: BigNumberish, claim: boolean) { - return ConvexV1BaseRewardPoolAdapter__factory.createInterface().encodeFunctionData( + return IConvexV1BaseRewardPoolAdapter__factory.createInterface().encodeFunctionData( "withdraw", [amount, claim], ); } public static withdrawAll(claim: boolean) { - return ConvexV1BaseRewardPoolAdapter__factory.createInterface().encodeFunctionData( + return IConvexV1BaseRewardPoolAdapter__factory.createInterface().encodeFunctionData( "withdrawAll", [claim], ); } public static withdrawAndUnwrap(amount: BigNumberish, claim: boolean) { - return ConvexV1BaseRewardPoolAdapter__factory.createInterface().encodeFunctionData( + return IConvexV1BaseRewardPoolAdapter__factory.createInterface().encodeFunctionData( "withdrawAndUnwrap", [amount, claim], ); } public static withdrawAllAndUnwrap(claim: boolean) { - return ConvexV1BaseRewardPoolAdapter__factory.createInterface().encodeFunctionData( + return IConvexV1BaseRewardPoolAdapter__factory.createInterface().encodeFunctionData( "withdrawAllAndUnwrap", [claim], ); @@ -109,7 +110,7 @@ export class ConvexClaimZapCalls { spendCvxAmount: BigNumberish, options: BigNumberish, ) { - return ConvexV1ClaimZapAdapter__factory.createInterface().encodeFunctionData( + return IClaimZap__factory.createInterface().encodeFunctionData( "claimRewards", [ rewardContracts, diff --git a/src/strategies/creditFacade.ts b/src/strategies/creditFacade.ts index 2b5759f7..97135c46 100644 --- a/src/strategies/creditFacade.ts +++ b/src/strategies/creditFacade.ts @@ -37,8 +37,8 @@ export class CreditFacadeCalls { minBalance: BigNumberish, ) { return ICreditFacadeExtended__factory.createInterface().encodeFunctionData( - "revertIfBalanceLessThan", - [token, minBalance], + "revertIfGetLessThan", + [[{ token, balance: minBalance }]], ); } diff --git a/src/strategies/curve.ts b/src/strategies/curve.ts index c30ba2c2..e330d6c9 100644 --- a/src/strategies/curve.ts +++ b/src/strategies/curve.ts @@ -10,10 +10,10 @@ import { ADDRESS_0X0, NetworkType } from "../core/constants"; import { CreditManagerData } from "../core/creditManager"; import { tokenDataByNetwork } from "../tokens/token"; import { - CurveV1Adapter2Assets__factory, - CurveV1Adapter3Assets__factory, - CurveV1Adapter4Assets__factory, - CurveV1AdapterBase__factory, + ICurvePool2Assets__factory, + ICurvePool3Assets__factory, + ICurvePool4Assets__factory, + ICurveV1Adapter__factory, } from "../types"; import { MultiCallStruct } from "../types/contracts/interfaces/ICreditFacade.sol/ICreditFacade"; import { UniswapV2Multicaller } from "./uniswapV2"; @@ -25,7 +25,7 @@ export class CurveCalls { dx: BigNumberish, min_dy: BigNumberish, ) { - return CurveV1AdapterBase__factory.createInterface().encodeFunctionData( + return ICurveV1Adapter__factory.createInterface().encodeFunctionData( "exchange", [i, j, dx, min_dy], ); @@ -36,7 +36,7 @@ export class CurveCalls { j: BigNumberish, rateMinRAY: BigNumberish, ) { - return CurveV1AdapterBase__factory.createInterface().encodeFunctionData( + return ICurveV1Adapter__factory.createInterface().encodeFunctionData( "exchange_all", [i, j, rateMinRAY], ); @@ -48,7 +48,7 @@ export class CurveCalls { dx: BigNumberish, min_dy: BigNumberish, ) { - return CurveV1AdapterBase__factory.createInterface().encodeFunctionData( + return ICurveV1Adapter__factory.createInterface().encodeFunctionData( "exchange_underlying", [i, j, dx, min_dy], ); @@ -59,7 +59,7 @@ export class CurveCalls { j: BigNumberish, rateMinRAY: BigNumberish, ) { - return CurveV1AdapterBase__factory.createInterface().encodeFunctionData( + return ICurveV1Adapter__factory.createInterface().encodeFunctionData( "exchange_all_underlying", [i, j, rateMinRAY], ); @@ -70,7 +70,7 @@ export class CurveCalls { i: BigNumberish, minAmount: BigNumberish, ) { - return CurveV1AdapterBase__factory.createInterface().encodeFunctionData( + return ICurveV1Adapter__factory.createInterface().encodeFunctionData( "add_liquidity_one_coin", [amount, i, minAmount], ); @@ -80,7 +80,7 @@ export class CurveCalls { i: BigNumberish, rateMinRAY: BigNumberish, ) { - return CurveV1AdapterBase__factory.createInterface().encodeFunctionData( + return ICurveV1Adapter__factory.createInterface().encodeFunctionData( "add_all_liquidity_one_coin", [i, rateMinRAY], ); @@ -91,7 +91,7 @@ export class CurveCalls { i: BigNumberish, min_amount: BigNumberish, ) { - return CurveV1AdapterBase__factory.createInterface().encodeFunctionData( + return ICurveV1Adapter__factory.createInterface().encodeFunctionData( "remove_liquidity_one_coin", [token_amount, i, min_amount], ); @@ -101,7 +101,7 @@ export class CurveCalls { i: BigNumberish, minRateRAY: BigNumberish, ) { - return CurveV1AdapterBase__factory.createInterface().encodeFunctionData( + return ICurveV1Adapter__factory.createInterface().encodeFunctionData( "remove_all_liquidity_one_coin", [i, minRateRAY], ); @@ -116,17 +116,17 @@ export class CurveCalls { ): string { switch (amounts.length) { case 2: - return CurveV1Adapter2Assets__factory.createInterface().encodeFunctionData( + return ICurvePool2Assets__factory.createInterface().encodeFunctionData( "add_liquidity", [amounts, min_mint_amount], ); case 3: - return CurveV1Adapter3Assets__factory.createInterface().encodeFunctionData( + return ICurvePool3Assets__factory.createInterface().encodeFunctionData( "add_liquidity", [amounts, min_mint_amount], ); case 4: - return CurveV1Adapter4Assets__factory.createInterface().encodeFunctionData( + return ICurvePool4Assets__factory.createInterface().encodeFunctionData( "add_liquidity", [amounts, min_mint_amount], ); @@ -144,17 +144,17 @@ export class CurveCalls { ) { switch (min_amounts.length) { case 2: - return CurveV1Adapter2Assets__factory.createInterface().encodeFunctionData( + return ICurvePool2Assets__factory.createInterface().encodeFunctionData( "remove_liquidity", [amount, min_amounts], ); case 3: - return CurveV1Adapter3Assets__factory.createInterface().encodeFunctionData( + return ICurvePool3Assets__factory.createInterface().encodeFunctionData( "remove_liquidity", [amount, min_amounts], ); case 4: - return CurveV1Adapter4Assets__factory.createInterface().encodeFunctionData( + return ICurvePool4Assets__factory.createInterface().encodeFunctionData( "remove_liquidity", [amount, min_amounts], ); @@ -172,17 +172,17 @@ export class CurveCalls { ) { switch (amounts.length) { case 2: - return CurveV1Adapter2Assets__factory.createInterface().encodeFunctionData( + return ICurvePool2Assets__factory.createInterface().encodeFunctionData( "remove_liquidity_imbalance", [amounts, max_burn_amount], ); case 3: - return CurveV1Adapter3Assets__factory.createInterface().encodeFunctionData( + return ICurvePool3Assets__factory.createInterface().encodeFunctionData( "remove_liquidity_imbalance", [amounts, max_burn_amount], ); case 4: - return CurveV1Adapter4Assets__factory.createInterface().encodeFunctionData( + return ICurvePool4Assets__factory.createInterface().encodeFunctionData( "remove_liquidity_imbalance", [amounts, max_burn_amount], ); diff --git a/src/strategies/lido.ts b/src/strategies/lido.ts index 907c6e94..194b19aa 100644 --- a/src/strategies/lido.ts +++ b/src/strategies/lido.ts @@ -4,20 +4,20 @@ import { contractsByNetwork } from "../contracts/contracts"; import { ADDRESS_0X0, NetworkType } from "../core/constants"; import { CreditManagerData } from "../core/creditManager"; import { tokenDataByNetwork } from "../tokens/token"; -import { LidoV1Adapter__factory } from "../types"; +import { ILidoV1Adapter__factory } from "../types"; import { MultiCallStruct } from "../types/contracts/interfaces/ICreditFacade.sol/ICreditFacade"; import { UniswapV2Multicaller } from "./uniswapV2"; export class LidoCalls { public static submit(amount: BigNumberish) { - return LidoV1Adapter__factory.createInterface().encodeFunctionData( + return ILidoV1Adapter__factory.createInterface().encodeFunctionData( "submit", [amount], ); } public static submitAll() { - return LidoV1Adapter__factory.createInterface().encodeFunctionData( + return ILidoV1Adapter__factory.createInterface().encodeFunctionData( "submitAll", ); } diff --git a/src/strategies/uniswapV2.ts b/src/strategies/uniswapV2.ts index 2fb4aa36..c6e7c316 100644 --- a/src/strategies/uniswapV2.ts +++ b/src/strategies/uniswapV2.ts @@ -1,6 +1,6 @@ import { BigNumberish } from "ethers"; -import { UniswapV2Adapter__factory } from "../types"; +import { IUniswapV2Adapter__factory } from "../types"; import { MultiCallStruct } from "../types/contracts/interfaces/ICreditFacade.sol/ICreditFacade"; export class UniswapV2Calls { @@ -11,7 +11,7 @@ export class UniswapV2Calls { to: string, deadline: BigNumberish, ) { - return UniswapV2Adapter__factory.createInterface().encodeFunctionData( + return IUniswapV2Adapter__factory.createInterface().encodeFunctionData( "swapExactTokensForTokens", [amountIn, amountOutMin, path, to, deadline], ); @@ -24,7 +24,7 @@ export class UniswapV2Calls { to: string, deadline: BigNumberish, ) { - return UniswapV2Adapter__factory.createInterface().encodeFunctionData( + return IUniswapV2Adapter__factory.createInterface().encodeFunctionData( "swapTokensForExactTokens", [amountOut, amountInMax, path, to, deadline], ); @@ -35,7 +35,7 @@ export class UniswapV2Calls { path: Array, deadline: BigNumberish, ) { - return UniswapV2Adapter__factory.createInterface().encodeFunctionData( + return IUniswapV2Adapter__factory.createInterface().encodeFunctionData( "swapAllTokensForTokens", [rateMinRAY, path, deadline], ); diff --git a/src/strategies/uniswapV3.ts b/src/strategies/uniswapV3.ts index 6d9913ca..3487a6b7 100644 --- a/src/strategies/uniswapV3.ts +++ b/src/strategies/uniswapV3.ts @@ -1,17 +1,15 @@ -// import { BigNumberish } from "ethers"; - -import { UniswapV3Adapter__factory } from "../types"; import { ISwapRouter, IUniswapV3Adapter, -} from "../types/contracts/adapters/uniswap/UniswapV3.sol/UniswapV3Adapter"; + IUniswapV3Adapter__factory, +} from "../types"; import { MultiCallStruct } from "../types/contracts/interfaces/ICreditFacade.sol/ICreditFacade"; export class UniswapV3Calls { public static exactInputSingle( params: ISwapRouter.ExactInputSingleParamsStructOutput, ) { - return UniswapV3Adapter__factory.createInterface().encodeFunctionData( + return IUniswapV3Adapter__factory.createInterface().encodeFunctionData( "exactInputSingle", [params], ); @@ -20,14 +18,14 @@ export class UniswapV3Calls { public static exactAllInputSingle( params: IUniswapV3Adapter.ExactAllInputSingleParamsStructOutput, ) { - return UniswapV3Adapter__factory.createInterface().encodeFunctionData( + return IUniswapV3Adapter__factory.createInterface().encodeFunctionData( "exactAllInputSingle", [params], ); } public static exactInput(params: ISwapRouter.ExactInputParamsStructOutput) { - return UniswapV3Adapter__factory.createInterface().encodeFunctionData( + return IUniswapV3Adapter__factory.createInterface().encodeFunctionData( "exactInput", [params], ); @@ -36,7 +34,7 @@ export class UniswapV3Calls { public static exactAllInput( params: IUniswapV3Adapter.ExactAllInputParamsStructOutput, ) { - return UniswapV3Adapter__factory.createInterface().encodeFunctionData( + return IUniswapV3Adapter__factory.createInterface().encodeFunctionData( "exactAllInput", [params], ); @@ -45,14 +43,14 @@ export class UniswapV3Calls { public static exactOutputSingle( params: ISwapRouter.ExactOutputSingleParamsStructOutput, ) { - return UniswapV3Adapter__factory.createInterface().encodeFunctionData( + return IUniswapV3Adapter__factory.createInterface().encodeFunctionData( "exactOutputSingle", [params], ); } public static exactOutput(params: ISwapRouter.ExactOutputParamsStructOutput) { - return UniswapV3Adapter__factory.createInterface().encodeFunctionData( + return IUniswapV3Adapter__factory.createInterface().encodeFunctionData( "exactOutput", [params], ); diff --git a/src/strategies/yearn.ts b/src/strategies/yearn.ts index 9e03a0df..7d1f7d1a 100644 --- a/src/strategies/yearn.ts +++ b/src/strategies/yearn.ts @@ -11,14 +11,14 @@ import { CreditManagerData } from "../core/creditManager"; import { CurveLPTokenData } from "../tokens/curveLP"; import { supportedTokens, tokenDataByNetwork } from "../tokens/token"; import { TokenType } from "../tokens/tokenType"; -import { YearnV2Adapter__factory } from "../types"; +import { IYVault__factory } from "../types"; import { MultiCallStruct } from "../types/contracts/interfaces/ICreditFacade.sol/ICreditFacade"; import { CurveStrategies } from "./curve"; import { UniswapV2Multicaller } from "./uniswapV2"; export class YearnV2Calls { public static deposit(amount?: BigNumberish, recipient?: string): string { - const contractInterface = YearnV2Adapter__factory.createInterface(); + const contractInterface = IYVault__factory.createInterface(); if (amount && recipient) { return contractInterface.encodeFunctionData("deposit(uint256,address)", [ amount, @@ -36,7 +36,7 @@ export class YearnV2Calls { recipient?: string, maxLoss?: BigNumberish, ): string { - const contractInterface = YearnV2Adapter__factory.createInterface(); + const contractInterface = IYVault__factory.createInterface(); if (maxShares && recipient && maxLoss) { return contractInterface.encodeFunctionData( "withdraw(uint256,address,uint256)", diff --git a/src/types/@openzeppelin/contracts/access/Ownable.ts b/src/types/@openzeppelin/contracts/access/Ownable.ts deleted file mode 100644 index 111524cd..00000000 --- a/src/types/@openzeppelin/contracts/access/Ownable.ts +++ /dev/null @@ -1,175 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../common"; - -export interface OwnableInterface extends utils.Interface { - functions: { - "owner()": FunctionFragment; - "renounceOwnership()": FunctionFragment; - "transferOwnership(address)": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: "owner" | "renounceOwnership" | "transferOwnership" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "owner", values?: undefined): string; - encodeFunctionData( - functionFragment: "renounceOwnership", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "transferOwnership", - values: [string] - ): string; - - decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "renounceOwnership", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "transferOwnership", - data: BytesLike - ): Result; - - events: { - "OwnershipTransferred(address,address)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment; -} - -export interface OwnershipTransferredEventObject { - previousOwner: string; - newOwner: string; -} -export type OwnershipTransferredEvent = TypedEvent< - [string, string], - OwnershipTransferredEventObject ->; - -export type OwnershipTransferredEventFilter = - TypedEventFilter; - -export interface Ownable extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: OwnableInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - owner(overrides?: CallOverrides): Promise<[string]>; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - owner(overrides?: CallOverrides): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - owner(overrides?: CallOverrides): Promise; - - renounceOwnership(overrides?: CallOverrides): Promise; - - transferOwnership( - newOwner: string, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - "OwnershipTransferred(address,address)"( - previousOwner?: string | null, - newOwner?: string | null - ): OwnershipTransferredEventFilter; - OwnershipTransferred( - previousOwner?: string | null, - newOwner?: string | null - ): OwnershipTransferredEventFilter; - }; - - estimateGas: { - owner(overrides?: CallOverrides): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - owner(overrides?: CallOverrides): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/src/types/@openzeppelin/contracts/access/index.ts b/src/types/@openzeppelin/contracts/access/index.ts deleted file mode 100644 index 999bcc77..00000000 --- a/src/types/@openzeppelin/contracts/access/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { Ownable } from "./Ownable"; diff --git a/src/types/@openzeppelin/contracts/index.ts b/src/types/@openzeppelin/contracts/index.ts index 8d446638..e8ba4a3b 100644 --- a/src/types/@openzeppelin/contracts/index.ts +++ b/src/types/@openzeppelin/contracts/index.ts @@ -1,10 +1,6 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ -import type * as access from "./access"; -export type { access }; -import type * as security from "./security"; -export type { security }; import type * as token from "./token"; export type { token }; import type * as utils from "./utils"; diff --git a/src/types/@openzeppelin/contracts/security/Pausable.ts b/src/types/@openzeppelin/contracts/security/Pausable.ts deleted file mode 100644 index a7508118..00000000 --- a/src/types/@openzeppelin/contracts/security/Pausable.ts +++ /dev/null @@ -1,111 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BytesLike, - CallOverrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../common"; - -export interface PausableInterface extends utils.Interface { - functions: { - "paused()": FunctionFragment; - }; - - getFunction(nameOrSignatureOrTopic: "paused"): FunctionFragment; - - encodeFunctionData(functionFragment: "paused", values?: undefined): string; - - decodeFunctionResult(functionFragment: "paused", data: BytesLike): Result; - - events: { - "Paused(address)": EventFragment; - "Unpaused(address)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "Paused"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Unpaused"): EventFragment; -} - -export interface PausedEventObject { - account: string; -} -export type PausedEvent = TypedEvent<[string], PausedEventObject>; - -export type PausedEventFilter = TypedEventFilter; - -export interface UnpausedEventObject { - account: string; -} -export type UnpausedEvent = TypedEvent<[string], UnpausedEventObject>; - -export type UnpausedEventFilter = TypedEventFilter; - -export interface Pausable extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: PausableInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - paused(overrides?: CallOverrides): Promise<[boolean]>; - }; - - paused(overrides?: CallOverrides): Promise; - - callStatic: { - paused(overrides?: CallOverrides): Promise; - }; - - filters: { - "Paused(address)"(account?: null): PausedEventFilter; - Paused(account?: null): PausedEventFilter; - - "Unpaused(address)"(account?: null): UnpausedEventFilter; - Unpaused(account?: null): UnpausedEventFilter; - }; - - estimateGas: { - paused(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - paused(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/@openzeppelin/contracts/security/index.ts b/src/types/@openzeppelin/contracts/security/index.ts deleted file mode 100644 index ed703c8f..00000000 --- a/src/types/@openzeppelin/contracts/security/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { Pausable } from "./Pausable"; diff --git a/src/types/@openzeppelin/contracts/token/ERC20/index.ts b/src/types/@openzeppelin/contracts/token/ERC20/index.ts index cc196974..a8eb12b2 100644 --- a/src/types/@openzeppelin/contracts/token/ERC20/index.ts +++ b/src/types/@openzeppelin/contracts/token/ERC20/index.ts @@ -3,5 +3,4 @@ /* eslint-disable */ import type * as extensions from "./extensions"; export type { extensions }; -export type { ERC20 } from "./ERC20"; export type { IERC20 } from "./IERC20"; diff --git a/src/types/@openzeppelin/contracts/token/ERC721/ERC721.ts b/src/types/@openzeppelin/contracts/token/ERC721/ERC721.ts deleted file mode 100644 index 82a8bb54..00000000 --- a/src/types/@openzeppelin/contracts/token/ERC721/ERC721.ts +++ /dev/null @@ -1,578 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface ERC721Interface extends utils.Interface { - functions: { - "approve(address,uint256)": FunctionFragment; - "balanceOf(address)": FunctionFragment; - "getApproved(uint256)": FunctionFragment; - "isApprovedForAll(address,address)": FunctionFragment; - "name()": FunctionFragment; - "ownerOf(uint256)": FunctionFragment; - "safeTransferFrom(address,address,uint256)": FunctionFragment; - "safeTransferFrom(address,address,uint256,bytes)": FunctionFragment; - "setApprovalForAll(address,bool)": FunctionFragment; - "supportsInterface(bytes4)": FunctionFragment; - "symbol()": FunctionFragment; - "tokenURI(uint256)": FunctionFragment; - "transferFrom(address,address,uint256)": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "approve" - | "balanceOf" - | "getApproved" - | "isApprovedForAll" - | "name" - | "ownerOf" - | "safeTransferFrom(address,address,uint256)" - | "safeTransferFrom(address,address,uint256,bytes)" - | "setApprovalForAll" - | "supportsInterface" - | "symbol" - | "tokenURI" - | "transferFrom" - ): FunctionFragment; - - encodeFunctionData( - functionFragment: "approve", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "balanceOf", values: [string]): string; - encodeFunctionData( - functionFragment: "getApproved", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "isApprovedForAll", - values: [string, string] - ): string; - encodeFunctionData(functionFragment: "name", values?: undefined): string; - encodeFunctionData( - functionFragment: "ownerOf", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "safeTransferFrom(address,address,uint256)", - values: [string, string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "safeTransferFrom(address,address,uint256,bytes)", - values: [string, string, BigNumberish, BytesLike] - ): string; - encodeFunctionData( - functionFragment: "setApprovalForAll", - values: [string, boolean] - ): string; - encodeFunctionData( - functionFragment: "supportsInterface", - values: [BytesLike] - ): string; - encodeFunctionData(functionFragment: "symbol", values?: undefined): string; - encodeFunctionData( - functionFragment: "tokenURI", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "transferFrom", - values: [string, string, BigNumberish] - ): string; - - decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "getApproved", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "isApprovedForAll", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "ownerOf", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "safeTransferFrom(address,address,uint256)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "safeTransferFrom(address,address,uint256,bytes)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "setApprovalForAll", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "supportsInterface", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "tokenURI", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "transferFrom", - data: BytesLike - ): Result; - - events: { - "Approval(address,address,uint256)": EventFragment; - "ApprovalForAll(address,address,bool)": EventFragment; - "Transfer(address,address,uint256)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "Approval"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ApprovalForAll"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment; -} - -export interface ApprovalEventObject { - owner: string; - approved: string; - tokenId: BigNumber; -} -export type ApprovalEvent = TypedEvent< - [string, string, BigNumber], - ApprovalEventObject ->; - -export type ApprovalEventFilter = TypedEventFilter; - -export interface ApprovalForAllEventObject { - owner: string; - operator: string; - approved: boolean; -} -export type ApprovalForAllEvent = TypedEvent< - [string, string, boolean], - ApprovalForAllEventObject ->; - -export type ApprovalForAllEventFilter = TypedEventFilter; - -export interface TransferEventObject { - from: string; - to: string; - tokenId: BigNumber; -} -export type TransferEvent = TypedEvent< - [string, string, BigNumber], - TransferEventObject ->; - -export type TransferEventFilter = TypedEventFilter; - -export interface ERC721 extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: ERC721Interface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - approve( - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(owner: string, overrides?: CallOverrides): Promise<[BigNumber]>; - - getApproved( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - isApprovedForAll( - owner: string, - operator: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - name(overrides?: CallOverrides): Promise<[string]>; - - ownerOf( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - "safeTransferFrom(address,address,uint256)"( - from: string, - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "safeTransferFrom(address,address,uint256,bytes)"( - from: string, - to: string, - tokenId: BigNumberish, - _data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setApprovalForAll( - operator: string, - approved: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - - symbol(overrides?: CallOverrides): Promise<[string]>; - - tokenURI( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - transferFrom( - from: string, - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - approve( - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(owner: string, overrides?: CallOverrides): Promise; - - getApproved( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isApprovedForAll( - owner: string, - operator: string, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - ownerOf(tokenId: BigNumberish, overrides?: CallOverrides): Promise; - - "safeTransferFrom(address,address,uint256)"( - from: string, - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "safeTransferFrom(address,address,uint256,bytes)"( - from: string, - to: string, - tokenId: BigNumberish, - _data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setApprovalForAll( - operator: string, - approved: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - tokenURI(tokenId: BigNumberish, overrides?: CallOverrides): Promise; - - transferFrom( - from: string, - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - approve( - to: string, - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - balanceOf(owner: string, overrides?: CallOverrides): Promise; - - getApproved( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isApprovedForAll( - owner: string, - operator: string, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - ownerOf(tokenId: BigNumberish, overrides?: CallOverrides): Promise; - - "safeTransferFrom(address,address,uint256)"( - from: string, - to: string, - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "safeTransferFrom(address,address,uint256,bytes)"( - from: string, - to: string, - tokenId: BigNumberish, - _data: BytesLike, - overrides?: CallOverrides - ): Promise; - - setApprovalForAll( - operator: string, - approved: boolean, - overrides?: CallOverrides - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - tokenURI(tokenId: BigNumberish, overrides?: CallOverrides): Promise; - - transferFrom( - from: string, - to: string, - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - "Approval(address,address,uint256)"( - owner?: string | null, - approved?: string | null, - tokenId?: BigNumberish | null - ): ApprovalEventFilter; - Approval( - owner?: string | null, - approved?: string | null, - tokenId?: BigNumberish | null - ): ApprovalEventFilter; - - "ApprovalForAll(address,address,bool)"( - owner?: string | null, - operator?: string | null, - approved?: null - ): ApprovalForAllEventFilter; - ApprovalForAll( - owner?: string | null, - operator?: string | null, - approved?: null - ): ApprovalForAllEventFilter; - - "Transfer(address,address,uint256)"( - from?: string | null, - to?: string | null, - tokenId?: BigNumberish | null - ): TransferEventFilter; - Transfer( - from?: string | null, - to?: string | null, - tokenId?: BigNumberish | null - ): TransferEventFilter; - }; - - estimateGas: { - approve( - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(owner: string, overrides?: CallOverrides): Promise; - - getApproved( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isApprovedForAll( - owner: string, - operator: string, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - ownerOf( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "safeTransferFrom(address,address,uint256)"( - from: string, - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "safeTransferFrom(address,address,uint256,bytes)"( - from: string, - to: string, - tokenId: BigNumberish, - _data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setApprovalForAll( - operator: string, - approved: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - tokenURI( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transferFrom( - from: string, - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - approve( - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf( - owner: string, - overrides?: CallOverrides - ): Promise; - - getApproved( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isApprovedForAll( - owner: string, - operator: string, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - ownerOf( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "safeTransferFrom(address,address,uint256)"( - from: string, - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "safeTransferFrom(address,address,uint256,bytes)"( - from: string, - to: string, - tokenId: BigNumberish, - _data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setApprovalForAll( - operator: string, - approved: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - tokenURI( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transferFrom( - from: string, - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/src/types/@openzeppelin/contracts/token/ERC721/index.ts b/src/types/@openzeppelin/contracts/token/ERC721/index.ts index e0a47f27..7733b5e6 100644 --- a/src/types/@openzeppelin/contracts/token/ERC721/index.ts +++ b/src/types/@openzeppelin/contracts/token/ERC721/index.ts @@ -3,6 +3,5 @@ /* eslint-disable */ import type * as extensions from "./extensions"; export type { extensions }; -export type { ERC721 } from "./ERC721"; export type { IERC721 } from "./IERC721"; export type { IERC721Receiver } from "./IERC721Receiver"; diff --git a/src/types/@openzeppelin/contracts/utils/introspection/ERC165.ts b/src/types/@openzeppelin/contracts/utils/introspection/ERC165.ts deleted file mode 100644 index 6b8039b7..00000000 --- a/src/types/@openzeppelin/contracts/utils/introspection/ERC165.ts +++ /dev/null @@ -1,102 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BytesLike, - CallOverrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface ERC165Interface extends utils.Interface { - functions: { - "supportsInterface(bytes4)": FunctionFragment; - }; - - getFunction(nameOrSignatureOrTopic: "supportsInterface"): FunctionFragment; - - encodeFunctionData( - functionFragment: "supportsInterface", - values: [BytesLike] - ): string; - - decodeFunctionResult( - functionFragment: "supportsInterface", - data: BytesLike - ): Result; - - events: {}; -} - -export interface ERC165 extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: ERC165Interface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - }; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - callStatic: { - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - }; - - filters: {}; - - estimateGas: { - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - }; - - populateTransaction: { - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - }; -} diff --git a/src/types/@openzeppelin/contracts/utils/introspection/index.ts b/src/types/@openzeppelin/contracts/utils/introspection/index.ts index d7fccec7..3fcca5c2 100644 --- a/src/types/@openzeppelin/contracts/utils/introspection/index.ts +++ b/src/types/@openzeppelin/contracts/utils/introspection/index.ts @@ -1,5 +1,4 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ -export type { ERC165 } from "./ERC165"; export type { IERC165 } from "./IERC165"; diff --git a/src/types/contracts/adapters/AbstractAdapter.ts b/src/types/contracts/adapters/AbstractAdapter.ts deleted file mode 100644 index 886748fc..00000000 --- a/src/types/contracts/adapters/AbstractAdapter.ts +++ /dev/null @@ -1,174 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BytesLike, - CallOverrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../common"; - -export interface AbstractAdapterInterface extends utils.Interface { - functions: { - "_gearboxAdapterType()": FunctionFragment; - "_gearboxAdapterVersion()": FunctionFragment; - "creditFacade()": FunctionFragment; - "creditManager()": FunctionFragment; - "targetContract()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "_gearboxAdapterType" - | "_gearboxAdapterVersion" - | "creditFacade" - | "creditManager" - | "targetContract" - ): FunctionFragment; - - encodeFunctionData( - functionFragment: "_gearboxAdapterType", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "_gearboxAdapterVersion", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditFacade", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditManager", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "targetContract", - values?: undefined - ): string; - - decodeFunctionResult( - functionFragment: "_gearboxAdapterType", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "_gearboxAdapterVersion", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditFacade", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditManager", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "targetContract", - data: BytesLike - ): Result; - - events: {}; -} - -export interface AbstractAdapter extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: AbstractAdapterInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - _gearboxAdapterType(overrides?: CallOverrides): Promise<[number]>; - - _gearboxAdapterVersion(overrides?: CallOverrides): Promise<[number]>; - - creditFacade(overrides?: CallOverrides): Promise<[string]>; - - creditManager(overrides?: CallOverrides): Promise<[string]>; - - targetContract(overrides?: CallOverrides): Promise<[string]>; - }; - - _gearboxAdapterType(overrides?: CallOverrides): Promise; - - _gearboxAdapterVersion(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - targetContract(overrides?: CallOverrides): Promise; - - callStatic: { - _gearboxAdapterType(overrides?: CallOverrides): Promise; - - _gearboxAdapterVersion(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - targetContract(overrides?: CallOverrides): Promise; - }; - - filters: {}; - - estimateGas: { - _gearboxAdapterType(overrides?: CallOverrides): Promise; - - _gearboxAdapterVersion(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - targetContract(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - _gearboxAdapterType( - overrides?: CallOverrides - ): Promise; - - _gearboxAdapterVersion( - overrides?: CallOverrides - ): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - targetContract(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/adapters/UniversalAdapter.ts b/src/types/contracts/adapters/UniversalAdapter.ts deleted file mode 100644 index f62ecd36..00000000 --- a/src/types/contracts/adapters/UniversalAdapter.ts +++ /dev/null @@ -1,258 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../common"; - -export type RevocationPairStruct = { spender: string; token: string }; - -export type RevocationPairStructOutput = [string, string] & { - spender: string; - token: string; -}; - -export interface UniversalAdapterInterface extends utils.Interface { - functions: { - "_gearboxAdapterType()": FunctionFragment; - "_gearboxAdapterVersion()": FunctionFragment; - "creditFacade()": FunctionFragment; - "creditManager()": FunctionFragment; - "revokeAdapterAllowances((address,address)[])": FunctionFragment; - "revokeAdapterAllowances((address,address)[],address)": FunctionFragment; - "targetContract()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "_gearboxAdapterType" - | "_gearboxAdapterVersion" - | "creditFacade" - | "creditManager" - | "revokeAdapterAllowances((address,address)[])" - | "revokeAdapterAllowances((address,address)[],address)" - | "targetContract" - ): FunctionFragment; - - encodeFunctionData( - functionFragment: "_gearboxAdapterType", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "_gearboxAdapterVersion", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditFacade", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditManager", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "revokeAdapterAllowances((address,address)[])", - values: [RevocationPairStruct[]] - ): string; - encodeFunctionData( - functionFragment: "revokeAdapterAllowances((address,address)[],address)", - values: [RevocationPairStruct[], string] - ): string; - encodeFunctionData( - functionFragment: "targetContract", - values?: undefined - ): string; - - decodeFunctionResult( - functionFragment: "_gearboxAdapterType", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "_gearboxAdapterVersion", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditFacade", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditManager", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "revokeAdapterAllowances((address,address)[])", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "revokeAdapterAllowances((address,address)[],address)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "targetContract", - data: BytesLike - ): Result; - - events: {}; -} - -export interface UniversalAdapter extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: UniversalAdapterInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - _gearboxAdapterType(overrides?: CallOverrides): Promise<[number]>; - - _gearboxAdapterVersion(overrides?: CallOverrides): Promise<[number]>; - - creditFacade(overrides?: CallOverrides): Promise<[string]>; - - creditManager(overrides?: CallOverrides): Promise<[string]>; - - "revokeAdapterAllowances((address,address)[])"( - revocations: RevocationPairStruct[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "revokeAdapterAllowances((address,address)[],address)"( - revocations: RevocationPairStruct[], - expectedCreditAccount: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - targetContract(overrides?: CallOverrides): Promise<[string]>; - }; - - _gearboxAdapterType(overrides?: CallOverrides): Promise; - - _gearboxAdapterVersion(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - "revokeAdapterAllowances((address,address)[])"( - revocations: RevocationPairStruct[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "revokeAdapterAllowances((address,address)[],address)"( - revocations: RevocationPairStruct[], - expectedCreditAccount: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - targetContract(overrides?: CallOverrides): Promise; - - callStatic: { - _gearboxAdapterType(overrides?: CallOverrides): Promise; - - _gearboxAdapterVersion(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - "revokeAdapterAllowances((address,address)[])"( - revocations: RevocationPairStruct[], - overrides?: CallOverrides - ): Promise; - - "revokeAdapterAllowances((address,address)[],address)"( - revocations: RevocationPairStruct[], - expectedCreditAccount: string, - overrides?: CallOverrides - ): Promise; - - targetContract(overrides?: CallOverrides): Promise; - }; - - filters: {}; - - estimateGas: { - _gearboxAdapterType(overrides?: CallOverrides): Promise; - - _gearboxAdapterVersion(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - "revokeAdapterAllowances((address,address)[])"( - revocations: RevocationPairStruct[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "revokeAdapterAllowances((address,address)[],address)"( - revocations: RevocationPairStruct[], - expectedCreditAccount: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - targetContract(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - _gearboxAdapterType( - overrides?: CallOverrides - ): Promise; - - _gearboxAdapterVersion( - overrides?: CallOverrides - ): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - "revokeAdapterAllowances((address,address)[])"( - revocations: RevocationPairStruct[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "revokeAdapterAllowances((address,address)[],address)"( - revocations: RevocationPairStruct[], - expectedCreditAccount: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - targetContract(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/adapters/convex/ConvexV1_BaseRewardPool.sol/ConvexV1BaseRewardPoolAdapter.ts b/src/types/contracts/adapters/convex/ConvexV1_BaseRewardPool.sol/ConvexV1BaseRewardPoolAdapter.ts deleted file mode 100644 index 4bdc7d92..00000000 --- a/src/types/contracts/adapters/convex/ConvexV1_BaseRewardPool.sol/ConvexV1BaseRewardPoolAdapter.ts +++ /dev/null @@ -1,1079 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface ConvexV1BaseRewardPoolAdapterInterface - extends utils.Interface { - functions: { - "_gearboxAdapterType()": FunctionFragment; - "_gearboxAdapterVersion()": FunctionFragment; - "balanceOf(address)": FunctionFragment; - "creditFacade()": FunctionFragment; - "creditManager()": FunctionFragment; - "crv()": FunctionFragment; - "currentRewards()": FunctionFragment; - "curveLPtoken()": FunctionFragment; - "cvx()": FunctionFragment; - "cvxLPtoken()": FunctionFragment; - "donate(uint256)": FunctionFragment; - "duration()": FunctionFragment; - "earned(address)": FunctionFragment; - "extraReward1()": FunctionFragment; - "extraReward2()": FunctionFragment; - "extraRewards(uint256)": FunctionFragment; - "extraRewardsLength()": FunctionFragment; - "getReward()": FunctionFragment; - "getReward(address,bool)": FunctionFragment; - "historicalRewards()": FunctionFragment; - "lastTimeRewardApplicable()": FunctionFragment; - "lastUpdateTime()": FunctionFragment; - "newRewardRatio()": FunctionFragment; - "operator()": FunctionFragment; - "periodFinish()": FunctionFragment; - "pid()": FunctionFragment; - "queuedRewards()": FunctionFragment; - "rewardManager()": FunctionFragment; - "rewardPerToken()": FunctionFragment; - "rewardPerTokenStored()": FunctionFragment; - "rewardRate()": FunctionFragment; - "rewardToken()": FunctionFragment; - "rewards(address)": FunctionFragment; - "stake(uint256)": FunctionFragment; - "stakeAll()": FunctionFragment; - "stakeFor(address,uint256)": FunctionFragment; - "stakedPhantomToken()": FunctionFragment; - "stakingToken()": FunctionFragment; - "targetContract()": FunctionFragment; - "totalSupply()": FunctionFragment; - "userRewardPerTokenPaid(address)": FunctionFragment; - "withdraw(uint256,bool)": FunctionFragment; - "withdrawAll(bool)": FunctionFragment; - "withdrawAllAndUnwrap(bool)": FunctionFragment; - "withdrawAndUnwrap(uint256,bool)": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "_gearboxAdapterType" - | "_gearboxAdapterVersion" - | "balanceOf" - | "creditFacade" - | "creditManager" - | "crv" - | "currentRewards" - | "curveLPtoken" - | "cvx" - | "cvxLPtoken" - | "donate" - | "duration" - | "earned" - | "extraReward1" - | "extraReward2" - | "extraRewards" - | "extraRewardsLength" - | "getReward()" - | "getReward(address,bool)" - | "historicalRewards" - | "lastTimeRewardApplicable" - | "lastUpdateTime" - | "newRewardRatio" - | "operator" - | "periodFinish" - | "pid" - | "queuedRewards" - | "rewardManager" - | "rewardPerToken" - | "rewardPerTokenStored" - | "rewardRate" - | "rewardToken" - | "rewards" - | "stake" - | "stakeAll" - | "stakeFor" - | "stakedPhantomToken" - | "stakingToken" - | "targetContract" - | "totalSupply" - | "userRewardPerTokenPaid" - | "withdraw" - | "withdrawAll" - | "withdrawAllAndUnwrap" - | "withdrawAndUnwrap" - ): FunctionFragment; - - encodeFunctionData( - functionFragment: "_gearboxAdapterType", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "_gearboxAdapterVersion", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "balanceOf", values: [string]): string; - encodeFunctionData( - functionFragment: "creditFacade", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditManager", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "crv", values?: undefined): string; - encodeFunctionData( - functionFragment: "currentRewards", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "curveLPtoken", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "cvx", values?: undefined): string; - encodeFunctionData( - functionFragment: "cvxLPtoken", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "donate", - values: [BigNumberish] - ): string; - encodeFunctionData(functionFragment: "duration", values?: undefined): string; - encodeFunctionData(functionFragment: "earned", values: [string]): string; - encodeFunctionData( - functionFragment: "extraReward1", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "extraReward2", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "extraRewards", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "extraRewardsLength", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "getReward()", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "getReward(address,bool)", - values: [string, boolean] - ): string; - encodeFunctionData( - functionFragment: "historicalRewards", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "lastTimeRewardApplicable", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "lastUpdateTime", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "newRewardRatio", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "operator", values?: undefined): string; - encodeFunctionData( - functionFragment: "periodFinish", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "pid", values?: undefined): string; - encodeFunctionData( - functionFragment: "queuedRewards", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "rewardManager", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "rewardPerToken", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "rewardPerTokenStored", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "rewardRate", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "rewardToken", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "rewards", values: [string]): string; - encodeFunctionData(functionFragment: "stake", values: [BigNumberish]): string; - encodeFunctionData(functionFragment: "stakeAll", values?: undefined): string; - encodeFunctionData( - functionFragment: "stakeFor", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "stakedPhantomToken", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "stakingToken", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "targetContract", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "totalSupply", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "userRewardPerTokenPaid", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "withdraw", - values: [BigNumberish, boolean] - ): string; - encodeFunctionData( - functionFragment: "withdrawAll", - values: [boolean] - ): string; - encodeFunctionData( - functionFragment: "withdrawAllAndUnwrap", - values: [boolean] - ): string; - encodeFunctionData( - functionFragment: "withdrawAndUnwrap", - values: [BigNumberish, boolean] - ): string; - - decodeFunctionResult( - functionFragment: "_gearboxAdapterType", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "_gearboxAdapterVersion", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "creditFacade", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditManager", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "crv", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "currentRewards", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "curveLPtoken", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "cvx", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "cvxLPtoken", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "donate", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "duration", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "earned", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "extraReward1", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "extraReward2", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "extraRewards", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "extraRewardsLength", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getReward()", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getReward(address,bool)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "historicalRewards", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "lastTimeRewardApplicable", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "lastUpdateTime", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "newRewardRatio", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "operator", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "periodFinish", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "pid", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "queuedRewards", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "rewardManager", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "rewardPerToken", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "rewardPerTokenStored", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "rewardRate", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "rewardToken", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "rewards", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "stake", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "stakeAll", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "stakeFor", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "stakedPhantomToken", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "stakingToken", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "targetContract", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "totalSupply", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "userRewardPerTokenPaid", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "withdraw", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "withdrawAll", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "withdrawAllAndUnwrap", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "withdrawAndUnwrap", - data: BytesLike - ): Result; - - events: {}; -} - -export interface ConvexV1BaseRewardPoolAdapter extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: ConvexV1BaseRewardPoolAdapterInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - _gearboxAdapterType(overrides?: CallOverrides): Promise<[number]>; - - _gearboxAdapterVersion(overrides?: CallOverrides): Promise<[number]>; - - balanceOf(account: string, overrides?: CallOverrides): Promise<[BigNumber]>; - - creditFacade(overrides?: CallOverrides): Promise<[string]>; - - creditManager(overrides?: CallOverrides): Promise<[string]>; - - crv(overrides?: CallOverrides): Promise<[string]>; - - currentRewards(overrides?: CallOverrides): Promise<[BigNumber]>; - - curveLPtoken(overrides?: CallOverrides): Promise<[string]>; - - cvx(overrides?: CallOverrides): Promise<[string]>; - - cvxLPtoken(overrides?: CallOverrides): Promise<[string]>; - - donate(arg0: BigNumberish, overrides?: CallOverrides): Promise<[boolean]>; - - duration(overrides?: CallOverrides): Promise<[BigNumber]>; - - earned(account: string, overrides?: CallOverrides): Promise<[BigNumber]>; - - extraReward1(overrides?: CallOverrides): Promise<[string]>; - - extraReward2(overrides?: CallOverrides): Promise<[string]>; - - extraRewards(i: BigNumberish, overrides?: CallOverrides): Promise<[string]>; - - extraRewardsLength(overrides?: CallOverrides): Promise<[BigNumber]>; - - "getReward()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "getReward(address,bool)"( - _account: string, - _claimExtras: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - historicalRewards(overrides?: CallOverrides): Promise<[BigNumber]>; - - lastTimeRewardApplicable(overrides?: CallOverrides): Promise<[BigNumber]>; - - lastUpdateTime(overrides?: CallOverrides): Promise<[BigNumber]>; - - newRewardRatio(overrides?: CallOverrides): Promise<[BigNumber]>; - - operator(overrides?: CallOverrides): Promise<[string]>; - - periodFinish(overrides?: CallOverrides): Promise<[BigNumber]>; - - pid(overrides?: CallOverrides): Promise<[BigNumber]>; - - queuedRewards(overrides?: CallOverrides): Promise<[BigNumber]>; - - rewardManager(overrides?: CallOverrides): Promise<[string]>; - - rewardPerToken(overrides?: CallOverrides): Promise<[BigNumber]>; - - rewardPerTokenStored(overrides?: CallOverrides): Promise<[BigNumber]>; - - rewardRate(overrides?: CallOverrides): Promise<[BigNumber]>; - - rewardToken(overrides?: CallOverrides): Promise<[string]>; - - rewards(account: string, overrides?: CallOverrides): Promise<[BigNumber]>; - - stake( - arg0: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - stakeAll( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - stakeFor( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise<[boolean]>; - - stakedPhantomToken(overrides?: CallOverrides): Promise<[string]>; - - stakingToken(overrides?: CallOverrides): Promise<[string]>; - - targetContract(overrides?: CallOverrides): Promise<[string]>; - - totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>; - - userRewardPerTokenPaid( - account: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - withdraw( - arg0: BigNumberish, - claim: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdrawAll( - claim: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdrawAllAndUnwrap( - claim: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdrawAndUnwrap( - arg0: BigNumberish, - claim: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - _gearboxAdapterType(overrides?: CallOverrides): Promise; - - _gearboxAdapterVersion(overrides?: CallOverrides): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - crv(overrides?: CallOverrides): Promise; - - currentRewards(overrides?: CallOverrides): Promise; - - curveLPtoken(overrides?: CallOverrides): Promise; - - cvx(overrides?: CallOverrides): Promise; - - cvxLPtoken(overrides?: CallOverrides): Promise; - - donate(arg0: BigNumberish, overrides?: CallOverrides): Promise; - - duration(overrides?: CallOverrides): Promise; - - earned(account: string, overrides?: CallOverrides): Promise; - - extraReward1(overrides?: CallOverrides): Promise; - - extraReward2(overrides?: CallOverrides): Promise; - - extraRewards(i: BigNumberish, overrides?: CallOverrides): Promise; - - extraRewardsLength(overrides?: CallOverrides): Promise; - - "getReward()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "getReward(address,bool)"( - _account: string, - _claimExtras: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - historicalRewards(overrides?: CallOverrides): Promise; - - lastTimeRewardApplicable(overrides?: CallOverrides): Promise; - - lastUpdateTime(overrides?: CallOverrides): Promise; - - newRewardRatio(overrides?: CallOverrides): Promise; - - operator(overrides?: CallOverrides): Promise; - - periodFinish(overrides?: CallOverrides): Promise; - - pid(overrides?: CallOverrides): Promise; - - queuedRewards(overrides?: CallOverrides): Promise; - - rewardManager(overrides?: CallOverrides): Promise; - - rewardPerToken(overrides?: CallOverrides): Promise; - - rewardPerTokenStored(overrides?: CallOverrides): Promise; - - rewardRate(overrides?: CallOverrides): Promise; - - rewardToken(overrides?: CallOverrides): Promise; - - rewards(account: string, overrides?: CallOverrides): Promise; - - stake( - arg0: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - stakeAll( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - stakeFor( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - stakedPhantomToken(overrides?: CallOverrides): Promise; - - stakingToken(overrides?: CallOverrides): Promise; - - targetContract(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - userRewardPerTokenPaid( - account: string, - overrides?: CallOverrides - ): Promise; - - withdraw( - arg0: BigNumberish, - claim: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdrawAll( - claim: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdrawAllAndUnwrap( - claim: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdrawAndUnwrap( - arg0: BigNumberish, - claim: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - _gearboxAdapterType(overrides?: CallOverrides): Promise; - - _gearboxAdapterVersion(overrides?: CallOverrides): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - crv(overrides?: CallOverrides): Promise; - - currentRewards(overrides?: CallOverrides): Promise; - - curveLPtoken(overrides?: CallOverrides): Promise; - - cvx(overrides?: CallOverrides): Promise; - - cvxLPtoken(overrides?: CallOverrides): Promise; - - donate(arg0: BigNumberish, overrides?: CallOverrides): Promise; - - duration(overrides?: CallOverrides): Promise; - - earned(account: string, overrides?: CallOverrides): Promise; - - extraReward1(overrides?: CallOverrides): Promise; - - extraReward2(overrides?: CallOverrides): Promise; - - extraRewards(i: BigNumberish, overrides?: CallOverrides): Promise; - - extraRewardsLength(overrides?: CallOverrides): Promise; - - "getReward()"(overrides?: CallOverrides): Promise; - - "getReward(address,bool)"( - _account: string, - _claimExtras: boolean, - overrides?: CallOverrides - ): Promise; - - historicalRewards(overrides?: CallOverrides): Promise; - - lastTimeRewardApplicable(overrides?: CallOverrides): Promise; - - lastUpdateTime(overrides?: CallOverrides): Promise; - - newRewardRatio(overrides?: CallOverrides): Promise; - - operator(overrides?: CallOverrides): Promise; - - periodFinish(overrides?: CallOverrides): Promise; - - pid(overrides?: CallOverrides): Promise; - - queuedRewards(overrides?: CallOverrides): Promise; - - rewardManager(overrides?: CallOverrides): Promise; - - rewardPerToken(overrides?: CallOverrides): Promise; - - rewardPerTokenStored(overrides?: CallOverrides): Promise; - - rewardRate(overrides?: CallOverrides): Promise; - - rewardToken(overrides?: CallOverrides): Promise; - - rewards(account: string, overrides?: CallOverrides): Promise; - - stake(arg0: BigNumberish, overrides?: CallOverrides): Promise; - - stakeAll(overrides?: CallOverrides): Promise; - - stakeFor( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - stakedPhantomToken(overrides?: CallOverrides): Promise; - - stakingToken(overrides?: CallOverrides): Promise; - - targetContract(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - userRewardPerTokenPaid( - account: string, - overrides?: CallOverrides - ): Promise; - - withdraw( - arg0: BigNumberish, - claim: boolean, - overrides?: CallOverrides - ): Promise; - - withdrawAll(claim: boolean, overrides?: CallOverrides): Promise; - - withdrawAllAndUnwrap( - claim: boolean, - overrides?: CallOverrides - ): Promise; - - withdrawAndUnwrap( - arg0: BigNumberish, - claim: boolean, - overrides?: CallOverrides - ): Promise; - }; - - filters: {}; - - estimateGas: { - _gearboxAdapterType(overrides?: CallOverrides): Promise; - - _gearboxAdapterVersion(overrides?: CallOverrides): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - crv(overrides?: CallOverrides): Promise; - - currentRewards(overrides?: CallOverrides): Promise; - - curveLPtoken(overrides?: CallOverrides): Promise; - - cvx(overrides?: CallOverrides): Promise; - - cvxLPtoken(overrides?: CallOverrides): Promise; - - donate(arg0: BigNumberish, overrides?: CallOverrides): Promise; - - duration(overrides?: CallOverrides): Promise; - - earned(account: string, overrides?: CallOverrides): Promise; - - extraReward1(overrides?: CallOverrides): Promise; - - extraReward2(overrides?: CallOverrides): Promise; - - extraRewards( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - extraRewardsLength(overrides?: CallOverrides): Promise; - - "getReward()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "getReward(address,bool)"( - _account: string, - _claimExtras: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - historicalRewards(overrides?: CallOverrides): Promise; - - lastTimeRewardApplicable(overrides?: CallOverrides): Promise; - - lastUpdateTime(overrides?: CallOverrides): Promise; - - newRewardRatio(overrides?: CallOverrides): Promise; - - operator(overrides?: CallOverrides): Promise; - - periodFinish(overrides?: CallOverrides): Promise; - - pid(overrides?: CallOverrides): Promise; - - queuedRewards(overrides?: CallOverrides): Promise; - - rewardManager(overrides?: CallOverrides): Promise; - - rewardPerToken(overrides?: CallOverrides): Promise; - - rewardPerTokenStored(overrides?: CallOverrides): Promise; - - rewardRate(overrides?: CallOverrides): Promise; - - rewardToken(overrides?: CallOverrides): Promise; - - rewards(account: string, overrides?: CallOverrides): Promise; - - stake( - arg0: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - stakeAll( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - stakeFor( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - stakedPhantomToken(overrides?: CallOverrides): Promise; - - stakingToken(overrides?: CallOverrides): Promise; - - targetContract(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - userRewardPerTokenPaid( - account: string, - overrides?: CallOverrides - ): Promise; - - withdraw( - arg0: BigNumberish, - claim: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdrawAll( - claim: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdrawAllAndUnwrap( - claim: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdrawAndUnwrap( - arg0: BigNumberish, - claim: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - _gearboxAdapterType( - overrides?: CallOverrides - ): Promise; - - _gearboxAdapterVersion( - overrides?: CallOverrides - ): Promise; - - balanceOf( - account: string, - overrides?: CallOverrides - ): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - crv(overrides?: CallOverrides): Promise; - - currentRewards(overrides?: CallOverrides): Promise; - - curveLPtoken(overrides?: CallOverrides): Promise; - - cvx(overrides?: CallOverrides): Promise; - - cvxLPtoken(overrides?: CallOverrides): Promise; - - donate( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - duration(overrides?: CallOverrides): Promise; - - earned( - account: string, - overrides?: CallOverrides - ): Promise; - - extraReward1(overrides?: CallOverrides): Promise; - - extraReward2(overrides?: CallOverrides): Promise; - - extraRewards( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - extraRewardsLength( - overrides?: CallOverrides - ): Promise; - - "getReward()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "getReward(address,bool)"( - _account: string, - _claimExtras: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - historicalRewards(overrides?: CallOverrides): Promise; - - lastTimeRewardApplicable( - overrides?: CallOverrides - ): Promise; - - lastUpdateTime(overrides?: CallOverrides): Promise; - - newRewardRatio(overrides?: CallOverrides): Promise; - - operator(overrides?: CallOverrides): Promise; - - periodFinish(overrides?: CallOverrides): Promise; - - pid(overrides?: CallOverrides): Promise; - - queuedRewards(overrides?: CallOverrides): Promise; - - rewardManager(overrides?: CallOverrides): Promise; - - rewardPerToken(overrides?: CallOverrides): Promise; - - rewardPerTokenStored( - overrides?: CallOverrides - ): Promise; - - rewardRate(overrides?: CallOverrides): Promise; - - rewardToken(overrides?: CallOverrides): Promise; - - rewards( - account: string, - overrides?: CallOverrides - ): Promise; - - stake( - arg0: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - stakeAll( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - stakeFor( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - stakedPhantomToken( - overrides?: CallOverrides - ): Promise; - - stakingToken(overrides?: CallOverrides): Promise; - - targetContract(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - userRewardPerTokenPaid( - account: string, - overrides?: CallOverrides - ): Promise; - - withdraw( - arg0: BigNumberish, - claim: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdrawAll( - claim: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdrawAllAndUnwrap( - claim: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdrawAndUnwrap( - arg0: BigNumberish, - claim: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/src/types/contracts/adapters/convex/ConvexV1_BaseRewardPool.sol/index.ts b/src/types/contracts/adapters/convex/ConvexV1_BaseRewardPool.sol/index.ts deleted file mode 100644 index 7d8d019d..00000000 --- a/src/types/contracts/adapters/convex/ConvexV1_BaseRewardPool.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { ConvexV1BaseRewardPoolAdapter } from "./ConvexV1BaseRewardPoolAdapter"; diff --git a/src/types/contracts/adapters/convex/ConvexV1_Booster.sol/ConvexV1BoosterAdapter.ts b/src/types/contracts/adapters/convex/ConvexV1_Booster.sol/ConvexV1BoosterAdapter.ts deleted file mode 100644 index 033d7b28..00000000 --- a/src/types/contracts/adapters/convex/ConvexV1_Booster.sol/ConvexV1BoosterAdapter.ts +++ /dev/null @@ -1,676 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export declare namespace IBooster { - export type PoolInfoStruct = { - lptoken: string; - token: string; - gauge: string; - crvRewards: string; - stash: string; - shutdown: boolean; - }; - - export type PoolInfoStructOutput = [ - string, - string, - string, - string, - string, - boolean - ] & { - lptoken: string; - token: string; - gauge: string; - crvRewards: string; - stash: string; - shutdown: boolean; - }; -} - -export interface ConvexV1BoosterAdapterInterface extends utils.Interface { - functions: { - "_acl()": FunctionFragment; - "_gearboxAdapterType()": FunctionFragment; - "_gearboxAdapterVersion()": FunctionFragment; - "creditFacade()": FunctionFragment; - "creditManager()": FunctionFragment; - "crv()": FunctionFragment; - "deposit(uint256,uint256,bool)": FunctionFragment; - "depositAll(uint256,bool)": FunctionFragment; - "lockFees()": FunctionFragment; - "lockRewards()": FunctionFragment; - "minter()": FunctionFragment; - "pause()": FunctionFragment; - "paused()": FunctionFragment; - "pidToPhantomToken(uint256)": FunctionFragment; - "poolInfo(uint256)": FunctionFragment; - "poolLength()": FunctionFragment; - "registry()": FunctionFragment; - "staker()": FunctionFragment; - "stakerRewards()": FunctionFragment; - "targetContract()": FunctionFragment; - "unpause()": FunctionFragment; - "updateStakedPhantomTokensMap()": FunctionFragment; - "withdraw(uint256,uint256)": FunctionFragment; - "withdrawAll(uint256)": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "_acl" - | "_gearboxAdapterType" - | "_gearboxAdapterVersion" - | "creditFacade" - | "creditManager" - | "crv" - | "deposit" - | "depositAll" - | "lockFees" - | "lockRewards" - | "minter" - | "pause" - | "paused" - | "pidToPhantomToken" - | "poolInfo" - | "poolLength" - | "registry" - | "staker" - | "stakerRewards" - | "targetContract" - | "unpause" - | "updateStakedPhantomTokensMap" - | "withdraw" - | "withdrawAll" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "_acl", values?: undefined): string; - encodeFunctionData( - functionFragment: "_gearboxAdapterType", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "_gearboxAdapterVersion", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditFacade", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditManager", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "crv", values?: undefined): string; - encodeFunctionData( - functionFragment: "deposit", - values: [BigNumberish, BigNumberish, boolean] - ): string; - encodeFunctionData( - functionFragment: "depositAll", - values: [BigNumberish, boolean] - ): string; - encodeFunctionData(functionFragment: "lockFees", values?: undefined): string; - encodeFunctionData( - functionFragment: "lockRewards", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "minter", values?: undefined): string; - encodeFunctionData(functionFragment: "pause", values?: undefined): string; - encodeFunctionData(functionFragment: "paused", values?: undefined): string; - encodeFunctionData( - functionFragment: "pidToPhantomToken", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "poolInfo", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "poolLength", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "registry", values?: undefined): string; - encodeFunctionData(functionFragment: "staker", values?: undefined): string; - encodeFunctionData( - functionFragment: "stakerRewards", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "targetContract", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "unpause", values?: undefined): string; - encodeFunctionData( - functionFragment: "updateStakedPhantomTokensMap", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "withdraw", - values: [BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "withdrawAll", - values: [BigNumberish] - ): string; - - decodeFunctionResult(functionFragment: "_acl", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "_gearboxAdapterType", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "_gearboxAdapterVersion", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditFacade", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditManager", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "crv", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "deposit", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "depositAll", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "lockFees", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "lockRewards", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "minter", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "pause", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "paused", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "pidToPhantomToken", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "poolInfo", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "poolLength", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "registry", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "staker", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "stakerRewards", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "targetContract", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "unpause", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "updateStakedPhantomTokensMap", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "withdraw", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "withdrawAll", - data: BytesLike - ): Result; - - events: { - "Paused(address)": EventFragment; - "Unpaused(address)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "Paused"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Unpaused"): EventFragment; -} - -export interface PausedEventObject { - account: string; -} -export type PausedEvent = TypedEvent<[string], PausedEventObject>; - -export type PausedEventFilter = TypedEventFilter; - -export interface UnpausedEventObject { - account: string; -} -export type UnpausedEvent = TypedEvent<[string], UnpausedEventObject>; - -export type UnpausedEventFilter = TypedEventFilter; - -export interface ConvexV1BoosterAdapter extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: ConvexV1BoosterAdapterInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - _acl(overrides?: CallOverrides): Promise<[string]>; - - _gearboxAdapterType(overrides?: CallOverrides): Promise<[number]>; - - _gearboxAdapterVersion(overrides?: CallOverrides): Promise<[number]>; - - creditFacade(overrides?: CallOverrides): Promise<[string]>; - - creditManager(overrides?: CallOverrides): Promise<[string]>; - - crv(overrides?: CallOverrides): Promise<[string]>; - - deposit( - _pid: BigNumberish, - arg1: BigNumberish, - _stake: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - depositAll( - _pid: BigNumberish, - _stake: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - lockFees(overrides?: CallOverrides): Promise<[string]>; - - lockRewards(overrides?: CallOverrides): Promise<[string]>; - - minter(overrides?: CallOverrides): Promise<[string]>; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise<[boolean]>; - - pidToPhantomToken( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - poolInfo( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[IBooster.PoolInfoStructOutput]>; - - poolLength(overrides?: CallOverrides): Promise<[BigNumber]>; - - registry(overrides?: CallOverrides): Promise<[string]>; - - staker(overrides?: CallOverrides): Promise<[string]>; - - stakerRewards(overrides?: CallOverrides): Promise<[string]>; - - targetContract(overrides?: CallOverrides): Promise<[string]>; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - updateStakedPhantomTokensMap( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdraw( - _pid: BigNumberish, - arg1: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdrawAll( - _pid: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - _acl(overrides?: CallOverrides): Promise; - - _gearboxAdapterType(overrides?: CallOverrides): Promise; - - _gearboxAdapterVersion(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - crv(overrides?: CallOverrides): Promise; - - deposit( - _pid: BigNumberish, - arg1: BigNumberish, - _stake: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - depositAll( - _pid: BigNumberish, - _stake: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - lockFees(overrides?: CallOverrides): Promise; - - lockRewards(overrides?: CallOverrides): Promise; - - minter(overrides?: CallOverrides): Promise; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise; - - pidToPhantomToken( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - poolInfo( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - poolLength(overrides?: CallOverrides): Promise; - - registry(overrides?: CallOverrides): Promise; - - staker(overrides?: CallOverrides): Promise; - - stakerRewards(overrides?: CallOverrides): Promise; - - targetContract(overrides?: CallOverrides): Promise; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - updateStakedPhantomTokensMap( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdraw( - _pid: BigNumberish, - arg1: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdrawAll( - _pid: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - _acl(overrides?: CallOverrides): Promise; - - _gearboxAdapterType(overrides?: CallOverrides): Promise; - - _gearboxAdapterVersion(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - crv(overrides?: CallOverrides): Promise; - - deposit( - _pid: BigNumberish, - arg1: BigNumberish, - _stake: boolean, - overrides?: CallOverrides - ): Promise; - - depositAll( - _pid: BigNumberish, - _stake: boolean, - overrides?: CallOverrides - ): Promise; - - lockFees(overrides?: CallOverrides): Promise; - - lockRewards(overrides?: CallOverrides): Promise; - - minter(overrides?: CallOverrides): Promise; - - pause(overrides?: CallOverrides): Promise; - - paused(overrides?: CallOverrides): Promise; - - pidToPhantomToken( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - poolInfo( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - poolLength(overrides?: CallOverrides): Promise; - - registry(overrides?: CallOverrides): Promise; - - staker(overrides?: CallOverrides): Promise; - - stakerRewards(overrides?: CallOverrides): Promise; - - targetContract(overrides?: CallOverrides): Promise; - - unpause(overrides?: CallOverrides): Promise; - - updateStakedPhantomTokensMap(overrides?: CallOverrides): Promise; - - withdraw( - _pid: BigNumberish, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - withdrawAll( - _pid: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - "Paused(address)"(account?: null): PausedEventFilter; - Paused(account?: null): PausedEventFilter; - - "Unpaused(address)"(account?: null): UnpausedEventFilter; - Unpaused(account?: null): UnpausedEventFilter; - }; - - estimateGas: { - _acl(overrides?: CallOverrides): Promise; - - _gearboxAdapterType(overrides?: CallOverrides): Promise; - - _gearboxAdapterVersion(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - crv(overrides?: CallOverrides): Promise; - - deposit( - _pid: BigNumberish, - arg1: BigNumberish, - _stake: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - depositAll( - _pid: BigNumberish, - _stake: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - lockFees(overrides?: CallOverrides): Promise; - - lockRewards(overrides?: CallOverrides): Promise; - - minter(overrides?: CallOverrides): Promise; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise; - - pidToPhantomToken( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - poolInfo(i: BigNumberish, overrides?: CallOverrides): Promise; - - poolLength(overrides?: CallOverrides): Promise; - - registry(overrides?: CallOverrides): Promise; - - staker(overrides?: CallOverrides): Promise; - - stakerRewards(overrides?: CallOverrides): Promise; - - targetContract(overrides?: CallOverrides): Promise; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - updateStakedPhantomTokensMap( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdraw( - _pid: BigNumberish, - arg1: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdrawAll( - _pid: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - _acl(overrides?: CallOverrides): Promise; - - _gearboxAdapterType( - overrides?: CallOverrides - ): Promise; - - _gearboxAdapterVersion( - overrides?: CallOverrides - ): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - crv(overrides?: CallOverrides): Promise; - - deposit( - _pid: BigNumberish, - arg1: BigNumberish, - _stake: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - depositAll( - _pid: BigNumberish, - _stake: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - lockFees(overrides?: CallOverrides): Promise; - - lockRewards(overrides?: CallOverrides): Promise; - - minter(overrides?: CallOverrides): Promise; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise; - - pidToPhantomToken( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - poolInfo( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - poolLength(overrides?: CallOverrides): Promise; - - registry(overrides?: CallOverrides): Promise; - - staker(overrides?: CallOverrides): Promise; - - stakerRewards(overrides?: CallOverrides): Promise; - - targetContract(overrides?: CallOverrides): Promise; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - updateStakedPhantomTokensMap( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdraw( - _pid: BigNumberish, - arg1: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdrawAll( - _pid: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/src/types/contracts/adapters/convex/ConvexV1_Booster.sol/index.ts b/src/types/contracts/adapters/convex/ConvexV1_Booster.sol/index.ts deleted file mode 100644 index 7d490da2..00000000 --- a/src/types/contracts/adapters/convex/ConvexV1_Booster.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { ConvexV1BoosterAdapter } from "./ConvexV1BoosterAdapter"; diff --git a/src/types/contracts/adapters/convex/ConvexV1_ClaimZap.sol/ConvexV1ClaimZapAdapter.ts b/src/types/contracts/adapters/convex/ConvexV1_ClaimZap.sol/ConvexV1ClaimZapAdapter.ts deleted file mode 100644 index 3cfed517..00000000 --- a/src/types/contracts/adapters/convex/ConvexV1_ClaimZap.sol/ConvexV1ClaimZapAdapter.ts +++ /dev/null @@ -1,290 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface ConvexV1ClaimZapAdapterInterface extends utils.Interface { - functions: { - "_gearboxAdapterType()": FunctionFragment; - "_gearboxAdapterVersion()": FunctionFragment; - "claimRewards(address[],address[],address[],address[],uint256,uint256,uint256,uint256,uint256)": FunctionFragment; - "creditFacade()": FunctionFragment; - "creditManager()": FunctionFragment; - "crv()": FunctionFragment; - "cvx()": FunctionFragment; - "targetContract()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "_gearboxAdapterType" - | "_gearboxAdapterVersion" - | "claimRewards" - | "creditFacade" - | "creditManager" - | "crv" - | "cvx" - | "targetContract" - ): FunctionFragment; - - encodeFunctionData( - functionFragment: "_gearboxAdapterType", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "_gearboxAdapterVersion", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "claimRewards", - values: [ - string[], - string[], - string[], - string[], - BigNumberish, - BigNumberish, - BigNumberish, - BigNumberish, - BigNumberish - ] - ): string; - encodeFunctionData( - functionFragment: "creditFacade", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditManager", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "crv", values?: undefined): string; - encodeFunctionData(functionFragment: "cvx", values?: undefined): string; - encodeFunctionData( - functionFragment: "targetContract", - values?: undefined - ): string; - - decodeFunctionResult( - functionFragment: "_gearboxAdapterType", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "_gearboxAdapterVersion", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "claimRewards", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditFacade", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditManager", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "crv", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "cvx", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "targetContract", - data: BytesLike - ): Result; - - events: {}; -} - -export interface ConvexV1ClaimZapAdapter extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: ConvexV1ClaimZapAdapterInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - _gearboxAdapterType(overrides?: CallOverrides): Promise<[number]>; - - _gearboxAdapterVersion(overrides?: CallOverrides): Promise<[number]>; - - claimRewards( - rewardContracts: string[], - extraRewardContracts: string[], - tokenRewardContracts: string[], - tokenRewardTokens: string[], - arg4: BigNumberish, - arg5: BigNumberish, - arg6: BigNumberish, - arg7: BigNumberish, - arg8: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - creditFacade(overrides?: CallOverrides): Promise<[string]>; - - creditManager(overrides?: CallOverrides): Promise<[string]>; - - crv(overrides?: CallOverrides): Promise<[string]>; - - cvx(overrides?: CallOverrides): Promise<[string]>; - - targetContract(overrides?: CallOverrides): Promise<[string]>; - }; - - _gearboxAdapterType(overrides?: CallOverrides): Promise; - - _gearboxAdapterVersion(overrides?: CallOverrides): Promise; - - claimRewards( - rewardContracts: string[], - extraRewardContracts: string[], - tokenRewardContracts: string[], - tokenRewardTokens: string[], - arg4: BigNumberish, - arg5: BigNumberish, - arg6: BigNumberish, - arg7: BigNumberish, - arg8: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - crv(overrides?: CallOverrides): Promise; - - cvx(overrides?: CallOverrides): Promise; - - targetContract(overrides?: CallOverrides): Promise; - - callStatic: { - _gearboxAdapterType(overrides?: CallOverrides): Promise; - - _gearboxAdapterVersion(overrides?: CallOverrides): Promise; - - claimRewards( - rewardContracts: string[], - extraRewardContracts: string[], - tokenRewardContracts: string[], - tokenRewardTokens: string[], - arg4: BigNumberish, - arg5: BigNumberish, - arg6: BigNumberish, - arg7: BigNumberish, - arg8: BigNumberish, - overrides?: CallOverrides - ): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - crv(overrides?: CallOverrides): Promise; - - cvx(overrides?: CallOverrides): Promise; - - targetContract(overrides?: CallOverrides): Promise; - }; - - filters: {}; - - estimateGas: { - _gearboxAdapterType(overrides?: CallOverrides): Promise; - - _gearboxAdapterVersion(overrides?: CallOverrides): Promise; - - claimRewards( - rewardContracts: string[], - extraRewardContracts: string[], - tokenRewardContracts: string[], - tokenRewardTokens: string[], - arg4: BigNumberish, - arg5: BigNumberish, - arg6: BigNumberish, - arg7: BigNumberish, - arg8: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - crv(overrides?: CallOverrides): Promise; - - cvx(overrides?: CallOverrides): Promise; - - targetContract(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - _gearboxAdapterType( - overrides?: CallOverrides - ): Promise; - - _gearboxAdapterVersion( - overrides?: CallOverrides - ): Promise; - - claimRewards( - rewardContracts: string[], - extraRewardContracts: string[], - tokenRewardContracts: string[], - tokenRewardTokens: string[], - arg4: BigNumberish, - arg5: BigNumberish, - arg6: BigNumberish, - arg7: BigNumberish, - arg8: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - crv(overrides?: CallOverrides): Promise; - - cvx(overrides?: CallOverrides): Promise; - - targetContract(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/adapters/convex/ConvexV1_ClaimZap.sol/index.ts b/src/types/contracts/adapters/convex/ConvexV1_ClaimZap.sol/index.ts deleted file mode 100644 index 03c7d1f8..00000000 --- a/src/types/contracts/adapters/convex/ConvexV1_ClaimZap.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { ConvexV1ClaimZapAdapter } from "./ConvexV1ClaimZapAdapter"; diff --git a/src/types/contracts/adapters/convex/ConvexV1_StakedPositionToken.sol/ConvexStakedPositionToken.ts b/src/types/contracts/adapters/convex/ConvexV1_StakedPositionToken.sol/ConvexStakedPositionToken.ts deleted file mode 100644 index 95b36381..00000000 --- a/src/types/contracts/adapters/convex/ConvexV1_StakedPositionToken.sol/ConvexStakedPositionToken.ts +++ /dev/null @@ -1,393 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface ConvexStakedPositionTokenInterface extends utils.Interface { - functions: { - "allowance(address,address)": FunctionFragment; - "approve(address,uint256)": FunctionFragment; - "balanceOf(address)": FunctionFragment; - "decimals()": FunctionFragment; - "name()": FunctionFragment; - "pool()": FunctionFragment; - "symbol()": FunctionFragment; - "totalSupply()": FunctionFragment; - "transfer(address,uint256)": FunctionFragment; - "transferFrom(address,address,uint256)": FunctionFragment; - "underlying()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "allowance" - | "approve" - | "balanceOf" - | "decimals" - | "name" - | "pool" - | "symbol" - | "totalSupply" - | "transfer" - | "transferFrom" - | "underlying" - ): FunctionFragment; - - encodeFunctionData( - functionFragment: "allowance", - values: [string, string] - ): string; - encodeFunctionData( - functionFragment: "approve", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "balanceOf", values: [string]): string; - encodeFunctionData(functionFragment: "decimals", values?: undefined): string; - encodeFunctionData(functionFragment: "name", values?: undefined): string; - encodeFunctionData(functionFragment: "pool", values?: undefined): string; - encodeFunctionData(functionFragment: "symbol", values?: undefined): string; - encodeFunctionData( - functionFragment: "totalSupply", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "transfer", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "transferFrom", - values: [string, string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "underlying", - values?: undefined - ): string; - - decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "pool", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "totalSupply", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "transfer", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "transferFrom", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "underlying", data: BytesLike): Result; - - events: { - "Approval(address,address,uint256)": EventFragment; - "Transfer(address,address,uint256)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "Approval"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment; -} - -export interface ApprovalEventObject { - owner: string; - spender: string; - value: BigNumber; -} -export type ApprovalEvent = TypedEvent< - [string, string, BigNumber], - ApprovalEventObject ->; - -export type ApprovalEventFilter = TypedEventFilter; - -export interface TransferEventObject { - from: string; - to: string; - value: BigNumber; -} -export type TransferEvent = TypedEvent< - [string, string, BigNumber], - TransferEventObject ->; - -export type TransferEventFilter = TypedEventFilter; - -export interface ConvexStakedPositionToken extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: ConvexStakedPositionTokenInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - allowance( - arg0: string, - arg1: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - approve( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise<[boolean]>; - - balanceOf(account: string, overrides?: CallOverrides): Promise<[BigNumber]>; - - decimals(overrides?: CallOverrides): Promise<[number]>; - - name(overrides?: CallOverrides): Promise<[string]>; - - pool(overrides?: CallOverrides): Promise<[string]>; - - symbol(overrides?: CallOverrides): Promise<[string]>; - - totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>; - - transfer( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise<[boolean]>; - - transferFrom( - arg0: string, - arg1: string, - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise<[boolean]>; - - underlying(overrides?: CallOverrides): Promise<[string]>; - }; - - allowance( - arg0: string, - arg1: string, - overrides?: CallOverrides - ): Promise; - - approve( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - name(overrides?: CallOverrides): Promise; - - pool(overrides?: CallOverrides): Promise; - - symbol(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - transfer( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transferFrom( - arg0: string, - arg1: string, - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - - callStatic: { - allowance( - arg0: string, - arg1: string, - overrides?: CallOverrides - ): Promise; - - approve( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - name(overrides?: CallOverrides): Promise; - - pool(overrides?: CallOverrides): Promise; - - symbol(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - transfer( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transferFrom( - arg0: string, - arg1: string, - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - }; - - filters: { - "Approval(address,address,uint256)"( - owner?: string | null, - spender?: string | null, - value?: null - ): ApprovalEventFilter; - Approval( - owner?: string | null, - spender?: string | null, - value?: null - ): ApprovalEventFilter; - - "Transfer(address,address,uint256)"( - from?: string | null, - to?: string | null, - value?: null - ): TransferEventFilter; - Transfer( - from?: string | null, - to?: string | null, - value?: null - ): TransferEventFilter; - }; - - estimateGas: { - allowance( - arg0: string, - arg1: string, - overrides?: CallOverrides - ): Promise; - - approve( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - name(overrides?: CallOverrides): Promise; - - pool(overrides?: CallOverrides): Promise; - - symbol(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - transfer( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transferFrom( - arg0: string, - arg1: string, - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - allowance( - arg0: string, - arg1: string, - overrides?: CallOverrides - ): Promise; - - approve( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - balanceOf( - account: string, - overrides?: CallOverrides - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - name(overrides?: CallOverrides): Promise; - - pool(overrides?: CallOverrides): Promise; - - symbol(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - transfer( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transferFrom( - arg0: string, - arg1: string, - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/adapters/convex/ConvexV1_StakedPositionToken.sol/index.ts b/src/types/contracts/adapters/convex/ConvexV1_StakedPositionToken.sol/index.ts deleted file mode 100644 index 6f8135b8..00000000 --- a/src/types/contracts/adapters/convex/ConvexV1_StakedPositionToken.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { ConvexStakedPositionToken } from "./ConvexStakedPositionToken"; diff --git a/src/types/contracts/adapters/convex/index.ts b/src/types/contracts/adapters/convex/index.ts deleted file mode 100644 index 082e89d7..00000000 --- a/src/types/contracts/adapters/convex/index.ts +++ /dev/null @@ -1,11 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type * as convexV1BaseRewardPoolSol from "./ConvexV1_BaseRewardPool.sol"; -export type { convexV1BaseRewardPoolSol }; -import type * as convexV1BoosterSol from "./ConvexV1_Booster.sol"; -export type { convexV1BoosterSol }; -import type * as convexV1ClaimZapSol from "./ConvexV1_ClaimZap.sol"; -export type { convexV1ClaimZapSol }; -import type * as convexV1StakedPositionTokenSol from "./ConvexV1_StakedPositionToken.sol"; -export type { convexV1StakedPositionTokenSol }; diff --git a/src/types/contracts/adapters/curve/CurveV1_2.sol/CurveV1Adapter2Assets.ts b/src/types/contracts/adapters/curve/CurveV1_2.sol/CurveV1Adapter2Assets.ts deleted file mode 100644 index cb3a2510..00000000 --- a/src/types/contracts/adapters/curve/CurveV1_2.sol/CurveV1Adapter2Assets.ts +++ /dev/null @@ -1,1679 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface CurveV1Adapter2AssetsInterface extends utils.Interface { - functions: { - "A()": FunctionFragment; - "A_precise()": FunctionFragment; - "_gearboxAdapterType()": FunctionFragment; - "_gearboxAdapterVersion()": FunctionFragment; - "add_all_liquidity_one_coin(int128,uint256)": FunctionFragment; - "add_liquidity(uint256[2],uint256)": FunctionFragment; - "add_liquidity_one_coin(uint256,int128,uint256)": FunctionFragment; - "admin()": FunctionFragment; - "admin_balances(uint256)": FunctionFragment; - "admin_fee()": FunctionFragment; - "allowance(address,address)": FunctionFragment; - "balanceOf(address)": FunctionFragment; - "balances(int128)": FunctionFragment; - "balances(uint256)": FunctionFragment; - "block_timestamp_last()": FunctionFragment; - "calc_token_amount(uint256[2],bool)": FunctionFragment; - "calc_withdraw_one_coin(uint256,int128)": FunctionFragment; - "coins(int128)": FunctionFragment; - "coins(uint256)": FunctionFragment; - "creditFacade()": FunctionFragment; - "creditManager()": FunctionFragment; - "decimals()": FunctionFragment; - "exchange(int128,int128,uint256,uint256)": FunctionFragment; - "exchange_all(int128,int128,uint256)": FunctionFragment; - "exchange_all_underlying(int128,int128,uint256)": FunctionFragment; - "exchange_underlying(int128,int128,uint256,uint256)": FunctionFragment; - "fee()": FunctionFragment; - "future_A()": FunctionFragment; - "future_A_time()": FunctionFragment; - "get_balances()": FunctionFragment; - "get_dy(int128,int128,uint256)": FunctionFragment; - "get_dy_underlying(int128,int128,uint256)": FunctionFragment; - "get_previous_balances()": FunctionFragment; - "get_price_cumulative_last()": FunctionFragment; - "get_twap_balances(uint256[2],uint256[2],uint256)": FunctionFragment; - "get_virtual_price()": FunctionFragment; - "initial_A()": FunctionFragment; - "initial_A_time()": FunctionFragment; - "lp_token()": FunctionFragment; - "metapoolBase()": FunctionFragment; - "nCoins()": FunctionFragment; - "name()": FunctionFragment; - "remove_all_liquidity_one_coin(int128,uint256)": FunctionFragment; - "remove_liquidity(uint256,uint256[2])": FunctionFragment; - "remove_liquidity_imbalance(uint256[2],uint256)": FunctionFragment; - "remove_liquidity_one_coin(uint256,int128,uint256)": FunctionFragment; - "symbol()": FunctionFragment; - "targetContract()": FunctionFragment; - "token()": FunctionFragment; - "token0()": FunctionFragment; - "token1()": FunctionFragment; - "token2()": FunctionFragment; - "token3()": FunctionFragment; - "totalSupply()": FunctionFragment; - "underlying0()": FunctionFragment; - "underlying1()": FunctionFragment; - "underlying2()": FunctionFragment; - "underlying3()": FunctionFragment; - "underlying_coins(int128)": FunctionFragment; - "underlying_coins(uint256)": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "A" - | "A_precise" - | "_gearboxAdapterType" - | "_gearboxAdapterVersion" - | "add_all_liquidity_one_coin" - | "add_liquidity" - | "add_liquidity_one_coin" - | "admin" - | "admin_balances" - | "admin_fee" - | "allowance" - | "balanceOf" - | "balances(int128)" - | "balances(uint256)" - | "block_timestamp_last" - | "calc_token_amount" - | "calc_withdraw_one_coin" - | "coins(int128)" - | "coins(uint256)" - | "creditFacade" - | "creditManager" - | "decimals" - | "exchange" - | "exchange_all" - | "exchange_all_underlying" - | "exchange_underlying" - | "fee" - | "future_A" - | "future_A_time" - | "get_balances" - | "get_dy" - | "get_dy_underlying" - | "get_previous_balances" - | "get_price_cumulative_last" - | "get_twap_balances" - | "get_virtual_price" - | "initial_A" - | "initial_A_time" - | "lp_token" - | "metapoolBase" - | "nCoins" - | "name" - | "remove_all_liquidity_one_coin" - | "remove_liquidity" - | "remove_liquidity_imbalance" - | "remove_liquidity_one_coin" - | "symbol" - | "targetContract" - | "token" - | "token0" - | "token1" - | "token2" - | "token3" - | "totalSupply" - | "underlying0" - | "underlying1" - | "underlying2" - | "underlying3" - | "underlying_coins(int128)" - | "underlying_coins(uint256)" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "A", values?: undefined): string; - encodeFunctionData(functionFragment: "A_precise", values?: undefined): string; - encodeFunctionData( - functionFragment: "_gearboxAdapterType", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "_gearboxAdapterVersion", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "add_all_liquidity_one_coin", - values: [BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "add_liquidity", - values: [[BigNumberish, BigNumberish], BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "add_liquidity_one_coin", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "admin", values?: undefined): string; - encodeFunctionData( - functionFragment: "admin_balances", - values: [BigNumberish] - ): string; - encodeFunctionData(functionFragment: "admin_fee", values?: undefined): string; - encodeFunctionData( - functionFragment: "allowance", - values: [string, string] - ): string; - encodeFunctionData(functionFragment: "balanceOf", values: [string]): string; - encodeFunctionData( - functionFragment: "balances(int128)", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "balances(uint256)", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "block_timestamp_last", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "calc_token_amount", - values: [[BigNumberish, BigNumberish], boolean] - ): string; - encodeFunctionData( - functionFragment: "calc_withdraw_one_coin", - values: [BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "coins(int128)", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "coins(uint256)", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "creditFacade", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditManager", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "decimals", values?: undefined): string; - encodeFunctionData( - functionFragment: "exchange", - values: [BigNumberish, BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "exchange_all", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "exchange_all_underlying", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "exchange_underlying", - values: [BigNumberish, BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "fee", values?: undefined): string; - encodeFunctionData(functionFragment: "future_A", values?: undefined): string; - encodeFunctionData( - functionFragment: "future_A_time", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "get_balances", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "get_dy", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "get_dy_underlying", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "get_previous_balances", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "get_price_cumulative_last", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "get_twap_balances", - values: [ - [BigNumberish, BigNumberish], - [BigNumberish, BigNumberish], - BigNumberish - ] - ): string; - encodeFunctionData( - functionFragment: "get_virtual_price", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "initial_A", values?: undefined): string; - encodeFunctionData( - functionFragment: "initial_A_time", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "lp_token", values?: undefined): string; - encodeFunctionData( - functionFragment: "metapoolBase", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "nCoins", values?: undefined): string; - encodeFunctionData(functionFragment: "name", values?: undefined): string; - encodeFunctionData( - functionFragment: "remove_all_liquidity_one_coin", - values: [BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "remove_liquidity", - values: [BigNumberish, [BigNumberish, BigNumberish]] - ): string; - encodeFunctionData( - functionFragment: "remove_liquidity_imbalance", - values: [[BigNumberish, BigNumberish], BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "remove_liquidity_one_coin", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "symbol", values?: undefined): string; - encodeFunctionData( - functionFragment: "targetContract", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "token", values?: undefined): string; - encodeFunctionData(functionFragment: "token0", values?: undefined): string; - encodeFunctionData(functionFragment: "token1", values?: undefined): string; - encodeFunctionData(functionFragment: "token2", values?: undefined): string; - encodeFunctionData(functionFragment: "token3", values?: undefined): string; - encodeFunctionData( - functionFragment: "totalSupply", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "underlying0", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "underlying1", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "underlying2", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "underlying3", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "underlying_coins(int128)", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "underlying_coins(uint256)", - values: [BigNumberish] - ): string; - - decodeFunctionResult(functionFragment: "A", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "A_precise", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "_gearboxAdapterType", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "_gearboxAdapterVersion", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "add_all_liquidity_one_coin", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "add_liquidity", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "add_liquidity_one_coin", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "admin", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "admin_balances", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "admin_fee", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "balances(int128)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "balances(uint256)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "block_timestamp_last", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "calc_token_amount", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "calc_withdraw_one_coin", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "coins(int128)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "coins(uint256)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditFacade", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditManager", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "exchange", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "exchange_all", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "exchange_all_underlying", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "exchange_underlying", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "fee", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "future_A", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "future_A_time", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "get_balances", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "get_dy", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "get_dy_underlying", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "get_previous_balances", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "get_price_cumulative_last", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "get_twap_balances", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "get_virtual_price", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "initial_A", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "initial_A_time", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "lp_token", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "metapoolBase", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "nCoins", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "remove_all_liquidity_one_coin", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "remove_liquidity", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "remove_liquidity_imbalance", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "remove_liquidity_one_coin", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "targetContract", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "token", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "token0", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "token1", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "token2", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "token3", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "totalSupply", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "underlying0", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "underlying1", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "underlying2", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "underlying3", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "underlying_coins(int128)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "underlying_coins(uint256)", - data: BytesLike - ): Result; - - events: {}; -} - -export interface CurveV1Adapter2Assets extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: CurveV1Adapter2AssetsInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - A(overrides?: CallOverrides): Promise<[BigNumber]>; - - A_precise(overrides?: CallOverrides): Promise<[BigNumber]>; - - _gearboxAdapterType(overrides?: CallOverrides): Promise<[number]>; - - _gearboxAdapterVersion(overrides?: CallOverrides): Promise<[number]>; - - add_all_liquidity_one_coin( - i: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - add_liquidity( - amounts: [BigNumberish, BigNumberish], - arg1: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - add_liquidity_one_coin( - amount: BigNumberish, - i: BigNumberish, - minAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - admin(overrides?: CallOverrides): Promise<[string]>; - - admin_balances( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - admin_fee(overrides?: CallOverrides): Promise<[BigNumber]>; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - balanceOf(account: string, overrides?: CallOverrides): Promise<[BigNumber]>; - - "balances(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "balances(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - block_timestamp_last(overrides?: CallOverrides): Promise<[BigNumber]>; - - calc_token_amount( - _amounts: [BigNumberish, BigNumberish], - _is_deposit: boolean, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - calc_withdraw_one_coin( - _burn_amount: BigNumberish, - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - "coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - creditFacade(overrides?: CallOverrides): Promise<[string]>; - - creditManager(overrides?: CallOverrides): Promise<[string]>; - - decimals(overrides?: CallOverrides): Promise<[BigNumber]>; - - exchange( - i: BigNumberish, - j: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_all( - i: BigNumberish, - j: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_all_underlying( - i: BigNumberish, - j: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_underlying( - i: BigNumberish, - j: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fee(overrides?: CallOverrides): Promise<[BigNumber]>; - - future_A(overrides?: CallOverrides): Promise<[BigNumber]>; - - future_A_time(overrides?: CallOverrides): Promise<[BigNumber]>; - - get_balances(overrides?: CallOverrides): Promise<[[BigNumber, BigNumber]]>; - - get_dy( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - get_dy_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - get_previous_balances( - overrides?: CallOverrides - ): Promise<[[BigNumber, BigNumber]]>; - - get_price_cumulative_last( - overrides?: CallOverrides - ): Promise<[[BigNumber, BigNumber]]>; - - get_twap_balances( - _first_balances: [BigNumberish, BigNumberish], - _last_balances: [BigNumberish, BigNumberish], - _time_elapsed: BigNumberish, - overrides?: CallOverrides - ): Promise<[[BigNumber, BigNumber]]>; - - get_virtual_price(overrides?: CallOverrides): Promise<[BigNumber]>; - - initial_A(overrides?: CallOverrides): Promise<[BigNumber]>; - - initial_A_time(overrides?: CallOverrides): Promise<[BigNumber]>; - - lp_token(overrides?: CallOverrides): Promise<[string]>; - - metapoolBase(overrides?: CallOverrides): Promise<[string]>; - - nCoins(overrides?: CallOverrides): Promise<[BigNumber]>; - - name(overrides?: CallOverrides): Promise<[string]>; - - remove_all_liquidity_one_coin( - i: BigNumberish, - minRateRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity( - arg0: BigNumberish, - arg1: [BigNumberish, BigNumberish], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_imbalance( - amounts: [BigNumberish, BigNumberish], - arg1: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_one_coin( - arg0: BigNumberish, - i: BigNumberish, - arg2: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise<[string]>; - - targetContract(overrides?: CallOverrides): Promise<[string]>; - - token(overrides?: CallOverrides): Promise<[string]>; - - token0(overrides?: CallOverrides): Promise<[string]>; - - token1(overrides?: CallOverrides): Promise<[string]>; - - token2(overrides?: CallOverrides): Promise<[string]>; - - token3(overrides?: CallOverrides): Promise<[string]>; - - totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>; - - underlying0(overrides?: CallOverrides): Promise<[string]>; - - underlying1(overrides?: CallOverrides): Promise<[string]>; - - underlying2(overrides?: CallOverrides): Promise<[string]>; - - underlying3(overrides?: CallOverrides): Promise<[string]>; - - "underlying_coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - "underlying_coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - }; - - A(overrides?: CallOverrides): Promise; - - A_precise(overrides?: CallOverrides): Promise; - - _gearboxAdapterType(overrides?: CallOverrides): Promise; - - _gearboxAdapterVersion(overrides?: CallOverrides): Promise; - - add_all_liquidity_one_coin( - i: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - add_liquidity( - amounts: [BigNumberish, BigNumberish], - arg1: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - add_liquidity_one_coin( - amount: BigNumberish, - i: BigNumberish, - minAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - admin(overrides?: CallOverrides): Promise; - - admin_balances( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - admin_fee(overrides?: CallOverrides): Promise; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - "balances(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "balances(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - block_timestamp_last(overrides?: CallOverrides): Promise; - - calc_token_amount( - _amounts: [BigNumberish, BigNumberish], - _is_deposit: boolean, - overrides?: CallOverrides - ): Promise; - - calc_withdraw_one_coin( - _burn_amount: BigNumberish, - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(int128)"(i: BigNumberish, overrides?: CallOverrides): Promise; - - "coins(uint256)"(i: BigNumberish, overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - exchange( - i: BigNumberish, - j: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_all( - i: BigNumberish, - j: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_all_underlying( - i: BigNumberish, - j: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_underlying( - i: BigNumberish, - j: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fee(overrides?: CallOverrides): Promise; - - future_A(overrides?: CallOverrides): Promise; - - future_A_time(overrides?: CallOverrides): Promise; - - get_balances(overrides?: CallOverrides): Promise<[BigNumber, BigNumber]>; - - get_dy( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_dy_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_previous_balances( - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber]>; - - get_price_cumulative_last( - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber]>; - - get_twap_balances( - _first_balances: [BigNumberish, BigNumberish], - _last_balances: [BigNumberish, BigNumberish], - _time_elapsed: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber]>; - - get_virtual_price(overrides?: CallOverrides): Promise; - - initial_A(overrides?: CallOverrides): Promise; - - initial_A_time(overrides?: CallOverrides): Promise; - - lp_token(overrides?: CallOverrides): Promise; - - metapoolBase(overrides?: CallOverrides): Promise; - - nCoins(overrides?: CallOverrides): Promise; - - name(overrides?: CallOverrides): Promise; - - remove_all_liquidity_one_coin( - i: BigNumberish, - minRateRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity( - arg0: BigNumberish, - arg1: [BigNumberish, BigNumberish], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_imbalance( - amounts: [BigNumberish, BigNumberish], - arg1: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_one_coin( - arg0: BigNumberish, - i: BigNumberish, - arg2: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - targetContract(overrides?: CallOverrides): Promise; - - token(overrides?: CallOverrides): Promise; - - token0(overrides?: CallOverrides): Promise; - - token1(overrides?: CallOverrides): Promise; - - token2(overrides?: CallOverrides): Promise; - - token3(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - underlying0(overrides?: CallOverrides): Promise; - - underlying1(overrides?: CallOverrides): Promise; - - underlying2(overrides?: CallOverrides): Promise; - - underlying3(overrides?: CallOverrides): Promise; - - "underlying_coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "underlying_coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - callStatic: { - A(overrides?: CallOverrides): Promise; - - A_precise(overrides?: CallOverrides): Promise; - - _gearboxAdapterType(overrides?: CallOverrides): Promise; - - _gearboxAdapterVersion(overrides?: CallOverrides): Promise; - - add_all_liquidity_one_coin( - i: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: CallOverrides - ): Promise; - - add_liquidity( - amounts: [BigNumberish, BigNumberish], - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - add_liquidity_one_coin( - amount: BigNumberish, - i: BigNumberish, - minAmount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - admin(overrides?: CallOverrides): Promise; - - admin_balances( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - admin_fee(overrides?: CallOverrides): Promise; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - "balances(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "balances(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - block_timestamp_last(overrides?: CallOverrides): Promise; - - calc_token_amount( - _amounts: [BigNumberish, BigNumberish], - _is_deposit: boolean, - overrides?: CallOverrides - ): Promise; - - calc_withdraw_one_coin( - _burn_amount: BigNumberish, - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - exchange( - i: BigNumberish, - j: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - overrides?: CallOverrides - ): Promise; - - exchange_all( - i: BigNumberish, - j: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: CallOverrides - ): Promise; - - exchange_all_underlying( - i: BigNumberish, - j: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: CallOverrides - ): Promise; - - exchange_underlying( - i: BigNumberish, - j: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - overrides?: CallOverrides - ): Promise; - - fee(overrides?: CallOverrides): Promise; - - future_A(overrides?: CallOverrides): Promise; - - future_A_time(overrides?: CallOverrides): Promise; - - get_balances(overrides?: CallOverrides): Promise<[BigNumber, BigNumber]>; - - get_dy( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_dy_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_previous_balances( - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber]>; - - get_price_cumulative_last( - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber]>; - - get_twap_balances( - _first_balances: [BigNumberish, BigNumberish], - _last_balances: [BigNumberish, BigNumberish], - _time_elapsed: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber]>; - - get_virtual_price(overrides?: CallOverrides): Promise; - - initial_A(overrides?: CallOverrides): Promise; - - initial_A_time(overrides?: CallOverrides): Promise; - - lp_token(overrides?: CallOverrides): Promise; - - metapoolBase(overrides?: CallOverrides): Promise; - - nCoins(overrides?: CallOverrides): Promise; - - name(overrides?: CallOverrides): Promise; - - remove_all_liquidity_one_coin( - i: BigNumberish, - minRateRAY: BigNumberish, - overrides?: CallOverrides - ): Promise; - - remove_liquidity( - arg0: BigNumberish, - arg1: [BigNumberish, BigNumberish], - overrides?: CallOverrides - ): Promise; - - remove_liquidity_imbalance( - amounts: [BigNumberish, BigNumberish], - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - remove_liquidity_one_coin( - arg0: BigNumberish, - i: BigNumberish, - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - targetContract(overrides?: CallOverrides): Promise; - - token(overrides?: CallOverrides): Promise; - - token0(overrides?: CallOverrides): Promise; - - token1(overrides?: CallOverrides): Promise; - - token2(overrides?: CallOverrides): Promise; - - token3(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - underlying0(overrides?: CallOverrides): Promise; - - underlying1(overrides?: CallOverrides): Promise; - - underlying2(overrides?: CallOverrides): Promise; - - underlying3(overrides?: CallOverrides): Promise; - - "underlying_coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "underlying_coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - filters: {}; - - estimateGas: { - A(overrides?: CallOverrides): Promise; - - A_precise(overrides?: CallOverrides): Promise; - - _gearboxAdapterType(overrides?: CallOverrides): Promise; - - _gearboxAdapterVersion(overrides?: CallOverrides): Promise; - - add_all_liquidity_one_coin( - i: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - add_liquidity( - amounts: [BigNumberish, BigNumberish], - arg1: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - add_liquidity_one_coin( - amount: BigNumberish, - i: BigNumberish, - minAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - admin(overrides?: CallOverrides): Promise; - - admin_balances( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - admin_fee(overrides?: CallOverrides): Promise; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - "balances(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "balances(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - block_timestamp_last(overrides?: CallOverrides): Promise; - - calc_token_amount( - _amounts: [BigNumberish, BigNumberish], - _is_deposit: boolean, - overrides?: CallOverrides - ): Promise; - - calc_withdraw_one_coin( - _burn_amount: BigNumberish, - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - exchange( - i: BigNumberish, - j: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_all( - i: BigNumberish, - j: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_all_underlying( - i: BigNumberish, - j: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_underlying( - i: BigNumberish, - j: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fee(overrides?: CallOverrides): Promise; - - future_A(overrides?: CallOverrides): Promise; - - future_A_time(overrides?: CallOverrides): Promise; - - get_balances(overrides?: CallOverrides): Promise; - - get_dy( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_dy_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_previous_balances(overrides?: CallOverrides): Promise; - - get_price_cumulative_last(overrides?: CallOverrides): Promise; - - get_twap_balances( - _first_balances: [BigNumberish, BigNumberish], - _last_balances: [BigNumberish, BigNumberish], - _time_elapsed: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_virtual_price(overrides?: CallOverrides): Promise; - - initial_A(overrides?: CallOverrides): Promise; - - initial_A_time(overrides?: CallOverrides): Promise; - - lp_token(overrides?: CallOverrides): Promise; - - metapoolBase(overrides?: CallOverrides): Promise; - - nCoins(overrides?: CallOverrides): Promise; - - name(overrides?: CallOverrides): Promise; - - remove_all_liquidity_one_coin( - i: BigNumberish, - minRateRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity( - arg0: BigNumberish, - arg1: [BigNumberish, BigNumberish], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_imbalance( - amounts: [BigNumberish, BigNumberish], - arg1: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_one_coin( - arg0: BigNumberish, - i: BigNumberish, - arg2: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - targetContract(overrides?: CallOverrides): Promise; - - token(overrides?: CallOverrides): Promise; - - token0(overrides?: CallOverrides): Promise; - - token1(overrides?: CallOverrides): Promise; - - token2(overrides?: CallOverrides): Promise; - - token3(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - underlying0(overrides?: CallOverrides): Promise; - - underlying1(overrides?: CallOverrides): Promise; - - underlying2(overrides?: CallOverrides): Promise; - - underlying3(overrides?: CallOverrides): Promise; - - "underlying_coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "underlying_coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - populateTransaction: { - A(overrides?: CallOverrides): Promise; - - A_precise(overrides?: CallOverrides): Promise; - - _gearboxAdapterType( - overrides?: CallOverrides - ): Promise; - - _gearboxAdapterVersion( - overrides?: CallOverrides - ): Promise; - - add_all_liquidity_one_coin( - i: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - add_liquidity( - amounts: [BigNumberish, BigNumberish], - arg1: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - add_liquidity_one_coin( - amount: BigNumberish, - i: BigNumberish, - minAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - admin(overrides?: CallOverrides): Promise; - - admin_balances( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - admin_fee(overrides?: CallOverrides): Promise; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - balanceOf( - account: string, - overrides?: CallOverrides - ): Promise; - - "balances(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "balances(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - block_timestamp_last( - overrides?: CallOverrides - ): Promise; - - calc_token_amount( - _amounts: [BigNumberish, BigNumberish], - _is_deposit: boolean, - overrides?: CallOverrides - ): Promise; - - calc_withdraw_one_coin( - _burn_amount: BigNumberish, - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - exchange( - i: BigNumberish, - j: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_all( - i: BigNumberish, - j: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_all_underlying( - i: BigNumberish, - j: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_underlying( - i: BigNumberish, - j: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fee(overrides?: CallOverrides): Promise; - - future_A(overrides?: CallOverrides): Promise; - - future_A_time(overrides?: CallOverrides): Promise; - - get_balances(overrides?: CallOverrides): Promise; - - get_dy( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_dy_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_previous_balances( - overrides?: CallOverrides - ): Promise; - - get_price_cumulative_last( - overrides?: CallOverrides - ): Promise; - - get_twap_balances( - _first_balances: [BigNumberish, BigNumberish], - _last_balances: [BigNumberish, BigNumberish], - _time_elapsed: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_virtual_price(overrides?: CallOverrides): Promise; - - initial_A(overrides?: CallOverrides): Promise; - - initial_A_time(overrides?: CallOverrides): Promise; - - lp_token(overrides?: CallOverrides): Promise; - - metapoolBase(overrides?: CallOverrides): Promise; - - nCoins(overrides?: CallOverrides): Promise; - - name(overrides?: CallOverrides): Promise; - - remove_all_liquidity_one_coin( - i: BigNumberish, - minRateRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity( - arg0: BigNumberish, - arg1: [BigNumberish, BigNumberish], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_imbalance( - amounts: [BigNumberish, BigNumberish], - arg1: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_one_coin( - arg0: BigNumberish, - i: BigNumberish, - arg2: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - targetContract(overrides?: CallOverrides): Promise; - - token(overrides?: CallOverrides): Promise; - - token0(overrides?: CallOverrides): Promise; - - token1(overrides?: CallOverrides): Promise; - - token2(overrides?: CallOverrides): Promise; - - token3(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - underlying0(overrides?: CallOverrides): Promise; - - underlying1(overrides?: CallOverrides): Promise; - - underlying2(overrides?: CallOverrides): Promise; - - underlying3(overrides?: CallOverrides): Promise; - - "underlying_coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "underlying_coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; -} diff --git a/src/types/contracts/adapters/curve/CurveV1_2.sol/index.ts b/src/types/contracts/adapters/curve/CurveV1_2.sol/index.ts deleted file mode 100644 index 448d9f02..00000000 --- a/src/types/contracts/adapters/curve/CurveV1_2.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { CurveV1Adapter2Assets } from "./CurveV1Adapter2Assets"; diff --git a/src/types/contracts/adapters/curve/CurveV1_3.sol/CurveV1Adapter3Assets.ts b/src/types/contracts/adapters/curve/CurveV1_3.sol/CurveV1Adapter3Assets.ts deleted file mode 100644 index d40c223c..00000000 --- a/src/types/contracts/adapters/curve/CurveV1_3.sol/CurveV1Adapter3Assets.ts +++ /dev/null @@ -1,1685 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface CurveV1Adapter3AssetsInterface extends utils.Interface { - functions: { - "A()": FunctionFragment; - "A_precise()": FunctionFragment; - "_gearboxAdapterType()": FunctionFragment; - "_gearboxAdapterVersion()": FunctionFragment; - "add_all_liquidity_one_coin(int128,uint256)": FunctionFragment; - "add_liquidity(uint256[3],uint256)": FunctionFragment; - "add_liquidity_one_coin(uint256,int128,uint256)": FunctionFragment; - "admin()": FunctionFragment; - "admin_balances(uint256)": FunctionFragment; - "admin_fee()": FunctionFragment; - "allowance(address,address)": FunctionFragment; - "balanceOf(address)": FunctionFragment; - "balances(int128)": FunctionFragment; - "balances(uint256)": FunctionFragment; - "block_timestamp_last()": FunctionFragment; - "calc_token_amount(uint256[3],bool)": FunctionFragment; - "calc_withdraw_one_coin(uint256,int128)": FunctionFragment; - "coins(int128)": FunctionFragment; - "coins(uint256)": FunctionFragment; - "creditFacade()": FunctionFragment; - "creditManager()": FunctionFragment; - "decimals()": FunctionFragment; - "exchange(int128,int128,uint256,uint256)": FunctionFragment; - "exchange_all(int128,int128,uint256)": FunctionFragment; - "exchange_all_underlying(int128,int128,uint256)": FunctionFragment; - "exchange_underlying(int128,int128,uint256,uint256)": FunctionFragment; - "fee()": FunctionFragment; - "future_A()": FunctionFragment; - "future_A_time()": FunctionFragment; - "get_balances()": FunctionFragment; - "get_dy(int128,int128,uint256)": FunctionFragment; - "get_dy_underlying(int128,int128,uint256)": FunctionFragment; - "get_previous_balances()": FunctionFragment; - "get_price_cumulative_last()": FunctionFragment; - "get_twap_balances(uint256[3],uint256[3],uint256)": FunctionFragment; - "get_virtual_price()": FunctionFragment; - "initial_A()": FunctionFragment; - "initial_A_time()": FunctionFragment; - "lp_token()": FunctionFragment; - "metapoolBase()": FunctionFragment; - "nCoins()": FunctionFragment; - "name()": FunctionFragment; - "remove_all_liquidity_one_coin(int128,uint256)": FunctionFragment; - "remove_liquidity(uint256,uint256[3])": FunctionFragment; - "remove_liquidity_imbalance(uint256[3],uint256)": FunctionFragment; - "remove_liquidity_one_coin(uint256,int128,uint256)": FunctionFragment; - "symbol()": FunctionFragment; - "targetContract()": FunctionFragment; - "token()": FunctionFragment; - "token0()": FunctionFragment; - "token1()": FunctionFragment; - "token2()": FunctionFragment; - "token3()": FunctionFragment; - "totalSupply()": FunctionFragment; - "underlying0()": FunctionFragment; - "underlying1()": FunctionFragment; - "underlying2()": FunctionFragment; - "underlying3()": FunctionFragment; - "underlying_coins(int128)": FunctionFragment; - "underlying_coins(uint256)": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "A" - | "A_precise" - | "_gearboxAdapterType" - | "_gearboxAdapterVersion" - | "add_all_liquidity_one_coin" - | "add_liquidity" - | "add_liquidity_one_coin" - | "admin" - | "admin_balances" - | "admin_fee" - | "allowance" - | "balanceOf" - | "balances(int128)" - | "balances(uint256)" - | "block_timestamp_last" - | "calc_token_amount" - | "calc_withdraw_one_coin" - | "coins(int128)" - | "coins(uint256)" - | "creditFacade" - | "creditManager" - | "decimals" - | "exchange" - | "exchange_all" - | "exchange_all_underlying" - | "exchange_underlying" - | "fee" - | "future_A" - | "future_A_time" - | "get_balances" - | "get_dy" - | "get_dy_underlying" - | "get_previous_balances" - | "get_price_cumulative_last" - | "get_twap_balances" - | "get_virtual_price" - | "initial_A" - | "initial_A_time" - | "lp_token" - | "metapoolBase" - | "nCoins" - | "name" - | "remove_all_liquidity_one_coin" - | "remove_liquidity" - | "remove_liquidity_imbalance" - | "remove_liquidity_one_coin" - | "symbol" - | "targetContract" - | "token" - | "token0" - | "token1" - | "token2" - | "token3" - | "totalSupply" - | "underlying0" - | "underlying1" - | "underlying2" - | "underlying3" - | "underlying_coins(int128)" - | "underlying_coins(uint256)" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "A", values?: undefined): string; - encodeFunctionData(functionFragment: "A_precise", values?: undefined): string; - encodeFunctionData( - functionFragment: "_gearboxAdapterType", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "_gearboxAdapterVersion", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "add_all_liquidity_one_coin", - values: [BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "add_liquidity", - values: [[BigNumberish, BigNumberish, BigNumberish], BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "add_liquidity_one_coin", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "admin", values?: undefined): string; - encodeFunctionData( - functionFragment: "admin_balances", - values: [BigNumberish] - ): string; - encodeFunctionData(functionFragment: "admin_fee", values?: undefined): string; - encodeFunctionData( - functionFragment: "allowance", - values: [string, string] - ): string; - encodeFunctionData(functionFragment: "balanceOf", values: [string]): string; - encodeFunctionData( - functionFragment: "balances(int128)", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "balances(uint256)", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "block_timestamp_last", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "calc_token_amount", - values: [[BigNumberish, BigNumberish, BigNumberish], boolean] - ): string; - encodeFunctionData( - functionFragment: "calc_withdraw_one_coin", - values: [BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "coins(int128)", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "coins(uint256)", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "creditFacade", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditManager", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "decimals", values?: undefined): string; - encodeFunctionData( - functionFragment: "exchange", - values: [BigNumberish, BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "exchange_all", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "exchange_all_underlying", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "exchange_underlying", - values: [BigNumberish, BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "fee", values?: undefined): string; - encodeFunctionData(functionFragment: "future_A", values?: undefined): string; - encodeFunctionData( - functionFragment: "future_A_time", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "get_balances", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "get_dy", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "get_dy_underlying", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "get_previous_balances", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "get_price_cumulative_last", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "get_twap_balances", - values: [ - [BigNumberish, BigNumberish, BigNumberish], - [BigNumberish, BigNumberish, BigNumberish], - BigNumberish - ] - ): string; - encodeFunctionData( - functionFragment: "get_virtual_price", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "initial_A", values?: undefined): string; - encodeFunctionData( - functionFragment: "initial_A_time", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "lp_token", values?: undefined): string; - encodeFunctionData( - functionFragment: "metapoolBase", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "nCoins", values?: undefined): string; - encodeFunctionData(functionFragment: "name", values?: undefined): string; - encodeFunctionData( - functionFragment: "remove_all_liquidity_one_coin", - values: [BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "remove_liquidity", - values: [BigNumberish, [BigNumberish, BigNumberish, BigNumberish]] - ): string; - encodeFunctionData( - functionFragment: "remove_liquidity_imbalance", - values: [[BigNumberish, BigNumberish, BigNumberish], BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "remove_liquidity_one_coin", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "symbol", values?: undefined): string; - encodeFunctionData( - functionFragment: "targetContract", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "token", values?: undefined): string; - encodeFunctionData(functionFragment: "token0", values?: undefined): string; - encodeFunctionData(functionFragment: "token1", values?: undefined): string; - encodeFunctionData(functionFragment: "token2", values?: undefined): string; - encodeFunctionData(functionFragment: "token3", values?: undefined): string; - encodeFunctionData( - functionFragment: "totalSupply", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "underlying0", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "underlying1", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "underlying2", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "underlying3", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "underlying_coins(int128)", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "underlying_coins(uint256)", - values: [BigNumberish] - ): string; - - decodeFunctionResult(functionFragment: "A", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "A_precise", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "_gearboxAdapterType", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "_gearboxAdapterVersion", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "add_all_liquidity_one_coin", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "add_liquidity", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "add_liquidity_one_coin", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "admin", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "admin_balances", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "admin_fee", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "balances(int128)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "balances(uint256)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "block_timestamp_last", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "calc_token_amount", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "calc_withdraw_one_coin", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "coins(int128)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "coins(uint256)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditFacade", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditManager", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "exchange", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "exchange_all", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "exchange_all_underlying", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "exchange_underlying", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "fee", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "future_A", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "future_A_time", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "get_balances", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "get_dy", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "get_dy_underlying", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "get_previous_balances", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "get_price_cumulative_last", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "get_twap_balances", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "get_virtual_price", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "initial_A", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "initial_A_time", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "lp_token", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "metapoolBase", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "nCoins", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "remove_all_liquidity_one_coin", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "remove_liquidity", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "remove_liquidity_imbalance", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "remove_liquidity_one_coin", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "targetContract", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "token", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "token0", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "token1", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "token2", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "token3", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "totalSupply", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "underlying0", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "underlying1", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "underlying2", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "underlying3", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "underlying_coins(int128)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "underlying_coins(uint256)", - data: BytesLike - ): Result; - - events: {}; -} - -export interface CurveV1Adapter3Assets extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: CurveV1Adapter3AssetsInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - A(overrides?: CallOverrides): Promise<[BigNumber]>; - - A_precise(overrides?: CallOverrides): Promise<[BigNumber]>; - - _gearboxAdapterType(overrides?: CallOverrides): Promise<[number]>; - - _gearboxAdapterVersion(overrides?: CallOverrides): Promise<[number]>; - - add_all_liquidity_one_coin( - i: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - add_liquidity( - amounts: [BigNumberish, BigNumberish, BigNumberish], - arg1: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - add_liquidity_one_coin( - amount: BigNumberish, - i: BigNumberish, - minAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - admin(overrides?: CallOverrides): Promise<[string]>; - - admin_balances( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - admin_fee(overrides?: CallOverrides): Promise<[BigNumber]>; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - balanceOf(account: string, overrides?: CallOverrides): Promise<[BigNumber]>; - - "balances(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "balances(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - block_timestamp_last(overrides?: CallOverrides): Promise<[BigNumber]>; - - calc_token_amount( - _amounts: [BigNumberish, BigNumberish, BigNumberish], - _is_deposit: boolean, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - calc_withdraw_one_coin( - _burn_amount: BigNumberish, - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - "coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - creditFacade(overrides?: CallOverrides): Promise<[string]>; - - creditManager(overrides?: CallOverrides): Promise<[string]>; - - decimals(overrides?: CallOverrides): Promise<[BigNumber]>; - - exchange( - i: BigNumberish, - j: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_all( - i: BigNumberish, - j: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_all_underlying( - i: BigNumberish, - j: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_underlying( - i: BigNumberish, - j: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fee(overrides?: CallOverrides): Promise<[BigNumber]>; - - future_A(overrides?: CallOverrides): Promise<[BigNumber]>; - - future_A_time(overrides?: CallOverrides): Promise<[BigNumber]>; - - get_balances( - overrides?: CallOverrides - ): Promise<[[BigNumber, BigNumber, BigNumber]]>; - - get_dy( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - get_dy_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - get_previous_balances( - overrides?: CallOverrides - ): Promise<[[BigNumber, BigNumber, BigNumber]]>; - - get_price_cumulative_last( - overrides?: CallOverrides - ): Promise<[[BigNumber, BigNumber, BigNumber]]>; - - get_twap_balances( - _first_balances: [BigNumberish, BigNumberish, BigNumberish], - _last_balances: [BigNumberish, BigNumberish, BigNumberish], - _time_elapsed: BigNumberish, - overrides?: CallOverrides - ): Promise<[[BigNumber, BigNumber, BigNumber]]>; - - get_virtual_price(overrides?: CallOverrides): Promise<[BigNumber]>; - - initial_A(overrides?: CallOverrides): Promise<[BigNumber]>; - - initial_A_time(overrides?: CallOverrides): Promise<[BigNumber]>; - - lp_token(overrides?: CallOverrides): Promise<[string]>; - - metapoolBase(overrides?: CallOverrides): Promise<[string]>; - - nCoins(overrides?: CallOverrides): Promise<[BigNumber]>; - - name(overrides?: CallOverrides): Promise<[string]>; - - remove_all_liquidity_one_coin( - i: BigNumberish, - minRateRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity( - arg0: BigNumberish, - arg1: [BigNumberish, BigNumberish, BigNumberish], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_imbalance( - amounts: [BigNumberish, BigNumberish, BigNumberish], - arg1: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_one_coin( - arg0: BigNumberish, - i: BigNumberish, - arg2: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise<[string]>; - - targetContract(overrides?: CallOverrides): Promise<[string]>; - - token(overrides?: CallOverrides): Promise<[string]>; - - token0(overrides?: CallOverrides): Promise<[string]>; - - token1(overrides?: CallOverrides): Promise<[string]>; - - token2(overrides?: CallOverrides): Promise<[string]>; - - token3(overrides?: CallOverrides): Promise<[string]>; - - totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>; - - underlying0(overrides?: CallOverrides): Promise<[string]>; - - underlying1(overrides?: CallOverrides): Promise<[string]>; - - underlying2(overrides?: CallOverrides): Promise<[string]>; - - underlying3(overrides?: CallOverrides): Promise<[string]>; - - "underlying_coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - "underlying_coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - }; - - A(overrides?: CallOverrides): Promise; - - A_precise(overrides?: CallOverrides): Promise; - - _gearboxAdapterType(overrides?: CallOverrides): Promise; - - _gearboxAdapterVersion(overrides?: CallOverrides): Promise; - - add_all_liquidity_one_coin( - i: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - add_liquidity( - amounts: [BigNumberish, BigNumberish, BigNumberish], - arg1: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - add_liquidity_one_coin( - amount: BigNumberish, - i: BigNumberish, - minAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - admin(overrides?: CallOverrides): Promise; - - admin_balances( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - admin_fee(overrides?: CallOverrides): Promise; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - "balances(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "balances(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - block_timestamp_last(overrides?: CallOverrides): Promise; - - calc_token_amount( - _amounts: [BigNumberish, BigNumberish, BigNumberish], - _is_deposit: boolean, - overrides?: CallOverrides - ): Promise; - - calc_withdraw_one_coin( - _burn_amount: BigNumberish, - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(int128)"(i: BigNumberish, overrides?: CallOverrides): Promise; - - "coins(uint256)"(i: BigNumberish, overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - exchange( - i: BigNumberish, - j: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_all( - i: BigNumberish, - j: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_all_underlying( - i: BigNumberish, - j: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_underlying( - i: BigNumberish, - j: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fee(overrides?: CallOverrides): Promise; - - future_A(overrides?: CallOverrides): Promise; - - future_A_time(overrides?: CallOverrides): Promise; - - get_balances( - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber, BigNumber]>; - - get_dy( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_dy_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_previous_balances( - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber, BigNumber]>; - - get_price_cumulative_last( - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber, BigNumber]>; - - get_twap_balances( - _first_balances: [BigNumberish, BigNumberish, BigNumberish], - _last_balances: [BigNumberish, BigNumberish, BigNumberish], - _time_elapsed: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber, BigNumber]>; - - get_virtual_price(overrides?: CallOverrides): Promise; - - initial_A(overrides?: CallOverrides): Promise; - - initial_A_time(overrides?: CallOverrides): Promise; - - lp_token(overrides?: CallOverrides): Promise; - - metapoolBase(overrides?: CallOverrides): Promise; - - nCoins(overrides?: CallOverrides): Promise; - - name(overrides?: CallOverrides): Promise; - - remove_all_liquidity_one_coin( - i: BigNumberish, - minRateRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity( - arg0: BigNumberish, - arg1: [BigNumberish, BigNumberish, BigNumberish], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_imbalance( - amounts: [BigNumberish, BigNumberish, BigNumberish], - arg1: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_one_coin( - arg0: BigNumberish, - i: BigNumberish, - arg2: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - targetContract(overrides?: CallOverrides): Promise; - - token(overrides?: CallOverrides): Promise; - - token0(overrides?: CallOverrides): Promise; - - token1(overrides?: CallOverrides): Promise; - - token2(overrides?: CallOverrides): Promise; - - token3(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - underlying0(overrides?: CallOverrides): Promise; - - underlying1(overrides?: CallOverrides): Promise; - - underlying2(overrides?: CallOverrides): Promise; - - underlying3(overrides?: CallOverrides): Promise; - - "underlying_coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "underlying_coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - callStatic: { - A(overrides?: CallOverrides): Promise; - - A_precise(overrides?: CallOverrides): Promise; - - _gearboxAdapterType(overrides?: CallOverrides): Promise; - - _gearboxAdapterVersion(overrides?: CallOverrides): Promise; - - add_all_liquidity_one_coin( - i: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: CallOverrides - ): Promise; - - add_liquidity( - amounts: [BigNumberish, BigNumberish, BigNumberish], - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - add_liquidity_one_coin( - amount: BigNumberish, - i: BigNumberish, - minAmount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - admin(overrides?: CallOverrides): Promise; - - admin_balances( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - admin_fee(overrides?: CallOverrides): Promise; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - "balances(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "balances(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - block_timestamp_last(overrides?: CallOverrides): Promise; - - calc_token_amount( - _amounts: [BigNumberish, BigNumberish, BigNumberish], - _is_deposit: boolean, - overrides?: CallOverrides - ): Promise; - - calc_withdraw_one_coin( - _burn_amount: BigNumberish, - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - exchange( - i: BigNumberish, - j: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - overrides?: CallOverrides - ): Promise; - - exchange_all( - i: BigNumberish, - j: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: CallOverrides - ): Promise; - - exchange_all_underlying( - i: BigNumberish, - j: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: CallOverrides - ): Promise; - - exchange_underlying( - i: BigNumberish, - j: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - overrides?: CallOverrides - ): Promise; - - fee(overrides?: CallOverrides): Promise; - - future_A(overrides?: CallOverrides): Promise; - - future_A_time(overrides?: CallOverrides): Promise; - - get_balances( - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber, BigNumber]>; - - get_dy( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_dy_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_previous_balances( - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber, BigNumber]>; - - get_price_cumulative_last( - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber, BigNumber]>; - - get_twap_balances( - _first_balances: [BigNumberish, BigNumberish, BigNumberish], - _last_balances: [BigNumberish, BigNumberish, BigNumberish], - _time_elapsed: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber, BigNumber]>; - - get_virtual_price(overrides?: CallOverrides): Promise; - - initial_A(overrides?: CallOverrides): Promise; - - initial_A_time(overrides?: CallOverrides): Promise; - - lp_token(overrides?: CallOverrides): Promise; - - metapoolBase(overrides?: CallOverrides): Promise; - - nCoins(overrides?: CallOverrides): Promise; - - name(overrides?: CallOverrides): Promise; - - remove_all_liquidity_one_coin( - i: BigNumberish, - minRateRAY: BigNumberish, - overrides?: CallOverrides - ): Promise; - - remove_liquidity( - arg0: BigNumberish, - arg1: [BigNumberish, BigNumberish, BigNumberish], - overrides?: CallOverrides - ): Promise; - - remove_liquidity_imbalance( - amounts: [BigNumberish, BigNumberish, BigNumberish], - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - remove_liquidity_one_coin( - arg0: BigNumberish, - i: BigNumberish, - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - targetContract(overrides?: CallOverrides): Promise; - - token(overrides?: CallOverrides): Promise; - - token0(overrides?: CallOverrides): Promise; - - token1(overrides?: CallOverrides): Promise; - - token2(overrides?: CallOverrides): Promise; - - token3(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - underlying0(overrides?: CallOverrides): Promise; - - underlying1(overrides?: CallOverrides): Promise; - - underlying2(overrides?: CallOverrides): Promise; - - underlying3(overrides?: CallOverrides): Promise; - - "underlying_coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "underlying_coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - filters: {}; - - estimateGas: { - A(overrides?: CallOverrides): Promise; - - A_precise(overrides?: CallOverrides): Promise; - - _gearboxAdapterType(overrides?: CallOverrides): Promise; - - _gearboxAdapterVersion(overrides?: CallOverrides): Promise; - - add_all_liquidity_one_coin( - i: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - add_liquidity( - amounts: [BigNumberish, BigNumberish, BigNumberish], - arg1: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - add_liquidity_one_coin( - amount: BigNumberish, - i: BigNumberish, - minAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - admin(overrides?: CallOverrides): Promise; - - admin_balances( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - admin_fee(overrides?: CallOverrides): Promise; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - "balances(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "balances(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - block_timestamp_last(overrides?: CallOverrides): Promise; - - calc_token_amount( - _amounts: [BigNumberish, BigNumberish, BigNumberish], - _is_deposit: boolean, - overrides?: CallOverrides - ): Promise; - - calc_withdraw_one_coin( - _burn_amount: BigNumberish, - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - exchange( - i: BigNumberish, - j: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_all( - i: BigNumberish, - j: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_all_underlying( - i: BigNumberish, - j: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_underlying( - i: BigNumberish, - j: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fee(overrides?: CallOverrides): Promise; - - future_A(overrides?: CallOverrides): Promise; - - future_A_time(overrides?: CallOverrides): Promise; - - get_balances(overrides?: CallOverrides): Promise; - - get_dy( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_dy_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_previous_balances(overrides?: CallOverrides): Promise; - - get_price_cumulative_last(overrides?: CallOverrides): Promise; - - get_twap_balances( - _first_balances: [BigNumberish, BigNumberish, BigNumberish], - _last_balances: [BigNumberish, BigNumberish, BigNumberish], - _time_elapsed: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_virtual_price(overrides?: CallOverrides): Promise; - - initial_A(overrides?: CallOverrides): Promise; - - initial_A_time(overrides?: CallOverrides): Promise; - - lp_token(overrides?: CallOverrides): Promise; - - metapoolBase(overrides?: CallOverrides): Promise; - - nCoins(overrides?: CallOverrides): Promise; - - name(overrides?: CallOverrides): Promise; - - remove_all_liquidity_one_coin( - i: BigNumberish, - minRateRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity( - arg0: BigNumberish, - arg1: [BigNumberish, BigNumberish, BigNumberish], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_imbalance( - amounts: [BigNumberish, BigNumberish, BigNumberish], - arg1: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_one_coin( - arg0: BigNumberish, - i: BigNumberish, - arg2: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - targetContract(overrides?: CallOverrides): Promise; - - token(overrides?: CallOverrides): Promise; - - token0(overrides?: CallOverrides): Promise; - - token1(overrides?: CallOverrides): Promise; - - token2(overrides?: CallOverrides): Promise; - - token3(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - underlying0(overrides?: CallOverrides): Promise; - - underlying1(overrides?: CallOverrides): Promise; - - underlying2(overrides?: CallOverrides): Promise; - - underlying3(overrides?: CallOverrides): Promise; - - "underlying_coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "underlying_coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - populateTransaction: { - A(overrides?: CallOverrides): Promise; - - A_precise(overrides?: CallOverrides): Promise; - - _gearboxAdapterType( - overrides?: CallOverrides - ): Promise; - - _gearboxAdapterVersion( - overrides?: CallOverrides - ): Promise; - - add_all_liquidity_one_coin( - i: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - add_liquidity( - amounts: [BigNumberish, BigNumberish, BigNumberish], - arg1: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - add_liquidity_one_coin( - amount: BigNumberish, - i: BigNumberish, - minAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - admin(overrides?: CallOverrides): Promise; - - admin_balances( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - admin_fee(overrides?: CallOverrides): Promise; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - balanceOf( - account: string, - overrides?: CallOverrides - ): Promise; - - "balances(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "balances(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - block_timestamp_last( - overrides?: CallOverrides - ): Promise; - - calc_token_amount( - _amounts: [BigNumberish, BigNumberish, BigNumberish], - _is_deposit: boolean, - overrides?: CallOverrides - ): Promise; - - calc_withdraw_one_coin( - _burn_amount: BigNumberish, - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - exchange( - i: BigNumberish, - j: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_all( - i: BigNumberish, - j: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_all_underlying( - i: BigNumberish, - j: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_underlying( - i: BigNumberish, - j: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fee(overrides?: CallOverrides): Promise; - - future_A(overrides?: CallOverrides): Promise; - - future_A_time(overrides?: CallOverrides): Promise; - - get_balances(overrides?: CallOverrides): Promise; - - get_dy( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_dy_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_previous_balances( - overrides?: CallOverrides - ): Promise; - - get_price_cumulative_last( - overrides?: CallOverrides - ): Promise; - - get_twap_balances( - _first_balances: [BigNumberish, BigNumberish, BigNumberish], - _last_balances: [BigNumberish, BigNumberish, BigNumberish], - _time_elapsed: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_virtual_price(overrides?: CallOverrides): Promise; - - initial_A(overrides?: CallOverrides): Promise; - - initial_A_time(overrides?: CallOverrides): Promise; - - lp_token(overrides?: CallOverrides): Promise; - - metapoolBase(overrides?: CallOverrides): Promise; - - nCoins(overrides?: CallOverrides): Promise; - - name(overrides?: CallOverrides): Promise; - - remove_all_liquidity_one_coin( - i: BigNumberish, - minRateRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity( - arg0: BigNumberish, - arg1: [BigNumberish, BigNumberish, BigNumberish], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_imbalance( - amounts: [BigNumberish, BigNumberish, BigNumberish], - arg1: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_one_coin( - arg0: BigNumberish, - i: BigNumberish, - arg2: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - targetContract(overrides?: CallOverrides): Promise; - - token(overrides?: CallOverrides): Promise; - - token0(overrides?: CallOverrides): Promise; - - token1(overrides?: CallOverrides): Promise; - - token2(overrides?: CallOverrides): Promise; - - token3(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - underlying0(overrides?: CallOverrides): Promise; - - underlying1(overrides?: CallOverrides): Promise; - - underlying2(overrides?: CallOverrides): Promise; - - underlying3(overrides?: CallOverrides): Promise; - - "underlying_coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "underlying_coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; -} diff --git a/src/types/contracts/adapters/curve/CurveV1_3.sol/index.ts b/src/types/contracts/adapters/curve/CurveV1_3.sol/index.ts deleted file mode 100644 index 1b00866c..00000000 --- a/src/types/contracts/adapters/curve/CurveV1_3.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { CurveV1Adapter3Assets } from "./CurveV1Adapter3Assets"; diff --git a/src/types/contracts/adapters/curve/CurveV1_4.sol/CurveV1Adapter4Assets.ts b/src/types/contracts/adapters/curve/CurveV1_4.sol/CurveV1Adapter4Assets.ts deleted file mode 100644 index fb2a40d3..00000000 --- a/src/types/contracts/adapters/curve/CurveV1_4.sol/CurveV1Adapter4Assets.ts +++ /dev/null @@ -1,1694 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface CurveV1Adapter4AssetsInterface extends utils.Interface { - functions: { - "A()": FunctionFragment; - "A_precise()": FunctionFragment; - "_gearboxAdapterType()": FunctionFragment; - "_gearboxAdapterVersion()": FunctionFragment; - "add_all_liquidity_one_coin(int128,uint256)": FunctionFragment; - "add_liquidity(uint256[4],uint256)": FunctionFragment; - "add_liquidity_one_coin(uint256,int128,uint256)": FunctionFragment; - "admin()": FunctionFragment; - "admin_balances(uint256)": FunctionFragment; - "admin_fee()": FunctionFragment; - "allowance(address,address)": FunctionFragment; - "balanceOf(address)": FunctionFragment; - "balances(int128)": FunctionFragment; - "balances(uint256)": FunctionFragment; - "block_timestamp_last()": FunctionFragment; - "calc_token_amount(uint256[4],bool)": FunctionFragment; - "calc_withdraw_one_coin(uint256,int128)": FunctionFragment; - "coins(int128)": FunctionFragment; - "coins(uint256)": FunctionFragment; - "creditFacade()": FunctionFragment; - "creditManager()": FunctionFragment; - "decimals()": FunctionFragment; - "exchange(int128,int128,uint256,uint256)": FunctionFragment; - "exchange_all(int128,int128,uint256)": FunctionFragment; - "exchange_all_underlying(int128,int128,uint256)": FunctionFragment; - "exchange_underlying(int128,int128,uint256,uint256)": FunctionFragment; - "fee()": FunctionFragment; - "future_A()": FunctionFragment; - "future_A_time()": FunctionFragment; - "get_balances()": FunctionFragment; - "get_dy(int128,int128,uint256)": FunctionFragment; - "get_dy_underlying(int128,int128,uint256)": FunctionFragment; - "get_previous_balances()": FunctionFragment; - "get_price_cumulative_last()": FunctionFragment; - "get_twap_balances(uint256[4],uint256[4],uint256)": FunctionFragment; - "get_virtual_price()": FunctionFragment; - "initial_A()": FunctionFragment; - "initial_A_time()": FunctionFragment; - "lp_token()": FunctionFragment; - "metapoolBase()": FunctionFragment; - "nCoins()": FunctionFragment; - "name()": FunctionFragment; - "remove_all_liquidity_one_coin(int128,uint256)": FunctionFragment; - "remove_liquidity(uint256,uint256[4])": FunctionFragment; - "remove_liquidity_imbalance(uint256[4],uint256)": FunctionFragment; - "remove_liquidity_one_coin(uint256,int128,uint256)": FunctionFragment; - "symbol()": FunctionFragment; - "targetContract()": FunctionFragment; - "token()": FunctionFragment; - "token0()": FunctionFragment; - "token1()": FunctionFragment; - "token2()": FunctionFragment; - "token3()": FunctionFragment; - "totalSupply()": FunctionFragment; - "underlying0()": FunctionFragment; - "underlying1()": FunctionFragment; - "underlying2()": FunctionFragment; - "underlying3()": FunctionFragment; - "underlying_coins(int128)": FunctionFragment; - "underlying_coins(uint256)": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "A" - | "A_precise" - | "_gearboxAdapterType" - | "_gearboxAdapterVersion" - | "add_all_liquidity_one_coin" - | "add_liquidity" - | "add_liquidity_one_coin" - | "admin" - | "admin_balances" - | "admin_fee" - | "allowance" - | "balanceOf" - | "balances(int128)" - | "balances(uint256)" - | "block_timestamp_last" - | "calc_token_amount" - | "calc_withdraw_one_coin" - | "coins(int128)" - | "coins(uint256)" - | "creditFacade" - | "creditManager" - | "decimals" - | "exchange" - | "exchange_all" - | "exchange_all_underlying" - | "exchange_underlying" - | "fee" - | "future_A" - | "future_A_time" - | "get_balances" - | "get_dy" - | "get_dy_underlying" - | "get_previous_balances" - | "get_price_cumulative_last" - | "get_twap_balances" - | "get_virtual_price" - | "initial_A" - | "initial_A_time" - | "lp_token" - | "metapoolBase" - | "nCoins" - | "name" - | "remove_all_liquidity_one_coin" - | "remove_liquidity" - | "remove_liquidity_imbalance" - | "remove_liquidity_one_coin" - | "symbol" - | "targetContract" - | "token" - | "token0" - | "token1" - | "token2" - | "token3" - | "totalSupply" - | "underlying0" - | "underlying1" - | "underlying2" - | "underlying3" - | "underlying_coins(int128)" - | "underlying_coins(uint256)" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "A", values?: undefined): string; - encodeFunctionData(functionFragment: "A_precise", values?: undefined): string; - encodeFunctionData( - functionFragment: "_gearboxAdapterType", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "_gearboxAdapterVersion", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "add_all_liquidity_one_coin", - values: [BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "add_liquidity", - values: [ - [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - BigNumberish - ] - ): string; - encodeFunctionData( - functionFragment: "add_liquidity_one_coin", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "admin", values?: undefined): string; - encodeFunctionData( - functionFragment: "admin_balances", - values: [BigNumberish] - ): string; - encodeFunctionData(functionFragment: "admin_fee", values?: undefined): string; - encodeFunctionData( - functionFragment: "allowance", - values: [string, string] - ): string; - encodeFunctionData(functionFragment: "balanceOf", values: [string]): string; - encodeFunctionData( - functionFragment: "balances(int128)", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "balances(uint256)", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "block_timestamp_last", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "calc_token_amount", - values: [[BigNumberish, BigNumberish, BigNumberish, BigNumberish], boolean] - ): string; - encodeFunctionData( - functionFragment: "calc_withdraw_one_coin", - values: [BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "coins(int128)", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "coins(uint256)", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "creditFacade", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditManager", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "decimals", values?: undefined): string; - encodeFunctionData( - functionFragment: "exchange", - values: [BigNumberish, BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "exchange_all", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "exchange_all_underlying", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "exchange_underlying", - values: [BigNumberish, BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "fee", values?: undefined): string; - encodeFunctionData(functionFragment: "future_A", values?: undefined): string; - encodeFunctionData( - functionFragment: "future_A_time", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "get_balances", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "get_dy", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "get_dy_underlying", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "get_previous_balances", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "get_price_cumulative_last", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "get_twap_balances", - values: [ - [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - BigNumberish - ] - ): string; - encodeFunctionData( - functionFragment: "get_virtual_price", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "initial_A", values?: undefined): string; - encodeFunctionData( - functionFragment: "initial_A_time", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "lp_token", values?: undefined): string; - encodeFunctionData( - functionFragment: "metapoolBase", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "nCoins", values?: undefined): string; - encodeFunctionData(functionFragment: "name", values?: undefined): string; - encodeFunctionData( - functionFragment: "remove_all_liquidity_one_coin", - values: [BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "remove_liquidity", - values: [ - BigNumberish, - [BigNumberish, BigNumberish, BigNumberish, BigNumberish] - ] - ): string; - encodeFunctionData( - functionFragment: "remove_liquidity_imbalance", - values: [ - [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - BigNumberish - ] - ): string; - encodeFunctionData( - functionFragment: "remove_liquidity_one_coin", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "symbol", values?: undefined): string; - encodeFunctionData( - functionFragment: "targetContract", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "token", values?: undefined): string; - encodeFunctionData(functionFragment: "token0", values?: undefined): string; - encodeFunctionData(functionFragment: "token1", values?: undefined): string; - encodeFunctionData(functionFragment: "token2", values?: undefined): string; - encodeFunctionData(functionFragment: "token3", values?: undefined): string; - encodeFunctionData( - functionFragment: "totalSupply", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "underlying0", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "underlying1", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "underlying2", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "underlying3", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "underlying_coins(int128)", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "underlying_coins(uint256)", - values: [BigNumberish] - ): string; - - decodeFunctionResult(functionFragment: "A", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "A_precise", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "_gearboxAdapterType", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "_gearboxAdapterVersion", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "add_all_liquidity_one_coin", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "add_liquidity", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "add_liquidity_one_coin", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "admin", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "admin_balances", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "admin_fee", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "balances(int128)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "balances(uint256)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "block_timestamp_last", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "calc_token_amount", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "calc_withdraw_one_coin", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "coins(int128)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "coins(uint256)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditFacade", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditManager", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "exchange", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "exchange_all", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "exchange_all_underlying", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "exchange_underlying", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "fee", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "future_A", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "future_A_time", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "get_balances", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "get_dy", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "get_dy_underlying", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "get_previous_balances", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "get_price_cumulative_last", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "get_twap_balances", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "get_virtual_price", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "initial_A", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "initial_A_time", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "lp_token", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "metapoolBase", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "nCoins", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "remove_all_liquidity_one_coin", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "remove_liquidity", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "remove_liquidity_imbalance", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "remove_liquidity_one_coin", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "targetContract", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "token", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "token0", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "token1", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "token2", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "token3", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "totalSupply", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "underlying0", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "underlying1", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "underlying2", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "underlying3", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "underlying_coins(int128)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "underlying_coins(uint256)", - data: BytesLike - ): Result; - - events: {}; -} - -export interface CurveV1Adapter4Assets extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: CurveV1Adapter4AssetsInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - A(overrides?: CallOverrides): Promise<[BigNumber]>; - - A_precise(overrides?: CallOverrides): Promise<[BigNumber]>; - - _gearboxAdapterType(overrides?: CallOverrides): Promise<[number]>; - - _gearboxAdapterVersion(overrides?: CallOverrides): Promise<[number]>; - - add_all_liquidity_one_coin( - i: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - add_liquidity( - amounts: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - arg1: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - add_liquidity_one_coin( - amount: BigNumberish, - i: BigNumberish, - minAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - admin(overrides?: CallOverrides): Promise<[string]>; - - admin_balances( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - admin_fee(overrides?: CallOverrides): Promise<[BigNumber]>; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - balanceOf(account: string, overrides?: CallOverrides): Promise<[BigNumber]>; - - "balances(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "balances(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - block_timestamp_last(overrides?: CallOverrides): Promise<[BigNumber]>; - - calc_token_amount( - _amounts: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - _is_deposit: boolean, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - calc_withdraw_one_coin( - _burn_amount: BigNumberish, - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - "coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - creditFacade(overrides?: CallOverrides): Promise<[string]>; - - creditManager(overrides?: CallOverrides): Promise<[string]>; - - decimals(overrides?: CallOverrides): Promise<[BigNumber]>; - - exchange( - i: BigNumberish, - j: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_all( - i: BigNumberish, - j: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_all_underlying( - i: BigNumberish, - j: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_underlying( - i: BigNumberish, - j: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fee(overrides?: CallOverrides): Promise<[BigNumber]>; - - future_A(overrides?: CallOverrides): Promise<[BigNumber]>; - - future_A_time(overrides?: CallOverrides): Promise<[BigNumber]>; - - get_balances( - overrides?: CallOverrides - ): Promise<[[BigNumber, BigNumber, BigNumber, BigNumber]]>; - - get_dy( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - get_dy_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - get_previous_balances( - overrides?: CallOverrides - ): Promise<[[BigNumber, BigNumber, BigNumber, BigNumber]]>; - - get_price_cumulative_last( - overrides?: CallOverrides - ): Promise<[[BigNumber, BigNumber, BigNumber, BigNumber]]>; - - get_twap_balances( - _first_balances: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - _last_balances: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - _time_elapsed: BigNumberish, - overrides?: CallOverrides - ): Promise<[[BigNumber, BigNumber, BigNumber, BigNumber]]>; - - get_virtual_price(overrides?: CallOverrides): Promise<[BigNumber]>; - - initial_A(overrides?: CallOverrides): Promise<[BigNumber]>; - - initial_A_time(overrides?: CallOverrides): Promise<[BigNumber]>; - - lp_token(overrides?: CallOverrides): Promise<[string]>; - - metapoolBase(overrides?: CallOverrides): Promise<[string]>; - - nCoins(overrides?: CallOverrides): Promise<[BigNumber]>; - - name(overrides?: CallOverrides): Promise<[string]>; - - remove_all_liquidity_one_coin( - i: BigNumberish, - minRateRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity( - arg0: BigNumberish, - arg1: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_imbalance( - amounts: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - arg1: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_one_coin( - arg0: BigNumberish, - i: BigNumberish, - arg2: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise<[string]>; - - targetContract(overrides?: CallOverrides): Promise<[string]>; - - token(overrides?: CallOverrides): Promise<[string]>; - - token0(overrides?: CallOverrides): Promise<[string]>; - - token1(overrides?: CallOverrides): Promise<[string]>; - - token2(overrides?: CallOverrides): Promise<[string]>; - - token3(overrides?: CallOverrides): Promise<[string]>; - - totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>; - - underlying0(overrides?: CallOverrides): Promise<[string]>; - - underlying1(overrides?: CallOverrides): Promise<[string]>; - - underlying2(overrides?: CallOverrides): Promise<[string]>; - - underlying3(overrides?: CallOverrides): Promise<[string]>; - - "underlying_coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - "underlying_coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - }; - - A(overrides?: CallOverrides): Promise; - - A_precise(overrides?: CallOverrides): Promise; - - _gearboxAdapterType(overrides?: CallOverrides): Promise; - - _gearboxAdapterVersion(overrides?: CallOverrides): Promise; - - add_all_liquidity_one_coin( - i: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - add_liquidity( - amounts: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - arg1: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - add_liquidity_one_coin( - amount: BigNumberish, - i: BigNumberish, - minAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - admin(overrides?: CallOverrides): Promise; - - admin_balances( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - admin_fee(overrides?: CallOverrides): Promise; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - "balances(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "balances(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - block_timestamp_last(overrides?: CallOverrides): Promise; - - calc_token_amount( - _amounts: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - _is_deposit: boolean, - overrides?: CallOverrides - ): Promise; - - calc_withdraw_one_coin( - _burn_amount: BigNumberish, - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(int128)"(i: BigNumberish, overrides?: CallOverrides): Promise; - - "coins(uint256)"(i: BigNumberish, overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - exchange( - i: BigNumberish, - j: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_all( - i: BigNumberish, - j: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_all_underlying( - i: BigNumberish, - j: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_underlying( - i: BigNumberish, - j: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fee(overrides?: CallOverrides): Promise; - - future_A(overrides?: CallOverrides): Promise; - - future_A_time(overrides?: CallOverrides): Promise; - - get_balances( - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber, BigNumber, BigNumber]>; - - get_dy( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_dy_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_previous_balances( - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber, BigNumber, BigNumber]>; - - get_price_cumulative_last( - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber, BigNumber, BigNumber]>; - - get_twap_balances( - _first_balances: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - _last_balances: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - _time_elapsed: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber, BigNumber, BigNumber]>; - - get_virtual_price(overrides?: CallOverrides): Promise; - - initial_A(overrides?: CallOverrides): Promise; - - initial_A_time(overrides?: CallOverrides): Promise; - - lp_token(overrides?: CallOverrides): Promise; - - metapoolBase(overrides?: CallOverrides): Promise; - - nCoins(overrides?: CallOverrides): Promise; - - name(overrides?: CallOverrides): Promise; - - remove_all_liquidity_one_coin( - i: BigNumberish, - minRateRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity( - arg0: BigNumberish, - arg1: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_imbalance( - amounts: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - arg1: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_one_coin( - arg0: BigNumberish, - i: BigNumberish, - arg2: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - targetContract(overrides?: CallOverrides): Promise; - - token(overrides?: CallOverrides): Promise; - - token0(overrides?: CallOverrides): Promise; - - token1(overrides?: CallOverrides): Promise; - - token2(overrides?: CallOverrides): Promise; - - token3(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - underlying0(overrides?: CallOverrides): Promise; - - underlying1(overrides?: CallOverrides): Promise; - - underlying2(overrides?: CallOverrides): Promise; - - underlying3(overrides?: CallOverrides): Promise; - - "underlying_coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "underlying_coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - callStatic: { - A(overrides?: CallOverrides): Promise; - - A_precise(overrides?: CallOverrides): Promise; - - _gearboxAdapterType(overrides?: CallOverrides): Promise; - - _gearboxAdapterVersion(overrides?: CallOverrides): Promise; - - add_all_liquidity_one_coin( - i: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: CallOverrides - ): Promise; - - add_liquidity( - amounts: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - add_liquidity_one_coin( - amount: BigNumberish, - i: BigNumberish, - minAmount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - admin(overrides?: CallOverrides): Promise; - - admin_balances( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - admin_fee(overrides?: CallOverrides): Promise; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - "balances(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "balances(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - block_timestamp_last(overrides?: CallOverrides): Promise; - - calc_token_amount( - _amounts: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - _is_deposit: boolean, - overrides?: CallOverrides - ): Promise; - - calc_withdraw_one_coin( - _burn_amount: BigNumberish, - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - exchange( - i: BigNumberish, - j: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - overrides?: CallOverrides - ): Promise; - - exchange_all( - i: BigNumberish, - j: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: CallOverrides - ): Promise; - - exchange_all_underlying( - i: BigNumberish, - j: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: CallOverrides - ): Promise; - - exchange_underlying( - i: BigNumberish, - j: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - overrides?: CallOverrides - ): Promise; - - fee(overrides?: CallOverrides): Promise; - - future_A(overrides?: CallOverrides): Promise; - - future_A_time(overrides?: CallOverrides): Promise; - - get_balances( - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber, BigNumber, BigNumber]>; - - get_dy( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_dy_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_previous_balances( - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber, BigNumber, BigNumber]>; - - get_price_cumulative_last( - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber, BigNumber, BigNumber]>; - - get_twap_balances( - _first_balances: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - _last_balances: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - _time_elapsed: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber, BigNumber, BigNumber]>; - - get_virtual_price(overrides?: CallOverrides): Promise; - - initial_A(overrides?: CallOverrides): Promise; - - initial_A_time(overrides?: CallOverrides): Promise; - - lp_token(overrides?: CallOverrides): Promise; - - metapoolBase(overrides?: CallOverrides): Promise; - - nCoins(overrides?: CallOverrides): Promise; - - name(overrides?: CallOverrides): Promise; - - remove_all_liquidity_one_coin( - i: BigNumberish, - minRateRAY: BigNumberish, - overrides?: CallOverrides - ): Promise; - - remove_liquidity( - arg0: BigNumberish, - arg1: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - overrides?: CallOverrides - ): Promise; - - remove_liquidity_imbalance( - amounts: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - remove_liquidity_one_coin( - arg0: BigNumberish, - i: BigNumberish, - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - targetContract(overrides?: CallOverrides): Promise; - - token(overrides?: CallOverrides): Promise; - - token0(overrides?: CallOverrides): Promise; - - token1(overrides?: CallOverrides): Promise; - - token2(overrides?: CallOverrides): Promise; - - token3(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - underlying0(overrides?: CallOverrides): Promise; - - underlying1(overrides?: CallOverrides): Promise; - - underlying2(overrides?: CallOverrides): Promise; - - underlying3(overrides?: CallOverrides): Promise; - - "underlying_coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "underlying_coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - filters: {}; - - estimateGas: { - A(overrides?: CallOverrides): Promise; - - A_precise(overrides?: CallOverrides): Promise; - - _gearboxAdapterType(overrides?: CallOverrides): Promise; - - _gearboxAdapterVersion(overrides?: CallOverrides): Promise; - - add_all_liquidity_one_coin( - i: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - add_liquidity( - amounts: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - arg1: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - add_liquidity_one_coin( - amount: BigNumberish, - i: BigNumberish, - minAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - admin(overrides?: CallOverrides): Promise; - - admin_balances( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - admin_fee(overrides?: CallOverrides): Promise; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - "balances(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "balances(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - block_timestamp_last(overrides?: CallOverrides): Promise; - - calc_token_amount( - _amounts: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - _is_deposit: boolean, - overrides?: CallOverrides - ): Promise; - - calc_withdraw_one_coin( - _burn_amount: BigNumberish, - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - exchange( - i: BigNumberish, - j: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_all( - i: BigNumberish, - j: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_all_underlying( - i: BigNumberish, - j: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_underlying( - i: BigNumberish, - j: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fee(overrides?: CallOverrides): Promise; - - future_A(overrides?: CallOverrides): Promise; - - future_A_time(overrides?: CallOverrides): Promise; - - get_balances(overrides?: CallOverrides): Promise; - - get_dy( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_dy_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_previous_balances(overrides?: CallOverrides): Promise; - - get_price_cumulative_last(overrides?: CallOverrides): Promise; - - get_twap_balances( - _first_balances: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - _last_balances: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - _time_elapsed: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_virtual_price(overrides?: CallOverrides): Promise; - - initial_A(overrides?: CallOverrides): Promise; - - initial_A_time(overrides?: CallOverrides): Promise; - - lp_token(overrides?: CallOverrides): Promise; - - metapoolBase(overrides?: CallOverrides): Promise; - - nCoins(overrides?: CallOverrides): Promise; - - name(overrides?: CallOverrides): Promise; - - remove_all_liquidity_one_coin( - i: BigNumberish, - minRateRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity( - arg0: BigNumberish, - arg1: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_imbalance( - amounts: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - arg1: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_one_coin( - arg0: BigNumberish, - i: BigNumberish, - arg2: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - targetContract(overrides?: CallOverrides): Promise; - - token(overrides?: CallOverrides): Promise; - - token0(overrides?: CallOverrides): Promise; - - token1(overrides?: CallOverrides): Promise; - - token2(overrides?: CallOverrides): Promise; - - token3(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - underlying0(overrides?: CallOverrides): Promise; - - underlying1(overrides?: CallOverrides): Promise; - - underlying2(overrides?: CallOverrides): Promise; - - underlying3(overrides?: CallOverrides): Promise; - - "underlying_coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "underlying_coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - populateTransaction: { - A(overrides?: CallOverrides): Promise; - - A_precise(overrides?: CallOverrides): Promise; - - _gearboxAdapterType( - overrides?: CallOverrides - ): Promise; - - _gearboxAdapterVersion( - overrides?: CallOverrides - ): Promise; - - add_all_liquidity_one_coin( - i: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - add_liquidity( - amounts: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - arg1: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - add_liquidity_one_coin( - amount: BigNumberish, - i: BigNumberish, - minAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - admin(overrides?: CallOverrides): Promise; - - admin_balances( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - admin_fee(overrides?: CallOverrides): Promise; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - balanceOf( - account: string, - overrides?: CallOverrides - ): Promise; - - "balances(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "balances(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - block_timestamp_last( - overrides?: CallOverrides - ): Promise; - - calc_token_amount( - _amounts: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - _is_deposit: boolean, - overrides?: CallOverrides - ): Promise; - - calc_withdraw_one_coin( - _burn_amount: BigNumberish, - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - exchange( - i: BigNumberish, - j: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_all( - i: BigNumberish, - j: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_all_underlying( - i: BigNumberish, - j: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_underlying( - i: BigNumberish, - j: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fee(overrides?: CallOverrides): Promise; - - future_A(overrides?: CallOverrides): Promise; - - future_A_time(overrides?: CallOverrides): Promise; - - get_balances(overrides?: CallOverrides): Promise; - - get_dy( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_dy_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_previous_balances( - overrides?: CallOverrides - ): Promise; - - get_price_cumulative_last( - overrides?: CallOverrides - ): Promise; - - get_twap_balances( - _first_balances: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - _last_balances: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - _time_elapsed: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_virtual_price(overrides?: CallOverrides): Promise; - - initial_A(overrides?: CallOverrides): Promise; - - initial_A_time(overrides?: CallOverrides): Promise; - - lp_token(overrides?: CallOverrides): Promise; - - metapoolBase(overrides?: CallOverrides): Promise; - - nCoins(overrides?: CallOverrides): Promise; - - name(overrides?: CallOverrides): Promise; - - remove_all_liquidity_one_coin( - i: BigNumberish, - minRateRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity( - arg0: BigNumberish, - arg1: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_imbalance( - amounts: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - arg1: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_one_coin( - arg0: BigNumberish, - i: BigNumberish, - arg2: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - targetContract(overrides?: CallOverrides): Promise; - - token(overrides?: CallOverrides): Promise; - - token0(overrides?: CallOverrides): Promise; - - token1(overrides?: CallOverrides): Promise; - - token2(overrides?: CallOverrides): Promise; - - token3(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - underlying0(overrides?: CallOverrides): Promise; - - underlying1(overrides?: CallOverrides): Promise; - - underlying2(overrides?: CallOverrides): Promise; - - underlying3(overrides?: CallOverrides): Promise; - - "underlying_coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "underlying_coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; -} diff --git a/src/types/contracts/adapters/curve/CurveV1_4.sol/index.ts b/src/types/contracts/adapters/curve/CurveV1_4.sol/index.ts deleted file mode 100644 index 7cf1988b..00000000 --- a/src/types/contracts/adapters/curve/CurveV1_4.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { CurveV1Adapter4Assets } from "./CurveV1Adapter4Assets"; diff --git a/src/types/contracts/adapters/curve/CurveV1_Base.sol/CurveV1AdapterBase.ts b/src/types/contracts/adapters/curve/CurveV1_Base.sol/CurveV1AdapterBase.ts deleted file mode 100644 index 6623cd03..00000000 --- a/src/types/contracts/adapters/curve/CurveV1_Base.sol/CurveV1AdapterBase.ts +++ /dev/null @@ -1,1394 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface CurveV1AdapterBaseInterface extends utils.Interface { - functions: { - "A()": FunctionFragment; - "A_precise()": FunctionFragment; - "_gearboxAdapterType()": FunctionFragment; - "_gearboxAdapterVersion()": FunctionFragment; - "add_all_liquidity_one_coin(int128,uint256)": FunctionFragment; - "add_liquidity_one_coin(uint256,int128,uint256)": FunctionFragment; - "admin()": FunctionFragment; - "admin_balances(uint256)": FunctionFragment; - "admin_fee()": FunctionFragment; - "allowance(address,address)": FunctionFragment; - "balanceOf(address)": FunctionFragment; - "balances(int128)": FunctionFragment; - "balances(uint256)": FunctionFragment; - "block_timestamp_last()": FunctionFragment; - "calc_withdraw_one_coin(uint256,int128)": FunctionFragment; - "coins(int128)": FunctionFragment; - "coins(uint256)": FunctionFragment; - "creditFacade()": FunctionFragment; - "creditManager()": FunctionFragment; - "decimals()": FunctionFragment; - "exchange(int128,int128,uint256,uint256)": FunctionFragment; - "exchange_all(int128,int128,uint256)": FunctionFragment; - "exchange_all_underlying(int128,int128,uint256)": FunctionFragment; - "exchange_underlying(int128,int128,uint256,uint256)": FunctionFragment; - "fee()": FunctionFragment; - "future_A()": FunctionFragment; - "future_A_time()": FunctionFragment; - "get_dy(int128,int128,uint256)": FunctionFragment; - "get_dy_underlying(int128,int128,uint256)": FunctionFragment; - "get_virtual_price()": FunctionFragment; - "initial_A()": FunctionFragment; - "initial_A_time()": FunctionFragment; - "lp_token()": FunctionFragment; - "metapoolBase()": FunctionFragment; - "nCoins()": FunctionFragment; - "name()": FunctionFragment; - "remove_all_liquidity_one_coin(int128,uint256)": FunctionFragment; - "remove_liquidity_one_coin(uint256,int128,uint256)": FunctionFragment; - "symbol()": FunctionFragment; - "targetContract()": FunctionFragment; - "token()": FunctionFragment; - "token0()": FunctionFragment; - "token1()": FunctionFragment; - "token2()": FunctionFragment; - "token3()": FunctionFragment; - "totalSupply()": FunctionFragment; - "underlying0()": FunctionFragment; - "underlying1()": FunctionFragment; - "underlying2()": FunctionFragment; - "underlying3()": FunctionFragment; - "underlying_coins(int128)": FunctionFragment; - "underlying_coins(uint256)": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "A" - | "A_precise" - | "_gearboxAdapterType" - | "_gearboxAdapterVersion" - | "add_all_liquidity_one_coin" - | "add_liquidity_one_coin" - | "admin" - | "admin_balances" - | "admin_fee" - | "allowance" - | "balanceOf" - | "balances(int128)" - | "balances(uint256)" - | "block_timestamp_last" - | "calc_withdraw_one_coin" - | "coins(int128)" - | "coins(uint256)" - | "creditFacade" - | "creditManager" - | "decimals" - | "exchange" - | "exchange_all" - | "exchange_all_underlying" - | "exchange_underlying" - | "fee" - | "future_A" - | "future_A_time" - | "get_dy" - | "get_dy_underlying" - | "get_virtual_price" - | "initial_A" - | "initial_A_time" - | "lp_token" - | "metapoolBase" - | "nCoins" - | "name" - | "remove_all_liquidity_one_coin" - | "remove_liquidity_one_coin" - | "symbol" - | "targetContract" - | "token" - | "token0" - | "token1" - | "token2" - | "token3" - | "totalSupply" - | "underlying0" - | "underlying1" - | "underlying2" - | "underlying3" - | "underlying_coins(int128)" - | "underlying_coins(uint256)" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "A", values?: undefined): string; - encodeFunctionData(functionFragment: "A_precise", values?: undefined): string; - encodeFunctionData( - functionFragment: "_gearboxAdapterType", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "_gearboxAdapterVersion", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "add_all_liquidity_one_coin", - values: [BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "add_liquidity_one_coin", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "admin", values?: undefined): string; - encodeFunctionData( - functionFragment: "admin_balances", - values: [BigNumberish] - ): string; - encodeFunctionData(functionFragment: "admin_fee", values?: undefined): string; - encodeFunctionData( - functionFragment: "allowance", - values: [string, string] - ): string; - encodeFunctionData(functionFragment: "balanceOf", values: [string]): string; - encodeFunctionData( - functionFragment: "balances(int128)", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "balances(uint256)", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "block_timestamp_last", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "calc_withdraw_one_coin", - values: [BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "coins(int128)", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "coins(uint256)", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "creditFacade", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditManager", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "decimals", values?: undefined): string; - encodeFunctionData( - functionFragment: "exchange", - values: [BigNumberish, BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "exchange_all", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "exchange_all_underlying", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "exchange_underlying", - values: [BigNumberish, BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "fee", values?: undefined): string; - encodeFunctionData(functionFragment: "future_A", values?: undefined): string; - encodeFunctionData( - functionFragment: "future_A_time", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "get_dy", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "get_dy_underlying", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "get_virtual_price", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "initial_A", values?: undefined): string; - encodeFunctionData( - functionFragment: "initial_A_time", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "lp_token", values?: undefined): string; - encodeFunctionData( - functionFragment: "metapoolBase", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "nCoins", values?: undefined): string; - encodeFunctionData(functionFragment: "name", values?: undefined): string; - encodeFunctionData( - functionFragment: "remove_all_liquidity_one_coin", - values: [BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "remove_liquidity_one_coin", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "symbol", values?: undefined): string; - encodeFunctionData( - functionFragment: "targetContract", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "token", values?: undefined): string; - encodeFunctionData(functionFragment: "token0", values?: undefined): string; - encodeFunctionData(functionFragment: "token1", values?: undefined): string; - encodeFunctionData(functionFragment: "token2", values?: undefined): string; - encodeFunctionData(functionFragment: "token3", values?: undefined): string; - encodeFunctionData( - functionFragment: "totalSupply", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "underlying0", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "underlying1", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "underlying2", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "underlying3", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "underlying_coins(int128)", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "underlying_coins(uint256)", - values: [BigNumberish] - ): string; - - decodeFunctionResult(functionFragment: "A", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "A_precise", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "_gearboxAdapterType", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "_gearboxAdapterVersion", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "add_all_liquidity_one_coin", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "add_liquidity_one_coin", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "admin", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "admin_balances", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "admin_fee", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "balances(int128)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "balances(uint256)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "block_timestamp_last", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "calc_withdraw_one_coin", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "coins(int128)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "coins(uint256)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditFacade", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditManager", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "exchange", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "exchange_all", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "exchange_all_underlying", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "exchange_underlying", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "fee", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "future_A", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "future_A_time", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "get_dy", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "get_dy_underlying", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "get_virtual_price", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "initial_A", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "initial_A_time", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "lp_token", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "metapoolBase", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "nCoins", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "remove_all_liquidity_one_coin", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "remove_liquidity_one_coin", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "targetContract", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "token", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "token0", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "token1", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "token2", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "token3", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "totalSupply", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "underlying0", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "underlying1", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "underlying2", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "underlying3", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "underlying_coins(int128)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "underlying_coins(uint256)", - data: BytesLike - ): Result; - - events: {}; -} - -export interface CurveV1AdapterBase extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: CurveV1AdapterBaseInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - A(overrides?: CallOverrides): Promise<[BigNumber]>; - - A_precise(overrides?: CallOverrides): Promise<[BigNumber]>; - - _gearboxAdapterType(overrides?: CallOverrides): Promise<[number]>; - - _gearboxAdapterVersion(overrides?: CallOverrides): Promise<[number]>; - - add_all_liquidity_one_coin( - i: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - add_liquidity_one_coin( - amount: BigNumberish, - i: BigNumberish, - minAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - admin(overrides?: CallOverrides): Promise<[string]>; - - admin_balances( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - admin_fee(overrides?: CallOverrides): Promise<[BigNumber]>; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - balanceOf(account: string, overrides?: CallOverrides): Promise<[BigNumber]>; - - "balances(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "balances(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - block_timestamp_last(overrides?: CallOverrides): Promise<[BigNumber]>; - - calc_withdraw_one_coin( - _burn_amount: BigNumberish, - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - "coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - creditFacade(overrides?: CallOverrides): Promise<[string]>; - - creditManager(overrides?: CallOverrides): Promise<[string]>; - - decimals(overrides?: CallOverrides): Promise<[BigNumber]>; - - exchange( - i: BigNumberish, - j: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_all( - i: BigNumberish, - j: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_all_underlying( - i: BigNumberish, - j: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_underlying( - i: BigNumberish, - j: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fee(overrides?: CallOverrides): Promise<[BigNumber]>; - - future_A(overrides?: CallOverrides): Promise<[BigNumber]>; - - future_A_time(overrides?: CallOverrides): Promise<[BigNumber]>; - - get_dy( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - get_dy_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - get_virtual_price(overrides?: CallOverrides): Promise<[BigNumber]>; - - initial_A(overrides?: CallOverrides): Promise<[BigNumber]>; - - initial_A_time(overrides?: CallOverrides): Promise<[BigNumber]>; - - lp_token(overrides?: CallOverrides): Promise<[string]>; - - metapoolBase(overrides?: CallOverrides): Promise<[string]>; - - nCoins(overrides?: CallOverrides): Promise<[BigNumber]>; - - name(overrides?: CallOverrides): Promise<[string]>; - - remove_all_liquidity_one_coin( - i: BigNumberish, - minRateRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_one_coin( - arg0: BigNumberish, - i: BigNumberish, - arg2: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise<[string]>; - - targetContract(overrides?: CallOverrides): Promise<[string]>; - - token(overrides?: CallOverrides): Promise<[string]>; - - token0(overrides?: CallOverrides): Promise<[string]>; - - token1(overrides?: CallOverrides): Promise<[string]>; - - token2(overrides?: CallOverrides): Promise<[string]>; - - token3(overrides?: CallOverrides): Promise<[string]>; - - totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>; - - underlying0(overrides?: CallOverrides): Promise<[string]>; - - underlying1(overrides?: CallOverrides): Promise<[string]>; - - underlying2(overrides?: CallOverrides): Promise<[string]>; - - underlying3(overrides?: CallOverrides): Promise<[string]>; - - "underlying_coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - "underlying_coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - }; - - A(overrides?: CallOverrides): Promise; - - A_precise(overrides?: CallOverrides): Promise; - - _gearboxAdapterType(overrides?: CallOverrides): Promise; - - _gearboxAdapterVersion(overrides?: CallOverrides): Promise; - - add_all_liquidity_one_coin( - i: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - add_liquidity_one_coin( - amount: BigNumberish, - i: BigNumberish, - minAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - admin(overrides?: CallOverrides): Promise; - - admin_balances( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - admin_fee(overrides?: CallOverrides): Promise; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - "balances(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "balances(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - block_timestamp_last(overrides?: CallOverrides): Promise; - - calc_withdraw_one_coin( - _burn_amount: BigNumberish, - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(int128)"(i: BigNumberish, overrides?: CallOverrides): Promise; - - "coins(uint256)"(i: BigNumberish, overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - exchange( - i: BigNumberish, - j: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_all( - i: BigNumberish, - j: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_all_underlying( - i: BigNumberish, - j: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_underlying( - i: BigNumberish, - j: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fee(overrides?: CallOverrides): Promise; - - future_A(overrides?: CallOverrides): Promise; - - future_A_time(overrides?: CallOverrides): Promise; - - get_dy( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_dy_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_virtual_price(overrides?: CallOverrides): Promise; - - initial_A(overrides?: CallOverrides): Promise; - - initial_A_time(overrides?: CallOverrides): Promise; - - lp_token(overrides?: CallOverrides): Promise; - - metapoolBase(overrides?: CallOverrides): Promise; - - nCoins(overrides?: CallOverrides): Promise; - - name(overrides?: CallOverrides): Promise; - - remove_all_liquidity_one_coin( - i: BigNumberish, - minRateRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_one_coin( - arg0: BigNumberish, - i: BigNumberish, - arg2: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - targetContract(overrides?: CallOverrides): Promise; - - token(overrides?: CallOverrides): Promise; - - token0(overrides?: CallOverrides): Promise; - - token1(overrides?: CallOverrides): Promise; - - token2(overrides?: CallOverrides): Promise; - - token3(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - underlying0(overrides?: CallOverrides): Promise; - - underlying1(overrides?: CallOverrides): Promise; - - underlying2(overrides?: CallOverrides): Promise; - - underlying3(overrides?: CallOverrides): Promise; - - "underlying_coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "underlying_coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - callStatic: { - A(overrides?: CallOverrides): Promise; - - A_precise(overrides?: CallOverrides): Promise; - - _gearboxAdapterType(overrides?: CallOverrides): Promise; - - _gearboxAdapterVersion(overrides?: CallOverrides): Promise; - - add_all_liquidity_one_coin( - i: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: CallOverrides - ): Promise; - - add_liquidity_one_coin( - amount: BigNumberish, - i: BigNumberish, - minAmount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - admin(overrides?: CallOverrides): Promise; - - admin_balances( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - admin_fee(overrides?: CallOverrides): Promise; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - "balances(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "balances(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - block_timestamp_last(overrides?: CallOverrides): Promise; - - calc_withdraw_one_coin( - _burn_amount: BigNumberish, - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - exchange( - i: BigNumberish, - j: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - overrides?: CallOverrides - ): Promise; - - exchange_all( - i: BigNumberish, - j: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: CallOverrides - ): Promise; - - exchange_all_underlying( - i: BigNumberish, - j: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: CallOverrides - ): Promise; - - exchange_underlying( - i: BigNumberish, - j: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - overrides?: CallOverrides - ): Promise; - - fee(overrides?: CallOverrides): Promise; - - future_A(overrides?: CallOverrides): Promise; - - future_A_time(overrides?: CallOverrides): Promise; - - get_dy( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_dy_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_virtual_price(overrides?: CallOverrides): Promise; - - initial_A(overrides?: CallOverrides): Promise; - - initial_A_time(overrides?: CallOverrides): Promise; - - lp_token(overrides?: CallOverrides): Promise; - - metapoolBase(overrides?: CallOverrides): Promise; - - nCoins(overrides?: CallOverrides): Promise; - - name(overrides?: CallOverrides): Promise; - - remove_all_liquidity_one_coin( - i: BigNumberish, - minRateRAY: BigNumberish, - overrides?: CallOverrides - ): Promise; - - remove_liquidity_one_coin( - arg0: BigNumberish, - i: BigNumberish, - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - targetContract(overrides?: CallOverrides): Promise; - - token(overrides?: CallOverrides): Promise; - - token0(overrides?: CallOverrides): Promise; - - token1(overrides?: CallOverrides): Promise; - - token2(overrides?: CallOverrides): Promise; - - token3(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - underlying0(overrides?: CallOverrides): Promise; - - underlying1(overrides?: CallOverrides): Promise; - - underlying2(overrides?: CallOverrides): Promise; - - underlying3(overrides?: CallOverrides): Promise; - - "underlying_coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "underlying_coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - filters: {}; - - estimateGas: { - A(overrides?: CallOverrides): Promise; - - A_precise(overrides?: CallOverrides): Promise; - - _gearboxAdapterType(overrides?: CallOverrides): Promise; - - _gearboxAdapterVersion(overrides?: CallOverrides): Promise; - - add_all_liquidity_one_coin( - i: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - add_liquidity_one_coin( - amount: BigNumberish, - i: BigNumberish, - minAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - admin(overrides?: CallOverrides): Promise; - - admin_balances( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - admin_fee(overrides?: CallOverrides): Promise; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - "balances(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "balances(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - block_timestamp_last(overrides?: CallOverrides): Promise; - - calc_withdraw_one_coin( - _burn_amount: BigNumberish, - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - exchange( - i: BigNumberish, - j: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_all( - i: BigNumberish, - j: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_all_underlying( - i: BigNumberish, - j: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_underlying( - i: BigNumberish, - j: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fee(overrides?: CallOverrides): Promise; - - future_A(overrides?: CallOverrides): Promise; - - future_A_time(overrides?: CallOverrides): Promise; - - get_dy( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_dy_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_virtual_price(overrides?: CallOverrides): Promise; - - initial_A(overrides?: CallOverrides): Promise; - - initial_A_time(overrides?: CallOverrides): Promise; - - lp_token(overrides?: CallOverrides): Promise; - - metapoolBase(overrides?: CallOverrides): Promise; - - nCoins(overrides?: CallOverrides): Promise; - - name(overrides?: CallOverrides): Promise; - - remove_all_liquidity_one_coin( - i: BigNumberish, - minRateRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_one_coin( - arg0: BigNumberish, - i: BigNumberish, - arg2: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - targetContract(overrides?: CallOverrides): Promise; - - token(overrides?: CallOverrides): Promise; - - token0(overrides?: CallOverrides): Promise; - - token1(overrides?: CallOverrides): Promise; - - token2(overrides?: CallOverrides): Promise; - - token3(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - underlying0(overrides?: CallOverrides): Promise; - - underlying1(overrides?: CallOverrides): Promise; - - underlying2(overrides?: CallOverrides): Promise; - - underlying3(overrides?: CallOverrides): Promise; - - "underlying_coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "underlying_coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - populateTransaction: { - A(overrides?: CallOverrides): Promise; - - A_precise(overrides?: CallOverrides): Promise; - - _gearboxAdapterType( - overrides?: CallOverrides - ): Promise; - - _gearboxAdapterVersion( - overrides?: CallOverrides - ): Promise; - - add_all_liquidity_one_coin( - i: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - add_liquidity_one_coin( - amount: BigNumberish, - i: BigNumberish, - minAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - admin(overrides?: CallOverrides): Promise; - - admin_balances( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - admin_fee(overrides?: CallOverrides): Promise; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - balanceOf( - account: string, - overrides?: CallOverrides - ): Promise; - - "balances(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "balances(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - block_timestamp_last( - overrides?: CallOverrides - ): Promise; - - calc_withdraw_one_coin( - _burn_amount: BigNumberish, - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - exchange( - i: BigNumberish, - j: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_all( - i: BigNumberish, - j: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_all_underlying( - i: BigNumberish, - j: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_underlying( - i: BigNumberish, - j: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fee(overrides?: CallOverrides): Promise; - - future_A(overrides?: CallOverrides): Promise; - - future_A_time(overrides?: CallOverrides): Promise; - - get_dy( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_dy_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_virtual_price(overrides?: CallOverrides): Promise; - - initial_A(overrides?: CallOverrides): Promise; - - initial_A_time(overrides?: CallOverrides): Promise; - - lp_token(overrides?: CallOverrides): Promise; - - metapoolBase(overrides?: CallOverrides): Promise; - - nCoins(overrides?: CallOverrides): Promise; - - name(overrides?: CallOverrides): Promise; - - remove_all_liquidity_one_coin( - i: BigNumberish, - minRateRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_one_coin( - arg0: BigNumberish, - i: BigNumberish, - arg2: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - targetContract(overrides?: CallOverrides): Promise; - - token(overrides?: CallOverrides): Promise; - - token0(overrides?: CallOverrides): Promise; - - token1(overrides?: CallOverrides): Promise; - - token2(overrides?: CallOverrides): Promise; - - token3(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - underlying0(overrides?: CallOverrides): Promise; - - underlying1(overrides?: CallOverrides): Promise; - - underlying2(overrides?: CallOverrides): Promise; - - underlying3(overrides?: CallOverrides): Promise; - - "underlying_coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "underlying_coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; -} diff --git a/src/types/contracts/adapters/curve/CurveV1_Base.sol/index.ts b/src/types/contracts/adapters/curve/CurveV1_Base.sol/index.ts deleted file mode 100644 index d40af306..00000000 --- a/src/types/contracts/adapters/curve/CurveV1_Base.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { CurveV1AdapterBase } from "./CurveV1AdapterBase"; diff --git a/src/types/contracts/adapters/curve/CurveV1_DepositZap.sol/CurveV1AdapterDeposit.ts b/src/types/contracts/adapters/curve/CurveV1_DepositZap.sol/CurveV1AdapterDeposit.ts deleted file mode 100644 index b9afe6f9..00000000 --- a/src/types/contracts/adapters/curve/CurveV1_DepositZap.sol/CurveV1AdapterDeposit.ts +++ /dev/null @@ -1,1394 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface CurveV1AdapterDepositInterface extends utils.Interface { - functions: { - "A()": FunctionFragment; - "A_precise()": FunctionFragment; - "_gearboxAdapterType()": FunctionFragment; - "_gearboxAdapterVersion()": FunctionFragment; - "add_all_liquidity_one_coin(int128,uint256)": FunctionFragment; - "add_liquidity_one_coin(uint256,int128,uint256)": FunctionFragment; - "admin()": FunctionFragment; - "admin_balances(uint256)": FunctionFragment; - "admin_fee()": FunctionFragment; - "allowance(address,address)": FunctionFragment; - "balanceOf(address)": FunctionFragment; - "balances(int128)": FunctionFragment; - "balances(uint256)": FunctionFragment; - "block_timestamp_last()": FunctionFragment; - "calc_withdraw_one_coin(uint256,int128)": FunctionFragment; - "coins(int128)": FunctionFragment; - "coins(uint256)": FunctionFragment; - "creditFacade()": FunctionFragment; - "creditManager()": FunctionFragment; - "decimals()": FunctionFragment; - "exchange(int128,int128,uint256,uint256)": FunctionFragment; - "exchange_all(int128,int128,uint256)": FunctionFragment; - "exchange_all_underlying(int128,int128,uint256)": FunctionFragment; - "exchange_underlying(int128,int128,uint256,uint256)": FunctionFragment; - "fee()": FunctionFragment; - "future_A()": FunctionFragment; - "future_A_time()": FunctionFragment; - "get_dy(int128,int128,uint256)": FunctionFragment; - "get_dy_underlying(int128,int128,uint256)": FunctionFragment; - "get_virtual_price()": FunctionFragment; - "initial_A()": FunctionFragment; - "initial_A_time()": FunctionFragment; - "lp_token()": FunctionFragment; - "metapoolBase()": FunctionFragment; - "nCoins()": FunctionFragment; - "name()": FunctionFragment; - "remove_all_liquidity_one_coin(int128,uint256)": FunctionFragment; - "remove_liquidity_one_coin(uint256,int128,uint256)": FunctionFragment; - "symbol()": FunctionFragment; - "targetContract()": FunctionFragment; - "token()": FunctionFragment; - "token0()": FunctionFragment; - "token1()": FunctionFragment; - "token2()": FunctionFragment; - "token3()": FunctionFragment; - "totalSupply()": FunctionFragment; - "underlying0()": FunctionFragment; - "underlying1()": FunctionFragment; - "underlying2()": FunctionFragment; - "underlying3()": FunctionFragment; - "underlying_coins(int128)": FunctionFragment; - "underlying_coins(uint256)": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "A" - | "A_precise" - | "_gearboxAdapterType" - | "_gearboxAdapterVersion" - | "add_all_liquidity_one_coin" - | "add_liquidity_one_coin" - | "admin" - | "admin_balances" - | "admin_fee" - | "allowance" - | "balanceOf" - | "balances(int128)" - | "balances(uint256)" - | "block_timestamp_last" - | "calc_withdraw_one_coin" - | "coins(int128)" - | "coins(uint256)" - | "creditFacade" - | "creditManager" - | "decimals" - | "exchange" - | "exchange_all" - | "exchange_all_underlying" - | "exchange_underlying" - | "fee" - | "future_A" - | "future_A_time" - | "get_dy" - | "get_dy_underlying" - | "get_virtual_price" - | "initial_A" - | "initial_A_time" - | "lp_token" - | "metapoolBase" - | "nCoins" - | "name" - | "remove_all_liquidity_one_coin" - | "remove_liquidity_one_coin" - | "symbol" - | "targetContract" - | "token" - | "token0" - | "token1" - | "token2" - | "token3" - | "totalSupply" - | "underlying0" - | "underlying1" - | "underlying2" - | "underlying3" - | "underlying_coins(int128)" - | "underlying_coins(uint256)" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "A", values?: undefined): string; - encodeFunctionData(functionFragment: "A_precise", values?: undefined): string; - encodeFunctionData( - functionFragment: "_gearboxAdapterType", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "_gearboxAdapterVersion", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "add_all_liquidity_one_coin", - values: [BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "add_liquidity_one_coin", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "admin", values?: undefined): string; - encodeFunctionData( - functionFragment: "admin_balances", - values: [BigNumberish] - ): string; - encodeFunctionData(functionFragment: "admin_fee", values?: undefined): string; - encodeFunctionData( - functionFragment: "allowance", - values: [string, string] - ): string; - encodeFunctionData(functionFragment: "balanceOf", values: [string]): string; - encodeFunctionData( - functionFragment: "balances(int128)", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "balances(uint256)", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "block_timestamp_last", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "calc_withdraw_one_coin", - values: [BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "coins(int128)", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "coins(uint256)", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "creditFacade", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditManager", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "decimals", values?: undefined): string; - encodeFunctionData( - functionFragment: "exchange", - values: [BigNumberish, BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "exchange_all", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "exchange_all_underlying", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "exchange_underlying", - values: [BigNumberish, BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "fee", values?: undefined): string; - encodeFunctionData(functionFragment: "future_A", values?: undefined): string; - encodeFunctionData( - functionFragment: "future_A_time", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "get_dy", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "get_dy_underlying", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "get_virtual_price", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "initial_A", values?: undefined): string; - encodeFunctionData( - functionFragment: "initial_A_time", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "lp_token", values?: undefined): string; - encodeFunctionData( - functionFragment: "metapoolBase", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "nCoins", values?: undefined): string; - encodeFunctionData(functionFragment: "name", values?: undefined): string; - encodeFunctionData( - functionFragment: "remove_all_liquidity_one_coin", - values: [BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "remove_liquidity_one_coin", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "symbol", values?: undefined): string; - encodeFunctionData( - functionFragment: "targetContract", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "token", values?: undefined): string; - encodeFunctionData(functionFragment: "token0", values?: undefined): string; - encodeFunctionData(functionFragment: "token1", values?: undefined): string; - encodeFunctionData(functionFragment: "token2", values?: undefined): string; - encodeFunctionData(functionFragment: "token3", values?: undefined): string; - encodeFunctionData( - functionFragment: "totalSupply", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "underlying0", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "underlying1", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "underlying2", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "underlying3", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "underlying_coins(int128)", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "underlying_coins(uint256)", - values: [BigNumberish] - ): string; - - decodeFunctionResult(functionFragment: "A", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "A_precise", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "_gearboxAdapterType", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "_gearboxAdapterVersion", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "add_all_liquidity_one_coin", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "add_liquidity_one_coin", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "admin", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "admin_balances", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "admin_fee", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "balances(int128)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "balances(uint256)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "block_timestamp_last", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "calc_withdraw_one_coin", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "coins(int128)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "coins(uint256)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditFacade", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditManager", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "exchange", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "exchange_all", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "exchange_all_underlying", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "exchange_underlying", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "fee", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "future_A", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "future_A_time", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "get_dy", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "get_dy_underlying", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "get_virtual_price", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "initial_A", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "initial_A_time", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "lp_token", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "metapoolBase", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "nCoins", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "remove_all_liquidity_one_coin", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "remove_liquidity_one_coin", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "targetContract", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "token", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "token0", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "token1", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "token2", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "token3", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "totalSupply", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "underlying0", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "underlying1", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "underlying2", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "underlying3", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "underlying_coins(int128)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "underlying_coins(uint256)", - data: BytesLike - ): Result; - - events: {}; -} - -export interface CurveV1AdapterDeposit extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: CurveV1AdapterDepositInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - A(overrides?: CallOverrides): Promise<[BigNumber]>; - - A_precise(overrides?: CallOverrides): Promise<[BigNumber]>; - - _gearboxAdapterType(overrides?: CallOverrides): Promise<[number]>; - - _gearboxAdapterVersion(overrides?: CallOverrides): Promise<[number]>; - - add_all_liquidity_one_coin( - i: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - add_liquidity_one_coin( - amount: BigNumberish, - i: BigNumberish, - minAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - admin(overrides?: CallOverrides): Promise<[string]>; - - admin_balances( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - admin_fee(overrides?: CallOverrides): Promise<[BigNumber]>; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - balanceOf(account: string, overrides?: CallOverrides): Promise<[BigNumber]>; - - "balances(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "balances(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - block_timestamp_last(overrides?: CallOverrides): Promise<[BigNumber]>; - - calc_withdraw_one_coin( - _burn_amount: BigNumberish, - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - "coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - creditFacade(overrides?: CallOverrides): Promise<[string]>; - - creditManager(overrides?: CallOverrides): Promise<[string]>; - - decimals(overrides?: CallOverrides): Promise<[BigNumber]>; - - exchange( - i: BigNumberish, - j: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_all( - i: BigNumberish, - j: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_all_underlying( - i: BigNumberish, - j: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_underlying( - i: BigNumberish, - j: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fee(overrides?: CallOverrides): Promise<[BigNumber]>; - - future_A(overrides?: CallOverrides): Promise<[BigNumber]>; - - future_A_time(overrides?: CallOverrides): Promise<[BigNumber]>; - - get_dy( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - get_dy_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - get_virtual_price(overrides?: CallOverrides): Promise<[BigNumber]>; - - initial_A(overrides?: CallOverrides): Promise<[BigNumber]>; - - initial_A_time(overrides?: CallOverrides): Promise<[BigNumber]>; - - lp_token(overrides?: CallOverrides): Promise<[string]>; - - metapoolBase(overrides?: CallOverrides): Promise<[string]>; - - nCoins(overrides?: CallOverrides): Promise<[BigNumber]>; - - name(overrides?: CallOverrides): Promise<[string]>; - - remove_all_liquidity_one_coin( - i: BigNumberish, - minRateRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_one_coin( - arg0: BigNumberish, - i: BigNumberish, - arg2: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise<[string]>; - - targetContract(overrides?: CallOverrides): Promise<[string]>; - - token(overrides?: CallOverrides): Promise<[string]>; - - token0(overrides?: CallOverrides): Promise<[string]>; - - token1(overrides?: CallOverrides): Promise<[string]>; - - token2(overrides?: CallOverrides): Promise<[string]>; - - token3(overrides?: CallOverrides): Promise<[string]>; - - totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>; - - underlying0(overrides?: CallOverrides): Promise<[string]>; - - underlying1(overrides?: CallOverrides): Promise<[string]>; - - underlying2(overrides?: CallOverrides): Promise<[string]>; - - underlying3(overrides?: CallOverrides): Promise<[string]>; - - "underlying_coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - "underlying_coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - }; - - A(overrides?: CallOverrides): Promise; - - A_precise(overrides?: CallOverrides): Promise; - - _gearboxAdapterType(overrides?: CallOverrides): Promise; - - _gearboxAdapterVersion(overrides?: CallOverrides): Promise; - - add_all_liquidity_one_coin( - i: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - add_liquidity_one_coin( - amount: BigNumberish, - i: BigNumberish, - minAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - admin(overrides?: CallOverrides): Promise; - - admin_balances( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - admin_fee(overrides?: CallOverrides): Promise; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - "balances(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "balances(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - block_timestamp_last(overrides?: CallOverrides): Promise; - - calc_withdraw_one_coin( - _burn_amount: BigNumberish, - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(int128)"(i: BigNumberish, overrides?: CallOverrides): Promise; - - "coins(uint256)"(i: BigNumberish, overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - exchange( - i: BigNumberish, - j: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_all( - i: BigNumberish, - j: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_all_underlying( - i: BigNumberish, - j: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_underlying( - i: BigNumberish, - j: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fee(overrides?: CallOverrides): Promise; - - future_A(overrides?: CallOverrides): Promise; - - future_A_time(overrides?: CallOverrides): Promise; - - get_dy( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_dy_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_virtual_price(overrides?: CallOverrides): Promise; - - initial_A(overrides?: CallOverrides): Promise; - - initial_A_time(overrides?: CallOverrides): Promise; - - lp_token(overrides?: CallOverrides): Promise; - - metapoolBase(overrides?: CallOverrides): Promise; - - nCoins(overrides?: CallOverrides): Promise; - - name(overrides?: CallOverrides): Promise; - - remove_all_liquidity_one_coin( - i: BigNumberish, - minRateRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_one_coin( - arg0: BigNumberish, - i: BigNumberish, - arg2: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - targetContract(overrides?: CallOverrides): Promise; - - token(overrides?: CallOverrides): Promise; - - token0(overrides?: CallOverrides): Promise; - - token1(overrides?: CallOverrides): Promise; - - token2(overrides?: CallOverrides): Promise; - - token3(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - underlying0(overrides?: CallOverrides): Promise; - - underlying1(overrides?: CallOverrides): Promise; - - underlying2(overrides?: CallOverrides): Promise; - - underlying3(overrides?: CallOverrides): Promise; - - "underlying_coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "underlying_coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - callStatic: { - A(overrides?: CallOverrides): Promise; - - A_precise(overrides?: CallOverrides): Promise; - - _gearboxAdapterType(overrides?: CallOverrides): Promise; - - _gearboxAdapterVersion(overrides?: CallOverrides): Promise; - - add_all_liquidity_one_coin( - i: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: CallOverrides - ): Promise; - - add_liquidity_one_coin( - amount: BigNumberish, - i: BigNumberish, - minAmount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - admin(overrides?: CallOverrides): Promise; - - admin_balances( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - admin_fee(overrides?: CallOverrides): Promise; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - "balances(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "balances(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - block_timestamp_last(overrides?: CallOverrides): Promise; - - calc_withdraw_one_coin( - _burn_amount: BigNumberish, - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - exchange( - i: BigNumberish, - j: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - overrides?: CallOverrides - ): Promise; - - exchange_all( - i: BigNumberish, - j: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: CallOverrides - ): Promise; - - exchange_all_underlying( - i: BigNumberish, - j: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: CallOverrides - ): Promise; - - exchange_underlying( - i: BigNumberish, - j: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - overrides?: CallOverrides - ): Promise; - - fee(overrides?: CallOverrides): Promise; - - future_A(overrides?: CallOverrides): Promise; - - future_A_time(overrides?: CallOverrides): Promise; - - get_dy( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_dy_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_virtual_price(overrides?: CallOverrides): Promise; - - initial_A(overrides?: CallOverrides): Promise; - - initial_A_time(overrides?: CallOverrides): Promise; - - lp_token(overrides?: CallOverrides): Promise; - - metapoolBase(overrides?: CallOverrides): Promise; - - nCoins(overrides?: CallOverrides): Promise; - - name(overrides?: CallOverrides): Promise; - - remove_all_liquidity_one_coin( - i: BigNumberish, - minRateRAY: BigNumberish, - overrides?: CallOverrides - ): Promise; - - remove_liquidity_one_coin( - arg0: BigNumberish, - i: BigNumberish, - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - targetContract(overrides?: CallOverrides): Promise; - - token(overrides?: CallOverrides): Promise; - - token0(overrides?: CallOverrides): Promise; - - token1(overrides?: CallOverrides): Promise; - - token2(overrides?: CallOverrides): Promise; - - token3(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - underlying0(overrides?: CallOverrides): Promise; - - underlying1(overrides?: CallOverrides): Promise; - - underlying2(overrides?: CallOverrides): Promise; - - underlying3(overrides?: CallOverrides): Promise; - - "underlying_coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "underlying_coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - filters: {}; - - estimateGas: { - A(overrides?: CallOverrides): Promise; - - A_precise(overrides?: CallOverrides): Promise; - - _gearboxAdapterType(overrides?: CallOverrides): Promise; - - _gearboxAdapterVersion(overrides?: CallOverrides): Promise; - - add_all_liquidity_one_coin( - i: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - add_liquidity_one_coin( - amount: BigNumberish, - i: BigNumberish, - minAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - admin(overrides?: CallOverrides): Promise; - - admin_balances( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - admin_fee(overrides?: CallOverrides): Promise; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - "balances(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "balances(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - block_timestamp_last(overrides?: CallOverrides): Promise; - - calc_withdraw_one_coin( - _burn_amount: BigNumberish, - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - exchange( - i: BigNumberish, - j: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_all( - i: BigNumberish, - j: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_all_underlying( - i: BigNumberish, - j: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_underlying( - i: BigNumberish, - j: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fee(overrides?: CallOverrides): Promise; - - future_A(overrides?: CallOverrides): Promise; - - future_A_time(overrides?: CallOverrides): Promise; - - get_dy( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_dy_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_virtual_price(overrides?: CallOverrides): Promise; - - initial_A(overrides?: CallOverrides): Promise; - - initial_A_time(overrides?: CallOverrides): Promise; - - lp_token(overrides?: CallOverrides): Promise; - - metapoolBase(overrides?: CallOverrides): Promise; - - nCoins(overrides?: CallOverrides): Promise; - - name(overrides?: CallOverrides): Promise; - - remove_all_liquidity_one_coin( - i: BigNumberish, - minRateRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_one_coin( - arg0: BigNumberish, - i: BigNumberish, - arg2: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - targetContract(overrides?: CallOverrides): Promise; - - token(overrides?: CallOverrides): Promise; - - token0(overrides?: CallOverrides): Promise; - - token1(overrides?: CallOverrides): Promise; - - token2(overrides?: CallOverrides): Promise; - - token3(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - underlying0(overrides?: CallOverrides): Promise; - - underlying1(overrides?: CallOverrides): Promise; - - underlying2(overrides?: CallOverrides): Promise; - - underlying3(overrides?: CallOverrides): Promise; - - "underlying_coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "underlying_coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - populateTransaction: { - A(overrides?: CallOverrides): Promise; - - A_precise(overrides?: CallOverrides): Promise; - - _gearboxAdapterType( - overrides?: CallOverrides - ): Promise; - - _gearboxAdapterVersion( - overrides?: CallOverrides - ): Promise; - - add_all_liquidity_one_coin( - i: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - add_liquidity_one_coin( - amount: BigNumberish, - i: BigNumberish, - minAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - admin(overrides?: CallOverrides): Promise; - - admin_balances( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - admin_fee(overrides?: CallOverrides): Promise; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - balanceOf( - account: string, - overrides?: CallOverrides - ): Promise; - - "balances(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "balances(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - block_timestamp_last( - overrides?: CallOverrides - ): Promise; - - calc_withdraw_one_coin( - _burn_amount: BigNumberish, - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - exchange( - i: BigNumberish, - j: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_all( - i: BigNumberish, - j: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_all_underlying( - i: BigNumberish, - j: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_underlying( - i: BigNumberish, - j: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fee(overrides?: CallOverrides): Promise; - - future_A(overrides?: CallOverrides): Promise; - - future_A_time(overrides?: CallOverrides): Promise; - - get_dy( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_dy_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_virtual_price(overrides?: CallOverrides): Promise; - - initial_A(overrides?: CallOverrides): Promise; - - initial_A_time(overrides?: CallOverrides): Promise; - - lp_token(overrides?: CallOverrides): Promise; - - metapoolBase(overrides?: CallOverrides): Promise; - - nCoins(overrides?: CallOverrides): Promise; - - name(overrides?: CallOverrides): Promise; - - remove_all_liquidity_one_coin( - i: BigNumberish, - minRateRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_one_coin( - arg0: BigNumberish, - i: BigNumberish, - arg2: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - targetContract(overrides?: CallOverrides): Promise; - - token(overrides?: CallOverrides): Promise; - - token0(overrides?: CallOverrides): Promise; - - token1(overrides?: CallOverrides): Promise; - - token2(overrides?: CallOverrides): Promise; - - token3(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - underlying0(overrides?: CallOverrides): Promise; - - underlying1(overrides?: CallOverrides): Promise; - - underlying2(overrides?: CallOverrides): Promise; - - underlying3(overrides?: CallOverrides): Promise; - - "underlying_coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "underlying_coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; -} diff --git a/src/types/contracts/adapters/curve/CurveV1_DepositZap.sol/index.ts b/src/types/contracts/adapters/curve/CurveV1_DepositZap.sol/index.ts deleted file mode 100644 index 4018910f..00000000 --- a/src/types/contracts/adapters/curve/CurveV1_DepositZap.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { CurveV1AdapterDeposit } from "./CurveV1AdapterDeposit"; diff --git a/src/types/contracts/adapters/curve/CurveV1_stETH.sol/CurveV1AdapterStETH.ts b/src/types/contracts/adapters/curve/CurveV1_stETH.sol/CurveV1AdapterStETH.ts deleted file mode 100644 index 32aca637..00000000 --- a/src/types/contracts/adapters/curve/CurveV1_stETH.sol/CurveV1AdapterStETH.ts +++ /dev/null @@ -1,1679 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface CurveV1AdapterStETHInterface extends utils.Interface { - functions: { - "A()": FunctionFragment; - "A_precise()": FunctionFragment; - "_gearboxAdapterType()": FunctionFragment; - "_gearboxAdapterVersion()": FunctionFragment; - "add_all_liquidity_one_coin(int128,uint256)": FunctionFragment; - "add_liquidity(uint256[2],uint256)": FunctionFragment; - "add_liquidity_one_coin(uint256,int128,uint256)": FunctionFragment; - "admin()": FunctionFragment; - "admin_balances(uint256)": FunctionFragment; - "admin_fee()": FunctionFragment; - "allowance(address,address)": FunctionFragment; - "balanceOf(address)": FunctionFragment; - "balances(int128)": FunctionFragment; - "balances(uint256)": FunctionFragment; - "block_timestamp_last()": FunctionFragment; - "calc_token_amount(uint256[2],bool)": FunctionFragment; - "calc_withdraw_one_coin(uint256,int128)": FunctionFragment; - "coins(int128)": FunctionFragment; - "coins(uint256)": FunctionFragment; - "creditFacade()": FunctionFragment; - "creditManager()": FunctionFragment; - "decimals()": FunctionFragment; - "exchange(int128,int128,uint256,uint256)": FunctionFragment; - "exchange_all(int128,int128,uint256)": FunctionFragment; - "exchange_all_underlying(int128,int128,uint256)": FunctionFragment; - "exchange_underlying(int128,int128,uint256,uint256)": FunctionFragment; - "fee()": FunctionFragment; - "future_A()": FunctionFragment; - "future_A_time()": FunctionFragment; - "get_balances()": FunctionFragment; - "get_dy(int128,int128,uint256)": FunctionFragment; - "get_dy_underlying(int128,int128,uint256)": FunctionFragment; - "get_previous_balances()": FunctionFragment; - "get_price_cumulative_last()": FunctionFragment; - "get_twap_balances(uint256[2],uint256[2],uint256)": FunctionFragment; - "get_virtual_price()": FunctionFragment; - "initial_A()": FunctionFragment; - "initial_A_time()": FunctionFragment; - "lp_token()": FunctionFragment; - "metapoolBase()": FunctionFragment; - "nCoins()": FunctionFragment; - "name()": FunctionFragment; - "remove_all_liquidity_one_coin(int128,uint256)": FunctionFragment; - "remove_liquidity(uint256,uint256[2])": FunctionFragment; - "remove_liquidity_imbalance(uint256[2],uint256)": FunctionFragment; - "remove_liquidity_one_coin(uint256,int128,uint256)": FunctionFragment; - "symbol()": FunctionFragment; - "targetContract()": FunctionFragment; - "token()": FunctionFragment; - "token0()": FunctionFragment; - "token1()": FunctionFragment; - "token2()": FunctionFragment; - "token3()": FunctionFragment; - "totalSupply()": FunctionFragment; - "underlying0()": FunctionFragment; - "underlying1()": FunctionFragment; - "underlying2()": FunctionFragment; - "underlying3()": FunctionFragment; - "underlying_coins(int128)": FunctionFragment; - "underlying_coins(uint256)": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "A" - | "A_precise" - | "_gearboxAdapterType" - | "_gearboxAdapterVersion" - | "add_all_liquidity_one_coin" - | "add_liquidity" - | "add_liquidity_one_coin" - | "admin" - | "admin_balances" - | "admin_fee" - | "allowance" - | "balanceOf" - | "balances(int128)" - | "balances(uint256)" - | "block_timestamp_last" - | "calc_token_amount" - | "calc_withdraw_one_coin" - | "coins(int128)" - | "coins(uint256)" - | "creditFacade" - | "creditManager" - | "decimals" - | "exchange" - | "exchange_all" - | "exchange_all_underlying" - | "exchange_underlying" - | "fee" - | "future_A" - | "future_A_time" - | "get_balances" - | "get_dy" - | "get_dy_underlying" - | "get_previous_balances" - | "get_price_cumulative_last" - | "get_twap_balances" - | "get_virtual_price" - | "initial_A" - | "initial_A_time" - | "lp_token" - | "metapoolBase" - | "nCoins" - | "name" - | "remove_all_liquidity_one_coin" - | "remove_liquidity" - | "remove_liquidity_imbalance" - | "remove_liquidity_one_coin" - | "symbol" - | "targetContract" - | "token" - | "token0" - | "token1" - | "token2" - | "token3" - | "totalSupply" - | "underlying0" - | "underlying1" - | "underlying2" - | "underlying3" - | "underlying_coins(int128)" - | "underlying_coins(uint256)" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "A", values?: undefined): string; - encodeFunctionData(functionFragment: "A_precise", values?: undefined): string; - encodeFunctionData( - functionFragment: "_gearboxAdapterType", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "_gearboxAdapterVersion", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "add_all_liquidity_one_coin", - values: [BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "add_liquidity", - values: [[BigNumberish, BigNumberish], BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "add_liquidity_one_coin", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "admin", values?: undefined): string; - encodeFunctionData( - functionFragment: "admin_balances", - values: [BigNumberish] - ): string; - encodeFunctionData(functionFragment: "admin_fee", values?: undefined): string; - encodeFunctionData( - functionFragment: "allowance", - values: [string, string] - ): string; - encodeFunctionData(functionFragment: "balanceOf", values: [string]): string; - encodeFunctionData( - functionFragment: "balances(int128)", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "balances(uint256)", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "block_timestamp_last", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "calc_token_amount", - values: [[BigNumberish, BigNumberish], boolean] - ): string; - encodeFunctionData( - functionFragment: "calc_withdraw_one_coin", - values: [BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "coins(int128)", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "coins(uint256)", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "creditFacade", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditManager", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "decimals", values?: undefined): string; - encodeFunctionData( - functionFragment: "exchange", - values: [BigNumberish, BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "exchange_all", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "exchange_all_underlying", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "exchange_underlying", - values: [BigNumberish, BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "fee", values?: undefined): string; - encodeFunctionData(functionFragment: "future_A", values?: undefined): string; - encodeFunctionData( - functionFragment: "future_A_time", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "get_balances", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "get_dy", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "get_dy_underlying", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "get_previous_balances", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "get_price_cumulative_last", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "get_twap_balances", - values: [ - [BigNumberish, BigNumberish], - [BigNumberish, BigNumberish], - BigNumberish - ] - ): string; - encodeFunctionData( - functionFragment: "get_virtual_price", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "initial_A", values?: undefined): string; - encodeFunctionData( - functionFragment: "initial_A_time", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "lp_token", values?: undefined): string; - encodeFunctionData( - functionFragment: "metapoolBase", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "nCoins", values?: undefined): string; - encodeFunctionData(functionFragment: "name", values?: undefined): string; - encodeFunctionData( - functionFragment: "remove_all_liquidity_one_coin", - values: [BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "remove_liquidity", - values: [BigNumberish, [BigNumberish, BigNumberish]] - ): string; - encodeFunctionData( - functionFragment: "remove_liquidity_imbalance", - values: [[BigNumberish, BigNumberish], BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "remove_liquidity_one_coin", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "symbol", values?: undefined): string; - encodeFunctionData( - functionFragment: "targetContract", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "token", values?: undefined): string; - encodeFunctionData(functionFragment: "token0", values?: undefined): string; - encodeFunctionData(functionFragment: "token1", values?: undefined): string; - encodeFunctionData(functionFragment: "token2", values?: undefined): string; - encodeFunctionData(functionFragment: "token3", values?: undefined): string; - encodeFunctionData( - functionFragment: "totalSupply", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "underlying0", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "underlying1", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "underlying2", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "underlying3", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "underlying_coins(int128)", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "underlying_coins(uint256)", - values: [BigNumberish] - ): string; - - decodeFunctionResult(functionFragment: "A", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "A_precise", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "_gearboxAdapterType", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "_gearboxAdapterVersion", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "add_all_liquidity_one_coin", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "add_liquidity", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "add_liquidity_one_coin", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "admin", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "admin_balances", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "admin_fee", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "balances(int128)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "balances(uint256)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "block_timestamp_last", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "calc_token_amount", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "calc_withdraw_one_coin", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "coins(int128)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "coins(uint256)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditFacade", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditManager", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "exchange", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "exchange_all", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "exchange_all_underlying", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "exchange_underlying", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "fee", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "future_A", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "future_A_time", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "get_balances", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "get_dy", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "get_dy_underlying", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "get_previous_balances", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "get_price_cumulative_last", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "get_twap_balances", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "get_virtual_price", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "initial_A", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "initial_A_time", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "lp_token", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "metapoolBase", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "nCoins", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "remove_all_liquidity_one_coin", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "remove_liquidity", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "remove_liquidity_imbalance", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "remove_liquidity_one_coin", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "targetContract", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "token", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "token0", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "token1", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "token2", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "token3", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "totalSupply", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "underlying0", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "underlying1", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "underlying2", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "underlying3", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "underlying_coins(int128)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "underlying_coins(uint256)", - data: BytesLike - ): Result; - - events: {}; -} - -export interface CurveV1AdapterStETH extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: CurveV1AdapterStETHInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - A(overrides?: CallOverrides): Promise<[BigNumber]>; - - A_precise(overrides?: CallOverrides): Promise<[BigNumber]>; - - _gearboxAdapterType(overrides?: CallOverrides): Promise<[number]>; - - _gearboxAdapterVersion(overrides?: CallOverrides): Promise<[number]>; - - add_all_liquidity_one_coin( - i: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - add_liquidity( - amounts: [BigNumberish, BigNumberish], - arg1: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - add_liquidity_one_coin( - amount: BigNumberish, - i: BigNumberish, - minAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - admin(overrides?: CallOverrides): Promise<[string]>; - - admin_balances( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - admin_fee(overrides?: CallOverrides): Promise<[BigNumber]>; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - balanceOf(account: string, overrides?: CallOverrides): Promise<[BigNumber]>; - - "balances(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "balances(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - block_timestamp_last(overrides?: CallOverrides): Promise<[BigNumber]>; - - calc_token_amount( - _amounts: [BigNumberish, BigNumberish], - _is_deposit: boolean, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - calc_withdraw_one_coin( - _burn_amount: BigNumberish, - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - "coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - creditFacade(overrides?: CallOverrides): Promise<[string]>; - - creditManager(overrides?: CallOverrides): Promise<[string]>; - - decimals(overrides?: CallOverrides): Promise<[BigNumber]>; - - exchange( - i: BigNumberish, - j: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_all( - i: BigNumberish, - j: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_all_underlying( - i: BigNumberish, - j: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_underlying( - i: BigNumberish, - j: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fee(overrides?: CallOverrides): Promise<[BigNumber]>; - - future_A(overrides?: CallOverrides): Promise<[BigNumber]>; - - future_A_time(overrides?: CallOverrides): Promise<[BigNumber]>; - - get_balances(overrides?: CallOverrides): Promise<[[BigNumber, BigNumber]]>; - - get_dy( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - get_dy_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - get_previous_balances( - overrides?: CallOverrides - ): Promise<[[BigNumber, BigNumber]]>; - - get_price_cumulative_last( - overrides?: CallOverrides - ): Promise<[[BigNumber, BigNumber]]>; - - get_twap_balances( - _first_balances: [BigNumberish, BigNumberish], - _last_balances: [BigNumberish, BigNumberish], - _time_elapsed: BigNumberish, - overrides?: CallOverrides - ): Promise<[[BigNumber, BigNumber]]>; - - get_virtual_price(overrides?: CallOverrides): Promise<[BigNumber]>; - - initial_A(overrides?: CallOverrides): Promise<[BigNumber]>; - - initial_A_time(overrides?: CallOverrides): Promise<[BigNumber]>; - - lp_token(overrides?: CallOverrides): Promise<[string]>; - - metapoolBase(overrides?: CallOverrides): Promise<[string]>; - - nCoins(overrides?: CallOverrides): Promise<[BigNumber]>; - - name(overrides?: CallOverrides): Promise<[string]>; - - remove_all_liquidity_one_coin( - i: BigNumberish, - minRateRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity( - arg0: BigNumberish, - arg1: [BigNumberish, BigNumberish], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_imbalance( - amounts: [BigNumberish, BigNumberish], - arg1: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_one_coin( - arg0: BigNumberish, - i: BigNumberish, - arg2: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise<[string]>; - - targetContract(overrides?: CallOverrides): Promise<[string]>; - - token(overrides?: CallOverrides): Promise<[string]>; - - token0(overrides?: CallOverrides): Promise<[string]>; - - token1(overrides?: CallOverrides): Promise<[string]>; - - token2(overrides?: CallOverrides): Promise<[string]>; - - token3(overrides?: CallOverrides): Promise<[string]>; - - totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>; - - underlying0(overrides?: CallOverrides): Promise<[string]>; - - underlying1(overrides?: CallOverrides): Promise<[string]>; - - underlying2(overrides?: CallOverrides): Promise<[string]>; - - underlying3(overrides?: CallOverrides): Promise<[string]>; - - "underlying_coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - "underlying_coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - }; - - A(overrides?: CallOverrides): Promise; - - A_precise(overrides?: CallOverrides): Promise; - - _gearboxAdapterType(overrides?: CallOverrides): Promise; - - _gearboxAdapterVersion(overrides?: CallOverrides): Promise; - - add_all_liquidity_one_coin( - i: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - add_liquidity( - amounts: [BigNumberish, BigNumberish], - arg1: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - add_liquidity_one_coin( - amount: BigNumberish, - i: BigNumberish, - minAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - admin(overrides?: CallOverrides): Promise; - - admin_balances( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - admin_fee(overrides?: CallOverrides): Promise; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - "balances(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "balances(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - block_timestamp_last(overrides?: CallOverrides): Promise; - - calc_token_amount( - _amounts: [BigNumberish, BigNumberish], - _is_deposit: boolean, - overrides?: CallOverrides - ): Promise; - - calc_withdraw_one_coin( - _burn_amount: BigNumberish, - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(int128)"(i: BigNumberish, overrides?: CallOverrides): Promise; - - "coins(uint256)"(i: BigNumberish, overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - exchange( - i: BigNumberish, - j: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_all( - i: BigNumberish, - j: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_all_underlying( - i: BigNumberish, - j: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_underlying( - i: BigNumberish, - j: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fee(overrides?: CallOverrides): Promise; - - future_A(overrides?: CallOverrides): Promise; - - future_A_time(overrides?: CallOverrides): Promise; - - get_balances(overrides?: CallOverrides): Promise<[BigNumber, BigNumber]>; - - get_dy( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_dy_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_previous_balances( - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber]>; - - get_price_cumulative_last( - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber]>; - - get_twap_balances( - _first_balances: [BigNumberish, BigNumberish], - _last_balances: [BigNumberish, BigNumberish], - _time_elapsed: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber]>; - - get_virtual_price(overrides?: CallOverrides): Promise; - - initial_A(overrides?: CallOverrides): Promise; - - initial_A_time(overrides?: CallOverrides): Promise; - - lp_token(overrides?: CallOverrides): Promise; - - metapoolBase(overrides?: CallOverrides): Promise; - - nCoins(overrides?: CallOverrides): Promise; - - name(overrides?: CallOverrides): Promise; - - remove_all_liquidity_one_coin( - i: BigNumberish, - minRateRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity( - arg0: BigNumberish, - arg1: [BigNumberish, BigNumberish], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_imbalance( - amounts: [BigNumberish, BigNumberish], - arg1: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_one_coin( - arg0: BigNumberish, - i: BigNumberish, - arg2: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - targetContract(overrides?: CallOverrides): Promise; - - token(overrides?: CallOverrides): Promise; - - token0(overrides?: CallOverrides): Promise; - - token1(overrides?: CallOverrides): Promise; - - token2(overrides?: CallOverrides): Promise; - - token3(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - underlying0(overrides?: CallOverrides): Promise; - - underlying1(overrides?: CallOverrides): Promise; - - underlying2(overrides?: CallOverrides): Promise; - - underlying3(overrides?: CallOverrides): Promise; - - "underlying_coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "underlying_coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - callStatic: { - A(overrides?: CallOverrides): Promise; - - A_precise(overrides?: CallOverrides): Promise; - - _gearboxAdapterType(overrides?: CallOverrides): Promise; - - _gearboxAdapterVersion(overrides?: CallOverrides): Promise; - - add_all_liquidity_one_coin( - i: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: CallOverrides - ): Promise; - - add_liquidity( - amounts: [BigNumberish, BigNumberish], - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - add_liquidity_one_coin( - amount: BigNumberish, - i: BigNumberish, - minAmount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - admin(overrides?: CallOverrides): Promise; - - admin_balances( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - admin_fee(overrides?: CallOverrides): Promise; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - "balances(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "balances(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - block_timestamp_last(overrides?: CallOverrides): Promise; - - calc_token_amount( - _amounts: [BigNumberish, BigNumberish], - _is_deposit: boolean, - overrides?: CallOverrides - ): Promise; - - calc_withdraw_one_coin( - _burn_amount: BigNumberish, - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - exchange( - i: BigNumberish, - j: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - overrides?: CallOverrides - ): Promise; - - exchange_all( - i: BigNumberish, - j: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: CallOverrides - ): Promise; - - exchange_all_underlying( - i: BigNumberish, - j: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: CallOverrides - ): Promise; - - exchange_underlying( - i: BigNumberish, - j: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - overrides?: CallOverrides - ): Promise; - - fee(overrides?: CallOverrides): Promise; - - future_A(overrides?: CallOverrides): Promise; - - future_A_time(overrides?: CallOverrides): Promise; - - get_balances(overrides?: CallOverrides): Promise<[BigNumber, BigNumber]>; - - get_dy( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_dy_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_previous_balances( - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber]>; - - get_price_cumulative_last( - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber]>; - - get_twap_balances( - _first_balances: [BigNumberish, BigNumberish], - _last_balances: [BigNumberish, BigNumberish], - _time_elapsed: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber]>; - - get_virtual_price(overrides?: CallOverrides): Promise; - - initial_A(overrides?: CallOverrides): Promise; - - initial_A_time(overrides?: CallOverrides): Promise; - - lp_token(overrides?: CallOverrides): Promise; - - metapoolBase(overrides?: CallOverrides): Promise; - - nCoins(overrides?: CallOverrides): Promise; - - name(overrides?: CallOverrides): Promise; - - remove_all_liquidity_one_coin( - i: BigNumberish, - minRateRAY: BigNumberish, - overrides?: CallOverrides - ): Promise; - - remove_liquidity( - arg0: BigNumberish, - arg1: [BigNumberish, BigNumberish], - overrides?: CallOverrides - ): Promise; - - remove_liquidity_imbalance( - amounts: [BigNumberish, BigNumberish], - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - remove_liquidity_one_coin( - arg0: BigNumberish, - i: BigNumberish, - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - targetContract(overrides?: CallOverrides): Promise; - - token(overrides?: CallOverrides): Promise; - - token0(overrides?: CallOverrides): Promise; - - token1(overrides?: CallOverrides): Promise; - - token2(overrides?: CallOverrides): Promise; - - token3(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - underlying0(overrides?: CallOverrides): Promise; - - underlying1(overrides?: CallOverrides): Promise; - - underlying2(overrides?: CallOverrides): Promise; - - underlying3(overrides?: CallOverrides): Promise; - - "underlying_coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "underlying_coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - filters: {}; - - estimateGas: { - A(overrides?: CallOverrides): Promise; - - A_precise(overrides?: CallOverrides): Promise; - - _gearboxAdapterType(overrides?: CallOverrides): Promise; - - _gearboxAdapterVersion(overrides?: CallOverrides): Promise; - - add_all_liquidity_one_coin( - i: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - add_liquidity( - amounts: [BigNumberish, BigNumberish], - arg1: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - add_liquidity_one_coin( - amount: BigNumberish, - i: BigNumberish, - minAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - admin(overrides?: CallOverrides): Promise; - - admin_balances( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - admin_fee(overrides?: CallOverrides): Promise; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - "balances(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "balances(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - block_timestamp_last(overrides?: CallOverrides): Promise; - - calc_token_amount( - _amounts: [BigNumberish, BigNumberish], - _is_deposit: boolean, - overrides?: CallOverrides - ): Promise; - - calc_withdraw_one_coin( - _burn_amount: BigNumberish, - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - exchange( - i: BigNumberish, - j: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_all( - i: BigNumberish, - j: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_all_underlying( - i: BigNumberish, - j: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_underlying( - i: BigNumberish, - j: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fee(overrides?: CallOverrides): Promise; - - future_A(overrides?: CallOverrides): Promise; - - future_A_time(overrides?: CallOverrides): Promise; - - get_balances(overrides?: CallOverrides): Promise; - - get_dy( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_dy_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_previous_balances(overrides?: CallOverrides): Promise; - - get_price_cumulative_last(overrides?: CallOverrides): Promise; - - get_twap_balances( - _first_balances: [BigNumberish, BigNumberish], - _last_balances: [BigNumberish, BigNumberish], - _time_elapsed: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_virtual_price(overrides?: CallOverrides): Promise; - - initial_A(overrides?: CallOverrides): Promise; - - initial_A_time(overrides?: CallOverrides): Promise; - - lp_token(overrides?: CallOverrides): Promise; - - metapoolBase(overrides?: CallOverrides): Promise; - - nCoins(overrides?: CallOverrides): Promise; - - name(overrides?: CallOverrides): Promise; - - remove_all_liquidity_one_coin( - i: BigNumberish, - minRateRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity( - arg0: BigNumberish, - arg1: [BigNumberish, BigNumberish], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_imbalance( - amounts: [BigNumberish, BigNumberish], - arg1: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_one_coin( - arg0: BigNumberish, - i: BigNumberish, - arg2: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - targetContract(overrides?: CallOverrides): Promise; - - token(overrides?: CallOverrides): Promise; - - token0(overrides?: CallOverrides): Promise; - - token1(overrides?: CallOverrides): Promise; - - token2(overrides?: CallOverrides): Promise; - - token3(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - underlying0(overrides?: CallOverrides): Promise; - - underlying1(overrides?: CallOverrides): Promise; - - underlying2(overrides?: CallOverrides): Promise; - - underlying3(overrides?: CallOverrides): Promise; - - "underlying_coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "underlying_coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - populateTransaction: { - A(overrides?: CallOverrides): Promise; - - A_precise(overrides?: CallOverrides): Promise; - - _gearboxAdapterType( - overrides?: CallOverrides - ): Promise; - - _gearboxAdapterVersion( - overrides?: CallOverrides - ): Promise; - - add_all_liquidity_one_coin( - i: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - add_liquidity( - amounts: [BigNumberish, BigNumberish], - arg1: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - add_liquidity_one_coin( - amount: BigNumberish, - i: BigNumberish, - minAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - admin(overrides?: CallOverrides): Promise; - - admin_balances( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - admin_fee(overrides?: CallOverrides): Promise; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - balanceOf( - account: string, - overrides?: CallOverrides - ): Promise; - - "balances(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "balances(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - block_timestamp_last( - overrides?: CallOverrides - ): Promise; - - calc_token_amount( - _amounts: [BigNumberish, BigNumberish], - _is_deposit: boolean, - overrides?: CallOverrides - ): Promise; - - calc_withdraw_one_coin( - _burn_amount: BigNumberish, - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - exchange( - i: BigNumberish, - j: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_all( - i: BigNumberish, - j: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_all_underlying( - i: BigNumberish, - j: BigNumberish, - rateMinRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_underlying( - i: BigNumberish, - j: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fee(overrides?: CallOverrides): Promise; - - future_A(overrides?: CallOverrides): Promise; - - future_A_time(overrides?: CallOverrides): Promise; - - get_balances(overrides?: CallOverrides): Promise; - - get_dy( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_dy_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_previous_balances( - overrides?: CallOverrides - ): Promise; - - get_price_cumulative_last( - overrides?: CallOverrides - ): Promise; - - get_twap_balances( - _first_balances: [BigNumberish, BigNumberish], - _last_balances: [BigNumberish, BigNumberish], - _time_elapsed: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_virtual_price(overrides?: CallOverrides): Promise; - - initial_A(overrides?: CallOverrides): Promise; - - initial_A_time(overrides?: CallOverrides): Promise; - - lp_token(overrides?: CallOverrides): Promise; - - metapoolBase(overrides?: CallOverrides): Promise; - - nCoins(overrides?: CallOverrides): Promise; - - name(overrides?: CallOverrides): Promise; - - remove_all_liquidity_one_coin( - i: BigNumberish, - minRateRAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity( - arg0: BigNumberish, - arg1: [BigNumberish, BigNumberish], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_imbalance( - amounts: [BigNumberish, BigNumberish], - arg1: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_one_coin( - arg0: BigNumberish, - i: BigNumberish, - arg2: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - targetContract(overrides?: CallOverrides): Promise; - - token(overrides?: CallOverrides): Promise; - - token0(overrides?: CallOverrides): Promise; - - token1(overrides?: CallOverrides): Promise; - - token2(overrides?: CallOverrides): Promise; - - token3(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - underlying0(overrides?: CallOverrides): Promise; - - underlying1(overrides?: CallOverrides): Promise; - - underlying2(overrides?: CallOverrides): Promise; - - underlying3(overrides?: CallOverrides): Promise; - - "underlying_coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "underlying_coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; -} diff --git a/src/types/contracts/adapters/curve/CurveV1_stETH.sol/index.ts b/src/types/contracts/adapters/curve/CurveV1_stETH.sol/index.ts deleted file mode 100644 index f7753cfb..00000000 --- a/src/types/contracts/adapters/curve/CurveV1_stETH.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { CurveV1AdapterStETH } from "./CurveV1AdapterStETH"; diff --git a/src/types/contracts/adapters/curve/CurveV1_stETHGateway.sol/CurveV1StETHPoolGateway.ts b/src/types/contracts/adapters/curve/CurveV1_stETHGateway.sol/CurveV1StETHPoolGateway.ts deleted file mode 100644 index 82ee715d..00000000 --- a/src/types/contracts/adapters/curve/CurveV1_stETHGateway.sol/CurveV1StETHPoolGateway.ts +++ /dev/null @@ -1,1232 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface CurveV1StETHPoolGatewayInterface extends utils.Interface { - functions: { - "A()": FunctionFragment; - "A_precise()": FunctionFragment; - "add_liquidity(uint256[2],uint256)": FunctionFragment; - "admin()": FunctionFragment; - "admin_balances(uint256)": FunctionFragment; - "admin_fee()": FunctionFragment; - "allowance(address,address)": FunctionFragment; - "balanceOf(address)": FunctionFragment; - "balances(int128)": FunctionFragment; - "balances(uint256)": FunctionFragment; - "block_timestamp_last()": FunctionFragment; - "calc_token_amount(uint256[2],bool)": FunctionFragment; - "calc_withdraw_one_coin(uint256,int128)": FunctionFragment; - "coins(int128)": FunctionFragment; - "coins(uint256)": FunctionFragment; - "decimals()": FunctionFragment; - "exchange(int128,int128,uint256,uint256)": FunctionFragment; - "exchange_underlying(int128,int128,uint256,uint256)": FunctionFragment; - "fee()": FunctionFragment; - "future_A()": FunctionFragment; - "future_A_time()": FunctionFragment; - "get_balances()": FunctionFragment; - "get_dy(int128,int128,uint256)": FunctionFragment; - "get_dy_underlying(int128,int128,uint256)": FunctionFragment; - "get_previous_balances()": FunctionFragment; - "get_price_cumulative_last()": FunctionFragment; - "get_twap_balances(uint256[2],uint256[2],uint256)": FunctionFragment; - "get_virtual_price()": FunctionFragment; - "initial_A()": FunctionFragment; - "initial_A_time()": FunctionFragment; - "lp_token()": FunctionFragment; - "name()": FunctionFragment; - "pool()": FunctionFragment; - "remove_liquidity(uint256,uint256[2])": FunctionFragment; - "remove_liquidity_imbalance(uint256[2],uint256)": FunctionFragment; - "remove_liquidity_one_coin(uint256,int128,uint256)": FunctionFragment; - "symbol()": FunctionFragment; - "token()": FunctionFragment; - "token0()": FunctionFragment; - "token1()": FunctionFragment; - "totalSupply()": FunctionFragment; - "underlying_coins(int128)": FunctionFragment; - "underlying_coins(uint256)": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "A" - | "A_precise" - | "add_liquidity" - | "admin" - | "admin_balances" - | "admin_fee" - | "allowance" - | "balanceOf" - | "balances(int128)" - | "balances(uint256)" - | "block_timestamp_last" - | "calc_token_amount" - | "calc_withdraw_one_coin" - | "coins(int128)" - | "coins(uint256)" - | "decimals" - | "exchange" - | "exchange_underlying" - | "fee" - | "future_A" - | "future_A_time" - | "get_balances" - | "get_dy" - | "get_dy_underlying" - | "get_previous_balances" - | "get_price_cumulative_last" - | "get_twap_balances" - | "get_virtual_price" - | "initial_A" - | "initial_A_time" - | "lp_token" - | "name" - | "pool" - | "remove_liquidity" - | "remove_liquidity_imbalance" - | "remove_liquidity_one_coin" - | "symbol" - | "token" - | "token0" - | "token1" - | "totalSupply" - | "underlying_coins(int128)" - | "underlying_coins(uint256)" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "A", values?: undefined): string; - encodeFunctionData(functionFragment: "A_precise", values?: undefined): string; - encodeFunctionData( - functionFragment: "add_liquidity", - values: [[BigNumberish, BigNumberish], BigNumberish] - ): string; - encodeFunctionData(functionFragment: "admin", values?: undefined): string; - encodeFunctionData( - functionFragment: "admin_balances", - values: [BigNumberish] - ): string; - encodeFunctionData(functionFragment: "admin_fee", values?: undefined): string; - encodeFunctionData( - functionFragment: "allowance", - values: [string, string] - ): string; - encodeFunctionData(functionFragment: "balanceOf", values: [string]): string; - encodeFunctionData( - functionFragment: "balances(int128)", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "balances(uint256)", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "block_timestamp_last", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "calc_token_amount", - values: [[BigNumberish, BigNumberish], boolean] - ): string; - encodeFunctionData( - functionFragment: "calc_withdraw_one_coin", - values: [BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "coins(int128)", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "coins(uint256)", - values: [BigNumberish] - ): string; - encodeFunctionData(functionFragment: "decimals", values?: undefined): string; - encodeFunctionData( - functionFragment: "exchange", - values: [BigNumberish, BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "exchange_underlying", - values: [BigNumberish, BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "fee", values?: undefined): string; - encodeFunctionData(functionFragment: "future_A", values?: undefined): string; - encodeFunctionData( - functionFragment: "future_A_time", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "get_balances", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "get_dy", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "get_dy_underlying", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "get_previous_balances", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "get_price_cumulative_last", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "get_twap_balances", - values: [ - [BigNumberish, BigNumberish], - [BigNumberish, BigNumberish], - BigNumberish - ] - ): string; - encodeFunctionData( - functionFragment: "get_virtual_price", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "initial_A", values?: undefined): string; - encodeFunctionData( - functionFragment: "initial_A_time", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "lp_token", values?: undefined): string; - encodeFunctionData(functionFragment: "name", values?: undefined): string; - encodeFunctionData(functionFragment: "pool", values?: undefined): string; - encodeFunctionData( - functionFragment: "remove_liquidity", - values: [BigNumberish, [BigNumberish, BigNumberish]] - ): string; - encodeFunctionData( - functionFragment: "remove_liquidity_imbalance", - values: [[BigNumberish, BigNumberish], BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "remove_liquidity_one_coin", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "symbol", values?: undefined): string; - encodeFunctionData(functionFragment: "token", values?: undefined): string; - encodeFunctionData(functionFragment: "token0", values?: undefined): string; - encodeFunctionData(functionFragment: "token1", values?: undefined): string; - encodeFunctionData( - functionFragment: "totalSupply", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "underlying_coins(int128)", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "underlying_coins(uint256)", - values: [BigNumberish] - ): string; - - decodeFunctionResult(functionFragment: "A", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "A_precise", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "add_liquidity", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "admin", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "admin_balances", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "admin_fee", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "balances(int128)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "balances(uint256)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "block_timestamp_last", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "calc_token_amount", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "calc_withdraw_one_coin", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "coins(int128)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "coins(uint256)", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "exchange", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "exchange_underlying", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "fee", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "future_A", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "future_A_time", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "get_balances", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "get_dy", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "get_dy_underlying", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "get_previous_balances", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "get_price_cumulative_last", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "get_twap_balances", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "get_virtual_price", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "initial_A", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "initial_A_time", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "lp_token", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "pool", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "remove_liquidity", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "remove_liquidity_imbalance", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "remove_liquidity_one_coin", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "token", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "token0", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "token1", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "totalSupply", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "underlying_coins(int128)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "underlying_coins(uint256)", - data: BytesLike - ): Result; - - events: {}; -} - -export interface CurveV1StETHPoolGateway extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: CurveV1StETHPoolGatewayInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - A(overrides?: CallOverrides): Promise<[BigNumber]>; - - A_precise(overrides?: CallOverrides): Promise<[BigNumber]>; - - add_liquidity( - amounts: [BigNumberish, BigNumberish], - min_mint_amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - admin(overrides?: CallOverrides): Promise<[string]>; - - admin_balances( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - admin_fee(overrides?: CallOverrides): Promise<[BigNumber]>; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - balanceOf(account: string, overrides?: CallOverrides): Promise<[BigNumber]>; - - "balances(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "balances(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - block_timestamp_last(overrides?: CallOverrides): Promise<[BigNumber]>; - - calc_token_amount( - _amounts: [BigNumberish, BigNumberish], - _is_deposit: boolean, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - calc_withdraw_one_coin( - _burn_amount: BigNumberish, - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - "coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - decimals(overrides?: CallOverrides): Promise<[BigNumber]>; - - exchange( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - min_dy: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_underlying( - arg0: BigNumberish, - arg1: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - overrides?: CallOverrides - ): Promise<[void]>; - - fee(overrides?: CallOverrides): Promise<[BigNumber]>; - - future_A(overrides?: CallOverrides): Promise<[BigNumber]>; - - future_A_time(overrides?: CallOverrides): Promise<[BigNumber]>; - - get_balances(overrides?: CallOverrides): Promise<[[BigNumber, BigNumber]]>; - - get_dy( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - get_dy_underlying( - arg0: BigNumberish, - arg1: BigNumberish, - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - get_previous_balances( - overrides?: CallOverrides - ): Promise<[[BigNumber, BigNumber]]>; - - get_price_cumulative_last( - overrides?: CallOverrides - ): Promise<[[BigNumber, BigNumber]]>; - - get_twap_balances( - arg0: [BigNumberish, BigNumberish], - arg1: [BigNumberish, BigNumberish], - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise<[[BigNumber, BigNumber]]>; - - get_virtual_price(overrides?: CallOverrides): Promise<[BigNumber]>; - - initial_A(overrides?: CallOverrides): Promise<[BigNumber]>; - - initial_A_time(overrides?: CallOverrides): Promise<[BigNumber]>; - - lp_token(overrides?: CallOverrides): Promise<[string]>; - - name(overrides?: CallOverrides): Promise<[string]>; - - pool(overrides?: CallOverrides): Promise<[string]>; - - remove_liquidity( - amount: BigNumberish, - min_amounts: [BigNumberish, BigNumberish], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_imbalance( - amounts: [BigNumberish, BigNumberish], - max_burn_amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_one_coin( - _token_amount: BigNumberish, - i: BigNumberish, - min_amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise<[string]>; - - token(overrides?: CallOverrides): Promise<[string]>; - - token0(overrides?: CallOverrides): Promise<[string]>; - - token1(overrides?: CallOverrides): Promise<[string]>; - - totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>; - - "underlying_coins(int128)"( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - "underlying_coins(uint256)"( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - }; - - A(overrides?: CallOverrides): Promise; - - A_precise(overrides?: CallOverrides): Promise; - - add_liquidity( - amounts: [BigNumberish, BigNumberish], - min_mint_amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - admin(overrides?: CallOverrides): Promise; - - admin_balances( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - admin_fee(overrides?: CallOverrides): Promise; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - "balances(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "balances(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - block_timestamp_last(overrides?: CallOverrides): Promise; - - calc_token_amount( - _amounts: [BigNumberish, BigNumberish], - _is_deposit: boolean, - overrides?: CallOverrides - ): Promise; - - calc_withdraw_one_coin( - _burn_amount: BigNumberish, - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(int128)"(i: BigNumberish, overrides?: CallOverrides): Promise; - - "coins(uint256)"(i: BigNumberish, overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - exchange( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - min_dy: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_underlying( - arg0: BigNumberish, - arg1: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - overrides?: CallOverrides - ): Promise; - - fee(overrides?: CallOverrides): Promise; - - future_A(overrides?: CallOverrides): Promise; - - future_A_time(overrides?: CallOverrides): Promise; - - get_balances(overrides?: CallOverrides): Promise<[BigNumber, BigNumber]>; - - get_dy( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_dy_underlying( - arg0: BigNumberish, - arg1: BigNumberish, - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_previous_balances( - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber]>; - - get_price_cumulative_last( - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber]>; - - get_twap_balances( - arg0: [BigNumberish, BigNumberish], - arg1: [BigNumberish, BigNumberish], - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber]>; - - get_virtual_price(overrides?: CallOverrides): Promise; - - initial_A(overrides?: CallOverrides): Promise; - - initial_A_time(overrides?: CallOverrides): Promise; - - lp_token(overrides?: CallOverrides): Promise; - - name(overrides?: CallOverrides): Promise; - - pool(overrides?: CallOverrides): Promise; - - remove_liquidity( - amount: BigNumberish, - min_amounts: [BigNumberish, BigNumberish], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_imbalance( - amounts: [BigNumberish, BigNumberish], - max_burn_amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_one_coin( - _token_amount: BigNumberish, - i: BigNumberish, - min_amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - token(overrides?: CallOverrides): Promise; - - token0(overrides?: CallOverrides): Promise; - - token1(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "underlying_coins(int128)"( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "underlying_coins(uint256)"( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - callStatic: { - A(overrides?: CallOverrides): Promise; - - A_precise(overrides?: CallOverrides): Promise; - - add_liquidity( - amounts: [BigNumberish, BigNumberish], - min_mint_amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - admin(overrides?: CallOverrides): Promise; - - admin_balances( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - admin_fee(overrides?: CallOverrides): Promise; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - "balances(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "balances(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - block_timestamp_last(overrides?: CallOverrides): Promise; - - calc_token_amount( - _amounts: [BigNumberish, BigNumberish], - _is_deposit: boolean, - overrides?: CallOverrides - ): Promise; - - calc_withdraw_one_coin( - _burn_amount: BigNumberish, - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - exchange( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - min_dy: BigNumberish, - overrides?: CallOverrides - ): Promise; - - exchange_underlying( - arg0: BigNumberish, - arg1: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - overrides?: CallOverrides - ): Promise; - - fee(overrides?: CallOverrides): Promise; - - future_A(overrides?: CallOverrides): Promise; - - future_A_time(overrides?: CallOverrides): Promise; - - get_balances(overrides?: CallOverrides): Promise<[BigNumber, BigNumber]>; - - get_dy( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_dy_underlying( - arg0: BigNumberish, - arg1: BigNumberish, - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_previous_balances( - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber]>; - - get_price_cumulative_last( - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber]>; - - get_twap_balances( - arg0: [BigNumberish, BigNumberish], - arg1: [BigNumberish, BigNumberish], - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber]>; - - get_virtual_price(overrides?: CallOverrides): Promise; - - initial_A(overrides?: CallOverrides): Promise; - - initial_A_time(overrides?: CallOverrides): Promise; - - lp_token(overrides?: CallOverrides): Promise; - - name(overrides?: CallOverrides): Promise; - - pool(overrides?: CallOverrides): Promise; - - remove_liquidity( - amount: BigNumberish, - min_amounts: [BigNumberish, BigNumberish], - overrides?: CallOverrides - ): Promise; - - remove_liquidity_imbalance( - amounts: [BigNumberish, BigNumberish], - max_burn_amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - remove_liquidity_one_coin( - _token_amount: BigNumberish, - i: BigNumberish, - min_amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - token(overrides?: CallOverrides): Promise; - - token0(overrides?: CallOverrides): Promise; - - token1(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "underlying_coins(int128)"( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "underlying_coins(uint256)"( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - filters: {}; - - estimateGas: { - A(overrides?: CallOverrides): Promise; - - A_precise(overrides?: CallOverrides): Promise; - - add_liquidity( - amounts: [BigNumberish, BigNumberish], - min_mint_amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - admin(overrides?: CallOverrides): Promise; - - admin_balances( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - admin_fee(overrides?: CallOverrides): Promise; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - "balances(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "balances(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - block_timestamp_last(overrides?: CallOverrides): Promise; - - calc_token_amount( - _amounts: [BigNumberish, BigNumberish], - _is_deposit: boolean, - overrides?: CallOverrides - ): Promise; - - calc_withdraw_one_coin( - _burn_amount: BigNumberish, - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - exchange( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - min_dy: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_underlying( - arg0: BigNumberish, - arg1: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - overrides?: CallOverrides - ): Promise; - - fee(overrides?: CallOverrides): Promise; - - future_A(overrides?: CallOverrides): Promise; - - future_A_time(overrides?: CallOverrides): Promise; - - get_balances(overrides?: CallOverrides): Promise; - - get_dy( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_dy_underlying( - arg0: BigNumberish, - arg1: BigNumberish, - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_previous_balances(overrides?: CallOverrides): Promise; - - get_price_cumulative_last(overrides?: CallOverrides): Promise; - - get_twap_balances( - arg0: [BigNumberish, BigNumberish], - arg1: [BigNumberish, BigNumberish], - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_virtual_price(overrides?: CallOverrides): Promise; - - initial_A(overrides?: CallOverrides): Promise; - - initial_A_time(overrides?: CallOverrides): Promise; - - lp_token(overrides?: CallOverrides): Promise; - - name(overrides?: CallOverrides): Promise; - - pool(overrides?: CallOverrides): Promise; - - remove_liquidity( - amount: BigNumberish, - min_amounts: [BigNumberish, BigNumberish], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_imbalance( - amounts: [BigNumberish, BigNumberish], - max_burn_amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_one_coin( - _token_amount: BigNumberish, - i: BigNumberish, - min_amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - token(overrides?: CallOverrides): Promise; - - token0(overrides?: CallOverrides): Promise; - - token1(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "underlying_coins(int128)"( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "underlying_coins(uint256)"( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - populateTransaction: { - A(overrides?: CallOverrides): Promise; - - A_precise(overrides?: CallOverrides): Promise; - - add_liquidity( - amounts: [BigNumberish, BigNumberish], - min_mint_amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - admin(overrides?: CallOverrides): Promise; - - admin_balances( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - admin_fee(overrides?: CallOverrides): Promise; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - balanceOf( - account: string, - overrides?: CallOverrides - ): Promise; - - "balances(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "balances(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - block_timestamp_last( - overrides?: CallOverrides - ): Promise; - - calc_token_amount( - _amounts: [BigNumberish, BigNumberish], - _is_deposit: boolean, - overrides?: CallOverrides - ): Promise; - - calc_withdraw_one_coin( - _burn_amount: BigNumberish, - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - exchange( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - min_dy: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_underlying( - arg0: BigNumberish, - arg1: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - overrides?: CallOverrides - ): Promise; - - fee(overrides?: CallOverrides): Promise; - - future_A(overrides?: CallOverrides): Promise; - - future_A_time(overrides?: CallOverrides): Promise; - - get_balances(overrides?: CallOverrides): Promise; - - get_dy( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_dy_underlying( - arg0: BigNumberish, - arg1: BigNumberish, - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_previous_balances( - overrides?: CallOverrides - ): Promise; - - get_price_cumulative_last( - overrides?: CallOverrides - ): Promise; - - get_twap_balances( - arg0: [BigNumberish, BigNumberish], - arg1: [BigNumberish, BigNumberish], - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_virtual_price(overrides?: CallOverrides): Promise; - - initial_A(overrides?: CallOverrides): Promise; - - initial_A_time(overrides?: CallOverrides): Promise; - - lp_token(overrides?: CallOverrides): Promise; - - name(overrides?: CallOverrides): Promise; - - pool(overrides?: CallOverrides): Promise; - - remove_liquidity( - amount: BigNumberish, - min_amounts: [BigNumberish, BigNumberish], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_imbalance( - amounts: [BigNumberish, BigNumberish], - max_burn_amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_one_coin( - _token_amount: BigNumberish, - i: BigNumberish, - min_amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - token(overrides?: CallOverrides): Promise; - - token0(overrides?: CallOverrides): Promise; - - token1(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "underlying_coins(int128)"( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "underlying_coins(uint256)"( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; -} diff --git a/src/types/contracts/adapters/curve/CurveV1_stETHGateway.sol/index.ts b/src/types/contracts/adapters/curve/CurveV1_stETHGateway.sol/index.ts deleted file mode 100644 index aba91955..00000000 --- a/src/types/contracts/adapters/curve/CurveV1_stETHGateway.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { CurveV1StETHPoolGateway } from "./CurveV1StETHPoolGateway"; diff --git a/src/types/contracts/adapters/curve/index.ts b/src/types/contracts/adapters/curve/index.ts deleted file mode 100644 index 1e91f978..00000000 --- a/src/types/contracts/adapters/curve/index.ts +++ /dev/null @@ -1,17 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type * as curveV12Sol from "./CurveV1_2.sol"; -export type { curveV12Sol }; -import type * as curveV13Sol from "./CurveV1_3.sol"; -export type { curveV13Sol }; -import type * as curveV14Sol from "./CurveV1_4.sol"; -export type { curveV14Sol }; -import type * as curveV1BaseSol from "./CurveV1_Base.sol"; -export type { curveV1BaseSol }; -import type * as curveV1DepositZapSol from "./CurveV1_DepositZap.sol"; -export type { curveV1DepositZapSol }; -import type * as curveV1StEthSol from "./CurveV1_stETH.sol"; -export type { curveV1StEthSol }; -import type * as curveV1StEthGatewaySol from "./CurveV1_stETHGateway.sol"; -export type { curveV1StEthGatewaySol }; diff --git a/src/types/contracts/adapters/index.ts b/src/types/contracts/adapters/index.ts deleted file mode 100644 index 7ea8c279..00000000 --- a/src/types/contracts/adapters/index.ts +++ /dev/null @@ -1,15 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type * as convex from "./convex"; -export type { convex }; -import type * as curve from "./curve"; -export type { curve }; -import type * as lido from "./lido"; -export type { lido }; -import type * as uniswap from "./uniswap"; -export type { uniswap }; -import type * as yearn from "./yearn"; -export type { yearn }; -export type { AbstractAdapter } from "./AbstractAdapter"; -export type { UniversalAdapter } from "./UniversalAdapter"; diff --git a/src/types/contracts/adapters/lido/LidoV1.sol/LidoV1Adapter.ts b/src/types/contracts/adapters/lido/LidoV1.sol/LidoV1Adapter.ts deleted file mode 100644 index a374428b..00000000 --- a/src/types/contracts/adapters/lido/LidoV1.sol/LidoV1Adapter.ts +++ /dev/null @@ -1,689 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface LidoV1AdapterInterface extends utils.Interface { - functions: { - "_acl()": FunctionFragment; - "_gearboxAdapterType()": FunctionFragment; - "_gearboxAdapterVersion()": FunctionFragment; - "allowance(address,address)": FunctionFragment; - "balanceOf(address)": FunctionFragment; - "creditFacade()": FunctionFragment; - "creditManager()": FunctionFragment; - "decimals()": FunctionFragment; - "getFee()": FunctionFragment; - "getPooledEthByShares(uint256)": FunctionFragment; - "getSharesByPooledEth(uint256)": FunctionFragment; - "getTotalPooledEther()": FunctionFragment; - "getTotalShares()": FunctionFragment; - "limit()": FunctionFragment; - "name()": FunctionFragment; - "pause()": FunctionFragment; - "paused()": FunctionFragment; - "setLimit(uint256)": FunctionFragment; - "sharesOf(address)": FunctionFragment; - "stETH()": FunctionFragment; - "submit(uint256)": FunctionFragment; - "submitAll()": FunctionFragment; - "symbol()": FunctionFragment; - "targetContract()": FunctionFragment; - "totalSupply()": FunctionFragment; - "treasury()": FunctionFragment; - "unpause()": FunctionFragment; - "weth()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "_acl" - | "_gearboxAdapterType" - | "_gearboxAdapterVersion" - | "allowance" - | "balanceOf" - | "creditFacade" - | "creditManager" - | "decimals" - | "getFee" - | "getPooledEthByShares" - | "getSharesByPooledEth" - | "getTotalPooledEther" - | "getTotalShares" - | "limit" - | "name" - | "pause" - | "paused" - | "setLimit" - | "sharesOf" - | "stETH" - | "submit" - | "submitAll" - | "symbol" - | "targetContract" - | "totalSupply" - | "treasury" - | "unpause" - | "weth" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "_acl", values?: undefined): string; - encodeFunctionData( - functionFragment: "_gearboxAdapterType", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "_gearboxAdapterVersion", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "allowance", - values: [string, string] - ): string; - encodeFunctionData(functionFragment: "balanceOf", values: [string]): string; - encodeFunctionData( - functionFragment: "creditFacade", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditManager", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "decimals", values?: undefined): string; - encodeFunctionData(functionFragment: "getFee", values?: undefined): string; - encodeFunctionData( - functionFragment: "getPooledEthByShares", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "getSharesByPooledEth", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "getTotalPooledEther", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "getTotalShares", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "limit", values?: undefined): string; - encodeFunctionData(functionFragment: "name", values?: undefined): string; - encodeFunctionData(functionFragment: "pause", values?: undefined): string; - encodeFunctionData(functionFragment: "paused", values?: undefined): string; - encodeFunctionData( - functionFragment: "setLimit", - values: [BigNumberish] - ): string; - encodeFunctionData(functionFragment: "sharesOf", values: [string]): string; - encodeFunctionData(functionFragment: "stETH", values?: undefined): string; - encodeFunctionData( - functionFragment: "submit", - values: [BigNumberish] - ): string; - encodeFunctionData(functionFragment: "submitAll", values?: undefined): string; - encodeFunctionData(functionFragment: "symbol", values?: undefined): string; - encodeFunctionData( - functionFragment: "targetContract", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "totalSupply", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "treasury", values?: undefined): string; - encodeFunctionData(functionFragment: "unpause", values?: undefined): string; - encodeFunctionData(functionFragment: "weth", values?: undefined): string; - - decodeFunctionResult(functionFragment: "_acl", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "_gearboxAdapterType", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "_gearboxAdapterVersion", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "creditFacade", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditManager", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "getFee", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "getPooledEthByShares", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getSharesByPooledEth", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getTotalPooledEther", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getTotalShares", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "limit", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "pause", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "paused", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "setLimit", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "sharesOf", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "stETH", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "submit", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "submitAll", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "targetContract", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "totalSupply", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "treasury", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "unpause", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "weth", data: BytesLike): Result; - - events: { - "NewLimit(uint256)": EventFragment; - "Paused(address)": EventFragment; - "Unpaused(address)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "NewLimit"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Paused"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Unpaused"): EventFragment; -} - -export interface NewLimitEventObject { - _limit: BigNumber; -} -export type NewLimitEvent = TypedEvent<[BigNumber], NewLimitEventObject>; - -export type NewLimitEventFilter = TypedEventFilter; - -export interface PausedEventObject { - account: string; -} -export type PausedEvent = TypedEvent<[string], PausedEventObject>; - -export type PausedEventFilter = TypedEventFilter; - -export interface UnpausedEventObject { - account: string; -} -export type UnpausedEvent = TypedEvent<[string], UnpausedEventObject>; - -export type UnpausedEventFilter = TypedEventFilter; - -export interface LidoV1Adapter extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: LidoV1AdapterInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - _acl(overrides?: CallOverrides): Promise<[string]>; - - _gearboxAdapterType(overrides?: CallOverrides): Promise<[number]>; - - _gearboxAdapterVersion(overrides?: CallOverrides): Promise<[number]>; - - allowance( - _owner: string, - _spender: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - balanceOf( - _account: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - creditFacade(overrides?: CallOverrides): Promise<[string]>; - - creditManager(overrides?: CallOverrides): Promise<[string]>; - - decimals(overrides?: CallOverrides): Promise<[number]>; - - getFee(overrides?: CallOverrides): Promise<[number]>; - - getPooledEthByShares( - _sharesAmount: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - getSharesByPooledEth( - _ethAmount: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - getTotalPooledEther(overrides?: CallOverrides): Promise<[BigNumber]>; - - getTotalShares(overrides?: CallOverrides): Promise<[BigNumber]>; - - limit(overrides?: CallOverrides): Promise<[BigNumber]>; - - name(overrides?: CallOverrides): Promise<[string]>; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise<[boolean]>; - - setLimit( - _limit: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - sharesOf(_account: string, overrides?: CallOverrides): Promise<[BigNumber]>; - - stETH(overrides?: CallOverrides): Promise<[string]>; - - submit( - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - submitAll( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise<[string]>; - - targetContract(overrides?: CallOverrides): Promise<[string]>; - - totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>; - - treasury(overrides?: CallOverrides): Promise<[string]>; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - weth(overrides?: CallOverrides): Promise<[string]>; - }; - - _acl(overrides?: CallOverrides): Promise; - - _gearboxAdapterType(overrides?: CallOverrides): Promise; - - _gearboxAdapterVersion(overrides?: CallOverrides): Promise; - - allowance( - _owner: string, - _spender: string, - overrides?: CallOverrides - ): Promise; - - balanceOf(_account: string, overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - getFee(overrides?: CallOverrides): Promise; - - getPooledEthByShares( - _sharesAmount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getSharesByPooledEth( - _ethAmount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getTotalPooledEther(overrides?: CallOverrides): Promise; - - getTotalShares(overrides?: CallOverrides): Promise; - - limit(overrides?: CallOverrides): Promise; - - name(overrides?: CallOverrides): Promise; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise; - - setLimit( - _limit: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - sharesOf(_account: string, overrides?: CallOverrides): Promise; - - stETH(overrides?: CallOverrides): Promise; - - submit( - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - submitAll( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - targetContract(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - treasury(overrides?: CallOverrides): Promise; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - weth(overrides?: CallOverrides): Promise; - - callStatic: { - _acl(overrides?: CallOverrides): Promise; - - _gearboxAdapterType(overrides?: CallOverrides): Promise; - - _gearboxAdapterVersion(overrides?: CallOverrides): Promise; - - allowance( - _owner: string, - _spender: string, - overrides?: CallOverrides - ): Promise; - - balanceOf(_account: string, overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - getFee(overrides?: CallOverrides): Promise; - - getPooledEthByShares( - _sharesAmount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getSharesByPooledEth( - _ethAmount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getTotalPooledEther(overrides?: CallOverrides): Promise; - - getTotalShares(overrides?: CallOverrides): Promise; - - limit(overrides?: CallOverrides): Promise; - - name(overrides?: CallOverrides): Promise; - - pause(overrides?: CallOverrides): Promise; - - paused(overrides?: CallOverrides): Promise; - - setLimit(_limit: BigNumberish, overrides?: CallOverrides): Promise; - - sharesOf(_account: string, overrides?: CallOverrides): Promise; - - stETH(overrides?: CallOverrides): Promise; - - submit(amount: BigNumberish, overrides?: CallOverrides): Promise; - - submitAll(overrides?: CallOverrides): Promise; - - symbol(overrides?: CallOverrides): Promise; - - targetContract(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - treasury(overrides?: CallOverrides): Promise; - - unpause(overrides?: CallOverrides): Promise; - - weth(overrides?: CallOverrides): Promise; - }; - - filters: { - "NewLimit(uint256)"(_limit?: null): NewLimitEventFilter; - NewLimit(_limit?: null): NewLimitEventFilter; - - "Paused(address)"(account?: null): PausedEventFilter; - Paused(account?: null): PausedEventFilter; - - "Unpaused(address)"(account?: null): UnpausedEventFilter; - Unpaused(account?: null): UnpausedEventFilter; - }; - - estimateGas: { - _acl(overrides?: CallOverrides): Promise; - - _gearboxAdapterType(overrides?: CallOverrides): Promise; - - _gearboxAdapterVersion(overrides?: CallOverrides): Promise; - - allowance( - _owner: string, - _spender: string, - overrides?: CallOverrides - ): Promise; - - balanceOf(_account: string, overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - getFee(overrides?: CallOverrides): Promise; - - getPooledEthByShares( - _sharesAmount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getSharesByPooledEth( - _ethAmount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getTotalPooledEther(overrides?: CallOverrides): Promise; - - getTotalShares(overrides?: CallOverrides): Promise; - - limit(overrides?: CallOverrides): Promise; - - name(overrides?: CallOverrides): Promise; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise; - - setLimit( - _limit: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - sharesOf(_account: string, overrides?: CallOverrides): Promise; - - stETH(overrides?: CallOverrides): Promise; - - submit( - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - submitAll( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - targetContract(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - treasury(overrides?: CallOverrides): Promise; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - weth(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - _acl(overrides?: CallOverrides): Promise; - - _gearboxAdapterType( - overrides?: CallOverrides - ): Promise; - - _gearboxAdapterVersion( - overrides?: CallOverrides - ): Promise; - - allowance( - _owner: string, - _spender: string, - overrides?: CallOverrides - ): Promise; - - balanceOf( - _account: string, - overrides?: CallOverrides - ): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - getFee(overrides?: CallOverrides): Promise; - - getPooledEthByShares( - _sharesAmount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getSharesByPooledEth( - _ethAmount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getTotalPooledEther( - overrides?: CallOverrides - ): Promise; - - getTotalShares(overrides?: CallOverrides): Promise; - - limit(overrides?: CallOverrides): Promise; - - name(overrides?: CallOverrides): Promise; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise; - - setLimit( - _limit: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - sharesOf( - _account: string, - overrides?: CallOverrides - ): Promise; - - stETH(overrides?: CallOverrides): Promise; - - submit( - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - submitAll( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - targetContract(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - treasury(overrides?: CallOverrides): Promise; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - weth(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/adapters/lido/LidoV1.sol/index.ts b/src/types/contracts/adapters/lido/LidoV1.sol/index.ts deleted file mode 100644 index 79ee756c..00000000 --- a/src/types/contracts/adapters/lido/LidoV1.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { LidoV1Adapter } from "./LidoV1Adapter"; diff --git a/src/types/contracts/adapters/lido/LidoV1_WETHGateway.sol/LidoV1Gateway.ts b/src/types/contracts/adapters/lido/LidoV1_WETHGateway.sol/LidoV1Gateway.ts deleted file mode 100644 index 8a889387..00000000 --- a/src/types/contracts/adapters/lido/LidoV1_WETHGateway.sol/LidoV1Gateway.ts +++ /dev/null @@ -1,400 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface LidoV1GatewayInterface extends utils.Interface { - functions: { - "allowance(address,address)": FunctionFragment; - "balanceOf(address)": FunctionFragment; - "decimals()": FunctionFragment; - "getFee()": FunctionFragment; - "getPooledEthByShares(uint256)": FunctionFragment; - "getSharesByPooledEth(uint256)": FunctionFragment; - "getTotalPooledEther()": FunctionFragment; - "getTotalShares()": FunctionFragment; - "name()": FunctionFragment; - "sharesOf(address)": FunctionFragment; - "stETH()": FunctionFragment; - "submit(uint256,address)": FunctionFragment; - "symbol()": FunctionFragment; - "totalSupply()": FunctionFragment; - "weth()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "allowance" - | "balanceOf" - | "decimals" - | "getFee" - | "getPooledEthByShares" - | "getSharesByPooledEth" - | "getTotalPooledEther" - | "getTotalShares" - | "name" - | "sharesOf" - | "stETH" - | "submit" - | "symbol" - | "totalSupply" - | "weth" - ): FunctionFragment; - - encodeFunctionData( - functionFragment: "allowance", - values: [string, string] - ): string; - encodeFunctionData(functionFragment: "balanceOf", values: [string]): string; - encodeFunctionData(functionFragment: "decimals", values?: undefined): string; - encodeFunctionData(functionFragment: "getFee", values?: undefined): string; - encodeFunctionData( - functionFragment: "getPooledEthByShares", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "getSharesByPooledEth", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "getTotalPooledEther", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "getTotalShares", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "name", values?: undefined): string; - encodeFunctionData(functionFragment: "sharesOf", values: [string]): string; - encodeFunctionData(functionFragment: "stETH", values?: undefined): string; - encodeFunctionData( - functionFragment: "submit", - values: [BigNumberish, string] - ): string; - encodeFunctionData(functionFragment: "symbol", values?: undefined): string; - encodeFunctionData( - functionFragment: "totalSupply", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "weth", values?: undefined): string; - - decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "getFee", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "getPooledEthByShares", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getSharesByPooledEth", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getTotalPooledEther", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getTotalShares", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "sharesOf", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "stETH", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "submit", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "totalSupply", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "weth", data: BytesLike): Result; - - events: {}; -} - -export interface LidoV1Gateway extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: LidoV1GatewayInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - allowance( - _owner: string, - _spender: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - balanceOf( - _account: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - decimals(overrides?: CallOverrides): Promise<[number]>; - - getFee(overrides?: CallOverrides): Promise<[number]>; - - getPooledEthByShares( - _sharesAmount: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - getSharesByPooledEth( - _ethAmount: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - getTotalPooledEther(overrides?: CallOverrides): Promise<[BigNumber]>; - - getTotalShares(overrides?: CallOverrides): Promise<[BigNumber]>; - - name(overrides?: CallOverrides): Promise<[string]>; - - sharesOf(_account: string, overrides?: CallOverrides): Promise<[BigNumber]>; - - stETH(overrides?: CallOverrides): Promise<[string]>; - - submit( - amount: BigNumberish, - _referral: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise<[string]>; - - totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>; - - weth(overrides?: CallOverrides): Promise<[string]>; - }; - - allowance( - _owner: string, - _spender: string, - overrides?: CallOverrides - ): Promise; - - balanceOf(_account: string, overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - getFee(overrides?: CallOverrides): Promise; - - getPooledEthByShares( - _sharesAmount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getSharesByPooledEth( - _ethAmount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getTotalPooledEther(overrides?: CallOverrides): Promise; - - getTotalShares(overrides?: CallOverrides): Promise; - - name(overrides?: CallOverrides): Promise; - - sharesOf(_account: string, overrides?: CallOverrides): Promise; - - stETH(overrides?: CallOverrides): Promise; - - submit( - amount: BigNumberish, - _referral: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - weth(overrides?: CallOverrides): Promise; - - callStatic: { - allowance( - _owner: string, - _spender: string, - overrides?: CallOverrides - ): Promise; - - balanceOf(_account: string, overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - getFee(overrides?: CallOverrides): Promise; - - getPooledEthByShares( - _sharesAmount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getSharesByPooledEth( - _ethAmount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getTotalPooledEther(overrides?: CallOverrides): Promise; - - getTotalShares(overrides?: CallOverrides): Promise; - - name(overrides?: CallOverrides): Promise; - - sharesOf(_account: string, overrides?: CallOverrides): Promise; - - stETH(overrides?: CallOverrides): Promise; - - submit( - amount: BigNumberish, - _referral: string, - overrides?: CallOverrides - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - weth(overrides?: CallOverrides): Promise; - }; - - filters: {}; - - estimateGas: { - allowance( - _owner: string, - _spender: string, - overrides?: CallOverrides - ): Promise; - - balanceOf(_account: string, overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - getFee(overrides?: CallOverrides): Promise; - - getPooledEthByShares( - _sharesAmount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getSharesByPooledEth( - _ethAmount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getTotalPooledEther(overrides?: CallOverrides): Promise; - - getTotalShares(overrides?: CallOverrides): Promise; - - name(overrides?: CallOverrides): Promise; - - sharesOf(_account: string, overrides?: CallOverrides): Promise; - - stETH(overrides?: CallOverrides): Promise; - - submit( - amount: BigNumberish, - _referral: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - weth(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - allowance( - _owner: string, - _spender: string, - overrides?: CallOverrides - ): Promise; - - balanceOf( - _account: string, - overrides?: CallOverrides - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - getFee(overrides?: CallOverrides): Promise; - - getPooledEthByShares( - _sharesAmount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getSharesByPooledEth( - _ethAmount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getTotalPooledEther( - overrides?: CallOverrides - ): Promise; - - getTotalShares(overrides?: CallOverrides): Promise; - - name(overrides?: CallOverrides): Promise; - - sharesOf( - _account: string, - overrides?: CallOverrides - ): Promise; - - stETH(overrides?: CallOverrides): Promise; - - submit( - amount: BigNumberish, - _referral: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - weth(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/adapters/lido/index.ts b/src/types/contracts/adapters/lido/index.ts deleted file mode 100644 index 9b3b49f8..00000000 --- a/src/types/contracts/adapters/lido/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type * as lidoV1Sol from "./LidoV1.sol"; -export type { lidoV1Sol }; -import type * as lidoV1WethGatewaySol from "./LidoV1_WETHGateway.sol"; -export type { lidoV1WethGatewaySol }; diff --git a/src/types/contracts/adapters/uniswap/UniswapV2.sol/UniswapV2Adapter.ts b/src/types/contracts/adapters/uniswap/UniswapV2.sol/UniswapV2Adapter.ts deleted file mode 100644 index e9d653e0..00000000 --- a/src/types/contracts/adapters/uniswap/UniswapV2.sol/UniswapV2Adapter.ts +++ /dev/null @@ -1,1575 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PayableOverrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface UniswapV2AdapterInterface extends utils.Interface { - functions: { - "WETH()": FunctionFragment; - "_gearboxAdapterType()": FunctionFragment; - "_gearboxAdapterVersion()": FunctionFragment; - "addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256)": FunctionFragment; - "addLiquidityETH(address,uint256,uint256,uint256,address,uint256)": FunctionFragment; - "creditFacade()": FunctionFragment; - "creditManager()": FunctionFragment; - "factory()": FunctionFragment; - "getAmountIn(uint256,uint256,uint256)": FunctionFragment; - "getAmountOut(uint256,uint256,uint256)": FunctionFragment; - "getAmountsIn(uint256,address[])": FunctionFragment; - "getAmountsOut(uint256,address[])": FunctionFragment; - "quote(uint256,uint256,uint256)": FunctionFragment; - "removeLiquidity(address,address,uint256,uint256,uint256,address,uint256)": FunctionFragment; - "removeLiquidityETH(address,uint256,uint256,uint256,address,uint256)": FunctionFragment; - "removeLiquidityETHSupportingFeeOnTransferTokens(address,uint256,uint256,uint256,address,uint256)": FunctionFragment; - "removeLiquidityETHWithPermit(address,uint256,uint256,uint256,address,uint256,bool,uint8,bytes32,bytes32)": FunctionFragment; - "removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(address,uint256,uint256,uint256,address,uint256,bool,uint8,bytes32,bytes32)": FunctionFragment; - "removeLiquidityWithPermit(address,address,uint256,uint256,uint256,address,uint256,bool,uint8,bytes32,bytes32)": FunctionFragment; - "swapAllTokensForTokens(uint256,address[],uint256)": FunctionFragment; - "swapETHForExactTokens(uint256,address[],address,uint256)": FunctionFragment; - "swapExactETHForTokens(uint256,address[],address,uint256)": FunctionFragment; - "swapExactETHForTokensSupportingFeeOnTransferTokens(uint256,address[],address,uint256)": FunctionFragment; - "swapExactTokensForETH(uint256,uint256,address[],address,uint256)": FunctionFragment; - "swapExactTokensForETHSupportingFeeOnTransferTokens(uint256,uint256,address[],address,uint256)": FunctionFragment; - "swapExactTokensForTokens(uint256,uint256,address[],address,uint256)": FunctionFragment; - "swapExactTokensForTokensSupportingFeeOnTransferTokens(uint256,uint256,address[],address,uint256)": FunctionFragment; - "swapTokensForExactETH(uint256,uint256,address[],address,uint256)": FunctionFragment; - "swapTokensForExactTokens(uint256,uint256,address[],address,uint256)": FunctionFragment; - "targetContract()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "WETH" - | "_gearboxAdapterType" - | "_gearboxAdapterVersion" - | "addLiquidity" - | "addLiquidityETH" - | "creditFacade" - | "creditManager" - | "factory" - | "getAmountIn" - | "getAmountOut" - | "getAmountsIn" - | "getAmountsOut" - | "quote" - | "removeLiquidity" - | "removeLiquidityETH" - | "removeLiquidityETHSupportingFeeOnTransferTokens" - | "removeLiquidityETHWithPermit" - | "removeLiquidityETHWithPermitSupportingFeeOnTransferTokens" - | "removeLiquidityWithPermit" - | "swapAllTokensForTokens" - | "swapETHForExactTokens" - | "swapExactETHForTokens" - | "swapExactETHForTokensSupportingFeeOnTransferTokens" - | "swapExactTokensForETH" - | "swapExactTokensForETHSupportingFeeOnTransferTokens" - | "swapExactTokensForTokens" - | "swapExactTokensForTokensSupportingFeeOnTransferTokens" - | "swapTokensForExactETH" - | "swapTokensForExactTokens" - | "targetContract" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "WETH", values?: undefined): string; - encodeFunctionData( - functionFragment: "_gearboxAdapterType", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "_gearboxAdapterVersion", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "addLiquidity", - values: [ - string, - string, - BigNumberish, - BigNumberish, - BigNumberish, - BigNumberish, - string, - BigNumberish - ] - ): string; - encodeFunctionData( - functionFragment: "addLiquidityETH", - values: [ - string, - BigNumberish, - BigNumberish, - BigNumberish, - string, - BigNumberish - ] - ): string; - encodeFunctionData( - functionFragment: "creditFacade", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditManager", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "factory", values?: undefined): string; - encodeFunctionData( - functionFragment: "getAmountIn", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "getAmountOut", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "getAmountsIn", - values: [BigNumberish, string[]] - ): string; - encodeFunctionData( - functionFragment: "getAmountsOut", - values: [BigNumberish, string[]] - ): string; - encodeFunctionData( - functionFragment: "quote", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "removeLiquidity", - values: [ - string, - string, - BigNumberish, - BigNumberish, - BigNumberish, - string, - BigNumberish - ] - ): string; - encodeFunctionData( - functionFragment: "removeLiquidityETH", - values: [ - string, - BigNumberish, - BigNumberish, - BigNumberish, - string, - BigNumberish - ] - ): string; - encodeFunctionData( - functionFragment: "removeLiquidityETHSupportingFeeOnTransferTokens", - values: [ - string, - BigNumberish, - BigNumberish, - BigNumberish, - string, - BigNumberish - ] - ): string; - encodeFunctionData( - functionFragment: "removeLiquidityETHWithPermit", - values: [ - string, - BigNumberish, - BigNumberish, - BigNumberish, - string, - BigNumberish, - boolean, - BigNumberish, - BytesLike, - BytesLike - ] - ): string; - encodeFunctionData( - functionFragment: "removeLiquidityETHWithPermitSupportingFeeOnTransferTokens", - values: [ - string, - BigNumberish, - BigNumberish, - BigNumberish, - string, - BigNumberish, - boolean, - BigNumberish, - BytesLike, - BytesLike - ] - ): string; - encodeFunctionData( - functionFragment: "removeLiquidityWithPermit", - values: [ - string, - string, - BigNumberish, - BigNumberish, - BigNumberish, - string, - BigNumberish, - boolean, - BigNumberish, - BytesLike, - BytesLike - ] - ): string; - encodeFunctionData( - functionFragment: "swapAllTokensForTokens", - values: [BigNumberish, string[], BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "swapETHForExactTokens", - values: [BigNumberish, string[], string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "swapExactETHForTokens", - values: [BigNumberish, string[], string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "swapExactETHForTokensSupportingFeeOnTransferTokens", - values: [BigNumberish, string[], string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "swapExactTokensForETH", - values: [BigNumberish, BigNumberish, string[], string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "swapExactTokensForETHSupportingFeeOnTransferTokens", - values: [BigNumberish, BigNumberish, string[], string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "swapExactTokensForTokens", - values: [BigNumberish, BigNumberish, string[], string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "swapExactTokensForTokensSupportingFeeOnTransferTokens", - values: [BigNumberish, BigNumberish, string[], string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "swapTokensForExactETH", - values: [BigNumberish, BigNumberish, string[], string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "swapTokensForExactTokens", - values: [BigNumberish, BigNumberish, string[], string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "targetContract", - values?: undefined - ): string; - - decodeFunctionResult(functionFragment: "WETH", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "_gearboxAdapterType", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "_gearboxAdapterVersion", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "addLiquidity", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "addLiquidityETH", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditFacade", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditManager", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "factory", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "getAmountIn", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getAmountOut", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getAmountsIn", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getAmountsOut", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "quote", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "removeLiquidity", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "removeLiquidityETH", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "removeLiquidityETHSupportingFeeOnTransferTokens", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "removeLiquidityETHWithPermit", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "removeLiquidityETHWithPermitSupportingFeeOnTransferTokens", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "removeLiquidityWithPermit", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "swapAllTokensForTokens", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "swapETHForExactTokens", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "swapExactETHForTokens", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "swapExactETHForTokensSupportingFeeOnTransferTokens", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "swapExactTokensForETH", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "swapExactTokensForETHSupportingFeeOnTransferTokens", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "swapExactTokensForTokens", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "swapExactTokensForTokensSupportingFeeOnTransferTokens", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "swapTokensForExactETH", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "swapTokensForExactTokens", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "targetContract", - data: BytesLike - ): Result; - - events: {}; -} - -export interface UniswapV2Adapter extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: UniswapV2AdapterInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - WETH(overrides?: CallOverrides): Promise<[string]>; - - _gearboxAdapterType(overrides?: CallOverrides): Promise<[number]>; - - _gearboxAdapterVersion(overrides?: CallOverrides): Promise<[number]>; - - addLiquidity( - arg0: string, - arg1: string, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: BigNumberish, - arg5: BigNumberish, - arg6: string, - arg7: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber, BigNumber]>; - - addLiquidityETH( - arg0: string, - arg1: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: string, - arg5: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - creditFacade(overrides?: CallOverrides): Promise<[string]>; - - creditManager(overrides?: CallOverrides): Promise<[string]>; - - factory(overrides?: CallOverrides): Promise<[string]>; - - getAmountIn( - amountOut: BigNumberish, - reserveIn: BigNumberish, - reserveOut: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber] & { amountIn: BigNumber }>; - - getAmountOut( - amountIn: BigNumberish, - reserveIn: BigNumberish, - reserveOut: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber] & { amountOut: BigNumber }>; - - getAmountsIn( - amountOut: BigNumberish, - path: string[], - overrides?: CallOverrides - ): Promise<[BigNumber[]] & { amounts: BigNumber[] }>; - - getAmountsOut( - amountIn: BigNumberish, - path: string[], - overrides?: CallOverrides - ): Promise<[BigNumber[]] & { amounts: BigNumber[] }>; - - quote( - amountA: BigNumberish, - reserveA: BigNumberish, - reserveB: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber] & { amountB: BigNumber }>; - - removeLiquidity( - arg0: string, - arg1: string, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: BigNumberish, - arg5: string, - arg6: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber]>; - - removeLiquidityETH( - arg0: string, - arg1: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: string, - arg5: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber]>; - - removeLiquidityETHSupportingFeeOnTransferTokens( - arg0: string, - arg1: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: string, - arg5: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - removeLiquidityETHWithPermit( - arg0: string, - arg1: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: string, - arg5: BigNumberish, - arg6: boolean, - arg7: BigNumberish, - arg8: BytesLike, - arg9: BytesLike, - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber]>; - - removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( - arg0: string, - arg1: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: string, - arg5: BigNumberish, - arg6: boolean, - arg7: BigNumberish, - arg8: BytesLike, - arg9: BytesLike, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - removeLiquidityWithPermit( - arg0: string, - arg1: string, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: BigNumberish, - arg5: string, - arg6: BigNumberish, - arg7: boolean, - arg8: BigNumberish, - arg9: BytesLike, - arg10: BytesLike, - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber]>; - - swapAllTokensForTokens( - rateMinRAY: BigNumberish, - path: string[], - deadline: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - swapETHForExactTokens( - arg0: BigNumberish, - arg1: string[], - arg2: string, - arg3: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - swapExactETHForTokens( - arg0: BigNumberish, - arg1: string[], - arg2: string, - arg3: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - swapExactETHForTokensSupportingFeeOnTransferTokens( - arg0: BigNumberish, - arg1: string[], - arg2: string, - arg3: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - swapExactTokensForETH( - arg0: BigNumberish, - arg1: BigNumberish, - arg2: string[], - arg3: string, - arg4: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber[]]>; - - swapExactTokensForETHSupportingFeeOnTransferTokens( - arg0: BigNumberish, - arg1: BigNumberish, - arg2: string[], - arg3: string, - arg4: BigNumberish, - overrides?: CallOverrides - ): Promise<[void]>; - - swapExactTokensForTokens( - amountIn: BigNumberish, - amountOutMin: BigNumberish, - path: string[], - arg3: string, - deadline: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - swapExactTokensForTokensSupportingFeeOnTransferTokens( - arg0: BigNumberish, - arg1: BigNumberish, - arg2: string[], - arg3: string, - arg4: BigNumberish, - overrides?: CallOverrides - ): Promise<[void]>; - - swapTokensForExactETH( - arg0: BigNumberish, - arg1: BigNumberish, - arg2: string[], - arg3: string, - arg4: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber[]]>; - - swapTokensForExactTokens( - amountOut: BigNumberish, - amountInMax: BigNumberish, - path: string[], - arg3: string, - deadline: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - targetContract(overrides?: CallOverrides): Promise<[string]>; - }; - - WETH(overrides?: CallOverrides): Promise; - - _gearboxAdapterType(overrides?: CallOverrides): Promise; - - _gearboxAdapterVersion(overrides?: CallOverrides): Promise; - - addLiquidity( - arg0: string, - arg1: string, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: BigNumberish, - arg5: BigNumberish, - arg6: string, - arg7: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber, BigNumber]>; - - addLiquidityETH( - arg0: string, - arg1: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: string, - arg5: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - factory(overrides?: CallOverrides): Promise; - - getAmountIn( - amountOut: BigNumberish, - reserveIn: BigNumberish, - reserveOut: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getAmountOut( - amountIn: BigNumberish, - reserveIn: BigNumberish, - reserveOut: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getAmountsIn( - amountOut: BigNumberish, - path: string[], - overrides?: CallOverrides - ): Promise; - - getAmountsOut( - amountIn: BigNumberish, - path: string[], - overrides?: CallOverrides - ): Promise; - - quote( - amountA: BigNumberish, - reserveA: BigNumberish, - reserveB: BigNumberish, - overrides?: CallOverrides - ): Promise; - - removeLiquidity( - arg0: string, - arg1: string, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: BigNumberish, - arg5: string, - arg6: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber]>; - - removeLiquidityETH( - arg0: string, - arg1: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: string, - arg5: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber]>; - - removeLiquidityETHSupportingFeeOnTransferTokens( - arg0: string, - arg1: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: string, - arg5: BigNumberish, - overrides?: CallOverrides - ): Promise; - - removeLiquidityETHWithPermit( - arg0: string, - arg1: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: string, - arg5: BigNumberish, - arg6: boolean, - arg7: BigNumberish, - arg8: BytesLike, - arg9: BytesLike, - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber]>; - - removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( - arg0: string, - arg1: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: string, - arg5: BigNumberish, - arg6: boolean, - arg7: BigNumberish, - arg8: BytesLike, - arg9: BytesLike, - overrides?: CallOverrides - ): Promise; - - removeLiquidityWithPermit( - arg0: string, - arg1: string, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: BigNumberish, - arg5: string, - arg6: BigNumberish, - arg7: boolean, - arg8: BigNumberish, - arg9: BytesLike, - arg10: BytesLike, - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber]>; - - swapAllTokensForTokens( - rateMinRAY: BigNumberish, - path: string[], - deadline: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - swapETHForExactTokens( - arg0: BigNumberish, - arg1: string[], - arg2: string, - arg3: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - swapExactETHForTokens( - arg0: BigNumberish, - arg1: string[], - arg2: string, - arg3: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - swapExactETHForTokensSupportingFeeOnTransferTokens( - arg0: BigNumberish, - arg1: string[], - arg2: string, - arg3: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - swapExactTokensForETH( - arg0: BigNumberish, - arg1: BigNumberish, - arg2: string[], - arg3: string, - arg4: BigNumberish, - overrides?: CallOverrides - ): Promise; - - swapExactTokensForETHSupportingFeeOnTransferTokens( - arg0: BigNumberish, - arg1: BigNumberish, - arg2: string[], - arg3: string, - arg4: BigNumberish, - overrides?: CallOverrides - ): Promise; - - swapExactTokensForTokens( - amountIn: BigNumberish, - amountOutMin: BigNumberish, - path: string[], - arg3: string, - deadline: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - swapExactTokensForTokensSupportingFeeOnTransferTokens( - arg0: BigNumberish, - arg1: BigNumberish, - arg2: string[], - arg3: string, - arg4: BigNumberish, - overrides?: CallOverrides - ): Promise; - - swapTokensForExactETH( - arg0: BigNumberish, - arg1: BigNumberish, - arg2: string[], - arg3: string, - arg4: BigNumberish, - overrides?: CallOverrides - ): Promise; - - swapTokensForExactTokens( - amountOut: BigNumberish, - amountInMax: BigNumberish, - path: string[], - arg3: string, - deadline: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - targetContract(overrides?: CallOverrides): Promise; - - callStatic: { - WETH(overrides?: CallOverrides): Promise; - - _gearboxAdapterType(overrides?: CallOverrides): Promise; - - _gearboxAdapterVersion(overrides?: CallOverrides): Promise; - - addLiquidity( - arg0: string, - arg1: string, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: BigNumberish, - arg5: BigNumberish, - arg6: string, - arg7: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber, BigNumber]>; - - addLiquidityETH( - arg0: string, - arg1: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: string, - arg5: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber, BigNumber]>; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - factory(overrides?: CallOverrides): Promise; - - getAmountIn( - amountOut: BigNumberish, - reserveIn: BigNumberish, - reserveOut: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getAmountOut( - amountIn: BigNumberish, - reserveIn: BigNumberish, - reserveOut: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getAmountsIn( - amountOut: BigNumberish, - path: string[], - overrides?: CallOverrides - ): Promise; - - getAmountsOut( - amountIn: BigNumberish, - path: string[], - overrides?: CallOverrides - ): Promise; - - quote( - amountA: BigNumberish, - reserveA: BigNumberish, - reserveB: BigNumberish, - overrides?: CallOverrides - ): Promise; - - removeLiquidity( - arg0: string, - arg1: string, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: BigNumberish, - arg5: string, - arg6: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber]>; - - removeLiquidityETH( - arg0: string, - arg1: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: string, - arg5: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber]>; - - removeLiquidityETHSupportingFeeOnTransferTokens( - arg0: string, - arg1: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: string, - arg5: BigNumberish, - overrides?: CallOverrides - ): Promise; - - removeLiquidityETHWithPermit( - arg0: string, - arg1: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: string, - arg5: BigNumberish, - arg6: boolean, - arg7: BigNumberish, - arg8: BytesLike, - arg9: BytesLike, - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber]>; - - removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( - arg0: string, - arg1: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: string, - arg5: BigNumberish, - arg6: boolean, - arg7: BigNumberish, - arg8: BytesLike, - arg9: BytesLike, - overrides?: CallOverrides - ): Promise; - - removeLiquidityWithPermit( - arg0: string, - arg1: string, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: BigNumberish, - arg5: string, - arg6: BigNumberish, - arg7: boolean, - arg8: BigNumberish, - arg9: BytesLike, - arg10: BytesLike, - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber]>; - - swapAllTokensForTokens( - rateMinRAY: BigNumberish, - path: string[], - deadline: BigNumberish, - overrides?: CallOverrides - ): Promise; - - swapETHForExactTokens( - arg0: BigNumberish, - arg1: string[], - arg2: string, - arg3: BigNumberish, - overrides?: CallOverrides - ): Promise; - - swapExactETHForTokens( - arg0: BigNumberish, - arg1: string[], - arg2: string, - arg3: BigNumberish, - overrides?: CallOverrides - ): Promise; - - swapExactETHForTokensSupportingFeeOnTransferTokens( - arg0: BigNumberish, - arg1: string[], - arg2: string, - arg3: BigNumberish, - overrides?: CallOverrides - ): Promise; - - swapExactTokensForETH( - arg0: BigNumberish, - arg1: BigNumberish, - arg2: string[], - arg3: string, - arg4: BigNumberish, - overrides?: CallOverrides - ): Promise; - - swapExactTokensForETHSupportingFeeOnTransferTokens( - arg0: BigNumberish, - arg1: BigNumberish, - arg2: string[], - arg3: string, - arg4: BigNumberish, - overrides?: CallOverrides - ): Promise; - - swapExactTokensForTokens( - amountIn: BigNumberish, - amountOutMin: BigNumberish, - path: string[], - arg3: string, - deadline: BigNumberish, - overrides?: CallOverrides - ): Promise; - - swapExactTokensForTokensSupportingFeeOnTransferTokens( - arg0: BigNumberish, - arg1: BigNumberish, - arg2: string[], - arg3: string, - arg4: BigNumberish, - overrides?: CallOverrides - ): Promise; - - swapTokensForExactETH( - arg0: BigNumberish, - arg1: BigNumberish, - arg2: string[], - arg3: string, - arg4: BigNumberish, - overrides?: CallOverrides - ): Promise; - - swapTokensForExactTokens( - amountOut: BigNumberish, - amountInMax: BigNumberish, - path: string[], - arg3: string, - deadline: BigNumberish, - overrides?: CallOverrides - ): Promise; - - targetContract(overrides?: CallOverrides): Promise; - }; - - filters: {}; - - estimateGas: { - WETH(overrides?: CallOverrides): Promise; - - _gearboxAdapterType(overrides?: CallOverrides): Promise; - - _gearboxAdapterVersion(overrides?: CallOverrides): Promise; - - addLiquidity( - arg0: string, - arg1: string, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: BigNumberish, - arg5: BigNumberish, - arg6: string, - arg7: BigNumberish, - overrides?: CallOverrides - ): Promise; - - addLiquidityETH( - arg0: string, - arg1: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: string, - arg5: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - factory(overrides?: CallOverrides): Promise; - - getAmountIn( - amountOut: BigNumberish, - reserveIn: BigNumberish, - reserveOut: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getAmountOut( - amountIn: BigNumberish, - reserveIn: BigNumberish, - reserveOut: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getAmountsIn( - amountOut: BigNumberish, - path: string[], - overrides?: CallOverrides - ): Promise; - - getAmountsOut( - amountIn: BigNumberish, - path: string[], - overrides?: CallOverrides - ): Promise; - - quote( - amountA: BigNumberish, - reserveA: BigNumberish, - reserveB: BigNumberish, - overrides?: CallOverrides - ): Promise; - - removeLiquidity( - arg0: string, - arg1: string, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: BigNumberish, - arg5: string, - arg6: BigNumberish, - overrides?: CallOverrides - ): Promise; - - removeLiquidityETH( - arg0: string, - arg1: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: string, - arg5: BigNumberish, - overrides?: CallOverrides - ): Promise; - - removeLiquidityETHSupportingFeeOnTransferTokens( - arg0: string, - arg1: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: string, - arg5: BigNumberish, - overrides?: CallOverrides - ): Promise; - - removeLiquidityETHWithPermit( - arg0: string, - arg1: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: string, - arg5: BigNumberish, - arg6: boolean, - arg7: BigNumberish, - arg8: BytesLike, - arg9: BytesLike, - overrides?: CallOverrides - ): Promise; - - removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( - arg0: string, - arg1: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: string, - arg5: BigNumberish, - arg6: boolean, - arg7: BigNumberish, - arg8: BytesLike, - arg9: BytesLike, - overrides?: CallOverrides - ): Promise; - - removeLiquidityWithPermit( - arg0: string, - arg1: string, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: BigNumberish, - arg5: string, - arg6: BigNumberish, - arg7: boolean, - arg8: BigNumberish, - arg9: BytesLike, - arg10: BytesLike, - overrides?: CallOverrides - ): Promise; - - swapAllTokensForTokens( - rateMinRAY: BigNumberish, - path: string[], - deadline: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - swapETHForExactTokens( - arg0: BigNumberish, - arg1: string[], - arg2: string, - arg3: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - swapExactETHForTokens( - arg0: BigNumberish, - arg1: string[], - arg2: string, - arg3: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - swapExactETHForTokensSupportingFeeOnTransferTokens( - arg0: BigNumberish, - arg1: string[], - arg2: string, - arg3: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - swapExactTokensForETH( - arg0: BigNumberish, - arg1: BigNumberish, - arg2: string[], - arg3: string, - arg4: BigNumberish, - overrides?: CallOverrides - ): Promise; - - swapExactTokensForETHSupportingFeeOnTransferTokens( - arg0: BigNumberish, - arg1: BigNumberish, - arg2: string[], - arg3: string, - arg4: BigNumberish, - overrides?: CallOverrides - ): Promise; - - swapExactTokensForTokens( - amountIn: BigNumberish, - amountOutMin: BigNumberish, - path: string[], - arg3: string, - deadline: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - swapExactTokensForTokensSupportingFeeOnTransferTokens( - arg0: BigNumberish, - arg1: BigNumberish, - arg2: string[], - arg3: string, - arg4: BigNumberish, - overrides?: CallOverrides - ): Promise; - - swapTokensForExactETH( - arg0: BigNumberish, - arg1: BigNumberish, - arg2: string[], - arg3: string, - arg4: BigNumberish, - overrides?: CallOverrides - ): Promise; - - swapTokensForExactTokens( - amountOut: BigNumberish, - amountInMax: BigNumberish, - path: string[], - arg3: string, - deadline: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - targetContract(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - WETH(overrides?: CallOverrides): Promise; - - _gearboxAdapterType( - overrides?: CallOverrides - ): Promise; - - _gearboxAdapterVersion( - overrides?: CallOverrides - ): Promise; - - addLiquidity( - arg0: string, - arg1: string, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: BigNumberish, - arg5: BigNumberish, - arg6: string, - arg7: BigNumberish, - overrides?: CallOverrides - ): Promise; - - addLiquidityETH( - arg0: string, - arg1: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: string, - arg5: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - factory(overrides?: CallOverrides): Promise; - - getAmountIn( - amountOut: BigNumberish, - reserveIn: BigNumberish, - reserveOut: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getAmountOut( - amountIn: BigNumberish, - reserveIn: BigNumberish, - reserveOut: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getAmountsIn( - amountOut: BigNumberish, - path: string[], - overrides?: CallOverrides - ): Promise; - - getAmountsOut( - amountIn: BigNumberish, - path: string[], - overrides?: CallOverrides - ): Promise; - - quote( - amountA: BigNumberish, - reserveA: BigNumberish, - reserveB: BigNumberish, - overrides?: CallOverrides - ): Promise; - - removeLiquidity( - arg0: string, - arg1: string, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: BigNumberish, - arg5: string, - arg6: BigNumberish, - overrides?: CallOverrides - ): Promise; - - removeLiquidityETH( - arg0: string, - arg1: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: string, - arg5: BigNumberish, - overrides?: CallOverrides - ): Promise; - - removeLiquidityETHSupportingFeeOnTransferTokens( - arg0: string, - arg1: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: string, - arg5: BigNumberish, - overrides?: CallOverrides - ): Promise; - - removeLiquidityETHWithPermit( - arg0: string, - arg1: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: string, - arg5: BigNumberish, - arg6: boolean, - arg7: BigNumberish, - arg8: BytesLike, - arg9: BytesLike, - overrides?: CallOverrides - ): Promise; - - removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( - arg0: string, - arg1: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: string, - arg5: BigNumberish, - arg6: boolean, - arg7: BigNumberish, - arg8: BytesLike, - arg9: BytesLike, - overrides?: CallOverrides - ): Promise; - - removeLiquidityWithPermit( - arg0: string, - arg1: string, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: BigNumberish, - arg5: string, - arg6: BigNumberish, - arg7: boolean, - arg8: BigNumberish, - arg9: BytesLike, - arg10: BytesLike, - overrides?: CallOverrides - ): Promise; - - swapAllTokensForTokens( - rateMinRAY: BigNumberish, - path: string[], - deadline: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - swapETHForExactTokens( - arg0: BigNumberish, - arg1: string[], - arg2: string, - arg3: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - swapExactETHForTokens( - arg0: BigNumberish, - arg1: string[], - arg2: string, - arg3: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - swapExactETHForTokensSupportingFeeOnTransferTokens( - arg0: BigNumberish, - arg1: string[], - arg2: string, - arg3: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - swapExactTokensForETH( - arg0: BigNumberish, - arg1: BigNumberish, - arg2: string[], - arg3: string, - arg4: BigNumberish, - overrides?: CallOverrides - ): Promise; - - swapExactTokensForETHSupportingFeeOnTransferTokens( - arg0: BigNumberish, - arg1: BigNumberish, - arg2: string[], - arg3: string, - arg4: BigNumberish, - overrides?: CallOverrides - ): Promise; - - swapExactTokensForTokens( - amountIn: BigNumberish, - amountOutMin: BigNumberish, - path: string[], - arg3: string, - deadline: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - swapExactTokensForTokensSupportingFeeOnTransferTokens( - arg0: BigNumberish, - arg1: BigNumberish, - arg2: string[], - arg3: string, - arg4: BigNumberish, - overrides?: CallOverrides - ): Promise; - - swapTokensForExactETH( - arg0: BigNumberish, - arg1: BigNumberish, - arg2: string[], - arg3: string, - arg4: BigNumberish, - overrides?: CallOverrides - ): Promise; - - swapTokensForExactTokens( - amountOut: BigNumberish, - amountInMax: BigNumberish, - path: string[], - arg3: string, - deadline: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - targetContract(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/adapters/uniswap/UniswapV2.sol/index.ts b/src/types/contracts/adapters/uniswap/UniswapV2.sol/index.ts deleted file mode 100644 index 75bd1e9b..00000000 --- a/src/types/contracts/adapters/uniswap/UniswapV2.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { UniswapV2Adapter } from "./UniswapV2Adapter"; diff --git a/src/types/contracts/adapters/uniswap/UniswapV3.sol/UniswapV3Adapter.ts b/src/types/contracts/adapters/uniswap/UniswapV3.sol/UniswapV3Adapter.ts deleted file mode 100644 index 4fd91f52..00000000 --- a/src/types/contracts/adapters/uniswap/UniswapV3.sol/UniswapV3Adapter.ts +++ /dev/null @@ -1,532 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PayableOverrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export declare namespace IUniswapV3Adapter { - export type ExactAllInputParamsStruct = { - path: BytesLike; - deadline: BigNumberish; - rateMinRAY: BigNumberish; - }; - - export type ExactAllInputParamsStructOutput = [ - string, - BigNumber, - BigNumber - ] & { path: string; deadline: BigNumber; rateMinRAY: BigNumber }; - - export type ExactAllInputSingleParamsStruct = { - tokenIn: string; - tokenOut: string; - fee: BigNumberish; - deadline: BigNumberish; - rateMinRAY: BigNumberish; - sqrtPriceLimitX96: BigNumberish; - }; - - export type ExactAllInputSingleParamsStructOutput = [ - string, - string, - number, - BigNumber, - BigNumber, - BigNumber - ] & { - tokenIn: string; - tokenOut: string; - fee: number; - deadline: BigNumber; - rateMinRAY: BigNumber; - sqrtPriceLimitX96: BigNumber; - }; -} - -export declare namespace ISwapRouter { - export type ExactInputParamsStruct = { - path: BytesLike; - recipient: string; - deadline: BigNumberish; - amountIn: BigNumberish; - amountOutMinimum: BigNumberish; - }; - - export type ExactInputParamsStructOutput = [ - string, - string, - BigNumber, - BigNumber, - BigNumber - ] & { - path: string; - recipient: string; - deadline: BigNumber; - amountIn: BigNumber; - amountOutMinimum: BigNumber; - }; - - export type ExactInputSingleParamsStruct = { - tokenIn: string; - tokenOut: string; - fee: BigNumberish; - recipient: string; - deadline: BigNumberish; - amountIn: BigNumberish; - amountOutMinimum: BigNumberish; - sqrtPriceLimitX96: BigNumberish; - }; - - export type ExactInputSingleParamsStructOutput = [ - string, - string, - number, - string, - BigNumber, - BigNumber, - BigNumber, - BigNumber - ] & { - tokenIn: string; - tokenOut: string; - fee: number; - recipient: string; - deadline: BigNumber; - amountIn: BigNumber; - amountOutMinimum: BigNumber; - sqrtPriceLimitX96: BigNumber; - }; - - export type ExactOutputParamsStruct = { - path: BytesLike; - recipient: string; - deadline: BigNumberish; - amountOut: BigNumberish; - amountInMaximum: BigNumberish; - }; - - export type ExactOutputParamsStructOutput = [ - string, - string, - BigNumber, - BigNumber, - BigNumber - ] & { - path: string; - recipient: string; - deadline: BigNumber; - amountOut: BigNumber; - amountInMaximum: BigNumber; - }; - - export type ExactOutputSingleParamsStruct = { - tokenIn: string; - tokenOut: string; - fee: BigNumberish; - recipient: string; - deadline: BigNumberish; - amountOut: BigNumberish; - amountInMaximum: BigNumberish; - sqrtPriceLimitX96: BigNumberish; - }; - - export type ExactOutputSingleParamsStructOutput = [ - string, - string, - number, - string, - BigNumber, - BigNumber, - BigNumber, - BigNumber - ] & { - tokenIn: string; - tokenOut: string; - fee: number; - recipient: string; - deadline: BigNumber; - amountOut: BigNumber; - amountInMaximum: BigNumber; - sqrtPriceLimitX96: BigNumber; - }; -} - -export interface UniswapV3AdapterInterface extends utils.Interface { - functions: { - "_gearboxAdapterType()": FunctionFragment; - "_gearboxAdapterVersion()": FunctionFragment; - "creditFacade()": FunctionFragment; - "creditManager()": FunctionFragment; - "exactAllInput((bytes,uint256,uint256))": FunctionFragment; - "exactAllInputSingle((address,address,uint24,uint256,uint256,uint160))": FunctionFragment; - "exactInput((bytes,address,uint256,uint256,uint256))": FunctionFragment; - "exactInputSingle((address,address,uint24,address,uint256,uint256,uint256,uint160))": FunctionFragment; - "exactOutput((bytes,address,uint256,uint256,uint256))": FunctionFragment; - "exactOutputSingle((address,address,uint24,address,uint256,uint256,uint256,uint160))": FunctionFragment; - "targetContract()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "_gearboxAdapterType" - | "_gearboxAdapterVersion" - | "creditFacade" - | "creditManager" - | "exactAllInput" - | "exactAllInputSingle" - | "exactInput" - | "exactInputSingle" - | "exactOutput" - | "exactOutputSingle" - | "targetContract" - ): FunctionFragment; - - encodeFunctionData( - functionFragment: "_gearboxAdapterType", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "_gearboxAdapterVersion", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditFacade", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditManager", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "exactAllInput", - values: [IUniswapV3Adapter.ExactAllInputParamsStruct] - ): string; - encodeFunctionData( - functionFragment: "exactAllInputSingle", - values: [IUniswapV3Adapter.ExactAllInputSingleParamsStruct] - ): string; - encodeFunctionData( - functionFragment: "exactInput", - values: [ISwapRouter.ExactInputParamsStruct] - ): string; - encodeFunctionData( - functionFragment: "exactInputSingle", - values: [ISwapRouter.ExactInputSingleParamsStruct] - ): string; - encodeFunctionData( - functionFragment: "exactOutput", - values: [ISwapRouter.ExactOutputParamsStruct] - ): string; - encodeFunctionData( - functionFragment: "exactOutputSingle", - values: [ISwapRouter.ExactOutputSingleParamsStruct] - ): string; - encodeFunctionData( - functionFragment: "targetContract", - values?: undefined - ): string; - - decodeFunctionResult( - functionFragment: "_gearboxAdapterType", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "_gearboxAdapterVersion", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditFacade", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditManager", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "exactAllInput", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "exactAllInputSingle", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "exactInput", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "exactInputSingle", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "exactOutput", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "exactOutputSingle", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "targetContract", - data: BytesLike - ): Result; - - events: {}; -} - -export interface UniswapV3Adapter extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: UniswapV3AdapterInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - _gearboxAdapterType(overrides?: CallOverrides): Promise<[number]>; - - _gearboxAdapterVersion(overrides?: CallOverrides): Promise<[number]>; - - creditFacade(overrides?: CallOverrides): Promise<[string]>; - - creditManager(overrides?: CallOverrides): Promise<[string]>; - - exactAllInput( - params: IUniswapV3Adapter.ExactAllInputParamsStruct, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exactAllInputSingle( - params: IUniswapV3Adapter.ExactAllInputSingleParamsStruct, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exactInput( - params: ISwapRouter.ExactInputParamsStruct, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - exactInputSingle( - params: ISwapRouter.ExactInputSingleParamsStruct, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - exactOutput( - params: ISwapRouter.ExactOutputParamsStruct, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - exactOutputSingle( - params: ISwapRouter.ExactOutputSingleParamsStruct, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - targetContract(overrides?: CallOverrides): Promise<[string]>; - }; - - _gearboxAdapterType(overrides?: CallOverrides): Promise; - - _gearboxAdapterVersion(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - exactAllInput( - params: IUniswapV3Adapter.ExactAllInputParamsStruct, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exactAllInputSingle( - params: IUniswapV3Adapter.ExactAllInputSingleParamsStruct, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exactInput( - params: ISwapRouter.ExactInputParamsStruct, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - exactInputSingle( - params: ISwapRouter.ExactInputSingleParamsStruct, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - exactOutput( - params: ISwapRouter.ExactOutputParamsStruct, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - exactOutputSingle( - params: ISwapRouter.ExactOutputSingleParamsStruct, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - targetContract(overrides?: CallOverrides): Promise; - - callStatic: { - _gearboxAdapterType(overrides?: CallOverrides): Promise; - - _gearboxAdapterVersion(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - exactAllInput( - params: IUniswapV3Adapter.ExactAllInputParamsStruct, - overrides?: CallOverrides - ): Promise; - - exactAllInputSingle( - params: IUniswapV3Adapter.ExactAllInputSingleParamsStruct, - overrides?: CallOverrides - ): Promise; - - exactInput( - params: ISwapRouter.ExactInputParamsStruct, - overrides?: CallOverrides - ): Promise; - - exactInputSingle( - params: ISwapRouter.ExactInputSingleParamsStruct, - overrides?: CallOverrides - ): Promise; - - exactOutput( - params: ISwapRouter.ExactOutputParamsStruct, - overrides?: CallOverrides - ): Promise; - - exactOutputSingle( - params: ISwapRouter.ExactOutputSingleParamsStruct, - overrides?: CallOverrides - ): Promise; - - targetContract(overrides?: CallOverrides): Promise; - }; - - filters: {}; - - estimateGas: { - _gearboxAdapterType(overrides?: CallOverrides): Promise; - - _gearboxAdapterVersion(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - exactAllInput( - params: IUniswapV3Adapter.ExactAllInputParamsStruct, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exactAllInputSingle( - params: IUniswapV3Adapter.ExactAllInputSingleParamsStruct, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exactInput( - params: ISwapRouter.ExactInputParamsStruct, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - exactInputSingle( - params: ISwapRouter.ExactInputSingleParamsStruct, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - exactOutput( - params: ISwapRouter.ExactOutputParamsStruct, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - exactOutputSingle( - params: ISwapRouter.ExactOutputSingleParamsStruct, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - targetContract(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - _gearboxAdapterType( - overrides?: CallOverrides - ): Promise; - - _gearboxAdapterVersion( - overrides?: CallOverrides - ): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - exactAllInput( - params: IUniswapV3Adapter.ExactAllInputParamsStruct, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exactAllInputSingle( - params: IUniswapV3Adapter.ExactAllInputSingleParamsStruct, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exactInput( - params: ISwapRouter.ExactInputParamsStruct, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - exactInputSingle( - params: ISwapRouter.ExactInputSingleParamsStruct, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - exactOutput( - params: ISwapRouter.ExactOutputParamsStruct, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - exactOutputSingle( - params: ISwapRouter.ExactOutputSingleParamsStruct, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - targetContract(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/adapters/uniswap/UniswapV3.sol/index.ts b/src/types/contracts/adapters/uniswap/UniswapV3.sol/index.ts deleted file mode 100644 index fe9dca94..00000000 --- a/src/types/contracts/adapters/uniswap/UniswapV3.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { UniswapV3Adapter } from "./UniswapV3Adapter"; diff --git a/src/types/contracts/adapters/uniswap/index.ts b/src/types/contracts/adapters/uniswap/index.ts deleted file mode 100644 index 73e0990e..00000000 --- a/src/types/contracts/adapters/uniswap/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type * as uniswapV2Sol from "./UniswapV2.sol"; -export type { uniswapV2Sol }; -import type * as uniswapV3Sol from "./UniswapV3.sol"; -export type { uniswapV3Sol }; diff --git a/src/types/contracts/adapters/yearn/YearnV2.sol/YearnV2Adapter.ts b/src/types/contracts/adapters/yearn/YearnV2.sol/YearnV2Adapter.ts deleted file mode 100644 index 093d36b5..00000000 --- a/src/types/contracts/adapters/yearn/YearnV2.sol/YearnV2Adapter.ts +++ /dev/null @@ -1,744 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface YearnV2AdapterInterface extends utils.Interface { - functions: { - "_gearboxAdapterType()": FunctionFragment; - "_gearboxAdapterVersion()": FunctionFragment; - "allowance(address,address)": FunctionFragment; - "approve(address,uint256)": FunctionFragment; - "balanceOf(address)": FunctionFragment; - "creditFacade()": FunctionFragment; - "creditManager()": FunctionFragment; - "decimals()": FunctionFragment; - "deposit(uint256,address)": FunctionFragment; - "deposit(uint256)": FunctionFragment; - "deposit()": FunctionFragment; - "name()": FunctionFragment; - "pricePerShare()": FunctionFragment; - "symbol()": FunctionFragment; - "targetContract()": FunctionFragment; - "token()": FunctionFragment; - "totalSupply()": FunctionFragment; - "transfer(address,uint256)": FunctionFragment; - "transferFrom(address,address,uint256)": FunctionFragment; - "withdraw(uint256,address)": FunctionFragment; - "withdraw(uint256)": FunctionFragment; - "withdraw()": FunctionFragment; - "withdraw(uint256,address,uint256)": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "_gearboxAdapterType" - | "_gearboxAdapterVersion" - | "allowance" - | "approve" - | "balanceOf" - | "creditFacade" - | "creditManager" - | "decimals" - | "deposit(uint256,address)" - | "deposit(uint256)" - | "deposit()" - | "name" - | "pricePerShare" - | "symbol" - | "targetContract" - | "token" - | "totalSupply" - | "transfer" - | "transferFrom" - | "withdraw(uint256,address)" - | "withdraw(uint256)" - | "withdraw()" - | "withdraw(uint256,address,uint256)" - ): FunctionFragment; - - encodeFunctionData( - functionFragment: "_gearboxAdapterType", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "_gearboxAdapterVersion", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "allowance", - values: [string, string] - ): string; - encodeFunctionData( - functionFragment: "approve", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "balanceOf", values: [string]): string; - encodeFunctionData( - functionFragment: "creditFacade", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditManager", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "decimals", values?: undefined): string; - encodeFunctionData( - functionFragment: "deposit(uint256,address)", - values: [BigNumberish, string] - ): string; - encodeFunctionData( - functionFragment: "deposit(uint256)", - values: [BigNumberish] - ): string; - encodeFunctionData(functionFragment: "deposit()", values?: undefined): string; - encodeFunctionData(functionFragment: "name", values?: undefined): string; - encodeFunctionData( - functionFragment: "pricePerShare", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "symbol", values?: undefined): string; - encodeFunctionData( - functionFragment: "targetContract", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "token", values?: undefined): string; - encodeFunctionData( - functionFragment: "totalSupply", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "transfer", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "transferFrom", - values: [string, string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "withdraw(uint256,address)", - values: [BigNumberish, string] - ): string; - encodeFunctionData( - functionFragment: "withdraw(uint256)", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "withdraw()", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "withdraw(uint256,address,uint256)", - values: [BigNumberish, string, BigNumberish] - ): string; - - decodeFunctionResult( - functionFragment: "_gearboxAdapterType", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "_gearboxAdapterVersion", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "creditFacade", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditManager", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "deposit(uint256,address)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "deposit(uint256)", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "deposit()", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "pricePerShare", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "targetContract", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "token", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "totalSupply", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "transfer", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "transferFrom", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "withdraw(uint256,address)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "withdraw(uint256)", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "withdraw()", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "withdraw(uint256,address,uint256)", - data: BytesLike - ): Result; - - events: { - "Approval(address,address,uint256)": EventFragment; - "Transfer(address,address,uint256)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "Approval"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment; -} - -export interface ApprovalEventObject { - owner: string; - spender: string; - value: BigNumber; -} -export type ApprovalEvent = TypedEvent< - [string, string, BigNumber], - ApprovalEventObject ->; - -export type ApprovalEventFilter = TypedEventFilter; - -export interface TransferEventObject { - from: string; - to: string; - value: BigNumber; -} -export type TransferEvent = TypedEvent< - [string, string, BigNumber], - TransferEventObject ->; - -export type TransferEventFilter = TypedEventFilter; - -export interface YearnV2Adapter extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: YearnV2AdapterInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - _gearboxAdapterType(overrides?: CallOverrides): Promise<[number]>; - - _gearboxAdapterVersion(overrides?: CallOverrides): Promise<[number]>; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - approve( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise<[boolean]>; - - balanceOf(account: string, overrides?: CallOverrides): Promise<[BigNumber]>; - - creditFacade(overrides?: CallOverrides): Promise<[string]>; - - creditManager(overrides?: CallOverrides): Promise<[string]>; - - decimals(overrides?: CallOverrides): Promise<[number]>; - - "deposit(uint256,address)"( - amount: BigNumberish, - arg1: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "deposit(uint256)"( - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "deposit()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise<[string]>; - - pricePerShare(overrides?: CallOverrides): Promise<[BigNumber]>; - - symbol(overrides?: CallOverrides): Promise<[string]>; - - targetContract(overrides?: CallOverrides): Promise<[string]>; - - token(overrides?: CallOverrides): Promise<[string]>; - - totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>; - - transfer( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise<[boolean]>; - - transferFrom( - arg0: string, - arg1: string, - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "withdraw(uint256,address)"( - maxShares: BigNumberish, - arg1: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "withdraw(uint256)"( - maxShares: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "withdraw()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "withdraw(uint256,address,uint256)"( - maxShares: BigNumberish, - arg1: string, - maxLoss: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - _gearboxAdapterType(overrides?: CallOverrides): Promise; - - _gearboxAdapterVersion(overrides?: CallOverrides): Promise; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - "deposit(uint256,address)"( - amount: BigNumberish, - arg1: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "deposit(uint256)"( - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "deposit()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - pricePerShare(overrides?: CallOverrides): Promise; - - symbol(overrides?: CallOverrides): Promise; - - targetContract(overrides?: CallOverrides): Promise; - - token(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - transfer( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transferFrom( - arg0: string, - arg1: string, - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "withdraw(uint256,address)"( - maxShares: BigNumberish, - arg1: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "withdraw(uint256)"( - maxShares: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "withdraw()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "withdraw(uint256,address,uint256)"( - maxShares: BigNumberish, - arg1: string, - maxLoss: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - _gearboxAdapterType(overrides?: CallOverrides): Promise; - - _gearboxAdapterVersion(overrides?: CallOverrides): Promise; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - "deposit(uint256,address)"( - amount: BigNumberish, - arg1: string, - overrides?: CallOverrides - ): Promise; - - "deposit(uint256)"( - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "deposit()"(overrides?: CallOverrides): Promise; - - name(overrides?: CallOverrides): Promise; - - pricePerShare(overrides?: CallOverrides): Promise; - - symbol(overrides?: CallOverrides): Promise; - - targetContract(overrides?: CallOverrides): Promise; - - token(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - transfer( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transferFrom( - arg0: string, - arg1: string, - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "withdraw(uint256,address)"( - maxShares: BigNumberish, - arg1: string, - overrides?: CallOverrides - ): Promise; - - "withdraw(uint256)"( - maxShares: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "withdraw()"(overrides?: CallOverrides): Promise; - - "withdraw(uint256,address,uint256)"( - maxShares: BigNumberish, - arg1: string, - maxLoss: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - "Approval(address,address,uint256)"( - owner?: string | null, - spender?: string | null, - value?: null - ): ApprovalEventFilter; - Approval( - owner?: string | null, - spender?: string | null, - value?: null - ): ApprovalEventFilter; - - "Transfer(address,address,uint256)"( - from?: string | null, - to?: string | null, - value?: null - ): TransferEventFilter; - Transfer( - from?: string | null, - to?: string | null, - value?: null - ): TransferEventFilter; - }; - - estimateGas: { - _gearboxAdapterType(overrides?: CallOverrides): Promise; - - _gearboxAdapterVersion(overrides?: CallOverrides): Promise; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - "deposit(uint256,address)"( - amount: BigNumberish, - arg1: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "deposit(uint256)"( - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "deposit()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - pricePerShare(overrides?: CallOverrides): Promise; - - symbol(overrides?: CallOverrides): Promise; - - targetContract(overrides?: CallOverrides): Promise; - - token(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - transfer( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transferFrom( - arg0: string, - arg1: string, - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "withdraw(uint256,address)"( - maxShares: BigNumberish, - arg1: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "withdraw(uint256)"( - maxShares: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "withdraw()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "withdraw(uint256,address,uint256)"( - maxShares: BigNumberish, - arg1: string, - maxLoss: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - _gearboxAdapterType( - overrides?: CallOverrides - ): Promise; - - _gearboxAdapterVersion( - overrides?: CallOverrides - ): Promise; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - balanceOf( - account: string, - overrides?: CallOverrides - ): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - "deposit(uint256,address)"( - amount: BigNumberish, - arg1: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "deposit(uint256)"( - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "deposit()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - pricePerShare(overrides?: CallOverrides): Promise; - - symbol(overrides?: CallOverrides): Promise; - - targetContract(overrides?: CallOverrides): Promise; - - token(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - transfer( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transferFrom( - arg0: string, - arg1: string, - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "withdraw(uint256,address)"( - maxShares: BigNumberish, - arg1: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "withdraw(uint256)"( - maxShares: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "withdraw()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "withdraw(uint256,address,uint256)"( - maxShares: BigNumberish, - arg1: string, - maxLoss: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/src/types/contracts/adapters/yearn/YearnV2.sol/index.ts b/src/types/contracts/adapters/yearn/YearnV2.sol/index.ts deleted file mode 100644 index 62256111..00000000 --- a/src/types/contracts/adapters/yearn/YearnV2.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { YearnV2Adapter } from "./YearnV2Adapter"; diff --git a/src/types/contracts/adapters/yearn/index.ts b/src/types/contracts/adapters/yearn/index.ts deleted file mode 100644 index 1f5c3f39..00000000 --- a/src/types/contracts/adapters/yearn/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type * as yearnV2Sol from "./YearnV2.sol"; -export type { yearnV2Sol }; diff --git a/src/types/contracts/core/ACL.ts b/src/types/contracts/core/ACL.ts deleted file mode 100644 index 11512024..00000000 --- a/src/types/contracts/core/ACL.ts +++ /dev/null @@ -1,564 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../common"; - -export interface ACLInterface extends utils.Interface { - functions: { - "addPausableAdmin(address)": FunctionFragment; - "addUnpausableAdmin(address)": FunctionFragment; - "isConfigurator(address)": FunctionFragment; - "isPausableAdmin(address)": FunctionFragment; - "isUnpausableAdmin(address)": FunctionFragment; - "owner()": FunctionFragment; - "pausableAdminSet(address)": FunctionFragment; - "removePausableAdmin(address)": FunctionFragment; - "removeUnpausableAdmin(address)": FunctionFragment; - "renounceOwnership()": FunctionFragment; - "transferOwnership(address)": FunctionFragment; - "unpausableAdminSet(address)": FunctionFragment; - "version()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "addPausableAdmin" - | "addUnpausableAdmin" - | "isConfigurator" - | "isPausableAdmin" - | "isUnpausableAdmin" - | "owner" - | "pausableAdminSet" - | "removePausableAdmin" - | "removeUnpausableAdmin" - | "renounceOwnership" - | "transferOwnership" - | "unpausableAdminSet" - | "version" - ): FunctionFragment; - - encodeFunctionData( - functionFragment: "addPausableAdmin", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "addUnpausableAdmin", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "isConfigurator", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "isPausableAdmin", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "isUnpausableAdmin", - values: [string] - ): string; - encodeFunctionData(functionFragment: "owner", values?: undefined): string; - encodeFunctionData( - functionFragment: "pausableAdminSet", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "removePausableAdmin", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "removeUnpausableAdmin", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "renounceOwnership", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "transferOwnership", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "unpausableAdminSet", - values: [string] - ): string; - encodeFunctionData(functionFragment: "version", values?: undefined): string; - - decodeFunctionResult( - functionFragment: "addPausableAdmin", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "addUnpausableAdmin", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "isConfigurator", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "isPausableAdmin", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "isUnpausableAdmin", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "pausableAdminSet", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "removePausableAdmin", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "removeUnpausableAdmin", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "renounceOwnership", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "transferOwnership", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "unpausableAdminSet", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "version", data: BytesLike): Result; - - events: { - "OwnershipTransferred(address,address)": EventFragment; - "PausableAdminAdded(address)": EventFragment; - "PausableAdminRemoved(address)": EventFragment; - "UnpausableAdminAdded(address)": EventFragment; - "UnpausableAdminRemoved(address)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment; - getEvent(nameOrSignatureOrTopic: "PausableAdminAdded"): EventFragment; - getEvent(nameOrSignatureOrTopic: "PausableAdminRemoved"): EventFragment; - getEvent(nameOrSignatureOrTopic: "UnpausableAdminAdded"): EventFragment; - getEvent(nameOrSignatureOrTopic: "UnpausableAdminRemoved"): EventFragment; -} - -export interface OwnershipTransferredEventObject { - previousOwner: string; - newOwner: string; -} -export type OwnershipTransferredEvent = TypedEvent< - [string, string], - OwnershipTransferredEventObject ->; - -export type OwnershipTransferredEventFilter = - TypedEventFilter; - -export interface PausableAdminAddedEventObject { - newAdmin: string; -} -export type PausableAdminAddedEvent = TypedEvent< - [string], - PausableAdminAddedEventObject ->; - -export type PausableAdminAddedEventFilter = - TypedEventFilter; - -export interface PausableAdminRemovedEventObject { - admin: string; -} -export type PausableAdminRemovedEvent = TypedEvent< - [string], - PausableAdminRemovedEventObject ->; - -export type PausableAdminRemovedEventFilter = - TypedEventFilter; - -export interface UnpausableAdminAddedEventObject { - newAdmin: string; -} -export type UnpausableAdminAddedEvent = TypedEvent< - [string], - UnpausableAdminAddedEventObject ->; - -export type UnpausableAdminAddedEventFilter = - TypedEventFilter; - -export interface UnpausableAdminRemovedEventObject { - admin: string; -} -export type UnpausableAdminRemovedEvent = TypedEvent< - [string], - UnpausableAdminRemovedEventObject ->; - -export type UnpausableAdminRemovedEventFilter = - TypedEventFilter; - -export interface ACL extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: ACLInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - addPausableAdmin( - newAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - addUnpausableAdmin( - newAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - isConfigurator( - account: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - isPausableAdmin( - addr: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - isUnpausableAdmin( - addr: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - owner(overrides?: CallOverrides): Promise<[string]>; - - pausableAdminSet( - arg0: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - removePausableAdmin( - admin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - removeUnpausableAdmin( - admin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - unpausableAdminSet( - arg0: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - version(overrides?: CallOverrides): Promise<[BigNumber]>; - }; - - addPausableAdmin( - newAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - addUnpausableAdmin( - newAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - isConfigurator(account: string, overrides?: CallOverrides): Promise; - - isPausableAdmin(addr: string, overrides?: CallOverrides): Promise; - - isUnpausableAdmin(addr: string, overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - pausableAdminSet(arg0: string, overrides?: CallOverrides): Promise; - - removePausableAdmin( - admin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - removeUnpausableAdmin( - admin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - unpausableAdminSet(arg0: string, overrides?: CallOverrides): Promise; - - version(overrides?: CallOverrides): Promise; - - callStatic: { - addPausableAdmin( - newAdmin: string, - overrides?: CallOverrides - ): Promise; - - addUnpausableAdmin( - newAdmin: string, - overrides?: CallOverrides - ): Promise; - - isConfigurator( - account: string, - overrides?: CallOverrides - ): Promise; - - isPausableAdmin(addr: string, overrides?: CallOverrides): Promise; - - isUnpausableAdmin( - addr: string, - overrides?: CallOverrides - ): Promise; - - owner(overrides?: CallOverrides): Promise; - - pausableAdminSet(arg0: string, overrides?: CallOverrides): Promise; - - removePausableAdmin( - admin: string, - overrides?: CallOverrides - ): Promise; - - removeUnpausableAdmin( - admin: string, - overrides?: CallOverrides - ): Promise; - - renounceOwnership(overrides?: CallOverrides): Promise; - - transferOwnership( - newOwner: string, - overrides?: CallOverrides - ): Promise; - - unpausableAdminSet( - arg0: string, - overrides?: CallOverrides - ): Promise; - - version(overrides?: CallOverrides): Promise; - }; - - filters: { - "OwnershipTransferred(address,address)"( - previousOwner?: string | null, - newOwner?: string | null - ): OwnershipTransferredEventFilter; - OwnershipTransferred( - previousOwner?: string | null, - newOwner?: string | null - ): OwnershipTransferredEventFilter; - - "PausableAdminAdded(address)"( - newAdmin?: string | null - ): PausableAdminAddedEventFilter; - PausableAdminAdded(newAdmin?: string | null): PausableAdminAddedEventFilter; - - "PausableAdminRemoved(address)"( - admin?: string | null - ): PausableAdminRemovedEventFilter; - PausableAdminRemoved( - admin?: string | null - ): PausableAdminRemovedEventFilter; - - "UnpausableAdminAdded(address)"( - newAdmin?: string | null - ): UnpausableAdminAddedEventFilter; - UnpausableAdminAdded( - newAdmin?: string | null - ): UnpausableAdminAddedEventFilter; - - "UnpausableAdminRemoved(address)"( - admin?: string | null - ): UnpausableAdminRemovedEventFilter; - UnpausableAdminRemoved( - admin?: string | null - ): UnpausableAdminRemovedEventFilter; - }; - - estimateGas: { - addPausableAdmin( - newAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - addUnpausableAdmin( - newAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - isConfigurator( - account: string, - overrides?: CallOverrides - ): Promise; - - isPausableAdmin( - addr: string, - overrides?: CallOverrides - ): Promise; - - isUnpausableAdmin( - addr: string, - overrides?: CallOverrides - ): Promise; - - owner(overrides?: CallOverrides): Promise; - - pausableAdminSet( - arg0: string, - overrides?: CallOverrides - ): Promise; - - removePausableAdmin( - admin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - removeUnpausableAdmin( - admin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - unpausableAdminSet( - arg0: string, - overrides?: CallOverrides - ): Promise; - - version(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - addPausableAdmin( - newAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - addUnpausableAdmin( - newAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - isConfigurator( - account: string, - overrides?: CallOverrides - ): Promise; - - isPausableAdmin( - addr: string, - overrides?: CallOverrides - ): Promise; - - isUnpausableAdmin( - addr: string, - overrides?: CallOverrides - ): Promise; - - owner(overrides?: CallOverrides): Promise; - - pausableAdminSet( - arg0: string, - overrides?: CallOverrides - ): Promise; - - removePausableAdmin( - admin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - removeUnpausableAdmin( - admin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - unpausableAdminSet( - arg0: string, - overrides?: CallOverrides - ): Promise; - - version(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/core/ACLTrait.ts b/src/types/contracts/core/ACLTrait.ts deleted file mode 100644 index 0bad5030..00000000 --- a/src/types/contracts/core/ACLTrait.ts +++ /dev/null @@ -1,170 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../common"; - -export interface ACLTraitInterface extends utils.Interface { - functions: { - "_acl()": FunctionFragment; - "pause()": FunctionFragment; - "paused()": FunctionFragment; - "unpause()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: "_acl" | "pause" | "paused" | "unpause" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "_acl", values?: undefined): string; - encodeFunctionData(functionFragment: "pause", values?: undefined): string; - encodeFunctionData(functionFragment: "paused", values?: undefined): string; - encodeFunctionData(functionFragment: "unpause", values?: undefined): string; - - decodeFunctionResult(functionFragment: "_acl", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "pause", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "paused", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "unpause", data: BytesLike): Result; - - events: { - "Paused(address)": EventFragment; - "Unpaused(address)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "Paused"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Unpaused"): EventFragment; -} - -export interface PausedEventObject { - account: string; -} -export type PausedEvent = TypedEvent<[string], PausedEventObject>; - -export type PausedEventFilter = TypedEventFilter; - -export interface UnpausedEventObject { - account: string; -} -export type UnpausedEvent = TypedEvent<[string], UnpausedEventObject>; - -export type UnpausedEventFilter = TypedEventFilter; - -export interface ACLTrait extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: ACLTraitInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - _acl(overrides?: CallOverrides): Promise<[string]>; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise<[boolean]>; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - _acl(overrides?: CallOverrides): Promise; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - _acl(overrides?: CallOverrides): Promise; - - pause(overrides?: CallOverrides): Promise; - - paused(overrides?: CallOverrides): Promise; - - unpause(overrides?: CallOverrides): Promise; - }; - - filters: { - "Paused(address)"(account?: null): PausedEventFilter; - Paused(account?: null): PausedEventFilter; - - "Unpaused(address)"(account?: null): UnpausedEventFilter; - Unpaused(account?: null): UnpausedEventFilter; - }; - - estimateGas: { - _acl(overrides?: CallOverrides): Promise; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - _acl(overrides?: CallOverrides): Promise; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/src/types/contracts/core/AccountFactory.ts b/src/types/contracts/core/AccountFactory.ts deleted file mode 100644 index d77f9f3c..00000000 --- a/src/types/contracts/core/AccountFactory.ts +++ /dev/null @@ -1,680 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../common"; - -export interface AccountFactoryInterface extends utils.Interface { - functions: { - "_acl()": FunctionFragment; - "_contractsRegister()": FunctionFragment; - "addCreditAccount()": FunctionFragment; - "cancelAllowance(address,address,address)": FunctionFragment; - "countCreditAccounts()": FunctionFragment; - "countCreditAccountsInStock()": FunctionFragment; - "creditAccounts(uint256)": FunctionFragment; - "getNext(address)": FunctionFragment; - "head()": FunctionFragment; - "isCreditAccount(address)": FunctionFragment; - "masterCreditAccount()": FunctionFragment; - "pause()": FunctionFragment; - "paused()": FunctionFragment; - "returnCreditAccount(address)": FunctionFragment; - "tail()": FunctionFragment; - "takeCreditAccount(uint256,uint256)": FunctionFragment; - "takeOut(address,address,address)": FunctionFragment; - "unpause()": FunctionFragment; - "version()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "_acl" - | "_contractsRegister" - | "addCreditAccount" - | "cancelAllowance" - | "countCreditAccounts" - | "countCreditAccountsInStock" - | "creditAccounts" - | "getNext" - | "head" - | "isCreditAccount" - | "masterCreditAccount" - | "pause" - | "paused" - | "returnCreditAccount" - | "tail" - | "takeCreditAccount" - | "takeOut" - | "unpause" - | "version" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "_acl", values?: undefined): string; - encodeFunctionData( - functionFragment: "_contractsRegister", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "addCreditAccount", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "cancelAllowance", - values: [string, string, string] - ): string; - encodeFunctionData( - functionFragment: "countCreditAccounts", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "countCreditAccountsInStock", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditAccounts", - values: [BigNumberish] - ): string; - encodeFunctionData(functionFragment: "getNext", values: [string]): string; - encodeFunctionData(functionFragment: "head", values?: undefined): string; - encodeFunctionData( - functionFragment: "isCreditAccount", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "masterCreditAccount", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "pause", values?: undefined): string; - encodeFunctionData(functionFragment: "paused", values?: undefined): string; - encodeFunctionData( - functionFragment: "returnCreditAccount", - values: [string] - ): string; - encodeFunctionData(functionFragment: "tail", values?: undefined): string; - encodeFunctionData( - functionFragment: "takeCreditAccount", - values: [BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "takeOut", - values: [string, string, string] - ): string; - encodeFunctionData(functionFragment: "unpause", values?: undefined): string; - encodeFunctionData(functionFragment: "version", values?: undefined): string; - - decodeFunctionResult(functionFragment: "_acl", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "_contractsRegister", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "addCreditAccount", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "cancelAllowance", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "countCreditAccounts", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "countCreditAccountsInStock", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditAccounts", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "getNext", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "head", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "isCreditAccount", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "masterCreditAccount", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "pause", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "paused", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "returnCreditAccount", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "tail", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "takeCreditAccount", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "takeOut", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "unpause", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "version", data: BytesLike): Result; - - events: { - "AccountMinerChanged(address)": EventFragment; - "InitializeCreditAccount(address,address)": EventFragment; - "NewCreditAccount(address)": EventFragment; - "Paused(address)": EventFragment; - "ReturnCreditAccount(address)": EventFragment; - "TakeForever(address,address)": EventFragment; - "Unpaused(address)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "AccountMinerChanged"): EventFragment; - getEvent(nameOrSignatureOrTopic: "InitializeCreditAccount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "NewCreditAccount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Paused"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ReturnCreditAccount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TakeForever"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Unpaused"): EventFragment; -} - -export interface AccountMinerChangedEventObject { - miner: string; -} -export type AccountMinerChangedEvent = TypedEvent< - [string], - AccountMinerChangedEventObject ->; - -export type AccountMinerChangedEventFilter = - TypedEventFilter; - -export interface InitializeCreditAccountEventObject { - account: string; - creditManager: string; -} -export type InitializeCreditAccountEvent = TypedEvent< - [string, string], - InitializeCreditAccountEventObject ->; - -export type InitializeCreditAccountEventFilter = - TypedEventFilter; - -export interface NewCreditAccountEventObject { - account: string; -} -export type NewCreditAccountEvent = TypedEvent< - [string], - NewCreditAccountEventObject ->; - -export type NewCreditAccountEventFilter = - TypedEventFilter; - -export interface PausedEventObject { - account: string; -} -export type PausedEvent = TypedEvent<[string], PausedEventObject>; - -export type PausedEventFilter = TypedEventFilter; - -export interface ReturnCreditAccountEventObject { - account: string; -} -export type ReturnCreditAccountEvent = TypedEvent< - [string], - ReturnCreditAccountEventObject ->; - -export type ReturnCreditAccountEventFilter = - TypedEventFilter; - -export interface TakeForeverEventObject { - creditAccount: string; - to: string; -} -export type TakeForeverEvent = TypedEvent< - [string, string], - TakeForeverEventObject ->; - -export type TakeForeverEventFilter = TypedEventFilter; - -export interface UnpausedEventObject { - account: string; -} -export type UnpausedEvent = TypedEvent<[string], UnpausedEventObject>; - -export type UnpausedEventFilter = TypedEventFilter; - -export interface AccountFactory extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: AccountFactoryInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - _acl(overrides?: CallOverrides): Promise<[string]>; - - _contractsRegister(overrides?: CallOverrides): Promise<[string]>; - - addCreditAccount( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - cancelAllowance( - account: string, - token: string, - targetContract: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - countCreditAccounts(overrides?: CallOverrides): Promise<[BigNumber]>; - - countCreditAccountsInStock(overrides?: CallOverrides): Promise<[BigNumber]>; - - creditAccounts( - id: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - getNext( - creditAccount: string, - overrides?: CallOverrides - ): Promise<[string]>; - - head(overrides?: CallOverrides): Promise<[string]>; - - isCreditAccount( - addr: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - masterCreditAccount(overrides?: CallOverrides): Promise<[string]>; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise<[boolean]>; - - returnCreditAccount( - usedAccount: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - tail(overrides?: CallOverrides): Promise<[string]>; - - takeCreditAccount( - _borrowedAmount: BigNumberish, - _cumulativeIndexAtOpen: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - takeOut( - prev: string, - creditAccount: string, - to: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise<[BigNumber]>; - }; - - _acl(overrides?: CallOverrides): Promise; - - _contractsRegister(overrides?: CallOverrides): Promise; - - addCreditAccount( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - cancelAllowance( - account: string, - token: string, - targetContract: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - countCreditAccounts(overrides?: CallOverrides): Promise; - - countCreditAccountsInStock(overrides?: CallOverrides): Promise; - - creditAccounts(id: BigNumberish, overrides?: CallOverrides): Promise; - - getNext(creditAccount: string, overrides?: CallOverrides): Promise; - - head(overrides?: CallOverrides): Promise; - - isCreditAccount(addr: string, overrides?: CallOverrides): Promise; - - masterCreditAccount(overrides?: CallOverrides): Promise; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise; - - returnCreditAccount( - usedAccount: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - tail(overrides?: CallOverrides): Promise; - - takeCreditAccount( - _borrowedAmount: BigNumberish, - _cumulativeIndexAtOpen: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - takeOut( - prev: string, - creditAccount: string, - to: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise; - - callStatic: { - _acl(overrides?: CallOverrides): Promise; - - _contractsRegister(overrides?: CallOverrides): Promise; - - addCreditAccount(overrides?: CallOverrides): Promise; - - cancelAllowance( - account: string, - token: string, - targetContract: string, - overrides?: CallOverrides - ): Promise; - - countCreditAccounts(overrides?: CallOverrides): Promise; - - countCreditAccountsInStock(overrides?: CallOverrides): Promise; - - creditAccounts( - id: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getNext(creditAccount: string, overrides?: CallOverrides): Promise; - - head(overrides?: CallOverrides): Promise; - - isCreditAccount(addr: string, overrides?: CallOverrides): Promise; - - masterCreditAccount(overrides?: CallOverrides): Promise; - - pause(overrides?: CallOverrides): Promise; - - paused(overrides?: CallOverrides): Promise; - - returnCreditAccount( - usedAccount: string, - overrides?: CallOverrides - ): Promise; - - tail(overrides?: CallOverrides): Promise; - - takeCreditAccount( - _borrowedAmount: BigNumberish, - _cumulativeIndexAtOpen: BigNumberish, - overrides?: CallOverrides - ): Promise; - - takeOut( - prev: string, - creditAccount: string, - to: string, - overrides?: CallOverrides - ): Promise; - - unpause(overrides?: CallOverrides): Promise; - - version(overrides?: CallOverrides): Promise; - }; - - filters: { - "AccountMinerChanged(address)"( - miner?: string | null - ): AccountMinerChangedEventFilter; - AccountMinerChanged(miner?: string | null): AccountMinerChangedEventFilter; - - "InitializeCreditAccount(address,address)"( - account?: string | null, - creditManager?: string | null - ): InitializeCreditAccountEventFilter; - InitializeCreditAccount( - account?: string | null, - creditManager?: string | null - ): InitializeCreditAccountEventFilter; - - "NewCreditAccount(address)"( - account?: string | null - ): NewCreditAccountEventFilter; - NewCreditAccount(account?: string | null): NewCreditAccountEventFilter; - - "Paused(address)"(account?: null): PausedEventFilter; - Paused(account?: null): PausedEventFilter; - - "ReturnCreditAccount(address)"( - account?: string | null - ): ReturnCreditAccountEventFilter; - ReturnCreditAccount( - account?: string | null - ): ReturnCreditAccountEventFilter; - - "TakeForever(address,address)"( - creditAccount?: string | null, - to?: string | null - ): TakeForeverEventFilter; - TakeForever( - creditAccount?: string | null, - to?: string | null - ): TakeForeverEventFilter; - - "Unpaused(address)"(account?: null): UnpausedEventFilter; - Unpaused(account?: null): UnpausedEventFilter; - }; - - estimateGas: { - _acl(overrides?: CallOverrides): Promise; - - _contractsRegister(overrides?: CallOverrides): Promise; - - addCreditAccount( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - cancelAllowance( - account: string, - token: string, - targetContract: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - countCreditAccounts(overrides?: CallOverrides): Promise; - - countCreditAccountsInStock(overrides?: CallOverrides): Promise; - - creditAccounts( - id: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getNext( - creditAccount: string, - overrides?: CallOverrides - ): Promise; - - head(overrides?: CallOverrides): Promise; - - isCreditAccount( - addr: string, - overrides?: CallOverrides - ): Promise; - - masterCreditAccount(overrides?: CallOverrides): Promise; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise; - - returnCreditAccount( - usedAccount: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - tail(overrides?: CallOverrides): Promise; - - takeCreditAccount( - _borrowedAmount: BigNumberish, - _cumulativeIndexAtOpen: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - takeOut( - prev: string, - creditAccount: string, - to: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - _acl(overrides?: CallOverrides): Promise; - - _contractsRegister( - overrides?: CallOverrides - ): Promise; - - addCreditAccount( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - cancelAllowance( - account: string, - token: string, - targetContract: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - countCreditAccounts( - overrides?: CallOverrides - ): Promise; - - countCreditAccountsInStock( - overrides?: CallOverrides - ): Promise; - - creditAccounts( - id: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getNext( - creditAccount: string, - overrides?: CallOverrides - ): Promise; - - head(overrides?: CallOverrides): Promise; - - isCreditAccount( - addr: string, - overrides?: CallOverrides - ): Promise; - - masterCreditAccount( - overrides?: CallOverrides - ): Promise; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise; - - returnCreditAccount( - usedAccount: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - tail(overrides?: CallOverrides): Promise; - - takeCreditAccount( - _borrowedAmount: BigNumberish, - _cumulativeIndexAtOpen: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - takeOut( - prev: string, - creditAccount: string, - to: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/core/AddressProvider.ts b/src/types/contracts/core/AddressProvider.ts deleted file mode 100644 index 6491f801..00000000 --- a/src/types/contracts/core/AddressProvider.ts +++ /dev/null @@ -1,706 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../common"; - -export interface AddressProviderInterface extends utils.Interface { - functions: { - "addresses(bytes32)": FunctionFragment; - "getACL()": FunctionFragment; - "getAccountFactory()": FunctionFragment; - "getContractsRegister()": FunctionFragment; - "getDataCompressor()": FunctionFragment; - "getGearToken()": FunctionFragment; - "getPriceOracle()": FunctionFragment; - "getTreasuryContract()": FunctionFragment; - "getWETHGateway()": FunctionFragment; - "getWethToken()": FunctionFragment; - "owner()": FunctionFragment; - "renounceOwnership()": FunctionFragment; - "setACL(address)": FunctionFragment; - "setAccountFactory(address)": FunctionFragment; - "setContractsRegister(address)": FunctionFragment; - "setDataCompressor(address)": FunctionFragment; - "setGearToken(address)": FunctionFragment; - "setPriceOracle(address)": FunctionFragment; - "setTreasuryContract(address)": FunctionFragment; - "setWETHGateway(address)": FunctionFragment; - "setWethToken(address)": FunctionFragment; - "transferOwnership(address)": FunctionFragment; - "version()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "addresses" - | "getACL" - | "getAccountFactory" - | "getContractsRegister" - | "getDataCompressor" - | "getGearToken" - | "getPriceOracle" - | "getTreasuryContract" - | "getWETHGateway" - | "getWethToken" - | "owner" - | "renounceOwnership" - | "setACL" - | "setAccountFactory" - | "setContractsRegister" - | "setDataCompressor" - | "setGearToken" - | "setPriceOracle" - | "setTreasuryContract" - | "setWETHGateway" - | "setWethToken" - | "transferOwnership" - | "version" - ): FunctionFragment; - - encodeFunctionData( - functionFragment: "addresses", - values: [BytesLike] - ): string; - encodeFunctionData(functionFragment: "getACL", values?: undefined): string; - encodeFunctionData( - functionFragment: "getAccountFactory", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "getContractsRegister", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "getDataCompressor", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "getGearToken", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "getPriceOracle", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "getTreasuryContract", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "getWETHGateway", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "getWethToken", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "owner", values?: undefined): string; - encodeFunctionData( - functionFragment: "renounceOwnership", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "setACL", values: [string]): string; - encodeFunctionData( - functionFragment: "setAccountFactory", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "setContractsRegister", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "setDataCompressor", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "setGearToken", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "setPriceOracle", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "setTreasuryContract", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "setWETHGateway", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "setWethToken", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "transferOwnership", - values: [string] - ): string; - encodeFunctionData(functionFragment: "version", values?: undefined): string; - - decodeFunctionResult(functionFragment: "addresses", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "getACL", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "getAccountFactory", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getContractsRegister", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getDataCompressor", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getGearToken", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getPriceOracle", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getTreasuryContract", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getWETHGateway", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getWethToken", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "renounceOwnership", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "setACL", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "setAccountFactory", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "setContractsRegister", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "setDataCompressor", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "setGearToken", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "setPriceOracle", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "setTreasuryContract", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "setWETHGateway", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "setWethToken", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "transferOwnership", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "version", data: BytesLike): Result; - - events: { - "AddressSet(bytes32,address)": EventFragment; - "OwnershipTransferred(address,address)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "AddressSet"): EventFragment; - getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment; -} - -export interface AddressSetEventObject { - service: string; - newAddress: string; -} -export type AddressSetEvent = TypedEvent< - [string, string], - AddressSetEventObject ->; - -export type AddressSetEventFilter = TypedEventFilter; - -export interface OwnershipTransferredEventObject { - previousOwner: string; - newOwner: string; -} -export type OwnershipTransferredEvent = TypedEvent< - [string, string], - OwnershipTransferredEventObject ->; - -export type OwnershipTransferredEventFilter = - TypedEventFilter; - -export interface AddressProvider extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: AddressProviderInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - addresses(arg0: BytesLike, overrides?: CallOverrides): Promise<[string]>; - - getACL(overrides?: CallOverrides): Promise<[string]>; - - getAccountFactory(overrides?: CallOverrides): Promise<[string]>; - - getContractsRegister(overrides?: CallOverrides): Promise<[string]>; - - getDataCompressor(overrides?: CallOverrides): Promise<[string]>; - - getGearToken(overrides?: CallOverrides): Promise<[string]>; - - getPriceOracle(overrides?: CallOverrides): Promise<[string]>; - - getTreasuryContract(overrides?: CallOverrides): Promise<[string]>; - - getWETHGateway(overrides?: CallOverrides): Promise<[string]>; - - getWethToken(overrides?: CallOverrides): Promise<[string]>; - - owner(overrides?: CallOverrides): Promise<[string]>; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setACL( - _address: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setAccountFactory( - _address: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setContractsRegister( - _address: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setDataCompressor( - _address: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setGearToken( - _address: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setPriceOracle( - _address: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setTreasuryContract( - _address: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setWETHGateway( - _address: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setWethToken( - _address: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise<[BigNumber]>; - }; - - addresses(arg0: BytesLike, overrides?: CallOverrides): Promise; - - getACL(overrides?: CallOverrides): Promise; - - getAccountFactory(overrides?: CallOverrides): Promise; - - getContractsRegister(overrides?: CallOverrides): Promise; - - getDataCompressor(overrides?: CallOverrides): Promise; - - getGearToken(overrides?: CallOverrides): Promise; - - getPriceOracle(overrides?: CallOverrides): Promise; - - getTreasuryContract(overrides?: CallOverrides): Promise; - - getWETHGateway(overrides?: CallOverrides): Promise; - - getWethToken(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setACL( - _address: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setAccountFactory( - _address: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setContractsRegister( - _address: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setDataCompressor( - _address: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setGearToken( - _address: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setPriceOracle( - _address: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setTreasuryContract( - _address: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setWETHGateway( - _address: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setWethToken( - _address: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise; - - callStatic: { - addresses(arg0: BytesLike, overrides?: CallOverrides): Promise; - - getACL(overrides?: CallOverrides): Promise; - - getAccountFactory(overrides?: CallOverrides): Promise; - - getContractsRegister(overrides?: CallOverrides): Promise; - - getDataCompressor(overrides?: CallOverrides): Promise; - - getGearToken(overrides?: CallOverrides): Promise; - - getPriceOracle(overrides?: CallOverrides): Promise; - - getTreasuryContract(overrides?: CallOverrides): Promise; - - getWETHGateway(overrides?: CallOverrides): Promise; - - getWethToken(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - renounceOwnership(overrides?: CallOverrides): Promise; - - setACL(_address: string, overrides?: CallOverrides): Promise; - - setAccountFactory( - _address: string, - overrides?: CallOverrides - ): Promise; - - setContractsRegister( - _address: string, - overrides?: CallOverrides - ): Promise; - - setDataCompressor( - _address: string, - overrides?: CallOverrides - ): Promise; - - setGearToken(_address: string, overrides?: CallOverrides): Promise; - - setPriceOracle(_address: string, overrides?: CallOverrides): Promise; - - setTreasuryContract( - _address: string, - overrides?: CallOverrides - ): Promise; - - setWETHGateway(_address: string, overrides?: CallOverrides): Promise; - - setWethToken(_address: string, overrides?: CallOverrides): Promise; - - transferOwnership( - newOwner: string, - overrides?: CallOverrides - ): Promise; - - version(overrides?: CallOverrides): Promise; - }; - - filters: { - "AddressSet(bytes32,address)"( - service?: BytesLike | null, - newAddress?: string | null - ): AddressSetEventFilter; - AddressSet( - service?: BytesLike | null, - newAddress?: string | null - ): AddressSetEventFilter; - - "OwnershipTransferred(address,address)"( - previousOwner?: string | null, - newOwner?: string | null - ): OwnershipTransferredEventFilter; - OwnershipTransferred( - previousOwner?: string | null, - newOwner?: string | null - ): OwnershipTransferredEventFilter; - }; - - estimateGas: { - addresses(arg0: BytesLike, overrides?: CallOverrides): Promise; - - getACL(overrides?: CallOverrides): Promise; - - getAccountFactory(overrides?: CallOverrides): Promise; - - getContractsRegister(overrides?: CallOverrides): Promise; - - getDataCompressor(overrides?: CallOverrides): Promise; - - getGearToken(overrides?: CallOverrides): Promise; - - getPriceOracle(overrides?: CallOverrides): Promise; - - getTreasuryContract(overrides?: CallOverrides): Promise; - - getWETHGateway(overrides?: CallOverrides): Promise; - - getWethToken(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setACL( - _address: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setAccountFactory( - _address: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setContractsRegister( - _address: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setDataCompressor( - _address: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setGearToken( - _address: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setPriceOracle( - _address: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setTreasuryContract( - _address: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setWETHGateway( - _address: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setWethToken( - _address: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - addresses( - arg0: BytesLike, - overrides?: CallOverrides - ): Promise; - - getACL(overrides?: CallOverrides): Promise; - - getAccountFactory(overrides?: CallOverrides): Promise; - - getContractsRegister( - overrides?: CallOverrides - ): Promise; - - getDataCompressor(overrides?: CallOverrides): Promise; - - getGearToken(overrides?: CallOverrides): Promise; - - getPriceOracle(overrides?: CallOverrides): Promise; - - getTreasuryContract( - overrides?: CallOverrides - ): Promise; - - getWETHGateway(overrides?: CallOverrides): Promise; - - getWethToken(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setACL( - _address: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setAccountFactory( - _address: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setContractsRegister( - _address: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setDataCompressor( - _address: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setGearToken( - _address: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setPriceOracle( - _address: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setTreasuryContract( - _address: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setWETHGateway( - _address: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setWethToken( - _address: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/core/ContractsRegister.ts b/src/types/contracts/core/ContractsRegister.ts deleted file mode 100644 index 2e505242..00000000 --- a/src/types/contracts/core/ContractsRegister.ts +++ /dev/null @@ -1,456 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../common"; - -export interface ContractsRegisterInterface extends utils.Interface { - functions: { - "_acl()": FunctionFragment; - "addCreditManager(address)": FunctionFragment; - "addPool(address)": FunctionFragment; - "creditManagers(uint256)": FunctionFragment; - "getCreditManagers()": FunctionFragment; - "getCreditManagersCount()": FunctionFragment; - "getPools()": FunctionFragment; - "getPoolsCount()": FunctionFragment; - "isCreditManager(address)": FunctionFragment; - "isPool(address)": FunctionFragment; - "pause()": FunctionFragment; - "paused()": FunctionFragment; - "pools(uint256)": FunctionFragment; - "unpause()": FunctionFragment; - "version()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "_acl" - | "addCreditManager" - | "addPool" - | "creditManagers" - | "getCreditManagers" - | "getCreditManagersCount" - | "getPools" - | "getPoolsCount" - | "isCreditManager" - | "isPool" - | "pause" - | "paused" - | "pools" - | "unpause" - | "version" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "_acl", values?: undefined): string; - encodeFunctionData( - functionFragment: "addCreditManager", - values: [string] - ): string; - encodeFunctionData(functionFragment: "addPool", values: [string]): string; - encodeFunctionData( - functionFragment: "creditManagers", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "getCreditManagers", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "getCreditManagersCount", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "getPools", values?: undefined): string; - encodeFunctionData( - functionFragment: "getPoolsCount", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "isCreditManager", - values: [string] - ): string; - encodeFunctionData(functionFragment: "isPool", values: [string]): string; - encodeFunctionData(functionFragment: "pause", values?: undefined): string; - encodeFunctionData(functionFragment: "paused", values?: undefined): string; - encodeFunctionData(functionFragment: "pools", values: [BigNumberish]): string; - encodeFunctionData(functionFragment: "unpause", values?: undefined): string; - encodeFunctionData(functionFragment: "version", values?: undefined): string; - - decodeFunctionResult(functionFragment: "_acl", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "addCreditManager", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "addPool", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "creditManagers", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getCreditManagers", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getCreditManagersCount", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "getPools", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "getPoolsCount", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "isCreditManager", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "isPool", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "pause", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "paused", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "pools", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "unpause", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "version", data: BytesLike): Result; - - events: { - "NewCreditManagerAdded(address)": EventFragment; - "NewPoolAdded(address)": EventFragment; - "Paused(address)": EventFragment; - "Unpaused(address)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "NewCreditManagerAdded"): EventFragment; - getEvent(nameOrSignatureOrTopic: "NewPoolAdded"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Paused"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Unpaused"): EventFragment; -} - -export interface NewCreditManagerAddedEventObject { - creditManager: string; -} -export type NewCreditManagerAddedEvent = TypedEvent< - [string], - NewCreditManagerAddedEventObject ->; - -export type NewCreditManagerAddedEventFilter = - TypedEventFilter; - -export interface NewPoolAddedEventObject { - pool: string; -} -export type NewPoolAddedEvent = TypedEvent<[string], NewPoolAddedEventObject>; - -export type NewPoolAddedEventFilter = TypedEventFilter; - -export interface PausedEventObject { - account: string; -} -export type PausedEvent = TypedEvent<[string], PausedEventObject>; - -export type PausedEventFilter = TypedEventFilter; - -export interface UnpausedEventObject { - account: string; -} -export type UnpausedEvent = TypedEvent<[string], UnpausedEventObject>; - -export type UnpausedEventFilter = TypedEventFilter; - -export interface ContractsRegister extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: ContractsRegisterInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - _acl(overrides?: CallOverrides): Promise<[string]>; - - addCreditManager( - newCreditManager: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - addPool( - newPoolAddress: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - creditManagers( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - getCreditManagers(overrides?: CallOverrides): Promise<[string[]]>; - - getCreditManagersCount(overrides?: CallOverrides): Promise<[BigNumber]>; - - getPools(overrides?: CallOverrides): Promise<[string[]]>; - - getPoolsCount(overrides?: CallOverrides): Promise<[BigNumber]>; - - isCreditManager( - arg0: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - isPool(arg0: string, overrides?: CallOverrides): Promise<[boolean]>; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise<[boolean]>; - - pools(arg0: BigNumberish, overrides?: CallOverrides): Promise<[string]>; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise<[BigNumber]>; - }; - - _acl(overrides?: CallOverrides): Promise; - - addCreditManager( - newCreditManager: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - addPool( - newPoolAddress: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - creditManagers( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getCreditManagers(overrides?: CallOverrides): Promise; - - getCreditManagersCount(overrides?: CallOverrides): Promise; - - getPools(overrides?: CallOverrides): Promise; - - getPoolsCount(overrides?: CallOverrides): Promise; - - isCreditManager(arg0: string, overrides?: CallOverrides): Promise; - - isPool(arg0: string, overrides?: CallOverrides): Promise; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise; - - pools(arg0: BigNumberish, overrides?: CallOverrides): Promise; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise; - - callStatic: { - _acl(overrides?: CallOverrides): Promise; - - addCreditManager( - newCreditManager: string, - overrides?: CallOverrides - ): Promise; - - addPool(newPoolAddress: string, overrides?: CallOverrides): Promise; - - creditManagers( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getCreditManagers(overrides?: CallOverrides): Promise; - - getCreditManagersCount(overrides?: CallOverrides): Promise; - - getPools(overrides?: CallOverrides): Promise; - - getPoolsCount(overrides?: CallOverrides): Promise; - - isCreditManager(arg0: string, overrides?: CallOverrides): Promise; - - isPool(arg0: string, overrides?: CallOverrides): Promise; - - pause(overrides?: CallOverrides): Promise; - - paused(overrides?: CallOverrides): Promise; - - pools(arg0: BigNumberish, overrides?: CallOverrides): Promise; - - unpause(overrides?: CallOverrides): Promise; - - version(overrides?: CallOverrides): Promise; - }; - - filters: { - "NewCreditManagerAdded(address)"( - creditManager?: string | null - ): NewCreditManagerAddedEventFilter; - NewCreditManagerAdded( - creditManager?: string | null - ): NewCreditManagerAddedEventFilter; - - "NewPoolAdded(address)"(pool?: string | null): NewPoolAddedEventFilter; - NewPoolAdded(pool?: string | null): NewPoolAddedEventFilter; - - "Paused(address)"(account?: null): PausedEventFilter; - Paused(account?: null): PausedEventFilter; - - "Unpaused(address)"(account?: null): UnpausedEventFilter; - Unpaused(account?: null): UnpausedEventFilter; - }; - - estimateGas: { - _acl(overrides?: CallOverrides): Promise; - - addCreditManager( - newCreditManager: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - addPool( - newPoolAddress: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - creditManagers( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getCreditManagers(overrides?: CallOverrides): Promise; - - getCreditManagersCount(overrides?: CallOverrides): Promise; - - getPools(overrides?: CallOverrides): Promise; - - getPoolsCount(overrides?: CallOverrides): Promise; - - isCreditManager( - arg0: string, - overrides?: CallOverrides - ): Promise; - - isPool(arg0: string, overrides?: CallOverrides): Promise; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise; - - pools(arg0: BigNumberish, overrides?: CallOverrides): Promise; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - _acl(overrides?: CallOverrides): Promise; - - addCreditManager( - newCreditManager: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - addPool( - newPoolAddress: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - creditManagers( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getCreditManagers(overrides?: CallOverrides): Promise; - - getCreditManagersCount( - overrides?: CallOverrides - ): Promise; - - getPools(overrides?: CallOverrides): Promise; - - getPoolsCount(overrides?: CallOverrides): Promise; - - isCreditManager( - arg0: string, - overrides?: CallOverrides - ): Promise; - - isPool( - arg0: string, - overrides?: CallOverrides - ): Promise; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise; - - pools( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/core/DataCompressor.ts b/src/types/contracts/core/DataCompressor.ts deleted file mode 100644 index dda10ad2..00000000 --- a/src/types/contracts/core/DataCompressor.ts +++ /dev/null @@ -1,625 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../common"; - -export type TokenBalanceStruct = { - token: string; - balance: BigNumberish; - isAllowed: boolean; - isEnabled: boolean; -}; - -export type TokenBalanceStructOutput = [string, BigNumber, boolean, boolean] & { - token: string; - balance: BigNumber; - isAllowed: boolean; - isEnabled: boolean; -}; - -export type CreditAccountDataStruct = { - addr: string; - borrower: string; - inUse: boolean; - creditManager: string; - underlying: string; - borrowedAmountPlusInterest: BigNumberish; - totalValue: BigNumberish; - healthFactor: BigNumberish; - borrowRate: BigNumberish; - balances: TokenBalanceStruct[]; - repayAmount: BigNumberish; - liquidationAmount: BigNumberish; - canBeClosed: boolean; - borrowedAmount: BigNumberish; - cumulativeIndexAtOpen: BigNumberish; - since: BigNumberish; - version: BigNumberish; - enabledTokenMask: BigNumberish; -}; - -export type CreditAccountDataStructOutput = [ - string, - string, - boolean, - string, - string, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - TokenBalanceStructOutput[], - BigNumber, - BigNumber, - boolean, - BigNumber, - BigNumber, - BigNumber, - number, - BigNumber -] & { - addr: string; - borrower: string; - inUse: boolean; - creditManager: string; - underlying: string; - borrowedAmountPlusInterest: BigNumber; - totalValue: BigNumber; - healthFactor: BigNumber; - borrowRate: BigNumber; - balances: TokenBalanceStructOutput[]; - repayAmount: BigNumber; - liquidationAmount: BigNumber; - canBeClosed: boolean; - borrowedAmount: BigNumber; - cumulativeIndexAtOpen: BigNumber; - since: BigNumber; - version: number; - enabledTokenMask: BigNumber; -}; - -export type ContractAdapterStruct = { - allowedContract: string; - adapter: string; -}; - -export type ContractAdapterStructOutput = [string, string] & { - allowedContract: string; - adapter: string; -}; - -export type CreditManagerDataStruct = { - addr: string; - underlying: string; - isWETH: boolean; - canBorrow: boolean; - borrowRate: BigNumberish; - minAmount: BigNumberish; - maxAmount: BigNumberish; - maxLeverageFactor: BigNumberish; - availableLiquidity: BigNumberish; - collateralTokens: string[]; - adapters: ContractAdapterStruct[]; - liquidationThresholds: BigNumberish[]; - version: BigNumberish; - creditFacade: string; - isDegenMode: boolean; - degenNFT: string; - isIncreaseDebtForbidden: boolean; - forbiddenTokenMask: BigNumberish; - maxEnabledTokensLength: BigNumberish; -}; - -export type CreditManagerDataStructOutput = [ - string, - string, - boolean, - boolean, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - string[], - ContractAdapterStructOutput[], - BigNumber[], - number, - string, - boolean, - string, - boolean, - BigNumber, - number -] & { - addr: string; - underlying: string; - isWETH: boolean; - canBorrow: boolean; - borrowRate: BigNumber; - minAmount: BigNumber; - maxAmount: BigNumber; - maxLeverageFactor: BigNumber; - availableLiquidity: BigNumber; - collateralTokens: string[]; - adapters: ContractAdapterStructOutput[]; - liquidationThresholds: BigNumber[]; - version: number; - creditFacade: string; - isDegenMode: boolean; - degenNFT: string; - isIncreaseDebtForbidden: boolean; - forbiddenTokenMask: BigNumber; - maxEnabledTokensLength: number; -}; - -export type PoolDataStruct = { - addr: string; - isWETH: boolean; - underlying: string; - dieselToken: string; - linearCumulativeIndex: BigNumberish; - availableLiquidity: BigNumberish; - expectedLiquidity: BigNumberish; - expectedLiquidityLimit: BigNumberish; - totalBorrowed: BigNumberish; - depositAPY_RAY: BigNumberish; - borrowAPY_RAY: BigNumberish; - dieselRate_RAY: BigNumberish; - withdrawFee: BigNumberish; - cumulativeIndex_RAY: BigNumberish; - timestampLU: BigNumberish; - version: BigNumberish; -}; - -export type PoolDataStructOutput = [ - string, - boolean, - string, - string, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - number -] & { - addr: string; - isWETH: boolean; - underlying: string; - dieselToken: string; - linearCumulativeIndex: BigNumber; - availableLiquidity: BigNumber; - expectedLiquidity: BigNumber; - expectedLiquidityLimit: BigNumber; - totalBorrowed: BigNumber; - depositAPY_RAY: BigNumber; - borrowAPY_RAY: BigNumber; - dieselRate_RAY: BigNumber; - withdrawFee: BigNumber; - cumulativeIndex_RAY: BigNumber; - timestampLU: BigNumber; - version: number; -}; - -export interface DataCompressorInterface extends utils.Interface { - functions: { - "WETHToken()": FunctionFragment; - "addressProvider()": FunctionFragment; - "contractsRegister()": FunctionFragment; - "getAdapter(address,address)": FunctionFragment; - "getCreditAccountData(address,address)": FunctionFragment; - "getCreditAccountList(address)": FunctionFragment; - "getCreditManagerData(address)": FunctionFragment; - "getCreditManagersList()": FunctionFragment; - "getPoolData(address)": FunctionFragment; - "getPoolsList()": FunctionFragment; - "hasOpenedCreditAccount(address,address)": FunctionFragment; - "version()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "WETHToken" - | "addressProvider" - | "contractsRegister" - | "getAdapter" - | "getCreditAccountData" - | "getCreditAccountList" - | "getCreditManagerData" - | "getCreditManagersList" - | "getPoolData" - | "getPoolsList" - | "hasOpenedCreditAccount" - | "version" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "WETHToken", values?: undefined): string; - encodeFunctionData( - functionFragment: "addressProvider", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "contractsRegister", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "getAdapter", - values: [string, string] - ): string; - encodeFunctionData( - functionFragment: "getCreditAccountData", - values: [string, string] - ): string; - encodeFunctionData( - functionFragment: "getCreditAccountList", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "getCreditManagerData", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "getCreditManagersList", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "getPoolData", values: [string]): string; - encodeFunctionData( - functionFragment: "getPoolsList", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "hasOpenedCreditAccount", - values: [string, string] - ): string; - encodeFunctionData(functionFragment: "version", values?: undefined): string; - - decodeFunctionResult(functionFragment: "WETHToken", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "addressProvider", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "contractsRegister", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "getAdapter", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "getCreditAccountData", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getCreditAccountList", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getCreditManagerData", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getCreditManagersList", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getPoolData", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getPoolsList", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "hasOpenedCreditAccount", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "version", data: BytesLike): Result; - - events: {}; -} - -export interface DataCompressor extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: DataCompressorInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - WETHToken(overrides?: CallOverrides): Promise<[string]>; - - addressProvider(overrides?: CallOverrides): Promise<[string]>; - - contractsRegister(overrides?: CallOverrides): Promise<[string]>; - - getAdapter( - _creditManager: string, - _allowedContract: string, - overrides?: CallOverrides - ): Promise<[string] & { adapter: string }>; - - getCreditAccountData( - _creditManager: string, - borrower: string, - overrides?: CallOverrides - ): Promise< - [CreditAccountDataStructOutput] & { - result: CreditAccountDataStructOutput; - } - >; - - getCreditAccountList( - borrower: string, - overrides?: CallOverrides - ): Promise< - [CreditAccountDataStructOutput[]] & { - result: CreditAccountDataStructOutput[]; - } - >; - - getCreditManagerData( - _creditManager: string, - overrides?: CallOverrides - ): Promise< - [CreditManagerDataStructOutput] & { - result: CreditManagerDataStructOutput; - } - >; - - getCreditManagersList( - overrides?: CallOverrides - ): Promise< - [CreditManagerDataStructOutput[]] & { - result: CreditManagerDataStructOutput[]; - } - >; - - getPoolData( - _pool: string, - overrides?: CallOverrides - ): Promise<[PoolDataStructOutput] & { result: PoolDataStructOutput }>; - - getPoolsList( - overrides?: CallOverrides - ): Promise<[PoolDataStructOutput[]] & { result: PoolDataStructOutput[] }>; - - hasOpenedCreditAccount( - _creditManager: string, - borrower: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - version(overrides?: CallOverrides): Promise<[BigNumber]>; - }; - - WETHToken(overrides?: CallOverrides): Promise; - - addressProvider(overrides?: CallOverrides): Promise; - - contractsRegister(overrides?: CallOverrides): Promise; - - getAdapter( - _creditManager: string, - _allowedContract: string, - overrides?: CallOverrides - ): Promise; - - getCreditAccountData( - _creditManager: string, - borrower: string, - overrides?: CallOverrides - ): Promise; - - getCreditAccountList( - borrower: string, - overrides?: CallOverrides - ): Promise; - - getCreditManagerData( - _creditManager: string, - overrides?: CallOverrides - ): Promise; - - getCreditManagersList( - overrides?: CallOverrides - ): Promise; - - getPoolData( - _pool: string, - overrides?: CallOverrides - ): Promise; - - getPoolsList(overrides?: CallOverrides): Promise; - - hasOpenedCreditAccount( - _creditManager: string, - borrower: string, - overrides?: CallOverrides - ): Promise; - - version(overrides?: CallOverrides): Promise; - - callStatic: { - WETHToken(overrides?: CallOverrides): Promise; - - addressProvider(overrides?: CallOverrides): Promise; - - contractsRegister(overrides?: CallOverrides): Promise; - - getAdapter( - _creditManager: string, - _allowedContract: string, - overrides?: CallOverrides - ): Promise; - - getCreditAccountData( - _creditManager: string, - borrower: string, - overrides?: CallOverrides - ): Promise; - - getCreditAccountList( - borrower: string, - overrides?: CallOverrides - ): Promise; - - getCreditManagerData( - _creditManager: string, - overrides?: CallOverrides - ): Promise; - - getCreditManagersList( - overrides?: CallOverrides - ): Promise; - - getPoolData( - _pool: string, - overrides?: CallOverrides - ): Promise; - - getPoolsList(overrides?: CallOverrides): Promise; - - hasOpenedCreditAccount( - _creditManager: string, - borrower: string, - overrides?: CallOverrides - ): Promise; - - version(overrides?: CallOverrides): Promise; - }; - - filters: {}; - - estimateGas: { - WETHToken(overrides?: CallOverrides): Promise; - - addressProvider(overrides?: CallOverrides): Promise; - - contractsRegister(overrides?: CallOverrides): Promise; - - getAdapter( - _creditManager: string, - _allowedContract: string, - overrides?: CallOverrides - ): Promise; - - getCreditAccountData( - _creditManager: string, - borrower: string, - overrides?: CallOverrides - ): Promise; - - getCreditAccountList( - borrower: string, - overrides?: CallOverrides - ): Promise; - - getCreditManagerData( - _creditManager: string, - overrides?: CallOverrides - ): Promise; - - getCreditManagersList(overrides?: CallOverrides): Promise; - - getPoolData(_pool: string, overrides?: CallOverrides): Promise; - - getPoolsList(overrides?: CallOverrides): Promise; - - hasOpenedCreditAccount( - _creditManager: string, - borrower: string, - overrides?: CallOverrides - ): Promise; - - version(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - WETHToken(overrides?: CallOverrides): Promise; - - addressProvider(overrides?: CallOverrides): Promise; - - contractsRegister(overrides?: CallOverrides): Promise; - - getAdapter( - _creditManager: string, - _allowedContract: string, - overrides?: CallOverrides - ): Promise; - - getCreditAccountData( - _creditManager: string, - borrower: string, - overrides?: CallOverrides - ): Promise; - - getCreditAccountList( - borrower: string, - overrides?: CallOverrides - ): Promise; - - getCreditManagerData( - _creditManager: string, - overrides?: CallOverrides - ): Promise; - - getCreditManagersList( - overrides?: CallOverrides - ): Promise; - - getPoolData( - _pool: string, - overrides?: CallOverrides - ): Promise; - - getPoolsList(overrides?: CallOverrides): Promise; - - hasOpenedCreditAccount( - _creditManager: string, - borrower: string, - overrides?: CallOverrides - ): Promise; - - version(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/core/WETHGateway.ts b/src/types/contracts/core/WETHGateway.ts deleted file mode 100644 index f5f4faa4..00000000 --- a/src/types/contracts/core/WETHGateway.ts +++ /dev/null @@ -1,263 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PayableOverrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../common"; - -export interface WETHGatewayInterface extends utils.Interface { - functions: { - "addLiquidityETH(address,address,uint16)": FunctionFragment; - "removeLiquidityETH(address,uint256,address)": FunctionFragment; - "unwrapWETH(address,uint256)": FunctionFragment; - "version()": FunctionFragment; - "wethAddress()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "addLiquidityETH" - | "removeLiquidityETH" - | "unwrapWETH" - | "version" - | "wethAddress" - ): FunctionFragment; - - encodeFunctionData( - functionFragment: "addLiquidityETH", - values: [string, string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "removeLiquidityETH", - values: [string, BigNumberish, string] - ): string; - encodeFunctionData( - functionFragment: "unwrapWETH", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "version", values?: undefined): string; - encodeFunctionData( - functionFragment: "wethAddress", - values?: undefined - ): string; - - decodeFunctionResult( - functionFragment: "addLiquidityETH", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "removeLiquidityETH", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "unwrapWETH", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "version", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "wethAddress", - data: BytesLike - ): Result; - - events: { - "WithdrawETH(address,address)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "WithdrawETH"): EventFragment; -} - -export interface WithdrawETHEventObject { - pool: string; - to: string; -} -export type WithdrawETHEvent = TypedEvent< - [string, string], - WithdrawETHEventObject ->; - -export type WithdrawETHEventFilter = TypedEventFilter; - -export interface WETHGateway extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: WETHGatewayInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - addLiquidityETH( - pool: string, - onBehalfOf: string, - referralCode: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - removeLiquidityETH( - pool: string, - amount: BigNumberish, - to: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - unwrapWETH( - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise<[BigNumber]>; - - wethAddress(overrides?: CallOverrides): Promise<[string]>; - }; - - addLiquidityETH( - pool: string, - onBehalfOf: string, - referralCode: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - removeLiquidityETH( - pool: string, - amount: BigNumberish, - to: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - unwrapWETH( - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise; - - wethAddress(overrides?: CallOverrides): Promise; - - callStatic: { - addLiquidityETH( - pool: string, - onBehalfOf: string, - referralCode: BigNumberish, - overrides?: CallOverrides - ): Promise; - - removeLiquidityETH( - pool: string, - amount: BigNumberish, - to: string, - overrides?: CallOverrides - ): Promise; - - unwrapWETH( - to: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - version(overrides?: CallOverrides): Promise; - - wethAddress(overrides?: CallOverrides): Promise; - }; - - filters: { - "WithdrawETH(address,address)"( - pool?: string | null, - to?: string | null - ): WithdrawETHEventFilter; - WithdrawETH( - pool?: string | null, - to?: string | null - ): WithdrawETHEventFilter; - }; - - estimateGas: { - addLiquidityETH( - pool: string, - onBehalfOf: string, - referralCode: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - removeLiquidityETH( - pool: string, - amount: BigNumberish, - to: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - unwrapWETH( - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise; - - wethAddress(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - addLiquidityETH( - pool: string, - onBehalfOf: string, - referralCode: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - removeLiquidityETH( - pool: string, - amount: BigNumberish, - to: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - unwrapWETH( - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise; - - wethAddress(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/core/index.ts b/src/types/contracts/core/index.ts deleted file mode 100644 index c4be24fe..00000000 --- a/src/types/contracts/core/index.ts +++ /dev/null @@ -1,10 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { ACL } from "./ACL"; -export type { ACLTrait } from "./ACLTrait"; -export type { AccountFactory } from "./AccountFactory"; -export type { AddressProvider } from "./AddressProvider"; -export type { ContractsRegister } from "./ContractsRegister"; -export type { DataCompressor } from "./DataCompressor"; -export type { WETHGateway } from "./WETHGateway"; diff --git a/src/types/contracts/credit/CreditAccount.ts b/src/types/contracts/credit/CreditAccount.ts deleted file mode 100644 index 45c0ae28..00000000 --- a/src/types/contracts/credit/CreditAccount.ts +++ /dev/null @@ -1,406 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../common"; - -export interface CreditAccountInterface extends utils.Interface { - functions: { - "borrowedAmount()": FunctionFragment; - "cancelAllowance(address,address)": FunctionFragment; - "connectTo(address,uint256,uint256)": FunctionFragment; - "creditManager()": FunctionFragment; - "cumulativeIndexAtOpen()": FunctionFragment; - "execute(address,bytes)": FunctionFragment; - "factory()": FunctionFragment; - "initialize()": FunctionFragment; - "safeTransfer(address,address,uint256)": FunctionFragment; - "since()": FunctionFragment; - "updateParameters(uint256,uint256)": FunctionFragment; - "version()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "borrowedAmount" - | "cancelAllowance" - | "connectTo" - | "creditManager" - | "cumulativeIndexAtOpen" - | "execute" - | "factory" - | "initialize" - | "safeTransfer" - | "since" - | "updateParameters" - | "version" - ): FunctionFragment; - - encodeFunctionData( - functionFragment: "borrowedAmount", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "cancelAllowance", - values: [string, string] - ): string; - encodeFunctionData( - functionFragment: "connectTo", - values: [string, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "creditManager", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "cumulativeIndexAtOpen", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "execute", - values: [string, BytesLike] - ): string; - encodeFunctionData(functionFragment: "factory", values?: undefined): string; - encodeFunctionData( - functionFragment: "initialize", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "safeTransfer", - values: [string, string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "since", values?: undefined): string; - encodeFunctionData( - functionFragment: "updateParameters", - values: [BigNumberish, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "version", values?: undefined): string; - - decodeFunctionResult( - functionFragment: "borrowedAmount", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "cancelAllowance", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "connectTo", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "creditManager", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "cumulativeIndexAtOpen", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "execute", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "factory", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "initialize", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "safeTransfer", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "since", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "updateParameters", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "version", data: BytesLike): Result; - - events: {}; -} - -export interface CreditAccount extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: CreditAccountInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - borrowedAmount(overrides?: CallOverrides): Promise<[BigNumber]>; - - cancelAllowance( - token: string, - targetContract: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - connectTo( - _creditManager: string, - _borrowedAmount: BigNumberish, - _cumulativeIndexAtOpen: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - creditManager(overrides?: CallOverrides): Promise<[string]>; - - cumulativeIndexAtOpen(overrides?: CallOverrides): Promise<[BigNumber]>; - - execute( - destination: string, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - factory(overrides?: CallOverrides): Promise<[string]>; - - initialize( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - safeTransfer( - token: string, - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - since(overrides?: CallOverrides): Promise<[BigNumber]>; - - updateParameters( - _borrowedAmount: BigNumberish, - _cumulativeIndexAtOpen: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise<[BigNumber]>; - }; - - borrowedAmount(overrides?: CallOverrides): Promise; - - cancelAllowance( - token: string, - targetContract: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - connectTo( - _creditManager: string, - _borrowedAmount: BigNumberish, - _cumulativeIndexAtOpen: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - cumulativeIndexAtOpen(overrides?: CallOverrides): Promise; - - execute( - destination: string, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - factory(overrides?: CallOverrides): Promise; - - initialize( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - safeTransfer( - token: string, - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - since(overrides?: CallOverrides): Promise; - - updateParameters( - _borrowedAmount: BigNumberish, - _cumulativeIndexAtOpen: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise; - - callStatic: { - borrowedAmount(overrides?: CallOverrides): Promise; - - cancelAllowance( - token: string, - targetContract: string, - overrides?: CallOverrides - ): Promise; - - connectTo( - _creditManager: string, - _borrowedAmount: BigNumberish, - _cumulativeIndexAtOpen: BigNumberish, - overrides?: CallOverrides - ): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - cumulativeIndexAtOpen(overrides?: CallOverrides): Promise; - - execute( - destination: string, - data: BytesLike, - overrides?: CallOverrides - ): Promise; - - factory(overrides?: CallOverrides): Promise; - - initialize(overrides?: CallOverrides): Promise; - - safeTransfer( - token: string, - to: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - since(overrides?: CallOverrides): Promise; - - updateParameters( - _borrowedAmount: BigNumberish, - _cumulativeIndexAtOpen: BigNumberish, - overrides?: CallOverrides - ): Promise; - - version(overrides?: CallOverrides): Promise; - }; - - filters: {}; - - estimateGas: { - borrowedAmount(overrides?: CallOverrides): Promise; - - cancelAllowance( - token: string, - targetContract: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - connectTo( - _creditManager: string, - _borrowedAmount: BigNumberish, - _cumulativeIndexAtOpen: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - cumulativeIndexAtOpen(overrides?: CallOverrides): Promise; - - execute( - destination: string, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - factory(overrides?: CallOverrides): Promise; - - initialize( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - safeTransfer( - token: string, - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - since(overrides?: CallOverrides): Promise; - - updateParameters( - _borrowedAmount: BigNumberish, - _cumulativeIndexAtOpen: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - borrowedAmount(overrides?: CallOverrides): Promise; - - cancelAllowance( - token: string, - targetContract: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - connectTo( - _creditManager: string, - _borrowedAmount: BigNumberish, - _cumulativeIndexAtOpen: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - cumulativeIndexAtOpen( - overrides?: CallOverrides - ): Promise; - - execute( - destination: string, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - factory(overrides?: CallOverrides): Promise; - - initialize( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - safeTransfer( - token: string, - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - since(overrides?: CallOverrides): Promise; - - updateParameters( - _borrowedAmount: BigNumberish, - _cumulativeIndexAtOpen: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/credit/CreditConfigurator.ts b/src/types/contracts/credit/CreditConfigurator.ts deleted file mode 100644 index 0767e94f..00000000 --- a/src/types/contracts/credit/CreditConfigurator.ts +++ /dev/null @@ -1,1297 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../common"; - -export type CollateralTokenStruct = { - token: string; - liquidationThreshold: BigNumberish; -}; - -export type CollateralTokenStructOutput = [string, number] & { - token: string; - liquidationThreshold: number; -}; - -export type CreditManagerOptsStruct = { - minBorrowedAmount: BigNumberish; - maxBorrowedAmount: BigNumberish; - collateralTokens: CollateralTokenStruct[]; - degenNFT: string; - expirable: boolean; -}; - -export type CreditManagerOptsStructOutput = [ - BigNumber, - BigNumber, - CollateralTokenStructOutput[], - string, - boolean -] & { - minBorrowedAmount: BigNumber; - maxBorrowedAmount: BigNumber; - collateralTokens: CollateralTokenStructOutput[]; - degenNFT: string; - expirable: boolean; -}; - -export interface CreditConfiguratorInterface extends utils.Interface { - functions: { - "_acl()": FunctionFragment; - "addCollateralToken(address,uint16)": FunctionFragment; - "addContractToUpgradeable(address)": FunctionFragment; - "addressProvider()": FunctionFragment; - "allowContract(address,address)": FunctionFragment; - "allowToken(address)": FunctionFragment; - "allowedContracts(uint256)": FunctionFragment; - "allowedContractsCount()": FunctionFragment; - "creditFacade()": FunctionFragment; - "creditManager()": FunctionFragment; - "forbidContract(address)": FunctionFragment; - "forbidToken(address)": FunctionFragment; - "pause()": FunctionFragment; - "paused()": FunctionFragment; - "removeContractFromUpgradeable(address)": FunctionFragment; - "setExpirationDate(uint40)": FunctionFragment; - "setFees(uint16,uint16,uint16,uint16,uint16)": FunctionFragment; - "setIncreaseDebtForbidden(bool)": FunctionFragment; - "setLimitPerBlock(uint128)": FunctionFragment; - "setLimits(uint128,uint128)": FunctionFragment; - "setLiquidationThreshold(address,uint16)": FunctionFragment; - "setMaxEnabledTokens(uint8)": FunctionFragment; - "underlying()": FunctionFragment; - "unpause()": FunctionFragment; - "upgradeCreditConfigurator(address)": FunctionFragment; - "upgradeCreditFacade(address,bool)": FunctionFragment; - "upgradePriceOracle()": FunctionFragment; - "version()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "_acl" - | "addCollateralToken" - | "addContractToUpgradeable" - | "addressProvider" - | "allowContract" - | "allowToken" - | "allowedContracts" - | "allowedContractsCount" - | "creditFacade" - | "creditManager" - | "forbidContract" - | "forbidToken" - | "pause" - | "paused" - | "removeContractFromUpgradeable" - | "setExpirationDate" - | "setFees" - | "setIncreaseDebtForbidden" - | "setLimitPerBlock" - | "setLimits" - | "setLiquidationThreshold" - | "setMaxEnabledTokens" - | "underlying" - | "unpause" - | "upgradeCreditConfigurator" - | "upgradeCreditFacade" - | "upgradePriceOracle" - | "version" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "_acl", values?: undefined): string; - encodeFunctionData( - functionFragment: "addCollateralToken", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "addContractToUpgradeable", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "addressProvider", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "allowContract", - values: [string, string] - ): string; - encodeFunctionData(functionFragment: "allowToken", values: [string]): string; - encodeFunctionData( - functionFragment: "allowedContracts", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "allowedContractsCount", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditFacade", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditManager", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "forbidContract", - values: [string] - ): string; - encodeFunctionData(functionFragment: "forbidToken", values: [string]): string; - encodeFunctionData(functionFragment: "pause", values?: undefined): string; - encodeFunctionData(functionFragment: "paused", values?: undefined): string; - encodeFunctionData( - functionFragment: "removeContractFromUpgradeable", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "setExpirationDate", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "setFees", - values: [ - BigNumberish, - BigNumberish, - BigNumberish, - BigNumberish, - BigNumberish - ] - ): string; - encodeFunctionData( - functionFragment: "setIncreaseDebtForbidden", - values: [boolean] - ): string; - encodeFunctionData( - functionFragment: "setLimitPerBlock", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "setLimits", - values: [BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "setLiquidationThreshold", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "setMaxEnabledTokens", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "underlying", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "unpause", values?: undefined): string; - encodeFunctionData( - functionFragment: "upgradeCreditConfigurator", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "upgradeCreditFacade", - values: [string, boolean] - ): string; - encodeFunctionData( - functionFragment: "upgradePriceOracle", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "version", values?: undefined): string; - - decodeFunctionResult(functionFragment: "_acl", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "addCollateralToken", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "addContractToUpgradeable", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "addressProvider", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "allowContract", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "allowToken", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "allowedContracts", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "allowedContractsCount", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditFacade", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditManager", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "forbidContract", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "forbidToken", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "pause", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "paused", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "removeContractFromUpgradeable", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "setExpirationDate", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "setFees", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "setIncreaseDebtForbidden", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "setLimitPerBlock", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "setLimits", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "setLiquidationThreshold", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "setMaxEnabledTokens", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "underlying", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "unpause", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "upgradeCreditConfigurator", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "upgradeCreditFacade", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "upgradePriceOracle", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "version", data: BytesLike): Result; - - events: { - "AddedToUpgradeable(address)": EventFragment; - "ContractAllowed(address,address)": EventFragment; - "ContractForbidden(address)": EventFragment; - "CreditConfiguratorUpgraded(address)": EventFragment; - "CreditFacadeUpgraded(address)": EventFragment; - "DegenModeUpdated(bool)": EventFragment; - "ExpirationDateUpdated(uint40)": EventFragment; - "FeesUpdated(uint16,uint16,uint16,uint16,uint16)": EventFragment; - "IncreaseDebtModeUpdated(bool)": EventFragment; - "LimitPerBlockUpdated(uint128)": EventFragment; - "LimitsUpdated(uint256,uint256)": EventFragment; - "MaxEnabledTokensUpdated(uint8)": EventFragment; - "Paused(address)": EventFragment; - "PriceOracleUpgraded(address)": EventFragment; - "RemovedFromUpgradeable(address)": EventFragment; - "TokenAllowed(address)": EventFragment; - "TokenForbidden(address)": EventFragment; - "TokenLiquidationThresholdUpdated(address,uint16)": EventFragment; - "Unpaused(address)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "AddedToUpgradeable"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ContractAllowed"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ContractForbidden"): EventFragment; - getEvent(nameOrSignatureOrTopic: "CreditConfiguratorUpgraded"): EventFragment; - getEvent(nameOrSignatureOrTopic: "CreditFacadeUpgraded"): EventFragment; - getEvent(nameOrSignatureOrTopic: "DegenModeUpdated"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ExpirationDateUpdated"): EventFragment; - getEvent(nameOrSignatureOrTopic: "FeesUpdated"): EventFragment; - getEvent(nameOrSignatureOrTopic: "IncreaseDebtModeUpdated"): EventFragment; - getEvent(nameOrSignatureOrTopic: "LimitPerBlockUpdated"): EventFragment; - getEvent(nameOrSignatureOrTopic: "LimitsUpdated"): EventFragment; - getEvent(nameOrSignatureOrTopic: "MaxEnabledTokensUpdated"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Paused"): EventFragment; - getEvent(nameOrSignatureOrTopic: "PriceOracleUpgraded"): EventFragment; - getEvent(nameOrSignatureOrTopic: "RemovedFromUpgradeable"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TokenAllowed"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TokenForbidden"): EventFragment; - getEvent( - nameOrSignatureOrTopic: "TokenLiquidationThresholdUpdated" - ): EventFragment; - getEvent(nameOrSignatureOrTopic: "Unpaused"): EventFragment; -} - -export interface AddedToUpgradeableEventObject { - arg0: string; -} -export type AddedToUpgradeableEvent = TypedEvent< - [string], - AddedToUpgradeableEventObject ->; - -export type AddedToUpgradeableEventFilter = - TypedEventFilter; - -export interface ContractAllowedEventObject { - protocol: string; - adapter: string; -} -export type ContractAllowedEvent = TypedEvent< - [string, string], - ContractAllowedEventObject ->; - -export type ContractAllowedEventFilter = TypedEventFilter; - -export interface ContractForbiddenEventObject { - protocol: string; -} -export type ContractForbiddenEvent = TypedEvent< - [string], - ContractForbiddenEventObject ->; - -export type ContractForbiddenEventFilter = - TypedEventFilter; - -export interface CreditConfiguratorUpgradedEventObject { - newCreditConfigurator: string; -} -export type CreditConfiguratorUpgradedEvent = TypedEvent< - [string], - CreditConfiguratorUpgradedEventObject ->; - -export type CreditConfiguratorUpgradedEventFilter = - TypedEventFilter; - -export interface CreditFacadeUpgradedEventObject { - newCreditFacade: string; -} -export type CreditFacadeUpgradedEvent = TypedEvent< - [string], - CreditFacadeUpgradedEventObject ->; - -export type CreditFacadeUpgradedEventFilter = - TypedEventFilter; - -export interface DegenModeUpdatedEventObject { - arg0: boolean; -} -export type DegenModeUpdatedEvent = TypedEvent< - [boolean], - DegenModeUpdatedEventObject ->; - -export type DegenModeUpdatedEventFilter = - TypedEventFilter; - -export interface ExpirationDateUpdatedEventObject { - arg0: number; -} -export type ExpirationDateUpdatedEvent = TypedEvent< - [number], - ExpirationDateUpdatedEventObject ->; - -export type ExpirationDateUpdatedEventFilter = - TypedEventFilter; - -export interface FeesUpdatedEventObject { - feeInterest: number; - feeLiquidation: number; - liquidationPremium: number; - feeLiquidationExpired: number; - liquidationPremiumExpired: number; -} -export type FeesUpdatedEvent = TypedEvent< - [number, number, number, number, number], - FeesUpdatedEventObject ->; - -export type FeesUpdatedEventFilter = TypedEventFilter; - -export interface IncreaseDebtModeUpdatedEventObject { - arg0: boolean; -} -export type IncreaseDebtModeUpdatedEvent = TypedEvent< - [boolean], - IncreaseDebtModeUpdatedEventObject ->; - -export type IncreaseDebtModeUpdatedEventFilter = - TypedEventFilter; - -export interface LimitPerBlockUpdatedEventObject { - arg0: BigNumber; -} -export type LimitPerBlockUpdatedEvent = TypedEvent< - [BigNumber], - LimitPerBlockUpdatedEventObject ->; - -export type LimitPerBlockUpdatedEventFilter = - TypedEventFilter; - -export interface LimitsUpdatedEventObject { - minBorrowedAmount: BigNumber; - maxBorrowedAmount: BigNumber; -} -export type LimitsUpdatedEvent = TypedEvent< - [BigNumber, BigNumber], - LimitsUpdatedEventObject ->; - -export type LimitsUpdatedEventFilter = TypedEventFilter; - -export interface MaxEnabledTokensUpdatedEventObject { - arg0: number; -} -export type MaxEnabledTokensUpdatedEvent = TypedEvent< - [number], - MaxEnabledTokensUpdatedEventObject ->; - -export type MaxEnabledTokensUpdatedEventFilter = - TypedEventFilter; - -export interface PausedEventObject { - account: string; -} -export type PausedEvent = TypedEvent<[string], PausedEventObject>; - -export type PausedEventFilter = TypedEventFilter; - -export interface PriceOracleUpgradedEventObject { - newPriceOracle: string; -} -export type PriceOracleUpgradedEvent = TypedEvent< - [string], - PriceOracleUpgradedEventObject ->; - -export type PriceOracleUpgradedEventFilter = - TypedEventFilter; - -export interface RemovedFromUpgradeableEventObject { - arg0: string; -} -export type RemovedFromUpgradeableEvent = TypedEvent< - [string], - RemovedFromUpgradeableEventObject ->; - -export type RemovedFromUpgradeableEventFilter = - TypedEventFilter; - -export interface TokenAllowedEventObject { - token: string; -} -export type TokenAllowedEvent = TypedEvent<[string], TokenAllowedEventObject>; - -export type TokenAllowedEventFilter = TypedEventFilter; - -export interface TokenForbiddenEventObject { - token: string; -} -export type TokenForbiddenEvent = TypedEvent< - [string], - TokenForbiddenEventObject ->; - -export type TokenForbiddenEventFilter = TypedEventFilter; - -export interface TokenLiquidationThresholdUpdatedEventObject { - token: string; - liquidityThreshold: number; -} -export type TokenLiquidationThresholdUpdatedEvent = TypedEvent< - [string, number], - TokenLiquidationThresholdUpdatedEventObject ->; - -export type TokenLiquidationThresholdUpdatedEventFilter = - TypedEventFilter; - -export interface UnpausedEventObject { - account: string; -} -export type UnpausedEvent = TypedEvent<[string], UnpausedEventObject>; - -export type UnpausedEventFilter = TypedEventFilter; - -export interface CreditConfigurator extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: CreditConfiguratorInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - _acl(overrides?: CallOverrides): Promise<[string]>; - - addCollateralToken( - token: string, - liquidationThreshold: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - addContractToUpgradeable( - addr: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - addressProvider(overrides?: CallOverrides): Promise<[string]>; - - allowContract( - targetContract: string, - adapter: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - allowToken( - token: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - allowedContracts( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - allowedContractsCount(overrides?: CallOverrides): Promise<[BigNumber]>; - - creditFacade(overrides?: CallOverrides): Promise<[string]>; - - creditManager(overrides?: CallOverrides): Promise<[string]>; - - forbidContract( - targetContract: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - forbidToken( - token: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise<[boolean]>; - - removeContractFromUpgradeable( - addr: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setExpirationDate( - newExpirationDate: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setFees( - _feeInterest: BigNumberish, - _feeLiquidation: BigNumberish, - _liquidationPremium: BigNumberish, - _feeLiquidationExpired: BigNumberish, - _liquidationPremiumExpired: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setIncreaseDebtForbidden( - _mode: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setLimitPerBlock( - newLimit: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setLimits( - _minBorrowedAmount: BigNumberish, - _maxBorrowedAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setLiquidationThreshold( - token: string, - liquidationThreshold: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setMaxEnabledTokens( - maxEnabledTokens: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise<[string]>; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upgradeCreditConfigurator( - _creditConfigurator: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upgradeCreditFacade( - _creditFacade: string, - migrateParams: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upgradePriceOracle( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise<[BigNumber]>; - }; - - _acl(overrides?: CallOverrides): Promise; - - addCollateralToken( - token: string, - liquidationThreshold: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - addContractToUpgradeable( - addr: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - addressProvider(overrides?: CallOverrides): Promise; - - allowContract( - targetContract: string, - adapter: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - allowToken( - token: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - allowedContracts(i: BigNumberish, overrides?: CallOverrides): Promise; - - allowedContractsCount(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - forbidContract( - targetContract: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - forbidToken( - token: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise; - - removeContractFromUpgradeable( - addr: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setExpirationDate( - newExpirationDate: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setFees( - _feeInterest: BigNumberish, - _feeLiquidation: BigNumberish, - _liquidationPremium: BigNumberish, - _feeLiquidationExpired: BigNumberish, - _liquidationPremiumExpired: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setIncreaseDebtForbidden( - _mode: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setLimitPerBlock( - newLimit: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setLimits( - _minBorrowedAmount: BigNumberish, - _maxBorrowedAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setLiquidationThreshold( - token: string, - liquidationThreshold: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setMaxEnabledTokens( - maxEnabledTokens: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upgradeCreditConfigurator( - _creditConfigurator: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upgradeCreditFacade( - _creditFacade: string, - migrateParams: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upgradePriceOracle( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise; - - callStatic: { - _acl(overrides?: CallOverrides): Promise; - - addCollateralToken( - token: string, - liquidationThreshold: BigNumberish, - overrides?: CallOverrides - ): Promise; - - addContractToUpgradeable( - addr: string, - overrides?: CallOverrides - ): Promise; - - addressProvider(overrides?: CallOverrides): Promise; - - allowContract( - targetContract: string, - adapter: string, - overrides?: CallOverrides - ): Promise; - - allowToken(token: string, overrides?: CallOverrides): Promise; - - allowedContracts( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - allowedContractsCount(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - forbidContract( - targetContract: string, - overrides?: CallOverrides - ): Promise; - - forbidToken(token: string, overrides?: CallOverrides): Promise; - - pause(overrides?: CallOverrides): Promise; - - paused(overrides?: CallOverrides): Promise; - - removeContractFromUpgradeable( - addr: string, - overrides?: CallOverrides - ): Promise; - - setExpirationDate( - newExpirationDate: BigNumberish, - overrides?: CallOverrides - ): Promise; - - setFees( - _feeInterest: BigNumberish, - _feeLiquidation: BigNumberish, - _liquidationPremium: BigNumberish, - _feeLiquidationExpired: BigNumberish, - _liquidationPremiumExpired: BigNumberish, - overrides?: CallOverrides - ): Promise; - - setIncreaseDebtForbidden( - _mode: boolean, - overrides?: CallOverrides - ): Promise; - - setLimitPerBlock( - newLimit: BigNumberish, - overrides?: CallOverrides - ): Promise; - - setLimits( - _minBorrowedAmount: BigNumberish, - _maxBorrowedAmount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - setLiquidationThreshold( - token: string, - liquidationThreshold: BigNumberish, - overrides?: CallOverrides - ): Promise; - - setMaxEnabledTokens( - maxEnabledTokens: BigNumberish, - overrides?: CallOverrides - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - - unpause(overrides?: CallOverrides): Promise; - - upgradeCreditConfigurator( - _creditConfigurator: string, - overrides?: CallOverrides - ): Promise; - - upgradeCreditFacade( - _creditFacade: string, - migrateParams: boolean, - overrides?: CallOverrides - ): Promise; - - upgradePriceOracle(overrides?: CallOverrides): Promise; - - version(overrides?: CallOverrides): Promise; - }; - - filters: { - "AddedToUpgradeable(address)"(arg0?: null): AddedToUpgradeableEventFilter; - AddedToUpgradeable(arg0?: null): AddedToUpgradeableEventFilter; - - "ContractAllowed(address,address)"( - protocol?: string | null, - adapter?: string | null - ): ContractAllowedEventFilter; - ContractAllowed( - protocol?: string | null, - adapter?: string | null - ): ContractAllowedEventFilter; - - "ContractForbidden(address)"( - protocol?: string | null - ): ContractForbiddenEventFilter; - ContractForbidden(protocol?: string | null): ContractForbiddenEventFilter; - - "CreditConfiguratorUpgraded(address)"( - newCreditConfigurator?: string | null - ): CreditConfiguratorUpgradedEventFilter; - CreditConfiguratorUpgraded( - newCreditConfigurator?: string | null - ): CreditConfiguratorUpgradedEventFilter; - - "CreditFacadeUpgraded(address)"( - newCreditFacade?: string | null - ): CreditFacadeUpgradedEventFilter; - CreditFacadeUpgraded( - newCreditFacade?: string | null - ): CreditFacadeUpgradedEventFilter; - - "DegenModeUpdated(bool)"(arg0?: null): DegenModeUpdatedEventFilter; - DegenModeUpdated(arg0?: null): DegenModeUpdatedEventFilter; - - "ExpirationDateUpdated(uint40)"( - arg0?: null - ): ExpirationDateUpdatedEventFilter; - ExpirationDateUpdated(arg0?: null): ExpirationDateUpdatedEventFilter; - - "FeesUpdated(uint16,uint16,uint16,uint16,uint16)"( - feeInterest?: null, - feeLiquidation?: null, - liquidationPremium?: null, - feeLiquidationExpired?: null, - liquidationPremiumExpired?: null - ): FeesUpdatedEventFilter; - FeesUpdated( - feeInterest?: null, - feeLiquidation?: null, - liquidationPremium?: null, - feeLiquidationExpired?: null, - liquidationPremiumExpired?: null - ): FeesUpdatedEventFilter; - - "IncreaseDebtModeUpdated(bool)"( - arg0?: null - ): IncreaseDebtModeUpdatedEventFilter; - IncreaseDebtModeUpdated(arg0?: null): IncreaseDebtModeUpdatedEventFilter; - - "LimitPerBlockUpdated(uint128)"( - arg0?: null - ): LimitPerBlockUpdatedEventFilter; - LimitPerBlockUpdated(arg0?: null): LimitPerBlockUpdatedEventFilter; - - "LimitsUpdated(uint256,uint256)"( - minBorrowedAmount?: null, - maxBorrowedAmount?: null - ): LimitsUpdatedEventFilter; - LimitsUpdated( - minBorrowedAmount?: null, - maxBorrowedAmount?: null - ): LimitsUpdatedEventFilter; - - "MaxEnabledTokensUpdated(uint8)"( - arg0?: null - ): MaxEnabledTokensUpdatedEventFilter; - MaxEnabledTokensUpdated(arg0?: null): MaxEnabledTokensUpdatedEventFilter; - - "Paused(address)"(account?: null): PausedEventFilter; - Paused(account?: null): PausedEventFilter; - - "PriceOracleUpgraded(address)"( - newPriceOracle?: string | null - ): PriceOracleUpgradedEventFilter; - PriceOracleUpgraded( - newPriceOracle?: string | null - ): PriceOracleUpgradedEventFilter; - - "RemovedFromUpgradeable(address)"( - arg0?: null - ): RemovedFromUpgradeableEventFilter; - RemovedFromUpgradeable(arg0?: null): RemovedFromUpgradeableEventFilter; - - "TokenAllowed(address)"(token?: string | null): TokenAllowedEventFilter; - TokenAllowed(token?: string | null): TokenAllowedEventFilter; - - "TokenForbidden(address)"(token?: string | null): TokenForbiddenEventFilter; - TokenForbidden(token?: string | null): TokenForbiddenEventFilter; - - "TokenLiquidationThresholdUpdated(address,uint16)"( - token?: string | null, - liquidityThreshold?: null - ): TokenLiquidationThresholdUpdatedEventFilter; - TokenLiquidationThresholdUpdated( - token?: string | null, - liquidityThreshold?: null - ): TokenLiquidationThresholdUpdatedEventFilter; - - "Unpaused(address)"(account?: null): UnpausedEventFilter; - Unpaused(account?: null): UnpausedEventFilter; - }; - - estimateGas: { - _acl(overrides?: CallOverrides): Promise; - - addCollateralToken( - token: string, - liquidationThreshold: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - addContractToUpgradeable( - addr: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - addressProvider(overrides?: CallOverrides): Promise; - - allowContract( - targetContract: string, - adapter: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - allowToken( - token: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - allowedContracts( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - allowedContractsCount(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - forbidContract( - targetContract: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - forbidToken( - token: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise; - - removeContractFromUpgradeable( - addr: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setExpirationDate( - newExpirationDate: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setFees( - _feeInterest: BigNumberish, - _feeLiquidation: BigNumberish, - _liquidationPremium: BigNumberish, - _feeLiquidationExpired: BigNumberish, - _liquidationPremiumExpired: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setIncreaseDebtForbidden( - _mode: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setLimitPerBlock( - newLimit: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setLimits( - _minBorrowedAmount: BigNumberish, - _maxBorrowedAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setLiquidationThreshold( - token: string, - liquidationThreshold: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setMaxEnabledTokens( - maxEnabledTokens: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upgradeCreditConfigurator( - _creditConfigurator: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upgradeCreditFacade( - _creditFacade: string, - migrateParams: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upgradePriceOracle( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - _acl(overrides?: CallOverrides): Promise; - - addCollateralToken( - token: string, - liquidationThreshold: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - addContractToUpgradeable( - addr: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - addressProvider(overrides?: CallOverrides): Promise; - - allowContract( - targetContract: string, - adapter: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - allowToken( - token: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - allowedContracts( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - allowedContractsCount( - overrides?: CallOverrides - ): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - forbidContract( - targetContract: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - forbidToken( - token: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise; - - removeContractFromUpgradeable( - addr: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setExpirationDate( - newExpirationDate: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setFees( - _feeInterest: BigNumberish, - _feeLiquidation: BigNumberish, - _liquidationPremium: BigNumberish, - _feeLiquidationExpired: BigNumberish, - _liquidationPremiumExpired: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setIncreaseDebtForbidden( - _mode: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setLimitPerBlock( - newLimit: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setLimits( - _minBorrowedAmount: BigNumberish, - _maxBorrowedAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setLiquidationThreshold( - token: string, - liquidationThreshold: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setMaxEnabledTokens( - maxEnabledTokens: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upgradeCreditConfigurator( - _creditConfigurator: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upgradeCreditFacade( - _creditFacade: string, - migrateParams: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upgradePriceOracle( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/credit/CreditFacade.ts b/src/types/contracts/credit/CreditFacade.ts deleted file mode 100644 index c1683848..00000000 --- a/src/types/contracts/credit/CreditFacade.ts +++ /dev/null @@ -1,1654 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PayableOverrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../common"; - -export type MultiCallStruct = { target: string; callData: BytesLike }; - -export type MultiCallStructOutput = [string, string] & { - target: string; - callData: string; -}; - -export interface CreditFacadeInterface extends utils.Interface { - functions: { - "addCollateral(address,address,uint256)": FunctionFragment; - "addToUpgradeable(address)": FunctionFragment; - "approve(address,address,uint256)": FunctionFragment; - "approveAccountTransfer(address,bool)": FunctionFragment; - "calcCreditAccountHealthFactor(address)": FunctionFragment; - "calcTotalValue(address)": FunctionFragment; - "closeCreditAccount(address,uint256,bool,(address,bytes)[])": FunctionFragment; - "creditManager()": FunctionFragment; - "decreaseDebt(uint256)": FunctionFragment; - "degenNFT()": FunctionFragment; - "enableToken(address)": FunctionFragment; - "expirable()": FunctionFragment; - "getTotalBorrowedInBlock()": FunctionFragment; - "hasOpenedCreditAccount(address)": FunctionFragment; - "increaseDebt(uint256)": FunctionFragment; - "isTokenAllowed(address)": FunctionFragment; - "isUpgradeableContract(address)": FunctionFragment; - "limits()": FunctionFragment; - "liquidateCreditAccount(address,address,uint256,bool,(address,bytes)[])": FunctionFragment; - "liquidateExpiredCreditAccount(address,address,uint256,bool,(address,bytes)[])": FunctionFragment; - "multicall((address,bytes)[])": FunctionFragment; - "openCreditAccount(uint256,address,uint16,uint16)": FunctionFragment; - "openCreditAccountMulticall(uint256,address,(address,bytes)[],uint16)": FunctionFragment; - "params()": FunctionFragment; - "removeFromUpgradeable(address)": FunctionFragment; - "setCreditAccountLimits(uint128,uint128)": FunctionFragment; - "setExpirationDate(uint40)": FunctionFragment; - "setIncreaseDebtForbidden(bool)": FunctionFragment; - "setLimitPerBlock(uint128)": FunctionFragment; - "transferAccountOwnership(address)": FunctionFragment; - "transfersAllowed(address,address)": FunctionFragment; - "underlying()": FunctionFragment; - "upgradeableContract(uint256)": FunctionFragment; - "upgradeableContractsList()": FunctionFragment; - "version()": FunctionFragment; - "wethAddress()": FunctionFragment; - "whitelisted()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "addCollateral" - | "addToUpgradeable" - | "approve" - | "approveAccountTransfer" - | "calcCreditAccountHealthFactor" - | "calcTotalValue" - | "closeCreditAccount" - | "creditManager" - | "decreaseDebt" - | "degenNFT" - | "enableToken" - | "expirable" - | "getTotalBorrowedInBlock" - | "hasOpenedCreditAccount" - | "increaseDebt" - | "isTokenAllowed" - | "isUpgradeableContract" - | "limits" - | "liquidateCreditAccount" - | "liquidateExpiredCreditAccount" - | "multicall" - | "openCreditAccount" - | "openCreditAccountMulticall" - | "params" - | "removeFromUpgradeable" - | "setCreditAccountLimits" - | "setExpirationDate" - | "setIncreaseDebtForbidden" - | "setLimitPerBlock" - | "transferAccountOwnership" - | "transfersAllowed" - | "underlying" - | "upgradeableContract" - | "upgradeableContractsList" - | "version" - | "wethAddress" - | "whitelisted" - ): FunctionFragment; - - encodeFunctionData( - functionFragment: "addCollateral", - values: [string, string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "addToUpgradeable", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "approve", - values: [string, string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "approveAccountTransfer", - values: [string, boolean] - ): string; - encodeFunctionData( - functionFragment: "calcCreditAccountHealthFactor", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "calcTotalValue", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "closeCreditAccount", - values: [string, BigNumberish, boolean, MultiCallStruct[]] - ): string; - encodeFunctionData( - functionFragment: "creditManager", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "decreaseDebt", - values: [BigNumberish] - ): string; - encodeFunctionData(functionFragment: "degenNFT", values?: undefined): string; - encodeFunctionData(functionFragment: "enableToken", values: [string]): string; - encodeFunctionData(functionFragment: "expirable", values?: undefined): string; - encodeFunctionData( - functionFragment: "getTotalBorrowedInBlock", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "hasOpenedCreditAccount", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "increaseDebt", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "isTokenAllowed", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "isUpgradeableContract", - values: [string] - ): string; - encodeFunctionData(functionFragment: "limits", values?: undefined): string; - encodeFunctionData( - functionFragment: "liquidateCreditAccount", - values: [string, string, BigNumberish, boolean, MultiCallStruct[]] - ): string; - encodeFunctionData( - functionFragment: "liquidateExpiredCreditAccount", - values: [string, string, BigNumberish, boolean, MultiCallStruct[]] - ): string; - encodeFunctionData( - functionFragment: "multicall", - values: [MultiCallStruct[]] - ): string; - encodeFunctionData( - functionFragment: "openCreditAccount", - values: [BigNumberish, string, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "openCreditAccountMulticall", - values: [BigNumberish, string, MultiCallStruct[], BigNumberish] - ): string; - encodeFunctionData(functionFragment: "params", values?: undefined): string; - encodeFunctionData( - functionFragment: "removeFromUpgradeable", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "setCreditAccountLimits", - values: [BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "setExpirationDate", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "setIncreaseDebtForbidden", - values: [boolean] - ): string; - encodeFunctionData( - functionFragment: "setLimitPerBlock", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "transferAccountOwnership", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "transfersAllowed", - values: [string, string] - ): string; - encodeFunctionData( - functionFragment: "underlying", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "upgradeableContract", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "upgradeableContractsList", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "version", values?: undefined): string; - encodeFunctionData( - functionFragment: "wethAddress", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "whitelisted", - values?: undefined - ): string; - - decodeFunctionResult( - functionFragment: "addCollateral", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "addToUpgradeable", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "approveAccountTransfer", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "calcCreditAccountHealthFactor", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "calcTotalValue", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "closeCreditAccount", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditManager", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "decreaseDebt", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "degenNFT", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "enableToken", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "expirable", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "getTotalBorrowedInBlock", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "hasOpenedCreditAccount", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "increaseDebt", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "isTokenAllowed", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "isUpgradeableContract", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "limits", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "liquidateCreditAccount", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "liquidateExpiredCreditAccount", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "multicall", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "openCreditAccount", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "openCreditAccountMulticall", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "params", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "removeFromUpgradeable", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "setCreditAccountLimits", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "setExpirationDate", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "setIncreaseDebtForbidden", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "setLimitPerBlock", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "transferAccountOwnership", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "transfersAllowed", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "underlying", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "upgradeableContract", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "upgradeableContractsList", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "version", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "wethAddress", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "whitelisted", - data: BytesLike - ): Result; - - events: { - "AddCollateral(address,address,uint256)": EventFragment; - "CloseCreditAccount(address,address)": EventFragment; - "DecreaseBorrowedAmount(address,uint256)": EventFragment; - "IncreaseBorrowedAmount(address,uint256)": EventFragment; - "LiquidateCreditAccount(address,address,address,uint256)": EventFragment; - "LiquidateExpiredCreditAccount(address,address,address,uint256)": EventFragment; - "MultiCallFinished()": EventFragment; - "MultiCallStarted(address)": EventFragment; - "OpenCreditAccount(address,address,uint256,uint16)": EventFragment; - "TokenDisabled(address,address)": EventFragment; - "TokenEnabled(address,address)": EventFragment; - "TransferAccount(address,address)": EventFragment; - "TransferAccountAllowed(address,address,bool)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "AddCollateral"): EventFragment; - getEvent(nameOrSignatureOrTopic: "CloseCreditAccount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "DecreaseBorrowedAmount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "IncreaseBorrowedAmount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "LiquidateCreditAccount"): EventFragment; - getEvent( - nameOrSignatureOrTopic: "LiquidateExpiredCreditAccount" - ): EventFragment; - getEvent(nameOrSignatureOrTopic: "MultiCallFinished"): EventFragment; - getEvent(nameOrSignatureOrTopic: "MultiCallStarted"): EventFragment; - getEvent(nameOrSignatureOrTopic: "OpenCreditAccount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TokenDisabled"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TokenEnabled"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TransferAccount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TransferAccountAllowed"): EventFragment; -} - -export interface AddCollateralEventObject { - onBehalfOf: string; - token: string; - value: BigNumber; -} -export type AddCollateralEvent = TypedEvent< - [string, string, BigNumber], - AddCollateralEventObject ->; - -export type AddCollateralEventFilter = TypedEventFilter; - -export interface CloseCreditAccountEventObject { - owner: string; - to: string; -} -export type CloseCreditAccountEvent = TypedEvent< - [string, string], - CloseCreditAccountEventObject ->; - -export type CloseCreditAccountEventFilter = - TypedEventFilter; - -export interface DecreaseBorrowedAmountEventObject { - borrower: string; - amount: BigNumber; -} -export type DecreaseBorrowedAmountEvent = TypedEvent< - [string, BigNumber], - DecreaseBorrowedAmountEventObject ->; - -export type DecreaseBorrowedAmountEventFilter = - TypedEventFilter; - -export interface IncreaseBorrowedAmountEventObject { - borrower: string; - amount: BigNumber; -} -export type IncreaseBorrowedAmountEvent = TypedEvent< - [string, BigNumber], - IncreaseBorrowedAmountEventObject ->; - -export type IncreaseBorrowedAmountEventFilter = - TypedEventFilter; - -export interface LiquidateCreditAccountEventObject { - owner: string; - liquidator: string; - to: string; - remainingFunds: BigNumber; -} -export type LiquidateCreditAccountEvent = TypedEvent< - [string, string, string, BigNumber], - LiquidateCreditAccountEventObject ->; - -export type LiquidateCreditAccountEventFilter = - TypedEventFilter; - -export interface LiquidateExpiredCreditAccountEventObject { - owner: string; - liquidator: string; - to: string; - remainingFunds: BigNumber; -} -export type LiquidateExpiredCreditAccountEvent = TypedEvent< - [string, string, string, BigNumber], - LiquidateExpiredCreditAccountEventObject ->; - -export type LiquidateExpiredCreditAccountEventFilter = - TypedEventFilter; - -export interface MultiCallFinishedEventObject {} -export type MultiCallFinishedEvent = TypedEvent< - [], - MultiCallFinishedEventObject ->; - -export type MultiCallFinishedEventFilter = - TypedEventFilter; - -export interface MultiCallStartedEventObject { - borrower: string; -} -export type MultiCallStartedEvent = TypedEvent< - [string], - MultiCallStartedEventObject ->; - -export type MultiCallStartedEventFilter = - TypedEventFilter; - -export interface OpenCreditAccountEventObject { - onBehalfOf: string; - creditAccount: string; - borrowAmount: BigNumber; - referralCode: number; -} -export type OpenCreditAccountEvent = TypedEvent< - [string, string, BigNumber, number], - OpenCreditAccountEventObject ->; - -export type OpenCreditAccountEventFilter = - TypedEventFilter; - -export interface TokenDisabledEventObject { - creditAccount: string; - token: string; -} -export type TokenDisabledEvent = TypedEvent< - [string, string], - TokenDisabledEventObject ->; - -export type TokenDisabledEventFilter = TypedEventFilter; - -export interface TokenEnabledEventObject { - creditAccount: string; - token: string; -} -export type TokenEnabledEvent = TypedEvent< - [string, string], - TokenEnabledEventObject ->; - -export type TokenEnabledEventFilter = TypedEventFilter; - -export interface TransferAccountEventObject { - oldOwner: string; - newOwner: string; -} -export type TransferAccountEvent = TypedEvent< - [string, string], - TransferAccountEventObject ->; - -export type TransferAccountEventFilter = TypedEventFilter; - -export interface TransferAccountAllowedEventObject { - from: string; - to: string; - state: boolean; -} -export type TransferAccountAllowedEvent = TypedEvent< - [string, string, boolean], - TransferAccountAllowedEventObject ->; - -export type TransferAccountAllowedEventFilter = - TypedEventFilter; - -export interface CreditFacade extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: CreditFacadeInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - addCollateral( - onBehalfOf: string, - token: string, - amount: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - addToUpgradeable( - addr: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - approve( - targetContract: string, - token: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - approveAccountTransfer( - from: string, - state: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - calcCreditAccountHealthFactor( - creditAccount: string, - overrides?: CallOverrides - ): Promise<[BigNumber] & { hf: BigNumber }>; - - calcTotalValue( - creditAccount: string, - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber] & { total: BigNumber; twv: BigNumber }>; - - closeCreditAccount( - to: string, - skipTokenMask: BigNumberish, - convertWETH: boolean, - calls: MultiCallStruct[], - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - creditManager(overrides?: CallOverrides): Promise<[string]>; - - decreaseDebt( - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - degenNFT(overrides?: CallOverrides): Promise<[string]>; - - enableToken( - token: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - expirable(overrides?: CallOverrides): Promise<[boolean]>; - - getTotalBorrowedInBlock( - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber] & { - blockLastUpdate: BigNumber; - borrowedInBlock: BigNumber; - } - >; - - hasOpenedCreditAccount( - borrower: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - increaseDebt( - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - isTokenAllowed( - token: string, - overrides?: CallOverrides - ): Promise<[boolean] & { allowed: boolean }>; - - isUpgradeableContract( - addr: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - limits( - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber] & { - minBorrowedAmount: BigNumber; - maxBorrowedAmount: BigNumber; - } - >; - - liquidateCreditAccount( - borrower: string, - to: string, - skipTokenMask: BigNumberish, - convertWETH: boolean, - calls: MultiCallStruct[], - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - liquidateExpiredCreditAccount( - borrower: string, - to: string, - skipTokenMask: BigNumberish, - convertWETH: boolean, - calls: MultiCallStruct[], - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - multicall( - calls: MultiCallStruct[], - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - openCreditAccount( - amount: BigNumberish, - onBehalfOf: string, - leverageFactor: BigNumberish, - referralCode: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - openCreditAccountMulticall( - borrowedAmount: BigNumberish, - onBehalfOf: string, - calls: MultiCallStruct[], - referralCode: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - params( - overrides?: CallOverrides - ): Promise< - [BigNumber, boolean, number] & { - maxBorrowedAmountPerBlock: BigNumber; - isIncreaseDebtForbidden: boolean; - expirationDate: number; - } - >; - - removeFromUpgradeable( - addr: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setCreditAccountLimits( - _minBorrowedAmount: BigNumberish, - _maxBorrowedAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setExpirationDate( - newExpirationDate: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setIncreaseDebtForbidden( - _mode: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setLimitPerBlock( - newLimit: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferAccountOwnership( - to: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transfersAllowed( - arg0: string, - arg1: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - underlying(overrides?: CallOverrides): Promise<[string]>; - - upgradeableContract( - index: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - upgradeableContractsList(overrides?: CallOverrides): Promise<[string[]]>; - - version(overrides?: CallOverrides): Promise<[BigNumber]>; - - wethAddress(overrides?: CallOverrides): Promise<[string]>; - - whitelisted(overrides?: CallOverrides): Promise<[boolean]>; - }; - - addCollateral( - onBehalfOf: string, - token: string, - amount: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - addToUpgradeable( - addr: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - approve( - targetContract: string, - token: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - approveAccountTransfer( - from: string, - state: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - calcCreditAccountHealthFactor( - creditAccount: string, - overrides?: CallOverrides - ): Promise; - - calcTotalValue( - creditAccount: string, - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber] & { total: BigNumber; twv: BigNumber }>; - - closeCreditAccount( - to: string, - skipTokenMask: BigNumberish, - convertWETH: boolean, - calls: MultiCallStruct[], - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - decreaseDebt( - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - degenNFT(overrides?: CallOverrides): Promise; - - enableToken( - token: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - expirable(overrides?: CallOverrides): Promise; - - getTotalBorrowedInBlock( - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber] & { - blockLastUpdate: BigNumber; - borrowedInBlock: BigNumber; - } - >; - - hasOpenedCreditAccount( - borrower: string, - overrides?: CallOverrides - ): Promise; - - increaseDebt( - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - isTokenAllowed(token: string, overrides?: CallOverrides): Promise; - - isUpgradeableContract( - addr: string, - overrides?: CallOverrides - ): Promise; - - limits( - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber] & { - minBorrowedAmount: BigNumber; - maxBorrowedAmount: BigNumber; - } - >; - - liquidateCreditAccount( - borrower: string, - to: string, - skipTokenMask: BigNumberish, - convertWETH: boolean, - calls: MultiCallStruct[], - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - liquidateExpiredCreditAccount( - borrower: string, - to: string, - skipTokenMask: BigNumberish, - convertWETH: boolean, - calls: MultiCallStruct[], - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - multicall( - calls: MultiCallStruct[], - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - openCreditAccount( - amount: BigNumberish, - onBehalfOf: string, - leverageFactor: BigNumberish, - referralCode: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - openCreditAccountMulticall( - borrowedAmount: BigNumberish, - onBehalfOf: string, - calls: MultiCallStruct[], - referralCode: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - params( - overrides?: CallOverrides - ): Promise< - [BigNumber, boolean, number] & { - maxBorrowedAmountPerBlock: BigNumber; - isIncreaseDebtForbidden: boolean; - expirationDate: number; - } - >; - - removeFromUpgradeable( - addr: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setCreditAccountLimits( - _minBorrowedAmount: BigNumberish, - _maxBorrowedAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setExpirationDate( - newExpirationDate: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setIncreaseDebtForbidden( - _mode: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setLimitPerBlock( - newLimit: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferAccountOwnership( - to: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transfersAllowed( - arg0: string, - arg1: string, - overrides?: CallOverrides - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - - upgradeableContract( - index: BigNumberish, - overrides?: CallOverrides - ): Promise; - - upgradeableContractsList(overrides?: CallOverrides): Promise; - - version(overrides?: CallOverrides): Promise; - - wethAddress(overrides?: CallOverrides): Promise; - - whitelisted(overrides?: CallOverrides): Promise; - - callStatic: { - addCollateral( - onBehalfOf: string, - token: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - addToUpgradeable(addr: string, overrides?: CallOverrides): Promise; - - approve( - targetContract: string, - token: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - approveAccountTransfer( - from: string, - state: boolean, - overrides?: CallOverrides - ): Promise; - - calcCreditAccountHealthFactor( - creditAccount: string, - overrides?: CallOverrides - ): Promise; - - calcTotalValue( - creditAccount: string, - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber] & { total: BigNumber; twv: BigNumber }>; - - closeCreditAccount( - to: string, - skipTokenMask: BigNumberish, - convertWETH: boolean, - calls: MultiCallStruct[], - overrides?: CallOverrides - ): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - decreaseDebt( - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - degenNFT(overrides?: CallOverrides): Promise; - - enableToken(token: string, overrides?: CallOverrides): Promise; - - expirable(overrides?: CallOverrides): Promise; - - getTotalBorrowedInBlock( - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber] & { - blockLastUpdate: BigNumber; - borrowedInBlock: BigNumber; - } - >; - - hasOpenedCreditAccount( - borrower: string, - overrides?: CallOverrides - ): Promise; - - increaseDebt( - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isTokenAllowed(token: string, overrides?: CallOverrides): Promise; - - isUpgradeableContract( - addr: string, - overrides?: CallOverrides - ): Promise; - - limits( - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber] & { - minBorrowedAmount: BigNumber; - maxBorrowedAmount: BigNumber; - } - >; - - liquidateCreditAccount( - borrower: string, - to: string, - skipTokenMask: BigNumberish, - convertWETH: boolean, - calls: MultiCallStruct[], - overrides?: CallOverrides - ): Promise; - - liquidateExpiredCreditAccount( - borrower: string, - to: string, - skipTokenMask: BigNumberish, - convertWETH: boolean, - calls: MultiCallStruct[], - overrides?: CallOverrides - ): Promise; - - multicall( - calls: MultiCallStruct[], - overrides?: CallOverrides - ): Promise; - - openCreditAccount( - amount: BigNumberish, - onBehalfOf: string, - leverageFactor: BigNumberish, - referralCode: BigNumberish, - overrides?: CallOverrides - ): Promise; - - openCreditAccountMulticall( - borrowedAmount: BigNumberish, - onBehalfOf: string, - calls: MultiCallStruct[], - referralCode: BigNumberish, - overrides?: CallOverrides - ): Promise; - - params( - overrides?: CallOverrides - ): Promise< - [BigNumber, boolean, number] & { - maxBorrowedAmountPerBlock: BigNumber; - isIncreaseDebtForbidden: boolean; - expirationDate: number; - } - >; - - removeFromUpgradeable( - addr: string, - overrides?: CallOverrides - ): Promise; - - setCreditAccountLimits( - _minBorrowedAmount: BigNumberish, - _maxBorrowedAmount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - setExpirationDate( - newExpirationDate: BigNumberish, - overrides?: CallOverrides - ): Promise; - - setIncreaseDebtForbidden( - _mode: boolean, - overrides?: CallOverrides - ): Promise; - - setLimitPerBlock( - newLimit: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transferAccountOwnership( - to: string, - overrides?: CallOverrides - ): Promise; - - transfersAllowed( - arg0: string, - arg1: string, - overrides?: CallOverrides - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - - upgradeableContract( - index: BigNumberish, - overrides?: CallOverrides - ): Promise; - - upgradeableContractsList(overrides?: CallOverrides): Promise; - - version(overrides?: CallOverrides): Promise; - - wethAddress(overrides?: CallOverrides): Promise; - - whitelisted(overrides?: CallOverrides): Promise; - }; - - filters: { - "AddCollateral(address,address,uint256)"( - onBehalfOf?: string | null, - token?: string | null, - value?: null - ): AddCollateralEventFilter; - AddCollateral( - onBehalfOf?: string | null, - token?: string | null, - value?: null - ): AddCollateralEventFilter; - - "CloseCreditAccount(address,address)"( - owner?: string | null, - to?: string | null - ): CloseCreditAccountEventFilter; - CloseCreditAccount( - owner?: string | null, - to?: string | null - ): CloseCreditAccountEventFilter; - - "DecreaseBorrowedAmount(address,uint256)"( - borrower?: string | null, - amount?: null - ): DecreaseBorrowedAmountEventFilter; - DecreaseBorrowedAmount( - borrower?: string | null, - amount?: null - ): DecreaseBorrowedAmountEventFilter; - - "IncreaseBorrowedAmount(address,uint256)"( - borrower?: string | null, - amount?: null - ): IncreaseBorrowedAmountEventFilter; - IncreaseBorrowedAmount( - borrower?: string | null, - amount?: null - ): IncreaseBorrowedAmountEventFilter; - - "LiquidateCreditAccount(address,address,address,uint256)"( - owner?: string | null, - liquidator?: string | null, - to?: string | null, - remainingFunds?: null - ): LiquidateCreditAccountEventFilter; - LiquidateCreditAccount( - owner?: string | null, - liquidator?: string | null, - to?: string | null, - remainingFunds?: null - ): LiquidateCreditAccountEventFilter; - - "LiquidateExpiredCreditAccount(address,address,address,uint256)"( - owner?: string | null, - liquidator?: string | null, - to?: string | null, - remainingFunds?: null - ): LiquidateExpiredCreditAccountEventFilter; - LiquidateExpiredCreditAccount( - owner?: string | null, - liquidator?: string | null, - to?: string | null, - remainingFunds?: null - ): LiquidateExpiredCreditAccountEventFilter; - - "MultiCallFinished()"(): MultiCallFinishedEventFilter; - MultiCallFinished(): MultiCallFinishedEventFilter; - - "MultiCallStarted(address)"( - borrower?: string | null - ): MultiCallStartedEventFilter; - MultiCallStarted(borrower?: string | null): MultiCallStartedEventFilter; - - "OpenCreditAccount(address,address,uint256,uint16)"( - onBehalfOf?: string | null, - creditAccount?: string | null, - borrowAmount?: null, - referralCode?: null - ): OpenCreditAccountEventFilter; - OpenCreditAccount( - onBehalfOf?: string | null, - creditAccount?: string | null, - borrowAmount?: null, - referralCode?: null - ): OpenCreditAccountEventFilter; - - "TokenDisabled(address,address)"( - creditAccount?: null, - token?: null - ): TokenDisabledEventFilter; - TokenDisabled(creditAccount?: null, token?: null): TokenDisabledEventFilter; - - "TokenEnabled(address,address)"( - creditAccount?: null, - token?: null - ): TokenEnabledEventFilter; - TokenEnabled(creditAccount?: null, token?: null): TokenEnabledEventFilter; - - "TransferAccount(address,address)"( - oldOwner?: string | null, - newOwner?: string | null - ): TransferAccountEventFilter; - TransferAccount( - oldOwner?: string | null, - newOwner?: string | null - ): TransferAccountEventFilter; - - "TransferAccountAllowed(address,address,bool)"( - from?: string | null, - to?: string | null, - state?: null - ): TransferAccountAllowedEventFilter; - TransferAccountAllowed( - from?: string | null, - to?: string | null, - state?: null - ): TransferAccountAllowedEventFilter; - }; - - estimateGas: { - addCollateral( - onBehalfOf: string, - token: string, - amount: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - addToUpgradeable( - addr: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - approve( - targetContract: string, - token: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - approveAccountTransfer( - from: string, - state: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - calcCreditAccountHealthFactor( - creditAccount: string, - overrides?: CallOverrides - ): Promise; - - calcTotalValue( - creditAccount: string, - overrides?: CallOverrides - ): Promise; - - closeCreditAccount( - to: string, - skipTokenMask: BigNumberish, - convertWETH: boolean, - calls: MultiCallStruct[], - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - decreaseDebt( - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - degenNFT(overrides?: CallOverrides): Promise; - - enableToken( - token: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - expirable(overrides?: CallOverrides): Promise; - - getTotalBorrowedInBlock(overrides?: CallOverrides): Promise; - - hasOpenedCreditAccount( - borrower: string, - overrides?: CallOverrides - ): Promise; - - increaseDebt( - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - isTokenAllowed( - token: string, - overrides?: CallOverrides - ): Promise; - - isUpgradeableContract( - addr: string, - overrides?: CallOverrides - ): Promise; - - limits(overrides?: CallOverrides): Promise; - - liquidateCreditAccount( - borrower: string, - to: string, - skipTokenMask: BigNumberish, - convertWETH: boolean, - calls: MultiCallStruct[], - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - liquidateExpiredCreditAccount( - borrower: string, - to: string, - skipTokenMask: BigNumberish, - convertWETH: boolean, - calls: MultiCallStruct[], - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - multicall( - calls: MultiCallStruct[], - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - openCreditAccount( - amount: BigNumberish, - onBehalfOf: string, - leverageFactor: BigNumberish, - referralCode: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - openCreditAccountMulticall( - borrowedAmount: BigNumberish, - onBehalfOf: string, - calls: MultiCallStruct[], - referralCode: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - params(overrides?: CallOverrides): Promise; - - removeFromUpgradeable( - addr: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setCreditAccountLimits( - _minBorrowedAmount: BigNumberish, - _maxBorrowedAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setExpirationDate( - newExpirationDate: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setIncreaseDebtForbidden( - _mode: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setLimitPerBlock( - newLimit: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferAccountOwnership( - to: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transfersAllowed( - arg0: string, - arg1: string, - overrides?: CallOverrides - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - - upgradeableContract( - index: BigNumberish, - overrides?: CallOverrides - ): Promise; - - upgradeableContractsList(overrides?: CallOverrides): Promise; - - version(overrides?: CallOverrides): Promise; - - wethAddress(overrides?: CallOverrides): Promise; - - whitelisted(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - addCollateral( - onBehalfOf: string, - token: string, - amount: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - addToUpgradeable( - addr: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - approve( - targetContract: string, - token: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - approveAccountTransfer( - from: string, - state: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - calcCreditAccountHealthFactor( - creditAccount: string, - overrides?: CallOverrides - ): Promise; - - calcTotalValue( - creditAccount: string, - overrides?: CallOverrides - ): Promise; - - closeCreditAccount( - to: string, - skipTokenMask: BigNumberish, - convertWETH: boolean, - calls: MultiCallStruct[], - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - decreaseDebt( - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - degenNFT(overrides?: CallOverrides): Promise; - - enableToken( - token: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - expirable(overrides?: CallOverrides): Promise; - - getTotalBorrowedInBlock( - overrides?: CallOverrides - ): Promise; - - hasOpenedCreditAccount( - borrower: string, - overrides?: CallOverrides - ): Promise; - - increaseDebt( - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - isTokenAllowed( - token: string, - overrides?: CallOverrides - ): Promise; - - isUpgradeableContract( - addr: string, - overrides?: CallOverrides - ): Promise; - - limits(overrides?: CallOverrides): Promise; - - liquidateCreditAccount( - borrower: string, - to: string, - skipTokenMask: BigNumberish, - convertWETH: boolean, - calls: MultiCallStruct[], - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - liquidateExpiredCreditAccount( - borrower: string, - to: string, - skipTokenMask: BigNumberish, - convertWETH: boolean, - calls: MultiCallStruct[], - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - multicall( - calls: MultiCallStruct[], - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - openCreditAccount( - amount: BigNumberish, - onBehalfOf: string, - leverageFactor: BigNumberish, - referralCode: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - openCreditAccountMulticall( - borrowedAmount: BigNumberish, - onBehalfOf: string, - calls: MultiCallStruct[], - referralCode: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - params(overrides?: CallOverrides): Promise; - - removeFromUpgradeable( - addr: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setCreditAccountLimits( - _minBorrowedAmount: BigNumberish, - _maxBorrowedAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setExpirationDate( - newExpirationDate: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setIncreaseDebtForbidden( - _mode: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setLimitPerBlock( - newLimit: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferAccountOwnership( - to: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transfersAllowed( - arg0: string, - arg1: string, - overrides?: CallOverrides - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - - upgradeableContract( - index: BigNumberish, - overrides?: CallOverrides - ): Promise; - - upgradeableContractsList( - overrides?: CallOverrides - ): Promise; - - version(overrides?: CallOverrides): Promise; - - wethAddress(overrides?: CallOverrides): Promise; - - whitelisted(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/credit/CreditManager.ts b/src/types/contracts/credit/CreditManager.ts deleted file mode 100644 index 037b8276..00000000 --- a/src/types/contracts/credit/CreditManager.ts +++ /dev/null @@ -1,1834 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../common"; - -export interface CreditManagerInterface extends utils.Interface { - functions: { - "_accountFactory()": FunctionFragment; - "_acl()": FunctionFragment; - "adapterToContract(address)": FunctionFragment; - "addCollateral(address,address,address,uint256)": FunctionFragment; - "addToken(address)": FunctionFragment; - "approveCreditAccount(address,address,address,uint256)": FunctionFragment; - "calcClosePayments(uint256,uint8,uint256,uint256)": FunctionFragment; - "calcCreditAccountAccruedInterest(address)": FunctionFragment; - "changeContractAllowance(address,address)": FunctionFragment; - "checkAndEnableToken(address,address)": FunctionFragment; - "checkAndOptimizeEnabledTokens(address)": FunctionFragment; - "closeCreditAccount(address,uint8,uint256,address,address,uint256,bool)": FunctionFragment; - "collateralTokens(uint256)": FunctionFragment; - "collateralTokensByMask(uint256)": FunctionFragment; - "collateralTokensCount()": FunctionFragment; - "contractToAdapter(address)": FunctionFragment; - "creditAccounts(address)": FunctionFragment; - "creditConfigurator()": FunctionFragment; - "creditFacade()": FunctionFragment; - "cumulativeDropAtFastCheckRAY(address)": FunctionFragment; - "disableToken(address,address)": FunctionFragment; - "enabledTokensMap(address)": FunctionFragment; - "executeOrder(address,address,bytes)": FunctionFragment; - "fastCollateralCheck(address,address,address,uint256,uint256)": FunctionFragment; - "fees()": FunctionFragment; - "forbiddenTokenMask()": FunctionFragment; - "fullCollateralCheck(address)": FunctionFragment; - "getCreditAccountOrRevert(address)": FunctionFragment; - "liquidationThresholds(address)": FunctionFragment; - "manageDebt(address,uint256,bool)": FunctionFragment; - "maxAllowedEnabledTokenLength()": FunctionFragment; - "openCreditAccount(uint256,address)": FunctionFragment; - "pause()": FunctionFragment; - "paused()": FunctionFragment; - "pool()": FunctionFragment; - "poolService()": FunctionFragment; - "priceOracle()": FunctionFragment; - "setConfigurator(address)": FunctionFragment; - "setForbidMask(uint256)": FunctionFragment; - "setLiquidationThreshold(address,uint16)": FunctionFragment; - "setMaxEnabledTokens(uint8)": FunctionFragment; - "setParams(uint16,uint16,uint16,uint16,uint16)": FunctionFragment; - "tokenMasksMap(address)": FunctionFragment; - "transferAccountOwnership(address,address)": FunctionFragment; - "underlying()": FunctionFragment; - "universalAdapter()": FunctionFragment; - "unpause()": FunctionFragment; - "upgradeContracts(address,address)": FunctionFragment; - "version()": FunctionFragment; - "wethAddress()": FunctionFragment; - "wethGateway()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "_accountFactory" - | "_acl" - | "adapterToContract" - | "addCollateral" - | "addToken" - | "approveCreditAccount" - | "calcClosePayments" - | "calcCreditAccountAccruedInterest" - | "changeContractAllowance" - | "checkAndEnableToken" - | "checkAndOptimizeEnabledTokens" - | "closeCreditAccount" - | "collateralTokens" - | "collateralTokensByMask" - | "collateralTokensCount" - | "contractToAdapter" - | "creditAccounts" - | "creditConfigurator" - | "creditFacade" - | "cumulativeDropAtFastCheckRAY" - | "disableToken" - | "enabledTokensMap" - | "executeOrder" - | "fastCollateralCheck" - | "fees" - | "forbiddenTokenMask" - | "fullCollateralCheck" - | "getCreditAccountOrRevert" - | "liquidationThresholds" - | "manageDebt" - | "maxAllowedEnabledTokenLength" - | "openCreditAccount" - | "pause" - | "paused" - | "pool" - | "poolService" - | "priceOracle" - | "setConfigurator" - | "setForbidMask" - | "setLiquidationThreshold" - | "setMaxEnabledTokens" - | "setParams" - | "tokenMasksMap" - | "transferAccountOwnership" - | "underlying" - | "universalAdapter" - | "unpause" - | "upgradeContracts" - | "version" - | "wethAddress" - | "wethGateway" - ): FunctionFragment; - - encodeFunctionData( - functionFragment: "_accountFactory", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "_acl", values?: undefined): string; - encodeFunctionData( - functionFragment: "adapterToContract", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "addCollateral", - values: [string, string, string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "addToken", values: [string]): string; - encodeFunctionData( - functionFragment: "approveCreditAccount", - values: [string, string, string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "calcClosePayments", - values: [BigNumberish, BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "calcCreditAccountAccruedInterest", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "changeContractAllowance", - values: [string, string] - ): string; - encodeFunctionData( - functionFragment: "checkAndEnableToken", - values: [string, string] - ): string; - encodeFunctionData( - functionFragment: "checkAndOptimizeEnabledTokens", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "closeCreditAccount", - values: [ - string, - BigNumberish, - BigNumberish, - string, - string, - BigNumberish, - boolean - ] - ): string; - encodeFunctionData( - functionFragment: "collateralTokens", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "collateralTokensByMask", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "collateralTokensCount", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "contractToAdapter", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "creditAccounts", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "creditConfigurator", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditFacade", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "cumulativeDropAtFastCheckRAY", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "disableToken", - values: [string, string] - ): string; - encodeFunctionData( - functionFragment: "enabledTokensMap", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "executeOrder", - values: [string, string, BytesLike] - ): string; - encodeFunctionData( - functionFragment: "fastCollateralCheck", - values: [string, string, string, BigNumberish, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "fees", values?: undefined): string; - encodeFunctionData( - functionFragment: "forbiddenTokenMask", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "fullCollateralCheck", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "getCreditAccountOrRevert", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "liquidationThresholds", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "manageDebt", - values: [string, BigNumberish, boolean] - ): string; - encodeFunctionData( - functionFragment: "maxAllowedEnabledTokenLength", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "openCreditAccount", - values: [BigNumberish, string] - ): string; - encodeFunctionData(functionFragment: "pause", values?: undefined): string; - encodeFunctionData(functionFragment: "paused", values?: undefined): string; - encodeFunctionData(functionFragment: "pool", values?: undefined): string; - encodeFunctionData( - functionFragment: "poolService", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "priceOracle", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "setConfigurator", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "setForbidMask", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "setLiquidationThreshold", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "setMaxEnabledTokens", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "setParams", - values: [ - BigNumberish, - BigNumberish, - BigNumberish, - BigNumberish, - BigNumberish - ] - ): string; - encodeFunctionData( - functionFragment: "tokenMasksMap", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "transferAccountOwnership", - values: [string, string] - ): string; - encodeFunctionData( - functionFragment: "underlying", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "universalAdapter", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "unpause", values?: undefined): string; - encodeFunctionData( - functionFragment: "upgradeContracts", - values: [string, string] - ): string; - encodeFunctionData(functionFragment: "version", values?: undefined): string; - encodeFunctionData( - functionFragment: "wethAddress", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "wethGateway", - values?: undefined - ): string; - - decodeFunctionResult( - functionFragment: "_accountFactory", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "_acl", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "adapterToContract", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "addCollateral", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "addToken", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "approveCreditAccount", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "calcClosePayments", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "calcCreditAccountAccruedInterest", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "changeContractAllowance", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "checkAndEnableToken", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "checkAndOptimizeEnabledTokens", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "closeCreditAccount", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "collateralTokens", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "collateralTokensByMask", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "collateralTokensCount", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "contractToAdapter", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditAccounts", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditConfigurator", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditFacade", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "cumulativeDropAtFastCheckRAY", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "disableToken", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "enabledTokensMap", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "executeOrder", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "fastCollateralCheck", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "fees", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "forbiddenTokenMask", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "fullCollateralCheck", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getCreditAccountOrRevert", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "liquidationThresholds", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "manageDebt", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "maxAllowedEnabledTokenLength", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "openCreditAccount", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "pause", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "paused", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "pool", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "poolService", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "priceOracle", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "setConfigurator", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "setForbidMask", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "setLiquidationThreshold", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "setMaxEnabledTokens", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "setParams", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "tokenMasksMap", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "transferAccountOwnership", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "underlying", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "universalAdapter", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "unpause", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "upgradeContracts", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "version", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "wethAddress", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "wethGateway", - data: BytesLike - ): Result; - - events: { - "ExecuteOrder(address,address)": EventFragment; - "NewConfigurator(address)": EventFragment; - "Paused(address)": EventFragment; - "Unpaused(address)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "ExecuteOrder"): EventFragment; - getEvent(nameOrSignatureOrTopic: "NewConfigurator"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Paused"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Unpaused"): EventFragment; -} - -export interface ExecuteOrderEventObject { - borrower: string; - target: string; -} -export type ExecuteOrderEvent = TypedEvent< - [string, string], - ExecuteOrderEventObject ->; - -export type ExecuteOrderEventFilter = TypedEventFilter; - -export interface NewConfiguratorEventObject { - newConfigurator: string; -} -export type NewConfiguratorEvent = TypedEvent< - [string], - NewConfiguratorEventObject ->; - -export type NewConfiguratorEventFilter = TypedEventFilter; - -export interface PausedEventObject { - account: string; -} -export type PausedEvent = TypedEvent<[string], PausedEventObject>; - -export type PausedEventFilter = TypedEventFilter; - -export interface UnpausedEventObject { - account: string; -} -export type UnpausedEvent = TypedEvent<[string], UnpausedEventObject>; - -export type UnpausedEventFilter = TypedEventFilter; - -export interface CreditManager extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: CreditManagerInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - _accountFactory(overrides?: CallOverrides): Promise<[string]>; - - _acl(overrides?: CallOverrides): Promise<[string]>; - - adapterToContract( - arg0: string, - overrides?: CallOverrides - ): Promise<[string]>; - - addCollateral( - payer: string, - creditAccount: string, - token: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - addToken( - token: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - approveCreditAccount( - borrower: string, - targetContract: string, - token: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - calcClosePayments( - totalValue: BigNumberish, - closureActionType: BigNumberish, - borrowedAmount: BigNumberish, - borrowedAmountWithInterest: BigNumberish, - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber, BigNumber, BigNumber] & { - amountToPool: BigNumber; - remainingFunds: BigNumber; - profit: BigNumber; - loss: BigNumber; - } - >; - - calcCreditAccountAccruedInterest( - creditAccount: string, - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber] & { - borrowedAmount: BigNumber; - borrowedAmountWithInterest: BigNumber; - } - >; - - changeContractAllowance( - adapter: string, - targetContract: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - checkAndEnableToken( - creditAccount: string, - tokenOut: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - checkAndOptimizeEnabledTokens( - creditAccount: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - closeCreditAccount( - borrower: string, - closureActionType: BigNumberish, - totalValue: BigNumberish, - payer: string, - to: string, - skipTokenMask: BigNumberish, - convertWETH: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - collateralTokens( - id: BigNumberish, - overrides?: CallOverrides - ): Promise< - [string, number] & { token: string; liquidationThreshold: number } - >; - - collateralTokensByMask( - tokenMask: BigNumberish, - overrides?: CallOverrides - ): Promise< - [string, number] & { token: string; liquidationThreshold: number } - >; - - collateralTokensCount(overrides?: CallOverrides): Promise<[BigNumber]>; - - contractToAdapter( - arg0: string, - overrides?: CallOverrides - ): Promise<[string]>; - - creditAccounts(arg0: string, overrides?: CallOverrides): Promise<[string]>; - - creditConfigurator(overrides?: CallOverrides): Promise<[string]>; - - creditFacade(overrides?: CallOverrides): Promise<[string]>; - - cumulativeDropAtFastCheckRAY( - arg0: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - disableToken( - creditAccount: string, - token: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - enabledTokensMap( - arg0: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - executeOrder( - borrower: string, - targetContract: string, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fastCollateralCheck( - creditAccount: string, - tokenIn: string, - tokenOut: string, - balanceInBefore: BigNumberish, - balanceOutBefore: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fees( - overrides?: CallOverrides - ): Promise< - [number, number, number, number, number] & { - feeInterest: number; - feeLiquidation: number; - liquidationDiscount: number; - feeLiquidationExpired: number; - liquidationDiscountExpired: number; - } - >; - - forbiddenTokenMask(overrides?: CallOverrides): Promise<[BigNumber]>; - - fullCollateralCheck( - creditAccount: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getCreditAccountOrRevert( - borrower: string, - overrides?: CallOverrides - ): Promise<[string] & { result: string }>; - - liquidationThresholds( - token: string, - overrides?: CallOverrides - ): Promise<[number] & { lt: number }>; - - manageDebt( - creditAccount: string, - amount: BigNumberish, - increase: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - maxAllowedEnabledTokenLength(overrides?: CallOverrides): Promise<[number]>; - - openCreditAccount( - borrowedAmount: BigNumberish, - onBehalfOf: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise<[boolean]>; - - pool(overrides?: CallOverrides): Promise<[string]>; - - poolService(overrides?: CallOverrides): Promise<[string]>; - - priceOracle(overrides?: CallOverrides): Promise<[string]>; - - setConfigurator( - _creditConfigurator: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setForbidMask( - _forbidMask: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setLiquidationThreshold( - token: string, - liquidationThreshold: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setMaxEnabledTokens( - newMaxEnabledTokens: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setParams( - _feeInterest: BigNumberish, - _feeLiquidation: BigNumberish, - _liquidationDiscount: BigNumberish, - _feeLiquidationExpired: BigNumberish, - _liquidationDiscountExpired: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - tokenMasksMap( - token: string, - overrides?: CallOverrides - ): Promise<[BigNumber] & { mask: BigNumber }>; - - transferAccountOwnership( - from: string, - to: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise<[string]>; - - universalAdapter(overrides?: CallOverrides): Promise<[string]>; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upgradeContracts( - _creditFacade: string, - _priceOracle: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise<[BigNumber]>; - - wethAddress(overrides?: CallOverrides): Promise<[string]>; - - wethGateway(overrides?: CallOverrides): Promise<[string]>; - }; - - _accountFactory(overrides?: CallOverrides): Promise; - - _acl(overrides?: CallOverrides): Promise; - - adapterToContract(arg0: string, overrides?: CallOverrides): Promise; - - addCollateral( - payer: string, - creditAccount: string, - token: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - addToken( - token: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - approveCreditAccount( - borrower: string, - targetContract: string, - token: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - calcClosePayments( - totalValue: BigNumberish, - closureActionType: BigNumberish, - borrowedAmount: BigNumberish, - borrowedAmountWithInterest: BigNumberish, - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber, BigNumber, BigNumber] & { - amountToPool: BigNumber; - remainingFunds: BigNumber; - profit: BigNumber; - loss: BigNumber; - } - >; - - calcCreditAccountAccruedInterest( - creditAccount: string, - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber] & { - borrowedAmount: BigNumber; - borrowedAmountWithInterest: BigNumber; - } - >; - - changeContractAllowance( - adapter: string, - targetContract: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - checkAndEnableToken( - creditAccount: string, - tokenOut: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - checkAndOptimizeEnabledTokens( - creditAccount: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - closeCreditAccount( - borrower: string, - closureActionType: BigNumberish, - totalValue: BigNumberish, - payer: string, - to: string, - skipTokenMask: BigNumberish, - convertWETH: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - collateralTokens( - id: BigNumberish, - overrides?: CallOverrides - ): Promise< - [string, number] & { token: string; liquidationThreshold: number } - >; - - collateralTokensByMask( - tokenMask: BigNumberish, - overrides?: CallOverrides - ): Promise< - [string, number] & { token: string; liquidationThreshold: number } - >; - - collateralTokensCount(overrides?: CallOverrides): Promise; - - contractToAdapter(arg0: string, overrides?: CallOverrides): Promise; - - creditAccounts(arg0: string, overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - cumulativeDropAtFastCheckRAY( - arg0: string, - overrides?: CallOverrides - ): Promise; - - disableToken( - creditAccount: string, - token: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - enabledTokensMap(arg0: string, overrides?: CallOverrides): Promise; - - executeOrder( - borrower: string, - targetContract: string, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fastCollateralCheck( - creditAccount: string, - tokenIn: string, - tokenOut: string, - balanceInBefore: BigNumberish, - balanceOutBefore: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fees( - overrides?: CallOverrides - ): Promise< - [number, number, number, number, number] & { - feeInterest: number; - feeLiquidation: number; - liquidationDiscount: number; - feeLiquidationExpired: number; - liquidationDiscountExpired: number; - } - >; - - forbiddenTokenMask(overrides?: CallOverrides): Promise; - - fullCollateralCheck( - creditAccount: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getCreditAccountOrRevert( - borrower: string, - overrides?: CallOverrides - ): Promise; - - liquidationThresholds( - token: string, - overrides?: CallOverrides - ): Promise; - - manageDebt( - creditAccount: string, - amount: BigNumberish, - increase: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - maxAllowedEnabledTokenLength(overrides?: CallOverrides): Promise; - - openCreditAccount( - borrowedAmount: BigNumberish, - onBehalfOf: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise; - - pool(overrides?: CallOverrides): Promise; - - poolService(overrides?: CallOverrides): Promise; - - priceOracle(overrides?: CallOverrides): Promise; - - setConfigurator( - _creditConfigurator: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setForbidMask( - _forbidMask: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setLiquidationThreshold( - token: string, - liquidationThreshold: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setMaxEnabledTokens( - newMaxEnabledTokens: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setParams( - _feeInterest: BigNumberish, - _feeLiquidation: BigNumberish, - _liquidationDiscount: BigNumberish, - _feeLiquidationExpired: BigNumberish, - _liquidationDiscountExpired: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - tokenMasksMap(token: string, overrides?: CallOverrides): Promise; - - transferAccountOwnership( - from: string, - to: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - - universalAdapter(overrides?: CallOverrides): Promise; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upgradeContracts( - _creditFacade: string, - _priceOracle: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise; - - wethAddress(overrides?: CallOverrides): Promise; - - wethGateway(overrides?: CallOverrides): Promise; - - callStatic: { - _accountFactory(overrides?: CallOverrides): Promise; - - _acl(overrides?: CallOverrides): Promise; - - adapterToContract(arg0: string, overrides?: CallOverrides): Promise; - - addCollateral( - payer: string, - creditAccount: string, - token: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - addToken(token: string, overrides?: CallOverrides): Promise; - - approveCreditAccount( - borrower: string, - targetContract: string, - token: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - calcClosePayments( - totalValue: BigNumberish, - closureActionType: BigNumberish, - borrowedAmount: BigNumberish, - borrowedAmountWithInterest: BigNumberish, - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber, BigNumber, BigNumber] & { - amountToPool: BigNumber; - remainingFunds: BigNumber; - profit: BigNumber; - loss: BigNumber; - } - >; - - calcCreditAccountAccruedInterest( - creditAccount: string, - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber] & { - borrowedAmount: BigNumber; - borrowedAmountWithInterest: BigNumber; - } - >; - - changeContractAllowance( - adapter: string, - targetContract: string, - overrides?: CallOverrides - ): Promise; - - checkAndEnableToken( - creditAccount: string, - tokenOut: string, - overrides?: CallOverrides - ): Promise; - - checkAndOptimizeEnabledTokens( - creditAccount: string, - overrides?: CallOverrides - ): Promise; - - closeCreditAccount( - borrower: string, - closureActionType: BigNumberish, - totalValue: BigNumberish, - payer: string, - to: string, - skipTokenMask: BigNumberish, - convertWETH: boolean, - overrides?: CallOverrides - ): Promise; - - collateralTokens( - id: BigNumberish, - overrides?: CallOverrides - ): Promise< - [string, number] & { token: string; liquidationThreshold: number } - >; - - collateralTokensByMask( - tokenMask: BigNumberish, - overrides?: CallOverrides - ): Promise< - [string, number] & { token: string; liquidationThreshold: number } - >; - - collateralTokensCount(overrides?: CallOverrides): Promise; - - contractToAdapter(arg0: string, overrides?: CallOverrides): Promise; - - creditAccounts(arg0: string, overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - cumulativeDropAtFastCheckRAY( - arg0: string, - overrides?: CallOverrides - ): Promise; - - disableToken( - creditAccount: string, - token: string, - overrides?: CallOverrides - ): Promise; - - enabledTokensMap( - arg0: string, - overrides?: CallOverrides - ): Promise; - - executeOrder( - borrower: string, - targetContract: string, - data: BytesLike, - overrides?: CallOverrides - ): Promise; - - fastCollateralCheck( - creditAccount: string, - tokenIn: string, - tokenOut: string, - balanceInBefore: BigNumberish, - balanceOutBefore: BigNumberish, - overrides?: CallOverrides - ): Promise; - - fees( - overrides?: CallOverrides - ): Promise< - [number, number, number, number, number] & { - feeInterest: number; - feeLiquidation: number; - liquidationDiscount: number; - feeLiquidationExpired: number; - liquidationDiscountExpired: number; - } - >; - - forbiddenTokenMask(overrides?: CallOverrides): Promise; - - fullCollateralCheck( - creditAccount: string, - overrides?: CallOverrides - ): Promise; - - getCreditAccountOrRevert( - borrower: string, - overrides?: CallOverrides - ): Promise; - - liquidationThresholds( - token: string, - overrides?: CallOverrides - ): Promise; - - manageDebt( - creditAccount: string, - amount: BigNumberish, - increase: boolean, - overrides?: CallOverrides - ): Promise; - - maxAllowedEnabledTokenLength(overrides?: CallOverrides): Promise; - - openCreditAccount( - borrowedAmount: BigNumberish, - onBehalfOf: string, - overrides?: CallOverrides - ): Promise; - - pause(overrides?: CallOverrides): Promise; - - paused(overrides?: CallOverrides): Promise; - - pool(overrides?: CallOverrides): Promise; - - poolService(overrides?: CallOverrides): Promise; - - priceOracle(overrides?: CallOverrides): Promise; - - setConfigurator( - _creditConfigurator: string, - overrides?: CallOverrides - ): Promise; - - setForbidMask( - _forbidMask: BigNumberish, - overrides?: CallOverrides - ): Promise; - - setLiquidationThreshold( - token: string, - liquidationThreshold: BigNumberish, - overrides?: CallOverrides - ): Promise; - - setMaxEnabledTokens( - newMaxEnabledTokens: BigNumberish, - overrides?: CallOverrides - ): Promise; - - setParams( - _feeInterest: BigNumberish, - _feeLiquidation: BigNumberish, - _liquidationDiscount: BigNumberish, - _feeLiquidationExpired: BigNumberish, - _liquidationDiscountExpired: BigNumberish, - overrides?: CallOverrides - ): Promise; - - tokenMasksMap(token: string, overrides?: CallOverrides): Promise; - - transferAccountOwnership( - from: string, - to: string, - overrides?: CallOverrides - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - - universalAdapter(overrides?: CallOverrides): Promise; - - unpause(overrides?: CallOverrides): Promise; - - upgradeContracts( - _creditFacade: string, - _priceOracle: string, - overrides?: CallOverrides - ): Promise; - - version(overrides?: CallOverrides): Promise; - - wethAddress(overrides?: CallOverrides): Promise; - - wethGateway(overrides?: CallOverrides): Promise; - }; - - filters: { - "ExecuteOrder(address,address)"( - borrower?: string | null, - target?: string | null - ): ExecuteOrderEventFilter; - ExecuteOrder( - borrower?: string | null, - target?: string | null - ): ExecuteOrderEventFilter; - - "NewConfigurator(address)"( - newConfigurator?: string | null - ): NewConfiguratorEventFilter; - NewConfigurator( - newConfigurator?: string | null - ): NewConfiguratorEventFilter; - - "Paused(address)"(account?: null): PausedEventFilter; - Paused(account?: null): PausedEventFilter; - - "Unpaused(address)"(account?: null): UnpausedEventFilter; - Unpaused(account?: null): UnpausedEventFilter; - }; - - estimateGas: { - _accountFactory(overrides?: CallOverrides): Promise; - - _acl(overrides?: CallOverrides): Promise; - - adapterToContract( - arg0: string, - overrides?: CallOverrides - ): Promise; - - addCollateral( - payer: string, - creditAccount: string, - token: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - addToken( - token: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - approveCreditAccount( - borrower: string, - targetContract: string, - token: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - calcClosePayments( - totalValue: BigNumberish, - closureActionType: BigNumberish, - borrowedAmount: BigNumberish, - borrowedAmountWithInterest: BigNumberish, - overrides?: CallOverrides - ): Promise; - - calcCreditAccountAccruedInterest( - creditAccount: string, - overrides?: CallOverrides - ): Promise; - - changeContractAllowance( - adapter: string, - targetContract: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - checkAndEnableToken( - creditAccount: string, - tokenOut: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - checkAndOptimizeEnabledTokens( - creditAccount: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - closeCreditAccount( - borrower: string, - closureActionType: BigNumberish, - totalValue: BigNumberish, - payer: string, - to: string, - skipTokenMask: BigNumberish, - convertWETH: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - collateralTokens( - id: BigNumberish, - overrides?: CallOverrides - ): Promise; - - collateralTokensByMask( - tokenMask: BigNumberish, - overrides?: CallOverrides - ): Promise; - - collateralTokensCount(overrides?: CallOverrides): Promise; - - contractToAdapter( - arg0: string, - overrides?: CallOverrides - ): Promise; - - creditAccounts(arg0: string, overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - cumulativeDropAtFastCheckRAY( - arg0: string, - overrides?: CallOverrides - ): Promise; - - disableToken( - creditAccount: string, - token: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - enabledTokensMap( - arg0: string, - overrides?: CallOverrides - ): Promise; - - executeOrder( - borrower: string, - targetContract: string, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fastCollateralCheck( - creditAccount: string, - tokenIn: string, - tokenOut: string, - balanceInBefore: BigNumberish, - balanceOutBefore: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fees(overrides?: CallOverrides): Promise; - - forbiddenTokenMask(overrides?: CallOverrides): Promise; - - fullCollateralCheck( - creditAccount: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getCreditAccountOrRevert( - borrower: string, - overrides?: CallOverrides - ): Promise; - - liquidationThresholds( - token: string, - overrides?: CallOverrides - ): Promise; - - manageDebt( - creditAccount: string, - amount: BigNumberish, - increase: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - maxAllowedEnabledTokenLength(overrides?: CallOverrides): Promise; - - openCreditAccount( - borrowedAmount: BigNumberish, - onBehalfOf: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise; - - pool(overrides?: CallOverrides): Promise; - - poolService(overrides?: CallOverrides): Promise; - - priceOracle(overrides?: CallOverrides): Promise; - - setConfigurator( - _creditConfigurator: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setForbidMask( - _forbidMask: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setLiquidationThreshold( - token: string, - liquidationThreshold: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setMaxEnabledTokens( - newMaxEnabledTokens: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setParams( - _feeInterest: BigNumberish, - _feeLiquidation: BigNumberish, - _liquidationDiscount: BigNumberish, - _feeLiquidationExpired: BigNumberish, - _liquidationDiscountExpired: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - tokenMasksMap(token: string, overrides?: CallOverrides): Promise; - - transferAccountOwnership( - from: string, - to: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - - universalAdapter(overrides?: CallOverrides): Promise; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upgradeContracts( - _creditFacade: string, - _priceOracle: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise; - - wethAddress(overrides?: CallOverrides): Promise; - - wethGateway(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - _accountFactory(overrides?: CallOverrides): Promise; - - _acl(overrides?: CallOverrides): Promise; - - adapterToContract( - arg0: string, - overrides?: CallOverrides - ): Promise; - - addCollateral( - payer: string, - creditAccount: string, - token: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - addToken( - token: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - approveCreditAccount( - borrower: string, - targetContract: string, - token: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - calcClosePayments( - totalValue: BigNumberish, - closureActionType: BigNumberish, - borrowedAmount: BigNumberish, - borrowedAmountWithInterest: BigNumberish, - overrides?: CallOverrides - ): Promise; - - calcCreditAccountAccruedInterest( - creditAccount: string, - overrides?: CallOverrides - ): Promise; - - changeContractAllowance( - adapter: string, - targetContract: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - checkAndEnableToken( - creditAccount: string, - tokenOut: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - checkAndOptimizeEnabledTokens( - creditAccount: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - closeCreditAccount( - borrower: string, - closureActionType: BigNumberish, - totalValue: BigNumberish, - payer: string, - to: string, - skipTokenMask: BigNumberish, - convertWETH: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - collateralTokens( - id: BigNumberish, - overrides?: CallOverrides - ): Promise; - - collateralTokensByMask( - tokenMask: BigNumberish, - overrides?: CallOverrides - ): Promise; - - collateralTokensCount( - overrides?: CallOverrides - ): Promise; - - contractToAdapter( - arg0: string, - overrides?: CallOverrides - ): Promise; - - creditAccounts( - arg0: string, - overrides?: CallOverrides - ): Promise; - - creditConfigurator( - overrides?: CallOverrides - ): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - cumulativeDropAtFastCheckRAY( - arg0: string, - overrides?: CallOverrides - ): Promise; - - disableToken( - creditAccount: string, - token: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - enabledTokensMap( - arg0: string, - overrides?: CallOverrides - ): Promise; - - executeOrder( - borrower: string, - targetContract: string, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fastCollateralCheck( - creditAccount: string, - tokenIn: string, - tokenOut: string, - balanceInBefore: BigNumberish, - balanceOutBefore: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fees(overrides?: CallOverrides): Promise; - - forbiddenTokenMask( - overrides?: CallOverrides - ): Promise; - - fullCollateralCheck( - creditAccount: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getCreditAccountOrRevert( - borrower: string, - overrides?: CallOverrides - ): Promise; - - liquidationThresholds( - token: string, - overrides?: CallOverrides - ): Promise; - - manageDebt( - creditAccount: string, - amount: BigNumberish, - increase: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - maxAllowedEnabledTokenLength( - overrides?: CallOverrides - ): Promise; - - openCreditAccount( - borrowedAmount: BigNumberish, - onBehalfOf: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise; - - pool(overrides?: CallOverrides): Promise; - - poolService(overrides?: CallOverrides): Promise; - - priceOracle(overrides?: CallOverrides): Promise; - - setConfigurator( - _creditConfigurator: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setForbidMask( - _forbidMask: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setLiquidationThreshold( - token: string, - liquidationThreshold: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setMaxEnabledTokens( - newMaxEnabledTokens: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setParams( - _feeInterest: BigNumberish, - _feeLiquidation: BigNumberish, - _liquidationDiscount: BigNumberish, - _feeLiquidationExpired: BigNumberish, - _liquidationDiscountExpired: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - tokenMasksMap( - token: string, - overrides?: CallOverrides - ): Promise; - - transferAccountOwnership( - from: string, - to: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - - universalAdapter(overrides?: CallOverrides): Promise; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upgradeContracts( - _creditFacade: string, - _priceOracle: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise; - - wethAddress(overrides?: CallOverrides): Promise; - - wethGateway(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/credit/index.ts b/src/types/contracts/credit/index.ts deleted file mode 100644 index bd6fda45..00000000 --- a/src/types/contracts/credit/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { CreditAccount } from "./CreditAccount"; -export type { CreditConfigurator } from "./CreditConfigurator"; -export type { CreditFacade } from "./CreditFacade"; -export type { CreditManager } from "./CreditManager"; diff --git a/src/types/contracts/factories/CreditManagerFactory.ts b/src/types/contracts/factories/CreditManagerFactory.ts deleted file mode 100644 index d7481561..00000000 --- a/src/types/contracts/factories/CreditManagerFactory.ts +++ /dev/null @@ -1,539 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PayableOverrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../common"; - -export type CollateralTokenStruct = { - token: string; - liquidationThreshold: BigNumberish; -}; - -export type CollateralTokenStructOutput = [string, number] & { - token: string; - liquidationThreshold: number; -}; - -export type CreditManagerOptsStruct = { - minBorrowedAmount: BigNumberish; - maxBorrowedAmount: BigNumberish; - collateralTokens: CollateralTokenStruct[]; - degenNFT: string; - expirable: boolean; -}; - -export type CreditManagerOptsStructOutput = [ - BigNumber, - BigNumber, - CollateralTokenStructOutput[], - string, - boolean -] & { - minBorrowedAmount: BigNumber; - maxBorrowedAmount: BigNumber; - collateralTokens: CollateralTokenStructOutput[]; - degenNFT: string; - expirable: boolean; -}; - -export type AdapterStruct = { adapter: string; targetContract: string }; - -export type AdapterStructOutput = [string, string] & { - adapter: string; - targetContract: string; -}; - -export interface CreditManagerFactoryInterface extends utils.Interface { - functions: { - "adapters(uint256)": FunctionFragment; - "addAdapters((address,address)[])": FunctionFragment; - "addressProvider()": FunctionFragment; - "configure()": FunctionFragment; - "creditConfigurator()": FunctionFragment; - "creditFacade()": FunctionFragment; - "creditManager()": FunctionFragment; - "deploy(bytes,uint256)": FunctionFragment; - "destoy()": FunctionFragment; - "getAddress(bytes,uint256)": FunctionFragment; - "getRootBack()": FunctionFragment; - "owner()": FunctionFragment; - "pool()": FunctionFragment; - "renounceOwnership()": FunctionFragment; - "root()": FunctionFragment; - "transferOwnership(address)": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "adapters" - | "addAdapters" - | "addressProvider" - | "configure" - | "creditConfigurator" - | "creditFacade" - | "creditManager" - | "deploy" - | "destoy" - | "getAddress" - | "getRootBack" - | "owner" - | "pool" - | "renounceOwnership" - | "root" - | "transferOwnership" - ): FunctionFragment; - - encodeFunctionData( - functionFragment: "adapters", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "addAdapters", - values: [AdapterStruct[]] - ): string; - encodeFunctionData( - functionFragment: "addressProvider", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "configure", values?: undefined): string; - encodeFunctionData( - functionFragment: "creditConfigurator", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditFacade", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditManager", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "deploy", - values: [BytesLike, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "destoy", values?: undefined): string; - encodeFunctionData( - functionFragment: "getAddress", - values: [BytesLike, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "getRootBack", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "owner", values?: undefined): string; - encodeFunctionData(functionFragment: "pool", values?: undefined): string; - encodeFunctionData( - functionFragment: "renounceOwnership", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "root", values?: undefined): string; - encodeFunctionData( - functionFragment: "transferOwnership", - values: [string] - ): string; - - decodeFunctionResult(functionFragment: "adapters", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "addAdapters", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "addressProvider", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "configure", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "creditConfigurator", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditFacade", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditManager", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "deploy", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "destoy", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "getAddress", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "getRootBack", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "pool", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "renounceOwnership", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "root", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "transferOwnership", - data: BytesLike - ): Result; - - events: { - "OwnershipTransferred(address,address)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment; -} - -export interface OwnershipTransferredEventObject { - previousOwner: string; - newOwner: string; -} -export type OwnershipTransferredEvent = TypedEvent< - [string, string], - OwnershipTransferredEventObject ->; - -export type OwnershipTransferredEventFilter = - TypedEventFilter; - -export interface CreditManagerFactory extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: CreditManagerFactoryInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - adapters( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise<[string, string] & { adapter: string; targetContract: string }>; - - addAdapters( - _adapters: AdapterStruct[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - addressProvider(overrides?: CallOverrides): Promise<[string]>; - - configure( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise<[string]>; - - creditFacade(overrides?: CallOverrides): Promise<[string]>; - - creditManager(overrides?: CallOverrides): Promise<[string]>; - - deploy( - bytecode: BytesLike, - _salt: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - destoy( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getAddress( - bytecode: BytesLike, - _salt: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - getRootBack( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - owner(overrides?: CallOverrides): Promise<[string]>; - - pool(overrides?: CallOverrides): Promise<[string]>; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - root(overrides?: CallOverrides): Promise<[string]>; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - adapters( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise<[string, string] & { adapter: string; targetContract: string }>; - - addAdapters( - _adapters: AdapterStruct[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - addressProvider(overrides?: CallOverrides): Promise; - - configure( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - deploy( - bytecode: BytesLike, - _salt: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - destoy( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getAddress( - bytecode: BytesLike, - _salt: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getRootBack( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - owner(overrides?: CallOverrides): Promise; - - pool(overrides?: CallOverrides): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - root(overrides?: CallOverrides): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - adapters( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise<[string, string] & { adapter: string; targetContract: string }>; - - addAdapters( - _adapters: AdapterStruct[], - overrides?: CallOverrides - ): Promise; - - addressProvider(overrides?: CallOverrides): Promise; - - configure(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - deploy( - bytecode: BytesLike, - _salt: BigNumberish, - overrides?: CallOverrides - ): Promise; - - destoy(overrides?: CallOverrides): Promise; - - getAddress( - bytecode: BytesLike, - _salt: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getRootBack(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - pool(overrides?: CallOverrides): Promise; - - renounceOwnership(overrides?: CallOverrides): Promise; - - root(overrides?: CallOverrides): Promise; - - transferOwnership( - newOwner: string, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - "OwnershipTransferred(address,address)"( - previousOwner?: string | null, - newOwner?: string | null - ): OwnershipTransferredEventFilter; - OwnershipTransferred( - previousOwner?: string | null, - newOwner?: string | null - ): OwnershipTransferredEventFilter; - }; - - estimateGas: { - adapters(arg0: BigNumberish, overrides?: CallOverrides): Promise; - - addAdapters( - _adapters: AdapterStruct[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - addressProvider(overrides?: CallOverrides): Promise; - - configure( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - deploy( - bytecode: BytesLike, - _salt: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - destoy( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getAddress( - bytecode: BytesLike, - _salt: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getRootBack( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - owner(overrides?: CallOverrides): Promise; - - pool(overrides?: CallOverrides): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - root(overrides?: CallOverrides): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - adapters( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - addAdapters( - _adapters: AdapterStruct[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - addressProvider(overrides?: CallOverrides): Promise; - - configure( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - creditConfigurator( - overrides?: CallOverrides - ): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - deploy( - bytecode: BytesLike, - _salt: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - destoy( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getAddress( - bytecode: BytesLike, - _salt: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getRootBack( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - owner(overrides?: CallOverrides): Promise; - - pool(overrides?: CallOverrides): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - root(overrides?: CallOverrides): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/src/types/contracts/factories/GenesisFactory.ts b/src/types/contracts/factories/GenesisFactory.ts deleted file mode 100644 index fb52632a..00000000 --- a/src/types/contracts/factories/GenesisFactory.ts +++ /dev/null @@ -1,274 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../common"; - -export type PriceFeedConfigStruct = { token: string; priceFeed: string }; - -export type PriceFeedConfigStructOutput = [string, string] & { - token: string; - priceFeed: string; -}; - -export interface GenesisFactoryInterface extends utils.Interface { - functions: { - "acl()": FunctionFragment; - "addPriceFeeds((address,address)[])": FunctionFragment; - "addressProvider()": FunctionFragment; - "owner()": FunctionFragment; - "priceOracle()": FunctionFragment; - "renounceOwnership()": FunctionFragment; - "transferOwnership(address)": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "acl" - | "addPriceFeeds" - | "addressProvider" - | "owner" - | "priceOracle" - | "renounceOwnership" - | "transferOwnership" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "acl", values?: undefined): string; - encodeFunctionData( - functionFragment: "addPriceFeeds", - values: [PriceFeedConfigStruct[]] - ): string; - encodeFunctionData( - functionFragment: "addressProvider", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "owner", values?: undefined): string; - encodeFunctionData( - functionFragment: "priceOracle", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "renounceOwnership", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "transferOwnership", - values: [string] - ): string; - - decodeFunctionResult(functionFragment: "acl", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "addPriceFeeds", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "addressProvider", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "priceOracle", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "renounceOwnership", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "transferOwnership", - data: BytesLike - ): Result; - - events: { - "OwnershipTransferred(address,address)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment; -} - -export interface OwnershipTransferredEventObject { - previousOwner: string; - newOwner: string; -} -export type OwnershipTransferredEvent = TypedEvent< - [string, string], - OwnershipTransferredEventObject ->; - -export type OwnershipTransferredEventFilter = - TypedEventFilter; - -export interface GenesisFactory extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: GenesisFactoryInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - acl(overrides?: CallOverrides): Promise<[string]>; - - addPriceFeeds( - priceFeeds: PriceFeedConfigStruct[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - addressProvider(overrides?: CallOverrides): Promise<[string]>; - - owner(overrides?: CallOverrides): Promise<[string]>; - - priceOracle(overrides?: CallOverrides): Promise<[string]>; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - acl(overrides?: CallOverrides): Promise; - - addPriceFeeds( - priceFeeds: PriceFeedConfigStruct[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - addressProvider(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - priceOracle(overrides?: CallOverrides): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - acl(overrides?: CallOverrides): Promise; - - addPriceFeeds( - priceFeeds: PriceFeedConfigStruct[], - overrides?: CallOverrides - ): Promise; - - addressProvider(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - priceOracle(overrides?: CallOverrides): Promise; - - renounceOwnership(overrides?: CallOverrides): Promise; - - transferOwnership( - newOwner: string, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - "OwnershipTransferred(address,address)"( - previousOwner?: string | null, - newOwner?: string | null - ): OwnershipTransferredEventFilter; - OwnershipTransferred( - previousOwner?: string | null, - newOwner?: string | null - ): OwnershipTransferredEventFilter; - }; - - estimateGas: { - acl(overrides?: CallOverrides): Promise; - - addPriceFeeds( - priceFeeds: PriceFeedConfigStruct[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - addressProvider(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - priceOracle(overrides?: CallOverrides): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - acl(overrides?: CallOverrides): Promise; - - addPriceFeeds( - priceFeeds: PriceFeedConfigStruct[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - addressProvider(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - priceOracle(overrides?: CallOverrides): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/src/types/contracts/factories/PoolFactory.ts b/src/types/contracts/factories/PoolFactory.ts deleted file mode 100644 index a462dcdc..00000000 --- a/src/types/contracts/factories/PoolFactory.ts +++ /dev/null @@ -1,350 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../common"; - -export type PoolOptsStruct = { - addressProvider: string; - underlying: string; - U_optimal: BigNumberish; - R_base: BigNumberish; - R_slope1: BigNumberish; - R_slope2: BigNumberish; - expectedLiquidityLimit: BigNumberish; - withdrawFee: BigNumberish; -}; - -export type PoolOptsStructOutput = [ - string, - string, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber -] & { - addressProvider: string; - underlying: string; - U_optimal: BigNumber; - R_base: BigNumber; - R_slope1: BigNumber; - R_slope2: BigNumber; - expectedLiquidityLimit: BigNumber; - withdrawFee: BigNumber; -}; - -export interface PoolFactoryInterface extends utils.Interface { - functions: { - "addressProvider()": FunctionFragment; - "configure()": FunctionFragment; - "destoy()": FunctionFragment; - "getRootBack()": FunctionFragment; - "owner()": FunctionFragment; - "pool()": FunctionFragment; - "renounceOwnership()": FunctionFragment; - "root()": FunctionFragment; - "transferOwnership(address)": FunctionFragment; - "withdrawFee()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "addressProvider" - | "configure" - | "destoy" - | "getRootBack" - | "owner" - | "pool" - | "renounceOwnership" - | "root" - | "transferOwnership" - | "withdrawFee" - ): FunctionFragment; - - encodeFunctionData( - functionFragment: "addressProvider", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "configure", values?: undefined): string; - encodeFunctionData(functionFragment: "destoy", values?: undefined): string; - encodeFunctionData( - functionFragment: "getRootBack", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "owner", values?: undefined): string; - encodeFunctionData(functionFragment: "pool", values?: undefined): string; - encodeFunctionData( - functionFragment: "renounceOwnership", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "root", values?: undefined): string; - encodeFunctionData( - functionFragment: "transferOwnership", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "withdrawFee", - values?: undefined - ): string; - - decodeFunctionResult( - functionFragment: "addressProvider", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "configure", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "destoy", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "getRootBack", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "pool", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "renounceOwnership", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "root", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "transferOwnership", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "withdrawFee", - data: BytesLike - ): Result; - - events: { - "OwnershipTransferred(address,address)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment; -} - -export interface OwnershipTransferredEventObject { - previousOwner: string; - newOwner: string; -} -export type OwnershipTransferredEvent = TypedEvent< - [string, string], - OwnershipTransferredEventObject ->; - -export type OwnershipTransferredEventFilter = - TypedEventFilter; - -export interface PoolFactory extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: PoolFactoryInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - addressProvider(overrides?: CallOverrides): Promise<[string]>; - - configure( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - destoy( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getRootBack( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - owner(overrides?: CallOverrides): Promise<[string]>; - - pool(overrides?: CallOverrides): Promise<[string]>; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - root(overrides?: CallOverrides): Promise<[string]>; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdrawFee(overrides?: CallOverrides): Promise<[BigNumber]>; - }; - - addressProvider(overrides?: CallOverrides): Promise; - - configure( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - destoy( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getRootBack( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - owner(overrides?: CallOverrides): Promise; - - pool(overrides?: CallOverrides): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - root(overrides?: CallOverrides): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdrawFee(overrides?: CallOverrides): Promise; - - callStatic: { - addressProvider(overrides?: CallOverrides): Promise; - - configure(overrides?: CallOverrides): Promise; - - destoy(overrides?: CallOverrides): Promise; - - getRootBack(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - pool(overrides?: CallOverrides): Promise; - - renounceOwnership(overrides?: CallOverrides): Promise; - - root(overrides?: CallOverrides): Promise; - - transferOwnership( - newOwner: string, - overrides?: CallOverrides - ): Promise; - - withdrawFee(overrides?: CallOverrides): Promise; - }; - - filters: { - "OwnershipTransferred(address,address)"( - previousOwner?: string | null, - newOwner?: string | null - ): OwnershipTransferredEventFilter; - OwnershipTransferred( - previousOwner?: string | null, - newOwner?: string | null - ): OwnershipTransferredEventFilter; - }; - - estimateGas: { - addressProvider(overrides?: CallOverrides): Promise; - - configure( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - destoy( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getRootBack( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - owner(overrides?: CallOverrides): Promise; - - pool(overrides?: CallOverrides): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - root(overrides?: CallOverrides): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdrawFee(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - addressProvider(overrides?: CallOverrides): Promise; - - configure( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - destoy( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getRootBack( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - owner(overrides?: CallOverrides): Promise; - - pool(overrides?: CallOverrides): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - root(overrides?: CallOverrides): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdrawFee(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/factories/index.ts b/src/types/contracts/factories/index.ts deleted file mode 100644 index 32c6e94f..00000000 --- a/src/types/contracts/factories/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { CreditManagerFactory } from "./CreditManagerFactory"; -export type { GenesisFactory } from "./GenesisFactory"; -export type { PoolFactory } from "./PoolFactory"; diff --git a/src/types/contracts/index.ts b/src/types/contracts/index.ts index 4d51ab2c..c5c0b02e 100644 --- a/src/types/contracts/index.ts +++ b/src/types/contracts/index.ts @@ -1,29 +1,13 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ -import type * as adapters from "./adapters"; -export type { adapters }; -import type * as core from "./core"; -export type { core }; -import type * as credit from "./credit"; -export type { credit }; -import type * as factories from "./factories"; -export type { factories }; import type * as integrations from "./integrations"; export type { integrations }; import type * as interfaces from "./interfaces"; export type { interfaces }; -import type * as libraries from "./libraries"; -export type { libraries }; -import type * as oracles from "./oracles"; -export type { oracles }; import type * as pathfinder from "./pathfinder"; export type { pathfinder }; -import type * as pool from "./pool"; -export type { pool }; import type * as support from "./support"; export type { support }; import type * as test from "./test"; export type { test }; -import type * as tokens from "./tokens"; -export type { tokens }; diff --git a/src/types/contracts/pathfinder/data/Balances.sol/BalanceOps.ts b/src/types/contracts/interfaces/IACL.sol/IACLExceptions.ts similarity index 86% rename from src/types/contracts/pathfinder/data/Balances.sol/BalanceOps.ts rename to src/types/contracts/interfaces/IACL.sol/IACLExceptions.ts index 49be5a9c..4b97b15d 100644 --- a/src/types/contracts/pathfinder/data/Balances.sol/BalanceOps.ts +++ b/src/types/contracts/interfaces/IACL.sol/IACLExceptions.ts @@ -9,20 +9,20 @@ import type { TypedEvent, TypedListener, OnEvent, -} from "../../../../common"; +} from "../../../common"; -export interface BalanceOpsInterface extends utils.Interface { +export interface IACLExceptionsInterface extends utils.Interface { functions: {}; events: {}; } -export interface BalanceOps extends BaseContract { +export interface IACLExceptions extends BaseContract { connect(signerOrProvider: Signer | Provider | string): this; attach(addressOrName: string): this; deployed(): Promise; - interface: BalanceOpsInterface; + interface: IACLExceptionsInterface; queryFilter( event: TypedEventFilter, diff --git a/src/types/contracts/interfaces/IACL.sol/index.ts b/src/types/contracts/interfaces/IACL.sol/index.ts index a0223864..e76de089 100644 --- a/src/types/contracts/interfaces/IACL.sol/index.ts +++ b/src/types/contracts/interfaces/IACL.sol/index.ts @@ -3,3 +3,4 @@ /* eslint-disable */ export type { IACL } from "./IACL"; export type { IACLEvents } from "./IACLEvents"; +export type { IACLExceptions } from "./IACLExceptions"; diff --git a/src/types/contracts/interfaces/ICreditConfigurator.sol/ICreditConfigurator.ts b/src/types/contracts/interfaces/ICreditConfigurator.sol/ICreditConfigurator.ts index 122af235..9c2850d4 100644 --- a/src/types/contracts/interfaces/ICreditConfigurator.sol/ICreditConfigurator.ts +++ b/src/types/contracts/interfaces/ICreditConfigurator.sol/ICreditConfigurator.ts @@ -31,8 +31,7 @@ export interface ICreditConfiguratorInterface extends utils.Interface { "addCollateralToken(address,uint16)": FunctionFragment; "addressProvider()": FunctionFragment; "allowContract(address,address)": FunctionFragment; - "allowedContracts(uint256)": FunctionFragment; - "allowedContractsCount()": FunctionFragment; + "allowedContracts()": FunctionFragment; "creditFacade()": FunctionFragment; "creditManager()": FunctionFragment; "forbidContract(address)": FunctionFragment; @@ -46,7 +45,6 @@ export interface ICreditConfiguratorInterface extends utils.Interface { | "addressProvider" | "allowContract" | "allowedContracts" - | "allowedContractsCount" | "creditFacade" | "creditManager" | "forbidContract" @@ -68,10 +66,6 @@ export interface ICreditConfiguratorInterface extends utils.Interface { ): string; encodeFunctionData( functionFragment: "allowedContracts", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "allowedContractsCount", values?: undefined ): string; encodeFunctionData( @@ -108,10 +102,6 @@ export interface ICreditConfiguratorInterface extends utils.Interface { functionFragment: "allowedContracts", data: BytesLike ): Result; - decodeFunctionResult( - functionFragment: "allowedContractsCount", - data: BytesLike - ): Result; decodeFunctionResult( functionFragment: "creditFacade", data: BytesLike @@ -134,6 +124,8 @@ export interface ICreditConfiguratorInterface extends utils.Interface { "CreditConfiguratorUpgraded(address)": EventFragment; "CreditFacadeUpgraded(address)": EventFragment; "DegenModeUpdated(bool)": EventFragment; + "EmergencyLiquidatorAdded(address)": EventFragment; + "EmergencyLiquidatorRemoved(address)": EventFragment; "ExpirationDateUpdated(uint40)": EventFragment; "FeesUpdated(uint16,uint16,uint16,uint16,uint16)": EventFragment; "IncreaseDebtModeUpdated(bool)": EventFragment; @@ -153,6 +145,8 @@ export interface ICreditConfiguratorInterface extends utils.Interface { getEvent(nameOrSignatureOrTopic: "CreditConfiguratorUpgraded"): EventFragment; getEvent(nameOrSignatureOrTopic: "CreditFacadeUpgraded"): EventFragment; getEvent(nameOrSignatureOrTopic: "DegenModeUpdated"): EventFragment; + getEvent(nameOrSignatureOrTopic: "EmergencyLiquidatorAdded"): EventFragment; + getEvent(nameOrSignatureOrTopic: "EmergencyLiquidatorRemoved"): EventFragment; getEvent(nameOrSignatureOrTopic: "ExpirationDateUpdated"): EventFragment; getEvent(nameOrSignatureOrTopic: "FeesUpdated"): EventFragment; getEvent(nameOrSignatureOrTopic: "IncreaseDebtModeUpdated"): EventFragment; @@ -234,6 +228,28 @@ export type DegenModeUpdatedEvent = TypedEvent< export type DegenModeUpdatedEventFilter = TypedEventFilter; +export interface EmergencyLiquidatorAddedEventObject { + arg0: string; +} +export type EmergencyLiquidatorAddedEvent = TypedEvent< + [string], + EmergencyLiquidatorAddedEventObject +>; + +export type EmergencyLiquidatorAddedEventFilter = + TypedEventFilter; + +export interface EmergencyLiquidatorRemovedEventObject { + arg0: string; +} +export type EmergencyLiquidatorRemovedEvent = TypedEvent< + [string], + EmergencyLiquidatorRemovedEventObject +>; + +export type EmergencyLiquidatorRemovedEventFilter = + TypedEventFilter; + export interface ExpirationDateUpdatedEventObject { arg0: number; } @@ -395,12 +411,7 @@ export interface ICreditConfigurator extends BaseContract { overrides?: Overrides & { from?: string | Promise } ): Promise; - allowedContracts( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - allowedContractsCount(overrides?: CallOverrides): Promise<[BigNumber]>; + allowedContracts(overrides?: CallOverrides): Promise<[string[]]>; creditFacade(overrides?: CallOverrides): Promise<[string]>; @@ -430,9 +441,7 @@ export interface ICreditConfigurator extends BaseContract { overrides?: Overrides & { from?: string | Promise } ): Promise; - allowedContracts(i: BigNumberish, overrides?: CallOverrides): Promise; - - allowedContractsCount(overrides?: CallOverrides): Promise; + allowedContracts(overrides?: CallOverrides): Promise; creditFacade(overrides?: CallOverrides): Promise; @@ -462,12 +471,7 @@ export interface ICreditConfigurator extends BaseContract { overrides?: CallOverrides ): Promise; - allowedContracts( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - allowedContractsCount(overrides?: CallOverrides): Promise; + allowedContracts(overrides?: CallOverrides): Promise; creditFacade(overrides?: CallOverrides): Promise; @@ -518,6 +522,18 @@ export interface ICreditConfigurator extends BaseContract { "DegenModeUpdated(bool)"(arg0?: null): DegenModeUpdatedEventFilter; DegenModeUpdated(arg0?: null): DegenModeUpdatedEventFilter; + "EmergencyLiquidatorAdded(address)"( + arg0?: null + ): EmergencyLiquidatorAddedEventFilter; + EmergencyLiquidatorAdded(arg0?: null): EmergencyLiquidatorAddedEventFilter; + + "EmergencyLiquidatorRemoved(address)"( + arg0?: null + ): EmergencyLiquidatorRemovedEventFilter; + EmergencyLiquidatorRemoved( + arg0?: null + ): EmergencyLiquidatorRemovedEventFilter; + "ExpirationDateUpdated(uint40)"( arg0?: null ): ExpirationDateUpdatedEventFilter; @@ -605,12 +621,7 @@ export interface ICreditConfigurator extends BaseContract { overrides?: Overrides & { from?: string | Promise } ): Promise; - allowedContracts( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - allowedContractsCount(overrides?: CallOverrides): Promise; + allowedContracts(overrides?: CallOverrides): Promise; creditFacade(overrides?: CallOverrides): Promise; @@ -641,14 +652,7 @@ export interface ICreditConfigurator extends BaseContract { overrides?: Overrides & { from?: string | Promise } ): Promise; - allowedContracts( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - allowedContractsCount( - overrides?: CallOverrides - ): Promise; + allowedContracts(overrides?: CallOverrides): Promise; creditFacade(overrides?: CallOverrides): Promise; diff --git a/src/types/contracts/interfaces/ICreditConfigurator.sol/ICreditConfiguratorEvents.ts b/src/types/contracts/interfaces/ICreditConfigurator.sol/ICreditConfiguratorEvents.ts index a95819d8..4b593e38 100644 --- a/src/types/contracts/interfaces/ICreditConfigurator.sol/ICreditConfiguratorEvents.ts +++ b/src/types/contracts/interfaces/ICreditConfigurator.sol/ICreditConfiguratorEvents.ts @@ -21,6 +21,8 @@ export interface ICreditConfiguratorEventsInterface extends utils.Interface { "CreditConfiguratorUpgraded(address)": EventFragment; "CreditFacadeUpgraded(address)": EventFragment; "DegenModeUpdated(bool)": EventFragment; + "EmergencyLiquidatorAdded(address)": EventFragment; + "EmergencyLiquidatorRemoved(address)": EventFragment; "ExpirationDateUpdated(uint40)": EventFragment; "FeesUpdated(uint16,uint16,uint16,uint16,uint16)": EventFragment; "IncreaseDebtModeUpdated(bool)": EventFragment; @@ -40,6 +42,8 @@ export interface ICreditConfiguratorEventsInterface extends utils.Interface { getEvent(nameOrSignatureOrTopic: "CreditConfiguratorUpgraded"): EventFragment; getEvent(nameOrSignatureOrTopic: "CreditFacadeUpgraded"): EventFragment; getEvent(nameOrSignatureOrTopic: "DegenModeUpdated"): EventFragment; + getEvent(nameOrSignatureOrTopic: "EmergencyLiquidatorAdded"): EventFragment; + getEvent(nameOrSignatureOrTopic: "EmergencyLiquidatorRemoved"): EventFragment; getEvent(nameOrSignatureOrTopic: "ExpirationDateUpdated"): EventFragment; getEvent(nameOrSignatureOrTopic: "FeesUpdated"): EventFragment; getEvent(nameOrSignatureOrTopic: "IncreaseDebtModeUpdated"): EventFragment; @@ -121,6 +125,28 @@ export type DegenModeUpdatedEvent = TypedEvent< export type DegenModeUpdatedEventFilter = TypedEventFilter; +export interface EmergencyLiquidatorAddedEventObject { + arg0: string; +} +export type EmergencyLiquidatorAddedEvent = TypedEvent< + [string], + EmergencyLiquidatorAddedEventObject +>; + +export type EmergencyLiquidatorAddedEventFilter = + TypedEventFilter; + +export interface EmergencyLiquidatorRemovedEventObject { + arg0: string; +} +export type EmergencyLiquidatorRemovedEvent = TypedEvent< + [string], + EmergencyLiquidatorRemovedEventObject +>; + +export type EmergencyLiquidatorRemovedEventFilter = + TypedEventFilter; + export interface ExpirationDateUpdatedEventObject { arg0: number; } @@ -306,6 +332,18 @@ export interface ICreditConfiguratorEvents extends BaseContract { "DegenModeUpdated(bool)"(arg0?: null): DegenModeUpdatedEventFilter; DegenModeUpdated(arg0?: null): DegenModeUpdatedEventFilter; + "EmergencyLiquidatorAdded(address)"( + arg0?: null + ): EmergencyLiquidatorAddedEventFilter; + EmergencyLiquidatorAdded(arg0?: null): EmergencyLiquidatorAddedEventFilter; + + "EmergencyLiquidatorRemoved(address)"( + arg0?: null + ): EmergencyLiquidatorRemovedEventFilter; + EmergencyLiquidatorRemoved( + arg0?: null + ): EmergencyLiquidatorRemovedEventFilter; + "ExpirationDateUpdated(uint40)"( arg0?: null ): ExpirationDateUpdatedEventFilter; diff --git a/src/types/contracts/interfaces/ICreditFacade.sol/ICreditFacadeExtended.ts b/src/types/contracts/interfaces/ICreditFacade.sol/ICreditFacadeExtended.ts index a22b1e4d..03eb68f8 100644 --- a/src/types/contracts/interfaces/ICreditFacade.sol/ICreditFacadeExtended.ts +++ b/src/types/contracts/interfaces/ICreditFacade.sol/ICreditFacadeExtended.ts @@ -22,14 +22,21 @@ import type { OnEvent, } from "../../../common"; +export type BalanceStruct = { token: string; balance: BigNumberish }; + +export type BalanceStructOutput = [string, BigNumber] & { + token: string; + balance: BigNumber; +}; + export interface ICreditFacadeExtendedInterface extends utils.Interface { functions: { "disableToken(address)": FunctionFragment; - "revertIfBalanceLessThan(address,uint256)": FunctionFragment; + "revertIfGetLessThan((address,uint256)[])": FunctionFragment; }; getFunction( - nameOrSignatureOrTopic: "disableToken" | "revertIfBalanceLessThan" + nameOrSignatureOrTopic: "disableToken" | "revertIfGetLessThan" ): FunctionFragment; encodeFunctionData( @@ -37,8 +44,8 @@ export interface ICreditFacadeExtendedInterface extends utils.Interface { values: [string] ): string; encodeFunctionData( - functionFragment: "revertIfBalanceLessThan", - values: [string, BigNumberish] + functionFragment: "revertIfGetLessThan", + values: [BalanceStruct[]] ): string; decodeFunctionResult( @@ -46,7 +53,7 @@ export interface ICreditFacadeExtendedInterface extends utils.Interface { data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "revertIfBalanceLessThan", + functionFragment: "revertIfGetLessThan", data: BytesLike ): Result; @@ -85,9 +92,8 @@ export interface ICreditFacadeExtended extends BaseContract { overrides?: Overrides & { from?: string | Promise } ): Promise; - revertIfBalanceLessThan( - token: string, - minBalance: BigNumberish, + revertIfGetLessThan( + expected: BalanceStruct[], overrides?: Overrides & { from?: string | Promise } ): Promise; }; @@ -97,18 +103,16 @@ export interface ICreditFacadeExtended extends BaseContract { overrides?: Overrides & { from?: string | Promise } ): Promise; - revertIfBalanceLessThan( - token: string, - minBalance: BigNumberish, + revertIfGetLessThan( + expected: BalanceStruct[], overrides?: Overrides & { from?: string | Promise } ): Promise; callStatic: { disableToken(token: string, overrides?: CallOverrides): Promise; - revertIfBalanceLessThan( - token: string, - minBalance: BigNumberish, + revertIfGetLessThan( + expected: BalanceStruct[], overrides?: CallOverrides ): Promise; }; @@ -121,9 +125,8 @@ export interface ICreditFacadeExtended extends BaseContract { overrides?: Overrides & { from?: string | Promise } ): Promise; - revertIfBalanceLessThan( - token: string, - minBalance: BigNumberish, + revertIfGetLessThan( + expected: BalanceStruct[], overrides?: Overrides & { from?: string | Promise } ): Promise; }; @@ -134,9 +137,8 @@ export interface ICreditFacadeExtended extends BaseContract { overrides?: Overrides & { from?: string | Promise } ): Promise; - revertIfBalanceLessThan( - token: string, - minBalance: BigNumberish, + revertIfGetLessThan( + expected: BalanceStruct[], overrides?: Overrides & { from?: string | Promise } ): Promise; }; diff --git a/src/types/contracts/interfaces/ICreditManagerV2.sol/ICreditManagerV2.ts b/src/types/contracts/interfaces/ICreditManagerV2.sol/ICreditManagerV2.ts index 5d8546ac..b3904930 100644 --- a/src/types/contracts/interfaces/ICreditManagerV2.sol/ICreditManagerV2.ts +++ b/src/types/contracts/interfaces/ICreditManagerV2.sol/ICreditManagerV2.ts @@ -34,6 +34,7 @@ export interface ICreditManagerV2Interface extends utils.Interface { "approveCreditAccount(address,address,address,uint256)": FunctionFragment; "calcClosePayments(uint256,uint8,uint256,uint256)": FunctionFragment; "calcCreditAccountAccruedInterest(address)": FunctionFragment; + "canLiquidateWhilePaused(address)": FunctionFragment; "changeContractAllowance(address,address)": FunctionFragment; "checkAndEnableToken(address,address)": FunctionFragment; "checkAndOptimizeEnabledTokens(address)": FunctionFragment; @@ -78,6 +79,7 @@ export interface ICreditManagerV2Interface extends utils.Interface { | "approveCreditAccount" | "calcClosePayments" | "calcCreditAccountAccruedInterest" + | "canLiquidateWhilePaused" | "changeContractAllowance" | "checkAndEnableToken" | "checkAndOptimizeEnabledTokens" @@ -135,6 +137,10 @@ export interface ICreditManagerV2Interface extends utils.Interface { functionFragment: "calcCreditAccountAccruedInterest", values: [string] ): string; + encodeFunctionData( + functionFragment: "canLiquidateWhilePaused", + values: [string] + ): string; encodeFunctionData( functionFragment: "changeContractAllowance", values: [string, string] @@ -292,6 +298,10 @@ export interface ICreditManagerV2Interface extends utils.Interface { functionFragment: "calcCreditAccountAccruedInterest", data: BytesLike ): Result; + decodeFunctionResult( + functionFragment: "canLiquidateWhilePaused", + data: BytesLike + ): Result; decodeFunctionResult( functionFragment: "changeContractAllowance", data: BytesLike @@ -516,12 +526,18 @@ export interface ICreditManagerV2 extends BaseContract { creditAccount: string, overrides?: CallOverrides ): Promise< - [BigNumber, BigNumber] & { + [BigNumber, BigNumber, BigNumber] & { borrowedAmount: BigNumber; borrowedAmountWithInterest: BigNumber; + borrowedAmountWithInterestAndFees: BigNumber; } >; + canLiquidateWhilePaused( + arg0: string, + overrides?: CallOverrides + ): Promise<[boolean]>; + changeContractAllowance( adapter: string, targetContract: string, @@ -736,12 +752,18 @@ export interface ICreditManagerV2 extends BaseContract { creditAccount: string, overrides?: CallOverrides ): Promise< - [BigNumber, BigNumber] & { + [BigNumber, BigNumber, BigNumber] & { borrowedAmount: BigNumber; borrowedAmountWithInterest: BigNumber; + borrowedAmountWithInterestAndFees: BigNumber; } >; + canLiquidateWhilePaused( + arg0: string, + overrides?: CallOverrides + ): Promise; + changeContractAllowance( adapter: string, targetContract: string, @@ -947,12 +969,18 @@ export interface ICreditManagerV2 extends BaseContract { creditAccount: string, overrides?: CallOverrides ): Promise< - [BigNumber, BigNumber] & { + [BigNumber, BigNumber, BigNumber] & { borrowedAmount: BigNumber; borrowedAmountWithInterest: BigNumber; + borrowedAmountWithInterestAndFees: BigNumber; } >; + canLiquidateWhilePaused( + arg0: string, + overrides?: CallOverrides + ): Promise; + changeContractAllowance( adapter: string, targetContract: string, @@ -1177,6 +1205,11 @@ export interface ICreditManagerV2 extends BaseContract { overrides?: CallOverrides ): Promise; + canLiquidateWhilePaused( + arg0: string, + overrides?: CallOverrides + ): Promise; + changeContractAllowance( adapter: string, targetContract: string, @@ -1369,6 +1402,11 @@ export interface ICreditManagerV2 extends BaseContract { overrides?: CallOverrides ): Promise; + canLiquidateWhilePaused( + arg0: string, + overrides?: CallOverrides + ): Promise; + changeContractAllowance( adapter: string, targetContract: string, diff --git a/src/types/contracts/interfaces/IDataCompressor.sol/IDataCompressor.ts b/src/types/contracts/interfaces/IDataCompressor.sol/IDataCompressor.ts index 5c31322a..5c3c1e27 100644 --- a/src/types/contracts/interfaces/IDataCompressor.sol/IDataCompressor.ts +++ b/src/types/contracts/interfaces/IDataCompressor.sol/IDataCompressor.ts @@ -41,6 +41,7 @@ export type CreditAccountDataStruct = { creditManager: string; underlying: string; borrowedAmountPlusInterest: BigNumberish; + borrowedAmountPlusInterestAndFees: BigNumberish; totalValue: BigNumberish; healthFactor: BigNumberish; borrowRate: BigNumberish; @@ -65,6 +66,7 @@ export type CreditAccountDataStructOutput = [ BigNumber, BigNumber, BigNumber, + BigNumber, TokenBalanceStructOutput[], BigNumber, BigNumber, @@ -81,6 +83,7 @@ export type CreditAccountDataStructOutput = [ creditManager: string; underlying: string; borrowedAmountPlusInterest: BigNumber; + borrowedAmountPlusInterestAndFees: BigNumber; totalValue: BigNumber; healthFactor: BigNumber; borrowRate: BigNumber; diff --git a/src/types/@openzeppelin/contracts/token/ERC20/ERC20.ts b/src/types/contracts/interfaces/IDieselToken.sol/IDieselToken.ts similarity index 67% rename from src/types/@openzeppelin/contracts/token/ERC20/ERC20.ts rename to src/types/contracts/interfaces/IDieselToken.sol/IDieselToken.ts index 6c5e9115..92d50f7a 100644 --- a/src/types/@openzeppelin/contracts/token/ERC20/ERC20.ts +++ b/src/types/contracts/interfaces/IDieselToken.sol/IDieselToken.ts @@ -24,18 +24,14 @@ import type { TypedEvent, TypedListener, OnEvent, -} from "../../../../common"; +} from "../../../common"; -export interface ERC20Interface extends utils.Interface { +export interface IDieselTokenInterface extends utils.Interface { functions: { "allowance(address,address)": FunctionFragment; "approve(address,uint256)": FunctionFragment; "balanceOf(address)": FunctionFragment; - "decimals()": FunctionFragment; - "decreaseAllowance(address,uint256)": FunctionFragment; - "increaseAllowance(address,uint256)": FunctionFragment; - "name()": FunctionFragment; - "symbol()": FunctionFragment; + "poolService()": FunctionFragment; "totalSupply()": FunctionFragment; "transfer(address,uint256)": FunctionFragment; "transferFrom(address,address,uint256)": FunctionFragment; @@ -46,11 +42,7 @@ export interface ERC20Interface extends utils.Interface { | "allowance" | "approve" | "balanceOf" - | "decimals" - | "decreaseAllowance" - | "increaseAllowance" - | "name" - | "symbol" + | "poolService" | "totalSupply" | "transfer" | "transferFrom" @@ -65,17 +57,10 @@ export interface ERC20Interface extends utils.Interface { values: [string, BigNumberish] ): string; encodeFunctionData(functionFragment: "balanceOf", values: [string]): string; - encodeFunctionData(functionFragment: "decimals", values?: undefined): string; encodeFunctionData( - functionFragment: "decreaseAllowance", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "increaseAllowance", - values: [string, BigNumberish] + functionFragment: "poolService", + values?: undefined ): string; - encodeFunctionData(functionFragment: "name", values?: undefined): string; - encodeFunctionData(functionFragment: "symbol", values?: undefined): string; encodeFunctionData( functionFragment: "totalSupply", values?: undefined @@ -92,17 +77,10 @@ export interface ERC20Interface extends utils.Interface { decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result; decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result; decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "decreaseAllowance", - data: BytesLike - ): Result; decodeFunctionResult( - functionFragment: "increaseAllowance", + functionFragment: "poolService", data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result; decodeFunctionResult( functionFragment: "totalSupply", data: BytesLike @@ -146,12 +124,12 @@ export type TransferEvent = TypedEvent< export type TransferEventFilter = TypedEventFilter; -export interface ERC20 extends BaseContract { +export interface IDieselToken extends BaseContract { connect(signerOrProvider: Signer | Provider | string): this; attach(addressOrName: string): this; deployed(): Promise; - interface: ERC20Interface; + interface: IDieselTokenInterface; queryFilter( event: TypedEventFilter, @@ -187,23 +165,7 @@ export interface ERC20 extends BaseContract { balanceOf(account: string, overrides?: CallOverrides): Promise<[BigNumber]>; - decimals(overrides?: CallOverrides): Promise<[number]>; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise<[string]>; - - symbol(overrides?: CallOverrides): Promise<[string]>; + poolService(overrides?: CallOverrides): Promise<[string]>; totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>; @@ -235,23 +197,7 @@ export interface ERC20 extends BaseContract { balanceOf(account: string, overrides?: CallOverrides): Promise; - decimals(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - symbol(overrides?: CallOverrides): Promise; + poolService(overrides?: CallOverrides): Promise; totalSupply(overrides?: CallOverrides): Promise; @@ -283,23 +229,7 @@ export interface ERC20 extends BaseContract { balanceOf(account: string, overrides?: CallOverrides): Promise; - decimals(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: CallOverrides - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - symbol(overrides?: CallOverrides): Promise; + poolService(overrides?: CallOverrides): Promise; totalSupply(overrides?: CallOverrides): Promise; @@ -356,23 +286,7 @@ export interface ERC20 extends BaseContract { balanceOf(account: string, overrides?: CallOverrides): Promise; - decimals(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - symbol(overrides?: CallOverrides): Promise; + poolService(overrides?: CallOverrides): Promise; totalSupply(overrides?: CallOverrides): Promise; @@ -408,23 +322,7 @@ export interface ERC20 extends BaseContract { overrides?: CallOverrides ): Promise; - decimals(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - symbol(overrides?: CallOverrides): Promise; + poolService(overrides?: CallOverrides): Promise; totalSupply(overrides?: CallOverrides): Promise; diff --git a/src/types/contracts/oracles/PriceFeedChecker.ts b/src/types/contracts/interfaces/IDieselToken.sol/IDieselTokenExceptions.ts similarity index 85% rename from src/types/contracts/oracles/PriceFeedChecker.ts rename to src/types/contracts/interfaces/IDieselToken.sol/IDieselTokenExceptions.ts index 5c87776f..9960e153 100644 --- a/src/types/contracts/oracles/PriceFeedChecker.ts +++ b/src/types/contracts/interfaces/IDieselToken.sol/IDieselTokenExceptions.ts @@ -9,20 +9,20 @@ import type { TypedEvent, TypedListener, OnEvent, -} from "../../common"; +} from "../../../common"; -export interface PriceFeedCheckerInterface extends utils.Interface { +export interface IDieselTokenExceptionsInterface extends utils.Interface { functions: {}; events: {}; } -export interface PriceFeedChecker extends BaseContract { +export interface IDieselTokenExceptions extends BaseContract { connect(signerOrProvider: Signer | Provider | string): this; attach(addressOrName: string): this; deployed(): Promise; - interface: PriceFeedCheckerInterface; + interface: IDieselTokenExceptionsInterface; queryFilter( event: TypedEventFilter, diff --git a/src/types/contracts/interfaces/IDieselToken.sol/index.ts b/src/types/contracts/interfaces/IDieselToken.sol/index.ts new file mode 100644 index 00000000..a52ae1b5 --- /dev/null +++ b/src/types/contracts/interfaces/IDieselToken.sol/index.ts @@ -0,0 +1,5 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export type { IDieselToken } from "./IDieselToken"; +export type { IDieselTokenExceptions } from "./IDieselTokenExceptions"; diff --git a/src/types/contracts/interfaces/adapters/convex/IConvexV1BaseRewardPoolAdapter.sol/IConvexV1BaseRewardPoolAdapter.ts b/src/types/contracts/interfaces/adapters/convex/IConvexV1BaseRewardPoolAdapter.sol/IConvexV1BaseRewardPoolAdapter.ts index 4d7894de..4a02f853 100644 --- a/src/types/contracts/interfaces/adapters/convex/IConvexV1BaseRewardPoolAdapter.sol/IConvexV1BaseRewardPoolAdapter.ts +++ b/src/types/contracts/interfaces/adapters/convex/IConvexV1BaseRewardPoolAdapter.sol/IConvexV1BaseRewardPoolAdapter.ts @@ -30,11 +30,9 @@ export interface IConvexV1BaseRewardPoolAdapterInterface "balanceOf(address)": FunctionFragment; "creditFacade()": FunctionFragment; "creditManager()": FunctionFragment; - "crv()": FunctionFragment; "currentRewards()": FunctionFragment; "curveLPtoken()": FunctionFragment; "cvx()": FunctionFragment; - "cvxLPtoken()": FunctionFragment; "donate(uint256)": FunctionFragment; "duration()": FunctionFragment; "earned(address)": FunctionFragment; @@ -79,11 +77,9 @@ export interface IConvexV1BaseRewardPoolAdapterInterface | "balanceOf" | "creditFacade" | "creditManager" - | "crv" | "currentRewards" | "curveLPtoken" | "cvx" - | "cvxLPtoken" | "donate" | "duration" | "earned" @@ -138,7 +134,6 @@ export interface IConvexV1BaseRewardPoolAdapterInterface functionFragment: "creditManager", values?: undefined ): string; - encodeFunctionData(functionFragment: "crv", values?: undefined): string; encodeFunctionData( functionFragment: "currentRewards", values?: undefined @@ -148,10 +143,6 @@ export interface IConvexV1BaseRewardPoolAdapterInterface values?: undefined ): string; encodeFunctionData(functionFragment: "cvx", values?: undefined): string; - encodeFunctionData( - functionFragment: "cvxLPtoken", - values?: undefined - ): string; encodeFunctionData( functionFragment: "donate", values: [BigNumberish] @@ -289,7 +280,6 @@ export interface IConvexV1BaseRewardPoolAdapterInterface functionFragment: "creditManager", data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "crv", data: BytesLike): Result; decodeFunctionResult( functionFragment: "currentRewards", data: BytesLike @@ -299,7 +289,6 @@ export interface IConvexV1BaseRewardPoolAdapterInterface data: BytesLike ): Result; decodeFunctionResult(functionFragment: "cvx", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "cvxLPtoken", data: BytesLike): Result; decodeFunctionResult(functionFragment: "donate", data: BytesLike): Result; decodeFunctionResult(functionFragment: "duration", data: BytesLike): Result; decodeFunctionResult(functionFragment: "earned", data: BytesLike): Result; @@ -448,16 +437,12 @@ export interface IConvexV1BaseRewardPoolAdapter extends BaseContract { creditManager(overrides?: CallOverrides): Promise<[string]>; - crv(overrides?: CallOverrides): Promise<[string]>; - currentRewards(overrides?: CallOverrides): Promise<[BigNumber]>; curveLPtoken(overrides?: CallOverrides): Promise<[string]>; cvx(overrides?: CallOverrides): Promise<[string]>; - cvxLPtoken(overrides?: CallOverrides): Promise<[string]>; - donate( _amount: BigNumberish, overrides?: Overrides & { from?: string | Promise } @@ -574,16 +559,12 @@ export interface IConvexV1BaseRewardPoolAdapter extends BaseContract { creditManager(overrides?: CallOverrides): Promise; - crv(overrides?: CallOverrides): Promise; - currentRewards(overrides?: CallOverrides): Promise; curveLPtoken(overrides?: CallOverrides): Promise; cvx(overrides?: CallOverrides): Promise; - cvxLPtoken(overrides?: CallOverrides): Promise; - donate( _amount: BigNumberish, overrides?: Overrides & { from?: string | Promise } @@ -700,16 +681,12 @@ export interface IConvexV1BaseRewardPoolAdapter extends BaseContract { creditManager(overrides?: CallOverrides): Promise; - crv(overrides?: CallOverrides): Promise; - currentRewards(overrides?: CallOverrides): Promise; curveLPtoken(overrides?: CallOverrides): Promise; cvx(overrides?: CallOverrides): Promise; - cvxLPtoken(overrides?: CallOverrides): Promise; - donate(_amount: BigNumberish, overrides?: CallOverrides): Promise; duration(overrides?: CallOverrides): Promise; @@ -816,16 +793,12 @@ export interface IConvexV1BaseRewardPoolAdapter extends BaseContract { creditManager(overrides?: CallOverrides): Promise; - crv(overrides?: CallOverrides): Promise; - currentRewards(overrides?: CallOverrides): Promise; curveLPtoken(overrides?: CallOverrides): Promise; cvx(overrides?: CallOverrides): Promise; - cvxLPtoken(overrides?: CallOverrides): Promise; - donate( _amount: BigNumberish, overrides?: Overrides & { from?: string | Promise } @@ -953,16 +926,12 @@ export interface IConvexV1BaseRewardPoolAdapter extends BaseContract { creditManager(overrides?: CallOverrides): Promise; - crv(overrides?: CallOverrides): Promise; - currentRewards(overrides?: CallOverrides): Promise; curveLPtoken(overrides?: CallOverrides): Promise; cvx(overrides?: CallOverrides): Promise; - cvxLPtoken(overrides?: CallOverrides): Promise; - donate( _amount: BigNumberish, overrides?: Overrides & { from?: string | Promise } diff --git a/src/types/contracts/interfaces/adapters/curve/ICurveV1Adapter.sol/ICurveV1Adapter.ts b/src/types/contracts/interfaces/adapters/curve/ICurveV1Adapter.sol/ICurveV1Adapter.ts index a5279d05..1bda3699 100644 --- a/src/types/contracts/interfaces/adapters/curve/ICurveV1Adapter.sol/ICurveV1Adapter.ts +++ b/src/types/contracts/interfaces/adapters/curve/ICurveV1Adapter.sol/ICurveV1Adapter.ts @@ -38,6 +38,7 @@ export interface ICurveV1AdapterInterface extends utils.Interface { "balances(int128)": FunctionFragment; "balances(uint256)": FunctionFragment; "block_timestamp_last()": FunctionFragment; + "calc_add_one_coin(uint256,int128)": FunctionFragment; "calc_withdraw_one_coin(uint256,int128)": FunctionFragment; "coins(int128)": FunctionFragment; "coins(uint256)": FunctionFragment; @@ -94,6 +95,7 @@ export interface ICurveV1AdapterInterface extends utils.Interface { | "balances(int128)" | "balances(uint256)" | "block_timestamp_last" + | "calc_add_one_coin" | "calc_withdraw_one_coin" | "coins(int128)" | "coins(uint256)" @@ -175,6 +177,10 @@ export interface ICurveV1AdapterInterface extends utils.Interface { functionFragment: "block_timestamp_last", values?: undefined ): string; + encodeFunctionData( + functionFragment: "calc_add_one_coin", + values: [BigNumberish, BigNumberish] + ): string; encodeFunctionData( functionFragment: "calc_withdraw_one_coin", values: [BigNumberish, BigNumberish] @@ -327,6 +333,10 @@ export interface ICurveV1AdapterInterface extends utils.Interface { functionFragment: "block_timestamp_last", data: BytesLike ): Result; + decodeFunctionResult( + functionFragment: "calc_add_one_coin", + data: BytesLike + ): Result; decodeFunctionResult( functionFragment: "calc_withdraw_one_coin", data: BytesLike @@ -515,6 +525,12 @@ export interface ICurveV1Adapter extends BaseContract { block_timestamp_last(overrides?: CallOverrides): Promise<[BigNumber]>; + calc_add_one_coin( + amount: BigNumberish, + i: BigNumberish, + overrides?: CallOverrides + ): Promise<[BigNumber]>; + calc_withdraw_one_coin( _burn_amount: BigNumberish, i: BigNumberish, @@ -699,6 +715,12 @@ export interface ICurveV1Adapter extends BaseContract { block_timestamp_last(overrides?: CallOverrides): Promise; + calc_add_one_coin( + amount: BigNumberish, + i: BigNumberish, + overrides?: CallOverrides + ): Promise; + calc_withdraw_one_coin( _burn_amount: BigNumberish, i: BigNumberish, @@ -880,6 +902,12 @@ export interface ICurveV1Adapter extends BaseContract { block_timestamp_last(overrides?: CallOverrides): Promise; + calc_add_one_coin( + amount: BigNumberish, + i: BigNumberish, + overrides?: CallOverrides + ): Promise; + calc_withdraw_one_coin( _burn_amount: BigNumberish, i: BigNumberish, @@ -1067,6 +1095,12 @@ export interface ICurveV1Adapter extends BaseContract { block_timestamp_last(overrides?: CallOverrides): Promise; + calc_add_one_coin( + amount: BigNumberish, + i: BigNumberish, + overrides?: CallOverrides + ): Promise; + calc_withdraw_one_coin( _burn_amount: BigNumberish, i: BigNumberish, @@ -1261,6 +1295,12 @@ export interface ICurveV1Adapter extends BaseContract { overrides?: CallOverrides ): Promise; + calc_add_one_coin( + amount: BigNumberish, + i: BigNumberish, + overrides?: CallOverrides + ): Promise; + calc_withdraw_one_coin( _burn_amount: BigNumberish, i: BigNumberish, diff --git a/src/types/contracts/interfaces/adapters/lido/ILidoV1Adapter.sol/ILidoV1Adapter.ts b/src/types/contracts/interfaces/adapters/lido/ILidoV1Adapter.sol/ILidoV1Adapter.ts index 7af91cdc..1e186c3d 100644 --- a/src/types/contracts/interfaces/adapters/lido/ILidoV1Adapter.sol/ILidoV1Adapter.ts +++ b/src/types/contracts/interfaces/adapters/lido/ILidoV1Adapter.sol/ILidoV1Adapter.ts @@ -43,6 +43,8 @@ export interface ILidoV1AdapterInterface extends utils.Interface { "name()": FunctionFragment; "setLimit(uint256)": FunctionFragment; "sharesOf(address)": FunctionFragment; + "submit(uint256)": FunctionFragment; + "submitAll()": FunctionFragment; "symbol()": FunctionFragment; "targetContract()": FunctionFragment; "totalSupply()": FunctionFragment; @@ -65,6 +67,8 @@ export interface ILidoV1AdapterInterface extends utils.Interface { | "name" | "setLimit" | "sharesOf" + | "submit" + | "submitAll" | "symbol" | "targetContract" | "totalSupply" @@ -115,6 +119,11 @@ export interface ILidoV1AdapterInterface extends utils.Interface { values: [BigNumberish] ): string; encodeFunctionData(functionFragment: "sharesOf", values: [string]): string; + encodeFunctionData( + functionFragment: "submit", + values: [BigNumberish] + ): string; + encodeFunctionData(functionFragment: "submitAll", values?: undefined): string; encodeFunctionData(functionFragment: "symbol", values?: undefined): string; encodeFunctionData( functionFragment: "targetContract", @@ -164,6 +173,8 @@ export interface ILidoV1AdapterInterface extends utils.Interface { decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; decodeFunctionResult(functionFragment: "setLimit", data: BytesLike): Result; decodeFunctionResult(functionFragment: "sharesOf", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "submit", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "submitAll", data: BytesLike): Result; decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result; decodeFunctionResult( functionFragment: "targetContract", @@ -261,6 +272,15 @@ export interface ILidoV1Adapter extends BaseContract { sharesOf(_account: string, overrides?: CallOverrides): Promise<[BigNumber]>; + submit( + amount: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + submitAll( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + symbol(overrides?: CallOverrides): Promise<[string]>; targetContract(overrides?: CallOverrides): Promise<[string]>; @@ -311,6 +331,15 @@ export interface ILidoV1Adapter extends BaseContract { sharesOf(_account: string, overrides?: CallOverrides): Promise; + submit( + amount: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + submitAll( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + symbol(overrides?: CallOverrides): Promise; targetContract(overrides?: CallOverrides): Promise; @@ -358,6 +387,10 @@ export interface ILidoV1Adapter extends BaseContract { sharesOf(_account: string, overrides?: CallOverrides): Promise; + submit(amount: BigNumberish, overrides?: CallOverrides): Promise; + + submitAll(overrides?: CallOverrides): Promise; + symbol(overrides?: CallOverrides): Promise; targetContract(overrides?: CallOverrides): Promise; @@ -414,6 +447,15 @@ export interface ILidoV1Adapter extends BaseContract { sharesOf(_account: string, overrides?: CallOverrides): Promise; + submit( + amount: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + submitAll( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + symbol(overrides?: CallOverrides): Promise; targetContract(overrides?: CallOverrides): Promise; @@ -477,6 +519,15 @@ export interface ILidoV1Adapter extends BaseContract { overrides?: CallOverrides ): Promise; + submit( + amount: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + submitAll( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + symbol(overrides?: CallOverrides): Promise; targetContract(overrides?: CallOverrides): Promise; diff --git a/src/types/contracts/interfaces/index.ts b/src/types/contracts/interfaces/index.ts index de4ebd3b..c6d1bba3 100644 --- a/src/types/contracts/interfaces/index.ts +++ b/src/types/contracts/interfaces/index.ts @@ -21,6 +21,8 @@ import type * as iDataCompressorSol from "./IDataCompressor.sol"; export type { iDataCompressorSol }; import type * as iDegenNftSol from "./IDegenNFT.sol"; export type { iDegenNftSol }; +import type * as iDieselTokenSol from "./IDieselToken.sol"; +export type { iDieselTokenSol }; import type * as ilpPriceFeedSol from "./ILPPriceFeed.sol"; export type { ilpPriceFeedSol }; import type * as iPoolServiceSol from "./IPoolService.sol"; diff --git a/src/types/contracts/libraries/Errors.ts b/src/types/contracts/libraries/Errors.ts deleted file mode 100644 index 315aba5b..00000000 --- a/src/types/contracts/libraries/Errors.ts +++ /dev/null @@ -1,894 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BytesLike, - CallOverrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../common"; - -export interface ErrorsInterface extends utils.Interface { - functions: { - "ACL_CALLER_NOT_CONFIGURATOR()": FunctionFragment; - "ACL_CALLER_NOT_PAUSABLE_ADMIN()": FunctionFragment; - "AF_CANT_CLOSE_CREDIT_ACCOUNT_IN_THE_SAME_BLOCK()": FunctionFragment; - "AF_CREDIT_ACCOUNT_NOT_IN_STOCK()": FunctionFragment; - "AF_EXTERNAL_ACCOUNTS_ARE_FORBIDDEN()": FunctionFragment; - "AF_MINING_IS_FINISHED()": FunctionFragment; - "AS_ADDRESS_NOT_FOUND()": FunctionFragment; - "CA_CONNECTED_CREDIT_MANAGER_ONLY()": FunctionFragment; - "CA_FACTORY_ONLY()": FunctionFragment; - "CR_CREDIT_MANAGER_ALREADY_ADDED()": FunctionFragment; - "CR_POOL_ALREADY_ADDED()": FunctionFragment; - "INCORRECT_ARRAY_LENGTH()": FunctionFragment; - "INCORRECT_PARAMETER()": FunctionFragment; - "INCORRECT_PATH_LENGTH()": FunctionFragment; - "MATH_ADDITION_OVERFLOW()": FunctionFragment; - "MATH_DIVISION_BY_ZERO()": FunctionFragment; - "MATH_MULTIPLICATION_OVERFLOW()": FunctionFragment; - "NOT_IMPLEMENTED()": FunctionFragment; - "POOL_CANT_ADD_CREDIT_MANAGER_TWICE()": FunctionFragment; - "POOL_CONNECTED_CREDIT_MANAGERS_ONLY()": FunctionFragment; - "POOL_INCOMPATIBLE_CREDIT_ACCOUNT_MANAGER()": FunctionFragment; - "POOL_INCORRECT_WITHDRAW_FEE()": FunctionFragment; - "POOL_MORE_THAN_EXPECTED_LIQUIDITY_LIMIT()": FunctionFragment; - "REGISTERED_CREDIT_ACCOUNT_MANAGERS_ONLY()": FunctionFragment; - "REGISTERED_POOLS_ONLY()": FunctionFragment; - "TD_CONTRIBUTOR_IS_NOT_REGISTERED()": FunctionFragment; - "TD_INCORRECT_WEIGHTS()": FunctionFragment; - "TD_NON_ZERO_BALANCE_AFTER_DISTRIBUTION()": FunctionFragment; - "TD_WALLET_IS_ALREADY_CONNECTED_TO_VC()": FunctionFragment; - "WG_DESTINATION_IS_NOT_WETH_COMPATIBLE()": FunctionFragment; - "WG_NOT_ENOUGH_FUNDS()": FunctionFragment; - "WG_RECEIVE_IS_NOT_ALLOWED()": FunctionFragment; - "ZERO_ADDRESS_IS_NOT_ALLOWED()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "ACL_CALLER_NOT_CONFIGURATOR" - | "ACL_CALLER_NOT_PAUSABLE_ADMIN" - | "AF_CANT_CLOSE_CREDIT_ACCOUNT_IN_THE_SAME_BLOCK" - | "AF_CREDIT_ACCOUNT_NOT_IN_STOCK" - | "AF_EXTERNAL_ACCOUNTS_ARE_FORBIDDEN" - | "AF_MINING_IS_FINISHED" - | "AS_ADDRESS_NOT_FOUND" - | "CA_CONNECTED_CREDIT_MANAGER_ONLY" - | "CA_FACTORY_ONLY" - | "CR_CREDIT_MANAGER_ALREADY_ADDED" - | "CR_POOL_ALREADY_ADDED" - | "INCORRECT_ARRAY_LENGTH" - | "INCORRECT_PARAMETER" - | "INCORRECT_PATH_LENGTH" - | "MATH_ADDITION_OVERFLOW" - | "MATH_DIVISION_BY_ZERO" - | "MATH_MULTIPLICATION_OVERFLOW" - | "NOT_IMPLEMENTED" - | "POOL_CANT_ADD_CREDIT_MANAGER_TWICE" - | "POOL_CONNECTED_CREDIT_MANAGERS_ONLY" - | "POOL_INCOMPATIBLE_CREDIT_ACCOUNT_MANAGER" - | "POOL_INCORRECT_WITHDRAW_FEE" - | "POOL_MORE_THAN_EXPECTED_LIQUIDITY_LIMIT" - | "REGISTERED_CREDIT_ACCOUNT_MANAGERS_ONLY" - | "REGISTERED_POOLS_ONLY" - | "TD_CONTRIBUTOR_IS_NOT_REGISTERED" - | "TD_INCORRECT_WEIGHTS" - | "TD_NON_ZERO_BALANCE_AFTER_DISTRIBUTION" - | "TD_WALLET_IS_ALREADY_CONNECTED_TO_VC" - | "WG_DESTINATION_IS_NOT_WETH_COMPATIBLE" - | "WG_NOT_ENOUGH_FUNDS" - | "WG_RECEIVE_IS_NOT_ALLOWED" - | "ZERO_ADDRESS_IS_NOT_ALLOWED" - ): FunctionFragment; - - encodeFunctionData( - functionFragment: "ACL_CALLER_NOT_CONFIGURATOR", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "ACL_CALLER_NOT_PAUSABLE_ADMIN", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "AF_CANT_CLOSE_CREDIT_ACCOUNT_IN_THE_SAME_BLOCK", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "AF_CREDIT_ACCOUNT_NOT_IN_STOCK", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "AF_EXTERNAL_ACCOUNTS_ARE_FORBIDDEN", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "AF_MINING_IS_FINISHED", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "AS_ADDRESS_NOT_FOUND", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "CA_CONNECTED_CREDIT_MANAGER_ONLY", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "CA_FACTORY_ONLY", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "CR_CREDIT_MANAGER_ALREADY_ADDED", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "CR_POOL_ALREADY_ADDED", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "INCORRECT_ARRAY_LENGTH", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "INCORRECT_PARAMETER", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "INCORRECT_PATH_LENGTH", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "MATH_ADDITION_OVERFLOW", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "MATH_DIVISION_BY_ZERO", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "MATH_MULTIPLICATION_OVERFLOW", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "NOT_IMPLEMENTED", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "POOL_CANT_ADD_CREDIT_MANAGER_TWICE", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "POOL_CONNECTED_CREDIT_MANAGERS_ONLY", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "POOL_INCOMPATIBLE_CREDIT_ACCOUNT_MANAGER", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "POOL_INCORRECT_WITHDRAW_FEE", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "POOL_MORE_THAN_EXPECTED_LIQUIDITY_LIMIT", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "REGISTERED_CREDIT_ACCOUNT_MANAGERS_ONLY", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "REGISTERED_POOLS_ONLY", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "TD_CONTRIBUTOR_IS_NOT_REGISTERED", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "TD_INCORRECT_WEIGHTS", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "TD_NON_ZERO_BALANCE_AFTER_DISTRIBUTION", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "TD_WALLET_IS_ALREADY_CONNECTED_TO_VC", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "WG_DESTINATION_IS_NOT_WETH_COMPATIBLE", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "WG_NOT_ENOUGH_FUNDS", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "WG_RECEIVE_IS_NOT_ALLOWED", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "ZERO_ADDRESS_IS_NOT_ALLOWED", - values?: undefined - ): string; - - decodeFunctionResult( - functionFragment: "ACL_CALLER_NOT_CONFIGURATOR", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "ACL_CALLER_NOT_PAUSABLE_ADMIN", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "AF_CANT_CLOSE_CREDIT_ACCOUNT_IN_THE_SAME_BLOCK", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "AF_CREDIT_ACCOUNT_NOT_IN_STOCK", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "AF_EXTERNAL_ACCOUNTS_ARE_FORBIDDEN", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "AF_MINING_IS_FINISHED", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "AS_ADDRESS_NOT_FOUND", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "CA_CONNECTED_CREDIT_MANAGER_ONLY", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "CA_FACTORY_ONLY", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "CR_CREDIT_MANAGER_ALREADY_ADDED", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "CR_POOL_ALREADY_ADDED", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "INCORRECT_ARRAY_LENGTH", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "INCORRECT_PARAMETER", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "INCORRECT_PATH_LENGTH", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "MATH_ADDITION_OVERFLOW", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "MATH_DIVISION_BY_ZERO", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "MATH_MULTIPLICATION_OVERFLOW", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "NOT_IMPLEMENTED", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "POOL_CANT_ADD_CREDIT_MANAGER_TWICE", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "POOL_CONNECTED_CREDIT_MANAGERS_ONLY", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "POOL_INCOMPATIBLE_CREDIT_ACCOUNT_MANAGER", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "POOL_INCORRECT_WITHDRAW_FEE", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "POOL_MORE_THAN_EXPECTED_LIQUIDITY_LIMIT", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "REGISTERED_CREDIT_ACCOUNT_MANAGERS_ONLY", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "REGISTERED_POOLS_ONLY", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "TD_CONTRIBUTOR_IS_NOT_REGISTERED", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "TD_INCORRECT_WEIGHTS", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "TD_NON_ZERO_BALANCE_AFTER_DISTRIBUTION", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "TD_WALLET_IS_ALREADY_CONNECTED_TO_VC", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "WG_DESTINATION_IS_NOT_WETH_COMPATIBLE", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "WG_NOT_ENOUGH_FUNDS", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "WG_RECEIVE_IS_NOT_ALLOWED", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "ZERO_ADDRESS_IS_NOT_ALLOWED", - data: BytesLike - ): Result; - - events: {}; -} - -export interface Errors extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: ErrorsInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - ACL_CALLER_NOT_CONFIGURATOR(overrides?: CallOverrides): Promise<[string]>; - - ACL_CALLER_NOT_PAUSABLE_ADMIN(overrides?: CallOverrides): Promise<[string]>; - - AF_CANT_CLOSE_CREDIT_ACCOUNT_IN_THE_SAME_BLOCK( - overrides?: CallOverrides - ): Promise<[string]>; - - AF_CREDIT_ACCOUNT_NOT_IN_STOCK( - overrides?: CallOverrides - ): Promise<[string]>; - - AF_EXTERNAL_ACCOUNTS_ARE_FORBIDDEN( - overrides?: CallOverrides - ): Promise<[string]>; - - AF_MINING_IS_FINISHED(overrides?: CallOverrides): Promise<[string]>; - - AS_ADDRESS_NOT_FOUND(overrides?: CallOverrides): Promise<[string]>; - - CA_CONNECTED_CREDIT_MANAGER_ONLY( - overrides?: CallOverrides - ): Promise<[string]>; - - CA_FACTORY_ONLY(overrides?: CallOverrides): Promise<[string]>; - - CR_CREDIT_MANAGER_ALREADY_ADDED( - overrides?: CallOverrides - ): Promise<[string]>; - - CR_POOL_ALREADY_ADDED(overrides?: CallOverrides): Promise<[string]>; - - INCORRECT_ARRAY_LENGTH(overrides?: CallOverrides): Promise<[string]>; - - INCORRECT_PARAMETER(overrides?: CallOverrides): Promise<[string]>; - - INCORRECT_PATH_LENGTH(overrides?: CallOverrides): Promise<[string]>; - - MATH_ADDITION_OVERFLOW(overrides?: CallOverrides): Promise<[string]>; - - MATH_DIVISION_BY_ZERO(overrides?: CallOverrides): Promise<[string]>; - - MATH_MULTIPLICATION_OVERFLOW(overrides?: CallOverrides): Promise<[string]>; - - NOT_IMPLEMENTED(overrides?: CallOverrides): Promise<[string]>; - - POOL_CANT_ADD_CREDIT_MANAGER_TWICE( - overrides?: CallOverrides - ): Promise<[string]>; - - POOL_CONNECTED_CREDIT_MANAGERS_ONLY( - overrides?: CallOverrides - ): Promise<[string]>; - - POOL_INCOMPATIBLE_CREDIT_ACCOUNT_MANAGER( - overrides?: CallOverrides - ): Promise<[string]>; - - POOL_INCORRECT_WITHDRAW_FEE(overrides?: CallOverrides): Promise<[string]>; - - POOL_MORE_THAN_EXPECTED_LIQUIDITY_LIMIT( - overrides?: CallOverrides - ): Promise<[string]>; - - REGISTERED_CREDIT_ACCOUNT_MANAGERS_ONLY( - overrides?: CallOverrides - ): Promise<[string]>; - - REGISTERED_POOLS_ONLY(overrides?: CallOverrides): Promise<[string]>; - - TD_CONTRIBUTOR_IS_NOT_REGISTERED( - overrides?: CallOverrides - ): Promise<[string]>; - - TD_INCORRECT_WEIGHTS(overrides?: CallOverrides): Promise<[string]>; - - TD_NON_ZERO_BALANCE_AFTER_DISTRIBUTION( - overrides?: CallOverrides - ): Promise<[string]>; - - TD_WALLET_IS_ALREADY_CONNECTED_TO_VC( - overrides?: CallOverrides - ): Promise<[string]>; - - WG_DESTINATION_IS_NOT_WETH_COMPATIBLE( - overrides?: CallOverrides - ): Promise<[string]>; - - WG_NOT_ENOUGH_FUNDS(overrides?: CallOverrides): Promise<[string]>; - - WG_RECEIVE_IS_NOT_ALLOWED(overrides?: CallOverrides): Promise<[string]>; - - ZERO_ADDRESS_IS_NOT_ALLOWED(overrides?: CallOverrides): Promise<[string]>; - }; - - ACL_CALLER_NOT_CONFIGURATOR(overrides?: CallOverrides): Promise; - - ACL_CALLER_NOT_PAUSABLE_ADMIN(overrides?: CallOverrides): Promise; - - AF_CANT_CLOSE_CREDIT_ACCOUNT_IN_THE_SAME_BLOCK( - overrides?: CallOverrides - ): Promise; - - AF_CREDIT_ACCOUNT_NOT_IN_STOCK(overrides?: CallOverrides): Promise; - - AF_EXTERNAL_ACCOUNTS_ARE_FORBIDDEN( - overrides?: CallOverrides - ): Promise; - - AF_MINING_IS_FINISHED(overrides?: CallOverrides): Promise; - - AS_ADDRESS_NOT_FOUND(overrides?: CallOverrides): Promise; - - CA_CONNECTED_CREDIT_MANAGER_ONLY(overrides?: CallOverrides): Promise; - - CA_FACTORY_ONLY(overrides?: CallOverrides): Promise; - - CR_CREDIT_MANAGER_ALREADY_ADDED(overrides?: CallOverrides): Promise; - - CR_POOL_ALREADY_ADDED(overrides?: CallOverrides): Promise; - - INCORRECT_ARRAY_LENGTH(overrides?: CallOverrides): Promise; - - INCORRECT_PARAMETER(overrides?: CallOverrides): Promise; - - INCORRECT_PATH_LENGTH(overrides?: CallOverrides): Promise; - - MATH_ADDITION_OVERFLOW(overrides?: CallOverrides): Promise; - - MATH_DIVISION_BY_ZERO(overrides?: CallOverrides): Promise; - - MATH_MULTIPLICATION_OVERFLOW(overrides?: CallOverrides): Promise; - - NOT_IMPLEMENTED(overrides?: CallOverrides): Promise; - - POOL_CANT_ADD_CREDIT_MANAGER_TWICE( - overrides?: CallOverrides - ): Promise; - - POOL_CONNECTED_CREDIT_MANAGERS_ONLY( - overrides?: CallOverrides - ): Promise; - - POOL_INCOMPATIBLE_CREDIT_ACCOUNT_MANAGER( - overrides?: CallOverrides - ): Promise; - - POOL_INCORRECT_WITHDRAW_FEE(overrides?: CallOverrides): Promise; - - POOL_MORE_THAN_EXPECTED_LIQUIDITY_LIMIT( - overrides?: CallOverrides - ): Promise; - - REGISTERED_CREDIT_ACCOUNT_MANAGERS_ONLY( - overrides?: CallOverrides - ): Promise; - - REGISTERED_POOLS_ONLY(overrides?: CallOverrides): Promise; - - TD_CONTRIBUTOR_IS_NOT_REGISTERED(overrides?: CallOverrides): Promise; - - TD_INCORRECT_WEIGHTS(overrides?: CallOverrides): Promise; - - TD_NON_ZERO_BALANCE_AFTER_DISTRIBUTION( - overrides?: CallOverrides - ): Promise; - - TD_WALLET_IS_ALREADY_CONNECTED_TO_VC( - overrides?: CallOverrides - ): Promise; - - WG_DESTINATION_IS_NOT_WETH_COMPATIBLE( - overrides?: CallOverrides - ): Promise; - - WG_NOT_ENOUGH_FUNDS(overrides?: CallOverrides): Promise; - - WG_RECEIVE_IS_NOT_ALLOWED(overrides?: CallOverrides): Promise; - - ZERO_ADDRESS_IS_NOT_ALLOWED(overrides?: CallOverrides): Promise; - - callStatic: { - ACL_CALLER_NOT_CONFIGURATOR(overrides?: CallOverrides): Promise; - - ACL_CALLER_NOT_PAUSABLE_ADMIN(overrides?: CallOverrides): Promise; - - AF_CANT_CLOSE_CREDIT_ACCOUNT_IN_THE_SAME_BLOCK( - overrides?: CallOverrides - ): Promise; - - AF_CREDIT_ACCOUNT_NOT_IN_STOCK(overrides?: CallOverrides): Promise; - - AF_EXTERNAL_ACCOUNTS_ARE_FORBIDDEN( - overrides?: CallOverrides - ): Promise; - - AF_MINING_IS_FINISHED(overrides?: CallOverrides): Promise; - - AS_ADDRESS_NOT_FOUND(overrides?: CallOverrides): Promise; - - CA_CONNECTED_CREDIT_MANAGER_ONLY( - overrides?: CallOverrides - ): Promise; - - CA_FACTORY_ONLY(overrides?: CallOverrides): Promise; - - CR_CREDIT_MANAGER_ALREADY_ADDED(overrides?: CallOverrides): Promise; - - CR_POOL_ALREADY_ADDED(overrides?: CallOverrides): Promise; - - INCORRECT_ARRAY_LENGTH(overrides?: CallOverrides): Promise; - - INCORRECT_PARAMETER(overrides?: CallOverrides): Promise; - - INCORRECT_PATH_LENGTH(overrides?: CallOverrides): Promise; - - MATH_ADDITION_OVERFLOW(overrides?: CallOverrides): Promise; - - MATH_DIVISION_BY_ZERO(overrides?: CallOverrides): Promise; - - MATH_MULTIPLICATION_OVERFLOW(overrides?: CallOverrides): Promise; - - NOT_IMPLEMENTED(overrides?: CallOverrides): Promise; - - POOL_CANT_ADD_CREDIT_MANAGER_TWICE( - overrides?: CallOverrides - ): Promise; - - POOL_CONNECTED_CREDIT_MANAGERS_ONLY( - overrides?: CallOverrides - ): Promise; - - POOL_INCOMPATIBLE_CREDIT_ACCOUNT_MANAGER( - overrides?: CallOverrides - ): Promise; - - POOL_INCORRECT_WITHDRAW_FEE(overrides?: CallOverrides): Promise; - - POOL_MORE_THAN_EXPECTED_LIQUIDITY_LIMIT( - overrides?: CallOverrides - ): Promise; - - REGISTERED_CREDIT_ACCOUNT_MANAGERS_ONLY( - overrides?: CallOverrides - ): Promise; - - REGISTERED_POOLS_ONLY(overrides?: CallOverrides): Promise; - - TD_CONTRIBUTOR_IS_NOT_REGISTERED( - overrides?: CallOverrides - ): Promise; - - TD_INCORRECT_WEIGHTS(overrides?: CallOverrides): Promise; - - TD_NON_ZERO_BALANCE_AFTER_DISTRIBUTION( - overrides?: CallOverrides - ): Promise; - - TD_WALLET_IS_ALREADY_CONNECTED_TO_VC( - overrides?: CallOverrides - ): Promise; - - WG_DESTINATION_IS_NOT_WETH_COMPATIBLE( - overrides?: CallOverrides - ): Promise; - - WG_NOT_ENOUGH_FUNDS(overrides?: CallOverrides): Promise; - - WG_RECEIVE_IS_NOT_ALLOWED(overrides?: CallOverrides): Promise; - - ZERO_ADDRESS_IS_NOT_ALLOWED(overrides?: CallOverrides): Promise; - }; - - filters: {}; - - estimateGas: { - ACL_CALLER_NOT_CONFIGURATOR(overrides?: CallOverrides): Promise; - - ACL_CALLER_NOT_PAUSABLE_ADMIN( - overrides?: CallOverrides - ): Promise; - - AF_CANT_CLOSE_CREDIT_ACCOUNT_IN_THE_SAME_BLOCK( - overrides?: CallOverrides - ): Promise; - - AF_CREDIT_ACCOUNT_NOT_IN_STOCK( - overrides?: CallOverrides - ): Promise; - - AF_EXTERNAL_ACCOUNTS_ARE_FORBIDDEN( - overrides?: CallOverrides - ): Promise; - - AF_MINING_IS_FINISHED(overrides?: CallOverrides): Promise; - - AS_ADDRESS_NOT_FOUND(overrides?: CallOverrides): Promise; - - CA_CONNECTED_CREDIT_MANAGER_ONLY( - overrides?: CallOverrides - ): Promise; - - CA_FACTORY_ONLY(overrides?: CallOverrides): Promise; - - CR_CREDIT_MANAGER_ALREADY_ADDED( - overrides?: CallOverrides - ): Promise; - - CR_POOL_ALREADY_ADDED(overrides?: CallOverrides): Promise; - - INCORRECT_ARRAY_LENGTH(overrides?: CallOverrides): Promise; - - INCORRECT_PARAMETER(overrides?: CallOverrides): Promise; - - INCORRECT_PATH_LENGTH(overrides?: CallOverrides): Promise; - - MATH_ADDITION_OVERFLOW(overrides?: CallOverrides): Promise; - - MATH_DIVISION_BY_ZERO(overrides?: CallOverrides): Promise; - - MATH_MULTIPLICATION_OVERFLOW(overrides?: CallOverrides): Promise; - - NOT_IMPLEMENTED(overrides?: CallOverrides): Promise; - - POOL_CANT_ADD_CREDIT_MANAGER_TWICE( - overrides?: CallOverrides - ): Promise; - - POOL_CONNECTED_CREDIT_MANAGERS_ONLY( - overrides?: CallOverrides - ): Promise; - - POOL_INCOMPATIBLE_CREDIT_ACCOUNT_MANAGER( - overrides?: CallOverrides - ): Promise; - - POOL_INCORRECT_WITHDRAW_FEE(overrides?: CallOverrides): Promise; - - POOL_MORE_THAN_EXPECTED_LIQUIDITY_LIMIT( - overrides?: CallOverrides - ): Promise; - - REGISTERED_CREDIT_ACCOUNT_MANAGERS_ONLY( - overrides?: CallOverrides - ): Promise; - - REGISTERED_POOLS_ONLY(overrides?: CallOverrides): Promise; - - TD_CONTRIBUTOR_IS_NOT_REGISTERED( - overrides?: CallOverrides - ): Promise; - - TD_INCORRECT_WEIGHTS(overrides?: CallOverrides): Promise; - - TD_NON_ZERO_BALANCE_AFTER_DISTRIBUTION( - overrides?: CallOverrides - ): Promise; - - TD_WALLET_IS_ALREADY_CONNECTED_TO_VC( - overrides?: CallOverrides - ): Promise; - - WG_DESTINATION_IS_NOT_WETH_COMPATIBLE( - overrides?: CallOverrides - ): Promise; - - WG_NOT_ENOUGH_FUNDS(overrides?: CallOverrides): Promise; - - WG_RECEIVE_IS_NOT_ALLOWED(overrides?: CallOverrides): Promise; - - ZERO_ADDRESS_IS_NOT_ALLOWED(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - ACL_CALLER_NOT_CONFIGURATOR( - overrides?: CallOverrides - ): Promise; - - ACL_CALLER_NOT_PAUSABLE_ADMIN( - overrides?: CallOverrides - ): Promise; - - AF_CANT_CLOSE_CREDIT_ACCOUNT_IN_THE_SAME_BLOCK( - overrides?: CallOverrides - ): Promise; - - AF_CREDIT_ACCOUNT_NOT_IN_STOCK( - overrides?: CallOverrides - ): Promise; - - AF_EXTERNAL_ACCOUNTS_ARE_FORBIDDEN( - overrides?: CallOverrides - ): Promise; - - AF_MINING_IS_FINISHED( - overrides?: CallOverrides - ): Promise; - - AS_ADDRESS_NOT_FOUND( - overrides?: CallOverrides - ): Promise; - - CA_CONNECTED_CREDIT_MANAGER_ONLY( - overrides?: CallOverrides - ): Promise; - - CA_FACTORY_ONLY(overrides?: CallOverrides): Promise; - - CR_CREDIT_MANAGER_ALREADY_ADDED( - overrides?: CallOverrides - ): Promise; - - CR_POOL_ALREADY_ADDED( - overrides?: CallOverrides - ): Promise; - - INCORRECT_ARRAY_LENGTH( - overrides?: CallOverrides - ): Promise; - - INCORRECT_PARAMETER( - overrides?: CallOverrides - ): Promise; - - INCORRECT_PATH_LENGTH( - overrides?: CallOverrides - ): Promise; - - MATH_ADDITION_OVERFLOW( - overrides?: CallOverrides - ): Promise; - - MATH_DIVISION_BY_ZERO( - overrides?: CallOverrides - ): Promise; - - MATH_MULTIPLICATION_OVERFLOW( - overrides?: CallOverrides - ): Promise; - - NOT_IMPLEMENTED(overrides?: CallOverrides): Promise; - - POOL_CANT_ADD_CREDIT_MANAGER_TWICE( - overrides?: CallOverrides - ): Promise; - - POOL_CONNECTED_CREDIT_MANAGERS_ONLY( - overrides?: CallOverrides - ): Promise; - - POOL_INCOMPATIBLE_CREDIT_ACCOUNT_MANAGER( - overrides?: CallOverrides - ): Promise; - - POOL_INCORRECT_WITHDRAW_FEE( - overrides?: CallOverrides - ): Promise; - - POOL_MORE_THAN_EXPECTED_LIQUIDITY_LIMIT( - overrides?: CallOverrides - ): Promise; - - REGISTERED_CREDIT_ACCOUNT_MANAGERS_ONLY( - overrides?: CallOverrides - ): Promise; - - REGISTERED_POOLS_ONLY( - overrides?: CallOverrides - ): Promise; - - TD_CONTRIBUTOR_IS_NOT_REGISTERED( - overrides?: CallOverrides - ): Promise; - - TD_INCORRECT_WEIGHTS( - overrides?: CallOverrides - ): Promise; - - TD_NON_ZERO_BALANCE_AFTER_DISTRIBUTION( - overrides?: CallOverrides - ): Promise; - - TD_WALLET_IS_ALREADY_CONNECTED_TO_VC( - overrides?: CallOverrides - ): Promise; - - WG_DESTINATION_IS_NOT_WETH_COMPATIBLE( - overrides?: CallOverrides - ): Promise; - - WG_NOT_ENOUGH_FUNDS( - overrides?: CallOverrides - ): Promise; - - WG_RECEIVE_IS_NOT_ALLOWED( - overrides?: CallOverrides - ): Promise; - - ZERO_ADDRESS_IS_NOT_ALLOWED( - overrides?: CallOverrides - ): Promise; - }; -} diff --git a/src/types/contracts/libraries/index.ts b/src/types/contracts/libraries/index.ts deleted file mode 100644 index 45413aa3..00000000 --- a/src/types/contracts/libraries/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { Errors } from "./Errors"; diff --git a/src/types/contracts/oracles/LPPriceFeed.ts b/src/types/contracts/oracles/LPPriceFeed.ts deleted file mode 100644 index 2e43639a..00000000 --- a/src/types/contracts/oracles/LPPriceFeed.ts +++ /dev/null @@ -1,451 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../common"; - -export interface LPPriceFeedInterface extends utils.Interface { - functions: { - "_acl()": FunctionFragment; - "decimals()": FunctionFragment; - "delta()": FunctionFragment; - "description()": FunctionFragment; - "getRoundData(uint80)": FunctionFragment; - "latestRoundData()": FunctionFragment; - "lowerBound()": FunctionFragment; - "pause()": FunctionFragment; - "paused()": FunctionFragment; - "priceFeedType()": FunctionFragment; - "setLimiter(uint256)": FunctionFragment; - "skipPriceCheck()": FunctionFragment; - "unpause()": FunctionFragment; - "upperBound()": FunctionFragment; - "version()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "_acl" - | "decimals" - | "delta" - | "description" - | "getRoundData" - | "latestRoundData" - | "lowerBound" - | "pause" - | "paused" - | "priceFeedType" - | "setLimiter" - | "skipPriceCheck" - | "unpause" - | "upperBound" - | "version" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "_acl", values?: undefined): string; - encodeFunctionData(functionFragment: "decimals", values?: undefined): string; - encodeFunctionData(functionFragment: "delta", values?: undefined): string; - encodeFunctionData( - functionFragment: "description", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "getRoundData", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "latestRoundData", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "lowerBound", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "pause", values?: undefined): string; - encodeFunctionData(functionFragment: "paused", values?: undefined): string; - encodeFunctionData( - functionFragment: "priceFeedType", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "setLimiter", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "skipPriceCheck", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "unpause", values?: undefined): string; - encodeFunctionData( - functionFragment: "upperBound", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "version", values?: undefined): string; - - decodeFunctionResult(functionFragment: "_acl", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "delta", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "description", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getRoundData", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "latestRoundData", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "lowerBound", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "pause", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "paused", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "priceFeedType", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "setLimiter", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "skipPriceCheck", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "unpause", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "upperBound", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "version", data: BytesLike): Result; - - events: { - "NewLimiterParams(uint256,uint256)": EventFragment; - "Paused(address)": EventFragment; - "Unpaused(address)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "NewLimiterParams"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Paused"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Unpaused"): EventFragment; -} - -export interface NewLimiterParamsEventObject { - lowerBound: BigNumber; - upperBound: BigNumber; -} -export type NewLimiterParamsEvent = TypedEvent< - [BigNumber, BigNumber], - NewLimiterParamsEventObject ->; - -export type NewLimiterParamsEventFilter = - TypedEventFilter; - -export interface PausedEventObject { - account: string; -} -export type PausedEvent = TypedEvent<[string], PausedEventObject>; - -export type PausedEventFilter = TypedEventFilter; - -export interface UnpausedEventObject { - account: string; -} -export type UnpausedEvent = TypedEvent<[string], UnpausedEventObject>; - -export type UnpausedEventFilter = TypedEventFilter; - -export interface LPPriceFeed extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: LPPriceFeedInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - _acl(overrides?: CallOverrides): Promise<[string]>; - - decimals(overrides?: CallOverrides): Promise<[number]>; - - delta(overrides?: CallOverrides): Promise<[BigNumber]>; - - description(overrides?: CallOverrides): Promise<[string]>; - - getRoundData( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber, BigNumber, BigNumber, BigNumber]>; - - latestRoundData( - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber, BigNumber, BigNumber, BigNumber] & { - roundId: BigNumber; - answer: BigNumber; - startedAt: BigNumber; - updatedAt: BigNumber; - answeredInRound: BigNumber; - } - >; - - lowerBound(overrides?: CallOverrides): Promise<[BigNumber]>; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise<[boolean]>; - - priceFeedType(overrides?: CallOverrides): Promise<[number]>; - - setLimiter( - _lowerBound: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - skipPriceCheck(overrides?: CallOverrides): Promise<[boolean]>; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upperBound(overrides?: CallOverrides): Promise<[BigNumber]>; - - version(overrides?: CallOverrides): Promise<[BigNumber]>; - }; - - _acl(overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - delta(overrides?: CallOverrides): Promise; - - description(overrides?: CallOverrides): Promise; - - getRoundData( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber, BigNumber, BigNumber, BigNumber]>; - - latestRoundData( - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber, BigNumber, BigNumber, BigNumber] & { - roundId: BigNumber; - answer: BigNumber; - startedAt: BigNumber; - updatedAt: BigNumber; - answeredInRound: BigNumber; - } - >; - - lowerBound(overrides?: CallOverrides): Promise; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise; - - priceFeedType(overrides?: CallOverrides): Promise; - - setLimiter( - _lowerBound: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - skipPriceCheck(overrides?: CallOverrides): Promise; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upperBound(overrides?: CallOverrides): Promise; - - version(overrides?: CallOverrides): Promise; - - callStatic: { - _acl(overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - delta(overrides?: CallOverrides): Promise; - - description(overrides?: CallOverrides): Promise; - - getRoundData( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber, BigNumber, BigNumber, BigNumber]>; - - latestRoundData( - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber, BigNumber, BigNumber, BigNumber] & { - roundId: BigNumber; - answer: BigNumber; - startedAt: BigNumber; - updatedAt: BigNumber; - answeredInRound: BigNumber; - } - >; - - lowerBound(overrides?: CallOverrides): Promise; - - pause(overrides?: CallOverrides): Promise; - - paused(overrides?: CallOverrides): Promise; - - priceFeedType(overrides?: CallOverrides): Promise; - - setLimiter( - _lowerBound: BigNumberish, - overrides?: CallOverrides - ): Promise; - - skipPriceCheck(overrides?: CallOverrides): Promise; - - unpause(overrides?: CallOverrides): Promise; - - upperBound(overrides?: CallOverrides): Promise; - - version(overrides?: CallOverrides): Promise; - }; - - filters: { - "NewLimiterParams(uint256,uint256)"( - lowerBound?: null, - upperBound?: null - ): NewLimiterParamsEventFilter; - NewLimiterParams( - lowerBound?: null, - upperBound?: null - ): NewLimiterParamsEventFilter; - - "Paused(address)"(account?: null): PausedEventFilter; - Paused(account?: null): PausedEventFilter; - - "Unpaused(address)"(account?: null): UnpausedEventFilter; - Unpaused(account?: null): UnpausedEventFilter; - }; - - estimateGas: { - _acl(overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - delta(overrides?: CallOverrides): Promise; - - description(overrides?: CallOverrides): Promise; - - getRoundData( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - latestRoundData(overrides?: CallOverrides): Promise; - - lowerBound(overrides?: CallOverrides): Promise; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise; - - priceFeedType(overrides?: CallOverrides): Promise; - - setLimiter( - _lowerBound: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - skipPriceCheck(overrides?: CallOverrides): Promise; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upperBound(overrides?: CallOverrides): Promise; - - version(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - _acl(overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - delta(overrides?: CallOverrides): Promise; - - description(overrides?: CallOverrides): Promise; - - getRoundData( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - latestRoundData(overrides?: CallOverrides): Promise; - - lowerBound(overrides?: CallOverrides): Promise; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise; - - priceFeedType(overrides?: CallOverrides): Promise; - - setLimiter( - _lowerBound: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - skipPriceCheck(overrides?: CallOverrides): Promise; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upperBound(overrides?: CallOverrides): Promise; - - version(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/oracles/PriceOracle.ts b/src/types/contracts/oracles/PriceOracle.ts deleted file mode 100644 index 11a020e7..00000000 --- a/src/types/contracts/oracles/PriceOracle.ts +++ /dev/null @@ -1,535 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../common"; - -export type PriceFeedConfigStruct = { token: string; priceFeed: string }; - -export type PriceFeedConfigStructOutput = [string, string] & { - token: string; - priceFeed: string; -}; - -export interface PriceOracleInterface extends utils.Interface { - functions: { - "_acl()": FunctionFragment; - "addPriceFeed(address,address)": FunctionFragment; - "convert(uint256,address,address)": FunctionFragment; - "convertFromUSD(uint256,address)": FunctionFragment; - "convertToUSD(uint256,address)": FunctionFragment; - "fastCheck(uint256,address,uint256,address)": FunctionFragment; - "getPrice(address)": FunctionFragment; - "pause()": FunctionFragment; - "paused()": FunctionFragment; - "priceFeeds(address)": FunctionFragment; - "priceFeedsWithFlags(address)": FunctionFragment; - "unpause()": FunctionFragment; - "version()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "_acl" - | "addPriceFeed" - | "convert" - | "convertFromUSD" - | "convertToUSD" - | "fastCheck" - | "getPrice" - | "pause" - | "paused" - | "priceFeeds" - | "priceFeedsWithFlags" - | "unpause" - | "version" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "_acl", values?: undefined): string; - encodeFunctionData( - functionFragment: "addPriceFeed", - values: [string, string] - ): string; - encodeFunctionData( - functionFragment: "convert", - values: [BigNumberish, string, string] - ): string; - encodeFunctionData( - functionFragment: "convertFromUSD", - values: [BigNumberish, string] - ): string; - encodeFunctionData( - functionFragment: "convertToUSD", - values: [BigNumberish, string] - ): string; - encodeFunctionData( - functionFragment: "fastCheck", - values: [BigNumberish, string, BigNumberish, string] - ): string; - encodeFunctionData(functionFragment: "getPrice", values: [string]): string; - encodeFunctionData(functionFragment: "pause", values?: undefined): string; - encodeFunctionData(functionFragment: "paused", values?: undefined): string; - encodeFunctionData(functionFragment: "priceFeeds", values: [string]): string; - encodeFunctionData( - functionFragment: "priceFeedsWithFlags", - values: [string] - ): string; - encodeFunctionData(functionFragment: "unpause", values?: undefined): string; - encodeFunctionData(functionFragment: "version", values?: undefined): string; - - decodeFunctionResult(functionFragment: "_acl", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "addPriceFeed", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "convert", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "convertFromUSD", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "convertToUSD", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "fastCheck", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "getPrice", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "pause", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "paused", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "priceFeeds", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "priceFeedsWithFlags", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "unpause", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "version", data: BytesLike): Result; - - events: { - "NewPriceFeed(address,address)": EventFragment; - "Paused(address)": EventFragment; - "Unpaused(address)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "NewPriceFeed"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Paused"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Unpaused"): EventFragment; -} - -export interface NewPriceFeedEventObject { - token: string; - priceFeed: string; -} -export type NewPriceFeedEvent = TypedEvent< - [string, string], - NewPriceFeedEventObject ->; - -export type NewPriceFeedEventFilter = TypedEventFilter; - -export interface PausedEventObject { - account: string; -} -export type PausedEvent = TypedEvent<[string], PausedEventObject>; - -export type PausedEventFilter = TypedEventFilter; - -export interface UnpausedEventObject { - account: string; -} -export type UnpausedEvent = TypedEvent<[string], UnpausedEventObject>; - -export type UnpausedEventFilter = TypedEventFilter; - -export interface PriceOracle extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: PriceOracleInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - _acl(overrides?: CallOverrides): Promise<[string]>; - - addPriceFeed( - token: string, - priceFeed: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - convert( - amount: BigNumberish, - tokenFrom: string, - tokenTo: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - convertFromUSD( - amount: BigNumberish, - token: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - convertToUSD( - amount: BigNumberish, - token: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - fastCheck( - amountFrom: BigNumberish, - tokenFrom: string, - amountTo: BigNumberish, - tokenTo: string, - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber] & { - collateralFrom: BigNumber; - collateralTo: BigNumber; - } - >; - - getPrice( - token: string, - overrides?: CallOverrides - ): Promise<[BigNumber] & { price: BigNumber }>; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise<[boolean]>; - - priceFeeds( - token: string, - overrides?: CallOverrides - ): Promise<[string] & { priceFeed: string }>; - - priceFeedsWithFlags( - token: string, - overrides?: CallOverrides - ): Promise< - [string, boolean, BigNumber] & { - priceFeed: string; - skipCheck: boolean; - decimals: BigNumber; - } - >; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise<[BigNumber]>; - }; - - _acl(overrides?: CallOverrides): Promise; - - addPriceFeed( - token: string, - priceFeed: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - convert( - amount: BigNumberish, - tokenFrom: string, - tokenTo: string, - overrides?: CallOverrides - ): Promise; - - convertFromUSD( - amount: BigNumberish, - token: string, - overrides?: CallOverrides - ): Promise; - - convertToUSD( - amount: BigNumberish, - token: string, - overrides?: CallOverrides - ): Promise; - - fastCheck( - amountFrom: BigNumberish, - tokenFrom: string, - amountTo: BigNumberish, - tokenTo: string, - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber] & { - collateralFrom: BigNumber; - collateralTo: BigNumber; - } - >; - - getPrice(token: string, overrides?: CallOverrides): Promise; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise; - - priceFeeds(token: string, overrides?: CallOverrides): Promise; - - priceFeedsWithFlags( - token: string, - overrides?: CallOverrides - ): Promise< - [string, boolean, BigNumber] & { - priceFeed: string; - skipCheck: boolean; - decimals: BigNumber; - } - >; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise; - - callStatic: { - _acl(overrides?: CallOverrides): Promise; - - addPriceFeed( - token: string, - priceFeed: string, - overrides?: CallOverrides - ): Promise; - - convert( - amount: BigNumberish, - tokenFrom: string, - tokenTo: string, - overrides?: CallOverrides - ): Promise; - - convertFromUSD( - amount: BigNumberish, - token: string, - overrides?: CallOverrides - ): Promise; - - convertToUSD( - amount: BigNumberish, - token: string, - overrides?: CallOverrides - ): Promise; - - fastCheck( - amountFrom: BigNumberish, - tokenFrom: string, - amountTo: BigNumberish, - tokenTo: string, - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber] & { - collateralFrom: BigNumber; - collateralTo: BigNumber; - } - >; - - getPrice(token: string, overrides?: CallOverrides): Promise; - - pause(overrides?: CallOverrides): Promise; - - paused(overrides?: CallOverrides): Promise; - - priceFeeds(token: string, overrides?: CallOverrides): Promise; - - priceFeedsWithFlags( - token: string, - overrides?: CallOverrides - ): Promise< - [string, boolean, BigNumber] & { - priceFeed: string; - skipCheck: boolean; - decimals: BigNumber; - } - >; - - unpause(overrides?: CallOverrides): Promise; - - version(overrides?: CallOverrides): Promise; - }; - - filters: { - "NewPriceFeed(address,address)"( - token?: string | null, - priceFeed?: string | null - ): NewPriceFeedEventFilter; - NewPriceFeed( - token?: string | null, - priceFeed?: string | null - ): NewPriceFeedEventFilter; - - "Paused(address)"(account?: null): PausedEventFilter; - Paused(account?: null): PausedEventFilter; - - "Unpaused(address)"(account?: null): UnpausedEventFilter; - Unpaused(account?: null): UnpausedEventFilter; - }; - - estimateGas: { - _acl(overrides?: CallOverrides): Promise; - - addPriceFeed( - token: string, - priceFeed: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - convert( - amount: BigNumberish, - tokenFrom: string, - tokenTo: string, - overrides?: CallOverrides - ): Promise; - - convertFromUSD( - amount: BigNumberish, - token: string, - overrides?: CallOverrides - ): Promise; - - convertToUSD( - amount: BigNumberish, - token: string, - overrides?: CallOverrides - ): Promise; - - fastCheck( - amountFrom: BigNumberish, - tokenFrom: string, - amountTo: BigNumberish, - tokenTo: string, - overrides?: CallOverrides - ): Promise; - - getPrice(token: string, overrides?: CallOverrides): Promise; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise; - - priceFeeds(token: string, overrides?: CallOverrides): Promise; - - priceFeedsWithFlags( - token: string, - overrides?: CallOverrides - ): Promise; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - _acl(overrides?: CallOverrides): Promise; - - addPriceFeed( - token: string, - priceFeed: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - convert( - amount: BigNumberish, - tokenFrom: string, - tokenTo: string, - overrides?: CallOverrides - ): Promise; - - convertFromUSD( - amount: BigNumberish, - token: string, - overrides?: CallOverrides - ): Promise; - - convertToUSD( - amount: BigNumberish, - token: string, - overrides?: CallOverrides - ): Promise; - - fastCheck( - amountFrom: BigNumberish, - tokenFrom: string, - amountTo: BigNumberish, - tokenTo: string, - overrides?: CallOverrides - ): Promise; - - getPrice( - token: string, - overrides?: CallOverrides - ): Promise; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise; - - priceFeeds( - token: string, - overrides?: CallOverrides - ): Promise; - - priceFeedsWithFlags( - token: string, - overrides?: CallOverrides - ): Promise; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/oracles/ZeroPriceFeed.ts b/src/types/contracts/oracles/ZeroPriceFeed.ts deleted file mode 100644 index c2c4cbd3..00000000 --- a/src/types/contracts/oracles/ZeroPriceFeed.ts +++ /dev/null @@ -1,244 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../common"; - -export interface ZeroPriceFeedInterface extends utils.Interface { - functions: { - "decimals()": FunctionFragment; - "description()": FunctionFragment; - "getRoundData(uint80)": FunctionFragment; - "latestRoundData()": FunctionFragment; - "priceFeedType()": FunctionFragment; - "skipPriceCheck()": FunctionFragment; - "version()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "decimals" - | "description" - | "getRoundData" - | "latestRoundData" - | "priceFeedType" - | "skipPriceCheck" - | "version" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "decimals", values?: undefined): string; - encodeFunctionData( - functionFragment: "description", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "getRoundData", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "latestRoundData", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "priceFeedType", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "skipPriceCheck", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "version", values?: undefined): string; - - decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "description", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getRoundData", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "latestRoundData", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "priceFeedType", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "skipPriceCheck", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "version", data: BytesLike): Result; - - events: {}; -} - -export interface ZeroPriceFeed extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: ZeroPriceFeedInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - decimals(overrides?: CallOverrides): Promise<[number]>; - - description(overrides?: CallOverrides): Promise<[string]>; - - getRoundData( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber, BigNumber, BigNumber, BigNumber]>; - - latestRoundData( - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber, BigNumber, BigNumber, BigNumber] & { - roundId: BigNumber; - answer: BigNumber; - startedAt: BigNumber; - updatedAt: BigNumber; - answeredInRound: BigNumber; - } - >; - - priceFeedType(overrides?: CallOverrides): Promise<[number]>; - - skipPriceCheck(overrides?: CallOverrides): Promise<[boolean]>; - - version(overrides?: CallOverrides): Promise<[BigNumber]>; - }; - - decimals(overrides?: CallOverrides): Promise; - - description(overrides?: CallOverrides): Promise; - - getRoundData( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber, BigNumber, BigNumber, BigNumber]>; - - latestRoundData( - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber, BigNumber, BigNumber, BigNumber] & { - roundId: BigNumber; - answer: BigNumber; - startedAt: BigNumber; - updatedAt: BigNumber; - answeredInRound: BigNumber; - } - >; - - priceFeedType(overrides?: CallOverrides): Promise; - - skipPriceCheck(overrides?: CallOverrides): Promise; - - version(overrides?: CallOverrides): Promise; - - callStatic: { - decimals(overrides?: CallOverrides): Promise; - - description(overrides?: CallOverrides): Promise; - - getRoundData( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber, BigNumber, BigNumber, BigNumber]>; - - latestRoundData( - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber, BigNumber, BigNumber, BigNumber] & { - roundId: BigNumber; - answer: BigNumber; - startedAt: BigNumber; - updatedAt: BigNumber; - answeredInRound: BigNumber; - } - >; - - priceFeedType(overrides?: CallOverrides): Promise; - - skipPriceCheck(overrides?: CallOverrides): Promise; - - version(overrides?: CallOverrides): Promise; - }; - - filters: {}; - - estimateGas: { - decimals(overrides?: CallOverrides): Promise; - - description(overrides?: CallOverrides): Promise; - - getRoundData( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - latestRoundData(overrides?: CallOverrides): Promise; - - priceFeedType(overrides?: CallOverrides): Promise; - - skipPriceCheck(overrides?: CallOverrides): Promise; - - version(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - decimals(overrides?: CallOverrides): Promise; - - description(overrides?: CallOverrides): Promise; - - getRoundData( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - latestRoundData(overrides?: CallOverrides): Promise; - - priceFeedType(overrides?: CallOverrides): Promise; - - skipPriceCheck(overrides?: CallOverrides): Promise; - - version(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/oracles/curve/AbstractCurveLPPriceFeed.ts b/src/types/contracts/oracles/curve/AbstractCurveLPPriceFeed.ts deleted file mode 100644 index b817ceff..00000000 --- a/src/types/contracts/oracles/curve/AbstractCurveLPPriceFeed.ts +++ /dev/null @@ -1,485 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../common"; - -export interface AbstractCurveLPPriceFeedInterface extends utils.Interface { - functions: { - "_acl()": FunctionFragment; - "curvePool()": FunctionFragment; - "decimals()": FunctionFragment; - "decimalsDivider()": FunctionFragment; - "delta()": FunctionFragment; - "description()": FunctionFragment; - "getRoundData(uint80)": FunctionFragment; - "latestRoundData()": FunctionFragment; - "lowerBound()": FunctionFragment; - "pause()": FunctionFragment; - "paused()": FunctionFragment; - "priceFeedType()": FunctionFragment; - "setLimiter(uint256)": FunctionFragment; - "skipPriceCheck()": FunctionFragment; - "unpause()": FunctionFragment; - "upperBound()": FunctionFragment; - "version()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "_acl" - | "curvePool" - | "decimals" - | "decimalsDivider" - | "delta" - | "description" - | "getRoundData" - | "latestRoundData" - | "lowerBound" - | "pause" - | "paused" - | "priceFeedType" - | "setLimiter" - | "skipPriceCheck" - | "unpause" - | "upperBound" - | "version" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "_acl", values?: undefined): string; - encodeFunctionData(functionFragment: "curvePool", values?: undefined): string; - encodeFunctionData(functionFragment: "decimals", values?: undefined): string; - encodeFunctionData( - functionFragment: "decimalsDivider", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "delta", values?: undefined): string; - encodeFunctionData( - functionFragment: "description", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "getRoundData", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "latestRoundData", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "lowerBound", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "pause", values?: undefined): string; - encodeFunctionData(functionFragment: "paused", values?: undefined): string; - encodeFunctionData( - functionFragment: "priceFeedType", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "setLimiter", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "skipPriceCheck", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "unpause", values?: undefined): string; - encodeFunctionData( - functionFragment: "upperBound", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "version", values?: undefined): string; - - decodeFunctionResult(functionFragment: "_acl", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "curvePool", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "decimalsDivider", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "delta", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "description", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getRoundData", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "latestRoundData", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "lowerBound", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "pause", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "paused", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "priceFeedType", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "setLimiter", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "skipPriceCheck", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "unpause", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "upperBound", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "version", data: BytesLike): Result; - - events: { - "NewLimiterParams(uint256,uint256)": EventFragment; - "Paused(address)": EventFragment; - "Unpaused(address)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "NewLimiterParams"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Paused"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Unpaused"): EventFragment; -} - -export interface NewLimiterParamsEventObject { - lowerBound: BigNumber; - upperBound: BigNumber; -} -export type NewLimiterParamsEvent = TypedEvent< - [BigNumber, BigNumber], - NewLimiterParamsEventObject ->; - -export type NewLimiterParamsEventFilter = - TypedEventFilter; - -export interface PausedEventObject { - account: string; -} -export type PausedEvent = TypedEvent<[string], PausedEventObject>; - -export type PausedEventFilter = TypedEventFilter; - -export interface UnpausedEventObject { - account: string; -} -export type UnpausedEvent = TypedEvent<[string], UnpausedEventObject>; - -export type UnpausedEventFilter = TypedEventFilter; - -export interface AbstractCurveLPPriceFeed extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: AbstractCurveLPPriceFeedInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - _acl(overrides?: CallOverrides): Promise<[string]>; - - curvePool(overrides?: CallOverrides): Promise<[string]>; - - decimals(overrides?: CallOverrides): Promise<[number]>; - - decimalsDivider(overrides?: CallOverrides): Promise<[BigNumber]>; - - delta(overrides?: CallOverrides): Promise<[BigNumber]>; - - description(overrides?: CallOverrides): Promise<[string]>; - - getRoundData( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber, BigNumber, BigNumber, BigNumber]>; - - latestRoundData( - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber, BigNumber, BigNumber, BigNumber] & { - roundId: BigNumber; - answer: BigNumber; - startedAt: BigNumber; - updatedAt: BigNumber; - answeredInRound: BigNumber; - } - >; - - lowerBound(overrides?: CallOverrides): Promise<[BigNumber]>; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise<[boolean]>; - - priceFeedType(overrides?: CallOverrides): Promise<[number]>; - - setLimiter( - _lowerBound: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - skipPriceCheck(overrides?: CallOverrides): Promise<[boolean]>; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upperBound(overrides?: CallOverrides): Promise<[BigNumber]>; - - version(overrides?: CallOverrides): Promise<[BigNumber]>; - }; - - _acl(overrides?: CallOverrides): Promise; - - curvePool(overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - decimalsDivider(overrides?: CallOverrides): Promise; - - delta(overrides?: CallOverrides): Promise; - - description(overrides?: CallOverrides): Promise; - - getRoundData( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber, BigNumber, BigNumber, BigNumber]>; - - latestRoundData( - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber, BigNumber, BigNumber, BigNumber] & { - roundId: BigNumber; - answer: BigNumber; - startedAt: BigNumber; - updatedAt: BigNumber; - answeredInRound: BigNumber; - } - >; - - lowerBound(overrides?: CallOverrides): Promise; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise; - - priceFeedType(overrides?: CallOverrides): Promise; - - setLimiter( - _lowerBound: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - skipPriceCheck(overrides?: CallOverrides): Promise; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upperBound(overrides?: CallOverrides): Promise; - - version(overrides?: CallOverrides): Promise; - - callStatic: { - _acl(overrides?: CallOverrides): Promise; - - curvePool(overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - decimalsDivider(overrides?: CallOverrides): Promise; - - delta(overrides?: CallOverrides): Promise; - - description(overrides?: CallOverrides): Promise; - - getRoundData( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber, BigNumber, BigNumber, BigNumber]>; - - latestRoundData( - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber, BigNumber, BigNumber, BigNumber] & { - roundId: BigNumber; - answer: BigNumber; - startedAt: BigNumber; - updatedAt: BigNumber; - answeredInRound: BigNumber; - } - >; - - lowerBound(overrides?: CallOverrides): Promise; - - pause(overrides?: CallOverrides): Promise; - - paused(overrides?: CallOverrides): Promise; - - priceFeedType(overrides?: CallOverrides): Promise; - - setLimiter( - _lowerBound: BigNumberish, - overrides?: CallOverrides - ): Promise; - - skipPriceCheck(overrides?: CallOverrides): Promise; - - unpause(overrides?: CallOverrides): Promise; - - upperBound(overrides?: CallOverrides): Promise; - - version(overrides?: CallOverrides): Promise; - }; - - filters: { - "NewLimiterParams(uint256,uint256)"( - lowerBound?: null, - upperBound?: null - ): NewLimiterParamsEventFilter; - NewLimiterParams( - lowerBound?: null, - upperBound?: null - ): NewLimiterParamsEventFilter; - - "Paused(address)"(account?: null): PausedEventFilter; - Paused(account?: null): PausedEventFilter; - - "Unpaused(address)"(account?: null): UnpausedEventFilter; - Unpaused(account?: null): UnpausedEventFilter; - }; - - estimateGas: { - _acl(overrides?: CallOverrides): Promise; - - curvePool(overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - decimalsDivider(overrides?: CallOverrides): Promise; - - delta(overrides?: CallOverrides): Promise; - - description(overrides?: CallOverrides): Promise; - - getRoundData( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - latestRoundData(overrides?: CallOverrides): Promise; - - lowerBound(overrides?: CallOverrides): Promise; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise; - - priceFeedType(overrides?: CallOverrides): Promise; - - setLimiter( - _lowerBound: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - skipPriceCheck(overrides?: CallOverrides): Promise; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upperBound(overrides?: CallOverrides): Promise; - - version(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - _acl(overrides?: CallOverrides): Promise; - - curvePool(overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - decimalsDivider(overrides?: CallOverrides): Promise; - - delta(overrides?: CallOverrides): Promise; - - description(overrides?: CallOverrides): Promise; - - getRoundData( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - latestRoundData(overrides?: CallOverrides): Promise; - - lowerBound(overrides?: CallOverrides): Promise; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise; - - priceFeedType(overrides?: CallOverrides): Promise; - - setLimiter( - _lowerBound: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - skipPriceCheck(overrides?: CallOverrides): Promise; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upperBound(overrides?: CallOverrides): Promise; - - version(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/oracles/curve/CurveLP2PriceFeed.ts b/src/types/contracts/oracles/curve/CurveLP2PriceFeed.ts deleted file mode 100644 index 5c8a8634..00000000 --- a/src/types/contracts/oracles/curve/CurveLP2PriceFeed.ts +++ /dev/null @@ -1,519 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../common"; - -export interface CurveLP2PriceFeedInterface extends utils.Interface { - functions: { - "_acl()": FunctionFragment; - "curvePool()": FunctionFragment; - "decimals()": FunctionFragment; - "decimalsDivider()": FunctionFragment; - "delta()": FunctionFragment; - "description()": FunctionFragment; - "getRoundData(uint80)": FunctionFragment; - "latestRoundData()": FunctionFragment; - "lowerBound()": FunctionFragment; - "pause()": FunctionFragment; - "paused()": FunctionFragment; - "priceFeed1()": FunctionFragment; - "priceFeed2()": FunctionFragment; - "priceFeedType()": FunctionFragment; - "setLimiter(uint256)": FunctionFragment; - "skipPriceCheck()": FunctionFragment; - "unpause()": FunctionFragment; - "upperBound()": FunctionFragment; - "version()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "_acl" - | "curvePool" - | "decimals" - | "decimalsDivider" - | "delta" - | "description" - | "getRoundData" - | "latestRoundData" - | "lowerBound" - | "pause" - | "paused" - | "priceFeed1" - | "priceFeed2" - | "priceFeedType" - | "setLimiter" - | "skipPriceCheck" - | "unpause" - | "upperBound" - | "version" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "_acl", values?: undefined): string; - encodeFunctionData(functionFragment: "curvePool", values?: undefined): string; - encodeFunctionData(functionFragment: "decimals", values?: undefined): string; - encodeFunctionData( - functionFragment: "decimalsDivider", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "delta", values?: undefined): string; - encodeFunctionData( - functionFragment: "description", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "getRoundData", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "latestRoundData", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "lowerBound", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "pause", values?: undefined): string; - encodeFunctionData(functionFragment: "paused", values?: undefined): string; - encodeFunctionData( - functionFragment: "priceFeed1", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "priceFeed2", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "priceFeedType", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "setLimiter", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "skipPriceCheck", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "unpause", values?: undefined): string; - encodeFunctionData( - functionFragment: "upperBound", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "version", values?: undefined): string; - - decodeFunctionResult(functionFragment: "_acl", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "curvePool", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "decimalsDivider", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "delta", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "description", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getRoundData", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "latestRoundData", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "lowerBound", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "pause", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "paused", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "priceFeed1", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "priceFeed2", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "priceFeedType", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "setLimiter", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "skipPriceCheck", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "unpause", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "upperBound", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "version", data: BytesLike): Result; - - events: { - "NewLimiterParams(uint256,uint256)": EventFragment; - "Paused(address)": EventFragment; - "Unpaused(address)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "NewLimiterParams"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Paused"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Unpaused"): EventFragment; -} - -export interface NewLimiterParamsEventObject { - lowerBound: BigNumber; - upperBound: BigNumber; -} -export type NewLimiterParamsEvent = TypedEvent< - [BigNumber, BigNumber], - NewLimiterParamsEventObject ->; - -export type NewLimiterParamsEventFilter = - TypedEventFilter; - -export interface PausedEventObject { - account: string; -} -export type PausedEvent = TypedEvent<[string], PausedEventObject>; - -export type PausedEventFilter = TypedEventFilter; - -export interface UnpausedEventObject { - account: string; -} -export type UnpausedEvent = TypedEvent<[string], UnpausedEventObject>; - -export type UnpausedEventFilter = TypedEventFilter; - -export interface CurveLP2PriceFeed extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: CurveLP2PriceFeedInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - _acl(overrides?: CallOverrides): Promise<[string]>; - - curvePool(overrides?: CallOverrides): Promise<[string]>; - - decimals(overrides?: CallOverrides): Promise<[number]>; - - decimalsDivider(overrides?: CallOverrides): Promise<[BigNumber]>; - - delta(overrides?: CallOverrides): Promise<[BigNumber]>; - - description(overrides?: CallOverrides): Promise<[string]>; - - getRoundData( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber, BigNumber, BigNumber, BigNumber]>; - - latestRoundData( - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber, BigNumber, BigNumber, BigNumber] & { - roundId: BigNumber; - answer: BigNumber; - startedAt: BigNumber; - updatedAt: BigNumber; - answeredInRound: BigNumber; - } - >; - - lowerBound(overrides?: CallOverrides): Promise<[BigNumber]>; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise<[boolean]>; - - priceFeed1(overrides?: CallOverrides): Promise<[string]>; - - priceFeed2(overrides?: CallOverrides): Promise<[string]>; - - priceFeedType(overrides?: CallOverrides): Promise<[number]>; - - setLimiter( - _lowerBound: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - skipPriceCheck(overrides?: CallOverrides): Promise<[boolean]>; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upperBound(overrides?: CallOverrides): Promise<[BigNumber]>; - - version(overrides?: CallOverrides): Promise<[BigNumber]>; - }; - - _acl(overrides?: CallOverrides): Promise; - - curvePool(overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - decimalsDivider(overrides?: CallOverrides): Promise; - - delta(overrides?: CallOverrides): Promise; - - description(overrides?: CallOverrides): Promise; - - getRoundData( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber, BigNumber, BigNumber, BigNumber]>; - - latestRoundData( - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber, BigNumber, BigNumber, BigNumber] & { - roundId: BigNumber; - answer: BigNumber; - startedAt: BigNumber; - updatedAt: BigNumber; - answeredInRound: BigNumber; - } - >; - - lowerBound(overrides?: CallOverrides): Promise; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise; - - priceFeed1(overrides?: CallOverrides): Promise; - - priceFeed2(overrides?: CallOverrides): Promise; - - priceFeedType(overrides?: CallOverrides): Promise; - - setLimiter( - _lowerBound: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - skipPriceCheck(overrides?: CallOverrides): Promise; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upperBound(overrides?: CallOverrides): Promise; - - version(overrides?: CallOverrides): Promise; - - callStatic: { - _acl(overrides?: CallOverrides): Promise; - - curvePool(overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - decimalsDivider(overrides?: CallOverrides): Promise; - - delta(overrides?: CallOverrides): Promise; - - description(overrides?: CallOverrides): Promise; - - getRoundData( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber, BigNumber, BigNumber, BigNumber]>; - - latestRoundData( - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber, BigNumber, BigNumber, BigNumber] & { - roundId: BigNumber; - answer: BigNumber; - startedAt: BigNumber; - updatedAt: BigNumber; - answeredInRound: BigNumber; - } - >; - - lowerBound(overrides?: CallOverrides): Promise; - - pause(overrides?: CallOverrides): Promise; - - paused(overrides?: CallOverrides): Promise; - - priceFeed1(overrides?: CallOverrides): Promise; - - priceFeed2(overrides?: CallOverrides): Promise; - - priceFeedType(overrides?: CallOverrides): Promise; - - setLimiter( - _lowerBound: BigNumberish, - overrides?: CallOverrides - ): Promise; - - skipPriceCheck(overrides?: CallOverrides): Promise; - - unpause(overrides?: CallOverrides): Promise; - - upperBound(overrides?: CallOverrides): Promise; - - version(overrides?: CallOverrides): Promise; - }; - - filters: { - "NewLimiterParams(uint256,uint256)"( - lowerBound?: null, - upperBound?: null - ): NewLimiterParamsEventFilter; - NewLimiterParams( - lowerBound?: null, - upperBound?: null - ): NewLimiterParamsEventFilter; - - "Paused(address)"(account?: null): PausedEventFilter; - Paused(account?: null): PausedEventFilter; - - "Unpaused(address)"(account?: null): UnpausedEventFilter; - Unpaused(account?: null): UnpausedEventFilter; - }; - - estimateGas: { - _acl(overrides?: CallOverrides): Promise; - - curvePool(overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - decimalsDivider(overrides?: CallOverrides): Promise; - - delta(overrides?: CallOverrides): Promise; - - description(overrides?: CallOverrides): Promise; - - getRoundData( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - latestRoundData(overrides?: CallOverrides): Promise; - - lowerBound(overrides?: CallOverrides): Promise; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise; - - priceFeed1(overrides?: CallOverrides): Promise; - - priceFeed2(overrides?: CallOverrides): Promise; - - priceFeedType(overrides?: CallOverrides): Promise; - - setLimiter( - _lowerBound: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - skipPriceCheck(overrides?: CallOverrides): Promise; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upperBound(overrides?: CallOverrides): Promise; - - version(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - _acl(overrides?: CallOverrides): Promise; - - curvePool(overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - decimalsDivider(overrides?: CallOverrides): Promise; - - delta(overrides?: CallOverrides): Promise; - - description(overrides?: CallOverrides): Promise; - - getRoundData( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - latestRoundData(overrides?: CallOverrides): Promise; - - lowerBound(overrides?: CallOverrides): Promise; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise; - - priceFeed1(overrides?: CallOverrides): Promise; - - priceFeed2(overrides?: CallOverrides): Promise; - - priceFeedType(overrides?: CallOverrides): Promise; - - setLimiter( - _lowerBound: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - skipPriceCheck(overrides?: CallOverrides): Promise; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upperBound(overrides?: CallOverrides): Promise; - - version(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/oracles/curve/CurveLP3PriceFeed.ts b/src/types/contracts/oracles/curve/CurveLP3PriceFeed.ts deleted file mode 100644 index e15b6561..00000000 --- a/src/types/contracts/oracles/curve/CurveLP3PriceFeed.ts +++ /dev/null @@ -1,536 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../common"; - -export interface CurveLP3PriceFeedInterface extends utils.Interface { - functions: { - "_acl()": FunctionFragment; - "curvePool()": FunctionFragment; - "decimals()": FunctionFragment; - "decimalsDivider()": FunctionFragment; - "delta()": FunctionFragment; - "description()": FunctionFragment; - "getRoundData(uint80)": FunctionFragment; - "latestRoundData()": FunctionFragment; - "lowerBound()": FunctionFragment; - "pause()": FunctionFragment; - "paused()": FunctionFragment; - "priceFeed1()": FunctionFragment; - "priceFeed2()": FunctionFragment; - "priceFeed3()": FunctionFragment; - "priceFeedType()": FunctionFragment; - "setLimiter(uint256)": FunctionFragment; - "skipPriceCheck()": FunctionFragment; - "unpause()": FunctionFragment; - "upperBound()": FunctionFragment; - "version()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "_acl" - | "curvePool" - | "decimals" - | "decimalsDivider" - | "delta" - | "description" - | "getRoundData" - | "latestRoundData" - | "lowerBound" - | "pause" - | "paused" - | "priceFeed1" - | "priceFeed2" - | "priceFeed3" - | "priceFeedType" - | "setLimiter" - | "skipPriceCheck" - | "unpause" - | "upperBound" - | "version" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "_acl", values?: undefined): string; - encodeFunctionData(functionFragment: "curvePool", values?: undefined): string; - encodeFunctionData(functionFragment: "decimals", values?: undefined): string; - encodeFunctionData( - functionFragment: "decimalsDivider", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "delta", values?: undefined): string; - encodeFunctionData( - functionFragment: "description", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "getRoundData", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "latestRoundData", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "lowerBound", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "pause", values?: undefined): string; - encodeFunctionData(functionFragment: "paused", values?: undefined): string; - encodeFunctionData( - functionFragment: "priceFeed1", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "priceFeed2", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "priceFeed3", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "priceFeedType", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "setLimiter", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "skipPriceCheck", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "unpause", values?: undefined): string; - encodeFunctionData( - functionFragment: "upperBound", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "version", values?: undefined): string; - - decodeFunctionResult(functionFragment: "_acl", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "curvePool", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "decimalsDivider", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "delta", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "description", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getRoundData", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "latestRoundData", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "lowerBound", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "pause", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "paused", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "priceFeed1", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "priceFeed2", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "priceFeed3", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "priceFeedType", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "setLimiter", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "skipPriceCheck", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "unpause", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "upperBound", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "version", data: BytesLike): Result; - - events: { - "NewLimiterParams(uint256,uint256)": EventFragment; - "Paused(address)": EventFragment; - "Unpaused(address)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "NewLimiterParams"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Paused"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Unpaused"): EventFragment; -} - -export interface NewLimiterParamsEventObject { - lowerBound: BigNumber; - upperBound: BigNumber; -} -export type NewLimiterParamsEvent = TypedEvent< - [BigNumber, BigNumber], - NewLimiterParamsEventObject ->; - -export type NewLimiterParamsEventFilter = - TypedEventFilter; - -export interface PausedEventObject { - account: string; -} -export type PausedEvent = TypedEvent<[string], PausedEventObject>; - -export type PausedEventFilter = TypedEventFilter; - -export interface UnpausedEventObject { - account: string; -} -export type UnpausedEvent = TypedEvent<[string], UnpausedEventObject>; - -export type UnpausedEventFilter = TypedEventFilter; - -export interface CurveLP3PriceFeed extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: CurveLP3PriceFeedInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - _acl(overrides?: CallOverrides): Promise<[string]>; - - curvePool(overrides?: CallOverrides): Promise<[string]>; - - decimals(overrides?: CallOverrides): Promise<[number]>; - - decimalsDivider(overrides?: CallOverrides): Promise<[BigNumber]>; - - delta(overrides?: CallOverrides): Promise<[BigNumber]>; - - description(overrides?: CallOverrides): Promise<[string]>; - - getRoundData( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber, BigNumber, BigNumber, BigNumber]>; - - latestRoundData( - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber, BigNumber, BigNumber, BigNumber] & { - roundId: BigNumber; - answer: BigNumber; - startedAt: BigNumber; - updatedAt: BigNumber; - answeredInRound: BigNumber; - } - >; - - lowerBound(overrides?: CallOverrides): Promise<[BigNumber]>; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise<[boolean]>; - - priceFeed1(overrides?: CallOverrides): Promise<[string]>; - - priceFeed2(overrides?: CallOverrides): Promise<[string]>; - - priceFeed3(overrides?: CallOverrides): Promise<[string]>; - - priceFeedType(overrides?: CallOverrides): Promise<[number]>; - - setLimiter( - _lowerBound: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - skipPriceCheck(overrides?: CallOverrides): Promise<[boolean]>; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upperBound(overrides?: CallOverrides): Promise<[BigNumber]>; - - version(overrides?: CallOverrides): Promise<[BigNumber]>; - }; - - _acl(overrides?: CallOverrides): Promise; - - curvePool(overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - decimalsDivider(overrides?: CallOverrides): Promise; - - delta(overrides?: CallOverrides): Promise; - - description(overrides?: CallOverrides): Promise; - - getRoundData( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber, BigNumber, BigNumber, BigNumber]>; - - latestRoundData( - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber, BigNumber, BigNumber, BigNumber] & { - roundId: BigNumber; - answer: BigNumber; - startedAt: BigNumber; - updatedAt: BigNumber; - answeredInRound: BigNumber; - } - >; - - lowerBound(overrides?: CallOverrides): Promise; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise; - - priceFeed1(overrides?: CallOverrides): Promise; - - priceFeed2(overrides?: CallOverrides): Promise; - - priceFeed3(overrides?: CallOverrides): Promise; - - priceFeedType(overrides?: CallOverrides): Promise; - - setLimiter( - _lowerBound: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - skipPriceCheck(overrides?: CallOverrides): Promise; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upperBound(overrides?: CallOverrides): Promise; - - version(overrides?: CallOverrides): Promise; - - callStatic: { - _acl(overrides?: CallOverrides): Promise; - - curvePool(overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - decimalsDivider(overrides?: CallOverrides): Promise; - - delta(overrides?: CallOverrides): Promise; - - description(overrides?: CallOverrides): Promise; - - getRoundData( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber, BigNumber, BigNumber, BigNumber]>; - - latestRoundData( - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber, BigNumber, BigNumber, BigNumber] & { - roundId: BigNumber; - answer: BigNumber; - startedAt: BigNumber; - updatedAt: BigNumber; - answeredInRound: BigNumber; - } - >; - - lowerBound(overrides?: CallOverrides): Promise; - - pause(overrides?: CallOverrides): Promise; - - paused(overrides?: CallOverrides): Promise; - - priceFeed1(overrides?: CallOverrides): Promise; - - priceFeed2(overrides?: CallOverrides): Promise; - - priceFeed3(overrides?: CallOverrides): Promise; - - priceFeedType(overrides?: CallOverrides): Promise; - - setLimiter( - _lowerBound: BigNumberish, - overrides?: CallOverrides - ): Promise; - - skipPriceCheck(overrides?: CallOverrides): Promise; - - unpause(overrides?: CallOverrides): Promise; - - upperBound(overrides?: CallOverrides): Promise; - - version(overrides?: CallOverrides): Promise; - }; - - filters: { - "NewLimiterParams(uint256,uint256)"( - lowerBound?: null, - upperBound?: null - ): NewLimiterParamsEventFilter; - NewLimiterParams( - lowerBound?: null, - upperBound?: null - ): NewLimiterParamsEventFilter; - - "Paused(address)"(account?: null): PausedEventFilter; - Paused(account?: null): PausedEventFilter; - - "Unpaused(address)"(account?: null): UnpausedEventFilter; - Unpaused(account?: null): UnpausedEventFilter; - }; - - estimateGas: { - _acl(overrides?: CallOverrides): Promise; - - curvePool(overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - decimalsDivider(overrides?: CallOverrides): Promise; - - delta(overrides?: CallOverrides): Promise; - - description(overrides?: CallOverrides): Promise; - - getRoundData( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - latestRoundData(overrides?: CallOverrides): Promise; - - lowerBound(overrides?: CallOverrides): Promise; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise; - - priceFeed1(overrides?: CallOverrides): Promise; - - priceFeed2(overrides?: CallOverrides): Promise; - - priceFeed3(overrides?: CallOverrides): Promise; - - priceFeedType(overrides?: CallOverrides): Promise; - - setLimiter( - _lowerBound: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - skipPriceCheck(overrides?: CallOverrides): Promise; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upperBound(overrides?: CallOverrides): Promise; - - version(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - _acl(overrides?: CallOverrides): Promise; - - curvePool(overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - decimalsDivider(overrides?: CallOverrides): Promise; - - delta(overrides?: CallOverrides): Promise; - - description(overrides?: CallOverrides): Promise; - - getRoundData( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - latestRoundData(overrides?: CallOverrides): Promise; - - lowerBound(overrides?: CallOverrides): Promise; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise; - - priceFeed1(overrides?: CallOverrides): Promise; - - priceFeed2(overrides?: CallOverrides): Promise; - - priceFeed3(overrides?: CallOverrides): Promise; - - priceFeedType(overrides?: CallOverrides): Promise; - - setLimiter( - _lowerBound: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - skipPriceCheck(overrides?: CallOverrides): Promise; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upperBound(overrides?: CallOverrides): Promise; - - version(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/oracles/curve/CurveLP4PriceFeed.ts b/src/types/contracts/oracles/curve/CurveLP4PriceFeed.ts deleted file mode 100644 index 8e5f0467..00000000 --- a/src/types/contracts/oracles/curve/CurveLP4PriceFeed.ts +++ /dev/null @@ -1,553 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../common"; - -export interface CurveLP4PriceFeedInterface extends utils.Interface { - functions: { - "_acl()": FunctionFragment; - "curvePool()": FunctionFragment; - "decimals()": FunctionFragment; - "decimalsDivider()": FunctionFragment; - "delta()": FunctionFragment; - "description()": FunctionFragment; - "getRoundData(uint80)": FunctionFragment; - "latestRoundData()": FunctionFragment; - "lowerBound()": FunctionFragment; - "pause()": FunctionFragment; - "paused()": FunctionFragment; - "priceFeed1()": FunctionFragment; - "priceFeed2()": FunctionFragment; - "priceFeed3()": FunctionFragment; - "priceFeed4()": FunctionFragment; - "priceFeedType()": FunctionFragment; - "setLimiter(uint256)": FunctionFragment; - "skipPriceCheck()": FunctionFragment; - "unpause()": FunctionFragment; - "upperBound()": FunctionFragment; - "version()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "_acl" - | "curvePool" - | "decimals" - | "decimalsDivider" - | "delta" - | "description" - | "getRoundData" - | "latestRoundData" - | "lowerBound" - | "pause" - | "paused" - | "priceFeed1" - | "priceFeed2" - | "priceFeed3" - | "priceFeed4" - | "priceFeedType" - | "setLimiter" - | "skipPriceCheck" - | "unpause" - | "upperBound" - | "version" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "_acl", values?: undefined): string; - encodeFunctionData(functionFragment: "curvePool", values?: undefined): string; - encodeFunctionData(functionFragment: "decimals", values?: undefined): string; - encodeFunctionData( - functionFragment: "decimalsDivider", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "delta", values?: undefined): string; - encodeFunctionData( - functionFragment: "description", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "getRoundData", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "latestRoundData", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "lowerBound", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "pause", values?: undefined): string; - encodeFunctionData(functionFragment: "paused", values?: undefined): string; - encodeFunctionData( - functionFragment: "priceFeed1", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "priceFeed2", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "priceFeed3", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "priceFeed4", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "priceFeedType", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "setLimiter", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "skipPriceCheck", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "unpause", values?: undefined): string; - encodeFunctionData( - functionFragment: "upperBound", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "version", values?: undefined): string; - - decodeFunctionResult(functionFragment: "_acl", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "curvePool", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "decimalsDivider", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "delta", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "description", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getRoundData", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "latestRoundData", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "lowerBound", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "pause", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "paused", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "priceFeed1", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "priceFeed2", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "priceFeed3", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "priceFeed4", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "priceFeedType", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "setLimiter", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "skipPriceCheck", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "unpause", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "upperBound", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "version", data: BytesLike): Result; - - events: { - "NewLimiterParams(uint256,uint256)": EventFragment; - "Paused(address)": EventFragment; - "Unpaused(address)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "NewLimiterParams"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Paused"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Unpaused"): EventFragment; -} - -export interface NewLimiterParamsEventObject { - lowerBound: BigNumber; - upperBound: BigNumber; -} -export type NewLimiterParamsEvent = TypedEvent< - [BigNumber, BigNumber], - NewLimiterParamsEventObject ->; - -export type NewLimiterParamsEventFilter = - TypedEventFilter; - -export interface PausedEventObject { - account: string; -} -export type PausedEvent = TypedEvent<[string], PausedEventObject>; - -export type PausedEventFilter = TypedEventFilter; - -export interface UnpausedEventObject { - account: string; -} -export type UnpausedEvent = TypedEvent<[string], UnpausedEventObject>; - -export type UnpausedEventFilter = TypedEventFilter; - -export interface CurveLP4PriceFeed extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: CurveLP4PriceFeedInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - _acl(overrides?: CallOverrides): Promise<[string]>; - - curvePool(overrides?: CallOverrides): Promise<[string]>; - - decimals(overrides?: CallOverrides): Promise<[number]>; - - decimalsDivider(overrides?: CallOverrides): Promise<[BigNumber]>; - - delta(overrides?: CallOverrides): Promise<[BigNumber]>; - - description(overrides?: CallOverrides): Promise<[string]>; - - getRoundData( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber, BigNumber, BigNumber, BigNumber]>; - - latestRoundData( - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber, BigNumber, BigNumber, BigNumber] & { - roundId: BigNumber; - answer: BigNumber; - startedAt: BigNumber; - updatedAt: BigNumber; - answeredInRound: BigNumber; - } - >; - - lowerBound(overrides?: CallOverrides): Promise<[BigNumber]>; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise<[boolean]>; - - priceFeed1(overrides?: CallOverrides): Promise<[string]>; - - priceFeed2(overrides?: CallOverrides): Promise<[string]>; - - priceFeed3(overrides?: CallOverrides): Promise<[string]>; - - priceFeed4(overrides?: CallOverrides): Promise<[string]>; - - priceFeedType(overrides?: CallOverrides): Promise<[number]>; - - setLimiter( - _lowerBound: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - skipPriceCheck(overrides?: CallOverrides): Promise<[boolean]>; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upperBound(overrides?: CallOverrides): Promise<[BigNumber]>; - - version(overrides?: CallOverrides): Promise<[BigNumber]>; - }; - - _acl(overrides?: CallOverrides): Promise; - - curvePool(overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - decimalsDivider(overrides?: CallOverrides): Promise; - - delta(overrides?: CallOverrides): Promise; - - description(overrides?: CallOverrides): Promise; - - getRoundData( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber, BigNumber, BigNumber, BigNumber]>; - - latestRoundData( - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber, BigNumber, BigNumber, BigNumber] & { - roundId: BigNumber; - answer: BigNumber; - startedAt: BigNumber; - updatedAt: BigNumber; - answeredInRound: BigNumber; - } - >; - - lowerBound(overrides?: CallOverrides): Promise; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise; - - priceFeed1(overrides?: CallOverrides): Promise; - - priceFeed2(overrides?: CallOverrides): Promise; - - priceFeed3(overrides?: CallOverrides): Promise; - - priceFeed4(overrides?: CallOverrides): Promise; - - priceFeedType(overrides?: CallOverrides): Promise; - - setLimiter( - _lowerBound: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - skipPriceCheck(overrides?: CallOverrides): Promise; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upperBound(overrides?: CallOverrides): Promise; - - version(overrides?: CallOverrides): Promise; - - callStatic: { - _acl(overrides?: CallOverrides): Promise; - - curvePool(overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - decimalsDivider(overrides?: CallOverrides): Promise; - - delta(overrides?: CallOverrides): Promise; - - description(overrides?: CallOverrides): Promise; - - getRoundData( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber, BigNumber, BigNumber, BigNumber]>; - - latestRoundData( - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber, BigNumber, BigNumber, BigNumber] & { - roundId: BigNumber; - answer: BigNumber; - startedAt: BigNumber; - updatedAt: BigNumber; - answeredInRound: BigNumber; - } - >; - - lowerBound(overrides?: CallOverrides): Promise; - - pause(overrides?: CallOverrides): Promise; - - paused(overrides?: CallOverrides): Promise; - - priceFeed1(overrides?: CallOverrides): Promise; - - priceFeed2(overrides?: CallOverrides): Promise; - - priceFeed3(overrides?: CallOverrides): Promise; - - priceFeed4(overrides?: CallOverrides): Promise; - - priceFeedType(overrides?: CallOverrides): Promise; - - setLimiter( - _lowerBound: BigNumberish, - overrides?: CallOverrides - ): Promise; - - skipPriceCheck(overrides?: CallOverrides): Promise; - - unpause(overrides?: CallOverrides): Promise; - - upperBound(overrides?: CallOverrides): Promise; - - version(overrides?: CallOverrides): Promise; - }; - - filters: { - "NewLimiterParams(uint256,uint256)"( - lowerBound?: null, - upperBound?: null - ): NewLimiterParamsEventFilter; - NewLimiterParams( - lowerBound?: null, - upperBound?: null - ): NewLimiterParamsEventFilter; - - "Paused(address)"(account?: null): PausedEventFilter; - Paused(account?: null): PausedEventFilter; - - "Unpaused(address)"(account?: null): UnpausedEventFilter; - Unpaused(account?: null): UnpausedEventFilter; - }; - - estimateGas: { - _acl(overrides?: CallOverrides): Promise; - - curvePool(overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - decimalsDivider(overrides?: CallOverrides): Promise; - - delta(overrides?: CallOverrides): Promise; - - description(overrides?: CallOverrides): Promise; - - getRoundData( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - latestRoundData(overrides?: CallOverrides): Promise; - - lowerBound(overrides?: CallOverrides): Promise; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise; - - priceFeed1(overrides?: CallOverrides): Promise; - - priceFeed2(overrides?: CallOverrides): Promise; - - priceFeed3(overrides?: CallOverrides): Promise; - - priceFeed4(overrides?: CallOverrides): Promise; - - priceFeedType(overrides?: CallOverrides): Promise; - - setLimiter( - _lowerBound: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - skipPriceCheck(overrides?: CallOverrides): Promise; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upperBound(overrides?: CallOverrides): Promise; - - version(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - _acl(overrides?: CallOverrides): Promise; - - curvePool(overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - decimalsDivider(overrides?: CallOverrides): Promise; - - delta(overrides?: CallOverrides): Promise; - - description(overrides?: CallOverrides): Promise; - - getRoundData( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - latestRoundData(overrides?: CallOverrides): Promise; - - lowerBound(overrides?: CallOverrides): Promise; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise; - - priceFeed1(overrides?: CallOverrides): Promise; - - priceFeed2(overrides?: CallOverrides): Promise; - - priceFeed3(overrides?: CallOverrides): Promise; - - priceFeed4(overrides?: CallOverrides): Promise; - - priceFeedType(overrides?: CallOverrides): Promise; - - setLimiter( - _lowerBound: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - skipPriceCheck(overrides?: CallOverrides): Promise; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upperBound(overrides?: CallOverrides): Promise; - - version(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/oracles/curve/index.ts b/src/types/contracts/oracles/curve/index.ts deleted file mode 100644 index 78882dc5..00000000 --- a/src/types/contracts/oracles/curve/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { AbstractCurveLPPriceFeed } from "./AbstractCurveLPPriceFeed"; -export type { CurveLP2PriceFeed } from "./CurveLP2PriceFeed"; -export type { CurveLP3PriceFeed } from "./CurveLP3PriceFeed"; -export type { CurveLP4PriceFeed } from "./CurveLP4PriceFeed"; diff --git a/src/types/contracts/oracles/index.ts b/src/types/contracts/oracles/index.ts deleted file mode 100644 index ef0f19f6..00000000 --- a/src/types/contracts/oracles/index.ts +++ /dev/null @@ -1,11 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type * as curve from "./curve"; -export type { curve }; -import type * as yearn from "./yearn"; -export type { yearn }; -export type { LPPriceFeed } from "./LPPriceFeed"; -export type { PriceFeedChecker } from "./PriceFeedChecker"; -export type { PriceOracle } from "./PriceOracle"; -export type { ZeroPriceFeed } from "./ZeroPriceFeed"; diff --git a/src/types/contracts/oracles/yearn/YearnPriceFeed.ts b/src/types/contracts/oracles/yearn/YearnPriceFeed.ts deleted file mode 100644 index 86000c7f..00000000 --- a/src/types/contracts/oracles/yearn/YearnPriceFeed.ts +++ /dev/null @@ -1,499 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../common"; - -export interface YearnPriceFeedInterface extends utils.Interface { - functions: { - "_acl()": FunctionFragment; - "decimals()": FunctionFragment; - "decimalsDivider()": FunctionFragment; - "delta()": FunctionFragment; - "description()": FunctionFragment; - "getRoundData(uint80)": FunctionFragment; - "latestRoundData()": FunctionFragment; - "lowerBound()": FunctionFragment; - "pause()": FunctionFragment; - "paused()": FunctionFragment; - "priceFeed()": FunctionFragment; - "priceFeedType()": FunctionFragment; - "setLimiter(uint256)": FunctionFragment; - "skipPriceCheck()": FunctionFragment; - "unpause()": FunctionFragment; - "upperBound()": FunctionFragment; - "version()": FunctionFragment; - "yVault()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "_acl" - | "decimals" - | "decimalsDivider" - | "delta" - | "description" - | "getRoundData" - | "latestRoundData" - | "lowerBound" - | "pause" - | "paused" - | "priceFeed" - | "priceFeedType" - | "setLimiter" - | "skipPriceCheck" - | "unpause" - | "upperBound" - | "version" - | "yVault" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "_acl", values?: undefined): string; - encodeFunctionData(functionFragment: "decimals", values?: undefined): string; - encodeFunctionData( - functionFragment: "decimalsDivider", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "delta", values?: undefined): string; - encodeFunctionData( - functionFragment: "description", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "getRoundData", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "latestRoundData", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "lowerBound", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "pause", values?: undefined): string; - encodeFunctionData(functionFragment: "paused", values?: undefined): string; - encodeFunctionData(functionFragment: "priceFeed", values?: undefined): string; - encodeFunctionData( - functionFragment: "priceFeedType", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "setLimiter", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "skipPriceCheck", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "unpause", values?: undefined): string; - encodeFunctionData( - functionFragment: "upperBound", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "version", values?: undefined): string; - encodeFunctionData(functionFragment: "yVault", values?: undefined): string; - - decodeFunctionResult(functionFragment: "_acl", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "decimalsDivider", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "delta", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "description", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getRoundData", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "latestRoundData", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "lowerBound", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "pause", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "paused", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "priceFeed", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "priceFeedType", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "setLimiter", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "skipPriceCheck", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "unpause", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "upperBound", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "version", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "yVault", data: BytesLike): Result; - - events: { - "NewLimiterParams(uint256,uint256)": EventFragment; - "Paused(address)": EventFragment; - "Unpaused(address)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "NewLimiterParams"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Paused"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Unpaused"): EventFragment; -} - -export interface NewLimiterParamsEventObject { - lowerBound: BigNumber; - upperBound: BigNumber; -} -export type NewLimiterParamsEvent = TypedEvent< - [BigNumber, BigNumber], - NewLimiterParamsEventObject ->; - -export type NewLimiterParamsEventFilter = - TypedEventFilter; - -export interface PausedEventObject { - account: string; -} -export type PausedEvent = TypedEvent<[string], PausedEventObject>; - -export type PausedEventFilter = TypedEventFilter; - -export interface UnpausedEventObject { - account: string; -} -export type UnpausedEvent = TypedEvent<[string], UnpausedEventObject>; - -export type UnpausedEventFilter = TypedEventFilter; - -export interface YearnPriceFeed extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: YearnPriceFeedInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - _acl(overrides?: CallOverrides): Promise<[string]>; - - decimals(overrides?: CallOverrides): Promise<[number]>; - - decimalsDivider(overrides?: CallOverrides): Promise<[BigNumber]>; - - delta(overrides?: CallOverrides): Promise<[BigNumber]>; - - description(overrides?: CallOverrides): Promise<[string]>; - - getRoundData( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber, BigNumber, BigNumber, BigNumber]>; - - latestRoundData( - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber, BigNumber, BigNumber, BigNumber] & { - roundId: BigNumber; - answer: BigNumber; - startedAt: BigNumber; - updatedAt: BigNumber; - answeredInRound: BigNumber; - } - >; - - lowerBound(overrides?: CallOverrides): Promise<[BigNumber]>; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise<[boolean]>; - - priceFeed(overrides?: CallOverrides): Promise<[string]>; - - priceFeedType(overrides?: CallOverrides): Promise<[number]>; - - setLimiter( - _lowerBound: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - skipPriceCheck(overrides?: CallOverrides): Promise<[boolean]>; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upperBound(overrides?: CallOverrides): Promise<[BigNumber]>; - - version(overrides?: CallOverrides): Promise<[BigNumber]>; - - yVault(overrides?: CallOverrides): Promise<[string]>; - }; - - _acl(overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - decimalsDivider(overrides?: CallOverrides): Promise; - - delta(overrides?: CallOverrides): Promise; - - description(overrides?: CallOverrides): Promise; - - getRoundData( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber, BigNumber, BigNumber, BigNumber]>; - - latestRoundData( - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber, BigNumber, BigNumber, BigNumber] & { - roundId: BigNumber; - answer: BigNumber; - startedAt: BigNumber; - updatedAt: BigNumber; - answeredInRound: BigNumber; - } - >; - - lowerBound(overrides?: CallOverrides): Promise; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise; - - priceFeed(overrides?: CallOverrides): Promise; - - priceFeedType(overrides?: CallOverrides): Promise; - - setLimiter( - _lowerBound: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - skipPriceCheck(overrides?: CallOverrides): Promise; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upperBound(overrides?: CallOverrides): Promise; - - version(overrides?: CallOverrides): Promise; - - yVault(overrides?: CallOverrides): Promise; - - callStatic: { - _acl(overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - decimalsDivider(overrides?: CallOverrides): Promise; - - delta(overrides?: CallOverrides): Promise; - - description(overrides?: CallOverrides): Promise; - - getRoundData( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber, BigNumber, BigNumber, BigNumber]>; - - latestRoundData( - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber, BigNumber, BigNumber, BigNumber] & { - roundId: BigNumber; - answer: BigNumber; - startedAt: BigNumber; - updatedAt: BigNumber; - answeredInRound: BigNumber; - } - >; - - lowerBound(overrides?: CallOverrides): Promise; - - pause(overrides?: CallOverrides): Promise; - - paused(overrides?: CallOverrides): Promise; - - priceFeed(overrides?: CallOverrides): Promise; - - priceFeedType(overrides?: CallOverrides): Promise; - - setLimiter( - _lowerBound: BigNumberish, - overrides?: CallOverrides - ): Promise; - - skipPriceCheck(overrides?: CallOverrides): Promise; - - unpause(overrides?: CallOverrides): Promise; - - upperBound(overrides?: CallOverrides): Promise; - - version(overrides?: CallOverrides): Promise; - - yVault(overrides?: CallOverrides): Promise; - }; - - filters: { - "NewLimiterParams(uint256,uint256)"( - lowerBound?: null, - upperBound?: null - ): NewLimiterParamsEventFilter; - NewLimiterParams( - lowerBound?: null, - upperBound?: null - ): NewLimiterParamsEventFilter; - - "Paused(address)"(account?: null): PausedEventFilter; - Paused(account?: null): PausedEventFilter; - - "Unpaused(address)"(account?: null): UnpausedEventFilter; - Unpaused(account?: null): UnpausedEventFilter; - }; - - estimateGas: { - _acl(overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - decimalsDivider(overrides?: CallOverrides): Promise; - - delta(overrides?: CallOverrides): Promise; - - description(overrides?: CallOverrides): Promise; - - getRoundData( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - latestRoundData(overrides?: CallOverrides): Promise; - - lowerBound(overrides?: CallOverrides): Promise; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise; - - priceFeed(overrides?: CallOverrides): Promise; - - priceFeedType(overrides?: CallOverrides): Promise; - - setLimiter( - _lowerBound: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - skipPriceCheck(overrides?: CallOverrides): Promise; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upperBound(overrides?: CallOverrides): Promise; - - version(overrides?: CallOverrides): Promise; - - yVault(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - _acl(overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - decimalsDivider(overrides?: CallOverrides): Promise; - - delta(overrides?: CallOverrides): Promise; - - description(overrides?: CallOverrides): Promise; - - getRoundData( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - latestRoundData(overrides?: CallOverrides): Promise; - - lowerBound(overrides?: CallOverrides): Promise; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise; - - priceFeed(overrides?: CallOverrides): Promise; - - priceFeedType(overrides?: CallOverrides): Promise; - - setLimiter( - _lowerBound: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - skipPriceCheck(overrides?: CallOverrides): Promise; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upperBound(overrides?: CallOverrides): Promise; - - version(overrides?: CallOverrides): Promise; - - yVault(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/oracles/yearn/index.ts b/src/types/contracts/oracles/yearn/index.ts deleted file mode 100644 index 958756a1..00000000 --- a/src/types/contracts/oracles/yearn/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { YearnPriceFeed } from "./YearnPriceFeed"; diff --git a/src/types/contracts/pathfinder/ConvexPathFinder.ts b/src/types/contracts/pathfinder/ConvexPathFinder.ts deleted file mode 100644 index b1517778..00000000 --- a/src/types/contracts/pathfinder/ConvexPathFinder.ts +++ /dev/null @@ -1,211 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../common"; - -export type BalanceStruct = { token: string; balance: BigNumberish }; - -export type BalanceStructOutput = [string, BigNumber] & { - token: string; - balance: BigNumber; -}; - -export type MultiCallStruct = { target: string; callData: BytesLike }; - -export type MultiCallStructOutput = [string, string] & { - target: string; - callData: string; -}; - -export interface ConvexPathFinderInterface extends utils.Interface { - functions: { - "booster()": FunctionFragment; - "cvx()": FunctionFragment; - "filterConvexAdapters(address[])": FunctionFragment; - "version()": FunctionFragment; - "withdrawAll(address,(address,uint256)[],address[])": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "booster" - | "cvx" - | "filterConvexAdapters" - | "version" - | "withdrawAll" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "booster", values?: undefined): string; - encodeFunctionData(functionFragment: "cvx", values?: undefined): string; - encodeFunctionData( - functionFragment: "filterConvexAdapters", - values: [string[]] - ): string; - encodeFunctionData(functionFragment: "version", values?: undefined): string; - encodeFunctionData( - functionFragment: "withdrawAll", - values: [string, BalanceStruct[], string[]] - ): string; - - decodeFunctionResult(functionFragment: "booster", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "cvx", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "filterConvexAdapters", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "version", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "withdrawAll", - data: BytesLike - ): Result; - - events: {}; -} - -export interface ConvexPathFinder extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: ConvexPathFinderInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - booster(overrides?: CallOverrides): Promise<[string]>; - - cvx(overrides?: CallOverrides): Promise<[string]>; - - filterConvexAdapters( - adapters: string[], - overrides?: CallOverrides - ): Promise< - [string[], string] & { result: string[]; boosterAdapter: string } - >; - - version(overrides?: CallOverrides): Promise<[BigNumber]>; - - withdrawAll( - creditAccount: string, - b: BalanceStruct[], - adapters: string[], - overrides?: CallOverrides - ): Promise<[BalanceStructOutput[], MultiCallStructOutput[]]>; - }; - - booster(overrides?: CallOverrides): Promise; - - cvx(overrides?: CallOverrides): Promise; - - filterConvexAdapters( - adapters: string[], - overrides?: CallOverrides - ): Promise<[string[], string] & { result: string[]; boosterAdapter: string }>; - - version(overrides?: CallOverrides): Promise; - - withdrawAll( - creditAccount: string, - b: BalanceStruct[], - adapters: string[], - overrides?: CallOverrides - ): Promise<[BalanceStructOutput[], MultiCallStructOutput[]]>; - - callStatic: { - booster(overrides?: CallOverrides): Promise; - - cvx(overrides?: CallOverrides): Promise; - - filterConvexAdapters( - adapters: string[], - overrides?: CallOverrides - ): Promise< - [string[], string] & { result: string[]; boosterAdapter: string } - >; - - version(overrides?: CallOverrides): Promise; - - withdrawAll( - creditAccount: string, - b: BalanceStruct[], - adapters: string[], - overrides?: CallOverrides - ): Promise<[BalanceStructOutput[], MultiCallStructOutput[]]>; - }; - - filters: {}; - - estimateGas: { - booster(overrides?: CallOverrides): Promise; - - cvx(overrides?: CallOverrides): Promise; - - filterConvexAdapters( - adapters: string[], - overrides?: CallOverrides - ): Promise; - - version(overrides?: CallOverrides): Promise; - - withdrawAll( - creditAccount: string, - b: BalanceStruct[], - adapters: string[], - overrides?: CallOverrides - ): Promise; - }; - - populateTransaction: { - booster(overrides?: CallOverrides): Promise; - - cvx(overrides?: CallOverrides): Promise; - - filterConvexAdapters( - adapters: string[], - overrides?: CallOverrides - ): Promise; - - version(overrides?: CallOverrides): Promise; - - withdrawAll( - creditAccount: string, - b: BalanceStruct[], - adapters: string[], - overrides?: CallOverrides - ): Promise; - }; -} diff --git a/src/types/contracts/pathfinder/CurveLPPathFinder.ts b/src/types/contracts/pathfinder/CurveLPPathFinder.ts deleted file mode 100644 index 8a5e28ae..00000000 --- a/src/types/contracts/pathfinder/CurveLPPathFinder.ts +++ /dev/null @@ -1,335 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../common"; - -export type BalanceStruct = { token: string; balance: BigNumberish }; - -export type BalanceStructOutput = [string, BigNumber] & { - token: string; - balance: BigNumber; -}; - -export type PathOptionStruct = { - target: string; - option: BigNumberish; - totalOptions: BigNumberish; -}; - -export type PathOptionStructOutput = [string, number, number] & { - target: string; - option: number; - totalOptions: number; -}; - -export type MultiCallStruct = { target: string; callData: BytesLike }; - -export type MultiCallStructOutput = [string, string] & { - target: string; - callData: string; -}; - -export interface CurveLPPathFinderInterface extends utils.Interface { - functions: { - "filterCurveLPAdapters(address[],bool)": FunctionFragment; - "owner()": FunctionFragment; - "renounceOwnership()": FunctionFragment; - "transferOwnership(address)": FunctionFragment; - "withdrawAll((address,uint256)[],address[],(address,uint8,uint8)[])": FunctionFragment; - "withdrawAllMeta((address,uint256)[],address[],(address,uint8,uint8)[])": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "filterCurveLPAdapters" - | "owner" - | "renounceOwnership" - | "transferOwnership" - | "withdrawAll" - | "withdrawAllMeta" - ): FunctionFragment; - - encodeFunctionData( - functionFragment: "filterCurveLPAdapters", - values: [string[], boolean] - ): string; - encodeFunctionData(functionFragment: "owner", values?: undefined): string; - encodeFunctionData( - functionFragment: "renounceOwnership", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "transferOwnership", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "withdrawAll", - values: [BalanceStruct[], string[], PathOptionStruct[]] - ): string; - encodeFunctionData( - functionFragment: "withdrawAllMeta", - values: [BalanceStruct[], string[], PathOptionStruct[]] - ): string; - - decodeFunctionResult( - functionFragment: "filterCurveLPAdapters", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "renounceOwnership", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "transferOwnership", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "withdrawAll", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "withdrawAllMeta", - data: BytesLike - ): Result; - - events: { - "OwnershipTransferred(address,address)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment; -} - -export interface OwnershipTransferredEventObject { - previousOwner: string; - newOwner: string; -} -export type OwnershipTransferredEvent = TypedEvent< - [string, string], - OwnershipTransferredEventObject ->; - -export type OwnershipTransferredEventFilter = - TypedEventFilter; - -export interface CurveLPPathFinder extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: CurveLPPathFinderInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - filterCurveLPAdapters( - adapters: string[], - metaPool: boolean, - overrides?: CallOverrides - ): Promise<[string[]] & { result: string[] }>; - - owner(overrides?: CallOverrides): Promise<[string]>; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdrawAll( - b: BalanceStruct[], - adapters: string[], - pathOptions: PathOptionStruct[], - overrides?: CallOverrides - ): Promise<[BalanceStructOutput[], MultiCallStructOutput[]]>; - - withdrawAllMeta( - b: BalanceStruct[], - adapters: string[], - pathOptions: PathOptionStruct[], - overrides?: CallOverrides - ): Promise<[BalanceStructOutput[], MultiCallStructOutput[]]>; - }; - - filterCurveLPAdapters( - adapters: string[], - metaPool: boolean, - overrides?: CallOverrides - ): Promise; - - owner(overrides?: CallOverrides): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdrawAll( - b: BalanceStruct[], - adapters: string[], - pathOptions: PathOptionStruct[], - overrides?: CallOverrides - ): Promise<[BalanceStructOutput[], MultiCallStructOutput[]]>; - - withdrawAllMeta( - b: BalanceStruct[], - adapters: string[], - pathOptions: PathOptionStruct[], - overrides?: CallOverrides - ): Promise<[BalanceStructOutput[], MultiCallStructOutput[]]>; - - callStatic: { - filterCurveLPAdapters( - adapters: string[], - metaPool: boolean, - overrides?: CallOverrides - ): Promise; - - owner(overrides?: CallOverrides): Promise; - - renounceOwnership(overrides?: CallOverrides): Promise; - - transferOwnership( - newOwner: string, - overrides?: CallOverrides - ): Promise; - - withdrawAll( - b: BalanceStruct[], - adapters: string[], - pathOptions: PathOptionStruct[], - overrides?: CallOverrides - ): Promise<[BalanceStructOutput[], MultiCallStructOutput[]]>; - - withdrawAllMeta( - b: BalanceStruct[], - adapters: string[], - pathOptions: PathOptionStruct[], - overrides?: CallOverrides - ): Promise<[BalanceStructOutput[], MultiCallStructOutput[]]>; - }; - - filters: { - "OwnershipTransferred(address,address)"( - previousOwner?: string | null, - newOwner?: string | null - ): OwnershipTransferredEventFilter; - OwnershipTransferred( - previousOwner?: string | null, - newOwner?: string | null - ): OwnershipTransferredEventFilter; - }; - - estimateGas: { - filterCurveLPAdapters( - adapters: string[], - metaPool: boolean, - overrides?: CallOverrides - ): Promise; - - owner(overrides?: CallOverrides): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdrawAll( - b: BalanceStruct[], - adapters: string[], - pathOptions: PathOptionStruct[], - overrides?: CallOverrides - ): Promise; - - withdrawAllMeta( - b: BalanceStruct[], - adapters: string[], - pathOptions: PathOptionStruct[], - overrides?: CallOverrides - ): Promise; - }; - - populateTransaction: { - filterCurveLPAdapters( - adapters: string[], - metaPool: boolean, - overrides?: CallOverrides - ): Promise; - - owner(overrides?: CallOverrides): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdrawAll( - b: BalanceStruct[], - adapters: string[], - pathOptions: PathOptionStruct[], - overrides?: CallOverrides - ): Promise; - - withdrawAllMeta( - b: BalanceStruct[], - adapters: string[], - pathOptions: PathOptionStruct[], - overrides?: CallOverrides - ): Promise; - }; -} diff --git a/src/types/contracts/pathfinder/CurvePathFinder.ts b/src/types/contracts/pathfinder/CurvePathFinder.ts deleted file mode 100644 index 35b79d7a..00000000 --- a/src/types/contracts/pathfinder/CurvePathFinder.ts +++ /dev/null @@ -1,514 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../common"; - -export type SwapTaskStruct = { - swapOperation: BigNumberish; - creditAccount: string; - tokenIn: string; - tokenOut: string; - connectors: string[]; - amount: BigNumberish; - slippage: BigNumberish; - externalSlippage: boolean; -}; - -export type SwapTaskStructOutput = [ - number, - string, - string, - string, - string[], - BigNumber, - BigNumber, - boolean -] & { - swapOperation: number; - creditAccount: string; - tokenIn: string; - tokenOut: string; - connectors: string[]; - amount: BigNumber; - slippage: BigNumber; - externalSlippage: boolean; -}; - -export type MultiCallStruct = { target: string; callData: BytesLike }; - -export type MultiCallStructOutput = [string, string] & { - target: string; - callData: string; -}; - -export type SwapQuoteStruct = { - multiCall: MultiCallStruct; - amount: BigNumberish; - found: boolean; - gasUsage: BigNumberish; -}; - -export type SwapQuoteStructOutput = [ - MultiCallStructOutput, - BigNumber, - boolean, - BigNumber -] & { - multiCall: MultiCallStructOutput; - amount: BigNumber; - found: boolean; - gasUsage: BigNumber; -}; - -export interface CurvePathFinderInterface extends utils.Interface { - functions: { - "addPool(address)": FunctionFragment; - "gasUsage(address,address,address)": FunctionFragment; - "getBestConnectorSwap((uint8,address,address,address,address[],uint256,uint256,bool),address)": FunctionFragment; - "getBestDirectPairSwap((uint8,address,address,address,address[],uint256,uint256,bool),address)": FunctionFragment; - "owner()": FunctionFragment; - "renounceOwnership()": FunctionFragment; - "setGasUsage(address,address,address,uint256)": FunctionFragment; - "tokenToCoin(address,address)": FunctionFragment; - "tokenToUnderlyingCoin(address,address)": FunctionFragment; - "transferOwnership(address)": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "addPool" - | "gasUsage" - | "getBestConnectorSwap" - | "getBestDirectPairSwap" - | "owner" - | "renounceOwnership" - | "setGasUsage" - | "tokenToCoin" - | "tokenToUnderlyingCoin" - | "transferOwnership" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "addPool", values: [string]): string; - encodeFunctionData( - functionFragment: "gasUsage", - values: [string, string, string] - ): string; - encodeFunctionData( - functionFragment: "getBestConnectorSwap", - values: [SwapTaskStruct, string] - ): string; - encodeFunctionData( - functionFragment: "getBestDirectPairSwap", - values: [SwapTaskStruct, string] - ): string; - encodeFunctionData(functionFragment: "owner", values?: undefined): string; - encodeFunctionData( - functionFragment: "renounceOwnership", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "setGasUsage", - values: [string, string, string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "tokenToCoin", - values: [string, string] - ): string; - encodeFunctionData( - functionFragment: "tokenToUnderlyingCoin", - values: [string, string] - ): string; - encodeFunctionData( - functionFragment: "transferOwnership", - values: [string] - ): string; - - decodeFunctionResult(functionFragment: "addPool", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "gasUsage", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "getBestConnectorSwap", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getBestDirectPairSwap", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "renounceOwnership", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "setGasUsage", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "tokenToCoin", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "tokenToUnderlyingCoin", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "transferOwnership", - data: BytesLike - ): Result; - - events: { - "OwnershipTransferred(address,address)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment; -} - -export interface OwnershipTransferredEventObject { - previousOwner: string; - newOwner: string; -} -export type OwnershipTransferredEvent = TypedEvent< - [string, string], - OwnershipTransferredEventObject ->; - -export type OwnershipTransferredEventFilter = - TypedEventFilter; - -export interface CurvePathFinder extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: CurvePathFinderInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - addPool( - curvePool: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - gasUsage( - arg0: string, - arg1: string, - arg2: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - getBestConnectorSwap( - swapTask: SwapTaskStruct, - adapter: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getBestDirectPairSwap( - swapTask: SwapTaskStruct, - adapter: string, - overrides?: CallOverrides - ): Promise<[SwapQuoteStructOutput] & { quote: SwapQuoteStructOutput }>; - - owner(overrides?: CallOverrides): Promise<[string]>; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setGasUsage( - pool: string, - token0: string, - token1: string, - usage: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - tokenToCoin( - arg0: string, - arg1: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - tokenToUnderlyingCoin( - arg0: string, - arg1: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - addPool( - curvePool: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - gasUsage( - arg0: string, - arg1: string, - arg2: string, - overrides?: CallOverrides - ): Promise; - - getBestConnectorSwap( - swapTask: SwapTaskStruct, - adapter: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getBestDirectPairSwap( - swapTask: SwapTaskStruct, - adapter: string, - overrides?: CallOverrides - ): Promise; - - owner(overrides?: CallOverrides): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setGasUsage( - pool: string, - token0: string, - token1: string, - usage: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - tokenToCoin( - arg0: string, - arg1: string, - overrides?: CallOverrides - ): Promise; - - tokenToUnderlyingCoin( - arg0: string, - arg1: string, - overrides?: CallOverrides - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - addPool(curvePool: string, overrides?: CallOverrides): Promise; - - gasUsage( - arg0: string, - arg1: string, - arg2: string, - overrides?: CallOverrides - ): Promise; - - getBestConnectorSwap( - swapTask: SwapTaskStruct, - adapter: string, - overrides?: CallOverrides - ): Promise; - - getBestDirectPairSwap( - swapTask: SwapTaskStruct, - adapter: string, - overrides?: CallOverrides - ): Promise; - - owner(overrides?: CallOverrides): Promise; - - renounceOwnership(overrides?: CallOverrides): Promise; - - setGasUsage( - pool: string, - token0: string, - token1: string, - usage: BigNumberish, - overrides?: CallOverrides - ): Promise; - - tokenToCoin( - arg0: string, - arg1: string, - overrides?: CallOverrides - ): Promise; - - tokenToUnderlyingCoin( - arg0: string, - arg1: string, - overrides?: CallOverrides - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - "OwnershipTransferred(address,address)"( - previousOwner?: string | null, - newOwner?: string | null - ): OwnershipTransferredEventFilter; - OwnershipTransferred( - previousOwner?: string | null, - newOwner?: string | null - ): OwnershipTransferredEventFilter; - }; - - estimateGas: { - addPool( - curvePool: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - gasUsage( - arg0: string, - arg1: string, - arg2: string, - overrides?: CallOverrides - ): Promise; - - getBestConnectorSwap( - swapTask: SwapTaskStruct, - adapter: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getBestDirectPairSwap( - swapTask: SwapTaskStruct, - adapter: string, - overrides?: CallOverrides - ): Promise; - - owner(overrides?: CallOverrides): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setGasUsage( - pool: string, - token0: string, - token1: string, - usage: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - tokenToCoin( - arg0: string, - arg1: string, - overrides?: CallOverrides - ): Promise; - - tokenToUnderlyingCoin( - arg0: string, - arg1: string, - overrides?: CallOverrides - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - addPool( - curvePool: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - gasUsage( - arg0: string, - arg1: string, - arg2: string, - overrides?: CallOverrides - ): Promise; - - getBestConnectorSwap( - swapTask: SwapTaskStruct, - adapter: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getBestDirectPairSwap( - swapTask: SwapTaskStruct, - adapter: string, - overrides?: CallOverrides - ): Promise; - - owner(overrides?: CallOverrides): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setGasUsage( - pool: string, - token0: string, - token1: string, - usage: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - tokenToCoin( - arg0: string, - arg1: string, - overrides?: CallOverrides - ): Promise; - - tokenToUnderlyingCoin( - arg0: string, - arg1: string, - overrides?: CallOverrides - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/src/types/contracts/pathfinder/NormalTokenPathFinder.ts b/src/types/contracts/pathfinder/NormalTokenPathFinder.ts deleted file mode 100644 index 2557a10f..00000000 --- a/src/types/contracts/pathfinder/NormalTokenPathFinder.ts +++ /dev/null @@ -1,526 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../common"; - -export type BalanceStruct = { token: string; balance: BigNumberish }; - -export type BalanceStructOutput = [string, BigNumber] & { - token: string; - balance: BigNumber; -}; - -export type ClosePathTaskStruct = { - creditAccount: string; - balances: BalanceStruct[]; - underlying: string; - connectors: string[]; - adapters: string[]; - gasPriceUnderlyingRAY: BigNumberish; - slippage: BigNumberish; -}; - -export type ClosePathTaskStructOutput = [ - string, - BalanceStructOutput[], - string, - string[], - string[], - BigNumber, - BigNumber -] & { - creditAccount: string; - balances: BalanceStructOutput[]; - underlying: string; - connectors: string[]; - adapters: string[]; - gasPriceUnderlyingRAY: BigNumber; - slippage: BigNumber; -}; - -export type MultiCallStruct = { target: string; callData: BytesLike }; - -export type MultiCallStructOutput = [string, string] & { - target: string; - callData: string; -}; - -export type PathFinderResultStruct = { - amount: BigNumberish; - gasUsage: BigNumberish; - calls: MultiCallStruct[]; -}; - -export type PathFinderResultStructOutput = [ - BigNumber, - BigNumber, - MultiCallStructOutput[] -] & { amount: BigNumber; gasUsage: BigNumber; calls: MultiCallStructOutput[] }; - -export type SwapQuoteStruct = { - multiCall: MultiCallStruct; - amount: BigNumberish; - found: boolean; - gasUsage: BigNumberish; -}; - -export type SwapQuoteStructOutput = [ - MultiCallStructOutput, - BigNumber, - boolean, - BigNumber -] & { - multiCall: MultiCallStructOutput; - amount: BigNumber; - found: boolean; - gasUsage: BigNumber; -}; - -export type SwapTaskStruct = { - swapOperation: BigNumberish; - creditAccount: string; - tokenIn: string; - tokenOut: string; - connectors: string[]; - amount: BigNumberish; - slippage: BigNumberish; - externalSlippage: boolean; -}; - -export type SwapTaskStructOutput = [ - number, - string, - string, - string, - string[], - BigNumber, - BigNumber, - boolean -] & { - swapOperation: number; - creditAccount: string; - tokenIn: string; - tokenOut: string; - connectors: string[]; - amount: BigNumber; - slippage: BigNumber; - externalSlippage: boolean; -}; - -export interface NormalTokenPathFinderInterface extends utils.Interface { - functions: { - "findNormalTokenBestPath((address,(address,uint256)[],address,address[],address[],uint256,uint256))": FunctionFragment; - "findSwapQuote((address,(address,uint256)[],address,address[],address[],uint256,uint256),uint256,bool)": FunctionFragment; - "getComplexPairSwap((uint8,address,address,address,address[],uint256,uint256,bool),uint256,uint256,address[])": FunctionFragment; - "getGasPriceTokenOutRAY(address)": FunctionFragment; - "owner()": FunctionFragment; - "priceOracle()": FunctionFragment; - "renounceOwnership()": FunctionFragment; - "swapPathFinder()": FunctionFragment; - "transferOwnership(address)": FunctionFragment; - "version()": FunctionFragment; - "wethToken()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "findNormalTokenBestPath" - | "findSwapQuote" - | "getComplexPairSwap" - | "getGasPriceTokenOutRAY" - | "owner" - | "priceOracle" - | "renounceOwnership" - | "swapPathFinder" - | "transferOwnership" - | "version" - | "wethToken" - ): FunctionFragment; - - encodeFunctionData( - functionFragment: "findNormalTokenBestPath", - values: [ClosePathTaskStruct] - ): string; - encodeFunctionData( - functionFragment: "findSwapQuote", - values: [ClosePathTaskStruct, BigNumberish, boolean] - ): string; - encodeFunctionData( - functionFragment: "getComplexPairSwap", - values: [SwapTaskStruct, BigNumberish, BigNumberish, string[]] - ): string; - encodeFunctionData( - functionFragment: "getGasPriceTokenOutRAY", - values: [string] - ): string; - encodeFunctionData(functionFragment: "owner", values?: undefined): string; - encodeFunctionData( - functionFragment: "priceOracle", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "renounceOwnership", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "swapPathFinder", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "transferOwnership", - values: [string] - ): string; - encodeFunctionData(functionFragment: "version", values?: undefined): string; - encodeFunctionData(functionFragment: "wethToken", values?: undefined): string; - - decodeFunctionResult( - functionFragment: "findNormalTokenBestPath", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "findSwapQuote", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getComplexPairSwap", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getGasPriceTokenOutRAY", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "priceOracle", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "renounceOwnership", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "swapPathFinder", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "transferOwnership", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "version", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "wethToken", data: BytesLike): Result; - - events: { - "OwnershipTransferred(address,address)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment; -} - -export interface OwnershipTransferredEventObject { - previousOwner: string; - newOwner: string; -} -export type OwnershipTransferredEvent = TypedEvent< - [string, string], - OwnershipTransferredEventObject ->; - -export type OwnershipTransferredEventFilter = - TypedEventFilter; - -export interface NormalTokenPathFinder extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: NormalTokenPathFinderInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - findNormalTokenBestPath( - task: ClosePathTaskStruct, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - findSwapQuote( - task: ClosePathTaskStruct, - tokenIndex: BigNumberish, - isConnector: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getComplexPairSwap( - swapTask: SwapTaskStruct, - connectorIndex: BigNumberish, - connectorCumulativeBalance: BigNumberish, - adapters: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getGasPriceTokenOutRAY( - token: string, - overrides?: CallOverrides - ): Promise<[BigNumber] & { gasPrice: BigNumber }>; - - owner(overrides?: CallOverrides): Promise<[string]>; - - priceOracle(overrides?: CallOverrides): Promise<[string]>; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - swapPathFinder(overrides?: CallOverrides): Promise<[string]>; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise<[BigNumber]>; - - wethToken(overrides?: CallOverrides): Promise<[string]>; - }; - - findNormalTokenBestPath( - task: ClosePathTaskStruct, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - findSwapQuote( - task: ClosePathTaskStruct, - tokenIndex: BigNumberish, - isConnector: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getComplexPairSwap( - swapTask: SwapTaskStruct, - connectorIndex: BigNumberish, - connectorCumulativeBalance: BigNumberish, - adapters: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getGasPriceTokenOutRAY( - token: string, - overrides?: CallOverrides - ): Promise; - - owner(overrides?: CallOverrides): Promise; - - priceOracle(overrides?: CallOverrides): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - swapPathFinder(overrides?: CallOverrides): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise; - - wethToken(overrides?: CallOverrides): Promise; - - callStatic: { - findNormalTokenBestPath( - task: ClosePathTaskStruct, - overrides?: CallOverrides - ): Promise; - - findSwapQuote( - task: ClosePathTaskStruct, - tokenIndex: BigNumberish, - isConnector: boolean, - overrides?: CallOverrides - ): Promise< - [SwapQuoteStructOutput, string] & { - quote: SwapQuoteStructOutput; - tokenOut: string; - } - >; - - getComplexPairSwap( - swapTask: SwapTaskStruct, - connectorIndex: BigNumberish, - connectorCumulativeBalance: BigNumberish, - adapters: string[], - overrides?: CallOverrides - ): Promise< - [SwapQuoteStructOutput, SwapQuoteStructOutput] & { - connectorTokenInQuote: SwapQuoteStructOutput; - connectorTokenOutQuote: SwapQuoteStructOutput; - } - >; - - getGasPriceTokenOutRAY( - token: string, - overrides?: CallOverrides - ): Promise; - - owner(overrides?: CallOverrides): Promise; - - priceOracle(overrides?: CallOverrides): Promise; - - renounceOwnership(overrides?: CallOverrides): Promise; - - swapPathFinder(overrides?: CallOverrides): Promise; - - transferOwnership( - newOwner: string, - overrides?: CallOverrides - ): Promise; - - version(overrides?: CallOverrides): Promise; - - wethToken(overrides?: CallOverrides): Promise; - }; - - filters: { - "OwnershipTransferred(address,address)"( - previousOwner?: string | null, - newOwner?: string | null - ): OwnershipTransferredEventFilter; - OwnershipTransferred( - previousOwner?: string | null, - newOwner?: string | null - ): OwnershipTransferredEventFilter; - }; - - estimateGas: { - findNormalTokenBestPath( - task: ClosePathTaskStruct, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - findSwapQuote( - task: ClosePathTaskStruct, - tokenIndex: BigNumberish, - isConnector: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getComplexPairSwap( - swapTask: SwapTaskStruct, - connectorIndex: BigNumberish, - connectorCumulativeBalance: BigNumberish, - adapters: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getGasPriceTokenOutRAY( - token: string, - overrides?: CallOverrides - ): Promise; - - owner(overrides?: CallOverrides): Promise; - - priceOracle(overrides?: CallOverrides): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - swapPathFinder(overrides?: CallOverrides): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise; - - wethToken(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - findNormalTokenBestPath( - task: ClosePathTaskStruct, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - findSwapQuote( - task: ClosePathTaskStruct, - tokenIndex: BigNumberish, - isConnector: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getComplexPairSwap( - swapTask: SwapTaskStruct, - connectorIndex: BigNumberish, - connectorCumulativeBalance: BigNumberish, - adapters: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getGasPriceTokenOutRAY( - token: string, - overrides?: CallOverrides - ): Promise; - - owner(overrides?: CallOverrides): Promise; - - priceOracle(overrides?: CallOverrides): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - swapPathFinder(overrides?: CallOverrides): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise; - - wethToken(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/pathfinder/UniswapV2PathFinder.ts b/src/types/contracts/pathfinder/UniswapV2PathFinder.ts deleted file mode 100644 index f5573064..00000000 --- a/src/types/contracts/pathfinder/UniswapV2PathFinder.ts +++ /dev/null @@ -1,422 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../common"; - -export type SwapTaskStruct = { - swapOperation: BigNumberish; - creditAccount: string; - tokenIn: string; - tokenOut: string; - connectors: string[]; - amount: BigNumberish; - slippage: BigNumberish; - externalSlippage: boolean; -}; - -export type SwapTaskStructOutput = [ - number, - string, - string, - string, - string[], - BigNumber, - BigNumber, - boolean -] & { - swapOperation: number; - creditAccount: string; - tokenIn: string; - tokenOut: string; - connectors: string[]; - amount: BigNumber; - slippage: BigNumber; - externalSlippage: boolean; -}; - -export type MultiCallStruct = { target: string; callData: BytesLike }; - -export type MultiCallStructOutput = [string, string] & { - target: string; - callData: string; -}; - -export type SwapQuoteStruct = { - multiCall: MultiCallStruct; - amount: BigNumberish; - found: boolean; - gasUsage: BigNumberish; -}; - -export type SwapQuoteStructOutput = [ - MultiCallStructOutput, - BigNumber, - boolean, - BigNumber -] & { - multiCall: MultiCallStructOutput; - amount: BigNumber; - found: boolean; - gasUsage: BigNumber; -}; - -export interface UniswapV2PathFinderInterface extends utils.Interface { - functions: { - "gasUsage(address,address,address)": FunctionFragment; - "getBestConnectorSwap((uint8,address,address,address,address[],uint256,uint256,bool),address)": FunctionFragment; - "getBestDirectPairSwap((uint8,address,address,address,address[],uint256,uint256,bool),address)": FunctionFragment; - "owner()": FunctionFragment; - "renounceOwnership()": FunctionFragment; - "setGasUsage(address,address,address,uint256)": FunctionFragment; - "transferOwnership(address)": FunctionFragment; - "version()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "gasUsage" - | "getBestConnectorSwap" - | "getBestDirectPairSwap" - | "owner" - | "renounceOwnership" - | "setGasUsage" - | "transferOwnership" - | "version" - ): FunctionFragment; - - encodeFunctionData( - functionFragment: "gasUsage", - values: [string, string, string] - ): string; - encodeFunctionData( - functionFragment: "getBestConnectorSwap", - values: [SwapTaskStruct, string] - ): string; - encodeFunctionData( - functionFragment: "getBestDirectPairSwap", - values: [SwapTaskStruct, string] - ): string; - encodeFunctionData(functionFragment: "owner", values?: undefined): string; - encodeFunctionData( - functionFragment: "renounceOwnership", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "setGasUsage", - values: [string, string, string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "transferOwnership", - values: [string] - ): string; - encodeFunctionData(functionFragment: "version", values?: undefined): string; - - decodeFunctionResult(functionFragment: "gasUsage", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "getBestConnectorSwap", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getBestDirectPairSwap", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "renounceOwnership", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "setGasUsage", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "transferOwnership", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "version", data: BytesLike): Result; - - events: { - "OwnershipTransferred(address,address)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment; -} - -export interface OwnershipTransferredEventObject { - previousOwner: string; - newOwner: string; -} -export type OwnershipTransferredEvent = TypedEvent< - [string, string], - OwnershipTransferredEventObject ->; - -export type OwnershipTransferredEventFilter = - TypedEventFilter; - -export interface UniswapV2PathFinder extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: UniswapV2PathFinderInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - gasUsage( - arg0: string, - arg1: string, - arg2: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - getBestConnectorSwap( - swapTask: SwapTaskStruct, - adapter: string, - overrides?: CallOverrides - ): Promise<[SwapQuoteStructOutput] & { quote: SwapQuoteStructOutput }>; - - getBestDirectPairSwap( - swapTask: SwapTaskStruct, - adapter: string, - overrides?: CallOverrides - ): Promise<[SwapQuoteStructOutput] & { quote: SwapQuoteStructOutput }>; - - owner(overrides?: CallOverrides): Promise<[string]>; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setGasUsage( - router: string, - token0: string, - token1: string, - usage: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise<[BigNumber]>; - }; - - gasUsage( - arg0: string, - arg1: string, - arg2: string, - overrides?: CallOverrides - ): Promise; - - getBestConnectorSwap( - swapTask: SwapTaskStruct, - adapter: string, - overrides?: CallOverrides - ): Promise; - - getBestDirectPairSwap( - swapTask: SwapTaskStruct, - adapter: string, - overrides?: CallOverrides - ): Promise; - - owner(overrides?: CallOverrides): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setGasUsage( - router: string, - token0: string, - token1: string, - usage: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise; - - callStatic: { - gasUsage( - arg0: string, - arg1: string, - arg2: string, - overrides?: CallOverrides - ): Promise; - - getBestConnectorSwap( - swapTask: SwapTaskStruct, - adapter: string, - overrides?: CallOverrides - ): Promise; - - getBestDirectPairSwap( - swapTask: SwapTaskStruct, - adapter: string, - overrides?: CallOverrides - ): Promise; - - owner(overrides?: CallOverrides): Promise; - - renounceOwnership(overrides?: CallOverrides): Promise; - - setGasUsage( - router: string, - token0: string, - token1: string, - usage: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: CallOverrides - ): Promise; - - version(overrides?: CallOverrides): Promise; - }; - - filters: { - "OwnershipTransferred(address,address)"( - previousOwner?: string | null, - newOwner?: string | null - ): OwnershipTransferredEventFilter; - OwnershipTransferred( - previousOwner?: string | null, - newOwner?: string | null - ): OwnershipTransferredEventFilter; - }; - - estimateGas: { - gasUsage( - arg0: string, - arg1: string, - arg2: string, - overrides?: CallOverrides - ): Promise; - - getBestConnectorSwap( - swapTask: SwapTaskStruct, - adapter: string, - overrides?: CallOverrides - ): Promise; - - getBestDirectPairSwap( - swapTask: SwapTaskStruct, - adapter: string, - overrides?: CallOverrides - ): Promise; - - owner(overrides?: CallOverrides): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setGasUsage( - router: string, - token0: string, - token1: string, - usage: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - gasUsage( - arg0: string, - arg1: string, - arg2: string, - overrides?: CallOverrides - ): Promise; - - getBestConnectorSwap( - swapTask: SwapTaskStruct, - adapter: string, - overrides?: CallOverrides - ): Promise; - - getBestDirectPairSwap( - swapTask: SwapTaskStruct, - adapter: string, - overrides?: CallOverrides - ): Promise; - - owner(overrides?: CallOverrides): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setGasUsage( - router: string, - token0: string, - token1: string, - usage: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/pathfinder/UniswapV3PathFinder.ts b/src/types/contracts/pathfinder/UniswapV3PathFinder.ts deleted file mode 100644 index 3a2a0fdd..00000000 --- a/src/types/contracts/pathfinder/UniswapV3PathFinder.ts +++ /dev/null @@ -1,559 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../common"; - -export type SwapTaskStruct = { - swapOperation: BigNumberish; - creditAccount: string; - tokenIn: string; - tokenOut: string; - connectors: string[]; - amount: BigNumberish; - slippage: BigNumberish; - externalSlippage: boolean; -}; - -export type SwapTaskStructOutput = [ - number, - string, - string, - string, - string[], - BigNumber, - BigNumber, - boolean -] & { - swapOperation: number; - creditAccount: string; - tokenIn: string; - tokenOut: string; - connectors: string[]; - amount: BigNumber; - slippage: BigNumber; - externalSlippage: boolean; -}; - -export type MultiCallStruct = { target: string; callData: BytesLike }; - -export type MultiCallStructOutput = [string, string] & { - target: string; - callData: string; -}; - -export type SwapQuoteStruct = { - multiCall: MultiCallStruct; - amount: BigNumberish; - found: boolean; - gasUsage: BigNumberish; -}; - -export type SwapQuoteStructOutput = [ - MultiCallStructOutput, - BigNumber, - boolean, - BigNumber -] & { - multiCall: MultiCallStructOutput; - amount: BigNumber; - found: boolean; - gasUsage: BigNumber; -}; - -export interface UniswapV3PathFinderInterface extends utils.Interface { - functions: { - "addQuoter(address,address)": FunctionFragment; - "fees(uint256)": FunctionFragment; - "gasUsage(address,address,address)": FunctionFragment; - "generatePathV3(uint8,address,uint256,address,uint256,address)": FunctionFragment; - "getBestConnectorSwap((uint8,address,address,address,address[],uint256,uint256,bool),address)": FunctionFragment; - "getBestDirectPairSwap((uint8,address,address,address,address[],uint256,uint256,bool),address)": FunctionFragment; - "owner()": FunctionFragment; - "renounceOwnership()": FunctionFragment; - "routerToQuoter(address)": FunctionFragment; - "setGasUsage(address,address,address,uint256)": FunctionFragment; - "transferOwnership(address)": FunctionFragment; - "version()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "addQuoter" - | "fees" - | "gasUsage" - | "generatePathV3" - | "getBestConnectorSwap" - | "getBestDirectPairSwap" - | "owner" - | "renounceOwnership" - | "routerToQuoter" - | "setGasUsage" - | "transferOwnership" - | "version" - ): FunctionFragment; - - encodeFunctionData( - functionFragment: "addQuoter", - values: [string, string] - ): string; - encodeFunctionData(functionFragment: "fees", values: [BigNumberish]): string; - encodeFunctionData( - functionFragment: "gasUsage", - values: [string, string, string] - ): string; - encodeFunctionData( - functionFragment: "generatePathV3", - values: [BigNumberish, string, BigNumberish, string, BigNumberish, string] - ): string; - encodeFunctionData( - functionFragment: "getBestConnectorSwap", - values: [SwapTaskStruct, string] - ): string; - encodeFunctionData( - functionFragment: "getBestDirectPairSwap", - values: [SwapTaskStruct, string] - ): string; - encodeFunctionData(functionFragment: "owner", values?: undefined): string; - encodeFunctionData( - functionFragment: "renounceOwnership", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "routerToQuoter", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "setGasUsage", - values: [string, string, string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "transferOwnership", - values: [string] - ): string; - encodeFunctionData(functionFragment: "version", values?: undefined): string; - - decodeFunctionResult(functionFragment: "addQuoter", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "fees", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "gasUsage", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "generatePathV3", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getBestConnectorSwap", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getBestDirectPairSwap", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "renounceOwnership", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "routerToQuoter", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "setGasUsage", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "transferOwnership", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "version", data: BytesLike): Result; - - events: { - "OwnershipTransferred(address,address)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment; -} - -export interface OwnershipTransferredEventObject { - previousOwner: string; - newOwner: string; -} -export type OwnershipTransferredEvent = TypedEvent< - [string, string], - OwnershipTransferredEventObject ->; - -export type OwnershipTransferredEventFilter = - TypedEventFilter; - -export interface UniswapV3PathFinder extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: UniswapV3PathFinderInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - addQuoter( - router: string, - quoter: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fees(index: BigNumberish, overrides?: CallOverrides): Promise<[number]>; - - gasUsage( - arg0: string, - arg1: string, - arg2: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - generatePathV3( - swapOperation: BigNumberish, - tokenIn: string, - feeIndex0: BigNumberish, - connector: string, - feeIndex1: BigNumberish, - tokenOut: string, - overrides?: CallOverrides - ): Promise<[string] & { result: string }>; - - getBestConnectorSwap( - swapTask: SwapTaskStruct, - adapter: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getBestDirectPairSwap( - swapTask: SwapTaskStruct, - adapter: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - owner(overrides?: CallOverrides): Promise<[string]>; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - routerToQuoter(arg0: string, overrides?: CallOverrides): Promise<[string]>; - - setGasUsage( - router: string, - token0: string, - token1: string, - usage: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise<[BigNumber]>; - }; - - addQuoter( - router: string, - quoter: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fees(index: BigNumberish, overrides?: CallOverrides): Promise; - - gasUsage( - arg0: string, - arg1: string, - arg2: string, - overrides?: CallOverrides - ): Promise; - - generatePathV3( - swapOperation: BigNumberish, - tokenIn: string, - feeIndex0: BigNumberish, - connector: string, - feeIndex1: BigNumberish, - tokenOut: string, - overrides?: CallOverrides - ): Promise; - - getBestConnectorSwap( - swapTask: SwapTaskStruct, - adapter: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getBestDirectPairSwap( - swapTask: SwapTaskStruct, - adapter: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - owner(overrides?: CallOverrides): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - routerToQuoter(arg0: string, overrides?: CallOverrides): Promise; - - setGasUsage( - router: string, - token0: string, - token1: string, - usage: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise; - - callStatic: { - addQuoter( - router: string, - quoter: string, - overrides?: CallOverrides - ): Promise; - - fees(index: BigNumberish, overrides?: CallOverrides): Promise; - - gasUsage( - arg0: string, - arg1: string, - arg2: string, - overrides?: CallOverrides - ): Promise; - - generatePathV3( - swapOperation: BigNumberish, - tokenIn: string, - feeIndex0: BigNumberish, - connector: string, - feeIndex1: BigNumberish, - tokenOut: string, - overrides?: CallOverrides - ): Promise; - - getBestConnectorSwap( - swapTask: SwapTaskStruct, - adapter: string, - overrides?: CallOverrides - ): Promise; - - getBestDirectPairSwap( - swapTask: SwapTaskStruct, - adapter: string, - overrides?: CallOverrides - ): Promise; - - owner(overrides?: CallOverrides): Promise; - - renounceOwnership(overrides?: CallOverrides): Promise; - - routerToQuoter(arg0: string, overrides?: CallOverrides): Promise; - - setGasUsage( - router: string, - token0: string, - token1: string, - usage: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: CallOverrides - ): Promise; - - version(overrides?: CallOverrides): Promise; - }; - - filters: { - "OwnershipTransferred(address,address)"( - previousOwner?: string | null, - newOwner?: string | null - ): OwnershipTransferredEventFilter; - OwnershipTransferred( - previousOwner?: string | null, - newOwner?: string | null - ): OwnershipTransferredEventFilter; - }; - - estimateGas: { - addQuoter( - router: string, - quoter: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fees(index: BigNumberish, overrides?: CallOverrides): Promise; - - gasUsage( - arg0: string, - arg1: string, - arg2: string, - overrides?: CallOverrides - ): Promise; - - generatePathV3( - swapOperation: BigNumberish, - tokenIn: string, - feeIndex0: BigNumberish, - connector: string, - feeIndex1: BigNumberish, - tokenOut: string, - overrides?: CallOverrides - ): Promise; - - getBestConnectorSwap( - swapTask: SwapTaskStruct, - adapter: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getBestDirectPairSwap( - swapTask: SwapTaskStruct, - adapter: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - owner(overrides?: CallOverrides): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - routerToQuoter(arg0: string, overrides?: CallOverrides): Promise; - - setGasUsage( - router: string, - token0: string, - token1: string, - usage: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - addQuoter( - router: string, - quoter: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fees( - index: BigNumberish, - overrides?: CallOverrides - ): Promise; - - gasUsage( - arg0: string, - arg1: string, - arg2: string, - overrides?: CallOverrides - ): Promise; - - generatePathV3( - swapOperation: BigNumberish, - tokenIn: string, - feeIndex0: BigNumberish, - connector: string, - feeIndex1: BigNumberish, - tokenOut: string, - overrides?: CallOverrides - ): Promise; - - getBestConnectorSwap( - swapTask: SwapTaskStruct, - adapter: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getBestDirectPairSwap( - swapTask: SwapTaskStruct, - adapter: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - owner(overrides?: CallOverrides): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - routerToQuoter( - arg0: string, - overrides?: CallOverrides - ): Promise; - - setGasUsage( - router: string, - token0: string, - token1: string, - usage: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/pathfinder/YearnPathFinder.ts b/src/types/contracts/pathfinder/YearnPathFinder.ts deleted file mode 100644 index 24ec1635..00000000 --- a/src/types/contracts/pathfinder/YearnPathFinder.ts +++ /dev/null @@ -1,200 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../common"; - -export type BalanceStruct = { token: string; balance: BigNumberish }; - -export type BalanceStructOutput = [string, BigNumber] & { - token: string; - balance: BigNumber; -}; - -export type MultiCallStruct = { target: string; callData: BytesLike }; - -export type MultiCallStructOutput = [string, string] & { - target: string; - callData: string; -}; - -export interface YearnPathFinderInterface extends utils.Interface { - functions: { - "estimateWithdraw(address,uint256)": FunctionFragment; - "filterYearnAdapters(address[])": FunctionFragment; - "withdrawAll((address,uint256)[],address[])": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "estimateWithdraw" - | "filterYearnAdapters" - | "withdrawAll" - ): FunctionFragment; - - encodeFunctionData( - functionFragment: "estimateWithdraw", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "filterYearnAdapters", - values: [string[]] - ): string; - encodeFunctionData( - functionFragment: "withdrawAll", - values: [BalanceStruct[], string[]] - ): string; - - decodeFunctionResult( - functionFragment: "estimateWithdraw", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "filterYearnAdapters", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "withdrawAll", - data: BytesLike - ): Result; - - events: {}; -} - -export interface YearnPathFinder extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: YearnPathFinderInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - estimateWithdraw( - yVault: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - filterYearnAdapters( - adapters: string[], - overrides?: CallOverrides - ): Promise<[string[]] & { result: string[] }>; - - withdrawAll( - b: BalanceStruct[], - adapters: string[], - overrides?: CallOverrides - ): Promise<[BalanceStructOutput[], MultiCallStructOutput[]]>; - }; - - estimateWithdraw( - yVault: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - filterYearnAdapters( - adapters: string[], - overrides?: CallOverrides - ): Promise; - - withdrawAll( - b: BalanceStruct[], - adapters: string[], - overrides?: CallOverrides - ): Promise<[BalanceStructOutput[], MultiCallStructOutput[]]>; - - callStatic: { - estimateWithdraw( - yVault: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - filterYearnAdapters( - adapters: string[], - overrides?: CallOverrides - ): Promise; - - withdrawAll( - b: BalanceStruct[], - adapters: string[], - overrides?: CallOverrides - ): Promise<[BalanceStructOutput[], MultiCallStructOutput[]]>; - }; - - filters: {}; - - estimateGas: { - estimateWithdraw( - yVault: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - filterYearnAdapters( - adapters: string[], - overrides?: CallOverrides - ): Promise; - - withdrawAll( - b: BalanceStruct[], - adapters: string[], - overrides?: CallOverrides - ): Promise; - }; - - populateTransaction: { - estimateWithdraw( - yVault: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - filterYearnAdapters( - adapters: string[], - overrides?: CallOverrides - ): Promise; - - withdrawAll( - b: BalanceStruct[], - adapters: string[], - overrides?: CallOverrides - ): Promise; - }; -} diff --git a/src/types/contracts/pathfinder/data/Balances.sol/index.ts b/src/types/contracts/pathfinder/data/Balances.sol/index.ts deleted file mode 100644 index 7d6ae87f..00000000 --- a/src/types/contracts/pathfinder/data/Balances.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { BalanceOps } from "./BalanceOps"; diff --git a/src/types/contracts/pathfinder/data/index.ts b/src/types/contracts/pathfinder/data/index.ts deleted file mode 100644 index 511c7437..00000000 --- a/src/types/contracts/pathfinder/data/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type * as balancesSol from "./Balances.sol"; -export type { balancesSol }; diff --git a/src/types/contracts/pathfinder/index.ts b/src/types/contracts/pathfinder/index.ts index db4c797e..106aac60 100644 --- a/src/types/contracts/pathfinder/index.ts +++ b/src/types/contracts/pathfinder/index.ts @@ -1,14 +1,6 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ -import type * as data from "./data"; -export type { data }; -export type { ConvexPathFinder } from "./ConvexPathFinder"; -export type { CurveLPPathFinder } from "./CurveLPPathFinder"; -export type { CurvePathFinder } from "./CurvePathFinder"; +import type * as interfaces from "./interfaces"; +export type { interfaces }; export type { ISwapper } from "./ISwapper"; -export type { NormalTokenPathFinder } from "./NormalTokenPathFinder"; -export type { SwapPathFinder } from "./SwapPathFinder"; -export type { UniswapV2PathFinder } from "./UniswapV2PathFinder"; -export type { UniswapV3PathFinder } from "./UniswapV3PathFinder"; -export type { YearnPathFinder } from "./YearnPathFinder"; diff --git a/src/types/contracts/pathfinder/SwapPathFinder.ts b/src/types/contracts/pathfinder/interfaces/ISwapPathFinder.ts similarity index 55% rename from src/types/contracts/pathfinder/SwapPathFinder.ts rename to src/types/contracts/pathfinder/interfaces/ISwapPathFinder.ts index ce964216..d4040818 100644 --- a/src/types/contracts/pathfinder/SwapPathFinder.ts +++ b/src/types/contracts/pathfinder/interfaces/ISwapPathFinder.ts @@ -13,18 +13,14 @@ import type { Signer, utils, } from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; +import type { FunctionFragment, Result } from "@ethersproject/abi"; import type { Listener, Provider } from "@ethersproject/providers"; import type { TypedEventFilter, TypedEvent, TypedListener, OnEvent, -} from "../../common"; +} from "../../../common"; export type SwapTaskStruct = { swapOperation: BigNumberish; @@ -83,40 +79,28 @@ export type SwapQuoteStructOutput = [ gasUsage: BigNumber; }; -export interface SwapPathFinderInterface extends utils.Interface { +export interface ISwapPathFinderInterface extends utils.Interface { functions: { - "curvePathFinder()": FunctionFragment; "findAllSwaps((uint8,address,address,address,address[],uint256,uint256,bool),address[])": FunctionFragment; + "findBestSwap((uint8,address,address,address,address[],uint256,uint256,bool),address[])": FunctionFragment; "getBestDirectPairSwap((uint8,address,address,address,address[],uint256,uint256,bool),address[],uint256)": FunctionFragment; "getPathFinder(address)": FunctionFragment; - "owner()": FunctionFragment; - "renounceOwnership()": FunctionFragment; - "transferOwnership(address)": FunctionFragment; - "uniV2pathFinder()": FunctionFragment; - "uniV3pathFinder()": FunctionFragment; - "version()": FunctionFragment; }; getFunction( nameOrSignatureOrTopic: - | "curvePathFinder" | "findAllSwaps" + | "findBestSwap" | "getBestDirectPairSwap" | "getPathFinder" - | "owner" - | "renounceOwnership" - | "transferOwnership" - | "uniV2pathFinder" - | "uniV3pathFinder" - | "version" ): FunctionFragment; encodeFunctionData( - functionFragment: "curvePathFinder", - values?: undefined + functionFragment: "findAllSwaps", + values: [SwapTaskStruct, string[]] ): string; encodeFunctionData( - functionFragment: "findAllSwaps", + functionFragment: "findBestSwap", values: [SwapTaskStruct, string[]] ): string; encodeFunctionData( @@ -127,31 +111,13 @@ export interface SwapPathFinderInterface extends utils.Interface { functionFragment: "getPathFinder", values: [string] ): string; - encodeFunctionData(functionFragment: "owner", values?: undefined): string; - encodeFunctionData( - functionFragment: "renounceOwnership", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "transferOwnership", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "uniV2pathFinder", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "uniV3pathFinder", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "version", values?: undefined): string; decodeFunctionResult( - functionFragment: "curvePathFinder", + functionFragment: "findAllSwaps", data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "findAllSwaps", + functionFragment: "findBestSwap", data: BytesLike ): Result; decodeFunctionResult( @@ -162,50 +128,16 @@ export interface SwapPathFinderInterface extends utils.Interface { functionFragment: "getPathFinder", data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "renounceOwnership", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "transferOwnership", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "uniV2pathFinder", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "uniV3pathFinder", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "version", data: BytesLike): Result; - events: { - "OwnershipTransferred(address,address)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment; -} - -export interface OwnershipTransferredEventObject { - previousOwner: string; - newOwner: string; + events: {}; } -export type OwnershipTransferredEvent = TypedEvent< - [string, string], - OwnershipTransferredEventObject ->; - -export type OwnershipTransferredEventFilter = - TypedEventFilter; -export interface SwapPathFinder extends BaseContract { +export interface ISwapPathFinder extends BaseContract { connect(signerOrProvider: Signer | Provider | string): this; attach(addressOrName: string): this; deployed(): Promise; - interface: SwapPathFinderInterface; + interface: ISwapPathFinderInterface; queryFilter( event: TypedEventFilter, @@ -227,14 +159,18 @@ export interface SwapPathFinder extends BaseContract { removeListener: OnEvent; functions: { - curvePathFinder(overrides?: CallOverrides): Promise<[string]>; - findAllSwaps( swapTask: SwapTaskStruct, adapters: string[], overrides?: Overrides & { from?: string | Promise } ): Promise; + findBestSwap( + swapTask: SwapTaskStruct, + adapters: string[], + overrides?: Overrides & { from?: string | Promise } + ): Promise; + getBestDirectPairSwap( swapTask: SwapTaskStruct, adapters: string[], @@ -246,68 +182,42 @@ export interface SwapPathFinder extends BaseContract { adapter: string, overrides?: CallOverrides ): Promise<[string] & { pathFinder: string }>; - - owner(overrides?: CallOverrides): Promise<[string]>; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - uniV2pathFinder(overrides?: CallOverrides): Promise<[string]>; - - uniV3pathFinder(overrides?: CallOverrides): Promise<[string]>; - - version(overrides?: CallOverrides): Promise<[BigNumber]>; }; - curvePathFinder(overrides?: CallOverrides): Promise; - findAllSwaps( swapTask: SwapTaskStruct, adapters: string[], overrides?: Overrides & { from?: string | Promise } ): Promise; - getBestDirectPairSwap( + findBestSwap( swapTask: SwapTaskStruct, adapters: string[], - gasPriceInTokenOut: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getPathFinder(adapter: string, overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - renounceOwnership( overrides?: Overrides & { from?: string | Promise } ): Promise; - transferOwnership( - newOwner: string, + getBestDirectPairSwap( + swapTask: SwapTaskStruct, + adapters: string[], + gasPriceInTokenOut: BigNumberish, overrides?: Overrides & { from?: string | Promise } ): Promise; - uniV2pathFinder(overrides?: CallOverrides): Promise; - - uniV3pathFinder(overrides?: CallOverrides): Promise; - - version(overrides?: CallOverrides): Promise; + getPathFinder(adapter: string, overrides?: CallOverrides): Promise; callStatic: { - curvePathFinder(overrides?: CallOverrides): Promise; - findAllSwaps( swapTask: SwapTaskStruct, adapters: string[], overrides?: CallOverrides ): Promise; + findBestSwap( + swapTask: SwapTaskStruct, + adapters: string[], + overrides?: CallOverrides + ): Promise; + getBestDirectPairSwap( swapTask: SwapTaskStruct, adapters: string[], @@ -316,43 +226,23 @@ export interface SwapPathFinder extends BaseContract { ): Promise; getPathFinder(adapter: string, overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - renounceOwnership(overrides?: CallOverrides): Promise; - - transferOwnership( - newOwner: string, - overrides?: CallOverrides - ): Promise; - - uniV2pathFinder(overrides?: CallOverrides): Promise; - - uniV3pathFinder(overrides?: CallOverrides): Promise; - - version(overrides?: CallOverrides): Promise; }; - filters: { - "OwnershipTransferred(address,address)"( - previousOwner?: string | null, - newOwner?: string | null - ): OwnershipTransferredEventFilter; - OwnershipTransferred( - previousOwner?: string | null, - newOwner?: string | null - ): OwnershipTransferredEventFilter; - }; + filters: {}; estimateGas: { - curvePathFinder(overrides?: CallOverrides): Promise; - findAllSwaps( swapTask: SwapTaskStruct, adapters: string[], overrides?: Overrides & { from?: string | Promise } ): Promise; + findBestSwap( + swapTask: SwapTaskStruct, + adapters: string[], + overrides?: Overrides & { from?: string | Promise } + ): Promise; + getBestDirectPairSwap( swapTask: SwapTaskStruct, adapters: string[], @@ -364,34 +254,21 @@ export interface SwapPathFinder extends BaseContract { adapter: string, overrides?: CallOverrides ): Promise; - - owner(overrides?: CallOverrides): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - uniV2pathFinder(overrides?: CallOverrides): Promise; - - uniV3pathFinder(overrides?: CallOverrides): Promise; - - version(overrides?: CallOverrides): Promise; }; populateTransaction: { - curvePathFinder(overrides?: CallOverrides): Promise; - findAllSwaps( swapTask: SwapTaskStruct, adapters: string[], overrides?: Overrides & { from?: string | Promise } ): Promise; + findBestSwap( + swapTask: SwapTaskStruct, + adapters: string[], + overrides?: Overrides & { from?: string | Promise } + ): Promise; + getBestDirectPairSwap( swapTask: SwapTaskStruct, adapters: string[], @@ -403,22 +280,5 @@ export interface SwapPathFinder extends BaseContract { adapter: string, overrides?: CallOverrides ): Promise; - - owner(overrides?: CallOverrides): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - uniV2pathFinder(overrides?: CallOverrides): Promise; - - uniV3pathFinder(overrides?: CallOverrides): Promise; - - version(overrides?: CallOverrides): Promise; }; } diff --git a/src/types/contracts/adapters/lido/LidoV1_WETHGateway.sol/index.ts b/src/types/contracts/pathfinder/interfaces/index.ts similarity index 60% rename from src/types/contracts/adapters/lido/LidoV1_WETHGateway.sol/index.ts rename to src/types/contracts/pathfinder/interfaces/index.ts index 84112fea..f691f40f 100644 --- a/src/types/contracts/adapters/lido/LidoV1_WETHGateway.sol/index.ts +++ b/src/types/contracts/pathfinder/interfaces/index.ts @@ -1,4 +1,4 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ -export type { LidoV1Gateway } from "./LidoV1Gateway"; +export type { ISwapPathFinder } from "./ISwapPathFinder"; diff --git a/src/types/contracts/pool/LinearInterestRateModel.ts b/src/types/contracts/pool/LinearInterestRateModel.ts deleted file mode 100644 index 5799f3b7..00000000 --- a/src/types/contracts/pool/LinearInterestRateModel.ts +++ /dev/null @@ -1,276 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../common"; - -export interface LinearInterestRateModelInterface extends utils.Interface { - functions: { - "_R_base_RAY()": FunctionFragment; - "_R_slope1_RAY()": FunctionFragment; - "_R_slope2_RAY()": FunctionFragment; - "_U_Optimal_WAD()": FunctionFragment; - "_U_Optimal_inverted_WAD()": FunctionFragment; - "calcBorrowRate(uint256,uint256)": FunctionFragment; - "getModelParameters()": FunctionFragment; - "version()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "_R_base_RAY" - | "_R_slope1_RAY" - | "_R_slope2_RAY" - | "_U_Optimal_WAD" - | "_U_Optimal_inverted_WAD" - | "calcBorrowRate" - | "getModelParameters" - | "version" - ): FunctionFragment; - - encodeFunctionData( - functionFragment: "_R_base_RAY", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "_R_slope1_RAY", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "_R_slope2_RAY", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "_U_Optimal_WAD", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "_U_Optimal_inverted_WAD", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "calcBorrowRate", - values: [BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "getModelParameters", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "version", values?: undefined): string; - - decodeFunctionResult( - functionFragment: "_R_base_RAY", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "_R_slope1_RAY", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "_R_slope2_RAY", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "_U_Optimal_WAD", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "_U_Optimal_inverted_WAD", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "calcBorrowRate", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getModelParameters", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "version", data: BytesLike): Result; - - events: {}; -} - -export interface LinearInterestRateModel extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: LinearInterestRateModelInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - _R_base_RAY(overrides?: CallOverrides): Promise<[BigNumber]>; - - _R_slope1_RAY(overrides?: CallOverrides): Promise<[BigNumber]>; - - _R_slope2_RAY(overrides?: CallOverrides): Promise<[BigNumber]>; - - _U_Optimal_WAD(overrides?: CallOverrides): Promise<[BigNumber]>; - - _U_Optimal_inverted_WAD(overrides?: CallOverrides): Promise<[BigNumber]>; - - calcBorrowRate( - expectedLiquidity: BigNumberish, - availableLiquidity: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - getModelParameters( - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber, BigNumber, BigNumber] & { - U_optimal: BigNumber; - R_base: BigNumber; - R_slope1: BigNumber; - R_slope2: BigNumber; - } - >; - - version(overrides?: CallOverrides): Promise<[BigNumber]>; - }; - - _R_base_RAY(overrides?: CallOverrides): Promise; - - _R_slope1_RAY(overrides?: CallOverrides): Promise; - - _R_slope2_RAY(overrides?: CallOverrides): Promise; - - _U_Optimal_WAD(overrides?: CallOverrides): Promise; - - _U_Optimal_inverted_WAD(overrides?: CallOverrides): Promise; - - calcBorrowRate( - expectedLiquidity: BigNumberish, - availableLiquidity: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getModelParameters( - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber, BigNumber, BigNumber] & { - U_optimal: BigNumber; - R_base: BigNumber; - R_slope1: BigNumber; - R_slope2: BigNumber; - } - >; - - version(overrides?: CallOverrides): Promise; - - callStatic: { - _R_base_RAY(overrides?: CallOverrides): Promise; - - _R_slope1_RAY(overrides?: CallOverrides): Promise; - - _R_slope2_RAY(overrides?: CallOverrides): Promise; - - _U_Optimal_WAD(overrides?: CallOverrides): Promise; - - _U_Optimal_inverted_WAD(overrides?: CallOverrides): Promise; - - calcBorrowRate( - expectedLiquidity: BigNumberish, - availableLiquidity: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getModelParameters( - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber, BigNumber, BigNumber] & { - U_optimal: BigNumber; - R_base: BigNumber; - R_slope1: BigNumber; - R_slope2: BigNumber; - } - >; - - version(overrides?: CallOverrides): Promise; - }; - - filters: {}; - - estimateGas: { - _R_base_RAY(overrides?: CallOverrides): Promise; - - _R_slope1_RAY(overrides?: CallOverrides): Promise; - - _R_slope2_RAY(overrides?: CallOverrides): Promise; - - _U_Optimal_WAD(overrides?: CallOverrides): Promise; - - _U_Optimal_inverted_WAD(overrides?: CallOverrides): Promise; - - calcBorrowRate( - expectedLiquidity: BigNumberish, - availableLiquidity: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getModelParameters(overrides?: CallOverrides): Promise; - - version(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - _R_base_RAY(overrides?: CallOverrides): Promise; - - _R_slope1_RAY(overrides?: CallOverrides): Promise; - - _R_slope2_RAY(overrides?: CallOverrides): Promise; - - _U_Optimal_WAD(overrides?: CallOverrides): Promise; - - _U_Optimal_inverted_WAD( - overrides?: CallOverrides - ): Promise; - - calcBorrowRate( - expectedLiquidity: BigNumberish, - availableLiquidity: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getModelParameters( - overrides?: CallOverrides - ): Promise; - - version(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/pool/PoolService.ts b/src/types/contracts/pool/PoolService.ts deleted file mode 100644 index b1a1dc5f..00000000 --- a/src/types/contracts/pool/PoolService.ts +++ /dev/null @@ -1,1314 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../common"; - -export interface PoolServiceInterface extends utils.Interface { - functions: { - "_acl()": FunctionFragment; - "_cumulativeIndex_RAY()": FunctionFragment; - "_expectedLiquidityLU()": FunctionFragment; - "_timestampLU()": FunctionFragment; - "addLiquidity(uint256,address,uint256)": FunctionFragment; - "addressProvider()": FunctionFragment; - "availableLiquidity()": FunctionFragment; - "borrowAPY_RAY()": FunctionFragment; - "calcLinearCumulative_RAY()": FunctionFragment; - "calcLinearIndex_RAY(uint256,uint256,uint256)": FunctionFragment; - "connectCreditManager(address)": FunctionFragment; - "creditManagers(uint256)": FunctionFragment; - "creditManagersCanBorrow(address)": FunctionFragment; - "creditManagersCanRepay(address)": FunctionFragment; - "creditManagersCount()": FunctionFragment; - "dieselToken()": FunctionFragment; - "expectedLiquidity()": FunctionFragment; - "expectedLiquidityLimit()": FunctionFragment; - "forbidCreditManagerToBorrow(address)": FunctionFragment; - "fromDiesel(uint256)": FunctionFragment; - "getDieselRate_RAY()": FunctionFragment; - "interestRateModel()": FunctionFragment; - "lendCreditAccount(uint256,address)": FunctionFragment; - "pause()": FunctionFragment; - "paused()": FunctionFragment; - "removeLiquidity(uint256,address)": FunctionFragment; - "repayCreditAccount(uint256,uint256,uint256)": FunctionFragment; - "setExpectedLiquidityLimit(uint256)": FunctionFragment; - "setWithdrawFee(uint256)": FunctionFragment; - "toDiesel(uint256)": FunctionFragment; - "totalBorrowed()": FunctionFragment; - "treasuryAddress()": FunctionFragment; - "underlyingToken()": FunctionFragment; - "unpause()": FunctionFragment; - "updateInterestRateModel(address)": FunctionFragment; - "version()": FunctionFragment; - "withdrawFee()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "_acl" - | "_cumulativeIndex_RAY" - | "_expectedLiquidityLU" - | "_timestampLU" - | "addLiquidity" - | "addressProvider" - | "availableLiquidity" - | "borrowAPY_RAY" - | "calcLinearCumulative_RAY" - | "calcLinearIndex_RAY" - | "connectCreditManager" - | "creditManagers" - | "creditManagersCanBorrow" - | "creditManagersCanRepay" - | "creditManagersCount" - | "dieselToken" - | "expectedLiquidity" - | "expectedLiquidityLimit" - | "forbidCreditManagerToBorrow" - | "fromDiesel" - | "getDieselRate_RAY" - | "interestRateModel" - | "lendCreditAccount" - | "pause" - | "paused" - | "removeLiquidity" - | "repayCreditAccount" - | "setExpectedLiquidityLimit" - | "setWithdrawFee" - | "toDiesel" - | "totalBorrowed" - | "treasuryAddress" - | "underlyingToken" - | "unpause" - | "updateInterestRateModel" - | "version" - | "withdrawFee" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "_acl", values?: undefined): string; - encodeFunctionData( - functionFragment: "_cumulativeIndex_RAY", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "_expectedLiquidityLU", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "_timestampLU", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "addLiquidity", - values: [BigNumberish, string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "addressProvider", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "availableLiquidity", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "borrowAPY_RAY", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "calcLinearCumulative_RAY", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "calcLinearIndex_RAY", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "connectCreditManager", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "creditManagers", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "creditManagersCanBorrow", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "creditManagersCanRepay", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "creditManagersCount", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "dieselToken", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "expectedLiquidity", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "expectedLiquidityLimit", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "forbidCreditManagerToBorrow", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "fromDiesel", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "getDieselRate_RAY", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "interestRateModel", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "lendCreditAccount", - values: [BigNumberish, string] - ): string; - encodeFunctionData(functionFragment: "pause", values?: undefined): string; - encodeFunctionData(functionFragment: "paused", values?: undefined): string; - encodeFunctionData( - functionFragment: "removeLiquidity", - values: [BigNumberish, string] - ): string; - encodeFunctionData( - functionFragment: "repayCreditAccount", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "setExpectedLiquidityLimit", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "setWithdrawFee", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "toDiesel", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "totalBorrowed", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "treasuryAddress", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "underlyingToken", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "unpause", values?: undefined): string; - encodeFunctionData( - functionFragment: "updateInterestRateModel", - values: [string] - ): string; - encodeFunctionData(functionFragment: "version", values?: undefined): string; - encodeFunctionData( - functionFragment: "withdrawFee", - values?: undefined - ): string; - - decodeFunctionResult(functionFragment: "_acl", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "_cumulativeIndex_RAY", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "_expectedLiquidityLU", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "_timestampLU", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "addLiquidity", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "addressProvider", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "availableLiquidity", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "borrowAPY_RAY", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "calcLinearCumulative_RAY", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "calcLinearIndex_RAY", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "connectCreditManager", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditManagers", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditManagersCanBorrow", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditManagersCanRepay", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditManagersCount", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "dieselToken", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "expectedLiquidity", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "expectedLiquidityLimit", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "forbidCreditManagerToBorrow", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "fromDiesel", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "getDieselRate_RAY", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "interestRateModel", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "lendCreditAccount", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "pause", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "paused", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "removeLiquidity", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "repayCreditAccount", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "setExpectedLiquidityLimit", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "setWithdrawFee", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "toDiesel", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "totalBorrowed", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "treasuryAddress", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "underlyingToken", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "unpause", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "updateInterestRateModel", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "version", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "withdrawFee", - data: BytesLike - ): Result; - - events: { - "AddLiquidity(address,address,uint256,uint256)": EventFragment; - "Borrow(address,address,uint256)": EventFragment; - "BorrowForbidden(address)": EventFragment; - "NewCreditManagerConnected(address)": EventFragment; - "NewExpectedLiquidityLimit(uint256)": EventFragment; - "NewInterestRateModel(address)": EventFragment; - "NewWithdrawFee(uint256)": EventFragment; - "Paused(address)": EventFragment; - "RemoveLiquidity(address,address,uint256)": EventFragment; - "Repay(address,uint256,uint256,uint256)": EventFragment; - "UncoveredLoss(address,uint256)": EventFragment; - "Unpaused(address)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "AddLiquidity"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Borrow"): EventFragment; - getEvent(nameOrSignatureOrTopic: "BorrowForbidden"): EventFragment; - getEvent(nameOrSignatureOrTopic: "NewCreditManagerConnected"): EventFragment; - getEvent(nameOrSignatureOrTopic: "NewExpectedLiquidityLimit"): EventFragment; - getEvent(nameOrSignatureOrTopic: "NewInterestRateModel"): EventFragment; - getEvent(nameOrSignatureOrTopic: "NewWithdrawFee"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Paused"): EventFragment; - getEvent(nameOrSignatureOrTopic: "RemoveLiquidity"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Repay"): EventFragment; - getEvent(nameOrSignatureOrTopic: "UncoveredLoss"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Unpaused"): EventFragment; -} - -export interface AddLiquidityEventObject { - sender: string; - onBehalfOf: string; - amount: BigNumber; - referralCode: BigNumber; -} -export type AddLiquidityEvent = TypedEvent< - [string, string, BigNumber, BigNumber], - AddLiquidityEventObject ->; - -export type AddLiquidityEventFilter = TypedEventFilter; - -export interface BorrowEventObject { - creditManager: string; - creditAccount: string; - amount: BigNumber; -} -export type BorrowEvent = TypedEvent< - [string, string, BigNumber], - BorrowEventObject ->; - -export type BorrowEventFilter = TypedEventFilter; - -export interface BorrowForbiddenEventObject { - creditManager: string; -} -export type BorrowForbiddenEvent = TypedEvent< - [string], - BorrowForbiddenEventObject ->; - -export type BorrowForbiddenEventFilter = TypedEventFilter; - -export interface NewCreditManagerConnectedEventObject { - creditManager: string; -} -export type NewCreditManagerConnectedEvent = TypedEvent< - [string], - NewCreditManagerConnectedEventObject ->; - -export type NewCreditManagerConnectedEventFilter = - TypedEventFilter; - -export interface NewExpectedLiquidityLimitEventObject { - newLimit: BigNumber; -} -export type NewExpectedLiquidityLimitEvent = TypedEvent< - [BigNumber], - NewExpectedLiquidityLimitEventObject ->; - -export type NewExpectedLiquidityLimitEventFilter = - TypedEventFilter; - -export interface NewInterestRateModelEventObject { - newInterestRateModel: string; -} -export type NewInterestRateModelEvent = TypedEvent< - [string], - NewInterestRateModelEventObject ->; - -export type NewInterestRateModelEventFilter = - TypedEventFilter; - -export interface NewWithdrawFeeEventObject { - fee: BigNumber; -} -export type NewWithdrawFeeEvent = TypedEvent< - [BigNumber], - NewWithdrawFeeEventObject ->; - -export type NewWithdrawFeeEventFilter = TypedEventFilter; - -export interface PausedEventObject { - account: string; -} -export type PausedEvent = TypedEvent<[string], PausedEventObject>; - -export type PausedEventFilter = TypedEventFilter; - -export interface RemoveLiquidityEventObject { - sender: string; - to: string; - amount: BigNumber; -} -export type RemoveLiquidityEvent = TypedEvent< - [string, string, BigNumber], - RemoveLiquidityEventObject ->; - -export type RemoveLiquidityEventFilter = TypedEventFilter; - -export interface RepayEventObject { - creditManager: string; - borrowedAmount: BigNumber; - profit: BigNumber; - loss: BigNumber; -} -export type RepayEvent = TypedEvent< - [string, BigNumber, BigNumber, BigNumber], - RepayEventObject ->; - -export type RepayEventFilter = TypedEventFilter; - -export interface UncoveredLossEventObject { - creditManager: string; - loss: BigNumber; -} -export type UncoveredLossEvent = TypedEvent< - [string, BigNumber], - UncoveredLossEventObject ->; - -export type UncoveredLossEventFilter = TypedEventFilter; - -export interface UnpausedEventObject { - account: string; -} -export type UnpausedEvent = TypedEvent<[string], UnpausedEventObject>; - -export type UnpausedEventFilter = TypedEventFilter; - -export interface PoolService extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: PoolServiceInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - _acl(overrides?: CallOverrides): Promise<[string]>; - - _cumulativeIndex_RAY(overrides?: CallOverrides): Promise<[BigNumber]>; - - _expectedLiquidityLU(overrides?: CallOverrides): Promise<[BigNumber]>; - - _timestampLU(overrides?: CallOverrides): Promise<[BigNumber]>; - - addLiquidity( - amount: BigNumberish, - onBehalfOf: string, - referralCode: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - addressProvider(overrides?: CallOverrides): Promise<[string]>; - - availableLiquidity(overrides?: CallOverrides): Promise<[BigNumber]>; - - borrowAPY_RAY(overrides?: CallOverrides): Promise<[BigNumber]>; - - calcLinearCumulative_RAY(overrides?: CallOverrides): Promise<[BigNumber]>; - - calcLinearIndex_RAY( - cumulativeIndex_RAY: BigNumberish, - currentBorrowRate_RAY: BigNumberish, - timeDifference: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - connectCreditManager( - _creditManager: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - creditManagers( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - creditManagersCanBorrow( - arg0: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - creditManagersCanRepay( - arg0: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - creditManagersCount(overrides?: CallOverrides): Promise<[BigNumber]>; - - dieselToken(overrides?: CallOverrides): Promise<[string]>; - - expectedLiquidity(overrides?: CallOverrides): Promise<[BigNumber]>; - - expectedLiquidityLimit(overrides?: CallOverrides): Promise<[BigNumber]>; - - forbidCreditManagerToBorrow( - _creditManager: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fromDiesel( - amount: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - getDieselRate_RAY(overrides?: CallOverrides): Promise<[BigNumber]>; - - interestRateModel(overrides?: CallOverrides): Promise<[string]>; - - lendCreditAccount( - borrowedAmount: BigNumberish, - creditAccount: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise<[boolean]>; - - removeLiquidity( - amount: BigNumberish, - to: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - repayCreditAccount( - borrowedAmount: BigNumberish, - profit: BigNumberish, - loss: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setExpectedLiquidityLimit( - newLimit: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setWithdrawFee( - fee: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - toDiesel( - amount: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - totalBorrowed(overrides?: CallOverrides): Promise<[BigNumber]>; - - treasuryAddress(overrides?: CallOverrides): Promise<[string]>; - - underlyingToken(overrides?: CallOverrides): Promise<[string]>; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - updateInterestRateModel( - _interestRateModel: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise<[BigNumber]>; - - withdrawFee(overrides?: CallOverrides): Promise<[BigNumber]>; - }; - - _acl(overrides?: CallOverrides): Promise; - - _cumulativeIndex_RAY(overrides?: CallOverrides): Promise; - - _expectedLiquidityLU(overrides?: CallOverrides): Promise; - - _timestampLU(overrides?: CallOverrides): Promise; - - addLiquidity( - amount: BigNumberish, - onBehalfOf: string, - referralCode: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - addressProvider(overrides?: CallOverrides): Promise; - - availableLiquidity(overrides?: CallOverrides): Promise; - - borrowAPY_RAY(overrides?: CallOverrides): Promise; - - calcLinearCumulative_RAY(overrides?: CallOverrides): Promise; - - calcLinearIndex_RAY( - cumulativeIndex_RAY: BigNumberish, - currentBorrowRate_RAY: BigNumberish, - timeDifference: BigNumberish, - overrides?: CallOverrides - ): Promise; - - connectCreditManager( - _creditManager: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - creditManagers( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - creditManagersCanBorrow( - arg0: string, - overrides?: CallOverrides - ): Promise; - - creditManagersCanRepay( - arg0: string, - overrides?: CallOverrides - ): Promise; - - creditManagersCount(overrides?: CallOverrides): Promise; - - dieselToken(overrides?: CallOverrides): Promise; - - expectedLiquidity(overrides?: CallOverrides): Promise; - - expectedLiquidityLimit(overrides?: CallOverrides): Promise; - - forbidCreditManagerToBorrow( - _creditManager: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fromDiesel( - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getDieselRate_RAY(overrides?: CallOverrides): Promise; - - interestRateModel(overrides?: CallOverrides): Promise; - - lendCreditAccount( - borrowedAmount: BigNumberish, - creditAccount: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise; - - removeLiquidity( - amount: BigNumberish, - to: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - repayCreditAccount( - borrowedAmount: BigNumberish, - profit: BigNumberish, - loss: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setExpectedLiquidityLimit( - newLimit: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setWithdrawFee( - fee: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - toDiesel(amount: BigNumberish, overrides?: CallOverrides): Promise; - - totalBorrowed(overrides?: CallOverrides): Promise; - - treasuryAddress(overrides?: CallOverrides): Promise; - - underlyingToken(overrides?: CallOverrides): Promise; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - updateInterestRateModel( - _interestRateModel: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise; - - withdrawFee(overrides?: CallOverrides): Promise; - - callStatic: { - _acl(overrides?: CallOverrides): Promise; - - _cumulativeIndex_RAY(overrides?: CallOverrides): Promise; - - _expectedLiquidityLU(overrides?: CallOverrides): Promise; - - _timestampLU(overrides?: CallOverrides): Promise; - - addLiquidity( - amount: BigNumberish, - onBehalfOf: string, - referralCode: BigNumberish, - overrides?: CallOverrides - ): Promise; - - addressProvider(overrides?: CallOverrides): Promise; - - availableLiquidity(overrides?: CallOverrides): Promise; - - borrowAPY_RAY(overrides?: CallOverrides): Promise; - - calcLinearCumulative_RAY(overrides?: CallOverrides): Promise; - - calcLinearIndex_RAY( - cumulativeIndex_RAY: BigNumberish, - currentBorrowRate_RAY: BigNumberish, - timeDifference: BigNumberish, - overrides?: CallOverrides - ): Promise; - - connectCreditManager( - _creditManager: string, - overrides?: CallOverrides - ): Promise; - - creditManagers( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - creditManagersCanBorrow( - arg0: string, - overrides?: CallOverrides - ): Promise; - - creditManagersCanRepay( - arg0: string, - overrides?: CallOverrides - ): Promise; - - creditManagersCount(overrides?: CallOverrides): Promise; - - dieselToken(overrides?: CallOverrides): Promise; - - expectedLiquidity(overrides?: CallOverrides): Promise; - - expectedLiquidityLimit(overrides?: CallOverrides): Promise; - - forbidCreditManagerToBorrow( - _creditManager: string, - overrides?: CallOverrides - ): Promise; - - fromDiesel( - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getDieselRate_RAY(overrides?: CallOverrides): Promise; - - interestRateModel(overrides?: CallOverrides): Promise; - - lendCreditAccount( - borrowedAmount: BigNumberish, - creditAccount: string, - overrides?: CallOverrides - ): Promise; - - pause(overrides?: CallOverrides): Promise; - - paused(overrides?: CallOverrides): Promise; - - removeLiquidity( - amount: BigNumberish, - to: string, - overrides?: CallOverrides - ): Promise; - - repayCreditAccount( - borrowedAmount: BigNumberish, - profit: BigNumberish, - loss: BigNumberish, - overrides?: CallOverrides - ): Promise; - - setExpectedLiquidityLimit( - newLimit: BigNumberish, - overrides?: CallOverrides - ): Promise; - - setWithdrawFee(fee: BigNumberish, overrides?: CallOverrides): Promise; - - toDiesel( - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - totalBorrowed(overrides?: CallOverrides): Promise; - - treasuryAddress(overrides?: CallOverrides): Promise; - - underlyingToken(overrides?: CallOverrides): Promise; - - unpause(overrides?: CallOverrides): Promise; - - updateInterestRateModel( - _interestRateModel: string, - overrides?: CallOverrides - ): Promise; - - version(overrides?: CallOverrides): Promise; - - withdrawFee(overrides?: CallOverrides): Promise; - }; - - filters: { - "AddLiquidity(address,address,uint256,uint256)"( - sender?: string | null, - onBehalfOf?: string | null, - amount?: null, - referralCode?: null - ): AddLiquidityEventFilter; - AddLiquidity( - sender?: string | null, - onBehalfOf?: string | null, - amount?: null, - referralCode?: null - ): AddLiquidityEventFilter; - - "Borrow(address,address,uint256)"( - creditManager?: string | null, - creditAccount?: string | null, - amount?: null - ): BorrowEventFilter; - Borrow( - creditManager?: string | null, - creditAccount?: string | null, - amount?: null - ): BorrowEventFilter; - - "BorrowForbidden(address)"( - creditManager?: string | null - ): BorrowForbiddenEventFilter; - BorrowForbidden(creditManager?: string | null): BorrowForbiddenEventFilter; - - "NewCreditManagerConnected(address)"( - creditManager?: string | null - ): NewCreditManagerConnectedEventFilter; - NewCreditManagerConnected( - creditManager?: string | null - ): NewCreditManagerConnectedEventFilter; - - "NewExpectedLiquidityLimit(uint256)"( - newLimit?: null - ): NewExpectedLiquidityLimitEventFilter; - NewExpectedLiquidityLimit( - newLimit?: null - ): NewExpectedLiquidityLimitEventFilter; - - "NewInterestRateModel(address)"( - newInterestRateModel?: string | null - ): NewInterestRateModelEventFilter; - NewInterestRateModel( - newInterestRateModel?: string | null - ): NewInterestRateModelEventFilter; - - "NewWithdrawFee(uint256)"(fee?: null): NewWithdrawFeeEventFilter; - NewWithdrawFee(fee?: null): NewWithdrawFeeEventFilter; - - "Paused(address)"(account?: null): PausedEventFilter; - Paused(account?: null): PausedEventFilter; - - "RemoveLiquidity(address,address,uint256)"( - sender?: string | null, - to?: string | null, - amount?: null - ): RemoveLiquidityEventFilter; - RemoveLiquidity( - sender?: string | null, - to?: string | null, - amount?: null - ): RemoveLiquidityEventFilter; - - "Repay(address,uint256,uint256,uint256)"( - creditManager?: string | null, - borrowedAmount?: null, - profit?: null, - loss?: null - ): RepayEventFilter; - Repay( - creditManager?: string | null, - borrowedAmount?: null, - profit?: null, - loss?: null - ): RepayEventFilter; - - "UncoveredLoss(address,uint256)"( - creditManager?: string | null, - loss?: null - ): UncoveredLossEventFilter; - UncoveredLoss( - creditManager?: string | null, - loss?: null - ): UncoveredLossEventFilter; - - "Unpaused(address)"(account?: null): UnpausedEventFilter; - Unpaused(account?: null): UnpausedEventFilter; - }; - - estimateGas: { - _acl(overrides?: CallOverrides): Promise; - - _cumulativeIndex_RAY(overrides?: CallOverrides): Promise; - - _expectedLiquidityLU(overrides?: CallOverrides): Promise; - - _timestampLU(overrides?: CallOverrides): Promise; - - addLiquidity( - amount: BigNumberish, - onBehalfOf: string, - referralCode: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - addressProvider(overrides?: CallOverrides): Promise; - - availableLiquidity(overrides?: CallOverrides): Promise; - - borrowAPY_RAY(overrides?: CallOverrides): Promise; - - calcLinearCumulative_RAY(overrides?: CallOverrides): Promise; - - calcLinearIndex_RAY( - cumulativeIndex_RAY: BigNumberish, - currentBorrowRate_RAY: BigNumberish, - timeDifference: BigNumberish, - overrides?: CallOverrides - ): Promise; - - connectCreditManager( - _creditManager: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - creditManagers( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - creditManagersCanBorrow( - arg0: string, - overrides?: CallOverrides - ): Promise; - - creditManagersCanRepay( - arg0: string, - overrides?: CallOverrides - ): Promise; - - creditManagersCount(overrides?: CallOverrides): Promise; - - dieselToken(overrides?: CallOverrides): Promise; - - expectedLiquidity(overrides?: CallOverrides): Promise; - - expectedLiquidityLimit(overrides?: CallOverrides): Promise; - - forbidCreditManagerToBorrow( - _creditManager: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fromDiesel( - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getDieselRate_RAY(overrides?: CallOverrides): Promise; - - interestRateModel(overrides?: CallOverrides): Promise; - - lendCreditAccount( - borrowedAmount: BigNumberish, - creditAccount: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise; - - removeLiquidity( - amount: BigNumberish, - to: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - repayCreditAccount( - borrowedAmount: BigNumberish, - profit: BigNumberish, - loss: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setExpectedLiquidityLimit( - newLimit: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setWithdrawFee( - fee: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - toDiesel( - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - totalBorrowed(overrides?: CallOverrides): Promise; - - treasuryAddress(overrides?: CallOverrides): Promise; - - underlyingToken(overrides?: CallOverrides): Promise; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - updateInterestRateModel( - _interestRateModel: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise; - - withdrawFee(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - _acl(overrides?: CallOverrides): Promise; - - _cumulativeIndex_RAY( - overrides?: CallOverrides - ): Promise; - - _expectedLiquidityLU( - overrides?: CallOverrides - ): Promise; - - _timestampLU(overrides?: CallOverrides): Promise; - - addLiquidity( - amount: BigNumberish, - onBehalfOf: string, - referralCode: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - addressProvider(overrides?: CallOverrides): Promise; - - availableLiquidity( - overrides?: CallOverrides - ): Promise; - - borrowAPY_RAY(overrides?: CallOverrides): Promise; - - calcLinearCumulative_RAY( - overrides?: CallOverrides - ): Promise; - - calcLinearIndex_RAY( - cumulativeIndex_RAY: BigNumberish, - currentBorrowRate_RAY: BigNumberish, - timeDifference: BigNumberish, - overrides?: CallOverrides - ): Promise; - - connectCreditManager( - _creditManager: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - creditManagers( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - creditManagersCanBorrow( - arg0: string, - overrides?: CallOverrides - ): Promise; - - creditManagersCanRepay( - arg0: string, - overrides?: CallOverrides - ): Promise; - - creditManagersCount( - overrides?: CallOverrides - ): Promise; - - dieselToken(overrides?: CallOverrides): Promise; - - expectedLiquidity(overrides?: CallOverrides): Promise; - - expectedLiquidityLimit( - overrides?: CallOverrides - ): Promise; - - forbidCreditManagerToBorrow( - _creditManager: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fromDiesel( - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getDieselRate_RAY(overrides?: CallOverrides): Promise; - - interestRateModel(overrides?: CallOverrides): Promise; - - lendCreditAccount( - borrowedAmount: BigNumberish, - creditAccount: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise; - - removeLiquidity( - amount: BigNumberish, - to: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - repayCreditAccount( - borrowedAmount: BigNumberish, - profit: BigNumberish, - loss: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setExpectedLiquidityLimit( - newLimit: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setWithdrawFee( - fee: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - toDiesel( - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - totalBorrowed(overrides?: CallOverrides): Promise; - - treasuryAddress(overrides?: CallOverrides): Promise; - - underlyingToken(overrides?: CallOverrides): Promise; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - updateInterestRateModel( - _interestRateModel: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise; - - withdrawFee(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/pool/index.ts b/src/types/contracts/pool/index.ts deleted file mode 100644 index aeacbbee..00000000 --- a/src/types/contracts/pool/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { LinearInterestRateModel } from "./LinearInterestRateModel"; -export type { PoolService } from "./PoolService"; diff --git a/src/types/contracts/support/ContractUpgrader.ts b/src/types/contracts/support/ContractUpgrader.ts deleted file mode 100644 index cdf0367f..00000000 --- a/src/types/contracts/support/ContractUpgrader.ts +++ /dev/null @@ -1,284 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../common"; - -export interface ContractUpgraderInterface extends utils.Interface { - functions: { - "addressProvider()": FunctionFragment; - "configure()": FunctionFragment; - "destoy()": FunctionFragment; - "getRootBack()": FunctionFragment; - "owner()": FunctionFragment; - "renounceOwnership()": FunctionFragment; - "root()": FunctionFragment; - "transferOwnership(address)": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "addressProvider" - | "configure" - | "destoy" - | "getRootBack" - | "owner" - | "renounceOwnership" - | "root" - | "transferOwnership" - ): FunctionFragment; - - encodeFunctionData( - functionFragment: "addressProvider", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "configure", values?: undefined): string; - encodeFunctionData(functionFragment: "destoy", values?: undefined): string; - encodeFunctionData( - functionFragment: "getRootBack", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "owner", values?: undefined): string; - encodeFunctionData( - functionFragment: "renounceOwnership", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "root", values?: undefined): string; - encodeFunctionData( - functionFragment: "transferOwnership", - values: [string] - ): string; - - decodeFunctionResult( - functionFragment: "addressProvider", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "configure", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "destoy", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "getRootBack", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "renounceOwnership", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "root", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "transferOwnership", - data: BytesLike - ): Result; - - events: { - "OwnershipTransferred(address,address)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment; -} - -export interface OwnershipTransferredEventObject { - previousOwner: string; - newOwner: string; -} -export type OwnershipTransferredEvent = TypedEvent< - [string, string], - OwnershipTransferredEventObject ->; - -export type OwnershipTransferredEventFilter = - TypedEventFilter; - -export interface ContractUpgrader extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: ContractUpgraderInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - addressProvider(overrides?: CallOverrides): Promise<[string]>; - - configure( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - destoy( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getRootBack( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - owner(overrides?: CallOverrides): Promise<[string]>; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - root(overrides?: CallOverrides): Promise<[string]>; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - addressProvider(overrides?: CallOverrides): Promise; - - configure( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - destoy( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getRootBack( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - owner(overrides?: CallOverrides): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - root(overrides?: CallOverrides): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - addressProvider(overrides?: CallOverrides): Promise; - - configure(overrides?: CallOverrides): Promise; - - destoy(overrides?: CallOverrides): Promise; - - getRootBack(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - renounceOwnership(overrides?: CallOverrides): Promise; - - root(overrides?: CallOverrides): Promise; - - transferOwnership( - newOwner: string, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - "OwnershipTransferred(address,address)"( - previousOwner?: string | null, - newOwner?: string | null - ): OwnershipTransferredEventFilter; - OwnershipTransferred( - previousOwner?: string | null, - newOwner?: string | null - ): OwnershipTransferredEventFilter; - }; - - estimateGas: { - addressProvider(overrides?: CallOverrides): Promise; - - configure( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - destoy( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getRootBack( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - owner(overrides?: CallOverrides): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - root(overrides?: CallOverrides): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - addressProvider(overrides?: CallOverrides): Promise; - - configure( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - destoy( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getRootBack( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - owner(overrides?: CallOverrides): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - root(overrides?: CallOverrides): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/src/types/contracts/support/MerkleDistributor.ts b/src/types/contracts/support/MerkleDistributor.ts deleted file mode 100644 index 887dddcc..00000000 --- a/src/types/contracts/support/MerkleDistributor.ts +++ /dev/null @@ -1,200 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../common"; - -export interface MerkleDistributorInterface extends utils.Interface { - functions: { - "claim(uint256,address,uint256,bytes32[])": FunctionFragment; - "isClaimed(uint256)": FunctionFragment; - "merkleRoot()": FunctionFragment; - "token()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: "claim" | "isClaimed" | "merkleRoot" | "token" - ): FunctionFragment; - - encodeFunctionData( - functionFragment: "claim", - values: [BigNumberish, string, BigNumberish, BytesLike[]] - ): string; - encodeFunctionData( - functionFragment: "isClaimed", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "merkleRoot", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "token", values?: undefined): string; - - decodeFunctionResult(functionFragment: "claim", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "isClaimed", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "merkleRoot", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "token", data: BytesLike): Result; - - events: { - "Claimed(uint256,address,uint256)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "Claimed"): EventFragment; -} - -export interface ClaimedEventObject { - index: BigNumber; - account: string; - amount: BigNumber; -} -export type ClaimedEvent = TypedEvent< - [BigNumber, string, BigNumber], - ClaimedEventObject ->; - -export type ClaimedEventFilter = TypedEventFilter; - -export interface MerkleDistributor extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: MerkleDistributorInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - claim( - index: BigNumberish, - account: string, - amount: BigNumberish, - merkleProof: BytesLike[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - isClaimed( - index: BigNumberish, - overrides?: CallOverrides - ): Promise<[boolean]>; - - merkleRoot(overrides?: CallOverrides): Promise<[string]>; - - token(overrides?: CallOverrides): Promise<[string]>; - }; - - claim( - index: BigNumberish, - account: string, - amount: BigNumberish, - merkleProof: BytesLike[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - isClaimed(index: BigNumberish, overrides?: CallOverrides): Promise; - - merkleRoot(overrides?: CallOverrides): Promise; - - token(overrides?: CallOverrides): Promise; - - callStatic: { - claim( - index: BigNumberish, - account: string, - amount: BigNumberish, - merkleProof: BytesLike[], - overrides?: CallOverrides - ): Promise; - - isClaimed(index: BigNumberish, overrides?: CallOverrides): Promise; - - merkleRoot(overrides?: CallOverrides): Promise; - - token(overrides?: CallOverrides): Promise; - }; - - filters: { - "Claimed(uint256,address,uint256)"( - index?: null, - account?: null, - amount?: null - ): ClaimedEventFilter; - Claimed(index?: null, account?: null, amount?: null): ClaimedEventFilter; - }; - - estimateGas: { - claim( - index: BigNumberish, - account: string, - amount: BigNumberish, - merkleProof: BytesLike[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - isClaimed( - index: BigNumberish, - overrides?: CallOverrides - ): Promise; - - merkleRoot(overrides?: CallOverrides): Promise; - - token(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - claim( - index: BigNumberish, - account: string, - amount: BigNumberish, - merkleProof: BytesLike[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - isClaimed( - index: BigNumberish, - overrides?: CallOverrides - ): Promise; - - merkleRoot(overrides?: CallOverrides): Promise; - - token(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/support/PauseMulticall.ts b/src/types/contracts/support/PauseMulticall.ts deleted file mode 100644 index 7a451cd7..00000000 --- a/src/types/contracts/support/PauseMulticall.ts +++ /dev/null @@ -1,286 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../common"; - -export interface PauseMulticallInterface extends utils.Interface { - functions: { - "_acl()": FunctionFragment; - "acl()": FunctionFragment; - "cr()": FunctionFragment; - "pause()": FunctionFragment; - "pauseAllContracts()": FunctionFragment; - "pauseAllCreditManagers()": FunctionFragment; - "pauseAllPools()": FunctionFragment; - "paused()": FunctionFragment; - "unpause()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "_acl" - | "acl" - | "cr" - | "pause" - | "pauseAllContracts" - | "pauseAllCreditManagers" - | "pauseAllPools" - | "paused" - | "unpause" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "_acl", values?: undefined): string; - encodeFunctionData(functionFragment: "acl", values?: undefined): string; - encodeFunctionData(functionFragment: "cr", values?: undefined): string; - encodeFunctionData(functionFragment: "pause", values?: undefined): string; - encodeFunctionData( - functionFragment: "pauseAllContracts", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "pauseAllCreditManagers", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "pauseAllPools", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "paused", values?: undefined): string; - encodeFunctionData(functionFragment: "unpause", values?: undefined): string; - - decodeFunctionResult(functionFragment: "_acl", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "acl", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "cr", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "pause", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "pauseAllContracts", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "pauseAllCreditManagers", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "pauseAllPools", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "paused", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "unpause", data: BytesLike): Result; - - events: { - "Paused(address)": EventFragment; - "Unpaused(address)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "Paused"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Unpaused"): EventFragment; -} - -export interface PausedEventObject { - account: string; -} -export type PausedEvent = TypedEvent<[string], PausedEventObject>; - -export type PausedEventFilter = TypedEventFilter; - -export interface UnpausedEventObject { - account: string; -} -export type UnpausedEvent = TypedEvent<[string], UnpausedEventObject>; - -export type UnpausedEventFilter = TypedEventFilter; - -export interface PauseMulticall extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: PauseMulticallInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - _acl(overrides?: CallOverrides): Promise<[string]>; - - acl(overrides?: CallOverrides): Promise<[string]>; - - cr(overrides?: CallOverrides): Promise<[string]>; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - pauseAllContracts( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - pauseAllCreditManagers( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - pauseAllPools( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise<[boolean]>; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - _acl(overrides?: CallOverrides): Promise; - - acl(overrides?: CallOverrides): Promise; - - cr(overrides?: CallOverrides): Promise; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - pauseAllContracts( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - pauseAllCreditManagers( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - pauseAllPools( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - _acl(overrides?: CallOverrides): Promise; - - acl(overrides?: CallOverrides): Promise; - - cr(overrides?: CallOverrides): Promise; - - pause(overrides?: CallOverrides): Promise; - - pauseAllContracts(overrides?: CallOverrides): Promise; - - pauseAllCreditManagers(overrides?: CallOverrides): Promise; - - pauseAllPools(overrides?: CallOverrides): Promise; - - paused(overrides?: CallOverrides): Promise; - - unpause(overrides?: CallOverrides): Promise; - }; - - filters: { - "Paused(address)"(account?: null): PausedEventFilter; - Paused(account?: null): PausedEventFilter; - - "Unpaused(address)"(account?: null): UnpausedEventFilter; - Unpaused(account?: null): UnpausedEventFilter; - }; - - estimateGas: { - _acl(overrides?: CallOverrides): Promise; - - acl(overrides?: CallOverrides): Promise; - - cr(overrides?: CallOverrides): Promise; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - pauseAllContracts( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - pauseAllCreditManagers( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - pauseAllPools( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - _acl(overrides?: CallOverrides): Promise; - - acl(overrides?: CallOverrides): Promise; - - cr(overrides?: CallOverrides): Promise; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - pauseAllContracts( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - pauseAllCreditManagers( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - pauseAllPools( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/src/types/contracts/support/index.ts b/src/types/contracts/support/index.ts index 3338aa00..cefce752 100644 --- a/src/types/contracts/support/index.ts +++ b/src/types/contracts/support/index.ts @@ -3,6 +3,3 @@ /* eslint-disable */ import type * as multiCallSol from "./MultiCall.sol"; export type { multiCallSol }; -export type { ContractUpgrader } from "./ContractUpgrader"; -export type { MerkleDistributor } from "./MerkleDistributor"; -export type { PauseMulticall } from "./PauseMulticall"; diff --git a/src/types/contracts/test/Playground.t.sol/PlaygroundTest.ts b/src/types/contracts/test/Playground.t.sol/PlaygroundTest.ts deleted file mode 100644 index cff21121..00000000 --- a/src/types/contracts/test/Playground.t.sol/PlaygroundTest.ts +++ /dev/null @@ -1,425 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../common"; - -export interface PlaygroundTestInterface extends utils.Interface { - functions: { - "IS_TEST()": FunctionFragment; - "failed()": FunctionFragment; - "setUp()": FunctionFragment; - "test_01_test()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: "IS_TEST" | "failed" | "setUp" | "test_01_test" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "IS_TEST", values?: undefined): string; - encodeFunctionData(functionFragment: "failed", values?: undefined): string; - encodeFunctionData(functionFragment: "setUp", values?: undefined): string; - encodeFunctionData( - functionFragment: "test_01_test", - values?: undefined - ): string; - - decodeFunctionResult(functionFragment: "IS_TEST", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "failed", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "setUp", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "test_01_test", - data: BytesLike - ): Result; - - events: { - "log(string)": EventFragment; - "log_address(address)": EventFragment; - "log_bytes(bytes)": EventFragment; - "log_bytes32(bytes32)": EventFragment; - "log_int(int256)": EventFragment; - "log_named_address(string,address)": EventFragment; - "log_named_bytes(string,bytes)": EventFragment; - "log_named_bytes32(string,bytes32)": EventFragment; - "log_named_decimal_int(string,int256,uint256)": EventFragment; - "log_named_decimal_uint(string,uint256,uint256)": EventFragment; - "log_named_int(string,int256)": EventFragment; - "log_named_string(string,string)": EventFragment; - "log_named_uint(string,uint256)": EventFragment; - "log_string(string)": EventFragment; - "log_uint(uint256)": EventFragment; - "logs(bytes)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "log"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "logs"): EventFragment; -} - -export interface logEventObject { - arg0: string; -} -export type logEvent = TypedEvent<[string], logEventObject>; - -export type logEventFilter = TypedEventFilter; - -export interface log_addressEventObject { - arg0: string; -} -export type log_addressEvent = TypedEvent<[string], log_addressEventObject>; - -export type log_addressEventFilter = TypedEventFilter; - -export interface log_bytesEventObject { - arg0: string; -} -export type log_bytesEvent = TypedEvent<[string], log_bytesEventObject>; - -export type log_bytesEventFilter = TypedEventFilter; - -export interface log_bytes32EventObject { - arg0: string; -} -export type log_bytes32Event = TypedEvent<[string], log_bytes32EventObject>; - -export type log_bytes32EventFilter = TypedEventFilter; - -export interface log_intEventObject { - arg0: BigNumber; -} -export type log_intEvent = TypedEvent<[BigNumber], log_intEventObject>; - -export type log_intEventFilter = TypedEventFilter; - -export interface log_named_addressEventObject { - key: string; - val: string; -} -export type log_named_addressEvent = TypedEvent< - [string, string], - log_named_addressEventObject ->; - -export type log_named_addressEventFilter = - TypedEventFilter; - -export interface log_named_bytesEventObject { - key: string; - val: string; -} -export type log_named_bytesEvent = TypedEvent< - [string, string], - log_named_bytesEventObject ->; - -export type log_named_bytesEventFilter = TypedEventFilter; - -export interface log_named_bytes32EventObject { - key: string; - val: string; -} -export type log_named_bytes32Event = TypedEvent< - [string, string], - log_named_bytes32EventObject ->; - -export type log_named_bytes32EventFilter = - TypedEventFilter; - -export interface log_named_decimal_intEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_intEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_intEventObject ->; - -export type log_named_decimal_intEventFilter = - TypedEventFilter; - -export interface log_named_decimal_uintEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_uintEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_uintEventObject ->; - -export type log_named_decimal_uintEventFilter = - TypedEventFilter; - -export interface log_named_intEventObject { - key: string; - val: BigNumber; -} -export type log_named_intEvent = TypedEvent< - [string, BigNumber], - log_named_intEventObject ->; - -export type log_named_intEventFilter = TypedEventFilter; - -export interface log_named_stringEventObject { - key: string; - val: string; -} -export type log_named_stringEvent = TypedEvent< - [string, string], - log_named_stringEventObject ->; - -export type log_named_stringEventFilter = - TypedEventFilter; - -export interface log_named_uintEventObject { - key: string; - val: BigNumber; -} -export type log_named_uintEvent = TypedEvent< - [string, BigNumber], - log_named_uintEventObject ->; - -export type log_named_uintEventFilter = TypedEventFilter; - -export interface log_stringEventObject { - arg0: string; -} -export type log_stringEvent = TypedEvent<[string], log_stringEventObject>; - -export type log_stringEventFilter = TypedEventFilter; - -export interface log_uintEventObject { - arg0: BigNumber; -} -export type log_uintEvent = TypedEvent<[BigNumber], log_uintEventObject>; - -export type log_uintEventFilter = TypedEventFilter; - -export interface logsEventObject { - arg0: string; -} -export type logsEvent = TypedEvent<[string], logsEventObject>; - -export type logsEventFilter = TypedEventFilter; - -export interface PlaygroundTest extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: PlaygroundTestInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - IS_TEST(overrides?: CallOverrides): Promise<[boolean]>; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_01_test( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - IS_TEST(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_01_test( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - IS_TEST(overrides?: CallOverrides): Promise; - - failed(overrides?: CallOverrides): Promise; - - setUp(overrides?: CallOverrides): Promise; - - test_01_test(overrides?: CallOverrides): Promise; - }; - - filters: { - "log(string)"(arg0?: null): logEventFilter; - log(arg0?: null): logEventFilter; - - "log_address(address)"(arg0?: null): log_addressEventFilter; - log_address(arg0?: null): log_addressEventFilter; - - "log_bytes(bytes)"(arg0?: null): log_bytesEventFilter; - log_bytes(arg0?: null): log_bytesEventFilter; - - "log_bytes32(bytes32)"(arg0?: null): log_bytes32EventFilter; - log_bytes32(arg0?: null): log_bytes32EventFilter; - - "log_int(int256)"(arg0?: null): log_intEventFilter; - log_int(arg0?: null): log_intEventFilter; - - "log_named_address(string,address)"( - key?: null, - val?: null - ): log_named_addressEventFilter; - log_named_address(key?: null, val?: null): log_named_addressEventFilter; - - "log_named_bytes(string,bytes)"( - key?: null, - val?: null - ): log_named_bytesEventFilter; - log_named_bytes(key?: null, val?: null): log_named_bytesEventFilter; - - "log_named_bytes32(string,bytes32)"( - key?: null, - val?: null - ): log_named_bytes32EventFilter; - log_named_bytes32(key?: null, val?: null): log_named_bytes32EventFilter; - - "log_named_decimal_int(string,int256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - log_named_decimal_int( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - - "log_named_decimal_uint(string,uint256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - log_named_decimal_uint( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - - "log_named_int(string,int256)"( - key?: null, - val?: null - ): log_named_intEventFilter; - log_named_int(key?: null, val?: null): log_named_intEventFilter; - - "log_named_string(string,string)"( - key?: null, - val?: null - ): log_named_stringEventFilter; - log_named_string(key?: null, val?: null): log_named_stringEventFilter; - - "log_named_uint(string,uint256)"( - key?: null, - val?: null - ): log_named_uintEventFilter; - log_named_uint(key?: null, val?: null): log_named_uintEventFilter; - - "log_string(string)"(arg0?: null): log_stringEventFilter; - log_string(arg0?: null): log_stringEventFilter; - - "log_uint(uint256)"(arg0?: null): log_uintEventFilter; - log_uint(arg0?: null): log_uintEventFilter; - - "logs(bytes)"(arg0?: null): logsEventFilter; - logs(arg0?: null): logsEventFilter; - }; - - estimateGas: { - IS_TEST(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_01_test( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - IS_TEST(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_01_test( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/src/types/contracts/test/Playground.t.sol/index.ts b/src/types/contracts/test/Playground.t.sol/index.ts deleted file mode 100644 index 03794e5a..00000000 --- a/src/types/contracts/test/Playground.t.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { PlaygroundTest } from "./PlaygroundTest"; diff --git a/src/types/contracts/test/adapters/AbstractAdapter.t.sol/AbstractAdapterTest.ts b/src/types/contracts/test/adapters/AbstractAdapter.t.sol/AbstractAdapterTest.ts deleted file mode 100644 index d7952ca2..00000000 --- a/src/types/contracts/test/adapters/AbstractAdapter.t.sol/AbstractAdapterTest.ts +++ /dev/null @@ -1,1196 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface AbstractAdapterTestInterface extends utils.Interface { - functions: { - "IS_TEST()": FunctionFragment; - "cft()": FunctionFragment; - "creditConfigurator()": FunctionFragment; - "creditFacade()": FunctionFragment; - "creditManager()": FunctionFragment; - "failed()": FunctionFragment; - "setUp()": FunctionFragment; - "test_AA_01_constructor_sets_correct_values()": FunctionFragment; - "test_AA_02_constructor_reverts_on_zero_address()": FunctionFragment; - "test_AA_03_executeFast_check_reverts_if_user_has_no_account()": FunctionFragment; - "test_AA_04A_executeMaxAllowanceFastCheck_correctly_passes_to_credit_manager()": FunctionFragment; - "test_AA_04B_executeMaxAllowanceFastCheck_correctly_passes_to_credit_manager()": FunctionFragment; - "test_AA_05_executeMaxAllowanceFastCheck_correctly_sets_allowance()": FunctionFragment; - "test_AA_06A_executeSafeFastCheck_correctly_passes_to_credit_manager()": FunctionFragment; - "test_AA_06B_executeSafeFastCheck_correctly_passes_to_credit_manager()": FunctionFragment; - "test_AA_07_executeSafeFastCheck_correctly_sets_allowance()": FunctionFragment; - "test_AA_08A_execute_correctly_passes_to_credit_manager()": FunctionFragment; - "test_AA_08A_fullCheck_correctly_passes_to_credit_manager()": FunctionFragment; - "test_AA_08C_executeMaxAllowanceFastCheck_correctly_passes_to_credit_manager()": FunctionFragment; - "underlying()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "IS_TEST" - | "cft" - | "creditConfigurator" - | "creditFacade" - | "creditManager" - | "failed" - | "setUp" - | "test_AA_01_constructor_sets_correct_values" - | "test_AA_02_constructor_reverts_on_zero_address" - | "test_AA_03_executeFast_check_reverts_if_user_has_no_account" - | "test_AA_04A_executeMaxAllowanceFastCheck_correctly_passes_to_credit_manager" - | "test_AA_04B_executeMaxAllowanceFastCheck_correctly_passes_to_credit_manager" - | "test_AA_05_executeMaxAllowanceFastCheck_correctly_sets_allowance" - | "test_AA_06A_executeSafeFastCheck_correctly_passes_to_credit_manager" - | "test_AA_06B_executeSafeFastCheck_correctly_passes_to_credit_manager" - | "test_AA_07_executeSafeFastCheck_correctly_sets_allowance" - | "test_AA_08A_execute_correctly_passes_to_credit_manager" - | "test_AA_08A_fullCheck_correctly_passes_to_credit_manager" - | "test_AA_08C_executeMaxAllowanceFastCheck_correctly_passes_to_credit_manager" - | "underlying" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "IS_TEST", values?: undefined): string; - encodeFunctionData(functionFragment: "cft", values?: undefined): string; - encodeFunctionData( - functionFragment: "creditConfigurator", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditFacade", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditManager", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "failed", values?: undefined): string; - encodeFunctionData(functionFragment: "setUp", values?: undefined): string; - encodeFunctionData( - functionFragment: "test_AA_01_constructor_sets_correct_values", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_AA_02_constructor_reverts_on_zero_address", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_AA_03_executeFast_check_reverts_if_user_has_no_account", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_AA_04A_executeMaxAllowanceFastCheck_correctly_passes_to_credit_manager", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_AA_04B_executeMaxAllowanceFastCheck_correctly_passes_to_credit_manager", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_AA_05_executeMaxAllowanceFastCheck_correctly_sets_allowance", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_AA_06A_executeSafeFastCheck_correctly_passes_to_credit_manager", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_AA_06B_executeSafeFastCheck_correctly_passes_to_credit_manager", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_AA_07_executeSafeFastCheck_correctly_sets_allowance", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_AA_08A_execute_correctly_passes_to_credit_manager", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_AA_08A_fullCheck_correctly_passes_to_credit_manager", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_AA_08C_executeMaxAllowanceFastCheck_correctly_passes_to_credit_manager", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "underlying", - values?: undefined - ): string; - - decodeFunctionResult(functionFragment: "IS_TEST", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "cft", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "creditConfigurator", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditFacade", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditManager", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "failed", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "setUp", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "test_AA_01_constructor_sets_correct_values", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_AA_02_constructor_reverts_on_zero_address", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_AA_03_executeFast_check_reverts_if_user_has_no_account", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_AA_04A_executeMaxAllowanceFastCheck_correctly_passes_to_credit_manager", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_AA_04B_executeMaxAllowanceFastCheck_correctly_passes_to_credit_manager", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_AA_05_executeMaxAllowanceFastCheck_correctly_sets_allowance", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_AA_06A_executeSafeFastCheck_correctly_passes_to_credit_manager", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_AA_06B_executeSafeFastCheck_correctly_passes_to_credit_manager", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_AA_07_executeSafeFastCheck_correctly_sets_allowance", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_AA_08A_execute_correctly_passes_to_credit_manager", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_AA_08A_fullCheck_correctly_passes_to_credit_manager", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_AA_08C_executeMaxAllowanceFastCheck_correctly_passes_to_credit_manager", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "underlying", data: BytesLike): Result; - - events: { - "AddCollateral(address,address,uint256)": EventFragment; - "CloseCreditAccount(address,address)": EventFragment; - "DecreaseBorrowedAmount(address,uint256)": EventFragment; - "ExecuteOrder(address,address)": EventFragment; - "IncreaseBorrowedAmount(address,uint256)": EventFragment; - "LiquidateCreditAccount(address,address,address,uint256)": EventFragment; - "LiquidateExpiredCreditAccount(address,address,address,uint256)": EventFragment; - "MultiCallFinished()": EventFragment; - "MultiCallStarted(address)": EventFragment; - "NewConfigurator(address)": EventFragment; - "OpenCreditAccount(address,address,uint256,uint16)": EventFragment; - "TokenDisabled(address,address)": EventFragment; - "TokenEnabled(address,address)": EventFragment; - "TransferAccount(address,address)": EventFragment; - "TransferAccountAllowed(address,address,bool)": EventFragment; - "log(string)": EventFragment; - "log_address(address)": EventFragment; - "log_bytes(bytes)": EventFragment; - "log_bytes32(bytes32)": EventFragment; - "log_int(int256)": EventFragment; - "log_named_address(string,address)": EventFragment; - "log_named_bytes(string,bytes)": EventFragment; - "log_named_bytes32(string,bytes32)": EventFragment; - "log_named_decimal_int(string,int256,uint256)": EventFragment; - "log_named_decimal_uint(string,uint256,uint256)": EventFragment; - "log_named_int(string,int256)": EventFragment; - "log_named_string(string,string)": EventFragment; - "log_named_uint(string,uint256)": EventFragment; - "log_string(string)": EventFragment; - "log_uint(uint256)": EventFragment; - "logs(bytes)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "AddCollateral"): EventFragment; - getEvent(nameOrSignatureOrTopic: "CloseCreditAccount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "DecreaseBorrowedAmount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ExecuteOrder"): EventFragment; - getEvent(nameOrSignatureOrTopic: "IncreaseBorrowedAmount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "LiquidateCreditAccount"): EventFragment; - getEvent( - nameOrSignatureOrTopic: "LiquidateExpiredCreditAccount" - ): EventFragment; - getEvent(nameOrSignatureOrTopic: "MultiCallFinished"): EventFragment; - getEvent(nameOrSignatureOrTopic: "MultiCallStarted"): EventFragment; - getEvent(nameOrSignatureOrTopic: "NewConfigurator"): EventFragment; - getEvent(nameOrSignatureOrTopic: "OpenCreditAccount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TokenDisabled"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TokenEnabled"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TransferAccount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TransferAccountAllowed"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "logs"): EventFragment; -} - -export interface AddCollateralEventObject { - onBehalfOf: string; - token: string; - value: BigNumber; -} -export type AddCollateralEvent = TypedEvent< - [string, string, BigNumber], - AddCollateralEventObject ->; - -export type AddCollateralEventFilter = TypedEventFilter; - -export interface CloseCreditAccountEventObject { - owner: string; - to: string; -} -export type CloseCreditAccountEvent = TypedEvent< - [string, string], - CloseCreditAccountEventObject ->; - -export type CloseCreditAccountEventFilter = - TypedEventFilter; - -export interface DecreaseBorrowedAmountEventObject { - borrower: string; - amount: BigNumber; -} -export type DecreaseBorrowedAmountEvent = TypedEvent< - [string, BigNumber], - DecreaseBorrowedAmountEventObject ->; - -export type DecreaseBorrowedAmountEventFilter = - TypedEventFilter; - -export interface ExecuteOrderEventObject { - borrower: string; - target: string; -} -export type ExecuteOrderEvent = TypedEvent< - [string, string], - ExecuteOrderEventObject ->; - -export type ExecuteOrderEventFilter = TypedEventFilter; - -export interface IncreaseBorrowedAmountEventObject { - borrower: string; - amount: BigNumber; -} -export type IncreaseBorrowedAmountEvent = TypedEvent< - [string, BigNumber], - IncreaseBorrowedAmountEventObject ->; - -export type IncreaseBorrowedAmountEventFilter = - TypedEventFilter; - -export interface LiquidateCreditAccountEventObject { - owner: string; - liquidator: string; - to: string; - remainingFunds: BigNumber; -} -export type LiquidateCreditAccountEvent = TypedEvent< - [string, string, string, BigNumber], - LiquidateCreditAccountEventObject ->; - -export type LiquidateCreditAccountEventFilter = - TypedEventFilter; - -export interface LiquidateExpiredCreditAccountEventObject { - owner: string; - liquidator: string; - to: string; - remainingFunds: BigNumber; -} -export type LiquidateExpiredCreditAccountEvent = TypedEvent< - [string, string, string, BigNumber], - LiquidateExpiredCreditAccountEventObject ->; - -export type LiquidateExpiredCreditAccountEventFilter = - TypedEventFilter; - -export interface MultiCallFinishedEventObject {} -export type MultiCallFinishedEvent = TypedEvent< - [], - MultiCallFinishedEventObject ->; - -export type MultiCallFinishedEventFilter = - TypedEventFilter; - -export interface MultiCallStartedEventObject { - borrower: string; -} -export type MultiCallStartedEvent = TypedEvent< - [string], - MultiCallStartedEventObject ->; - -export type MultiCallStartedEventFilter = - TypedEventFilter; - -export interface NewConfiguratorEventObject { - newConfigurator: string; -} -export type NewConfiguratorEvent = TypedEvent< - [string], - NewConfiguratorEventObject ->; - -export type NewConfiguratorEventFilter = TypedEventFilter; - -export interface OpenCreditAccountEventObject { - onBehalfOf: string; - creditAccount: string; - borrowAmount: BigNumber; - referralCode: number; -} -export type OpenCreditAccountEvent = TypedEvent< - [string, string, BigNumber, number], - OpenCreditAccountEventObject ->; - -export type OpenCreditAccountEventFilter = - TypedEventFilter; - -export interface TokenDisabledEventObject { - creditAccount: string; - token: string; -} -export type TokenDisabledEvent = TypedEvent< - [string, string], - TokenDisabledEventObject ->; - -export type TokenDisabledEventFilter = TypedEventFilter; - -export interface TokenEnabledEventObject { - creditAccount: string; - token: string; -} -export type TokenEnabledEvent = TypedEvent< - [string, string], - TokenEnabledEventObject ->; - -export type TokenEnabledEventFilter = TypedEventFilter; - -export interface TransferAccountEventObject { - oldOwner: string; - newOwner: string; -} -export type TransferAccountEvent = TypedEvent< - [string, string], - TransferAccountEventObject ->; - -export type TransferAccountEventFilter = TypedEventFilter; - -export interface TransferAccountAllowedEventObject { - from: string; - to: string; - state: boolean; -} -export type TransferAccountAllowedEvent = TypedEvent< - [string, string, boolean], - TransferAccountAllowedEventObject ->; - -export type TransferAccountAllowedEventFilter = - TypedEventFilter; - -export interface logEventObject { - arg0: string; -} -export type logEvent = TypedEvent<[string], logEventObject>; - -export type logEventFilter = TypedEventFilter; - -export interface log_addressEventObject { - arg0: string; -} -export type log_addressEvent = TypedEvent<[string], log_addressEventObject>; - -export type log_addressEventFilter = TypedEventFilter; - -export interface log_bytesEventObject { - arg0: string; -} -export type log_bytesEvent = TypedEvent<[string], log_bytesEventObject>; - -export type log_bytesEventFilter = TypedEventFilter; - -export interface log_bytes32EventObject { - arg0: string; -} -export type log_bytes32Event = TypedEvent<[string], log_bytes32EventObject>; - -export type log_bytes32EventFilter = TypedEventFilter; - -export interface log_intEventObject { - arg0: BigNumber; -} -export type log_intEvent = TypedEvent<[BigNumber], log_intEventObject>; - -export type log_intEventFilter = TypedEventFilter; - -export interface log_named_addressEventObject { - key: string; - val: string; -} -export type log_named_addressEvent = TypedEvent< - [string, string], - log_named_addressEventObject ->; - -export type log_named_addressEventFilter = - TypedEventFilter; - -export interface log_named_bytesEventObject { - key: string; - val: string; -} -export type log_named_bytesEvent = TypedEvent< - [string, string], - log_named_bytesEventObject ->; - -export type log_named_bytesEventFilter = TypedEventFilter; - -export interface log_named_bytes32EventObject { - key: string; - val: string; -} -export type log_named_bytes32Event = TypedEvent< - [string, string], - log_named_bytes32EventObject ->; - -export type log_named_bytes32EventFilter = - TypedEventFilter; - -export interface log_named_decimal_intEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_intEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_intEventObject ->; - -export type log_named_decimal_intEventFilter = - TypedEventFilter; - -export interface log_named_decimal_uintEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_uintEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_uintEventObject ->; - -export type log_named_decimal_uintEventFilter = - TypedEventFilter; - -export interface log_named_intEventObject { - key: string; - val: BigNumber; -} -export type log_named_intEvent = TypedEvent< - [string, BigNumber], - log_named_intEventObject ->; - -export type log_named_intEventFilter = TypedEventFilter; - -export interface log_named_stringEventObject { - key: string; - val: string; -} -export type log_named_stringEvent = TypedEvent< - [string, string], - log_named_stringEventObject ->; - -export type log_named_stringEventFilter = - TypedEventFilter; - -export interface log_named_uintEventObject { - key: string; - val: BigNumber; -} -export type log_named_uintEvent = TypedEvent< - [string, BigNumber], - log_named_uintEventObject ->; - -export type log_named_uintEventFilter = TypedEventFilter; - -export interface log_stringEventObject { - arg0: string; -} -export type log_stringEvent = TypedEvent<[string], log_stringEventObject>; - -export type log_stringEventFilter = TypedEventFilter; - -export interface log_uintEventObject { - arg0: BigNumber; -} -export type log_uintEvent = TypedEvent<[BigNumber], log_uintEventObject>; - -export type log_uintEventFilter = TypedEventFilter; - -export interface logsEventObject { - arg0: string; -} -export type logsEvent = TypedEvent<[string], logsEventObject>; - -export type logsEventFilter = TypedEventFilter; - -export interface AbstractAdapterTest extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: AbstractAdapterTestInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - IS_TEST(overrides?: CallOverrides): Promise<[boolean]>; - - cft(overrides?: CallOverrides): Promise<[string]>; - - creditConfigurator(overrides?: CallOverrides): Promise<[string]>; - - creditFacade(overrides?: CallOverrides): Promise<[string]>; - - creditManager(overrides?: CallOverrides): Promise<[string]>; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AA_01_constructor_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AA_02_constructor_reverts_on_zero_address( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AA_03_executeFast_check_reverts_if_user_has_no_account( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AA_04A_executeMaxAllowanceFastCheck_correctly_passes_to_credit_manager( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AA_04B_executeMaxAllowanceFastCheck_correctly_passes_to_credit_manager( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AA_05_executeMaxAllowanceFastCheck_correctly_sets_allowance( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AA_06A_executeSafeFastCheck_correctly_passes_to_credit_manager( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AA_06B_executeSafeFastCheck_correctly_passes_to_credit_manager( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AA_07_executeSafeFastCheck_correctly_sets_allowance( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AA_08A_execute_correctly_passes_to_credit_manager( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AA_08A_fullCheck_correctly_passes_to_credit_manager( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AA_08C_executeMaxAllowanceFastCheck_correctly_passes_to_credit_manager( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise<[string]>; - }; - - IS_TEST(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AA_01_constructor_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AA_02_constructor_reverts_on_zero_address( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AA_03_executeFast_check_reverts_if_user_has_no_account( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AA_04A_executeMaxAllowanceFastCheck_correctly_passes_to_credit_manager( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AA_04B_executeMaxAllowanceFastCheck_correctly_passes_to_credit_manager( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AA_05_executeMaxAllowanceFastCheck_correctly_sets_allowance( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AA_06A_executeSafeFastCheck_correctly_passes_to_credit_manager( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AA_06B_executeSafeFastCheck_correctly_passes_to_credit_manager( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AA_07_executeSafeFastCheck_correctly_sets_allowance( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AA_08A_execute_correctly_passes_to_credit_manager( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AA_08A_fullCheck_correctly_passes_to_credit_manager( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AA_08C_executeMaxAllowanceFastCheck_correctly_passes_to_credit_manager( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - - callStatic: { - IS_TEST(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - failed(overrides?: CallOverrides): Promise; - - setUp(overrides?: CallOverrides): Promise; - - test_AA_01_constructor_sets_correct_values( - overrides?: CallOverrides - ): Promise; - - test_AA_02_constructor_reverts_on_zero_address( - overrides?: CallOverrides - ): Promise; - - test_AA_03_executeFast_check_reverts_if_user_has_no_account( - overrides?: CallOverrides - ): Promise; - - test_AA_04A_executeMaxAllowanceFastCheck_correctly_passes_to_credit_manager( - overrides?: CallOverrides - ): Promise; - - test_AA_04B_executeMaxAllowanceFastCheck_correctly_passes_to_credit_manager( - overrides?: CallOverrides - ): Promise; - - test_AA_05_executeMaxAllowanceFastCheck_correctly_sets_allowance( - overrides?: CallOverrides - ): Promise; - - test_AA_06A_executeSafeFastCheck_correctly_passes_to_credit_manager( - overrides?: CallOverrides - ): Promise; - - test_AA_06B_executeSafeFastCheck_correctly_passes_to_credit_manager( - overrides?: CallOverrides - ): Promise; - - test_AA_07_executeSafeFastCheck_correctly_sets_allowance( - overrides?: CallOverrides - ): Promise; - - test_AA_08A_execute_correctly_passes_to_credit_manager( - overrides?: CallOverrides - ): Promise; - - test_AA_08A_fullCheck_correctly_passes_to_credit_manager( - overrides?: CallOverrides - ): Promise; - - test_AA_08C_executeMaxAllowanceFastCheck_correctly_passes_to_credit_manager( - overrides?: CallOverrides - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - }; - - filters: { - "AddCollateral(address,address,uint256)"( - onBehalfOf?: string | null, - token?: string | null, - value?: null - ): AddCollateralEventFilter; - AddCollateral( - onBehalfOf?: string | null, - token?: string | null, - value?: null - ): AddCollateralEventFilter; - - "CloseCreditAccount(address,address)"( - owner?: string | null, - to?: string | null - ): CloseCreditAccountEventFilter; - CloseCreditAccount( - owner?: string | null, - to?: string | null - ): CloseCreditAccountEventFilter; - - "DecreaseBorrowedAmount(address,uint256)"( - borrower?: string | null, - amount?: null - ): DecreaseBorrowedAmountEventFilter; - DecreaseBorrowedAmount( - borrower?: string | null, - amount?: null - ): DecreaseBorrowedAmountEventFilter; - - "ExecuteOrder(address,address)"( - borrower?: string | null, - target?: string | null - ): ExecuteOrderEventFilter; - ExecuteOrder( - borrower?: string | null, - target?: string | null - ): ExecuteOrderEventFilter; - - "IncreaseBorrowedAmount(address,uint256)"( - borrower?: string | null, - amount?: null - ): IncreaseBorrowedAmountEventFilter; - IncreaseBorrowedAmount( - borrower?: string | null, - amount?: null - ): IncreaseBorrowedAmountEventFilter; - - "LiquidateCreditAccount(address,address,address,uint256)"( - owner?: string | null, - liquidator?: string | null, - to?: string | null, - remainingFunds?: null - ): LiquidateCreditAccountEventFilter; - LiquidateCreditAccount( - owner?: string | null, - liquidator?: string | null, - to?: string | null, - remainingFunds?: null - ): LiquidateCreditAccountEventFilter; - - "LiquidateExpiredCreditAccount(address,address,address,uint256)"( - owner?: string | null, - liquidator?: string | null, - to?: string | null, - remainingFunds?: null - ): LiquidateExpiredCreditAccountEventFilter; - LiquidateExpiredCreditAccount( - owner?: string | null, - liquidator?: string | null, - to?: string | null, - remainingFunds?: null - ): LiquidateExpiredCreditAccountEventFilter; - - "MultiCallFinished()"(): MultiCallFinishedEventFilter; - MultiCallFinished(): MultiCallFinishedEventFilter; - - "MultiCallStarted(address)"( - borrower?: string | null - ): MultiCallStartedEventFilter; - MultiCallStarted(borrower?: string | null): MultiCallStartedEventFilter; - - "NewConfigurator(address)"( - newConfigurator?: string | null - ): NewConfiguratorEventFilter; - NewConfigurator( - newConfigurator?: string | null - ): NewConfiguratorEventFilter; - - "OpenCreditAccount(address,address,uint256,uint16)"( - onBehalfOf?: string | null, - creditAccount?: string | null, - borrowAmount?: null, - referralCode?: null - ): OpenCreditAccountEventFilter; - OpenCreditAccount( - onBehalfOf?: string | null, - creditAccount?: string | null, - borrowAmount?: null, - referralCode?: null - ): OpenCreditAccountEventFilter; - - "TokenDisabled(address,address)"( - creditAccount?: null, - token?: null - ): TokenDisabledEventFilter; - TokenDisabled(creditAccount?: null, token?: null): TokenDisabledEventFilter; - - "TokenEnabled(address,address)"( - creditAccount?: null, - token?: null - ): TokenEnabledEventFilter; - TokenEnabled(creditAccount?: null, token?: null): TokenEnabledEventFilter; - - "TransferAccount(address,address)"( - oldOwner?: string | null, - newOwner?: string | null - ): TransferAccountEventFilter; - TransferAccount( - oldOwner?: string | null, - newOwner?: string | null - ): TransferAccountEventFilter; - - "TransferAccountAllowed(address,address,bool)"( - from?: string | null, - to?: string | null, - state?: null - ): TransferAccountAllowedEventFilter; - TransferAccountAllowed( - from?: string | null, - to?: string | null, - state?: null - ): TransferAccountAllowedEventFilter; - - "log(string)"(arg0?: null): logEventFilter; - log(arg0?: null): logEventFilter; - - "log_address(address)"(arg0?: null): log_addressEventFilter; - log_address(arg0?: null): log_addressEventFilter; - - "log_bytes(bytes)"(arg0?: null): log_bytesEventFilter; - log_bytes(arg0?: null): log_bytesEventFilter; - - "log_bytes32(bytes32)"(arg0?: null): log_bytes32EventFilter; - log_bytes32(arg0?: null): log_bytes32EventFilter; - - "log_int(int256)"(arg0?: null): log_intEventFilter; - log_int(arg0?: null): log_intEventFilter; - - "log_named_address(string,address)"( - key?: null, - val?: null - ): log_named_addressEventFilter; - log_named_address(key?: null, val?: null): log_named_addressEventFilter; - - "log_named_bytes(string,bytes)"( - key?: null, - val?: null - ): log_named_bytesEventFilter; - log_named_bytes(key?: null, val?: null): log_named_bytesEventFilter; - - "log_named_bytes32(string,bytes32)"( - key?: null, - val?: null - ): log_named_bytes32EventFilter; - log_named_bytes32(key?: null, val?: null): log_named_bytes32EventFilter; - - "log_named_decimal_int(string,int256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - log_named_decimal_int( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - - "log_named_decimal_uint(string,uint256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - log_named_decimal_uint( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - - "log_named_int(string,int256)"( - key?: null, - val?: null - ): log_named_intEventFilter; - log_named_int(key?: null, val?: null): log_named_intEventFilter; - - "log_named_string(string,string)"( - key?: null, - val?: null - ): log_named_stringEventFilter; - log_named_string(key?: null, val?: null): log_named_stringEventFilter; - - "log_named_uint(string,uint256)"( - key?: null, - val?: null - ): log_named_uintEventFilter; - log_named_uint(key?: null, val?: null): log_named_uintEventFilter; - - "log_string(string)"(arg0?: null): log_stringEventFilter; - log_string(arg0?: null): log_stringEventFilter; - - "log_uint(uint256)"(arg0?: null): log_uintEventFilter; - log_uint(arg0?: null): log_uintEventFilter; - - "logs(bytes)"(arg0?: null): logsEventFilter; - logs(arg0?: null): logsEventFilter; - }; - - estimateGas: { - IS_TEST(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AA_01_constructor_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AA_02_constructor_reverts_on_zero_address( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AA_03_executeFast_check_reverts_if_user_has_no_account( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AA_04A_executeMaxAllowanceFastCheck_correctly_passes_to_credit_manager( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AA_04B_executeMaxAllowanceFastCheck_correctly_passes_to_credit_manager( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AA_05_executeMaxAllowanceFastCheck_correctly_sets_allowance( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AA_06A_executeSafeFastCheck_correctly_passes_to_credit_manager( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AA_06B_executeSafeFastCheck_correctly_passes_to_credit_manager( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AA_07_executeSafeFastCheck_correctly_sets_allowance( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AA_08A_execute_correctly_passes_to_credit_manager( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AA_08A_fullCheck_correctly_passes_to_credit_manager( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AA_08C_executeMaxAllowanceFastCheck_correctly_passes_to_credit_manager( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - IS_TEST(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator( - overrides?: CallOverrides - ): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AA_01_constructor_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AA_02_constructor_reverts_on_zero_address( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AA_03_executeFast_check_reverts_if_user_has_no_account( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AA_04A_executeMaxAllowanceFastCheck_correctly_passes_to_credit_manager( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AA_04B_executeMaxAllowanceFastCheck_correctly_passes_to_credit_manager( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AA_05_executeMaxAllowanceFastCheck_correctly_sets_allowance( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AA_06A_executeSafeFastCheck_correctly_passes_to_credit_manager( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AA_06B_executeSafeFastCheck_correctly_passes_to_credit_manager( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AA_07_executeSafeFastCheck_correctly_sets_allowance( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AA_08A_execute_correctly_passes_to_credit_manager( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AA_08A_fullCheck_correctly_passes_to_credit_manager( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AA_08C_executeMaxAllowanceFastCheck_correctly_passes_to_credit_manager( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/test/adapters/AbstractAdapter.t.sol/index.ts b/src/types/contracts/test/adapters/AbstractAdapter.t.sol/index.ts deleted file mode 100644 index e56f284c..00000000 --- a/src/types/contracts/test/adapters/AbstractAdapter.t.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { AbstractAdapterTest } from "./AbstractAdapterTest"; diff --git a/src/types/contracts/test/adapters/AdapterTestHelper.ts b/src/types/contracts/test/adapters/AdapterTestHelper.ts deleted file mode 100644 index 2be60449..00000000 --- a/src/types/contracts/test/adapters/AdapterTestHelper.ts +++ /dev/null @@ -1,814 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../common"; - -export interface AdapterTestHelperInterface extends utils.Interface { - functions: { - "IS_TEST()": FunctionFragment; - "cft()": FunctionFragment; - "creditConfigurator()": FunctionFragment; - "creditFacade()": FunctionFragment; - "creditManager()": FunctionFragment; - "failed()": FunctionFragment; - "underlying()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "IS_TEST" - | "cft" - | "creditConfigurator" - | "creditFacade" - | "creditManager" - | "failed" - | "underlying" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "IS_TEST", values?: undefined): string; - encodeFunctionData(functionFragment: "cft", values?: undefined): string; - encodeFunctionData( - functionFragment: "creditConfigurator", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditFacade", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditManager", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "failed", values?: undefined): string; - encodeFunctionData( - functionFragment: "underlying", - values?: undefined - ): string; - - decodeFunctionResult(functionFragment: "IS_TEST", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "cft", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "creditConfigurator", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditFacade", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditManager", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "failed", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "underlying", data: BytesLike): Result; - - events: { - "AddCollateral(address,address,uint256)": EventFragment; - "CloseCreditAccount(address,address)": EventFragment; - "DecreaseBorrowedAmount(address,uint256)": EventFragment; - "ExecuteOrder(address,address)": EventFragment; - "IncreaseBorrowedAmount(address,uint256)": EventFragment; - "LiquidateCreditAccount(address,address,address,uint256)": EventFragment; - "LiquidateExpiredCreditAccount(address,address,address,uint256)": EventFragment; - "MultiCallFinished()": EventFragment; - "MultiCallStarted(address)": EventFragment; - "NewConfigurator(address)": EventFragment; - "OpenCreditAccount(address,address,uint256,uint16)": EventFragment; - "TokenDisabled(address,address)": EventFragment; - "TokenEnabled(address,address)": EventFragment; - "TransferAccount(address,address)": EventFragment; - "TransferAccountAllowed(address,address,bool)": EventFragment; - "log(string)": EventFragment; - "log_address(address)": EventFragment; - "log_bytes(bytes)": EventFragment; - "log_bytes32(bytes32)": EventFragment; - "log_int(int256)": EventFragment; - "log_named_address(string,address)": EventFragment; - "log_named_bytes(string,bytes)": EventFragment; - "log_named_bytes32(string,bytes32)": EventFragment; - "log_named_decimal_int(string,int256,uint256)": EventFragment; - "log_named_decimal_uint(string,uint256,uint256)": EventFragment; - "log_named_int(string,int256)": EventFragment; - "log_named_string(string,string)": EventFragment; - "log_named_uint(string,uint256)": EventFragment; - "log_string(string)": EventFragment; - "log_uint(uint256)": EventFragment; - "logs(bytes)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "AddCollateral"): EventFragment; - getEvent(nameOrSignatureOrTopic: "CloseCreditAccount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "DecreaseBorrowedAmount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ExecuteOrder"): EventFragment; - getEvent(nameOrSignatureOrTopic: "IncreaseBorrowedAmount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "LiquidateCreditAccount"): EventFragment; - getEvent( - nameOrSignatureOrTopic: "LiquidateExpiredCreditAccount" - ): EventFragment; - getEvent(nameOrSignatureOrTopic: "MultiCallFinished"): EventFragment; - getEvent(nameOrSignatureOrTopic: "MultiCallStarted"): EventFragment; - getEvent(nameOrSignatureOrTopic: "NewConfigurator"): EventFragment; - getEvent(nameOrSignatureOrTopic: "OpenCreditAccount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TokenDisabled"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TokenEnabled"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TransferAccount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TransferAccountAllowed"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "logs"): EventFragment; -} - -export interface AddCollateralEventObject { - onBehalfOf: string; - token: string; - value: BigNumber; -} -export type AddCollateralEvent = TypedEvent< - [string, string, BigNumber], - AddCollateralEventObject ->; - -export type AddCollateralEventFilter = TypedEventFilter; - -export interface CloseCreditAccountEventObject { - owner: string; - to: string; -} -export type CloseCreditAccountEvent = TypedEvent< - [string, string], - CloseCreditAccountEventObject ->; - -export type CloseCreditAccountEventFilter = - TypedEventFilter; - -export interface DecreaseBorrowedAmountEventObject { - borrower: string; - amount: BigNumber; -} -export type DecreaseBorrowedAmountEvent = TypedEvent< - [string, BigNumber], - DecreaseBorrowedAmountEventObject ->; - -export type DecreaseBorrowedAmountEventFilter = - TypedEventFilter; - -export interface ExecuteOrderEventObject { - borrower: string; - target: string; -} -export type ExecuteOrderEvent = TypedEvent< - [string, string], - ExecuteOrderEventObject ->; - -export type ExecuteOrderEventFilter = TypedEventFilter; - -export interface IncreaseBorrowedAmountEventObject { - borrower: string; - amount: BigNumber; -} -export type IncreaseBorrowedAmountEvent = TypedEvent< - [string, BigNumber], - IncreaseBorrowedAmountEventObject ->; - -export type IncreaseBorrowedAmountEventFilter = - TypedEventFilter; - -export interface LiquidateCreditAccountEventObject { - owner: string; - liquidator: string; - to: string; - remainingFunds: BigNumber; -} -export type LiquidateCreditAccountEvent = TypedEvent< - [string, string, string, BigNumber], - LiquidateCreditAccountEventObject ->; - -export type LiquidateCreditAccountEventFilter = - TypedEventFilter; - -export interface LiquidateExpiredCreditAccountEventObject { - owner: string; - liquidator: string; - to: string; - remainingFunds: BigNumber; -} -export type LiquidateExpiredCreditAccountEvent = TypedEvent< - [string, string, string, BigNumber], - LiquidateExpiredCreditAccountEventObject ->; - -export type LiquidateExpiredCreditAccountEventFilter = - TypedEventFilter; - -export interface MultiCallFinishedEventObject {} -export type MultiCallFinishedEvent = TypedEvent< - [], - MultiCallFinishedEventObject ->; - -export type MultiCallFinishedEventFilter = - TypedEventFilter; - -export interface MultiCallStartedEventObject { - borrower: string; -} -export type MultiCallStartedEvent = TypedEvent< - [string], - MultiCallStartedEventObject ->; - -export type MultiCallStartedEventFilter = - TypedEventFilter; - -export interface NewConfiguratorEventObject { - newConfigurator: string; -} -export type NewConfiguratorEvent = TypedEvent< - [string], - NewConfiguratorEventObject ->; - -export type NewConfiguratorEventFilter = TypedEventFilter; - -export interface OpenCreditAccountEventObject { - onBehalfOf: string; - creditAccount: string; - borrowAmount: BigNumber; - referralCode: number; -} -export type OpenCreditAccountEvent = TypedEvent< - [string, string, BigNumber, number], - OpenCreditAccountEventObject ->; - -export type OpenCreditAccountEventFilter = - TypedEventFilter; - -export interface TokenDisabledEventObject { - creditAccount: string; - token: string; -} -export type TokenDisabledEvent = TypedEvent< - [string, string], - TokenDisabledEventObject ->; - -export type TokenDisabledEventFilter = TypedEventFilter; - -export interface TokenEnabledEventObject { - creditAccount: string; - token: string; -} -export type TokenEnabledEvent = TypedEvent< - [string, string], - TokenEnabledEventObject ->; - -export type TokenEnabledEventFilter = TypedEventFilter; - -export interface TransferAccountEventObject { - oldOwner: string; - newOwner: string; -} -export type TransferAccountEvent = TypedEvent< - [string, string], - TransferAccountEventObject ->; - -export type TransferAccountEventFilter = TypedEventFilter; - -export interface TransferAccountAllowedEventObject { - from: string; - to: string; - state: boolean; -} -export type TransferAccountAllowedEvent = TypedEvent< - [string, string, boolean], - TransferAccountAllowedEventObject ->; - -export type TransferAccountAllowedEventFilter = - TypedEventFilter; - -export interface logEventObject { - arg0: string; -} -export type logEvent = TypedEvent<[string], logEventObject>; - -export type logEventFilter = TypedEventFilter; - -export interface log_addressEventObject { - arg0: string; -} -export type log_addressEvent = TypedEvent<[string], log_addressEventObject>; - -export type log_addressEventFilter = TypedEventFilter; - -export interface log_bytesEventObject { - arg0: string; -} -export type log_bytesEvent = TypedEvent<[string], log_bytesEventObject>; - -export type log_bytesEventFilter = TypedEventFilter; - -export interface log_bytes32EventObject { - arg0: string; -} -export type log_bytes32Event = TypedEvent<[string], log_bytes32EventObject>; - -export type log_bytes32EventFilter = TypedEventFilter; - -export interface log_intEventObject { - arg0: BigNumber; -} -export type log_intEvent = TypedEvent<[BigNumber], log_intEventObject>; - -export type log_intEventFilter = TypedEventFilter; - -export interface log_named_addressEventObject { - key: string; - val: string; -} -export type log_named_addressEvent = TypedEvent< - [string, string], - log_named_addressEventObject ->; - -export type log_named_addressEventFilter = - TypedEventFilter; - -export interface log_named_bytesEventObject { - key: string; - val: string; -} -export type log_named_bytesEvent = TypedEvent< - [string, string], - log_named_bytesEventObject ->; - -export type log_named_bytesEventFilter = TypedEventFilter; - -export interface log_named_bytes32EventObject { - key: string; - val: string; -} -export type log_named_bytes32Event = TypedEvent< - [string, string], - log_named_bytes32EventObject ->; - -export type log_named_bytes32EventFilter = - TypedEventFilter; - -export interface log_named_decimal_intEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_intEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_intEventObject ->; - -export type log_named_decimal_intEventFilter = - TypedEventFilter; - -export interface log_named_decimal_uintEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_uintEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_uintEventObject ->; - -export type log_named_decimal_uintEventFilter = - TypedEventFilter; - -export interface log_named_intEventObject { - key: string; - val: BigNumber; -} -export type log_named_intEvent = TypedEvent< - [string, BigNumber], - log_named_intEventObject ->; - -export type log_named_intEventFilter = TypedEventFilter; - -export interface log_named_stringEventObject { - key: string; - val: string; -} -export type log_named_stringEvent = TypedEvent< - [string, string], - log_named_stringEventObject ->; - -export type log_named_stringEventFilter = - TypedEventFilter; - -export interface log_named_uintEventObject { - key: string; - val: BigNumber; -} -export type log_named_uintEvent = TypedEvent< - [string, BigNumber], - log_named_uintEventObject ->; - -export type log_named_uintEventFilter = TypedEventFilter; - -export interface log_stringEventObject { - arg0: string; -} -export type log_stringEvent = TypedEvent<[string], log_stringEventObject>; - -export type log_stringEventFilter = TypedEventFilter; - -export interface log_uintEventObject { - arg0: BigNumber; -} -export type log_uintEvent = TypedEvent<[BigNumber], log_uintEventObject>; - -export type log_uintEventFilter = TypedEventFilter; - -export interface logsEventObject { - arg0: string; -} -export type logsEvent = TypedEvent<[string], logsEventObject>; - -export type logsEventFilter = TypedEventFilter; - -export interface AdapterTestHelper extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: AdapterTestHelperInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - IS_TEST(overrides?: CallOverrides): Promise<[boolean]>; - - cft(overrides?: CallOverrides): Promise<[string]>; - - creditConfigurator(overrides?: CallOverrides): Promise<[string]>; - - creditFacade(overrides?: CallOverrides): Promise<[string]>; - - creditManager(overrides?: CallOverrides): Promise<[string]>; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise<[string]>; - }; - - IS_TEST(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - - callStatic: { - IS_TEST(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - failed(overrides?: CallOverrides): Promise; - - underlying(overrides?: CallOverrides): Promise; - }; - - filters: { - "AddCollateral(address,address,uint256)"( - onBehalfOf?: string | null, - token?: string | null, - value?: null - ): AddCollateralEventFilter; - AddCollateral( - onBehalfOf?: string | null, - token?: string | null, - value?: null - ): AddCollateralEventFilter; - - "CloseCreditAccount(address,address)"( - owner?: string | null, - to?: string | null - ): CloseCreditAccountEventFilter; - CloseCreditAccount( - owner?: string | null, - to?: string | null - ): CloseCreditAccountEventFilter; - - "DecreaseBorrowedAmount(address,uint256)"( - borrower?: string | null, - amount?: null - ): DecreaseBorrowedAmountEventFilter; - DecreaseBorrowedAmount( - borrower?: string | null, - amount?: null - ): DecreaseBorrowedAmountEventFilter; - - "ExecuteOrder(address,address)"( - borrower?: string | null, - target?: string | null - ): ExecuteOrderEventFilter; - ExecuteOrder( - borrower?: string | null, - target?: string | null - ): ExecuteOrderEventFilter; - - "IncreaseBorrowedAmount(address,uint256)"( - borrower?: string | null, - amount?: null - ): IncreaseBorrowedAmountEventFilter; - IncreaseBorrowedAmount( - borrower?: string | null, - amount?: null - ): IncreaseBorrowedAmountEventFilter; - - "LiquidateCreditAccount(address,address,address,uint256)"( - owner?: string | null, - liquidator?: string | null, - to?: string | null, - remainingFunds?: null - ): LiquidateCreditAccountEventFilter; - LiquidateCreditAccount( - owner?: string | null, - liquidator?: string | null, - to?: string | null, - remainingFunds?: null - ): LiquidateCreditAccountEventFilter; - - "LiquidateExpiredCreditAccount(address,address,address,uint256)"( - owner?: string | null, - liquidator?: string | null, - to?: string | null, - remainingFunds?: null - ): LiquidateExpiredCreditAccountEventFilter; - LiquidateExpiredCreditAccount( - owner?: string | null, - liquidator?: string | null, - to?: string | null, - remainingFunds?: null - ): LiquidateExpiredCreditAccountEventFilter; - - "MultiCallFinished()"(): MultiCallFinishedEventFilter; - MultiCallFinished(): MultiCallFinishedEventFilter; - - "MultiCallStarted(address)"( - borrower?: string | null - ): MultiCallStartedEventFilter; - MultiCallStarted(borrower?: string | null): MultiCallStartedEventFilter; - - "NewConfigurator(address)"( - newConfigurator?: string | null - ): NewConfiguratorEventFilter; - NewConfigurator( - newConfigurator?: string | null - ): NewConfiguratorEventFilter; - - "OpenCreditAccount(address,address,uint256,uint16)"( - onBehalfOf?: string | null, - creditAccount?: string | null, - borrowAmount?: null, - referralCode?: null - ): OpenCreditAccountEventFilter; - OpenCreditAccount( - onBehalfOf?: string | null, - creditAccount?: string | null, - borrowAmount?: null, - referralCode?: null - ): OpenCreditAccountEventFilter; - - "TokenDisabled(address,address)"( - creditAccount?: null, - token?: null - ): TokenDisabledEventFilter; - TokenDisabled(creditAccount?: null, token?: null): TokenDisabledEventFilter; - - "TokenEnabled(address,address)"( - creditAccount?: null, - token?: null - ): TokenEnabledEventFilter; - TokenEnabled(creditAccount?: null, token?: null): TokenEnabledEventFilter; - - "TransferAccount(address,address)"( - oldOwner?: string | null, - newOwner?: string | null - ): TransferAccountEventFilter; - TransferAccount( - oldOwner?: string | null, - newOwner?: string | null - ): TransferAccountEventFilter; - - "TransferAccountAllowed(address,address,bool)"( - from?: string | null, - to?: string | null, - state?: null - ): TransferAccountAllowedEventFilter; - TransferAccountAllowed( - from?: string | null, - to?: string | null, - state?: null - ): TransferAccountAllowedEventFilter; - - "log(string)"(arg0?: null): logEventFilter; - log(arg0?: null): logEventFilter; - - "log_address(address)"(arg0?: null): log_addressEventFilter; - log_address(arg0?: null): log_addressEventFilter; - - "log_bytes(bytes)"(arg0?: null): log_bytesEventFilter; - log_bytes(arg0?: null): log_bytesEventFilter; - - "log_bytes32(bytes32)"(arg0?: null): log_bytes32EventFilter; - log_bytes32(arg0?: null): log_bytes32EventFilter; - - "log_int(int256)"(arg0?: null): log_intEventFilter; - log_int(arg0?: null): log_intEventFilter; - - "log_named_address(string,address)"( - key?: null, - val?: null - ): log_named_addressEventFilter; - log_named_address(key?: null, val?: null): log_named_addressEventFilter; - - "log_named_bytes(string,bytes)"( - key?: null, - val?: null - ): log_named_bytesEventFilter; - log_named_bytes(key?: null, val?: null): log_named_bytesEventFilter; - - "log_named_bytes32(string,bytes32)"( - key?: null, - val?: null - ): log_named_bytes32EventFilter; - log_named_bytes32(key?: null, val?: null): log_named_bytes32EventFilter; - - "log_named_decimal_int(string,int256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - log_named_decimal_int( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - - "log_named_decimal_uint(string,uint256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - log_named_decimal_uint( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - - "log_named_int(string,int256)"( - key?: null, - val?: null - ): log_named_intEventFilter; - log_named_int(key?: null, val?: null): log_named_intEventFilter; - - "log_named_string(string,string)"( - key?: null, - val?: null - ): log_named_stringEventFilter; - log_named_string(key?: null, val?: null): log_named_stringEventFilter; - - "log_named_uint(string,uint256)"( - key?: null, - val?: null - ): log_named_uintEventFilter; - log_named_uint(key?: null, val?: null): log_named_uintEventFilter; - - "log_string(string)"(arg0?: null): log_stringEventFilter; - log_string(arg0?: null): log_stringEventFilter; - - "log_uint(uint256)"(arg0?: null): log_uintEventFilter; - log_uint(arg0?: null): log_uintEventFilter; - - "logs(bytes)"(arg0?: null): logsEventFilter; - logs(arg0?: null): logsEventFilter; - }; - - estimateGas: { - IS_TEST(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - IS_TEST(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator( - overrides?: CallOverrides - ): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/test/adapters/ConvexAdapterHelper.ts b/src/types/contracts/test/adapters/ConvexAdapterHelper.ts deleted file mode 100644 index 6d4214c8..00000000 --- a/src/types/contracts/test/adapters/ConvexAdapterHelper.ts +++ /dev/null @@ -1,1351 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../common"; - -export interface ConvexAdapterHelperInterface extends utils.Interface { - functions: { - "IS_TEST()": FunctionFragment; - "basePoolAdapter()": FunctionFragment; - "basePoolMock()": FunctionFragment; - "boosterAdapter()": FunctionFragment; - "boosterMock()": FunctionFragment; - "cft()": FunctionFragment; - "claimZapAdapter()": FunctionFragment; - "claimZapMock()": FunctionFragment; - "convexLPToken()": FunctionFragment; - "creditConfigurator()": FunctionFragment; - "creditFacade()": FunctionFragment; - "creditManager()": FunctionFragment; - "crv()": FunctionFragment; - "curveLPToken()": FunctionFragment; - "cvx()": FunctionFragment; - "extraPoolMock1()": FunctionFragment; - "extraPoolMock2()": FunctionFragment; - "extraRewardToken1()": FunctionFragment; - "extraRewardToken2()": FunctionFragment; - "failed()": FunctionFragment; - "feed()": FunctionFragment; - "phantomToken()": FunctionFragment; - "priceOracle()": FunctionFragment; - "underlying()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "IS_TEST" - | "basePoolAdapter" - | "basePoolMock" - | "boosterAdapter" - | "boosterMock" - | "cft" - | "claimZapAdapter" - | "claimZapMock" - | "convexLPToken" - | "creditConfigurator" - | "creditFacade" - | "creditManager" - | "crv" - | "curveLPToken" - | "cvx" - | "extraPoolMock1" - | "extraPoolMock2" - | "extraRewardToken1" - | "extraRewardToken2" - | "failed" - | "feed" - | "phantomToken" - | "priceOracle" - | "underlying" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "IS_TEST", values?: undefined): string; - encodeFunctionData( - functionFragment: "basePoolAdapter", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "basePoolMock", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "boosterAdapter", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "boosterMock", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "cft", values?: undefined): string; - encodeFunctionData( - functionFragment: "claimZapAdapter", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "claimZapMock", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "convexLPToken", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditConfigurator", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditFacade", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditManager", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "crv", values?: undefined): string; - encodeFunctionData( - functionFragment: "curveLPToken", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "cvx", values?: undefined): string; - encodeFunctionData( - functionFragment: "extraPoolMock1", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "extraPoolMock2", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "extraRewardToken1", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "extraRewardToken2", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "failed", values?: undefined): string; - encodeFunctionData(functionFragment: "feed", values?: undefined): string; - encodeFunctionData( - functionFragment: "phantomToken", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "priceOracle", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "underlying", - values?: undefined - ): string; - - decodeFunctionResult(functionFragment: "IS_TEST", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "basePoolAdapter", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "basePoolMock", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "boosterAdapter", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "boosterMock", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "cft", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "claimZapAdapter", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "claimZapMock", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "convexLPToken", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditConfigurator", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditFacade", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditManager", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "crv", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "curveLPToken", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "cvx", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "extraPoolMock1", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "extraPoolMock2", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "extraRewardToken1", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "extraRewardToken2", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "failed", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "feed", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "phantomToken", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "priceOracle", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "underlying", data: BytesLike): Result; - - events: { - "AddCollateral(address,address,uint256)": EventFragment; - "CloseCreditAccount(address,address)": EventFragment; - "DecreaseBorrowedAmount(address,uint256)": EventFragment; - "ExecuteOrder(address,address)": EventFragment; - "IncreaseBorrowedAmount(address,uint256)": EventFragment; - "LiquidateCreditAccount(address,address,address,uint256)": EventFragment; - "LiquidateExpiredCreditAccount(address,address,address,uint256)": EventFragment; - "Mock_BaseRewardPaid(uint256,address,uint256)": EventFragment; - "Mock_BaseStaked(uint256,address,uint256)": EventFragment; - "Mock_BaseWithdrawn(uint256,address,uint256)": EventFragment; - "Mock_Deposited(uint256,address,uint256,uint256,bool)": EventFragment; - "Mock_ExtraRewardPaid(uint256,address,uint256)": EventFragment; - "Mock_ExtraStaked(uint256,address,uint256)": EventFragment; - "Mock_ExtraWithdrawn(uint256,address,uint256)": EventFragment; - "Mock_Withdrawn(uint256,address,uint256,uint256)": EventFragment; - "MultiCallFinished()": EventFragment; - "MultiCallStarted(address)": EventFragment; - "NewConfigurator(address)": EventFragment; - "OpenCreditAccount(address,address,uint256,uint16)": EventFragment; - "TokenDisabled(address,address)": EventFragment; - "TokenEnabled(address,address)": EventFragment; - "TransferAccount(address,address)": EventFragment; - "TransferAccountAllowed(address,address,bool)": EventFragment; - "log(string)": EventFragment; - "log_address(address)": EventFragment; - "log_bytes(bytes)": EventFragment; - "log_bytes32(bytes32)": EventFragment; - "log_int(int256)": EventFragment; - "log_named_address(string,address)": EventFragment; - "log_named_bytes(string,bytes)": EventFragment; - "log_named_bytes32(string,bytes32)": EventFragment; - "log_named_decimal_int(string,int256,uint256)": EventFragment; - "log_named_decimal_uint(string,uint256,uint256)": EventFragment; - "log_named_int(string,int256)": EventFragment; - "log_named_string(string,string)": EventFragment; - "log_named_uint(string,uint256)": EventFragment; - "log_string(string)": EventFragment; - "log_uint(uint256)": EventFragment; - "logs(bytes)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "AddCollateral"): EventFragment; - getEvent(nameOrSignatureOrTopic: "CloseCreditAccount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "DecreaseBorrowedAmount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ExecuteOrder"): EventFragment; - getEvent(nameOrSignatureOrTopic: "IncreaseBorrowedAmount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "LiquidateCreditAccount"): EventFragment; - getEvent( - nameOrSignatureOrTopic: "LiquidateExpiredCreditAccount" - ): EventFragment; - getEvent(nameOrSignatureOrTopic: "Mock_BaseRewardPaid"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Mock_BaseStaked"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Mock_BaseWithdrawn"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Mock_Deposited"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Mock_ExtraRewardPaid"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Mock_ExtraStaked"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Mock_ExtraWithdrawn"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Mock_Withdrawn"): EventFragment; - getEvent(nameOrSignatureOrTopic: "MultiCallFinished"): EventFragment; - getEvent(nameOrSignatureOrTopic: "MultiCallStarted"): EventFragment; - getEvent(nameOrSignatureOrTopic: "NewConfigurator"): EventFragment; - getEvent(nameOrSignatureOrTopic: "OpenCreditAccount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TokenDisabled"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TokenEnabled"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TransferAccount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TransferAccountAllowed"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "logs"): EventFragment; -} - -export interface AddCollateralEventObject { - onBehalfOf: string; - token: string; - value: BigNumber; -} -export type AddCollateralEvent = TypedEvent< - [string, string, BigNumber], - AddCollateralEventObject ->; - -export type AddCollateralEventFilter = TypedEventFilter; - -export interface CloseCreditAccountEventObject { - owner: string; - to: string; -} -export type CloseCreditAccountEvent = TypedEvent< - [string, string], - CloseCreditAccountEventObject ->; - -export type CloseCreditAccountEventFilter = - TypedEventFilter; - -export interface DecreaseBorrowedAmountEventObject { - borrower: string; - amount: BigNumber; -} -export type DecreaseBorrowedAmountEvent = TypedEvent< - [string, BigNumber], - DecreaseBorrowedAmountEventObject ->; - -export type DecreaseBorrowedAmountEventFilter = - TypedEventFilter; - -export interface ExecuteOrderEventObject { - borrower: string; - target: string; -} -export type ExecuteOrderEvent = TypedEvent< - [string, string], - ExecuteOrderEventObject ->; - -export type ExecuteOrderEventFilter = TypedEventFilter; - -export interface IncreaseBorrowedAmountEventObject { - borrower: string; - amount: BigNumber; -} -export type IncreaseBorrowedAmountEvent = TypedEvent< - [string, BigNumber], - IncreaseBorrowedAmountEventObject ->; - -export type IncreaseBorrowedAmountEventFilter = - TypedEventFilter; - -export interface LiquidateCreditAccountEventObject { - owner: string; - liquidator: string; - to: string; - remainingFunds: BigNumber; -} -export type LiquidateCreditAccountEvent = TypedEvent< - [string, string, string, BigNumber], - LiquidateCreditAccountEventObject ->; - -export type LiquidateCreditAccountEventFilter = - TypedEventFilter; - -export interface LiquidateExpiredCreditAccountEventObject { - owner: string; - liquidator: string; - to: string; - remainingFunds: BigNumber; -} -export type LiquidateExpiredCreditAccountEvent = TypedEvent< - [string, string, string, BigNumber], - LiquidateExpiredCreditAccountEventObject ->; - -export type LiquidateExpiredCreditAccountEventFilter = - TypedEventFilter; - -export interface Mock_BaseRewardPaidEventObject { - index: BigNumber; - user: string; - reward: BigNumber; -} -export type Mock_BaseRewardPaidEvent = TypedEvent< - [BigNumber, string, BigNumber], - Mock_BaseRewardPaidEventObject ->; - -export type Mock_BaseRewardPaidEventFilter = - TypedEventFilter; - -export interface Mock_BaseStakedEventObject { - index: BigNumber; - user: string; - amount: BigNumber; -} -export type Mock_BaseStakedEvent = TypedEvent< - [BigNumber, string, BigNumber], - Mock_BaseStakedEventObject ->; - -export type Mock_BaseStakedEventFilter = TypedEventFilter; - -export interface Mock_BaseWithdrawnEventObject { - index: BigNumber; - user: string; - amount: BigNumber; -} -export type Mock_BaseWithdrawnEvent = TypedEvent< - [BigNumber, string, BigNumber], - Mock_BaseWithdrawnEventObject ->; - -export type Mock_BaseWithdrawnEventFilter = - TypedEventFilter; - -export interface Mock_DepositedEventObject { - index: BigNumber; - user: string; - poolid: BigNumber; - amount: BigNumber; - _stake: boolean; -} -export type Mock_DepositedEvent = TypedEvent< - [BigNumber, string, BigNumber, BigNumber, boolean], - Mock_DepositedEventObject ->; - -export type Mock_DepositedEventFilter = TypedEventFilter; - -export interface Mock_ExtraRewardPaidEventObject { - index: BigNumber; - user: string; - reward: BigNumber; -} -export type Mock_ExtraRewardPaidEvent = TypedEvent< - [BigNumber, string, BigNumber], - Mock_ExtraRewardPaidEventObject ->; - -export type Mock_ExtraRewardPaidEventFilter = - TypedEventFilter; - -export interface Mock_ExtraStakedEventObject { - index: BigNumber; - user: string; - amount: BigNumber; -} -export type Mock_ExtraStakedEvent = TypedEvent< - [BigNumber, string, BigNumber], - Mock_ExtraStakedEventObject ->; - -export type Mock_ExtraStakedEventFilter = - TypedEventFilter; - -export interface Mock_ExtraWithdrawnEventObject { - index: BigNumber; - user: string; - amount: BigNumber; -} -export type Mock_ExtraWithdrawnEvent = TypedEvent< - [BigNumber, string, BigNumber], - Mock_ExtraWithdrawnEventObject ->; - -export type Mock_ExtraWithdrawnEventFilter = - TypedEventFilter; - -export interface Mock_WithdrawnEventObject { - index: BigNumber; - user: string; - poolid: BigNumber; - amount: BigNumber; -} -export type Mock_WithdrawnEvent = TypedEvent< - [BigNumber, string, BigNumber, BigNumber], - Mock_WithdrawnEventObject ->; - -export type Mock_WithdrawnEventFilter = TypedEventFilter; - -export interface MultiCallFinishedEventObject {} -export type MultiCallFinishedEvent = TypedEvent< - [], - MultiCallFinishedEventObject ->; - -export type MultiCallFinishedEventFilter = - TypedEventFilter; - -export interface MultiCallStartedEventObject { - borrower: string; -} -export type MultiCallStartedEvent = TypedEvent< - [string], - MultiCallStartedEventObject ->; - -export type MultiCallStartedEventFilter = - TypedEventFilter; - -export interface NewConfiguratorEventObject { - newConfigurator: string; -} -export type NewConfiguratorEvent = TypedEvent< - [string], - NewConfiguratorEventObject ->; - -export type NewConfiguratorEventFilter = TypedEventFilter; - -export interface OpenCreditAccountEventObject { - onBehalfOf: string; - creditAccount: string; - borrowAmount: BigNumber; - referralCode: number; -} -export type OpenCreditAccountEvent = TypedEvent< - [string, string, BigNumber, number], - OpenCreditAccountEventObject ->; - -export type OpenCreditAccountEventFilter = - TypedEventFilter; - -export interface TokenDisabledEventObject { - creditAccount: string; - token: string; -} -export type TokenDisabledEvent = TypedEvent< - [string, string], - TokenDisabledEventObject ->; - -export type TokenDisabledEventFilter = TypedEventFilter; - -export interface TokenEnabledEventObject { - creditAccount: string; - token: string; -} -export type TokenEnabledEvent = TypedEvent< - [string, string], - TokenEnabledEventObject ->; - -export type TokenEnabledEventFilter = TypedEventFilter; - -export interface TransferAccountEventObject { - oldOwner: string; - newOwner: string; -} -export type TransferAccountEvent = TypedEvent< - [string, string], - TransferAccountEventObject ->; - -export type TransferAccountEventFilter = TypedEventFilter; - -export interface TransferAccountAllowedEventObject { - from: string; - to: string; - state: boolean; -} -export type TransferAccountAllowedEvent = TypedEvent< - [string, string, boolean], - TransferAccountAllowedEventObject ->; - -export type TransferAccountAllowedEventFilter = - TypedEventFilter; - -export interface logEventObject { - arg0: string; -} -export type logEvent = TypedEvent<[string], logEventObject>; - -export type logEventFilter = TypedEventFilter; - -export interface log_addressEventObject { - arg0: string; -} -export type log_addressEvent = TypedEvent<[string], log_addressEventObject>; - -export type log_addressEventFilter = TypedEventFilter; - -export interface log_bytesEventObject { - arg0: string; -} -export type log_bytesEvent = TypedEvent<[string], log_bytesEventObject>; - -export type log_bytesEventFilter = TypedEventFilter; - -export interface log_bytes32EventObject { - arg0: string; -} -export type log_bytes32Event = TypedEvent<[string], log_bytes32EventObject>; - -export type log_bytes32EventFilter = TypedEventFilter; - -export interface log_intEventObject { - arg0: BigNumber; -} -export type log_intEvent = TypedEvent<[BigNumber], log_intEventObject>; - -export type log_intEventFilter = TypedEventFilter; - -export interface log_named_addressEventObject { - key: string; - val: string; -} -export type log_named_addressEvent = TypedEvent< - [string, string], - log_named_addressEventObject ->; - -export type log_named_addressEventFilter = - TypedEventFilter; - -export interface log_named_bytesEventObject { - key: string; - val: string; -} -export type log_named_bytesEvent = TypedEvent< - [string, string], - log_named_bytesEventObject ->; - -export type log_named_bytesEventFilter = TypedEventFilter; - -export interface log_named_bytes32EventObject { - key: string; - val: string; -} -export type log_named_bytes32Event = TypedEvent< - [string, string], - log_named_bytes32EventObject ->; - -export type log_named_bytes32EventFilter = - TypedEventFilter; - -export interface log_named_decimal_intEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_intEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_intEventObject ->; - -export type log_named_decimal_intEventFilter = - TypedEventFilter; - -export interface log_named_decimal_uintEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_uintEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_uintEventObject ->; - -export type log_named_decimal_uintEventFilter = - TypedEventFilter; - -export interface log_named_intEventObject { - key: string; - val: BigNumber; -} -export type log_named_intEvent = TypedEvent< - [string, BigNumber], - log_named_intEventObject ->; - -export type log_named_intEventFilter = TypedEventFilter; - -export interface log_named_stringEventObject { - key: string; - val: string; -} -export type log_named_stringEvent = TypedEvent< - [string, string], - log_named_stringEventObject ->; - -export type log_named_stringEventFilter = - TypedEventFilter; - -export interface log_named_uintEventObject { - key: string; - val: BigNumber; -} -export type log_named_uintEvent = TypedEvent< - [string, BigNumber], - log_named_uintEventObject ->; - -export type log_named_uintEventFilter = TypedEventFilter; - -export interface log_stringEventObject { - arg0: string; -} -export type log_stringEvent = TypedEvent<[string], log_stringEventObject>; - -export type log_stringEventFilter = TypedEventFilter; - -export interface log_uintEventObject { - arg0: BigNumber; -} -export type log_uintEvent = TypedEvent<[BigNumber], log_uintEventObject>; - -export type log_uintEventFilter = TypedEventFilter; - -export interface logsEventObject { - arg0: string; -} -export type logsEvent = TypedEvent<[string], logsEventObject>; - -export type logsEventFilter = TypedEventFilter; - -export interface ConvexAdapterHelper extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: ConvexAdapterHelperInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - IS_TEST(overrides?: CallOverrides): Promise<[boolean]>; - - basePoolAdapter(overrides?: CallOverrides): Promise<[string]>; - - basePoolMock(overrides?: CallOverrides): Promise<[string]>; - - boosterAdapter(overrides?: CallOverrides): Promise<[string]>; - - boosterMock(overrides?: CallOverrides): Promise<[string]>; - - cft(overrides?: CallOverrides): Promise<[string]>; - - claimZapAdapter(overrides?: CallOverrides): Promise<[string]>; - - claimZapMock(overrides?: CallOverrides): Promise<[string]>; - - convexLPToken(overrides?: CallOverrides): Promise<[string]>; - - creditConfigurator(overrides?: CallOverrides): Promise<[string]>; - - creditFacade(overrides?: CallOverrides): Promise<[string]>; - - creditManager(overrides?: CallOverrides): Promise<[string]>; - - crv(overrides?: CallOverrides): Promise<[string]>; - - curveLPToken(overrides?: CallOverrides): Promise<[string]>; - - cvx(overrides?: CallOverrides): Promise<[string]>; - - extraPoolMock1(overrides?: CallOverrides): Promise<[string]>; - - extraPoolMock2(overrides?: CallOverrides): Promise<[string]>; - - extraRewardToken1(overrides?: CallOverrides): Promise<[string]>; - - extraRewardToken2(overrides?: CallOverrides): Promise<[string]>; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - feed(overrides?: CallOverrides): Promise<[string]>; - - phantomToken(overrides?: CallOverrides): Promise<[string]>; - - priceOracle(overrides?: CallOverrides): Promise<[string]>; - - underlying(overrides?: CallOverrides): Promise<[string]>; - }; - - IS_TEST(overrides?: CallOverrides): Promise; - - basePoolAdapter(overrides?: CallOverrides): Promise; - - basePoolMock(overrides?: CallOverrides): Promise; - - boosterAdapter(overrides?: CallOverrides): Promise; - - boosterMock(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - claimZapAdapter(overrides?: CallOverrides): Promise; - - claimZapMock(overrides?: CallOverrides): Promise; - - convexLPToken(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - crv(overrides?: CallOverrides): Promise; - - curveLPToken(overrides?: CallOverrides): Promise; - - cvx(overrides?: CallOverrides): Promise; - - extraPoolMock1(overrides?: CallOverrides): Promise; - - extraPoolMock2(overrides?: CallOverrides): Promise; - - extraRewardToken1(overrides?: CallOverrides): Promise; - - extraRewardToken2(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - feed(overrides?: CallOverrides): Promise; - - phantomToken(overrides?: CallOverrides): Promise; - - priceOracle(overrides?: CallOverrides): Promise; - - underlying(overrides?: CallOverrides): Promise; - - callStatic: { - IS_TEST(overrides?: CallOverrides): Promise; - - basePoolAdapter(overrides?: CallOverrides): Promise; - - basePoolMock(overrides?: CallOverrides): Promise; - - boosterAdapter(overrides?: CallOverrides): Promise; - - boosterMock(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - claimZapAdapter(overrides?: CallOverrides): Promise; - - claimZapMock(overrides?: CallOverrides): Promise; - - convexLPToken(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - crv(overrides?: CallOverrides): Promise; - - curveLPToken(overrides?: CallOverrides): Promise; - - cvx(overrides?: CallOverrides): Promise; - - extraPoolMock1(overrides?: CallOverrides): Promise; - - extraPoolMock2(overrides?: CallOverrides): Promise; - - extraRewardToken1(overrides?: CallOverrides): Promise; - - extraRewardToken2(overrides?: CallOverrides): Promise; - - failed(overrides?: CallOverrides): Promise; - - feed(overrides?: CallOverrides): Promise; - - phantomToken(overrides?: CallOverrides): Promise; - - priceOracle(overrides?: CallOverrides): Promise; - - underlying(overrides?: CallOverrides): Promise; - }; - - filters: { - "AddCollateral(address,address,uint256)"( - onBehalfOf?: string | null, - token?: string | null, - value?: null - ): AddCollateralEventFilter; - AddCollateral( - onBehalfOf?: string | null, - token?: string | null, - value?: null - ): AddCollateralEventFilter; - - "CloseCreditAccount(address,address)"( - owner?: string | null, - to?: string | null - ): CloseCreditAccountEventFilter; - CloseCreditAccount( - owner?: string | null, - to?: string | null - ): CloseCreditAccountEventFilter; - - "DecreaseBorrowedAmount(address,uint256)"( - borrower?: string | null, - amount?: null - ): DecreaseBorrowedAmountEventFilter; - DecreaseBorrowedAmount( - borrower?: string | null, - amount?: null - ): DecreaseBorrowedAmountEventFilter; - - "ExecuteOrder(address,address)"( - borrower?: string | null, - target?: string | null - ): ExecuteOrderEventFilter; - ExecuteOrder( - borrower?: string | null, - target?: string | null - ): ExecuteOrderEventFilter; - - "IncreaseBorrowedAmount(address,uint256)"( - borrower?: string | null, - amount?: null - ): IncreaseBorrowedAmountEventFilter; - IncreaseBorrowedAmount( - borrower?: string | null, - amount?: null - ): IncreaseBorrowedAmountEventFilter; - - "LiquidateCreditAccount(address,address,address,uint256)"( - owner?: string | null, - liquidator?: string | null, - to?: string | null, - remainingFunds?: null - ): LiquidateCreditAccountEventFilter; - LiquidateCreditAccount( - owner?: string | null, - liquidator?: string | null, - to?: string | null, - remainingFunds?: null - ): LiquidateCreditAccountEventFilter; - - "LiquidateExpiredCreditAccount(address,address,address,uint256)"( - owner?: string | null, - liquidator?: string | null, - to?: string | null, - remainingFunds?: null - ): LiquidateExpiredCreditAccountEventFilter; - LiquidateExpiredCreditAccount( - owner?: string | null, - liquidator?: string | null, - to?: string | null, - remainingFunds?: null - ): LiquidateExpiredCreditAccountEventFilter; - - "Mock_BaseRewardPaid(uint256,address,uint256)"( - index?: BigNumberish | null, - user?: string | null, - reward?: null - ): Mock_BaseRewardPaidEventFilter; - Mock_BaseRewardPaid( - index?: BigNumberish | null, - user?: string | null, - reward?: null - ): Mock_BaseRewardPaidEventFilter; - - "Mock_BaseStaked(uint256,address,uint256)"( - index?: BigNumberish | null, - user?: string | null, - amount?: null - ): Mock_BaseStakedEventFilter; - Mock_BaseStaked( - index?: BigNumberish | null, - user?: string | null, - amount?: null - ): Mock_BaseStakedEventFilter; - - "Mock_BaseWithdrawn(uint256,address,uint256)"( - index?: BigNumberish | null, - user?: string | null, - amount?: null - ): Mock_BaseWithdrawnEventFilter; - Mock_BaseWithdrawn( - index?: BigNumberish | null, - user?: string | null, - amount?: null - ): Mock_BaseWithdrawnEventFilter; - - "Mock_Deposited(uint256,address,uint256,uint256,bool)"( - index?: null, - user?: string | null, - poolid?: BigNumberish | null, - amount?: null, - _stake?: null - ): Mock_DepositedEventFilter; - Mock_Deposited( - index?: null, - user?: string | null, - poolid?: BigNumberish | null, - amount?: null, - _stake?: null - ): Mock_DepositedEventFilter; - - "Mock_ExtraRewardPaid(uint256,address,uint256)"( - index?: BigNumberish | null, - user?: string | null, - reward?: null - ): Mock_ExtraRewardPaidEventFilter; - Mock_ExtraRewardPaid( - index?: BigNumberish | null, - user?: string | null, - reward?: null - ): Mock_ExtraRewardPaidEventFilter; - - "Mock_ExtraStaked(uint256,address,uint256)"( - index?: BigNumberish | null, - user?: string | null, - amount?: null - ): Mock_ExtraStakedEventFilter; - Mock_ExtraStaked( - index?: BigNumberish | null, - user?: string | null, - amount?: null - ): Mock_ExtraStakedEventFilter; - - "Mock_ExtraWithdrawn(uint256,address,uint256)"( - index?: BigNumberish | null, - user?: string | null, - amount?: null - ): Mock_ExtraWithdrawnEventFilter; - Mock_ExtraWithdrawn( - index?: BigNumberish | null, - user?: string | null, - amount?: null - ): Mock_ExtraWithdrawnEventFilter; - - "Mock_Withdrawn(uint256,address,uint256,uint256)"( - index?: null, - user?: string | null, - poolid?: BigNumberish | null, - amount?: null - ): Mock_WithdrawnEventFilter; - Mock_Withdrawn( - index?: null, - user?: string | null, - poolid?: BigNumberish | null, - amount?: null - ): Mock_WithdrawnEventFilter; - - "MultiCallFinished()"(): MultiCallFinishedEventFilter; - MultiCallFinished(): MultiCallFinishedEventFilter; - - "MultiCallStarted(address)"( - borrower?: string | null - ): MultiCallStartedEventFilter; - MultiCallStarted(borrower?: string | null): MultiCallStartedEventFilter; - - "NewConfigurator(address)"( - newConfigurator?: string | null - ): NewConfiguratorEventFilter; - NewConfigurator( - newConfigurator?: string | null - ): NewConfiguratorEventFilter; - - "OpenCreditAccount(address,address,uint256,uint16)"( - onBehalfOf?: string | null, - creditAccount?: string | null, - borrowAmount?: null, - referralCode?: null - ): OpenCreditAccountEventFilter; - OpenCreditAccount( - onBehalfOf?: string | null, - creditAccount?: string | null, - borrowAmount?: null, - referralCode?: null - ): OpenCreditAccountEventFilter; - - "TokenDisabled(address,address)"( - creditAccount?: null, - token?: null - ): TokenDisabledEventFilter; - TokenDisabled(creditAccount?: null, token?: null): TokenDisabledEventFilter; - - "TokenEnabled(address,address)"( - creditAccount?: null, - token?: null - ): TokenEnabledEventFilter; - TokenEnabled(creditAccount?: null, token?: null): TokenEnabledEventFilter; - - "TransferAccount(address,address)"( - oldOwner?: string | null, - newOwner?: string | null - ): TransferAccountEventFilter; - TransferAccount( - oldOwner?: string | null, - newOwner?: string | null - ): TransferAccountEventFilter; - - "TransferAccountAllowed(address,address,bool)"( - from?: string | null, - to?: string | null, - state?: null - ): TransferAccountAllowedEventFilter; - TransferAccountAllowed( - from?: string | null, - to?: string | null, - state?: null - ): TransferAccountAllowedEventFilter; - - "log(string)"(arg0?: null): logEventFilter; - log(arg0?: null): logEventFilter; - - "log_address(address)"(arg0?: null): log_addressEventFilter; - log_address(arg0?: null): log_addressEventFilter; - - "log_bytes(bytes)"(arg0?: null): log_bytesEventFilter; - log_bytes(arg0?: null): log_bytesEventFilter; - - "log_bytes32(bytes32)"(arg0?: null): log_bytes32EventFilter; - log_bytes32(arg0?: null): log_bytes32EventFilter; - - "log_int(int256)"(arg0?: null): log_intEventFilter; - log_int(arg0?: null): log_intEventFilter; - - "log_named_address(string,address)"( - key?: null, - val?: null - ): log_named_addressEventFilter; - log_named_address(key?: null, val?: null): log_named_addressEventFilter; - - "log_named_bytes(string,bytes)"( - key?: null, - val?: null - ): log_named_bytesEventFilter; - log_named_bytes(key?: null, val?: null): log_named_bytesEventFilter; - - "log_named_bytes32(string,bytes32)"( - key?: null, - val?: null - ): log_named_bytes32EventFilter; - log_named_bytes32(key?: null, val?: null): log_named_bytes32EventFilter; - - "log_named_decimal_int(string,int256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - log_named_decimal_int( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - - "log_named_decimal_uint(string,uint256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - log_named_decimal_uint( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - - "log_named_int(string,int256)"( - key?: null, - val?: null - ): log_named_intEventFilter; - log_named_int(key?: null, val?: null): log_named_intEventFilter; - - "log_named_string(string,string)"( - key?: null, - val?: null - ): log_named_stringEventFilter; - log_named_string(key?: null, val?: null): log_named_stringEventFilter; - - "log_named_uint(string,uint256)"( - key?: null, - val?: null - ): log_named_uintEventFilter; - log_named_uint(key?: null, val?: null): log_named_uintEventFilter; - - "log_string(string)"(arg0?: null): log_stringEventFilter; - log_string(arg0?: null): log_stringEventFilter; - - "log_uint(uint256)"(arg0?: null): log_uintEventFilter; - log_uint(arg0?: null): log_uintEventFilter; - - "logs(bytes)"(arg0?: null): logsEventFilter; - logs(arg0?: null): logsEventFilter; - }; - - estimateGas: { - IS_TEST(overrides?: CallOverrides): Promise; - - basePoolAdapter(overrides?: CallOverrides): Promise; - - basePoolMock(overrides?: CallOverrides): Promise; - - boosterAdapter(overrides?: CallOverrides): Promise; - - boosterMock(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - claimZapAdapter(overrides?: CallOverrides): Promise; - - claimZapMock(overrides?: CallOverrides): Promise; - - convexLPToken(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - crv(overrides?: CallOverrides): Promise; - - curveLPToken(overrides?: CallOverrides): Promise; - - cvx(overrides?: CallOverrides): Promise; - - extraPoolMock1(overrides?: CallOverrides): Promise; - - extraPoolMock2(overrides?: CallOverrides): Promise; - - extraRewardToken1(overrides?: CallOverrides): Promise; - - extraRewardToken2(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - feed(overrides?: CallOverrides): Promise; - - phantomToken(overrides?: CallOverrides): Promise; - - priceOracle(overrides?: CallOverrides): Promise; - - underlying(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - IS_TEST(overrides?: CallOverrides): Promise; - - basePoolAdapter(overrides?: CallOverrides): Promise; - - basePoolMock(overrides?: CallOverrides): Promise; - - boosterAdapter(overrides?: CallOverrides): Promise; - - boosterMock(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - claimZapAdapter(overrides?: CallOverrides): Promise; - - claimZapMock(overrides?: CallOverrides): Promise; - - convexLPToken(overrides?: CallOverrides): Promise; - - creditConfigurator( - overrides?: CallOverrides - ): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - crv(overrides?: CallOverrides): Promise; - - curveLPToken(overrides?: CallOverrides): Promise; - - cvx(overrides?: CallOverrides): Promise; - - extraPoolMock1(overrides?: CallOverrides): Promise; - - extraPoolMock2(overrides?: CallOverrides): Promise; - - extraRewardToken1(overrides?: CallOverrides): Promise; - - extraRewardToken2(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - feed(overrides?: CallOverrides): Promise; - - phantomToken(overrides?: CallOverrides): Promise; - - priceOracle(overrides?: CallOverrides): Promise; - - underlying(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/test/adapters/ConvexV1_BaseRewardPool.t.sol/ConvexV1AdapterBasePoolTest.ts b/src/types/contracts/test/adapters/ConvexV1_BaseRewardPool.t.sol/ConvexV1AdapterBasePoolTest.ts deleted file mode 100644 index 8022b986..00000000 --- a/src/types/contracts/test/adapters/ConvexV1_BaseRewardPool.t.sol/ConvexV1AdapterBasePoolTest.ts +++ /dev/null @@ -1,1701 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface ConvexV1AdapterBasePoolTestInterface extends utils.Interface { - functions: { - "IS_TEST()": FunctionFragment; - "basePoolAdapter()": FunctionFragment; - "basePoolMock()": FunctionFragment; - "boosterAdapter()": FunctionFragment; - "boosterMock()": FunctionFragment; - "cft()": FunctionFragment; - "claimZapAdapter()": FunctionFragment; - "claimZapMock()": FunctionFragment; - "convexLPToken()": FunctionFragment; - "creditConfigurator()": FunctionFragment; - "creditFacade()": FunctionFragment; - "creditManager()": FunctionFragment; - "crv()": FunctionFragment; - "curveLPToken()": FunctionFragment; - "cvx()": FunctionFragment; - "extraPoolMock1()": FunctionFragment; - "extraPoolMock2()": FunctionFragment; - "extraRewardToken1()": FunctionFragment; - "extraRewardToken2()": FunctionFragment; - "failed()": FunctionFragment; - "feed()": FunctionFragment; - "phantomToken()": FunctionFragment; - "priceOracle()": FunctionFragment; - "setUp()": FunctionFragment; - "test_ACVX1_P_01_constructor_sets_correct_values()": FunctionFragment; - "test_ACVX1_P_02_constructor_reverts_on_token_not_allowed()": FunctionFragment; - "test_ACVX1_P_03_stake_works_correctly()": FunctionFragment; - "test_ACVX1_P_04_stakeAll_works_correctly()": FunctionFragment; - "test_ACVX1_P_05_stakeFor_reverts()": FunctionFragment; - "test_ACVX1_P_06_getReward_works_correctly()": FunctionFragment; - "test_ACVX1_P_09_withdraw_works_correctly()": FunctionFragment; - "test_ACVX1_P_10_withdrawAll_works_correctly()": FunctionFragment; - "test_ACVX1_P_11_withdrawAndUnwrap_works_correctly()": FunctionFragment; - "test_ACVX1_P_12_withdrawAllAndUnwrap_works_correctly()": FunctionFragment; - "test_ACVX1_P_13_getters_are_consistent()": FunctionFragment; - "underlying()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "IS_TEST" - | "basePoolAdapter" - | "basePoolMock" - | "boosterAdapter" - | "boosterMock" - | "cft" - | "claimZapAdapter" - | "claimZapMock" - | "convexLPToken" - | "creditConfigurator" - | "creditFacade" - | "creditManager" - | "crv" - | "curveLPToken" - | "cvx" - | "extraPoolMock1" - | "extraPoolMock2" - | "extraRewardToken1" - | "extraRewardToken2" - | "failed" - | "feed" - | "phantomToken" - | "priceOracle" - | "setUp" - | "test_ACVX1_P_01_constructor_sets_correct_values" - | "test_ACVX1_P_02_constructor_reverts_on_token_not_allowed" - | "test_ACVX1_P_03_stake_works_correctly" - | "test_ACVX1_P_04_stakeAll_works_correctly" - | "test_ACVX1_P_05_stakeFor_reverts" - | "test_ACVX1_P_06_getReward_works_correctly" - | "test_ACVX1_P_09_withdraw_works_correctly" - | "test_ACVX1_P_10_withdrawAll_works_correctly" - | "test_ACVX1_P_11_withdrawAndUnwrap_works_correctly" - | "test_ACVX1_P_12_withdrawAllAndUnwrap_works_correctly" - | "test_ACVX1_P_13_getters_are_consistent" - | "underlying" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "IS_TEST", values?: undefined): string; - encodeFunctionData( - functionFragment: "basePoolAdapter", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "basePoolMock", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "boosterAdapter", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "boosterMock", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "cft", values?: undefined): string; - encodeFunctionData( - functionFragment: "claimZapAdapter", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "claimZapMock", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "convexLPToken", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditConfigurator", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditFacade", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditManager", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "crv", values?: undefined): string; - encodeFunctionData( - functionFragment: "curveLPToken", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "cvx", values?: undefined): string; - encodeFunctionData( - functionFragment: "extraPoolMock1", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "extraPoolMock2", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "extraRewardToken1", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "extraRewardToken2", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "failed", values?: undefined): string; - encodeFunctionData(functionFragment: "feed", values?: undefined): string; - encodeFunctionData( - functionFragment: "phantomToken", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "priceOracle", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "setUp", values?: undefined): string; - encodeFunctionData( - functionFragment: "test_ACVX1_P_01_constructor_sets_correct_values", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_ACVX1_P_02_constructor_reverts_on_token_not_allowed", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_ACVX1_P_03_stake_works_correctly", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_ACVX1_P_04_stakeAll_works_correctly", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_ACVX1_P_05_stakeFor_reverts", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_ACVX1_P_06_getReward_works_correctly", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_ACVX1_P_09_withdraw_works_correctly", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_ACVX1_P_10_withdrawAll_works_correctly", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_ACVX1_P_11_withdrawAndUnwrap_works_correctly", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_ACVX1_P_12_withdrawAllAndUnwrap_works_correctly", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_ACVX1_P_13_getters_are_consistent", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "underlying", - values?: undefined - ): string; - - decodeFunctionResult(functionFragment: "IS_TEST", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "basePoolAdapter", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "basePoolMock", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "boosterAdapter", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "boosterMock", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "cft", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "claimZapAdapter", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "claimZapMock", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "convexLPToken", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditConfigurator", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditFacade", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditManager", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "crv", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "curveLPToken", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "cvx", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "extraPoolMock1", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "extraPoolMock2", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "extraRewardToken1", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "extraRewardToken2", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "failed", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "feed", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "phantomToken", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "priceOracle", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "setUp", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "test_ACVX1_P_01_constructor_sets_correct_values", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_ACVX1_P_02_constructor_reverts_on_token_not_allowed", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_ACVX1_P_03_stake_works_correctly", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_ACVX1_P_04_stakeAll_works_correctly", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_ACVX1_P_05_stakeFor_reverts", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_ACVX1_P_06_getReward_works_correctly", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_ACVX1_P_09_withdraw_works_correctly", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_ACVX1_P_10_withdrawAll_works_correctly", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_ACVX1_P_11_withdrawAndUnwrap_works_correctly", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_ACVX1_P_12_withdrawAllAndUnwrap_works_correctly", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_ACVX1_P_13_getters_are_consistent", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "underlying", data: BytesLike): Result; - - events: { - "AddCollateral(address,address,uint256)": EventFragment; - "CloseCreditAccount(address,address)": EventFragment; - "DecreaseBorrowedAmount(address,uint256)": EventFragment; - "ExecuteOrder(address,address)": EventFragment; - "IncreaseBorrowedAmount(address,uint256)": EventFragment; - "LiquidateCreditAccount(address,address,address,uint256)": EventFragment; - "LiquidateExpiredCreditAccount(address,address,address,uint256)": EventFragment; - "Mock_BaseRewardPaid(uint256,address,uint256)": EventFragment; - "Mock_BaseStaked(uint256,address,uint256)": EventFragment; - "Mock_BaseWithdrawn(uint256,address,uint256)": EventFragment; - "Mock_Deposited(uint256,address,uint256,uint256,bool)": EventFragment; - "Mock_ExtraRewardPaid(uint256,address,uint256)": EventFragment; - "Mock_ExtraStaked(uint256,address,uint256)": EventFragment; - "Mock_ExtraWithdrawn(uint256,address,uint256)": EventFragment; - "Mock_Withdrawn(uint256,address,uint256,uint256)": EventFragment; - "MultiCallFinished()": EventFragment; - "MultiCallStarted(address)": EventFragment; - "NewConfigurator(address)": EventFragment; - "OpenCreditAccount(address,address,uint256,uint16)": EventFragment; - "TokenDisabled(address,address)": EventFragment; - "TokenEnabled(address,address)": EventFragment; - "TransferAccount(address,address)": EventFragment; - "TransferAccountAllowed(address,address,bool)": EventFragment; - "log(string)": EventFragment; - "log_address(address)": EventFragment; - "log_bytes(bytes)": EventFragment; - "log_bytes32(bytes32)": EventFragment; - "log_int(int256)": EventFragment; - "log_named_address(string,address)": EventFragment; - "log_named_bytes(string,bytes)": EventFragment; - "log_named_bytes32(string,bytes32)": EventFragment; - "log_named_decimal_int(string,int256,uint256)": EventFragment; - "log_named_decimal_uint(string,uint256,uint256)": EventFragment; - "log_named_int(string,int256)": EventFragment; - "log_named_string(string,string)": EventFragment; - "log_named_uint(string,uint256)": EventFragment; - "log_string(string)": EventFragment; - "log_uint(uint256)": EventFragment; - "logs(bytes)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "AddCollateral"): EventFragment; - getEvent(nameOrSignatureOrTopic: "CloseCreditAccount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "DecreaseBorrowedAmount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ExecuteOrder"): EventFragment; - getEvent(nameOrSignatureOrTopic: "IncreaseBorrowedAmount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "LiquidateCreditAccount"): EventFragment; - getEvent( - nameOrSignatureOrTopic: "LiquidateExpiredCreditAccount" - ): EventFragment; - getEvent(nameOrSignatureOrTopic: "Mock_BaseRewardPaid"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Mock_BaseStaked"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Mock_BaseWithdrawn"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Mock_Deposited"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Mock_ExtraRewardPaid"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Mock_ExtraStaked"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Mock_ExtraWithdrawn"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Mock_Withdrawn"): EventFragment; - getEvent(nameOrSignatureOrTopic: "MultiCallFinished"): EventFragment; - getEvent(nameOrSignatureOrTopic: "MultiCallStarted"): EventFragment; - getEvent(nameOrSignatureOrTopic: "NewConfigurator"): EventFragment; - getEvent(nameOrSignatureOrTopic: "OpenCreditAccount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TokenDisabled"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TokenEnabled"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TransferAccount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TransferAccountAllowed"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "logs"): EventFragment; -} - -export interface AddCollateralEventObject { - onBehalfOf: string; - token: string; - value: BigNumber; -} -export type AddCollateralEvent = TypedEvent< - [string, string, BigNumber], - AddCollateralEventObject ->; - -export type AddCollateralEventFilter = TypedEventFilter; - -export interface CloseCreditAccountEventObject { - owner: string; - to: string; -} -export type CloseCreditAccountEvent = TypedEvent< - [string, string], - CloseCreditAccountEventObject ->; - -export type CloseCreditAccountEventFilter = - TypedEventFilter; - -export interface DecreaseBorrowedAmountEventObject { - borrower: string; - amount: BigNumber; -} -export type DecreaseBorrowedAmountEvent = TypedEvent< - [string, BigNumber], - DecreaseBorrowedAmountEventObject ->; - -export type DecreaseBorrowedAmountEventFilter = - TypedEventFilter; - -export interface ExecuteOrderEventObject { - borrower: string; - target: string; -} -export type ExecuteOrderEvent = TypedEvent< - [string, string], - ExecuteOrderEventObject ->; - -export type ExecuteOrderEventFilter = TypedEventFilter; - -export interface IncreaseBorrowedAmountEventObject { - borrower: string; - amount: BigNumber; -} -export type IncreaseBorrowedAmountEvent = TypedEvent< - [string, BigNumber], - IncreaseBorrowedAmountEventObject ->; - -export type IncreaseBorrowedAmountEventFilter = - TypedEventFilter; - -export interface LiquidateCreditAccountEventObject { - owner: string; - liquidator: string; - to: string; - remainingFunds: BigNumber; -} -export type LiquidateCreditAccountEvent = TypedEvent< - [string, string, string, BigNumber], - LiquidateCreditAccountEventObject ->; - -export type LiquidateCreditAccountEventFilter = - TypedEventFilter; - -export interface LiquidateExpiredCreditAccountEventObject { - owner: string; - liquidator: string; - to: string; - remainingFunds: BigNumber; -} -export type LiquidateExpiredCreditAccountEvent = TypedEvent< - [string, string, string, BigNumber], - LiquidateExpiredCreditAccountEventObject ->; - -export type LiquidateExpiredCreditAccountEventFilter = - TypedEventFilter; - -export interface Mock_BaseRewardPaidEventObject { - index: BigNumber; - user: string; - reward: BigNumber; -} -export type Mock_BaseRewardPaidEvent = TypedEvent< - [BigNumber, string, BigNumber], - Mock_BaseRewardPaidEventObject ->; - -export type Mock_BaseRewardPaidEventFilter = - TypedEventFilter; - -export interface Mock_BaseStakedEventObject { - index: BigNumber; - user: string; - amount: BigNumber; -} -export type Mock_BaseStakedEvent = TypedEvent< - [BigNumber, string, BigNumber], - Mock_BaseStakedEventObject ->; - -export type Mock_BaseStakedEventFilter = TypedEventFilter; - -export interface Mock_BaseWithdrawnEventObject { - index: BigNumber; - user: string; - amount: BigNumber; -} -export type Mock_BaseWithdrawnEvent = TypedEvent< - [BigNumber, string, BigNumber], - Mock_BaseWithdrawnEventObject ->; - -export type Mock_BaseWithdrawnEventFilter = - TypedEventFilter; - -export interface Mock_DepositedEventObject { - index: BigNumber; - user: string; - poolid: BigNumber; - amount: BigNumber; - _stake: boolean; -} -export type Mock_DepositedEvent = TypedEvent< - [BigNumber, string, BigNumber, BigNumber, boolean], - Mock_DepositedEventObject ->; - -export type Mock_DepositedEventFilter = TypedEventFilter; - -export interface Mock_ExtraRewardPaidEventObject { - index: BigNumber; - user: string; - reward: BigNumber; -} -export type Mock_ExtraRewardPaidEvent = TypedEvent< - [BigNumber, string, BigNumber], - Mock_ExtraRewardPaidEventObject ->; - -export type Mock_ExtraRewardPaidEventFilter = - TypedEventFilter; - -export interface Mock_ExtraStakedEventObject { - index: BigNumber; - user: string; - amount: BigNumber; -} -export type Mock_ExtraStakedEvent = TypedEvent< - [BigNumber, string, BigNumber], - Mock_ExtraStakedEventObject ->; - -export type Mock_ExtraStakedEventFilter = - TypedEventFilter; - -export interface Mock_ExtraWithdrawnEventObject { - index: BigNumber; - user: string; - amount: BigNumber; -} -export type Mock_ExtraWithdrawnEvent = TypedEvent< - [BigNumber, string, BigNumber], - Mock_ExtraWithdrawnEventObject ->; - -export type Mock_ExtraWithdrawnEventFilter = - TypedEventFilter; - -export interface Mock_WithdrawnEventObject { - index: BigNumber; - user: string; - poolid: BigNumber; - amount: BigNumber; -} -export type Mock_WithdrawnEvent = TypedEvent< - [BigNumber, string, BigNumber, BigNumber], - Mock_WithdrawnEventObject ->; - -export type Mock_WithdrawnEventFilter = TypedEventFilter; - -export interface MultiCallFinishedEventObject {} -export type MultiCallFinishedEvent = TypedEvent< - [], - MultiCallFinishedEventObject ->; - -export type MultiCallFinishedEventFilter = - TypedEventFilter; - -export interface MultiCallStartedEventObject { - borrower: string; -} -export type MultiCallStartedEvent = TypedEvent< - [string], - MultiCallStartedEventObject ->; - -export type MultiCallStartedEventFilter = - TypedEventFilter; - -export interface NewConfiguratorEventObject { - newConfigurator: string; -} -export type NewConfiguratorEvent = TypedEvent< - [string], - NewConfiguratorEventObject ->; - -export type NewConfiguratorEventFilter = TypedEventFilter; - -export interface OpenCreditAccountEventObject { - onBehalfOf: string; - creditAccount: string; - borrowAmount: BigNumber; - referralCode: number; -} -export type OpenCreditAccountEvent = TypedEvent< - [string, string, BigNumber, number], - OpenCreditAccountEventObject ->; - -export type OpenCreditAccountEventFilter = - TypedEventFilter; - -export interface TokenDisabledEventObject { - creditAccount: string; - token: string; -} -export type TokenDisabledEvent = TypedEvent< - [string, string], - TokenDisabledEventObject ->; - -export type TokenDisabledEventFilter = TypedEventFilter; - -export interface TokenEnabledEventObject { - creditAccount: string; - token: string; -} -export type TokenEnabledEvent = TypedEvent< - [string, string], - TokenEnabledEventObject ->; - -export type TokenEnabledEventFilter = TypedEventFilter; - -export interface TransferAccountEventObject { - oldOwner: string; - newOwner: string; -} -export type TransferAccountEvent = TypedEvent< - [string, string], - TransferAccountEventObject ->; - -export type TransferAccountEventFilter = TypedEventFilter; - -export interface TransferAccountAllowedEventObject { - from: string; - to: string; - state: boolean; -} -export type TransferAccountAllowedEvent = TypedEvent< - [string, string, boolean], - TransferAccountAllowedEventObject ->; - -export type TransferAccountAllowedEventFilter = - TypedEventFilter; - -export interface logEventObject { - arg0: string; -} -export type logEvent = TypedEvent<[string], logEventObject>; - -export type logEventFilter = TypedEventFilter; - -export interface log_addressEventObject { - arg0: string; -} -export type log_addressEvent = TypedEvent<[string], log_addressEventObject>; - -export type log_addressEventFilter = TypedEventFilter; - -export interface log_bytesEventObject { - arg0: string; -} -export type log_bytesEvent = TypedEvent<[string], log_bytesEventObject>; - -export type log_bytesEventFilter = TypedEventFilter; - -export interface log_bytes32EventObject { - arg0: string; -} -export type log_bytes32Event = TypedEvent<[string], log_bytes32EventObject>; - -export type log_bytes32EventFilter = TypedEventFilter; - -export interface log_intEventObject { - arg0: BigNumber; -} -export type log_intEvent = TypedEvent<[BigNumber], log_intEventObject>; - -export type log_intEventFilter = TypedEventFilter; - -export interface log_named_addressEventObject { - key: string; - val: string; -} -export type log_named_addressEvent = TypedEvent< - [string, string], - log_named_addressEventObject ->; - -export type log_named_addressEventFilter = - TypedEventFilter; - -export interface log_named_bytesEventObject { - key: string; - val: string; -} -export type log_named_bytesEvent = TypedEvent< - [string, string], - log_named_bytesEventObject ->; - -export type log_named_bytesEventFilter = TypedEventFilter; - -export interface log_named_bytes32EventObject { - key: string; - val: string; -} -export type log_named_bytes32Event = TypedEvent< - [string, string], - log_named_bytes32EventObject ->; - -export type log_named_bytes32EventFilter = - TypedEventFilter; - -export interface log_named_decimal_intEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_intEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_intEventObject ->; - -export type log_named_decimal_intEventFilter = - TypedEventFilter; - -export interface log_named_decimal_uintEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_uintEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_uintEventObject ->; - -export type log_named_decimal_uintEventFilter = - TypedEventFilter; - -export interface log_named_intEventObject { - key: string; - val: BigNumber; -} -export type log_named_intEvent = TypedEvent< - [string, BigNumber], - log_named_intEventObject ->; - -export type log_named_intEventFilter = TypedEventFilter; - -export interface log_named_stringEventObject { - key: string; - val: string; -} -export type log_named_stringEvent = TypedEvent< - [string, string], - log_named_stringEventObject ->; - -export type log_named_stringEventFilter = - TypedEventFilter; - -export interface log_named_uintEventObject { - key: string; - val: BigNumber; -} -export type log_named_uintEvent = TypedEvent< - [string, BigNumber], - log_named_uintEventObject ->; - -export type log_named_uintEventFilter = TypedEventFilter; - -export interface log_stringEventObject { - arg0: string; -} -export type log_stringEvent = TypedEvent<[string], log_stringEventObject>; - -export type log_stringEventFilter = TypedEventFilter; - -export interface log_uintEventObject { - arg0: BigNumber; -} -export type log_uintEvent = TypedEvent<[BigNumber], log_uintEventObject>; - -export type log_uintEventFilter = TypedEventFilter; - -export interface logsEventObject { - arg0: string; -} -export type logsEvent = TypedEvent<[string], logsEventObject>; - -export type logsEventFilter = TypedEventFilter; - -export interface ConvexV1AdapterBasePoolTest extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: ConvexV1AdapterBasePoolTestInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - IS_TEST(overrides?: CallOverrides): Promise<[boolean]>; - - basePoolAdapter(overrides?: CallOverrides): Promise<[string]>; - - basePoolMock(overrides?: CallOverrides): Promise<[string]>; - - boosterAdapter(overrides?: CallOverrides): Promise<[string]>; - - boosterMock(overrides?: CallOverrides): Promise<[string]>; - - cft(overrides?: CallOverrides): Promise<[string]>; - - claimZapAdapter(overrides?: CallOverrides): Promise<[string]>; - - claimZapMock(overrides?: CallOverrides): Promise<[string]>; - - convexLPToken(overrides?: CallOverrides): Promise<[string]>; - - creditConfigurator(overrides?: CallOverrides): Promise<[string]>; - - creditFacade(overrides?: CallOverrides): Promise<[string]>; - - creditManager(overrides?: CallOverrides): Promise<[string]>; - - crv(overrides?: CallOverrides): Promise<[string]>; - - curveLPToken(overrides?: CallOverrides): Promise<[string]>; - - cvx(overrides?: CallOverrides): Promise<[string]>; - - extraPoolMock1(overrides?: CallOverrides): Promise<[string]>; - - extraPoolMock2(overrides?: CallOverrides): Promise<[string]>; - - extraRewardToken1(overrides?: CallOverrides): Promise<[string]>; - - extraRewardToken2(overrides?: CallOverrides): Promise<[string]>; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - feed(overrides?: CallOverrides): Promise<[string]>; - - phantomToken(overrides?: CallOverrides): Promise<[string]>; - - priceOracle(overrides?: CallOverrides): Promise<[string]>; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_P_01_constructor_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_P_02_constructor_reverts_on_token_not_allowed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_P_03_stake_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_P_04_stakeAll_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_P_05_stakeFor_reverts( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_P_06_getReward_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_P_09_withdraw_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_P_10_withdrawAll_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_P_11_withdrawAndUnwrap_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_P_12_withdrawAllAndUnwrap_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_P_13_getters_are_consistent( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise<[string]>; - }; - - IS_TEST(overrides?: CallOverrides): Promise; - - basePoolAdapter(overrides?: CallOverrides): Promise; - - basePoolMock(overrides?: CallOverrides): Promise; - - boosterAdapter(overrides?: CallOverrides): Promise; - - boosterMock(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - claimZapAdapter(overrides?: CallOverrides): Promise; - - claimZapMock(overrides?: CallOverrides): Promise; - - convexLPToken(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - crv(overrides?: CallOverrides): Promise; - - curveLPToken(overrides?: CallOverrides): Promise; - - cvx(overrides?: CallOverrides): Promise; - - extraPoolMock1(overrides?: CallOverrides): Promise; - - extraPoolMock2(overrides?: CallOverrides): Promise; - - extraRewardToken1(overrides?: CallOverrides): Promise; - - extraRewardToken2(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - feed(overrides?: CallOverrides): Promise; - - phantomToken(overrides?: CallOverrides): Promise; - - priceOracle(overrides?: CallOverrides): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_P_01_constructor_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_P_02_constructor_reverts_on_token_not_allowed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_P_03_stake_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_P_04_stakeAll_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_P_05_stakeFor_reverts( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_P_06_getReward_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_P_09_withdraw_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_P_10_withdrawAll_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_P_11_withdrawAndUnwrap_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_P_12_withdrawAllAndUnwrap_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_P_13_getters_are_consistent( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - - callStatic: { - IS_TEST(overrides?: CallOverrides): Promise; - - basePoolAdapter(overrides?: CallOverrides): Promise; - - basePoolMock(overrides?: CallOverrides): Promise; - - boosterAdapter(overrides?: CallOverrides): Promise; - - boosterMock(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - claimZapAdapter(overrides?: CallOverrides): Promise; - - claimZapMock(overrides?: CallOverrides): Promise; - - convexLPToken(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - crv(overrides?: CallOverrides): Promise; - - curveLPToken(overrides?: CallOverrides): Promise; - - cvx(overrides?: CallOverrides): Promise; - - extraPoolMock1(overrides?: CallOverrides): Promise; - - extraPoolMock2(overrides?: CallOverrides): Promise; - - extraRewardToken1(overrides?: CallOverrides): Promise; - - extraRewardToken2(overrides?: CallOverrides): Promise; - - failed(overrides?: CallOverrides): Promise; - - feed(overrides?: CallOverrides): Promise; - - phantomToken(overrides?: CallOverrides): Promise; - - priceOracle(overrides?: CallOverrides): Promise; - - setUp(overrides?: CallOverrides): Promise; - - test_ACVX1_P_01_constructor_sets_correct_values( - overrides?: CallOverrides - ): Promise; - - test_ACVX1_P_02_constructor_reverts_on_token_not_allowed( - overrides?: CallOverrides - ): Promise; - - test_ACVX1_P_03_stake_works_correctly( - overrides?: CallOverrides - ): Promise; - - test_ACVX1_P_04_stakeAll_works_correctly( - overrides?: CallOverrides - ): Promise; - - test_ACVX1_P_05_stakeFor_reverts(overrides?: CallOverrides): Promise; - - test_ACVX1_P_06_getReward_works_correctly( - overrides?: CallOverrides - ): Promise; - - test_ACVX1_P_09_withdraw_works_correctly( - overrides?: CallOverrides - ): Promise; - - test_ACVX1_P_10_withdrawAll_works_correctly( - overrides?: CallOverrides - ): Promise; - - test_ACVX1_P_11_withdrawAndUnwrap_works_correctly( - overrides?: CallOverrides - ): Promise; - - test_ACVX1_P_12_withdrawAllAndUnwrap_works_correctly( - overrides?: CallOverrides - ): Promise; - - test_ACVX1_P_13_getters_are_consistent( - overrides?: CallOverrides - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - }; - - filters: { - "AddCollateral(address,address,uint256)"( - onBehalfOf?: string | null, - token?: string | null, - value?: null - ): AddCollateralEventFilter; - AddCollateral( - onBehalfOf?: string | null, - token?: string | null, - value?: null - ): AddCollateralEventFilter; - - "CloseCreditAccount(address,address)"( - owner?: string | null, - to?: string | null - ): CloseCreditAccountEventFilter; - CloseCreditAccount( - owner?: string | null, - to?: string | null - ): CloseCreditAccountEventFilter; - - "DecreaseBorrowedAmount(address,uint256)"( - borrower?: string | null, - amount?: null - ): DecreaseBorrowedAmountEventFilter; - DecreaseBorrowedAmount( - borrower?: string | null, - amount?: null - ): DecreaseBorrowedAmountEventFilter; - - "ExecuteOrder(address,address)"( - borrower?: string | null, - target?: string | null - ): ExecuteOrderEventFilter; - ExecuteOrder( - borrower?: string | null, - target?: string | null - ): ExecuteOrderEventFilter; - - "IncreaseBorrowedAmount(address,uint256)"( - borrower?: string | null, - amount?: null - ): IncreaseBorrowedAmountEventFilter; - IncreaseBorrowedAmount( - borrower?: string | null, - amount?: null - ): IncreaseBorrowedAmountEventFilter; - - "LiquidateCreditAccount(address,address,address,uint256)"( - owner?: string | null, - liquidator?: string | null, - to?: string | null, - remainingFunds?: null - ): LiquidateCreditAccountEventFilter; - LiquidateCreditAccount( - owner?: string | null, - liquidator?: string | null, - to?: string | null, - remainingFunds?: null - ): LiquidateCreditAccountEventFilter; - - "LiquidateExpiredCreditAccount(address,address,address,uint256)"( - owner?: string | null, - liquidator?: string | null, - to?: string | null, - remainingFunds?: null - ): LiquidateExpiredCreditAccountEventFilter; - LiquidateExpiredCreditAccount( - owner?: string | null, - liquidator?: string | null, - to?: string | null, - remainingFunds?: null - ): LiquidateExpiredCreditAccountEventFilter; - - "Mock_BaseRewardPaid(uint256,address,uint256)"( - index?: BigNumberish | null, - user?: string | null, - reward?: null - ): Mock_BaseRewardPaidEventFilter; - Mock_BaseRewardPaid( - index?: BigNumberish | null, - user?: string | null, - reward?: null - ): Mock_BaseRewardPaidEventFilter; - - "Mock_BaseStaked(uint256,address,uint256)"( - index?: BigNumberish | null, - user?: string | null, - amount?: null - ): Mock_BaseStakedEventFilter; - Mock_BaseStaked( - index?: BigNumberish | null, - user?: string | null, - amount?: null - ): Mock_BaseStakedEventFilter; - - "Mock_BaseWithdrawn(uint256,address,uint256)"( - index?: BigNumberish | null, - user?: string | null, - amount?: null - ): Mock_BaseWithdrawnEventFilter; - Mock_BaseWithdrawn( - index?: BigNumberish | null, - user?: string | null, - amount?: null - ): Mock_BaseWithdrawnEventFilter; - - "Mock_Deposited(uint256,address,uint256,uint256,bool)"( - index?: null, - user?: string | null, - poolid?: BigNumberish | null, - amount?: null, - _stake?: null - ): Mock_DepositedEventFilter; - Mock_Deposited( - index?: null, - user?: string | null, - poolid?: BigNumberish | null, - amount?: null, - _stake?: null - ): Mock_DepositedEventFilter; - - "Mock_ExtraRewardPaid(uint256,address,uint256)"( - index?: BigNumberish | null, - user?: string | null, - reward?: null - ): Mock_ExtraRewardPaidEventFilter; - Mock_ExtraRewardPaid( - index?: BigNumberish | null, - user?: string | null, - reward?: null - ): Mock_ExtraRewardPaidEventFilter; - - "Mock_ExtraStaked(uint256,address,uint256)"( - index?: BigNumberish | null, - user?: string | null, - amount?: null - ): Mock_ExtraStakedEventFilter; - Mock_ExtraStaked( - index?: BigNumberish | null, - user?: string | null, - amount?: null - ): Mock_ExtraStakedEventFilter; - - "Mock_ExtraWithdrawn(uint256,address,uint256)"( - index?: BigNumberish | null, - user?: string | null, - amount?: null - ): Mock_ExtraWithdrawnEventFilter; - Mock_ExtraWithdrawn( - index?: BigNumberish | null, - user?: string | null, - amount?: null - ): Mock_ExtraWithdrawnEventFilter; - - "Mock_Withdrawn(uint256,address,uint256,uint256)"( - index?: null, - user?: string | null, - poolid?: BigNumberish | null, - amount?: null - ): Mock_WithdrawnEventFilter; - Mock_Withdrawn( - index?: null, - user?: string | null, - poolid?: BigNumberish | null, - amount?: null - ): Mock_WithdrawnEventFilter; - - "MultiCallFinished()"(): MultiCallFinishedEventFilter; - MultiCallFinished(): MultiCallFinishedEventFilter; - - "MultiCallStarted(address)"( - borrower?: string | null - ): MultiCallStartedEventFilter; - MultiCallStarted(borrower?: string | null): MultiCallStartedEventFilter; - - "NewConfigurator(address)"( - newConfigurator?: string | null - ): NewConfiguratorEventFilter; - NewConfigurator( - newConfigurator?: string | null - ): NewConfiguratorEventFilter; - - "OpenCreditAccount(address,address,uint256,uint16)"( - onBehalfOf?: string | null, - creditAccount?: string | null, - borrowAmount?: null, - referralCode?: null - ): OpenCreditAccountEventFilter; - OpenCreditAccount( - onBehalfOf?: string | null, - creditAccount?: string | null, - borrowAmount?: null, - referralCode?: null - ): OpenCreditAccountEventFilter; - - "TokenDisabled(address,address)"( - creditAccount?: null, - token?: null - ): TokenDisabledEventFilter; - TokenDisabled(creditAccount?: null, token?: null): TokenDisabledEventFilter; - - "TokenEnabled(address,address)"( - creditAccount?: null, - token?: null - ): TokenEnabledEventFilter; - TokenEnabled(creditAccount?: null, token?: null): TokenEnabledEventFilter; - - "TransferAccount(address,address)"( - oldOwner?: string | null, - newOwner?: string | null - ): TransferAccountEventFilter; - TransferAccount( - oldOwner?: string | null, - newOwner?: string | null - ): TransferAccountEventFilter; - - "TransferAccountAllowed(address,address,bool)"( - from?: string | null, - to?: string | null, - state?: null - ): TransferAccountAllowedEventFilter; - TransferAccountAllowed( - from?: string | null, - to?: string | null, - state?: null - ): TransferAccountAllowedEventFilter; - - "log(string)"(arg0?: null): logEventFilter; - log(arg0?: null): logEventFilter; - - "log_address(address)"(arg0?: null): log_addressEventFilter; - log_address(arg0?: null): log_addressEventFilter; - - "log_bytes(bytes)"(arg0?: null): log_bytesEventFilter; - log_bytes(arg0?: null): log_bytesEventFilter; - - "log_bytes32(bytes32)"(arg0?: null): log_bytes32EventFilter; - log_bytes32(arg0?: null): log_bytes32EventFilter; - - "log_int(int256)"(arg0?: null): log_intEventFilter; - log_int(arg0?: null): log_intEventFilter; - - "log_named_address(string,address)"( - key?: null, - val?: null - ): log_named_addressEventFilter; - log_named_address(key?: null, val?: null): log_named_addressEventFilter; - - "log_named_bytes(string,bytes)"( - key?: null, - val?: null - ): log_named_bytesEventFilter; - log_named_bytes(key?: null, val?: null): log_named_bytesEventFilter; - - "log_named_bytes32(string,bytes32)"( - key?: null, - val?: null - ): log_named_bytes32EventFilter; - log_named_bytes32(key?: null, val?: null): log_named_bytes32EventFilter; - - "log_named_decimal_int(string,int256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - log_named_decimal_int( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - - "log_named_decimal_uint(string,uint256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - log_named_decimal_uint( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - - "log_named_int(string,int256)"( - key?: null, - val?: null - ): log_named_intEventFilter; - log_named_int(key?: null, val?: null): log_named_intEventFilter; - - "log_named_string(string,string)"( - key?: null, - val?: null - ): log_named_stringEventFilter; - log_named_string(key?: null, val?: null): log_named_stringEventFilter; - - "log_named_uint(string,uint256)"( - key?: null, - val?: null - ): log_named_uintEventFilter; - log_named_uint(key?: null, val?: null): log_named_uintEventFilter; - - "log_string(string)"(arg0?: null): log_stringEventFilter; - log_string(arg0?: null): log_stringEventFilter; - - "log_uint(uint256)"(arg0?: null): log_uintEventFilter; - log_uint(arg0?: null): log_uintEventFilter; - - "logs(bytes)"(arg0?: null): logsEventFilter; - logs(arg0?: null): logsEventFilter; - }; - - estimateGas: { - IS_TEST(overrides?: CallOverrides): Promise; - - basePoolAdapter(overrides?: CallOverrides): Promise; - - basePoolMock(overrides?: CallOverrides): Promise; - - boosterAdapter(overrides?: CallOverrides): Promise; - - boosterMock(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - claimZapAdapter(overrides?: CallOverrides): Promise; - - claimZapMock(overrides?: CallOverrides): Promise; - - convexLPToken(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - crv(overrides?: CallOverrides): Promise; - - curveLPToken(overrides?: CallOverrides): Promise; - - cvx(overrides?: CallOverrides): Promise; - - extraPoolMock1(overrides?: CallOverrides): Promise; - - extraPoolMock2(overrides?: CallOverrides): Promise; - - extraRewardToken1(overrides?: CallOverrides): Promise; - - extraRewardToken2(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - feed(overrides?: CallOverrides): Promise; - - phantomToken(overrides?: CallOverrides): Promise; - - priceOracle(overrides?: CallOverrides): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_P_01_constructor_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_P_02_constructor_reverts_on_token_not_allowed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_P_03_stake_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_P_04_stakeAll_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_P_05_stakeFor_reverts( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_P_06_getReward_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_P_09_withdraw_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_P_10_withdrawAll_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_P_11_withdrawAndUnwrap_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_P_12_withdrawAllAndUnwrap_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_P_13_getters_are_consistent( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - IS_TEST(overrides?: CallOverrides): Promise; - - basePoolAdapter(overrides?: CallOverrides): Promise; - - basePoolMock(overrides?: CallOverrides): Promise; - - boosterAdapter(overrides?: CallOverrides): Promise; - - boosterMock(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - claimZapAdapter(overrides?: CallOverrides): Promise; - - claimZapMock(overrides?: CallOverrides): Promise; - - convexLPToken(overrides?: CallOverrides): Promise; - - creditConfigurator( - overrides?: CallOverrides - ): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - crv(overrides?: CallOverrides): Promise; - - curveLPToken(overrides?: CallOverrides): Promise; - - cvx(overrides?: CallOverrides): Promise; - - extraPoolMock1(overrides?: CallOverrides): Promise; - - extraPoolMock2(overrides?: CallOverrides): Promise; - - extraRewardToken1(overrides?: CallOverrides): Promise; - - extraRewardToken2(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - feed(overrides?: CallOverrides): Promise; - - phantomToken(overrides?: CallOverrides): Promise; - - priceOracle(overrides?: CallOverrides): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_P_01_constructor_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_P_02_constructor_reverts_on_token_not_allowed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_P_03_stake_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_P_04_stakeAll_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_P_05_stakeFor_reverts( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_P_06_getReward_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_P_09_withdraw_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_P_10_withdrawAll_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_P_11_withdrawAndUnwrap_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_P_12_withdrawAllAndUnwrap_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_P_13_getters_are_consistent( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/test/adapters/ConvexV1_BaseRewardPool.t.sol/index.ts b/src/types/contracts/test/adapters/ConvexV1_BaseRewardPool.t.sol/index.ts deleted file mode 100644 index 94152307..00000000 --- a/src/types/contracts/test/adapters/ConvexV1_BaseRewardPool.t.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { ConvexV1AdapterBasePoolTest } from "./ConvexV1AdapterBasePoolTest"; diff --git a/src/types/contracts/test/adapters/ConvexV1_Booster.t.sol/ConvexV1AdapterBoosterTest.ts b/src/types/contracts/test/adapters/ConvexV1_Booster.t.sol/ConvexV1AdapterBoosterTest.ts deleted file mode 100644 index 38cdd231..00000000 --- a/src/types/contracts/test/adapters/ConvexV1_Booster.t.sol/ConvexV1AdapterBoosterTest.ts +++ /dev/null @@ -1,1583 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface ConvexV1AdapterBoosterTestInterface extends utils.Interface { - functions: { - "IS_TEST()": FunctionFragment; - "basePoolAdapter()": FunctionFragment; - "basePoolMock()": FunctionFragment; - "boosterAdapter()": FunctionFragment; - "boosterMock()": FunctionFragment; - "cft()": FunctionFragment; - "claimZapAdapter()": FunctionFragment; - "claimZapMock()": FunctionFragment; - "convexLPToken()": FunctionFragment; - "creditConfigurator()": FunctionFragment; - "creditFacade()": FunctionFragment; - "creditManager()": FunctionFragment; - "crv()": FunctionFragment; - "curveLPToken()": FunctionFragment; - "cvx()": FunctionFragment; - "extraPoolMock1()": FunctionFragment; - "extraPoolMock2()": FunctionFragment; - "extraRewardToken1()": FunctionFragment; - "extraRewardToken2()": FunctionFragment; - "failed()": FunctionFragment; - "feed()": FunctionFragment; - "phantomToken()": FunctionFragment; - "priceOracle()": FunctionFragment; - "setUp()": FunctionFragment; - "test_ACVX1_B_01_constructor_sets_correct_values()": FunctionFragment; - "test_ACVX1_B_02_deposit_without_staking_works_correctly()": FunctionFragment; - "test_ACVX1_B_03_depositAll_without_staking_works_correctly()": FunctionFragment; - "test_ACVX1_B_06_withdraw_works_correctly()": FunctionFragment; - "test_ACVX1_B_07_withdrawAll_works_correctly()": FunctionFragment; - "test_ACVX1_B_08_getters_are_consistent()": FunctionFragment; - "test_ACVX1_B_09_updateStakedPhantomTokensMap_access_restricted()": FunctionFragment; - "underlying()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "IS_TEST" - | "basePoolAdapter" - | "basePoolMock" - | "boosterAdapter" - | "boosterMock" - | "cft" - | "claimZapAdapter" - | "claimZapMock" - | "convexLPToken" - | "creditConfigurator" - | "creditFacade" - | "creditManager" - | "crv" - | "curveLPToken" - | "cvx" - | "extraPoolMock1" - | "extraPoolMock2" - | "extraRewardToken1" - | "extraRewardToken2" - | "failed" - | "feed" - | "phantomToken" - | "priceOracle" - | "setUp" - | "test_ACVX1_B_01_constructor_sets_correct_values" - | "test_ACVX1_B_02_deposit_without_staking_works_correctly" - | "test_ACVX1_B_03_depositAll_without_staking_works_correctly" - | "test_ACVX1_B_06_withdraw_works_correctly" - | "test_ACVX1_B_07_withdrawAll_works_correctly" - | "test_ACVX1_B_08_getters_are_consistent" - | "test_ACVX1_B_09_updateStakedPhantomTokensMap_access_restricted" - | "underlying" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "IS_TEST", values?: undefined): string; - encodeFunctionData( - functionFragment: "basePoolAdapter", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "basePoolMock", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "boosterAdapter", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "boosterMock", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "cft", values?: undefined): string; - encodeFunctionData( - functionFragment: "claimZapAdapter", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "claimZapMock", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "convexLPToken", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditConfigurator", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditFacade", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditManager", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "crv", values?: undefined): string; - encodeFunctionData( - functionFragment: "curveLPToken", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "cvx", values?: undefined): string; - encodeFunctionData( - functionFragment: "extraPoolMock1", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "extraPoolMock2", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "extraRewardToken1", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "extraRewardToken2", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "failed", values?: undefined): string; - encodeFunctionData(functionFragment: "feed", values?: undefined): string; - encodeFunctionData( - functionFragment: "phantomToken", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "priceOracle", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "setUp", values?: undefined): string; - encodeFunctionData( - functionFragment: "test_ACVX1_B_01_constructor_sets_correct_values", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_ACVX1_B_02_deposit_without_staking_works_correctly", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_ACVX1_B_03_depositAll_without_staking_works_correctly", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_ACVX1_B_06_withdraw_works_correctly", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_ACVX1_B_07_withdrawAll_works_correctly", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_ACVX1_B_08_getters_are_consistent", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_ACVX1_B_09_updateStakedPhantomTokensMap_access_restricted", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "underlying", - values?: undefined - ): string; - - decodeFunctionResult(functionFragment: "IS_TEST", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "basePoolAdapter", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "basePoolMock", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "boosterAdapter", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "boosterMock", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "cft", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "claimZapAdapter", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "claimZapMock", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "convexLPToken", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditConfigurator", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditFacade", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditManager", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "crv", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "curveLPToken", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "cvx", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "extraPoolMock1", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "extraPoolMock2", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "extraRewardToken1", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "extraRewardToken2", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "failed", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "feed", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "phantomToken", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "priceOracle", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "setUp", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "test_ACVX1_B_01_constructor_sets_correct_values", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_ACVX1_B_02_deposit_without_staking_works_correctly", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_ACVX1_B_03_depositAll_without_staking_works_correctly", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_ACVX1_B_06_withdraw_works_correctly", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_ACVX1_B_07_withdrawAll_works_correctly", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_ACVX1_B_08_getters_are_consistent", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_ACVX1_B_09_updateStakedPhantomTokensMap_access_restricted", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "underlying", data: BytesLike): Result; - - events: { - "AddCollateral(address,address,uint256)": EventFragment; - "CloseCreditAccount(address,address)": EventFragment; - "DecreaseBorrowedAmount(address,uint256)": EventFragment; - "ExecuteOrder(address,address)": EventFragment; - "IncreaseBorrowedAmount(address,uint256)": EventFragment; - "LiquidateCreditAccount(address,address,address,uint256)": EventFragment; - "LiquidateExpiredCreditAccount(address,address,address,uint256)": EventFragment; - "Mock_BaseRewardPaid(uint256,address,uint256)": EventFragment; - "Mock_BaseStaked(uint256,address,uint256)": EventFragment; - "Mock_BaseWithdrawn(uint256,address,uint256)": EventFragment; - "Mock_Deposited(uint256,address,uint256,uint256,bool)": EventFragment; - "Mock_ExtraRewardPaid(uint256,address,uint256)": EventFragment; - "Mock_ExtraStaked(uint256,address,uint256)": EventFragment; - "Mock_ExtraWithdrawn(uint256,address,uint256)": EventFragment; - "Mock_Withdrawn(uint256,address,uint256,uint256)": EventFragment; - "MultiCallFinished()": EventFragment; - "MultiCallStarted(address)": EventFragment; - "NewConfigurator(address)": EventFragment; - "OpenCreditAccount(address,address,uint256,uint16)": EventFragment; - "TokenDisabled(address,address)": EventFragment; - "TokenEnabled(address,address)": EventFragment; - "TransferAccount(address,address)": EventFragment; - "TransferAccountAllowed(address,address,bool)": EventFragment; - "log(string)": EventFragment; - "log_address(address)": EventFragment; - "log_bytes(bytes)": EventFragment; - "log_bytes32(bytes32)": EventFragment; - "log_int(int256)": EventFragment; - "log_named_address(string,address)": EventFragment; - "log_named_bytes(string,bytes)": EventFragment; - "log_named_bytes32(string,bytes32)": EventFragment; - "log_named_decimal_int(string,int256,uint256)": EventFragment; - "log_named_decimal_uint(string,uint256,uint256)": EventFragment; - "log_named_int(string,int256)": EventFragment; - "log_named_string(string,string)": EventFragment; - "log_named_uint(string,uint256)": EventFragment; - "log_string(string)": EventFragment; - "log_uint(uint256)": EventFragment; - "logs(bytes)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "AddCollateral"): EventFragment; - getEvent(nameOrSignatureOrTopic: "CloseCreditAccount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "DecreaseBorrowedAmount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ExecuteOrder"): EventFragment; - getEvent(nameOrSignatureOrTopic: "IncreaseBorrowedAmount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "LiquidateCreditAccount"): EventFragment; - getEvent( - nameOrSignatureOrTopic: "LiquidateExpiredCreditAccount" - ): EventFragment; - getEvent(nameOrSignatureOrTopic: "Mock_BaseRewardPaid"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Mock_BaseStaked"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Mock_BaseWithdrawn"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Mock_Deposited"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Mock_ExtraRewardPaid"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Mock_ExtraStaked"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Mock_ExtraWithdrawn"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Mock_Withdrawn"): EventFragment; - getEvent(nameOrSignatureOrTopic: "MultiCallFinished"): EventFragment; - getEvent(nameOrSignatureOrTopic: "MultiCallStarted"): EventFragment; - getEvent(nameOrSignatureOrTopic: "NewConfigurator"): EventFragment; - getEvent(nameOrSignatureOrTopic: "OpenCreditAccount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TokenDisabled"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TokenEnabled"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TransferAccount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TransferAccountAllowed"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "logs"): EventFragment; -} - -export interface AddCollateralEventObject { - onBehalfOf: string; - token: string; - value: BigNumber; -} -export type AddCollateralEvent = TypedEvent< - [string, string, BigNumber], - AddCollateralEventObject ->; - -export type AddCollateralEventFilter = TypedEventFilter; - -export interface CloseCreditAccountEventObject { - owner: string; - to: string; -} -export type CloseCreditAccountEvent = TypedEvent< - [string, string], - CloseCreditAccountEventObject ->; - -export type CloseCreditAccountEventFilter = - TypedEventFilter; - -export interface DecreaseBorrowedAmountEventObject { - borrower: string; - amount: BigNumber; -} -export type DecreaseBorrowedAmountEvent = TypedEvent< - [string, BigNumber], - DecreaseBorrowedAmountEventObject ->; - -export type DecreaseBorrowedAmountEventFilter = - TypedEventFilter; - -export interface ExecuteOrderEventObject { - borrower: string; - target: string; -} -export type ExecuteOrderEvent = TypedEvent< - [string, string], - ExecuteOrderEventObject ->; - -export type ExecuteOrderEventFilter = TypedEventFilter; - -export interface IncreaseBorrowedAmountEventObject { - borrower: string; - amount: BigNumber; -} -export type IncreaseBorrowedAmountEvent = TypedEvent< - [string, BigNumber], - IncreaseBorrowedAmountEventObject ->; - -export type IncreaseBorrowedAmountEventFilter = - TypedEventFilter; - -export interface LiquidateCreditAccountEventObject { - owner: string; - liquidator: string; - to: string; - remainingFunds: BigNumber; -} -export type LiquidateCreditAccountEvent = TypedEvent< - [string, string, string, BigNumber], - LiquidateCreditAccountEventObject ->; - -export type LiquidateCreditAccountEventFilter = - TypedEventFilter; - -export interface LiquidateExpiredCreditAccountEventObject { - owner: string; - liquidator: string; - to: string; - remainingFunds: BigNumber; -} -export type LiquidateExpiredCreditAccountEvent = TypedEvent< - [string, string, string, BigNumber], - LiquidateExpiredCreditAccountEventObject ->; - -export type LiquidateExpiredCreditAccountEventFilter = - TypedEventFilter; - -export interface Mock_BaseRewardPaidEventObject { - index: BigNumber; - user: string; - reward: BigNumber; -} -export type Mock_BaseRewardPaidEvent = TypedEvent< - [BigNumber, string, BigNumber], - Mock_BaseRewardPaidEventObject ->; - -export type Mock_BaseRewardPaidEventFilter = - TypedEventFilter; - -export interface Mock_BaseStakedEventObject { - index: BigNumber; - user: string; - amount: BigNumber; -} -export type Mock_BaseStakedEvent = TypedEvent< - [BigNumber, string, BigNumber], - Mock_BaseStakedEventObject ->; - -export type Mock_BaseStakedEventFilter = TypedEventFilter; - -export interface Mock_BaseWithdrawnEventObject { - index: BigNumber; - user: string; - amount: BigNumber; -} -export type Mock_BaseWithdrawnEvent = TypedEvent< - [BigNumber, string, BigNumber], - Mock_BaseWithdrawnEventObject ->; - -export type Mock_BaseWithdrawnEventFilter = - TypedEventFilter; - -export interface Mock_DepositedEventObject { - index: BigNumber; - user: string; - poolid: BigNumber; - amount: BigNumber; - _stake: boolean; -} -export type Mock_DepositedEvent = TypedEvent< - [BigNumber, string, BigNumber, BigNumber, boolean], - Mock_DepositedEventObject ->; - -export type Mock_DepositedEventFilter = TypedEventFilter; - -export interface Mock_ExtraRewardPaidEventObject { - index: BigNumber; - user: string; - reward: BigNumber; -} -export type Mock_ExtraRewardPaidEvent = TypedEvent< - [BigNumber, string, BigNumber], - Mock_ExtraRewardPaidEventObject ->; - -export type Mock_ExtraRewardPaidEventFilter = - TypedEventFilter; - -export interface Mock_ExtraStakedEventObject { - index: BigNumber; - user: string; - amount: BigNumber; -} -export type Mock_ExtraStakedEvent = TypedEvent< - [BigNumber, string, BigNumber], - Mock_ExtraStakedEventObject ->; - -export type Mock_ExtraStakedEventFilter = - TypedEventFilter; - -export interface Mock_ExtraWithdrawnEventObject { - index: BigNumber; - user: string; - amount: BigNumber; -} -export type Mock_ExtraWithdrawnEvent = TypedEvent< - [BigNumber, string, BigNumber], - Mock_ExtraWithdrawnEventObject ->; - -export type Mock_ExtraWithdrawnEventFilter = - TypedEventFilter; - -export interface Mock_WithdrawnEventObject { - index: BigNumber; - user: string; - poolid: BigNumber; - amount: BigNumber; -} -export type Mock_WithdrawnEvent = TypedEvent< - [BigNumber, string, BigNumber, BigNumber], - Mock_WithdrawnEventObject ->; - -export type Mock_WithdrawnEventFilter = TypedEventFilter; - -export interface MultiCallFinishedEventObject {} -export type MultiCallFinishedEvent = TypedEvent< - [], - MultiCallFinishedEventObject ->; - -export type MultiCallFinishedEventFilter = - TypedEventFilter; - -export interface MultiCallStartedEventObject { - borrower: string; -} -export type MultiCallStartedEvent = TypedEvent< - [string], - MultiCallStartedEventObject ->; - -export type MultiCallStartedEventFilter = - TypedEventFilter; - -export interface NewConfiguratorEventObject { - newConfigurator: string; -} -export type NewConfiguratorEvent = TypedEvent< - [string], - NewConfiguratorEventObject ->; - -export type NewConfiguratorEventFilter = TypedEventFilter; - -export interface OpenCreditAccountEventObject { - onBehalfOf: string; - creditAccount: string; - borrowAmount: BigNumber; - referralCode: number; -} -export type OpenCreditAccountEvent = TypedEvent< - [string, string, BigNumber, number], - OpenCreditAccountEventObject ->; - -export type OpenCreditAccountEventFilter = - TypedEventFilter; - -export interface TokenDisabledEventObject { - creditAccount: string; - token: string; -} -export type TokenDisabledEvent = TypedEvent< - [string, string], - TokenDisabledEventObject ->; - -export type TokenDisabledEventFilter = TypedEventFilter; - -export interface TokenEnabledEventObject { - creditAccount: string; - token: string; -} -export type TokenEnabledEvent = TypedEvent< - [string, string], - TokenEnabledEventObject ->; - -export type TokenEnabledEventFilter = TypedEventFilter; - -export interface TransferAccountEventObject { - oldOwner: string; - newOwner: string; -} -export type TransferAccountEvent = TypedEvent< - [string, string], - TransferAccountEventObject ->; - -export type TransferAccountEventFilter = TypedEventFilter; - -export interface TransferAccountAllowedEventObject { - from: string; - to: string; - state: boolean; -} -export type TransferAccountAllowedEvent = TypedEvent< - [string, string, boolean], - TransferAccountAllowedEventObject ->; - -export type TransferAccountAllowedEventFilter = - TypedEventFilter; - -export interface logEventObject { - arg0: string; -} -export type logEvent = TypedEvent<[string], logEventObject>; - -export type logEventFilter = TypedEventFilter; - -export interface log_addressEventObject { - arg0: string; -} -export type log_addressEvent = TypedEvent<[string], log_addressEventObject>; - -export type log_addressEventFilter = TypedEventFilter; - -export interface log_bytesEventObject { - arg0: string; -} -export type log_bytesEvent = TypedEvent<[string], log_bytesEventObject>; - -export type log_bytesEventFilter = TypedEventFilter; - -export interface log_bytes32EventObject { - arg0: string; -} -export type log_bytes32Event = TypedEvent<[string], log_bytes32EventObject>; - -export type log_bytes32EventFilter = TypedEventFilter; - -export interface log_intEventObject { - arg0: BigNumber; -} -export type log_intEvent = TypedEvent<[BigNumber], log_intEventObject>; - -export type log_intEventFilter = TypedEventFilter; - -export interface log_named_addressEventObject { - key: string; - val: string; -} -export type log_named_addressEvent = TypedEvent< - [string, string], - log_named_addressEventObject ->; - -export type log_named_addressEventFilter = - TypedEventFilter; - -export interface log_named_bytesEventObject { - key: string; - val: string; -} -export type log_named_bytesEvent = TypedEvent< - [string, string], - log_named_bytesEventObject ->; - -export type log_named_bytesEventFilter = TypedEventFilter; - -export interface log_named_bytes32EventObject { - key: string; - val: string; -} -export type log_named_bytes32Event = TypedEvent< - [string, string], - log_named_bytes32EventObject ->; - -export type log_named_bytes32EventFilter = - TypedEventFilter; - -export interface log_named_decimal_intEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_intEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_intEventObject ->; - -export type log_named_decimal_intEventFilter = - TypedEventFilter; - -export interface log_named_decimal_uintEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_uintEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_uintEventObject ->; - -export type log_named_decimal_uintEventFilter = - TypedEventFilter; - -export interface log_named_intEventObject { - key: string; - val: BigNumber; -} -export type log_named_intEvent = TypedEvent< - [string, BigNumber], - log_named_intEventObject ->; - -export type log_named_intEventFilter = TypedEventFilter; - -export interface log_named_stringEventObject { - key: string; - val: string; -} -export type log_named_stringEvent = TypedEvent< - [string, string], - log_named_stringEventObject ->; - -export type log_named_stringEventFilter = - TypedEventFilter; - -export interface log_named_uintEventObject { - key: string; - val: BigNumber; -} -export type log_named_uintEvent = TypedEvent< - [string, BigNumber], - log_named_uintEventObject ->; - -export type log_named_uintEventFilter = TypedEventFilter; - -export interface log_stringEventObject { - arg0: string; -} -export type log_stringEvent = TypedEvent<[string], log_stringEventObject>; - -export type log_stringEventFilter = TypedEventFilter; - -export interface log_uintEventObject { - arg0: BigNumber; -} -export type log_uintEvent = TypedEvent<[BigNumber], log_uintEventObject>; - -export type log_uintEventFilter = TypedEventFilter; - -export interface logsEventObject { - arg0: string; -} -export type logsEvent = TypedEvent<[string], logsEventObject>; - -export type logsEventFilter = TypedEventFilter; - -export interface ConvexV1AdapterBoosterTest extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: ConvexV1AdapterBoosterTestInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - IS_TEST(overrides?: CallOverrides): Promise<[boolean]>; - - basePoolAdapter(overrides?: CallOverrides): Promise<[string]>; - - basePoolMock(overrides?: CallOverrides): Promise<[string]>; - - boosterAdapter(overrides?: CallOverrides): Promise<[string]>; - - boosterMock(overrides?: CallOverrides): Promise<[string]>; - - cft(overrides?: CallOverrides): Promise<[string]>; - - claimZapAdapter(overrides?: CallOverrides): Promise<[string]>; - - claimZapMock(overrides?: CallOverrides): Promise<[string]>; - - convexLPToken(overrides?: CallOverrides): Promise<[string]>; - - creditConfigurator(overrides?: CallOverrides): Promise<[string]>; - - creditFacade(overrides?: CallOverrides): Promise<[string]>; - - creditManager(overrides?: CallOverrides): Promise<[string]>; - - crv(overrides?: CallOverrides): Promise<[string]>; - - curveLPToken(overrides?: CallOverrides): Promise<[string]>; - - cvx(overrides?: CallOverrides): Promise<[string]>; - - extraPoolMock1(overrides?: CallOverrides): Promise<[string]>; - - extraPoolMock2(overrides?: CallOverrides): Promise<[string]>; - - extraRewardToken1(overrides?: CallOverrides): Promise<[string]>; - - extraRewardToken2(overrides?: CallOverrides): Promise<[string]>; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - feed(overrides?: CallOverrides): Promise<[string]>; - - phantomToken(overrides?: CallOverrides): Promise<[string]>; - - priceOracle(overrides?: CallOverrides): Promise<[string]>; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_B_01_constructor_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_B_02_deposit_without_staking_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_B_03_depositAll_without_staking_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_B_06_withdraw_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_B_07_withdrawAll_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_B_08_getters_are_consistent( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_B_09_updateStakedPhantomTokensMap_access_restricted( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise<[string]>; - }; - - IS_TEST(overrides?: CallOverrides): Promise; - - basePoolAdapter(overrides?: CallOverrides): Promise; - - basePoolMock(overrides?: CallOverrides): Promise; - - boosterAdapter(overrides?: CallOverrides): Promise; - - boosterMock(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - claimZapAdapter(overrides?: CallOverrides): Promise; - - claimZapMock(overrides?: CallOverrides): Promise; - - convexLPToken(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - crv(overrides?: CallOverrides): Promise; - - curveLPToken(overrides?: CallOverrides): Promise; - - cvx(overrides?: CallOverrides): Promise; - - extraPoolMock1(overrides?: CallOverrides): Promise; - - extraPoolMock2(overrides?: CallOverrides): Promise; - - extraRewardToken1(overrides?: CallOverrides): Promise; - - extraRewardToken2(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - feed(overrides?: CallOverrides): Promise; - - phantomToken(overrides?: CallOverrides): Promise; - - priceOracle(overrides?: CallOverrides): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_B_01_constructor_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_B_02_deposit_without_staking_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_B_03_depositAll_without_staking_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_B_06_withdraw_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_B_07_withdrawAll_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_B_08_getters_are_consistent( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_B_09_updateStakedPhantomTokensMap_access_restricted( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - - callStatic: { - IS_TEST(overrides?: CallOverrides): Promise; - - basePoolAdapter(overrides?: CallOverrides): Promise; - - basePoolMock(overrides?: CallOverrides): Promise; - - boosterAdapter(overrides?: CallOverrides): Promise; - - boosterMock(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - claimZapAdapter(overrides?: CallOverrides): Promise; - - claimZapMock(overrides?: CallOverrides): Promise; - - convexLPToken(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - crv(overrides?: CallOverrides): Promise; - - curveLPToken(overrides?: CallOverrides): Promise; - - cvx(overrides?: CallOverrides): Promise; - - extraPoolMock1(overrides?: CallOverrides): Promise; - - extraPoolMock2(overrides?: CallOverrides): Promise; - - extraRewardToken1(overrides?: CallOverrides): Promise; - - extraRewardToken2(overrides?: CallOverrides): Promise; - - failed(overrides?: CallOverrides): Promise; - - feed(overrides?: CallOverrides): Promise; - - phantomToken(overrides?: CallOverrides): Promise; - - priceOracle(overrides?: CallOverrides): Promise; - - setUp(overrides?: CallOverrides): Promise; - - test_ACVX1_B_01_constructor_sets_correct_values( - overrides?: CallOverrides - ): Promise; - - test_ACVX1_B_02_deposit_without_staking_works_correctly( - overrides?: CallOverrides - ): Promise; - - test_ACVX1_B_03_depositAll_without_staking_works_correctly( - overrides?: CallOverrides - ): Promise; - - test_ACVX1_B_06_withdraw_works_correctly( - overrides?: CallOverrides - ): Promise; - - test_ACVX1_B_07_withdrawAll_works_correctly( - overrides?: CallOverrides - ): Promise; - - test_ACVX1_B_08_getters_are_consistent( - overrides?: CallOverrides - ): Promise; - - test_ACVX1_B_09_updateStakedPhantomTokensMap_access_restricted( - overrides?: CallOverrides - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - }; - - filters: { - "AddCollateral(address,address,uint256)"( - onBehalfOf?: string | null, - token?: string | null, - value?: null - ): AddCollateralEventFilter; - AddCollateral( - onBehalfOf?: string | null, - token?: string | null, - value?: null - ): AddCollateralEventFilter; - - "CloseCreditAccount(address,address)"( - owner?: string | null, - to?: string | null - ): CloseCreditAccountEventFilter; - CloseCreditAccount( - owner?: string | null, - to?: string | null - ): CloseCreditAccountEventFilter; - - "DecreaseBorrowedAmount(address,uint256)"( - borrower?: string | null, - amount?: null - ): DecreaseBorrowedAmountEventFilter; - DecreaseBorrowedAmount( - borrower?: string | null, - amount?: null - ): DecreaseBorrowedAmountEventFilter; - - "ExecuteOrder(address,address)"( - borrower?: string | null, - target?: string | null - ): ExecuteOrderEventFilter; - ExecuteOrder( - borrower?: string | null, - target?: string | null - ): ExecuteOrderEventFilter; - - "IncreaseBorrowedAmount(address,uint256)"( - borrower?: string | null, - amount?: null - ): IncreaseBorrowedAmountEventFilter; - IncreaseBorrowedAmount( - borrower?: string | null, - amount?: null - ): IncreaseBorrowedAmountEventFilter; - - "LiquidateCreditAccount(address,address,address,uint256)"( - owner?: string | null, - liquidator?: string | null, - to?: string | null, - remainingFunds?: null - ): LiquidateCreditAccountEventFilter; - LiquidateCreditAccount( - owner?: string | null, - liquidator?: string | null, - to?: string | null, - remainingFunds?: null - ): LiquidateCreditAccountEventFilter; - - "LiquidateExpiredCreditAccount(address,address,address,uint256)"( - owner?: string | null, - liquidator?: string | null, - to?: string | null, - remainingFunds?: null - ): LiquidateExpiredCreditAccountEventFilter; - LiquidateExpiredCreditAccount( - owner?: string | null, - liquidator?: string | null, - to?: string | null, - remainingFunds?: null - ): LiquidateExpiredCreditAccountEventFilter; - - "Mock_BaseRewardPaid(uint256,address,uint256)"( - index?: BigNumberish | null, - user?: string | null, - reward?: null - ): Mock_BaseRewardPaidEventFilter; - Mock_BaseRewardPaid( - index?: BigNumberish | null, - user?: string | null, - reward?: null - ): Mock_BaseRewardPaidEventFilter; - - "Mock_BaseStaked(uint256,address,uint256)"( - index?: BigNumberish | null, - user?: string | null, - amount?: null - ): Mock_BaseStakedEventFilter; - Mock_BaseStaked( - index?: BigNumberish | null, - user?: string | null, - amount?: null - ): Mock_BaseStakedEventFilter; - - "Mock_BaseWithdrawn(uint256,address,uint256)"( - index?: BigNumberish | null, - user?: string | null, - amount?: null - ): Mock_BaseWithdrawnEventFilter; - Mock_BaseWithdrawn( - index?: BigNumberish | null, - user?: string | null, - amount?: null - ): Mock_BaseWithdrawnEventFilter; - - "Mock_Deposited(uint256,address,uint256,uint256,bool)"( - index?: null, - user?: string | null, - poolid?: BigNumberish | null, - amount?: null, - _stake?: null - ): Mock_DepositedEventFilter; - Mock_Deposited( - index?: null, - user?: string | null, - poolid?: BigNumberish | null, - amount?: null, - _stake?: null - ): Mock_DepositedEventFilter; - - "Mock_ExtraRewardPaid(uint256,address,uint256)"( - index?: BigNumberish | null, - user?: string | null, - reward?: null - ): Mock_ExtraRewardPaidEventFilter; - Mock_ExtraRewardPaid( - index?: BigNumberish | null, - user?: string | null, - reward?: null - ): Mock_ExtraRewardPaidEventFilter; - - "Mock_ExtraStaked(uint256,address,uint256)"( - index?: BigNumberish | null, - user?: string | null, - amount?: null - ): Mock_ExtraStakedEventFilter; - Mock_ExtraStaked( - index?: BigNumberish | null, - user?: string | null, - amount?: null - ): Mock_ExtraStakedEventFilter; - - "Mock_ExtraWithdrawn(uint256,address,uint256)"( - index?: BigNumberish | null, - user?: string | null, - amount?: null - ): Mock_ExtraWithdrawnEventFilter; - Mock_ExtraWithdrawn( - index?: BigNumberish | null, - user?: string | null, - amount?: null - ): Mock_ExtraWithdrawnEventFilter; - - "Mock_Withdrawn(uint256,address,uint256,uint256)"( - index?: null, - user?: string | null, - poolid?: BigNumberish | null, - amount?: null - ): Mock_WithdrawnEventFilter; - Mock_Withdrawn( - index?: null, - user?: string | null, - poolid?: BigNumberish | null, - amount?: null - ): Mock_WithdrawnEventFilter; - - "MultiCallFinished()"(): MultiCallFinishedEventFilter; - MultiCallFinished(): MultiCallFinishedEventFilter; - - "MultiCallStarted(address)"( - borrower?: string | null - ): MultiCallStartedEventFilter; - MultiCallStarted(borrower?: string | null): MultiCallStartedEventFilter; - - "NewConfigurator(address)"( - newConfigurator?: string | null - ): NewConfiguratorEventFilter; - NewConfigurator( - newConfigurator?: string | null - ): NewConfiguratorEventFilter; - - "OpenCreditAccount(address,address,uint256,uint16)"( - onBehalfOf?: string | null, - creditAccount?: string | null, - borrowAmount?: null, - referralCode?: null - ): OpenCreditAccountEventFilter; - OpenCreditAccount( - onBehalfOf?: string | null, - creditAccount?: string | null, - borrowAmount?: null, - referralCode?: null - ): OpenCreditAccountEventFilter; - - "TokenDisabled(address,address)"( - creditAccount?: null, - token?: null - ): TokenDisabledEventFilter; - TokenDisabled(creditAccount?: null, token?: null): TokenDisabledEventFilter; - - "TokenEnabled(address,address)"( - creditAccount?: null, - token?: null - ): TokenEnabledEventFilter; - TokenEnabled(creditAccount?: null, token?: null): TokenEnabledEventFilter; - - "TransferAccount(address,address)"( - oldOwner?: string | null, - newOwner?: string | null - ): TransferAccountEventFilter; - TransferAccount( - oldOwner?: string | null, - newOwner?: string | null - ): TransferAccountEventFilter; - - "TransferAccountAllowed(address,address,bool)"( - from?: string | null, - to?: string | null, - state?: null - ): TransferAccountAllowedEventFilter; - TransferAccountAllowed( - from?: string | null, - to?: string | null, - state?: null - ): TransferAccountAllowedEventFilter; - - "log(string)"(arg0?: null): logEventFilter; - log(arg0?: null): logEventFilter; - - "log_address(address)"(arg0?: null): log_addressEventFilter; - log_address(arg0?: null): log_addressEventFilter; - - "log_bytes(bytes)"(arg0?: null): log_bytesEventFilter; - log_bytes(arg0?: null): log_bytesEventFilter; - - "log_bytes32(bytes32)"(arg0?: null): log_bytes32EventFilter; - log_bytes32(arg0?: null): log_bytes32EventFilter; - - "log_int(int256)"(arg0?: null): log_intEventFilter; - log_int(arg0?: null): log_intEventFilter; - - "log_named_address(string,address)"( - key?: null, - val?: null - ): log_named_addressEventFilter; - log_named_address(key?: null, val?: null): log_named_addressEventFilter; - - "log_named_bytes(string,bytes)"( - key?: null, - val?: null - ): log_named_bytesEventFilter; - log_named_bytes(key?: null, val?: null): log_named_bytesEventFilter; - - "log_named_bytes32(string,bytes32)"( - key?: null, - val?: null - ): log_named_bytes32EventFilter; - log_named_bytes32(key?: null, val?: null): log_named_bytes32EventFilter; - - "log_named_decimal_int(string,int256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - log_named_decimal_int( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - - "log_named_decimal_uint(string,uint256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - log_named_decimal_uint( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - - "log_named_int(string,int256)"( - key?: null, - val?: null - ): log_named_intEventFilter; - log_named_int(key?: null, val?: null): log_named_intEventFilter; - - "log_named_string(string,string)"( - key?: null, - val?: null - ): log_named_stringEventFilter; - log_named_string(key?: null, val?: null): log_named_stringEventFilter; - - "log_named_uint(string,uint256)"( - key?: null, - val?: null - ): log_named_uintEventFilter; - log_named_uint(key?: null, val?: null): log_named_uintEventFilter; - - "log_string(string)"(arg0?: null): log_stringEventFilter; - log_string(arg0?: null): log_stringEventFilter; - - "log_uint(uint256)"(arg0?: null): log_uintEventFilter; - log_uint(arg0?: null): log_uintEventFilter; - - "logs(bytes)"(arg0?: null): logsEventFilter; - logs(arg0?: null): logsEventFilter; - }; - - estimateGas: { - IS_TEST(overrides?: CallOverrides): Promise; - - basePoolAdapter(overrides?: CallOverrides): Promise; - - basePoolMock(overrides?: CallOverrides): Promise; - - boosterAdapter(overrides?: CallOverrides): Promise; - - boosterMock(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - claimZapAdapter(overrides?: CallOverrides): Promise; - - claimZapMock(overrides?: CallOverrides): Promise; - - convexLPToken(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - crv(overrides?: CallOverrides): Promise; - - curveLPToken(overrides?: CallOverrides): Promise; - - cvx(overrides?: CallOverrides): Promise; - - extraPoolMock1(overrides?: CallOverrides): Promise; - - extraPoolMock2(overrides?: CallOverrides): Promise; - - extraRewardToken1(overrides?: CallOverrides): Promise; - - extraRewardToken2(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - feed(overrides?: CallOverrides): Promise; - - phantomToken(overrides?: CallOverrides): Promise; - - priceOracle(overrides?: CallOverrides): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_B_01_constructor_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_B_02_deposit_without_staking_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_B_03_depositAll_without_staking_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_B_06_withdraw_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_B_07_withdrawAll_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_B_08_getters_are_consistent( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_B_09_updateStakedPhantomTokensMap_access_restricted( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - IS_TEST(overrides?: CallOverrides): Promise; - - basePoolAdapter(overrides?: CallOverrides): Promise; - - basePoolMock(overrides?: CallOverrides): Promise; - - boosterAdapter(overrides?: CallOverrides): Promise; - - boosterMock(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - claimZapAdapter(overrides?: CallOverrides): Promise; - - claimZapMock(overrides?: CallOverrides): Promise; - - convexLPToken(overrides?: CallOverrides): Promise; - - creditConfigurator( - overrides?: CallOverrides - ): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - crv(overrides?: CallOverrides): Promise; - - curveLPToken(overrides?: CallOverrides): Promise; - - cvx(overrides?: CallOverrides): Promise; - - extraPoolMock1(overrides?: CallOverrides): Promise; - - extraPoolMock2(overrides?: CallOverrides): Promise; - - extraRewardToken1(overrides?: CallOverrides): Promise; - - extraRewardToken2(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - feed(overrides?: CallOverrides): Promise; - - phantomToken(overrides?: CallOverrides): Promise; - - priceOracle(overrides?: CallOverrides): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_B_01_constructor_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_B_02_deposit_without_staking_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_B_03_depositAll_without_staking_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_B_06_withdraw_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_B_07_withdrawAll_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_B_08_getters_are_consistent( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_B_09_updateStakedPhantomTokensMap_access_restricted( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/test/adapters/ConvexV1_Booster.t.sol/index.ts b/src/types/contracts/test/adapters/ConvexV1_Booster.t.sol/index.ts deleted file mode 100644 index c963a753..00000000 --- a/src/types/contracts/test/adapters/ConvexV1_Booster.t.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { ConvexV1AdapterBoosterTest } from "./ConvexV1AdapterBoosterTest"; diff --git a/src/types/contracts/test/adapters/ConvexV1_ClaimZap.t.sol/ConvexV1ClaimZapAdapterTest.ts b/src/types/contracts/test/adapters/ConvexV1_ClaimZap.t.sol/ConvexV1ClaimZapAdapterTest.ts deleted file mode 100644 index 960bd37a..00000000 --- a/src/types/contracts/test/adapters/ConvexV1_ClaimZap.t.sol/ConvexV1ClaimZapAdapterTest.ts +++ /dev/null @@ -1,1551 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface ConvexV1ClaimZapAdapterTestInterface extends utils.Interface { - functions: { - "IS_TEST()": FunctionFragment; - "_setUpZeroExtras()": FunctionFragment; - "basePoolAdapter()": FunctionFragment; - "basePoolMock()": FunctionFragment; - "boosterAdapter()": FunctionFragment; - "boosterMock()": FunctionFragment; - "cft()": FunctionFragment; - "claimZapAdapter()": FunctionFragment; - "claimZapMock()": FunctionFragment; - "convexLPToken()": FunctionFragment; - "creditConfigurator()": FunctionFragment; - "creditFacade()": FunctionFragment; - "creditManager()": FunctionFragment; - "crv()": FunctionFragment; - "curveLPToken()": FunctionFragment; - "cvx()": FunctionFragment; - "extraPoolMock1()": FunctionFragment; - "extraPoolMock2()": FunctionFragment; - "extraRewardToken1()": FunctionFragment; - "extraRewardToken2()": FunctionFragment; - "failed()": FunctionFragment; - "feed()": FunctionFragment; - "phantomToken()": FunctionFragment; - "priceOracle()": FunctionFragment; - "setUp()": FunctionFragment; - "test_ACVX1_Z_01_claimRewards_works_correctly()": FunctionFragment; - "test_ACVX1_Z_02_claimRewards_supports_claiming_from_extra_pools()": FunctionFragment; - "test_ACVX1_Z_03_claimRewards_ignores_options()": FunctionFragment; - "test_ACVX1_Z_04_claimRewards_only_covers_tokens_with_corresponding_contract()": FunctionFragment; - "test_ACVX1_Z_05_claimRewards_does_not_fail_for_no_extras()": FunctionFragment; - "underlying()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "IS_TEST" - | "_setUpZeroExtras" - | "basePoolAdapter" - | "basePoolMock" - | "boosterAdapter" - | "boosterMock" - | "cft" - | "claimZapAdapter" - | "claimZapMock" - | "convexLPToken" - | "creditConfigurator" - | "creditFacade" - | "creditManager" - | "crv" - | "curveLPToken" - | "cvx" - | "extraPoolMock1" - | "extraPoolMock2" - | "extraRewardToken1" - | "extraRewardToken2" - | "failed" - | "feed" - | "phantomToken" - | "priceOracle" - | "setUp" - | "test_ACVX1_Z_01_claimRewards_works_correctly" - | "test_ACVX1_Z_02_claimRewards_supports_claiming_from_extra_pools" - | "test_ACVX1_Z_03_claimRewards_ignores_options" - | "test_ACVX1_Z_04_claimRewards_only_covers_tokens_with_corresponding_contract" - | "test_ACVX1_Z_05_claimRewards_does_not_fail_for_no_extras" - | "underlying" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "IS_TEST", values?: undefined): string; - encodeFunctionData( - functionFragment: "_setUpZeroExtras", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "basePoolAdapter", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "basePoolMock", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "boosterAdapter", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "boosterMock", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "cft", values?: undefined): string; - encodeFunctionData( - functionFragment: "claimZapAdapter", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "claimZapMock", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "convexLPToken", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditConfigurator", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditFacade", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditManager", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "crv", values?: undefined): string; - encodeFunctionData( - functionFragment: "curveLPToken", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "cvx", values?: undefined): string; - encodeFunctionData( - functionFragment: "extraPoolMock1", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "extraPoolMock2", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "extraRewardToken1", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "extraRewardToken2", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "failed", values?: undefined): string; - encodeFunctionData(functionFragment: "feed", values?: undefined): string; - encodeFunctionData( - functionFragment: "phantomToken", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "priceOracle", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "setUp", values?: undefined): string; - encodeFunctionData( - functionFragment: "test_ACVX1_Z_01_claimRewards_works_correctly", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_ACVX1_Z_02_claimRewards_supports_claiming_from_extra_pools", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_ACVX1_Z_03_claimRewards_ignores_options", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_ACVX1_Z_04_claimRewards_only_covers_tokens_with_corresponding_contract", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_ACVX1_Z_05_claimRewards_does_not_fail_for_no_extras", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "underlying", - values?: undefined - ): string; - - decodeFunctionResult(functionFragment: "IS_TEST", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "_setUpZeroExtras", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "basePoolAdapter", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "basePoolMock", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "boosterAdapter", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "boosterMock", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "cft", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "claimZapAdapter", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "claimZapMock", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "convexLPToken", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditConfigurator", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditFacade", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditManager", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "crv", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "curveLPToken", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "cvx", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "extraPoolMock1", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "extraPoolMock2", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "extraRewardToken1", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "extraRewardToken2", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "failed", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "feed", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "phantomToken", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "priceOracle", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "setUp", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "test_ACVX1_Z_01_claimRewards_works_correctly", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_ACVX1_Z_02_claimRewards_supports_claiming_from_extra_pools", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_ACVX1_Z_03_claimRewards_ignores_options", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_ACVX1_Z_04_claimRewards_only_covers_tokens_with_corresponding_contract", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_ACVX1_Z_05_claimRewards_does_not_fail_for_no_extras", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "underlying", data: BytesLike): Result; - - events: { - "AddCollateral(address,address,uint256)": EventFragment; - "CloseCreditAccount(address,address)": EventFragment; - "DecreaseBorrowedAmount(address,uint256)": EventFragment; - "ExecuteOrder(address,address)": EventFragment; - "IncreaseBorrowedAmount(address,uint256)": EventFragment; - "LiquidateCreditAccount(address,address,address,uint256)": EventFragment; - "LiquidateExpiredCreditAccount(address,address,address,uint256)": EventFragment; - "Mock_BaseRewardPaid(uint256,address,uint256)": EventFragment; - "Mock_BaseStaked(uint256,address,uint256)": EventFragment; - "Mock_BaseWithdrawn(uint256,address,uint256)": EventFragment; - "Mock_Deposited(uint256,address,uint256,uint256,bool)": EventFragment; - "Mock_ExtraRewardPaid(uint256,address,uint256)": EventFragment; - "Mock_ExtraStaked(uint256,address,uint256)": EventFragment; - "Mock_ExtraWithdrawn(uint256,address,uint256)": EventFragment; - "Mock_Withdrawn(uint256,address,uint256,uint256)": EventFragment; - "MultiCallFinished()": EventFragment; - "MultiCallStarted(address)": EventFragment; - "NewConfigurator(address)": EventFragment; - "OpenCreditAccount(address,address,uint256,uint16)": EventFragment; - "TokenDisabled(address,address)": EventFragment; - "TokenEnabled(address,address)": EventFragment; - "TransferAccount(address,address)": EventFragment; - "TransferAccountAllowed(address,address,bool)": EventFragment; - "log(string)": EventFragment; - "log_address(address)": EventFragment; - "log_bytes(bytes)": EventFragment; - "log_bytes32(bytes32)": EventFragment; - "log_int(int256)": EventFragment; - "log_named_address(string,address)": EventFragment; - "log_named_bytes(string,bytes)": EventFragment; - "log_named_bytes32(string,bytes32)": EventFragment; - "log_named_decimal_int(string,int256,uint256)": EventFragment; - "log_named_decimal_uint(string,uint256,uint256)": EventFragment; - "log_named_int(string,int256)": EventFragment; - "log_named_string(string,string)": EventFragment; - "log_named_uint(string,uint256)": EventFragment; - "log_string(string)": EventFragment; - "log_uint(uint256)": EventFragment; - "logs(bytes)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "AddCollateral"): EventFragment; - getEvent(nameOrSignatureOrTopic: "CloseCreditAccount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "DecreaseBorrowedAmount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ExecuteOrder"): EventFragment; - getEvent(nameOrSignatureOrTopic: "IncreaseBorrowedAmount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "LiquidateCreditAccount"): EventFragment; - getEvent( - nameOrSignatureOrTopic: "LiquidateExpiredCreditAccount" - ): EventFragment; - getEvent(nameOrSignatureOrTopic: "Mock_BaseRewardPaid"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Mock_BaseStaked"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Mock_BaseWithdrawn"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Mock_Deposited"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Mock_ExtraRewardPaid"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Mock_ExtraStaked"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Mock_ExtraWithdrawn"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Mock_Withdrawn"): EventFragment; - getEvent(nameOrSignatureOrTopic: "MultiCallFinished"): EventFragment; - getEvent(nameOrSignatureOrTopic: "MultiCallStarted"): EventFragment; - getEvent(nameOrSignatureOrTopic: "NewConfigurator"): EventFragment; - getEvent(nameOrSignatureOrTopic: "OpenCreditAccount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TokenDisabled"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TokenEnabled"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TransferAccount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TransferAccountAllowed"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "logs"): EventFragment; -} - -export interface AddCollateralEventObject { - onBehalfOf: string; - token: string; - value: BigNumber; -} -export type AddCollateralEvent = TypedEvent< - [string, string, BigNumber], - AddCollateralEventObject ->; - -export type AddCollateralEventFilter = TypedEventFilter; - -export interface CloseCreditAccountEventObject { - owner: string; - to: string; -} -export type CloseCreditAccountEvent = TypedEvent< - [string, string], - CloseCreditAccountEventObject ->; - -export type CloseCreditAccountEventFilter = - TypedEventFilter; - -export interface DecreaseBorrowedAmountEventObject { - borrower: string; - amount: BigNumber; -} -export type DecreaseBorrowedAmountEvent = TypedEvent< - [string, BigNumber], - DecreaseBorrowedAmountEventObject ->; - -export type DecreaseBorrowedAmountEventFilter = - TypedEventFilter; - -export interface ExecuteOrderEventObject { - borrower: string; - target: string; -} -export type ExecuteOrderEvent = TypedEvent< - [string, string], - ExecuteOrderEventObject ->; - -export type ExecuteOrderEventFilter = TypedEventFilter; - -export interface IncreaseBorrowedAmountEventObject { - borrower: string; - amount: BigNumber; -} -export type IncreaseBorrowedAmountEvent = TypedEvent< - [string, BigNumber], - IncreaseBorrowedAmountEventObject ->; - -export type IncreaseBorrowedAmountEventFilter = - TypedEventFilter; - -export interface LiquidateCreditAccountEventObject { - owner: string; - liquidator: string; - to: string; - remainingFunds: BigNumber; -} -export type LiquidateCreditAccountEvent = TypedEvent< - [string, string, string, BigNumber], - LiquidateCreditAccountEventObject ->; - -export type LiquidateCreditAccountEventFilter = - TypedEventFilter; - -export interface LiquidateExpiredCreditAccountEventObject { - owner: string; - liquidator: string; - to: string; - remainingFunds: BigNumber; -} -export type LiquidateExpiredCreditAccountEvent = TypedEvent< - [string, string, string, BigNumber], - LiquidateExpiredCreditAccountEventObject ->; - -export type LiquidateExpiredCreditAccountEventFilter = - TypedEventFilter; - -export interface Mock_BaseRewardPaidEventObject { - index: BigNumber; - user: string; - reward: BigNumber; -} -export type Mock_BaseRewardPaidEvent = TypedEvent< - [BigNumber, string, BigNumber], - Mock_BaseRewardPaidEventObject ->; - -export type Mock_BaseRewardPaidEventFilter = - TypedEventFilter; - -export interface Mock_BaseStakedEventObject { - index: BigNumber; - user: string; - amount: BigNumber; -} -export type Mock_BaseStakedEvent = TypedEvent< - [BigNumber, string, BigNumber], - Mock_BaseStakedEventObject ->; - -export type Mock_BaseStakedEventFilter = TypedEventFilter; - -export interface Mock_BaseWithdrawnEventObject { - index: BigNumber; - user: string; - amount: BigNumber; -} -export type Mock_BaseWithdrawnEvent = TypedEvent< - [BigNumber, string, BigNumber], - Mock_BaseWithdrawnEventObject ->; - -export type Mock_BaseWithdrawnEventFilter = - TypedEventFilter; - -export interface Mock_DepositedEventObject { - index: BigNumber; - user: string; - poolid: BigNumber; - amount: BigNumber; - _stake: boolean; -} -export type Mock_DepositedEvent = TypedEvent< - [BigNumber, string, BigNumber, BigNumber, boolean], - Mock_DepositedEventObject ->; - -export type Mock_DepositedEventFilter = TypedEventFilter; - -export interface Mock_ExtraRewardPaidEventObject { - index: BigNumber; - user: string; - reward: BigNumber; -} -export type Mock_ExtraRewardPaidEvent = TypedEvent< - [BigNumber, string, BigNumber], - Mock_ExtraRewardPaidEventObject ->; - -export type Mock_ExtraRewardPaidEventFilter = - TypedEventFilter; - -export interface Mock_ExtraStakedEventObject { - index: BigNumber; - user: string; - amount: BigNumber; -} -export type Mock_ExtraStakedEvent = TypedEvent< - [BigNumber, string, BigNumber], - Mock_ExtraStakedEventObject ->; - -export type Mock_ExtraStakedEventFilter = - TypedEventFilter; - -export interface Mock_ExtraWithdrawnEventObject { - index: BigNumber; - user: string; - amount: BigNumber; -} -export type Mock_ExtraWithdrawnEvent = TypedEvent< - [BigNumber, string, BigNumber], - Mock_ExtraWithdrawnEventObject ->; - -export type Mock_ExtraWithdrawnEventFilter = - TypedEventFilter; - -export interface Mock_WithdrawnEventObject { - index: BigNumber; - user: string; - poolid: BigNumber; - amount: BigNumber; -} -export type Mock_WithdrawnEvent = TypedEvent< - [BigNumber, string, BigNumber, BigNumber], - Mock_WithdrawnEventObject ->; - -export type Mock_WithdrawnEventFilter = TypedEventFilter; - -export interface MultiCallFinishedEventObject {} -export type MultiCallFinishedEvent = TypedEvent< - [], - MultiCallFinishedEventObject ->; - -export type MultiCallFinishedEventFilter = - TypedEventFilter; - -export interface MultiCallStartedEventObject { - borrower: string; -} -export type MultiCallStartedEvent = TypedEvent< - [string], - MultiCallStartedEventObject ->; - -export type MultiCallStartedEventFilter = - TypedEventFilter; - -export interface NewConfiguratorEventObject { - newConfigurator: string; -} -export type NewConfiguratorEvent = TypedEvent< - [string], - NewConfiguratorEventObject ->; - -export type NewConfiguratorEventFilter = TypedEventFilter; - -export interface OpenCreditAccountEventObject { - onBehalfOf: string; - creditAccount: string; - borrowAmount: BigNumber; - referralCode: number; -} -export type OpenCreditAccountEvent = TypedEvent< - [string, string, BigNumber, number], - OpenCreditAccountEventObject ->; - -export type OpenCreditAccountEventFilter = - TypedEventFilter; - -export interface TokenDisabledEventObject { - creditAccount: string; - token: string; -} -export type TokenDisabledEvent = TypedEvent< - [string, string], - TokenDisabledEventObject ->; - -export type TokenDisabledEventFilter = TypedEventFilter; - -export interface TokenEnabledEventObject { - creditAccount: string; - token: string; -} -export type TokenEnabledEvent = TypedEvent< - [string, string], - TokenEnabledEventObject ->; - -export type TokenEnabledEventFilter = TypedEventFilter; - -export interface TransferAccountEventObject { - oldOwner: string; - newOwner: string; -} -export type TransferAccountEvent = TypedEvent< - [string, string], - TransferAccountEventObject ->; - -export type TransferAccountEventFilter = TypedEventFilter; - -export interface TransferAccountAllowedEventObject { - from: string; - to: string; - state: boolean; -} -export type TransferAccountAllowedEvent = TypedEvent< - [string, string, boolean], - TransferAccountAllowedEventObject ->; - -export type TransferAccountAllowedEventFilter = - TypedEventFilter; - -export interface logEventObject { - arg0: string; -} -export type logEvent = TypedEvent<[string], logEventObject>; - -export type logEventFilter = TypedEventFilter; - -export interface log_addressEventObject { - arg0: string; -} -export type log_addressEvent = TypedEvent<[string], log_addressEventObject>; - -export type log_addressEventFilter = TypedEventFilter; - -export interface log_bytesEventObject { - arg0: string; -} -export type log_bytesEvent = TypedEvent<[string], log_bytesEventObject>; - -export type log_bytesEventFilter = TypedEventFilter; - -export interface log_bytes32EventObject { - arg0: string; -} -export type log_bytes32Event = TypedEvent<[string], log_bytes32EventObject>; - -export type log_bytes32EventFilter = TypedEventFilter; - -export interface log_intEventObject { - arg0: BigNumber; -} -export type log_intEvent = TypedEvent<[BigNumber], log_intEventObject>; - -export type log_intEventFilter = TypedEventFilter; - -export interface log_named_addressEventObject { - key: string; - val: string; -} -export type log_named_addressEvent = TypedEvent< - [string, string], - log_named_addressEventObject ->; - -export type log_named_addressEventFilter = - TypedEventFilter; - -export interface log_named_bytesEventObject { - key: string; - val: string; -} -export type log_named_bytesEvent = TypedEvent< - [string, string], - log_named_bytesEventObject ->; - -export type log_named_bytesEventFilter = TypedEventFilter; - -export interface log_named_bytes32EventObject { - key: string; - val: string; -} -export type log_named_bytes32Event = TypedEvent< - [string, string], - log_named_bytes32EventObject ->; - -export type log_named_bytes32EventFilter = - TypedEventFilter; - -export interface log_named_decimal_intEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_intEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_intEventObject ->; - -export type log_named_decimal_intEventFilter = - TypedEventFilter; - -export interface log_named_decimal_uintEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_uintEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_uintEventObject ->; - -export type log_named_decimal_uintEventFilter = - TypedEventFilter; - -export interface log_named_intEventObject { - key: string; - val: BigNumber; -} -export type log_named_intEvent = TypedEvent< - [string, BigNumber], - log_named_intEventObject ->; - -export type log_named_intEventFilter = TypedEventFilter; - -export interface log_named_stringEventObject { - key: string; - val: string; -} -export type log_named_stringEvent = TypedEvent< - [string, string], - log_named_stringEventObject ->; - -export type log_named_stringEventFilter = - TypedEventFilter; - -export interface log_named_uintEventObject { - key: string; - val: BigNumber; -} -export type log_named_uintEvent = TypedEvent< - [string, BigNumber], - log_named_uintEventObject ->; - -export type log_named_uintEventFilter = TypedEventFilter; - -export interface log_stringEventObject { - arg0: string; -} -export type log_stringEvent = TypedEvent<[string], log_stringEventObject>; - -export type log_stringEventFilter = TypedEventFilter; - -export interface log_uintEventObject { - arg0: BigNumber; -} -export type log_uintEvent = TypedEvent<[BigNumber], log_uintEventObject>; - -export type log_uintEventFilter = TypedEventFilter; - -export interface logsEventObject { - arg0: string; -} -export type logsEvent = TypedEvent<[string], logsEventObject>; - -export type logsEventFilter = TypedEventFilter; - -export interface ConvexV1ClaimZapAdapterTest extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: ConvexV1ClaimZapAdapterTestInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - IS_TEST(overrides?: CallOverrides): Promise<[boolean]>; - - _setUpZeroExtras( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - basePoolAdapter(overrides?: CallOverrides): Promise<[string]>; - - basePoolMock(overrides?: CallOverrides): Promise<[string]>; - - boosterAdapter(overrides?: CallOverrides): Promise<[string]>; - - boosterMock(overrides?: CallOverrides): Promise<[string]>; - - cft(overrides?: CallOverrides): Promise<[string]>; - - claimZapAdapter(overrides?: CallOverrides): Promise<[string]>; - - claimZapMock(overrides?: CallOverrides): Promise<[string]>; - - convexLPToken(overrides?: CallOverrides): Promise<[string]>; - - creditConfigurator(overrides?: CallOverrides): Promise<[string]>; - - creditFacade(overrides?: CallOverrides): Promise<[string]>; - - creditManager(overrides?: CallOverrides): Promise<[string]>; - - crv(overrides?: CallOverrides): Promise<[string]>; - - curveLPToken(overrides?: CallOverrides): Promise<[string]>; - - cvx(overrides?: CallOverrides): Promise<[string]>; - - extraPoolMock1(overrides?: CallOverrides): Promise<[string]>; - - extraPoolMock2(overrides?: CallOverrides): Promise<[string]>; - - extraRewardToken1(overrides?: CallOverrides): Promise<[string]>; - - extraRewardToken2(overrides?: CallOverrides): Promise<[string]>; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - feed(overrides?: CallOverrides): Promise<[string]>; - - phantomToken(overrides?: CallOverrides): Promise<[string]>; - - priceOracle(overrides?: CallOverrides): Promise<[string]>; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_Z_01_claimRewards_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_Z_02_claimRewards_supports_claiming_from_extra_pools( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_Z_03_claimRewards_ignores_options( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_Z_04_claimRewards_only_covers_tokens_with_corresponding_contract( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_Z_05_claimRewards_does_not_fail_for_no_extras( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise<[string]>; - }; - - IS_TEST(overrides?: CallOverrides): Promise; - - _setUpZeroExtras( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - basePoolAdapter(overrides?: CallOverrides): Promise; - - basePoolMock(overrides?: CallOverrides): Promise; - - boosterAdapter(overrides?: CallOverrides): Promise; - - boosterMock(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - claimZapAdapter(overrides?: CallOverrides): Promise; - - claimZapMock(overrides?: CallOverrides): Promise; - - convexLPToken(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - crv(overrides?: CallOverrides): Promise; - - curveLPToken(overrides?: CallOverrides): Promise; - - cvx(overrides?: CallOverrides): Promise; - - extraPoolMock1(overrides?: CallOverrides): Promise; - - extraPoolMock2(overrides?: CallOverrides): Promise; - - extraRewardToken1(overrides?: CallOverrides): Promise; - - extraRewardToken2(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - feed(overrides?: CallOverrides): Promise; - - phantomToken(overrides?: CallOverrides): Promise; - - priceOracle(overrides?: CallOverrides): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_Z_01_claimRewards_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_Z_02_claimRewards_supports_claiming_from_extra_pools( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_Z_03_claimRewards_ignores_options( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_Z_04_claimRewards_only_covers_tokens_with_corresponding_contract( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_Z_05_claimRewards_does_not_fail_for_no_extras( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - - callStatic: { - IS_TEST(overrides?: CallOverrides): Promise; - - _setUpZeroExtras(overrides?: CallOverrides): Promise; - - basePoolAdapter(overrides?: CallOverrides): Promise; - - basePoolMock(overrides?: CallOverrides): Promise; - - boosterAdapter(overrides?: CallOverrides): Promise; - - boosterMock(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - claimZapAdapter(overrides?: CallOverrides): Promise; - - claimZapMock(overrides?: CallOverrides): Promise; - - convexLPToken(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - crv(overrides?: CallOverrides): Promise; - - curveLPToken(overrides?: CallOverrides): Promise; - - cvx(overrides?: CallOverrides): Promise; - - extraPoolMock1(overrides?: CallOverrides): Promise; - - extraPoolMock2(overrides?: CallOverrides): Promise; - - extraRewardToken1(overrides?: CallOverrides): Promise; - - extraRewardToken2(overrides?: CallOverrides): Promise; - - failed(overrides?: CallOverrides): Promise; - - feed(overrides?: CallOverrides): Promise; - - phantomToken(overrides?: CallOverrides): Promise; - - priceOracle(overrides?: CallOverrides): Promise; - - setUp(overrides?: CallOverrides): Promise; - - test_ACVX1_Z_01_claimRewards_works_correctly( - overrides?: CallOverrides - ): Promise; - - test_ACVX1_Z_02_claimRewards_supports_claiming_from_extra_pools( - overrides?: CallOverrides - ): Promise; - - test_ACVX1_Z_03_claimRewards_ignores_options( - overrides?: CallOverrides - ): Promise; - - test_ACVX1_Z_04_claimRewards_only_covers_tokens_with_corresponding_contract( - overrides?: CallOverrides - ): Promise; - - test_ACVX1_Z_05_claimRewards_does_not_fail_for_no_extras( - overrides?: CallOverrides - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - }; - - filters: { - "AddCollateral(address,address,uint256)"( - onBehalfOf?: string | null, - token?: string | null, - value?: null - ): AddCollateralEventFilter; - AddCollateral( - onBehalfOf?: string | null, - token?: string | null, - value?: null - ): AddCollateralEventFilter; - - "CloseCreditAccount(address,address)"( - owner?: string | null, - to?: string | null - ): CloseCreditAccountEventFilter; - CloseCreditAccount( - owner?: string | null, - to?: string | null - ): CloseCreditAccountEventFilter; - - "DecreaseBorrowedAmount(address,uint256)"( - borrower?: string | null, - amount?: null - ): DecreaseBorrowedAmountEventFilter; - DecreaseBorrowedAmount( - borrower?: string | null, - amount?: null - ): DecreaseBorrowedAmountEventFilter; - - "ExecuteOrder(address,address)"( - borrower?: string | null, - target?: string | null - ): ExecuteOrderEventFilter; - ExecuteOrder( - borrower?: string | null, - target?: string | null - ): ExecuteOrderEventFilter; - - "IncreaseBorrowedAmount(address,uint256)"( - borrower?: string | null, - amount?: null - ): IncreaseBorrowedAmountEventFilter; - IncreaseBorrowedAmount( - borrower?: string | null, - amount?: null - ): IncreaseBorrowedAmountEventFilter; - - "LiquidateCreditAccount(address,address,address,uint256)"( - owner?: string | null, - liquidator?: string | null, - to?: string | null, - remainingFunds?: null - ): LiquidateCreditAccountEventFilter; - LiquidateCreditAccount( - owner?: string | null, - liquidator?: string | null, - to?: string | null, - remainingFunds?: null - ): LiquidateCreditAccountEventFilter; - - "LiquidateExpiredCreditAccount(address,address,address,uint256)"( - owner?: string | null, - liquidator?: string | null, - to?: string | null, - remainingFunds?: null - ): LiquidateExpiredCreditAccountEventFilter; - LiquidateExpiredCreditAccount( - owner?: string | null, - liquidator?: string | null, - to?: string | null, - remainingFunds?: null - ): LiquidateExpiredCreditAccountEventFilter; - - "Mock_BaseRewardPaid(uint256,address,uint256)"( - index?: BigNumberish | null, - user?: string | null, - reward?: null - ): Mock_BaseRewardPaidEventFilter; - Mock_BaseRewardPaid( - index?: BigNumberish | null, - user?: string | null, - reward?: null - ): Mock_BaseRewardPaidEventFilter; - - "Mock_BaseStaked(uint256,address,uint256)"( - index?: BigNumberish | null, - user?: string | null, - amount?: null - ): Mock_BaseStakedEventFilter; - Mock_BaseStaked( - index?: BigNumberish | null, - user?: string | null, - amount?: null - ): Mock_BaseStakedEventFilter; - - "Mock_BaseWithdrawn(uint256,address,uint256)"( - index?: BigNumberish | null, - user?: string | null, - amount?: null - ): Mock_BaseWithdrawnEventFilter; - Mock_BaseWithdrawn( - index?: BigNumberish | null, - user?: string | null, - amount?: null - ): Mock_BaseWithdrawnEventFilter; - - "Mock_Deposited(uint256,address,uint256,uint256,bool)"( - index?: null, - user?: string | null, - poolid?: BigNumberish | null, - amount?: null, - _stake?: null - ): Mock_DepositedEventFilter; - Mock_Deposited( - index?: null, - user?: string | null, - poolid?: BigNumberish | null, - amount?: null, - _stake?: null - ): Mock_DepositedEventFilter; - - "Mock_ExtraRewardPaid(uint256,address,uint256)"( - index?: BigNumberish | null, - user?: string | null, - reward?: null - ): Mock_ExtraRewardPaidEventFilter; - Mock_ExtraRewardPaid( - index?: BigNumberish | null, - user?: string | null, - reward?: null - ): Mock_ExtraRewardPaidEventFilter; - - "Mock_ExtraStaked(uint256,address,uint256)"( - index?: BigNumberish | null, - user?: string | null, - amount?: null - ): Mock_ExtraStakedEventFilter; - Mock_ExtraStaked( - index?: BigNumberish | null, - user?: string | null, - amount?: null - ): Mock_ExtraStakedEventFilter; - - "Mock_ExtraWithdrawn(uint256,address,uint256)"( - index?: BigNumberish | null, - user?: string | null, - amount?: null - ): Mock_ExtraWithdrawnEventFilter; - Mock_ExtraWithdrawn( - index?: BigNumberish | null, - user?: string | null, - amount?: null - ): Mock_ExtraWithdrawnEventFilter; - - "Mock_Withdrawn(uint256,address,uint256,uint256)"( - index?: null, - user?: string | null, - poolid?: BigNumberish | null, - amount?: null - ): Mock_WithdrawnEventFilter; - Mock_Withdrawn( - index?: null, - user?: string | null, - poolid?: BigNumberish | null, - amount?: null - ): Mock_WithdrawnEventFilter; - - "MultiCallFinished()"(): MultiCallFinishedEventFilter; - MultiCallFinished(): MultiCallFinishedEventFilter; - - "MultiCallStarted(address)"( - borrower?: string | null - ): MultiCallStartedEventFilter; - MultiCallStarted(borrower?: string | null): MultiCallStartedEventFilter; - - "NewConfigurator(address)"( - newConfigurator?: string | null - ): NewConfiguratorEventFilter; - NewConfigurator( - newConfigurator?: string | null - ): NewConfiguratorEventFilter; - - "OpenCreditAccount(address,address,uint256,uint16)"( - onBehalfOf?: string | null, - creditAccount?: string | null, - borrowAmount?: null, - referralCode?: null - ): OpenCreditAccountEventFilter; - OpenCreditAccount( - onBehalfOf?: string | null, - creditAccount?: string | null, - borrowAmount?: null, - referralCode?: null - ): OpenCreditAccountEventFilter; - - "TokenDisabled(address,address)"( - creditAccount?: null, - token?: null - ): TokenDisabledEventFilter; - TokenDisabled(creditAccount?: null, token?: null): TokenDisabledEventFilter; - - "TokenEnabled(address,address)"( - creditAccount?: null, - token?: null - ): TokenEnabledEventFilter; - TokenEnabled(creditAccount?: null, token?: null): TokenEnabledEventFilter; - - "TransferAccount(address,address)"( - oldOwner?: string | null, - newOwner?: string | null - ): TransferAccountEventFilter; - TransferAccount( - oldOwner?: string | null, - newOwner?: string | null - ): TransferAccountEventFilter; - - "TransferAccountAllowed(address,address,bool)"( - from?: string | null, - to?: string | null, - state?: null - ): TransferAccountAllowedEventFilter; - TransferAccountAllowed( - from?: string | null, - to?: string | null, - state?: null - ): TransferAccountAllowedEventFilter; - - "log(string)"(arg0?: null): logEventFilter; - log(arg0?: null): logEventFilter; - - "log_address(address)"(arg0?: null): log_addressEventFilter; - log_address(arg0?: null): log_addressEventFilter; - - "log_bytes(bytes)"(arg0?: null): log_bytesEventFilter; - log_bytes(arg0?: null): log_bytesEventFilter; - - "log_bytes32(bytes32)"(arg0?: null): log_bytes32EventFilter; - log_bytes32(arg0?: null): log_bytes32EventFilter; - - "log_int(int256)"(arg0?: null): log_intEventFilter; - log_int(arg0?: null): log_intEventFilter; - - "log_named_address(string,address)"( - key?: null, - val?: null - ): log_named_addressEventFilter; - log_named_address(key?: null, val?: null): log_named_addressEventFilter; - - "log_named_bytes(string,bytes)"( - key?: null, - val?: null - ): log_named_bytesEventFilter; - log_named_bytes(key?: null, val?: null): log_named_bytesEventFilter; - - "log_named_bytes32(string,bytes32)"( - key?: null, - val?: null - ): log_named_bytes32EventFilter; - log_named_bytes32(key?: null, val?: null): log_named_bytes32EventFilter; - - "log_named_decimal_int(string,int256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - log_named_decimal_int( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - - "log_named_decimal_uint(string,uint256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - log_named_decimal_uint( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - - "log_named_int(string,int256)"( - key?: null, - val?: null - ): log_named_intEventFilter; - log_named_int(key?: null, val?: null): log_named_intEventFilter; - - "log_named_string(string,string)"( - key?: null, - val?: null - ): log_named_stringEventFilter; - log_named_string(key?: null, val?: null): log_named_stringEventFilter; - - "log_named_uint(string,uint256)"( - key?: null, - val?: null - ): log_named_uintEventFilter; - log_named_uint(key?: null, val?: null): log_named_uintEventFilter; - - "log_string(string)"(arg0?: null): log_stringEventFilter; - log_string(arg0?: null): log_stringEventFilter; - - "log_uint(uint256)"(arg0?: null): log_uintEventFilter; - log_uint(arg0?: null): log_uintEventFilter; - - "logs(bytes)"(arg0?: null): logsEventFilter; - logs(arg0?: null): logsEventFilter; - }; - - estimateGas: { - IS_TEST(overrides?: CallOverrides): Promise; - - _setUpZeroExtras( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - basePoolAdapter(overrides?: CallOverrides): Promise; - - basePoolMock(overrides?: CallOverrides): Promise; - - boosterAdapter(overrides?: CallOverrides): Promise; - - boosterMock(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - claimZapAdapter(overrides?: CallOverrides): Promise; - - claimZapMock(overrides?: CallOverrides): Promise; - - convexLPToken(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - crv(overrides?: CallOverrides): Promise; - - curveLPToken(overrides?: CallOverrides): Promise; - - cvx(overrides?: CallOverrides): Promise; - - extraPoolMock1(overrides?: CallOverrides): Promise; - - extraPoolMock2(overrides?: CallOverrides): Promise; - - extraRewardToken1(overrides?: CallOverrides): Promise; - - extraRewardToken2(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - feed(overrides?: CallOverrides): Promise; - - phantomToken(overrides?: CallOverrides): Promise; - - priceOracle(overrides?: CallOverrides): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_Z_01_claimRewards_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_Z_02_claimRewards_supports_claiming_from_extra_pools( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_Z_03_claimRewards_ignores_options( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_Z_04_claimRewards_only_covers_tokens_with_corresponding_contract( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_Z_05_claimRewards_does_not_fail_for_no_extras( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - IS_TEST(overrides?: CallOverrides): Promise; - - _setUpZeroExtras( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - basePoolAdapter(overrides?: CallOverrides): Promise; - - basePoolMock(overrides?: CallOverrides): Promise; - - boosterAdapter(overrides?: CallOverrides): Promise; - - boosterMock(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - claimZapAdapter(overrides?: CallOverrides): Promise; - - claimZapMock(overrides?: CallOverrides): Promise; - - convexLPToken(overrides?: CallOverrides): Promise; - - creditConfigurator( - overrides?: CallOverrides - ): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - crv(overrides?: CallOverrides): Promise; - - curveLPToken(overrides?: CallOverrides): Promise; - - cvx(overrides?: CallOverrides): Promise; - - extraPoolMock1(overrides?: CallOverrides): Promise; - - extraPoolMock2(overrides?: CallOverrides): Promise; - - extraRewardToken1(overrides?: CallOverrides): Promise; - - extraRewardToken2(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - feed(overrides?: CallOverrides): Promise; - - phantomToken(overrides?: CallOverrides): Promise; - - priceOracle(overrides?: CallOverrides): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_Z_01_claimRewards_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_Z_02_claimRewards_supports_claiming_from_extra_pools( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_Z_03_claimRewards_ignores_options( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_Z_04_claimRewards_only_covers_tokens_with_corresponding_contract( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACVX1_Z_05_claimRewards_does_not_fail_for_no_extras( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/test/adapters/ConvexV1_ClaimZap.t.sol/index.ts b/src/types/contracts/test/adapters/ConvexV1_ClaimZap.t.sol/index.ts deleted file mode 100644 index bc4889c4..00000000 --- a/src/types/contracts/test/adapters/ConvexV1_ClaimZap.t.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { ConvexV1ClaimZapAdapterTest } from "./ConvexV1ClaimZapAdapterTest"; diff --git a/src/types/contracts/test/adapters/CurveV1AdapterBaseMetapoolTest.t.sol/CurveV1AdapterBaseMetaPoolTest.ts b/src/types/contracts/test/adapters/CurveV1AdapterBaseMetapoolTest.t.sol/CurveV1AdapterBaseMetaPoolTest.ts deleted file mode 100644 index bb57ecb3..00000000 --- a/src/types/contracts/test/adapters/CurveV1AdapterBaseMetapoolTest.t.sol/CurveV1AdapterBaseMetaPoolTest.ts +++ /dev/null @@ -1,1021 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface CurveV1AdapterBaseMetaPoolTestInterface - extends utils.Interface { - functions: { - "IS_TEST()": FunctionFragment; - "adapter()": FunctionFragment; - "cft()": FunctionFragment; - "creditConfigurator()": FunctionFragment; - "creditFacade()": FunctionFragment; - "creditManager()": FunctionFragment; - "curveV1Mock()": FunctionFragment; - "failed()": FunctionFragment; - "setUp()": FunctionFragment; - "test_ACV1_M_01_constructor_sets_correct_values()": FunctionFragment; - "test_ACV1_M_02_exchange_underlying_works_correctly()": FunctionFragment; - "test_ACV1_M_03_exchange_all_underlying_works_correctly()": FunctionFragment; - "test_ACV1_M_04_multicall_exchange_underlying_works_correctly()": FunctionFragment; - "test_ACV1_M_05_multicall_exchange_all_underlying_works_correctly()": FunctionFragment; - "underlying()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "IS_TEST" - | "adapter" - | "cft" - | "creditConfigurator" - | "creditFacade" - | "creditManager" - | "curveV1Mock" - | "failed" - | "setUp" - | "test_ACV1_M_01_constructor_sets_correct_values" - | "test_ACV1_M_02_exchange_underlying_works_correctly" - | "test_ACV1_M_03_exchange_all_underlying_works_correctly" - | "test_ACV1_M_04_multicall_exchange_underlying_works_correctly" - | "test_ACV1_M_05_multicall_exchange_all_underlying_works_correctly" - | "underlying" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "IS_TEST", values?: undefined): string; - encodeFunctionData(functionFragment: "adapter", values?: undefined): string; - encodeFunctionData(functionFragment: "cft", values?: undefined): string; - encodeFunctionData( - functionFragment: "creditConfigurator", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditFacade", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditManager", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "curveV1Mock", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "failed", values?: undefined): string; - encodeFunctionData(functionFragment: "setUp", values?: undefined): string; - encodeFunctionData( - functionFragment: "test_ACV1_M_01_constructor_sets_correct_values", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_ACV1_M_02_exchange_underlying_works_correctly", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_ACV1_M_03_exchange_all_underlying_works_correctly", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_ACV1_M_04_multicall_exchange_underlying_works_correctly", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_ACV1_M_05_multicall_exchange_all_underlying_works_correctly", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "underlying", - values?: undefined - ): string; - - decodeFunctionResult(functionFragment: "IS_TEST", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "adapter", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "cft", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "creditConfigurator", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditFacade", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditManager", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "curveV1Mock", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "failed", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "setUp", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "test_ACV1_M_01_constructor_sets_correct_values", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_ACV1_M_02_exchange_underlying_works_correctly", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_ACV1_M_03_exchange_all_underlying_works_correctly", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_ACV1_M_04_multicall_exchange_underlying_works_correctly", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_ACV1_M_05_multicall_exchange_all_underlying_works_correctly", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "underlying", data: BytesLike): Result; - - events: { - "AddCollateral(address,address,uint256)": EventFragment; - "CloseCreditAccount(address,address)": EventFragment; - "DecreaseBorrowedAmount(address,uint256)": EventFragment; - "ExecuteOrder(address,address)": EventFragment; - "IncreaseBorrowedAmount(address,uint256)": EventFragment; - "LiquidateCreditAccount(address,address,address,uint256)": EventFragment; - "LiquidateExpiredCreditAccount(address,address,address,uint256)": EventFragment; - "MultiCallFinished()": EventFragment; - "MultiCallStarted(address)": EventFragment; - "NewConfigurator(address)": EventFragment; - "OpenCreditAccount(address,address,uint256,uint16)": EventFragment; - "TokenDisabled(address,address)": EventFragment; - "TokenEnabled(address,address)": EventFragment; - "TransferAccount(address,address)": EventFragment; - "TransferAccountAllowed(address,address,bool)": EventFragment; - "log(string)": EventFragment; - "log_address(address)": EventFragment; - "log_bytes(bytes)": EventFragment; - "log_bytes32(bytes32)": EventFragment; - "log_int(int256)": EventFragment; - "log_named_address(string,address)": EventFragment; - "log_named_bytes(string,bytes)": EventFragment; - "log_named_bytes32(string,bytes32)": EventFragment; - "log_named_decimal_int(string,int256,uint256)": EventFragment; - "log_named_decimal_uint(string,uint256,uint256)": EventFragment; - "log_named_int(string,int256)": EventFragment; - "log_named_string(string,string)": EventFragment; - "log_named_uint(string,uint256)": EventFragment; - "log_string(string)": EventFragment; - "log_uint(uint256)": EventFragment; - "logs(bytes)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "AddCollateral"): EventFragment; - getEvent(nameOrSignatureOrTopic: "CloseCreditAccount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "DecreaseBorrowedAmount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ExecuteOrder"): EventFragment; - getEvent(nameOrSignatureOrTopic: "IncreaseBorrowedAmount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "LiquidateCreditAccount"): EventFragment; - getEvent( - nameOrSignatureOrTopic: "LiquidateExpiredCreditAccount" - ): EventFragment; - getEvent(nameOrSignatureOrTopic: "MultiCallFinished"): EventFragment; - getEvent(nameOrSignatureOrTopic: "MultiCallStarted"): EventFragment; - getEvent(nameOrSignatureOrTopic: "NewConfigurator"): EventFragment; - getEvent(nameOrSignatureOrTopic: "OpenCreditAccount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TokenDisabled"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TokenEnabled"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TransferAccount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TransferAccountAllowed"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "logs"): EventFragment; -} - -export interface AddCollateralEventObject { - onBehalfOf: string; - token: string; - value: BigNumber; -} -export type AddCollateralEvent = TypedEvent< - [string, string, BigNumber], - AddCollateralEventObject ->; - -export type AddCollateralEventFilter = TypedEventFilter; - -export interface CloseCreditAccountEventObject { - owner: string; - to: string; -} -export type CloseCreditAccountEvent = TypedEvent< - [string, string], - CloseCreditAccountEventObject ->; - -export type CloseCreditAccountEventFilter = - TypedEventFilter; - -export interface DecreaseBorrowedAmountEventObject { - borrower: string; - amount: BigNumber; -} -export type DecreaseBorrowedAmountEvent = TypedEvent< - [string, BigNumber], - DecreaseBorrowedAmountEventObject ->; - -export type DecreaseBorrowedAmountEventFilter = - TypedEventFilter; - -export interface ExecuteOrderEventObject { - borrower: string; - target: string; -} -export type ExecuteOrderEvent = TypedEvent< - [string, string], - ExecuteOrderEventObject ->; - -export type ExecuteOrderEventFilter = TypedEventFilter; - -export interface IncreaseBorrowedAmountEventObject { - borrower: string; - amount: BigNumber; -} -export type IncreaseBorrowedAmountEvent = TypedEvent< - [string, BigNumber], - IncreaseBorrowedAmountEventObject ->; - -export type IncreaseBorrowedAmountEventFilter = - TypedEventFilter; - -export interface LiquidateCreditAccountEventObject { - owner: string; - liquidator: string; - to: string; - remainingFunds: BigNumber; -} -export type LiquidateCreditAccountEvent = TypedEvent< - [string, string, string, BigNumber], - LiquidateCreditAccountEventObject ->; - -export type LiquidateCreditAccountEventFilter = - TypedEventFilter; - -export interface LiquidateExpiredCreditAccountEventObject { - owner: string; - liquidator: string; - to: string; - remainingFunds: BigNumber; -} -export type LiquidateExpiredCreditAccountEvent = TypedEvent< - [string, string, string, BigNumber], - LiquidateExpiredCreditAccountEventObject ->; - -export type LiquidateExpiredCreditAccountEventFilter = - TypedEventFilter; - -export interface MultiCallFinishedEventObject {} -export type MultiCallFinishedEvent = TypedEvent< - [], - MultiCallFinishedEventObject ->; - -export type MultiCallFinishedEventFilter = - TypedEventFilter; - -export interface MultiCallStartedEventObject { - borrower: string; -} -export type MultiCallStartedEvent = TypedEvent< - [string], - MultiCallStartedEventObject ->; - -export type MultiCallStartedEventFilter = - TypedEventFilter; - -export interface NewConfiguratorEventObject { - newConfigurator: string; -} -export type NewConfiguratorEvent = TypedEvent< - [string], - NewConfiguratorEventObject ->; - -export type NewConfiguratorEventFilter = TypedEventFilter; - -export interface OpenCreditAccountEventObject { - onBehalfOf: string; - creditAccount: string; - borrowAmount: BigNumber; - referralCode: number; -} -export type OpenCreditAccountEvent = TypedEvent< - [string, string, BigNumber, number], - OpenCreditAccountEventObject ->; - -export type OpenCreditAccountEventFilter = - TypedEventFilter; - -export interface TokenDisabledEventObject { - creditAccount: string; - token: string; -} -export type TokenDisabledEvent = TypedEvent< - [string, string], - TokenDisabledEventObject ->; - -export type TokenDisabledEventFilter = TypedEventFilter; - -export interface TokenEnabledEventObject { - creditAccount: string; - token: string; -} -export type TokenEnabledEvent = TypedEvent< - [string, string], - TokenEnabledEventObject ->; - -export type TokenEnabledEventFilter = TypedEventFilter; - -export interface TransferAccountEventObject { - oldOwner: string; - newOwner: string; -} -export type TransferAccountEvent = TypedEvent< - [string, string], - TransferAccountEventObject ->; - -export type TransferAccountEventFilter = TypedEventFilter; - -export interface TransferAccountAllowedEventObject { - from: string; - to: string; - state: boolean; -} -export type TransferAccountAllowedEvent = TypedEvent< - [string, string, boolean], - TransferAccountAllowedEventObject ->; - -export type TransferAccountAllowedEventFilter = - TypedEventFilter; - -export interface logEventObject { - arg0: string; -} -export type logEvent = TypedEvent<[string], logEventObject>; - -export type logEventFilter = TypedEventFilter; - -export interface log_addressEventObject { - arg0: string; -} -export type log_addressEvent = TypedEvent<[string], log_addressEventObject>; - -export type log_addressEventFilter = TypedEventFilter; - -export interface log_bytesEventObject { - arg0: string; -} -export type log_bytesEvent = TypedEvent<[string], log_bytesEventObject>; - -export type log_bytesEventFilter = TypedEventFilter; - -export interface log_bytes32EventObject { - arg0: string; -} -export type log_bytes32Event = TypedEvent<[string], log_bytes32EventObject>; - -export type log_bytes32EventFilter = TypedEventFilter; - -export interface log_intEventObject { - arg0: BigNumber; -} -export type log_intEvent = TypedEvent<[BigNumber], log_intEventObject>; - -export type log_intEventFilter = TypedEventFilter; - -export interface log_named_addressEventObject { - key: string; - val: string; -} -export type log_named_addressEvent = TypedEvent< - [string, string], - log_named_addressEventObject ->; - -export type log_named_addressEventFilter = - TypedEventFilter; - -export interface log_named_bytesEventObject { - key: string; - val: string; -} -export type log_named_bytesEvent = TypedEvent< - [string, string], - log_named_bytesEventObject ->; - -export type log_named_bytesEventFilter = TypedEventFilter; - -export interface log_named_bytes32EventObject { - key: string; - val: string; -} -export type log_named_bytes32Event = TypedEvent< - [string, string], - log_named_bytes32EventObject ->; - -export type log_named_bytes32EventFilter = - TypedEventFilter; - -export interface log_named_decimal_intEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_intEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_intEventObject ->; - -export type log_named_decimal_intEventFilter = - TypedEventFilter; - -export interface log_named_decimal_uintEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_uintEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_uintEventObject ->; - -export type log_named_decimal_uintEventFilter = - TypedEventFilter; - -export interface log_named_intEventObject { - key: string; - val: BigNumber; -} -export type log_named_intEvent = TypedEvent< - [string, BigNumber], - log_named_intEventObject ->; - -export type log_named_intEventFilter = TypedEventFilter; - -export interface log_named_stringEventObject { - key: string; - val: string; -} -export type log_named_stringEvent = TypedEvent< - [string, string], - log_named_stringEventObject ->; - -export type log_named_stringEventFilter = - TypedEventFilter; - -export interface log_named_uintEventObject { - key: string; - val: BigNumber; -} -export type log_named_uintEvent = TypedEvent< - [string, BigNumber], - log_named_uintEventObject ->; - -export type log_named_uintEventFilter = TypedEventFilter; - -export interface log_stringEventObject { - arg0: string; -} -export type log_stringEvent = TypedEvent<[string], log_stringEventObject>; - -export type log_stringEventFilter = TypedEventFilter; - -export interface log_uintEventObject { - arg0: BigNumber; -} -export type log_uintEvent = TypedEvent<[BigNumber], log_uintEventObject>; - -export type log_uintEventFilter = TypedEventFilter; - -export interface logsEventObject { - arg0: string; -} -export type logsEvent = TypedEvent<[string], logsEventObject>; - -export type logsEventFilter = TypedEventFilter; - -export interface CurveV1AdapterBaseMetaPoolTest extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: CurveV1AdapterBaseMetaPoolTestInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - IS_TEST(overrides?: CallOverrides): Promise<[boolean]>; - - adapter(overrides?: CallOverrides): Promise<[string]>; - - cft(overrides?: CallOverrides): Promise<[string]>; - - creditConfigurator(overrides?: CallOverrides): Promise<[string]>; - - creditFacade(overrides?: CallOverrides): Promise<[string]>; - - creditManager(overrides?: CallOverrides): Promise<[string]>; - - curveV1Mock(overrides?: CallOverrides): Promise<[string]>; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_M_01_constructor_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_M_02_exchange_underlying_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_M_03_exchange_all_underlying_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_M_04_multicall_exchange_underlying_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_M_05_multicall_exchange_all_underlying_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise<[string]>; - }; - - IS_TEST(overrides?: CallOverrides): Promise; - - adapter(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - curveV1Mock(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_M_01_constructor_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_M_02_exchange_underlying_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_M_03_exchange_all_underlying_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_M_04_multicall_exchange_underlying_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_M_05_multicall_exchange_all_underlying_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - - callStatic: { - IS_TEST(overrides?: CallOverrides): Promise; - - adapter(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - curveV1Mock(overrides?: CallOverrides): Promise; - - failed(overrides?: CallOverrides): Promise; - - setUp(overrides?: CallOverrides): Promise; - - test_ACV1_M_01_constructor_sets_correct_values( - overrides?: CallOverrides - ): Promise; - - test_ACV1_M_02_exchange_underlying_works_correctly( - overrides?: CallOverrides - ): Promise; - - test_ACV1_M_03_exchange_all_underlying_works_correctly( - overrides?: CallOverrides - ): Promise; - - test_ACV1_M_04_multicall_exchange_underlying_works_correctly( - overrides?: CallOverrides - ): Promise; - - test_ACV1_M_05_multicall_exchange_all_underlying_works_correctly( - overrides?: CallOverrides - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - }; - - filters: { - "AddCollateral(address,address,uint256)"( - onBehalfOf?: string | null, - token?: string | null, - value?: null - ): AddCollateralEventFilter; - AddCollateral( - onBehalfOf?: string | null, - token?: string | null, - value?: null - ): AddCollateralEventFilter; - - "CloseCreditAccount(address,address)"( - owner?: string | null, - to?: string | null - ): CloseCreditAccountEventFilter; - CloseCreditAccount( - owner?: string | null, - to?: string | null - ): CloseCreditAccountEventFilter; - - "DecreaseBorrowedAmount(address,uint256)"( - borrower?: string | null, - amount?: null - ): DecreaseBorrowedAmountEventFilter; - DecreaseBorrowedAmount( - borrower?: string | null, - amount?: null - ): DecreaseBorrowedAmountEventFilter; - - "ExecuteOrder(address,address)"( - borrower?: string | null, - target?: string | null - ): ExecuteOrderEventFilter; - ExecuteOrder( - borrower?: string | null, - target?: string | null - ): ExecuteOrderEventFilter; - - "IncreaseBorrowedAmount(address,uint256)"( - borrower?: string | null, - amount?: null - ): IncreaseBorrowedAmountEventFilter; - IncreaseBorrowedAmount( - borrower?: string | null, - amount?: null - ): IncreaseBorrowedAmountEventFilter; - - "LiquidateCreditAccount(address,address,address,uint256)"( - owner?: string | null, - liquidator?: string | null, - to?: string | null, - remainingFunds?: null - ): LiquidateCreditAccountEventFilter; - LiquidateCreditAccount( - owner?: string | null, - liquidator?: string | null, - to?: string | null, - remainingFunds?: null - ): LiquidateCreditAccountEventFilter; - - "LiquidateExpiredCreditAccount(address,address,address,uint256)"( - owner?: string | null, - liquidator?: string | null, - to?: string | null, - remainingFunds?: null - ): LiquidateExpiredCreditAccountEventFilter; - LiquidateExpiredCreditAccount( - owner?: string | null, - liquidator?: string | null, - to?: string | null, - remainingFunds?: null - ): LiquidateExpiredCreditAccountEventFilter; - - "MultiCallFinished()"(): MultiCallFinishedEventFilter; - MultiCallFinished(): MultiCallFinishedEventFilter; - - "MultiCallStarted(address)"( - borrower?: string | null - ): MultiCallStartedEventFilter; - MultiCallStarted(borrower?: string | null): MultiCallStartedEventFilter; - - "NewConfigurator(address)"( - newConfigurator?: string | null - ): NewConfiguratorEventFilter; - NewConfigurator( - newConfigurator?: string | null - ): NewConfiguratorEventFilter; - - "OpenCreditAccount(address,address,uint256,uint16)"( - onBehalfOf?: string | null, - creditAccount?: string | null, - borrowAmount?: null, - referralCode?: null - ): OpenCreditAccountEventFilter; - OpenCreditAccount( - onBehalfOf?: string | null, - creditAccount?: string | null, - borrowAmount?: null, - referralCode?: null - ): OpenCreditAccountEventFilter; - - "TokenDisabled(address,address)"( - creditAccount?: null, - token?: null - ): TokenDisabledEventFilter; - TokenDisabled(creditAccount?: null, token?: null): TokenDisabledEventFilter; - - "TokenEnabled(address,address)"( - creditAccount?: null, - token?: null - ): TokenEnabledEventFilter; - TokenEnabled(creditAccount?: null, token?: null): TokenEnabledEventFilter; - - "TransferAccount(address,address)"( - oldOwner?: string | null, - newOwner?: string | null - ): TransferAccountEventFilter; - TransferAccount( - oldOwner?: string | null, - newOwner?: string | null - ): TransferAccountEventFilter; - - "TransferAccountAllowed(address,address,bool)"( - from?: string | null, - to?: string | null, - state?: null - ): TransferAccountAllowedEventFilter; - TransferAccountAllowed( - from?: string | null, - to?: string | null, - state?: null - ): TransferAccountAllowedEventFilter; - - "log(string)"(arg0?: null): logEventFilter; - log(arg0?: null): logEventFilter; - - "log_address(address)"(arg0?: null): log_addressEventFilter; - log_address(arg0?: null): log_addressEventFilter; - - "log_bytes(bytes)"(arg0?: null): log_bytesEventFilter; - log_bytes(arg0?: null): log_bytesEventFilter; - - "log_bytes32(bytes32)"(arg0?: null): log_bytes32EventFilter; - log_bytes32(arg0?: null): log_bytes32EventFilter; - - "log_int(int256)"(arg0?: null): log_intEventFilter; - log_int(arg0?: null): log_intEventFilter; - - "log_named_address(string,address)"( - key?: null, - val?: null - ): log_named_addressEventFilter; - log_named_address(key?: null, val?: null): log_named_addressEventFilter; - - "log_named_bytes(string,bytes)"( - key?: null, - val?: null - ): log_named_bytesEventFilter; - log_named_bytes(key?: null, val?: null): log_named_bytesEventFilter; - - "log_named_bytes32(string,bytes32)"( - key?: null, - val?: null - ): log_named_bytes32EventFilter; - log_named_bytes32(key?: null, val?: null): log_named_bytes32EventFilter; - - "log_named_decimal_int(string,int256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - log_named_decimal_int( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - - "log_named_decimal_uint(string,uint256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - log_named_decimal_uint( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - - "log_named_int(string,int256)"( - key?: null, - val?: null - ): log_named_intEventFilter; - log_named_int(key?: null, val?: null): log_named_intEventFilter; - - "log_named_string(string,string)"( - key?: null, - val?: null - ): log_named_stringEventFilter; - log_named_string(key?: null, val?: null): log_named_stringEventFilter; - - "log_named_uint(string,uint256)"( - key?: null, - val?: null - ): log_named_uintEventFilter; - log_named_uint(key?: null, val?: null): log_named_uintEventFilter; - - "log_string(string)"(arg0?: null): log_stringEventFilter; - log_string(arg0?: null): log_stringEventFilter; - - "log_uint(uint256)"(arg0?: null): log_uintEventFilter; - log_uint(arg0?: null): log_uintEventFilter; - - "logs(bytes)"(arg0?: null): logsEventFilter; - logs(arg0?: null): logsEventFilter; - }; - - estimateGas: { - IS_TEST(overrides?: CallOverrides): Promise; - - adapter(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - curveV1Mock(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_M_01_constructor_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_M_02_exchange_underlying_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_M_03_exchange_all_underlying_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_M_04_multicall_exchange_underlying_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_M_05_multicall_exchange_all_underlying_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - IS_TEST(overrides?: CallOverrides): Promise; - - adapter(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator( - overrides?: CallOverrides - ): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - curveV1Mock(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_M_01_constructor_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_M_02_exchange_underlying_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_M_03_exchange_all_underlying_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_M_04_multicall_exchange_underlying_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_M_05_multicall_exchange_all_underlying_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/test/adapters/CurveV1AdapterBaseMetapoolTest.t.sol/index.ts b/src/types/contracts/test/adapters/CurveV1AdapterBaseMetapoolTest.t.sol/index.ts deleted file mode 100644 index 4652669c..00000000 --- a/src/types/contracts/test/adapters/CurveV1AdapterBaseMetapoolTest.t.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { CurveV1AdapterBaseMetaPoolTest } from "./CurveV1AdapterBaseMetaPoolTest"; diff --git a/src/types/contracts/test/adapters/CurveV1AdapterBaseTest.t.sol/CurveV1AdapterBaseTest.ts b/src/types/contracts/test/adapters/CurveV1AdapterBaseTest.t.sol/CurveV1AdapterBaseTest.ts deleted file mode 100644 index b65448ef..00000000 --- a/src/types/contracts/test/adapters/CurveV1AdapterBaseTest.t.sol/CurveV1AdapterBaseTest.ts +++ /dev/null @@ -1,1325 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface CurveV1AdapterBaseTestInterface extends utils.Interface { - functions: { - "IS_TEST()": FunctionFragment; - "_setUp(uint256)": FunctionFragment; - "adapter()": FunctionFragment; - "cft()": FunctionFragment; - "creditConfigurator()": FunctionFragment; - "creditFacade()": FunctionFragment; - "creditManager()": FunctionFragment; - "curveV1Mock()": FunctionFragment; - "failed()": FunctionFragment; - "setUp()": FunctionFragment; - "test_ACV1_01_constructor_reverts_for_zero_addresses_and_non_allowed_tokens()": FunctionFragment; - "test_ACV1_02_constructor_sets_correct_values()": FunctionFragment; - "test_ACV1_03_swap_reverts_if_uses_has_no_account()": FunctionFragment; - "test_ACV1_04_exchange_works_for_user_as_expected()": FunctionFragment; - "test_ACV1_05_exchnage_all_works_for_user_as_expected()": FunctionFragment; - "test_ACV1_06_exchange_underlying_works_for_user_as_expected()": FunctionFragment; - "test_ACV1_07_exchange_all_underlying_works_for_user_as_expected()": FunctionFragment; - "test_ACV1_08_add_all_liquidity_one_coin_works_for_user_as_expected()": FunctionFragment; - "test_ACV1_09_remove_liquidity_one_coin_works_correctly()": FunctionFragment; - "test_ACV1_10_remove_all_liquidity_one_coin_works_correctly()": FunctionFragment; - "test_ACV1_11_get_dy_and_get_dy_underlying_are_consistent(uint256)": FunctionFragment; - "test_ACV1_12_get_virtual_price_is_consistent()": FunctionFragment; - "test_ACV1_13_getters_revert_for_indices_gt_nCoins()": FunctionFragment; - "test_ACV1_14_getter_are_consistent()": FunctionFragment; - "underlying()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "IS_TEST" - | "_setUp" - | "adapter" - | "cft" - | "creditConfigurator" - | "creditFacade" - | "creditManager" - | "curveV1Mock" - | "failed" - | "setUp" - | "test_ACV1_01_constructor_reverts_for_zero_addresses_and_non_allowed_tokens" - | "test_ACV1_02_constructor_sets_correct_values" - | "test_ACV1_03_swap_reverts_if_uses_has_no_account" - | "test_ACV1_04_exchange_works_for_user_as_expected" - | "test_ACV1_05_exchnage_all_works_for_user_as_expected" - | "test_ACV1_06_exchange_underlying_works_for_user_as_expected" - | "test_ACV1_07_exchange_all_underlying_works_for_user_as_expected" - | "test_ACV1_08_add_all_liquidity_one_coin_works_for_user_as_expected" - | "test_ACV1_09_remove_liquidity_one_coin_works_correctly" - | "test_ACV1_10_remove_all_liquidity_one_coin_works_correctly" - | "test_ACV1_11_get_dy_and_get_dy_underlying_are_consistent" - | "test_ACV1_12_get_virtual_price_is_consistent" - | "test_ACV1_13_getters_revert_for_indices_gt_nCoins" - | "test_ACV1_14_getter_are_consistent" - | "underlying" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "IS_TEST", values?: undefined): string; - encodeFunctionData( - functionFragment: "_setUp", - values: [BigNumberish] - ): string; - encodeFunctionData(functionFragment: "adapter", values?: undefined): string; - encodeFunctionData(functionFragment: "cft", values?: undefined): string; - encodeFunctionData( - functionFragment: "creditConfigurator", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditFacade", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditManager", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "curveV1Mock", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "failed", values?: undefined): string; - encodeFunctionData(functionFragment: "setUp", values?: undefined): string; - encodeFunctionData( - functionFragment: "test_ACV1_01_constructor_reverts_for_zero_addresses_and_non_allowed_tokens", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_ACV1_02_constructor_sets_correct_values", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_ACV1_03_swap_reverts_if_uses_has_no_account", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_ACV1_04_exchange_works_for_user_as_expected", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_ACV1_05_exchnage_all_works_for_user_as_expected", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_ACV1_06_exchange_underlying_works_for_user_as_expected", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_ACV1_07_exchange_all_underlying_works_for_user_as_expected", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_ACV1_08_add_all_liquidity_one_coin_works_for_user_as_expected", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_ACV1_09_remove_liquidity_one_coin_works_correctly", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_ACV1_10_remove_all_liquidity_one_coin_works_correctly", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_ACV1_11_get_dy_and_get_dy_underlying_are_consistent", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "test_ACV1_12_get_virtual_price_is_consistent", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_ACV1_13_getters_revert_for_indices_gt_nCoins", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_ACV1_14_getter_are_consistent", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "underlying", - values?: undefined - ): string; - - decodeFunctionResult(functionFragment: "IS_TEST", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "_setUp", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "adapter", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "cft", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "creditConfigurator", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditFacade", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditManager", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "curveV1Mock", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "failed", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "setUp", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "test_ACV1_01_constructor_reverts_for_zero_addresses_and_non_allowed_tokens", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_ACV1_02_constructor_sets_correct_values", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_ACV1_03_swap_reverts_if_uses_has_no_account", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_ACV1_04_exchange_works_for_user_as_expected", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_ACV1_05_exchnage_all_works_for_user_as_expected", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_ACV1_06_exchange_underlying_works_for_user_as_expected", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_ACV1_07_exchange_all_underlying_works_for_user_as_expected", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_ACV1_08_add_all_liquidity_one_coin_works_for_user_as_expected", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_ACV1_09_remove_liquidity_one_coin_works_correctly", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_ACV1_10_remove_all_liquidity_one_coin_works_correctly", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_ACV1_11_get_dy_and_get_dy_underlying_are_consistent", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_ACV1_12_get_virtual_price_is_consistent", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_ACV1_13_getters_revert_for_indices_gt_nCoins", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_ACV1_14_getter_are_consistent", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "underlying", data: BytesLike): Result; - - events: { - "AddCollateral(address,address,uint256)": EventFragment; - "CloseCreditAccount(address,address)": EventFragment; - "DecreaseBorrowedAmount(address,uint256)": EventFragment; - "ExecuteOrder(address,address)": EventFragment; - "IncreaseBorrowedAmount(address,uint256)": EventFragment; - "LiquidateCreditAccount(address,address,address,uint256)": EventFragment; - "LiquidateExpiredCreditAccount(address,address,address,uint256)": EventFragment; - "MultiCallFinished()": EventFragment; - "MultiCallStarted(address)": EventFragment; - "NewConfigurator(address)": EventFragment; - "OpenCreditAccount(address,address,uint256,uint16)": EventFragment; - "TokenDisabled(address,address)": EventFragment; - "TokenEnabled(address,address)": EventFragment; - "TransferAccount(address,address)": EventFragment; - "TransferAccountAllowed(address,address,bool)": EventFragment; - "log(string)": EventFragment; - "log_address(address)": EventFragment; - "log_bytes(bytes)": EventFragment; - "log_bytes32(bytes32)": EventFragment; - "log_int(int256)": EventFragment; - "log_named_address(string,address)": EventFragment; - "log_named_bytes(string,bytes)": EventFragment; - "log_named_bytes32(string,bytes32)": EventFragment; - "log_named_decimal_int(string,int256,uint256)": EventFragment; - "log_named_decimal_uint(string,uint256,uint256)": EventFragment; - "log_named_int(string,int256)": EventFragment; - "log_named_string(string,string)": EventFragment; - "log_named_uint(string,uint256)": EventFragment; - "log_string(string)": EventFragment; - "log_uint(uint256)": EventFragment; - "logs(bytes)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "AddCollateral"): EventFragment; - getEvent(nameOrSignatureOrTopic: "CloseCreditAccount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "DecreaseBorrowedAmount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ExecuteOrder"): EventFragment; - getEvent(nameOrSignatureOrTopic: "IncreaseBorrowedAmount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "LiquidateCreditAccount"): EventFragment; - getEvent( - nameOrSignatureOrTopic: "LiquidateExpiredCreditAccount" - ): EventFragment; - getEvent(nameOrSignatureOrTopic: "MultiCallFinished"): EventFragment; - getEvent(nameOrSignatureOrTopic: "MultiCallStarted"): EventFragment; - getEvent(nameOrSignatureOrTopic: "NewConfigurator"): EventFragment; - getEvent(nameOrSignatureOrTopic: "OpenCreditAccount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TokenDisabled"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TokenEnabled"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TransferAccount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TransferAccountAllowed"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "logs"): EventFragment; -} - -export interface AddCollateralEventObject { - onBehalfOf: string; - token: string; - value: BigNumber; -} -export type AddCollateralEvent = TypedEvent< - [string, string, BigNumber], - AddCollateralEventObject ->; - -export type AddCollateralEventFilter = TypedEventFilter; - -export interface CloseCreditAccountEventObject { - owner: string; - to: string; -} -export type CloseCreditAccountEvent = TypedEvent< - [string, string], - CloseCreditAccountEventObject ->; - -export type CloseCreditAccountEventFilter = - TypedEventFilter; - -export interface DecreaseBorrowedAmountEventObject { - borrower: string; - amount: BigNumber; -} -export type DecreaseBorrowedAmountEvent = TypedEvent< - [string, BigNumber], - DecreaseBorrowedAmountEventObject ->; - -export type DecreaseBorrowedAmountEventFilter = - TypedEventFilter; - -export interface ExecuteOrderEventObject { - borrower: string; - target: string; -} -export type ExecuteOrderEvent = TypedEvent< - [string, string], - ExecuteOrderEventObject ->; - -export type ExecuteOrderEventFilter = TypedEventFilter; - -export interface IncreaseBorrowedAmountEventObject { - borrower: string; - amount: BigNumber; -} -export type IncreaseBorrowedAmountEvent = TypedEvent< - [string, BigNumber], - IncreaseBorrowedAmountEventObject ->; - -export type IncreaseBorrowedAmountEventFilter = - TypedEventFilter; - -export interface LiquidateCreditAccountEventObject { - owner: string; - liquidator: string; - to: string; - remainingFunds: BigNumber; -} -export type LiquidateCreditAccountEvent = TypedEvent< - [string, string, string, BigNumber], - LiquidateCreditAccountEventObject ->; - -export type LiquidateCreditAccountEventFilter = - TypedEventFilter; - -export interface LiquidateExpiredCreditAccountEventObject { - owner: string; - liquidator: string; - to: string; - remainingFunds: BigNumber; -} -export type LiquidateExpiredCreditAccountEvent = TypedEvent< - [string, string, string, BigNumber], - LiquidateExpiredCreditAccountEventObject ->; - -export type LiquidateExpiredCreditAccountEventFilter = - TypedEventFilter; - -export interface MultiCallFinishedEventObject {} -export type MultiCallFinishedEvent = TypedEvent< - [], - MultiCallFinishedEventObject ->; - -export type MultiCallFinishedEventFilter = - TypedEventFilter; - -export interface MultiCallStartedEventObject { - borrower: string; -} -export type MultiCallStartedEvent = TypedEvent< - [string], - MultiCallStartedEventObject ->; - -export type MultiCallStartedEventFilter = - TypedEventFilter; - -export interface NewConfiguratorEventObject { - newConfigurator: string; -} -export type NewConfiguratorEvent = TypedEvent< - [string], - NewConfiguratorEventObject ->; - -export type NewConfiguratorEventFilter = TypedEventFilter; - -export interface OpenCreditAccountEventObject { - onBehalfOf: string; - creditAccount: string; - borrowAmount: BigNumber; - referralCode: number; -} -export type OpenCreditAccountEvent = TypedEvent< - [string, string, BigNumber, number], - OpenCreditAccountEventObject ->; - -export type OpenCreditAccountEventFilter = - TypedEventFilter; - -export interface TokenDisabledEventObject { - creditAccount: string; - token: string; -} -export type TokenDisabledEvent = TypedEvent< - [string, string], - TokenDisabledEventObject ->; - -export type TokenDisabledEventFilter = TypedEventFilter; - -export interface TokenEnabledEventObject { - creditAccount: string; - token: string; -} -export type TokenEnabledEvent = TypedEvent< - [string, string], - TokenEnabledEventObject ->; - -export type TokenEnabledEventFilter = TypedEventFilter; - -export interface TransferAccountEventObject { - oldOwner: string; - newOwner: string; -} -export type TransferAccountEvent = TypedEvent< - [string, string], - TransferAccountEventObject ->; - -export type TransferAccountEventFilter = TypedEventFilter; - -export interface TransferAccountAllowedEventObject { - from: string; - to: string; - state: boolean; -} -export type TransferAccountAllowedEvent = TypedEvent< - [string, string, boolean], - TransferAccountAllowedEventObject ->; - -export type TransferAccountAllowedEventFilter = - TypedEventFilter; - -export interface logEventObject { - arg0: string; -} -export type logEvent = TypedEvent<[string], logEventObject>; - -export type logEventFilter = TypedEventFilter; - -export interface log_addressEventObject { - arg0: string; -} -export type log_addressEvent = TypedEvent<[string], log_addressEventObject>; - -export type log_addressEventFilter = TypedEventFilter; - -export interface log_bytesEventObject { - arg0: string; -} -export type log_bytesEvent = TypedEvent<[string], log_bytesEventObject>; - -export type log_bytesEventFilter = TypedEventFilter; - -export interface log_bytes32EventObject { - arg0: string; -} -export type log_bytes32Event = TypedEvent<[string], log_bytes32EventObject>; - -export type log_bytes32EventFilter = TypedEventFilter; - -export interface log_intEventObject { - arg0: BigNumber; -} -export type log_intEvent = TypedEvent<[BigNumber], log_intEventObject>; - -export type log_intEventFilter = TypedEventFilter; - -export interface log_named_addressEventObject { - key: string; - val: string; -} -export type log_named_addressEvent = TypedEvent< - [string, string], - log_named_addressEventObject ->; - -export type log_named_addressEventFilter = - TypedEventFilter; - -export interface log_named_bytesEventObject { - key: string; - val: string; -} -export type log_named_bytesEvent = TypedEvent< - [string, string], - log_named_bytesEventObject ->; - -export type log_named_bytesEventFilter = TypedEventFilter; - -export interface log_named_bytes32EventObject { - key: string; - val: string; -} -export type log_named_bytes32Event = TypedEvent< - [string, string], - log_named_bytes32EventObject ->; - -export type log_named_bytes32EventFilter = - TypedEventFilter; - -export interface log_named_decimal_intEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_intEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_intEventObject ->; - -export type log_named_decimal_intEventFilter = - TypedEventFilter; - -export interface log_named_decimal_uintEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_uintEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_uintEventObject ->; - -export type log_named_decimal_uintEventFilter = - TypedEventFilter; - -export interface log_named_intEventObject { - key: string; - val: BigNumber; -} -export type log_named_intEvent = TypedEvent< - [string, BigNumber], - log_named_intEventObject ->; - -export type log_named_intEventFilter = TypedEventFilter; - -export interface log_named_stringEventObject { - key: string; - val: string; -} -export type log_named_stringEvent = TypedEvent< - [string, string], - log_named_stringEventObject ->; - -export type log_named_stringEventFilter = - TypedEventFilter; - -export interface log_named_uintEventObject { - key: string; - val: BigNumber; -} -export type log_named_uintEvent = TypedEvent< - [string, BigNumber], - log_named_uintEventObject ->; - -export type log_named_uintEventFilter = TypedEventFilter; - -export interface log_stringEventObject { - arg0: string; -} -export type log_stringEvent = TypedEvent<[string], log_stringEventObject>; - -export type log_stringEventFilter = TypedEventFilter; - -export interface log_uintEventObject { - arg0: BigNumber; -} -export type log_uintEvent = TypedEvent<[BigNumber], log_uintEventObject>; - -export type log_uintEventFilter = TypedEventFilter; - -export interface logsEventObject { - arg0: string; -} -export type logsEvent = TypedEvent<[string], logsEventObject>; - -export type logsEventFilter = TypedEventFilter; - -export interface CurveV1AdapterBaseTest extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: CurveV1AdapterBaseTestInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - IS_TEST(overrides?: CallOverrides): Promise<[boolean]>; - - _setUp( - nCoins: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - adapter(overrides?: CallOverrides): Promise<[string]>; - - cft(overrides?: CallOverrides): Promise<[string]>; - - creditConfigurator(overrides?: CallOverrides): Promise<[string]>; - - creditFacade(overrides?: CallOverrides): Promise<[string]>; - - creditManager(overrides?: CallOverrides): Promise<[string]>; - - curveV1Mock(overrides?: CallOverrides): Promise<[string]>; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_01_constructor_reverts_for_zero_addresses_and_non_allowed_tokens( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_02_constructor_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_03_swap_reverts_if_uses_has_no_account( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_04_exchange_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_05_exchnage_all_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_06_exchange_underlying_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_07_exchange_all_underlying_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_08_add_all_liquidity_one_coin_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_09_remove_liquidity_one_coin_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_10_remove_all_liquidity_one_coin_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_11_get_dy_and_get_dy_underlying_are_consistent( - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_12_get_virtual_price_is_consistent( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_13_getters_revert_for_indices_gt_nCoins( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_14_getter_are_consistent( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise<[string]>; - }; - - IS_TEST(overrides?: CallOverrides): Promise; - - _setUp( - nCoins: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - adapter(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - curveV1Mock(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_01_constructor_reverts_for_zero_addresses_and_non_allowed_tokens( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_02_constructor_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_03_swap_reverts_if_uses_has_no_account( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_04_exchange_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_05_exchnage_all_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_06_exchange_underlying_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_07_exchange_all_underlying_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_08_add_all_liquidity_one_coin_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_09_remove_liquidity_one_coin_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_10_remove_all_liquidity_one_coin_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_11_get_dy_and_get_dy_underlying_are_consistent( - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_12_get_virtual_price_is_consistent( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_13_getters_revert_for_indices_gt_nCoins( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_14_getter_are_consistent( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - - callStatic: { - IS_TEST(overrides?: CallOverrides): Promise; - - _setUp(nCoins: BigNumberish, overrides?: CallOverrides): Promise; - - adapter(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - curveV1Mock(overrides?: CallOverrides): Promise; - - failed(overrides?: CallOverrides): Promise; - - setUp(overrides?: CallOverrides): Promise; - - test_ACV1_01_constructor_reverts_for_zero_addresses_and_non_allowed_tokens( - overrides?: CallOverrides - ): Promise; - - test_ACV1_02_constructor_sets_correct_values( - overrides?: CallOverrides - ): Promise; - - test_ACV1_03_swap_reverts_if_uses_has_no_account( - overrides?: CallOverrides - ): Promise; - - test_ACV1_04_exchange_works_for_user_as_expected( - overrides?: CallOverrides - ): Promise; - - test_ACV1_05_exchnage_all_works_for_user_as_expected( - overrides?: CallOverrides - ): Promise; - - test_ACV1_06_exchange_underlying_works_for_user_as_expected( - overrides?: CallOverrides - ): Promise; - - test_ACV1_07_exchange_all_underlying_works_for_user_as_expected( - overrides?: CallOverrides - ): Promise; - - test_ACV1_08_add_all_liquidity_one_coin_works_for_user_as_expected( - overrides?: CallOverrides - ): Promise; - - test_ACV1_09_remove_liquidity_one_coin_works_correctly( - overrides?: CallOverrides - ): Promise; - - test_ACV1_10_remove_all_liquidity_one_coin_works_correctly( - overrides?: CallOverrides - ): Promise; - - test_ACV1_11_get_dy_and_get_dy_underlying_are_consistent( - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - test_ACV1_12_get_virtual_price_is_consistent( - overrides?: CallOverrides - ): Promise; - - test_ACV1_13_getters_revert_for_indices_gt_nCoins( - overrides?: CallOverrides - ): Promise; - - test_ACV1_14_getter_are_consistent( - overrides?: CallOverrides - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - }; - - filters: { - "AddCollateral(address,address,uint256)"( - onBehalfOf?: string | null, - token?: string | null, - value?: null - ): AddCollateralEventFilter; - AddCollateral( - onBehalfOf?: string | null, - token?: string | null, - value?: null - ): AddCollateralEventFilter; - - "CloseCreditAccount(address,address)"( - owner?: string | null, - to?: string | null - ): CloseCreditAccountEventFilter; - CloseCreditAccount( - owner?: string | null, - to?: string | null - ): CloseCreditAccountEventFilter; - - "DecreaseBorrowedAmount(address,uint256)"( - borrower?: string | null, - amount?: null - ): DecreaseBorrowedAmountEventFilter; - DecreaseBorrowedAmount( - borrower?: string | null, - amount?: null - ): DecreaseBorrowedAmountEventFilter; - - "ExecuteOrder(address,address)"( - borrower?: string | null, - target?: string | null - ): ExecuteOrderEventFilter; - ExecuteOrder( - borrower?: string | null, - target?: string | null - ): ExecuteOrderEventFilter; - - "IncreaseBorrowedAmount(address,uint256)"( - borrower?: string | null, - amount?: null - ): IncreaseBorrowedAmountEventFilter; - IncreaseBorrowedAmount( - borrower?: string | null, - amount?: null - ): IncreaseBorrowedAmountEventFilter; - - "LiquidateCreditAccount(address,address,address,uint256)"( - owner?: string | null, - liquidator?: string | null, - to?: string | null, - remainingFunds?: null - ): LiquidateCreditAccountEventFilter; - LiquidateCreditAccount( - owner?: string | null, - liquidator?: string | null, - to?: string | null, - remainingFunds?: null - ): LiquidateCreditAccountEventFilter; - - "LiquidateExpiredCreditAccount(address,address,address,uint256)"( - owner?: string | null, - liquidator?: string | null, - to?: string | null, - remainingFunds?: null - ): LiquidateExpiredCreditAccountEventFilter; - LiquidateExpiredCreditAccount( - owner?: string | null, - liquidator?: string | null, - to?: string | null, - remainingFunds?: null - ): LiquidateExpiredCreditAccountEventFilter; - - "MultiCallFinished()"(): MultiCallFinishedEventFilter; - MultiCallFinished(): MultiCallFinishedEventFilter; - - "MultiCallStarted(address)"( - borrower?: string | null - ): MultiCallStartedEventFilter; - MultiCallStarted(borrower?: string | null): MultiCallStartedEventFilter; - - "NewConfigurator(address)"( - newConfigurator?: string | null - ): NewConfiguratorEventFilter; - NewConfigurator( - newConfigurator?: string | null - ): NewConfiguratorEventFilter; - - "OpenCreditAccount(address,address,uint256,uint16)"( - onBehalfOf?: string | null, - creditAccount?: string | null, - borrowAmount?: null, - referralCode?: null - ): OpenCreditAccountEventFilter; - OpenCreditAccount( - onBehalfOf?: string | null, - creditAccount?: string | null, - borrowAmount?: null, - referralCode?: null - ): OpenCreditAccountEventFilter; - - "TokenDisabled(address,address)"( - creditAccount?: null, - token?: null - ): TokenDisabledEventFilter; - TokenDisabled(creditAccount?: null, token?: null): TokenDisabledEventFilter; - - "TokenEnabled(address,address)"( - creditAccount?: null, - token?: null - ): TokenEnabledEventFilter; - TokenEnabled(creditAccount?: null, token?: null): TokenEnabledEventFilter; - - "TransferAccount(address,address)"( - oldOwner?: string | null, - newOwner?: string | null - ): TransferAccountEventFilter; - TransferAccount( - oldOwner?: string | null, - newOwner?: string | null - ): TransferAccountEventFilter; - - "TransferAccountAllowed(address,address,bool)"( - from?: string | null, - to?: string | null, - state?: null - ): TransferAccountAllowedEventFilter; - TransferAccountAllowed( - from?: string | null, - to?: string | null, - state?: null - ): TransferAccountAllowedEventFilter; - - "log(string)"(arg0?: null): logEventFilter; - log(arg0?: null): logEventFilter; - - "log_address(address)"(arg0?: null): log_addressEventFilter; - log_address(arg0?: null): log_addressEventFilter; - - "log_bytes(bytes)"(arg0?: null): log_bytesEventFilter; - log_bytes(arg0?: null): log_bytesEventFilter; - - "log_bytes32(bytes32)"(arg0?: null): log_bytes32EventFilter; - log_bytes32(arg0?: null): log_bytes32EventFilter; - - "log_int(int256)"(arg0?: null): log_intEventFilter; - log_int(arg0?: null): log_intEventFilter; - - "log_named_address(string,address)"( - key?: null, - val?: null - ): log_named_addressEventFilter; - log_named_address(key?: null, val?: null): log_named_addressEventFilter; - - "log_named_bytes(string,bytes)"( - key?: null, - val?: null - ): log_named_bytesEventFilter; - log_named_bytes(key?: null, val?: null): log_named_bytesEventFilter; - - "log_named_bytes32(string,bytes32)"( - key?: null, - val?: null - ): log_named_bytes32EventFilter; - log_named_bytes32(key?: null, val?: null): log_named_bytes32EventFilter; - - "log_named_decimal_int(string,int256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - log_named_decimal_int( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - - "log_named_decimal_uint(string,uint256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - log_named_decimal_uint( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - - "log_named_int(string,int256)"( - key?: null, - val?: null - ): log_named_intEventFilter; - log_named_int(key?: null, val?: null): log_named_intEventFilter; - - "log_named_string(string,string)"( - key?: null, - val?: null - ): log_named_stringEventFilter; - log_named_string(key?: null, val?: null): log_named_stringEventFilter; - - "log_named_uint(string,uint256)"( - key?: null, - val?: null - ): log_named_uintEventFilter; - log_named_uint(key?: null, val?: null): log_named_uintEventFilter; - - "log_string(string)"(arg0?: null): log_stringEventFilter; - log_string(arg0?: null): log_stringEventFilter; - - "log_uint(uint256)"(arg0?: null): log_uintEventFilter; - log_uint(arg0?: null): log_uintEventFilter; - - "logs(bytes)"(arg0?: null): logsEventFilter; - logs(arg0?: null): logsEventFilter; - }; - - estimateGas: { - IS_TEST(overrides?: CallOverrides): Promise; - - _setUp( - nCoins: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - adapter(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - curveV1Mock(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_01_constructor_reverts_for_zero_addresses_and_non_allowed_tokens( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_02_constructor_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_03_swap_reverts_if_uses_has_no_account( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_04_exchange_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_05_exchnage_all_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_06_exchange_underlying_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_07_exchange_all_underlying_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_08_add_all_liquidity_one_coin_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_09_remove_liquidity_one_coin_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_10_remove_all_liquidity_one_coin_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_11_get_dy_and_get_dy_underlying_are_consistent( - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_12_get_virtual_price_is_consistent( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_13_getters_revert_for_indices_gt_nCoins( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_14_getter_are_consistent( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - IS_TEST(overrides?: CallOverrides): Promise; - - _setUp( - nCoins: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - adapter(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator( - overrides?: CallOverrides - ): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - curveV1Mock(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_01_constructor_reverts_for_zero_addresses_and_non_allowed_tokens( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_02_constructor_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_03_swap_reverts_if_uses_has_no_account( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_04_exchange_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_05_exchnage_all_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_06_exchange_underlying_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_07_exchange_all_underlying_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_08_add_all_liquidity_one_coin_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_09_remove_liquidity_one_coin_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_10_remove_all_liquidity_one_coin_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_11_get_dy_and_get_dy_underlying_are_consistent( - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_12_get_virtual_price_is_consistent( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_13_getters_revert_for_indices_gt_nCoins( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_14_getter_are_consistent( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/test/adapters/CurveV1AdapterBaseTest.t.sol/index.ts b/src/types/contracts/test/adapters/CurveV1AdapterBaseTest.t.sol/index.ts deleted file mode 100644 index 8507b70e..00000000 --- a/src/types/contracts/test/adapters/CurveV1AdapterBaseTest.t.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { CurveV1AdapterBaseTest } from "./CurveV1AdapterBaseTest"; diff --git a/src/types/contracts/test/adapters/CurveV1AdapterHelper.ts b/src/types/contracts/test/adapters/CurveV1AdapterHelper.ts deleted file mode 100644 index b82cc48e..00000000 --- a/src/types/contracts/test/adapters/CurveV1AdapterHelper.ts +++ /dev/null @@ -1,814 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../common"; - -export interface CurveV1AdapterHelperInterface extends utils.Interface { - functions: { - "IS_TEST()": FunctionFragment; - "cft()": FunctionFragment; - "creditConfigurator()": FunctionFragment; - "creditFacade()": FunctionFragment; - "creditManager()": FunctionFragment; - "failed()": FunctionFragment; - "underlying()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "IS_TEST" - | "cft" - | "creditConfigurator" - | "creditFacade" - | "creditManager" - | "failed" - | "underlying" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "IS_TEST", values?: undefined): string; - encodeFunctionData(functionFragment: "cft", values?: undefined): string; - encodeFunctionData( - functionFragment: "creditConfigurator", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditFacade", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditManager", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "failed", values?: undefined): string; - encodeFunctionData( - functionFragment: "underlying", - values?: undefined - ): string; - - decodeFunctionResult(functionFragment: "IS_TEST", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "cft", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "creditConfigurator", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditFacade", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditManager", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "failed", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "underlying", data: BytesLike): Result; - - events: { - "AddCollateral(address,address,uint256)": EventFragment; - "CloseCreditAccount(address,address)": EventFragment; - "DecreaseBorrowedAmount(address,uint256)": EventFragment; - "ExecuteOrder(address,address)": EventFragment; - "IncreaseBorrowedAmount(address,uint256)": EventFragment; - "LiquidateCreditAccount(address,address,address,uint256)": EventFragment; - "LiquidateExpiredCreditAccount(address,address,address,uint256)": EventFragment; - "MultiCallFinished()": EventFragment; - "MultiCallStarted(address)": EventFragment; - "NewConfigurator(address)": EventFragment; - "OpenCreditAccount(address,address,uint256,uint16)": EventFragment; - "TokenDisabled(address,address)": EventFragment; - "TokenEnabled(address,address)": EventFragment; - "TransferAccount(address,address)": EventFragment; - "TransferAccountAllowed(address,address,bool)": EventFragment; - "log(string)": EventFragment; - "log_address(address)": EventFragment; - "log_bytes(bytes)": EventFragment; - "log_bytes32(bytes32)": EventFragment; - "log_int(int256)": EventFragment; - "log_named_address(string,address)": EventFragment; - "log_named_bytes(string,bytes)": EventFragment; - "log_named_bytes32(string,bytes32)": EventFragment; - "log_named_decimal_int(string,int256,uint256)": EventFragment; - "log_named_decimal_uint(string,uint256,uint256)": EventFragment; - "log_named_int(string,int256)": EventFragment; - "log_named_string(string,string)": EventFragment; - "log_named_uint(string,uint256)": EventFragment; - "log_string(string)": EventFragment; - "log_uint(uint256)": EventFragment; - "logs(bytes)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "AddCollateral"): EventFragment; - getEvent(nameOrSignatureOrTopic: "CloseCreditAccount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "DecreaseBorrowedAmount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ExecuteOrder"): EventFragment; - getEvent(nameOrSignatureOrTopic: "IncreaseBorrowedAmount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "LiquidateCreditAccount"): EventFragment; - getEvent( - nameOrSignatureOrTopic: "LiquidateExpiredCreditAccount" - ): EventFragment; - getEvent(nameOrSignatureOrTopic: "MultiCallFinished"): EventFragment; - getEvent(nameOrSignatureOrTopic: "MultiCallStarted"): EventFragment; - getEvent(nameOrSignatureOrTopic: "NewConfigurator"): EventFragment; - getEvent(nameOrSignatureOrTopic: "OpenCreditAccount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TokenDisabled"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TokenEnabled"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TransferAccount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TransferAccountAllowed"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "logs"): EventFragment; -} - -export interface AddCollateralEventObject { - onBehalfOf: string; - token: string; - value: BigNumber; -} -export type AddCollateralEvent = TypedEvent< - [string, string, BigNumber], - AddCollateralEventObject ->; - -export type AddCollateralEventFilter = TypedEventFilter; - -export interface CloseCreditAccountEventObject { - owner: string; - to: string; -} -export type CloseCreditAccountEvent = TypedEvent< - [string, string], - CloseCreditAccountEventObject ->; - -export type CloseCreditAccountEventFilter = - TypedEventFilter; - -export interface DecreaseBorrowedAmountEventObject { - borrower: string; - amount: BigNumber; -} -export type DecreaseBorrowedAmountEvent = TypedEvent< - [string, BigNumber], - DecreaseBorrowedAmountEventObject ->; - -export type DecreaseBorrowedAmountEventFilter = - TypedEventFilter; - -export interface ExecuteOrderEventObject { - borrower: string; - target: string; -} -export type ExecuteOrderEvent = TypedEvent< - [string, string], - ExecuteOrderEventObject ->; - -export type ExecuteOrderEventFilter = TypedEventFilter; - -export interface IncreaseBorrowedAmountEventObject { - borrower: string; - amount: BigNumber; -} -export type IncreaseBorrowedAmountEvent = TypedEvent< - [string, BigNumber], - IncreaseBorrowedAmountEventObject ->; - -export type IncreaseBorrowedAmountEventFilter = - TypedEventFilter; - -export interface LiquidateCreditAccountEventObject { - owner: string; - liquidator: string; - to: string; - remainingFunds: BigNumber; -} -export type LiquidateCreditAccountEvent = TypedEvent< - [string, string, string, BigNumber], - LiquidateCreditAccountEventObject ->; - -export type LiquidateCreditAccountEventFilter = - TypedEventFilter; - -export interface LiquidateExpiredCreditAccountEventObject { - owner: string; - liquidator: string; - to: string; - remainingFunds: BigNumber; -} -export type LiquidateExpiredCreditAccountEvent = TypedEvent< - [string, string, string, BigNumber], - LiquidateExpiredCreditAccountEventObject ->; - -export type LiquidateExpiredCreditAccountEventFilter = - TypedEventFilter; - -export interface MultiCallFinishedEventObject {} -export type MultiCallFinishedEvent = TypedEvent< - [], - MultiCallFinishedEventObject ->; - -export type MultiCallFinishedEventFilter = - TypedEventFilter; - -export interface MultiCallStartedEventObject { - borrower: string; -} -export type MultiCallStartedEvent = TypedEvent< - [string], - MultiCallStartedEventObject ->; - -export type MultiCallStartedEventFilter = - TypedEventFilter; - -export interface NewConfiguratorEventObject { - newConfigurator: string; -} -export type NewConfiguratorEvent = TypedEvent< - [string], - NewConfiguratorEventObject ->; - -export type NewConfiguratorEventFilter = TypedEventFilter; - -export interface OpenCreditAccountEventObject { - onBehalfOf: string; - creditAccount: string; - borrowAmount: BigNumber; - referralCode: number; -} -export type OpenCreditAccountEvent = TypedEvent< - [string, string, BigNumber, number], - OpenCreditAccountEventObject ->; - -export type OpenCreditAccountEventFilter = - TypedEventFilter; - -export interface TokenDisabledEventObject { - creditAccount: string; - token: string; -} -export type TokenDisabledEvent = TypedEvent< - [string, string], - TokenDisabledEventObject ->; - -export type TokenDisabledEventFilter = TypedEventFilter; - -export interface TokenEnabledEventObject { - creditAccount: string; - token: string; -} -export type TokenEnabledEvent = TypedEvent< - [string, string], - TokenEnabledEventObject ->; - -export type TokenEnabledEventFilter = TypedEventFilter; - -export interface TransferAccountEventObject { - oldOwner: string; - newOwner: string; -} -export type TransferAccountEvent = TypedEvent< - [string, string], - TransferAccountEventObject ->; - -export type TransferAccountEventFilter = TypedEventFilter; - -export interface TransferAccountAllowedEventObject { - from: string; - to: string; - state: boolean; -} -export type TransferAccountAllowedEvent = TypedEvent< - [string, string, boolean], - TransferAccountAllowedEventObject ->; - -export type TransferAccountAllowedEventFilter = - TypedEventFilter; - -export interface logEventObject { - arg0: string; -} -export type logEvent = TypedEvent<[string], logEventObject>; - -export type logEventFilter = TypedEventFilter; - -export interface log_addressEventObject { - arg0: string; -} -export type log_addressEvent = TypedEvent<[string], log_addressEventObject>; - -export type log_addressEventFilter = TypedEventFilter; - -export interface log_bytesEventObject { - arg0: string; -} -export type log_bytesEvent = TypedEvent<[string], log_bytesEventObject>; - -export type log_bytesEventFilter = TypedEventFilter; - -export interface log_bytes32EventObject { - arg0: string; -} -export type log_bytes32Event = TypedEvent<[string], log_bytes32EventObject>; - -export type log_bytes32EventFilter = TypedEventFilter; - -export interface log_intEventObject { - arg0: BigNumber; -} -export type log_intEvent = TypedEvent<[BigNumber], log_intEventObject>; - -export type log_intEventFilter = TypedEventFilter; - -export interface log_named_addressEventObject { - key: string; - val: string; -} -export type log_named_addressEvent = TypedEvent< - [string, string], - log_named_addressEventObject ->; - -export type log_named_addressEventFilter = - TypedEventFilter; - -export interface log_named_bytesEventObject { - key: string; - val: string; -} -export type log_named_bytesEvent = TypedEvent< - [string, string], - log_named_bytesEventObject ->; - -export type log_named_bytesEventFilter = TypedEventFilter; - -export interface log_named_bytes32EventObject { - key: string; - val: string; -} -export type log_named_bytes32Event = TypedEvent< - [string, string], - log_named_bytes32EventObject ->; - -export type log_named_bytes32EventFilter = - TypedEventFilter; - -export interface log_named_decimal_intEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_intEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_intEventObject ->; - -export type log_named_decimal_intEventFilter = - TypedEventFilter; - -export interface log_named_decimal_uintEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_uintEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_uintEventObject ->; - -export type log_named_decimal_uintEventFilter = - TypedEventFilter; - -export interface log_named_intEventObject { - key: string; - val: BigNumber; -} -export type log_named_intEvent = TypedEvent< - [string, BigNumber], - log_named_intEventObject ->; - -export type log_named_intEventFilter = TypedEventFilter; - -export interface log_named_stringEventObject { - key: string; - val: string; -} -export type log_named_stringEvent = TypedEvent< - [string, string], - log_named_stringEventObject ->; - -export type log_named_stringEventFilter = - TypedEventFilter; - -export interface log_named_uintEventObject { - key: string; - val: BigNumber; -} -export type log_named_uintEvent = TypedEvent< - [string, BigNumber], - log_named_uintEventObject ->; - -export type log_named_uintEventFilter = TypedEventFilter; - -export interface log_stringEventObject { - arg0: string; -} -export type log_stringEvent = TypedEvent<[string], log_stringEventObject>; - -export type log_stringEventFilter = TypedEventFilter; - -export interface log_uintEventObject { - arg0: BigNumber; -} -export type log_uintEvent = TypedEvent<[BigNumber], log_uintEventObject>; - -export type log_uintEventFilter = TypedEventFilter; - -export interface logsEventObject { - arg0: string; -} -export type logsEvent = TypedEvent<[string], logsEventObject>; - -export type logsEventFilter = TypedEventFilter; - -export interface CurveV1AdapterHelper extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: CurveV1AdapterHelperInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - IS_TEST(overrides?: CallOverrides): Promise<[boolean]>; - - cft(overrides?: CallOverrides): Promise<[string]>; - - creditConfigurator(overrides?: CallOverrides): Promise<[string]>; - - creditFacade(overrides?: CallOverrides): Promise<[string]>; - - creditManager(overrides?: CallOverrides): Promise<[string]>; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise<[string]>; - }; - - IS_TEST(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - - callStatic: { - IS_TEST(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - failed(overrides?: CallOverrides): Promise; - - underlying(overrides?: CallOverrides): Promise; - }; - - filters: { - "AddCollateral(address,address,uint256)"( - onBehalfOf?: string | null, - token?: string | null, - value?: null - ): AddCollateralEventFilter; - AddCollateral( - onBehalfOf?: string | null, - token?: string | null, - value?: null - ): AddCollateralEventFilter; - - "CloseCreditAccount(address,address)"( - owner?: string | null, - to?: string | null - ): CloseCreditAccountEventFilter; - CloseCreditAccount( - owner?: string | null, - to?: string | null - ): CloseCreditAccountEventFilter; - - "DecreaseBorrowedAmount(address,uint256)"( - borrower?: string | null, - amount?: null - ): DecreaseBorrowedAmountEventFilter; - DecreaseBorrowedAmount( - borrower?: string | null, - amount?: null - ): DecreaseBorrowedAmountEventFilter; - - "ExecuteOrder(address,address)"( - borrower?: string | null, - target?: string | null - ): ExecuteOrderEventFilter; - ExecuteOrder( - borrower?: string | null, - target?: string | null - ): ExecuteOrderEventFilter; - - "IncreaseBorrowedAmount(address,uint256)"( - borrower?: string | null, - amount?: null - ): IncreaseBorrowedAmountEventFilter; - IncreaseBorrowedAmount( - borrower?: string | null, - amount?: null - ): IncreaseBorrowedAmountEventFilter; - - "LiquidateCreditAccount(address,address,address,uint256)"( - owner?: string | null, - liquidator?: string | null, - to?: string | null, - remainingFunds?: null - ): LiquidateCreditAccountEventFilter; - LiquidateCreditAccount( - owner?: string | null, - liquidator?: string | null, - to?: string | null, - remainingFunds?: null - ): LiquidateCreditAccountEventFilter; - - "LiquidateExpiredCreditAccount(address,address,address,uint256)"( - owner?: string | null, - liquidator?: string | null, - to?: string | null, - remainingFunds?: null - ): LiquidateExpiredCreditAccountEventFilter; - LiquidateExpiredCreditAccount( - owner?: string | null, - liquidator?: string | null, - to?: string | null, - remainingFunds?: null - ): LiquidateExpiredCreditAccountEventFilter; - - "MultiCallFinished()"(): MultiCallFinishedEventFilter; - MultiCallFinished(): MultiCallFinishedEventFilter; - - "MultiCallStarted(address)"( - borrower?: string | null - ): MultiCallStartedEventFilter; - MultiCallStarted(borrower?: string | null): MultiCallStartedEventFilter; - - "NewConfigurator(address)"( - newConfigurator?: string | null - ): NewConfiguratorEventFilter; - NewConfigurator( - newConfigurator?: string | null - ): NewConfiguratorEventFilter; - - "OpenCreditAccount(address,address,uint256,uint16)"( - onBehalfOf?: string | null, - creditAccount?: string | null, - borrowAmount?: null, - referralCode?: null - ): OpenCreditAccountEventFilter; - OpenCreditAccount( - onBehalfOf?: string | null, - creditAccount?: string | null, - borrowAmount?: null, - referralCode?: null - ): OpenCreditAccountEventFilter; - - "TokenDisabled(address,address)"( - creditAccount?: null, - token?: null - ): TokenDisabledEventFilter; - TokenDisabled(creditAccount?: null, token?: null): TokenDisabledEventFilter; - - "TokenEnabled(address,address)"( - creditAccount?: null, - token?: null - ): TokenEnabledEventFilter; - TokenEnabled(creditAccount?: null, token?: null): TokenEnabledEventFilter; - - "TransferAccount(address,address)"( - oldOwner?: string | null, - newOwner?: string | null - ): TransferAccountEventFilter; - TransferAccount( - oldOwner?: string | null, - newOwner?: string | null - ): TransferAccountEventFilter; - - "TransferAccountAllowed(address,address,bool)"( - from?: string | null, - to?: string | null, - state?: null - ): TransferAccountAllowedEventFilter; - TransferAccountAllowed( - from?: string | null, - to?: string | null, - state?: null - ): TransferAccountAllowedEventFilter; - - "log(string)"(arg0?: null): logEventFilter; - log(arg0?: null): logEventFilter; - - "log_address(address)"(arg0?: null): log_addressEventFilter; - log_address(arg0?: null): log_addressEventFilter; - - "log_bytes(bytes)"(arg0?: null): log_bytesEventFilter; - log_bytes(arg0?: null): log_bytesEventFilter; - - "log_bytes32(bytes32)"(arg0?: null): log_bytes32EventFilter; - log_bytes32(arg0?: null): log_bytes32EventFilter; - - "log_int(int256)"(arg0?: null): log_intEventFilter; - log_int(arg0?: null): log_intEventFilter; - - "log_named_address(string,address)"( - key?: null, - val?: null - ): log_named_addressEventFilter; - log_named_address(key?: null, val?: null): log_named_addressEventFilter; - - "log_named_bytes(string,bytes)"( - key?: null, - val?: null - ): log_named_bytesEventFilter; - log_named_bytes(key?: null, val?: null): log_named_bytesEventFilter; - - "log_named_bytes32(string,bytes32)"( - key?: null, - val?: null - ): log_named_bytes32EventFilter; - log_named_bytes32(key?: null, val?: null): log_named_bytes32EventFilter; - - "log_named_decimal_int(string,int256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - log_named_decimal_int( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - - "log_named_decimal_uint(string,uint256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - log_named_decimal_uint( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - - "log_named_int(string,int256)"( - key?: null, - val?: null - ): log_named_intEventFilter; - log_named_int(key?: null, val?: null): log_named_intEventFilter; - - "log_named_string(string,string)"( - key?: null, - val?: null - ): log_named_stringEventFilter; - log_named_string(key?: null, val?: null): log_named_stringEventFilter; - - "log_named_uint(string,uint256)"( - key?: null, - val?: null - ): log_named_uintEventFilter; - log_named_uint(key?: null, val?: null): log_named_uintEventFilter; - - "log_string(string)"(arg0?: null): log_stringEventFilter; - log_string(arg0?: null): log_stringEventFilter; - - "log_uint(uint256)"(arg0?: null): log_uintEventFilter; - log_uint(arg0?: null): log_uintEventFilter; - - "logs(bytes)"(arg0?: null): logsEventFilter; - logs(arg0?: null): logsEventFilter; - }; - - estimateGas: { - IS_TEST(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - IS_TEST(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator( - overrides?: CallOverrides - ): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/test/adapters/CurveV1Adapter_2AssetsTest.t.sol/CurveV1Adapter2AssetsTest.ts b/src/types/contracts/test/adapters/CurveV1Adapter_2AssetsTest.t.sol/CurveV1Adapter2AssetsTest.ts deleted file mode 100644 index 9040d520..00000000 --- a/src/types/contracts/test/adapters/CurveV1Adapter_2AssetsTest.t.sol/CurveV1Adapter2AssetsTest.ts +++ /dev/null @@ -1,1080 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface CurveV1Adapter2AssetsTestInterface extends utils.Interface { - functions: { - "IS_TEST()": FunctionFragment; - "adapter()": FunctionFragment; - "cft()": FunctionFragment; - "creditConfigurator()": FunctionFragment; - "creditFacade()": FunctionFragment; - "creditManager()": FunctionFragment; - "curveV1Mock()": FunctionFragment; - "failed()": FunctionFragment; - "setUp()": FunctionFragment; - "test_ACV1_2_01_constructor_sets_correct_values()": FunctionFragment; - "test_ACV1_2_02A_constructor_reverts_for_unknown_addresses()": FunctionFragment; - "test_ACV1_2_02_constructor_reverts_for_zero_addresses()": FunctionFragment; - "test_ACV1_2_03_liquidity_functions_revert_if_user_has_no_account()": FunctionFragment; - "test_ACV1_2_04_add_liquidity_works_as_expected()": FunctionFragment; - "test_ACV1_2_05_remove_liquidity_works_as_expected()": FunctionFragment; - "test_ACV1_2_06_remove_liquidity_imbalance_works_as_expected()": FunctionFragment; - "underlying()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "IS_TEST" - | "adapter" - | "cft" - | "creditConfigurator" - | "creditFacade" - | "creditManager" - | "curveV1Mock" - | "failed" - | "setUp" - | "test_ACV1_2_01_constructor_sets_correct_values" - | "test_ACV1_2_02A_constructor_reverts_for_unknown_addresses" - | "test_ACV1_2_02_constructor_reverts_for_zero_addresses" - | "test_ACV1_2_03_liquidity_functions_revert_if_user_has_no_account" - | "test_ACV1_2_04_add_liquidity_works_as_expected" - | "test_ACV1_2_05_remove_liquidity_works_as_expected" - | "test_ACV1_2_06_remove_liquidity_imbalance_works_as_expected" - | "underlying" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "IS_TEST", values?: undefined): string; - encodeFunctionData(functionFragment: "adapter", values?: undefined): string; - encodeFunctionData(functionFragment: "cft", values?: undefined): string; - encodeFunctionData( - functionFragment: "creditConfigurator", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditFacade", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditManager", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "curveV1Mock", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "failed", values?: undefined): string; - encodeFunctionData(functionFragment: "setUp", values?: undefined): string; - encodeFunctionData( - functionFragment: "test_ACV1_2_01_constructor_sets_correct_values", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_ACV1_2_02A_constructor_reverts_for_unknown_addresses", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_ACV1_2_02_constructor_reverts_for_zero_addresses", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_ACV1_2_03_liquidity_functions_revert_if_user_has_no_account", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_ACV1_2_04_add_liquidity_works_as_expected", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_ACV1_2_05_remove_liquidity_works_as_expected", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_ACV1_2_06_remove_liquidity_imbalance_works_as_expected", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "underlying", - values?: undefined - ): string; - - decodeFunctionResult(functionFragment: "IS_TEST", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "adapter", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "cft", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "creditConfigurator", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditFacade", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditManager", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "curveV1Mock", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "failed", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "setUp", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "test_ACV1_2_01_constructor_sets_correct_values", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_ACV1_2_02A_constructor_reverts_for_unknown_addresses", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_ACV1_2_02_constructor_reverts_for_zero_addresses", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_ACV1_2_03_liquidity_functions_revert_if_user_has_no_account", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_ACV1_2_04_add_liquidity_works_as_expected", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_ACV1_2_05_remove_liquidity_works_as_expected", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_ACV1_2_06_remove_liquidity_imbalance_works_as_expected", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "underlying", data: BytesLike): Result; - - events: { - "AddCollateral(address,address,uint256)": EventFragment; - "CloseCreditAccount(address,address)": EventFragment; - "DecreaseBorrowedAmount(address,uint256)": EventFragment; - "ExecuteOrder(address,address)": EventFragment; - "IncreaseBorrowedAmount(address,uint256)": EventFragment; - "LiquidateCreditAccount(address,address,address,uint256)": EventFragment; - "LiquidateExpiredCreditAccount(address,address,address,uint256)": EventFragment; - "MultiCallFinished()": EventFragment; - "MultiCallStarted(address)": EventFragment; - "NewConfigurator(address)": EventFragment; - "OpenCreditAccount(address,address,uint256,uint16)": EventFragment; - "TokenDisabled(address,address)": EventFragment; - "TokenEnabled(address,address)": EventFragment; - "TransferAccount(address,address)": EventFragment; - "TransferAccountAllowed(address,address,bool)": EventFragment; - "log(string)": EventFragment; - "log_address(address)": EventFragment; - "log_bytes(bytes)": EventFragment; - "log_bytes32(bytes32)": EventFragment; - "log_int(int256)": EventFragment; - "log_named_address(string,address)": EventFragment; - "log_named_bytes(string,bytes)": EventFragment; - "log_named_bytes32(string,bytes32)": EventFragment; - "log_named_decimal_int(string,int256,uint256)": EventFragment; - "log_named_decimal_uint(string,uint256,uint256)": EventFragment; - "log_named_int(string,int256)": EventFragment; - "log_named_string(string,string)": EventFragment; - "log_named_uint(string,uint256)": EventFragment; - "log_string(string)": EventFragment; - "log_uint(uint256)": EventFragment; - "logs(bytes)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "AddCollateral"): EventFragment; - getEvent(nameOrSignatureOrTopic: "CloseCreditAccount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "DecreaseBorrowedAmount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ExecuteOrder"): EventFragment; - getEvent(nameOrSignatureOrTopic: "IncreaseBorrowedAmount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "LiquidateCreditAccount"): EventFragment; - getEvent( - nameOrSignatureOrTopic: "LiquidateExpiredCreditAccount" - ): EventFragment; - getEvent(nameOrSignatureOrTopic: "MultiCallFinished"): EventFragment; - getEvent(nameOrSignatureOrTopic: "MultiCallStarted"): EventFragment; - getEvent(nameOrSignatureOrTopic: "NewConfigurator"): EventFragment; - getEvent(nameOrSignatureOrTopic: "OpenCreditAccount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TokenDisabled"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TokenEnabled"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TransferAccount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TransferAccountAllowed"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "logs"): EventFragment; -} - -export interface AddCollateralEventObject { - onBehalfOf: string; - token: string; - value: BigNumber; -} -export type AddCollateralEvent = TypedEvent< - [string, string, BigNumber], - AddCollateralEventObject ->; - -export type AddCollateralEventFilter = TypedEventFilter; - -export interface CloseCreditAccountEventObject { - owner: string; - to: string; -} -export type CloseCreditAccountEvent = TypedEvent< - [string, string], - CloseCreditAccountEventObject ->; - -export type CloseCreditAccountEventFilter = - TypedEventFilter; - -export interface DecreaseBorrowedAmountEventObject { - borrower: string; - amount: BigNumber; -} -export type DecreaseBorrowedAmountEvent = TypedEvent< - [string, BigNumber], - DecreaseBorrowedAmountEventObject ->; - -export type DecreaseBorrowedAmountEventFilter = - TypedEventFilter; - -export interface ExecuteOrderEventObject { - borrower: string; - target: string; -} -export type ExecuteOrderEvent = TypedEvent< - [string, string], - ExecuteOrderEventObject ->; - -export type ExecuteOrderEventFilter = TypedEventFilter; - -export interface IncreaseBorrowedAmountEventObject { - borrower: string; - amount: BigNumber; -} -export type IncreaseBorrowedAmountEvent = TypedEvent< - [string, BigNumber], - IncreaseBorrowedAmountEventObject ->; - -export type IncreaseBorrowedAmountEventFilter = - TypedEventFilter; - -export interface LiquidateCreditAccountEventObject { - owner: string; - liquidator: string; - to: string; - remainingFunds: BigNumber; -} -export type LiquidateCreditAccountEvent = TypedEvent< - [string, string, string, BigNumber], - LiquidateCreditAccountEventObject ->; - -export type LiquidateCreditAccountEventFilter = - TypedEventFilter; - -export interface LiquidateExpiredCreditAccountEventObject { - owner: string; - liquidator: string; - to: string; - remainingFunds: BigNumber; -} -export type LiquidateExpiredCreditAccountEvent = TypedEvent< - [string, string, string, BigNumber], - LiquidateExpiredCreditAccountEventObject ->; - -export type LiquidateExpiredCreditAccountEventFilter = - TypedEventFilter; - -export interface MultiCallFinishedEventObject {} -export type MultiCallFinishedEvent = TypedEvent< - [], - MultiCallFinishedEventObject ->; - -export type MultiCallFinishedEventFilter = - TypedEventFilter; - -export interface MultiCallStartedEventObject { - borrower: string; -} -export type MultiCallStartedEvent = TypedEvent< - [string], - MultiCallStartedEventObject ->; - -export type MultiCallStartedEventFilter = - TypedEventFilter; - -export interface NewConfiguratorEventObject { - newConfigurator: string; -} -export type NewConfiguratorEvent = TypedEvent< - [string], - NewConfiguratorEventObject ->; - -export type NewConfiguratorEventFilter = TypedEventFilter; - -export interface OpenCreditAccountEventObject { - onBehalfOf: string; - creditAccount: string; - borrowAmount: BigNumber; - referralCode: number; -} -export type OpenCreditAccountEvent = TypedEvent< - [string, string, BigNumber, number], - OpenCreditAccountEventObject ->; - -export type OpenCreditAccountEventFilter = - TypedEventFilter; - -export interface TokenDisabledEventObject { - creditAccount: string; - token: string; -} -export type TokenDisabledEvent = TypedEvent< - [string, string], - TokenDisabledEventObject ->; - -export type TokenDisabledEventFilter = TypedEventFilter; - -export interface TokenEnabledEventObject { - creditAccount: string; - token: string; -} -export type TokenEnabledEvent = TypedEvent< - [string, string], - TokenEnabledEventObject ->; - -export type TokenEnabledEventFilter = TypedEventFilter; - -export interface TransferAccountEventObject { - oldOwner: string; - newOwner: string; -} -export type TransferAccountEvent = TypedEvent< - [string, string], - TransferAccountEventObject ->; - -export type TransferAccountEventFilter = TypedEventFilter; - -export interface TransferAccountAllowedEventObject { - from: string; - to: string; - state: boolean; -} -export type TransferAccountAllowedEvent = TypedEvent< - [string, string, boolean], - TransferAccountAllowedEventObject ->; - -export type TransferAccountAllowedEventFilter = - TypedEventFilter; - -export interface logEventObject { - arg0: string; -} -export type logEvent = TypedEvent<[string], logEventObject>; - -export type logEventFilter = TypedEventFilter; - -export interface log_addressEventObject { - arg0: string; -} -export type log_addressEvent = TypedEvent<[string], log_addressEventObject>; - -export type log_addressEventFilter = TypedEventFilter; - -export interface log_bytesEventObject { - arg0: string; -} -export type log_bytesEvent = TypedEvent<[string], log_bytesEventObject>; - -export type log_bytesEventFilter = TypedEventFilter; - -export interface log_bytes32EventObject { - arg0: string; -} -export type log_bytes32Event = TypedEvent<[string], log_bytes32EventObject>; - -export type log_bytes32EventFilter = TypedEventFilter; - -export interface log_intEventObject { - arg0: BigNumber; -} -export type log_intEvent = TypedEvent<[BigNumber], log_intEventObject>; - -export type log_intEventFilter = TypedEventFilter; - -export interface log_named_addressEventObject { - key: string; - val: string; -} -export type log_named_addressEvent = TypedEvent< - [string, string], - log_named_addressEventObject ->; - -export type log_named_addressEventFilter = - TypedEventFilter; - -export interface log_named_bytesEventObject { - key: string; - val: string; -} -export type log_named_bytesEvent = TypedEvent< - [string, string], - log_named_bytesEventObject ->; - -export type log_named_bytesEventFilter = TypedEventFilter; - -export interface log_named_bytes32EventObject { - key: string; - val: string; -} -export type log_named_bytes32Event = TypedEvent< - [string, string], - log_named_bytes32EventObject ->; - -export type log_named_bytes32EventFilter = - TypedEventFilter; - -export interface log_named_decimal_intEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_intEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_intEventObject ->; - -export type log_named_decimal_intEventFilter = - TypedEventFilter; - -export interface log_named_decimal_uintEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_uintEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_uintEventObject ->; - -export type log_named_decimal_uintEventFilter = - TypedEventFilter; - -export interface log_named_intEventObject { - key: string; - val: BigNumber; -} -export type log_named_intEvent = TypedEvent< - [string, BigNumber], - log_named_intEventObject ->; - -export type log_named_intEventFilter = TypedEventFilter; - -export interface log_named_stringEventObject { - key: string; - val: string; -} -export type log_named_stringEvent = TypedEvent< - [string, string], - log_named_stringEventObject ->; - -export type log_named_stringEventFilter = - TypedEventFilter; - -export interface log_named_uintEventObject { - key: string; - val: BigNumber; -} -export type log_named_uintEvent = TypedEvent< - [string, BigNumber], - log_named_uintEventObject ->; - -export type log_named_uintEventFilter = TypedEventFilter; - -export interface log_stringEventObject { - arg0: string; -} -export type log_stringEvent = TypedEvent<[string], log_stringEventObject>; - -export type log_stringEventFilter = TypedEventFilter; - -export interface log_uintEventObject { - arg0: BigNumber; -} -export type log_uintEvent = TypedEvent<[BigNumber], log_uintEventObject>; - -export type log_uintEventFilter = TypedEventFilter; - -export interface logsEventObject { - arg0: string; -} -export type logsEvent = TypedEvent<[string], logsEventObject>; - -export type logsEventFilter = TypedEventFilter; - -export interface CurveV1Adapter2AssetsTest extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: CurveV1Adapter2AssetsTestInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - IS_TEST(overrides?: CallOverrides): Promise<[boolean]>; - - adapter(overrides?: CallOverrides): Promise<[string]>; - - cft(overrides?: CallOverrides): Promise<[string]>; - - creditConfigurator(overrides?: CallOverrides): Promise<[string]>; - - creditFacade(overrides?: CallOverrides): Promise<[string]>; - - creditManager(overrides?: CallOverrides): Promise<[string]>; - - curveV1Mock(overrides?: CallOverrides): Promise<[string]>; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_2_01_constructor_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_2_02A_constructor_reverts_for_unknown_addresses( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_2_02_constructor_reverts_for_zero_addresses( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_2_03_liquidity_functions_revert_if_user_has_no_account( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_2_04_add_liquidity_works_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_2_05_remove_liquidity_works_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_2_06_remove_liquidity_imbalance_works_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise<[string]>; - }; - - IS_TEST(overrides?: CallOverrides): Promise; - - adapter(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - curveV1Mock(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_2_01_constructor_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_2_02A_constructor_reverts_for_unknown_addresses( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_2_02_constructor_reverts_for_zero_addresses( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_2_03_liquidity_functions_revert_if_user_has_no_account( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_2_04_add_liquidity_works_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_2_05_remove_liquidity_works_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_2_06_remove_liquidity_imbalance_works_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - - callStatic: { - IS_TEST(overrides?: CallOverrides): Promise; - - adapter(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - curveV1Mock(overrides?: CallOverrides): Promise; - - failed(overrides?: CallOverrides): Promise; - - setUp(overrides?: CallOverrides): Promise; - - test_ACV1_2_01_constructor_sets_correct_values( - overrides?: CallOverrides - ): Promise; - - test_ACV1_2_02A_constructor_reverts_for_unknown_addresses( - overrides?: CallOverrides - ): Promise; - - test_ACV1_2_02_constructor_reverts_for_zero_addresses( - overrides?: CallOverrides - ): Promise; - - test_ACV1_2_03_liquidity_functions_revert_if_user_has_no_account( - overrides?: CallOverrides - ): Promise; - - test_ACV1_2_04_add_liquidity_works_as_expected( - overrides?: CallOverrides - ): Promise; - - test_ACV1_2_05_remove_liquidity_works_as_expected( - overrides?: CallOverrides - ): Promise; - - test_ACV1_2_06_remove_liquidity_imbalance_works_as_expected( - overrides?: CallOverrides - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - }; - - filters: { - "AddCollateral(address,address,uint256)"( - onBehalfOf?: string | null, - token?: string | null, - value?: null - ): AddCollateralEventFilter; - AddCollateral( - onBehalfOf?: string | null, - token?: string | null, - value?: null - ): AddCollateralEventFilter; - - "CloseCreditAccount(address,address)"( - owner?: string | null, - to?: string | null - ): CloseCreditAccountEventFilter; - CloseCreditAccount( - owner?: string | null, - to?: string | null - ): CloseCreditAccountEventFilter; - - "DecreaseBorrowedAmount(address,uint256)"( - borrower?: string | null, - amount?: null - ): DecreaseBorrowedAmountEventFilter; - DecreaseBorrowedAmount( - borrower?: string | null, - amount?: null - ): DecreaseBorrowedAmountEventFilter; - - "ExecuteOrder(address,address)"( - borrower?: string | null, - target?: string | null - ): ExecuteOrderEventFilter; - ExecuteOrder( - borrower?: string | null, - target?: string | null - ): ExecuteOrderEventFilter; - - "IncreaseBorrowedAmount(address,uint256)"( - borrower?: string | null, - amount?: null - ): IncreaseBorrowedAmountEventFilter; - IncreaseBorrowedAmount( - borrower?: string | null, - amount?: null - ): IncreaseBorrowedAmountEventFilter; - - "LiquidateCreditAccount(address,address,address,uint256)"( - owner?: string | null, - liquidator?: string | null, - to?: string | null, - remainingFunds?: null - ): LiquidateCreditAccountEventFilter; - LiquidateCreditAccount( - owner?: string | null, - liquidator?: string | null, - to?: string | null, - remainingFunds?: null - ): LiquidateCreditAccountEventFilter; - - "LiquidateExpiredCreditAccount(address,address,address,uint256)"( - owner?: string | null, - liquidator?: string | null, - to?: string | null, - remainingFunds?: null - ): LiquidateExpiredCreditAccountEventFilter; - LiquidateExpiredCreditAccount( - owner?: string | null, - liquidator?: string | null, - to?: string | null, - remainingFunds?: null - ): LiquidateExpiredCreditAccountEventFilter; - - "MultiCallFinished()"(): MultiCallFinishedEventFilter; - MultiCallFinished(): MultiCallFinishedEventFilter; - - "MultiCallStarted(address)"( - borrower?: string | null - ): MultiCallStartedEventFilter; - MultiCallStarted(borrower?: string | null): MultiCallStartedEventFilter; - - "NewConfigurator(address)"( - newConfigurator?: string | null - ): NewConfiguratorEventFilter; - NewConfigurator( - newConfigurator?: string | null - ): NewConfiguratorEventFilter; - - "OpenCreditAccount(address,address,uint256,uint16)"( - onBehalfOf?: string | null, - creditAccount?: string | null, - borrowAmount?: null, - referralCode?: null - ): OpenCreditAccountEventFilter; - OpenCreditAccount( - onBehalfOf?: string | null, - creditAccount?: string | null, - borrowAmount?: null, - referralCode?: null - ): OpenCreditAccountEventFilter; - - "TokenDisabled(address,address)"( - creditAccount?: null, - token?: null - ): TokenDisabledEventFilter; - TokenDisabled(creditAccount?: null, token?: null): TokenDisabledEventFilter; - - "TokenEnabled(address,address)"( - creditAccount?: null, - token?: null - ): TokenEnabledEventFilter; - TokenEnabled(creditAccount?: null, token?: null): TokenEnabledEventFilter; - - "TransferAccount(address,address)"( - oldOwner?: string | null, - newOwner?: string | null - ): TransferAccountEventFilter; - TransferAccount( - oldOwner?: string | null, - newOwner?: string | null - ): TransferAccountEventFilter; - - "TransferAccountAllowed(address,address,bool)"( - from?: string | null, - to?: string | null, - state?: null - ): TransferAccountAllowedEventFilter; - TransferAccountAllowed( - from?: string | null, - to?: string | null, - state?: null - ): TransferAccountAllowedEventFilter; - - "log(string)"(arg0?: null): logEventFilter; - log(arg0?: null): logEventFilter; - - "log_address(address)"(arg0?: null): log_addressEventFilter; - log_address(arg0?: null): log_addressEventFilter; - - "log_bytes(bytes)"(arg0?: null): log_bytesEventFilter; - log_bytes(arg0?: null): log_bytesEventFilter; - - "log_bytes32(bytes32)"(arg0?: null): log_bytes32EventFilter; - log_bytes32(arg0?: null): log_bytes32EventFilter; - - "log_int(int256)"(arg0?: null): log_intEventFilter; - log_int(arg0?: null): log_intEventFilter; - - "log_named_address(string,address)"( - key?: null, - val?: null - ): log_named_addressEventFilter; - log_named_address(key?: null, val?: null): log_named_addressEventFilter; - - "log_named_bytes(string,bytes)"( - key?: null, - val?: null - ): log_named_bytesEventFilter; - log_named_bytes(key?: null, val?: null): log_named_bytesEventFilter; - - "log_named_bytes32(string,bytes32)"( - key?: null, - val?: null - ): log_named_bytes32EventFilter; - log_named_bytes32(key?: null, val?: null): log_named_bytes32EventFilter; - - "log_named_decimal_int(string,int256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - log_named_decimal_int( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - - "log_named_decimal_uint(string,uint256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - log_named_decimal_uint( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - - "log_named_int(string,int256)"( - key?: null, - val?: null - ): log_named_intEventFilter; - log_named_int(key?: null, val?: null): log_named_intEventFilter; - - "log_named_string(string,string)"( - key?: null, - val?: null - ): log_named_stringEventFilter; - log_named_string(key?: null, val?: null): log_named_stringEventFilter; - - "log_named_uint(string,uint256)"( - key?: null, - val?: null - ): log_named_uintEventFilter; - log_named_uint(key?: null, val?: null): log_named_uintEventFilter; - - "log_string(string)"(arg0?: null): log_stringEventFilter; - log_string(arg0?: null): log_stringEventFilter; - - "log_uint(uint256)"(arg0?: null): log_uintEventFilter; - log_uint(arg0?: null): log_uintEventFilter; - - "logs(bytes)"(arg0?: null): logsEventFilter; - logs(arg0?: null): logsEventFilter; - }; - - estimateGas: { - IS_TEST(overrides?: CallOverrides): Promise; - - adapter(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - curveV1Mock(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_2_01_constructor_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_2_02A_constructor_reverts_for_unknown_addresses( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_2_02_constructor_reverts_for_zero_addresses( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_2_03_liquidity_functions_revert_if_user_has_no_account( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_2_04_add_liquidity_works_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_2_05_remove_liquidity_works_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_2_06_remove_liquidity_imbalance_works_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - IS_TEST(overrides?: CallOverrides): Promise; - - adapter(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator( - overrides?: CallOverrides - ): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - curveV1Mock(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_2_01_constructor_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_2_02A_constructor_reverts_for_unknown_addresses( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_2_02_constructor_reverts_for_zero_addresses( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_2_03_liquidity_functions_revert_if_user_has_no_account( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_2_04_add_liquidity_works_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_2_05_remove_liquidity_works_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_2_06_remove_liquidity_imbalance_works_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/test/adapters/CurveV1Adapter_2AssetsTest.t.sol/index.ts b/src/types/contracts/test/adapters/CurveV1Adapter_2AssetsTest.t.sol/index.ts deleted file mode 100644 index 70fc7c23..00000000 --- a/src/types/contracts/test/adapters/CurveV1Adapter_2AssetsTest.t.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { CurveV1Adapter2AssetsTest } from "./CurveV1Adapter2AssetsTest"; diff --git a/src/types/contracts/test/adapters/CurveV1Adapter_3AssetsTest.t.sol/CurveV1Adapter3AssetsTest.ts b/src/types/contracts/test/adapters/CurveV1Adapter_3AssetsTest.t.sol/CurveV1Adapter3AssetsTest.ts deleted file mode 100644 index 47623774..00000000 --- a/src/types/contracts/test/adapters/CurveV1Adapter_3AssetsTest.t.sol/CurveV1Adapter3AssetsTest.ts +++ /dev/null @@ -1,1080 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface CurveV1Adapter3AssetsTestInterface extends utils.Interface { - functions: { - "IS_TEST()": FunctionFragment; - "adapter()": FunctionFragment; - "cft()": FunctionFragment; - "creditConfigurator()": FunctionFragment; - "creditFacade()": FunctionFragment; - "creditManager()": FunctionFragment; - "curveV1Mock()": FunctionFragment; - "failed()": FunctionFragment; - "setUp()": FunctionFragment; - "test_ACV1_3_01_constructor_sets_correct_values()": FunctionFragment; - "test_ACV1_3_02A_constructor_reverts_for_unknown_addresses()": FunctionFragment; - "test_ACV1_3_02_constructor_reverts_for_zero_addresses()": FunctionFragment; - "test_ACV1_3_03_liquidity_functions_revert_if_user_has_no_account()": FunctionFragment; - "test_ACV1_3_04_add_liquidity_works_as_expected()": FunctionFragment; - "test_ACV1_3_05_remove_liquidity_works_as_expected()": FunctionFragment; - "test_ACV1_3_06_remove_liquidity_imbalance_works_as_expected()": FunctionFragment; - "underlying()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "IS_TEST" - | "adapter" - | "cft" - | "creditConfigurator" - | "creditFacade" - | "creditManager" - | "curveV1Mock" - | "failed" - | "setUp" - | "test_ACV1_3_01_constructor_sets_correct_values" - | "test_ACV1_3_02A_constructor_reverts_for_unknown_addresses" - | "test_ACV1_3_02_constructor_reverts_for_zero_addresses" - | "test_ACV1_3_03_liquidity_functions_revert_if_user_has_no_account" - | "test_ACV1_3_04_add_liquidity_works_as_expected" - | "test_ACV1_3_05_remove_liquidity_works_as_expected" - | "test_ACV1_3_06_remove_liquidity_imbalance_works_as_expected" - | "underlying" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "IS_TEST", values?: undefined): string; - encodeFunctionData(functionFragment: "adapter", values?: undefined): string; - encodeFunctionData(functionFragment: "cft", values?: undefined): string; - encodeFunctionData( - functionFragment: "creditConfigurator", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditFacade", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditManager", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "curveV1Mock", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "failed", values?: undefined): string; - encodeFunctionData(functionFragment: "setUp", values?: undefined): string; - encodeFunctionData( - functionFragment: "test_ACV1_3_01_constructor_sets_correct_values", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_ACV1_3_02A_constructor_reverts_for_unknown_addresses", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_ACV1_3_02_constructor_reverts_for_zero_addresses", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_ACV1_3_03_liquidity_functions_revert_if_user_has_no_account", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_ACV1_3_04_add_liquidity_works_as_expected", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_ACV1_3_05_remove_liquidity_works_as_expected", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_ACV1_3_06_remove_liquidity_imbalance_works_as_expected", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "underlying", - values?: undefined - ): string; - - decodeFunctionResult(functionFragment: "IS_TEST", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "adapter", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "cft", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "creditConfigurator", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditFacade", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditManager", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "curveV1Mock", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "failed", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "setUp", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "test_ACV1_3_01_constructor_sets_correct_values", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_ACV1_3_02A_constructor_reverts_for_unknown_addresses", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_ACV1_3_02_constructor_reverts_for_zero_addresses", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_ACV1_3_03_liquidity_functions_revert_if_user_has_no_account", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_ACV1_3_04_add_liquidity_works_as_expected", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_ACV1_3_05_remove_liquidity_works_as_expected", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_ACV1_3_06_remove_liquidity_imbalance_works_as_expected", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "underlying", data: BytesLike): Result; - - events: { - "AddCollateral(address,address,uint256)": EventFragment; - "CloseCreditAccount(address,address)": EventFragment; - "DecreaseBorrowedAmount(address,uint256)": EventFragment; - "ExecuteOrder(address,address)": EventFragment; - "IncreaseBorrowedAmount(address,uint256)": EventFragment; - "LiquidateCreditAccount(address,address,address,uint256)": EventFragment; - "LiquidateExpiredCreditAccount(address,address,address,uint256)": EventFragment; - "MultiCallFinished()": EventFragment; - "MultiCallStarted(address)": EventFragment; - "NewConfigurator(address)": EventFragment; - "OpenCreditAccount(address,address,uint256,uint16)": EventFragment; - "TokenDisabled(address,address)": EventFragment; - "TokenEnabled(address,address)": EventFragment; - "TransferAccount(address,address)": EventFragment; - "TransferAccountAllowed(address,address,bool)": EventFragment; - "log(string)": EventFragment; - "log_address(address)": EventFragment; - "log_bytes(bytes)": EventFragment; - "log_bytes32(bytes32)": EventFragment; - "log_int(int256)": EventFragment; - "log_named_address(string,address)": EventFragment; - "log_named_bytes(string,bytes)": EventFragment; - "log_named_bytes32(string,bytes32)": EventFragment; - "log_named_decimal_int(string,int256,uint256)": EventFragment; - "log_named_decimal_uint(string,uint256,uint256)": EventFragment; - "log_named_int(string,int256)": EventFragment; - "log_named_string(string,string)": EventFragment; - "log_named_uint(string,uint256)": EventFragment; - "log_string(string)": EventFragment; - "log_uint(uint256)": EventFragment; - "logs(bytes)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "AddCollateral"): EventFragment; - getEvent(nameOrSignatureOrTopic: "CloseCreditAccount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "DecreaseBorrowedAmount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ExecuteOrder"): EventFragment; - getEvent(nameOrSignatureOrTopic: "IncreaseBorrowedAmount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "LiquidateCreditAccount"): EventFragment; - getEvent( - nameOrSignatureOrTopic: "LiquidateExpiredCreditAccount" - ): EventFragment; - getEvent(nameOrSignatureOrTopic: "MultiCallFinished"): EventFragment; - getEvent(nameOrSignatureOrTopic: "MultiCallStarted"): EventFragment; - getEvent(nameOrSignatureOrTopic: "NewConfigurator"): EventFragment; - getEvent(nameOrSignatureOrTopic: "OpenCreditAccount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TokenDisabled"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TokenEnabled"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TransferAccount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TransferAccountAllowed"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "logs"): EventFragment; -} - -export interface AddCollateralEventObject { - onBehalfOf: string; - token: string; - value: BigNumber; -} -export type AddCollateralEvent = TypedEvent< - [string, string, BigNumber], - AddCollateralEventObject ->; - -export type AddCollateralEventFilter = TypedEventFilter; - -export interface CloseCreditAccountEventObject { - owner: string; - to: string; -} -export type CloseCreditAccountEvent = TypedEvent< - [string, string], - CloseCreditAccountEventObject ->; - -export type CloseCreditAccountEventFilter = - TypedEventFilter; - -export interface DecreaseBorrowedAmountEventObject { - borrower: string; - amount: BigNumber; -} -export type DecreaseBorrowedAmountEvent = TypedEvent< - [string, BigNumber], - DecreaseBorrowedAmountEventObject ->; - -export type DecreaseBorrowedAmountEventFilter = - TypedEventFilter; - -export interface ExecuteOrderEventObject { - borrower: string; - target: string; -} -export type ExecuteOrderEvent = TypedEvent< - [string, string], - ExecuteOrderEventObject ->; - -export type ExecuteOrderEventFilter = TypedEventFilter; - -export interface IncreaseBorrowedAmountEventObject { - borrower: string; - amount: BigNumber; -} -export type IncreaseBorrowedAmountEvent = TypedEvent< - [string, BigNumber], - IncreaseBorrowedAmountEventObject ->; - -export type IncreaseBorrowedAmountEventFilter = - TypedEventFilter; - -export interface LiquidateCreditAccountEventObject { - owner: string; - liquidator: string; - to: string; - remainingFunds: BigNumber; -} -export type LiquidateCreditAccountEvent = TypedEvent< - [string, string, string, BigNumber], - LiquidateCreditAccountEventObject ->; - -export type LiquidateCreditAccountEventFilter = - TypedEventFilter; - -export interface LiquidateExpiredCreditAccountEventObject { - owner: string; - liquidator: string; - to: string; - remainingFunds: BigNumber; -} -export type LiquidateExpiredCreditAccountEvent = TypedEvent< - [string, string, string, BigNumber], - LiquidateExpiredCreditAccountEventObject ->; - -export type LiquidateExpiredCreditAccountEventFilter = - TypedEventFilter; - -export interface MultiCallFinishedEventObject {} -export type MultiCallFinishedEvent = TypedEvent< - [], - MultiCallFinishedEventObject ->; - -export type MultiCallFinishedEventFilter = - TypedEventFilter; - -export interface MultiCallStartedEventObject { - borrower: string; -} -export type MultiCallStartedEvent = TypedEvent< - [string], - MultiCallStartedEventObject ->; - -export type MultiCallStartedEventFilter = - TypedEventFilter; - -export interface NewConfiguratorEventObject { - newConfigurator: string; -} -export type NewConfiguratorEvent = TypedEvent< - [string], - NewConfiguratorEventObject ->; - -export type NewConfiguratorEventFilter = TypedEventFilter; - -export interface OpenCreditAccountEventObject { - onBehalfOf: string; - creditAccount: string; - borrowAmount: BigNumber; - referralCode: number; -} -export type OpenCreditAccountEvent = TypedEvent< - [string, string, BigNumber, number], - OpenCreditAccountEventObject ->; - -export type OpenCreditAccountEventFilter = - TypedEventFilter; - -export interface TokenDisabledEventObject { - creditAccount: string; - token: string; -} -export type TokenDisabledEvent = TypedEvent< - [string, string], - TokenDisabledEventObject ->; - -export type TokenDisabledEventFilter = TypedEventFilter; - -export interface TokenEnabledEventObject { - creditAccount: string; - token: string; -} -export type TokenEnabledEvent = TypedEvent< - [string, string], - TokenEnabledEventObject ->; - -export type TokenEnabledEventFilter = TypedEventFilter; - -export interface TransferAccountEventObject { - oldOwner: string; - newOwner: string; -} -export type TransferAccountEvent = TypedEvent< - [string, string], - TransferAccountEventObject ->; - -export type TransferAccountEventFilter = TypedEventFilter; - -export interface TransferAccountAllowedEventObject { - from: string; - to: string; - state: boolean; -} -export type TransferAccountAllowedEvent = TypedEvent< - [string, string, boolean], - TransferAccountAllowedEventObject ->; - -export type TransferAccountAllowedEventFilter = - TypedEventFilter; - -export interface logEventObject { - arg0: string; -} -export type logEvent = TypedEvent<[string], logEventObject>; - -export type logEventFilter = TypedEventFilter; - -export interface log_addressEventObject { - arg0: string; -} -export type log_addressEvent = TypedEvent<[string], log_addressEventObject>; - -export type log_addressEventFilter = TypedEventFilter; - -export interface log_bytesEventObject { - arg0: string; -} -export type log_bytesEvent = TypedEvent<[string], log_bytesEventObject>; - -export type log_bytesEventFilter = TypedEventFilter; - -export interface log_bytes32EventObject { - arg0: string; -} -export type log_bytes32Event = TypedEvent<[string], log_bytes32EventObject>; - -export type log_bytes32EventFilter = TypedEventFilter; - -export interface log_intEventObject { - arg0: BigNumber; -} -export type log_intEvent = TypedEvent<[BigNumber], log_intEventObject>; - -export type log_intEventFilter = TypedEventFilter; - -export interface log_named_addressEventObject { - key: string; - val: string; -} -export type log_named_addressEvent = TypedEvent< - [string, string], - log_named_addressEventObject ->; - -export type log_named_addressEventFilter = - TypedEventFilter; - -export interface log_named_bytesEventObject { - key: string; - val: string; -} -export type log_named_bytesEvent = TypedEvent< - [string, string], - log_named_bytesEventObject ->; - -export type log_named_bytesEventFilter = TypedEventFilter; - -export interface log_named_bytes32EventObject { - key: string; - val: string; -} -export type log_named_bytes32Event = TypedEvent< - [string, string], - log_named_bytes32EventObject ->; - -export type log_named_bytes32EventFilter = - TypedEventFilter; - -export interface log_named_decimal_intEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_intEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_intEventObject ->; - -export type log_named_decimal_intEventFilter = - TypedEventFilter; - -export interface log_named_decimal_uintEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_uintEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_uintEventObject ->; - -export type log_named_decimal_uintEventFilter = - TypedEventFilter; - -export interface log_named_intEventObject { - key: string; - val: BigNumber; -} -export type log_named_intEvent = TypedEvent< - [string, BigNumber], - log_named_intEventObject ->; - -export type log_named_intEventFilter = TypedEventFilter; - -export interface log_named_stringEventObject { - key: string; - val: string; -} -export type log_named_stringEvent = TypedEvent< - [string, string], - log_named_stringEventObject ->; - -export type log_named_stringEventFilter = - TypedEventFilter; - -export interface log_named_uintEventObject { - key: string; - val: BigNumber; -} -export type log_named_uintEvent = TypedEvent< - [string, BigNumber], - log_named_uintEventObject ->; - -export type log_named_uintEventFilter = TypedEventFilter; - -export interface log_stringEventObject { - arg0: string; -} -export type log_stringEvent = TypedEvent<[string], log_stringEventObject>; - -export type log_stringEventFilter = TypedEventFilter; - -export interface log_uintEventObject { - arg0: BigNumber; -} -export type log_uintEvent = TypedEvent<[BigNumber], log_uintEventObject>; - -export type log_uintEventFilter = TypedEventFilter; - -export interface logsEventObject { - arg0: string; -} -export type logsEvent = TypedEvent<[string], logsEventObject>; - -export type logsEventFilter = TypedEventFilter; - -export interface CurveV1Adapter3AssetsTest extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: CurveV1Adapter3AssetsTestInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - IS_TEST(overrides?: CallOverrides): Promise<[boolean]>; - - adapter(overrides?: CallOverrides): Promise<[string]>; - - cft(overrides?: CallOverrides): Promise<[string]>; - - creditConfigurator(overrides?: CallOverrides): Promise<[string]>; - - creditFacade(overrides?: CallOverrides): Promise<[string]>; - - creditManager(overrides?: CallOverrides): Promise<[string]>; - - curveV1Mock(overrides?: CallOverrides): Promise<[string]>; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_3_01_constructor_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_3_02A_constructor_reverts_for_unknown_addresses( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_3_02_constructor_reverts_for_zero_addresses( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_3_03_liquidity_functions_revert_if_user_has_no_account( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_3_04_add_liquidity_works_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_3_05_remove_liquidity_works_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_3_06_remove_liquidity_imbalance_works_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise<[string]>; - }; - - IS_TEST(overrides?: CallOverrides): Promise; - - adapter(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - curveV1Mock(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_3_01_constructor_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_3_02A_constructor_reverts_for_unknown_addresses( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_3_02_constructor_reverts_for_zero_addresses( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_3_03_liquidity_functions_revert_if_user_has_no_account( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_3_04_add_liquidity_works_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_3_05_remove_liquidity_works_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_3_06_remove_liquidity_imbalance_works_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - - callStatic: { - IS_TEST(overrides?: CallOverrides): Promise; - - adapter(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - curveV1Mock(overrides?: CallOverrides): Promise; - - failed(overrides?: CallOverrides): Promise; - - setUp(overrides?: CallOverrides): Promise; - - test_ACV1_3_01_constructor_sets_correct_values( - overrides?: CallOverrides - ): Promise; - - test_ACV1_3_02A_constructor_reverts_for_unknown_addresses( - overrides?: CallOverrides - ): Promise; - - test_ACV1_3_02_constructor_reverts_for_zero_addresses( - overrides?: CallOverrides - ): Promise; - - test_ACV1_3_03_liquidity_functions_revert_if_user_has_no_account( - overrides?: CallOverrides - ): Promise; - - test_ACV1_3_04_add_liquidity_works_as_expected( - overrides?: CallOverrides - ): Promise; - - test_ACV1_3_05_remove_liquidity_works_as_expected( - overrides?: CallOverrides - ): Promise; - - test_ACV1_3_06_remove_liquidity_imbalance_works_as_expected( - overrides?: CallOverrides - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - }; - - filters: { - "AddCollateral(address,address,uint256)"( - onBehalfOf?: string | null, - token?: string | null, - value?: null - ): AddCollateralEventFilter; - AddCollateral( - onBehalfOf?: string | null, - token?: string | null, - value?: null - ): AddCollateralEventFilter; - - "CloseCreditAccount(address,address)"( - owner?: string | null, - to?: string | null - ): CloseCreditAccountEventFilter; - CloseCreditAccount( - owner?: string | null, - to?: string | null - ): CloseCreditAccountEventFilter; - - "DecreaseBorrowedAmount(address,uint256)"( - borrower?: string | null, - amount?: null - ): DecreaseBorrowedAmountEventFilter; - DecreaseBorrowedAmount( - borrower?: string | null, - amount?: null - ): DecreaseBorrowedAmountEventFilter; - - "ExecuteOrder(address,address)"( - borrower?: string | null, - target?: string | null - ): ExecuteOrderEventFilter; - ExecuteOrder( - borrower?: string | null, - target?: string | null - ): ExecuteOrderEventFilter; - - "IncreaseBorrowedAmount(address,uint256)"( - borrower?: string | null, - amount?: null - ): IncreaseBorrowedAmountEventFilter; - IncreaseBorrowedAmount( - borrower?: string | null, - amount?: null - ): IncreaseBorrowedAmountEventFilter; - - "LiquidateCreditAccount(address,address,address,uint256)"( - owner?: string | null, - liquidator?: string | null, - to?: string | null, - remainingFunds?: null - ): LiquidateCreditAccountEventFilter; - LiquidateCreditAccount( - owner?: string | null, - liquidator?: string | null, - to?: string | null, - remainingFunds?: null - ): LiquidateCreditAccountEventFilter; - - "LiquidateExpiredCreditAccount(address,address,address,uint256)"( - owner?: string | null, - liquidator?: string | null, - to?: string | null, - remainingFunds?: null - ): LiquidateExpiredCreditAccountEventFilter; - LiquidateExpiredCreditAccount( - owner?: string | null, - liquidator?: string | null, - to?: string | null, - remainingFunds?: null - ): LiquidateExpiredCreditAccountEventFilter; - - "MultiCallFinished()"(): MultiCallFinishedEventFilter; - MultiCallFinished(): MultiCallFinishedEventFilter; - - "MultiCallStarted(address)"( - borrower?: string | null - ): MultiCallStartedEventFilter; - MultiCallStarted(borrower?: string | null): MultiCallStartedEventFilter; - - "NewConfigurator(address)"( - newConfigurator?: string | null - ): NewConfiguratorEventFilter; - NewConfigurator( - newConfigurator?: string | null - ): NewConfiguratorEventFilter; - - "OpenCreditAccount(address,address,uint256,uint16)"( - onBehalfOf?: string | null, - creditAccount?: string | null, - borrowAmount?: null, - referralCode?: null - ): OpenCreditAccountEventFilter; - OpenCreditAccount( - onBehalfOf?: string | null, - creditAccount?: string | null, - borrowAmount?: null, - referralCode?: null - ): OpenCreditAccountEventFilter; - - "TokenDisabled(address,address)"( - creditAccount?: null, - token?: null - ): TokenDisabledEventFilter; - TokenDisabled(creditAccount?: null, token?: null): TokenDisabledEventFilter; - - "TokenEnabled(address,address)"( - creditAccount?: null, - token?: null - ): TokenEnabledEventFilter; - TokenEnabled(creditAccount?: null, token?: null): TokenEnabledEventFilter; - - "TransferAccount(address,address)"( - oldOwner?: string | null, - newOwner?: string | null - ): TransferAccountEventFilter; - TransferAccount( - oldOwner?: string | null, - newOwner?: string | null - ): TransferAccountEventFilter; - - "TransferAccountAllowed(address,address,bool)"( - from?: string | null, - to?: string | null, - state?: null - ): TransferAccountAllowedEventFilter; - TransferAccountAllowed( - from?: string | null, - to?: string | null, - state?: null - ): TransferAccountAllowedEventFilter; - - "log(string)"(arg0?: null): logEventFilter; - log(arg0?: null): logEventFilter; - - "log_address(address)"(arg0?: null): log_addressEventFilter; - log_address(arg0?: null): log_addressEventFilter; - - "log_bytes(bytes)"(arg0?: null): log_bytesEventFilter; - log_bytes(arg0?: null): log_bytesEventFilter; - - "log_bytes32(bytes32)"(arg0?: null): log_bytes32EventFilter; - log_bytes32(arg0?: null): log_bytes32EventFilter; - - "log_int(int256)"(arg0?: null): log_intEventFilter; - log_int(arg0?: null): log_intEventFilter; - - "log_named_address(string,address)"( - key?: null, - val?: null - ): log_named_addressEventFilter; - log_named_address(key?: null, val?: null): log_named_addressEventFilter; - - "log_named_bytes(string,bytes)"( - key?: null, - val?: null - ): log_named_bytesEventFilter; - log_named_bytes(key?: null, val?: null): log_named_bytesEventFilter; - - "log_named_bytes32(string,bytes32)"( - key?: null, - val?: null - ): log_named_bytes32EventFilter; - log_named_bytes32(key?: null, val?: null): log_named_bytes32EventFilter; - - "log_named_decimal_int(string,int256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - log_named_decimal_int( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - - "log_named_decimal_uint(string,uint256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - log_named_decimal_uint( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - - "log_named_int(string,int256)"( - key?: null, - val?: null - ): log_named_intEventFilter; - log_named_int(key?: null, val?: null): log_named_intEventFilter; - - "log_named_string(string,string)"( - key?: null, - val?: null - ): log_named_stringEventFilter; - log_named_string(key?: null, val?: null): log_named_stringEventFilter; - - "log_named_uint(string,uint256)"( - key?: null, - val?: null - ): log_named_uintEventFilter; - log_named_uint(key?: null, val?: null): log_named_uintEventFilter; - - "log_string(string)"(arg0?: null): log_stringEventFilter; - log_string(arg0?: null): log_stringEventFilter; - - "log_uint(uint256)"(arg0?: null): log_uintEventFilter; - log_uint(arg0?: null): log_uintEventFilter; - - "logs(bytes)"(arg0?: null): logsEventFilter; - logs(arg0?: null): logsEventFilter; - }; - - estimateGas: { - IS_TEST(overrides?: CallOverrides): Promise; - - adapter(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - curveV1Mock(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_3_01_constructor_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_3_02A_constructor_reverts_for_unknown_addresses( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_3_02_constructor_reverts_for_zero_addresses( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_3_03_liquidity_functions_revert_if_user_has_no_account( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_3_04_add_liquidity_works_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_3_05_remove_liquidity_works_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_3_06_remove_liquidity_imbalance_works_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - IS_TEST(overrides?: CallOverrides): Promise; - - adapter(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator( - overrides?: CallOverrides - ): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - curveV1Mock(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_3_01_constructor_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_3_02A_constructor_reverts_for_unknown_addresses( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_3_02_constructor_reverts_for_zero_addresses( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_3_03_liquidity_functions_revert_if_user_has_no_account( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_3_04_add_liquidity_works_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_3_05_remove_liquidity_works_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_3_06_remove_liquidity_imbalance_works_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/test/adapters/CurveV1Adapter_3AssetsTest.t.sol/index.ts b/src/types/contracts/test/adapters/CurveV1Adapter_3AssetsTest.t.sol/index.ts deleted file mode 100644 index af1751ee..00000000 --- a/src/types/contracts/test/adapters/CurveV1Adapter_3AssetsTest.t.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { CurveV1Adapter3AssetsTest } from "./CurveV1Adapter3AssetsTest"; diff --git a/src/types/contracts/test/adapters/CurveV1Adapter_4AssetsTest.t.sol/CurveV1Adapter4AssetsTest.ts b/src/types/contracts/test/adapters/CurveV1Adapter_4AssetsTest.t.sol/CurveV1Adapter4AssetsTest.ts deleted file mode 100644 index 40411fd0..00000000 --- a/src/types/contracts/test/adapters/CurveV1Adapter_4AssetsTest.t.sol/CurveV1Adapter4AssetsTest.ts +++ /dev/null @@ -1,1110 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface CurveV1Adapter4AssetsTestInterface extends utils.Interface { - functions: { - "IS_TEST()": FunctionFragment; - "adapter()": FunctionFragment; - "cft()": FunctionFragment; - "creditConfigurator()": FunctionFragment; - "creditFacade()": FunctionFragment; - "creditManager()": FunctionFragment; - "curveV1Mock()": FunctionFragment; - "failed()": FunctionFragment; - "setUp()": FunctionFragment; - "test_ACV1_4_01_constructor_sets_correct_values()": FunctionFragment; - "test_ACV1_4_02A_constructor_reverts_for_unknown_addresses()": FunctionFragment; - "test_ACV1_4_02_constructor_reverts_for_zero_addresses()": FunctionFragment; - "test_ACV1_4_03_liquidity_functions_revert_if_user_has_no_account()": FunctionFragment; - "test_ACV1_4_04A_add_all_liquidity_one_coin_works_as_expected()": FunctionFragment; - "test_ACV1_4_04_add_liquidity_works_as_expected()": FunctionFragment; - "test_ACV1_4_05_remove_liquidity_works_as_expected()": FunctionFragment; - "test_ACV1_4_06_remove_liquidity_imbalance_works_as_expected()": FunctionFragment; - "underlying()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "IS_TEST" - | "adapter" - | "cft" - | "creditConfigurator" - | "creditFacade" - | "creditManager" - | "curveV1Mock" - | "failed" - | "setUp" - | "test_ACV1_4_01_constructor_sets_correct_values" - | "test_ACV1_4_02A_constructor_reverts_for_unknown_addresses" - | "test_ACV1_4_02_constructor_reverts_for_zero_addresses" - | "test_ACV1_4_03_liquidity_functions_revert_if_user_has_no_account" - | "test_ACV1_4_04A_add_all_liquidity_one_coin_works_as_expected" - | "test_ACV1_4_04_add_liquidity_works_as_expected" - | "test_ACV1_4_05_remove_liquidity_works_as_expected" - | "test_ACV1_4_06_remove_liquidity_imbalance_works_as_expected" - | "underlying" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "IS_TEST", values?: undefined): string; - encodeFunctionData(functionFragment: "adapter", values?: undefined): string; - encodeFunctionData(functionFragment: "cft", values?: undefined): string; - encodeFunctionData( - functionFragment: "creditConfigurator", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditFacade", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditManager", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "curveV1Mock", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "failed", values?: undefined): string; - encodeFunctionData(functionFragment: "setUp", values?: undefined): string; - encodeFunctionData( - functionFragment: "test_ACV1_4_01_constructor_sets_correct_values", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_ACV1_4_02A_constructor_reverts_for_unknown_addresses", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_ACV1_4_02_constructor_reverts_for_zero_addresses", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_ACV1_4_03_liquidity_functions_revert_if_user_has_no_account", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_ACV1_4_04A_add_all_liquidity_one_coin_works_as_expected", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_ACV1_4_04_add_liquidity_works_as_expected", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_ACV1_4_05_remove_liquidity_works_as_expected", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_ACV1_4_06_remove_liquidity_imbalance_works_as_expected", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "underlying", - values?: undefined - ): string; - - decodeFunctionResult(functionFragment: "IS_TEST", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "adapter", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "cft", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "creditConfigurator", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditFacade", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditManager", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "curveV1Mock", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "failed", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "setUp", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "test_ACV1_4_01_constructor_sets_correct_values", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_ACV1_4_02A_constructor_reverts_for_unknown_addresses", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_ACV1_4_02_constructor_reverts_for_zero_addresses", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_ACV1_4_03_liquidity_functions_revert_if_user_has_no_account", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_ACV1_4_04A_add_all_liquidity_one_coin_works_as_expected", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_ACV1_4_04_add_liquidity_works_as_expected", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_ACV1_4_05_remove_liquidity_works_as_expected", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_ACV1_4_06_remove_liquidity_imbalance_works_as_expected", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "underlying", data: BytesLike): Result; - - events: { - "AddCollateral(address,address,uint256)": EventFragment; - "CloseCreditAccount(address,address)": EventFragment; - "DecreaseBorrowedAmount(address,uint256)": EventFragment; - "ExecuteOrder(address,address)": EventFragment; - "IncreaseBorrowedAmount(address,uint256)": EventFragment; - "LiquidateCreditAccount(address,address,address,uint256)": EventFragment; - "LiquidateExpiredCreditAccount(address,address,address,uint256)": EventFragment; - "MultiCallFinished()": EventFragment; - "MultiCallStarted(address)": EventFragment; - "NewConfigurator(address)": EventFragment; - "OpenCreditAccount(address,address,uint256,uint16)": EventFragment; - "TokenDisabled(address,address)": EventFragment; - "TokenEnabled(address,address)": EventFragment; - "TransferAccount(address,address)": EventFragment; - "TransferAccountAllowed(address,address,bool)": EventFragment; - "log(string)": EventFragment; - "log_address(address)": EventFragment; - "log_bytes(bytes)": EventFragment; - "log_bytes32(bytes32)": EventFragment; - "log_int(int256)": EventFragment; - "log_named_address(string,address)": EventFragment; - "log_named_bytes(string,bytes)": EventFragment; - "log_named_bytes32(string,bytes32)": EventFragment; - "log_named_decimal_int(string,int256,uint256)": EventFragment; - "log_named_decimal_uint(string,uint256,uint256)": EventFragment; - "log_named_int(string,int256)": EventFragment; - "log_named_string(string,string)": EventFragment; - "log_named_uint(string,uint256)": EventFragment; - "log_string(string)": EventFragment; - "log_uint(uint256)": EventFragment; - "logs(bytes)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "AddCollateral"): EventFragment; - getEvent(nameOrSignatureOrTopic: "CloseCreditAccount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "DecreaseBorrowedAmount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ExecuteOrder"): EventFragment; - getEvent(nameOrSignatureOrTopic: "IncreaseBorrowedAmount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "LiquidateCreditAccount"): EventFragment; - getEvent( - nameOrSignatureOrTopic: "LiquidateExpiredCreditAccount" - ): EventFragment; - getEvent(nameOrSignatureOrTopic: "MultiCallFinished"): EventFragment; - getEvent(nameOrSignatureOrTopic: "MultiCallStarted"): EventFragment; - getEvent(nameOrSignatureOrTopic: "NewConfigurator"): EventFragment; - getEvent(nameOrSignatureOrTopic: "OpenCreditAccount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TokenDisabled"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TokenEnabled"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TransferAccount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TransferAccountAllowed"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "logs"): EventFragment; -} - -export interface AddCollateralEventObject { - onBehalfOf: string; - token: string; - value: BigNumber; -} -export type AddCollateralEvent = TypedEvent< - [string, string, BigNumber], - AddCollateralEventObject ->; - -export type AddCollateralEventFilter = TypedEventFilter; - -export interface CloseCreditAccountEventObject { - owner: string; - to: string; -} -export type CloseCreditAccountEvent = TypedEvent< - [string, string], - CloseCreditAccountEventObject ->; - -export type CloseCreditAccountEventFilter = - TypedEventFilter; - -export interface DecreaseBorrowedAmountEventObject { - borrower: string; - amount: BigNumber; -} -export type DecreaseBorrowedAmountEvent = TypedEvent< - [string, BigNumber], - DecreaseBorrowedAmountEventObject ->; - -export type DecreaseBorrowedAmountEventFilter = - TypedEventFilter; - -export interface ExecuteOrderEventObject { - borrower: string; - target: string; -} -export type ExecuteOrderEvent = TypedEvent< - [string, string], - ExecuteOrderEventObject ->; - -export type ExecuteOrderEventFilter = TypedEventFilter; - -export interface IncreaseBorrowedAmountEventObject { - borrower: string; - amount: BigNumber; -} -export type IncreaseBorrowedAmountEvent = TypedEvent< - [string, BigNumber], - IncreaseBorrowedAmountEventObject ->; - -export type IncreaseBorrowedAmountEventFilter = - TypedEventFilter; - -export interface LiquidateCreditAccountEventObject { - owner: string; - liquidator: string; - to: string; - remainingFunds: BigNumber; -} -export type LiquidateCreditAccountEvent = TypedEvent< - [string, string, string, BigNumber], - LiquidateCreditAccountEventObject ->; - -export type LiquidateCreditAccountEventFilter = - TypedEventFilter; - -export interface LiquidateExpiredCreditAccountEventObject { - owner: string; - liquidator: string; - to: string; - remainingFunds: BigNumber; -} -export type LiquidateExpiredCreditAccountEvent = TypedEvent< - [string, string, string, BigNumber], - LiquidateExpiredCreditAccountEventObject ->; - -export type LiquidateExpiredCreditAccountEventFilter = - TypedEventFilter; - -export interface MultiCallFinishedEventObject {} -export type MultiCallFinishedEvent = TypedEvent< - [], - MultiCallFinishedEventObject ->; - -export type MultiCallFinishedEventFilter = - TypedEventFilter; - -export interface MultiCallStartedEventObject { - borrower: string; -} -export type MultiCallStartedEvent = TypedEvent< - [string], - MultiCallStartedEventObject ->; - -export type MultiCallStartedEventFilter = - TypedEventFilter; - -export interface NewConfiguratorEventObject { - newConfigurator: string; -} -export type NewConfiguratorEvent = TypedEvent< - [string], - NewConfiguratorEventObject ->; - -export type NewConfiguratorEventFilter = TypedEventFilter; - -export interface OpenCreditAccountEventObject { - onBehalfOf: string; - creditAccount: string; - borrowAmount: BigNumber; - referralCode: number; -} -export type OpenCreditAccountEvent = TypedEvent< - [string, string, BigNumber, number], - OpenCreditAccountEventObject ->; - -export type OpenCreditAccountEventFilter = - TypedEventFilter; - -export interface TokenDisabledEventObject { - creditAccount: string; - token: string; -} -export type TokenDisabledEvent = TypedEvent< - [string, string], - TokenDisabledEventObject ->; - -export type TokenDisabledEventFilter = TypedEventFilter; - -export interface TokenEnabledEventObject { - creditAccount: string; - token: string; -} -export type TokenEnabledEvent = TypedEvent< - [string, string], - TokenEnabledEventObject ->; - -export type TokenEnabledEventFilter = TypedEventFilter; - -export interface TransferAccountEventObject { - oldOwner: string; - newOwner: string; -} -export type TransferAccountEvent = TypedEvent< - [string, string], - TransferAccountEventObject ->; - -export type TransferAccountEventFilter = TypedEventFilter; - -export interface TransferAccountAllowedEventObject { - from: string; - to: string; - state: boolean; -} -export type TransferAccountAllowedEvent = TypedEvent< - [string, string, boolean], - TransferAccountAllowedEventObject ->; - -export type TransferAccountAllowedEventFilter = - TypedEventFilter; - -export interface logEventObject { - arg0: string; -} -export type logEvent = TypedEvent<[string], logEventObject>; - -export type logEventFilter = TypedEventFilter; - -export interface log_addressEventObject { - arg0: string; -} -export type log_addressEvent = TypedEvent<[string], log_addressEventObject>; - -export type log_addressEventFilter = TypedEventFilter; - -export interface log_bytesEventObject { - arg0: string; -} -export type log_bytesEvent = TypedEvent<[string], log_bytesEventObject>; - -export type log_bytesEventFilter = TypedEventFilter; - -export interface log_bytes32EventObject { - arg0: string; -} -export type log_bytes32Event = TypedEvent<[string], log_bytes32EventObject>; - -export type log_bytes32EventFilter = TypedEventFilter; - -export interface log_intEventObject { - arg0: BigNumber; -} -export type log_intEvent = TypedEvent<[BigNumber], log_intEventObject>; - -export type log_intEventFilter = TypedEventFilter; - -export interface log_named_addressEventObject { - key: string; - val: string; -} -export type log_named_addressEvent = TypedEvent< - [string, string], - log_named_addressEventObject ->; - -export type log_named_addressEventFilter = - TypedEventFilter; - -export interface log_named_bytesEventObject { - key: string; - val: string; -} -export type log_named_bytesEvent = TypedEvent< - [string, string], - log_named_bytesEventObject ->; - -export type log_named_bytesEventFilter = TypedEventFilter; - -export interface log_named_bytes32EventObject { - key: string; - val: string; -} -export type log_named_bytes32Event = TypedEvent< - [string, string], - log_named_bytes32EventObject ->; - -export type log_named_bytes32EventFilter = - TypedEventFilter; - -export interface log_named_decimal_intEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_intEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_intEventObject ->; - -export type log_named_decimal_intEventFilter = - TypedEventFilter; - -export interface log_named_decimal_uintEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_uintEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_uintEventObject ->; - -export type log_named_decimal_uintEventFilter = - TypedEventFilter; - -export interface log_named_intEventObject { - key: string; - val: BigNumber; -} -export type log_named_intEvent = TypedEvent< - [string, BigNumber], - log_named_intEventObject ->; - -export type log_named_intEventFilter = TypedEventFilter; - -export interface log_named_stringEventObject { - key: string; - val: string; -} -export type log_named_stringEvent = TypedEvent< - [string, string], - log_named_stringEventObject ->; - -export type log_named_stringEventFilter = - TypedEventFilter; - -export interface log_named_uintEventObject { - key: string; - val: BigNumber; -} -export type log_named_uintEvent = TypedEvent< - [string, BigNumber], - log_named_uintEventObject ->; - -export type log_named_uintEventFilter = TypedEventFilter; - -export interface log_stringEventObject { - arg0: string; -} -export type log_stringEvent = TypedEvent<[string], log_stringEventObject>; - -export type log_stringEventFilter = TypedEventFilter; - -export interface log_uintEventObject { - arg0: BigNumber; -} -export type log_uintEvent = TypedEvent<[BigNumber], log_uintEventObject>; - -export type log_uintEventFilter = TypedEventFilter; - -export interface logsEventObject { - arg0: string; -} -export type logsEvent = TypedEvent<[string], logsEventObject>; - -export type logsEventFilter = TypedEventFilter; - -export interface CurveV1Adapter4AssetsTest extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: CurveV1Adapter4AssetsTestInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - IS_TEST(overrides?: CallOverrides): Promise<[boolean]>; - - adapter(overrides?: CallOverrides): Promise<[string]>; - - cft(overrides?: CallOverrides): Promise<[string]>; - - creditConfigurator(overrides?: CallOverrides): Promise<[string]>; - - creditFacade(overrides?: CallOverrides): Promise<[string]>; - - creditManager(overrides?: CallOverrides): Promise<[string]>; - - curveV1Mock(overrides?: CallOverrides): Promise<[string]>; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_4_01_constructor_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_4_02A_constructor_reverts_for_unknown_addresses( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_4_02_constructor_reverts_for_zero_addresses( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_4_03_liquidity_functions_revert_if_user_has_no_account( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_4_04A_add_all_liquidity_one_coin_works_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_4_04_add_liquidity_works_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_4_05_remove_liquidity_works_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_4_06_remove_liquidity_imbalance_works_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise<[string]>; - }; - - IS_TEST(overrides?: CallOverrides): Promise; - - adapter(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - curveV1Mock(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_4_01_constructor_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_4_02A_constructor_reverts_for_unknown_addresses( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_4_02_constructor_reverts_for_zero_addresses( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_4_03_liquidity_functions_revert_if_user_has_no_account( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_4_04A_add_all_liquidity_one_coin_works_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_4_04_add_liquidity_works_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_4_05_remove_liquidity_works_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_4_06_remove_liquidity_imbalance_works_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - - callStatic: { - IS_TEST(overrides?: CallOverrides): Promise; - - adapter(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - curveV1Mock(overrides?: CallOverrides): Promise; - - failed(overrides?: CallOverrides): Promise; - - setUp(overrides?: CallOverrides): Promise; - - test_ACV1_4_01_constructor_sets_correct_values( - overrides?: CallOverrides - ): Promise; - - test_ACV1_4_02A_constructor_reverts_for_unknown_addresses( - overrides?: CallOverrides - ): Promise; - - test_ACV1_4_02_constructor_reverts_for_zero_addresses( - overrides?: CallOverrides - ): Promise; - - test_ACV1_4_03_liquidity_functions_revert_if_user_has_no_account( - overrides?: CallOverrides - ): Promise; - - test_ACV1_4_04A_add_all_liquidity_one_coin_works_as_expected( - overrides?: CallOverrides - ): Promise; - - test_ACV1_4_04_add_liquidity_works_as_expected( - overrides?: CallOverrides - ): Promise; - - test_ACV1_4_05_remove_liquidity_works_as_expected( - overrides?: CallOverrides - ): Promise; - - test_ACV1_4_06_remove_liquidity_imbalance_works_as_expected( - overrides?: CallOverrides - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - }; - - filters: { - "AddCollateral(address,address,uint256)"( - onBehalfOf?: string | null, - token?: string | null, - value?: null - ): AddCollateralEventFilter; - AddCollateral( - onBehalfOf?: string | null, - token?: string | null, - value?: null - ): AddCollateralEventFilter; - - "CloseCreditAccount(address,address)"( - owner?: string | null, - to?: string | null - ): CloseCreditAccountEventFilter; - CloseCreditAccount( - owner?: string | null, - to?: string | null - ): CloseCreditAccountEventFilter; - - "DecreaseBorrowedAmount(address,uint256)"( - borrower?: string | null, - amount?: null - ): DecreaseBorrowedAmountEventFilter; - DecreaseBorrowedAmount( - borrower?: string | null, - amount?: null - ): DecreaseBorrowedAmountEventFilter; - - "ExecuteOrder(address,address)"( - borrower?: string | null, - target?: string | null - ): ExecuteOrderEventFilter; - ExecuteOrder( - borrower?: string | null, - target?: string | null - ): ExecuteOrderEventFilter; - - "IncreaseBorrowedAmount(address,uint256)"( - borrower?: string | null, - amount?: null - ): IncreaseBorrowedAmountEventFilter; - IncreaseBorrowedAmount( - borrower?: string | null, - amount?: null - ): IncreaseBorrowedAmountEventFilter; - - "LiquidateCreditAccount(address,address,address,uint256)"( - owner?: string | null, - liquidator?: string | null, - to?: string | null, - remainingFunds?: null - ): LiquidateCreditAccountEventFilter; - LiquidateCreditAccount( - owner?: string | null, - liquidator?: string | null, - to?: string | null, - remainingFunds?: null - ): LiquidateCreditAccountEventFilter; - - "LiquidateExpiredCreditAccount(address,address,address,uint256)"( - owner?: string | null, - liquidator?: string | null, - to?: string | null, - remainingFunds?: null - ): LiquidateExpiredCreditAccountEventFilter; - LiquidateExpiredCreditAccount( - owner?: string | null, - liquidator?: string | null, - to?: string | null, - remainingFunds?: null - ): LiquidateExpiredCreditAccountEventFilter; - - "MultiCallFinished()"(): MultiCallFinishedEventFilter; - MultiCallFinished(): MultiCallFinishedEventFilter; - - "MultiCallStarted(address)"( - borrower?: string | null - ): MultiCallStartedEventFilter; - MultiCallStarted(borrower?: string | null): MultiCallStartedEventFilter; - - "NewConfigurator(address)"( - newConfigurator?: string | null - ): NewConfiguratorEventFilter; - NewConfigurator( - newConfigurator?: string | null - ): NewConfiguratorEventFilter; - - "OpenCreditAccount(address,address,uint256,uint16)"( - onBehalfOf?: string | null, - creditAccount?: string | null, - borrowAmount?: null, - referralCode?: null - ): OpenCreditAccountEventFilter; - OpenCreditAccount( - onBehalfOf?: string | null, - creditAccount?: string | null, - borrowAmount?: null, - referralCode?: null - ): OpenCreditAccountEventFilter; - - "TokenDisabled(address,address)"( - creditAccount?: null, - token?: null - ): TokenDisabledEventFilter; - TokenDisabled(creditAccount?: null, token?: null): TokenDisabledEventFilter; - - "TokenEnabled(address,address)"( - creditAccount?: null, - token?: null - ): TokenEnabledEventFilter; - TokenEnabled(creditAccount?: null, token?: null): TokenEnabledEventFilter; - - "TransferAccount(address,address)"( - oldOwner?: string | null, - newOwner?: string | null - ): TransferAccountEventFilter; - TransferAccount( - oldOwner?: string | null, - newOwner?: string | null - ): TransferAccountEventFilter; - - "TransferAccountAllowed(address,address,bool)"( - from?: string | null, - to?: string | null, - state?: null - ): TransferAccountAllowedEventFilter; - TransferAccountAllowed( - from?: string | null, - to?: string | null, - state?: null - ): TransferAccountAllowedEventFilter; - - "log(string)"(arg0?: null): logEventFilter; - log(arg0?: null): logEventFilter; - - "log_address(address)"(arg0?: null): log_addressEventFilter; - log_address(arg0?: null): log_addressEventFilter; - - "log_bytes(bytes)"(arg0?: null): log_bytesEventFilter; - log_bytes(arg0?: null): log_bytesEventFilter; - - "log_bytes32(bytes32)"(arg0?: null): log_bytes32EventFilter; - log_bytes32(arg0?: null): log_bytes32EventFilter; - - "log_int(int256)"(arg0?: null): log_intEventFilter; - log_int(arg0?: null): log_intEventFilter; - - "log_named_address(string,address)"( - key?: null, - val?: null - ): log_named_addressEventFilter; - log_named_address(key?: null, val?: null): log_named_addressEventFilter; - - "log_named_bytes(string,bytes)"( - key?: null, - val?: null - ): log_named_bytesEventFilter; - log_named_bytes(key?: null, val?: null): log_named_bytesEventFilter; - - "log_named_bytes32(string,bytes32)"( - key?: null, - val?: null - ): log_named_bytes32EventFilter; - log_named_bytes32(key?: null, val?: null): log_named_bytes32EventFilter; - - "log_named_decimal_int(string,int256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - log_named_decimal_int( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - - "log_named_decimal_uint(string,uint256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - log_named_decimal_uint( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - - "log_named_int(string,int256)"( - key?: null, - val?: null - ): log_named_intEventFilter; - log_named_int(key?: null, val?: null): log_named_intEventFilter; - - "log_named_string(string,string)"( - key?: null, - val?: null - ): log_named_stringEventFilter; - log_named_string(key?: null, val?: null): log_named_stringEventFilter; - - "log_named_uint(string,uint256)"( - key?: null, - val?: null - ): log_named_uintEventFilter; - log_named_uint(key?: null, val?: null): log_named_uintEventFilter; - - "log_string(string)"(arg0?: null): log_stringEventFilter; - log_string(arg0?: null): log_stringEventFilter; - - "log_uint(uint256)"(arg0?: null): log_uintEventFilter; - log_uint(arg0?: null): log_uintEventFilter; - - "logs(bytes)"(arg0?: null): logsEventFilter; - logs(arg0?: null): logsEventFilter; - }; - - estimateGas: { - IS_TEST(overrides?: CallOverrides): Promise; - - adapter(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - curveV1Mock(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_4_01_constructor_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_4_02A_constructor_reverts_for_unknown_addresses( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_4_02_constructor_reverts_for_zero_addresses( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_4_03_liquidity_functions_revert_if_user_has_no_account( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_4_04A_add_all_liquidity_one_coin_works_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_4_04_add_liquidity_works_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_4_05_remove_liquidity_works_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_4_06_remove_liquidity_imbalance_works_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - IS_TEST(overrides?: CallOverrides): Promise; - - adapter(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator( - overrides?: CallOverrides - ): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - curveV1Mock(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_4_01_constructor_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_4_02A_constructor_reverts_for_unknown_addresses( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_4_02_constructor_reverts_for_zero_addresses( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_4_03_liquidity_functions_revert_if_user_has_no_account( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_4_04A_add_all_liquidity_one_coin_works_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_4_04_add_liquidity_works_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_4_05_remove_liquidity_works_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1_4_06_remove_liquidity_imbalance_works_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/test/adapters/CurveV1Adapter_4AssetsTest.t.sol/index.ts b/src/types/contracts/test/adapters/CurveV1Adapter_4AssetsTest.t.sol/index.ts deleted file mode 100644 index 59f85405..00000000 --- a/src/types/contracts/test/adapters/CurveV1Adapter_4AssetsTest.t.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { CurveV1Adapter4AssetsTest } from "./CurveV1Adapter4AssetsTest"; diff --git a/src/types/contracts/test/adapters/CurveV1StETHTest.t.sol/CurveV1StEthAdapterTest.ts b/src/types/contracts/test/adapters/CurveV1StETHTest.t.sol/CurveV1StEthAdapterTest.ts deleted file mode 100644 index d17f0ab3..00000000 --- a/src/types/contracts/test/adapters/CurveV1StETHTest.t.sol/CurveV1StEthAdapterTest.ts +++ /dev/null @@ -1,1100 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface CurveV1StEthAdapterTestInterface extends utils.Interface { - functions: { - "IS_TEST()": FunctionFragment; - "adapter()": FunctionFragment; - "cft()": FunctionFragment; - "creditConfigurator()": FunctionFragment; - "creditFacade()": FunctionFragment; - "creditManager()": FunctionFragment; - "curveV1Mock()": FunctionFragment; - "failed()": FunctionFragment; - "lp_token()": FunctionFragment; - "setUp()": FunctionFragment; - "test_ACV1S_01_add_liquidity_works_correctly()": FunctionFragment; - "test_ACV1S_02_remove_liquidity_works_correctly()": FunctionFragment; - "test_ACV1S_03_exchange_works_correctly()": FunctionFragment; - "test_ACV1S_04_remove_liquidity_one_coin_works_correctly()": FunctionFragment; - "test_ACV1S_05_remove_all_liquidity_one_coin_works_correctly()": FunctionFragment; - "test_ACV1S_06_remove_liquidity_imbalance_works_correctly()": FunctionFragment; - "test_ACV1S_07_adapter_returns_correct_view_function_results(uint256)": FunctionFragment; - "underlying()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "IS_TEST" - | "adapter" - | "cft" - | "creditConfigurator" - | "creditFacade" - | "creditManager" - | "curveV1Mock" - | "failed" - | "lp_token" - | "setUp" - | "test_ACV1S_01_add_liquidity_works_correctly" - | "test_ACV1S_02_remove_liquidity_works_correctly" - | "test_ACV1S_03_exchange_works_correctly" - | "test_ACV1S_04_remove_liquidity_one_coin_works_correctly" - | "test_ACV1S_05_remove_all_liquidity_one_coin_works_correctly" - | "test_ACV1S_06_remove_liquidity_imbalance_works_correctly" - | "test_ACV1S_07_adapter_returns_correct_view_function_results" - | "underlying" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "IS_TEST", values?: undefined): string; - encodeFunctionData(functionFragment: "adapter", values?: undefined): string; - encodeFunctionData(functionFragment: "cft", values?: undefined): string; - encodeFunctionData( - functionFragment: "creditConfigurator", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditFacade", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditManager", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "curveV1Mock", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "failed", values?: undefined): string; - encodeFunctionData(functionFragment: "lp_token", values?: undefined): string; - encodeFunctionData(functionFragment: "setUp", values?: undefined): string; - encodeFunctionData( - functionFragment: "test_ACV1S_01_add_liquidity_works_correctly", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_ACV1S_02_remove_liquidity_works_correctly", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_ACV1S_03_exchange_works_correctly", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_ACV1S_04_remove_liquidity_one_coin_works_correctly", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_ACV1S_05_remove_all_liquidity_one_coin_works_correctly", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_ACV1S_06_remove_liquidity_imbalance_works_correctly", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_ACV1S_07_adapter_returns_correct_view_function_results", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "underlying", - values?: undefined - ): string; - - decodeFunctionResult(functionFragment: "IS_TEST", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "adapter", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "cft", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "creditConfigurator", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditFacade", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditManager", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "curveV1Mock", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "failed", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "lp_token", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "setUp", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "test_ACV1S_01_add_liquidity_works_correctly", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_ACV1S_02_remove_liquidity_works_correctly", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_ACV1S_03_exchange_works_correctly", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_ACV1S_04_remove_liquidity_one_coin_works_correctly", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_ACV1S_05_remove_all_liquidity_one_coin_works_correctly", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_ACV1S_06_remove_liquidity_imbalance_works_correctly", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_ACV1S_07_adapter_returns_correct_view_function_results", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "underlying", data: BytesLike): Result; - - events: { - "AddCollateral(address,address,uint256)": EventFragment; - "CloseCreditAccount(address,address)": EventFragment; - "DecreaseBorrowedAmount(address,uint256)": EventFragment; - "ExecuteOrder(address,address)": EventFragment; - "IncreaseBorrowedAmount(address,uint256)": EventFragment; - "LiquidateCreditAccount(address,address,address,uint256)": EventFragment; - "LiquidateExpiredCreditAccount(address,address,address,uint256)": EventFragment; - "MultiCallFinished()": EventFragment; - "MultiCallStarted(address)": EventFragment; - "NewConfigurator(address)": EventFragment; - "OpenCreditAccount(address,address,uint256,uint16)": EventFragment; - "TokenDisabled(address,address)": EventFragment; - "TokenEnabled(address,address)": EventFragment; - "TransferAccount(address,address)": EventFragment; - "TransferAccountAllowed(address,address,bool)": EventFragment; - "log(string)": EventFragment; - "log_address(address)": EventFragment; - "log_bytes(bytes)": EventFragment; - "log_bytes32(bytes32)": EventFragment; - "log_int(int256)": EventFragment; - "log_named_address(string,address)": EventFragment; - "log_named_bytes(string,bytes)": EventFragment; - "log_named_bytes32(string,bytes32)": EventFragment; - "log_named_decimal_int(string,int256,uint256)": EventFragment; - "log_named_decimal_uint(string,uint256,uint256)": EventFragment; - "log_named_int(string,int256)": EventFragment; - "log_named_string(string,string)": EventFragment; - "log_named_uint(string,uint256)": EventFragment; - "log_string(string)": EventFragment; - "log_uint(uint256)": EventFragment; - "logs(bytes)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "AddCollateral"): EventFragment; - getEvent(nameOrSignatureOrTopic: "CloseCreditAccount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "DecreaseBorrowedAmount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ExecuteOrder"): EventFragment; - getEvent(nameOrSignatureOrTopic: "IncreaseBorrowedAmount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "LiquidateCreditAccount"): EventFragment; - getEvent( - nameOrSignatureOrTopic: "LiquidateExpiredCreditAccount" - ): EventFragment; - getEvent(nameOrSignatureOrTopic: "MultiCallFinished"): EventFragment; - getEvent(nameOrSignatureOrTopic: "MultiCallStarted"): EventFragment; - getEvent(nameOrSignatureOrTopic: "NewConfigurator"): EventFragment; - getEvent(nameOrSignatureOrTopic: "OpenCreditAccount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TokenDisabled"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TokenEnabled"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TransferAccount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TransferAccountAllowed"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "logs"): EventFragment; -} - -export interface AddCollateralEventObject { - onBehalfOf: string; - token: string; - value: BigNumber; -} -export type AddCollateralEvent = TypedEvent< - [string, string, BigNumber], - AddCollateralEventObject ->; - -export type AddCollateralEventFilter = TypedEventFilter; - -export interface CloseCreditAccountEventObject { - owner: string; - to: string; -} -export type CloseCreditAccountEvent = TypedEvent< - [string, string], - CloseCreditAccountEventObject ->; - -export type CloseCreditAccountEventFilter = - TypedEventFilter; - -export interface DecreaseBorrowedAmountEventObject { - borrower: string; - amount: BigNumber; -} -export type DecreaseBorrowedAmountEvent = TypedEvent< - [string, BigNumber], - DecreaseBorrowedAmountEventObject ->; - -export type DecreaseBorrowedAmountEventFilter = - TypedEventFilter; - -export interface ExecuteOrderEventObject { - borrower: string; - target: string; -} -export type ExecuteOrderEvent = TypedEvent< - [string, string], - ExecuteOrderEventObject ->; - -export type ExecuteOrderEventFilter = TypedEventFilter; - -export interface IncreaseBorrowedAmountEventObject { - borrower: string; - amount: BigNumber; -} -export type IncreaseBorrowedAmountEvent = TypedEvent< - [string, BigNumber], - IncreaseBorrowedAmountEventObject ->; - -export type IncreaseBorrowedAmountEventFilter = - TypedEventFilter; - -export interface LiquidateCreditAccountEventObject { - owner: string; - liquidator: string; - to: string; - remainingFunds: BigNumber; -} -export type LiquidateCreditAccountEvent = TypedEvent< - [string, string, string, BigNumber], - LiquidateCreditAccountEventObject ->; - -export type LiquidateCreditAccountEventFilter = - TypedEventFilter; - -export interface LiquidateExpiredCreditAccountEventObject { - owner: string; - liquidator: string; - to: string; - remainingFunds: BigNumber; -} -export type LiquidateExpiredCreditAccountEvent = TypedEvent< - [string, string, string, BigNumber], - LiquidateExpiredCreditAccountEventObject ->; - -export type LiquidateExpiredCreditAccountEventFilter = - TypedEventFilter; - -export interface MultiCallFinishedEventObject {} -export type MultiCallFinishedEvent = TypedEvent< - [], - MultiCallFinishedEventObject ->; - -export type MultiCallFinishedEventFilter = - TypedEventFilter; - -export interface MultiCallStartedEventObject { - borrower: string; -} -export type MultiCallStartedEvent = TypedEvent< - [string], - MultiCallStartedEventObject ->; - -export type MultiCallStartedEventFilter = - TypedEventFilter; - -export interface NewConfiguratorEventObject { - newConfigurator: string; -} -export type NewConfiguratorEvent = TypedEvent< - [string], - NewConfiguratorEventObject ->; - -export type NewConfiguratorEventFilter = TypedEventFilter; - -export interface OpenCreditAccountEventObject { - onBehalfOf: string; - creditAccount: string; - borrowAmount: BigNumber; - referralCode: number; -} -export type OpenCreditAccountEvent = TypedEvent< - [string, string, BigNumber, number], - OpenCreditAccountEventObject ->; - -export type OpenCreditAccountEventFilter = - TypedEventFilter; - -export interface TokenDisabledEventObject { - creditAccount: string; - token: string; -} -export type TokenDisabledEvent = TypedEvent< - [string, string], - TokenDisabledEventObject ->; - -export type TokenDisabledEventFilter = TypedEventFilter; - -export interface TokenEnabledEventObject { - creditAccount: string; - token: string; -} -export type TokenEnabledEvent = TypedEvent< - [string, string], - TokenEnabledEventObject ->; - -export type TokenEnabledEventFilter = TypedEventFilter; - -export interface TransferAccountEventObject { - oldOwner: string; - newOwner: string; -} -export type TransferAccountEvent = TypedEvent< - [string, string], - TransferAccountEventObject ->; - -export type TransferAccountEventFilter = TypedEventFilter; - -export interface TransferAccountAllowedEventObject { - from: string; - to: string; - state: boolean; -} -export type TransferAccountAllowedEvent = TypedEvent< - [string, string, boolean], - TransferAccountAllowedEventObject ->; - -export type TransferAccountAllowedEventFilter = - TypedEventFilter; - -export interface logEventObject { - arg0: string; -} -export type logEvent = TypedEvent<[string], logEventObject>; - -export type logEventFilter = TypedEventFilter; - -export interface log_addressEventObject { - arg0: string; -} -export type log_addressEvent = TypedEvent<[string], log_addressEventObject>; - -export type log_addressEventFilter = TypedEventFilter; - -export interface log_bytesEventObject { - arg0: string; -} -export type log_bytesEvent = TypedEvent<[string], log_bytesEventObject>; - -export type log_bytesEventFilter = TypedEventFilter; - -export interface log_bytes32EventObject { - arg0: string; -} -export type log_bytes32Event = TypedEvent<[string], log_bytes32EventObject>; - -export type log_bytes32EventFilter = TypedEventFilter; - -export interface log_intEventObject { - arg0: BigNumber; -} -export type log_intEvent = TypedEvent<[BigNumber], log_intEventObject>; - -export type log_intEventFilter = TypedEventFilter; - -export interface log_named_addressEventObject { - key: string; - val: string; -} -export type log_named_addressEvent = TypedEvent< - [string, string], - log_named_addressEventObject ->; - -export type log_named_addressEventFilter = - TypedEventFilter; - -export interface log_named_bytesEventObject { - key: string; - val: string; -} -export type log_named_bytesEvent = TypedEvent< - [string, string], - log_named_bytesEventObject ->; - -export type log_named_bytesEventFilter = TypedEventFilter; - -export interface log_named_bytes32EventObject { - key: string; - val: string; -} -export type log_named_bytes32Event = TypedEvent< - [string, string], - log_named_bytes32EventObject ->; - -export type log_named_bytes32EventFilter = - TypedEventFilter; - -export interface log_named_decimal_intEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_intEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_intEventObject ->; - -export type log_named_decimal_intEventFilter = - TypedEventFilter; - -export interface log_named_decimal_uintEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_uintEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_uintEventObject ->; - -export type log_named_decimal_uintEventFilter = - TypedEventFilter; - -export interface log_named_intEventObject { - key: string; - val: BigNumber; -} -export type log_named_intEvent = TypedEvent< - [string, BigNumber], - log_named_intEventObject ->; - -export type log_named_intEventFilter = TypedEventFilter; - -export interface log_named_stringEventObject { - key: string; - val: string; -} -export type log_named_stringEvent = TypedEvent< - [string, string], - log_named_stringEventObject ->; - -export type log_named_stringEventFilter = - TypedEventFilter; - -export interface log_named_uintEventObject { - key: string; - val: BigNumber; -} -export type log_named_uintEvent = TypedEvent< - [string, BigNumber], - log_named_uintEventObject ->; - -export type log_named_uintEventFilter = TypedEventFilter; - -export interface log_stringEventObject { - arg0: string; -} -export type log_stringEvent = TypedEvent<[string], log_stringEventObject>; - -export type log_stringEventFilter = TypedEventFilter; - -export interface log_uintEventObject { - arg0: BigNumber; -} -export type log_uintEvent = TypedEvent<[BigNumber], log_uintEventObject>; - -export type log_uintEventFilter = TypedEventFilter; - -export interface logsEventObject { - arg0: string; -} -export type logsEvent = TypedEvent<[string], logsEventObject>; - -export type logsEventFilter = TypedEventFilter; - -export interface CurveV1StEthAdapterTest extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: CurveV1StEthAdapterTestInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - IS_TEST(overrides?: CallOverrides): Promise<[boolean]>; - - adapter(overrides?: CallOverrides): Promise<[string]>; - - cft(overrides?: CallOverrides): Promise<[string]>; - - creditConfigurator(overrides?: CallOverrides): Promise<[string]>; - - creditFacade(overrides?: CallOverrides): Promise<[string]>; - - creditManager(overrides?: CallOverrides): Promise<[string]>; - - curveV1Mock(overrides?: CallOverrides): Promise<[string]>; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - lp_token(overrides?: CallOverrides): Promise<[string]>; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1S_01_add_liquidity_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1S_02_remove_liquidity_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1S_03_exchange_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1S_04_remove_liquidity_one_coin_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1S_05_remove_all_liquidity_one_coin_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1S_06_remove_liquidity_imbalance_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1S_07_adapter_returns_correct_view_function_results( - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise<[string]>; - }; - - IS_TEST(overrides?: CallOverrides): Promise; - - adapter(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - curveV1Mock(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - lp_token(overrides?: CallOverrides): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1S_01_add_liquidity_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1S_02_remove_liquidity_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1S_03_exchange_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1S_04_remove_liquidity_one_coin_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1S_05_remove_all_liquidity_one_coin_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1S_06_remove_liquidity_imbalance_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1S_07_adapter_returns_correct_view_function_results( - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - - callStatic: { - IS_TEST(overrides?: CallOverrides): Promise; - - adapter(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - curveV1Mock(overrides?: CallOverrides): Promise; - - failed(overrides?: CallOverrides): Promise; - - lp_token(overrides?: CallOverrides): Promise; - - setUp(overrides?: CallOverrides): Promise; - - test_ACV1S_01_add_liquidity_works_correctly( - overrides?: CallOverrides - ): Promise; - - test_ACV1S_02_remove_liquidity_works_correctly( - overrides?: CallOverrides - ): Promise; - - test_ACV1S_03_exchange_works_correctly( - overrides?: CallOverrides - ): Promise; - - test_ACV1S_04_remove_liquidity_one_coin_works_correctly( - overrides?: CallOverrides - ): Promise; - - test_ACV1S_05_remove_all_liquidity_one_coin_works_correctly( - overrides?: CallOverrides - ): Promise; - - test_ACV1S_06_remove_liquidity_imbalance_works_correctly( - overrides?: CallOverrides - ): Promise; - - test_ACV1S_07_adapter_returns_correct_view_function_results( - value: BigNumberish, - overrides?: CallOverrides - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - }; - - filters: { - "AddCollateral(address,address,uint256)"( - onBehalfOf?: string | null, - token?: string | null, - value?: null - ): AddCollateralEventFilter; - AddCollateral( - onBehalfOf?: string | null, - token?: string | null, - value?: null - ): AddCollateralEventFilter; - - "CloseCreditAccount(address,address)"( - owner?: string | null, - to?: string | null - ): CloseCreditAccountEventFilter; - CloseCreditAccount( - owner?: string | null, - to?: string | null - ): CloseCreditAccountEventFilter; - - "DecreaseBorrowedAmount(address,uint256)"( - borrower?: string | null, - amount?: null - ): DecreaseBorrowedAmountEventFilter; - DecreaseBorrowedAmount( - borrower?: string | null, - amount?: null - ): DecreaseBorrowedAmountEventFilter; - - "ExecuteOrder(address,address)"( - borrower?: string | null, - target?: string | null - ): ExecuteOrderEventFilter; - ExecuteOrder( - borrower?: string | null, - target?: string | null - ): ExecuteOrderEventFilter; - - "IncreaseBorrowedAmount(address,uint256)"( - borrower?: string | null, - amount?: null - ): IncreaseBorrowedAmountEventFilter; - IncreaseBorrowedAmount( - borrower?: string | null, - amount?: null - ): IncreaseBorrowedAmountEventFilter; - - "LiquidateCreditAccount(address,address,address,uint256)"( - owner?: string | null, - liquidator?: string | null, - to?: string | null, - remainingFunds?: null - ): LiquidateCreditAccountEventFilter; - LiquidateCreditAccount( - owner?: string | null, - liquidator?: string | null, - to?: string | null, - remainingFunds?: null - ): LiquidateCreditAccountEventFilter; - - "LiquidateExpiredCreditAccount(address,address,address,uint256)"( - owner?: string | null, - liquidator?: string | null, - to?: string | null, - remainingFunds?: null - ): LiquidateExpiredCreditAccountEventFilter; - LiquidateExpiredCreditAccount( - owner?: string | null, - liquidator?: string | null, - to?: string | null, - remainingFunds?: null - ): LiquidateExpiredCreditAccountEventFilter; - - "MultiCallFinished()"(): MultiCallFinishedEventFilter; - MultiCallFinished(): MultiCallFinishedEventFilter; - - "MultiCallStarted(address)"( - borrower?: string | null - ): MultiCallStartedEventFilter; - MultiCallStarted(borrower?: string | null): MultiCallStartedEventFilter; - - "NewConfigurator(address)"( - newConfigurator?: string | null - ): NewConfiguratorEventFilter; - NewConfigurator( - newConfigurator?: string | null - ): NewConfiguratorEventFilter; - - "OpenCreditAccount(address,address,uint256,uint16)"( - onBehalfOf?: string | null, - creditAccount?: string | null, - borrowAmount?: null, - referralCode?: null - ): OpenCreditAccountEventFilter; - OpenCreditAccount( - onBehalfOf?: string | null, - creditAccount?: string | null, - borrowAmount?: null, - referralCode?: null - ): OpenCreditAccountEventFilter; - - "TokenDisabled(address,address)"( - creditAccount?: null, - token?: null - ): TokenDisabledEventFilter; - TokenDisabled(creditAccount?: null, token?: null): TokenDisabledEventFilter; - - "TokenEnabled(address,address)"( - creditAccount?: null, - token?: null - ): TokenEnabledEventFilter; - TokenEnabled(creditAccount?: null, token?: null): TokenEnabledEventFilter; - - "TransferAccount(address,address)"( - oldOwner?: string | null, - newOwner?: string | null - ): TransferAccountEventFilter; - TransferAccount( - oldOwner?: string | null, - newOwner?: string | null - ): TransferAccountEventFilter; - - "TransferAccountAllowed(address,address,bool)"( - from?: string | null, - to?: string | null, - state?: null - ): TransferAccountAllowedEventFilter; - TransferAccountAllowed( - from?: string | null, - to?: string | null, - state?: null - ): TransferAccountAllowedEventFilter; - - "log(string)"(arg0?: null): logEventFilter; - log(arg0?: null): logEventFilter; - - "log_address(address)"(arg0?: null): log_addressEventFilter; - log_address(arg0?: null): log_addressEventFilter; - - "log_bytes(bytes)"(arg0?: null): log_bytesEventFilter; - log_bytes(arg0?: null): log_bytesEventFilter; - - "log_bytes32(bytes32)"(arg0?: null): log_bytes32EventFilter; - log_bytes32(arg0?: null): log_bytes32EventFilter; - - "log_int(int256)"(arg0?: null): log_intEventFilter; - log_int(arg0?: null): log_intEventFilter; - - "log_named_address(string,address)"( - key?: null, - val?: null - ): log_named_addressEventFilter; - log_named_address(key?: null, val?: null): log_named_addressEventFilter; - - "log_named_bytes(string,bytes)"( - key?: null, - val?: null - ): log_named_bytesEventFilter; - log_named_bytes(key?: null, val?: null): log_named_bytesEventFilter; - - "log_named_bytes32(string,bytes32)"( - key?: null, - val?: null - ): log_named_bytes32EventFilter; - log_named_bytes32(key?: null, val?: null): log_named_bytes32EventFilter; - - "log_named_decimal_int(string,int256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - log_named_decimal_int( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - - "log_named_decimal_uint(string,uint256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - log_named_decimal_uint( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - - "log_named_int(string,int256)"( - key?: null, - val?: null - ): log_named_intEventFilter; - log_named_int(key?: null, val?: null): log_named_intEventFilter; - - "log_named_string(string,string)"( - key?: null, - val?: null - ): log_named_stringEventFilter; - log_named_string(key?: null, val?: null): log_named_stringEventFilter; - - "log_named_uint(string,uint256)"( - key?: null, - val?: null - ): log_named_uintEventFilter; - log_named_uint(key?: null, val?: null): log_named_uintEventFilter; - - "log_string(string)"(arg0?: null): log_stringEventFilter; - log_string(arg0?: null): log_stringEventFilter; - - "log_uint(uint256)"(arg0?: null): log_uintEventFilter; - log_uint(arg0?: null): log_uintEventFilter; - - "logs(bytes)"(arg0?: null): logsEventFilter; - logs(arg0?: null): logsEventFilter; - }; - - estimateGas: { - IS_TEST(overrides?: CallOverrides): Promise; - - adapter(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - curveV1Mock(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - lp_token(overrides?: CallOverrides): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1S_01_add_liquidity_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1S_02_remove_liquidity_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1S_03_exchange_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1S_04_remove_liquidity_one_coin_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1S_05_remove_all_liquidity_one_coin_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1S_06_remove_liquidity_imbalance_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1S_07_adapter_returns_correct_view_function_results( - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - IS_TEST(overrides?: CallOverrides): Promise; - - adapter(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator( - overrides?: CallOverrides - ): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - curveV1Mock(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - lp_token(overrides?: CallOverrides): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1S_01_add_liquidity_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1S_02_remove_liquidity_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1S_03_exchange_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1S_04_remove_liquidity_one_coin_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1S_05_remove_all_liquidity_one_coin_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1S_06_remove_liquidity_imbalance_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACV1S_07_adapter_returns_correct_view_function_results( - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/test/adapters/CurveV1StETHTest.t.sol/index.ts b/src/types/contracts/test/adapters/CurveV1StETHTest.t.sol/index.ts deleted file mode 100644 index fd49a41d..00000000 --- a/src/types/contracts/test/adapters/CurveV1StETHTest.t.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { CurveV1StEthAdapterTest } from "./CurveV1StEthAdapterTest"; diff --git a/src/types/contracts/test/adapters/LidoV1Adapter.t.sol/LidoV1AdapterTest.ts b/src/types/contracts/test/adapters/LidoV1Adapter.t.sol/LidoV1AdapterTest.ts deleted file mode 100644 index 65c56090..00000000 --- a/src/types/contracts/test/adapters/LidoV1Adapter.t.sol/LidoV1AdapterTest.ts +++ /dev/null @@ -1,1146 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface LidoV1AdapterTestInterface extends utils.Interface { - functions: { - "IS_TEST()": FunctionFragment; - "cft()": FunctionFragment; - "creditConfigurator()": FunctionFragment; - "creditFacade()": FunctionFragment; - "creditManager()": FunctionFragment; - "failed()": FunctionFragment; - "lidoV1Adapter()": FunctionFragment; - "lidoV1Gateway()": FunctionFragment; - "lidoV1Mock()": FunctionFragment; - "setUp()": FunctionFragment; - "test_LDOV1_01_constructor_sets_correct_params()": FunctionFragment; - "test_LDOV1_02_submit_and_submitAll_reverts_if_user_has_no_account()": FunctionFragment; - "test_LDOV1_03_submit_works_correctly()": FunctionFragment; - "test_LDOV1_04_submitAll_works_correctly()": FunctionFragment; - "test_LDOV1_05_submit_updates_limit_and_reverts_on_limit_exceeded()": FunctionFragment; - "test_LDOV1_06_submit_updates_limit_and_reverts_on_limit_exceeded()": FunctionFragment; - "test_LDOV1_07_submit_updates_limit_properly(uint256)": FunctionFragment; - "underlying()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "IS_TEST" - | "cft" - | "creditConfigurator" - | "creditFacade" - | "creditManager" - | "failed" - | "lidoV1Adapter" - | "lidoV1Gateway" - | "lidoV1Mock" - | "setUp" - | "test_LDOV1_01_constructor_sets_correct_params" - | "test_LDOV1_02_submit_and_submitAll_reverts_if_user_has_no_account" - | "test_LDOV1_03_submit_works_correctly" - | "test_LDOV1_04_submitAll_works_correctly" - | "test_LDOV1_05_submit_updates_limit_and_reverts_on_limit_exceeded" - | "test_LDOV1_06_submit_updates_limit_and_reverts_on_limit_exceeded" - | "test_LDOV1_07_submit_updates_limit_properly" - | "underlying" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "IS_TEST", values?: undefined): string; - encodeFunctionData(functionFragment: "cft", values?: undefined): string; - encodeFunctionData( - functionFragment: "creditConfigurator", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditFacade", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditManager", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "failed", values?: undefined): string; - encodeFunctionData( - functionFragment: "lidoV1Adapter", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "lidoV1Gateway", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "lidoV1Mock", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "setUp", values?: undefined): string; - encodeFunctionData( - functionFragment: "test_LDOV1_01_constructor_sets_correct_params", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_LDOV1_02_submit_and_submitAll_reverts_if_user_has_no_account", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_LDOV1_03_submit_works_correctly", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_LDOV1_04_submitAll_works_correctly", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_LDOV1_05_submit_updates_limit_and_reverts_on_limit_exceeded", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_LDOV1_06_submit_updates_limit_and_reverts_on_limit_exceeded", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_LDOV1_07_submit_updates_limit_properly", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "underlying", - values?: undefined - ): string; - - decodeFunctionResult(functionFragment: "IS_TEST", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "cft", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "creditConfigurator", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditFacade", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditManager", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "failed", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "lidoV1Adapter", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "lidoV1Gateway", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "lidoV1Mock", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "setUp", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "test_LDOV1_01_constructor_sets_correct_params", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_LDOV1_02_submit_and_submitAll_reverts_if_user_has_no_account", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_LDOV1_03_submit_works_correctly", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_LDOV1_04_submitAll_works_correctly", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_LDOV1_05_submit_updates_limit_and_reverts_on_limit_exceeded", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_LDOV1_06_submit_updates_limit_and_reverts_on_limit_exceeded", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_LDOV1_07_submit_updates_limit_properly", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "underlying", data: BytesLike): Result; - - events: { - "AddCollateral(address,address,uint256)": EventFragment; - "CloseCreditAccount(address,address)": EventFragment; - "DecreaseBorrowedAmount(address,uint256)": EventFragment; - "ExecuteOrder(address,address)": EventFragment; - "IncreaseBorrowedAmount(address,uint256)": EventFragment; - "LiquidateCreditAccount(address,address,address,uint256)": EventFragment; - "LiquidateExpiredCreditAccount(address,address,address,uint256)": EventFragment; - "Mock_Submitted(address,uint256,address)": EventFragment; - "MultiCallFinished()": EventFragment; - "MultiCallStarted(address)": EventFragment; - "NewConfigurator(address)": EventFragment; - "NewLimit(uint256)": EventFragment; - "OpenCreditAccount(address,address,uint256,uint16)": EventFragment; - "TokenDisabled(address,address)": EventFragment; - "TokenEnabled(address,address)": EventFragment; - "TransferAccount(address,address)": EventFragment; - "TransferAccountAllowed(address,address,bool)": EventFragment; - "log(string)": EventFragment; - "log_address(address)": EventFragment; - "log_bytes(bytes)": EventFragment; - "log_bytes32(bytes32)": EventFragment; - "log_int(int256)": EventFragment; - "log_named_address(string,address)": EventFragment; - "log_named_bytes(string,bytes)": EventFragment; - "log_named_bytes32(string,bytes32)": EventFragment; - "log_named_decimal_int(string,int256,uint256)": EventFragment; - "log_named_decimal_uint(string,uint256,uint256)": EventFragment; - "log_named_int(string,int256)": EventFragment; - "log_named_string(string,string)": EventFragment; - "log_named_uint(string,uint256)": EventFragment; - "log_string(string)": EventFragment; - "log_uint(uint256)": EventFragment; - "logs(bytes)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "AddCollateral"): EventFragment; - getEvent(nameOrSignatureOrTopic: "CloseCreditAccount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "DecreaseBorrowedAmount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ExecuteOrder"): EventFragment; - getEvent(nameOrSignatureOrTopic: "IncreaseBorrowedAmount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "LiquidateCreditAccount"): EventFragment; - getEvent( - nameOrSignatureOrTopic: "LiquidateExpiredCreditAccount" - ): EventFragment; - getEvent(nameOrSignatureOrTopic: "Mock_Submitted"): EventFragment; - getEvent(nameOrSignatureOrTopic: "MultiCallFinished"): EventFragment; - getEvent(nameOrSignatureOrTopic: "MultiCallStarted"): EventFragment; - getEvent(nameOrSignatureOrTopic: "NewConfigurator"): EventFragment; - getEvent(nameOrSignatureOrTopic: "NewLimit"): EventFragment; - getEvent(nameOrSignatureOrTopic: "OpenCreditAccount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TokenDisabled"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TokenEnabled"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TransferAccount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TransferAccountAllowed"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "logs"): EventFragment; -} - -export interface AddCollateralEventObject { - onBehalfOf: string; - token: string; - value: BigNumber; -} -export type AddCollateralEvent = TypedEvent< - [string, string, BigNumber], - AddCollateralEventObject ->; - -export type AddCollateralEventFilter = TypedEventFilter; - -export interface CloseCreditAccountEventObject { - owner: string; - to: string; -} -export type CloseCreditAccountEvent = TypedEvent< - [string, string], - CloseCreditAccountEventObject ->; - -export type CloseCreditAccountEventFilter = - TypedEventFilter; - -export interface DecreaseBorrowedAmountEventObject { - borrower: string; - amount: BigNumber; -} -export type DecreaseBorrowedAmountEvent = TypedEvent< - [string, BigNumber], - DecreaseBorrowedAmountEventObject ->; - -export type DecreaseBorrowedAmountEventFilter = - TypedEventFilter; - -export interface ExecuteOrderEventObject { - borrower: string; - target: string; -} -export type ExecuteOrderEvent = TypedEvent< - [string, string], - ExecuteOrderEventObject ->; - -export type ExecuteOrderEventFilter = TypedEventFilter; - -export interface IncreaseBorrowedAmountEventObject { - borrower: string; - amount: BigNumber; -} -export type IncreaseBorrowedAmountEvent = TypedEvent< - [string, BigNumber], - IncreaseBorrowedAmountEventObject ->; - -export type IncreaseBorrowedAmountEventFilter = - TypedEventFilter; - -export interface LiquidateCreditAccountEventObject { - owner: string; - liquidator: string; - to: string; - remainingFunds: BigNumber; -} -export type LiquidateCreditAccountEvent = TypedEvent< - [string, string, string, BigNumber], - LiquidateCreditAccountEventObject ->; - -export type LiquidateCreditAccountEventFilter = - TypedEventFilter; - -export interface LiquidateExpiredCreditAccountEventObject { - owner: string; - liquidator: string; - to: string; - remainingFunds: BigNumber; -} -export type LiquidateExpiredCreditAccountEvent = TypedEvent< - [string, string, string, BigNumber], - LiquidateExpiredCreditAccountEventObject ->; - -export type LiquidateExpiredCreditAccountEventFilter = - TypedEventFilter; - -export interface Mock_SubmittedEventObject { - sender: string; - amount: BigNumber; - referral: string; -} -export type Mock_SubmittedEvent = TypedEvent< - [string, BigNumber, string], - Mock_SubmittedEventObject ->; - -export type Mock_SubmittedEventFilter = TypedEventFilter; - -export interface MultiCallFinishedEventObject {} -export type MultiCallFinishedEvent = TypedEvent< - [], - MultiCallFinishedEventObject ->; - -export type MultiCallFinishedEventFilter = - TypedEventFilter; - -export interface MultiCallStartedEventObject { - borrower: string; -} -export type MultiCallStartedEvent = TypedEvent< - [string], - MultiCallStartedEventObject ->; - -export type MultiCallStartedEventFilter = - TypedEventFilter; - -export interface NewConfiguratorEventObject { - newConfigurator: string; -} -export type NewConfiguratorEvent = TypedEvent< - [string], - NewConfiguratorEventObject ->; - -export type NewConfiguratorEventFilter = TypedEventFilter; - -export interface NewLimitEventObject { - _limit: BigNumber; -} -export type NewLimitEvent = TypedEvent<[BigNumber], NewLimitEventObject>; - -export type NewLimitEventFilter = TypedEventFilter; - -export interface OpenCreditAccountEventObject { - onBehalfOf: string; - creditAccount: string; - borrowAmount: BigNumber; - referralCode: number; -} -export type OpenCreditAccountEvent = TypedEvent< - [string, string, BigNumber, number], - OpenCreditAccountEventObject ->; - -export type OpenCreditAccountEventFilter = - TypedEventFilter; - -export interface TokenDisabledEventObject { - creditAccount: string; - token: string; -} -export type TokenDisabledEvent = TypedEvent< - [string, string], - TokenDisabledEventObject ->; - -export type TokenDisabledEventFilter = TypedEventFilter; - -export interface TokenEnabledEventObject { - creditAccount: string; - token: string; -} -export type TokenEnabledEvent = TypedEvent< - [string, string], - TokenEnabledEventObject ->; - -export type TokenEnabledEventFilter = TypedEventFilter; - -export interface TransferAccountEventObject { - oldOwner: string; - newOwner: string; -} -export type TransferAccountEvent = TypedEvent< - [string, string], - TransferAccountEventObject ->; - -export type TransferAccountEventFilter = TypedEventFilter; - -export interface TransferAccountAllowedEventObject { - from: string; - to: string; - state: boolean; -} -export type TransferAccountAllowedEvent = TypedEvent< - [string, string, boolean], - TransferAccountAllowedEventObject ->; - -export type TransferAccountAllowedEventFilter = - TypedEventFilter; - -export interface logEventObject { - arg0: string; -} -export type logEvent = TypedEvent<[string], logEventObject>; - -export type logEventFilter = TypedEventFilter; - -export interface log_addressEventObject { - arg0: string; -} -export type log_addressEvent = TypedEvent<[string], log_addressEventObject>; - -export type log_addressEventFilter = TypedEventFilter; - -export interface log_bytesEventObject { - arg0: string; -} -export type log_bytesEvent = TypedEvent<[string], log_bytesEventObject>; - -export type log_bytesEventFilter = TypedEventFilter; - -export interface log_bytes32EventObject { - arg0: string; -} -export type log_bytes32Event = TypedEvent<[string], log_bytes32EventObject>; - -export type log_bytes32EventFilter = TypedEventFilter; - -export interface log_intEventObject { - arg0: BigNumber; -} -export type log_intEvent = TypedEvent<[BigNumber], log_intEventObject>; - -export type log_intEventFilter = TypedEventFilter; - -export interface log_named_addressEventObject { - key: string; - val: string; -} -export type log_named_addressEvent = TypedEvent< - [string, string], - log_named_addressEventObject ->; - -export type log_named_addressEventFilter = - TypedEventFilter; - -export interface log_named_bytesEventObject { - key: string; - val: string; -} -export type log_named_bytesEvent = TypedEvent< - [string, string], - log_named_bytesEventObject ->; - -export type log_named_bytesEventFilter = TypedEventFilter; - -export interface log_named_bytes32EventObject { - key: string; - val: string; -} -export type log_named_bytes32Event = TypedEvent< - [string, string], - log_named_bytes32EventObject ->; - -export type log_named_bytes32EventFilter = - TypedEventFilter; - -export interface log_named_decimal_intEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_intEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_intEventObject ->; - -export type log_named_decimal_intEventFilter = - TypedEventFilter; - -export interface log_named_decimal_uintEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_uintEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_uintEventObject ->; - -export type log_named_decimal_uintEventFilter = - TypedEventFilter; - -export interface log_named_intEventObject { - key: string; - val: BigNumber; -} -export type log_named_intEvent = TypedEvent< - [string, BigNumber], - log_named_intEventObject ->; - -export type log_named_intEventFilter = TypedEventFilter; - -export interface log_named_stringEventObject { - key: string; - val: string; -} -export type log_named_stringEvent = TypedEvent< - [string, string], - log_named_stringEventObject ->; - -export type log_named_stringEventFilter = - TypedEventFilter; - -export interface log_named_uintEventObject { - key: string; - val: BigNumber; -} -export type log_named_uintEvent = TypedEvent< - [string, BigNumber], - log_named_uintEventObject ->; - -export type log_named_uintEventFilter = TypedEventFilter; - -export interface log_stringEventObject { - arg0: string; -} -export type log_stringEvent = TypedEvent<[string], log_stringEventObject>; - -export type log_stringEventFilter = TypedEventFilter; - -export interface log_uintEventObject { - arg0: BigNumber; -} -export type log_uintEvent = TypedEvent<[BigNumber], log_uintEventObject>; - -export type log_uintEventFilter = TypedEventFilter; - -export interface logsEventObject { - arg0: string; -} -export type logsEvent = TypedEvent<[string], logsEventObject>; - -export type logsEventFilter = TypedEventFilter; - -export interface LidoV1AdapterTest extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: LidoV1AdapterTestInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - IS_TEST(overrides?: CallOverrides): Promise<[boolean]>; - - cft(overrides?: CallOverrides): Promise<[string]>; - - creditConfigurator(overrides?: CallOverrides): Promise<[string]>; - - creditFacade(overrides?: CallOverrides): Promise<[string]>; - - creditManager(overrides?: CallOverrides): Promise<[string]>; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - lidoV1Adapter(overrides?: CallOverrides): Promise<[string]>; - - lidoV1Gateway(overrides?: CallOverrides): Promise<[string]>; - - lidoV1Mock(overrides?: CallOverrides): Promise<[string]>; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_LDOV1_01_constructor_sets_correct_params( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_LDOV1_02_submit_and_submitAll_reverts_if_user_has_no_account( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_LDOV1_03_submit_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_LDOV1_04_submitAll_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_LDOV1_05_submit_updates_limit_and_reverts_on_limit_exceeded( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_LDOV1_06_submit_updates_limit_and_reverts_on_limit_exceeded( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_LDOV1_07_submit_updates_limit_properly( - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise<[string]>; - }; - - IS_TEST(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - lidoV1Adapter(overrides?: CallOverrides): Promise; - - lidoV1Gateway(overrides?: CallOverrides): Promise; - - lidoV1Mock(overrides?: CallOverrides): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_LDOV1_01_constructor_sets_correct_params( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_LDOV1_02_submit_and_submitAll_reverts_if_user_has_no_account( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_LDOV1_03_submit_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_LDOV1_04_submitAll_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_LDOV1_05_submit_updates_limit_and_reverts_on_limit_exceeded( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_LDOV1_06_submit_updates_limit_and_reverts_on_limit_exceeded( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_LDOV1_07_submit_updates_limit_properly( - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - - callStatic: { - IS_TEST(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - failed(overrides?: CallOverrides): Promise; - - lidoV1Adapter(overrides?: CallOverrides): Promise; - - lidoV1Gateway(overrides?: CallOverrides): Promise; - - lidoV1Mock(overrides?: CallOverrides): Promise; - - setUp(overrides?: CallOverrides): Promise; - - test_LDOV1_01_constructor_sets_correct_params( - overrides?: CallOverrides - ): Promise; - - test_LDOV1_02_submit_and_submitAll_reverts_if_user_has_no_account( - overrides?: CallOverrides - ): Promise; - - test_LDOV1_03_submit_works_correctly( - overrides?: CallOverrides - ): Promise; - - test_LDOV1_04_submitAll_works_correctly( - overrides?: CallOverrides - ): Promise; - - test_LDOV1_05_submit_updates_limit_and_reverts_on_limit_exceeded( - overrides?: CallOverrides - ): Promise; - - test_LDOV1_06_submit_updates_limit_and_reverts_on_limit_exceeded( - overrides?: CallOverrides - ): Promise; - - test_LDOV1_07_submit_updates_limit_properly( - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - }; - - filters: { - "AddCollateral(address,address,uint256)"( - onBehalfOf?: string | null, - token?: string | null, - value?: null - ): AddCollateralEventFilter; - AddCollateral( - onBehalfOf?: string | null, - token?: string | null, - value?: null - ): AddCollateralEventFilter; - - "CloseCreditAccount(address,address)"( - owner?: string | null, - to?: string | null - ): CloseCreditAccountEventFilter; - CloseCreditAccount( - owner?: string | null, - to?: string | null - ): CloseCreditAccountEventFilter; - - "DecreaseBorrowedAmount(address,uint256)"( - borrower?: string | null, - amount?: null - ): DecreaseBorrowedAmountEventFilter; - DecreaseBorrowedAmount( - borrower?: string | null, - amount?: null - ): DecreaseBorrowedAmountEventFilter; - - "ExecuteOrder(address,address)"( - borrower?: string | null, - target?: string | null - ): ExecuteOrderEventFilter; - ExecuteOrder( - borrower?: string | null, - target?: string | null - ): ExecuteOrderEventFilter; - - "IncreaseBorrowedAmount(address,uint256)"( - borrower?: string | null, - amount?: null - ): IncreaseBorrowedAmountEventFilter; - IncreaseBorrowedAmount( - borrower?: string | null, - amount?: null - ): IncreaseBorrowedAmountEventFilter; - - "LiquidateCreditAccount(address,address,address,uint256)"( - owner?: string | null, - liquidator?: string | null, - to?: string | null, - remainingFunds?: null - ): LiquidateCreditAccountEventFilter; - LiquidateCreditAccount( - owner?: string | null, - liquidator?: string | null, - to?: string | null, - remainingFunds?: null - ): LiquidateCreditAccountEventFilter; - - "LiquidateExpiredCreditAccount(address,address,address,uint256)"( - owner?: string | null, - liquidator?: string | null, - to?: string | null, - remainingFunds?: null - ): LiquidateExpiredCreditAccountEventFilter; - LiquidateExpiredCreditAccount( - owner?: string | null, - liquidator?: string | null, - to?: string | null, - remainingFunds?: null - ): LiquidateExpiredCreditAccountEventFilter; - - "Mock_Submitted(address,uint256,address)"( - sender?: string | null, - amount?: null, - referral?: null - ): Mock_SubmittedEventFilter; - Mock_Submitted( - sender?: string | null, - amount?: null, - referral?: null - ): Mock_SubmittedEventFilter; - - "MultiCallFinished()"(): MultiCallFinishedEventFilter; - MultiCallFinished(): MultiCallFinishedEventFilter; - - "MultiCallStarted(address)"( - borrower?: string | null - ): MultiCallStartedEventFilter; - MultiCallStarted(borrower?: string | null): MultiCallStartedEventFilter; - - "NewConfigurator(address)"( - newConfigurator?: string | null - ): NewConfiguratorEventFilter; - NewConfigurator( - newConfigurator?: string | null - ): NewConfiguratorEventFilter; - - "NewLimit(uint256)"(_limit?: null): NewLimitEventFilter; - NewLimit(_limit?: null): NewLimitEventFilter; - - "OpenCreditAccount(address,address,uint256,uint16)"( - onBehalfOf?: string | null, - creditAccount?: string | null, - borrowAmount?: null, - referralCode?: null - ): OpenCreditAccountEventFilter; - OpenCreditAccount( - onBehalfOf?: string | null, - creditAccount?: string | null, - borrowAmount?: null, - referralCode?: null - ): OpenCreditAccountEventFilter; - - "TokenDisabled(address,address)"( - creditAccount?: null, - token?: null - ): TokenDisabledEventFilter; - TokenDisabled(creditAccount?: null, token?: null): TokenDisabledEventFilter; - - "TokenEnabled(address,address)"( - creditAccount?: null, - token?: null - ): TokenEnabledEventFilter; - TokenEnabled(creditAccount?: null, token?: null): TokenEnabledEventFilter; - - "TransferAccount(address,address)"( - oldOwner?: string | null, - newOwner?: string | null - ): TransferAccountEventFilter; - TransferAccount( - oldOwner?: string | null, - newOwner?: string | null - ): TransferAccountEventFilter; - - "TransferAccountAllowed(address,address,bool)"( - from?: string | null, - to?: string | null, - state?: null - ): TransferAccountAllowedEventFilter; - TransferAccountAllowed( - from?: string | null, - to?: string | null, - state?: null - ): TransferAccountAllowedEventFilter; - - "log(string)"(arg0?: null): logEventFilter; - log(arg0?: null): logEventFilter; - - "log_address(address)"(arg0?: null): log_addressEventFilter; - log_address(arg0?: null): log_addressEventFilter; - - "log_bytes(bytes)"(arg0?: null): log_bytesEventFilter; - log_bytes(arg0?: null): log_bytesEventFilter; - - "log_bytes32(bytes32)"(arg0?: null): log_bytes32EventFilter; - log_bytes32(arg0?: null): log_bytes32EventFilter; - - "log_int(int256)"(arg0?: null): log_intEventFilter; - log_int(arg0?: null): log_intEventFilter; - - "log_named_address(string,address)"( - key?: null, - val?: null - ): log_named_addressEventFilter; - log_named_address(key?: null, val?: null): log_named_addressEventFilter; - - "log_named_bytes(string,bytes)"( - key?: null, - val?: null - ): log_named_bytesEventFilter; - log_named_bytes(key?: null, val?: null): log_named_bytesEventFilter; - - "log_named_bytes32(string,bytes32)"( - key?: null, - val?: null - ): log_named_bytes32EventFilter; - log_named_bytes32(key?: null, val?: null): log_named_bytes32EventFilter; - - "log_named_decimal_int(string,int256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - log_named_decimal_int( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - - "log_named_decimal_uint(string,uint256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - log_named_decimal_uint( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - - "log_named_int(string,int256)"( - key?: null, - val?: null - ): log_named_intEventFilter; - log_named_int(key?: null, val?: null): log_named_intEventFilter; - - "log_named_string(string,string)"( - key?: null, - val?: null - ): log_named_stringEventFilter; - log_named_string(key?: null, val?: null): log_named_stringEventFilter; - - "log_named_uint(string,uint256)"( - key?: null, - val?: null - ): log_named_uintEventFilter; - log_named_uint(key?: null, val?: null): log_named_uintEventFilter; - - "log_string(string)"(arg0?: null): log_stringEventFilter; - log_string(arg0?: null): log_stringEventFilter; - - "log_uint(uint256)"(arg0?: null): log_uintEventFilter; - log_uint(arg0?: null): log_uintEventFilter; - - "logs(bytes)"(arg0?: null): logsEventFilter; - logs(arg0?: null): logsEventFilter; - }; - - estimateGas: { - IS_TEST(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - lidoV1Adapter(overrides?: CallOverrides): Promise; - - lidoV1Gateway(overrides?: CallOverrides): Promise; - - lidoV1Mock(overrides?: CallOverrides): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_LDOV1_01_constructor_sets_correct_params( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_LDOV1_02_submit_and_submitAll_reverts_if_user_has_no_account( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_LDOV1_03_submit_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_LDOV1_04_submitAll_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_LDOV1_05_submit_updates_limit_and_reverts_on_limit_exceeded( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_LDOV1_06_submit_updates_limit_and_reverts_on_limit_exceeded( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_LDOV1_07_submit_updates_limit_properly( - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - IS_TEST(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator( - overrides?: CallOverrides - ): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - lidoV1Adapter(overrides?: CallOverrides): Promise; - - lidoV1Gateway(overrides?: CallOverrides): Promise; - - lidoV1Mock(overrides?: CallOverrides): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_LDOV1_01_constructor_sets_correct_params( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_LDOV1_02_submit_and_submitAll_reverts_if_user_has_no_account( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_LDOV1_03_submit_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_LDOV1_04_submitAll_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_LDOV1_05_submit_updates_limit_and_reverts_on_limit_exceeded( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_LDOV1_06_submit_updates_limit_and_reverts_on_limit_exceeded( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_LDOV1_07_submit_updates_limit_properly( - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/test/adapters/LidoV1Adapter.t.sol/index.ts b/src/types/contracts/test/adapters/LidoV1Adapter.t.sol/index.ts deleted file mode 100644 index 27a153dd..00000000 --- a/src/types/contracts/test/adapters/LidoV1Adapter.t.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { LidoV1AdapterTest } from "./LidoV1AdapterTest"; diff --git a/src/types/contracts/test/adapters/UniswapV2Adapter.t.sol/UniswapV2AdapterTest.ts b/src/types/contracts/test/adapters/UniswapV2Adapter.t.sol/UniswapV2AdapterTest.ts deleted file mode 100644 index 30981cd5..00000000 --- a/src/types/contracts/test/adapters/UniswapV2Adapter.t.sol/UniswapV2AdapterTest.ts +++ /dev/null @@ -1,1210 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface UniswapV2AdapterTestInterface extends utils.Interface { - functions: { - "IS_TEST()": FunctionFragment; - "adapter()": FunctionFragment; - "cft()": FunctionFragment; - "creditConfigurator()": FunctionFragment; - "creditFacade()": FunctionFragment; - "creditManager()": FunctionFragment; - "deadline()": FunctionFragment; - "failed()": FunctionFragment; - "setUp()": FunctionFragment; - "test_AUV2_01_swap_reverts_if_uses_has_no_account()": FunctionFragment; - "test_AUV2_02_swapTokensForExactTokens_works_for_user_as_expected()": FunctionFragment; - "test_AUV2_03_swapExactTokensForTokens_works_for_user_as_expected()": FunctionFragment; - "test_AUV2_04_swapAllTokensForTokens_works_for_user_as_expected()": FunctionFragment; - "test_AUV2_05_adapter_quote_same_as_router(uint256,uint256,uint256)": FunctionFragment; - "test_AUV2_06_adapter_getAmountOut_same_as_router(uint256,uint256,uint256)": FunctionFragment; - "test_AUV2_07_adapter_getAmountIn_same_as_router(uint256,uint256,uint256)": FunctionFragment; - "test_AUV2_08_adapter_getAmountsOut_same_as_router(uint256)": FunctionFragment; - "test_AUV2_09_adapter_getAmountsIn_same_as_router(uint256)": FunctionFragment; - "underlying()": FunctionFragment; - "uniswapMock()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "IS_TEST" - | "adapter" - | "cft" - | "creditConfigurator" - | "creditFacade" - | "creditManager" - | "deadline" - | "failed" - | "setUp" - | "test_AUV2_01_swap_reverts_if_uses_has_no_account" - | "test_AUV2_02_swapTokensForExactTokens_works_for_user_as_expected" - | "test_AUV2_03_swapExactTokensForTokens_works_for_user_as_expected" - | "test_AUV2_04_swapAllTokensForTokens_works_for_user_as_expected" - | "test_AUV2_05_adapter_quote_same_as_router" - | "test_AUV2_06_adapter_getAmountOut_same_as_router" - | "test_AUV2_07_adapter_getAmountIn_same_as_router" - | "test_AUV2_08_adapter_getAmountsOut_same_as_router" - | "test_AUV2_09_adapter_getAmountsIn_same_as_router" - | "underlying" - | "uniswapMock" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "IS_TEST", values?: undefined): string; - encodeFunctionData(functionFragment: "adapter", values?: undefined): string; - encodeFunctionData(functionFragment: "cft", values?: undefined): string; - encodeFunctionData( - functionFragment: "creditConfigurator", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditFacade", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditManager", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "deadline", values?: undefined): string; - encodeFunctionData(functionFragment: "failed", values?: undefined): string; - encodeFunctionData(functionFragment: "setUp", values?: undefined): string; - encodeFunctionData( - functionFragment: "test_AUV2_01_swap_reverts_if_uses_has_no_account", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_AUV2_02_swapTokensForExactTokens_works_for_user_as_expected", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_AUV2_03_swapExactTokensForTokens_works_for_user_as_expected", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_AUV2_04_swapAllTokensForTokens_works_for_user_as_expected", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_AUV2_05_adapter_quote_same_as_router", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "test_AUV2_06_adapter_getAmountOut_same_as_router", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "test_AUV2_07_adapter_getAmountIn_same_as_router", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "test_AUV2_08_adapter_getAmountsOut_same_as_router", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "test_AUV2_09_adapter_getAmountsIn_same_as_router", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "underlying", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "uniswapMock", - values?: undefined - ): string; - - decodeFunctionResult(functionFragment: "IS_TEST", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "adapter", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "cft", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "creditConfigurator", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditFacade", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditManager", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "deadline", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "failed", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "setUp", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "test_AUV2_01_swap_reverts_if_uses_has_no_account", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_AUV2_02_swapTokensForExactTokens_works_for_user_as_expected", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_AUV2_03_swapExactTokensForTokens_works_for_user_as_expected", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_AUV2_04_swapAllTokensForTokens_works_for_user_as_expected", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_AUV2_05_adapter_quote_same_as_router", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_AUV2_06_adapter_getAmountOut_same_as_router", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_AUV2_07_adapter_getAmountIn_same_as_router", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_AUV2_08_adapter_getAmountsOut_same_as_router", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_AUV2_09_adapter_getAmountsIn_same_as_router", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "underlying", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "uniswapMock", - data: BytesLike - ): Result; - - events: { - "AddCollateral(address,address,uint256)": EventFragment; - "CloseCreditAccount(address,address)": EventFragment; - "DecreaseBorrowedAmount(address,uint256)": EventFragment; - "ExecuteOrder(address,address)": EventFragment; - "IncreaseBorrowedAmount(address,uint256)": EventFragment; - "LiquidateCreditAccount(address,address,address,uint256)": EventFragment; - "LiquidateExpiredCreditAccount(address,address,address,uint256)": EventFragment; - "MultiCallFinished()": EventFragment; - "MultiCallStarted(address)": EventFragment; - "NewConfigurator(address)": EventFragment; - "OpenCreditAccount(address,address,uint256,uint16)": EventFragment; - "TokenDisabled(address,address)": EventFragment; - "TokenEnabled(address,address)": EventFragment; - "TransferAccount(address,address)": EventFragment; - "TransferAccountAllowed(address,address,bool)": EventFragment; - "log(string)": EventFragment; - "log_address(address)": EventFragment; - "log_bytes(bytes)": EventFragment; - "log_bytes32(bytes32)": EventFragment; - "log_int(int256)": EventFragment; - "log_named_address(string,address)": EventFragment; - "log_named_bytes(string,bytes)": EventFragment; - "log_named_bytes32(string,bytes32)": EventFragment; - "log_named_decimal_int(string,int256,uint256)": EventFragment; - "log_named_decimal_uint(string,uint256,uint256)": EventFragment; - "log_named_int(string,int256)": EventFragment; - "log_named_string(string,string)": EventFragment; - "log_named_uint(string,uint256)": EventFragment; - "log_string(string)": EventFragment; - "log_uint(uint256)": EventFragment; - "logs(bytes)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "AddCollateral"): EventFragment; - getEvent(nameOrSignatureOrTopic: "CloseCreditAccount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "DecreaseBorrowedAmount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ExecuteOrder"): EventFragment; - getEvent(nameOrSignatureOrTopic: "IncreaseBorrowedAmount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "LiquidateCreditAccount"): EventFragment; - getEvent( - nameOrSignatureOrTopic: "LiquidateExpiredCreditAccount" - ): EventFragment; - getEvent(nameOrSignatureOrTopic: "MultiCallFinished"): EventFragment; - getEvent(nameOrSignatureOrTopic: "MultiCallStarted"): EventFragment; - getEvent(nameOrSignatureOrTopic: "NewConfigurator"): EventFragment; - getEvent(nameOrSignatureOrTopic: "OpenCreditAccount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TokenDisabled"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TokenEnabled"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TransferAccount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TransferAccountAllowed"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "logs"): EventFragment; -} - -export interface AddCollateralEventObject { - onBehalfOf: string; - token: string; - value: BigNumber; -} -export type AddCollateralEvent = TypedEvent< - [string, string, BigNumber], - AddCollateralEventObject ->; - -export type AddCollateralEventFilter = TypedEventFilter; - -export interface CloseCreditAccountEventObject { - owner: string; - to: string; -} -export type CloseCreditAccountEvent = TypedEvent< - [string, string], - CloseCreditAccountEventObject ->; - -export type CloseCreditAccountEventFilter = - TypedEventFilter; - -export interface DecreaseBorrowedAmountEventObject { - borrower: string; - amount: BigNumber; -} -export type DecreaseBorrowedAmountEvent = TypedEvent< - [string, BigNumber], - DecreaseBorrowedAmountEventObject ->; - -export type DecreaseBorrowedAmountEventFilter = - TypedEventFilter; - -export interface ExecuteOrderEventObject { - borrower: string; - target: string; -} -export type ExecuteOrderEvent = TypedEvent< - [string, string], - ExecuteOrderEventObject ->; - -export type ExecuteOrderEventFilter = TypedEventFilter; - -export interface IncreaseBorrowedAmountEventObject { - borrower: string; - amount: BigNumber; -} -export type IncreaseBorrowedAmountEvent = TypedEvent< - [string, BigNumber], - IncreaseBorrowedAmountEventObject ->; - -export type IncreaseBorrowedAmountEventFilter = - TypedEventFilter; - -export interface LiquidateCreditAccountEventObject { - owner: string; - liquidator: string; - to: string; - remainingFunds: BigNumber; -} -export type LiquidateCreditAccountEvent = TypedEvent< - [string, string, string, BigNumber], - LiquidateCreditAccountEventObject ->; - -export type LiquidateCreditAccountEventFilter = - TypedEventFilter; - -export interface LiquidateExpiredCreditAccountEventObject { - owner: string; - liquidator: string; - to: string; - remainingFunds: BigNumber; -} -export type LiquidateExpiredCreditAccountEvent = TypedEvent< - [string, string, string, BigNumber], - LiquidateExpiredCreditAccountEventObject ->; - -export type LiquidateExpiredCreditAccountEventFilter = - TypedEventFilter; - -export interface MultiCallFinishedEventObject {} -export type MultiCallFinishedEvent = TypedEvent< - [], - MultiCallFinishedEventObject ->; - -export type MultiCallFinishedEventFilter = - TypedEventFilter; - -export interface MultiCallStartedEventObject { - borrower: string; -} -export type MultiCallStartedEvent = TypedEvent< - [string], - MultiCallStartedEventObject ->; - -export type MultiCallStartedEventFilter = - TypedEventFilter; - -export interface NewConfiguratorEventObject { - newConfigurator: string; -} -export type NewConfiguratorEvent = TypedEvent< - [string], - NewConfiguratorEventObject ->; - -export type NewConfiguratorEventFilter = TypedEventFilter; - -export interface OpenCreditAccountEventObject { - onBehalfOf: string; - creditAccount: string; - borrowAmount: BigNumber; - referralCode: number; -} -export type OpenCreditAccountEvent = TypedEvent< - [string, string, BigNumber, number], - OpenCreditAccountEventObject ->; - -export type OpenCreditAccountEventFilter = - TypedEventFilter; - -export interface TokenDisabledEventObject { - creditAccount: string; - token: string; -} -export type TokenDisabledEvent = TypedEvent< - [string, string], - TokenDisabledEventObject ->; - -export type TokenDisabledEventFilter = TypedEventFilter; - -export interface TokenEnabledEventObject { - creditAccount: string; - token: string; -} -export type TokenEnabledEvent = TypedEvent< - [string, string], - TokenEnabledEventObject ->; - -export type TokenEnabledEventFilter = TypedEventFilter; - -export interface TransferAccountEventObject { - oldOwner: string; - newOwner: string; -} -export type TransferAccountEvent = TypedEvent< - [string, string], - TransferAccountEventObject ->; - -export type TransferAccountEventFilter = TypedEventFilter; - -export interface TransferAccountAllowedEventObject { - from: string; - to: string; - state: boolean; -} -export type TransferAccountAllowedEvent = TypedEvent< - [string, string, boolean], - TransferAccountAllowedEventObject ->; - -export type TransferAccountAllowedEventFilter = - TypedEventFilter; - -export interface logEventObject { - arg0: string; -} -export type logEvent = TypedEvent<[string], logEventObject>; - -export type logEventFilter = TypedEventFilter; - -export interface log_addressEventObject { - arg0: string; -} -export type log_addressEvent = TypedEvent<[string], log_addressEventObject>; - -export type log_addressEventFilter = TypedEventFilter; - -export interface log_bytesEventObject { - arg0: string; -} -export type log_bytesEvent = TypedEvent<[string], log_bytesEventObject>; - -export type log_bytesEventFilter = TypedEventFilter; - -export interface log_bytes32EventObject { - arg0: string; -} -export type log_bytes32Event = TypedEvent<[string], log_bytes32EventObject>; - -export type log_bytes32EventFilter = TypedEventFilter; - -export interface log_intEventObject { - arg0: BigNumber; -} -export type log_intEvent = TypedEvent<[BigNumber], log_intEventObject>; - -export type log_intEventFilter = TypedEventFilter; - -export interface log_named_addressEventObject { - key: string; - val: string; -} -export type log_named_addressEvent = TypedEvent< - [string, string], - log_named_addressEventObject ->; - -export type log_named_addressEventFilter = - TypedEventFilter; - -export interface log_named_bytesEventObject { - key: string; - val: string; -} -export type log_named_bytesEvent = TypedEvent< - [string, string], - log_named_bytesEventObject ->; - -export type log_named_bytesEventFilter = TypedEventFilter; - -export interface log_named_bytes32EventObject { - key: string; - val: string; -} -export type log_named_bytes32Event = TypedEvent< - [string, string], - log_named_bytes32EventObject ->; - -export type log_named_bytes32EventFilter = - TypedEventFilter; - -export interface log_named_decimal_intEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_intEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_intEventObject ->; - -export type log_named_decimal_intEventFilter = - TypedEventFilter; - -export interface log_named_decimal_uintEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_uintEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_uintEventObject ->; - -export type log_named_decimal_uintEventFilter = - TypedEventFilter; - -export interface log_named_intEventObject { - key: string; - val: BigNumber; -} -export type log_named_intEvent = TypedEvent< - [string, BigNumber], - log_named_intEventObject ->; - -export type log_named_intEventFilter = TypedEventFilter; - -export interface log_named_stringEventObject { - key: string; - val: string; -} -export type log_named_stringEvent = TypedEvent< - [string, string], - log_named_stringEventObject ->; - -export type log_named_stringEventFilter = - TypedEventFilter; - -export interface log_named_uintEventObject { - key: string; - val: BigNumber; -} -export type log_named_uintEvent = TypedEvent< - [string, BigNumber], - log_named_uintEventObject ->; - -export type log_named_uintEventFilter = TypedEventFilter; - -export interface log_stringEventObject { - arg0: string; -} -export type log_stringEvent = TypedEvent<[string], log_stringEventObject>; - -export type log_stringEventFilter = TypedEventFilter; - -export interface log_uintEventObject { - arg0: BigNumber; -} -export type log_uintEvent = TypedEvent<[BigNumber], log_uintEventObject>; - -export type log_uintEventFilter = TypedEventFilter; - -export interface logsEventObject { - arg0: string; -} -export type logsEvent = TypedEvent<[string], logsEventObject>; - -export type logsEventFilter = TypedEventFilter; - -export interface UniswapV2AdapterTest extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: UniswapV2AdapterTestInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - IS_TEST(overrides?: CallOverrides): Promise<[boolean]>; - - adapter(overrides?: CallOverrides): Promise<[string]>; - - cft(overrides?: CallOverrides): Promise<[string]>; - - creditConfigurator(overrides?: CallOverrides): Promise<[string]>; - - creditFacade(overrides?: CallOverrides): Promise<[string]>; - - creditManager(overrides?: CallOverrides): Promise<[string]>; - - deadline(overrides?: CallOverrides): Promise<[BigNumber]>; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AUV2_01_swap_reverts_if_uses_has_no_account( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AUV2_02_swapTokensForExactTokens_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AUV2_03_swapExactTokensForTokens_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AUV2_04_swapAllTokensForTokens_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AUV2_05_adapter_quote_same_as_router( - amountA: BigNumberish, - reserveA: BigNumberish, - reserveB: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AUV2_06_adapter_getAmountOut_same_as_router( - amountIn: BigNumberish, - reserveIn: BigNumberish, - reserveOut: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AUV2_07_adapter_getAmountIn_same_as_router( - amountOut: BigNumberish, - reserveIn: BigNumberish, - reserveOut: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AUV2_08_adapter_getAmountsOut_same_as_router( - amountIn: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AUV2_09_adapter_getAmountsIn_same_as_router( - amountOut: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise<[string]>; - - uniswapMock(overrides?: CallOverrides): Promise<[string]>; - }; - - IS_TEST(overrides?: CallOverrides): Promise; - - adapter(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - deadline(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AUV2_01_swap_reverts_if_uses_has_no_account( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AUV2_02_swapTokensForExactTokens_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AUV2_03_swapExactTokensForTokens_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AUV2_04_swapAllTokensForTokens_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AUV2_05_adapter_quote_same_as_router( - amountA: BigNumberish, - reserveA: BigNumberish, - reserveB: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AUV2_06_adapter_getAmountOut_same_as_router( - amountIn: BigNumberish, - reserveIn: BigNumberish, - reserveOut: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AUV2_07_adapter_getAmountIn_same_as_router( - amountOut: BigNumberish, - reserveIn: BigNumberish, - reserveOut: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AUV2_08_adapter_getAmountsOut_same_as_router( - amountIn: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AUV2_09_adapter_getAmountsIn_same_as_router( - amountOut: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - - uniswapMock(overrides?: CallOverrides): Promise; - - callStatic: { - IS_TEST(overrides?: CallOverrides): Promise; - - adapter(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - deadline(overrides?: CallOverrides): Promise; - - failed(overrides?: CallOverrides): Promise; - - setUp(overrides?: CallOverrides): Promise; - - test_AUV2_01_swap_reverts_if_uses_has_no_account( - overrides?: CallOverrides - ): Promise; - - test_AUV2_02_swapTokensForExactTokens_works_for_user_as_expected( - overrides?: CallOverrides - ): Promise; - - test_AUV2_03_swapExactTokensForTokens_works_for_user_as_expected( - overrides?: CallOverrides - ): Promise; - - test_AUV2_04_swapAllTokensForTokens_works_for_user_as_expected( - overrides?: CallOverrides - ): Promise; - - test_AUV2_05_adapter_quote_same_as_router( - amountA: BigNumberish, - reserveA: BigNumberish, - reserveB: BigNumberish, - overrides?: CallOverrides - ): Promise; - - test_AUV2_06_adapter_getAmountOut_same_as_router( - amountIn: BigNumberish, - reserveIn: BigNumberish, - reserveOut: BigNumberish, - overrides?: CallOverrides - ): Promise; - - test_AUV2_07_adapter_getAmountIn_same_as_router( - amountOut: BigNumberish, - reserveIn: BigNumberish, - reserveOut: BigNumberish, - overrides?: CallOverrides - ): Promise; - - test_AUV2_08_adapter_getAmountsOut_same_as_router( - amountIn: BigNumberish, - overrides?: CallOverrides - ): Promise; - - test_AUV2_09_adapter_getAmountsIn_same_as_router( - amountOut: BigNumberish, - overrides?: CallOverrides - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - - uniswapMock(overrides?: CallOverrides): Promise; - }; - - filters: { - "AddCollateral(address,address,uint256)"( - onBehalfOf?: string | null, - token?: string | null, - value?: null - ): AddCollateralEventFilter; - AddCollateral( - onBehalfOf?: string | null, - token?: string | null, - value?: null - ): AddCollateralEventFilter; - - "CloseCreditAccount(address,address)"( - owner?: string | null, - to?: string | null - ): CloseCreditAccountEventFilter; - CloseCreditAccount( - owner?: string | null, - to?: string | null - ): CloseCreditAccountEventFilter; - - "DecreaseBorrowedAmount(address,uint256)"( - borrower?: string | null, - amount?: null - ): DecreaseBorrowedAmountEventFilter; - DecreaseBorrowedAmount( - borrower?: string | null, - amount?: null - ): DecreaseBorrowedAmountEventFilter; - - "ExecuteOrder(address,address)"( - borrower?: string | null, - target?: string | null - ): ExecuteOrderEventFilter; - ExecuteOrder( - borrower?: string | null, - target?: string | null - ): ExecuteOrderEventFilter; - - "IncreaseBorrowedAmount(address,uint256)"( - borrower?: string | null, - amount?: null - ): IncreaseBorrowedAmountEventFilter; - IncreaseBorrowedAmount( - borrower?: string | null, - amount?: null - ): IncreaseBorrowedAmountEventFilter; - - "LiquidateCreditAccount(address,address,address,uint256)"( - owner?: string | null, - liquidator?: string | null, - to?: string | null, - remainingFunds?: null - ): LiquidateCreditAccountEventFilter; - LiquidateCreditAccount( - owner?: string | null, - liquidator?: string | null, - to?: string | null, - remainingFunds?: null - ): LiquidateCreditAccountEventFilter; - - "LiquidateExpiredCreditAccount(address,address,address,uint256)"( - owner?: string | null, - liquidator?: string | null, - to?: string | null, - remainingFunds?: null - ): LiquidateExpiredCreditAccountEventFilter; - LiquidateExpiredCreditAccount( - owner?: string | null, - liquidator?: string | null, - to?: string | null, - remainingFunds?: null - ): LiquidateExpiredCreditAccountEventFilter; - - "MultiCallFinished()"(): MultiCallFinishedEventFilter; - MultiCallFinished(): MultiCallFinishedEventFilter; - - "MultiCallStarted(address)"( - borrower?: string | null - ): MultiCallStartedEventFilter; - MultiCallStarted(borrower?: string | null): MultiCallStartedEventFilter; - - "NewConfigurator(address)"( - newConfigurator?: string | null - ): NewConfiguratorEventFilter; - NewConfigurator( - newConfigurator?: string | null - ): NewConfiguratorEventFilter; - - "OpenCreditAccount(address,address,uint256,uint16)"( - onBehalfOf?: string | null, - creditAccount?: string | null, - borrowAmount?: null, - referralCode?: null - ): OpenCreditAccountEventFilter; - OpenCreditAccount( - onBehalfOf?: string | null, - creditAccount?: string | null, - borrowAmount?: null, - referralCode?: null - ): OpenCreditAccountEventFilter; - - "TokenDisabled(address,address)"( - creditAccount?: null, - token?: null - ): TokenDisabledEventFilter; - TokenDisabled(creditAccount?: null, token?: null): TokenDisabledEventFilter; - - "TokenEnabled(address,address)"( - creditAccount?: null, - token?: null - ): TokenEnabledEventFilter; - TokenEnabled(creditAccount?: null, token?: null): TokenEnabledEventFilter; - - "TransferAccount(address,address)"( - oldOwner?: string | null, - newOwner?: string | null - ): TransferAccountEventFilter; - TransferAccount( - oldOwner?: string | null, - newOwner?: string | null - ): TransferAccountEventFilter; - - "TransferAccountAllowed(address,address,bool)"( - from?: string | null, - to?: string | null, - state?: null - ): TransferAccountAllowedEventFilter; - TransferAccountAllowed( - from?: string | null, - to?: string | null, - state?: null - ): TransferAccountAllowedEventFilter; - - "log(string)"(arg0?: null): logEventFilter; - log(arg0?: null): logEventFilter; - - "log_address(address)"(arg0?: null): log_addressEventFilter; - log_address(arg0?: null): log_addressEventFilter; - - "log_bytes(bytes)"(arg0?: null): log_bytesEventFilter; - log_bytes(arg0?: null): log_bytesEventFilter; - - "log_bytes32(bytes32)"(arg0?: null): log_bytes32EventFilter; - log_bytes32(arg0?: null): log_bytes32EventFilter; - - "log_int(int256)"(arg0?: null): log_intEventFilter; - log_int(arg0?: null): log_intEventFilter; - - "log_named_address(string,address)"( - key?: null, - val?: null - ): log_named_addressEventFilter; - log_named_address(key?: null, val?: null): log_named_addressEventFilter; - - "log_named_bytes(string,bytes)"( - key?: null, - val?: null - ): log_named_bytesEventFilter; - log_named_bytes(key?: null, val?: null): log_named_bytesEventFilter; - - "log_named_bytes32(string,bytes32)"( - key?: null, - val?: null - ): log_named_bytes32EventFilter; - log_named_bytes32(key?: null, val?: null): log_named_bytes32EventFilter; - - "log_named_decimal_int(string,int256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - log_named_decimal_int( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - - "log_named_decimal_uint(string,uint256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - log_named_decimal_uint( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - - "log_named_int(string,int256)"( - key?: null, - val?: null - ): log_named_intEventFilter; - log_named_int(key?: null, val?: null): log_named_intEventFilter; - - "log_named_string(string,string)"( - key?: null, - val?: null - ): log_named_stringEventFilter; - log_named_string(key?: null, val?: null): log_named_stringEventFilter; - - "log_named_uint(string,uint256)"( - key?: null, - val?: null - ): log_named_uintEventFilter; - log_named_uint(key?: null, val?: null): log_named_uintEventFilter; - - "log_string(string)"(arg0?: null): log_stringEventFilter; - log_string(arg0?: null): log_stringEventFilter; - - "log_uint(uint256)"(arg0?: null): log_uintEventFilter; - log_uint(arg0?: null): log_uintEventFilter; - - "logs(bytes)"(arg0?: null): logsEventFilter; - logs(arg0?: null): logsEventFilter; - }; - - estimateGas: { - IS_TEST(overrides?: CallOverrides): Promise; - - adapter(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - deadline(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AUV2_01_swap_reverts_if_uses_has_no_account( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AUV2_02_swapTokensForExactTokens_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AUV2_03_swapExactTokensForTokens_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AUV2_04_swapAllTokensForTokens_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AUV2_05_adapter_quote_same_as_router( - amountA: BigNumberish, - reserveA: BigNumberish, - reserveB: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AUV2_06_adapter_getAmountOut_same_as_router( - amountIn: BigNumberish, - reserveIn: BigNumberish, - reserveOut: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AUV2_07_adapter_getAmountIn_same_as_router( - amountOut: BigNumberish, - reserveIn: BigNumberish, - reserveOut: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AUV2_08_adapter_getAmountsOut_same_as_router( - amountIn: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AUV2_09_adapter_getAmountsIn_same_as_router( - amountOut: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - - uniswapMock(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - IS_TEST(overrides?: CallOverrides): Promise; - - adapter(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator( - overrides?: CallOverrides - ): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - deadline(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AUV2_01_swap_reverts_if_uses_has_no_account( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AUV2_02_swapTokensForExactTokens_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AUV2_03_swapExactTokensForTokens_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AUV2_04_swapAllTokensForTokens_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AUV2_05_adapter_quote_same_as_router( - amountA: BigNumberish, - reserveA: BigNumberish, - reserveB: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AUV2_06_adapter_getAmountOut_same_as_router( - amountIn: BigNumberish, - reserveIn: BigNumberish, - reserveOut: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AUV2_07_adapter_getAmountIn_same_as_router( - amountOut: BigNumberish, - reserveIn: BigNumberish, - reserveOut: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AUV2_08_adapter_getAmountsOut_same_as_router( - amountIn: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AUV2_09_adapter_getAmountsIn_same_as_router( - amountOut: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - - uniswapMock(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/test/adapters/UniswapV2Adapter.t.sol/index.ts b/src/types/contracts/test/adapters/UniswapV2Adapter.t.sol/index.ts deleted file mode 100644 index fa6a2ea3..00000000 --- a/src/types/contracts/test/adapters/UniswapV2Adapter.t.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { UniswapV2AdapterTest } from "./UniswapV2AdapterTest"; diff --git a/src/types/contracts/test/adapters/UniswapV3Adapter.t.sol/UniswapV3AdapterTest.ts b/src/types/contracts/test/adapters/UniswapV3Adapter.t.sol/UniswapV3AdapterTest.ts deleted file mode 100644 index 0dc132d8..00000000 --- a/src/types/contracts/test/adapters/UniswapV3Adapter.t.sol/UniswapV3AdapterTest.ts +++ /dev/null @@ -1,1124 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface UniswapV3AdapterTestInterface extends utils.Interface { - functions: { - "IS_TEST()": FunctionFragment; - "adapter()": FunctionFragment; - "cft()": FunctionFragment; - "creditConfigurator()": FunctionFragment; - "creditFacade()": FunctionFragment; - "creditManager()": FunctionFragment; - "deadline()": FunctionFragment; - "failed()": FunctionFragment; - "setUp()": FunctionFragment; - "test_AUV3_01_swap_reverts_if_uses_has_no_account()": FunctionFragment; - "test_AUV3_02_exactInputSingle_works_for_user_as_expected()": FunctionFragment; - "test_AUV3_03_exactAllInputSingle_works_for_user_as_expected()": FunctionFragment; - "test_AUV3_04_exactInput_works_for_user_as_expected()": FunctionFragment; - "test_AUV3_05_exactAllInput_works_for_user_as_expected()": FunctionFragment; - "test_AUV3_06_exactOutputSingle_works_for_user_as_expected()": FunctionFragment; - "test_AUV3_07_exactOutput_works_for_user_as_expected()": FunctionFragment; - "test_AUV3_08_exactOutput_cannot_be_exploited_with_tailored_path_parameter()": FunctionFragment; - "underlying()": FunctionFragment; - "uniswapMock()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "IS_TEST" - | "adapter" - | "cft" - | "creditConfigurator" - | "creditFacade" - | "creditManager" - | "deadline" - | "failed" - | "setUp" - | "test_AUV3_01_swap_reverts_if_uses_has_no_account" - | "test_AUV3_02_exactInputSingle_works_for_user_as_expected" - | "test_AUV3_03_exactAllInputSingle_works_for_user_as_expected" - | "test_AUV3_04_exactInput_works_for_user_as_expected" - | "test_AUV3_05_exactAllInput_works_for_user_as_expected" - | "test_AUV3_06_exactOutputSingle_works_for_user_as_expected" - | "test_AUV3_07_exactOutput_works_for_user_as_expected" - | "test_AUV3_08_exactOutput_cannot_be_exploited_with_tailored_path_parameter" - | "underlying" - | "uniswapMock" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "IS_TEST", values?: undefined): string; - encodeFunctionData(functionFragment: "adapter", values?: undefined): string; - encodeFunctionData(functionFragment: "cft", values?: undefined): string; - encodeFunctionData( - functionFragment: "creditConfigurator", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditFacade", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditManager", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "deadline", values?: undefined): string; - encodeFunctionData(functionFragment: "failed", values?: undefined): string; - encodeFunctionData(functionFragment: "setUp", values?: undefined): string; - encodeFunctionData( - functionFragment: "test_AUV3_01_swap_reverts_if_uses_has_no_account", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_AUV3_02_exactInputSingle_works_for_user_as_expected", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_AUV3_03_exactAllInputSingle_works_for_user_as_expected", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_AUV3_04_exactInput_works_for_user_as_expected", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_AUV3_05_exactAllInput_works_for_user_as_expected", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_AUV3_06_exactOutputSingle_works_for_user_as_expected", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_AUV3_07_exactOutput_works_for_user_as_expected", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_AUV3_08_exactOutput_cannot_be_exploited_with_tailored_path_parameter", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "underlying", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "uniswapMock", - values?: undefined - ): string; - - decodeFunctionResult(functionFragment: "IS_TEST", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "adapter", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "cft", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "creditConfigurator", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditFacade", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditManager", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "deadline", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "failed", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "setUp", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "test_AUV3_01_swap_reverts_if_uses_has_no_account", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_AUV3_02_exactInputSingle_works_for_user_as_expected", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_AUV3_03_exactAllInputSingle_works_for_user_as_expected", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_AUV3_04_exactInput_works_for_user_as_expected", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_AUV3_05_exactAllInput_works_for_user_as_expected", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_AUV3_06_exactOutputSingle_works_for_user_as_expected", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_AUV3_07_exactOutput_works_for_user_as_expected", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_AUV3_08_exactOutput_cannot_be_exploited_with_tailored_path_parameter", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "underlying", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "uniswapMock", - data: BytesLike - ): Result; - - events: { - "AddCollateral(address,address,uint256)": EventFragment; - "CloseCreditAccount(address,address)": EventFragment; - "DecreaseBorrowedAmount(address,uint256)": EventFragment; - "ExecuteOrder(address,address)": EventFragment; - "IncreaseBorrowedAmount(address,uint256)": EventFragment; - "LiquidateCreditAccount(address,address,address,uint256)": EventFragment; - "LiquidateExpiredCreditAccount(address,address,address,uint256)": EventFragment; - "MultiCallFinished()": EventFragment; - "MultiCallStarted(address)": EventFragment; - "NewConfigurator(address)": EventFragment; - "OpenCreditAccount(address,address,uint256,uint16)": EventFragment; - "TokenDisabled(address,address)": EventFragment; - "TokenEnabled(address,address)": EventFragment; - "TransferAccount(address,address)": EventFragment; - "TransferAccountAllowed(address,address,bool)": EventFragment; - "log(string)": EventFragment; - "log_address(address)": EventFragment; - "log_bytes(bytes)": EventFragment; - "log_bytes32(bytes32)": EventFragment; - "log_int(int256)": EventFragment; - "log_named_address(string,address)": EventFragment; - "log_named_bytes(string,bytes)": EventFragment; - "log_named_bytes32(string,bytes32)": EventFragment; - "log_named_decimal_int(string,int256,uint256)": EventFragment; - "log_named_decimal_uint(string,uint256,uint256)": EventFragment; - "log_named_int(string,int256)": EventFragment; - "log_named_string(string,string)": EventFragment; - "log_named_uint(string,uint256)": EventFragment; - "log_string(string)": EventFragment; - "log_uint(uint256)": EventFragment; - "logs(bytes)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "AddCollateral"): EventFragment; - getEvent(nameOrSignatureOrTopic: "CloseCreditAccount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "DecreaseBorrowedAmount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ExecuteOrder"): EventFragment; - getEvent(nameOrSignatureOrTopic: "IncreaseBorrowedAmount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "LiquidateCreditAccount"): EventFragment; - getEvent( - nameOrSignatureOrTopic: "LiquidateExpiredCreditAccount" - ): EventFragment; - getEvent(nameOrSignatureOrTopic: "MultiCallFinished"): EventFragment; - getEvent(nameOrSignatureOrTopic: "MultiCallStarted"): EventFragment; - getEvent(nameOrSignatureOrTopic: "NewConfigurator"): EventFragment; - getEvent(nameOrSignatureOrTopic: "OpenCreditAccount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TokenDisabled"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TokenEnabled"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TransferAccount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TransferAccountAllowed"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "logs"): EventFragment; -} - -export interface AddCollateralEventObject { - onBehalfOf: string; - token: string; - value: BigNumber; -} -export type AddCollateralEvent = TypedEvent< - [string, string, BigNumber], - AddCollateralEventObject ->; - -export type AddCollateralEventFilter = TypedEventFilter; - -export interface CloseCreditAccountEventObject { - owner: string; - to: string; -} -export type CloseCreditAccountEvent = TypedEvent< - [string, string], - CloseCreditAccountEventObject ->; - -export type CloseCreditAccountEventFilter = - TypedEventFilter; - -export interface DecreaseBorrowedAmountEventObject { - borrower: string; - amount: BigNumber; -} -export type DecreaseBorrowedAmountEvent = TypedEvent< - [string, BigNumber], - DecreaseBorrowedAmountEventObject ->; - -export type DecreaseBorrowedAmountEventFilter = - TypedEventFilter; - -export interface ExecuteOrderEventObject { - borrower: string; - target: string; -} -export type ExecuteOrderEvent = TypedEvent< - [string, string], - ExecuteOrderEventObject ->; - -export type ExecuteOrderEventFilter = TypedEventFilter; - -export interface IncreaseBorrowedAmountEventObject { - borrower: string; - amount: BigNumber; -} -export type IncreaseBorrowedAmountEvent = TypedEvent< - [string, BigNumber], - IncreaseBorrowedAmountEventObject ->; - -export type IncreaseBorrowedAmountEventFilter = - TypedEventFilter; - -export interface LiquidateCreditAccountEventObject { - owner: string; - liquidator: string; - to: string; - remainingFunds: BigNumber; -} -export type LiquidateCreditAccountEvent = TypedEvent< - [string, string, string, BigNumber], - LiquidateCreditAccountEventObject ->; - -export type LiquidateCreditAccountEventFilter = - TypedEventFilter; - -export interface LiquidateExpiredCreditAccountEventObject { - owner: string; - liquidator: string; - to: string; - remainingFunds: BigNumber; -} -export type LiquidateExpiredCreditAccountEvent = TypedEvent< - [string, string, string, BigNumber], - LiquidateExpiredCreditAccountEventObject ->; - -export type LiquidateExpiredCreditAccountEventFilter = - TypedEventFilter; - -export interface MultiCallFinishedEventObject {} -export type MultiCallFinishedEvent = TypedEvent< - [], - MultiCallFinishedEventObject ->; - -export type MultiCallFinishedEventFilter = - TypedEventFilter; - -export interface MultiCallStartedEventObject { - borrower: string; -} -export type MultiCallStartedEvent = TypedEvent< - [string], - MultiCallStartedEventObject ->; - -export type MultiCallStartedEventFilter = - TypedEventFilter; - -export interface NewConfiguratorEventObject { - newConfigurator: string; -} -export type NewConfiguratorEvent = TypedEvent< - [string], - NewConfiguratorEventObject ->; - -export type NewConfiguratorEventFilter = TypedEventFilter; - -export interface OpenCreditAccountEventObject { - onBehalfOf: string; - creditAccount: string; - borrowAmount: BigNumber; - referralCode: number; -} -export type OpenCreditAccountEvent = TypedEvent< - [string, string, BigNumber, number], - OpenCreditAccountEventObject ->; - -export type OpenCreditAccountEventFilter = - TypedEventFilter; - -export interface TokenDisabledEventObject { - creditAccount: string; - token: string; -} -export type TokenDisabledEvent = TypedEvent< - [string, string], - TokenDisabledEventObject ->; - -export type TokenDisabledEventFilter = TypedEventFilter; - -export interface TokenEnabledEventObject { - creditAccount: string; - token: string; -} -export type TokenEnabledEvent = TypedEvent< - [string, string], - TokenEnabledEventObject ->; - -export type TokenEnabledEventFilter = TypedEventFilter; - -export interface TransferAccountEventObject { - oldOwner: string; - newOwner: string; -} -export type TransferAccountEvent = TypedEvent< - [string, string], - TransferAccountEventObject ->; - -export type TransferAccountEventFilter = TypedEventFilter; - -export interface TransferAccountAllowedEventObject { - from: string; - to: string; - state: boolean; -} -export type TransferAccountAllowedEvent = TypedEvent< - [string, string, boolean], - TransferAccountAllowedEventObject ->; - -export type TransferAccountAllowedEventFilter = - TypedEventFilter; - -export interface logEventObject { - arg0: string; -} -export type logEvent = TypedEvent<[string], logEventObject>; - -export type logEventFilter = TypedEventFilter; - -export interface log_addressEventObject { - arg0: string; -} -export type log_addressEvent = TypedEvent<[string], log_addressEventObject>; - -export type log_addressEventFilter = TypedEventFilter; - -export interface log_bytesEventObject { - arg0: string; -} -export type log_bytesEvent = TypedEvent<[string], log_bytesEventObject>; - -export type log_bytesEventFilter = TypedEventFilter; - -export interface log_bytes32EventObject { - arg0: string; -} -export type log_bytes32Event = TypedEvent<[string], log_bytes32EventObject>; - -export type log_bytes32EventFilter = TypedEventFilter; - -export interface log_intEventObject { - arg0: BigNumber; -} -export type log_intEvent = TypedEvent<[BigNumber], log_intEventObject>; - -export type log_intEventFilter = TypedEventFilter; - -export interface log_named_addressEventObject { - key: string; - val: string; -} -export type log_named_addressEvent = TypedEvent< - [string, string], - log_named_addressEventObject ->; - -export type log_named_addressEventFilter = - TypedEventFilter; - -export interface log_named_bytesEventObject { - key: string; - val: string; -} -export type log_named_bytesEvent = TypedEvent< - [string, string], - log_named_bytesEventObject ->; - -export type log_named_bytesEventFilter = TypedEventFilter; - -export interface log_named_bytes32EventObject { - key: string; - val: string; -} -export type log_named_bytes32Event = TypedEvent< - [string, string], - log_named_bytes32EventObject ->; - -export type log_named_bytes32EventFilter = - TypedEventFilter; - -export interface log_named_decimal_intEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_intEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_intEventObject ->; - -export type log_named_decimal_intEventFilter = - TypedEventFilter; - -export interface log_named_decimal_uintEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_uintEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_uintEventObject ->; - -export type log_named_decimal_uintEventFilter = - TypedEventFilter; - -export interface log_named_intEventObject { - key: string; - val: BigNumber; -} -export type log_named_intEvent = TypedEvent< - [string, BigNumber], - log_named_intEventObject ->; - -export type log_named_intEventFilter = TypedEventFilter; - -export interface log_named_stringEventObject { - key: string; - val: string; -} -export type log_named_stringEvent = TypedEvent< - [string, string], - log_named_stringEventObject ->; - -export type log_named_stringEventFilter = - TypedEventFilter; - -export interface log_named_uintEventObject { - key: string; - val: BigNumber; -} -export type log_named_uintEvent = TypedEvent< - [string, BigNumber], - log_named_uintEventObject ->; - -export type log_named_uintEventFilter = TypedEventFilter; - -export interface log_stringEventObject { - arg0: string; -} -export type log_stringEvent = TypedEvent<[string], log_stringEventObject>; - -export type log_stringEventFilter = TypedEventFilter; - -export interface log_uintEventObject { - arg0: BigNumber; -} -export type log_uintEvent = TypedEvent<[BigNumber], log_uintEventObject>; - -export type log_uintEventFilter = TypedEventFilter; - -export interface logsEventObject { - arg0: string; -} -export type logsEvent = TypedEvent<[string], logsEventObject>; - -export type logsEventFilter = TypedEventFilter; - -export interface UniswapV3AdapterTest extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: UniswapV3AdapterTestInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - IS_TEST(overrides?: CallOverrides): Promise<[boolean]>; - - adapter(overrides?: CallOverrides): Promise<[string]>; - - cft(overrides?: CallOverrides): Promise<[string]>; - - creditConfigurator(overrides?: CallOverrides): Promise<[string]>; - - creditFacade(overrides?: CallOverrides): Promise<[string]>; - - creditManager(overrides?: CallOverrides): Promise<[string]>; - - deadline(overrides?: CallOverrides): Promise<[BigNumber]>; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AUV3_01_swap_reverts_if_uses_has_no_account( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AUV3_02_exactInputSingle_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AUV3_03_exactAllInputSingle_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AUV3_04_exactInput_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AUV3_05_exactAllInput_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AUV3_06_exactOutputSingle_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AUV3_07_exactOutput_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AUV3_08_exactOutput_cannot_be_exploited_with_tailored_path_parameter( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise<[string]>; - - uniswapMock(overrides?: CallOverrides): Promise<[string]>; - }; - - IS_TEST(overrides?: CallOverrides): Promise; - - adapter(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - deadline(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AUV3_01_swap_reverts_if_uses_has_no_account( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AUV3_02_exactInputSingle_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AUV3_03_exactAllInputSingle_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AUV3_04_exactInput_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AUV3_05_exactAllInput_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AUV3_06_exactOutputSingle_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AUV3_07_exactOutput_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AUV3_08_exactOutput_cannot_be_exploited_with_tailored_path_parameter( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - - uniswapMock(overrides?: CallOverrides): Promise; - - callStatic: { - IS_TEST(overrides?: CallOverrides): Promise; - - adapter(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - deadline(overrides?: CallOverrides): Promise; - - failed(overrides?: CallOverrides): Promise; - - setUp(overrides?: CallOverrides): Promise; - - test_AUV3_01_swap_reverts_if_uses_has_no_account( - overrides?: CallOverrides - ): Promise; - - test_AUV3_02_exactInputSingle_works_for_user_as_expected( - overrides?: CallOverrides - ): Promise; - - test_AUV3_03_exactAllInputSingle_works_for_user_as_expected( - overrides?: CallOverrides - ): Promise; - - test_AUV3_04_exactInput_works_for_user_as_expected( - overrides?: CallOverrides - ): Promise; - - test_AUV3_05_exactAllInput_works_for_user_as_expected( - overrides?: CallOverrides - ): Promise; - - test_AUV3_06_exactOutputSingle_works_for_user_as_expected( - overrides?: CallOverrides - ): Promise; - - test_AUV3_07_exactOutput_works_for_user_as_expected( - overrides?: CallOverrides - ): Promise; - - test_AUV3_08_exactOutput_cannot_be_exploited_with_tailored_path_parameter( - overrides?: CallOverrides - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - - uniswapMock(overrides?: CallOverrides): Promise; - }; - - filters: { - "AddCollateral(address,address,uint256)"( - onBehalfOf?: string | null, - token?: string | null, - value?: null - ): AddCollateralEventFilter; - AddCollateral( - onBehalfOf?: string | null, - token?: string | null, - value?: null - ): AddCollateralEventFilter; - - "CloseCreditAccount(address,address)"( - owner?: string | null, - to?: string | null - ): CloseCreditAccountEventFilter; - CloseCreditAccount( - owner?: string | null, - to?: string | null - ): CloseCreditAccountEventFilter; - - "DecreaseBorrowedAmount(address,uint256)"( - borrower?: string | null, - amount?: null - ): DecreaseBorrowedAmountEventFilter; - DecreaseBorrowedAmount( - borrower?: string | null, - amount?: null - ): DecreaseBorrowedAmountEventFilter; - - "ExecuteOrder(address,address)"( - borrower?: string | null, - target?: string | null - ): ExecuteOrderEventFilter; - ExecuteOrder( - borrower?: string | null, - target?: string | null - ): ExecuteOrderEventFilter; - - "IncreaseBorrowedAmount(address,uint256)"( - borrower?: string | null, - amount?: null - ): IncreaseBorrowedAmountEventFilter; - IncreaseBorrowedAmount( - borrower?: string | null, - amount?: null - ): IncreaseBorrowedAmountEventFilter; - - "LiquidateCreditAccount(address,address,address,uint256)"( - owner?: string | null, - liquidator?: string | null, - to?: string | null, - remainingFunds?: null - ): LiquidateCreditAccountEventFilter; - LiquidateCreditAccount( - owner?: string | null, - liquidator?: string | null, - to?: string | null, - remainingFunds?: null - ): LiquidateCreditAccountEventFilter; - - "LiquidateExpiredCreditAccount(address,address,address,uint256)"( - owner?: string | null, - liquidator?: string | null, - to?: string | null, - remainingFunds?: null - ): LiquidateExpiredCreditAccountEventFilter; - LiquidateExpiredCreditAccount( - owner?: string | null, - liquidator?: string | null, - to?: string | null, - remainingFunds?: null - ): LiquidateExpiredCreditAccountEventFilter; - - "MultiCallFinished()"(): MultiCallFinishedEventFilter; - MultiCallFinished(): MultiCallFinishedEventFilter; - - "MultiCallStarted(address)"( - borrower?: string | null - ): MultiCallStartedEventFilter; - MultiCallStarted(borrower?: string | null): MultiCallStartedEventFilter; - - "NewConfigurator(address)"( - newConfigurator?: string | null - ): NewConfiguratorEventFilter; - NewConfigurator( - newConfigurator?: string | null - ): NewConfiguratorEventFilter; - - "OpenCreditAccount(address,address,uint256,uint16)"( - onBehalfOf?: string | null, - creditAccount?: string | null, - borrowAmount?: null, - referralCode?: null - ): OpenCreditAccountEventFilter; - OpenCreditAccount( - onBehalfOf?: string | null, - creditAccount?: string | null, - borrowAmount?: null, - referralCode?: null - ): OpenCreditAccountEventFilter; - - "TokenDisabled(address,address)"( - creditAccount?: null, - token?: null - ): TokenDisabledEventFilter; - TokenDisabled(creditAccount?: null, token?: null): TokenDisabledEventFilter; - - "TokenEnabled(address,address)"( - creditAccount?: null, - token?: null - ): TokenEnabledEventFilter; - TokenEnabled(creditAccount?: null, token?: null): TokenEnabledEventFilter; - - "TransferAccount(address,address)"( - oldOwner?: string | null, - newOwner?: string | null - ): TransferAccountEventFilter; - TransferAccount( - oldOwner?: string | null, - newOwner?: string | null - ): TransferAccountEventFilter; - - "TransferAccountAllowed(address,address,bool)"( - from?: string | null, - to?: string | null, - state?: null - ): TransferAccountAllowedEventFilter; - TransferAccountAllowed( - from?: string | null, - to?: string | null, - state?: null - ): TransferAccountAllowedEventFilter; - - "log(string)"(arg0?: null): logEventFilter; - log(arg0?: null): logEventFilter; - - "log_address(address)"(arg0?: null): log_addressEventFilter; - log_address(arg0?: null): log_addressEventFilter; - - "log_bytes(bytes)"(arg0?: null): log_bytesEventFilter; - log_bytes(arg0?: null): log_bytesEventFilter; - - "log_bytes32(bytes32)"(arg0?: null): log_bytes32EventFilter; - log_bytes32(arg0?: null): log_bytes32EventFilter; - - "log_int(int256)"(arg0?: null): log_intEventFilter; - log_int(arg0?: null): log_intEventFilter; - - "log_named_address(string,address)"( - key?: null, - val?: null - ): log_named_addressEventFilter; - log_named_address(key?: null, val?: null): log_named_addressEventFilter; - - "log_named_bytes(string,bytes)"( - key?: null, - val?: null - ): log_named_bytesEventFilter; - log_named_bytes(key?: null, val?: null): log_named_bytesEventFilter; - - "log_named_bytes32(string,bytes32)"( - key?: null, - val?: null - ): log_named_bytes32EventFilter; - log_named_bytes32(key?: null, val?: null): log_named_bytes32EventFilter; - - "log_named_decimal_int(string,int256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - log_named_decimal_int( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - - "log_named_decimal_uint(string,uint256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - log_named_decimal_uint( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - - "log_named_int(string,int256)"( - key?: null, - val?: null - ): log_named_intEventFilter; - log_named_int(key?: null, val?: null): log_named_intEventFilter; - - "log_named_string(string,string)"( - key?: null, - val?: null - ): log_named_stringEventFilter; - log_named_string(key?: null, val?: null): log_named_stringEventFilter; - - "log_named_uint(string,uint256)"( - key?: null, - val?: null - ): log_named_uintEventFilter; - log_named_uint(key?: null, val?: null): log_named_uintEventFilter; - - "log_string(string)"(arg0?: null): log_stringEventFilter; - log_string(arg0?: null): log_stringEventFilter; - - "log_uint(uint256)"(arg0?: null): log_uintEventFilter; - log_uint(arg0?: null): log_uintEventFilter; - - "logs(bytes)"(arg0?: null): logsEventFilter; - logs(arg0?: null): logsEventFilter; - }; - - estimateGas: { - IS_TEST(overrides?: CallOverrides): Promise; - - adapter(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - deadline(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AUV3_01_swap_reverts_if_uses_has_no_account( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AUV3_02_exactInputSingle_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AUV3_03_exactAllInputSingle_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AUV3_04_exactInput_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AUV3_05_exactAllInput_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AUV3_06_exactOutputSingle_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AUV3_07_exactOutput_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AUV3_08_exactOutput_cannot_be_exploited_with_tailored_path_parameter( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - - uniswapMock(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - IS_TEST(overrides?: CallOverrides): Promise; - - adapter(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator( - overrides?: CallOverrides - ): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - deadline(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AUV3_01_swap_reverts_if_uses_has_no_account( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AUV3_02_exactInputSingle_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AUV3_03_exactAllInputSingle_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AUV3_04_exactInput_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AUV3_05_exactAllInput_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AUV3_06_exactOutputSingle_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AUV3_07_exactOutput_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AUV3_08_exactOutput_cannot_be_exploited_with_tailored_path_parameter( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - - uniswapMock(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/test/adapters/UniswapV3Adapter.t.sol/index.ts b/src/types/contracts/test/adapters/UniswapV3Adapter.t.sol/index.ts deleted file mode 100644 index 9ea558c3..00000000 --- a/src/types/contracts/test/adapters/UniswapV3Adapter.t.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { UniswapV3AdapterTest } from "./UniswapV3AdapterTest"; diff --git a/src/types/contracts/test/adapters/YearnV2Adapter.t.sol/YearnV2AdapterTest.ts b/src/types/contracts/test/adapters/YearnV2Adapter.t.sol/YearnV2AdapterTest.ts deleted file mode 100644 index b420b5e7..00000000 --- a/src/types/contracts/test/adapters/YearnV2Adapter.t.sol/YearnV2AdapterTest.ts +++ /dev/null @@ -1,1408 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface YearnV2AdapterTestInterface extends utils.Interface { - functions: { - "IS_TEST()": FunctionFragment; - "adapter()": FunctionFragment; - "cft()": FunctionFragment; - "creditConfigurator()": FunctionFragment; - "creditFacade()": FunctionFragment; - "creditManager()": FunctionFragment; - "failed()": FunctionFragment; - "setUp()": FunctionFragment; - "test_AYV2_01_constructor_sets_correct_values()": FunctionFragment; - "test_AYV2_02_constructor_reverts_if_token_is_not_allowed()": FunctionFragment; - "test_AYV2_03_deposit_and_withdraw_if_uses_has_no_account()": FunctionFragment; - "test_AYV2_04_deposit_works_for_user_as_expected()": FunctionFragment; - "test_AYV2_05_deposit_uint256_works_for_user_as_expected()": FunctionFragment; - "test_AYV2_06_deposit_uint256_address_works_for_user_as_expected()": FunctionFragment; - "test_AYV2_07_withdraw_works_for_user_as_expected()": FunctionFragment; - "test_AYV2_08_withdraw_uint256_works_for_user_as_expected()": FunctionFragment; - "test_AYV2_09_withdraw_uint256_address_works_for_user_as_expected()": FunctionFragment; - "test_AYV2_10_withdraw_uint256_address_uint256_works_for_user_as_expected()": FunctionFragment; - "test_AYV2_11_withdraw_correctly_passes_maxLoss()": FunctionFragment; - "test_AYV2_12_adapter_pricePerShare_consistent()": FunctionFragment; - "test_AYV2_13_adapter_name_consistent()": FunctionFragment; - "test_AYV2_14_adapter_symbol_consistent()": FunctionFragment; - "test_AYV2_15_adapter_decimals_consistent()": FunctionFragment; - "test_AYV2_16_adapter_allowance_consistent()": FunctionFragment; - "test_AYV2_17_adapter_balanceOf_totalSupply_consistent()": FunctionFragment; - "token()": FunctionFragment; - "underlying()": FunctionFragment; - "yearnV2Mock()": FunctionFragment; - "yvDAI()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "IS_TEST" - | "adapter" - | "cft" - | "creditConfigurator" - | "creditFacade" - | "creditManager" - | "failed" - | "setUp" - | "test_AYV2_01_constructor_sets_correct_values" - | "test_AYV2_02_constructor_reverts_if_token_is_not_allowed" - | "test_AYV2_03_deposit_and_withdraw_if_uses_has_no_account" - | "test_AYV2_04_deposit_works_for_user_as_expected" - | "test_AYV2_05_deposit_uint256_works_for_user_as_expected" - | "test_AYV2_06_deposit_uint256_address_works_for_user_as_expected" - | "test_AYV2_07_withdraw_works_for_user_as_expected" - | "test_AYV2_08_withdraw_uint256_works_for_user_as_expected" - | "test_AYV2_09_withdraw_uint256_address_works_for_user_as_expected" - | "test_AYV2_10_withdraw_uint256_address_uint256_works_for_user_as_expected" - | "test_AYV2_11_withdraw_correctly_passes_maxLoss" - | "test_AYV2_12_adapter_pricePerShare_consistent" - | "test_AYV2_13_adapter_name_consistent" - | "test_AYV2_14_adapter_symbol_consistent" - | "test_AYV2_15_adapter_decimals_consistent" - | "test_AYV2_16_adapter_allowance_consistent" - | "test_AYV2_17_adapter_balanceOf_totalSupply_consistent" - | "token" - | "underlying" - | "yearnV2Mock" - | "yvDAI" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "IS_TEST", values?: undefined): string; - encodeFunctionData(functionFragment: "adapter", values?: undefined): string; - encodeFunctionData(functionFragment: "cft", values?: undefined): string; - encodeFunctionData( - functionFragment: "creditConfigurator", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditFacade", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditManager", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "failed", values?: undefined): string; - encodeFunctionData(functionFragment: "setUp", values?: undefined): string; - encodeFunctionData( - functionFragment: "test_AYV2_01_constructor_sets_correct_values", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_AYV2_02_constructor_reverts_if_token_is_not_allowed", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_AYV2_03_deposit_and_withdraw_if_uses_has_no_account", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_AYV2_04_deposit_works_for_user_as_expected", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_AYV2_05_deposit_uint256_works_for_user_as_expected", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_AYV2_06_deposit_uint256_address_works_for_user_as_expected", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_AYV2_07_withdraw_works_for_user_as_expected", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_AYV2_08_withdraw_uint256_works_for_user_as_expected", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_AYV2_09_withdraw_uint256_address_works_for_user_as_expected", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_AYV2_10_withdraw_uint256_address_uint256_works_for_user_as_expected", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_AYV2_11_withdraw_correctly_passes_maxLoss", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_AYV2_12_adapter_pricePerShare_consistent", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_AYV2_13_adapter_name_consistent", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_AYV2_14_adapter_symbol_consistent", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_AYV2_15_adapter_decimals_consistent", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_AYV2_16_adapter_allowance_consistent", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_AYV2_17_adapter_balanceOf_totalSupply_consistent", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "token", values?: undefined): string; - encodeFunctionData( - functionFragment: "underlying", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "yearnV2Mock", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "yvDAI", values?: undefined): string; - - decodeFunctionResult(functionFragment: "IS_TEST", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "adapter", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "cft", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "creditConfigurator", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditFacade", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditManager", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "failed", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "setUp", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "test_AYV2_01_constructor_sets_correct_values", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_AYV2_02_constructor_reverts_if_token_is_not_allowed", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_AYV2_03_deposit_and_withdraw_if_uses_has_no_account", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_AYV2_04_deposit_works_for_user_as_expected", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_AYV2_05_deposit_uint256_works_for_user_as_expected", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_AYV2_06_deposit_uint256_address_works_for_user_as_expected", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_AYV2_07_withdraw_works_for_user_as_expected", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_AYV2_08_withdraw_uint256_works_for_user_as_expected", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_AYV2_09_withdraw_uint256_address_works_for_user_as_expected", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_AYV2_10_withdraw_uint256_address_uint256_works_for_user_as_expected", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_AYV2_11_withdraw_correctly_passes_maxLoss", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_AYV2_12_adapter_pricePerShare_consistent", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_AYV2_13_adapter_name_consistent", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_AYV2_14_adapter_symbol_consistent", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_AYV2_15_adapter_decimals_consistent", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_AYV2_16_adapter_allowance_consistent", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_AYV2_17_adapter_balanceOf_totalSupply_consistent", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "token", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "underlying", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "yearnV2Mock", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "yvDAI", data: BytesLike): Result; - - events: { - "AddCollateral(address,address,uint256)": EventFragment; - "CloseCreditAccount(address,address)": EventFragment; - "DecreaseBorrowedAmount(address,uint256)": EventFragment; - "ExecuteOrder(address,address)": EventFragment; - "IncreaseBorrowedAmount(address,uint256)": EventFragment; - "LiquidateCreditAccount(address,address,address,uint256)": EventFragment; - "LiquidateExpiredCreditAccount(address,address,address,uint256)": EventFragment; - "MultiCallFinished()": EventFragment; - "MultiCallStarted(address)": EventFragment; - "NewConfigurator(address)": EventFragment; - "OpenCreditAccount(address,address,uint256,uint16)": EventFragment; - "TokenDisabled(address,address)": EventFragment; - "TokenEnabled(address,address)": EventFragment; - "TransferAccount(address,address)": EventFragment; - "TransferAccountAllowed(address,address,bool)": EventFragment; - "log(string)": EventFragment; - "log_address(address)": EventFragment; - "log_bytes(bytes)": EventFragment; - "log_bytes32(bytes32)": EventFragment; - "log_int(int256)": EventFragment; - "log_named_address(string,address)": EventFragment; - "log_named_bytes(string,bytes)": EventFragment; - "log_named_bytes32(string,bytes32)": EventFragment; - "log_named_decimal_int(string,int256,uint256)": EventFragment; - "log_named_decimal_uint(string,uint256,uint256)": EventFragment; - "log_named_int(string,int256)": EventFragment; - "log_named_string(string,string)": EventFragment; - "log_named_uint(string,uint256)": EventFragment; - "log_string(string)": EventFragment; - "log_uint(uint256)": EventFragment; - "logs(bytes)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "AddCollateral"): EventFragment; - getEvent(nameOrSignatureOrTopic: "CloseCreditAccount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "DecreaseBorrowedAmount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ExecuteOrder"): EventFragment; - getEvent(nameOrSignatureOrTopic: "IncreaseBorrowedAmount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "LiquidateCreditAccount"): EventFragment; - getEvent( - nameOrSignatureOrTopic: "LiquidateExpiredCreditAccount" - ): EventFragment; - getEvent(nameOrSignatureOrTopic: "MultiCallFinished"): EventFragment; - getEvent(nameOrSignatureOrTopic: "MultiCallStarted"): EventFragment; - getEvent(nameOrSignatureOrTopic: "NewConfigurator"): EventFragment; - getEvent(nameOrSignatureOrTopic: "OpenCreditAccount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TokenDisabled"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TokenEnabled"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TransferAccount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TransferAccountAllowed"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "logs"): EventFragment; -} - -export interface AddCollateralEventObject { - onBehalfOf: string; - token: string; - value: BigNumber; -} -export type AddCollateralEvent = TypedEvent< - [string, string, BigNumber], - AddCollateralEventObject ->; - -export type AddCollateralEventFilter = TypedEventFilter; - -export interface CloseCreditAccountEventObject { - owner: string; - to: string; -} -export type CloseCreditAccountEvent = TypedEvent< - [string, string], - CloseCreditAccountEventObject ->; - -export type CloseCreditAccountEventFilter = - TypedEventFilter; - -export interface DecreaseBorrowedAmountEventObject { - borrower: string; - amount: BigNumber; -} -export type DecreaseBorrowedAmountEvent = TypedEvent< - [string, BigNumber], - DecreaseBorrowedAmountEventObject ->; - -export type DecreaseBorrowedAmountEventFilter = - TypedEventFilter; - -export interface ExecuteOrderEventObject { - borrower: string; - target: string; -} -export type ExecuteOrderEvent = TypedEvent< - [string, string], - ExecuteOrderEventObject ->; - -export type ExecuteOrderEventFilter = TypedEventFilter; - -export interface IncreaseBorrowedAmountEventObject { - borrower: string; - amount: BigNumber; -} -export type IncreaseBorrowedAmountEvent = TypedEvent< - [string, BigNumber], - IncreaseBorrowedAmountEventObject ->; - -export type IncreaseBorrowedAmountEventFilter = - TypedEventFilter; - -export interface LiquidateCreditAccountEventObject { - owner: string; - liquidator: string; - to: string; - remainingFunds: BigNumber; -} -export type LiquidateCreditAccountEvent = TypedEvent< - [string, string, string, BigNumber], - LiquidateCreditAccountEventObject ->; - -export type LiquidateCreditAccountEventFilter = - TypedEventFilter; - -export interface LiquidateExpiredCreditAccountEventObject { - owner: string; - liquidator: string; - to: string; - remainingFunds: BigNumber; -} -export type LiquidateExpiredCreditAccountEvent = TypedEvent< - [string, string, string, BigNumber], - LiquidateExpiredCreditAccountEventObject ->; - -export type LiquidateExpiredCreditAccountEventFilter = - TypedEventFilter; - -export interface MultiCallFinishedEventObject {} -export type MultiCallFinishedEvent = TypedEvent< - [], - MultiCallFinishedEventObject ->; - -export type MultiCallFinishedEventFilter = - TypedEventFilter; - -export interface MultiCallStartedEventObject { - borrower: string; -} -export type MultiCallStartedEvent = TypedEvent< - [string], - MultiCallStartedEventObject ->; - -export type MultiCallStartedEventFilter = - TypedEventFilter; - -export interface NewConfiguratorEventObject { - newConfigurator: string; -} -export type NewConfiguratorEvent = TypedEvent< - [string], - NewConfiguratorEventObject ->; - -export type NewConfiguratorEventFilter = TypedEventFilter; - -export interface OpenCreditAccountEventObject { - onBehalfOf: string; - creditAccount: string; - borrowAmount: BigNumber; - referralCode: number; -} -export type OpenCreditAccountEvent = TypedEvent< - [string, string, BigNumber, number], - OpenCreditAccountEventObject ->; - -export type OpenCreditAccountEventFilter = - TypedEventFilter; - -export interface TokenDisabledEventObject { - creditAccount: string; - token: string; -} -export type TokenDisabledEvent = TypedEvent< - [string, string], - TokenDisabledEventObject ->; - -export type TokenDisabledEventFilter = TypedEventFilter; - -export interface TokenEnabledEventObject { - creditAccount: string; - token: string; -} -export type TokenEnabledEvent = TypedEvent< - [string, string], - TokenEnabledEventObject ->; - -export type TokenEnabledEventFilter = TypedEventFilter; - -export interface TransferAccountEventObject { - oldOwner: string; - newOwner: string; -} -export type TransferAccountEvent = TypedEvent< - [string, string], - TransferAccountEventObject ->; - -export type TransferAccountEventFilter = TypedEventFilter; - -export interface TransferAccountAllowedEventObject { - from: string; - to: string; - state: boolean; -} -export type TransferAccountAllowedEvent = TypedEvent< - [string, string, boolean], - TransferAccountAllowedEventObject ->; - -export type TransferAccountAllowedEventFilter = - TypedEventFilter; - -export interface logEventObject { - arg0: string; -} -export type logEvent = TypedEvent<[string], logEventObject>; - -export type logEventFilter = TypedEventFilter; - -export interface log_addressEventObject { - arg0: string; -} -export type log_addressEvent = TypedEvent<[string], log_addressEventObject>; - -export type log_addressEventFilter = TypedEventFilter; - -export interface log_bytesEventObject { - arg0: string; -} -export type log_bytesEvent = TypedEvent<[string], log_bytesEventObject>; - -export type log_bytesEventFilter = TypedEventFilter; - -export interface log_bytes32EventObject { - arg0: string; -} -export type log_bytes32Event = TypedEvent<[string], log_bytes32EventObject>; - -export type log_bytes32EventFilter = TypedEventFilter; - -export interface log_intEventObject { - arg0: BigNumber; -} -export type log_intEvent = TypedEvent<[BigNumber], log_intEventObject>; - -export type log_intEventFilter = TypedEventFilter; - -export interface log_named_addressEventObject { - key: string; - val: string; -} -export type log_named_addressEvent = TypedEvent< - [string, string], - log_named_addressEventObject ->; - -export type log_named_addressEventFilter = - TypedEventFilter; - -export interface log_named_bytesEventObject { - key: string; - val: string; -} -export type log_named_bytesEvent = TypedEvent< - [string, string], - log_named_bytesEventObject ->; - -export type log_named_bytesEventFilter = TypedEventFilter; - -export interface log_named_bytes32EventObject { - key: string; - val: string; -} -export type log_named_bytes32Event = TypedEvent< - [string, string], - log_named_bytes32EventObject ->; - -export type log_named_bytes32EventFilter = - TypedEventFilter; - -export interface log_named_decimal_intEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_intEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_intEventObject ->; - -export type log_named_decimal_intEventFilter = - TypedEventFilter; - -export interface log_named_decimal_uintEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_uintEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_uintEventObject ->; - -export type log_named_decimal_uintEventFilter = - TypedEventFilter; - -export interface log_named_intEventObject { - key: string; - val: BigNumber; -} -export type log_named_intEvent = TypedEvent< - [string, BigNumber], - log_named_intEventObject ->; - -export type log_named_intEventFilter = TypedEventFilter; - -export interface log_named_stringEventObject { - key: string; - val: string; -} -export type log_named_stringEvent = TypedEvent< - [string, string], - log_named_stringEventObject ->; - -export type log_named_stringEventFilter = - TypedEventFilter; - -export interface log_named_uintEventObject { - key: string; - val: BigNumber; -} -export type log_named_uintEvent = TypedEvent< - [string, BigNumber], - log_named_uintEventObject ->; - -export type log_named_uintEventFilter = TypedEventFilter; - -export interface log_stringEventObject { - arg0: string; -} -export type log_stringEvent = TypedEvent<[string], log_stringEventObject>; - -export type log_stringEventFilter = TypedEventFilter; - -export interface log_uintEventObject { - arg0: BigNumber; -} -export type log_uintEvent = TypedEvent<[BigNumber], log_uintEventObject>; - -export type log_uintEventFilter = TypedEventFilter; - -export interface logsEventObject { - arg0: string; -} -export type logsEvent = TypedEvent<[string], logsEventObject>; - -export type logsEventFilter = TypedEventFilter; - -export interface YearnV2AdapterTest extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: YearnV2AdapterTestInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - IS_TEST(overrides?: CallOverrides): Promise<[boolean]>; - - adapter(overrides?: CallOverrides): Promise<[string]>; - - cft(overrides?: CallOverrides): Promise<[string]>; - - creditConfigurator(overrides?: CallOverrides): Promise<[string]>; - - creditFacade(overrides?: CallOverrides): Promise<[string]>; - - creditManager(overrides?: CallOverrides): Promise<[string]>; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AYV2_01_constructor_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AYV2_02_constructor_reverts_if_token_is_not_allowed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AYV2_03_deposit_and_withdraw_if_uses_has_no_account( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AYV2_04_deposit_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AYV2_05_deposit_uint256_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AYV2_06_deposit_uint256_address_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AYV2_07_withdraw_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AYV2_08_withdraw_uint256_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AYV2_09_withdraw_uint256_address_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AYV2_10_withdraw_uint256_address_uint256_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AYV2_11_withdraw_correctly_passes_maxLoss( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AYV2_12_adapter_pricePerShare_consistent( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AYV2_13_adapter_name_consistent( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AYV2_14_adapter_symbol_consistent( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AYV2_15_adapter_decimals_consistent( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AYV2_16_adapter_allowance_consistent( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AYV2_17_adapter_balanceOf_totalSupply_consistent( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - token(overrides?: CallOverrides): Promise<[string]>; - - underlying(overrides?: CallOverrides): Promise<[string]>; - - yearnV2Mock(overrides?: CallOverrides): Promise<[string]>; - - yvDAI(overrides?: CallOverrides): Promise<[string]>; - }; - - IS_TEST(overrides?: CallOverrides): Promise; - - adapter(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AYV2_01_constructor_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AYV2_02_constructor_reverts_if_token_is_not_allowed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AYV2_03_deposit_and_withdraw_if_uses_has_no_account( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AYV2_04_deposit_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AYV2_05_deposit_uint256_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AYV2_06_deposit_uint256_address_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AYV2_07_withdraw_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AYV2_08_withdraw_uint256_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AYV2_09_withdraw_uint256_address_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AYV2_10_withdraw_uint256_address_uint256_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AYV2_11_withdraw_correctly_passes_maxLoss( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AYV2_12_adapter_pricePerShare_consistent( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AYV2_13_adapter_name_consistent( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AYV2_14_adapter_symbol_consistent( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AYV2_15_adapter_decimals_consistent( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AYV2_16_adapter_allowance_consistent( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AYV2_17_adapter_balanceOf_totalSupply_consistent( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - token(overrides?: CallOverrides): Promise; - - underlying(overrides?: CallOverrides): Promise; - - yearnV2Mock(overrides?: CallOverrides): Promise; - - yvDAI(overrides?: CallOverrides): Promise; - - callStatic: { - IS_TEST(overrides?: CallOverrides): Promise; - - adapter(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - failed(overrides?: CallOverrides): Promise; - - setUp(overrides?: CallOverrides): Promise; - - test_AYV2_01_constructor_sets_correct_values( - overrides?: CallOverrides - ): Promise; - - test_AYV2_02_constructor_reverts_if_token_is_not_allowed( - overrides?: CallOverrides - ): Promise; - - test_AYV2_03_deposit_and_withdraw_if_uses_has_no_account( - overrides?: CallOverrides - ): Promise; - - test_AYV2_04_deposit_works_for_user_as_expected( - overrides?: CallOverrides - ): Promise; - - test_AYV2_05_deposit_uint256_works_for_user_as_expected( - overrides?: CallOverrides - ): Promise; - - test_AYV2_06_deposit_uint256_address_works_for_user_as_expected( - overrides?: CallOverrides - ): Promise; - - test_AYV2_07_withdraw_works_for_user_as_expected( - overrides?: CallOverrides - ): Promise; - - test_AYV2_08_withdraw_uint256_works_for_user_as_expected( - overrides?: CallOverrides - ): Promise; - - test_AYV2_09_withdraw_uint256_address_works_for_user_as_expected( - overrides?: CallOverrides - ): Promise; - - test_AYV2_10_withdraw_uint256_address_uint256_works_for_user_as_expected( - overrides?: CallOverrides - ): Promise; - - test_AYV2_11_withdraw_correctly_passes_maxLoss( - overrides?: CallOverrides - ): Promise; - - test_AYV2_12_adapter_pricePerShare_consistent( - overrides?: CallOverrides - ): Promise; - - test_AYV2_13_adapter_name_consistent( - overrides?: CallOverrides - ): Promise; - - test_AYV2_14_adapter_symbol_consistent( - overrides?: CallOverrides - ): Promise; - - test_AYV2_15_adapter_decimals_consistent( - overrides?: CallOverrides - ): Promise; - - test_AYV2_16_adapter_allowance_consistent( - overrides?: CallOverrides - ): Promise; - - test_AYV2_17_adapter_balanceOf_totalSupply_consistent( - overrides?: CallOverrides - ): Promise; - - token(overrides?: CallOverrides): Promise; - - underlying(overrides?: CallOverrides): Promise; - - yearnV2Mock(overrides?: CallOverrides): Promise; - - yvDAI(overrides?: CallOverrides): Promise; - }; - - filters: { - "AddCollateral(address,address,uint256)"( - onBehalfOf?: string | null, - token?: string | null, - value?: null - ): AddCollateralEventFilter; - AddCollateral( - onBehalfOf?: string | null, - token?: string | null, - value?: null - ): AddCollateralEventFilter; - - "CloseCreditAccount(address,address)"( - owner?: string | null, - to?: string | null - ): CloseCreditAccountEventFilter; - CloseCreditAccount( - owner?: string | null, - to?: string | null - ): CloseCreditAccountEventFilter; - - "DecreaseBorrowedAmount(address,uint256)"( - borrower?: string | null, - amount?: null - ): DecreaseBorrowedAmountEventFilter; - DecreaseBorrowedAmount( - borrower?: string | null, - amount?: null - ): DecreaseBorrowedAmountEventFilter; - - "ExecuteOrder(address,address)"( - borrower?: string | null, - target?: string | null - ): ExecuteOrderEventFilter; - ExecuteOrder( - borrower?: string | null, - target?: string | null - ): ExecuteOrderEventFilter; - - "IncreaseBorrowedAmount(address,uint256)"( - borrower?: string | null, - amount?: null - ): IncreaseBorrowedAmountEventFilter; - IncreaseBorrowedAmount( - borrower?: string | null, - amount?: null - ): IncreaseBorrowedAmountEventFilter; - - "LiquidateCreditAccount(address,address,address,uint256)"( - owner?: string | null, - liquidator?: string | null, - to?: string | null, - remainingFunds?: null - ): LiquidateCreditAccountEventFilter; - LiquidateCreditAccount( - owner?: string | null, - liquidator?: string | null, - to?: string | null, - remainingFunds?: null - ): LiquidateCreditAccountEventFilter; - - "LiquidateExpiredCreditAccount(address,address,address,uint256)"( - owner?: string | null, - liquidator?: string | null, - to?: string | null, - remainingFunds?: null - ): LiquidateExpiredCreditAccountEventFilter; - LiquidateExpiredCreditAccount( - owner?: string | null, - liquidator?: string | null, - to?: string | null, - remainingFunds?: null - ): LiquidateExpiredCreditAccountEventFilter; - - "MultiCallFinished()"(): MultiCallFinishedEventFilter; - MultiCallFinished(): MultiCallFinishedEventFilter; - - "MultiCallStarted(address)"( - borrower?: string | null - ): MultiCallStartedEventFilter; - MultiCallStarted(borrower?: string | null): MultiCallStartedEventFilter; - - "NewConfigurator(address)"( - newConfigurator?: string | null - ): NewConfiguratorEventFilter; - NewConfigurator( - newConfigurator?: string | null - ): NewConfiguratorEventFilter; - - "OpenCreditAccount(address,address,uint256,uint16)"( - onBehalfOf?: string | null, - creditAccount?: string | null, - borrowAmount?: null, - referralCode?: null - ): OpenCreditAccountEventFilter; - OpenCreditAccount( - onBehalfOf?: string | null, - creditAccount?: string | null, - borrowAmount?: null, - referralCode?: null - ): OpenCreditAccountEventFilter; - - "TokenDisabled(address,address)"( - creditAccount?: null, - token?: null - ): TokenDisabledEventFilter; - TokenDisabled(creditAccount?: null, token?: null): TokenDisabledEventFilter; - - "TokenEnabled(address,address)"( - creditAccount?: null, - token?: null - ): TokenEnabledEventFilter; - TokenEnabled(creditAccount?: null, token?: null): TokenEnabledEventFilter; - - "TransferAccount(address,address)"( - oldOwner?: string | null, - newOwner?: string | null - ): TransferAccountEventFilter; - TransferAccount( - oldOwner?: string | null, - newOwner?: string | null - ): TransferAccountEventFilter; - - "TransferAccountAllowed(address,address,bool)"( - from?: string | null, - to?: string | null, - state?: null - ): TransferAccountAllowedEventFilter; - TransferAccountAllowed( - from?: string | null, - to?: string | null, - state?: null - ): TransferAccountAllowedEventFilter; - - "log(string)"(arg0?: null): logEventFilter; - log(arg0?: null): logEventFilter; - - "log_address(address)"(arg0?: null): log_addressEventFilter; - log_address(arg0?: null): log_addressEventFilter; - - "log_bytes(bytes)"(arg0?: null): log_bytesEventFilter; - log_bytes(arg0?: null): log_bytesEventFilter; - - "log_bytes32(bytes32)"(arg0?: null): log_bytes32EventFilter; - log_bytes32(arg0?: null): log_bytes32EventFilter; - - "log_int(int256)"(arg0?: null): log_intEventFilter; - log_int(arg0?: null): log_intEventFilter; - - "log_named_address(string,address)"( - key?: null, - val?: null - ): log_named_addressEventFilter; - log_named_address(key?: null, val?: null): log_named_addressEventFilter; - - "log_named_bytes(string,bytes)"( - key?: null, - val?: null - ): log_named_bytesEventFilter; - log_named_bytes(key?: null, val?: null): log_named_bytesEventFilter; - - "log_named_bytes32(string,bytes32)"( - key?: null, - val?: null - ): log_named_bytes32EventFilter; - log_named_bytes32(key?: null, val?: null): log_named_bytes32EventFilter; - - "log_named_decimal_int(string,int256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - log_named_decimal_int( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - - "log_named_decimal_uint(string,uint256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - log_named_decimal_uint( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - - "log_named_int(string,int256)"( - key?: null, - val?: null - ): log_named_intEventFilter; - log_named_int(key?: null, val?: null): log_named_intEventFilter; - - "log_named_string(string,string)"( - key?: null, - val?: null - ): log_named_stringEventFilter; - log_named_string(key?: null, val?: null): log_named_stringEventFilter; - - "log_named_uint(string,uint256)"( - key?: null, - val?: null - ): log_named_uintEventFilter; - log_named_uint(key?: null, val?: null): log_named_uintEventFilter; - - "log_string(string)"(arg0?: null): log_stringEventFilter; - log_string(arg0?: null): log_stringEventFilter; - - "log_uint(uint256)"(arg0?: null): log_uintEventFilter; - log_uint(arg0?: null): log_uintEventFilter; - - "logs(bytes)"(arg0?: null): logsEventFilter; - logs(arg0?: null): logsEventFilter; - }; - - estimateGas: { - IS_TEST(overrides?: CallOverrides): Promise; - - adapter(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AYV2_01_constructor_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AYV2_02_constructor_reverts_if_token_is_not_allowed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AYV2_03_deposit_and_withdraw_if_uses_has_no_account( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AYV2_04_deposit_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AYV2_05_deposit_uint256_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AYV2_06_deposit_uint256_address_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AYV2_07_withdraw_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AYV2_08_withdraw_uint256_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AYV2_09_withdraw_uint256_address_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AYV2_10_withdraw_uint256_address_uint256_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AYV2_11_withdraw_correctly_passes_maxLoss( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AYV2_12_adapter_pricePerShare_consistent( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AYV2_13_adapter_name_consistent( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AYV2_14_adapter_symbol_consistent( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AYV2_15_adapter_decimals_consistent( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AYV2_16_adapter_allowance_consistent( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AYV2_17_adapter_balanceOf_totalSupply_consistent( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - token(overrides?: CallOverrides): Promise; - - underlying(overrides?: CallOverrides): Promise; - - yearnV2Mock(overrides?: CallOverrides): Promise; - - yvDAI(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - IS_TEST(overrides?: CallOverrides): Promise; - - adapter(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator( - overrides?: CallOverrides - ): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AYV2_01_constructor_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AYV2_02_constructor_reverts_if_token_is_not_allowed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AYV2_03_deposit_and_withdraw_if_uses_has_no_account( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AYV2_04_deposit_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AYV2_05_deposit_uint256_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AYV2_06_deposit_uint256_address_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AYV2_07_withdraw_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AYV2_08_withdraw_uint256_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AYV2_09_withdraw_uint256_address_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AYV2_10_withdraw_uint256_address_uint256_works_for_user_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AYV2_11_withdraw_correctly_passes_maxLoss( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AYV2_12_adapter_pricePerShare_consistent( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AYV2_13_adapter_name_consistent( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AYV2_14_adapter_symbol_consistent( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AYV2_15_adapter_decimals_consistent( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AYV2_16_adapter_allowance_consistent( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AYV2_17_adapter_balanceOf_totalSupply_consistent( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - token(overrides?: CallOverrides): Promise; - - underlying(overrides?: CallOverrides): Promise; - - yearnV2Mock(overrides?: CallOverrides): Promise; - - yvDAI(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/test/adapters/YearnV2Adapter.t.sol/index.ts b/src/types/contracts/test/adapters/YearnV2Adapter.t.sol/index.ts deleted file mode 100644 index 43d68429..00000000 --- a/src/types/contracts/test/adapters/YearnV2Adapter.t.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { YearnV2AdapterTest } from "./YearnV2AdapterTest"; diff --git a/src/types/contracts/test/adapters/index.ts b/src/types/contracts/test/adapters/index.ts deleted file mode 100644 index b9ea532f..00000000 --- a/src/types/contracts/test/adapters/index.ts +++ /dev/null @@ -1,34 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type * as abstractAdapterTSol from "./AbstractAdapter.t.sol"; -export type { abstractAdapterTSol }; -import type * as convexV1BaseRewardPoolTSol from "./ConvexV1_BaseRewardPool.t.sol"; -export type { convexV1BaseRewardPoolTSol }; -import type * as convexV1BoosterTSol from "./ConvexV1_Booster.t.sol"; -export type { convexV1BoosterTSol }; -import type * as convexV1ClaimZapTSol from "./ConvexV1_ClaimZap.t.sol"; -export type { convexV1ClaimZapTSol }; -import type * as curveV1AdapterBaseMetapoolTestTSol from "./CurveV1AdapterBaseMetapoolTest.t.sol"; -export type { curveV1AdapterBaseMetapoolTestTSol }; -import type * as curveV1AdapterBaseTestTSol from "./CurveV1AdapterBaseTest.t.sol"; -export type { curveV1AdapterBaseTestTSol }; -import type * as curveV1Adapter2AssetsTestTSol from "./CurveV1Adapter_2AssetsTest.t.sol"; -export type { curveV1Adapter2AssetsTestTSol }; -import type * as curveV1Adapter3AssetsTestTSol from "./CurveV1Adapter_3AssetsTest.t.sol"; -export type { curveV1Adapter3AssetsTestTSol }; -import type * as curveV1Adapter4AssetsTestTSol from "./CurveV1Adapter_4AssetsTest.t.sol"; -export type { curveV1Adapter4AssetsTestTSol }; -import type * as curveV1StEthTestTSol from "./CurveV1StETHTest.t.sol"; -export type { curveV1StEthTestTSol }; -import type * as lidoV1AdapterTSol from "./LidoV1Adapter.t.sol"; -export type { lidoV1AdapterTSol }; -import type * as uniswapV2AdapterTSol from "./UniswapV2Adapter.t.sol"; -export type { uniswapV2AdapterTSol }; -import type * as uniswapV3AdapterTSol from "./UniswapV3Adapter.t.sol"; -export type { uniswapV3AdapterTSol }; -import type * as yearnV2AdapterTSol from "./YearnV2Adapter.t.sol"; -export type { yearnV2AdapterTSol }; -export type { AdapterTestHelper } from "./AdapterTestHelper"; -export type { ConvexAdapterHelper } from "./ConvexAdapterHelper"; -export type { CurveV1AdapterHelper } from "./CurveV1AdapterHelper"; diff --git a/src/types/contracts/test/core/ACL.t.sol/ACLTest.ts b/src/types/contracts/test/core/ACL.t.sol/ACLTest.ts deleted file mode 100644 index 7f2d3415..00000000 --- a/src/types/contracts/test/core/ACL.t.sol/ACLTest.ts +++ /dev/null @@ -1,659 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface ACLTestInterface extends utils.Interface { - functions: { - "IS_TEST()": FunctionFragment; - "failed()": FunctionFragment; - "setUp()": FunctionFragment; - "test_ACL_01_add_remove_reverts_on_non_owner()": FunctionFragment; - "test_ACL_02_addPausableAdmin_adds_pool()": FunctionFragment; - "test_ACL_03_removePausableAdmin_removes_admin()": FunctionFragment; - "test_ACL_04_addUnpausableAdmin_adds_pool()": FunctionFragment; - "test_ACL_05_removeUnpausableAdmin_removes_admin()": FunctionFragment; - "test_ACL_06_isConfigurator_correct()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "IS_TEST" - | "failed" - | "setUp" - | "test_ACL_01_add_remove_reverts_on_non_owner" - | "test_ACL_02_addPausableAdmin_adds_pool" - | "test_ACL_03_removePausableAdmin_removes_admin" - | "test_ACL_04_addUnpausableAdmin_adds_pool" - | "test_ACL_05_removeUnpausableAdmin_removes_admin" - | "test_ACL_06_isConfigurator_correct" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "IS_TEST", values?: undefined): string; - encodeFunctionData(functionFragment: "failed", values?: undefined): string; - encodeFunctionData(functionFragment: "setUp", values?: undefined): string; - encodeFunctionData( - functionFragment: "test_ACL_01_add_remove_reverts_on_non_owner", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_ACL_02_addPausableAdmin_adds_pool", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_ACL_03_removePausableAdmin_removes_admin", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_ACL_04_addUnpausableAdmin_adds_pool", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_ACL_05_removeUnpausableAdmin_removes_admin", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_ACL_06_isConfigurator_correct", - values?: undefined - ): string; - - decodeFunctionResult(functionFragment: "IS_TEST", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "failed", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "setUp", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "test_ACL_01_add_remove_reverts_on_non_owner", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_ACL_02_addPausableAdmin_adds_pool", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_ACL_03_removePausableAdmin_removes_admin", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_ACL_04_addUnpausableAdmin_adds_pool", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_ACL_05_removeUnpausableAdmin_removes_admin", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_ACL_06_isConfigurator_correct", - data: BytesLike - ): Result; - - events: { - "PausableAdminAdded(address)": EventFragment; - "PausableAdminRemoved(address)": EventFragment; - "UnpausableAdminAdded(address)": EventFragment; - "UnpausableAdminRemoved(address)": EventFragment; - "log(string)": EventFragment; - "log_address(address)": EventFragment; - "log_bytes(bytes)": EventFragment; - "log_bytes32(bytes32)": EventFragment; - "log_int(int256)": EventFragment; - "log_named_address(string,address)": EventFragment; - "log_named_bytes(string,bytes)": EventFragment; - "log_named_bytes32(string,bytes32)": EventFragment; - "log_named_decimal_int(string,int256,uint256)": EventFragment; - "log_named_decimal_uint(string,uint256,uint256)": EventFragment; - "log_named_int(string,int256)": EventFragment; - "log_named_string(string,string)": EventFragment; - "log_named_uint(string,uint256)": EventFragment; - "log_string(string)": EventFragment; - "log_uint(uint256)": EventFragment; - "logs(bytes)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "PausableAdminAdded"): EventFragment; - getEvent(nameOrSignatureOrTopic: "PausableAdminRemoved"): EventFragment; - getEvent(nameOrSignatureOrTopic: "UnpausableAdminAdded"): EventFragment; - getEvent(nameOrSignatureOrTopic: "UnpausableAdminRemoved"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "logs"): EventFragment; -} - -export interface PausableAdminAddedEventObject { - newAdmin: string; -} -export type PausableAdminAddedEvent = TypedEvent< - [string], - PausableAdminAddedEventObject ->; - -export type PausableAdminAddedEventFilter = - TypedEventFilter; - -export interface PausableAdminRemovedEventObject { - admin: string; -} -export type PausableAdminRemovedEvent = TypedEvent< - [string], - PausableAdminRemovedEventObject ->; - -export type PausableAdminRemovedEventFilter = - TypedEventFilter; - -export interface UnpausableAdminAddedEventObject { - newAdmin: string; -} -export type UnpausableAdminAddedEvent = TypedEvent< - [string], - UnpausableAdminAddedEventObject ->; - -export type UnpausableAdminAddedEventFilter = - TypedEventFilter; - -export interface UnpausableAdminRemovedEventObject { - admin: string; -} -export type UnpausableAdminRemovedEvent = TypedEvent< - [string], - UnpausableAdminRemovedEventObject ->; - -export type UnpausableAdminRemovedEventFilter = - TypedEventFilter; - -export interface logEventObject { - arg0: string; -} -export type logEvent = TypedEvent<[string], logEventObject>; - -export type logEventFilter = TypedEventFilter; - -export interface log_addressEventObject { - arg0: string; -} -export type log_addressEvent = TypedEvent<[string], log_addressEventObject>; - -export type log_addressEventFilter = TypedEventFilter; - -export interface log_bytesEventObject { - arg0: string; -} -export type log_bytesEvent = TypedEvent<[string], log_bytesEventObject>; - -export type log_bytesEventFilter = TypedEventFilter; - -export interface log_bytes32EventObject { - arg0: string; -} -export type log_bytes32Event = TypedEvent<[string], log_bytes32EventObject>; - -export type log_bytes32EventFilter = TypedEventFilter; - -export interface log_intEventObject { - arg0: BigNumber; -} -export type log_intEvent = TypedEvent<[BigNumber], log_intEventObject>; - -export type log_intEventFilter = TypedEventFilter; - -export interface log_named_addressEventObject { - key: string; - val: string; -} -export type log_named_addressEvent = TypedEvent< - [string, string], - log_named_addressEventObject ->; - -export type log_named_addressEventFilter = - TypedEventFilter; - -export interface log_named_bytesEventObject { - key: string; - val: string; -} -export type log_named_bytesEvent = TypedEvent< - [string, string], - log_named_bytesEventObject ->; - -export type log_named_bytesEventFilter = TypedEventFilter; - -export interface log_named_bytes32EventObject { - key: string; - val: string; -} -export type log_named_bytes32Event = TypedEvent< - [string, string], - log_named_bytes32EventObject ->; - -export type log_named_bytes32EventFilter = - TypedEventFilter; - -export interface log_named_decimal_intEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_intEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_intEventObject ->; - -export type log_named_decimal_intEventFilter = - TypedEventFilter; - -export interface log_named_decimal_uintEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_uintEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_uintEventObject ->; - -export type log_named_decimal_uintEventFilter = - TypedEventFilter; - -export interface log_named_intEventObject { - key: string; - val: BigNumber; -} -export type log_named_intEvent = TypedEvent< - [string, BigNumber], - log_named_intEventObject ->; - -export type log_named_intEventFilter = TypedEventFilter; - -export interface log_named_stringEventObject { - key: string; - val: string; -} -export type log_named_stringEvent = TypedEvent< - [string, string], - log_named_stringEventObject ->; - -export type log_named_stringEventFilter = - TypedEventFilter; - -export interface log_named_uintEventObject { - key: string; - val: BigNumber; -} -export type log_named_uintEvent = TypedEvent< - [string, BigNumber], - log_named_uintEventObject ->; - -export type log_named_uintEventFilter = TypedEventFilter; - -export interface log_stringEventObject { - arg0: string; -} -export type log_stringEvent = TypedEvent<[string], log_stringEventObject>; - -export type log_stringEventFilter = TypedEventFilter; - -export interface log_uintEventObject { - arg0: BigNumber; -} -export type log_uintEvent = TypedEvent<[BigNumber], log_uintEventObject>; - -export type log_uintEventFilter = TypedEventFilter; - -export interface logsEventObject { - arg0: string; -} -export type logsEvent = TypedEvent<[string], logsEventObject>; - -export type logsEventFilter = TypedEventFilter; - -export interface ACLTest extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: ACLTestInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - IS_TEST(overrides?: CallOverrides): Promise<[boolean]>; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACL_01_add_remove_reverts_on_non_owner( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACL_02_addPausableAdmin_adds_pool( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACL_03_removePausableAdmin_removes_admin( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACL_04_addUnpausableAdmin_adds_pool( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACL_05_removeUnpausableAdmin_removes_admin( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACL_06_isConfigurator_correct( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - IS_TEST(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACL_01_add_remove_reverts_on_non_owner( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACL_02_addPausableAdmin_adds_pool( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACL_03_removePausableAdmin_removes_admin( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACL_04_addUnpausableAdmin_adds_pool( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACL_05_removeUnpausableAdmin_removes_admin( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACL_06_isConfigurator_correct( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - IS_TEST(overrides?: CallOverrides): Promise; - - failed(overrides?: CallOverrides): Promise; - - setUp(overrides?: CallOverrides): Promise; - - test_ACL_01_add_remove_reverts_on_non_owner( - overrides?: CallOverrides - ): Promise; - - test_ACL_02_addPausableAdmin_adds_pool( - overrides?: CallOverrides - ): Promise; - - test_ACL_03_removePausableAdmin_removes_admin( - overrides?: CallOverrides - ): Promise; - - test_ACL_04_addUnpausableAdmin_adds_pool( - overrides?: CallOverrides - ): Promise; - - test_ACL_05_removeUnpausableAdmin_removes_admin( - overrides?: CallOverrides - ): Promise; - - test_ACL_06_isConfigurator_correct( - overrides?: CallOverrides - ): Promise; - }; - - filters: { - "PausableAdminAdded(address)"( - newAdmin?: string | null - ): PausableAdminAddedEventFilter; - PausableAdminAdded(newAdmin?: string | null): PausableAdminAddedEventFilter; - - "PausableAdminRemoved(address)"( - admin?: string | null - ): PausableAdminRemovedEventFilter; - PausableAdminRemoved( - admin?: string | null - ): PausableAdminRemovedEventFilter; - - "UnpausableAdminAdded(address)"( - newAdmin?: string | null - ): UnpausableAdminAddedEventFilter; - UnpausableAdminAdded( - newAdmin?: string | null - ): UnpausableAdminAddedEventFilter; - - "UnpausableAdminRemoved(address)"( - admin?: string | null - ): UnpausableAdminRemovedEventFilter; - UnpausableAdminRemoved( - admin?: string | null - ): UnpausableAdminRemovedEventFilter; - - "log(string)"(arg0?: null): logEventFilter; - log(arg0?: null): logEventFilter; - - "log_address(address)"(arg0?: null): log_addressEventFilter; - log_address(arg0?: null): log_addressEventFilter; - - "log_bytes(bytes)"(arg0?: null): log_bytesEventFilter; - log_bytes(arg0?: null): log_bytesEventFilter; - - "log_bytes32(bytes32)"(arg0?: null): log_bytes32EventFilter; - log_bytes32(arg0?: null): log_bytes32EventFilter; - - "log_int(int256)"(arg0?: null): log_intEventFilter; - log_int(arg0?: null): log_intEventFilter; - - "log_named_address(string,address)"( - key?: null, - val?: null - ): log_named_addressEventFilter; - log_named_address(key?: null, val?: null): log_named_addressEventFilter; - - "log_named_bytes(string,bytes)"( - key?: null, - val?: null - ): log_named_bytesEventFilter; - log_named_bytes(key?: null, val?: null): log_named_bytesEventFilter; - - "log_named_bytes32(string,bytes32)"( - key?: null, - val?: null - ): log_named_bytes32EventFilter; - log_named_bytes32(key?: null, val?: null): log_named_bytes32EventFilter; - - "log_named_decimal_int(string,int256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - log_named_decimal_int( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - - "log_named_decimal_uint(string,uint256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - log_named_decimal_uint( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - - "log_named_int(string,int256)"( - key?: null, - val?: null - ): log_named_intEventFilter; - log_named_int(key?: null, val?: null): log_named_intEventFilter; - - "log_named_string(string,string)"( - key?: null, - val?: null - ): log_named_stringEventFilter; - log_named_string(key?: null, val?: null): log_named_stringEventFilter; - - "log_named_uint(string,uint256)"( - key?: null, - val?: null - ): log_named_uintEventFilter; - log_named_uint(key?: null, val?: null): log_named_uintEventFilter; - - "log_string(string)"(arg0?: null): log_stringEventFilter; - log_string(arg0?: null): log_stringEventFilter; - - "log_uint(uint256)"(arg0?: null): log_uintEventFilter; - log_uint(arg0?: null): log_uintEventFilter; - - "logs(bytes)"(arg0?: null): logsEventFilter; - logs(arg0?: null): logsEventFilter; - }; - - estimateGas: { - IS_TEST(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACL_01_add_remove_reverts_on_non_owner( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACL_02_addPausableAdmin_adds_pool( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACL_03_removePausableAdmin_removes_admin( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACL_04_addUnpausableAdmin_adds_pool( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACL_05_removeUnpausableAdmin_removes_admin( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACL_06_isConfigurator_correct( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - IS_TEST(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACL_01_add_remove_reverts_on_non_owner( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACL_02_addPausableAdmin_adds_pool( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACL_03_removePausableAdmin_removes_admin( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACL_04_addUnpausableAdmin_adds_pool( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACL_05_removeUnpausableAdmin_removes_admin( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ACL_06_isConfigurator_correct( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/src/types/contracts/test/core/ACL.t.sol/index.ts b/src/types/contracts/test/core/ACL.t.sol/index.ts deleted file mode 100644 index dbecea42..00000000 --- a/src/types/contracts/test/core/ACL.t.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { ACLTest } from "./ACLTest"; diff --git a/src/types/contracts/test/core/AddressProvider.t.sol/AddressProviderTest.ts b/src/types/contracts/test/core/AddressProvider.t.sol/AddressProviderTest.ts deleted file mode 100644 index 134fe07b..00000000 --- a/src/types/contracts/test/core/AddressProvider.t.sol/AddressProviderTest.ts +++ /dev/null @@ -1,783 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface AddressProviderTestInterface extends utils.Interface { - functions: { - "IS_TEST()": FunctionFragment; - "failed()": FunctionFragment; - "setUp()": FunctionFragment; - "test_AP_01_getAddress_reverts_if_contact_not_found()": FunctionFragment; - "test_AP_02_setAddress_emits_event_correctly()": FunctionFragment; - "test_AP_03_setACL_correctly_sets_ACL()": FunctionFragment; - "test_AP_04_setContractsRegister_correctly_sets_ContractsRegister()": FunctionFragment; - "test_AP_05_setPriceOracle_correctly_sets_PriceOracle()": FunctionFragment; - "test_AP_06_setAccountFactory_correctly_sets_AccountFactory()": FunctionFragment; - "test_AP_07_setDataCompressor_correctly_sets_DataCompressor()": FunctionFragment; - "test_AP_08_setTreasuryContract_correctly_sets_TreasuryContract()": FunctionFragment; - "test_AP_09_setGearToken_correctly_sets_GearToken()": FunctionFragment; - "test_AP_10_setWethToken_correctly_sets_WethToken()": FunctionFragment; - "test_AP_11_setWETHGateway_correctly_sets_WethGateway()": FunctionFragment; - "test_AP_12_set_functions_revert_if_called_by_non_owner()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "IS_TEST" - | "failed" - | "setUp" - | "test_AP_01_getAddress_reverts_if_contact_not_found" - | "test_AP_02_setAddress_emits_event_correctly" - | "test_AP_03_setACL_correctly_sets_ACL" - | "test_AP_04_setContractsRegister_correctly_sets_ContractsRegister" - | "test_AP_05_setPriceOracle_correctly_sets_PriceOracle" - | "test_AP_06_setAccountFactory_correctly_sets_AccountFactory" - | "test_AP_07_setDataCompressor_correctly_sets_DataCompressor" - | "test_AP_08_setTreasuryContract_correctly_sets_TreasuryContract" - | "test_AP_09_setGearToken_correctly_sets_GearToken" - | "test_AP_10_setWethToken_correctly_sets_WethToken" - | "test_AP_11_setWETHGateway_correctly_sets_WethGateway" - | "test_AP_12_set_functions_revert_if_called_by_non_owner" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "IS_TEST", values?: undefined): string; - encodeFunctionData(functionFragment: "failed", values?: undefined): string; - encodeFunctionData(functionFragment: "setUp", values?: undefined): string; - encodeFunctionData( - functionFragment: "test_AP_01_getAddress_reverts_if_contact_not_found", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_AP_02_setAddress_emits_event_correctly", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_AP_03_setACL_correctly_sets_ACL", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_AP_04_setContractsRegister_correctly_sets_ContractsRegister", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_AP_05_setPriceOracle_correctly_sets_PriceOracle", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_AP_06_setAccountFactory_correctly_sets_AccountFactory", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_AP_07_setDataCompressor_correctly_sets_DataCompressor", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_AP_08_setTreasuryContract_correctly_sets_TreasuryContract", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_AP_09_setGearToken_correctly_sets_GearToken", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_AP_10_setWethToken_correctly_sets_WethToken", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_AP_11_setWETHGateway_correctly_sets_WethGateway", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_AP_12_set_functions_revert_if_called_by_non_owner", - values?: undefined - ): string; - - decodeFunctionResult(functionFragment: "IS_TEST", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "failed", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "setUp", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "test_AP_01_getAddress_reverts_if_contact_not_found", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_AP_02_setAddress_emits_event_correctly", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_AP_03_setACL_correctly_sets_ACL", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_AP_04_setContractsRegister_correctly_sets_ContractsRegister", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_AP_05_setPriceOracle_correctly_sets_PriceOracle", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_AP_06_setAccountFactory_correctly_sets_AccountFactory", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_AP_07_setDataCompressor_correctly_sets_DataCompressor", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_AP_08_setTreasuryContract_correctly_sets_TreasuryContract", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_AP_09_setGearToken_correctly_sets_GearToken", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_AP_10_setWethToken_correctly_sets_WethToken", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_AP_11_setWETHGateway_correctly_sets_WethGateway", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_AP_12_set_functions_revert_if_called_by_non_owner", - data: BytesLike - ): Result; - - events: { - "AddressSet(bytes32,address)": EventFragment; - "log(string)": EventFragment; - "log_address(address)": EventFragment; - "log_bytes(bytes)": EventFragment; - "log_bytes32(bytes32)": EventFragment; - "log_int(int256)": EventFragment; - "log_named_address(string,address)": EventFragment; - "log_named_bytes(string,bytes)": EventFragment; - "log_named_bytes32(string,bytes32)": EventFragment; - "log_named_decimal_int(string,int256,uint256)": EventFragment; - "log_named_decimal_uint(string,uint256,uint256)": EventFragment; - "log_named_int(string,int256)": EventFragment; - "log_named_string(string,string)": EventFragment; - "log_named_uint(string,uint256)": EventFragment; - "log_string(string)": EventFragment; - "log_uint(uint256)": EventFragment; - "logs(bytes)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "AddressSet"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "logs"): EventFragment; -} - -export interface AddressSetEventObject { - service: string; - newAddress: string; -} -export type AddressSetEvent = TypedEvent< - [string, string], - AddressSetEventObject ->; - -export type AddressSetEventFilter = TypedEventFilter; - -export interface logEventObject { - arg0: string; -} -export type logEvent = TypedEvent<[string], logEventObject>; - -export type logEventFilter = TypedEventFilter; - -export interface log_addressEventObject { - arg0: string; -} -export type log_addressEvent = TypedEvent<[string], log_addressEventObject>; - -export type log_addressEventFilter = TypedEventFilter; - -export interface log_bytesEventObject { - arg0: string; -} -export type log_bytesEvent = TypedEvent<[string], log_bytesEventObject>; - -export type log_bytesEventFilter = TypedEventFilter; - -export interface log_bytes32EventObject { - arg0: string; -} -export type log_bytes32Event = TypedEvent<[string], log_bytes32EventObject>; - -export type log_bytes32EventFilter = TypedEventFilter; - -export interface log_intEventObject { - arg0: BigNumber; -} -export type log_intEvent = TypedEvent<[BigNumber], log_intEventObject>; - -export type log_intEventFilter = TypedEventFilter; - -export interface log_named_addressEventObject { - key: string; - val: string; -} -export type log_named_addressEvent = TypedEvent< - [string, string], - log_named_addressEventObject ->; - -export type log_named_addressEventFilter = - TypedEventFilter; - -export interface log_named_bytesEventObject { - key: string; - val: string; -} -export type log_named_bytesEvent = TypedEvent< - [string, string], - log_named_bytesEventObject ->; - -export type log_named_bytesEventFilter = TypedEventFilter; - -export interface log_named_bytes32EventObject { - key: string; - val: string; -} -export type log_named_bytes32Event = TypedEvent< - [string, string], - log_named_bytes32EventObject ->; - -export type log_named_bytes32EventFilter = - TypedEventFilter; - -export interface log_named_decimal_intEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_intEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_intEventObject ->; - -export type log_named_decimal_intEventFilter = - TypedEventFilter; - -export interface log_named_decimal_uintEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_uintEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_uintEventObject ->; - -export type log_named_decimal_uintEventFilter = - TypedEventFilter; - -export interface log_named_intEventObject { - key: string; - val: BigNumber; -} -export type log_named_intEvent = TypedEvent< - [string, BigNumber], - log_named_intEventObject ->; - -export type log_named_intEventFilter = TypedEventFilter; - -export interface log_named_stringEventObject { - key: string; - val: string; -} -export type log_named_stringEvent = TypedEvent< - [string, string], - log_named_stringEventObject ->; - -export type log_named_stringEventFilter = - TypedEventFilter; - -export interface log_named_uintEventObject { - key: string; - val: BigNumber; -} -export type log_named_uintEvent = TypedEvent< - [string, BigNumber], - log_named_uintEventObject ->; - -export type log_named_uintEventFilter = TypedEventFilter; - -export interface log_stringEventObject { - arg0: string; -} -export type log_stringEvent = TypedEvent<[string], log_stringEventObject>; - -export type log_stringEventFilter = TypedEventFilter; - -export interface log_uintEventObject { - arg0: BigNumber; -} -export type log_uintEvent = TypedEvent<[BigNumber], log_uintEventObject>; - -export type log_uintEventFilter = TypedEventFilter; - -export interface logsEventObject { - arg0: string; -} -export type logsEvent = TypedEvent<[string], logsEventObject>; - -export type logsEventFilter = TypedEventFilter; - -export interface AddressProviderTest extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: AddressProviderTestInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - IS_TEST(overrides?: CallOverrides): Promise<[boolean]>; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AP_01_getAddress_reverts_if_contact_not_found( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AP_02_setAddress_emits_event_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AP_03_setACL_correctly_sets_ACL( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AP_04_setContractsRegister_correctly_sets_ContractsRegister( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AP_05_setPriceOracle_correctly_sets_PriceOracle( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AP_06_setAccountFactory_correctly_sets_AccountFactory( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AP_07_setDataCompressor_correctly_sets_DataCompressor( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AP_08_setTreasuryContract_correctly_sets_TreasuryContract( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AP_09_setGearToken_correctly_sets_GearToken( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AP_10_setWethToken_correctly_sets_WethToken( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AP_11_setWETHGateway_correctly_sets_WethGateway( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AP_12_set_functions_revert_if_called_by_non_owner( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - IS_TEST(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AP_01_getAddress_reverts_if_contact_not_found( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AP_02_setAddress_emits_event_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AP_03_setACL_correctly_sets_ACL( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AP_04_setContractsRegister_correctly_sets_ContractsRegister( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AP_05_setPriceOracle_correctly_sets_PriceOracle( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AP_06_setAccountFactory_correctly_sets_AccountFactory( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AP_07_setDataCompressor_correctly_sets_DataCompressor( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AP_08_setTreasuryContract_correctly_sets_TreasuryContract( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AP_09_setGearToken_correctly_sets_GearToken( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AP_10_setWethToken_correctly_sets_WethToken( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AP_11_setWETHGateway_correctly_sets_WethGateway( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AP_12_set_functions_revert_if_called_by_non_owner( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - IS_TEST(overrides?: CallOverrides): Promise; - - failed(overrides?: CallOverrides): Promise; - - setUp(overrides?: CallOverrides): Promise; - - test_AP_01_getAddress_reverts_if_contact_not_found( - overrides?: CallOverrides - ): Promise; - - test_AP_02_setAddress_emits_event_correctly( - overrides?: CallOverrides - ): Promise; - - test_AP_03_setACL_correctly_sets_ACL( - overrides?: CallOverrides - ): Promise; - - test_AP_04_setContractsRegister_correctly_sets_ContractsRegister( - overrides?: CallOverrides - ): Promise; - - test_AP_05_setPriceOracle_correctly_sets_PriceOracle( - overrides?: CallOverrides - ): Promise; - - test_AP_06_setAccountFactory_correctly_sets_AccountFactory( - overrides?: CallOverrides - ): Promise; - - test_AP_07_setDataCompressor_correctly_sets_DataCompressor( - overrides?: CallOverrides - ): Promise; - - test_AP_08_setTreasuryContract_correctly_sets_TreasuryContract( - overrides?: CallOverrides - ): Promise; - - test_AP_09_setGearToken_correctly_sets_GearToken( - overrides?: CallOverrides - ): Promise; - - test_AP_10_setWethToken_correctly_sets_WethToken( - overrides?: CallOverrides - ): Promise; - - test_AP_11_setWETHGateway_correctly_sets_WethGateway( - overrides?: CallOverrides - ): Promise; - - test_AP_12_set_functions_revert_if_called_by_non_owner( - overrides?: CallOverrides - ): Promise; - }; - - filters: { - "AddressSet(bytes32,address)"( - service?: BytesLike | null, - newAddress?: string | null - ): AddressSetEventFilter; - AddressSet( - service?: BytesLike | null, - newAddress?: string | null - ): AddressSetEventFilter; - - "log(string)"(arg0?: null): logEventFilter; - log(arg0?: null): logEventFilter; - - "log_address(address)"(arg0?: null): log_addressEventFilter; - log_address(arg0?: null): log_addressEventFilter; - - "log_bytes(bytes)"(arg0?: null): log_bytesEventFilter; - log_bytes(arg0?: null): log_bytesEventFilter; - - "log_bytes32(bytes32)"(arg0?: null): log_bytes32EventFilter; - log_bytes32(arg0?: null): log_bytes32EventFilter; - - "log_int(int256)"(arg0?: null): log_intEventFilter; - log_int(arg0?: null): log_intEventFilter; - - "log_named_address(string,address)"( - key?: null, - val?: null - ): log_named_addressEventFilter; - log_named_address(key?: null, val?: null): log_named_addressEventFilter; - - "log_named_bytes(string,bytes)"( - key?: null, - val?: null - ): log_named_bytesEventFilter; - log_named_bytes(key?: null, val?: null): log_named_bytesEventFilter; - - "log_named_bytes32(string,bytes32)"( - key?: null, - val?: null - ): log_named_bytes32EventFilter; - log_named_bytes32(key?: null, val?: null): log_named_bytes32EventFilter; - - "log_named_decimal_int(string,int256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - log_named_decimal_int( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - - "log_named_decimal_uint(string,uint256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - log_named_decimal_uint( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - - "log_named_int(string,int256)"( - key?: null, - val?: null - ): log_named_intEventFilter; - log_named_int(key?: null, val?: null): log_named_intEventFilter; - - "log_named_string(string,string)"( - key?: null, - val?: null - ): log_named_stringEventFilter; - log_named_string(key?: null, val?: null): log_named_stringEventFilter; - - "log_named_uint(string,uint256)"( - key?: null, - val?: null - ): log_named_uintEventFilter; - log_named_uint(key?: null, val?: null): log_named_uintEventFilter; - - "log_string(string)"(arg0?: null): log_stringEventFilter; - log_string(arg0?: null): log_stringEventFilter; - - "log_uint(uint256)"(arg0?: null): log_uintEventFilter; - log_uint(arg0?: null): log_uintEventFilter; - - "logs(bytes)"(arg0?: null): logsEventFilter; - logs(arg0?: null): logsEventFilter; - }; - - estimateGas: { - IS_TEST(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AP_01_getAddress_reverts_if_contact_not_found( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AP_02_setAddress_emits_event_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AP_03_setACL_correctly_sets_ACL( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AP_04_setContractsRegister_correctly_sets_ContractsRegister( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AP_05_setPriceOracle_correctly_sets_PriceOracle( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AP_06_setAccountFactory_correctly_sets_AccountFactory( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AP_07_setDataCompressor_correctly_sets_DataCompressor( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AP_08_setTreasuryContract_correctly_sets_TreasuryContract( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AP_09_setGearToken_correctly_sets_GearToken( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AP_10_setWethToken_correctly_sets_WethToken( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AP_11_setWETHGateway_correctly_sets_WethGateway( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AP_12_set_functions_revert_if_called_by_non_owner( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - IS_TEST(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AP_01_getAddress_reverts_if_contact_not_found( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AP_02_setAddress_emits_event_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AP_03_setACL_correctly_sets_ACL( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AP_04_setContractsRegister_correctly_sets_ContractsRegister( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AP_05_setPriceOracle_correctly_sets_PriceOracle( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AP_06_setAccountFactory_correctly_sets_AccountFactory( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AP_07_setDataCompressor_correctly_sets_DataCompressor( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AP_08_setTreasuryContract_correctly_sets_TreasuryContract( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AP_09_setGearToken_correctly_sets_GearToken( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AP_10_setWethToken_correctly_sets_WethToken( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AP_11_setWETHGateway_correctly_sets_WethGateway( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_AP_12_set_functions_revert_if_called_by_non_owner( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/src/types/contracts/test/core/AddressProvider.t.sol/index.ts b/src/types/contracts/test/core/AddressProvider.t.sol/index.ts deleted file mode 100644 index c5c84bb3..00000000 --- a/src/types/contracts/test/core/AddressProvider.t.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { AddressProviderTest } from "./AddressProviderTest"; diff --git a/src/types/contracts/test/core/index.ts b/src/types/contracts/test/core/index.ts deleted file mode 100644 index ad9176bf..00000000 --- a/src/types/contracts/test/core/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type * as aclTSol from "./ACL.t.sol"; -export type { aclTSol }; -import type * as addressProviderTSol from "./AddressProvider.t.sol"; -export type { addressProviderTSol }; diff --git a/src/types/contracts/test/credit/CreditConfigurator.t.sol/CreditConfiguratorTest.ts b/src/types/contracts/test/credit/CreditConfigurator.t.sol/CreditConfiguratorTest.ts deleted file mode 100644 index cbb96774..00000000 --- a/src/types/contracts/test/credit/CreditConfigurator.t.sol/CreditConfiguratorTest.ts +++ /dev/null @@ -1,1958 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PayableOverrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface CreditConfiguratorTestInterface extends utils.Interface { - functions: { - "IS_TEST()": FunctionFragment; - "_deploy(bytes,uint256)": FunctionFragment; - "_getAddress(bytes,uint256)": FunctionFragment; - "creditConfigurator()": FunctionFragment; - "creditFacade()": FunctionFragment; - "creditManager()": FunctionFragment; - "failed()": FunctionFragment; - "setUp()": FunctionFragment; - "test_CC_01A_constructor_emits_all_events()": FunctionFragment; - "test_CC_01_constructor_sets_correct_values()": FunctionFragment; - "test_CC_02_all_functions_revert_if_called_non_configurator()": FunctionFragment; - "test_CC_03_addCollateralToken_reverts_for_zero_address_or_in_priceFeed()": FunctionFragment; - "test_CC_04_addCollateralToken_adds_new_token_to_creditManager_and_set_lt()": FunctionFragment; - "test_CC_05_setLiquidationThreshold_reverts_for_underling_token_and_incorrect_values()": FunctionFragment; - "test_CC_06_setLiquidationThreshold_sets_liquidation_threshold_in_creditManager()": FunctionFragment; - "test_CC_07_allowToken_and_forbidToken_reverts_for_unknown_or_underlying_token()": FunctionFragment; - "test_CC_08_allowToken_doesnt_change_forbidden_mask_if_its_already_allowed()": FunctionFragment; - "test_CC_09_allows_token_if_it_was_forbidden()": FunctionFragment; - "test_CC_10_forbidToken_doesnt_change_forbidden_mask_if_its_already_forbidden()": FunctionFragment; - "test_CC_11_forbidToken_forbids_token_if_it_was_allowed()": FunctionFragment; - "test_CC_12A_allowContract_reverts_for_non_contract_addresses()": FunctionFragment; - "test_CC_12B_allowContract_reverts_for_non_compartible_adapter_contract()": FunctionFragment; - "test_CC_12_allowContract_and_forbidContract_reverts_for_zero_address()": FunctionFragment; - "test_CC_13_allowContract_reverts_for_creditManager_and_creditFacade_contracts()": FunctionFragment; - "test_CC_14_allowContract_reverts_for_creditManager_and_creditFacade_contracts()": FunctionFragment; - "test_CC_15_allowContract_allows_targetContract_adapter_and_emits_event()": FunctionFragment; - "test_CC_16_forbidContract_reverts_for_unknown_contract()": FunctionFragment; - "test_CC_17_forbidContract_forbids_contract_and_emits_event()": FunctionFragment; - "test_CC_18_setLimits_reverts_if_minAmount_gt_maxAmount_or_maxBorrowedAmount_gt_blockLimit()": FunctionFragment; - "test_CC_19_setLimits_sets_limits()": FunctionFragment; - "test_CC_23_setFees_reverts_for_incorrect_fees()": FunctionFragment; - "test_CC_25_setFees_updates_LT_for_underlying_and_for_all_tokens_which_bigger_than_new_LT()": FunctionFragment; - "test_CC_26_setFees_sets_fees_and_doesnt_change_others()": FunctionFragment; - "test_CC_28_upgradePriceOracle_upgrades_priceOracleCorrectly_and_doesnt_change_facade()": FunctionFragment; - "test_CC_29_upgradeCreditFacade_upgradeCreditConfigurator_reverts_for_incompatible_contracts()": FunctionFragment; - "test_CC_30_upgradeCreditFacade_upgrades_creditFacade_and_doesnt_change_priceOracle()": FunctionFragment; - "test_CC_31_upgradeCreditConfigurator_upgrades_creditConfigurator()": FunctionFragment; - "test_CC_32_setIncreaseDebtForbidden_sets_IncreaseDebtForbidden()": FunctionFragment; - "test_CC_33_setLimitPerBlock_reverts_if_it_lt_maxLimit_otherwise_sets_limitPerBlock()": FunctionFragment; - "test_CC_34_setExpirationDate_reverts_on_incorrect_newExpirationDate_otherwise_sets()": FunctionFragment; - "test_CC_35_addToUpgradeableContracts_works_correctly()": FunctionFragment; - "test_CC_36_removeFromUpgradeableContracts_works_correctly()": FunctionFragment; - "test_CC_37_setMaxEnabledTokens_works_correctly()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "IS_TEST" - | "_deploy" - | "_getAddress" - | "creditConfigurator" - | "creditFacade" - | "creditManager" - | "failed" - | "setUp" - | "test_CC_01A_constructor_emits_all_events" - | "test_CC_01_constructor_sets_correct_values" - | "test_CC_02_all_functions_revert_if_called_non_configurator" - | "test_CC_03_addCollateralToken_reverts_for_zero_address_or_in_priceFeed" - | "test_CC_04_addCollateralToken_adds_new_token_to_creditManager_and_set_lt" - | "test_CC_05_setLiquidationThreshold_reverts_for_underling_token_and_incorrect_values" - | "test_CC_06_setLiquidationThreshold_sets_liquidation_threshold_in_creditManager" - | "test_CC_07_allowToken_and_forbidToken_reverts_for_unknown_or_underlying_token" - | "test_CC_08_allowToken_doesnt_change_forbidden_mask_if_its_already_allowed" - | "test_CC_09_allows_token_if_it_was_forbidden" - | "test_CC_10_forbidToken_doesnt_change_forbidden_mask_if_its_already_forbidden" - | "test_CC_11_forbidToken_forbids_token_if_it_was_allowed" - | "test_CC_12A_allowContract_reverts_for_non_contract_addresses" - | "test_CC_12B_allowContract_reverts_for_non_compartible_adapter_contract" - | "test_CC_12_allowContract_and_forbidContract_reverts_for_zero_address" - | "test_CC_13_allowContract_reverts_for_creditManager_and_creditFacade_contracts" - | "test_CC_14_allowContract_reverts_for_creditManager_and_creditFacade_contracts" - | "test_CC_15_allowContract_allows_targetContract_adapter_and_emits_event" - | "test_CC_16_forbidContract_reverts_for_unknown_contract" - | "test_CC_17_forbidContract_forbids_contract_and_emits_event" - | "test_CC_18_setLimits_reverts_if_minAmount_gt_maxAmount_or_maxBorrowedAmount_gt_blockLimit" - | "test_CC_19_setLimits_sets_limits" - | "test_CC_23_setFees_reverts_for_incorrect_fees" - | "test_CC_25_setFees_updates_LT_for_underlying_and_for_all_tokens_which_bigger_than_new_LT" - | "test_CC_26_setFees_sets_fees_and_doesnt_change_others" - | "test_CC_28_upgradePriceOracle_upgrades_priceOracleCorrectly_and_doesnt_change_facade" - | "test_CC_29_upgradeCreditFacade_upgradeCreditConfigurator_reverts_for_incompatible_contracts" - | "test_CC_30_upgradeCreditFacade_upgrades_creditFacade_and_doesnt_change_priceOracle" - | "test_CC_31_upgradeCreditConfigurator_upgrades_creditConfigurator" - | "test_CC_32_setIncreaseDebtForbidden_sets_IncreaseDebtForbidden" - | "test_CC_33_setLimitPerBlock_reverts_if_it_lt_maxLimit_otherwise_sets_limitPerBlock" - | "test_CC_34_setExpirationDate_reverts_on_incorrect_newExpirationDate_otherwise_sets" - | "test_CC_35_addToUpgradeableContracts_works_correctly" - | "test_CC_36_removeFromUpgradeableContracts_works_correctly" - | "test_CC_37_setMaxEnabledTokens_works_correctly" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "IS_TEST", values?: undefined): string; - encodeFunctionData( - functionFragment: "_deploy", - values: [BytesLike, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "_getAddress", - values: [BytesLike, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "creditConfigurator", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditFacade", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditManager", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "failed", values?: undefined): string; - encodeFunctionData(functionFragment: "setUp", values?: undefined): string; - encodeFunctionData( - functionFragment: "test_CC_01A_constructor_emits_all_events", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CC_01_constructor_sets_correct_values", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CC_02_all_functions_revert_if_called_non_configurator", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CC_03_addCollateralToken_reverts_for_zero_address_or_in_priceFeed", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CC_04_addCollateralToken_adds_new_token_to_creditManager_and_set_lt", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CC_05_setLiquidationThreshold_reverts_for_underling_token_and_incorrect_values", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CC_06_setLiquidationThreshold_sets_liquidation_threshold_in_creditManager", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CC_07_allowToken_and_forbidToken_reverts_for_unknown_or_underlying_token", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CC_08_allowToken_doesnt_change_forbidden_mask_if_its_already_allowed", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CC_09_allows_token_if_it_was_forbidden", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CC_10_forbidToken_doesnt_change_forbidden_mask_if_its_already_forbidden", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CC_11_forbidToken_forbids_token_if_it_was_allowed", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CC_12A_allowContract_reverts_for_non_contract_addresses", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CC_12B_allowContract_reverts_for_non_compartible_adapter_contract", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CC_12_allowContract_and_forbidContract_reverts_for_zero_address", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CC_13_allowContract_reverts_for_creditManager_and_creditFacade_contracts", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CC_14_allowContract_reverts_for_creditManager_and_creditFacade_contracts", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CC_15_allowContract_allows_targetContract_adapter_and_emits_event", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CC_16_forbidContract_reverts_for_unknown_contract", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CC_17_forbidContract_forbids_contract_and_emits_event", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CC_18_setLimits_reverts_if_minAmount_gt_maxAmount_or_maxBorrowedAmount_gt_blockLimit", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CC_19_setLimits_sets_limits", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CC_23_setFees_reverts_for_incorrect_fees", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CC_25_setFees_updates_LT_for_underlying_and_for_all_tokens_which_bigger_than_new_LT", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CC_26_setFees_sets_fees_and_doesnt_change_others", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CC_28_upgradePriceOracle_upgrades_priceOracleCorrectly_and_doesnt_change_facade", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CC_29_upgradeCreditFacade_upgradeCreditConfigurator_reverts_for_incompatible_contracts", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CC_30_upgradeCreditFacade_upgrades_creditFacade_and_doesnt_change_priceOracle", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CC_31_upgradeCreditConfigurator_upgrades_creditConfigurator", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CC_32_setIncreaseDebtForbidden_sets_IncreaseDebtForbidden", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CC_33_setLimitPerBlock_reverts_if_it_lt_maxLimit_otherwise_sets_limitPerBlock", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CC_34_setExpirationDate_reverts_on_incorrect_newExpirationDate_otherwise_sets", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CC_35_addToUpgradeableContracts_works_correctly", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CC_36_removeFromUpgradeableContracts_works_correctly", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CC_37_setMaxEnabledTokens_works_correctly", - values?: undefined - ): string; - - decodeFunctionResult(functionFragment: "IS_TEST", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "_deploy", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "_getAddress", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditConfigurator", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditFacade", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditManager", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "failed", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "setUp", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "test_CC_01A_constructor_emits_all_events", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CC_01_constructor_sets_correct_values", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CC_02_all_functions_revert_if_called_non_configurator", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CC_03_addCollateralToken_reverts_for_zero_address_or_in_priceFeed", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CC_04_addCollateralToken_adds_new_token_to_creditManager_and_set_lt", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CC_05_setLiquidationThreshold_reverts_for_underling_token_and_incorrect_values", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CC_06_setLiquidationThreshold_sets_liquidation_threshold_in_creditManager", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CC_07_allowToken_and_forbidToken_reverts_for_unknown_or_underlying_token", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CC_08_allowToken_doesnt_change_forbidden_mask_if_its_already_allowed", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CC_09_allows_token_if_it_was_forbidden", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CC_10_forbidToken_doesnt_change_forbidden_mask_if_its_already_forbidden", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CC_11_forbidToken_forbids_token_if_it_was_allowed", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CC_12A_allowContract_reverts_for_non_contract_addresses", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CC_12B_allowContract_reverts_for_non_compartible_adapter_contract", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CC_12_allowContract_and_forbidContract_reverts_for_zero_address", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CC_13_allowContract_reverts_for_creditManager_and_creditFacade_contracts", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CC_14_allowContract_reverts_for_creditManager_and_creditFacade_contracts", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CC_15_allowContract_allows_targetContract_adapter_and_emits_event", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CC_16_forbidContract_reverts_for_unknown_contract", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CC_17_forbidContract_forbids_contract_and_emits_event", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CC_18_setLimits_reverts_if_minAmount_gt_maxAmount_or_maxBorrowedAmount_gt_blockLimit", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CC_19_setLimits_sets_limits", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CC_23_setFees_reverts_for_incorrect_fees", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CC_25_setFees_updates_LT_for_underlying_and_for_all_tokens_which_bigger_than_new_LT", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CC_26_setFees_sets_fees_and_doesnt_change_others", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CC_28_upgradePriceOracle_upgrades_priceOracleCorrectly_and_doesnt_change_facade", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CC_29_upgradeCreditFacade_upgradeCreditConfigurator_reverts_for_incompatible_contracts", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CC_30_upgradeCreditFacade_upgrades_creditFacade_and_doesnt_change_priceOracle", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CC_31_upgradeCreditConfigurator_upgrades_creditConfigurator", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CC_32_setIncreaseDebtForbidden_sets_IncreaseDebtForbidden", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CC_33_setLimitPerBlock_reverts_if_it_lt_maxLimit_otherwise_sets_limitPerBlock", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CC_34_setExpirationDate_reverts_on_incorrect_newExpirationDate_otherwise_sets", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CC_35_addToUpgradeableContracts_works_correctly", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CC_36_removeFromUpgradeableContracts_works_correctly", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CC_37_setMaxEnabledTokens_works_correctly", - data: BytesLike - ): Result; - - events: { - "AddedToUpgradeable(address)": EventFragment; - "ContractAllowed(address,address)": EventFragment; - "ContractForbidden(address)": EventFragment; - "CreditConfiguratorUpgraded(address)": EventFragment; - "CreditFacadeUpgraded(address)": EventFragment; - "DegenModeUpdated(bool)": EventFragment; - "ExecuteOrder(address,address)": EventFragment; - "ExpirationDateUpdated(uint40)": EventFragment; - "FeesUpdated(uint16,uint16,uint16,uint16,uint16)": EventFragment; - "IncreaseDebtModeUpdated(bool)": EventFragment; - "LimitPerBlockUpdated(uint128)": EventFragment; - "LimitsUpdated(uint256,uint256)": EventFragment; - "MaxEnabledTokensUpdated(uint8)": EventFragment; - "NewConfigurator(address)": EventFragment; - "PriceOracleUpgraded(address)": EventFragment; - "RemovedFromUpgradeable(address)": EventFragment; - "TokenAllowed(address)": EventFragment; - "TokenForbidden(address)": EventFragment; - "TokenLiquidationThresholdUpdated(address,uint16)": EventFragment; - "log(string)": EventFragment; - "log_address(address)": EventFragment; - "log_bytes(bytes)": EventFragment; - "log_bytes32(bytes32)": EventFragment; - "log_int(int256)": EventFragment; - "log_named_address(string,address)": EventFragment; - "log_named_bytes(string,bytes)": EventFragment; - "log_named_bytes32(string,bytes32)": EventFragment; - "log_named_decimal_int(string,int256,uint256)": EventFragment; - "log_named_decimal_uint(string,uint256,uint256)": EventFragment; - "log_named_int(string,int256)": EventFragment; - "log_named_string(string,string)": EventFragment; - "log_named_uint(string,uint256)": EventFragment; - "log_string(string)": EventFragment; - "log_uint(uint256)": EventFragment; - "logs(bytes)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "AddedToUpgradeable"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ContractAllowed"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ContractForbidden"): EventFragment; - getEvent(nameOrSignatureOrTopic: "CreditConfiguratorUpgraded"): EventFragment; - getEvent(nameOrSignatureOrTopic: "CreditFacadeUpgraded"): EventFragment; - getEvent(nameOrSignatureOrTopic: "DegenModeUpdated"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ExecuteOrder"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ExpirationDateUpdated"): EventFragment; - getEvent(nameOrSignatureOrTopic: "FeesUpdated"): EventFragment; - getEvent(nameOrSignatureOrTopic: "IncreaseDebtModeUpdated"): EventFragment; - getEvent(nameOrSignatureOrTopic: "LimitPerBlockUpdated"): EventFragment; - getEvent(nameOrSignatureOrTopic: "LimitsUpdated"): EventFragment; - getEvent(nameOrSignatureOrTopic: "MaxEnabledTokensUpdated"): EventFragment; - getEvent(nameOrSignatureOrTopic: "NewConfigurator"): EventFragment; - getEvent(nameOrSignatureOrTopic: "PriceOracleUpgraded"): EventFragment; - getEvent(nameOrSignatureOrTopic: "RemovedFromUpgradeable"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TokenAllowed"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TokenForbidden"): EventFragment; - getEvent( - nameOrSignatureOrTopic: "TokenLiquidationThresholdUpdated" - ): EventFragment; - getEvent(nameOrSignatureOrTopic: "log"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "logs"): EventFragment; -} - -export interface AddedToUpgradeableEventObject { - arg0: string; -} -export type AddedToUpgradeableEvent = TypedEvent< - [string], - AddedToUpgradeableEventObject ->; - -export type AddedToUpgradeableEventFilter = - TypedEventFilter; - -export interface ContractAllowedEventObject { - protocol: string; - adapter: string; -} -export type ContractAllowedEvent = TypedEvent< - [string, string], - ContractAllowedEventObject ->; - -export type ContractAllowedEventFilter = TypedEventFilter; - -export interface ContractForbiddenEventObject { - protocol: string; -} -export type ContractForbiddenEvent = TypedEvent< - [string], - ContractForbiddenEventObject ->; - -export type ContractForbiddenEventFilter = - TypedEventFilter; - -export interface CreditConfiguratorUpgradedEventObject { - newCreditConfigurator: string; -} -export type CreditConfiguratorUpgradedEvent = TypedEvent< - [string], - CreditConfiguratorUpgradedEventObject ->; - -export type CreditConfiguratorUpgradedEventFilter = - TypedEventFilter; - -export interface CreditFacadeUpgradedEventObject { - newCreditFacade: string; -} -export type CreditFacadeUpgradedEvent = TypedEvent< - [string], - CreditFacadeUpgradedEventObject ->; - -export type CreditFacadeUpgradedEventFilter = - TypedEventFilter; - -export interface DegenModeUpdatedEventObject { - arg0: boolean; -} -export type DegenModeUpdatedEvent = TypedEvent< - [boolean], - DegenModeUpdatedEventObject ->; - -export type DegenModeUpdatedEventFilter = - TypedEventFilter; - -export interface ExecuteOrderEventObject { - borrower: string; - target: string; -} -export type ExecuteOrderEvent = TypedEvent< - [string, string], - ExecuteOrderEventObject ->; - -export type ExecuteOrderEventFilter = TypedEventFilter; - -export interface ExpirationDateUpdatedEventObject { - arg0: number; -} -export type ExpirationDateUpdatedEvent = TypedEvent< - [number], - ExpirationDateUpdatedEventObject ->; - -export type ExpirationDateUpdatedEventFilter = - TypedEventFilter; - -export interface FeesUpdatedEventObject { - feeInterest: number; - feeLiquidation: number; - liquidationPremium: number; - feeLiquidationExpired: number; - liquidationPremiumExpired: number; -} -export type FeesUpdatedEvent = TypedEvent< - [number, number, number, number, number], - FeesUpdatedEventObject ->; - -export type FeesUpdatedEventFilter = TypedEventFilter; - -export interface IncreaseDebtModeUpdatedEventObject { - arg0: boolean; -} -export type IncreaseDebtModeUpdatedEvent = TypedEvent< - [boolean], - IncreaseDebtModeUpdatedEventObject ->; - -export type IncreaseDebtModeUpdatedEventFilter = - TypedEventFilter; - -export interface LimitPerBlockUpdatedEventObject { - arg0: BigNumber; -} -export type LimitPerBlockUpdatedEvent = TypedEvent< - [BigNumber], - LimitPerBlockUpdatedEventObject ->; - -export type LimitPerBlockUpdatedEventFilter = - TypedEventFilter; - -export interface LimitsUpdatedEventObject { - minBorrowedAmount: BigNumber; - maxBorrowedAmount: BigNumber; -} -export type LimitsUpdatedEvent = TypedEvent< - [BigNumber, BigNumber], - LimitsUpdatedEventObject ->; - -export type LimitsUpdatedEventFilter = TypedEventFilter; - -export interface MaxEnabledTokensUpdatedEventObject { - arg0: number; -} -export type MaxEnabledTokensUpdatedEvent = TypedEvent< - [number], - MaxEnabledTokensUpdatedEventObject ->; - -export type MaxEnabledTokensUpdatedEventFilter = - TypedEventFilter; - -export interface NewConfiguratorEventObject { - newConfigurator: string; -} -export type NewConfiguratorEvent = TypedEvent< - [string], - NewConfiguratorEventObject ->; - -export type NewConfiguratorEventFilter = TypedEventFilter; - -export interface PriceOracleUpgradedEventObject { - newPriceOracle: string; -} -export type PriceOracleUpgradedEvent = TypedEvent< - [string], - PriceOracleUpgradedEventObject ->; - -export type PriceOracleUpgradedEventFilter = - TypedEventFilter; - -export interface RemovedFromUpgradeableEventObject { - arg0: string; -} -export type RemovedFromUpgradeableEvent = TypedEvent< - [string], - RemovedFromUpgradeableEventObject ->; - -export type RemovedFromUpgradeableEventFilter = - TypedEventFilter; - -export interface TokenAllowedEventObject { - token: string; -} -export type TokenAllowedEvent = TypedEvent<[string], TokenAllowedEventObject>; - -export type TokenAllowedEventFilter = TypedEventFilter; - -export interface TokenForbiddenEventObject { - token: string; -} -export type TokenForbiddenEvent = TypedEvent< - [string], - TokenForbiddenEventObject ->; - -export type TokenForbiddenEventFilter = TypedEventFilter; - -export interface TokenLiquidationThresholdUpdatedEventObject { - token: string; - liquidityThreshold: number; -} -export type TokenLiquidationThresholdUpdatedEvent = TypedEvent< - [string, number], - TokenLiquidationThresholdUpdatedEventObject ->; - -export type TokenLiquidationThresholdUpdatedEventFilter = - TypedEventFilter; - -export interface logEventObject { - arg0: string; -} -export type logEvent = TypedEvent<[string], logEventObject>; - -export type logEventFilter = TypedEventFilter; - -export interface log_addressEventObject { - arg0: string; -} -export type log_addressEvent = TypedEvent<[string], log_addressEventObject>; - -export type log_addressEventFilter = TypedEventFilter; - -export interface log_bytesEventObject { - arg0: string; -} -export type log_bytesEvent = TypedEvent<[string], log_bytesEventObject>; - -export type log_bytesEventFilter = TypedEventFilter; - -export interface log_bytes32EventObject { - arg0: string; -} -export type log_bytes32Event = TypedEvent<[string], log_bytes32EventObject>; - -export type log_bytes32EventFilter = TypedEventFilter; - -export interface log_intEventObject { - arg0: BigNumber; -} -export type log_intEvent = TypedEvent<[BigNumber], log_intEventObject>; - -export type log_intEventFilter = TypedEventFilter; - -export interface log_named_addressEventObject { - key: string; - val: string; -} -export type log_named_addressEvent = TypedEvent< - [string, string], - log_named_addressEventObject ->; - -export type log_named_addressEventFilter = - TypedEventFilter; - -export interface log_named_bytesEventObject { - key: string; - val: string; -} -export type log_named_bytesEvent = TypedEvent< - [string, string], - log_named_bytesEventObject ->; - -export type log_named_bytesEventFilter = TypedEventFilter; - -export interface log_named_bytes32EventObject { - key: string; - val: string; -} -export type log_named_bytes32Event = TypedEvent< - [string, string], - log_named_bytes32EventObject ->; - -export type log_named_bytes32EventFilter = - TypedEventFilter; - -export interface log_named_decimal_intEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_intEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_intEventObject ->; - -export type log_named_decimal_intEventFilter = - TypedEventFilter; - -export interface log_named_decimal_uintEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_uintEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_uintEventObject ->; - -export type log_named_decimal_uintEventFilter = - TypedEventFilter; - -export interface log_named_intEventObject { - key: string; - val: BigNumber; -} -export type log_named_intEvent = TypedEvent< - [string, BigNumber], - log_named_intEventObject ->; - -export type log_named_intEventFilter = TypedEventFilter; - -export interface log_named_stringEventObject { - key: string; - val: string; -} -export type log_named_stringEvent = TypedEvent< - [string, string], - log_named_stringEventObject ->; - -export type log_named_stringEventFilter = - TypedEventFilter; - -export interface log_named_uintEventObject { - key: string; - val: BigNumber; -} -export type log_named_uintEvent = TypedEvent< - [string, BigNumber], - log_named_uintEventObject ->; - -export type log_named_uintEventFilter = TypedEventFilter; - -export interface log_stringEventObject { - arg0: string; -} -export type log_stringEvent = TypedEvent<[string], log_stringEventObject>; - -export type log_stringEventFilter = TypedEventFilter; - -export interface log_uintEventObject { - arg0: BigNumber; -} -export type log_uintEvent = TypedEvent<[BigNumber], log_uintEventObject>; - -export type log_uintEventFilter = TypedEventFilter; - -export interface logsEventObject { - arg0: string; -} -export type logsEvent = TypedEvent<[string], logsEventObject>; - -export type logsEventFilter = TypedEventFilter; - -export interface CreditConfiguratorTest extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: CreditConfiguratorTestInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - IS_TEST(overrides?: CallOverrides): Promise<[boolean]>; - - _deploy( - bytecode: BytesLike, - _salt: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - _getAddress( - bytecode: BytesLike, - _salt: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - creditConfigurator(overrides?: CallOverrides): Promise<[string]>; - - creditFacade(overrides?: CallOverrides): Promise<[string]>; - - creditManager(overrides?: CallOverrides): Promise<[string]>; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_01A_constructor_emits_all_events( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_01_constructor_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_02_all_functions_revert_if_called_non_configurator( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_03_addCollateralToken_reverts_for_zero_address_or_in_priceFeed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_04_addCollateralToken_adds_new_token_to_creditManager_and_set_lt( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_05_setLiquidationThreshold_reverts_for_underling_token_and_incorrect_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_06_setLiquidationThreshold_sets_liquidation_threshold_in_creditManager( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_07_allowToken_and_forbidToken_reverts_for_unknown_or_underlying_token( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_08_allowToken_doesnt_change_forbidden_mask_if_its_already_allowed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_09_allows_token_if_it_was_forbidden( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_10_forbidToken_doesnt_change_forbidden_mask_if_its_already_forbidden( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_11_forbidToken_forbids_token_if_it_was_allowed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_12A_allowContract_reverts_for_non_contract_addresses( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_12B_allowContract_reverts_for_non_compartible_adapter_contract( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_12_allowContract_and_forbidContract_reverts_for_zero_address( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_13_allowContract_reverts_for_creditManager_and_creditFacade_contracts( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_14_allowContract_reverts_for_creditManager_and_creditFacade_contracts( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_15_allowContract_allows_targetContract_adapter_and_emits_event( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_16_forbidContract_reverts_for_unknown_contract( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_17_forbidContract_forbids_contract_and_emits_event( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_18_setLimits_reverts_if_minAmount_gt_maxAmount_or_maxBorrowedAmount_gt_blockLimit( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_19_setLimits_sets_limits( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_23_setFees_reverts_for_incorrect_fees( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_25_setFees_updates_LT_for_underlying_and_for_all_tokens_which_bigger_than_new_LT( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_26_setFees_sets_fees_and_doesnt_change_others( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_28_upgradePriceOracle_upgrades_priceOracleCorrectly_and_doesnt_change_facade( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_29_upgradeCreditFacade_upgradeCreditConfigurator_reverts_for_incompatible_contracts( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_30_upgradeCreditFacade_upgrades_creditFacade_and_doesnt_change_priceOracle( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_31_upgradeCreditConfigurator_upgrades_creditConfigurator( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_32_setIncreaseDebtForbidden_sets_IncreaseDebtForbidden( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_33_setLimitPerBlock_reverts_if_it_lt_maxLimit_otherwise_sets_limitPerBlock( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_34_setExpirationDate_reverts_on_incorrect_newExpirationDate_otherwise_sets( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_35_addToUpgradeableContracts_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_36_removeFromUpgradeableContracts_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_37_setMaxEnabledTokens_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - IS_TEST(overrides?: CallOverrides): Promise; - - _deploy( - bytecode: BytesLike, - _salt: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - _getAddress( - bytecode: BytesLike, - _salt: BigNumberish, - overrides?: CallOverrides - ): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_01A_constructor_emits_all_events( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_01_constructor_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_02_all_functions_revert_if_called_non_configurator( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_03_addCollateralToken_reverts_for_zero_address_or_in_priceFeed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_04_addCollateralToken_adds_new_token_to_creditManager_and_set_lt( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_05_setLiquidationThreshold_reverts_for_underling_token_and_incorrect_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_06_setLiquidationThreshold_sets_liquidation_threshold_in_creditManager( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_07_allowToken_and_forbidToken_reverts_for_unknown_or_underlying_token( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_08_allowToken_doesnt_change_forbidden_mask_if_its_already_allowed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_09_allows_token_if_it_was_forbidden( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_10_forbidToken_doesnt_change_forbidden_mask_if_its_already_forbidden( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_11_forbidToken_forbids_token_if_it_was_allowed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_12A_allowContract_reverts_for_non_contract_addresses( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_12B_allowContract_reverts_for_non_compartible_adapter_contract( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_12_allowContract_and_forbidContract_reverts_for_zero_address( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_13_allowContract_reverts_for_creditManager_and_creditFacade_contracts( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_14_allowContract_reverts_for_creditManager_and_creditFacade_contracts( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_15_allowContract_allows_targetContract_adapter_and_emits_event( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_16_forbidContract_reverts_for_unknown_contract( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_17_forbidContract_forbids_contract_and_emits_event( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_18_setLimits_reverts_if_minAmount_gt_maxAmount_or_maxBorrowedAmount_gt_blockLimit( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_19_setLimits_sets_limits( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_23_setFees_reverts_for_incorrect_fees( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_25_setFees_updates_LT_for_underlying_and_for_all_tokens_which_bigger_than_new_LT( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_26_setFees_sets_fees_and_doesnt_change_others( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_28_upgradePriceOracle_upgrades_priceOracleCorrectly_and_doesnt_change_facade( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_29_upgradeCreditFacade_upgradeCreditConfigurator_reverts_for_incompatible_contracts( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_30_upgradeCreditFacade_upgrades_creditFacade_and_doesnt_change_priceOracle( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_31_upgradeCreditConfigurator_upgrades_creditConfigurator( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_32_setIncreaseDebtForbidden_sets_IncreaseDebtForbidden( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_33_setLimitPerBlock_reverts_if_it_lt_maxLimit_otherwise_sets_limitPerBlock( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_34_setExpirationDate_reverts_on_incorrect_newExpirationDate_otherwise_sets( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_35_addToUpgradeableContracts_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_36_removeFromUpgradeableContracts_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_37_setMaxEnabledTokens_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - IS_TEST(overrides?: CallOverrides): Promise; - - _deploy( - bytecode: BytesLike, - _salt: BigNumberish, - overrides?: CallOverrides - ): Promise; - - _getAddress( - bytecode: BytesLike, - _salt: BigNumberish, - overrides?: CallOverrides - ): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - failed(overrides?: CallOverrides): Promise; - - setUp(overrides?: CallOverrides): Promise; - - test_CC_01A_constructor_emits_all_events( - overrides?: CallOverrides - ): Promise; - - test_CC_01_constructor_sets_correct_values( - overrides?: CallOverrides - ): Promise; - - test_CC_02_all_functions_revert_if_called_non_configurator( - overrides?: CallOverrides - ): Promise; - - test_CC_03_addCollateralToken_reverts_for_zero_address_or_in_priceFeed( - overrides?: CallOverrides - ): Promise; - - test_CC_04_addCollateralToken_adds_new_token_to_creditManager_and_set_lt( - overrides?: CallOverrides - ): Promise; - - test_CC_05_setLiquidationThreshold_reverts_for_underling_token_and_incorrect_values( - overrides?: CallOverrides - ): Promise; - - test_CC_06_setLiquidationThreshold_sets_liquidation_threshold_in_creditManager( - overrides?: CallOverrides - ): Promise; - - test_CC_07_allowToken_and_forbidToken_reverts_for_unknown_or_underlying_token( - overrides?: CallOverrides - ): Promise; - - test_CC_08_allowToken_doesnt_change_forbidden_mask_if_its_already_allowed( - overrides?: CallOverrides - ): Promise; - - test_CC_09_allows_token_if_it_was_forbidden( - overrides?: CallOverrides - ): Promise; - - test_CC_10_forbidToken_doesnt_change_forbidden_mask_if_its_already_forbidden( - overrides?: CallOverrides - ): Promise; - - test_CC_11_forbidToken_forbids_token_if_it_was_allowed( - overrides?: CallOverrides - ): Promise; - - test_CC_12A_allowContract_reverts_for_non_contract_addresses( - overrides?: CallOverrides - ): Promise; - - test_CC_12B_allowContract_reverts_for_non_compartible_adapter_contract( - overrides?: CallOverrides - ): Promise; - - test_CC_12_allowContract_and_forbidContract_reverts_for_zero_address( - overrides?: CallOverrides - ): Promise; - - test_CC_13_allowContract_reverts_for_creditManager_and_creditFacade_contracts( - overrides?: CallOverrides - ): Promise; - - test_CC_14_allowContract_reverts_for_creditManager_and_creditFacade_contracts( - overrides?: CallOverrides - ): Promise; - - test_CC_15_allowContract_allows_targetContract_adapter_and_emits_event( - overrides?: CallOverrides - ): Promise; - - test_CC_16_forbidContract_reverts_for_unknown_contract( - overrides?: CallOverrides - ): Promise; - - test_CC_17_forbidContract_forbids_contract_and_emits_event( - overrides?: CallOverrides - ): Promise; - - test_CC_18_setLimits_reverts_if_minAmount_gt_maxAmount_or_maxBorrowedAmount_gt_blockLimit( - overrides?: CallOverrides - ): Promise; - - test_CC_19_setLimits_sets_limits(overrides?: CallOverrides): Promise; - - test_CC_23_setFees_reverts_for_incorrect_fees( - overrides?: CallOverrides - ): Promise; - - test_CC_25_setFees_updates_LT_for_underlying_and_for_all_tokens_which_bigger_than_new_LT( - overrides?: CallOverrides - ): Promise; - - test_CC_26_setFees_sets_fees_and_doesnt_change_others( - overrides?: CallOverrides - ): Promise; - - test_CC_28_upgradePriceOracle_upgrades_priceOracleCorrectly_and_doesnt_change_facade( - overrides?: CallOverrides - ): Promise; - - test_CC_29_upgradeCreditFacade_upgradeCreditConfigurator_reverts_for_incompatible_contracts( - overrides?: CallOverrides - ): Promise; - - test_CC_30_upgradeCreditFacade_upgrades_creditFacade_and_doesnt_change_priceOracle( - overrides?: CallOverrides - ): Promise; - - test_CC_31_upgradeCreditConfigurator_upgrades_creditConfigurator( - overrides?: CallOverrides - ): Promise; - - test_CC_32_setIncreaseDebtForbidden_sets_IncreaseDebtForbidden( - overrides?: CallOverrides - ): Promise; - - test_CC_33_setLimitPerBlock_reverts_if_it_lt_maxLimit_otherwise_sets_limitPerBlock( - overrides?: CallOverrides - ): Promise; - - test_CC_34_setExpirationDate_reverts_on_incorrect_newExpirationDate_otherwise_sets( - overrides?: CallOverrides - ): Promise; - - test_CC_35_addToUpgradeableContracts_works_correctly( - overrides?: CallOverrides - ): Promise; - - test_CC_36_removeFromUpgradeableContracts_works_correctly( - overrides?: CallOverrides - ): Promise; - - test_CC_37_setMaxEnabledTokens_works_correctly( - overrides?: CallOverrides - ): Promise; - }; - - filters: { - "AddedToUpgradeable(address)"(arg0?: null): AddedToUpgradeableEventFilter; - AddedToUpgradeable(arg0?: null): AddedToUpgradeableEventFilter; - - "ContractAllowed(address,address)"( - protocol?: string | null, - adapter?: string | null - ): ContractAllowedEventFilter; - ContractAllowed( - protocol?: string | null, - adapter?: string | null - ): ContractAllowedEventFilter; - - "ContractForbidden(address)"( - protocol?: string | null - ): ContractForbiddenEventFilter; - ContractForbidden(protocol?: string | null): ContractForbiddenEventFilter; - - "CreditConfiguratorUpgraded(address)"( - newCreditConfigurator?: string | null - ): CreditConfiguratorUpgradedEventFilter; - CreditConfiguratorUpgraded( - newCreditConfigurator?: string | null - ): CreditConfiguratorUpgradedEventFilter; - - "CreditFacadeUpgraded(address)"( - newCreditFacade?: string | null - ): CreditFacadeUpgradedEventFilter; - CreditFacadeUpgraded( - newCreditFacade?: string | null - ): CreditFacadeUpgradedEventFilter; - - "DegenModeUpdated(bool)"(arg0?: null): DegenModeUpdatedEventFilter; - DegenModeUpdated(arg0?: null): DegenModeUpdatedEventFilter; - - "ExecuteOrder(address,address)"( - borrower?: string | null, - target?: string | null - ): ExecuteOrderEventFilter; - ExecuteOrder( - borrower?: string | null, - target?: string | null - ): ExecuteOrderEventFilter; - - "ExpirationDateUpdated(uint40)"( - arg0?: null - ): ExpirationDateUpdatedEventFilter; - ExpirationDateUpdated(arg0?: null): ExpirationDateUpdatedEventFilter; - - "FeesUpdated(uint16,uint16,uint16,uint16,uint16)"( - feeInterest?: null, - feeLiquidation?: null, - liquidationPremium?: null, - feeLiquidationExpired?: null, - liquidationPremiumExpired?: null - ): FeesUpdatedEventFilter; - FeesUpdated( - feeInterest?: null, - feeLiquidation?: null, - liquidationPremium?: null, - feeLiquidationExpired?: null, - liquidationPremiumExpired?: null - ): FeesUpdatedEventFilter; - - "IncreaseDebtModeUpdated(bool)"( - arg0?: null - ): IncreaseDebtModeUpdatedEventFilter; - IncreaseDebtModeUpdated(arg0?: null): IncreaseDebtModeUpdatedEventFilter; - - "LimitPerBlockUpdated(uint128)"( - arg0?: null - ): LimitPerBlockUpdatedEventFilter; - LimitPerBlockUpdated(arg0?: null): LimitPerBlockUpdatedEventFilter; - - "LimitsUpdated(uint256,uint256)"( - minBorrowedAmount?: null, - maxBorrowedAmount?: null - ): LimitsUpdatedEventFilter; - LimitsUpdated( - minBorrowedAmount?: null, - maxBorrowedAmount?: null - ): LimitsUpdatedEventFilter; - - "MaxEnabledTokensUpdated(uint8)"( - arg0?: null - ): MaxEnabledTokensUpdatedEventFilter; - MaxEnabledTokensUpdated(arg0?: null): MaxEnabledTokensUpdatedEventFilter; - - "NewConfigurator(address)"( - newConfigurator?: string | null - ): NewConfiguratorEventFilter; - NewConfigurator( - newConfigurator?: string | null - ): NewConfiguratorEventFilter; - - "PriceOracleUpgraded(address)"( - newPriceOracle?: string | null - ): PriceOracleUpgradedEventFilter; - PriceOracleUpgraded( - newPriceOracle?: string | null - ): PriceOracleUpgradedEventFilter; - - "RemovedFromUpgradeable(address)"( - arg0?: null - ): RemovedFromUpgradeableEventFilter; - RemovedFromUpgradeable(arg0?: null): RemovedFromUpgradeableEventFilter; - - "TokenAllowed(address)"(token?: string | null): TokenAllowedEventFilter; - TokenAllowed(token?: string | null): TokenAllowedEventFilter; - - "TokenForbidden(address)"(token?: string | null): TokenForbiddenEventFilter; - TokenForbidden(token?: string | null): TokenForbiddenEventFilter; - - "TokenLiquidationThresholdUpdated(address,uint16)"( - token?: string | null, - liquidityThreshold?: null - ): TokenLiquidationThresholdUpdatedEventFilter; - TokenLiquidationThresholdUpdated( - token?: string | null, - liquidityThreshold?: null - ): TokenLiquidationThresholdUpdatedEventFilter; - - "log(string)"(arg0?: null): logEventFilter; - log(arg0?: null): logEventFilter; - - "log_address(address)"(arg0?: null): log_addressEventFilter; - log_address(arg0?: null): log_addressEventFilter; - - "log_bytes(bytes)"(arg0?: null): log_bytesEventFilter; - log_bytes(arg0?: null): log_bytesEventFilter; - - "log_bytes32(bytes32)"(arg0?: null): log_bytes32EventFilter; - log_bytes32(arg0?: null): log_bytes32EventFilter; - - "log_int(int256)"(arg0?: null): log_intEventFilter; - log_int(arg0?: null): log_intEventFilter; - - "log_named_address(string,address)"( - key?: null, - val?: null - ): log_named_addressEventFilter; - log_named_address(key?: null, val?: null): log_named_addressEventFilter; - - "log_named_bytes(string,bytes)"( - key?: null, - val?: null - ): log_named_bytesEventFilter; - log_named_bytes(key?: null, val?: null): log_named_bytesEventFilter; - - "log_named_bytes32(string,bytes32)"( - key?: null, - val?: null - ): log_named_bytes32EventFilter; - log_named_bytes32(key?: null, val?: null): log_named_bytes32EventFilter; - - "log_named_decimal_int(string,int256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - log_named_decimal_int( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - - "log_named_decimal_uint(string,uint256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - log_named_decimal_uint( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - - "log_named_int(string,int256)"( - key?: null, - val?: null - ): log_named_intEventFilter; - log_named_int(key?: null, val?: null): log_named_intEventFilter; - - "log_named_string(string,string)"( - key?: null, - val?: null - ): log_named_stringEventFilter; - log_named_string(key?: null, val?: null): log_named_stringEventFilter; - - "log_named_uint(string,uint256)"( - key?: null, - val?: null - ): log_named_uintEventFilter; - log_named_uint(key?: null, val?: null): log_named_uintEventFilter; - - "log_string(string)"(arg0?: null): log_stringEventFilter; - log_string(arg0?: null): log_stringEventFilter; - - "log_uint(uint256)"(arg0?: null): log_uintEventFilter; - log_uint(arg0?: null): log_uintEventFilter; - - "logs(bytes)"(arg0?: null): logsEventFilter; - logs(arg0?: null): logsEventFilter; - }; - - estimateGas: { - IS_TEST(overrides?: CallOverrides): Promise; - - _deploy( - bytecode: BytesLike, - _salt: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - _getAddress( - bytecode: BytesLike, - _salt: BigNumberish, - overrides?: CallOverrides - ): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_01A_constructor_emits_all_events( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_01_constructor_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_02_all_functions_revert_if_called_non_configurator( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_03_addCollateralToken_reverts_for_zero_address_or_in_priceFeed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_04_addCollateralToken_adds_new_token_to_creditManager_and_set_lt( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_05_setLiquidationThreshold_reverts_for_underling_token_and_incorrect_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_06_setLiquidationThreshold_sets_liquidation_threshold_in_creditManager( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_07_allowToken_and_forbidToken_reverts_for_unknown_or_underlying_token( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_08_allowToken_doesnt_change_forbidden_mask_if_its_already_allowed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_09_allows_token_if_it_was_forbidden( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_10_forbidToken_doesnt_change_forbidden_mask_if_its_already_forbidden( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_11_forbidToken_forbids_token_if_it_was_allowed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_12A_allowContract_reverts_for_non_contract_addresses( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_12B_allowContract_reverts_for_non_compartible_adapter_contract( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_12_allowContract_and_forbidContract_reverts_for_zero_address( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_13_allowContract_reverts_for_creditManager_and_creditFacade_contracts( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_14_allowContract_reverts_for_creditManager_and_creditFacade_contracts( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_15_allowContract_allows_targetContract_adapter_and_emits_event( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_16_forbidContract_reverts_for_unknown_contract( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_17_forbidContract_forbids_contract_and_emits_event( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_18_setLimits_reverts_if_minAmount_gt_maxAmount_or_maxBorrowedAmount_gt_blockLimit( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_19_setLimits_sets_limits( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_23_setFees_reverts_for_incorrect_fees( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_25_setFees_updates_LT_for_underlying_and_for_all_tokens_which_bigger_than_new_LT( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_26_setFees_sets_fees_and_doesnt_change_others( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_28_upgradePriceOracle_upgrades_priceOracleCorrectly_and_doesnt_change_facade( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_29_upgradeCreditFacade_upgradeCreditConfigurator_reverts_for_incompatible_contracts( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_30_upgradeCreditFacade_upgrades_creditFacade_and_doesnt_change_priceOracle( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_31_upgradeCreditConfigurator_upgrades_creditConfigurator( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_32_setIncreaseDebtForbidden_sets_IncreaseDebtForbidden( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_33_setLimitPerBlock_reverts_if_it_lt_maxLimit_otherwise_sets_limitPerBlock( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_34_setExpirationDate_reverts_on_incorrect_newExpirationDate_otherwise_sets( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_35_addToUpgradeableContracts_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_36_removeFromUpgradeableContracts_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_37_setMaxEnabledTokens_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - IS_TEST(overrides?: CallOverrides): Promise; - - _deploy( - bytecode: BytesLike, - _salt: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - _getAddress( - bytecode: BytesLike, - _salt: BigNumberish, - overrides?: CallOverrides - ): Promise; - - creditConfigurator( - overrides?: CallOverrides - ): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_01A_constructor_emits_all_events( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_01_constructor_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_02_all_functions_revert_if_called_non_configurator( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_03_addCollateralToken_reverts_for_zero_address_or_in_priceFeed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_04_addCollateralToken_adds_new_token_to_creditManager_and_set_lt( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_05_setLiquidationThreshold_reverts_for_underling_token_and_incorrect_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_06_setLiquidationThreshold_sets_liquidation_threshold_in_creditManager( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_07_allowToken_and_forbidToken_reverts_for_unknown_or_underlying_token( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_08_allowToken_doesnt_change_forbidden_mask_if_its_already_allowed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_09_allows_token_if_it_was_forbidden( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_10_forbidToken_doesnt_change_forbidden_mask_if_its_already_forbidden( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_11_forbidToken_forbids_token_if_it_was_allowed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_12A_allowContract_reverts_for_non_contract_addresses( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_12B_allowContract_reverts_for_non_compartible_adapter_contract( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_12_allowContract_and_forbidContract_reverts_for_zero_address( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_13_allowContract_reverts_for_creditManager_and_creditFacade_contracts( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_14_allowContract_reverts_for_creditManager_and_creditFacade_contracts( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_15_allowContract_allows_targetContract_adapter_and_emits_event( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_16_forbidContract_reverts_for_unknown_contract( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_17_forbidContract_forbids_contract_and_emits_event( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_18_setLimits_reverts_if_minAmount_gt_maxAmount_or_maxBorrowedAmount_gt_blockLimit( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_19_setLimits_sets_limits( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_23_setFees_reverts_for_incorrect_fees( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_25_setFees_updates_LT_for_underlying_and_for_all_tokens_which_bigger_than_new_LT( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_26_setFees_sets_fees_and_doesnt_change_others( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_28_upgradePriceOracle_upgrades_priceOracleCorrectly_and_doesnt_change_facade( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_29_upgradeCreditFacade_upgradeCreditConfigurator_reverts_for_incompatible_contracts( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_30_upgradeCreditFacade_upgrades_creditFacade_and_doesnt_change_priceOracle( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_31_upgradeCreditConfigurator_upgrades_creditConfigurator( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_32_setIncreaseDebtForbidden_sets_IncreaseDebtForbidden( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_33_setLimitPerBlock_reverts_if_it_lt_maxLimit_otherwise_sets_limitPerBlock( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_34_setExpirationDate_reverts_on_incorrect_newExpirationDate_otherwise_sets( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_35_addToUpgradeableContracts_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_36_removeFromUpgradeableContracts_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CC_37_setMaxEnabledTokens_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/src/types/contracts/test/credit/CreditConfigurator.t.sol/index.ts b/src/types/contracts/test/credit/CreditConfigurator.t.sol/index.ts deleted file mode 100644 index 5b2383d0..00000000 --- a/src/types/contracts/test/credit/CreditConfigurator.t.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { CreditConfiguratorTest } from "./CreditConfiguratorTest"; diff --git a/src/types/contracts/test/credit/CreditFacade.t.sol/CreditFacadeTest.ts b/src/types/contracts/test/credit/CreditFacade.t.sol/CreditFacadeTest.ts deleted file mode 100644 index d4811faa..00000000 --- a/src/types/contracts/test/credit/CreditFacade.t.sol/CreditFacadeTest.ts +++ /dev/null @@ -1,2860 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface CreditFacadeTestInterface extends utils.Interface { - functions: { - "IS_TEST()": FunctionFragment; - "cft()": FunctionFragment; - "creditConfigurator()": FunctionFragment; - "creditFacade()": FunctionFragment; - "creditManager()": FunctionFragment; - "failed()": FunctionFragment; - "setUp()": FunctionFragment; - "test_FA_01A_constructor_sets_correct_values()": FunctionFragment; - "test_FA_01_constructor_reverts_for_zero_address()": FunctionFragment; - "test_FA_02_functions_reverts_if_borrower_has_no_account()": FunctionFragment; - "test_FA_03A_openCreditAccount_correctly_wraps_ETH()": FunctionFragment; - "test_FA_03B_openCreditAccountMulticall_correctly_wraps_ETH()": FunctionFragment; - "test_FA_03C_closeCreditAccount_correctly_wraps_ETH()": FunctionFragment; - "test_FA_03D_liquidate_correctly_wraps_ETH()": FunctionFragment; - "test_FA_03E_addCollateral_correctly_wraps_ETH()": FunctionFragment; - "test_FA_03F_multicall_correctly_wraps_ETH()": FunctionFragment; - "test_FA_04A_openCreditAccount_reverts_for_using_addresses_which_is_not_allowed_by_transfer_allowance()": FunctionFragment; - "test_FA_04B_openCreditAccount_reverts_for_non_whitelisted_account()": FunctionFragment; - "test_FA_04C_openCreditAccount_burns_token_in_whitelisted_mode()": FunctionFragment; - "test_FA_05_openCreditAccount_sets_correct_values()": FunctionFragment; - "test_FA_06_openCreditAccount_reverts_for_hf_less_one(uint16)": FunctionFragment; - "test_FA_07_openCreditAccountMulticall_reverts_if_increase_debt_forbidden()": FunctionFragment; - "test_FA_08_openCreditAccountMulticall_runs_operations_in_correct_order()": FunctionFragment; - "test_FA_09_openCreditAccountMulticall_cant_open_credit_account_with_hf_less_one(uint256,uint8)": FunctionFragment; - "test_FA_10_no_free_flashloans_during_openCreditAccount()": FunctionFragment; - "test_FA_11A_openCreditAccount_reverts_if_met_borrowed_limit_per_block()": FunctionFragment; - "test_FA_11B_openCreditAccount_reverts_if_amount_less_minBorrowedAmount_or_bigger_than_maxBorrowedAmount()": FunctionFragment; - "test_FA_12_closeCreditAccount_runs_operations_in_correct_order()": FunctionFragment; - "test_FA_13_closeCreditAccount_reverts_on_internal_call_in_multicall_on_closure()": FunctionFragment; - "test_FA_14_liquidateCreditAccount_reverts_if_hf_is_greater_than_1()": FunctionFragment; - "test_FA_15_liquidateCreditAccount_executes_needed_calls_and_emits_events()": FunctionFragment; - "test_FA_16_liquidateCreditAccount_reverts_on_internal_call_in_multicall_on_closure()": FunctionFragment; - "test_FA_17_increaseDebt_executes_actions_as_expected()": FunctionFragment; - "test_FA_18A_increaseDebt_revets_if_more_than_block_limit()": FunctionFragment; - "test_FA_18B_increaseDebt_revets_if_more_than_block_limit()": FunctionFragment; - "test_FA_18C_increaseDebt_revets_isIncreaseDebtForbidden_is_enabled()": FunctionFragment; - "test_FA_19_decreaseDebt_executes_actions_as_expected()": FunctionFragment; - "test_FA_20_decreaseDebt_revets_if_less_than_minBorrowedAmount()": FunctionFragment; - "test_FA_21A_addCollateral_reverts_on_account_transfer_not_allowed()": FunctionFragment; - "test_FA_21B_addCollateral_reverts_on_account_transfer_not_allowed_multicall()": FunctionFragment; - "test_FA_21_addCollateral_executes_actions_as_expected()": FunctionFragment; - "test_FA_22_multicall_reverts_if_calldata_length_is_less_than_4_bytes()": FunctionFragment; - "test_FA_23_multicall_reverts_for_unknown_methods()": FunctionFragment; - "test_FA_24_multicall_reverts_for_creditManager_address()": FunctionFragment; - "test_FA_25_multicall_reverts_for_non_adapters()": FunctionFragment; - "test_FA_26_multicall_addCollateral_and_increase_debt_works_with_creditFacade_calls_as_expected()": FunctionFragment; - "test_FA_27_multicall_addCollateral_and_decreaseDebt_works_with_creditFacade_calls_as_expected()": FunctionFragment; - "test_FA_28_multicall_reverts_for_decrease_opeartion_after_increase_one()": FunctionFragment; - "test_FA_29_multicall_works_with_adapters_calls_as_expected()": FunctionFragment; - "test_FA_30_approve_reverts_for_not_allowed_token_and_not_allower_contract()": FunctionFragment; - "test_FA_31_approve_works_as_expected()": FunctionFragment; - "test_FA_32_transferAccountOwnership_reverts_if_whitelisted_enabled()": FunctionFragment; - "test_FA_33_transferAccountOwnership_reverts_if_to_user_doesnt_provide_allowance()": FunctionFragment; - "test_FA_34_transferAccountOwnership_reverts_if_hf_less_1()": FunctionFragment; - "test_FA_35_transferAccountOwnership_transfers_account_if_its_allowed()": FunctionFragment; - "test_FA_36_checkAndUpdateBorrowedBlockLimit_doesnt_change_block_limit_if_set_to_max()": FunctionFragment; - "test_FA_37_checkAndUpdateBorrowedBlockLimit_updates_block_limit_properly()": FunctionFragment; - "test_FA_38_transferAccountOwnership_with_allowed_to_transfers_account()": FunctionFragment; - "test_FA_39_enable_token_balance()": FunctionFragment; - "test_FA_40_isTokenAllowed_works_as_expected()": FunctionFragment; - "test_FA_41_calcTotalValue_computes_correctly()": FunctionFragment; - "test_FA_42_calcCreditAccountHealthFactor_computes_correctly()": FunctionFragment; - "test_FA_43_hasOpenedCreditAccount_returns_correct_values()": FunctionFragment; - "test_FA_44_config_functions_revert_if_called_non_configurator()": FunctionFragment; - "test_FA_45_revertIfBalanceLessThan_works_correctly()": FunctionFragment; - "test_FA_46_openCreditAccount_reverts_on_expired_CreditFacade()": FunctionFragment; - "test_FA_47_liquidateExpiredCreditAccount_reverts_before_expiration()": FunctionFragment; - "test_FA_48_liquidateExpiredCreditAccount_reverts_on_CreditFacade_with_no_expiration()": FunctionFragment; - "test_FA_49_liquidateExpiredCreditAccount_works_correctly_after_expiration()": FunctionFragment; - "test_FA_50_upgradeableContracts_setters_and_getters_work_correctly()": FunctionFragment; - "test_FA_51_approve_reverts_for_upgradeable_contract()": FunctionFragment; - "test_FA_52_enableToken_works_as_expected()": FunctionFragment; - "test_FA_53_enableToken_works_as_expected_multicall()": FunctionFragment; - "test_FA_54_disableToken_works_as_expected_multicall()": FunctionFragment; - "underlying()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "IS_TEST" - | "cft" - | "creditConfigurator" - | "creditFacade" - | "creditManager" - | "failed" - | "setUp" - | "test_FA_01A_constructor_sets_correct_values" - | "test_FA_01_constructor_reverts_for_zero_address" - | "test_FA_02_functions_reverts_if_borrower_has_no_account" - | "test_FA_03A_openCreditAccount_correctly_wraps_ETH" - | "test_FA_03B_openCreditAccountMulticall_correctly_wraps_ETH" - | "test_FA_03C_closeCreditAccount_correctly_wraps_ETH" - | "test_FA_03D_liquidate_correctly_wraps_ETH" - | "test_FA_03E_addCollateral_correctly_wraps_ETH" - | "test_FA_03F_multicall_correctly_wraps_ETH" - | "test_FA_04A_openCreditAccount_reverts_for_using_addresses_which_is_not_allowed_by_transfer_allowance" - | "test_FA_04B_openCreditAccount_reverts_for_non_whitelisted_account" - | "test_FA_04C_openCreditAccount_burns_token_in_whitelisted_mode" - | "test_FA_05_openCreditAccount_sets_correct_values" - | "test_FA_06_openCreditAccount_reverts_for_hf_less_one" - | "test_FA_07_openCreditAccountMulticall_reverts_if_increase_debt_forbidden" - | "test_FA_08_openCreditAccountMulticall_runs_operations_in_correct_order" - | "test_FA_09_openCreditAccountMulticall_cant_open_credit_account_with_hf_less_one" - | "test_FA_10_no_free_flashloans_during_openCreditAccount" - | "test_FA_11A_openCreditAccount_reverts_if_met_borrowed_limit_per_block" - | "test_FA_11B_openCreditAccount_reverts_if_amount_less_minBorrowedAmount_or_bigger_than_maxBorrowedAmount" - | "test_FA_12_closeCreditAccount_runs_operations_in_correct_order" - | "test_FA_13_closeCreditAccount_reverts_on_internal_call_in_multicall_on_closure" - | "test_FA_14_liquidateCreditAccount_reverts_if_hf_is_greater_than_1" - | "test_FA_15_liquidateCreditAccount_executes_needed_calls_and_emits_events" - | "test_FA_16_liquidateCreditAccount_reverts_on_internal_call_in_multicall_on_closure" - | "test_FA_17_increaseDebt_executes_actions_as_expected" - | "test_FA_18A_increaseDebt_revets_if_more_than_block_limit" - | "test_FA_18B_increaseDebt_revets_if_more_than_block_limit" - | "test_FA_18C_increaseDebt_revets_isIncreaseDebtForbidden_is_enabled" - | "test_FA_19_decreaseDebt_executes_actions_as_expected" - | "test_FA_20_decreaseDebt_revets_if_less_than_minBorrowedAmount" - | "test_FA_21A_addCollateral_reverts_on_account_transfer_not_allowed" - | "test_FA_21B_addCollateral_reverts_on_account_transfer_not_allowed_multicall" - | "test_FA_21_addCollateral_executes_actions_as_expected" - | "test_FA_22_multicall_reverts_if_calldata_length_is_less_than_4_bytes" - | "test_FA_23_multicall_reverts_for_unknown_methods" - | "test_FA_24_multicall_reverts_for_creditManager_address" - | "test_FA_25_multicall_reverts_for_non_adapters" - | "test_FA_26_multicall_addCollateral_and_increase_debt_works_with_creditFacade_calls_as_expected" - | "test_FA_27_multicall_addCollateral_and_decreaseDebt_works_with_creditFacade_calls_as_expected" - | "test_FA_28_multicall_reverts_for_decrease_opeartion_after_increase_one" - | "test_FA_29_multicall_works_with_adapters_calls_as_expected" - | "test_FA_30_approve_reverts_for_not_allowed_token_and_not_allower_contract" - | "test_FA_31_approve_works_as_expected" - | "test_FA_32_transferAccountOwnership_reverts_if_whitelisted_enabled" - | "test_FA_33_transferAccountOwnership_reverts_if_to_user_doesnt_provide_allowance" - | "test_FA_34_transferAccountOwnership_reverts_if_hf_less_1" - | "test_FA_35_transferAccountOwnership_transfers_account_if_its_allowed" - | "test_FA_36_checkAndUpdateBorrowedBlockLimit_doesnt_change_block_limit_if_set_to_max" - | "test_FA_37_checkAndUpdateBorrowedBlockLimit_updates_block_limit_properly" - | "test_FA_38_transferAccountOwnership_with_allowed_to_transfers_account" - | "test_FA_39_enable_token_balance" - | "test_FA_40_isTokenAllowed_works_as_expected" - | "test_FA_41_calcTotalValue_computes_correctly" - | "test_FA_42_calcCreditAccountHealthFactor_computes_correctly" - | "test_FA_43_hasOpenedCreditAccount_returns_correct_values" - | "test_FA_44_config_functions_revert_if_called_non_configurator" - | "test_FA_45_revertIfBalanceLessThan_works_correctly" - | "test_FA_46_openCreditAccount_reverts_on_expired_CreditFacade" - | "test_FA_47_liquidateExpiredCreditAccount_reverts_before_expiration" - | "test_FA_48_liquidateExpiredCreditAccount_reverts_on_CreditFacade_with_no_expiration" - | "test_FA_49_liquidateExpiredCreditAccount_works_correctly_after_expiration" - | "test_FA_50_upgradeableContracts_setters_and_getters_work_correctly" - | "test_FA_51_approve_reverts_for_upgradeable_contract" - | "test_FA_52_enableToken_works_as_expected" - | "test_FA_53_enableToken_works_as_expected_multicall" - | "test_FA_54_disableToken_works_as_expected_multicall" - | "underlying" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "IS_TEST", values?: undefined): string; - encodeFunctionData(functionFragment: "cft", values?: undefined): string; - encodeFunctionData( - functionFragment: "creditConfigurator", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditFacade", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditManager", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "failed", values?: undefined): string; - encodeFunctionData(functionFragment: "setUp", values?: undefined): string; - encodeFunctionData( - functionFragment: "test_FA_01A_constructor_sets_correct_values", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_FA_01_constructor_reverts_for_zero_address", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_FA_02_functions_reverts_if_borrower_has_no_account", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_FA_03A_openCreditAccount_correctly_wraps_ETH", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_FA_03B_openCreditAccountMulticall_correctly_wraps_ETH", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_FA_03C_closeCreditAccount_correctly_wraps_ETH", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_FA_03D_liquidate_correctly_wraps_ETH", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_FA_03E_addCollateral_correctly_wraps_ETH", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_FA_03F_multicall_correctly_wraps_ETH", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_FA_04A_openCreditAccount_reverts_for_using_addresses_which_is_not_allowed_by_transfer_allowance", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_FA_04B_openCreditAccount_reverts_for_non_whitelisted_account", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_FA_04C_openCreditAccount_burns_token_in_whitelisted_mode", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_FA_05_openCreditAccount_sets_correct_values", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_FA_06_openCreditAccount_reverts_for_hf_less_one", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "test_FA_07_openCreditAccountMulticall_reverts_if_increase_debt_forbidden", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_FA_08_openCreditAccountMulticall_runs_operations_in_correct_order", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_FA_09_openCreditAccountMulticall_cant_open_credit_account_with_hf_less_one", - values: [BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "test_FA_10_no_free_flashloans_during_openCreditAccount", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_FA_11A_openCreditAccount_reverts_if_met_borrowed_limit_per_block", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_FA_11B_openCreditAccount_reverts_if_amount_less_minBorrowedAmount_or_bigger_than_maxBorrowedAmount", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_FA_12_closeCreditAccount_runs_operations_in_correct_order", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_FA_13_closeCreditAccount_reverts_on_internal_call_in_multicall_on_closure", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_FA_14_liquidateCreditAccount_reverts_if_hf_is_greater_than_1", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_FA_15_liquidateCreditAccount_executes_needed_calls_and_emits_events", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_FA_16_liquidateCreditAccount_reverts_on_internal_call_in_multicall_on_closure", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_FA_17_increaseDebt_executes_actions_as_expected", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_FA_18A_increaseDebt_revets_if_more_than_block_limit", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_FA_18B_increaseDebt_revets_if_more_than_block_limit", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_FA_18C_increaseDebt_revets_isIncreaseDebtForbidden_is_enabled", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_FA_19_decreaseDebt_executes_actions_as_expected", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_FA_20_decreaseDebt_revets_if_less_than_minBorrowedAmount", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_FA_21A_addCollateral_reverts_on_account_transfer_not_allowed", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_FA_21B_addCollateral_reverts_on_account_transfer_not_allowed_multicall", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_FA_21_addCollateral_executes_actions_as_expected", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_FA_22_multicall_reverts_if_calldata_length_is_less_than_4_bytes", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_FA_23_multicall_reverts_for_unknown_methods", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_FA_24_multicall_reverts_for_creditManager_address", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_FA_25_multicall_reverts_for_non_adapters", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_FA_26_multicall_addCollateral_and_increase_debt_works_with_creditFacade_calls_as_expected", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_FA_27_multicall_addCollateral_and_decreaseDebt_works_with_creditFacade_calls_as_expected", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_FA_28_multicall_reverts_for_decrease_opeartion_after_increase_one", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_FA_29_multicall_works_with_adapters_calls_as_expected", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_FA_30_approve_reverts_for_not_allowed_token_and_not_allower_contract", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_FA_31_approve_works_as_expected", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_FA_32_transferAccountOwnership_reverts_if_whitelisted_enabled", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_FA_33_transferAccountOwnership_reverts_if_to_user_doesnt_provide_allowance", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_FA_34_transferAccountOwnership_reverts_if_hf_less_1", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_FA_35_transferAccountOwnership_transfers_account_if_its_allowed", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_FA_36_checkAndUpdateBorrowedBlockLimit_doesnt_change_block_limit_if_set_to_max", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_FA_37_checkAndUpdateBorrowedBlockLimit_updates_block_limit_properly", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_FA_38_transferAccountOwnership_with_allowed_to_transfers_account", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_FA_39_enable_token_balance", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_FA_40_isTokenAllowed_works_as_expected", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_FA_41_calcTotalValue_computes_correctly", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_FA_42_calcCreditAccountHealthFactor_computes_correctly", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_FA_43_hasOpenedCreditAccount_returns_correct_values", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_FA_44_config_functions_revert_if_called_non_configurator", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_FA_45_revertIfBalanceLessThan_works_correctly", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_FA_46_openCreditAccount_reverts_on_expired_CreditFacade", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_FA_47_liquidateExpiredCreditAccount_reverts_before_expiration", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_FA_48_liquidateExpiredCreditAccount_reverts_on_CreditFacade_with_no_expiration", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_FA_49_liquidateExpiredCreditAccount_works_correctly_after_expiration", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_FA_50_upgradeableContracts_setters_and_getters_work_correctly", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_FA_51_approve_reverts_for_upgradeable_contract", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_FA_52_enableToken_works_as_expected", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_FA_53_enableToken_works_as_expected_multicall", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_FA_54_disableToken_works_as_expected_multicall", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "underlying", - values?: undefined - ): string; - - decodeFunctionResult(functionFragment: "IS_TEST", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "cft", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "creditConfigurator", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditFacade", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditManager", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "failed", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "setUp", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "test_FA_01A_constructor_sets_correct_values", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_FA_01_constructor_reverts_for_zero_address", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_FA_02_functions_reverts_if_borrower_has_no_account", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_FA_03A_openCreditAccount_correctly_wraps_ETH", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_FA_03B_openCreditAccountMulticall_correctly_wraps_ETH", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_FA_03C_closeCreditAccount_correctly_wraps_ETH", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_FA_03D_liquidate_correctly_wraps_ETH", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_FA_03E_addCollateral_correctly_wraps_ETH", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_FA_03F_multicall_correctly_wraps_ETH", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_FA_04A_openCreditAccount_reverts_for_using_addresses_which_is_not_allowed_by_transfer_allowance", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_FA_04B_openCreditAccount_reverts_for_non_whitelisted_account", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_FA_04C_openCreditAccount_burns_token_in_whitelisted_mode", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_FA_05_openCreditAccount_sets_correct_values", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_FA_06_openCreditAccount_reverts_for_hf_less_one", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_FA_07_openCreditAccountMulticall_reverts_if_increase_debt_forbidden", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_FA_08_openCreditAccountMulticall_runs_operations_in_correct_order", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_FA_09_openCreditAccountMulticall_cant_open_credit_account_with_hf_less_one", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_FA_10_no_free_flashloans_during_openCreditAccount", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_FA_11A_openCreditAccount_reverts_if_met_borrowed_limit_per_block", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_FA_11B_openCreditAccount_reverts_if_amount_less_minBorrowedAmount_or_bigger_than_maxBorrowedAmount", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_FA_12_closeCreditAccount_runs_operations_in_correct_order", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_FA_13_closeCreditAccount_reverts_on_internal_call_in_multicall_on_closure", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_FA_14_liquidateCreditAccount_reverts_if_hf_is_greater_than_1", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_FA_15_liquidateCreditAccount_executes_needed_calls_and_emits_events", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_FA_16_liquidateCreditAccount_reverts_on_internal_call_in_multicall_on_closure", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_FA_17_increaseDebt_executes_actions_as_expected", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_FA_18A_increaseDebt_revets_if_more_than_block_limit", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_FA_18B_increaseDebt_revets_if_more_than_block_limit", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_FA_18C_increaseDebt_revets_isIncreaseDebtForbidden_is_enabled", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_FA_19_decreaseDebt_executes_actions_as_expected", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_FA_20_decreaseDebt_revets_if_less_than_minBorrowedAmount", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_FA_21A_addCollateral_reverts_on_account_transfer_not_allowed", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_FA_21B_addCollateral_reverts_on_account_transfer_not_allowed_multicall", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_FA_21_addCollateral_executes_actions_as_expected", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_FA_22_multicall_reverts_if_calldata_length_is_less_than_4_bytes", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_FA_23_multicall_reverts_for_unknown_methods", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_FA_24_multicall_reverts_for_creditManager_address", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_FA_25_multicall_reverts_for_non_adapters", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_FA_26_multicall_addCollateral_and_increase_debt_works_with_creditFacade_calls_as_expected", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_FA_27_multicall_addCollateral_and_decreaseDebt_works_with_creditFacade_calls_as_expected", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_FA_28_multicall_reverts_for_decrease_opeartion_after_increase_one", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_FA_29_multicall_works_with_adapters_calls_as_expected", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_FA_30_approve_reverts_for_not_allowed_token_and_not_allower_contract", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_FA_31_approve_works_as_expected", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_FA_32_transferAccountOwnership_reverts_if_whitelisted_enabled", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_FA_33_transferAccountOwnership_reverts_if_to_user_doesnt_provide_allowance", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_FA_34_transferAccountOwnership_reverts_if_hf_less_1", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_FA_35_transferAccountOwnership_transfers_account_if_its_allowed", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_FA_36_checkAndUpdateBorrowedBlockLimit_doesnt_change_block_limit_if_set_to_max", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_FA_37_checkAndUpdateBorrowedBlockLimit_updates_block_limit_properly", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_FA_38_transferAccountOwnership_with_allowed_to_transfers_account", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_FA_39_enable_token_balance", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_FA_40_isTokenAllowed_works_as_expected", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_FA_41_calcTotalValue_computes_correctly", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_FA_42_calcCreditAccountHealthFactor_computes_correctly", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_FA_43_hasOpenedCreditAccount_returns_correct_values", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_FA_44_config_functions_revert_if_called_non_configurator", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_FA_45_revertIfBalanceLessThan_works_correctly", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_FA_46_openCreditAccount_reverts_on_expired_CreditFacade", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_FA_47_liquidateExpiredCreditAccount_reverts_before_expiration", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_FA_48_liquidateExpiredCreditAccount_reverts_on_CreditFacade_with_no_expiration", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_FA_49_liquidateExpiredCreditAccount_works_correctly_after_expiration", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_FA_50_upgradeableContracts_setters_and_getters_work_correctly", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_FA_51_approve_reverts_for_upgradeable_contract", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_FA_52_enableToken_works_as_expected", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_FA_53_enableToken_works_as_expected_multicall", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_FA_54_disableToken_works_as_expected_multicall", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "underlying", data: BytesLike): Result; - - events: { - "AddCollateral(address,address,uint256)": EventFragment; - "CloseCreditAccount(address,address)": EventFragment; - "DecreaseBorrowedAmount(address,uint256)": EventFragment; - "ExecuteOrder(address,address)": EventFragment; - "IncreaseBorrowedAmount(address,uint256)": EventFragment; - "LiquidateCreditAccount(address,address,address,uint256)": EventFragment; - "LiquidateExpiredCreditAccount(address,address,address,uint256)": EventFragment; - "MultiCallFinished()": EventFragment; - "MultiCallStarted(address)": EventFragment; - "NewConfigurator(address)": EventFragment; - "OpenCreditAccount(address,address,uint256,uint16)": EventFragment; - "TokenDisabled(address,address)": EventFragment; - "TokenEnabled(address,address)": EventFragment; - "TransferAccount(address,address)": EventFragment; - "TransferAccountAllowed(address,address,bool)": EventFragment; - "log(string)": EventFragment; - "log_address(address)": EventFragment; - "log_bytes(bytes)": EventFragment; - "log_bytes32(bytes32)": EventFragment; - "log_int(int256)": EventFragment; - "log_named_address(string,address)": EventFragment; - "log_named_bytes(string,bytes)": EventFragment; - "log_named_bytes32(string,bytes32)": EventFragment; - "log_named_decimal_int(string,int256,uint256)": EventFragment; - "log_named_decimal_uint(string,uint256,uint256)": EventFragment; - "log_named_int(string,int256)": EventFragment; - "log_named_string(string,string)": EventFragment; - "log_named_uint(string,uint256)": EventFragment; - "log_string(string)": EventFragment; - "log_uint(uint256)": EventFragment; - "logs(bytes)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "AddCollateral"): EventFragment; - getEvent(nameOrSignatureOrTopic: "CloseCreditAccount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "DecreaseBorrowedAmount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ExecuteOrder"): EventFragment; - getEvent(nameOrSignatureOrTopic: "IncreaseBorrowedAmount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "LiquidateCreditAccount"): EventFragment; - getEvent( - nameOrSignatureOrTopic: "LiquidateExpiredCreditAccount" - ): EventFragment; - getEvent(nameOrSignatureOrTopic: "MultiCallFinished"): EventFragment; - getEvent(nameOrSignatureOrTopic: "MultiCallStarted"): EventFragment; - getEvent(nameOrSignatureOrTopic: "NewConfigurator"): EventFragment; - getEvent(nameOrSignatureOrTopic: "OpenCreditAccount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TokenDisabled"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TokenEnabled"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TransferAccount"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TransferAccountAllowed"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "logs"): EventFragment; -} - -export interface AddCollateralEventObject { - onBehalfOf: string; - token: string; - value: BigNumber; -} -export type AddCollateralEvent = TypedEvent< - [string, string, BigNumber], - AddCollateralEventObject ->; - -export type AddCollateralEventFilter = TypedEventFilter; - -export interface CloseCreditAccountEventObject { - owner: string; - to: string; -} -export type CloseCreditAccountEvent = TypedEvent< - [string, string], - CloseCreditAccountEventObject ->; - -export type CloseCreditAccountEventFilter = - TypedEventFilter; - -export interface DecreaseBorrowedAmountEventObject { - borrower: string; - amount: BigNumber; -} -export type DecreaseBorrowedAmountEvent = TypedEvent< - [string, BigNumber], - DecreaseBorrowedAmountEventObject ->; - -export type DecreaseBorrowedAmountEventFilter = - TypedEventFilter; - -export interface ExecuteOrderEventObject { - borrower: string; - target: string; -} -export type ExecuteOrderEvent = TypedEvent< - [string, string], - ExecuteOrderEventObject ->; - -export type ExecuteOrderEventFilter = TypedEventFilter; - -export interface IncreaseBorrowedAmountEventObject { - borrower: string; - amount: BigNumber; -} -export type IncreaseBorrowedAmountEvent = TypedEvent< - [string, BigNumber], - IncreaseBorrowedAmountEventObject ->; - -export type IncreaseBorrowedAmountEventFilter = - TypedEventFilter; - -export interface LiquidateCreditAccountEventObject { - owner: string; - liquidator: string; - to: string; - remainingFunds: BigNumber; -} -export type LiquidateCreditAccountEvent = TypedEvent< - [string, string, string, BigNumber], - LiquidateCreditAccountEventObject ->; - -export type LiquidateCreditAccountEventFilter = - TypedEventFilter; - -export interface LiquidateExpiredCreditAccountEventObject { - owner: string; - liquidator: string; - to: string; - remainingFunds: BigNumber; -} -export type LiquidateExpiredCreditAccountEvent = TypedEvent< - [string, string, string, BigNumber], - LiquidateExpiredCreditAccountEventObject ->; - -export type LiquidateExpiredCreditAccountEventFilter = - TypedEventFilter; - -export interface MultiCallFinishedEventObject {} -export type MultiCallFinishedEvent = TypedEvent< - [], - MultiCallFinishedEventObject ->; - -export type MultiCallFinishedEventFilter = - TypedEventFilter; - -export interface MultiCallStartedEventObject { - borrower: string; -} -export type MultiCallStartedEvent = TypedEvent< - [string], - MultiCallStartedEventObject ->; - -export type MultiCallStartedEventFilter = - TypedEventFilter; - -export interface NewConfiguratorEventObject { - newConfigurator: string; -} -export type NewConfiguratorEvent = TypedEvent< - [string], - NewConfiguratorEventObject ->; - -export type NewConfiguratorEventFilter = TypedEventFilter; - -export interface OpenCreditAccountEventObject { - onBehalfOf: string; - creditAccount: string; - borrowAmount: BigNumber; - referralCode: number; -} -export type OpenCreditAccountEvent = TypedEvent< - [string, string, BigNumber, number], - OpenCreditAccountEventObject ->; - -export type OpenCreditAccountEventFilter = - TypedEventFilter; - -export interface TokenDisabledEventObject { - creditAccount: string; - token: string; -} -export type TokenDisabledEvent = TypedEvent< - [string, string], - TokenDisabledEventObject ->; - -export type TokenDisabledEventFilter = TypedEventFilter; - -export interface TokenEnabledEventObject { - creditAccount: string; - token: string; -} -export type TokenEnabledEvent = TypedEvent< - [string, string], - TokenEnabledEventObject ->; - -export type TokenEnabledEventFilter = TypedEventFilter; - -export interface TransferAccountEventObject { - oldOwner: string; - newOwner: string; -} -export type TransferAccountEvent = TypedEvent< - [string, string], - TransferAccountEventObject ->; - -export type TransferAccountEventFilter = TypedEventFilter; - -export interface TransferAccountAllowedEventObject { - from: string; - to: string; - state: boolean; -} -export type TransferAccountAllowedEvent = TypedEvent< - [string, string, boolean], - TransferAccountAllowedEventObject ->; - -export type TransferAccountAllowedEventFilter = - TypedEventFilter; - -export interface logEventObject { - arg0: string; -} -export type logEvent = TypedEvent<[string], logEventObject>; - -export type logEventFilter = TypedEventFilter; - -export interface log_addressEventObject { - arg0: string; -} -export type log_addressEvent = TypedEvent<[string], log_addressEventObject>; - -export type log_addressEventFilter = TypedEventFilter; - -export interface log_bytesEventObject { - arg0: string; -} -export type log_bytesEvent = TypedEvent<[string], log_bytesEventObject>; - -export type log_bytesEventFilter = TypedEventFilter; - -export interface log_bytes32EventObject { - arg0: string; -} -export type log_bytes32Event = TypedEvent<[string], log_bytes32EventObject>; - -export type log_bytes32EventFilter = TypedEventFilter; - -export interface log_intEventObject { - arg0: BigNumber; -} -export type log_intEvent = TypedEvent<[BigNumber], log_intEventObject>; - -export type log_intEventFilter = TypedEventFilter; - -export interface log_named_addressEventObject { - key: string; - val: string; -} -export type log_named_addressEvent = TypedEvent< - [string, string], - log_named_addressEventObject ->; - -export type log_named_addressEventFilter = - TypedEventFilter; - -export interface log_named_bytesEventObject { - key: string; - val: string; -} -export type log_named_bytesEvent = TypedEvent< - [string, string], - log_named_bytesEventObject ->; - -export type log_named_bytesEventFilter = TypedEventFilter; - -export interface log_named_bytes32EventObject { - key: string; - val: string; -} -export type log_named_bytes32Event = TypedEvent< - [string, string], - log_named_bytes32EventObject ->; - -export type log_named_bytes32EventFilter = - TypedEventFilter; - -export interface log_named_decimal_intEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_intEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_intEventObject ->; - -export type log_named_decimal_intEventFilter = - TypedEventFilter; - -export interface log_named_decimal_uintEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_uintEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_uintEventObject ->; - -export type log_named_decimal_uintEventFilter = - TypedEventFilter; - -export interface log_named_intEventObject { - key: string; - val: BigNumber; -} -export type log_named_intEvent = TypedEvent< - [string, BigNumber], - log_named_intEventObject ->; - -export type log_named_intEventFilter = TypedEventFilter; - -export interface log_named_stringEventObject { - key: string; - val: string; -} -export type log_named_stringEvent = TypedEvent< - [string, string], - log_named_stringEventObject ->; - -export type log_named_stringEventFilter = - TypedEventFilter; - -export interface log_named_uintEventObject { - key: string; - val: BigNumber; -} -export type log_named_uintEvent = TypedEvent< - [string, BigNumber], - log_named_uintEventObject ->; - -export type log_named_uintEventFilter = TypedEventFilter; - -export interface log_stringEventObject { - arg0: string; -} -export type log_stringEvent = TypedEvent<[string], log_stringEventObject>; - -export type log_stringEventFilter = TypedEventFilter; - -export interface log_uintEventObject { - arg0: BigNumber; -} -export type log_uintEvent = TypedEvent<[BigNumber], log_uintEventObject>; - -export type log_uintEventFilter = TypedEventFilter; - -export interface logsEventObject { - arg0: string; -} -export type logsEvent = TypedEvent<[string], logsEventObject>; - -export type logsEventFilter = TypedEventFilter; - -export interface CreditFacadeTest extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: CreditFacadeTestInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - IS_TEST(overrides?: CallOverrides): Promise<[boolean]>; - - cft(overrides?: CallOverrides): Promise<[string]>; - - creditConfigurator(overrides?: CallOverrides): Promise<[string]>; - - creditFacade(overrides?: CallOverrides): Promise<[string]>; - - creditManager(overrides?: CallOverrides): Promise<[string]>; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_01A_constructor_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_01_constructor_reverts_for_zero_address( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_02_functions_reverts_if_borrower_has_no_account( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_03A_openCreditAccount_correctly_wraps_ETH( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_03B_openCreditAccountMulticall_correctly_wraps_ETH( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_03C_closeCreditAccount_correctly_wraps_ETH( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_03D_liquidate_correctly_wraps_ETH( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_03E_addCollateral_correctly_wraps_ETH( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_03F_multicall_correctly_wraps_ETH( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_04A_openCreditAccount_reverts_for_using_addresses_which_is_not_allowed_by_transfer_allowance( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_04B_openCreditAccount_reverts_for_non_whitelisted_account( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_04C_openCreditAccount_burns_token_in_whitelisted_mode( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_05_openCreditAccount_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_06_openCreditAccount_reverts_for_hf_less_one( - leverageFactor: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_07_openCreditAccountMulticall_reverts_if_increase_debt_forbidden( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_08_openCreditAccountMulticall_runs_operations_in_correct_order( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_09_openCreditAccountMulticall_cant_open_credit_account_with_hf_less_one( - amount: BigNumberish, - token1: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_10_no_free_flashloans_during_openCreditAccount( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_11A_openCreditAccount_reverts_if_met_borrowed_limit_per_block( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_11B_openCreditAccount_reverts_if_amount_less_minBorrowedAmount_or_bigger_than_maxBorrowedAmount( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_12_closeCreditAccount_runs_operations_in_correct_order( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_13_closeCreditAccount_reverts_on_internal_call_in_multicall_on_closure( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_14_liquidateCreditAccount_reverts_if_hf_is_greater_than_1( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_15_liquidateCreditAccount_executes_needed_calls_and_emits_events( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_16_liquidateCreditAccount_reverts_on_internal_call_in_multicall_on_closure( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_17_increaseDebt_executes_actions_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_18A_increaseDebt_revets_if_more_than_block_limit( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_18B_increaseDebt_revets_if_more_than_block_limit( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_18C_increaseDebt_revets_isIncreaseDebtForbidden_is_enabled( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_19_decreaseDebt_executes_actions_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_20_decreaseDebt_revets_if_less_than_minBorrowedAmount( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_21A_addCollateral_reverts_on_account_transfer_not_allowed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_21B_addCollateral_reverts_on_account_transfer_not_allowed_multicall( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_21_addCollateral_executes_actions_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_22_multicall_reverts_if_calldata_length_is_less_than_4_bytes( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_23_multicall_reverts_for_unknown_methods( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_24_multicall_reverts_for_creditManager_address( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_25_multicall_reverts_for_non_adapters( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_26_multicall_addCollateral_and_increase_debt_works_with_creditFacade_calls_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_27_multicall_addCollateral_and_decreaseDebt_works_with_creditFacade_calls_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_28_multicall_reverts_for_decrease_opeartion_after_increase_one( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_29_multicall_works_with_adapters_calls_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_30_approve_reverts_for_not_allowed_token_and_not_allower_contract( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_31_approve_works_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_32_transferAccountOwnership_reverts_if_whitelisted_enabled( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_33_transferAccountOwnership_reverts_if_to_user_doesnt_provide_allowance( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_34_transferAccountOwnership_reverts_if_hf_less_1( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_35_transferAccountOwnership_transfers_account_if_its_allowed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_36_checkAndUpdateBorrowedBlockLimit_doesnt_change_block_limit_if_set_to_max( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_37_checkAndUpdateBorrowedBlockLimit_updates_block_limit_properly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_38_transferAccountOwnership_with_allowed_to_transfers_account( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_39_enable_token_balance( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_40_isTokenAllowed_works_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_41_calcTotalValue_computes_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_42_calcCreditAccountHealthFactor_computes_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_43_hasOpenedCreditAccount_returns_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_44_config_functions_revert_if_called_non_configurator( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_45_revertIfBalanceLessThan_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_46_openCreditAccount_reverts_on_expired_CreditFacade( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_47_liquidateExpiredCreditAccount_reverts_before_expiration( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_48_liquidateExpiredCreditAccount_reverts_on_CreditFacade_with_no_expiration( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_49_liquidateExpiredCreditAccount_works_correctly_after_expiration( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_50_upgradeableContracts_setters_and_getters_work_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_51_approve_reverts_for_upgradeable_contract( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_52_enableToken_works_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_53_enableToken_works_as_expected_multicall( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_54_disableToken_works_as_expected_multicall( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise<[string]>; - }; - - IS_TEST(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_01A_constructor_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_01_constructor_reverts_for_zero_address( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_02_functions_reverts_if_borrower_has_no_account( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_03A_openCreditAccount_correctly_wraps_ETH( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_03B_openCreditAccountMulticall_correctly_wraps_ETH( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_03C_closeCreditAccount_correctly_wraps_ETH( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_03D_liquidate_correctly_wraps_ETH( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_03E_addCollateral_correctly_wraps_ETH( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_03F_multicall_correctly_wraps_ETH( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_04A_openCreditAccount_reverts_for_using_addresses_which_is_not_allowed_by_transfer_allowance( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_04B_openCreditAccount_reverts_for_non_whitelisted_account( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_04C_openCreditAccount_burns_token_in_whitelisted_mode( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_05_openCreditAccount_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_06_openCreditAccount_reverts_for_hf_less_one( - leverageFactor: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_07_openCreditAccountMulticall_reverts_if_increase_debt_forbidden( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_08_openCreditAccountMulticall_runs_operations_in_correct_order( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_09_openCreditAccountMulticall_cant_open_credit_account_with_hf_less_one( - amount: BigNumberish, - token1: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_10_no_free_flashloans_during_openCreditAccount( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_11A_openCreditAccount_reverts_if_met_borrowed_limit_per_block( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_11B_openCreditAccount_reverts_if_amount_less_minBorrowedAmount_or_bigger_than_maxBorrowedAmount( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_12_closeCreditAccount_runs_operations_in_correct_order( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_13_closeCreditAccount_reverts_on_internal_call_in_multicall_on_closure( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_14_liquidateCreditAccount_reverts_if_hf_is_greater_than_1( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_15_liquidateCreditAccount_executes_needed_calls_and_emits_events( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_16_liquidateCreditAccount_reverts_on_internal_call_in_multicall_on_closure( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_17_increaseDebt_executes_actions_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_18A_increaseDebt_revets_if_more_than_block_limit( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_18B_increaseDebt_revets_if_more_than_block_limit( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_18C_increaseDebt_revets_isIncreaseDebtForbidden_is_enabled( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_19_decreaseDebt_executes_actions_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_20_decreaseDebt_revets_if_less_than_minBorrowedAmount( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_21A_addCollateral_reverts_on_account_transfer_not_allowed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_21B_addCollateral_reverts_on_account_transfer_not_allowed_multicall( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_21_addCollateral_executes_actions_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_22_multicall_reverts_if_calldata_length_is_less_than_4_bytes( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_23_multicall_reverts_for_unknown_methods( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_24_multicall_reverts_for_creditManager_address( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_25_multicall_reverts_for_non_adapters( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_26_multicall_addCollateral_and_increase_debt_works_with_creditFacade_calls_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_27_multicall_addCollateral_and_decreaseDebt_works_with_creditFacade_calls_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_28_multicall_reverts_for_decrease_opeartion_after_increase_one( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_29_multicall_works_with_adapters_calls_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_30_approve_reverts_for_not_allowed_token_and_not_allower_contract( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_31_approve_works_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_32_transferAccountOwnership_reverts_if_whitelisted_enabled( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_33_transferAccountOwnership_reverts_if_to_user_doesnt_provide_allowance( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_34_transferAccountOwnership_reverts_if_hf_less_1( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_35_transferAccountOwnership_transfers_account_if_its_allowed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_36_checkAndUpdateBorrowedBlockLimit_doesnt_change_block_limit_if_set_to_max( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_37_checkAndUpdateBorrowedBlockLimit_updates_block_limit_properly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_38_transferAccountOwnership_with_allowed_to_transfers_account( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_39_enable_token_balance( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_40_isTokenAllowed_works_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_41_calcTotalValue_computes_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_42_calcCreditAccountHealthFactor_computes_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_43_hasOpenedCreditAccount_returns_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_44_config_functions_revert_if_called_non_configurator( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_45_revertIfBalanceLessThan_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_46_openCreditAccount_reverts_on_expired_CreditFacade( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_47_liquidateExpiredCreditAccount_reverts_before_expiration( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_48_liquidateExpiredCreditAccount_reverts_on_CreditFacade_with_no_expiration( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_49_liquidateExpiredCreditAccount_works_correctly_after_expiration( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_50_upgradeableContracts_setters_and_getters_work_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_51_approve_reverts_for_upgradeable_contract( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_52_enableToken_works_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_53_enableToken_works_as_expected_multicall( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_54_disableToken_works_as_expected_multicall( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - - callStatic: { - IS_TEST(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - failed(overrides?: CallOverrides): Promise; - - setUp(overrides?: CallOverrides): Promise; - - test_FA_01A_constructor_sets_correct_values( - overrides?: CallOverrides - ): Promise; - - test_FA_01_constructor_reverts_for_zero_address( - overrides?: CallOverrides - ): Promise; - - test_FA_02_functions_reverts_if_borrower_has_no_account( - overrides?: CallOverrides - ): Promise; - - test_FA_03A_openCreditAccount_correctly_wraps_ETH( - overrides?: CallOverrides - ): Promise; - - test_FA_03B_openCreditAccountMulticall_correctly_wraps_ETH( - overrides?: CallOverrides - ): Promise; - - test_FA_03C_closeCreditAccount_correctly_wraps_ETH( - overrides?: CallOverrides - ): Promise; - - test_FA_03D_liquidate_correctly_wraps_ETH( - overrides?: CallOverrides - ): Promise; - - test_FA_03E_addCollateral_correctly_wraps_ETH( - overrides?: CallOverrides - ): Promise; - - test_FA_03F_multicall_correctly_wraps_ETH( - overrides?: CallOverrides - ): Promise; - - test_FA_04A_openCreditAccount_reverts_for_using_addresses_which_is_not_allowed_by_transfer_allowance( - overrides?: CallOverrides - ): Promise; - - test_FA_04B_openCreditAccount_reverts_for_non_whitelisted_account( - overrides?: CallOverrides - ): Promise; - - test_FA_04C_openCreditAccount_burns_token_in_whitelisted_mode( - overrides?: CallOverrides - ): Promise; - - test_FA_05_openCreditAccount_sets_correct_values( - overrides?: CallOverrides - ): Promise; - - test_FA_06_openCreditAccount_reverts_for_hf_less_one( - leverageFactor: BigNumberish, - overrides?: CallOverrides - ): Promise; - - test_FA_07_openCreditAccountMulticall_reverts_if_increase_debt_forbidden( - overrides?: CallOverrides - ): Promise; - - test_FA_08_openCreditAccountMulticall_runs_operations_in_correct_order( - overrides?: CallOverrides - ): Promise; - - test_FA_09_openCreditAccountMulticall_cant_open_credit_account_with_hf_less_one( - amount: BigNumberish, - token1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - test_FA_10_no_free_flashloans_during_openCreditAccount( - overrides?: CallOverrides - ): Promise; - - test_FA_11A_openCreditAccount_reverts_if_met_borrowed_limit_per_block( - overrides?: CallOverrides - ): Promise; - - test_FA_11B_openCreditAccount_reverts_if_amount_less_minBorrowedAmount_or_bigger_than_maxBorrowedAmount( - overrides?: CallOverrides - ): Promise; - - test_FA_12_closeCreditAccount_runs_operations_in_correct_order( - overrides?: CallOverrides - ): Promise; - - test_FA_13_closeCreditAccount_reverts_on_internal_call_in_multicall_on_closure( - overrides?: CallOverrides - ): Promise; - - test_FA_14_liquidateCreditAccount_reverts_if_hf_is_greater_than_1( - overrides?: CallOverrides - ): Promise; - - test_FA_15_liquidateCreditAccount_executes_needed_calls_and_emits_events( - overrides?: CallOverrides - ): Promise; - - test_FA_16_liquidateCreditAccount_reverts_on_internal_call_in_multicall_on_closure( - overrides?: CallOverrides - ): Promise; - - test_FA_17_increaseDebt_executes_actions_as_expected( - overrides?: CallOverrides - ): Promise; - - test_FA_18A_increaseDebt_revets_if_more_than_block_limit( - overrides?: CallOverrides - ): Promise; - - test_FA_18B_increaseDebt_revets_if_more_than_block_limit( - overrides?: CallOverrides - ): Promise; - - test_FA_18C_increaseDebt_revets_isIncreaseDebtForbidden_is_enabled( - overrides?: CallOverrides - ): Promise; - - test_FA_19_decreaseDebt_executes_actions_as_expected( - overrides?: CallOverrides - ): Promise; - - test_FA_20_decreaseDebt_revets_if_less_than_minBorrowedAmount( - overrides?: CallOverrides - ): Promise; - - test_FA_21A_addCollateral_reverts_on_account_transfer_not_allowed( - overrides?: CallOverrides - ): Promise; - - test_FA_21B_addCollateral_reverts_on_account_transfer_not_allowed_multicall( - overrides?: CallOverrides - ): Promise; - - test_FA_21_addCollateral_executes_actions_as_expected( - overrides?: CallOverrides - ): Promise; - - test_FA_22_multicall_reverts_if_calldata_length_is_less_than_4_bytes( - overrides?: CallOverrides - ): Promise; - - test_FA_23_multicall_reverts_for_unknown_methods( - overrides?: CallOverrides - ): Promise; - - test_FA_24_multicall_reverts_for_creditManager_address( - overrides?: CallOverrides - ): Promise; - - test_FA_25_multicall_reverts_for_non_adapters( - overrides?: CallOverrides - ): Promise; - - test_FA_26_multicall_addCollateral_and_increase_debt_works_with_creditFacade_calls_as_expected( - overrides?: CallOverrides - ): Promise; - - test_FA_27_multicall_addCollateral_and_decreaseDebt_works_with_creditFacade_calls_as_expected( - overrides?: CallOverrides - ): Promise; - - test_FA_28_multicall_reverts_for_decrease_opeartion_after_increase_one( - overrides?: CallOverrides - ): Promise; - - test_FA_29_multicall_works_with_adapters_calls_as_expected( - overrides?: CallOverrides - ): Promise; - - test_FA_30_approve_reverts_for_not_allowed_token_and_not_allower_contract( - overrides?: CallOverrides - ): Promise; - - test_FA_31_approve_works_as_expected( - overrides?: CallOverrides - ): Promise; - - test_FA_32_transferAccountOwnership_reverts_if_whitelisted_enabled( - overrides?: CallOverrides - ): Promise; - - test_FA_33_transferAccountOwnership_reverts_if_to_user_doesnt_provide_allowance( - overrides?: CallOverrides - ): Promise; - - test_FA_34_transferAccountOwnership_reverts_if_hf_less_1( - overrides?: CallOverrides - ): Promise; - - test_FA_35_transferAccountOwnership_transfers_account_if_its_allowed( - overrides?: CallOverrides - ): Promise; - - test_FA_36_checkAndUpdateBorrowedBlockLimit_doesnt_change_block_limit_if_set_to_max( - overrides?: CallOverrides - ): Promise; - - test_FA_37_checkAndUpdateBorrowedBlockLimit_updates_block_limit_properly( - overrides?: CallOverrides - ): Promise; - - test_FA_38_transferAccountOwnership_with_allowed_to_transfers_account( - overrides?: CallOverrides - ): Promise; - - test_FA_39_enable_token_balance(overrides?: CallOverrides): Promise; - - test_FA_40_isTokenAllowed_works_as_expected( - overrides?: CallOverrides - ): Promise; - - test_FA_41_calcTotalValue_computes_correctly( - overrides?: CallOverrides - ): Promise; - - test_FA_42_calcCreditAccountHealthFactor_computes_correctly( - overrides?: CallOverrides - ): Promise; - - test_FA_43_hasOpenedCreditAccount_returns_correct_values( - overrides?: CallOverrides - ): Promise; - - test_FA_44_config_functions_revert_if_called_non_configurator( - overrides?: CallOverrides - ): Promise; - - test_FA_45_revertIfBalanceLessThan_works_correctly( - overrides?: CallOverrides - ): Promise; - - test_FA_46_openCreditAccount_reverts_on_expired_CreditFacade( - overrides?: CallOverrides - ): Promise; - - test_FA_47_liquidateExpiredCreditAccount_reverts_before_expiration( - overrides?: CallOverrides - ): Promise; - - test_FA_48_liquidateExpiredCreditAccount_reverts_on_CreditFacade_with_no_expiration( - overrides?: CallOverrides - ): Promise; - - test_FA_49_liquidateExpiredCreditAccount_works_correctly_after_expiration( - overrides?: CallOverrides - ): Promise; - - test_FA_50_upgradeableContracts_setters_and_getters_work_correctly( - overrides?: CallOverrides - ): Promise; - - test_FA_51_approve_reverts_for_upgradeable_contract( - overrides?: CallOverrides - ): Promise; - - test_FA_52_enableToken_works_as_expected( - overrides?: CallOverrides - ): Promise; - - test_FA_53_enableToken_works_as_expected_multicall( - overrides?: CallOverrides - ): Promise; - - test_FA_54_disableToken_works_as_expected_multicall( - overrides?: CallOverrides - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - }; - - filters: { - "AddCollateral(address,address,uint256)"( - onBehalfOf?: string | null, - token?: string | null, - value?: null - ): AddCollateralEventFilter; - AddCollateral( - onBehalfOf?: string | null, - token?: string | null, - value?: null - ): AddCollateralEventFilter; - - "CloseCreditAccount(address,address)"( - owner?: string | null, - to?: string | null - ): CloseCreditAccountEventFilter; - CloseCreditAccount( - owner?: string | null, - to?: string | null - ): CloseCreditAccountEventFilter; - - "DecreaseBorrowedAmount(address,uint256)"( - borrower?: string | null, - amount?: null - ): DecreaseBorrowedAmountEventFilter; - DecreaseBorrowedAmount( - borrower?: string | null, - amount?: null - ): DecreaseBorrowedAmountEventFilter; - - "ExecuteOrder(address,address)"( - borrower?: string | null, - target?: string | null - ): ExecuteOrderEventFilter; - ExecuteOrder( - borrower?: string | null, - target?: string | null - ): ExecuteOrderEventFilter; - - "IncreaseBorrowedAmount(address,uint256)"( - borrower?: string | null, - amount?: null - ): IncreaseBorrowedAmountEventFilter; - IncreaseBorrowedAmount( - borrower?: string | null, - amount?: null - ): IncreaseBorrowedAmountEventFilter; - - "LiquidateCreditAccount(address,address,address,uint256)"( - owner?: string | null, - liquidator?: string | null, - to?: string | null, - remainingFunds?: null - ): LiquidateCreditAccountEventFilter; - LiquidateCreditAccount( - owner?: string | null, - liquidator?: string | null, - to?: string | null, - remainingFunds?: null - ): LiquidateCreditAccountEventFilter; - - "LiquidateExpiredCreditAccount(address,address,address,uint256)"( - owner?: string | null, - liquidator?: string | null, - to?: string | null, - remainingFunds?: null - ): LiquidateExpiredCreditAccountEventFilter; - LiquidateExpiredCreditAccount( - owner?: string | null, - liquidator?: string | null, - to?: string | null, - remainingFunds?: null - ): LiquidateExpiredCreditAccountEventFilter; - - "MultiCallFinished()"(): MultiCallFinishedEventFilter; - MultiCallFinished(): MultiCallFinishedEventFilter; - - "MultiCallStarted(address)"( - borrower?: string | null - ): MultiCallStartedEventFilter; - MultiCallStarted(borrower?: string | null): MultiCallStartedEventFilter; - - "NewConfigurator(address)"( - newConfigurator?: string | null - ): NewConfiguratorEventFilter; - NewConfigurator( - newConfigurator?: string | null - ): NewConfiguratorEventFilter; - - "OpenCreditAccount(address,address,uint256,uint16)"( - onBehalfOf?: string | null, - creditAccount?: string | null, - borrowAmount?: null, - referralCode?: null - ): OpenCreditAccountEventFilter; - OpenCreditAccount( - onBehalfOf?: string | null, - creditAccount?: string | null, - borrowAmount?: null, - referralCode?: null - ): OpenCreditAccountEventFilter; - - "TokenDisabled(address,address)"( - creditAccount?: null, - token?: null - ): TokenDisabledEventFilter; - TokenDisabled(creditAccount?: null, token?: null): TokenDisabledEventFilter; - - "TokenEnabled(address,address)"( - creditAccount?: null, - token?: null - ): TokenEnabledEventFilter; - TokenEnabled(creditAccount?: null, token?: null): TokenEnabledEventFilter; - - "TransferAccount(address,address)"( - oldOwner?: string | null, - newOwner?: string | null - ): TransferAccountEventFilter; - TransferAccount( - oldOwner?: string | null, - newOwner?: string | null - ): TransferAccountEventFilter; - - "TransferAccountAllowed(address,address,bool)"( - from?: string | null, - to?: string | null, - state?: null - ): TransferAccountAllowedEventFilter; - TransferAccountAllowed( - from?: string | null, - to?: string | null, - state?: null - ): TransferAccountAllowedEventFilter; - - "log(string)"(arg0?: null): logEventFilter; - log(arg0?: null): logEventFilter; - - "log_address(address)"(arg0?: null): log_addressEventFilter; - log_address(arg0?: null): log_addressEventFilter; - - "log_bytes(bytes)"(arg0?: null): log_bytesEventFilter; - log_bytes(arg0?: null): log_bytesEventFilter; - - "log_bytes32(bytes32)"(arg0?: null): log_bytes32EventFilter; - log_bytes32(arg0?: null): log_bytes32EventFilter; - - "log_int(int256)"(arg0?: null): log_intEventFilter; - log_int(arg0?: null): log_intEventFilter; - - "log_named_address(string,address)"( - key?: null, - val?: null - ): log_named_addressEventFilter; - log_named_address(key?: null, val?: null): log_named_addressEventFilter; - - "log_named_bytes(string,bytes)"( - key?: null, - val?: null - ): log_named_bytesEventFilter; - log_named_bytes(key?: null, val?: null): log_named_bytesEventFilter; - - "log_named_bytes32(string,bytes32)"( - key?: null, - val?: null - ): log_named_bytes32EventFilter; - log_named_bytes32(key?: null, val?: null): log_named_bytes32EventFilter; - - "log_named_decimal_int(string,int256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - log_named_decimal_int( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - - "log_named_decimal_uint(string,uint256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - log_named_decimal_uint( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - - "log_named_int(string,int256)"( - key?: null, - val?: null - ): log_named_intEventFilter; - log_named_int(key?: null, val?: null): log_named_intEventFilter; - - "log_named_string(string,string)"( - key?: null, - val?: null - ): log_named_stringEventFilter; - log_named_string(key?: null, val?: null): log_named_stringEventFilter; - - "log_named_uint(string,uint256)"( - key?: null, - val?: null - ): log_named_uintEventFilter; - log_named_uint(key?: null, val?: null): log_named_uintEventFilter; - - "log_string(string)"(arg0?: null): log_stringEventFilter; - log_string(arg0?: null): log_stringEventFilter; - - "log_uint(uint256)"(arg0?: null): log_uintEventFilter; - log_uint(arg0?: null): log_uintEventFilter; - - "logs(bytes)"(arg0?: null): logsEventFilter; - logs(arg0?: null): logsEventFilter; - }; - - estimateGas: { - IS_TEST(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_01A_constructor_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_01_constructor_reverts_for_zero_address( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_02_functions_reverts_if_borrower_has_no_account( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_03A_openCreditAccount_correctly_wraps_ETH( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_03B_openCreditAccountMulticall_correctly_wraps_ETH( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_03C_closeCreditAccount_correctly_wraps_ETH( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_03D_liquidate_correctly_wraps_ETH( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_03E_addCollateral_correctly_wraps_ETH( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_03F_multicall_correctly_wraps_ETH( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_04A_openCreditAccount_reverts_for_using_addresses_which_is_not_allowed_by_transfer_allowance( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_04B_openCreditAccount_reverts_for_non_whitelisted_account( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_04C_openCreditAccount_burns_token_in_whitelisted_mode( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_05_openCreditAccount_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_06_openCreditAccount_reverts_for_hf_less_one( - leverageFactor: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_07_openCreditAccountMulticall_reverts_if_increase_debt_forbidden( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_08_openCreditAccountMulticall_runs_operations_in_correct_order( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_09_openCreditAccountMulticall_cant_open_credit_account_with_hf_less_one( - amount: BigNumberish, - token1: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_10_no_free_flashloans_during_openCreditAccount( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_11A_openCreditAccount_reverts_if_met_borrowed_limit_per_block( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_11B_openCreditAccount_reverts_if_amount_less_minBorrowedAmount_or_bigger_than_maxBorrowedAmount( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_12_closeCreditAccount_runs_operations_in_correct_order( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_13_closeCreditAccount_reverts_on_internal_call_in_multicall_on_closure( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_14_liquidateCreditAccount_reverts_if_hf_is_greater_than_1( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_15_liquidateCreditAccount_executes_needed_calls_and_emits_events( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_16_liquidateCreditAccount_reverts_on_internal_call_in_multicall_on_closure( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_17_increaseDebt_executes_actions_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_18A_increaseDebt_revets_if_more_than_block_limit( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_18B_increaseDebt_revets_if_more_than_block_limit( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_18C_increaseDebt_revets_isIncreaseDebtForbidden_is_enabled( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_19_decreaseDebt_executes_actions_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_20_decreaseDebt_revets_if_less_than_minBorrowedAmount( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_21A_addCollateral_reverts_on_account_transfer_not_allowed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_21B_addCollateral_reverts_on_account_transfer_not_allowed_multicall( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_21_addCollateral_executes_actions_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_22_multicall_reverts_if_calldata_length_is_less_than_4_bytes( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_23_multicall_reverts_for_unknown_methods( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_24_multicall_reverts_for_creditManager_address( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_25_multicall_reverts_for_non_adapters( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_26_multicall_addCollateral_and_increase_debt_works_with_creditFacade_calls_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_27_multicall_addCollateral_and_decreaseDebt_works_with_creditFacade_calls_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_28_multicall_reverts_for_decrease_opeartion_after_increase_one( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_29_multicall_works_with_adapters_calls_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_30_approve_reverts_for_not_allowed_token_and_not_allower_contract( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_31_approve_works_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_32_transferAccountOwnership_reverts_if_whitelisted_enabled( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_33_transferAccountOwnership_reverts_if_to_user_doesnt_provide_allowance( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_34_transferAccountOwnership_reverts_if_hf_less_1( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_35_transferAccountOwnership_transfers_account_if_its_allowed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_36_checkAndUpdateBorrowedBlockLimit_doesnt_change_block_limit_if_set_to_max( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_37_checkAndUpdateBorrowedBlockLimit_updates_block_limit_properly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_38_transferAccountOwnership_with_allowed_to_transfers_account( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_39_enable_token_balance( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_40_isTokenAllowed_works_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_41_calcTotalValue_computes_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_42_calcCreditAccountHealthFactor_computes_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_43_hasOpenedCreditAccount_returns_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_44_config_functions_revert_if_called_non_configurator( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_45_revertIfBalanceLessThan_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_46_openCreditAccount_reverts_on_expired_CreditFacade( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_47_liquidateExpiredCreditAccount_reverts_before_expiration( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_48_liquidateExpiredCreditAccount_reverts_on_CreditFacade_with_no_expiration( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_49_liquidateExpiredCreditAccount_works_correctly_after_expiration( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_50_upgradeableContracts_setters_and_getters_work_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_51_approve_reverts_for_upgradeable_contract( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_52_enableToken_works_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_53_enableToken_works_as_expected_multicall( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_54_disableToken_works_as_expected_multicall( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - IS_TEST(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator( - overrides?: CallOverrides - ): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_01A_constructor_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_01_constructor_reverts_for_zero_address( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_02_functions_reverts_if_borrower_has_no_account( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_03A_openCreditAccount_correctly_wraps_ETH( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_03B_openCreditAccountMulticall_correctly_wraps_ETH( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_03C_closeCreditAccount_correctly_wraps_ETH( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_03D_liquidate_correctly_wraps_ETH( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_03E_addCollateral_correctly_wraps_ETH( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_03F_multicall_correctly_wraps_ETH( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_04A_openCreditAccount_reverts_for_using_addresses_which_is_not_allowed_by_transfer_allowance( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_04B_openCreditAccount_reverts_for_non_whitelisted_account( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_04C_openCreditAccount_burns_token_in_whitelisted_mode( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_05_openCreditAccount_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_06_openCreditAccount_reverts_for_hf_less_one( - leverageFactor: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_07_openCreditAccountMulticall_reverts_if_increase_debt_forbidden( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_08_openCreditAccountMulticall_runs_operations_in_correct_order( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_09_openCreditAccountMulticall_cant_open_credit_account_with_hf_less_one( - amount: BigNumberish, - token1: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_10_no_free_flashloans_during_openCreditAccount( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_11A_openCreditAccount_reverts_if_met_borrowed_limit_per_block( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_11B_openCreditAccount_reverts_if_amount_less_minBorrowedAmount_or_bigger_than_maxBorrowedAmount( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_12_closeCreditAccount_runs_operations_in_correct_order( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_13_closeCreditAccount_reverts_on_internal_call_in_multicall_on_closure( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_14_liquidateCreditAccount_reverts_if_hf_is_greater_than_1( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_15_liquidateCreditAccount_executes_needed_calls_and_emits_events( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_16_liquidateCreditAccount_reverts_on_internal_call_in_multicall_on_closure( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_17_increaseDebt_executes_actions_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_18A_increaseDebt_revets_if_more_than_block_limit( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_18B_increaseDebt_revets_if_more_than_block_limit( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_18C_increaseDebt_revets_isIncreaseDebtForbidden_is_enabled( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_19_decreaseDebt_executes_actions_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_20_decreaseDebt_revets_if_less_than_minBorrowedAmount( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_21A_addCollateral_reverts_on_account_transfer_not_allowed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_21B_addCollateral_reverts_on_account_transfer_not_allowed_multicall( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_21_addCollateral_executes_actions_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_22_multicall_reverts_if_calldata_length_is_less_than_4_bytes( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_23_multicall_reverts_for_unknown_methods( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_24_multicall_reverts_for_creditManager_address( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_25_multicall_reverts_for_non_adapters( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_26_multicall_addCollateral_and_increase_debt_works_with_creditFacade_calls_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_27_multicall_addCollateral_and_decreaseDebt_works_with_creditFacade_calls_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_28_multicall_reverts_for_decrease_opeartion_after_increase_one( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_29_multicall_works_with_adapters_calls_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_30_approve_reverts_for_not_allowed_token_and_not_allower_contract( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_31_approve_works_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_32_transferAccountOwnership_reverts_if_whitelisted_enabled( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_33_transferAccountOwnership_reverts_if_to_user_doesnt_provide_allowance( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_34_transferAccountOwnership_reverts_if_hf_less_1( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_35_transferAccountOwnership_transfers_account_if_its_allowed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_36_checkAndUpdateBorrowedBlockLimit_doesnt_change_block_limit_if_set_to_max( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_37_checkAndUpdateBorrowedBlockLimit_updates_block_limit_properly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_38_transferAccountOwnership_with_allowed_to_transfers_account( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_39_enable_token_balance( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_40_isTokenAllowed_works_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_41_calcTotalValue_computes_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_42_calcCreditAccountHealthFactor_computes_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_43_hasOpenedCreditAccount_returns_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_44_config_functions_revert_if_called_non_configurator( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_45_revertIfBalanceLessThan_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_46_openCreditAccount_reverts_on_expired_CreditFacade( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_47_liquidateExpiredCreditAccount_reverts_before_expiration( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_48_liquidateExpiredCreditAccount_reverts_on_CreditFacade_with_no_expiration( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_49_liquidateExpiredCreditAccount_works_correctly_after_expiration( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_50_upgradeableContracts_setters_and_getters_work_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_51_approve_reverts_for_upgradeable_contract( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_52_enableToken_works_as_expected( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_53_enableToken_works_as_expected_multicall( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_FA_54_disableToken_works_as_expected_multicall( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/test/credit/CreditFacade.t.sol/index.ts b/src/types/contracts/test/credit/CreditFacade.t.sol/index.ts deleted file mode 100644 index 76ff0b62..00000000 --- a/src/types/contracts/test/credit/CreditFacade.t.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { CreditFacadeTest } from "./CreditFacadeTest"; diff --git a/src/types/contracts/test/credit/CreditManager.t.sol/CreditManagerTest.ts b/src/types/contracts/test/credit/CreditManager.t.sol/CreditManagerTest.ts deleted file mode 100644 index 32468440..00000000 --- a/src/types/contracts/test/credit/CreditManager.t.sol/CreditManagerTest.ts +++ /dev/null @@ -1,2480 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface CreditManagerTestInterface extends utils.Interface { - functions: { - "IS_TEST()": FunctionFragment; - "failed()": FunctionFragment; - "setUp()": FunctionFragment; - "test_CM_01_constructor_sets_correct_values()": FunctionFragment; - "test_CM_02_credit_account_management_functions_revert_if_not_called_by_creditFacadeCall()": FunctionFragment; - "test_CM_03_credit_account_execution_functions_revert_if_not_called_by_creditFacade()": FunctionFragment; - "test_CM_04_credit_account_configurator_functions_revert_if_not_called_by_creditFacade()": FunctionFragment; - "test_CM_05_pause_pauses_management_functions()": FunctionFragment; - "test_CM_06_openCreditAccount_sets_correct_values_and_transfers_tokens_from_pool()": FunctionFragment; - "test_CM_07_openCreditAccount_reverts_if_zero_address_or_address_exists()": FunctionFragment; - "test_CM_08_openCreditAccount_sets_correct_values_and_transfers_tokens_from_pool()": FunctionFragment; - "test_CM_09_close_credit_account_returns_credit_account_and_remove_borrower_from_map()": FunctionFragment; - "test_CM_10_close_credit_account_returns_underlying_token_if_not_liquidated()": FunctionFragment; - "test_CM_11_close_credit_account_charges_caller_if_underlying_token_not_enough()": FunctionFragment; - "test_CM_12_close_credit_account_charges_caller_if_underlying_token_not_enough()": FunctionFragment; - "test_CM_13_close_credit_account_charges_caller_if_underlying_token_not_enough()": FunctionFragment; - "test_CM_14_close_credit_account_with_nonzero_skipTokenMask_sends_correct_tokens()": FunctionFragment; - "test_CM_16_close_weth_credit_account_sends_eth_to_borrower()": FunctionFragment; - "test_CM_17_close_dai_credit_account_sends_eth_to_borrower()": FunctionFragment; - "test_CM_18_close_credit_account_sends_eth_to_liquidator_and_weth_to_borrower()": FunctionFragment; - "test_CM_19_close_dai_credit_account_sends_eth_to_liquidator()": FunctionFragment; - "test_CM_20_manageDebt_correctly_increases_debt(uint128)": FunctionFragment; - "test_CM_21_manageDebt_correctly_decreases_debt(uint128)": FunctionFragment; - "test_CM_22_add_collateral_transfers_money_and_enables_token()": FunctionFragment; - "test_CM_23_transferAccountOwnership_reverts_if_to_equals_zero_or_account_exists()": FunctionFragment; - "test_CM_24_transferAccountOwnership_changes_creditAccounts_map_properly()": FunctionFragment; - "test_CM_25A_approveCreditAccount_reverts_if_the_token_is_not_added()": FunctionFragment; - "test_CM_25_approveCreditAccount_reverts_if_adapter_isnt_connected_with_contract_or_0()": FunctionFragment; - "test_CM_26_approveCreditAccount_approves_with_desired_allowance()": FunctionFragment; - "test_CM_27A_approveCreditAccount_works_for_ERC20_with_approve_restrictions()": FunctionFragment; - "test_CM_27B_approveCreditAccount_works_for_ERC20_with_approve_restrictions()": FunctionFragment; - "test_CM_28_executeOrder_reverts_if_adapter_is_not_connected_with_target_contract()": FunctionFragment; - "test_CM_29_executeOrder_calls_credit_account_method_and_emit_event()": FunctionFragment; - "test_CM_30_checkAndEnableToken_reverts_for_token_for_token_not_in_list_and_for_forbidden_token()": FunctionFragment; - "test_CM_31_checkAndEnableToken_enables_token_for_creditAccount()": FunctionFragment; - "test_CM_32_fastCollateralCheck_enables_tokenOut_and_reverts_if_its_unkown_or_forbidden()": FunctionFragment; - "test_CM_33_fastCollateralCheck_disable_tokens_with_zero_balance(uint8)": FunctionFragment; - "test_CM_34_fastCollateralCheck_is_passed_if_collateralOut_gte_collarteralIn()": FunctionFragment; - "test_CM_35_fastCollateralCheck_reverts_if_more_enabled_tokens_than_allowed_if_collateralOut_gte_collarteralIn_wo_lt_check()": FunctionFragment; - "test_CM_36A_fastCollateralCheck_correctly_optimizes_enabled_tokens()": FunctionFragment; - "test_CM_36_fastCollateralCheck_is_passed_with_cumulative_drop_lte_feeLiquidation(uint256)": FunctionFragment; - "test_CM_37_fastCollateralCheck_reverts_if_more_enabled_tokens_than_allowed_if_collateralOut_lt_collarteralIn_wo_lt_check()": FunctionFragment; - "test_CM_38_fullCollateralCheck_skips_tokens_is_they_are_not_enabled()": FunctionFragment; - "test_CM_39_fullCollateralCheck_diables_tokens_if_they_have_zero_balance()": FunctionFragment; - "test_CM_40_fullCollateralCheck_breaks_loop_if_total_gte_borrowAmountPlusInterestRateUSD_and_pass_the_check()": FunctionFragment; - "test_CM_41A_fullCollateralCheck_correctly_disables_the_underlying_when_needed()": FunctionFragment; - "test_CM_41B_fullCollateralCheck_correctly_optimizes_enabled_tokens()": FunctionFragment; - "test_CM_41_fullCollateralCheck_reverts_if_CA_has_more_than_allowed_enabled_tokens()": FunctionFragment; - "test_CM_42_fullCollateralCheck_fuzzing_test(uint128,uint128,uint128,uint128,uint128,bool,bool,bool)": FunctionFragment; - "test_CM_43_calcClosePayments_test()": FunctionFragment; - "test_CM_44_transferAssetsTo_sends_all_tokens_except_underlying_one_to_provided_address()": FunctionFragment; - "test_CM_45_safeTokenTransfer_transfers_tokens()": FunctionFragment; - "test_CM_46__disableToken_disabale_tokens_and_do_not_enable_it_if_called_twice()": FunctionFragment; - "test_CM_47_collateralTokens_works_as_expected(address,uint16)": FunctionFragment; - "test_CM_48_getCreditAccountOrRevert_reverts_if_borrower_has_no_account()": FunctionFragment; - "test_CM_49_calcCreditAccountAccruedInterest_computes_correctly(uint128)": FunctionFragment; - "test_CM_50_getCreditAccountParameters_return_correct_values()": FunctionFragment; - "test_CM_51_setParams_sets_configuration_properly()": FunctionFragment; - "test_CM_52_addToken_reverts_if_token_exists_and_if_collateralTokens_more_256()": FunctionFragment; - "test_CM_53_addToken_adds_token_and_set_tokenMaskMap_correctly()": FunctionFragment; - "test_CM_54_setLiquidationThreshold_reverts_for_unknown_token()": FunctionFragment; - "test_CM_55_setForbidMask_sets_forbidMask_correctly()": FunctionFragment; - "test_CM_56_changeContractAllowance_updates_adapterToContract()": FunctionFragment; - "test_CM_57_upgradeContracts_updates_contracts_correctly()": FunctionFragment; - "test_CM_58_setConfigurator_sets_creditConfigurator_correctly_and_emits_event()": FunctionFragment; - "test_CM_59_getMaxIndex_works_properly(uint256)": FunctionFragment; - "test_CM_60_universal_adapter_can_call_adapter_restricted_functions()": FunctionFragment; - "test_CM_61_setMaxEnabledTokens_works_correctly()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "IS_TEST" - | "failed" - | "setUp" - | "test_CM_01_constructor_sets_correct_values" - | "test_CM_02_credit_account_management_functions_revert_if_not_called_by_creditFacadeCall" - | "test_CM_03_credit_account_execution_functions_revert_if_not_called_by_creditFacade" - | "test_CM_04_credit_account_configurator_functions_revert_if_not_called_by_creditFacade" - | "test_CM_05_pause_pauses_management_functions" - | "test_CM_06_openCreditAccount_sets_correct_values_and_transfers_tokens_from_pool" - | "test_CM_07_openCreditAccount_reverts_if_zero_address_or_address_exists" - | "test_CM_08_openCreditAccount_sets_correct_values_and_transfers_tokens_from_pool" - | "test_CM_09_close_credit_account_returns_credit_account_and_remove_borrower_from_map" - | "test_CM_10_close_credit_account_returns_underlying_token_if_not_liquidated" - | "test_CM_11_close_credit_account_charges_caller_if_underlying_token_not_enough" - | "test_CM_12_close_credit_account_charges_caller_if_underlying_token_not_enough" - | "test_CM_13_close_credit_account_charges_caller_if_underlying_token_not_enough" - | "test_CM_14_close_credit_account_with_nonzero_skipTokenMask_sends_correct_tokens" - | "test_CM_16_close_weth_credit_account_sends_eth_to_borrower" - | "test_CM_17_close_dai_credit_account_sends_eth_to_borrower" - | "test_CM_18_close_credit_account_sends_eth_to_liquidator_and_weth_to_borrower" - | "test_CM_19_close_dai_credit_account_sends_eth_to_liquidator" - | "test_CM_20_manageDebt_correctly_increases_debt" - | "test_CM_21_manageDebt_correctly_decreases_debt" - | "test_CM_22_add_collateral_transfers_money_and_enables_token" - | "test_CM_23_transferAccountOwnership_reverts_if_to_equals_zero_or_account_exists" - | "test_CM_24_transferAccountOwnership_changes_creditAccounts_map_properly" - | "test_CM_25A_approveCreditAccount_reverts_if_the_token_is_not_added" - | "test_CM_25_approveCreditAccount_reverts_if_adapter_isnt_connected_with_contract_or_0" - | "test_CM_26_approveCreditAccount_approves_with_desired_allowance" - | "test_CM_27A_approveCreditAccount_works_for_ERC20_with_approve_restrictions" - | "test_CM_27B_approveCreditAccount_works_for_ERC20_with_approve_restrictions" - | "test_CM_28_executeOrder_reverts_if_adapter_is_not_connected_with_target_contract" - | "test_CM_29_executeOrder_calls_credit_account_method_and_emit_event" - | "test_CM_30_checkAndEnableToken_reverts_for_token_for_token_not_in_list_and_for_forbidden_token" - | "test_CM_31_checkAndEnableToken_enables_token_for_creditAccount" - | "test_CM_32_fastCollateralCheck_enables_tokenOut_and_reverts_if_its_unkown_or_forbidden" - | "test_CM_33_fastCollateralCheck_disable_tokens_with_zero_balance" - | "test_CM_34_fastCollateralCheck_is_passed_if_collateralOut_gte_collarteralIn" - | "test_CM_35_fastCollateralCheck_reverts_if_more_enabled_tokens_than_allowed_if_collateralOut_gte_collarteralIn_wo_lt_check" - | "test_CM_36A_fastCollateralCheck_correctly_optimizes_enabled_tokens" - | "test_CM_36_fastCollateralCheck_is_passed_with_cumulative_drop_lte_feeLiquidation" - | "test_CM_37_fastCollateralCheck_reverts_if_more_enabled_tokens_than_allowed_if_collateralOut_lt_collarteralIn_wo_lt_check" - | "test_CM_38_fullCollateralCheck_skips_tokens_is_they_are_not_enabled" - | "test_CM_39_fullCollateralCheck_diables_tokens_if_they_have_zero_balance" - | "test_CM_40_fullCollateralCheck_breaks_loop_if_total_gte_borrowAmountPlusInterestRateUSD_and_pass_the_check" - | "test_CM_41A_fullCollateralCheck_correctly_disables_the_underlying_when_needed" - | "test_CM_41B_fullCollateralCheck_correctly_optimizes_enabled_tokens" - | "test_CM_41_fullCollateralCheck_reverts_if_CA_has_more_than_allowed_enabled_tokens" - | "test_CM_42_fullCollateralCheck_fuzzing_test" - | "test_CM_43_calcClosePayments_test" - | "test_CM_44_transferAssetsTo_sends_all_tokens_except_underlying_one_to_provided_address" - | "test_CM_45_safeTokenTransfer_transfers_tokens" - | "test_CM_46__disableToken_disabale_tokens_and_do_not_enable_it_if_called_twice" - | "test_CM_47_collateralTokens_works_as_expected" - | "test_CM_48_getCreditAccountOrRevert_reverts_if_borrower_has_no_account" - | "test_CM_49_calcCreditAccountAccruedInterest_computes_correctly" - | "test_CM_50_getCreditAccountParameters_return_correct_values" - | "test_CM_51_setParams_sets_configuration_properly" - | "test_CM_52_addToken_reverts_if_token_exists_and_if_collateralTokens_more_256" - | "test_CM_53_addToken_adds_token_and_set_tokenMaskMap_correctly" - | "test_CM_54_setLiquidationThreshold_reverts_for_unknown_token" - | "test_CM_55_setForbidMask_sets_forbidMask_correctly" - | "test_CM_56_changeContractAllowance_updates_adapterToContract" - | "test_CM_57_upgradeContracts_updates_contracts_correctly" - | "test_CM_58_setConfigurator_sets_creditConfigurator_correctly_and_emits_event" - | "test_CM_59_getMaxIndex_works_properly" - | "test_CM_60_universal_adapter_can_call_adapter_restricted_functions" - | "test_CM_61_setMaxEnabledTokens_works_correctly" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "IS_TEST", values?: undefined): string; - encodeFunctionData(functionFragment: "failed", values?: undefined): string; - encodeFunctionData(functionFragment: "setUp", values?: undefined): string; - encodeFunctionData( - functionFragment: "test_CM_01_constructor_sets_correct_values", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CM_02_credit_account_management_functions_revert_if_not_called_by_creditFacadeCall", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CM_03_credit_account_execution_functions_revert_if_not_called_by_creditFacade", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CM_04_credit_account_configurator_functions_revert_if_not_called_by_creditFacade", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CM_05_pause_pauses_management_functions", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CM_06_openCreditAccount_sets_correct_values_and_transfers_tokens_from_pool", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CM_07_openCreditAccount_reverts_if_zero_address_or_address_exists", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CM_08_openCreditAccount_sets_correct_values_and_transfers_tokens_from_pool", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CM_09_close_credit_account_returns_credit_account_and_remove_borrower_from_map", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CM_10_close_credit_account_returns_underlying_token_if_not_liquidated", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CM_11_close_credit_account_charges_caller_if_underlying_token_not_enough", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CM_12_close_credit_account_charges_caller_if_underlying_token_not_enough", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CM_13_close_credit_account_charges_caller_if_underlying_token_not_enough", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CM_14_close_credit_account_with_nonzero_skipTokenMask_sends_correct_tokens", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CM_16_close_weth_credit_account_sends_eth_to_borrower", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CM_17_close_dai_credit_account_sends_eth_to_borrower", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CM_18_close_credit_account_sends_eth_to_liquidator_and_weth_to_borrower", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CM_19_close_dai_credit_account_sends_eth_to_liquidator", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CM_20_manageDebt_correctly_increases_debt", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "test_CM_21_manageDebt_correctly_decreases_debt", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "test_CM_22_add_collateral_transfers_money_and_enables_token", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CM_23_transferAccountOwnership_reverts_if_to_equals_zero_or_account_exists", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CM_24_transferAccountOwnership_changes_creditAccounts_map_properly", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CM_25A_approveCreditAccount_reverts_if_the_token_is_not_added", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CM_25_approveCreditAccount_reverts_if_adapter_isnt_connected_with_contract_or_0", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CM_26_approveCreditAccount_approves_with_desired_allowance", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CM_27A_approveCreditAccount_works_for_ERC20_with_approve_restrictions", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CM_27B_approveCreditAccount_works_for_ERC20_with_approve_restrictions", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CM_28_executeOrder_reverts_if_adapter_is_not_connected_with_target_contract", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CM_29_executeOrder_calls_credit_account_method_and_emit_event", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CM_30_checkAndEnableToken_reverts_for_token_for_token_not_in_list_and_for_forbidden_token", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CM_31_checkAndEnableToken_enables_token_for_creditAccount", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CM_32_fastCollateralCheck_enables_tokenOut_and_reverts_if_its_unkown_or_forbidden", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CM_33_fastCollateralCheck_disable_tokens_with_zero_balance", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "test_CM_34_fastCollateralCheck_is_passed_if_collateralOut_gte_collarteralIn", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CM_35_fastCollateralCheck_reverts_if_more_enabled_tokens_than_allowed_if_collateralOut_gte_collarteralIn_wo_lt_check", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CM_36A_fastCollateralCheck_correctly_optimizes_enabled_tokens", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CM_36_fastCollateralCheck_is_passed_with_cumulative_drop_lte_feeLiquidation", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "test_CM_37_fastCollateralCheck_reverts_if_more_enabled_tokens_than_allowed_if_collateralOut_lt_collarteralIn_wo_lt_check", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CM_38_fullCollateralCheck_skips_tokens_is_they_are_not_enabled", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CM_39_fullCollateralCheck_diables_tokens_if_they_have_zero_balance", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CM_40_fullCollateralCheck_breaks_loop_if_total_gte_borrowAmountPlusInterestRateUSD_and_pass_the_check", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CM_41A_fullCollateralCheck_correctly_disables_the_underlying_when_needed", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CM_41B_fullCollateralCheck_correctly_optimizes_enabled_tokens", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CM_41_fullCollateralCheck_reverts_if_CA_has_more_than_allowed_enabled_tokens", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CM_42_fullCollateralCheck_fuzzing_test", - values: [ - BigNumberish, - BigNumberish, - BigNumberish, - BigNumberish, - BigNumberish, - boolean, - boolean, - boolean - ] - ): string; - encodeFunctionData( - functionFragment: "test_CM_43_calcClosePayments_test", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CM_44_transferAssetsTo_sends_all_tokens_except_underlying_one_to_provided_address", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CM_45_safeTokenTransfer_transfers_tokens", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CM_46__disableToken_disabale_tokens_and_do_not_enable_it_if_called_twice", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CM_47_collateralTokens_works_as_expected", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "test_CM_48_getCreditAccountOrRevert_reverts_if_borrower_has_no_account", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CM_49_calcCreditAccountAccruedInterest_computes_correctly", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "test_CM_50_getCreditAccountParameters_return_correct_values", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CM_51_setParams_sets_configuration_properly", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CM_52_addToken_reverts_if_token_exists_and_if_collateralTokens_more_256", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CM_53_addToken_adds_token_and_set_tokenMaskMap_correctly", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CM_54_setLiquidationThreshold_reverts_for_unknown_token", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CM_55_setForbidMask_sets_forbidMask_correctly", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CM_56_changeContractAllowance_updates_adapterToContract", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CM_57_upgradeContracts_updates_contracts_correctly", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CM_58_setConfigurator_sets_creditConfigurator_correctly_and_emits_event", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CM_59_getMaxIndex_works_properly", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "test_CM_60_universal_adapter_can_call_adapter_restricted_functions", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CM_61_setMaxEnabledTokens_works_correctly", - values?: undefined - ): string; - - decodeFunctionResult(functionFragment: "IS_TEST", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "failed", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "setUp", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "test_CM_01_constructor_sets_correct_values", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CM_02_credit_account_management_functions_revert_if_not_called_by_creditFacadeCall", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CM_03_credit_account_execution_functions_revert_if_not_called_by_creditFacade", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CM_04_credit_account_configurator_functions_revert_if_not_called_by_creditFacade", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CM_05_pause_pauses_management_functions", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CM_06_openCreditAccount_sets_correct_values_and_transfers_tokens_from_pool", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CM_07_openCreditAccount_reverts_if_zero_address_or_address_exists", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CM_08_openCreditAccount_sets_correct_values_and_transfers_tokens_from_pool", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CM_09_close_credit_account_returns_credit_account_and_remove_borrower_from_map", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CM_10_close_credit_account_returns_underlying_token_if_not_liquidated", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CM_11_close_credit_account_charges_caller_if_underlying_token_not_enough", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CM_12_close_credit_account_charges_caller_if_underlying_token_not_enough", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CM_13_close_credit_account_charges_caller_if_underlying_token_not_enough", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CM_14_close_credit_account_with_nonzero_skipTokenMask_sends_correct_tokens", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CM_16_close_weth_credit_account_sends_eth_to_borrower", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CM_17_close_dai_credit_account_sends_eth_to_borrower", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CM_18_close_credit_account_sends_eth_to_liquidator_and_weth_to_borrower", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CM_19_close_dai_credit_account_sends_eth_to_liquidator", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CM_20_manageDebt_correctly_increases_debt", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CM_21_manageDebt_correctly_decreases_debt", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CM_22_add_collateral_transfers_money_and_enables_token", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CM_23_transferAccountOwnership_reverts_if_to_equals_zero_or_account_exists", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CM_24_transferAccountOwnership_changes_creditAccounts_map_properly", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CM_25A_approveCreditAccount_reverts_if_the_token_is_not_added", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CM_25_approveCreditAccount_reverts_if_adapter_isnt_connected_with_contract_or_0", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CM_26_approveCreditAccount_approves_with_desired_allowance", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CM_27A_approveCreditAccount_works_for_ERC20_with_approve_restrictions", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CM_27B_approveCreditAccount_works_for_ERC20_with_approve_restrictions", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CM_28_executeOrder_reverts_if_adapter_is_not_connected_with_target_contract", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CM_29_executeOrder_calls_credit_account_method_and_emit_event", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CM_30_checkAndEnableToken_reverts_for_token_for_token_not_in_list_and_for_forbidden_token", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CM_31_checkAndEnableToken_enables_token_for_creditAccount", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CM_32_fastCollateralCheck_enables_tokenOut_and_reverts_if_its_unkown_or_forbidden", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CM_33_fastCollateralCheck_disable_tokens_with_zero_balance", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CM_34_fastCollateralCheck_is_passed_if_collateralOut_gte_collarteralIn", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CM_35_fastCollateralCheck_reverts_if_more_enabled_tokens_than_allowed_if_collateralOut_gte_collarteralIn_wo_lt_check", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CM_36A_fastCollateralCheck_correctly_optimizes_enabled_tokens", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CM_36_fastCollateralCheck_is_passed_with_cumulative_drop_lte_feeLiquidation", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CM_37_fastCollateralCheck_reverts_if_more_enabled_tokens_than_allowed_if_collateralOut_lt_collarteralIn_wo_lt_check", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CM_38_fullCollateralCheck_skips_tokens_is_they_are_not_enabled", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CM_39_fullCollateralCheck_diables_tokens_if_they_have_zero_balance", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CM_40_fullCollateralCheck_breaks_loop_if_total_gte_borrowAmountPlusInterestRateUSD_and_pass_the_check", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CM_41A_fullCollateralCheck_correctly_disables_the_underlying_when_needed", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CM_41B_fullCollateralCheck_correctly_optimizes_enabled_tokens", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CM_41_fullCollateralCheck_reverts_if_CA_has_more_than_allowed_enabled_tokens", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CM_42_fullCollateralCheck_fuzzing_test", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CM_43_calcClosePayments_test", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CM_44_transferAssetsTo_sends_all_tokens_except_underlying_one_to_provided_address", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CM_45_safeTokenTransfer_transfers_tokens", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CM_46__disableToken_disabale_tokens_and_do_not_enable_it_if_called_twice", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CM_47_collateralTokens_works_as_expected", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CM_48_getCreditAccountOrRevert_reverts_if_borrower_has_no_account", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CM_49_calcCreditAccountAccruedInterest_computes_correctly", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CM_50_getCreditAccountParameters_return_correct_values", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CM_51_setParams_sets_configuration_properly", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CM_52_addToken_reverts_if_token_exists_and_if_collateralTokens_more_256", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CM_53_addToken_adds_token_and_set_tokenMaskMap_correctly", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CM_54_setLiquidationThreshold_reverts_for_unknown_token", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CM_55_setForbidMask_sets_forbidMask_correctly", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CM_56_changeContractAllowance_updates_adapterToContract", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CM_57_upgradeContracts_updates_contracts_correctly", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CM_58_setConfigurator_sets_creditConfigurator_correctly_and_emits_event", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CM_59_getMaxIndex_works_properly", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CM_60_universal_adapter_can_call_adapter_restricted_functions", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CM_61_setMaxEnabledTokens_works_correctly", - data: BytesLike - ): Result; - - events: { - "ExecuteOrder(address,address)": EventFragment; - "NewConfigurator(address)": EventFragment; - "log(string)": EventFragment; - "log_address(address)": EventFragment; - "log_bytes(bytes)": EventFragment; - "log_bytes32(bytes32)": EventFragment; - "log_int(int256)": EventFragment; - "log_named_address(string,address)": EventFragment; - "log_named_bytes(string,bytes)": EventFragment; - "log_named_bytes32(string,bytes32)": EventFragment; - "log_named_decimal_int(string,int256,uint256)": EventFragment; - "log_named_decimal_uint(string,uint256,uint256)": EventFragment; - "log_named_int(string,int256)": EventFragment; - "log_named_string(string,string)": EventFragment; - "log_named_uint(string,uint256)": EventFragment; - "log_string(string)": EventFragment; - "log_uint(uint256)": EventFragment; - "logs(bytes)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "ExecuteOrder"): EventFragment; - getEvent(nameOrSignatureOrTopic: "NewConfigurator"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "logs"): EventFragment; -} - -export interface ExecuteOrderEventObject { - borrower: string; - target: string; -} -export type ExecuteOrderEvent = TypedEvent< - [string, string], - ExecuteOrderEventObject ->; - -export type ExecuteOrderEventFilter = TypedEventFilter; - -export interface NewConfiguratorEventObject { - newConfigurator: string; -} -export type NewConfiguratorEvent = TypedEvent< - [string], - NewConfiguratorEventObject ->; - -export type NewConfiguratorEventFilter = TypedEventFilter; - -export interface logEventObject { - arg0: string; -} -export type logEvent = TypedEvent<[string], logEventObject>; - -export type logEventFilter = TypedEventFilter; - -export interface log_addressEventObject { - arg0: string; -} -export type log_addressEvent = TypedEvent<[string], log_addressEventObject>; - -export type log_addressEventFilter = TypedEventFilter; - -export interface log_bytesEventObject { - arg0: string; -} -export type log_bytesEvent = TypedEvent<[string], log_bytesEventObject>; - -export type log_bytesEventFilter = TypedEventFilter; - -export interface log_bytes32EventObject { - arg0: string; -} -export type log_bytes32Event = TypedEvent<[string], log_bytes32EventObject>; - -export type log_bytes32EventFilter = TypedEventFilter; - -export interface log_intEventObject { - arg0: BigNumber; -} -export type log_intEvent = TypedEvent<[BigNumber], log_intEventObject>; - -export type log_intEventFilter = TypedEventFilter; - -export interface log_named_addressEventObject { - key: string; - val: string; -} -export type log_named_addressEvent = TypedEvent< - [string, string], - log_named_addressEventObject ->; - -export type log_named_addressEventFilter = - TypedEventFilter; - -export interface log_named_bytesEventObject { - key: string; - val: string; -} -export type log_named_bytesEvent = TypedEvent< - [string, string], - log_named_bytesEventObject ->; - -export type log_named_bytesEventFilter = TypedEventFilter; - -export interface log_named_bytes32EventObject { - key: string; - val: string; -} -export type log_named_bytes32Event = TypedEvent< - [string, string], - log_named_bytes32EventObject ->; - -export type log_named_bytes32EventFilter = - TypedEventFilter; - -export interface log_named_decimal_intEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_intEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_intEventObject ->; - -export type log_named_decimal_intEventFilter = - TypedEventFilter; - -export interface log_named_decimal_uintEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_uintEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_uintEventObject ->; - -export type log_named_decimal_uintEventFilter = - TypedEventFilter; - -export interface log_named_intEventObject { - key: string; - val: BigNumber; -} -export type log_named_intEvent = TypedEvent< - [string, BigNumber], - log_named_intEventObject ->; - -export type log_named_intEventFilter = TypedEventFilter; - -export interface log_named_stringEventObject { - key: string; - val: string; -} -export type log_named_stringEvent = TypedEvent< - [string, string], - log_named_stringEventObject ->; - -export type log_named_stringEventFilter = - TypedEventFilter; - -export interface log_named_uintEventObject { - key: string; - val: BigNumber; -} -export type log_named_uintEvent = TypedEvent< - [string, BigNumber], - log_named_uintEventObject ->; - -export type log_named_uintEventFilter = TypedEventFilter; - -export interface log_stringEventObject { - arg0: string; -} -export type log_stringEvent = TypedEvent<[string], log_stringEventObject>; - -export type log_stringEventFilter = TypedEventFilter; - -export interface log_uintEventObject { - arg0: BigNumber; -} -export type log_uintEvent = TypedEvent<[BigNumber], log_uintEventObject>; - -export type log_uintEventFilter = TypedEventFilter; - -export interface logsEventObject { - arg0: string; -} -export type logsEvent = TypedEvent<[string], logsEventObject>; - -export type logsEventFilter = TypedEventFilter; - -export interface CreditManagerTest extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: CreditManagerTestInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - IS_TEST(overrides?: CallOverrides): Promise<[boolean]>; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_01_constructor_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_02_credit_account_management_functions_revert_if_not_called_by_creditFacadeCall( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_03_credit_account_execution_functions_revert_if_not_called_by_creditFacade( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_04_credit_account_configurator_functions_revert_if_not_called_by_creditFacade( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_05_pause_pauses_management_functions( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_06_openCreditAccount_sets_correct_values_and_transfers_tokens_from_pool( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_07_openCreditAccount_reverts_if_zero_address_or_address_exists( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_08_openCreditAccount_sets_correct_values_and_transfers_tokens_from_pool( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_09_close_credit_account_returns_credit_account_and_remove_borrower_from_map( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_10_close_credit_account_returns_underlying_token_if_not_liquidated( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_11_close_credit_account_charges_caller_if_underlying_token_not_enough( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_12_close_credit_account_charges_caller_if_underlying_token_not_enough( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_13_close_credit_account_charges_caller_if_underlying_token_not_enough( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_14_close_credit_account_with_nonzero_skipTokenMask_sends_correct_tokens( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_16_close_weth_credit_account_sends_eth_to_borrower( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_17_close_dai_credit_account_sends_eth_to_borrower( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_18_close_credit_account_sends_eth_to_liquidator_and_weth_to_borrower( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_19_close_dai_credit_account_sends_eth_to_liquidator( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_20_manageDebt_correctly_increases_debt( - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_21_manageDebt_correctly_decreases_debt( - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_22_add_collateral_transfers_money_and_enables_token( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_23_transferAccountOwnership_reverts_if_to_equals_zero_or_account_exists( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_24_transferAccountOwnership_changes_creditAccounts_map_properly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_25A_approveCreditAccount_reverts_if_the_token_is_not_added( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_25_approveCreditAccount_reverts_if_adapter_isnt_connected_with_contract_or_0( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_26_approveCreditAccount_approves_with_desired_allowance( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_27A_approveCreditAccount_works_for_ERC20_with_approve_restrictions( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_27B_approveCreditAccount_works_for_ERC20_with_approve_restrictions( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_28_executeOrder_reverts_if_adapter_is_not_connected_with_target_contract( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_29_executeOrder_calls_credit_account_method_and_emit_event( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_30_checkAndEnableToken_reverts_for_token_for_token_not_in_list_and_for_forbidden_token( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_31_checkAndEnableToken_enables_token_for_creditAccount( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_32_fastCollateralCheck_enables_tokenOut_and_reverts_if_its_unkown_or_forbidden( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_33_fastCollateralCheck_disable_tokens_with_zero_balance( - balanceAfter: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_34_fastCollateralCheck_is_passed_if_collateralOut_gte_collarteralIn( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_35_fastCollateralCheck_reverts_if_more_enabled_tokens_than_allowed_if_collateralOut_gte_collarteralIn_wo_lt_check( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_36A_fastCollateralCheck_correctly_optimizes_enabled_tokens( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_36_fastCollateralCheck_is_passed_with_cumulative_drop_lte_feeLiquidation( - desiredDrop: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_37_fastCollateralCheck_reverts_if_more_enabled_tokens_than_allowed_if_collateralOut_lt_collarteralIn_wo_lt_check( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_38_fullCollateralCheck_skips_tokens_is_they_are_not_enabled( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_39_fullCollateralCheck_diables_tokens_if_they_have_zero_balance( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_40_fullCollateralCheck_breaks_loop_if_total_gte_borrowAmountPlusInterestRateUSD_and_pass_the_check( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_41A_fullCollateralCheck_correctly_disables_the_underlying_when_needed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_41B_fullCollateralCheck_correctly_optimizes_enabled_tokens( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_41_fullCollateralCheck_reverts_if_CA_has_more_than_allowed_enabled_tokens( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_42_fullCollateralCheck_fuzzing_test( - borrowedAmount: BigNumberish, - daiBalance: BigNumberish, - usdcBalance: BigNumberish, - linkBalance: BigNumberish, - wethBalance: BigNumberish, - enableUSDC: boolean, - enableLINK: boolean, - enableWETH: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_43_calcClosePayments_test( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_44_transferAssetsTo_sends_all_tokens_except_underlying_one_to_provided_address( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_45_safeTokenTransfer_transfers_tokens( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_46__disableToken_disabale_tokens_and_do_not_enable_it_if_called_twice( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_47_collateralTokens_works_as_expected( - newToken: string, - newLT: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_48_getCreditAccountOrRevert_reverts_if_borrower_has_no_account( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_49_calcCreditAccountAccruedInterest_computes_correctly( - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_50_getCreditAccountParameters_return_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_51_setParams_sets_configuration_properly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_52_addToken_reverts_if_token_exists_and_if_collateralTokens_more_256( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_53_addToken_adds_token_and_set_tokenMaskMap_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_54_setLiquidationThreshold_reverts_for_unknown_token( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_55_setForbidMask_sets_forbidMask_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_56_changeContractAllowance_updates_adapterToContract( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_57_upgradeContracts_updates_contracts_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_58_setConfigurator_sets_creditConfigurator_correctly_and_emits_event( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_59_getMaxIndex_works_properly( - noise: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_60_universal_adapter_can_call_adapter_restricted_functions( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_61_setMaxEnabledTokens_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - IS_TEST(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_01_constructor_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_02_credit_account_management_functions_revert_if_not_called_by_creditFacadeCall( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_03_credit_account_execution_functions_revert_if_not_called_by_creditFacade( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_04_credit_account_configurator_functions_revert_if_not_called_by_creditFacade( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_05_pause_pauses_management_functions( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_06_openCreditAccount_sets_correct_values_and_transfers_tokens_from_pool( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_07_openCreditAccount_reverts_if_zero_address_or_address_exists( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_08_openCreditAccount_sets_correct_values_and_transfers_tokens_from_pool( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_09_close_credit_account_returns_credit_account_and_remove_borrower_from_map( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_10_close_credit_account_returns_underlying_token_if_not_liquidated( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_11_close_credit_account_charges_caller_if_underlying_token_not_enough( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_12_close_credit_account_charges_caller_if_underlying_token_not_enough( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_13_close_credit_account_charges_caller_if_underlying_token_not_enough( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_14_close_credit_account_with_nonzero_skipTokenMask_sends_correct_tokens( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_16_close_weth_credit_account_sends_eth_to_borrower( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_17_close_dai_credit_account_sends_eth_to_borrower( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_18_close_credit_account_sends_eth_to_liquidator_and_weth_to_borrower( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_19_close_dai_credit_account_sends_eth_to_liquidator( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_20_manageDebt_correctly_increases_debt( - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_21_manageDebt_correctly_decreases_debt( - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_22_add_collateral_transfers_money_and_enables_token( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_23_transferAccountOwnership_reverts_if_to_equals_zero_or_account_exists( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_24_transferAccountOwnership_changes_creditAccounts_map_properly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_25A_approveCreditAccount_reverts_if_the_token_is_not_added( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_25_approveCreditAccount_reverts_if_adapter_isnt_connected_with_contract_or_0( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_26_approveCreditAccount_approves_with_desired_allowance( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_27A_approveCreditAccount_works_for_ERC20_with_approve_restrictions( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_27B_approveCreditAccount_works_for_ERC20_with_approve_restrictions( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_28_executeOrder_reverts_if_adapter_is_not_connected_with_target_contract( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_29_executeOrder_calls_credit_account_method_and_emit_event( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_30_checkAndEnableToken_reverts_for_token_for_token_not_in_list_and_for_forbidden_token( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_31_checkAndEnableToken_enables_token_for_creditAccount( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_32_fastCollateralCheck_enables_tokenOut_and_reverts_if_its_unkown_or_forbidden( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_33_fastCollateralCheck_disable_tokens_with_zero_balance( - balanceAfter: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_34_fastCollateralCheck_is_passed_if_collateralOut_gte_collarteralIn( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_35_fastCollateralCheck_reverts_if_more_enabled_tokens_than_allowed_if_collateralOut_gte_collarteralIn_wo_lt_check( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_36A_fastCollateralCheck_correctly_optimizes_enabled_tokens( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_36_fastCollateralCheck_is_passed_with_cumulative_drop_lte_feeLiquidation( - desiredDrop: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_37_fastCollateralCheck_reverts_if_more_enabled_tokens_than_allowed_if_collateralOut_lt_collarteralIn_wo_lt_check( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_38_fullCollateralCheck_skips_tokens_is_they_are_not_enabled( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_39_fullCollateralCheck_diables_tokens_if_they_have_zero_balance( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_40_fullCollateralCheck_breaks_loop_if_total_gte_borrowAmountPlusInterestRateUSD_and_pass_the_check( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_41A_fullCollateralCheck_correctly_disables_the_underlying_when_needed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_41B_fullCollateralCheck_correctly_optimizes_enabled_tokens( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_41_fullCollateralCheck_reverts_if_CA_has_more_than_allowed_enabled_tokens( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_42_fullCollateralCheck_fuzzing_test( - borrowedAmount: BigNumberish, - daiBalance: BigNumberish, - usdcBalance: BigNumberish, - linkBalance: BigNumberish, - wethBalance: BigNumberish, - enableUSDC: boolean, - enableLINK: boolean, - enableWETH: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_43_calcClosePayments_test( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_44_transferAssetsTo_sends_all_tokens_except_underlying_one_to_provided_address( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_45_safeTokenTransfer_transfers_tokens( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_46__disableToken_disabale_tokens_and_do_not_enable_it_if_called_twice( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_47_collateralTokens_works_as_expected( - newToken: string, - newLT: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_48_getCreditAccountOrRevert_reverts_if_borrower_has_no_account( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_49_calcCreditAccountAccruedInterest_computes_correctly( - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_50_getCreditAccountParameters_return_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_51_setParams_sets_configuration_properly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_52_addToken_reverts_if_token_exists_and_if_collateralTokens_more_256( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_53_addToken_adds_token_and_set_tokenMaskMap_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_54_setLiquidationThreshold_reverts_for_unknown_token( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_55_setForbidMask_sets_forbidMask_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_56_changeContractAllowance_updates_adapterToContract( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_57_upgradeContracts_updates_contracts_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_58_setConfigurator_sets_creditConfigurator_correctly_and_emits_event( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_59_getMaxIndex_works_properly( - noise: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_60_universal_adapter_can_call_adapter_restricted_functions( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_61_setMaxEnabledTokens_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - IS_TEST(overrides?: CallOverrides): Promise; - - failed(overrides?: CallOverrides): Promise; - - setUp(overrides?: CallOverrides): Promise; - - test_CM_01_constructor_sets_correct_values( - overrides?: CallOverrides - ): Promise; - - test_CM_02_credit_account_management_functions_revert_if_not_called_by_creditFacadeCall( - overrides?: CallOverrides - ): Promise; - - test_CM_03_credit_account_execution_functions_revert_if_not_called_by_creditFacade( - overrides?: CallOverrides - ): Promise; - - test_CM_04_credit_account_configurator_functions_revert_if_not_called_by_creditFacade( - overrides?: CallOverrides - ): Promise; - - test_CM_05_pause_pauses_management_functions( - overrides?: CallOverrides - ): Promise; - - test_CM_06_openCreditAccount_sets_correct_values_and_transfers_tokens_from_pool( - overrides?: CallOverrides - ): Promise; - - test_CM_07_openCreditAccount_reverts_if_zero_address_or_address_exists( - overrides?: CallOverrides - ): Promise; - - test_CM_08_openCreditAccount_sets_correct_values_and_transfers_tokens_from_pool( - overrides?: CallOverrides - ): Promise; - - test_CM_09_close_credit_account_returns_credit_account_and_remove_borrower_from_map( - overrides?: CallOverrides - ): Promise; - - test_CM_10_close_credit_account_returns_underlying_token_if_not_liquidated( - overrides?: CallOverrides - ): Promise; - - test_CM_11_close_credit_account_charges_caller_if_underlying_token_not_enough( - overrides?: CallOverrides - ): Promise; - - test_CM_12_close_credit_account_charges_caller_if_underlying_token_not_enough( - overrides?: CallOverrides - ): Promise; - - test_CM_13_close_credit_account_charges_caller_if_underlying_token_not_enough( - overrides?: CallOverrides - ): Promise; - - test_CM_14_close_credit_account_with_nonzero_skipTokenMask_sends_correct_tokens( - overrides?: CallOverrides - ): Promise; - - test_CM_16_close_weth_credit_account_sends_eth_to_borrower( - overrides?: CallOverrides - ): Promise; - - test_CM_17_close_dai_credit_account_sends_eth_to_borrower( - overrides?: CallOverrides - ): Promise; - - test_CM_18_close_credit_account_sends_eth_to_liquidator_and_weth_to_borrower( - overrides?: CallOverrides - ): Promise; - - test_CM_19_close_dai_credit_account_sends_eth_to_liquidator( - overrides?: CallOverrides - ): Promise; - - test_CM_20_manageDebt_correctly_increases_debt( - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - test_CM_21_manageDebt_correctly_decreases_debt( - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - test_CM_22_add_collateral_transfers_money_and_enables_token( - overrides?: CallOverrides - ): Promise; - - test_CM_23_transferAccountOwnership_reverts_if_to_equals_zero_or_account_exists( - overrides?: CallOverrides - ): Promise; - - test_CM_24_transferAccountOwnership_changes_creditAccounts_map_properly( - overrides?: CallOverrides - ): Promise; - - test_CM_25A_approveCreditAccount_reverts_if_the_token_is_not_added( - overrides?: CallOverrides - ): Promise; - - test_CM_25_approveCreditAccount_reverts_if_adapter_isnt_connected_with_contract_or_0( - overrides?: CallOverrides - ): Promise; - - test_CM_26_approveCreditAccount_approves_with_desired_allowance( - overrides?: CallOverrides - ): Promise; - - test_CM_27A_approveCreditAccount_works_for_ERC20_with_approve_restrictions( - overrides?: CallOverrides - ): Promise; - - test_CM_27B_approveCreditAccount_works_for_ERC20_with_approve_restrictions( - overrides?: CallOverrides - ): Promise; - - test_CM_28_executeOrder_reverts_if_adapter_is_not_connected_with_target_contract( - overrides?: CallOverrides - ): Promise; - - test_CM_29_executeOrder_calls_credit_account_method_and_emit_event( - overrides?: CallOverrides - ): Promise; - - test_CM_30_checkAndEnableToken_reverts_for_token_for_token_not_in_list_and_for_forbidden_token( - overrides?: CallOverrides - ): Promise; - - test_CM_31_checkAndEnableToken_enables_token_for_creditAccount( - overrides?: CallOverrides - ): Promise; - - test_CM_32_fastCollateralCheck_enables_tokenOut_and_reverts_if_its_unkown_or_forbidden( - overrides?: CallOverrides - ): Promise; - - test_CM_33_fastCollateralCheck_disable_tokens_with_zero_balance( - balanceAfter: BigNumberish, - overrides?: CallOverrides - ): Promise; - - test_CM_34_fastCollateralCheck_is_passed_if_collateralOut_gte_collarteralIn( - overrides?: CallOverrides - ): Promise; - - test_CM_35_fastCollateralCheck_reverts_if_more_enabled_tokens_than_allowed_if_collateralOut_gte_collarteralIn_wo_lt_check( - overrides?: CallOverrides - ): Promise; - - test_CM_36A_fastCollateralCheck_correctly_optimizes_enabled_tokens( - overrides?: CallOverrides - ): Promise; - - test_CM_36_fastCollateralCheck_is_passed_with_cumulative_drop_lte_feeLiquidation( - desiredDrop: BigNumberish, - overrides?: CallOverrides - ): Promise; - - test_CM_37_fastCollateralCheck_reverts_if_more_enabled_tokens_than_allowed_if_collateralOut_lt_collarteralIn_wo_lt_check( - overrides?: CallOverrides - ): Promise; - - test_CM_38_fullCollateralCheck_skips_tokens_is_they_are_not_enabled( - overrides?: CallOverrides - ): Promise; - - test_CM_39_fullCollateralCheck_diables_tokens_if_they_have_zero_balance( - overrides?: CallOverrides - ): Promise; - - test_CM_40_fullCollateralCheck_breaks_loop_if_total_gte_borrowAmountPlusInterestRateUSD_and_pass_the_check( - overrides?: CallOverrides - ): Promise; - - test_CM_41A_fullCollateralCheck_correctly_disables_the_underlying_when_needed( - overrides?: CallOverrides - ): Promise; - - test_CM_41B_fullCollateralCheck_correctly_optimizes_enabled_tokens( - overrides?: CallOverrides - ): Promise; - - test_CM_41_fullCollateralCheck_reverts_if_CA_has_more_than_allowed_enabled_tokens( - overrides?: CallOverrides - ): Promise; - - test_CM_42_fullCollateralCheck_fuzzing_test( - borrowedAmount: BigNumberish, - daiBalance: BigNumberish, - usdcBalance: BigNumberish, - linkBalance: BigNumberish, - wethBalance: BigNumberish, - enableUSDC: boolean, - enableLINK: boolean, - enableWETH: boolean, - overrides?: CallOverrides - ): Promise; - - test_CM_43_calcClosePayments_test(overrides?: CallOverrides): Promise; - - test_CM_44_transferAssetsTo_sends_all_tokens_except_underlying_one_to_provided_address( - overrides?: CallOverrides - ): Promise; - - test_CM_45_safeTokenTransfer_transfers_tokens( - overrides?: CallOverrides - ): Promise; - - test_CM_46__disableToken_disabale_tokens_and_do_not_enable_it_if_called_twice( - overrides?: CallOverrides - ): Promise; - - test_CM_47_collateralTokens_works_as_expected( - newToken: string, - newLT: BigNumberish, - overrides?: CallOverrides - ): Promise; - - test_CM_48_getCreditAccountOrRevert_reverts_if_borrower_has_no_account( - overrides?: CallOverrides - ): Promise; - - test_CM_49_calcCreditAccountAccruedInterest_computes_correctly( - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - test_CM_50_getCreditAccountParameters_return_correct_values( - overrides?: CallOverrides - ): Promise; - - test_CM_51_setParams_sets_configuration_properly( - overrides?: CallOverrides - ): Promise; - - test_CM_52_addToken_reverts_if_token_exists_and_if_collateralTokens_more_256( - overrides?: CallOverrides - ): Promise; - - test_CM_53_addToken_adds_token_and_set_tokenMaskMap_correctly( - overrides?: CallOverrides - ): Promise; - - test_CM_54_setLiquidationThreshold_reverts_for_unknown_token( - overrides?: CallOverrides - ): Promise; - - test_CM_55_setForbidMask_sets_forbidMask_correctly( - overrides?: CallOverrides - ): Promise; - - test_CM_56_changeContractAllowance_updates_adapterToContract( - overrides?: CallOverrides - ): Promise; - - test_CM_57_upgradeContracts_updates_contracts_correctly( - overrides?: CallOverrides - ): Promise; - - test_CM_58_setConfigurator_sets_creditConfigurator_correctly_and_emits_event( - overrides?: CallOverrides - ): Promise; - - test_CM_59_getMaxIndex_works_properly( - noise: BigNumberish, - overrides?: CallOverrides - ): Promise; - - test_CM_60_universal_adapter_can_call_adapter_restricted_functions( - overrides?: CallOverrides - ): Promise; - - test_CM_61_setMaxEnabledTokens_works_correctly( - overrides?: CallOverrides - ): Promise; - }; - - filters: { - "ExecuteOrder(address,address)"( - borrower?: string | null, - target?: string | null - ): ExecuteOrderEventFilter; - ExecuteOrder( - borrower?: string | null, - target?: string | null - ): ExecuteOrderEventFilter; - - "NewConfigurator(address)"( - newConfigurator?: string | null - ): NewConfiguratorEventFilter; - NewConfigurator( - newConfigurator?: string | null - ): NewConfiguratorEventFilter; - - "log(string)"(arg0?: null): logEventFilter; - log(arg0?: null): logEventFilter; - - "log_address(address)"(arg0?: null): log_addressEventFilter; - log_address(arg0?: null): log_addressEventFilter; - - "log_bytes(bytes)"(arg0?: null): log_bytesEventFilter; - log_bytes(arg0?: null): log_bytesEventFilter; - - "log_bytes32(bytes32)"(arg0?: null): log_bytes32EventFilter; - log_bytes32(arg0?: null): log_bytes32EventFilter; - - "log_int(int256)"(arg0?: null): log_intEventFilter; - log_int(arg0?: null): log_intEventFilter; - - "log_named_address(string,address)"( - key?: null, - val?: null - ): log_named_addressEventFilter; - log_named_address(key?: null, val?: null): log_named_addressEventFilter; - - "log_named_bytes(string,bytes)"( - key?: null, - val?: null - ): log_named_bytesEventFilter; - log_named_bytes(key?: null, val?: null): log_named_bytesEventFilter; - - "log_named_bytes32(string,bytes32)"( - key?: null, - val?: null - ): log_named_bytes32EventFilter; - log_named_bytes32(key?: null, val?: null): log_named_bytes32EventFilter; - - "log_named_decimal_int(string,int256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - log_named_decimal_int( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - - "log_named_decimal_uint(string,uint256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - log_named_decimal_uint( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - - "log_named_int(string,int256)"( - key?: null, - val?: null - ): log_named_intEventFilter; - log_named_int(key?: null, val?: null): log_named_intEventFilter; - - "log_named_string(string,string)"( - key?: null, - val?: null - ): log_named_stringEventFilter; - log_named_string(key?: null, val?: null): log_named_stringEventFilter; - - "log_named_uint(string,uint256)"( - key?: null, - val?: null - ): log_named_uintEventFilter; - log_named_uint(key?: null, val?: null): log_named_uintEventFilter; - - "log_string(string)"(arg0?: null): log_stringEventFilter; - log_string(arg0?: null): log_stringEventFilter; - - "log_uint(uint256)"(arg0?: null): log_uintEventFilter; - log_uint(arg0?: null): log_uintEventFilter; - - "logs(bytes)"(arg0?: null): logsEventFilter; - logs(arg0?: null): logsEventFilter; - }; - - estimateGas: { - IS_TEST(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_01_constructor_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_02_credit_account_management_functions_revert_if_not_called_by_creditFacadeCall( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_03_credit_account_execution_functions_revert_if_not_called_by_creditFacade( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_04_credit_account_configurator_functions_revert_if_not_called_by_creditFacade( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_05_pause_pauses_management_functions( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_06_openCreditAccount_sets_correct_values_and_transfers_tokens_from_pool( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_07_openCreditAccount_reverts_if_zero_address_or_address_exists( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_08_openCreditAccount_sets_correct_values_and_transfers_tokens_from_pool( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_09_close_credit_account_returns_credit_account_and_remove_borrower_from_map( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_10_close_credit_account_returns_underlying_token_if_not_liquidated( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_11_close_credit_account_charges_caller_if_underlying_token_not_enough( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_12_close_credit_account_charges_caller_if_underlying_token_not_enough( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_13_close_credit_account_charges_caller_if_underlying_token_not_enough( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_14_close_credit_account_with_nonzero_skipTokenMask_sends_correct_tokens( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_16_close_weth_credit_account_sends_eth_to_borrower( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_17_close_dai_credit_account_sends_eth_to_borrower( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_18_close_credit_account_sends_eth_to_liquidator_and_weth_to_borrower( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_19_close_dai_credit_account_sends_eth_to_liquidator( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_20_manageDebt_correctly_increases_debt( - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_21_manageDebt_correctly_decreases_debt( - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_22_add_collateral_transfers_money_and_enables_token( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_23_transferAccountOwnership_reverts_if_to_equals_zero_or_account_exists( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_24_transferAccountOwnership_changes_creditAccounts_map_properly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_25A_approveCreditAccount_reverts_if_the_token_is_not_added( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_25_approveCreditAccount_reverts_if_adapter_isnt_connected_with_contract_or_0( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_26_approveCreditAccount_approves_with_desired_allowance( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_27A_approveCreditAccount_works_for_ERC20_with_approve_restrictions( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_27B_approveCreditAccount_works_for_ERC20_with_approve_restrictions( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_28_executeOrder_reverts_if_adapter_is_not_connected_with_target_contract( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_29_executeOrder_calls_credit_account_method_and_emit_event( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_30_checkAndEnableToken_reverts_for_token_for_token_not_in_list_and_for_forbidden_token( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_31_checkAndEnableToken_enables_token_for_creditAccount( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_32_fastCollateralCheck_enables_tokenOut_and_reverts_if_its_unkown_or_forbidden( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_33_fastCollateralCheck_disable_tokens_with_zero_balance( - balanceAfter: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_34_fastCollateralCheck_is_passed_if_collateralOut_gte_collarteralIn( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_35_fastCollateralCheck_reverts_if_more_enabled_tokens_than_allowed_if_collateralOut_gte_collarteralIn_wo_lt_check( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_36A_fastCollateralCheck_correctly_optimizes_enabled_tokens( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_36_fastCollateralCheck_is_passed_with_cumulative_drop_lte_feeLiquidation( - desiredDrop: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_37_fastCollateralCheck_reverts_if_more_enabled_tokens_than_allowed_if_collateralOut_lt_collarteralIn_wo_lt_check( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_38_fullCollateralCheck_skips_tokens_is_they_are_not_enabled( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_39_fullCollateralCheck_diables_tokens_if_they_have_zero_balance( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_40_fullCollateralCheck_breaks_loop_if_total_gte_borrowAmountPlusInterestRateUSD_and_pass_the_check( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_41A_fullCollateralCheck_correctly_disables_the_underlying_when_needed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_41B_fullCollateralCheck_correctly_optimizes_enabled_tokens( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_41_fullCollateralCheck_reverts_if_CA_has_more_than_allowed_enabled_tokens( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_42_fullCollateralCheck_fuzzing_test( - borrowedAmount: BigNumberish, - daiBalance: BigNumberish, - usdcBalance: BigNumberish, - linkBalance: BigNumberish, - wethBalance: BigNumberish, - enableUSDC: boolean, - enableLINK: boolean, - enableWETH: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_43_calcClosePayments_test( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_44_transferAssetsTo_sends_all_tokens_except_underlying_one_to_provided_address( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_45_safeTokenTransfer_transfers_tokens( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_46__disableToken_disabale_tokens_and_do_not_enable_it_if_called_twice( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_47_collateralTokens_works_as_expected( - newToken: string, - newLT: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_48_getCreditAccountOrRevert_reverts_if_borrower_has_no_account( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_49_calcCreditAccountAccruedInterest_computes_correctly( - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_50_getCreditAccountParameters_return_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_51_setParams_sets_configuration_properly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_52_addToken_reverts_if_token_exists_and_if_collateralTokens_more_256( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_53_addToken_adds_token_and_set_tokenMaskMap_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_54_setLiquidationThreshold_reverts_for_unknown_token( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_55_setForbidMask_sets_forbidMask_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_56_changeContractAllowance_updates_adapterToContract( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_57_upgradeContracts_updates_contracts_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_58_setConfigurator_sets_creditConfigurator_correctly_and_emits_event( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_59_getMaxIndex_works_properly( - noise: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_60_universal_adapter_can_call_adapter_restricted_functions( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_61_setMaxEnabledTokens_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - IS_TEST(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_01_constructor_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_02_credit_account_management_functions_revert_if_not_called_by_creditFacadeCall( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_03_credit_account_execution_functions_revert_if_not_called_by_creditFacade( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_04_credit_account_configurator_functions_revert_if_not_called_by_creditFacade( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_05_pause_pauses_management_functions( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_06_openCreditAccount_sets_correct_values_and_transfers_tokens_from_pool( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_07_openCreditAccount_reverts_if_zero_address_or_address_exists( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_08_openCreditAccount_sets_correct_values_and_transfers_tokens_from_pool( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_09_close_credit_account_returns_credit_account_and_remove_borrower_from_map( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_10_close_credit_account_returns_underlying_token_if_not_liquidated( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_11_close_credit_account_charges_caller_if_underlying_token_not_enough( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_12_close_credit_account_charges_caller_if_underlying_token_not_enough( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_13_close_credit_account_charges_caller_if_underlying_token_not_enough( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_14_close_credit_account_with_nonzero_skipTokenMask_sends_correct_tokens( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_16_close_weth_credit_account_sends_eth_to_borrower( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_17_close_dai_credit_account_sends_eth_to_borrower( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_18_close_credit_account_sends_eth_to_liquidator_and_weth_to_borrower( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_19_close_dai_credit_account_sends_eth_to_liquidator( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_20_manageDebt_correctly_increases_debt( - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_21_manageDebt_correctly_decreases_debt( - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_22_add_collateral_transfers_money_and_enables_token( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_23_transferAccountOwnership_reverts_if_to_equals_zero_or_account_exists( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_24_transferAccountOwnership_changes_creditAccounts_map_properly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_25A_approveCreditAccount_reverts_if_the_token_is_not_added( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_25_approveCreditAccount_reverts_if_adapter_isnt_connected_with_contract_or_0( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_26_approveCreditAccount_approves_with_desired_allowance( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_27A_approveCreditAccount_works_for_ERC20_with_approve_restrictions( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_27B_approveCreditAccount_works_for_ERC20_with_approve_restrictions( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_28_executeOrder_reverts_if_adapter_is_not_connected_with_target_contract( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_29_executeOrder_calls_credit_account_method_and_emit_event( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_30_checkAndEnableToken_reverts_for_token_for_token_not_in_list_and_for_forbidden_token( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_31_checkAndEnableToken_enables_token_for_creditAccount( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_32_fastCollateralCheck_enables_tokenOut_and_reverts_if_its_unkown_or_forbidden( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_33_fastCollateralCheck_disable_tokens_with_zero_balance( - balanceAfter: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_34_fastCollateralCheck_is_passed_if_collateralOut_gte_collarteralIn( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_35_fastCollateralCheck_reverts_if_more_enabled_tokens_than_allowed_if_collateralOut_gte_collarteralIn_wo_lt_check( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_36A_fastCollateralCheck_correctly_optimizes_enabled_tokens( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_36_fastCollateralCheck_is_passed_with_cumulative_drop_lte_feeLiquidation( - desiredDrop: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_37_fastCollateralCheck_reverts_if_more_enabled_tokens_than_allowed_if_collateralOut_lt_collarteralIn_wo_lt_check( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_38_fullCollateralCheck_skips_tokens_is_they_are_not_enabled( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_39_fullCollateralCheck_diables_tokens_if_they_have_zero_balance( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_40_fullCollateralCheck_breaks_loop_if_total_gte_borrowAmountPlusInterestRateUSD_and_pass_the_check( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_41A_fullCollateralCheck_correctly_disables_the_underlying_when_needed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_41B_fullCollateralCheck_correctly_optimizes_enabled_tokens( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_41_fullCollateralCheck_reverts_if_CA_has_more_than_allowed_enabled_tokens( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_42_fullCollateralCheck_fuzzing_test( - borrowedAmount: BigNumberish, - daiBalance: BigNumberish, - usdcBalance: BigNumberish, - linkBalance: BigNumberish, - wethBalance: BigNumberish, - enableUSDC: boolean, - enableLINK: boolean, - enableWETH: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_43_calcClosePayments_test( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_44_transferAssetsTo_sends_all_tokens_except_underlying_one_to_provided_address( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_45_safeTokenTransfer_transfers_tokens( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_46__disableToken_disabale_tokens_and_do_not_enable_it_if_called_twice( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_47_collateralTokens_works_as_expected( - newToken: string, - newLT: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_48_getCreditAccountOrRevert_reverts_if_borrower_has_no_account( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_49_calcCreditAccountAccruedInterest_computes_correctly( - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_50_getCreditAccountParameters_return_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_51_setParams_sets_configuration_properly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_52_addToken_reverts_if_token_exists_and_if_collateralTokens_more_256( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_53_addToken_adds_token_and_set_tokenMaskMap_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_54_setLiquidationThreshold_reverts_for_unknown_token( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_55_setForbidMask_sets_forbidMask_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_56_changeContractAllowance_updates_adapterToContract( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_57_upgradeContracts_updates_contracts_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_58_setConfigurator_sets_creditConfigurator_correctly_and_emits_event( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_59_getMaxIndex_works_properly( - noise: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_60_universal_adapter_can_call_adapter_restricted_functions( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CM_61_setMaxEnabledTokens_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/src/types/contracts/test/credit/CreditManager.t.sol/index.ts b/src/types/contracts/test/credit/CreditManager.t.sol/index.ts deleted file mode 100644 index 464146b6..00000000 --- a/src/types/contracts/test/credit/CreditManager.t.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { CreditManagerTest } from "./CreditManagerTest"; diff --git a/src/types/contracts/test/credit/index.ts b/src/types/contracts/test/credit/index.ts deleted file mode 100644 index e69be7d9..00000000 --- a/src/types/contracts/test/credit/index.ts +++ /dev/null @@ -1,9 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type * as creditConfiguratorTSol from "./CreditConfigurator.t.sol"; -export type { creditConfiguratorTSol }; -import type * as creditFacadeTSol from "./CreditFacade.t.sol"; -export type { creditFacadeTSol }; -import type * as creditManagerTSol from "./CreditManager.t.sol"; -export type { creditManagerTSol }; diff --git a/src/types/contracts/test/index.ts b/src/types/contracts/test/index.ts index 6c674804..c6219240 100644 --- a/src/types/contracts/test/index.ts +++ b/src/types/contracts/test/index.ts @@ -1,31 +1,7 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ -import type * as playgroundTSol from "./Playground.t.sol"; -export type { playgroundTSol }; -import type * as adapters from "./adapters"; -export type { adapters }; -import type * as core from "./core"; -export type { core }; -import type * as credit from "./credit"; -export type { credit }; -import type * as lib from "./lib"; -export type { lib }; -import type * as mainnet from "./mainnet"; -export type { mainnet }; import type * as mocks from "./mocks"; export type { mocks }; -import type * as oracles from "./oracles"; -export type { oracles }; -import type * as pathfinder from "./pathfinder"; -export type { pathfinder }; -import type * as pool from "./pool"; -export type { pool }; import type * as sigp from "./sigp"; export type { sigp }; -import type * as suites from "./suites"; -export type { suites }; -import type * as support from "./support"; -export type { support }; -import type * as tokens from "./tokens"; -export type { tokens }; diff --git a/src/types/contracts/test/lib/cheatCodes.sol/CheatCodes.ts b/src/types/contracts/test/lib/cheatCodes.sol/CheatCodes.ts deleted file mode 100644 index f423c2f2..00000000 --- a/src/types/contracts/test/lib/cheatCodes.sol/CheatCodes.ts +++ /dev/null @@ -1,926 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface CheatCodesInterface extends utils.Interface { - functions: { - "accesses(address)": FunctionFragment; - "addr(uint256)": FunctionFragment; - "assume(bool)": FunctionFragment; - "clearMockedCalls()": FunctionFragment; - "deal(address,uint256)": FunctionFragment; - "etch(address,bytes)": FunctionFragment; - "expectCall(address,bytes)": FunctionFragment; - "expectEmit(bool,bool,bool,bool)": FunctionFragment; - "expectRevert(bytes4)": FunctionFragment; - "expectRevert(bytes)": FunctionFragment; - "fee(uint256)": FunctionFragment; - "ffi(string[])": FunctionFragment; - "getCode(string)": FunctionFragment; - "label(address,string)": FunctionFragment; - "load(address,bytes32)": FunctionFragment; - "mockCall(address,bytes,bytes)": FunctionFragment; - "prank(address,address)": FunctionFragment; - "prank(address)": FunctionFragment; - "record()": FunctionFragment; - "roll(uint256)": FunctionFragment; - "sign(uint256,bytes32)": FunctionFragment; - "startPrank(address)": FunctionFragment; - "startPrank(address,address)": FunctionFragment; - "stopPrank()": FunctionFragment; - "store(address,bytes32,bytes32)": FunctionFragment; - "warp(uint256)": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "accesses" - | "addr" - | "assume" - | "clearMockedCalls" - | "deal" - | "etch" - | "expectCall" - | "expectEmit" - | "expectRevert(bytes4)" - | "expectRevert(bytes)" - | "fee" - | "ffi" - | "getCode" - | "label" - | "load" - | "mockCall" - | "prank(address,address)" - | "prank(address)" - | "record" - | "roll" - | "sign" - | "startPrank(address)" - | "startPrank(address,address)" - | "stopPrank" - | "store" - | "warp" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "accesses", values: [string]): string; - encodeFunctionData(functionFragment: "addr", values: [BigNumberish]): string; - encodeFunctionData(functionFragment: "assume", values: [boolean]): string; - encodeFunctionData( - functionFragment: "clearMockedCalls", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "deal", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "etch", - values: [string, BytesLike] - ): string; - encodeFunctionData( - functionFragment: "expectCall", - values: [string, BytesLike] - ): string; - encodeFunctionData( - functionFragment: "expectEmit", - values: [boolean, boolean, boolean, boolean] - ): string; - encodeFunctionData( - functionFragment: "expectRevert(bytes4)", - values: [BytesLike] - ): string; - encodeFunctionData( - functionFragment: "expectRevert(bytes)", - values: [BytesLike] - ): string; - encodeFunctionData(functionFragment: "fee", values: [BigNumberish]): string; - encodeFunctionData(functionFragment: "ffi", values: [string[]]): string; - encodeFunctionData(functionFragment: "getCode", values: [string]): string; - encodeFunctionData( - functionFragment: "label", - values: [string, string] - ): string; - encodeFunctionData( - functionFragment: "load", - values: [string, BytesLike] - ): string; - encodeFunctionData( - functionFragment: "mockCall", - values: [string, BytesLike, BytesLike] - ): string; - encodeFunctionData( - functionFragment: "prank(address,address)", - values: [string, string] - ): string; - encodeFunctionData( - functionFragment: "prank(address)", - values: [string] - ): string; - encodeFunctionData(functionFragment: "record", values?: undefined): string; - encodeFunctionData(functionFragment: "roll", values: [BigNumberish]): string; - encodeFunctionData( - functionFragment: "sign", - values: [BigNumberish, BytesLike] - ): string; - encodeFunctionData( - functionFragment: "startPrank(address)", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "startPrank(address,address)", - values: [string, string] - ): string; - encodeFunctionData(functionFragment: "stopPrank", values?: undefined): string; - encodeFunctionData( - functionFragment: "store", - values: [string, BytesLike, BytesLike] - ): string; - encodeFunctionData(functionFragment: "warp", values: [BigNumberish]): string; - - decodeFunctionResult(functionFragment: "accesses", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "addr", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "assume", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "clearMockedCalls", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "deal", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "etch", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "expectCall", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "expectEmit", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "expectRevert(bytes4)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "expectRevert(bytes)", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "fee", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "ffi", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "getCode", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "label", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "load", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "mockCall", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "prank(address,address)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "prank(address)", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "record", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "roll", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "sign", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "startPrank(address)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "startPrank(address,address)", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "stopPrank", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "store", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "warp", data: BytesLike): Result; - - events: {}; -} - -export interface CheatCodes extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: CheatCodesInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - accesses( - arg0: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - addr( - privateKey: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - assume( - arg0: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - clearMockedCalls( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - deal( - who: string, - newBalance: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - etch( - who: string, - code: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - expectCall( - arg0: string, - arg1: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - expectEmit( - arg0: boolean, - arg1: boolean, - arg2: boolean, - arg3: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "expectRevert(bytes4)"( - arg0: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "expectRevert(bytes)"( - arg0: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fee( - arg0: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - ffi( - arg0: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getCode( - arg0: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - label( - addr: string, - label: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - load( - account: string, - slot: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - mockCall( - arg0: string, - arg1: BytesLike, - arg2: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "prank(address,address)"( - arg0: string, - arg1: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "prank(address)"( - arg0: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - record( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - roll( - arg0: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - sign( - privateKey: BigNumberish, - digest: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "startPrank(address)"( - arg0: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "startPrank(address,address)"( - arg0: string, - arg1: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - stopPrank( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - store( - account: string, - slot: BytesLike, - value: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - warp( - arg0: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - accesses( - arg0: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - addr( - privateKey: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - assume( - arg0: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - clearMockedCalls( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - deal( - who: string, - newBalance: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - etch( - who: string, - code: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - expectCall( - arg0: string, - arg1: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - expectEmit( - arg0: boolean, - arg1: boolean, - arg2: boolean, - arg3: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "expectRevert(bytes4)"( - arg0: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "expectRevert(bytes)"( - arg0: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fee( - arg0: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - ffi( - arg0: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getCode( - arg0: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - label( - addr: string, - label: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - load( - account: string, - slot: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - mockCall( - arg0: string, - arg1: BytesLike, - arg2: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "prank(address,address)"( - arg0: string, - arg1: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "prank(address)"( - arg0: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - record( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - roll( - arg0: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - sign( - privateKey: BigNumberish, - digest: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "startPrank(address)"( - arg0: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "startPrank(address,address)"( - arg0: string, - arg1: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - stopPrank( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - store( - account: string, - slot: BytesLike, - value: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - warp( - arg0: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - accesses( - arg0: string, - overrides?: CallOverrides - ): Promise<[string[], string[]] & { reads: string[]; writes: string[] }>; - - addr(privateKey: BigNumberish, overrides?: CallOverrides): Promise; - - assume(arg0: boolean, overrides?: CallOverrides): Promise; - - clearMockedCalls(overrides?: CallOverrides): Promise; - - deal( - who: string, - newBalance: BigNumberish, - overrides?: CallOverrides - ): Promise; - - etch( - who: string, - code: BytesLike, - overrides?: CallOverrides - ): Promise; - - expectCall( - arg0: string, - arg1: BytesLike, - overrides?: CallOverrides - ): Promise; - - expectEmit( - arg0: boolean, - arg1: boolean, - arg2: boolean, - arg3: boolean, - overrides?: CallOverrides - ): Promise; - - "expectRevert(bytes4)"( - arg0: BytesLike, - overrides?: CallOverrides - ): Promise; - - "expectRevert(bytes)"( - arg0: BytesLike, - overrides?: CallOverrides - ): Promise; - - fee(arg0: BigNumberish, overrides?: CallOverrides): Promise; - - ffi(arg0: string[], overrides?: CallOverrides): Promise; - - getCode(arg0: string, overrides?: CallOverrides): Promise; - - label( - addr: string, - label: string, - overrides?: CallOverrides - ): Promise; - - load( - account: string, - slot: BytesLike, - overrides?: CallOverrides - ): Promise; - - mockCall( - arg0: string, - arg1: BytesLike, - arg2: BytesLike, - overrides?: CallOverrides - ): Promise; - - "prank(address,address)"( - arg0: string, - arg1: string, - overrides?: CallOverrides - ): Promise; - - "prank(address)"(arg0: string, overrides?: CallOverrides): Promise; - - record(overrides?: CallOverrides): Promise; - - roll(arg0: BigNumberish, overrides?: CallOverrides): Promise; - - sign( - privateKey: BigNumberish, - digest: BytesLike, - overrides?: CallOverrides - ): Promise<[number, string, string] & { v: number; r: string; s: string }>; - - "startPrank(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise; - - "startPrank(address,address)"( - arg0: string, - arg1: string, - overrides?: CallOverrides - ): Promise; - - stopPrank(overrides?: CallOverrides): Promise; - - store( - account: string, - slot: BytesLike, - value: BytesLike, - overrides?: CallOverrides - ): Promise; - - warp(arg0: BigNumberish, overrides?: CallOverrides): Promise; - }; - - filters: {}; - - estimateGas: { - accesses( - arg0: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - addr( - privateKey: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - assume( - arg0: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - clearMockedCalls( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - deal( - who: string, - newBalance: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - etch( - who: string, - code: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - expectCall( - arg0: string, - arg1: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - expectEmit( - arg0: boolean, - arg1: boolean, - arg2: boolean, - arg3: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "expectRevert(bytes4)"( - arg0: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "expectRevert(bytes)"( - arg0: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fee( - arg0: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - ffi( - arg0: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getCode( - arg0: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - label( - addr: string, - label: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - load( - account: string, - slot: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - mockCall( - arg0: string, - arg1: BytesLike, - arg2: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "prank(address,address)"( - arg0: string, - arg1: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "prank(address)"( - arg0: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - record( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - roll( - arg0: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - sign( - privateKey: BigNumberish, - digest: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "startPrank(address)"( - arg0: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "startPrank(address,address)"( - arg0: string, - arg1: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - stopPrank( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - store( - account: string, - slot: BytesLike, - value: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - warp( - arg0: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - accesses( - arg0: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - addr( - privateKey: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - assume( - arg0: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - clearMockedCalls( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - deal( - who: string, - newBalance: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - etch( - who: string, - code: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - expectCall( - arg0: string, - arg1: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - expectEmit( - arg0: boolean, - arg1: boolean, - arg2: boolean, - arg3: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "expectRevert(bytes4)"( - arg0: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "expectRevert(bytes)"( - arg0: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fee( - arg0: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - ffi( - arg0: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getCode( - arg0: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - label( - addr: string, - label: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - load( - account: string, - slot: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - mockCall( - arg0: string, - arg1: BytesLike, - arg2: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "prank(address,address)"( - arg0: string, - arg1: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "prank(address)"( - arg0: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - record( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - roll( - arg0: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - sign( - privateKey: BigNumberish, - digest: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "startPrank(address)"( - arg0: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "startPrank(address,address)"( - arg0: string, - arg1: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - stopPrank( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - store( - account: string, - slot: BytesLike, - value: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - warp( - arg0: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/src/types/contracts/test/lib/cheatCodes.sol/index.ts b/src/types/contracts/test/lib/cheatCodes.sol/index.ts deleted file mode 100644 index 8929e768..00000000 --- a/src/types/contracts/test/lib/cheatCodes.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { CheatCodes } from "./CheatCodes"; diff --git a/src/types/contracts/test/lib/constants.sol/Roles.ts b/src/types/contracts/test/lib/constants.sol/Roles.ts deleted file mode 100644 index f5c5b2ac..00000000 --- a/src/types/contracts/test/lib/constants.sol/Roles.ts +++ /dev/null @@ -1,375 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface RolesInterface extends utils.Interface { - functions: { - "IS_TEST()": FunctionFragment; - "failed()": FunctionFragment; - }; - - getFunction(nameOrSignatureOrTopic: "IS_TEST" | "failed"): FunctionFragment; - - encodeFunctionData(functionFragment: "IS_TEST", values?: undefined): string; - encodeFunctionData(functionFragment: "failed", values?: undefined): string; - - decodeFunctionResult(functionFragment: "IS_TEST", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "failed", data: BytesLike): Result; - - events: { - "log(string)": EventFragment; - "log_address(address)": EventFragment; - "log_bytes(bytes)": EventFragment; - "log_bytes32(bytes32)": EventFragment; - "log_int(int256)": EventFragment; - "log_named_address(string,address)": EventFragment; - "log_named_bytes(string,bytes)": EventFragment; - "log_named_bytes32(string,bytes32)": EventFragment; - "log_named_decimal_int(string,int256,uint256)": EventFragment; - "log_named_decimal_uint(string,uint256,uint256)": EventFragment; - "log_named_int(string,int256)": EventFragment; - "log_named_string(string,string)": EventFragment; - "log_named_uint(string,uint256)": EventFragment; - "log_string(string)": EventFragment; - "log_uint(uint256)": EventFragment; - "logs(bytes)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "log"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "logs"): EventFragment; -} - -export interface logEventObject { - arg0: string; -} -export type logEvent = TypedEvent<[string], logEventObject>; - -export type logEventFilter = TypedEventFilter; - -export interface log_addressEventObject { - arg0: string; -} -export type log_addressEvent = TypedEvent<[string], log_addressEventObject>; - -export type log_addressEventFilter = TypedEventFilter; - -export interface log_bytesEventObject { - arg0: string; -} -export type log_bytesEvent = TypedEvent<[string], log_bytesEventObject>; - -export type log_bytesEventFilter = TypedEventFilter; - -export interface log_bytes32EventObject { - arg0: string; -} -export type log_bytes32Event = TypedEvent<[string], log_bytes32EventObject>; - -export type log_bytes32EventFilter = TypedEventFilter; - -export interface log_intEventObject { - arg0: BigNumber; -} -export type log_intEvent = TypedEvent<[BigNumber], log_intEventObject>; - -export type log_intEventFilter = TypedEventFilter; - -export interface log_named_addressEventObject { - key: string; - val: string; -} -export type log_named_addressEvent = TypedEvent< - [string, string], - log_named_addressEventObject ->; - -export type log_named_addressEventFilter = - TypedEventFilter; - -export interface log_named_bytesEventObject { - key: string; - val: string; -} -export type log_named_bytesEvent = TypedEvent< - [string, string], - log_named_bytesEventObject ->; - -export type log_named_bytesEventFilter = TypedEventFilter; - -export interface log_named_bytes32EventObject { - key: string; - val: string; -} -export type log_named_bytes32Event = TypedEvent< - [string, string], - log_named_bytes32EventObject ->; - -export type log_named_bytes32EventFilter = - TypedEventFilter; - -export interface log_named_decimal_intEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_intEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_intEventObject ->; - -export type log_named_decimal_intEventFilter = - TypedEventFilter; - -export interface log_named_decimal_uintEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_uintEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_uintEventObject ->; - -export type log_named_decimal_uintEventFilter = - TypedEventFilter; - -export interface log_named_intEventObject { - key: string; - val: BigNumber; -} -export type log_named_intEvent = TypedEvent< - [string, BigNumber], - log_named_intEventObject ->; - -export type log_named_intEventFilter = TypedEventFilter; - -export interface log_named_stringEventObject { - key: string; - val: string; -} -export type log_named_stringEvent = TypedEvent< - [string, string], - log_named_stringEventObject ->; - -export type log_named_stringEventFilter = - TypedEventFilter; - -export interface log_named_uintEventObject { - key: string; - val: BigNumber; -} -export type log_named_uintEvent = TypedEvent< - [string, BigNumber], - log_named_uintEventObject ->; - -export type log_named_uintEventFilter = TypedEventFilter; - -export interface log_stringEventObject { - arg0: string; -} -export type log_stringEvent = TypedEvent<[string], log_stringEventObject>; - -export type log_stringEventFilter = TypedEventFilter; - -export interface log_uintEventObject { - arg0: BigNumber; -} -export type log_uintEvent = TypedEvent<[BigNumber], log_uintEventObject>; - -export type log_uintEventFilter = TypedEventFilter; - -export interface logsEventObject { - arg0: string; -} -export type logsEvent = TypedEvent<[string], logsEventObject>; - -export type logsEventFilter = TypedEventFilter; - -export interface Roles extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: RolesInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - IS_TEST(overrides?: CallOverrides): Promise<[boolean]>; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - IS_TEST(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - IS_TEST(overrides?: CallOverrides): Promise; - - failed(overrides?: CallOverrides): Promise; - }; - - filters: { - "log(string)"(arg0?: null): logEventFilter; - log(arg0?: null): logEventFilter; - - "log_address(address)"(arg0?: null): log_addressEventFilter; - log_address(arg0?: null): log_addressEventFilter; - - "log_bytes(bytes)"(arg0?: null): log_bytesEventFilter; - log_bytes(arg0?: null): log_bytesEventFilter; - - "log_bytes32(bytes32)"(arg0?: null): log_bytes32EventFilter; - log_bytes32(arg0?: null): log_bytes32EventFilter; - - "log_int(int256)"(arg0?: null): log_intEventFilter; - log_int(arg0?: null): log_intEventFilter; - - "log_named_address(string,address)"( - key?: null, - val?: null - ): log_named_addressEventFilter; - log_named_address(key?: null, val?: null): log_named_addressEventFilter; - - "log_named_bytes(string,bytes)"( - key?: null, - val?: null - ): log_named_bytesEventFilter; - log_named_bytes(key?: null, val?: null): log_named_bytesEventFilter; - - "log_named_bytes32(string,bytes32)"( - key?: null, - val?: null - ): log_named_bytes32EventFilter; - log_named_bytes32(key?: null, val?: null): log_named_bytes32EventFilter; - - "log_named_decimal_int(string,int256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - log_named_decimal_int( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - - "log_named_decimal_uint(string,uint256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - log_named_decimal_uint( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - - "log_named_int(string,int256)"( - key?: null, - val?: null - ): log_named_intEventFilter; - log_named_int(key?: null, val?: null): log_named_intEventFilter; - - "log_named_string(string,string)"( - key?: null, - val?: null - ): log_named_stringEventFilter; - log_named_string(key?: null, val?: null): log_named_stringEventFilter; - - "log_named_uint(string,uint256)"( - key?: null, - val?: null - ): log_named_uintEventFilter; - log_named_uint(key?: null, val?: null): log_named_uintEventFilter; - - "log_string(string)"(arg0?: null): log_stringEventFilter; - log_string(arg0?: null): log_stringEventFilter; - - "log_uint(uint256)"(arg0?: null): log_uintEventFilter; - log_uint(arg0?: null): log_uintEventFilter; - - "logs(bytes)"(arg0?: null): logsEventFilter; - logs(arg0?: null): logsEventFilter; - }; - - estimateGas: { - IS_TEST(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - IS_TEST(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/src/types/contracts/test/lib/constants.sol/index.ts b/src/types/contracts/test/lib/constants.sol/index.ts deleted file mode 100644 index 6703a6bd..00000000 --- a/src/types/contracts/test/lib/constants.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { Roles } from "./Roles"; diff --git a/src/types/contracts/test/lib/index.ts b/src/types/contracts/test/lib/index.ts deleted file mode 100644 index b34e28c9..00000000 --- a/src/types/contracts/test/lib/index.ts +++ /dev/null @@ -1,9 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type * as cheatCodesSol from "./cheatCodes.sol"; -export type { cheatCodesSol }; -import type * as constantsSol from "./constants.sol"; -export type { constantsSol }; -import type * as testSol from "./test.sol"; -export type { testSol }; diff --git a/src/types/contracts/test/lib/test.sol/DSTest.ts b/src/types/contracts/test/lib/test.sol/DSTest.ts deleted file mode 100644 index 04755adc..00000000 --- a/src/types/contracts/test/lib/test.sol/DSTest.ts +++ /dev/null @@ -1,375 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface DSTestInterface extends utils.Interface { - functions: { - "IS_TEST()": FunctionFragment; - "failed()": FunctionFragment; - }; - - getFunction(nameOrSignatureOrTopic: "IS_TEST" | "failed"): FunctionFragment; - - encodeFunctionData(functionFragment: "IS_TEST", values?: undefined): string; - encodeFunctionData(functionFragment: "failed", values?: undefined): string; - - decodeFunctionResult(functionFragment: "IS_TEST", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "failed", data: BytesLike): Result; - - events: { - "log(string)": EventFragment; - "log_address(address)": EventFragment; - "log_bytes(bytes)": EventFragment; - "log_bytes32(bytes32)": EventFragment; - "log_int(int256)": EventFragment; - "log_named_address(string,address)": EventFragment; - "log_named_bytes(string,bytes)": EventFragment; - "log_named_bytes32(string,bytes32)": EventFragment; - "log_named_decimal_int(string,int256,uint256)": EventFragment; - "log_named_decimal_uint(string,uint256,uint256)": EventFragment; - "log_named_int(string,int256)": EventFragment; - "log_named_string(string,string)": EventFragment; - "log_named_uint(string,uint256)": EventFragment; - "log_string(string)": EventFragment; - "log_uint(uint256)": EventFragment; - "logs(bytes)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "log"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "logs"): EventFragment; -} - -export interface logEventObject { - arg0: string; -} -export type logEvent = TypedEvent<[string], logEventObject>; - -export type logEventFilter = TypedEventFilter; - -export interface log_addressEventObject { - arg0: string; -} -export type log_addressEvent = TypedEvent<[string], log_addressEventObject>; - -export type log_addressEventFilter = TypedEventFilter; - -export interface log_bytesEventObject { - arg0: string; -} -export type log_bytesEvent = TypedEvent<[string], log_bytesEventObject>; - -export type log_bytesEventFilter = TypedEventFilter; - -export interface log_bytes32EventObject { - arg0: string; -} -export type log_bytes32Event = TypedEvent<[string], log_bytes32EventObject>; - -export type log_bytes32EventFilter = TypedEventFilter; - -export interface log_intEventObject { - arg0: BigNumber; -} -export type log_intEvent = TypedEvent<[BigNumber], log_intEventObject>; - -export type log_intEventFilter = TypedEventFilter; - -export interface log_named_addressEventObject { - key: string; - val: string; -} -export type log_named_addressEvent = TypedEvent< - [string, string], - log_named_addressEventObject ->; - -export type log_named_addressEventFilter = - TypedEventFilter; - -export interface log_named_bytesEventObject { - key: string; - val: string; -} -export type log_named_bytesEvent = TypedEvent< - [string, string], - log_named_bytesEventObject ->; - -export type log_named_bytesEventFilter = TypedEventFilter; - -export interface log_named_bytes32EventObject { - key: string; - val: string; -} -export type log_named_bytes32Event = TypedEvent< - [string, string], - log_named_bytes32EventObject ->; - -export type log_named_bytes32EventFilter = - TypedEventFilter; - -export interface log_named_decimal_intEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_intEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_intEventObject ->; - -export type log_named_decimal_intEventFilter = - TypedEventFilter; - -export interface log_named_decimal_uintEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_uintEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_uintEventObject ->; - -export type log_named_decimal_uintEventFilter = - TypedEventFilter; - -export interface log_named_intEventObject { - key: string; - val: BigNumber; -} -export type log_named_intEvent = TypedEvent< - [string, BigNumber], - log_named_intEventObject ->; - -export type log_named_intEventFilter = TypedEventFilter; - -export interface log_named_stringEventObject { - key: string; - val: string; -} -export type log_named_stringEvent = TypedEvent< - [string, string], - log_named_stringEventObject ->; - -export type log_named_stringEventFilter = - TypedEventFilter; - -export interface log_named_uintEventObject { - key: string; - val: BigNumber; -} -export type log_named_uintEvent = TypedEvent< - [string, BigNumber], - log_named_uintEventObject ->; - -export type log_named_uintEventFilter = TypedEventFilter; - -export interface log_stringEventObject { - arg0: string; -} -export type log_stringEvent = TypedEvent<[string], log_stringEventObject>; - -export type log_stringEventFilter = TypedEventFilter; - -export interface log_uintEventObject { - arg0: BigNumber; -} -export type log_uintEvent = TypedEvent<[BigNumber], log_uintEventObject>; - -export type log_uintEventFilter = TypedEventFilter; - -export interface logsEventObject { - arg0: string; -} -export type logsEvent = TypedEvent<[string], logsEventObject>; - -export type logsEventFilter = TypedEventFilter; - -export interface DSTest extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: DSTestInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - IS_TEST(overrides?: CallOverrides): Promise<[boolean]>; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - IS_TEST(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - IS_TEST(overrides?: CallOverrides): Promise; - - failed(overrides?: CallOverrides): Promise; - }; - - filters: { - "log(string)"(arg0?: null): logEventFilter; - log(arg0?: null): logEventFilter; - - "log_address(address)"(arg0?: null): log_addressEventFilter; - log_address(arg0?: null): log_addressEventFilter; - - "log_bytes(bytes)"(arg0?: null): log_bytesEventFilter; - log_bytes(arg0?: null): log_bytesEventFilter; - - "log_bytes32(bytes32)"(arg0?: null): log_bytes32EventFilter; - log_bytes32(arg0?: null): log_bytes32EventFilter; - - "log_int(int256)"(arg0?: null): log_intEventFilter; - log_int(arg0?: null): log_intEventFilter; - - "log_named_address(string,address)"( - key?: null, - val?: null - ): log_named_addressEventFilter; - log_named_address(key?: null, val?: null): log_named_addressEventFilter; - - "log_named_bytes(string,bytes)"( - key?: null, - val?: null - ): log_named_bytesEventFilter; - log_named_bytes(key?: null, val?: null): log_named_bytesEventFilter; - - "log_named_bytes32(string,bytes32)"( - key?: null, - val?: null - ): log_named_bytes32EventFilter; - log_named_bytes32(key?: null, val?: null): log_named_bytes32EventFilter; - - "log_named_decimal_int(string,int256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - log_named_decimal_int( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - - "log_named_decimal_uint(string,uint256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - log_named_decimal_uint( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - - "log_named_int(string,int256)"( - key?: null, - val?: null - ): log_named_intEventFilter; - log_named_int(key?: null, val?: null): log_named_intEventFilter; - - "log_named_string(string,string)"( - key?: null, - val?: null - ): log_named_stringEventFilter; - log_named_string(key?: null, val?: null): log_named_stringEventFilter; - - "log_named_uint(string,uint256)"( - key?: null, - val?: null - ): log_named_uintEventFilter; - log_named_uint(key?: null, val?: null): log_named_uintEventFilter; - - "log_string(string)"(arg0?: null): log_stringEventFilter; - log_string(arg0?: null): log_stringEventFilter; - - "log_uint(uint256)"(arg0?: null): log_uintEventFilter; - log_uint(arg0?: null): log_uintEventFilter; - - "logs(bytes)"(arg0?: null): logsEventFilter; - logs(arg0?: null): logsEventFilter; - }; - - estimateGas: { - IS_TEST(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - IS_TEST(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/src/types/contracts/test/lib/test.sol/index.ts b/src/types/contracts/test/lib/test.sol/index.ts deleted file mode 100644 index 40f98225..00000000 --- a/src/types/contracts/test/lib/test.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { DSTest } from "./DSTest"; diff --git a/src/types/contracts/test/mainnet/MainnetTokens.sol/MainnetTokensTestSuite.ts b/src/types/contracts/test/mainnet/MainnetTokens.sol/MainnetTokensTestSuite.ts deleted file mode 100644 index 3493ce9b..00000000 --- a/src/types/contracts/test/mainnet/MainnetTokens.sol/MainnetTokensTestSuite.ts +++ /dev/null @@ -1,346 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PayableOverrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface MainnetTokensTestSuiteInterface extends utils.Interface { - functions: { - "allowance(uint8,address,address)": FunctionFragment; - "approve(uint8,address,address,uint256)": FunctionFragment; - "approve(uint8,address,address)": FunctionFragment; - "balanceOf(uint8,address)": FunctionFragment; - "tokens(uint8)": FunctionFragment; - "topUpWETH()": FunctionFragment; - "transfer(uint8,address,uint256)": FunctionFragment; - "wethToken()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "allowance" - | "approve(uint8,address,address,uint256)" - | "approve(uint8,address,address)" - | "balanceOf" - | "tokens" - | "topUpWETH" - | "transfer" - | "wethToken" - ): FunctionFragment; - - encodeFunctionData( - functionFragment: "allowance", - values: [BigNumberish, string, string] - ): string; - encodeFunctionData( - functionFragment: "approve(uint8,address,address,uint256)", - values: [BigNumberish, string, string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "approve(uint8,address,address)", - values: [BigNumberish, string, string] - ): string; - encodeFunctionData( - functionFragment: "balanceOf", - values: [BigNumberish, string] - ): string; - encodeFunctionData( - functionFragment: "tokens", - values: [BigNumberish] - ): string; - encodeFunctionData(functionFragment: "topUpWETH", values?: undefined): string; - encodeFunctionData( - functionFragment: "transfer", - values: [BigNumberish, string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "wethToken", values?: undefined): string; - - decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "approve(uint8,address,address,uint256)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "approve(uint8,address,address)", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "tokens", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "topUpWETH", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "transfer", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "wethToken", data: BytesLike): Result; - - events: {}; -} - -export interface MainnetTokensTestSuite extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: MainnetTokensTestSuiteInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - allowance( - t: BigNumberish, - holder: string, - targetContract: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "approve(uint8,address,address,uint256)"( - t: BigNumberish, - holder: string, - targetContract: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(uint8,address,address)"( - t: BigNumberish, - holder: string, - targetContract: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf( - t: BigNumberish, - holder: string, - overrides?: CallOverrides - ): Promise<[BigNumber] & { balance: BigNumber }>; - - tokens(arg0: BigNumberish, overrides?: CallOverrides): Promise<[string]>; - - topUpWETH( - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - transfer( - t: BigNumberish, - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - wethToken(overrides?: CallOverrides): Promise<[string]>; - }; - - allowance( - t: BigNumberish, - holder: string, - targetContract: string, - overrides?: CallOverrides - ): Promise; - - "approve(uint8,address,address,uint256)"( - t: BigNumberish, - holder: string, - targetContract: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(uint8,address,address)"( - t: BigNumberish, - holder: string, - targetContract: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf( - t: BigNumberish, - holder: string, - overrides?: CallOverrides - ): Promise; - - tokens(arg0: BigNumberish, overrides?: CallOverrides): Promise; - - topUpWETH( - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - transfer( - t: BigNumberish, - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - wethToken(overrides?: CallOverrides): Promise; - - callStatic: { - allowance( - t: BigNumberish, - holder: string, - targetContract: string, - overrides?: CallOverrides - ): Promise; - - "approve(uint8,address,address,uint256)"( - t: BigNumberish, - holder: string, - targetContract: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "approve(uint8,address,address)"( - t: BigNumberish, - holder: string, - targetContract: string, - overrides?: CallOverrides - ): Promise; - - balanceOf( - t: BigNumberish, - holder: string, - overrides?: CallOverrides - ): Promise; - - tokens(arg0: BigNumberish, overrides?: CallOverrides): Promise; - - topUpWETH(overrides?: CallOverrides): Promise; - - transfer( - t: BigNumberish, - to: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - wethToken(overrides?: CallOverrides): Promise; - }; - - filters: {}; - - estimateGas: { - allowance( - t: BigNumberish, - holder: string, - targetContract: string, - overrides?: CallOverrides - ): Promise; - - "approve(uint8,address,address,uint256)"( - t: BigNumberish, - holder: string, - targetContract: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(uint8,address,address)"( - t: BigNumberish, - holder: string, - targetContract: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf( - t: BigNumberish, - holder: string, - overrides?: CallOverrides - ): Promise; - - tokens(arg0: BigNumberish, overrides?: CallOverrides): Promise; - - topUpWETH( - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - transfer( - t: BigNumberish, - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - wethToken(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - allowance( - t: BigNumberish, - holder: string, - targetContract: string, - overrides?: CallOverrides - ): Promise; - - "approve(uint8,address,address,uint256)"( - t: BigNumberish, - holder: string, - targetContract: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(uint8,address,address)"( - t: BigNumberish, - holder: string, - targetContract: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf( - t: BigNumberish, - holder: string, - overrides?: CallOverrides - ): Promise; - - tokens( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - topUpWETH( - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - transfer( - t: BigNumberish, - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - wethToken(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/test/mainnet/MainnetTokens.sol/index.ts b/src/types/contracts/test/mainnet/MainnetTokens.sol/index.ts deleted file mode 100644 index e1442c72..00000000 --- a/src/types/contracts/test/mainnet/MainnetTokens.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { MainnetTokensTestSuite } from "./MainnetTokensTestSuite"; diff --git a/src/types/contracts/test/mainnet/TotalValueCalculator.ts b/src/types/contracts/test/mainnet/TotalValueCalculator.ts deleted file mode 100644 index b4cf119d..00000000 --- a/src/types/contracts/test/mainnet/TotalValueCalculator.ts +++ /dev/null @@ -1,104 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../common"; - -export interface TotalValueCalculatorInterface extends utils.Interface { - functions: { - "saveTotalValue(address)": FunctionFragment; - }; - - getFunction(nameOrSignatureOrTopic: "saveTotalValue"): FunctionFragment; - - encodeFunctionData( - functionFragment: "saveTotalValue", - values: [string] - ): string; - - decodeFunctionResult( - functionFragment: "saveTotalValue", - data: BytesLike - ): Result; - - events: {}; -} - -export interface TotalValueCalculator extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: TotalValueCalculatorInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - saveTotalValue( - creditAccount: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - saveTotalValue( - creditAccount: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - saveTotalValue( - creditAccount: string, - overrides?: CallOverrides - ): Promise; - }; - - filters: {}; - - estimateGas: { - saveTotalValue( - creditAccount: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - saveTotalValue( - creditAccount: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/src/types/contracts/test/mainnet/index.ts b/src/types/contracts/test/mainnet/index.ts deleted file mode 100644 index 0529d2b9..00000000 --- a/src/types/contracts/test/mainnet/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type * as mainnetTokensSol from "./MainnetTokens.sol"; -export type { mainnetTokensSol }; -export type { TotalValueCalculator } from "./TotalValueCalculator"; diff --git a/src/types/contracts/test/mocks/adapters/AdapterMock.ts b/src/types/contracts/test/mocks/adapters/AdapterMock.ts deleted file mode 100644 index cf1f6013..00000000 --- a/src/types/contracts/test/mocks/adapters/AdapterMock.ts +++ /dev/null @@ -1,458 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface AdapterMockInterface extends utils.Interface { - functions: { - "_gearboxAdapterType()": FunctionFragment; - "_gearboxAdapterVersion()": FunctionFragment; - "creditFacade()": FunctionFragment; - "creditManager()": FunctionFragment; - "execute(bytes)": FunctionFragment; - "executeMaxAllowanceFastCheck(address,address,address,bytes,bool,bool)": FunctionFragment; - "executeMaxAllowanceFastCheck(address,address,bytes,bool,bool)": FunctionFragment; - "fullCheck(address)": FunctionFragment; - "safeExecuteFastCheck(address,address,bytes,bool,bool)": FunctionFragment; - "safeExecuteFastCheck(address,address,address,bytes,bool,bool)": FunctionFragment; - "targetContract()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "_gearboxAdapterType" - | "_gearboxAdapterVersion" - | "creditFacade" - | "creditManager" - | "execute" - | "executeMaxAllowanceFastCheck(address,address,address,bytes,bool,bool)" - | "executeMaxAllowanceFastCheck(address,address,bytes,bool,bool)" - | "fullCheck" - | "safeExecuteFastCheck(address,address,bytes,bool,bool)" - | "safeExecuteFastCheck(address,address,address,bytes,bool,bool)" - | "targetContract" - ): FunctionFragment; - - encodeFunctionData( - functionFragment: "_gearboxAdapterType", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "_gearboxAdapterVersion", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditFacade", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditManager", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "execute", values: [BytesLike]): string; - encodeFunctionData( - functionFragment: "executeMaxAllowanceFastCheck(address,address,address,bytes,bool,bool)", - values: [string, string, string, BytesLike, boolean, boolean] - ): string; - encodeFunctionData( - functionFragment: "executeMaxAllowanceFastCheck(address,address,bytes,bool,bool)", - values: [string, string, BytesLike, boolean, boolean] - ): string; - encodeFunctionData(functionFragment: "fullCheck", values: [string]): string; - encodeFunctionData( - functionFragment: "safeExecuteFastCheck(address,address,bytes,bool,bool)", - values: [string, string, BytesLike, boolean, boolean] - ): string; - encodeFunctionData( - functionFragment: "safeExecuteFastCheck(address,address,address,bytes,bool,bool)", - values: [string, string, string, BytesLike, boolean, boolean] - ): string; - encodeFunctionData( - functionFragment: "targetContract", - values?: undefined - ): string; - - decodeFunctionResult( - functionFragment: "_gearboxAdapterType", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "_gearboxAdapterVersion", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditFacade", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditManager", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "execute", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "executeMaxAllowanceFastCheck(address,address,address,bytes,bool,bool)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "executeMaxAllowanceFastCheck(address,address,bytes,bool,bool)", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "fullCheck", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "safeExecuteFastCheck(address,address,bytes,bool,bool)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "safeExecuteFastCheck(address,address,address,bytes,bool,bool)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "targetContract", - data: BytesLike - ): Result; - - events: {}; -} - -export interface AdapterMock extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: AdapterMockInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - _gearboxAdapterType(overrides?: CallOverrides): Promise<[number]>; - - _gearboxAdapterVersion(overrides?: CallOverrides): Promise<[number]>; - - creditFacade(overrides?: CallOverrides): Promise<[string]>; - - creditManager(overrides?: CallOverrides): Promise<[string]>; - - execute( - callData: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "executeMaxAllowanceFastCheck(address,address,address,bytes,bool,bool)"( - creditAccount: string, - tokenIn: string, - tokenOut: string, - callData: BytesLike, - allowTokenIn: boolean, - disableTokenIn: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "executeMaxAllowanceFastCheck(address,address,bytes,bool,bool)"( - tokenIn: string, - tokenOut: string, - callData: BytesLike, - allowTokenIn: boolean, - disableTokenIn: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fullCheck( - creditAccount: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "safeExecuteFastCheck(address,address,bytes,bool,bool)"( - tokenIn: string, - tokenOut: string, - callData: BytesLike, - allowTokenIn: boolean, - disableTokenIn: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "safeExecuteFastCheck(address,address,address,bytes,bool,bool)"( - creditAccount: string, - tokenIn: string, - tokenOut: string, - callData: BytesLike, - allowTokenIn: boolean, - disableTokenIn: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - targetContract(overrides?: CallOverrides): Promise<[string]>; - }; - - _gearboxAdapterType(overrides?: CallOverrides): Promise; - - _gearboxAdapterVersion(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - execute( - callData: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "executeMaxAllowanceFastCheck(address,address,address,bytes,bool,bool)"( - creditAccount: string, - tokenIn: string, - tokenOut: string, - callData: BytesLike, - allowTokenIn: boolean, - disableTokenIn: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "executeMaxAllowanceFastCheck(address,address,bytes,bool,bool)"( - tokenIn: string, - tokenOut: string, - callData: BytesLike, - allowTokenIn: boolean, - disableTokenIn: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fullCheck( - creditAccount: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "safeExecuteFastCheck(address,address,bytes,bool,bool)"( - tokenIn: string, - tokenOut: string, - callData: BytesLike, - allowTokenIn: boolean, - disableTokenIn: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "safeExecuteFastCheck(address,address,address,bytes,bool,bool)"( - creditAccount: string, - tokenIn: string, - tokenOut: string, - callData: BytesLike, - allowTokenIn: boolean, - disableTokenIn: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - targetContract(overrides?: CallOverrides): Promise; - - callStatic: { - _gearboxAdapterType(overrides?: CallOverrides): Promise; - - _gearboxAdapterVersion(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - execute(callData: BytesLike, overrides?: CallOverrides): Promise; - - "executeMaxAllowanceFastCheck(address,address,address,bytes,bool,bool)"( - creditAccount: string, - tokenIn: string, - tokenOut: string, - callData: BytesLike, - allowTokenIn: boolean, - disableTokenIn: boolean, - overrides?: CallOverrides - ): Promise; - - "executeMaxAllowanceFastCheck(address,address,bytes,bool,bool)"( - tokenIn: string, - tokenOut: string, - callData: BytesLike, - allowTokenIn: boolean, - disableTokenIn: boolean, - overrides?: CallOverrides - ): Promise; - - fullCheck(creditAccount: string, overrides?: CallOverrides): Promise; - - "safeExecuteFastCheck(address,address,bytes,bool,bool)"( - tokenIn: string, - tokenOut: string, - callData: BytesLike, - allowTokenIn: boolean, - disableTokenIn: boolean, - overrides?: CallOverrides - ): Promise; - - "safeExecuteFastCheck(address,address,address,bytes,bool,bool)"( - creditAccount: string, - tokenIn: string, - tokenOut: string, - callData: BytesLike, - allowTokenIn: boolean, - disableTokenIn: boolean, - overrides?: CallOverrides - ): Promise; - - targetContract(overrides?: CallOverrides): Promise; - }; - - filters: {}; - - estimateGas: { - _gearboxAdapterType(overrides?: CallOverrides): Promise; - - _gearboxAdapterVersion(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - execute( - callData: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "executeMaxAllowanceFastCheck(address,address,address,bytes,bool,bool)"( - creditAccount: string, - tokenIn: string, - tokenOut: string, - callData: BytesLike, - allowTokenIn: boolean, - disableTokenIn: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "executeMaxAllowanceFastCheck(address,address,bytes,bool,bool)"( - tokenIn: string, - tokenOut: string, - callData: BytesLike, - allowTokenIn: boolean, - disableTokenIn: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fullCheck( - creditAccount: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "safeExecuteFastCheck(address,address,bytes,bool,bool)"( - tokenIn: string, - tokenOut: string, - callData: BytesLike, - allowTokenIn: boolean, - disableTokenIn: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "safeExecuteFastCheck(address,address,address,bytes,bool,bool)"( - creditAccount: string, - tokenIn: string, - tokenOut: string, - callData: BytesLike, - allowTokenIn: boolean, - disableTokenIn: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - targetContract(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - _gearboxAdapterType( - overrides?: CallOverrides - ): Promise; - - _gearboxAdapterVersion( - overrides?: CallOverrides - ): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - execute( - callData: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "executeMaxAllowanceFastCheck(address,address,address,bytes,bool,bool)"( - creditAccount: string, - tokenIn: string, - tokenOut: string, - callData: BytesLike, - allowTokenIn: boolean, - disableTokenIn: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "executeMaxAllowanceFastCheck(address,address,bytes,bool,bool)"( - tokenIn: string, - tokenOut: string, - callData: BytesLike, - allowTokenIn: boolean, - disableTokenIn: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fullCheck( - creditAccount: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "safeExecuteFastCheck(address,address,bytes,bool,bool)"( - tokenIn: string, - tokenOut: string, - callData: BytesLike, - allowTokenIn: boolean, - disableTokenIn: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "safeExecuteFastCheck(address,address,address,bytes,bool,bool)"( - creditAccount: string, - tokenIn: string, - tokenOut: string, - callData: BytesLike, - allowTokenIn: boolean, - disableTokenIn: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - targetContract(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/test/mocks/adapters/TargetContractMock.ts b/src/types/contracts/test/mocks/adapters/TargetContractMock.ts deleted file mode 100644 index 44e02b06..00000000 --- a/src/types/contracts/test/mocks/adapters/TargetContractMock.ts +++ /dev/null @@ -1,81 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BytesLike, - CallOverrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface TargetContractMockInterface extends utils.Interface { - functions: { - "callData()": FunctionFragment; - }; - - getFunction(nameOrSignatureOrTopic: "callData"): FunctionFragment; - - encodeFunctionData(functionFragment: "callData", values?: undefined): string; - - decodeFunctionResult(functionFragment: "callData", data: BytesLike): Result; - - events: {}; -} - -export interface TargetContractMock extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: TargetContractMockInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - callData(overrides?: CallOverrides): Promise<[string]>; - }; - - callData(overrides?: CallOverrides): Promise; - - callStatic: { - callData(overrides?: CallOverrides): Promise; - }; - - filters: {}; - - estimateGas: { - callData(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - callData(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/test/mocks/adapters/index.ts b/src/types/contracts/test/mocks/adapters/index.ts deleted file mode 100644 index b8a4d4cf..00000000 --- a/src/types/contracts/test/mocks/adapters/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { AdapterMock } from "./AdapterMock"; -export type { TargetContractMock } from "./TargetContractMock"; diff --git a/src/types/contracts/test/mocks/core/ACLTraitTest.ts b/src/types/contracts/test/mocks/core/ACLTraitTest.ts deleted file mode 100644 index 3162173c..00000000 --- a/src/types/contracts/test/mocks/core/ACLTraitTest.ts +++ /dev/null @@ -1,238 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface ACLTraitTestInterface extends utils.Interface { - functions: { - "_acl()": FunctionFragment; - "accessConfiguratorOnly()": FunctionFragment; - "accessWhenNotPaused()": FunctionFragment; - "accessWhenPaused()": FunctionFragment; - "pause()": FunctionFragment; - "paused()": FunctionFragment; - "unpause()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "_acl" - | "accessConfiguratorOnly" - | "accessWhenNotPaused" - | "accessWhenPaused" - | "pause" - | "paused" - | "unpause" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "_acl", values?: undefined): string; - encodeFunctionData( - functionFragment: "accessConfiguratorOnly", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "accessWhenNotPaused", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "accessWhenPaused", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "pause", values?: undefined): string; - encodeFunctionData(functionFragment: "paused", values?: undefined): string; - encodeFunctionData(functionFragment: "unpause", values?: undefined): string; - - decodeFunctionResult(functionFragment: "_acl", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "accessConfiguratorOnly", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "accessWhenNotPaused", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "accessWhenPaused", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "pause", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "paused", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "unpause", data: BytesLike): Result; - - events: { - "Paused(address)": EventFragment; - "Unpaused(address)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "Paused"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Unpaused"): EventFragment; -} - -export interface PausedEventObject { - account: string; -} -export type PausedEvent = TypedEvent<[string], PausedEventObject>; - -export type PausedEventFilter = TypedEventFilter; - -export interface UnpausedEventObject { - account: string; -} -export type UnpausedEvent = TypedEvent<[string], UnpausedEventObject>; - -export type UnpausedEventFilter = TypedEventFilter; - -export interface ACLTraitTest extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: ACLTraitTestInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - _acl(overrides?: CallOverrides): Promise<[string]>; - - accessConfiguratorOnly(overrides?: CallOverrides): Promise<[void]>; - - accessWhenNotPaused(overrides?: CallOverrides): Promise<[void]>; - - accessWhenPaused(overrides?: CallOverrides): Promise<[void]>; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise<[boolean]>; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - _acl(overrides?: CallOverrides): Promise; - - accessConfiguratorOnly(overrides?: CallOverrides): Promise; - - accessWhenNotPaused(overrides?: CallOverrides): Promise; - - accessWhenPaused(overrides?: CallOverrides): Promise; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - _acl(overrides?: CallOverrides): Promise; - - accessConfiguratorOnly(overrides?: CallOverrides): Promise; - - accessWhenNotPaused(overrides?: CallOverrides): Promise; - - accessWhenPaused(overrides?: CallOverrides): Promise; - - pause(overrides?: CallOverrides): Promise; - - paused(overrides?: CallOverrides): Promise; - - unpause(overrides?: CallOverrides): Promise; - }; - - filters: { - "Paused(address)"(account?: null): PausedEventFilter; - Paused(account?: null): PausedEventFilter; - - "Unpaused(address)"(account?: null): UnpausedEventFilter; - Unpaused(account?: null): UnpausedEventFilter; - }; - - estimateGas: { - _acl(overrides?: CallOverrides): Promise; - - accessConfiguratorOnly(overrides?: CallOverrides): Promise; - - accessWhenNotPaused(overrides?: CallOverrides): Promise; - - accessWhenPaused(overrides?: CallOverrides): Promise; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - _acl(overrides?: CallOverrides): Promise; - - accessConfiguratorOnly( - overrides?: CallOverrides - ): Promise; - - accessWhenNotPaused( - overrides?: CallOverrides - ): Promise; - - accessWhenPaused(overrides?: CallOverrides): Promise; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/src/types/contracts/test/mocks/core/AddressProviderACLMock.ts b/src/types/contracts/test/mocks/core/AddressProviderACLMock.ts deleted file mode 100644 index 1646a2dd..00000000 --- a/src/types/contracts/test/mocks/core/AddressProviderACLMock.ts +++ /dev/null @@ -1,186 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface AddressProviderACLMockInterface extends utils.Interface { - functions: { - "getACL()": FunctionFragment; - "getPriceOracle()": FunctionFragment; - "isConfigurator(address)": FunctionFragment; - "priceFeeds(address)": FunctionFragment; - "setPriceFeed(address,address)": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "getACL" - | "getPriceOracle" - | "isConfigurator" - | "priceFeeds" - | "setPriceFeed" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "getACL", values?: undefined): string; - encodeFunctionData( - functionFragment: "getPriceOracle", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "isConfigurator", - values: [string] - ): string; - encodeFunctionData(functionFragment: "priceFeeds", values: [string]): string; - encodeFunctionData( - functionFragment: "setPriceFeed", - values: [string, string] - ): string; - - decodeFunctionResult(functionFragment: "getACL", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "getPriceOracle", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "isConfigurator", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "priceFeeds", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "setPriceFeed", - data: BytesLike - ): Result; - - events: {}; -} - -export interface AddressProviderACLMock extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: AddressProviderACLMockInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - getACL(overrides?: CallOverrides): Promise<[string]>; - - getPriceOracle(overrides?: CallOverrides): Promise<[string]>; - - isConfigurator(arg0: string, overrides?: CallOverrides): Promise<[boolean]>; - - priceFeeds(arg0: string, overrides?: CallOverrides): Promise<[string]>; - - setPriceFeed( - token: string, - feed: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - getACL(overrides?: CallOverrides): Promise; - - getPriceOracle(overrides?: CallOverrides): Promise; - - isConfigurator(arg0: string, overrides?: CallOverrides): Promise; - - priceFeeds(arg0: string, overrides?: CallOverrides): Promise; - - setPriceFeed( - token: string, - feed: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - getACL(overrides?: CallOverrides): Promise; - - getPriceOracle(overrides?: CallOverrides): Promise; - - isConfigurator(arg0: string, overrides?: CallOverrides): Promise; - - priceFeeds(arg0: string, overrides?: CallOverrides): Promise; - - setPriceFeed( - token: string, - feed: string, - overrides?: CallOverrides - ): Promise; - }; - - filters: {}; - - estimateGas: { - getACL(overrides?: CallOverrides): Promise; - - getPriceOracle(overrides?: CallOverrides): Promise; - - isConfigurator(arg0: string, overrides?: CallOverrides): Promise; - - priceFeeds(arg0: string, overrides?: CallOverrides): Promise; - - setPriceFeed( - token: string, - feed: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - getACL(overrides?: CallOverrides): Promise; - - getPriceOracle(overrides?: CallOverrides): Promise; - - isConfigurator( - arg0: string, - overrides?: CallOverrides - ): Promise; - - priceFeeds( - arg0: string, - overrides?: CallOverrides - ): Promise; - - setPriceFeed( - token: string, - feed: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/src/types/contracts/test/mocks/core/index.ts b/src/types/contracts/test/mocks/core/index.ts deleted file mode 100644 index 4f124f20..00000000 --- a/src/types/contracts/test/mocks/core/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { ACLTraitTest } from "./ACLTraitTest"; -export type { AddressProviderACLMock } from "./AddressProviderACLMock"; diff --git a/src/types/contracts/test/mocks/credit/CreditManagerInternal.ts b/src/types/contracts/test/mocks/credit/CreditManagerInternal.ts deleted file mode 100644 index 2192ba05..00000000 --- a/src/types/contracts/test/mocks/credit/CreditManagerInternal.ts +++ /dev/null @@ -1,2197 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface CreditManagerInternalInterface extends utils.Interface { - functions: { - "_accountFactory()": FunctionFragment; - "_acl()": FunctionFragment; - "adapterToContract(address)": FunctionFragment; - "addCollateral(address,address,address,uint256)": FunctionFragment; - "addToken(address)": FunctionFragment; - "approveCreditAccount(address,address,address,uint256)": FunctionFragment; - "calcClosePayments(uint256,uint8,uint256,uint256)": FunctionFragment; - "calcClosePaymentsPure(uint256,uint8,uint256,uint256)": FunctionFragment; - "calcCreditAccountAccruedInterest(address)": FunctionFragment; - "changeContractAllowance(address,address)": FunctionFragment; - "checkAndEnableToken(address,address)": FunctionFragment; - "checkAndOptimizeEnabledTokens(address)": FunctionFragment; - "closeCreditAccount(address,uint8,uint256,address,address,uint256,bool)": FunctionFragment; - "collateralTokens(uint256)": FunctionFragment; - "collateralTokensByMask(uint256)": FunctionFragment; - "collateralTokensCount()": FunctionFragment; - "collateralTokensInternal()": FunctionFragment; - "contractToAdapter(address)": FunctionFragment; - "creditAccounts(address)": FunctionFragment; - "creditConfigurator()": FunctionFragment; - "creditFacade()": FunctionFragment; - "cumulativeDropAtFastCheckRAY(address)": FunctionFragment; - "disableToken(address,address)": FunctionFragment; - "enabledTokensMap(address)": FunctionFragment; - "executeOrder(address,address,bytes)": FunctionFragment; - "fastCollateralCheck(address,address,address,uint256,uint256)": FunctionFragment; - "fees()": FunctionFragment; - "forbiddenTokenMask()": FunctionFragment; - "fullCollateralCheck(address)": FunctionFragment; - "getCreditAccountOrRevert(address)": FunctionFragment; - "getCreditAccountParameters(address)": FunctionFragment; - "getMaxIndex(uint256)": FunctionFragment; - "getSlotBytes(uint256)": FunctionFragment; - "liquidationThresholds(address)": FunctionFragment; - "manageDebt(address,uint256,bool)": FunctionFragment; - "maxAllowedEnabledTokenLength()": FunctionFragment; - "openCreditAccount(uint256,address)": FunctionFragment; - "pause()": FunctionFragment; - "paused()": FunctionFragment; - "pool()": FunctionFragment; - "poolService()": FunctionFragment; - "priceOracle()": FunctionFragment; - "safeTokenTransfer(address,address,address,uint256,bool)": FunctionFragment; - "setConfigurator(address)": FunctionFragment; - "setCumulativeDropAtFastCheck(address,uint16)": FunctionFragment; - "setForbidMask(uint256)": FunctionFragment; - "setLiquidationThreshold(address,uint16)": FunctionFragment; - "setMaxEnabledTokens(uint8)": FunctionFragment; - "setParams(uint16,uint16,uint16,uint16,uint16)": FunctionFragment; - "tokenMasksMap(address)": FunctionFragment; - "transferAccountOwnership(address,address)": FunctionFragment; - "transferAssetsTo(address,address,bool,uint256)": FunctionFragment; - "underlying()": FunctionFragment; - "universalAdapter()": FunctionFragment; - "unpause()": FunctionFragment; - "upgradeContracts(address,address)": FunctionFragment; - "version()": FunctionFragment; - "wethAddress()": FunctionFragment; - "wethGateway()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "_accountFactory" - | "_acl" - | "adapterToContract" - | "addCollateral" - | "addToken" - | "approveCreditAccount" - | "calcClosePayments" - | "calcClosePaymentsPure" - | "calcCreditAccountAccruedInterest" - | "changeContractAllowance" - | "checkAndEnableToken" - | "checkAndOptimizeEnabledTokens" - | "closeCreditAccount" - | "collateralTokens" - | "collateralTokensByMask" - | "collateralTokensCount" - | "collateralTokensInternal" - | "contractToAdapter" - | "creditAccounts" - | "creditConfigurator" - | "creditFacade" - | "cumulativeDropAtFastCheckRAY" - | "disableToken" - | "enabledTokensMap" - | "executeOrder" - | "fastCollateralCheck" - | "fees" - | "forbiddenTokenMask" - | "fullCollateralCheck" - | "getCreditAccountOrRevert" - | "getCreditAccountParameters" - | "getMaxIndex" - | "getSlotBytes" - | "liquidationThresholds" - | "manageDebt" - | "maxAllowedEnabledTokenLength" - | "openCreditAccount" - | "pause" - | "paused" - | "pool" - | "poolService" - | "priceOracle" - | "safeTokenTransfer" - | "setConfigurator" - | "setCumulativeDropAtFastCheck" - | "setForbidMask" - | "setLiquidationThreshold" - | "setMaxEnabledTokens" - | "setParams" - | "tokenMasksMap" - | "transferAccountOwnership" - | "transferAssetsTo" - | "underlying" - | "universalAdapter" - | "unpause" - | "upgradeContracts" - | "version" - | "wethAddress" - | "wethGateway" - ): FunctionFragment; - - encodeFunctionData( - functionFragment: "_accountFactory", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "_acl", values?: undefined): string; - encodeFunctionData( - functionFragment: "adapterToContract", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "addCollateral", - values: [string, string, string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "addToken", values: [string]): string; - encodeFunctionData( - functionFragment: "approveCreditAccount", - values: [string, string, string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "calcClosePayments", - values: [BigNumberish, BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "calcClosePaymentsPure", - values: [BigNumberish, BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "calcCreditAccountAccruedInterest", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "changeContractAllowance", - values: [string, string] - ): string; - encodeFunctionData( - functionFragment: "checkAndEnableToken", - values: [string, string] - ): string; - encodeFunctionData( - functionFragment: "checkAndOptimizeEnabledTokens", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "closeCreditAccount", - values: [ - string, - BigNumberish, - BigNumberish, - string, - string, - BigNumberish, - boolean - ] - ): string; - encodeFunctionData( - functionFragment: "collateralTokens", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "collateralTokensByMask", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "collateralTokensCount", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "collateralTokensInternal", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "contractToAdapter", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "creditAccounts", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "creditConfigurator", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditFacade", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "cumulativeDropAtFastCheckRAY", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "disableToken", - values: [string, string] - ): string; - encodeFunctionData( - functionFragment: "enabledTokensMap", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "executeOrder", - values: [string, string, BytesLike] - ): string; - encodeFunctionData( - functionFragment: "fastCollateralCheck", - values: [string, string, string, BigNumberish, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "fees", values?: undefined): string; - encodeFunctionData( - functionFragment: "forbiddenTokenMask", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "fullCollateralCheck", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "getCreditAccountOrRevert", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "getCreditAccountParameters", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "getMaxIndex", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "getSlotBytes", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "liquidationThresholds", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "manageDebt", - values: [string, BigNumberish, boolean] - ): string; - encodeFunctionData( - functionFragment: "maxAllowedEnabledTokenLength", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "openCreditAccount", - values: [BigNumberish, string] - ): string; - encodeFunctionData(functionFragment: "pause", values?: undefined): string; - encodeFunctionData(functionFragment: "paused", values?: undefined): string; - encodeFunctionData(functionFragment: "pool", values?: undefined): string; - encodeFunctionData( - functionFragment: "poolService", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "priceOracle", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "safeTokenTransfer", - values: [string, string, string, BigNumberish, boolean] - ): string; - encodeFunctionData( - functionFragment: "setConfigurator", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "setCumulativeDropAtFastCheck", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "setForbidMask", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "setLiquidationThreshold", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "setMaxEnabledTokens", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "setParams", - values: [ - BigNumberish, - BigNumberish, - BigNumberish, - BigNumberish, - BigNumberish - ] - ): string; - encodeFunctionData( - functionFragment: "tokenMasksMap", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "transferAccountOwnership", - values: [string, string] - ): string; - encodeFunctionData( - functionFragment: "transferAssetsTo", - values: [string, string, boolean, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "underlying", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "universalAdapter", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "unpause", values?: undefined): string; - encodeFunctionData( - functionFragment: "upgradeContracts", - values: [string, string] - ): string; - encodeFunctionData(functionFragment: "version", values?: undefined): string; - encodeFunctionData( - functionFragment: "wethAddress", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "wethGateway", - values?: undefined - ): string; - - decodeFunctionResult( - functionFragment: "_accountFactory", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "_acl", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "adapterToContract", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "addCollateral", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "addToken", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "approveCreditAccount", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "calcClosePayments", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "calcClosePaymentsPure", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "calcCreditAccountAccruedInterest", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "changeContractAllowance", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "checkAndEnableToken", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "checkAndOptimizeEnabledTokens", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "closeCreditAccount", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "collateralTokens", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "collateralTokensByMask", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "collateralTokensCount", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "collateralTokensInternal", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "contractToAdapter", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditAccounts", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditConfigurator", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditFacade", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "cumulativeDropAtFastCheckRAY", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "disableToken", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "enabledTokensMap", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "executeOrder", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "fastCollateralCheck", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "fees", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "forbiddenTokenMask", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "fullCollateralCheck", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getCreditAccountOrRevert", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getCreditAccountParameters", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getMaxIndex", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getSlotBytes", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "liquidationThresholds", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "manageDebt", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "maxAllowedEnabledTokenLength", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "openCreditAccount", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "pause", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "paused", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "pool", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "poolService", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "priceOracle", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "safeTokenTransfer", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "setConfigurator", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "setCumulativeDropAtFastCheck", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "setForbidMask", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "setLiquidationThreshold", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "setMaxEnabledTokens", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "setParams", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "tokenMasksMap", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "transferAccountOwnership", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "transferAssetsTo", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "underlying", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "universalAdapter", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "unpause", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "upgradeContracts", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "version", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "wethAddress", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "wethGateway", - data: BytesLike - ): Result; - - events: { - "ExecuteOrder(address,address)": EventFragment; - "NewConfigurator(address)": EventFragment; - "Paused(address)": EventFragment; - "Unpaused(address)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "ExecuteOrder"): EventFragment; - getEvent(nameOrSignatureOrTopic: "NewConfigurator"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Paused"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Unpaused"): EventFragment; -} - -export interface ExecuteOrderEventObject { - borrower: string; - target: string; -} -export type ExecuteOrderEvent = TypedEvent< - [string, string], - ExecuteOrderEventObject ->; - -export type ExecuteOrderEventFilter = TypedEventFilter; - -export interface NewConfiguratorEventObject { - newConfigurator: string; -} -export type NewConfiguratorEvent = TypedEvent< - [string], - NewConfiguratorEventObject ->; - -export type NewConfiguratorEventFilter = TypedEventFilter; - -export interface PausedEventObject { - account: string; -} -export type PausedEvent = TypedEvent<[string], PausedEventObject>; - -export type PausedEventFilter = TypedEventFilter; - -export interface UnpausedEventObject { - account: string; -} -export type UnpausedEvent = TypedEvent<[string], UnpausedEventObject>; - -export type UnpausedEventFilter = TypedEventFilter; - -export interface CreditManagerInternal extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: CreditManagerInternalInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - _accountFactory(overrides?: CallOverrides): Promise<[string]>; - - _acl(overrides?: CallOverrides): Promise<[string]>; - - adapterToContract( - arg0: string, - overrides?: CallOverrides - ): Promise<[string]>; - - addCollateral( - payer: string, - creditAccount: string, - token: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - addToken( - token: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - approveCreditAccount( - borrower: string, - targetContract: string, - token: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - calcClosePayments( - totalValue: BigNumberish, - closureActionType: BigNumberish, - borrowedAmount: BigNumberish, - borrowedAmountWithInterest: BigNumberish, - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber, BigNumber, BigNumber] & { - amountToPool: BigNumber; - remainingFunds: BigNumber; - profit: BigNumber; - loss: BigNumber; - } - >; - - calcClosePaymentsPure( - totalValue: BigNumberish, - closureActionType: BigNumberish, - borrowedAmount: BigNumberish, - borrowedAmountWithInterest: BigNumberish, - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber, BigNumber, BigNumber] & { - amountToPool: BigNumber; - remainingFunds: BigNumber; - profit: BigNumber; - loss: BigNumber; - } - >; - - calcCreditAccountAccruedInterest( - creditAccount: string, - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber] & { - borrowedAmount: BigNumber; - borrowedAmountWithInterest: BigNumber; - } - >; - - changeContractAllowance( - adapter: string, - targetContract: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - checkAndEnableToken( - creditAccount: string, - tokenOut: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - checkAndOptimizeEnabledTokens( - creditAccount: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - closeCreditAccount( - borrower: string, - closureActionType: BigNumberish, - totalValue: BigNumberish, - payer: string, - to: string, - skipTokenMask: BigNumberish, - convertWETH: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - collateralTokens( - id: BigNumberish, - overrides?: CallOverrides - ): Promise< - [string, number] & { token: string; liquidationThreshold: number } - >; - - collateralTokensByMask( - tokenMask: BigNumberish, - overrides?: CallOverrides - ): Promise< - [string, number] & { token: string; liquidationThreshold: number } - >; - - collateralTokensCount(overrides?: CallOverrides): Promise<[BigNumber]>; - - collateralTokensInternal( - overrides?: CallOverrides - ): Promise<[string[]] & { collateralTokensAddr: string[] }>; - - contractToAdapter( - arg0: string, - overrides?: CallOverrides - ): Promise<[string]>; - - creditAccounts(arg0: string, overrides?: CallOverrides): Promise<[string]>; - - creditConfigurator(overrides?: CallOverrides): Promise<[string]>; - - creditFacade(overrides?: CallOverrides): Promise<[string]>; - - cumulativeDropAtFastCheckRAY( - arg0: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - disableToken( - creditAccount: string, - token: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - enabledTokensMap( - arg0: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - executeOrder( - borrower: string, - targetContract: string, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fastCollateralCheck( - creditAccount: string, - tokenIn: string, - tokenOut: string, - balanceInBefore: BigNumberish, - balanceOutBefore: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fees( - overrides?: CallOverrides - ): Promise< - [number, number, number, number, number] & { - feeInterest: number; - feeLiquidation: number; - liquidationDiscount: number; - feeLiquidationExpired: number; - liquidationDiscountExpired: number; - } - >; - - forbiddenTokenMask(overrides?: CallOverrides): Promise<[BigNumber]>; - - fullCollateralCheck( - creditAccount: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getCreditAccountOrRevert( - borrower: string, - overrides?: CallOverrides - ): Promise<[string] & { result: string }>; - - getCreditAccountParameters( - creditAccount: string, - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber, BigNumber] & { - borrowedAmount: BigNumber; - cumulativeIndexAtOpen: BigNumber; - cumulativeIndexNow: BigNumber; - } - >; - - getMaxIndex( - mask: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber] & { index: BigNumber }>; - - getSlotBytes( - slotNum: BigNumberish, - overrides?: CallOverrides - ): Promise<[string] & { slotVal: string }>; - - liquidationThresholds( - token: string, - overrides?: CallOverrides - ): Promise<[number] & { lt: number }>; - - manageDebt( - creditAccount: string, - amount: BigNumberish, - increase: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - maxAllowedEnabledTokenLength(overrides?: CallOverrides): Promise<[number]>; - - openCreditAccount( - borrowedAmount: BigNumberish, - onBehalfOf: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise<[boolean]>; - - pool(overrides?: CallOverrides): Promise<[string]>; - - poolService(overrides?: CallOverrides): Promise<[string]>; - - priceOracle(overrides?: CallOverrides): Promise<[string]>; - - safeTokenTransfer( - creditAccount: string, - token: string, - to: string, - amount: BigNumberish, - convertToETH: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setConfigurator( - _creditConfigurator: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setCumulativeDropAtFastCheck( - creditAccount: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setForbidMask( - _forbidMask: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setLiquidationThreshold( - token: string, - liquidationThreshold: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setMaxEnabledTokens( - newMaxEnabledTokens: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setParams( - _feeInterest: BigNumberish, - _feeLiquidation: BigNumberish, - _liquidationDiscount: BigNumberish, - _feeLiquidationExpired: BigNumberish, - _liquidationDiscountExpired: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - tokenMasksMap( - token: string, - overrides?: CallOverrides - ): Promise<[BigNumber] & { mask: BigNumber }>; - - transferAccountOwnership( - from: string, - to: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferAssetsTo( - creditAccount: string, - to: string, - convertWETH: boolean, - enabledTokenMask: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise<[string]>; - - universalAdapter(overrides?: CallOverrides): Promise<[string]>; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upgradeContracts( - _creditFacade: string, - _priceOracle: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise<[BigNumber]>; - - wethAddress(overrides?: CallOverrides): Promise<[string]>; - - wethGateway(overrides?: CallOverrides): Promise<[string]>; - }; - - _accountFactory(overrides?: CallOverrides): Promise; - - _acl(overrides?: CallOverrides): Promise; - - adapterToContract(arg0: string, overrides?: CallOverrides): Promise; - - addCollateral( - payer: string, - creditAccount: string, - token: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - addToken( - token: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - approveCreditAccount( - borrower: string, - targetContract: string, - token: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - calcClosePayments( - totalValue: BigNumberish, - closureActionType: BigNumberish, - borrowedAmount: BigNumberish, - borrowedAmountWithInterest: BigNumberish, - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber, BigNumber, BigNumber] & { - amountToPool: BigNumber; - remainingFunds: BigNumber; - profit: BigNumber; - loss: BigNumber; - } - >; - - calcClosePaymentsPure( - totalValue: BigNumberish, - closureActionType: BigNumberish, - borrowedAmount: BigNumberish, - borrowedAmountWithInterest: BigNumberish, - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber, BigNumber, BigNumber] & { - amountToPool: BigNumber; - remainingFunds: BigNumber; - profit: BigNumber; - loss: BigNumber; - } - >; - - calcCreditAccountAccruedInterest( - creditAccount: string, - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber] & { - borrowedAmount: BigNumber; - borrowedAmountWithInterest: BigNumber; - } - >; - - changeContractAllowance( - adapter: string, - targetContract: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - checkAndEnableToken( - creditAccount: string, - tokenOut: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - checkAndOptimizeEnabledTokens( - creditAccount: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - closeCreditAccount( - borrower: string, - closureActionType: BigNumberish, - totalValue: BigNumberish, - payer: string, - to: string, - skipTokenMask: BigNumberish, - convertWETH: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - collateralTokens( - id: BigNumberish, - overrides?: CallOverrides - ): Promise< - [string, number] & { token: string; liquidationThreshold: number } - >; - - collateralTokensByMask( - tokenMask: BigNumberish, - overrides?: CallOverrides - ): Promise< - [string, number] & { token: string; liquidationThreshold: number } - >; - - collateralTokensCount(overrides?: CallOverrides): Promise; - - collateralTokensInternal(overrides?: CallOverrides): Promise; - - contractToAdapter(arg0: string, overrides?: CallOverrides): Promise; - - creditAccounts(arg0: string, overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - cumulativeDropAtFastCheckRAY( - arg0: string, - overrides?: CallOverrides - ): Promise; - - disableToken( - creditAccount: string, - token: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - enabledTokensMap(arg0: string, overrides?: CallOverrides): Promise; - - executeOrder( - borrower: string, - targetContract: string, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fastCollateralCheck( - creditAccount: string, - tokenIn: string, - tokenOut: string, - balanceInBefore: BigNumberish, - balanceOutBefore: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fees( - overrides?: CallOverrides - ): Promise< - [number, number, number, number, number] & { - feeInterest: number; - feeLiquidation: number; - liquidationDiscount: number; - feeLiquidationExpired: number; - liquidationDiscountExpired: number; - } - >; - - forbiddenTokenMask(overrides?: CallOverrides): Promise; - - fullCollateralCheck( - creditAccount: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getCreditAccountOrRevert( - borrower: string, - overrides?: CallOverrides - ): Promise; - - getCreditAccountParameters( - creditAccount: string, - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber, BigNumber] & { - borrowedAmount: BigNumber; - cumulativeIndexAtOpen: BigNumber; - cumulativeIndexNow: BigNumber; - } - >; - - getMaxIndex( - mask: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getSlotBytes( - slotNum: BigNumberish, - overrides?: CallOverrides - ): Promise; - - liquidationThresholds( - token: string, - overrides?: CallOverrides - ): Promise; - - manageDebt( - creditAccount: string, - amount: BigNumberish, - increase: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - maxAllowedEnabledTokenLength(overrides?: CallOverrides): Promise; - - openCreditAccount( - borrowedAmount: BigNumberish, - onBehalfOf: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise; - - pool(overrides?: CallOverrides): Promise; - - poolService(overrides?: CallOverrides): Promise; - - priceOracle(overrides?: CallOverrides): Promise; - - safeTokenTransfer( - creditAccount: string, - token: string, - to: string, - amount: BigNumberish, - convertToETH: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setConfigurator( - _creditConfigurator: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setCumulativeDropAtFastCheck( - creditAccount: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setForbidMask( - _forbidMask: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setLiquidationThreshold( - token: string, - liquidationThreshold: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setMaxEnabledTokens( - newMaxEnabledTokens: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setParams( - _feeInterest: BigNumberish, - _feeLiquidation: BigNumberish, - _liquidationDiscount: BigNumberish, - _feeLiquidationExpired: BigNumberish, - _liquidationDiscountExpired: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - tokenMasksMap(token: string, overrides?: CallOverrides): Promise; - - transferAccountOwnership( - from: string, - to: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferAssetsTo( - creditAccount: string, - to: string, - convertWETH: boolean, - enabledTokenMask: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - - universalAdapter(overrides?: CallOverrides): Promise; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upgradeContracts( - _creditFacade: string, - _priceOracle: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise; - - wethAddress(overrides?: CallOverrides): Promise; - - wethGateway(overrides?: CallOverrides): Promise; - - callStatic: { - _accountFactory(overrides?: CallOverrides): Promise; - - _acl(overrides?: CallOverrides): Promise; - - adapterToContract(arg0: string, overrides?: CallOverrides): Promise; - - addCollateral( - payer: string, - creditAccount: string, - token: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - addToken(token: string, overrides?: CallOverrides): Promise; - - approveCreditAccount( - borrower: string, - targetContract: string, - token: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - calcClosePayments( - totalValue: BigNumberish, - closureActionType: BigNumberish, - borrowedAmount: BigNumberish, - borrowedAmountWithInterest: BigNumberish, - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber, BigNumber, BigNumber] & { - amountToPool: BigNumber; - remainingFunds: BigNumber; - profit: BigNumber; - loss: BigNumber; - } - >; - - calcClosePaymentsPure( - totalValue: BigNumberish, - closureActionType: BigNumberish, - borrowedAmount: BigNumberish, - borrowedAmountWithInterest: BigNumberish, - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber, BigNumber, BigNumber] & { - amountToPool: BigNumber; - remainingFunds: BigNumber; - profit: BigNumber; - loss: BigNumber; - } - >; - - calcCreditAccountAccruedInterest( - creditAccount: string, - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber] & { - borrowedAmount: BigNumber; - borrowedAmountWithInterest: BigNumber; - } - >; - - changeContractAllowance( - adapter: string, - targetContract: string, - overrides?: CallOverrides - ): Promise; - - checkAndEnableToken( - creditAccount: string, - tokenOut: string, - overrides?: CallOverrides - ): Promise; - - checkAndOptimizeEnabledTokens( - creditAccount: string, - overrides?: CallOverrides - ): Promise; - - closeCreditAccount( - borrower: string, - closureActionType: BigNumberish, - totalValue: BigNumberish, - payer: string, - to: string, - skipTokenMask: BigNumberish, - convertWETH: boolean, - overrides?: CallOverrides - ): Promise; - - collateralTokens( - id: BigNumberish, - overrides?: CallOverrides - ): Promise< - [string, number] & { token: string; liquidationThreshold: number } - >; - - collateralTokensByMask( - tokenMask: BigNumberish, - overrides?: CallOverrides - ): Promise< - [string, number] & { token: string; liquidationThreshold: number } - >; - - collateralTokensCount(overrides?: CallOverrides): Promise; - - collateralTokensInternal(overrides?: CallOverrides): Promise; - - contractToAdapter(arg0: string, overrides?: CallOverrides): Promise; - - creditAccounts(arg0: string, overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - cumulativeDropAtFastCheckRAY( - arg0: string, - overrides?: CallOverrides - ): Promise; - - disableToken( - creditAccount: string, - token: string, - overrides?: CallOverrides - ): Promise; - - enabledTokensMap( - arg0: string, - overrides?: CallOverrides - ): Promise; - - executeOrder( - borrower: string, - targetContract: string, - data: BytesLike, - overrides?: CallOverrides - ): Promise; - - fastCollateralCheck( - creditAccount: string, - tokenIn: string, - tokenOut: string, - balanceInBefore: BigNumberish, - balanceOutBefore: BigNumberish, - overrides?: CallOverrides - ): Promise; - - fees( - overrides?: CallOverrides - ): Promise< - [number, number, number, number, number] & { - feeInterest: number; - feeLiquidation: number; - liquidationDiscount: number; - feeLiquidationExpired: number; - liquidationDiscountExpired: number; - } - >; - - forbiddenTokenMask(overrides?: CallOverrides): Promise; - - fullCollateralCheck( - creditAccount: string, - overrides?: CallOverrides - ): Promise; - - getCreditAccountOrRevert( - borrower: string, - overrides?: CallOverrides - ): Promise; - - getCreditAccountParameters( - creditAccount: string, - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber, BigNumber] & { - borrowedAmount: BigNumber; - cumulativeIndexAtOpen: BigNumber; - cumulativeIndexNow: BigNumber; - } - >; - - getMaxIndex( - mask: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getSlotBytes( - slotNum: BigNumberish, - overrides?: CallOverrides - ): Promise; - - liquidationThresholds( - token: string, - overrides?: CallOverrides - ): Promise; - - manageDebt( - creditAccount: string, - amount: BigNumberish, - increase: boolean, - overrides?: CallOverrides - ): Promise; - - maxAllowedEnabledTokenLength(overrides?: CallOverrides): Promise; - - openCreditAccount( - borrowedAmount: BigNumberish, - onBehalfOf: string, - overrides?: CallOverrides - ): Promise; - - pause(overrides?: CallOverrides): Promise; - - paused(overrides?: CallOverrides): Promise; - - pool(overrides?: CallOverrides): Promise; - - poolService(overrides?: CallOverrides): Promise; - - priceOracle(overrides?: CallOverrides): Promise; - - safeTokenTransfer( - creditAccount: string, - token: string, - to: string, - amount: BigNumberish, - convertToETH: boolean, - overrides?: CallOverrides - ): Promise; - - setConfigurator( - _creditConfigurator: string, - overrides?: CallOverrides - ): Promise; - - setCumulativeDropAtFastCheck( - creditAccount: string, - value: BigNumberish, - overrides?: CallOverrides - ): Promise; - - setForbidMask( - _forbidMask: BigNumberish, - overrides?: CallOverrides - ): Promise; - - setLiquidationThreshold( - token: string, - liquidationThreshold: BigNumberish, - overrides?: CallOverrides - ): Promise; - - setMaxEnabledTokens( - newMaxEnabledTokens: BigNumberish, - overrides?: CallOverrides - ): Promise; - - setParams( - _feeInterest: BigNumberish, - _feeLiquidation: BigNumberish, - _liquidationDiscount: BigNumberish, - _feeLiquidationExpired: BigNumberish, - _liquidationDiscountExpired: BigNumberish, - overrides?: CallOverrides - ): Promise; - - tokenMasksMap(token: string, overrides?: CallOverrides): Promise; - - transferAccountOwnership( - from: string, - to: string, - overrides?: CallOverrides - ): Promise; - - transferAssetsTo( - creditAccount: string, - to: string, - convertWETH: boolean, - enabledTokenMask: BigNumberish, - overrides?: CallOverrides - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - - universalAdapter(overrides?: CallOverrides): Promise; - - unpause(overrides?: CallOverrides): Promise; - - upgradeContracts( - _creditFacade: string, - _priceOracle: string, - overrides?: CallOverrides - ): Promise; - - version(overrides?: CallOverrides): Promise; - - wethAddress(overrides?: CallOverrides): Promise; - - wethGateway(overrides?: CallOverrides): Promise; - }; - - filters: { - "ExecuteOrder(address,address)"( - borrower?: string | null, - target?: string | null - ): ExecuteOrderEventFilter; - ExecuteOrder( - borrower?: string | null, - target?: string | null - ): ExecuteOrderEventFilter; - - "NewConfigurator(address)"( - newConfigurator?: string | null - ): NewConfiguratorEventFilter; - NewConfigurator( - newConfigurator?: string | null - ): NewConfiguratorEventFilter; - - "Paused(address)"(account?: null): PausedEventFilter; - Paused(account?: null): PausedEventFilter; - - "Unpaused(address)"(account?: null): UnpausedEventFilter; - Unpaused(account?: null): UnpausedEventFilter; - }; - - estimateGas: { - _accountFactory(overrides?: CallOverrides): Promise; - - _acl(overrides?: CallOverrides): Promise; - - adapterToContract( - arg0: string, - overrides?: CallOverrides - ): Promise; - - addCollateral( - payer: string, - creditAccount: string, - token: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - addToken( - token: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - approveCreditAccount( - borrower: string, - targetContract: string, - token: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - calcClosePayments( - totalValue: BigNumberish, - closureActionType: BigNumberish, - borrowedAmount: BigNumberish, - borrowedAmountWithInterest: BigNumberish, - overrides?: CallOverrides - ): Promise; - - calcClosePaymentsPure( - totalValue: BigNumberish, - closureActionType: BigNumberish, - borrowedAmount: BigNumberish, - borrowedAmountWithInterest: BigNumberish, - overrides?: CallOverrides - ): Promise; - - calcCreditAccountAccruedInterest( - creditAccount: string, - overrides?: CallOverrides - ): Promise; - - changeContractAllowance( - adapter: string, - targetContract: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - checkAndEnableToken( - creditAccount: string, - tokenOut: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - checkAndOptimizeEnabledTokens( - creditAccount: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - closeCreditAccount( - borrower: string, - closureActionType: BigNumberish, - totalValue: BigNumberish, - payer: string, - to: string, - skipTokenMask: BigNumberish, - convertWETH: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - collateralTokens( - id: BigNumberish, - overrides?: CallOverrides - ): Promise; - - collateralTokensByMask( - tokenMask: BigNumberish, - overrides?: CallOverrides - ): Promise; - - collateralTokensCount(overrides?: CallOverrides): Promise; - - collateralTokensInternal(overrides?: CallOverrides): Promise; - - contractToAdapter( - arg0: string, - overrides?: CallOverrides - ): Promise; - - creditAccounts(arg0: string, overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - cumulativeDropAtFastCheckRAY( - arg0: string, - overrides?: CallOverrides - ): Promise; - - disableToken( - creditAccount: string, - token: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - enabledTokensMap( - arg0: string, - overrides?: CallOverrides - ): Promise; - - executeOrder( - borrower: string, - targetContract: string, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fastCollateralCheck( - creditAccount: string, - tokenIn: string, - tokenOut: string, - balanceInBefore: BigNumberish, - balanceOutBefore: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fees(overrides?: CallOverrides): Promise; - - forbiddenTokenMask(overrides?: CallOverrides): Promise; - - fullCollateralCheck( - creditAccount: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getCreditAccountOrRevert( - borrower: string, - overrides?: CallOverrides - ): Promise; - - getCreditAccountParameters( - creditAccount: string, - overrides?: CallOverrides - ): Promise; - - getMaxIndex( - mask: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getSlotBytes( - slotNum: BigNumberish, - overrides?: CallOverrides - ): Promise; - - liquidationThresholds( - token: string, - overrides?: CallOverrides - ): Promise; - - manageDebt( - creditAccount: string, - amount: BigNumberish, - increase: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - maxAllowedEnabledTokenLength(overrides?: CallOverrides): Promise; - - openCreditAccount( - borrowedAmount: BigNumberish, - onBehalfOf: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise; - - pool(overrides?: CallOverrides): Promise; - - poolService(overrides?: CallOverrides): Promise; - - priceOracle(overrides?: CallOverrides): Promise; - - safeTokenTransfer( - creditAccount: string, - token: string, - to: string, - amount: BigNumberish, - convertToETH: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setConfigurator( - _creditConfigurator: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setCumulativeDropAtFastCheck( - creditAccount: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setForbidMask( - _forbidMask: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setLiquidationThreshold( - token: string, - liquidationThreshold: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setMaxEnabledTokens( - newMaxEnabledTokens: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setParams( - _feeInterest: BigNumberish, - _feeLiquidation: BigNumberish, - _liquidationDiscount: BigNumberish, - _feeLiquidationExpired: BigNumberish, - _liquidationDiscountExpired: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - tokenMasksMap(token: string, overrides?: CallOverrides): Promise; - - transferAccountOwnership( - from: string, - to: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferAssetsTo( - creditAccount: string, - to: string, - convertWETH: boolean, - enabledTokenMask: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - - universalAdapter(overrides?: CallOverrides): Promise; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upgradeContracts( - _creditFacade: string, - _priceOracle: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise; - - wethAddress(overrides?: CallOverrides): Promise; - - wethGateway(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - _accountFactory(overrides?: CallOverrides): Promise; - - _acl(overrides?: CallOverrides): Promise; - - adapterToContract( - arg0: string, - overrides?: CallOverrides - ): Promise; - - addCollateral( - payer: string, - creditAccount: string, - token: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - addToken( - token: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - approveCreditAccount( - borrower: string, - targetContract: string, - token: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - calcClosePayments( - totalValue: BigNumberish, - closureActionType: BigNumberish, - borrowedAmount: BigNumberish, - borrowedAmountWithInterest: BigNumberish, - overrides?: CallOverrides - ): Promise; - - calcClosePaymentsPure( - totalValue: BigNumberish, - closureActionType: BigNumberish, - borrowedAmount: BigNumberish, - borrowedAmountWithInterest: BigNumberish, - overrides?: CallOverrides - ): Promise; - - calcCreditAccountAccruedInterest( - creditAccount: string, - overrides?: CallOverrides - ): Promise; - - changeContractAllowance( - adapter: string, - targetContract: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - checkAndEnableToken( - creditAccount: string, - tokenOut: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - checkAndOptimizeEnabledTokens( - creditAccount: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - closeCreditAccount( - borrower: string, - closureActionType: BigNumberish, - totalValue: BigNumberish, - payer: string, - to: string, - skipTokenMask: BigNumberish, - convertWETH: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - collateralTokens( - id: BigNumberish, - overrides?: CallOverrides - ): Promise; - - collateralTokensByMask( - tokenMask: BigNumberish, - overrides?: CallOverrides - ): Promise; - - collateralTokensCount( - overrides?: CallOverrides - ): Promise; - - collateralTokensInternal( - overrides?: CallOverrides - ): Promise; - - contractToAdapter( - arg0: string, - overrides?: CallOverrides - ): Promise; - - creditAccounts( - arg0: string, - overrides?: CallOverrides - ): Promise; - - creditConfigurator( - overrides?: CallOverrides - ): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - cumulativeDropAtFastCheckRAY( - arg0: string, - overrides?: CallOverrides - ): Promise; - - disableToken( - creditAccount: string, - token: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - enabledTokensMap( - arg0: string, - overrides?: CallOverrides - ): Promise; - - executeOrder( - borrower: string, - targetContract: string, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fastCollateralCheck( - creditAccount: string, - tokenIn: string, - tokenOut: string, - balanceInBefore: BigNumberish, - balanceOutBefore: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fees(overrides?: CallOverrides): Promise; - - forbiddenTokenMask( - overrides?: CallOverrides - ): Promise; - - fullCollateralCheck( - creditAccount: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getCreditAccountOrRevert( - borrower: string, - overrides?: CallOverrides - ): Promise; - - getCreditAccountParameters( - creditAccount: string, - overrides?: CallOverrides - ): Promise; - - getMaxIndex( - mask: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getSlotBytes( - slotNum: BigNumberish, - overrides?: CallOverrides - ): Promise; - - liquidationThresholds( - token: string, - overrides?: CallOverrides - ): Promise; - - manageDebt( - creditAccount: string, - amount: BigNumberish, - increase: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - maxAllowedEnabledTokenLength( - overrides?: CallOverrides - ): Promise; - - openCreditAccount( - borrowedAmount: BigNumberish, - onBehalfOf: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise; - - pool(overrides?: CallOverrides): Promise; - - poolService(overrides?: CallOverrides): Promise; - - priceOracle(overrides?: CallOverrides): Promise; - - safeTokenTransfer( - creditAccount: string, - token: string, - to: string, - amount: BigNumberish, - convertToETH: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setConfigurator( - _creditConfigurator: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setCumulativeDropAtFastCheck( - creditAccount: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setForbidMask( - _forbidMask: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setLiquidationThreshold( - token: string, - liquidationThreshold: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setMaxEnabledTokens( - newMaxEnabledTokens: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setParams( - _feeInterest: BigNumberish, - _feeLiquidation: BigNumberish, - _liquidationDiscount: BigNumberish, - _feeLiquidationExpired: BigNumberish, - _liquidationDiscountExpired: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - tokenMasksMap( - token: string, - overrides?: CallOverrides - ): Promise; - - transferAccountOwnership( - from: string, - to: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferAssetsTo( - creditAccount: string, - to: string, - convertWETH: boolean, - enabledTokenMask: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - - universalAdapter(overrides?: CallOverrides): Promise; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upgradeContracts( - _creditFacade: string, - _priceOracle: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise; - - wethAddress(overrides?: CallOverrides): Promise; - - wethGateway(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/test/mocks/credit/index.ts b/src/types/contracts/test/mocks/credit/index.ts deleted file mode 100644 index a673e015..00000000 --- a/src/types/contracts/test/mocks/credit/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { CreditManagerInternal } from "./CreditManagerInternal"; diff --git a/src/types/contracts/test/mocks/dao/TreasuryMock.ts b/src/types/contracts/test/mocks/dao/TreasuryMock.ts deleted file mode 100644 index 9c17ffa9..00000000 --- a/src/types/contracts/test/mocks/dao/TreasuryMock.ts +++ /dev/null @@ -1,69 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { BaseContract, BigNumber, Signer, utils } from "ethers"; -import type { EventFragment } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface TreasuryMockInterface extends utils.Interface { - functions: {}; - - events: { - "NewDonation(uint256)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "NewDonation"): EventFragment; -} - -export interface NewDonationEventObject { - amount: BigNumber; -} -export type NewDonationEvent = TypedEvent<[BigNumber], NewDonationEventObject>; - -export type NewDonationEventFilter = TypedEventFilter; - -export interface TreasuryMock extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: TreasuryMockInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: {}; - - callStatic: {}; - - filters: { - "NewDonation(uint256)"(amount?: null): NewDonationEventFilter; - NewDonation(amount?: null): NewDonationEventFilter; - }; - - estimateGas: {}; - - populateTransaction: {}; -} diff --git a/src/types/contracts/test/mocks/dao/index.ts b/src/types/contracts/test/mocks/dao/index.ts deleted file mode 100644 index fb1fca1c..00000000 --- a/src/types/contracts/test/mocks/dao/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { TreasuryMock } from "./TreasuryMock"; diff --git a/src/types/contracts/test/mocks/index.ts b/src/types/contracts/test/mocks/index.ts index 0402cac6..a582bc56 100644 --- a/src/types/contracts/test/mocks/index.ts +++ b/src/types/contracts/test/mocks/index.ts @@ -1,21 +1,7 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ -import type * as adapters from "./adapters"; -export type { adapters }; -import type * as core from "./core"; -export type { core }; -import type * as credit from "./credit"; -export type { credit }; -import type * as dao from "./dao"; -export type { dao }; import type * as integrations from "./integrations"; export type { integrations }; -import type * as libraries from "./libraries"; -export type { libraries }; -import type * as oracles from "./oracles"; -export type { oracles }; -import type * as pool from "./pool"; -export type { pool }; import type * as token from "./token"; export type { token }; diff --git a/src/types/contracts/test/mocks/integrations/ConvexBaseRewardPoolMock.sol/BaseRewardPoolMock.ts b/src/types/contracts/test/mocks/integrations/ConvexBaseRewardPoolMock.sol/BaseRewardPoolMock.ts deleted file mode 100644 index 0e9c5236..00000000 --- a/src/types/contracts/test/mocks/integrations/ConvexBaseRewardPoolMock.sol/BaseRewardPoolMock.ts +++ /dev/null @@ -1,1069 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../../common"; - -export interface BaseRewardPoolMockInterface extends utils.Interface { - functions: { - "addExtraReward(address)": FunctionFragment; - "addRewardAmount(uint256)": FunctionFragment; - "balanceOf(address)": FunctionFragment; - "clearExtraRewards()": FunctionFragment; - "currentRewards()": FunctionFragment; - "donate(uint256)": FunctionFragment; - "duration()": FunctionFragment; - "earned(address)": FunctionFragment; - "extraRewards(uint256)": FunctionFragment; - "extraRewardsLength()": FunctionFragment; - "getReward()": FunctionFragment; - "getReward(address,bool)": FunctionFragment; - "historicalRewards()": FunctionFragment; - "lastTimeRewardApplicable()": FunctionFragment; - "lastUpdateTime()": FunctionFragment; - "newRewardRatio()": FunctionFragment; - "operator()": FunctionFragment; - "periodFinish()": FunctionFragment; - "pid()": FunctionFragment; - "queueNewRewards(uint256)": FunctionFragment; - "queuedRewards()": FunctionFragment; - "rewardManager()": FunctionFragment; - "rewardPerToken()": FunctionFragment; - "rewardPerTokenStored()": FunctionFragment; - "rewardRate()": FunctionFragment; - "rewardToken()": FunctionFragment; - "rewards(address)": FunctionFragment; - "stake(uint256)": FunctionFragment; - "stakeAll()": FunctionFragment; - "stakeFor(address,uint256)": FunctionFragment; - "stakingToken()": FunctionFragment; - "totalSupply()": FunctionFragment; - "userRewardPerTokenPaid(address)": FunctionFragment; - "withdraw(uint256,bool)": FunctionFragment; - "withdrawAll(bool)": FunctionFragment; - "withdrawAllAndUnwrap(bool)": FunctionFragment; - "withdrawAndUnwrap(uint256,bool)": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "addExtraReward" - | "addRewardAmount" - | "balanceOf" - | "clearExtraRewards" - | "currentRewards" - | "donate" - | "duration" - | "earned" - | "extraRewards" - | "extraRewardsLength" - | "getReward()" - | "getReward(address,bool)" - | "historicalRewards" - | "lastTimeRewardApplicable" - | "lastUpdateTime" - | "newRewardRatio" - | "operator" - | "periodFinish" - | "pid" - | "queueNewRewards" - | "queuedRewards" - | "rewardManager" - | "rewardPerToken" - | "rewardPerTokenStored" - | "rewardRate" - | "rewardToken" - | "rewards" - | "stake" - | "stakeAll" - | "stakeFor" - | "stakingToken" - | "totalSupply" - | "userRewardPerTokenPaid" - | "withdraw" - | "withdrawAll" - | "withdrawAllAndUnwrap" - | "withdrawAndUnwrap" - ): FunctionFragment; - - encodeFunctionData( - functionFragment: "addExtraReward", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "addRewardAmount", - values: [BigNumberish] - ): string; - encodeFunctionData(functionFragment: "balanceOf", values: [string]): string; - encodeFunctionData( - functionFragment: "clearExtraRewards", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "currentRewards", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "donate", - values: [BigNumberish] - ): string; - encodeFunctionData(functionFragment: "duration", values?: undefined): string; - encodeFunctionData(functionFragment: "earned", values: [string]): string; - encodeFunctionData( - functionFragment: "extraRewards", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "extraRewardsLength", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "getReward()", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "getReward(address,bool)", - values: [string, boolean] - ): string; - encodeFunctionData( - functionFragment: "historicalRewards", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "lastTimeRewardApplicable", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "lastUpdateTime", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "newRewardRatio", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "operator", values?: undefined): string; - encodeFunctionData( - functionFragment: "periodFinish", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "pid", values?: undefined): string; - encodeFunctionData( - functionFragment: "queueNewRewards", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "queuedRewards", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "rewardManager", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "rewardPerToken", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "rewardPerTokenStored", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "rewardRate", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "rewardToken", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "rewards", values: [string]): string; - encodeFunctionData(functionFragment: "stake", values: [BigNumberish]): string; - encodeFunctionData(functionFragment: "stakeAll", values?: undefined): string; - encodeFunctionData( - functionFragment: "stakeFor", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "stakingToken", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "totalSupply", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "userRewardPerTokenPaid", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "withdraw", - values: [BigNumberish, boolean] - ): string; - encodeFunctionData( - functionFragment: "withdrawAll", - values: [boolean] - ): string; - encodeFunctionData( - functionFragment: "withdrawAllAndUnwrap", - values: [boolean] - ): string; - encodeFunctionData( - functionFragment: "withdrawAndUnwrap", - values: [BigNumberish, boolean] - ): string; - - decodeFunctionResult( - functionFragment: "addExtraReward", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "addRewardAmount", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "clearExtraRewards", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "currentRewards", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "donate", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "duration", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "earned", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "extraRewards", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "extraRewardsLength", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getReward()", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getReward(address,bool)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "historicalRewards", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "lastTimeRewardApplicable", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "lastUpdateTime", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "newRewardRatio", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "operator", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "periodFinish", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "pid", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "queueNewRewards", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "queuedRewards", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "rewardManager", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "rewardPerToken", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "rewardPerTokenStored", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "rewardRate", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "rewardToken", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "rewards", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "stake", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "stakeAll", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "stakeFor", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "stakingToken", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "totalSupply", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "userRewardPerTokenPaid", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "withdraw", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "withdrawAll", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "withdrawAllAndUnwrap", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "withdrawAndUnwrap", - data: BytesLike - ): Result; - - events: { - "Mock_BaseRewardPaid(uint256,address,uint256)": EventFragment; - "Mock_BaseStaked(uint256,address,uint256)": EventFragment; - "Mock_BaseWithdrawn(uint256,address,uint256)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "Mock_BaseRewardPaid"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Mock_BaseStaked"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Mock_BaseWithdrawn"): EventFragment; -} - -export interface Mock_BaseRewardPaidEventObject { - index: BigNumber; - user: string; - reward: BigNumber; -} -export type Mock_BaseRewardPaidEvent = TypedEvent< - [BigNumber, string, BigNumber], - Mock_BaseRewardPaidEventObject ->; - -export type Mock_BaseRewardPaidEventFilter = - TypedEventFilter; - -export interface Mock_BaseStakedEventObject { - index: BigNumber; - user: string; - amount: BigNumber; -} -export type Mock_BaseStakedEvent = TypedEvent< - [BigNumber, string, BigNumber], - Mock_BaseStakedEventObject ->; - -export type Mock_BaseStakedEventFilter = TypedEventFilter; - -export interface Mock_BaseWithdrawnEventObject { - index: BigNumber; - user: string; - amount: BigNumber; -} -export type Mock_BaseWithdrawnEvent = TypedEvent< - [BigNumber, string, BigNumber], - Mock_BaseWithdrawnEventObject ->; - -export type Mock_BaseWithdrawnEventFilter = - TypedEventFilter; - -export interface BaseRewardPoolMock extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: BaseRewardPoolMockInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - addExtraReward( - _reward: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - addRewardAmount( - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise<[BigNumber]>; - - clearExtraRewards( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - currentRewards(overrides?: CallOverrides): Promise<[BigNumber]>; - - donate(arg0: BigNumberish, overrides?: CallOverrides): Promise<[boolean]>; - - duration(overrides?: CallOverrides): Promise<[BigNumber]>; - - earned(account: string, overrides?: CallOverrides): Promise<[BigNumber]>; - - extraRewards( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - extraRewardsLength(overrides?: CallOverrides): Promise<[BigNumber]>; - - "getReward()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "getReward(address,bool)"( - _account: string, - _claimExtras: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - historicalRewards(overrides?: CallOverrides): Promise<[BigNumber]>; - - lastTimeRewardApplicable(overrides?: CallOverrides): Promise<[BigNumber]>; - - lastUpdateTime(overrides?: CallOverrides): Promise<[BigNumber]>; - - newRewardRatio(overrides?: CallOverrides): Promise<[BigNumber]>; - - operator(overrides?: CallOverrides): Promise<[string]>; - - periodFinish(overrides?: CallOverrides): Promise<[BigNumber]>; - - pid(overrides?: CallOverrides): Promise<[BigNumber]>; - - queueNewRewards( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise<[boolean]>; - - queuedRewards(overrides?: CallOverrides): Promise<[BigNumber]>; - - rewardManager(overrides?: CallOverrides): Promise<[string]>; - - rewardPerToken(overrides?: CallOverrides): Promise<[BigNumber]>; - - rewardPerTokenStored(overrides?: CallOverrides): Promise<[BigNumber]>; - - rewardRate(overrides?: CallOverrides): Promise<[BigNumber]>; - - rewardToken(overrides?: CallOverrides): Promise<[string]>; - - rewards(arg0: string, overrides?: CallOverrides): Promise<[BigNumber]>; - - stake( - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - stakeAll( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - stakeFor( - _for: string, - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - stakingToken(overrides?: CallOverrides): Promise<[string]>; - - totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>; - - userRewardPerTokenPaid( - arg0: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - withdraw( - amount: BigNumberish, - claim: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdrawAll( - claim: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdrawAllAndUnwrap( - claim: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdrawAndUnwrap( - amount: BigNumberish, - claim: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - addExtraReward( - _reward: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - addRewardAmount( - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - clearExtraRewards( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - currentRewards(overrides?: CallOverrides): Promise; - - donate(arg0: BigNumberish, overrides?: CallOverrides): Promise; - - duration(overrides?: CallOverrides): Promise; - - earned(account: string, overrides?: CallOverrides): Promise; - - extraRewards(arg0: BigNumberish, overrides?: CallOverrides): Promise; - - extraRewardsLength(overrides?: CallOverrides): Promise; - - "getReward()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "getReward(address,bool)"( - _account: string, - _claimExtras: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - historicalRewards(overrides?: CallOverrides): Promise; - - lastTimeRewardApplicable(overrides?: CallOverrides): Promise; - - lastUpdateTime(overrides?: CallOverrides): Promise; - - newRewardRatio(overrides?: CallOverrides): Promise; - - operator(overrides?: CallOverrides): Promise; - - periodFinish(overrides?: CallOverrides): Promise; - - pid(overrides?: CallOverrides): Promise; - - queueNewRewards( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - queuedRewards(overrides?: CallOverrides): Promise; - - rewardManager(overrides?: CallOverrides): Promise; - - rewardPerToken(overrides?: CallOverrides): Promise; - - rewardPerTokenStored(overrides?: CallOverrides): Promise; - - rewardRate(overrides?: CallOverrides): Promise; - - rewardToken(overrides?: CallOverrides): Promise; - - rewards(arg0: string, overrides?: CallOverrides): Promise; - - stake( - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - stakeAll( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - stakeFor( - _for: string, - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - stakingToken(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - userRewardPerTokenPaid( - arg0: string, - overrides?: CallOverrides - ): Promise; - - withdraw( - amount: BigNumberish, - claim: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdrawAll( - claim: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdrawAllAndUnwrap( - claim: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdrawAndUnwrap( - amount: BigNumberish, - claim: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - addExtraReward( - _reward: string, - overrides?: CallOverrides - ): Promise; - - addRewardAmount( - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - clearExtraRewards(overrides?: CallOverrides): Promise; - - currentRewards(overrides?: CallOverrides): Promise; - - donate(arg0: BigNumberish, overrides?: CallOverrides): Promise; - - duration(overrides?: CallOverrides): Promise; - - earned(account: string, overrides?: CallOverrides): Promise; - - extraRewards( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - extraRewardsLength(overrides?: CallOverrides): Promise; - - "getReward()"(overrides?: CallOverrides): Promise; - - "getReward(address,bool)"( - _account: string, - _claimExtras: boolean, - overrides?: CallOverrides - ): Promise; - - historicalRewards(overrides?: CallOverrides): Promise; - - lastTimeRewardApplicable(overrides?: CallOverrides): Promise; - - lastUpdateTime(overrides?: CallOverrides): Promise; - - newRewardRatio(overrides?: CallOverrides): Promise; - - operator(overrides?: CallOverrides): Promise; - - periodFinish(overrides?: CallOverrides): Promise; - - pid(overrides?: CallOverrides): Promise; - - queueNewRewards( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - queuedRewards(overrides?: CallOverrides): Promise; - - rewardManager(overrides?: CallOverrides): Promise; - - rewardPerToken(overrides?: CallOverrides): Promise; - - rewardPerTokenStored(overrides?: CallOverrides): Promise; - - rewardRate(overrides?: CallOverrides): Promise; - - rewardToken(overrides?: CallOverrides): Promise; - - rewards(arg0: string, overrides?: CallOverrides): Promise; - - stake(_amount: BigNumberish, overrides?: CallOverrides): Promise; - - stakeAll(overrides?: CallOverrides): Promise; - - stakeFor( - _for: string, - _amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - stakingToken(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - userRewardPerTokenPaid( - arg0: string, - overrides?: CallOverrides - ): Promise; - - withdraw( - amount: BigNumberish, - claim: boolean, - overrides?: CallOverrides - ): Promise; - - withdrawAll(claim: boolean, overrides?: CallOverrides): Promise; - - withdrawAllAndUnwrap( - claim: boolean, - overrides?: CallOverrides - ): Promise; - - withdrawAndUnwrap( - amount: BigNumberish, - claim: boolean, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - "Mock_BaseRewardPaid(uint256,address,uint256)"( - index?: BigNumberish | null, - user?: string | null, - reward?: null - ): Mock_BaseRewardPaidEventFilter; - Mock_BaseRewardPaid( - index?: BigNumberish | null, - user?: string | null, - reward?: null - ): Mock_BaseRewardPaidEventFilter; - - "Mock_BaseStaked(uint256,address,uint256)"( - index?: BigNumberish | null, - user?: string | null, - amount?: null - ): Mock_BaseStakedEventFilter; - Mock_BaseStaked( - index?: BigNumberish | null, - user?: string | null, - amount?: null - ): Mock_BaseStakedEventFilter; - - "Mock_BaseWithdrawn(uint256,address,uint256)"( - index?: BigNumberish | null, - user?: string | null, - amount?: null - ): Mock_BaseWithdrawnEventFilter; - Mock_BaseWithdrawn( - index?: BigNumberish | null, - user?: string | null, - amount?: null - ): Mock_BaseWithdrawnEventFilter; - }; - - estimateGas: { - addExtraReward( - _reward: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - addRewardAmount( - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - clearExtraRewards( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - currentRewards(overrides?: CallOverrides): Promise; - - donate(arg0: BigNumberish, overrides?: CallOverrides): Promise; - - duration(overrides?: CallOverrides): Promise; - - earned(account: string, overrides?: CallOverrides): Promise; - - extraRewards( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - extraRewardsLength(overrides?: CallOverrides): Promise; - - "getReward()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "getReward(address,bool)"( - _account: string, - _claimExtras: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - historicalRewards(overrides?: CallOverrides): Promise; - - lastTimeRewardApplicable(overrides?: CallOverrides): Promise; - - lastUpdateTime(overrides?: CallOverrides): Promise; - - newRewardRatio(overrides?: CallOverrides): Promise; - - operator(overrides?: CallOverrides): Promise; - - periodFinish(overrides?: CallOverrides): Promise; - - pid(overrides?: CallOverrides): Promise; - - queueNewRewards( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - queuedRewards(overrides?: CallOverrides): Promise; - - rewardManager(overrides?: CallOverrides): Promise; - - rewardPerToken(overrides?: CallOverrides): Promise; - - rewardPerTokenStored(overrides?: CallOverrides): Promise; - - rewardRate(overrides?: CallOverrides): Promise; - - rewardToken(overrides?: CallOverrides): Promise; - - rewards(arg0: string, overrides?: CallOverrides): Promise; - - stake( - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - stakeAll( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - stakeFor( - _for: string, - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - stakingToken(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - userRewardPerTokenPaid( - arg0: string, - overrides?: CallOverrides - ): Promise; - - withdraw( - amount: BigNumberish, - claim: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdrawAll( - claim: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdrawAllAndUnwrap( - claim: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdrawAndUnwrap( - amount: BigNumberish, - claim: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - addExtraReward( - _reward: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - addRewardAmount( - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf( - account: string, - overrides?: CallOverrides - ): Promise; - - clearExtraRewards( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - currentRewards(overrides?: CallOverrides): Promise; - - donate( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - duration(overrides?: CallOverrides): Promise; - - earned( - account: string, - overrides?: CallOverrides - ): Promise; - - extraRewards( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - extraRewardsLength( - overrides?: CallOverrides - ): Promise; - - "getReward()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "getReward(address,bool)"( - _account: string, - _claimExtras: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - historicalRewards(overrides?: CallOverrides): Promise; - - lastTimeRewardApplicable( - overrides?: CallOverrides - ): Promise; - - lastUpdateTime(overrides?: CallOverrides): Promise; - - newRewardRatio(overrides?: CallOverrides): Promise; - - operator(overrides?: CallOverrides): Promise; - - periodFinish(overrides?: CallOverrides): Promise; - - pid(overrides?: CallOverrides): Promise; - - queueNewRewards( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - queuedRewards(overrides?: CallOverrides): Promise; - - rewardManager(overrides?: CallOverrides): Promise; - - rewardPerToken(overrides?: CallOverrides): Promise; - - rewardPerTokenStored( - overrides?: CallOverrides - ): Promise; - - rewardRate(overrides?: CallOverrides): Promise; - - rewardToken(overrides?: CallOverrides): Promise; - - rewards( - arg0: string, - overrides?: CallOverrides - ): Promise; - - stake( - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - stakeAll( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - stakeFor( - _for: string, - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - stakingToken(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - userRewardPerTokenPaid( - arg0: string, - overrides?: CallOverrides - ): Promise; - - withdraw( - amount: BigNumberish, - claim: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdrawAll( - claim: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdrawAllAndUnwrap( - claim: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdrawAndUnwrap( - amount: BigNumberish, - claim: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/src/types/contracts/test/mocks/integrations/ConvexBaseRewardPoolMock.sol/IBaseRewardPoolMockEvents.ts b/src/types/contracts/test/mocks/integrations/ConvexBaseRewardPoolMock.sol/IBaseRewardPoolMockEvents.ts deleted file mode 100644 index 0b8be53a..00000000 --- a/src/types/contracts/test/mocks/integrations/ConvexBaseRewardPoolMock.sol/IBaseRewardPoolMockEvents.ts +++ /dev/null @@ -1,140 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - Signer, - utils, -} from "ethers"; -import type { EventFragment } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../../common"; - -export interface IBaseRewardPoolMockEventsInterface extends utils.Interface { - functions: {}; - - events: { - "Mock_BaseRewardPaid(uint256,address,uint256)": EventFragment; - "Mock_BaseStaked(uint256,address,uint256)": EventFragment; - "Mock_BaseWithdrawn(uint256,address,uint256)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "Mock_BaseRewardPaid"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Mock_BaseStaked"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Mock_BaseWithdrawn"): EventFragment; -} - -export interface Mock_BaseRewardPaidEventObject { - index: BigNumber; - user: string; - reward: BigNumber; -} -export type Mock_BaseRewardPaidEvent = TypedEvent< - [BigNumber, string, BigNumber], - Mock_BaseRewardPaidEventObject ->; - -export type Mock_BaseRewardPaidEventFilter = - TypedEventFilter; - -export interface Mock_BaseStakedEventObject { - index: BigNumber; - user: string; - amount: BigNumber; -} -export type Mock_BaseStakedEvent = TypedEvent< - [BigNumber, string, BigNumber], - Mock_BaseStakedEventObject ->; - -export type Mock_BaseStakedEventFilter = TypedEventFilter; - -export interface Mock_BaseWithdrawnEventObject { - index: BigNumber; - user: string; - amount: BigNumber; -} -export type Mock_BaseWithdrawnEvent = TypedEvent< - [BigNumber, string, BigNumber], - Mock_BaseWithdrawnEventObject ->; - -export type Mock_BaseWithdrawnEventFilter = - TypedEventFilter; - -export interface IBaseRewardPoolMockEvents extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: IBaseRewardPoolMockEventsInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: {}; - - callStatic: {}; - - filters: { - "Mock_BaseRewardPaid(uint256,address,uint256)"( - index?: BigNumberish | null, - user?: string | null, - reward?: null - ): Mock_BaseRewardPaidEventFilter; - Mock_BaseRewardPaid( - index?: BigNumberish | null, - user?: string | null, - reward?: null - ): Mock_BaseRewardPaidEventFilter; - - "Mock_BaseStaked(uint256,address,uint256)"( - index?: BigNumberish | null, - user?: string | null, - amount?: null - ): Mock_BaseStakedEventFilter; - Mock_BaseStaked( - index?: BigNumberish | null, - user?: string | null, - amount?: null - ): Mock_BaseStakedEventFilter; - - "Mock_BaseWithdrawn(uint256,address,uint256)"( - index?: BigNumberish | null, - user?: string | null, - amount?: null - ): Mock_BaseWithdrawnEventFilter; - Mock_BaseWithdrawn( - index?: BigNumberish | null, - user?: string | null, - amount?: null - ): Mock_BaseWithdrawnEventFilter; - }; - - estimateGas: {}; - - populateTransaction: {}; -} diff --git a/src/types/contracts/test/mocks/integrations/ConvexBaseRewardPoolMock.sol/index.ts b/src/types/contracts/test/mocks/integrations/ConvexBaseRewardPoolMock.sol/index.ts deleted file mode 100644 index d98b852f..00000000 --- a/src/types/contracts/test/mocks/integrations/ConvexBaseRewardPoolMock.sol/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { BaseRewardPoolMock } from "./BaseRewardPoolMock"; -export type { IBaseRewardPoolMockEvents } from "./IBaseRewardPoolMockEvents"; diff --git a/src/types/contracts/test/mocks/integrations/ConvexBoosterMock.sol/BoosterMock.ts b/src/types/contracts/test/mocks/integrations/ConvexBoosterMock.sol/BoosterMock.ts deleted file mode 100644 index 765ca330..00000000 --- a/src/types/contracts/test/mocks/integrations/ConvexBoosterMock.sol/BoosterMock.ts +++ /dev/null @@ -1,1002 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../../common"; - -export interface BoosterMockInterface extends utils.Interface { - functions: { - "FEE_DENOMINATOR()": FunctionFragment; - "MaxFees()": FunctionFragment; - "addPool(address)": FunctionFragment; - "crv()": FunctionFragment; - "deposit(uint256,uint256,bool)": FunctionFragment; - "depositAll(uint256,bool)": FunctionFragment; - "distributionAddressId()": FunctionFragment; - "earmarkIncentive()": FunctionFragment; - "feeDistro()": FunctionFragment; - "feeManager()": FunctionFragment; - "feeToken()": FunctionFragment; - "gaugeMap(address)": FunctionFragment; - "index()": FunctionFragment; - "isShutdown()": FunctionFragment; - "lockFees()": FunctionFragment; - "lockIncentive()": FunctionFragment; - "lockRewards()": FunctionFragment; - "minter()": FunctionFragment; - "owner()": FunctionFragment; - "platformFee()": FunctionFragment; - "poolInfo(uint256)": FunctionFragment; - "poolLength()": FunctionFragment; - "poolManager()": FunctionFragment; - "registry()": FunctionFragment; - "rewardArbitrator()": FunctionFragment; - "rewardClaimed(uint256,address,uint256)": FunctionFragment; - "rewardFactory()": FunctionFragment; - "staker()": FunctionFragment; - "stakerIncentive()": FunctionFragment; - "stakerRewards()": FunctionFragment; - "stashFactory()": FunctionFragment; - "tokenFactory()": FunctionFragment; - "treasury()": FunctionFragment; - "voteDelegate()": FunctionFragment; - "voteOwnership()": FunctionFragment; - "voteParameter()": FunctionFragment; - "withdraw(uint256,uint256)": FunctionFragment; - "withdrawAll(uint256)": FunctionFragment; - "withdrawTo(uint256,uint256,address)": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "FEE_DENOMINATOR" - | "MaxFees" - | "addPool" - | "crv" - | "deposit" - | "depositAll" - | "distributionAddressId" - | "earmarkIncentive" - | "feeDistro" - | "feeManager" - | "feeToken" - | "gaugeMap" - | "index" - | "isShutdown" - | "lockFees" - | "lockIncentive" - | "lockRewards" - | "minter" - | "owner" - | "platformFee" - | "poolInfo" - | "poolLength" - | "poolManager" - | "registry" - | "rewardArbitrator" - | "rewardClaimed" - | "rewardFactory" - | "staker" - | "stakerIncentive" - | "stakerRewards" - | "stashFactory" - | "tokenFactory" - | "treasury" - | "voteDelegate" - | "voteOwnership" - | "voteParameter" - | "withdraw" - | "withdrawAll" - | "withdrawTo" - ): FunctionFragment; - - encodeFunctionData( - functionFragment: "FEE_DENOMINATOR", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "MaxFees", values?: undefined): string; - encodeFunctionData(functionFragment: "addPool", values: [string]): string; - encodeFunctionData(functionFragment: "crv", values?: undefined): string; - encodeFunctionData( - functionFragment: "deposit", - values: [BigNumberish, BigNumberish, boolean] - ): string; - encodeFunctionData( - functionFragment: "depositAll", - values: [BigNumberish, boolean] - ): string; - encodeFunctionData( - functionFragment: "distributionAddressId", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "earmarkIncentive", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "feeDistro", values?: undefined): string; - encodeFunctionData( - functionFragment: "feeManager", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "feeToken", values?: undefined): string; - encodeFunctionData(functionFragment: "gaugeMap", values: [string]): string; - encodeFunctionData(functionFragment: "index", values?: undefined): string; - encodeFunctionData( - functionFragment: "isShutdown", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "lockFees", values?: undefined): string; - encodeFunctionData( - functionFragment: "lockIncentive", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "lockRewards", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "minter", values?: undefined): string; - encodeFunctionData(functionFragment: "owner", values?: undefined): string; - encodeFunctionData( - functionFragment: "platformFee", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "poolInfo", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "poolLength", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "poolManager", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "registry", values?: undefined): string; - encodeFunctionData( - functionFragment: "rewardArbitrator", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "rewardClaimed", - values: [BigNumberish, string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "rewardFactory", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "staker", values?: undefined): string; - encodeFunctionData( - functionFragment: "stakerIncentive", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "stakerRewards", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "stashFactory", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "tokenFactory", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "treasury", values?: undefined): string; - encodeFunctionData( - functionFragment: "voteDelegate", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "voteOwnership", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "voteParameter", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "withdraw", - values: [BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "withdrawAll", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "withdrawTo", - values: [BigNumberish, BigNumberish, string] - ): string; - - decodeFunctionResult( - functionFragment: "FEE_DENOMINATOR", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "MaxFees", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "addPool", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "crv", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "deposit", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "depositAll", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "distributionAddressId", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "earmarkIncentive", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "feeDistro", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "feeManager", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "feeToken", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "gaugeMap", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "index", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "isShutdown", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "lockFees", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "lockIncentive", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "lockRewards", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "minter", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "platformFee", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "poolInfo", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "poolLength", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "poolManager", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "registry", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "rewardArbitrator", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "rewardClaimed", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "rewardFactory", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "staker", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "stakerIncentive", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "stakerRewards", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "stashFactory", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "tokenFactory", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "treasury", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "voteDelegate", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "voteOwnership", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "voteParameter", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "withdraw", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "withdrawAll", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "withdrawTo", data: BytesLike): Result; - - events: { - "Mock_Deposited(uint256,address,uint256,uint256,bool)": EventFragment; - "Mock_Withdrawn(uint256,address,uint256,uint256)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "Mock_Deposited"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Mock_Withdrawn"): EventFragment; -} - -export interface Mock_DepositedEventObject { - index: BigNumber; - user: string; - poolid: BigNumber; - amount: BigNumber; - _stake: boolean; -} -export type Mock_DepositedEvent = TypedEvent< - [BigNumber, string, BigNumber, BigNumber, boolean], - Mock_DepositedEventObject ->; - -export type Mock_DepositedEventFilter = TypedEventFilter; - -export interface Mock_WithdrawnEventObject { - index: BigNumber; - user: string; - poolid: BigNumber; - amount: BigNumber; -} -export type Mock_WithdrawnEvent = TypedEvent< - [BigNumber, string, BigNumber, BigNumber], - Mock_WithdrawnEventObject ->; - -export type Mock_WithdrawnEventFilter = TypedEventFilter; - -export interface BoosterMock extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: BoosterMockInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - FEE_DENOMINATOR(overrides?: CallOverrides): Promise<[BigNumber]>; - - MaxFees(overrides?: CallOverrides): Promise<[BigNumber]>; - - addPool( - _lptoken: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - crv(overrides?: CallOverrides): Promise<[string]>; - - deposit( - _pid: BigNumberish, - _amount: BigNumberish, - _stake: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - depositAll( - _pid: BigNumberish, - _stake: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - distributionAddressId(overrides?: CallOverrides): Promise<[BigNumber]>; - - earmarkIncentive(overrides?: CallOverrides): Promise<[BigNumber]>; - - feeDistro(overrides?: CallOverrides): Promise<[string]>; - - feeManager(overrides?: CallOverrides): Promise<[string]>; - - feeToken(overrides?: CallOverrides): Promise<[string]>; - - gaugeMap(arg0: string, overrides?: CallOverrides): Promise<[boolean]>; - - index(overrides?: CallOverrides): Promise<[BigNumber]>; - - isShutdown(overrides?: CallOverrides): Promise<[boolean]>; - - lockFees(overrides?: CallOverrides): Promise<[string]>; - - lockIncentive(overrides?: CallOverrides): Promise<[BigNumber]>; - - lockRewards(overrides?: CallOverrides): Promise<[string]>; - - minter(overrides?: CallOverrides): Promise<[string]>; - - owner(overrides?: CallOverrides): Promise<[string]>; - - platformFee(overrides?: CallOverrides): Promise<[BigNumber]>; - - poolInfo( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise< - [string, string, string, string, string, boolean] & { - lptoken: string; - token: string; - gauge: string; - crvRewards: string; - stash: string; - shutdown: boolean; - } - >; - - poolLength(overrides?: CallOverrides): Promise<[BigNumber]>; - - poolManager(overrides?: CallOverrides): Promise<[string]>; - - registry(overrides?: CallOverrides): Promise<[string]>; - - rewardArbitrator(overrides?: CallOverrides): Promise<[string]>; - - rewardClaimed( - _pid: BigNumberish, - _address: string, - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - rewardFactory(overrides?: CallOverrides): Promise<[string]>; - - staker(overrides?: CallOverrides): Promise<[string]>; - - stakerIncentive(overrides?: CallOverrides): Promise<[BigNumber]>; - - stakerRewards(overrides?: CallOverrides): Promise<[string]>; - - stashFactory(overrides?: CallOverrides): Promise<[string]>; - - tokenFactory(overrides?: CallOverrides): Promise<[string]>; - - treasury(overrides?: CallOverrides): Promise<[string]>; - - voteDelegate(overrides?: CallOverrides): Promise<[string]>; - - voteOwnership(overrides?: CallOverrides): Promise<[string]>; - - voteParameter(overrides?: CallOverrides): Promise<[string]>; - - withdraw( - _pid: BigNumberish, - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdrawAll( - _pid: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdrawTo( - _pid: BigNumberish, - _amount: BigNumberish, - _to: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - FEE_DENOMINATOR(overrides?: CallOverrides): Promise; - - MaxFees(overrides?: CallOverrides): Promise; - - addPool( - _lptoken: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - crv(overrides?: CallOverrides): Promise; - - deposit( - _pid: BigNumberish, - _amount: BigNumberish, - _stake: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - depositAll( - _pid: BigNumberish, - _stake: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - distributionAddressId(overrides?: CallOverrides): Promise; - - earmarkIncentive(overrides?: CallOverrides): Promise; - - feeDistro(overrides?: CallOverrides): Promise; - - feeManager(overrides?: CallOverrides): Promise; - - feeToken(overrides?: CallOverrides): Promise; - - gaugeMap(arg0: string, overrides?: CallOverrides): Promise; - - index(overrides?: CallOverrides): Promise; - - isShutdown(overrides?: CallOverrides): Promise; - - lockFees(overrides?: CallOverrides): Promise; - - lockIncentive(overrides?: CallOverrides): Promise; - - lockRewards(overrides?: CallOverrides): Promise; - - minter(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - platformFee(overrides?: CallOverrides): Promise; - - poolInfo( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise< - [string, string, string, string, string, boolean] & { - lptoken: string; - token: string; - gauge: string; - crvRewards: string; - stash: string; - shutdown: boolean; - } - >; - - poolLength(overrides?: CallOverrides): Promise; - - poolManager(overrides?: CallOverrides): Promise; - - registry(overrides?: CallOverrides): Promise; - - rewardArbitrator(overrides?: CallOverrides): Promise; - - rewardClaimed( - _pid: BigNumberish, - _address: string, - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - rewardFactory(overrides?: CallOverrides): Promise; - - staker(overrides?: CallOverrides): Promise; - - stakerIncentive(overrides?: CallOverrides): Promise; - - stakerRewards(overrides?: CallOverrides): Promise; - - stashFactory(overrides?: CallOverrides): Promise; - - tokenFactory(overrides?: CallOverrides): Promise; - - treasury(overrides?: CallOverrides): Promise; - - voteDelegate(overrides?: CallOverrides): Promise; - - voteOwnership(overrides?: CallOverrides): Promise; - - voteParameter(overrides?: CallOverrides): Promise; - - withdraw( - _pid: BigNumberish, - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdrawAll( - _pid: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdrawTo( - _pid: BigNumberish, - _amount: BigNumberish, - _to: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - FEE_DENOMINATOR(overrides?: CallOverrides): Promise; - - MaxFees(overrides?: CallOverrides): Promise; - - addPool(_lptoken: string, overrides?: CallOverrides): Promise; - - crv(overrides?: CallOverrides): Promise; - - deposit( - _pid: BigNumberish, - _amount: BigNumberish, - _stake: boolean, - overrides?: CallOverrides - ): Promise; - - depositAll( - _pid: BigNumberish, - _stake: boolean, - overrides?: CallOverrides - ): Promise; - - distributionAddressId(overrides?: CallOverrides): Promise; - - earmarkIncentive(overrides?: CallOverrides): Promise; - - feeDistro(overrides?: CallOverrides): Promise; - - feeManager(overrides?: CallOverrides): Promise; - - feeToken(overrides?: CallOverrides): Promise; - - gaugeMap(arg0: string, overrides?: CallOverrides): Promise; - - index(overrides?: CallOverrides): Promise; - - isShutdown(overrides?: CallOverrides): Promise; - - lockFees(overrides?: CallOverrides): Promise; - - lockIncentive(overrides?: CallOverrides): Promise; - - lockRewards(overrides?: CallOverrides): Promise; - - minter(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - platformFee(overrides?: CallOverrides): Promise; - - poolInfo( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise< - [string, string, string, string, string, boolean] & { - lptoken: string; - token: string; - gauge: string; - crvRewards: string; - stash: string; - shutdown: boolean; - } - >; - - poolLength(overrides?: CallOverrides): Promise; - - poolManager(overrides?: CallOverrides): Promise; - - registry(overrides?: CallOverrides): Promise; - - rewardArbitrator(overrides?: CallOverrides): Promise; - - rewardClaimed( - _pid: BigNumberish, - _address: string, - _amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - rewardFactory(overrides?: CallOverrides): Promise; - - staker(overrides?: CallOverrides): Promise; - - stakerIncentive(overrides?: CallOverrides): Promise; - - stakerRewards(overrides?: CallOverrides): Promise; - - stashFactory(overrides?: CallOverrides): Promise; - - tokenFactory(overrides?: CallOverrides): Promise; - - treasury(overrides?: CallOverrides): Promise; - - voteDelegate(overrides?: CallOverrides): Promise; - - voteOwnership(overrides?: CallOverrides): Promise; - - voteParameter(overrides?: CallOverrides): Promise; - - withdraw( - _pid: BigNumberish, - _amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - withdrawAll( - _pid: BigNumberish, - overrides?: CallOverrides - ): Promise; - - withdrawTo( - _pid: BigNumberish, - _amount: BigNumberish, - _to: string, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - "Mock_Deposited(uint256,address,uint256,uint256,bool)"( - index?: null, - user?: string | null, - poolid?: BigNumberish | null, - amount?: null, - _stake?: null - ): Mock_DepositedEventFilter; - Mock_Deposited( - index?: null, - user?: string | null, - poolid?: BigNumberish | null, - amount?: null, - _stake?: null - ): Mock_DepositedEventFilter; - - "Mock_Withdrawn(uint256,address,uint256,uint256)"( - index?: null, - user?: string | null, - poolid?: BigNumberish | null, - amount?: null - ): Mock_WithdrawnEventFilter; - Mock_Withdrawn( - index?: null, - user?: string | null, - poolid?: BigNumberish | null, - amount?: null - ): Mock_WithdrawnEventFilter; - }; - - estimateGas: { - FEE_DENOMINATOR(overrides?: CallOverrides): Promise; - - MaxFees(overrides?: CallOverrides): Promise; - - addPool( - _lptoken: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - crv(overrides?: CallOverrides): Promise; - - deposit( - _pid: BigNumberish, - _amount: BigNumberish, - _stake: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - depositAll( - _pid: BigNumberish, - _stake: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - distributionAddressId(overrides?: CallOverrides): Promise; - - earmarkIncentive(overrides?: CallOverrides): Promise; - - feeDistro(overrides?: CallOverrides): Promise; - - feeManager(overrides?: CallOverrides): Promise; - - feeToken(overrides?: CallOverrides): Promise; - - gaugeMap(arg0: string, overrides?: CallOverrides): Promise; - - index(overrides?: CallOverrides): Promise; - - isShutdown(overrides?: CallOverrides): Promise; - - lockFees(overrides?: CallOverrides): Promise; - - lockIncentive(overrides?: CallOverrides): Promise; - - lockRewards(overrides?: CallOverrides): Promise; - - minter(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - platformFee(overrides?: CallOverrides): Promise; - - poolInfo(arg0: BigNumberish, overrides?: CallOverrides): Promise; - - poolLength(overrides?: CallOverrides): Promise; - - poolManager(overrides?: CallOverrides): Promise; - - registry(overrides?: CallOverrides): Promise; - - rewardArbitrator(overrides?: CallOverrides): Promise; - - rewardClaimed( - _pid: BigNumberish, - _address: string, - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - rewardFactory(overrides?: CallOverrides): Promise; - - staker(overrides?: CallOverrides): Promise; - - stakerIncentive(overrides?: CallOverrides): Promise; - - stakerRewards(overrides?: CallOverrides): Promise; - - stashFactory(overrides?: CallOverrides): Promise; - - tokenFactory(overrides?: CallOverrides): Promise; - - treasury(overrides?: CallOverrides): Promise; - - voteDelegate(overrides?: CallOverrides): Promise; - - voteOwnership(overrides?: CallOverrides): Promise; - - voteParameter(overrides?: CallOverrides): Promise; - - withdraw( - _pid: BigNumberish, - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdrawAll( - _pid: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdrawTo( - _pid: BigNumberish, - _amount: BigNumberish, - _to: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - FEE_DENOMINATOR(overrides?: CallOverrides): Promise; - - MaxFees(overrides?: CallOverrides): Promise; - - addPool( - _lptoken: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - crv(overrides?: CallOverrides): Promise; - - deposit( - _pid: BigNumberish, - _amount: BigNumberish, - _stake: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - depositAll( - _pid: BigNumberish, - _stake: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - distributionAddressId( - overrides?: CallOverrides - ): Promise; - - earmarkIncentive(overrides?: CallOverrides): Promise; - - feeDistro(overrides?: CallOverrides): Promise; - - feeManager(overrides?: CallOverrides): Promise; - - feeToken(overrides?: CallOverrides): Promise; - - gaugeMap( - arg0: string, - overrides?: CallOverrides - ): Promise; - - index(overrides?: CallOverrides): Promise; - - isShutdown(overrides?: CallOverrides): Promise; - - lockFees(overrides?: CallOverrides): Promise; - - lockIncentive(overrides?: CallOverrides): Promise; - - lockRewards(overrides?: CallOverrides): Promise; - - minter(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - platformFee(overrides?: CallOverrides): Promise; - - poolInfo( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - poolLength(overrides?: CallOverrides): Promise; - - poolManager(overrides?: CallOverrides): Promise; - - registry(overrides?: CallOverrides): Promise; - - rewardArbitrator(overrides?: CallOverrides): Promise; - - rewardClaimed( - _pid: BigNumberish, - _address: string, - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - rewardFactory(overrides?: CallOverrides): Promise; - - staker(overrides?: CallOverrides): Promise; - - stakerIncentive(overrides?: CallOverrides): Promise; - - stakerRewards(overrides?: CallOverrides): Promise; - - stashFactory(overrides?: CallOverrides): Promise; - - tokenFactory(overrides?: CallOverrides): Promise; - - treasury(overrides?: CallOverrides): Promise; - - voteDelegate(overrides?: CallOverrides): Promise; - - voteOwnership(overrides?: CallOverrides): Promise; - - voteParameter(overrides?: CallOverrides): Promise; - - withdraw( - _pid: BigNumberish, - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdrawAll( - _pid: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdrawTo( - _pid: BigNumberish, - _amount: BigNumberish, - _to: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/src/types/contracts/test/mocks/integrations/ConvexBoosterMock.sol/IBoosterMockEvents.ts b/src/types/contracts/test/mocks/integrations/ConvexBoosterMock.sol/IBoosterMockEvents.ts deleted file mode 100644 index 5bac921d..00000000 --- a/src/types/contracts/test/mocks/integrations/ConvexBoosterMock.sol/IBoosterMockEvents.ts +++ /dev/null @@ -1,122 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - Signer, - utils, -} from "ethers"; -import type { EventFragment } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../../common"; - -export interface IBoosterMockEventsInterface extends utils.Interface { - functions: {}; - - events: { - "Mock_Deposited(uint256,address,uint256,uint256,bool)": EventFragment; - "Mock_Withdrawn(uint256,address,uint256,uint256)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "Mock_Deposited"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Mock_Withdrawn"): EventFragment; -} - -export interface Mock_DepositedEventObject { - index: BigNumber; - user: string; - poolid: BigNumber; - amount: BigNumber; - _stake: boolean; -} -export type Mock_DepositedEvent = TypedEvent< - [BigNumber, string, BigNumber, BigNumber, boolean], - Mock_DepositedEventObject ->; - -export type Mock_DepositedEventFilter = TypedEventFilter; - -export interface Mock_WithdrawnEventObject { - index: BigNumber; - user: string; - poolid: BigNumber; - amount: BigNumber; -} -export type Mock_WithdrawnEvent = TypedEvent< - [BigNumber, string, BigNumber, BigNumber], - Mock_WithdrawnEventObject ->; - -export type Mock_WithdrawnEventFilter = TypedEventFilter; - -export interface IBoosterMockEvents extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: IBoosterMockEventsInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: {}; - - callStatic: {}; - - filters: { - "Mock_Deposited(uint256,address,uint256,uint256,bool)"( - index?: null, - user?: string | null, - poolid?: BigNumberish | null, - amount?: null, - _stake?: null - ): Mock_DepositedEventFilter; - Mock_Deposited( - index?: null, - user?: string | null, - poolid?: BigNumberish | null, - amount?: null, - _stake?: null - ): Mock_DepositedEventFilter; - - "Mock_Withdrawn(uint256,address,uint256,uint256)"( - index?: null, - user?: string | null, - poolid?: BigNumberish | null, - amount?: null - ): Mock_WithdrawnEventFilter; - Mock_Withdrawn( - index?: null, - user?: string | null, - poolid?: BigNumberish | null, - amount?: null - ): Mock_WithdrawnEventFilter; - }; - - estimateGas: {}; - - populateTransaction: {}; -} diff --git a/src/types/contracts/test/mocks/integrations/ConvexBoosterMock.sol/index.ts b/src/types/contracts/test/mocks/integrations/ConvexBoosterMock.sol/index.ts deleted file mode 100644 index 37688193..00000000 --- a/src/types/contracts/test/mocks/integrations/ConvexBoosterMock.sol/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { BoosterMock } from "./BoosterMock"; -export type { IBoosterMockEvents } from "./IBoosterMockEvents"; diff --git a/src/types/contracts/test/mocks/integrations/ConvexClaimZapMock.sol/ClaimZapMock.ts b/src/types/contracts/test/mocks/integrations/ConvexClaimZapMock.sol/ClaimZapMock.ts deleted file mode 100644 index c8223e73..00000000 --- a/src/types/contracts/test/mocks/integrations/ConvexClaimZapMock.sol/ClaimZapMock.ts +++ /dev/null @@ -1,209 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../../common"; - -export interface ClaimZapMockInterface extends utils.Interface { - functions: { - "claimRewards(address[],address[],address[],address[],uint256,uint256,uint256,uint256,uint256)": FunctionFragment; - "crv()": FunctionFragment; - "cvx()": FunctionFragment; - "getName()": FunctionFragment; - "owner()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: "claimRewards" | "crv" | "cvx" | "getName" | "owner" - ): FunctionFragment; - - encodeFunctionData( - functionFragment: "claimRewards", - values: [ - string[], - string[], - string[], - string[], - BigNumberish, - BigNumberish, - BigNumberish, - BigNumberish, - BigNumberish - ] - ): string; - encodeFunctionData(functionFragment: "crv", values?: undefined): string; - encodeFunctionData(functionFragment: "cvx", values?: undefined): string; - encodeFunctionData(functionFragment: "getName", values?: undefined): string; - encodeFunctionData(functionFragment: "owner", values?: undefined): string; - - decodeFunctionResult( - functionFragment: "claimRewards", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "crv", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "cvx", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "getName", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; - - events: {}; -} - -export interface ClaimZapMock extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: ClaimZapMockInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - claimRewards( - rewardContracts: string[], - extraRewardContracts: string[], - arg2: string[], - arg3: string[], - depositCrvMaxAmount: BigNumberish, - minAmountOut: BigNumberish, - depositCvxMaxAmount: BigNumberish, - spendCvxAmount: BigNumberish, - options: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - crv(overrides?: CallOverrides): Promise<[string]>; - - cvx(overrides?: CallOverrides): Promise<[string]>; - - getName(overrides?: CallOverrides): Promise<[string]>; - - owner(overrides?: CallOverrides): Promise<[string]>; - }; - - claimRewards( - rewardContracts: string[], - extraRewardContracts: string[], - arg2: string[], - arg3: string[], - depositCrvMaxAmount: BigNumberish, - minAmountOut: BigNumberish, - depositCvxMaxAmount: BigNumberish, - spendCvxAmount: BigNumberish, - options: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - crv(overrides?: CallOverrides): Promise; - - cvx(overrides?: CallOverrides): Promise; - - getName(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - callStatic: { - claimRewards( - rewardContracts: string[], - extraRewardContracts: string[], - arg2: string[], - arg3: string[], - depositCrvMaxAmount: BigNumberish, - minAmountOut: BigNumberish, - depositCvxMaxAmount: BigNumberish, - spendCvxAmount: BigNumberish, - options: BigNumberish, - overrides?: CallOverrides - ): Promise; - - crv(overrides?: CallOverrides): Promise; - - cvx(overrides?: CallOverrides): Promise; - - getName(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - }; - - filters: {}; - - estimateGas: { - claimRewards( - rewardContracts: string[], - extraRewardContracts: string[], - arg2: string[], - arg3: string[], - depositCrvMaxAmount: BigNumberish, - minAmountOut: BigNumberish, - depositCvxMaxAmount: BigNumberish, - spendCvxAmount: BigNumberish, - options: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - crv(overrides?: CallOverrides): Promise; - - cvx(overrides?: CallOverrides): Promise; - - getName(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - claimRewards( - rewardContracts: string[], - extraRewardContracts: string[], - arg2: string[], - arg3: string[], - depositCrvMaxAmount: BigNumberish, - minAmountOut: BigNumberish, - depositCvxMaxAmount: BigNumberish, - spendCvxAmount: BigNumberish, - options: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - crv(overrides?: CallOverrides): Promise; - - cvx(overrides?: CallOverrides): Promise; - - getName(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/test/mocks/integrations/ConvexClaimZapMock.sol/index.ts b/src/types/contracts/test/mocks/integrations/ConvexClaimZapMock.sol/index.ts index b51f8108..ee7ccc27 100644 --- a/src/types/contracts/test/mocks/integrations/ConvexClaimZapMock.sol/index.ts +++ b/src/types/contracts/test/mocks/integrations/ConvexClaimZapMock.sol/index.ts @@ -1,5 +1,4 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ -export type { ClaimZapMock } from "./ClaimZapMock"; export type { IBasicRewards } from "./IBasicRewards"; diff --git a/src/types/contracts/test/mocks/integrations/ConvexExtraRewardPoolMock.sol/ExtraRewardPoolMock.ts b/src/types/contracts/test/mocks/integrations/ConvexExtraRewardPoolMock.sol/ExtraRewardPoolMock.ts deleted file mode 100644 index 621ae4ed..00000000 --- a/src/types/contracts/test/mocks/integrations/ConvexExtraRewardPoolMock.sol/ExtraRewardPoolMock.ts +++ /dev/null @@ -1,731 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../../common"; - -export interface ExtraRewardPoolMockInterface extends utils.Interface { - functions: { - "addRewardAmount(uint256)": FunctionFragment; - "balanceOf(address)": FunctionFragment; - "currentRewards()": FunctionFragment; - "deposits()": FunctionFragment; - "donate(uint256)": FunctionFragment; - "duration()": FunctionFragment; - "earned(address)": FunctionFragment; - "getReward()": FunctionFragment; - "getReward(address)": FunctionFragment; - "historicalRewards()": FunctionFragment; - "lastUpdateTime()": FunctionFragment; - "newRewardRatio()": FunctionFragment; - "operator()": FunctionFragment; - "periodFinish()": FunctionFragment; - "queueNewRewards(uint256)": FunctionFragment; - "queuedRewards()": FunctionFragment; - "rewardPerToken()": FunctionFragment; - "rewardPerTokenStored()": FunctionFragment; - "rewardRate()": FunctionFragment; - "rewardToken()": FunctionFragment; - "rewards(address)": FunctionFragment; - "stake(address,uint256)": FunctionFragment; - "totalSupply()": FunctionFragment; - "userRewardPerTokenPaid(address)": FunctionFragment; - "withdraw(address,uint256)": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "addRewardAmount" - | "balanceOf" - | "currentRewards" - | "deposits" - | "donate" - | "duration" - | "earned" - | "getReward()" - | "getReward(address)" - | "historicalRewards" - | "lastUpdateTime" - | "newRewardRatio" - | "operator" - | "periodFinish" - | "queueNewRewards" - | "queuedRewards" - | "rewardPerToken" - | "rewardPerTokenStored" - | "rewardRate" - | "rewardToken" - | "rewards" - | "stake" - | "totalSupply" - | "userRewardPerTokenPaid" - | "withdraw" - ): FunctionFragment; - - encodeFunctionData( - functionFragment: "addRewardAmount", - values: [BigNumberish] - ): string; - encodeFunctionData(functionFragment: "balanceOf", values: [string]): string; - encodeFunctionData( - functionFragment: "currentRewards", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "deposits", values?: undefined): string; - encodeFunctionData( - functionFragment: "donate", - values: [BigNumberish] - ): string; - encodeFunctionData(functionFragment: "duration", values?: undefined): string; - encodeFunctionData(functionFragment: "earned", values: [string]): string; - encodeFunctionData( - functionFragment: "getReward()", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "getReward(address)", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "historicalRewards", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "lastUpdateTime", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "newRewardRatio", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "operator", values?: undefined): string; - encodeFunctionData( - functionFragment: "periodFinish", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "queueNewRewards", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "queuedRewards", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "rewardPerToken", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "rewardPerTokenStored", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "rewardRate", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "rewardToken", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "rewards", values: [string]): string; - encodeFunctionData( - functionFragment: "stake", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "totalSupply", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "userRewardPerTokenPaid", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "withdraw", - values: [string, BigNumberish] - ): string; - - decodeFunctionResult( - functionFragment: "addRewardAmount", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "currentRewards", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "deposits", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "donate", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "duration", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "earned", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "getReward()", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getReward(address)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "historicalRewards", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "lastUpdateTime", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "newRewardRatio", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "operator", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "periodFinish", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "queueNewRewards", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "queuedRewards", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "rewardPerToken", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "rewardPerTokenStored", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "rewardRate", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "rewardToken", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "rewards", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "stake", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "totalSupply", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "userRewardPerTokenPaid", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "withdraw", data: BytesLike): Result; - - events: { - "Mock_ExtraRewardPaid(uint256,address,uint256)": EventFragment; - "Mock_ExtraStaked(uint256,address,uint256)": EventFragment; - "Mock_ExtraWithdrawn(uint256,address,uint256)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "Mock_ExtraRewardPaid"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Mock_ExtraStaked"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Mock_ExtraWithdrawn"): EventFragment; -} - -export interface Mock_ExtraRewardPaidEventObject { - index: BigNumber; - user: string; - reward: BigNumber; -} -export type Mock_ExtraRewardPaidEvent = TypedEvent< - [BigNumber, string, BigNumber], - Mock_ExtraRewardPaidEventObject ->; - -export type Mock_ExtraRewardPaidEventFilter = - TypedEventFilter; - -export interface Mock_ExtraStakedEventObject { - index: BigNumber; - user: string; - amount: BigNumber; -} -export type Mock_ExtraStakedEvent = TypedEvent< - [BigNumber, string, BigNumber], - Mock_ExtraStakedEventObject ->; - -export type Mock_ExtraStakedEventFilter = - TypedEventFilter; - -export interface Mock_ExtraWithdrawnEventObject { - index: BigNumber; - user: string; - amount: BigNumber; -} -export type Mock_ExtraWithdrawnEvent = TypedEvent< - [BigNumber, string, BigNumber], - Mock_ExtraWithdrawnEventObject ->; - -export type Mock_ExtraWithdrawnEventFilter = - TypedEventFilter; - -export interface ExtraRewardPoolMock extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: ExtraRewardPoolMockInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - addRewardAmount( - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise<[BigNumber]>; - - currentRewards(overrides?: CallOverrides): Promise<[BigNumber]>; - - deposits(overrides?: CallOverrides): Promise<[string]>; - - donate(arg0: BigNumberish, overrides?: CallOverrides): Promise<[boolean]>; - - duration(overrides?: CallOverrides): Promise<[BigNumber]>; - - earned(account: string, overrides?: CallOverrides): Promise<[BigNumber]>; - - "getReward()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "getReward(address)"( - _account: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - historicalRewards(overrides?: CallOverrides): Promise<[BigNumber]>; - - lastUpdateTime(overrides?: CallOverrides): Promise<[BigNumber]>; - - newRewardRatio(overrides?: CallOverrides): Promise<[BigNumber]>; - - operator(overrides?: CallOverrides): Promise<[string]>; - - periodFinish(overrides?: CallOverrides): Promise<[BigNumber]>; - - queueNewRewards( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise<[boolean]>; - - queuedRewards(overrides?: CallOverrides): Promise<[BigNumber]>; - - rewardPerToken(overrides?: CallOverrides): Promise<[BigNumber]>; - - rewardPerTokenStored(overrides?: CallOverrides): Promise<[BigNumber]>; - - rewardRate(overrides?: CallOverrides): Promise<[BigNumber]>; - - rewardToken(overrides?: CallOverrides): Promise<[string]>; - - rewards(arg0: string, overrides?: CallOverrides): Promise<[BigNumber]>; - - stake( - _account: string, - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>; - - userRewardPerTokenPaid( - arg0: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - withdraw( - _account: string, - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - addRewardAmount( - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - currentRewards(overrides?: CallOverrides): Promise; - - deposits(overrides?: CallOverrides): Promise; - - donate(arg0: BigNumberish, overrides?: CallOverrides): Promise; - - duration(overrides?: CallOverrides): Promise; - - earned(account: string, overrides?: CallOverrides): Promise; - - "getReward()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "getReward(address)"( - _account: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - historicalRewards(overrides?: CallOverrides): Promise; - - lastUpdateTime(overrides?: CallOverrides): Promise; - - newRewardRatio(overrides?: CallOverrides): Promise; - - operator(overrides?: CallOverrides): Promise; - - periodFinish(overrides?: CallOverrides): Promise; - - queueNewRewards( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - queuedRewards(overrides?: CallOverrides): Promise; - - rewardPerToken(overrides?: CallOverrides): Promise; - - rewardPerTokenStored(overrides?: CallOverrides): Promise; - - rewardRate(overrides?: CallOverrides): Promise; - - rewardToken(overrides?: CallOverrides): Promise; - - rewards(arg0: string, overrides?: CallOverrides): Promise; - - stake( - _account: string, - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - userRewardPerTokenPaid( - arg0: string, - overrides?: CallOverrides - ): Promise; - - withdraw( - _account: string, - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - addRewardAmount( - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - currentRewards(overrides?: CallOverrides): Promise; - - deposits(overrides?: CallOverrides): Promise; - - donate(arg0: BigNumberish, overrides?: CallOverrides): Promise; - - duration(overrides?: CallOverrides): Promise; - - earned(account: string, overrides?: CallOverrides): Promise; - - "getReward()"(overrides?: CallOverrides): Promise; - - "getReward(address)"( - _account: string, - overrides?: CallOverrides - ): Promise; - - historicalRewards(overrides?: CallOverrides): Promise; - - lastUpdateTime(overrides?: CallOverrides): Promise; - - newRewardRatio(overrides?: CallOverrides): Promise; - - operator(overrides?: CallOverrides): Promise; - - periodFinish(overrides?: CallOverrides): Promise; - - queueNewRewards( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - queuedRewards(overrides?: CallOverrides): Promise; - - rewardPerToken(overrides?: CallOverrides): Promise; - - rewardPerTokenStored(overrides?: CallOverrides): Promise; - - rewardRate(overrides?: CallOverrides): Promise; - - rewardToken(overrides?: CallOverrides): Promise; - - rewards(arg0: string, overrides?: CallOverrides): Promise; - - stake( - _account: string, - _amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - userRewardPerTokenPaid( - arg0: string, - overrides?: CallOverrides - ): Promise; - - withdraw( - _account: string, - _amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - "Mock_ExtraRewardPaid(uint256,address,uint256)"( - index?: BigNumberish | null, - user?: string | null, - reward?: null - ): Mock_ExtraRewardPaidEventFilter; - Mock_ExtraRewardPaid( - index?: BigNumberish | null, - user?: string | null, - reward?: null - ): Mock_ExtraRewardPaidEventFilter; - - "Mock_ExtraStaked(uint256,address,uint256)"( - index?: BigNumberish | null, - user?: string | null, - amount?: null - ): Mock_ExtraStakedEventFilter; - Mock_ExtraStaked( - index?: BigNumberish | null, - user?: string | null, - amount?: null - ): Mock_ExtraStakedEventFilter; - - "Mock_ExtraWithdrawn(uint256,address,uint256)"( - index?: BigNumberish | null, - user?: string | null, - amount?: null - ): Mock_ExtraWithdrawnEventFilter; - Mock_ExtraWithdrawn( - index?: BigNumberish | null, - user?: string | null, - amount?: null - ): Mock_ExtraWithdrawnEventFilter; - }; - - estimateGas: { - addRewardAmount( - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - currentRewards(overrides?: CallOverrides): Promise; - - deposits(overrides?: CallOverrides): Promise; - - donate(arg0: BigNumberish, overrides?: CallOverrides): Promise; - - duration(overrides?: CallOverrides): Promise; - - earned(account: string, overrides?: CallOverrides): Promise; - - "getReward()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "getReward(address)"( - _account: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - historicalRewards(overrides?: CallOverrides): Promise; - - lastUpdateTime(overrides?: CallOverrides): Promise; - - newRewardRatio(overrides?: CallOverrides): Promise; - - operator(overrides?: CallOverrides): Promise; - - periodFinish(overrides?: CallOverrides): Promise; - - queueNewRewards( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - queuedRewards(overrides?: CallOverrides): Promise; - - rewardPerToken(overrides?: CallOverrides): Promise; - - rewardPerTokenStored(overrides?: CallOverrides): Promise; - - rewardRate(overrides?: CallOverrides): Promise; - - rewardToken(overrides?: CallOverrides): Promise; - - rewards(arg0: string, overrides?: CallOverrides): Promise; - - stake( - _account: string, - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - userRewardPerTokenPaid( - arg0: string, - overrides?: CallOverrides - ): Promise; - - withdraw( - _account: string, - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - addRewardAmount( - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf( - account: string, - overrides?: CallOverrides - ): Promise; - - currentRewards(overrides?: CallOverrides): Promise; - - deposits(overrides?: CallOverrides): Promise; - - donate( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - duration(overrides?: CallOverrides): Promise; - - earned( - account: string, - overrides?: CallOverrides - ): Promise; - - "getReward()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "getReward(address)"( - _account: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - historicalRewards(overrides?: CallOverrides): Promise; - - lastUpdateTime(overrides?: CallOverrides): Promise; - - newRewardRatio(overrides?: CallOverrides): Promise; - - operator(overrides?: CallOverrides): Promise; - - periodFinish(overrides?: CallOverrides): Promise; - - queueNewRewards( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - queuedRewards(overrides?: CallOverrides): Promise; - - rewardPerToken(overrides?: CallOverrides): Promise; - - rewardPerTokenStored( - overrides?: CallOverrides - ): Promise; - - rewardRate(overrides?: CallOverrides): Promise; - - rewardToken(overrides?: CallOverrides): Promise; - - rewards( - arg0: string, - overrides?: CallOverrides - ): Promise; - - stake( - _account: string, - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - userRewardPerTokenPaid( - arg0: string, - overrides?: CallOverrides - ): Promise; - - withdraw( - _account: string, - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/src/types/contracts/test/mocks/integrations/ConvexExtraRewardPoolMock.sol/IExtraRewardPoolMockEvents.ts b/src/types/contracts/test/mocks/integrations/ConvexExtraRewardPoolMock.sol/IExtraRewardPoolMockEvents.ts deleted file mode 100644 index f777513a..00000000 --- a/src/types/contracts/test/mocks/integrations/ConvexExtraRewardPoolMock.sol/IExtraRewardPoolMockEvents.ts +++ /dev/null @@ -1,141 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - Signer, - utils, -} from "ethers"; -import type { EventFragment } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../../common"; - -export interface IExtraRewardPoolMockEventsInterface extends utils.Interface { - functions: {}; - - events: { - "Mock_ExtraRewardPaid(uint256,address,uint256)": EventFragment; - "Mock_ExtraStaked(uint256,address,uint256)": EventFragment; - "Mock_ExtraWithdrawn(uint256,address,uint256)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "Mock_ExtraRewardPaid"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Mock_ExtraStaked"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Mock_ExtraWithdrawn"): EventFragment; -} - -export interface Mock_ExtraRewardPaidEventObject { - index: BigNumber; - user: string; - reward: BigNumber; -} -export type Mock_ExtraRewardPaidEvent = TypedEvent< - [BigNumber, string, BigNumber], - Mock_ExtraRewardPaidEventObject ->; - -export type Mock_ExtraRewardPaidEventFilter = - TypedEventFilter; - -export interface Mock_ExtraStakedEventObject { - index: BigNumber; - user: string; - amount: BigNumber; -} -export type Mock_ExtraStakedEvent = TypedEvent< - [BigNumber, string, BigNumber], - Mock_ExtraStakedEventObject ->; - -export type Mock_ExtraStakedEventFilter = - TypedEventFilter; - -export interface Mock_ExtraWithdrawnEventObject { - index: BigNumber; - user: string; - amount: BigNumber; -} -export type Mock_ExtraWithdrawnEvent = TypedEvent< - [BigNumber, string, BigNumber], - Mock_ExtraWithdrawnEventObject ->; - -export type Mock_ExtraWithdrawnEventFilter = - TypedEventFilter; - -export interface IExtraRewardPoolMockEvents extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: IExtraRewardPoolMockEventsInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: {}; - - callStatic: {}; - - filters: { - "Mock_ExtraRewardPaid(uint256,address,uint256)"( - index?: BigNumberish | null, - user?: string | null, - reward?: null - ): Mock_ExtraRewardPaidEventFilter; - Mock_ExtraRewardPaid( - index?: BigNumberish | null, - user?: string | null, - reward?: null - ): Mock_ExtraRewardPaidEventFilter; - - "Mock_ExtraStaked(uint256,address,uint256)"( - index?: BigNumberish | null, - user?: string | null, - amount?: null - ): Mock_ExtraStakedEventFilter; - Mock_ExtraStaked( - index?: BigNumberish | null, - user?: string | null, - amount?: null - ): Mock_ExtraStakedEventFilter; - - "Mock_ExtraWithdrawn(uint256,address,uint256)"( - index?: BigNumberish | null, - user?: string | null, - amount?: null - ): Mock_ExtraWithdrawnEventFilter; - Mock_ExtraWithdrawn( - index?: BigNumberish | null, - user?: string | null, - amount?: null - ): Mock_ExtraWithdrawnEventFilter; - }; - - estimateGas: {}; - - populateTransaction: {}; -} diff --git a/src/types/contracts/test/mocks/integrations/ConvexExtraRewardPoolMock.sol/VirtualBalanceWrapper.ts b/src/types/contracts/test/mocks/integrations/ConvexExtraRewardPoolMock.sol/VirtualBalanceWrapper.ts deleted file mode 100644 index ec87c1f0..00000000 --- a/src/types/contracts/test/mocks/integrations/ConvexExtraRewardPoolMock.sol/VirtualBalanceWrapper.ts +++ /dev/null @@ -1,203 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../../common"; - -export interface VirtualBalanceWrapperInterface extends utils.Interface { - functions: { - "balanceOf(address)": FunctionFragment; - "deposits()": FunctionFragment; - "totalSupply()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: "balanceOf" | "deposits" | "totalSupply" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "balanceOf", values: [string]): string; - encodeFunctionData(functionFragment: "deposits", values?: undefined): string; - encodeFunctionData( - functionFragment: "totalSupply", - values?: undefined - ): string; - - decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "deposits", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "totalSupply", - data: BytesLike - ): Result; - - events: { - "Mock_ExtraRewardPaid(uint256,address,uint256)": EventFragment; - "Mock_ExtraStaked(uint256,address,uint256)": EventFragment; - "Mock_ExtraWithdrawn(uint256,address,uint256)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "Mock_ExtraRewardPaid"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Mock_ExtraStaked"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Mock_ExtraWithdrawn"): EventFragment; -} - -export interface Mock_ExtraRewardPaidEventObject { - index: BigNumber; - user: string; - reward: BigNumber; -} -export type Mock_ExtraRewardPaidEvent = TypedEvent< - [BigNumber, string, BigNumber], - Mock_ExtraRewardPaidEventObject ->; - -export type Mock_ExtraRewardPaidEventFilter = - TypedEventFilter; - -export interface Mock_ExtraStakedEventObject { - index: BigNumber; - user: string; - amount: BigNumber; -} -export type Mock_ExtraStakedEvent = TypedEvent< - [BigNumber, string, BigNumber], - Mock_ExtraStakedEventObject ->; - -export type Mock_ExtraStakedEventFilter = - TypedEventFilter; - -export interface Mock_ExtraWithdrawnEventObject { - index: BigNumber; - user: string; - amount: BigNumber; -} -export type Mock_ExtraWithdrawnEvent = TypedEvent< - [BigNumber, string, BigNumber], - Mock_ExtraWithdrawnEventObject ->; - -export type Mock_ExtraWithdrawnEventFilter = - TypedEventFilter; - -export interface VirtualBalanceWrapper extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: VirtualBalanceWrapperInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - balanceOf(account: string, overrides?: CallOverrides): Promise<[BigNumber]>; - - deposits(overrides?: CallOverrides): Promise<[string]>; - - totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>; - }; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - deposits(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - callStatic: { - balanceOf(account: string, overrides?: CallOverrides): Promise; - - deposits(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - }; - - filters: { - "Mock_ExtraRewardPaid(uint256,address,uint256)"( - index?: BigNumberish | null, - user?: string | null, - reward?: null - ): Mock_ExtraRewardPaidEventFilter; - Mock_ExtraRewardPaid( - index?: BigNumberish | null, - user?: string | null, - reward?: null - ): Mock_ExtraRewardPaidEventFilter; - - "Mock_ExtraStaked(uint256,address,uint256)"( - index?: BigNumberish | null, - user?: string | null, - amount?: null - ): Mock_ExtraStakedEventFilter; - Mock_ExtraStaked( - index?: BigNumberish | null, - user?: string | null, - amount?: null - ): Mock_ExtraStakedEventFilter; - - "Mock_ExtraWithdrawn(uint256,address,uint256)"( - index?: BigNumberish | null, - user?: string | null, - amount?: null - ): Mock_ExtraWithdrawnEventFilter; - Mock_ExtraWithdrawn( - index?: BigNumberish | null, - user?: string | null, - amount?: null - ): Mock_ExtraWithdrawnEventFilter; - }; - - estimateGas: { - balanceOf(account: string, overrides?: CallOverrides): Promise; - - deposits(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - balanceOf( - account: string, - overrides?: CallOverrides - ): Promise; - - deposits(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/test/mocks/integrations/ConvexExtraRewardPoolMock.sol/index.ts b/src/types/contracts/test/mocks/integrations/ConvexExtraRewardPoolMock.sol/index.ts deleted file mode 100644 index 83e5f842..00000000 --- a/src/types/contracts/test/mocks/integrations/ConvexExtraRewardPoolMock.sol/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { ExtraRewardPoolMock } from "./ExtraRewardPoolMock"; -export type { IExtraRewardPoolMockEvents } from "./IExtraRewardPoolMockEvents"; -export type { VirtualBalanceWrapper } from "./VirtualBalanceWrapper"; diff --git a/src/types/contracts/test/mocks/integrations/ConvexTokenRewardContractMock.sol/TokenRewardContractMock.ts b/src/types/contracts/test/mocks/integrations/ConvexTokenRewardContractMock.sol/TokenRewardContractMock.ts deleted file mode 100644 index 1f44d661..00000000 --- a/src/types/contracts/test/mocks/integrations/ConvexTokenRewardContractMock.sol/TokenRewardContractMock.ts +++ /dev/null @@ -1,425 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../../common"; - -export interface TokenRewardContractMockInterface extends utils.Interface { - functions: { - "addRewardAmount(address,uint256)": FunctionFragment; - "balanceOf(address)": FunctionFragment; - "deposits()": FunctionFragment; - "duration()": FunctionFragment; - "getReward(address,address)": FunctionFragment; - "getReward(address)": FunctionFragment; - "operator()": FunctionFragment; - "stake(address,uint256)": FunctionFragment; - "totalSupply()": FunctionFragment; - "withdraw(address,uint256)": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "addRewardAmount" - | "balanceOf" - | "deposits" - | "duration" - | "getReward(address,address)" - | "getReward(address)" - | "operator" - | "stake" - | "totalSupply" - | "withdraw" - ): FunctionFragment; - - encodeFunctionData( - functionFragment: "addRewardAmount", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "balanceOf", values: [string]): string; - encodeFunctionData(functionFragment: "deposits", values?: undefined): string; - encodeFunctionData(functionFragment: "duration", values?: undefined): string; - encodeFunctionData( - functionFragment: "getReward(address,address)", - values: [string, string] - ): string; - encodeFunctionData( - functionFragment: "getReward(address)", - values: [string] - ): string; - encodeFunctionData(functionFragment: "operator", values?: undefined): string; - encodeFunctionData( - functionFragment: "stake", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "totalSupply", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "withdraw", - values: [string, BigNumberish] - ): string; - - decodeFunctionResult( - functionFragment: "addRewardAmount", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "deposits", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "duration", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "getReward(address,address)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getReward(address)", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "operator", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "stake", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "totalSupply", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "withdraw", data: BytesLike): Result; - - events: { - "Mock_ExtraRewardPaid(uint256,address,uint256)": EventFragment; - "Mock_ExtraStaked(uint256,address,uint256)": EventFragment; - "Mock_ExtraWithdrawn(uint256,address,uint256)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "Mock_ExtraRewardPaid"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Mock_ExtraStaked"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Mock_ExtraWithdrawn"): EventFragment; -} - -export interface Mock_ExtraRewardPaidEventObject { - index: BigNumber; - user: string; - reward: BigNumber; -} -export type Mock_ExtraRewardPaidEvent = TypedEvent< - [BigNumber, string, BigNumber], - Mock_ExtraRewardPaidEventObject ->; - -export type Mock_ExtraRewardPaidEventFilter = - TypedEventFilter; - -export interface Mock_ExtraStakedEventObject { - index: BigNumber; - user: string; - amount: BigNumber; -} -export type Mock_ExtraStakedEvent = TypedEvent< - [BigNumber, string, BigNumber], - Mock_ExtraStakedEventObject ->; - -export type Mock_ExtraStakedEventFilter = - TypedEventFilter; - -export interface Mock_ExtraWithdrawnEventObject { - index: BigNumber; - user: string; - amount: BigNumber; -} -export type Mock_ExtraWithdrawnEvent = TypedEvent< - [BigNumber, string, BigNumber], - Mock_ExtraWithdrawnEventObject ->; - -export type Mock_ExtraWithdrawnEventFilter = - TypedEventFilter; - -export interface TokenRewardContractMock extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: TokenRewardContractMockInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - addRewardAmount( - token: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise<[BigNumber]>; - - deposits(overrides?: CallOverrides): Promise<[string]>; - - duration(overrides?: CallOverrides): Promise<[BigNumber]>; - - "getReward(address,address)"( - _account: string, - _token: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "getReward(address)"( - _token: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - operator(overrides?: CallOverrides): Promise<[string]>; - - stake( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise<[boolean]>; - - totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>; - - withdraw( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise<[boolean]>; - }; - - addRewardAmount( - token: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - deposits(overrides?: CallOverrides): Promise; - - duration(overrides?: CallOverrides): Promise; - - "getReward(address,address)"( - _account: string, - _token: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "getReward(address)"( - _token: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - operator(overrides?: CallOverrides): Promise; - - stake( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - withdraw( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - callStatic: { - addRewardAmount( - token: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - deposits(overrides?: CallOverrides): Promise; - - duration(overrides?: CallOverrides): Promise; - - "getReward(address,address)"( - _account: string, - _token: string, - overrides?: CallOverrides - ): Promise; - - "getReward(address)"( - _token: string, - overrides?: CallOverrides - ): Promise; - - operator(overrides?: CallOverrides): Promise; - - stake( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - withdraw( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - "Mock_ExtraRewardPaid(uint256,address,uint256)"( - index?: BigNumberish | null, - user?: string | null, - reward?: null - ): Mock_ExtraRewardPaidEventFilter; - Mock_ExtraRewardPaid( - index?: BigNumberish | null, - user?: string | null, - reward?: null - ): Mock_ExtraRewardPaidEventFilter; - - "Mock_ExtraStaked(uint256,address,uint256)"( - index?: BigNumberish | null, - user?: string | null, - amount?: null - ): Mock_ExtraStakedEventFilter; - Mock_ExtraStaked( - index?: BigNumberish | null, - user?: string | null, - amount?: null - ): Mock_ExtraStakedEventFilter; - - "Mock_ExtraWithdrawn(uint256,address,uint256)"( - index?: BigNumberish | null, - user?: string | null, - amount?: null - ): Mock_ExtraWithdrawnEventFilter; - Mock_ExtraWithdrawn( - index?: BigNumberish | null, - user?: string | null, - amount?: null - ): Mock_ExtraWithdrawnEventFilter; - }; - - estimateGas: { - addRewardAmount( - token: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - deposits(overrides?: CallOverrides): Promise; - - duration(overrides?: CallOverrides): Promise; - - "getReward(address,address)"( - _account: string, - _token: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "getReward(address)"( - _token: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - operator(overrides?: CallOverrides): Promise; - - stake( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - withdraw( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - populateTransaction: { - addRewardAmount( - token: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf( - account: string, - overrides?: CallOverrides - ): Promise; - - deposits(overrides?: CallOverrides): Promise; - - duration(overrides?: CallOverrides): Promise; - - "getReward(address,address)"( - _account: string, - _token: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "getReward(address)"( - _token: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - operator(overrides?: CallOverrides): Promise; - - stake( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - withdraw( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; -} diff --git a/src/types/contracts/test/mocks/integrations/ConvexTokenRewardContractMock.sol/index.ts b/src/types/contracts/test/mocks/integrations/ConvexTokenRewardContractMock.sol/index.ts deleted file mode 100644 index 91a73606..00000000 --- a/src/types/contracts/test/mocks/integrations/ConvexTokenRewardContractMock.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { TokenRewardContractMock } from "./TokenRewardContractMock"; diff --git a/src/types/contracts/test/mocks/integrations/CurveV1MetapoolMock.ts b/src/types/contracts/test/mocks/integrations/CurveV1MetapoolMock.ts deleted file mode 100644 index 350d31e5..00000000 --- a/src/types/contracts/test/mocks/integrations/CurveV1MetapoolMock.ts +++ /dev/null @@ -1,1101 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface CurveV1MetapoolMockInterface extends utils.Interface { - functions: { - "A()": FunctionFragment; - "A_precise()": FunctionFragment; - "admin()": FunctionFragment; - "admin_balances(uint256)": FunctionFragment; - "admin_fee()": FunctionFragment; - "allowance(address,address)": FunctionFragment; - "balanceOf(address)": FunctionFragment; - "balances(int128)": FunctionFragment; - "balances(uint256)": FunctionFragment; - "basePool()": FunctionFragment; - "block_timestamp_last()": FunctionFragment; - "calc_withdraw_one_coin(uint256,int128)": FunctionFragment; - "coins(int128)": FunctionFragment; - "coins(uint256)": FunctionFragment; - "decimals()": FunctionFragment; - "exchange(int128,int128,uint256,uint256)": FunctionFragment; - "exchange_underlying(int128,int128,uint256,uint256)": FunctionFragment; - "fee()": FunctionFragment; - "future_A()": FunctionFragment; - "future_A_time()": FunctionFragment; - "get_dy(int128,int128,uint256)": FunctionFragment; - "get_dy_underlying(int128,int128,uint256)": FunctionFragment; - "get_virtual_price()": FunctionFragment; - "initial_A()": FunctionFragment; - "initial_A_time()": FunctionFragment; - "lp_token()": FunctionFragment; - "name()": FunctionFragment; - "remove_liquidity_one_coin(uint256,int128,uint256)": FunctionFragment; - "setRate(int128,int128,uint256)": FunctionFragment; - "setRateUnderlying(int128,int128,uint256)": FunctionFragment; - "setWithdrawRate(int128,uint256)": FunctionFragment; - "set_virtual_price(uint256)": FunctionFragment; - "symbol()": FunctionFragment; - "token()": FunctionFragment; - "totalSupply()": FunctionFragment; - "underlying_coins(int128)": FunctionFragment; - "underlying_coins(uint256)": FunctionFragment; - "virtualPrice()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "A" - | "A_precise" - | "admin" - | "admin_balances" - | "admin_fee" - | "allowance" - | "balanceOf" - | "balances(int128)" - | "balances(uint256)" - | "basePool" - | "block_timestamp_last" - | "calc_withdraw_one_coin" - | "coins(int128)" - | "coins(uint256)" - | "decimals" - | "exchange" - | "exchange_underlying" - | "fee" - | "future_A" - | "future_A_time" - | "get_dy" - | "get_dy_underlying" - | "get_virtual_price" - | "initial_A" - | "initial_A_time" - | "lp_token" - | "name" - | "remove_liquidity_one_coin" - | "setRate" - | "setRateUnderlying" - | "setWithdrawRate" - | "set_virtual_price" - | "symbol" - | "token" - | "totalSupply" - | "underlying_coins(int128)" - | "underlying_coins(uint256)" - | "virtualPrice" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "A", values?: undefined): string; - encodeFunctionData(functionFragment: "A_precise", values?: undefined): string; - encodeFunctionData(functionFragment: "admin", values?: undefined): string; - encodeFunctionData( - functionFragment: "admin_balances", - values: [BigNumberish] - ): string; - encodeFunctionData(functionFragment: "admin_fee", values?: undefined): string; - encodeFunctionData( - functionFragment: "allowance", - values: [string, string] - ): string; - encodeFunctionData(functionFragment: "balanceOf", values: [string]): string; - encodeFunctionData( - functionFragment: "balances(int128)", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "balances(uint256)", - values: [BigNumberish] - ): string; - encodeFunctionData(functionFragment: "basePool", values?: undefined): string; - encodeFunctionData( - functionFragment: "block_timestamp_last", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "calc_withdraw_one_coin", - values: [BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "coins(int128)", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "coins(uint256)", - values: [BigNumberish] - ): string; - encodeFunctionData(functionFragment: "decimals", values?: undefined): string; - encodeFunctionData( - functionFragment: "exchange", - values: [BigNumberish, BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "exchange_underlying", - values: [BigNumberish, BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "fee", values?: undefined): string; - encodeFunctionData(functionFragment: "future_A", values?: undefined): string; - encodeFunctionData( - functionFragment: "future_A_time", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "get_dy", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "get_dy_underlying", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "get_virtual_price", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "initial_A", values?: undefined): string; - encodeFunctionData( - functionFragment: "initial_A_time", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "lp_token", values?: undefined): string; - encodeFunctionData(functionFragment: "name", values?: undefined): string; - encodeFunctionData( - functionFragment: "remove_liquidity_one_coin", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "setRate", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "setRateUnderlying", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "setWithdrawRate", - values: [BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "set_virtual_price", - values: [BigNumberish] - ): string; - encodeFunctionData(functionFragment: "symbol", values?: undefined): string; - encodeFunctionData(functionFragment: "token", values?: undefined): string; - encodeFunctionData( - functionFragment: "totalSupply", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "underlying_coins(int128)", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "underlying_coins(uint256)", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "virtualPrice", - values?: undefined - ): string; - - decodeFunctionResult(functionFragment: "A", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "A_precise", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "admin", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "admin_balances", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "admin_fee", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "balances(int128)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "balances(uint256)", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "basePool", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "block_timestamp_last", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "calc_withdraw_one_coin", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "coins(int128)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "coins(uint256)", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "exchange", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "exchange_underlying", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "fee", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "future_A", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "future_A_time", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "get_dy", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "get_dy_underlying", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "get_virtual_price", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "initial_A", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "initial_A_time", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "lp_token", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "remove_liquidity_one_coin", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "setRate", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "setRateUnderlying", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "setWithdrawRate", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "set_virtual_price", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "token", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "totalSupply", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "underlying_coins(int128)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "underlying_coins(uint256)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "virtualPrice", - data: BytesLike - ): Result; - - events: {}; -} - -export interface CurveV1MetapoolMock extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: CurveV1MetapoolMockInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - A(overrides?: CallOverrides): Promise<[BigNumber]>; - - A_precise(overrides?: CallOverrides): Promise<[BigNumber]>; - - admin(overrides?: CallOverrides): Promise<[string]>; - - admin_balances( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - admin_fee(overrides?: CallOverrides): Promise<[BigNumber]>; - - allowance( - arg0: string, - arg1: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - balanceOf(arg0: string, overrides?: CallOverrides): Promise<[BigNumber]>; - - "balances(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "balances(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - basePool(overrides?: CallOverrides): Promise<[string]>; - - block_timestamp_last(overrides?: CallOverrides): Promise<[BigNumber]>; - - calc_withdraw_one_coin( - amount: BigNumberish, - coin: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - "coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - decimals(overrides?: CallOverrides): Promise<[BigNumber]>; - - exchange( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - min_dy: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - min_dy: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fee(overrides?: CallOverrides): Promise<[BigNumber]>; - - future_A(overrides?: CallOverrides): Promise<[BigNumber]>; - - future_A_time(overrides?: CallOverrides): Promise<[BigNumber]>; - - get_dy( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - get_dy_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - get_virtual_price(overrides?: CallOverrides): Promise<[BigNumber]>; - - initial_A(overrides?: CallOverrides): Promise<[BigNumber]>; - - initial_A_time(overrides?: CallOverrides): Promise<[BigNumber]>; - - lp_token(overrides?: CallOverrides): Promise<[string]>; - - name(overrides?: CallOverrides): Promise<[string]>; - - remove_liquidity_one_coin( - _token_amount: BigNumberish, - i: BigNumberish, - min_amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setRate( - i: BigNumberish, - j: BigNumberish, - rate_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setRateUnderlying( - i: BigNumberish, - j: BigNumberish, - rate_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setWithdrawRate( - i: BigNumberish, - rate_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - set_virtual_price( - _price: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise<[string]>; - - token(overrides?: CallOverrides): Promise<[string]>; - - totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>; - - "underlying_coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - "underlying_coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - virtualPrice(overrides?: CallOverrides): Promise<[BigNumber]>; - }; - - A(overrides?: CallOverrides): Promise; - - A_precise(overrides?: CallOverrides): Promise; - - admin(overrides?: CallOverrides): Promise; - - admin_balances( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - admin_fee(overrides?: CallOverrides): Promise; - - allowance( - arg0: string, - arg1: string, - overrides?: CallOverrides - ): Promise; - - balanceOf(arg0: string, overrides?: CallOverrides): Promise; - - "balances(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "balances(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - basePool(overrides?: CallOverrides): Promise; - - block_timestamp_last(overrides?: CallOverrides): Promise; - - calc_withdraw_one_coin( - amount: BigNumberish, - coin: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(int128)"(i: BigNumberish, overrides?: CallOverrides): Promise; - - "coins(uint256)"(i: BigNumberish, overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - exchange( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - min_dy: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - min_dy: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fee(overrides?: CallOverrides): Promise; - - future_A(overrides?: CallOverrides): Promise; - - future_A_time(overrides?: CallOverrides): Promise; - - get_dy( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_dy_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_virtual_price(overrides?: CallOverrides): Promise; - - initial_A(overrides?: CallOverrides): Promise; - - initial_A_time(overrides?: CallOverrides): Promise; - - lp_token(overrides?: CallOverrides): Promise; - - name(overrides?: CallOverrides): Promise; - - remove_liquidity_one_coin( - _token_amount: BigNumberish, - i: BigNumberish, - min_amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setRate( - i: BigNumberish, - j: BigNumberish, - rate_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setRateUnderlying( - i: BigNumberish, - j: BigNumberish, - rate_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setWithdrawRate( - i: BigNumberish, - rate_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - set_virtual_price( - _price: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - token(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "underlying_coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "underlying_coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - virtualPrice(overrides?: CallOverrides): Promise; - - callStatic: { - A(overrides?: CallOverrides): Promise; - - A_precise(overrides?: CallOverrides): Promise; - - admin(overrides?: CallOverrides): Promise; - - admin_balances( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - admin_fee(overrides?: CallOverrides): Promise; - - allowance( - arg0: string, - arg1: string, - overrides?: CallOverrides - ): Promise; - - balanceOf(arg0: string, overrides?: CallOverrides): Promise; - - "balances(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "balances(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - basePool(overrides?: CallOverrides): Promise; - - block_timestamp_last(overrides?: CallOverrides): Promise; - - calc_withdraw_one_coin( - amount: BigNumberish, - coin: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - exchange( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - min_dy: BigNumberish, - overrides?: CallOverrides - ): Promise; - - exchange_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - min_dy: BigNumberish, - overrides?: CallOverrides - ): Promise; - - fee(overrides?: CallOverrides): Promise; - - future_A(overrides?: CallOverrides): Promise; - - future_A_time(overrides?: CallOverrides): Promise; - - get_dy( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_dy_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_virtual_price(overrides?: CallOverrides): Promise; - - initial_A(overrides?: CallOverrides): Promise; - - initial_A_time(overrides?: CallOverrides): Promise; - - lp_token(overrides?: CallOverrides): Promise; - - name(overrides?: CallOverrides): Promise; - - remove_liquidity_one_coin( - _token_amount: BigNumberish, - i: BigNumberish, - min_amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - setRate( - i: BigNumberish, - j: BigNumberish, - rate_RAY: BigNumberish, - overrides?: CallOverrides - ): Promise; - - setRateUnderlying( - i: BigNumberish, - j: BigNumberish, - rate_RAY: BigNumberish, - overrides?: CallOverrides - ): Promise; - - setWithdrawRate( - i: BigNumberish, - rate_RAY: BigNumberish, - overrides?: CallOverrides - ): Promise; - - set_virtual_price( - _price: BigNumberish, - overrides?: CallOverrides - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - token(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "underlying_coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "underlying_coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - virtualPrice(overrides?: CallOverrides): Promise; - }; - - filters: {}; - - estimateGas: { - A(overrides?: CallOverrides): Promise; - - A_precise(overrides?: CallOverrides): Promise; - - admin(overrides?: CallOverrides): Promise; - - admin_balances( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - admin_fee(overrides?: CallOverrides): Promise; - - allowance( - arg0: string, - arg1: string, - overrides?: CallOverrides - ): Promise; - - balanceOf(arg0: string, overrides?: CallOverrides): Promise; - - "balances(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "balances(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - basePool(overrides?: CallOverrides): Promise; - - block_timestamp_last(overrides?: CallOverrides): Promise; - - calc_withdraw_one_coin( - amount: BigNumberish, - coin: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - exchange( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - min_dy: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - min_dy: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fee(overrides?: CallOverrides): Promise; - - future_A(overrides?: CallOverrides): Promise; - - future_A_time(overrides?: CallOverrides): Promise; - - get_dy( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_dy_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_virtual_price(overrides?: CallOverrides): Promise; - - initial_A(overrides?: CallOverrides): Promise; - - initial_A_time(overrides?: CallOverrides): Promise; - - lp_token(overrides?: CallOverrides): Promise; - - name(overrides?: CallOverrides): Promise; - - remove_liquidity_one_coin( - _token_amount: BigNumberish, - i: BigNumberish, - min_amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setRate( - i: BigNumberish, - j: BigNumberish, - rate_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setRateUnderlying( - i: BigNumberish, - j: BigNumberish, - rate_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setWithdrawRate( - i: BigNumberish, - rate_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - set_virtual_price( - _price: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - token(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "underlying_coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "underlying_coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - virtualPrice(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - A(overrides?: CallOverrides): Promise; - - A_precise(overrides?: CallOverrides): Promise; - - admin(overrides?: CallOverrides): Promise; - - admin_balances( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - admin_fee(overrides?: CallOverrides): Promise; - - allowance( - arg0: string, - arg1: string, - overrides?: CallOverrides - ): Promise; - - balanceOf( - arg0: string, - overrides?: CallOverrides - ): Promise; - - "balances(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "balances(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - basePool(overrides?: CallOverrides): Promise; - - block_timestamp_last( - overrides?: CallOverrides - ): Promise; - - calc_withdraw_one_coin( - amount: BigNumberish, - coin: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - exchange( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - min_dy: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - min_dy: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fee(overrides?: CallOverrides): Promise; - - future_A(overrides?: CallOverrides): Promise; - - future_A_time(overrides?: CallOverrides): Promise; - - get_dy( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_dy_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_virtual_price(overrides?: CallOverrides): Promise; - - initial_A(overrides?: CallOverrides): Promise; - - initial_A_time(overrides?: CallOverrides): Promise; - - lp_token(overrides?: CallOverrides): Promise; - - name(overrides?: CallOverrides): Promise; - - remove_liquidity_one_coin( - _token_amount: BigNumberish, - i: BigNumberish, - min_amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setRate( - i: BigNumberish, - j: BigNumberish, - rate_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setRateUnderlying( - i: BigNumberish, - j: BigNumberish, - rate_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setWithdrawRate( - i: BigNumberish, - rate_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - set_virtual_price( - _price: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - token(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "underlying_coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "underlying_coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - virtualPrice(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/test/mocks/integrations/CurveV1Mock.ts b/src/types/contracts/test/mocks/integrations/CurveV1Mock.ts deleted file mode 100644 index 017ffe64..00000000 --- a/src/types/contracts/test/mocks/integrations/CurveV1Mock.ts +++ /dev/null @@ -1,1124 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface CurveV1MockInterface extends utils.Interface { - functions: { - "A()": FunctionFragment; - "A_precise()": FunctionFragment; - "admin()": FunctionFragment; - "admin_balances(uint256)": FunctionFragment; - "admin_fee()": FunctionFragment; - "allowance(address,address)": FunctionFragment; - "balanceOf(address)": FunctionFragment; - "balances(int128)": FunctionFragment; - "balances(uint256)": FunctionFragment; - "block_timestamp_last()": FunctionFragment; - "calc_withdraw_one_coin(uint256,int128)": FunctionFragment; - "coins(int128)": FunctionFragment; - "coins(uint256)": FunctionFragment; - "decimals()": FunctionFragment; - "exchange(int128,int128,uint256,uint256)": FunctionFragment; - "exchange_underlying(int128,int128,uint256,uint256)": FunctionFragment; - "fee()": FunctionFragment; - "future_A()": FunctionFragment; - "future_A_time()": FunctionFragment; - "get_dy(int128,int128,uint256)": FunctionFragment; - "get_dy_underlying(int128,int128,uint256)": FunctionFragment; - "get_virtual_price()": FunctionFragment; - "initial_A()": FunctionFragment; - "initial_A_time()": FunctionFragment; - "lp_token()": FunctionFragment; - "mintLP(address,uint256)": FunctionFragment; - "name()": FunctionFragment; - "remove_liquidity_one_coin(uint256,int128,uint256)": FunctionFragment; - "setRate(int128,int128,uint256)": FunctionFragment; - "setRateUnderlying(int128,int128,uint256)": FunctionFragment; - "setWithdrawRate(int128,uint256)": FunctionFragment; - "set_virtual_price(uint256)": FunctionFragment; - "symbol()": FunctionFragment; - "token()": FunctionFragment; - "totalSupply()": FunctionFragment; - "underlying_coins(int128)": FunctionFragment; - "underlying_coins(uint256)": FunctionFragment; - "virtualPrice()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "A" - | "A_precise" - | "admin" - | "admin_balances" - | "admin_fee" - | "allowance" - | "balanceOf" - | "balances(int128)" - | "balances(uint256)" - | "block_timestamp_last" - | "calc_withdraw_one_coin" - | "coins(int128)" - | "coins(uint256)" - | "decimals" - | "exchange" - | "exchange_underlying" - | "fee" - | "future_A" - | "future_A_time" - | "get_dy" - | "get_dy_underlying" - | "get_virtual_price" - | "initial_A" - | "initial_A_time" - | "lp_token" - | "mintLP" - | "name" - | "remove_liquidity_one_coin" - | "setRate" - | "setRateUnderlying" - | "setWithdrawRate" - | "set_virtual_price" - | "symbol" - | "token" - | "totalSupply" - | "underlying_coins(int128)" - | "underlying_coins(uint256)" - | "virtualPrice" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "A", values?: undefined): string; - encodeFunctionData(functionFragment: "A_precise", values?: undefined): string; - encodeFunctionData(functionFragment: "admin", values?: undefined): string; - encodeFunctionData( - functionFragment: "admin_balances", - values: [BigNumberish] - ): string; - encodeFunctionData(functionFragment: "admin_fee", values?: undefined): string; - encodeFunctionData( - functionFragment: "allowance", - values: [string, string] - ): string; - encodeFunctionData(functionFragment: "balanceOf", values: [string]): string; - encodeFunctionData( - functionFragment: "balances(int128)", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "balances(uint256)", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "block_timestamp_last", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "calc_withdraw_one_coin", - values: [BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "coins(int128)", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "coins(uint256)", - values: [BigNumberish] - ): string; - encodeFunctionData(functionFragment: "decimals", values?: undefined): string; - encodeFunctionData( - functionFragment: "exchange", - values: [BigNumberish, BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "exchange_underlying", - values: [BigNumberish, BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "fee", values?: undefined): string; - encodeFunctionData(functionFragment: "future_A", values?: undefined): string; - encodeFunctionData( - functionFragment: "future_A_time", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "get_dy", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "get_dy_underlying", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "get_virtual_price", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "initial_A", values?: undefined): string; - encodeFunctionData( - functionFragment: "initial_A_time", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "lp_token", values?: undefined): string; - encodeFunctionData( - functionFragment: "mintLP", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "name", values?: undefined): string; - encodeFunctionData( - functionFragment: "remove_liquidity_one_coin", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "setRate", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "setRateUnderlying", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "setWithdrawRate", - values: [BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "set_virtual_price", - values: [BigNumberish] - ): string; - encodeFunctionData(functionFragment: "symbol", values?: undefined): string; - encodeFunctionData(functionFragment: "token", values?: undefined): string; - encodeFunctionData( - functionFragment: "totalSupply", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "underlying_coins(int128)", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "underlying_coins(uint256)", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "virtualPrice", - values?: undefined - ): string; - - decodeFunctionResult(functionFragment: "A", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "A_precise", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "admin", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "admin_balances", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "admin_fee", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "balances(int128)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "balances(uint256)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "block_timestamp_last", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "calc_withdraw_one_coin", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "coins(int128)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "coins(uint256)", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "exchange", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "exchange_underlying", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "fee", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "future_A", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "future_A_time", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "get_dy", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "get_dy_underlying", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "get_virtual_price", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "initial_A", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "initial_A_time", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "lp_token", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "mintLP", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "remove_liquidity_one_coin", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "setRate", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "setRateUnderlying", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "setWithdrawRate", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "set_virtual_price", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "token", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "totalSupply", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "underlying_coins(int128)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "underlying_coins(uint256)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "virtualPrice", - data: BytesLike - ): Result; - - events: {}; -} - -export interface CurveV1Mock extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: CurveV1MockInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - A(overrides?: CallOverrides): Promise<[BigNumber]>; - - A_precise(overrides?: CallOverrides): Promise<[BigNumber]>; - - admin(overrides?: CallOverrides): Promise<[string]>; - - admin_balances( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - admin_fee(overrides?: CallOverrides): Promise<[BigNumber]>; - - allowance( - arg0: string, - arg1: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - balanceOf(arg0: string, overrides?: CallOverrides): Promise<[BigNumber]>; - - "balances(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "balances(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - block_timestamp_last(overrides?: CallOverrides): Promise<[BigNumber]>; - - calc_withdraw_one_coin( - amount: BigNumberish, - coin: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - "coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - decimals(overrides?: CallOverrides): Promise<[BigNumber]>; - - exchange( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - min_dy: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - min_dy: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fee(overrides?: CallOverrides): Promise<[BigNumber]>; - - future_A(overrides?: CallOverrides): Promise<[BigNumber]>; - - future_A_time(overrides?: CallOverrides): Promise<[BigNumber]>; - - get_dy( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - get_dy_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - get_virtual_price(overrides?: CallOverrides): Promise<[BigNumber]>; - - initial_A(overrides?: CallOverrides): Promise<[BigNumber]>; - - initial_A_time(overrides?: CallOverrides): Promise<[BigNumber]>; - - lp_token(overrides?: CallOverrides): Promise<[string]>; - - mintLP( - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise<[string]>; - - remove_liquidity_one_coin( - _token_amount: BigNumberish, - i: BigNumberish, - min_amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setRate( - i: BigNumberish, - j: BigNumberish, - rate_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setRateUnderlying( - i: BigNumberish, - j: BigNumberish, - rate_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setWithdrawRate( - i: BigNumberish, - rate_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - set_virtual_price( - _price: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise<[string]>; - - token(overrides?: CallOverrides): Promise<[string]>; - - totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>; - - "underlying_coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - "underlying_coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - virtualPrice(overrides?: CallOverrides): Promise<[BigNumber]>; - }; - - A(overrides?: CallOverrides): Promise; - - A_precise(overrides?: CallOverrides): Promise; - - admin(overrides?: CallOverrides): Promise; - - admin_balances( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - admin_fee(overrides?: CallOverrides): Promise; - - allowance( - arg0: string, - arg1: string, - overrides?: CallOverrides - ): Promise; - - balanceOf(arg0: string, overrides?: CallOverrides): Promise; - - "balances(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "balances(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - block_timestamp_last(overrides?: CallOverrides): Promise; - - calc_withdraw_one_coin( - amount: BigNumberish, - coin: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(int128)"(i: BigNumberish, overrides?: CallOverrides): Promise; - - "coins(uint256)"(i: BigNumberish, overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - exchange( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - min_dy: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - min_dy: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fee(overrides?: CallOverrides): Promise; - - future_A(overrides?: CallOverrides): Promise; - - future_A_time(overrides?: CallOverrides): Promise; - - get_dy( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_dy_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_virtual_price(overrides?: CallOverrides): Promise; - - initial_A(overrides?: CallOverrides): Promise; - - initial_A_time(overrides?: CallOverrides): Promise; - - lp_token(overrides?: CallOverrides): Promise; - - mintLP( - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - remove_liquidity_one_coin( - _token_amount: BigNumberish, - i: BigNumberish, - min_amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setRate( - i: BigNumberish, - j: BigNumberish, - rate_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setRateUnderlying( - i: BigNumberish, - j: BigNumberish, - rate_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setWithdrawRate( - i: BigNumberish, - rate_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - set_virtual_price( - _price: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - token(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "underlying_coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "underlying_coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - virtualPrice(overrides?: CallOverrides): Promise; - - callStatic: { - A(overrides?: CallOverrides): Promise; - - A_precise(overrides?: CallOverrides): Promise; - - admin(overrides?: CallOverrides): Promise; - - admin_balances( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - admin_fee(overrides?: CallOverrides): Promise; - - allowance( - arg0: string, - arg1: string, - overrides?: CallOverrides - ): Promise; - - balanceOf(arg0: string, overrides?: CallOverrides): Promise; - - "balances(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "balances(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - block_timestamp_last(overrides?: CallOverrides): Promise; - - calc_withdraw_one_coin( - amount: BigNumberish, - coin: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - exchange( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - min_dy: BigNumberish, - overrides?: CallOverrides - ): Promise; - - exchange_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - min_dy: BigNumberish, - overrides?: CallOverrides - ): Promise; - - fee(overrides?: CallOverrides): Promise; - - future_A(overrides?: CallOverrides): Promise; - - future_A_time(overrides?: CallOverrides): Promise; - - get_dy( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_dy_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_virtual_price(overrides?: CallOverrides): Promise; - - initial_A(overrides?: CallOverrides): Promise; - - initial_A_time(overrides?: CallOverrides): Promise; - - lp_token(overrides?: CallOverrides): Promise; - - mintLP( - to: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - remove_liquidity_one_coin( - _token_amount: BigNumberish, - i: BigNumberish, - min_amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - setRate( - i: BigNumberish, - j: BigNumberish, - rate_RAY: BigNumberish, - overrides?: CallOverrides - ): Promise; - - setRateUnderlying( - i: BigNumberish, - j: BigNumberish, - rate_RAY: BigNumberish, - overrides?: CallOverrides - ): Promise; - - setWithdrawRate( - i: BigNumberish, - rate_RAY: BigNumberish, - overrides?: CallOverrides - ): Promise; - - set_virtual_price( - _price: BigNumberish, - overrides?: CallOverrides - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - token(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "underlying_coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "underlying_coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - virtualPrice(overrides?: CallOverrides): Promise; - }; - - filters: {}; - - estimateGas: { - A(overrides?: CallOverrides): Promise; - - A_precise(overrides?: CallOverrides): Promise; - - admin(overrides?: CallOverrides): Promise; - - admin_balances( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - admin_fee(overrides?: CallOverrides): Promise; - - allowance( - arg0: string, - arg1: string, - overrides?: CallOverrides - ): Promise; - - balanceOf(arg0: string, overrides?: CallOverrides): Promise; - - "balances(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "balances(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - block_timestamp_last(overrides?: CallOverrides): Promise; - - calc_withdraw_one_coin( - amount: BigNumberish, - coin: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - exchange( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - min_dy: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - min_dy: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fee(overrides?: CallOverrides): Promise; - - future_A(overrides?: CallOverrides): Promise; - - future_A_time(overrides?: CallOverrides): Promise; - - get_dy( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_dy_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_virtual_price(overrides?: CallOverrides): Promise; - - initial_A(overrides?: CallOverrides): Promise; - - initial_A_time(overrides?: CallOverrides): Promise; - - lp_token(overrides?: CallOverrides): Promise; - - mintLP( - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - remove_liquidity_one_coin( - _token_amount: BigNumberish, - i: BigNumberish, - min_amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setRate( - i: BigNumberish, - j: BigNumberish, - rate_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setRateUnderlying( - i: BigNumberish, - j: BigNumberish, - rate_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setWithdrawRate( - i: BigNumberish, - rate_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - set_virtual_price( - _price: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - token(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "underlying_coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "underlying_coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - virtualPrice(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - A(overrides?: CallOverrides): Promise; - - A_precise(overrides?: CallOverrides): Promise; - - admin(overrides?: CallOverrides): Promise; - - admin_balances( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - admin_fee(overrides?: CallOverrides): Promise; - - allowance( - arg0: string, - arg1: string, - overrides?: CallOverrides - ): Promise; - - balanceOf( - arg0: string, - overrides?: CallOverrides - ): Promise; - - "balances(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "balances(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - block_timestamp_last( - overrides?: CallOverrides - ): Promise; - - calc_withdraw_one_coin( - amount: BigNumberish, - coin: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - exchange( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - min_dy: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - min_dy: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fee(overrides?: CallOverrides): Promise; - - future_A(overrides?: CallOverrides): Promise; - - future_A_time(overrides?: CallOverrides): Promise; - - get_dy( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_dy_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_virtual_price(overrides?: CallOverrides): Promise; - - initial_A(overrides?: CallOverrides): Promise; - - initial_A_time(overrides?: CallOverrides): Promise; - - lp_token(overrides?: CallOverrides): Promise; - - mintLP( - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - remove_liquidity_one_coin( - _token_amount: BigNumberish, - i: BigNumberish, - min_amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setRate( - i: BigNumberish, - j: BigNumberish, - rate_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setRateUnderlying( - i: BigNumberish, - j: BigNumberish, - rate_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setWithdrawRate( - i: BigNumberish, - rate_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - set_virtual_price( - _price: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - token(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "underlying_coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "underlying_coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - virtualPrice(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/test/mocks/integrations/CurveV1Mock_2Assets.ts b/src/types/contracts/test/mocks/integrations/CurveV1Mock_2Assets.ts deleted file mode 100644 index bf5d137a..00000000 --- a/src/types/contracts/test/mocks/integrations/CurveV1Mock_2Assets.ts +++ /dev/null @@ -1,1409 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface CurveV1Mock_2AssetsInterface extends utils.Interface { - functions: { - "A()": FunctionFragment; - "A_precise()": FunctionFragment; - "add_liquidity(uint256[2],uint256)": FunctionFragment; - "admin()": FunctionFragment; - "admin_balances(uint256)": FunctionFragment; - "admin_fee()": FunctionFragment; - "allowance(address,address)": FunctionFragment; - "balanceOf(address)": FunctionFragment; - "balances(int128)": FunctionFragment; - "balances(uint256)": FunctionFragment; - "block_timestamp_last()": FunctionFragment; - "calc_token_amount(uint256[2],bool)": FunctionFragment; - "calc_withdraw_one_coin(uint256,int128)": FunctionFragment; - "coins(int128)": FunctionFragment; - "coins(uint256)": FunctionFragment; - "decimals()": FunctionFragment; - "exchange(int128,int128,uint256,uint256)": FunctionFragment; - "exchange_underlying(int128,int128,uint256,uint256)": FunctionFragment; - "fee()": FunctionFragment; - "future_A()": FunctionFragment; - "future_A_time()": FunctionFragment; - "get_balances()": FunctionFragment; - "get_dy(int128,int128,uint256)": FunctionFragment; - "get_dy_underlying(int128,int128,uint256)": FunctionFragment; - "get_previous_balances()": FunctionFragment; - "get_price_cumulative_last()": FunctionFragment; - "get_twap_balances(uint256[2],uint256[2],uint256)": FunctionFragment; - "get_virtual_price()": FunctionFragment; - "initial_A()": FunctionFragment; - "initial_A_time()": FunctionFragment; - "lp_token()": FunctionFragment; - "mintLP(address,uint256)": FunctionFragment; - "name()": FunctionFragment; - "remove_liquidity(uint256,uint256[2])": FunctionFragment; - "remove_liquidity_imbalance(uint256[2],uint256)": FunctionFragment; - "remove_liquidity_one_coin(uint256,int128,uint256)": FunctionFragment; - "setRate(int128,int128,uint256)": FunctionFragment; - "setRateUnderlying(int128,int128,uint256)": FunctionFragment; - "setWithdrawRate(int128,uint256)": FunctionFragment; - "set_virtual_price(uint256)": FunctionFragment; - "symbol()": FunctionFragment; - "token()": FunctionFragment; - "totalSupply()": FunctionFragment; - "underlying_coins(int128)": FunctionFragment; - "underlying_coins(uint256)": FunctionFragment; - "virtualPrice()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "A" - | "A_precise" - | "add_liquidity" - | "admin" - | "admin_balances" - | "admin_fee" - | "allowance" - | "balanceOf" - | "balances(int128)" - | "balances(uint256)" - | "block_timestamp_last" - | "calc_token_amount" - | "calc_withdraw_one_coin" - | "coins(int128)" - | "coins(uint256)" - | "decimals" - | "exchange" - | "exchange_underlying" - | "fee" - | "future_A" - | "future_A_time" - | "get_balances" - | "get_dy" - | "get_dy_underlying" - | "get_previous_balances" - | "get_price_cumulative_last" - | "get_twap_balances" - | "get_virtual_price" - | "initial_A" - | "initial_A_time" - | "lp_token" - | "mintLP" - | "name" - | "remove_liquidity" - | "remove_liquidity_imbalance" - | "remove_liquidity_one_coin" - | "setRate" - | "setRateUnderlying" - | "setWithdrawRate" - | "set_virtual_price" - | "symbol" - | "token" - | "totalSupply" - | "underlying_coins(int128)" - | "underlying_coins(uint256)" - | "virtualPrice" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "A", values?: undefined): string; - encodeFunctionData(functionFragment: "A_precise", values?: undefined): string; - encodeFunctionData( - functionFragment: "add_liquidity", - values: [[BigNumberish, BigNumberish], BigNumberish] - ): string; - encodeFunctionData(functionFragment: "admin", values?: undefined): string; - encodeFunctionData( - functionFragment: "admin_balances", - values: [BigNumberish] - ): string; - encodeFunctionData(functionFragment: "admin_fee", values?: undefined): string; - encodeFunctionData( - functionFragment: "allowance", - values: [string, string] - ): string; - encodeFunctionData(functionFragment: "balanceOf", values: [string]): string; - encodeFunctionData( - functionFragment: "balances(int128)", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "balances(uint256)", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "block_timestamp_last", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "calc_token_amount", - values: [[BigNumberish, BigNumberish], boolean] - ): string; - encodeFunctionData( - functionFragment: "calc_withdraw_one_coin", - values: [BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "coins(int128)", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "coins(uint256)", - values: [BigNumberish] - ): string; - encodeFunctionData(functionFragment: "decimals", values?: undefined): string; - encodeFunctionData( - functionFragment: "exchange", - values: [BigNumberish, BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "exchange_underlying", - values: [BigNumberish, BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "fee", values?: undefined): string; - encodeFunctionData(functionFragment: "future_A", values?: undefined): string; - encodeFunctionData( - functionFragment: "future_A_time", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "get_balances", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "get_dy", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "get_dy_underlying", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "get_previous_balances", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "get_price_cumulative_last", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "get_twap_balances", - values: [ - [BigNumberish, BigNumberish], - [BigNumberish, BigNumberish], - BigNumberish - ] - ): string; - encodeFunctionData( - functionFragment: "get_virtual_price", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "initial_A", values?: undefined): string; - encodeFunctionData( - functionFragment: "initial_A_time", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "lp_token", values?: undefined): string; - encodeFunctionData( - functionFragment: "mintLP", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "name", values?: undefined): string; - encodeFunctionData( - functionFragment: "remove_liquidity", - values: [BigNumberish, [BigNumberish, BigNumberish]] - ): string; - encodeFunctionData( - functionFragment: "remove_liquidity_imbalance", - values: [[BigNumberish, BigNumberish], BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "remove_liquidity_one_coin", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "setRate", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "setRateUnderlying", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "setWithdrawRate", - values: [BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "set_virtual_price", - values: [BigNumberish] - ): string; - encodeFunctionData(functionFragment: "symbol", values?: undefined): string; - encodeFunctionData(functionFragment: "token", values?: undefined): string; - encodeFunctionData( - functionFragment: "totalSupply", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "underlying_coins(int128)", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "underlying_coins(uint256)", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "virtualPrice", - values?: undefined - ): string; - - decodeFunctionResult(functionFragment: "A", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "A_precise", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "add_liquidity", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "admin", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "admin_balances", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "admin_fee", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "balances(int128)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "balances(uint256)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "block_timestamp_last", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "calc_token_amount", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "calc_withdraw_one_coin", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "coins(int128)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "coins(uint256)", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "exchange", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "exchange_underlying", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "fee", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "future_A", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "future_A_time", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "get_balances", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "get_dy", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "get_dy_underlying", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "get_previous_balances", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "get_price_cumulative_last", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "get_twap_balances", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "get_virtual_price", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "initial_A", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "initial_A_time", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "lp_token", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "mintLP", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "remove_liquidity", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "remove_liquidity_imbalance", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "remove_liquidity_one_coin", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "setRate", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "setRateUnderlying", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "setWithdrawRate", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "set_virtual_price", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "token", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "totalSupply", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "underlying_coins(int128)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "underlying_coins(uint256)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "virtualPrice", - data: BytesLike - ): Result; - - events: {}; -} - -export interface CurveV1Mock_2Assets extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: CurveV1Mock_2AssetsInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - A(overrides?: CallOverrides): Promise<[BigNumber]>; - - A_precise(overrides?: CallOverrides): Promise<[BigNumber]>; - - add_liquidity( - amounts: [BigNumberish, BigNumberish], - min_mint_amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - admin(overrides?: CallOverrides): Promise<[string]>; - - admin_balances( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - admin_fee(overrides?: CallOverrides): Promise<[BigNumber]>; - - allowance( - arg0: string, - arg1: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - balanceOf(arg0: string, overrides?: CallOverrides): Promise<[BigNumber]>; - - "balances(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "balances(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - block_timestamp_last(overrides?: CallOverrides): Promise<[BigNumber]>; - - calc_token_amount( - arg0: [BigNumberish, BigNumberish], - arg1: boolean, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - calc_withdraw_one_coin( - amount: BigNumberish, - coin: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - "coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - decimals(overrides?: CallOverrides): Promise<[BigNumber]>; - - exchange( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - min_dy: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - min_dy: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fee(overrides?: CallOverrides): Promise<[BigNumber]>; - - future_A(overrides?: CallOverrides): Promise<[BigNumber]>; - - future_A_time(overrides?: CallOverrides): Promise<[BigNumber]>; - - get_balances(overrides?: CallOverrides): Promise<[[BigNumber, BigNumber]]>; - - get_dy( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - get_dy_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - get_previous_balances( - overrides?: CallOverrides - ): Promise<[[BigNumber, BigNumber]]>; - - get_price_cumulative_last( - overrides?: CallOverrides - ): Promise<[[BigNumber, BigNumber]]>; - - get_twap_balances( - _first_balances: [BigNumberish, BigNumberish], - arg1: [BigNumberish, BigNumberish], - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise<[[BigNumber, BigNumber]]>; - - get_virtual_price(overrides?: CallOverrides): Promise<[BigNumber]>; - - initial_A(overrides?: CallOverrides): Promise<[BigNumber]>; - - initial_A_time(overrides?: CallOverrides): Promise<[BigNumber]>; - - lp_token(overrides?: CallOverrides): Promise<[string]>; - - mintLP( - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise<[string]>; - - remove_liquidity( - _amount: BigNumberish, - min_amounts: [BigNumberish, BigNumberish], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_imbalance( - amounts: [BigNumberish, BigNumberish], - max_burn_amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_one_coin( - _token_amount: BigNumberish, - i: BigNumberish, - min_amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setRate( - i: BigNumberish, - j: BigNumberish, - rate_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setRateUnderlying( - i: BigNumberish, - j: BigNumberish, - rate_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setWithdrawRate( - i: BigNumberish, - rate_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - set_virtual_price( - _price: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise<[string]>; - - token(overrides?: CallOverrides): Promise<[string]>; - - totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>; - - "underlying_coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - "underlying_coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - virtualPrice(overrides?: CallOverrides): Promise<[BigNumber]>; - }; - - A(overrides?: CallOverrides): Promise; - - A_precise(overrides?: CallOverrides): Promise; - - add_liquidity( - amounts: [BigNumberish, BigNumberish], - min_mint_amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - admin(overrides?: CallOverrides): Promise; - - admin_balances( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - admin_fee(overrides?: CallOverrides): Promise; - - allowance( - arg0: string, - arg1: string, - overrides?: CallOverrides - ): Promise; - - balanceOf(arg0: string, overrides?: CallOverrides): Promise; - - "balances(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "balances(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - block_timestamp_last(overrides?: CallOverrides): Promise; - - calc_token_amount( - arg0: [BigNumberish, BigNumberish], - arg1: boolean, - overrides?: CallOverrides - ): Promise; - - calc_withdraw_one_coin( - amount: BigNumberish, - coin: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(int128)"(i: BigNumberish, overrides?: CallOverrides): Promise; - - "coins(uint256)"(i: BigNumberish, overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - exchange( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - min_dy: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - min_dy: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fee(overrides?: CallOverrides): Promise; - - future_A(overrides?: CallOverrides): Promise; - - future_A_time(overrides?: CallOverrides): Promise; - - get_balances(overrides?: CallOverrides): Promise<[BigNumber, BigNumber]>; - - get_dy( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_dy_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_previous_balances( - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber]>; - - get_price_cumulative_last( - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber]>; - - get_twap_balances( - _first_balances: [BigNumberish, BigNumberish], - arg1: [BigNumberish, BigNumberish], - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber]>; - - get_virtual_price(overrides?: CallOverrides): Promise; - - initial_A(overrides?: CallOverrides): Promise; - - initial_A_time(overrides?: CallOverrides): Promise; - - lp_token(overrides?: CallOverrides): Promise; - - mintLP( - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - remove_liquidity( - _amount: BigNumberish, - min_amounts: [BigNumberish, BigNumberish], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_imbalance( - amounts: [BigNumberish, BigNumberish], - max_burn_amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_one_coin( - _token_amount: BigNumberish, - i: BigNumberish, - min_amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setRate( - i: BigNumberish, - j: BigNumberish, - rate_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setRateUnderlying( - i: BigNumberish, - j: BigNumberish, - rate_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setWithdrawRate( - i: BigNumberish, - rate_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - set_virtual_price( - _price: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - token(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "underlying_coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "underlying_coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - virtualPrice(overrides?: CallOverrides): Promise; - - callStatic: { - A(overrides?: CallOverrides): Promise; - - A_precise(overrides?: CallOverrides): Promise; - - add_liquidity( - amounts: [BigNumberish, BigNumberish], - min_mint_amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - admin(overrides?: CallOverrides): Promise; - - admin_balances( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - admin_fee(overrides?: CallOverrides): Promise; - - allowance( - arg0: string, - arg1: string, - overrides?: CallOverrides - ): Promise; - - balanceOf(arg0: string, overrides?: CallOverrides): Promise; - - "balances(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "balances(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - block_timestamp_last(overrides?: CallOverrides): Promise; - - calc_token_amount( - arg0: [BigNumberish, BigNumberish], - arg1: boolean, - overrides?: CallOverrides - ): Promise; - - calc_withdraw_one_coin( - amount: BigNumberish, - coin: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - exchange( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - min_dy: BigNumberish, - overrides?: CallOverrides - ): Promise; - - exchange_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - min_dy: BigNumberish, - overrides?: CallOverrides - ): Promise; - - fee(overrides?: CallOverrides): Promise; - - future_A(overrides?: CallOverrides): Promise; - - future_A_time(overrides?: CallOverrides): Promise; - - get_balances(overrides?: CallOverrides): Promise<[BigNumber, BigNumber]>; - - get_dy( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_dy_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_previous_balances( - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber]>; - - get_price_cumulative_last( - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber]>; - - get_twap_balances( - _first_balances: [BigNumberish, BigNumberish], - arg1: [BigNumberish, BigNumberish], - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber]>; - - get_virtual_price(overrides?: CallOverrides): Promise; - - initial_A(overrides?: CallOverrides): Promise; - - initial_A_time(overrides?: CallOverrides): Promise; - - lp_token(overrides?: CallOverrides): Promise; - - mintLP( - to: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - remove_liquidity( - _amount: BigNumberish, - min_amounts: [BigNumberish, BigNumberish], - overrides?: CallOverrides - ): Promise; - - remove_liquidity_imbalance( - amounts: [BigNumberish, BigNumberish], - max_burn_amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - remove_liquidity_one_coin( - _token_amount: BigNumberish, - i: BigNumberish, - min_amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - setRate( - i: BigNumberish, - j: BigNumberish, - rate_RAY: BigNumberish, - overrides?: CallOverrides - ): Promise; - - setRateUnderlying( - i: BigNumberish, - j: BigNumberish, - rate_RAY: BigNumberish, - overrides?: CallOverrides - ): Promise; - - setWithdrawRate( - i: BigNumberish, - rate_RAY: BigNumberish, - overrides?: CallOverrides - ): Promise; - - set_virtual_price( - _price: BigNumberish, - overrides?: CallOverrides - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - token(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "underlying_coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "underlying_coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - virtualPrice(overrides?: CallOverrides): Promise; - }; - - filters: {}; - - estimateGas: { - A(overrides?: CallOverrides): Promise; - - A_precise(overrides?: CallOverrides): Promise; - - add_liquidity( - amounts: [BigNumberish, BigNumberish], - min_mint_amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - admin(overrides?: CallOverrides): Promise; - - admin_balances( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - admin_fee(overrides?: CallOverrides): Promise; - - allowance( - arg0: string, - arg1: string, - overrides?: CallOverrides - ): Promise; - - balanceOf(arg0: string, overrides?: CallOverrides): Promise; - - "balances(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "balances(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - block_timestamp_last(overrides?: CallOverrides): Promise; - - calc_token_amount( - arg0: [BigNumberish, BigNumberish], - arg1: boolean, - overrides?: CallOverrides - ): Promise; - - calc_withdraw_one_coin( - amount: BigNumberish, - coin: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - exchange( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - min_dy: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - min_dy: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fee(overrides?: CallOverrides): Promise; - - future_A(overrides?: CallOverrides): Promise; - - future_A_time(overrides?: CallOverrides): Promise; - - get_balances(overrides?: CallOverrides): Promise; - - get_dy( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_dy_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_previous_balances(overrides?: CallOverrides): Promise; - - get_price_cumulative_last(overrides?: CallOverrides): Promise; - - get_twap_balances( - _first_balances: [BigNumberish, BigNumberish], - arg1: [BigNumberish, BigNumberish], - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_virtual_price(overrides?: CallOverrides): Promise; - - initial_A(overrides?: CallOverrides): Promise; - - initial_A_time(overrides?: CallOverrides): Promise; - - lp_token(overrides?: CallOverrides): Promise; - - mintLP( - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - remove_liquidity( - _amount: BigNumberish, - min_amounts: [BigNumberish, BigNumberish], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_imbalance( - amounts: [BigNumberish, BigNumberish], - max_burn_amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_one_coin( - _token_amount: BigNumberish, - i: BigNumberish, - min_amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setRate( - i: BigNumberish, - j: BigNumberish, - rate_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setRateUnderlying( - i: BigNumberish, - j: BigNumberish, - rate_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setWithdrawRate( - i: BigNumberish, - rate_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - set_virtual_price( - _price: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - token(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "underlying_coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "underlying_coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - virtualPrice(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - A(overrides?: CallOverrides): Promise; - - A_precise(overrides?: CallOverrides): Promise; - - add_liquidity( - amounts: [BigNumberish, BigNumberish], - min_mint_amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - admin(overrides?: CallOverrides): Promise; - - admin_balances( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - admin_fee(overrides?: CallOverrides): Promise; - - allowance( - arg0: string, - arg1: string, - overrides?: CallOverrides - ): Promise; - - balanceOf( - arg0: string, - overrides?: CallOverrides - ): Promise; - - "balances(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "balances(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - block_timestamp_last( - overrides?: CallOverrides - ): Promise; - - calc_token_amount( - arg0: [BigNumberish, BigNumberish], - arg1: boolean, - overrides?: CallOverrides - ): Promise; - - calc_withdraw_one_coin( - amount: BigNumberish, - coin: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - exchange( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - min_dy: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - min_dy: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fee(overrides?: CallOverrides): Promise; - - future_A(overrides?: CallOverrides): Promise; - - future_A_time(overrides?: CallOverrides): Promise; - - get_balances(overrides?: CallOverrides): Promise; - - get_dy( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_dy_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_previous_balances( - overrides?: CallOverrides - ): Promise; - - get_price_cumulative_last( - overrides?: CallOverrides - ): Promise; - - get_twap_balances( - _first_balances: [BigNumberish, BigNumberish], - arg1: [BigNumberish, BigNumberish], - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_virtual_price(overrides?: CallOverrides): Promise; - - initial_A(overrides?: CallOverrides): Promise; - - initial_A_time(overrides?: CallOverrides): Promise; - - lp_token(overrides?: CallOverrides): Promise; - - mintLP( - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - remove_liquidity( - _amount: BigNumberish, - min_amounts: [BigNumberish, BigNumberish], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_imbalance( - amounts: [BigNumberish, BigNumberish], - max_burn_amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_one_coin( - _token_amount: BigNumberish, - i: BigNumberish, - min_amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setRate( - i: BigNumberish, - j: BigNumberish, - rate_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setRateUnderlying( - i: BigNumberish, - j: BigNumberish, - rate_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setWithdrawRate( - i: BigNumberish, - rate_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - set_virtual_price( - _price: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - token(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "underlying_coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "underlying_coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - virtualPrice(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/test/mocks/integrations/CurveV1Mock_3Assets.ts b/src/types/contracts/test/mocks/integrations/CurveV1Mock_3Assets.ts deleted file mode 100644 index 12521dd1..00000000 --- a/src/types/contracts/test/mocks/integrations/CurveV1Mock_3Assets.ts +++ /dev/null @@ -1,1415 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface CurveV1Mock_3AssetsInterface extends utils.Interface { - functions: { - "A()": FunctionFragment; - "A_precise()": FunctionFragment; - "add_liquidity(uint256[3],uint256)": FunctionFragment; - "admin()": FunctionFragment; - "admin_balances(uint256)": FunctionFragment; - "admin_fee()": FunctionFragment; - "allowance(address,address)": FunctionFragment; - "balanceOf(address)": FunctionFragment; - "balances(int128)": FunctionFragment; - "balances(uint256)": FunctionFragment; - "block_timestamp_last()": FunctionFragment; - "calc_token_amount(uint256[3],bool)": FunctionFragment; - "calc_withdraw_one_coin(uint256,int128)": FunctionFragment; - "coins(int128)": FunctionFragment; - "coins(uint256)": FunctionFragment; - "decimals()": FunctionFragment; - "exchange(int128,int128,uint256,uint256)": FunctionFragment; - "exchange_underlying(int128,int128,uint256,uint256)": FunctionFragment; - "fee()": FunctionFragment; - "future_A()": FunctionFragment; - "future_A_time()": FunctionFragment; - "get_balances()": FunctionFragment; - "get_dy(int128,int128,uint256)": FunctionFragment; - "get_dy_underlying(int128,int128,uint256)": FunctionFragment; - "get_previous_balances()": FunctionFragment; - "get_price_cumulative_last()": FunctionFragment; - "get_twap_balances(uint256[3],uint256[3],uint256)": FunctionFragment; - "get_virtual_price()": FunctionFragment; - "initial_A()": FunctionFragment; - "initial_A_time()": FunctionFragment; - "lp_token()": FunctionFragment; - "mintLP(address,uint256)": FunctionFragment; - "name()": FunctionFragment; - "remove_liquidity(uint256,uint256[3])": FunctionFragment; - "remove_liquidity_imbalance(uint256[3],uint256)": FunctionFragment; - "remove_liquidity_one_coin(uint256,int128,uint256)": FunctionFragment; - "setRate(int128,int128,uint256)": FunctionFragment; - "setRateUnderlying(int128,int128,uint256)": FunctionFragment; - "setWithdrawRate(int128,uint256)": FunctionFragment; - "set_virtual_price(uint256)": FunctionFragment; - "symbol()": FunctionFragment; - "token()": FunctionFragment; - "totalSupply()": FunctionFragment; - "underlying_coins(int128)": FunctionFragment; - "underlying_coins(uint256)": FunctionFragment; - "virtualPrice()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "A" - | "A_precise" - | "add_liquidity" - | "admin" - | "admin_balances" - | "admin_fee" - | "allowance" - | "balanceOf" - | "balances(int128)" - | "balances(uint256)" - | "block_timestamp_last" - | "calc_token_amount" - | "calc_withdraw_one_coin" - | "coins(int128)" - | "coins(uint256)" - | "decimals" - | "exchange" - | "exchange_underlying" - | "fee" - | "future_A" - | "future_A_time" - | "get_balances" - | "get_dy" - | "get_dy_underlying" - | "get_previous_balances" - | "get_price_cumulative_last" - | "get_twap_balances" - | "get_virtual_price" - | "initial_A" - | "initial_A_time" - | "lp_token" - | "mintLP" - | "name" - | "remove_liquidity" - | "remove_liquidity_imbalance" - | "remove_liquidity_one_coin" - | "setRate" - | "setRateUnderlying" - | "setWithdrawRate" - | "set_virtual_price" - | "symbol" - | "token" - | "totalSupply" - | "underlying_coins(int128)" - | "underlying_coins(uint256)" - | "virtualPrice" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "A", values?: undefined): string; - encodeFunctionData(functionFragment: "A_precise", values?: undefined): string; - encodeFunctionData( - functionFragment: "add_liquidity", - values: [[BigNumberish, BigNumberish, BigNumberish], BigNumberish] - ): string; - encodeFunctionData(functionFragment: "admin", values?: undefined): string; - encodeFunctionData( - functionFragment: "admin_balances", - values: [BigNumberish] - ): string; - encodeFunctionData(functionFragment: "admin_fee", values?: undefined): string; - encodeFunctionData( - functionFragment: "allowance", - values: [string, string] - ): string; - encodeFunctionData(functionFragment: "balanceOf", values: [string]): string; - encodeFunctionData( - functionFragment: "balances(int128)", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "balances(uint256)", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "block_timestamp_last", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "calc_token_amount", - values: [[BigNumberish, BigNumberish, BigNumberish], boolean] - ): string; - encodeFunctionData( - functionFragment: "calc_withdraw_one_coin", - values: [BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "coins(int128)", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "coins(uint256)", - values: [BigNumberish] - ): string; - encodeFunctionData(functionFragment: "decimals", values?: undefined): string; - encodeFunctionData( - functionFragment: "exchange", - values: [BigNumberish, BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "exchange_underlying", - values: [BigNumberish, BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "fee", values?: undefined): string; - encodeFunctionData(functionFragment: "future_A", values?: undefined): string; - encodeFunctionData( - functionFragment: "future_A_time", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "get_balances", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "get_dy", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "get_dy_underlying", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "get_previous_balances", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "get_price_cumulative_last", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "get_twap_balances", - values: [ - [BigNumberish, BigNumberish, BigNumberish], - [BigNumberish, BigNumberish, BigNumberish], - BigNumberish - ] - ): string; - encodeFunctionData( - functionFragment: "get_virtual_price", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "initial_A", values?: undefined): string; - encodeFunctionData( - functionFragment: "initial_A_time", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "lp_token", values?: undefined): string; - encodeFunctionData( - functionFragment: "mintLP", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "name", values?: undefined): string; - encodeFunctionData( - functionFragment: "remove_liquidity", - values: [BigNumberish, [BigNumberish, BigNumberish, BigNumberish]] - ): string; - encodeFunctionData( - functionFragment: "remove_liquidity_imbalance", - values: [[BigNumberish, BigNumberish, BigNumberish], BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "remove_liquidity_one_coin", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "setRate", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "setRateUnderlying", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "setWithdrawRate", - values: [BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "set_virtual_price", - values: [BigNumberish] - ): string; - encodeFunctionData(functionFragment: "symbol", values?: undefined): string; - encodeFunctionData(functionFragment: "token", values?: undefined): string; - encodeFunctionData( - functionFragment: "totalSupply", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "underlying_coins(int128)", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "underlying_coins(uint256)", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "virtualPrice", - values?: undefined - ): string; - - decodeFunctionResult(functionFragment: "A", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "A_precise", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "add_liquidity", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "admin", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "admin_balances", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "admin_fee", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "balances(int128)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "balances(uint256)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "block_timestamp_last", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "calc_token_amount", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "calc_withdraw_one_coin", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "coins(int128)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "coins(uint256)", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "exchange", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "exchange_underlying", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "fee", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "future_A", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "future_A_time", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "get_balances", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "get_dy", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "get_dy_underlying", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "get_previous_balances", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "get_price_cumulative_last", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "get_twap_balances", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "get_virtual_price", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "initial_A", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "initial_A_time", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "lp_token", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "mintLP", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "remove_liquidity", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "remove_liquidity_imbalance", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "remove_liquidity_one_coin", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "setRate", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "setRateUnderlying", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "setWithdrawRate", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "set_virtual_price", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "token", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "totalSupply", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "underlying_coins(int128)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "underlying_coins(uint256)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "virtualPrice", - data: BytesLike - ): Result; - - events: {}; -} - -export interface CurveV1Mock_3Assets extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: CurveV1Mock_3AssetsInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - A(overrides?: CallOverrides): Promise<[BigNumber]>; - - A_precise(overrides?: CallOverrides): Promise<[BigNumber]>; - - add_liquidity( - amounts: [BigNumberish, BigNumberish, BigNumberish], - min_mint_amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - admin(overrides?: CallOverrides): Promise<[string]>; - - admin_balances( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - admin_fee(overrides?: CallOverrides): Promise<[BigNumber]>; - - allowance( - arg0: string, - arg1: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - balanceOf(arg0: string, overrides?: CallOverrides): Promise<[BigNumber]>; - - "balances(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "balances(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - block_timestamp_last(overrides?: CallOverrides): Promise<[BigNumber]>; - - calc_token_amount( - arg0: [BigNumberish, BigNumberish, BigNumberish], - arg1: boolean, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - calc_withdraw_one_coin( - amount: BigNumberish, - coin: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - "coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - decimals(overrides?: CallOverrides): Promise<[BigNumber]>; - - exchange( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - min_dy: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - min_dy: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fee(overrides?: CallOverrides): Promise<[BigNumber]>; - - future_A(overrides?: CallOverrides): Promise<[BigNumber]>; - - future_A_time(overrides?: CallOverrides): Promise<[BigNumber]>; - - get_balances( - overrides?: CallOverrides - ): Promise<[[BigNumber, BigNumber, BigNumber]]>; - - get_dy( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - get_dy_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - get_previous_balances( - overrides?: CallOverrides - ): Promise<[[BigNumber, BigNumber, BigNumber]]>; - - get_price_cumulative_last( - overrides?: CallOverrides - ): Promise<[[BigNumber, BigNumber, BigNumber]]>; - - get_twap_balances( - _first_balances: [BigNumberish, BigNumberish, BigNumberish], - arg1: [BigNumberish, BigNumberish, BigNumberish], - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise<[[BigNumber, BigNumber, BigNumber]]>; - - get_virtual_price(overrides?: CallOverrides): Promise<[BigNumber]>; - - initial_A(overrides?: CallOverrides): Promise<[BigNumber]>; - - initial_A_time(overrides?: CallOverrides): Promise<[BigNumber]>; - - lp_token(overrides?: CallOverrides): Promise<[string]>; - - mintLP( - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise<[string]>; - - remove_liquidity( - _amount: BigNumberish, - min_amounts: [BigNumberish, BigNumberish, BigNumberish], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_imbalance( - amounts: [BigNumberish, BigNumberish, BigNumberish], - max_burn_amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_one_coin( - _token_amount: BigNumberish, - i: BigNumberish, - min_amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setRate( - i: BigNumberish, - j: BigNumberish, - rate_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setRateUnderlying( - i: BigNumberish, - j: BigNumberish, - rate_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setWithdrawRate( - i: BigNumberish, - rate_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - set_virtual_price( - _price: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise<[string]>; - - token(overrides?: CallOverrides): Promise<[string]>; - - totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>; - - "underlying_coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - "underlying_coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - virtualPrice(overrides?: CallOverrides): Promise<[BigNumber]>; - }; - - A(overrides?: CallOverrides): Promise; - - A_precise(overrides?: CallOverrides): Promise; - - add_liquidity( - amounts: [BigNumberish, BigNumberish, BigNumberish], - min_mint_amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - admin(overrides?: CallOverrides): Promise; - - admin_balances( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - admin_fee(overrides?: CallOverrides): Promise; - - allowance( - arg0: string, - arg1: string, - overrides?: CallOverrides - ): Promise; - - balanceOf(arg0: string, overrides?: CallOverrides): Promise; - - "balances(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "balances(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - block_timestamp_last(overrides?: CallOverrides): Promise; - - calc_token_amount( - arg0: [BigNumberish, BigNumberish, BigNumberish], - arg1: boolean, - overrides?: CallOverrides - ): Promise; - - calc_withdraw_one_coin( - amount: BigNumberish, - coin: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(int128)"(i: BigNumberish, overrides?: CallOverrides): Promise; - - "coins(uint256)"(i: BigNumberish, overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - exchange( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - min_dy: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - min_dy: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fee(overrides?: CallOverrides): Promise; - - future_A(overrides?: CallOverrides): Promise; - - future_A_time(overrides?: CallOverrides): Promise; - - get_balances( - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber, BigNumber]>; - - get_dy( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_dy_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_previous_balances( - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber, BigNumber]>; - - get_price_cumulative_last( - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber, BigNumber]>; - - get_twap_balances( - _first_balances: [BigNumberish, BigNumberish, BigNumberish], - arg1: [BigNumberish, BigNumberish, BigNumberish], - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber, BigNumber]>; - - get_virtual_price(overrides?: CallOverrides): Promise; - - initial_A(overrides?: CallOverrides): Promise; - - initial_A_time(overrides?: CallOverrides): Promise; - - lp_token(overrides?: CallOverrides): Promise; - - mintLP( - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - remove_liquidity( - _amount: BigNumberish, - min_amounts: [BigNumberish, BigNumberish, BigNumberish], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_imbalance( - amounts: [BigNumberish, BigNumberish, BigNumberish], - max_burn_amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_one_coin( - _token_amount: BigNumberish, - i: BigNumberish, - min_amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setRate( - i: BigNumberish, - j: BigNumberish, - rate_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setRateUnderlying( - i: BigNumberish, - j: BigNumberish, - rate_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setWithdrawRate( - i: BigNumberish, - rate_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - set_virtual_price( - _price: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - token(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "underlying_coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "underlying_coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - virtualPrice(overrides?: CallOverrides): Promise; - - callStatic: { - A(overrides?: CallOverrides): Promise; - - A_precise(overrides?: CallOverrides): Promise; - - add_liquidity( - amounts: [BigNumberish, BigNumberish, BigNumberish], - min_mint_amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - admin(overrides?: CallOverrides): Promise; - - admin_balances( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - admin_fee(overrides?: CallOverrides): Promise; - - allowance( - arg0: string, - arg1: string, - overrides?: CallOverrides - ): Promise; - - balanceOf(arg0: string, overrides?: CallOverrides): Promise; - - "balances(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "balances(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - block_timestamp_last(overrides?: CallOverrides): Promise; - - calc_token_amount( - arg0: [BigNumberish, BigNumberish, BigNumberish], - arg1: boolean, - overrides?: CallOverrides - ): Promise; - - calc_withdraw_one_coin( - amount: BigNumberish, - coin: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - exchange( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - min_dy: BigNumberish, - overrides?: CallOverrides - ): Promise; - - exchange_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - min_dy: BigNumberish, - overrides?: CallOverrides - ): Promise; - - fee(overrides?: CallOverrides): Promise; - - future_A(overrides?: CallOverrides): Promise; - - future_A_time(overrides?: CallOverrides): Promise; - - get_balances( - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber, BigNumber]>; - - get_dy( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_dy_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_previous_balances( - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber, BigNumber]>; - - get_price_cumulative_last( - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber, BigNumber]>; - - get_twap_balances( - _first_balances: [BigNumberish, BigNumberish, BigNumberish], - arg1: [BigNumberish, BigNumberish, BigNumberish], - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber, BigNumber]>; - - get_virtual_price(overrides?: CallOverrides): Promise; - - initial_A(overrides?: CallOverrides): Promise; - - initial_A_time(overrides?: CallOverrides): Promise; - - lp_token(overrides?: CallOverrides): Promise; - - mintLP( - to: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - remove_liquidity( - _amount: BigNumberish, - min_amounts: [BigNumberish, BigNumberish, BigNumberish], - overrides?: CallOverrides - ): Promise; - - remove_liquidity_imbalance( - amounts: [BigNumberish, BigNumberish, BigNumberish], - max_burn_amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - remove_liquidity_one_coin( - _token_amount: BigNumberish, - i: BigNumberish, - min_amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - setRate( - i: BigNumberish, - j: BigNumberish, - rate_RAY: BigNumberish, - overrides?: CallOverrides - ): Promise; - - setRateUnderlying( - i: BigNumberish, - j: BigNumberish, - rate_RAY: BigNumberish, - overrides?: CallOverrides - ): Promise; - - setWithdrawRate( - i: BigNumberish, - rate_RAY: BigNumberish, - overrides?: CallOverrides - ): Promise; - - set_virtual_price( - _price: BigNumberish, - overrides?: CallOverrides - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - token(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "underlying_coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "underlying_coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - virtualPrice(overrides?: CallOverrides): Promise; - }; - - filters: {}; - - estimateGas: { - A(overrides?: CallOverrides): Promise; - - A_precise(overrides?: CallOverrides): Promise; - - add_liquidity( - amounts: [BigNumberish, BigNumberish, BigNumberish], - min_mint_amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - admin(overrides?: CallOverrides): Promise; - - admin_balances( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - admin_fee(overrides?: CallOverrides): Promise; - - allowance( - arg0: string, - arg1: string, - overrides?: CallOverrides - ): Promise; - - balanceOf(arg0: string, overrides?: CallOverrides): Promise; - - "balances(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "balances(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - block_timestamp_last(overrides?: CallOverrides): Promise; - - calc_token_amount( - arg0: [BigNumberish, BigNumberish, BigNumberish], - arg1: boolean, - overrides?: CallOverrides - ): Promise; - - calc_withdraw_one_coin( - amount: BigNumberish, - coin: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - exchange( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - min_dy: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - min_dy: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fee(overrides?: CallOverrides): Promise; - - future_A(overrides?: CallOverrides): Promise; - - future_A_time(overrides?: CallOverrides): Promise; - - get_balances(overrides?: CallOverrides): Promise; - - get_dy( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_dy_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_previous_balances(overrides?: CallOverrides): Promise; - - get_price_cumulative_last(overrides?: CallOverrides): Promise; - - get_twap_balances( - _first_balances: [BigNumberish, BigNumberish, BigNumberish], - arg1: [BigNumberish, BigNumberish, BigNumberish], - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_virtual_price(overrides?: CallOverrides): Promise; - - initial_A(overrides?: CallOverrides): Promise; - - initial_A_time(overrides?: CallOverrides): Promise; - - lp_token(overrides?: CallOverrides): Promise; - - mintLP( - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - remove_liquidity( - _amount: BigNumberish, - min_amounts: [BigNumberish, BigNumberish, BigNumberish], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_imbalance( - amounts: [BigNumberish, BigNumberish, BigNumberish], - max_burn_amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_one_coin( - _token_amount: BigNumberish, - i: BigNumberish, - min_amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setRate( - i: BigNumberish, - j: BigNumberish, - rate_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setRateUnderlying( - i: BigNumberish, - j: BigNumberish, - rate_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setWithdrawRate( - i: BigNumberish, - rate_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - set_virtual_price( - _price: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - token(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "underlying_coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "underlying_coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - virtualPrice(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - A(overrides?: CallOverrides): Promise; - - A_precise(overrides?: CallOverrides): Promise; - - add_liquidity( - amounts: [BigNumberish, BigNumberish, BigNumberish], - min_mint_amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - admin(overrides?: CallOverrides): Promise; - - admin_balances( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - admin_fee(overrides?: CallOverrides): Promise; - - allowance( - arg0: string, - arg1: string, - overrides?: CallOverrides - ): Promise; - - balanceOf( - arg0: string, - overrides?: CallOverrides - ): Promise; - - "balances(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "balances(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - block_timestamp_last( - overrides?: CallOverrides - ): Promise; - - calc_token_amount( - arg0: [BigNumberish, BigNumberish, BigNumberish], - arg1: boolean, - overrides?: CallOverrides - ): Promise; - - calc_withdraw_one_coin( - amount: BigNumberish, - coin: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - exchange( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - min_dy: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - min_dy: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fee(overrides?: CallOverrides): Promise; - - future_A(overrides?: CallOverrides): Promise; - - future_A_time(overrides?: CallOverrides): Promise; - - get_balances(overrides?: CallOverrides): Promise; - - get_dy( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_dy_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_previous_balances( - overrides?: CallOverrides - ): Promise; - - get_price_cumulative_last( - overrides?: CallOverrides - ): Promise; - - get_twap_balances( - _first_balances: [BigNumberish, BigNumberish, BigNumberish], - arg1: [BigNumberish, BigNumberish, BigNumberish], - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_virtual_price(overrides?: CallOverrides): Promise; - - initial_A(overrides?: CallOverrides): Promise; - - initial_A_time(overrides?: CallOverrides): Promise; - - lp_token(overrides?: CallOverrides): Promise; - - mintLP( - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - remove_liquidity( - _amount: BigNumberish, - min_amounts: [BigNumberish, BigNumberish, BigNumberish], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_imbalance( - amounts: [BigNumberish, BigNumberish, BigNumberish], - max_burn_amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_one_coin( - _token_amount: BigNumberish, - i: BigNumberish, - min_amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setRate( - i: BigNumberish, - j: BigNumberish, - rate_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setRateUnderlying( - i: BigNumberish, - j: BigNumberish, - rate_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setWithdrawRate( - i: BigNumberish, - rate_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - set_virtual_price( - _price: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - token(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "underlying_coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "underlying_coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - virtualPrice(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/test/mocks/integrations/CurveV1Mock_4Assets.ts b/src/types/contracts/test/mocks/integrations/CurveV1Mock_4Assets.ts deleted file mode 100644 index 5c603095..00000000 --- a/src/types/contracts/test/mocks/integrations/CurveV1Mock_4Assets.ts +++ /dev/null @@ -1,1424 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface CurveV1Mock_4AssetsInterface extends utils.Interface { - functions: { - "A()": FunctionFragment; - "A_precise()": FunctionFragment; - "add_liquidity(uint256[4],uint256)": FunctionFragment; - "admin()": FunctionFragment; - "admin_balances(uint256)": FunctionFragment; - "admin_fee()": FunctionFragment; - "allowance(address,address)": FunctionFragment; - "balanceOf(address)": FunctionFragment; - "balances(int128)": FunctionFragment; - "balances(uint256)": FunctionFragment; - "block_timestamp_last()": FunctionFragment; - "calc_token_amount(uint256[4],bool)": FunctionFragment; - "calc_withdraw_one_coin(uint256,int128)": FunctionFragment; - "coins(int128)": FunctionFragment; - "coins(uint256)": FunctionFragment; - "decimals()": FunctionFragment; - "exchange(int128,int128,uint256,uint256)": FunctionFragment; - "exchange_underlying(int128,int128,uint256,uint256)": FunctionFragment; - "fee()": FunctionFragment; - "future_A()": FunctionFragment; - "future_A_time()": FunctionFragment; - "get_balances()": FunctionFragment; - "get_dy(int128,int128,uint256)": FunctionFragment; - "get_dy_underlying(int128,int128,uint256)": FunctionFragment; - "get_previous_balances()": FunctionFragment; - "get_price_cumulative_last()": FunctionFragment; - "get_twap_balances(uint256[4],uint256[4],uint256)": FunctionFragment; - "get_virtual_price()": FunctionFragment; - "initial_A()": FunctionFragment; - "initial_A_time()": FunctionFragment; - "lp_token()": FunctionFragment; - "mintLP(address,uint256)": FunctionFragment; - "name()": FunctionFragment; - "remove_liquidity(uint256,uint256[4])": FunctionFragment; - "remove_liquidity_imbalance(uint256[4],uint256)": FunctionFragment; - "remove_liquidity_one_coin(uint256,int128,uint256)": FunctionFragment; - "setRate(int128,int128,uint256)": FunctionFragment; - "setRateUnderlying(int128,int128,uint256)": FunctionFragment; - "setWithdrawRate(int128,uint256)": FunctionFragment; - "set_virtual_price(uint256)": FunctionFragment; - "symbol()": FunctionFragment; - "token()": FunctionFragment; - "totalSupply()": FunctionFragment; - "underlying_coins(int128)": FunctionFragment; - "underlying_coins(uint256)": FunctionFragment; - "virtualPrice()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "A" - | "A_precise" - | "add_liquidity" - | "admin" - | "admin_balances" - | "admin_fee" - | "allowance" - | "balanceOf" - | "balances(int128)" - | "balances(uint256)" - | "block_timestamp_last" - | "calc_token_amount" - | "calc_withdraw_one_coin" - | "coins(int128)" - | "coins(uint256)" - | "decimals" - | "exchange" - | "exchange_underlying" - | "fee" - | "future_A" - | "future_A_time" - | "get_balances" - | "get_dy" - | "get_dy_underlying" - | "get_previous_balances" - | "get_price_cumulative_last" - | "get_twap_balances" - | "get_virtual_price" - | "initial_A" - | "initial_A_time" - | "lp_token" - | "mintLP" - | "name" - | "remove_liquidity" - | "remove_liquidity_imbalance" - | "remove_liquidity_one_coin" - | "setRate" - | "setRateUnderlying" - | "setWithdrawRate" - | "set_virtual_price" - | "symbol" - | "token" - | "totalSupply" - | "underlying_coins(int128)" - | "underlying_coins(uint256)" - | "virtualPrice" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "A", values?: undefined): string; - encodeFunctionData(functionFragment: "A_precise", values?: undefined): string; - encodeFunctionData( - functionFragment: "add_liquidity", - values: [ - [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - BigNumberish - ] - ): string; - encodeFunctionData(functionFragment: "admin", values?: undefined): string; - encodeFunctionData( - functionFragment: "admin_balances", - values: [BigNumberish] - ): string; - encodeFunctionData(functionFragment: "admin_fee", values?: undefined): string; - encodeFunctionData( - functionFragment: "allowance", - values: [string, string] - ): string; - encodeFunctionData(functionFragment: "balanceOf", values: [string]): string; - encodeFunctionData( - functionFragment: "balances(int128)", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "balances(uint256)", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "block_timestamp_last", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "calc_token_amount", - values: [[BigNumberish, BigNumberish, BigNumberish, BigNumberish], boolean] - ): string; - encodeFunctionData( - functionFragment: "calc_withdraw_one_coin", - values: [BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "coins(int128)", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "coins(uint256)", - values: [BigNumberish] - ): string; - encodeFunctionData(functionFragment: "decimals", values?: undefined): string; - encodeFunctionData( - functionFragment: "exchange", - values: [BigNumberish, BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "exchange_underlying", - values: [BigNumberish, BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "fee", values?: undefined): string; - encodeFunctionData(functionFragment: "future_A", values?: undefined): string; - encodeFunctionData( - functionFragment: "future_A_time", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "get_balances", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "get_dy", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "get_dy_underlying", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "get_previous_balances", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "get_price_cumulative_last", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "get_twap_balances", - values: [ - [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - BigNumberish - ] - ): string; - encodeFunctionData( - functionFragment: "get_virtual_price", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "initial_A", values?: undefined): string; - encodeFunctionData( - functionFragment: "initial_A_time", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "lp_token", values?: undefined): string; - encodeFunctionData( - functionFragment: "mintLP", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "name", values?: undefined): string; - encodeFunctionData( - functionFragment: "remove_liquidity", - values: [ - BigNumberish, - [BigNumberish, BigNumberish, BigNumberish, BigNumberish] - ] - ): string; - encodeFunctionData( - functionFragment: "remove_liquidity_imbalance", - values: [ - [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - BigNumberish - ] - ): string; - encodeFunctionData( - functionFragment: "remove_liquidity_one_coin", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "setRate", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "setRateUnderlying", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "setWithdrawRate", - values: [BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "set_virtual_price", - values: [BigNumberish] - ): string; - encodeFunctionData(functionFragment: "symbol", values?: undefined): string; - encodeFunctionData(functionFragment: "token", values?: undefined): string; - encodeFunctionData( - functionFragment: "totalSupply", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "underlying_coins(int128)", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "underlying_coins(uint256)", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "virtualPrice", - values?: undefined - ): string; - - decodeFunctionResult(functionFragment: "A", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "A_precise", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "add_liquidity", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "admin", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "admin_balances", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "admin_fee", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "balances(int128)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "balances(uint256)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "block_timestamp_last", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "calc_token_amount", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "calc_withdraw_one_coin", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "coins(int128)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "coins(uint256)", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "exchange", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "exchange_underlying", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "fee", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "future_A", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "future_A_time", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "get_balances", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "get_dy", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "get_dy_underlying", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "get_previous_balances", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "get_price_cumulative_last", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "get_twap_balances", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "get_virtual_price", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "initial_A", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "initial_A_time", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "lp_token", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "mintLP", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "remove_liquidity", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "remove_liquidity_imbalance", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "remove_liquidity_one_coin", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "setRate", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "setRateUnderlying", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "setWithdrawRate", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "set_virtual_price", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "token", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "totalSupply", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "underlying_coins(int128)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "underlying_coins(uint256)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "virtualPrice", - data: BytesLike - ): Result; - - events: {}; -} - -export interface CurveV1Mock_4Assets extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: CurveV1Mock_4AssetsInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - A(overrides?: CallOverrides): Promise<[BigNumber]>; - - A_precise(overrides?: CallOverrides): Promise<[BigNumber]>; - - add_liquidity( - amounts: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - min_mint_amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - admin(overrides?: CallOverrides): Promise<[string]>; - - admin_balances( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - admin_fee(overrides?: CallOverrides): Promise<[BigNumber]>; - - allowance( - arg0: string, - arg1: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - balanceOf(arg0: string, overrides?: CallOverrides): Promise<[BigNumber]>; - - "balances(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "balances(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - block_timestamp_last(overrides?: CallOverrides): Promise<[BigNumber]>; - - calc_token_amount( - arg0: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - arg1: boolean, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - calc_withdraw_one_coin( - amount: BigNumberish, - coin: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - "coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - decimals(overrides?: CallOverrides): Promise<[BigNumber]>; - - exchange( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - min_dy: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - min_dy: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fee(overrides?: CallOverrides): Promise<[BigNumber]>; - - future_A(overrides?: CallOverrides): Promise<[BigNumber]>; - - future_A_time(overrides?: CallOverrides): Promise<[BigNumber]>; - - get_balances( - overrides?: CallOverrides - ): Promise<[[BigNumber, BigNumber, BigNumber, BigNumber]]>; - - get_dy( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - get_dy_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - get_previous_balances( - overrides?: CallOverrides - ): Promise<[[BigNumber, BigNumber, BigNumber, BigNumber]]>; - - get_price_cumulative_last( - overrides?: CallOverrides - ): Promise<[[BigNumber, BigNumber, BigNumber, BigNumber]]>; - - get_twap_balances( - _first_balances: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - arg1: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise<[[BigNumber, BigNumber, BigNumber, BigNumber]]>; - - get_virtual_price(overrides?: CallOverrides): Promise<[BigNumber]>; - - initial_A(overrides?: CallOverrides): Promise<[BigNumber]>; - - initial_A_time(overrides?: CallOverrides): Promise<[BigNumber]>; - - lp_token(overrides?: CallOverrides): Promise<[string]>; - - mintLP( - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise<[string]>; - - remove_liquidity( - _amount: BigNumberish, - min_amounts: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_imbalance( - amounts: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - max_burn_amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_one_coin( - _token_amount: BigNumberish, - i: BigNumberish, - min_amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setRate( - i: BigNumberish, - j: BigNumberish, - rate_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setRateUnderlying( - i: BigNumberish, - j: BigNumberish, - rate_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setWithdrawRate( - i: BigNumberish, - rate_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - set_virtual_price( - _price: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise<[string]>; - - token(overrides?: CallOverrides): Promise<[string]>; - - totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>; - - "underlying_coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - "underlying_coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - virtualPrice(overrides?: CallOverrides): Promise<[BigNumber]>; - }; - - A(overrides?: CallOverrides): Promise; - - A_precise(overrides?: CallOverrides): Promise; - - add_liquidity( - amounts: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - min_mint_amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - admin(overrides?: CallOverrides): Promise; - - admin_balances( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - admin_fee(overrides?: CallOverrides): Promise; - - allowance( - arg0: string, - arg1: string, - overrides?: CallOverrides - ): Promise; - - balanceOf(arg0: string, overrides?: CallOverrides): Promise; - - "balances(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "balances(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - block_timestamp_last(overrides?: CallOverrides): Promise; - - calc_token_amount( - arg0: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - arg1: boolean, - overrides?: CallOverrides - ): Promise; - - calc_withdraw_one_coin( - amount: BigNumberish, - coin: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(int128)"(i: BigNumberish, overrides?: CallOverrides): Promise; - - "coins(uint256)"(i: BigNumberish, overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - exchange( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - min_dy: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - min_dy: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fee(overrides?: CallOverrides): Promise; - - future_A(overrides?: CallOverrides): Promise; - - future_A_time(overrides?: CallOverrides): Promise; - - get_balances( - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber, BigNumber, BigNumber]>; - - get_dy( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_dy_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_previous_balances( - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber, BigNumber, BigNumber]>; - - get_price_cumulative_last( - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber, BigNumber, BigNumber]>; - - get_twap_balances( - _first_balances: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - arg1: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber, BigNumber, BigNumber]>; - - get_virtual_price(overrides?: CallOverrides): Promise; - - initial_A(overrides?: CallOverrides): Promise; - - initial_A_time(overrides?: CallOverrides): Promise; - - lp_token(overrides?: CallOverrides): Promise; - - mintLP( - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - remove_liquidity( - _amount: BigNumberish, - min_amounts: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_imbalance( - amounts: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - max_burn_amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_one_coin( - _token_amount: BigNumberish, - i: BigNumberish, - min_amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setRate( - i: BigNumberish, - j: BigNumberish, - rate_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setRateUnderlying( - i: BigNumberish, - j: BigNumberish, - rate_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setWithdrawRate( - i: BigNumberish, - rate_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - set_virtual_price( - _price: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - token(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "underlying_coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "underlying_coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - virtualPrice(overrides?: CallOverrides): Promise; - - callStatic: { - A(overrides?: CallOverrides): Promise; - - A_precise(overrides?: CallOverrides): Promise; - - add_liquidity( - amounts: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - min_mint_amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - admin(overrides?: CallOverrides): Promise; - - admin_balances( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - admin_fee(overrides?: CallOverrides): Promise; - - allowance( - arg0: string, - arg1: string, - overrides?: CallOverrides - ): Promise; - - balanceOf(arg0: string, overrides?: CallOverrides): Promise; - - "balances(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "balances(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - block_timestamp_last(overrides?: CallOverrides): Promise; - - calc_token_amount( - arg0: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - arg1: boolean, - overrides?: CallOverrides - ): Promise; - - calc_withdraw_one_coin( - amount: BigNumberish, - coin: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - exchange( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - min_dy: BigNumberish, - overrides?: CallOverrides - ): Promise; - - exchange_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - min_dy: BigNumberish, - overrides?: CallOverrides - ): Promise; - - fee(overrides?: CallOverrides): Promise; - - future_A(overrides?: CallOverrides): Promise; - - future_A_time(overrides?: CallOverrides): Promise; - - get_balances( - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber, BigNumber, BigNumber]>; - - get_dy( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_dy_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_previous_balances( - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber, BigNumber, BigNumber]>; - - get_price_cumulative_last( - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber, BigNumber, BigNumber]>; - - get_twap_balances( - _first_balances: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - arg1: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber, BigNumber, BigNumber]>; - - get_virtual_price(overrides?: CallOverrides): Promise; - - initial_A(overrides?: CallOverrides): Promise; - - initial_A_time(overrides?: CallOverrides): Promise; - - lp_token(overrides?: CallOverrides): Promise; - - mintLP( - to: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - remove_liquidity( - _amount: BigNumberish, - min_amounts: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - overrides?: CallOverrides - ): Promise; - - remove_liquidity_imbalance( - amounts: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - max_burn_amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - remove_liquidity_one_coin( - _token_amount: BigNumberish, - i: BigNumberish, - min_amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - setRate( - i: BigNumberish, - j: BigNumberish, - rate_RAY: BigNumberish, - overrides?: CallOverrides - ): Promise; - - setRateUnderlying( - i: BigNumberish, - j: BigNumberish, - rate_RAY: BigNumberish, - overrides?: CallOverrides - ): Promise; - - setWithdrawRate( - i: BigNumberish, - rate_RAY: BigNumberish, - overrides?: CallOverrides - ): Promise; - - set_virtual_price( - _price: BigNumberish, - overrides?: CallOverrides - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - token(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "underlying_coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "underlying_coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - virtualPrice(overrides?: CallOverrides): Promise; - }; - - filters: {}; - - estimateGas: { - A(overrides?: CallOverrides): Promise; - - A_precise(overrides?: CallOverrides): Promise; - - add_liquidity( - amounts: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - min_mint_amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - admin(overrides?: CallOverrides): Promise; - - admin_balances( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - admin_fee(overrides?: CallOverrides): Promise; - - allowance( - arg0: string, - arg1: string, - overrides?: CallOverrides - ): Promise; - - balanceOf(arg0: string, overrides?: CallOverrides): Promise; - - "balances(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "balances(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - block_timestamp_last(overrides?: CallOverrides): Promise; - - calc_token_amount( - arg0: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - arg1: boolean, - overrides?: CallOverrides - ): Promise; - - calc_withdraw_one_coin( - amount: BigNumberish, - coin: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - exchange( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - min_dy: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - min_dy: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fee(overrides?: CallOverrides): Promise; - - future_A(overrides?: CallOverrides): Promise; - - future_A_time(overrides?: CallOverrides): Promise; - - get_balances(overrides?: CallOverrides): Promise; - - get_dy( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_dy_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_previous_balances(overrides?: CallOverrides): Promise; - - get_price_cumulative_last(overrides?: CallOverrides): Promise; - - get_twap_balances( - _first_balances: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - arg1: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_virtual_price(overrides?: CallOverrides): Promise; - - initial_A(overrides?: CallOverrides): Promise; - - initial_A_time(overrides?: CallOverrides): Promise; - - lp_token(overrides?: CallOverrides): Promise; - - mintLP( - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - remove_liquidity( - _amount: BigNumberish, - min_amounts: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_imbalance( - amounts: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - max_burn_amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_one_coin( - _token_amount: BigNumberish, - i: BigNumberish, - min_amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setRate( - i: BigNumberish, - j: BigNumberish, - rate_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setRateUnderlying( - i: BigNumberish, - j: BigNumberish, - rate_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setWithdrawRate( - i: BigNumberish, - rate_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - set_virtual_price( - _price: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - token(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "underlying_coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "underlying_coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - virtualPrice(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - A(overrides?: CallOverrides): Promise; - - A_precise(overrides?: CallOverrides): Promise; - - add_liquidity( - amounts: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - min_mint_amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - admin(overrides?: CallOverrides): Promise; - - admin_balances( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - admin_fee(overrides?: CallOverrides): Promise; - - allowance( - arg0: string, - arg1: string, - overrides?: CallOverrides - ): Promise; - - balanceOf( - arg0: string, - overrides?: CallOverrides - ): Promise; - - "balances(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "balances(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - block_timestamp_last( - overrides?: CallOverrides - ): Promise; - - calc_token_amount( - arg0: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - arg1: boolean, - overrides?: CallOverrides - ): Promise; - - calc_withdraw_one_coin( - amount: BigNumberish, - coin: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - exchange( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - min_dy: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - exchange_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - min_dy: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fee(overrides?: CallOverrides): Promise; - - future_A(overrides?: CallOverrides): Promise; - - future_A_time(overrides?: CallOverrides): Promise; - - get_balances(overrides?: CallOverrides): Promise; - - get_dy( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_dy_underlying( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_previous_balances( - overrides?: CallOverrides - ): Promise; - - get_price_cumulative_last( - overrides?: CallOverrides - ): Promise; - - get_twap_balances( - _first_balances: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - arg1: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_virtual_price(overrides?: CallOverrides): Promise; - - initial_A(overrides?: CallOverrides): Promise; - - initial_A_time(overrides?: CallOverrides): Promise; - - lp_token(overrides?: CallOverrides): Promise; - - mintLP( - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - remove_liquidity( - _amount: BigNumberish, - min_amounts: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_imbalance( - amounts: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - max_burn_amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_one_coin( - _token_amount: BigNumberish, - i: BigNumberish, - min_amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setRate( - i: BigNumberish, - j: BigNumberish, - rate_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setRateUnderlying( - i: BigNumberish, - j: BigNumberish, - rate_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setWithdrawRate( - i: BigNumberish, - rate_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - set_virtual_price( - _price: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - token(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "underlying_coins(int128)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "underlying_coins(uint256)"( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - virtualPrice(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/test/mocks/integrations/CurveV1StETHMock.ts b/src/types/contracts/test/mocks/integrations/CurveV1StETHMock.ts deleted file mode 100644 index fc3f8dfc..00000000 --- a/src/types/contracts/test/mocks/integrations/CurveV1StETHMock.ts +++ /dev/null @@ -1,880 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PayableOverrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface CurveV1StETHMockInterface extends utils.Interface { - functions: { - "A()": FunctionFragment; - "A_precise()": FunctionFragment; - "add_liquidity(uint256[2],uint256)": FunctionFragment; - "admin()": FunctionFragment; - "admin_balances(uint256)": FunctionFragment; - "admin_fee()": FunctionFragment; - "balances(uint256)": FunctionFragment; - "block_timestamp_last()": FunctionFragment; - "calc_token_amount(uint256[2],bool)": FunctionFragment; - "calc_withdraw_one_coin(uint256,int128)": FunctionFragment; - "coins(uint256)": FunctionFragment; - "exchange(int128,int128,uint256,uint256)": FunctionFragment; - "exchange_underlying(int128,int128,uint256,uint256)": FunctionFragment; - "fee()": FunctionFragment; - "future_A()": FunctionFragment; - "future_A_time()": FunctionFragment; - "get_dy(int128,int128,uint256)": FunctionFragment; - "get_dy_underlying(int128,int128,uint256)": FunctionFragment; - "get_virtual_price()": FunctionFragment; - "initial_A()": FunctionFragment; - "initial_A_time()": FunctionFragment; - "lp_token()": FunctionFragment; - "remove_liquidity(uint256,uint256[2])": FunctionFragment; - "remove_liquidity_imbalance(uint256[2],uint256)": FunctionFragment; - "remove_liquidity_one_coin(uint256,int128,uint256)": FunctionFragment; - "setRate(int128,int128,uint256)": FunctionFragment; - "set_virtual_price(uint256)": FunctionFragment; - "token()": FunctionFragment; - "virtualPrice()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "A" - | "A_precise" - | "add_liquidity" - | "admin" - | "admin_balances" - | "admin_fee" - | "balances" - | "block_timestamp_last" - | "calc_token_amount" - | "calc_withdraw_one_coin" - | "coins" - | "exchange" - | "exchange_underlying" - | "fee" - | "future_A" - | "future_A_time" - | "get_dy" - | "get_dy_underlying" - | "get_virtual_price" - | "initial_A" - | "initial_A_time" - | "lp_token" - | "remove_liquidity" - | "remove_liquidity_imbalance" - | "remove_liquidity_one_coin" - | "setRate" - | "set_virtual_price" - | "token" - | "virtualPrice" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "A", values?: undefined): string; - encodeFunctionData(functionFragment: "A_precise", values?: undefined): string; - encodeFunctionData( - functionFragment: "add_liquidity", - values: [[BigNumberish, BigNumberish], BigNumberish] - ): string; - encodeFunctionData(functionFragment: "admin", values?: undefined): string; - encodeFunctionData( - functionFragment: "admin_balances", - values: [BigNumberish] - ): string; - encodeFunctionData(functionFragment: "admin_fee", values?: undefined): string; - encodeFunctionData( - functionFragment: "balances", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "block_timestamp_last", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "calc_token_amount", - values: [[BigNumberish, BigNumberish], boolean] - ): string; - encodeFunctionData( - functionFragment: "calc_withdraw_one_coin", - values: [BigNumberish, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "coins", values: [BigNumberish]): string; - encodeFunctionData( - functionFragment: "exchange", - values: [BigNumberish, BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "exchange_underlying", - values: [BigNumberish, BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "fee", values?: undefined): string; - encodeFunctionData(functionFragment: "future_A", values?: undefined): string; - encodeFunctionData( - functionFragment: "future_A_time", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "get_dy", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "get_dy_underlying", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "get_virtual_price", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "initial_A", values?: undefined): string; - encodeFunctionData( - functionFragment: "initial_A_time", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "lp_token", values?: undefined): string; - encodeFunctionData( - functionFragment: "remove_liquidity", - values: [BigNumberish, [BigNumberish, BigNumberish]] - ): string; - encodeFunctionData( - functionFragment: "remove_liquidity_imbalance", - values: [[BigNumberish, BigNumberish], BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "remove_liquidity_one_coin", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "setRate", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "set_virtual_price", - values: [BigNumberish] - ): string; - encodeFunctionData(functionFragment: "token", values?: undefined): string; - encodeFunctionData( - functionFragment: "virtualPrice", - values?: undefined - ): string; - - decodeFunctionResult(functionFragment: "A", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "A_precise", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "add_liquidity", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "admin", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "admin_balances", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "admin_fee", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "balances", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "block_timestamp_last", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "calc_token_amount", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "calc_withdraw_one_coin", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "coins", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "exchange", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "exchange_underlying", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "fee", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "future_A", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "future_A_time", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "get_dy", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "get_dy_underlying", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "get_virtual_price", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "initial_A", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "initial_A_time", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "lp_token", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "remove_liquidity", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "remove_liquidity_imbalance", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "remove_liquidity_one_coin", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "setRate", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "set_virtual_price", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "token", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "virtualPrice", - data: BytesLike - ): Result; - - events: {}; -} - -export interface CurveV1StETHMock extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: CurveV1StETHMockInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - A(overrides?: CallOverrides): Promise<[BigNumber]>; - - A_precise(overrides?: CallOverrides): Promise<[BigNumber]>; - - add_liquidity( - amounts: [BigNumberish, BigNumberish], - min_mint_amount: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - admin(overrides?: CallOverrides): Promise<[string]>; - - admin_balances( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - admin_fee(overrides?: CallOverrides): Promise<[BigNumber]>; - - balances(i: BigNumberish, overrides?: CallOverrides): Promise<[BigNumber]>; - - block_timestamp_last(overrides?: CallOverrides): Promise<[BigNumber]>; - - calc_token_amount( - arg0: [BigNumberish, BigNumberish], - arg1: boolean, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - calc_withdraw_one_coin( - arg0: BigNumberish, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - coins(arg0: BigNumberish, overrides?: CallOverrides): Promise<[string]>; - - exchange( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - min_dy: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - exchange_underlying( - arg0: BigNumberish, - arg1: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - overrides?: CallOverrides - ): Promise<[void]>; - - fee(overrides?: CallOverrides): Promise<[BigNumber]>; - - future_A(overrides?: CallOverrides): Promise<[BigNumber]>; - - future_A_time(overrides?: CallOverrides): Promise<[BigNumber]>; - - get_dy( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - get_dy_underlying( - arg0: BigNumberish, - arg1: BigNumberish, - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - get_virtual_price(overrides?: CallOverrides): Promise<[BigNumber]>; - - initial_A(overrides?: CallOverrides): Promise<[BigNumber]>; - - initial_A_time(overrides?: CallOverrides): Promise<[BigNumber]>; - - lp_token(overrides?: CallOverrides): Promise<[string]>; - - remove_liquidity( - _amount: BigNumberish, - min_amounts: [BigNumberish, BigNumberish], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_imbalance( - amounts: [BigNumberish, BigNumberish], - max_burn_amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_one_coin( - _token_amount: BigNumberish, - i: BigNumberish, - min_amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setRate( - i: BigNumberish, - j: BigNumberish, - rate_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - set_virtual_price( - _price: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - token(overrides?: CallOverrides): Promise<[string]>; - - virtualPrice(overrides?: CallOverrides): Promise<[BigNumber]>; - }; - - A(overrides?: CallOverrides): Promise; - - A_precise(overrides?: CallOverrides): Promise; - - add_liquidity( - amounts: [BigNumberish, BigNumberish], - min_mint_amount: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - admin(overrides?: CallOverrides): Promise; - - admin_balances( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - admin_fee(overrides?: CallOverrides): Promise; - - balances(i: BigNumberish, overrides?: CallOverrides): Promise; - - block_timestamp_last(overrides?: CallOverrides): Promise; - - calc_token_amount( - arg0: [BigNumberish, BigNumberish], - arg1: boolean, - overrides?: CallOverrides - ): Promise; - - calc_withdraw_one_coin( - arg0: BigNumberish, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - coins(arg0: BigNumberish, overrides?: CallOverrides): Promise; - - exchange( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - min_dy: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - exchange_underlying( - arg0: BigNumberish, - arg1: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - overrides?: CallOverrides - ): Promise; - - fee(overrides?: CallOverrides): Promise; - - future_A(overrides?: CallOverrides): Promise; - - future_A_time(overrides?: CallOverrides): Promise; - - get_dy( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_dy_underlying( - arg0: BigNumberish, - arg1: BigNumberish, - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_virtual_price(overrides?: CallOverrides): Promise; - - initial_A(overrides?: CallOverrides): Promise; - - initial_A_time(overrides?: CallOverrides): Promise; - - lp_token(overrides?: CallOverrides): Promise; - - remove_liquidity( - _amount: BigNumberish, - min_amounts: [BigNumberish, BigNumberish], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_imbalance( - amounts: [BigNumberish, BigNumberish], - max_burn_amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_one_coin( - _token_amount: BigNumberish, - i: BigNumberish, - min_amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setRate( - i: BigNumberish, - j: BigNumberish, - rate_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - set_virtual_price( - _price: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - token(overrides?: CallOverrides): Promise; - - virtualPrice(overrides?: CallOverrides): Promise; - - callStatic: { - A(overrides?: CallOverrides): Promise; - - A_precise(overrides?: CallOverrides): Promise; - - add_liquidity( - amounts: [BigNumberish, BigNumberish], - min_mint_amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - admin(overrides?: CallOverrides): Promise; - - admin_balances( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - admin_fee(overrides?: CallOverrides): Promise; - - balances(i: BigNumberish, overrides?: CallOverrides): Promise; - - block_timestamp_last(overrides?: CallOverrides): Promise; - - calc_token_amount( - arg0: [BigNumberish, BigNumberish], - arg1: boolean, - overrides?: CallOverrides - ): Promise; - - calc_withdraw_one_coin( - arg0: BigNumberish, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - coins(arg0: BigNumberish, overrides?: CallOverrides): Promise; - - exchange( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - min_dy: BigNumberish, - overrides?: CallOverrides - ): Promise; - - exchange_underlying( - arg0: BigNumberish, - arg1: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - overrides?: CallOverrides - ): Promise; - - fee(overrides?: CallOverrides): Promise; - - future_A(overrides?: CallOverrides): Promise; - - future_A_time(overrides?: CallOverrides): Promise; - - get_dy( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_dy_underlying( - arg0: BigNumberish, - arg1: BigNumberish, - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_virtual_price(overrides?: CallOverrides): Promise; - - initial_A(overrides?: CallOverrides): Promise; - - initial_A_time(overrides?: CallOverrides): Promise; - - lp_token(overrides?: CallOverrides): Promise; - - remove_liquidity( - _amount: BigNumberish, - min_amounts: [BigNumberish, BigNumberish], - overrides?: CallOverrides - ): Promise; - - remove_liquidity_imbalance( - amounts: [BigNumberish, BigNumberish], - max_burn_amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - remove_liquidity_one_coin( - _token_amount: BigNumberish, - i: BigNumberish, - min_amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - setRate( - i: BigNumberish, - j: BigNumberish, - rate_RAY: BigNumberish, - overrides?: CallOverrides - ): Promise; - - set_virtual_price( - _price: BigNumberish, - overrides?: CallOverrides - ): Promise; - - token(overrides?: CallOverrides): Promise; - - virtualPrice(overrides?: CallOverrides): Promise; - }; - - filters: {}; - - estimateGas: { - A(overrides?: CallOverrides): Promise; - - A_precise(overrides?: CallOverrides): Promise; - - add_liquidity( - amounts: [BigNumberish, BigNumberish], - min_mint_amount: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - admin(overrides?: CallOverrides): Promise; - - admin_balances( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - admin_fee(overrides?: CallOverrides): Promise; - - balances(i: BigNumberish, overrides?: CallOverrides): Promise; - - block_timestamp_last(overrides?: CallOverrides): Promise; - - calc_token_amount( - arg0: [BigNumberish, BigNumberish], - arg1: boolean, - overrides?: CallOverrides - ): Promise; - - calc_withdraw_one_coin( - arg0: BigNumberish, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - coins(arg0: BigNumberish, overrides?: CallOverrides): Promise; - - exchange( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - min_dy: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - exchange_underlying( - arg0: BigNumberish, - arg1: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - overrides?: CallOverrides - ): Promise; - - fee(overrides?: CallOverrides): Promise; - - future_A(overrides?: CallOverrides): Promise; - - future_A_time(overrides?: CallOverrides): Promise; - - get_dy( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_dy_underlying( - arg0: BigNumberish, - arg1: BigNumberish, - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_virtual_price(overrides?: CallOverrides): Promise; - - initial_A(overrides?: CallOverrides): Promise; - - initial_A_time(overrides?: CallOverrides): Promise; - - lp_token(overrides?: CallOverrides): Promise; - - remove_liquidity( - _amount: BigNumberish, - min_amounts: [BigNumberish, BigNumberish], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_imbalance( - amounts: [BigNumberish, BigNumberish], - max_burn_amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_one_coin( - _token_amount: BigNumberish, - i: BigNumberish, - min_amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setRate( - i: BigNumberish, - j: BigNumberish, - rate_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - set_virtual_price( - _price: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - token(overrides?: CallOverrides): Promise; - - virtualPrice(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - A(overrides?: CallOverrides): Promise; - - A_precise(overrides?: CallOverrides): Promise; - - add_liquidity( - amounts: [BigNumberish, BigNumberish], - min_mint_amount: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - admin(overrides?: CallOverrides): Promise; - - admin_balances( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - admin_fee(overrides?: CallOverrides): Promise; - - balances( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - block_timestamp_last( - overrides?: CallOverrides - ): Promise; - - calc_token_amount( - arg0: [BigNumberish, BigNumberish], - arg1: boolean, - overrides?: CallOverrides - ): Promise; - - calc_withdraw_one_coin( - arg0: BigNumberish, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - coins( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - exchange( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - min_dy: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - exchange_underlying( - arg0: BigNumberish, - arg1: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - overrides?: CallOverrides - ): Promise; - - fee(overrides?: CallOverrides): Promise; - - future_A(overrides?: CallOverrides): Promise; - - future_A_time(overrides?: CallOverrides): Promise; - - get_dy( - i: BigNumberish, - j: BigNumberish, - dx: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_dy_underlying( - arg0: BigNumberish, - arg1: BigNumberish, - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise; - - get_virtual_price(overrides?: CallOverrides): Promise; - - initial_A(overrides?: CallOverrides): Promise; - - initial_A_time(overrides?: CallOverrides): Promise; - - lp_token(overrides?: CallOverrides): Promise; - - remove_liquidity( - _amount: BigNumberish, - min_amounts: [BigNumberish, BigNumberish], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_imbalance( - amounts: [BigNumberish, BigNumberish], - max_burn_amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - remove_liquidity_one_coin( - _token_amount: BigNumberish, - i: BigNumberish, - min_amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setRate( - i: BigNumberish, - j: BigNumberish, - rate_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - set_virtual_price( - _price: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - token(overrides?: CallOverrides): Promise; - - virtualPrice(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/test/mocks/integrations/LidoMock.sol/LidoMock.ts b/src/types/contracts/test/mocks/integrations/LidoMock.sol/LidoMock.ts deleted file mode 100644 index e83446e7..00000000 --- a/src/types/contracts/test/mocks/integrations/LidoMock.sol/LidoMock.ts +++ /dev/null @@ -1,747 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PayableOverrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../../common"; - -export interface LidoMockInterface extends utils.Interface { - functions: { - "allowance(address,address)": FunctionFragment; - "approve(address,uint256)": FunctionFragment; - "balanceOf(address)": FunctionFragment; - "burnShares(address,uint256)": FunctionFragment; - "decimals()": FunctionFragment; - "decreaseAllowance(address,uint256)": FunctionFragment; - "getPooledEthByShares(uint256)": FunctionFragment; - "getSharesByPooledEth(uint256)": FunctionFragment; - "getTotalPooledEther()": FunctionFragment; - "getTotalShares()": FunctionFragment; - "increaseAllowance(address,uint256)": FunctionFragment; - "name()": FunctionFragment; - "sharesOf(address)": FunctionFragment; - "submit(address)": FunctionFragment; - "symbol()": FunctionFragment; - "syncExchangeRate(uint256,uint256)": FunctionFragment; - "totalPooledEtherSynced()": FunctionFragment; - "totalSharesSynced()": FunctionFragment; - "totalSupply()": FunctionFragment; - "transfer(address,uint256)": FunctionFragment; - "transferFrom(address,address,uint256)": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "allowance" - | "approve" - | "balanceOf" - | "burnShares" - | "decimals" - | "decreaseAllowance" - | "getPooledEthByShares" - | "getSharesByPooledEth" - | "getTotalPooledEther" - | "getTotalShares" - | "increaseAllowance" - | "name" - | "sharesOf" - | "submit" - | "symbol" - | "syncExchangeRate" - | "totalPooledEtherSynced" - | "totalSharesSynced" - | "totalSupply" - | "transfer" - | "transferFrom" - ): FunctionFragment; - - encodeFunctionData( - functionFragment: "allowance", - values: [string, string] - ): string; - encodeFunctionData( - functionFragment: "approve", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "balanceOf", values: [string]): string; - encodeFunctionData( - functionFragment: "burnShares", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "decimals", values?: undefined): string; - encodeFunctionData( - functionFragment: "decreaseAllowance", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "getPooledEthByShares", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "getSharesByPooledEth", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "getTotalPooledEther", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "getTotalShares", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "increaseAllowance", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "name", values?: undefined): string; - encodeFunctionData(functionFragment: "sharesOf", values: [string]): string; - encodeFunctionData(functionFragment: "submit", values: [string]): string; - encodeFunctionData(functionFragment: "symbol", values?: undefined): string; - encodeFunctionData( - functionFragment: "syncExchangeRate", - values: [BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "totalPooledEtherSynced", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "totalSharesSynced", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "totalSupply", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "transfer", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "transferFrom", - values: [string, string, BigNumberish] - ): string; - - decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "burnShares", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "decreaseAllowance", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getPooledEthByShares", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getSharesByPooledEth", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getTotalPooledEther", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getTotalShares", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "increaseAllowance", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "sharesOf", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "submit", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "syncExchangeRate", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "totalPooledEtherSynced", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "totalSharesSynced", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "totalSupply", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "transfer", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "transferFrom", - data: BytesLike - ): Result; - - events: { - "Approval(address,address,uint256)": EventFragment; - "Mock_Submitted(address,uint256,address)": EventFragment; - "Transfer(address,address,uint256)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "Approval"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Mock_Submitted"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment; -} - -export interface ApprovalEventObject { - owner: string; - spender: string; - value: BigNumber; -} -export type ApprovalEvent = TypedEvent< - [string, string, BigNumber], - ApprovalEventObject ->; - -export type ApprovalEventFilter = TypedEventFilter; - -export interface Mock_SubmittedEventObject { - sender: string; - amount: BigNumber; - referral: string; -} -export type Mock_SubmittedEvent = TypedEvent< - [string, BigNumber, string], - Mock_SubmittedEventObject ->; - -export type Mock_SubmittedEventFilter = TypedEventFilter; - -export interface TransferEventObject { - from: string; - to: string; - value: BigNumber; -} -export type TransferEvent = TypedEvent< - [string, string, BigNumber], - TransferEventObject ->; - -export type TransferEventFilter = TypedEventFilter; - -export interface LidoMock extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: LidoMockInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - allowance( - _owner: string, - _spender: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - approve( - _spender: string, - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf( - _account: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - burnShares( - _account: string, - _sharesAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - decimals(overrides?: CallOverrides): Promise<[number]>; - - decreaseAllowance( - _spender: string, - _subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getPooledEthByShares( - _sharesAmount: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - getSharesByPooledEth( - _ethAmount: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - getTotalPooledEther(overrides?: CallOverrides): Promise<[BigNumber]>; - - getTotalShares(overrides?: CallOverrides): Promise<[BigNumber]>; - - increaseAllowance( - _spender: string, - _addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise<[string]>; - - sharesOf(_account: string, overrides?: CallOverrides): Promise<[BigNumber]>; - - submit( - _referral: string, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise<[string]>; - - syncExchangeRate( - totalPooledEther: BigNumberish, - totalShares: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - totalPooledEtherSynced(overrides?: CallOverrides): Promise<[BigNumber]>; - - totalSharesSynced(overrides?: CallOverrides): Promise<[BigNumber]>; - - totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>; - - transfer( - _recipient: string, - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - _sender: string, - _recipient: string, - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - allowance( - _owner: string, - _spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - _spender: string, - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(_account: string, overrides?: CallOverrides): Promise; - - burnShares( - _account: string, - _sharesAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - decreaseAllowance( - _spender: string, - _subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getPooledEthByShares( - _sharesAmount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getSharesByPooledEth( - _ethAmount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getTotalPooledEther(overrides?: CallOverrides): Promise; - - getTotalShares(overrides?: CallOverrides): Promise; - - increaseAllowance( - _spender: string, - _addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - sharesOf(_account: string, overrides?: CallOverrides): Promise; - - submit( - _referral: string, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - syncExchangeRate( - totalPooledEther: BigNumberish, - totalShares: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - totalPooledEtherSynced(overrides?: CallOverrides): Promise; - - totalSharesSynced(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - transfer( - _recipient: string, - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - _sender: string, - _recipient: string, - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - allowance( - _owner: string, - _spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - _spender: string, - _amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - balanceOf(_account: string, overrides?: CallOverrides): Promise; - - burnShares( - _account: string, - _sharesAmount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - decreaseAllowance( - _spender: string, - _subtractedValue: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getPooledEthByShares( - _sharesAmount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getSharesByPooledEth( - _ethAmount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getTotalPooledEther(overrides?: CallOverrides): Promise; - - getTotalShares(overrides?: CallOverrides): Promise; - - increaseAllowance( - _spender: string, - _addedValue: BigNumberish, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - sharesOf(_account: string, overrides?: CallOverrides): Promise; - - submit(_referral: string, overrides?: CallOverrides): Promise; - - symbol(overrides?: CallOverrides): Promise; - - syncExchangeRate( - totalPooledEther: BigNumberish, - totalShares: BigNumberish, - overrides?: CallOverrides - ): Promise; - - totalPooledEtherSynced(overrides?: CallOverrides): Promise; - - totalSharesSynced(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - transfer( - _recipient: string, - _amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transferFrom( - _sender: string, - _recipient: string, - _amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - "Approval(address,address,uint256)"( - owner?: string | null, - spender?: string | null, - value?: null - ): ApprovalEventFilter; - Approval( - owner?: string | null, - spender?: string | null, - value?: null - ): ApprovalEventFilter; - - "Mock_Submitted(address,uint256,address)"( - sender?: string | null, - amount?: null, - referral?: null - ): Mock_SubmittedEventFilter; - Mock_Submitted( - sender?: string | null, - amount?: null, - referral?: null - ): Mock_SubmittedEventFilter; - - "Transfer(address,address,uint256)"( - from?: string | null, - to?: string | null, - value?: null - ): TransferEventFilter; - Transfer( - from?: string | null, - to?: string | null, - value?: null - ): TransferEventFilter; - }; - - estimateGas: { - allowance( - _owner: string, - _spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - _spender: string, - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(_account: string, overrides?: CallOverrides): Promise; - - burnShares( - _account: string, - _sharesAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - decreaseAllowance( - _spender: string, - _subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getPooledEthByShares( - _sharesAmount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getSharesByPooledEth( - _ethAmount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getTotalPooledEther(overrides?: CallOverrides): Promise; - - getTotalShares(overrides?: CallOverrides): Promise; - - increaseAllowance( - _spender: string, - _addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - sharesOf(_account: string, overrides?: CallOverrides): Promise; - - submit( - _referral: string, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - syncExchangeRate( - totalPooledEther: BigNumberish, - totalShares: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - totalPooledEtherSynced(overrides?: CallOverrides): Promise; - - totalSharesSynced(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - transfer( - _recipient: string, - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - _sender: string, - _recipient: string, - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - allowance( - _owner: string, - _spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - _spender: string, - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf( - _account: string, - overrides?: CallOverrides - ): Promise; - - burnShares( - _account: string, - _sharesAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - decreaseAllowance( - _spender: string, - _subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getPooledEthByShares( - _sharesAmount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getSharesByPooledEth( - _ethAmount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getTotalPooledEther( - overrides?: CallOverrides - ): Promise; - - getTotalShares(overrides?: CallOverrides): Promise; - - increaseAllowance( - _spender: string, - _addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - sharesOf( - _account: string, - overrides?: CallOverrides - ): Promise; - - submit( - _referral: string, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - syncExchangeRate( - totalPooledEther: BigNumberish, - totalShares: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - totalPooledEtherSynced( - overrides?: CallOverrides - ): Promise; - - totalSharesSynced(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - transfer( - _recipient: string, - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - _sender: string, - _recipient: string, - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/src/types/contracts/test/mocks/integrations/LidoMock.sol/index.ts b/src/types/contracts/test/mocks/integrations/LidoMock.sol/index.ts index b2ff170b..2d0efcdd 100644 --- a/src/types/contracts/test/mocks/integrations/LidoMock.sol/index.ts +++ b/src/types/contracts/test/mocks/integrations/LidoMock.sol/index.ts @@ -2,4 +2,3 @@ /* tslint:disable */ /* eslint-disable */ export type { ILidoMockEvents } from "./ILidoMockEvents"; -export type { LidoMock } from "./LidoMock"; diff --git a/src/types/contracts/test/mocks/integrations/UniswapV2Mock.ts b/src/types/contracts/test/mocks/integrations/UniswapV2Mock.ts deleted file mode 100644 index dd0c3282..00000000 --- a/src/types/contracts/test/mocks/integrations/UniswapV2Mock.ts +++ /dev/null @@ -1,1553 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PayableOverrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface UniswapV2MockInterface extends utils.Interface { - functions: { - "WETH()": FunctionFragment; - "addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256)": FunctionFragment; - "addLiquidityETH(address,uint256,uint256,uint256,address,uint256)": FunctionFragment; - "factory()": FunctionFragment; - "getAmountIn(uint256,uint256,uint256)": FunctionFragment; - "getAmountOut(uint256,uint256,uint256)": FunctionFragment; - "getAmountsIn(uint256,address[])": FunctionFragment; - "getAmountsOut(uint256,address[])": FunctionFragment; - "getRate(address,address)": FunctionFragment; - "quote(uint256,uint256,uint256)": FunctionFragment; - "removeLiquidity(address,address,uint256,uint256,uint256,address,uint256)": FunctionFragment; - "removeLiquidityETH(address,uint256,uint256,uint256,address,uint256)": FunctionFragment; - "removeLiquidityETHSupportingFeeOnTransferTokens(address,uint256,uint256,uint256,address,uint256)": FunctionFragment; - "removeLiquidityETHWithPermit(address,uint256,uint256,uint256,address,uint256,bool,uint8,bytes32,bytes32)": FunctionFragment; - "removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(address,uint256,uint256,uint256,address,uint256,bool,uint8,bytes32,bytes32)": FunctionFragment; - "removeLiquidityWithPermit(address,address,uint256,uint256,uint256,address,uint256,bool,uint8,bytes32,bytes32)": FunctionFragment; - "setRate(address,address,uint256)": FunctionFragment; - "swapETHForExactTokens(uint256,address[],address,uint256)": FunctionFragment; - "swapExactETHForTokens(uint256,address[],address,uint256)": FunctionFragment; - "swapExactETHForTokensSupportingFeeOnTransferTokens(uint256,address[],address,uint256)": FunctionFragment; - "swapExactTokensForETH(uint256,uint256,address[],address,uint256)": FunctionFragment; - "swapExactTokensForETHSupportingFeeOnTransferTokens(uint256,uint256,address[],address,uint256)": FunctionFragment; - "swapExactTokensForTokens(uint256,uint256,address[],address,uint256)": FunctionFragment; - "swapExactTokensForTokensSupportingFeeOnTransferTokens(uint256,uint256,address[],address,uint256)": FunctionFragment; - "swapTokensForExactETH(uint256,uint256,address[],address,uint256)": FunctionFragment; - "swapTokensForExactTokens(uint256,uint256,address[],address,uint256)": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "WETH" - | "addLiquidity" - | "addLiquidityETH" - | "factory" - | "getAmountIn" - | "getAmountOut" - | "getAmountsIn" - | "getAmountsOut" - | "getRate" - | "quote" - | "removeLiquidity" - | "removeLiquidityETH" - | "removeLiquidityETHSupportingFeeOnTransferTokens" - | "removeLiquidityETHWithPermit" - | "removeLiquidityETHWithPermitSupportingFeeOnTransferTokens" - | "removeLiquidityWithPermit" - | "setRate" - | "swapETHForExactTokens" - | "swapExactETHForTokens" - | "swapExactETHForTokensSupportingFeeOnTransferTokens" - | "swapExactTokensForETH" - | "swapExactTokensForETHSupportingFeeOnTransferTokens" - | "swapExactTokensForTokens" - | "swapExactTokensForTokensSupportingFeeOnTransferTokens" - | "swapTokensForExactETH" - | "swapTokensForExactTokens" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "WETH", values?: undefined): string; - encodeFunctionData( - functionFragment: "addLiquidity", - values: [ - string, - string, - BigNumberish, - BigNumberish, - BigNumberish, - BigNumberish, - string, - BigNumberish - ] - ): string; - encodeFunctionData( - functionFragment: "addLiquidityETH", - values: [ - string, - BigNumberish, - BigNumberish, - BigNumberish, - string, - BigNumberish - ] - ): string; - encodeFunctionData(functionFragment: "factory", values?: undefined): string; - encodeFunctionData( - functionFragment: "getAmountIn", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "getAmountOut", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "getAmountsIn", - values: [BigNumberish, string[]] - ): string; - encodeFunctionData( - functionFragment: "getAmountsOut", - values: [BigNumberish, string[]] - ): string; - encodeFunctionData( - functionFragment: "getRate", - values: [string, string] - ): string; - encodeFunctionData( - functionFragment: "quote", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "removeLiquidity", - values: [ - string, - string, - BigNumberish, - BigNumberish, - BigNumberish, - string, - BigNumberish - ] - ): string; - encodeFunctionData( - functionFragment: "removeLiquidityETH", - values: [ - string, - BigNumberish, - BigNumberish, - BigNumberish, - string, - BigNumberish - ] - ): string; - encodeFunctionData( - functionFragment: "removeLiquidityETHSupportingFeeOnTransferTokens", - values: [ - string, - BigNumberish, - BigNumberish, - BigNumberish, - string, - BigNumberish - ] - ): string; - encodeFunctionData( - functionFragment: "removeLiquidityETHWithPermit", - values: [ - string, - BigNumberish, - BigNumberish, - BigNumberish, - string, - BigNumberish, - boolean, - BigNumberish, - BytesLike, - BytesLike - ] - ): string; - encodeFunctionData( - functionFragment: "removeLiquidityETHWithPermitSupportingFeeOnTransferTokens", - values: [ - string, - BigNumberish, - BigNumberish, - BigNumberish, - string, - BigNumberish, - boolean, - BigNumberish, - BytesLike, - BytesLike - ] - ): string; - encodeFunctionData( - functionFragment: "removeLiquidityWithPermit", - values: [ - string, - string, - BigNumberish, - BigNumberish, - BigNumberish, - string, - BigNumberish, - boolean, - BigNumberish, - BytesLike, - BytesLike - ] - ): string; - encodeFunctionData( - functionFragment: "setRate", - values: [string, string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "swapETHForExactTokens", - values: [BigNumberish, string[], string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "swapExactETHForTokens", - values: [BigNumberish, string[], string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "swapExactETHForTokensSupportingFeeOnTransferTokens", - values: [BigNumberish, string[], string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "swapExactTokensForETH", - values: [BigNumberish, BigNumberish, string[], string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "swapExactTokensForETHSupportingFeeOnTransferTokens", - values: [BigNumberish, BigNumberish, string[], string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "swapExactTokensForTokens", - values: [BigNumberish, BigNumberish, string[], string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "swapExactTokensForTokensSupportingFeeOnTransferTokens", - values: [BigNumberish, BigNumberish, string[], string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "swapTokensForExactETH", - values: [BigNumberish, BigNumberish, string[], string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "swapTokensForExactTokens", - values: [BigNumberish, BigNumberish, string[], string, BigNumberish] - ): string; - - decodeFunctionResult(functionFragment: "WETH", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "addLiquidity", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "addLiquidityETH", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "factory", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "getAmountIn", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getAmountOut", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getAmountsIn", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getAmountsOut", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "getRate", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "quote", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "removeLiquidity", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "removeLiquidityETH", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "removeLiquidityETHSupportingFeeOnTransferTokens", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "removeLiquidityETHWithPermit", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "removeLiquidityETHWithPermitSupportingFeeOnTransferTokens", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "removeLiquidityWithPermit", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "setRate", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "swapETHForExactTokens", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "swapExactETHForTokens", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "swapExactETHForTokensSupportingFeeOnTransferTokens", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "swapExactTokensForETH", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "swapExactTokensForETHSupportingFeeOnTransferTokens", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "swapExactTokensForTokens", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "swapExactTokensForTokensSupportingFeeOnTransferTokens", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "swapTokensForExactETH", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "swapTokensForExactTokens", - data: BytesLike - ): Result; - - events: {}; -} - -export interface UniswapV2Mock extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: UniswapV2MockInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - WETH(overrides?: CallOverrides): Promise<[string]>; - - addLiquidity( - arg0: string, - arg1: string, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: BigNumberish, - arg5: BigNumberish, - arg6: string, - arg7: BigNumberish, - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber, BigNumber] & { - amountA: BigNumber; - amountB: BigNumber; - liquidity: BigNumber; - } - >; - - addLiquidityETH( - arg0: string, - arg1: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: string, - arg5: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - factory(overrides?: CallOverrides): Promise<[string]>; - - getAmountIn( - arg0: BigNumberish, - arg1: BigNumberish, - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber] & { amountIn: BigNumber }>; - - getAmountOut( - arg0: BigNumberish, - arg1: BigNumberish, - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber] & { amountOut: BigNumber }>; - - getAmountsIn( - amountOut: BigNumberish, - path: string[], - overrides?: CallOverrides - ): Promise<[BigNumber[]] & { amounts: BigNumber[] }>; - - getAmountsOut( - amountIn: BigNumberish, - path: string[], - overrides?: CallOverrides - ): Promise<[BigNumber[]] & { amounts: BigNumber[] }>; - - getRate( - tokenIn: string, - tokenOut: string, - overrides?: CallOverrides - ): Promise<[BigNumber] & { rate: BigNumber }>; - - quote( - arg0: BigNumberish, - arg1: BigNumberish, - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber] & { amountB: BigNumber }>; - - removeLiquidity( - arg0: string, - arg1: string, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: BigNumberish, - arg5: string, - arg6: BigNumberish, - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber] & { amountA: BigNumber; amountB: BigNumber } - >; - - removeLiquidityETH( - arg0: string, - arg1: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: string, - arg5: BigNumberish, - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber] & { amountToken: BigNumber; amountETH: BigNumber } - >; - - removeLiquidityETHSupportingFeeOnTransferTokens( - arg0: string, - arg1: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: string, - arg5: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber] & { amountETH: BigNumber }>; - - removeLiquidityETHWithPermit( - arg0: string, - arg1: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: string, - arg5: BigNumberish, - arg6: boolean, - arg7: BigNumberish, - arg8: BytesLike, - arg9: BytesLike, - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber] & { amountToken: BigNumber; amountETH: BigNumber } - >; - - removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( - arg0: string, - arg1: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: string, - arg5: BigNumberish, - arg6: boolean, - arg7: BigNumberish, - arg8: BytesLike, - arg9: BytesLike, - overrides?: CallOverrides - ): Promise<[BigNumber] & { amountETH: BigNumber }>; - - removeLiquidityWithPermit( - arg0: string, - arg1: string, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: BigNumberish, - arg5: string, - arg6: BigNumberish, - arg7: boolean, - arg8: BigNumberish, - arg9: BytesLike, - arg10: BytesLike, - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber] & { amountA: BigNumber; amountB: BigNumber } - >; - - setRate( - tokenFrom: string, - tokenTo: string, - rate_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - swapETHForExactTokens( - arg0: BigNumberish, - arg1: string[], - arg2: string, - arg3: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - swapExactETHForTokens( - arg0: BigNumberish, - arg1: string[], - arg2: string, - arg3: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - swapExactETHForTokensSupportingFeeOnTransferTokens( - arg0: BigNumberish, - arg1: string[], - arg2: string, - arg3: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - swapExactTokensForETH( - arg0: BigNumberish, - arg1: BigNumberish, - arg2: string[], - arg3: string, - arg4: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber[]] & { amounts: BigNumber[] }>; - - swapExactTokensForETHSupportingFeeOnTransferTokens( - arg0: BigNumberish, - arg1: BigNumberish, - arg2: string[], - arg3: string, - arg4: BigNumberish, - overrides?: CallOverrides - ): Promise<[void]>; - - swapExactTokensForTokens( - amountIn: BigNumberish, - amountOutMin: BigNumberish, - path: string[], - to: string, - deadline: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - swapExactTokensForTokensSupportingFeeOnTransferTokens( - arg0: BigNumberish, - arg1: BigNumberish, - arg2: string[], - arg3: string, - arg4: BigNumberish, - overrides?: CallOverrides - ): Promise<[void]>; - - swapTokensForExactETH( - arg0: BigNumberish, - arg1: BigNumberish, - arg2: string[], - arg3: string, - arg4: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber[]] & { amounts: BigNumber[] }>; - - swapTokensForExactTokens( - amountOut: BigNumberish, - amountInMax: BigNumberish, - path: string[], - to: string, - deadline: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - WETH(overrides?: CallOverrides): Promise; - - addLiquidity( - arg0: string, - arg1: string, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: BigNumberish, - arg5: BigNumberish, - arg6: string, - arg7: BigNumberish, - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber, BigNumber] & { - amountA: BigNumber; - amountB: BigNumber; - liquidity: BigNumber; - } - >; - - addLiquidityETH( - arg0: string, - arg1: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: string, - arg5: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - factory(overrides?: CallOverrides): Promise; - - getAmountIn( - arg0: BigNumberish, - arg1: BigNumberish, - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getAmountOut( - arg0: BigNumberish, - arg1: BigNumberish, - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getAmountsIn( - amountOut: BigNumberish, - path: string[], - overrides?: CallOverrides - ): Promise; - - getAmountsOut( - amountIn: BigNumberish, - path: string[], - overrides?: CallOverrides - ): Promise; - - getRate( - tokenIn: string, - tokenOut: string, - overrides?: CallOverrides - ): Promise; - - quote( - arg0: BigNumberish, - arg1: BigNumberish, - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise; - - removeLiquidity( - arg0: string, - arg1: string, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: BigNumberish, - arg5: string, - arg6: BigNumberish, - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber] & { amountA: BigNumber; amountB: BigNumber } - >; - - removeLiquidityETH( - arg0: string, - arg1: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: string, - arg5: BigNumberish, - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber] & { amountToken: BigNumber; amountETH: BigNumber } - >; - - removeLiquidityETHSupportingFeeOnTransferTokens( - arg0: string, - arg1: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: string, - arg5: BigNumberish, - overrides?: CallOverrides - ): Promise; - - removeLiquidityETHWithPermit( - arg0: string, - arg1: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: string, - arg5: BigNumberish, - arg6: boolean, - arg7: BigNumberish, - arg8: BytesLike, - arg9: BytesLike, - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber] & { amountToken: BigNumber; amountETH: BigNumber } - >; - - removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( - arg0: string, - arg1: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: string, - arg5: BigNumberish, - arg6: boolean, - arg7: BigNumberish, - arg8: BytesLike, - arg9: BytesLike, - overrides?: CallOverrides - ): Promise; - - removeLiquidityWithPermit( - arg0: string, - arg1: string, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: BigNumberish, - arg5: string, - arg6: BigNumberish, - arg7: boolean, - arg8: BigNumberish, - arg9: BytesLike, - arg10: BytesLike, - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber] & { amountA: BigNumber; amountB: BigNumber } - >; - - setRate( - tokenFrom: string, - tokenTo: string, - rate_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - swapETHForExactTokens( - arg0: BigNumberish, - arg1: string[], - arg2: string, - arg3: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - swapExactETHForTokens( - arg0: BigNumberish, - arg1: string[], - arg2: string, - arg3: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - swapExactETHForTokensSupportingFeeOnTransferTokens( - arg0: BigNumberish, - arg1: string[], - arg2: string, - arg3: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - swapExactTokensForETH( - arg0: BigNumberish, - arg1: BigNumberish, - arg2: string[], - arg3: string, - arg4: BigNumberish, - overrides?: CallOverrides - ): Promise; - - swapExactTokensForETHSupportingFeeOnTransferTokens( - arg0: BigNumberish, - arg1: BigNumberish, - arg2: string[], - arg3: string, - arg4: BigNumberish, - overrides?: CallOverrides - ): Promise; - - swapExactTokensForTokens( - amountIn: BigNumberish, - amountOutMin: BigNumberish, - path: string[], - to: string, - deadline: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - swapExactTokensForTokensSupportingFeeOnTransferTokens( - arg0: BigNumberish, - arg1: BigNumberish, - arg2: string[], - arg3: string, - arg4: BigNumberish, - overrides?: CallOverrides - ): Promise; - - swapTokensForExactETH( - arg0: BigNumberish, - arg1: BigNumberish, - arg2: string[], - arg3: string, - arg4: BigNumberish, - overrides?: CallOverrides - ): Promise; - - swapTokensForExactTokens( - amountOut: BigNumberish, - amountInMax: BigNumberish, - path: string[], - to: string, - deadline: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - WETH(overrides?: CallOverrides): Promise; - - addLiquidity( - arg0: string, - arg1: string, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: BigNumberish, - arg5: BigNumberish, - arg6: string, - arg7: BigNumberish, - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber, BigNumber] & { - amountA: BigNumber; - amountB: BigNumber; - liquidity: BigNumber; - } - >; - - addLiquidityETH( - arg0: string, - arg1: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: string, - arg5: BigNumberish, - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber, BigNumber] & { - amountToken: BigNumber; - amountETH: BigNumber; - liquidity: BigNumber; - } - >; - - factory(overrides?: CallOverrides): Promise; - - getAmountIn( - arg0: BigNumberish, - arg1: BigNumberish, - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getAmountOut( - arg0: BigNumberish, - arg1: BigNumberish, - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getAmountsIn( - amountOut: BigNumberish, - path: string[], - overrides?: CallOverrides - ): Promise; - - getAmountsOut( - amountIn: BigNumberish, - path: string[], - overrides?: CallOverrides - ): Promise; - - getRate( - tokenIn: string, - tokenOut: string, - overrides?: CallOverrides - ): Promise; - - quote( - arg0: BigNumberish, - arg1: BigNumberish, - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise; - - removeLiquidity( - arg0: string, - arg1: string, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: BigNumberish, - arg5: string, - arg6: BigNumberish, - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber] & { amountA: BigNumber; amountB: BigNumber } - >; - - removeLiquidityETH( - arg0: string, - arg1: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: string, - arg5: BigNumberish, - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber] & { amountToken: BigNumber; amountETH: BigNumber } - >; - - removeLiquidityETHSupportingFeeOnTransferTokens( - arg0: string, - arg1: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: string, - arg5: BigNumberish, - overrides?: CallOverrides - ): Promise; - - removeLiquidityETHWithPermit( - arg0: string, - arg1: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: string, - arg5: BigNumberish, - arg6: boolean, - arg7: BigNumberish, - arg8: BytesLike, - arg9: BytesLike, - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber] & { amountToken: BigNumber; amountETH: BigNumber } - >; - - removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( - arg0: string, - arg1: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: string, - arg5: BigNumberish, - arg6: boolean, - arg7: BigNumberish, - arg8: BytesLike, - arg9: BytesLike, - overrides?: CallOverrides - ): Promise; - - removeLiquidityWithPermit( - arg0: string, - arg1: string, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: BigNumberish, - arg5: string, - arg6: BigNumberish, - arg7: boolean, - arg8: BigNumberish, - arg9: BytesLike, - arg10: BytesLike, - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber] & { amountA: BigNumber; amountB: BigNumber } - >; - - setRate( - tokenFrom: string, - tokenTo: string, - rate_RAY: BigNumberish, - overrides?: CallOverrides - ): Promise; - - swapETHForExactTokens( - arg0: BigNumberish, - arg1: string[], - arg2: string, - arg3: BigNumberish, - overrides?: CallOverrides - ): Promise; - - swapExactETHForTokens( - arg0: BigNumberish, - arg1: string[], - arg2: string, - arg3: BigNumberish, - overrides?: CallOverrides - ): Promise; - - swapExactETHForTokensSupportingFeeOnTransferTokens( - arg0: BigNumberish, - arg1: string[], - arg2: string, - arg3: BigNumberish, - overrides?: CallOverrides - ): Promise; - - swapExactTokensForETH( - arg0: BigNumberish, - arg1: BigNumberish, - arg2: string[], - arg3: string, - arg4: BigNumberish, - overrides?: CallOverrides - ): Promise; - - swapExactTokensForETHSupportingFeeOnTransferTokens( - arg0: BigNumberish, - arg1: BigNumberish, - arg2: string[], - arg3: string, - arg4: BigNumberish, - overrides?: CallOverrides - ): Promise; - - swapExactTokensForTokens( - amountIn: BigNumberish, - amountOutMin: BigNumberish, - path: string[], - to: string, - deadline: BigNumberish, - overrides?: CallOverrides - ): Promise; - - swapExactTokensForTokensSupportingFeeOnTransferTokens( - arg0: BigNumberish, - arg1: BigNumberish, - arg2: string[], - arg3: string, - arg4: BigNumberish, - overrides?: CallOverrides - ): Promise; - - swapTokensForExactETH( - arg0: BigNumberish, - arg1: BigNumberish, - arg2: string[], - arg3: string, - arg4: BigNumberish, - overrides?: CallOverrides - ): Promise; - - swapTokensForExactTokens( - amountOut: BigNumberish, - amountInMax: BigNumberish, - path: string[], - to: string, - deadline: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - filters: {}; - - estimateGas: { - WETH(overrides?: CallOverrides): Promise; - - addLiquidity( - arg0: string, - arg1: string, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: BigNumberish, - arg5: BigNumberish, - arg6: string, - arg7: BigNumberish, - overrides?: CallOverrides - ): Promise; - - addLiquidityETH( - arg0: string, - arg1: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: string, - arg5: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - factory(overrides?: CallOverrides): Promise; - - getAmountIn( - arg0: BigNumberish, - arg1: BigNumberish, - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getAmountOut( - arg0: BigNumberish, - arg1: BigNumberish, - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getAmountsIn( - amountOut: BigNumberish, - path: string[], - overrides?: CallOverrides - ): Promise; - - getAmountsOut( - amountIn: BigNumberish, - path: string[], - overrides?: CallOverrides - ): Promise; - - getRate( - tokenIn: string, - tokenOut: string, - overrides?: CallOverrides - ): Promise; - - quote( - arg0: BigNumberish, - arg1: BigNumberish, - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise; - - removeLiquidity( - arg0: string, - arg1: string, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: BigNumberish, - arg5: string, - arg6: BigNumberish, - overrides?: CallOverrides - ): Promise; - - removeLiquidityETH( - arg0: string, - arg1: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: string, - arg5: BigNumberish, - overrides?: CallOverrides - ): Promise; - - removeLiquidityETHSupportingFeeOnTransferTokens( - arg0: string, - arg1: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: string, - arg5: BigNumberish, - overrides?: CallOverrides - ): Promise; - - removeLiquidityETHWithPermit( - arg0: string, - arg1: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: string, - arg5: BigNumberish, - arg6: boolean, - arg7: BigNumberish, - arg8: BytesLike, - arg9: BytesLike, - overrides?: CallOverrides - ): Promise; - - removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( - arg0: string, - arg1: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: string, - arg5: BigNumberish, - arg6: boolean, - arg7: BigNumberish, - arg8: BytesLike, - arg9: BytesLike, - overrides?: CallOverrides - ): Promise; - - removeLiquidityWithPermit( - arg0: string, - arg1: string, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: BigNumberish, - arg5: string, - arg6: BigNumberish, - arg7: boolean, - arg8: BigNumberish, - arg9: BytesLike, - arg10: BytesLike, - overrides?: CallOverrides - ): Promise; - - setRate( - tokenFrom: string, - tokenTo: string, - rate_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - swapETHForExactTokens( - arg0: BigNumberish, - arg1: string[], - arg2: string, - arg3: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - swapExactETHForTokens( - arg0: BigNumberish, - arg1: string[], - arg2: string, - arg3: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - swapExactETHForTokensSupportingFeeOnTransferTokens( - arg0: BigNumberish, - arg1: string[], - arg2: string, - arg3: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - swapExactTokensForETH( - arg0: BigNumberish, - arg1: BigNumberish, - arg2: string[], - arg3: string, - arg4: BigNumberish, - overrides?: CallOverrides - ): Promise; - - swapExactTokensForETHSupportingFeeOnTransferTokens( - arg0: BigNumberish, - arg1: BigNumberish, - arg2: string[], - arg3: string, - arg4: BigNumberish, - overrides?: CallOverrides - ): Promise; - - swapExactTokensForTokens( - amountIn: BigNumberish, - amountOutMin: BigNumberish, - path: string[], - to: string, - deadline: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - swapExactTokensForTokensSupportingFeeOnTransferTokens( - arg0: BigNumberish, - arg1: BigNumberish, - arg2: string[], - arg3: string, - arg4: BigNumberish, - overrides?: CallOverrides - ): Promise; - - swapTokensForExactETH( - arg0: BigNumberish, - arg1: BigNumberish, - arg2: string[], - arg3: string, - arg4: BigNumberish, - overrides?: CallOverrides - ): Promise; - - swapTokensForExactTokens( - amountOut: BigNumberish, - amountInMax: BigNumberish, - path: string[], - to: string, - deadline: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - WETH(overrides?: CallOverrides): Promise; - - addLiquidity( - arg0: string, - arg1: string, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: BigNumberish, - arg5: BigNumberish, - arg6: string, - arg7: BigNumberish, - overrides?: CallOverrides - ): Promise; - - addLiquidityETH( - arg0: string, - arg1: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: string, - arg5: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - factory(overrides?: CallOverrides): Promise; - - getAmountIn( - arg0: BigNumberish, - arg1: BigNumberish, - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getAmountOut( - arg0: BigNumberish, - arg1: BigNumberish, - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getAmountsIn( - amountOut: BigNumberish, - path: string[], - overrides?: CallOverrides - ): Promise; - - getAmountsOut( - amountIn: BigNumberish, - path: string[], - overrides?: CallOverrides - ): Promise; - - getRate( - tokenIn: string, - tokenOut: string, - overrides?: CallOverrides - ): Promise; - - quote( - arg0: BigNumberish, - arg1: BigNumberish, - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise; - - removeLiquidity( - arg0: string, - arg1: string, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: BigNumberish, - arg5: string, - arg6: BigNumberish, - overrides?: CallOverrides - ): Promise; - - removeLiquidityETH( - arg0: string, - arg1: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: string, - arg5: BigNumberish, - overrides?: CallOverrides - ): Promise; - - removeLiquidityETHSupportingFeeOnTransferTokens( - arg0: string, - arg1: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: string, - arg5: BigNumberish, - overrides?: CallOverrides - ): Promise; - - removeLiquidityETHWithPermit( - arg0: string, - arg1: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: string, - arg5: BigNumberish, - arg6: boolean, - arg7: BigNumberish, - arg8: BytesLike, - arg9: BytesLike, - overrides?: CallOverrides - ): Promise; - - removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( - arg0: string, - arg1: BigNumberish, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: string, - arg5: BigNumberish, - arg6: boolean, - arg7: BigNumberish, - arg8: BytesLike, - arg9: BytesLike, - overrides?: CallOverrides - ): Promise; - - removeLiquidityWithPermit( - arg0: string, - arg1: string, - arg2: BigNumberish, - arg3: BigNumberish, - arg4: BigNumberish, - arg5: string, - arg6: BigNumberish, - arg7: boolean, - arg8: BigNumberish, - arg9: BytesLike, - arg10: BytesLike, - overrides?: CallOverrides - ): Promise; - - setRate( - tokenFrom: string, - tokenTo: string, - rate_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - swapETHForExactTokens( - arg0: BigNumberish, - arg1: string[], - arg2: string, - arg3: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - swapExactETHForTokens( - arg0: BigNumberish, - arg1: string[], - arg2: string, - arg3: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - swapExactETHForTokensSupportingFeeOnTransferTokens( - arg0: BigNumberish, - arg1: string[], - arg2: string, - arg3: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - swapExactTokensForETH( - arg0: BigNumberish, - arg1: BigNumberish, - arg2: string[], - arg3: string, - arg4: BigNumberish, - overrides?: CallOverrides - ): Promise; - - swapExactTokensForETHSupportingFeeOnTransferTokens( - arg0: BigNumberish, - arg1: BigNumberish, - arg2: string[], - arg3: string, - arg4: BigNumberish, - overrides?: CallOverrides - ): Promise; - - swapExactTokensForTokens( - amountIn: BigNumberish, - amountOutMin: BigNumberish, - path: string[], - to: string, - deadline: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - swapExactTokensForTokensSupportingFeeOnTransferTokens( - arg0: BigNumberish, - arg1: BigNumberish, - arg2: string[], - arg3: string, - arg4: BigNumberish, - overrides?: CallOverrides - ): Promise; - - swapTokensForExactETH( - arg0: BigNumberish, - arg1: BigNumberish, - arg2: string[], - arg3: string, - arg4: BigNumberish, - overrides?: CallOverrides - ): Promise; - - swapTokensForExactTokens( - amountOut: BigNumberish, - amountInMax: BigNumberish, - path: string[], - to: string, - deadline: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/src/types/contracts/test/mocks/integrations/UniswapV3Mock.ts b/src/types/contracts/test/mocks/integrations/UniswapV3Mock.ts deleted file mode 100644 index e164e755..00000000 --- a/src/types/contracts/test/mocks/integrations/UniswapV3Mock.ts +++ /dev/null @@ -1,953 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PayableOverrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export declare namespace ISwapRouter { - export type ExactInputParamsStruct = { - path: BytesLike; - recipient: string; - deadline: BigNumberish; - amountIn: BigNumberish; - amountOutMinimum: BigNumberish; - }; - - export type ExactInputParamsStructOutput = [ - string, - string, - BigNumber, - BigNumber, - BigNumber - ] & { - path: string; - recipient: string; - deadline: BigNumber; - amountIn: BigNumber; - amountOutMinimum: BigNumber; - }; - - export type ExactInputSingleParamsStruct = { - tokenIn: string; - tokenOut: string; - fee: BigNumberish; - recipient: string; - deadline: BigNumberish; - amountIn: BigNumberish; - amountOutMinimum: BigNumberish; - sqrtPriceLimitX96: BigNumberish; - }; - - export type ExactInputSingleParamsStructOutput = [ - string, - string, - number, - string, - BigNumber, - BigNumber, - BigNumber, - BigNumber - ] & { - tokenIn: string; - tokenOut: string; - fee: number; - recipient: string; - deadline: BigNumber; - amountIn: BigNumber; - amountOutMinimum: BigNumber; - sqrtPriceLimitX96: BigNumber; - }; - - export type ExactOutputParamsStruct = { - path: BytesLike; - recipient: string; - deadline: BigNumberish; - amountOut: BigNumberish; - amountInMaximum: BigNumberish; - }; - - export type ExactOutputParamsStructOutput = [ - string, - string, - BigNumber, - BigNumber, - BigNumber - ] & { - path: string; - recipient: string; - deadline: BigNumber; - amountOut: BigNumber; - amountInMaximum: BigNumber; - }; - - export type ExactOutputSingleParamsStruct = { - tokenIn: string; - tokenOut: string; - fee: BigNumberish; - recipient: string; - deadline: BigNumberish; - amountOut: BigNumberish; - amountInMaximum: BigNumberish; - sqrtPriceLimitX96: BigNumberish; - }; - - export type ExactOutputSingleParamsStructOutput = [ - string, - string, - number, - string, - BigNumber, - BigNumber, - BigNumber, - BigNumber - ] & { - tokenIn: string; - tokenOut: string; - fee: number; - recipient: string; - deadline: BigNumber; - amountOut: BigNumber; - amountInMaximum: BigNumber; - sqrtPriceLimitX96: BigNumber; - }; -} - -export interface UniswapV3MockInterface extends utils.Interface { - functions: { - "IS_TEST()": FunctionFragment; - "exactInput((bytes,address,uint256,uint256,uint256))": FunctionFragment; - "exactInputSingle((address,address,uint24,address,uint256,uint256,uint256,uint160))": FunctionFragment; - "exactOutput((bytes,address,uint256,uint256,uint256))": FunctionFragment; - "exactOutputSingle((address,address,uint24,address,uint256,uint256,uint256,uint160))": FunctionFragment; - "failed()": FunctionFragment; - "quoteExactInput(bytes,uint256)": FunctionFragment; - "quoteExactInputSingle(address,address,uint24,uint256,uint160)": FunctionFragment; - "quoteExactOutput(bytes,uint256)": FunctionFragment; - "quoteExactOutputSingle(address,address,uint24,uint256,uint160)": FunctionFragment; - "rates(address,address,uint24)": FunctionFragment; - "setRate(address,address,uint24,uint256)": FunctionFragment; - "setRate(address,address,uint256)": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "IS_TEST" - | "exactInput" - | "exactInputSingle" - | "exactOutput" - | "exactOutputSingle" - | "failed" - | "quoteExactInput" - | "quoteExactInputSingle" - | "quoteExactOutput" - | "quoteExactOutputSingle" - | "rates" - | "setRate(address,address,uint24,uint256)" - | "setRate(address,address,uint256)" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "IS_TEST", values?: undefined): string; - encodeFunctionData( - functionFragment: "exactInput", - values: [ISwapRouter.ExactInputParamsStruct] - ): string; - encodeFunctionData( - functionFragment: "exactInputSingle", - values: [ISwapRouter.ExactInputSingleParamsStruct] - ): string; - encodeFunctionData( - functionFragment: "exactOutput", - values: [ISwapRouter.ExactOutputParamsStruct] - ): string; - encodeFunctionData( - functionFragment: "exactOutputSingle", - values: [ISwapRouter.ExactOutputSingleParamsStruct] - ): string; - encodeFunctionData(functionFragment: "failed", values?: undefined): string; - encodeFunctionData( - functionFragment: "quoteExactInput", - values: [BytesLike, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "quoteExactInputSingle", - values: [string, string, BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "quoteExactOutput", - values: [BytesLike, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "quoteExactOutputSingle", - values: [string, string, BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "rates", - values: [string, string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "setRate(address,address,uint24,uint256)", - values: [string, string, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "setRate(address,address,uint256)", - values: [string, string, BigNumberish] - ): string; - - decodeFunctionResult(functionFragment: "IS_TEST", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "exactInput", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "exactInputSingle", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "exactOutput", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "exactOutputSingle", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "failed", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "quoteExactInput", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "quoteExactInputSingle", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "quoteExactOutput", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "quoteExactOutputSingle", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "rates", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "setRate(address,address,uint24,uint256)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "setRate(address,address,uint256)", - data: BytesLike - ): Result; - - events: { - "log(string)": EventFragment; - "log_address(address)": EventFragment; - "log_bytes(bytes)": EventFragment; - "log_bytes32(bytes32)": EventFragment; - "log_int(int256)": EventFragment; - "log_named_address(string,address)": EventFragment; - "log_named_bytes(string,bytes)": EventFragment; - "log_named_bytes32(string,bytes32)": EventFragment; - "log_named_decimal_int(string,int256,uint256)": EventFragment; - "log_named_decimal_uint(string,uint256,uint256)": EventFragment; - "log_named_int(string,int256)": EventFragment; - "log_named_string(string,string)": EventFragment; - "log_named_uint(string,uint256)": EventFragment; - "log_string(string)": EventFragment; - "log_uint(uint256)": EventFragment; - "logs(bytes)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "log"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "logs"): EventFragment; -} - -export interface logEventObject { - arg0: string; -} -export type logEvent = TypedEvent<[string], logEventObject>; - -export type logEventFilter = TypedEventFilter; - -export interface log_addressEventObject { - arg0: string; -} -export type log_addressEvent = TypedEvent<[string], log_addressEventObject>; - -export type log_addressEventFilter = TypedEventFilter; - -export interface log_bytesEventObject { - arg0: string; -} -export type log_bytesEvent = TypedEvent<[string], log_bytesEventObject>; - -export type log_bytesEventFilter = TypedEventFilter; - -export interface log_bytes32EventObject { - arg0: string; -} -export type log_bytes32Event = TypedEvent<[string], log_bytes32EventObject>; - -export type log_bytes32EventFilter = TypedEventFilter; - -export interface log_intEventObject { - arg0: BigNumber; -} -export type log_intEvent = TypedEvent<[BigNumber], log_intEventObject>; - -export type log_intEventFilter = TypedEventFilter; - -export interface log_named_addressEventObject { - key: string; - val: string; -} -export type log_named_addressEvent = TypedEvent< - [string, string], - log_named_addressEventObject ->; - -export type log_named_addressEventFilter = - TypedEventFilter; - -export interface log_named_bytesEventObject { - key: string; - val: string; -} -export type log_named_bytesEvent = TypedEvent< - [string, string], - log_named_bytesEventObject ->; - -export type log_named_bytesEventFilter = TypedEventFilter; - -export interface log_named_bytes32EventObject { - key: string; - val: string; -} -export type log_named_bytes32Event = TypedEvent< - [string, string], - log_named_bytes32EventObject ->; - -export type log_named_bytes32EventFilter = - TypedEventFilter; - -export interface log_named_decimal_intEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_intEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_intEventObject ->; - -export type log_named_decimal_intEventFilter = - TypedEventFilter; - -export interface log_named_decimal_uintEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_uintEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_uintEventObject ->; - -export type log_named_decimal_uintEventFilter = - TypedEventFilter; - -export interface log_named_intEventObject { - key: string; - val: BigNumber; -} -export type log_named_intEvent = TypedEvent< - [string, BigNumber], - log_named_intEventObject ->; - -export type log_named_intEventFilter = TypedEventFilter; - -export interface log_named_stringEventObject { - key: string; - val: string; -} -export type log_named_stringEvent = TypedEvent< - [string, string], - log_named_stringEventObject ->; - -export type log_named_stringEventFilter = - TypedEventFilter; - -export interface log_named_uintEventObject { - key: string; - val: BigNumber; -} -export type log_named_uintEvent = TypedEvent< - [string, BigNumber], - log_named_uintEventObject ->; - -export type log_named_uintEventFilter = TypedEventFilter; - -export interface log_stringEventObject { - arg0: string; -} -export type log_stringEvent = TypedEvent<[string], log_stringEventObject>; - -export type log_stringEventFilter = TypedEventFilter; - -export interface log_uintEventObject { - arg0: BigNumber; -} -export type log_uintEvent = TypedEvent<[BigNumber], log_uintEventObject>; - -export type log_uintEventFilter = TypedEventFilter; - -export interface logsEventObject { - arg0: string; -} -export type logsEvent = TypedEvent<[string], logsEventObject>; - -export type logsEventFilter = TypedEventFilter; - -export interface UniswapV3Mock extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: UniswapV3MockInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - IS_TEST(overrides?: CallOverrides): Promise<[boolean]>; - - exactInput( - params: ISwapRouter.ExactInputParamsStruct, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - exactInputSingle( - params: ISwapRouter.ExactInputSingleParamsStruct, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - exactOutput( - params: ISwapRouter.ExactOutputParamsStruct, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - exactOutputSingle( - params: ISwapRouter.ExactOutputSingleParamsStruct, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quoteExactInput( - path: BytesLike, - amountIn: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber] & { amountOut: BigNumber }>; - - quoteExactInputSingle( - tokenIn: string, - tokenOut: string, - fee: BigNumberish, - amountIn: BigNumberish, - arg4: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber] & { amountOut: BigNumber }>; - - quoteExactOutput( - path: BytesLike, - amountOut: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber] & { amountIn: BigNumber }>; - - quoteExactOutputSingle( - tokenIn: string, - tokenOut: string, - fee: BigNumberish, - amountOut: BigNumberish, - arg4: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber] & { amountIn: BigNumber }>; - - rates( - arg0: string, - arg1: string, - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "setRate(address,address,uint24,uint256)"( - tokenFrom: string, - tokenTo: string, - fee: BigNumberish, - rate_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setRate(address,address,uint256)"( - tokenFrom: string, - tokenTo: string, - rate_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - IS_TEST(overrides?: CallOverrides): Promise; - - exactInput( - params: ISwapRouter.ExactInputParamsStruct, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - exactInputSingle( - params: ISwapRouter.ExactInputSingleParamsStruct, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - exactOutput( - params: ISwapRouter.ExactOutputParamsStruct, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - exactOutputSingle( - params: ISwapRouter.ExactOutputSingleParamsStruct, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quoteExactInput( - path: BytesLike, - amountIn: BigNumberish, - overrides?: CallOverrides - ): Promise; - - quoteExactInputSingle( - tokenIn: string, - tokenOut: string, - fee: BigNumberish, - amountIn: BigNumberish, - arg4: BigNumberish, - overrides?: CallOverrides - ): Promise; - - quoteExactOutput( - path: BytesLike, - amountOut: BigNumberish, - overrides?: CallOverrides - ): Promise; - - quoteExactOutputSingle( - tokenIn: string, - tokenOut: string, - fee: BigNumberish, - amountOut: BigNumberish, - arg4: BigNumberish, - overrides?: CallOverrides - ): Promise; - - rates( - arg0: string, - arg1: string, - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "setRate(address,address,uint24,uint256)"( - tokenFrom: string, - tokenTo: string, - fee: BigNumberish, - rate_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setRate(address,address,uint256)"( - tokenFrom: string, - tokenTo: string, - rate_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - IS_TEST(overrides?: CallOverrides): Promise; - - exactInput( - params: ISwapRouter.ExactInputParamsStruct, - overrides?: CallOverrides - ): Promise; - - exactInputSingle( - params: ISwapRouter.ExactInputSingleParamsStruct, - overrides?: CallOverrides - ): Promise; - - exactOutput( - params: ISwapRouter.ExactOutputParamsStruct, - overrides?: CallOverrides - ): Promise; - - exactOutputSingle( - params: ISwapRouter.ExactOutputSingleParamsStruct, - overrides?: CallOverrides - ): Promise; - - failed(overrides?: CallOverrides): Promise; - - quoteExactInput( - path: BytesLike, - amountIn: BigNumberish, - overrides?: CallOverrides - ): Promise; - - quoteExactInputSingle( - tokenIn: string, - tokenOut: string, - fee: BigNumberish, - amountIn: BigNumberish, - arg4: BigNumberish, - overrides?: CallOverrides - ): Promise; - - quoteExactOutput( - path: BytesLike, - amountOut: BigNumberish, - overrides?: CallOverrides - ): Promise; - - quoteExactOutputSingle( - tokenIn: string, - tokenOut: string, - fee: BigNumberish, - amountOut: BigNumberish, - arg4: BigNumberish, - overrides?: CallOverrides - ): Promise; - - rates( - arg0: string, - arg1: string, - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "setRate(address,address,uint24,uint256)"( - tokenFrom: string, - tokenTo: string, - fee: BigNumberish, - rate_RAY: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "setRate(address,address,uint256)"( - tokenFrom: string, - tokenTo: string, - rate_RAY: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - "log(string)"(arg0?: null): logEventFilter; - log(arg0?: null): logEventFilter; - - "log_address(address)"(arg0?: null): log_addressEventFilter; - log_address(arg0?: null): log_addressEventFilter; - - "log_bytes(bytes)"(arg0?: null): log_bytesEventFilter; - log_bytes(arg0?: null): log_bytesEventFilter; - - "log_bytes32(bytes32)"(arg0?: null): log_bytes32EventFilter; - log_bytes32(arg0?: null): log_bytes32EventFilter; - - "log_int(int256)"(arg0?: null): log_intEventFilter; - log_int(arg0?: null): log_intEventFilter; - - "log_named_address(string,address)"( - key?: null, - val?: null - ): log_named_addressEventFilter; - log_named_address(key?: null, val?: null): log_named_addressEventFilter; - - "log_named_bytes(string,bytes)"( - key?: null, - val?: null - ): log_named_bytesEventFilter; - log_named_bytes(key?: null, val?: null): log_named_bytesEventFilter; - - "log_named_bytes32(string,bytes32)"( - key?: null, - val?: null - ): log_named_bytes32EventFilter; - log_named_bytes32(key?: null, val?: null): log_named_bytes32EventFilter; - - "log_named_decimal_int(string,int256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - log_named_decimal_int( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - - "log_named_decimal_uint(string,uint256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - log_named_decimal_uint( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - - "log_named_int(string,int256)"( - key?: null, - val?: null - ): log_named_intEventFilter; - log_named_int(key?: null, val?: null): log_named_intEventFilter; - - "log_named_string(string,string)"( - key?: null, - val?: null - ): log_named_stringEventFilter; - log_named_string(key?: null, val?: null): log_named_stringEventFilter; - - "log_named_uint(string,uint256)"( - key?: null, - val?: null - ): log_named_uintEventFilter; - log_named_uint(key?: null, val?: null): log_named_uintEventFilter; - - "log_string(string)"(arg0?: null): log_stringEventFilter; - log_string(arg0?: null): log_stringEventFilter; - - "log_uint(uint256)"(arg0?: null): log_uintEventFilter; - log_uint(arg0?: null): log_uintEventFilter; - - "logs(bytes)"(arg0?: null): logsEventFilter; - logs(arg0?: null): logsEventFilter; - }; - - estimateGas: { - IS_TEST(overrides?: CallOverrides): Promise; - - exactInput( - params: ISwapRouter.ExactInputParamsStruct, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - exactInputSingle( - params: ISwapRouter.ExactInputSingleParamsStruct, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - exactOutput( - params: ISwapRouter.ExactOutputParamsStruct, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - exactOutputSingle( - params: ISwapRouter.ExactOutputSingleParamsStruct, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quoteExactInput( - path: BytesLike, - amountIn: BigNumberish, - overrides?: CallOverrides - ): Promise; - - quoteExactInputSingle( - tokenIn: string, - tokenOut: string, - fee: BigNumberish, - amountIn: BigNumberish, - arg4: BigNumberish, - overrides?: CallOverrides - ): Promise; - - quoteExactOutput( - path: BytesLike, - amountOut: BigNumberish, - overrides?: CallOverrides - ): Promise; - - quoteExactOutputSingle( - tokenIn: string, - tokenOut: string, - fee: BigNumberish, - amountOut: BigNumberish, - arg4: BigNumberish, - overrides?: CallOverrides - ): Promise; - - rates( - arg0: string, - arg1: string, - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "setRate(address,address,uint24,uint256)"( - tokenFrom: string, - tokenTo: string, - fee: BigNumberish, - rate_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setRate(address,address,uint256)"( - tokenFrom: string, - tokenTo: string, - rate_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - IS_TEST(overrides?: CallOverrides): Promise; - - exactInput( - params: ISwapRouter.ExactInputParamsStruct, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - exactInputSingle( - params: ISwapRouter.ExactInputSingleParamsStruct, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - exactOutput( - params: ISwapRouter.ExactOutputParamsStruct, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - exactOutputSingle( - params: ISwapRouter.ExactOutputSingleParamsStruct, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quoteExactInput( - path: BytesLike, - amountIn: BigNumberish, - overrides?: CallOverrides - ): Promise; - - quoteExactInputSingle( - tokenIn: string, - tokenOut: string, - fee: BigNumberish, - amountIn: BigNumberish, - arg4: BigNumberish, - overrides?: CallOverrides - ): Promise; - - quoteExactOutput( - path: BytesLike, - amountOut: BigNumberish, - overrides?: CallOverrides - ): Promise; - - quoteExactOutputSingle( - tokenIn: string, - tokenOut: string, - fee: BigNumberish, - amountOut: BigNumberish, - arg4: BigNumberish, - overrides?: CallOverrides - ): Promise; - - rates( - arg0: string, - arg1: string, - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "setRate(address,address,uint24,uint256)"( - tokenFrom: string, - tokenTo: string, - fee: BigNumberish, - rate_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setRate(address,address,uint256)"( - tokenFrom: string, - tokenTo: string, - rate_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/src/types/contracts/test/mocks/integrations/YearnV2Mock.ts b/src/types/contracts/test/mocks/integrations/YearnV2Mock.ts deleted file mode 100644 index a1c0c709..00000000 --- a/src/types/contracts/test/mocks/integrations/YearnV2Mock.ts +++ /dev/null @@ -1,898 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface YearnV2MockInterface extends utils.Interface { - functions: { - "addUpdater(address)": FunctionFragment; - "allowance(address,address)": FunctionFragment; - "approve(address,uint256)": FunctionFragment; - "balanceOf(address)": FunctionFragment; - "decimals()": FunctionFragment; - "decreaseAllowance(address,uint256)": FunctionFragment; - "deposit(uint256,address)": FunctionFragment; - "deposit(uint256)": FunctionFragment; - "deposit()": FunctionFragment; - "increaseAllowance(address,uint256)": FunctionFragment; - "name()": FunctionFragment; - "owner()": FunctionFragment; - "pricePerShare()": FunctionFragment; - "renounceOwnership()": FunctionFragment; - "setPricePerShare(uint256)": FunctionFragment; - "symbol()": FunctionFragment; - "token()": FunctionFragment; - "totalSupply()": FunctionFragment; - "transfer(address,uint256)": FunctionFragment; - "transferFrom(address,address,uint256)": FunctionFragment; - "transferOwnership(address)": FunctionFragment; - "updaters(address)": FunctionFragment; - "withdraw(uint256,address)": FunctionFragment; - "withdraw(uint256)": FunctionFragment; - "withdraw()": FunctionFragment; - "withdraw(uint256,address,uint256)": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "addUpdater" - | "allowance" - | "approve" - | "balanceOf" - | "decimals" - | "decreaseAllowance" - | "deposit(uint256,address)" - | "deposit(uint256)" - | "deposit()" - | "increaseAllowance" - | "name" - | "owner" - | "pricePerShare" - | "renounceOwnership" - | "setPricePerShare" - | "symbol" - | "token" - | "totalSupply" - | "transfer" - | "transferFrom" - | "transferOwnership" - | "updaters" - | "withdraw(uint256,address)" - | "withdraw(uint256)" - | "withdraw()" - | "withdraw(uint256,address,uint256)" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "addUpdater", values: [string]): string; - encodeFunctionData( - functionFragment: "allowance", - values: [string, string] - ): string; - encodeFunctionData( - functionFragment: "approve", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "balanceOf", values: [string]): string; - encodeFunctionData(functionFragment: "decimals", values?: undefined): string; - encodeFunctionData( - functionFragment: "decreaseAllowance", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "deposit(uint256,address)", - values: [BigNumberish, string] - ): string; - encodeFunctionData( - functionFragment: "deposit(uint256)", - values: [BigNumberish] - ): string; - encodeFunctionData(functionFragment: "deposit()", values?: undefined): string; - encodeFunctionData( - functionFragment: "increaseAllowance", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "name", values?: undefined): string; - encodeFunctionData(functionFragment: "owner", values?: undefined): string; - encodeFunctionData( - functionFragment: "pricePerShare", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "renounceOwnership", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "setPricePerShare", - values: [BigNumberish] - ): string; - encodeFunctionData(functionFragment: "symbol", values?: undefined): string; - encodeFunctionData(functionFragment: "token", values?: undefined): string; - encodeFunctionData( - functionFragment: "totalSupply", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "transfer", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "transferFrom", - values: [string, string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "transferOwnership", - values: [string] - ): string; - encodeFunctionData(functionFragment: "updaters", values: [string]): string; - encodeFunctionData( - functionFragment: "withdraw(uint256,address)", - values: [BigNumberish, string] - ): string; - encodeFunctionData( - functionFragment: "withdraw(uint256)", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "withdraw()", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "withdraw(uint256,address,uint256)", - values: [BigNumberish, string, BigNumberish] - ): string; - - decodeFunctionResult(functionFragment: "addUpdater", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "decreaseAllowance", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "deposit(uint256,address)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "deposit(uint256)", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "deposit()", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "increaseAllowance", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "pricePerShare", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "renounceOwnership", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "setPricePerShare", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "token", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "totalSupply", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "transfer", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "transferFrom", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "transferOwnership", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "updaters", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "withdraw(uint256,address)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "withdraw(uint256)", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "withdraw()", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "withdraw(uint256,address,uint256)", - data: BytesLike - ): Result; - - events: { - "Approval(address,address,uint256)": EventFragment; - "OwnershipTransferred(address,address)": EventFragment; - "Transfer(address,address,uint256)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "Approval"): EventFragment; - getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment; -} - -export interface ApprovalEventObject { - owner: string; - spender: string; - value: BigNumber; -} -export type ApprovalEvent = TypedEvent< - [string, string, BigNumber], - ApprovalEventObject ->; - -export type ApprovalEventFilter = TypedEventFilter; - -export interface OwnershipTransferredEventObject { - previousOwner: string; - newOwner: string; -} -export type OwnershipTransferredEvent = TypedEvent< - [string, string], - OwnershipTransferredEventObject ->; - -export type OwnershipTransferredEventFilter = - TypedEventFilter; - -export interface TransferEventObject { - from: string; - to: string; - value: BigNumber; -} -export type TransferEvent = TypedEvent< - [string, string, BigNumber], - TransferEventObject ->; - -export type TransferEventFilter = TypedEventFilter; - -export interface YearnV2Mock extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: YearnV2MockInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - addUpdater( - updater: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - approve( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise<[BigNumber]>; - - decimals(overrides?: CallOverrides): Promise<[number]>; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "deposit(uint256,address)"( - _amount: BigNumberish, - recipient: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "deposit(uint256)"( - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "deposit()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise<[string]>; - - owner(overrides?: CallOverrides): Promise<[string]>; - - pricePerShare(overrides?: CallOverrides): Promise<[BigNumber]>; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setPricePerShare( - newPrice: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise<[string]>; - - token(overrides?: CallOverrides): Promise<[string]>; - - totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - updaters(arg0: string, overrides?: CallOverrides): Promise<[boolean]>; - - "withdraw(uint256,address)"( - maxShares: BigNumberish, - recipient: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "withdraw(uint256)"( - maxShares: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "withdraw()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "withdraw(uint256,address,uint256)"( - maxShares: BigNumberish, - arg1: string, - maxLoss: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - addUpdater( - updater: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "deposit(uint256,address)"( - _amount: BigNumberish, - recipient: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "deposit(uint256)"( - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "deposit()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - pricePerShare(overrides?: CallOverrides): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setPricePerShare( - newPrice: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - token(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - updaters(arg0: string, overrides?: CallOverrides): Promise; - - "withdraw(uint256,address)"( - maxShares: BigNumberish, - recipient: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "withdraw(uint256)"( - maxShares: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "withdraw()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "withdraw(uint256,address,uint256)"( - maxShares: BigNumberish, - arg1: string, - maxLoss: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - addUpdater(updater: string, overrides?: CallOverrides): Promise; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "deposit(uint256,address)"( - _amount: BigNumberish, - recipient: string, - overrides?: CallOverrides - ): Promise; - - "deposit(uint256)"( - _amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "deposit()"(overrides?: CallOverrides): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - pricePerShare(overrides?: CallOverrides): Promise; - - renounceOwnership(overrides?: CallOverrides): Promise; - - setPricePerShare( - newPrice: BigNumberish, - overrides?: CallOverrides - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - token(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: CallOverrides - ): Promise; - - updaters(arg0: string, overrides?: CallOverrides): Promise; - - "withdraw(uint256,address)"( - maxShares: BigNumberish, - recipient: string, - overrides?: CallOverrides - ): Promise; - - "withdraw(uint256)"( - maxShares: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "withdraw()"(overrides?: CallOverrides): Promise; - - "withdraw(uint256,address,uint256)"( - maxShares: BigNumberish, - arg1: string, - maxLoss: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - "Approval(address,address,uint256)"( - owner?: string | null, - spender?: string | null, - value?: null - ): ApprovalEventFilter; - Approval( - owner?: string | null, - spender?: string | null, - value?: null - ): ApprovalEventFilter; - - "OwnershipTransferred(address,address)"( - previousOwner?: string | null, - newOwner?: string | null - ): OwnershipTransferredEventFilter; - OwnershipTransferred( - previousOwner?: string | null, - newOwner?: string | null - ): OwnershipTransferredEventFilter; - - "Transfer(address,address,uint256)"( - from?: string | null, - to?: string | null, - value?: null - ): TransferEventFilter; - Transfer( - from?: string | null, - to?: string | null, - value?: null - ): TransferEventFilter; - }; - - estimateGas: { - addUpdater( - updater: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "deposit(uint256,address)"( - _amount: BigNumberish, - recipient: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "deposit(uint256)"( - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "deposit()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - pricePerShare(overrides?: CallOverrides): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setPricePerShare( - newPrice: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - token(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - updaters(arg0: string, overrides?: CallOverrides): Promise; - - "withdraw(uint256,address)"( - maxShares: BigNumberish, - recipient: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "withdraw(uint256)"( - maxShares: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "withdraw()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "withdraw(uint256,address,uint256)"( - maxShares: BigNumberish, - arg1: string, - maxLoss: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - addUpdater( - updater: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf( - account: string, - overrides?: CallOverrides - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "deposit(uint256,address)"( - _amount: BigNumberish, - recipient: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "deposit(uint256)"( - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "deposit()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - pricePerShare(overrides?: CallOverrides): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setPricePerShare( - newPrice: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - token(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - updaters( - arg0: string, - overrides?: CallOverrides - ): Promise; - - "withdraw(uint256,address)"( - maxShares: BigNumberish, - recipient: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "withdraw(uint256)"( - maxShares: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "withdraw()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "withdraw(uint256,address,uint256)"( - maxShares: BigNumberish, - arg1: string, - maxLoss: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/src/types/contracts/test/mocks/integrations/index.ts b/src/types/contracts/test/mocks/integrations/index.ts index 16f1683b..6b6eee24 100644 --- a/src/types/contracts/test/mocks/integrations/index.ts +++ b/src/types/contracts/test/mocks/integrations/index.ts @@ -1,24 +1,7 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ -import type * as convexBaseRewardPoolMockSol from "./ConvexBaseRewardPoolMock.sol"; -export type { convexBaseRewardPoolMockSol }; -import type * as convexBoosterMockSol from "./ConvexBoosterMock.sol"; -export type { convexBoosterMockSol }; import type * as convexClaimZapMockSol from "./ConvexClaimZapMock.sol"; export type { convexClaimZapMockSol }; -import type * as convexExtraRewardPoolMockSol from "./ConvexExtraRewardPoolMock.sol"; -export type { convexExtraRewardPoolMockSol }; -import type * as convexTokenRewardContractMockSol from "./ConvexTokenRewardContractMock.sol"; -export type { convexTokenRewardContractMockSol }; import type * as lidoMockSol from "./LidoMock.sol"; export type { lidoMockSol }; -export type { CurveV1MetapoolMock } from "./CurveV1MetapoolMock"; -export type { CurveV1Mock } from "./CurveV1Mock"; -export type { CurveV1Mock_2Assets } from "./CurveV1Mock_2Assets"; -export type { CurveV1Mock_3Assets } from "./CurveV1Mock_3Assets"; -export type { CurveV1Mock_4Assets } from "./CurveV1Mock_4Assets"; -export type { CurveV1StETHMock } from "./CurveV1StETHMock"; -export type { UniswapV2Mock } from "./UniswapV2Mock"; -export type { UniswapV3Mock } from "./UniswapV3Mock"; -export type { YearnV2Mock } from "./YearnV2Mock"; diff --git a/src/types/contracts/test/mocks/libraries/PercentageMathTest.ts b/src/types/contracts/test/mocks/libraries/PercentageMathTest.ts deleted file mode 100644 index fe58cadb..00000000 --- a/src/types/contracts/test/mocks/libraries/PercentageMathTest.ts +++ /dev/null @@ -1,143 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface PercentageMathTestInterface extends utils.Interface { - functions: { - "percentDiv(uint256,uint256)": FunctionFragment; - "percentMul(uint256,uint256)": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: "percentDiv" | "percentMul" - ): FunctionFragment; - - encodeFunctionData( - functionFragment: "percentDiv", - values: [BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "percentMul", - values: [BigNumberish, BigNumberish] - ): string; - - decodeFunctionResult(functionFragment: "percentDiv", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "percentMul", data: BytesLike): Result; - - events: {}; -} - -export interface PercentageMathTest extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: PercentageMathTestInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - percentDiv( - value: BigNumberish, - percentage: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - percentMul( - value: BigNumberish, - percentage: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - }; - - percentDiv( - value: BigNumberish, - percentage: BigNumberish, - overrides?: CallOverrides - ): Promise; - - percentMul( - value: BigNumberish, - percentage: BigNumberish, - overrides?: CallOverrides - ): Promise; - - callStatic: { - percentDiv( - value: BigNumberish, - percentage: BigNumberish, - overrides?: CallOverrides - ): Promise; - - percentMul( - value: BigNumberish, - percentage: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - filters: {}; - - estimateGas: { - percentDiv( - value: BigNumberish, - percentage: BigNumberish, - overrides?: CallOverrides - ): Promise; - - percentMul( - value: BigNumberish, - percentage: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - populateTransaction: { - percentDiv( - value: BigNumberish, - percentage: BigNumberish, - overrides?: CallOverrides - ): Promise; - - percentMul( - value: BigNumberish, - percentage: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; -} diff --git a/src/types/contracts/test/mocks/libraries/WadRayMathTest.ts b/src/types/contracts/test/mocks/libraries/WadRayMathTest.ts deleted file mode 100644 index ab53024a..00000000 --- a/src/types/contracts/test/mocks/libraries/WadRayMathTest.ts +++ /dev/null @@ -1,315 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface WadRayMathTestInterface extends utils.Interface { - functions: { - "halfRay()": FunctionFragment; - "halfWad()": FunctionFragment; - "ray()": FunctionFragment; - "rayDiv(uint256,uint256)": FunctionFragment; - "rayMul(uint256,uint256)": FunctionFragment; - "rayToWad(uint256)": FunctionFragment; - "wad()": FunctionFragment; - "wadDiv(uint256,uint256)": FunctionFragment; - "wadMul(uint256,uint256)": FunctionFragment; - "wadToRay(uint256)": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "halfRay" - | "halfWad" - | "ray" - | "rayDiv" - | "rayMul" - | "rayToWad" - | "wad" - | "wadDiv" - | "wadMul" - | "wadToRay" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "halfRay", values?: undefined): string; - encodeFunctionData(functionFragment: "halfWad", values?: undefined): string; - encodeFunctionData(functionFragment: "ray", values?: undefined): string; - encodeFunctionData( - functionFragment: "rayDiv", - values: [BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "rayMul", - values: [BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "rayToWad", - values: [BigNumberish] - ): string; - encodeFunctionData(functionFragment: "wad", values?: undefined): string; - encodeFunctionData( - functionFragment: "wadDiv", - values: [BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "wadMul", - values: [BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "wadToRay", - values: [BigNumberish] - ): string; - - decodeFunctionResult(functionFragment: "halfRay", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "halfWad", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "ray", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "rayDiv", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "rayMul", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "rayToWad", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "wad", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "wadDiv", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "wadMul", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "wadToRay", data: BytesLike): Result; - - events: {}; -} - -export interface WadRayMathTest extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: WadRayMathTestInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - halfRay(overrides?: CallOverrides): Promise<[BigNumber]>; - - halfWad(overrides?: CallOverrides): Promise<[BigNumber]>; - - ray(overrides?: CallOverrides): Promise<[BigNumber]>; - - rayDiv( - a: BigNumberish, - b: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - rayMul( - a: BigNumberish, - b: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - rayToWad(a: BigNumberish, overrides?: CallOverrides): Promise<[BigNumber]>; - - wad(overrides?: CallOverrides): Promise<[BigNumber]>; - - wadDiv( - a: BigNumberish, - b: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - wadMul( - a: BigNumberish, - b: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - wadToRay(a: BigNumberish, overrides?: CallOverrides): Promise<[BigNumber]>; - }; - - halfRay(overrides?: CallOverrides): Promise; - - halfWad(overrides?: CallOverrides): Promise; - - ray(overrides?: CallOverrides): Promise; - - rayDiv( - a: BigNumberish, - b: BigNumberish, - overrides?: CallOverrides - ): Promise; - - rayMul( - a: BigNumberish, - b: BigNumberish, - overrides?: CallOverrides - ): Promise; - - rayToWad(a: BigNumberish, overrides?: CallOverrides): Promise; - - wad(overrides?: CallOverrides): Promise; - - wadDiv( - a: BigNumberish, - b: BigNumberish, - overrides?: CallOverrides - ): Promise; - - wadMul( - a: BigNumberish, - b: BigNumberish, - overrides?: CallOverrides - ): Promise; - - wadToRay(a: BigNumberish, overrides?: CallOverrides): Promise; - - callStatic: { - halfRay(overrides?: CallOverrides): Promise; - - halfWad(overrides?: CallOverrides): Promise; - - ray(overrides?: CallOverrides): Promise; - - rayDiv( - a: BigNumberish, - b: BigNumberish, - overrides?: CallOverrides - ): Promise; - - rayMul( - a: BigNumberish, - b: BigNumberish, - overrides?: CallOverrides - ): Promise; - - rayToWad(a: BigNumberish, overrides?: CallOverrides): Promise; - - wad(overrides?: CallOverrides): Promise; - - wadDiv( - a: BigNumberish, - b: BigNumberish, - overrides?: CallOverrides - ): Promise; - - wadMul( - a: BigNumberish, - b: BigNumberish, - overrides?: CallOverrides - ): Promise; - - wadToRay(a: BigNumberish, overrides?: CallOverrides): Promise; - }; - - filters: {}; - - estimateGas: { - halfRay(overrides?: CallOverrides): Promise; - - halfWad(overrides?: CallOverrides): Promise; - - ray(overrides?: CallOverrides): Promise; - - rayDiv( - a: BigNumberish, - b: BigNumberish, - overrides?: CallOverrides - ): Promise; - - rayMul( - a: BigNumberish, - b: BigNumberish, - overrides?: CallOverrides - ): Promise; - - rayToWad(a: BigNumberish, overrides?: CallOverrides): Promise; - - wad(overrides?: CallOverrides): Promise; - - wadDiv( - a: BigNumberish, - b: BigNumberish, - overrides?: CallOverrides - ): Promise; - - wadMul( - a: BigNumberish, - b: BigNumberish, - overrides?: CallOverrides - ): Promise; - - wadToRay(a: BigNumberish, overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - halfRay(overrides?: CallOverrides): Promise; - - halfWad(overrides?: CallOverrides): Promise; - - ray(overrides?: CallOverrides): Promise; - - rayDiv( - a: BigNumberish, - b: BigNumberish, - overrides?: CallOverrides - ): Promise; - - rayMul( - a: BigNumberish, - b: BigNumberish, - overrides?: CallOverrides - ): Promise; - - rayToWad( - a: BigNumberish, - overrides?: CallOverrides - ): Promise; - - wad(overrides?: CallOverrides): Promise; - - wadDiv( - a: BigNumberish, - b: BigNumberish, - overrides?: CallOverrides - ): Promise; - - wadMul( - a: BigNumberish, - b: BigNumberish, - overrides?: CallOverrides - ): Promise; - - wadToRay( - a: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; -} diff --git a/src/types/contracts/test/mocks/libraries/index.ts b/src/types/contracts/test/mocks/libraries/index.ts deleted file mode 100644 index 712de503..00000000 --- a/src/types/contracts/test/mocks/libraries/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { PercentageMathTest } from "./PercentageMathTest"; -export type { WadRayMathTest } from "./WadRayMathTest"; diff --git a/src/types/contracts/test/mocks/oracles/LPPriceFeedMock.ts b/src/types/contracts/test/mocks/oracles/LPPriceFeedMock.ts deleted file mode 100644 index 9b1f3766..00000000 --- a/src/types/contracts/test/mocks/oracles/LPPriceFeedMock.ts +++ /dev/null @@ -1,486 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface LPPriceFeedMockInterface extends utils.Interface { - functions: { - "_acl()": FunctionFragment; - "checkAndUpperBoundValue(uint256)": FunctionFragment; - "decimals()": FunctionFragment; - "delta()": FunctionFragment; - "description()": FunctionFragment; - "getRoundData(uint80)": FunctionFragment; - "latestRoundData()": FunctionFragment; - "lowerBound()": FunctionFragment; - "pause()": FunctionFragment; - "paused()": FunctionFragment; - "priceFeedType()": FunctionFragment; - "setLimiter(uint256)": FunctionFragment; - "skipPriceCheck()": FunctionFragment; - "unpause()": FunctionFragment; - "upperBound()": FunctionFragment; - "version()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "_acl" - | "checkAndUpperBoundValue" - | "decimals" - | "delta" - | "description" - | "getRoundData" - | "latestRoundData" - | "lowerBound" - | "pause" - | "paused" - | "priceFeedType" - | "setLimiter" - | "skipPriceCheck" - | "unpause" - | "upperBound" - | "version" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "_acl", values?: undefined): string; - encodeFunctionData( - functionFragment: "checkAndUpperBoundValue", - values: [BigNumberish] - ): string; - encodeFunctionData(functionFragment: "decimals", values?: undefined): string; - encodeFunctionData(functionFragment: "delta", values?: undefined): string; - encodeFunctionData( - functionFragment: "description", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "getRoundData", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "latestRoundData", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "lowerBound", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "pause", values?: undefined): string; - encodeFunctionData(functionFragment: "paused", values?: undefined): string; - encodeFunctionData( - functionFragment: "priceFeedType", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "setLimiter", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "skipPriceCheck", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "unpause", values?: undefined): string; - encodeFunctionData( - functionFragment: "upperBound", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "version", values?: undefined): string; - - decodeFunctionResult(functionFragment: "_acl", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "checkAndUpperBoundValue", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "delta", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "description", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getRoundData", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "latestRoundData", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "lowerBound", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "pause", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "paused", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "priceFeedType", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "setLimiter", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "skipPriceCheck", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "unpause", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "upperBound", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "version", data: BytesLike): Result; - - events: { - "NewLimiterParams(uint256,uint256)": EventFragment; - "Paused(address)": EventFragment; - "Unpaused(address)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "NewLimiterParams"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Paused"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Unpaused"): EventFragment; -} - -export interface NewLimiterParamsEventObject { - lowerBound: BigNumber; - upperBound: BigNumber; -} -export type NewLimiterParamsEvent = TypedEvent< - [BigNumber, BigNumber], - NewLimiterParamsEventObject ->; - -export type NewLimiterParamsEventFilter = - TypedEventFilter; - -export interface PausedEventObject { - account: string; -} -export type PausedEvent = TypedEvent<[string], PausedEventObject>; - -export type PausedEventFilter = TypedEventFilter; - -export interface UnpausedEventObject { - account: string; -} -export type UnpausedEvent = TypedEvent<[string], UnpausedEventObject>; - -export type UnpausedEventFilter = TypedEventFilter; - -export interface LPPriceFeedMock extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: LPPriceFeedMockInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - _acl(overrides?: CallOverrides): Promise<[string]>; - - checkAndUpperBoundValue( - value: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - decimals(overrides?: CallOverrides): Promise<[number]>; - - delta(overrides?: CallOverrides): Promise<[BigNumber]>; - - description(overrides?: CallOverrides): Promise<[string]>; - - getRoundData( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber, BigNumber, BigNumber, BigNumber]>; - - latestRoundData( - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber, BigNumber, BigNumber, BigNumber] & { - roundId: BigNumber; - answer: BigNumber; - startedAt: BigNumber; - updatedAt: BigNumber; - answeredInRound: BigNumber; - } - >; - - lowerBound(overrides?: CallOverrides): Promise<[BigNumber]>; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise<[boolean]>; - - priceFeedType(overrides?: CallOverrides): Promise<[number]>; - - setLimiter( - _lowerBound: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - skipPriceCheck(overrides?: CallOverrides): Promise<[boolean]>; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upperBound(overrides?: CallOverrides): Promise<[BigNumber]>; - - version(overrides?: CallOverrides): Promise<[BigNumber]>; - }; - - _acl(overrides?: CallOverrides): Promise; - - checkAndUpperBoundValue( - value: BigNumberish, - overrides?: CallOverrides - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - delta(overrides?: CallOverrides): Promise; - - description(overrides?: CallOverrides): Promise; - - getRoundData( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber, BigNumber, BigNumber, BigNumber]>; - - latestRoundData( - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber, BigNumber, BigNumber, BigNumber] & { - roundId: BigNumber; - answer: BigNumber; - startedAt: BigNumber; - updatedAt: BigNumber; - answeredInRound: BigNumber; - } - >; - - lowerBound(overrides?: CallOverrides): Promise; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise; - - priceFeedType(overrides?: CallOverrides): Promise; - - setLimiter( - _lowerBound: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - skipPriceCheck(overrides?: CallOverrides): Promise; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upperBound(overrides?: CallOverrides): Promise; - - version(overrides?: CallOverrides): Promise; - - callStatic: { - _acl(overrides?: CallOverrides): Promise; - - checkAndUpperBoundValue( - value: BigNumberish, - overrides?: CallOverrides - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - delta(overrides?: CallOverrides): Promise; - - description(overrides?: CallOverrides): Promise; - - getRoundData( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber, BigNumber, BigNumber, BigNumber]>; - - latestRoundData( - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber, BigNumber, BigNumber, BigNumber] & { - roundId: BigNumber; - answer: BigNumber; - startedAt: BigNumber; - updatedAt: BigNumber; - answeredInRound: BigNumber; - } - >; - - lowerBound(overrides?: CallOverrides): Promise; - - pause(overrides?: CallOverrides): Promise; - - paused(overrides?: CallOverrides): Promise; - - priceFeedType(overrides?: CallOverrides): Promise; - - setLimiter( - _lowerBound: BigNumberish, - overrides?: CallOverrides - ): Promise; - - skipPriceCheck(overrides?: CallOverrides): Promise; - - unpause(overrides?: CallOverrides): Promise; - - upperBound(overrides?: CallOverrides): Promise; - - version(overrides?: CallOverrides): Promise; - }; - - filters: { - "NewLimiterParams(uint256,uint256)"( - lowerBound?: null, - upperBound?: null - ): NewLimiterParamsEventFilter; - NewLimiterParams( - lowerBound?: null, - upperBound?: null - ): NewLimiterParamsEventFilter; - - "Paused(address)"(account?: null): PausedEventFilter; - Paused(account?: null): PausedEventFilter; - - "Unpaused(address)"(account?: null): UnpausedEventFilter; - Unpaused(account?: null): UnpausedEventFilter; - }; - - estimateGas: { - _acl(overrides?: CallOverrides): Promise; - - checkAndUpperBoundValue( - value: BigNumberish, - overrides?: CallOverrides - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - delta(overrides?: CallOverrides): Promise; - - description(overrides?: CallOverrides): Promise; - - getRoundData( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - latestRoundData(overrides?: CallOverrides): Promise; - - lowerBound(overrides?: CallOverrides): Promise; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise; - - priceFeedType(overrides?: CallOverrides): Promise; - - setLimiter( - _lowerBound: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - skipPriceCheck(overrides?: CallOverrides): Promise; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upperBound(overrides?: CallOverrides): Promise; - - version(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - _acl(overrides?: CallOverrides): Promise; - - checkAndUpperBoundValue( - value: BigNumberish, - overrides?: CallOverrides - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - delta(overrides?: CallOverrides): Promise; - - description(overrides?: CallOverrides): Promise; - - getRoundData( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - latestRoundData(overrides?: CallOverrides): Promise; - - lowerBound(overrides?: CallOverrides): Promise; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise; - - priceFeedType(overrides?: CallOverrides): Promise; - - setLimiter( - _lowerBound: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - skipPriceCheck(overrides?: CallOverrides): Promise; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upperBound(overrides?: CallOverrides): Promise; - - version(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/test/mocks/oracles/PriceFeedMock.ts b/src/types/contracts/test/mocks/oracles/PriceFeedMock.ts deleted file mode 100644 index b05e65d7..00000000 --- a/src/types/contracts/test/mocks/oracles/PriceFeedMock.ts +++ /dev/null @@ -1,368 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface PriceFeedMockInterface extends utils.Interface { - functions: { - "decimals()": FunctionFragment; - "description()": FunctionFragment; - "getRoundData(uint80)": FunctionFragment; - "latestRoundData()": FunctionFragment; - "priceFeedType()": FunctionFragment; - "setParams(uint80,uint256,uint256,uint80)": FunctionFragment; - "setPrice(int256)": FunctionFragment; - "setRevertOnLatestRound(bool)": FunctionFragment; - "setSkipPriceCheck(uint8)": FunctionFragment; - "skipPriceCheck()": FunctionFragment; - "version()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "decimals" - | "description" - | "getRoundData" - | "latestRoundData" - | "priceFeedType" - | "setParams" - | "setPrice" - | "setRevertOnLatestRound" - | "setSkipPriceCheck" - | "skipPriceCheck" - | "version" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "decimals", values?: undefined): string; - encodeFunctionData( - functionFragment: "description", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "getRoundData", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "latestRoundData", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "priceFeedType", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "setParams", - values: [BigNumberish, BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "setPrice", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "setRevertOnLatestRound", - values: [boolean] - ): string; - encodeFunctionData( - functionFragment: "setSkipPriceCheck", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "skipPriceCheck", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "version", values?: undefined): string; - - decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "description", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getRoundData", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "latestRoundData", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "priceFeedType", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "setParams", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "setPrice", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "setRevertOnLatestRound", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "setSkipPriceCheck", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "skipPriceCheck", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "version", data: BytesLike): Result; - - events: {}; -} - -export interface PriceFeedMock extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: PriceFeedMockInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - decimals(overrides?: CallOverrides): Promise<[number]>; - - description(overrides?: CallOverrides): Promise<[string]>; - - getRoundData( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber, BigNumber, BigNumber, BigNumber]>; - - latestRoundData( - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber, BigNumber, BigNumber, BigNumber]>; - - priceFeedType(overrides?: CallOverrides): Promise<[number]>; - - setParams( - _roundId: BigNumberish, - _startedAt: BigNumberish, - _updatedAt: BigNumberish, - _answerInRound: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setPrice( - newPrice: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setRevertOnLatestRound( - value: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setSkipPriceCheck( - f: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - skipPriceCheck(overrides?: CallOverrides): Promise<[boolean]>; - - version(overrides?: CallOverrides): Promise<[BigNumber]>; - }; - - decimals(overrides?: CallOverrides): Promise; - - description(overrides?: CallOverrides): Promise; - - getRoundData( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber, BigNumber, BigNumber, BigNumber]>; - - latestRoundData( - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber, BigNumber, BigNumber, BigNumber]>; - - priceFeedType(overrides?: CallOverrides): Promise; - - setParams( - _roundId: BigNumberish, - _startedAt: BigNumberish, - _updatedAt: BigNumberish, - _answerInRound: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setPrice( - newPrice: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setRevertOnLatestRound( - value: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setSkipPriceCheck( - f: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - skipPriceCheck(overrides?: CallOverrides): Promise; - - version(overrides?: CallOverrides): Promise; - - callStatic: { - decimals(overrides?: CallOverrides): Promise; - - description(overrides?: CallOverrides): Promise; - - getRoundData( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber, BigNumber, BigNumber, BigNumber]>; - - latestRoundData( - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber, BigNumber, BigNumber, BigNumber]>; - - priceFeedType(overrides?: CallOverrides): Promise; - - setParams( - _roundId: BigNumberish, - _startedAt: BigNumberish, - _updatedAt: BigNumberish, - _answerInRound: BigNumberish, - overrides?: CallOverrides - ): Promise; - - setPrice(newPrice: BigNumberish, overrides?: CallOverrides): Promise; - - setRevertOnLatestRound( - value: boolean, - overrides?: CallOverrides - ): Promise; - - setSkipPriceCheck( - f: BigNumberish, - overrides?: CallOverrides - ): Promise; - - skipPriceCheck(overrides?: CallOverrides): Promise; - - version(overrides?: CallOverrides): Promise; - }; - - filters: {}; - - estimateGas: { - decimals(overrides?: CallOverrides): Promise; - - description(overrides?: CallOverrides): Promise; - - getRoundData( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - latestRoundData(overrides?: CallOverrides): Promise; - - priceFeedType(overrides?: CallOverrides): Promise; - - setParams( - _roundId: BigNumberish, - _startedAt: BigNumberish, - _updatedAt: BigNumberish, - _answerInRound: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setPrice( - newPrice: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setRevertOnLatestRound( - value: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setSkipPriceCheck( - f: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - skipPriceCheck(overrides?: CallOverrides): Promise; - - version(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - decimals(overrides?: CallOverrides): Promise; - - description(overrides?: CallOverrides): Promise; - - getRoundData( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - latestRoundData(overrides?: CallOverrides): Promise; - - priceFeedType(overrides?: CallOverrides): Promise; - - setParams( - _roundId: BigNumberish, - _startedAt: BigNumberish, - _updatedAt: BigNumberish, - _answerInRound: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setPrice( - newPrice: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setRevertOnLatestRound( - value: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setSkipPriceCheck( - f: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - skipPriceCheck(overrides?: CallOverrides): Promise; - - version(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/test/mocks/oracles/index.ts b/src/types/contracts/test/mocks/oracles/index.ts deleted file mode 100644 index 59956d15..00000000 --- a/src/types/contracts/test/mocks/oracles/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { LPPriceFeedMock } from "./LPPriceFeedMock"; -export type { PriceFeedMock } from "./PriceFeedMock"; diff --git a/src/types/contracts/test/mocks/pool/CreditManagerMockForPoolTest.ts b/src/types/contracts/test/mocks/pool/CreditManagerMockForPoolTest.ts deleted file mode 100644 index 9d2e332a..00000000 --- a/src/types/contracts/test/mocks/pool/CreditManagerMockForPoolTest.ts +++ /dev/null @@ -1,285 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface CreditManagerMockForPoolTestInterface extends utils.Interface { - functions: { - "changePoolService(address)": FunctionFragment; - "creditAccount()": FunctionFragment; - "getCreditAccountOrRevert(address)": FunctionFragment; - "lendCreditAccount(uint256,address)": FunctionFragment; - "poolService()": FunctionFragment; - "repayCreditAccount(uint256,uint256,uint256)": FunctionFragment; - "underlying()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "changePoolService" - | "creditAccount" - | "getCreditAccountOrRevert" - | "lendCreditAccount" - | "poolService" - | "repayCreditAccount" - | "underlying" - ): FunctionFragment; - - encodeFunctionData( - functionFragment: "changePoolService", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "creditAccount", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "getCreditAccountOrRevert", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "lendCreditAccount", - values: [BigNumberish, string] - ): string; - encodeFunctionData( - functionFragment: "poolService", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "repayCreditAccount", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "underlying", - values?: undefined - ): string; - - decodeFunctionResult( - functionFragment: "changePoolService", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditAccount", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getCreditAccountOrRevert", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "lendCreditAccount", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "poolService", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "repayCreditAccount", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "underlying", data: BytesLike): Result; - - events: {}; -} - -export interface CreditManagerMockForPoolTest extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: CreditManagerMockForPoolTestInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - changePoolService( - newPool: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - creditAccount(overrides?: CallOverrides): Promise<[string]>; - - getCreditAccountOrRevert( - arg0: string, - overrides?: CallOverrides - ): Promise<[string] & { result: string }>; - - lendCreditAccount( - borrowedAmount: BigNumberish, - ca: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - poolService(overrides?: CallOverrides): Promise<[string]>; - - repayCreditAccount( - borrowedAmount: BigNumberish, - profit: BigNumberish, - loss: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise<[string]>; - }; - - changePoolService( - newPool: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - creditAccount(overrides?: CallOverrides): Promise; - - getCreditAccountOrRevert( - arg0: string, - overrides?: CallOverrides - ): Promise; - - lendCreditAccount( - borrowedAmount: BigNumberish, - ca: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - poolService(overrides?: CallOverrides): Promise; - - repayCreditAccount( - borrowedAmount: BigNumberish, - profit: BigNumberish, - loss: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - - callStatic: { - changePoolService( - newPool: string, - overrides?: CallOverrides - ): Promise; - - creditAccount(overrides?: CallOverrides): Promise; - - getCreditAccountOrRevert( - arg0: string, - overrides?: CallOverrides - ): Promise; - - lendCreditAccount( - borrowedAmount: BigNumberish, - ca: string, - overrides?: CallOverrides - ): Promise; - - poolService(overrides?: CallOverrides): Promise; - - repayCreditAccount( - borrowedAmount: BigNumberish, - profit: BigNumberish, - loss: BigNumberish, - overrides?: CallOverrides - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - }; - - filters: {}; - - estimateGas: { - changePoolService( - newPool: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - creditAccount(overrides?: CallOverrides): Promise; - - getCreditAccountOrRevert( - arg0: string, - overrides?: CallOverrides - ): Promise; - - lendCreditAccount( - borrowedAmount: BigNumberish, - ca: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - poolService(overrides?: CallOverrides): Promise; - - repayCreditAccount( - borrowedAmount: BigNumberish, - profit: BigNumberish, - loss: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - changePoolService( - newPool: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - creditAccount(overrides?: CallOverrides): Promise; - - getCreditAccountOrRevert( - arg0: string, - overrides?: CallOverrides - ): Promise; - - lendCreditAccount( - borrowedAmount: BigNumberish, - ca: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - poolService(overrides?: CallOverrides): Promise; - - repayCreditAccount( - borrowedAmount: BigNumberish, - profit: BigNumberish, - loss: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/test/mocks/pool/PoolServiceMock.ts b/src/types/contracts/test/mocks/pool/PoolServiceMock.ts deleted file mode 100644 index 05f81e73..00000000 --- a/src/types/contracts/test/mocks/pool/PoolServiceMock.ts +++ /dev/null @@ -1,1401 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface PoolServiceMockInterface extends utils.Interface { - functions: { - "_cumulativeIndex_RAY()": FunctionFragment; - "_expectedLiquidityLU()": FunctionFragment; - "_timestampLU()": FunctionFragment; - "addLiquidity(uint256,address,uint256)": FunctionFragment; - "addressProvider()": FunctionFragment; - "availableLiquidity()": FunctionFragment; - "borrowAPY_RAY()": FunctionFragment; - "calcLinearCumulative_RAY()": FunctionFragment; - "calcLinearIndex_RAY()": FunctionFragment; - "connectCreditManager(address)": FunctionFragment; - "creditManagers(uint256)": FunctionFragment; - "creditManagersCanBorrow(address)": FunctionFragment; - "creditManagersCanRepay(address)": FunctionFragment; - "creditManagersCount()": FunctionFragment; - "dieselToken()": FunctionFragment; - "expectedLiquidity()": FunctionFragment; - "expectedLiquidityLimit()": FunctionFragment; - "forbidCreditManagerToBorrow(address)": FunctionFragment; - "fromDiesel(uint256)": FunctionFragment; - "getDieselRate_RAY()": FunctionFragment; - "interestRateModel()": FunctionFragment; - "lendAccount()": FunctionFragment; - "lendAmount()": FunctionFragment; - "lendCreditAccount(uint256,address)": FunctionFragment; - "newInterestRateModel(address)": FunctionFragment; - "pause()": FunctionFragment; - "paused()": FunctionFragment; - "removeLiquidity(uint256,address)": FunctionFragment; - "repayAmount()": FunctionFragment; - "repayCreditAccount(uint256,uint256,uint256)": FunctionFragment; - "repayLoss()": FunctionFragment; - "repayProfit()": FunctionFragment; - "setCumulative_RAY(uint256)": FunctionFragment; - "setExpectedLiquidityLimit(uint256)": FunctionFragment; - "setWithdrawFee(uint256)": FunctionFragment; - "toDiesel(uint256)": FunctionFragment; - "totalBorrowed()": FunctionFragment; - "treasuryAddress()": FunctionFragment; - "underlyingToken()": FunctionFragment; - "unpause()": FunctionFragment; - "version()": FunctionFragment; - "withdrawFee()": FunctionFragment; - "withdrawMultiplier()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "_cumulativeIndex_RAY" - | "_expectedLiquidityLU" - | "_timestampLU" - | "addLiquidity" - | "addressProvider" - | "availableLiquidity" - | "borrowAPY_RAY" - | "calcLinearCumulative_RAY" - | "calcLinearIndex_RAY" - | "connectCreditManager" - | "creditManagers" - | "creditManagersCanBorrow" - | "creditManagersCanRepay" - | "creditManagersCount" - | "dieselToken" - | "expectedLiquidity" - | "expectedLiquidityLimit" - | "forbidCreditManagerToBorrow" - | "fromDiesel" - | "getDieselRate_RAY" - | "interestRateModel" - | "lendAccount" - | "lendAmount" - | "lendCreditAccount" - | "newInterestRateModel" - | "pause" - | "paused" - | "removeLiquidity" - | "repayAmount" - | "repayCreditAccount" - | "repayLoss" - | "repayProfit" - | "setCumulative_RAY" - | "setExpectedLiquidityLimit" - | "setWithdrawFee" - | "toDiesel" - | "totalBorrowed" - | "treasuryAddress" - | "underlyingToken" - | "unpause" - | "version" - | "withdrawFee" - | "withdrawMultiplier" - ): FunctionFragment; - - encodeFunctionData( - functionFragment: "_cumulativeIndex_RAY", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "_expectedLiquidityLU", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "_timestampLU", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "addLiquidity", - values: [BigNumberish, string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "addressProvider", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "availableLiquidity", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "borrowAPY_RAY", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "calcLinearCumulative_RAY", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "calcLinearIndex_RAY", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "connectCreditManager", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "creditManagers", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "creditManagersCanBorrow", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "creditManagersCanRepay", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "creditManagersCount", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "dieselToken", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "expectedLiquidity", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "expectedLiquidityLimit", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "forbidCreditManagerToBorrow", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "fromDiesel", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "getDieselRate_RAY", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "interestRateModel", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "lendAccount", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "lendAmount", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "lendCreditAccount", - values: [BigNumberish, string] - ): string; - encodeFunctionData( - functionFragment: "newInterestRateModel", - values: [string] - ): string; - encodeFunctionData(functionFragment: "pause", values?: undefined): string; - encodeFunctionData(functionFragment: "paused", values?: undefined): string; - encodeFunctionData( - functionFragment: "removeLiquidity", - values: [BigNumberish, string] - ): string; - encodeFunctionData( - functionFragment: "repayAmount", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "repayCreditAccount", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "repayLoss", values?: undefined): string; - encodeFunctionData( - functionFragment: "repayProfit", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "setCumulative_RAY", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "setExpectedLiquidityLimit", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "setWithdrawFee", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "toDiesel", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "totalBorrowed", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "treasuryAddress", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "underlyingToken", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "unpause", values?: undefined): string; - encodeFunctionData(functionFragment: "version", values?: undefined): string; - encodeFunctionData( - functionFragment: "withdrawFee", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "withdrawMultiplier", - values?: undefined - ): string; - - decodeFunctionResult( - functionFragment: "_cumulativeIndex_RAY", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "_expectedLiquidityLU", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "_timestampLU", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "addLiquidity", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "addressProvider", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "availableLiquidity", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "borrowAPY_RAY", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "calcLinearCumulative_RAY", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "calcLinearIndex_RAY", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "connectCreditManager", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditManagers", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditManagersCanBorrow", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditManagersCanRepay", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditManagersCount", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "dieselToken", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "expectedLiquidity", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "expectedLiquidityLimit", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "forbidCreditManagerToBorrow", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "fromDiesel", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "getDieselRate_RAY", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "interestRateModel", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "lendAccount", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "lendAmount", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "lendCreditAccount", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "newInterestRateModel", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "pause", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "paused", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "removeLiquidity", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "repayAmount", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "repayCreditAccount", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "repayLoss", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "repayProfit", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "setCumulative_RAY", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "setExpectedLiquidityLimit", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "setWithdrawFee", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "toDiesel", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "totalBorrowed", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "treasuryAddress", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "underlyingToken", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "unpause", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "version", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "withdrawFee", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "withdrawMultiplier", - data: BytesLike - ): Result; - - events: { - "AddLiquidity(address,address,uint256,uint256)": EventFragment; - "Borrow(address,address,uint256)": EventFragment; - "BorrowForbidden(address)": EventFragment; - "NewCreditManagerConnected(address)": EventFragment; - "NewExpectedLiquidityLimit(uint256)": EventFragment; - "NewInterestRateModel(address)": EventFragment; - "NewWithdrawFee(uint256)": EventFragment; - "RemoveLiquidity(address,address,uint256)": EventFragment; - "Repay(address,uint256,uint256,uint256)": EventFragment; - "UncoveredLoss(address,uint256)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "AddLiquidity"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Borrow"): EventFragment; - getEvent(nameOrSignatureOrTopic: "BorrowForbidden"): EventFragment; - getEvent(nameOrSignatureOrTopic: "NewCreditManagerConnected"): EventFragment; - getEvent(nameOrSignatureOrTopic: "NewExpectedLiquidityLimit"): EventFragment; - getEvent(nameOrSignatureOrTopic: "NewInterestRateModel"): EventFragment; - getEvent(nameOrSignatureOrTopic: "NewWithdrawFee"): EventFragment; - getEvent(nameOrSignatureOrTopic: "RemoveLiquidity"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Repay"): EventFragment; - getEvent(nameOrSignatureOrTopic: "UncoveredLoss"): EventFragment; -} - -export interface AddLiquidityEventObject { - sender: string; - onBehalfOf: string; - amount: BigNumber; - referralCode: BigNumber; -} -export type AddLiquidityEvent = TypedEvent< - [string, string, BigNumber, BigNumber], - AddLiquidityEventObject ->; - -export type AddLiquidityEventFilter = TypedEventFilter; - -export interface BorrowEventObject { - creditManager: string; - creditAccount: string; - amount: BigNumber; -} -export type BorrowEvent = TypedEvent< - [string, string, BigNumber], - BorrowEventObject ->; - -export type BorrowEventFilter = TypedEventFilter; - -export interface BorrowForbiddenEventObject { - creditManager: string; -} -export type BorrowForbiddenEvent = TypedEvent< - [string], - BorrowForbiddenEventObject ->; - -export type BorrowForbiddenEventFilter = TypedEventFilter; - -export interface NewCreditManagerConnectedEventObject { - creditManager: string; -} -export type NewCreditManagerConnectedEvent = TypedEvent< - [string], - NewCreditManagerConnectedEventObject ->; - -export type NewCreditManagerConnectedEventFilter = - TypedEventFilter; - -export interface NewExpectedLiquidityLimitEventObject { - newLimit: BigNumber; -} -export type NewExpectedLiquidityLimitEvent = TypedEvent< - [BigNumber], - NewExpectedLiquidityLimitEventObject ->; - -export type NewExpectedLiquidityLimitEventFilter = - TypedEventFilter; - -export interface NewInterestRateModelEventObject { - newInterestRateModel: string; -} -export type NewInterestRateModelEvent = TypedEvent< - [string], - NewInterestRateModelEventObject ->; - -export type NewInterestRateModelEventFilter = - TypedEventFilter; - -export interface NewWithdrawFeeEventObject { - fee: BigNumber; -} -export type NewWithdrawFeeEvent = TypedEvent< - [BigNumber], - NewWithdrawFeeEventObject ->; - -export type NewWithdrawFeeEventFilter = TypedEventFilter; - -export interface RemoveLiquidityEventObject { - sender: string; - to: string; - amount: BigNumber; -} -export type RemoveLiquidityEvent = TypedEvent< - [string, string, BigNumber], - RemoveLiquidityEventObject ->; - -export type RemoveLiquidityEventFilter = TypedEventFilter; - -export interface RepayEventObject { - creditManager: string; - borrowedAmount: BigNumber; - profit: BigNumber; - loss: BigNumber; -} -export type RepayEvent = TypedEvent< - [string, BigNumber, BigNumber, BigNumber], - RepayEventObject ->; - -export type RepayEventFilter = TypedEventFilter; - -export interface UncoveredLossEventObject { - creditManager: string; - loss: BigNumber; -} -export type UncoveredLossEvent = TypedEvent< - [string, BigNumber], - UncoveredLossEventObject ->; - -export type UncoveredLossEventFilter = TypedEventFilter; - -export interface PoolServiceMock extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: PoolServiceMockInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - _cumulativeIndex_RAY(overrides?: CallOverrides): Promise<[BigNumber]>; - - _expectedLiquidityLU(overrides?: CallOverrides): Promise<[BigNumber]>; - - _timestampLU(overrides?: CallOverrides): Promise<[BigNumber]>; - - addLiquidity( - amount: BigNumberish, - onBehalfOf: string, - referralCode: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - addressProvider(overrides?: CallOverrides): Promise<[string]>; - - availableLiquidity(overrides?: CallOverrides): Promise<[BigNumber]>; - - borrowAPY_RAY(overrides?: CallOverrides): Promise<[BigNumber]>; - - calcLinearCumulative_RAY(overrides?: CallOverrides): Promise<[BigNumber]>; - - calcLinearIndex_RAY(overrides?: CallOverrides): Promise<[BigNumber]>; - - connectCreditManager( - _creditManager: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - creditManagers( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - creditManagersCanBorrow( - arg0: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - creditManagersCanRepay( - arg0: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - creditManagersCount(overrides?: CallOverrides): Promise<[BigNumber]>; - - dieselToken(overrides?: CallOverrides): Promise<[string]>; - - expectedLiquidity(overrides?: CallOverrides): Promise<[BigNumber]>; - - expectedLiquidityLimit(overrides?: CallOverrides): Promise<[BigNumber]>; - - forbidCreditManagerToBorrow( - _creditManager: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fromDiesel( - amount: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - getDieselRate_RAY(overrides?: CallOverrides): Promise<[BigNumber]>; - - interestRateModel(overrides?: CallOverrides): Promise<[string]>; - - lendAccount(overrides?: CallOverrides): Promise<[string]>; - - lendAmount(overrides?: CallOverrides): Promise<[BigNumber]>; - - lendCreditAccount( - borrowedAmount: BigNumberish, - creditAccount: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - newInterestRateModel( - _interestRateModel: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise<[boolean]>; - - removeLiquidity( - amount: BigNumberish, - to: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - repayAmount(overrides?: CallOverrides): Promise<[BigNumber]>; - - repayCreditAccount( - borrowedAmount: BigNumberish, - profit: BigNumberish, - loss: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - repayLoss(overrides?: CallOverrides): Promise<[BigNumber]>; - - repayProfit(overrides?: CallOverrides): Promise<[BigNumber]>; - - setCumulative_RAY( - cumulativeIndex_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setExpectedLiquidityLimit( - num: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setWithdrawFee( - num: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - toDiesel( - amount: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - totalBorrowed(overrides?: CallOverrides): Promise<[BigNumber]>; - - treasuryAddress(overrides?: CallOverrides): Promise<[string]>; - - underlyingToken(overrides?: CallOverrides): Promise<[string]>; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise<[BigNumber]>; - - withdrawFee(overrides?: CallOverrides): Promise<[BigNumber]>; - - withdrawMultiplier(overrides?: CallOverrides): Promise<[BigNumber]>; - }; - - _cumulativeIndex_RAY(overrides?: CallOverrides): Promise; - - _expectedLiquidityLU(overrides?: CallOverrides): Promise; - - _timestampLU(overrides?: CallOverrides): Promise; - - addLiquidity( - amount: BigNumberish, - onBehalfOf: string, - referralCode: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - addressProvider(overrides?: CallOverrides): Promise; - - availableLiquidity(overrides?: CallOverrides): Promise; - - borrowAPY_RAY(overrides?: CallOverrides): Promise; - - calcLinearCumulative_RAY(overrides?: CallOverrides): Promise; - - calcLinearIndex_RAY(overrides?: CallOverrides): Promise; - - connectCreditManager( - _creditManager: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - creditManagers( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - creditManagersCanBorrow( - arg0: string, - overrides?: CallOverrides - ): Promise; - - creditManagersCanRepay( - arg0: string, - overrides?: CallOverrides - ): Promise; - - creditManagersCount(overrides?: CallOverrides): Promise; - - dieselToken(overrides?: CallOverrides): Promise; - - expectedLiquidity(overrides?: CallOverrides): Promise; - - expectedLiquidityLimit(overrides?: CallOverrides): Promise; - - forbidCreditManagerToBorrow( - _creditManager: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fromDiesel( - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getDieselRate_RAY(overrides?: CallOverrides): Promise; - - interestRateModel(overrides?: CallOverrides): Promise; - - lendAccount(overrides?: CallOverrides): Promise; - - lendAmount(overrides?: CallOverrides): Promise; - - lendCreditAccount( - borrowedAmount: BigNumberish, - creditAccount: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - newInterestRateModel( - _interestRateModel: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise; - - removeLiquidity( - amount: BigNumberish, - to: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - repayAmount(overrides?: CallOverrides): Promise; - - repayCreditAccount( - borrowedAmount: BigNumberish, - profit: BigNumberish, - loss: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - repayLoss(overrides?: CallOverrides): Promise; - - repayProfit(overrides?: CallOverrides): Promise; - - setCumulative_RAY( - cumulativeIndex_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setExpectedLiquidityLimit( - num: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setWithdrawFee( - num: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - toDiesel(amount: BigNumberish, overrides?: CallOverrides): Promise; - - totalBorrowed(overrides?: CallOverrides): Promise; - - treasuryAddress(overrides?: CallOverrides): Promise; - - underlyingToken(overrides?: CallOverrides): Promise; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise; - - withdrawFee(overrides?: CallOverrides): Promise; - - withdrawMultiplier(overrides?: CallOverrides): Promise; - - callStatic: { - _cumulativeIndex_RAY(overrides?: CallOverrides): Promise; - - _expectedLiquidityLU(overrides?: CallOverrides): Promise; - - _timestampLU(overrides?: CallOverrides): Promise; - - addLiquidity( - amount: BigNumberish, - onBehalfOf: string, - referralCode: BigNumberish, - overrides?: CallOverrides - ): Promise; - - addressProvider(overrides?: CallOverrides): Promise; - - availableLiquidity(overrides?: CallOverrides): Promise; - - borrowAPY_RAY(overrides?: CallOverrides): Promise; - - calcLinearCumulative_RAY(overrides?: CallOverrides): Promise; - - calcLinearIndex_RAY(overrides?: CallOverrides): Promise; - - connectCreditManager( - _creditManager: string, - overrides?: CallOverrides - ): Promise; - - creditManagers( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - creditManagersCanBorrow( - arg0: string, - overrides?: CallOverrides - ): Promise; - - creditManagersCanRepay( - arg0: string, - overrides?: CallOverrides - ): Promise; - - creditManagersCount(overrides?: CallOverrides): Promise; - - dieselToken(overrides?: CallOverrides): Promise; - - expectedLiquidity(overrides?: CallOverrides): Promise; - - expectedLiquidityLimit(overrides?: CallOverrides): Promise; - - forbidCreditManagerToBorrow( - _creditManager: string, - overrides?: CallOverrides - ): Promise; - - fromDiesel( - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getDieselRate_RAY(overrides?: CallOverrides): Promise; - - interestRateModel(overrides?: CallOverrides): Promise; - - lendAccount(overrides?: CallOverrides): Promise; - - lendAmount(overrides?: CallOverrides): Promise; - - lendCreditAccount( - borrowedAmount: BigNumberish, - creditAccount: string, - overrides?: CallOverrides - ): Promise; - - newInterestRateModel( - _interestRateModel: string, - overrides?: CallOverrides - ): Promise; - - pause(overrides?: CallOverrides): Promise; - - paused(overrides?: CallOverrides): Promise; - - removeLiquidity( - amount: BigNumberish, - to: string, - overrides?: CallOverrides - ): Promise; - - repayAmount(overrides?: CallOverrides): Promise; - - repayCreditAccount( - borrowedAmount: BigNumberish, - profit: BigNumberish, - loss: BigNumberish, - overrides?: CallOverrides - ): Promise; - - repayLoss(overrides?: CallOverrides): Promise; - - repayProfit(overrides?: CallOverrides): Promise; - - setCumulative_RAY( - cumulativeIndex_RAY: BigNumberish, - overrides?: CallOverrides - ): Promise; - - setExpectedLiquidityLimit( - num: BigNumberish, - overrides?: CallOverrides - ): Promise; - - setWithdrawFee(num: BigNumberish, overrides?: CallOverrides): Promise; - - toDiesel( - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - totalBorrowed(overrides?: CallOverrides): Promise; - - treasuryAddress(overrides?: CallOverrides): Promise; - - underlyingToken(overrides?: CallOverrides): Promise; - - unpause(overrides?: CallOverrides): Promise; - - version(overrides?: CallOverrides): Promise; - - withdrawFee(overrides?: CallOverrides): Promise; - - withdrawMultiplier(overrides?: CallOverrides): Promise; - }; - - filters: { - "AddLiquidity(address,address,uint256,uint256)"( - sender?: string | null, - onBehalfOf?: string | null, - amount?: null, - referralCode?: null - ): AddLiquidityEventFilter; - AddLiquidity( - sender?: string | null, - onBehalfOf?: string | null, - amount?: null, - referralCode?: null - ): AddLiquidityEventFilter; - - "Borrow(address,address,uint256)"( - creditManager?: string | null, - creditAccount?: string | null, - amount?: null - ): BorrowEventFilter; - Borrow( - creditManager?: string | null, - creditAccount?: string | null, - amount?: null - ): BorrowEventFilter; - - "BorrowForbidden(address)"( - creditManager?: string | null - ): BorrowForbiddenEventFilter; - BorrowForbidden(creditManager?: string | null): BorrowForbiddenEventFilter; - - "NewCreditManagerConnected(address)"( - creditManager?: string | null - ): NewCreditManagerConnectedEventFilter; - NewCreditManagerConnected( - creditManager?: string | null - ): NewCreditManagerConnectedEventFilter; - - "NewExpectedLiquidityLimit(uint256)"( - newLimit?: null - ): NewExpectedLiquidityLimitEventFilter; - NewExpectedLiquidityLimit( - newLimit?: null - ): NewExpectedLiquidityLimitEventFilter; - - "NewInterestRateModel(address)"( - newInterestRateModel?: string | null - ): NewInterestRateModelEventFilter; - NewInterestRateModel( - newInterestRateModel?: string | null - ): NewInterestRateModelEventFilter; - - "NewWithdrawFee(uint256)"(fee?: null): NewWithdrawFeeEventFilter; - NewWithdrawFee(fee?: null): NewWithdrawFeeEventFilter; - - "RemoveLiquidity(address,address,uint256)"( - sender?: string | null, - to?: string | null, - amount?: null - ): RemoveLiquidityEventFilter; - RemoveLiquidity( - sender?: string | null, - to?: string | null, - amount?: null - ): RemoveLiquidityEventFilter; - - "Repay(address,uint256,uint256,uint256)"( - creditManager?: string | null, - borrowedAmount?: null, - profit?: null, - loss?: null - ): RepayEventFilter; - Repay( - creditManager?: string | null, - borrowedAmount?: null, - profit?: null, - loss?: null - ): RepayEventFilter; - - "UncoveredLoss(address,uint256)"( - creditManager?: string | null, - loss?: null - ): UncoveredLossEventFilter; - UncoveredLoss( - creditManager?: string | null, - loss?: null - ): UncoveredLossEventFilter; - }; - - estimateGas: { - _cumulativeIndex_RAY(overrides?: CallOverrides): Promise; - - _expectedLiquidityLU(overrides?: CallOverrides): Promise; - - _timestampLU(overrides?: CallOverrides): Promise; - - addLiquidity( - amount: BigNumberish, - onBehalfOf: string, - referralCode: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - addressProvider(overrides?: CallOverrides): Promise; - - availableLiquidity(overrides?: CallOverrides): Promise; - - borrowAPY_RAY(overrides?: CallOverrides): Promise; - - calcLinearCumulative_RAY(overrides?: CallOverrides): Promise; - - calcLinearIndex_RAY(overrides?: CallOverrides): Promise; - - connectCreditManager( - _creditManager: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - creditManagers( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - creditManagersCanBorrow( - arg0: string, - overrides?: CallOverrides - ): Promise; - - creditManagersCanRepay( - arg0: string, - overrides?: CallOverrides - ): Promise; - - creditManagersCount(overrides?: CallOverrides): Promise; - - dieselToken(overrides?: CallOverrides): Promise; - - expectedLiquidity(overrides?: CallOverrides): Promise; - - expectedLiquidityLimit(overrides?: CallOverrides): Promise; - - forbidCreditManagerToBorrow( - _creditManager: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fromDiesel( - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getDieselRate_RAY(overrides?: CallOverrides): Promise; - - interestRateModel(overrides?: CallOverrides): Promise; - - lendAccount(overrides?: CallOverrides): Promise; - - lendAmount(overrides?: CallOverrides): Promise; - - lendCreditAccount( - borrowedAmount: BigNumberish, - creditAccount: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - newInterestRateModel( - _interestRateModel: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise; - - removeLiquidity( - amount: BigNumberish, - to: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - repayAmount(overrides?: CallOverrides): Promise; - - repayCreditAccount( - borrowedAmount: BigNumberish, - profit: BigNumberish, - loss: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - repayLoss(overrides?: CallOverrides): Promise; - - repayProfit(overrides?: CallOverrides): Promise; - - setCumulative_RAY( - cumulativeIndex_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setExpectedLiquidityLimit( - num: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setWithdrawFee( - num: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - toDiesel( - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - totalBorrowed(overrides?: CallOverrides): Promise; - - treasuryAddress(overrides?: CallOverrides): Promise; - - underlyingToken(overrides?: CallOverrides): Promise; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise; - - withdrawFee(overrides?: CallOverrides): Promise; - - withdrawMultiplier(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - _cumulativeIndex_RAY( - overrides?: CallOverrides - ): Promise; - - _expectedLiquidityLU( - overrides?: CallOverrides - ): Promise; - - _timestampLU(overrides?: CallOverrides): Promise; - - addLiquidity( - amount: BigNumberish, - onBehalfOf: string, - referralCode: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - addressProvider(overrides?: CallOverrides): Promise; - - availableLiquidity( - overrides?: CallOverrides - ): Promise; - - borrowAPY_RAY(overrides?: CallOverrides): Promise; - - calcLinearCumulative_RAY( - overrides?: CallOverrides - ): Promise; - - calcLinearIndex_RAY( - overrides?: CallOverrides - ): Promise; - - connectCreditManager( - _creditManager: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - creditManagers( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - creditManagersCanBorrow( - arg0: string, - overrides?: CallOverrides - ): Promise; - - creditManagersCanRepay( - arg0: string, - overrides?: CallOverrides - ): Promise; - - creditManagersCount( - overrides?: CallOverrides - ): Promise; - - dieselToken(overrides?: CallOverrides): Promise; - - expectedLiquidity(overrides?: CallOverrides): Promise; - - expectedLiquidityLimit( - overrides?: CallOverrides - ): Promise; - - forbidCreditManagerToBorrow( - _creditManager: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fromDiesel( - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getDieselRate_RAY(overrides?: CallOverrides): Promise; - - interestRateModel(overrides?: CallOverrides): Promise; - - lendAccount(overrides?: CallOverrides): Promise; - - lendAmount(overrides?: CallOverrides): Promise; - - lendCreditAccount( - borrowedAmount: BigNumberish, - creditAccount: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - newInterestRateModel( - _interestRateModel: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise; - - removeLiquidity( - amount: BigNumberish, - to: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - repayAmount(overrides?: CallOverrides): Promise; - - repayCreditAccount( - borrowedAmount: BigNumberish, - profit: BigNumberish, - loss: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - repayLoss(overrides?: CallOverrides): Promise; - - repayProfit(overrides?: CallOverrides): Promise; - - setCumulative_RAY( - cumulativeIndex_RAY: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setExpectedLiquidityLimit( - num: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setWithdrawFee( - num: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - toDiesel( - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - totalBorrowed(overrides?: CallOverrides): Promise; - - treasuryAddress(overrides?: CallOverrides): Promise; - - underlyingToken(overrides?: CallOverrides): Promise; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise; - - withdrawFee(overrides?: CallOverrides): Promise; - - withdrawMultiplier( - overrides?: CallOverrides - ): Promise; - }; -} diff --git a/src/types/contracts/test/mocks/pool/TestPoolService.ts b/src/types/contracts/test/mocks/pool/TestPoolService.ts deleted file mode 100644 index adf1468a..00000000 --- a/src/types/contracts/test/mocks/pool/TestPoolService.ts +++ /dev/null @@ -1,1439 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface TestPoolServiceInterface extends utils.Interface { - functions: { - "_acl()": FunctionFragment; - "_cumulativeIndex_RAY()": FunctionFragment; - "_expectedLiquidityLU()": FunctionFragment; - "_timestampLU()": FunctionFragment; - "addLiquidity(uint256,address,uint256)": FunctionFragment; - "addressProvider()": FunctionFragment; - "availableLiquidity()": FunctionFragment; - "borrowAPY_RAY()": FunctionFragment; - "calcLinearCumulative_RAY()": FunctionFragment; - "calcLinearIndex_RAY(uint256,uint256,uint256)": FunctionFragment; - "connectCreditManager(address)": FunctionFragment; - "creditManagers(uint256)": FunctionFragment; - "creditManagersCanBorrow(address)": FunctionFragment; - "creditManagersCanRepay(address)": FunctionFragment; - "creditManagersCount()": FunctionFragment; - "dieselToken()": FunctionFragment; - "expectedLiquidity()": FunctionFragment; - "expectedLiquidityLimit()": FunctionFragment; - "forbidCreditManagerToBorrow(address)": FunctionFragment; - "fromDiesel(uint256)": FunctionFragment; - "getCumulativeIndex_RAY()": FunctionFragment; - "getDieselRate_RAY()": FunctionFragment; - "getExpectedLU()": FunctionFragment; - "getTimestampLU()": FunctionFragment; - "interestRateModel()": FunctionFragment; - "lendCreditAccount(uint256,address)": FunctionFragment; - "pause()": FunctionFragment; - "paused()": FunctionFragment; - "removeLiquidity(uint256,address)": FunctionFragment; - "repayCreditAccount(uint256,uint256,uint256)": FunctionFragment; - "setExpectedLiquidity(uint256)": FunctionFragment; - "setExpectedLiquidityLimit(uint256)": FunctionFragment; - "setWithdrawFee(uint256)": FunctionFragment; - "toDiesel(uint256)": FunctionFragment; - "totalBorrowed()": FunctionFragment; - "treasuryAddress()": FunctionFragment; - "underlyingToken()": FunctionFragment; - "unpause()": FunctionFragment; - "updateBorrowRate()": FunctionFragment; - "updateInterestRateModel(address)": FunctionFragment; - "version()": FunctionFragment; - "withdrawFee()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "_acl" - | "_cumulativeIndex_RAY" - | "_expectedLiquidityLU" - | "_timestampLU" - | "addLiquidity" - | "addressProvider" - | "availableLiquidity" - | "borrowAPY_RAY" - | "calcLinearCumulative_RAY" - | "calcLinearIndex_RAY" - | "connectCreditManager" - | "creditManagers" - | "creditManagersCanBorrow" - | "creditManagersCanRepay" - | "creditManagersCount" - | "dieselToken" - | "expectedLiquidity" - | "expectedLiquidityLimit" - | "forbidCreditManagerToBorrow" - | "fromDiesel" - | "getCumulativeIndex_RAY" - | "getDieselRate_RAY" - | "getExpectedLU" - | "getTimestampLU" - | "interestRateModel" - | "lendCreditAccount" - | "pause" - | "paused" - | "removeLiquidity" - | "repayCreditAccount" - | "setExpectedLiquidity" - | "setExpectedLiquidityLimit" - | "setWithdrawFee" - | "toDiesel" - | "totalBorrowed" - | "treasuryAddress" - | "underlyingToken" - | "unpause" - | "updateBorrowRate" - | "updateInterestRateModel" - | "version" - | "withdrawFee" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "_acl", values?: undefined): string; - encodeFunctionData( - functionFragment: "_cumulativeIndex_RAY", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "_expectedLiquidityLU", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "_timestampLU", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "addLiquidity", - values: [BigNumberish, string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "addressProvider", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "availableLiquidity", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "borrowAPY_RAY", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "calcLinearCumulative_RAY", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "calcLinearIndex_RAY", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "connectCreditManager", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "creditManagers", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "creditManagersCanBorrow", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "creditManagersCanRepay", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "creditManagersCount", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "dieselToken", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "expectedLiquidity", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "expectedLiquidityLimit", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "forbidCreditManagerToBorrow", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "fromDiesel", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "getCumulativeIndex_RAY", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "getDieselRate_RAY", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "getExpectedLU", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "getTimestampLU", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "interestRateModel", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "lendCreditAccount", - values: [BigNumberish, string] - ): string; - encodeFunctionData(functionFragment: "pause", values?: undefined): string; - encodeFunctionData(functionFragment: "paused", values?: undefined): string; - encodeFunctionData( - functionFragment: "removeLiquidity", - values: [BigNumberish, string] - ): string; - encodeFunctionData( - functionFragment: "repayCreditAccount", - values: [BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "setExpectedLiquidity", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "setExpectedLiquidityLimit", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "setWithdrawFee", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "toDiesel", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "totalBorrowed", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "treasuryAddress", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "underlyingToken", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "unpause", values?: undefined): string; - encodeFunctionData( - functionFragment: "updateBorrowRate", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "updateInterestRateModel", - values: [string] - ): string; - encodeFunctionData(functionFragment: "version", values?: undefined): string; - encodeFunctionData( - functionFragment: "withdrawFee", - values?: undefined - ): string; - - decodeFunctionResult(functionFragment: "_acl", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "_cumulativeIndex_RAY", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "_expectedLiquidityLU", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "_timestampLU", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "addLiquidity", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "addressProvider", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "availableLiquidity", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "borrowAPY_RAY", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "calcLinearCumulative_RAY", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "calcLinearIndex_RAY", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "connectCreditManager", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditManagers", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditManagersCanBorrow", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditManagersCanRepay", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditManagersCount", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "dieselToken", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "expectedLiquidity", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "expectedLiquidityLimit", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "forbidCreditManagerToBorrow", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "fromDiesel", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "getCumulativeIndex_RAY", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getDieselRate_RAY", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getExpectedLU", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getTimestampLU", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "interestRateModel", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "lendCreditAccount", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "pause", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "paused", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "removeLiquidity", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "repayCreditAccount", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "setExpectedLiquidity", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "setExpectedLiquidityLimit", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "setWithdrawFee", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "toDiesel", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "totalBorrowed", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "treasuryAddress", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "underlyingToken", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "unpause", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "updateBorrowRate", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "updateInterestRateModel", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "version", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "withdrawFee", - data: BytesLike - ): Result; - - events: { - "AddLiquidity(address,address,uint256,uint256)": EventFragment; - "Borrow(address,address,uint256)": EventFragment; - "BorrowForbidden(address)": EventFragment; - "NewCreditManagerConnected(address)": EventFragment; - "NewExpectedLiquidityLimit(uint256)": EventFragment; - "NewInterestRateModel(address)": EventFragment; - "NewWithdrawFee(uint256)": EventFragment; - "Paused(address)": EventFragment; - "RemoveLiquidity(address,address,uint256)": EventFragment; - "Repay(address,uint256,uint256,uint256)": EventFragment; - "UncoveredLoss(address,uint256)": EventFragment; - "Unpaused(address)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "AddLiquidity"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Borrow"): EventFragment; - getEvent(nameOrSignatureOrTopic: "BorrowForbidden"): EventFragment; - getEvent(nameOrSignatureOrTopic: "NewCreditManagerConnected"): EventFragment; - getEvent(nameOrSignatureOrTopic: "NewExpectedLiquidityLimit"): EventFragment; - getEvent(nameOrSignatureOrTopic: "NewInterestRateModel"): EventFragment; - getEvent(nameOrSignatureOrTopic: "NewWithdrawFee"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Paused"): EventFragment; - getEvent(nameOrSignatureOrTopic: "RemoveLiquidity"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Repay"): EventFragment; - getEvent(nameOrSignatureOrTopic: "UncoveredLoss"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Unpaused"): EventFragment; -} - -export interface AddLiquidityEventObject { - sender: string; - onBehalfOf: string; - amount: BigNumber; - referralCode: BigNumber; -} -export type AddLiquidityEvent = TypedEvent< - [string, string, BigNumber, BigNumber], - AddLiquidityEventObject ->; - -export type AddLiquidityEventFilter = TypedEventFilter; - -export interface BorrowEventObject { - creditManager: string; - creditAccount: string; - amount: BigNumber; -} -export type BorrowEvent = TypedEvent< - [string, string, BigNumber], - BorrowEventObject ->; - -export type BorrowEventFilter = TypedEventFilter; - -export interface BorrowForbiddenEventObject { - creditManager: string; -} -export type BorrowForbiddenEvent = TypedEvent< - [string], - BorrowForbiddenEventObject ->; - -export type BorrowForbiddenEventFilter = TypedEventFilter; - -export interface NewCreditManagerConnectedEventObject { - creditManager: string; -} -export type NewCreditManagerConnectedEvent = TypedEvent< - [string], - NewCreditManagerConnectedEventObject ->; - -export type NewCreditManagerConnectedEventFilter = - TypedEventFilter; - -export interface NewExpectedLiquidityLimitEventObject { - newLimit: BigNumber; -} -export type NewExpectedLiquidityLimitEvent = TypedEvent< - [BigNumber], - NewExpectedLiquidityLimitEventObject ->; - -export type NewExpectedLiquidityLimitEventFilter = - TypedEventFilter; - -export interface NewInterestRateModelEventObject { - newInterestRateModel: string; -} -export type NewInterestRateModelEvent = TypedEvent< - [string], - NewInterestRateModelEventObject ->; - -export type NewInterestRateModelEventFilter = - TypedEventFilter; - -export interface NewWithdrawFeeEventObject { - fee: BigNumber; -} -export type NewWithdrawFeeEvent = TypedEvent< - [BigNumber], - NewWithdrawFeeEventObject ->; - -export type NewWithdrawFeeEventFilter = TypedEventFilter; - -export interface PausedEventObject { - account: string; -} -export type PausedEvent = TypedEvent<[string], PausedEventObject>; - -export type PausedEventFilter = TypedEventFilter; - -export interface RemoveLiquidityEventObject { - sender: string; - to: string; - amount: BigNumber; -} -export type RemoveLiquidityEvent = TypedEvent< - [string, string, BigNumber], - RemoveLiquidityEventObject ->; - -export type RemoveLiquidityEventFilter = TypedEventFilter; - -export interface RepayEventObject { - creditManager: string; - borrowedAmount: BigNumber; - profit: BigNumber; - loss: BigNumber; -} -export type RepayEvent = TypedEvent< - [string, BigNumber, BigNumber, BigNumber], - RepayEventObject ->; - -export type RepayEventFilter = TypedEventFilter; - -export interface UncoveredLossEventObject { - creditManager: string; - loss: BigNumber; -} -export type UncoveredLossEvent = TypedEvent< - [string, BigNumber], - UncoveredLossEventObject ->; - -export type UncoveredLossEventFilter = TypedEventFilter; - -export interface UnpausedEventObject { - account: string; -} -export type UnpausedEvent = TypedEvent<[string], UnpausedEventObject>; - -export type UnpausedEventFilter = TypedEventFilter; - -export interface TestPoolService extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: TestPoolServiceInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - _acl(overrides?: CallOverrides): Promise<[string]>; - - _cumulativeIndex_RAY(overrides?: CallOverrides): Promise<[BigNumber]>; - - _expectedLiquidityLU(overrides?: CallOverrides): Promise<[BigNumber]>; - - _timestampLU(overrides?: CallOverrides): Promise<[BigNumber]>; - - addLiquidity( - amount: BigNumberish, - onBehalfOf: string, - referralCode: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - addressProvider(overrides?: CallOverrides): Promise<[string]>; - - availableLiquidity(overrides?: CallOverrides): Promise<[BigNumber]>; - - borrowAPY_RAY(overrides?: CallOverrides): Promise<[BigNumber]>; - - calcLinearCumulative_RAY(overrides?: CallOverrides): Promise<[BigNumber]>; - - calcLinearIndex_RAY( - cumulativeIndex_RAY: BigNumberish, - currentBorrowRate_RAY: BigNumberish, - timeDifference: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - connectCreditManager( - _creditManager: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - creditManagers( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - creditManagersCanBorrow( - arg0: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - creditManagersCanRepay( - arg0: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - creditManagersCount(overrides?: CallOverrides): Promise<[BigNumber]>; - - dieselToken(overrides?: CallOverrides): Promise<[string]>; - - expectedLiquidity(overrides?: CallOverrides): Promise<[BigNumber]>; - - expectedLiquidityLimit(overrides?: CallOverrides): Promise<[BigNumber]>; - - forbidCreditManagerToBorrow( - _creditManager: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fromDiesel( - amount: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - getCumulativeIndex_RAY(overrides?: CallOverrides): Promise<[BigNumber]>; - - getDieselRate_RAY(overrides?: CallOverrides): Promise<[BigNumber]>; - - getExpectedLU(overrides?: CallOverrides): Promise<[BigNumber]>; - - getTimestampLU(overrides?: CallOverrides): Promise<[BigNumber]>; - - interestRateModel(overrides?: CallOverrides): Promise<[string]>; - - lendCreditAccount( - borrowedAmount: BigNumberish, - creditAccount: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise<[boolean]>; - - removeLiquidity( - amount: BigNumberish, - to: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - repayCreditAccount( - borrowedAmount: BigNumberish, - profit: BigNumberish, - loss: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setExpectedLiquidity( - newExpectedLiquidity: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setExpectedLiquidityLimit( - newLimit: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setWithdrawFee( - fee: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - toDiesel( - amount: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - totalBorrowed(overrides?: CallOverrides): Promise<[BigNumber]>; - - treasuryAddress(overrides?: CallOverrides): Promise<[string]>; - - underlyingToken(overrides?: CallOverrides): Promise<[string]>; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - updateBorrowRate( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - updateInterestRateModel( - _interestRateModel: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise<[BigNumber]>; - - withdrawFee(overrides?: CallOverrides): Promise<[BigNumber]>; - }; - - _acl(overrides?: CallOverrides): Promise; - - _cumulativeIndex_RAY(overrides?: CallOverrides): Promise; - - _expectedLiquidityLU(overrides?: CallOverrides): Promise; - - _timestampLU(overrides?: CallOverrides): Promise; - - addLiquidity( - amount: BigNumberish, - onBehalfOf: string, - referralCode: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - addressProvider(overrides?: CallOverrides): Promise; - - availableLiquidity(overrides?: CallOverrides): Promise; - - borrowAPY_RAY(overrides?: CallOverrides): Promise; - - calcLinearCumulative_RAY(overrides?: CallOverrides): Promise; - - calcLinearIndex_RAY( - cumulativeIndex_RAY: BigNumberish, - currentBorrowRate_RAY: BigNumberish, - timeDifference: BigNumberish, - overrides?: CallOverrides - ): Promise; - - connectCreditManager( - _creditManager: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - creditManagers( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - creditManagersCanBorrow( - arg0: string, - overrides?: CallOverrides - ): Promise; - - creditManagersCanRepay( - arg0: string, - overrides?: CallOverrides - ): Promise; - - creditManagersCount(overrides?: CallOverrides): Promise; - - dieselToken(overrides?: CallOverrides): Promise; - - expectedLiquidity(overrides?: CallOverrides): Promise; - - expectedLiquidityLimit(overrides?: CallOverrides): Promise; - - forbidCreditManagerToBorrow( - _creditManager: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fromDiesel( - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getCumulativeIndex_RAY(overrides?: CallOverrides): Promise; - - getDieselRate_RAY(overrides?: CallOverrides): Promise; - - getExpectedLU(overrides?: CallOverrides): Promise; - - getTimestampLU(overrides?: CallOverrides): Promise; - - interestRateModel(overrides?: CallOverrides): Promise; - - lendCreditAccount( - borrowedAmount: BigNumberish, - creditAccount: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise; - - removeLiquidity( - amount: BigNumberish, - to: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - repayCreditAccount( - borrowedAmount: BigNumberish, - profit: BigNumberish, - loss: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setExpectedLiquidity( - newExpectedLiquidity: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setExpectedLiquidityLimit( - newLimit: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setWithdrawFee( - fee: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - toDiesel(amount: BigNumberish, overrides?: CallOverrides): Promise; - - totalBorrowed(overrides?: CallOverrides): Promise; - - treasuryAddress(overrides?: CallOverrides): Promise; - - underlyingToken(overrides?: CallOverrides): Promise; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - updateBorrowRate( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - updateInterestRateModel( - _interestRateModel: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise; - - withdrawFee(overrides?: CallOverrides): Promise; - - callStatic: { - _acl(overrides?: CallOverrides): Promise; - - _cumulativeIndex_RAY(overrides?: CallOverrides): Promise; - - _expectedLiquidityLU(overrides?: CallOverrides): Promise; - - _timestampLU(overrides?: CallOverrides): Promise; - - addLiquidity( - amount: BigNumberish, - onBehalfOf: string, - referralCode: BigNumberish, - overrides?: CallOverrides - ): Promise; - - addressProvider(overrides?: CallOverrides): Promise; - - availableLiquidity(overrides?: CallOverrides): Promise; - - borrowAPY_RAY(overrides?: CallOverrides): Promise; - - calcLinearCumulative_RAY(overrides?: CallOverrides): Promise; - - calcLinearIndex_RAY( - cumulativeIndex_RAY: BigNumberish, - currentBorrowRate_RAY: BigNumberish, - timeDifference: BigNumberish, - overrides?: CallOverrides - ): Promise; - - connectCreditManager( - _creditManager: string, - overrides?: CallOverrides - ): Promise; - - creditManagers( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - creditManagersCanBorrow( - arg0: string, - overrides?: CallOverrides - ): Promise; - - creditManagersCanRepay( - arg0: string, - overrides?: CallOverrides - ): Promise; - - creditManagersCount(overrides?: CallOverrides): Promise; - - dieselToken(overrides?: CallOverrides): Promise; - - expectedLiquidity(overrides?: CallOverrides): Promise; - - expectedLiquidityLimit(overrides?: CallOverrides): Promise; - - forbidCreditManagerToBorrow( - _creditManager: string, - overrides?: CallOverrides - ): Promise; - - fromDiesel( - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getCumulativeIndex_RAY(overrides?: CallOverrides): Promise; - - getDieselRate_RAY(overrides?: CallOverrides): Promise; - - getExpectedLU(overrides?: CallOverrides): Promise; - - getTimestampLU(overrides?: CallOverrides): Promise; - - interestRateModel(overrides?: CallOverrides): Promise; - - lendCreditAccount( - borrowedAmount: BigNumberish, - creditAccount: string, - overrides?: CallOverrides - ): Promise; - - pause(overrides?: CallOverrides): Promise; - - paused(overrides?: CallOverrides): Promise; - - removeLiquidity( - amount: BigNumberish, - to: string, - overrides?: CallOverrides - ): Promise; - - repayCreditAccount( - borrowedAmount: BigNumberish, - profit: BigNumberish, - loss: BigNumberish, - overrides?: CallOverrides - ): Promise; - - setExpectedLiquidity( - newExpectedLiquidity: BigNumberish, - overrides?: CallOverrides - ): Promise; - - setExpectedLiquidityLimit( - newLimit: BigNumberish, - overrides?: CallOverrides - ): Promise; - - setWithdrawFee(fee: BigNumberish, overrides?: CallOverrides): Promise; - - toDiesel( - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - totalBorrowed(overrides?: CallOverrides): Promise; - - treasuryAddress(overrides?: CallOverrides): Promise; - - underlyingToken(overrides?: CallOverrides): Promise; - - unpause(overrides?: CallOverrides): Promise; - - updateBorrowRate(overrides?: CallOverrides): Promise; - - updateInterestRateModel( - _interestRateModel: string, - overrides?: CallOverrides - ): Promise; - - version(overrides?: CallOverrides): Promise; - - withdrawFee(overrides?: CallOverrides): Promise; - }; - - filters: { - "AddLiquidity(address,address,uint256,uint256)"( - sender?: string | null, - onBehalfOf?: string | null, - amount?: null, - referralCode?: null - ): AddLiquidityEventFilter; - AddLiquidity( - sender?: string | null, - onBehalfOf?: string | null, - amount?: null, - referralCode?: null - ): AddLiquidityEventFilter; - - "Borrow(address,address,uint256)"( - creditManager?: string | null, - creditAccount?: string | null, - amount?: null - ): BorrowEventFilter; - Borrow( - creditManager?: string | null, - creditAccount?: string | null, - amount?: null - ): BorrowEventFilter; - - "BorrowForbidden(address)"( - creditManager?: string | null - ): BorrowForbiddenEventFilter; - BorrowForbidden(creditManager?: string | null): BorrowForbiddenEventFilter; - - "NewCreditManagerConnected(address)"( - creditManager?: string | null - ): NewCreditManagerConnectedEventFilter; - NewCreditManagerConnected( - creditManager?: string | null - ): NewCreditManagerConnectedEventFilter; - - "NewExpectedLiquidityLimit(uint256)"( - newLimit?: null - ): NewExpectedLiquidityLimitEventFilter; - NewExpectedLiquidityLimit( - newLimit?: null - ): NewExpectedLiquidityLimitEventFilter; - - "NewInterestRateModel(address)"( - newInterestRateModel?: string | null - ): NewInterestRateModelEventFilter; - NewInterestRateModel( - newInterestRateModel?: string | null - ): NewInterestRateModelEventFilter; - - "NewWithdrawFee(uint256)"(fee?: null): NewWithdrawFeeEventFilter; - NewWithdrawFee(fee?: null): NewWithdrawFeeEventFilter; - - "Paused(address)"(account?: null): PausedEventFilter; - Paused(account?: null): PausedEventFilter; - - "RemoveLiquidity(address,address,uint256)"( - sender?: string | null, - to?: string | null, - amount?: null - ): RemoveLiquidityEventFilter; - RemoveLiquidity( - sender?: string | null, - to?: string | null, - amount?: null - ): RemoveLiquidityEventFilter; - - "Repay(address,uint256,uint256,uint256)"( - creditManager?: string | null, - borrowedAmount?: null, - profit?: null, - loss?: null - ): RepayEventFilter; - Repay( - creditManager?: string | null, - borrowedAmount?: null, - profit?: null, - loss?: null - ): RepayEventFilter; - - "UncoveredLoss(address,uint256)"( - creditManager?: string | null, - loss?: null - ): UncoveredLossEventFilter; - UncoveredLoss( - creditManager?: string | null, - loss?: null - ): UncoveredLossEventFilter; - - "Unpaused(address)"(account?: null): UnpausedEventFilter; - Unpaused(account?: null): UnpausedEventFilter; - }; - - estimateGas: { - _acl(overrides?: CallOverrides): Promise; - - _cumulativeIndex_RAY(overrides?: CallOverrides): Promise; - - _expectedLiquidityLU(overrides?: CallOverrides): Promise; - - _timestampLU(overrides?: CallOverrides): Promise; - - addLiquidity( - amount: BigNumberish, - onBehalfOf: string, - referralCode: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - addressProvider(overrides?: CallOverrides): Promise; - - availableLiquidity(overrides?: CallOverrides): Promise; - - borrowAPY_RAY(overrides?: CallOverrides): Promise; - - calcLinearCumulative_RAY(overrides?: CallOverrides): Promise; - - calcLinearIndex_RAY( - cumulativeIndex_RAY: BigNumberish, - currentBorrowRate_RAY: BigNumberish, - timeDifference: BigNumberish, - overrides?: CallOverrides - ): Promise; - - connectCreditManager( - _creditManager: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - creditManagers( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - creditManagersCanBorrow( - arg0: string, - overrides?: CallOverrides - ): Promise; - - creditManagersCanRepay( - arg0: string, - overrides?: CallOverrides - ): Promise; - - creditManagersCount(overrides?: CallOverrides): Promise; - - dieselToken(overrides?: CallOverrides): Promise; - - expectedLiquidity(overrides?: CallOverrides): Promise; - - expectedLiquidityLimit(overrides?: CallOverrides): Promise; - - forbidCreditManagerToBorrow( - _creditManager: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fromDiesel( - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getCumulativeIndex_RAY(overrides?: CallOverrides): Promise; - - getDieselRate_RAY(overrides?: CallOverrides): Promise; - - getExpectedLU(overrides?: CallOverrides): Promise; - - getTimestampLU(overrides?: CallOverrides): Promise; - - interestRateModel(overrides?: CallOverrides): Promise; - - lendCreditAccount( - borrowedAmount: BigNumberish, - creditAccount: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise; - - removeLiquidity( - amount: BigNumberish, - to: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - repayCreditAccount( - borrowedAmount: BigNumberish, - profit: BigNumberish, - loss: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setExpectedLiquidity( - newExpectedLiquidity: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setExpectedLiquidityLimit( - newLimit: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setWithdrawFee( - fee: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - toDiesel( - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - totalBorrowed(overrides?: CallOverrides): Promise; - - treasuryAddress(overrides?: CallOverrides): Promise; - - underlyingToken(overrides?: CallOverrides): Promise; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - updateBorrowRate( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - updateInterestRateModel( - _interestRateModel: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise; - - withdrawFee(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - _acl(overrides?: CallOverrides): Promise; - - _cumulativeIndex_RAY( - overrides?: CallOverrides - ): Promise; - - _expectedLiquidityLU( - overrides?: CallOverrides - ): Promise; - - _timestampLU(overrides?: CallOverrides): Promise; - - addLiquidity( - amount: BigNumberish, - onBehalfOf: string, - referralCode: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - addressProvider(overrides?: CallOverrides): Promise; - - availableLiquidity( - overrides?: CallOverrides - ): Promise; - - borrowAPY_RAY(overrides?: CallOverrides): Promise; - - calcLinearCumulative_RAY( - overrides?: CallOverrides - ): Promise; - - calcLinearIndex_RAY( - cumulativeIndex_RAY: BigNumberish, - currentBorrowRate_RAY: BigNumberish, - timeDifference: BigNumberish, - overrides?: CallOverrides - ): Promise; - - connectCreditManager( - _creditManager: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - creditManagers( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - creditManagersCanBorrow( - arg0: string, - overrides?: CallOverrides - ): Promise; - - creditManagersCanRepay( - arg0: string, - overrides?: CallOverrides - ): Promise; - - creditManagersCount( - overrides?: CallOverrides - ): Promise; - - dieselToken(overrides?: CallOverrides): Promise; - - expectedLiquidity(overrides?: CallOverrides): Promise; - - expectedLiquidityLimit( - overrides?: CallOverrides - ): Promise; - - forbidCreditManagerToBorrow( - _creditManager: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fromDiesel( - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getCumulativeIndex_RAY( - overrides?: CallOverrides - ): Promise; - - getDieselRate_RAY(overrides?: CallOverrides): Promise; - - getExpectedLU(overrides?: CallOverrides): Promise; - - getTimestampLU(overrides?: CallOverrides): Promise; - - interestRateModel(overrides?: CallOverrides): Promise; - - lendCreditAccount( - borrowedAmount: BigNumberish, - creditAccount: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise; - - removeLiquidity( - amount: BigNumberish, - to: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - repayCreditAccount( - borrowedAmount: BigNumberish, - profit: BigNumberish, - loss: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setExpectedLiquidity( - newExpectedLiquidity: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setExpectedLiquidityLimit( - newLimit: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setWithdrawFee( - fee: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - toDiesel( - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - totalBorrowed(overrides?: CallOverrides): Promise; - - treasuryAddress(overrides?: CallOverrides): Promise; - - underlyingToken(overrides?: CallOverrides): Promise; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - updateBorrowRate( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - updateInterestRateModel( - _interestRateModel: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise; - - withdrawFee(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/test/mocks/pool/index.ts b/src/types/contracts/test/mocks/pool/index.ts deleted file mode 100644 index a07f54f8..00000000 --- a/src/types/contracts/test/mocks/pool/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { CreditManagerMockForPoolTest } from "./CreditManagerMockForPoolTest"; -export type { PoolServiceMock } from "./PoolServiceMock"; -export type { TestPoolService } from "./TestPoolService"; diff --git a/src/types/contracts/test/mocks/token/CERC20Mock.ts b/src/types/contracts/test/mocks/token/CERC20Mock.ts deleted file mode 100644 index 26b8c84f..00000000 --- a/src/types/contracts/test/mocks/token/CERC20Mock.ts +++ /dev/null @@ -1,635 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface CERC20MockInterface extends utils.Interface { - functions: { - "allowance(address,address)": FunctionFragment; - "approve(address,uint256)": FunctionFragment; - "balanceOf(address)": FunctionFragment; - "decimals()": FunctionFragment; - "decreaseAllowance(address,uint256)": FunctionFragment; - "increaseAllowance(address,uint256)": FunctionFragment; - "mint(address,uint256)": FunctionFragment; - "name()": FunctionFragment; - "owner()": FunctionFragment; - "redeem(address,uint256)": FunctionFragment; - "renounceOwnership()": FunctionFragment; - "symbol()": FunctionFragment; - "totalSupply()": FunctionFragment; - "transfer(address,uint256)": FunctionFragment; - "transferFrom(address,address,uint256)": FunctionFragment; - "transferOwnership(address)": FunctionFragment; - "underlying()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "allowance" - | "approve" - | "balanceOf" - | "decimals" - | "decreaseAllowance" - | "increaseAllowance" - | "mint" - | "name" - | "owner" - | "redeem" - | "renounceOwnership" - | "symbol" - | "totalSupply" - | "transfer" - | "transferFrom" - | "transferOwnership" - | "underlying" - ): FunctionFragment; - - encodeFunctionData( - functionFragment: "allowance", - values: [string, string] - ): string; - encodeFunctionData( - functionFragment: "approve", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "balanceOf", values: [string]): string; - encodeFunctionData(functionFragment: "decimals", values?: undefined): string; - encodeFunctionData( - functionFragment: "decreaseAllowance", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "increaseAllowance", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "mint", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "name", values?: undefined): string; - encodeFunctionData(functionFragment: "owner", values?: undefined): string; - encodeFunctionData( - functionFragment: "redeem", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "renounceOwnership", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "symbol", values?: undefined): string; - encodeFunctionData( - functionFragment: "totalSupply", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "transfer", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "transferFrom", - values: [string, string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "transferOwnership", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "underlying", - values?: undefined - ): string; - - decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "decreaseAllowance", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "increaseAllowance", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "mint", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "redeem", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "renounceOwnership", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "totalSupply", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "transfer", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "transferFrom", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "transferOwnership", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "underlying", data: BytesLike): Result; - - events: { - "Approval(address,address,uint256)": EventFragment; - "OwnershipTransferred(address,address)": EventFragment; - "Transfer(address,address,uint256)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "Approval"): EventFragment; - getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment; -} - -export interface ApprovalEventObject { - owner: string; - spender: string; - value: BigNumber; -} -export type ApprovalEvent = TypedEvent< - [string, string, BigNumber], - ApprovalEventObject ->; - -export type ApprovalEventFilter = TypedEventFilter; - -export interface OwnershipTransferredEventObject { - previousOwner: string; - newOwner: string; -} -export type OwnershipTransferredEvent = TypedEvent< - [string, string], - OwnershipTransferredEventObject ->; - -export type OwnershipTransferredEventFilter = - TypedEventFilter; - -export interface TransferEventObject { - from: string; - to: string; - value: BigNumber; -} -export type TransferEvent = TypedEvent< - [string, string, BigNumber], - TransferEventObject ->; - -export type TransferEventFilter = TypedEventFilter; - -export interface CERC20Mock extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: CERC20MockInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - approve( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise<[BigNumber]>; - - decimals(overrides?: CallOverrides): Promise<[number]>; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - mint( - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise<[string]>; - - owner(overrides?: CallOverrides): Promise<[string]>; - - redeem( - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise<[string]>; - - totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise<[string]>; - }; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - mint( - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - redeem( - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - - callStatic: { - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: CallOverrides - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: CallOverrides - ): Promise; - - mint( - to: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - redeem( - to: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - renounceOwnership(overrides?: CallOverrides): Promise; - - symbol(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: CallOverrides - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - }; - - filters: { - "Approval(address,address,uint256)"( - owner?: string | null, - spender?: string | null, - value?: null - ): ApprovalEventFilter; - Approval( - owner?: string | null, - spender?: string | null, - value?: null - ): ApprovalEventFilter; - - "OwnershipTransferred(address,address)"( - previousOwner?: string | null, - newOwner?: string | null - ): OwnershipTransferredEventFilter; - OwnershipTransferred( - previousOwner?: string | null, - newOwner?: string | null - ): OwnershipTransferredEventFilter; - - "Transfer(address,address,uint256)"( - from?: string | null, - to?: string | null, - value?: null - ): TransferEventFilter; - Transfer( - from?: string | null, - to?: string | null, - value?: null - ): TransferEventFilter; - }; - - estimateGas: { - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - mint( - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - redeem( - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf( - account: string, - overrides?: CallOverrides - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - mint( - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - redeem( - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/test/mocks/token/ERC20ApproveRestricted.sol/ERC20ApproveRestrictedFalse.ts b/src/types/contracts/test/mocks/token/ERC20ApproveRestricted.sol/ERC20ApproveRestrictedFalse.ts deleted file mode 100644 index e9c966c3..00000000 --- a/src/types/contracts/test/mocks/token/ERC20ApproveRestricted.sol/ERC20ApproveRestrictedFalse.ts +++ /dev/null @@ -1,544 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../../common"; - -export interface ERC20ApproveRestrictedFalseInterface extends utils.Interface { - functions: { - "allowance(address,address)": FunctionFragment; - "approve(address,uint256)": FunctionFragment; - "balanceOf(address)": FunctionFragment; - "decimals()": FunctionFragment; - "decreaseAllowance(address,uint256)": FunctionFragment; - "increaseAllowance(address,uint256)": FunctionFragment; - "name()": FunctionFragment; - "owner()": FunctionFragment; - "renounceOwnership()": FunctionFragment; - "symbol()": FunctionFragment; - "totalSupply()": FunctionFragment; - "transfer(address,uint256)": FunctionFragment; - "transferFrom(address,address,uint256)": FunctionFragment; - "transferOwnership(address)": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "allowance" - | "approve" - | "balanceOf" - | "decimals" - | "decreaseAllowance" - | "increaseAllowance" - | "name" - | "owner" - | "renounceOwnership" - | "symbol" - | "totalSupply" - | "transfer" - | "transferFrom" - | "transferOwnership" - ): FunctionFragment; - - encodeFunctionData( - functionFragment: "allowance", - values: [string, string] - ): string; - encodeFunctionData( - functionFragment: "approve", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "balanceOf", values: [string]): string; - encodeFunctionData(functionFragment: "decimals", values?: undefined): string; - encodeFunctionData( - functionFragment: "decreaseAllowance", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "increaseAllowance", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "name", values?: undefined): string; - encodeFunctionData(functionFragment: "owner", values?: undefined): string; - encodeFunctionData( - functionFragment: "renounceOwnership", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "symbol", values?: undefined): string; - encodeFunctionData( - functionFragment: "totalSupply", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "transfer", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "transferFrom", - values: [string, string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "transferOwnership", - values: [string] - ): string; - - decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "decreaseAllowance", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "increaseAllowance", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "renounceOwnership", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "totalSupply", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "transfer", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "transferFrom", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "transferOwnership", - data: BytesLike - ): Result; - - events: { - "Approval(address,address,uint256)": EventFragment; - "OwnershipTransferred(address,address)": EventFragment; - "Transfer(address,address,uint256)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "Approval"): EventFragment; - getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment; -} - -export interface ApprovalEventObject { - owner: string; - spender: string; - value: BigNumber; -} -export type ApprovalEvent = TypedEvent< - [string, string, BigNumber], - ApprovalEventObject ->; - -export type ApprovalEventFilter = TypedEventFilter; - -export interface OwnershipTransferredEventObject { - previousOwner: string; - newOwner: string; -} -export type OwnershipTransferredEvent = TypedEvent< - [string, string], - OwnershipTransferredEventObject ->; - -export type OwnershipTransferredEventFilter = - TypedEventFilter; - -export interface TransferEventObject { - from: string; - to: string; - value: BigNumber; -} -export type TransferEvent = TypedEvent< - [string, string, BigNumber], - TransferEventObject ->; - -export type TransferEventFilter = TypedEventFilter; - -export interface ERC20ApproveRestrictedFalse extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: ERC20ApproveRestrictedFalseInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - approve( - user: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise<[BigNumber]>; - - decimals(overrides?: CallOverrides): Promise<[number]>; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise<[string]>; - - owner(overrides?: CallOverrides): Promise<[string]>; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise<[string]>; - - totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - user: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - user: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: CallOverrides - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - renounceOwnership(overrides?: CallOverrides): Promise; - - symbol(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - "Approval(address,address,uint256)"( - owner?: string | null, - spender?: string | null, - value?: null - ): ApprovalEventFilter; - Approval( - owner?: string | null, - spender?: string | null, - value?: null - ): ApprovalEventFilter; - - "OwnershipTransferred(address,address)"( - previousOwner?: string | null, - newOwner?: string | null - ): OwnershipTransferredEventFilter; - OwnershipTransferred( - previousOwner?: string | null, - newOwner?: string | null - ): OwnershipTransferredEventFilter; - - "Transfer(address,address,uint256)"( - from?: string | null, - to?: string | null, - value?: null - ): TransferEventFilter; - Transfer( - from?: string | null, - to?: string | null, - value?: null - ): TransferEventFilter; - }; - - estimateGas: { - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - user: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - user: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf( - account: string, - overrides?: CallOverrides - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/src/types/contracts/test/mocks/token/ERC20ApproveRestricted.sol/ERC20ApproveRestrictedRevert.ts b/src/types/contracts/test/mocks/token/ERC20ApproveRestricted.sol/ERC20ApproveRestrictedRevert.ts deleted file mode 100644 index e42a88ba..00000000 --- a/src/types/contracts/test/mocks/token/ERC20ApproveRestricted.sol/ERC20ApproveRestrictedRevert.ts +++ /dev/null @@ -1,544 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../../common"; - -export interface ERC20ApproveRestrictedRevertInterface extends utils.Interface { - functions: { - "allowance(address,address)": FunctionFragment; - "approve(address,uint256)": FunctionFragment; - "balanceOf(address)": FunctionFragment; - "decimals()": FunctionFragment; - "decreaseAllowance(address,uint256)": FunctionFragment; - "increaseAllowance(address,uint256)": FunctionFragment; - "name()": FunctionFragment; - "owner()": FunctionFragment; - "renounceOwnership()": FunctionFragment; - "symbol()": FunctionFragment; - "totalSupply()": FunctionFragment; - "transfer(address,uint256)": FunctionFragment; - "transferFrom(address,address,uint256)": FunctionFragment; - "transferOwnership(address)": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "allowance" - | "approve" - | "balanceOf" - | "decimals" - | "decreaseAllowance" - | "increaseAllowance" - | "name" - | "owner" - | "renounceOwnership" - | "symbol" - | "totalSupply" - | "transfer" - | "transferFrom" - | "transferOwnership" - ): FunctionFragment; - - encodeFunctionData( - functionFragment: "allowance", - values: [string, string] - ): string; - encodeFunctionData( - functionFragment: "approve", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "balanceOf", values: [string]): string; - encodeFunctionData(functionFragment: "decimals", values?: undefined): string; - encodeFunctionData( - functionFragment: "decreaseAllowance", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "increaseAllowance", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "name", values?: undefined): string; - encodeFunctionData(functionFragment: "owner", values?: undefined): string; - encodeFunctionData( - functionFragment: "renounceOwnership", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "symbol", values?: undefined): string; - encodeFunctionData( - functionFragment: "totalSupply", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "transfer", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "transferFrom", - values: [string, string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "transferOwnership", - values: [string] - ): string; - - decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "decreaseAllowance", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "increaseAllowance", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "renounceOwnership", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "totalSupply", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "transfer", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "transferFrom", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "transferOwnership", - data: BytesLike - ): Result; - - events: { - "Approval(address,address,uint256)": EventFragment; - "OwnershipTransferred(address,address)": EventFragment; - "Transfer(address,address,uint256)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "Approval"): EventFragment; - getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment; -} - -export interface ApprovalEventObject { - owner: string; - spender: string; - value: BigNumber; -} -export type ApprovalEvent = TypedEvent< - [string, string, BigNumber], - ApprovalEventObject ->; - -export type ApprovalEventFilter = TypedEventFilter; - -export interface OwnershipTransferredEventObject { - previousOwner: string; - newOwner: string; -} -export type OwnershipTransferredEvent = TypedEvent< - [string, string], - OwnershipTransferredEventObject ->; - -export type OwnershipTransferredEventFilter = - TypedEventFilter; - -export interface TransferEventObject { - from: string; - to: string; - value: BigNumber; -} -export type TransferEvent = TypedEvent< - [string, string, BigNumber], - TransferEventObject ->; - -export type TransferEventFilter = TypedEventFilter; - -export interface ERC20ApproveRestrictedRevert extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: ERC20ApproveRestrictedRevertInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - approve( - user: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise<[BigNumber]>; - - decimals(overrides?: CallOverrides): Promise<[number]>; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise<[string]>; - - owner(overrides?: CallOverrides): Promise<[string]>; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise<[string]>; - - totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - user: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - user: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: CallOverrides - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - renounceOwnership(overrides?: CallOverrides): Promise; - - symbol(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - "Approval(address,address,uint256)"( - owner?: string | null, - spender?: string | null, - value?: null - ): ApprovalEventFilter; - Approval( - owner?: string | null, - spender?: string | null, - value?: null - ): ApprovalEventFilter; - - "OwnershipTransferred(address,address)"( - previousOwner?: string | null, - newOwner?: string | null - ): OwnershipTransferredEventFilter; - OwnershipTransferred( - previousOwner?: string | null, - newOwner?: string | null - ): OwnershipTransferredEventFilter; - - "Transfer(address,address,uint256)"( - from?: string | null, - to?: string | null, - value?: null - ): TransferEventFilter; - Transfer( - from?: string | null, - to?: string | null, - value?: null - ): TransferEventFilter; - }; - - estimateGas: { - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - user: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - user: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf( - account: string, - overrides?: CallOverrides - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/src/types/contracts/test/mocks/token/ERC20ApproveRestricted.sol/index.ts b/src/types/contracts/test/mocks/token/ERC20ApproveRestricted.sol/index.ts deleted file mode 100644 index 8d36e1e0..00000000 --- a/src/types/contracts/test/mocks/token/ERC20ApproveRestricted.sol/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { ERC20ApproveRestrictedFalse } from "./ERC20ApproveRestrictedFalse"; -export type { ERC20ApproveRestrictedRevert } from "./ERC20ApproveRestrictedRevert"; diff --git a/src/types/contracts/test/mocks/token/ERC20Blocking.sol/ERC20BlockingMock.ts b/src/types/contracts/test/mocks/token/ERC20Blocking.sol/ERC20BlockingMock.ts deleted file mode 100644 index 6a743220..00000000 --- a/src/types/contracts/test/mocks/token/ERC20Blocking.sol/ERC20BlockingMock.ts +++ /dev/null @@ -1,620 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../../common"; - -export interface ERC20BlockingMockInterface extends utils.Interface { - functions: { - "allowance(address,address)": FunctionFragment; - "approve(address,uint256)": FunctionFragment; - "balanceOf(address)": FunctionFragment; - "blockToken()": FunctionFragment; - "decimals()": FunctionFragment; - "decreaseAllowance(address,uint256)": FunctionFragment; - "increaseAllowance(address,uint256)": FunctionFragment; - "isBlocked()": FunctionFragment; - "mint(address,uint256)": FunctionFragment; - "name()": FunctionFragment; - "owner()": FunctionFragment; - "renounceOwnership()": FunctionFragment; - "symbol()": FunctionFragment; - "totalSupply()": FunctionFragment; - "transfer(address,uint256)": FunctionFragment; - "transferFrom(address,address,uint256)": FunctionFragment; - "transferOwnership(address)": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "allowance" - | "approve" - | "balanceOf" - | "blockToken" - | "decimals" - | "decreaseAllowance" - | "increaseAllowance" - | "isBlocked" - | "mint" - | "name" - | "owner" - | "renounceOwnership" - | "symbol" - | "totalSupply" - | "transfer" - | "transferFrom" - | "transferOwnership" - ): FunctionFragment; - - encodeFunctionData( - functionFragment: "allowance", - values: [string, string] - ): string; - encodeFunctionData( - functionFragment: "approve", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "balanceOf", values: [string]): string; - encodeFunctionData( - functionFragment: "blockToken", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "decimals", values?: undefined): string; - encodeFunctionData( - functionFragment: "decreaseAllowance", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "increaseAllowance", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "isBlocked", values?: undefined): string; - encodeFunctionData( - functionFragment: "mint", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "name", values?: undefined): string; - encodeFunctionData(functionFragment: "owner", values?: undefined): string; - encodeFunctionData( - functionFragment: "renounceOwnership", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "symbol", values?: undefined): string; - encodeFunctionData( - functionFragment: "totalSupply", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "transfer", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "transferFrom", - values: [string, string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "transferOwnership", - values: [string] - ): string; - - decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "blockToken", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "decreaseAllowance", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "increaseAllowance", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "isBlocked", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "mint", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "renounceOwnership", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "totalSupply", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "transfer", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "transferFrom", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "transferOwnership", - data: BytesLike - ): Result; - - events: { - "Approval(address,address,uint256)": EventFragment; - "OwnershipTransferred(address,address)": EventFragment; - "Transfer(address,address,uint256)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "Approval"): EventFragment; - getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment; -} - -export interface ApprovalEventObject { - owner: string; - spender: string; - value: BigNumber; -} -export type ApprovalEvent = TypedEvent< - [string, string, BigNumber], - ApprovalEventObject ->; - -export type ApprovalEventFilter = TypedEventFilter; - -export interface OwnershipTransferredEventObject { - previousOwner: string; - newOwner: string; -} -export type OwnershipTransferredEvent = TypedEvent< - [string, string], - OwnershipTransferredEventObject ->; - -export type OwnershipTransferredEventFilter = - TypedEventFilter; - -export interface TransferEventObject { - from: string; - to: string; - value: BigNumber; -} -export type TransferEvent = TypedEvent< - [string, string, BigNumber], - TransferEventObject ->; - -export type TransferEventFilter = TypedEventFilter; - -export interface ERC20BlockingMock extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: ERC20BlockingMockInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - approve( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise<[BigNumber]>; - - blockToken( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - decimals(overrides?: CallOverrides): Promise<[number]>; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - isBlocked(overrides?: CallOverrides): Promise<[boolean]>; - - mint( - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise<[string]>; - - owner(overrides?: CallOverrides): Promise<[string]>; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise<[string]>; - - totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - blockToken( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - isBlocked(overrides?: CallOverrides): Promise; - - mint( - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - blockToken(overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: CallOverrides - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isBlocked(overrides?: CallOverrides): Promise; - - mint( - to: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - renounceOwnership(overrides?: CallOverrides): Promise; - - symbol(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - "Approval(address,address,uint256)"( - owner?: string | null, - spender?: string | null, - value?: null - ): ApprovalEventFilter; - Approval( - owner?: string | null, - spender?: string | null, - value?: null - ): ApprovalEventFilter; - - "OwnershipTransferred(address,address)"( - previousOwner?: string | null, - newOwner?: string | null - ): OwnershipTransferredEventFilter; - OwnershipTransferred( - previousOwner?: string | null, - newOwner?: string | null - ): OwnershipTransferredEventFilter; - - "Transfer(address,address,uint256)"( - from?: string | null, - to?: string | null, - value?: null - ): TransferEventFilter; - Transfer( - from?: string | null, - to?: string | null, - value?: null - ): TransferEventFilter; - }; - - estimateGas: { - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - blockToken( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - isBlocked(overrides?: CallOverrides): Promise; - - mint( - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf( - account: string, - overrides?: CallOverrides - ): Promise; - - blockToken( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - isBlocked(overrides?: CallOverrides): Promise; - - mint( - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/src/types/contracts/test/mocks/token/ERC20Blocking.sol/index.ts b/src/types/contracts/test/mocks/token/ERC20Blocking.sol/index.ts deleted file mode 100644 index ab9d24bc..00000000 --- a/src/types/contracts/test/mocks/token/ERC20Blocking.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { ERC20BlockingMock } from "./ERC20BlockingMock"; diff --git a/src/types/contracts/test/mocks/token/ERC20Fee.sol/TokenFeeMock.ts b/src/types/contracts/test/mocks/token/ERC20Fee.sol/TokenFeeMock.ts deleted file mode 100644 index 321bcd8e..00000000 --- a/src/types/contracts/test/mocks/token/ERC20Fee.sol/TokenFeeMock.ts +++ /dev/null @@ -1,595 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../../common"; - -export interface TokenFeeMockInterface extends utils.Interface { - functions: { - "allowance(address,address)": FunctionFragment; - "approve(address,uint256)": FunctionFragment; - "balanceOf(address)": FunctionFragment; - "decimals()": FunctionFragment; - "decreaseAllowance(address,uint256)": FunctionFragment; - "fee()": FunctionFragment; - "increaseAllowance(address,uint256)": FunctionFragment; - "mint(address,uint256)": FunctionFragment; - "name()": FunctionFragment; - "owner()": FunctionFragment; - "renounceOwnership()": FunctionFragment; - "symbol()": FunctionFragment; - "totalSupply()": FunctionFragment; - "transfer(address,uint256)": FunctionFragment; - "transferFrom(address,address,uint256)": FunctionFragment; - "transferOwnership(address)": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "allowance" - | "approve" - | "balanceOf" - | "decimals" - | "decreaseAllowance" - | "fee" - | "increaseAllowance" - | "mint" - | "name" - | "owner" - | "renounceOwnership" - | "symbol" - | "totalSupply" - | "transfer" - | "transferFrom" - | "transferOwnership" - ): FunctionFragment; - - encodeFunctionData( - functionFragment: "allowance", - values: [string, string] - ): string; - encodeFunctionData( - functionFragment: "approve", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "balanceOf", values: [string]): string; - encodeFunctionData(functionFragment: "decimals", values?: undefined): string; - encodeFunctionData( - functionFragment: "decreaseAllowance", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "fee", values?: undefined): string; - encodeFunctionData( - functionFragment: "increaseAllowance", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "mint", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "name", values?: undefined): string; - encodeFunctionData(functionFragment: "owner", values?: undefined): string; - encodeFunctionData( - functionFragment: "renounceOwnership", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "symbol", values?: undefined): string; - encodeFunctionData( - functionFragment: "totalSupply", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "transfer", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "transferFrom", - values: [string, string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "transferOwnership", - values: [string] - ): string; - - decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "decreaseAllowance", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "fee", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "increaseAllowance", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "mint", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "renounceOwnership", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "totalSupply", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "transfer", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "transferFrom", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "transferOwnership", - data: BytesLike - ): Result; - - events: { - "Approval(address,address,uint256)": EventFragment; - "OwnershipTransferred(address,address)": EventFragment; - "Transfer(address,address,uint256)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "Approval"): EventFragment; - getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment; -} - -export interface ApprovalEventObject { - owner: string; - spender: string; - value: BigNumber; -} -export type ApprovalEvent = TypedEvent< - [string, string, BigNumber], - ApprovalEventObject ->; - -export type ApprovalEventFilter = TypedEventFilter; - -export interface OwnershipTransferredEventObject { - previousOwner: string; - newOwner: string; -} -export type OwnershipTransferredEvent = TypedEvent< - [string, string], - OwnershipTransferredEventObject ->; - -export type OwnershipTransferredEventFilter = - TypedEventFilter; - -export interface TransferEventObject { - from: string; - to: string; - value: BigNumber; -} -export type TransferEvent = TypedEvent< - [string, string, BigNumber], - TransferEventObject ->; - -export type TransferEventFilter = TypedEventFilter; - -export interface TokenFeeMock extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: TokenFeeMockInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - approve( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise<[BigNumber]>; - - decimals(overrides?: CallOverrides): Promise<[number]>; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fee(overrides?: CallOverrides): Promise<[BigNumber]>; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - mint( - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise<[string]>; - - owner(overrides?: CallOverrides): Promise<[string]>; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise<[string]>; - - totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fee(overrides?: CallOverrides): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - mint( - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: CallOverrides - ): Promise; - - fee(overrides?: CallOverrides): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: CallOverrides - ): Promise; - - mint( - to: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - renounceOwnership(overrides?: CallOverrides): Promise; - - symbol(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - "Approval(address,address,uint256)"( - owner?: string | null, - spender?: string | null, - value?: null - ): ApprovalEventFilter; - Approval( - owner?: string | null, - spender?: string | null, - value?: null - ): ApprovalEventFilter; - - "OwnershipTransferred(address,address)"( - previousOwner?: string | null, - newOwner?: string | null - ): OwnershipTransferredEventFilter; - OwnershipTransferred( - previousOwner?: string | null, - newOwner?: string | null - ): OwnershipTransferredEventFilter; - - "Transfer(address,address,uint256)"( - from?: string | null, - to?: string | null, - value?: null - ): TransferEventFilter; - Transfer( - from?: string | null, - to?: string | null, - value?: null - ): TransferEventFilter; - }; - - estimateGas: { - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fee(overrides?: CallOverrides): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - mint( - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf( - account: string, - overrides?: CallOverrides - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fee(overrides?: CallOverrides): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - mint( - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/src/types/contracts/test/mocks/token/ERC20Fee.sol/index.ts b/src/types/contracts/test/mocks/token/ERC20Fee.sol/index.ts deleted file mode 100644 index ae63d6e4..00000000 --- a/src/types/contracts/test/mocks/token/ERC20Fee.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { TokenFeeMock } from "./TokenFeeMock"; diff --git a/src/types/contracts/test/mocks/token/ERC20Mock.ts b/src/types/contracts/test/mocks/token/ERC20Mock.ts deleted file mode 100644 index 952bbfa4..00000000 --- a/src/types/contracts/test/mocks/token/ERC20Mock.ts +++ /dev/null @@ -1,695 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface ERC20MockInterface extends utils.Interface { - functions: { - "allowance(address,address)": FunctionFragment; - "approve(address,uint256)": FunctionFragment; - "balanceOf(address)": FunctionFragment; - "burn(address,uint256)": FunctionFragment; - "burnFrom(address,uint256)": FunctionFragment; - "decimals()": FunctionFragment; - "decreaseAllowance(address,uint256)": FunctionFragment; - "increaseAllowance(address,uint256)": FunctionFragment; - "mint(address,uint256)": FunctionFragment; - "minter()": FunctionFragment; - "name()": FunctionFragment; - "owner()": FunctionFragment; - "renounceOwnership()": FunctionFragment; - "set_minter(address)": FunctionFragment; - "symbol()": FunctionFragment; - "totalSupply()": FunctionFragment; - "transfer(address,uint256)": FunctionFragment; - "transferFrom(address,address,uint256)": FunctionFragment; - "transferOwnership(address)": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "allowance" - | "approve" - | "balanceOf" - | "burn" - | "burnFrom" - | "decimals" - | "decreaseAllowance" - | "increaseAllowance" - | "mint" - | "minter" - | "name" - | "owner" - | "renounceOwnership" - | "set_minter" - | "symbol" - | "totalSupply" - | "transfer" - | "transferFrom" - | "transferOwnership" - ): FunctionFragment; - - encodeFunctionData( - functionFragment: "allowance", - values: [string, string] - ): string; - encodeFunctionData( - functionFragment: "approve", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "balanceOf", values: [string]): string; - encodeFunctionData( - functionFragment: "burn", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "burnFrom", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "decimals", values?: undefined): string; - encodeFunctionData( - functionFragment: "decreaseAllowance", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "increaseAllowance", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "mint", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "minter", values?: undefined): string; - encodeFunctionData(functionFragment: "name", values?: undefined): string; - encodeFunctionData(functionFragment: "owner", values?: undefined): string; - encodeFunctionData( - functionFragment: "renounceOwnership", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "set_minter", values: [string]): string; - encodeFunctionData(functionFragment: "symbol", values?: undefined): string; - encodeFunctionData( - functionFragment: "totalSupply", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "transfer", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "transferFrom", - values: [string, string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "transferOwnership", - values: [string] - ): string; - - decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "burn", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "burnFrom", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "decreaseAllowance", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "increaseAllowance", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "mint", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "minter", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "renounceOwnership", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "set_minter", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "totalSupply", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "transfer", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "transferFrom", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "transferOwnership", - data: BytesLike - ): Result; - - events: { - "Approval(address,address,uint256)": EventFragment; - "OwnershipTransferred(address,address)": EventFragment; - "Transfer(address,address,uint256)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "Approval"): EventFragment; - getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment; -} - -export interface ApprovalEventObject { - owner: string; - spender: string; - value: BigNumber; -} -export type ApprovalEvent = TypedEvent< - [string, string, BigNumber], - ApprovalEventObject ->; - -export type ApprovalEventFilter = TypedEventFilter; - -export interface OwnershipTransferredEventObject { - previousOwner: string; - newOwner: string; -} -export type OwnershipTransferredEvent = TypedEvent< - [string, string], - OwnershipTransferredEventObject ->; - -export type OwnershipTransferredEventFilter = - TypedEventFilter; - -export interface TransferEventObject { - from: string; - to: string; - value: BigNumber; -} -export type TransferEvent = TypedEvent< - [string, string, BigNumber], - TransferEventObject ->; - -export type TransferEventFilter = TypedEventFilter; - -export interface ERC20Mock extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: ERC20MockInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - approve( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise<[BigNumber]>; - - burn( - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - burnFrom( - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - decimals(overrides?: CallOverrides): Promise<[number]>; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - mint( - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - minter(overrides?: CallOverrides): Promise<[string]>; - - name(overrides?: CallOverrides): Promise<[string]>; - - owner(overrides?: CallOverrides): Promise<[string]>; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - set_minter( - _minter: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise<[string]>; - - totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - burn( - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - burnFrom( - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - mint( - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - minter(overrides?: CallOverrides): Promise; - - name(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - set_minter( - _minter: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - burn( - to: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - burnFrom( - to: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: CallOverrides - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: CallOverrides - ): Promise; - - mint( - to: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - minter(overrides?: CallOverrides): Promise; - - name(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - renounceOwnership(overrides?: CallOverrides): Promise; - - set_minter(_minter: string, overrides?: CallOverrides): Promise; - - symbol(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - "Approval(address,address,uint256)"( - owner?: string | null, - spender?: string | null, - value?: null - ): ApprovalEventFilter; - Approval( - owner?: string | null, - spender?: string | null, - value?: null - ): ApprovalEventFilter; - - "OwnershipTransferred(address,address)"( - previousOwner?: string | null, - newOwner?: string | null - ): OwnershipTransferredEventFilter; - OwnershipTransferred( - previousOwner?: string | null, - newOwner?: string | null - ): OwnershipTransferredEventFilter; - - "Transfer(address,address,uint256)"( - from?: string | null, - to?: string | null, - value?: null - ): TransferEventFilter; - Transfer( - from?: string | null, - to?: string | null, - value?: null - ): TransferEventFilter; - }; - - estimateGas: { - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - burn( - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - burnFrom( - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - mint( - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - minter(overrides?: CallOverrides): Promise; - - name(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - set_minter( - _minter: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf( - account: string, - overrides?: CallOverrides - ): Promise; - - burn( - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - burnFrom( - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - mint( - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - minter(overrides?: CallOverrides): Promise; - - name(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - set_minter( - _minter: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/src/types/contracts/test/mocks/token/ERC20NonCompliant.sol/NonCompliantERC20.ts b/src/types/contracts/test/mocks/token/ERC20NonCompliant.sol/NonCompliantERC20.ts deleted file mode 100644 index d8909652..00000000 --- a/src/types/contracts/test/mocks/token/ERC20NonCompliant.sol/NonCompliantERC20.ts +++ /dev/null @@ -1,105 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../../common"; - -export interface NonCompliantERC20Interface extends utils.Interface { - functions: { - "approve(address,uint256)": FunctionFragment; - }; - - getFunction(nameOrSignatureOrTopic: "approve"): FunctionFragment; - - encodeFunctionData( - functionFragment: "approve", - values: [string, BigNumberish] - ): string; - - decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result; - - events: {}; -} - -export interface NonCompliantERC20 extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: NonCompliantERC20Interface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - approve( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise<[boolean]>; - }; - - approve( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - callStatic: { - approve( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - filters: {}; - - estimateGas: { - approve( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - populateTransaction: { - approve( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; -} diff --git a/src/types/contracts/test/mocks/token/ERC20NonCompliant.sol/index.ts b/src/types/contracts/test/mocks/token/ERC20NonCompliant.sol/index.ts deleted file mode 100644 index 413d2e13..00000000 --- a/src/types/contracts/test/mocks/token/ERC20NonCompliant.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { NonCompliantERC20 } from "./NonCompliantERC20"; diff --git a/src/types/contracts/test/mocks/token/ERC721ReceiverMock.sol/ERC721ReceiverMock.ts b/src/types/contracts/test/mocks/token/ERC721ReceiverMock.sol/ERC721ReceiverMock.ts deleted file mode 100644 index 47d234e0..00000000 --- a/src/types/contracts/test/mocks/token/ERC721ReceiverMock.sol/ERC721ReceiverMock.ts +++ /dev/null @@ -1,118 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../../common"; - -export interface ERC721ReceiverMockInterface extends utils.Interface { - functions: { - "onERC721Received(address,address,uint256,bytes)": FunctionFragment; - }; - - getFunction(nameOrSignatureOrTopic: "onERC721Received"): FunctionFragment; - - encodeFunctionData( - functionFragment: "onERC721Received", - values: [string, string, BigNumberish, BytesLike] - ): string; - - decodeFunctionResult( - functionFragment: "onERC721Received", - data: BytesLike - ): Result; - - events: {}; -} - -export interface ERC721ReceiverMock extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: ERC721ReceiverMockInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - onERC721Received( - arg0: string, - arg1: string, - arg2: BigNumberish, - arg3: BytesLike, - overrides?: CallOverrides - ): Promise<[string]>; - }; - - onERC721Received( - arg0: string, - arg1: string, - arg2: BigNumberish, - arg3: BytesLike, - overrides?: CallOverrides - ): Promise; - - callStatic: { - onERC721Received( - arg0: string, - arg1: string, - arg2: BigNumberish, - arg3: BytesLike, - overrides?: CallOverrides - ): Promise; - }; - - filters: {}; - - estimateGas: { - onERC721Received( - arg0: string, - arg1: string, - arg2: BigNumberish, - arg3: BytesLike, - overrides?: CallOverrides - ): Promise; - }; - - populateTransaction: { - onERC721Received( - arg0: string, - arg1: string, - arg2: BigNumberish, - arg3: BytesLike, - overrides?: CallOverrides - ): Promise; - }; -} diff --git a/src/types/contracts/test/mocks/token/ERC721ReceiverMock.sol/index.ts b/src/types/contracts/test/mocks/token/ERC721ReceiverMock.sol/index.ts index b1e22571..dd183b2e 100644 --- a/src/types/contracts/test/mocks/token/ERC721ReceiverMock.sol/index.ts +++ b/src/types/contracts/test/mocks/token/ERC721ReceiverMock.sol/index.ts @@ -1,5 +1,4 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ -export type { ERC721ReceiverMock } from "./ERC721ReceiverMock"; export type { IERC721Receiver } from "./IERC721Receiver"; diff --git a/src/types/contracts/test/mocks/token/StETHMock.ts b/src/types/contracts/test/mocks/token/StETHMock.ts deleted file mode 100644 index 7da8d9c6..00000000 --- a/src/types/contracts/test/mocks/token/StETHMock.ts +++ /dev/null @@ -1,618 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface StETHMockInterface extends utils.Interface { - functions: { - "allowance(address,address)": FunctionFragment; - "approve(address,uint256)": FunctionFragment; - "balanceOf(address)": FunctionFragment; - "decimals()": FunctionFragment; - "decreaseAllowance(address,uint256)": FunctionFragment; - "getPooledEthByShares(uint256)": FunctionFragment; - "getSharesByPooledEth(uint256)": FunctionFragment; - "getTotalPooledEther()": FunctionFragment; - "getTotalShares()": FunctionFragment; - "increaseAllowance(address,uint256)": FunctionFragment; - "name()": FunctionFragment; - "sharesOf(address)": FunctionFragment; - "symbol()": FunctionFragment; - "totalPooledEtherSynced()": FunctionFragment; - "totalSharesSynced()": FunctionFragment; - "totalSupply()": FunctionFragment; - "transfer(address,uint256)": FunctionFragment; - "transferFrom(address,address,uint256)": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "allowance" - | "approve" - | "balanceOf" - | "decimals" - | "decreaseAllowance" - | "getPooledEthByShares" - | "getSharesByPooledEth" - | "getTotalPooledEther" - | "getTotalShares" - | "increaseAllowance" - | "name" - | "sharesOf" - | "symbol" - | "totalPooledEtherSynced" - | "totalSharesSynced" - | "totalSupply" - | "transfer" - | "transferFrom" - ): FunctionFragment; - - encodeFunctionData( - functionFragment: "allowance", - values: [string, string] - ): string; - encodeFunctionData( - functionFragment: "approve", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "balanceOf", values: [string]): string; - encodeFunctionData(functionFragment: "decimals", values?: undefined): string; - encodeFunctionData( - functionFragment: "decreaseAllowance", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "getPooledEthByShares", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "getSharesByPooledEth", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "getTotalPooledEther", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "getTotalShares", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "increaseAllowance", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "name", values?: undefined): string; - encodeFunctionData(functionFragment: "sharesOf", values: [string]): string; - encodeFunctionData(functionFragment: "symbol", values?: undefined): string; - encodeFunctionData( - functionFragment: "totalPooledEtherSynced", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "totalSharesSynced", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "totalSupply", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "transfer", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "transferFrom", - values: [string, string, BigNumberish] - ): string; - - decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "decreaseAllowance", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getPooledEthByShares", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getSharesByPooledEth", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getTotalPooledEther", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getTotalShares", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "increaseAllowance", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "sharesOf", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "totalPooledEtherSynced", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "totalSharesSynced", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "totalSupply", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "transfer", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "transferFrom", - data: BytesLike - ): Result; - - events: { - "Approval(address,address,uint256)": EventFragment; - "Transfer(address,address,uint256)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "Approval"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment; -} - -export interface ApprovalEventObject { - owner: string; - spender: string; - value: BigNumber; -} -export type ApprovalEvent = TypedEvent< - [string, string, BigNumber], - ApprovalEventObject ->; - -export type ApprovalEventFilter = TypedEventFilter; - -export interface TransferEventObject { - from: string; - to: string; - value: BigNumber; -} -export type TransferEvent = TypedEvent< - [string, string, BigNumber], - TransferEventObject ->; - -export type TransferEventFilter = TypedEventFilter; - -export interface StETHMock extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: StETHMockInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - allowance( - _owner: string, - _spender: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - approve( - _spender: string, - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf( - _account: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - decimals(overrides?: CallOverrides): Promise<[number]>; - - decreaseAllowance( - _spender: string, - _subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getPooledEthByShares( - _sharesAmount: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - getSharesByPooledEth( - _ethAmount: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - getTotalPooledEther(overrides?: CallOverrides): Promise<[BigNumber]>; - - getTotalShares(overrides?: CallOverrides): Promise<[BigNumber]>; - - increaseAllowance( - _spender: string, - _addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise<[string]>; - - sharesOf(_account: string, overrides?: CallOverrides): Promise<[BigNumber]>; - - symbol(overrides?: CallOverrides): Promise<[string]>; - - totalPooledEtherSynced(overrides?: CallOverrides): Promise<[BigNumber]>; - - totalSharesSynced(overrides?: CallOverrides): Promise<[BigNumber]>; - - totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>; - - transfer( - _recipient: string, - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - _sender: string, - _recipient: string, - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - allowance( - _owner: string, - _spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - _spender: string, - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(_account: string, overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - decreaseAllowance( - _spender: string, - _subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getPooledEthByShares( - _sharesAmount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getSharesByPooledEth( - _ethAmount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getTotalPooledEther(overrides?: CallOverrides): Promise; - - getTotalShares(overrides?: CallOverrides): Promise; - - increaseAllowance( - _spender: string, - _addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - sharesOf(_account: string, overrides?: CallOverrides): Promise; - - symbol(overrides?: CallOverrides): Promise; - - totalPooledEtherSynced(overrides?: CallOverrides): Promise; - - totalSharesSynced(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - transfer( - _recipient: string, - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - _sender: string, - _recipient: string, - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - allowance( - _owner: string, - _spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - _spender: string, - _amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - balanceOf(_account: string, overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - decreaseAllowance( - _spender: string, - _subtractedValue: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getPooledEthByShares( - _sharesAmount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getSharesByPooledEth( - _ethAmount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getTotalPooledEther(overrides?: CallOverrides): Promise; - - getTotalShares(overrides?: CallOverrides): Promise; - - increaseAllowance( - _spender: string, - _addedValue: BigNumberish, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - sharesOf(_account: string, overrides?: CallOverrides): Promise; - - symbol(overrides?: CallOverrides): Promise; - - totalPooledEtherSynced(overrides?: CallOverrides): Promise; - - totalSharesSynced(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - transfer( - _recipient: string, - _amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transferFrom( - _sender: string, - _recipient: string, - _amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - "Approval(address,address,uint256)"( - owner?: string | null, - spender?: string | null, - value?: null - ): ApprovalEventFilter; - Approval( - owner?: string | null, - spender?: string | null, - value?: null - ): ApprovalEventFilter; - - "Transfer(address,address,uint256)"( - from?: string | null, - to?: string | null, - value?: null - ): TransferEventFilter; - Transfer( - from?: string | null, - to?: string | null, - value?: null - ): TransferEventFilter; - }; - - estimateGas: { - allowance( - _owner: string, - _spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - _spender: string, - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(_account: string, overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - decreaseAllowance( - _spender: string, - _subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getPooledEthByShares( - _sharesAmount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getSharesByPooledEth( - _ethAmount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getTotalPooledEther(overrides?: CallOverrides): Promise; - - getTotalShares(overrides?: CallOverrides): Promise; - - increaseAllowance( - _spender: string, - _addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - sharesOf(_account: string, overrides?: CallOverrides): Promise; - - symbol(overrides?: CallOverrides): Promise; - - totalPooledEtherSynced(overrides?: CallOverrides): Promise; - - totalSharesSynced(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - transfer( - _recipient: string, - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - _sender: string, - _recipient: string, - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - allowance( - _owner: string, - _spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - _spender: string, - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf( - _account: string, - overrides?: CallOverrides - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - decreaseAllowance( - _spender: string, - _subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getPooledEthByShares( - _sharesAmount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getSharesByPooledEth( - _ethAmount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getTotalPooledEther( - overrides?: CallOverrides - ): Promise; - - getTotalShares(overrides?: CallOverrides): Promise; - - increaseAllowance( - _spender: string, - _addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - sharesOf( - _account: string, - overrides?: CallOverrides - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - totalPooledEtherSynced( - overrides?: CallOverrides - ): Promise; - - totalSharesSynced(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - transfer( - _recipient: string, - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - _sender: string, - _recipient: string, - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/src/types/contracts/test/mocks/token/WETHMock.ts b/src/types/contracts/test/mocks/token/WETHMock.ts deleted file mode 100644 index 345e0b4b..00000000 --- a/src/types/contracts/test/mocks/token/WETHMock.ts +++ /dev/null @@ -1,488 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PayableOverrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface WETHMockInterface extends utils.Interface { - functions: { - "allowance(address,address)": FunctionFragment; - "approve(address,uint256)": FunctionFragment; - "balanceOf(address)": FunctionFragment; - "decimals()": FunctionFragment; - "deposit()": FunctionFragment; - "mint(address,uint256)": FunctionFragment; - "name()": FunctionFragment; - "symbol()": FunctionFragment; - "totalSupply()": FunctionFragment; - "transfer(address,uint256)": FunctionFragment; - "transferFrom(address,address,uint256)": FunctionFragment; - "withdraw(uint256)": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "allowance" - | "approve" - | "balanceOf" - | "decimals" - | "deposit" - | "mint" - | "name" - | "symbol" - | "totalSupply" - | "transfer" - | "transferFrom" - | "withdraw" - ): FunctionFragment; - - encodeFunctionData( - functionFragment: "allowance", - values: [string, string] - ): string; - encodeFunctionData( - functionFragment: "approve", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "balanceOf", values: [string]): string; - encodeFunctionData(functionFragment: "decimals", values?: undefined): string; - encodeFunctionData(functionFragment: "deposit", values?: undefined): string; - encodeFunctionData( - functionFragment: "mint", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "name", values?: undefined): string; - encodeFunctionData(functionFragment: "symbol", values?: undefined): string; - encodeFunctionData( - functionFragment: "totalSupply", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "transfer", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "transferFrom", - values: [string, string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "withdraw", - values: [BigNumberish] - ): string; - - decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "deposit", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "mint", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "totalSupply", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "transfer", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "transferFrom", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "withdraw", data: BytesLike): Result; - - events: { - "Approval(address,address,uint256)": EventFragment; - "Deposit(address,uint256)": EventFragment; - "Transfer(address,address,uint256)": EventFragment; - "Withdrawal(address,uint256)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "Approval"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Deposit"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Withdrawal"): EventFragment; -} - -export interface ApprovalEventObject { - owner: string; - spender: string; - value: BigNumber; -} -export type ApprovalEvent = TypedEvent< - [string, string, BigNumber], - ApprovalEventObject ->; - -export type ApprovalEventFilter = TypedEventFilter; - -export interface DepositEventObject { - dst: string; - wad: BigNumber; -} -export type DepositEvent = TypedEvent<[string, BigNumber], DepositEventObject>; - -export type DepositEventFilter = TypedEventFilter; - -export interface TransferEventObject { - from: string; - to: string; - value: BigNumber; -} -export type TransferEvent = TypedEvent< - [string, string, BigNumber], - TransferEventObject ->; - -export type TransferEventFilter = TypedEventFilter; - -export interface WithdrawalEventObject { - src: string; - wad: BigNumber; -} -export type WithdrawalEvent = TypedEvent< - [string, BigNumber], - WithdrawalEventObject ->; - -export type WithdrawalEventFilter = TypedEventFilter; - -export interface WETHMock extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: WETHMockInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - allowance( - arg0: string, - arg1: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - approve( - guy: string, - wad: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(arg0: string, overrides?: CallOverrides): Promise<[BigNumber]>; - - decimals(overrides?: CallOverrides): Promise<[number]>; - - deposit( - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - mint( - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise<[string]>; - - symbol(overrides?: CallOverrides): Promise<[string]>; - - totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>; - - transfer( - dst: string, - wad: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - src: string, - dst: string, - wad: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdraw( - wad: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - allowance( - arg0: string, - arg1: string, - overrides?: CallOverrides - ): Promise; - - approve( - guy: string, - wad: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(arg0: string, overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - deposit( - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - mint( - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - symbol(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - transfer( - dst: string, - wad: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - src: string, - dst: string, - wad: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdraw( - wad: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - allowance( - arg0: string, - arg1: string, - overrides?: CallOverrides - ): Promise; - - approve( - guy: string, - wad: BigNumberish, - overrides?: CallOverrides - ): Promise; - - balanceOf(arg0: string, overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - deposit(overrides?: CallOverrides): Promise; - - mint( - to: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - symbol(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - transfer( - dst: string, - wad: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transferFrom( - src: string, - dst: string, - wad: BigNumberish, - overrides?: CallOverrides - ): Promise; - - withdraw(wad: BigNumberish, overrides?: CallOverrides): Promise; - }; - - filters: { - "Approval(address,address,uint256)"( - owner?: string | null, - spender?: string | null, - value?: null - ): ApprovalEventFilter; - Approval( - owner?: string | null, - spender?: string | null, - value?: null - ): ApprovalEventFilter; - - "Deposit(address,uint256)"( - dst?: string | null, - wad?: null - ): DepositEventFilter; - Deposit(dst?: string | null, wad?: null): DepositEventFilter; - - "Transfer(address,address,uint256)"( - from?: string | null, - to?: string | null, - value?: null - ): TransferEventFilter; - Transfer( - from?: string | null, - to?: string | null, - value?: null - ): TransferEventFilter; - - "Withdrawal(address,uint256)"( - src?: string | null, - wad?: null - ): WithdrawalEventFilter; - Withdrawal(src?: string | null, wad?: null): WithdrawalEventFilter; - }; - - estimateGas: { - allowance( - arg0: string, - arg1: string, - overrides?: CallOverrides - ): Promise; - - approve( - guy: string, - wad: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(arg0: string, overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - deposit( - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - mint( - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - symbol(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - transfer( - dst: string, - wad: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - src: string, - dst: string, - wad: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdraw( - wad: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - allowance( - arg0: string, - arg1: string, - overrides?: CallOverrides - ): Promise; - - approve( - guy: string, - wad: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf( - arg0: string, - overrides?: CallOverrides - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - deposit( - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - mint( - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - symbol(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - transfer( - dst: string, - wad: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - src: string, - dst: string, - wad: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdraw( - wad: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/src/types/contracts/test/mocks/token/index.ts b/src/types/contracts/test/mocks/token/index.ts index 8ece08e9..2ab9a038 100644 --- a/src/types/contracts/test/mocks/token/index.ts +++ b/src/types/contracts/test/mocks/token/index.ts @@ -1,17 +1,5 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ -import type * as erc20ApproveRestrictedSol from "./ERC20ApproveRestricted.sol"; -export type { erc20ApproveRestrictedSol }; -import type * as erc20BlockingSol from "./ERC20Blocking.sol"; -export type { erc20BlockingSol }; -import type * as erc20FeeSol from "./ERC20Fee.sol"; -export type { erc20FeeSol }; -import type * as erc20NonCompliantSol from "./ERC20NonCompliant.sol"; -export type { erc20NonCompliantSol }; import type * as erc721ReceiverMockSol from "./ERC721ReceiverMock.sol"; export type { erc721ReceiverMockSol }; -export type { ERC20Mock } from "./ERC20Mock"; -export type { StETHMock } from "./StETHMock"; -export type { WETHMock } from "./WETHMock"; -export type { CERC20Mock } from "./CERC20Mock"; diff --git a/src/types/contracts/test/oracles/CurveLPPriceFeed.t.sol/CurveLPPriceFeedTest.ts b/src/types/contracts/test/oracles/CurveLPPriceFeed.t.sol/CurveLPPriceFeedTest.ts deleted file mode 100644 index 87db5946..00000000 --- a/src/types/contracts/test/oracles/CurveLPPriceFeed.t.sol/CurveLPPriceFeedTest.ts +++ /dev/null @@ -1,749 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface CurveLPPriceFeedTestInterface extends utils.Interface { - functions: { - "IS_TEST()": FunctionFragment; - "addressProvider()": FunctionFragment; - "c2feed()": FunctionFragment; - "c3feed()": FunctionFragment; - "c4feed()": FunctionFragment; - "curveV1Mock()": FunctionFragment; - "failed()": FunctionFragment; - "pfm1()": FunctionFragment; - "pfm2()": FunctionFragment; - "pfm3()": FunctionFragment; - "pfm4()": FunctionFragment; - "setUp()": FunctionFragment; - "test_OCLP_01_constructor_sets_correct_values()": FunctionFragment; - "test_OCLP_02_constructor_reverts_for_zero_addresses()": FunctionFragment; - "test_OCLP_03_constructor_reverts_at_getRoundData_call()": FunctionFragment; - "test_OCLP_04_latestRoundData_works_correctly_for_2_assets_CurveLPPriceFeed()": FunctionFragment; - "test_OCLP_05_latestRoundData_works_correctly_for_3_assets_CurveLPPriceFeed()": FunctionFragment; - "test_OCLP_06_latestRoundData_works_correctly_for_4_assets_CurveLPPriceFeed()": FunctionFragment; - "test_OCLP_07_latestRoundData_reverts_for_out_of_bounds_prices()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "IS_TEST" - | "addressProvider" - | "c2feed" - | "c3feed" - | "c4feed" - | "curveV1Mock" - | "failed" - | "pfm1" - | "pfm2" - | "pfm3" - | "pfm4" - | "setUp" - | "test_OCLP_01_constructor_sets_correct_values" - | "test_OCLP_02_constructor_reverts_for_zero_addresses" - | "test_OCLP_03_constructor_reverts_at_getRoundData_call" - | "test_OCLP_04_latestRoundData_works_correctly_for_2_assets_CurveLPPriceFeed" - | "test_OCLP_05_latestRoundData_works_correctly_for_3_assets_CurveLPPriceFeed" - | "test_OCLP_06_latestRoundData_works_correctly_for_4_assets_CurveLPPriceFeed" - | "test_OCLP_07_latestRoundData_reverts_for_out_of_bounds_prices" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "IS_TEST", values?: undefined): string; - encodeFunctionData( - functionFragment: "addressProvider", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "c2feed", values?: undefined): string; - encodeFunctionData(functionFragment: "c3feed", values?: undefined): string; - encodeFunctionData(functionFragment: "c4feed", values?: undefined): string; - encodeFunctionData( - functionFragment: "curveV1Mock", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "failed", values?: undefined): string; - encodeFunctionData(functionFragment: "pfm1", values?: undefined): string; - encodeFunctionData(functionFragment: "pfm2", values?: undefined): string; - encodeFunctionData(functionFragment: "pfm3", values?: undefined): string; - encodeFunctionData(functionFragment: "pfm4", values?: undefined): string; - encodeFunctionData(functionFragment: "setUp", values?: undefined): string; - encodeFunctionData( - functionFragment: "test_OCLP_01_constructor_sets_correct_values", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_OCLP_02_constructor_reverts_for_zero_addresses", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_OCLP_03_constructor_reverts_at_getRoundData_call", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_OCLP_04_latestRoundData_works_correctly_for_2_assets_CurveLPPriceFeed", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_OCLP_05_latestRoundData_works_correctly_for_3_assets_CurveLPPriceFeed", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_OCLP_06_latestRoundData_works_correctly_for_4_assets_CurveLPPriceFeed", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_OCLP_07_latestRoundData_reverts_for_out_of_bounds_prices", - values?: undefined - ): string; - - decodeFunctionResult(functionFragment: "IS_TEST", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "addressProvider", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "c2feed", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "c3feed", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "c4feed", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "curveV1Mock", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "failed", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "pfm1", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "pfm2", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "pfm3", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "pfm4", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "setUp", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "test_OCLP_01_constructor_sets_correct_values", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_OCLP_02_constructor_reverts_for_zero_addresses", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_OCLP_03_constructor_reverts_at_getRoundData_call", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_OCLP_04_latestRoundData_works_correctly_for_2_assets_CurveLPPriceFeed", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_OCLP_05_latestRoundData_works_correctly_for_3_assets_CurveLPPriceFeed", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_OCLP_06_latestRoundData_works_correctly_for_4_assets_CurveLPPriceFeed", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_OCLP_07_latestRoundData_reverts_for_out_of_bounds_prices", - data: BytesLike - ): Result; - - events: { - "log(string)": EventFragment; - "log_address(address)": EventFragment; - "log_bytes(bytes)": EventFragment; - "log_bytes32(bytes32)": EventFragment; - "log_int(int256)": EventFragment; - "log_named_address(string,address)": EventFragment; - "log_named_bytes(string,bytes)": EventFragment; - "log_named_bytes32(string,bytes32)": EventFragment; - "log_named_decimal_int(string,int256,uint256)": EventFragment; - "log_named_decimal_uint(string,uint256,uint256)": EventFragment; - "log_named_int(string,int256)": EventFragment; - "log_named_string(string,string)": EventFragment; - "log_named_uint(string,uint256)": EventFragment; - "log_string(string)": EventFragment; - "log_uint(uint256)": EventFragment; - "logs(bytes)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "log"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "logs"): EventFragment; -} - -export interface logEventObject { - arg0: string; -} -export type logEvent = TypedEvent<[string], logEventObject>; - -export type logEventFilter = TypedEventFilter; - -export interface log_addressEventObject { - arg0: string; -} -export type log_addressEvent = TypedEvent<[string], log_addressEventObject>; - -export type log_addressEventFilter = TypedEventFilter; - -export interface log_bytesEventObject { - arg0: string; -} -export type log_bytesEvent = TypedEvent<[string], log_bytesEventObject>; - -export type log_bytesEventFilter = TypedEventFilter; - -export interface log_bytes32EventObject { - arg0: string; -} -export type log_bytes32Event = TypedEvent<[string], log_bytes32EventObject>; - -export type log_bytes32EventFilter = TypedEventFilter; - -export interface log_intEventObject { - arg0: BigNumber; -} -export type log_intEvent = TypedEvent<[BigNumber], log_intEventObject>; - -export type log_intEventFilter = TypedEventFilter; - -export interface log_named_addressEventObject { - key: string; - val: string; -} -export type log_named_addressEvent = TypedEvent< - [string, string], - log_named_addressEventObject ->; - -export type log_named_addressEventFilter = - TypedEventFilter; - -export interface log_named_bytesEventObject { - key: string; - val: string; -} -export type log_named_bytesEvent = TypedEvent< - [string, string], - log_named_bytesEventObject ->; - -export type log_named_bytesEventFilter = TypedEventFilter; - -export interface log_named_bytes32EventObject { - key: string; - val: string; -} -export type log_named_bytes32Event = TypedEvent< - [string, string], - log_named_bytes32EventObject ->; - -export type log_named_bytes32EventFilter = - TypedEventFilter; - -export interface log_named_decimal_intEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_intEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_intEventObject ->; - -export type log_named_decimal_intEventFilter = - TypedEventFilter; - -export interface log_named_decimal_uintEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_uintEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_uintEventObject ->; - -export type log_named_decimal_uintEventFilter = - TypedEventFilter; - -export interface log_named_intEventObject { - key: string; - val: BigNumber; -} -export type log_named_intEvent = TypedEvent< - [string, BigNumber], - log_named_intEventObject ->; - -export type log_named_intEventFilter = TypedEventFilter; - -export interface log_named_stringEventObject { - key: string; - val: string; -} -export type log_named_stringEvent = TypedEvent< - [string, string], - log_named_stringEventObject ->; - -export type log_named_stringEventFilter = - TypedEventFilter; - -export interface log_named_uintEventObject { - key: string; - val: BigNumber; -} -export type log_named_uintEvent = TypedEvent< - [string, BigNumber], - log_named_uintEventObject ->; - -export type log_named_uintEventFilter = TypedEventFilter; - -export interface log_stringEventObject { - arg0: string; -} -export type log_stringEvent = TypedEvent<[string], log_stringEventObject>; - -export type log_stringEventFilter = TypedEventFilter; - -export interface log_uintEventObject { - arg0: BigNumber; -} -export type log_uintEvent = TypedEvent<[BigNumber], log_uintEventObject>; - -export type log_uintEventFilter = TypedEventFilter; - -export interface logsEventObject { - arg0: string; -} -export type logsEvent = TypedEvent<[string], logsEventObject>; - -export type logsEventFilter = TypedEventFilter; - -export interface CurveLPPriceFeedTest extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: CurveLPPriceFeedTestInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - IS_TEST(overrides?: CallOverrides): Promise<[boolean]>; - - addressProvider(overrides?: CallOverrides): Promise<[string]>; - - c2feed(overrides?: CallOverrides): Promise<[string]>; - - c3feed(overrides?: CallOverrides): Promise<[string]>; - - c4feed(overrides?: CallOverrides): Promise<[string]>; - - curveV1Mock(overrides?: CallOverrides): Promise<[string]>; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - pfm1(overrides?: CallOverrides): Promise<[string]>; - - pfm2(overrides?: CallOverrides): Promise<[string]>; - - pfm3(overrides?: CallOverrides): Promise<[string]>; - - pfm4(overrides?: CallOverrides): Promise<[string]>; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_OCLP_01_constructor_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_OCLP_02_constructor_reverts_for_zero_addresses( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_OCLP_03_constructor_reverts_at_getRoundData_call( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_OCLP_04_latestRoundData_works_correctly_for_2_assets_CurveLPPriceFeed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_OCLP_05_latestRoundData_works_correctly_for_3_assets_CurveLPPriceFeed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_OCLP_06_latestRoundData_works_correctly_for_4_assets_CurveLPPriceFeed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_OCLP_07_latestRoundData_reverts_for_out_of_bounds_prices( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - IS_TEST(overrides?: CallOverrides): Promise; - - addressProvider(overrides?: CallOverrides): Promise; - - c2feed(overrides?: CallOverrides): Promise; - - c3feed(overrides?: CallOverrides): Promise; - - c4feed(overrides?: CallOverrides): Promise; - - curveV1Mock(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - pfm1(overrides?: CallOverrides): Promise; - - pfm2(overrides?: CallOverrides): Promise; - - pfm3(overrides?: CallOverrides): Promise; - - pfm4(overrides?: CallOverrides): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_OCLP_01_constructor_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_OCLP_02_constructor_reverts_for_zero_addresses( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_OCLP_03_constructor_reverts_at_getRoundData_call( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_OCLP_04_latestRoundData_works_correctly_for_2_assets_CurveLPPriceFeed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_OCLP_05_latestRoundData_works_correctly_for_3_assets_CurveLPPriceFeed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_OCLP_06_latestRoundData_works_correctly_for_4_assets_CurveLPPriceFeed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_OCLP_07_latestRoundData_reverts_for_out_of_bounds_prices( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - IS_TEST(overrides?: CallOverrides): Promise; - - addressProvider(overrides?: CallOverrides): Promise; - - c2feed(overrides?: CallOverrides): Promise; - - c3feed(overrides?: CallOverrides): Promise; - - c4feed(overrides?: CallOverrides): Promise; - - curveV1Mock(overrides?: CallOverrides): Promise; - - failed(overrides?: CallOverrides): Promise; - - pfm1(overrides?: CallOverrides): Promise; - - pfm2(overrides?: CallOverrides): Promise; - - pfm3(overrides?: CallOverrides): Promise; - - pfm4(overrides?: CallOverrides): Promise; - - setUp(overrides?: CallOverrides): Promise; - - test_OCLP_01_constructor_sets_correct_values( - overrides?: CallOverrides - ): Promise; - - test_OCLP_02_constructor_reverts_for_zero_addresses( - overrides?: CallOverrides - ): Promise; - - test_OCLP_03_constructor_reverts_at_getRoundData_call( - overrides?: CallOverrides - ): Promise; - - test_OCLP_04_latestRoundData_works_correctly_for_2_assets_CurveLPPriceFeed( - overrides?: CallOverrides - ): Promise; - - test_OCLP_05_latestRoundData_works_correctly_for_3_assets_CurveLPPriceFeed( - overrides?: CallOverrides - ): Promise; - - test_OCLP_06_latestRoundData_works_correctly_for_4_assets_CurveLPPriceFeed( - overrides?: CallOverrides - ): Promise; - - test_OCLP_07_latestRoundData_reverts_for_out_of_bounds_prices( - overrides?: CallOverrides - ): Promise; - }; - - filters: { - "log(string)"(arg0?: null): logEventFilter; - log(arg0?: null): logEventFilter; - - "log_address(address)"(arg0?: null): log_addressEventFilter; - log_address(arg0?: null): log_addressEventFilter; - - "log_bytes(bytes)"(arg0?: null): log_bytesEventFilter; - log_bytes(arg0?: null): log_bytesEventFilter; - - "log_bytes32(bytes32)"(arg0?: null): log_bytes32EventFilter; - log_bytes32(arg0?: null): log_bytes32EventFilter; - - "log_int(int256)"(arg0?: null): log_intEventFilter; - log_int(arg0?: null): log_intEventFilter; - - "log_named_address(string,address)"( - key?: null, - val?: null - ): log_named_addressEventFilter; - log_named_address(key?: null, val?: null): log_named_addressEventFilter; - - "log_named_bytes(string,bytes)"( - key?: null, - val?: null - ): log_named_bytesEventFilter; - log_named_bytes(key?: null, val?: null): log_named_bytesEventFilter; - - "log_named_bytes32(string,bytes32)"( - key?: null, - val?: null - ): log_named_bytes32EventFilter; - log_named_bytes32(key?: null, val?: null): log_named_bytes32EventFilter; - - "log_named_decimal_int(string,int256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - log_named_decimal_int( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - - "log_named_decimal_uint(string,uint256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - log_named_decimal_uint( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - - "log_named_int(string,int256)"( - key?: null, - val?: null - ): log_named_intEventFilter; - log_named_int(key?: null, val?: null): log_named_intEventFilter; - - "log_named_string(string,string)"( - key?: null, - val?: null - ): log_named_stringEventFilter; - log_named_string(key?: null, val?: null): log_named_stringEventFilter; - - "log_named_uint(string,uint256)"( - key?: null, - val?: null - ): log_named_uintEventFilter; - log_named_uint(key?: null, val?: null): log_named_uintEventFilter; - - "log_string(string)"(arg0?: null): log_stringEventFilter; - log_string(arg0?: null): log_stringEventFilter; - - "log_uint(uint256)"(arg0?: null): log_uintEventFilter; - log_uint(arg0?: null): log_uintEventFilter; - - "logs(bytes)"(arg0?: null): logsEventFilter; - logs(arg0?: null): logsEventFilter; - }; - - estimateGas: { - IS_TEST(overrides?: CallOverrides): Promise; - - addressProvider(overrides?: CallOverrides): Promise; - - c2feed(overrides?: CallOverrides): Promise; - - c3feed(overrides?: CallOverrides): Promise; - - c4feed(overrides?: CallOverrides): Promise; - - curveV1Mock(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - pfm1(overrides?: CallOverrides): Promise; - - pfm2(overrides?: CallOverrides): Promise; - - pfm3(overrides?: CallOverrides): Promise; - - pfm4(overrides?: CallOverrides): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_OCLP_01_constructor_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_OCLP_02_constructor_reverts_for_zero_addresses( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_OCLP_03_constructor_reverts_at_getRoundData_call( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_OCLP_04_latestRoundData_works_correctly_for_2_assets_CurveLPPriceFeed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_OCLP_05_latestRoundData_works_correctly_for_3_assets_CurveLPPriceFeed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_OCLP_06_latestRoundData_works_correctly_for_4_assets_CurveLPPriceFeed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_OCLP_07_latestRoundData_reverts_for_out_of_bounds_prices( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - IS_TEST(overrides?: CallOverrides): Promise; - - addressProvider(overrides?: CallOverrides): Promise; - - c2feed(overrides?: CallOverrides): Promise; - - c3feed(overrides?: CallOverrides): Promise; - - c4feed(overrides?: CallOverrides): Promise; - - curveV1Mock(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - pfm1(overrides?: CallOverrides): Promise; - - pfm2(overrides?: CallOverrides): Promise; - - pfm3(overrides?: CallOverrides): Promise; - - pfm4(overrides?: CallOverrides): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_OCLP_01_constructor_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_OCLP_02_constructor_reverts_for_zero_addresses( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_OCLP_03_constructor_reverts_at_getRoundData_call( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_OCLP_04_latestRoundData_works_correctly_for_2_assets_CurveLPPriceFeed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_OCLP_05_latestRoundData_works_correctly_for_3_assets_CurveLPPriceFeed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_OCLP_06_latestRoundData_works_correctly_for_4_assets_CurveLPPriceFeed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_OCLP_07_latestRoundData_reverts_for_out_of_bounds_prices( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/src/types/contracts/test/oracles/CurveLPPriceFeed.t.sol/index.ts b/src/types/contracts/test/oracles/CurveLPPriceFeed.t.sol/index.ts deleted file mode 100644 index d3f2b28d..00000000 --- a/src/types/contracts/test/oracles/CurveLPPriceFeed.t.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { CurveLPPriceFeedTest } from "./CurveLPPriceFeedTest"; diff --git a/src/types/contracts/test/oracles/LPPriceFeed.t.sol/LPPriceFeedTest.ts b/src/types/contracts/test/oracles/LPPriceFeed.t.sol/LPPriceFeedTest.ts deleted file mode 100644 index 8222a47a..00000000 --- a/src/types/contracts/test/oracles/LPPriceFeed.t.sol/LPPriceFeedTest.ts +++ /dev/null @@ -1,617 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface LPPriceFeedTestInterface extends utils.Interface { - functions: { - "IS_TEST()": FunctionFragment; - "addressProvider()": FunctionFragment; - "failed()": FunctionFragment; - "pf()": FunctionFragment; - "setUp()": FunctionFragment; - "test_LPF_01_constructor_sets_correct_values()": FunctionFragment; - "test_LPF_02_getRoundData_reverts()": FunctionFragment; - "test_LPF_03_latestRoundData_works_correctly(uint256)": FunctionFragment; - "test_LPF_04_setLimiter_reverts_for_non_configurator_or_with_zero_value()": FunctionFragment; - "test_LPF_05_setLimiter_sets_bounds_correctly(uint256)": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "IS_TEST" - | "addressProvider" - | "failed" - | "pf" - | "setUp" - | "test_LPF_01_constructor_sets_correct_values" - | "test_LPF_02_getRoundData_reverts" - | "test_LPF_03_latestRoundData_works_correctly" - | "test_LPF_04_setLimiter_reverts_for_non_configurator_or_with_zero_value" - | "test_LPF_05_setLimiter_sets_bounds_correctly" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "IS_TEST", values?: undefined): string; - encodeFunctionData( - functionFragment: "addressProvider", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "failed", values?: undefined): string; - encodeFunctionData(functionFragment: "pf", values?: undefined): string; - encodeFunctionData(functionFragment: "setUp", values?: undefined): string; - encodeFunctionData( - functionFragment: "test_LPF_01_constructor_sets_correct_values", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_LPF_02_getRoundData_reverts", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_LPF_03_latestRoundData_works_correctly", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "test_LPF_04_setLimiter_reverts_for_non_configurator_or_with_zero_value", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_LPF_05_setLimiter_sets_bounds_correctly", - values: [BigNumberish] - ): string; - - decodeFunctionResult(functionFragment: "IS_TEST", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "addressProvider", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "failed", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "pf", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "setUp", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "test_LPF_01_constructor_sets_correct_values", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_LPF_02_getRoundData_reverts", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_LPF_03_latestRoundData_works_correctly", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_LPF_04_setLimiter_reverts_for_non_configurator_or_with_zero_value", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_LPF_05_setLimiter_sets_bounds_correctly", - data: BytesLike - ): Result; - - events: { - "NewLimiterParams(uint256,uint256)": EventFragment; - "log(string)": EventFragment; - "log_address(address)": EventFragment; - "log_bytes(bytes)": EventFragment; - "log_bytes32(bytes32)": EventFragment; - "log_int(int256)": EventFragment; - "log_named_address(string,address)": EventFragment; - "log_named_bytes(string,bytes)": EventFragment; - "log_named_bytes32(string,bytes32)": EventFragment; - "log_named_decimal_int(string,int256,uint256)": EventFragment; - "log_named_decimal_uint(string,uint256,uint256)": EventFragment; - "log_named_int(string,int256)": EventFragment; - "log_named_string(string,string)": EventFragment; - "log_named_uint(string,uint256)": EventFragment; - "log_string(string)": EventFragment; - "log_uint(uint256)": EventFragment; - "logs(bytes)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "NewLimiterParams"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "logs"): EventFragment; -} - -export interface NewLimiterParamsEventObject { - lowerBound: BigNumber; - upperBound: BigNumber; -} -export type NewLimiterParamsEvent = TypedEvent< - [BigNumber, BigNumber], - NewLimiterParamsEventObject ->; - -export type NewLimiterParamsEventFilter = - TypedEventFilter; - -export interface logEventObject { - arg0: string; -} -export type logEvent = TypedEvent<[string], logEventObject>; - -export type logEventFilter = TypedEventFilter; - -export interface log_addressEventObject { - arg0: string; -} -export type log_addressEvent = TypedEvent<[string], log_addressEventObject>; - -export type log_addressEventFilter = TypedEventFilter; - -export interface log_bytesEventObject { - arg0: string; -} -export type log_bytesEvent = TypedEvent<[string], log_bytesEventObject>; - -export type log_bytesEventFilter = TypedEventFilter; - -export interface log_bytes32EventObject { - arg0: string; -} -export type log_bytes32Event = TypedEvent<[string], log_bytes32EventObject>; - -export type log_bytes32EventFilter = TypedEventFilter; - -export interface log_intEventObject { - arg0: BigNumber; -} -export type log_intEvent = TypedEvent<[BigNumber], log_intEventObject>; - -export type log_intEventFilter = TypedEventFilter; - -export interface log_named_addressEventObject { - key: string; - val: string; -} -export type log_named_addressEvent = TypedEvent< - [string, string], - log_named_addressEventObject ->; - -export type log_named_addressEventFilter = - TypedEventFilter; - -export interface log_named_bytesEventObject { - key: string; - val: string; -} -export type log_named_bytesEvent = TypedEvent< - [string, string], - log_named_bytesEventObject ->; - -export type log_named_bytesEventFilter = TypedEventFilter; - -export interface log_named_bytes32EventObject { - key: string; - val: string; -} -export type log_named_bytes32Event = TypedEvent< - [string, string], - log_named_bytes32EventObject ->; - -export type log_named_bytes32EventFilter = - TypedEventFilter; - -export interface log_named_decimal_intEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_intEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_intEventObject ->; - -export type log_named_decimal_intEventFilter = - TypedEventFilter; - -export interface log_named_decimal_uintEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_uintEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_uintEventObject ->; - -export type log_named_decimal_uintEventFilter = - TypedEventFilter; - -export interface log_named_intEventObject { - key: string; - val: BigNumber; -} -export type log_named_intEvent = TypedEvent< - [string, BigNumber], - log_named_intEventObject ->; - -export type log_named_intEventFilter = TypedEventFilter; - -export interface log_named_stringEventObject { - key: string; - val: string; -} -export type log_named_stringEvent = TypedEvent< - [string, string], - log_named_stringEventObject ->; - -export type log_named_stringEventFilter = - TypedEventFilter; - -export interface log_named_uintEventObject { - key: string; - val: BigNumber; -} -export type log_named_uintEvent = TypedEvent< - [string, BigNumber], - log_named_uintEventObject ->; - -export type log_named_uintEventFilter = TypedEventFilter; - -export interface log_stringEventObject { - arg0: string; -} -export type log_stringEvent = TypedEvent<[string], log_stringEventObject>; - -export type log_stringEventFilter = TypedEventFilter; - -export interface log_uintEventObject { - arg0: BigNumber; -} -export type log_uintEvent = TypedEvent<[BigNumber], log_uintEventObject>; - -export type log_uintEventFilter = TypedEventFilter; - -export interface logsEventObject { - arg0: string; -} -export type logsEvent = TypedEvent<[string], logsEventObject>; - -export type logsEventFilter = TypedEventFilter; - -export interface LPPriceFeedTest extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: LPPriceFeedTestInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - IS_TEST(overrides?: CallOverrides): Promise<[boolean]>; - - addressProvider(overrides?: CallOverrides): Promise<[string]>; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - pf(overrides?: CallOverrides): Promise<[string]>; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_LPF_01_constructor_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_LPF_02_getRoundData_reverts( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_LPF_03_latestRoundData_works_correctly( - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_LPF_04_setLimiter_reverts_for_non_configurator_or_with_zero_value( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_LPF_05_setLimiter_sets_bounds_correctly( - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - IS_TEST(overrides?: CallOverrides): Promise; - - addressProvider(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - pf(overrides?: CallOverrides): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_LPF_01_constructor_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_LPF_02_getRoundData_reverts( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_LPF_03_latestRoundData_works_correctly( - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_LPF_04_setLimiter_reverts_for_non_configurator_or_with_zero_value( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_LPF_05_setLimiter_sets_bounds_correctly( - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - IS_TEST(overrides?: CallOverrides): Promise; - - addressProvider(overrides?: CallOverrides): Promise; - - failed(overrides?: CallOverrides): Promise; - - pf(overrides?: CallOverrides): Promise; - - setUp(overrides?: CallOverrides): Promise; - - test_LPF_01_constructor_sets_correct_values( - overrides?: CallOverrides - ): Promise; - - test_LPF_02_getRoundData_reverts(overrides?: CallOverrides): Promise; - - test_LPF_03_latestRoundData_works_correctly( - value: BigNumberish, - overrides?: CallOverrides - ): Promise; - - test_LPF_04_setLimiter_reverts_for_non_configurator_or_with_zero_value( - overrides?: CallOverrides - ): Promise; - - test_LPF_05_setLimiter_sets_bounds_correctly( - value: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - "NewLimiterParams(uint256,uint256)"( - lowerBound?: null, - upperBound?: null - ): NewLimiterParamsEventFilter; - NewLimiterParams( - lowerBound?: null, - upperBound?: null - ): NewLimiterParamsEventFilter; - - "log(string)"(arg0?: null): logEventFilter; - log(arg0?: null): logEventFilter; - - "log_address(address)"(arg0?: null): log_addressEventFilter; - log_address(arg0?: null): log_addressEventFilter; - - "log_bytes(bytes)"(arg0?: null): log_bytesEventFilter; - log_bytes(arg0?: null): log_bytesEventFilter; - - "log_bytes32(bytes32)"(arg0?: null): log_bytes32EventFilter; - log_bytes32(arg0?: null): log_bytes32EventFilter; - - "log_int(int256)"(arg0?: null): log_intEventFilter; - log_int(arg0?: null): log_intEventFilter; - - "log_named_address(string,address)"( - key?: null, - val?: null - ): log_named_addressEventFilter; - log_named_address(key?: null, val?: null): log_named_addressEventFilter; - - "log_named_bytes(string,bytes)"( - key?: null, - val?: null - ): log_named_bytesEventFilter; - log_named_bytes(key?: null, val?: null): log_named_bytesEventFilter; - - "log_named_bytes32(string,bytes32)"( - key?: null, - val?: null - ): log_named_bytes32EventFilter; - log_named_bytes32(key?: null, val?: null): log_named_bytes32EventFilter; - - "log_named_decimal_int(string,int256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - log_named_decimal_int( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - - "log_named_decimal_uint(string,uint256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - log_named_decimal_uint( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - - "log_named_int(string,int256)"( - key?: null, - val?: null - ): log_named_intEventFilter; - log_named_int(key?: null, val?: null): log_named_intEventFilter; - - "log_named_string(string,string)"( - key?: null, - val?: null - ): log_named_stringEventFilter; - log_named_string(key?: null, val?: null): log_named_stringEventFilter; - - "log_named_uint(string,uint256)"( - key?: null, - val?: null - ): log_named_uintEventFilter; - log_named_uint(key?: null, val?: null): log_named_uintEventFilter; - - "log_string(string)"(arg0?: null): log_stringEventFilter; - log_string(arg0?: null): log_stringEventFilter; - - "log_uint(uint256)"(arg0?: null): log_uintEventFilter; - log_uint(arg0?: null): log_uintEventFilter; - - "logs(bytes)"(arg0?: null): logsEventFilter; - logs(arg0?: null): logsEventFilter; - }; - - estimateGas: { - IS_TEST(overrides?: CallOverrides): Promise; - - addressProvider(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - pf(overrides?: CallOverrides): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_LPF_01_constructor_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_LPF_02_getRoundData_reverts( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_LPF_03_latestRoundData_works_correctly( - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_LPF_04_setLimiter_reverts_for_non_configurator_or_with_zero_value( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_LPF_05_setLimiter_sets_bounds_correctly( - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - IS_TEST(overrides?: CallOverrides): Promise; - - addressProvider(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - pf(overrides?: CallOverrides): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_LPF_01_constructor_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_LPF_02_getRoundData_reverts( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_LPF_03_latestRoundData_works_correctly( - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_LPF_04_setLimiter_reverts_for_non_configurator_or_with_zero_value( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_LPF_05_setLimiter_sets_bounds_correctly( - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/src/types/contracts/test/oracles/LPPriceFeed.t.sol/index.ts b/src/types/contracts/test/oracles/LPPriceFeed.t.sol/index.ts deleted file mode 100644 index 7897d8e9..00000000 --- a/src/types/contracts/test/oracles/LPPriceFeed.t.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { LPPriceFeedTest } from "./LPPriceFeedTest"; diff --git a/src/types/contracts/test/oracles/PriceOracle.t.sol/PriceOracleTest.ts b/src/types/contracts/test/oracles/PriceOracle.t.sol/PriceOracleTest.ts deleted file mode 100644 index db5b71a1..00000000 --- a/src/types/contracts/test/oracles/PriceOracle.t.sol/PriceOracleTest.ts +++ /dev/null @@ -1,758 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface PriceOracleTestInterface extends utils.Interface { - functions: { - "IS_TEST()": FunctionFragment; - "acl()": FunctionFragment; - "addressProvider()": FunctionFragment; - "failed()": FunctionFragment; - "priceOracle()": FunctionFragment; - "setUp()": FunctionFragment; - "test_PO_01_constructor_sets_correct_values()": FunctionFragment; - "test_PO_02_addPriceFeed_reverts_for_zero_address_and_incorrect_contracts()": FunctionFragment; - "test_PO_03_addPriceFeed_adds_pricefeed_and_emits_event()": FunctionFragment; - "test_PO_04_getPrice_reverts_if_depends_on_address_but_zero_address_was_provided()": FunctionFragment; - "test_PO_05_getPrice_reverts_if_not_passed_skipCheck_when_its_enabled()": FunctionFragment; - "test_PO_06_getPrice_returns_correct_price(int256)": FunctionFragment; - "test_PO_07_convertFromUSD_and_convertToUSD_computes_correctly(uint128)": FunctionFragment; - "test_PO_08_convert_computes_correctly()": FunctionFragment; - "test_PO_09_fastCheck_computes_correctly()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "IS_TEST" - | "acl" - | "addressProvider" - | "failed" - | "priceOracle" - | "setUp" - | "test_PO_01_constructor_sets_correct_values" - | "test_PO_02_addPriceFeed_reverts_for_zero_address_and_incorrect_contracts" - | "test_PO_03_addPriceFeed_adds_pricefeed_and_emits_event" - | "test_PO_04_getPrice_reverts_if_depends_on_address_but_zero_address_was_provided" - | "test_PO_05_getPrice_reverts_if_not_passed_skipCheck_when_its_enabled" - | "test_PO_06_getPrice_returns_correct_price" - | "test_PO_07_convertFromUSD_and_convertToUSD_computes_correctly" - | "test_PO_08_convert_computes_correctly" - | "test_PO_09_fastCheck_computes_correctly" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "IS_TEST", values?: undefined): string; - encodeFunctionData(functionFragment: "acl", values?: undefined): string; - encodeFunctionData( - functionFragment: "addressProvider", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "failed", values?: undefined): string; - encodeFunctionData( - functionFragment: "priceOracle", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "setUp", values?: undefined): string; - encodeFunctionData( - functionFragment: "test_PO_01_constructor_sets_correct_values", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_PO_02_addPriceFeed_reverts_for_zero_address_and_incorrect_contracts", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_PO_03_addPriceFeed_adds_pricefeed_and_emits_event", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_PO_04_getPrice_reverts_if_depends_on_address_but_zero_address_was_provided", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_PO_05_getPrice_reverts_if_not_passed_skipCheck_when_its_enabled", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_PO_06_getPrice_returns_correct_price", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "test_PO_07_convertFromUSD_and_convertToUSD_computes_correctly", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "test_PO_08_convert_computes_correctly", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_PO_09_fastCheck_computes_correctly", - values?: undefined - ): string; - - decodeFunctionResult(functionFragment: "IS_TEST", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "acl", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "addressProvider", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "failed", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "priceOracle", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "setUp", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "test_PO_01_constructor_sets_correct_values", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_PO_02_addPriceFeed_reverts_for_zero_address_and_incorrect_contracts", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_PO_03_addPriceFeed_adds_pricefeed_and_emits_event", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_PO_04_getPrice_reverts_if_depends_on_address_but_zero_address_was_provided", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_PO_05_getPrice_reverts_if_not_passed_skipCheck_when_its_enabled", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_PO_06_getPrice_returns_correct_price", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_PO_07_convertFromUSD_and_convertToUSD_computes_correctly", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_PO_08_convert_computes_correctly", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_PO_09_fastCheck_computes_correctly", - data: BytesLike - ): Result; - - events: { - "NewPriceFeed(address,address)": EventFragment; - "log(string)": EventFragment; - "log_address(address)": EventFragment; - "log_bytes(bytes)": EventFragment; - "log_bytes32(bytes32)": EventFragment; - "log_int(int256)": EventFragment; - "log_named_address(string,address)": EventFragment; - "log_named_bytes(string,bytes)": EventFragment; - "log_named_bytes32(string,bytes32)": EventFragment; - "log_named_decimal_int(string,int256,uint256)": EventFragment; - "log_named_decimal_uint(string,uint256,uint256)": EventFragment; - "log_named_int(string,int256)": EventFragment; - "log_named_string(string,string)": EventFragment; - "log_named_uint(string,uint256)": EventFragment; - "log_string(string)": EventFragment; - "log_uint(uint256)": EventFragment; - "logs(bytes)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "NewPriceFeed"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "logs"): EventFragment; -} - -export interface NewPriceFeedEventObject { - token: string; - priceFeed: string; -} -export type NewPriceFeedEvent = TypedEvent< - [string, string], - NewPriceFeedEventObject ->; - -export type NewPriceFeedEventFilter = TypedEventFilter; - -export interface logEventObject { - arg0: string; -} -export type logEvent = TypedEvent<[string], logEventObject>; - -export type logEventFilter = TypedEventFilter; - -export interface log_addressEventObject { - arg0: string; -} -export type log_addressEvent = TypedEvent<[string], log_addressEventObject>; - -export type log_addressEventFilter = TypedEventFilter; - -export interface log_bytesEventObject { - arg0: string; -} -export type log_bytesEvent = TypedEvent<[string], log_bytesEventObject>; - -export type log_bytesEventFilter = TypedEventFilter; - -export interface log_bytes32EventObject { - arg0: string; -} -export type log_bytes32Event = TypedEvent<[string], log_bytes32EventObject>; - -export type log_bytes32EventFilter = TypedEventFilter; - -export interface log_intEventObject { - arg0: BigNumber; -} -export type log_intEvent = TypedEvent<[BigNumber], log_intEventObject>; - -export type log_intEventFilter = TypedEventFilter; - -export interface log_named_addressEventObject { - key: string; - val: string; -} -export type log_named_addressEvent = TypedEvent< - [string, string], - log_named_addressEventObject ->; - -export type log_named_addressEventFilter = - TypedEventFilter; - -export interface log_named_bytesEventObject { - key: string; - val: string; -} -export type log_named_bytesEvent = TypedEvent< - [string, string], - log_named_bytesEventObject ->; - -export type log_named_bytesEventFilter = TypedEventFilter; - -export interface log_named_bytes32EventObject { - key: string; - val: string; -} -export type log_named_bytes32Event = TypedEvent< - [string, string], - log_named_bytes32EventObject ->; - -export type log_named_bytes32EventFilter = - TypedEventFilter; - -export interface log_named_decimal_intEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_intEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_intEventObject ->; - -export type log_named_decimal_intEventFilter = - TypedEventFilter; - -export interface log_named_decimal_uintEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_uintEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_uintEventObject ->; - -export type log_named_decimal_uintEventFilter = - TypedEventFilter; - -export interface log_named_intEventObject { - key: string; - val: BigNumber; -} -export type log_named_intEvent = TypedEvent< - [string, BigNumber], - log_named_intEventObject ->; - -export type log_named_intEventFilter = TypedEventFilter; - -export interface log_named_stringEventObject { - key: string; - val: string; -} -export type log_named_stringEvent = TypedEvent< - [string, string], - log_named_stringEventObject ->; - -export type log_named_stringEventFilter = - TypedEventFilter; - -export interface log_named_uintEventObject { - key: string; - val: BigNumber; -} -export type log_named_uintEvent = TypedEvent< - [string, BigNumber], - log_named_uintEventObject ->; - -export type log_named_uintEventFilter = TypedEventFilter; - -export interface log_stringEventObject { - arg0: string; -} -export type log_stringEvent = TypedEvent<[string], log_stringEventObject>; - -export type log_stringEventFilter = TypedEventFilter; - -export interface log_uintEventObject { - arg0: BigNumber; -} -export type log_uintEvent = TypedEvent<[BigNumber], log_uintEventObject>; - -export type log_uintEventFilter = TypedEventFilter; - -export interface logsEventObject { - arg0: string; -} -export type logsEvent = TypedEvent<[string], logsEventObject>; - -export type logsEventFilter = TypedEventFilter; - -export interface PriceOracleTest extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: PriceOracleTestInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - IS_TEST(overrides?: CallOverrides): Promise<[boolean]>; - - acl(overrides?: CallOverrides): Promise<[string]>; - - addressProvider(overrides?: CallOverrides): Promise<[string]>; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - priceOracle(overrides?: CallOverrides): Promise<[string]>; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PO_01_constructor_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PO_02_addPriceFeed_reverts_for_zero_address_and_incorrect_contracts( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PO_03_addPriceFeed_adds_pricefeed_and_emits_event( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PO_04_getPrice_reverts_if_depends_on_address_but_zero_address_was_provided( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PO_05_getPrice_reverts_if_not_passed_skipCheck_when_its_enabled( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PO_06_getPrice_returns_correct_price( - price: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PO_07_convertFromUSD_and_convertToUSD_computes_correctly( - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PO_08_convert_computes_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PO_09_fastCheck_computes_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - IS_TEST(overrides?: CallOverrides): Promise; - - acl(overrides?: CallOverrides): Promise; - - addressProvider(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - priceOracle(overrides?: CallOverrides): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PO_01_constructor_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PO_02_addPriceFeed_reverts_for_zero_address_and_incorrect_contracts( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PO_03_addPriceFeed_adds_pricefeed_and_emits_event( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PO_04_getPrice_reverts_if_depends_on_address_but_zero_address_was_provided( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PO_05_getPrice_reverts_if_not_passed_skipCheck_when_its_enabled( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PO_06_getPrice_returns_correct_price( - price: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PO_07_convertFromUSD_and_convertToUSD_computes_correctly( - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PO_08_convert_computes_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PO_09_fastCheck_computes_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - IS_TEST(overrides?: CallOverrides): Promise; - - acl(overrides?: CallOverrides): Promise; - - addressProvider(overrides?: CallOverrides): Promise; - - failed(overrides?: CallOverrides): Promise; - - priceOracle(overrides?: CallOverrides): Promise; - - setUp(overrides?: CallOverrides): Promise; - - test_PO_01_constructor_sets_correct_values( - overrides?: CallOverrides - ): Promise; - - test_PO_02_addPriceFeed_reverts_for_zero_address_and_incorrect_contracts( - overrides?: CallOverrides - ): Promise; - - test_PO_03_addPriceFeed_adds_pricefeed_and_emits_event( - overrides?: CallOverrides - ): Promise; - - test_PO_04_getPrice_reverts_if_depends_on_address_but_zero_address_was_provided( - overrides?: CallOverrides - ): Promise; - - test_PO_05_getPrice_reverts_if_not_passed_skipCheck_when_its_enabled( - overrides?: CallOverrides - ): Promise; - - test_PO_06_getPrice_returns_correct_price( - price: BigNumberish, - overrides?: CallOverrides - ): Promise; - - test_PO_07_convertFromUSD_and_convertToUSD_computes_correctly( - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - test_PO_08_convert_computes_correctly( - overrides?: CallOverrides - ): Promise; - - test_PO_09_fastCheck_computes_correctly( - overrides?: CallOverrides - ): Promise; - }; - - filters: { - "NewPriceFeed(address,address)"( - token?: string | null, - priceFeed?: string | null - ): NewPriceFeedEventFilter; - NewPriceFeed( - token?: string | null, - priceFeed?: string | null - ): NewPriceFeedEventFilter; - - "log(string)"(arg0?: null): logEventFilter; - log(arg0?: null): logEventFilter; - - "log_address(address)"(arg0?: null): log_addressEventFilter; - log_address(arg0?: null): log_addressEventFilter; - - "log_bytes(bytes)"(arg0?: null): log_bytesEventFilter; - log_bytes(arg0?: null): log_bytesEventFilter; - - "log_bytes32(bytes32)"(arg0?: null): log_bytes32EventFilter; - log_bytes32(arg0?: null): log_bytes32EventFilter; - - "log_int(int256)"(arg0?: null): log_intEventFilter; - log_int(arg0?: null): log_intEventFilter; - - "log_named_address(string,address)"( - key?: null, - val?: null - ): log_named_addressEventFilter; - log_named_address(key?: null, val?: null): log_named_addressEventFilter; - - "log_named_bytes(string,bytes)"( - key?: null, - val?: null - ): log_named_bytesEventFilter; - log_named_bytes(key?: null, val?: null): log_named_bytesEventFilter; - - "log_named_bytes32(string,bytes32)"( - key?: null, - val?: null - ): log_named_bytes32EventFilter; - log_named_bytes32(key?: null, val?: null): log_named_bytes32EventFilter; - - "log_named_decimal_int(string,int256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - log_named_decimal_int( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - - "log_named_decimal_uint(string,uint256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - log_named_decimal_uint( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - - "log_named_int(string,int256)"( - key?: null, - val?: null - ): log_named_intEventFilter; - log_named_int(key?: null, val?: null): log_named_intEventFilter; - - "log_named_string(string,string)"( - key?: null, - val?: null - ): log_named_stringEventFilter; - log_named_string(key?: null, val?: null): log_named_stringEventFilter; - - "log_named_uint(string,uint256)"( - key?: null, - val?: null - ): log_named_uintEventFilter; - log_named_uint(key?: null, val?: null): log_named_uintEventFilter; - - "log_string(string)"(arg0?: null): log_stringEventFilter; - log_string(arg0?: null): log_stringEventFilter; - - "log_uint(uint256)"(arg0?: null): log_uintEventFilter; - log_uint(arg0?: null): log_uintEventFilter; - - "logs(bytes)"(arg0?: null): logsEventFilter; - logs(arg0?: null): logsEventFilter; - }; - - estimateGas: { - IS_TEST(overrides?: CallOverrides): Promise; - - acl(overrides?: CallOverrides): Promise; - - addressProvider(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - priceOracle(overrides?: CallOverrides): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PO_01_constructor_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PO_02_addPriceFeed_reverts_for_zero_address_and_incorrect_contracts( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PO_03_addPriceFeed_adds_pricefeed_and_emits_event( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PO_04_getPrice_reverts_if_depends_on_address_but_zero_address_was_provided( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PO_05_getPrice_reverts_if_not_passed_skipCheck_when_its_enabled( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PO_06_getPrice_returns_correct_price( - price: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PO_07_convertFromUSD_and_convertToUSD_computes_correctly( - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PO_08_convert_computes_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PO_09_fastCheck_computes_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - IS_TEST(overrides?: CallOverrides): Promise; - - acl(overrides?: CallOverrides): Promise; - - addressProvider(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - priceOracle(overrides?: CallOverrides): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PO_01_constructor_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PO_02_addPriceFeed_reverts_for_zero_address_and_incorrect_contracts( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PO_03_addPriceFeed_adds_pricefeed_and_emits_event( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PO_04_getPrice_reverts_if_depends_on_address_but_zero_address_was_provided( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PO_05_getPrice_reverts_if_not_passed_skipCheck_when_its_enabled( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PO_06_getPrice_returns_correct_price( - price: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PO_07_convertFromUSD_and_convertToUSD_computes_correctly( - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PO_08_convert_computes_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PO_09_fastCheck_computes_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/src/types/contracts/test/oracles/PriceOracle.t.sol/index.ts b/src/types/contracts/test/oracles/PriceOracle.t.sol/index.ts deleted file mode 100644 index 8fcd071e..00000000 --- a/src/types/contracts/test/oracles/PriceOracle.t.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { PriceOracleTest } from "./PriceOracleTest"; diff --git a/src/types/contracts/test/oracles/YearnPriceFeed.t.sol/YearnFeedTest.ts b/src/types/contracts/test/oracles/YearnPriceFeed.t.sol/YearnFeedTest.ts deleted file mode 100644 index 7fb30f46..00000000 --- a/src/types/contracts/test/oracles/YearnPriceFeed.t.sol/YearnFeedTest.ts +++ /dev/null @@ -1,595 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface YearnFeedTestInterface extends utils.Interface { - functions: { - "IS_TEST()": FunctionFragment; - "addressProvider()": FunctionFragment; - "failed()": FunctionFragment; - "pf()": FunctionFragment; - "setUp()": FunctionFragment; - "test_YPF_01_constructor_sets_correct_values()": FunctionFragment; - "test_YPF_02_constructor_reverts_for_zero_addresses()": FunctionFragment; - "test_YPF_04_latestRoundData_works_correctly(uint8)": FunctionFragment; - "test_YPF_05_latestRoundData_reverts_or_bounds_for_out_of_bounds_prices()": FunctionFragment; - "underlyingPf()": FunctionFragment; - "yearnMock()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "IS_TEST" - | "addressProvider" - | "failed" - | "pf" - | "setUp" - | "test_YPF_01_constructor_sets_correct_values" - | "test_YPF_02_constructor_reverts_for_zero_addresses" - | "test_YPF_04_latestRoundData_works_correctly" - | "test_YPF_05_latestRoundData_reverts_or_bounds_for_out_of_bounds_prices" - | "underlyingPf" - | "yearnMock" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "IS_TEST", values?: undefined): string; - encodeFunctionData( - functionFragment: "addressProvider", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "failed", values?: undefined): string; - encodeFunctionData(functionFragment: "pf", values?: undefined): string; - encodeFunctionData(functionFragment: "setUp", values?: undefined): string; - encodeFunctionData( - functionFragment: "test_YPF_01_constructor_sets_correct_values", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_YPF_02_constructor_reverts_for_zero_addresses", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_YPF_04_latestRoundData_works_correctly", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "test_YPF_05_latestRoundData_reverts_or_bounds_for_out_of_bounds_prices", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "underlyingPf", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "yearnMock", values?: undefined): string; - - decodeFunctionResult(functionFragment: "IS_TEST", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "addressProvider", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "failed", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "pf", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "setUp", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "test_YPF_01_constructor_sets_correct_values", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_YPF_02_constructor_reverts_for_zero_addresses", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_YPF_04_latestRoundData_works_correctly", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_YPF_05_latestRoundData_reverts_or_bounds_for_out_of_bounds_prices", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "underlyingPf", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "yearnMock", data: BytesLike): Result; - - events: { - "log(string)": EventFragment; - "log_address(address)": EventFragment; - "log_bytes(bytes)": EventFragment; - "log_bytes32(bytes32)": EventFragment; - "log_int(int256)": EventFragment; - "log_named_address(string,address)": EventFragment; - "log_named_bytes(string,bytes)": EventFragment; - "log_named_bytes32(string,bytes32)": EventFragment; - "log_named_decimal_int(string,int256,uint256)": EventFragment; - "log_named_decimal_uint(string,uint256,uint256)": EventFragment; - "log_named_int(string,int256)": EventFragment; - "log_named_string(string,string)": EventFragment; - "log_named_uint(string,uint256)": EventFragment; - "log_string(string)": EventFragment; - "log_uint(uint256)": EventFragment; - "logs(bytes)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "log"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "logs"): EventFragment; -} - -export interface logEventObject { - arg0: string; -} -export type logEvent = TypedEvent<[string], logEventObject>; - -export type logEventFilter = TypedEventFilter; - -export interface log_addressEventObject { - arg0: string; -} -export type log_addressEvent = TypedEvent<[string], log_addressEventObject>; - -export type log_addressEventFilter = TypedEventFilter; - -export interface log_bytesEventObject { - arg0: string; -} -export type log_bytesEvent = TypedEvent<[string], log_bytesEventObject>; - -export type log_bytesEventFilter = TypedEventFilter; - -export interface log_bytes32EventObject { - arg0: string; -} -export type log_bytes32Event = TypedEvent<[string], log_bytes32EventObject>; - -export type log_bytes32EventFilter = TypedEventFilter; - -export interface log_intEventObject { - arg0: BigNumber; -} -export type log_intEvent = TypedEvent<[BigNumber], log_intEventObject>; - -export type log_intEventFilter = TypedEventFilter; - -export interface log_named_addressEventObject { - key: string; - val: string; -} -export type log_named_addressEvent = TypedEvent< - [string, string], - log_named_addressEventObject ->; - -export type log_named_addressEventFilter = - TypedEventFilter; - -export interface log_named_bytesEventObject { - key: string; - val: string; -} -export type log_named_bytesEvent = TypedEvent< - [string, string], - log_named_bytesEventObject ->; - -export type log_named_bytesEventFilter = TypedEventFilter; - -export interface log_named_bytes32EventObject { - key: string; - val: string; -} -export type log_named_bytes32Event = TypedEvent< - [string, string], - log_named_bytes32EventObject ->; - -export type log_named_bytes32EventFilter = - TypedEventFilter; - -export interface log_named_decimal_intEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_intEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_intEventObject ->; - -export type log_named_decimal_intEventFilter = - TypedEventFilter; - -export interface log_named_decimal_uintEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_uintEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_uintEventObject ->; - -export type log_named_decimal_uintEventFilter = - TypedEventFilter; - -export interface log_named_intEventObject { - key: string; - val: BigNumber; -} -export type log_named_intEvent = TypedEvent< - [string, BigNumber], - log_named_intEventObject ->; - -export type log_named_intEventFilter = TypedEventFilter; - -export interface log_named_stringEventObject { - key: string; - val: string; -} -export type log_named_stringEvent = TypedEvent< - [string, string], - log_named_stringEventObject ->; - -export type log_named_stringEventFilter = - TypedEventFilter; - -export interface log_named_uintEventObject { - key: string; - val: BigNumber; -} -export type log_named_uintEvent = TypedEvent< - [string, BigNumber], - log_named_uintEventObject ->; - -export type log_named_uintEventFilter = TypedEventFilter; - -export interface log_stringEventObject { - arg0: string; -} -export type log_stringEvent = TypedEvent<[string], log_stringEventObject>; - -export type log_stringEventFilter = TypedEventFilter; - -export interface log_uintEventObject { - arg0: BigNumber; -} -export type log_uintEvent = TypedEvent<[BigNumber], log_uintEventObject>; - -export type log_uintEventFilter = TypedEventFilter; - -export interface logsEventObject { - arg0: string; -} -export type logsEvent = TypedEvent<[string], logsEventObject>; - -export type logsEventFilter = TypedEventFilter; - -export interface YearnFeedTest extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: YearnFeedTestInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - IS_TEST(overrides?: CallOverrides): Promise<[boolean]>; - - addressProvider(overrides?: CallOverrides): Promise<[string]>; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - pf(overrides?: CallOverrides): Promise<[string]>; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_YPF_01_constructor_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_YPF_02_constructor_reverts_for_zero_addresses( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_YPF_04_latestRoundData_works_correctly( - add: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_YPF_05_latestRoundData_reverts_or_bounds_for_out_of_bounds_prices( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlyingPf(overrides?: CallOverrides): Promise<[string]>; - - yearnMock(overrides?: CallOverrides): Promise<[string]>; - }; - - IS_TEST(overrides?: CallOverrides): Promise; - - addressProvider(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - pf(overrides?: CallOverrides): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_YPF_01_constructor_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_YPF_02_constructor_reverts_for_zero_addresses( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_YPF_04_latestRoundData_works_correctly( - add: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_YPF_05_latestRoundData_reverts_or_bounds_for_out_of_bounds_prices( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlyingPf(overrides?: CallOverrides): Promise; - - yearnMock(overrides?: CallOverrides): Promise; - - callStatic: { - IS_TEST(overrides?: CallOverrides): Promise; - - addressProvider(overrides?: CallOverrides): Promise; - - failed(overrides?: CallOverrides): Promise; - - pf(overrides?: CallOverrides): Promise; - - setUp(overrides?: CallOverrides): Promise; - - test_YPF_01_constructor_sets_correct_values( - overrides?: CallOverrides - ): Promise; - - test_YPF_02_constructor_reverts_for_zero_addresses( - overrides?: CallOverrides - ): Promise; - - test_YPF_04_latestRoundData_works_correctly( - add: BigNumberish, - overrides?: CallOverrides - ): Promise; - - test_YPF_05_latestRoundData_reverts_or_bounds_for_out_of_bounds_prices( - overrides?: CallOverrides - ): Promise; - - underlyingPf(overrides?: CallOverrides): Promise; - - yearnMock(overrides?: CallOverrides): Promise; - }; - - filters: { - "log(string)"(arg0?: null): logEventFilter; - log(arg0?: null): logEventFilter; - - "log_address(address)"(arg0?: null): log_addressEventFilter; - log_address(arg0?: null): log_addressEventFilter; - - "log_bytes(bytes)"(arg0?: null): log_bytesEventFilter; - log_bytes(arg0?: null): log_bytesEventFilter; - - "log_bytes32(bytes32)"(arg0?: null): log_bytes32EventFilter; - log_bytes32(arg0?: null): log_bytes32EventFilter; - - "log_int(int256)"(arg0?: null): log_intEventFilter; - log_int(arg0?: null): log_intEventFilter; - - "log_named_address(string,address)"( - key?: null, - val?: null - ): log_named_addressEventFilter; - log_named_address(key?: null, val?: null): log_named_addressEventFilter; - - "log_named_bytes(string,bytes)"( - key?: null, - val?: null - ): log_named_bytesEventFilter; - log_named_bytes(key?: null, val?: null): log_named_bytesEventFilter; - - "log_named_bytes32(string,bytes32)"( - key?: null, - val?: null - ): log_named_bytes32EventFilter; - log_named_bytes32(key?: null, val?: null): log_named_bytes32EventFilter; - - "log_named_decimal_int(string,int256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - log_named_decimal_int( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - - "log_named_decimal_uint(string,uint256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - log_named_decimal_uint( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - - "log_named_int(string,int256)"( - key?: null, - val?: null - ): log_named_intEventFilter; - log_named_int(key?: null, val?: null): log_named_intEventFilter; - - "log_named_string(string,string)"( - key?: null, - val?: null - ): log_named_stringEventFilter; - log_named_string(key?: null, val?: null): log_named_stringEventFilter; - - "log_named_uint(string,uint256)"( - key?: null, - val?: null - ): log_named_uintEventFilter; - log_named_uint(key?: null, val?: null): log_named_uintEventFilter; - - "log_string(string)"(arg0?: null): log_stringEventFilter; - log_string(arg0?: null): log_stringEventFilter; - - "log_uint(uint256)"(arg0?: null): log_uintEventFilter; - log_uint(arg0?: null): log_uintEventFilter; - - "logs(bytes)"(arg0?: null): logsEventFilter; - logs(arg0?: null): logsEventFilter; - }; - - estimateGas: { - IS_TEST(overrides?: CallOverrides): Promise; - - addressProvider(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - pf(overrides?: CallOverrides): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_YPF_01_constructor_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_YPF_02_constructor_reverts_for_zero_addresses( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_YPF_04_latestRoundData_works_correctly( - add: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_YPF_05_latestRoundData_reverts_or_bounds_for_out_of_bounds_prices( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlyingPf(overrides?: CallOverrides): Promise; - - yearnMock(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - IS_TEST(overrides?: CallOverrides): Promise; - - addressProvider(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - pf(overrides?: CallOverrides): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_YPF_01_constructor_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_YPF_02_constructor_reverts_for_zero_addresses( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_YPF_04_latestRoundData_works_correctly( - add: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_YPF_05_latestRoundData_reverts_or_bounds_for_out_of_bounds_prices( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlyingPf(overrides?: CallOverrides): Promise; - - yearnMock(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/test/oracles/YearnPriceFeed.t.sol/index.ts b/src/types/contracts/test/oracles/YearnPriceFeed.t.sol/index.ts deleted file mode 100644 index 06b0562b..00000000 --- a/src/types/contracts/test/oracles/YearnPriceFeed.t.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { YearnFeedTest } from "./YearnFeedTest"; diff --git a/src/types/contracts/test/oracles/ZeroPriceFeed.t.sol/ZeroFeedTest.ts b/src/types/contracts/test/oracles/ZeroPriceFeed.t.sol/ZeroFeedTest.ts deleted file mode 100644 index 8bec965b..00000000 --- a/src/types/contracts/test/oracles/ZeroPriceFeed.t.sol/ZeroFeedTest.ts +++ /dev/null @@ -1,503 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface ZeroFeedTestInterface extends utils.Interface { - functions: { - "IS_TEST()": FunctionFragment; - "failed()": FunctionFragment; - "pf()": FunctionFragment; - "setUp()": FunctionFragment; - "test_ZPF_01_constructor_sets_correct_values()": FunctionFragment; - "test_ZPF_02_getRoundData_reverts()": FunctionFragment; - "test_ZPF_03_latestRoundData_works_correctly()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "IS_TEST" - | "failed" - | "pf" - | "setUp" - | "test_ZPF_01_constructor_sets_correct_values" - | "test_ZPF_02_getRoundData_reverts" - | "test_ZPF_03_latestRoundData_works_correctly" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "IS_TEST", values?: undefined): string; - encodeFunctionData(functionFragment: "failed", values?: undefined): string; - encodeFunctionData(functionFragment: "pf", values?: undefined): string; - encodeFunctionData(functionFragment: "setUp", values?: undefined): string; - encodeFunctionData( - functionFragment: "test_ZPF_01_constructor_sets_correct_values", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_ZPF_02_getRoundData_reverts", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_ZPF_03_latestRoundData_works_correctly", - values?: undefined - ): string; - - decodeFunctionResult(functionFragment: "IS_TEST", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "failed", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "pf", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "setUp", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "test_ZPF_01_constructor_sets_correct_values", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_ZPF_02_getRoundData_reverts", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_ZPF_03_latestRoundData_works_correctly", - data: BytesLike - ): Result; - - events: { - "log(string)": EventFragment; - "log_address(address)": EventFragment; - "log_bytes(bytes)": EventFragment; - "log_bytes32(bytes32)": EventFragment; - "log_int(int256)": EventFragment; - "log_named_address(string,address)": EventFragment; - "log_named_bytes(string,bytes)": EventFragment; - "log_named_bytes32(string,bytes32)": EventFragment; - "log_named_decimal_int(string,int256,uint256)": EventFragment; - "log_named_decimal_uint(string,uint256,uint256)": EventFragment; - "log_named_int(string,int256)": EventFragment; - "log_named_string(string,string)": EventFragment; - "log_named_uint(string,uint256)": EventFragment; - "log_string(string)": EventFragment; - "log_uint(uint256)": EventFragment; - "logs(bytes)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "log"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "logs"): EventFragment; -} - -export interface logEventObject { - arg0: string; -} -export type logEvent = TypedEvent<[string], logEventObject>; - -export type logEventFilter = TypedEventFilter; - -export interface log_addressEventObject { - arg0: string; -} -export type log_addressEvent = TypedEvent<[string], log_addressEventObject>; - -export type log_addressEventFilter = TypedEventFilter; - -export interface log_bytesEventObject { - arg0: string; -} -export type log_bytesEvent = TypedEvent<[string], log_bytesEventObject>; - -export type log_bytesEventFilter = TypedEventFilter; - -export interface log_bytes32EventObject { - arg0: string; -} -export type log_bytes32Event = TypedEvent<[string], log_bytes32EventObject>; - -export type log_bytes32EventFilter = TypedEventFilter; - -export interface log_intEventObject { - arg0: BigNumber; -} -export type log_intEvent = TypedEvent<[BigNumber], log_intEventObject>; - -export type log_intEventFilter = TypedEventFilter; - -export interface log_named_addressEventObject { - key: string; - val: string; -} -export type log_named_addressEvent = TypedEvent< - [string, string], - log_named_addressEventObject ->; - -export type log_named_addressEventFilter = - TypedEventFilter; - -export interface log_named_bytesEventObject { - key: string; - val: string; -} -export type log_named_bytesEvent = TypedEvent< - [string, string], - log_named_bytesEventObject ->; - -export type log_named_bytesEventFilter = TypedEventFilter; - -export interface log_named_bytes32EventObject { - key: string; - val: string; -} -export type log_named_bytes32Event = TypedEvent< - [string, string], - log_named_bytes32EventObject ->; - -export type log_named_bytes32EventFilter = - TypedEventFilter; - -export interface log_named_decimal_intEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_intEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_intEventObject ->; - -export type log_named_decimal_intEventFilter = - TypedEventFilter; - -export interface log_named_decimal_uintEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_uintEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_uintEventObject ->; - -export type log_named_decimal_uintEventFilter = - TypedEventFilter; - -export interface log_named_intEventObject { - key: string; - val: BigNumber; -} -export type log_named_intEvent = TypedEvent< - [string, BigNumber], - log_named_intEventObject ->; - -export type log_named_intEventFilter = TypedEventFilter; - -export interface log_named_stringEventObject { - key: string; - val: string; -} -export type log_named_stringEvent = TypedEvent< - [string, string], - log_named_stringEventObject ->; - -export type log_named_stringEventFilter = - TypedEventFilter; - -export interface log_named_uintEventObject { - key: string; - val: BigNumber; -} -export type log_named_uintEvent = TypedEvent< - [string, BigNumber], - log_named_uintEventObject ->; - -export type log_named_uintEventFilter = TypedEventFilter; - -export interface log_stringEventObject { - arg0: string; -} -export type log_stringEvent = TypedEvent<[string], log_stringEventObject>; - -export type log_stringEventFilter = TypedEventFilter; - -export interface log_uintEventObject { - arg0: BigNumber; -} -export type log_uintEvent = TypedEvent<[BigNumber], log_uintEventObject>; - -export type log_uintEventFilter = TypedEventFilter; - -export interface logsEventObject { - arg0: string; -} -export type logsEvent = TypedEvent<[string], logsEventObject>; - -export type logsEventFilter = TypedEventFilter; - -export interface ZeroFeedTest extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: ZeroFeedTestInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - IS_TEST(overrides?: CallOverrides): Promise<[boolean]>; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - pf(overrides?: CallOverrides): Promise<[string]>; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ZPF_01_constructor_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ZPF_02_getRoundData_reverts( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ZPF_03_latestRoundData_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - IS_TEST(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - pf(overrides?: CallOverrides): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ZPF_01_constructor_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ZPF_02_getRoundData_reverts( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ZPF_03_latestRoundData_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - IS_TEST(overrides?: CallOverrides): Promise; - - failed(overrides?: CallOverrides): Promise; - - pf(overrides?: CallOverrides): Promise; - - setUp(overrides?: CallOverrides): Promise; - - test_ZPF_01_constructor_sets_correct_values( - overrides?: CallOverrides - ): Promise; - - test_ZPF_02_getRoundData_reverts(overrides?: CallOverrides): Promise; - - test_ZPF_03_latestRoundData_works_correctly( - overrides?: CallOverrides - ): Promise; - }; - - filters: { - "log(string)"(arg0?: null): logEventFilter; - log(arg0?: null): logEventFilter; - - "log_address(address)"(arg0?: null): log_addressEventFilter; - log_address(arg0?: null): log_addressEventFilter; - - "log_bytes(bytes)"(arg0?: null): log_bytesEventFilter; - log_bytes(arg0?: null): log_bytesEventFilter; - - "log_bytes32(bytes32)"(arg0?: null): log_bytes32EventFilter; - log_bytes32(arg0?: null): log_bytes32EventFilter; - - "log_int(int256)"(arg0?: null): log_intEventFilter; - log_int(arg0?: null): log_intEventFilter; - - "log_named_address(string,address)"( - key?: null, - val?: null - ): log_named_addressEventFilter; - log_named_address(key?: null, val?: null): log_named_addressEventFilter; - - "log_named_bytes(string,bytes)"( - key?: null, - val?: null - ): log_named_bytesEventFilter; - log_named_bytes(key?: null, val?: null): log_named_bytesEventFilter; - - "log_named_bytes32(string,bytes32)"( - key?: null, - val?: null - ): log_named_bytes32EventFilter; - log_named_bytes32(key?: null, val?: null): log_named_bytes32EventFilter; - - "log_named_decimal_int(string,int256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - log_named_decimal_int( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - - "log_named_decimal_uint(string,uint256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - log_named_decimal_uint( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - - "log_named_int(string,int256)"( - key?: null, - val?: null - ): log_named_intEventFilter; - log_named_int(key?: null, val?: null): log_named_intEventFilter; - - "log_named_string(string,string)"( - key?: null, - val?: null - ): log_named_stringEventFilter; - log_named_string(key?: null, val?: null): log_named_stringEventFilter; - - "log_named_uint(string,uint256)"( - key?: null, - val?: null - ): log_named_uintEventFilter; - log_named_uint(key?: null, val?: null): log_named_uintEventFilter; - - "log_string(string)"(arg0?: null): log_stringEventFilter; - log_string(arg0?: null): log_stringEventFilter; - - "log_uint(uint256)"(arg0?: null): log_uintEventFilter; - log_uint(arg0?: null): log_uintEventFilter; - - "logs(bytes)"(arg0?: null): logsEventFilter; - logs(arg0?: null): logsEventFilter; - }; - - estimateGas: { - IS_TEST(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - pf(overrides?: CallOverrides): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ZPF_01_constructor_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ZPF_02_getRoundData_reverts( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ZPF_03_latestRoundData_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - IS_TEST(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - pf(overrides?: CallOverrides): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ZPF_01_constructor_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ZPF_02_getRoundData_reverts( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_ZPF_03_latestRoundData_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/src/types/contracts/test/oracles/ZeroPriceFeed.t.sol/index.ts b/src/types/contracts/test/oracles/ZeroPriceFeed.t.sol/index.ts deleted file mode 100644 index a6faf3a4..00000000 --- a/src/types/contracts/test/oracles/ZeroPriceFeed.t.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { ZeroFeedTest } from "./ZeroFeedTest"; diff --git a/src/types/contracts/test/oracles/index.ts b/src/types/contracts/test/oracles/index.ts deleted file mode 100644 index 8e3170ec..00000000 --- a/src/types/contracts/test/oracles/index.ts +++ /dev/null @@ -1,13 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type * as curveLpPriceFeedTSol from "./CurveLPPriceFeed.t.sol"; -export type { curveLpPriceFeedTSol }; -import type * as lpPriceFeedTSol from "./LPPriceFeed.t.sol"; -export type { lpPriceFeedTSol }; -import type * as priceOracleTSol from "./PriceOracle.t.sol"; -export type { priceOracleTSol }; -import type * as yearnPriceFeedTSol from "./YearnPriceFeed.t.sol"; -export type { yearnPriceFeedTSol }; -import type * as zeroPriceFeedTSol from "./ZeroPriceFeed.t.sol"; -export type { zeroPriceFeedTSol }; diff --git a/src/types/contracts/test/pathfinder/CurveLPPathFinder.t.sol/CurveLPPathFinderTest.ts b/src/types/contracts/test/pathfinder/CurveLPPathFinder.t.sol/CurveLPPathFinderTest.ts deleted file mode 100644 index e963965f..00000000 --- a/src/types/contracts/test/pathfinder/CurveLPPathFinder.t.sol/CurveLPPathFinderTest.ts +++ /dev/null @@ -1,897 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface CurveLPPathFinderTestInterface extends utils.Interface { - functions: { - "IS_TEST()": FunctionFragment; - "_setUpCurve(bool)": FunctionFragment; - "cft()": FunctionFragment; - "creditConfigurator()": FunctionFragment; - "creditFacade()": FunctionFragment; - "creditManager()": FunctionFragment; - "curveAdapter()": FunctionFragment; - "curveLPPathFinder()": FunctionFragment; - "curveMetaAdapter()": FunctionFragment; - "curvePathFinder()": FunctionFragment; - "curveV1MetaMock()": FunctionFragment; - "curveV1Mock()": FunctionFragment; - "failed()": FunctionFragment; - "setUp()": FunctionFragment; - "test_CLPPF_01_filterCurveLPAdapters_finds_yearn_adapters_only()": FunctionFragment; - "test_CLPPF_02_withdrawAll_works_correctly()": FunctionFragment; - "tokenMasksMap(address)": FunctionFragment; - "underlying()": FunctionFragment; - "uniV2adapter()": FunctionFragment; - "uniV2mock()": FunctionFragment; - "uniV2pathFinder()": FunctionFragment; - "uniV3adapter()": FunctionFragment; - "uniV3mock()": FunctionFragment; - "uniV3pathFinder()": FunctionFragment; - "yearnAdapter()": FunctionFragment; - "yearnMock()": FunctionFragment; - "yearnPathFinder()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "IS_TEST" - | "_setUpCurve" - | "cft" - | "creditConfigurator" - | "creditFacade" - | "creditManager" - | "curveAdapter" - | "curveLPPathFinder" - | "curveMetaAdapter" - | "curvePathFinder" - | "curveV1MetaMock" - | "curveV1Mock" - | "failed" - | "setUp" - | "test_CLPPF_01_filterCurveLPAdapters_finds_yearn_adapters_only" - | "test_CLPPF_02_withdrawAll_works_correctly" - | "tokenMasksMap" - | "underlying" - | "uniV2adapter" - | "uniV2mock" - | "uniV2pathFinder" - | "uniV3adapter" - | "uniV3mock" - | "uniV3pathFinder" - | "yearnAdapter" - | "yearnMock" - | "yearnPathFinder" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "IS_TEST", values?: undefined): string; - encodeFunctionData( - functionFragment: "_setUpCurve", - values: [boolean] - ): string; - encodeFunctionData(functionFragment: "cft", values?: undefined): string; - encodeFunctionData( - functionFragment: "creditConfigurator", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditFacade", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditManager", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "curveAdapter", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "curveLPPathFinder", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "curveMetaAdapter", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "curvePathFinder", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "curveV1MetaMock", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "curveV1Mock", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "failed", values?: undefined): string; - encodeFunctionData(functionFragment: "setUp", values?: undefined): string; - encodeFunctionData( - functionFragment: "test_CLPPF_01_filterCurveLPAdapters_finds_yearn_adapters_only", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CLPPF_02_withdrawAll_works_correctly", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "tokenMasksMap", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "underlying", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "uniV2adapter", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "uniV2mock", values?: undefined): string; - encodeFunctionData( - functionFragment: "uniV2pathFinder", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "uniV3adapter", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "uniV3mock", values?: undefined): string; - encodeFunctionData( - functionFragment: "uniV3pathFinder", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "yearnAdapter", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "yearnMock", values?: undefined): string; - encodeFunctionData( - functionFragment: "yearnPathFinder", - values?: undefined - ): string; - - decodeFunctionResult(functionFragment: "IS_TEST", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "_setUpCurve", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "cft", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "creditConfigurator", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditFacade", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditManager", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "curveAdapter", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "curveLPPathFinder", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "curveMetaAdapter", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "curvePathFinder", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "curveV1MetaMock", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "curveV1Mock", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "failed", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "setUp", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "test_CLPPF_01_filterCurveLPAdapters_finds_yearn_adapters_only", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CLPPF_02_withdrawAll_works_correctly", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "tokenMasksMap", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "underlying", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "uniV2adapter", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "uniV2mock", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "uniV2pathFinder", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "uniV3adapter", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "uniV3mock", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "uniV3pathFinder", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "yearnAdapter", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "yearnMock", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "yearnPathFinder", - data: BytesLike - ): Result; - - events: { - "log(string)": EventFragment; - "log_address(address)": EventFragment; - "log_bytes(bytes)": EventFragment; - "log_bytes32(bytes32)": EventFragment; - "log_int(int256)": EventFragment; - "log_named_address(string,address)": EventFragment; - "log_named_bytes(string,bytes)": EventFragment; - "log_named_bytes32(string,bytes32)": EventFragment; - "log_named_decimal_int(string,int256,uint256)": EventFragment; - "log_named_decimal_uint(string,uint256,uint256)": EventFragment; - "log_named_int(string,int256)": EventFragment; - "log_named_string(string,string)": EventFragment; - "log_named_uint(string,uint256)": EventFragment; - "log_string(string)": EventFragment; - "log_uint(uint256)": EventFragment; - "logs(bytes)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "log"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "logs"): EventFragment; -} - -export interface logEventObject { - arg0: string; -} -export type logEvent = TypedEvent<[string], logEventObject>; - -export type logEventFilter = TypedEventFilter; - -export interface log_addressEventObject { - arg0: string; -} -export type log_addressEvent = TypedEvent<[string], log_addressEventObject>; - -export type log_addressEventFilter = TypedEventFilter; - -export interface log_bytesEventObject { - arg0: string; -} -export type log_bytesEvent = TypedEvent<[string], log_bytesEventObject>; - -export type log_bytesEventFilter = TypedEventFilter; - -export interface log_bytes32EventObject { - arg0: string; -} -export type log_bytes32Event = TypedEvent<[string], log_bytes32EventObject>; - -export type log_bytes32EventFilter = TypedEventFilter; - -export interface log_intEventObject { - arg0: BigNumber; -} -export type log_intEvent = TypedEvent<[BigNumber], log_intEventObject>; - -export type log_intEventFilter = TypedEventFilter; - -export interface log_named_addressEventObject { - key: string; - val: string; -} -export type log_named_addressEvent = TypedEvent< - [string, string], - log_named_addressEventObject ->; - -export type log_named_addressEventFilter = - TypedEventFilter; - -export interface log_named_bytesEventObject { - key: string; - val: string; -} -export type log_named_bytesEvent = TypedEvent< - [string, string], - log_named_bytesEventObject ->; - -export type log_named_bytesEventFilter = TypedEventFilter; - -export interface log_named_bytes32EventObject { - key: string; - val: string; -} -export type log_named_bytes32Event = TypedEvent< - [string, string], - log_named_bytes32EventObject ->; - -export type log_named_bytes32EventFilter = - TypedEventFilter; - -export interface log_named_decimal_intEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_intEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_intEventObject ->; - -export type log_named_decimal_intEventFilter = - TypedEventFilter; - -export interface log_named_decimal_uintEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_uintEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_uintEventObject ->; - -export type log_named_decimal_uintEventFilter = - TypedEventFilter; - -export interface log_named_intEventObject { - key: string; - val: BigNumber; -} -export type log_named_intEvent = TypedEvent< - [string, BigNumber], - log_named_intEventObject ->; - -export type log_named_intEventFilter = TypedEventFilter; - -export interface log_named_stringEventObject { - key: string; - val: string; -} -export type log_named_stringEvent = TypedEvent< - [string, string], - log_named_stringEventObject ->; - -export type log_named_stringEventFilter = - TypedEventFilter; - -export interface log_named_uintEventObject { - key: string; - val: BigNumber; -} -export type log_named_uintEvent = TypedEvent< - [string, BigNumber], - log_named_uintEventObject ->; - -export type log_named_uintEventFilter = TypedEventFilter; - -export interface log_stringEventObject { - arg0: string; -} -export type log_stringEvent = TypedEvent<[string], log_stringEventObject>; - -export type log_stringEventFilter = TypedEventFilter; - -export interface log_uintEventObject { - arg0: BigNumber; -} -export type log_uintEvent = TypedEvent<[BigNumber], log_uintEventObject>; - -export type log_uintEventFilter = TypedEventFilter; - -export interface logsEventObject { - arg0: string; -} -export type logsEvent = TypedEvent<[string], logsEventObject>; - -export type logsEventFilter = TypedEventFilter; - -export interface CurveLPPathFinderTest extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: CurveLPPathFinderTestInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - IS_TEST(overrides?: CallOverrides): Promise<[boolean]>; - - _setUpCurve( - withUnderlyings: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - cft(overrides?: CallOverrides): Promise<[string]>; - - creditConfigurator(overrides?: CallOverrides): Promise<[string]>; - - creditFacade(overrides?: CallOverrides): Promise<[string]>; - - creditManager(overrides?: CallOverrides): Promise<[string]>; - - curveAdapter(overrides?: CallOverrides): Promise<[string]>; - - curveLPPathFinder(overrides?: CallOverrides): Promise<[string]>; - - curveMetaAdapter(overrides?: CallOverrides): Promise<[string]>; - - curvePathFinder(overrides?: CallOverrides): Promise<[string]>; - - curveV1MetaMock(overrides?: CallOverrides): Promise<[string]>; - - curveV1Mock(overrides?: CallOverrides): Promise<[string]>; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CLPPF_01_filterCurveLPAdapters_finds_yearn_adapters_only( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CLPPF_02_withdrawAll_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - tokenMasksMap( - arg0: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - underlying(overrides?: CallOverrides): Promise<[string]>; - - uniV2adapter(overrides?: CallOverrides): Promise<[string]>; - - uniV2mock(overrides?: CallOverrides): Promise<[string]>; - - uniV2pathFinder(overrides?: CallOverrides): Promise<[string]>; - - uniV3adapter(overrides?: CallOverrides): Promise<[string]>; - - uniV3mock(overrides?: CallOverrides): Promise<[string]>; - - uniV3pathFinder(overrides?: CallOverrides): Promise<[string]>; - - yearnAdapter(overrides?: CallOverrides): Promise<[string]>; - - yearnMock(overrides?: CallOverrides): Promise<[string]>; - - yearnPathFinder(overrides?: CallOverrides): Promise<[string]>; - }; - - IS_TEST(overrides?: CallOverrides): Promise; - - _setUpCurve( - withUnderlyings: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - curveAdapter(overrides?: CallOverrides): Promise; - - curveLPPathFinder(overrides?: CallOverrides): Promise; - - curveMetaAdapter(overrides?: CallOverrides): Promise; - - curvePathFinder(overrides?: CallOverrides): Promise; - - curveV1MetaMock(overrides?: CallOverrides): Promise; - - curveV1Mock(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CLPPF_01_filterCurveLPAdapters_finds_yearn_adapters_only( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CLPPF_02_withdrawAll_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - tokenMasksMap(arg0: string, overrides?: CallOverrides): Promise; - - underlying(overrides?: CallOverrides): Promise; - - uniV2adapter(overrides?: CallOverrides): Promise; - - uniV2mock(overrides?: CallOverrides): Promise; - - uniV2pathFinder(overrides?: CallOverrides): Promise; - - uniV3adapter(overrides?: CallOverrides): Promise; - - uniV3mock(overrides?: CallOverrides): Promise; - - uniV3pathFinder(overrides?: CallOverrides): Promise; - - yearnAdapter(overrides?: CallOverrides): Promise; - - yearnMock(overrides?: CallOverrides): Promise; - - yearnPathFinder(overrides?: CallOverrides): Promise; - - callStatic: { - IS_TEST(overrides?: CallOverrides): Promise; - - _setUpCurve( - withUnderlyings: boolean, - overrides?: CallOverrides - ): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - curveAdapter(overrides?: CallOverrides): Promise; - - curveLPPathFinder(overrides?: CallOverrides): Promise; - - curveMetaAdapter(overrides?: CallOverrides): Promise; - - curvePathFinder(overrides?: CallOverrides): Promise; - - curveV1MetaMock(overrides?: CallOverrides): Promise; - - curveV1Mock(overrides?: CallOverrides): Promise; - - failed(overrides?: CallOverrides): Promise; - - setUp(overrides?: CallOverrides): Promise; - - test_CLPPF_01_filterCurveLPAdapters_finds_yearn_adapters_only( - overrides?: CallOverrides - ): Promise; - - test_CLPPF_02_withdrawAll_works_correctly( - overrides?: CallOverrides - ): Promise; - - tokenMasksMap(arg0: string, overrides?: CallOverrides): Promise; - - underlying(overrides?: CallOverrides): Promise; - - uniV2adapter(overrides?: CallOverrides): Promise; - - uniV2mock(overrides?: CallOverrides): Promise; - - uniV2pathFinder(overrides?: CallOverrides): Promise; - - uniV3adapter(overrides?: CallOverrides): Promise; - - uniV3mock(overrides?: CallOverrides): Promise; - - uniV3pathFinder(overrides?: CallOverrides): Promise; - - yearnAdapter(overrides?: CallOverrides): Promise; - - yearnMock(overrides?: CallOverrides): Promise; - - yearnPathFinder(overrides?: CallOverrides): Promise; - }; - - filters: { - "log(string)"(arg0?: null): logEventFilter; - log(arg0?: null): logEventFilter; - - "log_address(address)"(arg0?: null): log_addressEventFilter; - log_address(arg0?: null): log_addressEventFilter; - - "log_bytes(bytes)"(arg0?: null): log_bytesEventFilter; - log_bytes(arg0?: null): log_bytesEventFilter; - - "log_bytes32(bytes32)"(arg0?: null): log_bytes32EventFilter; - log_bytes32(arg0?: null): log_bytes32EventFilter; - - "log_int(int256)"(arg0?: null): log_intEventFilter; - log_int(arg0?: null): log_intEventFilter; - - "log_named_address(string,address)"( - key?: null, - val?: null - ): log_named_addressEventFilter; - log_named_address(key?: null, val?: null): log_named_addressEventFilter; - - "log_named_bytes(string,bytes)"( - key?: null, - val?: null - ): log_named_bytesEventFilter; - log_named_bytes(key?: null, val?: null): log_named_bytesEventFilter; - - "log_named_bytes32(string,bytes32)"( - key?: null, - val?: null - ): log_named_bytes32EventFilter; - log_named_bytes32(key?: null, val?: null): log_named_bytes32EventFilter; - - "log_named_decimal_int(string,int256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - log_named_decimal_int( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - - "log_named_decimal_uint(string,uint256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - log_named_decimal_uint( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - - "log_named_int(string,int256)"( - key?: null, - val?: null - ): log_named_intEventFilter; - log_named_int(key?: null, val?: null): log_named_intEventFilter; - - "log_named_string(string,string)"( - key?: null, - val?: null - ): log_named_stringEventFilter; - log_named_string(key?: null, val?: null): log_named_stringEventFilter; - - "log_named_uint(string,uint256)"( - key?: null, - val?: null - ): log_named_uintEventFilter; - log_named_uint(key?: null, val?: null): log_named_uintEventFilter; - - "log_string(string)"(arg0?: null): log_stringEventFilter; - log_string(arg0?: null): log_stringEventFilter; - - "log_uint(uint256)"(arg0?: null): log_uintEventFilter; - log_uint(arg0?: null): log_uintEventFilter; - - "logs(bytes)"(arg0?: null): logsEventFilter; - logs(arg0?: null): logsEventFilter; - }; - - estimateGas: { - IS_TEST(overrides?: CallOverrides): Promise; - - _setUpCurve( - withUnderlyings: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - curveAdapter(overrides?: CallOverrides): Promise; - - curveLPPathFinder(overrides?: CallOverrides): Promise; - - curveMetaAdapter(overrides?: CallOverrides): Promise; - - curvePathFinder(overrides?: CallOverrides): Promise; - - curveV1MetaMock(overrides?: CallOverrides): Promise; - - curveV1Mock(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CLPPF_01_filterCurveLPAdapters_finds_yearn_adapters_only( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CLPPF_02_withdrawAll_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - tokenMasksMap(arg0: string, overrides?: CallOverrides): Promise; - - underlying(overrides?: CallOverrides): Promise; - - uniV2adapter(overrides?: CallOverrides): Promise; - - uniV2mock(overrides?: CallOverrides): Promise; - - uniV2pathFinder(overrides?: CallOverrides): Promise; - - uniV3adapter(overrides?: CallOverrides): Promise; - - uniV3mock(overrides?: CallOverrides): Promise; - - uniV3pathFinder(overrides?: CallOverrides): Promise; - - yearnAdapter(overrides?: CallOverrides): Promise; - - yearnMock(overrides?: CallOverrides): Promise; - - yearnPathFinder(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - IS_TEST(overrides?: CallOverrides): Promise; - - _setUpCurve( - withUnderlyings: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator( - overrides?: CallOverrides - ): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - curveAdapter(overrides?: CallOverrides): Promise; - - curveLPPathFinder(overrides?: CallOverrides): Promise; - - curveMetaAdapter(overrides?: CallOverrides): Promise; - - curvePathFinder(overrides?: CallOverrides): Promise; - - curveV1MetaMock(overrides?: CallOverrides): Promise; - - curveV1Mock(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CLPPF_01_filterCurveLPAdapters_finds_yearn_adapters_only( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CLPPF_02_withdrawAll_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - tokenMasksMap( - arg0: string, - overrides?: CallOverrides - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - - uniV2adapter(overrides?: CallOverrides): Promise; - - uniV2mock(overrides?: CallOverrides): Promise; - - uniV2pathFinder(overrides?: CallOverrides): Promise; - - uniV3adapter(overrides?: CallOverrides): Promise; - - uniV3mock(overrides?: CallOverrides): Promise; - - uniV3pathFinder(overrides?: CallOverrides): Promise; - - yearnAdapter(overrides?: CallOverrides): Promise; - - yearnMock(overrides?: CallOverrides): Promise; - - yearnPathFinder(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/test/pathfinder/CurveLPPathFinder.t.sol/index.ts b/src/types/contracts/test/pathfinder/CurveLPPathFinder.t.sol/index.ts deleted file mode 100644 index bf6f60c5..00000000 --- a/src/types/contracts/test/pathfinder/CurveLPPathFinder.t.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { CurveLPPathFinderTest } from "./CurveLPPathFinderTest"; diff --git a/src/types/contracts/test/pathfinder/CurvePathFinder.t.sol/CurvePathFinderTest.ts b/src/types/contracts/test/pathfinder/CurvePathFinder.t.sol/CurvePathFinderTest.ts deleted file mode 100644 index c628aa02..00000000 --- a/src/types/contracts/test/pathfinder/CurvePathFinder.t.sol/CurvePathFinderTest.ts +++ /dev/null @@ -1,1058 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface CurvePathFinderTestInterface extends utils.Interface { - functions: { - "IS_TEST()": FunctionFragment; - "_setUpCurve(bool)": FunctionFragment; - "cft()": FunctionFragment; - "creditConfigurator()": FunctionFragment; - "creditFacade()": FunctionFragment; - "creditManager()": FunctionFragment; - "curveAdapter()": FunctionFragment; - "curveLPPathFinder()": FunctionFragment; - "curveMetaAdapter()": FunctionFragment; - "curvePathFinder()": FunctionFragment; - "curveV1MetaMock()": FunctionFragment; - "curveV1Mock()": FunctionFragment; - "failed()": FunctionFragment; - "setUp()": FunctionFragment; - "test_PCV_01_addPool_correctly_sets_values()": FunctionFragment; - "test_PCV_02_setGasUsage_correctly_sets_values()": FunctionFragment; - "test_PCV_03_getBestDirectPairSwap_returns_empty_quote_for_unknown_tokens()": FunctionFragment; - "test_PCV_04_getBestDirectPairSwap_returns_empty_quote_for_unknown_tokens()": FunctionFragment; - "test_PCV_05_getBestDirectPairSwap_returns_correct_swapQuote(uint256,uint256,bool,bool)": FunctionFragment; - "test_PCV_06_getBestDirectPairSwap_returns_correct_swapQuote(uint256,uint256,bool,bool)": FunctionFragment; - "tokenMasksMap(address)": FunctionFragment; - "underlying()": FunctionFragment; - "uniV2adapter()": FunctionFragment; - "uniV2mock()": FunctionFragment; - "uniV2pathFinder()": FunctionFragment; - "uniV3adapter()": FunctionFragment; - "uniV3mock()": FunctionFragment; - "uniV3pathFinder()": FunctionFragment; - "yearnAdapter()": FunctionFragment; - "yearnMock()": FunctionFragment; - "yearnPathFinder()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "IS_TEST" - | "_setUpCurve" - | "cft" - | "creditConfigurator" - | "creditFacade" - | "creditManager" - | "curveAdapter" - | "curveLPPathFinder" - | "curveMetaAdapter" - | "curvePathFinder" - | "curveV1MetaMock" - | "curveV1Mock" - | "failed" - | "setUp" - | "test_PCV_01_addPool_correctly_sets_values" - | "test_PCV_02_setGasUsage_correctly_sets_values" - | "test_PCV_03_getBestDirectPairSwap_returns_empty_quote_for_unknown_tokens" - | "test_PCV_04_getBestDirectPairSwap_returns_empty_quote_for_unknown_tokens" - | "test_PCV_05_getBestDirectPairSwap_returns_correct_swapQuote" - | "test_PCV_06_getBestDirectPairSwap_returns_correct_swapQuote" - | "tokenMasksMap" - | "underlying" - | "uniV2adapter" - | "uniV2mock" - | "uniV2pathFinder" - | "uniV3adapter" - | "uniV3mock" - | "uniV3pathFinder" - | "yearnAdapter" - | "yearnMock" - | "yearnPathFinder" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "IS_TEST", values?: undefined): string; - encodeFunctionData( - functionFragment: "_setUpCurve", - values: [boolean] - ): string; - encodeFunctionData(functionFragment: "cft", values?: undefined): string; - encodeFunctionData( - functionFragment: "creditConfigurator", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditFacade", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditManager", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "curveAdapter", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "curveLPPathFinder", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "curveMetaAdapter", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "curvePathFinder", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "curveV1MetaMock", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "curveV1Mock", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "failed", values?: undefined): string; - encodeFunctionData(functionFragment: "setUp", values?: undefined): string; - encodeFunctionData( - functionFragment: "test_PCV_01_addPool_correctly_sets_values", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_PCV_02_setGasUsage_correctly_sets_values", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_PCV_03_getBestDirectPairSwap_returns_empty_quote_for_unknown_tokens", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_PCV_04_getBestDirectPairSwap_returns_empty_quote_for_unknown_tokens", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_PCV_05_getBestDirectPairSwap_returns_correct_swapQuote", - values: [BigNumberish, BigNumberish, boolean, boolean] - ): string; - encodeFunctionData( - functionFragment: "test_PCV_06_getBestDirectPairSwap_returns_correct_swapQuote", - values: [BigNumberish, BigNumberish, boolean, boolean] - ): string; - encodeFunctionData( - functionFragment: "tokenMasksMap", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "underlying", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "uniV2adapter", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "uniV2mock", values?: undefined): string; - encodeFunctionData( - functionFragment: "uniV2pathFinder", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "uniV3adapter", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "uniV3mock", values?: undefined): string; - encodeFunctionData( - functionFragment: "uniV3pathFinder", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "yearnAdapter", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "yearnMock", values?: undefined): string; - encodeFunctionData( - functionFragment: "yearnPathFinder", - values?: undefined - ): string; - - decodeFunctionResult(functionFragment: "IS_TEST", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "_setUpCurve", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "cft", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "creditConfigurator", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditFacade", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditManager", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "curveAdapter", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "curveLPPathFinder", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "curveMetaAdapter", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "curvePathFinder", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "curveV1MetaMock", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "curveV1Mock", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "failed", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "setUp", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "test_PCV_01_addPool_correctly_sets_values", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_PCV_02_setGasUsage_correctly_sets_values", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_PCV_03_getBestDirectPairSwap_returns_empty_quote_for_unknown_tokens", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_PCV_04_getBestDirectPairSwap_returns_empty_quote_for_unknown_tokens", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_PCV_05_getBestDirectPairSwap_returns_correct_swapQuote", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_PCV_06_getBestDirectPairSwap_returns_correct_swapQuote", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "tokenMasksMap", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "underlying", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "uniV2adapter", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "uniV2mock", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "uniV2pathFinder", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "uniV3adapter", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "uniV3mock", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "uniV3pathFinder", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "yearnAdapter", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "yearnMock", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "yearnPathFinder", - data: BytesLike - ): Result; - - events: { - "log(string)": EventFragment; - "log_address(address)": EventFragment; - "log_bytes(bytes)": EventFragment; - "log_bytes32(bytes32)": EventFragment; - "log_int(int256)": EventFragment; - "log_named_address(string,address)": EventFragment; - "log_named_bytes(string,bytes)": EventFragment; - "log_named_bytes32(string,bytes32)": EventFragment; - "log_named_decimal_int(string,int256,uint256)": EventFragment; - "log_named_decimal_uint(string,uint256,uint256)": EventFragment; - "log_named_int(string,int256)": EventFragment; - "log_named_string(string,string)": EventFragment; - "log_named_uint(string,uint256)": EventFragment; - "log_string(string)": EventFragment; - "log_uint(uint256)": EventFragment; - "logs(bytes)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "log"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "logs"): EventFragment; -} - -export interface logEventObject { - arg0: string; -} -export type logEvent = TypedEvent<[string], logEventObject>; - -export type logEventFilter = TypedEventFilter; - -export interface log_addressEventObject { - arg0: string; -} -export type log_addressEvent = TypedEvent<[string], log_addressEventObject>; - -export type log_addressEventFilter = TypedEventFilter; - -export interface log_bytesEventObject { - arg0: string; -} -export type log_bytesEvent = TypedEvent<[string], log_bytesEventObject>; - -export type log_bytesEventFilter = TypedEventFilter; - -export interface log_bytes32EventObject { - arg0: string; -} -export type log_bytes32Event = TypedEvent<[string], log_bytes32EventObject>; - -export type log_bytes32EventFilter = TypedEventFilter; - -export interface log_intEventObject { - arg0: BigNumber; -} -export type log_intEvent = TypedEvent<[BigNumber], log_intEventObject>; - -export type log_intEventFilter = TypedEventFilter; - -export interface log_named_addressEventObject { - key: string; - val: string; -} -export type log_named_addressEvent = TypedEvent< - [string, string], - log_named_addressEventObject ->; - -export type log_named_addressEventFilter = - TypedEventFilter; - -export interface log_named_bytesEventObject { - key: string; - val: string; -} -export type log_named_bytesEvent = TypedEvent< - [string, string], - log_named_bytesEventObject ->; - -export type log_named_bytesEventFilter = TypedEventFilter; - -export interface log_named_bytes32EventObject { - key: string; - val: string; -} -export type log_named_bytes32Event = TypedEvent< - [string, string], - log_named_bytes32EventObject ->; - -export type log_named_bytes32EventFilter = - TypedEventFilter; - -export interface log_named_decimal_intEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_intEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_intEventObject ->; - -export type log_named_decimal_intEventFilter = - TypedEventFilter; - -export interface log_named_decimal_uintEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_uintEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_uintEventObject ->; - -export type log_named_decimal_uintEventFilter = - TypedEventFilter; - -export interface log_named_intEventObject { - key: string; - val: BigNumber; -} -export type log_named_intEvent = TypedEvent< - [string, BigNumber], - log_named_intEventObject ->; - -export type log_named_intEventFilter = TypedEventFilter; - -export interface log_named_stringEventObject { - key: string; - val: string; -} -export type log_named_stringEvent = TypedEvent< - [string, string], - log_named_stringEventObject ->; - -export type log_named_stringEventFilter = - TypedEventFilter; - -export interface log_named_uintEventObject { - key: string; - val: BigNumber; -} -export type log_named_uintEvent = TypedEvent< - [string, BigNumber], - log_named_uintEventObject ->; - -export type log_named_uintEventFilter = TypedEventFilter; - -export interface log_stringEventObject { - arg0: string; -} -export type log_stringEvent = TypedEvent<[string], log_stringEventObject>; - -export type log_stringEventFilter = TypedEventFilter; - -export interface log_uintEventObject { - arg0: BigNumber; -} -export type log_uintEvent = TypedEvent<[BigNumber], log_uintEventObject>; - -export type log_uintEventFilter = TypedEventFilter; - -export interface logsEventObject { - arg0: string; -} -export type logsEvent = TypedEvent<[string], logsEventObject>; - -export type logsEventFilter = TypedEventFilter; - -export interface CurvePathFinderTest extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: CurvePathFinderTestInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - IS_TEST(overrides?: CallOverrides): Promise<[boolean]>; - - _setUpCurve( - withUnderlyings: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - cft(overrides?: CallOverrides): Promise<[string]>; - - creditConfigurator(overrides?: CallOverrides): Promise<[string]>; - - creditFacade(overrides?: CallOverrides): Promise<[string]>; - - creditManager(overrides?: CallOverrides): Promise<[string]>; - - curveAdapter(overrides?: CallOverrides): Promise<[string]>; - - curveLPPathFinder(overrides?: CallOverrides): Promise<[string]>; - - curveMetaAdapter(overrides?: CallOverrides): Promise<[string]>; - - curvePathFinder(overrides?: CallOverrides): Promise<[string]>; - - curveV1MetaMock(overrides?: CallOverrides): Promise<[string]>; - - curveV1Mock(overrides?: CallOverrides): Promise<[string]>; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PCV_01_addPool_correctly_sets_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PCV_02_setGasUsage_correctly_sets_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PCV_03_getBestDirectPairSwap_returns_empty_quote_for_unknown_tokens( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PCV_04_getBestDirectPairSwap_returns_empty_quote_for_unknown_tokens( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PCV_05_getBestDirectPairSwap_returns_correct_swapQuote( - amountIn: BigNumberish, - slippage: BigNumberish, - isAll: boolean, - externalSlippage: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PCV_06_getBestDirectPairSwap_returns_correct_swapQuote( - amountIn: BigNumberish, - slippage: BigNumberish, - isAll: boolean, - externalSlippage: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - tokenMasksMap( - arg0: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - underlying(overrides?: CallOverrides): Promise<[string]>; - - uniV2adapter(overrides?: CallOverrides): Promise<[string]>; - - uniV2mock(overrides?: CallOverrides): Promise<[string]>; - - uniV2pathFinder(overrides?: CallOverrides): Promise<[string]>; - - uniV3adapter(overrides?: CallOverrides): Promise<[string]>; - - uniV3mock(overrides?: CallOverrides): Promise<[string]>; - - uniV3pathFinder(overrides?: CallOverrides): Promise<[string]>; - - yearnAdapter(overrides?: CallOverrides): Promise<[string]>; - - yearnMock(overrides?: CallOverrides): Promise<[string]>; - - yearnPathFinder(overrides?: CallOverrides): Promise<[string]>; - }; - - IS_TEST(overrides?: CallOverrides): Promise; - - _setUpCurve( - withUnderlyings: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - curveAdapter(overrides?: CallOverrides): Promise; - - curveLPPathFinder(overrides?: CallOverrides): Promise; - - curveMetaAdapter(overrides?: CallOverrides): Promise; - - curvePathFinder(overrides?: CallOverrides): Promise; - - curveV1MetaMock(overrides?: CallOverrides): Promise; - - curveV1Mock(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PCV_01_addPool_correctly_sets_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PCV_02_setGasUsage_correctly_sets_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PCV_03_getBestDirectPairSwap_returns_empty_quote_for_unknown_tokens( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PCV_04_getBestDirectPairSwap_returns_empty_quote_for_unknown_tokens( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PCV_05_getBestDirectPairSwap_returns_correct_swapQuote( - amountIn: BigNumberish, - slippage: BigNumberish, - isAll: boolean, - externalSlippage: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PCV_06_getBestDirectPairSwap_returns_correct_swapQuote( - amountIn: BigNumberish, - slippage: BigNumberish, - isAll: boolean, - externalSlippage: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - tokenMasksMap(arg0: string, overrides?: CallOverrides): Promise; - - underlying(overrides?: CallOverrides): Promise; - - uniV2adapter(overrides?: CallOverrides): Promise; - - uniV2mock(overrides?: CallOverrides): Promise; - - uniV2pathFinder(overrides?: CallOverrides): Promise; - - uniV3adapter(overrides?: CallOverrides): Promise; - - uniV3mock(overrides?: CallOverrides): Promise; - - uniV3pathFinder(overrides?: CallOverrides): Promise; - - yearnAdapter(overrides?: CallOverrides): Promise; - - yearnMock(overrides?: CallOverrides): Promise; - - yearnPathFinder(overrides?: CallOverrides): Promise; - - callStatic: { - IS_TEST(overrides?: CallOverrides): Promise; - - _setUpCurve( - withUnderlyings: boolean, - overrides?: CallOverrides - ): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - curveAdapter(overrides?: CallOverrides): Promise; - - curveLPPathFinder(overrides?: CallOverrides): Promise; - - curveMetaAdapter(overrides?: CallOverrides): Promise; - - curvePathFinder(overrides?: CallOverrides): Promise; - - curveV1MetaMock(overrides?: CallOverrides): Promise; - - curveV1Mock(overrides?: CallOverrides): Promise; - - failed(overrides?: CallOverrides): Promise; - - setUp(overrides?: CallOverrides): Promise; - - test_PCV_01_addPool_correctly_sets_values( - overrides?: CallOverrides - ): Promise; - - test_PCV_02_setGasUsage_correctly_sets_values( - overrides?: CallOverrides - ): Promise; - - test_PCV_03_getBestDirectPairSwap_returns_empty_quote_for_unknown_tokens( - overrides?: CallOverrides - ): Promise; - - test_PCV_04_getBestDirectPairSwap_returns_empty_quote_for_unknown_tokens( - overrides?: CallOverrides - ): Promise; - - test_PCV_05_getBestDirectPairSwap_returns_correct_swapQuote( - amountIn: BigNumberish, - slippage: BigNumberish, - isAll: boolean, - externalSlippage: boolean, - overrides?: CallOverrides - ): Promise; - - test_PCV_06_getBestDirectPairSwap_returns_correct_swapQuote( - amountIn: BigNumberish, - slippage: BigNumberish, - isAll: boolean, - externalSlippage: boolean, - overrides?: CallOverrides - ): Promise; - - tokenMasksMap(arg0: string, overrides?: CallOverrides): Promise; - - underlying(overrides?: CallOverrides): Promise; - - uniV2adapter(overrides?: CallOverrides): Promise; - - uniV2mock(overrides?: CallOverrides): Promise; - - uniV2pathFinder(overrides?: CallOverrides): Promise; - - uniV3adapter(overrides?: CallOverrides): Promise; - - uniV3mock(overrides?: CallOverrides): Promise; - - uniV3pathFinder(overrides?: CallOverrides): Promise; - - yearnAdapter(overrides?: CallOverrides): Promise; - - yearnMock(overrides?: CallOverrides): Promise; - - yearnPathFinder(overrides?: CallOverrides): Promise; - }; - - filters: { - "log(string)"(arg0?: null): logEventFilter; - log(arg0?: null): logEventFilter; - - "log_address(address)"(arg0?: null): log_addressEventFilter; - log_address(arg0?: null): log_addressEventFilter; - - "log_bytes(bytes)"(arg0?: null): log_bytesEventFilter; - log_bytes(arg0?: null): log_bytesEventFilter; - - "log_bytes32(bytes32)"(arg0?: null): log_bytes32EventFilter; - log_bytes32(arg0?: null): log_bytes32EventFilter; - - "log_int(int256)"(arg0?: null): log_intEventFilter; - log_int(arg0?: null): log_intEventFilter; - - "log_named_address(string,address)"( - key?: null, - val?: null - ): log_named_addressEventFilter; - log_named_address(key?: null, val?: null): log_named_addressEventFilter; - - "log_named_bytes(string,bytes)"( - key?: null, - val?: null - ): log_named_bytesEventFilter; - log_named_bytes(key?: null, val?: null): log_named_bytesEventFilter; - - "log_named_bytes32(string,bytes32)"( - key?: null, - val?: null - ): log_named_bytes32EventFilter; - log_named_bytes32(key?: null, val?: null): log_named_bytes32EventFilter; - - "log_named_decimal_int(string,int256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - log_named_decimal_int( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - - "log_named_decimal_uint(string,uint256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - log_named_decimal_uint( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - - "log_named_int(string,int256)"( - key?: null, - val?: null - ): log_named_intEventFilter; - log_named_int(key?: null, val?: null): log_named_intEventFilter; - - "log_named_string(string,string)"( - key?: null, - val?: null - ): log_named_stringEventFilter; - log_named_string(key?: null, val?: null): log_named_stringEventFilter; - - "log_named_uint(string,uint256)"( - key?: null, - val?: null - ): log_named_uintEventFilter; - log_named_uint(key?: null, val?: null): log_named_uintEventFilter; - - "log_string(string)"(arg0?: null): log_stringEventFilter; - log_string(arg0?: null): log_stringEventFilter; - - "log_uint(uint256)"(arg0?: null): log_uintEventFilter; - log_uint(arg0?: null): log_uintEventFilter; - - "logs(bytes)"(arg0?: null): logsEventFilter; - logs(arg0?: null): logsEventFilter; - }; - - estimateGas: { - IS_TEST(overrides?: CallOverrides): Promise; - - _setUpCurve( - withUnderlyings: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - curveAdapter(overrides?: CallOverrides): Promise; - - curveLPPathFinder(overrides?: CallOverrides): Promise; - - curveMetaAdapter(overrides?: CallOverrides): Promise; - - curvePathFinder(overrides?: CallOverrides): Promise; - - curveV1MetaMock(overrides?: CallOverrides): Promise; - - curveV1Mock(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PCV_01_addPool_correctly_sets_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PCV_02_setGasUsage_correctly_sets_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PCV_03_getBestDirectPairSwap_returns_empty_quote_for_unknown_tokens( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PCV_04_getBestDirectPairSwap_returns_empty_quote_for_unknown_tokens( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PCV_05_getBestDirectPairSwap_returns_correct_swapQuote( - amountIn: BigNumberish, - slippage: BigNumberish, - isAll: boolean, - externalSlippage: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PCV_06_getBestDirectPairSwap_returns_correct_swapQuote( - amountIn: BigNumberish, - slippage: BigNumberish, - isAll: boolean, - externalSlippage: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - tokenMasksMap(arg0: string, overrides?: CallOverrides): Promise; - - underlying(overrides?: CallOverrides): Promise; - - uniV2adapter(overrides?: CallOverrides): Promise; - - uniV2mock(overrides?: CallOverrides): Promise; - - uniV2pathFinder(overrides?: CallOverrides): Promise; - - uniV3adapter(overrides?: CallOverrides): Promise; - - uniV3mock(overrides?: CallOverrides): Promise; - - uniV3pathFinder(overrides?: CallOverrides): Promise; - - yearnAdapter(overrides?: CallOverrides): Promise; - - yearnMock(overrides?: CallOverrides): Promise; - - yearnPathFinder(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - IS_TEST(overrides?: CallOverrides): Promise; - - _setUpCurve( - withUnderlyings: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator( - overrides?: CallOverrides - ): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - curveAdapter(overrides?: CallOverrides): Promise; - - curveLPPathFinder(overrides?: CallOverrides): Promise; - - curveMetaAdapter(overrides?: CallOverrides): Promise; - - curvePathFinder(overrides?: CallOverrides): Promise; - - curveV1MetaMock(overrides?: CallOverrides): Promise; - - curveV1Mock(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PCV_01_addPool_correctly_sets_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PCV_02_setGasUsage_correctly_sets_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PCV_03_getBestDirectPairSwap_returns_empty_quote_for_unknown_tokens( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PCV_04_getBestDirectPairSwap_returns_empty_quote_for_unknown_tokens( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PCV_05_getBestDirectPairSwap_returns_correct_swapQuote( - amountIn: BigNumberish, - slippage: BigNumberish, - isAll: boolean, - externalSlippage: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PCV_06_getBestDirectPairSwap_returns_correct_swapQuote( - amountIn: BigNumberish, - slippage: BigNumberish, - isAll: boolean, - externalSlippage: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - tokenMasksMap( - arg0: string, - overrides?: CallOverrides - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - - uniV2adapter(overrides?: CallOverrides): Promise; - - uniV2mock(overrides?: CallOverrides): Promise; - - uniV2pathFinder(overrides?: CallOverrides): Promise; - - uniV3adapter(overrides?: CallOverrides): Promise; - - uniV3mock(overrides?: CallOverrides): Promise; - - uniV3pathFinder(overrides?: CallOverrides): Promise; - - yearnAdapter(overrides?: CallOverrides): Promise; - - yearnMock(overrides?: CallOverrides): Promise; - - yearnPathFinder(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/test/pathfinder/CurvePathFinder.t.sol/index.ts b/src/types/contracts/test/pathfinder/CurvePathFinder.t.sol/index.ts deleted file mode 100644 index 19aafdb5..00000000 --- a/src/types/contracts/test/pathfinder/CurvePathFinder.t.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { CurvePathFinderTest } from "./CurvePathFinderTest"; diff --git a/src/types/contracts/test/pathfinder/NormalTokenPathFinder.t.sol/NormalTokenPathFinderTest.ts b/src/types/contracts/test/pathfinder/NormalTokenPathFinder.t.sol/NormalTokenPathFinderTest.ts deleted file mode 100644 index 2cdb37a7..00000000 --- a/src/types/contracts/test/pathfinder/NormalTokenPathFinder.t.sol/NormalTokenPathFinderTest.ts +++ /dev/null @@ -1,1243 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface NormalTokenPathFinderTestInterface extends utils.Interface { - functions: { - "IS_TEST()": FunctionFragment; - "_setUpCurve(bool)": FunctionFragment; - "cft()": FunctionFragment; - "creditConfigurator()": FunctionFragment; - "creditFacade()": FunctionFragment; - "creditManager()": FunctionFragment; - "curveAdapter()": FunctionFragment; - "curveLPPathFinder()": FunctionFragment; - "curveMetaAdapter()": FunctionFragment; - "curvePathFinder()": FunctionFragment; - "curveV1MetaMock()": FunctionFragment; - "curveV1Mock()": FunctionFragment; - "failed()": FunctionFragment; - "setUp()": FunctionFragment; - "test_CPF_01_constructor_correctly_sets_initial_values()": FunctionFragment; - "test_CPF_02_getGasPriceTokenOutRAY_works_correctly()": FunctionFragment; - "test_CPF_03_getComplexPairSwap_finds_pair_through_different_protocols(uint256,bool,bool)": FunctionFragment; - "test_CPF_04_getComplexPairSwap_finds_the_best_path_gp_0(uint256,bool,bool)": FunctionFragment; - "test_CPF_05_getComplexPairSwap_finds_the_best_path_gp_non_zero(uint256,bool,uint256)": FunctionFragment; - "test_CPF_06_findSwapQuote_finds_the_best_path_for_connectors(uint256,uint256)": FunctionFragment; - "test_CPF_07_findSwapQuote_finds_the_best_path_gp_0(uint256,uint256)": FunctionFragment; - "test_CPF_08_findSwapQuote_finds_the_best_path_gp_non_zero(uint256,uint256)": FunctionFragment; - "test_CPF_09_findNormalTokenBestPath_reverts_if_it_can_find_any_path()": FunctionFragment; - "test_CPF_10_findNormalTokenBestPath_finds_correct_path_for_connector_tokens()": FunctionFragment; - "test_CPF_11_findNormalTokenBestPath_finds_correct_path_for_connector_tokens()": FunctionFragment; - "tokenMasksMap(address)": FunctionFragment; - "underlying()": FunctionFragment; - "uniV2adapter()": FunctionFragment; - "uniV2mock()": FunctionFragment; - "uniV2pathFinder()": FunctionFragment; - "uniV3adapter()": FunctionFragment; - "uniV3mock()": FunctionFragment; - "uniV3pathFinder()": FunctionFragment; - "yearnAdapter()": FunctionFragment; - "yearnMock()": FunctionFragment; - "yearnPathFinder()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "IS_TEST" - | "_setUpCurve" - | "cft" - | "creditConfigurator" - | "creditFacade" - | "creditManager" - | "curveAdapter" - | "curveLPPathFinder" - | "curveMetaAdapter" - | "curvePathFinder" - | "curveV1MetaMock" - | "curveV1Mock" - | "failed" - | "setUp" - | "test_CPF_01_constructor_correctly_sets_initial_values" - | "test_CPF_02_getGasPriceTokenOutRAY_works_correctly" - | "test_CPF_03_getComplexPairSwap_finds_pair_through_different_protocols" - | "test_CPF_04_getComplexPairSwap_finds_the_best_path_gp_0" - | "test_CPF_05_getComplexPairSwap_finds_the_best_path_gp_non_zero" - | "test_CPF_06_findSwapQuote_finds_the_best_path_for_connectors" - | "test_CPF_07_findSwapQuote_finds_the_best_path_gp_0" - | "test_CPF_08_findSwapQuote_finds_the_best_path_gp_non_zero" - | "test_CPF_09_findNormalTokenBestPath_reverts_if_it_can_find_any_path" - | "test_CPF_10_findNormalTokenBestPath_finds_correct_path_for_connector_tokens" - | "test_CPF_11_findNormalTokenBestPath_finds_correct_path_for_connector_tokens" - | "tokenMasksMap" - | "underlying" - | "uniV2adapter" - | "uniV2mock" - | "uniV2pathFinder" - | "uniV3adapter" - | "uniV3mock" - | "uniV3pathFinder" - | "yearnAdapter" - | "yearnMock" - | "yearnPathFinder" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "IS_TEST", values?: undefined): string; - encodeFunctionData( - functionFragment: "_setUpCurve", - values: [boolean] - ): string; - encodeFunctionData(functionFragment: "cft", values?: undefined): string; - encodeFunctionData( - functionFragment: "creditConfigurator", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditFacade", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditManager", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "curveAdapter", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "curveLPPathFinder", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "curveMetaAdapter", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "curvePathFinder", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "curveV1MetaMock", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "curveV1Mock", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "failed", values?: undefined): string; - encodeFunctionData(functionFragment: "setUp", values?: undefined): string; - encodeFunctionData( - functionFragment: "test_CPF_01_constructor_correctly_sets_initial_values", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CPF_02_getGasPriceTokenOutRAY_works_correctly", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CPF_03_getComplexPairSwap_finds_pair_through_different_protocols", - values: [BigNumberish, boolean, boolean] - ): string; - encodeFunctionData( - functionFragment: "test_CPF_04_getComplexPairSwap_finds_the_best_path_gp_0", - values: [BigNumberish, boolean, boolean] - ): string; - encodeFunctionData( - functionFragment: "test_CPF_05_getComplexPairSwap_finds_the_best_path_gp_non_zero", - values: [BigNumberish, boolean, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "test_CPF_06_findSwapQuote_finds_the_best_path_for_connectors", - values: [BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "test_CPF_07_findSwapQuote_finds_the_best_path_gp_0", - values: [BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "test_CPF_08_findSwapQuote_finds_the_best_path_gp_non_zero", - values: [BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "test_CPF_09_findNormalTokenBestPath_reverts_if_it_can_find_any_path", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CPF_10_findNormalTokenBestPath_finds_correct_path_for_connector_tokens", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_CPF_11_findNormalTokenBestPath_finds_correct_path_for_connector_tokens", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "tokenMasksMap", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "underlying", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "uniV2adapter", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "uniV2mock", values?: undefined): string; - encodeFunctionData( - functionFragment: "uniV2pathFinder", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "uniV3adapter", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "uniV3mock", values?: undefined): string; - encodeFunctionData( - functionFragment: "uniV3pathFinder", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "yearnAdapter", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "yearnMock", values?: undefined): string; - encodeFunctionData( - functionFragment: "yearnPathFinder", - values?: undefined - ): string; - - decodeFunctionResult(functionFragment: "IS_TEST", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "_setUpCurve", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "cft", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "creditConfigurator", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditFacade", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditManager", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "curveAdapter", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "curveLPPathFinder", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "curveMetaAdapter", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "curvePathFinder", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "curveV1MetaMock", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "curveV1Mock", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "failed", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "setUp", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "test_CPF_01_constructor_correctly_sets_initial_values", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CPF_02_getGasPriceTokenOutRAY_works_correctly", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CPF_03_getComplexPairSwap_finds_pair_through_different_protocols", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CPF_04_getComplexPairSwap_finds_the_best_path_gp_0", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CPF_05_getComplexPairSwap_finds_the_best_path_gp_non_zero", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CPF_06_findSwapQuote_finds_the_best_path_for_connectors", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CPF_07_findSwapQuote_finds_the_best_path_gp_0", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CPF_08_findSwapQuote_finds_the_best_path_gp_non_zero", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CPF_09_findNormalTokenBestPath_reverts_if_it_can_find_any_path", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CPF_10_findNormalTokenBestPath_finds_correct_path_for_connector_tokens", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_CPF_11_findNormalTokenBestPath_finds_correct_path_for_connector_tokens", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "tokenMasksMap", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "underlying", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "uniV2adapter", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "uniV2mock", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "uniV2pathFinder", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "uniV3adapter", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "uniV3mock", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "uniV3pathFinder", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "yearnAdapter", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "yearnMock", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "yearnPathFinder", - data: BytesLike - ): Result; - - events: { - "log(string)": EventFragment; - "log_address(address)": EventFragment; - "log_bytes(bytes)": EventFragment; - "log_bytes32(bytes32)": EventFragment; - "log_int(int256)": EventFragment; - "log_named_address(string,address)": EventFragment; - "log_named_bytes(string,bytes)": EventFragment; - "log_named_bytes32(string,bytes32)": EventFragment; - "log_named_decimal_int(string,int256,uint256)": EventFragment; - "log_named_decimal_uint(string,uint256,uint256)": EventFragment; - "log_named_int(string,int256)": EventFragment; - "log_named_string(string,string)": EventFragment; - "log_named_uint(string,uint256)": EventFragment; - "log_string(string)": EventFragment; - "log_uint(uint256)": EventFragment; - "logs(bytes)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "log"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "logs"): EventFragment; -} - -export interface logEventObject { - arg0: string; -} -export type logEvent = TypedEvent<[string], logEventObject>; - -export type logEventFilter = TypedEventFilter; - -export interface log_addressEventObject { - arg0: string; -} -export type log_addressEvent = TypedEvent<[string], log_addressEventObject>; - -export type log_addressEventFilter = TypedEventFilter; - -export interface log_bytesEventObject { - arg0: string; -} -export type log_bytesEvent = TypedEvent<[string], log_bytesEventObject>; - -export type log_bytesEventFilter = TypedEventFilter; - -export interface log_bytes32EventObject { - arg0: string; -} -export type log_bytes32Event = TypedEvent<[string], log_bytes32EventObject>; - -export type log_bytes32EventFilter = TypedEventFilter; - -export interface log_intEventObject { - arg0: BigNumber; -} -export type log_intEvent = TypedEvent<[BigNumber], log_intEventObject>; - -export type log_intEventFilter = TypedEventFilter; - -export interface log_named_addressEventObject { - key: string; - val: string; -} -export type log_named_addressEvent = TypedEvent< - [string, string], - log_named_addressEventObject ->; - -export type log_named_addressEventFilter = - TypedEventFilter; - -export interface log_named_bytesEventObject { - key: string; - val: string; -} -export type log_named_bytesEvent = TypedEvent< - [string, string], - log_named_bytesEventObject ->; - -export type log_named_bytesEventFilter = TypedEventFilter; - -export interface log_named_bytes32EventObject { - key: string; - val: string; -} -export type log_named_bytes32Event = TypedEvent< - [string, string], - log_named_bytes32EventObject ->; - -export type log_named_bytes32EventFilter = - TypedEventFilter; - -export interface log_named_decimal_intEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_intEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_intEventObject ->; - -export type log_named_decimal_intEventFilter = - TypedEventFilter; - -export interface log_named_decimal_uintEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_uintEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_uintEventObject ->; - -export type log_named_decimal_uintEventFilter = - TypedEventFilter; - -export interface log_named_intEventObject { - key: string; - val: BigNumber; -} -export type log_named_intEvent = TypedEvent< - [string, BigNumber], - log_named_intEventObject ->; - -export type log_named_intEventFilter = TypedEventFilter; - -export interface log_named_stringEventObject { - key: string; - val: string; -} -export type log_named_stringEvent = TypedEvent< - [string, string], - log_named_stringEventObject ->; - -export type log_named_stringEventFilter = - TypedEventFilter; - -export interface log_named_uintEventObject { - key: string; - val: BigNumber; -} -export type log_named_uintEvent = TypedEvent< - [string, BigNumber], - log_named_uintEventObject ->; - -export type log_named_uintEventFilter = TypedEventFilter; - -export interface log_stringEventObject { - arg0: string; -} -export type log_stringEvent = TypedEvent<[string], log_stringEventObject>; - -export type log_stringEventFilter = TypedEventFilter; - -export interface log_uintEventObject { - arg0: BigNumber; -} -export type log_uintEvent = TypedEvent<[BigNumber], log_uintEventObject>; - -export type log_uintEventFilter = TypedEventFilter; - -export interface logsEventObject { - arg0: string; -} -export type logsEvent = TypedEvent<[string], logsEventObject>; - -export type logsEventFilter = TypedEventFilter; - -export interface NormalTokenPathFinderTest extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: NormalTokenPathFinderTestInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - IS_TEST(overrides?: CallOverrides): Promise<[boolean]>; - - _setUpCurve( - withUnderlyings: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - cft(overrides?: CallOverrides): Promise<[string]>; - - creditConfigurator(overrides?: CallOverrides): Promise<[string]>; - - creditFacade(overrides?: CallOverrides): Promise<[string]>; - - creditManager(overrides?: CallOverrides): Promise<[string]>; - - curveAdapter(overrides?: CallOverrides): Promise<[string]>; - - curveLPPathFinder(overrides?: CallOverrides): Promise<[string]>; - - curveMetaAdapter(overrides?: CallOverrides): Promise<[string]>; - - curvePathFinder(overrides?: CallOverrides): Promise<[string]>; - - curveV1MetaMock(overrides?: CallOverrides): Promise<[string]>; - - curveV1Mock(overrides?: CallOverrides): Promise<[string]>; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CPF_01_constructor_correctly_sets_initial_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CPF_02_getGasPriceTokenOutRAY_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CPF_03_getComplexPairSwap_finds_pair_through_different_protocols( - amount: BigNumberish, - isAll: boolean, - hasConnectorAmount: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CPF_04_getComplexPairSwap_finds_the_best_path_gp_0( - amount: BigNumberish, - isAll: boolean, - hasConnectorAmount: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CPF_05_getComplexPairSwap_finds_the_best_path_gp_non_zero( - amount: BigNumberish, - isAll: boolean, - connectorAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CPF_06_findSwapQuote_finds_the_best_path_for_connectors( - amount: BigNumberish, - connectorAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CPF_07_findSwapQuote_finds_the_best_path_gp_0( - amount: BigNumberish, - connectorAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CPF_08_findSwapQuote_finds_the_best_path_gp_non_zero( - amount: BigNumberish, - connectorAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CPF_09_findNormalTokenBestPath_reverts_if_it_can_find_any_path( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CPF_10_findNormalTokenBestPath_finds_correct_path_for_connector_tokens( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CPF_11_findNormalTokenBestPath_finds_correct_path_for_connector_tokens( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - tokenMasksMap( - arg0: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - underlying(overrides?: CallOverrides): Promise<[string]>; - - uniV2adapter(overrides?: CallOverrides): Promise<[string]>; - - uniV2mock(overrides?: CallOverrides): Promise<[string]>; - - uniV2pathFinder(overrides?: CallOverrides): Promise<[string]>; - - uniV3adapter(overrides?: CallOverrides): Promise<[string]>; - - uniV3mock(overrides?: CallOverrides): Promise<[string]>; - - uniV3pathFinder(overrides?: CallOverrides): Promise<[string]>; - - yearnAdapter(overrides?: CallOverrides): Promise<[string]>; - - yearnMock(overrides?: CallOverrides): Promise<[string]>; - - yearnPathFinder(overrides?: CallOverrides): Promise<[string]>; - }; - - IS_TEST(overrides?: CallOverrides): Promise; - - _setUpCurve( - withUnderlyings: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - curveAdapter(overrides?: CallOverrides): Promise; - - curveLPPathFinder(overrides?: CallOverrides): Promise; - - curveMetaAdapter(overrides?: CallOverrides): Promise; - - curvePathFinder(overrides?: CallOverrides): Promise; - - curveV1MetaMock(overrides?: CallOverrides): Promise; - - curveV1Mock(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CPF_01_constructor_correctly_sets_initial_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CPF_02_getGasPriceTokenOutRAY_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CPF_03_getComplexPairSwap_finds_pair_through_different_protocols( - amount: BigNumberish, - isAll: boolean, - hasConnectorAmount: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CPF_04_getComplexPairSwap_finds_the_best_path_gp_0( - amount: BigNumberish, - isAll: boolean, - hasConnectorAmount: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CPF_05_getComplexPairSwap_finds_the_best_path_gp_non_zero( - amount: BigNumberish, - isAll: boolean, - connectorAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CPF_06_findSwapQuote_finds_the_best_path_for_connectors( - amount: BigNumberish, - connectorAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CPF_07_findSwapQuote_finds_the_best_path_gp_0( - amount: BigNumberish, - connectorAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CPF_08_findSwapQuote_finds_the_best_path_gp_non_zero( - amount: BigNumberish, - connectorAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CPF_09_findNormalTokenBestPath_reverts_if_it_can_find_any_path( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CPF_10_findNormalTokenBestPath_finds_correct_path_for_connector_tokens( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CPF_11_findNormalTokenBestPath_finds_correct_path_for_connector_tokens( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - tokenMasksMap(arg0: string, overrides?: CallOverrides): Promise; - - underlying(overrides?: CallOverrides): Promise; - - uniV2adapter(overrides?: CallOverrides): Promise; - - uniV2mock(overrides?: CallOverrides): Promise; - - uniV2pathFinder(overrides?: CallOverrides): Promise; - - uniV3adapter(overrides?: CallOverrides): Promise; - - uniV3mock(overrides?: CallOverrides): Promise; - - uniV3pathFinder(overrides?: CallOverrides): Promise; - - yearnAdapter(overrides?: CallOverrides): Promise; - - yearnMock(overrides?: CallOverrides): Promise; - - yearnPathFinder(overrides?: CallOverrides): Promise; - - callStatic: { - IS_TEST(overrides?: CallOverrides): Promise; - - _setUpCurve( - withUnderlyings: boolean, - overrides?: CallOverrides - ): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - curveAdapter(overrides?: CallOverrides): Promise; - - curveLPPathFinder(overrides?: CallOverrides): Promise; - - curveMetaAdapter(overrides?: CallOverrides): Promise; - - curvePathFinder(overrides?: CallOverrides): Promise; - - curveV1MetaMock(overrides?: CallOverrides): Promise; - - curveV1Mock(overrides?: CallOverrides): Promise; - - failed(overrides?: CallOverrides): Promise; - - setUp(overrides?: CallOverrides): Promise; - - test_CPF_01_constructor_correctly_sets_initial_values( - overrides?: CallOverrides - ): Promise; - - test_CPF_02_getGasPriceTokenOutRAY_works_correctly( - overrides?: CallOverrides - ): Promise; - - test_CPF_03_getComplexPairSwap_finds_pair_through_different_protocols( - amount: BigNumberish, - isAll: boolean, - hasConnectorAmount: boolean, - overrides?: CallOverrides - ): Promise; - - test_CPF_04_getComplexPairSwap_finds_the_best_path_gp_0( - amount: BigNumberish, - isAll: boolean, - hasConnectorAmount: boolean, - overrides?: CallOverrides - ): Promise; - - test_CPF_05_getComplexPairSwap_finds_the_best_path_gp_non_zero( - amount: BigNumberish, - isAll: boolean, - connectorAmount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - test_CPF_06_findSwapQuote_finds_the_best_path_for_connectors( - amount: BigNumberish, - connectorAmount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - test_CPF_07_findSwapQuote_finds_the_best_path_gp_0( - amount: BigNumberish, - connectorAmount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - test_CPF_08_findSwapQuote_finds_the_best_path_gp_non_zero( - amount: BigNumberish, - connectorAmount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - test_CPF_09_findNormalTokenBestPath_reverts_if_it_can_find_any_path( - overrides?: CallOverrides - ): Promise; - - test_CPF_10_findNormalTokenBestPath_finds_correct_path_for_connector_tokens( - overrides?: CallOverrides - ): Promise; - - test_CPF_11_findNormalTokenBestPath_finds_correct_path_for_connector_tokens( - overrides?: CallOverrides - ): Promise; - - tokenMasksMap(arg0: string, overrides?: CallOverrides): Promise; - - underlying(overrides?: CallOverrides): Promise; - - uniV2adapter(overrides?: CallOverrides): Promise; - - uniV2mock(overrides?: CallOverrides): Promise; - - uniV2pathFinder(overrides?: CallOverrides): Promise; - - uniV3adapter(overrides?: CallOverrides): Promise; - - uniV3mock(overrides?: CallOverrides): Promise; - - uniV3pathFinder(overrides?: CallOverrides): Promise; - - yearnAdapter(overrides?: CallOverrides): Promise; - - yearnMock(overrides?: CallOverrides): Promise; - - yearnPathFinder(overrides?: CallOverrides): Promise; - }; - - filters: { - "log(string)"(arg0?: null): logEventFilter; - log(arg0?: null): logEventFilter; - - "log_address(address)"(arg0?: null): log_addressEventFilter; - log_address(arg0?: null): log_addressEventFilter; - - "log_bytes(bytes)"(arg0?: null): log_bytesEventFilter; - log_bytes(arg0?: null): log_bytesEventFilter; - - "log_bytes32(bytes32)"(arg0?: null): log_bytes32EventFilter; - log_bytes32(arg0?: null): log_bytes32EventFilter; - - "log_int(int256)"(arg0?: null): log_intEventFilter; - log_int(arg0?: null): log_intEventFilter; - - "log_named_address(string,address)"( - key?: null, - val?: null - ): log_named_addressEventFilter; - log_named_address(key?: null, val?: null): log_named_addressEventFilter; - - "log_named_bytes(string,bytes)"( - key?: null, - val?: null - ): log_named_bytesEventFilter; - log_named_bytes(key?: null, val?: null): log_named_bytesEventFilter; - - "log_named_bytes32(string,bytes32)"( - key?: null, - val?: null - ): log_named_bytes32EventFilter; - log_named_bytes32(key?: null, val?: null): log_named_bytes32EventFilter; - - "log_named_decimal_int(string,int256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - log_named_decimal_int( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - - "log_named_decimal_uint(string,uint256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - log_named_decimal_uint( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - - "log_named_int(string,int256)"( - key?: null, - val?: null - ): log_named_intEventFilter; - log_named_int(key?: null, val?: null): log_named_intEventFilter; - - "log_named_string(string,string)"( - key?: null, - val?: null - ): log_named_stringEventFilter; - log_named_string(key?: null, val?: null): log_named_stringEventFilter; - - "log_named_uint(string,uint256)"( - key?: null, - val?: null - ): log_named_uintEventFilter; - log_named_uint(key?: null, val?: null): log_named_uintEventFilter; - - "log_string(string)"(arg0?: null): log_stringEventFilter; - log_string(arg0?: null): log_stringEventFilter; - - "log_uint(uint256)"(arg0?: null): log_uintEventFilter; - log_uint(arg0?: null): log_uintEventFilter; - - "logs(bytes)"(arg0?: null): logsEventFilter; - logs(arg0?: null): logsEventFilter; - }; - - estimateGas: { - IS_TEST(overrides?: CallOverrides): Promise; - - _setUpCurve( - withUnderlyings: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - curveAdapter(overrides?: CallOverrides): Promise; - - curveLPPathFinder(overrides?: CallOverrides): Promise; - - curveMetaAdapter(overrides?: CallOverrides): Promise; - - curvePathFinder(overrides?: CallOverrides): Promise; - - curveV1MetaMock(overrides?: CallOverrides): Promise; - - curveV1Mock(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CPF_01_constructor_correctly_sets_initial_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CPF_02_getGasPriceTokenOutRAY_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CPF_03_getComplexPairSwap_finds_pair_through_different_protocols( - amount: BigNumberish, - isAll: boolean, - hasConnectorAmount: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CPF_04_getComplexPairSwap_finds_the_best_path_gp_0( - amount: BigNumberish, - isAll: boolean, - hasConnectorAmount: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CPF_05_getComplexPairSwap_finds_the_best_path_gp_non_zero( - amount: BigNumberish, - isAll: boolean, - connectorAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CPF_06_findSwapQuote_finds_the_best_path_for_connectors( - amount: BigNumberish, - connectorAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CPF_07_findSwapQuote_finds_the_best_path_gp_0( - amount: BigNumberish, - connectorAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CPF_08_findSwapQuote_finds_the_best_path_gp_non_zero( - amount: BigNumberish, - connectorAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CPF_09_findNormalTokenBestPath_reverts_if_it_can_find_any_path( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CPF_10_findNormalTokenBestPath_finds_correct_path_for_connector_tokens( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CPF_11_findNormalTokenBestPath_finds_correct_path_for_connector_tokens( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - tokenMasksMap(arg0: string, overrides?: CallOverrides): Promise; - - underlying(overrides?: CallOverrides): Promise; - - uniV2adapter(overrides?: CallOverrides): Promise; - - uniV2mock(overrides?: CallOverrides): Promise; - - uniV2pathFinder(overrides?: CallOverrides): Promise; - - uniV3adapter(overrides?: CallOverrides): Promise; - - uniV3mock(overrides?: CallOverrides): Promise; - - uniV3pathFinder(overrides?: CallOverrides): Promise; - - yearnAdapter(overrides?: CallOverrides): Promise; - - yearnMock(overrides?: CallOverrides): Promise; - - yearnPathFinder(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - IS_TEST(overrides?: CallOverrides): Promise; - - _setUpCurve( - withUnderlyings: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator( - overrides?: CallOverrides - ): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - curveAdapter(overrides?: CallOverrides): Promise; - - curveLPPathFinder(overrides?: CallOverrides): Promise; - - curveMetaAdapter(overrides?: CallOverrides): Promise; - - curvePathFinder(overrides?: CallOverrides): Promise; - - curveV1MetaMock(overrides?: CallOverrides): Promise; - - curveV1Mock(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CPF_01_constructor_correctly_sets_initial_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CPF_02_getGasPriceTokenOutRAY_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CPF_03_getComplexPairSwap_finds_pair_through_different_protocols( - amount: BigNumberish, - isAll: boolean, - hasConnectorAmount: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CPF_04_getComplexPairSwap_finds_the_best_path_gp_0( - amount: BigNumberish, - isAll: boolean, - hasConnectorAmount: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CPF_05_getComplexPairSwap_finds_the_best_path_gp_non_zero( - amount: BigNumberish, - isAll: boolean, - connectorAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CPF_06_findSwapQuote_finds_the_best_path_for_connectors( - amount: BigNumberish, - connectorAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CPF_07_findSwapQuote_finds_the_best_path_gp_0( - amount: BigNumberish, - connectorAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CPF_08_findSwapQuote_finds_the_best_path_gp_non_zero( - amount: BigNumberish, - connectorAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CPF_09_findNormalTokenBestPath_reverts_if_it_can_find_any_path( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CPF_10_findNormalTokenBestPath_finds_correct_path_for_connector_tokens( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_CPF_11_findNormalTokenBestPath_finds_correct_path_for_connector_tokens( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - tokenMasksMap( - arg0: string, - overrides?: CallOverrides - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - - uniV2adapter(overrides?: CallOverrides): Promise; - - uniV2mock(overrides?: CallOverrides): Promise; - - uniV2pathFinder(overrides?: CallOverrides): Promise; - - uniV3adapter(overrides?: CallOverrides): Promise; - - uniV3mock(overrides?: CallOverrides): Promise; - - uniV3pathFinder(overrides?: CallOverrides): Promise; - - yearnAdapter(overrides?: CallOverrides): Promise; - - yearnMock(overrides?: CallOverrides): Promise; - - yearnPathFinder(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/test/pathfinder/NormalTokenPathFinder.t.sol/index.ts b/src/types/contracts/test/pathfinder/NormalTokenPathFinder.t.sol/index.ts deleted file mode 100644 index 551f64ca..00000000 --- a/src/types/contracts/test/pathfinder/NormalTokenPathFinder.t.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { NormalTokenPathFinderTest } from "./NormalTokenPathFinderTest"; diff --git a/src/types/contracts/test/pathfinder/PathFinderTestHelper.ts b/src/types/contracts/test/pathfinder/PathFinderTestHelper.ts deleted file mode 100644 index 96b31d7c..00000000 --- a/src/types/contracts/test/pathfinder/PathFinderTestHelper.ts +++ /dev/null @@ -1,815 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../common"; - -export interface PathFinderTestHelperInterface extends utils.Interface { - functions: { - "IS_TEST()": FunctionFragment; - "_setUpCurve(bool)": FunctionFragment; - "cft()": FunctionFragment; - "creditConfigurator()": FunctionFragment; - "creditFacade()": FunctionFragment; - "creditManager()": FunctionFragment; - "curveAdapter()": FunctionFragment; - "curveLPPathFinder()": FunctionFragment; - "curveMetaAdapter()": FunctionFragment; - "curvePathFinder()": FunctionFragment; - "curveV1MetaMock()": FunctionFragment; - "curveV1Mock()": FunctionFragment; - "failed()": FunctionFragment; - "tokenMasksMap(address)": FunctionFragment; - "underlying()": FunctionFragment; - "uniV2adapter()": FunctionFragment; - "uniV2mock()": FunctionFragment; - "uniV2pathFinder()": FunctionFragment; - "uniV3adapter()": FunctionFragment; - "uniV3mock()": FunctionFragment; - "uniV3pathFinder()": FunctionFragment; - "yearnAdapter()": FunctionFragment; - "yearnMock()": FunctionFragment; - "yearnPathFinder()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "IS_TEST" - | "_setUpCurve" - | "cft" - | "creditConfigurator" - | "creditFacade" - | "creditManager" - | "curveAdapter" - | "curveLPPathFinder" - | "curveMetaAdapter" - | "curvePathFinder" - | "curveV1MetaMock" - | "curveV1Mock" - | "failed" - | "tokenMasksMap" - | "underlying" - | "uniV2adapter" - | "uniV2mock" - | "uniV2pathFinder" - | "uniV3adapter" - | "uniV3mock" - | "uniV3pathFinder" - | "yearnAdapter" - | "yearnMock" - | "yearnPathFinder" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "IS_TEST", values?: undefined): string; - encodeFunctionData( - functionFragment: "_setUpCurve", - values: [boolean] - ): string; - encodeFunctionData(functionFragment: "cft", values?: undefined): string; - encodeFunctionData( - functionFragment: "creditConfigurator", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditFacade", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditManager", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "curveAdapter", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "curveLPPathFinder", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "curveMetaAdapter", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "curvePathFinder", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "curveV1MetaMock", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "curveV1Mock", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "failed", values?: undefined): string; - encodeFunctionData( - functionFragment: "tokenMasksMap", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "underlying", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "uniV2adapter", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "uniV2mock", values?: undefined): string; - encodeFunctionData( - functionFragment: "uniV2pathFinder", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "uniV3adapter", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "uniV3mock", values?: undefined): string; - encodeFunctionData( - functionFragment: "uniV3pathFinder", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "yearnAdapter", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "yearnMock", values?: undefined): string; - encodeFunctionData( - functionFragment: "yearnPathFinder", - values?: undefined - ): string; - - decodeFunctionResult(functionFragment: "IS_TEST", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "_setUpCurve", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "cft", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "creditConfigurator", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditFacade", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditManager", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "curveAdapter", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "curveLPPathFinder", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "curveMetaAdapter", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "curvePathFinder", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "curveV1MetaMock", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "curveV1Mock", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "failed", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "tokenMasksMap", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "underlying", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "uniV2adapter", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "uniV2mock", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "uniV2pathFinder", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "uniV3adapter", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "uniV3mock", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "uniV3pathFinder", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "yearnAdapter", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "yearnMock", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "yearnPathFinder", - data: BytesLike - ): Result; - - events: { - "log(string)": EventFragment; - "log_address(address)": EventFragment; - "log_bytes(bytes)": EventFragment; - "log_bytes32(bytes32)": EventFragment; - "log_int(int256)": EventFragment; - "log_named_address(string,address)": EventFragment; - "log_named_bytes(string,bytes)": EventFragment; - "log_named_bytes32(string,bytes32)": EventFragment; - "log_named_decimal_int(string,int256,uint256)": EventFragment; - "log_named_decimal_uint(string,uint256,uint256)": EventFragment; - "log_named_int(string,int256)": EventFragment; - "log_named_string(string,string)": EventFragment; - "log_named_uint(string,uint256)": EventFragment; - "log_string(string)": EventFragment; - "log_uint(uint256)": EventFragment; - "logs(bytes)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "log"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "logs"): EventFragment; -} - -export interface logEventObject { - arg0: string; -} -export type logEvent = TypedEvent<[string], logEventObject>; - -export type logEventFilter = TypedEventFilter; - -export interface log_addressEventObject { - arg0: string; -} -export type log_addressEvent = TypedEvent<[string], log_addressEventObject>; - -export type log_addressEventFilter = TypedEventFilter; - -export interface log_bytesEventObject { - arg0: string; -} -export type log_bytesEvent = TypedEvent<[string], log_bytesEventObject>; - -export type log_bytesEventFilter = TypedEventFilter; - -export interface log_bytes32EventObject { - arg0: string; -} -export type log_bytes32Event = TypedEvent<[string], log_bytes32EventObject>; - -export type log_bytes32EventFilter = TypedEventFilter; - -export interface log_intEventObject { - arg0: BigNumber; -} -export type log_intEvent = TypedEvent<[BigNumber], log_intEventObject>; - -export type log_intEventFilter = TypedEventFilter; - -export interface log_named_addressEventObject { - key: string; - val: string; -} -export type log_named_addressEvent = TypedEvent< - [string, string], - log_named_addressEventObject ->; - -export type log_named_addressEventFilter = - TypedEventFilter; - -export interface log_named_bytesEventObject { - key: string; - val: string; -} -export type log_named_bytesEvent = TypedEvent< - [string, string], - log_named_bytesEventObject ->; - -export type log_named_bytesEventFilter = TypedEventFilter; - -export interface log_named_bytes32EventObject { - key: string; - val: string; -} -export type log_named_bytes32Event = TypedEvent< - [string, string], - log_named_bytes32EventObject ->; - -export type log_named_bytes32EventFilter = - TypedEventFilter; - -export interface log_named_decimal_intEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_intEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_intEventObject ->; - -export type log_named_decimal_intEventFilter = - TypedEventFilter; - -export interface log_named_decimal_uintEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_uintEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_uintEventObject ->; - -export type log_named_decimal_uintEventFilter = - TypedEventFilter; - -export interface log_named_intEventObject { - key: string; - val: BigNumber; -} -export type log_named_intEvent = TypedEvent< - [string, BigNumber], - log_named_intEventObject ->; - -export type log_named_intEventFilter = TypedEventFilter; - -export interface log_named_stringEventObject { - key: string; - val: string; -} -export type log_named_stringEvent = TypedEvent< - [string, string], - log_named_stringEventObject ->; - -export type log_named_stringEventFilter = - TypedEventFilter; - -export interface log_named_uintEventObject { - key: string; - val: BigNumber; -} -export type log_named_uintEvent = TypedEvent< - [string, BigNumber], - log_named_uintEventObject ->; - -export type log_named_uintEventFilter = TypedEventFilter; - -export interface log_stringEventObject { - arg0: string; -} -export type log_stringEvent = TypedEvent<[string], log_stringEventObject>; - -export type log_stringEventFilter = TypedEventFilter; - -export interface log_uintEventObject { - arg0: BigNumber; -} -export type log_uintEvent = TypedEvent<[BigNumber], log_uintEventObject>; - -export type log_uintEventFilter = TypedEventFilter; - -export interface logsEventObject { - arg0: string; -} -export type logsEvent = TypedEvent<[string], logsEventObject>; - -export type logsEventFilter = TypedEventFilter; - -export interface PathFinderTestHelper extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: PathFinderTestHelperInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - IS_TEST(overrides?: CallOverrides): Promise<[boolean]>; - - _setUpCurve( - withUnderlyings: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - cft(overrides?: CallOverrides): Promise<[string]>; - - creditConfigurator(overrides?: CallOverrides): Promise<[string]>; - - creditFacade(overrides?: CallOverrides): Promise<[string]>; - - creditManager(overrides?: CallOverrides): Promise<[string]>; - - curveAdapter(overrides?: CallOverrides): Promise<[string]>; - - curveLPPathFinder(overrides?: CallOverrides): Promise<[string]>; - - curveMetaAdapter(overrides?: CallOverrides): Promise<[string]>; - - curvePathFinder(overrides?: CallOverrides): Promise<[string]>; - - curveV1MetaMock(overrides?: CallOverrides): Promise<[string]>; - - curveV1Mock(overrides?: CallOverrides): Promise<[string]>; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - tokenMasksMap( - arg0: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - underlying(overrides?: CallOverrides): Promise<[string]>; - - uniV2adapter(overrides?: CallOverrides): Promise<[string]>; - - uniV2mock(overrides?: CallOverrides): Promise<[string]>; - - uniV2pathFinder(overrides?: CallOverrides): Promise<[string]>; - - uniV3adapter(overrides?: CallOverrides): Promise<[string]>; - - uniV3mock(overrides?: CallOverrides): Promise<[string]>; - - uniV3pathFinder(overrides?: CallOverrides): Promise<[string]>; - - yearnAdapter(overrides?: CallOverrides): Promise<[string]>; - - yearnMock(overrides?: CallOverrides): Promise<[string]>; - - yearnPathFinder(overrides?: CallOverrides): Promise<[string]>; - }; - - IS_TEST(overrides?: CallOverrides): Promise; - - _setUpCurve( - withUnderlyings: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - curveAdapter(overrides?: CallOverrides): Promise; - - curveLPPathFinder(overrides?: CallOverrides): Promise; - - curveMetaAdapter(overrides?: CallOverrides): Promise; - - curvePathFinder(overrides?: CallOverrides): Promise; - - curveV1MetaMock(overrides?: CallOverrides): Promise; - - curveV1Mock(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - tokenMasksMap(arg0: string, overrides?: CallOverrides): Promise; - - underlying(overrides?: CallOverrides): Promise; - - uniV2adapter(overrides?: CallOverrides): Promise; - - uniV2mock(overrides?: CallOverrides): Promise; - - uniV2pathFinder(overrides?: CallOverrides): Promise; - - uniV3adapter(overrides?: CallOverrides): Promise; - - uniV3mock(overrides?: CallOverrides): Promise; - - uniV3pathFinder(overrides?: CallOverrides): Promise; - - yearnAdapter(overrides?: CallOverrides): Promise; - - yearnMock(overrides?: CallOverrides): Promise; - - yearnPathFinder(overrides?: CallOverrides): Promise; - - callStatic: { - IS_TEST(overrides?: CallOverrides): Promise; - - _setUpCurve( - withUnderlyings: boolean, - overrides?: CallOverrides - ): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - curveAdapter(overrides?: CallOverrides): Promise; - - curveLPPathFinder(overrides?: CallOverrides): Promise; - - curveMetaAdapter(overrides?: CallOverrides): Promise; - - curvePathFinder(overrides?: CallOverrides): Promise; - - curveV1MetaMock(overrides?: CallOverrides): Promise; - - curveV1Mock(overrides?: CallOverrides): Promise; - - failed(overrides?: CallOverrides): Promise; - - tokenMasksMap(arg0: string, overrides?: CallOverrides): Promise; - - underlying(overrides?: CallOverrides): Promise; - - uniV2adapter(overrides?: CallOverrides): Promise; - - uniV2mock(overrides?: CallOverrides): Promise; - - uniV2pathFinder(overrides?: CallOverrides): Promise; - - uniV3adapter(overrides?: CallOverrides): Promise; - - uniV3mock(overrides?: CallOverrides): Promise; - - uniV3pathFinder(overrides?: CallOverrides): Promise; - - yearnAdapter(overrides?: CallOverrides): Promise; - - yearnMock(overrides?: CallOverrides): Promise; - - yearnPathFinder(overrides?: CallOverrides): Promise; - }; - - filters: { - "log(string)"(arg0?: null): logEventFilter; - log(arg0?: null): logEventFilter; - - "log_address(address)"(arg0?: null): log_addressEventFilter; - log_address(arg0?: null): log_addressEventFilter; - - "log_bytes(bytes)"(arg0?: null): log_bytesEventFilter; - log_bytes(arg0?: null): log_bytesEventFilter; - - "log_bytes32(bytes32)"(arg0?: null): log_bytes32EventFilter; - log_bytes32(arg0?: null): log_bytes32EventFilter; - - "log_int(int256)"(arg0?: null): log_intEventFilter; - log_int(arg0?: null): log_intEventFilter; - - "log_named_address(string,address)"( - key?: null, - val?: null - ): log_named_addressEventFilter; - log_named_address(key?: null, val?: null): log_named_addressEventFilter; - - "log_named_bytes(string,bytes)"( - key?: null, - val?: null - ): log_named_bytesEventFilter; - log_named_bytes(key?: null, val?: null): log_named_bytesEventFilter; - - "log_named_bytes32(string,bytes32)"( - key?: null, - val?: null - ): log_named_bytes32EventFilter; - log_named_bytes32(key?: null, val?: null): log_named_bytes32EventFilter; - - "log_named_decimal_int(string,int256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - log_named_decimal_int( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - - "log_named_decimal_uint(string,uint256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - log_named_decimal_uint( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - - "log_named_int(string,int256)"( - key?: null, - val?: null - ): log_named_intEventFilter; - log_named_int(key?: null, val?: null): log_named_intEventFilter; - - "log_named_string(string,string)"( - key?: null, - val?: null - ): log_named_stringEventFilter; - log_named_string(key?: null, val?: null): log_named_stringEventFilter; - - "log_named_uint(string,uint256)"( - key?: null, - val?: null - ): log_named_uintEventFilter; - log_named_uint(key?: null, val?: null): log_named_uintEventFilter; - - "log_string(string)"(arg0?: null): log_stringEventFilter; - log_string(arg0?: null): log_stringEventFilter; - - "log_uint(uint256)"(arg0?: null): log_uintEventFilter; - log_uint(arg0?: null): log_uintEventFilter; - - "logs(bytes)"(arg0?: null): logsEventFilter; - logs(arg0?: null): logsEventFilter; - }; - - estimateGas: { - IS_TEST(overrides?: CallOverrides): Promise; - - _setUpCurve( - withUnderlyings: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - curveAdapter(overrides?: CallOverrides): Promise; - - curveLPPathFinder(overrides?: CallOverrides): Promise; - - curveMetaAdapter(overrides?: CallOverrides): Promise; - - curvePathFinder(overrides?: CallOverrides): Promise; - - curveV1MetaMock(overrides?: CallOverrides): Promise; - - curveV1Mock(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - tokenMasksMap(arg0: string, overrides?: CallOverrides): Promise; - - underlying(overrides?: CallOverrides): Promise; - - uniV2adapter(overrides?: CallOverrides): Promise; - - uniV2mock(overrides?: CallOverrides): Promise; - - uniV2pathFinder(overrides?: CallOverrides): Promise; - - uniV3adapter(overrides?: CallOverrides): Promise; - - uniV3mock(overrides?: CallOverrides): Promise; - - uniV3pathFinder(overrides?: CallOverrides): Promise; - - yearnAdapter(overrides?: CallOverrides): Promise; - - yearnMock(overrides?: CallOverrides): Promise; - - yearnPathFinder(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - IS_TEST(overrides?: CallOverrides): Promise; - - _setUpCurve( - withUnderlyings: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator( - overrides?: CallOverrides - ): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - curveAdapter(overrides?: CallOverrides): Promise; - - curveLPPathFinder(overrides?: CallOverrides): Promise; - - curveMetaAdapter(overrides?: CallOverrides): Promise; - - curvePathFinder(overrides?: CallOverrides): Promise; - - curveV1MetaMock(overrides?: CallOverrides): Promise; - - curveV1Mock(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - tokenMasksMap( - arg0: string, - overrides?: CallOverrides - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - - uniV2adapter(overrides?: CallOverrides): Promise; - - uniV2mock(overrides?: CallOverrides): Promise; - - uniV2pathFinder(overrides?: CallOverrides): Promise; - - uniV3adapter(overrides?: CallOverrides): Promise; - - uniV3mock(overrides?: CallOverrides): Promise; - - uniV3pathFinder(overrides?: CallOverrides): Promise; - - yearnAdapter(overrides?: CallOverrides): Promise; - - yearnMock(overrides?: CallOverrides): Promise; - - yearnPathFinder(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/test/pathfinder/SwapPathFinder.t.sol/SwapPathFinderTest.ts b/src/types/contracts/test/pathfinder/SwapPathFinder.t.sol/SwapPathFinderTest.ts deleted file mode 100644 index 4b381acf..00000000 --- a/src/types/contracts/test/pathfinder/SwapPathFinder.t.sol/SwapPathFinderTest.ts +++ /dev/null @@ -1,1328 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface SwapPathFinderTestInterface extends utils.Interface { - functions: { - "IS_TEST()": FunctionFragment; - "_setUpCurve(bool)": FunctionFragment; - "cft()": FunctionFragment; - "creditConfigurator()": FunctionFragment; - "creditFacade()": FunctionFragment; - "creditManager()": FunctionFragment; - "curveAdapter()": FunctionFragment; - "curveLPPathFinder()": FunctionFragment; - "curveMetaAdapter()": FunctionFragment; - "curvePathFinder()": FunctionFragment; - "curveV1MetaMock()": FunctionFragment; - "curveV1Mock()": FunctionFragment; - "failed()": FunctionFragment; - "setUp()": FunctionFragment; - "test_NTP_01_constructor_correctly_sets_initial_values()": FunctionFragment; - "test_NTP_02_getPathFinder_returns_correct_values()": FunctionFragment; - "test_NTP_03_findAllSwaps_found_a_pair_if_only_one_is_depdloyed(bool)": FunctionFragment; - "test_NTP_04_findAllSwaps_found_quotes_INPUT(uint256,uint16,bool,bool)": FunctionFragment; - "test_NTP_05_findAllSwaps_found_quotes_OUTPUT(uint256,uint16,bool)": FunctionFragment; - "test_NTP_06_findAllSwaps_found_connector_quotes_and_take_the_best_INPUT(uint256,uint16,bool,bool)": FunctionFragment; - "test_NTP_07_findAllSwaps_found_connector_quotes_and_take_the_best_OUTPUT(uint256,uint16,bool)": FunctionFragment; - "test_NTP_08_getBestDirectPairSwap_found_the_best_swap_with_INPUT_GP_0(uint256,uint16,bool,bool)": FunctionFragment; - "test_NTP_08_getBestDirectPairSwap_found_the_best_swap_with_INPUT_GP_non_zero(uint256,uint16,bool,bool,uint8)": FunctionFragment; - "test_NTP_09_getBestDirectPairSwap_found_the_best_swap_with_OUTPUT_GP_0(uint256,uint16,bool,bool)": FunctionFragment; - "test_NTP_10_getBestDirectPairSwap_found_the_best_swap_with_OUTPUT_GP_non_zero(uint256,uint16,bool,uint8)": FunctionFragment; - "tokenMasksMap(address)": FunctionFragment; - "underlying()": FunctionFragment; - "uniV2adapter()": FunctionFragment; - "uniV2mock()": FunctionFragment; - "uniV2pathFinder()": FunctionFragment; - "uniV3adapter()": FunctionFragment; - "uniV3mock()": FunctionFragment; - "uniV3pathFinder()": FunctionFragment; - "yearnAdapter()": FunctionFragment; - "yearnMock()": FunctionFragment; - "yearnPathFinder()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "IS_TEST" - | "_setUpCurve" - | "cft" - | "creditConfigurator" - | "creditFacade" - | "creditManager" - | "curveAdapter" - | "curveLPPathFinder" - | "curveMetaAdapter" - | "curvePathFinder" - | "curveV1MetaMock" - | "curveV1Mock" - | "failed" - | "setUp" - | "test_NTP_01_constructor_correctly_sets_initial_values" - | "test_NTP_02_getPathFinder_returns_correct_values" - | "test_NTP_03_findAllSwaps_found_a_pair_if_only_one_is_depdloyed" - | "test_NTP_04_findAllSwaps_found_quotes_INPUT" - | "test_NTP_05_findAllSwaps_found_quotes_OUTPUT" - | "test_NTP_06_findAllSwaps_found_connector_quotes_and_take_the_best_INPUT" - | "test_NTP_07_findAllSwaps_found_connector_quotes_and_take_the_best_OUTPUT" - | "test_NTP_08_getBestDirectPairSwap_found_the_best_swap_with_INPUT_GP_0" - | "test_NTP_08_getBestDirectPairSwap_found_the_best_swap_with_INPUT_GP_non_zero" - | "test_NTP_09_getBestDirectPairSwap_found_the_best_swap_with_OUTPUT_GP_0" - | "test_NTP_10_getBestDirectPairSwap_found_the_best_swap_with_OUTPUT_GP_non_zero" - | "tokenMasksMap" - | "underlying" - | "uniV2adapter" - | "uniV2mock" - | "uniV2pathFinder" - | "uniV3adapter" - | "uniV3mock" - | "uniV3pathFinder" - | "yearnAdapter" - | "yearnMock" - | "yearnPathFinder" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "IS_TEST", values?: undefined): string; - encodeFunctionData( - functionFragment: "_setUpCurve", - values: [boolean] - ): string; - encodeFunctionData(functionFragment: "cft", values?: undefined): string; - encodeFunctionData( - functionFragment: "creditConfigurator", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditFacade", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditManager", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "curveAdapter", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "curveLPPathFinder", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "curveMetaAdapter", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "curvePathFinder", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "curveV1MetaMock", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "curveV1Mock", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "failed", values?: undefined): string; - encodeFunctionData(functionFragment: "setUp", values?: undefined): string; - encodeFunctionData( - functionFragment: "test_NTP_01_constructor_correctly_sets_initial_values", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_NTP_02_getPathFinder_returns_correct_values", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_NTP_03_findAllSwaps_found_a_pair_if_only_one_is_depdloyed", - values: [boolean] - ): string; - encodeFunctionData( - functionFragment: "test_NTP_04_findAllSwaps_found_quotes_INPUT", - values: [BigNumberish, BigNumberish, boolean, boolean] - ): string; - encodeFunctionData( - functionFragment: "test_NTP_05_findAllSwaps_found_quotes_OUTPUT", - values: [BigNumberish, BigNumberish, boolean] - ): string; - encodeFunctionData( - functionFragment: "test_NTP_06_findAllSwaps_found_connector_quotes_and_take_the_best_INPUT", - values: [BigNumberish, BigNumberish, boolean, boolean] - ): string; - encodeFunctionData( - functionFragment: "test_NTP_07_findAllSwaps_found_connector_quotes_and_take_the_best_OUTPUT", - values: [BigNumberish, BigNumberish, boolean] - ): string; - encodeFunctionData( - functionFragment: "test_NTP_08_getBestDirectPairSwap_found_the_best_swap_with_INPUT_GP_0", - values: [BigNumberish, BigNumberish, boolean, boolean] - ): string; - encodeFunctionData( - functionFragment: "test_NTP_08_getBestDirectPairSwap_found_the_best_swap_with_INPUT_GP_non_zero", - values: [BigNumberish, BigNumberish, boolean, boolean, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "test_NTP_09_getBestDirectPairSwap_found_the_best_swap_with_OUTPUT_GP_0", - values: [BigNumberish, BigNumberish, boolean, boolean] - ): string; - encodeFunctionData( - functionFragment: "test_NTP_10_getBestDirectPairSwap_found_the_best_swap_with_OUTPUT_GP_non_zero", - values: [BigNumberish, BigNumberish, boolean, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "tokenMasksMap", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "underlying", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "uniV2adapter", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "uniV2mock", values?: undefined): string; - encodeFunctionData( - functionFragment: "uniV2pathFinder", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "uniV3adapter", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "uniV3mock", values?: undefined): string; - encodeFunctionData( - functionFragment: "uniV3pathFinder", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "yearnAdapter", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "yearnMock", values?: undefined): string; - encodeFunctionData( - functionFragment: "yearnPathFinder", - values?: undefined - ): string; - - decodeFunctionResult(functionFragment: "IS_TEST", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "_setUpCurve", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "cft", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "creditConfigurator", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditFacade", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditManager", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "curveAdapter", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "curveLPPathFinder", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "curveMetaAdapter", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "curvePathFinder", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "curveV1MetaMock", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "curveV1Mock", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "failed", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "setUp", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "test_NTP_01_constructor_correctly_sets_initial_values", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_NTP_02_getPathFinder_returns_correct_values", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_NTP_03_findAllSwaps_found_a_pair_if_only_one_is_depdloyed", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_NTP_04_findAllSwaps_found_quotes_INPUT", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_NTP_05_findAllSwaps_found_quotes_OUTPUT", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_NTP_06_findAllSwaps_found_connector_quotes_and_take_the_best_INPUT", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_NTP_07_findAllSwaps_found_connector_quotes_and_take_the_best_OUTPUT", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_NTP_08_getBestDirectPairSwap_found_the_best_swap_with_INPUT_GP_0", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_NTP_08_getBestDirectPairSwap_found_the_best_swap_with_INPUT_GP_non_zero", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_NTP_09_getBestDirectPairSwap_found_the_best_swap_with_OUTPUT_GP_0", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_NTP_10_getBestDirectPairSwap_found_the_best_swap_with_OUTPUT_GP_non_zero", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "tokenMasksMap", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "underlying", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "uniV2adapter", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "uniV2mock", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "uniV2pathFinder", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "uniV3adapter", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "uniV3mock", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "uniV3pathFinder", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "yearnAdapter", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "yearnMock", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "yearnPathFinder", - data: BytesLike - ): Result; - - events: { - "log(string)": EventFragment; - "log_address(address)": EventFragment; - "log_bytes(bytes)": EventFragment; - "log_bytes32(bytes32)": EventFragment; - "log_int(int256)": EventFragment; - "log_named_address(string,address)": EventFragment; - "log_named_bytes(string,bytes)": EventFragment; - "log_named_bytes32(string,bytes32)": EventFragment; - "log_named_decimal_int(string,int256,uint256)": EventFragment; - "log_named_decimal_uint(string,uint256,uint256)": EventFragment; - "log_named_int(string,int256)": EventFragment; - "log_named_string(string,string)": EventFragment; - "log_named_uint(string,uint256)": EventFragment; - "log_string(string)": EventFragment; - "log_uint(uint256)": EventFragment; - "logs(bytes)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "log"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "logs"): EventFragment; -} - -export interface logEventObject { - arg0: string; -} -export type logEvent = TypedEvent<[string], logEventObject>; - -export type logEventFilter = TypedEventFilter; - -export interface log_addressEventObject { - arg0: string; -} -export type log_addressEvent = TypedEvent<[string], log_addressEventObject>; - -export type log_addressEventFilter = TypedEventFilter; - -export interface log_bytesEventObject { - arg0: string; -} -export type log_bytesEvent = TypedEvent<[string], log_bytesEventObject>; - -export type log_bytesEventFilter = TypedEventFilter; - -export interface log_bytes32EventObject { - arg0: string; -} -export type log_bytes32Event = TypedEvent<[string], log_bytes32EventObject>; - -export type log_bytes32EventFilter = TypedEventFilter; - -export interface log_intEventObject { - arg0: BigNumber; -} -export type log_intEvent = TypedEvent<[BigNumber], log_intEventObject>; - -export type log_intEventFilter = TypedEventFilter; - -export interface log_named_addressEventObject { - key: string; - val: string; -} -export type log_named_addressEvent = TypedEvent< - [string, string], - log_named_addressEventObject ->; - -export type log_named_addressEventFilter = - TypedEventFilter; - -export interface log_named_bytesEventObject { - key: string; - val: string; -} -export type log_named_bytesEvent = TypedEvent< - [string, string], - log_named_bytesEventObject ->; - -export type log_named_bytesEventFilter = TypedEventFilter; - -export interface log_named_bytes32EventObject { - key: string; - val: string; -} -export type log_named_bytes32Event = TypedEvent< - [string, string], - log_named_bytes32EventObject ->; - -export type log_named_bytes32EventFilter = - TypedEventFilter; - -export interface log_named_decimal_intEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_intEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_intEventObject ->; - -export type log_named_decimal_intEventFilter = - TypedEventFilter; - -export interface log_named_decimal_uintEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_uintEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_uintEventObject ->; - -export type log_named_decimal_uintEventFilter = - TypedEventFilter; - -export interface log_named_intEventObject { - key: string; - val: BigNumber; -} -export type log_named_intEvent = TypedEvent< - [string, BigNumber], - log_named_intEventObject ->; - -export type log_named_intEventFilter = TypedEventFilter; - -export interface log_named_stringEventObject { - key: string; - val: string; -} -export type log_named_stringEvent = TypedEvent< - [string, string], - log_named_stringEventObject ->; - -export type log_named_stringEventFilter = - TypedEventFilter; - -export interface log_named_uintEventObject { - key: string; - val: BigNumber; -} -export type log_named_uintEvent = TypedEvent< - [string, BigNumber], - log_named_uintEventObject ->; - -export type log_named_uintEventFilter = TypedEventFilter; - -export interface log_stringEventObject { - arg0: string; -} -export type log_stringEvent = TypedEvent<[string], log_stringEventObject>; - -export type log_stringEventFilter = TypedEventFilter; - -export interface log_uintEventObject { - arg0: BigNumber; -} -export type log_uintEvent = TypedEvent<[BigNumber], log_uintEventObject>; - -export type log_uintEventFilter = TypedEventFilter; - -export interface logsEventObject { - arg0: string; -} -export type logsEvent = TypedEvent<[string], logsEventObject>; - -export type logsEventFilter = TypedEventFilter; - -export interface SwapPathFinderTest extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: SwapPathFinderTestInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - IS_TEST(overrides?: CallOverrides): Promise<[boolean]>; - - _setUpCurve( - withUnderlyings: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - cft(overrides?: CallOverrides): Promise<[string]>; - - creditConfigurator(overrides?: CallOverrides): Promise<[string]>; - - creditFacade(overrides?: CallOverrides): Promise<[string]>; - - creditManager(overrides?: CallOverrides): Promise<[string]>; - - curveAdapter(overrides?: CallOverrides): Promise<[string]>; - - curveLPPathFinder(overrides?: CallOverrides): Promise<[string]>; - - curveMetaAdapter(overrides?: CallOverrides): Promise<[string]>; - - curvePathFinder(overrides?: CallOverrides): Promise<[string]>; - - curveV1MetaMock(overrides?: CallOverrides): Promise<[string]>; - - curveV1Mock(overrides?: CallOverrides): Promise<[string]>; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_NTP_01_constructor_correctly_sets_initial_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_NTP_02_getPathFinder_returns_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_NTP_03_findAllSwaps_found_a_pair_if_only_one_is_depdloyed( - isAll: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_NTP_04_findAllSwaps_found_quotes_INPUT( - amountIn: BigNumberish, - slippage: BigNumberish, - isAll: boolean, - externalSlippage: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_NTP_05_findAllSwaps_found_quotes_OUTPUT( - amountOut: BigNumberish, - slippage: BigNumberish, - externalSlippage: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_NTP_06_findAllSwaps_found_connector_quotes_and_take_the_best_INPUT( - amountIn: BigNumberish, - slippage: BigNumberish, - isAll: boolean, - externalSlippage: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_NTP_07_findAllSwaps_found_connector_quotes_and_take_the_best_OUTPUT( - amountOut: BigNumberish, - slippage: BigNumberish, - externalSlippage: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_NTP_08_getBestDirectPairSwap_found_the_best_swap_with_INPUT_GP_0( - amountIn: BigNumberish, - slippage: BigNumberish, - isAll: boolean, - externalSlippage: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_NTP_08_getBestDirectPairSwap_found_the_best_swap_with_INPUT_GP_non_zero( - amountIn: BigNumberish, - slippage: BigNumberish, - isAll: boolean, - externalSlippage: boolean, - whoWins: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_NTP_09_getBestDirectPairSwap_found_the_best_swap_with_OUTPUT_GP_0( - amountOut: BigNumberish, - slippage: BigNumberish, - isAll: boolean, - externalSlippage: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_NTP_10_getBestDirectPairSwap_found_the_best_swap_with_OUTPUT_GP_non_zero( - amountOut: BigNumberish, - slippage: BigNumberish, - externalSlippage: boolean, - whoWins: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - tokenMasksMap( - arg0: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - underlying(overrides?: CallOverrides): Promise<[string]>; - - uniV2adapter(overrides?: CallOverrides): Promise<[string]>; - - uniV2mock(overrides?: CallOverrides): Promise<[string]>; - - uniV2pathFinder(overrides?: CallOverrides): Promise<[string]>; - - uniV3adapter(overrides?: CallOverrides): Promise<[string]>; - - uniV3mock(overrides?: CallOverrides): Promise<[string]>; - - uniV3pathFinder(overrides?: CallOverrides): Promise<[string]>; - - yearnAdapter(overrides?: CallOverrides): Promise<[string]>; - - yearnMock(overrides?: CallOverrides): Promise<[string]>; - - yearnPathFinder(overrides?: CallOverrides): Promise<[string]>; - }; - - IS_TEST(overrides?: CallOverrides): Promise; - - _setUpCurve( - withUnderlyings: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - curveAdapter(overrides?: CallOverrides): Promise; - - curveLPPathFinder(overrides?: CallOverrides): Promise; - - curveMetaAdapter(overrides?: CallOverrides): Promise; - - curvePathFinder(overrides?: CallOverrides): Promise; - - curveV1MetaMock(overrides?: CallOverrides): Promise; - - curveV1Mock(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_NTP_01_constructor_correctly_sets_initial_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_NTP_02_getPathFinder_returns_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_NTP_03_findAllSwaps_found_a_pair_if_only_one_is_depdloyed( - isAll: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_NTP_04_findAllSwaps_found_quotes_INPUT( - amountIn: BigNumberish, - slippage: BigNumberish, - isAll: boolean, - externalSlippage: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_NTP_05_findAllSwaps_found_quotes_OUTPUT( - amountOut: BigNumberish, - slippage: BigNumberish, - externalSlippage: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_NTP_06_findAllSwaps_found_connector_quotes_and_take_the_best_INPUT( - amountIn: BigNumberish, - slippage: BigNumberish, - isAll: boolean, - externalSlippage: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_NTP_07_findAllSwaps_found_connector_quotes_and_take_the_best_OUTPUT( - amountOut: BigNumberish, - slippage: BigNumberish, - externalSlippage: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_NTP_08_getBestDirectPairSwap_found_the_best_swap_with_INPUT_GP_0( - amountIn: BigNumberish, - slippage: BigNumberish, - isAll: boolean, - externalSlippage: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_NTP_08_getBestDirectPairSwap_found_the_best_swap_with_INPUT_GP_non_zero( - amountIn: BigNumberish, - slippage: BigNumberish, - isAll: boolean, - externalSlippage: boolean, - whoWins: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_NTP_09_getBestDirectPairSwap_found_the_best_swap_with_OUTPUT_GP_0( - amountOut: BigNumberish, - slippage: BigNumberish, - isAll: boolean, - externalSlippage: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_NTP_10_getBestDirectPairSwap_found_the_best_swap_with_OUTPUT_GP_non_zero( - amountOut: BigNumberish, - slippage: BigNumberish, - externalSlippage: boolean, - whoWins: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - tokenMasksMap(arg0: string, overrides?: CallOverrides): Promise; - - underlying(overrides?: CallOverrides): Promise; - - uniV2adapter(overrides?: CallOverrides): Promise; - - uniV2mock(overrides?: CallOverrides): Promise; - - uniV2pathFinder(overrides?: CallOverrides): Promise; - - uniV3adapter(overrides?: CallOverrides): Promise; - - uniV3mock(overrides?: CallOverrides): Promise; - - uniV3pathFinder(overrides?: CallOverrides): Promise; - - yearnAdapter(overrides?: CallOverrides): Promise; - - yearnMock(overrides?: CallOverrides): Promise; - - yearnPathFinder(overrides?: CallOverrides): Promise; - - callStatic: { - IS_TEST(overrides?: CallOverrides): Promise; - - _setUpCurve( - withUnderlyings: boolean, - overrides?: CallOverrides - ): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - curveAdapter(overrides?: CallOverrides): Promise; - - curveLPPathFinder(overrides?: CallOverrides): Promise; - - curveMetaAdapter(overrides?: CallOverrides): Promise; - - curvePathFinder(overrides?: CallOverrides): Promise; - - curveV1MetaMock(overrides?: CallOverrides): Promise; - - curveV1Mock(overrides?: CallOverrides): Promise; - - failed(overrides?: CallOverrides): Promise; - - setUp(overrides?: CallOverrides): Promise; - - test_NTP_01_constructor_correctly_sets_initial_values( - overrides?: CallOverrides - ): Promise; - - test_NTP_02_getPathFinder_returns_correct_values( - overrides?: CallOverrides - ): Promise; - - test_NTP_03_findAllSwaps_found_a_pair_if_only_one_is_depdloyed( - isAll: boolean, - overrides?: CallOverrides - ): Promise; - - test_NTP_04_findAllSwaps_found_quotes_INPUT( - amountIn: BigNumberish, - slippage: BigNumberish, - isAll: boolean, - externalSlippage: boolean, - overrides?: CallOverrides - ): Promise; - - test_NTP_05_findAllSwaps_found_quotes_OUTPUT( - amountOut: BigNumberish, - slippage: BigNumberish, - externalSlippage: boolean, - overrides?: CallOverrides - ): Promise; - - test_NTP_06_findAllSwaps_found_connector_quotes_and_take_the_best_INPUT( - amountIn: BigNumberish, - slippage: BigNumberish, - isAll: boolean, - externalSlippage: boolean, - overrides?: CallOverrides - ): Promise; - - test_NTP_07_findAllSwaps_found_connector_quotes_and_take_the_best_OUTPUT( - amountOut: BigNumberish, - slippage: BigNumberish, - externalSlippage: boolean, - overrides?: CallOverrides - ): Promise; - - test_NTP_08_getBestDirectPairSwap_found_the_best_swap_with_INPUT_GP_0( - amountIn: BigNumberish, - slippage: BigNumberish, - isAll: boolean, - externalSlippage: boolean, - overrides?: CallOverrides - ): Promise; - - test_NTP_08_getBestDirectPairSwap_found_the_best_swap_with_INPUT_GP_non_zero( - amountIn: BigNumberish, - slippage: BigNumberish, - isAll: boolean, - externalSlippage: boolean, - whoWins: BigNumberish, - overrides?: CallOverrides - ): Promise; - - test_NTP_09_getBestDirectPairSwap_found_the_best_swap_with_OUTPUT_GP_0( - amountOut: BigNumberish, - slippage: BigNumberish, - isAll: boolean, - externalSlippage: boolean, - overrides?: CallOverrides - ): Promise; - - test_NTP_10_getBestDirectPairSwap_found_the_best_swap_with_OUTPUT_GP_non_zero( - amountOut: BigNumberish, - slippage: BigNumberish, - externalSlippage: boolean, - whoWins: BigNumberish, - overrides?: CallOverrides - ): Promise; - - tokenMasksMap(arg0: string, overrides?: CallOverrides): Promise; - - underlying(overrides?: CallOverrides): Promise; - - uniV2adapter(overrides?: CallOverrides): Promise; - - uniV2mock(overrides?: CallOverrides): Promise; - - uniV2pathFinder(overrides?: CallOverrides): Promise; - - uniV3adapter(overrides?: CallOverrides): Promise; - - uniV3mock(overrides?: CallOverrides): Promise; - - uniV3pathFinder(overrides?: CallOverrides): Promise; - - yearnAdapter(overrides?: CallOverrides): Promise; - - yearnMock(overrides?: CallOverrides): Promise; - - yearnPathFinder(overrides?: CallOverrides): Promise; - }; - - filters: { - "log(string)"(arg0?: null): logEventFilter; - log(arg0?: null): logEventFilter; - - "log_address(address)"(arg0?: null): log_addressEventFilter; - log_address(arg0?: null): log_addressEventFilter; - - "log_bytes(bytes)"(arg0?: null): log_bytesEventFilter; - log_bytes(arg0?: null): log_bytesEventFilter; - - "log_bytes32(bytes32)"(arg0?: null): log_bytes32EventFilter; - log_bytes32(arg0?: null): log_bytes32EventFilter; - - "log_int(int256)"(arg0?: null): log_intEventFilter; - log_int(arg0?: null): log_intEventFilter; - - "log_named_address(string,address)"( - key?: null, - val?: null - ): log_named_addressEventFilter; - log_named_address(key?: null, val?: null): log_named_addressEventFilter; - - "log_named_bytes(string,bytes)"( - key?: null, - val?: null - ): log_named_bytesEventFilter; - log_named_bytes(key?: null, val?: null): log_named_bytesEventFilter; - - "log_named_bytes32(string,bytes32)"( - key?: null, - val?: null - ): log_named_bytes32EventFilter; - log_named_bytes32(key?: null, val?: null): log_named_bytes32EventFilter; - - "log_named_decimal_int(string,int256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - log_named_decimal_int( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - - "log_named_decimal_uint(string,uint256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - log_named_decimal_uint( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - - "log_named_int(string,int256)"( - key?: null, - val?: null - ): log_named_intEventFilter; - log_named_int(key?: null, val?: null): log_named_intEventFilter; - - "log_named_string(string,string)"( - key?: null, - val?: null - ): log_named_stringEventFilter; - log_named_string(key?: null, val?: null): log_named_stringEventFilter; - - "log_named_uint(string,uint256)"( - key?: null, - val?: null - ): log_named_uintEventFilter; - log_named_uint(key?: null, val?: null): log_named_uintEventFilter; - - "log_string(string)"(arg0?: null): log_stringEventFilter; - log_string(arg0?: null): log_stringEventFilter; - - "log_uint(uint256)"(arg0?: null): log_uintEventFilter; - log_uint(arg0?: null): log_uintEventFilter; - - "logs(bytes)"(arg0?: null): logsEventFilter; - logs(arg0?: null): logsEventFilter; - }; - - estimateGas: { - IS_TEST(overrides?: CallOverrides): Promise; - - _setUpCurve( - withUnderlyings: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - curveAdapter(overrides?: CallOverrides): Promise; - - curveLPPathFinder(overrides?: CallOverrides): Promise; - - curveMetaAdapter(overrides?: CallOverrides): Promise; - - curvePathFinder(overrides?: CallOverrides): Promise; - - curveV1MetaMock(overrides?: CallOverrides): Promise; - - curveV1Mock(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_NTP_01_constructor_correctly_sets_initial_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_NTP_02_getPathFinder_returns_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_NTP_03_findAllSwaps_found_a_pair_if_only_one_is_depdloyed( - isAll: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_NTP_04_findAllSwaps_found_quotes_INPUT( - amountIn: BigNumberish, - slippage: BigNumberish, - isAll: boolean, - externalSlippage: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_NTP_05_findAllSwaps_found_quotes_OUTPUT( - amountOut: BigNumberish, - slippage: BigNumberish, - externalSlippage: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_NTP_06_findAllSwaps_found_connector_quotes_and_take_the_best_INPUT( - amountIn: BigNumberish, - slippage: BigNumberish, - isAll: boolean, - externalSlippage: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_NTP_07_findAllSwaps_found_connector_quotes_and_take_the_best_OUTPUT( - amountOut: BigNumberish, - slippage: BigNumberish, - externalSlippage: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_NTP_08_getBestDirectPairSwap_found_the_best_swap_with_INPUT_GP_0( - amountIn: BigNumberish, - slippage: BigNumberish, - isAll: boolean, - externalSlippage: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_NTP_08_getBestDirectPairSwap_found_the_best_swap_with_INPUT_GP_non_zero( - amountIn: BigNumberish, - slippage: BigNumberish, - isAll: boolean, - externalSlippage: boolean, - whoWins: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_NTP_09_getBestDirectPairSwap_found_the_best_swap_with_OUTPUT_GP_0( - amountOut: BigNumberish, - slippage: BigNumberish, - isAll: boolean, - externalSlippage: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_NTP_10_getBestDirectPairSwap_found_the_best_swap_with_OUTPUT_GP_non_zero( - amountOut: BigNumberish, - slippage: BigNumberish, - externalSlippage: boolean, - whoWins: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - tokenMasksMap(arg0: string, overrides?: CallOverrides): Promise; - - underlying(overrides?: CallOverrides): Promise; - - uniV2adapter(overrides?: CallOverrides): Promise; - - uniV2mock(overrides?: CallOverrides): Promise; - - uniV2pathFinder(overrides?: CallOverrides): Promise; - - uniV3adapter(overrides?: CallOverrides): Promise; - - uniV3mock(overrides?: CallOverrides): Promise; - - uniV3pathFinder(overrides?: CallOverrides): Promise; - - yearnAdapter(overrides?: CallOverrides): Promise; - - yearnMock(overrides?: CallOverrides): Promise; - - yearnPathFinder(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - IS_TEST(overrides?: CallOverrides): Promise; - - _setUpCurve( - withUnderlyings: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator( - overrides?: CallOverrides - ): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - curveAdapter(overrides?: CallOverrides): Promise; - - curveLPPathFinder(overrides?: CallOverrides): Promise; - - curveMetaAdapter(overrides?: CallOverrides): Promise; - - curvePathFinder(overrides?: CallOverrides): Promise; - - curveV1MetaMock(overrides?: CallOverrides): Promise; - - curveV1Mock(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_NTP_01_constructor_correctly_sets_initial_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_NTP_02_getPathFinder_returns_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_NTP_03_findAllSwaps_found_a_pair_if_only_one_is_depdloyed( - isAll: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_NTP_04_findAllSwaps_found_quotes_INPUT( - amountIn: BigNumberish, - slippage: BigNumberish, - isAll: boolean, - externalSlippage: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_NTP_05_findAllSwaps_found_quotes_OUTPUT( - amountOut: BigNumberish, - slippage: BigNumberish, - externalSlippage: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_NTP_06_findAllSwaps_found_connector_quotes_and_take_the_best_INPUT( - amountIn: BigNumberish, - slippage: BigNumberish, - isAll: boolean, - externalSlippage: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_NTP_07_findAllSwaps_found_connector_quotes_and_take_the_best_OUTPUT( - amountOut: BigNumberish, - slippage: BigNumberish, - externalSlippage: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_NTP_08_getBestDirectPairSwap_found_the_best_swap_with_INPUT_GP_0( - amountIn: BigNumberish, - slippage: BigNumberish, - isAll: boolean, - externalSlippage: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_NTP_08_getBestDirectPairSwap_found_the_best_swap_with_INPUT_GP_non_zero( - amountIn: BigNumberish, - slippage: BigNumberish, - isAll: boolean, - externalSlippage: boolean, - whoWins: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_NTP_09_getBestDirectPairSwap_found_the_best_swap_with_OUTPUT_GP_0( - amountOut: BigNumberish, - slippage: BigNumberish, - isAll: boolean, - externalSlippage: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_NTP_10_getBestDirectPairSwap_found_the_best_swap_with_OUTPUT_GP_non_zero( - amountOut: BigNumberish, - slippage: BigNumberish, - externalSlippage: boolean, - whoWins: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - tokenMasksMap( - arg0: string, - overrides?: CallOverrides - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - - uniV2adapter(overrides?: CallOverrides): Promise; - - uniV2mock(overrides?: CallOverrides): Promise; - - uniV2pathFinder(overrides?: CallOverrides): Promise; - - uniV3adapter(overrides?: CallOverrides): Promise; - - uniV3mock(overrides?: CallOverrides): Promise; - - uniV3pathFinder(overrides?: CallOverrides): Promise; - - yearnAdapter(overrides?: CallOverrides): Promise; - - yearnMock(overrides?: CallOverrides): Promise; - - yearnPathFinder(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/test/pathfinder/SwapPathFinder.t.sol/index.ts b/src/types/contracts/test/pathfinder/SwapPathFinder.t.sol/index.ts deleted file mode 100644 index 3e93575e..00000000 --- a/src/types/contracts/test/pathfinder/SwapPathFinder.t.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { SwapPathFinderTest } from "./SwapPathFinderTest"; diff --git a/src/types/contracts/test/pathfinder/UniswapV2PathFinder.t.sol/UniswapV2PathFinderTest.ts b/src/types/contracts/test/pathfinder/UniswapV2PathFinder.t.sol/UniswapV2PathFinderTest.ts deleted file mode 100644 index 4a3f4654..00000000 --- a/src/types/contracts/test/pathfinder/UniswapV2PathFinder.t.sol/UniswapV2PathFinderTest.ts +++ /dev/null @@ -1,1108 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface UniswapV2PathFinderTestInterface extends utils.Interface { - functions: { - "IS_TEST()": FunctionFragment; - "_setUpCurve(bool)": FunctionFragment; - "cft()": FunctionFragment; - "creditConfigurator()": FunctionFragment; - "creditFacade()": FunctionFragment; - "creditManager()": FunctionFragment; - "curveAdapter()": FunctionFragment; - "curveLPPathFinder()": FunctionFragment; - "curveMetaAdapter()": FunctionFragment; - "curvePathFinder()": FunctionFragment; - "curveV1MetaMock()": FunctionFragment; - "curveV1Mock()": FunctionFragment; - "failed()": FunctionFragment; - "setUp()": FunctionFragment; - "test_PUV2_01_setGasUsage_correctly_sets_values()": FunctionFragment; - "test_PUV2_02_getBestDirectPairSwap_returns_correct_swapQuote_ZERO()": FunctionFragment; - "test_PUV2_03_getBestDirectPairSwap_returns_correct_swapQuote_INPUT(uint256,uint16,uint16,bool,bool)": FunctionFragment; - "test_PUV2_04_getBestDirectPairSwap_returns_correct_swapQuote_OUTPUT(uint256,uint16,uint16,bool)": FunctionFragment; - "test_PUV2_05_getBestConnectorSwap_returns_correct_swapQuote_INPUT(uint256,uint8,uint16,bool,bool)": FunctionFragment; - "test_PUV2_06_getBestConnectorSwap_returns_correct_swapQuote_INPUT(uint256,uint8,uint16,bool)": FunctionFragment; - "tokenMasksMap(address)": FunctionFragment; - "underlying()": FunctionFragment; - "uniV2adapter()": FunctionFragment; - "uniV2mock()": FunctionFragment; - "uniV2pathFinder()": FunctionFragment; - "uniV3adapter()": FunctionFragment; - "uniV3mock()": FunctionFragment; - "uniV3pathFinder()": FunctionFragment; - "yearnAdapter()": FunctionFragment; - "yearnMock()": FunctionFragment; - "yearnPathFinder()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "IS_TEST" - | "_setUpCurve" - | "cft" - | "creditConfigurator" - | "creditFacade" - | "creditManager" - | "curveAdapter" - | "curveLPPathFinder" - | "curveMetaAdapter" - | "curvePathFinder" - | "curveV1MetaMock" - | "curveV1Mock" - | "failed" - | "setUp" - | "test_PUV2_01_setGasUsage_correctly_sets_values" - | "test_PUV2_02_getBestDirectPairSwap_returns_correct_swapQuote_ZERO" - | "test_PUV2_03_getBestDirectPairSwap_returns_correct_swapQuote_INPUT" - | "test_PUV2_04_getBestDirectPairSwap_returns_correct_swapQuote_OUTPUT" - | "test_PUV2_05_getBestConnectorSwap_returns_correct_swapQuote_INPUT" - | "test_PUV2_06_getBestConnectorSwap_returns_correct_swapQuote_INPUT" - | "tokenMasksMap" - | "underlying" - | "uniV2adapter" - | "uniV2mock" - | "uniV2pathFinder" - | "uniV3adapter" - | "uniV3mock" - | "uniV3pathFinder" - | "yearnAdapter" - | "yearnMock" - | "yearnPathFinder" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "IS_TEST", values?: undefined): string; - encodeFunctionData( - functionFragment: "_setUpCurve", - values: [boolean] - ): string; - encodeFunctionData(functionFragment: "cft", values?: undefined): string; - encodeFunctionData( - functionFragment: "creditConfigurator", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditFacade", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditManager", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "curveAdapter", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "curveLPPathFinder", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "curveMetaAdapter", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "curvePathFinder", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "curveV1MetaMock", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "curveV1Mock", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "failed", values?: undefined): string; - encodeFunctionData(functionFragment: "setUp", values?: undefined): string; - encodeFunctionData( - functionFragment: "test_PUV2_01_setGasUsage_correctly_sets_values", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_PUV2_02_getBestDirectPairSwap_returns_correct_swapQuote_ZERO", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_PUV2_03_getBestDirectPairSwap_returns_correct_swapQuote_INPUT", - values: [BigNumberish, BigNumberish, BigNumberish, boolean, boolean] - ): string; - encodeFunctionData( - functionFragment: "test_PUV2_04_getBestDirectPairSwap_returns_correct_swapQuote_OUTPUT", - values: [BigNumberish, BigNumberish, BigNumberish, boolean] - ): string; - encodeFunctionData( - functionFragment: "test_PUV2_05_getBestConnectorSwap_returns_correct_swapQuote_INPUT", - values: [BigNumberish, BigNumberish, BigNumberish, boolean, boolean] - ): string; - encodeFunctionData( - functionFragment: "test_PUV2_06_getBestConnectorSwap_returns_correct_swapQuote_INPUT", - values: [BigNumberish, BigNumberish, BigNumberish, boolean] - ): string; - encodeFunctionData( - functionFragment: "tokenMasksMap", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "underlying", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "uniV2adapter", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "uniV2mock", values?: undefined): string; - encodeFunctionData( - functionFragment: "uniV2pathFinder", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "uniV3adapter", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "uniV3mock", values?: undefined): string; - encodeFunctionData( - functionFragment: "uniV3pathFinder", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "yearnAdapter", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "yearnMock", values?: undefined): string; - encodeFunctionData( - functionFragment: "yearnPathFinder", - values?: undefined - ): string; - - decodeFunctionResult(functionFragment: "IS_TEST", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "_setUpCurve", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "cft", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "creditConfigurator", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditFacade", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditManager", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "curveAdapter", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "curveLPPathFinder", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "curveMetaAdapter", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "curvePathFinder", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "curveV1MetaMock", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "curveV1Mock", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "failed", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "setUp", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "test_PUV2_01_setGasUsage_correctly_sets_values", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_PUV2_02_getBestDirectPairSwap_returns_correct_swapQuote_ZERO", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_PUV2_03_getBestDirectPairSwap_returns_correct_swapQuote_INPUT", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_PUV2_04_getBestDirectPairSwap_returns_correct_swapQuote_OUTPUT", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_PUV2_05_getBestConnectorSwap_returns_correct_swapQuote_INPUT", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_PUV2_06_getBestConnectorSwap_returns_correct_swapQuote_INPUT", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "tokenMasksMap", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "underlying", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "uniV2adapter", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "uniV2mock", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "uniV2pathFinder", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "uniV3adapter", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "uniV3mock", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "uniV3pathFinder", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "yearnAdapter", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "yearnMock", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "yearnPathFinder", - data: BytesLike - ): Result; - - events: { - "log(string)": EventFragment; - "log_address(address)": EventFragment; - "log_bytes(bytes)": EventFragment; - "log_bytes32(bytes32)": EventFragment; - "log_int(int256)": EventFragment; - "log_named_address(string,address)": EventFragment; - "log_named_bytes(string,bytes)": EventFragment; - "log_named_bytes32(string,bytes32)": EventFragment; - "log_named_decimal_int(string,int256,uint256)": EventFragment; - "log_named_decimal_uint(string,uint256,uint256)": EventFragment; - "log_named_int(string,int256)": EventFragment; - "log_named_string(string,string)": EventFragment; - "log_named_uint(string,uint256)": EventFragment; - "log_string(string)": EventFragment; - "log_uint(uint256)": EventFragment; - "logs(bytes)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "log"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "logs"): EventFragment; -} - -export interface logEventObject { - arg0: string; -} -export type logEvent = TypedEvent<[string], logEventObject>; - -export type logEventFilter = TypedEventFilter; - -export interface log_addressEventObject { - arg0: string; -} -export type log_addressEvent = TypedEvent<[string], log_addressEventObject>; - -export type log_addressEventFilter = TypedEventFilter; - -export interface log_bytesEventObject { - arg0: string; -} -export type log_bytesEvent = TypedEvent<[string], log_bytesEventObject>; - -export type log_bytesEventFilter = TypedEventFilter; - -export interface log_bytes32EventObject { - arg0: string; -} -export type log_bytes32Event = TypedEvent<[string], log_bytes32EventObject>; - -export type log_bytes32EventFilter = TypedEventFilter; - -export interface log_intEventObject { - arg0: BigNumber; -} -export type log_intEvent = TypedEvent<[BigNumber], log_intEventObject>; - -export type log_intEventFilter = TypedEventFilter; - -export interface log_named_addressEventObject { - key: string; - val: string; -} -export type log_named_addressEvent = TypedEvent< - [string, string], - log_named_addressEventObject ->; - -export type log_named_addressEventFilter = - TypedEventFilter; - -export interface log_named_bytesEventObject { - key: string; - val: string; -} -export type log_named_bytesEvent = TypedEvent< - [string, string], - log_named_bytesEventObject ->; - -export type log_named_bytesEventFilter = TypedEventFilter; - -export interface log_named_bytes32EventObject { - key: string; - val: string; -} -export type log_named_bytes32Event = TypedEvent< - [string, string], - log_named_bytes32EventObject ->; - -export type log_named_bytes32EventFilter = - TypedEventFilter; - -export interface log_named_decimal_intEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_intEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_intEventObject ->; - -export type log_named_decimal_intEventFilter = - TypedEventFilter; - -export interface log_named_decimal_uintEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_uintEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_uintEventObject ->; - -export type log_named_decimal_uintEventFilter = - TypedEventFilter; - -export interface log_named_intEventObject { - key: string; - val: BigNumber; -} -export type log_named_intEvent = TypedEvent< - [string, BigNumber], - log_named_intEventObject ->; - -export type log_named_intEventFilter = TypedEventFilter; - -export interface log_named_stringEventObject { - key: string; - val: string; -} -export type log_named_stringEvent = TypedEvent< - [string, string], - log_named_stringEventObject ->; - -export type log_named_stringEventFilter = - TypedEventFilter; - -export interface log_named_uintEventObject { - key: string; - val: BigNumber; -} -export type log_named_uintEvent = TypedEvent< - [string, BigNumber], - log_named_uintEventObject ->; - -export type log_named_uintEventFilter = TypedEventFilter; - -export interface log_stringEventObject { - arg0: string; -} -export type log_stringEvent = TypedEvent<[string], log_stringEventObject>; - -export type log_stringEventFilter = TypedEventFilter; - -export interface log_uintEventObject { - arg0: BigNumber; -} -export type log_uintEvent = TypedEvent<[BigNumber], log_uintEventObject>; - -export type log_uintEventFilter = TypedEventFilter; - -export interface logsEventObject { - arg0: string; -} -export type logsEvent = TypedEvent<[string], logsEventObject>; - -export type logsEventFilter = TypedEventFilter; - -export interface UniswapV2PathFinderTest extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: UniswapV2PathFinderTestInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - IS_TEST(overrides?: CallOverrides): Promise<[boolean]>; - - _setUpCurve( - withUnderlyings: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - cft(overrides?: CallOverrides): Promise<[string]>; - - creditConfigurator(overrides?: CallOverrides): Promise<[string]>; - - creditFacade(overrides?: CallOverrides): Promise<[string]>; - - creditManager(overrides?: CallOverrides): Promise<[string]>; - - curveAdapter(overrides?: CallOverrides): Promise<[string]>; - - curveLPPathFinder(overrides?: CallOverrides): Promise<[string]>; - - curveMetaAdapter(overrides?: CallOverrides): Promise<[string]>; - - curvePathFinder(overrides?: CallOverrides): Promise<[string]>; - - curveV1MetaMock(overrides?: CallOverrides): Promise<[string]>; - - curveV1Mock(overrides?: CallOverrides): Promise<[string]>; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PUV2_01_setGasUsage_correctly_sets_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PUV2_02_getBestDirectPairSwap_returns_correct_swapQuote_ZERO( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PUV2_03_getBestDirectPairSwap_returns_correct_swapQuote_INPUT( - amountIn: BigNumberish, - daiWethRate: BigNumberish, - slippage: BigNumberish, - isAll: boolean, - externalSlippage: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PUV2_04_getBestDirectPairSwap_returns_correct_swapQuote_OUTPUT( - amountOut: BigNumberish, - daiWethRate: BigNumberish, - slippage: BigNumberish, - externalSlippage: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PUV2_05_getBestConnectorSwap_returns_correct_swapQuote_INPUT( - amountIn: BigNumberish, - bestConnector: BigNumberish, - slippage: BigNumberish, - isAll: boolean, - externalSlippage: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PUV2_06_getBestConnectorSwap_returns_correct_swapQuote_INPUT( - amountOut: BigNumberish, - bestConnector: BigNumberish, - slippage: BigNumberish, - externalSlippage: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - tokenMasksMap( - arg0: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - underlying(overrides?: CallOverrides): Promise<[string]>; - - uniV2adapter(overrides?: CallOverrides): Promise<[string]>; - - uniV2mock(overrides?: CallOverrides): Promise<[string]>; - - uniV2pathFinder(overrides?: CallOverrides): Promise<[string]>; - - uniV3adapter(overrides?: CallOverrides): Promise<[string]>; - - uniV3mock(overrides?: CallOverrides): Promise<[string]>; - - uniV3pathFinder(overrides?: CallOverrides): Promise<[string]>; - - yearnAdapter(overrides?: CallOverrides): Promise<[string]>; - - yearnMock(overrides?: CallOverrides): Promise<[string]>; - - yearnPathFinder(overrides?: CallOverrides): Promise<[string]>; - }; - - IS_TEST(overrides?: CallOverrides): Promise; - - _setUpCurve( - withUnderlyings: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - curveAdapter(overrides?: CallOverrides): Promise; - - curveLPPathFinder(overrides?: CallOverrides): Promise; - - curveMetaAdapter(overrides?: CallOverrides): Promise; - - curvePathFinder(overrides?: CallOverrides): Promise; - - curveV1MetaMock(overrides?: CallOverrides): Promise; - - curveV1Mock(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PUV2_01_setGasUsage_correctly_sets_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PUV2_02_getBestDirectPairSwap_returns_correct_swapQuote_ZERO( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PUV2_03_getBestDirectPairSwap_returns_correct_swapQuote_INPUT( - amountIn: BigNumberish, - daiWethRate: BigNumberish, - slippage: BigNumberish, - isAll: boolean, - externalSlippage: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PUV2_04_getBestDirectPairSwap_returns_correct_swapQuote_OUTPUT( - amountOut: BigNumberish, - daiWethRate: BigNumberish, - slippage: BigNumberish, - externalSlippage: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PUV2_05_getBestConnectorSwap_returns_correct_swapQuote_INPUT( - amountIn: BigNumberish, - bestConnector: BigNumberish, - slippage: BigNumberish, - isAll: boolean, - externalSlippage: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PUV2_06_getBestConnectorSwap_returns_correct_swapQuote_INPUT( - amountOut: BigNumberish, - bestConnector: BigNumberish, - slippage: BigNumberish, - externalSlippage: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - tokenMasksMap(arg0: string, overrides?: CallOverrides): Promise; - - underlying(overrides?: CallOverrides): Promise; - - uniV2adapter(overrides?: CallOverrides): Promise; - - uniV2mock(overrides?: CallOverrides): Promise; - - uniV2pathFinder(overrides?: CallOverrides): Promise; - - uniV3adapter(overrides?: CallOverrides): Promise; - - uniV3mock(overrides?: CallOverrides): Promise; - - uniV3pathFinder(overrides?: CallOverrides): Promise; - - yearnAdapter(overrides?: CallOverrides): Promise; - - yearnMock(overrides?: CallOverrides): Promise; - - yearnPathFinder(overrides?: CallOverrides): Promise; - - callStatic: { - IS_TEST(overrides?: CallOverrides): Promise; - - _setUpCurve( - withUnderlyings: boolean, - overrides?: CallOverrides - ): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - curveAdapter(overrides?: CallOverrides): Promise; - - curveLPPathFinder(overrides?: CallOverrides): Promise; - - curveMetaAdapter(overrides?: CallOverrides): Promise; - - curvePathFinder(overrides?: CallOverrides): Promise; - - curveV1MetaMock(overrides?: CallOverrides): Promise; - - curveV1Mock(overrides?: CallOverrides): Promise; - - failed(overrides?: CallOverrides): Promise; - - setUp(overrides?: CallOverrides): Promise; - - test_PUV2_01_setGasUsage_correctly_sets_values( - overrides?: CallOverrides - ): Promise; - - test_PUV2_02_getBestDirectPairSwap_returns_correct_swapQuote_ZERO( - overrides?: CallOverrides - ): Promise; - - test_PUV2_03_getBestDirectPairSwap_returns_correct_swapQuote_INPUT( - amountIn: BigNumberish, - daiWethRate: BigNumberish, - slippage: BigNumberish, - isAll: boolean, - externalSlippage: boolean, - overrides?: CallOverrides - ): Promise; - - test_PUV2_04_getBestDirectPairSwap_returns_correct_swapQuote_OUTPUT( - amountOut: BigNumberish, - daiWethRate: BigNumberish, - slippage: BigNumberish, - externalSlippage: boolean, - overrides?: CallOverrides - ): Promise; - - test_PUV2_05_getBestConnectorSwap_returns_correct_swapQuote_INPUT( - amountIn: BigNumberish, - bestConnector: BigNumberish, - slippage: BigNumberish, - isAll: boolean, - externalSlippage: boolean, - overrides?: CallOverrides - ): Promise; - - test_PUV2_06_getBestConnectorSwap_returns_correct_swapQuote_INPUT( - amountOut: BigNumberish, - bestConnector: BigNumberish, - slippage: BigNumberish, - externalSlippage: boolean, - overrides?: CallOverrides - ): Promise; - - tokenMasksMap(arg0: string, overrides?: CallOverrides): Promise; - - underlying(overrides?: CallOverrides): Promise; - - uniV2adapter(overrides?: CallOverrides): Promise; - - uniV2mock(overrides?: CallOverrides): Promise; - - uniV2pathFinder(overrides?: CallOverrides): Promise; - - uniV3adapter(overrides?: CallOverrides): Promise; - - uniV3mock(overrides?: CallOverrides): Promise; - - uniV3pathFinder(overrides?: CallOverrides): Promise; - - yearnAdapter(overrides?: CallOverrides): Promise; - - yearnMock(overrides?: CallOverrides): Promise; - - yearnPathFinder(overrides?: CallOverrides): Promise; - }; - - filters: { - "log(string)"(arg0?: null): logEventFilter; - log(arg0?: null): logEventFilter; - - "log_address(address)"(arg0?: null): log_addressEventFilter; - log_address(arg0?: null): log_addressEventFilter; - - "log_bytes(bytes)"(arg0?: null): log_bytesEventFilter; - log_bytes(arg0?: null): log_bytesEventFilter; - - "log_bytes32(bytes32)"(arg0?: null): log_bytes32EventFilter; - log_bytes32(arg0?: null): log_bytes32EventFilter; - - "log_int(int256)"(arg0?: null): log_intEventFilter; - log_int(arg0?: null): log_intEventFilter; - - "log_named_address(string,address)"( - key?: null, - val?: null - ): log_named_addressEventFilter; - log_named_address(key?: null, val?: null): log_named_addressEventFilter; - - "log_named_bytes(string,bytes)"( - key?: null, - val?: null - ): log_named_bytesEventFilter; - log_named_bytes(key?: null, val?: null): log_named_bytesEventFilter; - - "log_named_bytes32(string,bytes32)"( - key?: null, - val?: null - ): log_named_bytes32EventFilter; - log_named_bytes32(key?: null, val?: null): log_named_bytes32EventFilter; - - "log_named_decimal_int(string,int256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - log_named_decimal_int( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - - "log_named_decimal_uint(string,uint256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - log_named_decimal_uint( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - - "log_named_int(string,int256)"( - key?: null, - val?: null - ): log_named_intEventFilter; - log_named_int(key?: null, val?: null): log_named_intEventFilter; - - "log_named_string(string,string)"( - key?: null, - val?: null - ): log_named_stringEventFilter; - log_named_string(key?: null, val?: null): log_named_stringEventFilter; - - "log_named_uint(string,uint256)"( - key?: null, - val?: null - ): log_named_uintEventFilter; - log_named_uint(key?: null, val?: null): log_named_uintEventFilter; - - "log_string(string)"(arg0?: null): log_stringEventFilter; - log_string(arg0?: null): log_stringEventFilter; - - "log_uint(uint256)"(arg0?: null): log_uintEventFilter; - log_uint(arg0?: null): log_uintEventFilter; - - "logs(bytes)"(arg0?: null): logsEventFilter; - logs(arg0?: null): logsEventFilter; - }; - - estimateGas: { - IS_TEST(overrides?: CallOverrides): Promise; - - _setUpCurve( - withUnderlyings: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - curveAdapter(overrides?: CallOverrides): Promise; - - curveLPPathFinder(overrides?: CallOverrides): Promise; - - curveMetaAdapter(overrides?: CallOverrides): Promise; - - curvePathFinder(overrides?: CallOverrides): Promise; - - curveV1MetaMock(overrides?: CallOverrides): Promise; - - curveV1Mock(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PUV2_01_setGasUsage_correctly_sets_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PUV2_02_getBestDirectPairSwap_returns_correct_swapQuote_ZERO( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PUV2_03_getBestDirectPairSwap_returns_correct_swapQuote_INPUT( - amountIn: BigNumberish, - daiWethRate: BigNumberish, - slippage: BigNumberish, - isAll: boolean, - externalSlippage: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PUV2_04_getBestDirectPairSwap_returns_correct_swapQuote_OUTPUT( - amountOut: BigNumberish, - daiWethRate: BigNumberish, - slippage: BigNumberish, - externalSlippage: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PUV2_05_getBestConnectorSwap_returns_correct_swapQuote_INPUT( - amountIn: BigNumberish, - bestConnector: BigNumberish, - slippage: BigNumberish, - isAll: boolean, - externalSlippage: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PUV2_06_getBestConnectorSwap_returns_correct_swapQuote_INPUT( - amountOut: BigNumberish, - bestConnector: BigNumberish, - slippage: BigNumberish, - externalSlippage: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - tokenMasksMap(arg0: string, overrides?: CallOverrides): Promise; - - underlying(overrides?: CallOverrides): Promise; - - uniV2adapter(overrides?: CallOverrides): Promise; - - uniV2mock(overrides?: CallOverrides): Promise; - - uniV2pathFinder(overrides?: CallOverrides): Promise; - - uniV3adapter(overrides?: CallOverrides): Promise; - - uniV3mock(overrides?: CallOverrides): Promise; - - uniV3pathFinder(overrides?: CallOverrides): Promise; - - yearnAdapter(overrides?: CallOverrides): Promise; - - yearnMock(overrides?: CallOverrides): Promise; - - yearnPathFinder(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - IS_TEST(overrides?: CallOverrides): Promise; - - _setUpCurve( - withUnderlyings: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator( - overrides?: CallOverrides - ): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - curveAdapter(overrides?: CallOverrides): Promise; - - curveLPPathFinder(overrides?: CallOverrides): Promise; - - curveMetaAdapter(overrides?: CallOverrides): Promise; - - curvePathFinder(overrides?: CallOverrides): Promise; - - curveV1MetaMock(overrides?: CallOverrides): Promise; - - curveV1Mock(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PUV2_01_setGasUsage_correctly_sets_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PUV2_02_getBestDirectPairSwap_returns_correct_swapQuote_ZERO( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PUV2_03_getBestDirectPairSwap_returns_correct_swapQuote_INPUT( - amountIn: BigNumberish, - daiWethRate: BigNumberish, - slippage: BigNumberish, - isAll: boolean, - externalSlippage: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PUV2_04_getBestDirectPairSwap_returns_correct_swapQuote_OUTPUT( - amountOut: BigNumberish, - daiWethRate: BigNumberish, - slippage: BigNumberish, - externalSlippage: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PUV2_05_getBestConnectorSwap_returns_correct_swapQuote_INPUT( - amountIn: BigNumberish, - bestConnector: BigNumberish, - slippage: BigNumberish, - isAll: boolean, - externalSlippage: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PUV2_06_getBestConnectorSwap_returns_correct_swapQuote_INPUT( - amountOut: BigNumberish, - bestConnector: BigNumberish, - slippage: BigNumberish, - externalSlippage: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - tokenMasksMap( - arg0: string, - overrides?: CallOverrides - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - - uniV2adapter(overrides?: CallOverrides): Promise; - - uniV2mock(overrides?: CallOverrides): Promise; - - uniV2pathFinder(overrides?: CallOverrides): Promise; - - uniV3adapter(overrides?: CallOverrides): Promise; - - uniV3mock(overrides?: CallOverrides): Promise; - - uniV3pathFinder(overrides?: CallOverrides): Promise; - - yearnAdapter(overrides?: CallOverrides): Promise; - - yearnMock(overrides?: CallOverrides): Promise; - - yearnPathFinder(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/test/pathfinder/UniswapV2PathFinder.t.sol/index.ts b/src/types/contracts/test/pathfinder/UniswapV2PathFinder.t.sol/index.ts deleted file mode 100644 index 836b95a8..00000000 --- a/src/types/contracts/test/pathfinder/UniswapV2PathFinder.t.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { UniswapV2PathFinderTest } from "./UniswapV2PathFinderTest"; diff --git a/src/types/contracts/test/pathfinder/UniswapV3PathFinder.t.sol/UniswapV3PathFinderTest.ts b/src/types/contracts/test/pathfinder/UniswapV3PathFinder.t.sol/UniswapV3PathFinderTest.ts deleted file mode 100644 index 33728af3..00000000 --- a/src/types/contracts/test/pathfinder/UniswapV3PathFinder.t.sol/UniswapV3PathFinderTest.ts +++ /dev/null @@ -1,1142 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface UniswapV3PathFinderTestInterface extends utils.Interface { - functions: { - "IS_TEST()": FunctionFragment; - "_setUpCurve(bool)": FunctionFragment; - "cft()": FunctionFragment; - "creditConfigurator()": FunctionFragment; - "creditFacade()": FunctionFragment; - "creditManager()": FunctionFragment; - "curveAdapter()": FunctionFragment; - "curveLPPathFinder()": FunctionFragment; - "curveMetaAdapter()": FunctionFragment; - "curvePathFinder()": FunctionFragment; - "curveV1MetaMock()": FunctionFragment; - "curveV1Mock()": FunctionFragment; - "failed()": FunctionFragment; - "setUp()": FunctionFragment; - "test_PUV3_01_setGasUsage_correctly_sets_values()": FunctionFragment; - "test_PUV3_02_getBestDirectPairSwap_returns_correct_swapQuote_ZERO()": FunctionFragment; - "test_PUV3_03_getBestDirectPairSwap_returns_correct_swapQuote_INPUT(uint256,uint16,uint16,uint8,bool,bool)": FunctionFragment; - "test_PUV3_04_getBestDirectPairSwap_returns_correct_swapQuote_OUTPUT(uint256,uint16,uint8,uint16,bool)": FunctionFragment; - "test_PUV3_05_getBestConnectorSwap_returns_correct_swapQuote_INPUT(uint256,uint8,uint8,uint16,bool,bool)": FunctionFragment; - "test_PUV3_06_getBestConnectorSwap_returns_correct_swapQuote_OUTPUT(uint256,uint8,uint8,uint16,bool)": FunctionFragment; - "tokenMasksMap(address)": FunctionFragment; - "underlying()": FunctionFragment; - "uniV2adapter()": FunctionFragment; - "uniV2mock()": FunctionFragment; - "uniV2pathFinder()": FunctionFragment; - "uniV3adapter()": FunctionFragment; - "uniV3mock()": FunctionFragment; - "uniV3pathFinder()": FunctionFragment; - "yearnAdapter()": FunctionFragment; - "yearnMock()": FunctionFragment; - "yearnPathFinder()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "IS_TEST" - | "_setUpCurve" - | "cft" - | "creditConfigurator" - | "creditFacade" - | "creditManager" - | "curveAdapter" - | "curveLPPathFinder" - | "curveMetaAdapter" - | "curvePathFinder" - | "curveV1MetaMock" - | "curveV1Mock" - | "failed" - | "setUp" - | "test_PUV3_01_setGasUsage_correctly_sets_values" - | "test_PUV3_02_getBestDirectPairSwap_returns_correct_swapQuote_ZERO" - | "test_PUV3_03_getBestDirectPairSwap_returns_correct_swapQuote_INPUT" - | "test_PUV3_04_getBestDirectPairSwap_returns_correct_swapQuote_OUTPUT" - | "test_PUV3_05_getBestConnectorSwap_returns_correct_swapQuote_INPUT" - | "test_PUV3_06_getBestConnectorSwap_returns_correct_swapQuote_OUTPUT" - | "tokenMasksMap" - | "underlying" - | "uniV2adapter" - | "uniV2mock" - | "uniV2pathFinder" - | "uniV3adapter" - | "uniV3mock" - | "uniV3pathFinder" - | "yearnAdapter" - | "yearnMock" - | "yearnPathFinder" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "IS_TEST", values?: undefined): string; - encodeFunctionData( - functionFragment: "_setUpCurve", - values: [boolean] - ): string; - encodeFunctionData(functionFragment: "cft", values?: undefined): string; - encodeFunctionData( - functionFragment: "creditConfigurator", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditFacade", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditManager", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "curveAdapter", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "curveLPPathFinder", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "curveMetaAdapter", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "curvePathFinder", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "curveV1MetaMock", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "curveV1Mock", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "failed", values?: undefined): string; - encodeFunctionData(functionFragment: "setUp", values?: undefined): string; - encodeFunctionData( - functionFragment: "test_PUV3_01_setGasUsage_correctly_sets_values", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_PUV3_02_getBestDirectPairSwap_returns_correct_swapQuote_ZERO", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_PUV3_03_getBestDirectPairSwap_returns_correct_swapQuote_INPUT", - values: [ - BigNumberish, - BigNumberish, - BigNumberish, - BigNumberish, - boolean, - boolean - ] - ): string; - encodeFunctionData( - functionFragment: "test_PUV3_04_getBestDirectPairSwap_returns_correct_swapQuote_OUTPUT", - values: [BigNumberish, BigNumberish, BigNumberish, BigNumberish, boolean] - ): string; - encodeFunctionData( - functionFragment: "test_PUV3_05_getBestConnectorSwap_returns_correct_swapQuote_INPUT", - values: [ - BigNumberish, - BigNumberish, - BigNumberish, - BigNumberish, - boolean, - boolean - ] - ): string; - encodeFunctionData( - functionFragment: "test_PUV3_06_getBestConnectorSwap_returns_correct_swapQuote_OUTPUT", - values: [BigNumberish, BigNumberish, BigNumberish, BigNumberish, boolean] - ): string; - encodeFunctionData( - functionFragment: "tokenMasksMap", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "underlying", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "uniV2adapter", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "uniV2mock", values?: undefined): string; - encodeFunctionData( - functionFragment: "uniV2pathFinder", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "uniV3adapter", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "uniV3mock", values?: undefined): string; - encodeFunctionData( - functionFragment: "uniV3pathFinder", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "yearnAdapter", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "yearnMock", values?: undefined): string; - encodeFunctionData( - functionFragment: "yearnPathFinder", - values?: undefined - ): string; - - decodeFunctionResult(functionFragment: "IS_TEST", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "_setUpCurve", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "cft", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "creditConfigurator", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditFacade", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditManager", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "curveAdapter", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "curveLPPathFinder", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "curveMetaAdapter", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "curvePathFinder", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "curveV1MetaMock", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "curveV1Mock", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "failed", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "setUp", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "test_PUV3_01_setGasUsage_correctly_sets_values", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_PUV3_02_getBestDirectPairSwap_returns_correct_swapQuote_ZERO", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_PUV3_03_getBestDirectPairSwap_returns_correct_swapQuote_INPUT", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_PUV3_04_getBestDirectPairSwap_returns_correct_swapQuote_OUTPUT", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_PUV3_05_getBestConnectorSwap_returns_correct_swapQuote_INPUT", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_PUV3_06_getBestConnectorSwap_returns_correct_swapQuote_OUTPUT", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "tokenMasksMap", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "underlying", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "uniV2adapter", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "uniV2mock", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "uniV2pathFinder", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "uniV3adapter", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "uniV3mock", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "uniV3pathFinder", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "yearnAdapter", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "yearnMock", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "yearnPathFinder", - data: BytesLike - ): Result; - - events: { - "log(string)": EventFragment; - "log_address(address)": EventFragment; - "log_bytes(bytes)": EventFragment; - "log_bytes32(bytes32)": EventFragment; - "log_int(int256)": EventFragment; - "log_named_address(string,address)": EventFragment; - "log_named_bytes(string,bytes)": EventFragment; - "log_named_bytes32(string,bytes32)": EventFragment; - "log_named_decimal_int(string,int256,uint256)": EventFragment; - "log_named_decimal_uint(string,uint256,uint256)": EventFragment; - "log_named_int(string,int256)": EventFragment; - "log_named_string(string,string)": EventFragment; - "log_named_uint(string,uint256)": EventFragment; - "log_string(string)": EventFragment; - "log_uint(uint256)": EventFragment; - "logs(bytes)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "log"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "logs"): EventFragment; -} - -export interface logEventObject { - arg0: string; -} -export type logEvent = TypedEvent<[string], logEventObject>; - -export type logEventFilter = TypedEventFilter; - -export interface log_addressEventObject { - arg0: string; -} -export type log_addressEvent = TypedEvent<[string], log_addressEventObject>; - -export type log_addressEventFilter = TypedEventFilter; - -export interface log_bytesEventObject { - arg0: string; -} -export type log_bytesEvent = TypedEvent<[string], log_bytesEventObject>; - -export type log_bytesEventFilter = TypedEventFilter; - -export interface log_bytes32EventObject { - arg0: string; -} -export type log_bytes32Event = TypedEvent<[string], log_bytes32EventObject>; - -export type log_bytes32EventFilter = TypedEventFilter; - -export interface log_intEventObject { - arg0: BigNumber; -} -export type log_intEvent = TypedEvent<[BigNumber], log_intEventObject>; - -export type log_intEventFilter = TypedEventFilter; - -export interface log_named_addressEventObject { - key: string; - val: string; -} -export type log_named_addressEvent = TypedEvent< - [string, string], - log_named_addressEventObject ->; - -export type log_named_addressEventFilter = - TypedEventFilter; - -export interface log_named_bytesEventObject { - key: string; - val: string; -} -export type log_named_bytesEvent = TypedEvent< - [string, string], - log_named_bytesEventObject ->; - -export type log_named_bytesEventFilter = TypedEventFilter; - -export interface log_named_bytes32EventObject { - key: string; - val: string; -} -export type log_named_bytes32Event = TypedEvent< - [string, string], - log_named_bytes32EventObject ->; - -export type log_named_bytes32EventFilter = - TypedEventFilter; - -export interface log_named_decimal_intEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_intEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_intEventObject ->; - -export type log_named_decimal_intEventFilter = - TypedEventFilter; - -export interface log_named_decimal_uintEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_uintEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_uintEventObject ->; - -export type log_named_decimal_uintEventFilter = - TypedEventFilter; - -export interface log_named_intEventObject { - key: string; - val: BigNumber; -} -export type log_named_intEvent = TypedEvent< - [string, BigNumber], - log_named_intEventObject ->; - -export type log_named_intEventFilter = TypedEventFilter; - -export interface log_named_stringEventObject { - key: string; - val: string; -} -export type log_named_stringEvent = TypedEvent< - [string, string], - log_named_stringEventObject ->; - -export type log_named_stringEventFilter = - TypedEventFilter; - -export interface log_named_uintEventObject { - key: string; - val: BigNumber; -} -export type log_named_uintEvent = TypedEvent< - [string, BigNumber], - log_named_uintEventObject ->; - -export type log_named_uintEventFilter = TypedEventFilter; - -export interface log_stringEventObject { - arg0: string; -} -export type log_stringEvent = TypedEvent<[string], log_stringEventObject>; - -export type log_stringEventFilter = TypedEventFilter; - -export interface log_uintEventObject { - arg0: BigNumber; -} -export type log_uintEvent = TypedEvent<[BigNumber], log_uintEventObject>; - -export type log_uintEventFilter = TypedEventFilter; - -export interface logsEventObject { - arg0: string; -} -export type logsEvent = TypedEvent<[string], logsEventObject>; - -export type logsEventFilter = TypedEventFilter; - -export interface UniswapV3PathFinderTest extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: UniswapV3PathFinderTestInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - IS_TEST(overrides?: CallOverrides): Promise<[boolean]>; - - _setUpCurve( - withUnderlyings: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - cft(overrides?: CallOverrides): Promise<[string]>; - - creditConfigurator(overrides?: CallOverrides): Promise<[string]>; - - creditFacade(overrides?: CallOverrides): Promise<[string]>; - - creditManager(overrides?: CallOverrides): Promise<[string]>; - - curveAdapter(overrides?: CallOverrides): Promise<[string]>; - - curveLPPathFinder(overrides?: CallOverrides): Promise<[string]>; - - curveMetaAdapter(overrides?: CallOverrides): Promise<[string]>; - - curvePathFinder(overrides?: CallOverrides): Promise<[string]>; - - curveV1MetaMock(overrides?: CallOverrides): Promise<[string]>; - - curveV1Mock(overrides?: CallOverrides): Promise<[string]>; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PUV3_01_setGasUsage_correctly_sets_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PUV3_02_getBestDirectPairSwap_returns_correct_swapQuote_ZERO( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PUV3_03_getBestDirectPairSwap_returns_correct_swapQuote_INPUT( - amountIn: BigNumberish, - daiWethRate: BigNumberish, - slippage: BigNumberish, - feeIndex: BigNumberish, - isAll: boolean, - externalSlippage: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PUV3_04_getBestDirectPairSwap_returns_correct_swapQuote_OUTPUT( - amountOut: BigNumberish, - daiWethRate: BigNumberish, - feeIndex: BigNumberish, - slippage: BigNumberish, - externalSlippage: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PUV3_05_getBestConnectorSwap_returns_correct_swapQuote_INPUT( - amountIn: BigNumberish, - bestConnectorIndex: BigNumberish, - bestPool: BigNumberish, - slippage: BigNumberish, - isAll: boolean, - externalSlippage: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PUV3_06_getBestConnectorSwap_returns_correct_swapQuote_OUTPUT( - amountOut: BigNumberish, - bestConnectorIndex: BigNumberish, - bestPool: BigNumberish, - slippage: BigNumberish, - externalSlippage: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - tokenMasksMap( - arg0: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - underlying(overrides?: CallOverrides): Promise<[string]>; - - uniV2adapter(overrides?: CallOverrides): Promise<[string]>; - - uniV2mock(overrides?: CallOverrides): Promise<[string]>; - - uniV2pathFinder(overrides?: CallOverrides): Promise<[string]>; - - uniV3adapter(overrides?: CallOverrides): Promise<[string]>; - - uniV3mock(overrides?: CallOverrides): Promise<[string]>; - - uniV3pathFinder(overrides?: CallOverrides): Promise<[string]>; - - yearnAdapter(overrides?: CallOverrides): Promise<[string]>; - - yearnMock(overrides?: CallOverrides): Promise<[string]>; - - yearnPathFinder(overrides?: CallOverrides): Promise<[string]>; - }; - - IS_TEST(overrides?: CallOverrides): Promise; - - _setUpCurve( - withUnderlyings: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - curveAdapter(overrides?: CallOverrides): Promise; - - curveLPPathFinder(overrides?: CallOverrides): Promise; - - curveMetaAdapter(overrides?: CallOverrides): Promise; - - curvePathFinder(overrides?: CallOverrides): Promise; - - curveV1MetaMock(overrides?: CallOverrides): Promise; - - curveV1Mock(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PUV3_01_setGasUsage_correctly_sets_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PUV3_02_getBestDirectPairSwap_returns_correct_swapQuote_ZERO( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PUV3_03_getBestDirectPairSwap_returns_correct_swapQuote_INPUT( - amountIn: BigNumberish, - daiWethRate: BigNumberish, - slippage: BigNumberish, - feeIndex: BigNumberish, - isAll: boolean, - externalSlippage: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PUV3_04_getBestDirectPairSwap_returns_correct_swapQuote_OUTPUT( - amountOut: BigNumberish, - daiWethRate: BigNumberish, - feeIndex: BigNumberish, - slippage: BigNumberish, - externalSlippage: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PUV3_05_getBestConnectorSwap_returns_correct_swapQuote_INPUT( - amountIn: BigNumberish, - bestConnectorIndex: BigNumberish, - bestPool: BigNumberish, - slippage: BigNumberish, - isAll: boolean, - externalSlippage: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PUV3_06_getBestConnectorSwap_returns_correct_swapQuote_OUTPUT( - amountOut: BigNumberish, - bestConnectorIndex: BigNumberish, - bestPool: BigNumberish, - slippage: BigNumberish, - externalSlippage: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - tokenMasksMap(arg0: string, overrides?: CallOverrides): Promise; - - underlying(overrides?: CallOverrides): Promise; - - uniV2adapter(overrides?: CallOverrides): Promise; - - uniV2mock(overrides?: CallOverrides): Promise; - - uniV2pathFinder(overrides?: CallOverrides): Promise; - - uniV3adapter(overrides?: CallOverrides): Promise; - - uniV3mock(overrides?: CallOverrides): Promise; - - uniV3pathFinder(overrides?: CallOverrides): Promise; - - yearnAdapter(overrides?: CallOverrides): Promise; - - yearnMock(overrides?: CallOverrides): Promise; - - yearnPathFinder(overrides?: CallOverrides): Promise; - - callStatic: { - IS_TEST(overrides?: CallOverrides): Promise; - - _setUpCurve( - withUnderlyings: boolean, - overrides?: CallOverrides - ): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - curveAdapter(overrides?: CallOverrides): Promise; - - curveLPPathFinder(overrides?: CallOverrides): Promise; - - curveMetaAdapter(overrides?: CallOverrides): Promise; - - curvePathFinder(overrides?: CallOverrides): Promise; - - curveV1MetaMock(overrides?: CallOverrides): Promise; - - curveV1Mock(overrides?: CallOverrides): Promise; - - failed(overrides?: CallOverrides): Promise; - - setUp(overrides?: CallOverrides): Promise; - - test_PUV3_01_setGasUsage_correctly_sets_values( - overrides?: CallOverrides - ): Promise; - - test_PUV3_02_getBestDirectPairSwap_returns_correct_swapQuote_ZERO( - overrides?: CallOverrides - ): Promise; - - test_PUV3_03_getBestDirectPairSwap_returns_correct_swapQuote_INPUT( - amountIn: BigNumberish, - daiWethRate: BigNumberish, - slippage: BigNumberish, - feeIndex: BigNumberish, - isAll: boolean, - externalSlippage: boolean, - overrides?: CallOverrides - ): Promise; - - test_PUV3_04_getBestDirectPairSwap_returns_correct_swapQuote_OUTPUT( - amountOut: BigNumberish, - daiWethRate: BigNumberish, - feeIndex: BigNumberish, - slippage: BigNumberish, - externalSlippage: boolean, - overrides?: CallOverrides - ): Promise; - - test_PUV3_05_getBestConnectorSwap_returns_correct_swapQuote_INPUT( - amountIn: BigNumberish, - bestConnectorIndex: BigNumberish, - bestPool: BigNumberish, - slippage: BigNumberish, - isAll: boolean, - externalSlippage: boolean, - overrides?: CallOverrides - ): Promise; - - test_PUV3_06_getBestConnectorSwap_returns_correct_swapQuote_OUTPUT( - amountOut: BigNumberish, - bestConnectorIndex: BigNumberish, - bestPool: BigNumberish, - slippage: BigNumberish, - externalSlippage: boolean, - overrides?: CallOverrides - ): Promise; - - tokenMasksMap(arg0: string, overrides?: CallOverrides): Promise; - - underlying(overrides?: CallOverrides): Promise; - - uniV2adapter(overrides?: CallOverrides): Promise; - - uniV2mock(overrides?: CallOverrides): Promise; - - uniV2pathFinder(overrides?: CallOverrides): Promise; - - uniV3adapter(overrides?: CallOverrides): Promise; - - uniV3mock(overrides?: CallOverrides): Promise; - - uniV3pathFinder(overrides?: CallOverrides): Promise; - - yearnAdapter(overrides?: CallOverrides): Promise; - - yearnMock(overrides?: CallOverrides): Promise; - - yearnPathFinder(overrides?: CallOverrides): Promise; - }; - - filters: { - "log(string)"(arg0?: null): logEventFilter; - log(arg0?: null): logEventFilter; - - "log_address(address)"(arg0?: null): log_addressEventFilter; - log_address(arg0?: null): log_addressEventFilter; - - "log_bytes(bytes)"(arg0?: null): log_bytesEventFilter; - log_bytes(arg0?: null): log_bytesEventFilter; - - "log_bytes32(bytes32)"(arg0?: null): log_bytes32EventFilter; - log_bytes32(arg0?: null): log_bytes32EventFilter; - - "log_int(int256)"(arg0?: null): log_intEventFilter; - log_int(arg0?: null): log_intEventFilter; - - "log_named_address(string,address)"( - key?: null, - val?: null - ): log_named_addressEventFilter; - log_named_address(key?: null, val?: null): log_named_addressEventFilter; - - "log_named_bytes(string,bytes)"( - key?: null, - val?: null - ): log_named_bytesEventFilter; - log_named_bytes(key?: null, val?: null): log_named_bytesEventFilter; - - "log_named_bytes32(string,bytes32)"( - key?: null, - val?: null - ): log_named_bytes32EventFilter; - log_named_bytes32(key?: null, val?: null): log_named_bytes32EventFilter; - - "log_named_decimal_int(string,int256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - log_named_decimal_int( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - - "log_named_decimal_uint(string,uint256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - log_named_decimal_uint( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - - "log_named_int(string,int256)"( - key?: null, - val?: null - ): log_named_intEventFilter; - log_named_int(key?: null, val?: null): log_named_intEventFilter; - - "log_named_string(string,string)"( - key?: null, - val?: null - ): log_named_stringEventFilter; - log_named_string(key?: null, val?: null): log_named_stringEventFilter; - - "log_named_uint(string,uint256)"( - key?: null, - val?: null - ): log_named_uintEventFilter; - log_named_uint(key?: null, val?: null): log_named_uintEventFilter; - - "log_string(string)"(arg0?: null): log_stringEventFilter; - log_string(arg0?: null): log_stringEventFilter; - - "log_uint(uint256)"(arg0?: null): log_uintEventFilter; - log_uint(arg0?: null): log_uintEventFilter; - - "logs(bytes)"(arg0?: null): logsEventFilter; - logs(arg0?: null): logsEventFilter; - }; - - estimateGas: { - IS_TEST(overrides?: CallOverrides): Promise; - - _setUpCurve( - withUnderlyings: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - curveAdapter(overrides?: CallOverrides): Promise; - - curveLPPathFinder(overrides?: CallOverrides): Promise; - - curveMetaAdapter(overrides?: CallOverrides): Promise; - - curvePathFinder(overrides?: CallOverrides): Promise; - - curveV1MetaMock(overrides?: CallOverrides): Promise; - - curveV1Mock(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PUV3_01_setGasUsage_correctly_sets_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PUV3_02_getBestDirectPairSwap_returns_correct_swapQuote_ZERO( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PUV3_03_getBestDirectPairSwap_returns_correct_swapQuote_INPUT( - amountIn: BigNumberish, - daiWethRate: BigNumberish, - slippage: BigNumberish, - feeIndex: BigNumberish, - isAll: boolean, - externalSlippage: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PUV3_04_getBestDirectPairSwap_returns_correct_swapQuote_OUTPUT( - amountOut: BigNumberish, - daiWethRate: BigNumberish, - feeIndex: BigNumberish, - slippage: BigNumberish, - externalSlippage: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PUV3_05_getBestConnectorSwap_returns_correct_swapQuote_INPUT( - amountIn: BigNumberish, - bestConnectorIndex: BigNumberish, - bestPool: BigNumberish, - slippage: BigNumberish, - isAll: boolean, - externalSlippage: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PUV3_06_getBestConnectorSwap_returns_correct_swapQuote_OUTPUT( - amountOut: BigNumberish, - bestConnectorIndex: BigNumberish, - bestPool: BigNumberish, - slippage: BigNumberish, - externalSlippage: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - tokenMasksMap(arg0: string, overrides?: CallOverrides): Promise; - - underlying(overrides?: CallOverrides): Promise; - - uniV2adapter(overrides?: CallOverrides): Promise; - - uniV2mock(overrides?: CallOverrides): Promise; - - uniV2pathFinder(overrides?: CallOverrides): Promise; - - uniV3adapter(overrides?: CallOverrides): Promise; - - uniV3mock(overrides?: CallOverrides): Promise; - - uniV3pathFinder(overrides?: CallOverrides): Promise; - - yearnAdapter(overrides?: CallOverrides): Promise; - - yearnMock(overrides?: CallOverrides): Promise; - - yearnPathFinder(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - IS_TEST(overrides?: CallOverrides): Promise; - - _setUpCurve( - withUnderlyings: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator( - overrides?: CallOverrides - ): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - curveAdapter(overrides?: CallOverrides): Promise; - - curveLPPathFinder(overrides?: CallOverrides): Promise; - - curveMetaAdapter(overrides?: CallOverrides): Promise; - - curvePathFinder(overrides?: CallOverrides): Promise; - - curveV1MetaMock(overrides?: CallOverrides): Promise; - - curveV1Mock(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PUV3_01_setGasUsage_correctly_sets_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PUV3_02_getBestDirectPairSwap_returns_correct_swapQuote_ZERO( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PUV3_03_getBestDirectPairSwap_returns_correct_swapQuote_INPUT( - amountIn: BigNumberish, - daiWethRate: BigNumberish, - slippage: BigNumberish, - feeIndex: BigNumberish, - isAll: boolean, - externalSlippage: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PUV3_04_getBestDirectPairSwap_returns_correct_swapQuote_OUTPUT( - amountOut: BigNumberish, - daiWethRate: BigNumberish, - feeIndex: BigNumberish, - slippage: BigNumberish, - externalSlippage: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PUV3_05_getBestConnectorSwap_returns_correct_swapQuote_INPUT( - amountIn: BigNumberish, - bestConnectorIndex: BigNumberish, - bestPool: BigNumberish, - slippage: BigNumberish, - isAll: boolean, - externalSlippage: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PUV3_06_getBestConnectorSwap_returns_correct_swapQuote_OUTPUT( - amountOut: BigNumberish, - bestConnectorIndex: BigNumberish, - bestPool: BigNumberish, - slippage: BigNumberish, - externalSlippage: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - tokenMasksMap( - arg0: string, - overrides?: CallOverrides - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - - uniV2adapter(overrides?: CallOverrides): Promise; - - uniV2mock(overrides?: CallOverrides): Promise; - - uniV2pathFinder(overrides?: CallOverrides): Promise; - - uniV3adapter(overrides?: CallOverrides): Promise; - - uniV3mock(overrides?: CallOverrides): Promise; - - uniV3pathFinder(overrides?: CallOverrides): Promise; - - yearnAdapter(overrides?: CallOverrides): Promise; - - yearnMock(overrides?: CallOverrides): Promise; - - yearnPathFinder(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/test/pathfinder/UniswapV3PathFinder.t.sol/index.ts b/src/types/contracts/test/pathfinder/UniswapV3PathFinder.t.sol/index.ts deleted file mode 100644 index 5a24222a..00000000 --- a/src/types/contracts/test/pathfinder/UniswapV3PathFinder.t.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { UniswapV3PathFinderTest } from "./UniswapV3PathFinderTest"; diff --git a/src/types/contracts/test/pathfinder/YearnPathFinder.t.sol/YearnPathFinderTest.ts b/src/types/contracts/test/pathfinder/YearnPathFinder.t.sol/YearnPathFinderTest.ts deleted file mode 100644 index 8554382d..00000000 --- a/src/types/contracts/test/pathfinder/YearnPathFinder.t.sol/YearnPathFinderTest.ts +++ /dev/null @@ -1,927 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface YearnPathFinderTestInterface extends utils.Interface { - functions: { - "IS_TEST()": FunctionFragment; - "_setUpCurve(bool)": FunctionFragment; - "cft()": FunctionFragment; - "creditConfigurator()": FunctionFragment; - "creditFacade()": FunctionFragment; - "creditManager()": FunctionFragment; - "curveAdapter()": FunctionFragment; - "curveLPPathFinder()": FunctionFragment; - "curveMetaAdapter()": FunctionFragment; - "curvePathFinder()": FunctionFragment; - "curveV1MetaMock()": FunctionFragment; - "curveV1Mock()": FunctionFragment; - "failed()": FunctionFragment; - "setUp()": FunctionFragment; - "test_YPF_01_filterYearnAdapters_finds_yearn_adapters_only()": FunctionFragment; - "test_YPF_02_estimateWithdraw_coverts_withfdraw_correctly()": FunctionFragment; - "test_YPF_03_withdrawAll_works_correctly()": FunctionFragment; - "tokenMasksMap(address)": FunctionFragment; - "underlying()": FunctionFragment; - "uniV2adapter()": FunctionFragment; - "uniV2mock()": FunctionFragment; - "uniV2pathFinder()": FunctionFragment; - "uniV3adapter()": FunctionFragment; - "uniV3mock()": FunctionFragment; - "uniV3pathFinder()": FunctionFragment; - "yearnAdapter()": FunctionFragment; - "yearnMock()": FunctionFragment; - "yearnPathFinder()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "IS_TEST" - | "_setUpCurve" - | "cft" - | "creditConfigurator" - | "creditFacade" - | "creditManager" - | "curveAdapter" - | "curveLPPathFinder" - | "curveMetaAdapter" - | "curvePathFinder" - | "curveV1MetaMock" - | "curveV1Mock" - | "failed" - | "setUp" - | "test_YPF_01_filterYearnAdapters_finds_yearn_adapters_only" - | "test_YPF_02_estimateWithdraw_coverts_withfdraw_correctly" - | "test_YPF_03_withdrawAll_works_correctly" - | "tokenMasksMap" - | "underlying" - | "uniV2adapter" - | "uniV2mock" - | "uniV2pathFinder" - | "uniV3adapter" - | "uniV3mock" - | "uniV3pathFinder" - | "yearnAdapter" - | "yearnMock" - | "yearnPathFinder" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "IS_TEST", values?: undefined): string; - encodeFunctionData( - functionFragment: "_setUpCurve", - values: [boolean] - ): string; - encodeFunctionData(functionFragment: "cft", values?: undefined): string; - encodeFunctionData( - functionFragment: "creditConfigurator", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditFacade", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditManager", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "curveAdapter", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "curveLPPathFinder", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "curveMetaAdapter", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "curvePathFinder", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "curveV1MetaMock", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "curveV1Mock", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "failed", values?: undefined): string; - encodeFunctionData(functionFragment: "setUp", values?: undefined): string; - encodeFunctionData( - functionFragment: "test_YPF_01_filterYearnAdapters_finds_yearn_adapters_only", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_YPF_02_estimateWithdraw_coverts_withfdraw_correctly", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_YPF_03_withdrawAll_works_correctly", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "tokenMasksMap", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "underlying", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "uniV2adapter", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "uniV2mock", values?: undefined): string; - encodeFunctionData( - functionFragment: "uniV2pathFinder", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "uniV3adapter", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "uniV3mock", values?: undefined): string; - encodeFunctionData( - functionFragment: "uniV3pathFinder", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "yearnAdapter", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "yearnMock", values?: undefined): string; - encodeFunctionData( - functionFragment: "yearnPathFinder", - values?: undefined - ): string; - - decodeFunctionResult(functionFragment: "IS_TEST", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "_setUpCurve", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "cft", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "creditConfigurator", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditFacade", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditManager", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "curveAdapter", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "curveLPPathFinder", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "curveMetaAdapter", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "curvePathFinder", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "curveV1MetaMock", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "curveV1Mock", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "failed", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "setUp", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "test_YPF_01_filterYearnAdapters_finds_yearn_adapters_only", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_YPF_02_estimateWithdraw_coverts_withfdraw_correctly", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_YPF_03_withdrawAll_works_correctly", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "tokenMasksMap", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "underlying", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "uniV2adapter", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "uniV2mock", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "uniV2pathFinder", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "uniV3adapter", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "uniV3mock", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "uniV3pathFinder", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "yearnAdapter", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "yearnMock", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "yearnPathFinder", - data: BytesLike - ): Result; - - events: { - "log(string)": EventFragment; - "log_address(address)": EventFragment; - "log_bytes(bytes)": EventFragment; - "log_bytes32(bytes32)": EventFragment; - "log_int(int256)": EventFragment; - "log_named_address(string,address)": EventFragment; - "log_named_bytes(string,bytes)": EventFragment; - "log_named_bytes32(string,bytes32)": EventFragment; - "log_named_decimal_int(string,int256,uint256)": EventFragment; - "log_named_decimal_uint(string,uint256,uint256)": EventFragment; - "log_named_int(string,int256)": EventFragment; - "log_named_string(string,string)": EventFragment; - "log_named_uint(string,uint256)": EventFragment; - "log_string(string)": EventFragment; - "log_uint(uint256)": EventFragment; - "logs(bytes)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "log"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "logs"): EventFragment; -} - -export interface logEventObject { - arg0: string; -} -export type logEvent = TypedEvent<[string], logEventObject>; - -export type logEventFilter = TypedEventFilter; - -export interface log_addressEventObject { - arg0: string; -} -export type log_addressEvent = TypedEvent<[string], log_addressEventObject>; - -export type log_addressEventFilter = TypedEventFilter; - -export interface log_bytesEventObject { - arg0: string; -} -export type log_bytesEvent = TypedEvent<[string], log_bytesEventObject>; - -export type log_bytesEventFilter = TypedEventFilter; - -export interface log_bytes32EventObject { - arg0: string; -} -export type log_bytes32Event = TypedEvent<[string], log_bytes32EventObject>; - -export type log_bytes32EventFilter = TypedEventFilter; - -export interface log_intEventObject { - arg0: BigNumber; -} -export type log_intEvent = TypedEvent<[BigNumber], log_intEventObject>; - -export type log_intEventFilter = TypedEventFilter; - -export interface log_named_addressEventObject { - key: string; - val: string; -} -export type log_named_addressEvent = TypedEvent< - [string, string], - log_named_addressEventObject ->; - -export type log_named_addressEventFilter = - TypedEventFilter; - -export interface log_named_bytesEventObject { - key: string; - val: string; -} -export type log_named_bytesEvent = TypedEvent< - [string, string], - log_named_bytesEventObject ->; - -export type log_named_bytesEventFilter = TypedEventFilter; - -export interface log_named_bytes32EventObject { - key: string; - val: string; -} -export type log_named_bytes32Event = TypedEvent< - [string, string], - log_named_bytes32EventObject ->; - -export type log_named_bytes32EventFilter = - TypedEventFilter; - -export interface log_named_decimal_intEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_intEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_intEventObject ->; - -export type log_named_decimal_intEventFilter = - TypedEventFilter; - -export interface log_named_decimal_uintEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_uintEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_uintEventObject ->; - -export type log_named_decimal_uintEventFilter = - TypedEventFilter; - -export interface log_named_intEventObject { - key: string; - val: BigNumber; -} -export type log_named_intEvent = TypedEvent< - [string, BigNumber], - log_named_intEventObject ->; - -export type log_named_intEventFilter = TypedEventFilter; - -export interface log_named_stringEventObject { - key: string; - val: string; -} -export type log_named_stringEvent = TypedEvent< - [string, string], - log_named_stringEventObject ->; - -export type log_named_stringEventFilter = - TypedEventFilter; - -export interface log_named_uintEventObject { - key: string; - val: BigNumber; -} -export type log_named_uintEvent = TypedEvent< - [string, BigNumber], - log_named_uintEventObject ->; - -export type log_named_uintEventFilter = TypedEventFilter; - -export interface log_stringEventObject { - arg0: string; -} -export type log_stringEvent = TypedEvent<[string], log_stringEventObject>; - -export type log_stringEventFilter = TypedEventFilter; - -export interface log_uintEventObject { - arg0: BigNumber; -} -export type log_uintEvent = TypedEvent<[BigNumber], log_uintEventObject>; - -export type log_uintEventFilter = TypedEventFilter; - -export interface logsEventObject { - arg0: string; -} -export type logsEvent = TypedEvent<[string], logsEventObject>; - -export type logsEventFilter = TypedEventFilter; - -export interface YearnPathFinderTest extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: YearnPathFinderTestInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - IS_TEST(overrides?: CallOverrides): Promise<[boolean]>; - - _setUpCurve( - withUnderlyings: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - cft(overrides?: CallOverrides): Promise<[string]>; - - creditConfigurator(overrides?: CallOverrides): Promise<[string]>; - - creditFacade(overrides?: CallOverrides): Promise<[string]>; - - creditManager(overrides?: CallOverrides): Promise<[string]>; - - curveAdapter(overrides?: CallOverrides): Promise<[string]>; - - curveLPPathFinder(overrides?: CallOverrides): Promise<[string]>; - - curveMetaAdapter(overrides?: CallOverrides): Promise<[string]>; - - curvePathFinder(overrides?: CallOverrides): Promise<[string]>; - - curveV1MetaMock(overrides?: CallOverrides): Promise<[string]>; - - curveV1Mock(overrides?: CallOverrides): Promise<[string]>; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_YPF_01_filterYearnAdapters_finds_yearn_adapters_only( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_YPF_02_estimateWithdraw_coverts_withfdraw_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_YPF_03_withdrawAll_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - tokenMasksMap( - arg0: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - underlying(overrides?: CallOverrides): Promise<[string]>; - - uniV2adapter(overrides?: CallOverrides): Promise<[string]>; - - uniV2mock(overrides?: CallOverrides): Promise<[string]>; - - uniV2pathFinder(overrides?: CallOverrides): Promise<[string]>; - - uniV3adapter(overrides?: CallOverrides): Promise<[string]>; - - uniV3mock(overrides?: CallOverrides): Promise<[string]>; - - uniV3pathFinder(overrides?: CallOverrides): Promise<[string]>; - - yearnAdapter(overrides?: CallOverrides): Promise<[string]>; - - yearnMock(overrides?: CallOverrides): Promise<[string]>; - - yearnPathFinder(overrides?: CallOverrides): Promise<[string]>; - }; - - IS_TEST(overrides?: CallOverrides): Promise; - - _setUpCurve( - withUnderlyings: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - curveAdapter(overrides?: CallOverrides): Promise; - - curveLPPathFinder(overrides?: CallOverrides): Promise; - - curveMetaAdapter(overrides?: CallOverrides): Promise; - - curvePathFinder(overrides?: CallOverrides): Promise; - - curveV1MetaMock(overrides?: CallOverrides): Promise; - - curveV1Mock(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_YPF_01_filterYearnAdapters_finds_yearn_adapters_only( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_YPF_02_estimateWithdraw_coverts_withfdraw_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_YPF_03_withdrawAll_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - tokenMasksMap(arg0: string, overrides?: CallOverrides): Promise; - - underlying(overrides?: CallOverrides): Promise; - - uniV2adapter(overrides?: CallOverrides): Promise; - - uniV2mock(overrides?: CallOverrides): Promise; - - uniV2pathFinder(overrides?: CallOverrides): Promise; - - uniV3adapter(overrides?: CallOverrides): Promise; - - uniV3mock(overrides?: CallOverrides): Promise; - - uniV3pathFinder(overrides?: CallOverrides): Promise; - - yearnAdapter(overrides?: CallOverrides): Promise; - - yearnMock(overrides?: CallOverrides): Promise; - - yearnPathFinder(overrides?: CallOverrides): Promise; - - callStatic: { - IS_TEST(overrides?: CallOverrides): Promise; - - _setUpCurve( - withUnderlyings: boolean, - overrides?: CallOverrides - ): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - curveAdapter(overrides?: CallOverrides): Promise; - - curveLPPathFinder(overrides?: CallOverrides): Promise; - - curveMetaAdapter(overrides?: CallOverrides): Promise; - - curvePathFinder(overrides?: CallOverrides): Promise; - - curveV1MetaMock(overrides?: CallOverrides): Promise; - - curveV1Mock(overrides?: CallOverrides): Promise; - - failed(overrides?: CallOverrides): Promise; - - setUp(overrides?: CallOverrides): Promise; - - test_YPF_01_filterYearnAdapters_finds_yearn_adapters_only( - overrides?: CallOverrides - ): Promise; - - test_YPF_02_estimateWithdraw_coverts_withfdraw_correctly( - overrides?: CallOverrides - ): Promise; - - test_YPF_03_withdrawAll_works_correctly( - overrides?: CallOverrides - ): Promise; - - tokenMasksMap(arg0: string, overrides?: CallOverrides): Promise; - - underlying(overrides?: CallOverrides): Promise; - - uniV2adapter(overrides?: CallOverrides): Promise; - - uniV2mock(overrides?: CallOverrides): Promise; - - uniV2pathFinder(overrides?: CallOverrides): Promise; - - uniV3adapter(overrides?: CallOverrides): Promise; - - uniV3mock(overrides?: CallOverrides): Promise; - - uniV3pathFinder(overrides?: CallOverrides): Promise; - - yearnAdapter(overrides?: CallOverrides): Promise; - - yearnMock(overrides?: CallOverrides): Promise; - - yearnPathFinder(overrides?: CallOverrides): Promise; - }; - - filters: { - "log(string)"(arg0?: null): logEventFilter; - log(arg0?: null): logEventFilter; - - "log_address(address)"(arg0?: null): log_addressEventFilter; - log_address(arg0?: null): log_addressEventFilter; - - "log_bytes(bytes)"(arg0?: null): log_bytesEventFilter; - log_bytes(arg0?: null): log_bytesEventFilter; - - "log_bytes32(bytes32)"(arg0?: null): log_bytes32EventFilter; - log_bytes32(arg0?: null): log_bytes32EventFilter; - - "log_int(int256)"(arg0?: null): log_intEventFilter; - log_int(arg0?: null): log_intEventFilter; - - "log_named_address(string,address)"( - key?: null, - val?: null - ): log_named_addressEventFilter; - log_named_address(key?: null, val?: null): log_named_addressEventFilter; - - "log_named_bytes(string,bytes)"( - key?: null, - val?: null - ): log_named_bytesEventFilter; - log_named_bytes(key?: null, val?: null): log_named_bytesEventFilter; - - "log_named_bytes32(string,bytes32)"( - key?: null, - val?: null - ): log_named_bytes32EventFilter; - log_named_bytes32(key?: null, val?: null): log_named_bytes32EventFilter; - - "log_named_decimal_int(string,int256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - log_named_decimal_int( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - - "log_named_decimal_uint(string,uint256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - log_named_decimal_uint( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - - "log_named_int(string,int256)"( - key?: null, - val?: null - ): log_named_intEventFilter; - log_named_int(key?: null, val?: null): log_named_intEventFilter; - - "log_named_string(string,string)"( - key?: null, - val?: null - ): log_named_stringEventFilter; - log_named_string(key?: null, val?: null): log_named_stringEventFilter; - - "log_named_uint(string,uint256)"( - key?: null, - val?: null - ): log_named_uintEventFilter; - log_named_uint(key?: null, val?: null): log_named_uintEventFilter; - - "log_string(string)"(arg0?: null): log_stringEventFilter; - log_string(arg0?: null): log_stringEventFilter; - - "log_uint(uint256)"(arg0?: null): log_uintEventFilter; - log_uint(arg0?: null): log_uintEventFilter; - - "logs(bytes)"(arg0?: null): logsEventFilter; - logs(arg0?: null): logsEventFilter; - }; - - estimateGas: { - IS_TEST(overrides?: CallOverrides): Promise; - - _setUpCurve( - withUnderlyings: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - curveAdapter(overrides?: CallOverrides): Promise; - - curveLPPathFinder(overrides?: CallOverrides): Promise; - - curveMetaAdapter(overrides?: CallOverrides): Promise; - - curvePathFinder(overrides?: CallOverrides): Promise; - - curveV1MetaMock(overrides?: CallOverrides): Promise; - - curveV1Mock(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_YPF_01_filterYearnAdapters_finds_yearn_adapters_only( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_YPF_02_estimateWithdraw_coverts_withfdraw_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_YPF_03_withdrawAll_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - tokenMasksMap(arg0: string, overrides?: CallOverrides): Promise; - - underlying(overrides?: CallOverrides): Promise; - - uniV2adapter(overrides?: CallOverrides): Promise; - - uniV2mock(overrides?: CallOverrides): Promise; - - uniV2pathFinder(overrides?: CallOverrides): Promise; - - uniV3adapter(overrides?: CallOverrides): Promise; - - uniV3mock(overrides?: CallOverrides): Promise; - - uniV3pathFinder(overrides?: CallOverrides): Promise; - - yearnAdapter(overrides?: CallOverrides): Promise; - - yearnMock(overrides?: CallOverrides): Promise; - - yearnPathFinder(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - IS_TEST(overrides?: CallOverrides): Promise; - - _setUpCurve( - withUnderlyings: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator( - overrides?: CallOverrides - ): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - curveAdapter(overrides?: CallOverrides): Promise; - - curveLPPathFinder(overrides?: CallOverrides): Promise; - - curveMetaAdapter(overrides?: CallOverrides): Promise; - - curvePathFinder(overrides?: CallOverrides): Promise; - - curveV1MetaMock(overrides?: CallOverrides): Promise; - - curveV1Mock(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_YPF_01_filterYearnAdapters_finds_yearn_adapters_only( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_YPF_02_estimateWithdraw_coverts_withfdraw_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_YPF_03_withdrawAll_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - tokenMasksMap( - arg0: string, - overrides?: CallOverrides - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - - uniV2adapter(overrides?: CallOverrides): Promise; - - uniV2mock(overrides?: CallOverrides): Promise; - - uniV2pathFinder(overrides?: CallOverrides): Promise; - - uniV3adapter(overrides?: CallOverrides): Promise; - - uniV3mock(overrides?: CallOverrides): Promise; - - uniV3pathFinder(overrides?: CallOverrides): Promise; - - yearnAdapter(overrides?: CallOverrides): Promise; - - yearnMock(overrides?: CallOverrides): Promise; - - yearnPathFinder(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/test/pathfinder/YearnPathFinder.t.sol/index.ts b/src/types/contracts/test/pathfinder/YearnPathFinder.t.sol/index.ts deleted file mode 100644 index a2753fe7..00000000 --- a/src/types/contracts/test/pathfinder/YearnPathFinder.t.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { YearnPathFinderTest } from "./YearnPathFinderTest"; diff --git a/src/types/contracts/test/pathfinder/index.ts b/src/types/contracts/test/pathfinder/index.ts deleted file mode 100644 index fac38c99..00000000 --- a/src/types/contracts/test/pathfinder/index.ts +++ /dev/null @@ -1,18 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type * as curveLpPathFinderTSol from "./CurveLPPathFinder.t.sol"; -export type { curveLpPathFinderTSol }; -import type * as curvePathFinderTSol from "./CurvePathFinder.t.sol"; -export type { curvePathFinderTSol }; -import type * as normalTokenPathFinderTSol from "./NormalTokenPathFinder.t.sol"; -export type { normalTokenPathFinderTSol }; -import type * as swapPathFinderTSol from "./SwapPathFinder.t.sol"; -export type { swapPathFinderTSol }; -import type * as uniswapV2PathFinderTSol from "./UniswapV2PathFinder.t.sol"; -export type { uniswapV2PathFinderTSol }; -import type * as uniswapV3PathFinderTSol from "./UniswapV3PathFinder.t.sol"; -export type { uniswapV3PathFinderTSol }; -import type * as yearnPathFinderTSol from "./YearnPathFinder.t.sol"; -export type { yearnPathFinderTSol }; -export type { PathFinderTestHelper } from "./PathFinderTestHelper"; diff --git a/src/types/contracts/test/pool/PoolService.t.sol/PoolServiceTest.ts b/src/types/contracts/test/pool/PoolService.t.sol/PoolServiceTest.ts deleted file mode 100644 index 6fb7a8de..00000000 --- a/src/types/contracts/test/pool/PoolService.t.sol/PoolServiceTest.ts +++ /dev/null @@ -1,1671 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface PoolServiceTestInterface extends utils.Interface { - functions: { - "IS_TEST()": FunctionFragment; - "failed()": FunctionFragment; - "setUp()": FunctionFragment; - "test_PS_01_start_parameters_correct()": FunctionFragment; - "test_PS_02_add_liquidity_adds_correctly()": FunctionFragment; - "test_PS_03_remove_liquidity_removes_correctly()": FunctionFragment; - "test_PS_04_cannot_be_used_while_paused()": FunctionFragment; - "test_PS_05_starting_cumulative_index_correct()": FunctionFragment; - "test_PS_06_diesel_rate_computes_correctly()": FunctionFragment; - "test_PS_07_correctly_adds_liquidity_at_new_diesel_rate()": FunctionFragment; - "test_PS_08_correctly_removes_liquidity_at_new_diesel_rate()": FunctionFragment; - "test_PS_09_admin_functions_revert_on_non_admin()": FunctionFragment; - "test_PS_10_connectCreditManager_fails_on_incompatible_CM()": FunctionFragment; - "test_PS_11_CM_is_connected_correctly()": FunctionFragment; - "test_PS_12_CA_can_be_lent_repaid_only_by_CM()": FunctionFragment; - "test_PS_13_lendCreditAccount_reverts_on_forbidden_CM()": FunctionFragment; - "test_PS_14_lendCreditAccount_correctly_transfers_tokens()": FunctionFragment; - "test_PS_15_lendCreditAccount_emits_event()": FunctionFragment; - "test_PS_16_lendCreditAccount_correctly_updates_parameters()": FunctionFragment; - "test_PS_17_lendCreditAccount_correctly_updates_borrow_rate()": FunctionFragment; - "test_PS_18_repayCreditAccount_emits_event()": FunctionFragment; - "test_PS_19_repayCreditAccount_correctly_updates_on_uncovered_loss()": FunctionFragment; - "test_PS_20_repayCreditAccount_correctly_updates_on_covered_loss()": FunctionFragment; - "test_PS_21_repayCreditAccount_correctly_updates_on_profit()": FunctionFragment; - "test_PS_22_repayCreditAccount_does_not_change_diesel_rate()": FunctionFragment; - "test_PS_23_diesel_conversion_is_correct()": FunctionFragment; - "test_PS_24_updateInterestRateModel_works_correctly_and_emits_event()": FunctionFragment; - "test_PS_25_updateInterestRateModel_correctly_computes_new_borrow_rate()": FunctionFragment; - "test_PS_26_updateBorrowRate_correct()": FunctionFragment; - "test_PS_27_calcLinearCumulative_RAY_correct()": FunctionFragment; - "test_PS_28_expectedLiquidity_correct()": FunctionFragment; - "test_PS_29_setExpectedLiquidityLimit_correct_and_emits_event()": FunctionFragment; - "test_PS_30_addLiquidity_reverts_above_liquidity_limit()": FunctionFragment; - "test_PS_31_setWithdrawFee_reverts_on_fee_too_lage()": FunctionFragment; - "test_PS_32_setWithdrawFee_correct_and_emits_event()": FunctionFragment; - "test_PS_33_removeLiquidity_takes_withdrawal_fee()": FunctionFragment; - "test_PS_34_connectCreditManager_reverts_on_duplicate()": FunctionFragment; - "test_PS_35_updateInterestRateModel_reverts_on_zero_address()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "IS_TEST" - | "failed" - | "setUp" - | "test_PS_01_start_parameters_correct" - | "test_PS_02_add_liquidity_adds_correctly" - | "test_PS_03_remove_liquidity_removes_correctly" - | "test_PS_04_cannot_be_used_while_paused" - | "test_PS_05_starting_cumulative_index_correct" - | "test_PS_06_diesel_rate_computes_correctly" - | "test_PS_07_correctly_adds_liquidity_at_new_diesel_rate" - | "test_PS_08_correctly_removes_liquidity_at_new_diesel_rate" - | "test_PS_09_admin_functions_revert_on_non_admin" - | "test_PS_10_connectCreditManager_fails_on_incompatible_CM" - | "test_PS_11_CM_is_connected_correctly" - | "test_PS_12_CA_can_be_lent_repaid_only_by_CM" - | "test_PS_13_lendCreditAccount_reverts_on_forbidden_CM" - | "test_PS_14_lendCreditAccount_correctly_transfers_tokens" - | "test_PS_15_lendCreditAccount_emits_event" - | "test_PS_16_lendCreditAccount_correctly_updates_parameters" - | "test_PS_17_lendCreditAccount_correctly_updates_borrow_rate" - | "test_PS_18_repayCreditAccount_emits_event" - | "test_PS_19_repayCreditAccount_correctly_updates_on_uncovered_loss" - | "test_PS_20_repayCreditAccount_correctly_updates_on_covered_loss" - | "test_PS_21_repayCreditAccount_correctly_updates_on_profit" - | "test_PS_22_repayCreditAccount_does_not_change_diesel_rate" - | "test_PS_23_diesel_conversion_is_correct" - | "test_PS_24_updateInterestRateModel_works_correctly_and_emits_event" - | "test_PS_25_updateInterestRateModel_correctly_computes_new_borrow_rate" - | "test_PS_26_updateBorrowRate_correct" - | "test_PS_27_calcLinearCumulative_RAY_correct" - | "test_PS_28_expectedLiquidity_correct" - | "test_PS_29_setExpectedLiquidityLimit_correct_and_emits_event" - | "test_PS_30_addLiquidity_reverts_above_liquidity_limit" - | "test_PS_31_setWithdrawFee_reverts_on_fee_too_lage" - | "test_PS_32_setWithdrawFee_correct_and_emits_event" - | "test_PS_33_removeLiquidity_takes_withdrawal_fee" - | "test_PS_34_connectCreditManager_reverts_on_duplicate" - | "test_PS_35_updateInterestRateModel_reverts_on_zero_address" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "IS_TEST", values?: undefined): string; - encodeFunctionData(functionFragment: "failed", values?: undefined): string; - encodeFunctionData(functionFragment: "setUp", values?: undefined): string; - encodeFunctionData( - functionFragment: "test_PS_01_start_parameters_correct", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_PS_02_add_liquidity_adds_correctly", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_PS_03_remove_liquidity_removes_correctly", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_PS_04_cannot_be_used_while_paused", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_PS_05_starting_cumulative_index_correct", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_PS_06_diesel_rate_computes_correctly", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_PS_07_correctly_adds_liquidity_at_new_diesel_rate", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_PS_08_correctly_removes_liquidity_at_new_diesel_rate", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_PS_09_admin_functions_revert_on_non_admin", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_PS_10_connectCreditManager_fails_on_incompatible_CM", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_PS_11_CM_is_connected_correctly", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_PS_12_CA_can_be_lent_repaid_only_by_CM", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_PS_13_lendCreditAccount_reverts_on_forbidden_CM", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_PS_14_lendCreditAccount_correctly_transfers_tokens", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_PS_15_lendCreditAccount_emits_event", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_PS_16_lendCreditAccount_correctly_updates_parameters", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_PS_17_lendCreditAccount_correctly_updates_borrow_rate", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_PS_18_repayCreditAccount_emits_event", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_PS_19_repayCreditAccount_correctly_updates_on_uncovered_loss", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_PS_20_repayCreditAccount_correctly_updates_on_covered_loss", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_PS_21_repayCreditAccount_correctly_updates_on_profit", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_PS_22_repayCreditAccount_does_not_change_diesel_rate", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_PS_23_diesel_conversion_is_correct", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_PS_24_updateInterestRateModel_works_correctly_and_emits_event", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_PS_25_updateInterestRateModel_correctly_computes_new_borrow_rate", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_PS_26_updateBorrowRate_correct", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_PS_27_calcLinearCumulative_RAY_correct", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_PS_28_expectedLiquidity_correct", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_PS_29_setExpectedLiquidityLimit_correct_and_emits_event", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_PS_30_addLiquidity_reverts_above_liquidity_limit", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_PS_31_setWithdrawFee_reverts_on_fee_too_lage", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_PS_32_setWithdrawFee_correct_and_emits_event", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_PS_33_removeLiquidity_takes_withdrawal_fee", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_PS_34_connectCreditManager_reverts_on_duplicate", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_PS_35_updateInterestRateModel_reverts_on_zero_address", - values?: undefined - ): string; - - decodeFunctionResult(functionFragment: "IS_TEST", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "failed", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "setUp", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "test_PS_01_start_parameters_correct", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_PS_02_add_liquidity_adds_correctly", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_PS_03_remove_liquidity_removes_correctly", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_PS_04_cannot_be_used_while_paused", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_PS_05_starting_cumulative_index_correct", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_PS_06_diesel_rate_computes_correctly", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_PS_07_correctly_adds_liquidity_at_new_diesel_rate", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_PS_08_correctly_removes_liquidity_at_new_diesel_rate", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_PS_09_admin_functions_revert_on_non_admin", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_PS_10_connectCreditManager_fails_on_incompatible_CM", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_PS_11_CM_is_connected_correctly", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_PS_12_CA_can_be_lent_repaid_only_by_CM", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_PS_13_lendCreditAccount_reverts_on_forbidden_CM", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_PS_14_lendCreditAccount_correctly_transfers_tokens", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_PS_15_lendCreditAccount_emits_event", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_PS_16_lendCreditAccount_correctly_updates_parameters", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_PS_17_lendCreditAccount_correctly_updates_borrow_rate", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_PS_18_repayCreditAccount_emits_event", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_PS_19_repayCreditAccount_correctly_updates_on_uncovered_loss", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_PS_20_repayCreditAccount_correctly_updates_on_covered_loss", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_PS_21_repayCreditAccount_correctly_updates_on_profit", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_PS_22_repayCreditAccount_does_not_change_diesel_rate", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_PS_23_diesel_conversion_is_correct", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_PS_24_updateInterestRateModel_works_correctly_and_emits_event", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_PS_25_updateInterestRateModel_correctly_computes_new_borrow_rate", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_PS_26_updateBorrowRate_correct", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_PS_27_calcLinearCumulative_RAY_correct", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_PS_28_expectedLiquidity_correct", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_PS_29_setExpectedLiquidityLimit_correct_and_emits_event", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_PS_30_addLiquidity_reverts_above_liquidity_limit", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_PS_31_setWithdrawFee_reverts_on_fee_too_lage", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_PS_32_setWithdrawFee_correct_and_emits_event", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_PS_33_removeLiquidity_takes_withdrawal_fee", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_PS_34_connectCreditManager_reverts_on_duplicate", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_PS_35_updateInterestRateModel_reverts_on_zero_address", - data: BytesLike - ): Result; - - events: { - "AddLiquidity(address,address,uint256,uint256)": EventFragment; - "Borrow(address,address,uint256)": EventFragment; - "BorrowForbidden(address)": EventFragment; - "NewCreditManagerConnected(address)": EventFragment; - "NewExpectedLiquidityLimit(uint256)": EventFragment; - "NewInterestRateModel(address)": EventFragment; - "NewWithdrawFee(uint256)": EventFragment; - "RemoveLiquidity(address,address,uint256)": EventFragment; - "Repay(address,uint256,uint256,uint256)": EventFragment; - "UncoveredLoss(address,uint256)": EventFragment; - "log(string)": EventFragment; - "log_address(address)": EventFragment; - "log_bytes(bytes)": EventFragment; - "log_bytes32(bytes32)": EventFragment; - "log_int(int256)": EventFragment; - "log_named_address(string,address)": EventFragment; - "log_named_bytes(string,bytes)": EventFragment; - "log_named_bytes32(string,bytes32)": EventFragment; - "log_named_decimal_int(string,int256,uint256)": EventFragment; - "log_named_decimal_uint(string,uint256,uint256)": EventFragment; - "log_named_int(string,int256)": EventFragment; - "log_named_string(string,string)": EventFragment; - "log_named_uint(string,uint256)": EventFragment; - "log_string(string)": EventFragment; - "log_uint(uint256)": EventFragment; - "logs(bytes)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "AddLiquidity"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Borrow"): EventFragment; - getEvent(nameOrSignatureOrTopic: "BorrowForbidden"): EventFragment; - getEvent(nameOrSignatureOrTopic: "NewCreditManagerConnected"): EventFragment; - getEvent(nameOrSignatureOrTopic: "NewExpectedLiquidityLimit"): EventFragment; - getEvent(nameOrSignatureOrTopic: "NewInterestRateModel"): EventFragment; - getEvent(nameOrSignatureOrTopic: "NewWithdrawFee"): EventFragment; - getEvent(nameOrSignatureOrTopic: "RemoveLiquidity"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Repay"): EventFragment; - getEvent(nameOrSignatureOrTopic: "UncoveredLoss"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "logs"): EventFragment; -} - -export interface AddLiquidityEventObject { - sender: string; - onBehalfOf: string; - amount: BigNumber; - referralCode: BigNumber; -} -export type AddLiquidityEvent = TypedEvent< - [string, string, BigNumber, BigNumber], - AddLiquidityEventObject ->; - -export type AddLiquidityEventFilter = TypedEventFilter; - -export interface BorrowEventObject { - creditManager: string; - creditAccount: string; - amount: BigNumber; -} -export type BorrowEvent = TypedEvent< - [string, string, BigNumber], - BorrowEventObject ->; - -export type BorrowEventFilter = TypedEventFilter; - -export interface BorrowForbiddenEventObject { - creditManager: string; -} -export type BorrowForbiddenEvent = TypedEvent< - [string], - BorrowForbiddenEventObject ->; - -export type BorrowForbiddenEventFilter = TypedEventFilter; - -export interface NewCreditManagerConnectedEventObject { - creditManager: string; -} -export type NewCreditManagerConnectedEvent = TypedEvent< - [string], - NewCreditManagerConnectedEventObject ->; - -export type NewCreditManagerConnectedEventFilter = - TypedEventFilter; - -export interface NewExpectedLiquidityLimitEventObject { - newLimit: BigNumber; -} -export type NewExpectedLiquidityLimitEvent = TypedEvent< - [BigNumber], - NewExpectedLiquidityLimitEventObject ->; - -export type NewExpectedLiquidityLimitEventFilter = - TypedEventFilter; - -export interface NewInterestRateModelEventObject { - newInterestRateModel: string; -} -export type NewInterestRateModelEvent = TypedEvent< - [string], - NewInterestRateModelEventObject ->; - -export type NewInterestRateModelEventFilter = - TypedEventFilter; - -export interface NewWithdrawFeeEventObject { - fee: BigNumber; -} -export type NewWithdrawFeeEvent = TypedEvent< - [BigNumber], - NewWithdrawFeeEventObject ->; - -export type NewWithdrawFeeEventFilter = TypedEventFilter; - -export interface RemoveLiquidityEventObject { - sender: string; - to: string; - amount: BigNumber; -} -export type RemoveLiquidityEvent = TypedEvent< - [string, string, BigNumber], - RemoveLiquidityEventObject ->; - -export type RemoveLiquidityEventFilter = TypedEventFilter; - -export interface RepayEventObject { - creditManager: string; - borrowedAmount: BigNumber; - profit: BigNumber; - loss: BigNumber; -} -export type RepayEvent = TypedEvent< - [string, BigNumber, BigNumber, BigNumber], - RepayEventObject ->; - -export type RepayEventFilter = TypedEventFilter; - -export interface UncoveredLossEventObject { - creditManager: string; - loss: BigNumber; -} -export type UncoveredLossEvent = TypedEvent< - [string, BigNumber], - UncoveredLossEventObject ->; - -export type UncoveredLossEventFilter = TypedEventFilter; - -export interface logEventObject { - arg0: string; -} -export type logEvent = TypedEvent<[string], logEventObject>; - -export type logEventFilter = TypedEventFilter; - -export interface log_addressEventObject { - arg0: string; -} -export type log_addressEvent = TypedEvent<[string], log_addressEventObject>; - -export type log_addressEventFilter = TypedEventFilter; - -export interface log_bytesEventObject { - arg0: string; -} -export type log_bytesEvent = TypedEvent<[string], log_bytesEventObject>; - -export type log_bytesEventFilter = TypedEventFilter; - -export interface log_bytes32EventObject { - arg0: string; -} -export type log_bytes32Event = TypedEvent<[string], log_bytes32EventObject>; - -export type log_bytes32EventFilter = TypedEventFilter; - -export interface log_intEventObject { - arg0: BigNumber; -} -export type log_intEvent = TypedEvent<[BigNumber], log_intEventObject>; - -export type log_intEventFilter = TypedEventFilter; - -export interface log_named_addressEventObject { - key: string; - val: string; -} -export type log_named_addressEvent = TypedEvent< - [string, string], - log_named_addressEventObject ->; - -export type log_named_addressEventFilter = - TypedEventFilter; - -export interface log_named_bytesEventObject { - key: string; - val: string; -} -export type log_named_bytesEvent = TypedEvent< - [string, string], - log_named_bytesEventObject ->; - -export type log_named_bytesEventFilter = TypedEventFilter; - -export interface log_named_bytes32EventObject { - key: string; - val: string; -} -export type log_named_bytes32Event = TypedEvent< - [string, string], - log_named_bytes32EventObject ->; - -export type log_named_bytes32EventFilter = - TypedEventFilter; - -export interface log_named_decimal_intEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_intEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_intEventObject ->; - -export type log_named_decimal_intEventFilter = - TypedEventFilter; - -export interface log_named_decimal_uintEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_uintEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_uintEventObject ->; - -export type log_named_decimal_uintEventFilter = - TypedEventFilter; - -export interface log_named_intEventObject { - key: string; - val: BigNumber; -} -export type log_named_intEvent = TypedEvent< - [string, BigNumber], - log_named_intEventObject ->; - -export type log_named_intEventFilter = TypedEventFilter; - -export interface log_named_stringEventObject { - key: string; - val: string; -} -export type log_named_stringEvent = TypedEvent< - [string, string], - log_named_stringEventObject ->; - -export type log_named_stringEventFilter = - TypedEventFilter; - -export interface log_named_uintEventObject { - key: string; - val: BigNumber; -} -export type log_named_uintEvent = TypedEvent< - [string, BigNumber], - log_named_uintEventObject ->; - -export type log_named_uintEventFilter = TypedEventFilter; - -export interface log_stringEventObject { - arg0: string; -} -export type log_stringEvent = TypedEvent<[string], log_stringEventObject>; - -export type log_stringEventFilter = TypedEventFilter; - -export interface log_uintEventObject { - arg0: BigNumber; -} -export type log_uintEvent = TypedEvent<[BigNumber], log_uintEventObject>; - -export type log_uintEventFilter = TypedEventFilter; - -export interface logsEventObject { - arg0: string; -} -export type logsEvent = TypedEvent<[string], logsEventObject>; - -export type logsEventFilter = TypedEventFilter; - -export interface PoolServiceTest extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: PoolServiceTestInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - IS_TEST(overrides?: CallOverrides): Promise<[boolean]>; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_01_start_parameters_correct( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_02_add_liquidity_adds_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_03_remove_liquidity_removes_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_04_cannot_be_used_while_paused( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_05_starting_cumulative_index_correct( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_06_diesel_rate_computes_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_07_correctly_adds_liquidity_at_new_diesel_rate( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_08_correctly_removes_liquidity_at_new_diesel_rate( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_09_admin_functions_revert_on_non_admin( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_10_connectCreditManager_fails_on_incompatible_CM( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_11_CM_is_connected_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_12_CA_can_be_lent_repaid_only_by_CM( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_13_lendCreditAccount_reverts_on_forbidden_CM( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_14_lendCreditAccount_correctly_transfers_tokens( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_15_lendCreditAccount_emits_event( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_16_lendCreditAccount_correctly_updates_parameters( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_17_lendCreditAccount_correctly_updates_borrow_rate( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_18_repayCreditAccount_emits_event( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_19_repayCreditAccount_correctly_updates_on_uncovered_loss( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_20_repayCreditAccount_correctly_updates_on_covered_loss( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_21_repayCreditAccount_correctly_updates_on_profit( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_22_repayCreditAccount_does_not_change_diesel_rate( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_23_diesel_conversion_is_correct( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_24_updateInterestRateModel_works_correctly_and_emits_event( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_25_updateInterestRateModel_correctly_computes_new_borrow_rate( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_26_updateBorrowRate_correct( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_27_calcLinearCumulative_RAY_correct( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_28_expectedLiquidity_correct( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_29_setExpectedLiquidityLimit_correct_and_emits_event( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_30_addLiquidity_reverts_above_liquidity_limit( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_31_setWithdrawFee_reverts_on_fee_too_lage( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_32_setWithdrawFee_correct_and_emits_event( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_33_removeLiquidity_takes_withdrawal_fee( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_34_connectCreditManager_reverts_on_duplicate( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_35_updateInterestRateModel_reverts_on_zero_address( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - IS_TEST(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_01_start_parameters_correct( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_02_add_liquidity_adds_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_03_remove_liquidity_removes_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_04_cannot_be_used_while_paused( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_05_starting_cumulative_index_correct( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_06_diesel_rate_computes_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_07_correctly_adds_liquidity_at_new_diesel_rate( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_08_correctly_removes_liquidity_at_new_diesel_rate( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_09_admin_functions_revert_on_non_admin( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_10_connectCreditManager_fails_on_incompatible_CM( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_11_CM_is_connected_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_12_CA_can_be_lent_repaid_only_by_CM( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_13_lendCreditAccount_reverts_on_forbidden_CM( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_14_lendCreditAccount_correctly_transfers_tokens( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_15_lendCreditAccount_emits_event( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_16_lendCreditAccount_correctly_updates_parameters( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_17_lendCreditAccount_correctly_updates_borrow_rate( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_18_repayCreditAccount_emits_event( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_19_repayCreditAccount_correctly_updates_on_uncovered_loss( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_20_repayCreditAccount_correctly_updates_on_covered_loss( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_21_repayCreditAccount_correctly_updates_on_profit( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_22_repayCreditAccount_does_not_change_diesel_rate( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_23_diesel_conversion_is_correct( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_24_updateInterestRateModel_works_correctly_and_emits_event( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_25_updateInterestRateModel_correctly_computes_new_borrow_rate( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_26_updateBorrowRate_correct( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_27_calcLinearCumulative_RAY_correct( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_28_expectedLiquidity_correct( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_29_setExpectedLiquidityLimit_correct_and_emits_event( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_30_addLiquidity_reverts_above_liquidity_limit( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_31_setWithdrawFee_reverts_on_fee_too_lage( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_32_setWithdrawFee_correct_and_emits_event( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_33_removeLiquidity_takes_withdrawal_fee( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_34_connectCreditManager_reverts_on_duplicate( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_35_updateInterestRateModel_reverts_on_zero_address( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - IS_TEST(overrides?: CallOverrides): Promise; - - failed(overrides?: CallOverrides): Promise; - - setUp(overrides?: CallOverrides): Promise; - - test_PS_01_start_parameters_correct( - overrides?: CallOverrides - ): Promise; - - test_PS_02_add_liquidity_adds_correctly( - overrides?: CallOverrides - ): Promise; - - test_PS_03_remove_liquidity_removes_correctly( - overrides?: CallOverrides - ): Promise; - - test_PS_04_cannot_be_used_while_paused( - overrides?: CallOverrides - ): Promise; - - test_PS_05_starting_cumulative_index_correct( - overrides?: CallOverrides - ): Promise; - - test_PS_06_diesel_rate_computes_correctly( - overrides?: CallOverrides - ): Promise; - - test_PS_07_correctly_adds_liquidity_at_new_diesel_rate( - overrides?: CallOverrides - ): Promise; - - test_PS_08_correctly_removes_liquidity_at_new_diesel_rate( - overrides?: CallOverrides - ): Promise; - - test_PS_09_admin_functions_revert_on_non_admin( - overrides?: CallOverrides - ): Promise; - - test_PS_10_connectCreditManager_fails_on_incompatible_CM( - overrides?: CallOverrides - ): Promise; - - test_PS_11_CM_is_connected_correctly( - overrides?: CallOverrides - ): Promise; - - test_PS_12_CA_can_be_lent_repaid_only_by_CM( - overrides?: CallOverrides - ): Promise; - - test_PS_13_lendCreditAccount_reverts_on_forbidden_CM( - overrides?: CallOverrides - ): Promise; - - test_PS_14_lendCreditAccount_correctly_transfers_tokens( - overrides?: CallOverrides - ): Promise; - - test_PS_15_lendCreditAccount_emits_event( - overrides?: CallOverrides - ): Promise; - - test_PS_16_lendCreditAccount_correctly_updates_parameters( - overrides?: CallOverrides - ): Promise; - - test_PS_17_lendCreditAccount_correctly_updates_borrow_rate( - overrides?: CallOverrides - ): Promise; - - test_PS_18_repayCreditAccount_emits_event( - overrides?: CallOverrides - ): Promise; - - test_PS_19_repayCreditAccount_correctly_updates_on_uncovered_loss( - overrides?: CallOverrides - ): Promise; - - test_PS_20_repayCreditAccount_correctly_updates_on_covered_loss( - overrides?: CallOverrides - ): Promise; - - test_PS_21_repayCreditAccount_correctly_updates_on_profit( - overrides?: CallOverrides - ): Promise; - - test_PS_22_repayCreditAccount_does_not_change_diesel_rate( - overrides?: CallOverrides - ): Promise; - - test_PS_23_diesel_conversion_is_correct( - overrides?: CallOverrides - ): Promise; - - test_PS_24_updateInterestRateModel_works_correctly_and_emits_event( - overrides?: CallOverrides - ): Promise; - - test_PS_25_updateInterestRateModel_correctly_computes_new_borrow_rate( - overrides?: CallOverrides - ): Promise; - - test_PS_26_updateBorrowRate_correct( - overrides?: CallOverrides - ): Promise; - - test_PS_27_calcLinearCumulative_RAY_correct( - overrides?: CallOverrides - ): Promise; - - test_PS_28_expectedLiquidity_correct( - overrides?: CallOverrides - ): Promise; - - test_PS_29_setExpectedLiquidityLimit_correct_and_emits_event( - overrides?: CallOverrides - ): Promise; - - test_PS_30_addLiquidity_reverts_above_liquidity_limit( - overrides?: CallOverrides - ): Promise; - - test_PS_31_setWithdrawFee_reverts_on_fee_too_lage( - overrides?: CallOverrides - ): Promise; - - test_PS_32_setWithdrawFee_correct_and_emits_event( - overrides?: CallOverrides - ): Promise; - - test_PS_33_removeLiquidity_takes_withdrawal_fee( - overrides?: CallOverrides - ): Promise; - - test_PS_34_connectCreditManager_reverts_on_duplicate( - overrides?: CallOverrides - ): Promise; - - test_PS_35_updateInterestRateModel_reverts_on_zero_address( - overrides?: CallOverrides - ): Promise; - }; - - filters: { - "AddLiquidity(address,address,uint256,uint256)"( - sender?: string | null, - onBehalfOf?: string | null, - amount?: null, - referralCode?: null - ): AddLiquidityEventFilter; - AddLiquidity( - sender?: string | null, - onBehalfOf?: string | null, - amount?: null, - referralCode?: null - ): AddLiquidityEventFilter; - - "Borrow(address,address,uint256)"( - creditManager?: string | null, - creditAccount?: string | null, - amount?: null - ): BorrowEventFilter; - Borrow( - creditManager?: string | null, - creditAccount?: string | null, - amount?: null - ): BorrowEventFilter; - - "BorrowForbidden(address)"( - creditManager?: string | null - ): BorrowForbiddenEventFilter; - BorrowForbidden(creditManager?: string | null): BorrowForbiddenEventFilter; - - "NewCreditManagerConnected(address)"( - creditManager?: string | null - ): NewCreditManagerConnectedEventFilter; - NewCreditManagerConnected( - creditManager?: string | null - ): NewCreditManagerConnectedEventFilter; - - "NewExpectedLiquidityLimit(uint256)"( - newLimit?: null - ): NewExpectedLiquidityLimitEventFilter; - NewExpectedLiquidityLimit( - newLimit?: null - ): NewExpectedLiquidityLimitEventFilter; - - "NewInterestRateModel(address)"( - newInterestRateModel?: string | null - ): NewInterestRateModelEventFilter; - NewInterestRateModel( - newInterestRateModel?: string | null - ): NewInterestRateModelEventFilter; - - "NewWithdrawFee(uint256)"(fee?: null): NewWithdrawFeeEventFilter; - NewWithdrawFee(fee?: null): NewWithdrawFeeEventFilter; - - "RemoveLiquidity(address,address,uint256)"( - sender?: string | null, - to?: string | null, - amount?: null - ): RemoveLiquidityEventFilter; - RemoveLiquidity( - sender?: string | null, - to?: string | null, - amount?: null - ): RemoveLiquidityEventFilter; - - "Repay(address,uint256,uint256,uint256)"( - creditManager?: string | null, - borrowedAmount?: null, - profit?: null, - loss?: null - ): RepayEventFilter; - Repay( - creditManager?: string | null, - borrowedAmount?: null, - profit?: null, - loss?: null - ): RepayEventFilter; - - "UncoveredLoss(address,uint256)"( - creditManager?: string | null, - loss?: null - ): UncoveredLossEventFilter; - UncoveredLoss( - creditManager?: string | null, - loss?: null - ): UncoveredLossEventFilter; - - "log(string)"(arg0?: null): logEventFilter; - log(arg0?: null): logEventFilter; - - "log_address(address)"(arg0?: null): log_addressEventFilter; - log_address(arg0?: null): log_addressEventFilter; - - "log_bytes(bytes)"(arg0?: null): log_bytesEventFilter; - log_bytes(arg0?: null): log_bytesEventFilter; - - "log_bytes32(bytes32)"(arg0?: null): log_bytes32EventFilter; - log_bytes32(arg0?: null): log_bytes32EventFilter; - - "log_int(int256)"(arg0?: null): log_intEventFilter; - log_int(arg0?: null): log_intEventFilter; - - "log_named_address(string,address)"( - key?: null, - val?: null - ): log_named_addressEventFilter; - log_named_address(key?: null, val?: null): log_named_addressEventFilter; - - "log_named_bytes(string,bytes)"( - key?: null, - val?: null - ): log_named_bytesEventFilter; - log_named_bytes(key?: null, val?: null): log_named_bytesEventFilter; - - "log_named_bytes32(string,bytes32)"( - key?: null, - val?: null - ): log_named_bytes32EventFilter; - log_named_bytes32(key?: null, val?: null): log_named_bytes32EventFilter; - - "log_named_decimal_int(string,int256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - log_named_decimal_int( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - - "log_named_decimal_uint(string,uint256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - log_named_decimal_uint( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - - "log_named_int(string,int256)"( - key?: null, - val?: null - ): log_named_intEventFilter; - log_named_int(key?: null, val?: null): log_named_intEventFilter; - - "log_named_string(string,string)"( - key?: null, - val?: null - ): log_named_stringEventFilter; - log_named_string(key?: null, val?: null): log_named_stringEventFilter; - - "log_named_uint(string,uint256)"( - key?: null, - val?: null - ): log_named_uintEventFilter; - log_named_uint(key?: null, val?: null): log_named_uintEventFilter; - - "log_string(string)"(arg0?: null): log_stringEventFilter; - log_string(arg0?: null): log_stringEventFilter; - - "log_uint(uint256)"(arg0?: null): log_uintEventFilter; - log_uint(arg0?: null): log_uintEventFilter; - - "logs(bytes)"(arg0?: null): logsEventFilter; - logs(arg0?: null): logsEventFilter; - }; - - estimateGas: { - IS_TEST(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_01_start_parameters_correct( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_02_add_liquidity_adds_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_03_remove_liquidity_removes_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_04_cannot_be_used_while_paused( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_05_starting_cumulative_index_correct( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_06_diesel_rate_computes_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_07_correctly_adds_liquidity_at_new_diesel_rate( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_08_correctly_removes_liquidity_at_new_diesel_rate( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_09_admin_functions_revert_on_non_admin( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_10_connectCreditManager_fails_on_incompatible_CM( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_11_CM_is_connected_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_12_CA_can_be_lent_repaid_only_by_CM( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_13_lendCreditAccount_reverts_on_forbidden_CM( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_14_lendCreditAccount_correctly_transfers_tokens( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_15_lendCreditAccount_emits_event( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_16_lendCreditAccount_correctly_updates_parameters( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_17_lendCreditAccount_correctly_updates_borrow_rate( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_18_repayCreditAccount_emits_event( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_19_repayCreditAccount_correctly_updates_on_uncovered_loss( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_20_repayCreditAccount_correctly_updates_on_covered_loss( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_21_repayCreditAccount_correctly_updates_on_profit( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_22_repayCreditAccount_does_not_change_diesel_rate( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_23_diesel_conversion_is_correct( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_24_updateInterestRateModel_works_correctly_and_emits_event( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_25_updateInterestRateModel_correctly_computes_new_borrow_rate( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_26_updateBorrowRate_correct( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_27_calcLinearCumulative_RAY_correct( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_28_expectedLiquidity_correct( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_29_setExpectedLiquidityLimit_correct_and_emits_event( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_30_addLiquidity_reverts_above_liquidity_limit( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_31_setWithdrawFee_reverts_on_fee_too_lage( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_32_setWithdrawFee_correct_and_emits_event( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_33_removeLiquidity_takes_withdrawal_fee( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_34_connectCreditManager_reverts_on_duplicate( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_35_updateInterestRateModel_reverts_on_zero_address( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - IS_TEST(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_01_start_parameters_correct( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_02_add_liquidity_adds_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_03_remove_liquidity_removes_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_04_cannot_be_used_while_paused( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_05_starting_cumulative_index_correct( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_06_diesel_rate_computes_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_07_correctly_adds_liquidity_at_new_diesel_rate( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_08_correctly_removes_liquidity_at_new_diesel_rate( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_09_admin_functions_revert_on_non_admin( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_10_connectCreditManager_fails_on_incompatible_CM( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_11_CM_is_connected_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_12_CA_can_be_lent_repaid_only_by_CM( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_13_lendCreditAccount_reverts_on_forbidden_CM( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_14_lendCreditAccount_correctly_transfers_tokens( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_15_lendCreditAccount_emits_event( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_16_lendCreditAccount_correctly_updates_parameters( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_17_lendCreditAccount_correctly_updates_borrow_rate( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_18_repayCreditAccount_emits_event( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_19_repayCreditAccount_correctly_updates_on_uncovered_loss( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_20_repayCreditAccount_correctly_updates_on_covered_loss( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_21_repayCreditAccount_correctly_updates_on_profit( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_22_repayCreditAccount_does_not_change_diesel_rate( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_23_diesel_conversion_is_correct( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_24_updateInterestRateModel_works_correctly_and_emits_event( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_25_updateInterestRateModel_correctly_computes_new_borrow_rate( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_26_updateBorrowRate_correct( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_27_calcLinearCumulative_RAY_correct( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_28_expectedLiquidity_correct( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_29_setExpectedLiquidityLimit_correct_and_emits_event( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_30_addLiquidity_reverts_above_liquidity_limit( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_31_setWithdrawFee_reverts_on_fee_too_lage( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_32_setWithdrawFee_correct_and_emits_event( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_33_removeLiquidity_takes_withdrawal_fee( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_34_connectCreditManager_reverts_on_duplicate( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PS_35_updateInterestRateModel_reverts_on_zero_address( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/src/types/contracts/test/pool/PoolService.t.sol/index.ts b/src/types/contracts/test/pool/PoolService.t.sol/index.ts deleted file mode 100644 index a9d4d058..00000000 --- a/src/types/contracts/test/pool/PoolService.t.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { PoolServiceTest } from "./PoolServiceTest"; diff --git a/src/types/contracts/test/pool/index.ts b/src/types/contracts/test/pool/index.ts deleted file mode 100644 index 8b575fb6..00000000 --- a/src/types/contracts/test/pool/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type * as poolServiceTSol from "./PoolService.t.sol"; -export type { poolServiceTSol }; diff --git a/src/types/contracts/test/sigp/AttackingContractNonPayable.sol/AttackContractNonPayable.ts b/src/types/contracts/test/sigp/AttackingContractNonPayable.sol/AttackContractNonPayable.ts deleted file mode 100644 index 747fbba7..00000000 --- a/src/types/contracts/test/sigp/AttackingContractNonPayable.sol/AttackContractNonPayable.ts +++ /dev/null @@ -1,81 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BytesLike, - CallOverrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface AttackContractNonPayableInterface extends utils.Interface { - functions: { - "owner()": FunctionFragment; - }; - - getFunction(nameOrSignatureOrTopic: "owner"): FunctionFragment; - - encodeFunctionData(functionFragment: "owner", values?: undefined): string; - - decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; - - events: {}; -} - -export interface AttackContractNonPayable extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: AttackContractNonPayableInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - owner(overrides?: CallOverrides): Promise<[string]>; - }; - - owner(overrides?: CallOverrides): Promise; - - callStatic: { - owner(overrides?: CallOverrides): Promise; - }; - - filters: {}; - - estimateGas: { - owner(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - owner(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/test/sigp/AttackingContractNonPayable.sol/index.ts b/src/types/contracts/test/sigp/AttackingContractNonPayable.sol/index.ts deleted file mode 100644 index 66afbb48..00000000 --- a/src/types/contracts/test/sigp/AttackingContractNonPayable.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { AttackContractNonPayable } from "./AttackContractNonPayable"; diff --git a/src/types/contracts/test/sigp/DummyMulticallTarget.ts b/src/types/contracts/test/sigp/DummyMulticallTarget.ts deleted file mode 100644 index 99943b82..00000000 --- a/src/types/contracts/test/sigp/DummyMulticallTarget.ts +++ /dev/null @@ -1,175 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../common"; - -export interface DummyMulticallTargetInterface extends utils.Interface { - functions: { - "failedCall(uint256)": FunctionFragment; - "log1(uint256)": FunctionFragment; - "log2(uint256)": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: "failedCall" | "log1" | "log2" - ): FunctionFragment; - - encodeFunctionData( - functionFragment: "failedCall", - values: [BigNumberish] - ): string; - encodeFunctionData(functionFragment: "log1", values: [BigNumberish]): string; - encodeFunctionData(functionFragment: "log2", values: [BigNumberish]): string; - - decodeFunctionResult(functionFragment: "failedCall", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "log1", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "log2", data: BytesLike): Result; - - events: { - "Log1(uint256)": EventFragment; - "Log2(uint256)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "Log1"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Log2"): EventFragment; -} - -export interface Log1EventObject { - _data: BigNumber; -} -export type Log1Event = TypedEvent<[BigNumber], Log1EventObject>; - -export type Log1EventFilter = TypedEventFilter; - -export interface Log2EventObject { - _data: BigNumber; -} -export type Log2Event = TypedEvent<[BigNumber], Log2EventObject>; - -export type Log2EventFilter = TypedEventFilter; - -export interface DummyMulticallTarget extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: DummyMulticallTargetInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - failedCall(arg0: BigNumberish, overrides?: CallOverrides): Promise<[void]>; - - log1( - _data: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - log2( - _data: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - failedCall(arg0: BigNumberish, overrides?: CallOverrides): Promise; - - log1( - _data: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - log2( - _data: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - failedCall(arg0: BigNumberish, overrides?: CallOverrides): Promise; - - log1(_data: BigNumberish, overrides?: CallOverrides): Promise; - - log2(_data: BigNumberish, overrides?: CallOverrides): Promise; - }; - - filters: { - "Log1(uint256)"(_data?: null): Log1EventFilter; - Log1(_data?: null): Log1EventFilter; - - "Log2(uint256)"(_data?: null): Log2EventFilter; - Log2(_data?: null): Log2EventFilter; - }; - - estimateGas: { - failedCall( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - log1( - _data: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - log2( - _data: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - failedCall( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - log1( - _data: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - log2( - _data: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/src/types/contracts/test/sigp/FlashLoanAttacker2.ts b/src/types/contracts/test/sigp/FlashLoanAttacker2.ts deleted file mode 100644 index 6684350c..00000000 --- a/src/types/contracts/test/sigp/FlashLoanAttacker2.ts +++ /dev/null @@ -1,240 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../common"; - -export interface FlashLoanAttacker2Interface extends utils.Interface { - functions: { - "closeCreditAccount(address)": FunctionFragment; - "fundAndCloseAttack(address,address,uint256)": FunctionFragment; - "openAndCloseAttack(uint256,address,uint16)": FunctionFragment; - "openCreditAccount(uint256,address,uint16)": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "closeCreditAccount" - | "fundAndCloseAttack" - | "openAndCloseAttack" - | "openCreditAccount" - ): FunctionFragment; - - encodeFunctionData( - functionFragment: "closeCreditAccount", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "fundAndCloseAttack", - values: [string, string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "openAndCloseAttack", - values: [BigNumberish, string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "openCreditAccount", - values: [BigNumberish, string, BigNumberish] - ): string; - - decodeFunctionResult( - functionFragment: "closeCreditAccount", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "fundAndCloseAttack", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "openAndCloseAttack", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "openCreditAccount", - data: BytesLike - ): Result; - - events: {}; -} - -export interface FlashLoanAttacker2 extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: FlashLoanAttacker2Interface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - closeCreditAccount( - to: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fundAndCloseAttack( - onBehalfOf: string, - token: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - openAndCloseAttack( - amount: BigNumberish, - onBehalfOf: string, - leverageFactor: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - openCreditAccount( - amount: BigNumberish, - onBehalfOf: string, - leverageFactor: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - closeCreditAccount( - to: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fundAndCloseAttack( - onBehalfOf: string, - token: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - openAndCloseAttack( - amount: BigNumberish, - onBehalfOf: string, - leverageFactor: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - openCreditAccount( - amount: BigNumberish, - onBehalfOf: string, - leverageFactor: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - closeCreditAccount(to: string, overrides?: CallOverrides): Promise; - - fundAndCloseAttack( - onBehalfOf: string, - token: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - openAndCloseAttack( - amount: BigNumberish, - onBehalfOf: string, - leverageFactor: BigNumberish, - overrides?: CallOverrides - ): Promise; - - openCreditAccount( - amount: BigNumberish, - onBehalfOf: string, - leverageFactor: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - filters: {}; - - estimateGas: { - closeCreditAccount( - to: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fundAndCloseAttack( - onBehalfOf: string, - token: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - openAndCloseAttack( - amount: BigNumberish, - onBehalfOf: string, - leverageFactor: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - openCreditAccount( - amount: BigNumberish, - onBehalfOf: string, - leverageFactor: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - closeCreditAccount( - to: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - fundAndCloseAttack( - onBehalfOf: string, - token: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - openAndCloseAttack( - amount: BigNumberish, - onBehalfOf: string, - leverageFactor: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - openCreditAccount( - amount: BigNumberish, - onBehalfOf: string, - leverageFactor: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/src/types/contracts/test/sigp/NewConvexBaseRewardPoolMock.sol/NewBaseRewardPoolMock.ts b/src/types/contracts/test/sigp/NewConvexBaseRewardPoolMock.sol/NewBaseRewardPoolMock.ts deleted file mode 100644 index 59516e8a..00000000 --- a/src/types/contracts/test/sigp/NewConvexBaseRewardPoolMock.sol/NewBaseRewardPoolMock.ts +++ /dev/null @@ -1,1069 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface NewBaseRewardPoolMockInterface extends utils.Interface { - functions: { - "addExtraReward(address)": FunctionFragment; - "addRewardAmount(uint256)": FunctionFragment; - "balanceOf(address)": FunctionFragment; - "clearExtraRewards()": FunctionFragment; - "currentRewards()": FunctionFragment; - "donate(uint256)": FunctionFragment; - "duration()": FunctionFragment; - "earned(address)": FunctionFragment; - "extraRewards(uint256)": FunctionFragment; - "extraRewardsLength()": FunctionFragment; - "getReward()": FunctionFragment; - "getReward(address,bool)": FunctionFragment; - "historicalRewards()": FunctionFragment; - "lastTimeRewardApplicable()": FunctionFragment; - "lastUpdateTime()": FunctionFragment; - "newRewardRatio()": FunctionFragment; - "operator()": FunctionFragment; - "periodFinish()": FunctionFragment; - "pid()": FunctionFragment; - "queueNewRewards(uint256)": FunctionFragment; - "queuedRewards()": FunctionFragment; - "rewardManager()": FunctionFragment; - "rewardPerToken()": FunctionFragment; - "rewardPerTokenStored()": FunctionFragment; - "rewardRate()": FunctionFragment; - "rewardToken()": FunctionFragment; - "rewards(address)": FunctionFragment; - "stake(uint256)": FunctionFragment; - "stakeAll()": FunctionFragment; - "stakeFor(address,uint256)": FunctionFragment; - "stakingToken()": FunctionFragment; - "totalSupply()": FunctionFragment; - "userRewardPerTokenPaid(address)": FunctionFragment; - "withdraw(uint256,bool)": FunctionFragment; - "withdrawAll(bool)": FunctionFragment; - "withdrawAllAndUnwrap(bool)": FunctionFragment; - "withdrawAndUnwrap(uint256,bool)": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "addExtraReward" - | "addRewardAmount" - | "balanceOf" - | "clearExtraRewards" - | "currentRewards" - | "donate" - | "duration" - | "earned" - | "extraRewards" - | "extraRewardsLength" - | "getReward()" - | "getReward(address,bool)" - | "historicalRewards" - | "lastTimeRewardApplicable" - | "lastUpdateTime" - | "newRewardRatio" - | "operator" - | "periodFinish" - | "pid" - | "queueNewRewards" - | "queuedRewards" - | "rewardManager" - | "rewardPerToken" - | "rewardPerTokenStored" - | "rewardRate" - | "rewardToken" - | "rewards" - | "stake" - | "stakeAll" - | "stakeFor" - | "stakingToken" - | "totalSupply" - | "userRewardPerTokenPaid" - | "withdraw" - | "withdrawAll" - | "withdrawAllAndUnwrap" - | "withdrawAndUnwrap" - ): FunctionFragment; - - encodeFunctionData( - functionFragment: "addExtraReward", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "addRewardAmount", - values: [BigNumberish] - ): string; - encodeFunctionData(functionFragment: "balanceOf", values: [string]): string; - encodeFunctionData( - functionFragment: "clearExtraRewards", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "currentRewards", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "donate", - values: [BigNumberish] - ): string; - encodeFunctionData(functionFragment: "duration", values?: undefined): string; - encodeFunctionData(functionFragment: "earned", values: [string]): string; - encodeFunctionData( - functionFragment: "extraRewards", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "extraRewardsLength", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "getReward()", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "getReward(address,bool)", - values: [string, boolean] - ): string; - encodeFunctionData( - functionFragment: "historicalRewards", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "lastTimeRewardApplicable", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "lastUpdateTime", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "newRewardRatio", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "operator", values?: undefined): string; - encodeFunctionData( - functionFragment: "periodFinish", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "pid", values?: undefined): string; - encodeFunctionData( - functionFragment: "queueNewRewards", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "queuedRewards", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "rewardManager", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "rewardPerToken", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "rewardPerTokenStored", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "rewardRate", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "rewardToken", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "rewards", values: [string]): string; - encodeFunctionData(functionFragment: "stake", values: [BigNumberish]): string; - encodeFunctionData(functionFragment: "stakeAll", values?: undefined): string; - encodeFunctionData( - functionFragment: "stakeFor", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "stakingToken", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "totalSupply", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "userRewardPerTokenPaid", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "withdraw", - values: [BigNumberish, boolean] - ): string; - encodeFunctionData( - functionFragment: "withdrawAll", - values: [boolean] - ): string; - encodeFunctionData( - functionFragment: "withdrawAllAndUnwrap", - values: [boolean] - ): string; - encodeFunctionData( - functionFragment: "withdrawAndUnwrap", - values: [BigNumberish, boolean] - ): string; - - decodeFunctionResult( - functionFragment: "addExtraReward", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "addRewardAmount", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "clearExtraRewards", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "currentRewards", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "donate", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "duration", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "earned", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "extraRewards", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "extraRewardsLength", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getReward()", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getReward(address,bool)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "historicalRewards", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "lastTimeRewardApplicable", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "lastUpdateTime", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "newRewardRatio", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "operator", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "periodFinish", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "pid", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "queueNewRewards", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "queuedRewards", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "rewardManager", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "rewardPerToken", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "rewardPerTokenStored", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "rewardRate", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "rewardToken", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "rewards", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "stake", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "stakeAll", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "stakeFor", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "stakingToken", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "totalSupply", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "userRewardPerTokenPaid", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "withdraw", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "withdrawAll", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "withdrawAllAndUnwrap", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "withdrawAndUnwrap", - data: BytesLike - ): Result; - - events: { - "Mock_BaseRewardPaid(uint256,address,uint256)": EventFragment; - "Mock_BaseStaked(uint256,address,uint256)": EventFragment; - "Mock_BaseWithdrawn(uint256,address,uint256)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "Mock_BaseRewardPaid"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Mock_BaseStaked"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Mock_BaseWithdrawn"): EventFragment; -} - -export interface Mock_BaseRewardPaidEventObject { - index: BigNumber; - user: string; - reward: BigNumber; -} -export type Mock_BaseRewardPaidEvent = TypedEvent< - [BigNumber, string, BigNumber], - Mock_BaseRewardPaidEventObject ->; - -export type Mock_BaseRewardPaidEventFilter = - TypedEventFilter; - -export interface Mock_BaseStakedEventObject { - index: BigNumber; - user: string; - amount: BigNumber; -} -export type Mock_BaseStakedEvent = TypedEvent< - [BigNumber, string, BigNumber], - Mock_BaseStakedEventObject ->; - -export type Mock_BaseStakedEventFilter = TypedEventFilter; - -export interface Mock_BaseWithdrawnEventObject { - index: BigNumber; - user: string; - amount: BigNumber; -} -export type Mock_BaseWithdrawnEvent = TypedEvent< - [BigNumber, string, BigNumber], - Mock_BaseWithdrawnEventObject ->; - -export type Mock_BaseWithdrawnEventFilter = - TypedEventFilter; - -export interface NewBaseRewardPoolMock extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: NewBaseRewardPoolMockInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - addExtraReward( - _reward: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - addRewardAmount( - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise<[BigNumber]>; - - clearExtraRewards( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - currentRewards(overrides?: CallOverrides): Promise<[BigNumber]>; - - donate(arg0: BigNumberish, overrides?: CallOverrides): Promise<[boolean]>; - - duration(overrides?: CallOverrides): Promise<[BigNumber]>; - - earned(account: string, overrides?: CallOverrides): Promise<[BigNumber]>; - - extraRewards( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - extraRewardsLength(overrides?: CallOverrides): Promise<[BigNumber]>; - - "getReward()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "getReward(address,bool)"( - _account: string, - _claimExtras: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - historicalRewards(overrides?: CallOverrides): Promise<[BigNumber]>; - - lastTimeRewardApplicable(overrides?: CallOverrides): Promise<[BigNumber]>; - - lastUpdateTime(overrides?: CallOverrides): Promise<[BigNumber]>; - - newRewardRatio(overrides?: CallOverrides): Promise<[BigNumber]>; - - operator(overrides?: CallOverrides): Promise<[string]>; - - periodFinish(overrides?: CallOverrides): Promise<[BigNumber]>; - - pid(overrides?: CallOverrides): Promise<[BigNumber]>; - - queueNewRewards( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise<[boolean]>; - - queuedRewards(overrides?: CallOverrides): Promise<[BigNumber]>; - - rewardManager(overrides?: CallOverrides): Promise<[string]>; - - rewardPerToken(overrides?: CallOverrides): Promise<[BigNumber]>; - - rewardPerTokenStored(overrides?: CallOverrides): Promise<[BigNumber]>; - - rewardRate(overrides?: CallOverrides): Promise<[BigNumber]>; - - rewardToken(overrides?: CallOverrides): Promise<[string]>; - - rewards(arg0: string, overrides?: CallOverrides): Promise<[BigNumber]>; - - stake( - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - stakeAll( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - stakeFor( - _for: string, - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - stakingToken(overrides?: CallOverrides): Promise<[string]>; - - totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>; - - userRewardPerTokenPaid( - arg0: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - withdraw( - amount: BigNumberish, - claim: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdrawAll( - claim: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdrawAllAndUnwrap( - claim: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdrawAndUnwrap( - amount: BigNumberish, - claim: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - addExtraReward( - _reward: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - addRewardAmount( - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - clearExtraRewards( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - currentRewards(overrides?: CallOverrides): Promise; - - donate(arg0: BigNumberish, overrides?: CallOverrides): Promise; - - duration(overrides?: CallOverrides): Promise; - - earned(account: string, overrides?: CallOverrides): Promise; - - extraRewards(arg0: BigNumberish, overrides?: CallOverrides): Promise; - - extraRewardsLength(overrides?: CallOverrides): Promise; - - "getReward()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "getReward(address,bool)"( - _account: string, - _claimExtras: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - historicalRewards(overrides?: CallOverrides): Promise; - - lastTimeRewardApplicable(overrides?: CallOverrides): Promise; - - lastUpdateTime(overrides?: CallOverrides): Promise; - - newRewardRatio(overrides?: CallOverrides): Promise; - - operator(overrides?: CallOverrides): Promise; - - periodFinish(overrides?: CallOverrides): Promise; - - pid(overrides?: CallOverrides): Promise; - - queueNewRewards( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - queuedRewards(overrides?: CallOverrides): Promise; - - rewardManager(overrides?: CallOverrides): Promise; - - rewardPerToken(overrides?: CallOverrides): Promise; - - rewardPerTokenStored(overrides?: CallOverrides): Promise; - - rewardRate(overrides?: CallOverrides): Promise; - - rewardToken(overrides?: CallOverrides): Promise; - - rewards(arg0: string, overrides?: CallOverrides): Promise; - - stake( - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - stakeAll( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - stakeFor( - _for: string, - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - stakingToken(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - userRewardPerTokenPaid( - arg0: string, - overrides?: CallOverrides - ): Promise; - - withdraw( - amount: BigNumberish, - claim: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdrawAll( - claim: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdrawAllAndUnwrap( - claim: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdrawAndUnwrap( - amount: BigNumberish, - claim: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - addExtraReward( - _reward: string, - overrides?: CallOverrides - ): Promise; - - addRewardAmount( - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - clearExtraRewards(overrides?: CallOverrides): Promise; - - currentRewards(overrides?: CallOverrides): Promise; - - donate(arg0: BigNumberish, overrides?: CallOverrides): Promise; - - duration(overrides?: CallOverrides): Promise; - - earned(account: string, overrides?: CallOverrides): Promise; - - extraRewards( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - extraRewardsLength(overrides?: CallOverrides): Promise; - - "getReward()"(overrides?: CallOverrides): Promise; - - "getReward(address,bool)"( - _account: string, - _claimExtras: boolean, - overrides?: CallOverrides - ): Promise; - - historicalRewards(overrides?: CallOverrides): Promise; - - lastTimeRewardApplicable(overrides?: CallOverrides): Promise; - - lastUpdateTime(overrides?: CallOverrides): Promise; - - newRewardRatio(overrides?: CallOverrides): Promise; - - operator(overrides?: CallOverrides): Promise; - - periodFinish(overrides?: CallOverrides): Promise; - - pid(overrides?: CallOverrides): Promise; - - queueNewRewards( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - queuedRewards(overrides?: CallOverrides): Promise; - - rewardManager(overrides?: CallOverrides): Promise; - - rewardPerToken(overrides?: CallOverrides): Promise; - - rewardPerTokenStored(overrides?: CallOverrides): Promise; - - rewardRate(overrides?: CallOverrides): Promise; - - rewardToken(overrides?: CallOverrides): Promise; - - rewards(arg0: string, overrides?: CallOverrides): Promise; - - stake(_amount: BigNumberish, overrides?: CallOverrides): Promise; - - stakeAll(overrides?: CallOverrides): Promise; - - stakeFor( - _for: string, - _amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - stakingToken(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - userRewardPerTokenPaid( - arg0: string, - overrides?: CallOverrides - ): Promise; - - withdraw( - amount: BigNumberish, - claim: boolean, - overrides?: CallOverrides - ): Promise; - - withdrawAll(claim: boolean, overrides?: CallOverrides): Promise; - - withdrawAllAndUnwrap( - claim: boolean, - overrides?: CallOverrides - ): Promise; - - withdrawAndUnwrap( - amount: BigNumberish, - claim: boolean, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - "Mock_BaseRewardPaid(uint256,address,uint256)"( - index?: BigNumberish | null, - user?: string | null, - reward?: null - ): Mock_BaseRewardPaidEventFilter; - Mock_BaseRewardPaid( - index?: BigNumberish | null, - user?: string | null, - reward?: null - ): Mock_BaseRewardPaidEventFilter; - - "Mock_BaseStaked(uint256,address,uint256)"( - index?: BigNumberish | null, - user?: string | null, - amount?: null - ): Mock_BaseStakedEventFilter; - Mock_BaseStaked( - index?: BigNumberish | null, - user?: string | null, - amount?: null - ): Mock_BaseStakedEventFilter; - - "Mock_BaseWithdrawn(uint256,address,uint256)"( - index?: BigNumberish | null, - user?: string | null, - amount?: null - ): Mock_BaseWithdrawnEventFilter; - Mock_BaseWithdrawn( - index?: BigNumberish | null, - user?: string | null, - amount?: null - ): Mock_BaseWithdrawnEventFilter; - }; - - estimateGas: { - addExtraReward( - _reward: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - addRewardAmount( - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - clearExtraRewards( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - currentRewards(overrides?: CallOverrides): Promise; - - donate(arg0: BigNumberish, overrides?: CallOverrides): Promise; - - duration(overrides?: CallOverrides): Promise; - - earned(account: string, overrides?: CallOverrides): Promise; - - extraRewards( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - extraRewardsLength(overrides?: CallOverrides): Promise; - - "getReward()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "getReward(address,bool)"( - _account: string, - _claimExtras: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - historicalRewards(overrides?: CallOverrides): Promise; - - lastTimeRewardApplicable(overrides?: CallOverrides): Promise; - - lastUpdateTime(overrides?: CallOverrides): Promise; - - newRewardRatio(overrides?: CallOverrides): Promise; - - operator(overrides?: CallOverrides): Promise; - - periodFinish(overrides?: CallOverrides): Promise; - - pid(overrides?: CallOverrides): Promise; - - queueNewRewards( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - queuedRewards(overrides?: CallOverrides): Promise; - - rewardManager(overrides?: CallOverrides): Promise; - - rewardPerToken(overrides?: CallOverrides): Promise; - - rewardPerTokenStored(overrides?: CallOverrides): Promise; - - rewardRate(overrides?: CallOverrides): Promise; - - rewardToken(overrides?: CallOverrides): Promise; - - rewards(arg0: string, overrides?: CallOverrides): Promise; - - stake( - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - stakeAll( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - stakeFor( - _for: string, - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - stakingToken(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - userRewardPerTokenPaid( - arg0: string, - overrides?: CallOverrides - ): Promise; - - withdraw( - amount: BigNumberish, - claim: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdrawAll( - claim: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdrawAllAndUnwrap( - claim: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdrawAndUnwrap( - amount: BigNumberish, - claim: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - addExtraReward( - _reward: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - addRewardAmount( - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf( - account: string, - overrides?: CallOverrides - ): Promise; - - clearExtraRewards( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - currentRewards(overrides?: CallOverrides): Promise; - - donate( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - duration(overrides?: CallOverrides): Promise; - - earned( - account: string, - overrides?: CallOverrides - ): Promise; - - extraRewards( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - extraRewardsLength( - overrides?: CallOverrides - ): Promise; - - "getReward()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "getReward(address,bool)"( - _account: string, - _claimExtras: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - historicalRewards(overrides?: CallOverrides): Promise; - - lastTimeRewardApplicable( - overrides?: CallOverrides - ): Promise; - - lastUpdateTime(overrides?: CallOverrides): Promise; - - newRewardRatio(overrides?: CallOverrides): Promise; - - operator(overrides?: CallOverrides): Promise; - - periodFinish(overrides?: CallOverrides): Promise; - - pid(overrides?: CallOverrides): Promise; - - queueNewRewards( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - queuedRewards(overrides?: CallOverrides): Promise; - - rewardManager(overrides?: CallOverrides): Promise; - - rewardPerToken(overrides?: CallOverrides): Promise; - - rewardPerTokenStored( - overrides?: CallOverrides - ): Promise; - - rewardRate(overrides?: CallOverrides): Promise; - - rewardToken(overrides?: CallOverrides): Promise; - - rewards( - arg0: string, - overrides?: CallOverrides - ): Promise; - - stake( - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - stakeAll( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - stakeFor( - _for: string, - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - stakingToken(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - userRewardPerTokenPaid( - arg0: string, - overrides?: CallOverrides - ): Promise; - - withdraw( - amount: BigNumberish, - claim: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdrawAll( - claim: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdrawAllAndUnwrap( - claim: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdrawAndUnwrap( - amount: BigNumberish, - claim: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/src/types/contracts/test/sigp/NewConvexBaseRewardPoolMock.sol/index.ts b/src/types/contracts/test/sigp/NewConvexBaseRewardPoolMock.sol/index.ts deleted file mode 100644 index 25ac728c..00000000 --- a/src/types/contracts/test/sigp/NewConvexBaseRewardPoolMock.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { NewBaseRewardPoolMock } from "./NewBaseRewardPoolMock"; diff --git a/src/types/contracts/test/sigp/NewConvexBoosterMock.sol/NewBoosterMock.ts b/src/types/contracts/test/sigp/NewConvexBoosterMock.sol/NewBoosterMock.ts deleted file mode 100644 index fd5a787b..00000000 --- a/src/types/contracts/test/sigp/NewConvexBoosterMock.sol/NewBoosterMock.ts +++ /dev/null @@ -1,1002 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface NewBoosterMockInterface extends utils.Interface { - functions: { - "FEE_DENOMINATOR()": FunctionFragment; - "MaxFees()": FunctionFragment; - "addPool(address)": FunctionFragment; - "crv()": FunctionFragment; - "deposit(uint256,uint256,bool)": FunctionFragment; - "depositAll(uint256,bool)": FunctionFragment; - "distributionAddressId()": FunctionFragment; - "earmarkIncentive()": FunctionFragment; - "feeDistro()": FunctionFragment; - "feeManager()": FunctionFragment; - "feeToken()": FunctionFragment; - "gaugeMap(address)": FunctionFragment; - "index()": FunctionFragment; - "isShutdown()": FunctionFragment; - "lockFees()": FunctionFragment; - "lockIncentive()": FunctionFragment; - "lockRewards()": FunctionFragment; - "minter()": FunctionFragment; - "owner()": FunctionFragment; - "platformFee()": FunctionFragment; - "poolInfo(uint256)": FunctionFragment; - "poolLength()": FunctionFragment; - "poolManager()": FunctionFragment; - "registry()": FunctionFragment; - "rewardArbitrator()": FunctionFragment; - "rewardClaimed(uint256,address,uint256)": FunctionFragment; - "rewardFactory()": FunctionFragment; - "staker()": FunctionFragment; - "stakerIncentive()": FunctionFragment; - "stakerRewards()": FunctionFragment; - "stashFactory()": FunctionFragment; - "tokenFactory()": FunctionFragment; - "treasury()": FunctionFragment; - "voteDelegate()": FunctionFragment; - "voteOwnership()": FunctionFragment; - "voteParameter()": FunctionFragment; - "withdraw(uint256,uint256)": FunctionFragment; - "withdrawAll(uint256)": FunctionFragment; - "withdrawTo(uint256,uint256,address)": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "FEE_DENOMINATOR" - | "MaxFees" - | "addPool" - | "crv" - | "deposit" - | "depositAll" - | "distributionAddressId" - | "earmarkIncentive" - | "feeDistro" - | "feeManager" - | "feeToken" - | "gaugeMap" - | "index" - | "isShutdown" - | "lockFees" - | "lockIncentive" - | "lockRewards" - | "minter" - | "owner" - | "platformFee" - | "poolInfo" - | "poolLength" - | "poolManager" - | "registry" - | "rewardArbitrator" - | "rewardClaimed" - | "rewardFactory" - | "staker" - | "stakerIncentive" - | "stakerRewards" - | "stashFactory" - | "tokenFactory" - | "treasury" - | "voteDelegate" - | "voteOwnership" - | "voteParameter" - | "withdraw" - | "withdrawAll" - | "withdrawTo" - ): FunctionFragment; - - encodeFunctionData( - functionFragment: "FEE_DENOMINATOR", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "MaxFees", values?: undefined): string; - encodeFunctionData(functionFragment: "addPool", values: [string]): string; - encodeFunctionData(functionFragment: "crv", values?: undefined): string; - encodeFunctionData( - functionFragment: "deposit", - values: [BigNumberish, BigNumberish, boolean] - ): string; - encodeFunctionData( - functionFragment: "depositAll", - values: [BigNumberish, boolean] - ): string; - encodeFunctionData( - functionFragment: "distributionAddressId", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "earmarkIncentive", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "feeDistro", values?: undefined): string; - encodeFunctionData( - functionFragment: "feeManager", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "feeToken", values?: undefined): string; - encodeFunctionData(functionFragment: "gaugeMap", values: [string]): string; - encodeFunctionData(functionFragment: "index", values?: undefined): string; - encodeFunctionData( - functionFragment: "isShutdown", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "lockFees", values?: undefined): string; - encodeFunctionData( - functionFragment: "lockIncentive", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "lockRewards", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "minter", values?: undefined): string; - encodeFunctionData(functionFragment: "owner", values?: undefined): string; - encodeFunctionData( - functionFragment: "platformFee", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "poolInfo", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "poolLength", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "poolManager", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "registry", values?: undefined): string; - encodeFunctionData( - functionFragment: "rewardArbitrator", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "rewardClaimed", - values: [BigNumberish, string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "rewardFactory", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "staker", values?: undefined): string; - encodeFunctionData( - functionFragment: "stakerIncentive", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "stakerRewards", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "stashFactory", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "tokenFactory", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "treasury", values?: undefined): string; - encodeFunctionData( - functionFragment: "voteDelegate", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "voteOwnership", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "voteParameter", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "withdraw", - values: [BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "withdrawAll", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "withdrawTo", - values: [BigNumberish, BigNumberish, string] - ): string; - - decodeFunctionResult( - functionFragment: "FEE_DENOMINATOR", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "MaxFees", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "addPool", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "crv", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "deposit", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "depositAll", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "distributionAddressId", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "earmarkIncentive", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "feeDistro", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "feeManager", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "feeToken", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "gaugeMap", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "index", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "isShutdown", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "lockFees", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "lockIncentive", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "lockRewards", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "minter", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "platformFee", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "poolInfo", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "poolLength", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "poolManager", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "registry", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "rewardArbitrator", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "rewardClaimed", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "rewardFactory", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "staker", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "stakerIncentive", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "stakerRewards", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "stashFactory", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "tokenFactory", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "treasury", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "voteDelegate", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "voteOwnership", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "voteParameter", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "withdraw", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "withdrawAll", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "withdrawTo", data: BytesLike): Result; - - events: { - "Mock_Deposited(uint256,address,uint256,uint256,bool)": EventFragment; - "Mock_Withdrawn(uint256,address,uint256,uint256)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "Mock_Deposited"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Mock_Withdrawn"): EventFragment; -} - -export interface Mock_DepositedEventObject { - index: BigNumber; - user: string; - poolid: BigNumber; - amount: BigNumber; - _stake: boolean; -} -export type Mock_DepositedEvent = TypedEvent< - [BigNumber, string, BigNumber, BigNumber, boolean], - Mock_DepositedEventObject ->; - -export type Mock_DepositedEventFilter = TypedEventFilter; - -export interface Mock_WithdrawnEventObject { - index: BigNumber; - user: string; - poolid: BigNumber; - amount: BigNumber; -} -export type Mock_WithdrawnEvent = TypedEvent< - [BigNumber, string, BigNumber, BigNumber], - Mock_WithdrawnEventObject ->; - -export type Mock_WithdrawnEventFilter = TypedEventFilter; - -export interface NewBoosterMock extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: NewBoosterMockInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - FEE_DENOMINATOR(overrides?: CallOverrides): Promise<[BigNumber]>; - - MaxFees(overrides?: CallOverrides): Promise<[BigNumber]>; - - addPool( - _lptoken: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - crv(overrides?: CallOverrides): Promise<[string]>; - - deposit( - _pid: BigNumberish, - _amount: BigNumberish, - _stake: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - depositAll( - _pid: BigNumberish, - _stake: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - distributionAddressId(overrides?: CallOverrides): Promise<[BigNumber]>; - - earmarkIncentive(overrides?: CallOverrides): Promise<[BigNumber]>; - - feeDistro(overrides?: CallOverrides): Promise<[string]>; - - feeManager(overrides?: CallOverrides): Promise<[string]>; - - feeToken(overrides?: CallOverrides): Promise<[string]>; - - gaugeMap(arg0: string, overrides?: CallOverrides): Promise<[boolean]>; - - index(overrides?: CallOverrides): Promise<[BigNumber]>; - - isShutdown(overrides?: CallOverrides): Promise<[boolean]>; - - lockFees(overrides?: CallOverrides): Promise<[string]>; - - lockIncentive(overrides?: CallOverrides): Promise<[BigNumber]>; - - lockRewards(overrides?: CallOverrides): Promise<[string]>; - - minter(overrides?: CallOverrides): Promise<[string]>; - - owner(overrides?: CallOverrides): Promise<[string]>; - - platformFee(overrides?: CallOverrides): Promise<[BigNumber]>; - - poolInfo( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise< - [string, string, string, string, string, boolean] & { - lptoken: string; - token: string; - gauge: string; - crvRewards: string; - stash: string; - shutdown: boolean; - } - >; - - poolLength(overrides?: CallOverrides): Promise<[BigNumber]>; - - poolManager(overrides?: CallOverrides): Promise<[string]>; - - registry(overrides?: CallOverrides): Promise<[string]>; - - rewardArbitrator(overrides?: CallOverrides): Promise<[string]>; - - rewardClaimed( - _pid: BigNumberish, - _address: string, - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - rewardFactory(overrides?: CallOverrides): Promise<[string]>; - - staker(overrides?: CallOverrides): Promise<[string]>; - - stakerIncentive(overrides?: CallOverrides): Promise<[BigNumber]>; - - stakerRewards(overrides?: CallOverrides): Promise<[string]>; - - stashFactory(overrides?: CallOverrides): Promise<[string]>; - - tokenFactory(overrides?: CallOverrides): Promise<[string]>; - - treasury(overrides?: CallOverrides): Promise<[string]>; - - voteDelegate(overrides?: CallOverrides): Promise<[string]>; - - voteOwnership(overrides?: CallOverrides): Promise<[string]>; - - voteParameter(overrides?: CallOverrides): Promise<[string]>; - - withdraw( - _pid: BigNumberish, - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdrawAll( - _pid: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdrawTo( - _pid: BigNumberish, - _amount: BigNumberish, - _to: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - FEE_DENOMINATOR(overrides?: CallOverrides): Promise; - - MaxFees(overrides?: CallOverrides): Promise; - - addPool( - _lptoken: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - crv(overrides?: CallOverrides): Promise; - - deposit( - _pid: BigNumberish, - _amount: BigNumberish, - _stake: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - depositAll( - _pid: BigNumberish, - _stake: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - distributionAddressId(overrides?: CallOverrides): Promise; - - earmarkIncentive(overrides?: CallOverrides): Promise; - - feeDistro(overrides?: CallOverrides): Promise; - - feeManager(overrides?: CallOverrides): Promise; - - feeToken(overrides?: CallOverrides): Promise; - - gaugeMap(arg0: string, overrides?: CallOverrides): Promise; - - index(overrides?: CallOverrides): Promise; - - isShutdown(overrides?: CallOverrides): Promise; - - lockFees(overrides?: CallOverrides): Promise; - - lockIncentive(overrides?: CallOverrides): Promise; - - lockRewards(overrides?: CallOverrides): Promise; - - minter(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - platformFee(overrides?: CallOverrides): Promise; - - poolInfo( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise< - [string, string, string, string, string, boolean] & { - lptoken: string; - token: string; - gauge: string; - crvRewards: string; - stash: string; - shutdown: boolean; - } - >; - - poolLength(overrides?: CallOverrides): Promise; - - poolManager(overrides?: CallOverrides): Promise; - - registry(overrides?: CallOverrides): Promise; - - rewardArbitrator(overrides?: CallOverrides): Promise; - - rewardClaimed( - _pid: BigNumberish, - _address: string, - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - rewardFactory(overrides?: CallOverrides): Promise; - - staker(overrides?: CallOverrides): Promise; - - stakerIncentive(overrides?: CallOverrides): Promise; - - stakerRewards(overrides?: CallOverrides): Promise; - - stashFactory(overrides?: CallOverrides): Promise; - - tokenFactory(overrides?: CallOverrides): Promise; - - treasury(overrides?: CallOverrides): Promise; - - voteDelegate(overrides?: CallOverrides): Promise; - - voteOwnership(overrides?: CallOverrides): Promise; - - voteParameter(overrides?: CallOverrides): Promise; - - withdraw( - _pid: BigNumberish, - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdrawAll( - _pid: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdrawTo( - _pid: BigNumberish, - _amount: BigNumberish, - _to: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - FEE_DENOMINATOR(overrides?: CallOverrides): Promise; - - MaxFees(overrides?: CallOverrides): Promise; - - addPool(_lptoken: string, overrides?: CallOverrides): Promise; - - crv(overrides?: CallOverrides): Promise; - - deposit( - _pid: BigNumberish, - _amount: BigNumberish, - _stake: boolean, - overrides?: CallOverrides - ): Promise; - - depositAll( - _pid: BigNumberish, - _stake: boolean, - overrides?: CallOverrides - ): Promise; - - distributionAddressId(overrides?: CallOverrides): Promise; - - earmarkIncentive(overrides?: CallOverrides): Promise; - - feeDistro(overrides?: CallOverrides): Promise; - - feeManager(overrides?: CallOverrides): Promise; - - feeToken(overrides?: CallOverrides): Promise; - - gaugeMap(arg0: string, overrides?: CallOverrides): Promise; - - index(overrides?: CallOverrides): Promise; - - isShutdown(overrides?: CallOverrides): Promise; - - lockFees(overrides?: CallOverrides): Promise; - - lockIncentive(overrides?: CallOverrides): Promise; - - lockRewards(overrides?: CallOverrides): Promise; - - minter(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - platformFee(overrides?: CallOverrides): Promise; - - poolInfo( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise< - [string, string, string, string, string, boolean] & { - lptoken: string; - token: string; - gauge: string; - crvRewards: string; - stash: string; - shutdown: boolean; - } - >; - - poolLength(overrides?: CallOverrides): Promise; - - poolManager(overrides?: CallOverrides): Promise; - - registry(overrides?: CallOverrides): Promise; - - rewardArbitrator(overrides?: CallOverrides): Promise; - - rewardClaimed( - _pid: BigNumberish, - _address: string, - _amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - rewardFactory(overrides?: CallOverrides): Promise; - - staker(overrides?: CallOverrides): Promise; - - stakerIncentive(overrides?: CallOverrides): Promise; - - stakerRewards(overrides?: CallOverrides): Promise; - - stashFactory(overrides?: CallOverrides): Promise; - - tokenFactory(overrides?: CallOverrides): Promise; - - treasury(overrides?: CallOverrides): Promise; - - voteDelegate(overrides?: CallOverrides): Promise; - - voteOwnership(overrides?: CallOverrides): Promise; - - voteParameter(overrides?: CallOverrides): Promise; - - withdraw( - _pid: BigNumberish, - _amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - withdrawAll( - _pid: BigNumberish, - overrides?: CallOverrides - ): Promise; - - withdrawTo( - _pid: BigNumberish, - _amount: BigNumberish, - _to: string, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - "Mock_Deposited(uint256,address,uint256,uint256,bool)"( - index?: null, - user?: string | null, - poolid?: BigNumberish | null, - amount?: null, - _stake?: null - ): Mock_DepositedEventFilter; - Mock_Deposited( - index?: null, - user?: string | null, - poolid?: BigNumberish | null, - amount?: null, - _stake?: null - ): Mock_DepositedEventFilter; - - "Mock_Withdrawn(uint256,address,uint256,uint256)"( - index?: null, - user?: string | null, - poolid?: BigNumberish | null, - amount?: null - ): Mock_WithdrawnEventFilter; - Mock_Withdrawn( - index?: null, - user?: string | null, - poolid?: BigNumberish | null, - amount?: null - ): Mock_WithdrawnEventFilter; - }; - - estimateGas: { - FEE_DENOMINATOR(overrides?: CallOverrides): Promise; - - MaxFees(overrides?: CallOverrides): Promise; - - addPool( - _lptoken: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - crv(overrides?: CallOverrides): Promise; - - deposit( - _pid: BigNumberish, - _amount: BigNumberish, - _stake: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - depositAll( - _pid: BigNumberish, - _stake: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - distributionAddressId(overrides?: CallOverrides): Promise; - - earmarkIncentive(overrides?: CallOverrides): Promise; - - feeDistro(overrides?: CallOverrides): Promise; - - feeManager(overrides?: CallOverrides): Promise; - - feeToken(overrides?: CallOverrides): Promise; - - gaugeMap(arg0: string, overrides?: CallOverrides): Promise; - - index(overrides?: CallOverrides): Promise; - - isShutdown(overrides?: CallOverrides): Promise; - - lockFees(overrides?: CallOverrides): Promise; - - lockIncentive(overrides?: CallOverrides): Promise; - - lockRewards(overrides?: CallOverrides): Promise; - - minter(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - platformFee(overrides?: CallOverrides): Promise; - - poolInfo(arg0: BigNumberish, overrides?: CallOverrides): Promise; - - poolLength(overrides?: CallOverrides): Promise; - - poolManager(overrides?: CallOverrides): Promise; - - registry(overrides?: CallOverrides): Promise; - - rewardArbitrator(overrides?: CallOverrides): Promise; - - rewardClaimed( - _pid: BigNumberish, - _address: string, - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - rewardFactory(overrides?: CallOverrides): Promise; - - staker(overrides?: CallOverrides): Promise; - - stakerIncentive(overrides?: CallOverrides): Promise; - - stakerRewards(overrides?: CallOverrides): Promise; - - stashFactory(overrides?: CallOverrides): Promise; - - tokenFactory(overrides?: CallOverrides): Promise; - - treasury(overrides?: CallOverrides): Promise; - - voteDelegate(overrides?: CallOverrides): Promise; - - voteOwnership(overrides?: CallOverrides): Promise; - - voteParameter(overrides?: CallOverrides): Promise; - - withdraw( - _pid: BigNumberish, - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdrawAll( - _pid: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdrawTo( - _pid: BigNumberish, - _amount: BigNumberish, - _to: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - FEE_DENOMINATOR(overrides?: CallOverrides): Promise; - - MaxFees(overrides?: CallOverrides): Promise; - - addPool( - _lptoken: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - crv(overrides?: CallOverrides): Promise; - - deposit( - _pid: BigNumberish, - _amount: BigNumberish, - _stake: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - depositAll( - _pid: BigNumberish, - _stake: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - distributionAddressId( - overrides?: CallOverrides - ): Promise; - - earmarkIncentive(overrides?: CallOverrides): Promise; - - feeDistro(overrides?: CallOverrides): Promise; - - feeManager(overrides?: CallOverrides): Promise; - - feeToken(overrides?: CallOverrides): Promise; - - gaugeMap( - arg0: string, - overrides?: CallOverrides - ): Promise; - - index(overrides?: CallOverrides): Promise; - - isShutdown(overrides?: CallOverrides): Promise; - - lockFees(overrides?: CallOverrides): Promise; - - lockIncentive(overrides?: CallOverrides): Promise; - - lockRewards(overrides?: CallOverrides): Promise; - - minter(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - platformFee(overrides?: CallOverrides): Promise; - - poolInfo( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - poolLength(overrides?: CallOverrides): Promise; - - poolManager(overrides?: CallOverrides): Promise; - - registry(overrides?: CallOverrides): Promise; - - rewardArbitrator(overrides?: CallOverrides): Promise; - - rewardClaimed( - _pid: BigNumberish, - _address: string, - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - rewardFactory(overrides?: CallOverrides): Promise; - - staker(overrides?: CallOverrides): Promise; - - stakerIncentive(overrides?: CallOverrides): Promise; - - stakerRewards(overrides?: CallOverrides): Promise; - - stashFactory(overrides?: CallOverrides): Promise; - - tokenFactory(overrides?: CallOverrides): Promise; - - treasury(overrides?: CallOverrides): Promise; - - voteDelegate(overrides?: CallOverrides): Promise; - - voteOwnership(overrides?: CallOverrides): Promise; - - voteParameter(overrides?: CallOverrides): Promise; - - withdraw( - _pid: BigNumberish, - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdrawAll( - _pid: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdrawTo( - _pid: BigNumberish, - _amount: BigNumberish, - _to: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/src/types/contracts/test/sigp/NewConvexBoosterMock.sol/index.ts b/src/types/contracts/test/sigp/NewConvexBoosterMock.sol/index.ts deleted file mode 100644 index f188acbc..00000000 --- a/src/types/contracts/test/sigp/NewConvexBoosterMock.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { NewBoosterMock } from "./NewBoosterMock"; diff --git a/src/types/contracts/test/sigp/NewCreditConfigurator.ts b/src/types/contracts/test/sigp/NewCreditConfigurator.ts deleted file mode 100644 index 5f31a7bb..00000000 --- a/src/types/contracts/test/sigp/NewCreditConfigurator.ts +++ /dev/null @@ -1,1262 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../common"; - -export type CollateralTokenStruct = { - token: string; - liquidationThreshold: BigNumberish; -}; - -export type CollateralTokenStructOutput = [string, number] & { - token: string; - liquidationThreshold: number; -}; - -export type CreditManagerOptsStruct = { - minBorrowedAmount: BigNumberish; - maxBorrowedAmount: BigNumberish; - collateralTokens: CollateralTokenStruct[]; - degenNFT: string; - expirable: boolean; -}; - -export type CreditManagerOptsStructOutput = [ - BigNumber, - BigNumber, - CollateralTokenStructOutput[], - string, - boolean -] & { - minBorrowedAmount: BigNumber; - maxBorrowedAmount: BigNumber; - collateralTokens: CollateralTokenStructOutput[]; - degenNFT: string; - expirable: boolean; -}; - -export interface NewCreditConfiguratorInterface extends utils.Interface { - functions: { - "_acl()": FunctionFragment; - "addCollateralToken(address,uint16)": FunctionFragment; - "addContractToUpgradeable(address)": FunctionFragment; - "addressProvider()": FunctionFragment; - "allowContract(address,address)": FunctionFragment; - "allowToken(address)": FunctionFragment; - "allowedContracts(uint256)": FunctionFragment; - "allowedContractsCount()": FunctionFragment; - "creditFacade()": FunctionFragment; - "creditManager()": FunctionFragment; - "forbidContract(address)": FunctionFragment; - "forbidToken(address)": FunctionFragment; - "pause()": FunctionFragment; - "paused()": FunctionFragment; - "removeContractFromUpgradeable(address)": FunctionFragment; - "setExpirationDate(uint40)": FunctionFragment; - "setFees(uint16,uint16,uint16,uint16,uint16)": FunctionFragment; - "setIncreaseDebtForbidden(bool)": FunctionFragment; - "setLimitPerBlock(uint128)": FunctionFragment; - "setLimits(uint128,uint128)": FunctionFragment; - "setLiquidationThreshold(address,uint16)": FunctionFragment; - "underlying()": FunctionFragment; - "unpause()": FunctionFragment; - "upgradeCreditConfigurator(address)": FunctionFragment; - "upgradeCreditFacade(address,bool)": FunctionFragment; - "upgradePriceOracle()": FunctionFragment; - "version()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "_acl" - | "addCollateralToken" - | "addContractToUpgradeable" - | "addressProvider" - | "allowContract" - | "allowToken" - | "allowedContracts" - | "allowedContractsCount" - | "creditFacade" - | "creditManager" - | "forbidContract" - | "forbidToken" - | "pause" - | "paused" - | "removeContractFromUpgradeable" - | "setExpirationDate" - | "setFees" - | "setIncreaseDebtForbidden" - | "setLimitPerBlock" - | "setLimits" - | "setLiquidationThreshold" - | "underlying" - | "unpause" - | "upgradeCreditConfigurator" - | "upgradeCreditFacade" - | "upgradePriceOracle" - | "version" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "_acl", values?: undefined): string; - encodeFunctionData( - functionFragment: "addCollateralToken", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "addContractToUpgradeable", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "addressProvider", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "allowContract", - values: [string, string] - ): string; - encodeFunctionData(functionFragment: "allowToken", values: [string]): string; - encodeFunctionData( - functionFragment: "allowedContracts", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "allowedContractsCount", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditFacade", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditManager", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "forbidContract", - values: [string] - ): string; - encodeFunctionData(functionFragment: "forbidToken", values: [string]): string; - encodeFunctionData(functionFragment: "pause", values?: undefined): string; - encodeFunctionData(functionFragment: "paused", values?: undefined): string; - encodeFunctionData( - functionFragment: "removeContractFromUpgradeable", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "setExpirationDate", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "setFees", - values: [ - BigNumberish, - BigNumberish, - BigNumberish, - BigNumberish, - BigNumberish - ] - ): string; - encodeFunctionData( - functionFragment: "setIncreaseDebtForbidden", - values: [boolean] - ): string; - encodeFunctionData( - functionFragment: "setLimitPerBlock", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "setLimits", - values: [BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "setLiquidationThreshold", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "underlying", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "unpause", values?: undefined): string; - encodeFunctionData( - functionFragment: "upgradeCreditConfigurator", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "upgradeCreditFacade", - values: [string, boolean] - ): string; - encodeFunctionData( - functionFragment: "upgradePriceOracle", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "version", values?: undefined): string; - - decodeFunctionResult(functionFragment: "_acl", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "addCollateralToken", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "addContractToUpgradeable", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "addressProvider", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "allowContract", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "allowToken", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "allowedContracts", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "allowedContractsCount", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditFacade", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditManager", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "forbidContract", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "forbidToken", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "pause", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "paused", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "removeContractFromUpgradeable", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "setExpirationDate", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "setFees", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "setIncreaseDebtForbidden", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "setLimitPerBlock", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "setLimits", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "setLiquidationThreshold", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "underlying", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "unpause", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "upgradeCreditConfigurator", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "upgradeCreditFacade", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "upgradePriceOracle", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "version", data: BytesLike): Result; - - events: { - "AddedToUpgradeable(address)": EventFragment; - "ContractAllowed(address,address)": EventFragment; - "ContractForbidden(address)": EventFragment; - "CreditConfiguratorUpgraded(address)": EventFragment; - "CreditFacadeUpgraded(address)": EventFragment; - "DegenModeUpdated(bool)": EventFragment; - "ExpirationDateUpdated(uint40)": EventFragment; - "FeesUpdated(uint16,uint16,uint16,uint16,uint16)": EventFragment; - "IncreaseDebtModeUpdated(bool)": EventFragment; - "LimitPerBlockUpdated(uint128)": EventFragment; - "LimitsUpdated(uint256,uint256)": EventFragment; - "MaxEnabledTokensUpdated(uint8)": EventFragment; - "Paused(address)": EventFragment; - "PriceOracleUpgraded(address)": EventFragment; - "RemovedFromUpgradeable(address)": EventFragment; - "TokenAllowed(address)": EventFragment; - "TokenForbidden(address)": EventFragment; - "TokenLiquidationThresholdUpdated(address,uint16)": EventFragment; - "Unpaused(address)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "AddedToUpgradeable"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ContractAllowed"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ContractForbidden"): EventFragment; - getEvent(nameOrSignatureOrTopic: "CreditConfiguratorUpgraded"): EventFragment; - getEvent(nameOrSignatureOrTopic: "CreditFacadeUpgraded"): EventFragment; - getEvent(nameOrSignatureOrTopic: "DegenModeUpdated"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ExpirationDateUpdated"): EventFragment; - getEvent(nameOrSignatureOrTopic: "FeesUpdated"): EventFragment; - getEvent(nameOrSignatureOrTopic: "IncreaseDebtModeUpdated"): EventFragment; - getEvent(nameOrSignatureOrTopic: "LimitPerBlockUpdated"): EventFragment; - getEvent(nameOrSignatureOrTopic: "LimitsUpdated"): EventFragment; - getEvent(nameOrSignatureOrTopic: "MaxEnabledTokensUpdated"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Paused"): EventFragment; - getEvent(nameOrSignatureOrTopic: "PriceOracleUpgraded"): EventFragment; - getEvent(nameOrSignatureOrTopic: "RemovedFromUpgradeable"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TokenAllowed"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TokenForbidden"): EventFragment; - getEvent( - nameOrSignatureOrTopic: "TokenLiquidationThresholdUpdated" - ): EventFragment; - getEvent(nameOrSignatureOrTopic: "Unpaused"): EventFragment; -} - -export interface AddedToUpgradeableEventObject { - arg0: string; -} -export type AddedToUpgradeableEvent = TypedEvent< - [string], - AddedToUpgradeableEventObject ->; - -export type AddedToUpgradeableEventFilter = - TypedEventFilter; - -export interface ContractAllowedEventObject { - protocol: string; - adapter: string; -} -export type ContractAllowedEvent = TypedEvent< - [string, string], - ContractAllowedEventObject ->; - -export type ContractAllowedEventFilter = TypedEventFilter; - -export interface ContractForbiddenEventObject { - protocol: string; -} -export type ContractForbiddenEvent = TypedEvent< - [string], - ContractForbiddenEventObject ->; - -export type ContractForbiddenEventFilter = - TypedEventFilter; - -export interface CreditConfiguratorUpgradedEventObject { - newCreditConfigurator: string; -} -export type CreditConfiguratorUpgradedEvent = TypedEvent< - [string], - CreditConfiguratorUpgradedEventObject ->; - -export type CreditConfiguratorUpgradedEventFilter = - TypedEventFilter; - -export interface CreditFacadeUpgradedEventObject { - newCreditFacade: string; -} -export type CreditFacadeUpgradedEvent = TypedEvent< - [string], - CreditFacadeUpgradedEventObject ->; - -export type CreditFacadeUpgradedEventFilter = - TypedEventFilter; - -export interface DegenModeUpdatedEventObject { - arg0: boolean; -} -export type DegenModeUpdatedEvent = TypedEvent< - [boolean], - DegenModeUpdatedEventObject ->; - -export type DegenModeUpdatedEventFilter = - TypedEventFilter; - -export interface ExpirationDateUpdatedEventObject { - arg0: number; -} -export type ExpirationDateUpdatedEvent = TypedEvent< - [number], - ExpirationDateUpdatedEventObject ->; - -export type ExpirationDateUpdatedEventFilter = - TypedEventFilter; - -export interface FeesUpdatedEventObject { - feeInterest: number; - feeLiquidation: number; - liquidationPremium: number; - feeLiquidationExpired: number; - liquidationPremiumExpired: number; -} -export type FeesUpdatedEvent = TypedEvent< - [number, number, number, number, number], - FeesUpdatedEventObject ->; - -export type FeesUpdatedEventFilter = TypedEventFilter; - -export interface IncreaseDebtModeUpdatedEventObject { - arg0: boolean; -} -export type IncreaseDebtModeUpdatedEvent = TypedEvent< - [boolean], - IncreaseDebtModeUpdatedEventObject ->; - -export type IncreaseDebtModeUpdatedEventFilter = - TypedEventFilter; - -export interface LimitPerBlockUpdatedEventObject { - arg0: BigNumber; -} -export type LimitPerBlockUpdatedEvent = TypedEvent< - [BigNumber], - LimitPerBlockUpdatedEventObject ->; - -export type LimitPerBlockUpdatedEventFilter = - TypedEventFilter; - -export interface LimitsUpdatedEventObject { - minBorrowedAmount: BigNumber; - maxBorrowedAmount: BigNumber; -} -export type LimitsUpdatedEvent = TypedEvent< - [BigNumber, BigNumber], - LimitsUpdatedEventObject ->; - -export type LimitsUpdatedEventFilter = TypedEventFilter; - -export interface MaxEnabledTokensUpdatedEventObject { - arg0: number; -} -export type MaxEnabledTokensUpdatedEvent = TypedEvent< - [number], - MaxEnabledTokensUpdatedEventObject ->; - -export type MaxEnabledTokensUpdatedEventFilter = - TypedEventFilter; - -export interface PausedEventObject { - account: string; -} -export type PausedEvent = TypedEvent<[string], PausedEventObject>; - -export type PausedEventFilter = TypedEventFilter; - -export interface PriceOracleUpgradedEventObject { - newPriceOracle: string; -} -export type PriceOracleUpgradedEvent = TypedEvent< - [string], - PriceOracleUpgradedEventObject ->; - -export type PriceOracleUpgradedEventFilter = - TypedEventFilter; - -export interface RemovedFromUpgradeableEventObject { - arg0: string; -} -export type RemovedFromUpgradeableEvent = TypedEvent< - [string], - RemovedFromUpgradeableEventObject ->; - -export type RemovedFromUpgradeableEventFilter = - TypedEventFilter; - -export interface TokenAllowedEventObject { - token: string; -} -export type TokenAllowedEvent = TypedEvent<[string], TokenAllowedEventObject>; - -export type TokenAllowedEventFilter = TypedEventFilter; - -export interface TokenForbiddenEventObject { - token: string; -} -export type TokenForbiddenEvent = TypedEvent< - [string], - TokenForbiddenEventObject ->; - -export type TokenForbiddenEventFilter = TypedEventFilter; - -export interface TokenLiquidationThresholdUpdatedEventObject { - token: string; - liquidityThreshold: number; -} -export type TokenLiquidationThresholdUpdatedEvent = TypedEvent< - [string, number], - TokenLiquidationThresholdUpdatedEventObject ->; - -export type TokenLiquidationThresholdUpdatedEventFilter = - TypedEventFilter; - -export interface UnpausedEventObject { - account: string; -} -export type UnpausedEvent = TypedEvent<[string], UnpausedEventObject>; - -export type UnpausedEventFilter = TypedEventFilter; - -export interface NewCreditConfigurator extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: NewCreditConfiguratorInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - _acl(overrides?: CallOverrides): Promise<[string]>; - - addCollateralToken( - token: string, - liquidationThreshold: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - addContractToUpgradeable( - addr: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - addressProvider(overrides?: CallOverrides): Promise<[string]>; - - allowContract( - targetContract: string, - adapter: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - allowToken( - token: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - allowedContracts( - i: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - allowedContractsCount(overrides?: CallOverrides): Promise<[BigNumber]>; - - creditFacade(overrides?: CallOverrides): Promise<[string]>; - - creditManager(overrides?: CallOverrides): Promise<[string]>; - - forbidContract( - targetContract: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - forbidToken( - token: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise<[boolean]>; - - removeContractFromUpgradeable( - addr: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setExpirationDate( - newExpirationDate: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setFees( - _feeInterest: BigNumberish, - _feeLiquidation: BigNumberish, - _liquidationPremium: BigNumberish, - _feeLiquidationExpired: BigNumberish, - _liquidationPremiumExpired: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setIncreaseDebtForbidden( - _mode: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setLimitPerBlock( - newLimit: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setLimits( - _minBorrowedAmount: BigNumberish, - _maxBorrowedAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setLiquidationThreshold( - token: string, - liquidationThreshold: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise<[string]>; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upgradeCreditConfigurator( - _creditConfigurator: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upgradeCreditFacade( - _creditFacade: string, - migrateParams: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upgradePriceOracle( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise<[BigNumber]>; - }; - - _acl(overrides?: CallOverrides): Promise; - - addCollateralToken( - token: string, - liquidationThreshold: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - addContractToUpgradeable( - addr: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - addressProvider(overrides?: CallOverrides): Promise; - - allowContract( - targetContract: string, - adapter: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - allowToken( - token: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - allowedContracts(i: BigNumberish, overrides?: CallOverrides): Promise; - - allowedContractsCount(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - forbidContract( - targetContract: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - forbidToken( - token: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise; - - removeContractFromUpgradeable( - addr: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setExpirationDate( - newExpirationDate: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setFees( - _feeInterest: BigNumberish, - _feeLiquidation: BigNumberish, - _liquidationPremium: BigNumberish, - _feeLiquidationExpired: BigNumberish, - _liquidationPremiumExpired: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setIncreaseDebtForbidden( - _mode: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setLimitPerBlock( - newLimit: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setLimits( - _minBorrowedAmount: BigNumberish, - _maxBorrowedAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setLiquidationThreshold( - token: string, - liquidationThreshold: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upgradeCreditConfigurator( - _creditConfigurator: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upgradeCreditFacade( - _creditFacade: string, - migrateParams: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upgradePriceOracle( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise; - - callStatic: { - _acl(overrides?: CallOverrides): Promise; - - addCollateralToken( - token: string, - liquidationThreshold: BigNumberish, - overrides?: CallOverrides - ): Promise; - - addContractToUpgradeable( - addr: string, - overrides?: CallOverrides - ): Promise; - - addressProvider(overrides?: CallOverrides): Promise; - - allowContract( - targetContract: string, - adapter: string, - overrides?: CallOverrides - ): Promise; - - allowToken(token: string, overrides?: CallOverrides): Promise; - - allowedContracts( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - allowedContractsCount(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - forbidContract( - targetContract: string, - overrides?: CallOverrides - ): Promise; - - forbidToken(token: string, overrides?: CallOverrides): Promise; - - pause(overrides?: CallOverrides): Promise; - - paused(overrides?: CallOverrides): Promise; - - removeContractFromUpgradeable( - addr: string, - overrides?: CallOverrides - ): Promise; - - setExpirationDate( - newExpirationDate: BigNumberish, - overrides?: CallOverrides - ): Promise; - - setFees( - _feeInterest: BigNumberish, - _feeLiquidation: BigNumberish, - _liquidationPremium: BigNumberish, - _feeLiquidationExpired: BigNumberish, - _liquidationPremiumExpired: BigNumberish, - overrides?: CallOverrides - ): Promise; - - setIncreaseDebtForbidden( - _mode: boolean, - overrides?: CallOverrides - ): Promise; - - setLimitPerBlock( - newLimit: BigNumberish, - overrides?: CallOverrides - ): Promise; - - setLimits( - _minBorrowedAmount: BigNumberish, - _maxBorrowedAmount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - setLiquidationThreshold( - token: string, - liquidationThreshold: BigNumberish, - overrides?: CallOverrides - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - - unpause(overrides?: CallOverrides): Promise; - - upgradeCreditConfigurator( - _creditConfigurator: string, - overrides?: CallOverrides - ): Promise; - - upgradeCreditFacade( - _creditFacade: string, - migrateParams: boolean, - overrides?: CallOverrides - ): Promise; - - upgradePriceOracle(overrides?: CallOverrides): Promise; - - version(overrides?: CallOverrides): Promise; - }; - - filters: { - "AddedToUpgradeable(address)"(arg0?: null): AddedToUpgradeableEventFilter; - AddedToUpgradeable(arg0?: null): AddedToUpgradeableEventFilter; - - "ContractAllowed(address,address)"( - protocol?: string | null, - adapter?: string | null - ): ContractAllowedEventFilter; - ContractAllowed( - protocol?: string | null, - adapter?: string | null - ): ContractAllowedEventFilter; - - "ContractForbidden(address)"( - protocol?: string | null - ): ContractForbiddenEventFilter; - ContractForbidden(protocol?: string | null): ContractForbiddenEventFilter; - - "CreditConfiguratorUpgraded(address)"( - newCreditConfigurator?: string | null - ): CreditConfiguratorUpgradedEventFilter; - CreditConfiguratorUpgraded( - newCreditConfigurator?: string | null - ): CreditConfiguratorUpgradedEventFilter; - - "CreditFacadeUpgraded(address)"( - newCreditFacade?: string | null - ): CreditFacadeUpgradedEventFilter; - CreditFacadeUpgraded( - newCreditFacade?: string | null - ): CreditFacadeUpgradedEventFilter; - - "DegenModeUpdated(bool)"(arg0?: null): DegenModeUpdatedEventFilter; - DegenModeUpdated(arg0?: null): DegenModeUpdatedEventFilter; - - "ExpirationDateUpdated(uint40)"( - arg0?: null - ): ExpirationDateUpdatedEventFilter; - ExpirationDateUpdated(arg0?: null): ExpirationDateUpdatedEventFilter; - - "FeesUpdated(uint16,uint16,uint16,uint16,uint16)"( - feeInterest?: null, - feeLiquidation?: null, - liquidationPremium?: null, - feeLiquidationExpired?: null, - liquidationPremiumExpired?: null - ): FeesUpdatedEventFilter; - FeesUpdated( - feeInterest?: null, - feeLiquidation?: null, - liquidationPremium?: null, - feeLiquidationExpired?: null, - liquidationPremiumExpired?: null - ): FeesUpdatedEventFilter; - - "IncreaseDebtModeUpdated(bool)"( - arg0?: null - ): IncreaseDebtModeUpdatedEventFilter; - IncreaseDebtModeUpdated(arg0?: null): IncreaseDebtModeUpdatedEventFilter; - - "LimitPerBlockUpdated(uint128)"( - arg0?: null - ): LimitPerBlockUpdatedEventFilter; - LimitPerBlockUpdated(arg0?: null): LimitPerBlockUpdatedEventFilter; - - "LimitsUpdated(uint256,uint256)"( - minBorrowedAmount?: null, - maxBorrowedAmount?: null - ): LimitsUpdatedEventFilter; - LimitsUpdated( - minBorrowedAmount?: null, - maxBorrowedAmount?: null - ): LimitsUpdatedEventFilter; - - "MaxEnabledTokensUpdated(uint8)"( - arg0?: null - ): MaxEnabledTokensUpdatedEventFilter; - MaxEnabledTokensUpdated(arg0?: null): MaxEnabledTokensUpdatedEventFilter; - - "Paused(address)"(account?: null): PausedEventFilter; - Paused(account?: null): PausedEventFilter; - - "PriceOracleUpgraded(address)"( - newPriceOracle?: string | null - ): PriceOracleUpgradedEventFilter; - PriceOracleUpgraded( - newPriceOracle?: string | null - ): PriceOracleUpgradedEventFilter; - - "RemovedFromUpgradeable(address)"( - arg0?: null - ): RemovedFromUpgradeableEventFilter; - RemovedFromUpgradeable(arg0?: null): RemovedFromUpgradeableEventFilter; - - "TokenAllowed(address)"(token?: string | null): TokenAllowedEventFilter; - TokenAllowed(token?: string | null): TokenAllowedEventFilter; - - "TokenForbidden(address)"(token?: string | null): TokenForbiddenEventFilter; - TokenForbidden(token?: string | null): TokenForbiddenEventFilter; - - "TokenLiquidationThresholdUpdated(address,uint16)"( - token?: string | null, - liquidityThreshold?: null - ): TokenLiquidationThresholdUpdatedEventFilter; - TokenLiquidationThresholdUpdated( - token?: string | null, - liquidityThreshold?: null - ): TokenLiquidationThresholdUpdatedEventFilter; - - "Unpaused(address)"(account?: null): UnpausedEventFilter; - Unpaused(account?: null): UnpausedEventFilter; - }; - - estimateGas: { - _acl(overrides?: CallOverrides): Promise; - - addCollateralToken( - token: string, - liquidationThreshold: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - addContractToUpgradeable( - addr: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - addressProvider(overrides?: CallOverrides): Promise; - - allowContract( - targetContract: string, - adapter: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - allowToken( - token: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - allowedContracts( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - allowedContractsCount(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - forbidContract( - targetContract: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - forbidToken( - token: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise; - - removeContractFromUpgradeable( - addr: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setExpirationDate( - newExpirationDate: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setFees( - _feeInterest: BigNumberish, - _feeLiquidation: BigNumberish, - _liquidationPremium: BigNumberish, - _feeLiquidationExpired: BigNumberish, - _liquidationPremiumExpired: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setIncreaseDebtForbidden( - _mode: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setLimitPerBlock( - newLimit: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setLimits( - _minBorrowedAmount: BigNumberish, - _maxBorrowedAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setLiquidationThreshold( - token: string, - liquidationThreshold: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upgradeCreditConfigurator( - _creditConfigurator: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upgradeCreditFacade( - _creditFacade: string, - migrateParams: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upgradePriceOracle( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - _acl(overrides?: CallOverrides): Promise; - - addCollateralToken( - token: string, - liquidationThreshold: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - addContractToUpgradeable( - addr: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - addressProvider(overrides?: CallOverrides): Promise; - - allowContract( - targetContract: string, - adapter: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - allowToken( - token: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - allowedContracts( - i: BigNumberish, - overrides?: CallOverrides - ): Promise; - - allowedContractsCount( - overrides?: CallOverrides - ): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - forbidContract( - targetContract: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - forbidToken( - token: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise; - - removeContractFromUpgradeable( - addr: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setExpirationDate( - newExpirationDate: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setFees( - _feeInterest: BigNumberish, - _feeLiquidation: BigNumberish, - _liquidationPremium: BigNumberish, - _feeLiquidationExpired: BigNumberish, - _liquidationPremiumExpired: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setIncreaseDebtForbidden( - _mode: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setLimitPerBlock( - newLimit: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setLimits( - _minBorrowedAmount: BigNumberish, - _maxBorrowedAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setLiquidationThreshold( - token: string, - liquidationThreshold: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upgradeCreditConfigurator( - _creditConfigurator: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upgradeCreditFacade( - _creditFacade: string, - migrateParams: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upgradePriceOracle( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/test/sigp/UniswapHelper.sol/UniswapV3AdapterTestHelper.ts b/src/types/contracts/test/sigp/UniswapHelper.sol/UniswapV3AdapterTestHelper.ts deleted file mode 100644 index 5ba4f3bc..00000000 --- a/src/types/contracts/test/sigp/UniswapHelper.sol/UniswapV3AdapterTestHelper.ts +++ /dev/null @@ -1,326 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface UniswapV3AdapterTestHelperInterface extends utils.Interface { - functions: { - "decodeFirstPool(bytes)": FunctionFragment; - "encodePathMalicious(address,uint24,address,address)": FunctionFragment; - "encodePathSingle(address,uint24,address)": FunctionFragment; - "extractTokens(bytes)": FunctionFragment; - "extractTokensNew(bytes)": FunctionFragment; - "hasMultiplePools(bytes)": FunctionFragment; - "skipToken(bytes)": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "decodeFirstPool" - | "encodePathMalicious" - | "encodePathSingle" - | "extractTokens" - | "extractTokensNew" - | "hasMultiplePools" - | "skipToken" - ): FunctionFragment; - - encodeFunctionData( - functionFragment: "decodeFirstPool", - values: [BytesLike] - ): string; - encodeFunctionData( - functionFragment: "encodePathMalicious", - values: [string, BigNumberish, string, string] - ): string; - encodeFunctionData( - functionFragment: "encodePathSingle", - values: [string, BigNumberish, string] - ): string; - encodeFunctionData( - functionFragment: "extractTokens", - values: [BytesLike] - ): string; - encodeFunctionData( - functionFragment: "extractTokensNew", - values: [BytesLike] - ): string; - encodeFunctionData( - functionFragment: "hasMultiplePools", - values: [BytesLike] - ): string; - encodeFunctionData( - functionFragment: "skipToken", - values: [BytesLike] - ): string; - - decodeFunctionResult( - functionFragment: "decodeFirstPool", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "encodePathMalicious", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "encodePathSingle", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "extractTokens", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "extractTokensNew", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "hasMultiplePools", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "skipToken", data: BytesLike): Result; - - events: {}; -} - -export interface UniswapV3AdapterTestHelper extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: UniswapV3AdapterTestHelperInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - decodeFirstPool( - v3path: BytesLike, - overrides?: CallOverrides - ): Promise<[string, string, number]>; - - encodePathMalicious( - token1: string, - fee: BigNumberish, - token2: string, - token3: string, - overrides?: CallOverrides - ): Promise<[string]>; - - encodePathSingle( - token1: string, - fee: BigNumberish, - token2: string, - overrides?: CallOverrides - ): Promise<[string]>; - - extractTokens( - path: BytesLike, - overrides?: CallOverrides - ): Promise<[string, string] & { tokenA: string; tokenB: string }>; - - extractTokensNew( - path: BytesLike, - overrides?: CallOverrides - ): Promise<[string, string] & { tokenA: string; tokenB: string }>; - - hasMultiplePools( - path: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - - skipToken(v3path: BytesLike, overrides?: CallOverrides): Promise<[string]>; - }; - - decodeFirstPool( - v3path: BytesLike, - overrides?: CallOverrides - ): Promise<[string, string, number]>; - - encodePathMalicious( - token1: string, - fee: BigNumberish, - token2: string, - token3: string, - overrides?: CallOverrides - ): Promise; - - encodePathSingle( - token1: string, - fee: BigNumberish, - token2: string, - overrides?: CallOverrides - ): Promise; - - extractTokens( - path: BytesLike, - overrides?: CallOverrides - ): Promise<[string, string] & { tokenA: string; tokenB: string }>; - - extractTokensNew( - path: BytesLike, - overrides?: CallOverrides - ): Promise<[string, string] & { tokenA: string; tokenB: string }>; - - hasMultiplePools( - path: BytesLike, - overrides?: CallOverrides - ): Promise; - - skipToken(v3path: BytesLike, overrides?: CallOverrides): Promise; - - callStatic: { - decodeFirstPool( - v3path: BytesLike, - overrides?: CallOverrides - ): Promise<[string, string, number]>; - - encodePathMalicious( - token1: string, - fee: BigNumberish, - token2: string, - token3: string, - overrides?: CallOverrides - ): Promise; - - encodePathSingle( - token1: string, - fee: BigNumberish, - token2: string, - overrides?: CallOverrides - ): Promise; - - extractTokens( - path: BytesLike, - overrides?: CallOverrides - ): Promise<[string, string] & { tokenA: string; tokenB: string }>; - - extractTokensNew( - path: BytesLike, - overrides?: CallOverrides - ): Promise<[string, string] & { tokenA: string; tokenB: string }>; - - hasMultiplePools( - path: BytesLike, - overrides?: CallOverrides - ): Promise; - - skipToken(v3path: BytesLike, overrides?: CallOverrides): Promise; - }; - - filters: {}; - - estimateGas: { - decodeFirstPool( - v3path: BytesLike, - overrides?: CallOverrides - ): Promise; - - encodePathMalicious( - token1: string, - fee: BigNumberish, - token2: string, - token3: string, - overrides?: CallOverrides - ): Promise; - - encodePathSingle( - token1: string, - fee: BigNumberish, - token2: string, - overrides?: CallOverrides - ): Promise; - - extractTokens( - path: BytesLike, - overrides?: CallOverrides - ): Promise; - - extractTokensNew( - path: BytesLike, - overrides?: CallOverrides - ): Promise; - - hasMultiplePools( - path: BytesLike, - overrides?: CallOverrides - ): Promise; - - skipToken(v3path: BytesLike, overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - decodeFirstPool( - v3path: BytesLike, - overrides?: CallOverrides - ): Promise; - - encodePathMalicious( - token1: string, - fee: BigNumberish, - token2: string, - token3: string, - overrides?: CallOverrides - ): Promise; - - encodePathSingle( - token1: string, - fee: BigNumberish, - token2: string, - overrides?: CallOverrides - ): Promise; - - extractTokens( - path: BytesLike, - overrides?: CallOverrides - ): Promise; - - extractTokensNew( - path: BytesLike, - overrides?: CallOverrides - ): Promise; - - hasMultiplePools( - path: BytesLike, - overrides?: CallOverrides - ): Promise; - - skipToken( - v3path: BytesLike, - overrides?: CallOverrides - ): Promise; - }; -} diff --git a/src/types/contracts/test/sigp/UniswapHelper.sol/index.ts b/src/types/contracts/test/sigp/UniswapHelper.sol/index.ts deleted file mode 100644 index 78691d7d..00000000 --- a/src/types/contracts/test/sigp/UniswapHelper.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { UniswapV3AdapterTestHelper } from "./UniswapV3AdapterTestHelper"; diff --git a/src/types/contracts/test/sigp/index.ts b/src/types/contracts/test/sigp/index.ts index 45a05636..fdea2dfc 100644 --- a/src/types/contracts/test/sigp/index.ts +++ b/src/types/contracts/test/sigp/index.ts @@ -1,20 +1,7 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ -import type * as attackingContractNonPayableSol from "./AttackingContractNonPayable.sol"; -export type { attackingContractNonPayableSol }; import type * as interfacesSol from "./Interfaces.sol"; export type { interfacesSol }; -import type * as newConvexBaseRewardPoolMockSol from "./NewConvexBaseRewardPoolMock.sol"; -export type { newConvexBaseRewardPoolMockSol }; -import type * as newConvexBoosterMockSol from "./NewConvexBoosterMock.sol"; -export type { newConvexBoosterMockSol }; -import type * as uniswapHelperSol from "./UniswapHelper.sol"; -export type { uniswapHelperSol }; import type * as interfaces from "./interfaces"; export type { interfaces }; -import type * as stEthMockSol from "./stETHMock.sol"; -export type { stEthMockSol }; -export type { DummyMulticallTarget } from "./DummyMulticallTarget"; -export type { FlashLoanAttacker2 } from "./FlashLoanAttacker2"; -export type { NewCreditConfigurator } from "./NewCreditConfigurator"; diff --git a/src/types/contracts/test/sigp/stETHMock.sol/StETHMockERC20.ts b/src/types/contracts/test/sigp/stETHMock.sol/StETHMockERC20.ts deleted file mode 100644 index c07aa140..00000000 --- a/src/types/contracts/test/sigp/stETHMock.sol/StETHMockERC20.ts +++ /dev/null @@ -1,725 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PayableOverrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface StETHMockERC20Interface extends utils.Interface { - functions: { - "allowance(address,address)": FunctionFragment; - "approve(address,uint256)": FunctionFragment; - "balanceOf(address)": FunctionFragment; - "decimals()": FunctionFragment; - "decreaseAllowance(address,uint256)": FunctionFragment; - "getPooledEthByShares(uint256)": FunctionFragment; - "getSharesByPooledEth(uint256)": FunctionFragment; - "increaseAllowance(address,uint256)": FunctionFragment; - "mint(address,uint256)": FunctionFragment; - "name()": FunctionFragment; - "setTotalPooledEther(uint256)": FunctionFragment; - "setTotalShares(uint256)": FunctionFragment; - "slash(address,uint256)": FunctionFragment; - "submit(address)": FunctionFragment; - "symbol()": FunctionFragment; - "totalPooledEther()": FunctionFragment; - "totalShares()": FunctionFragment; - "totalSupply()": FunctionFragment; - "transfer(address,uint256)": FunctionFragment; - "transferFrom(address,address,uint256)": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "allowance" - | "approve" - | "balanceOf" - | "decimals" - | "decreaseAllowance" - | "getPooledEthByShares" - | "getSharesByPooledEth" - | "increaseAllowance" - | "mint" - | "name" - | "setTotalPooledEther" - | "setTotalShares" - | "slash" - | "submit" - | "symbol" - | "totalPooledEther" - | "totalShares" - | "totalSupply" - | "transfer" - | "transferFrom" - ): FunctionFragment; - - encodeFunctionData( - functionFragment: "allowance", - values: [string, string] - ): string; - encodeFunctionData( - functionFragment: "approve", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "balanceOf", values: [string]): string; - encodeFunctionData(functionFragment: "decimals", values?: undefined): string; - encodeFunctionData( - functionFragment: "decreaseAllowance", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "getPooledEthByShares", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "getSharesByPooledEth", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "increaseAllowance", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "mint", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "name", values?: undefined): string; - encodeFunctionData( - functionFragment: "setTotalPooledEther", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "setTotalShares", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "slash", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "submit", values: [string]): string; - encodeFunctionData(functionFragment: "symbol", values?: undefined): string; - encodeFunctionData( - functionFragment: "totalPooledEther", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "totalShares", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "totalSupply", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "transfer", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "transferFrom", - values: [string, string, BigNumberish] - ): string; - - decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "decreaseAllowance", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getPooledEthByShares", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getSharesByPooledEth", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "increaseAllowance", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "mint", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "setTotalPooledEther", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "setTotalShares", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "slash", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "submit", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "totalPooledEther", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "totalShares", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "totalSupply", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "transfer", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "transferFrom", - data: BytesLike - ): Result; - - events: { - "Approval(address,address,uint256)": EventFragment; - "Transfer(address,address,uint256)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "Approval"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment; -} - -export interface ApprovalEventObject { - owner: string; - spender: string; - value: BigNumber; -} -export type ApprovalEvent = TypedEvent< - [string, string, BigNumber], - ApprovalEventObject ->; - -export type ApprovalEventFilter = TypedEventFilter; - -export interface TransferEventObject { - from: string; - to: string; - value: BigNumber; -} -export type TransferEvent = TypedEvent< - [string, string, BigNumber], - TransferEventObject ->; - -export type TransferEventFilter = TypedEventFilter; - -export interface StETHMockERC20 extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: StETHMockERC20Interface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - approve( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise<[BigNumber]>; - - decimals(overrides?: CallOverrides): Promise<[number]>; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getPooledEthByShares( - _sharesAmount: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - getSharesByPooledEth( - _pooledEthAmount: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - mint( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise<[string]>; - - setTotalPooledEther( - _totalPooledEther: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setTotalShares( - _totalShares: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - slash( - holder: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - submit( - referral: string, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise<[string]>; - - totalPooledEther(overrides?: CallOverrides): Promise<[BigNumber]>; - - totalShares(overrides?: CallOverrides): Promise<[BigNumber]>; - - totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getPooledEthByShares( - _sharesAmount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getSharesByPooledEth( - _pooledEthAmount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - mint( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - setTotalPooledEther( - _totalPooledEther: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setTotalShares( - _totalShares: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - slash( - holder: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - submit( - referral: string, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - totalPooledEther(overrides?: CallOverrides): Promise; - - totalShares(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getPooledEthByShares( - _sharesAmount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getSharesByPooledEth( - _pooledEthAmount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: CallOverrides - ): Promise; - - mint( - recipient: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - setTotalPooledEther( - _totalPooledEther: BigNumberish, - overrides?: CallOverrides - ): Promise; - - setTotalShares( - _totalShares: BigNumberish, - overrides?: CallOverrides - ): Promise; - - slash( - holder: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - submit(referral: string, overrides?: CallOverrides): Promise; - - symbol(overrides?: CallOverrides): Promise; - - totalPooledEther(overrides?: CallOverrides): Promise; - - totalShares(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - "Approval(address,address,uint256)"( - owner?: string | null, - spender?: string | null, - value?: null - ): ApprovalEventFilter; - Approval( - owner?: string | null, - spender?: string | null, - value?: null - ): ApprovalEventFilter; - - "Transfer(address,address,uint256)"( - from?: string | null, - to?: string | null, - value?: null - ): TransferEventFilter; - Transfer( - from?: string | null, - to?: string | null, - value?: null - ): TransferEventFilter; - }; - - estimateGas: { - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getPooledEthByShares( - _sharesAmount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getSharesByPooledEth( - _pooledEthAmount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - mint( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - setTotalPooledEther( - _totalPooledEther: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setTotalShares( - _totalShares: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - slash( - holder: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - submit( - referral: string, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - totalPooledEther(overrides?: CallOverrides): Promise; - - totalShares(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf( - account: string, - overrides?: CallOverrides - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getPooledEthByShares( - _sharesAmount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getSharesByPooledEth( - _pooledEthAmount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - mint( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - setTotalPooledEther( - _totalPooledEther: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setTotalShares( - _totalShares: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - slash( - holder: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - submit( - referral: string, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - totalPooledEther(overrides?: CallOverrides): Promise; - - totalShares(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/src/types/contracts/test/sigp/stETHMock.sol/index.ts b/src/types/contracts/test/sigp/stETHMock.sol/index.ts deleted file mode 100644 index d37f35a5..00000000 --- a/src/types/contracts/test/sigp/stETHMock.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { StETHMockERC20 } from "./StETHMockERC20"; diff --git a/src/types/contracts/test/suites/BalanceHelper.ts b/src/types/contracts/test/suites/BalanceHelper.ts deleted file mode 100644 index d5e6daa3..00000000 --- a/src/types/contracts/test/suites/BalanceHelper.ts +++ /dev/null @@ -1,375 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../common"; - -export interface BalanceHelperInterface extends utils.Interface { - functions: { - "IS_TEST()": FunctionFragment; - "failed()": FunctionFragment; - }; - - getFunction(nameOrSignatureOrTopic: "IS_TEST" | "failed"): FunctionFragment; - - encodeFunctionData(functionFragment: "IS_TEST", values?: undefined): string; - encodeFunctionData(functionFragment: "failed", values?: undefined): string; - - decodeFunctionResult(functionFragment: "IS_TEST", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "failed", data: BytesLike): Result; - - events: { - "log(string)": EventFragment; - "log_address(address)": EventFragment; - "log_bytes(bytes)": EventFragment; - "log_bytes32(bytes32)": EventFragment; - "log_int(int256)": EventFragment; - "log_named_address(string,address)": EventFragment; - "log_named_bytes(string,bytes)": EventFragment; - "log_named_bytes32(string,bytes32)": EventFragment; - "log_named_decimal_int(string,int256,uint256)": EventFragment; - "log_named_decimal_uint(string,uint256,uint256)": EventFragment; - "log_named_int(string,int256)": EventFragment; - "log_named_string(string,string)": EventFragment; - "log_named_uint(string,uint256)": EventFragment; - "log_string(string)": EventFragment; - "log_uint(uint256)": EventFragment; - "logs(bytes)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "log"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "logs"): EventFragment; -} - -export interface logEventObject { - arg0: string; -} -export type logEvent = TypedEvent<[string], logEventObject>; - -export type logEventFilter = TypedEventFilter; - -export interface log_addressEventObject { - arg0: string; -} -export type log_addressEvent = TypedEvent<[string], log_addressEventObject>; - -export type log_addressEventFilter = TypedEventFilter; - -export interface log_bytesEventObject { - arg0: string; -} -export type log_bytesEvent = TypedEvent<[string], log_bytesEventObject>; - -export type log_bytesEventFilter = TypedEventFilter; - -export interface log_bytes32EventObject { - arg0: string; -} -export type log_bytes32Event = TypedEvent<[string], log_bytes32EventObject>; - -export type log_bytes32EventFilter = TypedEventFilter; - -export interface log_intEventObject { - arg0: BigNumber; -} -export type log_intEvent = TypedEvent<[BigNumber], log_intEventObject>; - -export type log_intEventFilter = TypedEventFilter; - -export interface log_named_addressEventObject { - key: string; - val: string; -} -export type log_named_addressEvent = TypedEvent< - [string, string], - log_named_addressEventObject ->; - -export type log_named_addressEventFilter = - TypedEventFilter; - -export interface log_named_bytesEventObject { - key: string; - val: string; -} -export type log_named_bytesEvent = TypedEvent< - [string, string], - log_named_bytesEventObject ->; - -export type log_named_bytesEventFilter = TypedEventFilter; - -export interface log_named_bytes32EventObject { - key: string; - val: string; -} -export type log_named_bytes32Event = TypedEvent< - [string, string], - log_named_bytes32EventObject ->; - -export type log_named_bytes32EventFilter = - TypedEventFilter; - -export interface log_named_decimal_intEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_intEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_intEventObject ->; - -export type log_named_decimal_intEventFilter = - TypedEventFilter; - -export interface log_named_decimal_uintEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_uintEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_uintEventObject ->; - -export type log_named_decimal_uintEventFilter = - TypedEventFilter; - -export interface log_named_intEventObject { - key: string; - val: BigNumber; -} -export type log_named_intEvent = TypedEvent< - [string, BigNumber], - log_named_intEventObject ->; - -export type log_named_intEventFilter = TypedEventFilter; - -export interface log_named_stringEventObject { - key: string; - val: string; -} -export type log_named_stringEvent = TypedEvent< - [string, string], - log_named_stringEventObject ->; - -export type log_named_stringEventFilter = - TypedEventFilter; - -export interface log_named_uintEventObject { - key: string; - val: BigNumber; -} -export type log_named_uintEvent = TypedEvent< - [string, BigNumber], - log_named_uintEventObject ->; - -export type log_named_uintEventFilter = TypedEventFilter; - -export interface log_stringEventObject { - arg0: string; -} -export type log_stringEvent = TypedEvent<[string], log_stringEventObject>; - -export type log_stringEventFilter = TypedEventFilter; - -export interface log_uintEventObject { - arg0: BigNumber; -} -export type log_uintEvent = TypedEvent<[BigNumber], log_uintEventObject>; - -export type log_uintEventFilter = TypedEventFilter; - -export interface logsEventObject { - arg0: string; -} -export type logsEvent = TypedEvent<[string], logsEventObject>; - -export type logsEventFilter = TypedEventFilter; - -export interface BalanceHelper extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: BalanceHelperInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - IS_TEST(overrides?: CallOverrides): Promise<[boolean]>; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - IS_TEST(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - IS_TEST(overrides?: CallOverrides): Promise; - - failed(overrides?: CallOverrides): Promise; - }; - - filters: { - "log(string)"(arg0?: null): logEventFilter; - log(arg0?: null): logEventFilter; - - "log_address(address)"(arg0?: null): log_addressEventFilter; - log_address(arg0?: null): log_addressEventFilter; - - "log_bytes(bytes)"(arg0?: null): log_bytesEventFilter; - log_bytes(arg0?: null): log_bytesEventFilter; - - "log_bytes32(bytes32)"(arg0?: null): log_bytes32EventFilter; - log_bytes32(arg0?: null): log_bytes32EventFilter; - - "log_int(int256)"(arg0?: null): log_intEventFilter; - log_int(arg0?: null): log_intEventFilter; - - "log_named_address(string,address)"( - key?: null, - val?: null - ): log_named_addressEventFilter; - log_named_address(key?: null, val?: null): log_named_addressEventFilter; - - "log_named_bytes(string,bytes)"( - key?: null, - val?: null - ): log_named_bytesEventFilter; - log_named_bytes(key?: null, val?: null): log_named_bytesEventFilter; - - "log_named_bytes32(string,bytes32)"( - key?: null, - val?: null - ): log_named_bytes32EventFilter; - log_named_bytes32(key?: null, val?: null): log_named_bytes32EventFilter; - - "log_named_decimal_int(string,int256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - log_named_decimal_int( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - - "log_named_decimal_uint(string,uint256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - log_named_decimal_uint( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - - "log_named_int(string,int256)"( - key?: null, - val?: null - ): log_named_intEventFilter; - log_named_int(key?: null, val?: null): log_named_intEventFilter; - - "log_named_string(string,string)"( - key?: null, - val?: null - ): log_named_stringEventFilter; - log_named_string(key?: null, val?: null): log_named_stringEventFilter; - - "log_named_uint(string,uint256)"( - key?: null, - val?: null - ): log_named_uintEventFilter; - log_named_uint(key?: null, val?: null): log_named_uintEventFilter; - - "log_string(string)"(arg0?: null): log_stringEventFilter; - log_string(arg0?: null): log_stringEventFilter; - - "log_uint(uint256)"(arg0?: null): log_uintEventFilter; - log_uint(arg0?: null): log_uintEventFilter; - - "logs(bytes)"(arg0?: null): logsEventFilter; - logs(arg0?: null): logsEventFilter; - }; - - estimateGas: { - IS_TEST(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - IS_TEST(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/src/types/contracts/test/suites/BaseCreditTestSuite.ts b/src/types/contracts/test/suites/BaseCreditTestSuite.ts deleted file mode 100644 index f4871398..00000000 --- a/src/types/contracts/test/suites/BaseCreditTestSuite.ts +++ /dev/null @@ -1,649 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../common"; - -export type CollateralTokenStruct = { - token: string; - liquidationThreshold: BigNumberish; -}; - -export type CollateralTokenStructOutput = [string, number] & { - token: string; - liquidationThreshold: number; -}; - -export interface BaseCreditTestSuiteInterface extends utils.Interface { - functions: { - "IS_TEST()": FunctionFragment; - "_getAccountAmount()": FunctionFragment; - "_getCollateralTokens(uint8)": FunctionFragment; - "acl()": FunctionFragment; - "addMockPriceFeed(address,uint256)": FunctionFragment; - "addressProvider()": FunctionFragment; - "af()": FunctionFragment; - "cr()": FunctionFragment; - "failed()": FunctionFragment; - "gp()": FunctionFragment; - "lt(uint8)": FunctionFragment; - "poolMock()": FunctionFragment; - "priceOracle()": FunctionFragment; - "testTokenSuite()": FunctionFragment; - "underlying()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "IS_TEST" - | "_getAccountAmount" - | "_getCollateralTokens" - | "acl" - | "addMockPriceFeed" - | "addressProvider" - | "af" - | "cr" - | "failed" - | "gp" - | "lt" - | "poolMock" - | "priceOracle" - | "testTokenSuite" - | "underlying" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "IS_TEST", values?: undefined): string; - encodeFunctionData( - functionFragment: "_getAccountAmount", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "_getCollateralTokens", - values: [BigNumberish] - ): string; - encodeFunctionData(functionFragment: "acl", values?: undefined): string; - encodeFunctionData( - functionFragment: "addMockPriceFeed", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "addressProvider", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "af", values?: undefined): string; - encodeFunctionData(functionFragment: "cr", values?: undefined): string; - encodeFunctionData(functionFragment: "failed", values?: undefined): string; - encodeFunctionData(functionFragment: "gp", values?: undefined): string; - encodeFunctionData(functionFragment: "lt", values: [BigNumberish]): string; - encodeFunctionData(functionFragment: "poolMock", values?: undefined): string; - encodeFunctionData( - functionFragment: "priceOracle", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "testTokenSuite", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "underlying", - values?: undefined - ): string; - - decodeFunctionResult(functionFragment: "IS_TEST", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "_getAccountAmount", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "_getCollateralTokens", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "acl", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "addMockPriceFeed", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "addressProvider", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "af", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "cr", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "failed", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "gp", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "lt", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "poolMock", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "priceOracle", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "testTokenSuite", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "underlying", data: BytesLike): Result; - - events: { - "log(string)": EventFragment; - "log_address(address)": EventFragment; - "log_bytes(bytes)": EventFragment; - "log_bytes32(bytes32)": EventFragment; - "log_int(int256)": EventFragment; - "log_named_address(string,address)": EventFragment; - "log_named_bytes(string,bytes)": EventFragment; - "log_named_bytes32(string,bytes32)": EventFragment; - "log_named_decimal_int(string,int256,uint256)": EventFragment; - "log_named_decimal_uint(string,uint256,uint256)": EventFragment; - "log_named_int(string,int256)": EventFragment; - "log_named_string(string,string)": EventFragment; - "log_named_uint(string,uint256)": EventFragment; - "log_string(string)": EventFragment; - "log_uint(uint256)": EventFragment; - "logs(bytes)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "log"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "logs"): EventFragment; -} - -export interface logEventObject { - arg0: string; -} -export type logEvent = TypedEvent<[string], logEventObject>; - -export type logEventFilter = TypedEventFilter; - -export interface log_addressEventObject { - arg0: string; -} -export type log_addressEvent = TypedEvent<[string], log_addressEventObject>; - -export type log_addressEventFilter = TypedEventFilter; - -export interface log_bytesEventObject { - arg0: string; -} -export type log_bytesEvent = TypedEvent<[string], log_bytesEventObject>; - -export type log_bytesEventFilter = TypedEventFilter; - -export interface log_bytes32EventObject { - arg0: string; -} -export type log_bytes32Event = TypedEvent<[string], log_bytes32EventObject>; - -export type log_bytes32EventFilter = TypedEventFilter; - -export interface log_intEventObject { - arg0: BigNumber; -} -export type log_intEvent = TypedEvent<[BigNumber], log_intEventObject>; - -export type log_intEventFilter = TypedEventFilter; - -export interface log_named_addressEventObject { - key: string; - val: string; -} -export type log_named_addressEvent = TypedEvent< - [string, string], - log_named_addressEventObject ->; - -export type log_named_addressEventFilter = - TypedEventFilter; - -export interface log_named_bytesEventObject { - key: string; - val: string; -} -export type log_named_bytesEvent = TypedEvent< - [string, string], - log_named_bytesEventObject ->; - -export type log_named_bytesEventFilter = TypedEventFilter; - -export interface log_named_bytes32EventObject { - key: string; - val: string; -} -export type log_named_bytes32Event = TypedEvent< - [string, string], - log_named_bytes32EventObject ->; - -export type log_named_bytes32EventFilter = - TypedEventFilter; - -export interface log_named_decimal_intEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_intEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_intEventObject ->; - -export type log_named_decimal_intEventFilter = - TypedEventFilter; - -export interface log_named_decimal_uintEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_uintEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_uintEventObject ->; - -export type log_named_decimal_uintEventFilter = - TypedEventFilter; - -export interface log_named_intEventObject { - key: string; - val: BigNumber; -} -export type log_named_intEvent = TypedEvent< - [string, BigNumber], - log_named_intEventObject ->; - -export type log_named_intEventFilter = TypedEventFilter; - -export interface log_named_stringEventObject { - key: string; - val: string; -} -export type log_named_stringEvent = TypedEvent< - [string, string], - log_named_stringEventObject ->; - -export type log_named_stringEventFilter = - TypedEventFilter; - -export interface log_named_uintEventObject { - key: string; - val: BigNumber; -} -export type log_named_uintEvent = TypedEvent< - [string, BigNumber], - log_named_uintEventObject ->; - -export type log_named_uintEventFilter = TypedEventFilter; - -export interface log_stringEventObject { - arg0: string; -} -export type log_stringEvent = TypedEvent<[string], log_stringEventObject>; - -export type log_stringEventFilter = TypedEventFilter; - -export interface log_uintEventObject { - arg0: BigNumber; -} -export type log_uintEvent = TypedEvent<[BigNumber], log_uintEventObject>; - -export type log_uintEventFilter = TypedEventFilter; - -export interface logsEventObject { - arg0: string; -} -export type logsEvent = TypedEvent<[string], logsEventObject>; - -export type logsEventFilter = TypedEventFilter; - -export interface BaseCreditTestSuite extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: BaseCreditTestSuiteInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - IS_TEST(overrides?: CallOverrides): Promise<[boolean]>; - - _getAccountAmount(overrides?: CallOverrides): Promise<[BigNumber]>; - - _getCollateralTokens( - t: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - acl(overrides?: CallOverrides): Promise<[string]>; - - addMockPriceFeed( - token: string, - price: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - addressProvider(overrides?: CallOverrides): Promise<[string]>; - - af(overrides?: CallOverrides): Promise<[string]>; - - cr(overrides?: CallOverrides): Promise<[string]>; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - gp(overrides?: CallOverrides): Promise<[string]>; - - lt(arg0: BigNumberish, overrides?: CallOverrides): Promise<[number]>; - - poolMock(overrides?: CallOverrides): Promise<[string]>; - - priceOracle(overrides?: CallOverrides): Promise<[string]>; - - testTokenSuite(overrides?: CallOverrides): Promise<[string]>; - - underlying(overrides?: CallOverrides): Promise<[string]>; - }; - - IS_TEST(overrides?: CallOverrides): Promise; - - _getAccountAmount(overrides?: CallOverrides): Promise; - - _getCollateralTokens( - t: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - acl(overrides?: CallOverrides): Promise; - - addMockPriceFeed( - token: string, - price: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - addressProvider(overrides?: CallOverrides): Promise; - - af(overrides?: CallOverrides): Promise; - - cr(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - gp(overrides?: CallOverrides): Promise; - - lt(arg0: BigNumberish, overrides?: CallOverrides): Promise; - - poolMock(overrides?: CallOverrides): Promise; - - priceOracle(overrides?: CallOverrides): Promise; - - testTokenSuite(overrides?: CallOverrides): Promise; - - underlying(overrides?: CallOverrides): Promise; - - callStatic: { - IS_TEST(overrides?: CallOverrides): Promise; - - _getAccountAmount(overrides?: CallOverrides): Promise; - - _getCollateralTokens( - t: BigNumberish, - overrides?: CallOverrides - ): Promise; - - acl(overrides?: CallOverrides): Promise; - - addMockPriceFeed( - token: string, - price: BigNumberish, - overrides?: CallOverrides - ): Promise; - - addressProvider(overrides?: CallOverrides): Promise; - - af(overrides?: CallOverrides): Promise; - - cr(overrides?: CallOverrides): Promise; - - failed(overrides?: CallOverrides): Promise; - - gp(overrides?: CallOverrides): Promise; - - lt(arg0: BigNumberish, overrides?: CallOverrides): Promise; - - poolMock(overrides?: CallOverrides): Promise; - - priceOracle(overrides?: CallOverrides): Promise; - - testTokenSuite(overrides?: CallOverrides): Promise; - - underlying(overrides?: CallOverrides): Promise; - }; - - filters: { - "log(string)"(arg0?: null): logEventFilter; - log(arg0?: null): logEventFilter; - - "log_address(address)"(arg0?: null): log_addressEventFilter; - log_address(arg0?: null): log_addressEventFilter; - - "log_bytes(bytes)"(arg0?: null): log_bytesEventFilter; - log_bytes(arg0?: null): log_bytesEventFilter; - - "log_bytes32(bytes32)"(arg0?: null): log_bytes32EventFilter; - log_bytes32(arg0?: null): log_bytes32EventFilter; - - "log_int(int256)"(arg0?: null): log_intEventFilter; - log_int(arg0?: null): log_intEventFilter; - - "log_named_address(string,address)"( - key?: null, - val?: null - ): log_named_addressEventFilter; - log_named_address(key?: null, val?: null): log_named_addressEventFilter; - - "log_named_bytes(string,bytes)"( - key?: null, - val?: null - ): log_named_bytesEventFilter; - log_named_bytes(key?: null, val?: null): log_named_bytesEventFilter; - - "log_named_bytes32(string,bytes32)"( - key?: null, - val?: null - ): log_named_bytes32EventFilter; - log_named_bytes32(key?: null, val?: null): log_named_bytes32EventFilter; - - "log_named_decimal_int(string,int256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - log_named_decimal_int( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - - "log_named_decimal_uint(string,uint256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - log_named_decimal_uint( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - - "log_named_int(string,int256)"( - key?: null, - val?: null - ): log_named_intEventFilter; - log_named_int(key?: null, val?: null): log_named_intEventFilter; - - "log_named_string(string,string)"( - key?: null, - val?: null - ): log_named_stringEventFilter; - log_named_string(key?: null, val?: null): log_named_stringEventFilter; - - "log_named_uint(string,uint256)"( - key?: null, - val?: null - ): log_named_uintEventFilter; - log_named_uint(key?: null, val?: null): log_named_uintEventFilter; - - "log_string(string)"(arg0?: null): log_stringEventFilter; - log_string(arg0?: null): log_stringEventFilter; - - "log_uint(uint256)"(arg0?: null): log_uintEventFilter; - log_uint(arg0?: null): log_uintEventFilter; - - "logs(bytes)"(arg0?: null): logsEventFilter; - logs(arg0?: null): logsEventFilter; - }; - - estimateGas: { - IS_TEST(overrides?: CallOverrides): Promise; - - _getAccountAmount(overrides?: CallOverrides): Promise; - - _getCollateralTokens( - t: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - acl(overrides?: CallOverrides): Promise; - - addMockPriceFeed( - token: string, - price: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - addressProvider(overrides?: CallOverrides): Promise; - - af(overrides?: CallOverrides): Promise; - - cr(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - gp(overrides?: CallOverrides): Promise; - - lt(arg0: BigNumberish, overrides?: CallOverrides): Promise; - - poolMock(overrides?: CallOverrides): Promise; - - priceOracle(overrides?: CallOverrides): Promise; - - testTokenSuite(overrides?: CallOverrides): Promise; - - underlying(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - IS_TEST(overrides?: CallOverrides): Promise; - - _getAccountAmount(overrides?: CallOverrides): Promise; - - _getCollateralTokens( - t: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - acl(overrides?: CallOverrides): Promise; - - addMockPriceFeed( - token: string, - price: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - addressProvider(overrides?: CallOverrides): Promise; - - af(overrides?: CallOverrides): Promise; - - cr(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - gp(overrides?: CallOverrides): Promise; - - lt( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - poolMock(overrides?: CallOverrides): Promise; - - priceOracle(overrides?: CallOverrides): Promise; - - testTokenSuite(overrides?: CallOverrides): Promise; - - underlying(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/test/suites/CreditFacadeHelper.ts b/src/types/contracts/test/suites/CreditFacadeHelper.ts deleted file mode 100644 index e85f070d..00000000 --- a/src/types/contracts/test/suites/CreditFacadeHelper.ts +++ /dev/null @@ -1,472 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../common"; - -export interface CreditFacadeHelperInterface extends utils.Interface { - functions: { - "IS_TEST()": FunctionFragment; - "cft()": FunctionFragment; - "creditConfigurator()": FunctionFragment; - "creditFacade()": FunctionFragment; - "creditManager()": FunctionFragment; - "failed()": FunctionFragment; - "underlying()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "IS_TEST" - | "cft" - | "creditConfigurator" - | "creditFacade" - | "creditManager" - | "failed" - | "underlying" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "IS_TEST", values?: undefined): string; - encodeFunctionData(functionFragment: "cft", values?: undefined): string; - encodeFunctionData( - functionFragment: "creditConfigurator", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditFacade", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditManager", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "failed", values?: undefined): string; - encodeFunctionData( - functionFragment: "underlying", - values?: undefined - ): string; - - decodeFunctionResult(functionFragment: "IS_TEST", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "cft", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "creditConfigurator", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditFacade", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditManager", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "failed", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "underlying", data: BytesLike): Result; - - events: { - "log(string)": EventFragment; - "log_address(address)": EventFragment; - "log_bytes(bytes)": EventFragment; - "log_bytes32(bytes32)": EventFragment; - "log_int(int256)": EventFragment; - "log_named_address(string,address)": EventFragment; - "log_named_bytes(string,bytes)": EventFragment; - "log_named_bytes32(string,bytes32)": EventFragment; - "log_named_decimal_int(string,int256,uint256)": EventFragment; - "log_named_decimal_uint(string,uint256,uint256)": EventFragment; - "log_named_int(string,int256)": EventFragment; - "log_named_string(string,string)": EventFragment; - "log_named_uint(string,uint256)": EventFragment; - "log_string(string)": EventFragment; - "log_uint(uint256)": EventFragment; - "logs(bytes)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "log"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "logs"): EventFragment; -} - -export interface logEventObject { - arg0: string; -} -export type logEvent = TypedEvent<[string], logEventObject>; - -export type logEventFilter = TypedEventFilter; - -export interface log_addressEventObject { - arg0: string; -} -export type log_addressEvent = TypedEvent<[string], log_addressEventObject>; - -export type log_addressEventFilter = TypedEventFilter; - -export interface log_bytesEventObject { - arg0: string; -} -export type log_bytesEvent = TypedEvent<[string], log_bytesEventObject>; - -export type log_bytesEventFilter = TypedEventFilter; - -export interface log_bytes32EventObject { - arg0: string; -} -export type log_bytes32Event = TypedEvent<[string], log_bytes32EventObject>; - -export type log_bytes32EventFilter = TypedEventFilter; - -export interface log_intEventObject { - arg0: BigNumber; -} -export type log_intEvent = TypedEvent<[BigNumber], log_intEventObject>; - -export type log_intEventFilter = TypedEventFilter; - -export interface log_named_addressEventObject { - key: string; - val: string; -} -export type log_named_addressEvent = TypedEvent< - [string, string], - log_named_addressEventObject ->; - -export type log_named_addressEventFilter = - TypedEventFilter; - -export interface log_named_bytesEventObject { - key: string; - val: string; -} -export type log_named_bytesEvent = TypedEvent< - [string, string], - log_named_bytesEventObject ->; - -export type log_named_bytesEventFilter = TypedEventFilter; - -export interface log_named_bytes32EventObject { - key: string; - val: string; -} -export type log_named_bytes32Event = TypedEvent< - [string, string], - log_named_bytes32EventObject ->; - -export type log_named_bytes32EventFilter = - TypedEventFilter; - -export interface log_named_decimal_intEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_intEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_intEventObject ->; - -export type log_named_decimal_intEventFilter = - TypedEventFilter; - -export interface log_named_decimal_uintEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_uintEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_uintEventObject ->; - -export type log_named_decimal_uintEventFilter = - TypedEventFilter; - -export interface log_named_intEventObject { - key: string; - val: BigNumber; -} -export type log_named_intEvent = TypedEvent< - [string, BigNumber], - log_named_intEventObject ->; - -export type log_named_intEventFilter = TypedEventFilter; - -export interface log_named_stringEventObject { - key: string; - val: string; -} -export type log_named_stringEvent = TypedEvent< - [string, string], - log_named_stringEventObject ->; - -export type log_named_stringEventFilter = - TypedEventFilter; - -export interface log_named_uintEventObject { - key: string; - val: BigNumber; -} -export type log_named_uintEvent = TypedEvent< - [string, BigNumber], - log_named_uintEventObject ->; - -export type log_named_uintEventFilter = TypedEventFilter; - -export interface log_stringEventObject { - arg0: string; -} -export type log_stringEvent = TypedEvent<[string], log_stringEventObject>; - -export type log_stringEventFilter = TypedEventFilter; - -export interface log_uintEventObject { - arg0: BigNumber; -} -export type log_uintEvent = TypedEvent<[BigNumber], log_uintEventObject>; - -export type log_uintEventFilter = TypedEventFilter; - -export interface logsEventObject { - arg0: string; -} -export type logsEvent = TypedEvent<[string], logsEventObject>; - -export type logsEventFilter = TypedEventFilter; - -export interface CreditFacadeHelper extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: CreditFacadeHelperInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - IS_TEST(overrides?: CallOverrides): Promise<[boolean]>; - - cft(overrides?: CallOverrides): Promise<[string]>; - - creditConfigurator(overrides?: CallOverrides): Promise<[string]>; - - creditFacade(overrides?: CallOverrides): Promise<[string]>; - - creditManager(overrides?: CallOverrides): Promise<[string]>; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise<[string]>; - }; - - IS_TEST(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - - callStatic: { - IS_TEST(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - failed(overrides?: CallOverrides): Promise; - - underlying(overrides?: CallOverrides): Promise; - }; - - filters: { - "log(string)"(arg0?: null): logEventFilter; - log(arg0?: null): logEventFilter; - - "log_address(address)"(arg0?: null): log_addressEventFilter; - log_address(arg0?: null): log_addressEventFilter; - - "log_bytes(bytes)"(arg0?: null): log_bytesEventFilter; - log_bytes(arg0?: null): log_bytesEventFilter; - - "log_bytes32(bytes32)"(arg0?: null): log_bytes32EventFilter; - log_bytes32(arg0?: null): log_bytes32EventFilter; - - "log_int(int256)"(arg0?: null): log_intEventFilter; - log_int(arg0?: null): log_intEventFilter; - - "log_named_address(string,address)"( - key?: null, - val?: null - ): log_named_addressEventFilter; - log_named_address(key?: null, val?: null): log_named_addressEventFilter; - - "log_named_bytes(string,bytes)"( - key?: null, - val?: null - ): log_named_bytesEventFilter; - log_named_bytes(key?: null, val?: null): log_named_bytesEventFilter; - - "log_named_bytes32(string,bytes32)"( - key?: null, - val?: null - ): log_named_bytes32EventFilter; - log_named_bytes32(key?: null, val?: null): log_named_bytes32EventFilter; - - "log_named_decimal_int(string,int256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - log_named_decimal_int( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - - "log_named_decimal_uint(string,uint256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - log_named_decimal_uint( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - - "log_named_int(string,int256)"( - key?: null, - val?: null - ): log_named_intEventFilter; - log_named_int(key?: null, val?: null): log_named_intEventFilter; - - "log_named_string(string,string)"( - key?: null, - val?: null - ): log_named_stringEventFilter; - log_named_string(key?: null, val?: null): log_named_stringEventFilter; - - "log_named_uint(string,uint256)"( - key?: null, - val?: null - ): log_named_uintEventFilter; - log_named_uint(key?: null, val?: null): log_named_uintEventFilter; - - "log_string(string)"(arg0?: null): log_stringEventFilter; - log_string(arg0?: null): log_stringEventFilter; - - "log_uint(uint256)"(arg0?: null): log_uintEventFilter; - log_uint(arg0?: null): log_uintEventFilter; - - "logs(bytes)"(arg0?: null): logsEventFilter; - logs(arg0?: null): logsEventFilter; - }; - - estimateGas: { - IS_TEST(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - IS_TEST(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator( - overrides?: CallOverrides - ): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/test/suites/CreditFacadeTestSuite.ts b/src/types/contracts/test/suites/CreditFacadeTestSuite.ts deleted file mode 100644 index 0db92c4a..00000000 --- a/src/types/contracts/test/suites/CreditFacadeTestSuite.ts +++ /dev/null @@ -1,821 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../common"; - -export type CollateralTokenStruct = { - token: string; - liquidationThreshold: BigNumberish; -}; - -export type CollateralTokenStructOutput = [string, number] & { - token: string; - liquidationThreshold: number; -}; - -export interface CreditFacadeTestSuiteInterface extends utils.Interface { - functions: { - "IS_TEST()": FunctionFragment; - "_getAccountAmount()": FunctionFragment; - "_getCollateralTokens(uint8)": FunctionFragment; - "acl()": FunctionFragment; - "addMockPriceFeed(address,uint256)": FunctionFragment; - "addressProvider()": FunctionFragment; - "af()": FunctionFragment; - "cr()": FunctionFragment; - "creditConfigurator()": FunctionFragment; - "creditFacade()": FunctionFragment; - "creditManager()": FunctionFragment; - "degenNFT()": FunctionFragment; - "failed()": FunctionFragment; - "gp()": FunctionFragment; - "lt(uint8)": FunctionFragment; - "maxBorrowedAmount()": FunctionFragment; - "minBorrowedAmount()": FunctionFragment; - "poolMock()": FunctionFragment; - "priceOracle()": FunctionFragment; - "testFacadeWithDegenNFT()": FunctionFragment; - "testFacadeWithExpiration()": FunctionFragment; - "testTokenSuite()": FunctionFragment; - "underlying()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "IS_TEST" - | "_getAccountAmount" - | "_getCollateralTokens" - | "acl" - | "addMockPriceFeed" - | "addressProvider" - | "af" - | "cr" - | "creditConfigurator" - | "creditFacade" - | "creditManager" - | "degenNFT" - | "failed" - | "gp" - | "lt" - | "maxBorrowedAmount" - | "minBorrowedAmount" - | "poolMock" - | "priceOracle" - | "testFacadeWithDegenNFT" - | "testFacadeWithExpiration" - | "testTokenSuite" - | "underlying" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "IS_TEST", values?: undefined): string; - encodeFunctionData( - functionFragment: "_getAccountAmount", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "_getCollateralTokens", - values: [BigNumberish] - ): string; - encodeFunctionData(functionFragment: "acl", values?: undefined): string; - encodeFunctionData( - functionFragment: "addMockPriceFeed", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "addressProvider", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "af", values?: undefined): string; - encodeFunctionData(functionFragment: "cr", values?: undefined): string; - encodeFunctionData( - functionFragment: "creditConfigurator", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditFacade", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditManager", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "degenNFT", values?: undefined): string; - encodeFunctionData(functionFragment: "failed", values?: undefined): string; - encodeFunctionData(functionFragment: "gp", values?: undefined): string; - encodeFunctionData(functionFragment: "lt", values: [BigNumberish]): string; - encodeFunctionData( - functionFragment: "maxBorrowedAmount", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "minBorrowedAmount", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "poolMock", values?: undefined): string; - encodeFunctionData( - functionFragment: "priceOracle", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "testFacadeWithDegenNFT", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "testFacadeWithExpiration", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "testTokenSuite", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "underlying", - values?: undefined - ): string; - - decodeFunctionResult(functionFragment: "IS_TEST", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "_getAccountAmount", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "_getCollateralTokens", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "acl", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "addMockPriceFeed", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "addressProvider", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "af", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "cr", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "creditConfigurator", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditFacade", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditManager", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "degenNFT", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "failed", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "gp", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "lt", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "maxBorrowedAmount", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "minBorrowedAmount", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "poolMock", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "priceOracle", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "testFacadeWithDegenNFT", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "testFacadeWithExpiration", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "testTokenSuite", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "underlying", data: BytesLike): Result; - - events: { - "log(string)": EventFragment; - "log_address(address)": EventFragment; - "log_bytes(bytes)": EventFragment; - "log_bytes32(bytes32)": EventFragment; - "log_int(int256)": EventFragment; - "log_named_address(string,address)": EventFragment; - "log_named_bytes(string,bytes)": EventFragment; - "log_named_bytes32(string,bytes32)": EventFragment; - "log_named_decimal_int(string,int256,uint256)": EventFragment; - "log_named_decimal_uint(string,uint256,uint256)": EventFragment; - "log_named_int(string,int256)": EventFragment; - "log_named_string(string,string)": EventFragment; - "log_named_uint(string,uint256)": EventFragment; - "log_string(string)": EventFragment; - "log_uint(uint256)": EventFragment; - "logs(bytes)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "log"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "logs"): EventFragment; -} - -export interface logEventObject { - arg0: string; -} -export type logEvent = TypedEvent<[string], logEventObject>; - -export type logEventFilter = TypedEventFilter; - -export interface log_addressEventObject { - arg0: string; -} -export type log_addressEvent = TypedEvent<[string], log_addressEventObject>; - -export type log_addressEventFilter = TypedEventFilter; - -export interface log_bytesEventObject { - arg0: string; -} -export type log_bytesEvent = TypedEvent<[string], log_bytesEventObject>; - -export type log_bytesEventFilter = TypedEventFilter; - -export interface log_bytes32EventObject { - arg0: string; -} -export type log_bytes32Event = TypedEvent<[string], log_bytes32EventObject>; - -export type log_bytes32EventFilter = TypedEventFilter; - -export interface log_intEventObject { - arg0: BigNumber; -} -export type log_intEvent = TypedEvent<[BigNumber], log_intEventObject>; - -export type log_intEventFilter = TypedEventFilter; - -export interface log_named_addressEventObject { - key: string; - val: string; -} -export type log_named_addressEvent = TypedEvent< - [string, string], - log_named_addressEventObject ->; - -export type log_named_addressEventFilter = - TypedEventFilter; - -export interface log_named_bytesEventObject { - key: string; - val: string; -} -export type log_named_bytesEvent = TypedEvent< - [string, string], - log_named_bytesEventObject ->; - -export type log_named_bytesEventFilter = TypedEventFilter; - -export interface log_named_bytes32EventObject { - key: string; - val: string; -} -export type log_named_bytes32Event = TypedEvent< - [string, string], - log_named_bytes32EventObject ->; - -export type log_named_bytes32EventFilter = - TypedEventFilter; - -export interface log_named_decimal_intEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_intEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_intEventObject ->; - -export type log_named_decimal_intEventFilter = - TypedEventFilter; - -export interface log_named_decimal_uintEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_uintEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_uintEventObject ->; - -export type log_named_decimal_uintEventFilter = - TypedEventFilter; - -export interface log_named_intEventObject { - key: string; - val: BigNumber; -} -export type log_named_intEvent = TypedEvent< - [string, BigNumber], - log_named_intEventObject ->; - -export type log_named_intEventFilter = TypedEventFilter; - -export interface log_named_stringEventObject { - key: string; - val: string; -} -export type log_named_stringEvent = TypedEvent< - [string, string], - log_named_stringEventObject ->; - -export type log_named_stringEventFilter = - TypedEventFilter; - -export interface log_named_uintEventObject { - key: string; - val: BigNumber; -} -export type log_named_uintEvent = TypedEvent< - [string, BigNumber], - log_named_uintEventObject ->; - -export type log_named_uintEventFilter = TypedEventFilter; - -export interface log_stringEventObject { - arg0: string; -} -export type log_stringEvent = TypedEvent<[string], log_stringEventObject>; - -export type log_stringEventFilter = TypedEventFilter; - -export interface log_uintEventObject { - arg0: BigNumber; -} -export type log_uintEvent = TypedEvent<[BigNumber], log_uintEventObject>; - -export type log_uintEventFilter = TypedEventFilter; - -export interface logsEventObject { - arg0: string; -} -export type logsEvent = TypedEvent<[string], logsEventObject>; - -export type logsEventFilter = TypedEventFilter; - -export interface CreditFacadeTestSuite extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: CreditFacadeTestSuiteInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - IS_TEST(overrides?: CallOverrides): Promise<[boolean]>; - - _getAccountAmount(overrides?: CallOverrides): Promise<[BigNumber]>; - - _getCollateralTokens( - t: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - acl(overrides?: CallOverrides): Promise<[string]>; - - addMockPriceFeed( - token: string, - price: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - addressProvider(overrides?: CallOverrides): Promise<[string]>; - - af(overrides?: CallOverrides): Promise<[string]>; - - cr(overrides?: CallOverrides): Promise<[string]>; - - creditConfigurator(overrides?: CallOverrides): Promise<[string]>; - - creditFacade(overrides?: CallOverrides): Promise<[string]>; - - creditManager(overrides?: CallOverrides): Promise<[string]>; - - degenNFT(overrides?: CallOverrides): Promise<[string]>; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - gp(overrides?: CallOverrides): Promise<[string]>; - - lt(arg0: BigNumberish, overrides?: CallOverrides): Promise<[number]>; - - maxBorrowedAmount(overrides?: CallOverrides): Promise<[BigNumber]>; - - minBorrowedAmount(overrides?: CallOverrides): Promise<[BigNumber]>; - - poolMock(overrides?: CallOverrides): Promise<[string]>; - - priceOracle(overrides?: CallOverrides): Promise<[string]>; - - testFacadeWithDegenNFT( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - testFacadeWithExpiration( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - testTokenSuite(overrides?: CallOverrides): Promise<[string]>; - - underlying(overrides?: CallOverrides): Promise<[string]>; - }; - - IS_TEST(overrides?: CallOverrides): Promise; - - _getAccountAmount(overrides?: CallOverrides): Promise; - - _getCollateralTokens( - t: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - acl(overrides?: CallOverrides): Promise; - - addMockPriceFeed( - token: string, - price: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - addressProvider(overrides?: CallOverrides): Promise; - - af(overrides?: CallOverrides): Promise; - - cr(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - degenNFT(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - gp(overrides?: CallOverrides): Promise; - - lt(arg0: BigNumberish, overrides?: CallOverrides): Promise; - - maxBorrowedAmount(overrides?: CallOverrides): Promise; - - minBorrowedAmount(overrides?: CallOverrides): Promise; - - poolMock(overrides?: CallOverrides): Promise; - - priceOracle(overrides?: CallOverrides): Promise; - - testFacadeWithDegenNFT( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - testFacadeWithExpiration( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - testTokenSuite(overrides?: CallOverrides): Promise; - - underlying(overrides?: CallOverrides): Promise; - - callStatic: { - IS_TEST(overrides?: CallOverrides): Promise; - - _getAccountAmount(overrides?: CallOverrides): Promise; - - _getCollateralTokens( - t: BigNumberish, - overrides?: CallOverrides - ): Promise; - - acl(overrides?: CallOverrides): Promise; - - addMockPriceFeed( - token: string, - price: BigNumberish, - overrides?: CallOverrides - ): Promise; - - addressProvider(overrides?: CallOverrides): Promise; - - af(overrides?: CallOverrides): Promise; - - cr(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - degenNFT(overrides?: CallOverrides): Promise; - - failed(overrides?: CallOverrides): Promise; - - gp(overrides?: CallOverrides): Promise; - - lt(arg0: BigNumberish, overrides?: CallOverrides): Promise; - - maxBorrowedAmount(overrides?: CallOverrides): Promise; - - minBorrowedAmount(overrides?: CallOverrides): Promise; - - poolMock(overrides?: CallOverrides): Promise; - - priceOracle(overrides?: CallOverrides): Promise; - - testFacadeWithDegenNFT(overrides?: CallOverrides): Promise; - - testFacadeWithExpiration(overrides?: CallOverrides): Promise; - - testTokenSuite(overrides?: CallOverrides): Promise; - - underlying(overrides?: CallOverrides): Promise; - }; - - filters: { - "log(string)"(arg0?: null): logEventFilter; - log(arg0?: null): logEventFilter; - - "log_address(address)"(arg0?: null): log_addressEventFilter; - log_address(arg0?: null): log_addressEventFilter; - - "log_bytes(bytes)"(arg0?: null): log_bytesEventFilter; - log_bytes(arg0?: null): log_bytesEventFilter; - - "log_bytes32(bytes32)"(arg0?: null): log_bytes32EventFilter; - log_bytes32(arg0?: null): log_bytes32EventFilter; - - "log_int(int256)"(arg0?: null): log_intEventFilter; - log_int(arg0?: null): log_intEventFilter; - - "log_named_address(string,address)"( - key?: null, - val?: null - ): log_named_addressEventFilter; - log_named_address(key?: null, val?: null): log_named_addressEventFilter; - - "log_named_bytes(string,bytes)"( - key?: null, - val?: null - ): log_named_bytesEventFilter; - log_named_bytes(key?: null, val?: null): log_named_bytesEventFilter; - - "log_named_bytes32(string,bytes32)"( - key?: null, - val?: null - ): log_named_bytes32EventFilter; - log_named_bytes32(key?: null, val?: null): log_named_bytes32EventFilter; - - "log_named_decimal_int(string,int256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - log_named_decimal_int( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - - "log_named_decimal_uint(string,uint256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - log_named_decimal_uint( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - - "log_named_int(string,int256)"( - key?: null, - val?: null - ): log_named_intEventFilter; - log_named_int(key?: null, val?: null): log_named_intEventFilter; - - "log_named_string(string,string)"( - key?: null, - val?: null - ): log_named_stringEventFilter; - log_named_string(key?: null, val?: null): log_named_stringEventFilter; - - "log_named_uint(string,uint256)"( - key?: null, - val?: null - ): log_named_uintEventFilter; - log_named_uint(key?: null, val?: null): log_named_uintEventFilter; - - "log_string(string)"(arg0?: null): log_stringEventFilter; - log_string(arg0?: null): log_stringEventFilter; - - "log_uint(uint256)"(arg0?: null): log_uintEventFilter; - log_uint(arg0?: null): log_uintEventFilter; - - "logs(bytes)"(arg0?: null): logsEventFilter; - logs(arg0?: null): logsEventFilter; - }; - - estimateGas: { - IS_TEST(overrides?: CallOverrides): Promise; - - _getAccountAmount(overrides?: CallOverrides): Promise; - - _getCollateralTokens( - t: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - acl(overrides?: CallOverrides): Promise; - - addMockPriceFeed( - token: string, - price: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - addressProvider(overrides?: CallOverrides): Promise; - - af(overrides?: CallOverrides): Promise; - - cr(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - degenNFT(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - gp(overrides?: CallOverrides): Promise; - - lt(arg0: BigNumberish, overrides?: CallOverrides): Promise; - - maxBorrowedAmount(overrides?: CallOverrides): Promise; - - minBorrowedAmount(overrides?: CallOverrides): Promise; - - poolMock(overrides?: CallOverrides): Promise; - - priceOracle(overrides?: CallOverrides): Promise; - - testFacadeWithDegenNFT( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - testFacadeWithExpiration( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - testTokenSuite(overrides?: CallOverrides): Promise; - - underlying(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - IS_TEST(overrides?: CallOverrides): Promise; - - _getAccountAmount(overrides?: CallOverrides): Promise; - - _getCollateralTokens( - t: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - acl(overrides?: CallOverrides): Promise; - - addMockPriceFeed( - token: string, - price: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - addressProvider(overrides?: CallOverrides): Promise; - - af(overrides?: CallOverrides): Promise; - - cr(overrides?: CallOverrides): Promise; - - creditConfigurator( - overrides?: CallOverrides - ): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - degenNFT(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - gp(overrides?: CallOverrides): Promise; - - lt( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - maxBorrowedAmount(overrides?: CallOverrides): Promise; - - minBorrowedAmount(overrides?: CallOverrides): Promise; - - poolMock(overrides?: CallOverrides): Promise; - - priceOracle(overrides?: CallOverrides): Promise; - - testFacadeWithDegenNFT( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - testFacadeWithExpiration( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - testTokenSuite(overrides?: CallOverrides): Promise; - - underlying(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/test/suites/CreditManagerTestSuite.ts b/src/types/contracts/test/suites/CreditManagerTestSuite.ts deleted file mode 100644 index 6c8e47ff..00000000 --- a/src/types/contracts/test/suites/CreditManagerTestSuite.ts +++ /dev/null @@ -1,748 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../common"; - -export type CollateralTokenStruct = { - token: string; - liquidationThreshold: BigNumberish; -}; - -export type CollateralTokenStructOutput = [string, number] & { - token: string; - liquidationThreshold: number; -}; - -export interface CreditManagerTestSuiteInterface extends utils.Interface { - functions: { - "IS_TEST()": FunctionFragment; - "_getAccountAmount()": FunctionFragment; - "_getCollateralTokens(uint8)": FunctionFragment; - "acl()": FunctionFragment; - "addMockPriceFeed(address,uint256)": FunctionFragment; - "addressProvider()": FunctionFragment; - "af()": FunctionFragment; - "cr()": FunctionFragment; - "creditManager()": FunctionFragment; - "failed()": FunctionFragment; - "gp()": FunctionFragment; - "lt(uint8)": FunctionFragment; - "openCreditAccount()": FunctionFragment; - "openCreditAccount(uint256)": FunctionFragment; - "poolMock()": FunctionFragment; - "priceOracle()": FunctionFragment; - "testTokenSuite()": FunctionFragment; - "underlying()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "IS_TEST" - | "_getAccountAmount" - | "_getCollateralTokens" - | "acl" - | "addMockPriceFeed" - | "addressProvider" - | "af" - | "cr" - | "creditManager" - | "failed" - | "gp" - | "lt" - | "openCreditAccount()" - | "openCreditAccount(uint256)" - | "poolMock" - | "priceOracle" - | "testTokenSuite" - | "underlying" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "IS_TEST", values?: undefined): string; - encodeFunctionData( - functionFragment: "_getAccountAmount", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "_getCollateralTokens", - values: [BigNumberish] - ): string; - encodeFunctionData(functionFragment: "acl", values?: undefined): string; - encodeFunctionData( - functionFragment: "addMockPriceFeed", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "addressProvider", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "af", values?: undefined): string; - encodeFunctionData(functionFragment: "cr", values?: undefined): string; - encodeFunctionData( - functionFragment: "creditManager", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "failed", values?: undefined): string; - encodeFunctionData(functionFragment: "gp", values?: undefined): string; - encodeFunctionData(functionFragment: "lt", values: [BigNumberish]): string; - encodeFunctionData( - functionFragment: "openCreditAccount()", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "openCreditAccount(uint256)", - values: [BigNumberish] - ): string; - encodeFunctionData(functionFragment: "poolMock", values?: undefined): string; - encodeFunctionData( - functionFragment: "priceOracle", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "testTokenSuite", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "underlying", - values?: undefined - ): string; - - decodeFunctionResult(functionFragment: "IS_TEST", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "_getAccountAmount", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "_getCollateralTokens", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "acl", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "addMockPriceFeed", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "addressProvider", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "af", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "cr", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "creditManager", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "failed", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "gp", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "lt", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "openCreditAccount()", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "openCreditAccount(uint256)", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "poolMock", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "priceOracle", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "testTokenSuite", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "underlying", data: BytesLike): Result; - - events: { - "log(string)": EventFragment; - "log_address(address)": EventFragment; - "log_bytes(bytes)": EventFragment; - "log_bytes32(bytes32)": EventFragment; - "log_int(int256)": EventFragment; - "log_named_address(string,address)": EventFragment; - "log_named_bytes(string,bytes)": EventFragment; - "log_named_bytes32(string,bytes32)": EventFragment; - "log_named_decimal_int(string,int256,uint256)": EventFragment; - "log_named_decimal_uint(string,uint256,uint256)": EventFragment; - "log_named_int(string,int256)": EventFragment; - "log_named_string(string,string)": EventFragment; - "log_named_uint(string,uint256)": EventFragment; - "log_string(string)": EventFragment; - "log_uint(uint256)": EventFragment; - "logs(bytes)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "log"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "logs"): EventFragment; -} - -export interface logEventObject { - arg0: string; -} -export type logEvent = TypedEvent<[string], logEventObject>; - -export type logEventFilter = TypedEventFilter; - -export interface log_addressEventObject { - arg0: string; -} -export type log_addressEvent = TypedEvent<[string], log_addressEventObject>; - -export type log_addressEventFilter = TypedEventFilter; - -export interface log_bytesEventObject { - arg0: string; -} -export type log_bytesEvent = TypedEvent<[string], log_bytesEventObject>; - -export type log_bytesEventFilter = TypedEventFilter; - -export interface log_bytes32EventObject { - arg0: string; -} -export type log_bytes32Event = TypedEvent<[string], log_bytes32EventObject>; - -export type log_bytes32EventFilter = TypedEventFilter; - -export interface log_intEventObject { - arg0: BigNumber; -} -export type log_intEvent = TypedEvent<[BigNumber], log_intEventObject>; - -export type log_intEventFilter = TypedEventFilter; - -export interface log_named_addressEventObject { - key: string; - val: string; -} -export type log_named_addressEvent = TypedEvent< - [string, string], - log_named_addressEventObject ->; - -export type log_named_addressEventFilter = - TypedEventFilter; - -export interface log_named_bytesEventObject { - key: string; - val: string; -} -export type log_named_bytesEvent = TypedEvent< - [string, string], - log_named_bytesEventObject ->; - -export type log_named_bytesEventFilter = TypedEventFilter; - -export interface log_named_bytes32EventObject { - key: string; - val: string; -} -export type log_named_bytes32Event = TypedEvent< - [string, string], - log_named_bytes32EventObject ->; - -export type log_named_bytes32EventFilter = - TypedEventFilter; - -export interface log_named_decimal_intEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_intEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_intEventObject ->; - -export type log_named_decimal_intEventFilter = - TypedEventFilter; - -export interface log_named_decimal_uintEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_uintEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_uintEventObject ->; - -export type log_named_decimal_uintEventFilter = - TypedEventFilter; - -export interface log_named_intEventObject { - key: string; - val: BigNumber; -} -export type log_named_intEvent = TypedEvent< - [string, BigNumber], - log_named_intEventObject ->; - -export type log_named_intEventFilter = TypedEventFilter; - -export interface log_named_stringEventObject { - key: string; - val: string; -} -export type log_named_stringEvent = TypedEvent< - [string, string], - log_named_stringEventObject ->; - -export type log_named_stringEventFilter = - TypedEventFilter; - -export interface log_named_uintEventObject { - key: string; - val: BigNumber; -} -export type log_named_uintEvent = TypedEvent< - [string, BigNumber], - log_named_uintEventObject ->; - -export type log_named_uintEventFilter = TypedEventFilter; - -export interface log_stringEventObject { - arg0: string; -} -export type log_stringEvent = TypedEvent<[string], log_stringEventObject>; - -export type log_stringEventFilter = TypedEventFilter; - -export interface log_uintEventObject { - arg0: BigNumber; -} -export type log_uintEvent = TypedEvent<[BigNumber], log_uintEventObject>; - -export type log_uintEventFilter = TypedEventFilter; - -export interface logsEventObject { - arg0: string; -} -export type logsEvent = TypedEvent<[string], logsEventObject>; - -export type logsEventFilter = TypedEventFilter; - -export interface CreditManagerTestSuite extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: CreditManagerTestSuiteInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - IS_TEST(overrides?: CallOverrides): Promise<[boolean]>; - - _getAccountAmount(overrides?: CallOverrides): Promise<[BigNumber]>; - - _getCollateralTokens( - t: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - acl(overrides?: CallOverrides): Promise<[string]>; - - addMockPriceFeed( - token: string, - price: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - addressProvider(overrides?: CallOverrides): Promise<[string]>; - - af(overrides?: CallOverrides): Promise<[string]>; - - cr(overrides?: CallOverrides): Promise<[string]>; - - creditManager(overrides?: CallOverrides): Promise<[string]>; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - gp(overrides?: CallOverrides): Promise<[string]>; - - lt(arg0: BigNumberish, overrides?: CallOverrides): Promise<[number]>; - - "openCreditAccount()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "openCreditAccount(uint256)"( - _borrowedAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - poolMock(overrides?: CallOverrides): Promise<[string]>; - - priceOracle(overrides?: CallOverrides): Promise<[string]>; - - testTokenSuite(overrides?: CallOverrides): Promise<[string]>; - - underlying(overrides?: CallOverrides): Promise<[string]>; - }; - - IS_TEST(overrides?: CallOverrides): Promise; - - _getAccountAmount(overrides?: CallOverrides): Promise; - - _getCollateralTokens( - t: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - acl(overrides?: CallOverrides): Promise; - - addMockPriceFeed( - token: string, - price: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - addressProvider(overrides?: CallOverrides): Promise; - - af(overrides?: CallOverrides): Promise; - - cr(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - gp(overrides?: CallOverrides): Promise; - - lt(arg0: BigNumberish, overrides?: CallOverrides): Promise; - - "openCreditAccount()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "openCreditAccount(uint256)"( - _borrowedAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - poolMock(overrides?: CallOverrides): Promise; - - priceOracle(overrides?: CallOverrides): Promise; - - testTokenSuite(overrides?: CallOverrides): Promise; - - underlying(overrides?: CallOverrides): Promise; - - callStatic: { - IS_TEST(overrides?: CallOverrides): Promise; - - _getAccountAmount(overrides?: CallOverrides): Promise; - - _getCollateralTokens( - t: BigNumberish, - overrides?: CallOverrides - ): Promise; - - acl(overrides?: CallOverrides): Promise; - - addMockPriceFeed( - token: string, - price: BigNumberish, - overrides?: CallOverrides - ): Promise; - - addressProvider(overrides?: CallOverrides): Promise; - - af(overrides?: CallOverrides): Promise; - - cr(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - failed(overrides?: CallOverrides): Promise; - - gp(overrides?: CallOverrides): Promise; - - lt(arg0: BigNumberish, overrides?: CallOverrides): Promise; - - "openCreditAccount()"( - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber, BigNumber, string] & { - borrowedAmount: BigNumber; - cumulativeIndexAtOpen: BigNumber; - cumulativeIndexAtClose: BigNumber; - creditAccount: string; - } - >; - - "openCreditAccount(uint256)"( - _borrowedAmount: BigNumberish, - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber, BigNumber, string] & { - borrowedAmount: BigNumber; - cumulativeIndexAtOpen: BigNumber; - cumulativeIndexAtClose: BigNumber; - creditAccount: string; - } - >; - - poolMock(overrides?: CallOverrides): Promise; - - priceOracle(overrides?: CallOverrides): Promise; - - testTokenSuite(overrides?: CallOverrides): Promise; - - underlying(overrides?: CallOverrides): Promise; - }; - - filters: { - "log(string)"(arg0?: null): logEventFilter; - log(arg0?: null): logEventFilter; - - "log_address(address)"(arg0?: null): log_addressEventFilter; - log_address(arg0?: null): log_addressEventFilter; - - "log_bytes(bytes)"(arg0?: null): log_bytesEventFilter; - log_bytes(arg0?: null): log_bytesEventFilter; - - "log_bytes32(bytes32)"(arg0?: null): log_bytes32EventFilter; - log_bytes32(arg0?: null): log_bytes32EventFilter; - - "log_int(int256)"(arg0?: null): log_intEventFilter; - log_int(arg0?: null): log_intEventFilter; - - "log_named_address(string,address)"( - key?: null, - val?: null - ): log_named_addressEventFilter; - log_named_address(key?: null, val?: null): log_named_addressEventFilter; - - "log_named_bytes(string,bytes)"( - key?: null, - val?: null - ): log_named_bytesEventFilter; - log_named_bytes(key?: null, val?: null): log_named_bytesEventFilter; - - "log_named_bytes32(string,bytes32)"( - key?: null, - val?: null - ): log_named_bytes32EventFilter; - log_named_bytes32(key?: null, val?: null): log_named_bytes32EventFilter; - - "log_named_decimal_int(string,int256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - log_named_decimal_int( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - - "log_named_decimal_uint(string,uint256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - log_named_decimal_uint( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - - "log_named_int(string,int256)"( - key?: null, - val?: null - ): log_named_intEventFilter; - log_named_int(key?: null, val?: null): log_named_intEventFilter; - - "log_named_string(string,string)"( - key?: null, - val?: null - ): log_named_stringEventFilter; - log_named_string(key?: null, val?: null): log_named_stringEventFilter; - - "log_named_uint(string,uint256)"( - key?: null, - val?: null - ): log_named_uintEventFilter; - log_named_uint(key?: null, val?: null): log_named_uintEventFilter; - - "log_string(string)"(arg0?: null): log_stringEventFilter; - log_string(arg0?: null): log_stringEventFilter; - - "log_uint(uint256)"(arg0?: null): log_uintEventFilter; - log_uint(arg0?: null): log_uintEventFilter; - - "logs(bytes)"(arg0?: null): logsEventFilter; - logs(arg0?: null): logsEventFilter; - }; - - estimateGas: { - IS_TEST(overrides?: CallOverrides): Promise; - - _getAccountAmount(overrides?: CallOverrides): Promise; - - _getCollateralTokens( - t: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - acl(overrides?: CallOverrides): Promise; - - addMockPriceFeed( - token: string, - price: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - addressProvider(overrides?: CallOverrides): Promise; - - af(overrides?: CallOverrides): Promise; - - cr(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - gp(overrides?: CallOverrides): Promise; - - lt(arg0: BigNumberish, overrides?: CallOverrides): Promise; - - "openCreditAccount()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "openCreditAccount(uint256)"( - _borrowedAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - poolMock(overrides?: CallOverrides): Promise; - - priceOracle(overrides?: CallOverrides): Promise; - - testTokenSuite(overrides?: CallOverrides): Promise; - - underlying(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - IS_TEST(overrides?: CallOverrides): Promise; - - _getAccountAmount(overrides?: CallOverrides): Promise; - - _getCollateralTokens( - t: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - acl(overrides?: CallOverrides): Promise; - - addMockPriceFeed( - token: string, - price: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - addressProvider(overrides?: CallOverrides): Promise; - - af(overrides?: CallOverrides): Promise; - - cr(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - gp(overrides?: CallOverrides): Promise; - - lt( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "openCreditAccount()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "openCreditAccount(uint256)"( - _borrowedAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - poolMock(overrides?: CallOverrides): Promise; - - priceOracle(overrides?: CallOverrides): Promise; - - testTokenSuite(overrides?: CallOverrides): Promise; - - underlying(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/test/suites/PoolServiceTestSuite.ts b/src/types/contracts/test/suites/PoolServiceTestSuite.ts deleted file mode 100644 index 99f9f6d2..00000000 --- a/src/types/contracts/test/suites/PoolServiceTestSuite.ts +++ /dev/null @@ -1,209 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BytesLike, - CallOverrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../common"; - -export interface PoolServiceTestSuiteInterface extends utils.Interface { - functions: { - "acl()": FunctionFragment; - "addressProvider()": FunctionFragment; - "cmMock()": FunctionFragment; - "dieselToken()": FunctionFragment; - "linearIRModel()": FunctionFragment; - "poolService()": FunctionFragment; - "treasury()": FunctionFragment; - "underlying()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "acl" - | "addressProvider" - | "cmMock" - | "dieselToken" - | "linearIRModel" - | "poolService" - | "treasury" - | "underlying" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "acl", values?: undefined): string; - encodeFunctionData( - functionFragment: "addressProvider", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "cmMock", values?: undefined): string; - encodeFunctionData( - functionFragment: "dieselToken", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "linearIRModel", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "poolService", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "treasury", values?: undefined): string; - encodeFunctionData( - functionFragment: "underlying", - values?: undefined - ): string; - - decodeFunctionResult(functionFragment: "acl", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "addressProvider", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "cmMock", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "dieselToken", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "linearIRModel", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "poolService", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "treasury", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "underlying", data: BytesLike): Result; - - events: {}; -} - -export interface PoolServiceTestSuite extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: PoolServiceTestSuiteInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - acl(overrides?: CallOverrides): Promise<[string]>; - - addressProvider(overrides?: CallOverrides): Promise<[string]>; - - cmMock(overrides?: CallOverrides): Promise<[string]>; - - dieselToken(overrides?: CallOverrides): Promise<[string]>; - - linearIRModel(overrides?: CallOverrides): Promise<[string]>; - - poolService(overrides?: CallOverrides): Promise<[string]>; - - treasury(overrides?: CallOverrides): Promise<[string]>; - - underlying(overrides?: CallOverrides): Promise<[string]>; - }; - - acl(overrides?: CallOverrides): Promise; - - addressProvider(overrides?: CallOverrides): Promise; - - cmMock(overrides?: CallOverrides): Promise; - - dieselToken(overrides?: CallOverrides): Promise; - - linearIRModel(overrides?: CallOverrides): Promise; - - poolService(overrides?: CallOverrides): Promise; - - treasury(overrides?: CallOverrides): Promise; - - underlying(overrides?: CallOverrides): Promise; - - callStatic: { - acl(overrides?: CallOverrides): Promise; - - addressProvider(overrides?: CallOverrides): Promise; - - cmMock(overrides?: CallOverrides): Promise; - - dieselToken(overrides?: CallOverrides): Promise; - - linearIRModel(overrides?: CallOverrides): Promise; - - poolService(overrides?: CallOverrides): Promise; - - treasury(overrides?: CallOverrides): Promise; - - underlying(overrides?: CallOverrides): Promise; - }; - - filters: {}; - - estimateGas: { - acl(overrides?: CallOverrides): Promise; - - addressProvider(overrides?: CallOverrides): Promise; - - cmMock(overrides?: CallOverrides): Promise; - - dieselToken(overrides?: CallOverrides): Promise; - - linearIRModel(overrides?: CallOverrides): Promise; - - poolService(overrides?: CallOverrides): Promise; - - treasury(overrides?: CallOverrides): Promise; - - underlying(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - acl(overrides?: CallOverrides): Promise; - - addressProvider(overrides?: CallOverrides): Promise; - - cmMock(overrides?: CallOverrides): Promise; - - dieselToken(overrides?: CallOverrides): Promise; - - linearIRModel(overrides?: CallOverrides): Promise; - - poolService(overrides?: CallOverrides): Promise; - - treasury(overrides?: CallOverrides): Promise; - - underlying(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/test/suites/TokensTestSuite.ts b/src/types/contracts/test/suites/TokensTestSuite.ts deleted file mode 100644 index fca1a0a0..00000000 --- a/src/types/contracts/test/suites/TokensTestSuite.ts +++ /dev/null @@ -1,980 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PayableOverrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../common"; - -export type PriceFeedConfigStruct = { token: string; priceFeed: string }; - -export type PriceFeedConfigStructOutput = [string, string] & { - token: string; - priceFeed: string; -}; - -export interface TokensTestSuiteInterface extends utils.Interface { - functions: { - "IS_TEST()": FunctionFragment; - "addressOf(uint8)": FunctionFragment; - "allowance(uint8,address,address)": FunctionFragment; - "approve(uint8,address,address,uint256)": FunctionFragment; - "approve(uint8,address,address)": FunctionFragment; - "approve(address,address,address)": FunctionFragment; - "balanceOf(uint8,address)": FunctionFragment; - "burn(uint8,address,uint256)": FunctionFragment; - "failed()": FunctionFragment; - "getPriceFeeds()": FunctionFragment; - "mint(address,address,uint256)": FunctionFragment; - "mint(uint8,address,uint256)": FunctionFragment; - "priceFeeds(uint256)": FunctionFragment; - "priceFeedsMap(uint8)": FunctionFragment; - "prices(uint8)": FunctionFragment; - "symbols(uint8)": FunctionFragment; - "tokenIndexes(address)": FunctionFragment; - "tokenToType(uint8)": FunctionFragment; - "topUpWETH()": FunctionFragment; - "wethToken()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "IS_TEST" - | "addressOf" - | "allowance" - | "approve(uint8,address,address,uint256)" - | "approve(uint8,address,address)" - | "approve(address,address,address)" - | "balanceOf" - | "burn" - | "failed" - | "getPriceFeeds" - | "mint(address,address,uint256)" - | "mint(uint8,address,uint256)" - | "priceFeeds" - | "priceFeedsMap" - | "prices" - | "symbols" - | "tokenIndexes" - | "tokenToType" - | "topUpWETH" - | "wethToken" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "IS_TEST", values?: undefined): string; - encodeFunctionData( - functionFragment: "addressOf", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "allowance", - values: [BigNumberish, string, string] - ): string; - encodeFunctionData( - functionFragment: "approve(uint8,address,address,uint256)", - values: [BigNumberish, string, string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "approve(uint8,address,address)", - values: [BigNumberish, string, string] - ): string; - encodeFunctionData( - functionFragment: "approve(address,address,address)", - values: [string, string, string] - ): string; - encodeFunctionData( - functionFragment: "balanceOf", - values: [BigNumberish, string] - ): string; - encodeFunctionData( - functionFragment: "burn", - values: [BigNumberish, string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "failed", values?: undefined): string; - encodeFunctionData( - functionFragment: "getPriceFeeds", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "mint(address,address,uint256)", - values: [string, string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "mint(uint8,address,uint256)", - values: [BigNumberish, string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "priceFeeds", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "priceFeedsMap", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "prices", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "symbols", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "tokenIndexes", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "tokenToType", - values: [BigNumberish] - ): string; - encodeFunctionData(functionFragment: "topUpWETH", values?: undefined): string; - encodeFunctionData(functionFragment: "wethToken", values?: undefined): string; - - decodeFunctionResult(functionFragment: "IS_TEST", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "addressOf", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "approve(uint8,address,address,uint256)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "approve(uint8,address,address)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "approve(address,address,address)", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "burn", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "failed", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "getPriceFeeds", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "mint(address,address,uint256)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "mint(uint8,address,uint256)", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "priceFeeds", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "priceFeedsMap", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "prices", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "symbols", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "tokenIndexes", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "tokenToType", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "topUpWETH", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "wethToken", data: BytesLike): Result; - - events: { - "log(string)": EventFragment; - "log_address(address)": EventFragment; - "log_bytes(bytes)": EventFragment; - "log_bytes32(bytes32)": EventFragment; - "log_int(int256)": EventFragment; - "log_named_address(string,address)": EventFragment; - "log_named_bytes(string,bytes)": EventFragment; - "log_named_bytes32(string,bytes32)": EventFragment; - "log_named_decimal_int(string,int256,uint256)": EventFragment; - "log_named_decimal_uint(string,uint256,uint256)": EventFragment; - "log_named_int(string,int256)": EventFragment; - "log_named_string(string,string)": EventFragment; - "log_named_uint(string,uint256)": EventFragment; - "log_string(string)": EventFragment; - "log_uint(uint256)": EventFragment; - "logs(bytes)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "log"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "logs"): EventFragment; -} - -export interface logEventObject { - arg0: string; -} -export type logEvent = TypedEvent<[string], logEventObject>; - -export type logEventFilter = TypedEventFilter; - -export interface log_addressEventObject { - arg0: string; -} -export type log_addressEvent = TypedEvent<[string], log_addressEventObject>; - -export type log_addressEventFilter = TypedEventFilter; - -export interface log_bytesEventObject { - arg0: string; -} -export type log_bytesEvent = TypedEvent<[string], log_bytesEventObject>; - -export type log_bytesEventFilter = TypedEventFilter; - -export interface log_bytes32EventObject { - arg0: string; -} -export type log_bytes32Event = TypedEvent<[string], log_bytes32EventObject>; - -export type log_bytes32EventFilter = TypedEventFilter; - -export interface log_intEventObject { - arg0: BigNumber; -} -export type log_intEvent = TypedEvent<[BigNumber], log_intEventObject>; - -export type log_intEventFilter = TypedEventFilter; - -export interface log_named_addressEventObject { - key: string; - val: string; -} -export type log_named_addressEvent = TypedEvent< - [string, string], - log_named_addressEventObject ->; - -export type log_named_addressEventFilter = - TypedEventFilter; - -export interface log_named_bytesEventObject { - key: string; - val: string; -} -export type log_named_bytesEvent = TypedEvent< - [string, string], - log_named_bytesEventObject ->; - -export type log_named_bytesEventFilter = TypedEventFilter; - -export interface log_named_bytes32EventObject { - key: string; - val: string; -} -export type log_named_bytes32Event = TypedEvent< - [string, string], - log_named_bytes32EventObject ->; - -export type log_named_bytes32EventFilter = - TypedEventFilter; - -export interface log_named_decimal_intEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_intEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_intEventObject ->; - -export type log_named_decimal_intEventFilter = - TypedEventFilter; - -export interface log_named_decimal_uintEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_uintEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_uintEventObject ->; - -export type log_named_decimal_uintEventFilter = - TypedEventFilter; - -export interface log_named_intEventObject { - key: string; - val: BigNumber; -} -export type log_named_intEvent = TypedEvent< - [string, BigNumber], - log_named_intEventObject ->; - -export type log_named_intEventFilter = TypedEventFilter; - -export interface log_named_stringEventObject { - key: string; - val: string; -} -export type log_named_stringEvent = TypedEvent< - [string, string], - log_named_stringEventObject ->; - -export type log_named_stringEventFilter = - TypedEventFilter; - -export interface log_named_uintEventObject { - key: string; - val: BigNumber; -} -export type log_named_uintEvent = TypedEvent< - [string, BigNumber], - log_named_uintEventObject ->; - -export type log_named_uintEventFilter = TypedEventFilter; - -export interface log_stringEventObject { - arg0: string; -} -export type log_stringEvent = TypedEvent<[string], log_stringEventObject>; - -export type log_stringEventFilter = TypedEventFilter; - -export interface log_uintEventObject { - arg0: BigNumber; -} -export type log_uintEvent = TypedEvent<[BigNumber], log_uintEventObject>; - -export type log_uintEventFilter = TypedEventFilter; - -export interface logsEventObject { - arg0: string; -} -export type logsEvent = TypedEvent<[string], logsEventObject>; - -export type logsEventFilter = TypedEventFilter; - -export interface TokensTestSuite extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: TokensTestSuiteInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - IS_TEST(overrides?: CallOverrides): Promise<[boolean]>; - - addressOf(arg0: BigNumberish, overrides?: CallOverrides): Promise<[string]>; - - allowance( - t: BigNumberish, - holder: string, - targetContract: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "approve(uint8,address,address,uint256)"( - t: BigNumberish, - holder: string, - targetContract: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(uint8,address,address)"( - t: BigNumberish, - holder: string, - targetContract: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,address,address)"( - token: string, - holder: string, - targetContract: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf( - t: BigNumberish, - holder: string, - overrides?: CallOverrides - ): Promise<[BigNumber] & { balance: BigNumber }>; - - burn( - t: BigNumberish, - from: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getPriceFeeds( - overrides?: CallOverrides - ): Promise<[PriceFeedConfigStructOutput[]]>; - - "mint(address,address,uint256)"( - token: string, - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "mint(uint8,address,uint256)"( - t: BigNumberish, - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - priceFeeds( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise<[string, string] & { token: string; priceFeed: string }>; - - priceFeedsMap( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - prices(arg0: BigNumberish, overrides?: CallOverrides): Promise<[BigNumber]>; - - symbols(arg0: BigNumberish, overrides?: CallOverrides): Promise<[string]>; - - tokenIndexes(arg0: string, overrides?: CallOverrides): Promise<[number]>; - - tokenToType( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise<[number]>; - - topUpWETH( - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - wethToken(overrides?: CallOverrides): Promise<[string]>; - }; - - IS_TEST(overrides?: CallOverrides): Promise; - - addressOf(arg0: BigNumberish, overrides?: CallOverrides): Promise; - - allowance( - t: BigNumberish, - holder: string, - targetContract: string, - overrides?: CallOverrides - ): Promise; - - "approve(uint8,address,address,uint256)"( - t: BigNumberish, - holder: string, - targetContract: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(uint8,address,address)"( - t: BigNumberish, - holder: string, - targetContract: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,address,address)"( - token: string, - holder: string, - targetContract: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf( - t: BigNumberish, - holder: string, - overrides?: CallOverrides - ): Promise; - - burn( - t: BigNumberish, - from: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getPriceFeeds( - overrides?: CallOverrides - ): Promise; - - "mint(address,address,uint256)"( - token: string, - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "mint(uint8,address,uint256)"( - t: BigNumberish, - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - priceFeeds( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise<[string, string] & { token: string; priceFeed: string }>; - - priceFeedsMap(arg0: BigNumberish, overrides?: CallOverrides): Promise; - - prices(arg0: BigNumberish, overrides?: CallOverrides): Promise; - - symbols(arg0: BigNumberish, overrides?: CallOverrides): Promise; - - tokenIndexes(arg0: string, overrides?: CallOverrides): Promise; - - tokenToType(arg0: BigNumberish, overrides?: CallOverrides): Promise; - - topUpWETH( - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - wethToken(overrides?: CallOverrides): Promise; - - callStatic: { - IS_TEST(overrides?: CallOverrides): Promise; - - addressOf(arg0: BigNumberish, overrides?: CallOverrides): Promise; - - allowance( - t: BigNumberish, - holder: string, - targetContract: string, - overrides?: CallOverrides - ): Promise; - - "approve(uint8,address,address,uint256)"( - t: BigNumberish, - holder: string, - targetContract: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "approve(uint8,address,address)"( - t: BigNumberish, - holder: string, - targetContract: string, - overrides?: CallOverrides - ): Promise; - - "approve(address,address,address)"( - token: string, - holder: string, - targetContract: string, - overrides?: CallOverrides - ): Promise; - - balanceOf( - t: BigNumberish, - holder: string, - overrides?: CallOverrides - ): Promise; - - burn( - t: BigNumberish, - from: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - failed(overrides?: CallOverrides): Promise; - - getPriceFeeds( - overrides?: CallOverrides - ): Promise; - - "mint(address,address,uint256)"( - token: string, - to: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "mint(uint8,address,uint256)"( - t: BigNumberish, - to: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - priceFeeds( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise<[string, string] & { token: string; priceFeed: string }>; - - priceFeedsMap( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - prices(arg0: BigNumberish, overrides?: CallOverrides): Promise; - - symbols(arg0: BigNumberish, overrides?: CallOverrides): Promise; - - tokenIndexes(arg0: string, overrides?: CallOverrides): Promise; - - tokenToType(arg0: BigNumberish, overrides?: CallOverrides): Promise; - - topUpWETH(overrides?: CallOverrides): Promise; - - wethToken(overrides?: CallOverrides): Promise; - }; - - filters: { - "log(string)"(arg0?: null): logEventFilter; - log(arg0?: null): logEventFilter; - - "log_address(address)"(arg0?: null): log_addressEventFilter; - log_address(arg0?: null): log_addressEventFilter; - - "log_bytes(bytes)"(arg0?: null): log_bytesEventFilter; - log_bytes(arg0?: null): log_bytesEventFilter; - - "log_bytes32(bytes32)"(arg0?: null): log_bytes32EventFilter; - log_bytes32(arg0?: null): log_bytes32EventFilter; - - "log_int(int256)"(arg0?: null): log_intEventFilter; - log_int(arg0?: null): log_intEventFilter; - - "log_named_address(string,address)"( - key?: null, - val?: null - ): log_named_addressEventFilter; - log_named_address(key?: null, val?: null): log_named_addressEventFilter; - - "log_named_bytes(string,bytes)"( - key?: null, - val?: null - ): log_named_bytesEventFilter; - log_named_bytes(key?: null, val?: null): log_named_bytesEventFilter; - - "log_named_bytes32(string,bytes32)"( - key?: null, - val?: null - ): log_named_bytes32EventFilter; - log_named_bytes32(key?: null, val?: null): log_named_bytes32EventFilter; - - "log_named_decimal_int(string,int256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - log_named_decimal_int( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - - "log_named_decimal_uint(string,uint256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - log_named_decimal_uint( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - - "log_named_int(string,int256)"( - key?: null, - val?: null - ): log_named_intEventFilter; - log_named_int(key?: null, val?: null): log_named_intEventFilter; - - "log_named_string(string,string)"( - key?: null, - val?: null - ): log_named_stringEventFilter; - log_named_string(key?: null, val?: null): log_named_stringEventFilter; - - "log_named_uint(string,uint256)"( - key?: null, - val?: null - ): log_named_uintEventFilter; - log_named_uint(key?: null, val?: null): log_named_uintEventFilter; - - "log_string(string)"(arg0?: null): log_stringEventFilter; - log_string(arg0?: null): log_stringEventFilter; - - "log_uint(uint256)"(arg0?: null): log_uintEventFilter; - log_uint(arg0?: null): log_uintEventFilter; - - "logs(bytes)"(arg0?: null): logsEventFilter; - logs(arg0?: null): logsEventFilter; - }; - - estimateGas: { - IS_TEST(overrides?: CallOverrides): Promise; - - addressOf( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - allowance( - t: BigNumberish, - holder: string, - targetContract: string, - overrides?: CallOverrides - ): Promise; - - "approve(uint8,address,address,uint256)"( - t: BigNumberish, - holder: string, - targetContract: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(uint8,address,address)"( - t: BigNumberish, - holder: string, - targetContract: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,address,address)"( - token: string, - holder: string, - targetContract: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf( - t: BigNumberish, - holder: string, - overrides?: CallOverrides - ): Promise; - - burn( - t: BigNumberish, - from: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getPriceFeeds(overrides?: CallOverrides): Promise; - - "mint(address,address,uint256)"( - token: string, - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "mint(uint8,address,uint256)"( - t: BigNumberish, - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - priceFeeds( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - priceFeedsMap( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - prices(arg0: BigNumberish, overrides?: CallOverrides): Promise; - - symbols(arg0: BigNumberish, overrides?: CallOverrides): Promise; - - tokenIndexes(arg0: string, overrides?: CallOverrides): Promise; - - tokenToType( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - topUpWETH( - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - wethToken(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - IS_TEST(overrides?: CallOverrides): Promise; - - addressOf( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - allowance( - t: BigNumberish, - holder: string, - targetContract: string, - overrides?: CallOverrides - ): Promise; - - "approve(uint8,address,address,uint256)"( - t: BigNumberish, - holder: string, - targetContract: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(uint8,address,address)"( - t: BigNumberish, - holder: string, - targetContract: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,address,address)"( - token: string, - holder: string, - targetContract: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf( - t: BigNumberish, - holder: string, - overrides?: CallOverrides - ): Promise; - - burn( - t: BigNumberish, - from: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getPriceFeeds(overrides?: CallOverrides): Promise; - - "mint(address,address,uint256)"( - token: string, - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "mint(uint8,address,uint256)"( - t: BigNumberish, - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - priceFeeds( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - priceFeedsMap( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - prices( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - symbols( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - tokenIndexes( - arg0: string, - overrides?: CallOverrides - ): Promise; - - tokenToType( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - topUpWETH( - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - wethToken(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/test/suites/index.ts b/src/types/contracts/test/suites/index.ts deleted file mode 100644 index e7b77f75..00000000 --- a/src/types/contracts/test/suites/index.ts +++ /dev/null @@ -1,10 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { BalanceHelper } from "./BalanceHelper"; -export type { BaseCreditTestSuite } from "./BaseCreditTestSuite"; -export type { CreditFacadeHelper } from "./CreditFacadeHelper"; -export type { CreditFacadeTestSuite } from "./CreditFacadeTestSuite"; -export type { CreditManagerTestSuite } from "./CreditManagerTestSuite"; -export type { PoolServiceTestSuite } from "./PoolServiceTestSuite"; -export type { TokensTestSuite } from "./TokensTestSuite"; diff --git a/src/types/contracts/test/support/PauseMulticall.t.sol/PauseMulticallTest.ts b/src/types/contracts/test/support/PauseMulticall.t.sol/PauseMulticallTest.ts deleted file mode 100644 index 2583bee5..00000000 --- a/src/types/contracts/test/support/PauseMulticall.t.sol/PauseMulticallTest.ts +++ /dev/null @@ -1,551 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface PauseMulticallTestInterface extends utils.Interface { - functions: { - "IS_TEST()": FunctionFragment; - "failed()": FunctionFragment; - "setUp()": FunctionFragment; - "test_PM_01_constructor_sets_correct_values()": FunctionFragment; - "test_PM_02_pauseAllCreditManagers_works_correctly()": FunctionFragment; - "test_PM_03_pauseAllPools_works_correctly()": FunctionFragment; - "test_PM_04_pauseAllContracts_works_correctly()": FunctionFragment; - "test_PM_05_functions_revert_when_caller_not_pausable_admin()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "IS_TEST" - | "failed" - | "setUp" - | "test_PM_01_constructor_sets_correct_values" - | "test_PM_02_pauseAllCreditManagers_works_correctly" - | "test_PM_03_pauseAllPools_works_correctly" - | "test_PM_04_pauseAllContracts_works_correctly" - | "test_PM_05_functions_revert_when_caller_not_pausable_admin" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "IS_TEST", values?: undefined): string; - encodeFunctionData(functionFragment: "failed", values?: undefined): string; - encodeFunctionData(functionFragment: "setUp", values?: undefined): string; - encodeFunctionData( - functionFragment: "test_PM_01_constructor_sets_correct_values", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_PM_02_pauseAllCreditManagers_works_correctly", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_PM_03_pauseAllPools_works_correctly", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_PM_04_pauseAllContracts_works_correctly", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_PM_05_functions_revert_when_caller_not_pausable_admin", - values?: undefined - ): string; - - decodeFunctionResult(functionFragment: "IS_TEST", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "failed", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "setUp", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "test_PM_01_constructor_sets_correct_values", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_PM_02_pauseAllCreditManagers_works_correctly", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_PM_03_pauseAllPools_works_correctly", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_PM_04_pauseAllContracts_works_correctly", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_PM_05_functions_revert_when_caller_not_pausable_admin", - data: BytesLike - ): Result; - - events: { - "log(string)": EventFragment; - "log_address(address)": EventFragment; - "log_bytes(bytes)": EventFragment; - "log_bytes32(bytes32)": EventFragment; - "log_int(int256)": EventFragment; - "log_named_address(string,address)": EventFragment; - "log_named_bytes(string,bytes)": EventFragment; - "log_named_bytes32(string,bytes32)": EventFragment; - "log_named_decimal_int(string,int256,uint256)": EventFragment; - "log_named_decimal_uint(string,uint256,uint256)": EventFragment; - "log_named_int(string,int256)": EventFragment; - "log_named_string(string,string)": EventFragment; - "log_named_uint(string,uint256)": EventFragment; - "log_string(string)": EventFragment; - "log_uint(uint256)": EventFragment; - "logs(bytes)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "log"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "logs"): EventFragment; -} - -export interface logEventObject { - arg0: string; -} -export type logEvent = TypedEvent<[string], logEventObject>; - -export type logEventFilter = TypedEventFilter; - -export interface log_addressEventObject { - arg0: string; -} -export type log_addressEvent = TypedEvent<[string], log_addressEventObject>; - -export type log_addressEventFilter = TypedEventFilter; - -export interface log_bytesEventObject { - arg0: string; -} -export type log_bytesEvent = TypedEvent<[string], log_bytesEventObject>; - -export type log_bytesEventFilter = TypedEventFilter; - -export interface log_bytes32EventObject { - arg0: string; -} -export type log_bytes32Event = TypedEvent<[string], log_bytes32EventObject>; - -export type log_bytes32EventFilter = TypedEventFilter; - -export interface log_intEventObject { - arg0: BigNumber; -} -export type log_intEvent = TypedEvent<[BigNumber], log_intEventObject>; - -export type log_intEventFilter = TypedEventFilter; - -export interface log_named_addressEventObject { - key: string; - val: string; -} -export type log_named_addressEvent = TypedEvent< - [string, string], - log_named_addressEventObject ->; - -export type log_named_addressEventFilter = - TypedEventFilter; - -export interface log_named_bytesEventObject { - key: string; - val: string; -} -export type log_named_bytesEvent = TypedEvent< - [string, string], - log_named_bytesEventObject ->; - -export type log_named_bytesEventFilter = TypedEventFilter; - -export interface log_named_bytes32EventObject { - key: string; - val: string; -} -export type log_named_bytes32Event = TypedEvent< - [string, string], - log_named_bytes32EventObject ->; - -export type log_named_bytes32EventFilter = - TypedEventFilter; - -export interface log_named_decimal_intEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_intEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_intEventObject ->; - -export type log_named_decimal_intEventFilter = - TypedEventFilter; - -export interface log_named_decimal_uintEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_uintEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_uintEventObject ->; - -export type log_named_decimal_uintEventFilter = - TypedEventFilter; - -export interface log_named_intEventObject { - key: string; - val: BigNumber; -} -export type log_named_intEvent = TypedEvent< - [string, BigNumber], - log_named_intEventObject ->; - -export type log_named_intEventFilter = TypedEventFilter; - -export interface log_named_stringEventObject { - key: string; - val: string; -} -export type log_named_stringEvent = TypedEvent< - [string, string], - log_named_stringEventObject ->; - -export type log_named_stringEventFilter = - TypedEventFilter; - -export interface log_named_uintEventObject { - key: string; - val: BigNumber; -} -export type log_named_uintEvent = TypedEvent< - [string, BigNumber], - log_named_uintEventObject ->; - -export type log_named_uintEventFilter = TypedEventFilter; - -export interface log_stringEventObject { - arg0: string; -} -export type log_stringEvent = TypedEvent<[string], log_stringEventObject>; - -export type log_stringEventFilter = TypedEventFilter; - -export interface log_uintEventObject { - arg0: BigNumber; -} -export type log_uintEvent = TypedEvent<[BigNumber], log_uintEventObject>; - -export type log_uintEventFilter = TypedEventFilter; - -export interface logsEventObject { - arg0: string; -} -export type logsEvent = TypedEvent<[string], logsEventObject>; - -export type logsEventFilter = TypedEventFilter; - -export interface PauseMulticallTest extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: PauseMulticallTestInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - IS_TEST(overrides?: CallOverrides): Promise<[boolean]>; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PM_01_constructor_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PM_02_pauseAllCreditManagers_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PM_03_pauseAllPools_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PM_04_pauseAllContracts_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PM_05_functions_revert_when_caller_not_pausable_admin( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - IS_TEST(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PM_01_constructor_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PM_02_pauseAllCreditManagers_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PM_03_pauseAllPools_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PM_04_pauseAllContracts_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PM_05_functions_revert_when_caller_not_pausable_admin( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - IS_TEST(overrides?: CallOverrides): Promise; - - failed(overrides?: CallOverrides): Promise; - - setUp(overrides?: CallOverrides): Promise; - - test_PM_01_constructor_sets_correct_values( - overrides?: CallOverrides - ): Promise; - - test_PM_02_pauseAllCreditManagers_works_correctly( - overrides?: CallOverrides - ): Promise; - - test_PM_03_pauseAllPools_works_correctly( - overrides?: CallOverrides - ): Promise; - - test_PM_04_pauseAllContracts_works_correctly( - overrides?: CallOverrides - ): Promise; - - test_PM_05_functions_revert_when_caller_not_pausable_admin( - overrides?: CallOverrides - ): Promise; - }; - - filters: { - "log(string)"(arg0?: null): logEventFilter; - log(arg0?: null): logEventFilter; - - "log_address(address)"(arg0?: null): log_addressEventFilter; - log_address(arg0?: null): log_addressEventFilter; - - "log_bytes(bytes)"(arg0?: null): log_bytesEventFilter; - log_bytes(arg0?: null): log_bytesEventFilter; - - "log_bytes32(bytes32)"(arg0?: null): log_bytes32EventFilter; - log_bytes32(arg0?: null): log_bytes32EventFilter; - - "log_int(int256)"(arg0?: null): log_intEventFilter; - log_int(arg0?: null): log_intEventFilter; - - "log_named_address(string,address)"( - key?: null, - val?: null - ): log_named_addressEventFilter; - log_named_address(key?: null, val?: null): log_named_addressEventFilter; - - "log_named_bytes(string,bytes)"( - key?: null, - val?: null - ): log_named_bytesEventFilter; - log_named_bytes(key?: null, val?: null): log_named_bytesEventFilter; - - "log_named_bytes32(string,bytes32)"( - key?: null, - val?: null - ): log_named_bytes32EventFilter; - log_named_bytes32(key?: null, val?: null): log_named_bytes32EventFilter; - - "log_named_decimal_int(string,int256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - log_named_decimal_int( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - - "log_named_decimal_uint(string,uint256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - log_named_decimal_uint( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - - "log_named_int(string,int256)"( - key?: null, - val?: null - ): log_named_intEventFilter; - log_named_int(key?: null, val?: null): log_named_intEventFilter; - - "log_named_string(string,string)"( - key?: null, - val?: null - ): log_named_stringEventFilter; - log_named_string(key?: null, val?: null): log_named_stringEventFilter; - - "log_named_uint(string,uint256)"( - key?: null, - val?: null - ): log_named_uintEventFilter; - log_named_uint(key?: null, val?: null): log_named_uintEventFilter; - - "log_string(string)"(arg0?: null): log_stringEventFilter; - log_string(arg0?: null): log_stringEventFilter; - - "log_uint(uint256)"(arg0?: null): log_uintEventFilter; - log_uint(arg0?: null): log_uintEventFilter; - - "logs(bytes)"(arg0?: null): logsEventFilter; - logs(arg0?: null): logsEventFilter; - }; - - estimateGas: { - IS_TEST(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PM_01_constructor_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PM_02_pauseAllCreditManagers_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PM_03_pauseAllPools_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PM_04_pauseAllContracts_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PM_05_functions_revert_when_caller_not_pausable_admin( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - IS_TEST(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PM_01_constructor_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PM_02_pauseAllCreditManagers_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PM_03_pauseAllPools_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PM_04_pauseAllContracts_works_correctly( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_PM_05_functions_revert_when_caller_not_pausable_admin( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/src/types/contracts/test/support/PauseMulticall.t.sol/index.ts b/src/types/contracts/test/support/PauseMulticall.t.sol/index.ts deleted file mode 100644 index f5cbaf79..00000000 --- a/src/types/contracts/test/support/PauseMulticall.t.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { PauseMulticallTest } from "./PauseMulticallTest"; diff --git a/src/types/contracts/test/support/index.ts b/src/types/contracts/test/support/index.ts deleted file mode 100644 index 674cad90..00000000 --- a/src/types/contracts/test/support/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type * as pauseMulticallTSol from "./PauseMulticall.t.sol"; -export type { pauseMulticallTSol }; diff --git a/src/types/contracts/test/tokens/DegenNFT.t.sol/DegenNFTTest.ts b/src/types/contracts/test/tokens/DegenNFT.t.sol/DegenNFTTest.ts deleted file mode 100644 index 712aacb8..00000000 --- a/src/types/contracts/test/tokens/DegenNFT.t.sol/DegenNFTTest.ts +++ /dev/null @@ -1,970 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../../../common"; - -export interface DegenNFTTestInterface extends utils.Interface { - functions: { - "IS_TEST()": FunctionFragment; - "cft()": FunctionFragment; - "creditConfigurator()": FunctionFragment; - "creditFacade()": FunctionFragment; - "creditManager()": FunctionFragment; - "failed()": FunctionFragment; - "setUp()": FunctionFragment; - "test_DNFT_01_constructor_sets_correct_values()": FunctionFragment; - "test_DNFT_02A_setBaseUri_reverts_on_non_Configurator()": FunctionFragment; - "test_DNFT_02B_setMinter_reverts_on_non_Configurator()": FunctionFragment; - "test_DNFT_02C_addCreditFacade_reverts_on_non_Configurator()": FunctionFragment; - "test_DNFT_02D_addCreditFacade_reverts_on_non_Configurator()": FunctionFragment; - "test_DNFT_03_mint_reverts_on_non_minter()": FunctionFragment; - "test_DNFT_04_burn_reverts_on_non_CreditFacade()": FunctionFragment; - "test_DNFT_05A_setBasUri_correctly_sets_uri()": FunctionFragment; - "test_DNFT_05_setBasUri_correctly_sets_uri()": FunctionFragment; - "test_DNFT_06_addCreditFacade_reverts_on_invalid_address()": FunctionFragment; - "test_DNFT_07_mint_is_correct()": FunctionFragment; - "test_DNFT_08A_burn_reverts_on_insufficient_balance()": FunctionFragment; - "test_DNFT_08_burn_is_correct()": FunctionFragment; - "test_DNFT_09_removeCreditFacade_sets_value()": FunctionFragment; - "test_DNFT_10_addCreditFacade_sets_value()": FunctionFragment; - "test_DNFT_11_transfer_and_approval_functions_revert()": FunctionFragment; - "underlying()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "IS_TEST" - | "cft" - | "creditConfigurator" - | "creditFacade" - | "creditManager" - | "failed" - | "setUp" - | "test_DNFT_01_constructor_sets_correct_values" - | "test_DNFT_02A_setBaseUri_reverts_on_non_Configurator" - | "test_DNFT_02B_setMinter_reverts_on_non_Configurator" - | "test_DNFT_02C_addCreditFacade_reverts_on_non_Configurator" - | "test_DNFT_02D_addCreditFacade_reverts_on_non_Configurator" - | "test_DNFT_03_mint_reverts_on_non_minter" - | "test_DNFT_04_burn_reverts_on_non_CreditFacade" - | "test_DNFT_05A_setBasUri_correctly_sets_uri" - | "test_DNFT_05_setBasUri_correctly_sets_uri" - | "test_DNFT_06_addCreditFacade_reverts_on_invalid_address" - | "test_DNFT_07_mint_is_correct" - | "test_DNFT_08A_burn_reverts_on_insufficient_balance" - | "test_DNFT_08_burn_is_correct" - | "test_DNFT_09_removeCreditFacade_sets_value" - | "test_DNFT_10_addCreditFacade_sets_value" - | "test_DNFT_11_transfer_and_approval_functions_revert" - | "underlying" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "IS_TEST", values?: undefined): string; - encodeFunctionData(functionFragment: "cft", values?: undefined): string; - encodeFunctionData( - functionFragment: "creditConfigurator", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditFacade", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "creditManager", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "failed", values?: undefined): string; - encodeFunctionData(functionFragment: "setUp", values?: undefined): string; - encodeFunctionData( - functionFragment: "test_DNFT_01_constructor_sets_correct_values", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_DNFT_02A_setBaseUri_reverts_on_non_Configurator", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_DNFT_02B_setMinter_reverts_on_non_Configurator", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_DNFT_02C_addCreditFacade_reverts_on_non_Configurator", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_DNFT_02D_addCreditFacade_reverts_on_non_Configurator", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_DNFT_03_mint_reverts_on_non_minter", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_DNFT_04_burn_reverts_on_non_CreditFacade", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_DNFT_05A_setBasUri_correctly_sets_uri", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_DNFT_05_setBasUri_correctly_sets_uri", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_DNFT_06_addCreditFacade_reverts_on_invalid_address", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_DNFT_07_mint_is_correct", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_DNFT_08A_burn_reverts_on_insufficient_balance", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_DNFT_08_burn_is_correct", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_DNFT_09_removeCreditFacade_sets_value", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_DNFT_10_addCreditFacade_sets_value", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "test_DNFT_11_transfer_and_approval_functions_revert", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "underlying", - values?: undefined - ): string; - - decodeFunctionResult(functionFragment: "IS_TEST", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "cft", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "creditConfigurator", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditFacade", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "creditManager", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "failed", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "setUp", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "test_DNFT_01_constructor_sets_correct_values", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_DNFT_02A_setBaseUri_reverts_on_non_Configurator", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_DNFT_02B_setMinter_reverts_on_non_Configurator", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_DNFT_02C_addCreditFacade_reverts_on_non_Configurator", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_DNFT_02D_addCreditFacade_reverts_on_non_Configurator", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_DNFT_03_mint_reverts_on_non_minter", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_DNFT_04_burn_reverts_on_non_CreditFacade", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_DNFT_05A_setBasUri_correctly_sets_uri", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_DNFT_05_setBasUri_correctly_sets_uri", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_DNFT_06_addCreditFacade_reverts_on_invalid_address", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_DNFT_07_mint_is_correct", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_DNFT_08A_burn_reverts_on_insufficient_balance", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_DNFT_08_burn_is_correct", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_DNFT_09_removeCreditFacade_sets_value", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_DNFT_10_addCreditFacade_sets_value", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "test_DNFT_11_transfer_and_approval_functions_revert", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "underlying", data: BytesLike): Result; - - events: { - "log(string)": EventFragment; - "log_address(address)": EventFragment; - "log_bytes(bytes)": EventFragment; - "log_bytes32(bytes32)": EventFragment; - "log_int(int256)": EventFragment; - "log_named_address(string,address)": EventFragment; - "log_named_bytes(string,bytes)": EventFragment; - "log_named_bytes32(string,bytes32)": EventFragment; - "log_named_decimal_int(string,int256,uint256)": EventFragment; - "log_named_decimal_uint(string,uint256,uint256)": EventFragment; - "log_named_int(string,int256)": EventFragment; - "log_named_string(string,string)": EventFragment; - "log_named_uint(string,uint256)": EventFragment; - "log_string(string)": EventFragment; - "log_uint(uint256)": EventFragment; - "logs(bytes)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "log"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_address"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_bytes32"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_decimal_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_int"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_named_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_string"): EventFragment; - getEvent(nameOrSignatureOrTopic: "log_uint"): EventFragment; - getEvent(nameOrSignatureOrTopic: "logs"): EventFragment; -} - -export interface logEventObject { - arg0: string; -} -export type logEvent = TypedEvent<[string], logEventObject>; - -export type logEventFilter = TypedEventFilter; - -export interface log_addressEventObject { - arg0: string; -} -export type log_addressEvent = TypedEvent<[string], log_addressEventObject>; - -export type log_addressEventFilter = TypedEventFilter; - -export interface log_bytesEventObject { - arg0: string; -} -export type log_bytesEvent = TypedEvent<[string], log_bytesEventObject>; - -export type log_bytesEventFilter = TypedEventFilter; - -export interface log_bytes32EventObject { - arg0: string; -} -export type log_bytes32Event = TypedEvent<[string], log_bytes32EventObject>; - -export type log_bytes32EventFilter = TypedEventFilter; - -export interface log_intEventObject { - arg0: BigNumber; -} -export type log_intEvent = TypedEvent<[BigNumber], log_intEventObject>; - -export type log_intEventFilter = TypedEventFilter; - -export interface log_named_addressEventObject { - key: string; - val: string; -} -export type log_named_addressEvent = TypedEvent< - [string, string], - log_named_addressEventObject ->; - -export type log_named_addressEventFilter = - TypedEventFilter; - -export interface log_named_bytesEventObject { - key: string; - val: string; -} -export type log_named_bytesEvent = TypedEvent< - [string, string], - log_named_bytesEventObject ->; - -export type log_named_bytesEventFilter = TypedEventFilter; - -export interface log_named_bytes32EventObject { - key: string; - val: string; -} -export type log_named_bytes32Event = TypedEvent< - [string, string], - log_named_bytes32EventObject ->; - -export type log_named_bytes32EventFilter = - TypedEventFilter; - -export interface log_named_decimal_intEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_intEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_intEventObject ->; - -export type log_named_decimal_intEventFilter = - TypedEventFilter; - -export interface log_named_decimal_uintEventObject { - key: string; - val: BigNumber; - decimals: BigNumber; -} -export type log_named_decimal_uintEvent = TypedEvent< - [string, BigNumber, BigNumber], - log_named_decimal_uintEventObject ->; - -export type log_named_decimal_uintEventFilter = - TypedEventFilter; - -export interface log_named_intEventObject { - key: string; - val: BigNumber; -} -export type log_named_intEvent = TypedEvent< - [string, BigNumber], - log_named_intEventObject ->; - -export type log_named_intEventFilter = TypedEventFilter; - -export interface log_named_stringEventObject { - key: string; - val: string; -} -export type log_named_stringEvent = TypedEvent< - [string, string], - log_named_stringEventObject ->; - -export type log_named_stringEventFilter = - TypedEventFilter; - -export interface log_named_uintEventObject { - key: string; - val: BigNumber; -} -export type log_named_uintEvent = TypedEvent< - [string, BigNumber], - log_named_uintEventObject ->; - -export type log_named_uintEventFilter = TypedEventFilter; - -export interface log_stringEventObject { - arg0: string; -} -export type log_stringEvent = TypedEvent<[string], log_stringEventObject>; - -export type log_stringEventFilter = TypedEventFilter; - -export interface log_uintEventObject { - arg0: BigNumber; -} -export type log_uintEvent = TypedEvent<[BigNumber], log_uintEventObject>; - -export type log_uintEventFilter = TypedEventFilter; - -export interface logsEventObject { - arg0: string; -} -export type logsEvent = TypedEvent<[string], logsEventObject>; - -export type logsEventFilter = TypedEventFilter; - -export interface DegenNFTTest extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: DegenNFTTestInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - IS_TEST(overrides?: CallOverrides): Promise<[boolean]>; - - cft(overrides?: CallOverrides): Promise<[string]>; - - creditConfigurator(overrides?: CallOverrides): Promise<[string]>; - - creditFacade(overrides?: CallOverrides): Promise<[string]>; - - creditManager(overrides?: CallOverrides): Promise<[string]>; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_DNFT_01_constructor_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_DNFT_02A_setBaseUri_reverts_on_non_Configurator( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_DNFT_02B_setMinter_reverts_on_non_Configurator( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_DNFT_02C_addCreditFacade_reverts_on_non_Configurator( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_DNFT_02D_addCreditFacade_reverts_on_non_Configurator( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_DNFT_03_mint_reverts_on_non_minter( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_DNFT_04_burn_reverts_on_non_CreditFacade( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_DNFT_05A_setBasUri_correctly_sets_uri( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_DNFT_05_setBasUri_correctly_sets_uri( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_DNFT_06_addCreditFacade_reverts_on_invalid_address( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_DNFT_07_mint_is_correct( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_DNFT_08A_burn_reverts_on_insufficient_balance( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_DNFT_08_burn_is_correct( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_DNFT_09_removeCreditFacade_sets_value( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_DNFT_10_addCreditFacade_sets_value( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_DNFT_11_transfer_and_approval_functions_revert( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise<[string]>; - }; - - IS_TEST(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_DNFT_01_constructor_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_DNFT_02A_setBaseUri_reverts_on_non_Configurator( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_DNFT_02B_setMinter_reverts_on_non_Configurator( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_DNFT_02C_addCreditFacade_reverts_on_non_Configurator( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_DNFT_02D_addCreditFacade_reverts_on_non_Configurator( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_DNFT_03_mint_reverts_on_non_minter( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_DNFT_04_burn_reverts_on_non_CreditFacade( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_DNFT_05A_setBasUri_correctly_sets_uri( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_DNFT_05_setBasUri_correctly_sets_uri( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_DNFT_06_addCreditFacade_reverts_on_invalid_address( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_DNFT_07_mint_is_correct( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_DNFT_08A_burn_reverts_on_insufficient_balance( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_DNFT_08_burn_is_correct( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_DNFT_09_removeCreditFacade_sets_value( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_DNFT_10_addCreditFacade_sets_value( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_DNFT_11_transfer_and_approval_functions_revert( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - - callStatic: { - IS_TEST(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - failed(overrides?: CallOverrides): Promise; - - setUp(overrides?: CallOverrides): Promise; - - test_DNFT_01_constructor_sets_correct_values( - overrides?: CallOverrides - ): Promise; - - test_DNFT_02A_setBaseUri_reverts_on_non_Configurator( - overrides?: CallOverrides - ): Promise; - - test_DNFT_02B_setMinter_reverts_on_non_Configurator( - overrides?: CallOverrides - ): Promise; - - test_DNFT_02C_addCreditFacade_reverts_on_non_Configurator( - overrides?: CallOverrides - ): Promise; - - test_DNFT_02D_addCreditFacade_reverts_on_non_Configurator( - overrides?: CallOverrides - ): Promise; - - test_DNFT_03_mint_reverts_on_non_minter( - overrides?: CallOverrides - ): Promise; - - test_DNFT_04_burn_reverts_on_non_CreditFacade( - overrides?: CallOverrides - ): Promise; - - test_DNFT_05A_setBasUri_correctly_sets_uri( - overrides?: CallOverrides - ): Promise; - - test_DNFT_05_setBasUri_correctly_sets_uri( - overrides?: CallOverrides - ): Promise; - - test_DNFT_06_addCreditFacade_reverts_on_invalid_address( - overrides?: CallOverrides - ): Promise; - - test_DNFT_07_mint_is_correct(overrides?: CallOverrides): Promise; - - test_DNFT_08A_burn_reverts_on_insufficient_balance( - overrides?: CallOverrides - ): Promise; - - test_DNFT_08_burn_is_correct(overrides?: CallOverrides): Promise; - - test_DNFT_09_removeCreditFacade_sets_value( - overrides?: CallOverrides - ): Promise; - - test_DNFT_10_addCreditFacade_sets_value( - overrides?: CallOverrides - ): Promise; - - test_DNFT_11_transfer_and_approval_functions_revert( - overrides?: CallOverrides - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - }; - - filters: { - "log(string)"(arg0?: null): logEventFilter; - log(arg0?: null): logEventFilter; - - "log_address(address)"(arg0?: null): log_addressEventFilter; - log_address(arg0?: null): log_addressEventFilter; - - "log_bytes(bytes)"(arg0?: null): log_bytesEventFilter; - log_bytes(arg0?: null): log_bytesEventFilter; - - "log_bytes32(bytes32)"(arg0?: null): log_bytes32EventFilter; - log_bytes32(arg0?: null): log_bytes32EventFilter; - - "log_int(int256)"(arg0?: null): log_intEventFilter; - log_int(arg0?: null): log_intEventFilter; - - "log_named_address(string,address)"( - key?: null, - val?: null - ): log_named_addressEventFilter; - log_named_address(key?: null, val?: null): log_named_addressEventFilter; - - "log_named_bytes(string,bytes)"( - key?: null, - val?: null - ): log_named_bytesEventFilter; - log_named_bytes(key?: null, val?: null): log_named_bytesEventFilter; - - "log_named_bytes32(string,bytes32)"( - key?: null, - val?: null - ): log_named_bytes32EventFilter; - log_named_bytes32(key?: null, val?: null): log_named_bytes32EventFilter; - - "log_named_decimal_int(string,int256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - log_named_decimal_int( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_intEventFilter; - - "log_named_decimal_uint(string,uint256,uint256)"( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - log_named_decimal_uint( - key?: null, - val?: null, - decimals?: null - ): log_named_decimal_uintEventFilter; - - "log_named_int(string,int256)"( - key?: null, - val?: null - ): log_named_intEventFilter; - log_named_int(key?: null, val?: null): log_named_intEventFilter; - - "log_named_string(string,string)"( - key?: null, - val?: null - ): log_named_stringEventFilter; - log_named_string(key?: null, val?: null): log_named_stringEventFilter; - - "log_named_uint(string,uint256)"( - key?: null, - val?: null - ): log_named_uintEventFilter; - log_named_uint(key?: null, val?: null): log_named_uintEventFilter; - - "log_string(string)"(arg0?: null): log_stringEventFilter; - log_string(arg0?: null): log_stringEventFilter; - - "log_uint(uint256)"(arg0?: null): log_uintEventFilter; - log_uint(arg0?: null): log_uintEventFilter; - - "logs(bytes)"(arg0?: null): logsEventFilter; - logs(arg0?: null): logsEventFilter; - }; - - estimateGas: { - IS_TEST(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator(overrides?: CallOverrides): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_DNFT_01_constructor_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_DNFT_02A_setBaseUri_reverts_on_non_Configurator( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_DNFT_02B_setMinter_reverts_on_non_Configurator( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_DNFT_02C_addCreditFacade_reverts_on_non_Configurator( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_DNFT_02D_addCreditFacade_reverts_on_non_Configurator( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_DNFT_03_mint_reverts_on_non_minter( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_DNFT_04_burn_reverts_on_non_CreditFacade( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_DNFT_05A_setBasUri_correctly_sets_uri( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_DNFT_05_setBasUri_correctly_sets_uri( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_DNFT_06_addCreditFacade_reverts_on_invalid_address( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_DNFT_07_mint_is_correct( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_DNFT_08A_burn_reverts_on_insufficient_balance( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_DNFT_08_burn_is_correct( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_DNFT_09_removeCreditFacade_sets_value( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_DNFT_10_addCreditFacade_sets_value( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_DNFT_11_transfer_and_approval_functions_revert( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - IS_TEST(overrides?: CallOverrides): Promise; - - cft(overrides?: CallOverrides): Promise; - - creditConfigurator( - overrides?: CallOverrides - ): Promise; - - creditFacade(overrides?: CallOverrides): Promise; - - creditManager(overrides?: CallOverrides): Promise; - - failed( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUp( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_DNFT_01_constructor_sets_correct_values( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_DNFT_02A_setBaseUri_reverts_on_non_Configurator( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_DNFT_02B_setMinter_reverts_on_non_Configurator( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_DNFT_02C_addCreditFacade_reverts_on_non_Configurator( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_DNFT_02D_addCreditFacade_reverts_on_non_Configurator( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_DNFT_03_mint_reverts_on_non_minter( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_DNFT_04_burn_reverts_on_non_CreditFacade( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_DNFT_05A_setBasUri_correctly_sets_uri( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_DNFT_05_setBasUri_correctly_sets_uri( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_DNFT_06_addCreditFacade_reverts_on_invalid_address( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_DNFT_07_mint_is_correct( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_DNFT_08A_burn_reverts_on_insufficient_balance( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_DNFT_08_burn_is_correct( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_DNFT_09_removeCreditFacade_sets_value( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_DNFT_10_addCreditFacade_sets_value( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - test_DNFT_11_transfer_and_approval_functions_revert( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/test/tokens/DegenNFT.t.sol/index.ts b/src/types/contracts/test/tokens/DegenNFT.t.sol/index.ts deleted file mode 100644 index 4fd0808f..00000000 --- a/src/types/contracts/test/tokens/DegenNFT.t.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { DegenNFTTest } from "./DegenNFTTest"; diff --git a/src/types/contracts/test/tokens/index.ts b/src/types/contracts/test/tokens/index.ts deleted file mode 100644 index ae86b540..00000000 --- a/src/types/contracts/test/tokens/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type * as degenNftTSol from "./DegenNFT.t.sol"; -export type { degenNftTSol }; diff --git a/src/types/contracts/tokens/DegenNFT.ts b/src/types/contracts/tokens/DegenNFT.ts deleted file mode 100644 index 365d048a..00000000 --- a/src/types/contracts/tokens/DegenNFT.ts +++ /dev/null @@ -1,967 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../common"; - -export interface DegenNFTInterface extends utils.Interface { - functions: { - "_acl()": FunctionFragment; - "addCreditFacade(address)": FunctionFragment; - "approve(address,uint256)": FunctionFragment; - "balanceOf(address)": FunctionFragment; - "baseURI()": FunctionFragment; - "burn(address,uint256)": FunctionFragment; - "getApproved(uint256)": FunctionFragment; - "isApprovedForAll(address,address)": FunctionFragment; - "isSupportedCreditFacade(address)": FunctionFragment; - "mint(address,uint256)": FunctionFragment; - "minter()": FunctionFragment; - "name()": FunctionFragment; - "ownerOf(uint256)": FunctionFragment; - "pause()": FunctionFragment; - "paused()": FunctionFragment; - "removeCreditFacade(address)": FunctionFragment; - "safeTransferFrom(address,address,uint256)": FunctionFragment; - "safeTransferFrom(address,address,uint256,bytes)": FunctionFragment; - "setApprovalForAll(address,bool)": FunctionFragment; - "setBaseUri(string)": FunctionFragment; - "setMinter(address)": FunctionFragment; - "supportsInterface(bytes4)": FunctionFragment; - "symbol()": FunctionFragment; - "tokenURI(uint256)": FunctionFragment; - "totalSupply()": FunctionFragment; - "transferFrom(address,address,uint256)": FunctionFragment; - "unpause()": FunctionFragment; - "version()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "_acl" - | "addCreditFacade" - | "approve" - | "balanceOf" - | "baseURI" - | "burn" - | "getApproved" - | "isApprovedForAll" - | "isSupportedCreditFacade" - | "mint" - | "minter" - | "name" - | "ownerOf" - | "pause" - | "paused" - | "removeCreditFacade" - | "safeTransferFrom(address,address,uint256)" - | "safeTransferFrom(address,address,uint256,bytes)" - | "setApprovalForAll" - | "setBaseUri" - | "setMinter" - | "supportsInterface" - | "symbol" - | "tokenURI" - | "totalSupply" - | "transferFrom" - | "unpause" - | "version" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "_acl", values?: undefined): string; - encodeFunctionData( - functionFragment: "addCreditFacade", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "approve", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "balanceOf", values: [string]): string; - encodeFunctionData(functionFragment: "baseURI", values?: undefined): string; - encodeFunctionData( - functionFragment: "burn", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "getApproved", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "isApprovedForAll", - values: [string, string] - ): string; - encodeFunctionData( - functionFragment: "isSupportedCreditFacade", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "mint", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "minter", values?: undefined): string; - encodeFunctionData(functionFragment: "name", values?: undefined): string; - encodeFunctionData( - functionFragment: "ownerOf", - values: [BigNumberish] - ): string; - encodeFunctionData(functionFragment: "pause", values?: undefined): string; - encodeFunctionData(functionFragment: "paused", values?: undefined): string; - encodeFunctionData( - functionFragment: "removeCreditFacade", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "safeTransferFrom(address,address,uint256)", - values: [string, string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "safeTransferFrom(address,address,uint256,bytes)", - values: [string, string, BigNumberish, BytesLike] - ): string; - encodeFunctionData( - functionFragment: "setApprovalForAll", - values: [string, boolean] - ): string; - encodeFunctionData(functionFragment: "setBaseUri", values: [string]): string; - encodeFunctionData(functionFragment: "setMinter", values: [string]): string; - encodeFunctionData( - functionFragment: "supportsInterface", - values: [BytesLike] - ): string; - encodeFunctionData(functionFragment: "symbol", values?: undefined): string; - encodeFunctionData( - functionFragment: "tokenURI", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "totalSupply", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "transferFrom", - values: [string, string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "unpause", values?: undefined): string; - encodeFunctionData(functionFragment: "version", values?: undefined): string; - - decodeFunctionResult(functionFragment: "_acl", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "addCreditFacade", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "baseURI", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "burn", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "getApproved", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "isApprovedForAll", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "isSupportedCreditFacade", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "mint", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "minter", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "ownerOf", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "pause", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "paused", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "removeCreditFacade", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "safeTransferFrom(address,address,uint256)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "safeTransferFrom(address,address,uint256,bytes)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "setApprovalForAll", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "setBaseUri", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "setMinter", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "supportsInterface", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "tokenURI", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "totalSupply", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "transferFrom", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "unpause", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "version", data: BytesLike): Result; - - events: { - "Approval(address,address,uint256)": EventFragment; - "ApprovalForAll(address,address,bool)": EventFragment; - "Paused(address)": EventFragment; - "Transfer(address,address,uint256)": EventFragment; - "Unpaused(address)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "Approval"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ApprovalForAll"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Paused"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Unpaused"): EventFragment; -} - -export interface ApprovalEventObject { - owner: string; - approved: string; - tokenId: BigNumber; -} -export type ApprovalEvent = TypedEvent< - [string, string, BigNumber], - ApprovalEventObject ->; - -export type ApprovalEventFilter = TypedEventFilter; - -export interface ApprovalForAllEventObject { - owner: string; - operator: string; - approved: boolean; -} -export type ApprovalForAllEvent = TypedEvent< - [string, string, boolean], - ApprovalForAllEventObject ->; - -export type ApprovalForAllEventFilter = TypedEventFilter; - -export interface PausedEventObject { - account: string; -} -export type PausedEvent = TypedEvent<[string], PausedEventObject>; - -export type PausedEventFilter = TypedEventFilter; - -export interface TransferEventObject { - from: string; - to: string; - tokenId: BigNumber; -} -export type TransferEvent = TypedEvent< - [string, string, BigNumber], - TransferEventObject ->; - -export type TransferEventFilter = TypedEventFilter; - -export interface UnpausedEventObject { - account: string; -} -export type UnpausedEvent = TypedEvent<[string], UnpausedEventObject>; - -export type UnpausedEventFilter = TypedEventFilter; - -export interface DegenNFT extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: DegenNFTInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - _acl(overrides?: CallOverrides): Promise<[string]>; - - addCreditFacade( - creditFacade_: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - approve( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise<[void]>; - - balanceOf(owner: string, overrides?: CallOverrides): Promise<[BigNumber]>; - - baseURI(overrides?: CallOverrides): Promise<[string]>; - - burn( - from: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getApproved( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - isApprovedForAll( - owner: string, - operator: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - isSupportedCreditFacade( - arg0: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - mint( - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - minter(overrides?: CallOverrides): Promise<[string]>; - - name(overrides?: CallOverrides): Promise<[string]>; - - ownerOf( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise<[boolean]>; - - removeCreditFacade( - creditFacade_: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "safeTransferFrom(address,address,uint256)"( - arg0: string, - arg1: string, - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise<[void]>; - - "safeTransferFrom(address,address,uint256,bytes)"( - arg0: string, - arg1: string, - arg2: BigNumberish, - arg3: BytesLike, - overrides?: CallOverrides - ): Promise<[void]>; - - setApprovalForAll( - arg0: string, - arg1: boolean, - overrides?: CallOverrides - ): Promise<[void]>; - - setBaseUri( - baseURI_: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setMinter( - minter_: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - - symbol(overrides?: CallOverrides): Promise<[string]>; - - tokenURI( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>; - - transferFrom( - arg0: string, - arg1: string, - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise<[void]>; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise<[BigNumber]>; - }; - - _acl(overrides?: CallOverrides): Promise; - - addCreditFacade( - creditFacade_: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - approve( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - balanceOf(owner: string, overrides?: CallOverrides): Promise; - - baseURI(overrides?: CallOverrides): Promise; - - burn( - from: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getApproved( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isApprovedForAll( - owner: string, - operator: string, - overrides?: CallOverrides - ): Promise; - - isSupportedCreditFacade( - arg0: string, - overrides?: CallOverrides - ): Promise; - - mint( - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - minter(overrides?: CallOverrides): Promise; - - name(overrides?: CallOverrides): Promise; - - ownerOf(tokenId: BigNumberish, overrides?: CallOverrides): Promise; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise; - - removeCreditFacade( - creditFacade_: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "safeTransferFrom(address,address,uint256)"( - arg0: string, - arg1: string, - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "safeTransferFrom(address,address,uint256,bytes)"( - arg0: string, - arg1: string, - arg2: BigNumberish, - arg3: BytesLike, - overrides?: CallOverrides - ): Promise; - - setApprovalForAll( - arg0: string, - arg1: boolean, - overrides?: CallOverrides - ): Promise; - - setBaseUri( - baseURI_: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setMinter( - minter_: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - tokenURI(tokenId: BigNumberish, overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - transferFrom( - arg0: string, - arg1: string, - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise; - - callStatic: { - _acl(overrides?: CallOverrides): Promise; - - addCreditFacade( - creditFacade_: string, - overrides?: CallOverrides - ): Promise; - - approve( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - balanceOf(owner: string, overrides?: CallOverrides): Promise; - - baseURI(overrides?: CallOverrides): Promise; - - burn( - from: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getApproved( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isApprovedForAll( - owner: string, - operator: string, - overrides?: CallOverrides - ): Promise; - - isSupportedCreditFacade( - arg0: string, - overrides?: CallOverrides - ): Promise; - - mint( - to: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - minter(overrides?: CallOverrides): Promise; - - name(overrides?: CallOverrides): Promise; - - ownerOf(tokenId: BigNumberish, overrides?: CallOverrides): Promise; - - pause(overrides?: CallOverrides): Promise; - - paused(overrides?: CallOverrides): Promise; - - removeCreditFacade( - creditFacade_: string, - overrides?: CallOverrides - ): Promise; - - "safeTransferFrom(address,address,uint256)"( - arg0: string, - arg1: string, - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "safeTransferFrom(address,address,uint256,bytes)"( - arg0: string, - arg1: string, - arg2: BigNumberish, - arg3: BytesLike, - overrides?: CallOverrides - ): Promise; - - setApprovalForAll( - arg0: string, - arg1: boolean, - overrides?: CallOverrides - ): Promise; - - setBaseUri(baseURI_: string, overrides?: CallOverrides): Promise; - - setMinter(minter_: string, overrides?: CallOverrides): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - tokenURI(tokenId: BigNumberish, overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - transferFrom( - arg0: string, - arg1: string, - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise; - - unpause(overrides?: CallOverrides): Promise; - - version(overrides?: CallOverrides): Promise; - }; - - filters: { - "Approval(address,address,uint256)"( - owner?: string | null, - approved?: string | null, - tokenId?: BigNumberish | null - ): ApprovalEventFilter; - Approval( - owner?: string | null, - approved?: string | null, - tokenId?: BigNumberish | null - ): ApprovalEventFilter; - - "ApprovalForAll(address,address,bool)"( - owner?: string | null, - operator?: string | null, - approved?: null - ): ApprovalForAllEventFilter; - ApprovalForAll( - owner?: string | null, - operator?: string | null, - approved?: null - ): ApprovalForAllEventFilter; - - "Paused(address)"(account?: null): PausedEventFilter; - Paused(account?: null): PausedEventFilter; - - "Transfer(address,address,uint256)"( - from?: string | null, - to?: string | null, - tokenId?: BigNumberish | null - ): TransferEventFilter; - Transfer( - from?: string | null, - to?: string | null, - tokenId?: BigNumberish | null - ): TransferEventFilter; - - "Unpaused(address)"(account?: null): UnpausedEventFilter; - Unpaused(account?: null): UnpausedEventFilter; - }; - - estimateGas: { - _acl(overrides?: CallOverrides): Promise; - - addCreditFacade( - creditFacade_: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - approve( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - balanceOf(owner: string, overrides?: CallOverrides): Promise; - - baseURI(overrides?: CallOverrides): Promise; - - burn( - from: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getApproved( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isApprovedForAll( - owner: string, - operator: string, - overrides?: CallOverrides - ): Promise; - - isSupportedCreditFacade( - arg0: string, - overrides?: CallOverrides - ): Promise; - - mint( - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - minter(overrides?: CallOverrides): Promise; - - name(overrides?: CallOverrides): Promise; - - ownerOf( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise; - - removeCreditFacade( - creditFacade_: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "safeTransferFrom(address,address,uint256)"( - arg0: string, - arg1: string, - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "safeTransferFrom(address,address,uint256,bytes)"( - arg0: string, - arg1: string, - arg2: BigNumberish, - arg3: BytesLike, - overrides?: CallOverrides - ): Promise; - - setApprovalForAll( - arg0: string, - arg1: boolean, - overrides?: CallOverrides - ): Promise; - - setBaseUri( - baseURI_: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setMinter( - minter_: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - tokenURI( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - transferFrom( - arg0: string, - arg1: string, - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - _acl(overrides?: CallOverrides): Promise; - - addCreditFacade( - creditFacade_: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - approve( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - balanceOf( - owner: string, - overrides?: CallOverrides - ): Promise; - - baseURI(overrides?: CallOverrides): Promise; - - burn( - from: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getApproved( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isApprovedForAll( - owner: string, - operator: string, - overrides?: CallOverrides - ): Promise; - - isSupportedCreditFacade( - arg0: string, - overrides?: CallOverrides - ): Promise; - - mint( - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - minter(overrides?: CallOverrides): Promise; - - name(overrides?: CallOverrides): Promise; - - ownerOf( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - pause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - paused(overrides?: CallOverrides): Promise; - - removeCreditFacade( - creditFacade_: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "safeTransferFrom(address,address,uint256)"( - arg0: string, - arg1: string, - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "safeTransferFrom(address,address,uint256,bytes)"( - arg0: string, - arg1: string, - arg2: BigNumberish, - arg3: BytesLike, - overrides?: CallOverrides - ): Promise; - - setApprovalForAll( - arg0: string, - arg1: boolean, - overrides?: CallOverrides - ): Promise; - - setBaseUri( - baseURI_: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setMinter( - minter_: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - tokenURI( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - transferFrom( - arg0: string, - arg1: string, - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise; - - unpause( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/tokens/DieselToken.ts b/src/types/contracts/tokens/DieselToken.ts deleted file mode 100644 index 34d6c7a3..00000000 --- a/src/types/contracts/tokens/DieselToken.ts +++ /dev/null @@ -1,618 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../common"; - -export interface DieselTokenInterface extends utils.Interface { - functions: { - "allowance(address,address)": FunctionFragment; - "approve(address,uint256)": FunctionFragment; - "balanceOf(address)": FunctionFragment; - "burn(address,uint256)": FunctionFragment; - "decimals()": FunctionFragment; - "decreaseAllowance(address,uint256)": FunctionFragment; - "increaseAllowance(address,uint256)": FunctionFragment; - "mint(address,uint256)": FunctionFragment; - "name()": FunctionFragment; - "owner()": FunctionFragment; - "renounceOwnership()": FunctionFragment; - "symbol()": FunctionFragment; - "totalSupply()": FunctionFragment; - "transfer(address,uint256)": FunctionFragment; - "transferFrom(address,address,uint256)": FunctionFragment; - "transferOwnership(address)": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "allowance" - | "approve" - | "balanceOf" - | "burn" - | "decimals" - | "decreaseAllowance" - | "increaseAllowance" - | "mint" - | "name" - | "owner" - | "renounceOwnership" - | "symbol" - | "totalSupply" - | "transfer" - | "transferFrom" - | "transferOwnership" - ): FunctionFragment; - - encodeFunctionData( - functionFragment: "allowance", - values: [string, string] - ): string; - encodeFunctionData( - functionFragment: "approve", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "balanceOf", values: [string]): string; - encodeFunctionData( - functionFragment: "burn", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "decimals", values?: undefined): string; - encodeFunctionData( - functionFragment: "decreaseAllowance", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "increaseAllowance", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "mint", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "name", values?: undefined): string; - encodeFunctionData(functionFragment: "owner", values?: undefined): string; - encodeFunctionData( - functionFragment: "renounceOwnership", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "symbol", values?: undefined): string; - encodeFunctionData( - functionFragment: "totalSupply", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "transfer", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "transferFrom", - values: [string, string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "transferOwnership", - values: [string] - ): string; - - decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "burn", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "decreaseAllowance", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "increaseAllowance", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "mint", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "renounceOwnership", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "totalSupply", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "transfer", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "transferFrom", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "transferOwnership", - data: BytesLike - ): Result; - - events: { - "Approval(address,address,uint256)": EventFragment; - "OwnershipTransferred(address,address)": EventFragment; - "Transfer(address,address,uint256)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "Approval"): EventFragment; - getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment; -} - -export interface ApprovalEventObject { - owner: string; - spender: string; - value: BigNumber; -} -export type ApprovalEvent = TypedEvent< - [string, string, BigNumber], - ApprovalEventObject ->; - -export type ApprovalEventFilter = TypedEventFilter; - -export interface OwnershipTransferredEventObject { - previousOwner: string; - newOwner: string; -} -export type OwnershipTransferredEvent = TypedEvent< - [string, string], - OwnershipTransferredEventObject ->; - -export type OwnershipTransferredEventFilter = - TypedEventFilter; - -export interface TransferEventObject { - from: string; - to: string; - value: BigNumber; -} -export type TransferEvent = TypedEvent< - [string, string, BigNumber], - TransferEventObject ->; - -export type TransferEventFilter = TypedEventFilter; - -export interface DieselToken extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: DieselTokenInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - approve( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise<[BigNumber]>; - - burn( - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - decimals(overrides?: CallOverrides): Promise<[number]>; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - mint( - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise<[string]>; - - owner(overrides?: CallOverrides): Promise<[string]>; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise<[string]>; - - totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - burn( - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - mint( - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - burn( - to: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: CallOverrides - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: CallOverrides - ): Promise; - - mint( - to: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - renounceOwnership(overrides?: CallOverrides): Promise; - - symbol(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - "Approval(address,address,uint256)"( - owner?: string | null, - spender?: string | null, - value?: null - ): ApprovalEventFilter; - Approval( - owner?: string | null, - spender?: string | null, - value?: null - ): ApprovalEventFilter; - - "OwnershipTransferred(address,address)"( - previousOwner?: string | null, - newOwner?: string | null - ): OwnershipTransferredEventFilter; - OwnershipTransferred( - previousOwner?: string | null, - newOwner?: string | null - ): OwnershipTransferredEventFilter; - - "Transfer(address,address,uint256)"( - from?: string | null, - to?: string | null, - value?: null - ): TransferEventFilter; - Transfer( - from?: string | null, - to?: string | null, - value?: null - ): TransferEventFilter; - }; - - estimateGas: { - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - burn( - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - mint( - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf( - account: string, - overrides?: CallOverrides - ): Promise; - - burn( - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - mint( - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/src/types/contracts/tokens/GearToken.ts b/src/types/contracts/tokens/GearToken.ts deleted file mode 100644 index c7c52c26..00000000 --- a/src/types/contracts/tokens/GearToken.ts +++ /dev/null @@ -1,994 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../common"; - -export interface GearTokenInterface extends utils.Interface { - functions: { - "DELEGATION_TYPEHASH()": FunctionFragment; - "DOMAIN_TYPEHASH()": FunctionFragment; - "PERMIT_TYPEHASH()": FunctionFragment; - "allowTransfers()": FunctionFragment; - "allowance(address,address)": FunctionFragment; - "approve(address,uint256)": FunctionFragment; - "balanceOf(address)": FunctionFragment; - "checkpoints(address,uint32)": FunctionFragment; - "decimals()": FunctionFragment; - "delegate(address)": FunctionFragment; - "delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32)": FunctionFragment; - "delegates(address)": FunctionFragment; - "getCurrentVotes(address)": FunctionFragment; - "getPriorVotes(address,uint256)": FunctionFragment; - "manager()": FunctionFragment; - "miner()": FunctionFragment; - "name()": FunctionFragment; - "nonces(address)": FunctionFragment; - "numCheckpoints(address)": FunctionFragment; - "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": FunctionFragment; - "setMiner(address)": FunctionFragment; - "symbol()": FunctionFragment; - "totalSupply()": FunctionFragment; - "transfer(address,uint256)": FunctionFragment; - "transferFrom(address,address,uint256)": FunctionFragment; - "transferOwnership(address)": FunctionFragment; - "transfersAllowed()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "DELEGATION_TYPEHASH" - | "DOMAIN_TYPEHASH" - | "PERMIT_TYPEHASH" - | "allowTransfers" - | "allowance" - | "approve" - | "balanceOf" - | "checkpoints" - | "decimals" - | "delegate" - | "delegateBySig" - | "delegates" - | "getCurrentVotes" - | "getPriorVotes" - | "manager" - | "miner" - | "name" - | "nonces" - | "numCheckpoints" - | "permit" - | "setMiner" - | "symbol" - | "totalSupply" - | "transfer" - | "transferFrom" - | "transferOwnership" - | "transfersAllowed" - ): FunctionFragment; - - encodeFunctionData( - functionFragment: "DELEGATION_TYPEHASH", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "DOMAIN_TYPEHASH", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "PERMIT_TYPEHASH", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "allowTransfers", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "allowance", - values: [string, string] - ): string; - encodeFunctionData( - functionFragment: "approve", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "balanceOf", values: [string]): string; - encodeFunctionData( - functionFragment: "checkpoints", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "decimals", values?: undefined): string; - encodeFunctionData(functionFragment: "delegate", values: [string]): string; - encodeFunctionData( - functionFragment: "delegateBySig", - values: [ - string, - BigNumberish, - BigNumberish, - BigNumberish, - BytesLike, - BytesLike - ] - ): string; - encodeFunctionData(functionFragment: "delegates", values: [string]): string; - encodeFunctionData( - functionFragment: "getCurrentVotes", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "getPriorVotes", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "manager", values?: undefined): string; - encodeFunctionData(functionFragment: "miner", values?: undefined): string; - encodeFunctionData(functionFragment: "name", values?: undefined): string; - encodeFunctionData(functionFragment: "nonces", values: [string]): string; - encodeFunctionData( - functionFragment: "numCheckpoints", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "permit", - values: [ - string, - string, - BigNumberish, - BigNumberish, - BigNumberish, - BytesLike, - BytesLike - ] - ): string; - encodeFunctionData(functionFragment: "setMiner", values: [string]): string; - encodeFunctionData(functionFragment: "symbol", values?: undefined): string; - encodeFunctionData( - functionFragment: "totalSupply", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "transfer", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "transferFrom", - values: [string, string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "transferOwnership", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "transfersAllowed", - values?: undefined - ): string; - - decodeFunctionResult( - functionFragment: "DELEGATION_TYPEHASH", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "DOMAIN_TYPEHASH", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "PERMIT_TYPEHASH", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "allowTransfers", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "checkpoints", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "delegate", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "delegateBySig", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "delegates", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "getCurrentVotes", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getPriorVotes", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "manager", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "miner", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "nonces", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "numCheckpoints", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "permit", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "setMiner", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "totalSupply", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "transfer", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "transferFrom", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "transferOwnership", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "transfersAllowed", - data: BytesLike - ): Result; - - events: { - "Approval(address,address,uint256)": EventFragment; - "DelegateChanged(address,address,address)": EventFragment; - "DelegateVotesChanged(address,uint256,uint256)": EventFragment; - "MinerSet(address)": EventFragment; - "OwnershipTransferred(address,address)": EventFragment; - "Transfer(address,address,uint256)": EventFragment; - "TransferAllowed()": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "Approval"): EventFragment; - getEvent(nameOrSignatureOrTopic: "DelegateChanged"): EventFragment; - getEvent(nameOrSignatureOrTopic: "DelegateVotesChanged"): EventFragment; - getEvent(nameOrSignatureOrTopic: "MinerSet"): EventFragment; - getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TransferAllowed"): EventFragment; -} - -export interface ApprovalEventObject { - owner: string; - spender: string; - amount: BigNumber; -} -export type ApprovalEvent = TypedEvent< - [string, string, BigNumber], - ApprovalEventObject ->; - -export type ApprovalEventFilter = TypedEventFilter; - -export interface DelegateChangedEventObject { - delegator: string; - fromDelegate: string; - toDelegate: string; -} -export type DelegateChangedEvent = TypedEvent< - [string, string, string], - DelegateChangedEventObject ->; - -export type DelegateChangedEventFilter = TypedEventFilter; - -export interface DelegateVotesChangedEventObject { - delegate: string; - previousBalance: BigNumber; - newBalance: BigNumber; -} -export type DelegateVotesChangedEvent = TypedEvent< - [string, BigNumber, BigNumber], - DelegateVotesChangedEventObject ->; - -export type DelegateVotesChangedEventFilter = - TypedEventFilter; - -export interface MinerSetEventObject { - miner: string; -} -export type MinerSetEvent = TypedEvent<[string], MinerSetEventObject>; - -export type MinerSetEventFilter = TypedEventFilter; - -export interface OwnershipTransferredEventObject { - owner: string; - newOwner: string; -} -export type OwnershipTransferredEvent = TypedEvent< - [string, string], - OwnershipTransferredEventObject ->; - -export type OwnershipTransferredEventFilter = - TypedEventFilter; - -export interface TransferEventObject { - from: string; - to: string; - amount: BigNumber; -} -export type TransferEvent = TypedEvent< - [string, string, BigNumber], - TransferEventObject ->; - -export type TransferEventFilter = TypedEventFilter; - -export interface TransferAllowedEventObject {} -export type TransferAllowedEvent = TypedEvent<[], TransferAllowedEventObject>; - -export type TransferAllowedEventFilter = TypedEventFilter; - -export interface GearToken extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: GearTokenInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - DELEGATION_TYPEHASH(overrides?: CallOverrides): Promise<[string]>; - - DOMAIN_TYPEHASH(overrides?: CallOverrides): Promise<[string]>; - - PERMIT_TYPEHASH(overrides?: CallOverrides): Promise<[string]>; - - allowTransfers( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - allowance( - account: string, - spender: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - approve( - spender: string, - rawAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise<[BigNumber]>; - - checkpoints( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise<[number, BigNumber] & { fromBlock: number; votes: BigNumber }>; - - decimals(overrides?: CallOverrides): Promise<[number]>; - - delegate( - delegatee: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegateBySig( - delegatee: string, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegates(arg0: string, overrides?: CallOverrides): Promise<[string]>; - - getCurrentVotes( - account: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - getPriorVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - manager(overrides?: CallOverrides): Promise<[string]>; - - miner(overrides?: CallOverrides): Promise<[string]>; - - name(overrides?: CallOverrides): Promise<[string]>; - - nonces(arg0: string, overrides?: CallOverrides): Promise<[BigNumber]>; - - numCheckpoints(arg0: string, overrides?: CallOverrides): Promise<[number]>; - - permit( - owner: string, - spender: string, - rawAmount: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setMiner( - _miner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise<[string]>; - - totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>; - - transfer( - dst: string, - rawAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - src: string, - dst: string, - rawAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newManager: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transfersAllowed(overrides?: CallOverrides): Promise<[boolean]>; - }; - - DELEGATION_TYPEHASH(overrides?: CallOverrides): Promise; - - DOMAIN_TYPEHASH(overrides?: CallOverrides): Promise; - - PERMIT_TYPEHASH(overrides?: CallOverrides): Promise; - - allowTransfers( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - allowance( - account: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - rawAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - checkpoints( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise<[number, BigNumber] & { fromBlock: number; votes: BigNumber }>; - - decimals(overrides?: CallOverrides): Promise; - - delegate( - delegatee: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegateBySig( - delegatee: string, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegates(arg0: string, overrides?: CallOverrides): Promise; - - getCurrentVotes( - account: string, - overrides?: CallOverrides - ): Promise; - - getPriorVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - manager(overrides?: CallOverrides): Promise; - - miner(overrides?: CallOverrides): Promise; - - name(overrides?: CallOverrides): Promise; - - nonces(arg0: string, overrides?: CallOverrides): Promise; - - numCheckpoints(arg0: string, overrides?: CallOverrides): Promise; - - permit( - owner: string, - spender: string, - rawAmount: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setMiner( - _miner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - transfer( - dst: string, - rawAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - src: string, - dst: string, - rawAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newManager: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transfersAllowed(overrides?: CallOverrides): Promise; - - callStatic: { - DELEGATION_TYPEHASH(overrides?: CallOverrides): Promise; - - DOMAIN_TYPEHASH(overrides?: CallOverrides): Promise; - - PERMIT_TYPEHASH(overrides?: CallOverrides): Promise; - - allowTransfers(overrides?: CallOverrides): Promise; - - allowance( - account: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - rawAmount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - checkpoints( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise<[number, BigNumber] & { fromBlock: number; votes: BigNumber }>; - - decimals(overrides?: CallOverrides): Promise; - - delegate(delegatee: string, overrides?: CallOverrides): Promise; - - delegateBySig( - delegatee: string, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: CallOverrides - ): Promise; - - delegates(arg0: string, overrides?: CallOverrides): Promise; - - getCurrentVotes( - account: string, - overrides?: CallOverrides - ): Promise; - - getPriorVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - manager(overrides?: CallOverrides): Promise; - - miner(overrides?: CallOverrides): Promise; - - name(overrides?: CallOverrides): Promise; - - nonces(arg0: string, overrides?: CallOverrides): Promise; - - numCheckpoints(arg0: string, overrides?: CallOverrides): Promise; - - permit( - owner: string, - spender: string, - rawAmount: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: CallOverrides - ): Promise; - - setMiner(_miner: string, overrides?: CallOverrides): Promise; - - symbol(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - transfer( - dst: string, - rawAmount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transferFrom( - src: string, - dst: string, - rawAmount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transferOwnership( - newManager: string, - overrides?: CallOverrides - ): Promise; - - transfersAllowed(overrides?: CallOverrides): Promise; - }; - - filters: { - "Approval(address,address,uint256)"( - owner?: string | null, - spender?: string | null, - amount?: null - ): ApprovalEventFilter; - Approval( - owner?: string | null, - spender?: string | null, - amount?: null - ): ApprovalEventFilter; - - "DelegateChanged(address,address,address)"( - delegator?: string | null, - fromDelegate?: string | null, - toDelegate?: string | null - ): DelegateChangedEventFilter; - DelegateChanged( - delegator?: string | null, - fromDelegate?: string | null, - toDelegate?: string | null - ): DelegateChangedEventFilter; - - "DelegateVotesChanged(address,uint256,uint256)"( - delegate?: string | null, - previousBalance?: null, - newBalance?: null - ): DelegateVotesChangedEventFilter; - DelegateVotesChanged( - delegate?: string | null, - previousBalance?: null, - newBalance?: null - ): DelegateVotesChangedEventFilter; - - "MinerSet(address)"(miner?: string | null): MinerSetEventFilter; - MinerSet(miner?: string | null): MinerSetEventFilter; - - "OwnershipTransferred(address,address)"( - owner?: string | null, - newOwner?: string | null - ): OwnershipTransferredEventFilter; - OwnershipTransferred( - owner?: string | null, - newOwner?: string | null - ): OwnershipTransferredEventFilter; - - "Transfer(address,address,uint256)"( - from?: string | null, - to?: string | null, - amount?: null - ): TransferEventFilter; - Transfer( - from?: string | null, - to?: string | null, - amount?: null - ): TransferEventFilter; - - "TransferAllowed()"(): TransferAllowedEventFilter; - TransferAllowed(): TransferAllowedEventFilter; - }; - - estimateGas: { - DELEGATION_TYPEHASH(overrides?: CallOverrides): Promise; - - DOMAIN_TYPEHASH(overrides?: CallOverrides): Promise; - - PERMIT_TYPEHASH(overrides?: CallOverrides): Promise; - - allowTransfers( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - allowance( - account: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - rawAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - checkpoints( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - delegate( - delegatee: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegateBySig( - delegatee: string, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegates(arg0: string, overrides?: CallOverrides): Promise; - - getCurrentVotes( - account: string, - overrides?: CallOverrides - ): Promise; - - getPriorVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - manager(overrides?: CallOverrides): Promise; - - miner(overrides?: CallOverrides): Promise; - - name(overrides?: CallOverrides): Promise; - - nonces(arg0: string, overrides?: CallOverrides): Promise; - - numCheckpoints(arg0: string, overrides?: CallOverrides): Promise; - - permit( - owner: string, - spender: string, - rawAmount: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setMiner( - _miner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - transfer( - dst: string, - rawAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - src: string, - dst: string, - rawAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newManager: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transfersAllowed(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - DELEGATION_TYPEHASH( - overrides?: CallOverrides - ): Promise; - - DOMAIN_TYPEHASH(overrides?: CallOverrides): Promise; - - PERMIT_TYPEHASH(overrides?: CallOverrides): Promise; - - allowTransfers( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - allowance( - account: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - rawAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf( - account: string, - overrides?: CallOverrides - ): Promise; - - checkpoints( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - delegate( - delegatee: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegateBySig( - delegatee: string, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegates( - arg0: string, - overrides?: CallOverrides - ): Promise; - - getCurrentVotes( - account: string, - overrides?: CallOverrides - ): Promise; - - getPriorVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - manager(overrides?: CallOverrides): Promise; - - miner(overrides?: CallOverrides): Promise; - - name(overrides?: CallOverrides): Promise; - - nonces( - arg0: string, - overrides?: CallOverrides - ): Promise; - - numCheckpoints( - arg0: string, - overrides?: CallOverrides - ): Promise; - - permit( - owner: string, - spender: string, - rawAmount: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setMiner( - _miner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - transfer( - dst: string, - rawAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - src: string, - dst: string, - rawAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newManager: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transfersAllowed(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/tokens/PhantomERC20.ts b/src/types/contracts/tokens/PhantomERC20.ts deleted file mode 100644 index 3a672b04..00000000 --- a/src/types/contracts/tokens/PhantomERC20.ts +++ /dev/null @@ -1,379 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, -} from "../../common"; - -export interface PhantomERC20Interface extends utils.Interface { - functions: { - "allowance(address,address)": FunctionFragment; - "approve(address,uint256)": FunctionFragment; - "balanceOf(address)": FunctionFragment; - "decimals()": FunctionFragment; - "name()": FunctionFragment; - "symbol()": FunctionFragment; - "totalSupply()": FunctionFragment; - "transfer(address,uint256)": FunctionFragment; - "transferFrom(address,address,uint256)": FunctionFragment; - "underlying()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "allowance" - | "approve" - | "balanceOf" - | "decimals" - | "name" - | "symbol" - | "totalSupply" - | "transfer" - | "transferFrom" - | "underlying" - ): FunctionFragment; - - encodeFunctionData( - functionFragment: "allowance", - values: [string, string] - ): string; - encodeFunctionData( - functionFragment: "approve", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "balanceOf", values: [string]): string; - encodeFunctionData(functionFragment: "decimals", values?: undefined): string; - encodeFunctionData(functionFragment: "name", values?: undefined): string; - encodeFunctionData(functionFragment: "symbol", values?: undefined): string; - encodeFunctionData( - functionFragment: "totalSupply", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "transfer", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "transferFrom", - values: [string, string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "underlying", - values?: undefined - ): string; - - decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "totalSupply", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "transfer", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "transferFrom", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "underlying", data: BytesLike): Result; - - events: { - "Approval(address,address,uint256)": EventFragment; - "Transfer(address,address,uint256)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "Approval"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment; -} - -export interface ApprovalEventObject { - owner: string; - spender: string; - value: BigNumber; -} -export type ApprovalEvent = TypedEvent< - [string, string, BigNumber], - ApprovalEventObject ->; - -export type ApprovalEventFilter = TypedEventFilter; - -export interface TransferEventObject { - from: string; - to: string; - value: BigNumber; -} -export type TransferEvent = TypedEvent< - [string, string, BigNumber], - TransferEventObject ->; - -export type TransferEventFilter = TypedEventFilter; - -export interface PhantomERC20 extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: PhantomERC20Interface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - allowance( - arg0: string, - arg1: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - approve( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise<[boolean]>; - - balanceOf(account: string, overrides?: CallOverrides): Promise<[BigNumber]>; - - decimals(overrides?: CallOverrides): Promise<[number]>; - - name(overrides?: CallOverrides): Promise<[string]>; - - symbol(overrides?: CallOverrides): Promise<[string]>; - - totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>; - - transfer( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise<[boolean]>; - - transferFrom( - arg0: string, - arg1: string, - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise<[boolean]>; - - underlying(overrides?: CallOverrides): Promise<[string]>; - }; - - allowance( - arg0: string, - arg1: string, - overrides?: CallOverrides - ): Promise; - - approve( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - name(overrides?: CallOverrides): Promise; - - symbol(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - transfer( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transferFrom( - arg0: string, - arg1: string, - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - - callStatic: { - allowance( - arg0: string, - arg1: string, - overrides?: CallOverrides - ): Promise; - - approve( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - name(overrides?: CallOverrides): Promise; - - symbol(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - transfer( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transferFrom( - arg0: string, - arg1: string, - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - }; - - filters: { - "Approval(address,address,uint256)"( - owner?: string | null, - spender?: string | null, - value?: null - ): ApprovalEventFilter; - Approval( - owner?: string | null, - spender?: string | null, - value?: null - ): ApprovalEventFilter; - - "Transfer(address,address,uint256)"( - from?: string | null, - to?: string | null, - value?: null - ): TransferEventFilter; - Transfer( - from?: string | null, - to?: string | null, - value?: null - ): TransferEventFilter; - }; - - estimateGas: { - allowance( - arg0: string, - arg1: string, - overrides?: CallOverrides - ): Promise; - - approve( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - decimals(overrides?: CallOverrides): Promise; - - name(overrides?: CallOverrides): Promise; - - symbol(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - transfer( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transferFrom( - arg0: string, - arg1: string, - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - allowance( - arg0: string, - arg1: string, - overrides?: CallOverrides - ): Promise; - - approve( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - balanceOf( - account: string, - overrides?: CallOverrides - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - name(overrides?: CallOverrides): Promise; - - symbol(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - transfer( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transferFrom( - arg0: string, - arg1: string, - arg2: BigNumberish, - overrides?: CallOverrides - ): Promise; - - underlying(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/types/contracts/tokens/index.ts b/src/types/contracts/tokens/index.ts deleted file mode 100644 index fac0209b..00000000 --- a/src/types/contracts/tokens/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { DegenNFT } from "./DegenNFT"; -export type { DieselToken } from "./DieselToken"; -export type { GearToken } from "./GearToken"; -export type { PhantomERC20 } from "./PhantomERC20"; diff --git a/src/types/factories/@openzeppelin/contracts/access/Ownable__factory.ts b/src/types/factories/@openzeppelin/contracts/access/Ownable__factory.ts deleted file mode 100644 index 32f8cfe6..00000000 --- a/src/types/factories/@openzeppelin/contracts/access/Ownable__factory.ts +++ /dev/null @@ -1,78 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import { Contract, Signer, utils } from "ethers"; -import type { Provider } from "@ethersproject/providers"; -import type { - Ownable, - OwnableInterface, -} from "../../../../@openzeppelin/contracts/access/Ownable"; - -const _abi = [ - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "previousOwner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "OwnershipTransferred", - type: "event", - }, - { - inputs: [], - name: "owner", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "renounceOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "transferOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, -]; - -export class Ownable__factory { - static readonly abi = _abi; - static createInterface(): OwnableInterface { - return new utils.Interface(_abi) as OwnableInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): Ownable { - return new Contract(address, _abi, signerOrProvider) as Ownable; - } -} diff --git a/src/types/factories/@openzeppelin/contracts/access/index.ts b/src/types/factories/@openzeppelin/contracts/access/index.ts deleted file mode 100644 index e332ae32..00000000 --- a/src/types/factories/@openzeppelin/contracts/access/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { Ownable__factory } from "./Ownable__factory"; diff --git a/src/types/factories/@openzeppelin/contracts/index.ts b/src/types/factories/@openzeppelin/contracts/index.ts index 1e0d5971..bcf4f471 100644 --- a/src/types/factories/@openzeppelin/contracts/index.ts +++ b/src/types/factories/@openzeppelin/contracts/index.ts @@ -1,7 +1,5 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ -export * as access from "./access"; -export * as security from "./security"; export * as token from "./token"; export * as utils from "./utils"; diff --git a/src/types/factories/@openzeppelin/contracts/security/Pausable__factory.ts b/src/types/factories/@openzeppelin/contracts/security/Pausable__factory.ts deleted file mode 100644 index 202ac625..00000000 --- a/src/types/factories/@openzeppelin/contracts/security/Pausable__factory.ts +++ /dev/null @@ -1,65 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import { Contract, Signer, utils } from "ethers"; -import type { Provider } from "@ethersproject/providers"; -import type { - Pausable, - PausableInterface, -} from "../../../../@openzeppelin/contracts/security/Pausable"; - -const _abi = [ - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "Paused", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "Unpaused", - type: "event", - }, - { - inputs: [], - name: "paused", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -export class Pausable__factory { - static readonly abi = _abi; - static createInterface(): PausableInterface { - return new utils.Interface(_abi) as PausableInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): Pausable { - return new Contract(address, _abi, signerOrProvider) as Pausable; - } -} diff --git a/src/types/factories/@openzeppelin/contracts/security/index.ts b/src/types/factories/@openzeppelin/contracts/security/index.ts deleted file mode 100644 index 0d4ecd47..00000000 --- a/src/types/factories/@openzeppelin/contracts/security/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { Pausable__factory } from "./Pausable__factory"; diff --git a/src/types/factories/@openzeppelin/contracts/token/ERC20/ERC20__factory.ts b/src/types/factories/@openzeppelin/contracts/token/ERC20/ERC20__factory.ts deleted file mode 100644 index 9fa32f3f..00000000 --- a/src/types/factories/@openzeppelin/contracts/token/ERC20/ERC20__factory.ts +++ /dev/null @@ -1,349 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - ERC20, - ERC20Interface, -} from "../../../../../@openzeppelin/contracts/token/ERC20/ERC20"; - -const _abi = [ - { - inputs: [ - { - internalType: "string", - name: "name_", - type: "string", - }, - { - internalType: "string", - name: "symbol_", - type: "string", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "spender", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "Approval", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "Transfer", - type: "event", - }, - { - inputs: [ - { - internalType: "address", - name: "owner", - type: "address", - }, - { - internalType: "address", - name: "spender", - type: "address", - }, - ], - name: "allowance", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "approve", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "decimals", - outputs: [ - { - internalType: "uint8", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "subtractedValue", - type: "uint256", - }, - ], - name: "decreaseAllowance", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "addedValue", - type: "uint256", - }, - ], - name: "increaseAllowance", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "symbol", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "totalSupply", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "recipient", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "transfer", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "sender", - type: "address", - }, - { - internalType: "address", - name: "recipient", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "transferFrom", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, -]; - -const _bytecode = - "0x60806040523480156200001157600080fd5b5060405162000de938038062000de98339810160408190526200003491620001db565b81516200004990600390602085019062000068565b5080516200005f90600490602084019062000068565b50505062000282565b828054620000769062000245565b90600052602060002090601f0160209004810192826200009a5760008555620000e5565b82601f10620000b557805160ff1916838001178555620000e5565b82800160010185558215620000e5579182015b82811115620000e5578251825591602001919060010190620000c8565b50620000f3929150620000f7565b5090565b5b80821115620000f35760008155600101620000f8565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200013657600080fd5b81516001600160401b03808211156200015357620001536200010e565b604051601f8301601f19908116603f011681019082821181831017156200017e576200017e6200010e565b816040528381526020925086838588010111156200019b57600080fd5b600091505b83821015620001bf5785820183015181830184015290820190620001a0565b83821115620001d15760008385830101525b9695505050505050565b60008060408385031215620001ef57600080fd5b82516001600160401b03808211156200020757600080fd5b620002158683870162000124565b935060208501519150808211156200022c57600080fd5b506200023b8582860162000124565b9150509250929050565b600181811c908216806200025a57607f821691505b602082108114156200027c57634e487b7160e01b600052602260045260246000fd5b50919050565b610b5780620002926000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80633950935111610081578063a457c2d71161005b578063a457c2d714610194578063a9059cbb146101a7578063dd62ed3e146101ba57600080fd5b8063395093511461014357806370a082311461015657806395d89b411461018c57600080fd5b806318160ddd116100b257806318160ddd1461010f57806323b872dd14610121578063313ce5671461013457600080fd5b806306fdde03146100ce578063095ea7b3146100ec575b600080fd5b6100d6610200565b6040516100e39190610937565b60405180910390f35b6100ff6100fa3660046109d3565b610292565b60405190151581526020016100e3565b6002545b6040519081526020016100e3565b6100ff61012f3660046109fd565b6102a8565b604051601281526020016100e3565b6100ff6101513660046109d3565b610393565b610113610164366004610a39565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100d66103dc565b6100ff6101a23660046109d3565b6103eb565b6100ff6101b53660046109d3565b6104c3565b6101136101c8366004610a5b565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60606003805461020f90610a8e565b80601f016020809104026020016040519081016040528092919081815260200182805461023b90610a8e565b80156102885780601f1061025d57610100808354040283529160200191610288565b820191906000526020600020905b81548152906001019060200180831161026b57829003601f168201915b5050505050905090565b600061029f3384846104d0565b50600192915050565b60006102b5848484610683565b73ffffffffffffffffffffffffffffffffffffffff841660009081526001602090815260408083203384529091529020548281101561037b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61038885338584036104d0565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161029f9185906103d7908690610ae2565b6104d0565b60606004805461020f90610a8e565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156104ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610372565b6104b933858584036104d0565b5060019392505050565b600061029f338484610683565b73ffffffffffffffffffffffffffffffffffffffff8316610572576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610372565b73ffffffffffffffffffffffffffffffffffffffff8216610615576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610372565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610726576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610372565b73ffffffffffffffffffffffffffffffffffffffff82166107c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610372565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260409020548181101561087f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610372565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152602081905260408082208585039055918516815290812080548492906108c3908490610ae2565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161092991815260200190565b60405180910390a350505050565b600060208083528351808285015260005b8181101561096457858101830151858201604001528201610948565b81811115610976576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146109ce57600080fd5b919050565b600080604083850312156109e657600080fd5b6109ef836109aa565b946020939093013593505050565b600080600060608486031215610a1257600080fd5b610a1b846109aa565b9250610a29602085016109aa565b9150604084013590509250925092565b600060208284031215610a4b57600080fd5b610a54826109aa565b9392505050565b60008060408385031215610a6e57600080fd5b610a77836109aa565b9150610a85602084016109aa565b90509250929050565b600181811c90821680610aa257607f821691505b60208210811415610adc577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60008219821115610b1c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b50019056fea2646970667358221220ea837db55982fa6337364a97193f807baffaf946f2fc4d834a362194db15ea6564736f6c634300080a0033"; - -type ERC20ConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: ERC20ConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class ERC20__factory extends ContractFactory { - constructor(...args: ERC20ConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - name_: string, - symbol_: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(name_, symbol_, overrides || {}) as Promise; - } - override getDeployTransaction( - name_: string, - symbol_: string, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(name_, symbol_, overrides || {}); - } - override attach(address: string): ERC20 { - return super.attach(address) as ERC20; - } - override connect(signer: Signer): ERC20__factory { - return super.connect(signer) as ERC20__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): ERC20Interface { - return new utils.Interface(_abi) as ERC20Interface; - } - static connect(address: string, signerOrProvider: Signer | Provider): ERC20 { - return new Contract(address, _abi, signerOrProvider) as ERC20; - } -} diff --git a/src/types/factories/@openzeppelin/contracts/token/ERC20/index.ts b/src/types/factories/@openzeppelin/contracts/token/ERC20/index.ts index 3523dc7a..6e86faa7 100644 --- a/src/types/factories/@openzeppelin/contracts/token/ERC20/index.ts +++ b/src/types/factories/@openzeppelin/contracts/token/ERC20/index.ts @@ -2,5 +2,4 @@ /* tslint:disable */ /* eslint-disable */ export * as extensions from "./extensions"; -export { ERC20__factory } from "./ERC20__factory"; export { IERC20__factory } from "./IERC20__factory"; diff --git a/src/types/factories/@openzeppelin/contracts/token/ERC721/ERC721__factory.ts b/src/types/factories/@openzeppelin/contracts/token/ERC721/ERC721__factory.ts deleted file mode 100644 index 4463a623..00000000 --- a/src/types/factories/@openzeppelin/contracts/token/ERC721/ERC721__factory.ts +++ /dev/null @@ -1,409 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - ERC721, - ERC721Interface, -} from "../../../../../@openzeppelin/contracts/token/ERC721/ERC721"; - -const _abi = [ - { - inputs: [ - { - internalType: "string", - name: "name_", - type: "string", - }, - { - internalType: "string", - name: "symbol_", - type: "string", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "approved", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "tokenId", - type: "uint256", - }, - ], - name: "Approval", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "operator", - type: "address", - }, - { - indexed: false, - internalType: "bool", - name: "approved", - type: "bool", - }, - ], - name: "ApprovalForAll", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "tokenId", - type: "uint256", - }, - ], - name: "Transfer", - type: "event", - }, - { - inputs: [ - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "tokenId", - type: "uint256", - }, - ], - name: "approve", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "owner", - type: "address", - }, - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "tokenId", - type: "uint256", - }, - ], - name: "getApproved", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "owner", - type: "address", - }, - { - internalType: "address", - name: "operator", - type: "address", - }, - ], - name: "isApprovedForAll", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "tokenId", - type: "uint256", - }, - ], - name: "ownerOf", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "from", - type: "address", - }, - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "tokenId", - type: "uint256", - }, - ], - name: "safeTransferFrom", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "from", - type: "address", - }, - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "tokenId", - type: "uint256", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - name: "safeTransferFrom", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "operator", - type: "address", - }, - { - internalType: "bool", - name: "approved", - type: "bool", - }, - ], - name: "setApprovalForAll", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes4", - name: "interfaceId", - type: "bytes4", - }, - ], - name: "supportsInterface", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "symbol", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "tokenId", - type: "uint256", - }, - ], - name: "tokenURI", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "from", - type: "address", - }, - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "tokenId", - type: "uint256", - }, - ], - name: "transferFrom", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, -]; - -const _bytecode = - "0x60806040523480156200001157600080fd5b5060405162001bbe38038062001bbe8339810160408190526200003491620001db565b81516200004990600090602085019062000068565b5080516200005f90600190602084019062000068565b50505062000282565b828054620000769062000245565b90600052602060002090601f0160209004810192826200009a5760008555620000e5565b82601f10620000b557805160ff1916838001178555620000e5565b82800160010185558215620000e5579182015b82811115620000e5578251825591602001919060010190620000c8565b50620000f3929150620000f7565b5090565b5b80821115620000f35760008155600101620000f8565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200013657600080fd5b81516001600160401b03808211156200015357620001536200010e565b604051601f8301601f19908116603f011681019082821181831017156200017e576200017e6200010e565b816040528381526020925086838588010111156200019b57600080fd5b600091505b83821015620001bf5785820183015181830184015290820190620001a0565b83821115620001d15760008385830101525b9695505050505050565b60008060408385031215620001ef57600080fd5b82516001600160401b03808211156200020757600080fd5b620002158683870162000124565b935060208501519150808211156200022c57600080fd5b506200023b8582860162000124565b9150509250929050565b600181811c908216806200025a57607f821691505b602082108114156200027c57634e487b7160e01b600052602260045260246000fd5b50919050565b61192c80620002926000396000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c80636352211e1161008c578063a22cb46511610066578063a22cb465146101d0578063b88d4fde146101e3578063c87b56dd146101f6578063e985e9c51461020957600080fd5b80636352211e1461019457806370a08231146101a757806395d89b41146101c857600080fd5b8063095ea7b3116100bd578063095ea7b31461015957806323b872dd1461016e57806342842e0e1461018157600080fd5b806301ffc9a7146100e457806306fdde031461010c578063081812fc14610121575b600080fd5b6100f76100f23660046113ef565b610252565b60405190151581526020015b60405180910390f35b610114610337565b6040516101039190611482565b61013461012f366004611495565b6103c9565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610103565b61016c6101673660046114d7565b6104a8565b005b61016c61017c366004611501565b610635565b61016c61018f366004611501565b6106d6565b6101346101a2366004611495565b6106f1565b6101ba6101b536600461153d565b6107a3565b604051908152602001610103565b610114610871565b61016c6101de366004611558565b610880565b61016c6101f13660046115c3565b61088f565b610114610204366004611495565b610937565b6100f76102173660046116bd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205460ff1690565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd0000000000000000000000000000000000000000000000000000000014806102e557507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061033157507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b606060008054610346906116f0565b80601f0160208091040260200160405190810160405280929190818152602001828054610372906116f0565b80156103bf5780601f10610394576101008083540402835291602001916103bf565b820191906000526020600020905b8154815290600101906020018083116103a257829003601f168201915b5050505050905090565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff1661047f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084015b60405180910390fd5b5060009081526004602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60006104b3826106f1565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610571576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f72000000000000000000000000000000000000000000000000000000000000006064820152608401610476565b3373ffffffffffffffffffffffffffffffffffffffff8216148061059a575061059a8133610217565b610626576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610476565b6106308383610a54565b505050565b61063f3382610af4565b6106cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610476565b610630838383610c64565b6106308383836040518060200160405280600081525061088f565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff1680610331576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e00000000000000000000000000000000000000000000006064820152608401610476565b600073ffffffffffffffffffffffffffffffffffffffff8216610848576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152608401610476565b5073ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b606060018054610346906116f0565b61088b338383610ecb565b5050565b6108993383610af4565b610925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610476565b61093184848484610ff9565b50505050565b60008181526002602052604090205460609073ffffffffffffffffffffffffffffffffffffffff166109eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006064820152608401610476565b6000610a0260408051602081019091526000815290565b90506000815111610a225760405180602001604052806000815250610a4d565b80610a2c8461109c565b604051602001610a3d929190611744565b6040516020818303038152906040525b9392505050565b600081815260046020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091558190610aae826106f1565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff16610ba5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e00000000000000000000000000000000000000006064820152608401610476565b6000610bb0836106f1565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480610c1f57508373ffffffffffffffffffffffffffffffffffffffff16610c07846103c9565b73ffffffffffffffffffffffffffffffffffffffff16145b80610c5c575073ffffffffffffffffffffffffffffffffffffffff80821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b8273ffffffffffffffffffffffffffffffffffffffff16610c84826106f1565b73ffffffffffffffffffffffffffffffffffffffff1614610d27576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201527f73206e6f74206f776e00000000000000000000000000000000000000000000006064820152608401610476565b73ffffffffffffffffffffffffffffffffffffffff8216610dc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610476565b610dd4600082610a54565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260408120805460019290610e0a9084906117a2565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805460019290610e459084906117b9565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff86811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610476565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526005602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611004848484610c64565b611010848484846111ce565b610931576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610476565b6060816110dc57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b811561110657806110f0816117d1565b91506110ff9050600a83611839565b91506110e0565b60008167ffffffffffffffff81111561112157611121611594565b6040519080825280601f01601f19166020018201604052801561114b576020820181803683370190505b5090505b8415610c5c576111606001836117a2565b915061116d600a8661184d565b6111789060306117b9565b60f81b81838151811061118d5761118d611861565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506111c7600a86611839565b945061114f565b600073ffffffffffffffffffffffffffffffffffffffff84163b156113b3576040517f150b7a0200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063150b7a0290611245903390899088908890600401611890565b6020604051808303816000875af192505050801561129e575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261129b918101906118d9565b60015b611368573d8080156112cc576040519150601f19603f3d011682016040523d82523d6000602084013e6112d1565b606091505b508051611360576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610476565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050610c5c565b506001949350505050565b7fffffffff00000000000000000000000000000000000000000000000000000000811681146113ec57600080fd5b50565b60006020828403121561140157600080fd5b8135610a4d816113be565b60005b8381101561142757818101518382015260200161140f565b838111156109315750506000910152565b6000815180845261145081602086016020860161140c565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610a4d6020830184611438565b6000602082840312156114a757600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146114d257600080fd5b919050565b600080604083850312156114ea57600080fd5b6114f3836114ae565b946020939093013593505050565b60008060006060848603121561151657600080fd5b61151f846114ae565b925061152d602085016114ae565b9150604084013590509250925092565b60006020828403121561154f57600080fd5b610a4d826114ae565b6000806040838503121561156b57600080fd5b611574836114ae565b91506020830135801515811461158957600080fd5b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080600080608085870312156115d957600080fd5b6115e2856114ae565b93506115f0602086016114ae565b925060408501359150606085013567ffffffffffffffff8082111561161457600080fd5b818701915087601f83011261162857600080fd5b81358181111561163a5761163a611594565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561168057611680611594565b816040528281528a602084870101111561169957600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b600080604083850312156116d057600080fd5b6116d9836114ae565b91506116e7602084016114ae565b90509250929050565b600181811c9082168061170457607f821691505b6020821081141561173e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000835161175681846020880161140c565b83519083019061176a81836020880161140c565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156117b4576117b4611773565b500390565b600082198211156117cc576117cc611773565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561180357611803611773565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826118485761184861180a565b500490565b60008261185c5761185c61180a565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250836040830152608060608301526118cf6080830184611438565b9695505050505050565b6000602082840312156118eb57600080fd5b8151610a4d816113be56fea264697066735822122015010d31a84ab3a22f1475b195a35f95dde639587e536608f0c5cba747a1eeba64736f6c634300080a0033"; - -type ERC721ConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: ERC721ConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class ERC721__factory extends ContractFactory { - constructor(...args: ERC721ConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - name_: string, - symbol_: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(name_, symbol_, overrides || {}) as Promise; - } - override getDeployTransaction( - name_: string, - symbol_: string, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(name_, symbol_, overrides || {}); - } - override attach(address: string): ERC721 { - return super.attach(address) as ERC721; - } - override connect(signer: Signer): ERC721__factory { - return super.connect(signer) as ERC721__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): ERC721Interface { - return new utils.Interface(_abi) as ERC721Interface; - } - static connect(address: string, signerOrProvider: Signer | Provider): ERC721 { - return new Contract(address, _abi, signerOrProvider) as ERC721; - } -} diff --git a/src/types/factories/@openzeppelin/contracts/token/ERC721/index.ts b/src/types/factories/@openzeppelin/contracts/token/ERC721/index.ts index b1971ca6..6cd0c719 100644 --- a/src/types/factories/@openzeppelin/contracts/token/ERC721/index.ts +++ b/src/types/factories/@openzeppelin/contracts/token/ERC721/index.ts @@ -2,6 +2,5 @@ /* tslint:disable */ /* eslint-disable */ export * as extensions from "./extensions"; -export { ERC721__factory } from "./ERC721__factory"; export { IERC721__factory } from "./IERC721__factory"; export { IERC721Receiver__factory } from "./IERC721Receiver__factory"; diff --git a/src/types/factories/@openzeppelin/contracts/utils/introspection/ERC165__factory.ts b/src/types/factories/@openzeppelin/contracts/utils/introspection/ERC165__factory.ts deleted file mode 100644 index a0634c03..00000000 --- a/src/types/factories/@openzeppelin/contracts/utils/introspection/ERC165__factory.ts +++ /dev/null @@ -1,42 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import { Contract, Signer, utils } from "ethers"; -import type { Provider } from "@ethersproject/providers"; -import type { - ERC165, - ERC165Interface, -} from "../../../../../@openzeppelin/contracts/utils/introspection/ERC165"; - -const _abi = [ - { - inputs: [ - { - internalType: "bytes4", - name: "interfaceId", - type: "bytes4", - }, - ], - name: "supportsInterface", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -export class ERC165__factory { - static readonly abi = _abi; - static createInterface(): ERC165Interface { - return new utils.Interface(_abi) as ERC165Interface; - } - static connect(address: string, signerOrProvider: Signer | Provider): ERC165 { - return new Contract(address, _abi, signerOrProvider) as ERC165; - } -} diff --git a/src/types/factories/@openzeppelin/contracts/utils/introspection/index.ts b/src/types/factories/@openzeppelin/contracts/utils/introspection/index.ts index 8523e0a8..85d37333 100644 --- a/src/types/factories/@openzeppelin/contracts/utils/introspection/index.ts +++ b/src/types/factories/@openzeppelin/contracts/utils/introspection/index.ts @@ -1,5 +1,4 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ -export { ERC165__factory } from "./ERC165__factory"; export { IERC165__factory } from "./IERC165__factory"; diff --git a/src/types/factories/contracts/adapters/AbstractAdapter__factory.ts b/src/types/factories/contracts/adapters/AbstractAdapter__factory.ts deleted file mode 100644 index 23560e7f..00000000 --- a/src/types/factories/contracts/adapters/AbstractAdapter__factory.ts +++ /dev/null @@ -1,107 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import { Contract, Signer, utils } from "ethers"; -import type { Provider } from "@ethersproject/providers"; -import type { - AbstractAdapter, - AbstractAdapterInterface, -} from "../../../contracts/adapters/AbstractAdapter"; - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "TokenIsNotInAllowedList", - type: "error", - }, - { - inputs: [], - name: "ZeroAddressException", - type: "error", - }, - { - inputs: [], - name: "_gearboxAdapterType", - outputs: [ - { - internalType: "enum AdapterType", - name: "", - type: "uint8", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "_gearboxAdapterVersion", - outputs: [ - { - internalType: "uint16", - name: "", - type: "uint16", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "creditFacade", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditManager", - outputs: [ - { - internalType: "contract ICreditManagerV2", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "targetContract", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -export class AbstractAdapter__factory { - static readonly abi = _abi; - static createInterface(): AbstractAdapterInterface { - return new utils.Interface(_abi) as AbstractAdapterInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): AbstractAdapter { - return new Contract(address, _abi, signerOrProvider) as AbstractAdapter; - } -} diff --git a/src/types/factories/contracts/adapters/UniversalAdapter__factory.ts b/src/types/factories/contracts/adapters/UniversalAdapter__factory.ts deleted file mode 100644 index 40ec638d..00000000 --- a/src/types/factories/contracts/adapters/UniversalAdapter__factory.ts +++ /dev/null @@ -1,230 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - UniversalAdapter, - UniversalAdapterInterface, -} from "../../../contracts/adapters/UniversalAdapter"; - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "_creditManager", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "TokenIsNotInAllowedList", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "expected", - type: "address", - }, - { - internalType: "address", - name: "actual", - type: "address", - }, - ], - name: "UnexpectedCreditAccountException", - type: "error", - }, - { - inputs: [], - name: "ZeroAddressException", - type: "error", - }, - { - inputs: [], - name: "_gearboxAdapterType", - outputs: [ - { - internalType: "enum AdapterType", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "_gearboxAdapterVersion", - outputs: [ - { - internalType: "uint16", - name: "", - type: "uint16", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditFacade", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditManager", - outputs: [ - { - internalType: "contract ICreditManagerV2", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - components: [ - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "address", - name: "token", - type: "address", - }, - ], - internalType: "struct RevocationPair[]", - name: "revocations", - type: "tuple[]", - }, - ], - name: "revokeAdapterAllowances", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - components: [ - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "address", - name: "token", - type: "address", - }, - ], - internalType: "struct RevocationPair[]", - name: "revocations", - type: "tuple[]", - }, - { - internalType: "address", - name: "expectedCreditAccount", - type: "address", - }, - ], - name: "revokeAdapterAllowances", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "targetContract", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x60e060405273cccccccccccccccccccccccccccccccccccccccc60805234801561002857600080fd5b5060405161093b38038061093b833981016040819052610047916100ee565b6001600160a01b03811661006e57604051635919af9760e11b815260040160405180910390fd5b6001600160a01b03811660a081905260408051632f7a188160e01b81529051632f7a1881916004808201926020929091908290030181865afa1580156100b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100dc91906100ee565b6001600160a01b031660c0525061011e565b60006020828403121561010057600080fd5b81516001600160a01b038116811461011757600080fd5b9392505050565b60805160a05160c0516107da6101616000396000608701526000818161012f015281816101aa0152818161026d015261055e0152600061010801526107da6000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063bd90df701161005b578063bd90df7014610103578063c12c21c01461012a578063ce30bbdb14610151578063e6d6b1531461016657600080fd5b80632f7a188114610082578063565a820d146100d357806378aa73a4146100e8575b600080fd5b6100a97f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6100e66100e136600461061c565b610179565b005b6100f0600181565b60405161ffff90911681526020016100ca565b6100a97f000000000000000000000000000000000000000000000000000000000000000081565b6100a97f000000000000000000000000000000000000000000000000000000000000000081565b610159601081565b6040516100ca919061065e565b6100e66101743660046106c4565b61023c565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610206573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061022a919061071b565b9050610237838383610389565b505050565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156102c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102ed919061071b565b90508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610378576040517f4050c5c000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80841660048301528216602482015260440160405180910390fd5b610383848483610389565b50505050565b8160005b818110156105c95760008585838181106103a9576103a961073f565b6103bf926020604090920201908101915061076e565b905060008686848181106103d5576103d561073f565b90506040020160200160208101906103ed919061076e565b905073ffffffffffffffffffffffffffffffffffffffff82161580610426575073ffffffffffffffffffffffffffffffffffffffff8116155b1561045d576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015283811660248301526000919083169063dd62ed3e90604401602060405180830381865afa1580156104d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104f9919061078b565b905060018111156105bb576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152600160648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156105a257600080fd5b505af11580156105b6573d6000803e3d6000fd5b505050505b83600101935050505061038d565b5050505050565b60008083601f8401126105e257600080fd5b50813567ffffffffffffffff8111156105fa57600080fd5b6020830191508360208260061b850101111561061557600080fd5b9250929050565b6000806020838503121561062f57600080fd5b823567ffffffffffffffff81111561064657600080fd5b610652858286016105d0565b90969095509350505050565b6020810160118310610699577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b73ffffffffffffffffffffffffffffffffffffffff811681146106c157600080fd5b50565b6000806000604084860312156106d957600080fd5b833567ffffffffffffffff8111156106f057600080fd5b6106fc868287016105d0565b90945092505060208401356107108161069f565b809150509250925092565b60006020828403121561072d57600080fd5b81516107388161069f565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561078057600080fd5b81356107388161069f565b60006020828403121561079d57600080fd5b505191905056fea264697066735822122015676a055efbc0b97385074a521ef9c33d985cf618854b171004411a2b1b037764736f6c634300080a0033"; - -type UniversalAdapterConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: UniversalAdapterConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class UniversalAdapter__factory extends ContractFactory { - constructor(...args: UniversalAdapterConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - _creditManager: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - _creditManager, - overrides || {} - ) as Promise; - } - override getDeployTransaction( - _creditManager: string, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(_creditManager, overrides || {}); - } - override attach(address: string): UniversalAdapter { - return super.attach(address) as UniversalAdapter; - } - override connect(signer: Signer): UniversalAdapter__factory { - return super.connect(signer) as UniversalAdapter__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): UniversalAdapterInterface { - return new utils.Interface(_abi) as UniversalAdapterInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): UniversalAdapter { - return new Contract(address, _abi, signerOrProvider) as UniversalAdapter; - } -} diff --git a/src/types/factories/contracts/adapters/convex/ConvexV1_BaseRewardPool.sol/ConvexV1BaseRewardPoolAdapter__factory.ts b/src/types/factories/contracts/adapters/convex/ConvexV1_BaseRewardPool.sol/ConvexV1BaseRewardPoolAdapter__factory.ts deleted file mode 100644 index 6ea82b45..00000000 --- a/src/types/factories/contracts/adapters/convex/ConvexV1_BaseRewardPool.sol/ConvexV1BaseRewardPoolAdapter__factory.ts +++ /dev/null @@ -1,806 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - ConvexV1BaseRewardPoolAdapter, - ConvexV1BaseRewardPoolAdapterInterface, -} from "../../../../../contracts/adapters/convex/ConvexV1_BaseRewardPool.sol/ConvexV1BaseRewardPoolAdapter"; - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "_creditManager", - type: "address", - }, - { - internalType: "address", - name: "_baseRewardPool", - type: "address", - }, - { - internalType: "address", - name: "_stakedPhantomToken", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "NotImplementedException", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "token", - type: "address", - }, - ], - name: "TokenIsNotAddedToCreditManagerException", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "TokenIsNotInAllowedList", - type: "error", - }, - { - inputs: [], - name: "ZeroAddressException", - type: "error", - }, - { - inputs: [], - name: "_gearboxAdapterType", - outputs: [ - { - internalType: "enum AdapterType", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "_gearboxAdapterVersion", - outputs: [ - { - internalType: "uint16", - name: "", - type: "uint16", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditFacade", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditManager", - outputs: [ - { - internalType: "contract ICreditManagerV2", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "crv", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "currentRewards", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "curveLPtoken", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "cvx", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "cvxLPtoken", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "donate", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "duration", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "earned", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "extraReward1", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "extraReward2", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "i", - type: "uint256", - }, - ], - name: "extraRewards", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "extraRewardsLength", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "getReward", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - { - internalType: "bool", - name: "_claimExtras", - type: "bool", - }, - ], - name: "getReward", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "historicalRewards", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "lastTimeRewardApplicable", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "lastUpdateTime", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "newRewardRatio", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "operator", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "periodFinish", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "pid", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "queuedRewards", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "rewardManager", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "rewardPerToken", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "rewardPerTokenStored", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "rewardRate", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "rewardToken", - outputs: [ - { - internalType: "contract IERC20", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "rewards", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "stake", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "stakeAll", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "stakeFor", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "stakedPhantomToken", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "stakingToken", - outputs: [ - { - internalType: "contract IERC20", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "targetContract", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "totalSupply", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "userRewardPerTokenPaid", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "bool", - name: "claim", - type: "bool", - }, - ], - name: "withdraw", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bool", - name: "claim", - type: "bool", - }, - ], - name: "withdrawAll", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bool", - name: "claim", - type: "bool", - }, - ], - name: "withdrawAllAndUnwrap", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "bool", - name: "claim", - type: "bool", - }, - ], - name: "withdrawAndUnwrap", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, -]; - -const _bytecode = - "0x6102806040523480156200001257600080fd5b50604051620035d1380380620035d1833981016040819052620000359162000c7a565b82826001600160a01b03821615806200005557506001600160a01b038116155b156200007457604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038216608081905260408051632f7a188160e01b81529051632f7a1881916004808201926020929091908290030181865afa158015620000bf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e5919062000cce565b6001600160a01b0390811660a05290811660c0526001600055604080516372f702f360e01b8152905191851692506372f702f39160048083019260209291908290030181865afa1580156200013e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000164919062000cce565b6001600160a01b0316610100816001600160a01b031681525050816001600160a01b031663f10684546040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001bd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e3919062000cf5565b6101c08181525050816001600160a01b031663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200022a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000250919062000cce565b6001600160a01b03166101e0816001600160a01b031681525050816001600160a01b03166372f702f36040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002a9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002cf919062000cce565b6001600160a01b0316610200816001600160a01b031681525050816001600160a01b0316630fb5a6b46040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000328573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200034e919062000cf5565b6102208181525050816001600160a01b031663570ca7356040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000395573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003bb919062000cce565b6001600160a01b0316610240816001600160a01b031681525050816001600160a01b0316630f4ef8a66040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000414573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200043a919062000cce565b6001600160a01b0316610260816001600160a01b031681525050806001600160a01b0316610120816001600160a01b0316815250506000806000846001600160a01b031663d55a23f46040518163ffffffff1660e01b8152600401602060405180830381865afa158015620004b3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004d9919062000cf5565b9050600181106200069257604051632061aa2360e11b8152600060048201526001600160a01b038616906340c3544690602401602060405180830381865afa1580156200052a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000550919062000cce565b6001600160a01b031663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200058e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005b4919062000cce565b9250600281106200069257604051632061aa2360e11b8152600160048201526001600160a01b038616906340c3544690602401602060405180830381865afa15801562000605573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200062b919062000cce565b6001600160a01b031663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000669573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200068f919062000cce565b91505b6001600160a01b0380841661014052828116610160526040805163570ca73560e01b8152905160009288169163570ca7359160048083019260209291908290030181865afa158015620006e9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200070f919062000cce565b9050806001600160a01b0316636a4874a16040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000750573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000776919062000cce565b6001600160a01b0316610180816001600160a01b031681525050806001600160a01b031663075461726040518163ffffffff1660e01b8152600401602060405180830381865afa158015620007cf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007f5919062000cce565b6001600160a01b03166101a0816001600160a01b0316815250506000816001600160a01b0316631526fe27886001600160a01b031663f10684546040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200085f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000885919062000cf5565b6040518263ffffffff1660e01b8152600401620008a491815260200190565b60c060405180830381865afa158015620008c2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008e8919062000d20565b80516001600160a01b0390811660e05260805161018051604051630f67c5bd60e41b81529083166004820152929350169063f67c5bd090602401602060405180830381865afa15801562000940573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000966919062000cf5565b620009995761018051604051632262b1b560e21b81526001600160a01b0390911660048201526024015b60405180910390fd5b6080516101a051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620009e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a0d919062000cf5565b62000a3c576101a051604051632262b1b560e21b81526001600160a01b03909116600482015260240162000990565b60805160e051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa15801562000a89573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000aaf919062000cf5565b62000add5760e051604051632262b1b560e21b81526001600160a01b03909116600482015260240162000990565b6001600160a01b0385161580159062000b645750608051604051630f67c5bd60e41b81526001600160a01b0387811660048301529091169063f67c5bd090602401602060405180830381865afa15801562000b3c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b62919062000cf5565b155b1562000b8f57604051632262b1b560e21b81526001600160a01b038616600482015260240162000990565b6001600160a01b0384161580159062000c165750608051604051630f67c5bd60e41b81526001600160a01b0386811660048301529091169063f67c5bd090602401602060405180830381865afa15801562000bee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c14919062000cf5565b155b1562000c4157604051632262b1b560e21b81526001600160a01b038516600482015260240162000990565b505050505050505062000dda565b6001600160a01b038116811462000c6557600080fd5b50565b805162000c758162000c4f565b919050565b60008060006060848603121562000c9057600080fd5b835162000c9d8162000c4f565b602085015190935062000cb08162000c4f565b604085015190925062000cc38162000c4f565b809150509250925092565b60006020828403121562000ce157600080fd5b815162000cee8162000c4f565b9392505050565b60006020828403121562000d0857600080fd5b5051919050565b8051801515811462000c7557600080fd5b600060c0828403121562000d3357600080fd5b60405160c081016001600160401b038111828210171562000d6457634e487b7160e01b600052604160045260246000fd5b60405262000d728362000c68565b815262000d826020840162000c68565b602082015262000d956040840162000c68565b604082015262000da86060840162000c68565b606082015262000dbb6080840162000c68565b608082015262000dce60a0840162000d0f565b60a08201529392505050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e051610200516102205161024051610260516125c66200100b60003960006103410152600061048b0152600061038d0152600061050f0152600061072d015260006106f8015260008181610584015261169f0152600081816104ba01526115d80152600081816105d20152818161183601526118b70152600081816106c10152818161172701526117b10152600081816103d1015281816110b0015281816111ae0152818161152d01526119f80152600081816105f90152818161108f0152818161118d015261154e0152600081816105ab0152611a190152600081816106330152818161079601528181610851015281816108860152818161096501528181610b6f01528181610c4701528181610d1301528181610d8001528181610e3901528181610f0401528181610f3901528181610fa6015281816110570152818161111d01528181611255015281816112c20152818161132f0152818161139c0152818161140901528181611cda01528181611df90152611ed301526000818161042301528181611b450152611f9901526000818161065a01528181610a9501528181610b40015281816114ba01528181611600015281816116c7015281816117d9015281816118df0152818161197001528181611aa201528181611d3001528181611dca01528181611f0a01528181612021015281816120d5015261217f01526125c66000f3fe608060405234801561001057600080fd5b50600436106102fe5760003560e01c80637b0a47ee1161019c578063c12c21c0116100ee578063da5b383f11610097578063f106845411610071578063f1068454146106f3578063f14faf6f1461071a578063f7c618c11461072857600080fd5b8063da5b383f146106bc578063df136d65146106e3578063ebe2b12b146106eb57600080fd5b8063cd3daf9d116100c8578063cd3daf9d14610697578063ce30bbdb1461069f578063d55a23f4146106b457600080fd5b8063c12c21c014610655578063c32e72021461067c578063c8f33c911461068f57600080fd5b8063923c1d611161015057806399253ac01161012a57806399253ac0146105f4578063a694fc3a1461061b578063bd90df701461062e57600080fd5b8063923c1d611461057f578063927188d9146105a657806397c3413b146105cd57600080fd5b80638b876347116101815780638b8763471461055c5780638dcb40611461056f578063901a7d531461057757600080fd5b80637b0a47ee1461054c57806380faa57d1461055457600080fd5b80633d18b912116102555780636a4874a11161020957806370a08231116101e357806370a08231146104f757806372f702f31461050a57806378aa73a41461053157600080fd5b80636a4874a1146104b55780636c8bcee8146104dc5780637050ccd9146104e457600080fd5b806349f039a21161023a57806349f039a214610473578063570ca7351461048657806363d38c3b146104ad57600080fd5b80633d18b9121461045857806340c354461461046057600080fd5b80631c1c6fe5116102b75780632ee40908116102915780632ee40908146103fb5780632f7a18811461041e57806338d074361461044557600080fd5b80631c1c6fe5146103b757806320b2c151146103cc578063262d3d6d146103f357600080fd5b80630f4ef8a6116102e85780630f4ef8a61461033c5780630fb5a6b41461038857806318160ddd146103af57600080fd5b80628cc262146103035780630700037d14610329575b600080fd5b610316610311366004612205565b61074f565b6040519081526020015b60405180910390f35b610316610337366004612205565b610809565b6103637f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610320565b6103167f000000000000000000000000000000000000000000000000000000000000000081565b610316610882565b6103ca6103c5366004612230565b610918565b005b6103637f000000000000000000000000000000000000000000000000000000000000000081565b610316610961565b61040e61040936600461224d565b6109ce565b6040519015158152602001610320565b6103637f000000000000000000000000000000000000000000000000000000000000000081565b61040e610453366004612279565b610a02565b61040e610a4d565b61036361046e3660046122a9565b610c15565b6103ca610481366004612230565b610cc7565b6103637f000000000000000000000000000000000000000000000000000000000000000081565b610316610d0f565b6103637f000000000000000000000000000000000000000000000000000000000000000081565b610316610d7c565b61040e6104f23660046122c2565b610de9565b610316610505366004612205565b610ebc565b6103637f000000000000000000000000000000000000000000000000000000000000000081565b610539600181565b60405161ffff9091168152602001610320565b610316610f35565b610316610fa2565b61031661056a366004612205565b61100f565b61040e611088565b610316611119565b6103637f000000000000000000000000000000000000000000000000000000000000000081565b6103637f000000000000000000000000000000000000000000000000000000000000000081565b6103637f000000000000000000000000000000000000000000000000000000000000000081565b6103637f000000000000000000000000000000000000000000000000000000000000000081565b61040e6106293660046122a9565b611186565b6103637f000000000000000000000000000000000000000000000000000000000000000081565b6103637f000000000000000000000000000000000000000000000000000000000000000081565b61040e61068a366004612279565b61120d565b610316611251565b6103166112be565b6106a7600c81565b60405161032091906122f0565b61031661132b565b6103637f000000000000000000000000000000000000000000000000000000000000000081565b610316611398565b610316611405565b6103167f000000000000000000000000000000000000000000000000000000000000000081565b61040e6104093660046122a9565b6103637f000000000000000000000000000000000000000000000000000000000000000081565b6040517e8cc26200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f000000000000000000000000000000000000000000000000000000000000000090911690628cc262906024015b602060405180830381865afa1580156107df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108039190612331565b92915050565b6040517f0700037d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f000000000000000000000000000000000000000000000000000000000000000090911690630700037d906024016107c2565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109139190612331565b905090565b61095d6000368080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250859250600191506114729050565b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663262d3d6d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108ef573d6000803e3d6000fd5b60006040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610a466000368080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525087935091506114729050565b9392505050565b6040517fe958b704000000000000000000000000000000000000000000000000000000008152336004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015610adc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b00919061234a565b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a90610b9c9033907f0000000000000000000000000000000000000000000000000000000000000000906000903690600401612367565b6000604051808303816000875af1158015610bbb573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610c01919081019061243a565b50610c0d816001611593565b600191505090565b6040517f40c35446000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906340c3544690602401602060405180830381865afa158015610ca3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610803919061234a565b610d0c6000368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508592506001915061193f9050565b50565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166363d38c3b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108ef573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636c8bcee86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108ef573d6000803e3d6000fd5b6040517f7050ccd900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282151560248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690637050ccd9906044016020604051808303816000875af1158015610e84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea891906124fa565b50610eb38383611593565b50600192915050565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a08231906024016107c2565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637b0a47ee6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108ef573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166380faa57d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108ef573d6000803e3d6000fd5b6040517f8b87634700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638b876347906024016107c2565b60006111117f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525060019250829150611a599050565b506001905090565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663901a7d536040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108ef573d6000803e3d6000fd5b6000610eb37f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006000368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250600193509150611a599050565b6000610eb36000368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250879350915061193f9050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c8f33c916040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108ef573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663cd3daf9d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108ef573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d55a23f46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108ef573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663df136d656040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108ef573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ebe2b12b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108ef573d6000803e3d6000fd5b6040517fe958b704000000000000000000000000000000000000000000000000000000008152336004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611501573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611525919061234a565b9050611576817f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000088600088611b28565b50831561158857611588816001611593565b506001949350505050565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561164457600080fd5b505af1158015611658573d6000803e3d6000fd5b50506040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f00000000000000000000000000000000000000000000000000000000000000001692506351e3f1609150604401600060405180830381600087803b15801561170d57600080fd5b505af1158015611721573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16158015906117675750805b1561095d576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561181d57600080fd5b505af1158015611831573d6000803e3d6000fd5b5050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1615905061095d576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561192357600080fd5b505af1158015611937573d6000803e3d6000fd5b505050505050565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156119cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119f0919061234a565b9050611a41817f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000087600087611b28565b508215611a5357611a53816001611593565b50505050565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015260609060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611ae9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0d919061234a565b9050611b1d818888888888611b28565b979650505050505050565b60606000803373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614611c91576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301528916906370a0823190602401602060405180830381865afa158015611bd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bfa9190612331565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152919350908816906370a0823190602401602060405180830381865afa158015611c6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c8e9190612331565b90505b8415611d8d576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015611d7457600080fd5b505af1158015611d88573d6000803e3d6000fd5b505050505b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a90611e239033907f0000000000000000000000000000000000000000000000000000000000000000908b90600401612517565b6000604051808303816000875af1158015611e42573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611e88919081019061243a565b92508415611f67576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301528981166044830152600160648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015611f4e57600080fd5b505af1158015611f62573d6000803e3d6000fd5b505050505b611f75898989858589611f81565b50509695505050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614612082576040517f654a9eda00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528681166024830152858116604483015260648201859052608482018490527f0000000000000000000000000000000000000000000000000000000000000000169063654a9eda9060a401600060405180830381600087803b15801561206557600080fd5b505af1158015612079573d6000803e3d6000fd5b50505050611937565b8015612132576040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015286811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b15801561211957600080fd5b505af115801561212d573d6000803e3d6000fd5b505050505b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015285811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156121c357600080fd5b505af11580156121d7573d6000803e3d6000fd5b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114610d0c57600080fd5b60006020828403121561221757600080fd5b8135610a46816121e3565b8015158114610d0c57600080fd5b60006020828403121561224257600080fd5b8135610a4681612222565b6000806040838503121561226057600080fd5b823561226b816121e3565b946020939093013593505050565b6000806040838503121561228c57600080fd5b82359150602083013561229e81612222565b809150509250929050565b6000602082840312156122bb57600080fd5b5035919050565b600080604083850312156122d557600080fd5b82356122e0816121e3565b9150602083013561229e81612222565b602081016011831061232b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561234357600080fd5b5051919050565b60006020828403121561235c57600080fd5b8151610a46816121e3565b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250606060408301528260608301528284608084013760006080848401015260807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f850116830101905095945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60005b83811015612429578181015183820152602001612411565b83811115611a535750506000910152565b60006020828403121561244c57600080fd5b815167ffffffffffffffff8082111561246457600080fd5b818401915084601f83011261247857600080fd5b81518181111561248a5761248a6123df565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156124d0576124d06123df565b816040528281528760208487010111156124e957600080fd5b611b1d83602083016020880161240e565b60006020828403121561250c57600080fd5b8151610a4681612222565b600073ffffffffffffffffffffffffffffffffffffffff808616835280851660208401525060606040830152825180606084015261255c81608085016020870161240e565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160800194935050505056fea264697066735822122014882b5d8edce8ab020643e045bc4ec2fad569e354e7a0377cb2553dca8093d864736f6c634300080a0033"; - -type ConvexV1BaseRewardPoolAdapterConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: ConvexV1BaseRewardPoolAdapterConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class ConvexV1BaseRewardPoolAdapter__factory extends ContractFactory { - constructor(...args: ConvexV1BaseRewardPoolAdapterConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - _creditManager: string, - _baseRewardPool: string, - _stakedPhantomToken: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - _creditManager, - _baseRewardPool, - _stakedPhantomToken, - overrides || {} - ) as Promise; - } - override getDeployTransaction( - _creditManager: string, - _baseRewardPool: string, - _stakedPhantomToken: string, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction( - _creditManager, - _baseRewardPool, - _stakedPhantomToken, - overrides || {} - ); - } - override attach(address: string): ConvexV1BaseRewardPoolAdapter { - return super.attach(address) as ConvexV1BaseRewardPoolAdapter; - } - override connect(signer: Signer): ConvexV1BaseRewardPoolAdapter__factory { - return super.connect(signer) as ConvexV1BaseRewardPoolAdapter__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): ConvexV1BaseRewardPoolAdapterInterface { - return new utils.Interface(_abi) as ConvexV1BaseRewardPoolAdapterInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): ConvexV1BaseRewardPoolAdapter { - return new Contract( - address, - _abi, - signerOrProvider - ) as ConvexV1BaseRewardPoolAdapter; - } -} diff --git a/src/types/factories/contracts/adapters/convex/ConvexV1_BaseRewardPool.sol/index.ts b/src/types/factories/contracts/adapters/convex/ConvexV1_BaseRewardPool.sol/index.ts deleted file mode 100644 index 2e792bdc..00000000 --- a/src/types/factories/contracts/adapters/convex/ConvexV1_BaseRewardPool.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { ConvexV1BaseRewardPoolAdapter__factory } from "./ConvexV1BaseRewardPoolAdapter__factory"; diff --git a/src/types/factories/contracts/adapters/convex/ConvexV1_Booster.sol/ConvexV1BoosterAdapter__factory.ts b/src/types/factories/contracts/adapters/convex/ConvexV1_Booster.sol/ConvexV1BoosterAdapter__factory.ts deleted file mode 100644 index 27f0c8bd..00000000 --- a/src/types/factories/contracts/adapters/convex/ConvexV1_Booster.sol/ConvexV1BoosterAdapter__factory.ts +++ /dev/null @@ -1,533 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - ConvexV1BoosterAdapter, - ConvexV1BoosterAdapterInterface, -} from "../../../../../contracts/adapters/convex/ConvexV1_Booster.sol/ConvexV1BoosterAdapter"; - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "_creditManager", - type: "address", - }, - { - internalType: "address", - name: "_booster", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "CallerNotConfiguratorException", - type: "error", - }, - { - inputs: [], - name: "CallerNotPausableAdminException", - type: "error", - }, - { - inputs: [], - name: "CallerNotUnPausableAdminException", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "TokenIsNotInAllowedList", - type: "error", - }, - { - inputs: [], - name: "ZeroAddressException", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "Paused", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "Unpaused", - type: "event", - }, - { - inputs: [], - name: "_acl", - outputs: [ - { - internalType: "contract ACL", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "_gearboxAdapterType", - outputs: [ - { - internalType: "enum AdapterType", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "_gearboxAdapterVersion", - outputs: [ - { - internalType: "uint16", - name: "", - type: "uint16", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditFacade", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditManager", - outputs: [ - { - internalType: "contract ICreditManagerV2", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "crv", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_pid", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "bool", - name: "_stake", - type: "bool", - }, - ], - name: "deposit", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_pid", - type: "uint256", - }, - { - internalType: "bool", - name: "_stake", - type: "bool", - }, - ], - name: "depositAll", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "lockFees", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "lockRewards", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "minter", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "pause", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "paused", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "pidToPhantomToken", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "i", - type: "uint256", - }, - ], - name: "poolInfo", - outputs: [ - { - components: [ - { - internalType: "address", - name: "lptoken", - type: "address", - }, - { - internalType: "address", - name: "token", - type: "address", - }, - { - internalType: "address", - name: "gauge", - type: "address", - }, - { - internalType: "address", - name: "crvRewards", - type: "address", - }, - { - internalType: "address", - name: "stash", - type: "address", - }, - { - internalType: "bool", - name: "shutdown", - type: "bool", - }, - ], - internalType: "struct IBooster.PoolInfo", - name: "", - type: "tuple", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "poolLength", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "registry", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "staker", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "stakerRewards", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "targetContract", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "unpause", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "updateStakedPhantomTokensMap", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_pid", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "withdraw", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_pid", - type: "uint256", - }, - ], - name: "withdrawAll", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, -]; - -const _bytecode = - "0x6101406040523480156200001257600080fd5b50604051620024563803806200245683398101604081905262000035916200037b565b816001600160a01b031663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000074573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200009a9190620003ba565b6001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000d8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000fe9190620003ba565b82826001600160a01b03821615806200011e57506001600160a01b038116155b156200013d57604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038216608081905260408051632f7a188160e01b81529051632f7a1881916004808201926020929091908290030181865afa15801562000188573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ae9190620003ba565b6001600160a01b0390811660a05290811660c0526000805460ff19169055821615159050620001f057604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200022f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002559190620003ba565b6001600160a01b0390811660e0526001805560408051636a4874a160e01b815290519184169250636a4874a19160048083019260209291908290030181865afa158015620002a7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002cd9190620003ba565b6001600160a01b0316610100816001600160a01b031681525050806001600160a01b031663075461726040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000326573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200034c9190620003ba565b6001600160a01b03166101205250620003e19050565b6001600160a01b03811681146200037857600080fd5b50565b600080604083850312156200038f57600080fd5b82516200039c8162000362565b6020840151909250620003af8162000362565b809150509250929050565b600060208284031215620003cd57600080fd5b8151620003da8162000362565b9392505050565b60805160a05160c05160e0516101005161012051611f6f620004e760003960006101a2015260006103550152600081816103c20152818161068f015281816109340152610a660152600081816103f10152818161045b0152818161055f015281816105d4015281816107e90152818161089d01528181610f4f01528181610fbc01528181611154015281816112630152818161163601528181611755015261182f0152600081816102c0015281816114a101526118f501526000818161041801528181610b2001528181610d0a015281816113fe0152818161168c01528181611726015281816118660152818161197d01528181611a310152611adb0152611f6f6000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c80636a4874a1116100e3578063a50cf2c81161008c578063c12c21c011610066578063c12c21c014610413578063ce30bbdb1461043a578063cfb9cfba1461044f57600080fd5b8063a50cf2c8146103bd578063ab366292146103e4578063bd90df70146103ec57600080fd5b80638456cb59116100bd5780638456cb591461039a578063958e2d31146103a25780639b51ecd3146103b557600080fd5b80636a4874a11461035057806378aa73a4146103775780637b1039991461039257600080fd5b80633f4ba83a116101455780635c975abb1161011f5780635c975abb1461032a5780635ebaf1db1461033557806360759fce1461033d57600080fd5b80633f4ba83a146102ea57806343a0d066146102f4578063441a3e701461031757600080fd5b8063251d48c011610176578063251d48c0146102855780632f7a1881146102bb578063376d771a146102e257600080fd5b8063075461721461019d578063081e3eda146101ee5780631526fe2714610204575b600080fd5b6101c47f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6101f6610457565b6040519081526020016101e5565b610217610212366004611b40565b6104ed565b6040516101e59190600060c08201905073ffffffffffffffffffffffffffffffffffffffff8084511683528060208501511660208401528060408501511660408401528060608501511660608401528060808501511660808401525060a0830151151560a083015292915050565b6101c4610293366004611b40565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6101c47f000000000000000000000000000000000000000000000000000000000000000081565b6101c46105d0565b6102f2610661565b005b610307610302366004611b6a565b61074f565b60405190151581526020016101e5565b610307610325366004611ba3565b61079b565b60005460ff16610307565b6101c46107e5565b61030761034b366004611bc5565b610852565b6101c47f000000000000000000000000000000000000000000000000000000000000000081565b61037f600181565b60405161ffff90911681526020016101e5565b6101c4610899565b6102f2610906565b6103076103b0366004611b40565b6109f2565b6102f2610a38565b6101c47f000000000000000000000000000000000000000000000000000000000000000081565b6101c4610f4b565b6101c47f000000000000000000000000000000000000000000000000000000000000000081565b6101c47f000000000000000000000000000000000000000000000000000000000000000081565b610442600d81565b6040516101e59190611c24565b6101c4610fb8565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663081e3eda6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e89190611c65565b905090565b6040805160c081018252600080825260208201819052818301819052606082018190526080820181905260a082015290517f1526fe270000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690631526fe279060240160c060405180830381865afa1580156105a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ca9190611cd6565b92915050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663376d771a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561063d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e89190611d77565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156106eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070f9190611d92565b610745576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61074d611025565b565b600061079384836000368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250925061110b915050565b949350505050565b60006107de836000368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250925061121a915050565b9392505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635ebaf1db6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561063d573d6000803e3d6000fd5b60006107de83836000368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061110b915050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637b1039996040518163ffffffff1660e01b8152600401602060405180830381865afa15801561063d573d6000803e3d6000fd5b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015610990573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b49190611d92565b6109ea576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61074d6112f5565b60006105ca826000368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061121a915050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610ac2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae69190611d92565b610b1c576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bad9190611d77565b905060008173ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c209190611c65565b905060005b81811015610f46576040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810182905260009073ffffffffffffffffffffffffffffffffffffffff851690635094cb4f90602401602060405180830381865afa158015610c9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cbf9190611d77565b6040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000917f0000000000000000000000000000000000000000000000000000000000000000169063fdd5764590602401602060405180830381865afa158015610d51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d759190611d77565b905060008173ffffffffffffffffffffffffffffffffffffffff1663ce30bbdb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de89190611daf565b9050600c816010811115610dfe57610dfe611bf5565b1415610f385760008273ffffffffffffffffffffffffffffffffffffffff1663f10684546040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e759190611c65565b90508273ffffffffffffffffffffffffffffffffffffffff166320b2c1516040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ec2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee69190611d77565b60009182526002602052604090912080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9092169190911790555b836001019350505050610c25565b505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ab3662926040518163ffffffff1660e01b8152600401602060405180830381865afa15801561063d573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663cfb9cfba6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561063d573d6000803e3d6000fd5b60005460ff16611096576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6040517f1526fe2700000000000000000000000000000000000000000000000000000000815260048101859052600090819073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690631526fe279060240160c060405180830381865afa15801561119b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bf9190611cd6565b80519091506000866111d55782602001516111fb565b60008881526002602052604090205473ffffffffffffffffffffffffffffffffffffffff165b905061120b8282886001896113b5565b50600198975050505050505050565b6040517f1526fe2700000000000000000000000000000000000000000000000000000000815260048101849052600090819073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690631526fe279060240160c060405180830381865afa1580156112aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ce9190611cd6565b60208101518151919250906112e78282886000896113b5565b506001979650505050505050565b60005460ff1615611362576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015260640161108d565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586110e13390565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015260609060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611445573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114699190611d77565b9050611479818888888888611484565b979650505050505050565b60606000803373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146115ed576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301528916906370a0823190602401602060405180830381865afa158015611532573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115569190611c65565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152919350908816906370a0823190602401602060405180830381865afa1580156115c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ea9190611c65565b90505b84156116e9576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156116d057600080fd5b505af11580156116e4573d6000803e3d6000fd5b505050505b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a9061177f9033907f0000000000000000000000000000000000000000000000000000000000000000908b90600401611e00565b6000604051808303816000875af115801561179e573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526117e49190810190611e79565b925084156118c3576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301528981166044830152600160648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156118aa57600080fd5b505af11580156118be573d6000803e3d6000fd5b505050505b6118d18989898585896118dd565b50509695505050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146119de576040517f654a9eda00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528681166024830152858116604483015260648201859052608482018490527f0000000000000000000000000000000000000000000000000000000000000000169063654a9eda9060a401600060405180830381600087803b1580156119c157600080fd5b505af11580156119d5573d6000803e3d6000fd5b50505050611b38565b8015611a8e576040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015286811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b158015611a7557600080fd5b505af1158015611a89573d6000803e3d6000fd5b505050505b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015285811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015611b1f57600080fd5b505af1158015611b33573d6000803e3d6000fd5b505050505b505050505050565b600060208284031215611b5257600080fd5b5035919050565b8015158114611b6757600080fd5b50565b600080600060608486031215611b7f57600080fd5b83359250602084013591506040840135611b9881611b59565b809150509250925092565b60008060408385031215611bb657600080fd5b50508035926020909101359150565b60008060408385031215611bd857600080fd5b823591506020830135611bea81611b59565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160118310611c5f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b600060208284031215611c7757600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b805173ffffffffffffffffffffffffffffffffffffffff81168114611cd157600080fd5b919050565b600060c08284031215611ce857600080fd5b60405160c0810181811067ffffffffffffffff82111715611d0b57611d0b611c7e565b604052611d1783611cad565b8152611d2560208401611cad565b6020820152611d3660408401611cad565b6040820152611d4760608401611cad565b6060820152611d5860808401611cad565b608082015260a0830151611d6b81611b59565b60a08201529392505050565b600060208284031215611d8957600080fd5b6107de82611cad565b600060208284031215611da457600080fd5b81516107de81611b59565b600060208284031215611dc157600080fd5b8151601181106107de57600080fd5b60005b83811015611deb578181015183820152602001611dd3565b83811115611dfa576000848401525b50505050565b600073ffffffffffffffffffffffffffffffffffffffff8086168352808516602084015250606060408301528251806060840152611e45816080850160208701611dd0565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01691909101608001949350505050565b600060208284031215611e8b57600080fd5b815167ffffffffffffffff80821115611ea357600080fd5b818401915084601f830112611eb757600080fd5b815181811115611ec957611ec9611c7e565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715611f0f57611f0f611c7e565b81604052828152876020848701011115611f2857600080fd5b611479836020830160208801611dd056fea264697066735822122080e1032e0766b40456cf2702ec4a669a6b8db0e189e75ab6c4126faae080b85d64736f6c634300080a0033"; - -type ConvexV1BoosterAdapterConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: ConvexV1BoosterAdapterConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class ConvexV1BoosterAdapter__factory extends ContractFactory { - constructor(...args: ConvexV1BoosterAdapterConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - _creditManager: string, - _booster: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - _creditManager, - _booster, - overrides || {} - ) as Promise; - } - override getDeployTransaction( - _creditManager: string, - _booster: string, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction( - _creditManager, - _booster, - overrides || {} - ); - } - override attach(address: string): ConvexV1BoosterAdapter { - return super.attach(address) as ConvexV1BoosterAdapter; - } - override connect(signer: Signer): ConvexV1BoosterAdapter__factory { - return super.connect(signer) as ConvexV1BoosterAdapter__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): ConvexV1BoosterAdapterInterface { - return new utils.Interface(_abi) as ConvexV1BoosterAdapterInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): ConvexV1BoosterAdapter { - return new Contract( - address, - _abi, - signerOrProvider - ) as ConvexV1BoosterAdapter; - } -} diff --git a/src/types/factories/contracts/adapters/convex/ConvexV1_Booster.sol/index.ts b/src/types/factories/contracts/adapters/convex/ConvexV1_Booster.sol/index.ts deleted file mode 100644 index ef9e89db..00000000 --- a/src/types/factories/contracts/adapters/convex/ConvexV1_Booster.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { ConvexV1BoosterAdapter__factory } from "./ConvexV1BoosterAdapter__factory"; diff --git a/src/types/factories/contracts/adapters/convex/ConvexV1_ClaimZap.sol/ConvexV1ClaimZapAdapter__factory.ts b/src/types/factories/contracts/adapters/convex/ConvexV1_ClaimZap.sol/ConvexV1ClaimZapAdapter__factory.ts deleted file mode 100644 index 46b90427..00000000 --- a/src/types/factories/contracts/adapters/convex/ConvexV1_ClaimZap.sol/ConvexV1ClaimZapAdapter__factory.ts +++ /dev/null @@ -1,254 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - ConvexV1ClaimZapAdapter, - ConvexV1ClaimZapAdapterInterface, -} from "../../../../../contracts/adapters/convex/ConvexV1_ClaimZap.sol/ConvexV1ClaimZapAdapter"; - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "_creditManager", - type: "address", - }, - { - internalType: "address", - name: "_claimZap", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "TokenIsNotInAllowedList", - type: "error", - }, - { - inputs: [], - name: "ZeroAddressException", - type: "error", - }, - { - inputs: [], - name: "_gearboxAdapterType", - outputs: [ - { - internalType: "enum AdapterType", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "_gearboxAdapterVersion", - outputs: [ - { - internalType: "uint16", - name: "", - type: "uint16", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "rewardContracts", - type: "address[]", - }, - { - internalType: "address[]", - name: "extraRewardContracts", - type: "address[]", - }, - { - internalType: "address[]", - name: "tokenRewardContracts", - type: "address[]", - }, - { - internalType: "address[]", - name: "tokenRewardTokens", - type: "address[]", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "claimRewards", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "creditFacade", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditManager", - outputs: [ - { - internalType: "contract ICreditManagerV2", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "crv", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "cvx", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "targetContract", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x60e060405234801561001057600080fd5b50604051610e17380380610e178339818101604052604081101561003357600080fd5b50805160209091015181816001600160a01b038216158061005b57506001600160a01b038116155b1561007957604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038216608081905260408051632f7a188160e01b81529051632f7a1881916004808201926020929091908290030181865afa1580156100c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e79190610106565b6001600160a01b0390811660a0521660c0525050600160005550610136565b60006020828403121561011857600080fd5b81516001600160a01b038116811461012f57600080fd5b9392505050565b60805160a05160c051610c97610180600039600081816102920152818161040601526104900152600060920152600081816102b90152818161030e0152610b460152610c976000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c8063923c1d611161005b578063923c1d6114610285578063bd90df701461028d578063c12c21c0146102b4578063ce30bbdb146102db57600080fd5b80632f7a18811461008d5780635a7b87f2146100dd5780636a4874a11461025e57806378aa73a414610266575b600080fd5b6100b47f000000000000000000000000000000000000000000000000000000000000000081565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b61025c60048036036101208110156100f457600080fd5b81019060208101813564010000000081111561010f57600080fd5b82018360208201111561012157600080fd5b8035906020019184602083028401116401000000008311171561014357600080fd5b91939092909160208101903564010000000081111561016157600080fd5b82018360208201111561017357600080fd5b8035906020019184602083028401116401000000008311171561019557600080fd5b9193909290916020810190356401000000008111156101b357600080fd5b8201836020820111156101c557600080fd5b803590602001918460208302840111640100000000831117156101e757600080fd5b91939092909160208101903564010000000081111561020557600080fd5b82018360208201111561021757600080fd5b8035906020019184602083028401116401000000008311171561023957600080fd5b91935091508035906020810135906040810135906060810135906080013561030a565b005b6100b4610402565b61026e600181565b6040805161ffff9092168252519081900360200190f35b6100b461048c565b6100b47f000000000000000000000000000000000000000000000000000000000000000081565b6100b47f000000000000000000000000000000000000000000000000000000000000000081565b6102e3600e81565b604051808260108111156102f9576102f9610c03565b815260200191505060405180910390f35b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e958b704336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381865afa158015610398573d6000803e3d6000fd5b505050506040513d60208110156103ae57600080fd5b505190506103bd818f8f6104f9565b6103c8818d8d610830565b6103d5818b8b8b8b610991565b6103e6816103e1610402565b610ab8565b6103f2816103e161048c565b5050505050505050505050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636a4874a16040518163ffffffff1660e01b8152600401602060405180830381865afa15801561046f573d6000803e3d6000fd5b505050506040513d602081101561048557600080fd5b5051919050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663923c1d616040518163ffffffff1660e01b8152600401602060405180830381865afa15801561046f573d6000803e3d6000fd5b600081815b8181101561082857600085858381811061051a5761051a610c32565b604080517f7050ccd900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c811660048301526001602483015291516020938402959095013590911694508493637050ccd993506044808301939282900301816000875af11580156105a1573d6000803e3d6000fd5b505050506040513d60208110156105b757600080fd5b5050604080517ff7c618c1000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff83169163f7c618c19160048083019260209291908290030181865afa158015610624573d6000803e3d6000fd5b505050506040513d602081101561063a57600080fd5b5051604080517f40c3544600000000000000000000000000000000000000000000000000000000815260006004820152905191955073ffffffffffffffffffffffffffffffffffffffff8316916340c35446916024808201926020929091908290030181865afa9250505080156106c357506040513d60208110156106be57600080fd5b505160015b6106cc5761081f565b8073ffffffffffffffffffffffffffffffffffffffff1663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa158015610717573d6000803e3d6000fd5b505050506040513d602081101561072d57600080fd5b5051945061073b8886610ab8565b8173ffffffffffffffffffffffffffffffffffffffff166340c3544660016040518263ffffffff1660e01b815260040180828152602001915050602060405180830381865afa9250505080156107a357506040513d602081101561079e57600080fd5b505160015b6107ac5761081d565b8073ffffffffffffffffffffffffffffffffffffffff1663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107f7573d6000803e3d6000fd5b505050506040513d602081101561080d57600080fd5b5051955061081b8987610ab8565b505b505b506001016104fe565b505050505050565b600081815b818110156108285784848281811061084f5761084f610c32565b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108b6573d6000803e3d6000fd5b505050506040513d60208110156108cc57600080fd5b505192508484828181106108e2576108e2610c32565b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c00007b0876040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801561096757600080fd5b505af115801561097b573d6000803e3d6000fd5b505050506109898684610ab8565b600101610835565b600083815b81811015610aae578484828181106109b0576109b0610c32565b9050602002013573ffffffffffffffffffffffffffffffffffffffff1692508686828181106109e1576109e1610c32565b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636b09169589856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b158015610a8457600080fd5b505af1158015610a98573d6000803e3d6000fd5b50505050610aa68884610ab8565b600101610996565b5050505050505050565b60018173ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381865afa158015610b26573d6000803e3d6000fd5b505050506040513d6020811015610b3c57600080fd5b50511115610bff577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166351e3f16083836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b158015610beb57600080fd5b505af1158015610828573d6000803e3d6000fd5b5050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea2646970667358221220e1d3a52cae085825017fa65f4505505a00eb6fda58fef20587f8561e46c541c264736f6c634300080a0033"; - -type ConvexV1ClaimZapAdapterConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: ConvexV1ClaimZapAdapterConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class ConvexV1ClaimZapAdapter__factory extends ContractFactory { - constructor(...args: ConvexV1ClaimZapAdapterConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - _creditManager: string, - _claimZap: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - _creditManager, - _claimZap, - overrides || {} - ) as Promise; - } - override getDeployTransaction( - _creditManager: string, - _claimZap: string, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction( - _creditManager, - _claimZap, - overrides || {} - ); - } - override attach(address: string): ConvexV1ClaimZapAdapter { - return super.attach(address) as ConvexV1ClaimZapAdapter; - } - override connect(signer: Signer): ConvexV1ClaimZapAdapter__factory { - return super.connect(signer) as ConvexV1ClaimZapAdapter__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): ConvexV1ClaimZapAdapterInterface { - return new utils.Interface(_abi) as ConvexV1ClaimZapAdapterInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): ConvexV1ClaimZapAdapter { - return new Contract( - address, - _abi, - signerOrProvider - ) as ConvexV1ClaimZapAdapter; - } -} diff --git a/src/types/factories/contracts/adapters/convex/ConvexV1_ClaimZap.sol/index.ts b/src/types/factories/contracts/adapters/convex/ConvexV1_ClaimZap.sol/index.ts deleted file mode 100644 index 30e81fd0..00000000 --- a/src/types/factories/contracts/adapters/convex/ConvexV1_ClaimZap.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { ConvexV1ClaimZapAdapter__factory } from "./ConvexV1ClaimZapAdapter__factory"; diff --git a/src/types/factories/contracts/adapters/convex/ConvexV1_StakedPositionToken.sol/ConvexStakedPositionToken__factory.ts b/src/types/factories/contracts/adapters/convex/ConvexV1_StakedPositionToken.sol/ConvexStakedPositionToken__factory.ts deleted file mode 100644 index 39412da7..00000000 --- a/src/types/factories/contracts/adapters/convex/ConvexV1_StakedPositionToken.sol/ConvexStakedPositionToken__factory.ts +++ /dev/null @@ -1,338 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - ConvexStakedPositionToken, - ConvexStakedPositionTokenInterface, -} from "../../../../../contracts/adapters/convex/ConvexV1_StakedPositionToken.sol/ConvexStakedPositionToken"; - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "_pool", - type: "address", - }, - { - internalType: "address", - name: "_lptoken", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "spender", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "Approval", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "Transfer", - type: "event", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "allowance", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "approve", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "decimals", - outputs: [ - { - internalType: "uint8", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "pool", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "symbol", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "totalSupply", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "transfer", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "transferFrom", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "underlying", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x60e06040523480156200001157600080fd5b5060405162000b0f38038062000b0f8339810160408190526200003491620002c1565b80816001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000074573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200009e919081019062000342565b604051602001620000b09190620003fa565b604051602081830303815290604052826001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015620000fe573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000128919081019062000342565b6040516020016200013a919062000441565b604051602081830303815290604052836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000188573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ae91906200046e565b8151620001c3906000906020850190620001fe565b508251620001d9906001906020860190620001fe565b5060ff1660a05250506001600160a01b039081166080529190911660c05250620004d7565b8280546200020c906200049a565b90600052602060002090601f0160209004810192826200023057600085556200027b565b82601f106200024b57805160ff19168380011785556200027b565b828001600101855582156200027b579182015b828111156200027b5782518255916020019190600101906200025e565b50620002899291506200028d565b5090565b5b808211156200028957600081556001016200028e565b80516001600160a01b0381168114620002bc57600080fd5b919050565b60008060408385031215620002d557600080fd5b620002e083620002a4565b9150620002f060208401620002a4565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200032c57818101518382015260200162000312565b838111156200033c576000848401525b50505050565b6000602082840312156200035557600080fd5b81516001600160401b03808211156200036d57600080fd5b818401915084601f8301126200038257600080fd5b815181811115620003975762000397620002f9565b604051601f8201601f19908116603f01168101908382118183101715620003c257620003c2620002f9565b81604052828152876020848701011115620003dc57600080fd5b620003ef8360208301602088016200030f565b979650505050505050565b7f436f6e766578205374616b656420506f736974696f6e20000000000000000000815260008251620004348160178501602087016200030f565b9190910160170192915050565b6273746b60e81b815260008251620004618160038501602087016200030f565b9190910160030192915050565b6000602082840312156200048157600080fd5b815160ff811681146200049357600080fd5b9392505050565b600181811c90821680620004af57607f821691505b60208210811415620004d157634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c0516105fa62000515600039600081816101170152610380015260006101900152600081816101c901526102a601526105fa6000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c8063313ce5671161008157806395d89b411161005b57806395d89b41146101fe578063a9059cbb146100ec578063dd62ed3e1461020657600080fd5b8063313ce5671461018b5780636f307dc3146101c457806370a08231146101eb57600080fd5b806316f0115b116100b257806316f0115b1461011257806318160ddd1461015e57806323b872dd1461017457600080fd5b806306fdde03146100ce578063095ea7b3146100ec575b600080fd5b6100d6610214565b6040516100e39190610400565b60405180910390f35b6101026100fa36600461049c565b600092915050565b60405190151581526020016100e3565b6101397f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100e3565b6101666102a2565b6040519081526020016100e3565b6101026101823660046104c6565b60009392505050565b6101b27f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020016100e3565b6101397f000000000000000000000000000000000000000000000000000000000000000081565b6101666101f9366004610502565b610338565b6100d66103f3565b6101666100fa366004610524565b6001805461022190610557565b80601f016020809104026020016040519081016040528092919081815260200182805461024d90610557565b801561029a5780601f1061026f5761010080835404028352916020019161029a565b820191906000526020600020905b81548152906001019060200180831161027d57829003601f168201915b505050505081565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561030f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061033391906105ab565b905090565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa1580156103c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103ed91906105ab565b92915050565b6000805461022190610557565b600060208083528351808285015260005b8181101561042d57858101830151858201604001528201610411565b8181111561043f576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461049757600080fd5b919050565b600080604083850312156104af57600080fd5b6104b883610473565b946020939093013593505050565b6000806000606084860312156104db57600080fd5b6104e484610473565b92506104f260208501610473565b9150604084013590509250925092565b60006020828403121561051457600080fd5b61051d82610473565b9392505050565b6000806040838503121561053757600080fd5b61054083610473565b915061054e60208401610473565b90509250929050565b600181811c9082168061056b57607f821691505b602082108114156105a5577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156105bd57600080fd5b505191905056fea2646970667358221220fe176aed8ca6f061a19c6044454b19be91cf49811a0c97d16b3850e05baf33fe64736f6c634300080a0033"; - -type ConvexStakedPositionTokenConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: ConvexStakedPositionTokenConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class ConvexStakedPositionToken__factory extends ContractFactory { - constructor(...args: ConvexStakedPositionTokenConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - _pool: string, - _lptoken: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - _pool, - _lptoken, - overrides || {} - ) as Promise; - } - override getDeployTransaction( - _pool: string, - _lptoken: string, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(_pool, _lptoken, overrides || {}); - } - override attach(address: string): ConvexStakedPositionToken { - return super.attach(address) as ConvexStakedPositionToken; - } - override connect(signer: Signer): ConvexStakedPositionToken__factory { - return super.connect(signer) as ConvexStakedPositionToken__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): ConvexStakedPositionTokenInterface { - return new utils.Interface(_abi) as ConvexStakedPositionTokenInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): ConvexStakedPositionToken { - return new Contract( - address, - _abi, - signerOrProvider - ) as ConvexStakedPositionToken; - } -} diff --git a/src/types/factories/contracts/adapters/convex/ConvexV1_StakedPositionToken.sol/index.ts b/src/types/factories/contracts/adapters/convex/ConvexV1_StakedPositionToken.sol/index.ts deleted file mode 100644 index 78584ab7..00000000 --- a/src/types/factories/contracts/adapters/convex/ConvexV1_StakedPositionToken.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { ConvexStakedPositionToken__factory } from "./ConvexStakedPositionToken__factory"; diff --git a/src/types/factories/contracts/adapters/convex/index.ts b/src/types/factories/contracts/adapters/convex/index.ts deleted file mode 100644 index 4b0fe946..00000000 --- a/src/types/factories/contracts/adapters/convex/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export * as convexV1BaseRewardPoolSol from "./ConvexV1_BaseRewardPool.sol"; -export * as convexV1BoosterSol from "./ConvexV1_Booster.sol"; -export * as convexV1ClaimZapSol from "./ConvexV1_ClaimZap.sol"; -export * as convexV1StakedPositionTokenSol from "./ConvexV1_StakedPositionToken.sol"; diff --git a/src/types/factories/contracts/adapters/curve/CurveV1_2.sol/CurveV1Adapter2Assets__factory.ts b/src/types/factories/contracts/adapters/curve/CurveV1_2.sol/CurveV1Adapter2Assets__factory.ts deleted file mode 100644 index e748c37b..00000000 --- a/src/types/factories/contracts/adapters/curve/CurveV1_2.sol/CurveV1Adapter2Assets__factory.ts +++ /dev/null @@ -1,1137 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - CurveV1Adapter2Assets, - CurveV1Adapter2AssetsInterface, -} from "../../../../../contracts/adapters/curve/CurveV1_2.sol/CurveV1Adapter2Assets"; - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "_creditManager", - type: "address", - }, - { - internalType: "address", - name: "_curvePool", - type: "address", - }, - { - internalType: "address", - name: "_lp_token", - type: "address", - }, - { - internalType: "address", - name: "_metapoolBase", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "IncorrectIndexException", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "TokenIsNotInAllowedList", - type: "error", - }, - { - inputs: [], - name: "ZeroAddressException", - type: "error", - }, - { - inputs: [], - name: "A", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "A_precise", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "_gearboxAdapterType", - outputs: [ - { - internalType: "enum AdapterType", - name: "", - type: "uint8", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "_gearboxAdapterVersion", - outputs: [ - { - internalType: "uint16", - name: "", - type: "uint16", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "uint256", - name: "rateMinRAY", - type: "uint256", - }, - ], - name: "add_all_liquidity_one_coin", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256[2]", - name: "amounts", - type: "uint256[2]", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "add_liquidity", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "uint256", - name: "minAmount", - type: "uint256", - }, - ], - name: "add_liquidity_one_coin", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "admin", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "i", - type: "uint256", - }, - ], - name: "admin_balances", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "admin_fee", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "owner", - type: "address", - }, - { - internalType: "address", - name: "spender", - type: "address", - }, - ], - name: "allowance", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - ], - name: "balances", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "i", - type: "uint256", - }, - ], - name: "balances", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "block_timestamp_last", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256[2]", - name: "_amounts", - type: "uint256[2]", - }, - { - internalType: "bool", - name: "_is_deposit", - type: "bool", - }, - ], - name: "calc_token_amount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_burn_amount", - type: "uint256", - }, - { - internalType: "int128", - name: "i", - type: "int128", - }, - ], - name: "calc_withdraw_one_coin", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - ], - name: "coins", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "i", - type: "uint256", - }, - ], - name: "coins", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditFacade", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditManager", - outputs: [ - { - internalType: "contract ICreditManagerV2", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "decimals", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "int128", - name: "j", - type: "int128", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "exchange", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "int128", - name: "j", - type: "int128", - }, - { - internalType: "uint256", - name: "rateMinRAY", - type: "uint256", - }, - ], - name: "exchange_all", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "int128", - name: "j", - type: "int128", - }, - { - internalType: "uint256", - name: "rateMinRAY", - type: "uint256", - }, - ], - name: "exchange_all_underlying", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "int128", - name: "j", - type: "int128", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "exchange_underlying", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "fee", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "future_A", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "future_A_time", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "get_balances", - outputs: [ - { - internalType: "uint256[2]", - name: "", - type: "uint256[2]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "int128", - name: "j", - type: "int128", - }, - { - internalType: "uint256", - name: "dx", - type: "uint256", - }, - ], - name: "get_dy", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "int128", - name: "j", - type: "int128", - }, - { - internalType: "uint256", - name: "dx", - type: "uint256", - }, - ], - name: "get_dy_underlying", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "get_previous_balances", - outputs: [ - { - internalType: "uint256[2]", - name: "", - type: "uint256[2]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "get_price_cumulative_last", - outputs: [ - { - internalType: "uint256[2]", - name: "", - type: "uint256[2]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256[2]", - name: "_first_balances", - type: "uint256[2]", - }, - { - internalType: "uint256[2]", - name: "_last_balances", - type: "uint256[2]", - }, - { - internalType: "uint256", - name: "_time_elapsed", - type: "uint256", - }, - ], - name: "get_twap_balances", - outputs: [ - { - internalType: "uint256[2]", - name: "", - type: "uint256[2]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "get_virtual_price", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "initial_A", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "initial_A_time", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "lp_token", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "metapoolBase", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "nCoins", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "uint256", - name: "minRateRAY", - type: "uint256", - }, - ], - name: "remove_all_liquidity_one_coin", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256[2]", - name: "", - type: "uint256[2]", - }, - ], - name: "remove_liquidity", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256[2]", - name: "amounts", - type: "uint256[2]", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "remove_liquidity_imbalance", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "remove_liquidity_one_coin", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "symbol", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "targetContract", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "token", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "token0", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "token1", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "token2", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "token3", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "totalSupply", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "underlying0", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "underlying1", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "underlying2", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "underlying3", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - ], - name: "underlying_coins", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "i", - type: "uint256", - }, - ], - name: "underlying_coins", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x6102606040523480156200001257600080fd5b5060405162005f7e38038062005f7e833981016040819052620000359162000ba4565b83838383600284846001600160a01b03821615806200005b57506001600160a01b038116155b156200007a57604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038216608081905260408051632f7a188160e01b81529051632f7a1881916004808201926020929091908290030181865afa158015620000c5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000eb919062000c01565b6001600160a01b0390811660a05290811660c05260016000558416151590506200012857604051635919af9760e11b815260040160405180910390fd5b608051604051630f67c5bd60e41b81526001600160a01b0385811660048301529091169063f67c5bd090602401602060405180830381865afa15801562000173573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000199919062000c26565b620001c757604051634c607af960e11b81526001600160a01b03841660048201526024015b60405180910390fd5b6001600160a01b038084166101e081905261020052821661022052610240819052620001f460006200090a565b6001600160a01b031660e0526200020c60016200090a565b6001600160a01b0316610100526200022560026200090a565b6001600160a01b0316610120526200023e60036200090a565b6001600160a01b031661014052620002576000620009fd565b6001600160a01b031661016052620002706001620009fd565b6001600160a01b031661018052620002896002620009fd565b6001600160a01b03166101a052620002a26003620009fd565b6001600160a01b039081166101c05260e051161580620002cc5750610100516001600160a01b0316155b15620002eb57604051635919af9760e11b815260040160405180910390fd5b600281118015620003065750610120516001600160a01b0316155b156200032557604051635919af9760e11b815260040160405180910390fd5b600381118015620003405750610140516001600160a01b0316155b156200035f57604051635919af9760e11b815260040160405180910390fd5b60805160e051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620003ac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003d2919062000c26565b620004005760e051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b60805161010051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa1580156200044e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000474919062000c26565b620004a35761010051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b60028111801562000525575060805161012051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620004fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000523919062000c26565b155b15620005555761012051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b600381118015620005d7575060805161014051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620005af573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005d5919062000c26565b155b15620006075761014051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b610160516001600160a01b03161580159062000694575060805161016051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa1580156200066c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000692919062000c26565b155b15620006c45761016051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b610180516001600160a01b03161580159062000751575060805161018051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa15801562000729573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200074f919062000c26565b155b15620007815761018051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b6101a0516001600160a01b0316158015906200080e57506080516101a051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620007e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200080c919062000c26565b155b156200083e576101a051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b6101c0516001600160a01b031615801590620008cb57506080516101c051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620008a3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008c9919062000c26565b155b15620008fb576101c051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b50505050505050505062000c66565b60c05160405163c661065760e01b8152600481018390526000916001600160a01b03169063c661065790602401602060405180830381865afa92505050801562000973575060408051601f3d908101601f19168201909252620009709181019062000c01565b60015b6200097e5762000984565b92915050565b60c05160405163046e8dd760e31b8152600f84900b60048201526001600160a01b03909116906323746eb8906024015b602060405180830381865afa925050508015620009f0575060408051601f3d908101601f19168201909252620009ed9181019062000c01565b60015b6200097e57506000919050565b610220516000906001600160a01b03161562000a1e576200097e8262000ac0565b60c051604051630b9947eb60e41b8152600481018490526001600160a01b039091169063b9947eb090602401602060405180830381865afa92505050801562000a86575060408051601f3d908101601f1916820190925262000a839181019062000c01565b60015b6200097e5760c051604051635b9cca9f60e11b8152600f84900b60048201526001600160a01b039091169063b739953e90602401620009b4565b60008162000ad4576200097e600062000b17565b610220516001600160a01b031663c661065762000af360018562000c40565b6040518263ffffffff1660e01b8152600401620009b491815260200190565b919050565b600081600f0b6000141562000b2b575060e0515b81600f0b6001141562000b3e5750610100515b81600f0b6002141562000b515750610120515b81600f0b6003141562000b645750610140515b6001600160a01b03811662000b12576040516334769e6f60e21b815260040160405180910390fd5b80516001600160a01b038116811462000b1257600080fd5b6000806000806080858703121562000bbb57600080fd5b62000bc68562000b8c565b935062000bd66020860162000b8c565b925062000be66040860162000b8c565b915062000bf66060860162000b8c565b905092959194509250565b60006020828403121562000c1457600080fd5b62000c1f8262000b8c565b9392505050565b60006020828403121562000c3957600080fd5b5051919050565b60008282101562000c6157634e487b7160e01b600052601160045260246000fd5b500390565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e051610200516102205161024051614f9b62000fe36000396000818161077001528181613503015281816135f501528181613735015281816138ec0152613a06015260006105f101526000818161068801528181611ec70152818161238c015281816126b3015281816129580152818161303a01526130d8015260006108a701526000818161059c0152612a5a0152600081816103d40152612a2b01526000818161061801526129fc0152600081816106af01526129cd015260008181610870015281816128320152818161365f01528181613f5e01526143f20152600081816104fd015281816128030152818161356d01528181613e8e01526142d60152600081816107da015281816127d40152818161347901528181613dbe01526141ba01526000818161045d015281816127a5015281816133ad01528181613cee015261409e01526000818161072201528181610914015281816109e101528181610a7101528181610b6901528181610cd601528181610d5301528181610dea01528181610e7a0152818161128801528181611300015281816114d801528181611572015281816115ba015281816116e101528181611729015281816117da0152818161180f01528181611af801528181611bef01528181611c6701528181611d0c01528181611f1101528181611fc901528181611ffe015281816120990152818161240d01528181612448015281816124b50152818161254601528181612c7801528181612d9701528181612e710152818161407601528181614192015281816142ae015281816143ca015261451201526000818161052401528181612ae3015281816145b90152614693015260008181610749015281816110180152818161191a01528181611e5301528181612232015281816125e0015281816126db015281816128d001528181612cce01528181612d6801528181612ec701528181612f6f01528181613231015281816132e8015281816133d8015281816134a1015281816135950152818161368701528181613c2101528181613d1601528181613de601528181613eb601528181613f86015281816140ec015281816142080152818161432401528181614440015281816144e3015281816146230152818161471b015281816147cf01526148790152614f9b6000f3fe608060405234801561001057600080fd5b50600436106103a45760003560e01c806378aa73a4116101e9578063ce30bbdb1161010f578063e3103273116100ad578063f446c1d01161007c578063f446c1d014610892578063f851a4401461089a578063fc0c546a146108a2578063fee3f7f9146108c957600080fd5b8063e310327314610832578063ec026ca714610845578063ed8e84f314610858578063ef14101e1461086b57600080fd5b8063d96c7fce116100e9578063d96c7fce146107fc578063dd62ed3e14610804578063ddca3f4314610817578063e2e7d2641461081f57600080fd5b8063ce30bbdb146107b3578063cf023dd0146107c2578063d21220a7146107d557600080fd5b8063b739953e11610187578063c12c21c011610156578063c12c21c014610744578063c21ee1621461076b578063c661065714610792578063cc2b27d7146107a057600080fd5b8063b739953e146106f4578063b9947eb014610707578063bb7b8b8014610715578063bd90df701461071d57600080fd5b80638ba51dfc116101c35780638ba51dfc146106aa57806395d89b41146106d1578063a6417ed6146106d9578063b4b577ad146106ec57600080fd5b806378aa73a41461065557806379bea6641461067057806382c630661461068357600080fd5b80632f7a1881116102ce57806357d788751161026c57806364a89bca1161023b57806364a89bca146105ec5780636e1d82711461061357806370a082311461063a57806376a2f0f01461064d57600080fd5b806357d78875146105975780635b36389c146105be5780635e0d443f146105d157806363543f06146105e457600080fd5b80633df02124116102a85780633df02124146105615780634469e30e146105745780634903b0d11461057c5780635409491a1461058f57600080fd5b80632f7a18811461051f578063313ce5671461054657806333d2ebf21461054e57600080fd5b806314052288116103465780631af4de83116103155780631af4de83146104ca5780632081066c146104dd57806323746eb8146104e557806325be124e146104f857600080fd5b8063140522881461049f57806314f05979146104a757806318160ddd146104af5780631a4d01d2146104b757600080fd5b806307211ef71161038257806307211ef7146104305780630b4c7e4d146104435780630dfe1681146104585780630f6ba8e31461047f57600080fd5b8063065a80d8146103a957806306871163146103cf57806306fdde031461041b575b600080fd5b6103bc6103b736600461490d565b6108d1565b6040519081526020015b60405180910390f35b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016103c6565b610423610a6d565b6040516103c6919061499e565b6103bc61043e3660046149b1565b610b25565b6104566104513660046149fe565b610bf4565b005b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b61049261048d366004614a29565b610c91565b6040516103c69190614a67565b6103bc610d4f565b610492610de0565b6103bc610e76565b6104566104c5366004614a98565b610ee3565b6104566104d83660046149b1565b610f76565b6103bc611284565b6103f66104f336600461490d565b6112f1565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc6112fc565b61045661055c366004614abd565b611369565b61045661056f366004614ae7565b6113fd565b6104926114ce565b6103bc61058a366004614b29565b611540565b6103bc6115b6565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6104566105cc366004614b42565b611623565b6103bc6105df3660046149b1565b61169d565b6103bc611725565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc610648366004614b91565b611792565b6103bc61180b565b61065d600281565b60405161ffff90911681526020016103c6565b61045661067e3660046149b1565b611878565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b610423611af4565b6104566106e7366004614ae7565b611b61565b6103bc611beb565b6103f661070236600461490d565b611c58565b6103f6610702366004614b29565b6103bc611c63565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc7f000000000000000000000000000000000000000000000000000000000000000081565b6103f66104f3366004614b29565b6103bc6107ae366004614bae565b611cd0565b60056040516103c69190614bd1565b6104566107d0366004614a98565b611d8d565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b610492611f07565b6103bc610812366004614c12565b611f79565b6103bc611ffa565b6103bc61082d366004614b29565b612067565b6104566108403660046149fe565b6120dd565b610456610853366004614abd565b61216c565b6103bc610866366004614c4b565b6123cd565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc612444565b6103f66124b1565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc612542565b6040517f4903b0d10000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff821660048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634903b0d1906024015b602060405180830381865afa9250505080156109ab575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526109a891810190614c7d565b60015b610a62576040517f065a80d8000000000000000000000000000000000000000000000000000000008152600f83900b60048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063065a80d8906024015b602060405180830381865afa158015610a3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a629190614c7d565b92915050565b919050565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015610ada573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b209190810190614d57565b905090565b6040517f07211ef7000000000000000000000000000000000000000000000000000000008152600f84810b600483015283900b6024820152604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906307211ef7906064015b602060405180830381865afa158015610bc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bea9190614c7d565b90505b9392505050565b60026000541415610c66576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b60026000908155610c88906001843581109160208601359190911190806125af565b50506001600055565b610c996148dd565b6040517f0f6ba8e300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690630f6ba8e390610d0f90879087908790600401614da8565b6040805180830381865afa158015610d2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bea9190614dcf565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663140522886040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b209190614c7d565b610de86148dd565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166314f059796040518163ffffffff1660e01b81526004016040805180830381865afa158015610e52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b209190614dcf565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b60026000541415610f50576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b60026000908155610f6083612794565b9050610f6b8161289f565b505060016000555050565b60026000541415610fe3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611074573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110989190614e4f565b905060006110a5856129bc565b905060006110b2856129bc565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529192506000918416906370a0823190602401602060405180830381865afa158015611124573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111489190614c7d565b90506001811115611276577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce800000061118e8784614e6c565b6111989190614ed0565b604051600f8a810b602483015289900b60448201526064810184905260848101829052909150611273908690869086907fa6417ed6000000000000000000000000000000000000000000000000000000009060a4015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152600180612ac6565b50505b505060016000555050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632081066c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b6000610a6282612794565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b600260005414156113d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b600260009081556113e683612794565b90506113f3838284612f3e565b5050600160005550565b6002600054141561146a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b6002600090815561147a85612794565b9050600061148785612794565b905061127682826000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052506001935091506131e89050565b6114d66148dd565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16634469e30e6040518163ffffffff1660e01b81526004016040805180830381865afa158015610e52573d6000803e3d6000fd5b6040517f4903b0d1000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634903b0d190602401610954565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635409491a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b60026000541415611690576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b6002600055610c886132b7565b6040517f5e0d443f000000000000000000000000000000000000000000000000000000008152600f84810b600483015283900b6024820152604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635e0d443f90606401610ba9565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166363543f066040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401610a21565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166376a2f0f06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b600260005414156118e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611976573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061199a9190614e4f565b905060006119a785612794565b905060006119b485612794565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529192506000918416906370a0823190602401602060405180830381865afa158015611a26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a4a9190614c7d565b90506001811115611276577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce8000000611a908784614e6c565b611a9a9190614ed0565b604051600f8a810b602483015289900b60448201526064810184905260848101829052909150611273908690869086907f3df02124000000000000000000000000000000000000000000000000000000009060a4016111ee565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610ada573d6000803e3d6000fd5b60026000541415611bce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b60026000908155611bde856129bc565b90506000611487856129bc565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b4b577ad6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b6000610a62826129bc565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb7b8b806040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b6040517fcc2b27d700000000000000000000000000000000000000000000000000000000815260048101839052600f82900b60248201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063cc2b27d7906044015b602060405180830381865afa158015611d69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bed9190614c7d565b60026000541415611dfa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b60026000908155611e0a83612794565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611e9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ebe9190614e4f565b9050611efa81837f0000000000000000000000000000000000000000000000000000000000000000611ef1888a89613731565b60016000612ac6565b5050600160005550505050565b611f0f6148dd565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d96c7fce6040518163ffffffff1660e01b81526004016040805180830381865afa158015610e52573d6000803e3d6000fd5b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063dd62ed3e90604401611d4c565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b6040517fe2e7d264000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e2e7d26490602401610a21565b6002600054141561214a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b60026000908155610c8890600184358110916020860135919091119080613bf0565b600260005414156121d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b600260009081556121e983612794565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015612279573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061229d9190614e4f565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000918416906370a0823190602401602060405180830381865afa15801561230f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123339190614c7d565b905060018111156123c1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce80000006123798684614e6c565b6123839190614ed0565b90506123be83857f00000000000000000000000000000000000000000000000000000000000000006123b68a8787613731565b600180612ac6565b50505b50506001600055505050565b6040517fed8e84f300000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063ed8e84f390611d4c9086908690600401614f0b565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f446c1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa15801561251e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b209190614e4f565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fee3f7f96040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa15801561263c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126609190614e4f565b905061266e8585858561402d565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561271f57600080fd5b505af1158015612733573d6000803e3d6000fd5b505050506127776000368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506144a392505050565b506127848585858561402d565b61278d816145a1565b5050505050565b600081600f0b600014156127c557507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b600114156127f457507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6002141561282357507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6003141561285257507f00000000000000000000000000000000000000000000000000000000000000005b73ffffffffffffffffffffffffffffffffffffffff8116610a68576040517fd1da79bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa15801561292c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129509190614e4f565b90506129b7817f0000000000000000000000000000000000000000000000000000000000000000846000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509250829150612ac69050565b505050565b600081600f0b600014156129ed57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b60011415612a1c57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b60021415612a4b57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6003141561285257507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff8116610a68576040517fd1da79bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606000803373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614612c2f576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301528916906370a0823190602401602060405180830381865afa158015612b74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b989190614c7d565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152919350908816906370a0823190602401602060405180830381865afa158015612c08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c2c9190614c7d565b90505b8415612d2b576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612d1257600080fd5b505af1158015612d26573d6000803e3d6000fd5b505050505b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a90612dc19033907f0000000000000000000000000000000000000000000000000000000000000000908b90600401614f23565b6000604051808303816000875af1158015612de0573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052612e269190810190614d57565b92508415612f24576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612f0b57600080fd5b505af1158015612f1f573d6000803e3d6000fd5b505050505b612f3289898985858961467b565b50509695505050505050565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612fcb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fef9190614e4f565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000917f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015613081573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130a59190614c7d565b9050600181111561278d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016131e0827f0000000000000000000000000000000000000000000000000000000000000000867f1a4d01d200000000000000000000000000000000000000000000000000000000858a6b033b2e3c9fd0803ce80000006131328b84614e6c565b61313c9190614ed0565b6040516024810193909352600f9190910b60448301526064820152608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915260006001612ac6565b505050505050565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015260609060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015613278573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061329c9190614e4f565b90506132ac818888888888612ac6565b979650505050505050565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015613344573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133689190614e4f565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301529192507f0000000000000000000000000000000000000000000000000000000000000000909116906351e3f16090604401600060405180830381600087803b15801561341e57600080fd5b505af1158015613432573d6000803e3d6000fd5b50506040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f00000000000000000000000000000000000000000000000000000000000000001692506351e3f1609150604401600060405180830381600087803b1580156134e757600080fd5b505af11580156134fb573d6000803e3d6000fd5b5050505060027f000000000000000000000000000000000000000000000000000000000000000011156136e4576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156135d957600080fd5b505af11580156135ed573d6000803e3d6000fd5b5050505060037f000000000000000000000000000000000000000000000000000000000000000011156136e4576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156136cb57600080fd5b505af11580156136df573d6000803e3d6000fd5b505050505b6137246000368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506144a392505050565b5061372e816145a1565b50565b60607f0000000000000000000000000000000000000000000000000000000000000000600214156138ea5783600f0b600014613827576040516000602482015260448101849052606481018390527f0b4c7e4d00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526138e3565b6040516024810184905260006044820152606481018390527f0b4c7e4d00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091525b9050610bed565b7f000000000000000000000000000000000000000000000000000000000000000060031415613a045783600f0b6000146139bb5783600f0b60011461397257604051600060248201819052604482015260648101849052608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a4016137a5565b604051600060248201819052604482018590526064820152608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a4016137a5565b604051602481018490526000604482018190526064820152608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401613865565b7f000000000000000000000000000000000000000000000000000000000000000060041415613b8e5783600f0b600014613b3e5783600f0b600114613aee5783600f0b600214613a9e576040516000602482018190526044820181905260648201526084810184905260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c4016137a5565b6040516000602482018190526044820181905260648201859052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c4016137a5565b6040516000602482018190526044820185905260648201819052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c4016137a5565b6040516024810184905260006044820181905260648201819052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613865565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f496e636f7272656374206e436f696e73000000000000000000000000000000006044820152606401610c5d565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015613c7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ca19190614e4f565b90508415613d73576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015613d5a57600080fd5b505af1158015613d6e573d6000803e3d6000fd5b505050505b8315613e43576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015613e2a57600080fd5b505af1158015613e3e573d6000803e3d6000fd5b505050505b8215613f13576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015613efa57600080fd5b505af1158015613f0e573d6000803e3d6000fd5b505050505b8115613fe3576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015613fca57600080fd5b505af1158015613fde573d6000803e3d6000fd5b505050505b6140236000368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506144a392505050565b5061278d816145a1565b8315614149576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561413057600080fd5b505af1158015614144573d6000803e3d6000fd5b505050505b8215614265576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561424c57600080fd5b505af1158015614260573d6000803e3d6000fd5b505050505b8115614381576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561436857600080fd5b505af115801561437c573d6000803e3d6000fd5b505050505b801561449d576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561448457600080fd5b505af1158015614498573d6000803e3d6000fd5b505050505b50505050565b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815260609073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a9061453c9033907f0000000000000000000000000000000000000000000000000000000000000000908790600401614f23565b6000604051808303816000875af115801561455b573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610a629190810190614d57565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461372e576040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b15801561466757600080fd5b505af115801561278d573d6000803e3d6000fd5b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461477c576040517f654a9eda00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528681166024830152858116604483015260648201859052608482018490527f0000000000000000000000000000000000000000000000000000000000000000169063654a9eda9060a401600060405180830381600087803b15801561475f57600080fd5b505af1158015614773573d6000803e3d6000fd5b505050506131e0565b801561482c576040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015286811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b15801561481357600080fd5b505af1158015614827573d6000803e3d6000fd5b505050505b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015285811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156148bd57600080fd5b505af11580156148d1573d6000803e3d6000fd5b50505050505050505050565b60405180604001604052806002906020820280368337509192915050565b8035600f81900b8114610a6857600080fd5b60006020828403121561491f57600080fd5b610bed826148fb565b60005b8381101561494357818101518382015260200161492b565b8381111561449d5750506000910152565b6000815180845261496c816020860160208601614928565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610bed6020830184614954565b6000806000606084860312156149c657600080fd5b6149cf846148fb565b92506149dd602085016148fb565b9150604084013590509250925092565b8060408101831015610a6257600080fd5b60008060608385031215614a1157600080fd5b614a1b84846149ed565b946040939093013593505050565b600080600060a08486031215614a3e57600080fd5b614a4885856149ed565b9250614a5785604086016149ed565b9150608084013590509250925092565b60408101818360005b6002811015614a8f578151835260209283019290910190600101614a70565b50505092915050565b600080600060608486031215614aad57600080fd5b833592506149dd602085016148fb565b60008060408385031215614ad057600080fd5b614ad9836148fb565b946020939093013593505050565b60008060008060808587031215614afd57600080fd5b614b06856148fb565b9350614b14602086016148fb565b93969395505050506040820135916060013590565b600060208284031215614b3b57600080fd5b5035919050565b60008060608385031215614b5557600080fd5b82359150614b6684602085016149ed565b90509250929050565b73ffffffffffffffffffffffffffffffffffffffff8116811461372e57600080fd5b600060208284031215614ba357600080fd5b8135610bed81614b6f565b60008060408385031215614bc157600080fd5b82359150614b66602084016148fb565b6020810160118310614c0c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60008060408385031215614c2557600080fd5b8235614c3081614b6f565b91506020830135614c4081614b6f565b809150509250929050565b60008060608385031215614c5e57600080fd5b614c6884846149ed565b915060408301358015158114614c4057600080fd5b600060208284031215614c8f57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff80841115614ce057614ce0614c96565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715614d2657614d26614c96565b81604052809350858152868686011115614d3f57600080fd5b614d4d866020830187614928565b5050509392505050565b600060208284031215614d6957600080fd5b815167ffffffffffffffff811115614d8057600080fd5b8201601f81018413614d9157600080fd5b614da084825160208401614cc5565b949350505050565b60a08101604085833760408201600081526040858237506080919091019190915292915050565b600060408284031215614de157600080fd5b82601f830112614df057600080fd5b6040516040810181811067ffffffffffffffff82111715614e1357614e13614c96565b8060405250806040840185811115614e2a57600080fd5b845b81811015614e44578051835260209283019201614e2c565b509195945050505050565b600060208284031215614e6157600080fd5b8151610bed81614b6f565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ecb577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500290565b600082614f06577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60608101604084833791151560409190910152919050565b600073ffffffffffffffffffffffffffffffffffffffff808616835280851660208401525060606040830152614f5c6060830184614954565b9594505050505056fea26469706673582212205dd1b4208756e7993c5cfaf271be99123f9b37ebc97bdd8fd152eac9cd1e945564736f6c634300080a0033"; - -type CurveV1Adapter2AssetsConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: CurveV1Adapter2AssetsConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class CurveV1Adapter2Assets__factory extends ContractFactory { - constructor(...args: CurveV1Adapter2AssetsConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - _creditManager: string, - _curvePool: string, - _lp_token: string, - _metapoolBase: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - _creditManager, - _curvePool, - _lp_token, - _metapoolBase, - overrides || {} - ) as Promise; - } - override getDeployTransaction( - _creditManager: string, - _curvePool: string, - _lp_token: string, - _metapoolBase: string, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction( - _creditManager, - _curvePool, - _lp_token, - _metapoolBase, - overrides || {} - ); - } - override attach(address: string): CurveV1Adapter2Assets { - return super.attach(address) as CurveV1Adapter2Assets; - } - override connect(signer: Signer): CurveV1Adapter2Assets__factory { - return super.connect(signer) as CurveV1Adapter2Assets__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): CurveV1Adapter2AssetsInterface { - return new utils.Interface(_abi) as CurveV1Adapter2AssetsInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): CurveV1Adapter2Assets { - return new Contract( - address, - _abi, - signerOrProvider - ) as CurveV1Adapter2Assets; - } -} diff --git a/src/types/factories/contracts/adapters/curve/CurveV1_2.sol/index.ts b/src/types/factories/contracts/adapters/curve/CurveV1_2.sol/index.ts deleted file mode 100644 index 58fd82db..00000000 --- a/src/types/factories/contracts/adapters/curve/CurveV1_2.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { CurveV1Adapter2Assets__factory } from "./CurveV1Adapter2Assets__factory"; diff --git a/src/types/factories/contracts/adapters/curve/CurveV1_3.sol/CurveV1Adapter3Assets__factory.ts b/src/types/factories/contracts/adapters/curve/CurveV1_3.sol/CurveV1Adapter3Assets__factory.ts deleted file mode 100644 index 1a959328..00000000 --- a/src/types/factories/contracts/adapters/curve/CurveV1_3.sol/CurveV1Adapter3Assets__factory.ts +++ /dev/null @@ -1,1137 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - CurveV1Adapter3Assets, - CurveV1Adapter3AssetsInterface, -} from "../../../../../contracts/adapters/curve/CurveV1_3.sol/CurveV1Adapter3Assets"; - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "_creditManager", - type: "address", - }, - { - internalType: "address", - name: "_curvePool", - type: "address", - }, - { - internalType: "address", - name: "_lp_token", - type: "address", - }, - { - internalType: "address", - name: "_metapoolBase", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "IncorrectIndexException", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "TokenIsNotInAllowedList", - type: "error", - }, - { - inputs: [], - name: "ZeroAddressException", - type: "error", - }, - { - inputs: [], - name: "A", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "A_precise", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "_gearboxAdapterType", - outputs: [ - { - internalType: "enum AdapterType", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "_gearboxAdapterVersion", - outputs: [ - { - internalType: "uint16", - name: "", - type: "uint16", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "uint256", - name: "rateMinRAY", - type: "uint256", - }, - ], - name: "add_all_liquidity_one_coin", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256[3]", - name: "amounts", - type: "uint256[3]", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "add_liquidity", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "uint256", - name: "minAmount", - type: "uint256", - }, - ], - name: "add_liquidity_one_coin", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "admin", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "i", - type: "uint256", - }, - ], - name: "admin_balances", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "admin_fee", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "owner", - type: "address", - }, - { - internalType: "address", - name: "spender", - type: "address", - }, - ], - name: "allowance", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - ], - name: "balances", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "i", - type: "uint256", - }, - ], - name: "balances", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "block_timestamp_last", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256[3]", - name: "_amounts", - type: "uint256[3]", - }, - { - internalType: "bool", - name: "_is_deposit", - type: "bool", - }, - ], - name: "calc_token_amount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_burn_amount", - type: "uint256", - }, - { - internalType: "int128", - name: "i", - type: "int128", - }, - ], - name: "calc_withdraw_one_coin", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - ], - name: "coins", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "i", - type: "uint256", - }, - ], - name: "coins", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditFacade", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditManager", - outputs: [ - { - internalType: "contract ICreditManagerV2", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "decimals", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "int128", - name: "j", - type: "int128", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "exchange", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "int128", - name: "j", - type: "int128", - }, - { - internalType: "uint256", - name: "rateMinRAY", - type: "uint256", - }, - ], - name: "exchange_all", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "int128", - name: "j", - type: "int128", - }, - { - internalType: "uint256", - name: "rateMinRAY", - type: "uint256", - }, - ], - name: "exchange_all_underlying", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "int128", - name: "j", - type: "int128", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "exchange_underlying", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "fee", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "future_A", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "future_A_time", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "get_balances", - outputs: [ - { - internalType: "uint256[3]", - name: "", - type: "uint256[3]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "int128", - name: "j", - type: "int128", - }, - { - internalType: "uint256", - name: "dx", - type: "uint256", - }, - ], - name: "get_dy", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "int128", - name: "j", - type: "int128", - }, - { - internalType: "uint256", - name: "dx", - type: "uint256", - }, - ], - name: "get_dy_underlying", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "get_previous_balances", - outputs: [ - { - internalType: "uint256[3]", - name: "", - type: "uint256[3]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "get_price_cumulative_last", - outputs: [ - { - internalType: "uint256[3]", - name: "", - type: "uint256[3]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256[3]", - name: "_first_balances", - type: "uint256[3]", - }, - { - internalType: "uint256[3]", - name: "_last_balances", - type: "uint256[3]", - }, - { - internalType: "uint256", - name: "_time_elapsed", - type: "uint256", - }, - ], - name: "get_twap_balances", - outputs: [ - { - internalType: "uint256[3]", - name: "", - type: "uint256[3]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "get_virtual_price", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "initial_A", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "initial_A_time", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "lp_token", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "metapoolBase", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "nCoins", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "uint256", - name: "minRateRAY", - type: "uint256", - }, - ], - name: "remove_all_liquidity_one_coin", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256[3]", - name: "", - type: "uint256[3]", - }, - ], - name: "remove_liquidity", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256[3]", - name: "amounts", - type: "uint256[3]", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "remove_liquidity_imbalance", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "remove_liquidity_one_coin", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "symbol", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "targetContract", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "token", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "token0", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "token1", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "token2", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "token3", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "totalSupply", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "underlying0", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "underlying1", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "underlying2", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "underlying3", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - ], - name: "underlying_coins", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "i", - type: "uint256", - }, - ], - name: "underlying_coins", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x6102606040523480156200001257600080fd5b5060405162005f8c38038062005f8c833981016040819052620000359162000ba4565b83838383600384846001600160a01b03821615806200005b57506001600160a01b038116155b156200007a57604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038216608081905260408051632f7a188160e01b81529051632f7a1881916004808201926020929091908290030181865afa158015620000c5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000eb919062000c01565b6001600160a01b0390811660a05290811660c05260016000558416151590506200012857604051635919af9760e11b815260040160405180910390fd5b608051604051630f67c5bd60e41b81526001600160a01b0385811660048301529091169063f67c5bd090602401602060405180830381865afa15801562000173573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000199919062000c26565b620001c757604051634c607af960e11b81526001600160a01b03841660048201526024015b60405180910390fd5b6001600160a01b038084166101e081905261020052821661022052610240819052620001f460006200090a565b6001600160a01b031660e0526200020c60016200090a565b6001600160a01b0316610100526200022560026200090a565b6001600160a01b0316610120526200023e60036200090a565b6001600160a01b031661014052620002576000620009fd565b6001600160a01b031661016052620002706001620009fd565b6001600160a01b031661018052620002896002620009fd565b6001600160a01b03166101a052620002a26003620009fd565b6001600160a01b039081166101c05260e051161580620002cc5750610100516001600160a01b0316155b15620002eb57604051635919af9760e11b815260040160405180910390fd5b600281118015620003065750610120516001600160a01b0316155b156200032557604051635919af9760e11b815260040160405180910390fd5b600381118015620003405750610140516001600160a01b0316155b156200035f57604051635919af9760e11b815260040160405180910390fd5b60805160e051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620003ac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003d2919062000c26565b620004005760e051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b60805161010051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa1580156200044e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000474919062000c26565b620004a35761010051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b60028111801562000525575060805161012051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620004fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000523919062000c26565b155b15620005555761012051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b600381118015620005d7575060805161014051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620005af573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005d5919062000c26565b155b15620006075761014051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b610160516001600160a01b03161580159062000694575060805161016051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa1580156200066c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000692919062000c26565b155b15620006c45761016051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b610180516001600160a01b03161580159062000751575060805161018051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa15801562000729573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200074f919062000c26565b155b15620007815761018051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b6101a0516001600160a01b0316158015906200080e57506080516101a051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620007e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200080c919062000c26565b155b156200083e576101a051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b6101c0516001600160a01b031615801590620008cb57506080516101c051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620008a3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008c9919062000c26565b155b15620008fb576101c051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b50505050505050505062000c66565b60c05160405163c661065760e01b8152600481018390526000916001600160a01b03169063c661065790602401602060405180830381865afa92505050801562000973575060408051601f3d908101601f19168201909252620009709181019062000c01565b60015b6200097e5762000984565b92915050565b60c05160405163046e8dd760e31b8152600f84900b60048201526001600160a01b03909116906323746eb8906024015b602060405180830381865afa925050508015620009f0575060408051601f3d908101601f19168201909252620009ed9181019062000c01565b60015b6200097e57506000919050565b610220516000906001600160a01b03161562000a1e576200097e8262000ac0565b60c051604051630b9947eb60e41b8152600481018490526001600160a01b039091169063b9947eb090602401602060405180830381865afa92505050801562000a86575060408051601f3d908101601f1916820190925262000a839181019062000c01565b60015b6200097e5760c051604051635b9cca9f60e11b8152600f84900b60048201526001600160a01b039091169063b739953e90602401620009b4565b60008162000ad4576200097e600062000b17565b610220516001600160a01b031663c661065762000af360018562000c40565b6040518263ffffffff1660e01b8152600401620009b491815260200190565b919050565b600081600f0b6000141562000b2b575060e0515b81600f0b6001141562000b3e5750610100515b81600f0b6002141562000b515750610120515b81600f0b6003141562000b645750610140515b6001600160a01b03811662000b12576040516334769e6f60e21b815260040160405180910390fd5b80516001600160a01b038116811462000b1257600080fd5b6000806000806080858703121562000bbb57600080fd5b62000bc68562000b8c565b935062000bd66020860162000b8c565b925062000be66040860162000b8c565b915062000bf66060860162000b8c565b905092959194509250565b60006020828403121562000c1457600080fd5b62000c1f8262000b8c565b9392505050565b60006020828403121562000c3957600080fd5b5051919050565b60008282101562000c6157634e487b7160e01b600052601160045260246000fd5b500390565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e051610200516102205161024051614fa962000fe36000396000818161078301528181613708015281816138bf015281816139d901528181613e0f0152613f01015260006105de01526000818161067501528181611f680152818161239f0152818161278901528181612e6b01528181612f0901526131ed015260006108ad01526000818161059c015261288b0152600081816103d4015261285c015260008181610605015261282d0152600081816106af01526127fe015260008181610876015281816126630152818161363501528181613f6b01526146640152600081816104d7015281816126340152818161356501528181613e7901526145480152600081816107f3015281816126050152818161349501528181613d85015261442c015260008181610448015281816125d6015281816133c501528181613cb901526143100152600081816107350152818161091a015281816109e701528181610a7701528181610b6f01528181610bfe01528181610c9501528181610d2601528181611139015281816111b1015281816112ee0152818161144101528181611578015281816115c00152818161166d015281816116b5015281816117660152818161179b01528181611ac501528181611b4301528181611ccd01528181611d4501528181611dea01528181611fb20152818161206b015281816120a00152818161213b0152818161245e015281816124cb0152818161255c01528181612aa901528181612bc801528181612ca2015281816142e801528181614404015281816145200152818161463c01526147840152600081816104fe0152818161291401528181614055015261482b01526000818161075c01528181610ec9015281816118a601528181611ef4015281816122450152818161270101528181612aff01528181612b9901528181612cf801528181612da0015281816130630152818161311a01528181613215015281816132f8015281816133ed015281816134bd0152818161358d0152818161365d01528181613bf401528181613ce401528181613dad01528181613ea101528181613f93015281816140dd015281816141910152818161423b0152818161435e0152818161447a01528181614596015281816146b20152818161475501526148950152614fa96000f3fe608060405234801561001057600080fd5b50600436106103a45760003560e01c806379bea664116101e9578063cc2b27d71161010f578063e2e7d264116100ad578063f446c1d01161007c578063f446c1d014610898578063f851a440146108a0578063fc0c546a146108a8578063fee3f7f9146108cf57600080fd5b8063e2e7d26414610838578063ec026ca71461084b578063ecb586a51461085e578063ef14101e1461087157600080fd5b8063d21220a7116100e9578063d21220a7146107ee578063d96c7fce14610815578063dd62ed3e1461081d578063ddca3f431461083057600080fd5b8063cc2b27d7146107b3578063ce30bbdb146107c6578063cf023dd0146107db57600080fd5b8063b4b577ad11610187578063bd90df7011610156578063bd90df7014610730578063c12c21c014610757578063c21ee1621461077e578063c6610657146107a557600080fd5b8063b4b577ad146106ff578063b739953e14610707578063b9947eb01461071a578063bb7b8b801461072857600080fd5b80638ba51dfc116101c35780638ba51dfc146106aa57806395d89b41146106d15780639fdaea0c146106d9578063a6417ed6146106ec57600080fd5b806379bea6641461065d57806382c630661461067057806385ca3c6f1461069757600080fd5b806333d2ebf2116102ce57806357d788751161026c5780636e1d82711161023b5780636e1d82711461060057806370a082311461062757806376a2f0f01461063a57806378aa73a41461064257600080fd5b806357d78875146105975780635e0d443f146105be57806363543f06146105d157806364a89bca146105d957600080fd5b80634469e30e116102a85780634469e30e146105615780634515cef3146105695780634903b0d11461057c5780635409491a1461058f57600080fd5b806333d2ebf2146105285780633883e1191461053b5780633df021241461054e57600080fd5b806318160ddd1161034657806323746eb81161031557806323746eb8146104bf57806325be124e146104d25780632f7a1881146104f9578063313ce5671461052057600080fd5b806318160ddd146104875780631a4d01d21461048f5780631af4de83146104a45780632081066c146104b757600080fd5b806307211ef71161038257806307211ef7146104305780630dfe168114610443578063140522881461046a57806314f059791461047257600080fd5b8063065a80d8146103a957806306871163146103cf57806306fdde031461041b575b600080fd5b6103bc6103b736600461491d565b6108d7565b6040519081526020015b60405180910390f35b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016103c6565b610423610a73565b6040516103c691906149ae565b6103bc61043e3660046149c1565b610b2b565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc610bfa565b61047a610c8b565b6040516103c691906149fd565b6103bc610d22565b6104a261049d366004614a2e565b610d8f565b005b6104a26104b23660046149c1565b610e27565b6103bc611135565b6103f66104cd36600461491d565b6111a2565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc6111ad565b6104a2610536366004614a53565b61121a565b6103bc610549366004614a8e565b6112ae565b6104a261055c366004614acb565b611366565b61047a611437565b6104a2610577366004614b0d565b6114aa565b6103bc61058a366004614b38565b611546565b6103bc6115bc565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc6105cc3660046149c1565b611629565b6103bc6116b1565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc610635366004614b73565b61171e565b6103bc611797565b61064a600281565b60405161ffff90911681526020016103c6565b6104a261066b3660046149c1565b611804565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b61047a6106a5366004614b90565b611a80565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b610423611b3f565b6104a26106e7366004614b0d565b611bac565b6104a26106fa366004614acb565b611c3f565b6103bc611cc9565b6103f661071536600461491d565b611d36565b6103f6610715366004614b38565b6103bc611d41565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc7f000000000000000000000000000000000000000000000000000000000000000081565b6103f66104cd366004614b38565b6103bc6107c1366004614bce565b611dae565b6107ce600681565b6040516103c69190614bfa565b6104a26107e9366004614a2e565b611e2e565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b61047a611fa8565b6103bc61082b366004614c3b565b61201b565b6103bc61209c565b6103bc610846366004614b38565b612109565b6104a2610859366004614a53565b61217f565b6104a261086c366004614c69565b6123e0565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc61245a565b6103f66124c7565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc612558565b6040517f4903b0d10000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff821660048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634903b0d1906024015b602060405180830381865afa9250505080156109b1575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526109ae91810190614c8d565b60015b610a68576040517f065a80d8000000000000000000000000000000000000000000000000000000008152600f83900b60048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063065a80d8906024015b602060405180830381865afa158015610a44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a689190614c8d565b92915050565b919050565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015610ae0573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b269190810190614d67565b905090565b6040517f07211ef7000000000000000000000000000000000000000000000000000000008152600f84810b600483015283900b6024820152604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906307211ef7906064015b602060405180830381865afa158015610bcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf09190614c8d565b90505b9392505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663140522886040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b269190614c8d565b610c936148ed565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166314f059796040518163ffffffff1660e01b8152600401606060405180830381865afa158015610cfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b269190614db8565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b60026000541415610e01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b60026000908155610e11836125c5565b9050610e1c816126d0565b505060016000555050565b60026000541415610e94576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610f25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f499190614e36565b90506000610f56856127ed565b90506000610f63856127ed565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529192506000918416906370a0823190602401602060405180830381865afa158015610fd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff99190614c8d565b90506001811115611127577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce800000061103f8784614e53565b6110499190614eb7565b604051600f8a810b602483015289900b60448201526064810184905260848101829052909150611124908690869086907fa6417ed6000000000000000000000000000000000000000000000000000000009060a4015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526001806128f7565b50505b505060016000555050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632081066c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6000610a68826125c5565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b60026000541415611287576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b60026000908155611297836125c5565b90506112a4838284612d6f565b5050600160005550565b6040517f3883e11900000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690633883e119906113259086908690600401614ef2565b602060405180830381865afa158015611342573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf39190614c8d565b600260005414156113d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b600260009081556113e3856125c5565b905060006113f0856125c5565b905061112782826000368080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525060019350915061301a9050565b61143f6148ed565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16634469e30e6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610cfe573d6000803e3d6000fd5b60026000541415611517576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b6002600090815561153d90600184358110916020860135821091604087013511906130e9565b50506001600055565b6040517f4903b0d1000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634903b0d19060240161095a565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635409491a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6040517f5e0d443f000000000000000000000000000000000000000000000000000000008152600f84810b600483015283900b6024820152604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635e0d443f90606401610baf565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166363543f066040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401610a27565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166376a2f0f06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b60026000541415611871576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611902573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119269190614e36565b90506000611933856125c5565b90506000611940856125c5565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529192506000918416906370a0823190602401602060405180830381865afa1580156119b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d69190614c8d565b90506001811115611127577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce8000000611a1c8784614e53565b611a269190614eb7565b604051600f8a810b602483015289900b60448201526064810184905260848101829052909150611124908690869086907f3df02124000000000000000000000000000000000000000000000000000000009060a40161109f565b611a886148ed565b6040517f85ca3c6f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906385ca3c6f90611afe90879087908790600401614f0a565b606060405180830381865afa158015611b1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf09190614db8565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610ae0573d6000803e3d6000fd5b60026000541415611c19576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b6002600090815561153d90600184358110916020860135821091604087013511906132c7565b60026000541415611cac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b60026000908155611cbc856127ed565b905060006113f0856127ed565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b4b577ad6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6000610a68826127ed565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb7b8b806040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6040517fcc2b27d700000000000000000000000000000000000000000000000000000000815260048101839052600f82900b60248201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063cc2b27d790604401611325565b60026000541415611e9b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b60026000908155611eab836125c5565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611f3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f5f9190614e36565b9050611f9b81837f0000000000000000000000000000000000000000000000000000000000000000611f92888a89613704565b600160006128f7565b5050600160005550505050565b611fb06148ed565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d96c7fce6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610cfe573d6000803e3d6000fd5b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063dd62ed3e90604401611325565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6040517fe2e7d264000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e2e7d26490602401610a27565b600260005414156121ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b600260009081556121fc836125c5565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa15801561228c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b09190614e36565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000918416906370a0823190602401602060405180830381865afa158015612322573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123469190614c8d565b905060018111156123d4577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce800000061238c8684614e53565b6123969190614eb7565b90506123d183857f00000000000000000000000000000000000000000000000000000000000000006123c98a8787613704565b6001806128f7565b50505b50506001600055505050565b6002600054141561244d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b600260005561153d613bc3565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f446c1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa158015612534573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b269190614e36565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fee3f7f96040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b600081600f0b600014156125f657507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6001141561262557507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6002141561265457507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6003141561268357507f00000000000000000000000000000000000000000000000000000000000000005b73ffffffffffffffffffffffffffffffffffffffff8116610a6e576040517fd1da79bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa15801561275d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127819190614e36565b90506127e8817f0000000000000000000000000000000000000000000000000000000000000000846000368080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525092508291506128f79050565b505050565b600081600f0b6000141561281e57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6001141561284d57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6002141561287c57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6003141561268357507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff8116610a6e576040517fd1da79bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606000803373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614612a60576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301528916906370a0823190602401602060405180830381865afa1580156129a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129c99190614c8d565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152919350908816906370a0823190602401602060405180830381865afa158015612a39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a5d9190614c8d565b90505b8415612b5c576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612b4357600080fd5b505af1158015612b57573d6000803e3d6000fd5b505050505b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a90612bf29033907f0000000000000000000000000000000000000000000000000000000000000000908b90600401614f31565b6000604051808303816000875af1158015612c11573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052612c579190810190614d67565b92508415612d55576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612d3c57600080fd5b505af1158015612d50573d6000803e3d6000fd5b505050505b612d6389898985858961403d565b50509695505050505050565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612dfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e209190614e36565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000917f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015612eb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ed69190614c8d565b90506001811115613013577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01613011827f0000000000000000000000000000000000000000000000000000000000000000867f1a4d01d200000000000000000000000000000000000000000000000000000000858a6b033b2e3c9fd0803ce8000000612f638b84614e53565b612f6d9190614eb7565b6040516024810193909352600f9190910b60448301526064820152608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152600060016128f7565b505b5050505050565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015260609060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa1580156130aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130ce9190614e36565b90506130de8188888888886128f7565b979650505050505050565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015613176573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061319a9190614e36565b90506131a88585858561429f565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561325957600080fd5b505af115801561326d573d6000803e3d6000fd5b505050506132b16000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061471592505050565b506132be8585858561429f565b61301381614813565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015613354573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133789190614e36565b9050841561344a576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561343157600080fd5b505af1158015613445573d6000803e3d6000fd5b505050505b831561351a576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561350157600080fd5b505af1158015613515573d6000803e3d6000fd5b505050505b82156135ea576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156135d157600080fd5b505af11580156135e5573d6000803e3d6000fd5b505050505b81156136ba576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156136a157600080fd5b505af11580156136b5573d6000803e3d6000fd5b505050505b6136fa6000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061471592505050565b5061301381614813565b60607f0000000000000000000000000000000000000000000000000000000000000000600214156138bd5783600f0b6000146137fa576040516000602482015260448101849052606481018390527f0b4c7e4d00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526138b6565b6040516024810184905260006044820152606481018390527f0b4c7e4d00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091525b9050610bf3565b7f0000000000000000000000000000000000000000000000000000000000000000600314156139d75783600f0b60001461398e5783600f0b60011461394557604051600060248201819052604482015260648101849052608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401613778565b604051600060248201819052604482018590526064820152608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401613778565b604051602481018490526000604482018190526064820152608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401613838565b7f000000000000000000000000000000000000000000000000000000000000000060041415613b615783600f0b600014613b115783600f0b600114613ac15783600f0b600214613a71576040516000602482018190526044820181905260648201526084810184905260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613778565b6040516000602482018190526044820181905260648201859052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613778565b6040516000602482018190526044820185905260648201819052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613778565b6040516024810184905260006044820181905260648201819052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613838565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f496e636f7272656374206e436f696e73000000000000000000000000000000006044820152606401610df8565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015613c50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c749190614e36565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301529192507f0000000000000000000000000000000000000000000000000000000000000000909116906351e3f16090604401600060405180830381600087803b158015613d2a57600080fd5b505af1158015613d3e573d6000803e3d6000fd5b50506040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f00000000000000000000000000000000000000000000000000000000000000001692506351e3f1609150604401600060405180830381600087803b158015613df357600080fd5b505af1158015613e07573d6000803e3d6000fd5b5050505060027f00000000000000000000000000000000000000000000000000000000000000001115613ff0576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015613ee557600080fd5b505af1158015613ef9573d6000803e3d6000fd5b5050505060037f00000000000000000000000000000000000000000000000000000000000000001115613ff0576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015613fd757600080fd5b505af1158015613feb573d6000803e3d6000fd5b505050505b6140306000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061471592505050565b5061403a81614813565b50565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461413e576040517f654a9eda00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528681166024830152858116604483015260648201859052608482018490527f0000000000000000000000000000000000000000000000000000000000000000169063654a9eda9060a401600060405180830381600087803b15801561412157600080fd5b505af1158015614135573d6000803e3d6000fd5b50505050613011565b80156141ee576040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015286811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b1580156141d557600080fd5b505af11580156141e9573d6000803e3d6000fd5b505050505b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015285811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561427f57600080fd5b505af1158015614293573d6000803e3d6000fd5b50505050505050505050565b83156143bb576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156143a257600080fd5b505af11580156143b6573d6000803e3d6000fd5b505050505b82156144d7576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156144be57600080fd5b505af11580156144d2573d6000803e3d6000fd5b505050505b81156145f3576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156145da57600080fd5b505af11580156145ee573d6000803e3d6000fd5b505050505b801561470f576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156146f657600080fd5b505af115801561470a573d6000803e3d6000fd5b505050505b50505050565b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815260609073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a906147ae9033907f0000000000000000000000000000000000000000000000000000000000000000908790600401614f31565b6000604051808303816000875af11580156147cd573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610a689190810190614d67565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461403a576040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b1580156148d957600080fd5b505af1158015613013573d6000803e3d6000fd5b60405180606001604052806003906020820280368337509192915050565b8035600f81900b8114610a6e57600080fd5b60006020828403121561492f57600080fd5b610bf38261490b565b60005b8381101561495357818101518382015260200161493b565b8381111561470f5750506000910152565b6000815180845261497c816020860160208601614938565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610bf36020830184614964565b6000806000606084860312156149d657600080fd5b6149df8461490b565b92506149ed6020850161490b565b9150604084013590509250925092565b60608101818360005b6003811015614a25578151835260209283019290910190600101614a06565b50505092915050565b600080600060608486031215614a4357600080fd5b833592506149ed6020850161490b565b60008060408385031215614a6657600080fd5b614a6f8361490b565b946020939093013593505050565b8060608101831015610a6857600080fd5b60008060808385031215614aa157600080fd5b614aab8484614a7d565b915060608301358015158114614ac057600080fd5b809150509250929050565b60008060008060808587031215614ae157600080fd5b614aea8561490b565b9350614af86020860161490b565b93969395505050506040820135916060013590565b60008060808385031215614b2057600080fd5b614b2a8484614a7d565b946060939093013593505050565b600060208284031215614b4a57600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461403a57600080fd5b600060208284031215614b8557600080fd5b8135610bf381614b51565b600080600060e08486031215614ba557600080fd5b614baf8585614a7d565b9250614bbe8560608601614a7d565b915060c084013590509250925092565b60008060408385031215614be157600080fd5b82359150614bf16020840161490b565b90509250929050565b6020810160118310614c35577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60008060408385031215614c4e57600080fd5b8235614c5981614b51565b91506020830135614ac081614b51565b60008060808385031215614c7c57600080fd5b82359150614bf18460208501614a7d565b600060208284031215614c9f57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff80841115614cf057614cf0614ca6565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715614d3657614d36614ca6565b81604052809350858152868686011115614d4f57600080fd5b614d5d866020830187614938565b5050509392505050565b600060208284031215614d7957600080fd5b815167ffffffffffffffff811115614d9057600080fd5b8201601f81018413614da157600080fd5b614db084825160208401614cd5565b949350505050565b600060608284031215614dca57600080fd5b82601f830112614dd957600080fd5b6040516060810181811067ffffffffffffffff82111715614dfc57614dfc614ca6565b604052806060840185811115614e1157600080fd5b845b81811015614e2b578051835260209283019201614e13565b509195945050505050565b600060208284031215614e4857600080fd5b8151610bf381614b51565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614eb2577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500290565b600082614eed577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60808101606084833791151560609190910152919050565b60e081016060858337606082016000815260608582375060c0919091019190915292915050565b600073ffffffffffffffffffffffffffffffffffffffff808616835280851660208401525060606040830152614f6a6060830184614964565b9594505050505056fea2646970667358221220efb951725986e76ee157ff0d00cd7b7a6a9b8a581784400c52be5c96516fe15064736f6c634300080a0033"; - -type CurveV1Adapter3AssetsConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: CurveV1Adapter3AssetsConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class CurveV1Adapter3Assets__factory extends ContractFactory { - constructor(...args: CurveV1Adapter3AssetsConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - _creditManager: string, - _curvePool: string, - _lp_token: string, - _metapoolBase: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - _creditManager, - _curvePool, - _lp_token, - _metapoolBase, - overrides || {} - ) as Promise; - } - override getDeployTransaction( - _creditManager: string, - _curvePool: string, - _lp_token: string, - _metapoolBase: string, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction( - _creditManager, - _curvePool, - _lp_token, - _metapoolBase, - overrides || {} - ); - } - override attach(address: string): CurveV1Adapter3Assets { - return super.attach(address) as CurveV1Adapter3Assets; - } - override connect(signer: Signer): CurveV1Adapter3Assets__factory { - return super.connect(signer) as CurveV1Adapter3Assets__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): CurveV1Adapter3AssetsInterface { - return new utils.Interface(_abi) as CurveV1Adapter3AssetsInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): CurveV1Adapter3Assets { - return new Contract( - address, - _abi, - signerOrProvider - ) as CurveV1Adapter3Assets; - } -} diff --git a/src/types/factories/contracts/adapters/curve/CurveV1_3.sol/index.ts b/src/types/factories/contracts/adapters/curve/CurveV1_3.sol/index.ts deleted file mode 100644 index 63fea65f..00000000 --- a/src/types/factories/contracts/adapters/curve/CurveV1_3.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { CurveV1Adapter3Assets__factory } from "./CurveV1Adapter3Assets__factory"; diff --git a/src/types/factories/contracts/adapters/curve/CurveV1_4.sol/CurveV1Adapter4Assets__factory.ts b/src/types/factories/contracts/adapters/curve/CurveV1_4.sol/CurveV1Adapter4Assets__factory.ts deleted file mode 100644 index 3c828bdd..00000000 --- a/src/types/factories/contracts/adapters/curve/CurveV1_4.sol/CurveV1Adapter4Assets__factory.ts +++ /dev/null @@ -1,1137 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - CurveV1Adapter4Assets, - CurveV1Adapter4AssetsInterface, -} from "../../../../../contracts/adapters/curve/CurveV1_4.sol/CurveV1Adapter4Assets"; - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "_creditManager", - type: "address", - }, - { - internalType: "address", - name: "_curvePool", - type: "address", - }, - { - internalType: "address", - name: "_lp_token", - type: "address", - }, - { - internalType: "address", - name: "_metapoolBase", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "IncorrectIndexException", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "TokenIsNotInAllowedList", - type: "error", - }, - { - inputs: [], - name: "ZeroAddressException", - type: "error", - }, - { - inputs: [], - name: "A", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "A_precise", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "_gearboxAdapterType", - outputs: [ - { - internalType: "enum AdapterType", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "_gearboxAdapterVersion", - outputs: [ - { - internalType: "uint16", - name: "", - type: "uint16", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "uint256", - name: "rateMinRAY", - type: "uint256", - }, - ], - name: "add_all_liquidity_one_coin", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256[4]", - name: "amounts", - type: "uint256[4]", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "add_liquidity", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "uint256", - name: "minAmount", - type: "uint256", - }, - ], - name: "add_liquidity_one_coin", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "admin", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "i", - type: "uint256", - }, - ], - name: "admin_balances", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "admin_fee", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "owner", - type: "address", - }, - { - internalType: "address", - name: "spender", - type: "address", - }, - ], - name: "allowance", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - ], - name: "balances", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "i", - type: "uint256", - }, - ], - name: "balances", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "block_timestamp_last", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256[4]", - name: "_amounts", - type: "uint256[4]", - }, - { - internalType: "bool", - name: "_is_deposit", - type: "bool", - }, - ], - name: "calc_token_amount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_burn_amount", - type: "uint256", - }, - { - internalType: "int128", - name: "i", - type: "int128", - }, - ], - name: "calc_withdraw_one_coin", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - ], - name: "coins", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "i", - type: "uint256", - }, - ], - name: "coins", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditFacade", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditManager", - outputs: [ - { - internalType: "contract ICreditManagerV2", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "decimals", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "int128", - name: "j", - type: "int128", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "exchange", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "int128", - name: "j", - type: "int128", - }, - { - internalType: "uint256", - name: "rateMinRAY", - type: "uint256", - }, - ], - name: "exchange_all", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "int128", - name: "j", - type: "int128", - }, - { - internalType: "uint256", - name: "rateMinRAY", - type: "uint256", - }, - ], - name: "exchange_all_underlying", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "int128", - name: "j", - type: "int128", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "exchange_underlying", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "fee", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "future_A", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "future_A_time", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "get_balances", - outputs: [ - { - internalType: "uint256[4]", - name: "", - type: "uint256[4]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "int128", - name: "j", - type: "int128", - }, - { - internalType: "uint256", - name: "dx", - type: "uint256", - }, - ], - name: "get_dy", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "int128", - name: "j", - type: "int128", - }, - { - internalType: "uint256", - name: "dx", - type: "uint256", - }, - ], - name: "get_dy_underlying", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "get_previous_balances", - outputs: [ - { - internalType: "uint256[4]", - name: "", - type: "uint256[4]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "get_price_cumulative_last", - outputs: [ - { - internalType: "uint256[4]", - name: "", - type: "uint256[4]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256[4]", - name: "_first_balances", - type: "uint256[4]", - }, - { - internalType: "uint256[4]", - name: "_last_balances", - type: "uint256[4]", - }, - { - internalType: "uint256", - name: "_time_elapsed", - type: "uint256", - }, - ], - name: "get_twap_balances", - outputs: [ - { - internalType: "uint256[4]", - name: "", - type: "uint256[4]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "get_virtual_price", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "initial_A", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "initial_A_time", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "lp_token", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "metapoolBase", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "nCoins", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "uint256", - name: "minRateRAY", - type: "uint256", - }, - ], - name: "remove_all_liquidity_one_coin", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256[4]", - name: "", - type: "uint256[4]", - }, - ], - name: "remove_liquidity", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256[4]", - name: "amounts", - type: "uint256[4]", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "remove_liquidity_imbalance", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "remove_liquidity_one_coin", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "symbol", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "targetContract", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "token", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "token0", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "token1", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "token2", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "token3", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "totalSupply", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "underlying0", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "underlying1", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "underlying2", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "underlying3", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - ], - name: "underlying_coins", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "i", - type: "uint256", - }, - ], - name: "underlying_coins", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x6102606040523480156200001257600080fd5b5060405162005f9a38038062005f9a833981016040819052620000359162000ba4565b83838383600484846001600160a01b03821615806200005b57506001600160a01b038116155b156200007a57604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038216608081905260408051632f7a188160e01b81529051632f7a1881916004808201926020929091908290030181865afa158015620000c5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000eb919062000c01565b6001600160a01b0390811660a05290811660c05260016000558416151590506200012857604051635919af9760e11b815260040160405180910390fd5b608051604051630f67c5bd60e41b81526001600160a01b0385811660048301529091169063f67c5bd090602401602060405180830381865afa15801562000173573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000199919062000c26565b620001c757604051634c607af960e11b81526001600160a01b03841660048201526024015b60405180910390fd5b6001600160a01b038084166101e081905261020052821661022052610240819052620001f460006200090a565b6001600160a01b031660e0526200020c60016200090a565b6001600160a01b0316610100526200022560026200090a565b6001600160a01b0316610120526200023e60036200090a565b6001600160a01b031661014052620002576000620009fd565b6001600160a01b031661016052620002706001620009fd565b6001600160a01b031661018052620002896002620009fd565b6001600160a01b03166101a052620002a26003620009fd565b6001600160a01b039081166101c05260e051161580620002cc5750610100516001600160a01b0316155b15620002eb57604051635919af9760e11b815260040160405180910390fd5b600281118015620003065750610120516001600160a01b0316155b156200032557604051635919af9760e11b815260040160405180910390fd5b600381118015620003405750610140516001600160a01b0316155b156200035f57604051635919af9760e11b815260040160405180910390fd5b60805160e051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620003ac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003d2919062000c26565b620004005760e051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b60805161010051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa1580156200044e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000474919062000c26565b620004a35761010051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b60028111801562000525575060805161012051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620004fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000523919062000c26565b155b15620005555761012051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b600381118015620005d7575060805161014051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620005af573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005d5919062000c26565b155b15620006075761014051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b610160516001600160a01b03161580159062000694575060805161016051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa1580156200066c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000692919062000c26565b155b15620006c45761016051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b610180516001600160a01b03161580159062000751575060805161018051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa15801562000729573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200074f919062000c26565b155b15620007815761018051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b6101a0516001600160a01b0316158015906200080e57506080516101a051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620007e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200080c919062000c26565b155b156200083e576101a051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b6101c0516001600160a01b031615801590620008cb57506080516101c051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620008a3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008c9919062000c26565b155b15620008fb576101c051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b50505050505050505062000c66565b60c05160405163c661065760e01b8152600481018390526000916001600160a01b03169063c661065790602401602060405180830381865afa92505050801562000973575060408051601f3d908101601f19168201909252620009709181019062000c01565b60015b6200097e5762000984565b92915050565b60c05160405163046e8dd760e31b8152600f84900b60048201526001600160a01b03909116906323746eb8906024015b602060405180830381865afa925050508015620009f0575060408051601f3d908101601f19168201909252620009ed9181019062000c01565b60015b6200097e57506000919050565b610220516000906001600160a01b03161562000a1e576200097e8262000ac0565b60c051604051630b9947eb60e41b8152600481018490526001600160a01b039091169063b9947eb090602401602060405180830381865afa92505050801562000a86575060408051601f3d908101601f1916820190925262000a839181019062000c01565b60015b6200097e5760c051604051635b9cca9f60e11b8152600f84900b60048201526001600160a01b039091169063b739953e90602401620009b4565b60008162000ad4576200097e600062000b17565b610220516001600160a01b031663c661065762000af360018562000c40565b6040518263ffffffff1660e01b8152600401620009b491815260200190565b919050565b600081600f0b6000141562000b2b575060e0515b81600f0b6001141562000b3e5750610100515b81600f0b6002141562000b515750610120515b81600f0b6003141562000b645750610140515b6001600160a01b03811662000b12576040516334769e6f60e21b815260040160405180910390fd5b80516001600160a01b038116811462000b1257600080fd5b6000806000806080858703121562000bbb57600080fd5b62000bc68562000b8c565b935062000bd66020860162000b8c565b925062000be66040860162000b8c565b915062000bf66060860162000b8c565b905092959194509250565b60006020828403121562000c1457600080fd5b62000c1f8262000b8c565b9392505050565b60006020828403121562000c3957600080fd5b5051919050565b60008282101562000c6157634e487b7160e01b600052601160045260246000fd5b500390565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e051610200516102205161024051614fb762000fe3600039600081816107830152818161395a01528181613a4c01528181613b8c01528181613d430152613e5d015260006105f101526000818161069b01528181611f6f0152818161241d015281816126cd01528181612daf01528181613491015261352f015260006108ad0152600081816105af0152612eb10152600081816103e90152612e820152600081816106180152612e530152600081816106c20152612e2401526000818161087601528181612b1c01528181612c8901528181613ab6015261440c0152600081816104fd01528181612a4c01528181612c5a015281816139c401526142f00152600081816108060152818161297c01528181612c2b015281816138d001526141d401526000818161045d015281816128ac01528181612bfc0152818161380401526140b8015260008181610735015281816109bf01528181610a8c01528181610b1c01528181610c1401528181610ca301528181610d3a01528181610dcb01528181611270015281816112e8015281816114c00152818161155b015281816115e4015281816116620152818161170f01528181611757015281816118080152818161183d01528181611ba001528181611c9701528181611d0f01528181611db401528181611fef01528181612030015281816120e90152818161211e015281816121b901528181612462015281816124cf01528181612560015281816130cf015281816131ee015281816132c801528181614090015281816141ac015281816142c8015281816143e4015261452c01526000818161052401528181612f3a015281816145d301526146ad01526000818161075c015281816110000152818161194801528181611efb015281816122c3015281816125fa015281816126f5015281816127df015281816128d4015281816129a401528181612a7401528181612b4401528181612d2701528181613125015281816131bf0152818161331e015281816133c6015281816136880152818161373f0152818161382f015281816138f8015281816139ec01528181613ade01528181614106015281816142220152818161433e0152818161445a015281816144fd0152818161463d01528181614735015281816147e901526148930152614fb76000f3fe608060405234801561001057600080fd5b50600436106103a45760003560e01c806378aa73a4116101e9578063cc2b27d71161010f578063ddca3f43116100ad578063f446c1d01161007c578063f446c1d014610898578063f851a440146108a0578063fc0c546a146108a8578063fee3f7f9146108cf57600080fd5b8063ddca3f4314610843578063e2e7d2641461084b578063ec026ca71461085e578063ef14101e1461087157600080fd5b8063cf701ff7116100e9578063cf701ff7146107ee578063d21220a714610801578063d96c7fce14610828578063dd62ed3e1461083057600080fd5b8063cc2b27d7146107b3578063ce30bbdb146107c6578063cf023dd0146107db57600080fd5b8063b4b577ad11610187578063bd90df7011610156578063bd90df7014610730578063c12c21c014610757578063c21ee1621461077e578063c6610657146107a557600080fd5b8063b4b577ad146106ff578063b739953e14610707578063b9947eb01461071a578063bb7b8b801461072857600080fd5b806382c63066116101c357806382c63066146106965780638ba51dfc146106bd57806395d89b41146106e4578063a6417ed6146106ec57600080fd5b806378aa73a41461065557806379bea664146106705780637d49d8751461068357600080fd5b80632f7a1881116102ce5780635409491a1161026c57806364a89bca1161023b57806364a89bca146105ec5780636e1d82711461061357806370a082311461063a57806376a2f0f01461064d57600080fd5b80635409491a146105a257806357d78875146105aa5780635e0d443f146105d157806363543f06146105e457600080fd5b80633df02124116102a85780633df02124146105615780634469e30e146105745780634903b0d11461057c57806353b546cd1461058f57600080fd5b80632f7a18811461051f578063313ce5671461054657806333d2ebf21461054e57600080fd5b806314f05979116103465780631af4de83116103155780631af4de83146104ca5780632081066c146104dd57806323746eb8146104e557806325be124e146104f857600080fd5b806314f059791461048757806318160ddd1461049c57806318a7bd76146104a45780631a4d01d2146104b757600080fd5b806306fdde031161038257806306fdde031461043057806307211ef7146104455780630dfe168114610458578063140522881461047f57600080fd5b8063029b2f34146103a9578063065a80d8146103be57806306871163146103e4575b600080fd5b6103bc6103b7366004614926565b6108d7565b005b6103d16103cc366004614963565b61097c565b6040519081526020015b60405180910390f35b61040b7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016103db565b610438610b18565b6040516103db91906149f4565b6103d1610453366004614a07565b610bd0565b61040b7f000000000000000000000000000000000000000000000000000000000000000081565b6103d1610c9f565b61048f610d30565b6040516103db9190614a43565b6103d1610dc7565b6103bc6104b2366004614926565b610e34565b6103bc6104c5366004614a74565b610ecb565b6103bc6104d8366004614a07565b610f5e565b6103d161126c565b61040b6104f3366004614963565b6112d9565b61040b7f000000000000000000000000000000000000000000000000000000000000000081565b61040b7f000000000000000000000000000000000000000000000000000000000000000081565b6103d16112e4565b6103bc61055c366004614a99565b611351565b6103bc61056f366004614ac3565b6113e5565b61048f6114b6565b6103d161058a366004614b05565b611529565b61048f61059d366004614b1e565b61159f565b6103d161165e565b61040b7f000000000000000000000000000000000000000000000000000000000000000081565b6103d16105df366004614a07565b6116cb565b6103d1611753565b61040b7f000000000000000000000000000000000000000000000000000000000000000081565b61040b7f000000000000000000000000000000000000000000000000000000000000000081565b6103d1610648366004614b80565b6117c0565b6103d1611839565b61065d600281565b60405161ffff90911681526020016103db565b6103bc61067e366004614a07565b6118a6565b6103bc610691366004614b9d565b611b22565b61040b7f000000000000000000000000000000000000000000000000000000000000000081565b61040b7f000000000000000000000000000000000000000000000000000000000000000081565b610438611b9c565b6103bc6106fa366004614ac3565b611c09565b6103d1611c93565b61040b610715366004614963565b611d00565b61040b610715366004614b05565b6103d1611d0b565b61040b7f000000000000000000000000000000000000000000000000000000000000000081565b61040b7f000000000000000000000000000000000000000000000000000000000000000081565b6103d17f000000000000000000000000000000000000000000000000000000000000000081565b61040b6104f3366004614b05565b6103d16107c1366004614bca565b611d78565b6107ce600781565b6040516103db9190614bed565b6103bc6107e9366004614a74565b611e35565b6103d16107fc366004614c2e565b611faf565b61040b7f000000000000000000000000000000000000000000000000000000000000000081565b61048f612026565b6103d161083e366004614c6b565b612099565b6103d161211a565b6103d1610859366004614b05565b612187565b6103bc61086c366004614a99565b6121fd565b61040b7f000000000000000000000000000000000000000000000000000000000000000081565b6103d161245e565b61040b6124cb565b61040b7f000000000000000000000000000000000000000000000000000000000000000081565b6103d161255c565b60026000541415610949576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b600260005561097360018335811090602085013581109060408601358110906060870135116125c9565b50506001600055565b6040517f4903b0d10000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff821660048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634903b0d1906024015b602060405180830381865afa925050508015610a56575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610a5391810190614c99565b60015b610b0d576040517f065a80d8000000000000000000000000000000000000000000000000000000008152600f83900b60048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063065a80d8906024015b602060405180830381865afa158015610ae9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0d9190614c99565b92915050565b919050565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015610b85573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610bcb9190810190614d73565b905090565b6040517f07211ef7000000000000000000000000000000000000000000000000000000008152600f84810b600483015283900b6024820152604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906307211ef7906064015b602060405180830381865afa158015610c71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c959190614c99565b90505b9392505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663140522886040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bcb9190614c99565b610d386148f7565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166314f059796040518163ffffffff1660e01b8152600401608060405180830381865afa158015610da3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bcb9190614dc4565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d0c573d6000803e3d6000fd5b60026000541415610ea1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610940565b600260005561097360018335811090602085013581109060408601358110906060870135116127ae565b60026000541415610f38576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610940565b60026000908155610f4883612beb565b9050610f5381612cf6565b505060016000555050565b60026000541415610fcb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610940565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa15801561105c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110809190614e42565b9050600061108d85612e13565b9050600061109a85612e13565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529192506000918416906370a0823190602401602060405180830381865afa15801561110c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111309190614c99565b9050600181111561125e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce80000006111768784614e5f565b6111809190614ec3565b604051600f8a810b602483015289900b6044820152606481018490526084810182905290915061125b908690869086907fa6417ed6000000000000000000000000000000000000000000000000000000009060a4015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152600180612f1d565b50505b505060016000555050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632081066c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d0c573d6000803e3d6000fd5b6000610b0d82612beb565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d0c573d6000803e3d6000fd5b600260005414156113be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610940565b600260009081556113ce83612beb565b90506113db838284613395565b5050600160005550565b60026000541415611452576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610940565b6002600090815561146285612beb565b9050600061146f85612beb565b905061125e82826000368080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525060019350915061363f9050565b6114be6148f7565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16634469e30e6040518163ffffffff1660e01b8152600401608060405180830381865afa158015610da3573d6000803e3d6000fd5b6040517f4903b0d1000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634903b0d1906024016109ff565b6115a76148f7565b6040517f53b546cd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906353b546cd9061161d90879087908790600401614efe565b608060405180830381865afa15801561163a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c959190614dc4565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635409491a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d0c573d6000803e3d6000fd5b6040517f5e0d443f000000000000000000000000000000000000000000000000000000008152600f84810b600483015283900b6024820152604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635e0d443f90606401610c54565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166363543f066040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d0c573d6000803e3d6000fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401610acc565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166376a2f0f06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d0c573d6000803e3d6000fd5b60026000541415611913576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610940565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156119a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c89190614e42565b905060006119d585612beb565b905060006119e285612beb565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529192506000918416906370a0823190602401602060405180830381865afa158015611a54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a789190614c99565b9050600181111561125e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce8000000611abe8784614e5f565b611ac89190614ec3565b604051600f8a810b602483015289900b6044820152606481018490526084810182905290915061125b908690869086907f3df02124000000000000000000000000000000000000000000000000000000009060a4016111d6565b60026000541415611b8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610940565b600260005561097361370e565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610b85573d6000803e3d6000fd5b60026000541415611c76576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610940565b60026000908155611c8685612e13565b9050600061146f85612e13565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b4b577ad6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d0c573d6000803e3d6000fd5b6000610b0d82612e13565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb7b8b806040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d0c573d6000803e3d6000fd5b6040517fcc2b27d700000000000000000000000000000000000000000000000000000000815260048101839052600f82900b60248201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063cc2b27d7906044015b602060405180830381865afa158015611e11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c989190614c99565b60026000541415611ea2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610940565b60026000908155611eb283612beb565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611f42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f669190614e42565b9050611fa281837f0000000000000000000000000000000000000000000000000000000000000000611f99888a89613b88565b60016000612f1d565b5050600160005550505050565b6040517fcf701ff700000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063cf701ff790611df49086908690600401614f27565b61202e6148f7565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d96c7fce6040518163ffffffff1660e01b8152600401608060405180830381865afa158015610da3573d6000803e3d6000fd5b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063dd62ed3e90604401611df4565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d0c573d6000803e3d6000fd5b6040517fe2e7d264000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e2e7d26490602401610acc565b6002600054141561226a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610940565b6002600090815561227a83612beb565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa15801561230a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061232e9190614e42565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000918416906370a0823190602401602060405180830381865afa1580156123a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123c49190614c99565b90506001811115612452577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce800000061240a8684614e5f565b6124149190614ec3565b905061244f83857f00000000000000000000000000000000000000000000000000000000000000006124478a8787613b88565b600180612f1d565b50505b50506001600055505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f446c1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d0c573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa158015612538573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bcb9190614e42565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fee3f7f96040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d0c573d6000803e3d6000fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612656573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061267a9190614e42565b905061268885858585614047565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561273957600080fd5b505af115801561274d573d6000803e3d6000fd5b505050506127916000368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506144bd92505050565b5061279e85858585614047565b6127a7816145bb565b5050505050565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa15801561283b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061285f9190614e42565b90508415612931576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561291857600080fd5b505af115801561292c573d6000803e3d6000fd5b505050505b8315612a01576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156129e857600080fd5b505af11580156129fc573d6000803e3d6000fd5b505050505b8215612ad1576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015612ab857600080fd5b505af1158015612acc573d6000803e3d6000fd5b505050505b8115612ba1576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015612b8857600080fd5b505af1158015612b9c573d6000803e3d6000fd5b505050505b612be16000368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506144bd92505050565b506127a7816145bb565b600081600f0b60001415612c1c57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b60011415612c4b57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b60021415612c7a57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b60031415612ca957507f00000000000000000000000000000000000000000000000000000000000000005b73ffffffffffffffffffffffffffffffffffffffff8116610b13576040517fd1da79bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612d83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612da79190614e42565b9050612e0e817f0000000000000000000000000000000000000000000000000000000000000000846000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509250829150612f1d9050565b505050565b600081600f0b60001415612e4457507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b60011415612e7357507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b60021415612ea257507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b60031415612ca957507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff8116610b13576040517fd1da79bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606000803373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614613086576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301528916906370a0823190602401602060405180830381865afa158015612fcb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fef9190614c99565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152919350908816906370a0823190602401602060405180830381865afa15801561305f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130839190614c99565b90505b8415613182576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561316957600080fd5b505af115801561317d573d6000803e3d6000fd5b505050505b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a906132189033907f0000000000000000000000000000000000000000000000000000000000000000908b90600401614f3f565b6000604051808303816000875af1158015613237573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261327d9190810190614d73565b9250841561337b576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561336257600080fd5b505af1158015613376573d6000803e3d6000fd5b505050505b613389898989858589614695565b50509695505050505050565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015613422573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134469190614e42565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000917f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa1580156134d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134fc9190614c99565b905060018111156127a7577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01613637827f0000000000000000000000000000000000000000000000000000000000000000867f1a4d01d200000000000000000000000000000000000000000000000000000000858a6b033b2e3c9fd0803ce80000006135898b84614e5f565b6135939190614ec3565b6040516024810193909352600f9190910b60448301526064820152608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915260006001612f1d565b505050505050565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015260609060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa1580156136cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136f39190614e42565b9050613703818888888888612f1d565b979650505050505050565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa15801561379b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137bf9190614e42565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301529192507f0000000000000000000000000000000000000000000000000000000000000000909116906351e3f16090604401600060405180830381600087803b15801561387557600080fd5b505af1158015613889573d6000803e3d6000fd5b50506040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f00000000000000000000000000000000000000000000000000000000000000001692506351e3f1609150604401600060405180830381600087803b15801561393e57600080fd5b505af1158015613952573d6000803e3d6000fd5b5050505060027f00000000000000000000000000000000000000000000000000000000000000001115613b3b576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015613a3057600080fd5b505af1158015613a44573d6000803e3d6000fd5b5050505060037f00000000000000000000000000000000000000000000000000000000000000001115613b3b576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015613b2257600080fd5b505af1158015613b36573d6000803e3d6000fd5b505050505b613b7b6000368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506144bd92505050565b50613b85816145bb565b50565b60607f000000000000000000000000000000000000000000000000000000000000000060021415613d415783600f0b600014613c7e576040516000602482015260448101849052606481018390527f0b4c7e4d00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613d3a565b6040516024810184905260006044820152606481018390527f0b4c7e4d00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091525b9050610c98565b7f000000000000000000000000000000000000000000000000000000000000000060031415613e5b5783600f0b600014613e125783600f0b600114613dc957604051600060248201819052604482015260648101849052608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401613bfc565b604051600060248201819052604482018590526064820152608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401613bfc565b604051602481018490526000604482018190526064820152608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401613cbc565b7f000000000000000000000000000000000000000000000000000000000000000060041415613fe55783600f0b600014613f955783600f0b600114613f455783600f0b600214613ef5576040516000602482018190526044820181905260648201526084810184905260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613bfc565b6040516000602482018190526044820181905260648201859052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613bfc565b6040516000602482018190526044820185905260648201819052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613bfc565b6040516024810184905260006044820181905260648201819052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613cbc565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f496e636f7272656374206e436f696e73000000000000000000000000000000006044820152606401610940565b8315614163576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561414a57600080fd5b505af115801561415e573d6000803e3d6000fd5b505050505b821561427f576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561426657600080fd5b505af115801561427a573d6000803e3d6000fd5b505050505b811561439b576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561438257600080fd5b505af1158015614396573d6000803e3d6000fd5b505050505b80156144b7576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561449e57600080fd5b505af11580156144b2573d6000803e3d6000fd5b505050505b50505050565b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815260609073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a906145569033907f0000000000000000000000000000000000000000000000000000000000000000908790600401614f3f565b6000604051808303816000875af1158015614575573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b0d9190810190614d73565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614613b85576040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b15801561468157600080fd5b505af11580156127a7573d6000803e3d6000fd5b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614614796576040517f654a9eda00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528681166024830152858116604483015260648201859052608482018490527f0000000000000000000000000000000000000000000000000000000000000000169063654a9eda9060a401600060405180830381600087803b15801561477957600080fd5b505af115801561478d573d6000803e3d6000fd5b50505050613637565b8015614846576040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015286811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b15801561482d57600080fd5b505af1158015614841573d6000803e3d6000fd5b505050505b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015285811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156148d757600080fd5b505af11580156148eb573d6000803e3d6000fd5b50505050505050505050565b60405180608001604052806004906020820280368337509192915050565b8060808101831015610b0d57600080fd5b60008060a0838503121561493957600080fd5b6149438484614915565b946080939093013593505050565b8035600f81900b8114610b1357600080fd5b60006020828403121561497557600080fd5b610c9882614951565b60005b83811015614999578181015183820152602001614981565b838111156144b75750506000910152565b600081518084526149c281602086016020860161497e565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610c9860208301846149aa565b600080600060608486031215614a1c57600080fd5b614a2584614951565b9250614a3360208501614951565b9150604084013590509250925092565b60808101818360005b6004811015614a6b578151835260209283019290910190600101614a4c565b50505092915050565b600080600060608486031215614a8957600080fd5b83359250614a3360208501614951565b60008060408385031215614aac57600080fd5b614ab583614951565b946020939093013593505050565b60008060008060808587031215614ad957600080fd5b614ae285614951565b9350614af060208601614951565b93969395505050506040820135916060013590565b600060208284031215614b1757600080fd5b5035919050565b60008060006101208486031215614b3457600080fd5b614b3e8585614915565b9250614b4d8560808601614915565b915061010084013590509250925092565b73ffffffffffffffffffffffffffffffffffffffff81168114613b8557600080fd5b600060208284031215614b9257600080fd5b8135610c9881614b5e565b60008060a08385031215614bb057600080fd5b82359150614bc18460208501614915565b90509250929050565b60008060408385031215614bdd57600080fd5b82359150614bc160208401614951565b6020810160118310614c28577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60008060a08385031215614c4157600080fd5b614c4b8484614915565b915060808301358015158114614c6057600080fd5b809150509250929050565b60008060408385031215614c7e57600080fd5b8235614c8981614b5e565b91506020830135614c6081614b5e565b600060208284031215614cab57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff80841115614cfc57614cfc614cb2565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715614d4257614d42614cb2565b81604052809350858152868686011115614d5b57600080fd5b614d6986602083018761497e565b5050509392505050565b600060208284031215614d8557600080fd5b815167ffffffffffffffff811115614d9c57600080fd5b8201601f81018413614dad57600080fd5b614dbc84825160208401614ce1565b949350505050565b600060808284031215614dd657600080fd5b82601f830112614de557600080fd5b6040516080810181811067ffffffffffffffff82111715614e0857614e08614cb2565b604052806080840185811115614e1d57600080fd5b845b81811015614e37578051835260209283019201614e1f565b509195945050505050565b600060208284031215614e5457600080fd5b8151610c9881614b5e565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ebe577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500290565b600082614ef9577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b610120810160808583376080820160008152608085823750610100919091019190915292915050565b60a08101608084833791151560809190910152919050565b600073ffffffffffffffffffffffffffffffffffffffff808616835280851660208401525060606040830152614f7860608301846149aa565b9594505050505056fea26469706673582212202cfa6940592b7cd1b1fb4eed6a97af4919d3bdbe1c8d89c62204ae78f5bc27ba64736f6c634300080a0033"; - -type CurveV1Adapter4AssetsConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: CurveV1Adapter4AssetsConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class CurveV1Adapter4Assets__factory extends ContractFactory { - constructor(...args: CurveV1Adapter4AssetsConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - _creditManager: string, - _curvePool: string, - _lp_token: string, - _metapoolBase: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - _creditManager, - _curvePool, - _lp_token, - _metapoolBase, - overrides || {} - ) as Promise; - } - override getDeployTransaction( - _creditManager: string, - _curvePool: string, - _lp_token: string, - _metapoolBase: string, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction( - _creditManager, - _curvePool, - _lp_token, - _metapoolBase, - overrides || {} - ); - } - override attach(address: string): CurveV1Adapter4Assets { - return super.attach(address) as CurveV1Adapter4Assets; - } - override connect(signer: Signer): CurveV1Adapter4Assets__factory { - return super.connect(signer) as CurveV1Adapter4Assets__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): CurveV1Adapter4AssetsInterface { - return new utils.Interface(_abi) as CurveV1Adapter4AssetsInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): CurveV1Adapter4Assets { - return new Contract( - address, - _abi, - signerOrProvider - ) as CurveV1Adapter4Assets; - } -} diff --git a/src/types/factories/contracts/adapters/curve/CurveV1_4.sol/index.ts b/src/types/factories/contracts/adapters/curve/CurveV1_4.sol/index.ts deleted file mode 100644 index 164f8abb..00000000 --- a/src/types/factories/contracts/adapters/curve/CurveV1_4.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { CurveV1Adapter4Assets__factory } from "./CurveV1Adapter4Assets__factory"; diff --git a/src/types/factories/contracts/adapters/curve/CurveV1_Base.sol/CurveV1AdapterBase__factory.ts b/src/types/factories/contracts/adapters/curve/CurveV1_Base.sol/CurveV1AdapterBase__factory.ts deleted file mode 100644 index 068dc3b1..00000000 --- a/src/types/factories/contracts/adapters/curve/CurveV1_Base.sol/CurveV1AdapterBase__factory.ts +++ /dev/null @@ -1,1003 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { - Signer, - utils, - Contract, - ContractFactory, - BigNumberish, - Overrides, -} from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - CurveV1AdapterBase, - CurveV1AdapterBaseInterface, -} from "../../../../../contracts/adapters/curve/CurveV1_Base.sol/CurveV1AdapterBase"; - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "_creditManager", - type: "address", - }, - { - internalType: "address", - name: "_curvePool", - type: "address", - }, - { - internalType: "address", - name: "_lp_token", - type: "address", - }, - { - internalType: "address", - name: "_metapoolBase", - type: "address", - }, - { - internalType: "uint256", - name: "_nCoins", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "IncorrectIndexException", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "TokenIsNotInAllowedList", - type: "error", - }, - { - inputs: [], - name: "ZeroAddressException", - type: "error", - }, - { - inputs: [], - name: "A", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "A_precise", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "_gearboxAdapterType", - outputs: [ - { - internalType: "enum AdapterType", - name: "", - type: "uint8", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "_gearboxAdapterVersion", - outputs: [ - { - internalType: "uint16", - name: "", - type: "uint16", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "uint256", - name: "rateMinRAY", - type: "uint256", - }, - ], - name: "add_all_liquidity_one_coin", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "uint256", - name: "minAmount", - type: "uint256", - }, - ], - name: "add_liquidity_one_coin", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "admin", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "i", - type: "uint256", - }, - ], - name: "admin_balances", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "admin_fee", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "owner", - type: "address", - }, - { - internalType: "address", - name: "spender", - type: "address", - }, - ], - name: "allowance", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - ], - name: "balances", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "i", - type: "uint256", - }, - ], - name: "balances", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "block_timestamp_last", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_burn_amount", - type: "uint256", - }, - { - internalType: "int128", - name: "i", - type: "int128", - }, - ], - name: "calc_withdraw_one_coin", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - ], - name: "coins", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "i", - type: "uint256", - }, - ], - name: "coins", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditFacade", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditManager", - outputs: [ - { - internalType: "contract ICreditManagerV2", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "decimals", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "int128", - name: "j", - type: "int128", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "exchange", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "int128", - name: "j", - type: "int128", - }, - { - internalType: "uint256", - name: "rateMinRAY", - type: "uint256", - }, - ], - name: "exchange_all", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "int128", - name: "j", - type: "int128", - }, - { - internalType: "uint256", - name: "rateMinRAY", - type: "uint256", - }, - ], - name: "exchange_all_underlying", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "int128", - name: "j", - type: "int128", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "exchange_underlying", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "fee", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "future_A", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "future_A_time", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "int128", - name: "j", - type: "int128", - }, - { - internalType: "uint256", - name: "dx", - type: "uint256", - }, - ], - name: "get_dy", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "int128", - name: "j", - type: "int128", - }, - { - internalType: "uint256", - name: "dx", - type: "uint256", - }, - ], - name: "get_dy_underlying", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "get_virtual_price", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "initial_A", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "initial_A_time", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "lp_token", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "metapoolBase", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "nCoins", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "uint256", - name: "minRateRAY", - type: "uint256", - }, - ], - name: "remove_all_liquidity_one_coin", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "remove_liquidity_one_coin", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "symbol", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "targetContract", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "token", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "token0", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "token1", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "token2", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "token3", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "totalSupply", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "underlying0", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "underlying1", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "underlying2", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "underlying3", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - ], - name: "underlying_coins", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "i", - type: "uint256", - }, - ], - name: "underlying_coins", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x6102606040523480156200001257600080fd5b506040516200465e3803806200465e833981016040819052620000359162000b9a565b84846001600160a01b03821615806200005557506001600160a01b038116155b156200007457604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038216608081905260408051632f7a188160e01b81529051632f7a1881916004808201926020929091908290030181865afa158015620000bf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e5919062000c01565b6001600160a01b0390811660a05290811660c05260016000558416151590506200012257604051635919af9760e11b815260040160405180910390fd5b608051604051630f67c5bd60e41b81526001600160a01b0385811660048301529091169063f67c5bd090602401602060405180830381865afa1580156200016d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000193919062000c26565b620001c157604051634c607af960e11b81526001600160a01b03841660048201526024015b60405180910390fd5b6001600160a01b038084166101e081905261020052821661022052610240819052620001ee600062000900565b6001600160a01b031660e05262000206600162000900565b6001600160a01b0316610100526200021f600262000900565b6001600160a01b03166101205262000238600362000900565b6001600160a01b031661014052620002516000620009f3565b6001600160a01b0316610160526200026a6001620009f3565b6001600160a01b031661018052620002836002620009f3565b6001600160a01b03166101a0526200029c6003620009f3565b6001600160a01b039081166101c05260e051161580620002c65750610100516001600160a01b0316155b15620002e557604051635919af9760e11b815260040160405180910390fd5b600281118015620003005750610120516001600160a01b0316155b156200031f57604051635919af9760e11b815260040160405180910390fd5b6003811180156200033a5750610140516001600160a01b0316155b156200035957604051635919af9760e11b815260040160405180910390fd5b60805160e051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620003a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003cc919062000c26565b620003fa5760e051604051634c607af960e11b81526001600160a01b039091166004820152602401620001b8565b60805161010051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa15801562000448573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200046e919062000c26565b6200049d5761010051604051634c607af960e11b81526001600160a01b039091166004820152602401620001b8565b6002811180156200051f575060805161012051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620004f7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200051d919062000c26565b155b156200054f5761012051604051634c607af960e11b81526001600160a01b039091166004820152602401620001b8565b600381118015620005d1575060805161014051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620005a9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005cf919062000c26565b155b15620006015761014051604051634c607af960e11b81526001600160a01b039091166004820152602401620001b8565b610160516001600160a01b0316158015906200068e575060805161016051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa15801562000666573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200068c919062000c26565b155b15620006be5761016051604051634c607af960e11b81526001600160a01b039091166004820152602401620001b8565b610180516001600160a01b0316158015906200074b575060805161018051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa15801562000723573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000749919062000c26565b155b156200077b5761018051604051634c607af960e11b81526001600160a01b039091166004820152602401620001b8565b6101a0516001600160a01b0316158015906200080857506080516101a051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620007e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000806919062000c26565b155b1562000838576101a051604051634c607af960e11b81526001600160a01b039091166004820152602401620001b8565b6101c0516001600160a01b031615801590620008c557506080516101c051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa1580156200089d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008c3919062000c26565b155b15620008f5576101c051604051634c607af960e11b81526001600160a01b039091166004820152602401620001b8565b505050505062000c66565b60c05160405163c661065760e01b8152600481018390526000916001600160a01b03169063c661065790602401602060405180830381865afa92505050801562000969575060408051601f3d908101601f19168201909252620009669181019062000c01565b60015b62000974576200097a565b92915050565b60c05160405163046e8dd760e31b8152600f84900b60048201526001600160a01b03909116906323746eb8906024015b602060405180830381865afa925050508015620009e6575060408051601f3d908101601f19168201909252620009e39181019062000c01565b60015b6200097457506000919050565b610220516000906001600160a01b03161562000a1457620009748262000ab6565b60c051604051630b9947eb60e41b8152600481018490526001600160a01b039091169063b9947eb090602401602060405180830381865afa92505050801562000a7c575060408051601f3d908101601f1916820190925262000a799181019062000c01565b60015b620009745760c051604051635b9cca9f60e11b8152600f84900b60048201526001600160a01b039091169063b739953e90602401620009aa565b60008162000aca5762000974600062000b0d565b610220516001600160a01b031663c661065762000ae960018562000c40565b6040518263ffffffff1660e01b8152600401620009aa91815260200190565b919050565b600081600f0b6000141562000b21575060e0515b81600f0b6001141562000b345750610100515b81600f0b6002141562000b475750610120515b81600f0b6003141562000b5a5750610140515b6001600160a01b03811662000b08576040516334769e6f60e21b815260040160405180910390fd5b80516001600160a01b038116811462000b0857600080fd5b600080600080600060a0868803121562000bb357600080fd5b62000bbe8662000b82565b945062000bce6020870162000b82565b935062000bde6040870162000b82565b925062000bee6060870162000b82565b9150608086015190509295509295909350565b60006020828403121562000c1457600080fd5b62000c1f8262000b82565b9392505050565b60006020828403121562000c3957600080fd5b5051919050565b60008282101562000c6157634e487b7160e01b600052601160045260246000fd5b500390565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e0516102005161022051610240516137af62000eaf600039600081816106c201528181612bab01528181612d620152612e7c015260006105430152600081816105da01528181611b1301528181611ed7015281816122470152818161292901526129c7015260006107cb015260008181610501015261234901526000818161037c015261231a01526000818161056a01526122eb01526000818161060101526122bc015260008181610794015261212101526000818161046a01526120f201526000818161072c01526120c30152600081816103f0015261209401526000818161067401528181610838015281816109050152818161099501528181610a8d01528181610b1c01528181610bad01528181610fc00152818161103801528181611238015281816112800152818161132d01528181611375015281816114260152818161145b015281816117440152818161183b015281816118b30152818161195801528181611ba301528181611bd801528181611c7301528181611f1c01528181611f890152818161201a01528181612567015281816126860152612760015260008181610491015281816123d2015261307e01526000818161069b01528181610d500152818161156601528181611a9f01528181611d7d015281816121bf015281816125bd01528181612657015281816127b60152818161285e01528181612b2101528181613106015281816131ba015261326401526137af6000f3fe608060405234801561001057600080fd5b506004361061034c5760003560e01c806379bea664116101bd578063cc2b27d7116100f9578063e2e7d264116100a2578063f446c1d01161007c578063f446c1d0146107b6578063f851a440146107be578063fc0c546a146107c6578063fee3f7f9146107ed57600080fd5b8063e2e7d26414610769578063ec026ca71461077c578063ef14101e1461078f57600080fd5b8063d21220a7116100d3578063d21220a714610727578063dd62ed3e1461074e578063ddca3f431461076157600080fd5b8063cc2b27d7146106f2578063ce30bbdb14610705578063cf023dd01461071457600080fd5b8063b739953e11610166578063bd90df7011610140578063bd90df701461066f578063c12c21c014610696578063c21ee162146106bd578063c6610657146106e457600080fd5b8063b739953e14610646578063b9947eb014610659578063bb7b8b801461066757600080fd5b806395d89b411161019757806395d89b4114610623578063a6417ed61461062b578063b4b577ad1461063e57600080fd5b806379bea664146105c257806382c63066146105d55780638ba51dfc146105fc57600080fd5b8063313ce5671161028c5780635e0d443f116102355780636e1d82711161020f5780636e1d82711461056557806370a082311461058c57806376a2f0f01461059f57806378aa73a4146105a757600080fd5b80635e0d443f1461052357806363543f061461053657806364a89bca1461053e57600080fd5b80634903b0d1116102665780634903b0d1146104e15780635409491a146104f457806357d78875146104fc57600080fd5b8063313ce567146104b357806333d2ebf2146104bb5780633df02124146104ce57600080fd5b806318160ddd116102f95780632081066c116102d35780632081066c1461044a57806323746eb81461045257806325be124e146104655780632f7a18811461048c57600080fd5b806318160ddd1461041a5780631a4d01d2146104225780631af4de831461043757600080fd5b806307211ef71161032a57806307211ef7146103d85780630dfe1681146103eb578063140522881461041257600080fd5b8063065a80d814610351578063068711631461037757806306fdde03146103c3575b600080fd5b61036461035f3660046132da565b6107f5565b6040519081526020015b60405180910390f35b61039e7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161036e565b6103cb610991565b60405161036e919061336f565b6103646103e6366004613382565b610a49565b61039e7f000000000000000000000000000000000000000000000000000000000000000081565b610364610b18565b610364610ba9565b6104356104303660046133be565b610c16565b005b610435610445366004613382565b610cae565b610364610fbc565b61039e6104603660046132da565b611029565b61039e7f000000000000000000000000000000000000000000000000000000000000000081565b61039e7f000000000000000000000000000000000000000000000000000000000000000081565b610364611034565b6104356104c93660046133e3565b6110a1565b6104356104dc36600461340d565b611135565b6103646104ef36600461344f565b611206565b61036461127c565b61039e7f000000000000000000000000000000000000000000000000000000000000000081565b610364610531366004613382565b6112e9565b610364611371565b61039e7f000000000000000000000000000000000000000000000000000000000000000081565b61039e7f000000000000000000000000000000000000000000000000000000000000000081565b61036461059a36600461348d565b6113de565b610364611457565b6105af600281565b60405161ffff909116815260200161036e565b6104356105d0366004613382565b6114c4565b61039e7f000000000000000000000000000000000000000000000000000000000000000081565b61039e7f000000000000000000000000000000000000000000000000000000000000000081565b6103cb611740565b61043561063936600461340d565b6117ad565b610364611837565b61039e6106543660046132da565b6118a4565b61039e61065436600461344f565b6103646118af565b61039e7f000000000000000000000000000000000000000000000000000000000000000081565b61039e7f000000000000000000000000000000000000000000000000000000000000000081565b6103647f000000000000000000000000000000000000000000000000000000000000000081565b61039e61046036600461344f565b6103646107003660046134aa565b61191c565b600360405161036e91906134d6565b6104356107223660046133be565b6119d9565b61039e7f000000000000000000000000000000000000000000000000000000000000000081565b61036461075c366004613517565b611b53565b610364611bd4565b61036461077736600461344f565b611c41565b61043561078a3660046133e3565b611cb7565b61039e7f000000000000000000000000000000000000000000000000000000000000000081565b610364611f18565b61039e611f85565b61039e7f000000000000000000000000000000000000000000000000000000000000000081565b610364612016565b6040517f4903b0d10000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff821660048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634903b0d1906024015b602060405180830381865afa9250505080156108cf575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526108cc91810190613550565b60015b610986576040517f065a80d8000000000000000000000000000000000000000000000000000000008152600f83900b60048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063065a80d8906024015b602060405180830381865afa158015610962573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109869190613550565b92915050565b919050565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156109fe573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610a44919081019061362a565b905090565b6040517f07211ef7000000000000000000000000000000000000000000000000000000008152600f84810b600483015283900b6024820152604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906307211ef7906064015b602060405180830381865afa158015610aea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0e9190613550565b90505b9392505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663140522886040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a449190613550565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b85573d6000803e3d6000fd5b60026000541415610c88576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b60026000908155610c9883612083565b9050610ca38161218e565b505060016000555050565b60026000541415610d1b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c7f565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610dac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dd0919061367b565b90506000610ddd856122ab565b90506000610dea856122ab565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529192506000918416906370a0823190602401602060405180830381865afa158015610e5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e809190613550565b90506001811115610fae577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce8000000610ec68784613698565b610ed091906136fc565b604051600f8a810b602483015289900b60448201526064810184905260848101829052909150610fab908690869086907fa6417ed6000000000000000000000000000000000000000000000000000000009060a4015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526001806123b5565b50505b505060016000555050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632081066c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b85573d6000803e3d6000fd5b600061098682612083565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b85573d6000803e3d6000fd5b6002600054141561110e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c7f565b6002600090815561111e83612083565b905061112b83828461282d565b5050600160005550565b600260005414156111a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c7f565b600260009081556111b285612083565b905060006111bf85612083565b9050610fae82826000368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250600193509150612ad89050565b6040517f4903b0d1000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634903b0d190602401610878565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635409491a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b85573d6000803e3d6000fd5b6040517f5e0d443f000000000000000000000000000000000000000000000000000000008152600f84810b600483015283900b6024820152604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635e0d443f90606401610acd565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166363543f066040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b85573d6000803e3d6000fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401610945565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166376a2f0f06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b85573d6000803e3d6000fd5b60026000541415611531576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c7f565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156115c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e6919061367b565b905060006115f385612083565b9050600061160085612083565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529192506000918416906370a0823190602401602060405180830381865afa158015611672573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116969190613550565b90506001811115610fae577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce80000006116dc8784613698565b6116e691906136fc565b604051600f8a810b602483015289900b60448201526064810184905260848101829052909150610fab908690869086907f3df02124000000000000000000000000000000000000000000000000000000009060a401610f26565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156109fe573d6000803e3d6000fd5b6002600054141561181a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c7f565b6002600090815561182a856122ab565b905060006111bf856122ab565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b4b577ad6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b85573d6000803e3d6000fd5b6000610986826122ab565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb7b8b806040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b85573d6000803e3d6000fd5b6040517fcc2b27d700000000000000000000000000000000000000000000000000000000815260048101839052600f82900b60248201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063cc2b27d7906044015b602060405180830381865afa1580156119b5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b119190613550565b60026000541415611a46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c7f565b60026000908155611a5683612083565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0a919061367b565b9050611b4681837f0000000000000000000000000000000000000000000000000000000000000000611b3d888a89612ba7565b600160006123b5565b5050600160005550505050565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063dd62ed3e90604401611998565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b85573d6000803e3d6000fd5b6040517fe2e7d264000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e2e7d26490602401610945565b60026000541415611d24576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c7f565b60026000908155611d3483612083565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611dc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de8919061367b565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000918416906370a0823190602401602060405180830381865afa158015611e5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7e9190613550565b90506001811115611f0c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce8000000611ec48684613698565b611ece91906136fc565b9050611f0983857f0000000000000000000000000000000000000000000000000000000000000000611f018a8787612ba7565b6001806123b5565b50505b50506001600055505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f446c1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b85573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ff2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a44919061367b565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fee3f7f96040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b85573d6000803e3d6000fd5b600081600f0b600014156120b457507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b600114156120e357507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6002141561211257507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6003141561214157507f00000000000000000000000000000000000000000000000000000000000000005b73ffffffffffffffffffffffffffffffffffffffff811661098c576040517fd1da79bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa15801561221b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061223f919061367b565b90506122a6817f0000000000000000000000000000000000000000000000000000000000000000846000368080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525092508291506123b59050565b505050565b600081600f0b600014156122dc57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6001141561230b57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6002141561233a57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6003141561214157507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff811661098c576040517fd1da79bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606000803373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461251e576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301528916906370a0823190602401602060405180830381865afa158015612463573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124879190613550565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152919350908816906370a0823190602401602060405180830381865afa1580156124f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251b9190613550565b90505b841561261a576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561260157600080fd5b505af1158015612615573d6000803e3d6000fd5b505050505b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a906126b09033907f0000000000000000000000000000000000000000000000000000000000000000908b90600401613737565b6000604051808303816000875af11580156126cf573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052612715919081019061362a565b92508415612813576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156127fa57600080fd5b505af115801561280e573d6000803e3d6000fd5b505050505b612821898989858589613066565b50509695505050505050565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156128ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128de919061367b565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000917f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015612970573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129949190613550565b90506001811115612ad1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01612acf827f0000000000000000000000000000000000000000000000000000000000000000867f1a4d01d200000000000000000000000000000000000000000000000000000000858a6b033b2e3c9fd0803ce8000000612a218b84613698565b612a2b91906136fc565b6040516024810193909352600f9190910b60448301526064820152608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152600060016123b5565b505b5050505050565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015260609060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015612b68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b8c919061367b565b9050612b9c8188888888886123b5565b979650505050505050565b60607f000000000000000000000000000000000000000000000000000000000000000060021415612d605783600f0b600014612c9d576040516000602482015260448101849052606481018390527f0b4c7e4d00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612d59565b6040516024810184905260006044820152606481018390527f0b4c7e4d00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091525b9050610b11565b7f000000000000000000000000000000000000000000000000000000000000000060031415612e7a5783600f0b600014612e315783600f0b600114612de857604051600060248201819052604482015260648101849052608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401612c1b565b604051600060248201819052604482018590526064820152608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401612c1b565b604051602481018490526000604482018190526064820152608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401612cdb565b7f0000000000000000000000000000000000000000000000000000000000000000600414156130045783600f0b600014612fb45783600f0b600114612f645783600f0b600214612f14576040516000602482018190526044820181905260648201526084810184905260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401612c1b565b6040516000602482018190526044820181905260648201859052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401612c1b565b6040516000602482018190526044820185905260648201819052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401612c1b565b6040516024810184905260006044820181905260648201819052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401612cdb565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f496e636f7272656374206e436f696e73000000000000000000000000000000006044820152606401610c7f565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614613167576040517f654a9eda00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528681166024830152858116604483015260648201859052608482018490527f0000000000000000000000000000000000000000000000000000000000000000169063654a9eda9060a401600060405180830381600087803b15801561314a57600080fd5b505af115801561315e573d6000803e3d6000fd5b50505050612acf565b8015613217576040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015286811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b1580156131fe57600080fd5b505af1158015613212573d6000803e3d6000fd5b505050505b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015285811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156132a857600080fd5b505af11580156132bc573d6000803e3d6000fd5b50505050505050505050565b8035600f81900b811461098c57600080fd5b6000602082840312156132ec57600080fd5b610b11826132c8565b60005b838110156133105781810151838201526020016132f8565b8381111561331f576000848401525b50505050565b6000815180845261333d8160208601602086016132f5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610b116020830184613325565b60008060006060848603121561339757600080fd5b6133a0846132c8565b92506133ae602085016132c8565b9150604084013590509250925092565b6000806000606084860312156133d357600080fd5b833592506133ae602085016132c8565b600080604083850312156133f657600080fd5b6133ff836132c8565b946020939093013593505050565b6000806000806080858703121561342357600080fd5b61342c856132c8565b935061343a602086016132c8565b93969395505050506040820135916060013590565b60006020828403121561346157600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461348a57600080fd5b50565b60006020828403121561349f57600080fd5b8135610b1181613468565b600080604083850312156134bd57600080fd5b823591506134cd602084016132c8565b90509250929050565b6020810160118310613511577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000806040838503121561352a57600080fd5b823561353581613468565b9150602083013561354581613468565b809150509250929050565b60006020828403121561356257600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff808411156135b3576135b3613569565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019082821181831017156135f9576135f9613569565b8160405280935085815286868601111561361257600080fd5b6136208660208301876132f5565b5050509392505050565b60006020828403121561363c57600080fd5b815167ffffffffffffffff81111561365357600080fd5b8201601f8101841361366457600080fd5b61367384825160208401613598565b949350505050565b60006020828403121561368d57600080fd5b8151610b1181613468565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156136f7577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500290565b600082613732577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600073ffffffffffffffffffffffffffffffffffffffff8086168352808516602084015250606060408301526137706060830184613325565b9594505050505056fea264697066735822122051074fd8cf58ca5bb49685589b34462a809a6a5e78b8280b154f4733c0eb0c5964736f6c634300080a0033"; - -type CurveV1AdapterBaseConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: CurveV1AdapterBaseConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class CurveV1AdapterBase__factory extends ContractFactory { - constructor(...args: CurveV1AdapterBaseConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - _creditManager: string, - _curvePool: string, - _lp_token: string, - _metapoolBase: string, - _nCoins: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - _creditManager, - _curvePool, - _lp_token, - _metapoolBase, - _nCoins, - overrides || {} - ) as Promise; - } - override getDeployTransaction( - _creditManager: string, - _curvePool: string, - _lp_token: string, - _metapoolBase: string, - _nCoins: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction( - _creditManager, - _curvePool, - _lp_token, - _metapoolBase, - _nCoins, - overrides || {} - ); - } - override attach(address: string): CurveV1AdapterBase { - return super.attach(address) as CurveV1AdapterBase; - } - override connect(signer: Signer): CurveV1AdapterBase__factory { - return super.connect(signer) as CurveV1AdapterBase__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): CurveV1AdapterBaseInterface { - return new utils.Interface(_abi) as CurveV1AdapterBaseInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): CurveV1AdapterBase { - return new Contract(address, _abi, signerOrProvider) as CurveV1AdapterBase; - } -} diff --git a/src/types/factories/contracts/adapters/curve/CurveV1_Base.sol/index.ts b/src/types/factories/contracts/adapters/curve/CurveV1_Base.sol/index.ts deleted file mode 100644 index b3e4bd78..00000000 --- a/src/types/factories/contracts/adapters/curve/CurveV1_Base.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { CurveV1AdapterBase__factory } from "./CurveV1AdapterBase__factory"; diff --git a/src/types/factories/contracts/adapters/curve/CurveV1_DepositZap.sol/CurveV1AdapterDeposit__factory.ts b/src/types/factories/contracts/adapters/curve/CurveV1_DepositZap.sol/CurveV1AdapterDeposit__factory.ts deleted file mode 100644 index 0dcd2c04..00000000 --- a/src/types/factories/contracts/adapters/curve/CurveV1_DepositZap.sol/CurveV1AdapterDeposit__factory.ts +++ /dev/null @@ -1,998 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { - Signer, - utils, - Contract, - ContractFactory, - BigNumberish, - Overrides, -} from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - CurveV1AdapterDeposit, - CurveV1AdapterDepositInterface, -} from "../../../../../contracts/adapters/curve/CurveV1_DepositZap.sol/CurveV1AdapterDeposit"; - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "_creditManager", - type: "address", - }, - { - internalType: "address", - name: "_curveDeposit", - type: "address", - }, - { - internalType: "address", - name: "_lp_token", - type: "address", - }, - { - internalType: "uint256", - name: "_nCoins", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "IncorrectIndexException", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "TokenIsNotInAllowedList", - type: "error", - }, - { - inputs: [], - name: "ZeroAddressException", - type: "error", - }, - { - inputs: [], - name: "A", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "A_precise", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "_gearboxAdapterType", - outputs: [ - { - internalType: "enum AdapterType", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "_gearboxAdapterVersion", - outputs: [ - { - internalType: "uint16", - name: "", - type: "uint16", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "uint256", - name: "rateMinRAY", - type: "uint256", - }, - ], - name: "add_all_liquidity_one_coin", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "uint256", - name: "minAmount", - type: "uint256", - }, - ], - name: "add_liquidity_one_coin", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "admin", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "i", - type: "uint256", - }, - ], - name: "admin_balances", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "admin_fee", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "owner", - type: "address", - }, - { - internalType: "address", - name: "spender", - type: "address", - }, - ], - name: "allowance", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - ], - name: "balances", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "i", - type: "uint256", - }, - ], - name: "balances", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "block_timestamp_last", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_burn_amount", - type: "uint256", - }, - { - internalType: "int128", - name: "i", - type: "int128", - }, - ], - name: "calc_withdraw_one_coin", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - ], - name: "coins", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "i", - type: "uint256", - }, - ], - name: "coins", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditFacade", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditManager", - outputs: [ - { - internalType: "contract ICreditManagerV2", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "decimals", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "int128", - name: "j", - type: "int128", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "exchange", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "int128", - name: "j", - type: "int128", - }, - { - internalType: "uint256", - name: "rateMinRAY", - type: "uint256", - }, - ], - name: "exchange_all", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "int128", - name: "j", - type: "int128", - }, - { - internalType: "uint256", - name: "rateMinRAY", - type: "uint256", - }, - ], - name: "exchange_all_underlying", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "int128", - name: "j", - type: "int128", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "exchange_underlying", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "fee", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "future_A", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "future_A_time", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "int128", - name: "j", - type: "int128", - }, - { - internalType: "uint256", - name: "dx", - type: "uint256", - }, - ], - name: "get_dy", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "int128", - name: "j", - type: "int128", - }, - { - internalType: "uint256", - name: "dx", - type: "uint256", - }, - ], - name: "get_dy_underlying", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "get_virtual_price", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "initial_A", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "initial_A_time", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "lp_token", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "metapoolBase", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "nCoins", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "uint256", - name: "minRateRAY", - type: "uint256", - }, - ], - name: "remove_all_liquidity_one_coin", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "remove_liquidity_one_coin", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "symbol", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "targetContract", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "token", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "token0", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "token1", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "token2", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "token3", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "totalSupply", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "underlying0", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "underlying1", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "underlying2", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "underlying3", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - ], - name: "underlying_coins", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "i", - type: "uint256", - }, - ], - name: "underlying_coins", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x6102606040523480156200001257600080fd5b5060405162004af338038062004af3833981016040819052620000359162000ba4565b83838360008484846001600160a01b03821615806200005b57506001600160a01b038116155b156200007a57604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038216608081905260408051632f7a188160e01b81529051632f7a1881916004808201926020929091908290030181865afa158015620000c5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000eb919062000bf6565b6001600160a01b0390811660a05290811660c05260016000558416151590506200012857604051635919af9760e11b815260040160405180910390fd5b608051604051630f67c5bd60e41b81526001600160a01b0385811660048301529091169063f67c5bd090602401602060405180830381865afa15801562000173573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000199919062000c1b565b620001c757604051634c607af960e11b81526001600160a01b03841660048201526024015b60405180910390fd5b6001600160a01b038084166101e081905261020052821661022052610240819052620001f460006200090a565b6001600160a01b031660e0526200020c60016200090a565b6001600160a01b0316610100526200022560026200090a565b6001600160a01b0316610120526200023e60036200090a565b6001600160a01b031661014052620002576000620009fd565b6001600160a01b031661016052620002706001620009fd565b6001600160a01b031661018052620002896002620009fd565b6001600160a01b03166101a052620002a26003620009fd565b6001600160a01b039081166101c05260e051161580620002cc5750610100516001600160a01b0316155b15620002eb57604051635919af9760e11b815260040160405180910390fd5b600281118015620003065750610120516001600160a01b0316155b156200032557604051635919af9760e11b815260040160405180910390fd5b600381118015620003405750610140516001600160a01b0316155b156200035f57604051635919af9760e11b815260040160405180910390fd5b60805160e051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620003ac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003d2919062000c1b565b620004005760e051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b60805161010051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa1580156200044e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000474919062000c1b565b620004a35761010051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b60028111801562000525575060805161012051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620004fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000523919062000c1b565b155b15620005555761012051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b600381118015620005d7575060805161014051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620005af573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005d5919062000c1b565b155b15620006075761014051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b610160516001600160a01b03161580159062000694575060805161016051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa1580156200066c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000692919062000c1b565b155b15620006c45761016051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b610180516001600160a01b03161580159062000751575060805161018051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa15801562000729573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200074f919062000c1b565b155b15620007815761018051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b6101a0516001600160a01b0316158015906200080e57506080516101a051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620007e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200080c919062000c1b565b155b156200083e576101a051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b6101c0516001600160a01b031615801590620008cb57506080516101c051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620008a3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008c9919062000c1b565b155b15620008fb576101c051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b50505050505050505062000c5b565b60c05160405163c661065760e01b8152600481018390526000916001600160a01b03169063c661065790602401602060405180830381865afa92505050801562000973575060408051601f3d908101601f19168201909252620009709181019062000bf6565b60015b6200097e5762000984565b92915050565b60c05160405163046e8dd760e31b8152600f84900b60048201526001600160a01b03909116906323746eb8906024015b602060405180830381865afa925050508015620009f0575060408051601f3d908101601f19168201909252620009ed9181019062000bf6565b60015b6200097e57506000919050565b610220516000906001600160a01b03161562000a1e576200097e8262000ac0565b60c051604051630b9947eb60e41b8152600481018490526001600160a01b039091169063b9947eb090602401602060405180830381865afa92505050801562000a86575060408051601f3d908101601f1916820190925262000a839181019062000bf6565b60015b6200097e5760c051604051635b9cca9f60e11b8152600f84900b60048201526001600160a01b039091169063b739953e90602401620009b4565b60008162000ad4576200097e600062000b17565b610220516001600160a01b031663c661065762000af360018562000c35565b6040518263ffffffff1660e01b8152600401620009b491815260200190565b919050565b600081600f0b6000141562000b2b575060e0515b81600f0b6001141562000b3e5750610100515b81600f0b6002141562000b515750610120515b81600f0b6003141562000b645750610140515b6001600160a01b03811662000b12576040516334769e6f60e21b815260040160405180910390fd5b80516001600160a01b038116811462000b1257600080fd5b6000806000806080858703121562000bbb57600080fd5b62000bc68562000b8c565b935062000bd66020860162000b8c565b925062000be66040860162000b8c565b6060959095015193969295505050565b60006020828403121562000c0957600080fd5b62000c148262000b8c565b9392505050565b60006020828403121562000c2e57600080fd5b5051919050565b60008282101562000c5657634e487b7160e01b600052601160045260246000fd5b500390565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e051610200516102205161024051613bfb62000ef8600039600081816106c201528181612ff7015281816131ae01526132c8015260006105430152600081816105da01528181610cfe01528181610e2a015281816113ad015281816114db01528181611f6c015281816123230152818161269301528181612d750152612e13015260006107d1015260008181610501015261279501526000818161037c015261276601526000818161056a0152612737015260008181610601015261270801526000818161079a015261256d01526000818161046a015261253e015260008181610732015261250f0152600081816103f001526124e00152600081816106740152818161083e0152818161090b0152818161099b01528181610a9301528181610b2201528181610bb301528181610cd601528181610e02015281816111ef0152818161126701528181611385015281816114b301528181611691015281816116d901528181611786015281816117ce0152818161187f015281816118b401528181611b9d01528181611c9401528181611d0c01528181611db101528181611fef01528181612024015281816120bf01528181612368015281816123d501528181612466015281816129b301528181612ad20152612bac0152600081816104910152818161281e01526134ca01526000818161069b01528181610d4c01528181610e7801528181610f80015281816113fb01528181611529015281816119bf01528181611ef8015281816121c90152818161260b01528181612a0901528181612aa301528181612c0201528181612caa01528181612f6d015281816135520152818161360601526136b00152613bfb6000f3fe608060405234801561001057600080fd5b506004361061034c5760003560e01c806379bea664116101bd578063cc2b27d7116100f9578063e2e7d264116100a2578063f446c1d01161007c578063f446c1d0146107bc578063f851a440146107c4578063fc0c546a146107cc578063fee3f7f9146107f357600080fd5b8063e2e7d2641461076f578063ec026ca714610782578063ef14101e1461079557600080fd5b8063d21220a7116100d3578063d21220a71461072d578063dd62ed3e14610754578063ddca3f431461076757600080fd5b8063cc2b27d7146106f2578063ce30bbdb14610705578063cf023dd01461071a57600080fd5b8063b739953e11610166578063bd90df7011610140578063bd90df701461066f578063c12c21c014610696578063c21ee162146106bd578063c6610657146106e457600080fd5b8063b739953e14610646578063b9947eb014610659578063bb7b8b801461066757600080fd5b806395d89b411161019757806395d89b4114610623578063a6417ed61461062b578063b4b577ad1461063e57600080fd5b806379bea664146105c257806382c63066146105d55780638ba51dfc146105fc57600080fd5b8063313ce5671161028c5780635e0d443f116102355780636e1d82711161020f5780636e1d82711461056557806370a082311461058c57806376a2f0f01461059f57806378aa73a4146105a757600080fd5b80635e0d443f1461052357806363543f061461053657806364a89bca1461053e57600080fd5b80634903b0d1116102665780634903b0d1146104e15780635409491a146104f457806357d78875146104fc57600080fd5b8063313ce567146104b357806333d2ebf2146104bb5780633df02124146104ce57600080fd5b806318160ddd116102f95780632081066c116102d35780632081066c1461044a57806323746eb81461045257806325be124e146104655780632f7a18811461048c57600080fd5b806318160ddd1461041a5780631a4d01d2146104225780631af4de831461043757600080fd5b806307211ef71161032a57806307211ef7146103d85780630dfe1681146103eb578063140522881461041257600080fd5b8063065a80d814610351578063068711631461037757806306fdde03146103c3575b600080fd5b61036461035f366004613726565b6107fb565b6040519081526020015b60405180910390f35b61039e7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161036e565b6103cb610997565b60405161036e91906137bb565b6103646103e63660046137ce565b610a4f565b61039e7f000000000000000000000000000000000000000000000000000000000000000081565b610364610b1e565b610364610baf565b61043561043036600461380a565b610c1c565b005b6104356104453660046137ce565b610ede565b6103646111eb565b61039e610460366004613726565b611258565b61039e7f000000000000000000000000000000000000000000000000000000000000000081565b61039e7f000000000000000000000000000000000000000000000000000000000000000081565b610364611263565b6104356104c936600461382f565b6112d0565b6104356104dc366004613859565b61158e565b6103646104ef36600461389b565b61165f565b6103646116d5565b61039e7f000000000000000000000000000000000000000000000000000000000000000081565b6103646105313660046137ce565b611742565b6103646117ca565b61039e7f000000000000000000000000000000000000000000000000000000000000000081565b61039e7f000000000000000000000000000000000000000000000000000000000000000081565b61036461059a3660046138d9565b611837565b6103646118b0565b6105af600281565b60405161ffff909116815260200161036e565b6104356105d03660046137ce565b61191d565b61039e7f000000000000000000000000000000000000000000000000000000000000000081565b61039e7f000000000000000000000000000000000000000000000000000000000000000081565b6103cb611b99565b610435610639366004613859565b611c06565b610364611c90565b61039e610654366004613726565b611cfd565b61039e61065436600461389b565b610364611d08565b61039e7f000000000000000000000000000000000000000000000000000000000000000081565b61039e7f000000000000000000000000000000000000000000000000000000000000000081565b6103647f000000000000000000000000000000000000000000000000000000000000000081565b61039e61046036600461389b565b6103646107003660046138f6565b611d75565b61070d600981565b60405161036e9190613922565b61043561072836600461380a565b611e32565b61039e7f000000000000000000000000000000000000000000000000000000000000000081565b610364610762366004613963565b611f9f565b610364612020565b61036461077d36600461389b565b61208d565b61043561079036600461382f565b612103565b61039e7f000000000000000000000000000000000000000000000000000000000000000081565b610364612364565b61039e6123d1565b61039e7f000000000000000000000000000000000000000000000000000000000000000081565b610364612462565b6040517f4903b0d10000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff821660048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634903b0d1906024015b602060405180830381865afa9250505080156108d5575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526108d29181019061399c565b60015b61098c576040517f065a80d8000000000000000000000000000000000000000000000000000000008152600f83900b60048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063065a80d8906024015b602060405180830381865afa158015610968573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061098c919061399c565b92915050565b919050565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015610a04573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610a4a9190810190613a76565b905090565b6040517f07211ef7000000000000000000000000000000000000000000000000000000008152600f84810b600483015283900b6024820152604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906307211ef7906064015b602060405180830381865afa158015610af0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b14919061399c565b90505b9392505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663140522886040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4a919061399c565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b8b573d6000803e3d6000fd5b60026000541415610c8e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b60026000556040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015610d9057600080fd5b505af1158015610da4573d6000803e3d6000fd5b505050506000610db3836124cf565b9050610dbe816125da565b506040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015610ebc57600080fd5b505af1158015610ed0573d6000803e3d6000fd5b505060016000555050505050565b60026000541415610f4b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c85565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610fdc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110009190613ac7565b9050600061100d856126f7565b9050600061101a856126f7565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529192506000918416906370a0823190602401602060405180830381865afa15801561108c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b0919061399c565b90506001811115610ed0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce80000006110f68784613ae4565b6111009190613b48565b604051600f8a810b602483015289900b604482015260648101849052608481018290529091506111db908690869086907fa6417ed6000000000000000000000000000000000000000000000000000000009060a4015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152600180612801565b5050505060016000555050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632081066c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b8b573d6000803e3d6000fd5b600061098c826124cf565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b8b573d6000803e3d6000fd5b6002600054141561133d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c85565b60026000556040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561143f57600080fd5b505af1158015611453573d6000803e3d6000fd5b505050506000611462836124cf565b905061146f838284612c79565b506040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561156d57600080fd5b505af1158015611581573d6000803e3d6000fd5b5050600160005550505050565b600260005414156115fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c85565b6002600090815561160b856124cf565b90506000611618856124cf565b9050610ed082826000368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250600193509150612f249050565b6040517f4903b0d1000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634903b0d19060240161087e565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635409491a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b8b573d6000803e3d6000fd5b6040517f5e0d443f000000000000000000000000000000000000000000000000000000008152600f84810b600483015283900b6024820152604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635e0d443f90606401610ad3565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166363543f066040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b8b573d6000803e3d6000fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a082319060240161094b565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166376a2f0f06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b8b573d6000803e3d6000fd5b6002600054141561198a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c85565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611a1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a3f9190613ac7565b90506000611a4c856124cf565b90506000611a59856124cf565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529192506000918416906370a0823190602401602060405180830381865afa158015611acb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aef919061399c565b90506001811115610ed0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce8000000611b358784613ae4565b611b3f9190613b48565b604051600f8a810b602483015289900b604482015260648101849052608481018290529091506111db908690869086907f3df02124000000000000000000000000000000000000000000000000000000009060a401611156565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610a04573d6000803e3d6000fd5b60026000541415611c73576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c85565b60026000908155611c83856126f7565b90506000611618856126f7565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b4b577ad6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b8b573d6000803e3d6000fd5b600061098c826126f7565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb7b8b806040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b8b573d6000803e3d6000fd5b6040517fcc2b27d700000000000000000000000000000000000000000000000000000000815260048101839052600f82900b60248201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063cc2b27d7906044015b602060405180830381865afa158015611e0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b17919061399c565b60026000541415611e9f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c85565b60026000908155611eaf836124cf565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611f3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f639190613ac7565b905061158181837f0000000000000000000000000000000000000000000000000000000000000000611f96888a89612ff3565b60016000612801565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063dd62ed3e90604401611df1565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b8b573d6000803e3d6000fd5b6040517fe2e7d264000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e2e7d2649060240161094b565b60026000541415612170576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c85565b60026000908155612180836124cf565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015612210573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122349190613ac7565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000918416906370a0823190602401602060405180830381865afa1580156122a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122ca919061399c565b90506001811115612358577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce80000006123108684613ae4565b61231a9190613b48565b905061235583857f000000000000000000000000000000000000000000000000000000000000000061234d8a8787612ff3565b600180612801565b50505b50506001600055505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f446c1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b8b573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa15801561243e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4a9190613ac7565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fee3f7f96040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b8b573d6000803e3d6000fd5b600081600f0b6000141561250057507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6001141561252f57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6002141561255e57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6003141561258d57507f00000000000000000000000000000000000000000000000000000000000000005b73ffffffffffffffffffffffffffffffffffffffff8116610992576040517fd1da79bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612667573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061268b9190613ac7565b90506126f2817f0000000000000000000000000000000000000000000000000000000000000000846000368080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525092508291506128019050565b505050565b600081600f0b6000141561272857507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6001141561275757507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6002141561278657507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6003141561258d57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff8116610992576040517fd1da79bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606000803373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461296a576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301528916906370a0823190602401602060405180830381865afa1580156128af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128d3919061399c565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152919350908816906370a0823190602401602060405180830381865afa158015612943573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612967919061399c565b90505b8415612a66576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612a4d57600080fd5b505af1158015612a61573d6000803e3d6000fd5b505050505b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a90612afc9033907f0000000000000000000000000000000000000000000000000000000000000000908b90600401613b83565b6000604051808303816000875af1158015612b1b573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052612b619190810190613a76565b92508415612c5f576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612c4657600080fd5b505af1158015612c5a573d6000803e3d6000fd5b505050505b612c6d8989898585896134b2565b50509695505050505050565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612d06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d2a9190613ac7565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000917f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015612dbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612de0919061399c565b90506001811115612f1d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01612f1b827f0000000000000000000000000000000000000000000000000000000000000000867f1a4d01d200000000000000000000000000000000000000000000000000000000858a6b033b2e3c9fd0803ce8000000612e6d8b84613ae4565b612e779190613b48565b6040516024810193909352600f9190910b60448301526064820152608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915260006001612801565b505b5050505050565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015260609060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015612fb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fd89190613ac7565b9050612fe8818888888888612801565b979650505050505050565b60607f0000000000000000000000000000000000000000000000000000000000000000600214156131ac5783600f0b6000146130e9576040516000602482015260448101849052606481018390527f0b4c7e4d00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526131a5565b6040516024810184905260006044820152606481018390527f0b4c7e4d00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091525b9050610b17565b7f0000000000000000000000000000000000000000000000000000000000000000600314156132c65783600f0b60001461327d5783600f0b60011461323457604051600060248201819052604482015260648101849052608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401613067565b604051600060248201819052604482018590526064820152608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401613067565b604051602481018490526000604482018190526064820152608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401613127565b7f0000000000000000000000000000000000000000000000000000000000000000600414156134505783600f0b6000146134005783600f0b6001146133b05783600f0b600214613360576040516000602482018190526044820181905260648201526084810184905260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613067565b6040516000602482018190526044820181905260648201859052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613067565b6040516000602482018190526044820185905260648201819052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613067565b6040516024810184905260006044820181905260648201819052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613127565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f496e636f7272656374206e436f696e73000000000000000000000000000000006044820152606401610c85565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146135b3576040517f654a9eda00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528681166024830152858116604483015260648201859052608482018490527f0000000000000000000000000000000000000000000000000000000000000000169063654a9eda9060a401600060405180830381600087803b15801561359657600080fd5b505af11580156135aa573d6000803e3d6000fd5b50505050612f1b565b8015613663576040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015286811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b15801561364a57600080fd5b505af115801561365e573d6000803e3d6000fd5b505050505b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015285811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156136f457600080fd5b505af1158015613708573d6000803e3d6000fd5b50505050505050505050565b8035600f81900b811461099257600080fd5b60006020828403121561373857600080fd5b610b1782613714565b60005b8381101561375c578181015183820152602001613744565b8381111561376b576000848401525b50505050565b60008151808452613789816020860160208601613741565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610b176020830184613771565b6000806000606084860312156137e357600080fd5b6137ec84613714565b92506137fa60208501613714565b9150604084013590509250925092565b60008060006060848603121561381f57600080fd5b833592506137fa60208501613714565b6000806040838503121561384257600080fd5b61384b83613714565b946020939093013593505050565b6000806000806080858703121561386f57600080fd5b61387885613714565b935061388660208601613714565b93969395505050506040820135916060013590565b6000602082840312156138ad57600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff811681146138d657600080fd5b50565b6000602082840312156138eb57600080fd5b8135610b17816138b4565b6000806040838503121561390957600080fd5b8235915061391960208401613714565b90509250929050565b602081016011831061395d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000806040838503121561397657600080fd5b8235613981816138b4565b91506020830135613991816138b4565b809150509250929050565b6000602082840312156139ae57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff808411156139ff576139ff6139b5565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715613a4557613a456139b5565b81604052809350858152868686011115613a5e57600080fd5b613a6c866020830187613741565b5050509392505050565b600060208284031215613a8857600080fd5b815167ffffffffffffffff811115613a9f57600080fd5b8201601f81018413613ab057600080fd5b613abf848251602084016139e4565b949350505050565b600060208284031215613ad957600080fd5b8151610b17816138b4565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613b43577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500290565b600082613b7e577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600073ffffffffffffffffffffffffffffffffffffffff808616835280851660208401525060606040830152613bbc6060830184613771565b9594505050505056fea26469706673582212203449dda0fdb43c09b2835e5b9e1ac605d52c333e3321c58ba0851c835980994b64736f6c634300080a0033"; - -type CurveV1AdapterDepositConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: CurveV1AdapterDepositConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class CurveV1AdapterDeposit__factory extends ContractFactory { - constructor(...args: CurveV1AdapterDepositConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - _creditManager: string, - _curveDeposit: string, - _lp_token: string, - _nCoins: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - _creditManager, - _curveDeposit, - _lp_token, - _nCoins, - overrides || {} - ) as Promise; - } - override getDeployTransaction( - _creditManager: string, - _curveDeposit: string, - _lp_token: string, - _nCoins: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction( - _creditManager, - _curveDeposit, - _lp_token, - _nCoins, - overrides || {} - ); - } - override attach(address: string): CurveV1AdapterDeposit { - return super.attach(address) as CurveV1AdapterDeposit; - } - override connect(signer: Signer): CurveV1AdapterDeposit__factory { - return super.connect(signer) as CurveV1AdapterDeposit__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): CurveV1AdapterDepositInterface { - return new utils.Interface(_abi) as CurveV1AdapterDepositInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): CurveV1AdapterDeposit { - return new Contract( - address, - _abi, - signerOrProvider - ) as CurveV1AdapterDeposit; - } -} diff --git a/src/types/factories/contracts/adapters/curve/CurveV1_DepositZap.sol/index.ts b/src/types/factories/contracts/adapters/curve/CurveV1_DepositZap.sol/index.ts deleted file mode 100644 index 2bf6b26b..00000000 --- a/src/types/factories/contracts/adapters/curve/CurveV1_DepositZap.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { CurveV1AdapterDeposit__factory } from "./CurveV1AdapterDeposit__factory"; diff --git a/src/types/factories/contracts/adapters/curve/CurveV1_stETH.sol/CurveV1AdapterStETH__factory.ts b/src/types/factories/contracts/adapters/curve/CurveV1_stETH.sol/CurveV1AdapterStETH__factory.ts deleted file mode 100644 index 3163c9b0..00000000 --- a/src/types/factories/contracts/adapters/curve/CurveV1_stETH.sol/CurveV1AdapterStETH__factory.ts +++ /dev/null @@ -1,1124 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - CurveV1AdapterStETH, - CurveV1AdapterStETHInterface, -} from "../../../../../contracts/adapters/curve/CurveV1_stETH.sol/CurveV1AdapterStETH"; - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "_creditManager", - type: "address", - }, - { - internalType: "address", - name: "_curveStETHPoolGateway", - type: "address", - }, - { - internalType: "address", - name: "_lp_token", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "IncorrectIndexException", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "TokenIsNotInAllowedList", - type: "error", - }, - { - inputs: [], - name: "ZeroAddressException", - type: "error", - }, - { - inputs: [], - name: "A", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "A_precise", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "_gearboxAdapterType", - outputs: [ - { - internalType: "enum AdapterType", - name: "", - type: "uint8", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "_gearboxAdapterVersion", - outputs: [ - { - internalType: "uint16", - name: "", - type: "uint16", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "uint256", - name: "rateMinRAY", - type: "uint256", - }, - ], - name: "add_all_liquidity_one_coin", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256[2]", - name: "amounts", - type: "uint256[2]", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "add_liquidity", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "uint256", - name: "minAmount", - type: "uint256", - }, - ], - name: "add_liquidity_one_coin", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "admin", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "i", - type: "uint256", - }, - ], - name: "admin_balances", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "admin_fee", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "owner", - type: "address", - }, - { - internalType: "address", - name: "spender", - type: "address", - }, - ], - name: "allowance", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - ], - name: "balances", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "i", - type: "uint256", - }, - ], - name: "balances", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "block_timestamp_last", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256[2]", - name: "_amounts", - type: "uint256[2]", - }, - { - internalType: "bool", - name: "_is_deposit", - type: "bool", - }, - ], - name: "calc_token_amount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_burn_amount", - type: "uint256", - }, - { - internalType: "int128", - name: "i", - type: "int128", - }, - ], - name: "calc_withdraw_one_coin", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - ], - name: "coins", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "i", - type: "uint256", - }, - ], - name: "coins", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditFacade", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditManager", - outputs: [ - { - internalType: "contract ICreditManagerV2", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "decimals", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "int128", - name: "j", - type: "int128", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "exchange", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "int128", - name: "j", - type: "int128", - }, - { - internalType: "uint256", - name: "rateMinRAY", - type: "uint256", - }, - ], - name: "exchange_all", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "int128", - name: "j", - type: "int128", - }, - { - internalType: "uint256", - name: "rateMinRAY", - type: "uint256", - }, - ], - name: "exchange_all_underlying", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "int128", - name: "j", - type: "int128", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "exchange_underlying", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "fee", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "future_A", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "future_A_time", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "get_balances", - outputs: [ - { - internalType: "uint256[2]", - name: "", - type: "uint256[2]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "int128", - name: "j", - type: "int128", - }, - { - internalType: "uint256", - name: "dx", - type: "uint256", - }, - ], - name: "get_dy", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "int128", - name: "j", - type: "int128", - }, - { - internalType: "uint256", - name: "dx", - type: "uint256", - }, - ], - name: "get_dy_underlying", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "get_previous_balances", - outputs: [ - { - internalType: "uint256[2]", - name: "", - type: "uint256[2]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "get_price_cumulative_last", - outputs: [ - { - internalType: "uint256[2]", - name: "", - type: "uint256[2]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256[2]", - name: "_first_balances", - type: "uint256[2]", - }, - { - internalType: "uint256[2]", - name: "_last_balances", - type: "uint256[2]", - }, - { - internalType: "uint256", - name: "_time_elapsed", - type: "uint256", - }, - ], - name: "get_twap_balances", - outputs: [ - { - internalType: "uint256[2]", - name: "", - type: "uint256[2]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "get_virtual_price", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "initial_A", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "initial_A_time", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "lp_token", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "metapoolBase", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "nCoins", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "uint256", - name: "minRateRAY", - type: "uint256", - }, - ], - name: "remove_all_liquidity_one_coin", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256[2]", - name: "", - type: "uint256[2]", - }, - ], - name: "remove_liquidity", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256[2]", - name: "amounts", - type: "uint256[2]", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "remove_liquidity_imbalance", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "remove_liquidity_one_coin", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "symbol", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "targetContract", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "token", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "token0", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "token1", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "token2", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "token3", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "totalSupply", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "underlying0", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "underlying1", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "underlying2", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "underlying3", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - ], - name: "underlying_coins", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "i", - type: "uint256", - }, - ], - name: "underlying_coins", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x6102606040523480156200001257600080fd5b506040516200676a3803806200676a833981016040819052620000359162000bac565b828282600083838383600284846001600160a01b03821615806200006057506001600160a01b038116155b156200007f57604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038216608081905260408051632f7a188160e01b81529051632f7a1881916004808201926020929091908290030181865afa158015620000ca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000f0919062000bf6565b6001600160a01b0390811660a05290811660c05260016000558416151590506200012d57604051635919af9760e11b815260040160405180910390fd5b608051604051630f67c5bd60e41b81526001600160a01b0385811660048301529091169063f67c5bd090602401602060405180830381865afa15801562000178573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200019e919062000c1b565b620001cc57604051634c607af960e11b81526001600160a01b03841660048201526024015b60405180910390fd5b6001600160a01b038084166101e081905261020052821661022052610240819052620001f9600062000912565b6001600160a01b031660e05262000211600162000912565b6001600160a01b0316610100526200022a600262000912565b6001600160a01b03166101205262000243600362000912565b6001600160a01b0316610140526200025c600062000a05565b6001600160a01b03166101605262000275600162000a05565b6001600160a01b0316610180526200028e600262000a05565b6001600160a01b03166101a052620002a7600362000a05565b6001600160a01b039081166101c05260e051161580620002d15750610100516001600160a01b0316155b15620002f057604051635919af9760e11b815260040160405180910390fd5b6002811180156200030b5750610120516001600160a01b0316155b156200032a57604051635919af9760e11b815260040160405180910390fd5b600381118015620003455750610140516001600160a01b0316155b156200036457604051635919af9760e11b815260040160405180910390fd5b60805160e051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620003b1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003d7919062000c1b565b620004055760e051604051634c607af960e11b81526001600160a01b039091166004820152602401620001c3565b60805161010051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa15801562000453573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000479919062000c1b565b620004a85761010051604051634c607af960e11b81526001600160a01b039091166004820152602401620001c3565b6002811180156200052a575060805161012051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa15801562000502573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000528919062000c1b565b155b156200055a5761012051604051634c607af960e11b81526001600160a01b039091166004820152602401620001c3565b600381118015620005dc575060805161014051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620005b4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005da919062000c1b565b155b156200060c5761014051604051634c607af960e11b81526001600160a01b039091166004820152602401620001c3565b610160516001600160a01b03161580159062000699575060805161016051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa15801562000671573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000697919062000c1b565b155b15620006c95761016051604051634c607af960e11b81526001600160a01b039091166004820152602401620001c3565b610180516001600160a01b03161580159062000756575060805161018051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa1580156200072e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000754919062000c1b565b155b15620007865761018051604051634c607af960e11b81526001600160a01b039091166004820152602401620001c3565b6101a0516001600160a01b0316158015906200081357506080516101a051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620007eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000811919062000c1b565b155b1562000843576101a051604051634c607af960e11b81526001600160a01b039091166004820152602401620001c3565b6101c0516001600160a01b031615801590620008d057506080516101c051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620008a8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008ce919062000c1b565b155b1562000900576101c051604051634c607af960e11b81526001600160a01b039091166004820152602401620001c3565b50505050505050505050505062000c5b565b60c05160405163c661065760e01b8152600481018390526000916001600160a01b03169063c661065790602401602060405180830381865afa9250505080156200097b575060408051601f3d908101601f19168201909252620009789181019062000bf6565b60015b62000986576200098c565b92915050565b60c05160405163046e8dd760e31b8152600f84900b60048201526001600160a01b03909116906323746eb8906024015b602060405180830381865afa925050508015620009f8575060408051601f3d908101601f19168201909252620009f59181019062000bf6565b60015b6200098657506000919050565b610220516000906001600160a01b03161562000a2657620009868262000ac8565b60c051604051630b9947eb60e41b8152600481018490526001600160a01b039091169063b9947eb090602401602060405180830381865afa92505050801562000a8e575060408051601f3d908101601f1916820190925262000a8b9181019062000bf6565b60015b620009865760c051604051635b9cca9f60e11b8152600f84900b60048201526001600160a01b039091169063b739953e90602401620009bc565b60008162000adc5762000986600062000b1f565b610220516001600160a01b031663c661065762000afb60018562000c35565b6040518263ffffffff1660e01b8152600401620009bc91815260200190565b919050565b600081600f0b6000141562000b33575060e0515b81600f0b6001141562000b465750610100515b81600f0b6002141562000b595750610120515b81600f0b6003141562000b6c5750610140515b6001600160a01b03811662000b1a576040516334769e6f60e21b815260040160405180910390fd5b80516001600160a01b038116811462000b1a57600080fd5b60008060006060848603121562000bc257600080fd5b62000bcd8462000b94565b925062000bdd6020850162000b94565b915062000bed6040850162000b94565b90509250925092565b60006020828403121562000c0957600080fd5b62000c148262000b94565b9392505050565b60006020828403121562000c2e57600080fd5b5051919050565b60008282101562000c5657634e487b7160e01b600052601160045260246000fd5b500390565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e0516102005161022051610240516156ff6200106b6000396000818161077001528181613c6701528181613d5901528181613e9901528181614050015261416a015260006105f101526000818161068801528181610f4e015281816110f1015281816115fe015281816117a301528181611ae301528181611c770152818161251e0152818161279f01528181612af801528181612e1f015281816130c4015281816137a60152613844015260006108a701526000818161059c01526131c60152600081816103d4015261319701526000818161061801526131680152600081816106af015261313901526000818161087001528181612f9e01528181613dc3015281816146c20152614b560152600081816104fd01528181612f6f01528181613cd1015281816145f20152614a3a0152600081816107da01528181612f4001528181613bdd01528181614522015261491e01526000818161045d01528181612f1101528181613b1101528181614452015261480201526000818161072201528181610914015281816109e101528181610a7101528181610b6901528181610cd601528181610d5301528181610dea01528181610e7a01528181610f26015281816110c9015281816114b20152818161152a015281816115d60152818161177b0152818161192d015281816119c701528181611a0f01528181611abb01528181611c4f01528181611d3801528181611d8001528181611e3101528181611e660152818161214f01528181612246015281816122be01528181612363015281816125680152818161262001528181612655015281816126f00152818161277701528181612b7901528181612bb401528181612c2101528181612cb2015281816133e401528181613503015281816135dd015281816147da015281816148f601528181614a1201528181614b2e0152614c760152600081816105240152818161324f01528181614d1d0152614df701526000818161074901528181610f9c0152818161113f015281816112420152818161164c015281816117f101528181611b3101528181611cc501528181611f71015281816124aa015281816127ed0152818161299e01528181612d4c01528181612e470152818161303c0152818161343a015281816134d401528181613633015281816136db0152818161399501528181613a4c01528181613b3c01528181613c0501528181613cf901528181613deb015281816143850152818161447a0152818161454a0152818161461a015281816146ea015281816148500152818161496c01528181614a8801528181614ba401528181614c4701528181614d8701528181614e7f01528181614f330152614fdd01526156ff6000f3fe608060405234801561001057600080fd5b50600436106103a45760003560e01c806378aa73a4116101e9578063ce30bbdb1161010f578063e3103273116100ad578063f446c1d01161007c578063f446c1d014610892578063f851a4401461089a578063fc0c546a146108a2578063fee3f7f9146108c957600080fd5b8063e310327314610832578063ec026ca714610845578063ed8e84f314610858578063ef14101e1461086b57600080fd5b8063d96c7fce116100e9578063d96c7fce146107fc578063dd62ed3e14610804578063ddca3f4314610817578063e2e7d2641461081f57600080fd5b8063ce30bbdb146107b3578063cf023dd0146107c2578063d21220a7146107d557600080fd5b8063b739953e11610187578063c12c21c011610156578063c12c21c014610744578063c21ee1621461076b578063c661065714610792578063cc2b27d7146107a057600080fd5b8063b739953e146106f4578063b9947eb014610707578063bb7b8b8014610715578063bd90df701461071d57600080fd5b80638ba51dfc116101c35780638ba51dfc146106aa57806395d89b41146106d1578063a6417ed6146106d9578063b4b577ad146106ec57600080fd5b806378aa73a41461065557806379bea6641461067057806382c630661461068357600080fd5b80632f7a1881116102ce57806357d788751161026c57806364a89bca1161023b57806364a89bca146105ec5780636e1d82711461061357806370a082311461063a57806376a2f0f01461064d57600080fd5b806357d78875146105975780635b36389c146105be5780635e0d443f146105d157806363543f06146105e457600080fd5b80633df02124116102a85780633df02124146105615780634469e30e146105745780634903b0d11461057c5780635409491a1461058f57600080fd5b80632f7a18811461051f578063313ce5671461054657806333d2ebf21461054e57600080fd5b806314052288116103465780631af4de83116103155780631af4de83146104ca5780632081066c146104dd57806323746eb8146104e557806325be124e146104f857600080fd5b8063140522881461049f57806314f05979146104a757806318160ddd146104af5780631a4d01d2146104b757600080fd5b806307211ef71161038257806307211ef7146104305780630b4c7e4d146104435780630dfe1681146104585780630f6ba8e31461047f57600080fd5b8063065a80d8146103a957806306871163146103cf57806306fdde031461041b575b600080fd5b6103bc6103b7366004615071565b6108d1565b6040519081526020015b60405180910390f35b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016103c6565b610423610a6d565b6040516103c69190615102565b6103bc61043e366004615115565b610b25565b610456610451366004615162565b610bf4565b005b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b61049261048d36600461518d565b610c91565b6040516103c691906151cb565b6103bc610d4f565b610492610de0565b6103bc610e76565b6104566104c53660046151fc565b610ee3565b6104566104d8366004615115565b6111a0565b6103bc6114ae565b6103f66104f3366004615071565b61151b565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc611526565b61045661055c366004615221565b611593565b61045661056f36600461524b565b611852565b610492611923565b6103bc61058a36600461528d565b611995565b6103bc611a0b565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6104566105cc3660046152a6565b611a78565b6103bc6105df366004615115565b611cf4565b6103bc611d7c565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc6106483660046152f5565b611de9565b6103bc611e62565b61065d600281565b60405161ffff90911681526020016103c6565b61045661067e366004615115565b611ecf565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b61042361214b565b6104566106e736600461524b565b6121b8565b6103bc612242565b6103f6610702366004615071565b6122af565b6103f661070236600461528d565b6103bc6122ba565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc7f000000000000000000000000000000000000000000000000000000000000000081565b6103f66104f336600461528d565b6103bc6107ae366004615312565b612327565b60086040516103c69190615335565b6104566107d03660046151fc565b6123e4565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b61049261255e565b6103bc610812366004615376565b6125d0565b6103bc612651565b6103bc61082d36600461528d565b6126be565b610456610840366004615162565b612734565b610456610853366004615221565b6128d8565b6103bc6108663660046153af565b612b39565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc612bb0565b6103f6612c1d565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc612cae565b6040517f4903b0d10000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff821660048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634903b0d1906024015b602060405180830381865afa9250505080156109ab575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526109a8918101906153e1565b60015b610a62576040517f065a80d8000000000000000000000000000000000000000000000000000000008152600f83900b60048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063065a80d8906024015b602060405180830381865afa158015610a3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6291906153e1565b92915050565b919050565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015610ada573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b2091908101906154bb565b905090565b6040517f07211ef7000000000000000000000000000000000000000000000000000000008152600f84810b600483015283900b6024820152604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906307211ef7906064015b602060405180830381865afa158015610bc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bea91906153e1565b90505b9392505050565b60026000541415610c66576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b60026000908155610c8890600184358110916020860135919091119080612d1b565b50506001600055565b610c99615041565b6040517f0f6ba8e300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690630f6ba8e390610d0f9087908790879060040161550c565b6040805180830381865afa158015610d2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bea9190615533565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663140522886040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2091906153e1565b610de8615041565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166314f059796040518163ffffffff1660e01b81526004016040805180830381865afa158015610e52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b209190615533565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b6040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015610fe057600080fd5b505af1158015610ff4573d6000803e3d6000fd5b5050505060026000541415611065576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b6002600090815561107583612f00565b90506110808161300b565b5060016000556040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561118357600080fd5b505af1158015611197573d6000803e3d6000fd5b50505050505050565b6002600054141561120d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa15801561129e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c291906155b3565b905060006112cf85613128565b905060006112dc85613128565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529192506000918416906370a0823190602401602060405180830381865afa15801561134e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137291906153e1565b905060018111156114a0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce80000006113b887846155d0565b6113c29190615634565b604051600f8a810b602483015289900b6044820152606481018490526084810182905290915061149d908690869086907fa6417ed6000000000000000000000000000000000000000000000000000000009060a4015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152600180613232565b50505b505060016000555050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632081066c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b6000610a6282612f00565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b6040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561169057600080fd5b505af11580156116a4573d6000803e3d6000fd5b5050505060026000541415611715576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b6002600090815561172583612f00565b90506117328382846136aa565b5060016000556040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d906084015b600060405180830381600087803b15801561183657600080fd5b505af115801561184a573d6000803e3d6000fd5b505050505050565b600260005414156118bf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b600260009081556118cf85612f00565b905060006118dc85612f00565b90506114a082826000368080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525060019350915061394c9050565b61192b615041565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16634469e30e6040518163ffffffff1660e01b81526004016040805180830381865afa158015610e52573d6000803e3d6000fd5b6040517f4903b0d1000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634903b0d190602401610954565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635409491a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b6040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015611b7557600080fd5b505af1158015611b89573d6000803e3d6000fd5b5050505060026000541415611bfa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b6002600055611c07613a1b565b60016000556040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d9060840161181c565b6040517f5e0d443f000000000000000000000000000000000000000000000000000000008152600f84810b600483015283900b6024820152604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635e0d443f90606401610ba9565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166363543f066040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401610a21565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166376a2f0f06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b60026000541415611f3c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611fcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ff191906155b3565b90506000611ffe85612f00565b9050600061200b85612f00565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529192506000918416906370a0823190602401602060405180830381865afa15801561207d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120a191906153e1565b905060018111156114a0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce80000006120e787846155d0565b6120f19190615634565b604051600f8a810b602483015289900b6044820152606481018490526084810182905290915061149d908690869086907f3df02124000000000000000000000000000000000000000000000000000000009060a401611418565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610ada573d6000803e3d6000fd5b60026000541415612225576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b6002600090815561223585613128565b905060006118dc85613128565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b4b577ad6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b6000610a6282613128565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb7b8b806040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b6040517fcc2b27d700000000000000000000000000000000000000000000000000000000815260048101839052600f82900b60248201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063cc2b27d7906044015b602060405180830381865afa1580156123c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bed91906153e1565b60026000541415612451576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b6002600090815561246183612f00565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa1580156124f1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251591906155b3565b905061255181837f0000000000000000000000000000000000000000000000000000000000000000612548888a89613e95565b60016000613232565b5050600160005550505050565b612566615041565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d96c7fce6040518163ffffffff1660e01b81526004016040805180830381865afa158015610e52573d6000803e3d6000fd5b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063dd62ed3e906044016123a3565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b6040517fe2e7d264000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e2e7d26490602401610a21565b6040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561283157600080fd5b505af1158015612845573d6000803e3d6000fd5b50505050600260005414156128b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b60026000908155611c0790600184358110916020860135919091119080614354565b60026000541415612945576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b6002600090815561295583612f00565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa1580156129e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a0991906155b3565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000918416906370a0823190602401602060405180830381865afa158015612a7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a9f91906153e1565b90506001811115612b2d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce8000000612ae586846155d0565b612aef9190615634565b9050612b2a83857f0000000000000000000000000000000000000000000000000000000000000000612b228a8787613e95565b600180613232565b50505b50506001600055505050565b6040517fed8e84f300000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063ed8e84f3906123a3908690869060040161566f565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f446c1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2091906155b3565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fee3f7f96040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612da8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dcc91906155b3565b9050612dda85858585614791565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015612e8b57600080fd5b505af1158015612e9f573d6000803e3d6000fd5b50505050612ee36000368080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250614c0792505050565b50612ef085858585614791565b612ef981614d05565b5050505050565b600081600f0b60001415612f3157507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b60011415612f6057507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b60021415612f8f57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b60031415612fbe57507f00000000000000000000000000000000000000000000000000000000000000005b73ffffffffffffffffffffffffffffffffffffffff8116610a68576040517fd1da79bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015613098573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130bc91906155b3565b9050613123817f0000000000000000000000000000000000000000000000000000000000000000846000368080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525092508291506132329050565b505050565b600081600f0b6000141561315957507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6001141561318857507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b600214156131b757507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b60031415612fbe57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff8116610a68576040517fd1da79bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606000803373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461339b576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301528916906370a0823190602401602060405180830381865afa1580156132e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061330491906153e1565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152919350908816906370a0823190602401602060405180830381865afa158015613374573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061339891906153e1565b90505b8415613497576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561347e57600080fd5b505af1158015613492573d6000803e3d6000fd5b505050505b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a9061352d9033907f0000000000000000000000000000000000000000000000000000000000000000908b90600401615687565b6000604051808303816000875af115801561354c573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261359291908101906154bb565b92508415613690576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561367757600080fd5b505af115801561368b573d6000803e3d6000fd5b505050505b61369e898989858589614ddf565b50509695505050505050565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015613737573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061375b91906155b3565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000917f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa1580156137ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061381191906153e1565b90506001811115612ef9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0161184a827f0000000000000000000000000000000000000000000000000000000000000000867f1a4d01d200000000000000000000000000000000000000000000000000000000858a6b033b2e3c9fd0803ce800000061389e8b846155d0565b6138a89190615634565b6040516024810193909352600f9190910b60448301526064820152608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915260006001613232565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015260609060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa1580156139dc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a0091906155b3565b9050613a10818888888888613232565b979650505050505050565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015613aa8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613acc91906155b3565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301529192507f0000000000000000000000000000000000000000000000000000000000000000909116906351e3f16090604401600060405180830381600087803b158015613b8257600080fd5b505af1158015613b96573d6000803e3d6000fd5b50506040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f00000000000000000000000000000000000000000000000000000000000000001692506351e3f1609150604401600060405180830381600087803b158015613c4b57600080fd5b505af1158015613c5f573d6000803e3d6000fd5b5050505060027f00000000000000000000000000000000000000000000000000000000000000001115613e48576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015613d3d57600080fd5b505af1158015613d51573d6000803e3d6000fd5b5050505060037f00000000000000000000000000000000000000000000000000000000000000001115613e48576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015613e2f57600080fd5b505af1158015613e43573d6000803e3d6000fd5b505050505b613e886000368080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250614c0792505050565b50613e9281614d05565b50565b60607f00000000000000000000000000000000000000000000000000000000000000006002141561404e5783600f0b600014613f8b576040516000602482015260448101849052606481018390527f0b4c7e4d00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152614047565b6040516024810184905260006044820152606481018390527f0b4c7e4d00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091525b9050610bed565b7f0000000000000000000000000000000000000000000000000000000000000000600314156141685783600f0b60001461411f5783600f0b6001146140d657604051600060248201819052604482015260648101849052608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401613f09565b604051600060248201819052604482018590526064820152608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401613f09565b604051602481018490526000604482018190526064820152608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401613fc9565b7f0000000000000000000000000000000000000000000000000000000000000000600414156142f25783600f0b6000146142a25783600f0b6001146142525783600f0b600214614202576040516000602482018190526044820181905260648201526084810184905260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613f09565b6040516000602482018190526044820181905260648201859052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613f09565b6040516000602482018190526044820185905260648201819052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613f09565b6040516024810184905260006044820181905260648201819052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613fc9565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f496e636f7272656374206e436f696e73000000000000000000000000000000006044820152606401610c5d565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156143e1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061440591906155b3565b905084156144d7576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156144be57600080fd5b505af11580156144d2573d6000803e3d6000fd5b505050505b83156145a7576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561458e57600080fd5b505af11580156145a2573d6000803e3d6000fd5b505050505b8215614677576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561465e57600080fd5b505af1158015614672573d6000803e3d6000fd5b505050505b8115614747576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561472e57600080fd5b505af1158015614742573d6000803e3d6000fd5b505050505b6147876000368080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250614c0792505050565b50612ef981614d05565b83156148ad576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561489457600080fd5b505af11580156148a8573d6000803e3d6000fd5b505050505b82156149c9576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156149b057600080fd5b505af11580156149c4573d6000803e3d6000fd5b505050505b8115614ae5576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015614acc57600080fd5b505af1158015614ae0573d6000803e3d6000fd5b505050505b8015614c01576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015614be857600080fd5b505af1158015614bfc573d6000803e3d6000fd5b505050505b50505050565b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815260609073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a90614ca09033907f0000000000000000000000000000000000000000000000000000000000000000908790600401615687565b6000604051808303816000875af1158015614cbf573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610a6291908101906154bb565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614613e92576040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015614dcb57600080fd5b505af1158015612ef9573d6000803e3d6000fd5b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614614ee0576040517f654a9eda00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528681166024830152858116604483015260648201859052608482018490527f0000000000000000000000000000000000000000000000000000000000000000169063654a9eda9060a401600060405180830381600087803b158015614ec357600080fd5b505af1158015614ed7573d6000803e3d6000fd5b5050505061184a565b8015614f90576040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015286811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b158015614f7757600080fd5b505af1158015614f8b573d6000803e3d6000fd5b505050505b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015285811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561502157600080fd5b505af1158015615035573d6000803e3d6000fd5b50505050505050505050565b60405180604001604052806002906020820280368337509192915050565b8035600f81900b8114610a6857600080fd5b60006020828403121561508357600080fd5b610bed8261505f565b60005b838110156150a757818101518382015260200161508f565b83811115614c015750506000910152565b600081518084526150d081602086016020860161508c565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610bed60208301846150b8565b60008060006060848603121561512a57600080fd5b6151338461505f565b92506151416020850161505f565b9150604084013590509250925092565b8060408101831015610a6257600080fd5b6000806060838503121561517557600080fd5b61517f8484615151565b946040939093013593505050565b600080600060a084860312156151a257600080fd5b6151ac8585615151565b92506151bb8560408601615151565b9150608084013590509250925092565b60408101818360005b60028110156151f35781518352602092830192909101906001016151d4565b50505092915050565b60008060006060848603121561521157600080fd5b833592506151416020850161505f565b6000806040838503121561523457600080fd5b61523d8361505f565b946020939093013593505050565b6000806000806080858703121561526157600080fd5b61526a8561505f565b93506152786020860161505f565b93969395505050506040820135916060013590565b60006020828403121561529f57600080fd5b5035919050565b600080606083850312156152b957600080fd5b823591506152ca8460208501615151565b90509250929050565b73ffffffffffffffffffffffffffffffffffffffff81168114613e9257600080fd5b60006020828403121561530757600080fd5b8135610bed816152d3565b6000806040838503121561532557600080fd5b823591506152ca6020840161505f565b6020810160118310615370577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000806040838503121561538957600080fd5b8235615394816152d3565b915060208301356153a4816152d3565b809150509250929050565b600080606083850312156153c257600080fd5b6153cc8484615151565b9150604083013580151581146153a457600080fd5b6000602082840312156153f357600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff80841115615444576154446153fa565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171561548a5761548a6153fa565b816040528093508581528686860111156154a357600080fd5b6154b186602083018761508c565b5050509392505050565b6000602082840312156154cd57600080fd5b815167ffffffffffffffff8111156154e457600080fd5b8201601f810184136154f557600080fd5b61550484825160208401615429565b949350505050565b60a08101604085833760408201600081526040858237506080919091019190915292915050565b60006040828403121561554557600080fd5b82601f83011261555457600080fd5b6040516040810181811067ffffffffffffffff82111715615577576155776153fa565b806040525080604084018581111561558e57600080fd5b845b818110156155a8578051835260209283019201615590565b509195945050505050565b6000602082840312156155c557600080fd5b8151610bed816152d3565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561562f577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500290565b60008261566a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60608101604084833791151560409190910152919050565b600073ffffffffffffffffffffffffffffffffffffffff8086168352808516602084015250606060408301526156c060608301846150b8565b9594505050505056fea26469706673582212207da93df0ea215a9f805ea990de2f12879616c2162f3b99a64c1bf74f48baf1e664736f6c634300080a0033"; - -type CurveV1AdapterStETHConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: CurveV1AdapterStETHConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class CurveV1AdapterStETH__factory extends ContractFactory { - constructor(...args: CurveV1AdapterStETHConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - _creditManager: string, - _curveStETHPoolGateway: string, - _lp_token: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - _creditManager, - _curveStETHPoolGateway, - _lp_token, - overrides || {} - ) as Promise; - } - override getDeployTransaction( - _creditManager: string, - _curveStETHPoolGateway: string, - _lp_token: string, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction( - _creditManager, - _curveStETHPoolGateway, - _lp_token, - overrides || {} - ); - } - override attach(address: string): CurveV1AdapterStETH { - return super.attach(address) as CurveV1AdapterStETH; - } - override connect(signer: Signer): CurveV1AdapterStETH__factory { - return super.connect(signer) as CurveV1AdapterStETH__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): CurveV1AdapterStETHInterface { - return new utils.Interface(_abi) as CurveV1AdapterStETHInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): CurveV1AdapterStETH { - return new Contract(address, _abi, signerOrProvider) as CurveV1AdapterStETH; - } -} diff --git a/src/types/factories/contracts/adapters/curve/CurveV1_stETH.sol/index.ts b/src/types/factories/contracts/adapters/curve/CurveV1_stETH.sol/index.ts deleted file mode 100644 index ab50d874..00000000 --- a/src/types/factories/contracts/adapters/curve/CurveV1_stETH.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { CurveV1AdapterStETH__factory } from "./CurveV1AdapterStETH__factory"; diff --git a/src/types/factories/contracts/adapters/curve/CurveV1_stETHGateway.sol/CurveV1StETHPoolGateway__factory.ts b/src/types/factories/contracts/adapters/curve/CurveV1_stETHGateway.sol/CurveV1StETHPoolGateway__factory.ts deleted file mode 100644 index 78a96f96..00000000 --- a/src/types/factories/contracts/adapters/curve/CurveV1_stETHGateway.sol/CurveV1StETHPoolGateway__factory.ts +++ /dev/null @@ -1,855 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - CurveV1StETHPoolGateway, - CurveV1StETHPoolGatewayInterface, -} from "../../../../../contracts/adapters/curve/CurveV1_stETHGateway.sol/CurveV1StETHPoolGateway"; - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "_weth", - type: "address", - }, - { - internalType: "address", - name: "_steth", - type: "address", - }, - { - internalType: "address", - name: "_pool", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "NotImplementedException", - type: "error", - }, - { - inputs: [], - name: "ZeroAddressException", - type: "error", - }, - { - inputs: [], - name: "A", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "A_precise", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256[2]", - name: "amounts", - type: "uint256[2]", - }, - { - internalType: "uint256", - name: "min_mint_amount", - type: "uint256", - }, - ], - name: "add_liquidity", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "admin", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "i", - type: "uint256", - }, - ], - name: "admin_balances", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "admin_fee", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "owner", - type: "address", - }, - { - internalType: "address", - name: "spender", - type: "address", - }, - ], - name: "allowance", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - ], - name: "balances", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "i", - type: "uint256", - }, - ], - name: "balances", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "block_timestamp_last", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256[2]", - name: "_amounts", - type: "uint256[2]", - }, - { - internalType: "bool", - name: "_is_deposit", - type: "bool", - }, - ], - name: "calc_token_amount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_burn_amount", - type: "uint256", - }, - { - internalType: "int128", - name: "i", - type: "int128", - }, - ], - name: "calc_withdraw_one_coin", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - ], - name: "coins", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "i", - type: "uint256", - }, - ], - name: "coins", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "decimals", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "int128", - name: "j", - type: "int128", - }, - { - internalType: "uint256", - name: "dx", - type: "uint256", - }, - { - internalType: "uint256", - name: "min_dy", - type: "uint256", - }, - ], - name: "exchange", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "", - type: "int128", - }, - { - internalType: "int128", - name: "", - type: "int128", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "exchange_underlying", - outputs: [], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "fee", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "future_A", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "future_A_time", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "get_balances", - outputs: [ - { - internalType: "uint256[2]", - name: "", - type: "uint256[2]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "int128", - name: "j", - type: "int128", - }, - { - internalType: "uint256", - name: "dx", - type: "uint256", - }, - ], - name: "get_dy", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "", - type: "int128", - }, - { - internalType: "int128", - name: "", - type: "int128", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "get_dy_underlying", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "get_previous_balances", - outputs: [ - { - internalType: "uint256[2]", - name: "", - type: "uint256[2]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "get_price_cumulative_last", - outputs: [ - { - internalType: "uint256[2]", - name: "", - type: "uint256[2]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256[2]", - name: "", - type: "uint256[2]", - }, - { - internalType: "uint256[2]", - name: "", - type: "uint256[2]", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "get_twap_balances", - outputs: [ - { - internalType: "uint256[2]", - name: "", - type: "uint256[2]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "get_virtual_price", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "initial_A", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "initial_A_time", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "lp_token", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "pool", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "uint256[2]", - name: "min_amounts", - type: "uint256[2]", - }, - ], - name: "remove_liquidity", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256[2]", - name: "amounts", - type: "uint256[2]", - }, - { - internalType: "uint256", - name: "max_burn_amount", - type: "uint256", - }, - ], - name: "remove_liquidity_imbalance", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_token_amount", - type: "uint256", - }, - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "uint256", - name: "min_amount", - type: "uint256", - }, - ], - name: "remove_liquidity_one_coin", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "symbol", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "token", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "token0", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "token1", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "totalSupply", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "", - type: "int128", - }, - ], - name: "underlying_coins", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "underlying_coins", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - stateMutability: "payable", - type: "receive", - }, -]; - -const _bytecode = - "0x6101006040523480156200001257600080fd5b5060405162002bef38038062002bef8339810160408190526200003591620001ac565b6001600160a01b03831615806200005357506001600160a01b038216155b806200006657506001600160a01b038116155b156200008557604051635919af9760e11b815260040160405180910390fd5b6001600160a01b0380841660805282811660a052811660c081905260408051634163183360e11b815290516382c63066916004808201926020929091908290030181865afa158015620000dc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001029190620001f6565b6001600160a01b0390811660e05260a05160c05160405163095ea7b360e01b81529083166004820152600019602482015291169063095ea7b3906044016020604051808303816000875af11580156200015f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200018591906200021b565b505050506200023f565b80516001600160a01b0381168114620001a757600080fd5b919050565b600080600060608486031215620001c257600080fd5b620001cd846200018f565b9250620001dd602085016200018f565b9150620001ed604085016200018f565b90509250925092565b6000602082840312156200020957600080fd5b62000214826200018f565b9392505050565b6000602082840312156200022e57600080fd5b815180151581146200021457600080fd5b60805160a05160c05160e051612811620003de600039600081816105bd0152818161079c01528181610af001528181610c0201528181611359015281816119900152611d530152600081816104450152818161081801528181610a6a01528181610b5601528181610c6a01528181610dc301528181610f8c015281816110d40152818161128e015281816112d6015281816113be0152818161153e015281816115cc01528181611639015281816116a601528181611713015281816118120152818161189701528181611932015281816119f501528181611db701528181611df201528181611e5f0152611ef00152600081816106b101528181610a1601528181610d9b0152818161100601528181611064015281816114d6015281816117ad01528181611c5e0152611d03015260008181610395015281816109280152818161098001528181610ce901528181610d6d01528181610e7e01528181610ed501528181611147015281816111cb01528181611429015281816114ad0152818161178601528181611a8001528181611b2e0152611bd501526128116000f3fe6080604052600436106102e05760003560e01c806370a0823111610184578063d21220a7116100d6578063e31032731161008a578063f851a44011610064578063f851a44014610778578063fc0c546a1461078d578063fee3f7f9146107c057600080fd5b8063e310327314610723578063ed8e84f314610743578063f446c1d01461076357600080fd5b8063dd62ed3e116100bb578063dd62ed3e146106d3578063ddca3f43146106ee578063e2e7d2641461070357600080fd5b8063d21220a71461069f578063d96c7fce1461041e57600080fd5b8063b4b577ad11610138578063bb7b8b8011610112578063bb7b8b801461064a578063c66106571461065f578063cc2b27d71461067f57600080fd5b8063b4b577ad146105ff578063b739953e14610614578063b9947eb01461062f57600080fd5b806382c630661161016957806382c63066146105ab57806395d89b411461031f578063a6417ed6146105df57600080fd5b806370a082311461057b57806376a2f0f01461059657600080fd5b80631a4d01d21161023d5780634469e30e116101f15780635b36389c116101cb5780635b36389c146105265780635e0d443f1461054657806363543f061461056657600080fd5b80634469e30e1461041e5780634903b0d1146104f15780635409491a1461051157600080fd5b806323746eb81161022257806323746eb8146104b1578063313ce567146104675780633df02124146104d157600080fd5b80631a4d01d21461047c5780632081066c1461049c57600080fd5b80630f6ba8e31161029457806314f059791161027957806314f059791461041e57806316f0115b1461043357806318160ddd1461046757600080fd5b80630f6ba8e3146103dc578063140522881461040957600080fd5b806307211ef7116102c557806307211ef7146103415780630b4c7e4d146103615780630dfe16811461038357600080fd5b8063065a80d8146102ec57806306fdde031461031f57600080fd5b366102e757005b600080fd5b3480156102f857600080fd5b5061030c6103073660046123ee565b6107d5565b6040519081526020015b60405180910390f35b34801561032b57600080fd5b5061033461089f565b6040516103169190612435565b34801561034d57600080fd5b5061030c61035c366004612486565b6108d3565b34801561036d57600080fd5b5061038161037c3660046124d3565b610907565b005b34801561038f57600080fd5b506103b77f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610316565b3480156103e857600080fd5b506103fc6103f73660046124fe565b610b18565b604051610316919061253c565b34801561041557600080fd5b5061030c610b52565b34801561042a57600080fd5b506103fc610b18565b34801561043f57600080fd5b506103b77f000000000000000000000000000000000000000000000000000000000000000081565b34801561047357600080fd5b5061030c6108d3565b34801561048857600080fd5b5061038161049736600461256d565b610be8565b3480156104a857600080fd5b5061030c610dbf565b3480156104bd57600080fd5b506103b76104cc3660046123ee565b610e2c565b3480156104dd57600080fd5b506103816104ec366004612592565b610e49565b3480156104fd57600080fd5b5061030c61050c3660046125d4565b61125c565b34801561051d57600080fd5b5061030c6112d2565b34801561053257600080fd5b506103816105413660046125ed565b61133f565b34801561055257600080fd5b5061030c610561366004612486565b6114fa565b34801561057257600080fd5b5061030c6115c8565b34801561058757600080fd5b5061030c61035c36600461263f565b3480156105a257600080fd5b5061030c611635565b3480156105b757600080fd5b506103b77f000000000000000000000000000000000000000000000000000000000000000081565b3480156105eb57600080fd5b506103816105fa366004612592565b610b20565b34801561060b57600080fd5b5061030c6116a2565b34801561062057600080fd5b506103b761035c3660046123ee565b34801561063b57600080fd5b506103b761035c3660046125d4565b34801561065657600080fd5b5061030c61170f565b34801561066b57600080fd5b506103b761067a3660046125d4565b61177c565b34801561068b57600080fd5b5061030c61069a36600461265c565b6117d6565b3480156106ab57600080fd5b506103b77f000000000000000000000000000000000000000000000000000000000000000081565b3480156106df57600080fd5b5061030c61035c36600461267f565b3480156106fa57600080fd5b5061030c611893565b34801561070f57600080fd5b5061030c61071e3660046125d4565b611900565b34801561072f57600080fd5b5061038161073e3660046124d3565b611976565b34801561074f57600080fd5b5061030c61075e3660046126c6565b611d77565b34801561076f57600080fd5b5061030c611dee565b34801561078457600080fd5b506103b7611e5b565b34801561079957600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103b7565b3480156107cc57600080fd5b5061030c611eec565b6040517f4903b0d10000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff821660048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634903b0d1906024015b602060405180830381865afa158015610875573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089991906126f3565b92915050565b60606040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8135156109f25761095173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001633308535611f59565b6040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152823560048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632e1a7d4d90602401600060405180830381600087803b1580156109d957600080fd5b505af11580156109ed573d6000803e3d6000fd5b505050505b602082013515610a4257610a4273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001633306020860135611f59565b6040517f0b4c7e4d0000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690630b4c7e4d90843590610ab9908690869060040161273b565b6000604051808303818588803b158015610ad257600080fd5b505af1158015610ae6573d6000803e3d6000fd5b5050505050610b147f0000000000000000000000000000000000000000000000000000000000000000612035565b5050565b610b206123be565b6040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663140522886040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be391906126f3565b905090565b610c2a73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333086611f59565b6040517f1a4d01d200000000000000000000000000000000000000000000000000000000815260048101849052600f83900b6024820152604481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631a4d01d290606401600060405180830381600087803b158015610cc357600080fd5b505af1158015610cd7573d6000803e3d6000fd5b5050505081600f0b60001415610d96577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0476040518263ffffffff1660e01b81526004016000604051808303818588803b158015610d4f57600080fd5b505af1158015610d63573d6000803e3d6000fd5b5050505050610d917f0000000000000000000000000000000000000000000000000000000000000000612035565b505050565b610d917f0000000000000000000000000000000000000000000000000000000000000000612035565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632081066c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bbf573d6000803e3d6000fd5b6000610899826fffffffffffffffffffffffffffffffff1661177c565b83600f0b6000148015610e5f575082600f0b6001145b1561102f57610ea673ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333085611f59565b6040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018390527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632e1a7d4d90602401600060405180830381600087803b158015610f2e57600080fd5b505af1158015610f42573d6000803e3d6000fd5b50506040517f3df02124000000000000000000000000000000000000000000000000000000008152600f87810b600483015286900b602482015260448101859052606481018490527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169250633df02124915084906084016000604051808303818588803b158015610fe857600080fd5b505af1158015610ffc573d6000803e3d6000fd5b505050505061102a7f0000000000000000000000000000000000000000000000000000000000000000612035565b611256565b83600f0b6001148015611045575082600f0b6000145b156111ef5761108c73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333085611f59565b6040517f3df02124000000000000000000000000000000000000000000000000000000008152600f85810b600483015284900b602482015260448101839052606481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633df0212490608401600060405180830381600087803b15801561112d57600080fd5b505af1158015611141573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0476040518263ffffffff1660e01b81526004016000604051808303818588803b1580156111ad57600080fd5b505af11580156111c1573d6000803e3d6000fd5b505050505061102a7f0000000000000000000000000000000000000000000000000000000000000000612035565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f496e636f727265637420692c6a20706172616d6574657273000000000000000060448201526064015b60405180910390fd5b50505050565b6040517f4903b0d1000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634903b0d190602401610858565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635409491a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bbf573d6000803e3d6000fd5b61138173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333085611f59565b6040517f5b36389c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635b36389c906113f59085908590600401612753565b600060405180830381600087803b15801561140f57600080fd5b505af1158015611423573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0476040518263ffffffff1660e01b81526004016000604051808303818588803b15801561148f57600080fd5b505af11580156114a3573d6000803e3d6000fd5b50505050506114d17f0000000000000000000000000000000000000000000000000000000000000000612035565b610b147f0000000000000000000000000000000000000000000000000000000000000000612035565b6040517f5e0d443f000000000000000000000000000000000000000000000000000000008152600f84810b600483015283900b6024820152604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635e0d443f90606401602060405180830381865afa15801561159a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115be91906126f3565b90505b9392505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166363543f066040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bbf573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166376a2f0f06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bbf573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b4b577ad6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bbf573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb7b8b806040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bbf573d6000803e3d6000fd5b6000816117aa57507f0000000000000000000000000000000000000000000000000000000000000000919050565b507f0000000000000000000000000000000000000000000000000000000000000000919050565b919050565b6040517fcc2b27d700000000000000000000000000000000000000000000000000000000815260048101839052600f82900b60248201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063cc2b27d7906044015b602060405180830381865afa15801561186f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115c191906126f3565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bbf573d6000803e3d6000fd5b6040517fe2e7d264000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e2e7d26490602401610858565b6119b873ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333084611f59565b6040517fe310327300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e310327390611a2c908590859060040161273b565b600060405180830381600087803b158015611a4657600080fd5b505af1158015611a5a573d6000803e3d6000fd5b50505050600182600060028110611a7357611a7361270c565b60200201351115611c20577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0476040518263ffffffff1660e01b81526004016000604051808303818588803b158015611ae657600080fd5b505af1158015611afa573d6000803e3d6000fd5b50506040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600093507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1692506370a082319150602401602060405180830381865afa158015611b8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb091906126f3565b90506001811115611c1e57611c1e73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016337fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8401612110565b505b600160208301351115611d4e576040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015611cba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cde91906126f3565b90506001811115611d4c57611d4c73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016337fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8401612110565b505b610b147f0000000000000000000000000000000000000000000000000000000000000000612035565b6040517fed8e84f300000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063ed8e84f390611852908690869060040161276d565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f446c1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bbf573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ec8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be39190612785565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fee3f7f96040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bbf573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526112569085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612166565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa1580156120a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120c691906126f3565b90506001811115610b1457610b1473ffffffffffffffffffffffffffffffffffffffff8316337fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84015b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610d919084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401611fb3565b60006121c8826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166122729092919063ffffffff16565b805190915015610d9157808060200190518101906121e691906127a2565b610d91576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161124d565b60606115be848460008585843b6122e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161124d565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161230e91906127bf565b60006040518083038185875af1925050503d806000811461234b576040519150601f19603f3d011682016040523d82523d6000602084013e612350565b606091505b509150915061236082828661236b565b979650505050505050565b6060831561237a5750816115c1565b82511561238a5782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124d9190612435565b60405180604001604052806002906020820280368337509192915050565b8035600f81900b81146117d157600080fd5b60006020828403121561240057600080fd5b6115c1826123dc565b60005b8381101561242457818101518382015260200161240c565b838111156112565750506000910152565b6020815260008251806020840152612454816040850160208701612409565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b60008060006060848603121561249b57600080fd5b6124a4846123dc565b92506124b2602085016123dc565b9150604084013590509250925092565b806040810183101561089957600080fd5b600080606083850312156124e657600080fd5b6124f084846124c2565b946040939093013593505050565b600080600060a0848603121561251357600080fd5b61251d85856124c2565b925061252c85604086016124c2565b9150608084013590509250925092565b60408101818360005b6002811015612564578151835260209283019290910190600101612545565b50505092915050565b60008060006060848603121561258257600080fd5b833592506124b2602085016123dc565b600080600080608085870312156125a857600080fd5b6125b1856123dc565b93506125bf602086016123dc565b93969395505050506040820135916060013590565b6000602082840312156125e657600080fd5b5035919050565b6000806060838503121561260057600080fd5b8235915061261184602085016124c2565b90509250929050565b73ffffffffffffffffffffffffffffffffffffffff8116811461263c57600080fd5b50565b60006020828403121561265157600080fd5b81356115c18161261a565b6000806040838503121561266f57600080fd5b82359150612611602084016123dc565b6000806040838503121561269257600080fd5b823561269d8161261a565b915060208301356126ad8161261a565b809150509250929050565b801515811461263c57600080fd5b600080606083850312156126d957600080fd5b6126e384846124c2565b915060408301356126ad816126b8565b60006020828403121561270557600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60608101604084833760409190910191909152919050565b828152606081016040836020840137600081529392505050565b60608101604084833791151560409190910152919050565b60006020828403121561279757600080fd5b81516115c18161261a565b6000602082840312156127b457600080fd5b81516115c1816126b8565b600082516127d1818460208701612409565b919091019291505056fea264697066735822122081240fa8050b2fa22575231ebf9e640e9f60a23c0734c9b91c145262e1655b7064736f6c634300080a0033"; - -type CurveV1StETHPoolGatewayConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: CurveV1StETHPoolGatewayConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class CurveV1StETHPoolGateway__factory extends ContractFactory { - constructor(...args: CurveV1StETHPoolGatewayConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - _weth: string, - _steth: string, - _pool: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - _weth, - _steth, - _pool, - overrides || {} - ) as Promise; - } - override getDeployTransaction( - _weth: string, - _steth: string, - _pool: string, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(_weth, _steth, _pool, overrides || {}); - } - override attach(address: string): CurveV1StETHPoolGateway { - return super.attach(address) as CurveV1StETHPoolGateway; - } - override connect(signer: Signer): CurveV1StETHPoolGateway__factory { - return super.connect(signer) as CurveV1StETHPoolGateway__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): CurveV1StETHPoolGatewayInterface { - return new utils.Interface(_abi) as CurveV1StETHPoolGatewayInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): CurveV1StETHPoolGateway { - return new Contract( - address, - _abi, - signerOrProvider - ) as CurveV1StETHPoolGateway; - } -} diff --git a/src/types/factories/contracts/adapters/curve/CurveV1_stETHGateway.sol/index.ts b/src/types/factories/contracts/adapters/curve/CurveV1_stETHGateway.sol/index.ts deleted file mode 100644 index 34913327..00000000 --- a/src/types/factories/contracts/adapters/curve/CurveV1_stETHGateway.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { CurveV1StETHPoolGateway__factory } from "./CurveV1StETHPoolGateway__factory"; diff --git a/src/types/factories/contracts/adapters/curve/index.ts b/src/types/factories/contracts/adapters/curve/index.ts deleted file mode 100644 index a775e1d4..00000000 --- a/src/types/factories/contracts/adapters/curve/index.ts +++ /dev/null @@ -1,10 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export * as curveV12Sol from "./CurveV1_2.sol"; -export * as curveV13Sol from "./CurveV1_3.sol"; -export * as curveV14Sol from "./CurveV1_4.sol"; -export * as curveV1BaseSol from "./CurveV1_Base.sol"; -export * as curveV1DepositZapSol from "./CurveV1_DepositZap.sol"; -export * as curveV1StEthSol from "./CurveV1_stETH.sol"; -export * as curveV1StEthGatewaySol from "./CurveV1_stETHGateway.sol"; diff --git a/src/types/factories/contracts/adapters/index.ts b/src/types/factories/contracts/adapters/index.ts deleted file mode 100644 index 9f4b5984..00000000 --- a/src/types/factories/contracts/adapters/index.ts +++ /dev/null @@ -1,10 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export * as convex from "./convex"; -export * as curve from "./curve"; -export * as lido from "./lido"; -export * as uniswap from "./uniswap"; -export * as yearn from "./yearn"; -export { AbstractAdapter__factory } from "./AbstractAdapter__factory"; -export { UniversalAdapter__factory } from "./UniversalAdapter__factory"; diff --git a/src/types/factories/contracts/adapters/lido/LidoV1.sol/LidoV1Adapter__factory.ts b/src/types/factories/contracts/adapters/lido/LidoV1.sol/LidoV1Adapter__factory.ts deleted file mode 100644 index ae2bb305..00000000 --- a/src/types/factories/contracts/adapters/lido/LidoV1.sol/LidoV1Adapter__factory.ts +++ /dev/null @@ -1,558 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - LidoV1Adapter, - LidoV1AdapterInterface, -} from "../../../../../contracts/adapters/lido/LidoV1.sol/LidoV1Adapter"; - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "_creditManager", - type: "address", - }, - { - internalType: "address", - name: "_lidoGateway", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "CallerNotConfiguratorException", - type: "error", - }, - { - inputs: [], - name: "CallerNotPausableAdminException", - type: "error", - }, - { - inputs: [], - name: "CallerNotUnPausableAdminException", - type: "error", - }, - { - inputs: [], - name: "LimitIsOverException", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "TokenIsNotInAllowedList", - type: "error", - }, - { - inputs: [], - name: "ZeroAddressException", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "_limit", - type: "uint256", - }, - ], - name: "NewLimit", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "Paused", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "Unpaused", - type: "event", - }, - { - inputs: [], - name: "_acl", - outputs: [ - { - internalType: "contract ACL", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "_gearboxAdapterType", - outputs: [ - { - internalType: "enum AdapterType", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "_gearboxAdapterVersion", - outputs: [ - { - internalType: "uint16", - name: "", - type: "uint16", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_owner", - type: "address", - }, - { - internalType: "address", - name: "_spender", - type: "address", - }, - ], - name: "allowance", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditFacade", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditManager", - outputs: [ - { - internalType: "contract ICreditManagerV2", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "decimals", - outputs: [ - { - internalType: "uint8", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "getFee", - outputs: [ - { - internalType: "uint16", - name: "", - type: "uint16", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_sharesAmount", - type: "uint256", - }, - ], - name: "getPooledEthByShares", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_ethAmount", - type: "uint256", - }, - ], - name: "getSharesByPooledEth", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "getTotalPooledEther", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "getTotalShares", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "limit", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "pause", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "paused", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_limit", - type: "uint256", - }, - ], - name: "setLimit", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - ], - name: "sharesOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "stETH", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "submit", - outputs: [ - { - internalType: "uint256", - name: "result", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "submitAll", - outputs: [ - { - internalType: "uint256", - name: "result", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "symbol", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "targetContract", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "totalSupply", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "treasury", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "unpause", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "weth", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x6101606040523480156200001257600080fd5b50604051620023c3380380620023c3833981810160405260408110156200003857600080fd5b50805160209182015160408051632b853d7960e11b81529051929391926001600160a01b0385169263570a7af292600480820193918290030181865afa15801562000087573d6000803e3d6000fd5b505050506040513d60208110156200009e57600080fd5b505160408051630a55006360e21b815290516001600160a01b0390921691632954018c916004808201926020929091908290030181865afa158015620000e8573d6000803e3d6000fd5b505050506040513d6020811015620000ff57600080fd5b505182826001600160a01b03821615806200012157506001600160a01b038116155b156200014057604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038216608081905260408051632f7a188160e01b81529051632f7a1881916004808201926020929091908290030181865afa1580156200018b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001b191906200048a565b6001600160a01b0390811660a05290811660c0526000805460ff19169055821615159050620001f357604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000232573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025891906200048a565b6001600160a01b031660e0816001600160a01b03168152505050600180819055506000826001600160a01b031663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002ba573d6000803e3d6000fd5b505050506040513d6020811015620002d157600080fd5b505160408051630a55006360e21b815290516001600160a01b0390921691632954018c916004808201926020929091908290030181865afa1580156200031b573d6000803e3d6000fd5b505050506040513d60208110156200033257600080fd5b50516040805163183fc7c960e31b815290519192506001600160a01b0384169163c1fe3e48916004808201926020929091908290030181865afa1580156200037e573d6000803e3d6000fd5b505050506040513d60208110156200039557600080fd5b50516001600160a01b039081166101005260408051634c252f9160e01b8152905191831691634c252f91916004808201926020929091908290030181865afa158015620003e6573d6000803e3d6000fd5b505050506040513d6020811015620003fd57600080fd5b50516001600160a01b0390811661012052604080516326c74fc360e01b81529051918316916326c74fc3916004808201926020929091908290030181865afa1580156200044e573d6000803e3d6000fd5b505050506040513d60208110156200046557600080fd5b50516001600160a01b0316610140525050680ad78ebc5ac620000060025550620004bc565b6000602082840312156200049d57600080fd5b81516001600160a01b0381168114620004b557600080fd5b9392505050565b60805160a05160c05160e051610100516101205161014051611dcc620005f760003960008181610368015261123b01526000818161032701528181610a1501526112c601526000818161048c01526112e80152600081816104170152818161082f01528181610bc40152610db801526000818161043e0152818161057c015281816106e50152818161076f01528181610ac001528181610b2d01528181610c8801528181610d1601528181610e7a01528181610ee701528181610f5401528181610fc10152818161114801528181611686015281816117a5015261187f0152600081816102a1015281816114f10152611945015260008181610465015281816109250152818161108d015281816116dc01528181611776015281816118b6015281816119cd01528181611a810152611b2b0152611dcc6000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80637a28fb88116100f9578063c1fe3e4811610097578063d5002f2e11610071578063d5002f2e146104e5578063dd62ed3e146104ed578063ea99c2a614610528578063f5eb42dc1461054557600080fd5b8063c1fe3e4814610487578063ce30bbdb146104ae578063ced72f87146104dd57600080fd5b8063a4d66daf116100d3578063a4d66daf14610409578063a50cf2c814610412578063bd90df7014610439578063c12c21c01461046057600080fd5b80637a28fb88146103dc5780638456cb59146103f957806395d89b411461040157600080fd5b806337cfdaca116101665780635c975abb116101405780635c975abb1461034957806361d027b31461036357806370a082311461038a57806378aa73a4146103bd57600080fd5b806337cfdaca146103125780633f4ba83a1461031a5780633fc8cef31461032257600080fd5b806327ea6f2b116101a257806327ea6f2b1461027d5780632f7a18811461029c57806330bebac9146102ec578063313ce567146102f457600080fd5b806306fdde03146101c957806318160ddd146102465780631920845114610260575b600080fd5b6101d1610578565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561020b5781810151838201526020016101f3565b50505050905090810190601f1680156102385780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61024e6106e1565b60408051918252519081900360200190f35b61024e6004803603602081101561027657600080fd5b503561076b565b61029a6004803603602081101561029357600080fd5b5035610801565b005b6102c37f000000000000000000000000000000000000000000000000000000000000000081565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b61024e610920565b6102fc610abc565b6040805160ff9092168252519081900360200190f35b61024e610b29565b61029a610b96565b6102c37f000000000000000000000000000000000000000000000000000000000000000081565b60005460ff16604080519115158252519081900360200190f35b6102c37f000000000000000000000000000000000000000000000000000000000000000081565b61024e600480360360208110156103a057600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610c84565b6103c5600181565b6040805161ffff9092168252519081900360200190f35b61024e600480360360208110156103f257600080fd5b5035610d12565b61029a610d8a565b6101d1610e76565b61024e60025481565b6102c37f000000000000000000000000000000000000000000000000000000000000000081565b6102c37f000000000000000000000000000000000000000000000000000000000000000081565b6102c37f000000000000000000000000000000000000000000000000000000000000000081565b6102c37f000000000000000000000000000000000000000000000000000000000000000081565b6104b6600f81565b604051808260108111156104cc576104cc611b90565b815260200191505060405180910390f35b6103c5610ee3565b61024e610f50565b61024e6004803603604081101561050357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610fbd565b61024e6004803603602081101561053e57600080fd5b5035611088565b61024e6004803603602081101561055b57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611144565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156105e5573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052602081101561062c57600080fd5b810190808051604051939291908464010000000082111561064c57600080fd5b90830190602082018581111561066157600080fd5b825164010000000081118282018810171561067b57600080fd5b82525081516020918201929091019080838360005b838110156106a8578181015183820152602001610690565b50505050905090810190601f1680156106d55780820380516001836020036101000a031916815260200191505b50604052505050905090565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561074e573d6000803e3d6000fd5b505050506040513d602081101561076457600080fd5b5051919050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166319208451836040518263ffffffff1660e01b815260040180828152602001915050602060405180830381865afa1580156107e3573d6000803e3d6000fd5b505050506040513d60208110156107f957600080fd5b505192915050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561088b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108af9190611bbf565b6108e5576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040805182815290517fe1e1c8251499b303aefb01cf84a5ce22a95911c20ce2f3f5ae670441a6353d829181900360200190a150565b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e958b704336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381865afa1580156109af573d6000803e3d6000fd5b505050506040513d60208110156109c557600080fd5b5051604080517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015291519293506000927f0000000000000000000000000000000000000000000000000000000000000000909216916370a08231916024808201926020929091908290030181865afa158015610a63573d6000803e3d6000fd5b505050506040513d6020811015610a7957600080fd5b505190506001811115610ab7577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01610ab4818360016111d2565b92505b505090565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561074e573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166337cfdaca6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561074e573d6000803e3d6000fd5b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa158015610c20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c449190611bbf565b610c7a576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c8261132e565b565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381865afa1580156107e3573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637a28fb88836040518263ffffffff1660e01b815260040180828152602001915050602060405180830381865afa1580156107e3573d6000803e3d6000fd5b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015610e14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e389190611bbf565b610e6e576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c82611414565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156105e5573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ced72f876040518163ffffffff1660e01b8152600401602060405180830381865afa15801561074e573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d5002f2e6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561074e573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e84846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381865afa158015611069573d6000803e3d6000fd5b505050506040513d602081101561107f57600080fd5b50519392505050565b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e958b704336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381865afa158015611117573d6000803e3d6000fd5b505050506040513d602081101561112d57600080fd5b5051905061113d838260006111d2565b9392505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f5eb42dc836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381865afa1580156107e3573d6000803e3d6000fd5b6000600254841115611210576040517f2bfcdce800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280548590039055604080516024810186905273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166044808301919091528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff532e86a000000000000000000000000000000000000000000000000000000001790526113109084907f0000000000000000000000000000000000000000000000000000000000000000907f0000000000000000000000000000000000000000000000000000000000000000906001876114d4565b806020019051602081101561132457600080fd5b5051949350505050565b60005460ff1661139f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff1615611481576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401611396565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586113ea3390565b60606000803373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461163d576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301528916906370a0823190602401602060405180830381865afa158015611582573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a69190611be1565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152919350908816906370a0823190602401602060405180830381865afa158015611616573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163a9190611be1565b90505b8415611739576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561172057600080fd5b505af1158015611734573d6000803e3d6000fd5b505050505b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a906117cf9033907f0000000000000000000000000000000000000000000000000000000000000000908b90600401611c23565b6000604051808303816000875af11580156117ee573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526118349190810190611ccb565b92508415611913576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301528981166044830152600160648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156118fa57600080fd5b505af115801561190e573d6000803e3d6000fd5b505050505b61192189898985858961192d565b50509695505050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614611a2e576040517f654a9eda00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528681166024830152858116604483015260648201859052608482018490527f0000000000000000000000000000000000000000000000000000000000000000169063654a9eda9060a401600060405180830381600087803b158015611a1157600080fd5b505af1158015611a25573d6000803e3d6000fd5b50505050611b88565b8015611ade576040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015286811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b158015611ac557600080fd5b505af1158015611ad9573d6000803e3d6000fd5b505050505b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015285811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015611b6f57600080fd5b505af1158015611b83573d6000803e3d6000fd5b505050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060208284031215611bd157600080fd5b8151801515811461113d57600080fd5b60006020828403121561076457600080fd5b60005b83811015611c0e578181015183820152602001611bf6565b83811115611c1d576000848401525b50505050565b600073ffffffffffffffffffffffffffffffffffffffff8086168352808516602084015250606060408301528251806060840152611c68816080850160208701611bf3565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01691909101608001949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060208284031215611cdd57600080fd5b815167ffffffffffffffff80821115611cf557600080fd5b818401915084601f830112611d0957600080fd5b815181811115611d1b57611d1b611c9c565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715611d6157611d61611c9c565b81604052828152876020848701011115611d7a57600080fd5b611d8b836020830160208801611bf3565b97965050505050505056fea264697066735822122079bac7f44887eaec4590e7806d653fc9efee2d669150a5d8913350e0b70db90e64736f6c634300080a0033"; - -type LidoV1AdapterConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: LidoV1AdapterConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class LidoV1Adapter__factory extends ContractFactory { - constructor(...args: LidoV1AdapterConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - _creditManager: string, - _lidoGateway: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - _creditManager, - _lidoGateway, - overrides || {} - ) as Promise; - } - override getDeployTransaction( - _creditManager: string, - _lidoGateway: string, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction( - _creditManager, - _lidoGateway, - overrides || {} - ); - } - override attach(address: string): LidoV1Adapter { - return super.attach(address) as LidoV1Adapter; - } - override connect(signer: Signer): LidoV1Adapter__factory { - return super.connect(signer) as LidoV1Adapter__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): LidoV1AdapterInterface { - return new utils.Interface(_abi) as LidoV1AdapterInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): LidoV1Adapter { - return new Contract(address, _abi, signerOrProvider) as LidoV1Adapter; - } -} diff --git a/src/types/factories/contracts/adapters/lido/LidoV1.sol/index.ts b/src/types/factories/contracts/adapters/lido/LidoV1.sol/index.ts deleted file mode 100644 index f615c243..00000000 --- a/src/types/factories/contracts/adapters/lido/LidoV1.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { LidoV1Adapter__factory } from "./LidoV1Adapter__factory"; diff --git a/src/types/factories/contracts/adapters/lido/LidoV1_WETHGateway.sol/LidoV1Gateway__factory.ts b/src/types/factories/contracts/adapters/lido/LidoV1_WETHGateway.sol/LidoV1Gateway__factory.ts deleted file mode 100644 index e0998944..00000000 --- a/src/types/factories/contracts/adapters/lido/LidoV1_WETHGateway.sol/LidoV1Gateway__factory.ts +++ /dev/null @@ -1,336 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - LidoV1Gateway, - LidoV1GatewayInterface, -} from "../../../../../contracts/adapters/lido/LidoV1_WETHGateway.sol/LidoV1Gateway"; - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "_weth", - type: "address", - }, - { - internalType: "address", - name: "_stETH", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "ZeroAddressException", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "_owner", - type: "address", - }, - { - internalType: "address", - name: "_spender", - type: "address", - }, - ], - name: "allowance", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "decimals", - outputs: [ - { - internalType: "uint8", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "getFee", - outputs: [ - { - internalType: "uint16", - name: "", - type: "uint16", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_sharesAmount", - type: "uint256", - }, - ], - name: "getPooledEthByShares", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_ethAmount", - type: "uint256", - }, - ], - name: "getSharesByPooledEth", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "getTotalPooledEther", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "getTotalShares", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - ], - name: "sharesOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "stETH", - outputs: [ - { - internalType: "contract IstETH", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "address", - name: "_referral", - type: "address", - }, - ], - name: "submit", - outputs: [ - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "symbol", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "totalSupply", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "weth", - outputs: [ - { - internalType: "contract IWETH", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - stateMutability: "payable", - type: "receive", - }, -]; - -const _bytecode = - "0x60c060405234801561001057600080fd5b50604051610fe5380380610fe58339818101604052604081101561003357600080fd5b5080516020909101516001600160a01b038216158061005957506001600160a01b038116155b1561007757604051635919af9760e11b815260040160405180910390fd5b6001600160a01b039081166080521660a05260805160a051610ec761011e6000396000818161022501528181610b030152610baf015260008181610301015281816104360152818161059f01528181610629015281816106bf0152818161072c01528181610799015281816108270152818161089f0152818161090c01528181610979015281816109e601528181610c1001528181610cfe0152610e070152610ec76000f3fe6080604052600436106100ec5760003560e01c80637a28fb881161008a578063d5002f2e11610059578063d5002f2e1461034f578063dd62ed3e14610364578063f532e86a146103ac578063f5eb42dc146103f257600080fd5b80637a28fb88146102b057806395d89b41146102da578063c1fe3e48146102ef578063ced72f871461032357600080fd5b8063313ce567116100c6578063313ce567146101d357806337cfdaca146101fe5780633fc8cef31461021357806370a082311461027057600080fd5b806306fdde03146100f857806318160ddd1461018257806319208451146101a957600080fd5b366100f357005b600080fd5b34801561010457600080fd5b5061010d610432565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561014757818101518382015260200161012f565b50505050905090810190601f1680156101745780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561018e57600080fd5b5061019761059b565b60408051918252519081900360200190f35b3480156101b557600080fd5b50610197600480360360208110156101cc57600080fd5b5035610625565b3480156101df57600080fd5b506101e86106bb565b6040805160ff9092168252519081900360200190f35b34801561020a57600080fd5b50610197610728565b34801561021f57600080fd5b506102477f000000000000000000000000000000000000000000000000000000000000000081565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561027c57600080fd5b506101976004803603602081101561029357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610795565b3480156102bc57600080fd5b50610197600480360360208110156102d357600080fd5b5035610823565b3480156102e657600080fd5b5061010d61089b565b3480156102fb57600080fd5b506102477f000000000000000000000000000000000000000000000000000000000000000081565b34801561032f57600080fd5b50610338610908565b6040805161ffff9092168252519081900360200190f35b34801561035b57600080fd5b50610197610975565b34801561037057600080fd5b506101976004803603604081101561038757600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166109e2565b3480156103b857600080fd5b50610197600480360360408110156103cf57600080fd5b508035906020013573ffffffffffffffffffffffffffffffffffffffff16610aad565b3480156103fe57600080fd5b506101976004803603602081101561041557600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610e03565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801561049f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405260208110156104e657600080fd5b810190808051604051939291908464010000000082111561050657600080fd5b90830190602082018581111561051b57600080fd5b825164010000000081118282018810171561053557600080fd5b82525081516020918201929091019080838360005b8381101561056257818101518382015260200161054a565b50505050905090810190601f16801561058f5780820380516001836020036101000a031916815260200191505b50604052505050905090565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610608573d6000803e3d6000fd5b505050506040513d602081101561061e57600080fd5b5051919050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166319208451836040518263ffffffff1660e01b815260040180828152602001915050602060405180830381865afa15801561069d573d6000803e3d6000fd5b505050506040513d60208110156106b357600080fd5b505192915050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610608573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166337cfdaca6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610608573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381865afa15801561069d573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637a28fb88836040518263ffffffff1660e01b815260040180828152602001915050602060405180830381865afa15801561069d573d6000803e3d6000fd5b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801561049f573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ced72f876040518163ffffffff1660e01b8152600401602060405180830381865afa158015610608573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d5002f2e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610608573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e84846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381865afa158015610a8e573d6000803e3d6000fd5b505050506040513d6020811015610aa457600080fd5b50519392505050565b604080517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101849052905160009173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016916323b872dd91606480820192602092909190829003018187875af1158015610b50573d6000803e3d6000fd5b505050506040513d6020811015610b6657600080fd5b5050604080517f2e1a7d4d00000000000000000000000000000000000000000000000000000000815260048101859052905173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001691632e1a7d4d91602480830192600092919082900301818387803b158015610bf657600080fd5b505af1158015610c0a573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a1903eab84846040518363ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038185885af1158015610c9c573d6000803e3d6000fd5b50505050506040513d6020811015610cb357600080fd5b5051604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905191925073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169163a9059cbb91339184916370a082319160248083019260209291908290030181865afa158015610d53573d6000803e3d6000fd5b505050506040513d6020811015610d6957600080fd5b5051604080517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff9093166004840152602483019190915251604480830192602092919082900301816000875af1158015610de4573d6000803e3d6000fd5b505050506040513d6020811015610dfa57600080fd5b50909392505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f5eb42dc836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381865afa15801561069d573d6000803e3d6000fdfea2646970667358221220eb57e94748a3f053784cffe3296608e83b097fea3cb3a1bfde402824bad506bd64736f6c634300080a0033"; - -type LidoV1GatewayConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: LidoV1GatewayConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class LidoV1Gateway__factory extends ContractFactory { - constructor(...args: LidoV1GatewayConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - _weth: string, - _stETH: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - _weth, - _stETH, - overrides || {} - ) as Promise; - } - override getDeployTransaction( - _weth: string, - _stETH: string, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(_weth, _stETH, overrides || {}); - } - override attach(address: string): LidoV1Gateway { - return super.attach(address) as LidoV1Gateway; - } - override connect(signer: Signer): LidoV1Gateway__factory { - return super.connect(signer) as LidoV1Gateway__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): LidoV1GatewayInterface { - return new utils.Interface(_abi) as LidoV1GatewayInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): LidoV1Gateway { - return new Contract(address, _abi, signerOrProvider) as LidoV1Gateway; - } -} diff --git a/src/types/factories/contracts/adapters/lido/LidoV1_WETHGateway.sol/index.ts b/src/types/factories/contracts/adapters/lido/LidoV1_WETHGateway.sol/index.ts deleted file mode 100644 index 6faec009..00000000 --- a/src/types/factories/contracts/adapters/lido/LidoV1_WETHGateway.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { LidoV1Gateway__factory } from "./LidoV1Gateway__factory"; diff --git a/src/types/factories/contracts/adapters/lido/index.ts b/src/types/factories/contracts/adapters/lido/index.ts deleted file mode 100644 index 01ccabd5..00000000 --- a/src/types/factories/contracts/adapters/lido/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export * as lidoV1Sol from "./LidoV1.sol"; -export * as lidoV1WethGatewaySol from "./LidoV1_WETHGateway.sol"; diff --git a/src/types/factories/contracts/adapters/uniswap/UniswapV2.sol/UniswapV2Adapter__factory.ts b/src/types/factories/contracts/adapters/uniswap/UniswapV2.sol/UniswapV2Adapter__factory.ts deleted file mode 100644 index 7ba2741d..00000000 --- a/src/types/factories/contracts/adapters/uniswap/UniswapV2.sol/UniswapV2Adapter__factory.ts +++ /dev/null @@ -1,1152 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - UniswapV2Adapter, - UniswapV2AdapterInterface, -} from "../../../../../contracts/adapters/uniswap/UniswapV2.sol/UniswapV2Adapter"; - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "_creditManager", - type: "address", - }, - { - internalType: "address", - name: "_router", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "NotImplementedException", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "TokenIsNotInAllowedList", - type: "error", - }, - { - inputs: [], - name: "ZeroAddressException", - type: "error", - }, - { - inputs: [], - name: "WETH", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "_gearboxAdapterType", - outputs: [ - { - internalType: "enum AdapterType", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "_gearboxAdapterVersion", - outputs: [ - { - internalType: "uint16", - name: "", - type: "uint16", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "addLiquidity", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "addLiquidityETH", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "payable", - type: "function", - }, - { - inputs: [], - name: "creditFacade", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditManager", - outputs: [ - { - internalType: "contract ICreditManagerV2", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "factory", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountOut", - type: "uint256", - }, - { - internalType: "uint256", - name: "reserveIn", - type: "uint256", - }, - { - internalType: "uint256", - name: "reserveOut", - type: "uint256", - }, - ], - name: "getAmountIn", - outputs: [ - { - internalType: "uint256", - name: "amountIn", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountIn", - type: "uint256", - }, - { - internalType: "uint256", - name: "reserveIn", - type: "uint256", - }, - { - internalType: "uint256", - name: "reserveOut", - type: "uint256", - }, - ], - name: "getAmountOut", - outputs: [ - { - internalType: "uint256", - name: "amountOut", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountOut", - type: "uint256", - }, - { - internalType: "address[]", - name: "path", - type: "address[]", - }, - ], - name: "getAmountsIn", - outputs: [ - { - internalType: "uint256[]", - name: "amounts", - type: "uint256[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountIn", - type: "uint256", - }, - { - internalType: "address[]", - name: "path", - type: "address[]", - }, - ], - name: "getAmountsOut", - outputs: [ - { - internalType: "uint256[]", - name: "amounts", - type: "uint256[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountA", - type: "uint256", - }, - { - internalType: "uint256", - name: "reserveA", - type: "uint256", - }, - { - internalType: "uint256", - name: "reserveB", - type: "uint256", - }, - ], - name: "quote", - outputs: [ - { - internalType: "uint256", - name: "amountB", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "removeLiquidity", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "removeLiquidityETH", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "removeLiquidityETHSupportingFeeOnTransferTokens", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "bool", - name: "", - type: "bool", - }, - { - internalType: "uint8", - name: "", - type: "uint8", - }, - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - name: "removeLiquidityETHWithPermit", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "bool", - name: "", - type: "bool", - }, - { - internalType: "uint8", - name: "", - type: "uint8", - }, - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - name: "removeLiquidityETHWithPermitSupportingFeeOnTransferTokens", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "bool", - name: "", - type: "bool", - }, - { - internalType: "uint8", - name: "", - type: "uint8", - }, - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - name: "removeLiquidityWithPermit", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "rateMinRAY", - type: "uint256", - }, - { - internalType: "address[]", - name: "path", - type: "address[]", - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256", - }, - ], - name: "swapAllTokensForTokens", - outputs: [ - { - internalType: "uint256[]", - name: "amounts", - type: "uint256[]", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "address[]", - name: "", - type: "address[]", - }, - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "swapETHForExactTokens", - outputs: [ - { - internalType: "uint256[]", - name: "", - type: "uint256[]", - }, - ], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "address[]", - name: "", - type: "address[]", - }, - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "swapExactETHForTokens", - outputs: [ - { - internalType: "uint256[]", - name: "", - type: "uint256[]", - }, - ], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "address[]", - name: "", - type: "address[]", - }, - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "swapExactETHForTokensSupportingFeeOnTransferTokens", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "address[]", - name: "", - type: "address[]", - }, - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "swapExactTokensForETH", - outputs: [ - { - internalType: "uint256[]", - name: "", - type: "uint256[]", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "address[]", - name: "", - type: "address[]", - }, - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "swapExactTokensForETHSupportingFeeOnTransferTokens", - outputs: [], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountIn", - type: "uint256", - }, - { - internalType: "uint256", - name: "amountOutMin", - type: "uint256", - }, - { - internalType: "address[]", - name: "path", - type: "address[]", - }, - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256", - }, - ], - name: "swapExactTokensForTokens", - outputs: [ - { - internalType: "uint256[]", - name: "amounts", - type: "uint256[]", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "address[]", - name: "", - type: "address[]", - }, - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "swapExactTokensForTokensSupportingFeeOnTransferTokens", - outputs: [], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "address[]", - name: "", - type: "address[]", - }, - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "swapTokensForExactETH", - outputs: [ - { - internalType: "uint256[]", - name: "", - type: "uint256[]", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountOut", - type: "uint256", - }, - { - internalType: "uint256", - name: "amountInMax", - type: "uint256", - }, - { - internalType: "address[]", - name: "path", - type: "address[]", - }, - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256", - }, - ], - name: "swapTokensForExactTokens", - outputs: [ - { - internalType: "uint256[]", - name: "amounts", - type: "uint256[]", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "targetContract", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x60e06040523480156200001157600080fd5b506040516200251b3803806200251b833981016040819052620000349162000121565b81816001600160a01b03821615806200005457506001600160a01b038116155b156200007357604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038216608081905260408051632f7a188160e01b81529051632f7a1881916004808201926020929091908290030181865afa158015620000be573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e4919062000159565b6001600160a01b0390811660a0521660c05250506001600055506200017e565b80516001600160a01b03811681146200011c57600080fd5b919050565b600080604083850312156200013557600080fd5b620001408362000104565b9150620001506020840162000104565b90509250929050565b6000602082840312156200016c57600080fd5b620001778262000104565b9392505050565b60805160a05160c0516122da620002416000396000818161045e015281816106040152818161070101528181610aa401528181610c9c01528181610d6e015281816110dd01528181611186015281816113a8015281816114c701526115a10152600081816102b40152818161121301526116860152600081816104b20152818161084601528181610b8c01528181610e56015281816113fe01528181611498015281816115f70152818161170e015281816117c2015261186c01526122da6000f3fe6080604052600436106101cd5760003560e01c8063ad5c4648116100f7578063c12c21c011610095578063ded9382a11610064578063ded9382a1461052b578063e8e3370014610546578063f305d71914610581578063fb3bdb411461038557600080fd5b8063c12c21c0146104a0578063c45a0155146104d4578063ce30bbdb146104e9578063d06ca61f1461050b57600080fd5b8063b6f9de95116100d1578063b6f9de9514610423578063baa2abde14610431578063bd90df701461044c578063bdbeaa311461048057600080fd5b8063ad5c4648146103d3578063ad615dec146103e8578063af2979eb1461040857600080fd5b80634a25d94a1161016f578063791ac9471161013e578063791ac9471461033b5780637ff36ab51461038557806385f8c259146103935780638803dbee146103b357600080fd5b80634a25d94a1461023a5780635b0d59841461031b5780635c11d7951461033b57806378aa73a41461035d57600080fd5b80631f00ca74116101ab5780631f00ca74146102675780632195995c146102875780632f7a1881146102a257806338ed1739146102fb57600080fd5b806302751cec146101d2578063054d50d41461020c57806318cbafe51461023a575b600080fd5b3480156101de57600080fd5b506101f26101ed3660046118f6565b61058f565b604080519283526020830191909152015b60405180910390f35b34801561021857600080fd5b5061022c610227366004611954565b6105c4565b604051908152602001610203565b34801561024657600080fd5b5061025a6102553660046119cc565b61068d565b6040516102039190611a3f565b34801561027357600080fd5b5061025a610282366004611a83565b6106c1565b34801561029357600080fd5b506101f26101ed366004611af5565b3480156102ae57600080fd5b506102d67f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610203565b34801561030757600080fd5b5061025a6103163660046119cc565b61079d565b34801561032757600080fd5b5061022c610336366004611b9d565b6109fe565b34801561034757600080fd5b5061035b6103563660046119cc565b610a32565b005b34801561036957600080fd5b50610372600281565b60405161ffff9091168152602001610203565b61025a610255366004611c31565b34801561039f57600080fd5b5061022c6103ae366004611954565b610a64565b3480156103bf57600080fd5b5061025a6103ce3660046119cc565b610ae8565b3480156103df57600080fd5b506102d6610c98565b3480156103f457600080fd5b5061022c610403366004611954565b610d2e565b34801561041457600080fd5b5061022c6103363660046118f6565b61035b610356366004611c31565b34801561043d57600080fd5b506101f26101ed366004611c98565b34801561045857600080fd5b506102d67f000000000000000000000000000000000000000000000000000000000000000081565b34801561048c57600080fd5b5061025a61049b366004611d0a565b610db2565b3480156104ac57600080fd5b506102d67f000000000000000000000000000000000000000000000000000000000000000081565b3480156104e057600080fd5b506102d66110d9565b3480156104f557600080fd5b506104fe600181565b6040516102039190611d5d565b34801561051757600080fd5b5061025a610526366004611a83565b611146565b34801561053757600080fd5b506101f26101ed366004611b9d565b34801561055257600080fd5b50610566610561366004611d9e565b6111bf565b60408051938452602084019290925290820152606001610203565b6105666105613660046118f6565b6000806040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f054d50d40000000000000000000000000000000000000000000000000000000081526004810184905260248101839052604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063054d50d4906064015b602060405180830381865afa158015610661573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106859190611e1a565b949350505050565b60606040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1f00ca7400000000000000000000000000000000000000000000000000000000815260609073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690631f00ca749061073a90879087908790600401611e89565b600060405180830381865afa158015610757573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526106859190810190611f2a565b606060026000541415610811576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156108a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c69190611fd0565b90506000868660008181106108dd576108dd611ff4565b90506020020160208101906108f29190612023565b90506000878761090360018261206f565b81811061091257610912611ff4565b90506020020160208101906109279190612023565b90506109d88383836338ed173960e01b8e8e8e8e8b8e60405160240161095296959493929190612086565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152600160006111f6565b8060200190518101906109eb9190611f2a565b60016000559a9950505050505050505050565b60006040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f85f8c2590000000000000000000000000000000000000000000000000000000081526004810184905260248101839052604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906385f8c25990606401610644565b606060026000541415610b57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610808565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610be8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0c9190611fd0565b9050600086866000818110610c2357610c23611ff4565b9050602002016020810190610c389190612023565b905060008787610c4960018261206f565b818110610c5857610c58611ff4565b9050602002016020810190610c6d9190612023565b90506109d8838383638803dbee60e01b8e8e8e8e8b8e60405160240161095296959493929190612086565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d299190611fd0565b905090565b6040517fad615dec0000000000000000000000000000000000000000000000000000000081526004810184905260248101839052604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ad615dec90606401610644565b606060026000541415610e21576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610808565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610eb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed69190611fd0565b9050600085856000818110610eed57610eed611ff4565b9050602002016020810190610f029190612023565b905060008686610f1360018261206f565b818110610f2257610f22611ff4565b9050602002016020810190610f379190612023565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529192506000918416906370a0823190602401602060405180830381865afa158015610fa9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fcd9190611e1a565b905060018111156110c7578080600190039150506110b18484846338ed173960e01b856b033b2e3c9fd0803ce80000008f8861100991906120d1565b611013919061210e565b8e8e8c8f60405160240161102c96959493929190612086565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526001806111f6565b8060200190518101906110c49190611f2a565b94505b50506001600055509095945050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d05573d6000803e3d6000fd5b6040517fd06ca61f00000000000000000000000000000000000000000000000000000000815260609073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063d06ca61f9061073a90879087908790600401611e89565b60008060006040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606000803373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461135f576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301528916906370a0823190602401602060405180830381865afa1580156112a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c89190611e1a565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152919350908816906370a0823190602401602060405180830381865afa158015611338573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135c9190611e1a565b90505b841561145b576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561144257600080fd5b505af1158015611456573d6000803e3d6000fd5b505050505b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a906114f19033907f0000000000000000000000000000000000000000000000000000000000000000908b90600401612179565b6000604051808303816000875af1158015611510573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261155691908101906121f2565b92508415611654576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561163b57600080fd5b505af115801561164f573d6000803e3d6000fd5b505050505b61166289898985858961166e565b50509695505050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461176f576040517f654a9eda00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528681166024830152858116604483015260648201859052608482018490527f0000000000000000000000000000000000000000000000000000000000000000169063654a9eda9060a401600060405180830381600087803b15801561175257600080fd5b505af1158015611766573d6000803e3d6000fd5b505050506118c9565b801561181f576040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015286811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b15801561180657600080fd5b505af115801561181a573d6000803e3d6000fd5b505050505b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015285811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156118b057600080fd5b505af11580156118c4573d6000803e3d6000fd5b505050505b505050505050565b73ffffffffffffffffffffffffffffffffffffffff811681146118f357600080fd5b50565b60008060008060008060c0878903121561190f57600080fd5b863561191a816118d1565b9550602087013594506040870135935060608701359250608087013561193f816118d1565b8092505060a087013590509295509295509295565b60008060006060848603121561196957600080fd5b505081359360208301359350604090920135919050565b60008083601f84011261199257600080fd5b50813567ffffffffffffffff8111156119aa57600080fd5b6020830191508360208260051b85010111156119c557600080fd5b9250929050565b60008060008060008060a087890312156119e557600080fd5b8635955060208701359450604087013567ffffffffffffffff811115611a0a57600080fd5b611a1689828a01611980565b9095509350506060870135611a2a816118d1565b80925050608087013590509295509295509295565b6020808252825182820181905260009190848201906040850190845b81811015611a7757835183529284019291840191600101611a5b565b50909695505050505050565b600080600060408486031215611a9857600080fd5b83359250602084013567ffffffffffffffff811115611ab657600080fd5b611ac286828701611980565b9497909650939450505050565b80358015158114611adf57600080fd5b919050565b803560ff81168114611adf57600080fd5b60008060008060008060008060008060006101608c8e031215611b1757600080fd5b8b35611b22816118d1565b9a5060208c0135611b32816118d1565b995060408c0135985060608c0135975060808c0135965060a08c0135611b57816118d1565b955060c08c01359450611b6c60e08d01611acf565b9350611b7b6101008d01611ae4565b92506101208c013591506101408c013590509295989b509295989b9093969950565b6000806000806000806000806000806101408b8d031215611bbd57600080fd5b8a35611bc8816118d1565b995060208b0135985060408b0135975060608b0135965060808b0135611bed816118d1565b955060a08b01359450611c0260c08c01611acf565b9350611c1060e08c01611ae4565b92506101008b013591506101208b013590509295989b9194979a5092959850565b600080600080600060808688031215611c4957600080fd5b85359450602086013567ffffffffffffffff811115611c6757600080fd5b611c7388828901611980565b9095509350506040860135611c87816118d1565b949793965091946060013592915050565b600080600080600080600060e0888a031215611cb357600080fd5b8735611cbe816118d1565b96506020880135611cce816118d1565b955060408801359450606088013593506080880135925060a0880135611cf3816118d1565b8092505060c0880135905092959891949750929550565b60008060008060608587031215611d2057600080fd5b84359350602085013567ffffffffffffffff811115611d3e57600080fd5b611d4a87828801611980565b9598909750949560400135949350505050565b6020810160118310611d98577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b600080600080600080600080610100898b031215611dbb57600080fd5b8835611dc6816118d1565b97506020890135611dd6816118d1565b965060408901359550606089013594506080890135935060a0890135925060c0890135611e02816118d1565b8092505060e089013590509295985092959890939650565b600060208284031215611e2c57600080fd5b5051919050565b8183526000602080850194508260005b85811015611e7e578135611e56816118d1565b73ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101611e43565b509495945050505050565b838152604060208201526000611ea3604083018486611e33565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611f2257611f22611eac565b604052919050565b60006020808385031215611f3d57600080fd5b825167ffffffffffffffff80821115611f5557600080fd5b818501915085601f830112611f6957600080fd5b815181811115611f7b57611f7b611eac565b8060051b9150611f8c848301611edb565b8181529183018401918481019088841115611fa657600080fd5b938501935b83851015611fc457845182529385019390850190611fab565b98975050505050505050565b600060208284031215611fe257600080fd5b8151611fed816118d1565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561203557600080fd5b8135611fed816118d1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561208157612081612040565b500390565b86815285602082015260a0604082015260006120a660a083018688611e33565b73ffffffffffffffffffffffffffffffffffffffff9490941660608301525060800152949350505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561210957612109612040565b500290565b600082612144577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b8381101561216457818101518382015260200161214c565b83811115612173576000848401525b50505050565b600073ffffffffffffffffffffffffffffffffffffffff80861683528085166020840152506060604083015282518060608401526121be816080850160208701612149565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01691909101608001949350505050565b60006020828403121561220457600080fd5b815167ffffffffffffffff8082111561221c57600080fd5b818401915084601f83011261223057600080fd5b81518181111561224257612242611eac565b61227360207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611edb565b915080825285602082850101111561228a57600080fd5b61229b816020840160208601612149565b5094935050505056fea2646970667358221220eb17abe05eeba3a20acf423d9c0b916f7c22eba6424cd918d18ad2a760eea1ba64736f6c634300080a0033"; - -type UniswapV2AdapterConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: UniswapV2AdapterConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class UniswapV2Adapter__factory extends ContractFactory { - constructor(...args: UniswapV2AdapterConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - _creditManager: string, - _router: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - _creditManager, - _router, - overrides || {} - ) as Promise; - } - override getDeployTransaction( - _creditManager: string, - _router: string, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(_creditManager, _router, overrides || {}); - } - override attach(address: string): UniswapV2Adapter { - return super.attach(address) as UniswapV2Adapter; - } - override connect(signer: Signer): UniswapV2Adapter__factory { - return super.connect(signer) as UniswapV2Adapter__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): UniswapV2AdapterInterface { - return new utils.Interface(_abi) as UniswapV2AdapterInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): UniswapV2Adapter { - return new Contract(address, _abi, signerOrProvider) as UniswapV2Adapter; - } -} diff --git a/src/types/factories/contracts/adapters/uniswap/UniswapV2.sol/index.ts b/src/types/factories/contracts/adapters/uniswap/UniswapV2.sol/index.ts deleted file mode 100644 index 4d59e328..00000000 --- a/src/types/factories/contracts/adapters/uniswap/UniswapV2.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { UniswapV2Adapter__factory } from "./UniswapV2Adapter__factory"; diff --git a/src/types/factories/contracts/adapters/uniswap/UniswapV3.sol/UniswapV3Adapter__factory.ts b/src/types/factories/contracts/adapters/uniswap/UniswapV3.sol/UniswapV3Adapter__factory.ts deleted file mode 100644 index 4b8bec79..00000000 --- a/src/types/factories/contracts/adapters/uniswap/UniswapV3.sol/UniswapV3Adapter__factory.ts +++ /dev/null @@ -1,473 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - UniswapV3Adapter, - UniswapV3AdapterInterface, -} from "../../../../../contracts/adapters/uniswap/UniswapV3.sol/UniswapV3Adapter"; - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "_creditManager", - type: "address", - }, - { - internalType: "address", - name: "_router", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "IncorrectPathLengthException", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "TokenIsNotInAllowedList", - type: "error", - }, - { - inputs: [], - name: "ZeroAddressException", - type: "error", - }, - { - inputs: [], - name: "_gearboxAdapterType", - outputs: [ - { - internalType: "enum AdapterType", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "_gearboxAdapterVersion", - outputs: [ - { - internalType: "uint16", - name: "", - type: "uint16", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditFacade", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditManager", - outputs: [ - { - internalType: "contract ICreditManagerV2", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - components: [ - { - internalType: "bytes", - name: "path", - type: "bytes", - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256", - }, - { - internalType: "uint256", - name: "rateMinRAY", - type: "uint256", - }, - ], - internalType: "struct IUniswapV3Adapter.ExactAllInputParams", - name: "params", - type: "tuple", - }, - ], - name: "exactAllInput", - outputs: [ - { - internalType: "uint256", - name: "amountOut", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - components: [ - { - internalType: "address", - name: "tokenIn", - type: "address", - }, - { - internalType: "address", - name: "tokenOut", - type: "address", - }, - { - internalType: "uint24", - name: "fee", - type: "uint24", - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256", - }, - { - internalType: "uint256", - name: "rateMinRAY", - type: "uint256", - }, - { - internalType: "uint160", - name: "sqrtPriceLimitX96", - type: "uint160", - }, - ], - internalType: "struct IUniswapV3Adapter.ExactAllInputSingleParams", - name: "params", - type: "tuple", - }, - ], - name: "exactAllInputSingle", - outputs: [ - { - internalType: "uint256", - name: "amountOut", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - components: [ - { - internalType: "bytes", - name: "path", - type: "bytes", - }, - { - internalType: "address", - name: "recipient", - type: "address", - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256", - }, - { - internalType: "uint256", - name: "amountIn", - type: "uint256", - }, - { - internalType: "uint256", - name: "amountOutMinimum", - type: "uint256", - }, - ], - internalType: "struct ISwapRouter.ExactInputParams", - name: "params", - type: "tuple", - }, - ], - name: "exactInput", - outputs: [ - { - internalType: "uint256", - name: "amountOut", - type: "uint256", - }, - ], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - components: [ - { - internalType: "address", - name: "tokenIn", - type: "address", - }, - { - internalType: "address", - name: "tokenOut", - type: "address", - }, - { - internalType: "uint24", - name: "fee", - type: "uint24", - }, - { - internalType: "address", - name: "recipient", - type: "address", - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256", - }, - { - internalType: "uint256", - name: "amountIn", - type: "uint256", - }, - { - internalType: "uint256", - name: "amountOutMinimum", - type: "uint256", - }, - { - internalType: "uint160", - name: "sqrtPriceLimitX96", - type: "uint160", - }, - ], - internalType: "struct ISwapRouter.ExactInputSingleParams", - name: "params", - type: "tuple", - }, - ], - name: "exactInputSingle", - outputs: [ - { - internalType: "uint256", - name: "amountOut", - type: "uint256", - }, - ], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - components: [ - { - internalType: "bytes", - name: "path", - type: "bytes", - }, - { - internalType: "address", - name: "recipient", - type: "address", - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256", - }, - { - internalType: "uint256", - name: "amountOut", - type: "uint256", - }, - { - internalType: "uint256", - name: "amountInMaximum", - type: "uint256", - }, - ], - internalType: "struct ISwapRouter.ExactOutputParams", - name: "params", - type: "tuple", - }, - ], - name: "exactOutput", - outputs: [ - { - internalType: "uint256", - name: "amountIn", - type: "uint256", - }, - ], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - components: [ - { - internalType: "address", - name: "tokenIn", - type: "address", - }, - { - internalType: "address", - name: "tokenOut", - type: "address", - }, - { - internalType: "uint24", - name: "fee", - type: "uint24", - }, - { - internalType: "address", - name: "recipient", - type: "address", - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256", - }, - { - internalType: "uint256", - name: "amountOut", - type: "uint256", - }, - { - internalType: "uint256", - name: "amountInMaximum", - type: "uint256", - }, - { - internalType: "uint160", - name: "sqrtPriceLimitX96", - type: "uint160", - }, - ], - internalType: "struct ISwapRouter.ExactOutputSingleParams", - name: "params", - type: "tuple", - }, - ], - name: "exactOutputSingle", - outputs: [ - { - internalType: "uint256", - name: "amountIn", - type: "uint256", - }, - ], - stateMutability: "payable", - type: "function", - }, - { - inputs: [], - name: "targetContract", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x60e06040523480156200001157600080fd5b506040516200221a3803806200221a833981016040819052620000349162000121565b81816001600160a01b03821615806200005457506001600160a01b038116155b156200007357604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038216608081905260408051632f7a188160e01b81529051632f7a1881916004808201926020929091908290030181865afa158015620000be573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e4919062000159565b6001600160a01b0390811660a0521660c05250506001600055506200017e565b80516001600160a01b03811681146200011c57600080fd5b919050565b600080604083850312156200013557600080fd5b620001408362000104565b9150620001506020840162000104565b90509250929050565b6000602082840312156200016c57600080fd5b620001778262000104565b9392505050565b60805160a05160c051611ff6620002246000396000818161017a015281816111a8015281816112c701526113a101526000818160d30152818161101301526115330152600081816101c101528181610314015281816105630152818161070501528181610ae001528181610c7801528181610dbe015281816111fe01528181611298015281816113f7015281816115bb0152818161166f01526117190152611ff66000f3fe6080604052600436106100bc5760003560e01c8063c12c21c011610074578063db3e21981161004e578063db3e219814610225578063f28c049814610238578063f4f18d901461024b57600080fd5b8063c12c21c0146101af578063c7fbf4de146101e3578063ce30bbdb1461020357600080fd5b806378aa73a4116100a557806378aa73a414610140578063bd90df7014610168578063c04b8d591461019c57600080fd5b80632f7a1881146100c1578063414bf3891461011f575b600080fd5b3480156100cd57600080fd5b506100f57f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61013261012d36600461182d565b61026b565b604051908152602001610116565b34801561014c57600080fd5b50610155600281565b60405161ffff9091168152602001610116565b34801561017457600080fd5b506100f57f000000000000000000000000000000000000000000000000000000000000000081565b6101326101aa366004611863565b6104bf565b3480156101bb57600080fd5b506100f57f000000000000000000000000000000000000000000000000000000000000000081565b3480156101ef57600080fd5b506101326101fe3660046118a0565b6106bd565b34801561020f57600080fd5b50610218600281565b60405161011691906118b2565b61013261023336600461182d565b610a3c565b610132610246366004611863565b610bd4565b34801561025757600080fd5b506101326102663660046118f3565b610d76565b6000600260005414156102df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610370573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103949190611953565b905060006103a736859003850185611af2565b73ffffffffffffffffffffffffffffffffffffffff83166060820152905061049f826103d66020870187611b0f565b6103e66040880160208901611b0f565b6040517f414bf3890000000000000000000000000000000000000000000000000000000090610419908790602401611b2c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915260016000610ff6565b8060200190518101906104b29190611ba7565b6001600055949350505050565b60006002600054141561052e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016102d6565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156105bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105e39190611953565b905060008061062f6105f58680611bc0565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061146e92505050565b9150915060008561063f90611d27565b73ffffffffffffffffffffffffffffffffffffffff8516602082015260405190915061069b908590859085907fc04b8d590000000000000000000000000000000000000000000000000000000090610419908790602401611e0c565b8060200190518101906106ae9190611ba7565b60016000559695505050505050565b6040517fe958b704000000000000000000000000000000000000000000000000000000008152336004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa15801561074c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107709190611953565b905060006107816020850185611b0f565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015291909116906370a0823190602401602060405180830381865afa1580156107ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108139190611ba7565b90506001811115610a35576040805161010081019091527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90910190600090806108606020880188611b0f565b73ffffffffffffffffffffffffffffffffffffffff16815260200186602001602081019061088e9190611b0f565b73ffffffffffffffffffffffffffffffffffffffff1681526020016108b96060880160408901611e1f565b62ffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff168152602001866060013581526020018381526020016b033b2e3c9fd0803ce800000087608001358561090c9190611e69565b6109169190611ea6565b815260200161092b60c0880160a08901611b0f565b73ffffffffffffffffffffffffffffffffffffffff1690529050610a1e836109566020880188611b0f565b6109666040890160208a01611b0f565b6040517f414bf3890000000000000000000000000000000000000000000000000000000090610999908790602401611b2c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152600180610ff6565b806020019051810190610a319190611ba7565b9350505b5050919050565b600060026000541415610aab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016102d6565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610b3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b609190611953565b90506000610b7336859003850185611af2565b73ffffffffffffffffffffffffffffffffffffffff831660608201528051602082015160405192935061049f92859291907fdb3e21980000000000000000000000000000000000000000000000000000000090610419908790602401611b2c565b600060026000541415610c43576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016102d6565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610cd4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf89190611953565b9050600080610d0a6105f58680611bc0565b91509150600085610d1a90611d27565b73ffffffffffffffffffffffffffffffffffffffff8516602082015260405190915061069b908590849086907ff28c04980000000000000000000000000000000000000000000000000000000090610419908790602401611e0c565b6040517fe958b704000000000000000000000000000000000000000000000000000000008152336004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015610e05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e299190611953565b9050600080610e3b6105f58680611bc0565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301529294509092506000918416906370a0823190602401602060405180830381865afa158015610eb0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed49190611ba7565b90506001811115610fed576040805160a081019091527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091019060009080610f1d8980611bc0565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509082525073ffffffffffffffffffffffffffffffffffffffff8716602080830191909152890135604080830191909152606082018590526080909101906b033b2e3c9fd0803ce800000090610fa8908b013586611e69565b610fb29190611ea6565b8152509050610fd685858563c04b8d5960e01b856040516024016109999190611e0c565b806020019051810190610fe99190611ba7565b9550505b50505050919050565b60606000803373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461115f576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301528916906370a0823190602401602060405180830381865afa1580156110a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c89190611ba7565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152919350908816906370a0823190602401602060405180830381865afa158015611138573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115c9190611ba7565b90505b841561125b576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561124257600080fd5b505af1158015611256573d6000803e3d6000fd5b505050505b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a906112f19033907f0000000000000000000000000000000000000000000000000000000000000000908b90600401611ee1565b6000604051808303816000875af1158015611310573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526113569190810190611f23565b92508415611454576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561143b57600080fd5b505af115801561144f573d6000803e3d6000fd5b505050505b61146289898985858961151b565b50509695505050505050565b600080600361147f60146002611e69565b6114899190611f91565b835110156114c3576040517f8287466d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114ce83600061177e565b91506115146114df60036014611f91565b6114eb60036014611f91565b601486516114f99190611fa9565b6115039190611ea6565b61150d9190611e69565b849061177e565b9050915091565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461161c576040517f654a9eda00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528681166024830152858116604483015260648201859052608482018490527f0000000000000000000000000000000000000000000000000000000000000000169063654a9eda9060a401600060405180830381600087803b1580156115ff57600080fd5b505af1158015611613573d6000803e3d6000fd5b50505050611776565b80156116cc576040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015286811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b1580156116b357600080fd5b505af11580156116c7573d6000803e3d6000fd5b505050505b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015285811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561175d57600080fd5b505af1158015611771573d6000803e3d6000fd5b505050505b505050505050565b600061178b826014611f91565b835110156117f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f746f416464726573735f6f75744f66426f756e6473000000000000000000000060448201526064016102d6565b50818101602001516c0100000000000000000000000090045b92915050565b6000610100828403121561182757600080fd5b50919050565b6000610100828403121561184057600080fd5b61184a8383611814565b9392505050565b600060a0828403121561182757600080fd5b60006020828403121561187557600080fd5b813567ffffffffffffffff81111561188c57600080fd5b61189884828501611851565b949350505050565b600060c0828403121561182757600080fd5b60208101601183106118ed577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561190557600080fd5b813567ffffffffffffffff81111561191c57600080fd5b82016060818503121561184a57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8116811461195057600080fd5b50565b60006020828403121561196557600080fd5b815161184a8161192e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff811182821017156119c2576119c2611970565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611a0f57611a0f611970565b604052919050565b8035611a228161192e565b919050565b803562ffffff81168114611a2257600080fd5b6000610100808385031215611a4e57600080fd5b6040519081019067ffffffffffffffff82118183101715611a7157611a71611970565b8160405280925083359150611a858261192e565b818152611a9460208501611a17565b6020820152611aa560408501611a27565b6040820152611ab660608501611a17565b60608201526080840135608082015260a084013560a082015260c084013560c0820152611ae560e08501611a17565b60e0820152505092915050565b60006101008284031215611b0557600080fd5b61184a8383611a3a565b600060208284031215611b2157600080fd5b813561184a8161192e565b610100810161180e828473ffffffffffffffffffffffffffffffffffffffff80825116835280602083015116602084015262ffffff60408301511660408401528060608301511660608401526080820151608084015260a082015160a084015260c082015160c08401528060e08301511660e0840152505050565b600060208284031215611bb957600080fd5b5051919050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112611bf557600080fd5b83018035915067ffffffffffffffff821115611c1057600080fd5b602001915036819003821315611c2557600080fd5b9250929050565b600067ffffffffffffffff821115611c4657611c46611970565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600060a08284031215611c8457600080fd5b611c8c61199f565b9050813567ffffffffffffffff811115611ca557600080fd5b8201601f81018413611cb657600080fd5b80356020611ccb611cc683611c2c565b6119c8565b8281528682848601011115611cdf57600080fd5b828285018383013760008184018301528452611cfc858201611a17565b8185015250505060408201356040820152606082013560608201526080820135608082015292915050565b600061180e3683611c72565b60005b83811015611d4e578181015183820152602001611d36565b83811115611d5d576000848401525b50505050565b60008151808452611d7b816020860160208601611d33565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6000815160a08452611dc260a0850182611d63565b905073ffffffffffffffffffffffffffffffffffffffff60208401511660208501526040830151604085015260608301516060850152608083015160808501528091505092915050565b60208152600061184a6020830184611dad565b600060208284031215611e3157600080fd5b61184a82611a27565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611ea157611ea1611e3a565b500290565b600082611edc577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600073ffffffffffffffffffffffffffffffffffffffff808616835280851660208401525060606040830152611f1a6060830184611d63565b95945050505050565b600060208284031215611f3557600080fd5b815167ffffffffffffffff811115611f4c57600080fd5b8201601f81018413611f5d57600080fd5b8051611f6b611cc682611c2c565b818152856020838501011115611f8057600080fd5b611f1a826020830160208601611d33565b60008219821115611fa457611fa4611e3a565b500190565b600082821015611fbb57611fbb611e3a565b50039056fea26469706673582212205e5422ac5bcae72b08548a48e40a231ab28c72dbc2d7f2b1b2c453222770f56564736f6c634300080a0033"; - -type UniswapV3AdapterConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: UniswapV3AdapterConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class UniswapV3Adapter__factory extends ContractFactory { - constructor(...args: UniswapV3AdapterConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - _creditManager: string, - _router: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - _creditManager, - _router, - overrides || {} - ) as Promise; - } - override getDeployTransaction( - _creditManager: string, - _router: string, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(_creditManager, _router, overrides || {}); - } - override attach(address: string): UniswapV3Adapter { - return super.attach(address) as UniswapV3Adapter; - } - override connect(signer: Signer): UniswapV3Adapter__factory { - return super.connect(signer) as UniswapV3Adapter__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): UniswapV3AdapterInterface { - return new utils.Interface(_abi) as UniswapV3AdapterInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): UniswapV3Adapter { - return new Contract(address, _abi, signerOrProvider) as UniswapV3Adapter; - } -} diff --git a/src/types/factories/contracts/adapters/uniswap/UniswapV3.sol/index.ts b/src/types/factories/contracts/adapters/uniswap/UniswapV3.sol/index.ts deleted file mode 100644 index 9eeec9b5..00000000 --- a/src/types/factories/contracts/adapters/uniswap/UniswapV3.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { UniswapV3Adapter__factory } from "./UniswapV3Adapter__factory"; diff --git a/src/types/factories/contracts/adapters/uniswap/index.ts b/src/types/factories/contracts/adapters/uniswap/index.ts deleted file mode 100644 index 52230022..00000000 --- a/src/types/factories/contracts/adapters/uniswap/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export * as uniswapV2Sol from "./UniswapV2.sol"; -export * as uniswapV3Sol from "./UniswapV3.sol"; diff --git a/src/types/factories/contracts/adapters/yearn/YearnV2.sol/YearnV2Adapter__factory.ts b/src/types/factories/contracts/adapters/yearn/YearnV2.sol/YearnV2Adapter__factory.ts deleted file mode 100644 index 9dfe86eb..00000000 --- a/src/types/factories/contracts/adapters/yearn/YearnV2.sol/YearnV2Adapter__factory.ts +++ /dev/null @@ -1,556 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - YearnV2Adapter, - YearnV2AdapterInterface, -} from "../../../../../contracts/adapters/yearn/YearnV2.sol/YearnV2Adapter"; - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "_creditManager", - type: "address", - }, - { - internalType: "address", - name: "_yVault", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "TokenIsNotInAllowedList", - type: "error", - }, - { - inputs: [], - name: "ZeroAddressException", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "spender", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "Approval", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "Transfer", - type: "event", - }, - { - inputs: [], - name: "_gearboxAdapterType", - outputs: [ - { - internalType: "enum AdapterType", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "_gearboxAdapterVersion", - outputs: [ - { - internalType: "uint16", - name: "", - type: "uint16", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "owner", - type: "address", - }, - { - internalType: "address", - name: "spender", - type: "address", - }, - ], - name: "allowance", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "approve", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditFacade", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditManager", - outputs: [ - { - internalType: "contract ICreditManagerV2", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "decimals", - outputs: [ - { - internalType: "uint8", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "deposit", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "deposit", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "deposit", - outputs: [ - { - internalType: "uint256", - name: "shares", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "pricePerShare", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "symbol", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "targetContract", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "token", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "totalSupply", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "transfer", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "transferFrom", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "maxShares", - type: "uint256", - }, - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "withdraw", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "maxShares", - type: "uint256", - }, - ], - name: "withdraw", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "withdraw", - outputs: [ - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "maxShares", - type: "uint256", - }, - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint256", - name: "maxLoss", - type: "uint256", - }, - ], - name: "withdraw", - outputs: [ - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, -]; - -const _bytecode = - "0x6101006040523480156200001257600080fd5b50604051620023d6380380620023d68339810160408190526200003591620002cd565b81816001600160a01b03821615806200005557506001600160a01b038116155b156200007457604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038216608081905260408051632f7a188160e01b81529051632f7a1881916004808201926020929091908290030181865afa158015620000bf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e5919062000305565b6001600160a01b0390811660a0521660c0819052600160005560408051637e062a3560e11b8152905191925063fc0c546a9160048083019260209291908290030181865afa1580156200013c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000162919062000305565b6001600160a01b0390811660e0819052608051604051630f67c5bd60e41b815260048101929092529091169063f67c5bd090602401602060405180830381865afa158015620001b5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001db91906200032a565b6200020d5760e051604051634c607af960e11b81526001600160a01b0390911660048201526024015b60405180910390fd5b608051604051630f67c5bd60e41b81526001600160a01b0383811660048301529091169063f67c5bd090602401602060405180830381865afa15801562000258573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200027e91906200032a565b620002a857604051634c607af960e11b81526001600160a01b038216600482015260240162000204565b505062000344565b80516001600160a01b0381168114620002c857600080fd5b919050565b60008060408385031215620002e157600080fd5b620002ec83620002b0565b9150620002fc60208401620002b0565b90509250929050565b6000602082840312156200031857600080fd5b6200032382620002b0565b9392505050565b6000602082840312156200033d57600080fd5b5051919050565b60805160a05160c05160e051611f71620004656000396000818161038c01528181610f7301528181611224015281816112f701526114220152600081816102fb015281816104f6015281816105ae0152818161077d0152818161097901528181610b8501528181610bfc01528181610c69015281816110480152818161120301528181611318015281816114000152818161167101528181611790015261186a015260008181610229015281816114dc015261193001526000818161032201528181610457015281816106df015281816108ae01528181610aaf01528181610d7601528181610ea801528181611160015281816116c701528181611761015281816118a1015281816119b801528181611a6c0152611b160152611f716000f3fe608060405234801561001057600080fd5b506004361061018c5760003560e01c806378aa73a4116100e3578063c12c21c01161008c578063dd62ed3e11610066578063dd62ed3e14610361578063e63697c814610374578063fc0c546a1461038757600080fd5b8063c12c21c01461031d578063ce30bbdb14610344578063d0e30db01461035957600080fd5b8063a9059cbb116100bd578063a9059cbb146101cc578063b6b55f25146102e3578063bd90df70146102f657600080fd5b806378aa73a4146102b857806395d89b41146102d357806399530b06146102db57600080fd5b80632e1a7d4d116101455780633ccfd60b1161011f5780633ccfd60b1461028a5780636e553f651461029257806370a08231146102a557600080fd5b80632e1a7d4d146102115780632f7a188114610224578063313ce5671461027057600080fd5b8063095ea7b311610176578063095ea7b3146101cc57806318160ddd146101f257806323b872dd146101fa57600080fd5b8062f714ce1461019157806306fdde03146101b7575b600080fd5b6101a461019f366004611ba0565b6103ae565b6040519081526020015b60405180910390f35b6101bf6104f2565b6040516101ae9190611c4a565b6101e26101da366004611c5d565b600092915050565b60405190151581526020016101ae565b6101a46105aa565b6101e2610208366004611c89565b60009392505050565b6101a461021f366004611cca565b61063b565b61024b7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101ae565b610278610779565b60405160ff90911681526020016101ae565b6101a461080a565b6101a46102a0366004611ba0565b610a0b565b6101a46102b3366004611ce3565b610b3d565b6102c0600281565b60405161ffff90911681526020016101ae565b6101bf610bf8565b6101a4610c65565b6101a46102f1366004611cca565b610cd2565b61024b7f000000000000000000000000000000000000000000000000000000000000000081565b61024b7f000000000000000000000000000000000000000000000000000000000000000081565b61034c600481565b6040516101ae9190611d00565b6101a4610e04565b6101a461036f366004611d41565b610ff8565b6101a4610382366004611d6f565b6110bc565b61024b7f000000000000000000000000000000000000000000000000000000000000000081565b600060026000541415610422576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156104b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104d79190611d96565b90506104e5818560006111fb565b6001600055949350505050565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801561055f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526105a59190810190611e74565b905090565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610617573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a59190611ebd565b6000600260005414156106aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610419565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa15801561073b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075f9190611d96565b905061076d818460006111fb565b60016000559392505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a59190611ed6565b600060026000541415610879576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610419565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa15801561090a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092e9190611d96565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000917f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa1580156109c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e49190611ebd565b90506001811115610a01576109fe826001830360016111fb565b92505b5050600160005590565b600060026000541415610a7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610419565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610b0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2f9190611d96565b90506104e5818560006112ef565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015610bce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf29190611ebd565b92915050565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801561055f573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166399530b066040518163ffffffff1660e01b8152600401602060405180830381865afa158015610617573d6000803e3d6000fd5b600060026000541415610d41576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610419565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610dd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df69190611d96565b905061076d818460006112ef565b600060026000541415610e73576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610419565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610f04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f289190611d96565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000917f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015610fba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fde9190611ebd565b90506001811115610a01576109fe826001830360016112ef565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063dd62ed3e90604401602060405180830381865afa158015611091573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b59190611ebd565b9392505050565b60006002600054141561112b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610419565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156111bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e09190611d96565b90506111ed8186856113c8565b600160005595945050505050565b60006112d4847f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008660405160240161125691815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f2e1a7d4d000000000000000000000000000000000000000000000000000000001790526000876114bf565b8060200190518101906112e79190611ebd565b949350505050565b60006112d4847f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008660405160240161134a91815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fb6b55f25000000000000000000000000000000000000000000000000000000001790526001876114bf565b6040516024810183905273ffffffffffffffffffffffffffffffffffffffff84166044820152606481018290526000906112d49085907f0000000000000000000000000000000000000000000000000000000000000000907f000000000000000000000000000000000000000000000000000000000000000090608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe63697c8000000000000000000000000000000000000000000000000000000001790526000805b60606000803373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614611628576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301528916906370a0823190602401602060405180830381865afa15801561156d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115919190611ebd565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152919350908816906370a0823190602401602060405180830381865afa158015611601573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116259190611ebd565b90505b8415611724576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561170b57600080fd5b505af115801561171f573d6000803e3d6000fd5b505050505b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a906117ba9033907f0000000000000000000000000000000000000000000000000000000000000000908b90600401611ef9565b6000604051808303816000875af11580156117d9573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261181f9190810190611e74565b925084156118fe576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301528981166044830152600160648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156118e557600080fd5b505af11580156118f9573d6000803e3d6000fd5b505050505b61190c898989858589611918565b50509695505050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614611a19576040517f654a9eda00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528681166024830152858116604483015260648201859052608482018490527f0000000000000000000000000000000000000000000000000000000000000000169063654a9eda9060a401600060405180830381600087803b1580156119fc57600080fd5b505af1158015611a10573d6000803e3d6000fd5b50505050611b73565b8015611ac9576040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015286811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b158015611ab057600080fd5b505af1158015611ac4573d6000803e3d6000fd5b505050505b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015285811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015611b5a57600080fd5b505af1158015611b6e573d6000803e3d6000fd5b505050505b505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114611b9d57600080fd5b50565b60008060408385031215611bb357600080fd5b823591506020830135611bc581611b7b565b809150509250929050565b60005b83811015611beb578181015183820152602001611bd3565b83811115611bfa576000848401525b50505050565b60008151808452611c18816020860160208601611bd0565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006110b56020830184611c00565b60008060408385031215611c7057600080fd5b8235611c7b81611b7b565b946020939093013593505050565b600080600060608486031215611c9e57600080fd5b8335611ca981611b7b565b92506020840135611cb981611b7b565b929592945050506040919091013590565b600060208284031215611cdc57600080fd5b5035919050565b600060208284031215611cf557600080fd5b81356110b581611b7b565b6020810160118310611d3b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60008060408385031215611d5457600080fd5b8235611d5f81611b7b565b91506020830135611bc581611b7b565b600080600060608486031215611d8457600080fd5b833592506020840135611cb981611b7b565b600060208284031215611da857600080fd5b81516110b581611b7b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff80841115611dfd57611dfd611db3565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611e4357611e43611db3565b81604052809350858152868686011115611e5c57600080fd5b611e6a866020830187611bd0565b5050509392505050565b600060208284031215611e8657600080fd5b815167ffffffffffffffff811115611e9d57600080fd5b8201601f81018413611eae57600080fd5b6112e784825160208401611de2565b600060208284031215611ecf57600080fd5b5051919050565b600060208284031215611ee857600080fd5b815160ff811681146110b557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff808616835280851660208401525060606040830152611f326060830184611c00565b9594505050505056fea2646970667358221220aecb71ead328fdb83f4bc503b07a4f5985eda47bcbdf6a22bcbbd3dee47273b064736f6c634300080a0033"; - -type YearnV2AdapterConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: YearnV2AdapterConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class YearnV2Adapter__factory extends ContractFactory { - constructor(...args: YearnV2AdapterConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - _creditManager: string, - _yVault: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - _creditManager, - _yVault, - overrides || {} - ) as Promise; - } - override getDeployTransaction( - _creditManager: string, - _yVault: string, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(_creditManager, _yVault, overrides || {}); - } - override attach(address: string): YearnV2Adapter { - return super.attach(address) as YearnV2Adapter; - } - override connect(signer: Signer): YearnV2Adapter__factory { - return super.connect(signer) as YearnV2Adapter__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): YearnV2AdapterInterface { - return new utils.Interface(_abi) as YearnV2AdapterInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): YearnV2Adapter { - return new Contract(address, _abi, signerOrProvider) as YearnV2Adapter; - } -} diff --git a/src/types/factories/contracts/adapters/yearn/YearnV2.sol/index.ts b/src/types/factories/contracts/adapters/yearn/YearnV2.sol/index.ts deleted file mode 100644 index df16cf0c..00000000 --- a/src/types/factories/contracts/adapters/yearn/YearnV2.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { YearnV2Adapter__factory } from "./YearnV2Adapter__factory"; diff --git a/src/types/factories/contracts/adapters/yearn/index.ts b/src/types/factories/contracts/adapters/yearn/index.ts deleted file mode 100644 index 50edb202..00000000 --- a/src/types/factories/contracts/adapters/yearn/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export * as yearnV2Sol from "./YearnV2.sol"; diff --git a/src/types/factories/contracts/core/ACLTrait__factory.ts b/src/types/factories/contracts/core/ACLTrait__factory.ts deleted file mode 100644 index b9e11600..00000000 --- a/src/types/factories/contracts/core/ACLTrait__factory.ts +++ /dev/null @@ -1,107 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import { Contract, Signer, utils } from "ethers"; -import type { Provider } from "@ethersproject/providers"; -import type { - ACLTrait, - ACLTraitInterface, -} from "../../../contracts/core/ACLTrait"; - -const _abi = [ - { - inputs: [], - name: "CallerNotPausableAdminException", - type: "error", - }, - { - inputs: [], - name: "CallerNotUnPausableAdminException", - type: "error", - }, - { - inputs: [], - name: "ZeroAddressException", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "Paused", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "Unpaused", - type: "event", - }, - { - inputs: [], - name: "_acl", - outputs: [ - { - internalType: "contract ACL", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "pause", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "paused", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "unpause", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, -]; - -export class ACLTrait__factory { - static readonly abi = _abi; - static createInterface(): ACLTraitInterface { - return new utils.Interface(_abi) as ACLTraitInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): ACLTrait { - return new Contract(address, _abi, signerOrProvider) as ACLTrait; - } -} diff --git a/src/types/factories/contracts/core/ACL__factory.ts b/src/types/factories/contracts/core/ACL__factory.ts deleted file mode 100644 index a51e0e0f..00000000 --- a/src/types/factories/contracts/core/ACL__factory.ts +++ /dev/null @@ -1,320 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { ACL, ACLInterface } from "../../../contracts/core/ACL"; - -const _abi = [ - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "previousOwner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "OwnershipTransferred", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newAdmin", - type: "address", - }, - ], - name: "PausableAdminAdded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "admin", - type: "address", - }, - ], - name: "PausableAdminRemoved", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newAdmin", - type: "address", - }, - ], - name: "UnpausableAdminAdded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "admin", - type: "address", - }, - ], - name: "UnpausableAdminRemoved", - type: "event", - }, - { - inputs: [ - { - internalType: "address", - name: "newAdmin", - type: "address", - }, - ], - name: "addPausableAdmin", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newAdmin", - type: "address", - }, - ], - name: "addUnpausableAdmin", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "isConfigurator", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "addr", - type: "address", - }, - ], - name: "isPausableAdmin", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "addr", - type: "address", - }, - ], - name: "isUnpausableAdmin", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "owner", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "pausableAdminSet", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "admin", - type: "address", - }, - ], - name: "removePausableAdmin", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "admin", - type: "address", - }, - ], - name: "removeUnpausableAdmin", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "renounceOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "transferOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "unpausableAdminSet", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61090e8061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063732818191161008c578063adce758d11610066578063adce758d14610215578063ba306df114610228578063d4eb5db01461023b578063f2fde38b1461027457600080fd5b806373281819146101b7578063819ad68e146101da5780638da5cb5b146101ed57600080fd5b806354fd4d50116100bd57806354fd4d501461016a5780635f259aba14610180578063715018a6146101af57600080fd5b806335914829146100e45780633a41ec641461011c5780634910832f14610155575b600080fd5b6101076100f236600461089b565b60016020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61010761012a36600461089b565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205460ff1690565b61016861016336600461089b565b610287565b005b610172600181565b604051908152602001610113565b61010761018e36600461089b565b60005473ffffffffffffffffffffffffffffffffffffffff91821691161490565b610168610387565b6101076101c536600461089b565b60026020526000908152604090205460ff1681565b6101686101e836600461089b565b610414565b60005460405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610113565b61016861022336600461089b565b61050c565b61016861023636600461089b565b610601565b61010761024936600461089b565b73ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205460ff1690565b61016861028236600461089b565b6106f6565b60005473ffffffffffffffffffffffffffffffffffffffff16331461030d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909217909155517fae26b1cfe9454ba87274a4e8330b6654684362d0f3d7bbd17f7449a1d38387c69190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610408576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b6104126000610826565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517fd400da6c0c0a894dacc0981730b88af0545d00272ee8fff1437bf560ff245fc49190a250565b60005473ffffffffffffffffffffffffffffffffffffffff16331461058d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f1998397e7203f7baca9d6f41b9e4da6e768daac5caad4234fb9bf5869d2715459190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610682576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526001602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f28b01395b7e25d20552a0c8dc8ecd3b1d4abc986f14dad7885fd45b6fd73c8d99190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811661081a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610304565b61082381610826565b50565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156108ad57600080fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146108d157600080fd5b939250505056fea26469706673582212204712efbfe997070def77285a5b8753bc882b62da2133ce1937ad26cd2b48e49864736f6c634300080a0033"; - -type ACLConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: ACLConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class ACL__factory extends ContractFactory { - constructor(...args: ACLConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): ACL { - return super.attach(address) as ACL; - } - override connect(signer: Signer): ACL__factory { - return super.connect(signer) as ACL__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): ACLInterface { - return new utils.Interface(_abi) as ACLInterface; - } - static connect(address: string, signerOrProvider: Signer | Provider): ACL { - return new Contract(address, _abi, signerOrProvider) as ACL; - } -} diff --git a/src/types/factories/contracts/core/AccountFactory__factory.ts b/src/types/factories/contracts/core/AccountFactory__factory.ts deleted file mode 100644 index 753c4b7f..00000000 --- a/src/types/factories/contracts/core/AccountFactory__factory.ts +++ /dev/null @@ -1,479 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - AccountFactory, - AccountFactoryInterface, -} from "../../../contracts/core/AccountFactory"; - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "addressProvider", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "CallerNotConfiguratorException", - type: "error", - }, - { - inputs: [], - name: "CallerNotPausableAdminException", - type: "error", - }, - { - inputs: [], - name: "CallerNotUnPausableAdminException", - type: "error", - }, - { - inputs: [], - name: "ZeroAddressException", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "miner", - type: "address", - }, - ], - name: "AccountMinerChanged", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "account", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "creditManager", - type: "address", - }, - ], - name: "InitializeCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "NewCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "Paused", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "ReturnCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - ], - name: "TakeForever", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "Unpaused", - type: "event", - }, - { - inputs: [], - name: "_acl", - outputs: [ - { - internalType: "contract ACL", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "_contractsRegister", - outputs: [ - { - internalType: "contract ContractsRegister", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "addCreditAccount", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "address", - name: "token", - type: "address", - }, - { - internalType: "address", - name: "targetContract", - type: "address", - }, - ], - name: "cancelAllowance", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "countCreditAccounts", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "countCreditAccountsInStock", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "id", - type: "uint256", - }, - ], - name: "creditAccounts", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "creditAccount", - type: "address", - }, - ], - name: "getNext", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "head", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "addr", - type: "address", - }, - ], - name: "isCreditAccount", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "masterCreditAccount", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "pause", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "paused", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "usedAccount", - type: "address", - }, - ], - name: "returnCreditAccount", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "tail", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_borrowedAmount", - type: "uint256", - }, - { - internalType: "uint256", - name: "_cumulativeIndexAtOpen", - type: "uint256", - }, - ], - name: "takeCreditAccount", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "prev", - type: "address", - }, - { - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - internalType: "address", - name: "to", - type: "address", - }, - ], - name: "takeOut", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "unpause", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x60e06040523480156200001157600080fd5b5060405162002ced38038062002ced8339810160408190526200003491620004bb565b6000805460ff19169055806001600160a01b0381166200006757604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cc9190620004bb565b6001600160a01b039081166080526001805560408051808201909152600281526105a360f41b602082015291508216620001245760405162461bcd60e51b81526004016200011b9190620004ed565b60405180910390fd5b50806001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000164573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200018a9190620004bb565b6001600160a01b031660c052604051620001a490620004ad565b604051809103906000f080158015620001c1573d6000803e3d6000fd5b506001600160a01b031660a08190526040805163204a7f0760e21b81529051638129fc1c9160048082019260009290919082900301818387803b1580156200020857600080fd5b505af11580156200021d573d6000803e3d6000fd5b50505050620002316200028a60201b60201c565b50600454600380546001600160a01b039092166001600160a01b03199283161790556000805260026020527fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b8054909116905562000545565b6000620002a460a0516200038c60201b6200119b1760201c565b9050806001600160a01b0316638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620002e257600080fd5b505af1158015620002f7573d6000803e3d6000fd5b5050600480546001600160a01b03908116600090815260026020908152604090912080546001600160a01b03199081169388169384179091558354169091179091556200035492506005915083906200043b811b6200127d17901c565b506040516001600160a01b038216907f9f69b6c10f6810213e055b0ba6bc0a4e2603f73c221aad77ea35da819cda7dc390600090a250565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260601b60148201526e5af43d82803e903d91602b57fd5bf360881b60288201526037816000f09150506001600160a01b038116620004365760405162461bcd60e51b815260206004820152601660248201527f455243313136373a20637265617465206661696c65640000000000000000000060448201526064016200011b565b919050565b600062000452836001600160a01b0384166200045b565b90505b92915050565b6000818152600183016020526040812054620004a45750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000455565b50600062000455565b610e788062001e7583390190565b600060208284031215620004ce57600080fd5b81516001600160a01b0381168114620004e657600080fd5b9392505050565b600060208083528351808285015260005b818110156200051c57858101830151858201604001528201620004fe565b818111156200052f576000604083870101525b50601f01601f1916929092016040019392505050565b60805160a05160c0516118cf620005a66000396000818161026a015281816103680152610b7001526000818161020201526110650152600081816102c4015281816105b80152818161099601528181610a840152610e7401526118cf6000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806388f64c54116100cd578063b193976311610081578063d82ecc4811610066578063d82ecc4814610309578063e3ba9ace1461031c578063f23953ab1461032f57600080fd5b8063b1939763146102f9578063b60e85181461030157600080fd5b80638f7dcfa3116100b25780638f7dcfa31461029f578063a50cf2c8146102bf578063a904aab6146102e657600080fd5b806388f64c541461026557806389b77b3e1461028c57600080fd5b806354fd4d50116101245780635da33c5b116101095780635da33c5b146101fd578063765e0159146102245780638456cb591461025d57600080fd5b806354fd4d50146101d05780635c975abb146101e657600080fd5b806313d8c8401461015657806321d18456146101a05780632932472f146101b35780633f4ba83a146101c8575b600080fd5b6004546101769073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6101766101ae366004611651565b610337565b6101c66101c1366004611697565b61058a565b005b6101c6610968565b6101d8600181565b604051908152602001610197565b60005460ff165b6040519015158152602001610197565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101766102323660046116da565b73ffffffffffffffffffffffffffffffffffffffff9081166000908152600260205260409020541690565b6101c6610a56565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101c661029a3660046116da565b610b42565b6003546101769073ffffffffffffffffffffffffffffffffffffffff1681565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101c66102f4366004611697565b610e46565b6101d8610fb8565b6101d8611033565b6101ed6103173660046116da565b611044565b61017661032a3660046116f5565b611051565b6101c661105e565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa1580156103c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103e8919061170e565b6040518060400160405280600281526020017f43500000000000000000000000000000000000000000000000000000000000008152509061045f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b60405180910390fd5b506104686112a6565b6003805473ffffffffffffffffffffffffffffffffffffffff8082166000818152600260205260409081902080549093167fffffffffffffffffffffffff0000000000000000000000000000000000000000948516179094558154909216905590517fc75b5a710000000000000000000000000000000000000000000000000000000081523360048201526024810185905260448101849052819063c75b5a7190606401600060405180830381600087803b15801561052657600080fd5b505af115801561053a573d6000803e3d6000fd5b505060405133925073ffffffffffffffffffffffffffffffffffffffff841691507ff3ede7039176503a8ad1fe7cfaa29475a9dbe0cdcaf04ecf9a5c10570c47b10390600090a390505b92915050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610614573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610638919061170e565b61066e576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106766112a6565b60035473ffffffffffffffffffffffffffffffffffffffff838116911614156106fa576003805473ffffffffffffffffffffffffffffffffffffffff808216600090815260026020526040902080549091167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092558154169055610865565b73ffffffffffffffffffffffffffffffffffffffff838116600090815260026020908152604091829020548251808401909352600383527f4146330000000000000000000000000000000000000000000000000000000000918301919091529091848116911614610798576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b5060045473ffffffffffffffffffffffffffffffffffffffff838116911614156107fd57600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85161790555b73ffffffffffffffffffffffffffffffffffffffff828116600081815260026020526040808220805488861684529183208054929095167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790945591905281541690555b6040517fc75b5a7100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600060248301819052604483015283169063c75b5a7190606401600060405180830381600087803b1580156108dc57600080fd5b505af11580156108f0573d6000803e3d6000fd5b505050506109088260056112dd90919063ffffffff16565b508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f25e267469ba2ae82515be7b3d45df60bf8308343f0809e8cf7319058e2255ce660405160405180910390a3505050565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156109f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a16919061170e565b610a4c576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a546112ff565b565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015610ae0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b04919061170e565b610b3a576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a546113e0565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa158015610bcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf0919061170e565b6040518060400160405280600281526020017f435000000000000000000000000000000000000000000000000000000000000081525090610c5e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b50610c6a6005826114a0565b6040518060400160405280600381526020017f414634000000000000000000000000000000000000000000000000000000000081525090610cd8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b50438173ffffffffffffffffffffffffffffffffffffffff16633dc54b406040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4991906117a3565b14156040518060400160405280600381526020017f414631000000000000000000000000000000000000000000000000000000000081525090610db9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b506004805473ffffffffffffffffffffffffffffffffffffffff90811660009081526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081169487169485179091558454168317909355915190917fced6ab9afc868b3a088366f6631ae20752993b5cce5d5f0534ea5a59fcc57d5691a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610ed0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef4919061170e565b610f2a576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f19a1603900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301528416906319a1603990604401600060405180830381600087803b158015610f9b57600080fd5b505af1158015610faf573d6000803e3d6000fd5b50505050505050565b600354600090819073ffffffffffffffffffffffffffffffffffffffff165b73ffffffffffffffffffffffffffffffffffffffff81161561102d5773ffffffffffffffffffffffffffffffffffffffff9081166000908152600260205260409020541681611025816117eb565b925050610fd7565b50919050565b600061103f60056114cf565b905090565b60006105846005836114a0565b60006105846005836114d9565b60006110897f000000000000000000000000000000000000000000000000000000000000000061119b565b90508073ffffffffffffffffffffffffffffffffffffffff16638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156110d357600080fd5b505af11580156110e7573d6000803e3d6000fd5b50506004805473ffffffffffffffffffffffffffffffffffffffff908116600090815260026020526040902080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811692871692831790915582541617905550611156905060058261127d565b5060405173ffffffffffffffffffffffffffffffffffffffff8216907f9f69b6c10f6810213e055b0ba6bc0a4e2603f73c221aad77ea35da819cda7dc390600090a250565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260601b60148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f091505073ffffffffffffffffffffffffffffffffffffffff8116611278576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f455243313136373a20637265617465206661696c6564000000000000000000006044820152606401610456565b919050565b600061129f8373ffffffffffffffffffffffffffffffffffffffff84166114e5565b9392505050565b60035473ffffffffffffffffffffffffffffffffffffffff90811660009081526002602052604090205416610a5457610a5461105e565b600061129f8373ffffffffffffffffffffffffffffffffffffffff8416611534565b60005460ff1661136b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610456565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff161561144d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610456565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586113b63390565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600183016020526040812054151561129f565b6000610584825490565b600061129f8383611627565b600081815260018301602052604081205461152c57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610584565b506000610584565b6000818152600183016020526040812054801561161d576000611558600183611824565b855490915060009061156c90600190611824565b90508181146115d157600086600001828154811061158c5761158c61183b565b90600052602060002001549050808760000184815481106115af576115af61183b565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806115e2576115e261186a565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610584565b6000915050610584565b600082600001828154811061163e5761163e61183b565b9060005260206000200154905092915050565b6000806040838503121561166457600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff8116811461127857600080fd5b6000806000606084860312156116ac57600080fd5b6116b584611673565b92506116c360208501611673565b91506116d160408501611673565b90509250925092565b6000602082840312156116ec57600080fd5b61129f82611673565b60006020828403121561170757600080fd5b5035919050565b60006020828403121561172057600080fd5b8151801515811461129f57600080fd5b600060208083528351808285015260005b8181101561175d57858101830151858201604001528201611741565b8181111561176f576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b6000602082840312156117b557600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561181d5761181d6117bc565b5060010190565b600082821015611836576118366117bc565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220f1e9c81b8c3af2491c907ee66cf24e1bb76111b821db02df8f98dbb48b5ab5fa64736f6c634300080a0033608060405234801561001057600080fd5b50610e58806100206000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c806354fd4d5011610081578063c45a01551161005b578063c45a0155146101a4578063c75b5a71146101ca578063d1660f99146101dd57600080fd5b806354fd4d501461014f5780638129fc1c14610157578063c12c21c01461015f57600080fd5b80631afbb7a4116100b25780631afbb7a41461011d5780631cff79cd146101265780633dc54b401461014657600080fd5b806316128211146100d957806317d11a15146100ee57806319a160391461010a575b600080fd5b6100ec6100e7366004610b42565b6101f0565b005b6100f760035481565b6040519081526020015b60405180910390f35b6100ec610118366004610b8d565b61024c565b6100f760025481565b610139610134366004610bef565b6102c9565b6040516101019190610d49565b6100f760045481565b6100f7600181565b6100ec610344565b60015461017f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610101565b60005461017f9062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b6100ec6101d8366004610d5c565b610494565b6100ec6101eb366004610d8f565b61053d565b60015473ffffffffffffffffffffffffffffffffffffffff163314610241576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600291909155600355565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1633146102a3576040517fb126b84800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102c573ffffffffffffffffffffffffffffffffffffffff83168260006105b4565b5050565b60015460609073ffffffffffffffffffffffffffffffffffffffff16331461031d576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033d73ffffffffffffffffffffffffffffffffffffffff8416836107b4565b9392505050565b600054610100900460ff1661035f5760005460ff1615610363565b303b155b6103f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600054610100900460ff1615801561043357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000166101011790555b600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16336201000002179055801561049157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b50565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1633146104eb576040517fb126b84800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff949094169390931790925560025560035543600455565b60015473ffffffffffffffffffffffffffffffffffffffff16331461058e576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105af73ffffffffffffffffffffffffffffffffffffffff841683836107f6565b505050565b80158061065457506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015284169063dd62ed3e90604401602060405180830381865afa15801561062e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106529190610dcb565b155b6106e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e63650000000000000000000060648201526084016103eb565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526105af9084907f095ea7b300000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261084c565b606061033d83836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250610958565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526105af9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401610732565b60006108ae826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166109589092919063ffffffff16565b8051909150156105af57808060200190518101906108cc9190610de4565b6105af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016103eb565b6060610967848460008561096f565b949350505050565b606082471015610a01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016103eb565b843b610a69576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016103eb565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051610a929190610e06565b60006040518083038185875af1925050503d8060008114610acf576040519150601f19603f3d011682016040523d82523d6000602084013e610ad4565b606091505b5091509150610ae4828286610aef565b979650505050505050565b60608315610afe57508161033d565b825115610b0e5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103eb9190610d49565b60008060408385031215610b5557600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff81168114610b8857600080fd5b919050565b60008060408385031215610ba057600080fd5b610ba983610b64565b9150610bb760208401610b64565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215610c0257600080fd5b610c0b83610b64565b9150602083013567ffffffffffffffff80821115610c2857600080fd5b818501915085601f830112610c3c57600080fd5b813581811115610c4e57610c4e610bc0565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715610c9457610c94610bc0565b81604052828152886020848701011115610cad57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b83811015610cea578181015183820152602001610cd2565b83811115610cf9576000848401525b50505050565b60008151808452610d17816020860160208601610ccf565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061033d6020830184610cff565b600080600060608486031215610d7157600080fd5b610d7a84610b64565b95602085013595506040909401359392505050565b600080600060608486031215610da457600080fd5b610dad84610b64565b9250610dbb60208501610b64565b9150604084013590509250925092565b600060208284031215610ddd57600080fd5b5051919050565b600060208284031215610df657600080fd5b8151801515811461033d57600080fd5b60008251610e18818460208701610ccf565b919091019291505056fea2646970667358221220448e7046078cd668c09328d857e534e2aab6cdc0e691d3d4f2c8baae8e084b1364736f6c634300080a0033"; - -type AccountFactoryConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: AccountFactoryConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class AccountFactory__factory extends ContractFactory { - constructor(...args: AccountFactoryConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - addressProvider: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - addressProvider, - overrides || {} - ) as Promise; - } - override getDeployTransaction( - addressProvider: string, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(addressProvider, overrides || {}); - } - override attach(address: string): AccountFactory { - return super.attach(address) as AccountFactory; - } - override connect(signer: Signer): AccountFactory__factory { - return super.connect(signer) as AccountFactory__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): AccountFactoryInterface { - return new utils.Interface(_abi) as AccountFactoryInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): AccountFactory { - return new Contract(address, _abi, signerOrProvider) as AccountFactory; - } -} diff --git a/src/types/factories/contracts/core/AddressProvider__factory.ts b/src/types/factories/contracts/core/AddressProvider__factory.ts deleted file mode 100644 index 22a3fe19..00000000 --- a/src/types/factories/contracts/core/AddressProvider__factory.ts +++ /dev/null @@ -1,404 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - AddressProvider, - AddressProviderInterface, -} from "../../../contracts/core/AddressProvider"; - -const _abi = [ - { - inputs: [], - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "service", - type: "bytes32", - }, - { - indexed: true, - internalType: "address", - name: "newAddress", - type: "address", - }, - ], - name: "AddressSet", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "previousOwner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "OwnershipTransferred", - type: "event", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - name: "addresses", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "getACL", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "getAccountFactory", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "getContractsRegister", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "getDataCompressor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "getGearToken", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "getPriceOracle", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "getTreasuryContract", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "getWETHGateway", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "getWethToken", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "owner", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "renounceOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_address", - type: "address", - }, - ], - name: "setACL", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_address", - type: "address", - }, - ], - name: "setAccountFactory", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_address", - type: "address", - }, - ], - name: "setContractsRegister", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_address", - type: "address", - }, - ], - name: "setDataCompressor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_address", - type: "address", - }, - ], - name: "setGearToken", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_address", - type: "address", - }, - ], - name: "setPriceOracle", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_address", - type: "address", - }, - ], - name: "setTreasuryContract", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_address", - type: "address", - }, - ], - name: "setWETHGateway", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_address", - type: "address", - }, - ], - name: "setWethToken", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "transferOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x608060405234801561001057600080fd5b5061001a3361005f565b60405130906f20a2222922a9a9afa82927ab24a222a960811b907fb37614c7d254ea8d16eb81fa11dddaeb266aa8ba4917980859c7740aff30c69190600090a36100af565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610f0f806100be6000396000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c806377532ed9116100e3578063bcaead981161008c578063ce3c4ae411610066578063ce3c4ae414610308578063f2fde38b1461031b578063fca513a81461032e57600080fd5b8063bcaead98146102da578063c5120b39146102ed578063c513c9bb1461030057600080fd5b80639068a868116100bd5780639068a868146102b7578063addc1a76146102bf578063affd9243146102d257600080fd5b806377532ed91461027e57806386e09c08146102865780638da5cb5b1461029957600080fd5b80634c252f9111610145578063699f200f1161011f578063699f200f1461022d578063715018a61461026357806376aad6051461026b57600080fd5b80634c252f91146101fc578063530e784f1461020457806354fd4d501461021757600080fd5b80631ed65110116101765780631ed65110146101cc57806321da5837146101e157806326c74fc3146101f457600080fd5b8063060678c21461019257806308737695146101c4575b600080fd5b61019a610336565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61019a610366565b6101df6101da366004610e10565b610391565b005b6101df6101ef366004610e10565b610444565b61019a6104ef565b61019a61051a565b6101df610212366004610e10565b610545565b61021f600281565b6040519081526020016101bb565b61019a61023b366004610e4d565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6101df6105f0565b6101df610279366004610e10565b61067d565b61019a610728565b6101df610294366004610e10565b610753565b60005473ffffffffffffffffffffffffffffffffffffffff1661019a565b61019a6107fe565b6101df6102cd366004610e10565b610829565b61019a6108d4565b6101df6102e8366004610e10565b6108ff565b6101df6102fb366004610e10565b6109aa565b61019a610a55565b6101df610316366004610e10565b610a80565b6101df610329366004610e10565b610b2b565b61019a610c58565b60006103617f444154415f434f4d50524553534f520000000000000000000000000000000000610c7f565b905090565b60006103617f41434c0000000000000000000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610417576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6104417f54524541535552595f434f4e545241435400000000000000000000000000000082610d1d565b50565b60005473ffffffffffffffffffffffffffffffffffffffff1633146104c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f574554485f47415445574159000000000000000000000000000000000000000082610d1d565b60006103617f54524541535552595f434f4e5452414354000000000000000000000000000000610c7f565b60006103617f574554485f544f4b454e00000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f50524943455f4f5241434c45000000000000000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610671576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b61067b6000610d9b565b565b60005473ffffffffffffffffffffffffffffffffffffffff1633146106fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f41434c000000000000000000000000000000000000000000000000000000000082610d1d565b60006103617f574554485f474154455741590000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146107d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f574554485f544f4b454e0000000000000000000000000000000000000000000082610d1d565b60006103617f4143434f554e545f464143544f52590000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146108aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f4143434f554e545f464143544f5259000000000000000000000000000000000082610d1d565b60006103617f474541525f544f4b454e00000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610980576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f474541525f544f4b454e0000000000000000000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f444154415f434f4d50524553534f52000000000000000000000000000000000082610d1d565b60006103617f434f4e5452414354535f52454749535445520000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610b01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f434f4e5452414354535f5245474953544552000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610bac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b73ffffffffffffffffffffffffffffffffffffffff8116610c4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161040e565b61044181610d9b565b60006103617f50524943455f4f5241434c4500000000000000000000000000000000000000005b6000818152600160209081526040808320548151808301909252600382527f41503100000000000000000000000000000000000000000000000000000000009282019290925273ffffffffffffffffffffffffffffffffffffffff9091169081610d16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040e9190610e66565b5092915050565b60008281526001602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091559051909184917fb37614c7d254ea8d16eb81fa11dddaeb266aa8ba4917980859c7740aff30c6919190a35050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215610e2257600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610e4657600080fd5b9392505050565b600060208284031215610e5f57600080fd5b5035919050565b600060208083528351808285015260005b81811015610e9357858101830151858201604001528201610e77565b81811115610ea5576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea264697066735822122083c228af017c6f5cf8c395cdf7a53276ff56fdd4f4313c39f680ab73bd75417364736f6c634300080a0033"; - -type AddressProviderConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: AddressProviderConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class AddressProvider__factory extends ContractFactory { - constructor(...args: AddressProviderConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): AddressProvider { - return super.attach(address) as AddressProvider; - } - override connect(signer: Signer): AddressProvider__factory { - return super.connect(signer) as AddressProvider__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): AddressProviderInterface { - return new utils.Interface(_abi) as AddressProviderInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): AddressProvider { - return new Contract(address, _abi, signerOrProvider) as AddressProvider; - } -} diff --git a/src/types/factories/contracts/core/ContractsRegister__factory.ts b/src/types/factories/contracts/core/ContractsRegister__factory.ts deleted file mode 100644 index 381a66a2..00000000 --- a/src/types/factories/contracts/core/ContractsRegister__factory.ts +++ /dev/null @@ -1,357 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - ContractsRegister, - ContractsRegisterInterface, -} from "../../../contracts/core/ContractsRegister"; - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "addressProvider", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "CallerNotConfiguratorException", - type: "error", - }, - { - inputs: [], - name: "CallerNotPausableAdminException", - type: "error", - }, - { - inputs: [], - name: "CallerNotUnPausableAdminException", - type: "error", - }, - { - inputs: [], - name: "ZeroAddressException", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "creditManager", - type: "address", - }, - ], - name: "NewCreditManagerAdded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "pool", - type: "address", - }, - ], - name: "NewPoolAdded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "Paused", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "Unpaused", - type: "event", - }, - { - inputs: [], - name: "_acl", - outputs: [ - { - internalType: "contract ACL", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newCreditManager", - type: "address", - }, - ], - name: "addCreditManager", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newPoolAddress", - type: "address", - }, - ], - name: "addPool", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "creditManagers", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "getCreditManagers", - outputs: [ - { - internalType: "address[]", - name: "", - type: "address[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "getCreditManagersCount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "getPools", - outputs: [ - { - internalType: "address[]", - name: "", - type: "address[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "getPoolsCount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "isCreditManager", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "isPool", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "pause", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "paused", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "pools", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "unpause", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x60a060405234801561001057600080fd5b50604051610f50380380610f5083398101604081905261002f916100d7565b6000805460ff19169055806001600160a01b03811661006157604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa15801561009f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100c391906100d7565b6001600160a01b0316608052506101079050565b6000602082840312156100e957600080fd5b81516001600160a01b038116811461010057600080fd5b9392505050565b608051610e1261013e600039600081816101e2015281816102b20152818161040f0152818161057801526108510152610e126000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80638456cb5911610097578063b4ac686011610066578063b4ac686014610217578063c29277cd1461021f578063d914cd4b14610227578063e26b2f631461023a57600080fd5b80638456cb59146101cd57806394144856146101d5578063a50cf2c8146101dd578063ac4afa381461020457600080fd5b80635b16ebb7116100d35780635b16ebb7146101575780635c975abb1461018a578063673a2a1f146101955780636fbc6f6b146101aa57600080fd5b80631e16e4fc146100fa5780633f4ba83a1461013757806354fd4d5014610141575b600080fd5b61010d610108366004610c97565b61024d565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61013f610284565b005b610149600181565b60405190815260200161012e565b61017a610165366004610cb0565b60026020526000908152604090205460ff1681565b604051901515815260200161012e565b60005460ff1661017a565b61019d610372565b60405161012e9190610ced565b61017a6101b8366004610cb0565b60046020526000908152604090205460ff1681565b61013f6103e1565b61019d6104cd565b61010d7f000000000000000000000000000000000000000000000000000000000000000081565b61010d610212366004610c97565b61053a565b600154610149565b600354610149565b61013f610235366004610cb0565b61054a565b61013f610248366004610cb0565b610823565b6003818154811061025d57600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa15801561030e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103329190610d47565b610368576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610370610af6565b565b606060018054806020026020016040519081016040528092919081815260200182805480156103d757602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116103ac575b5050505050905090565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561046b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048f9190610d47565b6104c5576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610370610bd7565b606060038054806020026020016040519081016040528092919081815260200182805480156103d75760200282019190600052602060002090815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116103ac575050505050905090565b6001818154811061025d57600080fd5b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156105d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f89190610d47565b61062e576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051808201909152600281527f5a30000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff82166106b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b60405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff8116600090815260026020908152604091829020548251808401909352600383527f43523100000000000000000000000000000000000000000000000000000000009183019190915260ff1615610753576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b506001805480820182557fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915560008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909417909355915190917ff816b5143086c89d103a0683286be86c2b741e83ebfa75135aae606e2f5c6e5391a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156108ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d19190610d47565b610907576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051808201909152600281527f5a30000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8216610989576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b5073ffffffffffffffffffffffffffffffffffffffff8116600090815260046020908152604091829020548251808401909352600383527f43523200000000000000000000000000000000000000000000000000000000009183019190915260ff1615610a23576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b506003805460018082019092557fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915560008181526004602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909417909355915190917f58ad3cfc4b6552a53c8c4128ae9b080e14b4378a159280643a62c6f709cee24f91a250565b60005460ff16610b62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016106b0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff1615610c44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016106b0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610bad3390565b600060208284031215610ca957600080fd5b5035919050565b600060208284031215610cc257600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610ce657600080fd5b9392505050565b6020808252825182820181905260009190848201906040850190845b81811015610d3b57835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101610d09565b50909695505050505050565b600060208284031215610d5957600080fd5b81518015158114610ce657600080fd5b600060208083528351808285015260005b81811015610d9657858101830151858201604001528201610d7a565b81811115610da8576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea26469706673582212208f2d91c863db9ab1494a9c5db20e3fddc4b6c779ea3c3621737c105c60d9440a64736f6c634300080a0033"; - -type ContractsRegisterConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: ContractsRegisterConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class ContractsRegister__factory extends ContractFactory { - constructor(...args: ContractsRegisterConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - addressProvider: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - addressProvider, - overrides || {} - ) as Promise; - } - override getDeployTransaction( - addressProvider: string, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(addressProvider, overrides || {}); - } - override attach(address: string): ContractsRegister { - return super.attach(address) as ContractsRegister; - } - override connect(signer: Signer): ContractsRegister__factory { - return super.connect(signer) as ContractsRegister__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): ContractsRegisterInterface { - return new utils.Interface(_abi) as ContractsRegisterInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): ContractsRegister { - return new Contract(address, _abi, signerOrProvider) as ContractsRegister; - } -} diff --git a/src/types/factories/contracts/core/DataCompressor__factory.ts b/src/types/factories/contracts/core/DataCompressor__factory.ts deleted file mode 100644 index 0eaaa113..00000000 --- a/src/types/factories/contracts/core/DataCompressor__factory.ts +++ /dev/null @@ -1,910 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - DataCompressor, - DataCompressorInterface, -} from "../../../contracts/core/DataCompressor"; - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "_addressProvider", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "NotCreditManagerException", - type: "error", - }, - { - inputs: [], - name: "NotPoolException", - type: "error", - }, - { - inputs: [], - name: "ZeroAddressException", - type: "error", - }, - { - inputs: [], - name: "WETHToken", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "addressProvider", - outputs: [ - { - internalType: "contract AddressProvider", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "contractsRegister", - outputs: [ - { - internalType: "contract ContractsRegister", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_creditManager", - type: "address", - }, - { - internalType: "address", - name: "_allowedContract", - type: "address", - }, - ], - name: "getAdapter", - outputs: [ - { - internalType: "address", - name: "adapter", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_creditManager", - type: "address", - }, - { - internalType: "address", - name: "borrower", - type: "address", - }, - ], - name: "getCreditAccountData", - outputs: [ - { - components: [ - { - internalType: "address", - name: "addr", - type: "address", - }, - { - internalType: "address", - name: "borrower", - type: "address", - }, - { - internalType: "bool", - name: "inUse", - type: "bool", - }, - { - internalType: "address", - name: "creditManager", - type: "address", - }, - { - internalType: "address", - name: "underlying", - type: "address", - }, - { - internalType: "uint256", - name: "borrowedAmountPlusInterest", - type: "uint256", - }, - { - internalType: "uint256", - name: "totalValue", - type: "uint256", - }, - { - internalType: "uint256", - name: "healthFactor", - type: "uint256", - }, - { - internalType: "uint256", - name: "borrowRate", - type: "uint256", - }, - { - components: [ - { - internalType: "address", - name: "token", - type: "address", - }, - { - internalType: "uint256", - name: "balance", - type: "uint256", - }, - { - internalType: "bool", - name: "isAllowed", - type: "bool", - }, - { - internalType: "bool", - name: "isEnabled", - type: "bool", - }, - ], - internalType: "struct TokenBalance[]", - name: "balances", - type: "tuple[]", - }, - { - internalType: "uint256", - name: "repayAmount", - type: "uint256", - }, - { - internalType: "uint256", - name: "liquidationAmount", - type: "uint256", - }, - { - internalType: "bool", - name: "canBeClosed", - type: "bool", - }, - { - internalType: "uint256", - name: "borrowedAmount", - type: "uint256", - }, - { - internalType: "uint256", - name: "cumulativeIndexAtOpen", - type: "uint256", - }, - { - internalType: "uint256", - name: "since", - type: "uint256", - }, - { - internalType: "uint8", - name: "version", - type: "uint8", - }, - { - internalType: "uint256", - name: "enabledTokenMask", - type: "uint256", - }, - ], - internalType: "struct CreditAccountData", - name: "result", - type: "tuple", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "borrower", - type: "address", - }, - ], - name: "getCreditAccountList", - outputs: [ - { - components: [ - { - internalType: "address", - name: "addr", - type: "address", - }, - { - internalType: "address", - name: "borrower", - type: "address", - }, - { - internalType: "bool", - name: "inUse", - type: "bool", - }, - { - internalType: "address", - name: "creditManager", - type: "address", - }, - { - internalType: "address", - name: "underlying", - type: "address", - }, - { - internalType: "uint256", - name: "borrowedAmountPlusInterest", - type: "uint256", - }, - { - internalType: "uint256", - name: "totalValue", - type: "uint256", - }, - { - internalType: "uint256", - name: "healthFactor", - type: "uint256", - }, - { - internalType: "uint256", - name: "borrowRate", - type: "uint256", - }, - { - components: [ - { - internalType: "address", - name: "token", - type: "address", - }, - { - internalType: "uint256", - name: "balance", - type: "uint256", - }, - { - internalType: "bool", - name: "isAllowed", - type: "bool", - }, - { - internalType: "bool", - name: "isEnabled", - type: "bool", - }, - ], - internalType: "struct TokenBalance[]", - name: "balances", - type: "tuple[]", - }, - { - internalType: "uint256", - name: "repayAmount", - type: "uint256", - }, - { - internalType: "uint256", - name: "liquidationAmount", - type: "uint256", - }, - { - internalType: "bool", - name: "canBeClosed", - type: "bool", - }, - { - internalType: "uint256", - name: "borrowedAmount", - type: "uint256", - }, - { - internalType: "uint256", - name: "cumulativeIndexAtOpen", - type: "uint256", - }, - { - internalType: "uint256", - name: "since", - type: "uint256", - }, - { - internalType: "uint8", - name: "version", - type: "uint8", - }, - { - internalType: "uint256", - name: "enabledTokenMask", - type: "uint256", - }, - ], - internalType: "struct CreditAccountData[]", - name: "result", - type: "tuple[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_creditManager", - type: "address", - }, - ], - name: "getCreditManagerData", - outputs: [ - { - components: [ - { - internalType: "address", - name: "addr", - type: "address", - }, - { - internalType: "address", - name: "underlying", - type: "address", - }, - { - internalType: "bool", - name: "isWETH", - type: "bool", - }, - { - internalType: "bool", - name: "canBorrow", - type: "bool", - }, - { - internalType: "uint256", - name: "borrowRate", - type: "uint256", - }, - { - internalType: "uint256", - name: "minAmount", - type: "uint256", - }, - { - internalType: "uint256", - name: "maxAmount", - type: "uint256", - }, - { - internalType: "uint256", - name: "maxLeverageFactor", - type: "uint256", - }, - { - internalType: "uint256", - name: "availableLiquidity", - type: "uint256", - }, - { - internalType: "address[]", - name: "collateralTokens", - type: "address[]", - }, - { - components: [ - { - internalType: "address", - name: "allowedContract", - type: "address", - }, - { - internalType: "address", - name: "adapter", - type: "address", - }, - ], - internalType: "struct ContractAdapter[]", - name: "adapters", - type: "tuple[]", - }, - { - internalType: "uint256[]", - name: "liquidationThresholds", - type: "uint256[]", - }, - { - internalType: "uint8", - name: "version", - type: "uint8", - }, - { - internalType: "address", - name: "creditFacade", - type: "address", - }, - { - internalType: "bool", - name: "isDegenMode", - type: "bool", - }, - { - internalType: "address", - name: "degenNFT", - type: "address", - }, - { - internalType: "bool", - name: "isIncreaseDebtForbidden", - type: "bool", - }, - { - internalType: "uint256", - name: "forbiddenTokenMask", - type: "uint256", - }, - { - internalType: "uint8", - name: "maxEnabledTokensLength", - type: "uint8", - }, - ], - internalType: "struct CreditManagerData", - name: "result", - type: "tuple", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "getCreditManagersList", - outputs: [ - { - components: [ - { - internalType: "address", - name: "addr", - type: "address", - }, - { - internalType: "address", - name: "underlying", - type: "address", - }, - { - internalType: "bool", - name: "isWETH", - type: "bool", - }, - { - internalType: "bool", - name: "canBorrow", - type: "bool", - }, - { - internalType: "uint256", - name: "borrowRate", - type: "uint256", - }, - { - internalType: "uint256", - name: "minAmount", - type: "uint256", - }, - { - internalType: "uint256", - name: "maxAmount", - type: "uint256", - }, - { - internalType: "uint256", - name: "maxLeverageFactor", - type: "uint256", - }, - { - internalType: "uint256", - name: "availableLiquidity", - type: "uint256", - }, - { - internalType: "address[]", - name: "collateralTokens", - type: "address[]", - }, - { - components: [ - { - internalType: "address", - name: "allowedContract", - type: "address", - }, - { - internalType: "address", - name: "adapter", - type: "address", - }, - ], - internalType: "struct ContractAdapter[]", - name: "adapters", - type: "tuple[]", - }, - { - internalType: "uint256[]", - name: "liquidationThresholds", - type: "uint256[]", - }, - { - internalType: "uint8", - name: "version", - type: "uint8", - }, - { - internalType: "address", - name: "creditFacade", - type: "address", - }, - { - internalType: "bool", - name: "isDegenMode", - type: "bool", - }, - { - internalType: "address", - name: "degenNFT", - type: "address", - }, - { - internalType: "bool", - name: "isIncreaseDebtForbidden", - type: "bool", - }, - { - internalType: "uint256", - name: "forbiddenTokenMask", - type: "uint256", - }, - { - internalType: "uint8", - name: "maxEnabledTokensLength", - type: "uint8", - }, - ], - internalType: "struct CreditManagerData[]", - name: "result", - type: "tuple[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_pool", - type: "address", - }, - ], - name: "getPoolData", - outputs: [ - { - components: [ - { - internalType: "address", - name: "addr", - type: "address", - }, - { - internalType: "bool", - name: "isWETH", - type: "bool", - }, - { - internalType: "address", - name: "underlying", - type: "address", - }, - { - internalType: "address", - name: "dieselToken", - type: "address", - }, - { - internalType: "uint256", - name: "linearCumulativeIndex", - type: "uint256", - }, - { - internalType: "uint256", - name: "availableLiquidity", - type: "uint256", - }, - { - internalType: "uint256", - name: "expectedLiquidity", - type: "uint256", - }, - { - internalType: "uint256", - name: "expectedLiquidityLimit", - type: "uint256", - }, - { - internalType: "uint256", - name: "totalBorrowed", - type: "uint256", - }, - { - internalType: "uint256", - name: "depositAPY_RAY", - type: "uint256", - }, - { - internalType: "uint256", - name: "borrowAPY_RAY", - type: "uint256", - }, - { - internalType: "uint256", - name: "dieselRate_RAY", - type: "uint256", - }, - { - internalType: "uint256", - name: "withdrawFee", - type: "uint256", - }, - { - internalType: "uint256", - name: "cumulativeIndex_RAY", - type: "uint256", - }, - { - internalType: "uint256", - name: "timestampLU", - type: "uint256", - }, - { - internalType: "uint8", - name: "version", - type: "uint8", - }, - ], - internalType: "struct PoolData", - name: "result", - type: "tuple", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "getPoolsList", - outputs: [ - { - components: [ - { - internalType: "address", - name: "addr", - type: "address", - }, - { - internalType: "bool", - name: "isWETH", - type: "bool", - }, - { - internalType: "address", - name: "underlying", - type: "address", - }, - { - internalType: "address", - name: "dieselToken", - type: "address", - }, - { - internalType: "uint256", - name: "linearCumulativeIndex", - type: "uint256", - }, - { - internalType: "uint256", - name: "availableLiquidity", - type: "uint256", - }, - { - internalType: "uint256", - name: "expectedLiquidity", - type: "uint256", - }, - { - internalType: "uint256", - name: "expectedLiquidityLimit", - type: "uint256", - }, - { - internalType: "uint256", - name: "totalBorrowed", - type: "uint256", - }, - { - internalType: "uint256", - name: "depositAPY_RAY", - type: "uint256", - }, - { - internalType: "uint256", - name: "borrowAPY_RAY", - type: "uint256", - }, - { - internalType: "uint256", - name: "dieselRate_RAY", - type: "uint256", - }, - { - internalType: "uint256", - name: "withdrawFee", - type: "uint256", - }, - { - internalType: "uint256", - name: "cumulativeIndex_RAY", - type: "uint256", - }, - { - internalType: "uint256", - name: "timestampLU", - type: "uint256", - }, - { - internalType: "uint8", - name: "version", - type: "uint8", - }, - ], - internalType: "struct PoolData[]", - name: "result", - type: "tuple[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_creditManager", - type: "address", - }, - { - internalType: "address", - name: "borrower", - type: "address", - }, - ], - name: "hasOpenedCreditAccount", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x60e06040523480156200001157600080fd5b5060405162004da638038062004da6833981016040819052620000349162000160565b6001600160a01b0381166200005c57604051635919af9760e11b815260040160405180910390fd5b6001600160a01b03811660808190526040805163c513c9bb60e01b8152905163c513c9bb916004808201926020929091908290030181865afa158015620000a7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cd919062000160565b6001600160a01b031660a0816001600160a01b0316815250506080516001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000127573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200014d919062000160565b6001600160a01b031660c0525062000192565b6000602082840312156200017357600080fd5b81516001600160a01b03811681146200018b57600080fd5b9392505050565b60805160a05160c051614b896200021d6000396000818161018801528181611c4f0152612c5a0152600081816101ed015281816115e201528181611f5f0152818161213f0152818161223f0152818161243801528181612604015281816126bc01528181612788015281816129a501528181613c410152613d000152600061013c0152614b896000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c806354fd4d5011610081578063a80deda31161005b578063a80deda31461020f578063ae093f3f1461022f578063fc9914cb1461024f57600080fd5b806354fd4d50146101bd578063663b8fdb146101d35780637a0c7b21146101e857600080fd5b80632954018c116100b25780632954018c146101375780634b2f336d146101835780634c472fc9146101aa57600080fd5b80630dbd616d146100d957806313d21cdf146101025780631bcd8fc014610122575b600080fd5b6100ec6100e73660046140fc565b610272565b6040516100f9919061430b565b60405180910390f35b61011561011036600461431e565b6114d4565b6040516100f99190614444565b61012a611f59565b6040516100f99190614453565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100f9565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b61015e6101b83660046140fc565b6121f5565b6101c5600281565b6040519081526020016100f9565b6101db612432565b6040516100f991906146ea565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b61022261021d36600461431e565b6126b5565b6040516100f9919061476a565b61024261023d36600461431e565b612a75565b6040516100f991906147dd565b61026261025d3660046140fc565b613bf7565b60405190151581526020016100f9565b61035f604051806102400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160008152602001606081526020016000815260200160008152602001600015158152602001600081526020016000815260200160008152602001600060ff168152602001600081525090565b600080600080600061037088613cf4565b509450945094509450945060008560ff1660011461041d576040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015284169063e958b70490602401602060405180830381865afa1580156103f4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061041891906147f0565b6104ad565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015286169063e958b70490602401602060405180830381865afa158015610489573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ad91906147f0565b60ff8716610200890181905273ffffffffffffffffffffffffffffffffffffffff808b1660208b01528b811660608b015282168952909150600114156109e9578473ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610538573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055c91906147f0565b73ffffffffffffffffffffffffffffffffffffffff90811660808901526040517fc7de38a600000000000000000000000000000000000000000000000000000000815282821660048201529085169063c7de38a690602401602060405180830381865afa1580156105d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f5919061480d565b60c08801526040517fdfd5946500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015285169063dfd5946590602401602060405180830381865afa158015610666573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068a919061480d565b60e08801526040517f3ce0735500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015260006024830152861690633ce0735590604401602060405180830381865afa92505050801561073c575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526107399181019061480d565b60015b6107455761074c565b6101408801525b6040517f3ce0735500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015260016024830152861690633ce0735590604401602060405180830381865afa9250505080156107f9575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526107f69181019061480d565b60015b61080257610809565b6101608801525b60c08701516040517f996329f800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526024820192909252600060448201529086169063996329f89060640160a060405180830381865afa9250505080156108c4575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526108c191810190614826565b60015b6108cd576108da565b505015156101808a015250505b8073ffffffffffffffffffffffffffffffffffffffff16631afbb7a46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610925573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610949919061480d565b6101a08801526040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152851690633192195c90602401602060405180830381865afa1580156109bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109df919061480d565b60a0880152610c26565b8273ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5891906147f0565b73ffffffffffffffffffffffffffffffffffffffff90811660808901526040517fc7de38a600000000000000000000000000000000000000000000000000000000815282821660048201529083169063c7de38a6906024016040805180830381865afa158015610acc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af09190614866565b5060c08801526040517fdfd5946500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015283169063dfd5946590602401602060405180830381865afa158015610b62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b86919061480d565b60e08801526040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152841690633192195c906024016040805180830381865afa158015610bf6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1a9190614866565b60a08901526101a08801525b60008660ff16600114610ca7578373ffffffffffffffffffffffffffffffffffffffff166316f0115b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca291906147f0565b610d16565b8573ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1691906147f0565b90508073ffffffffffffffffffffffffffffffffffffffff166345d31f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d87919061480d565b6101008901526000600160ff891614610e0e578473ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610de5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e09919061480d565b610e7d565b8573ffffffffffffffffffffffffffffffffffffffff166320a05ff76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7d919061480d565b90508760ff16600114610f1f576040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152861690638991b2f190602401602060405180830381865afa158015610ef6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1a919061480d565b610faf565b6040517fb451cecc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015287169063b451cecc90602401602060405180830381865afa158015610f8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610faf919061480d565b6102208a01528067ffffffffffffffff811115610fce57610fce61488a565b60405190808252806020026020018201604052801561103e57816020015b6040805160808101825260008082526020808301829052928201819052606082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181610fec5790505b506101208a015260005b818110156113d657604080516080810182526000808252602082018190529181018290526060810191909152600180831b9060ff8c1614156111c5576040517faf0a650200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018590528a169063af0a650290604401608060405180830381865afa1580156110f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111b91906148b9565b5050602084015273ffffffffffffffffffffffffffffffffffffffff9081168084526040517ff9eaee0d0000000000000000000000000000000000000000000000000000000081526004810191909152908a169063f9eaee0d90602401602060405180830381865afa158015611195573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b9919061490d565b15156040830152611388565b6040517f172c48c70000000000000000000000000000000000000000000000000000000081526004810184905273ffffffffffffffffffffffffffffffffffffffff89169063172c48c7906024016040805180830381865afa15801561122f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112539190614928565b5073ffffffffffffffffffffffffffffffffffffffff9081168084526040517f70a082310000000000000000000000000000000000000000000000000000000081529188166004830152906370a0823190602401602060405180830381865afa1580156112c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e8919061480d565b602083015281516040517ff9eaee0d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529088169063f9eaee0d90602401602060405180830381865afa15801561135c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611380919061490d565b151560408301525b6102208c015181161561139c57600161139f565b60005b151560608301526101208c01518051839190859081106113c1576113c161495e565b60209081029190910101525050600101611048565b508273ffffffffffffffffffffffffffffffffffffffff166317d11a156040518163ffffffff1660e01b8152600401602060405180830381865afa158015611422573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611446919061480d565b896101c00181815250508273ffffffffffffffffffffffffffffffffffffffff16633dc54b406040518163ffffffff1660e01b8152600401602060405180830381865afa15801561149b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bf919061480d565b6101e08a015250969998505050505050505050565b61159b604051806102000160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600060ff1681525090565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015283917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa15801561162b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164f919061490d565b611685576040517fd384b23800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316808352604080517ffe14112d000000000000000000000000000000000000000000000000000000008152905185929163fe14112d9160048083019260209291908290030181865afa1580156116f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611719919061480d565b8360c00181815250508073ffffffffffffffffffffffffffffffffffffffff1663ef8d96036040518163ffffffff1660e01b8152600401602060405180830381865afa15801561176d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611791919061480d565b8360e00181815250508073ffffffffffffffffffffffffffffffffffffffff1663743753596040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611809919061480d565b8360a00181815250508073ffffffffffffffffffffffffffffffffffffffff16634c19386c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561185d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611881919061480d565b836101000181815250508073ffffffffffffffffffffffffffffffffffffffff1663788c6bfe6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fa919061480d565b836101600181815250508073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561194f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611973919061480d565b8360800181815250508073ffffffffffffffffffffffffffffffffffffffff166345d31f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119eb919061480d565b836101400181815250508073ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6491906147f0565b836040019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff166336dda7d56040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0a91906147f0565b836060019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663788c6bfe6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb0919061480d565b836101600181815250508073ffffffffffffffffffffffffffffffffffffffff1663e941fa786040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c29919061480d565b61018084015260408084015173ffffffffffffffffffffffffffffffffffffffff9081167f000000000000000000000000000000000000000000000000000000000000000082161460208087019190915282517f609ae31700000000000000000000000000000000000000000000000000000000815292519184169263609ae31792600480830193928290030181865afa158015611ccb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cef919061480d565b836101c00181815250508073ffffffffffffffffffffffffffffffffffffffff1663dbcb313b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d68919061480d565b836101a00181815250506000836060015173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de7919061480d565b6040517f5427c9380000000000000000000000000000000000000000000000000000000081526004810182905290915060009073ffffffffffffffffffffffffffffffffffffffff841690635427c93890602401602060405180830381865afa158015611e58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7c919061480d565b90508015611ec7576101808501518190611eb890611e9c906127106149bc565b876101000151886101400151611eb291906149d3565b90613fd0565b611ec29190614a3f565b611ece565b8461014001515b856101200181815250508273ffffffffffffffffffffffffffffffffffffffff166354fd4d506040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f47919061480d565b60ff166101e086015250505050919050565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b4ac68606040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fec919061480d565b90508067ffffffffffffffff8111156120075761200761488a565b6040519080825280602002602001820160405280156120ff57816020015b6120ec604051806102000160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600060ff1681525090565b8152602001906001900390816120255790505b50915060005b818110156121f0576040517fac4afa38000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ac4afa3890602401602060405180830381865afa15801561219b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121bf91906147f0565b90506121ca816114d4565b8483815181106121dc576121dc61495e565b602090810291909101015250600101612105565b505090565b6040517f6fbc6f6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015260009184917f00000000000000000000000000000000000000000000000000000000000000001690636fbc6f6b90602401602060405180830381865afa158015612286573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122aa919061490d565b6122e0576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060006122ee87613cf4565b5050935093505092508260ff16600114612397576040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015282169063fdd5764590602401602060405180830381865afa15801561236e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061239291906147f0565b612427565b6040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015283169063fdd5764590602401602060405180830381865afa158015612403573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061242791906147f0565b979650505050505050565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c29277cd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124c5919061480d565b90508067ffffffffffffffff8111156124e0576124e061488a565b6040519080825280602002602001820160405280156125c457816020015b60408051610260810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083018290526101208301819052610140830181905261016083015261018082018190526101a082018190526101c082018190526101e082018190526102008201819052610220820181905261024082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816124fe5790505b50915060005b818110156121f0576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa158015612660573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061268491906147f0565b905061268f81612a75565b8483815181106126a1576126a161495e565b6020908102919091010152506001016125ca565b60606000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c29277cd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612725573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612749919061480d565b905060005b81811015612829576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa1580156127e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061280891906147f0565b90506128148187613bf7565b15612820578360010193505b5060010161274e565b508167ffffffffffffffff8111156128435761284361488a565b60405190808252806020026020018201604052801561296157816020015b61294e604051806102400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160008152602001606081526020016000815260200160008152602001600015158152602001600081526020016000815260200160008152602001600060ff168152602001600081525090565b8152602001906001900390816128615790505b5092506000915060005b81811015612a6d576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa158015612a01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a2591906147f0565b9050612a318187613bf7565b15612a6457612a408187610272565b858581518110612a5257612a5261495e565b60209081029190910101526001909301925b5060010161296b565b505050919050565b604080516102608101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082018390526101208201819052610140820181905261016082015261018081018290526101a081018290526101c081018290526101e08101829052610200810182905261022081018290526102408101829052908080808080612b1b88613cf4565b73ffffffffffffffffffffffffffffffffffffffff8e168d5260ff86166101808e01819052959b50939950919750955093509150600114612bca578273ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ba1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bc591906147f0565b612c39565b8473ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c3991906147f0565b73ffffffffffffffffffffffffffffffffffffffff908116602089018190527f00000000000000000000000000000000000000000000000000000000000000009091161460408801526000600160ff881614612d03578373ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cfe91906147f0565b612d72565b8573ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d7291906147f0565b6040517f2e97ca2100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b8116600483015291925090821690632e97ca2190602401602060405180830381865afa158015612de2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e06919061490d565b15156060890152604080517f45d31f9d000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff8316916345d31f9d9160048083019260209291908290030181865afa158015612e78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e9c919061480d565b8860800181815250508073ffffffffffffffffffffffffffffffffffffffff1663743753596040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ef0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f14919061480d565b610100890152600160ff88161415613017578573ffffffffffffffffffffffffffffffffffffffff16639b2cb5d86040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f95919061480d565b8860a00181815250508573ffffffffffffffffffffffffffffffffffffffff16635f48f3936040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fe9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061300d919061480d565b60c08901526130a5565b8273ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa158015613061573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130859190614a73565b6fffffffffffffffffffffffffffffffff90811660c08b01521660a08901525b60008760ff16600114613126578473ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613121919061480d565b613195565b8573ffffffffffffffffffffffffffffffffffffffff166320a05ff76040518163ffffffff1660e01b8152600401602060405180830381865afa158015613171573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613195919061480d565b90508067ffffffffffffffff8111156131b0576131b061488a565b6040519080825280602002602001820160405280156131d9578160200160208202803683370190505b506101208a01528067ffffffffffffffff8111156131f9576131f961488a565b604051908082528060200260200182016040528015613222578160200160208202803683370190505b506101608a015260005b818110156134c4578860ff16600114156133b4576040517f5e5f2e260000000000000000000000000000000000000000000000000000000081526004810182905260009073ffffffffffffffffffffffffffffffffffffffff891690635e5f2e2690602401602060405180830381865afa1580156132ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132d291906147f0565b9050808b610120015183815181106132ec576132ec61495e565b73ffffffffffffffffffffffffffffffffffffffff92831660209182029290920101526040517f78327438000000000000000000000000000000000000000000000000000000008152828216600482015290891690637832743890602401602060405180830381865afa158015613367573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061338b919061480d565b8b610160015183815181106133a2576133a261495e565b602002602001018181525050506134bc565b6040517f172c48c70000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff87169063172c48c7906024016040805180830381865afa15801561341e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134429190614928565b8061ffff1690508b610120015183815181106134605761346061495e565b602002602001018c6101600151848151811061347e5761347e61495e565b60200260200101828152508273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525050505b60010161322c565b5060008860ff16600114613546578373ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561351d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613541919061480d565b6135b5565b8673ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613591573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135b5919061480d565b90508067ffffffffffffffff8111156135d0576135d061488a565b60405190808252806020026020018201604052801561361557816020015b60408051808201909152600080825260208201528152602001906001900390816135ee5790505b506101408b015260005b818110156139015760408051808201909152600080825260208201528a60ff166001146136da576040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff871690635094cb4f90602401602060405180830381865afa1580156136b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136d591906147f0565b613769565b6040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff8a1690635094cb4f90602401602060405180830381865afa158015613745573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061376991906147f0565b73ffffffffffffffffffffffffffffffffffffffff168152600160ff8c16146138245780516040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529089169063fdd5764590602401602060405180830381865afa1580156137fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061381f91906147f0565b6138b7565b80516040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152908a169063fdd5764590602401602060405180830381865afa158015613893573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138b791906147f0565b73ffffffffffffffffffffffffffffffffffffffff1660208201526101408c01518051829190849081106138ed576138ed61495e565b60209081029190910101525060010161361f565b508860ff166001141561398f578773ffffffffffffffffffffffffffffffffffffffff1663b2c53a6c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613959573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061397d919061480d565b60e08b015260ff6102408b0152613be9565b73ffffffffffffffffffffffffffffffffffffffff85166101a08b01819052604080517f9408b63f0000000000000000000000000000000000000000000000000000000081529051639408b63f916004808201926020929091908290030181865afa158015613a02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a2691906147f0565b8a6101e0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508473ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015613aa9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613acd9190614aa6565b5015156102008c015250604080517f9fd12b77000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff881691639fd12b779160048083019260209291908290030181865afa158015613b42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b66919061480d565b8a6102200181815250508573ffffffffffffffffffffffffffffffffffffffff16638345f26e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bdf9190614af7565b60ff166102408b01525b505050505050505050919050565b6040517f6fbc6f6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015260009184917f00000000000000000000000000000000000000000000000000000000000000001690636fbc6f6b90602401602060405180830381865afa158015613c88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cac919061490d565b613ce2576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613cec8484614023565b949350505050565b600080600080600080867f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636fbc6f6b826040518263ffffffff1660e01b8152600401613d73919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa158015613d90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613db4919061490d565b613dea576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8773ffffffffffffffffffffffffffffffffffffffff166354fd4d506040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e59919061480d565b96508660ff1660011415613ee0578795508573ffffffffffffffffffffffffffffffffffffffff1663f93f515b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613eb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ed991906147f0565b9450613fc6565b8793508373ffffffffffffffffffffffffffffffffffffffff16632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f5291906147f0565b92508373ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fc391906147f0565b91505b5091939550919395565b6000821580613fdd575081155b15613fea5750600061401d565b612710613ff8600282614b1a565b61ffff1661400684866149d3565b6140109190614b3b565b61401a9190614a3f565b90505b92915050565b6040517f055ee9b500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600091829185169063055ee9b590602401602060405180830381865afa158015614094573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140b891906147f0565b73ffffffffffffffffffffffffffffffffffffffff1614159392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146140f957600080fd5b50565b6000806040838503121561410f57600080fd5b823561411a816140d7565b9150602083013561412a816140d7565b809150509250929050565b600081518084526020808501945080840160005b8381101561419f578151805173ffffffffffffffffffffffffffffffffffffffff168852838101518489015260408082015115159089015260609081015115159088015260809096019590820190600101614149565b509495945050505050565b805173ffffffffffffffffffffffffffffffffffffffff168252600061024060208301516141f0602086018273ffffffffffffffffffffffffffffffffffffffff169052565b506040830151614204604086018215159052565b50606083015161422c606086018273ffffffffffffffffffffffffffffffffffffffff169052565b506080830151614254608086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060a083015160a085015260c083015160c085015260e083015160e085015261010080840151818601525061012080840151828287015261429783870182614135565b92505050610140808401518186015250610160808401518186015250610180808401516142c78287018215159052565b50506101a083810151908501526101c080840151908501526101e080840151908501526102008084015160ff16908501526102209283015192909301919091525090565b60208152600061401a60208301846141aa565b60006020828403121561433057600080fd5b813561433b816140d7565b9392505050565b805173ffffffffffffffffffffffffffffffffffffffff168252602081015161436f602084018215159052565b506040810151614397604084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060608101516143bf606084018273ffffffffffffffffffffffffffffffffffffffff169052565b506080818101519083015260a0808201519083015260c0808201519083015260e08082015190830152610100808201519083015261012080820151908301526101408082015190830152610160808201519083015261018080820151908301526101a080820151908301526101c080820151908301526101e09081015160ff16910152565b610200810161401d8284614342565b6020808252825182820181905260009190848201906040850190845b8181101561449657614482838551614342565b92840192610200929092019160010161446f565b50909695505050505050565b600081518084526020808501945080840160005b8381101561419f57815173ffffffffffffffffffffffffffffffffffffffff16875295820195908201906001016144b6565b600081518084526020808501945080840160005b8381101561419f578151805173ffffffffffffffffffffffffffffffffffffffff9081168952908401511683880152604090960195908201906001016144fc565b600081518084526020808501945080840160005b8381101561419f57815187529582019590820190600101614551565b805173ffffffffffffffffffffffffffffffffffffffff168252600061026060208301516145b3602086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060408301516145c7604086018215159052565b5060608301516145db606086018215159052565b506080830151608085015260a083015160a085015260c083015160c085015260e083015160e0850152610100808401518186015250610120808401518282870152614628838701826144a2565b92505050610140808401518583038287015261464483826144e8565b925050506101608084015185830382870152614660838261453d565b92505050610180808401516146798287018260ff169052565b50506101a08381015173ffffffffffffffffffffffffffffffffffffffff908116918601919091526101c0808501511515908601526101e080850151909116908501526102008084015115159085015261022080840151908501526102409283015160ff1692909301919091525090565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561475d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc088860301845261474b85835161456d565b94509285019290850190600101614711565b5092979650505050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561475d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08886030184526147cb8583516141aa565b94509285019290850190600101614791565b60208152600061401a602083018461456d565b60006020828403121561480257600080fd5b815161433b816140d7565b60006020828403121561481f57600080fd5b5051919050565b600080600080600060a0868803121561483e57600080fd5b5050835160208501516040860151606087015160809097015192989197509594509092509050565b6000806040838503121561487957600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080600080608085870312156148cf57600080fd5b84516148da816140d7565b60208601516040870151606090970151919890975090945092505050565b8051801515811461490857600080fd5b919050565b60006020828403121561491f57600080fd5b61401a826148f8565b6000806040838503121561493b57600080fd5b8251614946816140d7565b602084015190925061ffff8116811461412a57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156149ce576149ce61498d565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614a0b57614a0b61498d565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614a4e57614a4e614a10565b500490565b80516fffffffffffffffffffffffffffffffff8116811461490857600080fd5b60008060408385031215614a8657600080fd5b614a8f83614a53565b9150614a9d60208401614a53565b90509250929050565b600080600060608486031215614abb57600080fd5b614ac484614a53565b9250614ad2602085016148f8565b9150604084015164ffffffffff81168114614aec57600080fd5b809150509250925092565b600060208284031215614b0957600080fd5b815160ff8116811461433b57600080fd5b600061ffff80841680614b2f57614b2f614a10565b92169190910492915050565b60008219821115614b4e57614b4e61498d565b50019056fea2646970667358221220d15108d0bec9cc6f3903875dd8412869a3da1b36661bdc780e2e2f0ae3136d2464736f6c634300080a0033"; - -type DataCompressorConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: DataCompressorConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class DataCompressor__factory extends ContractFactory { - constructor(...args: DataCompressorConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - _addressProvider: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - _addressProvider, - overrides || {} - ) as Promise; - } - override getDeployTransaction( - _addressProvider: string, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(_addressProvider, overrides || {}); - } - override attach(address: string): DataCompressor { - return super.attach(address) as DataCompressor; - } - override connect(signer: Signer): DataCompressor__factory { - return super.connect(signer) as DataCompressor__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): DataCompressorInterface { - return new utils.Interface(_abi) as DataCompressorInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): DataCompressor { - return new Contract(address, _abi, signerOrProvider) as DataCompressor; - } -} diff --git a/src/types/factories/contracts/core/WETHGateway__factory.ts b/src/types/factories/contracts/core/WETHGateway__factory.ts deleted file mode 100644 index e29d4097..00000000 --- a/src/types/factories/contracts/core/WETHGateway__factory.ts +++ /dev/null @@ -1,191 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - WETHGateway, - WETHGatewayInterface, -} from "../../../contracts/core/WETHGateway"; - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "addressProvider", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "pool", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - ], - name: "WithdrawETH", - type: "event", - }, - { - inputs: [ - { - internalType: "address", - name: "pool", - type: "address", - }, - { - internalType: "address", - name: "onBehalfOf", - type: "address", - }, - { - internalType: "uint16", - name: "referralCode", - type: "uint16", - }, - ], - name: "addLiquidityETH", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "pool", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "address payable", - name: "to", - type: "address", - }, - ], - name: "removeLiquidityETH", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "unwrapWETH", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "wethAddress", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - stateMutability: "payable", - type: "receive", - }, -]; - -const _bytecode = - "0x60c06040523480156200001157600080fd5b506040516200162738038062001627833981016040819052620000349162000177565b60408051808201909152600281526105a360f41b60208201526001600160a01b038216620000805760405162461bcd60e51b8152600401620000779190620001a9565b60405180910390fd5b50806001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e6919062000177565b6001600160a01b03166080816001600160a01b031681525050806001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200013e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000164919062000177565b6001600160a01b031660a0525062000201565b6000602082840312156200018a57600080fd5b81516001600160a01b0381168114620001a257600080fd5b9392505050565b600060208083528351808285015260005b81811015620001d857858101830151858201604001528201620001ba565b81811115620001eb576000604083870101525b50601f01601f1916929092016040019392505050565b60805160a0516113c2620002656000396000818161021f0152818161036401526106d501526000818160af0152818161012a015281816104420152818161056e015281816107b301528181610aa601528181610b890152610c6701526113c26000f3fe60806040526004361061005e5760003560e01c80635869dba8116100435780635869dba814610199578063deecfbc9146101bb578063e79a4089146101ce57600080fd5b80634f0e0ef31461011857806354fd4d501461017657600080fd5b366101135760408051808201909152600381527f574732000000000000000000000000000000000000000000000000000000000060208201523373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b60405180910390fd5b50005b600080fd5b34801561012457600080fd5b5061014c7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561018257600080fd5b5061018b600181565b60405190815260200161016d565b3480156101a557600080fd5b506101b96101b4366004611263565b6101ee565b005b6101b96101c936600461128f565b61031d565b3480156101da57600080fd5b506101b96101e93660046112e1565b61068e565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201819052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa15801561027b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061029f9190611318565b6040518060400160405280600281526020017f43500000000000000000000000000000000000000000000000000000000000008152509061030d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b506103188383610a77565b505050565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808516600483015284917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa1580156103ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103d19190611318565b6040518060400160405280600281526020017f52500000000000000000000000000000000000000000000000000000000000008152509061043f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e6919061133a565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600381526020017f57473100000000000000000000000000000000000000000000000000000000008152509061056b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156105d457600080fd5b505af11580156105e8573d6000803e3d6000fd5b50505050506105f78434610b3c565b6040517f9aa5d46200000000000000000000000000000000000000000000000000000000815234600482015273ffffffffffffffffffffffffffffffffffffffff848116602483015261ffff84166044830152851690639aa5d46290606401600060405180830381600087803b15801561067057600080fd5b505af1158015610684573d6000803e3d6000fd5b5050505050505050565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808516600483015284917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa15801561071e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107429190611318565b6040518060400160405280600281526020017f5250000000000000000000000000000000000000000000000000000000000000815250906107b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610833573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610857919061133a565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600381526020017f5747310000000000000000000000000000000000000000000000000000000000815250906108dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b506109703330858773ffffffffffffffffffffffffffffffffffffffff166336dda7d56040518163ffffffff1660e01b8152600401602060405180830381865afa15801561092e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610952919061133a565b73ffffffffffffffffffffffffffffffffffffffff16929190610cd4565b6040517f05fe138b0000000000000000000000000000000000000000000000000000000081526004810184905230602482015260009073ffffffffffffffffffffffffffffffffffffffff8616906305fe138b906044016020604051808303816000875af11580156109e6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0a9190611357565b9050610a168382610a77565b8273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f6de63bb986f2779478e384365c03cc2e62f06b453856acca87d5a519ce02664960405160405180910390a35050505050565b6040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632e1a7d4d90602401600060405180830381600087803b158015610aff57600080fd5b505af1158015610b13573d6000803e3d6000fd5b50610b389250505073ffffffffffffffffffffffffffffffffffffffff831682610d6f565b5050565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015282917f00000000000000000000000000000000000000000000000000000000000000009091169063dd62ed3e90604401602060405180830381865afa158015610bd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf69190611357565b1015610b38576040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303816000875af1158015610cb0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103189190611318565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052610d69908590610ec9565b50505050565b80471015610dd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610107565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114610e33576040519150601f19603f3d011682016040523d82523d6000602084013e610e38565b606091505b5050905080610318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610107565b6000610f2b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16610fd59092919063ffffffff16565b8051909150156103185780806020019051810190610f499190611318565b610318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610107565b6060610fe48484600085610fee565b90505b9392505050565b606082471015611080576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610107565b843b6110e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610107565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516111119190611370565b60006040518083038185875af1925050503d806000811461114e576040519150601f19603f3d011682016040523d82523d6000602084013e611153565b606091505b509150915061116382828661116e565b979650505050505050565b6060831561117d575081610fe7565b82511561118d5782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b60005b838110156111dc5781810151838201526020016111c4565b83811115610d695750506000910152565b602081526000825180602084015261120c8160408501602087016111c1565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461126057600080fd5b50565b6000806040838503121561127657600080fd5b82356112818161123e565b946020939093013593505050565b6000806000606084860312156112a457600080fd5b83356112af8161123e565b925060208401356112bf8161123e565b9150604084013561ffff811681146112d657600080fd5b809150509250925092565b6000806000606084860312156112f657600080fd5b83356113018161123e565b92506020840135915060408401356112d68161123e565b60006020828403121561132a57600080fd5b81518015158114610fe757600080fd5b60006020828403121561134c57600080fd5b8151610fe78161123e565b60006020828403121561136957600080fd5b5051919050565b600082516113828184602087016111c1565b919091019291505056fea264697066735822122017fd7fc76e4a1efcf24b78a3417fad7ab9576f0a23aa756ddb211c5e2227aa9564736f6c634300080a0033"; - -type WETHGatewayConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: WETHGatewayConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class WETHGateway__factory extends ContractFactory { - constructor(...args: WETHGatewayConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - addressProvider: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - addressProvider, - overrides || {} - ) as Promise; - } - override getDeployTransaction( - addressProvider: string, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(addressProvider, overrides || {}); - } - override attach(address: string): WETHGateway { - return super.attach(address) as WETHGateway; - } - override connect(signer: Signer): WETHGateway__factory { - return super.connect(signer) as WETHGateway__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): WETHGatewayInterface { - return new utils.Interface(_abi) as WETHGatewayInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): WETHGateway { - return new Contract(address, _abi, signerOrProvider) as WETHGateway; - } -} diff --git a/src/types/factories/contracts/core/index.ts b/src/types/factories/contracts/core/index.ts deleted file mode 100644 index 25ee56a9..00000000 --- a/src/types/factories/contracts/core/index.ts +++ /dev/null @@ -1,10 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { ACL__factory } from "./ACL__factory"; -export { ACLTrait__factory } from "./ACLTrait__factory"; -export { AccountFactory__factory } from "./AccountFactory__factory"; -export { AddressProvider__factory } from "./AddressProvider__factory"; -export { ContractsRegister__factory } from "./ContractsRegister__factory"; -export { DataCompressor__factory } from "./DataCompressor__factory"; -export { WETHGateway__factory } from "./WETHGateway__factory"; diff --git a/src/types/factories/contracts/credit/CreditAccount__factory.ts b/src/types/factories/contracts/credit/CreditAccount__factory.ts deleted file mode 100644 index 9953bfae..00000000 --- a/src/types/factories/contracts/credit/CreditAccount__factory.ts +++ /dev/null @@ -1,263 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - CreditAccount, - CreditAccountInterface, -} from "../../../contracts/credit/CreditAccount"; - -const _abi = [ - { - inputs: [], - name: "CallerNotCreditManagerException", - type: "error", - }, - { - inputs: [], - name: "CallerNotFactoryException", - type: "error", - }, - { - inputs: [], - name: "borrowedAmount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "token", - type: "address", - }, - { - internalType: "address", - name: "targetContract", - type: "address", - }, - ], - name: "cancelAllowance", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_creditManager", - type: "address", - }, - { - internalType: "uint256", - name: "_borrowedAmount", - type: "uint256", - }, - { - internalType: "uint256", - name: "_cumulativeIndexAtOpen", - type: "uint256", - }, - ], - name: "connectTo", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "creditManager", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "cumulativeIndexAtOpen", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "destination", - type: "address", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - ], - name: "execute", - outputs: [ - { - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "factory", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "token", - type: "address", - }, - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "safeTransfer", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "since", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_borrowedAmount", - type: "uint256", - }, - { - internalType: "uint256", - name: "_cumulativeIndexAtOpen", - type: "uint256", - }, - ], - name: "updateParameters", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x608060405234801561001057600080fd5b50610e58806100206000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c806354fd4d5011610081578063c45a01551161005b578063c45a0155146101a4578063c75b5a71146101ca578063d1660f99146101dd57600080fd5b806354fd4d501461014f5780638129fc1c14610157578063c12c21c01461015f57600080fd5b80631afbb7a4116100b25780631afbb7a41461011d5780631cff79cd146101265780633dc54b401461014657600080fd5b806316128211146100d957806317d11a15146100ee57806319a160391461010a575b600080fd5b6100ec6100e7366004610b42565b6101f0565b005b6100f760035481565b6040519081526020015b60405180910390f35b6100ec610118366004610b8d565b61024c565b6100f760025481565b610139610134366004610bef565b6102c9565b6040516101019190610d49565b6100f760045481565b6100f7600181565b6100ec610344565b60015461017f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610101565b60005461017f9062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b6100ec6101d8366004610d5c565b610494565b6100ec6101eb366004610d8f565b61053d565b60015473ffffffffffffffffffffffffffffffffffffffff163314610241576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600291909155600355565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1633146102a3576040517fb126b84800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102c573ffffffffffffffffffffffffffffffffffffffff83168260006105b4565b5050565b60015460609073ffffffffffffffffffffffffffffffffffffffff16331461031d576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033d73ffffffffffffffffffffffffffffffffffffffff8416836107b4565b9392505050565b600054610100900460ff1661035f5760005460ff1615610363565b303b155b6103f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600054610100900460ff1615801561043357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000166101011790555b600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16336201000002179055801561049157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b50565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1633146104eb576040517fb126b84800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff949094169390931790925560025560035543600455565b60015473ffffffffffffffffffffffffffffffffffffffff16331461058e576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105af73ffffffffffffffffffffffffffffffffffffffff841683836107f6565b505050565b80158061065457506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015284169063dd62ed3e90604401602060405180830381865afa15801561062e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106529190610dcb565b155b6106e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e63650000000000000000000060648201526084016103eb565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526105af9084907f095ea7b300000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261084c565b606061033d83836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250610958565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526105af9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401610732565b60006108ae826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166109589092919063ffffffff16565b8051909150156105af57808060200190518101906108cc9190610de4565b6105af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016103eb565b6060610967848460008561096f565b949350505050565b606082471015610a01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016103eb565b843b610a69576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016103eb565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051610a929190610e06565b60006040518083038185875af1925050503d8060008114610acf576040519150601f19603f3d011682016040523d82523d6000602084013e610ad4565b606091505b5091509150610ae4828286610aef565b979650505050505050565b60608315610afe57508161033d565b825115610b0e5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103eb9190610d49565b60008060408385031215610b5557600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff81168114610b8857600080fd5b919050565b60008060408385031215610ba057600080fd5b610ba983610b64565b9150610bb760208401610b64565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215610c0257600080fd5b610c0b83610b64565b9150602083013567ffffffffffffffff80821115610c2857600080fd5b818501915085601f830112610c3c57600080fd5b813581811115610c4e57610c4e610bc0565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715610c9457610c94610bc0565b81604052828152886020848701011115610cad57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b83811015610cea578181015183820152602001610cd2565b83811115610cf9576000848401525b50505050565b60008151808452610d17816020860160208601610ccf565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061033d6020830184610cff565b600080600060608486031215610d7157600080fd5b610d7a84610b64565b95602085013595506040909401359392505050565b600080600060608486031215610da457600080fd5b610dad84610b64565b9250610dbb60208501610b64565b9150604084013590509250925092565b600060208284031215610ddd57600080fd5b5051919050565b600060208284031215610df657600080fd5b8151801515811461033d57600080fd5b60008251610e18818460208701610ccf565b919091019291505056fea2646970667358221220448e7046078cd668c09328d857e534e2aab6cdc0e691d3d4f2c8baae8e084b1364736f6c634300080a0033"; - -type CreditAccountConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: CreditAccountConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class CreditAccount__factory extends ContractFactory { - constructor(...args: CreditAccountConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): CreditAccount { - return super.attach(address) as CreditAccount; - } - override connect(signer: Signer): CreditAccount__factory { - return super.connect(signer) as CreditAccount__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): CreditAccountInterface { - return new utils.Interface(_abi) as CreditAccountInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): CreditAccount { - return new Contract(address, _abi, signerOrProvider) as CreditAccount; - } -} diff --git a/src/types/factories/contracts/credit/CreditConfigurator__factory.ts b/src/types/factories/contracts/credit/CreditConfigurator__factory.ts deleted file mode 100644 index 493c8995..00000000 --- a/src/types/factories/contracts/credit/CreditConfigurator__factory.ts +++ /dev/null @@ -1,931 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - CreditConfigurator, - CreditConfiguratorInterface, - CreditManagerOptsStruct, -} from "../../../contracts/credit/CreditConfigurator"; - -const _abi = [ - { - inputs: [ - { - internalType: "contract CreditManager", - name: "_creditManager", - type: "address", - }, - { - internalType: "contract CreditFacade", - name: "_creditFacade", - type: "address", - }, - { - components: [ - { - internalType: "uint128", - name: "minBorrowedAmount", - type: "uint128", - }, - { - internalType: "uint128", - name: "maxBorrowedAmount", - type: "uint128", - }, - { - components: [ - { - internalType: "address", - name: "token", - type: "address", - }, - { - internalType: "uint16", - name: "liquidationThreshold", - type: "uint16", - }, - ], - internalType: "struct CollateralToken[]", - name: "collateralTokens", - type: "tuple[]", - }, - { - internalType: "address", - name: "degenNFT", - type: "address", - }, - { - internalType: "bool", - name: "expirable", - type: "bool", - }, - ], - internalType: "struct CreditManagerOpts", - name: "opts", - type: "tuple", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "AdapterUsedTwiceException", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "AddressIsNotContractException", - type: "error", - }, - { - inputs: [], - name: "CallerNotConfiguratorException", - type: "error", - }, - { - inputs: [], - name: "CallerNotPausableAdminException", - type: "error", - }, - { - inputs: [], - name: "CallerNotUnPausableAdminException", - type: "error", - }, - { - inputs: [], - name: "ChiThresholdMoreOneException", - type: "error", - }, - { - inputs: [], - name: "ContractNotInAllowedList", - type: "error", - }, - { - inputs: [], - name: "CreditManagerOrFacadeUsedAsAllowContractsException", - type: "error", - }, - { - inputs: [], - name: "DegenNFTnotSetException", - type: "error", - }, - { - inputs: [], - name: "FastCheckNotCoverCollateralDropException", - type: "error", - }, - { - inputs: [], - name: "IncompatibleContractException", - type: "error", - }, - { - inputs: [], - name: "IncorrectExpirationDateException", - type: "error", - }, - { - inputs: [], - name: "IncorrectFeesException", - type: "error", - }, - { - inputs: [], - name: "IncorrectLimitsException", - type: "error", - }, - { - inputs: [], - name: "IncorrectLiquidationThresholdException", - type: "error", - }, - { - inputs: [], - name: "IncorrectPriceFeedException", - type: "error", - }, - { - inputs: [], - name: "IncorrectTokenContractException", - type: "error", - }, - { - inputs: [], - name: "SetLTForUnderlyingException", - type: "error", - }, - { - inputs: [], - name: "TokenNotAllowedException", - type: "error", - }, - { - inputs: [], - name: "ZeroAddressException", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "", - type: "address", - }, - ], - name: "AddedToUpgradeable", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "protocol", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "adapter", - type: "address", - }, - ], - name: "ContractAllowed", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "protocol", - type: "address", - }, - ], - name: "ContractForbidden", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newCreditConfigurator", - type: "address", - }, - ], - name: "CreditConfiguratorUpgraded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newCreditFacade", - type: "address", - }, - ], - name: "CreditFacadeUpgraded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bool", - name: "", - type: "bool", - }, - ], - name: "DegenModeUpdated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint40", - name: "", - type: "uint40", - }, - ], - name: "ExpirationDateUpdated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint16", - name: "feeInterest", - type: "uint16", - }, - { - indexed: false, - internalType: "uint16", - name: "feeLiquidation", - type: "uint16", - }, - { - indexed: false, - internalType: "uint16", - name: "liquidationPremium", - type: "uint16", - }, - { - indexed: false, - internalType: "uint16", - name: "feeLiquidationExpired", - type: "uint16", - }, - { - indexed: false, - internalType: "uint16", - name: "liquidationPremiumExpired", - type: "uint16", - }, - ], - name: "FeesUpdated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bool", - name: "", - type: "bool", - }, - ], - name: "IncreaseDebtModeUpdated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint128", - name: "", - type: "uint128", - }, - ], - name: "LimitPerBlockUpdated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "minBorrowedAmount", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "maxBorrowedAmount", - type: "uint256", - }, - ], - name: "LimitsUpdated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint8", - name: "", - type: "uint8", - }, - ], - name: "MaxEnabledTokensUpdated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "Paused", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newPriceOracle", - type: "address", - }, - ], - name: "PriceOracleUpgraded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "", - type: "address", - }, - ], - name: "RemovedFromUpgradeable", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "token", - type: "address", - }, - ], - name: "TokenAllowed", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "token", - type: "address", - }, - ], - name: "TokenForbidden", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "token", - type: "address", - }, - { - indexed: false, - internalType: "uint16", - name: "liquidityThreshold", - type: "uint16", - }, - ], - name: "TokenLiquidationThresholdUpdated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "Unpaused", - type: "event", - }, - { - inputs: [], - name: "_acl", - outputs: [ - { - internalType: "contract ACL", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "token", - type: "address", - }, - { - internalType: "uint16", - name: "liquidationThreshold", - type: "uint16", - }, - ], - name: "addCollateralToken", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "addr", - type: "address", - }, - ], - name: "addContractToUpgradeable", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "addressProvider", - outputs: [ - { - internalType: "contract IAddressProvider", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "targetContract", - type: "address", - }, - { - internalType: "address", - name: "adapter", - type: "address", - }, - ], - name: "allowContract", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "token", - type: "address", - }, - ], - name: "allowToken", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "i", - type: "uint256", - }, - ], - name: "allowedContracts", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "allowedContractsCount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditFacade", - outputs: [ - { - internalType: "contract CreditFacade", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditManager", - outputs: [ - { - internalType: "contract CreditManager", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "targetContract", - type: "address", - }, - ], - name: "forbidContract", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "token", - type: "address", - }, - ], - name: "forbidToken", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "pause", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "paused", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "addr", - type: "address", - }, - ], - name: "removeContractFromUpgradeable", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint40", - name: "newExpirationDate", - type: "uint40", - }, - ], - name: "setExpirationDate", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint16", - name: "_feeInterest", - type: "uint16", - }, - { - internalType: "uint16", - name: "_feeLiquidation", - type: "uint16", - }, - { - internalType: "uint16", - name: "_liquidationPremium", - type: "uint16", - }, - { - internalType: "uint16", - name: "_feeLiquidationExpired", - type: "uint16", - }, - { - internalType: "uint16", - name: "_liquidationPremiumExpired", - type: "uint16", - }, - ], - name: "setFees", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bool", - name: "_mode", - type: "bool", - }, - ], - name: "setIncreaseDebtForbidden", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint128", - name: "newLimit", - type: "uint128", - }, - ], - name: "setLimitPerBlock", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint128", - name: "_minBorrowedAmount", - type: "uint128", - }, - { - internalType: "uint128", - name: "_maxBorrowedAmount", - type: "uint128", - }, - ], - name: "setLimits", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "token", - type: "address", - }, - { - internalType: "uint16", - name: "liquidationThreshold", - type: "uint16", - }, - ], - name: "setLiquidationThreshold", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint8", - name: "maxEnabledTokens", - type: "uint8", - }, - ], - name: "setMaxEnabledTokens", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "underlying", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "unpause", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_creditConfigurator", - type: "address", - }, - ], - name: "upgradeCreditConfigurator", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_creditFacade", - type: "address", - }, - { - internalType: "bool", - name: "migrateParams", - type: "bool", - }, - ], - name: "upgradeCreditFacade", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "upgradePriceOracle", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x60a06040523480156200001157600080fd5b5060405162005f3d38038062005f3d8339810160408190526200003491620012eb565b826001600160a01b031663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000073573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200009991906200147f565b6001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000d7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000fd91906200147f565b6000805460ff191690556001600160a01b0381166200012f57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200016e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200019491906200147f565b6001600160a01b03908116608052600180546001600160a01b031916918616918217905560408051636f307dc360e01b81529051919250636f307dc39160048083019260209291908290030181865afa158015620001f6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200021c91906200147f565b600260006101000a8154816001600160a01b0302191690836001600160a01b03160217905550826001600160a01b031663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000281573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a791906200147f565b6001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200030b91906200147f565b600080546001600160a01b039290921661010002610100600160a81b0319909216919091179055620003626103e860c86200034b6101f4612710620014bc565b60646200035c60c8612710620014bc565b620005e8565b60408101515160005b81811015620003ee576000836040015182815181106200038f576200038f620014e2565b6020026020010151600001519050620003ae81620007c260201b60201c565b620003e48185604001518481518110620003cc57620003cc620014e2565b60200260200101516020015162000a5e60201b60201c565b506001016200036b565b5060015460408051632630c12f60e01b815290516001600160a01b03909216916311ca4fc29186918491632630c12f9160048083019260209291908290030181865afa15801562000443573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200046991906200147f565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401600060405180830381600087803b158015620004b257600080fd5b505af1158015620004c7573d6000803e3d6000fd5b50506040516001600160a01b03861692507fa8b21f72cb83bce808df32dc2330217d744a1c22f3e9e44e4b11bbf049d37d9d9150600090a2600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000553573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200057991906200147f565b6001600160a01b03167f3f82447be465b0b5a4a9e54c74d5f6ae73f2e9537f2cc1590a340524703d096160405160405180910390a26020820151620005cb90620005c5906002620014f8565b62000bda565b81516020830151620005de919062000dc8565b5050505062001604565b6000620005f68585620014bc565b60015460405163172c48c760e01b81526000600482018190529293506001600160a01b039091169063172c48c7906024016040805180830381865afa15801562000644573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200066a91906200152a565b9150508061ffff168261ffff1614620006be57620006888262000f47565b60025460405161ffff841681526001600160a01b039091169060008051602062005f1d8339815191529060200160405180910390a25b60015460405163944ac59f60e01b815261ffff808a166004830152808916602483015280881660448301528087166064830152851660848201526001600160a01b039091169063944ac59f9060a401600060405180830381600087803b1580156200072857600080fd5b505af11580156200073d573d6000803e3d6000fd5b505050507f2214a403d5f8d049e52eacca974c6dea01a471e41d6a18903bfaf7dbc709741f878787612710620007749190620014bc565b876200078388612710620014bc565b6040805161ffff96871681529486166020860152928516848401529084166060840152909216608082015290519081900360a00190a150505050505050565b6001600160a01b038116620007ea57604051635919af9760e11b815260040160405180910390fd5b62000809816001600160a01b03166200116f60201b620023381760201c565b620008365760405163df4c572d60e01b81526001600160a01b038216600482015260240160405180910390fd5b6040516370a0823160e01b81523060048201526001600160a01b038216906370a0823190602401602060405180830381865afa92505050801562000899575060408051601f3d908101601f19168201909252620008969181019062001564565b60015b620008b75760405163528ca31d60e01b815260040160405180910390fd5b50600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200090c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200093291906200147f565b604051630f9a650360e41b8152670de0b6b3a764000060048201526001600160a01b038381166024830152919091169063f9a6503090604401602060405180830381865afa925050508015620009a7575060408051601f3d908101601f19168201909252620009a49181019062001564565b60015b620009c5576040516367a7cd4360e01b815260040160405180910390fd5b5060015460405163d48bfca760e01b81526001600160a01b0383811660048301529091169063d48bfca790602401600060405180830381600087803b15801562000a0e57600080fd5b505af115801562000a23573d6000803e3d6000fd5b50506040516001600160a01b03841692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a250565b6002546001600160a01b038381169116141562000a8e57604051633b899cf960e01b815260040160405180910390fd5b60015460405163172c48c760e01b8152600060048201819052916001600160a01b03169063172c48c7906024016040805180830381865afa15801562000ad8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000afe91906200152a565b91505061ffff8216158062000b1a57508061ffff168261ffff16115b1562000b39576040516333c6608d60e01b815260040160405180910390fd5b600154604051635385e2a160e11b81526001600160a01b03858116600483015261ffff851660248301529091169063a70bc54290604401600060405180830381600087803b15801562000b8b57600080fd5b505af115801562000ba0573d6000803e3d6000fd5b505060405161ffff851681526001600160a01b038616925060008051602062005f1d833981519152915060200160405180910390a2505050565b600062000be662001175565b6001600160a01b031663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801562000c24573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c4a91906200157e565b50509050600062000c606200117560201b60201c565b6001600160a01b031663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa15801562000c9d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000cc39190620015d5565b915050806001600160801b0316836001600160801b0316101562000cfa576040516309aadd6f60e41b815260040160405180910390fd5b826001600160801b0316826001600160801b03161462000dc35762000d1e62001175565b604051632715681560e21b81526001600160801b03851660048201526001600160a01b039190911690639c55a05490602401600060405180830381600087803b15801562000d6b57600080fd5b505af115801562000d80573d6000803e3d6000fd5b50506040516001600160801b03861681527fa030eec20ae970821387224ec3bb15b4bd22b89bfb86dc4d2b3827aa3d99e48d925060200190505b60405180910390a15b505050565b600062000dd462001175565b6001600160a01b031663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801562000e12573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e3891906200157e565b50509050816001600160801b0316836001600160801b0316118062000e6e5750806001600160801b0316826001600160801b0316115b1562000e8d576040516309aadd6f60e41b815260040160405180910390fd5b62000e9762001175565b60405163300eb37b60e11b81526001600160801b038086166004830152841660248201526001600160a01b03919091169063601d66f690604401600060405180830381600087803b15801562000eec57600080fd5b505af115801562000f01573d6000803e3d6000fd5b5050604080516001600160801b038088168252861660208201527f4d4981437d0211f9e6843eb024d9ada1fa3a99514d4343d4aece106dd11524bb935001905062000dba565b600154600254604051635385e2a160e11b81526001600160a01b03918216600482015261ffff8416602482015291169063a70bc54290604401600060405180830381600087803b15801562000f9b57600080fd5b505af115801562000fb0573d6000803e3d6000fd5b505050506000600160009054906101000a90046001600160a01b03166001600160a01b031663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200100a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001030919062001564565b905060015b8181101562000dc35760015460405163172c48c760e01b81526004810183905260009182916001600160a01b039091169063172c48c7906024016040805180830381865afa1580156200108c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010b291906200152a565b915091508461ffff168161ffff1611156200116457600154604051635385e2a160e11b81526001600160a01b03848116600483015261ffff881660248301529091169063a70bc54290604401600060405180830381600087803b1580156200111957600080fd5b505af11580156200112e573d6000803e3d6000fd5b505060405161ffff881681526001600160a01b038516925060008051602062005f1d833981519152915060200160405180910390a25b505060010162001035565b3b151590565b60015460408051632f7a188160e01b815290516000926001600160a01b031691632f7a18819160048083019260209291908290030181865afa158015620011c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011e691906200147f565b905090565b6001600160a01b03811681146200120157600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b03811182821017156200123f576200123f62001204565b60405290565b604080519081016001600160401b03811182821017156200123f576200123f62001204565b604051601f8201601f191681016001600160401b038111828210171562001295576200129562001204565b604052919050565b80516001600160801b0381168114620012b557600080fd5b919050565b8051620012b581620011eb565b805161ffff81168114620012b557600080fd5b80518015158114620012b557600080fd5b6000806000606084860312156200130157600080fd5b83516200130e81620011eb565b809350506020808501516200132381620011eb565b604086810151919450906001600160401b03808211156200134357600080fd5b9087019060a0828a0312156200135857600080fd5b620013626200121a565b6200136d836200129d565b81526200137c8584016200129d565b8582015283830151828111156200139257600080fd5b8301601f81018b13620013a457600080fd5b805183811115620013b957620013b962001204565b620013c9878260051b016200126a565b818152878101945060069190911b82018701908c821115620013ea57600080fd5b918701915b81831015620014435786838e031215620014095760008081fd5b6200141362001245565b83516200142081620011eb565b81526200142f848a01620012c7565b818a015285529387019391860191620013ef565b838701525062001458905060608401620012ba565b60608201526200146b60808401620012da565b608082015280955050505050509250925092565b6000602082840312156200149257600080fd5b81516200149f81620011eb565b9392505050565b634e487b7160e01b600052601160045260246000fd5b600061ffff83811690831681811015620014da57620014da620014a6565b039392505050565b634e487b7160e01b600052603260045260246000fd5b60006001600160801b0382811684821681151582840482111615620015215762001521620014a6565b02949350505050565b600080604083850312156200153e57600080fd5b82516200154b81620011eb565b91506200155b60208401620012c7565b90509250929050565b6000602082840312156200157757600080fd5b5051919050565b6000806000606084860312156200159457600080fd5b6200159f846200129d565b9250620015af60208501620012da565b9150604084015164ffffffffff81168114620015ca57600080fd5b809150509250925092565b60008060408385031215620015e957600080fd5b620015f4836200129d565b91506200155b602084016200129d565b608051614878620016a56000396000818161033601528181610446015281816107c5015281816108c0015281816109ae01528181610b8301528181610f0a015281816113e1015281816114cf015281816115bb015281816116ab015281816117990152818161187d01528181611ad901528181611bc601528181611cb301528181611da0015281816120090152818161218c015261227901526148786000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80638456cb59116100f9578063dc2b21c111610097578063f0527ac611610071578063f0527ac6146103d7578063f206d32a146103df578063fb1bd8c4146103f2578063ffd9b9071461040557600080fd5b8063dc2b21c11461039e578063e6492d7b146103b1578063eb9606df146103c457600080fd5b8063a50cf2c8116100d3578063a50cf2c814610331578063a70bc54214610358578063b53472ef1461036b578063c12c21c01461037e57600080fd5b80638456cb59146103035780639c55a0541461030b5780639f1c50691461031e57600080fd5b806350e036ff1161016657806354fd4d501161014057806354fd4d50146102b25780635c975abb146102ba5780636f307dc3146102d05780637bccacee146102f057600080fd5b806350e036ff1461027657806352438e541461028c578063526a41e81461029f57600080fd5b80633e7c88d6116101a25780633e7c88d6146102355780633f4ba83a14610248578063456e0742146102505780635094cb4f1461026357600080fd5b806324147708146101c95780632954018c146101de5780632f7a18811461022d575b600080fd5b6101dc6101d7366004614307565b610418565b005b60005461020390610100900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6102036106fe565b6101dc610243366004614334565b610797565b6101dc610892565b6101dc61025e366004614307565b610980565b61020361027136600461436d565b610b36565b61027e610b49565b604051908152602001610224565b6101dc61029a366004614307565b610b55565b6101dc6102ad366004614394565b610edc565b61027e600281565b60005460ff166040519015158152602001610224565b6002546102039073ffffffffffffffffffffffffffffffffffffffff1681565b6101dc6102fe3660046143c2565b6113b3565b6101dc6114a1565b6101dc61031936600461440e565b61158d565b6101dc61032c36600461442b565b61167d565b6102037f000000000000000000000000000000000000000000000000000000000000000081565b6101dc610366366004614334565b61176b565b6101dc610379366004614307565b61184f565b6001546102039073ffffffffffffffffffffffffffffffffffffffff1681565b6101dc6103ac366004614459565b611aab565b6101dc6103bf366004614307565b611b98565b6101dc6103d236600461448f565b611c85565b6101dc611d72565b6101dc6103ed3660046144ac565b611fdb565b6101dc610400366004614307565b61215e565b6101dc61041336600461451d565b61224b565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156104a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c6919061453a565b6104fc576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006105078261233e565b90506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015610578573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059c9190614557565b90508181166106f9576001546040517fa366f496000000000000000000000000000000000000000000000000000000008152918317600483018190529173ffffffffffffffffffffffffffffffffffffffff9091169063a366f49690602401600060405180830381600087803b15801561061557600080fd5b505af1158015610629573d6000803e3d6000fd5b505050506106356106fe565b6040517fffd9b9070000000000000000000000000000000000000000000000000000000081526001600482015273ffffffffffffffffffffffffffffffffffffffff919091169063ffd9b90790602401600060405180830381600087803b15801561069f57600080fd5b505af11580156106b3573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692507ff17b849746e74d7186170c9553d4bbf60b4f8bb1ed81fe50c099b934fb078f059150600090a25b505050565b600154604080517f2f7a1881000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691632f7a18819160048083019260209291908290030181865afa15801561076e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610792919061457b565b905090565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610821573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610845919061453a565b61087b576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108848261241e565b61088e82826127f8565b5050565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa15801561091c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610940919061453a565b610976576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61097e612a15565b565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610a0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2e919061453a565b610a64576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a6d81612af6565b6001546040517f9f5f86ae00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015290911690639f5f86ae90602401600060405180830381600087803b158015610ada57600080fd5b505af1158015610aee573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507f5a0b7d0f9c24b39256e112a0584b4c5ce38d8f1dee2e7c56f15b852604cdc8869150600090a250565b6000610b43600383612cb8565b92915050565b60006107926003612ccb565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610bdf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c03919061453a565b610c39576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610c86576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063fdd5764590602401602060405180830381865afa158015610cf7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1b919061457b565b905073ffffffffffffffffffffffffffffffffffffffff8116610d6a576040517f1170cc2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f6e98e5e400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526000602483015290911690636e98e5e490604401600060405180830381600087803b158015610dde57600080fd5b505af1158015610df2573d6000803e3d6000fd5b50506001546040517f6e98e5e40000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff86811660248301529091169250636e98e5e49150604401600060405180830381600087803b158015610e6a57600080fd5b505af1158015610e7e573d6000803e3d6000fd5b50505050610e96826003612cd590919063ffffffff16565b5060405173ffffffffffffffffffffffffffffffffffffffff8316907fab9f405bf0c19b97f65a7031634db41569cd2f0e0376a610a1e977f9ab22b58f90600090a25050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610f66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8a919061453a565b610fc0576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fc982612af6565b6000806000610fd66106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015611020573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110449190614598565b9250925092506000806110556106fe565b73ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa15801561109e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c291906145e5565b9150915060006110d06106fe565b73ffffffffffffffffffffffffffffffffffffffff16639be0536a6040518163ffffffff1660e01b8152600401600060405180830381865afa15801561111a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526111609190810190614643565b9050600061116c6106fe565b73ffffffffffffffffffffffffffffffffffffffff1663b1836d326040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111da919061453a565b600154604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905192935073ffffffffffffffffffffffffffffffffffffffff909116916311ca4fc2918c918491632630c12f9160048083019260209291908290030181865afa158015611256573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061127a919061457b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156112e757600080fd5b505af11580156112fb573d6000803e3d6000fd5b5050505087156113675761130e87612cf7565b6113188484612f5d565b61132186613152565b60005b82518110156113575761134f83828151811061134257611342614726565b60200260200101516132a3565b600101611324565b50801561136757611367856133c9565b60405173ffffffffffffffffffffffffffffffffffffffff8a16907fa8b21f72cb83bce808df32dc2330217d744a1c22f3e9e44e4b11bbf049d37d9d90600090a2505050505050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561143d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611461919061453a565b611497576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61088e828261357b565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561152b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061154f919061453a565b611585576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61097e6139c3565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611617573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163b919061453a565b611671576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81612cf7565b50565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611707573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172b919061453a565b611761576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61088e8282612f5d565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156117f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611819919061453a565b610884576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156118d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fd919061453a565b611933576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061193e8261233e565b90506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d39190614557565b9050818116156106f9576001546040517fa366f496000000000000000000000000000000000000000000000000000000008152918318600483018190529173ffffffffffffffffffffffffffffffffffffffff9091169063a366f49690602401600060405180830381600087803b158015611a4d57600080fd5b505af1158015611a61573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a2505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611b35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b59919061453a565b611b8f576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81613a83565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611c22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c46919061453a565b611c7c576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81613b3d565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611d0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d33919061453a565b611d69576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a816133c9565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611dfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e20919061453a565b611e56576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ec4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee8919061457b565b60015490915073ffffffffffffffffffffffffffffffffffffffff166311ca4fc2611f116106fe565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff91821660048201529084166024820152604401600060405180830381600087803b158015611f7f57600080fd5b505af1158015611f93573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507f3f82447be465b0b5a4a9e54c74d5f6ae73f2e9537f2cc1590a340524703d09619150600090a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015612065573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612089919061453a565b6120bf576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61271061ffff86161015806120e357506127106120dc8585614784565b61ffff1610155b806120fd57506127106120f68383614784565b61ffff1610155b15612134576040517f0b361d6900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6121578585612145866127106147aa565b85612152866127106147aa565b613c5c565b5050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156121e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061220c919061453a565b612242576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a816132a3565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156122d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122f9919061453a565b61232f576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81613152565b3b151590565b6001546040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063f67c5bd090602401602060405180830381865afa1580156123af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123d39190614557565b90508015806123e25750806001145b15612419576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b73ffffffffffffffffffffffffffffffffffffffff811661246b576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163b6124d6576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024015b60405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8216906370a0823190602401602060405180830381865afa92505050801561257a575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261257791810190614557565b60015b6125b0576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561261e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612642919061457b565b6040517ff9a65030000000000000000000000000000000000000000000000000000000008152670de0b6b3a7640000600482015273ffffffffffffffffffffffffffffffffffffffff8381166024830152919091169063f9a6503090604401602060405180830381865afa9250505080156126f8575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526126f591810190614557565b60015b61272e576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506001546040517fd48bfca700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301529091169063d48bfca790602401600060405180830381600087803b15801561279c57600080fd5b505af11580156127b0573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a250565b60025473ffffffffffffffffffffffffffffffffffffffff8381169116141561284d576040517f3b899cf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f172c48c70000000000000000000000000000000000000000000000000000000081526000600482018190529173ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa1580156128bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128e091906147cd565b91505061ffff821615806128fb57508061ffff168261ffff16115b15612932576040517f33c6608d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015261ffff851660248301529091169063a70bc54290604401600060405180830381600087803b1580156129a957600080fd5b505af11580156129bd573d6000803e3d6000fd5b505060405161ffff8516815273ffffffffffffffffffffffffffffffffffffffff861692507f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650915060200160405180910390a2505050565b60005460ff16612a81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016124cd565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b73ffffffffffffffffffffffffffffffffffffffff8116612b43576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163b612ba9576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024016124cd565b8073ffffffffffffffffffffffffffffffffffffffff1663c12c21c06040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612c2e575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252612c2b9181019061457b565b60015b612c64576040517fe9eddd1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60015473ffffffffffffffffffffffffffffffffffffffff82811691161461088e576040517fe9eddd1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612cc48383613e92565b9392505050565b6000610b43825490565b6000612cc48373ffffffffffffffffffffffffffffffffffffffff8416613ebc565b6000612d016106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015612d4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d6f9190614598565b505090506000612d7d6106fe565b73ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa158015612dc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dea91906145e5565b915050806fffffffffffffffffffffffffffffffff16836fffffffffffffffffffffffffffffffff161015612e4b576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826fffffffffffffffffffffffffffffffff16826fffffffffffffffffffffffffffffffff16146106f957612e7e6106fe565b6040517f9c55a0540000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff8516600482015273ffffffffffffffffffffffffffffffffffffffff9190911690639c55a05490602401600060405180830381600087803b158015612ef957600080fd5b505af1158015612f0d573d6000803e3d6000fd5b50506040516fffffffffffffffffffffffffffffffff861681527fa030eec20ae970821387224ec3bb15b4bd22b89bfb86dc4d2b3827aa3d99e48d925060200190505b60405180910390a1505050565b6000612f676106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015612fb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fd59190614598565b50509050816fffffffffffffffffffffffffffffffff16836fffffffffffffffffffffffffffffffff16118061302e5750806fffffffffffffffffffffffffffffffff16826fffffffffffffffffffffffffffffffff16115b15613065576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61306d6106fe565b6040517f601d66f60000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff80861660048301528416602482015273ffffffffffffffffffffffffffffffffffffffff919091169063601d66f690604401600060405180830381600087803b1580156130f057600080fd5b505af1158015613104573d6000803e3d6000fd5b5050604080516fffffffffffffffffffffffffffffffff8088168252861660208201527f4d4981437d0211f9e6843eb024d9ada1fa3a99514d4343d4aece106dd11524bb9350019050612f50565b600061315c6106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa1580156131a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131ca9190614598565b509150508015158215151461088e576131e16106fe565b6040517fffd9b907000000000000000000000000000000000000000000000000000000008152831515600482015273ffffffffffffffffffffffffffffffffffffffff919091169063ffd9b90790602401600060405180830381600087803b15801561324c57600080fd5b505af1158015613260573d6000803e3d6000fd5b505050507ff97ba903470ff3262b4a68a938fe81def401bac1bd742169d2e8d5c4ed2185d382604051613297911515815260200190565b60405180910390a15050565b73ffffffffffffffffffffffffffffffffffffffff81166132f0576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6132f86106fe565b6040517fb55bb84b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152919091169063b55bb84b90602401600060405180830381600087803b15801561336357600080fd5b505af1158015613377573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841681527fdac9a7995cbc0c0f01d78970fb6fd0b52fe0fe869eb6635e65cc1b5682b8325c925060200190505b60405180910390a150565b60006133d36106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801561341d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134419190614598565b925050508064ffffffffff168264ffffffffff161461088e578164ffffffffff168164ffffffffff16118061347c57508164ffffffffff1642115b156134b3576040517fe4eaca7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134bb6106fe565b6040517feb9606df00000000000000000000000000000000000000000000000000000000815264ffffffffff8416600482015273ffffffffffffffffffffffffffffffffffffffff919091169063eb9606df90602401600060405180830381600087803b15801561352b57600080fd5b505af115801561353f573d6000803e3d6000fd5b505060405164ffffffffff851681527f0b3eb35ba750e7a7e4d26c9eee3d226f4e1f68c5568f4a3d051c94b241b02ac092506020019050613297565b73ffffffffffffffffffffffffffffffffffffffff82166135c8576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82163b61362e576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016124cd565b61363781612af6565b60015473ffffffffffffffffffffffffffffffffffffffff8381169116148061369257506136636106fe565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b806136b7575060015473ffffffffffffffffffffffffffffffffffffffff8281169116145b806136f457506136c56106fe565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b1561372b576040517f727de5c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517fff68754300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063ff68754390602401602060405180830381865afa15801561379c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137c0919061457b565b73ffffffffffffffffffffffffffffffffffffffff1614158061388c57506001546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063fdd5764590602401602060405180830381865afa15801561384f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613873919061457b565b73ffffffffffffffffffffffffffffffffffffffff1614155b156138c3576040517f21ff1e7100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f6e98e5e400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152848116602483015290911690636e98e5e490604401600060405180830381600087803b15801561393857600080fd5b505af115801561394c573d6000803e3d6000fd5b50505050613964826003613faf90919063ffffffff16565b508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4bcbefaef68b99503d502f5a6abe7bca2b183ab8ac55457013c77d084ebd130560405160405180910390a35050565b60005460ff1615613a30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016124cd565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612acc3390565b6001546040517fdc2b21c100000000000000000000000000000000000000000000000000000000815260ff8316600482015273ffffffffffffffffffffffffffffffffffffffff9091169063dc2b21c190602401600060405180830381600087803b158015613af157600080fd5b505af1158015613b05573d6000803e3d6000fd5b505060405160ff841681527f73caacd705657a7d283e48ecf288b73bc517e3aea1bbc9da2fd54a979e8aa950925060200190506133be565b73ffffffffffffffffffffffffffffffffffffffff8116613b8a576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613b926106fe565b6040517fdcf6548200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152919091169063dcf6548290602401600060405180830381600087803b158015613bfd57600080fd5b505af1158015613c11573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841681527f32e53e2e527af8518ae889e5f7e674bc83f7cf68e4cc059aceeaa0e64208b85b925060200190506133be565b6000613c6885856147aa565b6001546040517f172c48c700000000000000000000000000000000000000000000000000000000815260006004820181905292935073ffffffffffffffffffffffffffffffffffffffff9091169063172c48c7906024016040805180830381865afa158015613cdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cff91906147cd565b9150508061ffff168261ffff1614613d6e57613d1a82613fd1565b60025460405161ffff8416815273ffffffffffffffffffffffffffffffffffffffff909116907f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac6509060200160405180910390a25b6001546040517f944ac59f00000000000000000000000000000000000000000000000000000000815261ffff808a1660048301528089166024830152808816604483015280871660648301528516608482015273ffffffffffffffffffffffffffffffffffffffff9091169063944ac59f9060a401600060405180830381600087803b158015613dfd57600080fd5b505af1158015613e11573d6000803e3d6000fd5b505050507f2214a403d5f8d049e52eacca974c6dea01a471e41d6a18903bfaf7dbc709741f878787612710613e4691906147aa565b87613e53886127106147aa565b6040805161ffff96871681529486166020860152928516848401529084166060840152909216608082015290519081900360a00190a150505050505050565b6000826000018281548110613ea957613ea9614726565b9060005260206000200154905092915050565b60008181526001830160205260408120548015613fa5576000613ee06001836147fc565b8554909150600090613ef4906001906147fc565b9050818114613f59576000866000018281548110613f1457613f14614726565b9060005260206000200154905080876000018481548110613f3757613f37614726565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080613f6a57613f6a614813565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610b43565b6000915050610b43565b6000612cc48373ffffffffffffffffffffffffffffffffffffffff8416614296565b6001546002546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015261ffff8416602482015291169063a70bc54290604401600060405180830381600087803b15801561404a57600080fd5b505af115801561405e573d6000803e3d6000fd5b505050506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156140d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140f59190614557565b905060015b818110156106f9576001546040517f172c48c700000000000000000000000000000000000000000000000000000000815260048101839052600091829173ffffffffffffffffffffffffffffffffffffffff9091169063172c48c7906024016040805180830381865afa158015614175573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061419991906147cd565b915091508461ffff168161ffff16111561428c576001546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015261ffff881660248301529091169063a70bc54290604401600060405180830381600087803b15801561422457600080fd5b505af1158015614238573d6000803e3d6000fd5b505060405161ffff8816815273ffffffffffffffffffffffffffffffffffffffff851692507f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650915060200160405180910390a25b50506001016140fa565b60008181526001830160205260408120546142dd57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610b43565b506000610b43565b73ffffffffffffffffffffffffffffffffffffffff8116811461167a57600080fd5b60006020828403121561431957600080fd5b8135612cc4816142e5565b61ffff8116811461167a57600080fd5b6000806040838503121561434757600080fd5b8235614352816142e5565b9150602083013561436281614324565b809150509250929050565b60006020828403121561437f57600080fd5b5035919050565b801515811461167a57600080fd5b600080604083850312156143a757600080fd5b82356143b2816142e5565b9150602083013561436281614386565b600080604083850312156143d557600080fd5b82356143e0816142e5565b91506020830135614362816142e5565b6fffffffffffffffffffffffffffffffff8116811461167a57600080fd5b60006020828403121561442057600080fd5b8135612cc4816143f0565b6000806040838503121561443e57600080fd5b8235614449816143f0565b91506020830135614362816143f0565b60006020828403121561446b57600080fd5b813560ff81168114612cc457600080fd5b64ffffffffff8116811461167a57600080fd5b6000602082840312156144a157600080fd5b8135612cc48161447c565b600080600080600060a086880312156144c457600080fd5b85356144cf81614324565b945060208601356144df81614324565b935060408601356144ef81614324565b925060608601356144ff81614324565b9150608086013561450f81614324565b809150509295509295909350565b60006020828403121561452f57600080fd5b8135612cc481614386565b60006020828403121561454c57600080fd5b8151612cc481614386565b60006020828403121561456957600080fd5b5051919050565b8051612419816142e5565b60006020828403121561458d57600080fd5b8151612cc4816142e5565b6000806000606084860312156145ad57600080fd5b83516145b8816143f0565b60208501519093506145c981614386565b60408501519092506145da8161447c565b809150509250925092565b600080604083850312156145f857600080fd5b8251614603816143f0565b6020840151909250614362816143f0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000602080838503121561465657600080fd5b825167ffffffffffffffff8082111561466e57600080fd5b818501915085601f83011261468257600080fd5b81518181111561469457614694614614565b8060051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f830116810181811085821117156146d7576146d7614614565b6040529182528482019250838101850191888311156146f557600080fd5b938501935b8285101561471a5761470b85614570565b845293850193928501926146fa565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061ffff8083168185168083038211156147a1576147a1614755565b01949350505050565b600061ffff838116908316818110156147c5576147c5614755565b039392505050565b600080604083850312156147e057600080fd5b82516147eb816142e5565b602084015190925061436281614324565b60008282101561480e5761480e614755565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea264697066735822122046c364b67d38a3dd85b57e027716324d90dd1df102f265f0a0e2697babdb3f3b64736f6c634300080a003394525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650"; - -type CreditConfiguratorConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: CreditConfiguratorConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class CreditConfigurator__factory extends ContractFactory { - constructor(...args: CreditConfiguratorConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - _creditManager: string, - _creditFacade: string, - opts: CreditManagerOptsStruct, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - _creditManager, - _creditFacade, - opts, - overrides || {} - ) as Promise; - } - override getDeployTransaction( - _creditManager: string, - _creditFacade: string, - opts: CreditManagerOptsStruct, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction( - _creditManager, - _creditFacade, - opts, - overrides || {} - ); - } - override attach(address: string): CreditConfigurator { - return super.attach(address) as CreditConfigurator; - } - override connect(signer: Signer): CreditConfigurator__factory { - return super.connect(signer) as CreditConfigurator__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): CreditConfiguratorInterface { - return new utils.Interface(_abi) as CreditConfiguratorInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): CreditConfigurator { - return new Contract(address, _abi, signerOrProvider) as CreditConfigurator; - } -} diff --git a/src/types/factories/contracts/credit/CreditFacade__factory.ts b/src/types/factories/contracts/credit/CreditFacade__factory.ts deleted file mode 100644 index 6aa88661..00000000 --- a/src/types/factories/contracts/credit/CreditFacade__factory.ts +++ /dev/null @@ -1,1254 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - CreditFacade, - CreditFacadeInterface, -} from "../../../contracts/credit/CreditFacade"; - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "_creditManager", - type: "address", - }, - { - internalType: "address", - name: "_degenNFT", - type: "address", - }, - { - internalType: "bool", - name: "_expirable", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "AccountTransferNotAllowedException", - type: "error", - }, - { - inputs: [], - name: "AdaptersOrCreditFacadeOnlyException", - type: "error", - }, - { - inputs: [], - name: "AllowanceFailedExpcetion", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "BalanceLessThanMinimumDesired", - type: "error", - }, - { - inputs: [], - name: "BorrowAmountOutOfLimitsException", - type: "error", - }, - { - inputs: [], - name: "BorrowedBlockLimitException", - type: "error", - }, - { - inputs: [], - name: "CantLiquidateNonExpiredException", - type: "error", - }, - { - inputs: [], - name: "CantLiquidateWithSuchHealthFactorException", - type: "error", - }, - { - inputs: [], - name: "CantTransferLiquidatableAccountException", - type: "error", - }, - { - inputs: [], - name: "CreditConfiguratorOnlyException", - type: "error", - }, - { - inputs: [], - name: "CreditFacadeOnlyException", - type: "error", - }, - { - inputs: [], - name: "ForbiddenDuringClosureException", - type: "error", - }, - { - inputs: [], - name: "HasNoOpenedAccountException", - type: "error", - }, - { - inputs: [], - name: "IncorrectCallDataException", - type: "error", - }, - { - inputs: [], - name: "IncreaseAndDecreaseForbiddenInOneCallException", - type: "error", - }, - { - inputs: [], - name: "IncreaseDebtForbiddenException", - type: "error", - }, - { - inputs: [], - name: "NotAllowedInWhitelistedMode", - type: "error", - }, - { - inputs: [], - name: "NotAllowedWhenNotExpirableException", - type: "error", - }, - { - inputs: [], - name: "NotEnoughCollateralException", - type: "error", - }, - { - inputs: [], - name: "OpenAccountNotAllowedAfterExpiration", - type: "error", - }, - { - inputs: [], - name: "ReentrancyLockException", - type: "error", - }, - { - inputs: [], - name: "TargetContractNotAllowedExpcetion", - type: "error", - }, - { - inputs: [], - name: "TokenAlreadyAddedException", - type: "error", - }, - { - inputs: [], - name: "TokenNotAllowedException", - type: "error", - }, - { - inputs: [], - name: "TooMuchEnabledTokensException", - type: "error", - }, - { - inputs: [], - name: "TooMuchTokensException", - type: "error", - }, - { - inputs: [], - name: "UnknownMethodException", - type: "error", - }, - { - inputs: [], - name: "ZeroAddressException", - type: "error", - }, - { - inputs: [], - name: "ZeroAddressOrUserAlreadyHasAccountException", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "onBehalfOf", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "token", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "AddCollateral", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - ], - name: "CloseCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "DecreaseBorrowedAmount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "IncreaseBorrowedAmount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "liquidator", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "remainingFunds", - type: "uint256", - }, - ], - name: "LiquidateCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "liquidator", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "remainingFunds", - type: "uint256", - }, - ], - name: "LiquidateExpiredCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [], - name: "MultiCallFinished", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - ], - name: "MultiCallStarted", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "onBehalfOf", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "borrowAmount", - type: "uint256", - }, - { - indexed: false, - internalType: "uint16", - name: "referralCode", - type: "uint16", - }, - ], - name: "OpenCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "token", - type: "address", - }, - ], - name: "TokenDisabled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "token", - type: "address", - }, - ], - name: "TokenEnabled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "oldOwner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "TransferAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "bool", - name: "state", - type: "bool", - }, - ], - name: "TransferAccountAllowed", - type: "event", - }, - { - inputs: [ - { - internalType: "address", - name: "onBehalfOf", - type: "address", - }, - { - internalType: "address", - name: "token", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "addCollateral", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "addr", - type: "address", - }, - ], - name: "addToUpgradeable", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "targetContract", - type: "address", - }, - { - internalType: "address", - name: "token", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "approve", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "from", - type: "address", - }, - { - internalType: "bool", - name: "state", - type: "bool", - }, - ], - name: "approveAccountTransfer", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "creditAccount", - type: "address", - }, - ], - name: "calcCreditAccountHealthFactor", - outputs: [ - { - internalType: "uint256", - name: "hf", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "creditAccount", - type: "address", - }, - ], - name: "calcTotalValue", - outputs: [ - { - internalType: "uint256", - name: "total", - type: "uint256", - }, - { - internalType: "uint256", - name: "twv", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "skipTokenMask", - type: "uint256", - }, - { - internalType: "bool", - name: "convertWETH", - type: "bool", - }, - { - components: [ - { - internalType: "address", - name: "target", - type: "address", - }, - { - internalType: "bytes", - name: "callData", - type: "bytes", - }, - ], - internalType: "struct MultiCall[]", - name: "calls", - type: "tuple[]", - }, - ], - name: "closeCreditAccount", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [], - name: "creditManager", - outputs: [ - { - internalType: "contract ICreditManagerV2", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "decreaseDebt", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "degenNFT", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "token", - type: "address", - }, - ], - name: "enableToken", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "expirable", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "getTotalBorrowedInBlock", - outputs: [ - { - internalType: "uint64", - name: "blockLastUpdate", - type: "uint64", - }, - { - internalType: "uint128", - name: "borrowedInBlock", - type: "uint128", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "borrower", - type: "address", - }, - ], - name: "hasOpenedCreditAccount", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "increaseDebt", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "token", - type: "address", - }, - ], - name: "isTokenAllowed", - outputs: [ - { - internalType: "bool", - name: "allowed", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "addr", - type: "address", - }, - ], - name: "isUpgradeableContract", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "limits", - outputs: [ - { - internalType: "uint128", - name: "minBorrowedAmount", - type: "uint128", - }, - { - internalType: "uint128", - name: "maxBorrowedAmount", - type: "uint128", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "borrower", - type: "address", - }, - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "skipTokenMask", - type: "uint256", - }, - { - internalType: "bool", - name: "convertWETH", - type: "bool", - }, - { - components: [ - { - internalType: "address", - name: "target", - type: "address", - }, - { - internalType: "bytes", - name: "callData", - type: "bytes", - }, - ], - internalType: "struct MultiCall[]", - name: "calls", - type: "tuple[]", - }, - ], - name: "liquidateCreditAccount", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "borrower", - type: "address", - }, - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "skipTokenMask", - type: "uint256", - }, - { - internalType: "bool", - name: "convertWETH", - type: "bool", - }, - { - components: [ - { - internalType: "address", - name: "target", - type: "address", - }, - { - internalType: "bytes", - name: "callData", - type: "bytes", - }, - ], - internalType: "struct MultiCall[]", - name: "calls", - type: "tuple[]", - }, - ], - name: "liquidateExpiredCreditAccount", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - components: [ - { - internalType: "address", - name: "target", - type: "address", - }, - { - internalType: "bytes", - name: "callData", - type: "bytes", - }, - ], - internalType: "struct MultiCall[]", - name: "calls", - type: "tuple[]", - }, - ], - name: "multicall", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "address", - name: "onBehalfOf", - type: "address", - }, - { - internalType: "uint16", - name: "leverageFactor", - type: "uint16", - }, - { - internalType: "uint16", - name: "referralCode", - type: "uint16", - }, - ], - name: "openCreditAccount", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "borrowedAmount", - type: "uint256", - }, - { - internalType: "address", - name: "onBehalfOf", - type: "address", - }, - { - components: [ - { - internalType: "address", - name: "target", - type: "address", - }, - { - internalType: "bytes", - name: "callData", - type: "bytes", - }, - ], - internalType: "struct MultiCall[]", - name: "calls", - type: "tuple[]", - }, - { - internalType: "uint16", - name: "referralCode", - type: "uint16", - }, - ], - name: "openCreditAccountMulticall", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [], - name: "params", - outputs: [ - { - internalType: "uint128", - name: "maxBorrowedAmountPerBlock", - type: "uint128", - }, - { - internalType: "bool", - name: "isIncreaseDebtForbidden", - type: "bool", - }, - { - internalType: "uint40", - name: "expirationDate", - type: "uint40", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "addr", - type: "address", - }, - ], - name: "removeFromUpgradeable", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint128", - name: "_minBorrowedAmount", - type: "uint128", - }, - { - internalType: "uint128", - name: "_maxBorrowedAmount", - type: "uint128", - }, - ], - name: "setCreditAccountLimits", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint40", - name: "newExpirationDate", - type: "uint40", - }, - ], - name: "setExpirationDate", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bool", - name: "_mode", - type: "bool", - }, - ], - name: "setIncreaseDebtForbidden", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint128", - name: "newLimit", - type: "uint128", - }, - ], - name: "setLimitPerBlock", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "to", - type: "address", - }, - ], - name: "transferAccountOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "transfersAllowed", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "underlying", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "index", - type: "uint256", - }, - ], - name: "upgradeableContract", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "upgradeableContractsList", - outputs: [ - { - internalType: "address[]", - name: "", - type: "address[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "wethAddress", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "whitelisted", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x6101406040523480156200001257600080fd5b5060405162005e9738038062005e97833981016040819052620000359162000198565b60016000556001600160a01b0383166200006257604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038316608081905260408051636f307dc360e01b81529051636f307dc3916004808201926020929091908290030181865afa158015620000ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d39190620001ea565b6001600160a01b031660a0816001600160a01b031681525050826001600160a01b0316634f0e0ef36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200012b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001519190620001ea565b6001600160a01b0390811660c0529190911660e0819052151561010052151561012052506200020f565b80516001600160a01b03811681146200019357600080fd5b919050565b600080600060608486031215620001ae57600080fd5b620001b9846200017b565b9250620001c9602085016200017b565b915060408401518015158114620001df57600080fd5b809150509250925092565b600060208284031215620001fd57600080fd5b62000208826200017b565b9392505050565b60805160a05160c05160e0516101005161012051615a86620004116000396000818161061101528181612fb5015261481f01526000818161031701528181610dde015281816144f901526146e5015260008181610557015281816146a901526147a901526000818161034b0152818161387d015261392d01526000818161047301528181611bfe0152818161274f0152818161280d0152818161366a01526137dd015260008181610665015281816109d801528181610b0301528181610bd501528181610cdd01528181610e6501528181610fe30152818161114e0152818161120e0152818161132e015281816114510152818161162b01528181611708015281816117e0015281816119e501528181611b1201528181611d9501528181611ed5015281816120040152818161216801528181612290015281816123c601528181612568015281816126390152818161266f0152818161293d01528181612a2101528181612a8a01528181612bde01528181612d2601528181612e6801528181612ec2015281816130a10152818161311b015281816131b401528181613341015281816134c10152818161358a0152818161372f01528181613a1a01528181613b2e01528181613dbb015281816142200152818161432801528181614492015281816148e7015281816149e801528181614aae0152614d8f0152615a866000f3fe6080604052600436106102695760003560e01c8063860aefcf11610153578063c7de38a6116100cb578063dfd594651161007f578063eb9606df11610064578063eb9606df1461081e578063f9eaee0d1461083e578063ffd9b9071461085e57600080fd5b8063dfd59465146107de578063e1f21c67146107fe57600080fd5b8063cff0ab96116100b0578063cff0ab96146106ef578063d9ccbec114610783578063dcf65482146107be57600080fd5b8063c7de38a6146106a7578063caa5c23f146106dc57600080fd5b80639c55a05411610122578063b55bb84b11610107578063b55bb84b14610633578063c12c21c014610653578063c690908a1461068757600080fd5b80639c55a054146105df578063b1836d32146105ff57600080fd5b8063860aefcf146104db5780639408b63f146105455780639b67ab30146105795780639be0536a146105bd57600080fd5b80635d91a0e0116101e65780636d19b486116101b55780637071b7c51161019a5780637071b7c51461049557806379c0ef91146104a857806382871ace146104c857600080fd5b80636d19b486146104415780636f307dc31461046157600080fd5b80635d91a0e0146103e85780635f73fbec146103fb578063601d66f61461040e5780636c8f225d1461042e57600080fd5b80633d9287fa1161023d5780635019e20a116102225780635019e20a1461039257806354fd4d50146103b257806359781034146103d557600080fd5b80633d9287fa146103055780634f0e0ef31461033957600080fd5b8062842b571461026e578063256ac915146102905780632a7ba1f7146102c55780632b7c7b11146102e5575b600080fd5b34801561027a57600080fd5b5061028e6102893660046151bf565b61087e565b005b34801561029c57600080fd5b506102b06102ab3660046151f8565b61098e565b60405190151581526020015b60405180910390f35b3480156102d157600080fd5b5061028e6102e0366004615215565b610a61565b3480156102f157600080fd5b5061028e610300366004615215565b610c3b565b34801561031157600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561034557600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102bc565b34801561039e57600080fd5b5061028e6103ad3660046151f8565b610d6a565b3480156103be57600080fd5b506103c7600281565b6040519081526020016102bc565b61028e6103e336600461522e565b61108c565b61028e6103f63660046152bb565b611275565b61028e610409366004615340565b611589565b34801561041a57600080fd5b5061028e6104293660046153d8565b6117de565b61028e61043c36600461541b565b611900565b34801561044d57600080fd5b506102b061045c3660046151f8565b611c31565b34801561046d57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b61028e6104a336600461546e565b611c60565b3480156104b457600080fd5b5061036d6104c3366004615215565b611f3e565b61028e6104d63660046152bb565b611f4b565b3480156104e757600080fd5b5060025461051c906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041682565b604080516fffffffffffffffffffffffffffffffff9384168152929091166020830152016102bc565b34801561055157600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561058557600080fd5b506004546040805167ffffffffffffffff608084901c1681526fffffffffffffffffffffffffffffffff9092166020830152016102bc565b3480156105c957600080fd5b506105d261227d565b6040516102bc91906154e2565b3480156105eb57600080fd5b5061028e6105fa36600461553c565b61228e565b34801561060b57600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561063f57600080fd5b5061028e61064e3660046151f8565b6123c4565b34801561065f57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561069357600080fd5b5061028e6106a23660046151f8565b6124c6565b3480156106b357600080fd5b506106c76106c23660046151f8565b612668565b604080519283526020830191909152016102bc565b61028e6106ea366004615557565b61289b565b3480156106fb57600080fd5b5060015461074e906fffffffffffffffffffffffffffffffff811690700100000000000000000000000000000000810460ff169071010000000000000000000000000000000000900464ffffffffff1683565b604080516fffffffffffffffffffffffffffffffff9094168452911515602084015264ffffffffff16908201526060016102bc565b34801561078f57600080fd5b506102b061079e366004615599565b600360209081526000928352604080842090915290825290205460ff1681565b3480156107ca57600080fd5b5061028e6107d93660046151f8565b612a88565b3480156107ea57600080fd5b506103c76107f93660046151f8565b612b86565b34801561080a57600080fd5b5061028e61081936600461522e565b612c6d565b34801561082a57600080fd5b5061028e6108393660046155c7565b612ec0565b34801561084a57600080fd5b506102b06108593660046151f8565b613057565b34801561086a57600080fd5b5061028e6108793660046155ee565b6131b2565b600260005414156108f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b6002600090815573ffffffffffffffffffffffffffffffffffffffff8316808252600360209081526040808420338086529083529381902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081527f9b3258bc4904fd6426b99843e206c6c7cdb1fd0f040121c25b71dafbb3851ee0910160405180910390a350506001600055565b6040517f055ee9b500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063055ee9b590602401602060405180830381865afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a43919061560b565b73ffffffffffffffffffffffffffffffffffffffff16141592915050565b60026000541415610ace576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610b5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b83919061560b565b9050610b903382846132eb565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906395373018906024015b600060405180830381600087803b158015610c1a57600080fd5b505af1158015610c2e573d6000803e3d6000fd5b5050600160005550505050565b60026000541415610ca8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610d39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5d919061560b565b9050610b90338284613411565b60026000541415610dd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000557f000000000000000000000000000000000000000000000000000000000000000015610e34576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610ec1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee5919061560b565b33600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915290205490915060ff16610f52576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f5d82613583565b5090508015610f98576040517ff713841e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b15801561102757600080fd5b505af115801561103b573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692503391507f93c70cc9715bef0d83edf2095f3595402279d274f402a73ffc17f1bcb19d863d90600090a35050600160005550565b600260005414156110f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611106613875565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063e958b70490602401602060405180830381865afa158015611197573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bb919061560b565b90506111c9848285856139b7565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401600060405180830381600087803b15801561125257600080fd5b505af1158015611266573d6000803e3d6000fd5b50506001600055505050505050565b600260005414156112e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611375573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611399919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166113e8576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806113f483613583565b915091508161142f576040517f1fdd676f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611437613875565b831561144d5761144d85858b8660016000613ae3565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632362a2d88b600185338e8e8e6040518863ffffffff1660e01b81526004016114b59796959493929190615663565b6020604051808303816000875af11580156114d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f891906156bf565b90508873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f7dfecd8419723a9d3954585a30c2a270165d70aafa146c11c1e1b88ae14390648460405161157091815260200190565b60405180910390a4505060016000555050505050505050565b600260005414156115f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ab919061560b565b90506116b5613875565b81156116cb576116cb8383338460016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d89061174a903390600090819083908d908d908d90600401615663565b6020604051808303816000875af1158015611769573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178d91906156bf565b5060405173ffffffffffffffffffffffffffffffffffffffff87169033907f460ad03b1cf79b1d64d3aefa28475f110ab66e84649c52bb41ed796b9b39198190600090a35050600160005550505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611849573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118d1576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff90811670010000000000000000000000000000000002911617600255565b6002600054141561196d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000908155606461198461ffff851687615707565b61198e9190615744565b9050611999816144f7565b6119a2816145e8565b6119ab84614668565b6119b3613875565b6040517f172c48c7000000000000000000000000000000000000000000000000000000008152600060048201819052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a64919061577f565b61ffff169150611a789050816127106157ae565b611a829083615707565b611a8c8288615707565b11611ac3576040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff86811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611b5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b81919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638587604051611bef92919091825261ffff16602082015260400190565b60405180910390a3611c2386827f00000000000000000000000000000000000000000000000000000000000000008a6139b7565b505060016000555050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526006602052604081205415155b92915050565b60026000541415611ccd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611cdb856144f7565b611ce484614668565b611ced856145e8565b600154700100000000000000000000000000000000900460ff1615611d3e576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d46613875565b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff85811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611de0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e04919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638885604051611e7292919091825261ffff16602082015260400190565b60405180910390a38215611e9057611e908484878460006001613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015611f1957600080fd5b505af1158015611f2d573d6000803e3d6000fd5b505060016000555050505050505050565b6000611c5a60058361480f565b60026000541415611fb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa15801561204b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206f919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166120be576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120c661481b565b6120fc576040517f7e52ccb400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061210782612668565b509050612112613875565b82156121285761212884848a8560016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d8906121aa908c90600290879033908f908f908f90600401615663565b6020604051808303816000875af11580156121c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ed91906156bf565b90508773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167ffada13ff2d5e1a1d9da37ad4a4130893b34e3c69c32b17f87ec31fd661b867078460405161226591815260200190565b60405180910390a45050600160005550505050505050565b6060612289600561486b565b905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612381576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561242f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612453919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146124b7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614878565b5050565b60026000541415612533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156125c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e8919061560b565b90506125f4818361489a565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401610c00565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126fc919061560b565b905060008061270b8387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156127a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127c991906156bf565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015291965061271091851690637afb010490604401602060405180830381865afa158015612863573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061288791906156bf565b6128919190615744565b9350505050915091565b60026000541415612908576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129bd919061560b565b90506129c7613875565b8115612a7e576129dc83833384600080613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015612a6557600080fd5b505af1158015612a79573d6000803e3d6000fd5b505050505b5050600160005550565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612af3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b17919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b7b576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614c92565b600080612b9283612668565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152919350600092507f000000000000000000000000000000000000000000000000000000000000000090911690633192195c906024016040805180830381865afa158015612c26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4a91906157c5565b9150819050612c5b61271084615707565b612c659190615744565b949350505050565b60026000541415612cda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063fdd5764590602401602060405180830381865afa158015612d6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d91919061560b565b73ffffffffffffffffffffffffffffffffffffffff161480612dd7575073ffffffffffffffffffffffffffffffffffffffff831660009081526006602052604090205415155b15612e0e576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612eac57600080fd5b505af1158015611c23573d6000803e3d6000fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f4f919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612fb3576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000061300a576040517f50dd11fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805464ffffffffff90921671010000000000000000000000000000000000027fffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffffff909216919091179055565b6040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063f67c5bd090602401602060405180830381865afa1580156130e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061310c91906156bf565b905080158015906131ab5750807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015613184573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a891906156bf565b16155b9392505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561321d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613241919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146132a5576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018054911515700100000000000000000000000000000000027fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff909216919091179055565b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600060448301819052917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561338c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133b091906156bf565b90506133bb816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f98274bf834d179ee08dc0604071b0dc90b54731bd5f725a5a96a39a86bce025a8360405161340391815260200190565b60405180910390a250505050565b61341a816144f7565b600154700100000000000000000000000000000000900460ff161561346b576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600160448301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561350c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061353091906156bf565b905061353b816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f9cac51154cc0d835e2f9c9d1f59a9344588cee107f4203bf58a8c797e3a58c458360405161340391815260200190565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613617919061560b565b90506000806136268387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156136c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136e491906156bf565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529195506000917f00000000000000000000000000000000000000000000000000000000000000001690633192195c906024016040805180830381865afa158015613775573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061379991906157c5565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350600092506127109187169063f9a6503090604401602060405180830381865afa158015613837573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061385b91906156bf565b6138659190615707565b9092109794965093945050505050565b34156139b5577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156138e357600080fd5b505af11580156138f7573d6000803e3d6000fd5b50506040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201523460248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16935063a9059cbb925060440190506020604051808303816000875af115801561398f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139b391906157e9565b505b565b6139c084614cb4565b6040517f830aa74500000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f0000000000000000000000000000000000000000000000000000000000000000169063830aa74590608401600060405180830381600087803b158015613a5e57600080fd5b505af1158015613a72573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fa32435755c235de2976ed44a75a2f85cb01faf0c894f639fe0c32bb9455fea8f83604051613ad591815260200190565b60405180910390a350505050565b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301523060248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b158015613b7257600080fd5b505af1158015613b86573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff871692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a28460005b8181101561441d5736888883818110613bea57613bea615806565b9050602002810190613bfc9190615835565b90506004613c0d6020830183615873565b90501015613c47576040517fe2b0e50600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b30613c5560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16141561421c578415613ca9576040517f5fb9107f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613cb86020830183615873565b613cc1916158d8565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167f59781034000000000000000000000000000000000000000000000000000000001415613e3c5760008080613d1e6020860186615873565b613d2c916004908290615920565b810190613d39919061522e565b925092509250613e34838c73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614613e2b576040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015613e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e26919061560b565b613e2d565b8b5b84846139b7565b505050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2b7c7b11000000000000000000000000000000000000000000000000000000001415613ec757600194506000613e996020840184615873565b613ea7916004908290615920565b810190613eb49190615215565b9050613ec1898983613411565b50614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2a7ba1f7000000000000000000000000000000000000000000000000000000001415613f80578415613f49576040517fc0b0caa800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613f586020840184615873565b613f66916004908290615920565b810190613f739190615215565b9050613ec18989836132eb565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f233a8caa0000000000000000000000000000000000000000000000000000000014156140e457600080613fda6020850185615873565b613fe8916004908290615920565b810190613ff5919061594a565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c8116600483015292945090925082918416906370a0823190602401602060405180830381865afa158015614069573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061408d91906156bf565b10156140dd576040517fa5ac537300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016108e7565b5050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fc690908a00000000000000000000000000000000000000000000000000000000141561416457600061413d6020840184615873565b61414b916004908290615920565b81019061415891906151f8565b9050613ec1888261489a565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f23e27a640000000000000000000000000000000000000000000000000000000014156141e45760006141bd6020840184615873565b6141cb916004908290615920565b8101906141d891906151f8565b9050613ec18882614d42565b6040517f1e9e7e7a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50614414565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff68754361426760208501856151f8565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156142d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142f4919061560b565b73ffffffffffffffffffffffffffffffffffffffff16148061436d575073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001661435560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16145b156143a4576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6144126143b46020830183615873565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506143f69250505060208401846151f8565b73ffffffffffffffffffffffffffffffffffffffff1690614e39565b505b50600101613bcf565b506040517f60c8e8938c9a0c0d88a98d6f1c562ce68077e12bf3edb8047378f2f736cb45b490600090a16040517fe1998cf900000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff86811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b1580156144d657600080fd5b505af11580156144ea573d6000803e3d6000fd5b5050505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006139b3576001546fffffffffffffffffffffffffffffffff9081169081146124c257600454608081901c906fffffffffffffffffffffffffffffffff16600067ffffffffffffffff8316431461456e578461458a565b61458a6fffffffffffffffffffffffffffffffff831686615976565b9050838111156145c6576040517f675f1a5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff81164360801b176004555050505050565b6002546fffffffffffffffffffffffffffffffff16811080614631575060025470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681115b156139b3576040517fce16799400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61467061481b565b156146a7576040517f63fc31c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1615614806577f0000000000000000000000000000000000000000000000000000000000000000801561472657503373ffffffffffffffffffffffffffffffffffffffff821614155b1561475d576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600160248301527f00000000000000000000000000000000000000000000000000000000000000001690639dc29fac90604401600060405180830381600087803b1580156147ed57600080fd5b505af1158015614801573d6000803e3d6000fd5b505050505b6139b381614cb4565b60006131ab8383614e7b565b60007f0000000000000000000000000000000000000000000000000000000000000000801561228957505060015471010000000000000000000000000000000000900464ffffffffff1642101590565b606060006131ab83614ea5565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f01565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561492b57600080fd5b505af115801561493f573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527fdf498aa1c340e992665d6fb4f3be8436d452c45a630cb6d7fab7963da39bac8793500190505b60405180910390a15050565b6040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600091829160019183917f00000000000000000000000000000000000000000000000000000000000000001690638991b2f190602401602060405180830381865afa158015614a2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a5391906156bf565b90505b808211614c895780821615614c7d576040517fe75538c700000000000000000000000000000000000000000000000000000000815260048101839052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e75538c7906024016040805180830381865afa158015614af4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b18919061577f565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529294509092506000918416906370a0823190602401602060405180830381865afa158015614b8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bb191906156bf565b90506001811115614c79576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff8481166024830152600091908b169063f9a6503090604401602060405180830381865afa158015614c33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c5791906156bf565b978801979050614c6b61ffff841682615707565b614c759088615976565b9650505b5050505b600182901b9150614a56565b50509250929050565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f50565b3373ffffffffffffffffffffffffffffffffffffffff821614801590614d0b575033600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16155b156139b3576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b158015614dd357600080fd5b505af1158015614de7573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527f69db9e9764da61b6681b89fb0f5be018506e0342036e56b59c3015a620d60977935001905061498d565b60606131ab83836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250615043565b6000826000018281548110614e9257614e92615806565b9060005260206000200154905092915050565b606081600001805480602002602001604051908101604052809291908181526020018280548015614ef557602002820191906000526020600020905b815481526020019060010190808311614ee1575b50505050509050919050565b6000818152600183016020526040812054614f4857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611c5a565b506000611c5a565b60008181526001830160205260408120548015615039576000614f746001836157ae565b8554909150600090614f88906001906157ae565b9050818114614fed576000866000018281548110614fa857614fa8615806565b9060005260206000200154905080876000018481548110614fcb57614fcb615806565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080614ffe57614ffe61598e565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611c5a565b6000915050611c5a565b6060612c65848460008585843b6150b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108e7565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516150df91906159ed565b60006040518083038185875af1925050503d806000811461511c576040519150601f19603f3d011682016040523d82523d6000602084013e615121565b606091505b509150915061513182828661513c565b979650505050505050565b6060831561514b5750816131ab565b82511561515b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e791906159ff565b73ffffffffffffffffffffffffffffffffffffffff811681146139b357600080fd5b80151581146139b357600080fd5b600080604083850312156151d257600080fd5b82356151dd8161518f565b915060208301356151ed816151b1565b809150509250929050565b60006020828403121561520a57600080fd5b81356131ab8161518f565b60006020828403121561522757600080fd5b5035919050565b60008060006060848603121561524357600080fd5b833561524e8161518f565b9250602084013561525e8161518f565b929592945050506040919091013590565b60008083601f84011261528157600080fd5b50813567ffffffffffffffff81111561529957600080fd5b6020830191508360208260051b85010111156152b457600080fd5b9250929050565b60008060008060008060a087890312156152d457600080fd5b86356152df8161518f565b955060208701356152ef8161518f565b9450604087013593506060870135615306816151b1565b9250608087013567ffffffffffffffff81111561532257600080fd5b61532e89828a0161526f565b979a9699509497509295939492505050565b60008060008060006080868803121561535857600080fd5b85356153638161518f565b945060208601359350604086013561537a816151b1565b9250606086013567ffffffffffffffff81111561539657600080fd5b6153a28882890161526f565b969995985093965092949392505050565b80356fffffffffffffffffffffffffffffffff811681146153d357600080fd5b919050565b600080604083850312156153eb57600080fd5b6153f4836153b3565b9150615402602084016153b3565b90509250929050565b61ffff811681146139b357600080fd5b6000806000806080858703121561543157600080fd5b8435935060208501356154438161518f565b925060408501356154538161540b565b915060608501356154638161540b565b939692955090935050565b60008060008060006080868803121561548657600080fd5b8535945060208601356154988161518f565b9350604086013567ffffffffffffffff8111156154b457600080fd5b6154c08882890161526f565b90945092505060608601356154d48161540b565b809150509295509295909350565b6020808252825182820181905260009190848201906040850190845b8181101561553057835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016154fe565b50909695505050505050565b60006020828403121561554e57600080fd5b6131ab826153b3565b6000806020838503121561556a57600080fd5b823567ffffffffffffffff81111561558157600080fd5b61558d8582860161526f565b90969095509350505050565b600080604083850312156155ac57600080fd5b82356155b78161518f565b915060208301356151ed8161518f565b6000602082840312156155d957600080fd5b813564ffffffffff811681146131ab57600080fd5b60006020828403121561560057600080fd5b81356131ab816151b1565b60006020828403121561561d57600080fd5b81516131ab8161518f565b6003811061565f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b73ffffffffffffffffffffffffffffffffffffffff888116825260e082019061568f602084018a615628565b6040830197909752948616606082015292909416608083015260a082015291151560c09092019190915292915050565b6000602082840312156156d157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561573f5761573f6156d8565b500290565b60008261577a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000806040838503121561579257600080fd5b825161579d8161518f565b60208401519092506151ed8161540b565b6000828210156157c0576157c06156d8565b500390565b600080604083850312156157d857600080fd5b505080516020909101519092909150565b6000602082840312156157fb57600080fd5b81516131ab816151b1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc183360301811261586957600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126158a857600080fd5b83018035915067ffffffffffffffff8211156158c357600080fd5b6020019150368190038213156152b457600080fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156159185780818660040360031b1b83161692505b505092915050565b6000808585111561593057600080fd5b8386111561593d57600080fd5b5050820193919092039150565b6000806040838503121561595d57600080fd5b82356159688161518f565b946020939093013593505050565b60008219821115615989576159896156d8565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60005b838110156159d85781810151838201526020016159c0565b838111156159e7576000848401525b50505050565b600082516158698184602087016159bd565b6020815260008251806020840152615a1e8160408501602087016159bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea2646970667358221220a3f4a705ab580a6ada1e438cd2ee4abc001b62d1d171fce12c41994900fef21664736f6c634300080a0033"; - -type CreditFacadeConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: CreditFacadeConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class CreditFacade__factory extends ContractFactory { - constructor(...args: CreditFacadeConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - _creditManager: string, - _degenNFT: string, - _expirable: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - _creditManager, - _degenNFT, - _expirable, - overrides || {} - ) as Promise; - } - override getDeployTransaction( - _creditManager: string, - _degenNFT: string, - _expirable: boolean, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction( - _creditManager, - _degenNFT, - _expirable, - overrides || {} - ); - } - override attach(address: string): CreditFacade { - return super.attach(address) as CreditFacade; - } - override connect(signer: Signer): CreditFacade__factory { - return super.connect(signer) as CreditFacade__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): CreditFacadeInterface { - return new utils.Interface(_abi) as CreditFacadeInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): CreditFacade { - return new Contract(address, _abi, signerOrProvider) as CreditFacade; - } -} diff --git a/src/types/factories/contracts/credit/CreditManager__factory.ts b/src/types/factories/contracts/credit/CreditManager__factory.ts deleted file mode 100644 index 0c102f02..00000000 --- a/src/types/factories/contracts/credit/CreditManager__factory.ts +++ /dev/null @@ -1,1180 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - CreditManager, - CreditManagerInterface, -} from "../../../contracts/credit/CreditManager"; - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "_pool", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "AdaptersOrCreditFacadeOnlyException", - type: "error", - }, - { - inputs: [], - name: "AllowanceFailedExpcetion", - type: "error", - }, - { - inputs: [], - name: "CallerNotPausableAdminException", - type: "error", - }, - { - inputs: [], - name: "CallerNotUnPausableAdminException", - type: "error", - }, - { - inputs: [], - name: "CreditConfiguratorOnlyException", - type: "error", - }, - { - inputs: [], - name: "CreditFacadeOnlyException", - type: "error", - }, - { - inputs: [], - name: "HasNoOpenedAccountException", - type: "error", - }, - { - inputs: [], - name: "NotEnoughCollateralException", - type: "error", - }, - { - inputs: [], - name: "ReentrancyLockException", - type: "error", - }, - { - inputs: [], - name: "TargetContractNotAllowedExpcetion", - type: "error", - }, - { - inputs: [], - name: "TokenAlreadyAddedException", - type: "error", - }, - { - inputs: [], - name: "TokenNotAllowedException", - type: "error", - }, - { - inputs: [], - name: "TooMuchEnabledTokensException", - type: "error", - }, - { - inputs: [], - name: "TooMuchTokensException", - type: "error", - }, - { - inputs: [], - name: "ZeroAddressException", - type: "error", - }, - { - inputs: [], - name: "ZeroAddressOrUserAlreadyHasAccountException", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "target", - type: "address", - }, - ], - name: "ExecuteOrder", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newConfigurator", - type: "address", - }, - ], - name: "NewConfigurator", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "Paused", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "Unpaused", - type: "event", - }, - { - inputs: [], - name: "_accountFactory", - outputs: [ - { - internalType: "contract IAccountFactory", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "_acl", - outputs: [ - { - internalType: "contract ACL", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "adapterToContract", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "payer", - type: "address", - }, - { - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - internalType: "address", - name: "token", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "addCollateral", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "token", - type: "address", - }, - ], - name: "addToken", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "borrower", - type: "address", - }, - { - internalType: "address", - name: "targetContract", - type: "address", - }, - { - internalType: "address", - name: "token", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "approveCreditAccount", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "totalValue", - type: "uint256", - }, - { - internalType: "enum ClosureAction", - name: "closureActionType", - type: "uint8", - }, - { - internalType: "uint256", - name: "borrowedAmount", - type: "uint256", - }, - { - internalType: "uint256", - name: "borrowedAmountWithInterest", - type: "uint256", - }, - ], - name: "calcClosePayments", - outputs: [ - { - internalType: "uint256", - name: "amountToPool", - type: "uint256", - }, - { - internalType: "uint256", - name: "remainingFunds", - type: "uint256", - }, - { - internalType: "uint256", - name: "profit", - type: "uint256", - }, - { - internalType: "uint256", - name: "loss", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "creditAccount", - type: "address", - }, - ], - name: "calcCreditAccountAccruedInterest", - outputs: [ - { - internalType: "uint256", - name: "borrowedAmount", - type: "uint256", - }, - { - internalType: "uint256", - name: "borrowedAmountWithInterest", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "adapter", - type: "address", - }, - { - internalType: "address", - name: "targetContract", - type: "address", - }, - ], - name: "changeContractAllowance", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - internalType: "address", - name: "tokenOut", - type: "address", - }, - ], - name: "checkAndEnableToken", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "creditAccount", - type: "address", - }, - ], - name: "checkAndOptimizeEnabledTokens", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "borrower", - type: "address", - }, - { - internalType: "enum ClosureAction", - name: "closureActionType", - type: "uint8", - }, - { - internalType: "uint256", - name: "totalValue", - type: "uint256", - }, - { - internalType: "address", - name: "payer", - type: "address", - }, - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "skipTokenMask", - type: "uint256", - }, - { - internalType: "bool", - name: "convertWETH", - type: "bool", - }, - ], - name: "closeCreditAccount", - outputs: [ - { - internalType: "uint256", - name: "remainingFunds", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "id", - type: "uint256", - }, - ], - name: "collateralTokens", - outputs: [ - { - internalType: "address", - name: "token", - type: "address", - }, - { - internalType: "uint16", - name: "liquidationThreshold", - type: "uint16", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "tokenMask", - type: "uint256", - }, - ], - name: "collateralTokensByMask", - outputs: [ - { - internalType: "address", - name: "token", - type: "address", - }, - { - internalType: "uint16", - name: "liquidationThreshold", - type: "uint16", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "collateralTokensCount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "contractToAdapter", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "creditAccounts", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditConfigurator", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditFacade", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "cumulativeDropAtFastCheckRAY", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - internalType: "address", - name: "token", - type: "address", - }, - ], - name: "disableToken", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "enabledTokensMap", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "borrower", - type: "address", - }, - { - internalType: "address", - name: "targetContract", - type: "address", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - ], - name: "executeOrder", - outputs: [ - { - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - internalType: "address", - name: "tokenIn", - type: "address", - }, - { - internalType: "address", - name: "tokenOut", - type: "address", - }, - { - internalType: "uint256", - name: "balanceInBefore", - type: "uint256", - }, - { - internalType: "uint256", - name: "balanceOutBefore", - type: "uint256", - }, - ], - name: "fastCollateralCheck", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "fees", - outputs: [ - { - internalType: "uint16", - name: "feeInterest", - type: "uint16", - }, - { - internalType: "uint16", - name: "feeLiquidation", - type: "uint16", - }, - { - internalType: "uint16", - name: "liquidationDiscount", - type: "uint16", - }, - { - internalType: "uint16", - name: "feeLiquidationExpired", - type: "uint16", - }, - { - internalType: "uint16", - name: "liquidationDiscountExpired", - type: "uint16", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "forbiddenTokenMask", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "creditAccount", - type: "address", - }, - ], - name: "fullCollateralCheck", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "borrower", - type: "address", - }, - ], - name: "getCreditAccountOrRevert", - outputs: [ - { - internalType: "address", - name: "result", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "token", - type: "address", - }, - ], - name: "liquidationThresholds", - outputs: [ - { - internalType: "uint16", - name: "lt", - type: "uint16", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "bool", - name: "increase", - type: "bool", - }, - ], - name: "manageDebt", - outputs: [ - { - internalType: "uint256", - name: "newBorrowedAmount", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "maxAllowedEnabledTokenLength", - outputs: [ - { - internalType: "uint8", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "borrowedAmount", - type: "uint256", - }, - { - internalType: "address", - name: "onBehalfOf", - type: "address", - }, - ], - name: "openCreditAccount", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "pause", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "paused", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "pool", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "poolService", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "priceOracle", - outputs: [ - { - internalType: "contract IPriceOracleV2", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_creditConfigurator", - type: "address", - }, - ], - name: "setConfigurator", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_forbidMask", - type: "uint256", - }, - ], - name: "setForbidMask", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "token", - type: "address", - }, - { - internalType: "uint16", - name: "liquidationThreshold", - type: "uint16", - }, - ], - name: "setLiquidationThreshold", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint8", - name: "newMaxEnabledTokens", - type: "uint8", - }, - ], - name: "setMaxEnabledTokens", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint16", - name: "_feeInterest", - type: "uint16", - }, - { - internalType: "uint16", - name: "_feeLiquidation", - type: "uint16", - }, - { - internalType: "uint16", - name: "_liquidationDiscount", - type: "uint16", - }, - { - internalType: "uint16", - name: "_feeLiquidationExpired", - type: "uint16", - }, - { - internalType: "uint16", - name: "_liquidationDiscountExpired", - type: "uint16", - }, - ], - name: "setParams", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "token", - type: "address", - }, - ], - name: "tokenMasksMap", - outputs: [ - { - internalType: "uint256", - name: "mask", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "from", - type: "address", - }, - { - internalType: "address", - name: "to", - type: "address", - }, - ], - name: "transferAccountOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "underlying", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "universalAdapter", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "unpause", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_creditFacade", - type: "address", - }, - { - internalType: "address", - name: "_priceOracle", - type: "address", - }, - ], - name: "upgradeContracts", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "wethAddress", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "wethGateway", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x6101606040526000805462ff00001916620c00001790553480156200002357600080fd5b50604051620058e8380380620058e8833981016040819052620000469162000537565b806001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000085573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ab919062000537565b6000805460ff191690556001600160a01b038116620000dd57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200011c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000142919062000537565b6001600160a01b03166080816001600160a01b031681525050506000816001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200019d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c3919062000537565b6001600160a01b03831661010081905260e081905260408051632495a59960e01b81529051929350600092632495a599916004808201926020929091908290030181865afa1580156200021a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000240919062000537565b6001600160a01b03811660c05290506200025a8162000472565b816001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000299573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002bf919062000537565b6001600160a01b0316610120816001600160a01b031681525050816001600160a01b03166377532ed96040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000318573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033e919062000537565b6001600160a01b0316610140816001600160a01b031681525050816001600160a01b031663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000397573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003bd919062000537565b6001600001600a6101000a8154816001600160a01b0302191690836001600160a01b03160217905550816001600160a01b0316639068a8686040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000425573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044b919062000537565b6001600160a01b031660a0525050600380546001600160a01b031916331790555062000588565b6001600160a01b03811660009081526006602052604090205415620004aa57604051632e5a5c7760e01b815260040160405180910390fd5b61010060055410620004cf57604051631cbbe18560e01b815260040160405180910390fd5b600580546001600160a01b0383166000818152600660209081526040808320600190951b948590558483526004909152812091909155825491929062000515836200055e565b91905055505050565b6001600160a01b03811681146200053457600080fd5b50565b6000602082840312156200054a57600080fd5b815162000557816200051e565b9392505050565b60006000198214156200058157634e487b7160e01b600052601160045260246000fd5b5060010190565b60805160a05160c05160e051610100516101205161014051615248620006a0600039600081816107e20152818161371001526137c501526000818161052f01526136780152600081816103d301528181610e5701528181610ebb015281816124ff0152818161265a01528181612aa101528181612b8c01528181612c4e01528181612d0d0152613b8f015260006105a401526000818161062701528181610d2201528181610db301528181610e0001528181610e3601528181610f3f0152818161203a01528181612b6b015281816130ee015281816134dc015281816135a90152613fe601526000818161081c01528181610fe101526124c20152600081816107a80152818161118401526122cb01526152486000f3fe608060405234801561001057600080fd5b50600436106103415760003560e01c8063830aa745116101bd578063a70bc542116100f9578063e75538c7116100a2578063f9aa028a1161007c578063f9aa028a1461089d578063fdd57645146108bd578063fe47cde7146108f3578063ff6875431461091357600080fd5b8063e75538c714610864578063e958b70414610877578063f67c5bd01461088a57600080fd5b8063db7ceb80116100d3578063db7ceb8014610817578063dc2b21c11461083e578063e1998cf91461085157600080fd5b8063a70bc542146107ca578063c5e10eef146107dd578063d48bfca71461080457600080fd5b806394cf073a116101665780639f5f86ae116101405780639f5f86ae146107745780639fd12b7714610787578063a366f49614610790578063a50cf2c8146107a357600080fd5b806394cf073a146106f557806395373018146107085780639af1d35a1461071b57600080fd5b80638991b2f1116101975780638991b2f1146106af5780638fe3f93f146106cf578063944ac59f146106e257600080fd5b8063830aa7451461066f5780638345f26e146106825780638456cb59146106a757600080fd5b8063458936f51161028c578063570a7af2116102355780636ce4074a1161020f5780636ce4074a146105ef5780636e98e5e41461060f5780636f307dc314610622578063783274381461064957600080fd5b8063570a7af21461059f5780635c975abb146105c6578063654a9eda146105dc57600080fd5b80635063524a116102665780635063524a1461055157806351e3f1601461058457806354fd4d501461059757600080fd5b8063458936f51461050e57806346fb371d146105175780634f0e0ef31461052a57600080fd5b80632630c12f116102ee5780633192195c116102c85780633192195c146104be5780633e8297ca146104e65780633f4ba83a1461050657600080fd5b80632630c12f1461045857806329df0b93146104845780632f7a18811461049757600080fd5b806316f0115b1161031f57806316f0115b146103ce578063172c48c7146103f55780632362a2d81461043757600080fd5b8063055ee9b5146103465780630d8f9cee146103a657806311ca4fc2146103bb575b600080fd5b61037c610354366004614a87565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6103b96103b4366004614aa4565b610949565b005b6103b96103c9366004614aa4565b610a76565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b610408610403366004614add565b610b4e565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835261ffff90911660208301520161039d565b61044a610445366004614b13565b610b66565b60405190815260200161039d565b6001546a0100000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1661037c565b6103b9610492366004614a87565b6110be565b60005461037c906301000000900473ffffffffffffffffffffffffffffffffffffffff1681565b6104d16104cc366004614a87565b611122565b6040805192835260208301919091520161039d565b61044a6104f4366004614a87565b60096020526000908152604090205481565b6103b9611156565b61044a60055481565b6103b9610525366004614b95565b611244565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b61056461055f366004614be6565b61149b565b60408051948552602085019390935291830152606082015260800161039d565b6103b9610592366004614aa4565b611602565b61044a600281565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b60005460ff16604051901515815260200161039d565b6103b96105ea366004614c21565b611703565b6106026105fd366004614d40565b611bbb565b60405161039d9190614e5b565b6103b961061d366004614aa4565b611e8e565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b61065c610657366004614a87565b612036565b60405161ffff909116815260200161039d565b6103b961067d366004614b95565b61210f565b6000546106959062010000900460ff1681565b60405160ff909116815260200161039d565b6103b961229d565b61044a6106bd366004614a87565b60086020526000908152604090205481565b61037c6106dd366004614e6e565b612389565b6103b96106f0366004614ea5565b612718565b61044a610703366004614f0a565b612845565b6103b9610716366004614a87565b612e5a565b6001546040805161ffff808416825262010000840481166020830152640100000000840481169282019290925266010000000000008304821660608201526801000000000000000090920416608082015260a00161039d565b6103b9610782366004614a87565b612f85565b61044a60075481565b6103b961079e366004614add565b613045565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b96107d8366004614f4c565b61309b565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b9610812366004614a87565b613221565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b961084c366004614f81565b61327b565b6103b961085f366004614aa4565b613306565b610408610872366004614add565b6134c9565b61037c610885366004614a87565b613541565b61044a610898366004614a87565b6135a5565b60035461037c9073ffffffffffffffffffffffffffffffffffffffff1681565b61037c6108cb366004614a87565b600b6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b600c5461037c9073ffffffffffffffffffffffffffffffffffffffff1681565b61037c610921366004614a87565b600a6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561099b57506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b156109d2576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff1615610a14576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055610a4a828261362e565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b60035473ffffffffffffffffffffffffffffffffffffffff163314610ac7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805473ffffffffffffffffffffffffffffffffffffffff9384166301000000027fffffffffffffffffff0000000000000000000000000000000000000000ffffff90911617905560018054919092166a0100000000000000000000027fffff0000000000000000000000000000000000000000ffffffffffffffffffff909116179055565b600080610b5d6001841b6134c9565b91509150915091565b6000805460ff1615610bd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064015b60405180910390fd5b600054610100900460ff1615610c1b576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff163314610ca0576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610cab89613541565b90506000806000806000610cbe86611122565b9094509050610ccf8c8e868461149b565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152939b5093985090955093506000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015610d6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8f9190614fa4565b9050610d9b8887614fec565b610da6906001614fec565b811115610de657610de1877f00000000000000000000000000000000000000000000000000000000000000008d60018c8b870303038d61366e565b610e30565b610e3073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168d8960018a8d01869003016138c0565b610e7e877f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000089600061366e565b6040517fca9505e40000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604481018490527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ca9505e490606401600060405180830381600087803b158015610f1457600080fd5b505af1158015610f28573d6000803e3d6000fd5b50505050505050506001841115610f6757610f67837f00000000000000000000000000000000000000000000000000000000000000008d87600061366e565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260086020526040902054861916610f9c8489888461395b565b6040517f89b77b3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f000000000000000000000000000000000000000000000000000000000000000016906389b77b3e90602401600060405180830381600087803b15801561102557600080fd5b505af1158015611039573d6000803e3d6000fd5b50505073ffffffffffffffffffffffffffffffffffffffff909c16600090815260026020526040812080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550929a9950505050505050505050565b6000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314611116576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61111f81613a35565b50565b60008060008061113185613aa6565b91955092509050816111438286615004565b61114d9190615041565b92505050915091565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156111e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611204919061507c565b61123a576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611242613c24565b565b60005460ff16156112b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156112f3576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100178155338152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff9081169084161480159061137457506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b80156113985750600c5473ffffffffffffffffffffffffffffffffffffffff163314155b806113b7575073ffffffffffffffffffffffffffffffffffffffff8316155b156113ee576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113f7826135a5565b61142d576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061143885613541565b9050611448838583856000613d05565b61146c5761145b83858360006001613d05565b5061146a838583856001613d05565b505b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b6001546000908190819081906127109061ffff166114b98888615099565b6114c39190615004565b6114cd9190615041565b6114d79086614fec565b935060018760028111156114ed576114ed6150b0565b1415611587576001546000906127109061151390640100000000900461ffff168b615004565b61151d9190615041565b6001549091506127109061153b9062010000900461ffff168b615004565b6115459190615041565b61154f9086614fec565b94508481111561156657600185820303935061156a565b8094505b85811061157b578585039250611581565b84860391505b506115f7565b600287600281111561159b5761159b6150b0565b14156115f157600154600090612710906115c59068010000000000000000900461ffff168b615004565b6115cf9190615041565b6001549091506127109061153b906601000000000000900461ffff168b615004565b84840391505b945094509450949050565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561165457506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b1561168b576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff16156116cd576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055610a4a8282613ea6565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561175557506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b1561178c576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff16156117ce576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790556118048584613ea6565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152600091908616906370a0823190602401602060405180830381865afa158015611874573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118989190614fa4565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529192506000918616906370a0823190602401602060405180830381865afa15801561190a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192e9190614fa4565b60015490915060009081906a0100000000000000000000900473ffffffffffffffffffffffffffffffffffffffff16635cecbd0e61196c8689615099565b8a6119778988615099565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152600481019390935273ffffffffffffffffffffffffffffffffffffffff918216602484015260448301528a1660648201526084016040805180830381865afa1580156119f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1791906150df565b9150915060018411611a2d57611a2d898961362e565b611a3687612036565b611a449061ffff1682615004565b9050611a4f88612036565b611a5d9061ffff1683615004565b9150818110611a7857611a6f89613a35565b5050505061146c565b73ffffffffffffffffffffffffffffffffffffffff891660009081526009602052604081205483611ab56b033b2e3c9fd0803ce800000085615004565b611abf9190615041565b611ad5906b033b2e3c9fd0803ce8000000615099565b611adf9190614fec565b60015490915061271090611b0a906b033b2e3c9fd0803ce80000009062010000900461ffff16615004565b611b149190615041565b8111611b555773ffffffffffffffffffffffffffffffffffffffff8a166000908152600960205260409020819055611b4b8a613a35565b505050505061146c565b611b5e8a613f56565b50505073ffffffffffffffffffffffffffffffffffffffff871660009081526009602052604090206001905550505050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b6060611bc960005460ff1690565b15611c30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff1615611c72576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100178155338152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff908116908416141580611ce7575073ffffffffffffffffffffffffffffffffffffffff8316155b15611d3d57600c5473ffffffffffffffffffffffffffffffffffffffff163314611d3d576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611d4885613541565b90508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167faed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab0360405160405180910390a36040517f1cff79cd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821690631cff79cd90611df89087908790600401615103565b6000604051808303816000875af1158015611e17573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611e5d9190810190615132565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905595945050505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314611edf576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821615611f4f5773ffffffffffffffffffffffffffffffffffffffff8281166000908152600a6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169183169190911790555b73ffffffffffffffffffffffffffffffffffffffff811615611fbf5773ffffffffffffffffffffffffffffffffffffffff8181166000908152600b6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169184169190911790555b73ffffffffffffffffffffffffffffffffffffffff811673cccccccccccccccccccccccccccccccccccccccc141561203257600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790555b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120ba5750506001547e01000000000000000000000000000000000000000000000000000000000000900461ffff1690565b60006120c5836135a5565b9050806120fe576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612107816134c9565b949350505050565b60005460ff161561217c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156121be576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff163314612243576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61224d8383613ea6565b61226f73ffffffffffffffffffffffffffffffffffffffff83168585846138c0565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555050565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015612327573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061234b919061507c565b612381576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112426142d4565b6000805460ff16156123f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff1615612439576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff1633146124be576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166321d18456857f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612568573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061258c9190614fa4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168152600481019290925260248201526044016020604051808303816000875af11580156125e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061260b91906151a0565b6040517fbf28068b0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff80831660248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063bf28068b90604401600060405180830381600087803b1580156126a057600080fd5b505af11580156126b4573d6000803e3d6000fd5b505050506126c28382614394565b73ffffffffffffffffffffffffffffffffffffffff811660009081526008602052604081206001905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690559392505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314612769576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805461ffff92831668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9484166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff96851664010000000002969096167fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff97851662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000090931694909816939093171794909416949094179190911716919091179055565b6000805460ff16156128b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156128f5576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff16331461297a576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080600061298887613aa6565b925092509250846129a25761299d8684615099565b6129ac565b6129ac8684614fec565b935060008515612b045769021e19e0c9bab24000008510612a15576129d583603689901c615004565b6129e3603686901c84615004565b6129ed9190614fec565b603686901c6129fc8585615004565b612a069190615004565b612a109190615041565b612a52565b612a1f8388615004565b612a298584615004565b612a339190614fec565b85612a3e8585615004565b612a489190615004565b612a529190615041565b6040517fbf28068b0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff8a811660248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063bf28068b90604401600060405180830381600087803b158015612ae757600080fd5b505af1158015612afb573d6000803e3d6000fd5b50505050612d9f565b60008484612b128583615004565b612b1c9190615041565b612b269190615099565b60015490915060009061271090612b419061ffff1684615004565b612b4b9190615041565b905073ffffffffffffffffffffffffffffffffffffffff8a1663d1660f997f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000084612bb6878f614fec565b612bc09190614fec565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b158015612c3457600080fd5b505af1158015612c48573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ca9505e4838b612c949190614fec565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815260048101919091526024810184905260006044820152606401600060405180830381600087803b158015612cf357600080fd5b505af1158015612d07573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d9a9190614fa4565b925050505b6040517f16128211000000000000000000000000000000000000000000000000000000008152600481018690526024810182905273ffffffffffffffffffffffffffffffffffffffff891690631612821190604401600060405180830381600087803b158015612e0e57600080fd5b505af1158015612e22573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055509498975050505050505050565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff16158015612eac57506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b15612ee3576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff1615612f25576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055612f5a81613f56565b50600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b60035473ffffffffffffffffffffffffffffffffffffffff163314612fd6576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517ff62005acebe9b616aefb5f248b48f5e89f28437b27d1eebc0b2d911209f297af90600090a250565b60035473ffffffffffffffffffffffffffffffffffffffff163314613096576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600755565b60035473ffffffffffffffffffffffffffffffffffffffff1633146130ec576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613193576001805461ffff83167e01000000000000000000000000000000000000000000000000000000000000027dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790555050565b600061319e836135a5565b9050806131d7576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000908152600460205260409020805473ffffffffffffffffffffffffffffffffffffffff1675ffff000000000000000000000000000000000000000060a084901b161790555050565b60035473ffffffffffffffffffffffffffffffffffffffff163314613272576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61111f81614467565b60035473ffffffffffffffffffffffffffffffffffffffff1633146132cc576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805460ff90921662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff909216919091179055565b60005460ff1615613373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156133b5576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff16331461343a576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061344583613541565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260026020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055905061349c8282614394565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b60008082600114156135275750506001547f0000000000000000000000000000000000000000000000000000000000000000927e0100000000000000000000000000000000000000000000000000000000000090910461ffff169150565b50506000908152600460205260409020549060a082901c90565b73ffffffffffffffffffffffffffffffffffffffff80821660009081526002602052604090205416806135a0576040517fb5ba4c4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146136255773ffffffffffffffffffffffffffffffffffffffff8216600090815260066020526040902054613628565b60015b92915050565b6000613639826135a5565b73ffffffffffffffffffffffffffffffffffffffff909316600090815260086020526040902080549319939093169092555050565b8080156136c657507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b15613828576040517fd1660f9900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301526044820184905286169063d1660f9990606401600060405180830381600087803b15801561376357600080fd5b505af1158015613777573d6000803e3d6000fd5b50506040517f5869dba800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690527f0000000000000000000000000000000000000000000000000000000000000000169250635869dba89150604401600060405180830381600087803b15801561380b57600080fd5b505af115801561381f573d6000803e3d6000fd5b505050506138b9565b6040517fd1660f9900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301526044820184905286169063d1660f9990606401600060405180830381600087803b1580156138a057600080fd5b505af11580156138b4573d6000803e3d6000fd5b505050505b5050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261395590859061455b565b50505050565b60025b8181116138b95781811615613a2d576000613978826134c9565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529192506000918316906370a0823190602401602060405180830381865afa1580156139eb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a0f9190614fa4565b90506002811115613a2a57613a2a878388600185038961366e565b50505b60011b61395e565b73ffffffffffffffffffffffffffffffffffffffff811660009081526008602052604081205490613a6582614667565b60005490915062010000900460ff16811115613aa1576000613a86836146a7565b613a91906001614fec565b905061395584848460008561470b565b505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff16631afbb7a46040518163ffffffff1660e01b8152600401602060405180830381865afa158015613af6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b1a9190614fa4565b92508373ffffffffffffffffffffffffffffffffffffffff166317d11a156040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b8b9190614fa4565b91507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bf8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c1c9190614fa4565b929491935050565b60005460ff16613c90576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610bd0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6040805173ffffffffffffffffffffffffffffffffffffffff8681166024830152604480830186905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b30000000000000000000000000000000000000000000000000000000017905291517f1cff79cd000000000000000000000000000000000000000000000000000000008152600092861691631cff79cd91613dc6918a91600401615103565b6000604051808303816000875af1925050508015613e2457506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052613e219190810190615132565b60015b613e2d57613e61565b80511580613e50575080806020019051810190613e4a919061507c565b15156001145b15613e5f576001915050613e9d565b505b8115613e99576040517f76e3e29c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060005b95945050505050565b6000613eb1826135a5565b9050801580613ec35750600754811615155b15613efa576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83166000908152600860205260409020548116613aa15773ffffffffffffffffffffffffffffffffffffffff83166000908152600860205260409020805482179055505050565b60015473ffffffffffffffffffffffffffffffffffffffff8281166000908152600860205260408120546a010000000000000000000090930490911691908080613f9f86611122565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526127108202600482015273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350908716915063f9a6503090604401602060405180830381865afa15801561403a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061405e9190614fa4565b9250614069846146a7565b6001019150506000806000805b848110156142a157801561408f5760018186031b614092565b60015b935086841615614299576000806140a8866134c9565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8e811660048301529294509092506000918416906370a0823190602401602060405180830381865afa15801561411d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141419190614fa4565b9050600181111561428c576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff848116602483015261ffff841691908d169063f9a6503090604401602060405180830381865afa1580156141c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141ea9190614fa4565b6141f49190615004565b6141fe9087614fec565b95508886106142875760006142128b614667565b60005490915062010000900460ff16811115614249576142448d8c836001891561423e57898e0361470b565b8d61470b565b614278565b85156142785773ffffffffffffffffffffffffffffffffffffffff8d1660009081526008602052604090208b90555b50505050505050505050505050565b614295565b98861898600194505b5050505b600101614076565b506040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005460ff1615614341576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613cdb3390565b73ffffffffffffffffffffffffffffffffffffffff821615806143dd575073ffffffffffffffffffffffffffffffffffffffff8281166000908152600260205260409020541615155b15614414576040517f9e59609e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff918216600090815260026020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001691909216179055565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260066020526040902054156144c4576040517f2e5a5c7700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61010060055410614501576040517f1cbbe18500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005805473ffffffffffffffffffffffffffffffffffffffff83166000818152600660209081526040808320600190951b9485905584835260049091528120919091558254919290614552836151bd565b91905055505050565b60006145bd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166148799092919063ffffffff16565b805190915015613aa157808060200190518101906145db919061507c565b613aa1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610bd0565b60008060005b6101008110156146a0576001811b91508382161561468c578260010192505b838210614698576146a0565b60010161466d565b5050919050565b600081600114156146ba57506000919050565b61010060015b60016146cc8284614fec565b901c92506001831b848116158015906146e75750600185851c145b156146f257506146a0565b84811061470157839250614705565b8391505b506146c0565b815b81811015614846576001811b8581161561483d57600061472c826134c9565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529192506000918316906370a0823190602401602060405180830381865afa15801561479f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147c39190614fa4565b90506001811161483a57600054978318977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9097019660ff6201000090910416871161483a5750505073ffffffffffffffffffffffffffffffffffffffff86166000908152600860205260409020859055506138b9565b50505b5060010161470d565b506040517f53275fcb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606148888484600085614892565b90505b9392505050565b606082471015614924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610bd0565b843b61498c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610bd0565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516149b591906151f6565b60006040518083038185875af1925050503d80600081146149f2576040519150601f19603f3d011682016040523d82523d6000602084013e6149f7565b606091505b5091509150614a07828286614a12565b979650505050505050565b60608315614a2157508161488b565b825115614a315782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd09190614e5b565b73ffffffffffffffffffffffffffffffffffffffff8116811461111f57600080fd5b600060208284031215614a9957600080fd5b813561488b81614a65565b60008060408385031215614ab757600080fd5b8235614ac281614a65565b91506020830135614ad281614a65565b809150509250929050565b600060208284031215614aef57600080fd5b5035919050565b8035600381106135a057600080fd5b801515811461111f57600080fd5b600080600080600080600060e0888a031215614b2e57600080fd5b8735614b3981614a65565b9650614b4760208901614af6565b9550604088013594506060880135614b5e81614a65565b93506080880135614b6e81614a65565b925060a0880135915060c0880135614b8581614b05565b8091505092959891949750929550565b60008060008060808587031215614bab57600080fd5b8435614bb681614a65565b93506020850135614bc681614a65565b92506040850135614bd681614a65565b9396929550929360600135925050565b60008060008060808587031215614bfc57600080fd5b84359350614c0c60208601614af6565b93969395505050506040820135916060013590565b600080600080600060a08688031215614c3957600080fd5b8535614c4481614a65565b94506020860135614c5481614a65565b93506040860135614c6481614a65565b94979396509394606081013594506080013592915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614cf257614cf2614c7c565b604052919050565b600067ffffffffffffffff821115614d1457614d14614c7c565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600080600060608486031215614d5557600080fd5b8335614d6081614a65565b92506020840135614d7081614a65565b9150604084013567ffffffffffffffff811115614d8c57600080fd5b8401601f81018613614d9d57600080fd5b8035614db0614dab82614cfa565b614cab565b818152876020838501011115614dc557600080fd5b816020840160208301376000602083830101528093505050509250925092565b60005b83811015614e00578181015183820152602001614de8565b838111156139555750506000910152565b60008151808452614e29816020860160208601614de5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061488b6020830184614e11565b60008060408385031215614e8157600080fd5b823591506020830135614ad281614a65565b803561ffff811681146135a057600080fd5b600080600080600060a08688031215614ebd57600080fd5b614ec686614e93565b9450614ed460208701614e93565b9350614ee260408701614e93565b9250614ef060608701614e93565b9150614efe60808701614e93565b90509295509295909350565b600080600060608486031215614f1f57600080fd5b8335614f2a81614a65565b9250602084013591506040840135614f4181614b05565b809150509250925092565b60008060408385031215614f5f57600080fd5b8235614f6a81614a65565b9150614f7860208401614e93565b90509250929050565b600060208284031215614f9357600080fd5b813560ff8116811461488b57600080fd5b600060208284031215614fb657600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115614fff57614fff614fbd565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561503c5761503c614fbd565b500290565b600082615077577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60006020828403121561508e57600080fd5b815161488b81614b05565b6000828210156150ab576150ab614fbd565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600080604083850312156150f257600080fd5b505080516020909101519092909150565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015260006148886040830184614e11565b60006020828403121561514457600080fd5b815167ffffffffffffffff81111561515b57600080fd5b8201601f8101841361516c57600080fd5b805161517a614dab82614cfa565b81815285602083850101111561518f57600080fd5b613e9d826020830160208601614de5565b6000602082840312156151b257600080fd5b815161488b81614a65565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156151ef576151ef614fbd565b5060010190565b60008251615208818460208701614de5565b919091019291505056fea26469706673582212209d39bb9d4972b515acdad1ffb757acd15e103ca6ee762f88a6382b36243734ba64736f6c634300080a0033"; - -type CreditManagerConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: CreditManagerConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class CreditManager__factory extends ContractFactory { - constructor(...args: CreditManagerConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - _pool: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(_pool, overrides || {}) as Promise; - } - override getDeployTransaction( - _pool: string, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(_pool, overrides || {}); - } - override attach(address: string): CreditManager { - return super.attach(address) as CreditManager; - } - override connect(signer: Signer): CreditManager__factory { - return super.connect(signer) as CreditManager__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): CreditManagerInterface { - return new utils.Interface(_abi) as CreditManagerInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): CreditManager { - return new Contract(address, _abi, signerOrProvider) as CreditManager; - } -} diff --git a/src/types/factories/contracts/credit/index.ts b/src/types/factories/contracts/credit/index.ts deleted file mode 100644 index af76bbce..00000000 --- a/src/types/factories/contracts/credit/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { CreditAccount__factory } from "./CreditAccount__factory"; -export { CreditConfigurator__factory } from "./CreditConfigurator__factory"; -export { CreditFacade__factory } from "./CreditFacade__factory"; -export { CreditManager__factory } from "./CreditManager__factory"; diff --git a/src/types/factories/contracts/factories/CreditManagerFactory__factory.ts b/src/types/factories/contracts/factories/CreditManagerFactory__factory.ts deleted file mode 100644 index da61e5d2..00000000 --- a/src/types/factories/contracts/factories/CreditManagerFactory__factory.ts +++ /dev/null @@ -1,392 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { - Signer, - utils, - Contract, - ContractFactory, - BigNumberish, - Overrides, -} from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - CreditManagerFactory, - CreditManagerFactoryInterface, - CreditManagerOptsStruct, -} from "../../../contracts/factories/CreditManagerFactory"; - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "_pool", - type: "address", - }, - { - components: [ - { - internalType: "uint128", - name: "minBorrowedAmount", - type: "uint128", - }, - { - internalType: "uint128", - name: "maxBorrowedAmount", - type: "uint128", - }, - { - components: [ - { - internalType: "address", - name: "token", - type: "address", - }, - { - internalType: "uint16", - name: "liquidationThreshold", - type: "uint16", - }, - ], - internalType: "struct CollateralToken[]", - name: "collateralTokens", - type: "tuple[]", - }, - { - internalType: "address", - name: "degenNFT", - type: "address", - }, - { - internalType: "bool", - name: "expirable", - type: "bool", - }, - ], - internalType: "struct CreditManagerOpts", - name: "opts", - type: "tuple", - }, - { - internalType: "uint256", - name: "salt", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "RootSelfDestoyException", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "previousOwner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "OwnershipTransferred", - type: "event", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "adapters", - outputs: [ - { - internalType: "address", - name: "adapter", - type: "address", - }, - { - internalType: "address", - name: "targetContract", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - components: [ - { - internalType: "address", - name: "adapter", - type: "address", - }, - { - internalType: "address", - name: "targetContract", - type: "address", - }, - ], - internalType: "struct Adapter[]", - name: "_adapters", - type: "tuple[]", - }, - ], - name: "addAdapters", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "addressProvider", - outputs: [ - { - internalType: "contract AddressProvider", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "configure", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "creditConfigurator", - outputs: [ - { - internalType: "contract CreditConfigurator", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditFacade", - outputs: [ - { - internalType: "contract CreditFacade", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditManager", - outputs: [ - { - internalType: "contract CreditManager", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes", - name: "bytecode", - type: "bytes", - }, - { - internalType: "uint256", - name: "_salt", - type: "uint256", - }, - ], - name: "deploy", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [], - name: "destoy", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes", - name: "bytecode", - type: "bytes", - }, - { - internalType: "uint256", - name: "_salt", - type: "uint256", - }, - ], - name: "getAddress", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "getRootBack", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "owner", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "pool", - outputs: [ - { - internalType: "contract PoolService", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "renounceOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "root", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "transferOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, -]; - -const _bytecode = - "0x60e06040523480156200001157600080fd5b5060405162013af238038062013af2833981016040819052620000349162000630565b826001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000073573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000999190620007bf565b620000a433620004ab565b6001600160a01b038116608081905260408051630873769560e01b815290516308737695916004808201926020929091908290030181865afa158015620000ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001159190620007bf565b6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000153573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001799190620007bf565b6001600160a01b0390811660a052841660c0525060405183906200019d9062000519565b6001600160a01b039091168152602001604051809103906000f080158015620001ca573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b0392909216918217905560608301516080840151604051620002029062000527565b6001600160a01b03938416815292909116602083015215156040820152606001604051809103906000f0801580156200023f573d6000803e3d6000fd5b50600280546001600160a01b0319166001600160a01b0392909216919091179055604051600090620002746020820162000535565b601f1982820381018352601f909101166040819052600154600254620002b0926001600160a01b039283169291909116908790602001620007e6565b60408051601f1981840301815290829052620002d09291602001620008e8565b60408051601f19818403018152919052905060006200035982848151602092830120604080517fff00000000000000000000000000000000000000000000000000000000000000818601523060601b6001600160601b03191660218201526035810193909352605580840192909252805180840390920182526075909201909152805191012090565b600154604051634fafc35760e11b81526001600160a01b038084166004830152929350911690639f5f86ae90602401600060405180830381600087803b158015620003a357600080fd5b505af1158015620003b8573d6000803e3d6000fd5b50505050620003ce8284620004fb60201b60201c565b600380546001600160a01b0319166001600160a01b0383811691821790925560015460408051630304b08760e61b81529051919093169263c12c21c09160048083019260209291908290030181865afa15801562000430573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004569190620007bf565b6001600160a01b031614620004a05760405162461bcd60e51b815260206004820152600c60248201526b496e636f727265637420434d60a01b604482015260640160405180910390fd5b505050505062000909565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008183516020850134f59050803b6200051457600080fd5b505050565b6158e8806200243683390190565b615e978062007d1e83390190565b615f3d806200dbb583390190565b6001600160a01b03811681146200055957600080fd5b50565b8051620005698162000543565b919050565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b0381118282101715620005a957620005a96200056e565b60405290565b604080519081016001600160401b0381118282101715620005a957620005a96200056e565b604051601f8201601f191681016001600160401b0381118282101715620005ff57620005ff6200056e565b604052919050565b80516001600160801b03811681146200056957600080fd5b805180151581146200056957600080fd5b6000806000606084860312156200064657600080fd5b8351620006538162000543565b602085810151919450906001600160401b03808211156200067357600080fd5b9086019060a082890312156200068857600080fd5b6200069262000584565b6200069d8362000607565b8152620006ac84840162000607565b8482015260408084015183811115620006c457600080fd5b8401601f81018b13620006d657600080fd5b805184811115620006eb57620006eb6200056e565b620006fb878260051b01620005d4565b818152878101955060069190911b82018701908c8211156200071c57600080fd5b918701915b818310156200077e5783838e0312156200073b5760008081fd5b62000745620005af565b8351620007528162000543565b81528389015161ffff811681146200076a5760008081fd5b818a01528652948701949183019162000721565b8484015250620007939050606085016200055c565b6060830152620007a6608085016200061f565b6080830152979097015195989697509495945050505050565b600060208284031215620007d257600080fd5b8151620007df8162000543565b9392505050565b600060018060a01b0380861683526020818616818501526040606081860152610100850160018060801b038088511660608801528084890151166080880152508187015160a080880152818151808452610120890191508583019350600092505b808310156200087857835180518816835286015161ffff168683015292850192600192909201919084019062000847565b5060608901516001600160a01b031660c0890152608090980151151560e0909701969096525094979650505050505050565b6000815160005b81811015620008cd5760208185018101518683015201620008b1565b81811115620008dd576000828601525b509290920192915050565b600062000901620008fa8386620008aa565b84620008aa565b949350505050565b60805160a05160c051611ad3620009636000396000818161010a0152610ea00152600081816103790152610b170152600081816101680152818161068c01528181610a4d01528181610b860152610c190152611ad36000f3fe6080604052600436106100f35760003560e01c80638da5cb5b1161008a578063ebf0c71711610059578063ebf0c71714610367578063f2fde38b1461039b578063f4747c58146103bb578063f9aa028a146103db57600080fd5b80638da5cb5b1461025a57806394ca2cb5146102855780639c4ae2d014610327578063c12c21c01461033a57600080fd5b80633e0b1a23116100c65780633e0b1a23146101ce5780634ef501ac146101e3578063715018a614610230578063805abe6a1461024557600080fd5b806316f0115b146100f85780632954018c146101565780632f7a18811461018a578063318d0d10146101b7575b600080fd5b34801561010457600080fd5b5061012c7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561016257600080fd5b5061012c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561019657600080fd5b5060025461012c9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156101c357600080fd5b506101cc610408565b005b3480156101da57600080fd5b506101cc610498565b3480156101ef57600080fd5b506102036101fe366004611726565b610521565b6040805173ffffffffffffffffffffffffffffffffffffffff93841681529290911660208301520161014d565b34801561023c57600080fd5b506101cc610567565b34801561025157600080fd5b506101cc6105f2565b34801561026657600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff1661012c565b34801561029157600080fd5b5061012c6102a03660046117e6565b8151602092830120604080517fff00000000000000000000000000000000000000000000000000000000000000818601523060601b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660218201526035810193909352605580840192909252805180840390920182526075909201909152805191012090565b6101cc6103353660046117e6565b6107d8565b34801561034657600080fd5b5060015461012c9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561037357600080fd5b5061012c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103a757600080fd5b506101cc6103b63660046118c0565b6107f5565b3480156103c757600080fd5b506101cc6103d63660046118e4565b610925565b3480156103e757600080fd5b5060035461012c9073ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff16331461048e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b610496610a49565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610519576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b61048e610b82565b6004818154811061053157600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff91821692501682565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b61049660006116b1565b60005473ffffffffffffffffffffffffffffffffffffffff163314610673576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b3073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106f5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071991906119c4565b73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610763573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078791906119c4565b73ffffffffffffffffffffffffffffffffffffffff1614156107d5576040517fbdebb83f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33ff5b60008183516020850134f59050803b6107f057600080fd5b505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b73ffffffffffffffffffffffffffffffffffffffff8116610919576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610485565b610922816116b1565b50565b60005473ffffffffffffffffffffffffffffffffffffffff1633146109a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b805160005b818110156107f05760048382815181106109c7576109c76119e1565b602090810291909101810151825460018082018555600094855293839020825160029092020180547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff938416178255929093015192840180549092169216919091179055016109ab565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ab6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ada91906119c4565b6040517ff2fde38b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301529192509082169063f2fde38b90602401600060405180830381600087803b158015610b6757600080fd5b505af1158015610b7b573d6000803e3d6000fd5b5050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1391906119c4565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca691906119c4565b60045490915060005b81811015610dd4576003546004805473ffffffffffffffffffffffffffffffffffffffff90921691637bccacee919084908110610cee57610cee6119e1565b906000526020600020906002020160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660048481548110610d3357610d336119e1565b600091825260209091206002909102015460405160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b158015610db157600080fd5b505af1158015610dc5573d6000803e3d6000fd5b50505050806001019050610caf565b506001546040517fe26b2f6300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529084169063e26b2f6390602401600060405180830381600087803b158015610e4257600080fd5b505af1158015610e56573d6000803e3d6000fd5b50506001546040517fcf33d95500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201527f0000000000000000000000000000000000000000000000000000000000000000909116925063cf33d9559150602401600060405180830381600087803b158015610ee857600080fd5b505af1158015610efc573d6000803e3d6000fd5b50505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f919190611a10565b905060005b818110156116ab576003546040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810183905260009173ffffffffffffffffffffffffffffffffffffffff1690635094cb4f90602401602060405180830381865afa15801561100e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103291906119c4565b6001546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80841660048301529293506000929091169063fdd5764590602401602060405180830381865afa1580156110a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110cc91906119c4565b905060008173ffffffffffffffffffffffffffffffffffffffff1663ce30bbdb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561111b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113f9190611a29565b9050600c81601081111561115557611155611a4a565b14156116225760008273ffffffffffffffffffffffffffffffffffffffff166320b2c1516040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111cc91906119c4565b905060008373ffffffffffffffffffffffffffffffffffffffff1663927188d96040518163ffffffff1660e01b8152600401602060405180830381865afa15801561121b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123f91906119c4565b905060008473ffffffffffffffffffffffffffffffffffffffff166399253ac06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561128e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b291906119c4565b6040517f9dcb511a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152919250908a169063e8a97a3e9083908390639dcb511a90602401602060405180830381865afa15801561132c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135091906119c4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156113bd57600080fd5b505af11580156113d1573d6000803e3d6000fd5b50506040517f9dcb511a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301528c16925063e8a97a3e915085908390639dcb511a90602401602060405180830381865afa15801561144b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061146f91906119c4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156114dc57600080fd5b505af11580156114f0573d6000803e3d6000fd5b50506003546001546040517f7832743800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301529283169450633e7c88d69350879290911690637832743890602401602060405180830381865afa158015611573573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115979190611a79565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015261ffff166024820152604401600060405180830381600087803b15801561160657600080fd5b505af115801561161a573d6000803e3d6000fd5b505050505050505b600d81601081111561163657611636611a4a565b141561169d578173ffffffffffffffffffffffffffffffffffffffff16639b51ecd36040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561168457600080fd5b505af1158015611698573d6000803e3d6000fd5b505050505b836001019350505050610f96565b50505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561173857600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156117915761179161173f565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156117de576117de61173f565b604052919050565b600080604083850312156117f957600080fd5b823567ffffffffffffffff8082111561181157600080fd5b818501915085601f83011261182557600080fd5b81356020828211156118395761183961173f565b611869817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011601611797565b9250818352878183860101111561187f57600080fd5b8181850182850137600091830181019190915290969401359450505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461092257600080fd5b6000602082840312156118d257600080fd5b81356118dd8161189e565b9392505050565b600060208083850312156118f757600080fd5b823567ffffffffffffffff8082111561190f57600080fd5b818501915085601f83011261192357600080fd5b8135818111156119355761193561173f565b611943848260051b01611797565b818152848101925060069190911b83018401908782111561196357600080fd5b928401925b818410156119b957604084890312156119815760008081fd5b61198961176e565b84356119948161189e565b8152848601356119a38161189e565b8187015283526040939093019291840191611968565b979650505050505050565b6000602082840312156119d657600080fd5b81516118dd8161189e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215611a2257600080fd5b5051919050565b600060208284031215611a3b57600080fd5b8151601181106118dd57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060208284031215611a8b57600080fd5b815161ffff811681146118dd57600080fdfea264697066735822122090f5e4310a8b66bfdd7fdfbe64bc5b98570e7c1a415ffb0ced3c857cf6c5b14064736f6c634300080a00336101606040526000805462ff00001916620c00001790553480156200002357600080fd5b50604051620058e8380380620058e8833981016040819052620000469162000537565b806001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000085573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ab919062000537565b6000805460ff191690556001600160a01b038116620000dd57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200011c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000142919062000537565b6001600160a01b03166080816001600160a01b031681525050506000816001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200019d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c3919062000537565b6001600160a01b03831661010081905260e081905260408051632495a59960e01b81529051929350600092632495a599916004808201926020929091908290030181865afa1580156200021a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000240919062000537565b6001600160a01b03811660c05290506200025a8162000472565b816001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000299573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002bf919062000537565b6001600160a01b0316610120816001600160a01b031681525050816001600160a01b03166377532ed96040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000318573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033e919062000537565b6001600160a01b0316610140816001600160a01b031681525050816001600160a01b031663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000397573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003bd919062000537565b6001600001600a6101000a8154816001600160a01b0302191690836001600160a01b03160217905550816001600160a01b0316639068a8686040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000425573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044b919062000537565b6001600160a01b031660a0525050600380546001600160a01b031916331790555062000588565b6001600160a01b03811660009081526006602052604090205415620004aa57604051632e5a5c7760e01b815260040160405180910390fd5b61010060055410620004cf57604051631cbbe18560e01b815260040160405180910390fd5b600580546001600160a01b0383166000818152600660209081526040808320600190951b948590558483526004909152812091909155825491929062000515836200055e565b91905055505050565b6001600160a01b03811681146200053457600080fd5b50565b6000602082840312156200054a57600080fd5b815162000557816200051e565b9392505050565b60006000198214156200058157634e487b7160e01b600052601160045260246000fd5b5060010190565b60805160a05160c05160e051610100516101205161014051615248620006a0600039600081816107e20152818161371001526137c501526000818161052f01526136780152600081816103d301528181610e5701528181610ebb015281816124ff0152818161265a01528181612aa101528181612b8c01528181612c4e01528181612d0d0152613b8f015260006105a401526000818161062701528181610d2201528181610db301528181610e0001528181610e3601528181610f3f0152818161203a01528181612b6b015281816130ee015281816134dc015281816135a90152613fe601526000818161081c01528181610fe101526124c20152600081816107a80152818161118401526122cb01526152486000f3fe608060405234801561001057600080fd5b50600436106103415760003560e01c8063830aa745116101bd578063a70bc542116100f9578063e75538c7116100a2578063f9aa028a1161007c578063f9aa028a1461089d578063fdd57645146108bd578063fe47cde7146108f3578063ff6875431461091357600080fd5b8063e75538c714610864578063e958b70414610877578063f67c5bd01461088a57600080fd5b8063db7ceb80116100d3578063db7ceb8014610817578063dc2b21c11461083e578063e1998cf91461085157600080fd5b8063a70bc542146107ca578063c5e10eef146107dd578063d48bfca71461080457600080fd5b806394cf073a116101665780639f5f86ae116101405780639f5f86ae146107745780639fd12b7714610787578063a366f49614610790578063a50cf2c8146107a357600080fd5b806394cf073a146106f557806395373018146107085780639af1d35a1461071b57600080fd5b80638991b2f1116101975780638991b2f1146106af5780638fe3f93f146106cf578063944ac59f146106e257600080fd5b8063830aa7451461066f5780638345f26e146106825780638456cb59146106a757600080fd5b8063458936f51161028c578063570a7af2116102355780636ce4074a1161020f5780636ce4074a146105ef5780636e98e5e41461060f5780636f307dc314610622578063783274381461064957600080fd5b8063570a7af21461059f5780635c975abb146105c6578063654a9eda146105dc57600080fd5b80635063524a116102665780635063524a1461055157806351e3f1601461058457806354fd4d501461059757600080fd5b8063458936f51461050e57806346fb371d146105175780634f0e0ef31461052a57600080fd5b80632630c12f116102ee5780633192195c116102c85780633192195c146104be5780633e8297ca146104e65780633f4ba83a1461050657600080fd5b80632630c12f1461045857806329df0b93146104845780632f7a18811461049757600080fd5b806316f0115b1161031f57806316f0115b146103ce578063172c48c7146103f55780632362a2d81461043757600080fd5b8063055ee9b5146103465780630d8f9cee146103a657806311ca4fc2146103bb575b600080fd5b61037c610354366004614a87565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6103b96103b4366004614aa4565b610949565b005b6103b96103c9366004614aa4565b610a76565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b610408610403366004614add565b610b4e565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835261ffff90911660208301520161039d565b61044a610445366004614b13565b610b66565b60405190815260200161039d565b6001546a0100000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1661037c565b6103b9610492366004614a87565b6110be565b60005461037c906301000000900473ffffffffffffffffffffffffffffffffffffffff1681565b6104d16104cc366004614a87565b611122565b6040805192835260208301919091520161039d565b61044a6104f4366004614a87565b60096020526000908152604090205481565b6103b9611156565b61044a60055481565b6103b9610525366004614b95565b611244565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b61056461055f366004614be6565b61149b565b60408051948552602085019390935291830152606082015260800161039d565b6103b9610592366004614aa4565b611602565b61044a600281565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b60005460ff16604051901515815260200161039d565b6103b96105ea366004614c21565b611703565b6106026105fd366004614d40565b611bbb565b60405161039d9190614e5b565b6103b961061d366004614aa4565b611e8e565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b61065c610657366004614a87565b612036565b60405161ffff909116815260200161039d565b6103b961067d366004614b95565b61210f565b6000546106959062010000900460ff1681565b60405160ff909116815260200161039d565b6103b961229d565b61044a6106bd366004614a87565b60086020526000908152604090205481565b61037c6106dd366004614e6e565b612389565b6103b96106f0366004614ea5565b612718565b61044a610703366004614f0a565b612845565b6103b9610716366004614a87565b612e5a565b6001546040805161ffff808416825262010000840481166020830152640100000000840481169282019290925266010000000000008304821660608201526801000000000000000090920416608082015260a00161039d565b6103b9610782366004614a87565b612f85565b61044a60075481565b6103b961079e366004614add565b613045565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b96107d8366004614f4c565b61309b565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b9610812366004614a87565b613221565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b961084c366004614f81565b61327b565b6103b961085f366004614aa4565b613306565b610408610872366004614add565b6134c9565b61037c610885366004614a87565b613541565b61044a610898366004614a87565b6135a5565b60035461037c9073ffffffffffffffffffffffffffffffffffffffff1681565b61037c6108cb366004614a87565b600b6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b600c5461037c9073ffffffffffffffffffffffffffffffffffffffff1681565b61037c610921366004614a87565b600a6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561099b57506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b156109d2576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff1615610a14576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055610a4a828261362e565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b60035473ffffffffffffffffffffffffffffffffffffffff163314610ac7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805473ffffffffffffffffffffffffffffffffffffffff9384166301000000027fffffffffffffffffff0000000000000000000000000000000000000000ffffff90911617905560018054919092166a0100000000000000000000027fffff0000000000000000000000000000000000000000ffffffffffffffffffff909116179055565b600080610b5d6001841b6134c9565b91509150915091565b6000805460ff1615610bd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064015b60405180910390fd5b600054610100900460ff1615610c1b576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff163314610ca0576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610cab89613541565b90506000806000806000610cbe86611122565b9094509050610ccf8c8e868461149b565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152939b5093985090955093506000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015610d6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8f9190614fa4565b9050610d9b8887614fec565b610da6906001614fec565b811115610de657610de1877f00000000000000000000000000000000000000000000000000000000000000008d60018c8b870303038d61366e565b610e30565b610e3073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168d8960018a8d01869003016138c0565b610e7e877f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000089600061366e565b6040517fca9505e40000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604481018490527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ca9505e490606401600060405180830381600087803b158015610f1457600080fd5b505af1158015610f28573d6000803e3d6000fd5b50505050505050506001841115610f6757610f67837f00000000000000000000000000000000000000000000000000000000000000008d87600061366e565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260086020526040902054861916610f9c8489888461395b565b6040517f89b77b3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f000000000000000000000000000000000000000000000000000000000000000016906389b77b3e90602401600060405180830381600087803b15801561102557600080fd5b505af1158015611039573d6000803e3d6000fd5b50505073ffffffffffffffffffffffffffffffffffffffff909c16600090815260026020526040812080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550929a9950505050505050505050565b6000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314611116576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61111f81613a35565b50565b60008060008061113185613aa6565b91955092509050816111438286615004565b61114d9190615041565b92505050915091565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156111e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611204919061507c565b61123a576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611242613c24565b565b60005460ff16156112b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156112f3576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100178155338152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff9081169084161480159061137457506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b80156113985750600c5473ffffffffffffffffffffffffffffffffffffffff163314155b806113b7575073ffffffffffffffffffffffffffffffffffffffff8316155b156113ee576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113f7826135a5565b61142d576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061143885613541565b9050611448838583856000613d05565b61146c5761145b83858360006001613d05565b5061146a838583856001613d05565b505b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b6001546000908190819081906127109061ffff166114b98888615099565b6114c39190615004565b6114cd9190615041565b6114d79086614fec565b935060018760028111156114ed576114ed6150b0565b1415611587576001546000906127109061151390640100000000900461ffff168b615004565b61151d9190615041565b6001549091506127109061153b9062010000900461ffff168b615004565b6115459190615041565b61154f9086614fec565b94508481111561156657600185820303935061156a565b8094505b85811061157b578585039250611581565b84860391505b506115f7565b600287600281111561159b5761159b6150b0565b14156115f157600154600090612710906115c59068010000000000000000900461ffff168b615004565b6115cf9190615041565b6001549091506127109061153b906601000000000000900461ffff168b615004565b84840391505b945094509450949050565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561165457506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b1561168b576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff16156116cd576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055610a4a8282613ea6565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561175557506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b1561178c576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff16156117ce576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790556118048584613ea6565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152600091908616906370a0823190602401602060405180830381865afa158015611874573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118989190614fa4565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529192506000918616906370a0823190602401602060405180830381865afa15801561190a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192e9190614fa4565b60015490915060009081906a0100000000000000000000900473ffffffffffffffffffffffffffffffffffffffff16635cecbd0e61196c8689615099565b8a6119778988615099565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152600481019390935273ffffffffffffffffffffffffffffffffffffffff918216602484015260448301528a1660648201526084016040805180830381865afa1580156119f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1791906150df565b9150915060018411611a2d57611a2d898961362e565b611a3687612036565b611a449061ffff1682615004565b9050611a4f88612036565b611a5d9061ffff1683615004565b9150818110611a7857611a6f89613a35565b5050505061146c565b73ffffffffffffffffffffffffffffffffffffffff891660009081526009602052604081205483611ab56b033b2e3c9fd0803ce800000085615004565b611abf9190615041565b611ad5906b033b2e3c9fd0803ce8000000615099565b611adf9190614fec565b60015490915061271090611b0a906b033b2e3c9fd0803ce80000009062010000900461ffff16615004565b611b149190615041565b8111611b555773ffffffffffffffffffffffffffffffffffffffff8a166000908152600960205260409020819055611b4b8a613a35565b505050505061146c565b611b5e8a613f56565b50505073ffffffffffffffffffffffffffffffffffffffff871660009081526009602052604090206001905550505050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b6060611bc960005460ff1690565b15611c30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff1615611c72576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100178155338152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff908116908416141580611ce7575073ffffffffffffffffffffffffffffffffffffffff8316155b15611d3d57600c5473ffffffffffffffffffffffffffffffffffffffff163314611d3d576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611d4885613541565b90508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167faed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab0360405160405180910390a36040517f1cff79cd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821690631cff79cd90611df89087908790600401615103565b6000604051808303816000875af1158015611e17573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611e5d9190810190615132565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905595945050505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314611edf576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821615611f4f5773ffffffffffffffffffffffffffffffffffffffff8281166000908152600a6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169183169190911790555b73ffffffffffffffffffffffffffffffffffffffff811615611fbf5773ffffffffffffffffffffffffffffffffffffffff8181166000908152600b6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169184169190911790555b73ffffffffffffffffffffffffffffffffffffffff811673cccccccccccccccccccccccccccccccccccccccc141561203257600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790555b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120ba5750506001547e01000000000000000000000000000000000000000000000000000000000000900461ffff1690565b60006120c5836135a5565b9050806120fe576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612107816134c9565b949350505050565b60005460ff161561217c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156121be576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff163314612243576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61224d8383613ea6565b61226f73ffffffffffffffffffffffffffffffffffffffff83168585846138c0565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555050565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015612327573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061234b919061507c565b612381576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112426142d4565b6000805460ff16156123f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff1615612439576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff1633146124be576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166321d18456857f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612568573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061258c9190614fa4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168152600481019290925260248201526044016020604051808303816000875af11580156125e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061260b91906151a0565b6040517fbf28068b0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff80831660248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063bf28068b90604401600060405180830381600087803b1580156126a057600080fd5b505af11580156126b4573d6000803e3d6000fd5b505050506126c28382614394565b73ffffffffffffffffffffffffffffffffffffffff811660009081526008602052604081206001905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690559392505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314612769576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805461ffff92831668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9484166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff96851664010000000002969096167fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff97851662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000090931694909816939093171794909416949094179190911716919091179055565b6000805460ff16156128b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156128f5576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff16331461297a576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080600061298887613aa6565b925092509250846129a25761299d8684615099565b6129ac565b6129ac8684614fec565b935060008515612b045769021e19e0c9bab24000008510612a15576129d583603689901c615004565b6129e3603686901c84615004565b6129ed9190614fec565b603686901c6129fc8585615004565b612a069190615004565b612a109190615041565b612a52565b612a1f8388615004565b612a298584615004565b612a339190614fec565b85612a3e8585615004565b612a489190615004565b612a529190615041565b6040517fbf28068b0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff8a811660248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063bf28068b90604401600060405180830381600087803b158015612ae757600080fd5b505af1158015612afb573d6000803e3d6000fd5b50505050612d9f565b60008484612b128583615004565b612b1c9190615041565b612b269190615099565b60015490915060009061271090612b419061ffff1684615004565b612b4b9190615041565b905073ffffffffffffffffffffffffffffffffffffffff8a1663d1660f997f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000084612bb6878f614fec565b612bc09190614fec565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b158015612c3457600080fd5b505af1158015612c48573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ca9505e4838b612c949190614fec565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815260048101919091526024810184905260006044820152606401600060405180830381600087803b158015612cf357600080fd5b505af1158015612d07573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d9a9190614fa4565b925050505b6040517f16128211000000000000000000000000000000000000000000000000000000008152600481018690526024810182905273ffffffffffffffffffffffffffffffffffffffff891690631612821190604401600060405180830381600087803b158015612e0e57600080fd5b505af1158015612e22573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055509498975050505050505050565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff16158015612eac57506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b15612ee3576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff1615612f25576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055612f5a81613f56565b50600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b60035473ffffffffffffffffffffffffffffffffffffffff163314612fd6576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517ff62005acebe9b616aefb5f248b48f5e89f28437b27d1eebc0b2d911209f297af90600090a250565b60035473ffffffffffffffffffffffffffffffffffffffff163314613096576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600755565b60035473ffffffffffffffffffffffffffffffffffffffff1633146130ec576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613193576001805461ffff83167e01000000000000000000000000000000000000000000000000000000000000027dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790555050565b600061319e836135a5565b9050806131d7576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000908152600460205260409020805473ffffffffffffffffffffffffffffffffffffffff1675ffff000000000000000000000000000000000000000060a084901b161790555050565b60035473ffffffffffffffffffffffffffffffffffffffff163314613272576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61111f81614467565b60035473ffffffffffffffffffffffffffffffffffffffff1633146132cc576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805460ff90921662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff909216919091179055565b60005460ff1615613373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156133b5576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff16331461343a576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061344583613541565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260026020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055905061349c8282614394565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b60008082600114156135275750506001547f0000000000000000000000000000000000000000000000000000000000000000927e0100000000000000000000000000000000000000000000000000000000000090910461ffff169150565b50506000908152600460205260409020549060a082901c90565b73ffffffffffffffffffffffffffffffffffffffff80821660009081526002602052604090205416806135a0576040517fb5ba4c4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146136255773ffffffffffffffffffffffffffffffffffffffff8216600090815260066020526040902054613628565b60015b92915050565b6000613639826135a5565b73ffffffffffffffffffffffffffffffffffffffff909316600090815260086020526040902080549319939093169092555050565b8080156136c657507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b15613828576040517fd1660f9900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301526044820184905286169063d1660f9990606401600060405180830381600087803b15801561376357600080fd5b505af1158015613777573d6000803e3d6000fd5b50506040517f5869dba800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690527f0000000000000000000000000000000000000000000000000000000000000000169250635869dba89150604401600060405180830381600087803b15801561380b57600080fd5b505af115801561381f573d6000803e3d6000fd5b505050506138b9565b6040517fd1660f9900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301526044820184905286169063d1660f9990606401600060405180830381600087803b1580156138a057600080fd5b505af11580156138b4573d6000803e3d6000fd5b505050505b5050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261395590859061455b565b50505050565b60025b8181116138b95781811615613a2d576000613978826134c9565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529192506000918316906370a0823190602401602060405180830381865afa1580156139eb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a0f9190614fa4565b90506002811115613a2a57613a2a878388600185038961366e565b50505b60011b61395e565b73ffffffffffffffffffffffffffffffffffffffff811660009081526008602052604081205490613a6582614667565b60005490915062010000900460ff16811115613aa1576000613a86836146a7565b613a91906001614fec565b905061395584848460008561470b565b505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff16631afbb7a46040518163ffffffff1660e01b8152600401602060405180830381865afa158015613af6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b1a9190614fa4565b92508373ffffffffffffffffffffffffffffffffffffffff166317d11a156040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b8b9190614fa4565b91507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bf8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c1c9190614fa4565b929491935050565b60005460ff16613c90576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610bd0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6040805173ffffffffffffffffffffffffffffffffffffffff8681166024830152604480830186905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b30000000000000000000000000000000000000000000000000000000017905291517f1cff79cd000000000000000000000000000000000000000000000000000000008152600092861691631cff79cd91613dc6918a91600401615103565b6000604051808303816000875af1925050508015613e2457506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052613e219190810190615132565b60015b613e2d57613e61565b80511580613e50575080806020019051810190613e4a919061507c565b15156001145b15613e5f576001915050613e9d565b505b8115613e99576040517f76e3e29c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060005b95945050505050565b6000613eb1826135a5565b9050801580613ec35750600754811615155b15613efa576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83166000908152600860205260409020548116613aa15773ffffffffffffffffffffffffffffffffffffffff83166000908152600860205260409020805482179055505050565b60015473ffffffffffffffffffffffffffffffffffffffff8281166000908152600860205260408120546a010000000000000000000090930490911691908080613f9f86611122565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526127108202600482015273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350908716915063f9a6503090604401602060405180830381865afa15801561403a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061405e9190614fa4565b9250614069846146a7565b6001019150506000806000805b848110156142a157801561408f5760018186031b614092565b60015b935086841615614299576000806140a8866134c9565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8e811660048301529294509092506000918416906370a0823190602401602060405180830381865afa15801561411d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141419190614fa4565b9050600181111561428c576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff848116602483015261ffff841691908d169063f9a6503090604401602060405180830381865afa1580156141c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141ea9190614fa4565b6141f49190615004565b6141fe9087614fec565b95508886106142875760006142128b614667565b60005490915062010000900460ff16811115614249576142448d8c836001891561423e57898e0361470b565b8d61470b565b614278565b85156142785773ffffffffffffffffffffffffffffffffffffffff8d1660009081526008602052604090208b90555b50505050505050505050505050565b614295565b98861898600194505b5050505b600101614076565b506040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005460ff1615614341576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613cdb3390565b73ffffffffffffffffffffffffffffffffffffffff821615806143dd575073ffffffffffffffffffffffffffffffffffffffff8281166000908152600260205260409020541615155b15614414576040517f9e59609e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff918216600090815260026020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001691909216179055565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260066020526040902054156144c4576040517f2e5a5c7700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61010060055410614501576040517f1cbbe18500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005805473ffffffffffffffffffffffffffffffffffffffff83166000818152600660209081526040808320600190951b9485905584835260049091528120919091558254919290614552836151bd565b91905055505050565b60006145bd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166148799092919063ffffffff16565b805190915015613aa157808060200190518101906145db919061507c565b613aa1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610bd0565b60008060005b6101008110156146a0576001811b91508382161561468c578260010192505b838210614698576146a0565b60010161466d565b5050919050565b600081600114156146ba57506000919050565b61010060015b60016146cc8284614fec565b901c92506001831b848116158015906146e75750600185851c145b156146f257506146a0565b84811061470157839250614705565b8391505b506146c0565b815b81811015614846576001811b8581161561483d57600061472c826134c9565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529192506000918316906370a0823190602401602060405180830381865afa15801561479f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147c39190614fa4565b90506001811161483a57600054978318977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9097019660ff6201000090910416871161483a5750505073ffffffffffffffffffffffffffffffffffffffff86166000908152600860205260409020859055506138b9565b50505b5060010161470d565b506040517f53275fcb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606148888484600085614892565b90505b9392505050565b606082471015614924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610bd0565b843b61498c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610bd0565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516149b591906151f6565b60006040518083038185875af1925050503d80600081146149f2576040519150601f19603f3d011682016040523d82523d6000602084013e6149f7565b606091505b5091509150614a07828286614a12565b979650505050505050565b60608315614a2157508161488b565b825115614a315782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd09190614e5b565b73ffffffffffffffffffffffffffffffffffffffff8116811461111f57600080fd5b600060208284031215614a9957600080fd5b813561488b81614a65565b60008060408385031215614ab757600080fd5b8235614ac281614a65565b91506020830135614ad281614a65565b809150509250929050565b600060208284031215614aef57600080fd5b5035919050565b8035600381106135a057600080fd5b801515811461111f57600080fd5b600080600080600080600060e0888a031215614b2e57600080fd5b8735614b3981614a65565b9650614b4760208901614af6565b9550604088013594506060880135614b5e81614a65565b93506080880135614b6e81614a65565b925060a0880135915060c0880135614b8581614b05565b8091505092959891949750929550565b60008060008060808587031215614bab57600080fd5b8435614bb681614a65565b93506020850135614bc681614a65565b92506040850135614bd681614a65565b9396929550929360600135925050565b60008060008060808587031215614bfc57600080fd5b84359350614c0c60208601614af6565b93969395505050506040820135916060013590565b600080600080600060a08688031215614c3957600080fd5b8535614c4481614a65565b94506020860135614c5481614a65565b93506040860135614c6481614a65565b94979396509394606081013594506080013592915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614cf257614cf2614c7c565b604052919050565b600067ffffffffffffffff821115614d1457614d14614c7c565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600080600060608486031215614d5557600080fd5b8335614d6081614a65565b92506020840135614d7081614a65565b9150604084013567ffffffffffffffff811115614d8c57600080fd5b8401601f81018613614d9d57600080fd5b8035614db0614dab82614cfa565b614cab565b818152876020838501011115614dc557600080fd5b816020840160208301376000602083830101528093505050509250925092565b60005b83811015614e00578181015183820152602001614de8565b838111156139555750506000910152565b60008151808452614e29816020860160208601614de5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061488b6020830184614e11565b60008060408385031215614e8157600080fd5b823591506020830135614ad281614a65565b803561ffff811681146135a057600080fd5b600080600080600060a08688031215614ebd57600080fd5b614ec686614e93565b9450614ed460208701614e93565b9350614ee260408701614e93565b9250614ef060608701614e93565b9150614efe60808701614e93565b90509295509295909350565b600080600060608486031215614f1f57600080fd5b8335614f2a81614a65565b9250602084013591506040840135614f4181614b05565b809150509250925092565b60008060408385031215614f5f57600080fd5b8235614f6a81614a65565b9150614f7860208401614e93565b90509250929050565b600060208284031215614f9357600080fd5b813560ff8116811461488b57600080fd5b600060208284031215614fb657600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115614fff57614fff614fbd565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561503c5761503c614fbd565b500290565b600082615077577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60006020828403121561508e57600080fd5b815161488b81614b05565b6000828210156150ab576150ab614fbd565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600080604083850312156150f257600080fd5b505080516020909101519092909150565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015260006148886040830184614e11565b60006020828403121561514457600080fd5b815167ffffffffffffffff81111561515b57600080fd5b8201601f8101841361516c57600080fd5b805161517a614dab82614cfa565b81815285602083850101111561518f57600080fd5b613e9d826020830160208601614de5565b6000602082840312156151b257600080fd5b815161488b81614a65565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156151ef576151ef614fbd565b5060010190565b60008251615208818460208701614de5565b919091019291505056fea26469706673582212209d39bb9d4972b515acdad1ffb757acd15e103ca6ee762f88a6382b36243734ba64736f6c634300080a00336101406040523480156200001257600080fd5b5060405162005e9738038062005e97833981016040819052620000359162000198565b60016000556001600160a01b0383166200006257604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038316608081905260408051636f307dc360e01b81529051636f307dc3916004808201926020929091908290030181865afa158015620000ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d39190620001ea565b6001600160a01b031660a0816001600160a01b031681525050826001600160a01b0316634f0e0ef36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200012b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001519190620001ea565b6001600160a01b0390811660c0529190911660e0819052151561010052151561012052506200020f565b80516001600160a01b03811681146200019357600080fd5b919050565b600080600060608486031215620001ae57600080fd5b620001b9846200017b565b9250620001c9602085016200017b565b915060408401518015158114620001df57600080fd5b809150509250925092565b600060208284031215620001fd57600080fd5b62000208826200017b565b9392505050565b60805160a05160c05160e0516101005161012051615a86620004116000396000818161061101528181612fb5015261481f01526000818161031701528181610dde015281816144f901526146e5015260008181610557015281816146a901526147a901526000818161034b0152818161387d015261392d01526000818161047301528181611bfe0152818161274f0152818161280d0152818161366a01526137dd015260008181610665015281816109d801528181610b0301528181610bd501528181610cdd01528181610e6501528181610fe30152818161114e0152818161120e0152818161132e015281816114510152818161162b01528181611708015281816117e0015281816119e501528181611b1201528181611d9501528181611ed5015281816120040152818161216801528181612290015281816123c601528181612568015281816126390152818161266f0152818161293d01528181612a2101528181612a8a01528181612bde01528181612d2601528181612e6801528181612ec2015281816130a10152818161311b015281816131b401528181613341015281816134c10152818161358a0152818161372f01528181613a1a01528181613b2e01528181613dbb015281816142200152818161432801528181614492015281816148e7015281816149e801528181614aae0152614d8f0152615a866000f3fe6080604052600436106102695760003560e01c8063860aefcf11610153578063c7de38a6116100cb578063dfd594651161007f578063eb9606df11610064578063eb9606df1461081e578063f9eaee0d1461083e578063ffd9b9071461085e57600080fd5b8063dfd59465146107de578063e1f21c67146107fe57600080fd5b8063cff0ab96116100b0578063cff0ab96146106ef578063d9ccbec114610783578063dcf65482146107be57600080fd5b8063c7de38a6146106a7578063caa5c23f146106dc57600080fd5b80639c55a05411610122578063b55bb84b11610107578063b55bb84b14610633578063c12c21c014610653578063c690908a1461068757600080fd5b80639c55a054146105df578063b1836d32146105ff57600080fd5b8063860aefcf146104db5780639408b63f146105455780639b67ab30146105795780639be0536a146105bd57600080fd5b80635d91a0e0116101e65780636d19b486116101b55780637071b7c51161019a5780637071b7c51461049557806379c0ef91146104a857806382871ace146104c857600080fd5b80636d19b486146104415780636f307dc31461046157600080fd5b80635d91a0e0146103e85780635f73fbec146103fb578063601d66f61461040e5780636c8f225d1461042e57600080fd5b80633d9287fa1161023d5780635019e20a116102225780635019e20a1461039257806354fd4d50146103b257806359781034146103d557600080fd5b80633d9287fa146103055780634f0e0ef31461033957600080fd5b8062842b571461026e578063256ac915146102905780632a7ba1f7146102c55780632b7c7b11146102e5575b600080fd5b34801561027a57600080fd5b5061028e6102893660046151bf565b61087e565b005b34801561029c57600080fd5b506102b06102ab3660046151f8565b61098e565b60405190151581526020015b60405180910390f35b3480156102d157600080fd5b5061028e6102e0366004615215565b610a61565b3480156102f157600080fd5b5061028e610300366004615215565b610c3b565b34801561031157600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561034557600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102bc565b34801561039e57600080fd5b5061028e6103ad3660046151f8565b610d6a565b3480156103be57600080fd5b506103c7600281565b6040519081526020016102bc565b61028e6103e336600461522e565b61108c565b61028e6103f63660046152bb565b611275565b61028e610409366004615340565b611589565b34801561041a57600080fd5b5061028e6104293660046153d8565b6117de565b61028e61043c36600461541b565b611900565b34801561044d57600080fd5b506102b061045c3660046151f8565b611c31565b34801561046d57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b61028e6104a336600461546e565b611c60565b3480156104b457600080fd5b5061036d6104c3366004615215565b611f3e565b61028e6104d63660046152bb565b611f4b565b3480156104e757600080fd5b5060025461051c906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041682565b604080516fffffffffffffffffffffffffffffffff9384168152929091166020830152016102bc565b34801561055157600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561058557600080fd5b506004546040805167ffffffffffffffff608084901c1681526fffffffffffffffffffffffffffffffff9092166020830152016102bc565b3480156105c957600080fd5b506105d261227d565b6040516102bc91906154e2565b3480156105eb57600080fd5b5061028e6105fa36600461553c565b61228e565b34801561060b57600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561063f57600080fd5b5061028e61064e3660046151f8565b6123c4565b34801561065f57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561069357600080fd5b5061028e6106a23660046151f8565b6124c6565b3480156106b357600080fd5b506106c76106c23660046151f8565b612668565b604080519283526020830191909152016102bc565b61028e6106ea366004615557565b61289b565b3480156106fb57600080fd5b5060015461074e906fffffffffffffffffffffffffffffffff811690700100000000000000000000000000000000810460ff169071010000000000000000000000000000000000900464ffffffffff1683565b604080516fffffffffffffffffffffffffffffffff9094168452911515602084015264ffffffffff16908201526060016102bc565b34801561078f57600080fd5b506102b061079e366004615599565b600360209081526000928352604080842090915290825290205460ff1681565b3480156107ca57600080fd5b5061028e6107d93660046151f8565b612a88565b3480156107ea57600080fd5b506103c76107f93660046151f8565b612b86565b34801561080a57600080fd5b5061028e61081936600461522e565b612c6d565b34801561082a57600080fd5b5061028e6108393660046155c7565b612ec0565b34801561084a57600080fd5b506102b06108593660046151f8565b613057565b34801561086a57600080fd5b5061028e6108793660046155ee565b6131b2565b600260005414156108f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b6002600090815573ffffffffffffffffffffffffffffffffffffffff8316808252600360209081526040808420338086529083529381902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081527f9b3258bc4904fd6426b99843e206c6c7cdb1fd0f040121c25b71dafbb3851ee0910160405180910390a350506001600055565b6040517f055ee9b500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063055ee9b590602401602060405180830381865afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a43919061560b565b73ffffffffffffffffffffffffffffffffffffffff16141592915050565b60026000541415610ace576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610b5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b83919061560b565b9050610b903382846132eb565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906395373018906024015b600060405180830381600087803b158015610c1a57600080fd5b505af1158015610c2e573d6000803e3d6000fd5b5050600160005550505050565b60026000541415610ca8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610d39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5d919061560b565b9050610b90338284613411565b60026000541415610dd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000557f000000000000000000000000000000000000000000000000000000000000000015610e34576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610ec1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee5919061560b565b33600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915290205490915060ff16610f52576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f5d82613583565b5090508015610f98576040517ff713841e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b15801561102757600080fd5b505af115801561103b573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692503391507f93c70cc9715bef0d83edf2095f3595402279d274f402a73ffc17f1bcb19d863d90600090a35050600160005550565b600260005414156110f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611106613875565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063e958b70490602401602060405180830381865afa158015611197573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bb919061560b565b90506111c9848285856139b7565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401600060405180830381600087803b15801561125257600080fd5b505af1158015611266573d6000803e3d6000fd5b50506001600055505050505050565b600260005414156112e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611375573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611399919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166113e8576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806113f483613583565b915091508161142f576040517f1fdd676f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611437613875565b831561144d5761144d85858b8660016000613ae3565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632362a2d88b600185338e8e8e6040518863ffffffff1660e01b81526004016114b59796959493929190615663565b6020604051808303816000875af11580156114d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f891906156bf565b90508873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f7dfecd8419723a9d3954585a30c2a270165d70aafa146c11c1e1b88ae14390648460405161157091815260200190565b60405180910390a4505060016000555050505050505050565b600260005414156115f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ab919061560b565b90506116b5613875565b81156116cb576116cb8383338460016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d89061174a903390600090819083908d908d908d90600401615663565b6020604051808303816000875af1158015611769573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178d91906156bf565b5060405173ffffffffffffffffffffffffffffffffffffffff87169033907f460ad03b1cf79b1d64d3aefa28475f110ab66e84649c52bb41ed796b9b39198190600090a35050600160005550505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611849573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118d1576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff90811670010000000000000000000000000000000002911617600255565b6002600054141561196d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000908155606461198461ffff851687615707565b61198e9190615744565b9050611999816144f7565b6119a2816145e8565b6119ab84614668565b6119b3613875565b6040517f172c48c7000000000000000000000000000000000000000000000000000000008152600060048201819052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a64919061577f565b61ffff169150611a789050816127106157ae565b611a829083615707565b611a8c8288615707565b11611ac3576040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff86811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611b5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b81919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638587604051611bef92919091825261ffff16602082015260400190565b60405180910390a3611c2386827f00000000000000000000000000000000000000000000000000000000000000008a6139b7565b505060016000555050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526006602052604081205415155b92915050565b60026000541415611ccd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611cdb856144f7565b611ce484614668565b611ced856145e8565b600154700100000000000000000000000000000000900460ff1615611d3e576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d46613875565b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff85811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611de0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e04919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638885604051611e7292919091825261ffff16602082015260400190565b60405180910390a38215611e9057611e908484878460006001613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015611f1957600080fd5b505af1158015611f2d573d6000803e3d6000fd5b505060016000555050505050505050565b6000611c5a60058361480f565b60026000541415611fb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa15801561204b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206f919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166120be576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120c661481b565b6120fc576040517f7e52ccb400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061210782612668565b509050612112613875565b82156121285761212884848a8560016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d8906121aa908c90600290879033908f908f908f90600401615663565b6020604051808303816000875af11580156121c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ed91906156bf565b90508773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167ffada13ff2d5e1a1d9da37ad4a4130893b34e3c69c32b17f87ec31fd661b867078460405161226591815260200190565b60405180910390a45050600160005550505050505050565b6060612289600561486b565b905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612381576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561242f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612453919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146124b7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614878565b5050565b60026000541415612533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156125c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e8919061560b565b90506125f4818361489a565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401610c00565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126fc919061560b565b905060008061270b8387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156127a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127c991906156bf565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015291965061271091851690637afb010490604401602060405180830381865afa158015612863573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061288791906156bf565b6128919190615744565b9350505050915091565b60026000541415612908576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129bd919061560b565b90506129c7613875565b8115612a7e576129dc83833384600080613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015612a6557600080fd5b505af1158015612a79573d6000803e3d6000fd5b505050505b5050600160005550565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612af3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b17919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b7b576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614c92565b600080612b9283612668565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152919350600092507f000000000000000000000000000000000000000000000000000000000000000090911690633192195c906024016040805180830381865afa158015612c26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4a91906157c5565b9150819050612c5b61271084615707565b612c659190615744565b949350505050565b60026000541415612cda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063fdd5764590602401602060405180830381865afa158015612d6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d91919061560b565b73ffffffffffffffffffffffffffffffffffffffff161480612dd7575073ffffffffffffffffffffffffffffffffffffffff831660009081526006602052604090205415155b15612e0e576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612eac57600080fd5b505af1158015611c23573d6000803e3d6000fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f4f919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612fb3576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000061300a576040517f50dd11fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805464ffffffffff90921671010000000000000000000000000000000000027fffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffffff909216919091179055565b6040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063f67c5bd090602401602060405180830381865afa1580156130e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061310c91906156bf565b905080158015906131ab5750807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015613184573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a891906156bf565b16155b9392505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561321d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613241919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146132a5576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018054911515700100000000000000000000000000000000027fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff909216919091179055565b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600060448301819052917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561338c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133b091906156bf565b90506133bb816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f98274bf834d179ee08dc0604071b0dc90b54731bd5f725a5a96a39a86bce025a8360405161340391815260200190565b60405180910390a250505050565b61341a816144f7565b600154700100000000000000000000000000000000900460ff161561346b576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600160448301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561350c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061353091906156bf565b905061353b816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f9cac51154cc0d835e2f9c9d1f59a9344588cee107f4203bf58a8c797e3a58c458360405161340391815260200190565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613617919061560b565b90506000806136268387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156136c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136e491906156bf565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529195506000917f00000000000000000000000000000000000000000000000000000000000000001690633192195c906024016040805180830381865afa158015613775573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061379991906157c5565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350600092506127109187169063f9a6503090604401602060405180830381865afa158015613837573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061385b91906156bf565b6138659190615707565b9092109794965093945050505050565b34156139b5577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156138e357600080fd5b505af11580156138f7573d6000803e3d6000fd5b50506040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201523460248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16935063a9059cbb925060440190506020604051808303816000875af115801561398f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139b391906157e9565b505b565b6139c084614cb4565b6040517f830aa74500000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f0000000000000000000000000000000000000000000000000000000000000000169063830aa74590608401600060405180830381600087803b158015613a5e57600080fd5b505af1158015613a72573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fa32435755c235de2976ed44a75a2f85cb01faf0c894f639fe0c32bb9455fea8f83604051613ad591815260200190565b60405180910390a350505050565b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301523060248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b158015613b7257600080fd5b505af1158015613b86573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff871692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a28460005b8181101561441d5736888883818110613bea57613bea615806565b9050602002810190613bfc9190615835565b90506004613c0d6020830183615873565b90501015613c47576040517fe2b0e50600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b30613c5560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16141561421c578415613ca9576040517f5fb9107f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613cb86020830183615873565b613cc1916158d8565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167f59781034000000000000000000000000000000000000000000000000000000001415613e3c5760008080613d1e6020860186615873565b613d2c916004908290615920565b810190613d39919061522e565b925092509250613e34838c73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614613e2b576040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015613e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e26919061560b565b613e2d565b8b5b84846139b7565b505050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2b7c7b11000000000000000000000000000000000000000000000000000000001415613ec757600194506000613e996020840184615873565b613ea7916004908290615920565b810190613eb49190615215565b9050613ec1898983613411565b50614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2a7ba1f7000000000000000000000000000000000000000000000000000000001415613f80578415613f49576040517fc0b0caa800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613f586020840184615873565b613f66916004908290615920565b810190613f739190615215565b9050613ec18989836132eb565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f233a8caa0000000000000000000000000000000000000000000000000000000014156140e457600080613fda6020850185615873565b613fe8916004908290615920565b810190613ff5919061594a565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c8116600483015292945090925082918416906370a0823190602401602060405180830381865afa158015614069573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061408d91906156bf565b10156140dd576040517fa5ac537300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016108e7565b5050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fc690908a00000000000000000000000000000000000000000000000000000000141561416457600061413d6020840184615873565b61414b916004908290615920565b81019061415891906151f8565b9050613ec1888261489a565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f23e27a640000000000000000000000000000000000000000000000000000000014156141e45760006141bd6020840184615873565b6141cb916004908290615920565b8101906141d891906151f8565b9050613ec18882614d42565b6040517f1e9e7e7a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50614414565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff68754361426760208501856151f8565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156142d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142f4919061560b565b73ffffffffffffffffffffffffffffffffffffffff16148061436d575073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001661435560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16145b156143a4576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6144126143b46020830183615873565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506143f69250505060208401846151f8565b73ffffffffffffffffffffffffffffffffffffffff1690614e39565b505b50600101613bcf565b506040517f60c8e8938c9a0c0d88a98d6f1c562ce68077e12bf3edb8047378f2f736cb45b490600090a16040517fe1998cf900000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff86811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b1580156144d657600080fd5b505af11580156144ea573d6000803e3d6000fd5b5050505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006139b3576001546fffffffffffffffffffffffffffffffff9081169081146124c257600454608081901c906fffffffffffffffffffffffffffffffff16600067ffffffffffffffff8316431461456e578461458a565b61458a6fffffffffffffffffffffffffffffffff831686615976565b9050838111156145c6576040517f675f1a5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff81164360801b176004555050505050565b6002546fffffffffffffffffffffffffffffffff16811080614631575060025470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681115b156139b3576040517fce16799400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61467061481b565b156146a7576040517f63fc31c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1615614806577f0000000000000000000000000000000000000000000000000000000000000000801561472657503373ffffffffffffffffffffffffffffffffffffffff821614155b1561475d576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600160248301527f00000000000000000000000000000000000000000000000000000000000000001690639dc29fac90604401600060405180830381600087803b1580156147ed57600080fd5b505af1158015614801573d6000803e3d6000fd5b505050505b6139b381614cb4565b60006131ab8383614e7b565b60007f0000000000000000000000000000000000000000000000000000000000000000801561228957505060015471010000000000000000000000000000000000900464ffffffffff1642101590565b606060006131ab83614ea5565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f01565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561492b57600080fd5b505af115801561493f573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527fdf498aa1c340e992665d6fb4f3be8436d452c45a630cb6d7fab7963da39bac8793500190505b60405180910390a15050565b6040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600091829160019183917f00000000000000000000000000000000000000000000000000000000000000001690638991b2f190602401602060405180830381865afa158015614a2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a5391906156bf565b90505b808211614c895780821615614c7d576040517fe75538c700000000000000000000000000000000000000000000000000000000815260048101839052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e75538c7906024016040805180830381865afa158015614af4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b18919061577f565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529294509092506000918416906370a0823190602401602060405180830381865afa158015614b8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bb191906156bf565b90506001811115614c79576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff8481166024830152600091908b169063f9a6503090604401602060405180830381865afa158015614c33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c5791906156bf565b978801979050614c6b61ffff841682615707565b614c759088615976565b9650505b5050505b600182901b9150614a56565b50509250929050565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f50565b3373ffffffffffffffffffffffffffffffffffffffff821614801590614d0b575033600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16155b156139b3576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b158015614dd357600080fd5b505af1158015614de7573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527f69db9e9764da61b6681b89fb0f5be018506e0342036e56b59c3015a620d60977935001905061498d565b60606131ab83836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250615043565b6000826000018281548110614e9257614e92615806565b9060005260206000200154905092915050565b606081600001805480602002602001604051908101604052809291908181526020018280548015614ef557602002820191906000526020600020905b815481526020019060010190808311614ee1575b50505050509050919050565b6000818152600183016020526040812054614f4857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611c5a565b506000611c5a565b60008181526001830160205260408120548015615039576000614f746001836157ae565b8554909150600090614f88906001906157ae565b9050818114614fed576000866000018281548110614fa857614fa8615806565b9060005260206000200154905080876000018481548110614fcb57614fcb615806565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080614ffe57614ffe61598e565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611c5a565b6000915050611c5a565b6060612c65848460008585843b6150b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108e7565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516150df91906159ed565b60006040518083038185875af1925050503d806000811461511c576040519150601f19603f3d011682016040523d82523d6000602084013e615121565b606091505b509150915061513182828661513c565b979650505050505050565b6060831561514b5750816131ab565b82511561515b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e791906159ff565b73ffffffffffffffffffffffffffffffffffffffff811681146139b357600080fd5b80151581146139b357600080fd5b600080604083850312156151d257600080fd5b82356151dd8161518f565b915060208301356151ed816151b1565b809150509250929050565b60006020828403121561520a57600080fd5b81356131ab8161518f565b60006020828403121561522757600080fd5b5035919050565b60008060006060848603121561524357600080fd5b833561524e8161518f565b9250602084013561525e8161518f565b929592945050506040919091013590565b60008083601f84011261528157600080fd5b50813567ffffffffffffffff81111561529957600080fd5b6020830191508360208260051b85010111156152b457600080fd5b9250929050565b60008060008060008060a087890312156152d457600080fd5b86356152df8161518f565b955060208701356152ef8161518f565b9450604087013593506060870135615306816151b1565b9250608087013567ffffffffffffffff81111561532257600080fd5b61532e89828a0161526f565b979a9699509497509295939492505050565b60008060008060006080868803121561535857600080fd5b85356153638161518f565b945060208601359350604086013561537a816151b1565b9250606086013567ffffffffffffffff81111561539657600080fd5b6153a28882890161526f565b969995985093965092949392505050565b80356fffffffffffffffffffffffffffffffff811681146153d357600080fd5b919050565b600080604083850312156153eb57600080fd5b6153f4836153b3565b9150615402602084016153b3565b90509250929050565b61ffff811681146139b357600080fd5b6000806000806080858703121561543157600080fd5b8435935060208501356154438161518f565b925060408501356154538161540b565b915060608501356154638161540b565b939692955090935050565b60008060008060006080868803121561548657600080fd5b8535945060208601356154988161518f565b9350604086013567ffffffffffffffff8111156154b457600080fd5b6154c08882890161526f565b90945092505060608601356154d48161540b565b809150509295509295909350565b6020808252825182820181905260009190848201906040850190845b8181101561553057835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016154fe565b50909695505050505050565b60006020828403121561554e57600080fd5b6131ab826153b3565b6000806020838503121561556a57600080fd5b823567ffffffffffffffff81111561558157600080fd5b61558d8582860161526f565b90969095509350505050565b600080604083850312156155ac57600080fd5b82356155b78161518f565b915060208301356151ed8161518f565b6000602082840312156155d957600080fd5b813564ffffffffff811681146131ab57600080fd5b60006020828403121561560057600080fd5b81356131ab816151b1565b60006020828403121561561d57600080fd5b81516131ab8161518f565b6003811061565f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b73ffffffffffffffffffffffffffffffffffffffff888116825260e082019061568f602084018a615628565b6040830197909752948616606082015292909416608083015260a082015291151560c09092019190915292915050565b6000602082840312156156d157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561573f5761573f6156d8565b500290565b60008261577a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000806040838503121561579257600080fd5b825161579d8161518f565b60208401519092506151ed8161540b565b6000828210156157c0576157c06156d8565b500390565b600080604083850312156157d857600080fd5b505080516020909101519092909150565b6000602082840312156157fb57600080fd5b81516131ab816151b1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc183360301811261586957600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126158a857600080fd5b83018035915067ffffffffffffffff8211156158c357600080fd5b6020019150368190038213156152b457600080fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156159185780818660040360031b1b83161692505b505092915050565b6000808585111561593057600080fd5b8386111561593d57600080fd5b5050820193919092039150565b6000806040838503121561595d57600080fd5b82356159688161518f565b946020939093013593505050565b60008219821115615989576159896156d8565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60005b838110156159d85781810151838201526020016159c0565b838111156159e7576000848401525b50505050565b600082516158698184602087016159bd565b6020815260008251806020840152615a1e8160408501602087016159bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea2646970667358221220a3f4a705ab580a6ada1e438cd2ee4abc001b62d1d171fce12c41994900fef21664736f6c634300080a003360a06040523480156200001157600080fd5b5060405162005f3d38038062005f3d8339810160408190526200003491620012eb565b826001600160a01b031663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000073573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200009991906200147f565b6001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000d7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000fd91906200147f565b6000805460ff191690556001600160a01b0381166200012f57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200016e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200019491906200147f565b6001600160a01b03908116608052600180546001600160a01b031916918616918217905560408051636f307dc360e01b81529051919250636f307dc39160048083019260209291908290030181865afa158015620001f6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200021c91906200147f565b600260006101000a8154816001600160a01b0302191690836001600160a01b03160217905550826001600160a01b031663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000281573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a791906200147f565b6001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200030b91906200147f565b600080546001600160a01b039290921661010002610100600160a81b0319909216919091179055620003626103e860c86200034b6101f4612710620014bc565b60646200035c60c8612710620014bc565b620005e8565b60408101515160005b81811015620003ee576000836040015182815181106200038f576200038f620014e2565b6020026020010151600001519050620003ae81620007c260201b60201c565b620003e48185604001518481518110620003cc57620003cc620014e2565b60200260200101516020015162000a5e60201b60201c565b506001016200036b565b5060015460408051632630c12f60e01b815290516001600160a01b03909216916311ca4fc29186918491632630c12f9160048083019260209291908290030181865afa15801562000443573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200046991906200147f565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401600060405180830381600087803b158015620004b257600080fd5b505af1158015620004c7573d6000803e3d6000fd5b50506040516001600160a01b03861692507fa8b21f72cb83bce808df32dc2330217d744a1c22f3e9e44e4b11bbf049d37d9d9150600090a2600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000553573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200057991906200147f565b6001600160a01b03167f3f82447be465b0b5a4a9e54c74d5f6ae73f2e9537f2cc1590a340524703d096160405160405180910390a26020820151620005cb90620005c5906002620014f8565b62000bda565b81516020830151620005de919062000dc8565b5050505062001604565b6000620005f68585620014bc565b60015460405163172c48c760e01b81526000600482018190529293506001600160a01b039091169063172c48c7906024016040805180830381865afa15801562000644573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200066a91906200152a565b9150508061ffff168261ffff1614620006be57620006888262000f47565b60025460405161ffff841681526001600160a01b039091169060008051602062005f1d8339815191529060200160405180910390a25b60015460405163944ac59f60e01b815261ffff808a166004830152808916602483015280881660448301528087166064830152851660848201526001600160a01b039091169063944ac59f9060a401600060405180830381600087803b1580156200072857600080fd5b505af11580156200073d573d6000803e3d6000fd5b505050507f2214a403d5f8d049e52eacca974c6dea01a471e41d6a18903bfaf7dbc709741f878787612710620007749190620014bc565b876200078388612710620014bc565b6040805161ffff96871681529486166020860152928516848401529084166060840152909216608082015290519081900360a00190a150505050505050565b6001600160a01b038116620007ea57604051635919af9760e11b815260040160405180910390fd5b62000809816001600160a01b03166200116f60201b620023381760201c565b620008365760405163df4c572d60e01b81526001600160a01b038216600482015260240160405180910390fd5b6040516370a0823160e01b81523060048201526001600160a01b038216906370a0823190602401602060405180830381865afa92505050801562000899575060408051601f3d908101601f19168201909252620008969181019062001564565b60015b620008b75760405163528ca31d60e01b815260040160405180910390fd5b50600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200090c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200093291906200147f565b604051630f9a650360e41b8152670de0b6b3a764000060048201526001600160a01b038381166024830152919091169063f9a6503090604401602060405180830381865afa925050508015620009a7575060408051601f3d908101601f19168201909252620009a49181019062001564565b60015b620009c5576040516367a7cd4360e01b815260040160405180910390fd5b5060015460405163d48bfca760e01b81526001600160a01b0383811660048301529091169063d48bfca790602401600060405180830381600087803b15801562000a0e57600080fd5b505af115801562000a23573d6000803e3d6000fd5b50506040516001600160a01b03841692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a250565b6002546001600160a01b038381169116141562000a8e57604051633b899cf960e01b815260040160405180910390fd5b60015460405163172c48c760e01b8152600060048201819052916001600160a01b03169063172c48c7906024016040805180830381865afa15801562000ad8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000afe91906200152a565b91505061ffff8216158062000b1a57508061ffff168261ffff16115b1562000b39576040516333c6608d60e01b815260040160405180910390fd5b600154604051635385e2a160e11b81526001600160a01b03858116600483015261ffff851660248301529091169063a70bc54290604401600060405180830381600087803b15801562000b8b57600080fd5b505af115801562000ba0573d6000803e3d6000fd5b505060405161ffff851681526001600160a01b038616925060008051602062005f1d833981519152915060200160405180910390a2505050565b600062000be662001175565b6001600160a01b031663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801562000c24573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c4a91906200157e565b50509050600062000c606200117560201b60201c565b6001600160a01b031663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa15801562000c9d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000cc39190620015d5565b915050806001600160801b0316836001600160801b0316101562000cfa576040516309aadd6f60e41b815260040160405180910390fd5b826001600160801b0316826001600160801b03161462000dc35762000d1e62001175565b604051632715681560e21b81526001600160801b03851660048201526001600160a01b039190911690639c55a05490602401600060405180830381600087803b15801562000d6b57600080fd5b505af115801562000d80573d6000803e3d6000fd5b50506040516001600160801b03861681527fa030eec20ae970821387224ec3bb15b4bd22b89bfb86dc4d2b3827aa3d99e48d925060200190505b60405180910390a15b505050565b600062000dd462001175565b6001600160a01b031663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801562000e12573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e3891906200157e565b50509050816001600160801b0316836001600160801b0316118062000e6e5750806001600160801b0316826001600160801b0316115b1562000e8d576040516309aadd6f60e41b815260040160405180910390fd5b62000e9762001175565b60405163300eb37b60e11b81526001600160801b038086166004830152841660248201526001600160a01b03919091169063601d66f690604401600060405180830381600087803b15801562000eec57600080fd5b505af115801562000f01573d6000803e3d6000fd5b5050604080516001600160801b038088168252861660208201527f4d4981437d0211f9e6843eb024d9ada1fa3a99514d4343d4aece106dd11524bb935001905062000dba565b600154600254604051635385e2a160e11b81526001600160a01b03918216600482015261ffff8416602482015291169063a70bc54290604401600060405180830381600087803b15801562000f9b57600080fd5b505af115801562000fb0573d6000803e3d6000fd5b505050506000600160009054906101000a90046001600160a01b03166001600160a01b031663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200100a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001030919062001564565b905060015b8181101562000dc35760015460405163172c48c760e01b81526004810183905260009182916001600160a01b039091169063172c48c7906024016040805180830381865afa1580156200108c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010b291906200152a565b915091508461ffff168161ffff1611156200116457600154604051635385e2a160e11b81526001600160a01b03848116600483015261ffff881660248301529091169063a70bc54290604401600060405180830381600087803b1580156200111957600080fd5b505af11580156200112e573d6000803e3d6000fd5b505060405161ffff881681526001600160a01b038516925060008051602062005f1d833981519152915060200160405180910390a25b505060010162001035565b3b151590565b60015460408051632f7a188160e01b815290516000926001600160a01b031691632f7a18819160048083019260209291908290030181865afa158015620011c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011e691906200147f565b905090565b6001600160a01b03811681146200120157600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b03811182821017156200123f576200123f62001204565b60405290565b604080519081016001600160401b03811182821017156200123f576200123f62001204565b604051601f8201601f191681016001600160401b038111828210171562001295576200129562001204565b604052919050565b80516001600160801b0381168114620012b557600080fd5b919050565b8051620012b581620011eb565b805161ffff81168114620012b557600080fd5b80518015158114620012b557600080fd5b6000806000606084860312156200130157600080fd5b83516200130e81620011eb565b809350506020808501516200132381620011eb565b604086810151919450906001600160401b03808211156200134357600080fd5b9087019060a0828a0312156200135857600080fd5b620013626200121a565b6200136d836200129d565b81526200137c8584016200129d565b8582015283830151828111156200139257600080fd5b8301601f81018b13620013a457600080fd5b805183811115620013b957620013b962001204565b620013c9878260051b016200126a565b818152878101945060069190911b82018701908c821115620013ea57600080fd5b918701915b81831015620014435786838e031215620014095760008081fd5b6200141362001245565b83516200142081620011eb565b81526200142f848a01620012c7565b818a015285529387019391860191620013ef565b838701525062001458905060608401620012ba565b60608201526200146b60808401620012da565b608082015280955050505050509250925092565b6000602082840312156200149257600080fd5b81516200149f81620011eb565b9392505050565b634e487b7160e01b600052601160045260246000fd5b600061ffff83811690831681811015620014da57620014da620014a6565b039392505050565b634e487b7160e01b600052603260045260246000fd5b60006001600160801b0382811684821681151582840482111615620015215762001521620014a6565b02949350505050565b600080604083850312156200153e57600080fd5b82516200154b81620011eb565b91506200155b60208401620012c7565b90509250929050565b6000602082840312156200157757600080fd5b5051919050565b6000806000606084860312156200159457600080fd5b6200159f846200129d565b9250620015af60208501620012da565b9150604084015164ffffffffff81168114620015ca57600080fd5b809150509250925092565b60008060408385031215620015e957600080fd5b620015f4836200129d565b91506200155b602084016200129d565b608051614878620016a56000396000818161033601528181610446015281816107c5015281816108c0015281816109ae01528181610b8301528181610f0a015281816113e1015281816114cf015281816115bb015281816116ab015281816117990152818161187d01528181611ad901528181611bc601528181611cb301528181611da0015281816120090152818161218c015261227901526148786000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80638456cb59116100f9578063dc2b21c111610097578063f0527ac611610071578063f0527ac6146103d7578063f206d32a146103df578063fb1bd8c4146103f2578063ffd9b9071461040557600080fd5b8063dc2b21c11461039e578063e6492d7b146103b1578063eb9606df146103c457600080fd5b8063a50cf2c8116100d3578063a50cf2c814610331578063a70bc54214610358578063b53472ef1461036b578063c12c21c01461037e57600080fd5b80638456cb59146103035780639c55a0541461030b5780639f1c50691461031e57600080fd5b806350e036ff1161016657806354fd4d501161014057806354fd4d50146102b25780635c975abb146102ba5780636f307dc3146102d05780637bccacee146102f057600080fd5b806350e036ff1461027657806352438e541461028c578063526a41e81461029f57600080fd5b80633e7c88d6116101a25780633e7c88d6146102355780633f4ba83a14610248578063456e0742146102505780635094cb4f1461026357600080fd5b806324147708146101c95780632954018c146101de5780632f7a18811461022d575b600080fd5b6101dc6101d7366004614307565b610418565b005b60005461020390610100900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6102036106fe565b6101dc610243366004614334565b610797565b6101dc610892565b6101dc61025e366004614307565b610980565b61020361027136600461436d565b610b36565b61027e610b49565b604051908152602001610224565b6101dc61029a366004614307565b610b55565b6101dc6102ad366004614394565b610edc565b61027e600281565b60005460ff166040519015158152602001610224565b6002546102039073ffffffffffffffffffffffffffffffffffffffff1681565b6101dc6102fe3660046143c2565b6113b3565b6101dc6114a1565b6101dc61031936600461440e565b61158d565b6101dc61032c36600461442b565b61167d565b6102037f000000000000000000000000000000000000000000000000000000000000000081565b6101dc610366366004614334565b61176b565b6101dc610379366004614307565b61184f565b6001546102039073ffffffffffffffffffffffffffffffffffffffff1681565b6101dc6103ac366004614459565b611aab565b6101dc6103bf366004614307565b611b98565b6101dc6103d236600461448f565b611c85565b6101dc611d72565b6101dc6103ed3660046144ac565b611fdb565b6101dc610400366004614307565b61215e565b6101dc61041336600461451d565b61224b565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156104a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c6919061453a565b6104fc576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006105078261233e565b90506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015610578573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059c9190614557565b90508181166106f9576001546040517fa366f496000000000000000000000000000000000000000000000000000000008152918317600483018190529173ffffffffffffffffffffffffffffffffffffffff9091169063a366f49690602401600060405180830381600087803b15801561061557600080fd5b505af1158015610629573d6000803e3d6000fd5b505050506106356106fe565b6040517fffd9b9070000000000000000000000000000000000000000000000000000000081526001600482015273ffffffffffffffffffffffffffffffffffffffff919091169063ffd9b90790602401600060405180830381600087803b15801561069f57600080fd5b505af11580156106b3573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692507ff17b849746e74d7186170c9553d4bbf60b4f8bb1ed81fe50c099b934fb078f059150600090a25b505050565b600154604080517f2f7a1881000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691632f7a18819160048083019260209291908290030181865afa15801561076e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610792919061457b565b905090565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610821573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610845919061453a565b61087b576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108848261241e565b61088e82826127f8565b5050565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa15801561091c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610940919061453a565b610976576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61097e612a15565b565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610a0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2e919061453a565b610a64576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a6d81612af6565b6001546040517f9f5f86ae00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015290911690639f5f86ae90602401600060405180830381600087803b158015610ada57600080fd5b505af1158015610aee573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507f5a0b7d0f9c24b39256e112a0584b4c5ce38d8f1dee2e7c56f15b852604cdc8869150600090a250565b6000610b43600383612cb8565b92915050565b60006107926003612ccb565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610bdf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c03919061453a565b610c39576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610c86576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063fdd5764590602401602060405180830381865afa158015610cf7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1b919061457b565b905073ffffffffffffffffffffffffffffffffffffffff8116610d6a576040517f1170cc2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f6e98e5e400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526000602483015290911690636e98e5e490604401600060405180830381600087803b158015610dde57600080fd5b505af1158015610df2573d6000803e3d6000fd5b50506001546040517f6e98e5e40000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff86811660248301529091169250636e98e5e49150604401600060405180830381600087803b158015610e6a57600080fd5b505af1158015610e7e573d6000803e3d6000fd5b50505050610e96826003612cd590919063ffffffff16565b5060405173ffffffffffffffffffffffffffffffffffffffff8316907fab9f405bf0c19b97f65a7031634db41569cd2f0e0376a610a1e977f9ab22b58f90600090a25050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610f66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8a919061453a565b610fc0576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fc982612af6565b6000806000610fd66106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015611020573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110449190614598565b9250925092506000806110556106fe565b73ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa15801561109e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c291906145e5565b9150915060006110d06106fe565b73ffffffffffffffffffffffffffffffffffffffff16639be0536a6040518163ffffffff1660e01b8152600401600060405180830381865afa15801561111a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526111609190810190614643565b9050600061116c6106fe565b73ffffffffffffffffffffffffffffffffffffffff1663b1836d326040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111da919061453a565b600154604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905192935073ffffffffffffffffffffffffffffffffffffffff909116916311ca4fc2918c918491632630c12f9160048083019260209291908290030181865afa158015611256573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061127a919061457b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156112e757600080fd5b505af11580156112fb573d6000803e3d6000fd5b5050505087156113675761130e87612cf7565b6113188484612f5d565b61132186613152565b60005b82518110156113575761134f83828151811061134257611342614726565b60200260200101516132a3565b600101611324565b50801561136757611367856133c9565b60405173ffffffffffffffffffffffffffffffffffffffff8a16907fa8b21f72cb83bce808df32dc2330217d744a1c22f3e9e44e4b11bbf049d37d9d90600090a2505050505050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561143d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611461919061453a565b611497576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61088e828261357b565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561152b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061154f919061453a565b611585576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61097e6139c3565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611617573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163b919061453a565b611671576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81612cf7565b50565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611707573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172b919061453a565b611761576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61088e8282612f5d565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156117f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611819919061453a565b610884576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156118d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fd919061453a565b611933576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061193e8261233e565b90506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d39190614557565b9050818116156106f9576001546040517fa366f496000000000000000000000000000000000000000000000000000000008152918318600483018190529173ffffffffffffffffffffffffffffffffffffffff9091169063a366f49690602401600060405180830381600087803b158015611a4d57600080fd5b505af1158015611a61573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a2505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611b35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b59919061453a565b611b8f576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81613a83565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611c22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c46919061453a565b611c7c576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81613b3d565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611d0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d33919061453a565b611d69576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a816133c9565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611dfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e20919061453a565b611e56576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ec4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee8919061457b565b60015490915073ffffffffffffffffffffffffffffffffffffffff166311ca4fc2611f116106fe565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff91821660048201529084166024820152604401600060405180830381600087803b158015611f7f57600080fd5b505af1158015611f93573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507f3f82447be465b0b5a4a9e54c74d5f6ae73f2e9537f2cc1590a340524703d09619150600090a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015612065573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612089919061453a565b6120bf576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61271061ffff86161015806120e357506127106120dc8585614784565b61ffff1610155b806120fd57506127106120f68383614784565b61ffff1610155b15612134576040517f0b361d6900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6121578585612145866127106147aa565b85612152866127106147aa565b613c5c565b5050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156121e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061220c919061453a565b612242576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a816132a3565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156122d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122f9919061453a565b61232f576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81613152565b3b151590565b6001546040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063f67c5bd090602401602060405180830381865afa1580156123af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123d39190614557565b90508015806123e25750806001145b15612419576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b73ffffffffffffffffffffffffffffffffffffffff811661246b576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163b6124d6576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024015b60405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8216906370a0823190602401602060405180830381865afa92505050801561257a575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261257791810190614557565b60015b6125b0576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561261e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612642919061457b565b6040517ff9a65030000000000000000000000000000000000000000000000000000000008152670de0b6b3a7640000600482015273ffffffffffffffffffffffffffffffffffffffff8381166024830152919091169063f9a6503090604401602060405180830381865afa9250505080156126f8575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526126f591810190614557565b60015b61272e576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506001546040517fd48bfca700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301529091169063d48bfca790602401600060405180830381600087803b15801561279c57600080fd5b505af11580156127b0573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a250565b60025473ffffffffffffffffffffffffffffffffffffffff8381169116141561284d576040517f3b899cf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f172c48c70000000000000000000000000000000000000000000000000000000081526000600482018190529173ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa1580156128bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128e091906147cd565b91505061ffff821615806128fb57508061ffff168261ffff16115b15612932576040517f33c6608d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015261ffff851660248301529091169063a70bc54290604401600060405180830381600087803b1580156129a957600080fd5b505af11580156129bd573d6000803e3d6000fd5b505060405161ffff8516815273ffffffffffffffffffffffffffffffffffffffff861692507f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650915060200160405180910390a2505050565b60005460ff16612a81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016124cd565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b73ffffffffffffffffffffffffffffffffffffffff8116612b43576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163b612ba9576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024016124cd565b8073ffffffffffffffffffffffffffffffffffffffff1663c12c21c06040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612c2e575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252612c2b9181019061457b565b60015b612c64576040517fe9eddd1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60015473ffffffffffffffffffffffffffffffffffffffff82811691161461088e576040517fe9eddd1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612cc48383613e92565b9392505050565b6000610b43825490565b6000612cc48373ffffffffffffffffffffffffffffffffffffffff8416613ebc565b6000612d016106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015612d4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d6f9190614598565b505090506000612d7d6106fe565b73ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa158015612dc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dea91906145e5565b915050806fffffffffffffffffffffffffffffffff16836fffffffffffffffffffffffffffffffff161015612e4b576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826fffffffffffffffffffffffffffffffff16826fffffffffffffffffffffffffffffffff16146106f957612e7e6106fe565b6040517f9c55a0540000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff8516600482015273ffffffffffffffffffffffffffffffffffffffff9190911690639c55a05490602401600060405180830381600087803b158015612ef957600080fd5b505af1158015612f0d573d6000803e3d6000fd5b50506040516fffffffffffffffffffffffffffffffff861681527fa030eec20ae970821387224ec3bb15b4bd22b89bfb86dc4d2b3827aa3d99e48d925060200190505b60405180910390a1505050565b6000612f676106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015612fb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fd59190614598565b50509050816fffffffffffffffffffffffffffffffff16836fffffffffffffffffffffffffffffffff16118061302e5750806fffffffffffffffffffffffffffffffff16826fffffffffffffffffffffffffffffffff16115b15613065576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61306d6106fe565b6040517f601d66f60000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff80861660048301528416602482015273ffffffffffffffffffffffffffffffffffffffff919091169063601d66f690604401600060405180830381600087803b1580156130f057600080fd5b505af1158015613104573d6000803e3d6000fd5b5050604080516fffffffffffffffffffffffffffffffff8088168252861660208201527f4d4981437d0211f9e6843eb024d9ada1fa3a99514d4343d4aece106dd11524bb9350019050612f50565b600061315c6106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa1580156131a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131ca9190614598565b509150508015158215151461088e576131e16106fe565b6040517fffd9b907000000000000000000000000000000000000000000000000000000008152831515600482015273ffffffffffffffffffffffffffffffffffffffff919091169063ffd9b90790602401600060405180830381600087803b15801561324c57600080fd5b505af1158015613260573d6000803e3d6000fd5b505050507ff97ba903470ff3262b4a68a938fe81def401bac1bd742169d2e8d5c4ed2185d382604051613297911515815260200190565b60405180910390a15050565b73ffffffffffffffffffffffffffffffffffffffff81166132f0576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6132f86106fe565b6040517fb55bb84b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152919091169063b55bb84b90602401600060405180830381600087803b15801561336357600080fd5b505af1158015613377573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841681527fdac9a7995cbc0c0f01d78970fb6fd0b52fe0fe869eb6635e65cc1b5682b8325c925060200190505b60405180910390a150565b60006133d36106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801561341d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134419190614598565b925050508064ffffffffff168264ffffffffff161461088e578164ffffffffff168164ffffffffff16118061347c57508164ffffffffff1642115b156134b3576040517fe4eaca7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134bb6106fe565b6040517feb9606df00000000000000000000000000000000000000000000000000000000815264ffffffffff8416600482015273ffffffffffffffffffffffffffffffffffffffff919091169063eb9606df90602401600060405180830381600087803b15801561352b57600080fd5b505af115801561353f573d6000803e3d6000fd5b505060405164ffffffffff851681527f0b3eb35ba750e7a7e4d26c9eee3d226f4e1f68c5568f4a3d051c94b241b02ac092506020019050613297565b73ffffffffffffffffffffffffffffffffffffffff82166135c8576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82163b61362e576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016124cd565b61363781612af6565b60015473ffffffffffffffffffffffffffffffffffffffff8381169116148061369257506136636106fe565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b806136b7575060015473ffffffffffffffffffffffffffffffffffffffff8281169116145b806136f457506136c56106fe565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b1561372b576040517f727de5c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517fff68754300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063ff68754390602401602060405180830381865afa15801561379c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137c0919061457b565b73ffffffffffffffffffffffffffffffffffffffff1614158061388c57506001546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063fdd5764590602401602060405180830381865afa15801561384f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613873919061457b565b73ffffffffffffffffffffffffffffffffffffffff1614155b156138c3576040517f21ff1e7100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f6e98e5e400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152848116602483015290911690636e98e5e490604401600060405180830381600087803b15801561393857600080fd5b505af115801561394c573d6000803e3d6000fd5b50505050613964826003613faf90919063ffffffff16565b508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4bcbefaef68b99503d502f5a6abe7bca2b183ab8ac55457013c77d084ebd130560405160405180910390a35050565b60005460ff1615613a30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016124cd565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612acc3390565b6001546040517fdc2b21c100000000000000000000000000000000000000000000000000000000815260ff8316600482015273ffffffffffffffffffffffffffffffffffffffff9091169063dc2b21c190602401600060405180830381600087803b158015613af157600080fd5b505af1158015613b05573d6000803e3d6000fd5b505060405160ff841681527f73caacd705657a7d283e48ecf288b73bc517e3aea1bbc9da2fd54a979e8aa950925060200190506133be565b73ffffffffffffffffffffffffffffffffffffffff8116613b8a576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613b926106fe565b6040517fdcf6548200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152919091169063dcf6548290602401600060405180830381600087803b158015613bfd57600080fd5b505af1158015613c11573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841681527f32e53e2e527af8518ae889e5f7e674bc83f7cf68e4cc059aceeaa0e64208b85b925060200190506133be565b6000613c6885856147aa565b6001546040517f172c48c700000000000000000000000000000000000000000000000000000000815260006004820181905292935073ffffffffffffffffffffffffffffffffffffffff9091169063172c48c7906024016040805180830381865afa158015613cdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cff91906147cd565b9150508061ffff168261ffff1614613d6e57613d1a82613fd1565b60025460405161ffff8416815273ffffffffffffffffffffffffffffffffffffffff909116907f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac6509060200160405180910390a25b6001546040517f944ac59f00000000000000000000000000000000000000000000000000000000815261ffff808a1660048301528089166024830152808816604483015280871660648301528516608482015273ffffffffffffffffffffffffffffffffffffffff9091169063944ac59f9060a401600060405180830381600087803b158015613dfd57600080fd5b505af1158015613e11573d6000803e3d6000fd5b505050507f2214a403d5f8d049e52eacca974c6dea01a471e41d6a18903bfaf7dbc709741f878787612710613e4691906147aa565b87613e53886127106147aa565b6040805161ffff96871681529486166020860152928516848401529084166060840152909216608082015290519081900360a00190a150505050505050565b6000826000018281548110613ea957613ea9614726565b9060005260206000200154905092915050565b60008181526001830160205260408120548015613fa5576000613ee06001836147fc565b8554909150600090613ef4906001906147fc565b9050818114613f59576000866000018281548110613f1457613f14614726565b9060005260206000200154905080876000018481548110613f3757613f37614726565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080613f6a57613f6a614813565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610b43565b6000915050610b43565b6000612cc48373ffffffffffffffffffffffffffffffffffffffff8416614296565b6001546002546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015261ffff8416602482015291169063a70bc54290604401600060405180830381600087803b15801561404a57600080fd5b505af115801561405e573d6000803e3d6000fd5b505050506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156140d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140f59190614557565b905060015b818110156106f9576001546040517f172c48c700000000000000000000000000000000000000000000000000000000815260048101839052600091829173ffffffffffffffffffffffffffffffffffffffff9091169063172c48c7906024016040805180830381865afa158015614175573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061419991906147cd565b915091508461ffff168161ffff16111561428c576001546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015261ffff881660248301529091169063a70bc54290604401600060405180830381600087803b15801561422457600080fd5b505af1158015614238573d6000803e3d6000fd5b505060405161ffff8816815273ffffffffffffffffffffffffffffffffffffffff851692507f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650915060200160405180910390a25b50506001016140fa565b60008181526001830160205260408120546142dd57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610b43565b506000610b43565b73ffffffffffffffffffffffffffffffffffffffff8116811461167a57600080fd5b60006020828403121561431957600080fd5b8135612cc4816142e5565b61ffff8116811461167a57600080fd5b6000806040838503121561434757600080fd5b8235614352816142e5565b9150602083013561436281614324565b809150509250929050565b60006020828403121561437f57600080fd5b5035919050565b801515811461167a57600080fd5b600080604083850312156143a757600080fd5b82356143b2816142e5565b9150602083013561436281614386565b600080604083850312156143d557600080fd5b82356143e0816142e5565b91506020830135614362816142e5565b6fffffffffffffffffffffffffffffffff8116811461167a57600080fd5b60006020828403121561442057600080fd5b8135612cc4816143f0565b6000806040838503121561443e57600080fd5b8235614449816143f0565b91506020830135614362816143f0565b60006020828403121561446b57600080fd5b813560ff81168114612cc457600080fd5b64ffffffffff8116811461167a57600080fd5b6000602082840312156144a157600080fd5b8135612cc48161447c565b600080600080600060a086880312156144c457600080fd5b85356144cf81614324565b945060208601356144df81614324565b935060408601356144ef81614324565b925060608601356144ff81614324565b9150608086013561450f81614324565b809150509295509295909350565b60006020828403121561452f57600080fd5b8135612cc481614386565b60006020828403121561454c57600080fd5b8151612cc481614386565b60006020828403121561456957600080fd5b5051919050565b8051612419816142e5565b60006020828403121561458d57600080fd5b8151612cc4816142e5565b6000806000606084860312156145ad57600080fd5b83516145b8816143f0565b60208501519093506145c981614386565b60408501519092506145da8161447c565b809150509250925092565b600080604083850312156145f857600080fd5b8251614603816143f0565b6020840151909250614362816143f0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000602080838503121561465657600080fd5b825167ffffffffffffffff8082111561466e57600080fd5b818501915085601f83011261468257600080fd5b81518181111561469457614694614614565b8060051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f830116810181811085821117156146d7576146d7614614565b6040529182528482019250838101850191888311156146f557600080fd5b938501935b8285101561471a5761470b85614570565b845293850193928501926146fa565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061ffff8083168185168083038211156147a1576147a1614755565b01949350505050565b600061ffff838116908316818110156147c5576147c5614755565b039392505050565b600080604083850312156147e057600080fd5b82516147eb816142e5565b602084015190925061436281614324565b60008282101561480e5761480e614755565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea264697066735822122046c364b67d38a3dd85b57e027716324d90dd1df102f265f0a0e2697babdb3f3b64736f6c634300080a003394525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650"; - -type CreditManagerFactoryConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: CreditManagerFactoryConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class CreditManagerFactory__factory extends ContractFactory { - constructor(...args: CreditManagerFactoryConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - _pool: string, - opts: CreditManagerOptsStruct, - salt: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - _pool, - opts, - salt, - overrides || {} - ) as Promise; - } - override getDeployTransaction( - _pool: string, - opts: CreditManagerOptsStruct, - salt: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(_pool, opts, salt, overrides || {}); - } - override attach(address: string): CreditManagerFactory { - return super.attach(address) as CreditManagerFactory; - } - override connect(signer: Signer): CreditManagerFactory__factory { - return super.connect(signer) as CreditManagerFactory__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): CreditManagerFactoryInterface { - return new utils.Interface(_abi) as CreditManagerFactoryInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): CreditManagerFactory { - return new Contract( - address, - _abi, - signerOrProvider - ) as CreditManagerFactory; - } -} diff --git a/src/types/factories/contracts/factories/GenesisFactory__factory.ts b/src/types/factories/contracts/factories/GenesisFactory__factory.ts deleted file mode 100644 index 133862a7..00000000 --- a/src/types/factories/contracts/factories/GenesisFactory__factory.ts +++ /dev/null @@ -1,202 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - GenesisFactory, - GenesisFactoryInterface, -} from "../../../contracts/factories/GenesisFactory"; - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "wethToken", - type: "address", - }, - { - internalType: "address", - name: "treasury", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "previousOwner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "OwnershipTransferred", - type: "event", - }, - { - inputs: [], - name: "acl", - outputs: [ - { - internalType: "contract ACL", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - components: [ - { - internalType: "address", - name: "token", - type: "address", - }, - { - internalType: "address", - name: "priceFeed", - type: "address", - }, - ], - internalType: "struct PriceFeedConfig[]", - name: "priceFeeds", - type: "tuple[]", - }, - ], - name: "addPriceFeeds", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "addressProvider", - outputs: [ - { - internalType: "contract AddressProvider", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "owner", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "priceOracle", - outputs: [ - { - internalType: "contract PriceOracle", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "renounceOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "transferOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, -]; - -const _bytecode = - "0x60806040523480156200001157600080fd5b506040516201110538038062011105833981016040819052620000349162000811565b6200003f3362000734565b6040516200004d9062000784565b604051809103906000f0801580156200006a573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b039283169081179091556040516310dc138160e31b81529184166004830152906386e09c0890602401600060405180830381600087803b158015620000c457600080fd5b505af1158015620000d9573d6000803e3d6000fd5b50506001546040516301ed651160e41b81526001600160a01b0385811660048301529091169250631ed651109150602401600060405180830381600087803b1580156200012557600080fd5b505af11580156200013a573d6000803e3d6000fd5b505050506040516200014c9062000792565b604051809103906000f08015801562000169573d6000803e3d6000fd5b50600280546001600160a01b0319166001600160a01b039283169081179091556001546040516376aad60560e01b81526004810192909252909116906376aad60590602401600060405180830381600087803b158015620001c957600080fd5b505af1158015620001de573d6000803e3d6000fd5b5050600154604051600093506001600160a01b0390911691506200020290620007a0565b6001600160a01b039091168152602001604051809103906000f0801580156200022f573d6000803e3d6000fd5b5060015460405163338f12b960e21b81526001600160a01b03808416600483015292935091169063ce3c4ae490602401600060405180830381600087803b1580156200027a57600080fd5b505af11580156200028f573d6000803e3d6000fd5b5050600154604051600093506001600160a01b039091169150620002b390620007ae565b6001600160a01b039091168152602001604051809103906000f080158015620002e0573d6000803e3d6000fd5b5060015460405163c5120b3960e01b81526001600160a01b03808416600483015292935091169063c5120b3990602401600060405180830381600087803b1580156200032b57600080fd5b505af115801562000340573d6000803e3d6000fd5b5050600154604051606093506001600160a01b03909116915082906200036690620007bc565b6200037392919062000849565b604051809103906000f08015801562000390573d6000803e3d6000fd5b50600380546001600160a01b0319166001600160a01b0392831690811790915560015460405163530e784f60e01b815260048101929092529091169063530e784f90602401600060405180830381600087803b158015620003f057600080fd5b505af115801562000405573d6000803e3d6000fd5b5050600154604051600093506001600160a01b0390911691506200042990620007ca565b6001600160a01b039091168152602001604051809103906000f08015801562000456573d6000803e3d6000fd5b506001546040516356ee0d3b60e11b81526001600160a01b03808416600483015292935091169063addc1a7690602401600060405180830381600087803b158015620004a157600080fd5b505af1158015620004b6573d6000803e3d6000fd5b5050600154604051600093506001600160a01b039091169150620004da90620007d8565b6001600160a01b039091168152602001604051809103906000f08015801562000507573d6000803e3d6000fd5b506001546040516321da583760e01b81526001600160a01b0380841660048301529293509116906321da583790602401600060405180830381600087803b1580156200055257600080fd5b505af115801562000567573d6000803e3d6000fd5b505050506000306040516200057c90620007e6565b6001600160a01b039091168152602001604051809103906000f080158015620005a9573d6000803e3d6000fd5b50600154604051631795d5b360e31b81526001600160a01b03808416600483015292935091169063bcaead9890602401600060405180830381600087803b158015620005f457600080fd5b505af115801562000609573d6000803e3d6000fd5b505060405163f2fde38b60e01b81523360048201526001600160a01b038416925063f2fde38b9150602401600060405180830381600087803b1580156200064f57600080fd5b505af115801562000664573d6000803e3d6000fd5b505060015460405163f2fde38b60e01b81523360048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b158015620006ae57600080fd5b505af1158015620006c3573d6000803e3d6000fd5b505060025460405163f2fde38b60e01b81523360048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b1580156200070d57600080fd5b505af115801562000722573d6000803e3d6000fd5b505050505050505050505050620008b2565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610fcd80620010dd83390190565b61098c80620020aa83390190565b610f508062002a3683390190565b614da6806200398683390190565b611b45806200872c83390190565b612ced806200a27183390190565b611627806200cf5e83390190565b612b80806200e58583390190565b80516001600160a01b03811681146200080c57600080fd5b919050565b600080604083850312156200082557600080fd5b6200083083620007f4565b91506200084060208401620007f4565b90509250929050565b6001600160a01b0383811682526040602080840182905284518483018190526000938683019290916060870190865b81811015620008a3578551805186168452840151851684840152948301949186019160010162000878565b50909998505050505050505050565b61081b80620008c26000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80638874ff1f1161005b5780638874ff1f146100f55780638da5cb5b14610108578063de28735914610126578063f2fde38b1461014657600080fd5b80632630c12f146100825780632954018c146100cb578063715018a6146100eb575b600080fd5b6003546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6001546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b6100f3610159565b005b6100f3610103366004610658565b6101eb565b60005473ffffffffffffffffffffffffffffffffffffffff166100a2565b6002546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b6100f3610154366004610734565b6103e3565b60005473ffffffffffffffffffffffffffffffffffffffff1633146101df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6101e96000610513565b565b60005473ffffffffffffffffffffffffffffffffffffffff16331461026c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101d6565b60005b815181101561035c57600354825173ffffffffffffffffffffffffffffffffffffffff9091169063e8a97a3e908490849081106102ae576102ae610756565b6020026020010151600001518484815181106102cc576102cc610756565b6020026020010151602001516040518363ffffffff1660e01b815260040161031792919073ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b600060405180830381600087803b15801561033157600080fd5b505af1158015610345573d6000803e3d6000fd5b50505050808061035490610785565b91505061026f565b506002546040517ff2fde38b00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063f2fde38b90602401600060405180830381600087803b1580156103c857600080fd5b505af11580156103dc573d6000803e3d6000fd5b5050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101d6565b73ffffffffffffffffffffffffffffffffffffffff8116610507576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016101d6565b61051081610513565b50565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156105da576105da610588565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561062757610627610588565b604052919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461065357600080fd5b919050565b6000602080838503121561066b57600080fd5b823567ffffffffffffffff8082111561068357600080fd5b818501915085601f83011261069757600080fd5b8135818111156106a9576106a9610588565b6106b7848260051b016105e0565b818152848101925060069190911b8301840190878211156106d757600080fd5b928401925b8184101561072957604084890312156106f55760008081fd5b6106fd6105b7565b6107068561062f565b815261071386860161062f565b81870152835260409390930192918401916106dc565b979650505050505050565b60006020828403121561074657600080fd5b61074f8261062f565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156107de577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea26469706673582212205ee75e57bb635aa49a1758f4ab0b04182a73115bff08f420c56a8ddb433c029364736f6c634300080a0033608060405234801561001057600080fd5b5061001a3361005f565b60405130906f20a2222922a9a9afa82927ab24a222a960811b907fb37614c7d254ea8d16eb81fa11dddaeb266aa8ba4917980859c7740aff30c69190600090a36100af565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610f0f806100be6000396000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c806377532ed9116100e3578063bcaead981161008c578063ce3c4ae411610066578063ce3c4ae414610308578063f2fde38b1461031b578063fca513a81461032e57600080fd5b8063bcaead98146102da578063c5120b39146102ed578063c513c9bb1461030057600080fd5b80639068a868116100bd5780639068a868146102b7578063addc1a76146102bf578063affd9243146102d257600080fd5b806377532ed91461027e57806386e09c08146102865780638da5cb5b1461029957600080fd5b80634c252f9111610145578063699f200f1161011f578063699f200f1461022d578063715018a61461026357806376aad6051461026b57600080fd5b80634c252f91146101fc578063530e784f1461020457806354fd4d501461021757600080fd5b80631ed65110116101765780631ed65110146101cc57806321da5837146101e157806326c74fc3146101f457600080fd5b8063060678c21461019257806308737695146101c4575b600080fd5b61019a610336565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61019a610366565b6101df6101da366004610e10565b610391565b005b6101df6101ef366004610e10565b610444565b61019a6104ef565b61019a61051a565b6101df610212366004610e10565b610545565b61021f600281565b6040519081526020016101bb565b61019a61023b366004610e4d565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6101df6105f0565b6101df610279366004610e10565b61067d565b61019a610728565b6101df610294366004610e10565b610753565b60005473ffffffffffffffffffffffffffffffffffffffff1661019a565b61019a6107fe565b6101df6102cd366004610e10565b610829565b61019a6108d4565b6101df6102e8366004610e10565b6108ff565b6101df6102fb366004610e10565b6109aa565b61019a610a55565b6101df610316366004610e10565b610a80565b6101df610329366004610e10565b610b2b565b61019a610c58565b60006103617f444154415f434f4d50524553534f520000000000000000000000000000000000610c7f565b905090565b60006103617f41434c0000000000000000000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610417576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6104417f54524541535552595f434f4e545241435400000000000000000000000000000082610d1d565b50565b60005473ffffffffffffffffffffffffffffffffffffffff1633146104c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f574554485f47415445574159000000000000000000000000000000000000000082610d1d565b60006103617f54524541535552595f434f4e5452414354000000000000000000000000000000610c7f565b60006103617f574554485f544f4b454e00000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f50524943455f4f5241434c45000000000000000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610671576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b61067b6000610d9b565b565b60005473ffffffffffffffffffffffffffffffffffffffff1633146106fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f41434c000000000000000000000000000000000000000000000000000000000082610d1d565b60006103617f574554485f474154455741590000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146107d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f574554485f544f4b454e0000000000000000000000000000000000000000000082610d1d565b60006103617f4143434f554e545f464143544f52590000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146108aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f4143434f554e545f464143544f5259000000000000000000000000000000000082610d1d565b60006103617f474541525f544f4b454e00000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610980576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f474541525f544f4b454e0000000000000000000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f444154415f434f4d50524553534f52000000000000000000000000000000000082610d1d565b60006103617f434f4e5452414354535f52454749535445520000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610b01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f434f4e5452414354535f5245474953544552000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610bac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b73ffffffffffffffffffffffffffffffffffffffff8116610c4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161040e565b61044181610d9b565b60006103617f50524943455f4f5241434c4500000000000000000000000000000000000000005b6000818152600160209081526040808320548151808301909252600382527f41503100000000000000000000000000000000000000000000000000000000009282019290925273ffffffffffffffffffffffffffffffffffffffff9091169081610d16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040e9190610e66565b5092915050565b60008281526001602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091559051909184917fb37614c7d254ea8d16eb81fa11dddaeb266aa8ba4917980859c7740aff30c6919190a35050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215610e2257600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610e4657600080fd5b9392505050565b600060208284031215610e5f57600080fd5b5035919050565b600060208083528351808285015260005b81811015610e9357858101830151858201604001528201610e77565b81811115610ea5576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea264697066735822122083c228af017c6f5cf8c395cdf7a53276ff56fdd4f4313c39f680ab73bd75417364736f6c634300080a0033608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61090e8061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063732818191161008c578063adce758d11610066578063adce758d14610215578063ba306df114610228578063d4eb5db01461023b578063f2fde38b1461027457600080fd5b806373281819146101b7578063819ad68e146101da5780638da5cb5b146101ed57600080fd5b806354fd4d50116100bd57806354fd4d501461016a5780635f259aba14610180578063715018a6146101af57600080fd5b806335914829146100e45780633a41ec641461011c5780634910832f14610155575b600080fd5b6101076100f236600461089b565b60016020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61010761012a36600461089b565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205460ff1690565b61016861016336600461089b565b610287565b005b610172600181565b604051908152602001610113565b61010761018e36600461089b565b60005473ffffffffffffffffffffffffffffffffffffffff91821691161490565b610168610387565b6101076101c536600461089b565b60026020526000908152604090205460ff1681565b6101686101e836600461089b565b610414565b60005460405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610113565b61016861022336600461089b565b61050c565b61016861023636600461089b565b610601565b61010761024936600461089b565b73ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205460ff1690565b61016861028236600461089b565b6106f6565b60005473ffffffffffffffffffffffffffffffffffffffff16331461030d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909217909155517fae26b1cfe9454ba87274a4e8330b6654684362d0f3d7bbd17f7449a1d38387c69190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610408576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b6104126000610826565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517fd400da6c0c0a894dacc0981730b88af0545d00272ee8fff1437bf560ff245fc49190a250565b60005473ffffffffffffffffffffffffffffffffffffffff16331461058d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f1998397e7203f7baca9d6f41b9e4da6e768daac5caad4234fb9bf5869d2715459190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610682576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526001602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f28b01395b7e25d20552a0c8dc8ecd3b1d4abc986f14dad7885fd45b6fd73c8d99190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811661081a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610304565b61082381610826565b50565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156108ad57600080fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146108d157600080fd5b939250505056fea26469706673582212204712efbfe997070def77285a5b8753bc882b62da2133ce1937ad26cd2b48e49864736f6c634300080a003360a060405234801561001057600080fd5b50604051610f50380380610f5083398101604081905261002f916100d7565b6000805460ff19169055806001600160a01b03811661006157604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa15801561009f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100c391906100d7565b6001600160a01b0316608052506101079050565b6000602082840312156100e957600080fd5b81516001600160a01b038116811461010057600080fd5b9392505050565b608051610e1261013e600039600081816101e2015281816102b20152818161040f0152818161057801526108510152610e126000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80638456cb5911610097578063b4ac686011610066578063b4ac686014610217578063c29277cd1461021f578063d914cd4b14610227578063e26b2f631461023a57600080fd5b80638456cb59146101cd57806394144856146101d5578063a50cf2c8146101dd578063ac4afa381461020457600080fd5b80635b16ebb7116100d35780635b16ebb7146101575780635c975abb1461018a578063673a2a1f146101955780636fbc6f6b146101aa57600080fd5b80631e16e4fc146100fa5780633f4ba83a1461013757806354fd4d5014610141575b600080fd5b61010d610108366004610c97565b61024d565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61013f610284565b005b610149600181565b60405190815260200161012e565b61017a610165366004610cb0565b60026020526000908152604090205460ff1681565b604051901515815260200161012e565b60005460ff1661017a565b61019d610372565b60405161012e9190610ced565b61017a6101b8366004610cb0565b60046020526000908152604090205460ff1681565b61013f6103e1565b61019d6104cd565b61010d7f000000000000000000000000000000000000000000000000000000000000000081565b61010d610212366004610c97565b61053a565b600154610149565b600354610149565b61013f610235366004610cb0565b61054a565b61013f610248366004610cb0565b610823565b6003818154811061025d57600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa15801561030e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103329190610d47565b610368576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610370610af6565b565b606060018054806020026020016040519081016040528092919081815260200182805480156103d757602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116103ac575b5050505050905090565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561046b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048f9190610d47565b6104c5576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610370610bd7565b606060038054806020026020016040519081016040528092919081815260200182805480156103d75760200282019190600052602060002090815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116103ac575050505050905090565b6001818154811061025d57600080fd5b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156105d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f89190610d47565b61062e576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051808201909152600281527f5a30000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff82166106b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b60405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff8116600090815260026020908152604091829020548251808401909352600383527f43523100000000000000000000000000000000000000000000000000000000009183019190915260ff1615610753576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b506001805480820182557fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915560008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909417909355915190917ff816b5143086c89d103a0683286be86c2b741e83ebfa75135aae606e2f5c6e5391a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156108ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d19190610d47565b610907576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051808201909152600281527f5a30000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8216610989576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b5073ffffffffffffffffffffffffffffffffffffffff8116600090815260046020908152604091829020548251808401909352600383527f43523200000000000000000000000000000000000000000000000000000000009183019190915260ff1615610a23576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b506003805460018082019092557fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915560008181526004602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909417909355915190917f58ad3cfc4b6552a53c8c4128ae9b080e14b4378a159280643a62c6f709cee24f91a250565b60005460ff16610b62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016106b0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff1615610c44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016106b0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610bad3390565b600060208284031215610ca957600080fd5b5035919050565b600060208284031215610cc257600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610ce657600080fd5b9392505050565b6020808252825182820181905260009190848201906040850190845b81811015610d3b57835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101610d09565b50909695505050505050565b600060208284031215610d5957600080fd5b81518015158114610ce657600080fd5b600060208083528351808285015260005b81811015610d9657858101830151858201604001528201610d7a565b81811115610da8576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea26469706673582212208f2d91c863db9ab1494a9c5db20e3fddc4b6c779ea3c3621737c105c60d9440a64736f6c634300080a003360e06040523480156200001157600080fd5b5060405162004da638038062004da6833981016040819052620000349162000160565b6001600160a01b0381166200005c57604051635919af9760e11b815260040160405180910390fd5b6001600160a01b03811660808190526040805163c513c9bb60e01b8152905163c513c9bb916004808201926020929091908290030181865afa158015620000a7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cd919062000160565b6001600160a01b031660a0816001600160a01b0316815250506080516001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000127573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200014d919062000160565b6001600160a01b031660c0525062000192565b6000602082840312156200017357600080fd5b81516001600160a01b03811681146200018b57600080fd5b9392505050565b60805160a05160c051614b896200021d6000396000818161018801528181611c4f0152612c5a0152600081816101ed015281816115e201528181611f5f0152818161213f0152818161223f0152818161243801528181612604015281816126bc01528181612788015281816129a501528181613c410152613d000152600061013c0152614b896000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c806354fd4d5011610081578063a80deda31161005b578063a80deda31461020f578063ae093f3f1461022f578063fc9914cb1461024f57600080fd5b806354fd4d50146101bd578063663b8fdb146101d35780637a0c7b21146101e857600080fd5b80632954018c116100b25780632954018c146101375780634b2f336d146101835780634c472fc9146101aa57600080fd5b80630dbd616d146100d957806313d21cdf146101025780631bcd8fc014610122575b600080fd5b6100ec6100e73660046140fc565b610272565b6040516100f9919061430b565b60405180910390f35b61011561011036600461431e565b6114d4565b6040516100f99190614444565b61012a611f59565b6040516100f99190614453565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100f9565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b61015e6101b83660046140fc565b6121f5565b6101c5600281565b6040519081526020016100f9565b6101db612432565b6040516100f991906146ea565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b61022261021d36600461431e565b6126b5565b6040516100f9919061476a565b61024261023d36600461431e565b612a75565b6040516100f991906147dd565b61026261025d3660046140fc565b613bf7565b60405190151581526020016100f9565b61035f604051806102400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160008152602001606081526020016000815260200160008152602001600015158152602001600081526020016000815260200160008152602001600060ff168152602001600081525090565b600080600080600061037088613cf4565b509450945094509450945060008560ff1660011461041d576040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015284169063e958b70490602401602060405180830381865afa1580156103f4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061041891906147f0565b6104ad565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015286169063e958b70490602401602060405180830381865afa158015610489573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ad91906147f0565b60ff8716610200890181905273ffffffffffffffffffffffffffffffffffffffff808b1660208b01528b811660608b015282168952909150600114156109e9578473ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610538573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055c91906147f0565b73ffffffffffffffffffffffffffffffffffffffff90811660808901526040517fc7de38a600000000000000000000000000000000000000000000000000000000815282821660048201529085169063c7de38a690602401602060405180830381865afa1580156105d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f5919061480d565b60c08801526040517fdfd5946500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015285169063dfd5946590602401602060405180830381865afa158015610666573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068a919061480d565b60e08801526040517f3ce0735500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015260006024830152861690633ce0735590604401602060405180830381865afa92505050801561073c575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526107399181019061480d565b60015b6107455761074c565b6101408801525b6040517f3ce0735500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015260016024830152861690633ce0735590604401602060405180830381865afa9250505080156107f9575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526107f69181019061480d565b60015b61080257610809565b6101608801525b60c08701516040517f996329f800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526024820192909252600060448201529086169063996329f89060640160a060405180830381865afa9250505080156108c4575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526108c191810190614826565b60015b6108cd576108da565b505015156101808a015250505b8073ffffffffffffffffffffffffffffffffffffffff16631afbb7a46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610925573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610949919061480d565b6101a08801526040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152851690633192195c90602401602060405180830381865afa1580156109bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109df919061480d565b60a0880152610c26565b8273ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5891906147f0565b73ffffffffffffffffffffffffffffffffffffffff90811660808901526040517fc7de38a600000000000000000000000000000000000000000000000000000000815282821660048201529083169063c7de38a6906024016040805180830381865afa158015610acc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af09190614866565b5060c08801526040517fdfd5946500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015283169063dfd5946590602401602060405180830381865afa158015610b62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b86919061480d565b60e08801526040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152841690633192195c906024016040805180830381865afa158015610bf6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1a9190614866565b60a08901526101a08801525b60008660ff16600114610ca7578373ffffffffffffffffffffffffffffffffffffffff166316f0115b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca291906147f0565b610d16565b8573ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1691906147f0565b90508073ffffffffffffffffffffffffffffffffffffffff166345d31f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d87919061480d565b6101008901526000600160ff891614610e0e578473ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610de5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e09919061480d565b610e7d565b8573ffffffffffffffffffffffffffffffffffffffff166320a05ff76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7d919061480d565b90508760ff16600114610f1f576040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152861690638991b2f190602401602060405180830381865afa158015610ef6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1a919061480d565b610faf565b6040517fb451cecc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015287169063b451cecc90602401602060405180830381865afa158015610f8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610faf919061480d565b6102208a01528067ffffffffffffffff811115610fce57610fce61488a565b60405190808252806020026020018201604052801561103e57816020015b6040805160808101825260008082526020808301829052928201819052606082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181610fec5790505b506101208a015260005b818110156113d657604080516080810182526000808252602082018190529181018290526060810191909152600180831b9060ff8c1614156111c5576040517faf0a650200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018590528a169063af0a650290604401608060405180830381865afa1580156110f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111b91906148b9565b5050602084015273ffffffffffffffffffffffffffffffffffffffff9081168084526040517ff9eaee0d0000000000000000000000000000000000000000000000000000000081526004810191909152908a169063f9eaee0d90602401602060405180830381865afa158015611195573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b9919061490d565b15156040830152611388565b6040517f172c48c70000000000000000000000000000000000000000000000000000000081526004810184905273ffffffffffffffffffffffffffffffffffffffff89169063172c48c7906024016040805180830381865afa15801561122f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112539190614928565b5073ffffffffffffffffffffffffffffffffffffffff9081168084526040517f70a082310000000000000000000000000000000000000000000000000000000081529188166004830152906370a0823190602401602060405180830381865afa1580156112c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e8919061480d565b602083015281516040517ff9eaee0d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529088169063f9eaee0d90602401602060405180830381865afa15801561135c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611380919061490d565b151560408301525b6102208c015181161561139c57600161139f565b60005b151560608301526101208c01518051839190859081106113c1576113c161495e565b60209081029190910101525050600101611048565b508273ffffffffffffffffffffffffffffffffffffffff166317d11a156040518163ffffffff1660e01b8152600401602060405180830381865afa158015611422573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611446919061480d565b896101c00181815250508273ffffffffffffffffffffffffffffffffffffffff16633dc54b406040518163ffffffff1660e01b8152600401602060405180830381865afa15801561149b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bf919061480d565b6101e08a015250969998505050505050505050565b61159b604051806102000160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600060ff1681525090565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015283917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa15801561162b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164f919061490d565b611685576040517fd384b23800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316808352604080517ffe14112d000000000000000000000000000000000000000000000000000000008152905185929163fe14112d9160048083019260209291908290030181865afa1580156116f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611719919061480d565b8360c00181815250508073ffffffffffffffffffffffffffffffffffffffff1663ef8d96036040518163ffffffff1660e01b8152600401602060405180830381865afa15801561176d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611791919061480d565b8360e00181815250508073ffffffffffffffffffffffffffffffffffffffff1663743753596040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611809919061480d565b8360a00181815250508073ffffffffffffffffffffffffffffffffffffffff16634c19386c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561185d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611881919061480d565b836101000181815250508073ffffffffffffffffffffffffffffffffffffffff1663788c6bfe6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fa919061480d565b836101600181815250508073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561194f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611973919061480d565b8360800181815250508073ffffffffffffffffffffffffffffffffffffffff166345d31f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119eb919061480d565b836101400181815250508073ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6491906147f0565b836040019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff166336dda7d56040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0a91906147f0565b836060019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663788c6bfe6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb0919061480d565b836101600181815250508073ffffffffffffffffffffffffffffffffffffffff1663e941fa786040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c29919061480d565b61018084015260408084015173ffffffffffffffffffffffffffffffffffffffff9081167f000000000000000000000000000000000000000000000000000000000000000082161460208087019190915282517f609ae31700000000000000000000000000000000000000000000000000000000815292519184169263609ae31792600480830193928290030181865afa158015611ccb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cef919061480d565b836101c00181815250508073ffffffffffffffffffffffffffffffffffffffff1663dbcb313b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d68919061480d565b836101a00181815250506000836060015173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de7919061480d565b6040517f5427c9380000000000000000000000000000000000000000000000000000000081526004810182905290915060009073ffffffffffffffffffffffffffffffffffffffff841690635427c93890602401602060405180830381865afa158015611e58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7c919061480d565b90508015611ec7576101808501518190611eb890611e9c906127106149bc565b876101000151886101400151611eb291906149d3565b90613fd0565b611ec29190614a3f565b611ece565b8461014001515b856101200181815250508273ffffffffffffffffffffffffffffffffffffffff166354fd4d506040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f47919061480d565b60ff166101e086015250505050919050565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b4ac68606040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fec919061480d565b90508067ffffffffffffffff8111156120075761200761488a565b6040519080825280602002602001820160405280156120ff57816020015b6120ec604051806102000160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600060ff1681525090565b8152602001906001900390816120255790505b50915060005b818110156121f0576040517fac4afa38000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ac4afa3890602401602060405180830381865afa15801561219b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121bf91906147f0565b90506121ca816114d4565b8483815181106121dc576121dc61495e565b602090810291909101015250600101612105565b505090565b6040517f6fbc6f6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015260009184917f00000000000000000000000000000000000000000000000000000000000000001690636fbc6f6b90602401602060405180830381865afa158015612286573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122aa919061490d565b6122e0576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060006122ee87613cf4565b5050935093505092508260ff16600114612397576040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015282169063fdd5764590602401602060405180830381865afa15801561236e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061239291906147f0565b612427565b6040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015283169063fdd5764590602401602060405180830381865afa158015612403573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061242791906147f0565b979650505050505050565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c29277cd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124c5919061480d565b90508067ffffffffffffffff8111156124e0576124e061488a565b6040519080825280602002602001820160405280156125c457816020015b60408051610260810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083018290526101208301819052610140830181905261016083015261018082018190526101a082018190526101c082018190526101e082018190526102008201819052610220820181905261024082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816124fe5790505b50915060005b818110156121f0576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa158015612660573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061268491906147f0565b905061268f81612a75565b8483815181106126a1576126a161495e565b6020908102919091010152506001016125ca565b60606000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c29277cd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612725573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612749919061480d565b905060005b81811015612829576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa1580156127e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061280891906147f0565b90506128148187613bf7565b15612820578360010193505b5060010161274e565b508167ffffffffffffffff8111156128435761284361488a565b60405190808252806020026020018201604052801561296157816020015b61294e604051806102400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160008152602001606081526020016000815260200160008152602001600015158152602001600081526020016000815260200160008152602001600060ff168152602001600081525090565b8152602001906001900390816128615790505b5092506000915060005b81811015612a6d576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa158015612a01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a2591906147f0565b9050612a318187613bf7565b15612a6457612a408187610272565b858581518110612a5257612a5261495e565b60209081029190910101526001909301925b5060010161296b565b505050919050565b604080516102608101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082018390526101208201819052610140820181905261016082015261018081018290526101a081018290526101c081018290526101e08101829052610200810182905261022081018290526102408101829052908080808080612b1b88613cf4565b73ffffffffffffffffffffffffffffffffffffffff8e168d5260ff86166101808e01819052959b50939950919750955093509150600114612bca578273ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ba1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bc591906147f0565b612c39565b8473ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c3991906147f0565b73ffffffffffffffffffffffffffffffffffffffff908116602089018190527f00000000000000000000000000000000000000000000000000000000000000009091161460408801526000600160ff881614612d03578373ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cfe91906147f0565b612d72565b8573ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d7291906147f0565b6040517f2e97ca2100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b8116600483015291925090821690632e97ca2190602401602060405180830381865afa158015612de2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e06919061490d565b15156060890152604080517f45d31f9d000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff8316916345d31f9d9160048083019260209291908290030181865afa158015612e78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e9c919061480d565b8860800181815250508073ffffffffffffffffffffffffffffffffffffffff1663743753596040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ef0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f14919061480d565b610100890152600160ff88161415613017578573ffffffffffffffffffffffffffffffffffffffff16639b2cb5d86040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f95919061480d565b8860a00181815250508573ffffffffffffffffffffffffffffffffffffffff16635f48f3936040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fe9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061300d919061480d565b60c08901526130a5565b8273ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa158015613061573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130859190614a73565b6fffffffffffffffffffffffffffffffff90811660c08b01521660a08901525b60008760ff16600114613126578473ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613121919061480d565b613195565b8573ffffffffffffffffffffffffffffffffffffffff166320a05ff76040518163ffffffff1660e01b8152600401602060405180830381865afa158015613171573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613195919061480d565b90508067ffffffffffffffff8111156131b0576131b061488a565b6040519080825280602002602001820160405280156131d9578160200160208202803683370190505b506101208a01528067ffffffffffffffff8111156131f9576131f961488a565b604051908082528060200260200182016040528015613222578160200160208202803683370190505b506101608a015260005b818110156134c4578860ff16600114156133b4576040517f5e5f2e260000000000000000000000000000000000000000000000000000000081526004810182905260009073ffffffffffffffffffffffffffffffffffffffff891690635e5f2e2690602401602060405180830381865afa1580156132ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132d291906147f0565b9050808b610120015183815181106132ec576132ec61495e565b73ffffffffffffffffffffffffffffffffffffffff92831660209182029290920101526040517f78327438000000000000000000000000000000000000000000000000000000008152828216600482015290891690637832743890602401602060405180830381865afa158015613367573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061338b919061480d565b8b610160015183815181106133a2576133a261495e565b602002602001018181525050506134bc565b6040517f172c48c70000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff87169063172c48c7906024016040805180830381865afa15801561341e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134429190614928565b8061ffff1690508b610120015183815181106134605761346061495e565b602002602001018c6101600151848151811061347e5761347e61495e565b60200260200101828152508273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525050505b60010161322c565b5060008860ff16600114613546578373ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561351d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613541919061480d565b6135b5565b8673ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613591573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135b5919061480d565b90508067ffffffffffffffff8111156135d0576135d061488a565b60405190808252806020026020018201604052801561361557816020015b60408051808201909152600080825260208201528152602001906001900390816135ee5790505b506101408b015260005b818110156139015760408051808201909152600080825260208201528a60ff166001146136da576040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff871690635094cb4f90602401602060405180830381865afa1580156136b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136d591906147f0565b613769565b6040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff8a1690635094cb4f90602401602060405180830381865afa158015613745573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061376991906147f0565b73ffffffffffffffffffffffffffffffffffffffff168152600160ff8c16146138245780516040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529089169063fdd5764590602401602060405180830381865afa1580156137fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061381f91906147f0565b6138b7565b80516040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152908a169063fdd5764590602401602060405180830381865afa158015613893573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138b791906147f0565b73ffffffffffffffffffffffffffffffffffffffff1660208201526101408c01518051829190849081106138ed576138ed61495e565b60209081029190910101525060010161361f565b508860ff166001141561398f578773ffffffffffffffffffffffffffffffffffffffff1663b2c53a6c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613959573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061397d919061480d565b60e08b015260ff6102408b0152613be9565b73ffffffffffffffffffffffffffffffffffffffff85166101a08b01819052604080517f9408b63f0000000000000000000000000000000000000000000000000000000081529051639408b63f916004808201926020929091908290030181865afa158015613a02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a2691906147f0565b8a6101e0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508473ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015613aa9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613acd9190614aa6565b5015156102008c015250604080517f9fd12b77000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff881691639fd12b779160048083019260209291908290030181865afa158015613b42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b66919061480d565b8a6102200181815250508573ffffffffffffffffffffffffffffffffffffffff16638345f26e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bdf9190614af7565b60ff166102408b01525b505050505050505050919050565b6040517f6fbc6f6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015260009184917f00000000000000000000000000000000000000000000000000000000000000001690636fbc6f6b90602401602060405180830381865afa158015613c88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cac919061490d565b613ce2576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613cec8484614023565b949350505050565b600080600080600080867f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636fbc6f6b826040518263ffffffff1660e01b8152600401613d73919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa158015613d90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613db4919061490d565b613dea576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8773ffffffffffffffffffffffffffffffffffffffff166354fd4d506040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e59919061480d565b96508660ff1660011415613ee0578795508573ffffffffffffffffffffffffffffffffffffffff1663f93f515b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613eb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ed991906147f0565b9450613fc6565b8793508373ffffffffffffffffffffffffffffffffffffffff16632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f5291906147f0565b92508373ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fc391906147f0565b91505b5091939550919395565b6000821580613fdd575081155b15613fea5750600061401d565b612710613ff8600282614b1a565b61ffff1661400684866149d3565b6140109190614b3b565b61401a9190614a3f565b90505b92915050565b6040517f055ee9b500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600091829185169063055ee9b590602401602060405180830381865afa158015614094573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140b891906147f0565b73ffffffffffffffffffffffffffffffffffffffff1614159392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146140f957600080fd5b50565b6000806040838503121561410f57600080fd5b823561411a816140d7565b9150602083013561412a816140d7565b809150509250929050565b600081518084526020808501945080840160005b8381101561419f578151805173ffffffffffffffffffffffffffffffffffffffff168852838101518489015260408082015115159089015260609081015115159088015260809096019590820190600101614149565b509495945050505050565b805173ffffffffffffffffffffffffffffffffffffffff168252600061024060208301516141f0602086018273ffffffffffffffffffffffffffffffffffffffff169052565b506040830151614204604086018215159052565b50606083015161422c606086018273ffffffffffffffffffffffffffffffffffffffff169052565b506080830151614254608086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060a083015160a085015260c083015160c085015260e083015160e085015261010080840151818601525061012080840151828287015261429783870182614135565b92505050610140808401518186015250610160808401518186015250610180808401516142c78287018215159052565b50506101a083810151908501526101c080840151908501526101e080840151908501526102008084015160ff16908501526102209283015192909301919091525090565b60208152600061401a60208301846141aa565b60006020828403121561433057600080fd5b813561433b816140d7565b9392505050565b805173ffffffffffffffffffffffffffffffffffffffff168252602081015161436f602084018215159052565b506040810151614397604084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060608101516143bf606084018273ffffffffffffffffffffffffffffffffffffffff169052565b506080818101519083015260a0808201519083015260c0808201519083015260e08082015190830152610100808201519083015261012080820151908301526101408082015190830152610160808201519083015261018080820151908301526101a080820151908301526101c080820151908301526101e09081015160ff16910152565b610200810161401d8284614342565b6020808252825182820181905260009190848201906040850190845b8181101561449657614482838551614342565b92840192610200929092019160010161446f565b50909695505050505050565b600081518084526020808501945080840160005b8381101561419f57815173ffffffffffffffffffffffffffffffffffffffff16875295820195908201906001016144b6565b600081518084526020808501945080840160005b8381101561419f578151805173ffffffffffffffffffffffffffffffffffffffff9081168952908401511683880152604090960195908201906001016144fc565b600081518084526020808501945080840160005b8381101561419f57815187529582019590820190600101614551565b805173ffffffffffffffffffffffffffffffffffffffff168252600061026060208301516145b3602086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060408301516145c7604086018215159052565b5060608301516145db606086018215159052565b506080830151608085015260a083015160a085015260c083015160c085015260e083015160e0850152610100808401518186015250610120808401518282870152614628838701826144a2565b92505050610140808401518583038287015261464483826144e8565b925050506101608084015185830382870152614660838261453d565b92505050610180808401516146798287018260ff169052565b50506101a08381015173ffffffffffffffffffffffffffffffffffffffff908116918601919091526101c0808501511515908601526101e080850151909116908501526102008084015115159085015261022080840151908501526102409283015160ff1692909301919091525090565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561475d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc088860301845261474b85835161456d565b94509285019290850190600101614711565b5092979650505050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561475d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08886030184526147cb8583516141aa565b94509285019290850190600101614791565b60208152600061401a602083018461456d565b60006020828403121561480257600080fd5b815161433b816140d7565b60006020828403121561481f57600080fd5b5051919050565b600080600080600060a0868803121561483e57600080fd5b5050835160208501516040860151606087015160809097015192989197509594509092509050565b6000806040838503121561487957600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080600080608085870312156148cf57600080fd5b84516148da816140d7565b60208601516040870151606090970151919890975090945092505050565b8051801515811461490857600080fd5b919050565b60006020828403121561491f57600080fd5b61401a826148f8565b6000806040838503121561493b57600080fd5b8251614946816140d7565b602084015190925061ffff8116811461412a57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156149ce576149ce61498d565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614a0b57614a0b61498d565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614a4e57614a4e614a10565b500490565b80516fffffffffffffffffffffffffffffffff8116811461490857600080fd5b60008060408385031215614a8657600080fd5b614a8f83614a53565b9150614a9d60208401614a53565b90509250929050565b600080600060608486031215614abb57600080fd5b614ac484614a53565b9250614ad2602085016148f8565b9150604084015164ffffffffff81168114614aec57600080fd5b809150509250925092565b600060208284031215614b0957600080fd5b815160ff8116811461433b57600080fd5b600061ffff80841680614b2f57614b2f614a10565b92169190910492915050565b60008219821115614b4e57614b4e61498d565b50019056fea2646970667358221220d15108d0bec9cc6f3903875dd8412869a3da1b36661bdc780e2e2f0ae3136d2464736f6c634300080a003360a06040523480156200001157600080fd5b5060405162001b4538038062001b45833981016040819052620000349162000608565b6000805460ff19169055816001600160a01b0381166200006757604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cc91906200070a565b6001600160a01b031660805250805160005b818110156200014257620001398382815181106200010057620001006200072f565b6020026020010151600001518483815181106200012157620001216200072f565b6020026020010151602001516200014c60201b60201c565b600101620000de565b5050505062000822565b6001600160a01b03821615806200016a57506001600160a01b038116155b156200018957604051635919af9760e11b815260040160405180910390fd5b620001a8826001600160a01b0316620004ba60201b620006751760201c565b620001d65760405163df4c572d60e01b81526001600160a01b03831660048201526024015b60405180910390fd5b620001f5816001600160a01b0316620004ba60201b620006751760201c565b6200021f5760405163df4c572d60e01b81526001600160a01b0382166004820152602401620001cd565b806001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200027c575060408051601f3d908101601f19168201909252620002799181019062000745565b60015b6200029a576040516367a7cd4360e01b815260040160405180910390fd5b8060ff16600814620002bf576040516367a7cd4360e01b815260040160405180910390fd5b506000816001600160a01b031663d62ada116040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200031f575060408051601f3d908101601f191682019092526200031c918101906200076a565b60015b6200032a576200032d565b90505b6000836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200038c575060408051601f3d908101601f19168201909252620003899181019062000745565b60015b620003aa5760405163528ca31d60e01b815260040160405180910390fd5b60128160ff161115620003d05760405163528ca31d60e01b815260040160405180910390fd5b9050826001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa9250505080156200042f575060408051601f3d908101601f191682019092526200042c91810190620007a6565b60015b6200044d576040516367a7cd4360e01b815260040160405180910390fd5b8662000461576200046185858484620004c0565b5050505050620004748484848462000526565b826001600160a01b0316846001600160a01b03167fe263805b03657ab13064915d0723c5ce14981547e7cba5283f66b9e5d81f6e6e60405160405180910390a350505050565b3b151590565b60008313620004e2576040516356e05d2b60e01b815260040160405180910390fd5b836001600160501b0316816001600160501b0316108062000501575081155b15620005205760405163b1cf675560e01b815260040160405180910390fd5b50505050565b6001600160a01b03831682156200053e57600160a11b175b6200055460ff60a21b60a284901b1682620007fb565b6001600160a01b0390951660009081526001602052604090209490945550505050565b80516001600160a01b03811681146200058f57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715620005cf57620005cf62000594565b60405290565b604051601f8201601f191681016001600160401b038111828210171562000600576200060062000594565b604052919050565b60008060408084860312156200061d57600080fd5b620006288462000577565b602085810151919450906001600160401b03808211156200064857600080fd5b818701915087601f8301126200065d57600080fd5b81518181111562000672576200067262000594565b62000682848260051b01620005d5565b818152848101925060069190911b830184019089821115620006a357600080fd5b928401925b81841015620006fa5785848b031215620006c25760008081fd5b620006cc620005aa565b620006d78562000577565b8152620006e686860162000577565b8187015283529285019291840191620006a8565b8096505050505050509250929050565b6000602082840312156200071d57600080fd5b620007288262000577565b9392505050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156200075857600080fd5b815160ff811681146200072857600080fd5b6000602082840312156200077d57600080fd5b815180151581146200072857600080fd5b80516001600160501b03811681146200058f57600080fd5b600080600080600060a08688031215620007bf57600080fd5b620007ca866200078e565b9450602086015193506040860151925060608601519150620007ef608087016200078e565b90509295509295909350565b600082198211156200081d57634e487b7160e01b600052601160045260246000fd5b500190565b6080516112f262000853600039600081816101b201528181610280015281816103e201526104ff01526112f26000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c80638456cb591161008c578063b66102df11610066578063b66102df146101d4578063e8a97a3e146101e7578063f190e5fa146101fa578063f9a650301461023f57600080fd5b80638456cb591461016d5780639dcb511a14610175578063a50cf2c8146101ad57600080fd5b80635c975abb116100bd5780635c975abb1461011c5780635cecbd0e146101325780637afb01041461015a57600080fd5b80633f4ba83a146100e457806341976e09146100ee57806354fd4d5014610114575b600080fd5b6100ec610252565b005b6101016100fc366004610f28565b610340565b6040519081526020015b60405180910390f35b610101600281565b60005460ff16604051901515815260200161010b565b610145610140366004610f4a565b610352565b6040805192835260208301919091520161010b565b610101610168366004610f90565b610376565b6100ec6103b4565b610188610183366004610f28565b6104a0565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010b565b6101887f000000000000000000000000000000000000000000000000000000000000000081565b6101016101e2366004610fbc565b6104b4565b6100ec6101f5366004610ff8565b6104d1565b61020d610208366004610f28565b6105c3565b6040805173ffffffffffffffffffffffffffffffffffffffff909416845291151560208401529082015260600161010b565b61010161024d366004610f90565b61064d565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156102dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103009190611022565b610336576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033e61067b565b565b600061034b82610761565b5092915050565b60008061035f868661064d565b915061036b848461064d565b905094509492505050565b600080600061038484610761565b90925090508161039582600a611193565b61039f908761119f565b6103a991906111dc565b925050505b92915050565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561043e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104629190611022565b610498576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033e610819565b60006104ab826105c3565b50909392505050565b60006104c96104c3858561064d565b83610376565b949350505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561055b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057f9190611022565b6105b5576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105bf82826108d9565b5050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600160205260408120548190819080610624576040517f4bb8ad8200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b947402000000000000000000000000000000000000000086161515945060a286901c9350915050565b600080600061065b84610761565b909250905061066b81600a611193565b61039f838761119f565b3b151590565b60005460ff166106ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b600080600080610770856105c3565b8095508193508294505050506000806000808573ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156107cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f19190611231565b9450945050935093508461080b5761080b84848484610dd9565b829750505050505050915091565b60005460ff1615610886576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016106e3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586107373390565b73ffffffffffffffffffffffffffffffffffffffff82161580610910575073ffffffffffffffffffffffffffffffffffffffff8116155b15610947576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82163b6109ad576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016106e3565b73ffffffffffffffffffffffffffffffffffffffff81163b610a13576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024016106e3565b8073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610a98575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610a9591810190611281565b60015b610ace576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060ff16600814610b0b576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060008173ffffffffffffffffffffffffffffffffffffffff1663d62ada116040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610b93575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610b9091810190611022565b60015b610b9c57610b9f565b90505b60008373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610c26575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610c2391810190611281565b60015b610c5c576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60128160ff161115610c9a576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b90508273ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa925050508015610d21575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610d1e91810190611231565b60015b610d57576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b86610d6857610d6885858484610dd9565b5050505050610d7984848484610e74565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fe263805b03657ab13064915d0723c5ce14981547e7cba5283f66b9e5d81f6e6e60405160405180910390a350505050565b60008313610e13576040517f56e05d2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8369ffffffffffffffffffff168169ffffffffffffffffffff161080610e37575081155b15610e6e576040517fb1cf675500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b73ffffffffffffffffffffffffffffffffffffffff83168215610ea95774020000000000000000000000000000000000000000175b610ecf7503fc000000000000000000000000000000000000000060a284901b16826112a4565b73ffffffffffffffffffffffffffffffffffffffff90951660009081526001602052604090209490945550505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610f2357600080fd5b919050565b600060208284031215610f3a57600080fd5b610f4382610eff565b9392505050565b60008060008060808587031215610f6057600080fd5b84359350610f7060208601610eff565b925060408501359150610f8560608601610eff565b905092959194509250565b60008060408385031215610fa357600080fd5b82359150610fb360208401610eff565b90509250929050565b600080600060608486031215610fd157600080fd5b83359250610fe160208501610eff565b9150610fef60408501610eff565b90509250925092565b6000806040838503121561100b57600080fd5b61101483610eff565b9150610fb360208401610eff565b60006020828403121561103457600080fd5b81518015158114610f4357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b808511156110cc57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156110b2576110b2611044565b808516156110bf57918102915b93841c9390800290611078565b509250929050565b6000826110e3575060016103ae565b816110f0575060006103ae565b816001811461110657600281146111105761112c565b60019150506103ae565b60ff84111561112157611121611044565b50506001821b6103ae565b5060208310610133831016604e8410600b841016171561114f575081810a6103ae565b6111598383611073565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561118b5761118b611044565b029392505050565b6000610f4383836110d4565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156111d7576111d7611044565b500290565b600082611212577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b805169ffffffffffffffffffff81168114610f2357600080fd5b600080600080600060a0868803121561124957600080fd5b61125286611217565b945060208601519350604086015192506060860151915061127560808701611217565b90509295509295909350565b60006020828403121561129357600080fd5b815160ff81168114610f4357600080fd5b600082198211156112b7576112b7611044565b50019056fea2646970667358221220e7485a2cb5750973f539ca59d2211008b42bb92b6c49605a53f5d9c88c330fb164736f6c634300080a003360e06040523480156200001157600080fd5b5060405162002ced38038062002ced8339810160408190526200003491620004bb565b6000805460ff19169055806001600160a01b0381166200006757604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cc9190620004bb565b6001600160a01b039081166080526001805560408051808201909152600281526105a360f41b602082015291508216620001245760405162461bcd60e51b81526004016200011b9190620004ed565b60405180910390fd5b50806001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000164573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200018a9190620004bb565b6001600160a01b031660c052604051620001a490620004ad565b604051809103906000f080158015620001c1573d6000803e3d6000fd5b506001600160a01b031660a08190526040805163204a7f0760e21b81529051638129fc1c9160048082019260009290919082900301818387803b1580156200020857600080fd5b505af11580156200021d573d6000803e3d6000fd5b50505050620002316200028a60201b60201c565b50600454600380546001600160a01b039092166001600160a01b03199283161790556000805260026020527fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b8054909116905562000545565b6000620002a460a0516200038c60201b6200119b1760201c565b9050806001600160a01b0316638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620002e257600080fd5b505af1158015620002f7573d6000803e3d6000fd5b5050600480546001600160a01b03908116600090815260026020908152604090912080546001600160a01b03199081169388169384179091558354169091179091556200035492506005915083906200043b811b6200127d17901c565b506040516001600160a01b038216907f9f69b6c10f6810213e055b0ba6bc0a4e2603f73c221aad77ea35da819cda7dc390600090a250565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260601b60148201526e5af43d82803e903d91602b57fd5bf360881b60288201526037816000f09150506001600160a01b038116620004365760405162461bcd60e51b815260206004820152601660248201527f455243313136373a20637265617465206661696c65640000000000000000000060448201526064016200011b565b919050565b600062000452836001600160a01b0384166200045b565b90505b92915050565b6000818152600183016020526040812054620004a45750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000455565b50600062000455565b610e788062001e7583390190565b600060208284031215620004ce57600080fd5b81516001600160a01b0381168114620004e657600080fd5b9392505050565b600060208083528351808285015260005b818110156200051c57858101830151858201604001528201620004fe565b818111156200052f576000604083870101525b50601f01601f1916929092016040019392505050565b60805160a05160c0516118cf620005a66000396000818161026a015281816103680152610b7001526000818161020201526110650152600081816102c4015281816105b80152818161099601528181610a840152610e7401526118cf6000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806388f64c54116100cd578063b193976311610081578063d82ecc4811610066578063d82ecc4814610309578063e3ba9ace1461031c578063f23953ab1461032f57600080fd5b8063b1939763146102f9578063b60e85181461030157600080fd5b80638f7dcfa3116100b25780638f7dcfa31461029f578063a50cf2c8146102bf578063a904aab6146102e657600080fd5b806388f64c541461026557806389b77b3e1461028c57600080fd5b806354fd4d50116101245780635da33c5b116101095780635da33c5b146101fd578063765e0159146102245780638456cb591461025d57600080fd5b806354fd4d50146101d05780635c975abb146101e657600080fd5b806313d8c8401461015657806321d18456146101a05780632932472f146101b35780633f4ba83a146101c8575b600080fd5b6004546101769073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6101766101ae366004611651565b610337565b6101c66101c1366004611697565b61058a565b005b6101c6610968565b6101d8600181565b604051908152602001610197565b60005460ff165b6040519015158152602001610197565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101766102323660046116da565b73ffffffffffffffffffffffffffffffffffffffff9081166000908152600260205260409020541690565b6101c6610a56565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101c661029a3660046116da565b610b42565b6003546101769073ffffffffffffffffffffffffffffffffffffffff1681565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101c66102f4366004611697565b610e46565b6101d8610fb8565b6101d8611033565b6101ed6103173660046116da565b611044565b61017661032a3660046116f5565b611051565b6101c661105e565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa1580156103c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103e8919061170e565b6040518060400160405280600281526020017f43500000000000000000000000000000000000000000000000000000000000008152509061045f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b60405180910390fd5b506104686112a6565b6003805473ffffffffffffffffffffffffffffffffffffffff8082166000818152600260205260409081902080549093167fffffffffffffffffffffffff0000000000000000000000000000000000000000948516179094558154909216905590517fc75b5a710000000000000000000000000000000000000000000000000000000081523360048201526024810185905260448101849052819063c75b5a7190606401600060405180830381600087803b15801561052657600080fd5b505af115801561053a573d6000803e3d6000fd5b505060405133925073ffffffffffffffffffffffffffffffffffffffff841691507ff3ede7039176503a8ad1fe7cfaa29475a9dbe0cdcaf04ecf9a5c10570c47b10390600090a390505b92915050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610614573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610638919061170e565b61066e576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106766112a6565b60035473ffffffffffffffffffffffffffffffffffffffff838116911614156106fa576003805473ffffffffffffffffffffffffffffffffffffffff808216600090815260026020526040902080549091167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092558154169055610865565b73ffffffffffffffffffffffffffffffffffffffff838116600090815260026020908152604091829020548251808401909352600383527f4146330000000000000000000000000000000000000000000000000000000000918301919091529091848116911614610798576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b5060045473ffffffffffffffffffffffffffffffffffffffff838116911614156107fd57600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85161790555b73ffffffffffffffffffffffffffffffffffffffff828116600081815260026020526040808220805488861684529183208054929095167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790945591905281541690555b6040517fc75b5a7100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600060248301819052604483015283169063c75b5a7190606401600060405180830381600087803b1580156108dc57600080fd5b505af11580156108f0573d6000803e3d6000fd5b505050506109088260056112dd90919063ffffffff16565b508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f25e267469ba2ae82515be7b3d45df60bf8308343f0809e8cf7319058e2255ce660405160405180910390a3505050565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156109f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a16919061170e565b610a4c576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a546112ff565b565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015610ae0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b04919061170e565b610b3a576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a546113e0565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa158015610bcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf0919061170e565b6040518060400160405280600281526020017f435000000000000000000000000000000000000000000000000000000000000081525090610c5e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b50610c6a6005826114a0565b6040518060400160405280600381526020017f414634000000000000000000000000000000000000000000000000000000000081525090610cd8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b50438173ffffffffffffffffffffffffffffffffffffffff16633dc54b406040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4991906117a3565b14156040518060400160405280600381526020017f414631000000000000000000000000000000000000000000000000000000000081525090610db9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b506004805473ffffffffffffffffffffffffffffffffffffffff90811660009081526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081169487169485179091558454168317909355915190917fced6ab9afc868b3a088366f6631ae20752993b5cce5d5f0534ea5a59fcc57d5691a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610ed0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef4919061170e565b610f2a576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f19a1603900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301528416906319a1603990604401600060405180830381600087803b158015610f9b57600080fd5b505af1158015610faf573d6000803e3d6000fd5b50505050505050565b600354600090819073ffffffffffffffffffffffffffffffffffffffff165b73ffffffffffffffffffffffffffffffffffffffff81161561102d5773ffffffffffffffffffffffffffffffffffffffff9081166000908152600260205260409020541681611025816117eb565b925050610fd7565b50919050565b600061103f60056114cf565b905090565b60006105846005836114a0565b60006105846005836114d9565b60006110897f000000000000000000000000000000000000000000000000000000000000000061119b565b90508073ffffffffffffffffffffffffffffffffffffffff16638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156110d357600080fd5b505af11580156110e7573d6000803e3d6000fd5b50506004805473ffffffffffffffffffffffffffffffffffffffff908116600090815260026020526040902080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811692871692831790915582541617905550611156905060058261127d565b5060405173ffffffffffffffffffffffffffffffffffffffff8216907f9f69b6c10f6810213e055b0ba6bc0a4e2603f73c221aad77ea35da819cda7dc390600090a250565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260601b60148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f091505073ffffffffffffffffffffffffffffffffffffffff8116611278576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f455243313136373a20637265617465206661696c6564000000000000000000006044820152606401610456565b919050565b600061129f8373ffffffffffffffffffffffffffffffffffffffff84166114e5565b9392505050565b60035473ffffffffffffffffffffffffffffffffffffffff90811660009081526002602052604090205416610a5457610a5461105e565b600061129f8373ffffffffffffffffffffffffffffffffffffffff8416611534565b60005460ff1661136b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610456565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff161561144d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610456565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586113b63390565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600183016020526040812054151561129f565b6000610584825490565b600061129f8383611627565b600081815260018301602052604081205461152c57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610584565b506000610584565b6000818152600183016020526040812054801561161d576000611558600183611824565b855490915060009061156c90600190611824565b90508181146115d157600086600001828154811061158c5761158c61183b565b90600052602060002001549050808760000184815481106115af576115af61183b565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806115e2576115e261186a565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610584565b6000915050610584565b600082600001828154811061163e5761163e61183b565b9060005260206000200154905092915050565b6000806040838503121561166457600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff8116811461127857600080fd5b6000806000606084860312156116ac57600080fd5b6116b584611673565b92506116c360208501611673565b91506116d160408501611673565b90509250925092565b6000602082840312156116ec57600080fd5b61129f82611673565b60006020828403121561170757600080fd5b5035919050565b60006020828403121561172057600080fd5b8151801515811461129f57600080fd5b600060208083528351808285015260005b8181101561175d57858101830151858201604001528201611741565b8181111561176f576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b6000602082840312156117b557600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561181d5761181d6117bc565b5060010190565b600082821015611836576118366117bc565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220f1e9c81b8c3af2491c907ee66cf24e1bb76111b821db02df8f98dbb48b5ab5fa64736f6c634300080a0033608060405234801561001057600080fd5b50610e58806100206000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c806354fd4d5011610081578063c45a01551161005b578063c45a0155146101a4578063c75b5a71146101ca578063d1660f99146101dd57600080fd5b806354fd4d501461014f5780638129fc1c14610157578063c12c21c01461015f57600080fd5b80631afbb7a4116100b25780631afbb7a41461011d5780631cff79cd146101265780633dc54b401461014657600080fd5b806316128211146100d957806317d11a15146100ee57806319a160391461010a575b600080fd5b6100ec6100e7366004610b42565b6101f0565b005b6100f760035481565b6040519081526020015b60405180910390f35b6100ec610118366004610b8d565b61024c565b6100f760025481565b610139610134366004610bef565b6102c9565b6040516101019190610d49565b6100f760045481565b6100f7600181565b6100ec610344565b60015461017f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610101565b60005461017f9062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b6100ec6101d8366004610d5c565b610494565b6100ec6101eb366004610d8f565b61053d565b60015473ffffffffffffffffffffffffffffffffffffffff163314610241576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600291909155600355565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1633146102a3576040517fb126b84800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102c573ffffffffffffffffffffffffffffffffffffffff83168260006105b4565b5050565b60015460609073ffffffffffffffffffffffffffffffffffffffff16331461031d576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033d73ffffffffffffffffffffffffffffffffffffffff8416836107b4565b9392505050565b600054610100900460ff1661035f5760005460ff1615610363565b303b155b6103f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600054610100900460ff1615801561043357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000166101011790555b600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16336201000002179055801561049157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b50565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1633146104eb576040517fb126b84800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff949094169390931790925560025560035543600455565b60015473ffffffffffffffffffffffffffffffffffffffff16331461058e576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105af73ffffffffffffffffffffffffffffffffffffffff841683836107f6565b505050565b80158061065457506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015284169063dd62ed3e90604401602060405180830381865afa15801561062e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106529190610dcb565b155b6106e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e63650000000000000000000060648201526084016103eb565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526105af9084907f095ea7b300000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261084c565b606061033d83836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250610958565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526105af9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401610732565b60006108ae826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166109589092919063ffffffff16565b8051909150156105af57808060200190518101906108cc9190610de4565b6105af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016103eb565b6060610967848460008561096f565b949350505050565b606082471015610a01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016103eb565b843b610a69576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016103eb565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051610a929190610e06565b60006040518083038185875af1925050503d8060008114610acf576040519150601f19603f3d011682016040523d82523d6000602084013e610ad4565b606091505b5091509150610ae4828286610aef565b979650505050505050565b60608315610afe57508161033d565b825115610b0e5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103eb9190610d49565b60008060408385031215610b5557600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff81168114610b8857600080fd5b919050565b60008060408385031215610ba057600080fd5b610ba983610b64565b9150610bb760208401610b64565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215610c0257600080fd5b610c0b83610b64565b9150602083013567ffffffffffffffff80821115610c2857600080fd5b818501915085601f830112610c3c57600080fd5b813581811115610c4e57610c4e610bc0565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715610c9457610c94610bc0565b81604052828152886020848701011115610cad57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b83811015610cea578181015183820152602001610cd2565b83811115610cf9576000848401525b50505050565b60008151808452610d17816020860160208601610ccf565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061033d6020830184610cff565b600080600060608486031215610d7157600080fd5b610d7a84610b64565b95602085013595506040909401359392505050565b600080600060608486031215610da457600080fd5b610dad84610b64565b9250610dbb60208501610b64565b9150604084013590509250925092565b600060208284031215610ddd57600080fd5b5051919050565b600060208284031215610df657600080fd5b8151801515811461033d57600080fd5b60008251610e18818460208701610ccf565b919091019291505056fea2646970667358221220448e7046078cd668c09328d857e534e2aab6cdc0e691d3d4f2c8baae8e084b1364736f6c634300080a003360c06040523480156200001157600080fd5b506040516200162738038062001627833981016040819052620000349162000177565b60408051808201909152600281526105a360f41b60208201526001600160a01b038216620000805760405162461bcd60e51b8152600401620000779190620001a9565b60405180910390fd5b50806001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e6919062000177565b6001600160a01b03166080816001600160a01b031681525050806001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200013e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000164919062000177565b6001600160a01b031660a0525062000201565b6000602082840312156200018a57600080fd5b81516001600160a01b0381168114620001a257600080fd5b9392505050565b600060208083528351808285015260005b81811015620001d857858101830151858201604001528201620001ba565b81811115620001eb576000604083870101525b50601f01601f1916929092016040019392505050565b60805160a0516113c2620002656000396000818161021f0152818161036401526106d501526000818160af0152818161012a015281816104420152818161056e015281816107b301528181610aa601528181610b890152610c6701526113c26000f3fe60806040526004361061005e5760003560e01c80635869dba8116100435780635869dba814610199578063deecfbc9146101bb578063e79a4089146101ce57600080fd5b80634f0e0ef31461011857806354fd4d501461017657600080fd5b366101135760408051808201909152600381527f574732000000000000000000000000000000000000000000000000000000000060208201523373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b60405180910390fd5b50005b600080fd5b34801561012457600080fd5b5061014c7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561018257600080fd5b5061018b600181565b60405190815260200161016d565b3480156101a557600080fd5b506101b96101b4366004611263565b6101ee565b005b6101b96101c936600461128f565b61031d565b3480156101da57600080fd5b506101b96101e93660046112e1565b61068e565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201819052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa15801561027b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061029f9190611318565b6040518060400160405280600281526020017f43500000000000000000000000000000000000000000000000000000000000008152509061030d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b506103188383610a77565b505050565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808516600483015284917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa1580156103ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103d19190611318565b6040518060400160405280600281526020017f52500000000000000000000000000000000000000000000000000000000000008152509061043f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e6919061133a565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600381526020017f57473100000000000000000000000000000000000000000000000000000000008152509061056b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156105d457600080fd5b505af11580156105e8573d6000803e3d6000fd5b50505050506105f78434610b3c565b6040517f9aa5d46200000000000000000000000000000000000000000000000000000000815234600482015273ffffffffffffffffffffffffffffffffffffffff848116602483015261ffff84166044830152851690639aa5d46290606401600060405180830381600087803b15801561067057600080fd5b505af1158015610684573d6000803e3d6000fd5b5050505050505050565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808516600483015284917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa15801561071e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107429190611318565b6040518060400160405280600281526020017f5250000000000000000000000000000000000000000000000000000000000000815250906107b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610833573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610857919061133a565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600381526020017f5747310000000000000000000000000000000000000000000000000000000000815250906108dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b506109703330858773ffffffffffffffffffffffffffffffffffffffff166336dda7d56040518163ffffffff1660e01b8152600401602060405180830381865afa15801561092e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610952919061133a565b73ffffffffffffffffffffffffffffffffffffffff16929190610cd4565b6040517f05fe138b0000000000000000000000000000000000000000000000000000000081526004810184905230602482015260009073ffffffffffffffffffffffffffffffffffffffff8616906305fe138b906044016020604051808303816000875af11580156109e6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0a9190611357565b9050610a168382610a77565b8273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f6de63bb986f2779478e384365c03cc2e62f06b453856acca87d5a519ce02664960405160405180910390a35050505050565b6040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632e1a7d4d90602401600060405180830381600087803b158015610aff57600080fd5b505af1158015610b13573d6000803e3d6000fd5b50610b389250505073ffffffffffffffffffffffffffffffffffffffff831682610d6f565b5050565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015282917f00000000000000000000000000000000000000000000000000000000000000009091169063dd62ed3e90604401602060405180830381865afa158015610bd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf69190611357565b1015610b38576040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303816000875af1158015610cb0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103189190611318565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052610d69908590610ec9565b50505050565b80471015610dd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610107565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114610e33576040519150601f19603f3d011682016040523d82523d6000602084013e610e38565b606091505b5050905080610318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610107565b6000610f2b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16610fd59092919063ffffffff16565b8051909150156103185780806020019051810190610f499190611318565b610318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610107565b6060610fe48484600085610fee565b90505b9392505050565b606082471015611080576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610107565b843b6110e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610107565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516111119190611370565b60006040518083038185875af1925050503d806000811461114e576040519150601f19603f3d011682016040523d82523d6000602084013e611153565b606091505b509150915061116382828661116e565b979650505050505050565b6060831561117d575081610fe7565b82511561118d5782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b60005b838110156111dc5781810151838201526020016111c4565b83811115610d695750506000910152565b602081526000825180602084015261120c8160408501602087016111c1565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461126057600080fd5b50565b6000806040838503121561127657600080fd5b82356112818161123e565b946020939093013593505050565b6000806000606084860312156112a457600080fd5b83356112af8161123e565b925060208401356112bf8161123e565b9150604084013561ffff811681146112d657600080fd5b809150509250925092565b6000806000606084860312156112f657600080fd5b83356113018161123e565b92506020840135915060408401356112d68161123e565b60006020828403121561132a57600080fd5b81518015158114610fe757600080fd5b60006020828403121561134c57600080fd5b8151610fe78161123e565b60006020828403121561136957600080fd5b5051919050565b600082516113828184602087016111c1565b919091019291505056fea264697066735822122017fd7fc76e4a1efcf24b78a3417fad7ab9576f0a23aa756ddb211c5e2227aa9564736f6c634300080a003360806040523480156200001157600080fd5b5060405162002b8038038062002b80833981016040819052620000349162000122565b6001600160a01b0381166200008f5760405162461bcd60e51b815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640160405180910390fd5b6001600160a01b03811660008181526001602052604080822080546001600160601b0319166b204fce5e3e2502611000000090811790915590517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91620000f99190815260200190565b60405180910390a350600680546001600160a81b031916336101000260ff191617905562000154565b6000602082840312156200013557600080fd5b81516001600160a01b03811681146200014d57600080fd5b9392505050565b612a1c80620001646000396000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c806370a08231116100f9578063b4b5ea5711610097578063dd62ed3e11610071578063dd62ed3e14610503578063e7a324dc14610555578063f1127ed81461057c578063f2fde38b146105ee57600080fd5b8063b4b5ea57146104ca578063c3cda520146104dd578063d505accf146104f057600080fd5b806395d89b41116100d357806395d89b411461045b5780639742ca4614610497578063a9059cbb146104aa578063b0660c3d146104bd57600080fd5b806370a08231146103c7578063782d6fe11461040b5780637ecebe001461043b57600080fd5b806330adf81f11610166578063481c6a7511610140578063481c6a751461031e578063587cde1e146103435780635c19a95c146103795780636fcfff451461038c57600080fd5b806330adf81f14610298578063313ce567146102bf578063349dc329146102d957600080fd5b806320606b701161019757806320606b70146102545780632185810b1461027b57806323b872dd1461028557600080fd5b806306fdde03146101be578063095ea7b31461021057806318160ddd14610233575b600080fd5b6101fa6040518060400160405280600781526020017f47656172626f780000000000000000000000000000000000000000000000000081525081565b60405161020791906124a3565b60405180910390f35b61022361021e36600461253f565b610601565b6040519015158152602001610207565b6102466b204fce5e3e2502611000000081565b604051908152602001610207565b6102467f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b61028361070d565b005b610223610293366004612569565b6107ee565b6102467f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b6102c7601281565b60405160ff9091168152602001610207565b6007546102f99073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610207565b6006546102f990610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6102f96103513660046125a5565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6102836103873660046125a5565b61098a565b6103b261039a3660046125a5565b60046020526000908152604090205463ffffffff1681565b60405163ffffffff9091168152602001610207565b6102466103d53660046125a5565b73ffffffffffffffffffffffffffffffffffffffff166000908152600160205260409020546bffffffffffffffffffffffff1690565b61041e61041936600461253f565b610997565b6040516bffffffffffffffffffffffff9091168152602001610207565b6102466104493660046125a5565b60056020526000908152604090205481565b6101fa6040518060400160405280600481526020017f474541520000000000000000000000000000000000000000000000000000000081525081565b6102836104a53660046125a5565b610cae565b6102236104b836600461253f565b610e20565b6006546102239060ff1681565b61041e6104d83660046125a5565b610e5c565b6102836104eb3660046125d1565b610efa565b6102836104fe366004612629565b611310565b610246610511366004612693565b73ffffffffffffffffffffffffffffffffffffffff9182166000908152602081815260408083209390941682529190915220546bffffffffffffffffffffffff1690565b6102467fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b6105c561058a3660046126c6565b600360209081526000928352604080842090915290825290205463ffffffff81169064010000000090046bffffffffffffffffffffffff1682565b6040805163ffffffff90931683526bffffffffffffffffffffffff909116602083015201610207565b6102836105fc3660046125a5565b61187a565b6000807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83141561063f57506bffffffffffffffffffffffff610664565b6106618360405180606001604052806025815260200161285260259139611a15565b90505b3360008181526020818152604080832073ffffffffffffffffffffffffffffffffffffffff89168085529083529281902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff871690811790915590519081529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a360019150505b92915050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314610798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e616765720060448201526064015b60405180910390fd5b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f795b0e16c8da9807b0a215f3749bd6dbcc49fc0472183f4e446abb7dcbd9d00790600090a1565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081815260408083203380855290835281842054825160608101909352602580845291936bffffffffffffffffffffffff909116928592610856928892919061285290830139611a15565b90508673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156108a257506bffffffffffffffffffffffff82811614155b156109725760006108cc83836040518060600160405280603d8152602001612974603d9139611a67565b73ffffffffffffffffffffffffffffffffffffffff898116600081815260208181526040808320948a168084529482529182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff87169081179091559151918252939450919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505b61097d878783611ad5565b5060019695505050505050565b6109943382611e9c565b50565b6000438210610a28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f476561723a3a6765745072696f72566f7465733a206e6f74207965742064657460448201527f65726d696e656400000000000000000000000000000000000000000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff831660009081526004602052604090205463ffffffff1680610a63576000915050610707565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604081208491610a95600185612735565b63ffffffff90811682526020820192909252604001600020541611610b1b5773ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812090610ae5600184612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff1691506107079050565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020908152604080832083805290915290205463ffffffff16831015610b63576000915050610707565b600080610b71600184612735565b90505b8163ffffffff168163ffffffff161115610c565760006002610b968484612735565b610ba0919061275a565b610baa9083612735565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260036020908152604080832063ffffffff8581168552908352928190208151808301909252549283168082526401000000009093046bffffffffffffffffffffffff1691810191909152919250871415610c2a576020015194506107079350505050565b805163ffffffff16871115610c4157819350610c4f565b610c4c600183612735565b92505b5050610b74565b5073ffffffffffffffffffffffffffffffffffffffff8516600090815260036020908152604080832063ffffffff909416835292905220546bffffffffffffffffffffffff6401000000009091041691505092915050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314610d34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e6167657200604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff8116610db1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640161078f565b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f2f834d1c8c4b956018fff5faca4d99868ae635487424d9c265c257ccbc698c6a90600090a250565b600080610e45836040518060600160405280602681526020016128a760269139611a15565b9050610e52338583611ad5565b5060019392505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526004602052604081205463ffffffff1680610e94576000610ef3565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812090610ec5600184612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b9392505050565b604080518082018252600781527f47656172626f780000000000000000000000000000000000000000000000000060209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f028ef9f797075f74ac647c65fde04fb0f128c2d59fd40f45732269917642fd4681840152466060820152306080808301919091528351808303909101815260a0820184528051908301207fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60c083015273ffffffffffffffffffffffffffffffffffffffff8a1660e08301526101008201899052610120808301899052845180840390910181526101408301909452835193909201929092207f19010000000000000000000000000000000000000000000000000000000000006101608401526101628301829052610182830181905290916000906101a201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa1580156110d8573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166111a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f476561723a3a64656c656761746542795369673a20696e76616c69642073696760448201527f6e61747572650000000000000000000000000000000000000000000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff811660009081526005602052604081208054916111d7836127a4565b919050558914611269576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f476561723a3a64656c656761746542795369673a20696e76616c6964206e6f6e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161078f565b874211156112f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f476561723a3a64656c656761746542795369673a207369676e6174757265206560448201527f7870697265640000000000000000000000000000000000000000000000000000606482015260840161078f565b611303818b611e9c565b505050505b505050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86141561134d57506bffffffffffffffffffffffff611372565b61136f8660405180606001604052806024815260200161291c60249139611a15565b90505b604080518082018252600781527f47656172626f780000000000000000000000000000000000000000000000000060209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f028ef9f797075f74ac647c65fde04fb0f128c2d59fd40f45732269917642fd4681840152466060820152306080808301919091528351808303909101815260a0909101835280519082012073ffffffffffffffffffffffffffffffffffffffff8b166000908152600590925291812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918c918c918c919086611472836127a4565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810188905260e001604051602081830303815290604052805190602001209050600082826040516020016115199291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff8b169284019290925260608301899052608083018890529092509060019060a0016020604051602081039080840390855afa1580156115a2573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661164a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a7065726d69743a20696e76616c6964207369676e617475726500604482015260640161078f565b8b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146116df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f476561723a3a7065726d69743a20756e617574686f72697a6564000000000000604482015260640161078f565b88421115611749576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a7065726d69743a207369676e6174757265206578706972656400604482015260640161078f565b846000808e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508a73ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258760405161186491906bffffffffffffffffffffffff91909116815260200190565b60405180910390a3505050505050505050505050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314611900576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e6167657200604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff811661197d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640161078f565b60065460405173ffffffffffffffffffffffffffffffffffffffff80841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36006805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b6000816c010000000000000000000000008410611a5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b509192915050565b6000836bffffffffffffffffffffffff16836bffffffffffffffffffffffff1611158290611ac2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b50611acd83856127dd565b949350505050565b60065460ff1680611b025750600654610100900473ffffffffffffffffffffffffffffffffffffffff1633145b80611b24575060075473ffffffffffffffffffffffffffffffffffffffff1633145b611b8a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f476561723a3a7472616e73666572732061726520666f7262696464656e000000604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff8316611c2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603c60248201527f476561723a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260448201527f616e736665722066726f6d20746865207a65726f206164647265737300000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff8216611cd0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f476561723a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260448201527f616e7366657220746f20746865207a65726f2061646472657373000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260016020908152604091829020548251606081019093526036808452611d2d936bffffffffffffffffffffffff90921692859291906129b190830139611a67565b73ffffffffffffffffffffffffffffffffffffffff848116600090815260016020908152604080832080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff968716179055928616825290829020548251606081019093526030808452611dbf949190911692859290919061287790830139611f50565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260409182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff968716179055905193851684529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a373ffffffffffffffffffffffffffffffffffffffff808416600090815260026020526040808220548584168352912054611e9792918216911683611fc1565b505050565b73ffffffffffffffffffffffffffffffffffffffff808316600081815260026020818152604080842080546001845282862054949093528787167fffffffffffffffffffffffff000000000000000000000000000000000000000084168117909155905191909516946bffffffffffffffffffffffff9092169391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4611f4a828483611fc1565b50505050565b600080611f5d8486612802565b9050846bffffffffffffffffffffffff16816bffffffffffffffffffffffff1610158390611fb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b50949350505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561200b57506000816bffffffffffffffffffffffff16115b15611e975773ffffffffffffffffffffffffffffffffffffffff8316156120fd5773ffffffffffffffffffffffffffffffffffffffff831660009081526004602052604081205463ffffffff1690816120655760006120c4565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812090612096600185612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b905060006120eb82856040518060600160405280602881526020016128cd60289139611a67565b90506120f9868484846121e2565b5050505b73ffffffffffffffffffffffffffffffffffffffff821615611e975773ffffffffffffffffffffffffffffffffffffffff821660009081526004602052604081205463ffffffff1690816121525760006121b1565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812090612183600185612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b905060006121d882856040518060600160405280602781526020016128f560279139611f50565b9050611308858484845b60006122064360405180606001604052806034815260200161294060349139612465565b905060008463ffffffff1611801561226d575073ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812063ffffffff831691612251600188612735565b63ffffffff908116825260208201929092526040016000205416145b156123035773ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812083916122a4600188612735565b63ffffffff168152602081019190915260400160002080546bffffffffffffffffffffffff92909216640100000000027fffffffffffffffffffffffffffffffff000000000000000000000000ffffffff9092169190911790556123fe565b60408051808201825263ffffffff80841682526bffffffffffffffffffffffff808616602080850191825273ffffffffffffffffffffffffffffffffffffffff8b166000908152600382528681208b8616825290915294909420925183549451909116640100000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009094169116179190911790556123a5846001612832565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260046020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff929092169190911790555b604080516bffffffffffffffffffffffff80861682528416602082015273ffffffffffffffffffffffffffffffffffffffff8716917fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724910160405180910390a25050505050565b6000816401000000008410611a5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91905b600060208083528351808285015260005b818110156124d0578581018301518582016040015282016124b4565b818111156124e2576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461253a57600080fd5b919050565b6000806040838503121561255257600080fd5b61255b83612516565b946020939093013593505050565b60008060006060848603121561257e57600080fd5b61258784612516565b925061259560208501612516565b9150604084013590509250925092565b6000602082840312156125b757600080fd5b610ef382612516565b803560ff8116811461253a57600080fd5b60008060008060008060c087890312156125ea57600080fd5b6125f387612516565b9550602087013594506040870135935061260f606088016125c0565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a03121561264457600080fd5b61264d88612516565b965061265b60208901612516565b95506040880135945060608801359350612677608089016125c0565b925060a0880135915060c0880135905092959891949750929550565b600080604083850312156126a657600080fd5b6126af83612516565b91506126bd60208401612516565b90509250929050565b600080604083850312156126d957600080fd5b6126e283612516565b9150602083013563ffffffff811681146126fb57600080fd5b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600063ffffffff8381169083168181101561275257612752612706565b039392505050565b600063ffffffff80841680612798577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156127d6576127d6612706565b5060010190565b60006bffffffffffffffffffffffff8381169083168181101561275257612752612706565b60006bffffffffffffffffffffffff80831681851680830382111561282957612829612706565b01949350505050565b600063ffffffff8083168185168083038211156128295761282961270656fe476561723a3a617070726f76653a20616d6f756e7420657863656564732039362062697473476561723a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e74206f766572666c6f7773476561723a3a7472616e736665723a20616d6f756e7420657863656564732039362062697473476561723a3a5f6d6f7665566f7465733a20766f746520616d6f756e7420756e646572666c6f7773476561723a3a5f6d6f7665566f7465733a20766f746520616d6f756e74206f766572666c6f7773476561723a3a7065726d69743a20616d6f756e7420657863656564732039362062697473476561723a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d62657220657863656564732033322062697473476561723a3a7472616e7366657246726f6d3a207472616e7366657220616d6f756e742065786365656473207370656e64657220616c6c6f77616e6365476561723a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e7420657863656564732062616c616e6365a26469706673582212201b84fd7789a35c022f692420863210a30e82d2405659f5a28275d433fa53467f64736f6c634300080a0033"; - -type GenesisFactoryConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: GenesisFactoryConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class GenesisFactory__factory extends ContractFactory { - constructor(...args: GenesisFactoryConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - wethToken: string, - treasury: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - wethToken, - treasury, - overrides || {} - ) as Promise; - } - override getDeployTransaction( - wethToken: string, - treasury: string, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(wethToken, treasury, overrides || {}); - } - override attach(address: string): GenesisFactory { - return super.attach(address) as GenesisFactory; - } - override connect(signer: Signer): GenesisFactory__factory { - return super.connect(signer) as GenesisFactory__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): GenesisFactoryInterface { - return new utils.Interface(_abi) as GenesisFactoryInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): GenesisFactory { - return new Contract(address, _abi, signerOrProvider) as GenesisFactory; - } -} diff --git a/src/types/factories/contracts/factories/PoolFactory__factory.ts b/src/types/factories/contracts/factories/PoolFactory__factory.ts deleted file mode 100644 index 4d3c6f5e..00000000 --- a/src/types/factories/contracts/factories/PoolFactory__factory.ts +++ /dev/null @@ -1,248 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - PoolFactory, - PoolFactoryInterface, - PoolOptsStruct, -} from "../../../contracts/factories/PoolFactory"; - -const _abi = [ - { - inputs: [ - { - components: [ - { - internalType: "address", - name: "addressProvider", - type: "address", - }, - { - internalType: "address", - name: "underlying", - type: "address", - }, - { - internalType: "uint256", - name: "U_optimal", - type: "uint256", - }, - { - internalType: "uint256", - name: "R_base", - type: "uint256", - }, - { - internalType: "uint256", - name: "R_slope1", - type: "uint256", - }, - { - internalType: "uint256", - name: "R_slope2", - type: "uint256", - }, - { - internalType: "uint256", - name: "expectedLiquidityLimit", - type: "uint256", - }, - { - internalType: "uint256", - name: "withdrawFee", - type: "uint256", - }, - ], - internalType: "struct PoolOpts", - name: "opts", - type: "tuple", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "RootSelfDestoyException", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "previousOwner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "OwnershipTransferred", - type: "event", - }, - { - inputs: [], - name: "addressProvider", - outputs: [ - { - internalType: "contract AddressProvider", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "configure", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "destoy", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "getRootBack", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "owner", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "pool", - outputs: [ - { - internalType: "contract PoolService", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "renounceOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "root", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "transferOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "withdrawFee", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x60e06040523480156200001157600080fd5b506040516200661f3803806200661f8339810160408190526200003491620004df565b8051620000413362000432565b6001600160a01b038116608081905260408051630873769560e01b815290516308737695916004808201926020929091908290030181865afa1580156200008c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000b2919062000584565b6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000116919062000584565b6001600160a01b031660a0816001600160a01b031681525050506000816020015190506000816001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200017a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620001a49190810190620005dc565b604051602001620001b6919062000694565b604051602081830303815290604052826001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000204573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200022e9190810190620005dc565b604051602001620002409190620006c5565b604051602081830303815290604052836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200028e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b49190620006f0565b604051620002c29062000482565b620002d09392919062000743565b604051809103906000f080158015620002ed573d6000803e3d6000fd5b50905060008360400151846060015185608001518660a00151604051620003149062000490565b938452602084019290925260408301526060820152608001604051809103906000f08015801562000349573d6000803e3d6000fd5b5090508360000151846020015183838760c001516040516200036b906200049e565b6001600160a01b039586168152938516602085015291841660408401529092166060820152608081019190915260a001604051809103906000f080158015620003b8573d6000803e3d6000fd5b506001600160a01b0390811660c081905260405163f2fde38b60e01b815260048101919091529083169063f2fde38b90602401600060405180830381600087803b1580156200040657600080fd5b505af11580156200041b573d6000803e3d6000fd5b50505060e090940151600155506200078092505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6115c4806200125883390190565b610b12806200281c83390190565b6132f1806200332e83390190565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b0381168114620004da57600080fd5b919050565b6000610100808385031215620004f457600080fd5b604051908101906001600160401b0382118183101715620005195762000519620004ac565b816040526200052884620004c2565b81526200053860208501620004c2565b602082015260408401516040820152606084015160608201526080840151608082015260a084015160a082015260c084015160c082015260e084015160e0820152809250505092915050565b6000602082840312156200059757600080fd5b620005a282620004c2565b9392505050565b60005b83811015620005c6578181015183820152602001620005ac565b83811115620005d6576000848401525b50505050565b600060208284031215620005ef57600080fd5b81516001600160401b03808211156200060757600080fd5b818401915084601f8301126200061c57600080fd5b815181811115620006315762000631620004ac565b604051601f8201601f19908116603f011681019083821181831017156200065c576200065c620004ac565b816040528281528760208487010111156200067657600080fd5b62000689836020830160208801620005a9565b979650505050505050565b6603234b2b9b2b6160cd1b815260008251620006b8816007850160208701620005a9565b9190910160070192915050565b601960fa1b815260008251620006e3816001850160208701620005a9565b9190910160010192915050565b6000602082840312156200070357600080fd5b815160ff81168114620005a257600080fd5b600081518084526200072f816020860160208601620005a9565b601f01601f19169290920160200192915050565b60608152600062000758606083018662000715565b82810360208401526200076c818662000715565b91505060ff83166040830152949350505050565b60805160a05160c051610a7f620007d96000396000818160c801528181610894015261093801526000818161019701526107540152600081816101190152818161040a0152818161068a01526107c40152610a7f6000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c8063805abe6a11610076578063e941fa781161005b578063e941fa781461017b578063ebf0c71714610192578063f2fde38b146101b957600080fd5b8063805abe6a146101555780638da5cb5b1461015d57600080fd5b8063318d0d10116100a7578063318d0d101461013b5780633e0b1a2314610145578063715018a61461014d57600080fd5b806316f0115b146100c35780632954018c14610114575b600080fd5b6100ea7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6100ea7f000000000000000000000000000000000000000000000000000000000000000081565b6101436101cc565b005b61014361025c565b6101436102e5565b610143610370565b60005473ffffffffffffffffffffffffffffffffffffffff166100ea565b61018460015481565b60405190815260200161010b565b6100ea7f000000000000000000000000000000000000000000000000000000000000000081565b6101436101c7366004610a08565b610556565b60005473ffffffffffffffffffffffffffffffffffffffff163314610252576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b61025a610686565b565b60005473ffffffffffffffffffffffffffffffffffffffff1633146102dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610249565b6102526107c0565b60005473ffffffffffffffffffffffffffffffffffffffff163314610366576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610249565b61025a6000610971565b60005473ffffffffffffffffffffffffffffffffffffffff1633146103f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610249565b3073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015610473573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104979190610a2c565b73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105059190610a2c565b73ffffffffffffffffffffffffffffffffffffffff161415610553576040517fbdebb83f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33ff5b60005473ffffffffffffffffffffffffffffffffffffffff1633146105d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610249565b73ffffffffffffffffffffffffffffffffffffffff811661067a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610249565b61068381610971565b50565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107179190610a2c565b6040517ff2fde38b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301529192509082169063f2fde38b906024015b600060405180830381600087803b1580156107a557600080fd5b505af11580156107b9573d6000803e3d6000fd5b5050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561082d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108519190610a2c565b6001546040517fb6ac642a00000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169163b6ac642a916108cb9160040190815260200190565b600060405180830381600087803b1580156108e557600080fd5b505af11580156108f9573d6000803e3d6000fd5b50506040517fd914cd4b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301528416925063d914cd4b915060240161078b565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff8116811461068357600080fd5b600060208284031215610a1a57600080fd5b8135610a25816109e6565b9392505050565b600060208284031215610a3e57600080fd5b8151610a25816109e656fea26469706673582212209379b76b6bb82e705615ebdbd76fe6e8c861fcef5284d06595c4b90cadbfec6764736f6c634300080a003360a06040523480156200001157600080fd5b50604051620015c4380380620015c4833981016040819052620000349162000258565b8251839083906200004d906003906020850190620000e5565b50805162000063906004906020840190620000e5565b505050620000806200007a6200008f60201b60201c565b62000093565b60ff16608052506200031a9050565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054620000f390620002dd565b90600052602060002090601f01602090048101928262000117576000855562000162565b82601f106200013257805160ff191683800117855562000162565b8280016001018555821562000162579182015b828111156200016257825182559160200191906001019062000145565b506200017092915062000174565b5090565b5b8082111562000170576000815560010162000175565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001b357600080fd5b81516001600160401b0380821115620001d057620001d06200018b565b604051601f8301601f19908116603f01168101908282118183101715620001fb57620001fb6200018b565b816040528381526020925086838588010111156200021857600080fd5b600091505b838210156200023c57858201830151818301840152908201906200021d565b838211156200024e5760008385830101525b9695505050505050565b6000806000606084860312156200026e57600080fd5b83516001600160401b03808211156200028657600080fd5b6200029487838801620001a1565b94506020860151915080821115620002ab57600080fd5b50620002ba86828701620001a1565b925050604084015160ff81168114620002d257600080fd5b809150509250925092565b600181811c90821680620002f257607f821691505b602082108114156200031457634e487b7160e01b600052602260045260246000fd5b50919050565b60805161128e620003366000396000610172015261128e6000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c8063715018a611610097578063a457c2d711610066578063a457c2d714610245578063a9059cbb14610258578063dd62ed3e1461026b578063f2fde38b146102b157600080fd5b8063715018a6146101fa5780638da5cb5b1461020257806395d89b411461022a5780639dc29fac1461023257600080fd5b8063313ce567116100d3578063313ce5671461016b578063395093511461019c57806340c10f19146101af57806370a08231146101c457600080fd5b806306fdde0314610105578063095ea7b31461012357806318160ddd1461014657806323b872dd14610158575b600080fd5b61010d6102c4565b60405161011a919061104f565b60405180910390f35b6101366101313660046110eb565b610356565b604051901515815260200161011a565b6002545b60405190815260200161011a565b610136610166366004611115565b61036c565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161011a565b6101366101aa3660046110eb565b610457565b6101c26101bd3660046110eb565b6104a0565b005b61014a6101d2366004611151565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c261052f565b60055460405173ffffffffffffffffffffffffffffffffffffffff909116815260200161011a565b61010d6105bc565b6101c26102403660046110eb565b6105cb565b6101366102533660046110eb565b610656565b6101366102663660046110eb565b61072e565b61014a610279366004611173565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101c26102bf366004611151565b61073b565b6060600380546102d3906111a6565b80601f01602080910402602001604051908101604052809291908181526020018280546102ff906111a6565b801561034c5780601f106103215761010080835404028352916020019161034c565b820191906000526020600020905b81548152906001019060200180831161032f57829003601f168201915b5050505050905090565b600061036333848461086b565b50600192915050565b6000610379848484610a1f565b73ffffffffffffffffffffffffffffffffffffffff841660009081526001602090815260408083203384529091529020548281101561043f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61044c853385840361086b565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161036391859061049b908690611229565b61086b565b60055473ffffffffffffffffffffffffffffffffffffffff163314610521576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610436565b61052b8282610cd3565b5050565b60055473ffffffffffffffffffffffffffffffffffffffff1633146105b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610436565b6105ba6000610df3565b565b6060600480546102d3906111a6565b60055473ffffffffffffffffffffffffffffffffffffffff16331461064c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610436565b61052b8282610e6a565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915281205482811015610717576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610436565b610724338585840361086b565b5060019392505050565b6000610363338484610a1f565b60055473ffffffffffffffffffffffffffffffffffffffff1633146107bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610436565b73ffffffffffffffffffffffffffffffffffffffff811661085f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610436565b61086881610df3565b50565b73ffffffffffffffffffffffffffffffffffffffff831661090d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610436565b73ffffffffffffffffffffffffffffffffffffffff82166109b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610436565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610ac2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610436565b73ffffffffffffffffffffffffffffffffffffffff8216610b65576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610436565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610c1b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610436565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610c5f908490611229565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610cc591815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610d50576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610436565b8060026000828254610d629190611229565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610d9c908490611229565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216610f0d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610436565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015610fc3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610436565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290610fff908490611241565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610a12565b600060208083528351808285015260005b8181101561107c57858101830151858201604001528201611060565b8181111561108e576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146110e657600080fd5b919050565b600080604083850312156110fe57600080fd5b611107836110c2565b946020939093013593505050565b60008060006060848603121561112a57600080fd5b611133846110c2565b9250611141602085016110c2565b9150604084013590509250925092565b60006020828403121561116357600080fd5b61116c826110c2565b9392505050565b6000806040838503121561118657600080fd5b61118f836110c2565b915061119d602084016110c2565b90509250929050565b600181811c908216806111ba57607f821691505b602082108114156111f4577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561123c5761123c6111fa565b500190565b600082821015611253576112536111fa565b50039056fea26469706673582212200343c2cef6c2ca469c25e4abb24e7e37ea95105bc70df4cbd4741229aafc595064736f6c634300080a00336101206040523480156200001257600080fd5b5060405162000b1238038062000b1283398101604081905262000035916200021f565b604080518082019091526002815261049560f41b602082015261271085106200007c5760405162461bcd60e51b815260040162000073919062000256565b60405180910390fd5b50604080518082019091526002815261049560f41b6020820152612710841115620000bc5760405162461bcd60e51b815260040162000073919062000256565b50604080518082019091526002815261049560f41b6020820152612710831115620000fc5760405162461bcd60e51b815260040162000073919062000256565b5060006200012185670de0b6b3a7640000620001c160201b6200043c1790919060201c565b608081905290506200013c81670de0b6b3a7640000620002c4565b60a052620001636b033b2e3c9fd0803ce800000085620001c1602090811b6200043c17901c565b60c0526200018a6b033b2e3c9fd0803ce800000084620001c1602090811b6200043c17901c565b60e052620001b16b033b2e3c9fd0803ce800000083620001c1602090811b6200043c17901c565b61010052506200036c9350505050565b6000821580620001cf575081155b15620001de5750600062000219565b612710620001ee600282620002f4565b61ffff16620001fe848662000318565b6200020a91906200033a565b62000216919062000355565b90505b92915050565b600080600080608085870312156200023657600080fd5b505082516020840151604085015160609095015191969095509092509050565b600060208083528351808285015260005b81811015620002855785810183015185820160400152820162000267565b8181111562000298576000604083870101525b50601f01601f1916929092016040019392505050565b634e487b7160e01b600052601160045260246000fd5b600082821015620002d957620002d9620002ae565b500390565b634e487b7160e01b600052601260045260246000fd5b600061ffff808416806200030c576200030c620002de565b92169190910492915050565b6000816000190483118215151615620003355762000335620002ae565b500290565b60008219821115620003505762000350620002ae565b500190565b600082620003675762000367620002de565b500490565b60805160a05160c05160e0516101005161070162000411600039600081816101840152818161030b015261041701526000818160e70152818161025a0152818161033e01526103f401526000818161010e015281816101bc0152818161028e0152818161035f01526103d101526000818161015d01526102bc01526000818160b80152818161020d01528181610235015281816102e001526103a101526107016000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80639cd3fdb51161005b5780639cd3fdb514610109578063c8284e6d14610130578063f81d438114610158578063fc4b2b781461017f57600080fd5b806342568d441461008d57806350ced104146100b357806354fd4d50146100da5780639aec06ea146100e2575b600080fd5b6100a061009b366004610537565b6101a6565b6040519081526020015b60405180910390f35b6100a07f000000000000000000000000000000000000000000000000000000000000000081565b6100a0600181565b6100a07f000000000000000000000000000000000000000000000000000000000000000081565b6100a07f000000000000000000000000000000000000000000000000000000000000000081565b610138610397565b6040805194855260208501939093529183015260608201526080016100aa565b6100a07f000000000000000000000000000000000000000000000000000000000000000081565b6100a07f000000000000000000000000000000000000000000000000000000000000000081565b60008215806101b457508183105b156101e057507f0000000000000000000000000000000000000000000000000000000000000000610391565b6000836101ed8482610588565b6101ff90670de0b6b3a764000061059f565b610209919061060b565b90507f00000000000000000000000000000000000000000000000000000000000000008110156102ba577f000000000000000000000000000000000000000000000000000000000000000061027e827f000000000000000000000000000000000000000000000000000000000000000061059f565b610288919061060b565b6102b2907f000000000000000000000000000000000000000000000000000000000000000061061f565b915050610391565b7f00000000000000000000000000000000000000000000000000000000000000006103057f000000000000000000000000000000000000000000000000000000000000000083610588565b61032f907f000000000000000000000000000000000000000000000000000000000000000061059f565b610339919061060b565b6103837f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000061061f565b61038d919061061f565b9150505b92915050565b60008080806103ce7f0000000000000000000000000000000000000000000000000000000000000000670de0b6b3a764000061048d565b947f000000000000000000000000000000000000000000000000000000000000000094507f000000000000000000000000000000000000000000000000000000000000000093507f000000000000000000000000000000000000000000000000000000000000000092509050565b6000821580610449575081155b1561045657506000610391565b612710610464600282610637565b61ffff16610472848661059f565b61047c919061061f565b610486919061060b565b9392505050565b60408051808201909152600281527f4d33000000000000000000000000000000000000000000000000000000000000602082015260009082610505576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104fc9190610658565b60405180910390fd5b50600061051360028461060b565b905082816105236127108761059f565b61052d919061061f565b61038d919061060b565b6000806040838503121561054a57600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561059a5761059a610559565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156105d7576105d7610559565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261061a5761061a6105dc565b500490565b6000821982111561063257610632610559565b500190565b600061ffff8084168061064c5761064c6105dc565b92169190910492915050565b600060208083528351808285015260005b8181101561068557858101830151858201604001528201610669565b81811115610697576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea26469706673582212205428f2a5431c3c1928793ca5c2c8825fc467250326c6d5ae84382a87d1e80b2164736f6c634300080a003360a06040523480156200001157600080fd5b50604051620032f1380380620032f183398101604081905262000034916200061d565b6000805460ff19169055846001600160a01b0381166200006757604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cc919062000684565b6001600160a01b039081166080526001805586161580159150620000f857506001600160a01b03841615155b80156200010d57506001600160a01b03831615155b80156200012257506001600160a01b03821615155b6040518060400160405280600281526020016105a360f41b81525090620001675760405162461bcd60e51b81526004016200015e9190620006a2565b60405180910390fd5b50600580546001600160a01b038088166001600160a01b03199283168117909355600780548883169084161790556008805491871691909216179055604080516326c74fc360e01b815290516326c74fc3916004808201926020929091908290030181865afa158015620001df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000205919062000684565b600c80546001600160a01b0319166001600160a01b03929092169190911790556b033b2e3c9fd0803ce8000000600d5562000240826200024e565b60035550620007a492505050565b60408051808201909152600281526105a360f41b60208201526001600160a01b038216620002915760405162461bcd60e51b81526004016200015e9190620006a2565b50600680546001600160a01b0319166001600160a01b038316179055620002b96000620002f0565b6040516001600160a01b038216907f0ec6cb7631d36954a05ffd646135bfd9995c71e7fa36d26abb1ad9f24a040ea190600090a250565b80620002fb620003ab565b62000307919062000710565b6002556200031462000424565b600d556006546002546001600160a01b03909116906342568d44906200033962000456565b6040516001600160e01b031960e085901b16815260048101929092526024820152604401602060405180830381865afa1580156200037b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003a191906200072a565b600e555042600f55565b600080600f5442620003be919062000710565b905060006301e133806b033b2e3c9fd0803ce800000083600e54600454620003e7919062000744565b620003f3919062000744565b620003ff919062000766565b6200040b919062000766565b9050806002546200041d919062000789565b9250505090565b600080600f544262000437919062000710565b905062000450600d54600e5483620004cb60201b60201c565b91505090565b6007546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015620004a0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004c691906200072a565b905090565b6000806301e13380620004df848662000744565b620004eb919062000766565b62000503906b033b2e3c9fd0803ce800000062000789565b90506200051f81866200052860201b62001ef01790919060201c565b95945050505050565b600082158062000536575081155b156200054557506000620005fa565b816200055f60026b033b2e3c9fd0803ce800000062000766565b6200056d9060001962000710565b62000579919062000766565b831115604051806040016040528060028152602001614d3160f01b81525090620005b85760405162461bcd60e51b81526004016200015e9190620006a2565b506b033b2e3c9fd0803ce8000000620005d360028262000766565b620005df848662000744565b620005eb919062000789565b620005f7919062000766565b90505b92915050565b80516001600160a01b03811681146200061857600080fd5b919050565b600080600080600060a086880312156200063657600080fd5b620006418662000600565b9450620006516020870162000600565b9350620006616040870162000600565b9250620006716060870162000600565b9150608086015190509295509295909350565b6000602082840312156200069757600080fd5b620005f78262000600565b600060208083528351808285015260005b81811015620006d157858101830151858201604001528201620006b3565b81811115620006e4576000604083870101525b50601f01601f1916929092016040019392505050565b634e487b7160e01b600052601160045260246000fd5b600082821015620007255762000725620006fa565b500390565b6000602082840312156200073d57600080fd5b5051919050565b6000816000190483118215151615620007615762000761620006fa565b500290565b6000826200078457634e487b7160e01b600052601260045260246000fd5b500490565b600082198211156200079f576200079f620006fa565b500190565b608051612b00620007f1600039600081816104700152818161087301528181610a7301528181610bb201528181610e1201528181611365015281816114f60152611b410152612b006000f3fe608060405234801561001057600080fd5b50600436106102775760003560e01c80635c975abb11610160578063bb04b193116100d8578063dbcb313b1161008c578063ef8d960311610071578063ef8d960314610523578063f3fdb15a1461052c578063fe14112d1461054c57600080fd5b8063dbcb313b14610511578063e941fa781461051a57600080fd5b8063c5f956af116100bd578063c5f956af146104cb578063ca9505e4146104eb578063cf33d955146104fe57600080fd5b8063bb04b193146104a5578063bf28068b146104b857600080fd5b80638456cb591161012f578063a4e8273e11610114578063a4e8273e14610463578063a50cf2c81461046b578063b6ac642a1461049257600080fd5b80638456cb59146104485780639aa5d4621461045057600080fd5b80635c975abb14610424578063609ae3171461042f5780637437535914610438578063788c6bfe1461044057600080fd5b806336dda7d5116101f35780634c19386c116101c25780635427c938116101a75780635427c938146103f657806354fd4d50146104095780635664cacf1461041157600080fd5b80634c19386c146103da5780634d778ad1146103e357600080fd5b806336dda7d5146103865780633e163df0146103a65780633f4ba83a146103c957806345d31f9d146103d157600080fd5b80631e16e4fc1161024a5780632954018c1161022f5780632954018c146103205780632e97ca211461034057806331d8bc271461037357600080fd5b80631e16e4fc146102c85780632495a5991461030057600080fd5b8063030dbb041461027c57806305fe138b14610298578063078c4781146102ab5780630fce70fb146102c0575b600080fd5b61028560025481565b6040519081526020015b60405180910390f35b6102856102a6366004612810565b610554565b6102be6102b9366004612840565b610845565b005b61028561099d565b6102db6102d636600461285d565b6109c5565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161028f565b6007546102db9073ffffffffffffffffffffffffffffffffffffffff1681565b6005546102db9073ffffffffffffffffffffffffffffffffffffffff1681565b61036361034e366004612840565b60096020526000908152604090205460ff1681565b604051901515815260200161028f565b610285610381366004612876565b6109fc565b6008546102db9073ffffffffffffffffffffffffffffffffffffffff1681565b6103636103b4366004612840565b600a6020526000908152604090205460ff1681565b6102be610a45565b610285600e5481565b61028560045481565b6102856103f136600461285d565b610b33565b61028561040436600461285d565b610b63565b610285600181565b6102be61041f366004612840565b610b84565b60005460ff16610363565b610285600f5481565b610285610c74565b610285610d0c565b6102be610de4565b6102be61045e3660046128a2565b610ed0565b600b54610285565b6102db7f000000000000000000000000000000000000000000000000000000000000000081565b6102be6104a036600461285d565b611337565b6102be6104b336600461285d565b6114c8565b6102be6104c6366004612810565b6115e1565b600c546102db9073ffffffffffffffffffffffffffffffffffffffff1681565b6102be6104f9366004612876565b611761565b6102be61050c366004612840565b611b13565b610285600d5481565b61028560105481565b61028560035481565b6006546102db9073ffffffffffffffffffffffffffffffffffffffff1681565b610285611e83565b6000805460ff16156105c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064015b60405180910390fd5b60026001541415610634576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016105be565b60026001819055604080518082019091529081527f5a30000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff83166106bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105be9190612906565b5060006106c884610b63565b905060006106e160105483611ffe90919063ffffffff16565b905060006106ef8284612986565b6007549091506107169073ffffffffffffffffffffffffffffffffffffffff168683612034565b811561074657600c546007546107469173ffffffffffffffffffffffffffffffffffffffff918216911684612034565b6008546040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff90911690639dc29fac90604401600060405180830381600087803b1580156107b857600080fd5b505af11580156107cc573d6000803e3d6000fd5b50505050826002546107de9190612986565b6002556107eb600061210d565b60405186815273ffffffffffffffffffffffffffffffffffffffff86169033907fd8ae9b9ba89e637bcb66a69ac91e8f688018e81d6f92c57e02226425c8efbdf69060200160405180910390a36001805595945050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156108cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f3919061299d565b610929576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff811660008181526009602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f9181736fce85d2d4cca2e4406f10679302ae5c387180fdb62963af3cd9a24fd69190a250565b600080600f54426109ae9190612986565b90506109bf600d54600e54836109fc565b91505090565b600b81815481106109d557600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6000806301e13380610a0e84866129bf565b610a189190612a2b565b610a2e906b033b2e3c9fd0803ce8000000612a3f565b9050610a3a8582611ef0565b9150505b9392505050565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa158015610acf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af3919061299d565b610b29576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b316121e2565b565b6000610b3d610d0c565b610b536b033b2e3c9fd0803ce8000000846129bf565b610b5d9190612a2b565b92915050565b60006b033b2e3c9fd0803ce8000000610b7a610d0c565b610b5390846129bf565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610c0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c32919061299d565b610c68576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c71816122c3565b50565b6007546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015610ce3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d079190612a57565b905090565b600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da09190612a57565b905080610dba576b033b2e3c9fd0803ce800000091505090565b806b033b2e3c9fd0803ce8000000610dd0611e83565b610dda91906129bf565b6109bf9190612a2b565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015610e6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e92919061299d565b610ec8576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b316123d4565b60005460ff1615610f3d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016105be565b60026001541415610faa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016105be565b60026001819055604080518082019091529081527f5a30000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8316611032576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105be9190612906565b506003548361103f611e83565b6110499190612a3f565b11156040518060400160405280600381526020017f5053320000000000000000000000000000000000000000000000000000000000815250906110b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105be9190612906565b506007546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015611129573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114d9190612a57565b6007549091506111759073ffffffffffffffffffffffffffffffffffffffff16333087612494565b6007546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152829173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156111e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112079190612a57565b6112119190612986565b60085490945073ffffffffffffffffffffffffffffffffffffffff166340c10f198461123c87610b33565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401600060405180830381600087803b1580156112a757600080fd5b505af11580156112bb573d6000803e3d6000fd5b50505050836002546112cd9190612a3f565b6002556112da600061210d565b604080518581526020810184905273ffffffffffffffffffffffffffffffffffffffff85169133917fd2491a9b4fe81a7cd4511e8b7b7743951b061dad5bed7da8a7795b080ee08c7e910160405180910390a35050600180555050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156113c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e5919061299d565b61141b576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051808201909152600381527f50533300000000000000000000000000000000000000000000000000000000006020820152606482111561148b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105be9190612906565b5060108190556040518181527fd5fe46099fa396290a7f57e36c3c3c8774e2562c18ed5d1dcc0fa75071e03f1d906020015b60405180910390a150565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611552573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611576919061299d565b6115ac576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60038190556040518181527fd7a183c9fe85b604c25d54bd676e0866f6c13bcca9fb9b0850213de118fdc99c906020016114bd565b60005460ff161561164e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016105be565b33600090815260096020908152604091829020548251808401909352600383527f50533000000000000000000000000000000000000000000000000000000000009183019190915260ff166116d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105be9190612906565b506007546116f59073ffffffffffffffffffffffffffffffffffffffff168284612034565b6116ff600061210d565b8160045461170d9190612a3f565b60045560405182815273ffffffffffffffffffffffffffffffffffffffff82169033907f312a5e5e1079f5dda4e95dbbd0b908b291fd5b992ef22073643ab691572c5b529060200160405180910390a35050565b60005460ff16156117ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016105be565b336000908152600a6020908152604091829020548251808401909352600383527f50533000000000000000000000000000000000000000000000000000000000009183019190915260ff16611850576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105be9190612906565b50811561191f57600854600c5473ffffffffffffffffffffffffffffffffffffffff918216916340c10f19911661188685610b33565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401600060405180830381600087803b1580156118f157600080fd5b505af1158015611905573d6000803e3d6000fd5b50505050816002546119179190612a3f565b600255611aab565b600061192a82610b33565b600854600c546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529293506000929116906370a0823190602401602060405180830381865afa1580156119a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c69190612a57565b905081811015611a1a57905080337fef3653ded679720ab04913b6f3820be7cedc8286d42ff5dd8dff17e91bd2964c6119fe83610b63565b611a089086612986565b60405190815260200160405180910390a25b600854600c546040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015260248101859052911690639dc29fac90604401600060405180830381600087803b158015611a9057600080fd5b505af1158015611aa4573d6000803e3d6000fd5b5050505050505b611ab48161210d565b8260046000828254611ac69190612986565b9091555050604080518481526020810184905290810182905233907f2fe77b1c99aca6b022b8efc6e3e8dd1b48b30748709339b65c50ef3263443e099060600160405180910390a2505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611b9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bc1919061299d565b611bf7576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c669190612a70565b73ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600381526020017f505331000000000000000000000000000000000000000000000000000000000081525090611d02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105be9190612906565b5073ffffffffffffffffffffffffffffffffffffffff81166000908152600a6020908152604091829020548251808401909352600383527f50533400000000000000000000000000000000000000000000000000000000009183019190915260ff1615611d9c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105be9190612906565b5073ffffffffffffffffffffffffffffffffffffffff81166000818152600960209081526040808320805460017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009182168117909255600a90935281842080549093168117909255600b8054928301815583527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db990910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055517fe076020e7eac3915d33aec40c24f95e73eb6c9921ff89747d50aa8fd934d2c019190a250565b600080600f5442611e949190612986565b905060006301e133806b033b2e3c9fd0803ce800000083600e54600454611ebb91906129bf565b611ec591906129bf565b611ecf9190612a2b565b611ed99190612a2b565b905080600254611ee99190612a3f565b9250505090565b6000821580611efd575081155b15611f0a57506000610b5d565b81611f2260026b033b2e3c9fd0803ce8000000612a2b565b611f4c907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612986565b611f569190612a2b565b8311156040518060400160405280600281526020017f4d3100000000000000000000000000000000000000000000000000000000000081525090611fc7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105be9190612906565b506b033b2e3c9fd0803ce8000000611fe0600282612a2b565b611fea84866129bf565b611ff49190612a3f565b610a3e9190612a2b565b600082158061200b575081155b1561201857506000610b5d565b612710612026600282612a8d565b61ffff16611fea84866129bf565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526121089084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526124f8565b505050565b80612116611e83565b6121209190612986565b60025561212b61099d565b600d5560065460025473ffffffffffffffffffffffffffffffffffffffff909116906342568d449061215b610c74565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815260048101929092526024820152604401602060405180830381865afa1580156121b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121d89190612a57565b600e555042600f55565b60005460ff1661224e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016105be565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60408051808201909152600281527f5a30000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8216612345576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105be9190612906565b50600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316179055612390600061210d565b60405173ffffffffffffffffffffffffffffffffffffffff8216907f0ec6cb7631d36954a05ffd646135bfd9995c71e7fa36d26abb1ad9f24a040ea190600090a250565b60005460ff1615612441576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016105be565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586122993390565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526124f29085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401612086565b50505050565b600061255a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166126049092919063ffffffff16565b8051909150156121085780806020019051810190612578919061299d565b612108576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016105be565b6060612613848460008561261b565b949350505050565b6060824710156126ad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016105be565b843b612715576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016105be565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161273e9190612aae565b60006040518083038185875af1925050503d806000811461277b576040519150601f19603f3d011682016040523d82523d6000602084013e612780565b606091505b509150915061279082828661279b565b979650505050505050565b606083156127aa575081610a3e565b8251156127ba5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105be9190612906565b73ffffffffffffffffffffffffffffffffffffffff81168114610c7157600080fd5b6000806040838503121561282357600080fd5b823591506020830135612835816127ee565b809150509250929050565b60006020828403121561285257600080fd5b8135610a3e816127ee565b60006020828403121561286f57600080fd5b5035919050565b60008060006060848603121561288b57600080fd5b505081359360208301359350604090920135919050565b6000806000606084860312156128b757600080fd5b8335925060208401356128c9816127ee565b929592945050506040919091013590565b60005b838110156128f55781810151838201526020016128dd565b838111156124f25750506000910152565b60208152600082518060208401526129258160408501602087016128da565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561299857612998612957565b500390565b6000602082840312156129af57600080fd5b81518015158114610a3e57600080fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156129f7576129f7612957565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082612a3a57612a3a6129fc565b500490565b60008219821115612a5257612a52612957565b500190565b600060208284031215612a6957600080fd5b5051919050565b600060208284031215612a8257600080fd5b8151610a3e816127ee565b600061ffff80841680612aa257612aa26129fc565b92169190910492915050565b60008251612ac08184602087016128da565b919091019291505056fea26469706673582212202e86d94ef540565512c64126b9b9532a4a9b8a3e69ed50ee7abae69d0e8164fe64736f6c634300080a0033"; - -type PoolFactoryConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: PoolFactoryConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class PoolFactory__factory extends ContractFactory { - constructor(...args: PoolFactoryConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - opts: PoolOptsStruct, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(opts, overrides || {}) as Promise; - } - override getDeployTransaction( - opts: PoolOptsStruct, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(opts, overrides || {}); - } - override attach(address: string): PoolFactory { - return super.attach(address) as PoolFactory; - } - override connect(signer: Signer): PoolFactory__factory { - return super.connect(signer) as PoolFactory__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): PoolFactoryInterface { - return new utils.Interface(_abi) as PoolFactoryInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): PoolFactory { - return new Contract(address, _abi, signerOrProvider) as PoolFactory; - } -} diff --git a/src/types/factories/contracts/factories/index.ts b/src/types/factories/contracts/factories/index.ts deleted file mode 100644 index 9acc1986..00000000 --- a/src/types/factories/contracts/factories/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { CreditManagerFactory__factory } from "./CreditManagerFactory__factory"; -export { GenesisFactory__factory } from "./GenesisFactory__factory"; -export { PoolFactory__factory } from "./PoolFactory__factory"; diff --git a/src/types/factories/contracts/index.ts b/src/types/factories/contracts/index.ts index 74a42a17..8972a533 100644 --- a/src/types/factories/contracts/index.ts +++ b/src/types/factories/contracts/index.ts @@ -1,16 +1,8 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ -export * as adapters from "./adapters"; -export * as core from "./core"; -export * as credit from "./credit"; -export * as factories from "./factories"; export * as integrations from "./integrations"; export * as interfaces from "./interfaces"; -export * as libraries from "./libraries"; -export * as oracles from "./oracles"; export * as pathfinder from "./pathfinder"; -export * as pool from "./pool"; export * as support from "./support"; export * as test from "./test"; -export * as tokens from "./tokens"; diff --git a/src/types/factories/contracts/interfaces/IACL.sol/IACLExceptions__factory.ts b/src/types/factories/contracts/interfaces/IACL.sol/IACLExceptions__factory.ts new file mode 100644 index 00000000..729e5b85 --- /dev/null +++ b/src/types/factories/contracts/interfaces/IACL.sol/IACLExceptions__factory.ts @@ -0,0 +1,48 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ + +import { Contract, Signer, utils } from "ethers"; +import type { Provider } from "@ethersproject/providers"; +import type { + IACLExceptions, + IACLExceptionsInterface, +} from "../../../../contracts/interfaces/IACL.sol/IACLExceptions"; + +const _abi = [ + { + inputs: [ + { + internalType: "address", + name: "addr", + type: "address", + }, + ], + name: "AddressNotPausableAdminException", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "addr", + type: "address", + }, + ], + name: "AddressNotUnpausableAdminException", + type: "error", + }, +]; + +export class IACLExceptions__factory { + static readonly abi = _abi; + static createInterface(): IACLExceptionsInterface { + return new utils.Interface(_abi) as IACLExceptionsInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): IACLExceptions { + return new Contract(address, _abi, signerOrProvider) as IACLExceptions; + } +} diff --git a/src/types/factories/contracts/interfaces/IACL.sol/IACL__factory.ts b/src/types/factories/contracts/interfaces/IACL.sol/IACL__factory.ts index 66dfbdc9..e0a888d8 100644 --- a/src/types/factories/contracts/interfaces/IACL.sol/IACL__factory.ts +++ b/src/types/factories/contracts/interfaces/IACL.sol/IACL__factory.ts @@ -10,6 +10,28 @@ import type { } from "../../../../contracts/interfaces/IACL.sol/IACL"; const _abi = [ + { + inputs: [ + { + internalType: "address", + name: "addr", + type: "address", + }, + ], + name: "AddressNotPausableAdminException", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "addr", + type: "address", + }, + ], + name: "AddressNotUnpausableAdminException", + type: "error", + }, { anonymous: false, inputs: [ diff --git a/src/types/factories/contracts/interfaces/IACL.sol/index.ts b/src/types/factories/contracts/interfaces/IACL.sol/index.ts index 6d76efe5..4b4beba2 100644 --- a/src/types/factories/contracts/interfaces/IACL.sol/index.ts +++ b/src/types/factories/contracts/interfaces/IACL.sol/index.ts @@ -3,3 +3,4 @@ /* eslint-disable */ export { IACL__factory } from "./IACL__factory"; export { IACLEvents__factory } from "./IACLEvents__factory"; +export { IACLExceptions__factory } from "./IACLExceptions__factory"; diff --git a/src/types/factories/contracts/interfaces/ICreditConfigurator.sol/ICreditConfiguratorEvents__factory.ts b/src/types/factories/contracts/interfaces/ICreditConfigurator.sol/ICreditConfiguratorEvents__factory.ts index 5378d549..e1403627 100644 --- a/src/types/factories/contracts/interfaces/ICreditConfigurator.sol/ICreditConfiguratorEvents__factory.ts +++ b/src/types/factories/contracts/interfaces/ICreditConfigurator.sol/ICreditConfiguratorEvents__factory.ts @@ -94,6 +94,32 @@ const _abi = [ name: "DegenModeUpdated", type: "event", }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "", + type: "address", + }, + ], + name: "EmergencyLiquidatorAdded", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "", + type: "address", + }, + ], + name: "EmergencyLiquidatorRemoved", + type: "event", + }, { anonymous: false, inputs: [ diff --git a/src/types/factories/contracts/interfaces/ICreditConfigurator.sol/ICreditConfigurator__factory.ts b/src/types/factories/contracts/interfaces/ICreditConfigurator.sol/ICreditConfigurator__factory.ts index d496b04f..00e36509 100644 --- a/src/types/factories/contracts/interfaces/ICreditConfigurator.sol/ICreditConfigurator__factory.ts +++ b/src/types/factories/contracts/interfaces/ICreditConfigurator.sol/ICreditConfigurator__factory.ts @@ -154,6 +154,32 @@ const _abi = [ name: "DegenModeUpdated", type: "event", }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "", + type: "address", + }, + ], + name: "EmergencyLiquidatorAdded", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "", + type: "address", + }, + ], + name: "EmergencyLiquidatorRemoved", + type: "event", + }, { anonymous: false, inputs: [ @@ -382,33 +408,14 @@ const _abi = [ stateMutability: "nonpayable", type: "function", }, - { - inputs: [ - { - internalType: "uint256", - name: "i", - type: "uint256", - }, - ], - name: "allowedContracts", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, { inputs: [], - name: "allowedContractsCount", + name: "allowedContracts", outputs: [ { - internalType: "uint256", + internalType: "address[]", name: "", - type: "uint256", + type: "address[]", }, ], stateMutability: "view", diff --git a/src/types/factories/contracts/interfaces/ICreditFacade.sol/ICreditFacadeExceptions__factory.ts b/src/types/factories/contracts/interfaces/ICreditFacade.sol/ICreditFacadeExceptions__factory.ts index e9daec4f..a4924619 100644 --- a/src/types/factories/contracts/interfaces/ICreditFacade.sol/ICreditFacadeExceptions__factory.ts +++ b/src/types/factories/contracts/interfaces/ICreditFacade.sol/ICreditFacadeExceptions__factory.ts @@ -22,7 +22,7 @@ const _abi = [ }, { inputs: [], - name: "AllowanceFailedExpcetion", + name: "AllowanceFailedException", type: "error", }, { @@ -33,7 +33,7 @@ const _abi = [ type: "address", }, ], - name: "BalanceLessThanMinimumDesired", + name: "BalanceLessThanMinimumDesiredException", type: "error", }, { @@ -71,6 +71,11 @@ const _abi = [ name: "CreditFacadeOnlyException", type: "error", }, + { + inputs: [], + name: "ExpectedBalancesAlreadySetException", + type: "error", + }, { inputs: [], name: "ForbiddenDuringClosureException", @@ -113,7 +118,7 @@ const _abi = [ }, { inputs: [], - name: "OpenAccountNotAllowedAfterExpiration", + name: "OpenAccountNotAllowedAfterExpirationException", type: "error", }, { @@ -123,7 +128,7 @@ const _abi = [ }, { inputs: [], - name: "TargetContractNotAllowedExpcetion", + name: "TargetContractNotAllowedException", type: "error", }, { diff --git a/src/types/factories/contracts/interfaces/ICreditFacade.sol/ICreditFacadeExtended__factory.ts b/src/types/factories/contracts/interfaces/ICreditFacade.sol/ICreditFacadeExtended__factory.ts index ddb9bf0f..1fdae493 100644 --- a/src/types/factories/contracts/interfaces/ICreditFacade.sol/ICreditFacadeExtended__factory.ts +++ b/src/types/factories/contracts/interfaces/ICreditFacade.sol/ICreditFacadeExtended__factory.ts @@ -26,17 +26,24 @@ const _abi = [ { inputs: [ { - internalType: "address", - name: "token", - type: "address", - }, - { - internalType: "uint256", - name: "minBalance", - type: "uint256", + components: [ + { + internalType: "address", + name: "token", + type: "address", + }, + { + internalType: "uint256", + name: "balance", + type: "uint256", + }, + ], + internalType: "struct Balance[]", + name: "expected", + type: "tuple[]", }, ], - name: "revertIfBalanceLessThan", + name: "revertIfGetLessThan", outputs: [], stateMutability: "nonpayable", type: "function", diff --git a/src/types/factories/contracts/interfaces/ICreditFacade.sol/ICreditFacade__factory.ts b/src/types/factories/contracts/interfaces/ICreditFacade.sol/ICreditFacade__factory.ts index 77f964b1..1d79b25d 100644 --- a/src/types/factories/contracts/interfaces/ICreditFacade.sol/ICreditFacade__factory.ts +++ b/src/types/factories/contracts/interfaces/ICreditFacade.sol/ICreditFacade__factory.ts @@ -22,7 +22,7 @@ const _abi = [ }, { inputs: [], - name: "AllowanceFailedExpcetion", + name: "AllowanceFailedException", type: "error", }, { @@ -33,7 +33,7 @@ const _abi = [ type: "address", }, ], - name: "BalanceLessThanMinimumDesired", + name: "BalanceLessThanMinimumDesiredException", type: "error", }, { @@ -71,6 +71,11 @@ const _abi = [ name: "CreditFacadeOnlyException", type: "error", }, + { + inputs: [], + name: "ExpectedBalancesAlreadySetException", + type: "error", + }, { inputs: [], name: "ForbiddenDuringClosureException", @@ -113,7 +118,7 @@ const _abi = [ }, { inputs: [], - name: "OpenAccountNotAllowedAfterExpiration", + name: "OpenAccountNotAllowedAfterExpirationException", type: "error", }, { @@ -123,7 +128,7 @@ const _abi = [ }, { inputs: [], - name: "TargetContractNotAllowedExpcetion", + name: "TargetContractNotAllowedException", type: "error", }, { diff --git a/src/types/factories/contracts/interfaces/ICreditManagerV2.sol/ICreditManagerV2Exceptions__factory.ts b/src/types/factories/contracts/interfaces/ICreditManagerV2.sol/ICreditManagerV2Exceptions__factory.ts index b4b5632c..60fdc443 100644 --- a/src/types/factories/contracts/interfaces/ICreditManagerV2.sol/ICreditManagerV2Exceptions__factory.ts +++ b/src/types/factories/contracts/interfaces/ICreditManagerV2.sol/ICreditManagerV2Exceptions__factory.ts @@ -17,7 +17,7 @@ const _abi = [ }, { inputs: [], - name: "AllowanceFailedExpcetion", + name: "AllowanceFailedException", type: "error", }, { @@ -47,7 +47,7 @@ const _abi = [ }, { inputs: [], - name: "TargetContractNotAllowedExpcetion", + name: "TargetContractNotAllowedException", type: "error", }, { diff --git a/src/types/factories/contracts/interfaces/ICreditManagerV2.sol/ICreditManagerV2__factory.ts b/src/types/factories/contracts/interfaces/ICreditManagerV2.sol/ICreditManagerV2__factory.ts index 8963c318..7f67c4d2 100644 --- a/src/types/factories/contracts/interfaces/ICreditManagerV2.sol/ICreditManagerV2__factory.ts +++ b/src/types/factories/contracts/interfaces/ICreditManagerV2.sol/ICreditManagerV2__factory.ts @@ -17,7 +17,7 @@ const _abi = [ }, { inputs: [], - name: "AllowanceFailedExpcetion", + name: "AllowanceFailedException", type: "error", }, { @@ -47,7 +47,7 @@ const _abi = [ }, { inputs: [], - name: "TargetContractNotAllowedExpcetion", + name: "TargetContractNotAllowedException", type: "error", }, { @@ -264,6 +264,30 @@ const _abi = [ name: "borrowedAmountWithInterest", type: "uint256", }, + { + internalType: "uint256", + name: "borrowedAmountWithInterestAndFees", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + name: "canLiquidateWhilePaused", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, ], stateMutability: "view", type: "function", diff --git a/src/types/factories/contracts/interfaces/IDataCompressor.sol/IDataCompressor__factory.ts b/src/types/factories/contracts/interfaces/IDataCompressor.sol/IDataCompressor__factory.ts index b4533f1a..d6d9e923 100644 --- a/src/types/factories/contracts/interfaces/IDataCompressor.sol/IDataCompressor__factory.ts +++ b/src/types/factories/contracts/interfaces/IDataCompressor.sol/IDataCompressor__factory.ts @@ -67,6 +67,11 @@ const _abi = [ name: "borrowedAmountPlusInterest", type: "uint256", }, + { + internalType: "uint256", + name: "borrowedAmountPlusInterestAndFees", + type: "uint256", + }, { internalType: "uint256", name: "totalValue", @@ -200,6 +205,11 @@ const _abi = [ name: "borrowedAmountPlusInterest", type: "uint256", }, + { + internalType: "uint256", + name: "borrowedAmountPlusInterestAndFees", + type: "uint256", + }, { internalType: "uint256", name: "totalValue", diff --git a/src/types/factories/contracts/interfaces/IDieselToken.sol/IDieselTokenExceptions__factory.ts b/src/types/factories/contracts/interfaces/IDieselToken.sol/IDieselTokenExceptions__factory.ts new file mode 100644 index 00000000..9653059b --- /dev/null +++ b/src/types/factories/contracts/interfaces/IDieselToken.sol/IDieselTokenExceptions__factory.ts @@ -0,0 +1,35 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ + +import { Contract, Signer, utils } from "ethers"; +import type { Provider } from "@ethersproject/providers"; +import type { + IDieselTokenExceptions, + IDieselTokenExceptionsInterface, +} from "../../../../contracts/interfaces/IDieselToken.sol/IDieselTokenExceptions"; + +const _abi = [ + { + inputs: [], + name: "PoolServiceOnlyException", + type: "error", + }, +]; + +export class IDieselTokenExceptions__factory { + static readonly abi = _abi; + static createInterface(): IDieselTokenExceptionsInterface { + return new utils.Interface(_abi) as IDieselTokenExceptionsInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): IDieselTokenExceptions { + return new Contract( + address, + _abi, + signerOrProvider + ) as IDieselTokenExceptions; + } +} diff --git a/src/types/factories/contracts/tokens/PhantomERC20__factory.ts b/src/types/factories/contracts/interfaces/IDieselToken.sol/IDieselToken__factory.ts similarity index 74% rename from src/types/factories/contracts/tokens/PhantomERC20__factory.ts rename to src/types/factories/contracts/interfaces/IDieselToken.sol/IDieselToken__factory.ts index 8d0f5be3..bc170828 100644 --- a/src/types/factories/contracts/tokens/PhantomERC20__factory.ts +++ b/src/types/factories/contracts/interfaces/IDieselToken.sol/IDieselToken__factory.ts @@ -5,11 +5,16 @@ import { Contract, Signer, utils } from "ethers"; import type { Provider } from "@ethersproject/providers"; import type { - PhantomERC20, - PhantomERC20Interface, -} from "../../../contracts/tokens/PhantomERC20"; + IDieselToken, + IDieselTokenInterface, +} from "../../../../contracts/interfaces/IDieselToken.sol/IDieselToken"; const _abi = [ + { + inputs: [], + name: "PoolServiceOnlyException", + type: "error", + }, { anonymous: false, inputs: [ @@ -64,12 +69,12 @@ const _abi = [ inputs: [ { internalType: "address", - name: "", + name: "owner", type: "address", }, { internalType: "address", - name: "", + name: "spender", type: "address", }, ], @@ -81,19 +86,19 @@ const _abi = [ type: "uint256", }, ], - stateMutability: "pure", + stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", - name: "", + name: "spender", type: "address", }, { internalType: "uint256", - name: "", + name: "amount", type: "uint256", }, ], @@ -105,7 +110,7 @@ const _abi = [ type: "bool", }, ], - stateMutability: "pure", + stateMutability: "nonpayable", type: "function", }, { @@ -129,38 +134,12 @@ const _abi = [ }, { inputs: [], - name: "decimals", - outputs: [ - { - internalType: "uint8", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "symbol", + name: "poolService", outputs: [ { - internalType: "string", + internalType: "address", name: "", - type: "string", + type: "address", }, ], stateMutability: "view", @@ -183,12 +162,12 @@ const _abi = [ inputs: [ { internalType: "address", - name: "", + name: "recipient", type: "address", }, { internalType: "uint256", - name: "", + name: "amount", type: "uint256", }, ], @@ -200,24 +179,24 @@ const _abi = [ type: "bool", }, ], - stateMutability: "pure", + stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", - name: "", + name: "sender", type: "address", }, { internalType: "address", - name: "", + name: "recipient", type: "address", }, { internalType: "uint256", - name: "", + name: "amount", type: "uint256", }, ], @@ -229,33 +208,20 @@ const _abi = [ type: "bool", }, ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "underlying", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", + stateMutability: "nonpayable", type: "function", }, ]; -export class PhantomERC20__factory { +export class IDieselToken__factory { static readonly abi = _abi; - static createInterface(): PhantomERC20Interface { - return new utils.Interface(_abi) as PhantomERC20Interface; + static createInterface(): IDieselTokenInterface { + return new utils.Interface(_abi) as IDieselTokenInterface; } static connect( address: string, signerOrProvider: Signer | Provider - ): PhantomERC20 { - return new Contract(address, _abi, signerOrProvider) as PhantomERC20; + ): IDieselToken { + return new Contract(address, _abi, signerOrProvider) as IDieselToken; } } diff --git a/src/types/factories/contracts/interfaces/IDieselToken.sol/index.ts b/src/types/factories/contracts/interfaces/IDieselToken.sol/index.ts new file mode 100644 index 00000000..90e81497 --- /dev/null +++ b/src/types/factories/contracts/interfaces/IDieselToken.sol/index.ts @@ -0,0 +1,5 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export { IDieselToken__factory } from "./IDieselToken__factory"; +export { IDieselTokenExceptions__factory } from "./IDieselTokenExceptions__factory"; diff --git a/src/types/factories/contracts/interfaces/ILPPriceFeed.sol/ILPPriceFeedExceptions__factory.ts b/src/types/factories/contracts/interfaces/ILPPriceFeed.sol/ILPPriceFeedExceptions__factory.ts index c8dc9c21..9f0f8940 100644 --- a/src/types/factories/contracts/interfaces/ILPPriceFeed.sol/ILPPriceFeedExceptions__factory.ts +++ b/src/types/factories/contracts/interfaces/ILPPriceFeed.sol/ILPPriceFeedExceptions__factory.ts @@ -17,7 +17,7 @@ const _abi = [ }, { inputs: [], - name: "ValueOutOfRangeExpcetion", + name: "ValueOutOfRangeException", type: "error", }, ]; diff --git a/src/types/factories/contracts/interfaces/ILPPriceFeed.sol/ILPPriceFeed__factory.ts b/src/types/factories/contracts/interfaces/ILPPriceFeed.sol/ILPPriceFeed__factory.ts index 48194e95..69ce3877 100644 --- a/src/types/factories/contracts/interfaces/ILPPriceFeed.sol/ILPPriceFeed__factory.ts +++ b/src/types/factories/contracts/interfaces/ILPPriceFeed.sol/ILPPriceFeed__factory.ts @@ -17,7 +17,7 @@ const _abi = [ }, { inputs: [], - name: "ValueOutOfRangeExpcetion", + name: "ValueOutOfRangeException", type: "error", }, { diff --git a/src/types/factories/contracts/interfaces/adapters/convex/IConvexV1BaseRewardPoolAdapter.sol/IConvexV1BaseRewardPoolAdapter__factory.ts b/src/types/factories/contracts/interfaces/adapters/convex/IConvexV1BaseRewardPoolAdapter.sol/IConvexV1BaseRewardPoolAdapter__factory.ts index 8e06677b..5cd53b4c 100644 --- a/src/types/factories/contracts/interfaces/adapters/convex/IConvexV1BaseRewardPoolAdapter.sol/IConvexV1BaseRewardPoolAdapter__factory.ts +++ b/src/types/factories/contracts/interfaces/adapters/convex/IConvexV1BaseRewardPoolAdapter.sol/IConvexV1BaseRewardPoolAdapter__factory.ts @@ -103,19 +103,6 @@ const _abi = [ stateMutability: "view", type: "function", }, - { - inputs: [], - name: "crv", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, { inputs: [], name: "currentRewards", @@ -155,19 +142,6 @@ const _abi = [ stateMutability: "view", type: "function", }, - { - inputs: [], - name: "cvxLPtoken", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, { inputs: [ { diff --git a/src/types/factories/contracts/interfaces/adapters/curve/ICurveV1Adapter.sol/ICurveV1Adapter__factory.ts b/src/types/factories/contracts/interfaces/adapters/curve/ICurveV1Adapter.sol/ICurveV1Adapter__factory.ts index c2223d37..74474158 100644 --- a/src/types/factories/contracts/interfaces/adapters/curve/ICurveV1Adapter.sol/ICurveV1Adapter__factory.ts +++ b/src/types/factories/contracts/interfaces/adapters/curve/ICurveV1Adapter.sol/ICurveV1Adapter__factory.ts @@ -258,6 +258,30 @@ const _abi = [ stateMutability: "view", type: "function", }, + { + inputs: [ + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + { + internalType: "int128", + name: "i", + type: "int128", + }, + ], + name: "calc_add_one_coin", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, { inputs: [ { diff --git a/src/types/factories/contracts/interfaces/adapters/lido/ILidoV1Adapter.sol/ILidoV1Adapter__factory.ts b/src/types/factories/contracts/interfaces/adapters/lido/ILidoV1Adapter.sol/ILidoV1Adapter__factory.ts index 28644f2e..7fa8b9cb 100644 --- a/src/types/factories/contracts/interfaces/adapters/lido/ILidoV1Adapter.sol/ILidoV1Adapter__factory.ts +++ b/src/types/factories/contracts/interfaces/adapters/lido/ILidoV1Adapter.sol/ILidoV1Adapter__factory.ts @@ -269,6 +269,38 @@ const _abi = [ stateMutability: "view", type: "function", }, + { + inputs: [ + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "submit", + outputs: [ + { + internalType: "uint256", + name: "result", + type: "uint256", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "submitAll", + outputs: [ + { + internalType: "uint256", + name: "result", + type: "uint256", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, { inputs: [], name: "symbol", diff --git a/src/types/factories/contracts/interfaces/index.ts b/src/types/factories/contracts/interfaces/index.ts index 407b7d55..ad27885e 100644 --- a/src/types/factories/contracts/interfaces/index.ts +++ b/src/types/factories/contracts/interfaces/index.ts @@ -11,6 +11,7 @@ export * as iCreditFacadeSol from "./ICreditFacade.sol"; export * as iCreditManagerV2Sol from "./ICreditManagerV2.sol"; export * as iDataCompressorSol from "./IDataCompressor.sol"; export * as iDegenNftSol from "./IDegenNFT.sol"; +export * as iDieselTokenSol from "./IDieselToken.sol"; export * as ilpPriceFeedSol from "./ILPPriceFeed.sol"; export * as iPoolServiceSol from "./IPoolService.sol"; export * as iPriceOracleSol from "./IPriceOracle.sol"; diff --git a/src/types/factories/contracts/libraries/Errors__factory.ts b/src/types/factories/contracts/libraries/Errors__factory.ts deleted file mode 100644 index f7e372a8..00000000 --- a/src/types/factories/contracts/libraries/Errors__factory.ts +++ /dev/null @@ -1,488 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - Errors, - ErrorsInterface, -} from "../../../contracts/libraries/Errors"; - -const _abi = [ - { - inputs: [], - name: "ACL_CALLER_NOT_CONFIGURATOR", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "ACL_CALLER_NOT_PAUSABLE_ADMIN", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "AF_CANT_CLOSE_CREDIT_ACCOUNT_IN_THE_SAME_BLOCK", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "AF_CREDIT_ACCOUNT_NOT_IN_STOCK", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "AF_EXTERNAL_ACCOUNTS_ARE_FORBIDDEN", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "AF_MINING_IS_FINISHED", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "AS_ADDRESS_NOT_FOUND", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "CA_CONNECTED_CREDIT_MANAGER_ONLY", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "CA_FACTORY_ONLY", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "CR_CREDIT_MANAGER_ALREADY_ADDED", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "CR_POOL_ALREADY_ADDED", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "INCORRECT_ARRAY_LENGTH", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "INCORRECT_PARAMETER", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "INCORRECT_PATH_LENGTH", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "MATH_ADDITION_OVERFLOW", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "MATH_DIVISION_BY_ZERO", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "MATH_MULTIPLICATION_OVERFLOW", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "NOT_IMPLEMENTED", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "POOL_CANT_ADD_CREDIT_MANAGER_TWICE", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "POOL_CONNECTED_CREDIT_MANAGERS_ONLY", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "POOL_INCOMPATIBLE_CREDIT_ACCOUNT_MANAGER", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "POOL_INCORRECT_WITHDRAW_FEE", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "POOL_MORE_THAN_EXPECTED_LIQUIDITY_LIMIT", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "REGISTERED_CREDIT_ACCOUNT_MANAGERS_ONLY", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "REGISTERED_POOLS_ONLY", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "TD_CONTRIBUTOR_IS_NOT_REGISTERED", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "TD_INCORRECT_WEIGHTS", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "TD_NON_ZERO_BALANCE_AFTER_DISTRIBUTION", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "TD_WALLET_IS_ALREADY_CONNECTED_TO_VC", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "WG_DESTINATION_IS_NOT_WETH_COMPATIBLE", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "WG_NOT_ENOUGH_FUNDS", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "WG_RECEIVE_IS_NOT_ALLOWED", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "ZERO_ADDRESS_IS_NOT_ALLOWED", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x610a9561003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106102155760003560e01c806387f88ef411610134578063bdcb2576116100c7578063de63cd4011610096578063ebbd977f1161007b578063ebbd977f14610938578063fe32e65d14610974578063ff2a04e3146109b057600080fd5b8063de63cd40146108c0578063e7f3be0c146108fc57600080fd5b8063bdcb2576146107d0578063beea5ec21461080c578063ccbf927814610848578063d1a65a381461088457600080fd5b8063a988ac6011610103578063a988ac60146106e0578063abc3d2541461071c578063ac75713914610758578063b563b3001461079457600080fd5b806387f88ef4146105f057806394391a4a1461062c57806399a98c9914610668578063a27c0370146106a457600080fd5b80633647c9f9116101ac57806343f6e4ab1161017b57806343f6e4ab14610500578063447d8e421461053c578063532789111461057857806376d9ebb8146105b457600080fd5b80633647c9f9146104105780633df46fe51461044c5780633f3153b2146104885780634349e3d8146104c457600080fd5b80630f5ee482116101e85780630f5ee48214610320578063119427c51461035c5780632357f3621461039857806328432c22146103d457600080fd5b8063029d23441461021a5780630a2b1d3a1461026c5780630afeee97146102a85780630c9409e7146102e4575b600080fd5b6102566040518060400160405280600281526020017f4d3100000000000000000000000000000000000000000000000000000000000081525081565b60405161026391906109ec565b60405180910390f35b6102566040518060400160405280600381526020017f435231000000000000000000000000000000000000000000000000000000000081525081565b6102566040518060400160405280600281526020017f525000000000000000000000000000000000000000000000000000000000000081525081565b6102566040518060400160405280600381526020017f414631000000000000000000000000000000000000000000000000000000000081525081565b6102566040518060400160405280600281526020017f4d3200000000000000000000000000000000000000000000000000000000000081525081565b6102566040518060400160405280600381526020017f505332000000000000000000000000000000000000000000000000000000000081525081565b6102566040518060400160405280600381526020017f434132000000000000000000000000000000000000000000000000000000000081525081565b6102566040518060400160405280600381526020017f505333000000000000000000000000000000000000000000000000000000000081525081565b6102566040518060400160405280600381526020017f574731000000000000000000000000000000000000000000000000000000000081525081565b6102566040518060400160405280600281526020017f504c00000000000000000000000000000000000000000000000000000000000081525081565b6102566040518060400160405280600281526020017f5a3000000000000000000000000000000000000000000000000000000000000081525081565b6102566040518060400160405280600281526020017f4d3300000000000000000000000000000000000000000000000000000000000081525081565b6102566040518060400160405280600281526020017f4e4900000000000000000000000000000000000000000000000000000000000081525081565b6102566040518060400160405280600381526020017f574732000000000000000000000000000000000000000000000000000000000081525081565b6102566040518060400160405280600381526020017f544431000000000000000000000000000000000000000000000000000000000081525081565b6102566040518060400160405280600381526020017f505330000000000000000000000000000000000000000000000000000000000081525081565b6102566040518060400160405280600381526020017f414632000000000000000000000000000000000000000000000000000000000081525081565b6102566040518060400160405280600281526020017f435000000000000000000000000000000000000000000000000000000000000081525081565b6102566040518060400160405280600381526020017f435232000000000000000000000000000000000000000000000000000000000081525081565b6102566040518060400160405280600381526020017f505331000000000000000000000000000000000000000000000000000000000081525081565b6102566040518060400160405280600481526020017f41434c310000000000000000000000000000000000000000000000000000000081525081565b6102566040518060400160405280600381526020017f544433000000000000000000000000000000000000000000000000000000000081525081565b6102566040518060400160405280600381526020017f414633000000000000000000000000000000000000000000000000000000000081525081565b6102566040518060400160405280600381526020017f544434000000000000000000000000000000000000000000000000000000000081525081565b6102566040518060400160405280600281526020017f495000000000000000000000000000000000000000000000000000000000000081525081565b6102566040518060400160405280600381526020017f574733000000000000000000000000000000000000000000000000000000000081525081565b6102566040518060400160405280600381526020017f505334000000000000000000000000000000000000000000000000000000000081525081565b6102566040518060400160405280600381526020017f414634000000000000000000000000000000000000000000000000000000000081525081565b6102566040518060400160405280600381526020017f415031000000000000000000000000000000000000000000000000000000000081525081565b6102566040518060400160405280600281526020017f435200000000000000000000000000000000000000000000000000000000000081525081565b6102566040518060400160405280600481526020017f41434c320000000000000000000000000000000000000000000000000000000081525081565b6102566040518060400160405280600381526020017f544432000000000000000000000000000000000000000000000000000000000081525081565b6102566040518060400160405280600381526020017f434131000000000000000000000000000000000000000000000000000000000081525081565b600060208083528351808285015260005b81811015610a19578581018301518582016040015282016109fd565b81811115610a2b576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea26469706673582212207d6fca73d8c68aff297981e476620ef540d065cd4cd3ca9446293984f773c93664736f6c634300080a0033"; - -type ErrorsConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: ErrorsConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class Errors__factory extends ContractFactory { - constructor(...args: ErrorsConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): Errors { - return super.attach(address) as Errors; - } - override connect(signer: Signer): Errors__factory { - return super.connect(signer) as Errors__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): ErrorsInterface { - return new utils.Interface(_abi) as ErrorsInterface; - } - static connect(address: string, signerOrProvider: Signer | Provider): Errors { - return new Contract(address, _abi, signerOrProvider) as Errors; - } -} diff --git a/src/types/factories/contracts/libraries/index.ts b/src/types/factories/contracts/libraries/index.ts deleted file mode 100644 index 82065247..00000000 --- a/src/types/factories/contracts/libraries/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { Errors__factory } from "./Errors__factory"; diff --git a/src/types/factories/contracts/oracles/LPPriceFeed__factory.ts b/src/types/factories/contracts/oracles/LPPriceFeed__factory.ts deleted file mode 100644 index fd3966ca..00000000 --- a/src/types/factories/contracts/oracles/LPPriceFeed__factory.ts +++ /dev/null @@ -1,350 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import { Contract, Signer, utils } from "ethers"; -import type { Provider } from "@ethersproject/providers"; -import type { - LPPriceFeed, - LPPriceFeedInterface, -} from "../../../contracts/oracles/LPPriceFeed"; - -const _abi = [ - { - inputs: [], - name: "CallerNotConfiguratorException", - type: "error", - }, - { - inputs: [], - name: "CallerNotPausableAdminException", - type: "error", - }, - { - inputs: [], - name: "CallerNotUnPausableAdminException", - type: "error", - }, - { - inputs: [], - name: "ChainPriceStaleException", - type: "error", - }, - { - inputs: [], - name: "IncorrectLimitsException", - type: "error", - }, - { - inputs: [], - name: "NotImplementedException", - type: "error", - }, - { - inputs: [], - name: "PriceOracleNotExistsException", - type: "error", - }, - { - inputs: [], - name: "ValueOutOfRangeExpcetion", - type: "error", - }, - { - inputs: [], - name: "ZeroAddressException", - type: "error", - }, - { - inputs: [], - name: "ZeroPriceException", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "lowerBound", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "upperBound", - type: "uint256", - }, - ], - name: "NewLimiterParams", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "Paused", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "Unpaused", - type: "event", - }, - { - inputs: [], - name: "_acl", - outputs: [ - { - internalType: "contract ACL", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "decimals", - outputs: [ - { - internalType: "uint8", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "delta", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "description", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint80", - name: "", - type: "uint80", - }, - ], - name: "getRoundData", - outputs: [ - { - internalType: "uint80", - name: "", - type: "uint80", - }, - { - internalType: "int256", - name: "", - type: "int256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint80", - name: "", - type: "uint80", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "latestRoundData", - outputs: [ - { - internalType: "uint80", - name: "roundId", - type: "uint80", - }, - { - internalType: "int256", - name: "answer", - type: "int256", - }, - { - internalType: "uint256", - name: "startedAt", - type: "uint256", - }, - { - internalType: "uint256", - name: "updatedAt", - type: "uint256", - }, - { - internalType: "uint80", - name: "answeredInRound", - type: "uint80", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "lowerBound", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "pause", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "paused", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "priceFeedType", - outputs: [ - { - internalType: "enum PriceFeedType", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_lowerBound", - type: "uint256", - }, - ], - name: "setLimiter", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "skipPriceCheck", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "unpause", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "upperBound", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -export class LPPriceFeed__factory { - static readonly abi = _abi; - static createInterface(): LPPriceFeedInterface { - return new utils.Interface(_abi) as LPPriceFeedInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): LPPriceFeed { - return new Contract(address, _abi, signerOrProvider) as LPPriceFeed; - } -} diff --git a/src/types/factories/contracts/oracles/PriceFeedChecker__factory.ts b/src/types/factories/contracts/oracles/PriceFeedChecker__factory.ts deleted file mode 100644 index 71e47bf9..00000000 --- a/src/types/factories/contracts/oracles/PriceFeedChecker__factory.ts +++ /dev/null @@ -1,77 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - PriceFeedChecker, - PriceFeedCheckerInterface, -} from "../../../contracts/oracles/PriceFeedChecker"; - -const _abi = [ - { - inputs: [], - name: "ChainPriceStaleException", - type: "error", - }, - { - inputs: [], - name: "PriceOracleNotExistsException", - type: "error", - }, - { - inputs: [], - name: "ZeroPriceException", - type: "error", - }, -]; - -const _bytecode = - "0x6080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea264697066735822122012990d1b60511b53fddf875dc23f66237fa2e51cb07ae44794b157a17e54dee664736f6c634300080a0033"; - -type PriceFeedCheckerConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: PriceFeedCheckerConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class PriceFeedChecker__factory extends ContractFactory { - constructor(...args: PriceFeedCheckerConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): PriceFeedChecker { - return super.attach(address) as PriceFeedChecker; - } - override connect(signer: Signer): PriceFeedChecker__factory { - return super.connect(signer) as PriceFeedChecker__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): PriceFeedCheckerInterface { - return new utils.Interface(_abi) as PriceFeedCheckerInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): PriceFeedChecker { - return new Contract(address, _abi, signerOrProvider) as PriceFeedChecker; - } -} diff --git a/src/types/factories/contracts/oracles/PriceOracle__factory.ts b/src/types/factories/contracts/oracles/PriceOracle__factory.ts deleted file mode 100644 index c14431bc..00000000 --- a/src/types/factories/contracts/oracles/PriceOracle__factory.ts +++ /dev/null @@ -1,458 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - PriceOracle, - PriceOracleInterface, - PriceFeedConfigStruct, -} from "../../../contracts/oracles/PriceOracle"; - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "addressProvider", - type: "address", - }, - { - components: [ - { - internalType: "address", - name: "token", - type: "address", - }, - { - internalType: "address", - name: "priceFeed", - type: "address", - }, - ], - internalType: "struct PriceFeedConfig[]", - name: "defaults", - type: "tuple[]", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "AddressIsNotContractException", - type: "error", - }, - { - inputs: [], - name: "CallerNotConfiguratorException", - type: "error", - }, - { - inputs: [], - name: "CallerNotPausableAdminException", - type: "error", - }, - { - inputs: [], - name: "CallerNotUnPausableAdminException", - type: "error", - }, - { - inputs: [], - name: "ChainPriceStaleException", - type: "error", - }, - { - inputs: [], - name: "IncorrectPriceFeedException", - type: "error", - }, - { - inputs: [], - name: "IncorrectTokenContractException", - type: "error", - }, - { - inputs: [], - name: "PriceOracleNotExistsException", - type: "error", - }, - { - inputs: [], - name: "ZeroAddressException", - type: "error", - }, - { - inputs: [], - name: "ZeroPriceException", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "token", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "priceFeed", - type: "address", - }, - ], - name: "NewPriceFeed", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "Paused", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "Unpaused", - type: "event", - }, - { - inputs: [], - name: "_acl", - outputs: [ - { - internalType: "contract ACL", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "token", - type: "address", - }, - { - internalType: "address", - name: "priceFeed", - type: "address", - }, - ], - name: "addPriceFeed", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "address", - name: "tokenFrom", - type: "address", - }, - { - internalType: "address", - name: "tokenTo", - type: "address", - }, - ], - name: "convert", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "address", - name: "token", - type: "address", - }, - ], - name: "convertFromUSD", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "address", - name: "token", - type: "address", - }, - ], - name: "convertToUSD", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountFrom", - type: "uint256", - }, - { - internalType: "address", - name: "tokenFrom", - type: "address", - }, - { - internalType: "uint256", - name: "amountTo", - type: "uint256", - }, - { - internalType: "address", - name: "tokenTo", - type: "address", - }, - ], - name: "fastCheck", - outputs: [ - { - internalType: "uint256", - name: "collateralFrom", - type: "uint256", - }, - { - internalType: "uint256", - name: "collateralTo", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "token", - type: "address", - }, - ], - name: "getPrice", - outputs: [ - { - internalType: "uint256", - name: "price", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "pause", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "paused", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "token", - type: "address", - }, - ], - name: "priceFeeds", - outputs: [ - { - internalType: "address", - name: "priceFeed", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "token", - type: "address", - }, - ], - name: "priceFeedsWithFlags", - outputs: [ - { - internalType: "address", - name: "priceFeed", - type: "address", - }, - { - internalType: "bool", - name: "skipCheck", - type: "bool", - }, - { - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "unpause", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x60a06040523480156200001157600080fd5b5060405162001b4538038062001b45833981016040819052620000349162000608565b6000805460ff19169055816001600160a01b0381166200006757604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cc91906200070a565b6001600160a01b031660805250805160005b818110156200014257620001398382815181106200010057620001006200072f565b6020026020010151600001518483815181106200012157620001216200072f565b6020026020010151602001516200014c60201b60201c565b600101620000de565b5050505062000822565b6001600160a01b03821615806200016a57506001600160a01b038116155b156200018957604051635919af9760e11b815260040160405180910390fd5b620001a8826001600160a01b0316620004ba60201b620006751760201c565b620001d65760405163df4c572d60e01b81526001600160a01b03831660048201526024015b60405180910390fd5b620001f5816001600160a01b0316620004ba60201b620006751760201c565b6200021f5760405163df4c572d60e01b81526001600160a01b0382166004820152602401620001cd565b806001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200027c575060408051601f3d908101601f19168201909252620002799181019062000745565b60015b6200029a576040516367a7cd4360e01b815260040160405180910390fd5b8060ff16600814620002bf576040516367a7cd4360e01b815260040160405180910390fd5b506000816001600160a01b031663d62ada116040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200031f575060408051601f3d908101601f191682019092526200031c918101906200076a565b60015b6200032a576200032d565b90505b6000836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200038c575060408051601f3d908101601f19168201909252620003899181019062000745565b60015b620003aa5760405163528ca31d60e01b815260040160405180910390fd5b60128160ff161115620003d05760405163528ca31d60e01b815260040160405180910390fd5b9050826001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa9250505080156200042f575060408051601f3d908101601f191682019092526200042c91810190620007a6565b60015b6200044d576040516367a7cd4360e01b815260040160405180910390fd5b8662000461576200046185858484620004c0565b5050505050620004748484848462000526565b826001600160a01b0316846001600160a01b03167fe263805b03657ab13064915d0723c5ce14981547e7cba5283f66b9e5d81f6e6e60405160405180910390a350505050565b3b151590565b60008313620004e2576040516356e05d2b60e01b815260040160405180910390fd5b836001600160501b0316816001600160501b0316108062000501575081155b15620005205760405163b1cf675560e01b815260040160405180910390fd5b50505050565b6001600160a01b03831682156200053e57600160a11b175b6200055460ff60a21b60a284901b1682620007fb565b6001600160a01b0390951660009081526001602052604090209490945550505050565b80516001600160a01b03811681146200058f57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715620005cf57620005cf62000594565b60405290565b604051601f8201601f191681016001600160401b038111828210171562000600576200060062000594565b604052919050565b60008060408084860312156200061d57600080fd5b620006288462000577565b602085810151919450906001600160401b03808211156200064857600080fd5b818701915087601f8301126200065d57600080fd5b81518181111562000672576200067262000594565b62000682848260051b01620005d5565b818152848101925060069190911b830184019089821115620006a357600080fd5b928401925b81841015620006fa5785848b031215620006c25760008081fd5b620006cc620005aa565b620006d78562000577565b8152620006e686860162000577565b8187015283529285019291840191620006a8565b8096505050505050509250929050565b6000602082840312156200071d57600080fd5b620007288262000577565b9392505050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156200075857600080fd5b815160ff811681146200072857600080fd5b6000602082840312156200077d57600080fd5b815180151581146200072857600080fd5b80516001600160501b03811681146200058f57600080fd5b600080600080600060a08688031215620007bf57600080fd5b620007ca866200078e565b9450602086015193506040860151925060608601519150620007ef608087016200078e565b90509295509295909350565b600082198211156200081d57634e487b7160e01b600052601160045260246000fd5b500190565b6080516112f262000853600039600081816101b201528181610280015281816103e201526104ff01526112f26000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c80638456cb591161008c578063b66102df11610066578063b66102df146101d4578063e8a97a3e146101e7578063f190e5fa146101fa578063f9a650301461023f57600080fd5b80638456cb591461016d5780639dcb511a14610175578063a50cf2c8146101ad57600080fd5b80635c975abb116100bd5780635c975abb1461011c5780635cecbd0e146101325780637afb01041461015a57600080fd5b80633f4ba83a146100e457806341976e09146100ee57806354fd4d5014610114575b600080fd5b6100ec610252565b005b6101016100fc366004610f28565b610340565b6040519081526020015b60405180910390f35b610101600281565b60005460ff16604051901515815260200161010b565b610145610140366004610f4a565b610352565b6040805192835260208301919091520161010b565b610101610168366004610f90565b610376565b6100ec6103b4565b610188610183366004610f28565b6104a0565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010b565b6101887f000000000000000000000000000000000000000000000000000000000000000081565b6101016101e2366004610fbc565b6104b4565b6100ec6101f5366004610ff8565b6104d1565b61020d610208366004610f28565b6105c3565b6040805173ffffffffffffffffffffffffffffffffffffffff909416845291151560208401529082015260600161010b565b61010161024d366004610f90565b61064d565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156102dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103009190611022565b610336576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033e61067b565b565b600061034b82610761565b5092915050565b60008061035f868661064d565b915061036b848461064d565b905094509492505050565b600080600061038484610761565b90925090508161039582600a611193565b61039f908761119f565b6103a991906111dc565b925050505b92915050565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561043e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104629190611022565b610498576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033e610819565b60006104ab826105c3565b50909392505050565b60006104c96104c3858561064d565b83610376565b949350505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561055b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057f9190611022565b6105b5576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105bf82826108d9565b5050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600160205260408120548190819080610624576040517f4bb8ad8200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b947402000000000000000000000000000000000000000086161515945060a286901c9350915050565b600080600061065b84610761565b909250905061066b81600a611193565b61039f838761119f565b3b151590565b60005460ff166106ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b600080600080610770856105c3565b8095508193508294505050506000806000808573ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156107cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f19190611231565b9450945050935093508461080b5761080b84848484610dd9565b829750505050505050915091565b60005460ff1615610886576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016106e3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586107373390565b73ffffffffffffffffffffffffffffffffffffffff82161580610910575073ffffffffffffffffffffffffffffffffffffffff8116155b15610947576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82163b6109ad576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016106e3565b73ffffffffffffffffffffffffffffffffffffffff81163b610a13576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024016106e3565b8073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610a98575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610a9591810190611281565b60015b610ace576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060ff16600814610b0b576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060008173ffffffffffffffffffffffffffffffffffffffff1663d62ada116040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610b93575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610b9091810190611022565b60015b610b9c57610b9f565b90505b60008373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610c26575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610c2391810190611281565b60015b610c5c576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60128160ff161115610c9a576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b90508273ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa925050508015610d21575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610d1e91810190611231565b60015b610d57576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b86610d6857610d6885858484610dd9565b5050505050610d7984848484610e74565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fe263805b03657ab13064915d0723c5ce14981547e7cba5283f66b9e5d81f6e6e60405160405180910390a350505050565b60008313610e13576040517f56e05d2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8369ffffffffffffffffffff168169ffffffffffffffffffff161080610e37575081155b15610e6e576040517fb1cf675500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b73ffffffffffffffffffffffffffffffffffffffff83168215610ea95774020000000000000000000000000000000000000000175b610ecf7503fc000000000000000000000000000000000000000060a284901b16826112a4565b73ffffffffffffffffffffffffffffffffffffffff90951660009081526001602052604090209490945550505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610f2357600080fd5b919050565b600060208284031215610f3a57600080fd5b610f4382610eff565b9392505050565b60008060008060808587031215610f6057600080fd5b84359350610f7060208601610eff565b925060408501359150610f8560608601610eff565b905092959194509250565b60008060408385031215610fa357600080fd5b82359150610fb360208401610eff565b90509250929050565b600080600060608486031215610fd157600080fd5b83359250610fe160208501610eff565b9150610fef60408501610eff565b90509250925092565b6000806040838503121561100b57600080fd5b61101483610eff565b9150610fb360208401610eff565b60006020828403121561103457600080fd5b81518015158114610f4357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b808511156110cc57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156110b2576110b2611044565b808516156110bf57918102915b93841c9390800290611078565b509250929050565b6000826110e3575060016103ae565b816110f0575060006103ae565b816001811461110657600281146111105761112c565b60019150506103ae565b60ff84111561112157611121611044565b50506001821b6103ae565b5060208310610133831016604e8410600b841016171561114f575081810a6103ae565b6111598383611073565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561118b5761118b611044565b029392505050565b6000610f4383836110d4565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156111d7576111d7611044565b500290565b600082611212577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b805169ffffffffffffffffffff81168114610f2357600080fd5b600080600080600060a0868803121561124957600080fd5b61125286611217565b945060208601519350604086015192506060860151915061127560808701611217565b90509295509295909350565b60006020828403121561129357600080fd5b815160ff81168114610f4357600080fd5b600082198211156112b7576112b7611044565b50019056fea2646970667358221220e7485a2cb5750973f539ca59d2211008b42bb92b6c49605a53f5d9c88c330fb164736f6c634300080a0033"; - -type PriceOracleConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: PriceOracleConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class PriceOracle__factory extends ContractFactory { - constructor(...args: PriceOracleConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - addressProvider: string, - defaults: PriceFeedConfigStruct[], - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - addressProvider, - defaults, - overrides || {} - ) as Promise; - } - override getDeployTransaction( - addressProvider: string, - defaults: PriceFeedConfigStruct[], - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction( - addressProvider, - defaults, - overrides || {} - ); - } - override attach(address: string): PriceOracle { - return super.attach(address) as PriceOracle; - } - override connect(signer: Signer): PriceOracle__factory { - return super.connect(signer) as PriceOracle__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): PriceOracleInterface { - return new utils.Interface(_abi) as PriceOracleInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): PriceOracle { - return new Contract(address, _abi, signerOrProvider) as PriceOracle; - } -} diff --git a/src/types/factories/contracts/oracles/ZeroPriceFeed__factory.ts b/src/types/factories/contracts/oracles/ZeroPriceFeed__factory.ts deleted file mode 100644 index 4f18513c..00000000 --- a/src/types/factories/contracts/oracles/ZeroPriceFeed__factory.ts +++ /dev/null @@ -1,204 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - ZeroPriceFeed, - ZeroPriceFeedInterface, -} from "../../../contracts/oracles/ZeroPriceFeed"; - -const _abi = [ - { - inputs: [], - name: "NotImplementedException", - type: "error", - }, - { - inputs: [], - name: "decimals", - outputs: [ - { - internalType: "uint8", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "description", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint80", - name: "", - type: "uint80", - }, - ], - name: "getRoundData", - outputs: [ - { - internalType: "uint80", - name: "", - type: "uint80", - }, - { - internalType: "int256", - name: "", - type: "int256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint80", - name: "", - type: "uint80", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "latestRoundData", - outputs: [ - { - internalType: "uint80", - name: "roundId", - type: "uint80", - }, - { - internalType: "int256", - name: "answer", - type: "int256", - }, - { - internalType: "uint256", - name: "startedAt", - type: "uint256", - }, - { - internalType: "uint256", - name: "updatedAt", - type: "uint256", - }, - { - internalType: "uint80", - name: "answeredInRound", - type: "uint80", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "priceFeedType", - outputs: [ - { - internalType: "enum PriceFeedType", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "skipPriceCheck", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x608060405234801561001057600080fd5b506102da806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80637284e4161161005b5780637284e416146100cc5780639a6fc8f514610115578063d62ada111461015f578063feaf968c1461017757600080fd5b8063313ce567146100825780633fd0875f146100a157806354fd4d50146100b6575b600080fd5b61008a600881565b60405160ff90911681526020015b60405180910390f35b6100a9600581565b60405161009891906101bd565b6100be600181565b604051908152602001610098565b6101086040518060400160405280600e81526020017f5a65726f2070726963656665656400000000000000000000000000000000000081525081565b60405161009891906101fe565b610128610123366004610271565b610183565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610098565b610167600181565b6040519015158152602001610098565b60016000428083610128565b60008060008060006040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208101600683106101f8577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b600060208083528351808285015260005b8181101561022b5785810183015185820160400152820161020f565b8181111561023d576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60006020828403121561028357600080fd5b813569ffffffffffffffffffff8116811461029d57600080fd5b939250505056fea264697066735822122022d38108114e4b0f90bffdca6f01ae82a1ba53476258c2385aeda40a5af3500b64736f6c634300080a0033"; - -type ZeroPriceFeedConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: ZeroPriceFeedConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class ZeroPriceFeed__factory extends ContractFactory { - constructor(...args: ZeroPriceFeedConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): ZeroPriceFeed { - return super.attach(address) as ZeroPriceFeed; - } - override connect(signer: Signer): ZeroPriceFeed__factory { - return super.connect(signer) as ZeroPriceFeed__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): ZeroPriceFeedInterface { - return new utils.Interface(_abi) as ZeroPriceFeedInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): ZeroPriceFeed { - return new Contract(address, _abi, signerOrProvider) as ZeroPriceFeed; - } -} diff --git a/src/types/factories/contracts/oracles/curve/AbstractCurveLPPriceFeed__factory.ts b/src/types/factories/contracts/oracles/curve/AbstractCurveLPPriceFeed__factory.ts deleted file mode 100644 index 7302de98..00000000 --- a/src/types/factories/contracts/oracles/curve/AbstractCurveLPPriceFeed__factory.ts +++ /dev/null @@ -1,380 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import { Contract, Signer, utils } from "ethers"; -import type { Provider } from "@ethersproject/providers"; -import type { - AbstractCurveLPPriceFeed, - AbstractCurveLPPriceFeedInterface, -} from "../../../../contracts/oracles/curve/AbstractCurveLPPriceFeed"; - -const _abi = [ - { - inputs: [], - name: "CallerNotConfiguratorException", - type: "error", - }, - { - inputs: [], - name: "CallerNotPausableAdminException", - type: "error", - }, - { - inputs: [], - name: "CallerNotUnPausableAdminException", - type: "error", - }, - { - inputs: [], - name: "ChainPriceStaleException", - type: "error", - }, - { - inputs: [], - name: "IncorrectLimitsException", - type: "error", - }, - { - inputs: [], - name: "NotImplementedException", - type: "error", - }, - { - inputs: [], - name: "PriceOracleNotExistsException", - type: "error", - }, - { - inputs: [], - name: "ValueOutOfRangeExpcetion", - type: "error", - }, - { - inputs: [], - name: "ZeroAddressException", - type: "error", - }, - { - inputs: [], - name: "ZeroPriceException", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "lowerBound", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "upperBound", - type: "uint256", - }, - ], - name: "NewLimiterParams", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "Paused", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "Unpaused", - type: "event", - }, - { - inputs: [], - name: "_acl", - outputs: [ - { - internalType: "contract ACL", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "curvePool", - outputs: [ - { - internalType: "contract ICurvePool", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "decimals", - outputs: [ - { - internalType: "uint8", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "decimalsDivider", - outputs: [ - { - internalType: "int256", - name: "", - type: "int256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "delta", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "description", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint80", - name: "", - type: "uint80", - }, - ], - name: "getRoundData", - outputs: [ - { - internalType: "uint80", - name: "", - type: "uint80", - }, - { - internalType: "int256", - name: "", - type: "int256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint80", - name: "", - type: "uint80", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "latestRoundData", - outputs: [ - { - internalType: "uint80", - name: "roundId", - type: "uint80", - }, - { - internalType: "int256", - name: "answer", - type: "int256", - }, - { - internalType: "uint256", - name: "startedAt", - type: "uint256", - }, - { - internalType: "uint256", - name: "updatedAt", - type: "uint256", - }, - { - internalType: "uint80", - name: "answeredInRound", - type: "uint80", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "lowerBound", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "pause", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "paused", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "priceFeedType", - outputs: [ - { - internalType: "enum PriceFeedType", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_lowerBound", - type: "uint256", - }, - ], - name: "setLimiter", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "skipPriceCheck", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "unpause", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "upperBound", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -export class AbstractCurveLPPriceFeed__factory { - static readonly abi = _abi; - static createInterface(): AbstractCurveLPPriceFeedInterface { - return new utils.Interface(_abi) as AbstractCurveLPPriceFeedInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): AbstractCurveLPPriceFeed { - return new Contract( - address, - _abi, - signerOrProvider - ) as AbstractCurveLPPriceFeed; - } -} diff --git a/src/types/factories/contracts/oracles/curve/CurveLP2PriceFeed__factory.ts b/src/types/factories/contracts/oracles/curve/CurveLP2PriceFeed__factory.ts deleted file mode 100644 index 1efe5ab0..00000000 --- a/src/types/factories/contracts/oracles/curve/CurveLP2PriceFeed__factory.ts +++ /dev/null @@ -1,493 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - CurveLP2PriceFeed, - CurveLP2PriceFeedInterface, -} from "../../../../contracts/oracles/curve/CurveLP2PriceFeed"; - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "addressProvider", - type: "address", - }, - { - internalType: "address", - name: "_curvePool", - type: "address", - }, - { - internalType: "address", - name: "_priceFeed1", - type: "address", - }, - { - internalType: "address", - name: "_priceFeed2", - type: "address", - }, - { - internalType: "string", - name: "_description", - type: "string", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "CallerNotConfiguratorException", - type: "error", - }, - { - inputs: [], - name: "CallerNotPausableAdminException", - type: "error", - }, - { - inputs: [], - name: "CallerNotUnPausableAdminException", - type: "error", - }, - { - inputs: [], - name: "ChainPriceStaleException", - type: "error", - }, - { - inputs: [], - name: "IncorrectLimitsException", - type: "error", - }, - { - inputs: [], - name: "NotImplementedException", - type: "error", - }, - { - inputs: [], - name: "PriceOracleNotExistsException", - type: "error", - }, - { - inputs: [], - name: "ValueOutOfRangeExpcetion", - type: "error", - }, - { - inputs: [], - name: "ZeroAddressException", - type: "error", - }, - { - inputs: [], - name: "ZeroPriceException", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "lowerBound", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "upperBound", - type: "uint256", - }, - ], - name: "NewLimiterParams", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "Paused", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "Unpaused", - type: "event", - }, - { - inputs: [], - name: "_acl", - outputs: [ - { - internalType: "contract ACL", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "curvePool", - outputs: [ - { - internalType: "contract ICurvePool", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "decimals", - outputs: [ - { - internalType: "uint8", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "decimalsDivider", - outputs: [ - { - internalType: "int256", - name: "", - type: "int256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "delta", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "description", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint80", - name: "", - type: "uint80", - }, - ], - name: "getRoundData", - outputs: [ - { - internalType: "uint80", - name: "", - type: "uint80", - }, - { - internalType: "int256", - name: "", - type: "int256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint80", - name: "", - type: "uint80", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "latestRoundData", - outputs: [ - { - internalType: "uint80", - name: "roundId", - type: "uint80", - }, - { - internalType: "int256", - name: "answer", - type: "int256", - }, - { - internalType: "uint256", - name: "startedAt", - type: "uint256", - }, - { - internalType: "uint256", - name: "updatedAt", - type: "uint256", - }, - { - internalType: "uint80", - name: "answeredInRound", - type: "uint80", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "lowerBound", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "pause", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "paused", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "priceFeed1", - outputs: [ - { - internalType: "contract AggregatorV3Interface", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "priceFeed2", - outputs: [ - { - internalType: "contract AggregatorV3Interface", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "priceFeedType", - outputs: [ - { - internalType: "enum PriceFeedType", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_lowerBound", - type: "uint256", - }, - ], - name: "setLimiter", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "skipPriceCheck", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "unpause", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "upperBound", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x6101406040523480156200001257600080fd5b506040516200171338038062001713833981016040819052620000359162000389565b6000805460ff191690558484828260c882826001600160a01b0381166200006f57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000ae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d49190620004b3565b6001600160a01b0316608052508051620000f6906002906020840190620002b0565b505060a052506001600160a01b0382166200012457604051635919af9760e11b815260040160405180910390fd5b6001600160a01b03821660c0819052670de0b6b3a764000060e05260408051630176f71760e71b815290516000929163bb7b8b809160048083019260209291908290030181865afa1580156200017e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001a49190620004d8565b9050620001b18162000210565b505050506001600160a01b0383161580620001d357506001600160a01b038216155b15620001f257604051635919af9760e11b815260040160405180910390fd5b506001600160a01b0391821661010052166101205250620005a59050565b806200022f576040516309aadd6f60e41b815260040160405180910390fd5b60018190557f82e7ee47180a631312683eeb2a85ad264c9af490d54de5a75bbdb95b968c6de28162000261816200027c565b6040805192835260208301919091520160405180910390a150565b60a0516000906127109062000292908262000508565b6200029e908462000523565b620002aa919062000545565b92915050565b828054620002be9062000568565b90600052602060002090601f016020900481019282620002e257600085556200032d565b82601f10620002fd57805160ff19168380011785556200032d565b828001600101855582156200032d579182015b828111156200032d57825182559160200191906001019062000310565b506200033b9291506200033f565b5090565b5b808211156200033b576000815560010162000340565b80516001600160a01b03811681146200036e57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600080600080600060a08688031215620003a257600080fd5b620003ad8662000356565b94506020620003be81880162000356565b9450620003ce6040880162000356565b9350620003de6060880162000356565b60808801519093506001600160401b0380821115620003fc57600080fd5b818901915089601f8301126200041157600080fd5b81518181111562000426576200042662000373565b604051601f8201601f19908116603f0116810190838211818310171562000451576200045162000373565b816040528281528c868487010111156200046a57600080fd5b600093505b828410156200048e57848401860151818501870152928501926200046f565b82841115620004a05760008684830101525b8096505050505050509295509295909350565b600060208284031215620004c657600080fd5b620004d18262000356565b9392505050565b600060208284031215620004eb57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156200051e576200051e620004f2565b500190565b6000816000190483118215151615620005405762000540620004f2565b500290565b6000826200056357634e487b7160e01b600052601260045260246000fd5b500490565b600181811c908216806200057d57607f821691505b602082108114156200059f57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c05160e05161010051610120516110e66200062d6000396000818161034101526107c80152600081816102f701526107190152600081816102d00152610923015260008181610195015261088701526000818161015b0152610b150152600081816102a90152818161039901528181610515015261064d01526110e66000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c80639a6fc8f5116100cd578063b09ad8a011610081578063d62ada1111610066578063d62ada1114610334578063e5693f411461033c578063feaf968c1461036357600080fd5b8063b09ad8a014610319578063bc489a651461032157600080fd5b8063a50cf2c8116100b2578063a50cf2c8146102a4578063a834559e146102cb578063ab0ca0e1146102f257600080fd5b80639a6fc8f514610251578063a384d6ff1461029b57600080fd5b80633fd0875f116101245780635c975abb116101095780635c975abb1461021d5780637284e416146102345780638456cb591461024957600080fd5b80633fd0875f1461020057806354fd4d501461021557600080fd5b806312b495a814610156578063218751b214610190578063313ce567146101dc5780633f4ba83a146101f6575b600080fd5b61017d7f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b6101b77f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610187565b6101e4600881565b60405160ff9091168152602001610187565b6101fe61036b565b005b610208600281565b6040516101879190610cd5565b61017d600181565b60005460ff165b6040519015158152602001610187565b61023c610459565b6040516101879190610d16565b6101fe6104e7565b61026461025f366004610da1565b6105d3565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610187565b61017d60015481565b6101b77f000000000000000000000000000000000000000000000000000000000000000081565b61017d7f000000000000000000000000000000000000000000000000000000000000000081565b6101b77f000000000000000000000000000000000000000000000000000000000000000081565b61017d61060d565b6101fe61032f366004610dc5565b61061f565b610224600181565b6101b77f000000000000000000000000000000000000000000000000000000000000000081565b61026461070f565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156103f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104199190610dde565b61044f576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610457610965565b565b6002805461046690610e00565b80601f016020809104026020016040519081016040528092919081815260200182805461049290610e00565b80156104df5780601f106104b4576101008083540402835291602001916104df565b820191906000526020600020905b8154815290600101906020018083116104c257829003601f168201915b505050505081565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015610571573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105959190610dde565b6105cb576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610457610a4b565b60008060008060006040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061061a600154610b0b565b905090565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156106a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106cd9190610dde565b610703576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61070c81610b54565b50565b60008060008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610782573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a69190610e54565b9398509196509450925090506107be85858484610bd6565b60008060008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610831573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108559190610e54565b9450945094509450945061086b85858484610bd6565b88841215610883578499508398508297508196508095505b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb7b8b806040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109149190610eac565b905061091f81610c71565b90507f000000000000000000000000000000000000000000000000000000000000000061094c828c610ef4565b6109569190610fdf565b99505050505050509091929394565b60005460ff166109d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff1615610ab8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016109cd565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610a213390565b6000612710610b3a7f000000000000000000000000000000000000000000000000000000000000000082611047565b610b44908461105f565b610b4e919061109c565b92915050565b80610b8b576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190557f82e7ee47180a631312683eeb2a85ad264c9af490d54de5a75bbdb95b968c6de281610bbb81610b0b565b6040805192835260208301919091520160405180910390a150565b60008313610c10576040517f56e05d2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8369ffffffffffffffffffff168169ffffffffffffffffffff161080610c34575081155b15610c6b576040517fb1cf675500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60015460009080831015610cb1576040517fb416da7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610cbc82610b0b565b905080841115610ccd579392505050565b509192915050565b6020810160068310610d10577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b600060208083528351808285015260005b81811015610d4357858101830151858201604001528201610d27565b81811115610d55576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b69ffffffffffffffffffff8116811461070c57600080fd5b600060208284031215610db357600080fd5b8135610dbe81610d89565b9392505050565b600060208284031215610dd757600080fd5b5035919050565b600060208284031215610df057600080fd5b81518015158114610dbe57600080fd5b600181811c90821680610e1457607f821691505b60208210811415610e4e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600080600080600060a08688031215610e6c57600080fd5b8551610e7781610d89565b809550506020860151935060408601519250606086015191506080860151610e9e81610d89565b809150509295509295909350565b600060208284031215610ebe57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615610f3557610f35610ec5565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615610f7057610f70610ec5565b60008712925087820587128484161615610f8c57610f8c610ec5565b87850587128184161615610fa257610fa2610ec5565b505050929093029392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082610fee57610fee610fb0565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f80000000000000000000000000000000000000000000000000000000000000008314161561104257611042610ec5565b500590565b6000821982111561105a5761105a610ec5565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561109757611097610ec5565b500290565b6000826110ab576110ab610fb0565b50049056fea2646970667358221220ca5730f8ac976a41fd1283a55d712276536b576394940abc65027e8592280cc364736f6c634300080a0033"; - -type CurveLP2PriceFeedConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: CurveLP2PriceFeedConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class CurveLP2PriceFeed__factory extends ContractFactory { - constructor(...args: CurveLP2PriceFeedConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - addressProvider: string, - _curvePool: string, - _priceFeed1: string, - _priceFeed2: string, - _description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - addressProvider, - _curvePool, - _priceFeed1, - _priceFeed2, - _description, - overrides || {} - ) as Promise; - } - override getDeployTransaction( - addressProvider: string, - _curvePool: string, - _priceFeed1: string, - _priceFeed2: string, - _description: string, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction( - addressProvider, - _curvePool, - _priceFeed1, - _priceFeed2, - _description, - overrides || {} - ); - } - override attach(address: string): CurveLP2PriceFeed { - return super.attach(address) as CurveLP2PriceFeed; - } - override connect(signer: Signer): CurveLP2PriceFeed__factory { - return super.connect(signer) as CurveLP2PriceFeed__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): CurveLP2PriceFeedInterface { - return new utils.Interface(_abi) as CurveLP2PriceFeedInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): CurveLP2PriceFeed { - return new Contract(address, _abi, signerOrProvider) as CurveLP2PriceFeed; - } -} diff --git a/src/types/factories/contracts/oracles/curve/CurveLP3PriceFeed__factory.ts b/src/types/factories/contracts/oracles/curve/CurveLP3PriceFeed__factory.ts deleted file mode 100644 index 576581aa..00000000 --- a/src/types/factories/contracts/oracles/curve/CurveLP3PriceFeed__factory.ts +++ /dev/null @@ -1,515 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - CurveLP3PriceFeed, - CurveLP3PriceFeedInterface, -} from "../../../../contracts/oracles/curve/CurveLP3PriceFeed"; - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "addressProvider", - type: "address", - }, - { - internalType: "address", - name: "_curvePool", - type: "address", - }, - { - internalType: "address", - name: "_priceFeed1", - type: "address", - }, - { - internalType: "address", - name: "_priceFeed2", - type: "address", - }, - { - internalType: "address", - name: "_priceFeed3", - type: "address", - }, - { - internalType: "string", - name: "_description", - type: "string", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "CallerNotConfiguratorException", - type: "error", - }, - { - inputs: [], - name: "CallerNotPausableAdminException", - type: "error", - }, - { - inputs: [], - name: "CallerNotUnPausableAdminException", - type: "error", - }, - { - inputs: [], - name: "ChainPriceStaleException", - type: "error", - }, - { - inputs: [], - name: "IncorrectLimitsException", - type: "error", - }, - { - inputs: [], - name: "NotImplementedException", - type: "error", - }, - { - inputs: [], - name: "PriceOracleNotExistsException", - type: "error", - }, - { - inputs: [], - name: "ValueOutOfRangeExpcetion", - type: "error", - }, - { - inputs: [], - name: "ZeroAddressException", - type: "error", - }, - { - inputs: [], - name: "ZeroPriceException", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "lowerBound", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "upperBound", - type: "uint256", - }, - ], - name: "NewLimiterParams", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "Paused", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "Unpaused", - type: "event", - }, - { - inputs: [], - name: "_acl", - outputs: [ - { - internalType: "contract ACL", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "curvePool", - outputs: [ - { - internalType: "contract ICurvePool", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "decimals", - outputs: [ - { - internalType: "uint8", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "decimalsDivider", - outputs: [ - { - internalType: "int256", - name: "", - type: "int256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "delta", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "description", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint80", - name: "", - type: "uint80", - }, - ], - name: "getRoundData", - outputs: [ - { - internalType: "uint80", - name: "", - type: "uint80", - }, - { - internalType: "int256", - name: "", - type: "int256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint80", - name: "", - type: "uint80", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "latestRoundData", - outputs: [ - { - internalType: "uint80", - name: "roundId", - type: "uint80", - }, - { - internalType: "int256", - name: "answer", - type: "int256", - }, - { - internalType: "uint256", - name: "startedAt", - type: "uint256", - }, - { - internalType: "uint256", - name: "updatedAt", - type: "uint256", - }, - { - internalType: "uint80", - name: "answeredInRound", - type: "uint80", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "lowerBound", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "pause", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "paused", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "priceFeed1", - outputs: [ - { - internalType: "contract AggregatorV3Interface", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "priceFeed2", - outputs: [ - { - internalType: "contract AggregatorV3Interface", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "priceFeed3", - outputs: [ - { - internalType: "contract AggregatorV3Interface", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "priceFeedType", - outputs: [ - { - internalType: "enum PriceFeedType", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_lowerBound", - type: "uint256", - }, - ], - name: "setLimiter", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "skipPriceCheck", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "unpause", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "upperBound", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x6101606040523480156200001257600080fd5b5060405162001852380380620018528339810160408190526200003591620003a3565b6000805460ff191690558585828260c882826001600160a01b0381166200006f57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000ae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d49190620004de565b6001600160a01b0316608052508051620000f6906002906020840190620002ca565b505060a052506001600160a01b0382166200012457604051635919af9760e11b815260040160405180910390fd5b6001600160a01b03821660c0819052670de0b6b3a764000060e05260408051630176f71760e71b815290516000929163bb7b8b809160048083019260209291908290030181865afa1580156200017e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001a4919062000503565b9050620001b1816200022a565b505050506001600160a01b0384161580620001d357506001600160a01b038316155b80620001e657506001600160a01b038216155b156200020557604051635919af9760e11b815260040160405180910390fd5b506001600160a01b039283166101005290821661012052166101405250620005d09050565b8062000249576040516309aadd6f60e41b815260040160405180910390fd5b60018190557f82e7ee47180a631312683eeb2a85ad264c9af490d54de5a75bbdb95b968c6de2816200027b8162000296565b6040805192835260208301919091520160405180910390a150565b60a05160009061271090620002ac908262000533565b620002b890846200054e565b620002c4919062000570565b92915050565b828054620002d89062000593565b90600052602060002090601f016020900481019282620002fc576000855562000347565b82601f106200031757805160ff191683800117855562000347565b8280016001018555821562000347579182015b82811115620003475782518255916020019190600101906200032a565b506200035592915062000359565b5090565b5b808211156200035557600081556001016200035a565b80516001600160a01b03811681146200038857600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60008060008060008060c08789031215620003bd57600080fd5b620003c88762000370565b95506020620003d981890162000370565b9550620003e96040890162000370565b9450620003f96060890162000370565b9350620004096080890162000370565b60a08901519093506001600160401b03808211156200042757600080fd5b818a0191508a601f8301126200043c57600080fd5b8151818111156200045157620004516200038d565b604051601f8201601f19908116603f011681019083821181831017156200047c576200047c6200038d565b816040528281528d868487010111156200049557600080fd5b600093505b82841015620004b957848401860151818501870152928501926200049a565b82841115620004cb5760008684830101525b8096505050505050509295509295509295565b600060208284031215620004f157600080fd5b620004fc8262000370565b9392505050565b6000602082840312156200051657600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156200054957620005496200051d565b500190565b60008160001904831182151516156200056b576200056b6200051d565b500290565b6000826200058e57634e487b7160e01b600052601260045260246000fd5b500490565b600181811c90821680620005a857607f821691505b60208210811415620005ca57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c05160e0516101005161012051610140516111e86200066a6000396000818161023501526108c8015260008181610383015261080901526000818161033901526107620152600081816103120152610a250152600081816101b001526109890152600081816101760152610c170152600081816102eb015281816103db01528181610557015261068f01526111e86000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c80639a6fc8f5116100cd578063b09ad8a011610081578063d62ada1111610066578063d62ada1114610376578063e5693f411461037e578063feaf968c146103a557600080fd5b8063b09ad8a01461035b578063bc489a651461036357600080fd5b8063a50cf2c8116100b2578063a50cf2c8146102e6578063a834559e1461030d578063ab0ca0e11461033457600080fd5b80639a6fc8f514610293578063a384d6ff146102dd57600080fd5b8063427cb6fe116101245780635c975abb116101095780635c975abb1461025f5780637284e416146102765780638456cb591461028b57600080fd5b8063427cb6fe1461023057806354fd4d501461025757600080fd5b8063313ce56711610155578063313ce567146101f75780633f4ba83a146102115780633fd0875f1461021b57600080fd5b806312b495a814610171578063218751b2146101ab575b600080fd5b6101987f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101a2565b6101ff600881565b60405160ff90911681526020016101a2565b6102196103ad565b005b610223600381565b6040516101a29190610dd7565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b610198600181565b60005460ff165b60405190151581526020016101a2565b61027e61049b565b6040516101a29190610e18565b610219610529565b6102a66102a1366004610ea3565b610615565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a0016101a2565b61019860015481565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b6101987f000000000000000000000000000000000000000000000000000000000000000081565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b61019861064f565b610219610371366004610ec7565b610661565b610266600181565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b6102a6610751565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa158015610437573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061045b9190610ee0565b610491576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610499610a67565b565b600280546104a890610f02565b80601f01602080910402602001604051908101604052809291908181526020018280546104d490610f02565b80156105215780601f106104f657610100808354040283529160200191610521565b820191906000526020600020905b81548152906001019060200180831161050457829003601f168201915b505050505081565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa1580156105b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105d79190610ee0565b61060d576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610499610b4d565b60008060008060006040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061065c600154610c0d565b905090565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156106eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070f9190610ee0565b610745576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61074e81610c56565b50565b6000806000806000806000806000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156107cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ef9190610f56565b939d50919b509950975095506108078a8a8989610cd8565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610872573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108969190610f56565b9398509196509450925090506108ae85858484610cd8565b888412156108c6578499508398508297508196508095505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610931573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109559190610f56565b93985091965094509250905061096d85858484610cd8565b88841215610985578499508398508297508196508095505b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb7b8b806040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a169190610fae565b9050610a2181610d73565b90507f0000000000000000000000000000000000000000000000000000000000000000610a4e828c610ff6565b610a5891906110e1565b99505050505050509091929394565b60005460ff16610ad8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff1615610bba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610acf565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b233390565b6000612710610c3c7f000000000000000000000000000000000000000000000000000000000000000082611149565b610c469084611161565b610c50919061119e565b92915050565b80610c8d576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190557f82e7ee47180a631312683eeb2a85ad264c9af490d54de5a75bbdb95b968c6de281610cbd81610c0d565b6040805192835260208301919091520160405180910390a150565b60008313610d12576040517f56e05d2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8369ffffffffffffffffffff168169ffffffffffffffffffff161080610d36575081155b15610d6d576040517fb1cf675500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60015460009080831015610db3576040517fb416da7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610dbe82610c0d565b905080841115610dcf579392505050565b509192915050565b6020810160068310610e12577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b600060208083528351808285015260005b81811015610e4557858101830151858201604001528201610e29565b81811115610e57576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b69ffffffffffffffffffff8116811461074e57600080fd5b600060208284031215610eb557600080fd5b8135610ec081610e8b565b9392505050565b600060208284031215610ed957600080fd5b5035919050565b600060208284031215610ef257600080fd5b81518015158114610ec057600080fd5b600181811c90821680610f1657607f821691505b60208210811415610f50577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600080600080600060a08688031215610f6e57600080fd5b8551610f7981610e8b565b809550506020860151935060408601519250606086015191506080860151610fa081610e8b565b809150509295509295909350565b600060208284031215610fc057600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60008413600084138583048511828216161561103757611037610fc7565b7f8000000000000000000000000000000000000000000000000000000000000000600087128682058812818416161561107257611072610fc7565b6000871292508782058712848416161561108e5761108e610fc7565b878505871281841616156110a4576110a4610fc7565b505050929093029392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826110f0576110f06110b2565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f80000000000000000000000000000000000000000000000000000000000000008314161561114457611144610fc7565b500590565b6000821982111561115c5761115c610fc7565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561119957611199610fc7565b500290565b6000826111ad576111ad6110b2565b50049056fea2646970667358221220226b667ed6fc6db7c8ec1377cc84dae524e2dc572320ead4a7092944a6b912de64736f6c634300080a0033"; - -type CurveLP3PriceFeedConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: CurveLP3PriceFeedConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class CurveLP3PriceFeed__factory extends ContractFactory { - constructor(...args: CurveLP3PriceFeedConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - addressProvider: string, - _curvePool: string, - _priceFeed1: string, - _priceFeed2: string, - _priceFeed3: string, - _description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - addressProvider, - _curvePool, - _priceFeed1, - _priceFeed2, - _priceFeed3, - _description, - overrides || {} - ) as Promise; - } - override getDeployTransaction( - addressProvider: string, - _curvePool: string, - _priceFeed1: string, - _priceFeed2: string, - _priceFeed3: string, - _description: string, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction( - addressProvider, - _curvePool, - _priceFeed1, - _priceFeed2, - _priceFeed3, - _description, - overrides || {} - ); - } - override attach(address: string): CurveLP3PriceFeed { - return super.attach(address) as CurveLP3PriceFeed; - } - override connect(signer: Signer): CurveLP3PriceFeed__factory { - return super.connect(signer) as CurveLP3PriceFeed__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): CurveLP3PriceFeedInterface { - return new utils.Interface(_abi) as CurveLP3PriceFeedInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): CurveLP3PriceFeed { - return new Contract(address, _abi, signerOrProvider) as CurveLP3PriceFeed; - } -} diff --git a/src/types/factories/contracts/oracles/curve/CurveLP4PriceFeed__factory.ts b/src/types/factories/contracts/oracles/curve/CurveLP4PriceFeed__factory.ts deleted file mode 100644 index c52b5fa8..00000000 --- a/src/types/factories/contracts/oracles/curve/CurveLP4PriceFeed__factory.ts +++ /dev/null @@ -1,537 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - CurveLP4PriceFeed, - CurveLP4PriceFeedInterface, -} from "../../../../contracts/oracles/curve/CurveLP4PriceFeed"; - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "addressProvider", - type: "address", - }, - { - internalType: "address", - name: "_curvePool", - type: "address", - }, - { - internalType: "address", - name: "_priceFeed1", - type: "address", - }, - { - internalType: "address", - name: "_priceFeed2", - type: "address", - }, - { - internalType: "address", - name: "_priceFeed3", - type: "address", - }, - { - internalType: "address", - name: "_priceFeed4", - type: "address", - }, - { - internalType: "string", - name: "_description", - type: "string", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "CallerNotConfiguratorException", - type: "error", - }, - { - inputs: [], - name: "CallerNotPausableAdminException", - type: "error", - }, - { - inputs: [], - name: "CallerNotUnPausableAdminException", - type: "error", - }, - { - inputs: [], - name: "ChainPriceStaleException", - type: "error", - }, - { - inputs: [], - name: "IncorrectLimitsException", - type: "error", - }, - { - inputs: [], - name: "NotImplementedException", - type: "error", - }, - { - inputs: [], - name: "PriceOracleNotExistsException", - type: "error", - }, - { - inputs: [], - name: "ValueOutOfRangeExpcetion", - type: "error", - }, - { - inputs: [], - name: "ZeroAddressException", - type: "error", - }, - { - inputs: [], - name: "ZeroPriceException", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "lowerBound", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "upperBound", - type: "uint256", - }, - ], - name: "NewLimiterParams", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "Paused", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "Unpaused", - type: "event", - }, - { - inputs: [], - name: "_acl", - outputs: [ - { - internalType: "contract ACL", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "curvePool", - outputs: [ - { - internalType: "contract ICurvePool", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "decimals", - outputs: [ - { - internalType: "uint8", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "decimalsDivider", - outputs: [ - { - internalType: "int256", - name: "", - type: "int256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "delta", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "description", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint80", - name: "", - type: "uint80", - }, - ], - name: "getRoundData", - outputs: [ - { - internalType: "uint80", - name: "", - type: "uint80", - }, - { - internalType: "int256", - name: "", - type: "int256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint80", - name: "", - type: "uint80", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "latestRoundData", - outputs: [ - { - internalType: "uint80", - name: "roundId", - type: "uint80", - }, - { - internalType: "int256", - name: "answer", - type: "int256", - }, - { - internalType: "uint256", - name: "startedAt", - type: "uint256", - }, - { - internalType: "uint256", - name: "updatedAt", - type: "uint256", - }, - { - internalType: "uint80", - name: "answeredInRound", - type: "uint80", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "lowerBound", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "pause", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "paused", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "priceFeed1", - outputs: [ - { - internalType: "contract AggregatorV3Interface", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "priceFeed2", - outputs: [ - { - internalType: "contract AggregatorV3Interface", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "priceFeed3", - outputs: [ - { - internalType: "contract AggregatorV3Interface", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "priceFeed4", - outputs: [ - { - internalType: "contract AggregatorV3Interface", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "priceFeedType", - outputs: [ - { - internalType: "enum PriceFeedType", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_lowerBound", - type: "uint256", - }, - ], - name: "setLimiter", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "skipPriceCheck", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "unpause", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "upperBound", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x6101806040523480156200001257600080fd5b5060405162001982380380620019828339810160408190526200003591620003bc565b6000805460ff191690558686828260c882826001600160a01b0381166200006f57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000ae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d491906200050b565b6001600160a01b0316608052508051620000f6906002906020840190620002e3565b505060a052506001600160a01b0382166200012457604051635919af9760e11b815260040160405180910390fd5b6001600160a01b03821660c0819052670de0b6b3a764000060e05260408051630176f71760e71b815290516000929163bb7b8b809160048083019260209291908290030181865afa1580156200017e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001a4919062000530565b9050620001b18162000243565b505050506001600160a01b0385161580620001d357506001600160a01b038416155b80620001e657506001600160a01b038316155b80620001f957506001600160a01b038216155b156200021857604051635919af9760e11b815260040160405180910390fd5b506001600160a01b039384166101005291831661012052821661014052166101605250620005fd9050565b8062000262576040516309aadd6f60e41b815260040160405180910390fd5b60018190557f82e7ee47180a631312683eeb2a85ad264c9af490d54de5a75bbdb95b968c6de2816200029481620002af565b6040805192835260208301919091520160405180910390a150565b60a05160009061271090620002c5908262000560565b620002d190846200057b565b620002dd91906200059d565b92915050565b828054620002f190620005c0565b90600052602060002090601f01602090048101928262000315576000855562000360565b82601f106200033057805160ff191683800117855562000360565b8280016001018555821562000360579182015b828111156200036057825182559160200191906001019062000343565b506200036e92915062000372565b5090565b5b808211156200036e576000815560010162000373565b80516001600160a01b0381168114620003a157600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600080600080600080600060e0888a031215620003d857600080fd5b620003e38862000389565b96506020620003f4818a0162000389565b96506200040460408a0162000389565b95506200041460608a0162000389565b94506200042460808a0162000389565b93506200043460a08a0162000389565b60c08a01519093506001600160401b03808211156200045257600080fd5b818b0191508b601f8301126200046757600080fd5b8151818111156200047c576200047c620003a6565b604051601f8201601f19908116603f01168101908382118183101715620004a757620004a7620003a6565b816040528281528e86848701011115620004c057600080fd5b600093505b82841015620004e45784840186015181850187015292850192620004c5565b82841115620004f65760008684830101525b80965050505050505092959891949750929550565b6000602082840312156200051e57600080fd5b620005298262000389565b9392505050565b6000602082840312156200054357600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156200057657620005766200054a565b500190565b60008160001904831182151516156200059857620005986200054a565b500290565b600082620005bb57634e487b7160e01b600052601260045260246000fd5b500490565b600181811c90821680620005d557607f821691505b60208210811415620005f757634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c05160e051610100516101205161014051610160516112d9620006a96000396000818161029b01526109b901526000818161024001526108fa0152600081816103b5015261083b01526000818161036b01526107940152600081816103440152610b160152600081816101bb0152610a7a0152600081816101810152610d0801526000818161031d0152818161040d0152818161058901526106c101526112d96000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80638456cb59116100d8578063ab0ca0e11161008c578063d62ada1111610066578063d62ada11146103a8578063e5693f41146103b0578063feaf968c146103d757600080fd5b8063ab0ca0e114610366578063b09ad8a01461038d578063bc489a651461039557600080fd5b8063a384d6ff116100bd578063a384d6ff1461030f578063a50cf2c814610318578063a834559e1461033f57600080fd5b80638456cb59146102bd5780639a6fc8f5146102c557600080fd5b8063427cb6fe1161012f5780635c975abb116101145780635c975abb1461026a5780637284e416146102815780637aac1c481461029657600080fd5b8063427cb6fe1461023b57806354fd4d501461026257600080fd5b8063313ce56711610160578063313ce567146102025780633f4ba83a1461021c5780633fd0875f1461022657600080fd5b806312b495a81461017c578063218751b2146101b6575b600080fd5b6101a37f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b6101dd7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101ad565b61020a600881565b60405160ff90911681526020016101ad565b6102246103df565b005b61022e600481565b6040516101ad9190610ec8565b6101dd7f000000000000000000000000000000000000000000000000000000000000000081565b6101a3600181565b60005460ff165b60405190151581526020016101ad565b6102896104cd565b6040516101ad9190610f09565b6101dd7f000000000000000000000000000000000000000000000000000000000000000081565b61022461055b565b6102d86102d3366004610f94565b610647565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a0016101ad565b6101a360015481565b6101dd7f000000000000000000000000000000000000000000000000000000000000000081565b6101a37f000000000000000000000000000000000000000000000000000000000000000081565b6101dd7f000000000000000000000000000000000000000000000000000000000000000081565b6101a3610681565b6102246103a3366004610fb8565b610693565b610271600181565b6101dd7f000000000000000000000000000000000000000000000000000000000000000081565b6102d8610783565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa158015610469573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048d9190610fd1565b6104c3576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104cb610b58565b565b600280546104da90610ff3565b80601f016020809104026020016040519081016040528092919081815260200182805461050690610ff3565b80156105535780601f1061052857610100808354040283529160200191610553565b820191906000526020600020905b81548152906001019060200180831161053657829003601f168201915b505050505081565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa1580156105e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106099190610fd1565b61063f576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104cb610c3e565b60008060008060006040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061068e600154610cfe565b905090565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561071d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107419190610fd1565b610777576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61078081610d47565b50565b6000806000806000806000806000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156107fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108219190611047565b939d50919b509950975095506108398a8a8989610dc9565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156108a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c89190611047565b9398509196509450925090506108e085858484610dc9565b888412156108f8578499508398508297508196508095505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610963573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109879190611047565b93985091965094509250905061099f85858484610dc9565b888412156109b7578499508398508297508196508095505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610a22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a469190611047565b939850919650945092509050610a5e85858484610dc9565b88841215610a76578499508398508297508196508095505b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb7b8b806040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ae3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b07919061109f565b9050610b1281610e64565b90507f0000000000000000000000000000000000000000000000000000000000000000610b3f828c6110e7565b610b4991906111d2565b99505050505050509091929394565b60005460ff16610bc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff1615610cab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bc0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610c143390565b6000612710610d2d7f00000000000000000000000000000000000000000000000000000000000000008261123a565b610d379084611252565b610d41919061128f565b92915050565b80610d7e576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190557f82e7ee47180a631312683eeb2a85ad264c9af490d54de5a75bbdb95b968c6de281610dae81610cfe565b6040805192835260208301919091520160405180910390a150565b60008313610e03576040517f56e05d2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8369ffffffffffffffffffff168169ffffffffffffffffffff161080610e27575081155b15610e5e576040517fb1cf675500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60015460009080831015610ea4576040517fb416da7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610eaf82610cfe565b905080841115610ec0579392505050565b509192915050565b6020810160068310610f03577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b600060208083528351808285015260005b81811015610f3657858101830151858201604001528201610f1a565b81811115610f48576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b69ffffffffffffffffffff8116811461078057600080fd5b600060208284031215610fa657600080fd5b8135610fb181610f7c565b9392505050565b600060208284031215610fca57600080fd5b5035919050565b600060208284031215610fe357600080fd5b81518015158114610fb157600080fd5b600181811c9082168061100757607f821691505b60208210811415611041577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600080600080600060a0868803121561105f57600080fd5b855161106a81610f7c565b80955050602086015193506040860151925060608601519150608086015161109181610f7c565b809150509295509295909350565b6000602082840312156110b157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615611128576111286110b8565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615611163576111636110b8565b6000871292508782058712848416161561117f5761117f6110b8565b87850587128184161615611195576111956110b8565b505050929093029392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826111e1576111e16111a3565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615611235576112356110b8565b500590565b6000821982111561124d5761124d6110b8565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561128a5761128a6110b8565b500290565b60008261129e5761129e6111a3565b50049056fea26469706673582212201ac3e66d7646fe6cc19eeb98703f28a4e57d890bef3635f1ed53ec7a4ea130d864736f6c634300080a0033"; - -type CurveLP4PriceFeedConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: CurveLP4PriceFeedConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class CurveLP4PriceFeed__factory extends ContractFactory { - constructor(...args: CurveLP4PriceFeedConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - addressProvider: string, - _curvePool: string, - _priceFeed1: string, - _priceFeed2: string, - _priceFeed3: string, - _priceFeed4: string, - _description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - addressProvider, - _curvePool, - _priceFeed1, - _priceFeed2, - _priceFeed3, - _priceFeed4, - _description, - overrides || {} - ) as Promise; - } - override getDeployTransaction( - addressProvider: string, - _curvePool: string, - _priceFeed1: string, - _priceFeed2: string, - _priceFeed3: string, - _priceFeed4: string, - _description: string, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction( - addressProvider, - _curvePool, - _priceFeed1, - _priceFeed2, - _priceFeed3, - _priceFeed4, - _description, - overrides || {} - ); - } - override attach(address: string): CurveLP4PriceFeed { - return super.attach(address) as CurveLP4PriceFeed; - } - override connect(signer: Signer): CurveLP4PriceFeed__factory { - return super.connect(signer) as CurveLP4PriceFeed__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): CurveLP4PriceFeedInterface { - return new utils.Interface(_abi) as CurveLP4PriceFeedInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): CurveLP4PriceFeed { - return new Contract(address, _abi, signerOrProvider) as CurveLP4PriceFeed; - } -} diff --git a/src/types/factories/contracts/oracles/curve/index.ts b/src/types/factories/contracts/oracles/curve/index.ts deleted file mode 100644 index 80309a95..00000000 --- a/src/types/factories/contracts/oracles/curve/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { AbstractCurveLPPriceFeed__factory } from "./AbstractCurveLPPriceFeed__factory"; -export { CurveLP2PriceFeed__factory } from "./CurveLP2PriceFeed__factory"; -export { CurveLP3PriceFeed__factory } from "./CurveLP3PriceFeed__factory"; -export { CurveLP4PriceFeed__factory } from "./CurveLP4PriceFeed__factory"; diff --git a/src/types/factories/contracts/oracles/index.ts b/src/types/factories/contracts/oracles/index.ts deleted file mode 100644 index a55e83b7..00000000 --- a/src/types/factories/contracts/oracles/index.ts +++ /dev/null @@ -1,9 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export * as curve from "./curve"; -export * as yearn from "./yearn"; -export { LPPriceFeed__factory } from "./LPPriceFeed__factory"; -export { PriceFeedChecker__factory } from "./PriceFeedChecker__factory"; -export { PriceOracle__factory } from "./PriceOracle__factory"; -export { ZeroPriceFeed__factory } from "./ZeroPriceFeed__factory"; diff --git a/src/types/factories/contracts/oracles/yearn/YearnPriceFeed__factory.ts b/src/types/factories/contracts/oracles/yearn/YearnPriceFeed__factory.ts deleted file mode 100644 index 9a448bb6..00000000 --- a/src/types/factories/contracts/oracles/yearn/YearnPriceFeed__factory.ts +++ /dev/null @@ -1,462 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - YearnPriceFeed, - YearnPriceFeedInterface, -} from "../../../../contracts/oracles/yearn/YearnPriceFeed"; - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "addressProvider", - type: "address", - }, - { - internalType: "address", - name: "_yVault", - type: "address", - }, - { - internalType: "address", - name: "_priceFeed", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "CallerNotConfiguratorException", - type: "error", - }, - { - inputs: [], - name: "CallerNotPausableAdminException", - type: "error", - }, - { - inputs: [], - name: "CallerNotUnPausableAdminException", - type: "error", - }, - { - inputs: [], - name: "ChainPriceStaleException", - type: "error", - }, - { - inputs: [], - name: "IncorrectLimitsException", - type: "error", - }, - { - inputs: [], - name: "NotImplementedException", - type: "error", - }, - { - inputs: [], - name: "PriceOracleNotExistsException", - type: "error", - }, - { - inputs: [], - name: "ValueOutOfRangeExpcetion", - type: "error", - }, - { - inputs: [], - name: "ZeroAddressException", - type: "error", - }, - { - inputs: [], - name: "ZeroPriceException", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "lowerBound", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "upperBound", - type: "uint256", - }, - ], - name: "NewLimiterParams", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "Paused", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "Unpaused", - type: "event", - }, - { - inputs: [], - name: "_acl", - outputs: [ - { - internalType: "contract ACL", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "decimals", - outputs: [ - { - internalType: "uint8", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "decimalsDivider", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "delta", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "description", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint80", - name: "", - type: "uint80", - }, - ], - name: "getRoundData", - outputs: [ - { - internalType: "uint80", - name: "", - type: "uint80", - }, - { - internalType: "int256", - name: "", - type: "int256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint80", - name: "", - type: "uint80", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "latestRoundData", - outputs: [ - { - internalType: "uint80", - name: "roundId", - type: "uint80", - }, - { - internalType: "int256", - name: "answer", - type: "int256", - }, - { - internalType: "uint256", - name: "startedAt", - type: "uint256", - }, - { - internalType: "uint256", - name: "updatedAt", - type: "uint256", - }, - { - internalType: "uint80", - name: "answeredInRound", - type: "uint80", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "lowerBound", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "pause", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "paused", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "priceFeed", - outputs: [ - { - internalType: "contract AggregatorV3Interface", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "priceFeedType", - outputs: [ - { - internalType: "enum PriceFeedType", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_lowerBound", - type: "uint256", - }, - ], - name: "setLimiter", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "skipPriceCheck", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "unpause", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "upperBound", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "yVault", - outputs: [ - { - internalType: "contract IYVault", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x6101206040523480156200001257600080fd5b506040516200171738038062001717833981016040819052620000359162000453565b8260c86001600160a01b0384166200005d5760405180602001604052806000815250620000e8565b836001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200009c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620000c69190810190620004e6565b604051602001620000d891906200059e565b6040516020818303038152906040525b6000805460ff19169055826001600160a01b0381166200011b57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200015a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001809190620005ce565b6001600160a01b0316608052508051620001a290600290602084019062000390565b505060a052506001600160a01b0382161580620001c657506001600160a01b038116155b15620001e557604051635919af9760e11b815260040160405180910390fd5b6001600160a01b0380831660e081905290821660c0526040805163313ce56760e01b8152905163313ce567916004808201926020929091908290030181865afa15801562000237573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025d9190620005f3565b6200026a90600a6200072b565b61010081815250506000826001600160a01b03166399530b066040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002b3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d991906200073c565b9050620002e681620002f0565b50505050620007f3565b806200030f576040516309aadd6f60e41b815260040160405180910390fd5b60018190557f82e7ee47180a631312683eeb2a85ad264c9af490d54de5a75bbdb95b968c6de28162000341816200035c565b6040805192835260208301919091520160405180910390a150565b60a0516000906127109062000372908262000756565b6200037e908462000771565b6200038a919062000793565b92915050565b8280546200039e90620007b6565b90600052602060002090601f016020900481019282620003c257600085556200040d565b82601f10620003dd57805160ff19168380011785556200040d565b828001600101855582156200040d579182015b828111156200040d578251825591602001919060010190620003f0565b506200041b9291506200041f565b5090565b5b808211156200041b576000815560010162000420565b80516001600160a01b03811681146200044e57600080fd5b919050565b6000806000606084860312156200046957600080fd5b620004748462000436565b9250620004846020850162000436565b9150620004946040850162000436565b90509250925092565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620004d0578181015183820152602001620004b6565b83811115620004e0576000848401525b50505050565b600060208284031215620004f957600080fd5b81516001600160401b03808211156200051157600080fd5b818401915084601f8301126200052657600080fd5b8151818111156200053b576200053b6200049d565b604051601f8201601f19908116603f011681019083821181831017156200056657620005666200049d565b816040528281528760208487010111156200058057600080fd5b62000593836020830160208801620004b3565b979650505050505050565b60008251620005b2818460208701620004b3565b69081c1c9a58d95199595960b21b920191825250600a01919050565b600060208284031215620005e157600080fd5b620005ec8262000436565b9392505050565b6000602082840312156200060657600080fd5b815160ff81168114620005ec57600080fd5b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200066f57816000190482111562000653576200065362000618565b808516156200066157918102915b93841c939080029062000633565b509250929050565b60008262000688575060016200038a565b8162000697575060006200038a565b8160018114620006b05760028114620006bb57620006db565b60019150506200038a565b60ff841115620006cf57620006cf62000618565b50506001821b6200038a565b5060208310610133831016604e8410600b841016171562000700575081810a6200038a565b6200070c83836200062e565b806000190482111562000723576200072362000618565b029392505050565b6000620005ec60ff84168362000677565b6000602082840312156200074f57600080fd5b5051919050565b600082198211156200076c576200076c62000618565b500190565b60008160001904831182151516156200078e576200078e62000618565b500290565b600082620007b157634e487b7160e01b600052601260045260246000fd5b500490565b600181811c90821680620007cb57607f821691505b60208210811415620007ed57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c05160e05161010051610eae62000869600039600081816102dc015261081c015260008181610194015261078001526000818161023301526106d70152600081816101400152610a090152600081816102b501528181610357015281816104d3015261060b0152610eae6000f3fe608060405234801561001057600080fd5b50600436106101365760003560e01c80638456cb59116100b2578063a834559e11610081578063bc489a6511610066578063bc489a6514610306578063d62ada1114610319578063feaf968c1461032157600080fd5b8063a834559e146102d7578063b09ad8a0146102fe57600080fd5b80638456cb59146102555780639a6fc8f51461025d578063a384d6ff146102a7578063a50cf2c8146102b057600080fd5b80633fd0875f116101095780635c975abb116100ee5780635c975abb146102025780637284e41614610219578063741bef1a1461022e57600080fd5b80633fd0875f146101e557806354fd4d50146101fa57600080fd5b806312b495a81461013b578063313ce5671461017557806333303f8e1461018f5780633f4ba83a146101db575b600080fd5b6101627f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b61017d600881565b60405160ff909116815260200161016c565b6101b67f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016c565b6101e3610329565b005b6101ed600181565b60405161016c9190610bc9565b610162600281565b60005460ff165b604051901515815260200161016c565b610221610417565b60405161016c9190610c0a565b6101b67f000000000000000000000000000000000000000000000000000000000000000081565b6101e36104a5565b61027061026b366004610c95565b610591565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a00161016c565b61016260015481565b6101b67f000000000000000000000000000000000000000000000000000000000000000081565b6101627f000000000000000000000000000000000000000000000000000000000000000081565b6101626105cb565b6101e3610314366004610cb9565b6105dd565b610209600181565b6102706106cd565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156103b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103d79190610cd2565b61040d576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610415610859565b565b6002805461042490610cf4565b80601f016020809104026020016040519081016040528092919081815260200182805461045090610cf4565b801561049d5780601f106104725761010080835404028352916020019161049d565b820191906000526020600020905b81548152906001019060200180831161048057829003601f168201915b505050505081565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561052f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105539190610cd2565b610589576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61041561093f565b60008060008060006040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006105d86001546109ff565b905090565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610667573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068b9190610cd2565b6106c1576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106ca81610a48565b50565b60008060008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610740573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107649190610d48565b93985091965094509250905061077c85858484610aca565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166399530b066040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080d9190610da0565b905061081881610b65565b90507f00000000000000000000000000000000000000000000000000000000000000006108458683610de8565b61084f9190610e25565b9450509091929394565b60005460ff166108ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff16156109ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016108c1565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586109153390565b6000612710610a2e7f000000000000000000000000000000000000000000000000000000000000000082610e60565b610a389084610de8565b610a429190610e25565b92915050565b80610a7f576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190557f82e7ee47180a631312683eeb2a85ad264c9af490d54de5a75bbdb95b968c6de281610aaf816109ff565b6040805192835260208301919091520160405180910390a150565b60008313610b04576040517f56e05d2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8369ffffffffffffffffffff168169ffffffffffffffffffff161080610b28575081155b15610b5f576040517fb1cf675500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60015460009080831015610ba5576040517fb416da7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610bb0826109ff565b905080841115610bc1579392505050565b509192915050565b6020810160068310610c04577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b600060208083528351808285015260005b81811015610c3757858101830151858201604001528201610c1b565b81811115610c49576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b69ffffffffffffffffffff811681146106ca57600080fd5b600060208284031215610ca757600080fd5b8135610cb281610c7d565b9392505050565b600060208284031215610ccb57600080fd5b5035919050565b600060208284031215610ce457600080fd5b81518015158114610cb257600080fd5b600181811c90821680610d0857607f821691505b60208210811415610d42577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600080600080600060a08688031215610d6057600080fd5b8551610d6b81610c7d565b809550506020860151935060408601519250606086015191506080860151610d9281610c7d565b809150509295509295909350565b600060208284031215610db257600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610e2057610e20610db9565b500290565b600082610e5b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60008219821115610e7357610e73610db9565b50019056fea264697066735822122033f071fae3fea6aa014d596b65f986292bf0f88262db5a9aebc2674ec8efeeea64736f6c634300080a0033"; - -type YearnPriceFeedConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: YearnPriceFeedConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class YearnPriceFeed__factory extends ContractFactory { - constructor(...args: YearnPriceFeedConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - addressProvider: string, - _yVault: string, - _priceFeed: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - addressProvider, - _yVault, - _priceFeed, - overrides || {} - ) as Promise; - } - override getDeployTransaction( - addressProvider: string, - _yVault: string, - _priceFeed: string, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction( - addressProvider, - _yVault, - _priceFeed, - overrides || {} - ); - } - override attach(address: string): YearnPriceFeed { - return super.attach(address) as YearnPriceFeed; - } - override connect(signer: Signer): YearnPriceFeed__factory { - return super.connect(signer) as YearnPriceFeed__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): YearnPriceFeedInterface { - return new utils.Interface(_abi) as YearnPriceFeedInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): YearnPriceFeed { - return new Contract(address, _abi, signerOrProvider) as YearnPriceFeed; - } -} diff --git a/src/types/factories/contracts/oracles/yearn/index.ts b/src/types/factories/contracts/oracles/yearn/index.ts deleted file mode 100644 index a109ecab..00000000 --- a/src/types/factories/contracts/oracles/yearn/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { YearnPriceFeed__factory } from "./YearnPriceFeed__factory"; diff --git a/src/types/factories/contracts/pathfinder/ConvexPathFinder__factory.ts b/src/types/factories/contracts/pathfinder/ConvexPathFinder__factory.ts deleted file mode 100644 index 87b8ddca..00000000 --- a/src/types/factories/contracts/pathfinder/ConvexPathFinder__factory.ts +++ /dev/null @@ -1,224 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - ConvexPathFinder, - ConvexPathFinderInterface, -} from "../../../contracts/pathfinder/ConvexPathFinder"; - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "_booster", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "BoosterAdapterNotFound", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "UnknownToken", - type: "error", - }, - { - inputs: [], - name: "booster", - outputs: [ - { - internalType: "contract IBooster", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "cvx", - outputs: [ - { - internalType: "contract IConvexToken", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "adapters", - type: "address[]", - }, - ], - name: "filterConvexAdapters", - outputs: [ - { - internalType: "address[]", - name: "result", - type: "address[]", - }, - { - internalType: "address", - name: "boosterAdapter", - type: "address", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - components: [ - { - internalType: "address", - name: "token", - type: "address", - }, - { - internalType: "uint256", - name: "balance", - type: "uint256", - }, - ], - internalType: "struct Balance[]", - name: "b", - type: "tuple[]", - }, - { - internalType: "address[]", - name: "adapters", - type: "address[]", - }, - ], - name: "withdrawAll", - outputs: [ - { - components: [ - { - internalType: "address", - name: "token", - type: "address", - }, - { - internalType: "uint256", - name: "balance", - type: "uint256", - }, - ], - internalType: "struct Balance[]", - name: "", - type: "tuple[]", - }, - { - components: [ - { - internalType: "address", - name: "target", - type: "address", - }, - { - internalType: "bytes", - name: "callData", - type: "bytes", - }, - ], - internalType: "struct MultiCall[]", - name: "", - type: "tuple[]", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x60c060405234801561001057600080fd5b5060405162001a6f38038062001a6f833981016040819052610031916100b1565b6001600160a01b0381166080819052604080516303aa30b960e11b815290516307546172916004808201926020929091908290030181865afa15801561007b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061009f91906100b1565b6001600160a01b031660a052506100e1565b6000602082840312156100c357600080fd5b81516001600160a01b03811681146100da57600080fd5b9392505050565b60805160a05161193f620001306000396000818160d20152818161039001528181610d8401528181610e2301528181610ec00152610f8101526000818161011e01526102f6015261193f6000f3fe608060405234801561001057600080fd5b50600436106100675760003560e01c80635c522017116100505780635c522017146100ac578063923c1d61146100cd578063c6def0761461011957600080fd5b806328add6b31461006c57806354fd4d5014610096575b600080fd5b61007f61007a36600461145e565b610140565b60405161008d929190611559565b60405180910390f35b61009e600181565b60405190815260200161008d565b6100bf6100ba366004611692565b6103db565b60405161008d9291906116c7565b6100f47f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161008d565b6100f47f000000000000000000000000000000000000000000000000000000000000000081565b606080600061014e846103db565b815191955091506000808267ffffffffffffffff8111156101715761017161131f565b6040519080825280602002602001820160405280156101b757816020015b60408051808201909152600081526060602082015281526020019060019003908161018f5790505b5090506000805b848110156102e75760008982815181106101da576101da61173e565b602002602001015190506102176040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001606081525090565b60006102248d848b6105a5565b8051919e50925073ffffffffffffffffffffffffffffffffffffffff161561027357818686815181106102595761025961173e565b6020026020010181905250848061026f9061179c565b9550505b61027e8e8e8561086c565b8151929f50909350915073ffffffffffffffffffffffffffffffffffffffff16156102dc576102ad81886117d5565b9650818686815181106102c2576102c261173e565b602002602001018190525084806102d89061179c565b9550505b5050506001016101be565b5060018311156103c05761038b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636a4874a16040518163ffffffff1660e01b8152600401602060405180830381865afa15801561035f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061038391906117ed565b8a9085610d43565b6103c07f00000000000000000000000000000000000000000000000000000000000000006103b885610d7f565b8b9190610d43565b886103ca8361103c565b965096505050505050935093915050565b80516060906000908067ffffffffffffffff8111156103fc576103fc61131f565b604051908082528060200260200182016040528015610425578160200160208202803683370190505b5092506000805b828110156105825760008682815181106104485761044861173e565b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561048d575061057a565b60008173ffffffffffffffffffffffffffffffffffffffff1663ce30bbdb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104fe9190611811565b9050600c81601081111561051457610514611832565b1415610559578187858151811061052d5761052d61173e565b73ffffffffffffffffffffffffffffffffffffffff909216602092830291909101909101526001909301925b600d81601081111561056d5761056d611832565b1415610577578195505b50505b60010161042c565b508181101561059e5761059584826110d8565b93505050915091565b5050915091565b60408051808201909152600081526060602082018190529060008473ffffffffffffffffffffffffffffffffffffffff166399253ac06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561060a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061062e91906117ed565b9050600061063c878361118a565b905060018782815181106106525761065261173e565b60200260200101516020015111156108605760008673ffffffffffffffffffffffffffffffffffffffff1663927188d96040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d591906117ed565b9050610709818984815181106106ed576106ed61173e565b6020026020010151602001518a610d439092919063ffffffff16565b600188838151811061071d5761071d61173e565b6020026020010151602001818152505060405180604001604052808773ffffffffffffffffffffffffffffffffffffffff16815260200163958e2d3160e01b8973ffffffffffffffffffffffffffffffffffffffff1663f10684546040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107cb9190611861565b6040516024016107dd91815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290529350505b50949590945092505050565b6040805180820190915260008152606060208201819052906000808473ffffffffffffffffffffffffffffffffffffffff166320b2c1516040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f691906117ed565b90506000610904878361118a565b9050600187828151811061091a5761091a61173e565b6020026020010151602001511115610d365760008673ffffffffffffffffffffffffffffffffffffffff1663927188d96040518163ffffffff1660e01b8152600401602060405180830381865afa158015610979573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061099d91906117ed565b90506109b5818984815181106106ed576106ed61173e565b60018883815181106109c9576109c961173e565b60209081029190910181015101526040517e8cc26200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a81166004830152881690628cc26290602401602060405180830381865afa158015610a41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a659190611861565b935060008773ffffffffffffffffffffffffffffffffffffffff1663d55a23f46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ab4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad89190611861565b905060005b81811015610ca0576040517f40c354460000000000000000000000000000000000000000000000000000000081526004810182905260009073ffffffffffffffffffffffffffffffffffffffff8b16906340c3544690602401602060405180830381865afa158015610b53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7791906117ed565b6040517e8cc26200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8e81166004830152919250600091831690628cc26290602401602060405180830381865afa158015610be7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0b9190611861565b90506001811115610c965760008273ffffffffffffffffffffffffffffffffffffffff1663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8791906117ed565b9050610c948d8284610d43565b505b5050600101610add565b505060408051808201825273ffffffffffffffffffffffffffffffffffffffff8916815281516001602480830191909152835180830390910181526044909101909252602082810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f49f039a2000000000000000000000000000000000000000000000000000000001790528101919091529450505b5094969195509350915050565b8083610d4f858561118a565b81518110610d5f57610d5f61173e565b6020026020010151602001818151610d7791906117d5565b905250505050565b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ded573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e119190611861565b905080610e1f575090919050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663aa74e6226040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb09190611861565b610eba908361187a565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16631f96e76f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4d9190611861565b905080821015611031576000610f6383836118b5565b905081610f7082886118cc565b610f7a919061187a565b95506000847f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d5abeb016040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061100e9190611861565b61101891906118b5565b905080871115611026578096505b509495945050505050565b506000949350505050565b80516060908061104d575090919050565b60005b600073ffffffffffffffffffffffffffffffffffffffff1684828151811061107a5761107a61173e565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff16146110b957600101818114156110b457509192915050565b611050565b80156110d1576110c9848261124c565b949350505050565b5050919050565b60608167ffffffffffffffff8111156110f3576110f361131f565b60405190808252806020026020018201604052801561111c578160200160208202803683370190505b50905060005b828110156111835783818151811061113c5761113c61173e565b60200260200101518282815181106111565761115661173e565b73ffffffffffffffffffffffffffffffffffffffff90921660209283029190910190910152600101611122565b5092915050565b6000805b83518110156111f7578273ffffffffffffffffffffffffffffffffffffffff168482815181106111c0576111c061173e565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff1614156111ef579050611246565b60010161118e565b506040517f81a3b1be00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316600482015260240160405180910390fd5b92915050565b60608167ffffffffffffffff8111156112675761126761131f565b6040519080825280602002602001820160405280156112ad57816020015b6040805180820190915260008152606060208201528152602001906001900390816112855790505b50905060005b82811015611183578381815181106112cd576112cd61173e565b60200260200101518282815181106112e7576112e761173e565b60209081029190910101526001016112b3565b73ffffffffffffffffffffffffffffffffffffffff8116811461131c57600080fd5b50565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156113715761137161131f565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156113be576113be61131f565b604052919050565b600067ffffffffffffffff8211156113e0576113e061131f565b5060051b60200190565b600082601f8301126113fb57600080fd5b8135602061141061140b836113c6565b611377565b82815260059290921b8401810191818101908684111561142f57600080fd5b8286015b84811015611453578035611446816112fa565b8352918301918301611433565b509695505050505050565b60008060006060848603121561147357600080fd5b833561147e816112fa565b925060208481013567ffffffffffffffff8082111561149c57600080fd5b818701915087601f8301126114b057600080fd5b81356114be61140b826113c6565b81815260069190911b8301840190848101908a8311156114dd57600080fd5b938501935b82851015611529576040858c0312156114fb5760008081fd5b61150361134e565b853561150e816112fa565b815285870135878201528252604090940193908501906114e2565b96505050604087013592508083111561154157600080fd5b505061154f868287016113ea565b9150509250925092565b6040808252835182820181905260009190606090818501906020808901865b838110156115b3578151805173ffffffffffffffffffffffffffffffffffffffff168652830151838601529386019390820190600101611578565b50508683038188015287518084528184019250600581901b8401820189830160005b83811015611681577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe080888503018752825173ffffffffffffffffffffffffffffffffffffffff81511685528681015190508a878601528051808c87015260005b81811015611651578281018901518782018d01528801611636565b818111156116625760008c83890101525b5097870197601f019091169390930188019250908401906001016115d5565b50909b9a5050505050505050505050565b6000602082840312156116a457600080fd5b813567ffffffffffffffff8111156116bb57600080fd5b6110c9848285016113ea565b604080825283519082018190526000906020906060840190828701845b8281101561171657815173ffffffffffffffffffffffffffffffffffffffff16845292840192908401906001016116e4565b50505073ffffffffffffffffffffffffffffffffffffffff9490941692019190915250919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156117ce576117ce61176d565b5060010190565b600082198211156117e8576117e861176d565b500190565b6000602082840312156117ff57600080fd5b815161180a816112fa565b9392505050565b60006020828403121561182357600080fd5b81516011811061180a57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60006020828403121561187357600080fd5b5051919050565b6000826118b0577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000828210156118c7576118c761176d565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156119045761190461176d565b50029056fea2646970667358221220c4b79a653bca66f7157281facae00decd73fdd7793ee15fef5956733881fd68f64736f6c634300080a0033"; - -type ConvexPathFinderConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: ConvexPathFinderConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class ConvexPathFinder__factory extends ContractFactory { - constructor(...args: ConvexPathFinderConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - _booster: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(_booster, overrides || {}) as Promise; - } - override getDeployTransaction( - _booster: string, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(_booster, overrides || {}); - } - override attach(address: string): ConvexPathFinder { - return super.attach(address) as ConvexPathFinder; - } - override connect(signer: Signer): ConvexPathFinder__factory { - return super.connect(signer) as ConvexPathFinder__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): ConvexPathFinderInterface { - return new utils.Interface(_abi) as ConvexPathFinderInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): ConvexPathFinder { - return new Contract(address, _abi, signerOrProvider) as ConvexPathFinder; - } -} diff --git a/src/types/factories/contracts/pathfinder/CurveLPPathFinder__factory.ts b/src/types/factories/contracts/pathfinder/CurveLPPathFinder__factory.ts deleted file mode 100644 index e2612ec8..00000000 --- a/src/types/factories/contracts/pathfinder/CurveLPPathFinder__factory.ts +++ /dev/null @@ -1,323 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - CurveLPPathFinder, - CurveLPPathFinderInterface, -} from "../../../contracts/pathfinder/CurveLPPathFinder"; - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "UnknownToken", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "previousOwner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "OwnershipTransferred", - type: "event", - }, - { - inputs: [ - { - internalType: "address[]", - name: "adapters", - type: "address[]", - }, - { - internalType: "bool", - name: "metaPool", - type: "bool", - }, - ], - name: "filterCurveLPAdapters", - outputs: [ - { - internalType: "address[]", - name: "result", - type: "address[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "owner", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "renounceOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "transferOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - components: [ - { - internalType: "address", - name: "token", - type: "address", - }, - { - internalType: "uint256", - name: "balance", - type: "uint256", - }, - ], - internalType: "struct Balance[]", - name: "b", - type: "tuple[]", - }, - { - internalType: "address[]", - name: "adapters", - type: "address[]", - }, - { - components: [ - { - internalType: "address", - name: "target", - type: "address", - }, - { - internalType: "uint8", - name: "option", - type: "uint8", - }, - { - internalType: "uint8", - name: "totalOptions", - type: "uint8", - }, - ], - internalType: "struct PathOption[]", - name: "pathOptions", - type: "tuple[]", - }, - ], - name: "withdrawAll", - outputs: [ - { - components: [ - { - internalType: "address", - name: "token", - type: "address", - }, - { - internalType: "uint256", - name: "balance", - type: "uint256", - }, - ], - internalType: "struct Balance[]", - name: "", - type: "tuple[]", - }, - { - components: [ - { - internalType: "address", - name: "target", - type: "address", - }, - { - internalType: "bytes", - name: "callData", - type: "bytes", - }, - ], - internalType: "struct MultiCall[]", - name: "", - type: "tuple[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - components: [ - { - internalType: "address", - name: "token", - type: "address", - }, - { - internalType: "uint256", - name: "balance", - type: "uint256", - }, - ], - internalType: "struct Balance[]", - name: "b", - type: "tuple[]", - }, - { - internalType: "address[]", - name: "adapters", - type: "address[]", - }, - { - components: [ - { - internalType: "address", - name: "target", - type: "address", - }, - { - internalType: "uint8", - name: "option", - type: "uint8", - }, - { - internalType: "uint8", - name: "totalOptions", - type: "uint8", - }, - ], - internalType: "struct PathOption[]", - name: "pathOptions", - type: "tuple[]", - }, - ], - name: "withdrawAllMeta", - outputs: [ - { - components: [ - { - internalType: "address", - name: "token", - type: "address", - }, - { - internalType: "uint256", - name: "balance", - type: "uint256", - }, - ], - internalType: "struct Balance[]", - name: "", - type: "tuple[]", - }, - { - components: [ - { - internalType: "address", - name: "target", - type: "address", - }, - { - internalType: "bytes", - name: "callData", - type: "bytes", - }, - ], - internalType: "struct MultiCall[]", - name: "", - type: "tuple[]", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6113dd8061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c80639b17fa6f116100505780639b17fa6f146100cf578063cc06dd33146100e2578063f2fde38b1461010257600080fd5b8063715018a6146100775780638da5cb5b14610081578063901d1145146100ae575b600080fd5b61007f610115565b005b60005460405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6100c16100bc366004610f9a565b6101a7565b6040516100a59291906110a5565b6100c16100dd366004610f9a565b6101d1565b6100f56100f03660046111de565b6101dd565b6040516100a59190611235565b61007f61011036600461128f565b61048a565b60005473ffffffffffffffffffffffffffffffffffffffff16331461019b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6101a560006105ba565b565b60608060006101b78560016101dd565b90506101c486828661062f565b9250925050935093915050565b60608060006101b78560005b81516060908067ffffffffffffffff8111156101fb576101fb610d55565b604051908082528060200260200182016040528015610224578160200160208202803683370190505b5091506000805b82811015610465576000868281518110610247576102476112b3565b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561028c575061045d565b60008173ffffffffffffffffffffffffffffffffffffffff1663ce30bbdb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102fd91906112e2565b9050600581601081111561031357610313611303565b14806103305750600681601081111561032e5761032e611303565b145b8061034c5750600781601081111561034a5761034a611303565b145b806103685750600881601081111561036657610366611303565b145b1561045a5760008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff166364a89bca6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103f59190611332565b73ffffffffffffffffffffffffffffffffffffffff1614159050871515811415610458578287868151811061042c5761042c6112b3565b73ffffffffffffffffffffffffffffffffffffffff909216602092830291909101909101526001909401935b505b50505b60010161022b565b508181101561048157610478838261080f565b92505050610484565b50505b92915050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461050b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610192565b73ffffffffffffffffffffffffffffffffffffffff81166105ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610192565b6105b7816105ba565b50565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b8151606090819060008167ffffffffffffffff81111561065157610651610d55565b60405190808252806020026020018201604052801561069757816020015b60408051808201909152600081526060602082015281526020019060019003908161066f5790505b5090506000805b838110156107f4576000806000806106d08d8d87815181106106c2576106c26112b3565b60200260200101518d6108c1565b935093509350935060008211156107e55760018d85815181106106f5576106f56112b3565b602002602001015160200181815250506107c08c868151811061071a5761071a6112b3565b60209081029190910101516040517f23746eb8000000000000000000000000000000000000000000000000000000008152600f86900b600482015273ffffffffffffffffffffffffffffffffffffffff909116906323746eb890602401602060405180830381865afa158015610794573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107b89190611332565b8e9084610b1a565b808787815181106107d3576107d36112b3565b60200260200101819052508560010195505b8460010194505050505061069e565b50876108008383610b56565b94509450505050935093915050565b60608167ffffffffffffffff81111561082a5761082a610d55565b604051908082528060200260200182016040528015610853578160200160208202803683370190505b50905060005b828110156108ba57838181518110610873576108736112b3565b602002602001015182828151811061088d5761088d6112b3565b73ffffffffffffffffffffffffffffffffffffffff90921660209283029190910190910152600101610859565b5092915050565b60008060006108f96040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001606081525090565b60008673ffffffffffffffffffffffffffffffffffffffff166382c630666040518163ffffffff1660e01b8152600401602060405180830381865afa158015610946573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061096a9190611332565b90506109768882610c04565b9450600188868151811061098c5761098c6112b3565b6020026020010151602001511115610b10576109a88682610cbc565b93508673ffffffffffffffffffffffffffffffffffffffff1663cc2b27d78987815181106109d8576109d86112b3565b602002602001015160200151866040518363ffffffff1660e01b8152600401610a0e929190918252600f0b602082015260400190565b602060405180830381865afa158015610a2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4f919061134f565b92506001888681518110610a6557610a656112b3565b60209081029190910181015181019190915260408051808201825273ffffffffffffffffffffffffffffffffffffffff8a1681528151600f88900b6024820152600060448083019190915283518083039091018152606490910190925281830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f33d2ebf2000000000000000000000000000000000000000000000000000000001790529182015291505b5093509350935093565b8083610b268585610c04565b81518110610b3657610b366112b3565b6020026020010151602001818151610b4e9190611368565b905250505050565b60608167ffffffffffffffff811115610b7157610b71610d55565b604051908082528060200260200182016040528015610bb757816020015b604080518082019091526000815260606020820152815260200190600190039081610b8f5790505b50905060005b828110156108ba57838181518110610bd757610bd76112b3565b6020026020010151828281518110610bf157610bf16112b3565b6020908102919091010152600101610bbd565b6000805b8351811015610c71578273ffffffffffffffffffffffffffffffffffffffff16848281518110610c3a57610c3a6112b3565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff161415610c69579050610484565b600101610c08565b506040517f81a3b1be00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83166004820152602401610192565b6000805b8351811015610d4b578273ffffffffffffffffffffffffffffffffffffffff16848281518110610cf257610cf26112b3565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff161415610d4357838181518110610d2c57610d2c6112b3565b60200260200101516020015160ff16915050610484565b600101610cc0565b5060009392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715610da757610da7610d55565b60405290565b6040805190810167ffffffffffffffff81118282101715610da757610da7610d55565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715610e1757610e17610d55565b604052919050565b600067ffffffffffffffff821115610e3957610e39610d55565b5060051b60200190565b73ffffffffffffffffffffffffffffffffffffffff811681146105b757600080fd5b600082601f830112610e7657600080fd5b81356020610e8b610e8683610e1f565b610dd0565b82815260059290921b84018101918181019086841115610eaa57600080fd5b8286015b84811015610ece578035610ec181610e43565b8352918301918301610eae565b509695505050505050565b803560ff81168114610eea57600080fd5b919050565b600082601f830112610f0057600080fd5b81356020610f10610e8683610e1f565b82815260609283028501820192828201919087851115610f2f57600080fd5b8387015b85811015610f8d5781818a031215610f4b5760008081fd5b610f53610d84565b8135610f5e81610e43565b8152610f6b828701610ed9565b868201526040610f7c818401610ed9565b908201528452928401928101610f33565b5090979650505050505050565b600080600060608486031215610faf57600080fd5b833567ffffffffffffffff80821115610fc757600080fd5b818601915086601f830112610fdb57600080fd5b81356020610feb610e8683610e1f565b82815260069290921b8401810191818101908a84111561100a57600080fd5b948201945b83861015611056576040868c0312156110285760008081fd5b611030610dad565b863561103b81610e43565b8152868401358482015282526040909501949082019061100f565b9750508701359250508082111561106c57600080fd5b61107887838801610e65565b9350604086013591508082111561108e57600080fd5b5061109b86828701610eef565b9150509250925092565b6040808252835182820181905260009190606090818501906020808901865b838110156110ff578151805173ffffffffffffffffffffffffffffffffffffffff1686528301518386015293860193908201906001016110c4565b50508683038188015287518084528184019250600581901b8401820189830160005b838110156111cd577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe080888503018752825173ffffffffffffffffffffffffffffffffffffffff81511685528681015190508a878601528051808c87015260005b8181101561119d578281018901518782018d01528801611182565b818111156111ae5760008c83890101525b5097870197601f01909116939093018801925090840190600101611121565b50909b9a5050505050505050505050565b600080604083850312156111f157600080fd5b823567ffffffffffffffff81111561120857600080fd5b61121485828601610e65565b9250506020830135801515811461122a57600080fd5b809150509250929050565b6020808252825182820181905260009190848201906040850190845b8181101561128357835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101611251565b50909695505050505050565b6000602082840312156112a157600080fd5b81356112ac81610e43565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000602082840312156112f457600080fd5b8151601181106112ac57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60006020828403121561134457600080fd5b81516112ac81610e43565b60006020828403121561136157600080fd5b5051919050565b600082198211156113a2577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b50019056fea264697066735822122007a21f86b7b83416fac922b7fad648d880d7ed3a37662a6bdd344da6d4b5f88764736f6c634300080a0033"; - -type CurveLPPathFinderConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: CurveLPPathFinderConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class CurveLPPathFinder__factory extends ContractFactory { - constructor(...args: CurveLPPathFinderConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): CurveLPPathFinder { - return super.attach(address) as CurveLPPathFinder; - } - override connect(signer: Signer): CurveLPPathFinder__factory { - return super.connect(signer) as CurveLPPathFinder__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): CurveLPPathFinderInterface { - return new utils.Interface(_abi) as CurveLPPathFinderInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): CurveLPPathFinder { - return new Contract(address, _abi, signerOrProvider) as CurveLPPathFinder; - } -} diff --git a/src/types/factories/contracts/pathfinder/CurvePathFinder__factory.ts b/src/types/factories/contracts/pathfinder/CurvePathFinder__factory.ts deleted file mode 100644 index 31f2cc44..00000000 --- a/src/types/factories/contracts/pathfinder/CurvePathFinder__factory.ts +++ /dev/null @@ -1,443 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - CurvePathFinder, - CurvePathFinderInterface, -} from "../../../contracts/pathfinder/CurvePathFinder"; - -const _abi = [ - { - inputs: [ - { - internalType: "enum SwapOperation", - name: "", - type: "uint8", - }, - ], - name: "UnsupportedSwapOperation", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "previousOwner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "OwnershipTransferred", - type: "event", - }, - { - inputs: [ - { - internalType: "address", - name: "curvePool", - type: "address", - }, - ], - name: "addPool", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "gasUsage", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - components: [ - { - internalType: "enum SwapOperation", - name: "swapOperation", - type: "uint8", - }, - { - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - internalType: "address", - name: "tokenIn", - type: "address", - }, - { - internalType: "address", - name: "tokenOut", - type: "address", - }, - { - internalType: "address[]", - name: "connectors", - type: "address[]", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "uint256", - name: "slippage", - type: "uint256", - }, - { - internalType: "bool", - name: "externalSlippage", - type: "bool", - }, - ], - internalType: "struct SwapTask", - name: "swapTask", - type: "tuple", - }, - { - internalType: "address", - name: "adapter", - type: "address", - }, - ], - name: "getBestConnectorSwap", - outputs: [ - { - components: [ - { - components: [ - { - internalType: "address", - name: "target", - type: "address", - }, - { - internalType: "bytes", - name: "callData", - type: "bytes", - }, - ], - internalType: "struct MultiCall", - name: "multiCall", - type: "tuple", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "bool", - name: "found", - type: "bool", - }, - { - internalType: "uint256", - name: "gasUsage", - type: "uint256", - }, - ], - internalType: "struct SwapQuote", - name: "quote", - type: "tuple", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - components: [ - { - internalType: "enum SwapOperation", - name: "swapOperation", - type: "uint8", - }, - { - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - internalType: "address", - name: "tokenIn", - type: "address", - }, - { - internalType: "address", - name: "tokenOut", - type: "address", - }, - { - internalType: "address[]", - name: "connectors", - type: "address[]", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "uint256", - name: "slippage", - type: "uint256", - }, - { - internalType: "bool", - name: "externalSlippage", - type: "bool", - }, - ], - internalType: "struct SwapTask", - name: "swapTask", - type: "tuple", - }, - { - internalType: "address", - name: "adapter", - type: "address", - }, - ], - name: "getBestDirectPairSwap", - outputs: [ - { - components: [ - { - components: [ - { - internalType: "address", - name: "target", - type: "address", - }, - { - internalType: "bytes", - name: "callData", - type: "bytes", - }, - ], - internalType: "struct MultiCall", - name: "multiCall", - type: "tuple", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "bool", - name: "found", - type: "bool", - }, - { - internalType: "uint256", - name: "gasUsage", - type: "uint256", - }, - ], - internalType: "struct SwapQuote", - name: "quote", - type: "tuple", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "owner", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "renounceOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "pool", - type: "address", - }, - { - internalType: "address", - name: "token0", - type: "address", - }, - { - internalType: "address", - name: "token1", - type: "address", - }, - { - internalType: "uint256", - name: "usage", - type: "uint256", - }, - ], - name: "setGasUsage", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "tokenToCoin", - outputs: [ - { - internalType: "int128", - name: "", - type: "int128", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "tokenToUnderlyingCoin", - outputs: [ - { - internalType: "int128", - name: "", - type: "int128", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "transferOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, -]; - -const _bytecode = - "0x608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6118158061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c80638da5cb5b11610076578063d7aa2e351161005b578063d7aa2e35146101b3578063d914cd4b146101f2578063f2fde38b1461020557600080fd5b80638da5cb5b1461015d578063c488f7fe1461018557600080fd5b80634dee073b116100a75780634dee073b146101015780636f33547d14610142578063715018a61461015557600080fd5b80631bf64c41146100c357806345330666146100ec575b600080fd5b6100d66100d1366004611345565b610218565b6040516100e3919061142e565b60405180910390f35b6100ff6100fa366004611500565b6103fa565b005b61012f61010f366004611551565b6001602090815260009283526040808420909152908252902054600f0b81565b604051600f9190910b81526020016100e3565b6100d6610150366004611345565b6104d7565b6100ff610514565b60005460405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100e3565b61012f610193366004611551565b6002602090815260009283526040808420909152908252902054600f0b81565b6101e46101c136600461158a565b600360209081526000938452604080852082529284528284209052825290205481565b6040519081526020016100e3565b6100ff6102003660046115d5565b6105a1565b6100ff6102133660046115d5565b61089e565b6102556040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b61025e836109ce565b156103f45760008273ffffffffffffffffffffffffffffffffffffffff1663bd90df706040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102d491906115f2565b905060008060008060006102e88987610a67565b9450945094509450945082156103ed5760405180608001604052806103118b8b858a8a89610d8b565b8152602001828152602001600115158152602001600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008c6040015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008c6060015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481525096505b5050505050505b92915050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610480576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff93841660009081526003602090815260408083209587168084528683528184209590971683529381528382208390559384528281209481529390925290912055565b6103f46040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b60005473ffffffffffffffffffffffffffffffffffffffff163314610595576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610477565b61059f6000611045565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610622576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610477565b60005b6004600f82900b121561075d576040517f23746eb8000000000000000000000000000000000000000000000000000000008152600f82900b600482015273ffffffffffffffffffffffffffffffffffffffff8316906323746eb890602401602060405180830381865afa9250505080156106da575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526106d7918101906115f2565b60015b6106e35761075d565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160208181526040808420959094168352939093522080547fffffffffffffffffffffffffffffffff0000000000000000000000000000000016929091016fffffffffffffffffffffffffffffffff8116929092179055610625565b5060005b6004600f82900b121561089a576040517fb739953e000000000000000000000000000000000000000000000000000000008152600f82900b600482015273ffffffffffffffffffffffffffffffffffffffff83169063b739953e90602401602060405180830381865afa925050508015610816575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610813918101906115f2565b60015b61081e575050565b73ffffffffffffffffffffffffffffffffffffffff808416600090815260026020908152604080832094909316825292909252902080546fffffffffffffffffffffffffffffffff60018401167fffffffffffffffffffffffffffffffff00000000000000000000000000000000909116179055600101610761565b5050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461091f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610477565b73ffffffffffffffffffffffffffffffffffffffff81166109c2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610477565b6109cb81611045565b50565b600080825160028111156109e4576109e461160f565b1480610a025750600182516002811115610a0057610a0061160f565b145b15610a0f57506001919050565b600282516002811115610a2457610a2461160f565b1415610a3257506000919050565b81516040517ffe7995cf000000000000000000000000000000000000000000000000000000008152610477919060040161163e565b73ffffffffffffffffffffffffffffffffffffffff80821660009081526001602081815260408084208782015190951684529390529181205490918291829182918291610ab691600f0b6116ae565b73ffffffffffffffffffffffffffffffffffffffff808816600090815260016020818152604080842060608e0151909516845293905291902054919650610aff91600f0b6116ae565b9350600085600f0b12158015610b195750600084600f0b12155b15610bf85760a08701516040517f5e0d443f000000000000000000000000000000000000000000000000000000008152600f87810b600483015286900b6024820152604481019190915273ffffffffffffffffffffffffffffffffffffffff871690635e0d443f90606401602060405180830381865afa925050508015610bdb575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610bd89181019061171f565b60015b610be457610d81565b8015610bf257600193508091505b50610d81565b73ffffffffffffffffffffffffffffffffffffffff80871660009081526002602090815260408083208b82015190941683529290522054610c3e90600190600f0b6116ae565b73ffffffffffffffffffffffffffffffffffffffff808816600090815260026020908152604080832060608d015190941683529290522054909550610c8890600190600f0b6116ae565b9350600085600f0b12158015610ca25750600084600f0b12155b15610d815760a08701516040517f07211ef7000000000000000000000000000000000000000000000000000000008152600f87810b600483015286900b6024820152604481019190915273ffffffffffffffffffffffffffffffffffffffff8716906307211ef790606401602060405180830381865afa925050508015610d64575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610d619181019061171f565b60015b610d6d57610d81565b8015610d7f5760019350809150600192505b505b9295509295909350565b6040805180820190915260008152606060208201526060600188516002811115610db757610db761160f565b1415610eb75782610de8577f79bea66400000000000000000000000000000000000000000000000000000000610e0a565b7f1af4de83000000000000000000000000000000000000000000000000000000005b8585610e168b8a6110ba565b604051600f93840b60248201529190920b60448201526064810191909152608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505b600088516002811115610ecc57610ecc61160f565b1415610fcc5782610efd577f3df0212400000000000000000000000000000000000000000000000000000000610f1f565b7fa6417ed6000000000000000000000000000000000000000000000000000000005b8585610f2b8b8a6110f2565b604051600f93840b60248201529190920b60448201526064810191909152608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505b8051156110065760405180604001604052808873ffffffffffffffffffffffffffffffffffffffff1681526020018281525091505061103b565b87516040517ffe7995cf000000000000000000000000000000000000000000000000000000008152610477919060040161163e565b9695505050505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60a08201516000906110e1846110dc856b033b2e3c9fd0803ce8000000611738565b6110f2565b6110eb9190611775565b9392505050565b60008260e0015115611106575060006103f4565b60008351600281111561111b5761111b61160f565b148061113957506001835160028111156111375761113761160f565b145b1561116c5760c08301516127109061115190826117b0565b61115b9084611738565b6111659190611775565b90506103f4565b6002835160028111156111815761118161160f565b14156111a45760c0830151611198906127106117c7565b61115b61271084611738565b82516040517ffe7995cf000000000000000000000000000000000000000000000000000000008152610477919060040161163e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610100810167ffffffffffffffff8111828210171561122c5761122c6111d9565b60405290565b80356003811061124157600080fd5b919050565b73ffffffffffffffffffffffffffffffffffffffff811681146109cb57600080fd5b803561124181611246565b600082601f83011261128457600080fd5b8135602067ffffffffffffffff808311156112a1576112a16111d9565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f830116810181811084821117156112e4576112e46111d9565b60405293845285810183019383810192508785111561130257600080fd5b83870191505b8482101561132a57813561131b81611246565b83529183019190830190611308565b979650505050505050565b8035801515811461124157600080fd5b6000806040838503121561135857600080fd5b823567ffffffffffffffff8082111561137057600080fd5b90840190610100828703121561138557600080fd5b61138d611208565b61139683611232565b81526113a460208401611268565b60208201526113b560408401611268565b60408201526113c660608401611268565b60608201526080830135828111156113dd57600080fd5b6113e988828601611273565b60808301525060a083013560a082015260c083013560c082015261140f60e08401611335565b60e0820152935061142591505060208401611268565b90509250929050565b60006020808352835160808285015273ffffffffffffffffffffffffffffffffffffffff81511660a0850152818101519050604060c085015280518060e086015260005b8181101561148f5782810184015186820161010001528301611472565b818111156114a257600061010083880101525b50828601516040860152604086015192506114c1606086018415159052565b606095909501516080850152505050601f919091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016016101000190565b6000806000806080858703121561151657600080fd5b843561152181611246565b9350602085013561153181611246565b9250604085013561154181611246565b9396929550929360600135925050565b6000806040838503121561156457600080fd5b823561156f81611246565b9150602083013561157f81611246565b809150509250929050565b60008060006060848603121561159f57600080fd5b83356115aa81611246565b925060208401356115ba81611246565b915060408401356115ca81611246565b809150509250925092565b6000602082840312156115e757600080fd5b81356110eb81611246565b60006020828403121561160457600080fd5b81516110eb81611246565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160038310611679577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600081600f0b83600f0b60008112817fffffffffffffffffffffffffffffffff80000000000000000000000000000000018312811516156116f1576116f161167f565b816f7fffffffffffffffffffffffffffffff0183138116156117155761171561167f565b5090039392505050565b60006020828403121561173157600080fd5b5051919050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156117705761177061167f565b500290565b6000826117ab577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000828210156117c2576117c261167f565b500390565b600082198211156117da576117da61167f565b50019056fea2646970667358221220ed82995f9e9761ea7972d39ed0d8d0b378778cbba995315b16c90b49c74d2b7e64736f6c634300080a0033"; - -type CurvePathFinderConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: CurvePathFinderConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class CurvePathFinder__factory extends ContractFactory { - constructor(...args: CurvePathFinderConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): CurvePathFinder { - return super.attach(address) as CurvePathFinder; - } - override connect(signer: Signer): CurvePathFinder__factory { - return super.connect(signer) as CurvePathFinder__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): CurvePathFinderInterface { - return new utils.Interface(_abi) as CurvePathFinderInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): CurvePathFinder { - return new Contract(address, _abi, signerOrProvider) as CurvePathFinder; - } -} diff --git a/src/types/factories/contracts/pathfinder/NormalTokenPathFinder__factory.ts b/src/types/factories/contracts/pathfinder/NormalTokenPathFinder__factory.ts deleted file mode 100644 index 54cec6ea..00000000 --- a/src/types/factories/contracts/pathfinder/NormalTokenPathFinder__factory.ts +++ /dev/null @@ -1,623 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - NormalTokenPathFinder, - NormalTokenPathFinderInterface, -} from "../../../contracts/pathfinder/NormalTokenPathFinder"; - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "_addressProvider", - type: "address", - }, - { - internalType: "address", - name: "_swapPathFinder", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [ - { - internalType: "address", - name: "from", - type: "address", - }, - { - internalType: "address", - name: "to", - type: "address", - }, - ], - name: "PathDoesNotExists", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "UnknownToken", - type: "error", - }, - { - inputs: [], - name: "UnsupportedAdapterType", - type: "error", - }, - { - inputs: [ - { - internalType: "enum SwapOperation", - name: "", - type: "uint8", - }, - ], - name: "UnsupportedSwapOperation", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "previousOwner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "OwnershipTransferred", - type: "event", - }, - { - inputs: [ - { - components: [ - { - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - components: [ - { - internalType: "address", - name: "token", - type: "address", - }, - { - internalType: "uint256", - name: "balance", - type: "uint256", - }, - ], - internalType: "struct Balance[]", - name: "balances", - type: "tuple[]", - }, - { - internalType: "address", - name: "underlying", - type: "address", - }, - { - internalType: "address[]", - name: "connectors", - type: "address[]", - }, - { - internalType: "address[]", - name: "adapters", - type: "address[]", - }, - { - internalType: "uint256", - name: "gasPriceUnderlyingRAY", - type: "uint256", - }, - { - internalType: "uint256", - name: "slippage", - type: "uint256", - }, - ], - internalType: "struct ClosePathTask", - name: "task", - type: "tuple", - }, - ], - name: "findNormalTokenBestPath", - outputs: [ - { - components: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "uint256", - name: "gasUsage", - type: "uint256", - }, - { - components: [ - { - internalType: "address", - name: "target", - type: "address", - }, - { - internalType: "bytes", - name: "callData", - type: "bytes", - }, - ], - internalType: "struct MultiCall[]", - name: "calls", - type: "tuple[]", - }, - ], - internalType: "struct PathFinderResult", - name: "result", - type: "tuple", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - components: [ - { - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - components: [ - { - internalType: "address", - name: "token", - type: "address", - }, - { - internalType: "uint256", - name: "balance", - type: "uint256", - }, - ], - internalType: "struct Balance[]", - name: "balances", - type: "tuple[]", - }, - { - internalType: "address", - name: "underlying", - type: "address", - }, - { - internalType: "address[]", - name: "connectors", - type: "address[]", - }, - { - internalType: "address[]", - name: "adapters", - type: "address[]", - }, - { - internalType: "uint256", - name: "gasPriceUnderlyingRAY", - type: "uint256", - }, - { - internalType: "uint256", - name: "slippage", - type: "uint256", - }, - ], - internalType: "struct ClosePathTask", - name: "task", - type: "tuple", - }, - { - internalType: "uint256", - name: "tokenIndex", - type: "uint256", - }, - { - internalType: "bool", - name: "isConnector", - type: "bool", - }, - ], - name: "findSwapQuote", - outputs: [ - { - components: [ - { - components: [ - { - internalType: "address", - name: "target", - type: "address", - }, - { - internalType: "bytes", - name: "callData", - type: "bytes", - }, - ], - internalType: "struct MultiCall", - name: "multiCall", - type: "tuple", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "bool", - name: "found", - type: "bool", - }, - { - internalType: "uint256", - name: "gasUsage", - type: "uint256", - }, - ], - internalType: "struct SwapQuote", - name: "quote", - type: "tuple", - }, - { - internalType: "address", - name: "tokenOut", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - components: [ - { - internalType: "enum SwapOperation", - name: "swapOperation", - type: "uint8", - }, - { - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - internalType: "address", - name: "tokenIn", - type: "address", - }, - { - internalType: "address", - name: "tokenOut", - type: "address", - }, - { - internalType: "address[]", - name: "connectors", - type: "address[]", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "uint256", - name: "slippage", - type: "uint256", - }, - { - internalType: "bool", - name: "externalSlippage", - type: "bool", - }, - ], - internalType: "struct SwapTask", - name: "swapTask", - type: "tuple", - }, - { - internalType: "uint256", - name: "connectorIndex", - type: "uint256", - }, - { - internalType: "uint256", - name: "connectorCumulativeBalance", - type: "uint256", - }, - { - internalType: "address[]", - name: "adapters", - type: "address[]", - }, - ], - name: "getComplexPairSwap", - outputs: [ - { - components: [ - { - components: [ - { - internalType: "address", - name: "target", - type: "address", - }, - { - internalType: "bytes", - name: "callData", - type: "bytes", - }, - ], - internalType: "struct MultiCall", - name: "multiCall", - type: "tuple", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "bool", - name: "found", - type: "bool", - }, - { - internalType: "uint256", - name: "gasUsage", - type: "uint256", - }, - ], - internalType: "struct SwapQuote", - name: "connectorTokenInQuote", - type: "tuple", - }, - { - components: [ - { - components: [ - { - internalType: "address", - name: "target", - type: "address", - }, - { - internalType: "bytes", - name: "callData", - type: "bytes", - }, - ], - internalType: "struct MultiCall", - name: "multiCall", - type: "tuple", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "bool", - name: "found", - type: "bool", - }, - { - internalType: "uint256", - name: "gasUsage", - type: "uint256", - }, - ], - internalType: "struct SwapQuote", - name: "connectorTokenOutQuote", - type: "tuple", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "token", - type: "address", - }, - ], - name: "getGasPriceTokenOutRAY", - outputs: [ - { - internalType: "uint256", - name: "gasPrice", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "owner", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "priceOracle", - outputs: [ - { - internalType: "contract IPriceOracleV2", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "renounceOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "swapPathFinder", - outputs: [ - { - internalType: "contract SwapPathFinder", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "transferOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "wethToken", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x60a06040523480156200001157600080fd5b50604051620024fd380380620024fd8339810160408190526200003491620001cd565b6200003f3362000160565b6000829050806001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000083573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000a9919062000205565b6001600160a01b03166080816001600160a01b031681525050806001600160a01b031663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000101573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000127919062000205565b600280546001600160a01b039283166001600160a01b0319918216179091556001805494909216931692909217909155506200022a9050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b0381168114620001c857600080fd5b919050565b60008060408385031215620001e157600080fd5b620001ec83620001b0565b9150620001fc60208401620001b0565b90509250929050565b6000602082840312156200021857600080fd5b6200022382620001b0565b9392505050565b6080516122b06200024d6000396000818161015e015261055001526122b06000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c8063553f67ec116100815780639b59deba1161005b5780639b59deba146101d1578063c1a5de80146101f2578063f2fde38b1461021257600080fd5b8063553f67ec14610196578063715018a6146101a95780638da5cb5b146101b357600080fd5b806347c242db116100b257806347c242db146101385780634b57b0be1461015957806354fd4d501461018057600080fd5b806308d665d3146100ce5780632630c12f14610118575b600080fd5b6001546100ee9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6002546100ee9073ffffffffffffffffffffffffffffffffffffffff1681565b61014b610146366004611955565b610225565b60405161010f929190611b5c565b6100ee7f000000000000000000000000000000000000000000000000000000000000000081565b610188600281565b60405190815260200161010f565b6101886101a4366004611b81565b6104ca565b6101b16105c7565b005b60005473ffffffffffffffffffffffffffffffffffffffff166100ee565b6101e46101df366004611cf7565b610654565b60405161010f929190611d52565b610205610200366004611d8a565b6108a5565b60405161010f9190611dbf565b6101b1610220366004611b81565b610ce9565b6102626040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b61029f6040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b6102a886610e19565b6102ea5785516040517ffe7995cf0000000000000000000000000000000000000000000000000000000081526102e19190600401611ec6565b60405180910390fd5b60015473ffffffffffffffffffffffffffffffffffffffff1663ebf9deac6103128888610eb2565b856103398a608001518a8151811061032c5761032c611ed4565b60200260200101516104ca565b6040518463ffffffff1660e01b815260040161035793929190611f54565b6000604051808303816000875af1158015610376573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526103bc9190810190612034565b91508160400151156104c15760008483602001516103da91906121a7565b60015490915073ffffffffffffffffffffffffffffffffffffffff1663ebf9deac61040889848a8a15610fbe565b866104168b606001516104ca565b6040518463ffffffff1660e01b815260040161043493929190611f54565b6000604051808303816000875af1158015610453573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526104999190810190612034565b915080836020015183602001516104b091906121bf565b6104ba91906121fc565b6020830152505b94509492505050565b60025460009073ffffffffffffffffffffffffffffffffffffffff1663b66102df6105056b033b2e3c9fd0803ce8000000633b9aca006121bf565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b168152600481019190915273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015285166044820152606401602060405180830381865afa15801561059d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105c19190612237565b92915050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610648576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102e1565b61065260006110d2565b565b6106916040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b60008061069e8686611147565b600154608088015160a08901516040517febf9deac00000000000000000000000000000000000000000000000000000000815293945073ffffffffffffffffffffffffffffffffffffffff9092169263ebf9deac92610704928692909190600401611f54565b6000604051808303816000875af1158015610723573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526107699190810190612034565b606081015160408801519194509092508461089b5760608701515160005b818110156108985760006107c58a6060015183815181106107aa576107aa611ed4565b60200260200101518b6020015161126290919063ffffffff16565b90506000806107da8785858f60800151610225565b9150915080604001511561088a5782156107f55760006107f9565b614e205b8160600151836060015161080d91906121a7565b61081791906121a7565b606082015260a08c015161083290829089908c908a90611293565b1561088a578198508260001461084957600061084d565b614e205b8960600181815161085e91906121a7565b90525060608c015180518590811061087857610878611ed4565b60200260200101519750806060015195505b836001019350505050610787565b50505b5050935093915050565b6108c960405180606001604052806000815260200160008152602001606081525090565b604082015160208301515160608401515160008267ffffffffffffffff8111156108f5576108f5611752565b60405190808252806020026020018201604052801561093b57816020015b6040805180820190915260008152606060208201528152602001906001900390816109135790505b50905060008267ffffffffffffffff81111561095957610959611752565b604051908082528060200260200182016040528015610982578160200160208202803683370190505b50905060008060005b86811015610b515760008a6020015182815181106109ab576109ab611ed4565b60200260200101516000015190508873ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610b485760608b01516109fb90826113b6565b15610a2a5781858581518110610a1357610a13611ed4565b602002602001018181525050836001019350610b48565b60018b602001518381518110610a4257610a42611ed4565b6020026020010151602001511115610b4857600080610a638d856000610654565b915091508160400151610ac2576040517f201e176300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80851660048301528c1660248201526044016102e1565b60008d602001518581518110610ada57610ada611ed4565b60200260200101516020018181525050610b078183602001518f602001516114309092919063ffffffff16565b8160000151888681518110610b1e57610b1e611ed4565b6020026020010181905250848060010195505081606001518c602001818151019150818152505050505b5060010161098b565b5060005b85811015610cc3576000848281518110610b7157610b71611ed4565b6020026020010151905060008b602001518281518110610b9357610b93611ed4565b602002602001015160000151905060018c602001518381518110610bb957610bb9611ed4565b6020026020010151602001511115610cb9576000610bd98d846001610654565b5090508060400151610c37576040517f201e176300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80841660048301528c1660248201526044016102e1565b60008d602001518481518110610c4f57610c4f611ed4565b60200260200101516020018181525050610c7c8b82602001518f602001516114309092919063ffffffff16565b8060000151888681518110610c9357610c93611ed4565b602090810291909101810191909152606090910151908c01805190910190526001909301925b5050600101610b55565b50604088018490526020890151610cda9088611262565b88525095979650505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610d6a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102e1565b73ffffffffffffffffffffffffffffffffffffffff8116610e0d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102e1565b610e16816110d2565b50565b60008082516002811115610e2f57610e2f611e5c565b1480610e4d5750600182516002811115610e4b57610e4b611e5c565b145b15610e5a57506001919050565b600282516002811115610e6f57610e6f611e5c565b1415610e7d57506000919050565b81516040517ffe7995cf0000000000000000000000000000000000000000000000000000000081526102e19190600401611ec6565b60408051610100810182526000808252602082018190529181018290526060808201839052608082015260a0810182905260c0810182905260e0810191909152606060405180610100016040528085600001516002811115610f1657610f16611e5c565b8152602001856020015173ffffffffffffffffffffffffffffffffffffffff168152602001856040015173ffffffffffffffffffffffffffffffffffffffff16815260200185608001518581518110610f7157610f71611ed4565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1681526020018281526020018560a0015181526020018560c0015181526020016001151581525091505092915050565b60408051610100810182526000808252602082018190529181018290526060808201839052608082015260a0810182905260c0810182905260e081019190915260606040518061010001604052808461101857875161101b565b60015b600281111561102c5761102c611e5c565b8152602001876020015173ffffffffffffffffffffffffffffffffffffffff1681526020018760800151868151811061106757611067611ed4565b602002602001015173ffffffffffffffffffffffffffffffffffffffff168152602001876060015173ffffffffffffffffffffffffffffffffffffffff1681526020018281526020018681526020018760c00151815260200160011515815250915050949350505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60408051610100810182526000808252602082018190529181018290526060808201839052608082015260a0810182905260c0810182905260e08101919091526040805161010081019091528060018152602001846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015184815181106111d1576111d1611ed4565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff168152602001846040015173ffffffffffffffffffffffffffffffffffffffff168152602001846060015181526020018460200151848151811061123857611238611ed4565b60200260200101516020015181526020018460c00151815260200160011515815250905092915050565b60008261126f848461146c565b8151811061127f5761127f611ed4565b602002602001015160200151905092915050565b600085604001516112a6575060006113ad565b83604001516112b7575060016113ad565b60006113148688602001516b033b2e3c9fd0803ce8000000868b606001516112df91906121bf565b6112e991906121fc565b60208901516b033b2e3c9fd0803ce8000000611305898b6121bf565b61130f91906121fc565b611524565b905060008651600281111561132b5761132b611e5c565b1480611349575060018651600281111561134757611347611e5c565b145b156113555790506113ad565b60028651600281111561136a5761136a611e5c565b1415611378571590506113ad565b85516040517ffe7995cf0000000000000000000000000000000000000000000000000000000081526102e19190600401611ec6565b95945050505050565b8151600090815b81811015611425578373ffffffffffffffffffffffffffffffffffffffff168582815181106113ee576113ee611ed4565b602002602001015173ffffffffffffffffffffffffffffffffffffffff16141561141d576001925050506105c1565b6001016113bd565b506000949350505050565b808361143c858561146c565b8151811061144c5761144c611ed4565b602002602001015160200181815161146491906121a7565b905250505050565b6000805b83518110156114d9578273ffffffffffffffffffffffffffffffffffffffff168482815181106114a2576114a2611ed4565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff1614156114d15790506105c1565b600101611470565b506040517f81a3b1be00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016102e1565b60006115646040518060400160405280600c81526020017f414141202d20616d6f756e740000000000000000000000000000000000000000815250611615565b61156d856116a4565b611576846116a4565b61157f836116a4565b611588826116a4565b61159a6115958587612250565b6116a4565b6115a76115958385612250565b6115b086610e19565b6115d1576115be82846121a7565b6115c885876121a7565b101590506113ad565b8385101580156115e15750818310155b156115fa576115f08284612250565b6115c88587612250565b83851061160857600161160b565b60005b9695505050505050565b610e16816040516024016116299190612267565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f41304fac00000000000000000000000000000000000000000000000000000000179052611731565b610e16816040516024016116ba91815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff5b1bba9000000000000000000000000000000000000000000000000000000001790525b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610100810167ffffffffffffffff811182821017156117a5576117a5611752565b60405290565b6040805190810167ffffffffffffffff811182821017156117a5576117a5611752565b60405160e0810167ffffffffffffffff811182821017156117a5576117a5611752565b6040516080810167ffffffffffffffff811182821017156117a5576117a5611752565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561185b5761185b611752565b604052919050565b80356003811061187257600080fd5b919050565b73ffffffffffffffffffffffffffffffffffffffff81168114610e1657600080fd5b803561187281611877565b600067ffffffffffffffff8211156118be576118be611752565b5060051b60200190565b600082601f8301126118d957600080fd5b813560206118ee6118e9836118a4565b611814565b82815260059290921b8401810191818101908684111561190d57600080fd5b8286015b8481101561193157803561192481611877565b8352918301918301611911565b509695505050505050565b8015158114610e1657600080fd5b80356118728161193c565b6000806000806080858703121561196b57600080fd5b843567ffffffffffffffff8082111561198357600080fd5b90860190610100828903121561199857600080fd5b6119a0611781565b6119a983611863565b81526119b760208401611899565b60208201526119c860408401611899565b60408201526119d960608401611899565b60608201526080830135828111156119f057600080fd5b6119fc8a8286016118c8565b60808301525060a083013560a082015260c083013560c0820152611a2260e0840161194a565b60e0820152955060208701359450604087013593506060870135915080821115611a4b57600080fd5b50611a58878288016118c8565b91505092959194509250565b60005b83811015611a7f578181015183820152602001611a67565b83811115611a8e576000848401525b50505050565b60008151808452611aac816020860160208601611a64565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff81511682526000602082015160406020850152611b136040850182611a94565b949350505050565b6000815160808452611b306080850182611ade565b905060208301516020850152604083015115156040850152606083015160608501528091505092915050565b604081526000611b6f6040830185611b1b565b82810360208401526113ad8185611b1b565b600060208284031215611b9357600080fd5b8135611b9e81611877565b9392505050565b600082601f830112611bb657600080fd5b81356020611bc66118e9836118a4565b82815260069290921b84018101918181019086841115611be557600080fd5b8286015b848110156119315760408189031215611c025760008081fd5b611c0a6117ab565b8135611c1581611877565b81528185013585820152835291830191604001611be9565b600060e08284031215611c3f57600080fd5b611c476117ce565b9050611c5282611899565b8152602082013567ffffffffffffffff80821115611c6f57600080fd5b611c7b85838601611ba5565b6020840152611c8c60408501611899565b60408401526060840135915080821115611ca557600080fd5b611cb1858386016118c8565b60608401526080840135915080821115611cca57600080fd5b50611cd7848285016118c8565b60808301525060a082013560a082015260c082013560c082015292915050565b600080600060608486031215611d0c57600080fd5b833567ffffffffffffffff811115611d2357600080fd5b611d2f86828701611c2d565b935050602084013591506040840135611d478161193c565b809150509250925092565b604081526000611d656040830185611b1b565b905073ffffffffffffffffffffffffffffffffffffffff831660208301529392505050565b600060208284031215611d9c57600080fd5b813567ffffffffffffffff811115611db357600080fd5b611b1384828501611c2d565b6000602080835260808301845182850152818501516040850152604085015160608086015281815180845260a08701915060a08160051b8801019350848301925060005b81811015611e4f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60888603018352611e3d858551611ade565b94509285019291850191600101611e03565b5092979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60038110611ec2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b602081016105c18284611e8b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081518084526020808501945080840160005b83811015611f4957815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101611f17565b509495945050505050565b60608152611f66606082018551611e8b565b602084015173ffffffffffffffffffffffffffffffffffffffff908116608083015260408501511660a08201526060840151600090611fbd60c084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060808501516101008060e0850152611fda610160850183611f03565b915060a0870151818501525060c086015161012084015260e086015161200561014085018215159052565b5082810360208401526120188186611f03565b915050826040830152949350505050565b80516118728161193c565b6000602080838503121561204757600080fd5b825167ffffffffffffffff8082111561205f57600080fd5b908401906080828703121561207357600080fd5b61207b6117f1565b82518281111561208a57600080fd5b83016040818903121561209c57600080fd5b6120a46117ab565b81516120af81611877565b815281860151848111156120c257600080fd5b80830192505088601f8301126120d757600080fd5b8151848111156120e9576120e9611752565b612119877fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611814565b9450808552898782850101111561212f57600080fd5b61213e81888701898601611a64565b50808601849052825250828401518185015261215c60408401612029565b6040820152606083015160608201528094505050505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156121ba576121ba612178565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156121f7576121f7612178565b500290565b600082612232577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60006020828403121561224957600080fd5b5051919050565b60008282101561226257612262612178565b500390565b602081526000611b9e6020830184611a9456fea264697066735822122062a2ca1eb00b46484704ebc3745cb0199763e60cd447c42272869be949de054264736f6c634300080a0033"; - -type NormalTokenPathFinderConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: NormalTokenPathFinderConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class NormalTokenPathFinder__factory extends ContractFactory { - constructor(...args: NormalTokenPathFinderConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - _addressProvider: string, - _swapPathFinder: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - _addressProvider, - _swapPathFinder, - overrides || {} - ) as Promise; - } - override getDeployTransaction( - _addressProvider: string, - _swapPathFinder: string, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction( - _addressProvider, - _swapPathFinder, - overrides || {} - ); - } - override attach(address: string): NormalTokenPathFinder { - return super.attach(address) as NormalTokenPathFinder; - } - override connect(signer: Signer): NormalTokenPathFinder__factory { - return super.connect(signer) as NormalTokenPathFinder__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): NormalTokenPathFinderInterface { - return new utils.Interface(_abi) as NormalTokenPathFinderInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): NormalTokenPathFinder { - return new Contract( - address, - _abi, - signerOrProvider - ) as NormalTokenPathFinder; - } -} diff --git a/src/types/factories/contracts/pathfinder/SwapPathFinder__factory.ts b/src/types/factories/contracts/pathfinder/SwapPathFinder__factory.ts deleted file mode 100644 index 34518993..00000000 --- a/src/types/factories/contracts/pathfinder/SwapPathFinder__factory.ts +++ /dev/null @@ -1,443 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - SwapPathFinder, - SwapPathFinderInterface, -} from "../../../contracts/pathfinder/SwapPathFinder"; - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "_curvePathFinder", - type: "address", - }, - { - internalType: "address", - name: "_uniV2PathFinder", - type: "address", - }, - { - internalType: "address", - name: "_uniV3PathFinder", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "UnsupportedAdapterType", - type: "error", - }, - { - inputs: [ - { - internalType: "enum SwapOperation", - name: "", - type: "uint8", - }, - ], - name: "UnsupportedSwapOperation", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "previousOwner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "OwnershipTransferred", - type: "event", - }, - { - inputs: [], - name: "curvePathFinder", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - components: [ - { - internalType: "enum SwapOperation", - name: "swapOperation", - type: "uint8", - }, - { - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - internalType: "address", - name: "tokenIn", - type: "address", - }, - { - internalType: "address", - name: "tokenOut", - type: "address", - }, - { - internalType: "address[]", - name: "connectors", - type: "address[]", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "uint256", - name: "slippage", - type: "uint256", - }, - { - internalType: "bool", - name: "externalSlippage", - type: "bool", - }, - ], - internalType: "struct SwapTask", - name: "swapTask", - type: "tuple", - }, - { - internalType: "address[]", - name: "adapters", - type: "address[]", - }, - ], - name: "findAllSwaps", - outputs: [ - { - components: [ - { - components: [ - { - internalType: "address", - name: "target", - type: "address", - }, - { - internalType: "bytes", - name: "callData", - type: "bytes", - }, - ], - internalType: "struct MultiCall", - name: "multiCall", - type: "tuple", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "bool", - name: "found", - type: "bool", - }, - { - internalType: "uint256", - name: "gasUsage", - type: "uint256", - }, - ], - internalType: "struct SwapQuote[]", - name: "results", - type: "tuple[]", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - components: [ - { - internalType: "enum SwapOperation", - name: "swapOperation", - type: "uint8", - }, - { - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - internalType: "address", - name: "tokenIn", - type: "address", - }, - { - internalType: "address", - name: "tokenOut", - type: "address", - }, - { - internalType: "address[]", - name: "connectors", - type: "address[]", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "uint256", - name: "slippage", - type: "uint256", - }, - { - internalType: "bool", - name: "externalSlippage", - type: "bool", - }, - ], - internalType: "struct SwapTask", - name: "swapTask", - type: "tuple", - }, - { - internalType: "address[]", - name: "adapters", - type: "address[]", - }, - { - internalType: "uint256", - name: "gasPriceInTokenOut", - type: "uint256", - }, - ], - name: "getBestDirectPairSwap", - outputs: [ - { - components: [ - { - components: [ - { - internalType: "address", - name: "target", - type: "address", - }, - { - internalType: "bytes", - name: "callData", - type: "bytes", - }, - ], - internalType: "struct MultiCall", - name: "multiCall", - type: "tuple", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "bool", - name: "found", - type: "bool", - }, - { - internalType: "uint256", - name: "gasUsage", - type: "uint256", - }, - ], - internalType: "struct SwapQuote", - name: "quote", - type: "tuple", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "adapter", - type: "address", - }, - ], - name: "getPathFinder", - outputs: [ - { - internalType: "address", - name: "pathFinder", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "owner", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "renounceOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "transferOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "uniV2pathFinder", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "uniV3pathFinder", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x60806040523480156200001157600080fd5b5060405162001a0d38038062001a0d8339810160408190526200003491620000ef565b6200003f3362000082565b600180546001600160a01b039485166001600160a01b03199182161790915560028054938516938216939093179092556003805491909316911617905562000139565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b0381168114620000ea57600080fd5b919050565b6000806000606084860312156200010557600080fd5b6200011084620000d2565b92506200012060208501620000d2565b91506200013060408501620000d2565b90509250925092565b6118c480620001496000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c80638da5cb5b11610076578063ebf9deac1161005b578063ebf9deac1461019e578063eeef8dd0146101be578063f2fde38b146101de57600080fd5b80638da5cb5b1461016d5780638e8a08521461018b57600080fd5b806337c605f7116100a757806337c605f71461012d57806354fd4d501461014d578063715018a61461016357600080fd5b80631c9a755f146100c3578063287b94d71461010d575b600080fd5b6003546100e39073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6001546100e39073ffffffffffffffffffffffffffffffffffffffff1681565b61014061013b3660046111c2565b6101f1565b604051610104919061130a565b610155600181565b604051908152602001610104565b61016b6104d0565b005b60005473ffffffffffffffffffffffffffffffffffffffff166100e3565b6100e361019936600461138a565b610562565b6101b16101ac3660046113ae565b61070c565b604051610104919061141b565b6002546100e39073ffffffffffffffffffffffffffffffffffffffff1681565b61016b6101ec36600461138a565b610873565b6040805160c081018252600060808201818152606060a08401819052908352602083018290529282018190528183015282516000908067ffffffffffffffff81111561023f5761023f610f44565b6040519080825280602002602001820160405280156102ad57816020015b61029a6040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b81526020019060019003908161025d5790505b50935060005b818110156104ba5760008682815181106102cf576102cf61142e565b6020026020010151905060006102e482610562565b905073ffffffffffffffffffffffffffffffffffffffff8116156104b0576040517f1bf64c4100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821690631bf64c4190610356908c908690600401611518565b6000604051808303816000875af1158015610375573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526103bb91908101906115f9565b955060008173ffffffffffffffffffffffffffffffffffffffff16636f33547d8b856040518363ffffffff1660e01b81526004016103fa929190611518565b6000604051808303816000875af1158015610419573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261045f91908101906115f9565b905061046e818b8960006109a3565b15610477578096505b8660400151156104ae57868887815181106104945761049461142e565b602002602001018190525085806104aa9061176c565b9650505b505b50506001016102b3565b506104c4846109bf565b93505050505b92915050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610556576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6105606000610aea565b565b600073ffffffffffffffffffffffffffffffffffffffff8216156107075760008273ffffffffffffffffffffffffffffffffffffffff1663ce30bbdb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f191906117a5565b905060018160108111156106075761060761145d565b14156106295760025473ffffffffffffffffffffffffffffffffffffffff1691505b600281601081111561063d5761063d61145d565b141561065f5760035473ffffffffffffffffffffffffffffffffffffffff1691505b60038160108111156106735761067361145d565b14806106905750600581601081111561068e5761068e61145d565b145b806106ac575060068160108111156106aa576106aa61145d565b145b806106c8575060078160108111156106c6576106c661145d565b145b806106e4575060088160108111156106e2576106e261145d565b145b156107055760015473ffffffffffffffffffffffffffffffffffffffff1691505b505b919050565b6107496040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b825160005b8181101561086a57600085828151811061076a5761076a61142e565b60200260200101519050600061077f82610562565b905073ffffffffffffffffffffffffffffffffffffffff8116156108605760006107a883610562565b73ffffffffffffffffffffffffffffffffffffffff16631bf64c418a856040518363ffffffff1660e01b81526004016107e2929190611518565b6000604051808303816000875af1158015610801573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261084791908101906115f9565b9050610855818a888a6109a3565b1561085e578095505b505b505060010161074e565b50509392505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146108f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161054d565b73ffffffffffffffffffffffffffffffffffffffff8116610997576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161054d565b6109a081610aea565b50565b60006109b6858585866060015186610b5f565b95945050505050565b8051606090806109d0575090919050565b60005b8381815181106109e5576109e561142e565b60200260200101516040015115610a0e5760010181811415610a0957509192915050565b6109d3565b8067ffffffffffffffff811115610a2757610a27610f44565b604051908082528060200260200182016040528015610a9557816020015b610a826040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b815260200190600190039081610a455790505b50925060005b81811015610ae257848181518110610ab557610ab561142e565b6020026020010151848281518110610acf57610acf61142e565b6020908102919091010152600101610a9b565b505050919050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008560400151610b72575060006109b6565b8360400151610b83575060016109b6565b6000610be08688602001516b033b2e3c9fd0803ce8000000868b60600151610bab91906117c6565b610bb59190611803565b60208901516b033b2e3c9fd0803ce8000000610bd1898b6117c6565b610bdb9190611803565b610c79565b9050600086516002811115610bf757610bf761145d565b1480610c155750600186516002811115610c1357610c1361145d565b145b15610c215790506109b6565b600286516002811115610c3657610c3661145d565b1415610c44571590506109b6565b85516040517ffe7995cf00000000000000000000000000000000000000000000000000000000815261054d919060040161183e565b6000610cb96040518060400160405280600c81526020017f414141202d20616d6f756e740000000000000000000000000000000000000000815250610d6a565b610cc285610df9565b610ccb84610df9565b610cd483610df9565b610cdd82610df9565b610cef610cea858761184c565b610df9565b610cfc610cea838561184c565b610d0586610e8a565b610d2657610d138284611863565b610d1d8587611863565b101590506109b6565b838510158015610d365750818310155b15610d4f57610d45828461184c565b610d1d858761184c565b838510610d5d576001610d60565b60005b9695505050505050565b6109a081604051602401610d7e919061187b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f41304fac00000000000000000000000000000000000000000000000000000000179052610f23565b6109a081604051602401610e0f91815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff5b1bba900000000000000000000000000000000000000000000000000000000179052610f23565b60008082516002811115610ea057610ea061145d565b1480610ebe5750600182516002811115610ebc57610ebc61145d565b145b15610ecb57506001919050565b600282516002811115610ee057610ee061145d565b1415610eee57506000919050565b81516040517ffe7995cf00000000000000000000000000000000000000000000000000000000815261054d919060040161183e565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610100810167ffffffffffffffff81118282101715610f9757610f97610f44565b60405290565b6040516080810167ffffffffffffffff81118282101715610f9757610f97610f44565b6040805190810167ffffffffffffffff81118282101715610f9757610f97610f44565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561102a5761102a610f44565b604052919050565b80356003811061070757600080fd5b73ffffffffffffffffffffffffffffffffffffffff811681146109a057600080fd5b803561070781611041565b600082601f83011261107f57600080fd5b8135602067ffffffffffffffff82111561109b5761109b610f44565b8160051b6110aa828201610fe3565b92835284810182019282810190878511156110c457600080fd5b83870192505b848310156110ec5782356110dd81611041565b825291830191908301906110ca565b979650505050505050565b80151581146109a057600080fd5b8035610707816110f7565b6000610100828403121561112357600080fd5b61112b610f73565b905061113682611032565b815261114460208301611063565b602082015261115560408301611063565b604082015261116660608301611063565b6060820152608082013567ffffffffffffffff81111561118557600080fd5b6111918482850161106e565b60808301525060a082013560a082015260c082013560c08201526111b760e08301611105565b60e082015292915050565b600080604083850312156111d557600080fd5b823567ffffffffffffffff808211156111ed57600080fd5b6111f986838701611110565b9350602085013591508082111561120f57600080fd5b5061121c8582860161106e565b9150509250929050565b60005b83811015611241578181015183820152602001611229565b83811115611250576000848401525b50505050565b6000815180845261126e816020860160208601611226565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b80516080808452815173ffffffffffffffffffffffffffffffffffffffff169084015260200151604060a08401526000906112de60c0850182611256565b905060208301516020850152604083015115156040850152606083015160608501528091505092915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561137d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc088860301845261136b8583516112a0565b94509285019290850190600101611331565b5092979650505050505050565b60006020828403121561139c57600080fd5b81356113a781611041565b9392505050565b6000806000606084860312156113c357600080fd5b833567ffffffffffffffff808211156113db57600080fd5b6113e787838801611110565b945060208601359150808211156113fd57600080fd5b5061140a8682870161106e565b925050604084013590509250925092565b6020815260006113a760208301846112a0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600381106114c3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b600081518084526020808501945080840160005b8381101561150d57815173ffffffffffffffffffffffffffffffffffffffff16875295820195908201906001016114db565b509495945050505050565b6040815261152a60408201845161148c565b6000602084015173ffffffffffffffffffffffffffffffffffffffff80821660608501528060408701511660808501525050606084015161158360a084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060808401516101008060c08501526115a06101408501836114c7565b915060a086015160e085015260c0860151818501525060e08501516115ca61012085018215159052565b5073ffffffffffffffffffffffffffffffffffffffff8416602084015290506113a7565b8051610707816110f7565b6000602080838503121561160c57600080fd5b825167ffffffffffffffff8082111561162457600080fd5b908401906080828703121561163857600080fd5b611640610f9d565b82518281111561164f57600080fd5b83016040818903121561166157600080fd5b611669610fc0565b815161167481611041565b8152818601518481111561168757600080fd5b80830192505088601f83011261169c57600080fd5b8151848111156116ae576116ae610f44565b6116de877fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601610fe3565b945080855289878285010111156116f457600080fd5b61170381888701898601611226565b508086018490528252508284015181850152611721604084016115ee565b6040820152606083015160608201528094505050505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561179e5761179e61173d565b5060010190565b6000602082840312156117b757600080fd5b8151601181106113a757600080fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156117fe576117fe61173d565b500290565b600082611839577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b602081016104ca828461148c565b60008282101561185e5761185e61173d565b500390565b600082198211156118765761187661173d565b500190565b6020815260006113a7602083018461125656fea26469706673582212204a44d119a95a7bbbbf2c6cd5403facba1ffe02ace142ee957c64cb512d488b0664736f6c634300080a0033"; - -type SwapPathFinderConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: SwapPathFinderConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class SwapPathFinder__factory extends ContractFactory { - constructor(...args: SwapPathFinderConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - _curvePathFinder: string, - _uniV2PathFinder: string, - _uniV3PathFinder: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - _curvePathFinder, - _uniV2PathFinder, - _uniV3PathFinder, - overrides || {} - ) as Promise; - } - override getDeployTransaction( - _curvePathFinder: string, - _uniV2PathFinder: string, - _uniV3PathFinder: string, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction( - _curvePathFinder, - _uniV2PathFinder, - _uniV3PathFinder, - overrides || {} - ); - } - override attach(address: string): SwapPathFinder { - return super.attach(address) as SwapPathFinder; - } - override connect(signer: Signer): SwapPathFinder__factory { - return super.connect(signer) as SwapPathFinder__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): SwapPathFinderInterface { - return new utils.Interface(_abi) as SwapPathFinderInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): SwapPathFinder { - return new Contract(address, _abi, signerOrProvider) as SwapPathFinder; - } -} diff --git a/src/types/factories/contracts/pathfinder/UniswapV2PathFinder__factory.ts b/src/types/factories/contracts/pathfinder/UniswapV2PathFinder__factory.ts deleted file mode 100644 index 43a30f29..00000000 --- a/src/types/factories/contracts/pathfinder/UniswapV2PathFinder__factory.ts +++ /dev/null @@ -1,395 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - UniswapV2PathFinder, - UniswapV2PathFinderInterface, -} from "../../../contracts/pathfinder/UniswapV2PathFinder"; - -const _abi = [ - { - inputs: [ - { - internalType: "enum SwapOperation", - name: "", - type: "uint8", - }, - ], - name: "UnsupportedSwapOperation", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "previousOwner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "OwnershipTransferred", - type: "event", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "gasUsage", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - components: [ - { - internalType: "enum SwapOperation", - name: "swapOperation", - type: "uint8", - }, - { - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - internalType: "address", - name: "tokenIn", - type: "address", - }, - { - internalType: "address", - name: "tokenOut", - type: "address", - }, - { - internalType: "address[]", - name: "connectors", - type: "address[]", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "uint256", - name: "slippage", - type: "uint256", - }, - { - internalType: "bool", - name: "externalSlippage", - type: "bool", - }, - ], - internalType: "struct SwapTask", - name: "swapTask", - type: "tuple", - }, - { - internalType: "address", - name: "adapter", - type: "address", - }, - ], - name: "getBestConnectorSwap", - outputs: [ - { - components: [ - { - components: [ - { - internalType: "address", - name: "target", - type: "address", - }, - { - internalType: "bytes", - name: "callData", - type: "bytes", - }, - ], - internalType: "struct MultiCall", - name: "multiCall", - type: "tuple", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "bool", - name: "found", - type: "bool", - }, - { - internalType: "uint256", - name: "gasUsage", - type: "uint256", - }, - ], - internalType: "struct SwapQuote", - name: "quote", - type: "tuple", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - components: [ - { - internalType: "enum SwapOperation", - name: "swapOperation", - type: "uint8", - }, - { - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - internalType: "address", - name: "tokenIn", - type: "address", - }, - { - internalType: "address", - name: "tokenOut", - type: "address", - }, - { - internalType: "address[]", - name: "connectors", - type: "address[]", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "uint256", - name: "slippage", - type: "uint256", - }, - { - internalType: "bool", - name: "externalSlippage", - type: "bool", - }, - ], - internalType: "struct SwapTask", - name: "swapTask", - type: "tuple", - }, - { - internalType: "address", - name: "adapter", - type: "address", - }, - ], - name: "getBestDirectPairSwap", - outputs: [ - { - components: [ - { - components: [ - { - internalType: "address", - name: "target", - type: "address", - }, - { - internalType: "bytes", - name: "callData", - type: "bytes", - }, - ], - internalType: "struct MultiCall", - name: "multiCall", - type: "tuple", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "bool", - name: "found", - type: "bool", - }, - { - internalType: "uint256", - name: "gasUsage", - type: "uint256", - }, - ], - internalType: "struct SwapQuote", - name: "quote", - type: "tuple", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "owner", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "renounceOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "router", - type: "address", - }, - { - internalType: "address", - name: "token0", - type: "address", - }, - { - internalType: "address", - name: "token1", - type: "address", - }, - { - internalType: "uint256", - name: "usage", - type: "uint256", - }, - ], - name: "setGasUsage", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "transferOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611a018061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c8063715018a61161005b578063715018a6146100f45780638da5cb5b146100fc578063d7aa2e3514610124578063f2fde38b1461015557600080fd5b80631bf64c411461008d57806345330666146100b657806354fd4d50146100cb5780636f33547d146100e1575b600080fd5b6100a061009b366004611436565b610168565b6040516100ad919061158a565b60405180910390f35b6100c96100c43660046115f9565b61027d565b005b6100d3600281565b6040519081526020016100ad565b6100a06100ef366004611436565b61035a565b6100c9610514565b60005460405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100ad565b6100d361013236600461164a565b600160209081526000938452604080852082529284528284209052825290205481565b6100c9610163366004611695565b6105a1565b6101a56040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b6040805160028082526060820183526000926020830190803683370190505090508360400151816000815181106101de576101de6116b9565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050836060015181600181518110610230576102306116b9565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506102758484836106d1565b949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610303576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff93841660009081526001602090815260408083209587168084528683528184209590971683529381528382208390559384528281209481529390925290912055565b6103976040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b60808381015151604080516003808252938101909152909160009190602082016060803683370190505090508460400151816000815181106103db576103db6116b9565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505084606001518160028151811061042d5761042d6116b9565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060005b8281101561050b5785608001518181518110610488576104886116b9565b6020026020010151826001815181106104a3576104a36116b9565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060006104ea8787856106d1565b90506104f98188876000610aa7565b15610502578094505b5060010161046a565b50505092915050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610595576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102fa565b61059f6000610ac3565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610622576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102fa565b73ffffffffffffffffffffffffffffffffffffffff81166106c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102fa565b6106ce81610ac3565b50565b61070e6040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b600061071985610b38565b1561080a5760a08501516040517fd06ca61f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86169163d06ca61f9161077691908790600401611739565b600060405180830381865afa9250505080156107d257506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526107cf9190810190611752565b60015b6107db576108e6565b80600182516107ea9190611812565b815181106107fa576107fa6116b9565b60200260200101519150506108e6565b60a08501516040517f1f00ca7400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff861691631f00ca749161086291908790600401611739565b600060405180830381865afa9250505080156108be57506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108bb9190810190611752565b60015b6108c7576108e6565b806000815181106108da576108da6116b9565b60200260200101519150505b8015610a9f57602082018190526001604083015261090685858584610bd1565b826000018190525060008473ffffffffffffffffffffffffffffffffffffffff1663bd90df706040518163ffffffff1660e01b8152600401602060405180830381865afa15801561095b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097f9190611829565b90506000600185516109919190611812565b905060005b81811015610a9b5773ffffffffffffffffffffffffffffffffffffffff8316600090815260016020526040812087519091908890849081106109da576109da6116b9565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600087836001610a2c9190611846565b81518110610a3c57610a3c6116b9565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205485606001818151610a909190611846565b905250600101610996565b5050505b509392505050565b6000610aba858585866060015186610e3c565b95945050505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008082516002811115610b4e57610b4e61185e565b1480610b6c5750600182516002811115610b6a57610b6a61185e565b145b15610b7957506001919050565b600282516002811115610b8e57610b8e61185e565b1415610b9c57506000919050565b81516040517ffe7995cf0000000000000000000000000000000000000000000000000000000081526102fa919060040161188d565b604080518082019091526000815260606020820152600185516002811115610bfb57610bfb61185e565b1415610cf8576040805180820190915273ffffffffffffffffffffffffffffffffffffffff85168152602081017fbdbeaa3100000000000000000000000000000000000000000000000000000000610c538886610f56565b86610c6042610e10611846565b604051602401610c72939291906118ce565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290529050610275565b600085516002811115610d0d57610d0d61185e565b1415610d93576040805180820190915273ffffffffffffffffffffffffffffffffffffffff8516815260a086015160208201907f38ed17390000000000000000000000000000000000000000000000000000000090610d6c8987610f90565b60208a01518890610d7f42610e10611846565b604051602401610c729594939291906118f7565b600285516002811115610da857610da861185e565b1415610e07576040805180820190915273ffffffffffffffffffffffffffffffffffffffff8516815260a086015160208201907f8803dbee0000000000000000000000000000000000000000000000000000000090610d6c8987610f90565b84516040517ffe7995cf0000000000000000000000000000000000000000000000000000000081526102fa919060040161188d565b60008560400151610e4f57506000610aba565b8360400151610e6057506001610aba565b6000610ebd8688602001516b033b2e3c9fd0803ce8000000868b60600151610e889190611940565b610e92919061197d565b60208901516b033b2e3c9fd0803ce8000000610eae898b611940565b610eb8919061197d565b611077565b9050600086516002811115610ed457610ed461185e565b1480610ef25750600186516002811115610ef057610ef061185e565b145b15610efe579050610aba565b600286516002811115610f1357610f1361185e565b1415610f2157159050610aba565b85516040517ffe7995cf0000000000000000000000000000000000000000000000000000000081526102fa919060040161188d565b60a0820151600090610f7d84610f78856b033b2e3c9fd0803ce8000000611940565b610f90565b610f87919061197d565b90505b92915050565b60008260e0015115610fa457506000610f8a565b600083516002811115610fb957610fb961185e565b1480610fd75750600183516002811115610fd557610fd561185e565b145b1561100a5760c083015161271090610fef9082611812565b610ff99084611940565b611003919061197d565b9050610f8a565b60028351600281111561101f5761101f61185e565b14156110425760c083015161103690612710611846565b610ff961271084611940565b82516040517ffe7995cf0000000000000000000000000000000000000000000000000000000081526102fa919060040161188d565b60006110b76040518060400160405280600c81526020017f414141202d20616d6f756e740000000000000000000000000000000000000000815250611168565b6110c0856111f7565b6110c9846111f7565b6110d2836111f7565b6110db826111f7565b6110ed6110e88587611812565b6111f7565b6110fa6110e88385611812565b61110386610b38565b611124576111118284611846565b61111b8587611846565b10159050610aba565b8385101580156111345750818310155b1561114d576111438284611812565b61111b8587611812565b83851061115b57600161115e565b60005b9695505050505050565b6106ce8160405160240161117c91906119b8565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f41304fac00000000000000000000000000000000000000000000000000000000179052611284565b6106ce8160405160240161120d91815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff5b1bba9000000000000000000000000000000000000000000000000000000001790525b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610100810167ffffffffffffffff811182821017156112f8576112f86112a5565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611345576113456112a5565b604052919050565b80356003811061135c57600080fd5b919050565b73ffffffffffffffffffffffffffffffffffffffff811681146106ce57600080fd5b803561135c81611361565b600067ffffffffffffffff8211156113a8576113a86112a5565b5060051b60200190565b600082601f8301126113c357600080fd5b813560206113d86113d38361138e565b6112fe565b82815260059290921b840181019181810190868411156113f757600080fd5b8286015b8481101561141b57803561140e81611361565b83529183019183016113fb565b509695505050505050565b8035801515811461135c57600080fd5b6000806040838503121561144957600080fd5b823567ffffffffffffffff8082111561146157600080fd5b90840190610100828703121561147657600080fd5b61147e6112d4565b6114878361134d565b815261149560208401611383565b60208201526114a660408401611383565b60408201526114b760608401611383565b60608201526080830135828111156114ce57600080fd5b6114da888286016113b2565b60808301525060a083013560a082015260c083013560c082015261150060e08401611426565b60e0820152935061151691505060208401611383565b90509250929050565b6000815180845260005b8181101561154557602081850181015186830182015201611529565b81811115611557576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208082528251608083830152805173ffffffffffffffffffffffffffffffffffffffff1660a08401520151604060c08301526000906115cd60e084018261151f565b905060208401516040840152604084015115156060840152606084015160808401528091505092915050565b6000806000806080858703121561160f57600080fd5b843561161a81611361565b9350602085013561162a81611361565b9250604085013561163a81611361565b9396929550929360600135925050565b60008060006060848603121561165f57600080fd5b833561166a81611361565b9250602084013561167a81611361565b9150604084013561168a81611361565b809150509250925092565b6000602082840312156116a757600080fd5b81356116b281611361565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081518084526020808501945080840160005b8381101561172e57815173ffffffffffffffffffffffffffffffffffffffff16875295820195908201906001016116fc565b509495945050505050565b82815260406020820152600061027560408301846116e8565b6000602080838503121561176557600080fd5b825167ffffffffffffffff81111561177c57600080fd5b8301601f8101851361178d57600080fd5b805161179b6113d38261138e565b81815260059190911b820183019083810190878311156117ba57600080fd5b928401925b828410156117d8578351825292840192908401906117bf565b979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015611824576118246117e3565b500390565b60006020828403121561183b57600080fd5b81516116b281611361565b60008219821115611859576118596117e3565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60208101600383106118c8577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b8381526060602082015260006118e760608301856116e8565b9050826040830152949350505050565b85815284602082015260a06040820152600061191660a08301866116e8565b73ffffffffffffffffffffffffffffffffffffffff94909416606083015250608001529392505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611978576119786117e3565b500290565b6000826119b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b602081526000610f87602083018461151f56fea2646970667358221220042a62b4d425a2205fa828887bf063a55ef88bc4c19cee1e98235c23b32ccdf764736f6c634300080a0033"; - -type UniswapV2PathFinderConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: UniswapV2PathFinderConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class UniswapV2PathFinder__factory extends ContractFactory { - constructor(...args: UniswapV2PathFinderConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): UniswapV2PathFinder { - return super.attach(address) as UniswapV2PathFinder; - } - override connect(signer: Signer): UniswapV2PathFinder__factory { - return super.connect(signer) as UniswapV2PathFinder__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): UniswapV2PathFinderInterface { - return new utils.Interface(_abi) as UniswapV2PathFinderInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): UniswapV2PathFinder { - return new Contract(address, _abi, signerOrProvider) as UniswapV2PathFinder; - } -} diff --git a/src/types/factories/contracts/pathfinder/UniswapV3PathFinder__factory.ts b/src/types/factories/contracts/pathfinder/UniswapV3PathFinder__factory.ts deleted file mode 100644 index 92f39a9a..00000000 --- a/src/types/factories/contracts/pathfinder/UniswapV3PathFinder__factory.ts +++ /dev/null @@ -1,516 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - UniswapV3PathFinder, - UniswapV3PathFinderInterface, -} from "../../../contracts/pathfinder/UniswapV3PathFinder"; - -const _abi = [ - { - inputs: [], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "QuoterNotFound", - type: "error", - }, - { - inputs: [], - name: "UnknownFeeIndex", - type: "error", - }, - { - inputs: [ - { - internalType: "enum SwapOperation", - name: "", - type: "uint8", - }, - ], - name: "UnsupportedSwapOperation", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "previousOwner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "OwnershipTransferred", - type: "event", - }, - { - inputs: [ - { - internalType: "address", - name: "router", - type: "address", - }, - { - internalType: "address", - name: "quoter", - type: "address", - }, - ], - name: "addQuoter", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "index", - type: "uint256", - }, - ], - name: "fees", - outputs: [ - { - internalType: "uint24", - name: "", - type: "uint24", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "gasUsage", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "enum SwapOperation", - name: "swapOperation", - type: "uint8", - }, - { - internalType: "address", - name: "tokenIn", - type: "address", - }, - { - internalType: "uint256", - name: "feeIndex0", - type: "uint256", - }, - { - internalType: "address", - name: "connector", - type: "address", - }, - { - internalType: "uint256", - name: "feeIndex1", - type: "uint256", - }, - { - internalType: "address", - name: "tokenOut", - type: "address", - }, - ], - name: "generatePathV3", - outputs: [ - { - internalType: "bytes", - name: "result", - type: "bytes", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - components: [ - { - internalType: "enum SwapOperation", - name: "swapOperation", - type: "uint8", - }, - { - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - internalType: "address", - name: "tokenIn", - type: "address", - }, - { - internalType: "address", - name: "tokenOut", - type: "address", - }, - { - internalType: "address[]", - name: "connectors", - type: "address[]", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "uint256", - name: "slippage", - type: "uint256", - }, - { - internalType: "bool", - name: "externalSlippage", - type: "bool", - }, - ], - internalType: "struct SwapTask", - name: "swapTask", - type: "tuple", - }, - { - internalType: "address", - name: "adapter", - type: "address", - }, - ], - name: "getBestConnectorSwap", - outputs: [ - { - components: [ - { - components: [ - { - internalType: "address", - name: "target", - type: "address", - }, - { - internalType: "bytes", - name: "callData", - type: "bytes", - }, - ], - internalType: "struct MultiCall", - name: "multiCall", - type: "tuple", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "bool", - name: "found", - type: "bool", - }, - { - internalType: "uint256", - name: "gasUsage", - type: "uint256", - }, - ], - internalType: "struct SwapQuote", - name: "quote", - type: "tuple", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - components: [ - { - internalType: "enum SwapOperation", - name: "swapOperation", - type: "uint8", - }, - { - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - internalType: "address", - name: "tokenIn", - type: "address", - }, - { - internalType: "address", - name: "tokenOut", - type: "address", - }, - { - internalType: "address[]", - name: "connectors", - type: "address[]", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "uint256", - name: "slippage", - type: "uint256", - }, - { - internalType: "bool", - name: "externalSlippage", - type: "bool", - }, - ], - internalType: "struct SwapTask", - name: "swapTask", - type: "tuple", - }, - { - internalType: "address", - name: "adapter", - type: "address", - }, - ], - name: "getBestDirectPairSwap", - outputs: [ - { - components: [ - { - components: [ - { - internalType: "address", - name: "target", - type: "address", - }, - { - internalType: "bytes", - name: "callData", - type: "bytes", - }, - ], - internalType: "struct MultiCall", - name: "multiCall", - type: "tuple", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "bool", - name: "found", - type: "bool", - }, - { - internalType: "uint256", - name: "gasUsage", - type: "uint256", - }, - ], - internalType: "struct SwapQuote", - name: "quote", - type: "tuple", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "owner", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "renounceOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "routerToQuoter", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "router", - type: "address", - }, - { - internalType: "address", - name: "token0", - type: "address", - }, - { - internalType: "address", - name: "token1", - type: "address", - }, - { - internalType: "uint256", - name: "usage", - type: "uint256", - }, - ], - name: "setGasUsage", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "transferOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x608060405234801561001057600080fd5b5061001a33610081565b73e592427a0aece92de3edee1f18e0157c0586156460005260016020527fbad1c9453febe4a6446e59e386c36af7924acc0d372d29859fea25e7a6eaac1780546001600160a01b03191673b27308f9f90d607463bb33ea1bebb41c27ce5ab61790556100d1565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b612604806100e06000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c80636f33547d11610081578063c67903ea1161005b578063c67903ea14610208578063d7aa2e3514610269578063f2fde38b1461029a57600080fd5b80636f33547d146101cf578063715018a6146101e25780638da5cb5b146101ea57600080fd5b806345330666116100b2578063453306661461017d5780634acc79ed1461019257806354fd4d50146101b957600080fd5b80631b162e56146100d95780631bf64c41146101025780632a10672614610122575b600080fd5b6100ec6100e7366004611e57565b6102ad565b6040516100f99190611f30565b60405180910390f35b61011561011036600461206e565b610427565b6040516100f99190612157565b6101586101303660046121c6565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100f9565b61019061018b3660046121ea565b610805565b005b6101a56101a036600461223b565b6108e2565b60405162ffffff90911681526020016100f9565b6101c1600281565b6040519081526020016100f9565b6101156101dd36600461206e565b61094a565b610190610f2e565b60005473ffffffffffffffffffffffffffffffffffffffff16610158565b610190610216366004612254565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001691909216179055565b6101c161027736600461228d565b600260209081526000938452604080852082529284528284209052825290205481565b6101906102a83660046121c6565b610fbb565b606060006102ba866108e2565b905060006102c7856108e2565b905060008960028111156102dd576102dd6122d8565b14806102fa575060018960028111156102f8576102f86122d8565b145b61038e576040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606086811b821660208401527fffffff000000000000000000000000000000000000000000000000000000000060e885811b821660348601528a831b8416603786015286901b16604b8401528a901b16604e82015260620160405160208183030381529060405261041a565b6040517fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b821660208401527fffffff000000000000000000000000000000000000000000000000000000000060e886811b821660348601528a831b8416603786015285901b16604b84015286901b16604e8201526062016040516020818303038152906040525b9998505050505050505050565b6104646040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b600283516002811115610479576104796122d8565b146104855760006104a7565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b8160200181815250506000600160008473ffffffffffffffffffffffffffffffffffffffff1663bd90df706040518163ffffffff1660e01b8152600401602060405180830381865afa158015610501573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105259190612307565b73ffffffffffffffffffffffffffffffffffffffff9081168252602082019290925260400160009081205490911691505b60038110156107fd5761059c6040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b6105a5866110eb565b156106c6578273ffffffffffffffffffffffffffffffffffffffff1663f7729d43876040015188606001516105d9866108e2565b60a08b01516040517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b16815273ffffffffffffffffffffffffffffffffffffffff948516600482015293909216602484015262ffffff16604483015260648201526000608482015260a4016020604051808303816000875af19250505080156106a2575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261069f91810190612324565b60015b6106ab576107de565b80156106c0576106bd87828886611184565b91505b506107de565b8273ffffffffffffffffffffffffffffffffffffffff166330d07f21876040015188606001516106f5866108e2565b60a08b01516040517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b16815273ffffffffffffffffffffffffffffffffffffffff948516600482015293909216602484015262ffffff16604483015260648201526000608482015260a4016020604051808303816000875af19250505080156107be575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526107bb91810190612324565b60015b6107c7576107de565b80156107dc576107d987828886611184565b91505b505b6107eb81878660006112a9565b156107f4578093505b50600101610556565b505092915050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461088b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff93841660009081526002602090815260408083209587168084528683528184209590971683529381528382208390559384528281209481529390925290912055565b60006003821061091e576040517f50c1fe4a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b811561093c578160011461093457611388610940565b610bb8610940565b6103e85b61ffff1692915050565b6109876040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1663bd90df706040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109fc9190612307565b73ffffffffffffffffffffffffffffffffffffffff908116825260208201929092526040016000908120546080870151519216925085516002811115610a4457610a446122d8565b1480610a625750600185516002811115610a6057610a606122d8565b145b610a8c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610a8f565b60005b602084015260005b81811015610f255760005b6003811015610f1c5760005b6003811015610f13576000610af089600001518a60400151858c608001518881518110610add57610add61233d565b6020026020010151868e606001516102ad565b9050600080610afe8b6110eb565b15610be15760a08b01516040517fcdca175300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a169163cdca175391610b5a91879160040161236c565b6020604051808303816000875af1925050508015610bb3575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610bb091810190612324565b60015b610bbc57610cbb565b8015801590610bce5750896020015181115b15610bdb57809250600191505b50610cbb565b60a08b01516040517f2f80bb1d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a1691632f80bb1d91610c3891879160040161236c565b6020604051808303816000875af1925050508015610c91575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610c8e91810190612324565b60015b610c9a57610cbb565b8015801590610cac5750896020015181105b15610cb957809250600191505b505b8015610f0557600160408a015260208901829052610cdb8b838c866112c7565b896000018190525060008a73ffffffffffffffffffffffffffffffffffffffff1663bd90df706040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d549190612307565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260026020526040812060808f0151805193945090928a908110610d9557610d9561233d565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008d6060015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008e6040015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008e608001518a81518110610eb157610eb161233d565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610efe91906123bd565b60608b0152505b505050806001019050610aae565b50600101610aa2565b50600101610a97565b50505092915050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610faf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610882565b610fb9600061159d565b565b60005473ffffffffffffffffffffffffffffffffffffffff16331461103c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610882565b73ffffffffffffffffffffffffffffffffffffffff81166110df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610882565b6110e88161159d565b50565b60008082516002811115611101576111016122d8565b148061111f575060018251600281111561111d5761111d6122d8565b145b1561112c57506001919050565b600282516002811115611141576111416122d8565b141561114f57506000919050565b81516040517ffe7995cf00000000000000000000000000000000000000000000000000000000815261088291906004016123d5565b6111c16040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b60016040820152602081018490526111db85858585611612565b816000018190525060008373ffffffffffffffffffffffffffffffffffffffff1663bd90df706040518163ffffffff1660e01b8152600401602060405180830381865afa158015611230573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112549190612307565b73ffffffffffffffffffffffffffffffffffffffff90811660009081526002602090815260408083208a82015185168452825280832060609a8b01519094168352929052205495820195909552949350505050565b60006112bc8585858660600151866119a4565b90505b949350505050565b6040805180820190915260008152606060208201526001855160028111156112f1576112f16122d8565b14156113f4576000604051806060016040528084815260200142610e1061131891906123bd565b81526020016113278888611ac7565b815250905060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff16815260200163f4f18d9060e01b8360405160240161136c9190612416565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152905291506112bf9050565b600085516002811115611409576114096122d8565b14156114ae5760006040518060a00160405280848152602001876020015173ffffffffffffffffffffffffffffffffffffffff16815260200142610e1061145091906123bd565b815260a088015160208201526040016114698888611b01565b815250905060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff16815260200163c04b8d5960e01b8360405160240161136c91906124b1565b6002855160028111156114c3576114c36122d8565b14156115685760006040518060a00160405280848152602001876020015173ffffffffffffffffffffffffffffffffffffffff16815260200142610e1061150a91906123bd565b815260a088015160208201526040016115238888611b01565b815250905060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff16815260200163f28c049860e01b8360405160240161136c91906124b1565b84516040517ffe7995cf00000000000000000000000000000000000000000000000000000000815261088291906004016123d5565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60408051808201909152600081526060602082015260018551600281111561163c5761163c6122d8565b141561175e5760006040518060c00160405280876040015173ffffffffffffffffffffffffffffffffffffffff168152602001876060015173ffffffffffffffffffffffffffffffffffffffff168152602001611698856108e2565b62ffffff1681526020016116ae42610e106123bd565b81526020016116bd8888611ac7565b8152600060209182015260408051808201825273ffffffffffffffffffffffffffffffffffffffff8881168252825185518216602482015285850151821660448201529285015162ffffff16606484015260608501516084840152608085015160a484015260a08501511660c4830152929350908201907fc7fbf4de000000000000000000000000000000000000000000000000000000009060e40161136c565b600085516002811115611773576117736122d8565b1415611881576000604051806101000160405280876040015173ffffffffffffffffffffffffffffffffffffffff168152602001876060015173ffffffffffffffffffffffffffffffffffffffff1681526020016117d0856108e2565b62ffffff16815260208881015173ffffffffffffffffffffffffffffffffffffffff169082015260400161180642610e106123bd565b815260a0880151602082015260400161181f8888611b01565b8152602001600073ffffffffffffffffffffffffffffffffffffffff16815250905060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff16815260200163414bf38960e01b8360405160240161136c91906124c4565b600285516002811115611896576118966122d8565b1415611568576000604051806101000160405280876040015173ffffffffffffffffffffffffffffffffffffffff168152602001876060015173ffffffffffffffffffffffffffffffffffffffff1681526020016118f3856108e2565b62ffffff16815260208881015173ffffffffffffffffffffffffffffffffffffffff169082015260400161192942610e106123bd565b815260a088015160208201526040016119428888611b01565b8152602001600073ffffffffffffffffffffffffffffffffffffffff16815250905060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff16815260200163db3e219860e01b8360405160240161136c91906124c4565b600085604001516119b757506000611abe565b83604001516119c857506001611abe565b6000611a258688602001516b033b2e3c9fd0803ce8000000868b606001516119f0919061253f565b6119fa919061257c565b60208901516b033b2e3c9fd0803ce8000000611a16898b61253f565b611a20919061257c565b611be8565b9050600086516002811115611a3c57611a3c6122d8565b1480611a5a5750600186516002811115611a5857611a586122d8565b145b15611a66579050611abe565b600286516002811115611a7b57611a7b6122d8565b1415611a8957159050611abe565b85516040517ffe7995cf00000000000000000000000000000000000000000000000000000000815261088291906004016123d5565b95945050505050565b60a0820151600090611aee84611ae9856b033b2e3c9fd0803ce800000061253f565b611b01565b611af8919061257c565b90505b92915050565b60008260e0015115611b1557506000611afb565b600083516002811115611b2a57611b2a6122d8565b1480611b485750600183516002811115611b4657611b466122d8565b145b15611b7b5760c083015161271090611b6090826125b7565b611b6a908461253f565b611b74919061257c565b9050611afb565b600283516002811115611b9057611b906122d8565b1415611bb35760c0830151611ba7906127106123bd565b611b6a6127108461253f565b82516040517ffe7995cf00000000000000000000000000000000000000000000000000000000815261088291906004016123d5565b6000611c286040518060400160405280600c81526020017f414141202d20616d6f756e740000000000000000000000000000000000000000815250611cd9565b611c3185611d68565b611c3a84611d68565b611c4383611d68565b611c4c82611d68565b611c5e611c5985876125b7565b611d68565b611c6b611c5983856125b7565b611c74866110eb565b611c9557611c8282846123bd565b611c8c85876123bd565b10159050611abe565b838510158015611ca55750818310155b15611cbe57611cb482846125b7565b611c8c85876125b7565b838510611ccc576001611ccf565b60005b9695505050505050565b6110e881604051602401611ced9190611f30565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f41304fac00000000000000000000000000000000000000000000000000000000179052611df5565b6110e881604051602401611d7e91815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff5b1bba9000000000000000000000000000000000000000000000000000000001790525b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b803560038110611e2557600080fd5b919050565b73ffffffffffffffffffffffffffffffffffffffff811681146110e857600080fd5b8035611e2581611e2a565b60008060008060008060c08789031215611e7057600080fd5b611e7987611e16565b95506020870135611e8981611e2a565b9450604087013593506060870135611ea081611e2a565b92506080870135915060a0870135611eb781611e2a565b809150509295509295509295565b6000815180845260005b81811015611eeb57602081850181015186830182015201611ecf565b81811115611efd576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611af86020830184611ec5565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610100810167ffffffffffffffff81118282101715611f9657611f96611f43565b60405290565b600082601f830112611fad57600080fd5b8135602067ffffffffffffffff80831115611fca57611fca611f43565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f8301168101818110848211171561200d5761200d611f43565b60405293845285810183019383810192508785111561202b57600080fd5b83870191505b8482101561205357813561204481611e2a565b83529183019190830190612031565b979650505050505050565b80358015158114611e2557600080fd5b6000806040838503121561208157600080fd5b823567ffffffffffffffff8082111561209957600080fd5b9084019061010082870312156120ae57600080fd5b6120b6611f72565b6120bf83611e16565b81526120cd60208401611e4c565b60208201526120de60408401611e4c565b60408201526120ef60608401611e4c565b606082015260808301358281111561210657600080fd5b61211288828601611f9c565b60808301525060a083013560a082015260c083013560c082015261213860e0840161205e565b60e0820152935061214e91505060208401611e4c565b90509250929050565b60208082528251608083830152805173ffffffffffffffffffffffffffffffffffffffff1660a08401520151604060c083015260009061219a60e0840182611ec5565b905060208401516040840152604084015115156060840152606084015160808401528091505092915050565b6000602082840312156121d857600080fd5b81356121e381611e2a565b9392505050565b6000806000806080858703121561220057600080fd5b843561220b81611e2a565b9350602085013561221b81611e2a565b9250604085013561222b81611e2a565b9396929550929360600135925050565b60006020828403121561224d57600080fd5b5035919050565b6000806040838503121561226757600080fd5b823561227281611e2a565b9150602083013561228281611e2a565b809150509250929050565b6000806000606084860312156122a257600080fd5b83356122ad81611e2a565b925060208401356122bd81611e2a565b915060408401356122cd81611e2a565b809150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60006020828403121561231957600080fd5b81516121e381611e2a565b60006020828403121561233657600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60408152600061237f6040830185611ec5565b90508260208301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156123d0576123d061238e565b500190565b6020810160038310612410577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6020815260008251606060208401526124326080840182611ec5565b905060208401516040840152604084015160608401528091505092915050565b6000815160a0845261246760a0850182611ec5565b905073ffffffffffffffffffffffffffffffffffffffff60208401511660208501526040830151604085015260608301516060850152608083015160808501528091505092915050565b602081526000611af86020830184612452565b6101008101611afb828473ffffffffffffffffffffffffffffffffffffffff80825116835280602083015116602084015262ffffff60408301511660408401528060608301511660608401526080820151608084015260a082015160a084015260c082015160c08401528060e08301511660e0840152505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156125775761257761238e565b500290565b6000826125b2577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000828210156125c9576125c961238e565b50039056fea2646970667358221220f48bf290d42d727585d0174d5aecb1c111d9a28593d6c27486ce6672041893ce64736f6c634300080a0033"; - -type UniswapV3PathFinderConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: UniswapV3PathFinderConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class UniswapV3PathFinder__factory extends ContractFactory { - constructor(...args: UniswapV3PathFinderConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): UniswapV3PathFinder { - return super.attach(address) as UniswapV3PathFinder; - } - override connect(signer: Signer): UniswapV3PathFinder__factory { - return super.connect(signer) as UniswapV3PathFinder__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): UniswapV3PathFinderInterface { - return new utils.Interface(_abi) as UniswapV3PathFinderInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): UniswapV3PathFinder { - return new Contract(address, _abi, signerOrProvider) as UniswapV3PathFinder; - } -} diff --git a/src/types/factories/contracts/pathfinder/YearnPathFinder__factory.ts b/src/types/factories/contracts/pathfinder/YearnPathFinder__factory.ts deleted file mode 100644 index 23bdd46b..00000000 --- a/src/types/factories/contracts/pathfinder/YearnPathFinder__factory.ts +++ /dev/null @@ -1,181 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - YearnPathFinder, - YearnPathFinderInterface, -} from "../../../contracts/pathfinder/YearnPathFinder"; - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "UnknownToken", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "yVault", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "estimateWithdraw", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "adapters", - type: "address[]", - }, - ], - name: "filterYearnAdapters", - outputs: [ - { - internalType: "address[]", - name: "result", - type: "address[]", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - components: [ - { - internalType: "address", - name: "token", - type: "address", - }, - { - internalType: "uint256", - name: "balance", - type: "uint256", - }, - ], - internalType: "struct Balance[]", - name: "b", - type: "tuple[]", - }, - { - internalType: "address[]", - name: "adapters", - type: "address[]", - }, - ], - name: "withdrawAll", - outputs: [ - { - components: [ - { - internalType: "address", - name: "token", - type: "address", - }, - { - internalType: "uint256", - name: "balance", - type: "uint256", - }, - ], - internalType: "struct Balance[]", - name: "", - type: "tuple[]", - }, - { - components: [ - { - internalType: "address", - name: "target", - type: "address", - }, - { - internalType: "bytes", - name: "callData", - type: "bytes", - }, - ], - internalType: "struct MultiCall[]", - name: "", - type: "tuple[]", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x608060405234801561001057600080fd5b50610fb7806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c8063174b552714610046578063242414fd1461006f578063a5b8103014610090575b600080fd5b6100596100543660046109da565b6100b1565b6040516100669190610a0f565b60405180910390f35b61008261007d366004610a69565b610253565b604051610066929190610b4f565b6100a361009e366004610c88565b610516565b604051908152602001610066565b80516060908067ffffffffffffffff8111156100cf576100cf610876565b6040519080825280602002602001820160405280156100f8578160200160208202803683370190505b5091506000805b8281101561023157600085828151811061011b5761011b610cb4565b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156101605750610229565b60048173ffffffffffffffffffffffffffffffffffffffff1663ce30bbdb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d19190610d12565b60108111156101e2576101e2610ce3565b141561022757808584815181106101fb576101fb610cb4565b73ffffffffffffffffffffffffffffffffffffffff909216602092830291909101909101526001909201915b505b6001016100ff565b508181101561024c57610244838261061e565b949350505050565b5050919050565b6060806000610261846100b1565b805190915060008167ffffffffffffffff81111561028157610281610876565b6040519080825280602002602001820160405280156102c757816020015b60408051808201909152600081526060602082015281526020019060019003908161029f5790505b5090506000805b838110156104fb5760008582815181106102ea576102ea610cb4565b6020026020010151905060008173ffffffffffffffffffffffffffffffffffffffff1663bd90df706040518163ffffffff1660e01b8152600401602060405180830381865afa158015610341573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103659190610d3a565b905060006103738c836106d0565b905060008c828151811061038957610389610cb4565b602002602001015160200151905060018111156104ec5760018d83815181106103b4576103b4610cb4565b602002602001015160200181815250506104488373ffffffffffffffffffffffffffffffffffffffff1663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610412573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104369190610d3a565b6104408584610516565b8f919061078c565b60408051808201825273ffffffffffffffffffffffffffffffffffffffff8616815281516004815260248101909252602082810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f3ccfd60b0000000000000000000000000000000000000000000000000000000017905281019190915287518890889081106104da576104da610cb4565b60200260200101819052508560010195505b846001019450505050506102ce565b508761050783836107c8565b95509550505050509250929050565b60008273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610563573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105879190610d57565b61059290600a610ec9565b8373ffffffffffffffffffffffffffffffffffffffff166399530b066040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106019190610ed8565b61060b9084610ef1565b6106159190610f2e565b90505b92915050565b60608167ffffffffffffffff81111561063957610639610876565b604051908082528060200260200182016040528015610662578160200160208202803683370190505b50905060005b828110156106c95783818151811061068257610682610cb4565b602002602001015182828151811061069c5761069c610cb4565b73ffffffffffffffffffffffffffffffffffffffff90921660209283029190910190910152600101610668565b5092915050565b6000805b835181101561073d578273ffffffffffffffffffffffffffffffffffffffff1684828151811061070657610706610cb4565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff161415610735579050610618565b6001016106d4565b506040517f81a3b1be00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316600482015260240160405180910390fd5b808361079885856106d0565b815181106107a8576107a8610cb4565b60200260200101516020018181516107c09190610f69565b905250505050565b60608167ffffffffffffffff8111156107e3576107e3610876565b60405190808252806020026020018201604052801561082957816020015b6040805180820190915260008152606060208201528152602001906001900390816108015790505b50905060005b828110156106c95783818151811061084957610849610cb4565b602002602001015182828151811061086357610863610cb4565b602090810291909101015260010161082f565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156108c8576108c8610876565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561091557610915610876565b604052919050565b600067ffffffffffffffff82111561093757610937610876565b5060051b60200190565b73ffffffffffffffffffffffffffffffffffffffff8116811461096357600080fd5b50565b600082601f83011261097757600080fd5b8135602061098c6109878361091d565b6108ce565b82815260059290921b840181019181810190868411156109ab57600080fd5b8286015b848110156109cf5780356109c281610941565b83529183019183016109af565b509695505050505050565b6000602082840312156109ec57600080fd5b813567ffffffffffffffff811115610a0357600080fd5b61024484828501610966565b6020808252825182820181905260009190848201906040850190845b81811015610a5d57835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101610a2b565b50909695505050505050565b6000806040808486031215610a7d57600080fd5b833567ffffffffffffffff80821115610a9557600080fd5b818601915086601f830112610aa957600080fd5b81356020610ab96109878361091d565b82815260069290921b8401810191818101908a841115610ad857600080fd5b948201945b83861015610b215786868c031215610af55760008081fd5b610afd6108a5565b8635610b0881610941565b8152868401358482015282529486019490820190610add565b97505087013593505080831115610b3757600080fd5b5050610b4585828601610966565b9150509250929050565b6040808252835182820181905260009190606090818501906020808901865b83811015610ba9578151805173ffffffffffffffffffffffffffffffffffffffff168652830151838601529386019390820190600101610b6e565b50508683038188015287518084528184019250600581901b8401820189830160005b83811015610c77577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe080888503018752825173ffffffffffffffffffffffffffffffffffffffff81511685528681015190508a878601528051808c87015260005b81811015610c47578281018901518782018d01528801610c2c565b81811115610c585760008c83890101525b5097870197601f01909116939093018801925090840190600101610bcb565b50909b9a5050505050505050505050565b60008060408385031215610c9b57600080fd5b8235610ca681610941565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060208284031215610d2457600080fd5b815160118110610d3357600080fd5b9392505050565b600060208284031215610d4c57600080fd5b8151610d3381610941565b600060208284031215610d6957600080fd5b815160ff81168114610d3357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b80851115610e0257817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115610de857610de8610d7a565b80851615610df557918102915b93841c9390800290610dae565b509250929050565b600082610e1957506001610618565b81610e2657506000610618565b8160018114610e3c5760028114610e4657610e62565b6001915050610618565b60ff841115610e5757610e57610d7a565b50506001821b610618565b5060208310610133831016604e8410600b8410161715610e85575081810a610618565b610e8f8383610da9565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115610ec157610ec1610d7a565b029392505050565b600061061560ff841683610e0a565b600060208284031215610eea57600080fd5b5051919050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610f2957610f29610d7a565b500290565b600082610f64577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60008219821115610f7c57610f7c610d7a565b50019056fea264697066735822122080046f4a9e6a3f536420bbcf2610f92fb00a3550b3f427b7571f337837aa625664736f6c634300080a0033"; - -type YearnPathFinderConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: YearnPathFinderConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class YearnPathFinder__factory extends ContractFactory { - constructor(...args: YearnPathFinderConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): YearnPathFinder { - return super.attach(address) as YearnPathFinder; - } - override connect(signer: Signer): YearnPathFinder__factory { - return super.connect(signer) as YearnPathFinder__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): YearnPathFinderInterface { - return new utils.Interface(_abi) as YearnPathFinderInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): YearnPathFinder { - return new Contract(address, _abi, signerOrProvider) as YearnPathFinder; - } -} diff --git a/src/types/factories/contracts/pathfinder/data/Balances.sol/BalanceOps__factory.ts b/src/types/factories/contracts/pathfinder/data/Balances.sol/BalanceOps__factory.ts deleted file mode 100644 index c7c7d2d5..00000000 --- a/src/types/factories/contracts/pathfinder/data/Balances.sol/BalanceOps__factory.ts +++ /dev/null @@ -1,73 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - BalanceOps, - BalanceOpsInterface, -} from "../../../../../contracts/pathfinder/data/Balances.sol/BalanceOps"; - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "UnknownToken", - type: "error", - }, -]; - -const _bytecode = - "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212201608ac7086cfacea82ef965c8cbbdd2812c1890764216102141f544a710aa4e364736f6c634300080a0033"; - -type BalanceOpsConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: BalanceOpsConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class BalanceOps__factory extends ContractFactory { - constructor(...args: BalanceOpsConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): BalanceOps { - return super.attach(address) as BalanceOps; - } - override connect(signer: Signer): BalanceOps__factory { - return super.connect(signer) as BalanceOps__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): BalanceOpsInterface { - return new utils.Interface(_abi) as BalanceOpsInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): BalanceOps { - return new Contract(address, _abi, signerOrProvider) as BalanceOps; - } -} diff --git a/src/types/factories/contracts/pathfinder/data/Balances.sol/index.ts b/src/types/factories/contracts/pathfinder/data/Balances.sol/index.ts deleted file mode 100644 index d290106f..00000000 --- a/src/types/factories/contracts/pathfinder/data/Balances.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { BalanceOps__factory } from "./BalanceOps__factory"; diff --git a/src/types/factories/contracts/pathfinder/data/index.ts b/src/types/factories/contracts/pathfinder/data/index.ts deleted file mode 100644 index 76ab55ef..00000000 --- a/src/types/factories/contracts/pathfinder/data/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export * as balancesSol from "./Balances.sol"; diff --git a/src/types/factories/contracts/pathfinder/index.ts b/src/types/factories/contracts/pathfinder/index.ts index 3371613c..a7856a28 100644 --- a/src/types/factories/contracts/pathfinder/index.ts +++ b/src/types/factories/contracts/pathfinder/index.ts @@ -1,13 +1,5 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ -export * as data from "./data"; -export { ConvexPathFinder__factory } from "./ConvexPathFinder__factory"; -export { CurveLPPathFinder__factory } from "./CurveLPPathFinder__factory"; -export { CurvePathFinder__factory } from "./CurvePathFinder__factory"; +export * as interfaces from "./interfaces"; export { ISwapper__factory } from "./ISwapper__factory"; -export { NormalTokenPathFinder__factory } from "./NormalTokenPathFinder__factory"; -export { SwapPathFinder__factory } from "./SwapPathFinder__factory"; -export { UniswapV2PathFinder__factory } from "./UniswapV2PathFinder__factory"; -export { UniswapV3PathFinder__factory } from "./UniswapV3PathFinder__factory"; -export { YearnPathFinder__factory } from "./YearnPathFinder__factory"; diff --git a/src/types/factories/contracts/pathfinder/interfaces/ISwapPathFinder__factory.ts b/src/types/factories/contracts/pathfinder/interfaces/ISwapPathFinder__factory.ts new file mode 100644 index 00000000..c5b63178 --- /dev/null +++ b/src/types/factories/contracts/pathfinder/interfaces/ISwapPathFinder__factory.ts @@ -0,0 +1,350 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ + +import { Contract, Signer, utils } from "ethers"; +import type { Provider } from "@ethersproject/providers"; +import type { + ISwapPathFinder, + ISwapPathFinderInterface, +} from "../../../../contracts/pathfinder/interfaces/ISwapPathFinder"; + +const _abi = [ + { + inputs: [ + { + components: [ + { + internalType: "enum SwapOperation", + name: "swapOperation", + type: "uint8", + }, + { + internalType: "address", + name: "creditAccount", + type: "address", + }, + { + internalType: "address", + name: "tokenIn", + type: "address", + }, + { + internalType: "address", + name: "tokenOut", + type: "address", + }, + { + internalType: "address[]", + name: "connectors", + type: "address[]", + }, + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + { + internalType: "uint256", + name: "slippage", + type: "uint256", + }, + { + internalType: "bool", + name: "externalSlippage", + type: "bool", + }, + ], + internalType: "struct SwapTask", + name: "swapTask", + type: "tuple", + }, + { + internalType: "address[]", + name: "adapters", + type: "address[]", + }, + ], + name: "findAllSwaps", + outputs: [ + { + components: [ + { + components: [ + { + internalType: "address", + name: "target", + type: "address", + }, + { + internalType: "bytes", + name: "callData", + type: "bytes", + }, + ], + internalType: "struct MultiCall", + name: "multiCall", + type: "tuple", + }, + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + { + internalType: "bool", + name: "found", + type: "bool", + }, + { + internalType: "uint256", + name: "gasUsage", + type: "uint256", + }, + ], + internalType: "struct SwapQuote[]", + name: "results", + type: "tuple[]", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "enum SwapOperation", + name: "swapOperation", + type: "uint8", + }, + { + internalType: "address", + name: "creditAccount", + type: "address", + }, + { + internalType: "address", + name: "tokenIn", + type: "address", + }, + { + internalType: "address", + name: "tokenOut", + type: "address", + }, + { + internalType: "address[]", + name: "connectors", + type: "address[]", + }, + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + { + internalType: "uint256", + name: "slippage", + type: "uint256", + }, + { + internalType: "bool", + name: "externalSlippage", + type: "bool", + }, + ], + internalType: "struct SwapTask", + name: "swapTask", + type: "tuple", + }, + { + internalType: "address[]", + name: "adapters", + type: "address[]", + }, + ], + name: "findBestSwap", + outputs: [ + { + components: [ + { + components: [ + { + internalType: "address", + name: "target", + type: "address", + }, + { + internalType: "bytes", + name: "callData", + type: "bytes", + }, + ], + internalType: "struct MultiCall", + name: "multiCall", + type: "tuple", + }, + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + { + internalType: "bool", + name: "found", + type: "bool", + }, + { + internalType: "uint256", + name: "gasUsage", + type: "uint256", + }, + ], + internalType: "struct SwapQuote", + name: "bestQuote", + type: "tuple", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "enum SwapOperation", + name: "swapOperation", + type: "uint8", + }, + { + internalType: "address", + name: "creditAccount", + type: "address", + }, + { + internalType: "address", + name: "tokenIn", + type: "address", + }, + { + internalType: "address", + name: "tokenOut", + type: "address", + }, + { + internalType: "address[]", + name: "connectors", + type: "address[]", + }, + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + { + internalType: "uint256", + name: "slippage", + type: "uint256", + }, + { + internalType: "bool", + name: "externalSlippage", + type: "bool", + }, + ], + internalType: "struct SwapTask", + name: "swapTask", + type: "tuple", + }, + { + internalType: "address[]", + name: "adapters", + type: "address[]", + }, + { + internalType: "uint256", + name: "gasPriceInTokenOut", + type: "uint256", + }, + ], + name: "getBestDirectPairSwap", + outputs: [ + { + components: [ + { + components: [ + { + internalType: "address", + name: "target", + type: "address", + }, + { + internalType: "bytes", + name: "callData", + type: "bytes", + }, + ], + internalType: "struct MultiCall", + name: "multiCall", + type: "tuple", + }, + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + { + internalType: "bool", + name: "found", + type: "bool", + }, + { + internalType: "uint256", + name: "gasUsage", + type: "uint256", + }, + ], + internalType: "struct SwapQuote", + name: "quote", + type: "tuple", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "adapter", + type: "address", + }, + ], + name: "getPathFinder", + outputs: [ + { + internalType: "address", + name: "pathFinder", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, +]; + +export class ISwapPathFinder__factory { + static readonly abi = _abi; + static createInterface(): ISwapPathFinderInterface { + return new utils.Interface(_abi) as ISwapPathFinderInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): ISwapPathFinder { + return new Contract(address, _abi, signerOrProvider) as ISwapPathFinder; + } +} diff --git a/src/types/factories/contracts/test/oracles/LPPriceFeed.t.sol/index.ts b/src/types/factories/contracts/pathfinder/interfaces/index.ts similarity index 60% rename from src/types/factories/contracts/test/oracles/LPPriceFeed.t.sol/index.ts rename to src/types/factories/contracts/pathfinder/interfaces/index.ts index cc322942..0be02d86 100644 --- a/src/types/factories/contracts/test/oracles/LPPriceFeed.t.sol/index.ts +++ b/src/types/factories/contracts/pathfinder/interfaces/index.ts @@ -1,4 +1,4 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ -export { LPPriceFeedTest__factory } from "./LPPriceFeedTest__factory"; +export { ISwapPathFinder__factory } from "./ISwapPathFinder__factory"; diff --git a/src/types/factories/contracts/pool/LinearInterestRateModel__factory.ts b/src/types/factories/contracts/pool/LinearInterestRateModel__factory.ts deleted file mode 100644 index f16567db..00000000 --- a/src/types/factories/contracts/pool/LinearInterestRateModel__factory.ts +++ /dev/null @@ -1,249 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { - Signer, - utils, - Contract, - ContractFactory, - BigNumberish, - Overrides, -} from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - LinearInterestRateModel, - LinearInterestRateModelInterface, -} from "../../../contracts/pool/LinearInterestRateModel"; - -const _abi = [ - { - inputs: [ - { - internalType: "uint256", - name: "U_optimal", - type: "uint256", - }, - { - internalType: "uint256", - name: "R_base", - type: "uint256", - }, - { - internalType: "uint256", - name: "R_slope1", - type: "uint256", - }, - { - internalType: "uint256", - name: "R_slope2", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "_R_base_RAY", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "_R_slope1_RAY", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "_R_slope2_RAY", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "_U_Optimal_WAD", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "_U_Optimal_inverted_WAD", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "expectedLiquidity", - type: "uint256", - }, - { - internalType: "uint256", - name: "availableLiquidity", - type: "uint256", - }, - ], - name: "calcBorrowRate", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "getModelParameters", - outputs: [ - { - internalType: "uint256", - name: "U_optimal", - type: "uint256", - }, - { - internalType: "uint256", - name: "R_base", - type: "uint256", - }, - { - internalType: "uint256", - name: "R_slope1", - type: "uint256", - }, - { - internalType: "uint256", - name: "R_slope2", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x6101206040523480156200001257600080fd5b5060405162000b1238038062000b1283398101604081905262000035916200021f565b604080518082019091526002815261049560f41b602082015261271085106200007c5760405162461bcd60e51b815260040162000073919062000256565b60405180910390fd5b50604080518082019091526002815261049560f41b6020820152612710841115620000bc5760405162461bcd60e51b815260040162000073919062000256565b50604080518082019091526002815261049560f41b6020820152612710831115620000fc5760405162461bcd60e51b815260040162000073919062000256565b5060006200012185670de0b6b3a7640000620001c160201b6200043c1790919060201c565b608081905290506200013c81670de0b6b3a7640000620002c4565b60a052620001636b033b2e3c9fd0803ce800000085620001c1602090811b6200043c17901c565b60c0526200018a6b033b2e3c9fd0803ce800000084620001c1602090811b6200043c17901c565b60e052620001b16b033b2e3c9fd0803ce800000083620001c1602090811b6200043c17901c565b61010052506200036c9350505050565b6000821580620001cf575081155b15620001de5750600062000219565b612710620001ee600282620002f4565b61ffff16620001fe848662000318565b6200020a91906200033a565b62000216919062000355565b90505b92915050565b600080600080608085870312156200023657600080fd5b505082516020840151604085015160609095015191969095509092509050565b600060208083528351808285015260005b81811015620002855785810183015185820160400152820162000267565b8181111562000298576000604083870101525b50601f01601f1916929092016040019392505050565b634e487b7160e01b600052601160045260246000fd5b600082821015620002d957620002d9620002ae565b500390565b634e487b7160e01b600052601260045260246000fd5b600061ffff808416806200030c576200030c620002de565b92169190910492915050565b6000816000190483118215151615620003355762000335620002ae565b500290565b60008219821115620003505762000350620002ae565b500190565b600082620003675762000367620002de565b500490565b60805160a05160c05160e0516101005161070162000411600039600081816101840152818161030b015261041701526000818160e70152818161025a0152818161033e01526103f401526000818161010e015281816101bc0152818161028e0152818161035f01526103d101526000818161015d01526102bc01526000818160b80152818161020d01528181610235015281816102e001526103a101526107016000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80639cd3fdb51161005b5780639cd3fdb514610109578063c8284e6d14610130578063f81d438114610158578063fc4b2b781461017f57600080fd5b806342568d441461008d57806350ced104146100b357806354fd4d50146100da5780639aec06ea146100e2575b600080fd5b6100a061009b366004610537565b6101a6565b6040519081526020015b60405180910390f35b6100a07f000000000000000000000000000000000000000000000000000000000000000081565b6100a0600181565b6100a07f000000000000000000000000000000000000000000000000000000000000000081565b6100a07f000000000000000000000000000000000000000000000000000000000000000081565b610138610397565b6040805194855260208501939093529183015260608201526080016100aa565b6100a07f000000000000000000000000000000000000000000000000000000000000000081565b6100a07f000000000000000000000000000000000000000000000000000000000000000081565b60008215806101b457508183105b156101e057507f0000000000000000000000000000000000000000000000000000000000000000610391565b6000836101ed8482610588565b6101ff90670de0b6b3a764000061059f565b610209919061060b565b90507f00000000000000000000000000000000000000000000000000000000000000008110156102ba577f000000000000000000000000000000000000000000000000000000000000000061027e827f000000000000000000000000000000000000000000000000000000000000000061059f565b610288919061060b565b6102b2907f000000000000000000000000000000000000000000000000000000000000000061061f565b915050610391565b7f00000000000000000000000000000000000000000000000000000000000000006103057f000000000000000000000000000000000000000000000000000000000000000083610588565b61032f907f000000000000000000000000000000000000000000000000000000000000000061059f565b610339919061060b565b6103837f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000061061f565b61038d919061061f565b9150505b92915050565b60008080806103ce7f0000000000000000000000000000000000000000000000000000000000000000670de0b6b3a764000061048d565b947f000000000000000000000000000000000000000000000000000000000000000094507f000000000000000000000000000000000000000000000000000000000000000093507f000000000000000000000000000000000000000000000000000000000000000092509050565b6000821580610449575081155b1561045657506000610391565b612710610464600282610637565b61ffff16610472848661059f565b61047c919061061f565b610486919061060b565b9392505050565b60408051808201909152600281527f4d33000000000000000000000000000000000000000000000000000000000000602082015260009082610505576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104fc9190610658565b60405180910390fd5b50600061051360028461060b565b905082816105236127108761059f565b61052d919061061f565b61038d919061060b565b6000806040838503121561054a57600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561059a5761059a610559565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156105d7576105d7610559565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261061a5761061a6105dc565b500490565b6000821982111561063257610632610559565b500190565b600061ffff8084168061064c5761064c6105dc565b92169190910492915050565b600060208083528351808285015260005b8181101561068557858101830151858201604001528201610669565b81811115610697576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea26469706673582212205428f2a5431c3c1928793ca5c2c8825fc467250326c6d5ae84382a87d1e80b2164736f6c634300080a0033"; - -type LinearInterestRateModelConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: LinearInterestRateModelConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class LinearInterestRateModel__factory extends ContractFactory { - constructor(...args: LinearInterestRateModelConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - U_optimal: BigNumberish, - R_base: BigNumberish, - R_slope1: BigNumberish, - R_slope2: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - U_optimal, - R_base, - R_slope1, - R_slope2, - overrides || {} - ) as Promise; - } - override getDeployTransaction( - U_optimal: BigNumberish, - R_base: BigNumberish, - R_slope1: BigNumberish, - R_slope2: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction( - U_optimal, - R_base, - R_slope1, - R_slope2, - overrides || {} - ); - } - override attach(address: string): LinearInterestRateModel { - return super.attach(address) as LinearInterestRateModel; - } - override connect(signer: Signer): LinearInterestRateModel__factory { - return super.connect(signer) as LinearInterestRateModel__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): LinearInterestRateModelInterface { - return new utils.Interface(_abi) as LinearInterestRateModelInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): LinearInterestRateModel { - return new Contract( - address, - _abi, - signerOrProvider - ) as LinearInterestRateModel; - } -} diff --git a/src/types/factories/contracts/pool/PoolService__factory.ts b/src/types/factories/contracts/pool/PoolService__factory.ts deleted file mode 100644 index acc70e06..00000000 --- a/src/types/factories/contracts/pool/PoolService__factory.ts +++ /dev/null @@ -1,917 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { - Signer, - utils, - Contract, - ContractFactory, - BigNumberish, - Overrides, -} from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - PoolService, - PoolServiceInterface, -} from "../../../contracts/pool/PoolService"; - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "_addressProvider", - type: "address", - }, - { - internalType: "address", - name: "_underlyingToken", - type: "address", - }, - { - internalType: "address", - name: "_dieselAddress", - type: "address", - }, - { - internalType: "address", - name: "_interestRateModelAddress", - type: "address", - }, - { - internalType: "uint256", - name: "_expectedLiquidityLimit", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "CallerNotConfiguratorException", - type: "error", - }, - { - inputs: [], - name: "CallerNotPausableAdminException", - type: "error", - }, - { - inputs: [], - name: "CallerNotUnPausableAdminException", - type: "error", - }, - { - inputs: [], - name: "ZeroAddressException", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "sender", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "onBehalfOf", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "referralCode", - type: "uint256", - }, - ], - name: "AddLiquidity", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "creditManager", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "Borrow", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "creditManager", - type: "address", - }, - ], - name: "BorrowForbidden", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "creditManager", - type: "address", - }, - ], - name: "NewCreditManagerConnected", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "newLimit", - type: "uint256", - }, - ], - name: "NewExpectedLiquidityLimit", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newInterestRateModel", - type: "address", - }, - ], - name: "NewInterestRateModel", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "fee", - type: "uint256", - }, - ], - name: "NewWithdrawFee", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "Paused", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "sender", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "RemoveLiquidity", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "creditManager", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "borrowedAmount", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "profit", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "loss", - type: "uint256", - }, - ], - name: "Repay", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "creditManager", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "loss", - type: "uint256", - }, - ], - name: "UncoveredLoss", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "Unpaused", - type: "event", - }, - { - inputs: [], - name: "_acl", - outputs: [ - { - internalType: "contract ACL", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "_cumulativeIndex_RAY", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "_expectedLiquidityLU", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "_timestampLU", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "address", - name: "onBehalfOf", - type: "address", - }, - { - internalType: "uint256", - name: "referralCode", - type: "uint256", - }, - ], - name: "addLiquidity", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "addressProvider", - outputs: [ - { - internalType: "contract AddressProvider", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "availableLiquidity", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "borrowAPY_RAY", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "calcLinearCumulative_RAY", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "cumulativeIndex_RAY", - type: "uint256", - }, - { - internalType: "uint256", - name: "currentBorrowRate_RAY", - type: "uint256", - }, - { - internalType: "uint256", - name: "timeDifference", - type: "uint256", - }, - ], - name: "calcLinearIndex_RAY", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_creditManager", - type: "address", - }, - ], - name: "connectCreditManager", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "creditManagers", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "creditManagersCanBorrow", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "creditManagersCanRepay", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditManagersCount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "dieselToken", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "expectedLiquidity", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "expectedLiquidityLimit", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_creditManager", - type: "address", - }, - ], - name: "forbidCreditManagerToBorrow", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "fromDiesel", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "getDieselRate_RAY", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "interestRateModel", - outputs: [ - { - internalType: "contract IInterestRateModel", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "borrowedAmount", - type: "uint256", - }, - { - internalType: "address", - name: "creditAccount", - type: "address", - }, - ], - name: "lendCreditAccount", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "pause", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "paused", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "address", - name: "to", - type: "address", - }, - ], - name: "removeLiquidity", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "borrowedAmount", - type: "uint256", - }, - { - internalType: "uint256", - name: "profit", - type: "uint256", - }, - { - internalType: "uint256", - name: "loss", - type: "uint256", - }, - ], - name: "repayCreditAccount", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "newLimit", - type: "uint256", - }, - ], - name: "setExpectedLiquidityLimit", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "fee", - type: "uint256", - }, - ], - name: "setWithdrawFee", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "toDiesel", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "totalBorrowed", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "treasuryAddress", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "underlyingToken", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "unpause", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_interestRateModel", - type: "address", - }, - ], - name: "updateInterestRateModel", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "withdrawFee", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x60a06040523480156200001157600080fd5b50604051620032f1380380620032f183398101604081905262000034916200061d565b6000805460ff19169055846001600160a01b0381166200006757604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cc919062000684565b6001600160a01b039081166080526001805586161580159150620000f857506001600160a01b03841615155b80156200010d57506001600160a01b03831615155b80156200012257506001600160a01b03821615155b6040518060400160405280600281526020016105a360f41b81525090620001675760405162461bcd60e51b81526004016200015e9190620006a2565b60405180910390fd5b50600580546001600160a01b038088166001600160a01b03199283168117909355600780548883169084161790556008805491871691909216179055604080516326c74fc360e01b815290516326c74fc3916004808201926020929091908290030181865afa158015620001df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000205919062000684565b600c80546001600160a01b0319166001600160a01b03929092169190911790556b033b2e3c9fd0803ce8000000600d5562000240826200024e565b60035550620007a492505050565b60408051808201909152600281526105a360f41b60208201526001600160a01b038216620002915760405162461bcd60e51b81526004016200015e9190620006a2565b50600680546001600160a01b0319166001600160a01b038316179055620002b96000620002f0565b6040516001600160a01b038216907f0ec6cb7631d36954a05ffd646135bfd9995c71e7fa36d26abb1ad9f24a040ea190600090a250565b80620002fb620003ab565b62000307919062000710565b6002556200031462000424565b600d556006546002546001600160a01b03909116906342568d44906200033962000456565b6040516001600160e01b031960e085901b16815260048101929092526024820152604401602060405180830381865afa1580156200037b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003a191906200072a565b600e555042600f55565b600080600f5442620003be919062000710565b905060006301e133806b033b2e3c9fd0803ce800000083600e54600454620003e7919062000744565b620003f3919062000744565b620003ff919062000766565b6200040b919062000766565b9050806002546200041d919062000789565b9250505090565b600080600f544262000437919062000710565b905062000450600d54600e5483620004cb60201b60201c565b91505090565b6007546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015620004a0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004c691906200072a565b905090565b6000806301e13380620004df848662000744565b620004eb919062000766565b62000503906b033b2e3c9fd0803ce800000062000789565b90506200051f81866200052860201b62001ef01790919060201c565b95945050505050565b600082158062000536575081155b156200054557506000620005fa565b816200055f60026b033b2e3c9fd0803ce800000062000766565b6200056d9060001962000710565b62000579919062000766565b831115604051806040016040528060028152602001614d3160f01b81525090620005b85760405162461bcd60e51b81526004016200015e9190620006a2565b506b033b2e3c9fd0803ce8000000620005d360028262000766565b620005df848662000744565b620005eb919062000789565b620005f7919062000766565b90505b92915050565b80516001600160a01b03811681146200061857600080fd5b919050565b600080600080600060a086880312156200063657600080fd5b620006418662000600565b9450620006516020870162000600565b9350620006616040870162000600565b9250620006716060870162000600565b9150608086015190509295509295909350565b6000602082840312156200069757600080fd5b620005f78262000600565b600060208083528351808285015260005b81811015620006d157858101830151858201604001528201620006b3565b81811115620006e4576000604083870101525b50601f01601f1916929092016040019392505050565b634e487b7160e01b600052601160045260246000fd5b600082821015620007255762000725620006fa565b500390565b6000602082840312156200073d57600080fd5b5051919050565b6000816000190483118215151615620007615762000761620006fa565b500290565b6000826200078457634e487b7160e01b600052601260045260246000fd5b500490565b600082198211156200079f576200079f620006fa565b500190565b608051612b00620007f1600039600081816104700152818161087301528181610a7301528181610bb201528181610e1201528181611365015281816114f60152611b410152612b006000f3fe608060405234801561001057600080fd5b50600436106102775760003560e01c80635c975abb11610160578063bb04b193116100d8578063dbcb313b1161008c578063ef8d960311610071578063ef8d960314610523578063f3fdb15a1461052c578063fe14112d1461054c57600080fd5b8063dbcb313b14610511578063e941fa781461051a57600080fd5b8063c5f956af116100bd578063c5f956af146104cb578063ca9505e4146104eb578063cf33d955146104fe57600080fd5b8063bb04b193146104a5578063bf28068b146104b857600080fd5b80638456cb591161012f578063a4e8273e11610114578063a4e8273e14610463578063a50cf2c81461046b578063b6ac642a1461049257600080fd5b80638456cb59146104485780639aa5d4621461045057600080fd5b80635c975abb14610424578063609ae3171461042f5780637437535914610438578063788c6bfe1461044057600080fd5b806336dda7d5116101f35780634c19386c116101c25780635427c938116101a75780635427c938146103f657806354fd4d50146104095780635664cacf1461041157600080fd5b80634c19386c146103da5780634d778ad1146103e357600080fd5b806336dda7d5146103865780633e163df0146103a65780633f4ba83a146103c957806345d31f9d146103d157600080fd5b80631e16e4fc1161024a5780632954018c1161022f5780632954018c146103205780632e97ca211461034057806331d8bc271461037357600080fd5b80631e16e4fc146102c85780632495a5991461030057600080fd5b8063030dbb041461027c57806305fe138b14610298578063078c4781146102ab5780630fce70fb146102c0575b600080fd5b61028560025481565b6040519081526020015b60405180910390f35b6102856102a6366004612810565b610554565b6102be6102b9366004612840565b610845565b005b61028561099d565b6102db6102d636600461285d565b6109c5565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161028f565b6007546102db9073ffffffffffffffffffffffffffffffffffffffff1681565b6005546102db9073ffffffffffffffffffffffffffffffffffffffff1681565b61036361034e366004612840565b60096020526000908152604090205460ff1681565b604051901515815260200161028f565b610285610381366004612876565b6109fc565b6008546102db9073ffffffffffffffffffffffffffffffffffffffff1681565b6103636103b4366004612840565b600a6020526000908152604090205460ff1681565b6102be610a45565b610285600e5481565b61028560045481565b6102856103f136600461285d565b610b33565b61028561040436600461285d565b610b63565b610285600181565b6102be61041f366004612840565b610b84565b60005460ff16610363565b610285600f5481565b610285610c74565b610285610d0c565b6102be610de4565b6102be61045e3660046128a2565b610ed0565b600b54610285565b6102db7f000000000000000000000000000000000000000000000000000000000000000081565b6102be6104a036600461285d565b611337565b6102be6104b336600461285d565b6114c8565b6102be6104c6366004612810565b6115e1565b600c546102db9073ffffffffffffffffffffffffffffffffffffffff1681565b6102be6104f9366004612876565b611761565b6102be61050c366004612840565b611b13565b610285600d5481565b61028560105481565b61028560035481565b6006546102db9073ffffffffffffffffffffffffffffffffffffffff1681565b610285611e83565b6000805460ff16156105c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064015b60405180910390fd5b60026001541415610634576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016105be565b60026001819055604080518082019091529081527f5a30000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff83166106bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105be9190612906565b5060006106c884610b63565b905060006106e160105483611ffe90919063ffffffff16565b905060006106ef8284612986565b6007549091506107169073ffffffffffffffffffffffffffffffffffffffff168683612034565b811561074657600c546007546107469173ffffffffffffffffffffffffffffffffffffffff918216911684612034565b6008546040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff90911690639dc29fac90604401600060405180830381600087803b1580156107b857600080fd5b505af11580156107cc573d6000803e3d6000fd5b50505050826002546107de9190612986565b6002556107eb600061210d565b60405186815273ffffffffffffffffffffffffffffffffffffffff86169033907fd8ae9b9ba89e637bcb66a69ac91e8f688018e81d6f92c57e02226425c8efbdf69060200160405180910390a36001805595945050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156108cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f3919061299d565b610929576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff811660008181526009602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f9181736fce85d2d4cca2e4406f10679302ae5c387180fdb62963af3cd9a24fd69190a250565b600080600f54426109ae9190612986565b90506109bf600d54600e54836109fc565b91505090565b600b81815481106109d557600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6000806301e13380610a0e84866129bf565b610a189190612a2b565b610a2e906b033b2e3c9fd0803ce8000000612a3f565b9050610a3a8582611ef0565b9150505b9392505050565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa158015610acf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af3919061299d565b610b29576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b316121e2565b565b6000610b3d610d0c565b610b536b033b2e3c9fd0803ce8000000846129bf565b610b5d9190612a2b565b92915050565b60006b033b2e3c9fd0803ce8000000610b7a610d0c565b610b5390846129bf565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610c0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c32919061299d565b610c68576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c71816122c3565b50565b6007546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015610ce3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d079190612a57565b905090565b600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da09190612a57565b905080610dba576b033b2e3c9fd0803ce800000091505090565b806b033b2e3c9fd0803ce8000000610dd0611e83565b610dda91906129bf565b6109bf9190612a2b565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015610e6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e92919061299d565b610ec8576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b316123d4565b60005460ff1615610f3d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016105be565b60026001541415610faa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016105be565b60026001819055604080518082019091529081527f5a30000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8316611032576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105be9190612906565b506003548361103f611e83565b6110499190612a3f565b11156040518060400160405280600381526020017f5053320000000000000000000000000000000000000000000000000000000000815250906110b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105be9190612906565b506007546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015611129573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114d9190612a57565b6007549091506111759073ffffffffffffffffffffffffffffffffffffffff16333087612494565b6007546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152829173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156111e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112079190612a57565b6112119190612986565b60085490945073ffffffffffffffffffffffffffffffffffffffff166340c10f198461123c87610b33565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401600060405180830381600087803b1580156112a757600080fd5b505af11580156112bb573d6000803e3d6000fd5b50505050836002546112cd9190612a3f565b6002556112da600061210d565b604080518581526020810184905273ffffffffffffffffffffffffffffffffffffffff85169133917fd2491a9b4fe81a7cd4511e8b7b7743951b061dad5bed7da8a7795b080ee08c7e910160405180910390a35050600180555050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156113c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e5919061299d565b61141b576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051808201909152600381527f50533300000000000000000000000000000000000000000000000000000000006020820152606482111561148b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105be9190612906565b5060108190556040518181527fd5fe46099fa396290a7f57e36c3c3c8774e2562c18ed5d1dcc0fa75071e03f1d906020015b60405180910390a150565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611552573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611576919061299d565b6115ac576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60038190556040518181527fd7a183c9fe85b604c25d54bd676e0866f6c13bcca9fb9b0850213de118fdc99c906020016114bd565b60005460ff161561164e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016105be565b33600090815260096020908152604091829020548251808401909352600383527f50533000000000000000000000000000000000000000000000000000000000009183019190915260ff166116d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105be9190612906565b506007546116f59073ffffffffffffffffffffffffffffffffffffffff168284612034565b6116ff600061210d565b8160045461170d9190612a3f565b60045560405182815273ffffffffffffffffffffffffffffffffffffffff82169033907f312a5e5e1079f5dda4e95dbbd0b908b291fd5b992ef22073643ab691572c5b529060200160405180910390a35050565b60005460ff16156117ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016105be565b336000908152600a6020908152604091829020548251808401909352600383527f50533000000000000000000000000000000000000000000000000000000000009183019190915260ff16611850576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105be9190612906565b50811561191f57600854600c5473ffffffffffffffffffffffffffffffffffffffff918216916340c10f19911661188685610b33565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401600060405180830381600087803b1580156118f157600080fd5b505af1158015611905573d6000803e3d6000fd5b50505050816002546119179190612a3f565b600255611aab565b600061192a82610b33565b600854600c546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529293506000929116906370a0823190602401602060405180830381865afa1580156119a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c69190612a57565b905081811015611a1a57905080337fef3653ded679720ab04913b6f3820be7cedc8286d42ff5dd8dff17e91bd2964c6119fe83610b63565b611a089086612986565b60405190815260200160405180910390a25b600854600c546040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015260248101859052911690639dc29fac90604401600060405180830381600087803b158015611a9057600080fd5b505af1158015611aa4573d6000803e3d6000fd5b5050505050505b611ab48161210d565b8260046000828254611ac69190612986565b9091555050604080518481526020810184905290810182905233907f2fe77b1c99aca6b022b8efc6e3e8dd1b48b30748709339b65c50ef3263443e099060600160405180910390a2505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611b9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bc1919061299d565b611bf7576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c669190612a70565b73ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600381526020017f505331000000000000000000000000000000000000000000000000000000000081525090611d02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105be9190612906565b5073ffffffffffffffffffffffffffffffffffffffff81166000908152600a6020908152604091829020548251808401909352600383527f50533400000000000000000000000000000000000000000000000000000000009183019190915260ff1615611d9c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105be9190612906565b5073ffffffffffffffffffffffffffffffffffffffff81166000818152600960209081526040808320805460017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009182168117909255600a90935281842080549093168117909255600b8054928301815583527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db990910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055517fe076020e7eac3915d33aec40c24f95e73eb6c9921ff89747d50aa8fd934d2c019190a250565b600080600f5442611e949190612986565b905060006301e133806b033b2e3c9fd0803ce800000083600e54600454611ebb91906129bf565b611ec591906129bf565b611ecf9190612a2b565b611ed99190612a2b565b905080600254611ee99190612a3f565b9250505090565b6000821580611efd575081155b15611f0a57506000610b5d565b81611f2260026b033b2e3c9fd0803ce8000000612a2b565b611f4c907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612986565b611f569190612a2b565b8311156040518060400160405280600281526020017f4d3100000000000000000000000000000000000000000000000000000000000081525090611fc7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105be9190612906565b506b033b2e3c9fd0803ce8000000611fe0600282612a2b565b611fea84866129bf565b611ff49190612a3f565b610a3e9190612a2b565b600082158061200b575081155b1561201857506000610b5d565b612710612026600282612a8d565b61ffff16611fea84866129bf565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526121089084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526124f8565b505050565b80612116611e83565b6121209190612986565b60025561212b61099d565b600d5560065460025473ffffffffffffffffffffffffffffffffffffffff909116906342568d449061215b610c74565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815260048101929092526024820152604401602060405180830381865afa1580156121b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121d89190612a57565b600e555042600f55565b60005460ff1661224e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016105be565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60408051808201909152600281527f5a30000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8216612345576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105be9190612906565b50600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316179055612390600061210d565b60405173ffffffffffffffffffffffffffffffffffffffff8216907f0ec6cb7631d36954a05ffd646135bfd9995c71e7fa36d26abb1ad9f24a040ea190600090a250565b60005460ff1615612441576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016105be565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586122993390565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526124f29085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401612086565b50505050565b600061255a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166126049092919063ffffffff16565b8051909150156121085780806020019051810190612578919061299d565b612108576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016105be565b6060612613848460008561261b565b949350505050565b6060824710156126ad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016105be565b843b612715576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016105be565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161273e9190612aae565b60006040518083038185875af1925050503d806000811461277b576040519150601f19603f3d011682016040523d82523d6000602084013e612780565b606091505b509150915061279082828661279b565b979650505050505050565b606083156127aa575081610a3e565b8251156127ba5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105be9190612906565b73ffffffffffffffffffffffffffffffffffffffff81168114610c7157600080fd5b6000806040838503121561282357600080fd5b823591506020830135612835816127ee565b809150509250929050565b60006020828403121561285257600080fd5b8135610a3e816127ee565b60006020828403121561286f57600080fd5b5035919050565b60008060006060848603121561288b57600080fd5b505081359360208301359350604090920135919050565b6000806000606084860312156128b757600080fd5b8335925060208401356128c9816127ee565b929592945050506040919091013590565b60005b838110156128f55781810151838201526020016128dd565b838111156124f25750506000910152565b60208152600082518060208401526129258160408501602087016128da565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561299857612998612957565b500390565b6000602082840312156129af57600080fd5b81518015158114610a3e57600080fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156129f7576129f7612957565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082612a3a57612a3a6129fc565b500490565b60008219821115612a5257612a52612957565b500190565b600060208284031215612a6957600080fd5b5051919050565b600060208284031215612a8257600080fd5b8151610a3e816127ee565b600061ffff80841680612aa257612aa26129fc565b92169190910492915050565b60008251612ac08184602087016128da565b919091019291505056fea26469706673582212202e86d94ef540565512c64126b9b9532a4a9b8a3e69ed50ee7abae69d0e8164fe64736f6c634300080a0033"; - -type PoolServiceConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: PoolServiceConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class PoolService__factory extends ContractFactory { - constructor(...args: PoolServiceConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - _addressProvider: string, - _underlyingToken: string, - _dieselAddress: string, - _interestRateModelAddress: string, - _expectedLiquidityLimit: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - _addressProvider, - _underlyingToken, - _dieselAddress, - _interestRateModelAddress, - _expectedLiquidityLimit, - overrides || {} - ) as Promise; - } - override getDeployTransaction( - _addressProvider: string, - _underlyingToken: string, - _dieselAddress: string, - _interestRateModelAddress: string, - _expectedLiquidityLimit: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction( - _addressProvider, - _underlyingToken, - _dieselAddress, - _interestRateModelAddress, - _expectedLiquidityLimit, - overrides || {} - ); - } - override attach(address: string): PoolService { - return super.attach(address) as PoolService; - } - override connect(signer: Signer): PoolService__factory { - return super.connect(signer) as PoolService__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): PoolServiceInterface { - return new utils.Interface(_abi) as PoolServiceInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): PoolService { - return new Contract(address, _abi, signerOrProvider) as PoolService; - } -} diff --git a/src/types/factories/contracts/pool/index.ts b/src/types/factories/contracts/pool/index.ts deleted file mode 100644 index 432ebbb2..00000000 --- a/src/types/factories/contracts/pool/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { LinearInterestRateModel__factory } from "./LinearInterestRateModel__factory"; -export { PoolService__factory } from "./PoolService__factory"; diff --git a/src/types/factories/contracts/support/ContractUpgrader__factory.ts b/src/types/factories/contracts/support/ContractUpgrader__factory.ts deleted file mode 100644 index 9666a9f2..00000000 --- a/src/types/factories/contracts/support/ContractUpgrader__factory.ts +++ /dev/null @@ -1,130 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import { Contract, Signer, utils } from "ethers"; -import type { Provider } from "@ethersproject/providers"; -import type { - ContractUpgrader, - ContractUpgraderInterface, -} from "../../../contracts/support/ContractUpgrader"; - -const _abi = [ - { - inputs: [], - name: "RootSelfDestoyException", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "previousOwner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "OwnershipTransferred", - type: "event", - }, - { - inputs: [], - name: "addressProvider", - outputs: [ - { - internalType: "contract AddressProvider", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "configure", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "destoy", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "getRootBack", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "owner", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "renounceOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "root", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "transferOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, -]; - -export class ContractUpgrader__factory { - static readonly abi = _abi; - static createInterface(): ContractUpgraderInterface { - return new utils.Interface(_abi) as ContractUpgraderInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): ContractUpgrader { - return new Contract(address, _abi, signerOrProvider) as ContractUpgrader; - } -} diff --git a/src/types/factories/contracts/support/MerkleDistributor__factory.ts b/src/types/factories/contracts/support/MerkleDistributor__factory.ts deleted file mode 100644 index 6d08e298..00000000 --- a/src/types/factories/contracts/support/MerkleDistributor__factory.ts +++ /dev/null @@ -1,191 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { - Signer, - utils, - Contract, - ContractFactory, - BytesLike, - Overrides, -} from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - MerkleDistributor, - MerkleDistributorInterface, -} from "../../../contracts/support/MerkleDistributor"; - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "token_", - type: "address", - }, - { - internalType: "bytes32", - name: "merkleRoot_", - type: "bytes32", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "index", - type: "uint256", - }, - { - indexed: false, - internalType: "address", - name: "account", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "Claimed", - type: "event", - }, - { - inputs: [ - { - internalType: "uint256", - name: "index", - type: "uint256", - }, - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "bytes32[]", - name: "merkleProof", - type: "bytes32[]", - }, - ], - name: "claim", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "index", - type: "uint256", - }, - ], - name: "isClaimed", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "merkleRoot", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "token", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x60c060405234801561001057600080fd5b506040516107dc3803806107dc83398101604081905261002f91610045565b6001600160a01b0390911660805260a05261007f565b6000806040838503121561005857600080fd5b82516001600160a01b038116811461006f57600080fd5b6020939093015192949293505050565b60805160a05161072c6100b060003960008181606b015261023d01526000818160c80152610349015261072c6000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80632e7ba6ef146100515780632eb4a7ab146100665780639e34070f146100a0578063fc0c546a146100c3575b600080fd5b61006461005f366004610545565b61010f565b005b61008d7f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b6100b36100ae3660046105f7565b610404565b6040519015158152602001610097565b6100ea7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610097565b61011885610404565b156101aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c654469737472696275746f723a2044726f7020616c72656164792060448201527f636c61696d65642e00000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b60408051602081018790527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b1691810191909152605481018490526000906074016040516020818303038152906040528051906020012090506102688383808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152507f000000000000000000000000000000000000000000000000000000000000000092508591506104459050565b6102f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4d65726b6c654469737472696275746f723a20496e76616c69642070726f6f6660448201527f2e0000000000000000000000000000000000000000000000000000000000000060648201526084016101a1565b6102fd8661045b565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690527f000000000000000000000000000000000000000000000000000000000000000016906340c10f1990604401600060405180830381600087803b15801561038d57600080fd5b505af11580156103a1573d6000803e3d6000fd5b50506040805189815273ffffffffffffffffffffffffffffffffffffffff891660208201529081018790527f4ec90e965519d92681267467f775ada5bd214aa92c0dc93d90a5e880ce9ed0269250606001905060405180910390a1505050505050565b6000806104136101008461063f565b9050600061042361010085610653565b60009283526020839052604090922054600190921b9182169091149392505050565b6000826104528584610499565b14949350505050565b60006104696101008361063f565b9050600061047961010084610653565b6000928352602083905260409092208054600190931b9092179091555050565b600081815b845181101561053d5760008582815181106104bb576104bb610667565b602002602001015190508083116104fd57604080516020810185905290810182905260600160405160208183030381529060405280519060200120925061052a565b60408051602081018390529081018490526060016040516020818303038152906040528051906020012092505b508061053581610696565b91505061049e565b509392505050565b60008060008060006080868803121561055d57600080fd5b85359450602086013573ffffffffffffffffffffffffffffffffffffffff8116811461058857600080fd5b935060408601359250606086013567ffffffffffffffff808211156105ac57600080fd5b818801915088601f8301126105c057600080fd5b8135818111156105cf57600080fd5b8960208260051b85010111156105e457600080fd5b9699959850939650602001949392505050565b60006020828403121561060957600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261064e5761064e610610565b500490565b60008261066257610662610610565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156106ef577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea2646970667358221220ab4ed05bc2a4f98a707484c5a95189e4f2ea10444637d9189318eadbb1fd227e64736f6c634300080a0033"; - -type MerkleDistributorConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: MerkleDistributorConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class MerkleDistributor__factory extends ContractFactory { - constructor(...args: MerkleDistributorConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - token_: string, - merkleRoot_: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - token_, - merkleRoot_, - overrides || {} - ) as Promise; - } - override getDeployTransaction( - token_: string, - merkleRoot_: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(token_, merkleRoot_, overrides || {}); - } - override attach(address: string): MerkleDistributor { - return super.attach(address) as MerkleDistributor; - } - override connect(signer: Signer): MerkleDistributor__factory { - return super.connect(signer) as MerkleDistributor__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): MerkleDistributorInterface { - return new utils.Interface(_abi) as MerkleDistributorInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): MerkleDistributor { - return new Contract(address, _abi, signerOrProvider) as MerkleDistributor; - } -} diff --git a/src/types/factories/contracts/support/MultiCall.sol/Multicall2__factory.ts b/src/types/factories/contracts/support/MultiCall.sol/Multicall2__factory.ts index d8de5ec1..7423c1f2 100644 --- a/src/types/factories/contracts/support/MultiCall.sol/Multicall2__factory.ts +++ b/src/types/factories/contracts/support/MultiCall.sol/Multicall2__factory.ts @@ -322,8 +322,7 @@ const _abi = [ }, ]; -const _bytecode = - "0x608060405234801561001057600080fd5b50610b55806100206000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c806372425d9d11610081578063bce38bd71161005b578063bce38bd714610181578063c3077fa9146101a1578063ee82ac5e146101b457600080fd5b806372425d9d1461016757806386d516e81461016d578063a8b0574e1461017357600080fd5b8063399542e9116100b2578063399542e91461011757806342cbb15c146101395780634d2301cc1461013f57600080fd5b80630f28c97d146100d9578063252dba42146100ee57806327e86d6e1461010f575b600080fd5b425b6040519081526020015b60405180910390f35b6101016100fc3660046107e3565b6101c6565b6040516100e592919061089a565b6100db610375565b61012a610125366004610922565b610388565b6040516100e5939291906109df565b436100db565b6100db61014d366004610a07565b73ffffffffffffffffffffffffffffffffffffffff163190565b446100db565b456100db565b6040514181526020016100e5565b61019461018f366004610922565b6103a0565b6040516100e59190610a29565b61012a6101af3660046107e3565b61059d565b6100db6101c2366004610a3c565b4090565b8051439060609067ffffffffffffffff8111156101e5576101e56105ba565b60405190808252806020026020018201604052801561021857816020015b60608152602001906001900390816102035790505b50905060005b835181101561036f5760008085838151811061023c5761023c610a55565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff1686848151811061027057610270610a55565b6020026020010151602001516040516102899190610a84565b6000604051808303816000865af19150503d80600081146102c6576040519150601f19603f3d011682016040523d82523d6000602084013e6102cb565b606091505b50915091508161033c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4d756c746963616c6c206167677265676174653a2063616c6c206661696c656460448201526064015b60405180910390fd5b8084848151811061034f5761034f610a55565b60200260200101819052505050808061036790610acf565b91505061021e565b50915091565b6000610382600143610b08565b40905090565b438040606061039785856103a0565b90509250925092565b6060815167ffffffffffffffff8111156103bc576103bc6105ba565b60405190808252806020026020018201604052801561040257816020015b6040805180820190915260008152606060208201528152602001906001900390816103da5790505b50905060005b82518110156105965760008084838151811061042657610426610a55565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff1685848151811061045a5761045a610a55565b6020026020010151602001516040516104739190610a84565b6000604051808303816000865af19150503d80600081146104b0576040519150601f19603f3d011682016040523d82523d6000602084013e6104b5565b606091505b5091509150851561054d578161054d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4d756c746963616c6c32206167677265676174653a2063616c6c206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610333565b604051806040016040528083151581526020018281525084848151811061057657610576610a55565b60200260200101819052505050808061058e90610acf565b915050610408565b5092915050565b60008060606105ad600185610388565b9196909550909350915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff8111828210171561060c5761060c6105ba565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715610659576106596105ba565b604052919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461068557600080fd5b919050565b6000601f838184011261069c57600080fd5b8235602067ffffffffffffffff808311156106b9576106b96105ba565b8260051b6106c8838201610612565b93845286810183019383810190898611156106e257600080fd5b84890192505b858310156107d6578235848111156107005760008081fd5b890160407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0828d0381018213156107375760008081fd5b61073f6105e9565b61074a898501610661565b8152828401358881111561075e5760008081fd5b8085019450508d603f8501126107745760008081fd5b8884013588811115610788576107886105ba565b6107978a848e84011601610612565b92508083528e848287010111156107ae5760008081fd5b808486018b85013760009083018a0152808901919091528452505091840191908401906106e8565b9998505050505050505050565b6000602082840312156107f557600080fd5b813567ffffffffffffffff81111561080c57600080fd5b6108188482850161068a565b949350505050565b60005b8381101561083b578181015183820152602001610823565b8381111561084a576000848401525b50505050565b60008151808452610868816020860160208601610820565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b600060408201848352602060408185015281855180845260608601915060608160051b870101935082870160005b82811015610914577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0888703018452610902868351610850565b955092840192908401906001016108c8565b509398975050505050505050565b6000806040838503121561093557600080fd5b8235801515811461094557600080fd5b9150602083013567ffffffffffffffff81111561096157600080fd5b61096d8582860161068a565b9150509250929050565b6000815180845260208085019450848260051b860182860160005b858110156109d2578383038952815180511515845285015160408685018190526109be81860183610850565b9a87019a9450505090840190600101610992565b5090979650505050505050565b8381528260208201526060604082015260006109fe6060830184610977565b95945050505050565b600060208284031215610a1957600080fd5b610a2282610661565b9392505050565b602081526000610a226020830184610977565b600060208284031215610a4e57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008251610a96818460208701610820565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415610b0157610b01610aa0565b5060010190565b600082821015610b1a57610b1a610aa0565b50039056fea2646970667358221220fc8aabbd3e8d5f39da00a326f700bf7c068ba6fdd165d324381d5dc3d7a152bc64736f6c634300080a0033"; +const _bytecode = ""; type Multicall2ConstructorParams = | [signer?: Signer] diff --git a/src/types/factories/contracts/support/PauseMulticall__factory.ts b/src/types/factories/contracts/support/PauseMulticall__factory.ts deleted file mode 100644 index 53dd02a5..00000000 --- a/src/types/factories/contracts/support/PauseMulticall__factory.ts +++ /dev/null @@ -1,206 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - PauseMulticall, - PauseMulticallInterface, -} from "../../../contracts/support/PauseMulticall"; - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "_addressProvider", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "CallerNotPausableAdminException", - type: "error", - }, - { - inputs: [], - name: "CallerNotUnPausableAdminException", - type: "error", - }, - { - inputs: [], - name: "ZeroAddressException", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "Paused", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "Unpaused", - type: "event", - }, - { - inputs: [], - name: "_acl", - outputs: [ - { - internalType: "contract ACL", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "acl", - outputs: [ - { - internalType: "contract ACL", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "cr", - outputs: [ - { - internalType: "contract ContractsRegister", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "pause", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "pauseAllContracts", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "pauseAllCreditManagers", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "pauseAllPools", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "paused", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "unpause", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, -]; - -const _bytecode = - "0x60e060405234801561001057600080fd5b50604051610e07380380610e0783398101604081905261002f916101d3565b6000805460ff19169055806001600160a01b03811661006157604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa15801561009f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100c391906101d3565b6001600160a01b03166080816001600160a01b031681525050506000819050806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015610120573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061014491906101d3565b6001600160a01b031660a0816001600160a01b031681525050806001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561019b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101bf91906101d3565b6001600160a01b031660c052506102039050565b6000602082840312156101e557600080fd5b81516001600160a01b03811681146101fc57600080fd5b9392505050565b60805160a05160c051610b9e6102696000396000818160da0152818161035e015281816104fb015261064d015260008181610165015281816102a301528181610440015261059201526000818161013e015281816101b501526106e40152610b9e6000f3fe608060405234801561001057600080fd5b50600436106100a35760003560e01c80636f074436116100765780638456cb591161005b5780638456cb5914610131578063a50cf2c814610139578063de2873591461016057600080fd5b80636f074436146101215780637c205cc41461012957600080fd5b80633f4ba83a146100a8578063488bf5b4146100b25780635c975abb146100ba57806362eb33e3146100d5575b600080fd5b6100b0610187565b005b6100b0610275565b60005460ff1660405190151581526020015b60405180910390f35b6100fc7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100cc565b6100b0610412565b6100b0610564565b6100b06106b6565b6100fc7f000000000000000000000000000000000000000000000000000000000000000081565b6100fc7f000000000000000000000000000000000000000000000000000000000000000081565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa158015610211573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061023591906109d5565b61026b576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102736107a2565b565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa1580156102ff573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061032391906109d5565b610359576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102737f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663673a2a1f6040518163ffffffff1660e01b8152600401600060405180830381865afa1580156103c7573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261040d9190810190610a56565b610888565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561049c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c091906109d5565b6104f6576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102737f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663941448566040518163ffffffff1660e01b8152600401600060405180830381865afa1580156103c7573d6000803e3d6000fd5b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa1580156105ee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061061291906109d5565b610648576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104f67f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663673a2a1f6040518163ffffffff1660e01b8152600401600060405180830381865afa1580156103c7573d6000803e3d6000fd5b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015610740573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061076491906109d5565b61079a576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610273610915565b60005460ff16610813576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b805160005b81811015610910578281815181106108a7576108a7610b39565b602002602001015173ffffffffffffffffffffffffffffffffffffffff16638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156108f657600080fd5b505af1925050508015610907575060015b5060010161088d565b505050565b60005460ff1615610982576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015260640161080a565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861085e3390565b6000602082840312156109e757600080fd5b815180151581146109f757600080fd5b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b805173ffffffffffffffffffffffffffffffffffffffff81168114610a5157600080fd5b919050565b60006020808385031215610a6957600080fd5b825167ffffffffffffffff80821115610a8157600080fd5b818501915085601f830112610a9557600080fd5b815181811115610aa757610aa76109fe565b8060051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108582111715610aea57610aea6109fe565b604052918252848201925083810185019188831115610b0857600080fd5b938501935b82851015610b2d57610b1e85610a2d565b84529385019392850192610b0d565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea2646970667358221220447f0f77525e705c0a5e6b52ca0e24e5cc01de5da45af8d70c2ebe6c0db8851364736f6c634300080a0033"; - -type PauseMulticallConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: PauseMulticallConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class PauseMulticall__factory extends ContractFactory { - constructor(...args: PauseMulticallConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - _addressProvider: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - _addressProvider, - overrides || {} - ) as Promise; - } - override getDeployTransaction( - _addressProvider: string, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(_addressProvider, overrides || {}); - } - override attach(address: string): PauseMulticall { - return super.attach(address) as PauseMulticall; - } - override connect(signer: Signer): PauseMulticall__factory { - return super.connect(signer) as PauseMulticall__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): PauseMulticallInterface { - return new utils.Interface(_abi) as PauseMulticallInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): PauseMulticall { - return new Contract(address, _abi, signerOrProvider) as PauseMulticall; - } -} diff --git a/src/types/factories/contracts/support/index.ts b/src/types/factories/contracts/support/index.ts index f814fc82..5e654875 100644 --- a/src/types/factories/contracts/support/index.ts +++ b/src/types/factories/contracts/support/index.ts @@ -2,6 +2,3 @@ /* tslint:disable */ /* eslint-disable */ export * as multiCallSol from "./MultiCall.sol"; -export { ContractUpgrader__factory } from "./ContractUpgrader__factory"; -export { MerkleDistributor__factory } from "./MerkleDistributor__factory"; -export { PauseMulticall__factory } from "./PauseMulticall__factory"; diff --git a/src/types/factories/contracts/test/Playground.t.sol/PlaygroundTest__factory.ts b/src/types/factories/contracts/test/Playground.t.sol/PlaygroundTest__factory.ts deleted file mode 100644 index c08cdd51..00000000 --- a/src/types/factories/contracts/test/Playground.t.sol/PlaygroundTest__factory.ts +++ /dev/null @@ -1,370 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - PlaygroundTest, - PlaygroundTestInterface, -} from "../../../../contracts/test/Playground.t.sol/PlaygroundTest"; - -const _abi = [ - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "", - type: "address", - }, - ], - name: "log_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "log_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - name: "log_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "int256", - name: "", - type: "int256", - }, - ], - name: "log_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "address", - name: "val", - type: "address", - }, - ], - name: "log_named_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes", - name: "val", - type: "bytes", - }, - ], - name: "log_named_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes32", - name: "val", - type: "bytes32", - }, - ], - name: "log_named_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - ], - name: "log_named_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "string", - name: "val", - type: "string", - }, - ], - name: "log_named_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - ], - name: "log_named_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "log_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "logs", - type: "event", - }, - { - inputs: [], - name: "IS_TEST", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "failed", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "setUp", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_01_test", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, -]; - -const _bytecode = - "0x60806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d0001179055600560015534801561003e57600080fd5b5061032c8061004e6000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80630a9254e4146100515780639319393e14610085578063ba414fa6146100c1578063fa7626d4146100dd575b600080fd5b61008360008052600260205260377fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b55565b005b6100836001805460061790556000805260026020526115a97fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b55565b6100c96100ea565b604051901515815260200160405180910390f35b6000546100c99060ff1681565b60008054610100900460ff161561010a5750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156102455760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c65640000000000000000000000000000000000000000000000000000828401528251808303840181526060830190935260009290916101af917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc491608001610285565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526101e7916102c1565b6000604051808303816000865af19150503d8060008114610224576040519150601f19603f3d011682016040523d82523d6000602084013e610229565b606091505b509150508080602001905181019061024191906102d4565b9150505b919050565b6000815160005b8181101561026b5760208185018101518683015201610251565b8181111561027a576000828601525b509290920192915050565b7fffffffff000000000000000000000000000000000000000000000000000000008316815260006102b9600483018461024a565b949350505050565b60006102cd828461024a565b9392505050565b6000602082840312156102e657600080fd5b815180151581146102cd57600080fdfea2646970667358221220fa3fa692c6956abc3a8d742bb8b31609f9731858c226161c4269f10a9f477a6064736f6c634300080a0033"; - -type PlaygroundTestConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: PlaygroundTestConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class PlaygroundTest__factory extends ContractFactory { - constructor(...args: PlaygroundTestConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): PlaygroundTest { - return super.attach(address) as PlaygroundTest; - } - override connect(signer: Signer): PlaygroundTest__factory { - return super.connect(signer) as PlaygroundTest__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): PlaygroundTestInterface { - return new utils.Interface(_abi) as PlaygroundTestInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): PlaygroundTest { - return new Contract(address, _abi, signerOrProvider) as PlaygroundTest; - } -} diff --git a/src/types/factories/contracts/test/Playground.t.sol/index.ts b/src/types/factories/contracts/test/Playground.t.sol/index.ts deleted file mode 100644 index e627bb9d..00000000 --- a/src/types/factories/contracts/test/Playground.t.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { PlaygroundTest__factory } from "./PlaygroundTest__factory"; diff --git a/src/types/factories/contracts/test/adapters/AbstractAdapter.t.sol/AbstractAdapterTest__factory.ts b/src/types/factories/contracts/test/adapters/AbstractAdapter.t.sol/AbstractAdapterTest__factory.ts deleted file mode 100644 index 539c47f2..00000000 --- a/src/types/factories/contracts/test/adapters/AbstractAdapter.t.sol/AbstractAdapterTest__factory.ts +++ /dev/null @@ -1,966 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - AbstractAdapterTest, - AbstractAdapterTestInterface, -} from "../../../../../contracts/test/adapters/AbstractAdapter.t.sol/AbstractAdapterTest"; - -const _abi = [ - { - inputs: [], - name: "AccountTransferNotAllowedException", - type: "error", - }, - { - inputs: [], - name: "AdaptersOrCreditFacadeOnlyException", - type: "error", - }, - { - inputs: [], - name: "AllowanceFailedExpcetion", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "BalanceLessThanMinimumDesired", - type: "error", - }, - { - inputs: [], - name: "BorrowAmountOutOfLimitsException", - type: "error", - }, - { - inputs: [], - name: "BorrowedBlockLimitException", - type: "error", - }, - { - inputs: [], - name: "CantLiquidateNonExpiredException", - type: "error", - }, - { - inputs: [], - name: "CantLiquidateWithSuchHealthFactorException", - type: "error", - }, - { - inputs: [], - name: "CantTransferLiquidatableAccountException", - type: "error", - }, - { - inputs: [], - name: "CreditConfiguratorOnlyException", - type: "error", - }, - { - inputs: [], - name: "CreditFacadeOnlyException", - type: "error", - }, - { - inputs: [], - name: "ForbiddenDuringClosureException", - type: "error", - }, - { - inputs: [], - name: "HasNoOpenedAccountException", - type: "error", - }, - { - inputs: [], - name: "IncorrectCallDataException", - type: "error", - }, - { - inputs: [], - name: "IncreaseAndDecreaseForbiddenInOneCallException", - type: "error", - }, - { - inputs: [], - name: "IncreaseDebtForbiddenException", - type: "error", - }, - { - inputs: [], - name: "NotAllowedInWhitelistedMode", - type: "error", - }, - { - inputs: [], - name: "NotAllowedWhenNotExpirableException", - type: "error", - }, - { - inputs: [], - name: "NotEnoughCollateralException", - type: "error", - }, - { - inputs: [], - name: "OpenAccountNotAllowedAfterExpiration", - type: "error", - }, - { - inputs: [], - name: "ReentrancyLockException", - type: "error", - }, - { - inputs: [], - name: "TargetContractNotAllowedExpcetion", - type: "error", - }, - { - inputs: [], - name: "TokenAlreadyAddedException", - type: "error", - }, - { - inputs: [], - name: "TokenNotAllowedException", - type: "error", - }, - { - inputs: [], - name: "TooMuchEnabledTokensException", - type: "error", - }, - { - inputs: [], - name: "TooMuchTokensException", - type: "error", - }, - { - inputs: [], - name: "UnknownMethodException", - type: "error", - }, - { - inputs: [], - name: "ZeroAddressOrUserAlreadyHasAccountException", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "onBehalfOf", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "token", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "AddCollateral", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - ], - name: "CloseCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "DecreaseBorrowedAmount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "target", - type: "address", - }, - ], - name: "ExecuteOrder", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "IncreaseBorrowedAmount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "liquidator", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "remainingFunds", - type: "uint256", - }, - ], - name: "LiquidateCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "liquidator", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "remainingFunds", - type: "uint256", - }, - ], - name: "LiquidateExpiredCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [], - name: "MultiCallFinished", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - ], - name: "MultiCallStarted", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newConfigurator", - type: "address", - }, - ], - name: "NewConfigurator", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "onBehalfOf", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "borrowAmount", - type: "uint256", - }, - { - indexed: false, - internalType: "uint16", - name: "referralCode", - type: "uint16", - }, - ], - name: "OpenCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "token", - type: "address", - }, - ], - name: "TokenDisabled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "token", - type: "address", - }, - ], - name: "TokenEnabled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "oldOwner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "TransferAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "bool", - name: "state", - type: "bool", - }, - ], - name: "TransferAccountAllowed", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "", - type: "address", - }, - ], - name: "log_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "log_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - name: "log_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "int256", - name: "", - type: "int256", - }, - ], - name: "log_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "address", - name: "val", - type: "address", - }, - ], - name: "log_named_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes", - name: "val", - type: "bytes", - }, - ], - name: "log_named_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes32", - name: "val", - type: "bytes32", - }, - ], - name: "log_named_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - ], - name: "log_named_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "string", - name: "val", - type: "string", - }, - ], - name: "log_named_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - ], - name: "log_named_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "log_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "logs", - type: "event", - }, - { - inputs: [], - name: "IS_TEST", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "cft", - outputs: [ - { - internalType: "contract CreditFacadeTestSuite", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditConfigurator", - outputs: [ - { - internalType: "contract CreditConfigurator", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditFacade", - outputs: [ - { - internalType: "contract CreditFacade", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditManager", - outputs: [ - { - internalType: "contract ICreditManagerV2", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "failed", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "setUp", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_AA_01_constructor_sets_correct_values", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_AA_02_constructor_reverts_on_zero_address", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_AA_03_executeFast_check_reverts_if_user_has_no_account", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_AA_04A_executeMaxAllowanceFastCheck_correctly_passes_to_credit_manager", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_AA_04B_executeMaxAllowanceFastCheck_correctly_passes_to_credit_manager", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_AA_05_executeMaxAllowanceFastCheck_correctly_sets_allowance", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_AA_06A_executeSafeFastCheck_correctly_passes_to_credit_manager", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_AA_06B_executeSafeFastCheck_correctly_passes_to_credit_manager", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_AA_07_executeSafeFastCheck_correctly_sets_allowance", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_AA_08A_execute_correctly_passes_to_credit_manager", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_AA_08A_fullCheck_correctly_passes_to_credit_manager", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_AA_08C_executeMaxAllowanceFastCheck_correctly_passes_to_credit_manager", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "underlying", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x60806040526000805460ff1916600190811790915580546001600160a01b031916737109709ecfa91a80626ff3989d68f67f5b1dd12d17905534801561004457600080fd5b5062040a0c80620000566000396000f3fe60806040523480156200001157600080fd5b5060043610620001895760003560e01c8063ab9afa9711620000dd578063e79bef30116200008b578063eed982ed116200006e578063eed982ed14620002d1578063f9aa028a14620002db578063fa7626d414620002fc57600080fd5b8063e79bef3014620002bd578063eb5d6f6614620002c757600080fd5b8063c01dc97011620000c0578063c01dc9701462000271578063c12c21c0146200027b578063df514433146200029c57600080fd5b8063ab9afa97146200024c578063ba414fa6146200025657600080fd5b80636f307dc3116200013b578063979ce871116200011e578063979ce871146200022e5780639962127914620002385780639a19b064146200024257600080fd5b80636f307dc314620002035780637ee2adc2146200022457600080fd5b80631f696bb811620001705780631f696bb814620001a457806329e89d6e14620001ae5780632f7a188114620001b857600080fd5b80630a9254e4146200018e57806315b494b0146200019a575b600080fd5b620001986200030a565b005b6200019862000db9565b62000198620012f1565b62000198620018e2565b600354620001d99073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b600654620001d99073ffffffffffffffffffffffffffffffffffffffff1681565b6200019862001f3d565b620001986200253a565b6200019862002724565b6200019862002b52565b6200019862002d60565b6200026062003059565b6040519015158152602001620001fa565b62000198620031c3565b600254620001d99073ffffffffffffffffffffffffffffffffffffffff1681565b600554620001d99073ffffffffffffffffffffffffffffffffffffffff1681565b6200019862003569565b6200019862003aed565b6200019862003e36565b600454620001d99073ffffffffffffffffffffffffffffffffffffffff1681565b600054620002609060ff1681565b604051620003189062004c6d565b604051809103906000f08015801562000335573d6000803e3d6000fd5b50600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff166201000073ffffffffffffffffffffffffffffffffffffffff9384168102919091179182905590041663b36ba2086200039f670de0b6b3a7640000606462004cd5565b6040518263ffffffff1660e01b81526004016000604051808303818588803b158015620003cb57600080fd5b505af1158015620003e0573d6000803e3d6000fd5b5050505050600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001604051620004189062004c7b565b6200042592919062004d51565b604051809103906000f08015801562000442573d6000803e3d6000fd5b50600580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283161790556000546040517f67b4264500000000000000000000000000000000000000000000000000000000815262010000909104909116906367b4264590620004cf9060019060040162004d84565b602060405180830381865afa158015620004ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000513919062004dbd565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600554604080517fc12c21c00000000000000000000000000000000000000000000000000000000081529051919092169163c12c21c09160048083019260209291908290030181865afa158015620005b0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005d6919062004dbd565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600554604080517f2f7a188100000000000000000000000000000000000000000000000000000000815290519190921691632f7a18819160048083019260209291908290030181865afa15801562000673573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000699919062004dbd565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600554604080517ff9aa028a0000000000000000000000000000000000000000000000000000000081529051919092169163f9aa028a9160048083019260209291908290030181865afa15801562000736573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200075c919062004dbd565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316178155600554604080517f5e813a8b00000000000000000000000000000000000000000000000000000000815290519190931692635e813a8b92818101926020929091908290030181865afa158015620007f8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200081e919062004dbd565b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055604051620008719062004c8a565b604051809103906000f0801580156200088e573d6000803e3d6000fd5b50600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316908117909155600254604051921691620008e79062004c98565b73ffffffffffffffffffffffffffffffffffffffff928316815291166020820152604001604051809103906000f08015801562000928573d6000803e3d6000fd5b50600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283161790556001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291169063ca669fa790602401600060405180830381600087803b158015620009d457600080fd5b505af1158015620009e9573d6000803e3d6000fd5b5050600480546008546009546040517f7bccacee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283169481019490945281166024840152169250637bccacee9150604401600060405180830381600087803b15801562000a6957600080fd5b505af115801562000a7e573d6000803e3d6000fd5b5050600154600954604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152600b60448201527f416461707465724d6f636b00000000000000000000000000000000000000000060648201529116925063c657c7189150608401600060405180830381600087803b15801562000b2857600080fd5b505af115801562000b3d573d6000803e3d6000fd5b5050600154600854604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152601260448201527f546172676574436f6e74726163744d6f636b000000000000000000000000000060648201529116925063c657c7189150608401600060405180830381600087803b15801562000be757600080fd5b505af115801562000bfc573d6000803e3d6000fd5b50506000546040517f67b426450000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff1692506367b42645915062000c5e9060029060040162004d84565b602060405180830381865afa15801562000c7c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ca2919062004dbd565b600a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283161790556000546040517f67b4264500000000000000000000000000000000000000000000000000000000815262010000909104909116906367b426459062000d2e9060019060040162004d84565b602060405180830381865afa15801562000d4c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000d72919062004dbd565b600b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60005b6002811015620012ee5780151562000dd36200030a565b600062000ddf62004064565b5060405160206024820152600560448201527f776f726c640000000000000000000000000000000000000000000000000000006064820152909150600090608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa777d0dc0000000000000000000000000000000000000000000000000000000017905260085490915062000ec490600290849073ffffffffffffffffffffffffffffffffffffffff1660006200444b565b821562000fed57600154600a546008546040805173ffffffffffffffffffffffffffffffffffffffff92831660248201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b30000000000000000000000000000000000000000000000000000000017905290517fbd6af4340000000000000000000000000000000000000000000000000000000081529382169363bd6af4349362000fb89316919060040162004e58565b600060405180830381600087803b15801562000fd357600080fd5b505af115801562000fe8573d6000803e3d6000fd5b505050505b82156200111657600154600a546008546040805173ffffffffffffffffffffffffffffffffffffffff92831660248201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b30000000000000000000000000000000000000000000000000000000017905290517fbd6af4340000000000000000000000000000000000000000000000000000000081529382169363bd6af43493620010e19316919060040162004e58565b600060405180830381600087803b158015620010fc57600080fd5b505af115801562001111573d6000803e3d6000fd5b505050505b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b1580156200119657600080fd5b505af1158015620011ab573d6000803e3d6000fd5b5050600954600a54600b546040517fb73c1cfc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff938416955063b73c1cfc94506200121b939283169290911690869060019060009060040162004e91565b6000604051808303816000875af11580156200123b573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262001283919081019062004faf565b508215620012d557600854620012d590600290849073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6200444b565b5050508080620012e59062004ffd565b91505062000dbc565b50565b6000620012fd62004064565b5060405160206024820152600560448201527f776f726c640000000000000000000000000000000000000000000000000000006064820152909150600090608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa777d0dc00000000000000000000000000000000000000000000000000000000179052600154600254600854925193945073ffffffffffffffffffffffffffffffffffffffff9182169363bd6af43493918316927f6ce4074a0000000000000000000000000000000000000000000000000000000092620014329273f39fd6e51aad88f6f4ce6ab8827279cfffb92266929190911690889060240162005039565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b9092168252620014c5929160040162004e58565b600060405180830381600087803b158015620014e057600080fd5b505af1158015620014f5573d6000803e3d6000fd5b5050600154600254600a54600b546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8981166004830152948516965063bd6af4349550928416937f654a9eda00000000000000000000000000000000000000000000000000000000938993821692919091169082906370a0823190602401602060405180830381865afa158015620015ab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620015d191906200507d565b600b546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c81166004830152909116906370a0823190602401602060405180830381865afa15801562001642573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200166891906200507d565b60405173ffffffffffffffffffffffffffffffffffffffff95861660248201529385166044850152939091166064830152608482015260a481019190915260c401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b90921682526200173c929160040162004e58565b600060405180830381600087803b1580156200175757600080fd5b505af11580156200176c573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b158015620017f057600080fd5b505af115801562001805573d6000803e3d6000fd5b5050600954600a54600b546040517fcd685c2c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff938416955063cd685c2c945062001875939283169290911690869060019060009060040162004e91565b6000604051808303816000875af115801562001895573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620018dd919081019062004faf565b505050565b6000620018ee62004064565b5060405160206024820152600560448201527f776f726c640000000000000000000000000000000000000000000000000000006064820152909150600090608401604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00181529181526020820180517fa777d0dc000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790528051600180825281830190925291925060009190816020015b604080518082019091526000815260606020820152815260200190600190039081620019c057505060408051808201825260095473ffffffffffffffffffffffffffffffffffffffff9081168252600a54600b5493519495509193602085019362001a3e938993908116929116908890600190819060240162005097565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f3ccb153e0000000000000000000000000000000000000000000000000000000017905290528151829060009062001acc5762001acc620050f4565b602090810291909101015260015460025460035460085460405173ffffffffffffffffffffffffffffffffffffffff9485169463bd6af434948116937f6ce4074a000000000000000000000000000000000000000000000000000000009362001b4093918316921690899060240162005039565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b909216825262001bd3929160040162004e58565b600060405180830381600087803b15801562001bee57600080fd5b505af115801562001c03573d6000803e3d6000fd5b5050600154600254600a546040805173ffffffffffffffffffffffffffffffffffffffff8a8116602483015292831660448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f0d8f9cee0000000000000000000000000000000000000000000000000000000017905290517fbd6af434000000000000000000000000000000000000000000000000000000008152938216955063bd6af434945062001cd99391909216919060040162004e58565b600060405180830381600087803b15801562001cf457600080fd5b505af115801562001d09573d6000803e3d6000fd5b5050600154600254600b546040805173ffffffffffffffffffffffffffffffffffffffff8a8116602483015292831660448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f51e3f1600000000000000000000000000000000000000000000000000000000017905290517fbd6af434000000000000000000000000000000000000000000000000000000008152938216955063bd6af434945062001ddf9391909216919060040162004e58565b600060405180830381600087803b15801562001dfa57600080fd5b505af115801562001e0f573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b15801562001e9357600080fd5b505af115801562001ea8573d6000803e3d6000fd5b50506003546040517fcaa5c23f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116925063caa5c23f915062001f0490849060040162005123565b600060405180830381600087803b15801562001f1f57600080fd5b505af115801562001f34573d6000803e3d6000fd5b50505050505050565b600062001f4962004064565b506001546003546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152929350169063ca669fa790602401600060405180830381600087803b15801562001fbc57600080fd5b505af115801562001fd1573d6000803e3d6000fd5b50506003546040517e842b5700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660048201526001602482015273ffffffffffffffffffffffffffffffffffffffff909116925062842b579150604401600060405180830381600087803b1580156200205a57600080fd5b505af11580156200206f573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b158015620020f357600080fd5b505af115801562002108573d6000803e3d6000fd5b50506003546040517f5019e20a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116600482018190529250635019e20a9150602401600060405180830381600087803b1580156200217957600080fd5b505af11580156200218e573d6000803e3d6000fd5b505060405160206024820152600560448201527f776f726c640000000000000000000000000000000000000000000000000000006064820152600092506084019050604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa777d0dc0000000000000000000000000000000000000000000000000000000017905260005490517f8832786300000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff620100009091041690638eb86e8b9060019085908490638832786390620022b49085908590600401620051cf565b602060405180830381865afa158015620022d2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620022f891906200507d565b6040518463ffffffff1660e01b8152600401620023189392919062005202565b600060405180830381600087803b1580156200233357600080fd5b505af115801562002348573d6000803e3d6000fd5b50506003546040517fdfd5946500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152620024269450909116915063dfd5946590602401602060405180830381865afa158015620023c2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620023e891906200507d565b60006040518060400160405280601781526020017f496e636f7272656374206865616c746820666163746f720000000000000000008152506200446f565b6001546003546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015291169063ca669fa790602401600060405180830381600087803b1580156200249657600080fd5b505af1158015620024ab573d6000803e3d6000fd5b50506009546040517f33a9edaf00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015290911692506333a9edaf9150602401600060405180830381600087803b1580156200251d57600080fd5b505af115801562002532573d6000803e3d6000fd5b505050505050565b60006200254662004064565b5060405160206024820152600560448201527f776f726c640000000000000000000000000000000000000000000000000000006064820152909150600090608401604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00181529181526020820180517fa777d0dc000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790528051600180825281830190925291925060009190816020015b6040805180820190915260008152606060208201528152602001906001900390816200261857505060408051808201825260095473ffffffffffffffffffffffffffffffffffffffff9081168252600a54600b5493519495509193602085019362002696938993908116929116908890600190819060240162005097565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd190b78d0000000000000000000000000000000000000000000000000000000017905290528151829060009062001acc5762001acc620050f4565b6000806200273162004064565b60085491935091506200276190600190849073ffffffffffffffffffffffffffffffffffffffff1660006200444b565b600154600b546008546040805173ffffffffffffffffffffffffffffffffffffffff92831660248201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b30000000000000000000000000000000000000000000000000000000017905290517fbd6af4340000000000000000000000000000000000000000000000000000000081529382169363bd6af434936200284e9316919060040162004e58565b600060405180830381600087803b1580156200286957600080fd5b505af11580156200287e573d6000803e3d6000fd5b505060018054600b546008546040805173ffffffffffffffffffffffffffffffffffffffff92831660248201526044808201969096528151808203909601865260640181526020850180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b300000000000000000000000000000000000000000000000000000000179052517fbd6af434000000000000000000000000000000000000000000000000000000008152928116955063bd6af43494506200294c9391169160040162004e58565b600060405180830381600087803b1580156200296757600080fd5b505af11580156200297c573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b15801562002a0057600080fd5b505af115801562002a15573d6000803e3d6000fd5b5050600954600b54600a546040517fcd685c2c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283166004820152908216602482015260a06044820152600860a48201527f63616c6c6461746100000000000000000000000000000000000000000000000060c482015260016064820152600060848201529116925063cd685c2c915060e4016000604051808303816000875af115801562002adb573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262002b23919081019062004faf565b5060085462002b4e90600190849073ffffffffffffffffffffffffffffffffffffffff16826200444b565b5050565b6001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb2335f2e00000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063c31eb0e090602401600060405180830381600087803b15801562002bde57600080fd5b505af115801562002bf3573d6000803e3d6000fd5b50505050600080600060405162002c0a9062004c98565b73ffffffffffffffffffffffffffffffffffffffff928316815291166020820152604001604051809103906000f08015801562002c4b573d6000803e3d6000fd5b506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb2335f2e00000000000000000000000000000000000000000000000000000000600482015291925073ffffffffffffffffffffffffffffffffffffffff169063c31eb0e090602401600060405180830381600087803b15801562002cd957600080fd5b505af115801562002cee573d6000803e3d6000fd5b505060025460405173ffffffffffffffffffffffffffffffffffffffff90911692506000915062002d1f9062004c98565b73ffffffffffffffffffffffffffffffffffffffff928316815291166020820152604001604051809103906000f080158015620018dd573d6000803e3d6000fd5b600062002d6c62004064565b5060405160206024820152600560448201527f776f726c640000000000000000000000000000000000000000000000000000006064820152909150600090608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa777d0dc00000000000000000000000000000000000000000000000000000000179052600154600254600854925193945073ffffffffffffffffffffffffffffffffffffffff9182169363bd6af43493918316927f6ce4074a000000000000000000000000000000000000000000000000000000009262002ea19273f39fd6e51aad88f6f4ce6ab8827279cfffb92266929190911690889060240162005039565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b909216825262002f34929160040162004e58565b600060405180830381600087803b15801562002f4f57600080fd5b505af115801562002f64573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b15801562002fe857600080fd5b505af115801562002ffd573d6000803e3d6000fd5b50506009546040517f09c5eabe00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911692506309c5eabe91506200187590849060040162005239565b60008054610100900460ff16156200307a5750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620031be5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000008284015282518083038401815260608301909352600092909162003122917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016200524e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526200315c9162005298565b6000604051808303816000865af19150503d80600081146200319b576040519150601f19603f3d011682016040523d82523d6000602084013e620031a0565b606091505b5091505080806020019051810190620031ba9190620052b6565b9150505b919050565b60405160206024820152600560448201527f776f726c640000000000000000000000000000000000000000000000000000006064820152600090608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa777d0dc0000000000000000000000000000000000000000000000000000000017905260015490517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb5ba4c4d00000000000000000000000000000000000000000000000000000000600482015291925073ffffffffffffffffffffffffffffffffffffffff169063c31eb0e090602401600060405180830381600087803b1580156200330257600080fd5b505af115801562003317573d6000803e3d6000fd5b5050600954600a54600b546040517fb73c1cfc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff938416955063b73c1cfc945062003387939283169290911690869060019060009060040162004e91565b6000604051808303816000875af1158015620033a7573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620033ef919081019062004faf565b506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb5ba4c4d00000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063c31eb0e090602401600060405180830381600087803b1580156200347c57600080fd5b505af115801562003491573d6000803e3d6000fd5b5050600954600a54600b546040517fcd685c2c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff938416955063cd685c2c945062003501939283169290911690869060019060009060040162004e91565b6000604051808303816000875af115801562003521573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262002b4e919081019062004faf565b60006200357562004064565b5060405160206024820152600560448201527f776f726c640000000000000000000000000000000000000000000000000000006064820152909150600090608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa777d0dc00000000000000000000000000000000000000000000000000000000179052600154600254600854925193945073ffffffffffffffffffffffffffffffffffffffff9182169363bd6af43493918316927f6ce4074a0000000000000000000000000000000000000000000000000000000092620036aa9273f39fd6e51aad88f6f4ce6ab8827279cfffb92266929190911690889060240162005039565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b90921682526200373d929160040162004e58565b600060405180830381600087803b1580156200375857600080fd5b505af11580156200376d573d6000803e3d6000fd5b5050600154600254600a54600b546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8981166004830152948516965063bd6af4349550928416937f654a9eda00000000000000000000000000000000000000000000000000000000938993821692919091169082906370a0823190602401602060405180830381865afa15801562003823573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200384991906200507d565b600b546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c81166004830152909116906370a0823190602401602060405180830381865afa158015620038ba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620038e091906200507d565b60405173ffffffffffffffffffffffffffffffffffffffff95861660248201529385166044850152939091166064830152608482015260a481019190915260c401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b9092168252620039b4929160040162004e58565b600060405180830381600087803b158015620039cf57600080fd5b505af1158015620039e4573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b15801562003a6857600080fd5b505af115801562003a7d573d6000803e3d6000fd5b5050600954600a54600b546040517fb73c1cfc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff938416955063b73c1cfc945062001875939283169290911690869060019060009060040162004e91565b600954604080517fc12c21c0000000000000000000000000000000000000000000000000000000008152905162003bdc9273ffffffffffffffffffffffffffffffffffffffff169163c12c21c09160048083019260209291908290030181865afa15801562003b60573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003b86919062004dbd565b60025460408051808201909152601881527f496e636f727265637420437265646974204d616e616765720000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff90911690620044bc565b600954604080517f2f7a1881000000000000000000000000000000000000000000000000000000008152905162003d459273ffffffffffffffffffffffffffffffffffffffff1691632f7a18819160048083019260209291908290030181865afa15801562003c4f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003c75919062004dbd565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa15801562003ce3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003d09919062004dbd565b6040518060400160405280601781526020017f496e636f72726563742043726564697420466163616465000000000000000000815250620044bc565b600954604080517fbd90df70000000000000000000000000000000000000000000000000000000008152905162003e349273ffffffffffffffffffffffffffffffffffffffff169163bd90df709160048083019260209291908290030181865afa15801562003db8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003dde919062004dbd565b60085460408051808201909152601981527f496e636f72726563742074617267657420636f6e747261637400000000000000602082015273ffffffffffffffffffffffffffffffffffffffff90911690620044bc565b565b600062003e4262004064565b506001546002546040805173ffffffffffffffffffffffffffffffffffffffff85811660248084019190915283518084039091018152604490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f953730180000000000000000000000000000000000000000000000000000000017905291517fbd6af4340000000000000000000000000000000000000000000000000000000081529495509281169363bd6af4349362003f0d9392909216919060040162004e58565b600060405180830381600087803b15801562003f2857600080fd5b505af115801562003f3d573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b15801562003fc157600080fd5b505af115801562003fd6573d6000803e3d6000fd5b50506009546040517f33a9edaf00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015290911692506333a9edaf9150602401600060405180830381600087803b1580156200404857600080fd5b505af11580156200405d573d6000803e3d6000fd5b5050505050565b6000806000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635f7c9bd06040518163ffffffff1660e01b8152600401602060405180830381865afa158015620040d7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620040fd91906200507d565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015291925073ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b1580156200417e57600080fd5b505af115801562004193573d6000803e3d6000fd5b50506003546040517f6c8f225d0000000000000000000000000000000000000000000000000000000081526004810185905273f39fd6e51aad88f6f4ce6ab8827279cfffb92266602482015260646044820181905260009082015273ffffffffffffffffffffffffffffffffffffffff9091169250636c8f225d9150608401600060405180830381600087803b1580156200422d57600080fd5b505af115801562004242573d6000803e3d6000fd5b50506002546040517fe958b70400000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063e958b7049150602401602060405180830381865afa158015620042c9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620042ef919062004dbd565b6006546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80841660048301529295509116906370a0823190602401602060405180830381865afa15801562004362573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200438891906200507d565b600154604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301526024820192909252600d60448201527f6372656469744163636f756e74000000000000000000000000000000000000006064820152929450169063c657c71890608401600060405180830381600087803b1580156200442d57600080fd5b505af115801562004442573d6000803e3d6000fd5b50505050509091565b62004469848484846040518060200160405280600081525062004535565b50505050565b818314620018dd577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf358381604051620044a89190620052da565b60405180910390a1620018dd83836200466e565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614620018dd577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf358381604051620045219190620052da565b60405180910390a1620018dd838362004780565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff16620045bf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f74657374546f6b656e5375697465206973206e6f742073657400000000000000604482015260640160405180910390fd5b6000546040517f67b426450000000000000000000000000000000000000000000000000000000081526200405d9162010000900473ffffffffffffffffffffffffffffffffffffffff16906367b42645906200462090899060040162004d84565b602060405180830381865afa1580156200463e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004664919062004dbd565b85858585620048ac565b80821462002b4e577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f50604051620046fc9060208082526022908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b75696e60408201527f745d000000000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a88160405162004735919062005323565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a8826040516200476e91906200536f565b60405180910390a162002b4e62004aea565b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462002b4e577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f506040516200483a9060208082526025908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b61646460408201527f726573735d000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f81604051620048739190620053ad565b60405180910390a17f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f826040516200476e91906200540f565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301526000919087169063dd62ed3e90604401602060405180830381865afa15801562004925573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200494b91906200507d565b905082811462004ade577f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f828773ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015620049c3573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262004a0b919081019062004faf565b60405160200162004a1e9291906200544d565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905262004a5a918890620054d3565b60405180910390a160408051818152600a818301527f207370656e6465723a2000000000000000000000000000000000000000000000606082015273ffffffffffffffffffffffffffffffffffffffff8616602082015290517f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f9181900360800190a15b6200253281846200466e565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1562004c3f5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000009282019290925260016060820152600091907f70ca10bbd0dbfd9020a9f4b13402c16cb120705e0d1c0aeab10fa353ae586fc490608001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905262004bbc92916020016200524e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905262004bf69162005298565b6000604051808303816000865af19150503d806000811462004c35576040519150601f19603f3d011682016040523d82523d6000602084013e62004c3a565b606091505b505050505b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055565b617a51806200550e83390190565b62031ed6806200cf5f83390190565b6102ba806203ee3583390190565b6118e8806203f0ef83390190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562004d105762004d1062004ca6565b500290565b600b811062004d4d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b73ffffffffffffffffffffffffffffffffffffffff831681526040810162004d7d602083018462004d15565b9392505050565b6020810162004d94828462004d15565b92915050565b73ffffffffffffffffffffffffffffffffffffffff81168114620012ee57600080fd5b60006020828403121562004dd057600080fd5b815162004d7d8162004d9a565b60005b8381101562004dfa57818101518382015260200162004de0565b83811115620044695750506000910152565b6000815180845262004e2681602086016020860162004ddd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8316815260406020820152600062004e89604083018462004e0c565b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525060a0604083015262004ecc60a083018662004e0c565b9315156060830152509015156080909101529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff8084111562004f325762004f3262004ee5565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171562004f7b5762004f7b62004ee5565b8160405280935085815286868601111562004f9557600080fd5b62004fa586602083018762004ddd565b5050509392505050565b60006020828403121562004fc257600080fd5b815167ffffffffffffffff81111562004fda57600080fd5b8201601f8101841362004fec57600080fd5b62004e898482516020840162004f14565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141562005032576200503262004ca6565b5060010190565b600073ffffffffffffffffffffffffffffffffffffffff80861683528085166020840152506060604083015262005074606083018462004e0c565b95945050505050565b6000602082840312156200509057600080fd5b5051919050565b600073ffffffffffffffffffffffffffffffffffffffff8089168352808816602084015280871660408401525060c06060830152620050da60c083018662004e0c565b93151560808301525090151560a090910152949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015620051c1578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00185528151805173ffffffffffffffffffffffffffffffffffffffff168452870151878401879052620051ad8785018262004e0c565b95880195935050908601906001016200514a565b509098975050505050505050565b60408101620051df828562004d15565b73ffffffffffffffffffffffffffffffffffffffff831660208301529392505050565b6060810162005212828662004d15565b73ffffffffffffffffffffffffffffffffffffffff93909316602082015260400152919050565b60208152600062004d7d602083018462004e0c565b7fffffffff0000000000000000000000000000000000000000000000000000000083168152600082516200528a81600485016020870162004ddd565b919091016004019392505050565b60008251620052ac81846020870162004ddd565b9190910192915050565b600060208284031215620052c957600080fd5b8151801515811462004d7d57600080fd5b60408152600560408201527f4572726f72000000000000000000000000000000000000000000000000000000606082015260806020820152600062004d7d608083018462004e0c565b6040815260006200536160408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b905082602083015292915050565b6040815260006200536160408301600a81527f2020202041637475616c00000000000000000000000000000000000000000000602082015260400190565b604081526000620053eb60408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b905073ffffffffffffffffffffffffffffffffffffffff8316602083015292915050565b604081526000620053eb60408301600a81527f2020202041637475616c00000000000000000000000000000000000000000000602082015260400190565b600083516200546181846020880162004ddd565b7f496e636f7272656374200000000000000000000000000000000000000000000090830190815283516200549d81600a84016020880162004ddd565b7f20416c6c6f77616e6365206f6e206163636f756e743a20200000000000000000600a9290910191820152602201949350505050565b604081526000620054e8604083018562004e0c565b905073ffffffffffffffffffffffffffffffffffffffff83166020830152939250505056fe60806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d00011790553480156200003a57600080fd5b506040805161018081019091526000908060c081018060018152604080518082018252600381526244414960e81b6020828101919091528301526012908201526305f5e100606082015260800160018152602001600081525081526020016040518060c001604052806002600a811115620000b957620000b962000b78565b815260408051808201825260048152635553444360e01b6020828101919091528301526006908201526305f5e100606082015260800160018152602001600081525081526020016040518060c001604052806003600a81111562000121576200012162000b78565b815260408051808201825260048152630ae8aa8960e31b602082810191909152830152601290820152644a817c8000606082015260800160028152602001600081525081526020016040518060c001604052806004600a8111156200018a576200018a62000b78565b815260408051808201825260048152634c494e4b60e01b6020828101919091528301526012908201526359682f00606082015260800160018152602001600081525081526020016040518060c001604052806005600a811115620001f257620001f262000b78565b815260408051808201825260048152631554d11560e21b602082810191909152830152601290820152633b023380606082015260800160018152602001600081525081526020016040518060c001604052806006600a8111156200025a576200025a62000b78565b815260408051808201825260058152640e6e88aa8960db1b602082810191909152830152601290820152644cd588640060608201526080016003815260200160009052905260408051610140810190915290915060009080608081018060078152602001604051806040016040528060048152602001636344414960e01b8152508152602001601260ff1681526020016305f5e100815260200160048081111562000309576200030962000b78565b8152602001600181525081526020016040518060c001604052806008600a81111562000339576200033962000b78565b81526040805180820182526005815264635553444360d81b6020828101919091528301526006908201526305f5e100606082015260800160048152602001600281525081526020016040518060c001604052806009600a811115620003a257620003a262000b78565b8152604080518082018252600581526418d554d11560da1b602082810191909152830152601290820152633b023380606082015260800160048152602001600581525081526020016040518060c00160405280600a808111156200040a576200040a62000b78565b81526040805180820182526005815264634c494e4b60d81b6020828101919091528301526012908201526359682f00606082015260800160048152602001600490529052905060005b600681101562000496576200048183826006811062000476576200047662000b8e565b6020020151620004db565b806200048d8162000ba4565b91505062000453565b5060005b6004811015620004d257620004bd82826004811062000476576200047662000b8e565b80620004c98162000ba4565b9150506200049a565b50505062000d14565b6000600282608001516004811115620004f857620004f862000b78565b14156200054e576040516200050d9062000a8c565b604051809103906000f0801580156200052a573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b03831617905590506200071e565b60038260800151600481111562000569576200056962000b78565b1415620005a4576040516200057e9062000a9a565b604051809103906000f0801580156200059b573d6000803e3d6000fd5b5090506200071e565b600182608001516004811115620005bf57620005bf62000b78565b1415620005f157816020015182602001518360400151604051620005e39062000aa8565b6200057e9392919062000c1e565b6004826080015160048111156200060c576200060c62000b78565b1415620006be576000600260008460a00151600a81111562000632576200063262000b78565b600a81111562000646576200064662000b78565b815260200190815260200160002060009054906101000a90046001600160a01b0316905082602001518360200151846040015183604051620006889062000ab6565b62000697949392919062000c5b565b604051809103906000f080158015620006b4573d6000803e3d6000fd5b509150506200071e565b60405162461bcd60e51b815260206004820152602b60248201527f74657374546f6b656e53756974653a204372656174696e6720756e6b6e6f776e60448201526a20746f6b656e207479706560a81b606482015260840160405180910390fd5b60005460208301516040516318caf8e360e31b8152620100009092046001600160a01b03169163c657c718916200075b9185919060040162000ca9565b600060405180830381600087803b1580156200077657600080fd5b505af11580156200078b573d6000803e3d6000fd5b50505050600082606001516008604051620007a69062000ac4565b91825260ff166020820152604001604051809103906000f080158015620007d1573d6000803e3d6000fd5b50905081600260008560000151600a811115620007f257620007f262000b78565b600a81111562000806576200080662000b78565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055508260600151600560008560000151600a8111156200085a576200085a62000b78565b600a8111156200086e576200086e62000b78565b8152602080820192909252604090810160009081209390935585516001600160a01b03861684526008909252909120805460ff1916600183600a811115620008ba57620008ba62000b78565b02179055508260800151600360008560000151600a811115620008e157620008e162000b78565b600a811115620008f557620008f562000b78565b81526020810191909152604001600020805460ff1916600183600481111562000922576200092262000b78565b0217905550604080518082019091526001600160a01b0380841682528281166020808401918252600780546001810182556000918252945160029095027fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688810180549686166001600160a01b031997881617905592517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c689909301805493909416929094169190911790915584015184519091600491600a811115620009eb57620009eb62000b78565b600a811115620009ff57620009ff62000b78565b8152602001908152602001600020908051906020019062000a2292919062000ad2565b5080600660008560000151600a81111562000a415762000a4162000b78565b600a81111562000a555762000a5562000b78565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550505050565b610ab1806200285183390190565b611224806200330283390190565b611758806200452683390190565b6117098062005c7e83390190565b6106ca806200738783390190565b82805462000ae09062000cd7565b90600052602060002090601f01602090048101928262000b04576000855562000b4f565b82601f1062000b1f57805160ff191683800117855562000b4f565b8280016001018555821562000b4f579182015b8281111562000b4f57825182559160200191906001019062000b32565b5062000b5d92915062000b61565b5090565b5b8082111562000b5d576000815560010162000b62565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600060001982141562000bc757634e487b7160e01b600052601160045260246000fd5b5060010190565b6000815180845260005b8181101562000bf65760208185018101518683018201520162000bd8565b8181111562000c09576000602083870101525b50601f01601f19169290920160200192915050565b60608152600062000c33606083018662000bce565b828103602084015262000c47818662000bce565b91505060ff83166040830152949350505050565b60808152600062000c70608083018762000bce565b828103602084015262000c84818762000bce565b60ff95909516604084015250506001600160a01b039190911660609091015292915050565b6001600160a01b038316815260406020820181905260009062000ccf9083018462000bce565b949350505050565b600181811c9082168062000cec57607f821691505b6020821081141562000d0e57634e487b7160e01b600052602260045260246000fd5b50919050565b611b2d8062000d246000396000f3fe6080604052600436106101635760003560e01c80638eb86e8b116100c0578063c6c3bbe611610074578063d051a62211610059578063d051a62214610490578063eebab8ef146104b0578063fa7626d4146104d057600080fd5b8063c6c3bbe614610433578063c74912d21461045357600080fd5b80639b140a85116100a55780639b140a85146103e6578063b36ba20814610406578063ba414fa61461040e57600080fd5b80638eb86e8b1461038357806398cdaadf146103a357600080fd5b80636a72bde71161011757806388327863116100fc578063883278631461030857806388f776a2146103365780638a3177a31461035657600080fd5b80636a72bde7146102c45780636ca42ae3146102e657600080fd5b8063440864fa11610148578063440864fa146102025780634b57b0be1461022f57806367b426451461028157600080fd5b806304bc3b1c1461016f57806310c7f0b9146101b557600080fd5b3661016a57005b600080fd5b34801561017b57600080fd5b5061019f61018a3660046116f6565b60086020526000908152604090205460ff1681565b6040516101ac9190611742565b60405180910390f35b3480156101c157600080fd5b506101d56101d036600461175c565b6104ea565b6040805173ffffffffffffffffffffffffffffffffffffffff9384168152929091166020830152016101ac565b34801561020e57600080fd5b5061022261021d366004611784565b610530565b6040516101ac91906117cb565b34801561023b57600080fd5b5060015461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101ac565b34801561028d57600080fd5b5061025c61029c366004611784565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156102d057600080fd5b506102e46102df36600461181c565b6105ca565b005b3480156102f257600080fd5b506102fb610730565b6040516101ac919061186b565b34801561031457600080fd5b506103286103233660046118d4565b6107b5565b6040519081526020016101ac565b34801561034257600080fd5b506102e461035136600461190b565b610888565b34801561036257600080fd5b50610328610371366004611784565b60056020526000908152604090205481565b34801561038f57600080fd5b506102e461039e366004611954565b6108b9565b3480156103af57600080fd5b5061025c6103be366004611784565b60066020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156103f257600080fd5b506102e4610401366004611993565b610a73565b6102e4610b22565b34801561041a57600080fd5b50610423610ba0565b60405190151581526020016101ac565b34801561043f57600080fd5b506102e461044e3660046119b3565b610d00565b34801561045f57600080fd5b5061048361046e366004611784565b60036020526000908152604090205460ff1681565b6040516101ac91906119d3565b34801561049c57600080fd5b506103286104ab36600461190b565b610daf565b3480156104bc57600080fd5b506102e46104cb366004611954565b610e8b565b3480156104dc57600080fd5b506000546104239060ff1681565b600781815481106104fa57600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff91821692501682565b60046020526000908152604090208054610549906119e7565b80601f0160208091040260200160405190810160405280929190818152602001828054610575906119e7565b80156105c25780601f10610597576101008083540402835291602001916105c2565b820191906000526020600020905b8154815290600101906020018083116105a557829003601f168201915b505050505081565b6000546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152620100009092049091169063ca669fa790602401600060405180830381600087803b15801561063e57600080fd5b505af1158015610652573d6000803e3d6000fd5b505050506002600085600a81111561066c5761066c611713565b600a81111561067d5761067d611713565b8152602081019190915260409081016000205490517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490529091169063095ea7b3906044016020604051808303816000875af1158015610705573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107299190611a3b565b5050505050565b60606007805480602002602001604051908101604052809291908181526020016000905b828210156107ac5760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff908116835260019182015416828401529083529092019101610754565b50505050905090565b60006002600084600a8111156107cd576107cd611713565b600a8111156107de576107de611713565b8152602081019190915260409081016000205490517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152909116906370a0823190602401602060405180830381865afa15801561085d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108819190611a5d565b9392505050565b6108b48383837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6105ca565b505050565b60016003600085600a8111156108d1576108d1611713565b600a8111156108e2576108e2611713565b815260208101919091526040016000205460ff16600481111561090757610907611713565b14610999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f74657374546f6b656e53756974653a20547279696e6720746f206275726e206160448201527f206e6f6e2d6e6f726d616c20746f6b656e00000000000000000000000000000060648201526084015b60405180910390fd5b6002600084600a8111156109af576109af611713565b600a8111156109c0576109c0611713565b8152602081019190915260409081016000205490517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526024820184905290911690639dc29fac906044015b6020604051808303816000875af1158015610a49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6d9190611a3b565b50505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604081205460ff169081600a811115610aaf57610aaf611713565b1415610b17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f20746f6b656e2077697468207375636820616464726573730000000000006044820152606401610990565b610a6d818484610888565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015610b8c57600080fd5b505af1158015610729573d6000803e3d6000fd5b60008054610100900460ff1615610bc05750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610cfb5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610c65917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc491608001611a76565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052610c9d91611abe565b6000604051808303816000865af19150503d8060008114610cda576040519150601f19603f3d011682016040523d82523d6000602084013e610cdf565b606091505b5091505080806020019051810190610cf79190611a3b565b9150505b919050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604081205460ff169081600a811115610d3c57610d3c611713565b1415610da4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f20746f6b656e2077697468207375636820616464726573730000000000006044820152606401610990565b610a6d818484610e8b565b60006002600085600a811115610dc757610dc7611713565b600a811115610dd857610dd8611713565b8152602081019190915260409081016000205490517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301529091169063dd62ed3e90604401602060405180830381865afa158015610e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e839190611a5d565b949350505050565b60026003600085600a811115610ea357610ea3611713565b600a811115610eb457610eb4611713565b815260208101919091526040016000205460ff166004811115610ed957610ed9611713565b1415610ff6576000546040517fc88a5e6d000000000000000000000000000000000000000000000000000000008152306004820152602481018390526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c88a5e6d90604401600060405180830381600087803b158015610f5657600080fd5b505af1158015610f6a573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015610fd857600080fd5b505af1158015610fec573d6000803e3d6000fd5b505050505061163c565b600380600085600a81111561100d5761100d611713565b600a81111561101e5761101e611713565b815260208101919091526040016000205460ff16600481111561104357611043611713565b14156111aa576000546040517fc88a5e6d000000000000000000000000000000000000000000000000000000008152306004820152602481018390526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c88a5e6d90604401600060405180830381600087803b1580156110c057600080fd5b505af11580156110d4573d6000803e3d6000fd5b505050506002600084600a8111156110ee576110ee611713565b600a8111156110ff576110ff611713565b8152602081019190915260409081016000205490517fa1903eab00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a1903eab90839060240160206040518083038185885af115801561117f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906111a49190611a5d565b5061163c565b60046003600085600a8111156111c2576111c2611713565b600a8111156111d3576111d3611713565b815260208101919091526040016000205460ff1660048111156111f8576111f8611713565b141561148f5760006002600085600a81111561121657611216611713565b600a81111561122757611227611713565b815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c49190611ada565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600860205260409020549091506112fb9060ff163084610e8b565b8073ffffffffffffffffffffffffffffffffffffffff1663095ea7b36002600087600a81111561132d5761132d611713565b600a81111561133e5761133e611713565b81526020810191909152604090810160002054905160e083901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602481018590526044016020604051808303816000875af11580156113c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e69190611a3b565b506002600085600a8111156113fd576113fd611713565b600a81111561140e5761140e611713565b8152602081019190915260409081016000205490517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810184905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f1990604401600060405180830381600087803b158015610fd857600080fd5b60016003600085600a8111156114a7576114a7611713565b600a8111156114b8576114b8611713565b815260208101919091526040016000205460ff1660048111156114dd576114dd611713565b14156115b4576002600084600a8111156114f9576114f9611713565b600a81111561150a5761150a611713565b8152602081019190915260409081016000205490517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f19906044016020604051808303816000875af1158015611590573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a49190611a3b565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f74657374546f6b656e53756974653a20547279696e6720746f207472616e736660448201527f657220756e6b6e6f776e20746f6b656e000000000000000000000000000000006064820152608401610990565b6002600084600a81111561165257611652611713565b600a81111561166357611663611713565b8152602081019190915260409081016000205490517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490529091169063a9059cbb90604401610a2a565b73ffffffffffffffffffffffffffffffffffffffff811681146116f357600080fd5b50565b60006020828403121561170857600080fd5b8135610881816116d1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60208101600b831061175657611756611713565b91905290565b60006020828403121561176e57600080fd5b5035919050565b8035600b8110610cfb57600080fd5b60006020828403121561179657600080fd5b61088182611775565b60005b838110156117ba5781810151838201526020016117a2565b83811115610a6d5750506000910152565b60208152600082518060208401526117ea81604085016020870161179f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000806080858703121561183257600080fd5b61183b85611775565b9350602085013561184b816116d1565b9250604085013561185b816116d1565b9396929550929360600135925050565b602080825282518282018190526000919060409081850190868401855b828110156118c7578151805173ffffffffffffffffffffffffffffffffffffffff90811686529087015116868501529284019290850190600101611888565b5091979650505050505050565b600080604083850312156118e757600080fd5b6118f083611775565b91506020830135611900816116d1565b809150509250929050565b60008060006060848603121561192057600080fd5b61192984611775565b92506020840135611939816116d1565b91506040840135611949816116d1565b809150509250925092565b60008060006060848603121561196957600080fd5b61197284611775565b92506020840135611982816116d1565b929592945050506040919091013590565b6000806000606084860312156119a857600080fd5b8335611929816116d1565b6000806000606084860312156119c857600080fd5b8335611972816116d1565b602081016005831061175657611756611713565b600181811c908216806119fb57607f821691505b60208210811415611a35577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600060208284031215611a4d57600080fd5b8151801515811461088157600080fd5b600060208284031215611a6f57600080fd5b5051919050565b7fffffffff000000000000000000000000000000000000000000000000000000008316815260008251611ab081600485016020870161179f565b919091016004019392505050565b60008251611ad081846020870161179f565b9190910192915050565b600060208284031215611aec57600080fd5b8151610881816116d156fea264697066735822122010fe735ed069aca27931edce4ba2ff14ec7886bf21b0eea685a884f9200fb49e64736f6c634300080a003360c0604052600d60808190526c2bb930b83832b21022ba3432b960991b60a090815261002e916000919061007a565b50604080518082019091526004808252630ae8aa8960e31b602090920191825261005a9160019161007a565b506002805460ff1916601217905534801561007457600080fd5b5061014e565b82805461008690610113565b90600052602060002090601f0160209004810192826100a857600085556100ee565b82601f106100c157805160ff19168380011785556100ee565b828001600101855582156100ee579182015b828111156100ee5782518255916020019190600101906100d3565b506100fa9291506100fe565b5090565b5b808211156100fa57600081556001016100ff565b600181811c9082168061012757607f821691505b6020821081141561014857634e487b7160e01b600052602260045260246000fd5b50919050565b6109548061015d6000396000f3fe6080604052600436106100cb5760003560e01c806340c10f1911610074578063a9059cbb1161004e578063a9059cbb14610225578063d0e30db014610245578063dd62ed3e1461024d57600080fd5b806340c10f19146101c357806370a08231146101e357806395d89b411461021057600080fd5b806323b872dd116100a557806323b872dd146101575780632e1a7d4d14610177578063313ce5671461019757600080fd5b806306fdde03146100df578063095ea7b31461010a57806318160ddd1461013a57600080fd5b366100da576100d8610285565b005b600080fd5b3480156100eb57600080fd5b506100f46102e0565b6040516101019190610703565b60405180910390f35b34801561011657600080fd5b5061012a61012536600461079f565b61036e565b6040519015158152602001610101565b34801561014657600080fd5b50475b604051908152602001610101565b34801561016357600080fd5b5061012a6101723660046107c9565b6103e7565b34801561018357600080fd5b506100d8610192366004610805565b6105fe565b3480156101a357600080fd5b506002546101b19060ff1681565b60405160ff9091168152602001610101565b3480156101cf57600080fd5b506100d86101de36600461079f565b6106a4565b3480156101ef57600080fd5b506101496101fe36600461081e565b60036020526000908152604090205481565b34801561021c57600080fd5b506100f46106e2565b34801561023157600080fd5b5061012a61024036600461079f565b6106ef565b6100d8610285565b34801561025957600080fd5b50610149610268366004610839565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102a490849061089b565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102ed906108b3565b80601f0160208091040260200160405190810160405280929190818152602001828054610319906108b3565b80156103665780601f1061033b57610100808354040283529160200191610366565b820191906000526020600020905b81548152906001019060200180831161034957829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103d69086815260200190565b60405180910390a350600192915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561041957600080fd5b73ffffffffffffffffffffffffffffffffffffffff8416331480159061048f575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105175773ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020548211156104d157600080fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915281208054849290610511908490610907565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061054c908490610907565b909155505073ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260408120805484929061058690849061089b565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516105ec91815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561061a57600080fd5b3360009081526003602052604081208054839290610639908490610907565b9091555050604051339082156108fc029083906000818181858888f1935050505015801561066b573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260036020526040812080548392906106d990849061089b565b90915550505050565b600180546102ed906108b3565b60006106fc3384846103e7565b9392505050565b600060208083528351808285015260005b8181101561073057858101830151858201604001528201610714565b81811115610742576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461079a57600080fd5b919050565b600080604083850312156107b257600080fd5b6107bb83610776565b946020939093013593505050565b6000806000606084860312156107de57600080fd5b6107e784610776565b92506107f560208501610776565b9150604084013590509250925092565b60006020828403121561081757600080fd5b5035919050565b60006020828403121561083057600080fd5b6106fc82610776565b6000806040838503121561084c57600080fd5b61085583610776565b915061086360208401610776565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156108ae576108ae61086c565b500190565b600181811c908216806108c757607f821691505b60208210811415610901577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000828210156109195761091961086c565b50039056fea26469706673582212206ec943fa4e3b70d8fca6c25b6aa26fa18e8f8952ce3bc4d5afcb443bf3097c0564736f6c634300080a003360806040526000600255600060035534801561001a57600080fd5b506111fa8061002a6000396000f3fe60806040526004361061016e5760003560e01c80637a28fb88116100cb578063bdd17e1c1161007f578063dd62ed3e11610059578063dd62ed3e146103ee578063ee7a7c0414610441578063f5eb42dc1461046157600080fd5b8063bdd17e1c146103ad578063cdb9a21c146103c3578063d5002f2e146103d957600080fd5b8063a1903eab116100b0578063a1903eab1461035a578063a457c2d71461036d578063a9059cbb1461038d57600080fd5b80637a28fb88146102f457806395d89b411461031457600080fd5b806323b872dd1161012257806337cfdaca1161010757806337cfdaca1461020d57806339509351146102b457806370a08231146102d457600080fd5b806323b872dd14610278578063313ce5671461029857600080fd5b806318160ddd1161015357806318160ddd1461020d578063192084511461023057806322301f6e1461025057600080fd5b806306fdde0314610185578063095ea7b3146101dd57600080fd5b366101805761017d6000610481565b50005b600080fd5b34801561019157600080fd5b5060408051808201909152601781527f4c6971756964207374616b656420457468657220322e3000000000000000000060208201525b6040516101d49190610f63565b60405180910390f35b3480156101e957600080fd5b506101fd6101f8366004610fff565b610545565b60405190151581526020016101d4565b34801561021957600080fd5b5061022261055b565b6040519081526020016101d4565b34801561023c57600080fd5b5061022261024b366004611029565b61056b565b34801561025c57600080fd5b5061027661026b366004611042565b600391909155600255565b005b34801561028457600080fd5b506101fd610293366004611064565b6105ab565b3480156102a457600080fd5b50604051601281526020016101d4565b3480156102c057600080fd5b506101fd6102cf366004610fff565b610696565b3480156102e057600080fd5b506102226102ef3660046110a0565b6106d9565b34801561030057600080fd5b5061022261030f366004611029565b61070e565b34801561032057600080fd5b5060408051808201909152600581527f737445544800000000000000000000000000000000000000000000000000000060208201526101c7565b6102226103683660046110a0565b61073a565b34801561037957600080fd5b506101fd610388366004610fff565b610745565b34801561039957600080fd5b506101fd6103a8366004610fff565b6107f9565b3480156103b957600080fd5b5061022260035481565b3480156103cf57600080fd5b5061022260025481565b3480156103e557600080fd5b50610222610806565b3480156103fa57600080fd5b506102226104093660046110bb565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b34801561044d57600080fd5b5061027661045c366004610fff565b610811565b34801561046d57600080fd5b5061022261047c3660046110a0565b61081f565b60003334806104f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f5a45524f5f4445504f534954000000000000000000000000000000000000000060448201526064015b60405180910390fd5b60006104fc8261056b565b9050806105065750805b8160036000828254610518919061111d565b909155506105289050838261084a565b61053383838761093b565b61053d8382610992565b949350505050565b60006105523384846109ea565b50600192915050565b600061056660035490565b905090565b60008061057760035490565b9050806105875750600092915050565b6105a48161059e61059760025490565b8690610b52565b90610b5e565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001602090815260408083203384529091528120548281101561066c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f5452414e534645525f414d4f554e545f455843454544535f414c4c4f57414e4360448201527f450000000000000000000000000000000000000000000000000000000000000060648201526084016104e8565b610677858585610b6a565b61068b85336106868487610bef565b6109ea565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916105529185906106869086610bfb565b73ffffffffffffffffffffffffffffffffffffffff81166000908152602081905260408120546107089061070e565b92915050565b60008061071a60025490565b90508061072a5750600092915050565b6105a48161059e61059760035490565b600061070882610481565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156107e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4445435245415345445f414c4c4f57414e43455f42454c4f575f5a45524f000060448201526064016104e8565b6107ef33856106868487610bef565b5060019392505050565b6000610552338484610b6a565b600061056660025490565b61081b8282610c07565b5050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040812054610708565b73ffffffffffffffffffffffffffffffffffffffff82166108c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4d494e545f544f5f5448455f5a45524f5f41444452455353000000000000000060448201526064016104e8565b80600260008282546108d9919061111d565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205461090e9082610bfb565b73ffffffffffffffffffffffffffffffffffffffff90921660009081526020819052604090209190915550565b6040805183815273ffffffffffffffffffffffffffffffffffffffff83811660208301528516917fed8dd430b1e4bba98e943dc5b157cf7b54d9e12916d6c474ff5733a95001d03b910160405180910390a2505050565b73ffffffffffffffffffffffffffffffffffffffff821660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6109d58461070e565b60405190815260200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff8316610a67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f415050524f56455f46524f4d5f5a45524f5f414444524553530000000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff8216610ae4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f415050524f56455f544f5f5a45524f5f4144445245535300000000000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006105a48284611135565b60006105a48284611172565b6000610b758261056b565b9050610b82848483610d64565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610be191815260200190565b60405180910390a350505050565b60006105a482846111ad565b60006105a4828461111d565b73ffffffffffffffffffffffffffffffffffffffff8216610c84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4255524e5f46524f4d5f5448455f5a45524f5f4144445245535300000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205480821115610d14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4255524e5f414d4f554e545f455843454544535f42414c414e4345000000000060448201526064016104e8565b8160026000828254610d2691906111ad565b90915550610d3690508183610bef565b73ffffffffffffffffffffffffffffffffffffffff9093166000908152602081905260409020929092555050565b73ffffffffffffffffffffffffffffffffffffffff8316610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f5452414e534645525f46524f4d5f5448455f5a45524f5f41444452455353000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff8216610e5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f5452414e534645525f544f5f5448455f5a45524f5f414444524553530000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205480821115610eee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5452414e534645525f414d4f554e545f455843454544535f42414c414e43450060448201526064016104e8565b610ef88183610bef565b73ffffffffffffffffffffffffffffffffffffffff8086166000908152602081905260408082209390935590851681522054610f349083610bfb565b73ffffffffffffffffffffffffffffffffffffffff909316600090815260208190526040902092909255505050565b600060208083528351808285015260005b81811015610f9057858101830151858201604001528201610f74565b81811115610fa2576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ffa57600080fd5b919050565b6000806040838503121561101257600080fd5b61101b83610fd6565b946020939093013593505050565b60006020828403121561103b57600080fd5b5035919050565b6000806040838503121561105557600080fd5b50508035926020909101359150565b60008060006060848603121561107957600080fd5b61108284610fd6565b925061109060208501610fd6565b9150604084013590509250925092565b6000602082840312156110b257600080fd5b6105a482610fd6565b600080604083850312156110ce57600080fd5b6110d783610fd6565b91506110e560208401610fd6565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611130576111306110ee565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561116d5761116d6110ee565b500290565b6000826111a8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000828210156111bf576111bf6110ee565b50039056fea2646970667358221220a5b4f31162ba2b8b3424cef84b31ef91d05a825243602b5fdf758ffb49b8246364736f6c634300080a003360a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a003360c06040523480156200001157600080fd5b506040516200170938038062001709833981016040819052620000349162000266565b8351849084906200004d906003906020850190620000f3565b50805162000063906004906020840190620000f3565b505050620000806200007a6200009d60201b60201c565b620000a1565b60ff9091166080526001600160a01b031660a05250620003479050565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b82805462000101906200030a565b90600052602060002090601f01602090048101928262000125576000855562000170565b82601f106200014057805160ff191683800117855562000170565b8280016001018555821562000170579182015b828111156200017057825182559160200191906001019062000153565b506200017e92915062000182565b5090565b5b808211156200017e576000815560010162000183565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c157600080fd5b81516001600160401b0380821115620001de57620001de62000199565b604051601f8301601f19908116603f0116810190828211818310171562000209576200020962000199565b816040528381526020925086838588010111156200022657600080fd5b600091505b838210156200024a57858201830151818301840152908201906200022b565b838211156200025c5760008385830101525b9695505050505050565b600080600080608085870312156200027d57600080fd5b84516001600160401b03808211156200029557600080fd5b620002a388838901620001af565b95506020870151915080821115620002ba57600080fd5b50620002c987828801620001af565b935050604085015160ff81168114620002e157600080fd5b60608601519092506001600160a01b0381168114620002ff57600080fd5b939692955090935050565b600181811c908216806200031f57607f821691505b602082108114156200034157634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05161138e6200037b600039600081816101f70152818161041f0152610600015260006101a2015261138e6000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80636f307dc3116100b257806395d89b4111610081578063a9059cbb11610066578063a9059cbb146102b5578063dd62ed3e146102c8578063f2fde38b1461030e57600080fd5b806395d89b411461029a578063a457c2d7146102a257600080fd5b80636f307dc3146101f257806370a082311461023e578063715018a6146102745780638da5cb5b1461027c57600080fd5b806323b872dd116100ee57806323b872dd14610188578063313ce5671461019b57806339509351146101cc57806340c10f19146101df57600080fd5b806306fdde0314610120578063095ea7b31461013e57806318160ddd146101615780631e9a695014610173575b600080fd5b610128610321565b604051610135919061112d565b60405180910390f35b61015161014c3660046111c9565b6103b3565b6040519015158152602001610135565b6002545b604051908152602001610135565b6101866101813660046111c9565b6103c9565b005b6101516101963660046111f3565b610491565b60405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610135565b6101516101da3660046111c9565b61057c565b6101866101ed3660046111c9565b6105c5565b6102197f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b61016561024c36600461122f565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610186610691565b60055473ffffffffffffffffffffffffffffffffffffffff16610219565b61012861071e565b6101516102b03660046111c9565b61072d565b6101516102c33660046111c9565b610805565b6101656102d6366004611251565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b61018661031c36600461122f565b610812565b60606003805461033090611284565b80601f016020809104026020016040519081016040528092919081815260200182805461035c90611284565b80156103a95780601f1061037e576101008083540402835291602001916103a9565b820191906000526020600020905b81548152906001019060200180831161038c57829003601f168201915b5050505050905090565b60006103c0338484610942565b50600192915050565b6103d33382610af5565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015610468573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048c91906112d8565b505050565b600061049e848484610ce2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6105718533858403610942565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916103c09185906105c0908690611329565b610942565b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906323b872dd906064016020604051808303816000875af115801561065e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068291906112d8565b5061068d8282610f96565b5050565b60055473ffffffffffffffffffffffffffffffffffffffff163314610712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161055b565b61071c60006110b6565b565b60606004805461033090611284565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156107ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161055b565b6107fb3385858403610942565b5060019392505050565b60006103c0338484610ce2565b60055473ffffffffffffffffffffffffffffffffffffffff163314610893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161055b565b73ffffffffffffffffffffffffffffffffffffffff8116610936576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161055b565b61093f816110b6565b50565b73ffffffffffffffffffffffffffffffffffffffff83166109e4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff8216610a87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8216610b98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015610c4e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290610c8a908490611341565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff8216610e28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610ede576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610f22908490611329565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f8891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161055b565b80600260008282546110259190611329565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152602081905260408120805483929061105f908490611329565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208083528351808285015260005b8181101561115a5785810183015185820160400152820161113e565b8181111561116c576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146111c457600080fd5b919050565b600080604083850312156111dc57600080fd5b6111e5836111a0565b946020939093013593505050565b60008060006060848603121561120857600080fd5b611211846111a0565b925061121f602085016111a0565b9150604084013590509250925092565b60006020828403121561124157600080fd5b61124a826111a0565b9392505050565b6000806040838503121561126457600080fd5b61126d836111a0565b915061127b602084016111a0565b90509250929050565b600181811c9082168061129857607f821691505b602082108114156112d2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156112ea57600080fd5b8151801515811461124a57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561133c5761133c6112fa565b500190565b600082821015611353576113536112fa565b50039056fea26469706673582212203a6db30cd3c097921df4156794aa7973eb848711deeb2cffd7c54a9df1fdb0a564736f6c634300080a003360a060405234801561001057600080fd5b506040516106ca3803806106ca83398101604081905261002f9161006c565b60009190915560ff166080526001805460506001600160501b031991821681179092556004805490911690911790554260028190556003556100a2565b6000806040838503121561007f57600080fd5b82519150602083015160ff8116811461009757600080fd5b809150509250929050565b60805161060e6100bc600039600060d3015261060e6000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80639a6fc8f511610081578063d62ada111161005b578063d62ada11146102dc578063f7a30806146102f4578063feaf968c1461030757600080fd5b80639a6fc8f5146101cd578063bd18ad531461023a578063cd653afc1461024d57600080fd5b806354fd4d50116100b257806354fd4d501461012d57806367e8d83d1461013c5780637284e4161461018e57600080fd5b8063313ce567146100ce5780633fd0875f1461010c575b600080fd5b6100f57f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020015b60405180910390f35b6004546a0100000000000000000000900460ff166040516101039190610441565b60405160018152602001610103565b61018c61014a366004610482565b600480549115156c01000000000000000000000000027fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff909216919091179055565b005b604080518082018252600c81527f7072696365206f7261636c6500000000000000000000000000000000000000006020820152905161010391906104ab565b6102036101db36600461053d565b60015460005460025460035460045469ffffffffffffffffffff948516941691939590929450565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610103565b61018c610248366004610558565b61030f565b61018c61025b366004610579565b6001805469ffffffffffffffffffff9586167fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090911617905560029290925560035560048054919092167fffffffffffffffffffffffffffffffffffffffff00ff00000000000000000000909116176b020000000000000000000000179055565b6102e461035f565b6040519015158152602001610103565b61018c6103023660046105bf565b600055565b610203610385565b600480548291907fffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff166b01000000000000000000000083600281111561035757610357610412565b021790555050565b600454600090610380906b010000000000000000000000900460ff166103d6565b905090565b60008060008060006004600c9054906101000a900460ff16156103a757600080fd5b505060015460005460025460035460045469ffffffffffffffffffff9485169893975091955093509190911690565b600060028260028111156103ec576103ec610412565b14156103f757600080fd5b600182600281111561040b5761040b610412565b1492915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016006831061047c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561049457600080fd5b813580151581146104a457600080fd5b9392505050565b600060208083528351808285015260005b818110156104d8578581018301518582016040015282016104bc565b818111156104ea576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803569ffffffffffffffffffff8116811461053857600080fd5b919050565b60006020828403121561054f57600080fd5b6104a48261051e565b60006020828403121561056a57600080fd5b8135600381106104a457600080fd5b6000806000806080858703121561058f57600080fd5b6105988561051e565b935060208501359250604085013591506105b46060860161051e565b905092959194509250565b6000602082840312156105d157600080fd5b503591905056fea264697066735822122014874f7a973b86501c4c1a8be32490fe902c8f088ee234d25f9b2497e19f9e5264736f6c634300080a003360806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d00011790553480156200003a57600080fd5b5060405162031ed638038062031ed68339810160408190526200005d91620015e8565b81816040516200006d9062001595565b604051809103906000f0801580156200008a573d6000803e3d6000fd5b5050600180546001600160a01b0319166001600160a01b038416908117909155604080516325abd85f60e11b81529051634b57b0be916004808201926020929091908290030181865afa158015620000e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200010c91906200162a565b73c4375b7de8af5a38a93548eb8453a498222c4ff26040516200012f90620015a3565b6001600160a01b03928316815291166020820152604001604051809103906000f08015801562000163573d6000803e3d6000fd5b50600380546001600160a01b0319166001600160a01b039290921691821790556040805163de28735960e01b8152905163de287359916004808201926020929091908290030181865afa158015620001bf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e591906200162a565b604051634910832f60e01b81527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526001600160a01b039190911690634910832f90602401600060405180830381600087803b1580156200023d57600080fd5b505af115801562000252573d6000803e3d6000fd5b50505050600360009054906101000a90046001600160a01b03166001600160a01b031663de2873596040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d091906200162a565b60035460405163f2fde38b60e01b81526001600160a01b03918216600482015291169063f2fde38b90602401600060405180830381600087803b1580156200031757600080fd5b505af11580156200032c573d6000803e3d6000fd5b505060035460015460408051636ca42ae360e01b815290516001600160a01b039384169550638874ff1f94509190921691636ca42ae39160048083019260009291908290030181865afa15801562000388573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620003b29190810190620016c5565b6040518263ffffffff1660e01b8152600401620003d09190620017b6565b600060405180830381600087803b158015620003eb57600080fd5b505af115801562000400573d6000803e3d6000fd5b50505050600360009054906101000a90046001600160a01b03166001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000458573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200047e91906200162a565b600280546001600160a01b0319166001600160a01b039290921691821790556040805163120d150d60e31b81529051639068a868916004808201926020929091908290030181865afa158015620004d9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004ff91906200162a565b600480546001600160a01b0319166001600160a01b0392831617815560025460408051631f94a27560e31b81529051919093169263fca513a892818101926020929091908290030181865afa1580156200055d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200058391906200162a565b600880546001600160a01b0319166001600160a01b0392831617905560025460408051630873769560e01b81529051919092169163087376959160048083019260209291908290030181865afa158015620005e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200060891906200162a565b600780546001600160a01b0319166001600160a01b039283161790556002546040805163c513c9bb60e01b81529051919092169163c513c9bb9160048083019260209291908290030181865afa15801562000667573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200068d91906200162a565b600680546001600160a01b0319166001600160a01b039283161790556001546040516367b4264560e01b81529116906367b4264590620006d29084906004016200184d565b602060405180830381865afa158015620006f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200071691906200162a565b600980546001600160a01b0319166001600160a01b0392831617905560035460408051630a55006360e21b815290519190921691632954018c9160048083019260209291908290030181865afa15801562000775573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200079b91906200162a565b6009546040516001600160a01b0390911690620007b890620015b2565b6001600160a01b03928316815291166020820152604001604051809103906000f080158015620007ec573d6000803e3d6000fd5b50600580546001600160a01b0319166001600160a01b039283169081179091556001549091169063eebab8ef90839062000825620011ec565b6200083290600a62001879565b6040518463ffffffff1660e01b815260040162000852939291906200189b565b600060405180830381600087803b1580156200086d57600080fd5b505af115801562000882573d6000803e3d6000fd5b505060065460055460405163d914cd4b60e01b81526001600160a01b0391821660048201529116925063d914cd4b9150602401600060405180830381600087803b158015620008d057600080fd5b505af1158015620008e5573d6000803e3d6000fd5b5050600f80546001600160801b031916670de0b6b3a76400001790555062000911925050620011ec9050565b6200091e90600a62001879565b600f80546001600160801b03908116600160801b9382168402818117938490556040805160a0810182529184169092178152939092041660208301526000919081016200096b84620012ab565b815260006020820181905260409182018190526005549151929350916001600160a01b039091169083908390620009a290620015c0565b620009b093929190620018c5565b604051809103906000f080158015620009cd573d6000803e3d6000fd5b509050806001600160a01b031663c12c21c06040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a0f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a3591906200162a565b600b60006101000a8154816001600160a01b0302191690836001600160a01b03160217905550806001600160a01b0316632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a9a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ac091906200162a565b600c60006101000a8154816001600160a01b0302191690836001600160a01b03160217905550806001600160a01b031663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000b25573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b4b91906200162a565b600d80546001600160a01b0319166001600160a01b03928316179055600654600b5460405163e26b2f6360e01b8152908316600482015291169063e26b2f6390602401600060405180830381600087803b15801562000ba957600080fd5b505af115801562000bbe573d6000803e3d6000fd5b5050600054600554604080516318caf8e360e31b81526001600160a01b039283166004808301919091526024820192909252604481019190915263141bdbdb60e21b60648201526201000090920416925063c657c7189150608401600060405180830381600087803b15801562000c3457600080fd5b505af115801562000c49573d6000803e3d6000fd5b5050600054600c8054604080516318caf8e360e31b81526001600160a01b039283166004820152602481019190915260448101929092526b43726564697446616361646560a01b606483015262010000909204909116925063c657c7189150608401600060405180830381600087803b15801562000cc657600080fd5b505af115801562000cdb573d6000803e3d6000fd5b5050600054600b54604080516318caf8e360e31b81526001600160a01b0392831660048201526024810191909152600d60448201526c21b932b234ba26b0b730b3b2b960991b60648201526201000090920416925063c657c7189150608401600060405180830381600087803b15801562000d5557600080fd5b505af115801562000d6a573d6000803e3d6000fd5b5050600054600d54604080516318caf8e360e31b81526001600160a01b0392831660048201526024810191909152601260448201527121b932b234ba21b7b73334b3bab930ba37b960711b60648201526201000090920416925063c657c7189150608401600060405180830381600087803b15801562000de957600080fd5b505af115801562000dfe573d6000803e3d6000fd5b50506001546001600160a01b0316915063eebab8ef90508473f39fd6e51aad88f6f4ce6ab8827279cfffb9226662000e35620011ec565b6040518463ffffffff1660e01b815260040162000e55939291906200189b565b600060405180830381600087803b15801562000e7057600080fd5b505af115801562000e85573d6000803e3d6000fd5b50506001546001600160a01b0316915063eebab8ef9050847390f79bf6eb2c4f870365e785982e1f101e93b90662000ebc620011ec565b6040518463ffffffff1660e01b815260040162000edc939291906200189b565b600060405180830381600087803b15801562000ef757600080fd5b505af115801562000f0c573d6000803e3d6000fd5b505060005460405163ca669fa760e01b815273f39fd6e51aad88f6f4ce6ab8827279cfffb922666004820152620100009091046001600160a01b0316925063ca669fa79150602401600060405180830381600087803b15801562000f6f57600080fd5b505af115801562000f84573d6000803e3d6000fd5b5050600954600b5460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529116925063095ea7b391506044016020604051808303816000875af115801562000fdf573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001005919062001989565b5060005460405163ca669fa760e01b81527390f79bf6eb2c4f870365e785982e1f101e93b9066004820152620100009091046001600160a01b03169063ca669fa790602401600060405180830381600087803b1580156200106557600080fd5b505af11580156200107a573d6000803e3d6000fd5b5050600954600b5460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529116925063095ea7b391506044016020604051808303816000875af1158015620010d5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010fb919062001989565b5060025460405163f2fde38b60e01b81527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526001600160a01b039091169063f2fde38b90602401600060405180830381600087803b1580156200115657600080fd5b505af11580156200116b573d6000803e3d6000fd5b505060075460405163f2fde38b60e01b81527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b158015620011c957600080fd5b505af1158015620011de573d6000803e3d6000fd5b5050505050505050620019e1565b600180546040516367b4264560e01b81526000926001600160a01b03909216916367b42645916200122191906004016200184d565b602060405180830381865afa1580156200123f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200126591906200162a565b6009546001600160a01b03908116911614620012955762001290670de0b6b3a764000060c862001879565b905090565b62001290670de0b6b3a7640000614e2062001879565b6040805160c08101825260026080820190815261232860a08301528152815180830183526005815261226060208281019190915282015281518083018352606092600092919082019080600387600a8111156200130c576200130c62001814565b146200131a5760036200131d565b60015b600a81111562001331576200133162001814565b815261206c6020918201529082526040805180820190915260048152611c84818301529101529050612454600a6000858281111562001374576200137462001814565b600a81111562001388576200138862001814565b815260208101919091526040908101600020805461ffff9390931661ffff19909316929092179091558051600480825260a0820190925281816020015b6040805180820190915260008082526020820152815260200190600190039081620013c557905050925060005b818110156200158d57828160048110620014105762001410620019ad565b602002015160200151600a6000858460048110620014325762001432620019ad565b602002015151600a8111156200144c576200144c62001814565b600a81111562001460576200146062001814565b815260208101919091526040908101600020805461ffff191661ffff9390931692909217909155805180820190915260015481906001600160a01b03166367b42645868560048110620014b757620014b7620019ad565b6020020151516040516001600160e01b031960e084901b168152620014e091906004016200184d565b602060405180830381865afa158015620014fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200152491906200162a565b6001600160a01b03168152602001848360048110620015475762001547620019ad565b60200201516020015161ffff168152508482815181106200156c576200156c620019ad565b602002602001018190525080806200158490620019c3565b915050620013f2565b505050919050565b6105e6806200bc5283390190565b62011105806200c23883390190565b6110a7806201d33d83390190565b62013af2806201e3e483390190565b6001600160a01b0381168114620015e557600080fd5b50565b60008060408385031215620015fc57600080fd5b82516200160981620015cf565b6020840151909250600b81106200161f57600080fd5b809150509250929050565b6000602082840312156200163d57600080fd5b81516200164a81620015cf565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156200168c576200168c62001651565b60405290565b604051601f8201601f191681016001600160401b0381118282101715620016bd57620016bd62001651565b604052919050565b60006020808385031215620016d957600080fd5b82516001600160401b0380821115620016f157600080fd5b818501915085601f8301126200170657600080fd5b8151818111156200171b576200171b62001651565b6200172b848260051b0162001692565b818152848101925060069190911b8301840190878211156200174c57600080fd5b928401925b81841015620017ab57604084890312156200176c5760008081fd5b6200177662001667565b84516200178381620015cf565b8152848601516200179481620015cf565b818701528352604093909301929184019162001751565b979650505050505050565b602080825282518282018190526000919060409081850190868401855b828110156200180757815180516001600160a01b0390811686529087015116868501529284019290850190600101620017d3565b5091979650505050505050565b634e487b7160e01b600052602160045260246000fd5b600b81106200184957634e487b7160e01b600052602160045260246000fd5b9052565b602081016200185d82846200182a565b92915050565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161562001896576200189662001863565b500290565b60608101620018ab82866200182a565b6001600160a01b0393909316602082015260400152919050565b6001600160a01b0384811682526060602080840182905285516001600160801b039081169285019290925285810151909116608084015260408086015160a085810152805161010086018190526000949392918301919085906101208801905b808310156200195657845180518816835286015161ffff168683015293850193600192909201919083019062001925565b5060608a01516001600160a01b031660c0890152608090990151151560e088015250909401949094525092949350505050565b6000602082840312156200199c57600080fd5b815180151581146200164a57600080fd5b634e487b7160e01b600052603260045260246000fd5b6000600019821415620019da57620019da62001863565b5060010190565b61a26180620019f16000396000f3fe60806040523480156200001157600080fd5b5060043610620001ad5760003560e01c806362eb33e311620000f5578063ba414fa61162000097578063de287359116200006e578063de2873591462000479578063f9aa028a146200049a578063fa7626d414620004bb57600080fd5b8063ba414fa6146200041c578063c12c21c01462000437578063d46b9330146200045857600080fd5b80637785ff5d11620000cc5780637785ff5d14620003da5780639408b63f14620003e45780639dd55b45146200040557600080fd5b806362eb33e314620003775780636b70b04c14620003985780636f307dc314620003b957600080fd5b80632f7a1881116200015f5780635e813a8b11620001365780635e813a8b146200030c5780635f7c9bd0146200032d57806362186905146200034657600080fd5b80632f7a188114620002be578063406c8e2f14620002df57806354cae56e146200030057600080fd5b80630e42bc5d11620001945780630e42bc5d14620002305780632630c12f14620002565780632954018c146200029d57600080fd5b80630bc772da14620001b25780630c75f80614620001f5575b600080fd5b600f54620001cf906fffffffffffffffffffffffffffffffff1681565b6040516fffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6200021c62000206366004620012dd565b600a6020526000908152604090205461ffff1681565b60405161ffff9091168152602001620001ec565b6200024762000241366004620012dd565b620004c9565b604051620001ec919062001307565b600854620002779073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001620001ec565b600254620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600c54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600154620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200030a6200081f565b005b600454620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200033762000b1a565b604051908152602001620001ec565b600f54620001cf9070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681565b600654620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600554620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600954620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200030a62000c0c565b600e54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200030a6200041636600462001398565b62000fd6565b6200042662001149565b6040519015158152602001620001ec565b600b54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600354620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600754620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600d54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600054620004269060ff1681565b6040805160c08101825260026080820190815261232860a08301528152815180830183526005815261226060208281019190915282015281518083018352606092600092919082019080600387600a8111156200052a576200052a620013c7565b14620005385760036200053b565b60015b600a8111156200054f576200054f620013c7565b815261206c6020918201529082526040805180820190915260048152611c84818301529101529050612454600a60008582811115620005925762000592620013c7565b600a811115620005a657620005a6620013c7565b815260208101919091526040908101600020805461ffff939093167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909316929092179091558051600480825260a0820190925281816020015b60408051808201909152600080825260208201528152602001906001900390816200060057905050925060005b8181101562000817578281600481106200064b576200064b620013f6565b602002015160200151600a60008584600481106200066d576200066d620013f6565b602002015151600a811115620006875762000687620013c7565b600a8111156200069b576200069b620013c7565b81526020810191909152604090810160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff93909316929092179091558051808201909152600154819073ffffffffffffffffffffffffffffffffffffffff166367b426458685600481106200071c576200071c620013f6565b6020020151516040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526200075d919060040162001425565b602060405180830381865afa1580156200077b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007a1919062001467565b73ffffffffffffffffffffffffffffffffffffffff168152602001848360048110620007d157620007d1620013f6565b60200201516020015161ffff16815250848281518110620007f657620007f6620013f6565b602002602001018190525080806200080e90620014b6565b9150506200062d565b505050919050565b6000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16906306447d5690602401600060405180830381600087803b158015620008a457600080fd5b505af1158015620008b9573d6000803e3d6000fd5b5050600b5460405173ffffffffffffffffffffffffffffffffffffffff909116925060009150600190620008ed90620012b3565b73ffffffffffffffffffffffffffffffffffffffff938416815292909116602083015215156040820152606001604051809103906000f08015801562000937573d6000803e3d6000fd5b50600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316908117909155600d546040517f526a41e80000000000000000000000000000000000000000000000000000000081526004810192909252600160248301529091169063526a41e890604401600060405180830381600087803b158015620009dc57600080fd5b505af1158015620009f1573d6000803e3d6000fd5b5050600d5473ffffffffffffffffffffffffffffffffffffffff16915063eb9606df905062000a22426001620014f2565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815264ffffffffff90911660048201526024015b600060405180830381600087803b15801562000a7b57600080fd5b505af115801562000a90573d6000803e3d6000fd5b50505050600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562000aff57600080fd5b505af115801562000b14573d6000803e3d6000fd5b50505050565b600180546040517f67b4264500000000000000000000000000000000000000000000000000000000815260009273ffffffffffffffffffffffffffffffffffffffff909216916367b426459162000b75919060040162001425565b602060405180830381865afa15801562000b93573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000bb9919062001467565b60095473ffffffffffffffffffffffffffffffffffffffff90811691161462000bf65762000bf1670de0b6b3a764000060c86200150d565b905090565b62000bf1670de0b6b3a7640000614e206200150d565b60025460405173ffffffffffffffffffffffffffffffffffffffff9091169062000c3690620012c1565b73ffffffffffffffffffffffffffffffffffffffff90911681526060602082018190526008908201527f446567656e4e4654000000000000000000000000000000000000000000000000608082015260a060408201819052600a908201527f476561722d446567656e0000000000000000000000000000000000000000000060c082015260e001604051809103906000f08015801562000cda573d6000803e3d6000fd5b50600e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283161790556000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015262010000909104909116906306447d5690602401600060405180830381600087803b15801562000d8e57600080fd5b505af115801562000da3573d6000803e3d6000fd5b5050600e546040517ffca3b5aa0000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff909116925063fca3b5aa9150602401600060405180830381600087803b15801562000e2757600080fd5b505af115801562000e3c573d6000803e3d6000fd5b5050600b54600e5460405173ffffffffffffffffffffffffffffffffffffffff92831694509116915060009062000e7390620012b3565b73ffffffffffffffffffffffffffffffffffffffff938416815292909116602083015215156040820152606001604051809103906000f08015801562000ebd573d6000803e3d6000fd5b50600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316908117909155600d546040517f526a41e80000000000000000000000000000000000000000000000000000000081526004810192909252600160248301529091169063526a41e890604401600060405180830381600087803b15801562000f6257600080fd5b505af115801562000f77573d6000803e3d6000fd5b5050600e54600c546040517f4610f6ac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015291169250634610f6ac915060240162000a60565b600081600860405162000fe990620012cf565b91825260ff166020820152604001604051809103906000f08015801562001014573d6000803e3d6000fd5b506000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291925062010000900473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b1580156200109c57600080fd5b505af1158015620010b1573d6000803e3d6000fd5b50506008546040517fe8a97a3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528581166024830152909116925063e8a97a3e9150604401600060405180830381600087803b1580156200112b57600080fd5b505af115801562001140573d6000803e3d6000fd5b50505050505050565b60008054610100900460ff16156200116a5750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620012ae5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000008284015282518083038401815260608301909352600092909162001212917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016200158b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526200124c91620015c9565b6000604051808303816000865af19150503d80600081146200128b576040519150601f19603f3d011682016040523d82523d6000602084013e62001290565b606091505b5091505080806020019051810190620012aa9190620015d7565b9150505b919050565b615e9780620015fc83390190565b6126cf806200749383390190565b6106ca8062009b6283390190565b600060208284031215620012f057600080fd5b8135600b81106200130057600080fd5b9392505050565b602080825282518282018190526000919060409081850190868401855b8281101562001365578151805173ffffffffffffffffffffffffffffffffffffffff16855286015161ffff1686850152928401929085019060010162001324565b5091979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff811681146200139557600080fd5b50565b60008060408385031215620013ac57600080fd5b8235620013b98162001372565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60208101600b831062001461577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000602082840312156200147a57600080fd5b8151620013008162001372565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415620014eb57620014eb62001487565b5060010190565b6000821982111562001508576200150862001487565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562001548576200154862001487565b500290565b6000815160005b8181101562001570576020818501810151868301520162001554565b8181111562001580576000828601525b509290920192915050565b7fffffffff00000000000000000000000000000000000000000000000000000000831681526000620015c160048301846200154d565b949350505050565b60006200130082846200154d565b600060208284031215620015ea57600080fd5b815180151581146200130057600080fdfe6101406040523480156200001257600080fd5b5060405162005e9738038062005e97833981016040819052620000359162000198565b60016000556001600160a01b0383166200006257604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038316608081905260408051636f307dc360e01b81529051636f307dc3916004808201926020929091908290030181865afa158015620000ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d39190620001ea565b6001600160a01b031660a0816001600160a01b031681525050826001600160a01b0316634f0e0ef36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200012b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001519190620001ea565b6001600160a01b0390811660c0529190911660e0819052151561010052151561012052506200020f565b80516001600160a01b03811681146200019357600080fd5b919050565b600080600060608486031215620001ae57600080fd5b620001b9846200017b565b9250620001c9602085016200017b565b915060408401518015158114620001df57600080fd5b809150509250925092565b600060208284031215620001fd57600080fd5b62000208826200017b565b9392505050565b60805160a05160c05160e0516101005161012051615a86620004116000396000818161061101528181612fb5015261481f01526000818161031701528181610dde015281816144f901526146e5015260008181610557015281816146a901526147a901526000818161034b0152818161387d015261392d01526000818161047301528181611bfe0152818161274f0152818161280d0152818161366a01526137dd015260008181610665015281816109d801528181610b0301528181610bd501528181610cdd01528181610e6501528181610fe30152818161114e0152818161120e0152818161132e015281816114510152818161162b01528181611708015281816117e0015281816119e501528181611b1201528181611d9501528181611ed5015281816120040152818161216801528181612290015281816123c601528181612568015281816126390152818161266f0152818161293d01528181612a2101528181612a8a01528181612bde01528181612d2601528181612e6801528181612ec2015281816130a10152818161311b015281816131b401528181613341015281816134c10152818161358a0152818161372f01528181613a1a01528181613b2e01528181613dbb015281816142200152818161432801528181614492015281816148e7015281816149e801528181614aae0152614d8f0152615a866000f3fe6080604052600436106102695760003560e01c8063860aefcf11610153578063c7de38a6116100cb578063dfd594651161007f578063eb9606df11610064578063eb9606df1461081e578063f9eaee0d1461083e578063ffd9b9071461085e57600080fd5b8063dfd59465146107de578063e1f21c67146107fe57600080fd5b8063cff0ab96116100b0578063cff0ab96146106ef578063d9ccbec114610783578063dcf65482146107be57600080fd5b8063c7de38a6146106a7578063caa5c23f146106dc57600080fd5b80639c55a05411610122578063b55bb84b11610107578063b55bb84b14610633578063c12c21c014610653578063c690908a1461068757600080fd5b80639c55a054146105df578063b1836d32146105ff57600080fd5b8063860aefcf146104db5780639408b63f146105455780639b67ab30146105795780639be0536a146105bd57600080fd5b80635d91a0e0116101e65780636d19b486116101b55780637071b7c51161019a5780637071b7c51461049557806379c0ef91146104a857806382871ace146104c857600080fd5b80636d19b486146104415780636f307dc31461046157600080fd5b80635d91a0e0146103e85780635f73fbec146103fb578063601d66f61461040e5780636c8f225d1461042e57600080fd5b80633d9287fa1161023d5780635019e20a116102225780635019e20a1461039257806354fd4d50146103b257806359781034146103d557600080fd5b80633d9287fa146103055780634f0e0ef31461033957600080fd5b8062842b571461026e578063256ac915146102905780632a7ba1f7146102c55780632b7c7b11146102e5575b600080fd5b34801561027a57600080fd5b5061028e6102893660046151bf565b61087e565b005b34801561029c57600080fd5b506102b06102ab3660046151f8565b61098e565b60405190151581526020015b60405180910390f35b3480156102d157600080fd5b5061028e6102e0366004615215565b610a61565b3480156102f157600080fd5b5061028e610300366004615215565b610c3b565b34801561031157600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561034557600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102bc565b34801561039e57600080fd5b5061028e6103ad3660046151f8565b610d6a565b3480156103be57600080fd5b506103c7600281565b6040519081526020016102bc565b61028e6103e336600461522e565b61108c565b61028e6103f63660046152bb565b611275565b61028e610409366004615340565b611589565b34801561041a57600080fd5b5061028e6104293660046153d8565b6117de565b61028e61043c36600461541b565b611900565b34801561044d57600080fd5b506102b061045c3660046151f8565b611c31565b34801561046d57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b61028e6104a336600461546e565b611c60565b3480156104b457600080fd5b5061036d6104c3366004615215565b611f3e565b61028e6104d63660046152bb565b611f4b565b3480156104e757600080fd5b5060025461051c906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041682565b604080516fffffffffffffffffffffffffffffffff9384168152929091166020830152016102bc565b34801561055157600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561058557600080fd5b506004546040805167ffffffffffffffff608084901c1681526fffffffffffffffffffffffffffffffff9092166020830152016102bc565b3480156105c957600080fd5b506105d261227d565b6040516102bc91906154e2565b3480156105eb57600080fd5b5061028e6105fa36600461553c565b61228e565b34801561060b57600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561063f57600080fd5b5061028e61064e3660046151f8565b6123c4565b34801561065f57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561069357600080fd5b5061028e6106a23660046151f8565b6124c6565b3480156106b357600080fd5b506106c76106c23660046151f8565b612668565b604080519283526020830191909152016102bc565b61028e6106ea366004615557565b61289b565b3480156106fb57600080fd5b5060015461074e906fffffffffffffffffffffffffffffffff811690700100000000000000000000000000000000810460ff169071010000000000000000000000000000000000900464ffffffffff1683565b604080516fffffffffffffffffffffffffffffffff9094168452911515602084015264ffffffffff16908201526060016102bc565b34801561078f57600080fd5b506102b061079e366004615599565b600360209081526000928352604080842090915290825290205460ff1681565b3480156107ca57600080fd5b5061028e6107d93660046151f8565b612a88565b3480156107ea57600080fd5b506103c76107f93660046151f8565b612b86565b34801561080a57600080fd5b5061028e61081936600461522e565b612c6d565b34801561082a57600080fd5b5061028e6108393660046155c7565b612ec0565b34801561084a57600080fd5b506102b06108593660046151f8565b613057565b34801561086a57600080fd5b5061028e6108793660046155ee565b6131b2565b600260005414156108f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b6002600090815573ffffffffffffffffffffffffffffffffffffffff8316808252600360209081526040808420338086529083529381902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081527f9b3258bc4904fd6426b99843e206c6c7cdb1fd0f040121c25b71dafbb3851ee0910160405180910390a350506001600055565b6040517f055ee9b500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063055ee9b590602401602060405180830381865afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a43919061560b565b73ffffffffffffffffffffffffffffffffffffffff16141592915050565b60026000541415610ace576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610b5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b83919061560b565b9050610b903382846132eb565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906395373018906024015b600060405180830381600087803b158015610c1a57600080fd5b505af1158015610c2e573d6000803e3d6000fd5b5050600160005550505050565b60026000541415610ca8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610d39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5d919061560b565b9050610b90338284613411565b60026000541415610dd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000557f000000000000000000000000000000000000000000000000000000000000000015610e34576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610ec1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee5919061560b565b33600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915290205490915060ff16610f52576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f5d82613583565b5090508015610f98576040517ff713841e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b15801561102757600080fd5b505af115801561103b573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692503391507f93c70cc9715bef0d83edf2095f3595402279d274f402a73ffc17f1bcb19d863d90600090a35050600160005550565b600260005414156110f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611106613875565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063e958b70490602401602060405180830381865afa158015611197573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bb919061560b565b90506111c9848285856139b7565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401600060405180830381600087803b15801561125257600080fd5b505af1158015611266573d6000803e3d6000fd5b50506001600055505050505050565b600260005414156112e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611375573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611399919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166113e8576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806113f483613583565b915091508161142f576040517f1fdd676f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611437613875565b831561144d5761144d85858b8660016000613ae3565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632362a2d88b600185338e8e8e6040518863ffffffff1660e01b81526004016114b59796959493929190615663565b6020604051808303816000875af11580156114d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f891906156bf565b90508873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f7dfecd8419723a9d3954585a30c2a270165d70aafa146c11c1e1b88ae14390648460405161157091815260200190565b60405180910390a4505060016000555050505050505050565b600260005414156115f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ab919061560b565b90506116b5613875565b81156116cb576116cb8383338460016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d89061174a903390600090819083908d908d908d90600401615663565b6020604051808303816000875af1158015611769573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178d91906156bf565b5060405173ffffffffffffffffffffffffffffffffffffffff87169033907f460ad03b1cf79b1d64d3aefa28475f110ab66e84649c52bb41ed796b9b39198190600090a35050600160005550505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611849573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118d1576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff90811670010000000000000000000000000000000002911617600255565b6002600054141561196d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000908155606461198461ffff851687615707565b61198e9190615744565b9050611999816144f7565b6119a2816145e8565b6119ab84614668565b6119b3613875565b6040517f172c48c7000000000000000000000000000000000000000000000000000000008152600060048201819052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a64919061577f565b61ffff169150611a789050816127106157ae565b611a829083615707565b611a8c8288615707565b11611ac3576040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff86811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611b5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b81919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638587604051611bef92919091825261ffff16602082015260400190565b60405180910390a3611c2386827f00000000000000000000000000000000000000000000000000000000000000008a6139b7565b505060016000555050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526006602052604081205415155b92915050565b60026000541415611ccd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611cdb856144f7565b611ce484614668565b611ced856145e8565b600154700100000000000000000000000000000000900460ff1615611d3e576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d46613875565b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff85811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611de0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e04919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638885604051611e7292919091825261ffff16602082015260400190565b60405180910390a38215611e9057611e908484878460006001613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015611f1957600080fd5b505af1158015611f2d573d6000803e3d6000fd5b505060016000555050505050505050565b6000611c5a60058361480f565b60026000541415611fb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa15801561204b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206f919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166120be576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120c661481b565b6120fc576040517f7e52ccb400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061210782612668565b509050612112613875565b82156121285761212884848a8560016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d8906121aa908c90600290879033908f908f908f90600401615663565b6020604051808303816000875af11580156121c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ed91906156bf565b90508773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167ffada13ff2d5e1a1d9da37ad4a4130893b34e3c69c32b17f87ec31fd661b867078460405161226591815260200190565b60405180910390a45050600160005550505050505050565b6060612289600561486b565b905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612381576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561242f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612453919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146124b7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614878565b5050565b60026000541415612533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156125c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e8919061560b565b90506125f4818361489a565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401610c00565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126fc919061560b565b905060008061270b8387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156127a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127c991906156bf565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015291965061271091851690637afb010490604401602060405180830381865afa158015612863573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061288791906156bf565b6128919190615744565b9350505050915091565b60026000541415612908576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129bd919061560b565b90506129c7613875565b8115612a7e576129dc83833384600080613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015612a6557600080fd5b505af1158015612a79573d6000803e3d6000fd5b505050505b5050600160005550565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612af3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b17919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b7b576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614c92565b600080612b9283612668565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152919350600092507f000000000000000000000000000000000000000000000000000000000000000090911690633192195c906024016040805180830381865afa158015612c26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4a91906157c5565b9150819050612c5b61271084615707565b612c659190615744565b949350505050565b60026000541415612cda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063fdd5764590602401602060405180830381865afa158015612d6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d91919061560b565b73ffffffffffffffffffffffffffffffffffffffff161480612dd7575073ffffffffffffffffffffffffffffffffffffffff831660009081526006602052604090205415155b15612e0e576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612eac57600080fd5b505af1158015611c23573d6000803e3d6000fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f4f919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612fb3576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000061300a576040517f50dd11fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805464ffffffffff90921671010000000000000000000000000000000000027fffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffffff909216919091179055565b6040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063f67c5bd090602401602060405180830381865afa1580156130e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061310c91906156bf565b905080158015906131ab5750807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015613184573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a891906156bf565b16155b9392505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561321d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613241919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146132a5576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018054911515700100000000000000000000000000000000027fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff909216919091179055565b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600060448301819052917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561338c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133b091906156bf565b90506133bb816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f98274bf834d179ee08dc0604071b0dc90b54731bd5f725a5a96a39a86bce025a8360405161340391815260200190565b60405180910390a250505050565b61341a816144f7565b600154700100000000000000000000000000000000900460ff161561346b576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600160448301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561350c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061353091906156bf565b905061353b816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f9cac51154cc0d835e2f9c9d1f59a9344588cee107f4203bf58a8c797e3a58c458360405161340391815260200190565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613617919061560b565b90506000806136268387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156136c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136e491906156bf565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529195506000917f00000000000000000000000000000000000000000000000000000000000000001690633192195c906024016040805180830381865afa158015613775573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061379991906157c5565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350600092506127109187169063f9a6503090604401602060405180830381865afa158015613837573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061385b91906156bf565b6138659190615707565b9092109794965093945050505050565b34156139b5577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156138e357600080fd5b505af11580156138f7573d6000803e3d6000fd5b50506040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201523460248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16935063a9059cbb925060440190506020604051808303816000875af115801561398f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139b391906157e9565b505b565b6139c084614cb4565b6040517f830aa74500000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f0000000000000000000000000000000000000000000000000000000000000000169063830aa74590608401600060405180830381600087803b158015613a5e57600080fd5b505af1158015613a72573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fa32435755c235de2976ed44a75a2f85cb01faf0c894f639fe0c32bb9455fea8f83604051613ad591815260200190565b60405180910390a350505050565b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301523060248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b158015613b7257600080fd5b505af1158015613b86573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff871692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a28460005b8181101561441d5736888883818110613bea57613bea615806565b9050602002810190613bfc9190615835565b90506004613c0d6020830183615873565b90501015613c47576040517fe2b0e50600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b30613c5560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16141561421c578415613ca9576040517f5fb9107f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613cb86020830183615873565b613cc1916158d8565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167f59781034000000000000000000000000000000000000000000000000000000001415613e3c5760008080613d1e6020860186615873565b613d2c916004908290615920565b810190613d39919061522e565b925092509250613e34838c73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614613e2b576040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015613e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e26919061560b565b613e2d565b8b5b84846139b7565b505050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2b7c7b11000000000000000000000000000000000000000000000000000000001415613ec757600194506000613e996020840184615873565b613ea7916004908290615920565b810190613eb49190615215565b9050613ec1898983613411565b50614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2a7ba1f7000000000000000000000000000000000000000000000000000000001415613f80578415613f49576040517fc0b0caa800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613f586020840184615873565b613f66916004908290615920565b810190613f739190615215565b9050613ec18989836132eb565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f233a8caa0000000000000000000000000000000000000000000000000000000014156140e457600080613fda6020850185615873565b613fe8916004908290615920565b810190613ff5919061594a565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c8116600483015292945090925082918416906370a0823190602401602060405180830381865afa158015614069573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061408d91906156bf565b10156140dd576040517fa5ac537300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016108e7565b5050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fc690908a00000000000000000000000000000000000000000000000000000000141561416457600061413d6020840184615873565b61414b916004908290615920565b81019061415891906151f8565b9050613ec1888261489a565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f23e27a640000000000000000000000000000000000000000000000000000000014156141e45760006141bd6020840184615873565b6141cb916004908290615920565b8101906141d891906151f8565b9050613ec18882614d42565b6040517f1e9e7e7a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50614414565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff68754361426760208501856151f8565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156142d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142f4919061560b565b73ffffffffffffffffffffffffffffffffffffffff16148061436d575073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001661435560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16145b156143a4576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6144126143b46020830183615873565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506143f69250505060208401846151f8565b73ffffffffffffffffffffffffffffffffffffffff1690614e39565b505b50600101613bcf565b506040517f60c8e8938c9a0c0d88a98d6f1c562ce68077e12bf3edb8047378f2f736cb45b490600090a16040517fe1998cf900000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff86811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b1580156144d657600080fd5b505af11580156144ea573d6000803e3d6000fd5b5050505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006139b3576001546fffffffffffffffffffffffffffffffff9081169081146124c257600454608081901c906fffffffffffffffffffffffffffffffff16600067ffffffffffffffff8316431461456e578461458a565b61458a6fffffffffffffffffffffffffffffffff831686615976565b9050838111156145c6576040517f675f1a5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff81164360801b176004555050505050565b6002546fffffffffffffffffffffffffffffffff16811080614631575060025470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681115b156139b3576040517fce16799400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61467061481b565b156146a7576040517f63fc31c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1615614806577f0000000000000000000000000000000000000000000000000000000000000000801561472657503373ffffffffffffffffffffffffffffffffffffffff821614155b1561475d576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600160248301527f00000000000000000000000000000000000000000000000000000000000000001690639dc29fac90604401600060405180830381600087803b1580156147ed57600080fd5b505af1158015614801573d6000803e3d6000fd5b505050505b6139b381614cb4565b60006131ab8383614e7b565b60007f0000000000000000000000000000000000000000000000000000000000000000801561228957505060015471010000000000000000000000000000000000900464ffffffffff1642101590565b606060006131ab83614ea5565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f01565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561492b57600080fd5b505af115801561493f573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527fdf498aa1c340e992665d6fb4f3be8436d452c45a630cb6d7fab7963da39bac8793500190505b60405180910390a15050565b6040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600091829160019183917f00000000000000000000000000000000000000000000000000000000000000001690638991b2f190602401602060405180830381865afa158015614a2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a5391906156bf565b90505b808211614c895780821615614c7d576040517fe75538c700000000000000000000000000000000000000000000000000000000815260048101839052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e75538c7906024016040805180830381865afa158015614af4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b18919061577f565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529294509092506000918416906370a0823190602401602060405180830381865afa158015614b8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bb191906156bf565b90506001811115614c79576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff8481166024830152600091908b169063f9a6503090604401602060405180830381865afa158015614c33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c5791906156bf565b978801979050614c6b61ffff841682615707565b614c759088615976565b9650505b5050505b600182901b9150614a56565b50509250929050565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f50565b3373ffffffffffffffffffffffffffffffffffffffff821614801590614d0b575033600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16155b156139b3576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b158015614dd357600080fd5b505af1158015614de7573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527f69db9e9764da61b6681b89fb0f5be018506e0342036e56b59c3015a620d60977935001905061498d565b60606131ab83836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250615043565b6000826000018281548110614e9257614e92615806565b9060005260206000200154905092915050565b606081600001805480602002602001604051908101604052809291908181526020018280548015614ef557602002820191906000526020600020905b815481526020019060010190808311614ee1575b50505050509050919050565b6000818152600183016020526040812054614f4857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611c5a565b506000611c5a565b60008181526001830160205260408120548015615039576000614f746001836157ae565b8554909150600090614f88906001906157ae565b9050818114614fed576000866000018281548110614fa857614fa8615806565b9060005260206000200154905080876000018481548110614fcb57614fcb615806565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080614ffe57614ffe61598e565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611c5a565b6000915050611c5a565b6060612c65848460008585843b6150b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108e7565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516150df91906159ed565b60006040518083038185875af1925050503d806000811461511c576040519150601f19603f3d011682016040523d82523d6000602084013e615121565b606091505b509150915061513182828661513c565b979650505050505050565b6060831561514b5750816131ab565b82511561515b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e791906159ff565b73ffffffffffffffffffffffffffffffffffffffff811681146139b357600080fd5b80151581146139b357600080fd5b600080604083850312156151d257600080fd5b82356151dd8161518f565b915060208301356151ed816151b1565b809150509250929050565b60006020828403121561520a57600080fd5b81356131ab8161518f565b60006020828403121561522757600080fd5b5035919050565b60008060006060848603121561524357600080fd5b833561524e8161518f565b9250602084013561525e8161518f565b929592945050506040919091013590565b60008083601f84011261528157600080fd5b50813567ffffffffffffffff81111561529957600080fd5b6020830191508360208260051b85010111156152b457600080fd5b9250929050565b60008060008060008060a087890312156152d457600080fd5b86356152df8161518f565b955060208701356152ef8161518f565b9450604087013593506060870135615306816151b1565b9250608087013567ffffffffffffffff81111561532257600080fd5b61532e89828a0161526f565b979a9699509497509295939492505050565b60008060008060006080868803121561535857600080fd5b85356153638161518f565b945060208601359350604086013561537a816151b1565b9250606086013567ffffffffffffffff81111561539657600080fd5b6153a28882890161526f565b969995985093965092949392505050565b80356fffffffffffffffffffffffffffffffff811681146153d357600080fd5b919050565b600080604083850312156153eb57600080fd5b6153f4836153b3565b9150615402602084016153b3565b90509250929050565b61ffff811681146139b357600080fd5b6000806000806080858703121561543157600080fd5b8435935060208501356154438161518f565b925060408501356154538161540b565b915060608501356154638161540b565b939692955090935050565b60008060008060006080868803121561548657600080fd5b8535945060208601356154988161518f565b9350604086013567ffffffffffffffff8111156154b457600080fd5b6154c08882890161526f565b90945092505060608601356154d48161540b565b809150509295509295909350565b6020808252825182820181905260009190848201906040850190845b8181101561553057835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016154fe565b50909695505050505050565b60006020828403121561554e57600080fd5b6131ab826153b3565b6000806020838503121561556a57600080fd5b823567ffffffffffffffff81111561558157600080fd5b61558d8582860161526f565b90969095509350505050565b600080604083850312156155ac57600080fd5b82356155b78161518f565b915060208301356151ed8161518f565b6000602082840312156155d957600080fd5b813564ffffffffff811681146131ab57600080fd5b60006020828403121561560057600080fd5b81356131ab816151b1565b60006020828403121561561d57600080fd5b81516131ab8161518f565b6003811061565f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b73ffffffffffffffffffffffffffffffffffffffff888116825260e082019061568f602084018a615628565b6040830197909752948616606082015292909416608083015260a082015291151560c09092019190915292915050565b6000602082840312156156d157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561573f5761573f6156d8565b500290565b60008261577a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000806040838503121561579257600080fd5b825161579d8161518f565b60208401519092506151ed8161540b565b6000828210156157c0576157c06156d8565b500390565b600080604083850312156157d857600080fd5b505080516020909101519092909150565b6000602082840312156157fb57600080fd5b81516131ab816151b1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc183360301811261586957600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126158a857600080fd5b83018035915067ffffffffffffffff8211156158c357600080fd5b6020019150368190038213156152b457600080fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156159185780818660040360031b1b83161692505b505092915050565b6000808585111561593057600080fd5b8386111561593d57600080fd5b5050820193919092039150565b6000806040838503121561595d57600080fd5b82356159688161518f565b946020939093013593505050565b60008219821115615989576159896156d8565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60005b838110156159d85781810151838201526020016159c0565b838111156159e7576000848401525b50505050565b600082516158698184602087016159bd565b6020815260008251806020840152615a1e8160408501602087016159bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea2646970667358221220a3f4a705ab580a6ada1e438cd2ee4abc001b62d1d171fce12c41994900fef21664736f6c634300080a003360c06040523480156200001157600080fd5b50604051620026cf380380620026cf833981016040819052620000349162000324565b82828281600090805190602001906200004f92919062000194565b5080516200006590600190602084019062000194565b50506006805460ff19169055506001600160a01b0381166200009a57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000d9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ff9190620003a1565b6001600160a01b03166080816001600160a01b03168152505050826001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000158573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200017e9190620003a1565b6001600160a01b031660a0525062000403915050565b828054620001a290620003c6565b90600052602060002090601f016020900481019282620001c6576000855562000211565b82601f10620001e157805160ff191683800117855562000211565b8280016001018555821562000211579182015b8281111562000211578251825591602001919060010190620001f4565b506200021f92915062000223565b5090565b5b808211156200021f576000815560010162000224565b80516001600160a01b03811681146200025257600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200027f57600080fd5b81516001600160401b03808211156200029c576200029c62000257565b604051601f8301601f19908116603f01168101908282118183101715620002c757620002c762000257565b81604052838152602092508683858801011115620002e457600080fd5b600091505b83821015620003085785820183015181830184015290820190620002e9565b838211156200031a5760008385830101525b9695505050505050565b6000806000606084860312156200033a57600080fd5b62000345846200023a565b60208501519093506001600160401b03808211156200036357600080fd5b62000371878388016200026d565b935060408601519150808211156200038857600080fd5b5062000397868287016200026d565b9150509250925092565b600060208284031215620003b457600080fd5b620003bf826200023a565b9392505050565b600181811c90821680620003db57607f821691505b60208210811415620003fd57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a0516122756200045a6000396000610a9a015260008181610386015281816106db0152818161089101528181610f15015281816110010152818161115b015281816112f401526114f901526122756000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80636352211e116100f9578063a0bcfc7f11610097578063b88d4fde11610071578063b88d4fde146103a8578063c87b56dd146103b6578063e985e9c5146103c9578063fca3b5aa1461041257600080fd5b8063a0bcfc7f14610360578063a22cb46514610373578063a50cf2c81461038157600080fd5b80638456cb59116100d35780638456cb591461032a57806389406ff51461033257806395d89b41146103455780639dc29fac1461034d57600080fd5b80636352211e146102fc5780636c0360eb1461030f57806370a082311461031757600080fd5b80633f4ba83a116101665780634610f6ac116101405780634610f6ac146102b357806354fd4d50146102c6578063576cd2d1146102ce5780635c975abb146102f157600080fd5b80633f4ba83a1461029857806340c10f19146102a057806342842e0e1461028a57600080fd5b8063081812fc116101a2578063081812fc1461024b578063095ea7b31461025e57806318160ddd1461027357806323b872dd1461028a57600080fd5b806301ffc9a7146101c957806306fdde03146101f15780630754617214610206575b600080fd5b6101dc6101d7366004611cc6565b610425565b60405190151581526020015b60405180910390f35b6101f961050a565b6040516101e89190611d38565b6008546102269073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e8565b610226610259366004611d89565b61059c565b61027161026c366004611dc7565b61067b565b005b61027c60075481565b6040519081526020016101e8565b61027161026c366004611df3565b6102716106ad565b6102716102ae366004611dc7565b61079b565b6102716102c1366004611e34565b610863565b61027c600181565b6101dc6102dc366004611e34565b60096020526000908152604090205460ff1681565b60065460ff166101dc565b61022661030a366004611d89565b610cd9565b6101f9610d8b565b61027c610325366004611e34565b610e19565b610271610ee7565b610271610340366004611e34565b610fd3565b6101f9611103565b61027161035b366004611dc7565b611112565b61027161036e366004611e51565b6112c6565b61027161026c366004611ed1565b6102267f000000000000000000000000000000000000000000000000000000000000000081565b61027161026c366004611f39565b6101f96103c4366004611d89565b6113bb565b6101dc6103d7366004612037565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205460ff1690565b610271610420366004611e34565b6114cb565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd0000000000000000000000000000000000000000000000000000000014806104b857507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061050457507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60606000805461051990612065565b80601f016020809104026020016040519081016040528092919081815260200182805461054590612065565b80156105925780601f1061056757610100808354040283529160200191610592565b820191906000526020600020905b81548152906001019060200180831161057557829003601f168201915b5050505050905090565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff16610652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084015b60405180910390fd5b5060009081526004602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b6040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa158015610737573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075b91906120b9565b610791576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107996115f6565b565b60085473ffffffffffffffffffffffffffffffffffffffff1633146107ec576040517f5c2967f500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006107f783610e19565b905060005b82811015610846576000816108278473ffffffffffffffffffffffffffffffffffffffff8816612105565b6108319190612105565b905061083d85826116d7565b506001016107fc565b5081600760008282546108599190612105565b9091555050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156108ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091191906120b9565b610947576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163b610995576040517f9c01f6a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff1663c12c21c06040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610a1c575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610a199181019061211d565b60015b610a52576040517f9c01f6a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f6fbc6f6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192507f000000000000000000000000000000000000000000000000000000000000000090911690636fbc6f6b90602401602060405180830381865afa158015610ae3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0791906120b9565b1580610bad57503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16639408b63f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b94919061211d565b73ffffffffffffffffffffffffffffffffffffffff1614155b80610c5257508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c39919061211d565b73ffffffffffffffffffffffffffffffffffffffff1614155b15610c89576040517f9c01f6a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff16600090815260096020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff1680610504576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e00000000000000000000000000000000000000000000006064820152608401610649565b600a8054610d9890612065565b80601f0160208091040260200160405190810160405280929190818152602001828054610dc490612065565b8015610e115780601f10610de657610100808354040283529160200191610e11565b820191906000526020600020905b815481529060010190602001808311610df457829003601f168201915b505050505081565b600073ffffffffffffffffffffffffffffffffffffffff8216610ebe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152608401610649565b5073ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015610f71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9591906120b9565b610fcb576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610799611899565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561105d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108191906120b9565b6110b7576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff16600090815260096020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b60606001805461051990612065565b3360009081526009602052604090205460ff161580156111dd57506040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156111b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111db91906120b9565b155b15611214576040517f1e0d048500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061121f83610e19565b90508181101561125b576040517f90c9142d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b828110156112b357600060018261128b8573ffffffffffffffffffffffffffffffffffffffff8916612105565b611295919061213a565b61129f919061213a565b90506112aa81611959565b5060010161125e565b508160076000828254610859919061213a565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611350573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137491906120b9565b6113aa576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113b6600a8383611c0f565b505050565b60008181526002602052604090205460609073ffffffffffffffffffffffffffffffffffffffff1661146f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006064820152608401610649565b6000611479611a26565b9050600081511161149957604051806020016040528060008152506114c4565b806114a384611a35565b6040516020016114b4929190612151565b6040516020818303038152906040525b9392505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611555573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157991906120b9565b6115af576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60065460ff16611662576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610649565b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b73ffffffffffffffffffffffffffffffffffffffff8216611754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610649565b60008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff16156117e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610649565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805460019290611816908490612105565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60065460ff1615611906576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610649565b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586116ad3390565b600061196482610cd9565b9050611971600083611b6f565b73ffffffffffffffffffffffffffffffffffffffff811660009081526003602052604081208054600192906119a790849061213a565b909155505060008281526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555183919073ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6060600a805461051990612065565b606081611a7557505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611a9f5780611a8981612180565b9150611a989050600a836121e8565b9150611a79565b60008167ffffffffffffffff811115611aba57611aba611f0a565b6040519080825280601f01601f191660200182016040528015611ae4576020820181803683370190505b5090505b8415611b6757611af960018361213a565b9150611b06600a866121fc565b611b11906030612105565b60f81b818381518110611b2657611b26612210565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611b60600a866121e8565b9450611ae8565b949350505050565b600081815260046020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091558190611bc982610cd9565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b828054611c1b90612065565b90600052602060002090601f016020900481019282611c3d5760008555611ca1565b82601f10611c74578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00823516178555611ca1565b82800160010185558215611ca1579182015b82811115611ca1578235825591602001919060010190611c86565b50611cad929150611cb1565b5090565b5b80821115611cad5760008155600101611cb2565b600060208284031215611cd857600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146114c457600080fd5b60005b83811015611d23578181015183820152602001611d0b565b83811115611d32576000848401525b50505050565b6020815260008251806020840152611d57816040850160208701611d08565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b600060208284031215611d9b57600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff81168114611dc457600080fd5b50565b60008060408385031215611dda57600080fd5b8235611de581611da2565b946020939093013593505050565b600080600060608486031215611e0857600080fd5b8335611e1381611da2565b92506020840135611e2381611da2565b929592945050506040919091013590565b600060208284031215611e4657600080fd5b81356114c481611da2565b60008060208385031215611e6457600080fd5b823567ffffffffffffffff80821115611e7c57600080fd5b818501915085601f830112611e9057600080fd5b813581811115611e9f57600080fd5b866020828501011115611eb157600080fd5b60209290920196919550909350505050565b8015158114611dc457600080fd5b60008060408385031215611ee457600080fd5b8235611eef81611da2565b91506020830135611eff81611ec3565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060008060808587031215611f4f57600080fd5b8435611f5a81611da2565b93506020850135611f6a81611da2565b925060408501359150606085013567ffffffffffffffff80821115611f8e57600080fd5b818701915087601f830112611fa257600080fd5b813581811115611fb457611fb4611f0a565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715611ffa57611ffa611f0a565b816040528281528a602084870101111561201357600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000806040838503121561204a57600080fd5b823561205581611da2565b91506020830135611eff81611da2565b600181811c9082168061207957607f821691505b602082108114156120b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156120cb57600080fd5b81516114c481611ec3565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115612118576121186120d6565b500190565b60006020828403121561212f57600080fd5b81516114c481611da2565b60008282101561214c5761214c6120d6565b500390565b60008351612163818460208801611d08565b835190830190612177818360208801611d08565b01949350505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156121b2576121b26120d6565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826121f7576121f76121b9565b500490565b60008261220b5761220b6121b9565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea2646970667358221220ffdd83a2fc9a158347ca248f021e63fcef3a7985b3deb793f75cd1835b068aab64736f6c634300080a003360a060405234801561001057600080fd5b506040516106ca3803806106ca83398101604081905261002f9161006c565b60009190915560ff166080526001805460506001600160501b031991821681179092556004805490911690911790554260028190556003556100a2565b6000806040838503121561007f57600080fd5b82519150602083015160ff8116811461009757600080fd5b809150509250929050565b60805161060e6100bc600039600060d3015261060e6000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80639a6fc8f511610081578063d62ada111161005b578063d62ada11146102dc578063f7a30806146102f4578063feaf968c1461030757600080fd5b80639a6fc8f5146101cd578063bd18ad531461023a578063cd653afc1461024d57600080fd5b806354fd4d50116100b257806354fd4d501461012d57806367e8d83d1461013c5780637284e4161461018e57600080fd5b8063313ce567146100ce5780633fd0875f1461010c575b600080fd5b6100f57f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020015b60405180910390f35b6004546a0100000000000000000000900460ff166040516101039190610441565b60405160018152602001610103565b61018c61014a366004610482565b600480549115156c01000000000000000000000000027fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff909216919091179055565b005b604080518082018252600c81527f7072696365206f7261636c6500000000000000000000000000000000000000006020820152905161010391906104ab565b6102036101db36600461053d565b60015460005460025460035460045469ffffffffffffffffffff948516941691939590929450565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610103565b61018c610248366004610558565b61030f565b61018c61025b366004610579565b6001805469ffffffffffffffffffff9586167fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090911617905560029290925560035560048054919092167fffffffffffffffffffffffffffffffffffffffff00ff00000000000000000000909116176b020000000000000000000000179055565b6102e461035f565b6040519015158152602001610103565b61018c6103023660046105bf565b600055565b610203610385565b600480548291907fffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff166b01000000000000000000000083600281111561035757610357610412565b021790555050565b600454600090610380906b010000000000000000000000900460ff166103d6565b905090565b60008060008060006004600c9054906101000a900460ff16156103a757600080fd5b505060015460005460025460035460045469ffffffffffffffffffff9485169893975091955093509190911690565b600060028260028111156103ec576103ec610412565b14156103f757600080fd5b600182600281111561040b5761040b610412565b1492915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016006831061047c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561049457600080fd5b813580151581146104a457600080fd5b9392505050565b600060208083528351808285015260005b818110156104d8578581018301518582016040015282016104bc565b818111156104ea576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803569ffffffffffffffffffff8116811461053857600080fd5b919050565b60006020828403121561054f57600080fd5b6104a48261051e565b60006020828403121561056a57600080fd5b8135600381106104a457600080fd5b6000806000806080858703121561058f57600080fd5b6105988561051e565b935060208501359250604085013591506105b46060860161051e565b905092959194509250565b6000602082840312156105d157600080fd5b503591905056fea264697066735822122014874f7a973b86501c4c1a8be32490fe902c8f088ee234d25f9b2497e19f9e5264736f6c634300080a0033a2646970667358221220d8fdaadc825c43ac2783715ebcfe33e7b0ce3a396ac7717d65e4c95e98b6cf7f64736f6c634300080a003360806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d000117905534801561003957600080fd5b50600054604080516318caf8e360e31b815273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660048083019190915260248201929092526044810191909152632aa9a2a960e11b6064820152620100009091046001600160a01b03169063c657c71890608401600060405180830381600087803b1580156100ba57600080fd5b505af11580156100ce573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b81527390f79bf6eb2c4f870365e785982e1f101e93b90660048201526024810191909152600660448201526511949251539160d21b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561014f57600080fd5b505af1158015610163573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b8152733c44cdddb6a900fa2b585dd299e03d12fa4293bc60048201526024810191909152600a6044820152692624a8aaa4a220aa27a960b11b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b1580156101e857600080fd5b505af11580156101fc573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b815273c4375b7de8af5a38a93548eb8453a498222c4ff260048201526024810191909152600c60448201526b44554d425f4144445245535360a01b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561028357600080fd5b505af1158015610297573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b8152739965507d1a55bcc2695c58ba16fb37d819b0a4dc60048201526024810191909152600760448201526620a220a82a22a960c91b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561031957600080fd5b505af115801561032d573d6000803e3d6000fd5b505050506102a6806103406000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063ba414fa61461003b578063fa7626d414610057575b600080fd5b610043610064565b604051901515815260200160405180910390f35b6000546100439060ff1681565b60008054610100900460ff16156100845750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156101bf5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610129917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016101ff565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526101619161023b565b6000604051808303816000865af19150503d806000811461019e576040519150601f19603f3d011682016040523d82523d6000602084013e6101a3565b606091505b50915050808060200190518101906101bb919061024e565b9150505b919050565b6000815160005b818110156101e557602081850181015186830152016101cb565b818111156101f4576000828601525b509290920192915050565b7fffffffff0000000000000000000000000000000000000000000000000000000083168152600061023360048301846101c4565b949350505050565b600061024782846101c4565b9392505050565b60006020828403121561026057600080fd5b8151801515811461024757600080fdfea2646970667358221220293f55a0ef7b60c31a89dbc50e3339c80a8fdb1f9567614b200e97598226671f64736f6c634300080a003360806040523480156200001157600080fd5b506040516201110538038062011105833981016040819052620000349162000811565b6200003f3362000734565b6040516200004d9062000784565b604051809103906000f0801580156200006a573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b039283169081179091556040516310dc138160e31b81529184166004830152906386e09c0890602401600060405180830381600087803b158015620000c457600080fd5b505af1158015620000d9573d6000803e3d6000fd5b50506001546040516301ed651160e41b81526001600160a01b0385811660048301529091169250631ed651109150602401600060405180830381600087803b1580156200012557600080fd5b505af11580156200013a573d6000803e3d6000fd5b505050506040516200014c9062000792565b604051809103906000f08015801562000169573d6000803e3d6000fd5b50600280546001600160a01b0319166001600160a01b039283169081179091556001546040516376aad60560e01b81526004810192909252909116906376aad60590602401600060405180830381600087803b158015620001c957600080fd5b505af1158015620001de573d6000803e3d6000fd5b5050600154604051600093506001600160a01b0390911691506200020290620007a0565b6001600160a01b039091168152602001604051809103906000f0801580156200022f573d6000803e3d6000fd5b5060015460405163338f12b960e21b81526001600160a01b03808416600483015292935091169063ce3c4ae490602401600060405180830381600087803b1580156200027a57600080fd5b505af11580156200028f573d6000803e3d6000fd5b5050600154604051600093506001600160a01b039091169150620002b390620007ae565b6001600160a01b039091168152602001604051809103906000f080158015620002e0573d6000803e3d6000fd5b5060015460405163c5120b3960e01b81526001600160a01b03808416600483015292935091169063c5120b3990602401600060405180830381600087803b1580156200032b57600080fd5b505af115801562000340573d6000803e3d6000fd5b5050600154604051606093506001600160a01b03909116915082906200036690620007bc565b6200037392919062000849565b604051809103906000f08015801562000390573d6000803e3d6000fd5b50600380546001600160a01b0319166001600160a01b0392831690811790915560015460405163530e784f60e01b815260048101929092529091169063530e784f90602401600060405180830381600087803b158015620003f057600080fd5b505af115801562000405573d6000803e3d6000fd5b5050600154604051600093506001600160a01b0390911691506200042990620007ca565b6001600160a01b039091168152602001604051809103906000f08015801562000456573d6000803e3d6000fd5b506001546040516356ee0d3b60e11b81526001600160a01b03808416600483015292935091169063addc1a7690602401600060405180830381600087803b158015620004a157600080fd5b505af1158015620004b6573d6000803e3d6000fd5b5050600154604051600093506001600160a01b039091169150620004da90620007d8565b6001600160a01b039091168152602001604051809103906000f08015801562000507573d6000803e3d6000fd5b506001546040516321da583760e01b81526001600160a01b0380841660048301529293509116906321da583790602401600060405180830381600087803b1580156200055257600080fd5b505af115801562000567573d6000803e3d6000fd5b505050506000306040516200057c90620007e6565b6001600160a01b039091168152602001604051809103906000f080158015620005a9573d6000803e3d6000fd5b50600154604051631795d5b360e31b81526001600160a01b03808416600483015292935091169063bcaead9890602401600060405180830381600087803b158015620005f457600080fd5b505af115801562000609573d6000803e3d6000fd5b505060405163f2fde38b60e01b81523360048201526001600160a01b038416925063f2fde38b9150602401600060405180830381600087803b1580156200064f57600080fd5b505af115801562000664573d6000803e3d6000fd5b505060015460405163f2fde38b60e01b81523360048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b158015620006ae57600080fd5b505af1158015620006c3573d6000803e3d6000fd5b505060025460405163f2fde38b60e01b81523360048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b1580156200070d57600080fd5b505af115801562000722573d6000803e3d6000fd5b505050505050505050505050620008b2565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610fcd80620010dd83390190565b61098c80620020aa83390190565b610f508062002a3683390190565b614da6806200398683390190565b611b45806200872c83390190565b612ced806200a27183390190565b611627806200cf5e83390190565b612b80806200e58583390190565b80516001600160a01b03811681146200080c57600080fd5b919050565b600080604083850312156200082557600080fd5b6200083083620007f4565b91506200084060208401620007f4565b90509250929050565b6001600160a01b0383811682526040602080840182905284518483018190526000938683019290916060870190865b81811015620008a3578551805186168452840151851684840152948301949186019160010162000878565b50909998505050505050505050565b61081b80620008c26000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80638874ff1f1161005b5780638874ff1f146100f55780638da5cb5b14610108578063de28735914610126578063f2fde38b1461014657600080fd5b80632630c12f146100825780632954018c146100cb578063715018a6146100eb575b600080fd5b6003546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6001546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b6100f3610159565b005b6100f3610103366004610658565b6101eb565b60005473ffffffffffffffffffffffffffffffffffffffff166100a2565b6002546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b6100f3610154366004610734565b6103e3565b60005473ffffffffffffffffffffffffffffffffffffffff1633146101df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6101e96000610513565b565b60005473ffffffffffffffffffffffffffffffffffffffff16331461026c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101d6565b60005b815181101561035c57600354825173ffffffffffffffffffffffffffffffffffffffff9091169063e8a97a3e908490849081106102ae576102ae610756565b6020026020010151600001518484815181106102cc576102cc610756565b6020026020010151602001516040518363ffffffff1660e01b815260040161031792919073ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b600060405180830381600087803b15801561033157600080fd5b505af1158015610345573d6000803e3d6000fd5b50505050808061035490610785565b91505061026f565b506002546040517ff2fde38b00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063f2fde38b90602401600060405180830381600087803b1580156103c857600080fd5b505af11580156103dc573d6000803e3d6000fd5b5050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101d6565b73ffffffffffffffffffffffffffffffffffffffff8116610507576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016101d6565b61051081610513565b50565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156105da576105da610588565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561062757610627610588565b604052919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461065357600080fd5b919050565b6000602080838503121561066b57600080fd5b823567ffffffffffffffff8082111561068357600080fd5b818501915085601f83011261069757600080fd5b8135818111156106a9576106a9610588565b6106b7848260051b016105e0565b818152848101925060069190911b8301840190878211156106d757600080fd5b928401925b8184101561072957604084890312156106f55760008081fd5b6106fd6105b7565b6107068561062f565b815261071386860161062f565b81870152835260409390930192918401916106dc565b979650505050505050565b60006020828403121561074657600080fd5b61074f8261062f565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156107de577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea26469706673582212205ee75e57bb635aa49a1758f4ab0b04182a73115bff08f420c56a8ddb433c029364736f6c634300080a0033608060405234801561001057600080fd5b5061001a3361005f565b60405130906f20a2222922a9a9afa82927ab24a222a960811b907fb37614c7d254ea8d16eb81fa11dddaeb266aa8ba4917980859c7740aff30c69190600090a36100af565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610f0f806100be6000396000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c806377532ed9116100e3578063bcaead981161008c578063ce3c4ae411610066578063ce3c4ae414610308578063f2fde38b1461031b578063fca513a81461032e57600080fd5b8063bcaead98146102da578063c5120b39146102ed578063c513c9bb1461030057600080fd5b80639068a868116100bd5780639068a868146102b7578063addc1a76146102bf578063affd9243146102d257600080fd5b806377532ed91461027e57806386e09c08146102865780638da5cb5b1461029957600080fd5b80634c252f9111610145578063699f200f1161011f578063699f200f1461022d578063715018a61461026357806376aad6051461026b57600080fd5b80634c252f91146101fc578063530e784f1461020457806354fd4d501461021757600080fd5b80631ed65110116101765780631ed65110146101cc57806321da5837146101e157806326c74fc3146101f457600080fd5b8063060678c21461019257806308737695146101c4575b600080fd5b61019a610336565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61019a610366565b6101df6101da366004610e10565b610391565b005b6101df6101ef366004610e10565b610444565b61019a6104ef565b61019a61051a565b6101df610212366004610e10565b610545565b61021f600281565b6040519081526020016101bb565b61019a61023b366004610e4d565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6101df6105f0565b6101df610279366004610e10565b61067d565b61019a610728565b6101df610294366004610e10565b610753565b60005473ffffffffffffffffffffffffffffffffffffffff1661019a565b61019a6107fe565b6101df6102cd366004610e10565b610829565b61019a6108d4565b6101df6102e8366004610e10565b6108ff565b6101df6102fb366004610e10565b6109aa565b61019a610a55565b6101df610316366004610e10565b610a80565b6101df610329366004610e10565b610b2b565b61019a610c58565b60006103617f444154415f434f4d50524553534f520000000000000000000000000000000000610c7f565b905090565b60006103617f41434c0000000000000000000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610417576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6104417f54524541535552595f434f4e545241435400000000000000000000000000000082610d1d565b50565b60005473ffffffffffffffffffffffffffffffffffffffff1633146104c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f574554485f47415445574159000000000000000000000000000000000000000082610d1d565b60006103617f54524541535552595f434f4e5452414354000000000000000000000000000000610c7f565b60006103617f574554485f544f4b454e00000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f50524943455f4f5241434c45000000000000000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610671576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b61067b6000610d9b565b565b60005473ffffffffffffffffffffffffffffffffffffffff1633146106fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f41434c000000000000000000000000000000000000000000000000000000000082610d1d565b60006103617f574554485f474154455741590000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146107d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f574554485f544f4b454e0000000000000000000000000000000000000000000082610d1d565b60006103617f4143434f554e545f464143544f52590000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146108aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f4143434f554e545f464143544f5259000000000000000000000000000000000082610d1d565b60006103617f474541525f544f4b454e00000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610980576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f474541525f544f4b454e0000000000000000000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f444154415f434f4d50524553534f52000000000000000000000000000000000082610d1d565b60006103617f434f4e5452414354535f52454749535445520000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610b01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f434f4e5452414354535f5245474953544552000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610bac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b73ffffffffffffffffffffffffffffffffffffffff8116610c4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161040e565b61044181610d9b565b60006103617f50524943455f4f5241434c4500000000000000000000000000000000000000005b6000818152600160209081526040808320548151808301909252600382527f41503100000000000000000000000000000000000000000000000000000000009282019290925273ffffffffffffffffffffffffffffffffffffffff9091169081610d16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040e9190610e66565b5092915050565b60008281526001602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091559051909184917fb37614c7d254ea8d16eb81fa11dddaeb266aa8ba4917980859c7740aff30c6919190a35050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215610e2257600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610e4657600080fd5b9392505050565b600060208284031215610e5f57600080fd5b5035919050565b600060208083528351808285015260005b81811015610e9357858101830151858201604001528201610e77565b81811115610ea5576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea264697066735822122083c228af017c6f5cf8c395cdf7a53276ff56fdd4f4313c39f680ab73bd75417364736f6c634300080a0033608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61090e8061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063732818191161008c578063adce758d11610066578063adce758d14610215578063ba306df114610228578063d4eb5db01461023b578063f2fde38b1461027457600080fd5b806373281819146101b7578063819ad68e146101da5780638da5cb5b146101ed57600080fd5b806354fd4d50116100bd57806354fd4d501461016a5780635f259aba14610180578063715018a6146101af57600080fd5b806335914829146100e45780633a41ec641461011c5780634910832f14610155575b600080fd5b6101076100f236600461089b565b60016020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61010761012a36600461089b565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205460ff1690565b61016861016336600461089b565b610287565b005b610172600181565b604051908152602001610113565b61010761018e36600461089b565b60005473ffffffffffffffffffffffffffffffffffffffff91821691161490565b610168610387565b6101076101c536600461089b565b60026020526000908152604090205460ff1681565b6101686101e836600461089b565b610414565b60005460405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610113565b61016861022336600461089b565b61050c565b61016861023636600461089b565b610601565b61010761024936600461089b565b73ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205460ff1690565b61016861028236600461089b565b6106f6565b60005473ffffffffffffffffffffffffffffffffffffffff16331461030d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909217909155517fae26b1cfe9454ba87274a4e8330b6654684362d0f3d7bbd17f7449a1d38387c69190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610408576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b6104126000610826565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517fd400da6c0c0a894dacc0981730b88af0545d00272ee8fff1437bf560ff245fc49190a250565b60005473ffffffffffffffffffffffffffffffffffffffff16331461058d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f1998397e7203f7baca9d6f41b9e4da6e768daac5caad4234fb9bf5869d2715459190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610682576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526001602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f28b01395b7e25d20552a0c8dc8ecd3b1d4abc986f14dad7885fd45b6fd73c8d99190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811661081a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610304565b61082381610826565b50565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156108ad57600080fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146108d157600080fd5b939250505056fea26469706673582212204712efbfe997070def77285a5b8753bc882b62da2133ce1937ad26cd2b48e49864736f6c634300080a003360a060405234801561001057600080fd5b50604051610f50380380610f5083398101604081905261002f916100d7565b6000805460ff19169055806001600160a01b03811661006157604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa15801561009f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100c391906100d7565b6001600160a01b0316608052506101079050565b6000602082840312156100e957600080fd5b81516001600160a01b038116811461010057600080fd5b9392505050565b608051610e1261013e600039600081816101e2015281816102b20152818161040f0152818161057801526108510152610e126000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80638456cb5911610097578063b4ac686011610066578063b4ac686014610217578063c29277cd1461021f578063d914cd4b14610227578063e26b2f631461023a57600080fd5b80638456cb59146101cd57806394144856146101d5578063a50cf2c8146101dd578063ac4afa381461020457600080fd5b80635b16ebb7116100d35780635b16ebb7146101575780635c975abb1461018a578063673a2a1f146101955780636fbc6f6b146101aa57600080fd5b80631e16e4fc146100fa5780633f4ba83a1461013757806354fd4d5014610141575b600080fd5b61010d610108366004610c97565b61024d565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61013f610284565b005b610149600181565b60405190815260200161012e565b61017a610165366004610cb0565b60026020526000908152604090205460ff1681565b604051901515815260200161012e565b60005460ff1661017a565b61019d610372565b60405161012e9190610ced565b61017a6101b8366004610cb0565b60046020526000908152604090205460ff1681565b61013f6103e1565b61019d6104cd565b61010d7f000000000000000000000000000000000000000000000000000000000000000081565b61010d610212366004610c97565b61053a565b600154610149565b600354610149565b61013f610235366004610cb0565b61054a565b61013f610248366004610cb0565b610823565b6003818154811061025d57600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa15801561030e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103329190610d47565b610368576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610370610af6565b565b606060018054806020026020016040519081016040528092919081815260200182805480156103d757602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116103ac575b5050505050905090565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561046b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048f9190610d47565b6104c5576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610370610bd7565b606060038054806020026020016040519081016040528092919081815260200182805480156103d75760200282019190600052602060002090815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116103ac575050505050905090565b6001818154811061025d57600080fd5b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156105d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f89190610d47565b61062e576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051808201909152600281527f5a30000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff82166106b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b60405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff8116600090815260026020908152604091829020548251808401909352600383527f43523100000000000000000000000000000000000000000000000000000000009183019190915260ff1615610753576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b506001805480820182557fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915560008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909417909355915190917ff816b5143086c89d103a0683286be86c2b741e83ebfa75135aae606e2f5c6e5391a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156108ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d19190610d47565b610907576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051808201909152600281527f5a30000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8216610989576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b5073ffffffffffffffffffffffffffffffffffffffff8116600090815260046020908152604091829020548251808401909352600383527f43523200000000000000000000000000000000000000000000000000000000009183019190915260ff1615610a23576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b506003805460018082019092557fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915560008181526004602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909417909355915190917f58ad3cfc4b6552a53c8c4128ae9b080e14b4378a159280643a62c6f709cee24f91a250565b60005460ff16610b62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016106b0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff1615610c44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016106b0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610bad3390565b600060208284031215610ca957600080fd5b5035919050565b600060208284031215610cc257600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610ce657600080fd5b9392505050565b6020808252825182820181905260009190848201906040850190845b81811015610d3b57835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101610d09565b50909695505050505050565b600060208284031215610d5957600080fd5b81518015158114610ce657600080fd5b600060208083528351808285015260005b81811015610d9657858101830151858201604001528201610d7a565b81811115610da8576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea26469706673582212208f2d91c863db9ab1494a9c5db20e3fddc4b6c779ea3c3621737c105c60d9440a64736f6c634300080a003360e06040523480156200001157600080fd5b5060405162004da638038062004da6833981016040819052620000349162000160565b6001600160a01b0381166200005c57604051635919af9760e11b815260040160405180910390fd5b6001600160a01b03811660808190526040805163c513c9bb60e01b8152905163c513c9bb916004808201926020929091908290030181865afa158015620000a7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cd919062000160565b6001600160a01b031660a0816001600160a01b0316815250506080516001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000127573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200014d919062000160565b6001600160a01b031660c0525062000192565b6000602082840312156200017357600080fd5b81516001600160a01b03811681146200018b57600080fd5b9392505050565b60805160a05160c051614b896200021d6000396000818161018801528181611c4f0152612c5a0152600081816101ed015281816115e201528181611f5f0152818161213f0152818161223f0152818161243801528181612604015281816126bc01528181612788015281816129a501528181613c410152613d000152600061013c0152614b896000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c806354fd4d5011610081578063a80deda31161005b578063a80deda31461020f578063ae093f3f1461022f578063fc9914cb1461024f57600080fd5b806354fd4d50146101bd578063663b8fdb146101d35780637a0c7b21146101e857600080fd5b80632954018c116100b25780632954018c146101375780634b2f336d146101835780634c472fc9146101aa57600080fd5b80630dbd616d146100d957806313d21cdf146101025780631bcd8fc014610122575b600080fd5b6100ec6100e73660046140fc565b610272565b6040516100f9919061430b565b60405180910390f35b61011561011036600461431e565b6114d4565b6040516100f99190614444565b61012a611f59565b6040516100f99190614453565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100f9565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b61015e6101b83660046140fc565b6121f5565b6101c5600281565b6040519081526020016100f9565b6101db612432565b6040516100f991906146ea565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b61022261021d36600461431e565b6126b5565b6040516100f9919061476a565b61024261023d36600461431e565b612a75565b6040516100f991906147dd565b61026261025d3660046140fc565b613bf7565b60405190151581526020016100f9565b61035f604051806102400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160008152602001606081526020016000815260200160008152602001600015158152602001600081526020016000815260200160008152602001600060ff168152602001600081525090565b600080600080600061037088613cf4565b509450945094509450945060008560ff1660011461041d576040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015284169063e958b70490602401602060405180830381865afa1580156103f4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061041891906147f0565b6104ad565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015286169063e958b70490602401602060405180830381865afa158015610489573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ad91906147f0565b60ff8716610200890181905273ffffffffffffffffffffffffffffffffffffffff808b1660208b01528b811660608b015282168952909150600114156109e9578473ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610538573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055c91906147f0565b73ffffffffffffffffffffffffffffffffffffffff90811660808901526040517fc7de38a600000000000000000000000000000000000000000000000000000000815282821660048201529085169063c7de38a690602401602060405180830381865afa1580156105d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f5919061480d565b60c08801526040517fdfd5946500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015285169063dfd5946590602401602060405180830381865afa158015610666573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068a919061480d565b60e08801526040517f3ce0735500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015260006024830152861690633ce0735590604401602060405180830381865afa92505050801561073c575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526107399181019061480d565b60015b6107455761074c565b6101408801525b6040517f3ce0735500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015260016024830152861690633ce0735590604401602060405180830381865afa9250505080156107f9575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526107f69181019061480d565b60015b61080257610809565b6101608801525b60c08701516040517f996329f800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526024820192909252600060448201529086169063996329f89060640160a060405180830381865afa9250505080156108c4575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526108c191810190614826565b60015b6108cd576108da565b505015156101808a015250505b8073ffffffffffffffffffffffffffffffffffffffff16631afbb7a46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610925573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610949919061480d565b6101a08801526040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152851690633192195c90602401602060405180830381865afa1580156109bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109df919061480d565b60a0880152610c26565b8273ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5891906147f0565b73ffffffffffffffffffffffffffffffffffffffff90811660808901526040517fc7de38a600000000000000000000000000000000000000000000000000000000815282821660048201529083169063c7de38a6906024016040805180830381865afa158015610acc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af09190614866565b5060c08801526040517fdfd5946500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015283169063dfd5946590602401602060405180830381865afa158015610b62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b86919061480d565b60e08801526040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152841690633192195c906024016040805180830381865afa158015610bf6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1a9190614866565b60a08901526101a08801525b60008660ff16600114610ca7578373ffffffffffffffffffffffffffffffffffffffff166316f0115b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca291906147f0565b610d16565b8573ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1691906147f0565b90508073ffffffffffffffffffffffffffffffffffffffff166345d31f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d87919061480d565b6101008901526000600160ff891614610e0e578473ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610de5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e09919061480d565b610e7d565b8573ffffffffffffffffffffffffffffffffffffffff166320a05ff76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7d919061480d565b90508760ff16600114610f1f576040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152861690638991b2f190602401602060405180830381865afa158015610ef6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1a919061480d565b610faf565b6040517fb451cecc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015287169063b451cecc90602401602060405180830381865afa158015610f8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610faf919061480d565b6102208a01528067ffffffffffffffff811115610fce57610fce61488a565b60405190808252806020026020018201604052801561103e57816020015b6040805160808101825260008082526020808301829052928201819052606082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181610fec5790505b506101208a015260005b818110156113d657604080516080810182526000808252602082018190529181018290526060810191909152600180831b9060ff8c1614156111c5576040517faf0a650200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018590528a169063af0a650290604401608060405180830381865afa1580156110f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111b91906148b9565b5050602084015273ffffffffffffffffffffffffffffffffffffffff9081168084526040517ff9eaee0d0000000000000000000000000000000000000000000000000000000081526004810191909152908a169063f9eaee0d90602401602060405180830381865afa158015611195573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b9919061490d565b15156040830152611388565b6040517f172c48c70000000000000000000000000000000000000000000000000000000081526004810184905273ffffffffffffffffffffffffffffffffffffffff89169063172c48c7906024016040805180830381865afa15801561122f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112539190614928565b5073ffffffffffffffffffffffffffffffffffffffff9081168084526040517f70a082310000000000000000000000000000000000000000000000000000000081529188166004830152906370a0823190602401602060405180830381865afa1580156112c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e8919061480d565b602083015281516040517ff9eaee0d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529088169063f9eaee0d90602401602060405180830381865afa15801561135c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611380919061490d565b151560408301525b6102208c015181161561139c57600161139f565b60005b151560608301526101208c01518051839190859081106113c1576113c161495e565b60209081029190910101525050600101611048565b508273ffffffffffffffffffffffffffffffffffffffff166317d11a156040518163ffffffff1660e01b8152600401602060405180830381865afa158015611422573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611446919061480d565b896101c00181815250508273ffffffffffffffffffffffffffffffffffffffff16633dc54b406040518163ffffffff1660e01b8152600401602060405180830381865afa15801561149b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bf919061480d565b6101e08a015250969998505050505050505050565b61159b604051806102000160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600060ff1681525090565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015283917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa15801561162b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164f919061490d565b611685576040517fd384b23800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316808352604080517ffe14112d000000000000000000000000000000000000000000000000000000008152905185929163fe14112d9160048083019260209291908290030181865afa1580156116f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611719919061480d565b8360c00181815250508073ffffffffffffffffffffffffffffffffffffffff1663ef8d96036040518163ffffffff1660e01b8152600401602060405180830381865afa15801561176d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611791919061480d565b8360e00181815250508073ffffffffffffffffffffffffffffffffffffffff1663743753596040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611809919061480d565b8360a00181815250508073ffffffffffffffffffffffffffffffffffffffff16634c19386c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561185d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611881919061480d565b836101000181815250508073ffffffffffffffffffffffffffffffffffffffff1663788c6bfe6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fa919061480d565b836101600181815250508073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561194f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611973919061480d565b8360800181815250508073ffffffffffffffffffffffffffffffffffffffff166345d31f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119eb919061480d565b836101400181815250508073ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6491906147f0565b836040019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff166336dda7d56040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0a91906147f0565b836060019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663788c6bfe6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb0919061480d565b836101600181815250508073ffffffffffffffffffffffffffffffffffffffff1663e941fa786040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c29919061480d565b61018084015260408084015173ffffffffffffffffffffffffffffffffffffffff9081167f000000000000000000000000000000000000000000000000000000000000000082161460208087019190915282517f609ae31700000000000000000000000000000000000000000000000000000000815292519184169263609ae31792600480830193928290030181865afa158015611ccb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cef919061480d565b836101c00181815250508073ffffffffffffffffffffffffffffffffffffffff1663dbcb313b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d68919061480d565b836101a00181815250506000836060015173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de7919061480d565b6040517f5427c9380000000000000000000000000000000000000000000000000000000081526004810182905290915060009073ffffffffffffffffffffffffffffffffffffffff841690635427c93890602401602060405180830381865afa158015611e58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7c919061480d565b90508015611ec7576101808501518190611eb890611e9c906127106149bc565b876101000151886101400151611eb291906149d3565b90613fd0565b611ec29190614a3f565b611ece565b8461014001515b856101200181815250508273ffffffffffffffffffffffffffffffffffffffff166354fd4d506040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f47919061480d565b60ff166101e086015250505050919050565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b4ac68606040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fec919061480d565b90508067ffffffffffffffff8111156120075761200761488a565b6040519080825280602002602001820160405280156120ff57816020015b6120ec604051806102000160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600060ff1681525090565b8152602001906001900390816120255790505b50915060005b818110156121f0576040517fac4afa38000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ac4afa3890602401602060405180830381865afa15801561219b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121bf91906147f0565b90506121ca816114d4565b8483815181106121dc576121dc61495e565b602090810291909101015250600101612105565b505090565b6040517f6fbc6f6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015260009184917f00000000000000000000000000000000000000000000000000000000000000001690636fbc6f6b90602401602060405180830381865afa158015612286573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122aa919061490d565b6122e0576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060006122ee87613cf4565b5050935093505092508260ff16600114612397576040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015282169063fdd5764590602401602060405180830381865afa15801561236e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061239291906147f0565b612427565b6040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015283169063fdd5764590602401602060405180830381865afa158015612403573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061242791906147f0565b979650505050505050565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c29277cd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124c5919061480d565b90508067ffffffffffffffff8111156124e0576124e061488a565b6040519080825280602002602001820160405280156125c457816020015b60408051610260810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083018290526101208301819052610140830181905261016083015261018082018190526101a082018190526101c082018190526101e082018190526102008201819052610220820181905261024082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816124fe5790505b50915060005b818110156121f0576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa158015612660573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061268491906147f0565b905061268f81612a75565b8483815181106126a1576126a161495e565b6020908102919091010152506001016125ca565b60606000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c29277cd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612725573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612749919061480d565b905060005b81811015612829576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa1580156127e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061280891906147f0565b90506128148187613bf7565b15612820578360010193505b5060010161274e565b508167ffffffffffffffff8111156128435761284361488a565b60405190808252806020026020018201604052801561296157816020015b61294e604051806102400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160008152602001606081526020016000815260200160008152602001600015158152602001600081526020016000815260200160008152602001600060ff168152602001600081525090565b8152602001906001900390816128615790505b5092506000915060005b81811015612a6d576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa158015612a01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a2591906147f0565b9050612a318187613bf7565b15612a6457612a408187610272565b858581518110612a5257612a5261495e565b60209081029190910101526001909301925b5060010161296b565b505050919050565b604080516102608101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082018390526101208201819052610140820181905261016082015261018081018290526101a081018290526101c081018290526101e08101829052610200810182905261022081018290526102408101829052908080808080612b1b88613cf4565b73ffffffffffffffffffffffffffffffffffffffff8e168d5260ff86166101808e01819052959b50939950919750955093509150600114612bca578273ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ba1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bc591906147f0565b612c39565b8473ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c3991906147f0565b73ffffffffffffffffffffffffffffffffffffffff908116602089018190527f00000000000000000000000000000000000000000000000000000000000000009091161460408801526000600160ff881614612d03578373ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cfe91906147f0565b612d72565b8573ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d7291906147f0565b6040517f2e97ca2100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b8116600483015291925090821690632e97ca2190602401602060405180830381865afa158015612de2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e06919061490d565b15156060890152604080517f45d31f9d000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff8316916345d31f9d9160048083019260209291908290030181865afa158015612e78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e9c919061480d565b8860800181815250508073ffffffffffffffffffffffffffffffffffffffff1663743753596040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ef0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f14919061480d565b610100890152600160ff88161415613017578573ffffffffffffffffffffffffffffffffffffffff16639b2cb5d86040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f95919061480d565b8860a00181815250508573ffffffffffffffffffffffffffffffffffffffff16635f48f3936040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fe9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061300d919061480d565b60c08901526130a5565b8273ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa158015613061573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130859190614a73565b6fffffffffffffffffffffffffffffffff90811660c08b01521660a08901525b60008760ff16600114613126578473ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613121919061480d565b613195565b8573ffffffffffffffffffffffffffffffffffffffff166320a05ff76040518163ffffffff1660e01b8152600401602060405180830381865afa158015613171573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613195919061480d565b90508067ffffffffffffffff8111156131b0576131b061488a565b6040519080825280602002602001820160405280156131d9578160200160208202803683370190505b506101208a01528067ffffffffffffffff8111156131f9576131f961488a565b604051908082528060200260200182016040528015613222578160200160208202803683370190505b506101608a015260005b818110156134c4578860ff16600114156133b4576040517f5e5f2e260000000000000000000000000000000000000000000000000000000081526004810182905260009073ffffffffffffffffffffffffffffffffffffffff891690635e5f2e2690602401602060405180830381865afa1580156132ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132d291906147f0565b9050808b610120015183815181106132ec576132ec61495e565b73ffffffffffffffffffffffffffffffffffffffff92831660209182029290920101526040517f78327438000000000000000000000000000000000000000000000000000000008152828216600482015290891690637832743890602401602060405180830381865afa158015613367573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061338b919061480d565b8b610160015183815181106133a2576133a261495e565b602002602001018181525050506134bc565b6040517f172c48c70000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff87169063172c48c7906024016040805180830381865afa15801561341e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134429190614928565b8061ffff1690508b610120015183815181106134605761346061495e565b602002602001018c6101600151848151811061347e5761347e61495e565b60200260200101828152508273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525050505b60010161322c565b5060008860ff16600114613546578373ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561351d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613541919061480d565b6135b5565b8673ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613591573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135b5919061480d565b90508067ffffffffffffffff8111156135d0576135d061488a565b60405190808252806020026020018201604052801561361557816020015b60408051808201909152600080825260208201528152602001906001900390816135ee5790505b506101408b015260005b818110156139015760408051808201909152600080825260208201528a60ff166001146136da576040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff871690635094cb4f90602401602060405180830381865afa1580156136b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136d591906147f0565b613769565b6040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff8a1690635094cb4f90602401602060405180830381865afa158015613745573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061376991906147f0565b73ffffffffffffffffffffffffffffffffffffffff168152600160ff8c16146138245780516040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529089169063fdd5764590602401602060405180830381865afa1580156137fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061381f91906147f0565b6138b7565b80516040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152908a169063fdd5764590602401602060405180830381865afa158015613893573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138b791906147f0565b73ffffffffffffffffffffffffffffffffffffffff1660208201526101408c01518051829190849081106138ed576138ed61495e565b60209081029190910101525060010161361f565b508860ff166001141561398f578773ffffffffffffffffffffffffffffffffffffffff1663b2c53a6c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613959573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061397d919061480d565b60e08b015260ff6102408b0152613be9565b73ffffffffffffffffffffffffffffffffffffffff85166101a08b01819052604080517f9408b63f0000000000000000000000000000000000000000000000000000000081529051639408b63f916004808201926020929091908290030181865afa158015613a02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a2691906147f0565b8a6101e0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508473ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015613aa9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613acd9190614aa6565b5015156102008c015250604080517f9fd12b77000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff881691639fd12b779160048083019260209291908290030181865afa158015613b42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b66919061480d565b8a6102200181815250508573ffffffffffffffffffffffffffffffffffffffff16638345f26e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bdf9190614af7565b60ff166102408b01525b505050505050505050919050565b6040517f6fbc6f6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015260009184917f00000000000000000000000000000000000000000000000000000000000000001690636fbc6f6b90602401602060405180830381865afa158015613c88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cac919061490d565b613ce2576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613cec8484614023565b949350505050565b600080600080600080867f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636fbc6f6b826040518263ffffffff1660e01b8152600401613d73919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa158015613d90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613db4919061490d565b613dea576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8773ffffffffffffffffffffffffffffffffffffffff166354fd4d506040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e59919061480d565b96508660ff1660011415613ee0578795508573ffffffffffffffffffffffffffffffffffffffff1663f93f515b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613eb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ed991906147f0565b9450613fc6565b8793508373ffffffffffffffffffffffffffffffffffffffff16632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f5291906147f0565b92508373ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fc391906147f0565b91505b5091939550919395565b6000821580613fdd575081155b15613fea5750600061401d565b612710613ff8600282614b1a565b61ffff1661400684866149d3565b6140109190614b3b565b61401a9190614a3f565b90505b92915050565b6040517f055ee9b500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600091829185169063055ee9b590602401602060405180830381865afa158015614094573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140b891906147f0565b73ffffffffffffffffffffffffffffffffffffffff1614159392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146140f957600080fd5b50565b6000806040838503121561410f57600080fd5b823561411a816140d7565b9150602083013561412a816140d7565b809150509250929050565b600081518084526020808501945080840160005b8381101561419f578151805173ffffffffffffffffffffffffffffffffffffffff168852838101518489015260408082015115159089015260609081015115159088015260809096019590820190600101614149565b509495945050505050565b805173ffffffffffffffffffffffffffffffffffffffff168252600061024060208301516141f0602086018273ffffffffffffffffffffffffffffffffffffffff169052565b506040830151614204604086018215159052565b50606083015161422c606086018273ffffffffffffffffffffffffffffffffffffffff169052565b506080830151614254608086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060a083015160a085015260c083015160c085015260e083015160e085015261010080840151818601525061012080840151828287015261429783870182614135565b92505050610140808401518186015250610160808401518186015250610180808401516142c78287018215159052565b50506101a083810151908501526101c080840151908501526101e080840151908501526102008084015160ff16908501526102209283015192909301919091525090565b60208152600061401a60208301846141aa565b60006020828403121561433057600080fd5b813561433b816140d7565b9392505050565b805173ffffffffffffffffffffffffffffffffffffffff168252602081015161436f602084018215159052565b506040810151614397604084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060608101516143bf606084018273ffffffffffffffffffffffffffffffffffffffff169052565b506080818101519083015260a0808201519083015260c0808201519083015260e08082015190830152610100808201519083015261012080820151908301526101408082015190830152610160808201519083015261018080820151908301526101a080820151908301526101c080820151908301526101e09081015160ff16910152565b610200810161401d8284614342565b6020808252825182820181905260009190848201906040850190845b8181101561449657614482838551614342565b92840192610200929092019160010161446f565b50909695505050505050565b600081518084526020808501945080840160005b8381101561419f57815173ffffffffffffffffffffffffffffffffffffffff16875295820195908201906001016144b6565b600081518084526020808501945080840160005b8381101561419f578151805173ffffffffffffffffffffffffffffffffffffffff9081168952908401511683880152604090960195908201906001016144fc565b600081518084526020808501945080840160005b8381101561419f57815187529582019590820190600101614551565b805173ffffffffffffffffffffffffffffffffffffffff168252600061026060208301516145b3602086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060408301516145c7604086018215159052565b5060608301516145db606086018215159052565b506080830151608085015260a083015160a085015260c083015160c085015260e083015160e0850152610100808401518186015250610120808401518282870152614628838701826144a2565b92505050610140808401518583038287015261464483826144e8565b925050506101608084015185830382870152614660838261453d565b92505050610180808401516146798287018260ff169052565b50506101a08381015173ffffffffffffffffffffffffffffffffffffffff908116918601919091526101c0808501511515908601526101e080850151909116908501526102008084015115159085015261022080840151908501526102409283015160ff1692909301919091525090565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561475d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc088860301845261474b85835161456d565b94509285019290850190600101614711565b5092979650505050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561475d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08886030184526147cb8583516141aa565b94509285019290850190600101614791565b60208152600061401a602083018461456d565b60006020828403121561480257600080fd5b815161433b816140d7565b60006020828403121561481f57600080fd5b5051919050565b600080600080600060a0868803121561483e57600080fd5b5050835160208501516040860151606087015160809097015192989197509594509092509050565b6000806040838503121561487957600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080600080608085870312156148cf57600080fd5b84516148da816140d7565b60208601516040870151606090970151919890975090945092505050565b8051801515811461490857600080fd5b919050565b60006020828403121561491f57600080fd5b61401a826148f8565b6000806040838503121561493b57600080fd5b8251614946816140d7565b602084015190925061ffff8116811461412a57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156149ce576149ce61498d565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614a0b57614a0b61498d565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614a4e57614a4e614a10565b500490565b80516fffffffffffffffffffffffffffffffff8116811461490857600080fd5b60008060408385031215614a8657600080fd5b614a8f83614a53565b9150614a9d60208401614a53565b90509250929050565b600080600060608486031215614abb57600080fd5b614ac484614a53565b9250614ad2602085016148f8565b9150604084015164ffffffffff81168114614aec57600080fd5b809150509250925092565b600060208284031215614b0957600080fd5b815160ff8116811461433b57600080fd5b600061ffff80841680614b2f57614b2f614a10565b92169190910492915050565b60008219821115614b4e57614b4e61498d565b50019056fea2646970667358221220d15108d0bec9cc6f3903875dd8412869a3da1b36661bdc780e2e2f0ae3136d2464736f6c634300080a003360a06040523480156200001157600080fd5b5060405162001b4538038062001b45833981016040819052620000349162000608565b6000805460ff19169055816001600160a01b0381166200006757604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cc91906200070a565b6001600160a01b031660805250805160005b818110156200014257620001398382815181106200010057620001006200072f565b6020026020010151600001518483815181106200012157620001216200072f565b6020026020010151602001516200014c60201b60201c565b600101620000de565b5050505062000822565b6001600160a01b03821615806200016a57506001600160a01b038116155b156200018957604051635919af9760e11b815260040160405180910390fd5b620001a8826001600160a01b0316620004ba60201b620006751760201c565b620001d65760405163df4c572d60e01b81526001600160a01b03831660048201526024015b60405180910390fd5b620001f5816001600160a01b0316620004ba60201b620006751760201c565b6200021f5760405163df4c572d60e01b81526001600160a01b0382166004820152602401620001cd565b806001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200027c575060408051601f3d908101601f19168201909252620002799181019062000745565b60015b6200029a576040516367a7cd4360e01b815260040160405180910390fd5b8060ff16600814620002bf576040516367a7cd4360e01b815260040160405180910390fd5b506000816001600160a01b031663d62ada116040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200031f575060408051601f3d908101601f191682019092526200031c918101906200076a565b60015b6200032a576200032d565b90505b6000836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200038c575060408051601f3d908101601f19168201909252620003899181019062000745565b60015b620003aa5760405163528ca31d60e01b815260040160405180910390fd5b60128160ff161115620003d05760405163528ca31d60e01b815260040160405180910390fd5b9050826001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa9250505080156200042f575060408051601f3d908101601f191682019092526200042c91810190620007a6565b60015b6200044d576040516367a7cd4360e01b815260040160405180910390fd5b8662000461576200046185858484620004c0565b5050505050620004748484848462000526565b826001600160a01b0316846001600160a01b03167fe263805b03657ab13064915d0723c5ce14981547e7cba5283f66b9e5d81f6e6e60405160405180910390a350505050565b3b151590565b60008313620004e2576040516356e05d2b60e01b815260040160405180910390fd5b836001600160501b0316816001600160501b0316108062000501575081155b15620005205760405163b1cf675560e01b815260040160405180910390fd5b50505050565b6001600160a01b03831682156200053e57600160a11b175b6200055460ff60a21b60a284901b1682620007fb565b6001600160a01b0390951660009081526001602052604090209490945550505050565b80516001600160a01b03811681146200058f57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715620005cf57620005cf62000594565b60405290565b604051601f8201601f191681016001600160401b038111828210171562000600576200060062000594565b604052919050565b60008060408084860312156200061d57600080fd5b620006288462000577565b602085810151919450906001600160401b03808211156200064857600080fd5b818701915087601f8301126200065d57600080fd5b81518181111562000672576200067262000594565b62000682848260051b01620005d5565b818152848101925060069190911b830184019089821115620006a357600080fd5b928401925b81841015620006fa5785848b031215620006c25760008081fd5b620006cc620005aa565b620006d78562000577565b8152620006e686860162000577565b8187015283529285019291840191620006a8565b8096505050505050509250929050565b6000602082840312156200071d57600080fd5b620007288262000577565b9392505050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156200075857600080fd5b815160ff811681146200072857600080fd5b6000602082840312156200077d57600080fd5b815180151581146200072857600080fd5b80516001600160501b03811681146200058f57600080fd5b600080600080600060a08688031215620007bf57600080fd5b620007ca866200078e565b9450602086015193506040860151925060608601519150620007ef608087016200078e565b90509295509295909350565b600082198211156200081d57634e487b7160e01b600052601160045260246000fd5b500190565b6080516112f262000853600039600081816101b201528181610280015281816103e201526104ff01526112f26000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c80638456cb591161008c578063b66102df11610066578063b66102df146101d4578063e8a97a3e146101e7578063f190e5fa146101fa578063f9a650301461023f57600080fd5b80638456cb591461016d5780639dcb511a14610175578063a50cf2c8146101ad57600080fd5b80635c975abb116100bd5780635c975abb1461011c5780635cecbd0e146101325780637afb01041461015a57600080fd5b80633f4ba83a146100e457806341976e09146100ee57806354fd4d5014610114575b600080fd5b6100ec610252565b005b6101016100fc366004610f28565b610340565b6040519081526020015b60405180910390f35b610101600281565b60005460ff16604051901515815260200161010b565b610145610140366004610f4a565b610352565b6040805192835260208301919091520161010b565b610101610168366004610f90565b610376565b6100ec6103b4565b610188610183366004610f28565b6104a0565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010b565b6101887f000000000000000000000000000000000000000000000000000000000000000081565b6101016101e2366004610fbc565b6104b4565b6100ec6101f5366004610ff8565b6104d1565b61020d610208366004610f28565b6105c3565b6040805173ffffffffffffffffffffffffffffffffffffffff909416845291151560208401529082015260600161010b565b61010161024d366004610f90565b61064d565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156102dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103009190611022565b610336576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033e61067b565b565b600061034b82610761565b5092915050565b60008061035f868661064d565b915061036b848461064d565b905094509492505050565b600080600061038484610761565b90925090508161039582600a611193565b61039f908761119f565b6103a991906111dc565b925050505b92915050565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561043e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104629190611022565b610498576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033e610819565b60006104ab826105c3565b50909392505050565b60006104c96104c3858561064d565b83610376565b949350505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561055b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057f9190611022565b6105b5576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105bf82826108d9565b5050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600160205260408120548190819080610624576040517f4bb8ad8200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b947402000000000000000000000000000000000000000086161515945060a286901c9350915050565b600080600061065b84610761565b909250905061066b81600a611193565b61039f838761119f565b3b151590565b60005460ff166106ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b600080600080610770856105c3565b8095508193508294505050506000806000808573ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156107cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f19190611231565b9450945050935093508461080b5761080b84848484610dd9565b829750505050505050915091565b60005460ff1615610886576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016106e3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586107373390565b73ffffffffffffffffffffffffffffffffffffffff82161580610910575073ffffffffffffffffffffffffffffffffffffffff8116155b15610947576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82163b6109ad576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016106e3565b73ffffffffffffffffffffffffffffffffffffffff81163b610a13576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024016106e3565b8073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610a98575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610a9591810190611281565b60015b610ace576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060ff16600814610b0b576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060008173ffffffffffffffffffffffffffffffffffffffff1663d62ada116040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610b93575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610b9091810190611022565b60015b610b9c57610b9f565b90505b60008373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610c26575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610c2391810190611281565b60015b610c5c576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60128160ff161115610c9a576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b90508273ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa925050508015610d21575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610d1e91810190611231565b60015b610d57576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b86610d6857610d6885858484610dd9565b5050505050610d7984848484610e74565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fe263805b03657ab13064915d0723c5ce14981547e7cba5283f66b9e5d81f6e6e60405160405180910390a350505050565b60008313610e13576040517f56e05d2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8369ffffffffffffffffffff168169ffffffffffffffffffff161080610e37575081155b15610e6e576040517fb1cf675500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b73ffffffffffffffffffffffffffffffffffffffff83168215610ea95774020000000000000000000000000000000000000000175b610ecf7503fc000000000000000000000000000000000000000060a284901b16826112a4565b73ffffffffffffffffffffffffffffffffffffffff90951660009081526001602052604090209490945550505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610f2357600080fd5b919050565b600060208284031215610f3a57600080fd5b610f4382610eff565b9392505050565b60008060008060808587031215610f6057600080fd5b84359350610f7060208601610eff565b925060408501359150610f8560608601610eff565b905092959194509250565b60008060408385031215610fa357600080fd5b82359150610fb360208401610eff565b90509250929050565b600080600060608486031215610fd157600080fd5b83359250610fe160208501610eff565b9150610fef60408501610eff565b90509250925092565b6000806040838503121561100b57600080fd5b61101483610eff565b9150610fb360208401610eff565b60006020828403121561103457600080fd5b81518015158114610f4357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b808511156110cc57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156110b2576110b2611044565b808516156110bf57918102915b93841c9390800290611078565b509250929050565b6000826110e3575060016103ae565b816110f0575060006103ae565b816001811461110657600281146111105761112c565b60019150506103ae565b60ff84111561112157611121611044565b50506001821b6103ae565b5060208310610133831016604e8410600b841016171561114f575081810a6103ae565b6111598383611073565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561118b5761118b611044565b029392505050565b6000610f4383836110d4565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156111d7576111d7611044565b500290565b600082611212577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b805169ffffffffffffffffffff81168114610f2357600080fd5b600080600080600060a0868803121561124957600080fd5b61125286611217565b945060208601519350604086015192506060860151915061127560808701611217565b90509295509295909350565b60006020828403121561129357600080fd5b815160ff81168114610f4357600080fd5b600082198211156112b7576112b7611044565b50019056fea2646970667358221220e7485a2cb5750973f539ca59d2211008b42bb92b6c49605a53f5d9c88c330fb164736f6c634300080a003360e06040523480156200001157600080fd5b5060405162002ced38038062002ced8339810160408190526200003491620004bb565b6000805460ff19169055806001600160a01b0381166200006757604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cc9190620004bb565b6001600160a01b039081166080526001805560408051808201909152600281526105a360f41b602082015291508216620001245760405162461bcd60e51b81526004016200011b9190620004ed565b60405180910390fd5b50806001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000164573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200018a9190620004bb565b6001600160a01b031660c052604051620001a490620004ad565b604051809103906000f080158015620001c1573d6000803e3d6000fd5b506001600160a01b031660a08190526040805163204a7f0760e21b81529051638129fc1c9160048082019260009290919082900301818387803b1580156200020857600080fd5b505af11580156200021d573d6000803e3d6000fd5b50505050620002316200028a60201b60201c565b50600454600380546001600160a01b039092166001600160a01b03199283161790556000805260026020527fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b8054909116905562000545565b6000620002a460a0516200038c60201b6200119b1760201c565b9050806001600160a01b0316638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620002e257600080fd5b505af1158015620002f7573d6000803e3d6000fd5b5050600480546001600160a01b03908116600090815260026020908152604090912080546001600160a01b03199081169388169384179091558354169091179091556200035492506005915083906200043b811b6200127d17901c565b506040516001600160a01b038216907f9f69b6c10f6810213e055b0ba6bc0a4e2603f73c221aad77ea35da819cda7dc390600090a250565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260601b60148201526e5af43d82803e903d91602b57fd5bf360881b60288201526037816000f09150506001600160a01b038116620004365760405162461bcd60e51b815260206004820152601660248201527f455243313136373a20637265617465206661696c65640000000000000000000060448201526064016200011b565b919050565b600062000452836001600160a01b0384166200045b565b90505b92915050565b6000818152600183016020526040812054620004a45750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000455565b50600062000455565b610e788062001e7583390190565b600060208284031215620004ce57600080fd5b81516001600160a01b0381168114620004e657600080fd5b9392505050565b600060208083528351808285015260005b818110156200051c57858101830151858201604001528201620004fe565b818111156200052f576000604083870101525b50601f01601f1916929092016040019392505050565b60805160a05160c0516118cf620005a66000396000818161026a015281816103680152610b7001526000818161020201526110650152600081816102c4015281816105b80152818161099601528181610a840152610e7401526118cf6000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806388f64c54116100cd578063b193976311610081578063d82ecc4811610066578063d82ecc4814610309578063e3ba9ace1461031c578063f23953ab1461032f57600080fd5b8063b1939763146102f9578063b60e85181461030157600080fd5b80638f7dcfa3116100b25780638f7dcfa31461029f578063a50cf2c8146102bf578063a904aab6146102e657600080fd5b806388f64c541461026557806389b77b3e1461028c57600080fd5b806354fd4d50116101245780635da33c5b116101095780635da33c5b146101fd578063765e0159146102245780638456cb591461025d57600080fd5b806354fd4d50146101d05780635c975abb146101e657600080fd5b806313d8c8401461015657806321d18456146101a05780632932472f146101b35780633f4ba83a146101c8575b600080fd5b6004546101769073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6101766101ae366004611651565b610337565b6101c66101c1366004611697565b61058a565b005b6101c6610968565b6101d8600181565b604051908152602001610197565b60005460ff165b6040519015158152602001610197565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101766102323660046116da565b73ffffffffffffffffffffffffffffffffffffffff9081166000908152600260205260409020541690565b6101c6610a56565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101c661029a3660046116da565b610b42565b6003546101769073ffffffffffffffffffffffffffffffffffffffff1681565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101c66102f4366004611697565b610e46565b6101d8610fb8565b6101d8611033565b6101ed6103173660046116da565b611044565b61017661032a3660046116f5565b611051565b6101c661105e565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa1580156103c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103e8919061170e565b6040518060400160405280600281526020017f43500000000000000000000000000000000000000000000000000000000000008152509061045f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b60405180910390fd5b506104686112a6565b6003805473ffffffffffffffffffffffffffffffffffffffff8082166000818152600260205260409081902080549093167fffffffffffffffffffffffff0000000000000000000000000000000000000000948516179094558154909216905590517fc75b5a710000000000000000000000000000000000000000000000000000000081523360048201526024810185905260448101849052819063c75b5a7190606401600060405180830381600087803b15801561052657600080fd5b505af115801561053a573d6000803e3d6000fd5b505060405133925073ffffffffffffffffffffffffffffffffffffffff841691507ff3ede7039176503a8ad1fe7cfaa29475a9dbe0cdcaf04ecf9a5c10570c47b10390600090a390505b92915050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610614573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610638919061170e565b61066e576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106766112a6565b60035473ffffffffffffffffffffffffffffffffffffffff838116911614156106fa576003805473ffffffffffffffffffffffffffffffffffffffff808216600090815260026020526040902080549091167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092558154169055610865565b73ffffffffffffffffffffffffffffffffffffffff838116600090815260026020908152604091829020548251808401909352600383527f4146330000000000000000000000000000000000000000000000000000000000918301919091529091848116911614610798576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b5060045473ffffffffffffffffffffffffffffffffffffffff838116911614156107fd57600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85161790555b73ffffffffffffffffffffffffffffffffffffffff828116600081815260026020526040808220805488861684529183208054929095167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790945591905281541690555b6040517fc75b5a7100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600060248301819052604483015283169063c75b5a7190606401600060405180830381600087803b1580156108dc57600080fd5b505af11580156108f0573d6000803e3d6000fd5b505050506109088260056112dd90919063ffffffff16565b508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f25e267469ba2ae82515be7b3d45df60bf8308343f0809e8cf7319058e2255ce660405160405180910390a3505050565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156109f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a16919061170e565b610a4c576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a546112ff565b565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015610ae0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b04919061170e565b610b3a576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a546113e0565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa158015610bcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf0919061170e565b6040518060400160405280600281526020017f435000000000000000000000000000000000000000000000000000000000000081525090610c5e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b50610c6a6005826114a0565b6040518060400160405280600381526020017f414634000000000000000000000000000000000000000000000000000000000081525090610cd8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b50438173ffffffffffffffffffffffffffffffffffffffff16633dc54b406040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4991906117a3565b14156040518060400160405280600381526020017f414631000000000000000000000000000000000000000000000000000000000081525090610db9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b506004805473ffffffffffffffffffffffffffffffffffffffff90811660009081526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081169487169485179091558454168317909355915190917fced6ab9afc868b3a088366f6631ae20752993b5cce5d5f0534ea5a59fcc57d5691a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610ed0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef4919061170e565b610f2a576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f19a1603900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301528416906319a1603990604401600060405180830381600087803b158015610f9b57600080fd5b505af1158015610faf573d6000803e3d6000fd5b50505050505050565b600354600090819073ffffffffffffffffffffffffffffffffffffffff165b73ffffffffffffffffffffffffffffffffffffffff81161561102d5773ffffffffffffffffffffffffffffffffffffffff9081166000908152600260205260409020541681611025816117eb565b925050610fd7565b50919050565b600061103f60056114cf565b905090565b60006105846005836114a0565b60006105846005836114d9565b60006110897f000000000000000000000000000000000000000000000000000000000000000061119b565b90508073ffffffffffffffffffffffffffffffffffffffff16638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156110d357600080fd5b505af11580156110e7573d6000803e3d6000fd5b50506004805473ffffffffffffffffffffffffffffffffffffffff908116600090815260026020526040902080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811692871692831790915582541617905550611156905060058261127d565b5060405173ffffffffffffffffffffffffffffffffffffffff8216907f9f69b6c10f6810213e055b0ba6bc0a4e2603f73c221aad77ea35da819cda7dc390600090a250565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260601b60148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f091505073ffffffffffffffffffffffffffffffffffffffff8116611278576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f455243313136373a20637265617465206661696c6564000000000000000000006044820152606401610456565b919050565b600061129f8373ffffffffffffffffffffffffffffffffffffffff84166114e5565b9392505050565b60035473ffffffffffffffffffffffffffffffffffffffff90811660009081526002602052604090205416610a5457610a5461105e565b600061129f8373ffffffffffffffffffffffffffffffffffffffff8416611534565b60005460ff1661136b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610456565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff161561144d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610456565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586113b63390565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600183016020526040812054151561129f565b6000610584825490565b600061129f8383611627565b600081815260018301602052604081205461152c57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610584565b506000610584565b6000818152600183016020526040812054801561161d576000611558600183611824565b855490915060009061156c90600190611824565b90508181146115d157600086600001828154811061158c5761158c61183b565b90600052602060002001549050808760000184815481106115af576115af61183b565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806115e2576115e261186a565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610584565b6000915050610584565b600082600001828154811061163e5761163e61183b565b9060005260206000200154905092915050565b6000806040838503121561166457600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff8116811461127857600080fd5b6000806000606084860312156116ac57600080fd5b6116b584611673565b92506116c360208501611673565b91506116d160408501611673565b90509250925092565b6000602082840312156116ec57600080fd5b61129f82611673565b60006020828403121561170757600080fd5b5035919050565b60006020828403121561172057600080fd5b8151801515811461129f57600080fd5b600060208083528351808285015260005b8181101561175d57858101830151858201604001528201611741565b8181111561176f576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b6000602082840312156117b557600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561181d5761181d6117bc565b5060010190565b600082821015611836576118366117bc565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220f1e9c81b8c3af2491c907ee66cf24e1bb76111b821db02df8f98dbb48b5ab5fa64736f6c634300080a0033608060405234801561001057600080fd5b50610e58806100206000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c806354fd4d5011610081578063c45a01551161005b578063c45a0155146101a4578063c75b5a71146101ca578063d1660f99146101dd57600080fd5b806354fd4d501461014f5780638129fc1c14610157578063c12c21c01461015f57600080fd5b80631afbb7a4116100b25780631afbb7a41461011d5780631cff79cd146101265780633dc54b401461014657600080fd5b806316128211146100d957806317d11a15146100ee57806319a160391461010a575b600080fd5b6100ec6100e7366004610b42565b6101f0565b005b6100f760035481565b6040519081526020015b60405180910390f35b6100ec610118366004610b8d565b61024c565b6100f760025481565b610139610134366004610bef565b6102c9565b6040516101019190610d49565b6100f760045481565b6100f7600181565b6100ec610344565b60015461017f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610101565b60005461017f9062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b6100ec6101d8366004610d5c565b610494565b6100ec6101eb366004610d8f565b61053d565b60015473ffffffffffffffffffffffffffffffffffffffff163314610241576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600291909155600355565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1633146102a3576040517fb126b84800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102c573ffffffffffffffffffffffffffffffffffffffff83168260006105b4565b5050565b60015460609073ffffffffffffffffffffffffffffffffffffffff16331461031d576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033d73ffffffffffffffffffffffffffffffffffffffff8416836107b4565b9392505050565b600054610100900460ff1661035f5760005460ff1615610363565b303b155b6103f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600054610100900460ff1615801561043357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000166101011790555b600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16336201000002179055801561049157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b50565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1633146104eb576040517fb126b84800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff949094169390931790925560025560035543600455565b60015473ffffffffffffffffffffffffffffffffffffffff16331461058e576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105af73ffffffffffffffffffffffffffffffffffffffff841683836107f6565b505050565b80158061065457506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015284169063dd62ed3e90604401602060405180830381865afa15801561062e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106529190610dcb565b155b6106e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e63650000000000000000000060648201526084016103eb565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526105af9084907f095ea7b300000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261084c565b606061033d83836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250610958565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526105af9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401610732565b60006108ae826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166109589092919063ffffffff16565b8051909150156105af57808060200190518101906108cc9190610de4565b6105af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016103eb565b6060610967848460008561096f565b949350505050565b606082471015610a01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016103eb565b843b610a69576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016103eb565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051610a929190610e06565b60006040518083038185875af1925050503d8060008114610acf576040519150601f19603f3d011682016040523d82523d6000602084013e610ad4565b606091505b5091509150610ae4828286610aef565b979650505050505050565b60608315610afe57508161033d565b825115610b0e5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103eb9190610d49565b60008060408385031215610b5557600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff81168114610b8857600080fd5b919050565b60008060408385031215610ba057600080fd5b610ba983610b64565b9150610bb760208401610b64565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215610c0257600080fd5b610c0b83610b64565b9150602083013567ffffffffffffffff80821115610c2857600080fd5b818501915085601f830112610c3c57600080fd5b813581811115610c4e57610c4e610bc0565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715610c9457610c94610bc0565b81604052828152886020848701011115610cad57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b83811015610cea578181015183820152602001610cd2565b83811115610cf9576000848401525b50505050565b60008151808452610d17816020860160208601610ccf565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061033d6020830184610cff565b600080600060608486031215610d7157600080fd5b610d7a84610b64565b95602085013595506040909401359392505050565b600080600060608486031215610da457600080fd5b610dad84610b64565b9250610dbb60208501610b64565b9150604084013590509250925092565b600060208284031215610ddd57600080fd5b5051919050565b600060208284031215610df657600080fd5b8151801515811461033d57600080fd5b60008251610e18818460208701610ccf565b919091019291505056fea2646970667358221220448e7046078cd668c09328d857e534e2aab6cdc0e691d3d4f2c8baae8e084b1364736f6c634300080a003360c06040523480156200001157600080fd5b506040516200162738038062001627833981016040819052620000349162000177565b60408051808201909152600281526105a360f41b60208201526001600160a01b038216620000805760405162461bcd60e51b8152600401620000779190620001a9565b60405180910390fd5b50806001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e6919062000177565b6001600160a01b03166080816001600160a01b031681525050806001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200013e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000164919062000177565b6001600160a01b031660a0525062000201565b6000602082840312156200018a57600080fd5b81516001600160a01b0381168114620001a257600080fd5b9392505050565b600060208083528351808285015260005b81811015620001d857858101830151858201604001528201620001ba565b81811115620001eb576000604083870101525b50601f01601f1916929092016040019392505050565b60805160a0516113c2620002656000396000818161021f0152818161036401526106d501526000818160af0152818161012a015281816104420152818161056e015281816107b301528181610aa601528181610b890152610c6701526113c26000f3fe60806040526004361061005e5760003560e01c80635869dba8116100435780635869dba814610199578063deecfbc9146101bb578063e79a4089146101ce57600080fd5b80634f0e0ef31461011857806354fd4d501461017657600080fd5b366101135760408051808201909152600381527f574732000000000000000000000000000000000000000000000000000000000060208201523373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b60405180910390fd5b50005b600080fd5b34801561012457600080fd5b5061014c7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561018257600080fd5b5061018b600181565b60405190815260200161016d565b3480156101a557600080fd5b506101b96101b4366004611263565b6101ee565b005b6101b96101c936600461128f565b61031d565b3480156101da57600080fd5b506101b96101e93660046112e1565b61068e565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201819052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa15801561027b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061029f9190611318565b6040518060400160405280600281526020017f43500000000000000000000000000000000000000000000000000000000000008152509061030d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b506103188383610a77565b505050565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808516600483015284917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa1580156103ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103d19190611318565b6040518060400160405280600281526020017f52500000000000000000000000000000000000000000000000000000000000008152509061043f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e6919061133a565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600381526020017f57473100000000000000000000000000000000000000000000000000000000008152509061056b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156105d457600080fd5b505af11580156105e8573d6000803e3d6000fd5b50505050506105f78434610b3c565b6040517f9aa5d46200000000000000000000000000000000000000000000000000000000815234600482015273ffffffffffffffffffffffffffffffffffffffff848116602483015261ffff84166044830152851690639aa5d46290606401600060405180830381600087803b15801561067057600080fd5b505af1158015610684573d6000803e3d6000fd5b5050505050505050565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808516600483015284917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa15801561071e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107429190611318565b6040518060400160405280600281526020017f5250000000000000000000000000000000000000000000000000000000000000815250906107b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610833573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610857919061133a565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600381526020017f5747310000000000000000000000000000000000000000000000000000000000815250906108dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b506109703330858773ffffffffffffffffffffffffffffffffffffffff166336dda7d56040518163ffffffff1660e01b8152600401602060405180830381865afa15801561092e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610952919061133a565b73ffffffffffffffffffffffffffffffffffffffff16929190610cd4565b6040517f05fe138b0000000000000000000000000000000000000000000000000000000081526004810184905230602482015260009073ffffffffffffffffffffffffffffffffffffffff8616906305fe138b906044016020604051808303816000875af11580156109e6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0a9190611357565b9050610a168382610a77565b8273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f6de63bb986f2779478e384365c03cc2e62f06b453856acca87d5a519ce02664960405160405180910390a35050505050565b6040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632e1a7d4d90602401600060405180830381600087803b158015610aff57600080fd5b505af1158015610b13573d6000803e3d6000fd5b50610b389250505073ffffffffffffffffffffffffffffffffffffffff831682610d6f565b5050565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015282917f00000000000000000000000000000000000000000000000000000000000000009091169063dd62ed3e90604401602060405180830381865afa158015610bd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf69190611357565b1015610b38576040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303816000875af1158015610cb0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103189190611318565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052610d69908590610ec9565b50505050565b80471015610dd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610107565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114610e33576040519150601f19603f3d011682016040523d82523d6000602084013e610e38565b606091505b5050905080610318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610107565b6000610f2b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16610fd59092919063ffffffff16565b8051909150156103185780806020019051810190610f499190611318565b610318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610107565b6060610fe48484600085610fee565b90505b9392505050565b606082471015611080576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610107565b843b6110e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610107565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516111119190611370565b60006040518083038185875af1925050503d806000811461114e576040519150601f19603f3d011682016040523d82523d6000602084013e611153565b606091505b509150915061116382828661116e565b979650505050505050565b6060831561117d575081610fe7565b82511561118d5782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b60005b838110156111dc5781810151838201526020016111c4565b83811115610d695750506000910152565b602081526000825180602084015261120c8160408501602087016111c1565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461126057600080fd5b50565b6000806040838503121561127657600080fd5b82356112818161123e565b946020939093013593505050565b6000806000606084860312156112a457600080fd5b83356112af8161123e565b925060208401356112bf8161123e565b9150604084013561ffff811681146112d657600080fd5b809150509250925092565b6000806000606084860312156112f657600080fd5b83356113018161123e565b92506020840135915060408401356112d68161123e565b60006020828403121561132a57600080fd5b81518015158114610fe757600080fd5b60006020828403121561134c57600080fd5b8151610fe78161123e565b60006020828403121561136957600080fd5b5051919050565b600082516113828184602087016111c1565b919091019291505056fea264697066735822122017fd7fc76e4a1efcf24b78a3417fad7ab9576f0a23aa756ddb211c5e2227aa9564736f6c634300080a003360806040523480156200001157600080fd5b5060405162002b8038038062002b80833981016040819052620000349162000122565b6001600160a01b0381166200008f5760405162461bcd60e51b815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640160405180910390fd5b6001600160a01b03811660008181526001602052604080822080546001600160601b0319166b204fce5e3e2502611000000090811790915590517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91620000f99190815260200190565b60405180910390a350600680546001600160a81b031916336101000260ff191617905562000154565b6000602082840312156200013557600080fd5b81516001600160a01b03811681146200014d57600080fd5b9392505050565b612a1c80620001646000396000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c806370a08231116100f9578063b4b5ea5711610097578063dd62ed3e11610071578063dd62ed3e14610503578063e7a324dc14610555578063f1127ed81461057c578063f2fde38b146105ee57600080fd5b8063b4b5ea57146104ca578063c3cda520146104dd578063d505accf146104f057600080fd5b806395d89b41116100d357806395d89b411461045b5780639742ca4614610497578063a9059cbb146104aa578063b0660c3d146104bd57600080fd5b806370a08231146103c7578063782d6fe11461040b5780637ecebe001461043b57600080fd5b806330adf81f11610166578063481c6a7511610140578063481c6a751461031e578063587cde1e146103435780635c19a95c146103795780636fcfff451461038c57600080fd5b806330adf81f14610298578063313ce567146102bf578063349dc329146102d957600080fd5b806320606b701161019757806320606b70146102545780632185810b1461027b57806323b872dd1461028557600080fd5b806306fdde03146101be578063095ea7b31461021057806318160ddd14610233575b600080fd5b6101fa6040518060400160405280600781526020017f47656172626f780000000000000000000000000000000000000000000000000081525081565b60405161020791906124a3565b60405180910390f35b61022361021e36600461253f565b610601565b6040519015158152602001610207565b6102466b204fce5e3e2502611000000081565b604051908152602001610207565b6102467f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b61028361070d565b005b610223610293366004612569565b6107ee565b6102467f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b6102c7601281565b60405160ff9091168152602001610207565b6007546102f99073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610207565b6006546102f990610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6102f96103513660046125a5565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6102836103873660046125a5565b61098a565b6103b261039a3660046125a5565b60046020526000908152604090205463ffffffff1681565b60405163ffffffff9091168152602001610207565b6102466103d53660046125a5565b73ffffffffffffffffffffffffffffffffffffffff166000908152600160205260409020546bffffffffffffffffffffffff1690565b61041e61041936600461253f565b610997565b6040516bffffffffffffffffffffffff9091168152602001610207565b6102466104493660046125a5565b60056020526000908152604090205481565b6101fa6040518060400160405280600481526020017f474541520000000000000000000000000000000000000000000000000000000081525081565b6102836104a53660046125a5565b610cae565b6102236104b836600461253f565b610e20565b6006546102239060ff1681565b61041e6104d83660046125a5565b610e5c565b6102836104eb3660046125d1565b610efa565b6102836104fe366004612629565b611310565b610246610511366004612693565b73ffffffffffffffffffffffffffffffffffffffff9182166000908152602081815260408083209390941682529190915220546bffffffffffffffffffffffff1690565b6102467fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b6105c561058a3660046126c6565b600360209081526000928352604080842090915290825290205463ffffffff81169064010000000090046bffffffffffffffffffffffff1682565b6040805163ffffffff90931683526bffffffffffffffffffffffff909116602083015201610207565b6102836105fc3660046125a5565b61187a565b6000807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83141561063f57506bffffffffffffffffffffffff610664565b6106618360405180606001604052806025815260200161285260259139611a15565b90505b3360008181526020818152604080832073ffffffffffffffffffffffffffffffffffffffff89168085529083529281902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff871690811790915590519081529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a360019150505b92915050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314610798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e616765720060448201526064015b60405180910390fd5b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f795b0e16c8da9807b0a215f3749bd6dbcc49fc0472183f4e446abb7dcbd9d00790600090a1565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081815260408083203380855290835281842054825160608101909352602580845291936bffffffffffffffffffffffff909116928592610856928892919061285290830139611a15565b90508673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156108a257506bffffffffffffffffffffffff82811614155b156109725760006108cc83836040518060600160405280603d8152602001612974603d9139611a67565b73ffffffffffffffffffffffffffffffffffffffff898116600081815260208181526040808320948a168084529482529182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff87169081179091559151918252939450919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505b61097d878783611ad5565b5060019695505050505050565b6109943382611e9c565b50565b6000438210610a28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f476561723a3a6765745072696f72566f7465733a206e6f74207965742064657460448201527f65726d696e656400000000000000000000000000000000000000000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff831660009081526004602052604090205463ffffffff1680610a63576000915050610707565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604081208491610a95600185612735565b63ffffffff90811682526020820192909252604001600020541611610b1b5773ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812090610ae5600184612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff1691506107079050565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020908152604080832083805290915290205463ffffffff16831015610b63576000915050610707565b600080610b71600184612735565b90505b8163ffffffff168163ffffffff161115610c565760006002610b968484612735565b610ba0919061275a565b610baa9083612735565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260036020908152604080832063ffffffff8581168552908352928190208151808301909252549283168082526401000000009093046bffffffffffffffffffffffff1691810191909152919250871415610c2a576020015194506107079350505050565b805163ffffffff16871115610c4157819350610c4f565b610c4c600183612735565b92505b5050610b74565b5073ffffffffffffffffffffffffffffffffffffffff8516600090815260036020908152604080832063ffffffff909416835292905220546bffffffffffffffffffffffff6401000000009091041691505092915050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314610d34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e6167657200604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff8116610db1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640161078f565b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f2f834d1c8c4b956018fff5faca4d99868ae635487424d9c265c257ccbc698c6a90600090a250565b600080610e45836040518060600160405280602681526020016128a760269139611a15565b9050610e52338583611ad5565b5060019392505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526004602052604081205463ffffffff1680610e94576000610ef3565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812090610ec5600184612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b9392505050565b604080518082018252600781527f47656172626f780000000000000000000000000000000000000000000000000060209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f028ef9f797075f74ac647c65fde04fb0f128c2d59fd40f45732269917642fd4681840152466060820152306080808301919091528351808303909101815260a0820184528051908301207fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60c083015273ffffffffffffffffffffffffffffffffffffffff8a1660e08301526101008201899052610120808301899052845180840390910181526101408301909452835193909201929092207f19010000000000000000000000000000000000000000000000000000000000006101608401526101628301829052610182830181905290916000906101a201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa1580156110d8573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166111a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f476561723a3a64656c656761746542795369673a20696e76616c69642073696760448201527f6e61747572650000000000000000000000000000000000000000000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff811660009081526005602052604081208054916111d7836127a4565b919050558914611269576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f476561723a3a64656c656761746542795369673a20696e76616c6964206e6f6e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161078f565b874211156112f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f476561723a3a64656c656761746542795369673a207369676e6174757265206560448201527f7870697265640000000000000000000000000000000000000000000000000000606482015260840161078f565b611303818b611e9c565b505050505b505050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86141561134d57506bffffffffffffffffffffffff611372565b61136f8660405180606001604052806024815260200161291c60249139611a15565b90505b604080518082018252600781527f47656172626f780000000000000000000000000000000000000000000000000060209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f028ef9f797075f74ac647c65fde04fb0f128c2d59fd40f45732269917642fd4681840152466060820152306080808301919091528351808303909101815260a0909101835280519082012073ffffffffffffffffffffffffffffffffffffffff8b166000908152600590925291812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918c918c918c919086611472836127a4565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810188905260e001604051602081830303815290604052805190602001209050600082826040516020016115199291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff8b169284019290925260608301899052608083018890529092509060019060a0016020604051602081039080840390855afa1580156115a2573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661164a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a7065726d69743a20696e76616c6964207369676e617475726500604482015260640161078f565b8b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146116df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f476561723a3a7065726d69743a20756e617574686f72697a6564000000000000604482015260640161078f565b88421115611749576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a7065726d69743a207369676e6174757265206578706972656400604482015260640161078f565b846000808e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508a73ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258760405161186491906bffffffffffffffffffffffff91909116815260200190565b60405180910390a3505050505050505050505050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314611900576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e6167657200604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff811661197d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640161078f565b60065460405173ffffffffffffffffffffffffffffffffffffffff80841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36006805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b6000816c010000000000000000000000008410611a5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b509192915050565b6000836bffffffffffffffffffffffff16836bffffffffffffffffffffffff1611158290611ac2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b50611acd83856127dd565b949350505050565b60065460ff1680611b025750600654610100900473ffffffffffffffffffffffffffffffffffffffff1633145b80611b24575060075473ffffffffffffffffffffffffffffffffffffffff1633145b611b8a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f476561723a3a7472616e73666572732061726520666f7262696464656e000000604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff8316611c2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603c60248201527f476561723a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260448201527f616e736665722066726f6d20746865207a65726f206164647265737300000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff8216611cd0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f476561723a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260448201527f616e7366657220746f20746865207a65726f2061646472657373000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260016020908152604091829020548251606081019093526036808452611d2d936bffffffffffffffffffffffff90921692859291906129b190830139611a67565b73ffffffffffffffffffffffffffffffffffffffff848116600090815260016020908152604080832080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff968716179055928616825290829020548251606081019093526030808452611dbf949190911692859290919061287790830139611f50565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260409182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff968716179055905193851684529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a373ffffffffffffffffffffffffffffffffffffffff808416600090815260026020526040808220548584168352912054611e9792918216911683611fc1565b505050565b73ffffffffffffffffffffffffffffffffffffffff808316600081815260026020818152604080842080546001845282862054949093528787167fffffffffffffffffffffffff000000000000000000000000000000000000000084168117909155905191909516946bffffffffffffffffffffffff9092169391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4611f4a828483611fc1565b50505050565b600080611f5d8486612802565b9050846bffffffffffffffffffffffff16816bffffffffffffffffffffffff1610158390611fb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b50949350505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561200b57506000816bffffffffffffffffffffffff16115b15611e975773ffffffffffffffffffffffffffffffffffffffff8316156120fd5773ffffffffffffffffffffffffffffffffffffffff831660009081526004602052604081205463ffffffff1690816120655760006120c4565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812090612096600185612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b905060006120eb82856040518060600160405280602881526020016128cd60289139611a67565b90506120f9868484846121e2565b5050505b73ffffffffffffffffffffffffffffffffffffffff821615611e975773ffffffffffffffffffffffffffffffffffffffff821660009081526004602052604081205463ffffffff1690816121525760006121b1565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812090612183600185612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b905060006121d882856040518060600160405280602781526020016128f560279139611f50565b9050611308858484845b60006122064360405180606001604052806034815260200161294060349139612465565b905060008463ffffffff1611801561226d575073ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812063ffffffff831691612251600188612735565b63ffffffff908116825260208201929092526040016000205416145b156123035773ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812083916122a4600188612735565b63ffffffff168152602081019190915260400160002080546bffffffffffffffffffffffff92909216640100000000027fffffffffffffffffffffffffffffffff000000000000000000000000ffffffff9092169190911790556123fe565b60408051808201825263ffffffff80841682526bffffffffffffffffffffffff808616602080850191825273ffffffffffffffffffffffffffffffffffffffff8b166000908152600382528681208b8616825290915294909420925183549451909116640100000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009094169116179190911790556123a5846001612832565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260046020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff929092169190911790555b604080516bffffffffffffffffffffffff80861682528416602082015273ffffffffffffffffffffffffffffffffffffffff8716917fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724910160405180910390a25050505050565b6000816401000000008410611a5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91905b600060208083528351808285015260005b818110156124d0578581018301518582016040015282016124b4565b818111156124e2576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461253a57600080fd5b919050565b6000806040838503121561255257600080fd5b61255b83612516565b946020939093013593505050565b60008060006060848603121561257e57600080fd5b61258784612516565b925061259560208501612516565b9150604084013590509250925092565b6000602082840312156125b757600080fd5b610ef382612516565b803560ff8116811461253a57600080fd5b60008060008060008060c087890312156125ea57600080fd5b6125f387612516565b9550602087013594506040870135935061260f606088016125c0565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a03121561264457600080fd5b61264d88612516565b965061265b60208901612516565b95506040880135945060608801359350612677608089016125c0565b925060a0880135915060c0880135905092959891949750929550565b600080604083850312156126a657600080fd5b6126af83612516565b91506126bd60208401612516565b90509250929050565b600080604083850312156126d957600080fd5b6126e283612516565b9150602083013563ffffffff811681146126fb57600080fd5b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600063ffffffff8381169083168181101561275257612752612706565b039392505050565b600063ffffffff80841680612798577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156127d6576127d6612706565b5060010190565b60006bffffffffffffffffffffffff8381169083168181101561275257612752612706565b60006bffffffffffffffffffffffff80831681851680830382111561282957612829612706565b01949350505050565b600063ffffffff8083168185168083038211156128295761282961270656fe476561723a3a617070726f76653a20616d6f756e7420657863656564732039362062697473476561723a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e74206f766572666c6f7773476561723a3a7472616e736665723a20616d6f756e7420657863656564732039362062697473476561723a3a5f6d6f7665566f7465733a20766f746520616d6f756e7420756e646572666c6f7773476561723a3a5f6d6f7665566f7465733a20766f746520616d6f756e74206f766572666c6f7773476561723a3a7065726d69743a20616d6f756e7420657863656564732039362062697473476561723a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d62657220657863656564732033322062697473476561723a3a7472616e7366657246726f6d3a207472616e7366657220616d6f756e742065786365656473207370656e64657220616c6c6f77616e6365476561723a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e7420657863656564732062616c616e6365a26469706673582212201b84fd7789a35c022f692420863210a30e82d2405659f5a28275d433fa53467f64736f6c634300080a003360806040526016805460ff1916905534801561001a57600080fd5b506040516110a73803806110a7833981016040819052610039916100b6565b600080546001600160a01b038085166001600160a01b0319928316179092556003805492841692909116919091179055610080600a6b033b2e3c9fd0803ce80000006100e9565b60075550506b033b2e3c9fd0803ce800000060155561010b565b80516001600160a01b03811681146100b157600080fd5b919050565b600080604083850312156100c957600080fd5b6100d28361009a565b91506100e06020840161009a565b90509250929050565b60008261010657634e487b7160e01b600052601260045260246000fd5b500490565b610f8d8061011a6000396000f3fe608060405234801561001057600080fd5b50600436106102e95760003560e01c806367c99d5811610191578063c5f956af116100e3578063dbcb313b11610097578063f11a648711610071578063f11a648714610320578063f3fdb15a146105f1578063fe14112d1461061157600080fd5b8063dbcb313b146105d6578063e941fa78146105df578063ef8d9603146105e857600080fd5b8063cb3905e1116100c8578063cb3905e1146105c4578063cf33d95514610320578063d0efe753146105cd57600080fd5b8063c5f956af14610588578063ca9505e4146105a857600080fd5b80639aa5d46211610145578063b6ac642a1161011f578063b6ac642a14610567578063bb04b19314610567578063bf28068b1461057557600080fd5b80639aa5d46214610544578063a4e8273e14610557578063b3554a0a1461055e57600080fd5b8063788c6bfe11610176578063788c6bfe146104ef5780638456cb591461050157806396df5dc01461053157600080fd5b806367c99d58146104de57806374375359146104e757600080fd5b806336dda7d51161024a5780634d778ad1116101fe57806354fd4d50116101d857806354fd4d50146104c05780635c975abb146104c8578063609ae317146104d557600080fd5b80634d778ad114610491578063532fe502146104a45780635427c938146104ad57600080fd5b80633f4ba83a1161022f5780633f4ba83a1461045257806345d31f9d1461047f5780634c19386c1461048857600080fd5b806336dda7d51461040f5780633e163df01461042f57600080fd5b80632495a599116102a157806329f3d3b61161028657806329f3d3b6146103b35780632a3354c9146103bc5780632e97ca21146103dc57600080fd5b80632495a599146103735780632954018c1461039357600080fd5b8063078c4781116102d2578063078c4781146103205780630fce70fb146103335780631e16e4fc1461033b57600080fd5b8063030dbb04146102ee57806305fe138b1461030a575b600080fd5b6102f760105481565b6040519081526020015b60405180910390f35b6102f7610318366004610ce8565b600092915050565b61033161032e366004610d14565b50565b005b6015546102f7565b61034e610349366004610d2f565b610618565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610301565b60035461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b60005461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6102f760095481565b600a5461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103ff6103ea366004610d14565b60066020526000908152604090205460ff1681565b6040519015158152602001610301565b60055461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103ff61043d366004610d14565b60146020526000908152604090205460ff1681565b610331601680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b6102f760075481565b6102f760015481565b6102f761049f366004610d2f565b61064f565b6102f760115481565b6102f76104bb366004610d2f565b61066d565b6102f7600181565b6016546103ff9060ff1681565b6102f760085481565b6102f7600d5481565b6102f7610685565b6b033b2e3c9fd0803ce80000006102f7565b610331601680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b61033161053f366004610d2f565b601555565b610331610552366004610d48565b505050565b60016102f7565b6102f7600e5481565b61033161032e366004610d2f565b610331610583366004610ce8565b61071d565b60135461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103316105b6366004610d7d565b600b92909255600c55600d55565b6102f7600c5481565b6102f7600b5481565b6102f760155481565b6102f7600f5481565b6102f760025481565b60125461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b60006102f7565b6004818154811061062857600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6000610667826b033b2e3c9fd0803ce800000061077a565b92915050565b6000610667826b033b2e3c9fd0803ce80000006108e9565b6003546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156106f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107189190610da9565b905090565b6009829055600a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691909117909155600354610776911682846109fe565b5050565b60408051808201909152600281527f4d330000000000000000000000000000000000000000000000000000000000006020820152600090826107f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b60405180910390fd5b506000610800600284610e72565b90506b033b2e3c9fd0803ce8000000610839827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610ead565b6108439190610e72565b8411156040518060400160405280600281526020017f4d31000000000000000000000000000000000000000000000000000000000000815250906108b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b5082816108cd6b033b2e3c9fd0803ce800000087610ec4565b6108d79190610f01565b6108e19190610e72565b949350505050565b60008215806108f6575081155b1561090357506000610667565b8161091b60026b033b2e3c9fd0803ce8000000610e72565b610945907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610ead565b61094f9190610e72565b8311156040518060400160405280600281526020017f4d31000000000000000000000000000000000000000000000000000000000000815250906109c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b506b033b2e3c9fd0803ce80000006109d9600282610e72565b6109e38486610ec4565b6109ed9190610f01565b6109f79190610e72565b9392505050565b6040805173ffffffffffffffffffffffffffffffffffffffff848116602483015260448083018590528351808403909101815260649092018352602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65649084015261055292869291600091610ac9918516908490610b73565b8051909150156105525780806020019051810190610ae79190610f19565b610552576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016107e9565b60606108e1848460008585843b610be6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107e9565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051610c0f9190610f3b565b60006040518083038185875af1925050503d8060008114610c4c576040519150601f19603f3d011682016040523d82523d6000602084013e610c51565b606091505b5091509150610c61828286610c6c565b979650505050505050565b60608315610c7b5750816109f7565b825115610c8b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ce357600080fd5b919050565b60008060408385031215610cfb57600080fd5b82359150610d0b60208401610cbf565b90509250929050565b600060208284031215610d2657600080fd5b6109f782610cbf565b600060208284031215610d4157600080fd5b5035919050565b600080600060608486031215610d5d57600080fd5b83359250610d6d60208501610cbf565b9150604084013590509250925092565b600080600060608486031215610d9257600080fd5b505081359360208301359350604090920135919050565b600060208284031215610dbb57600080fd5b5051919050565b60005b83811015610ddd578181015183820152602001610dc5565b83811115610dec576000848401525b50505050565b6020815260008251806020840152610e11816040850160208701610dc2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082610ea8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600082821015610ebf57610ebf610e43565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610efc57610efc610e43565b500290565b60008219821115610f1457610f14610e43565b500190565b600060208284031215610f2b57600080fd5b815180151581146109f757600080fd5b60008251610f4d818460208701610dc2565b919091019291505056fea26469706673582212204edb887d94928b3914f60ab48df0182da9eb30ddbb7021b164cc728b60a655d564736f6c634300080a003360e06040523480156200001157600080fd5b5060405162013af238038062013af2833981016040819052620000349162000630565b826001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000073573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000999190620007bf565b620000a433620004ab565b6001600160a01b038116608081905260408051630873769560e01b815290516308737695916004808201926020929091908290030181865afa158015620000ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001159190620007bf565b6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000153573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001799190620007bf565b6001600160a01b0390811660a052841660c0525060405183906200019d9062000519565b6001600160a01b039091168152602001604051809103906000f080158015620001ca573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b0392909216918217905560608301516080840151604051620002029062000527565b6001600160a01b03938416815292909116602083015215156040820152606001604051809103906000f0801580156200023f573d6000803e3d6000fd5b50600280546001600160a01b0319166001600160a01b0392909216919091179055604051600090620002746020820162000535565b601f1982820381018352601f909101166040819052600154600254620002b0926001600160a01b039283169291909116908790602001620007e6565b60408051601f1981840301815290829052620002d09291602001620008e8565b60408051601f19818403018152919052905060006200035982848151602092830120604080517fff00000000000000000000000000000000000000000000000000000000000000818601523060601b6001600160601b03191660218201526035810193909352605580840192909252805180840390920182526075909201909152805191012090565b600154604051634fafc35760e11b81526001600160a01b038084166004830152929350911690639f5f86ae90602401600060405180830381600087803b158015620003a357600080fd5b505af1158015620003b8573d6000803e3d6000fd5b50505050620003ce8284620004fb60201b60201c565b600380546001600160a01b0319166001600160a01b0383811691821790925560015460408051630304b08760e61b81529051919093169263c12c21c09160048083019260209291908290030181865afa15801562000430573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004569190620007bf565b6001600160a01b031614620004a05760405162461bcd60e51b815260206004820152600c60248201526b496e636f727265637420434d60a01b604482015260640160405180910390fd5b505050505062000909565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008183516020850134f59050803b6200051457600080fd5b505050565b6158e8806200243683390190565b615e978062007d1e83390190565b615f3d806200dbb583390190565b6001600160a01b03811681146200055957600080fd5b50565b8051620005698162000543565b919050565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b0381118282101715620005a957620005a96200056e565b60405290565b604080519081016001600160401b0381118282101715620005a957620005a96200056e565b604051601f8201601f191681016001600160401b0381118282101715620005ff57620005ff6200056e565b604052919050565b80516001600160801b03811681146200056957600080fd5b805180151581146200056957600080fd5b6000806000606084860312156200064657600080fd5b8351620006538162000543565b602085810151919450906001600160401b03808211156200067357600080fd5b9086019060a082890312156200068857600080fd5b6200069262000584565b6200069d8362000607565b8152620006ac84840162000607565b8482015260408084015183811115620006c457600080fd5b8401601f81018b13620006d657600080fd5b805184811115620006eb57620006eb6200056e565b620006fb878260051b01620005d4565b818152878101955060069190911b82018701908c8211156200071c57600080fd5b918701915b818310156200077e5783838e0312156200073b5760008081fd5b62000745620005af565b8351620007528162000543565b81528389015161ffff811681146200076a5760008081fd5b818a01528652948701949183019162000721565b8484015250620007939050606085016200055c565b6060830152620007a6608085016200061f565b6080830152979097015195989697509495945050505050565b600060208284031215620007d257600080fd5b8151620007df8162000543565b9392505050565b600060018060a01b0380861683526020818616818501526040606081860152610100850160018060801b038088511660608801528084890151166080880152508187015160a080880152818151808452610120890191508583019350600092505b808310156200087857835180518816835286015161ffff168683015292850192600192909201919084019062000847565b5060608901516001600160a01b031660c0890152608090980151151560e0909701969096525094979650505050505050565b6000815160005b81811015620008cd5760208185018101518683015201620008b1565b81811115620008dd576000828601525b509290920192915050565b600062000901620008fa8386620008aa565b84620008aa565b949350505050565b60805160a05160c051611ad3620009636000396000818161010a0152610ea00152600081816103790152610b170152600081816101680152818161068c01528181610a4d01528181610b860152610c190152611ad36000f3fe6080604052600436106100f35760003560e01c80638da5cb5b1161008a578063ebf0c71711610059578063ebf0c71714610367578063f2fde38b1461039b578063f4747c58146103bb578063f9aa028a146103db57600080fd5b80638da5cb5b1461025a57806394ca2cb5146102855780639c4ae2d014610327578063c12c21c01461033a57600080fd5b80633e0b1a23116100c65780633e0b1a23146101ce5780634ef501ac146101e3578063715018a614610230578063805abe6a1461024557600080fd5b806316f0115b146100f85780632954018c146101565780632f7a18811461018a578063318d0d10146101b7575b600080fd5b34801561010457600080fd5b5061012c7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561016257600080fd5b5061012c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561019657600080fd5b5060025461012c9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156101c357600080fd5b506101cc610408565b005b3480156101da57600080fd5b506101cc610498565b3480156101ef57600080fd5b506102036101fe366004611726565b610521565b6040805173ffffffffffffffffffffffffffffffffffffffff93841681529290911660208301520161014d565b34801561023c57600080fd5b506101cc610567565b34801561025157600080fd5b506101cc6105f2565b34801561026657600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff1661012c565b34801561029157600080fd5b5061012c6102a03660046117e6565b8151602092830120604080517fff00000000000000000000000000000000000000000000000000000000000000818601523060601b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660218201526035810193909352605580840192909252805180840390920182526075909201909152805191012090565b6101cc6103353660046117e6565b6107d8565b34801561034657600080fd5b5060015461012c9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561037357600080fd5b5061012c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103a757600080fd5b506101cc6103b63660046118c0565b6107f5565b3480156103c757600080fd5b506101cc6103d63660046118e4565b610925565b3480156103e757600080fd5b5060035461012c9073ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff16331461048e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b610496610a49565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610519576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b61048e610b82565b6004818154811061053157600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff91821692501682565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b61049660006116b1565b60005473ffffffffffffffffffffffffffffffffffffffff163314610673576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b3073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106f5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071991906119c4565b73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610763573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078791906119c4565b73ffffffffffffffffffffffffffffffffffffffff1614156107d5576040517fbdebb83f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33ff5b60008183516020850134f59050803b6107f057600080fd5b505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b73ffffffffffffffffffffffffffffffffffffffff8116610919576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610485565b610922816116b1565b50565b60005473ffffffffffffffffffffffffffffffffffffffff1633146109a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b805160005b818110156107f05760048382815181106109c7576109c76119e1565b602090810291909101810151825460018082018555600094855293839020825160029092020180547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff938416178255929093015192840180549092169216919091179055016109ab565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ab6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ada91906119c4565b6040517ff2fde38b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301529192509082169063f2fde38b90602401600060405180830381600087803b158015610b6757600080fd5b505af1158015610b7b573d6000803e3d6000fd5b5050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1391906119c4565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca691906119c4565b60045490915060005b81811015610dd4576003546004805473ffffffffffffffffffffffffffffffffffffffff90921691637bccacee919084908110610cee57610cee6119e1565b906000526020600020906002020160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660048481548110610d3357610d336119e1565b600091825260209091206002909102015460405160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b158015610db157600080fd5b505af1158015610dc5573d6000803e3d6000fd5b50505050806001019050610caf565b506001546040517fe26b2f6300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529084169063e26b2f6390602401600060405180830381600087803b158015610e4257600080fd5b505af1158015610e56573d6000803e3d6000fd5b50506001546040517fcf33d95500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201527f0000000000000000000000000000000000000000000000000000000000000000909116925063cf33d9559150602401600060405180830381600087803b158015610ee857600080fd5b505af1158015610efc573d6000803e3d6000fd5b50505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f919190611a10565b905060005b818110156116ab576003546040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810183905260009173ffffffffffffffffffffffffffffffffffffffff1690635094cb4f90602401602060405180830381865afa15801561100e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103291906119c4565b6001546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80841660048301529293506000929091169063fdd5764590602401602060405180830381865afa1580156110a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110cc91906119c4565b905060008173ffffffffffffffffffffffffffffffffffffffff1663ce30bbdb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561111b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113f9190611a29565b9050600c81601081111561115557611155611a4a565b14156116225760008273ffffffffffffffffffffffffffffffffffffffff166320b2c1516040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111cc91906119c4565b905060008373ffffffffffffffffffffffffffffffffffffffff1663927188d96040518163ffffffff1660e01b8152600401602060405180830381865afa15801561121b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123f91906119c4565b905060008473ffffffffffffffffffffffffffffffffffffffff166399253ac06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561128e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b291906119c4565b6040517f9dcb511a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152919250908a169063e8a97a3e9083908390639dcb511a90602401602060405180830381865afa15801561132c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135091906119c4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156113bd57600080fd5b505af11580156113d1573d6000803e3d6000fd5b50506040517f9dcb511a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301528c16925063e8a97a3e915085908390639dcb511a90602401602060405180830381865afa15801561144b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061146f91906119c4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156114dc57600080fd5b505af11580156114f0573d6000803e3d6000fd5b50506003546001546040517f7832743800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301529283169450633e7c88d69350879290911690637832743890602401602060405180830381865afa158015611573573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115979190611a79565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015261ffff166024820152604401600060405180830381600087803b15801561160657600080fd5b505af115801561161a573d6000803e3d6000fd5b505050505050505b600d81601081111561163657611636611a4a565b141561169d578173ffffffffffffffffffffffffffffffffffffffff16639b51ecd36040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561168457600080fd5b505af1158015611698573d6000803e3d6000fd5b505050505b836001019350505050610f96565b50505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561173857600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156117915761179161173f565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156117de576117de61173f565b604052919050565b600080604083850312156117f957600080fd5b823567ffffffffffffffff8082111561181157600080fd5b818501915085601f83011261182557600080fd5b81356020828211156118395761183961173f565b611869817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011601611797565b9250818352878183860101111561187f57600080fd5b8181850182850137600091830181019190915290969401359450505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461092257600080fd5b6000602082840312156118d257600080fd5b81356118dd8161189e565b9392505050565b600060208083850312156118f757600080fd5b823567ffffffffffffffff8082111561190f57600080fd5b818501915085601f83011261192357600080fd5b8135818111156119355761193561173f565b611943848260051b01611797565b818152848101925060069190911b83018401908782111561196357600080fd5b928401925b818410156119b957604084890312156119815760008081fd5b61198961176e565b84356119948161189e565b8152848601356119a38161189e565b8187015283526040939093019291840191611968565b979650505050505050565b6000602082840312156119d657600080fd5b81516118dd8161189e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215611a2257600080fd5b5051919050565b600060208284031215611a3b57600080fd5b8151601181106118dd57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060208284031215611a8b57600080fd5b815161ffff811681146118dd57600080fdfea264697066735822122090f5e4310a8b66bfdd7fdfbe64bc5b98570e7c1a415ffb0ced3c857cf6c5b14064736f6c634300080a00336101606040526000805462ff00001916620c00001790553480156200002357600080fd5b50604051620058e8380380620058e8833981016040819052620000469162000537565b806001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000085573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ab919062000537565b6000805460ff191690556001600160a01b038116620000dd57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200011c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000142919062000537565b6001600160a01b03166080816001600160a01b031681525050506000816001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200019d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c3919062000537565b6001600160a01b03831661010081905260e081905260408051632495a59960e01b81529051929350600092632495a599916004808201926020929091908290030181865afa1580156200021a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000240919062000537565b6001600160a01b03811660c05290506200025a8162000472565b816001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000299573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002bf919062000537565b6001600160a01b0316610120816001600160a01b031681525050816001600160a01b03166377532ed96040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000318573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033e919062000537565b6001600160a01b0316610140816001600160a01b031681525050816001600160a01b031663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000397573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003bd919062000537565b6001600001600a6101000a8154816001600160a01b0302191690836001600160a01b03160217905550816001600160a01b0316639068a8686040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000425573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044b919062000537565b6001600160a01b031660a0525050600380546001600160a01b031916331790555062000588565b6001600160a01b03811660009081526006602052604090205415620004aa57604051632e5a5c7760e01b815260040160405180910390fd5b61010060055410620004cf57604051631cbbe18560e01b815260040160405180910390fd5b600580546001600160a01b0383166000818152600660209081526040808320600190951b948590558483526004909152812091909155825491929062000515836200055e565b91905055505050565b6001600160a01b03811681146200053457600080fd5b50565b6000602082840312156200054a57600080fd5b815162000557816200051e565b9392505050565b60006000198214156200058157634e487b7160e01b600052601160045260246000fd5b5060010190565b60805160a05160c05160e051610100516101205161014051615248620006a0600039600081816107e20152818161371001526137c501526000818161052f01526136780152600081816103d301528181610e5701528181610ebb015281816124ff0152818161265a01528181612aa101528181612b8c01528181612c4e01528181612d0d0152613b8f015260006105a401526000818161062701528181610d2201528181610db301528181610e0001528181610e3601528181610f3f0152818161203a01528181612b6b015281816130ee015281816134dc015281816135a90152613fe601526000818161081c01528181610fe101526124c20152600081816107a80152818161118401526122cb01526152486000f3fe608060405234801561001057600080fd5b50600436106103415760003560e01c8063830aa745116101bd578063a70bc542116100f9578063e75538c7116100a2578063f9aa028a1161007c578063f9aa028a1461089d578063fdd57645146108bd578063fe47cde7146108f3578063ff6875431461091357600080fd5b8063e75538c714610864578063e958b70414610877578063f67c5bd01461088a57600080fd5b8063db7ceb80116100d3578063db7ceb8014610817578063dc2b21c11461083e578063e1998cf91461085157600080fd5b8063a70bc542146107ca578063c5e10eef146107dd578063d48bfca71461080457600080fd5b806394cf073a116101665780639f5f86ae116101405780639f5f86ae146107745780639fd12b7714610787578063a366f49614610790578063a50cf2c8146107a357600080fd5b806394cf073a146106f557806395373018146107085780639af1d35a1461071b57600080fd5b80638991b2f1116101975780638991b2f1146106af5780638fe3f93f146106cf578063944ac59f146106e257600080fd5b8063830aa7451461066f5780638345f26e146106825780638456cb59146106a757600080fd5b8063458936f51161028c578063570a7af2116102355780636ce4074a1161020f5780636ce4074a146105ef5780636e98e5e41461060f5780636f307dc314610622578063783274381461064957600080fd5b8063570a7af21461059f5780635c975abb146105c6578063654a9eda146105dc57600080fd5b80635063524a116102665780635063524a1461055157806351e3f1601461058457806354fd4d501461059757600080fd5b8063458936f51461050e57806346fb371d146105175780634f0e0ef31461052a57600080fd5b80632630c12f116102ee5780633192195c116102c85780633192195c146104be5780633e8297ca146104e65780633f4ba83a1461050657600080fd5b80632630c12f1461045857806329df0b93146104845780632f7a18811461049757600080fd5b806316f0115b1161031f57806316f0115b146103ce578063172c48c7146103f55780632362a2d81461043757600080fd5b8063055ee9b5146103465780630d8f9cee146103a657806311ca4fc2146103bb575b600080fd5b61037c610354366004614a87565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6103b96103b4366004614aa4565b610949565b005b6103b96103c9366004614aa4565b610a76565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b610408610403366004614add565b610b4e565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835261ffff90911660208301520161039d565b61044a610445366004614b13565b610b66565b60405190815260200161039d565b6001546a0100000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1661037c565b6103b9610492366004614a87565b6110be565b60005461037c906301000000900473ffffffffffffffffffffffffffffffffffffffff1681565b6104d16104cc366004614a87565b611122565b6040805192835260208301919091520161039d565b61044a6104f4366004614a87565b60096020526000908152604090205481565b6103b9611156565b61044a60055481565b6103b9610525366004614b95565b611244565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b61056461055f366004614be6565b61149b565b60408051948552602085019390935291830152606082015260800161039d565b6103b9610592366004614aa4565b611602565b61044a600281565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b60005460ff16604051901515815260200161039d565b6103b96105ea366004614c21565b611703565b6106026105fd366004614d40565b611bbb565b60405161039d9190614e5b565b6103b961061d366004614aa4565b611e8e565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b61065c610657366004614a87565b612036565b60405161ffff909116815260200161039d565b6103b961067d366004614b95565b61210f565b6000546106959062010000900460ff1681565b60405160ff909116815260200161039d565b6103b961229d565b61044a6106bd366004614a87565b60086020526000908152604090205481565b61037c6106dd366004614e6e565b612389565b6103b96106f0366004614ea5565b612718565b61044a610703366004614f0a565b612845565b6103b9610716366004614a87565b612e5a565b6001546040805161ffff808416825262010000840481166020830152640100000000840481169282019290925266010000000000008304821660608201526801000000000000000090920416608082015260a00161039d565b6103b9610782366004614a87565b612f85565b61044a60075481565b6103b961079e366004614add565b613045565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b96107d8366004614f4c565b61309b565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b9610812366004614a87565b613221565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b961084c366004614f81565b61327b565b6103b961085f366004614aa4565b613306565b610408610872366004614add565b6134c9565b61037c610885366004614a87565b613541565b61044a610898366004614a87565b6135a5565b60035461037c9073ffffffffffffffffffffffffffffffffffffffff1681565b61037c6108cb366004614a87565b600b6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b600c5461037c9073ffffffffffffffffffffffffffffffffffffffff1681565b61037c610921366004614a87565b600a6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561099b57506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b156109d2576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff1615610a14576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055610a4a828261362e565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b60035473ffffffffffffffffffffffffffffffffffffffff163314610ac7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805473ffffffffffffffffffffffffffffffffffffffff9384166301000000027fffffffffffffffffff0000000000000000000000000000000000000000ffffff90911617905560018054919092166a0100000000000000000000027fffff0000000000000000000000000000000000000000ffffffffffffffffffff909116179055565b600080610b5d6001841b6134c9565b91509150915091565b6000805460ff1615610bd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064015b60405180910390fd5b600054610100900460ff1615610c1b576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff163314610ca0576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610cab89613541565b90506000806000806000610cbe86611122565b9094509050610ccf8c8e868461149b565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152939b5093985090955093506000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015610d6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8f9190614fa4565b9050610d9b8887614fec565b610da6906001614fec565b811115610de657610de1877f00000000000000000000000000000000000000000000000000000000000000008d60018c8b870303038d61366e565b610e30565b610e3073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168d8960018a8d01869003016138c0565b610e7e877f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000089600061366e565b6040517fca9505e40000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604481018490527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ca9505e490606401600060405180830381600087803b158015610f1457600080fd5b505af1158015610f28573d6000803e3d6000fd5b50505050505050506001841115610f6757610f67837f00000000000000000000000000000000000000000000000000000000000000008d87600061366e565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260086020526040902054861916610f9c8489888461395b565b6040517f89b77b3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f000000000000000000000000000000000000000000000000000000000000000016906389b77b3e90602401600060405180830381600087803b15801561102557600080fd5b505af1158015611039573d6000803e3d6000fd5b50505073ffffffffffffffffffffffffffffffffffffffff909c16600090815260026020526040812080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550929a9950505050505050505050565b6000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314611116576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61111f81613a35565b50565b60008060008061113185613aa6565b91955092509050816111438286615004565b61114d9190615041565b92505050915091565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156111e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611204919061507c565b61123a576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611242613c24565b565b60005460ff16156112b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156112f3576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100178155338152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff9081169084161480159061137457506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b80156113985750600c5473ffffffffffffffffffffffffffffffffffffffff163314155b806113b7575073ffffffffffffffffffffffffffffffffffffffff8316155b156113ee576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113f7826135a5565b61142d576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061143885613541565b9050611448838583856000613d05565b61146c5761145b83858360006001613d05565b5061146a838583856001613d05565b505b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b6001546000908190819081906127109061ffff166114b98888615099565b6114c39190615004565b6114cd9190615041565b6114d79086614fec565b935060018760028111156114ed576114ed6150b0565b1415611587576001546000906127109061151390640100000000900461ffff168b615004565b61151d9190615041565b6001549091506127109061153b9062010000900461ffff168b615004565b6115459190615041565b61154f9086614fec565b94508481111561156657600185820303935061156a565b8094505b85811061157b578585039250611581565b84860391505b506115f7565b600287600281111561159b5761159b6150b0565b14156115f157600154600090612710906115c59068010000000000000000900461ffff168b615004565b6115cf9190615041565b6001549091506127109061153b906601000000000000900461ffff168b615004565b84840391505b945094509450949050565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561165457506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b1561168b576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff16156116cd576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055610a4a8282613ea6565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561175557506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b1561178c576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff16156117ce576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790556118048584613ea6565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152600091908616906370a0823190602401602060405180830381865afa158015611874573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118989190614fa4565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529192506000918616906370a0823190602401602060405180830381865afa15801561190a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192e9190614fa4565b60015490915060009081906a0100000000000000000000900473ffffffffffffffffffffffffffffffffffffffff16635cecbd0e61196c8689615099565b8a6119778988615099565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152600481019390935273ffffffffffffffffffffffffffffffffffffffff918216602484015260448301528a1660648201526084016040805180830381865afa1580156119f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1791906150df565b9150915060018411611a2d57611a2d898961362e565b611a3687612036565b611a449061ffff1682615004565b9050611a4f88612036565b611a5d9061ffff1683615004565b9150818110611a7857611a6f89613a35565b5050505061146c565b73ffffffffffffffffffffffffffffffffffffffff891660009081526009602052604081205483611ab56b033b2e3c9fd0803ce800000085615004565b611abf9190615041565b611ad5906b033b2e3c9fd0803ce8000000615099565b611adf9190614fec565b60015490915061271090611b0a906b033b2e3c9fd0803ce80000009062010000900461ffff16615004565b611b149190615041565b8111611b555773ffffffffffffffffffffffffffffffffffffffff8a166000908152600960205260409020819055611b4b8a613a35565b505050505061146c565b611b5e8a613f56565b50505073ffffffffffffffffffffffffffffffffffffffff871660009081526009602052604090206001905550505050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b6060611bc960005460ff1690565b15611c30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff1615611c72576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100178155338152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff908116908416141580611ce7575073ffffffffffffffffffffffffffffffffffffffff8316155b15611d3d57600c5473ffffffffffffffffffffffffffffffffffffffff163314611d3d576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611d4885613541565b90508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167faed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab0360405160405180910390a36040517f1cff79cd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821690631cff79cd90611df89087908790600401615103565b6000604051808303816000875af1158015611e17573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611e5d9190810190615132565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905595945050505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314611edf576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821615611f4f5773ffffffffffffffffffffffffffffffffffffffff8281166000908152600a6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169183169190911790555b73ffffffffffffffffffffffffffffffffffffffff811615611fbf5773ffffffffffffffffffffffffffffffffffffffff8181166000908152600b6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169184169190911790555b73ffffffffffffffffffffffffffffffffffffffff811673cccccccccccccccccccccccccccccccccccccccc141561203257600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790555b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120ba5750506001547e01000000000000000000000000000000000000000000000000000000000000900461ffff1690565b60006120c5836135a5565b9050806120fe576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612107816134c9565b949350505050565b60005460ff161561217c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156121be576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff163314612243576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61224d8383613ea6565b61226f73ffffffffffffffffffffffffffffffffffffffff83168585846138c0565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555050565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015612327573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061234b919061507c565b612381576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112426142d4565b6000805460ff16156123f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff1615612439576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff1633146124be576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166321d18456857f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612568573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061258c9190614fa4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168152600481019290925260248201526044016020604051808303816000875af11580156125e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061260b91906151a0565b6040517fbf28068b0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff80831660248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063bf28068b90604401600060405180830381600087803b1580156126a057600080fd5b505af11580156126b4573d6000803e3d6000fd5b505050506126c28382614394565b73ffffffffffffffffffffffffffffffffffffffff811660009081526008602052604081206001905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690559392505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314612769576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805461ffff92831668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9484166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff96851664010000000002969096167fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff97851662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000090931694909816939093171794909416949094179190911716919091179055565b6000805460ff16156128b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156128f5576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff16331461297a576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080600061298887613aa6565b925092509250846129a25761299d8684615099565b6129ac565b6129ac8684614fec565b935060008515612b045769021e19e0c9bab24000008510612a15576129d583603689901c615004565b6129e3603686901c84615004565b6129ed9190614fec565b603686901c6129fc8585615004565b612a069190615004565b612a109190615041565b612a52565b612a1f8388615004565b612a298584615004565b612a339190614fec565b85612a3e8585615004565b612a489190615004565b612a529190615041565b6040517fbf28068b0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff8a811660248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063bf28068b90604401600060405180830381600087803b158015612ae757600080fd5b505af1158015612afb573d6000803e3d6000fd5b50505050612d9f565b60008484612b128583615004565b612b1c9190615041565b612b269190615099565b60015490915060009061271090612b419061ffff1684615004565b612b4b9190615041565b905073ffffffffffffffffffffffffffffffffffffffff8a1663d1660f997f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000084612bb6878f614fec565b612bc09190614fec565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b158015612c3457600080fd5b505af1158015612c48573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ca9505e4838b612c949190614fec565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815260048101919091526024810184905260006044820152606401600060405180830381600087803b158015612cf357600080fd5b505af1158015612d07573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d9a9190614fa4565b925050505b6040517f16128211000000000000000000000000000000000000000000000000000000008152600481018690526024810182905273ffffffffffffffffffffffffffffffffffffffff891690631612821190604401600060405180830381600087803b158015612e0e57600080fd5b505af1158015612e22573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055509498975050505050505050565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff16158015612eac57506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b15612ee3576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff1615612f25576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055612f5a81613f56565b50600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b60035473ffffffffffffffffffffffffffffffffffffffff163314612fd6576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517ff62005acebe9b616aefb5f248b48f5e89f28437b27d1eebc0b2d911209f297af90600090a250565b60035473ffffffffffffffffffffffffffffffffffffffff163314613096576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600755565b60035473ffffffffffffffffffffffffffffffffffffffff1633146130ec576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613193576001805461ffff83167e01000000000000000000000000000000000000000000000000000000000000027dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790555050565b600061319e836135a5565b9050806131d7576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000908152600460205260409020805473ffffffffffffffffffffffffffffffffffffffff1675ffff000000000000000000000000000000000000000060a084901b161790555050565b60035473ffffffffffffffffffffffffffffffffffffffff163314613272576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61111f81614467565b60035473ffffffffffffffffffffffffffffffffffffffff1633146132cc576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805460ff90921662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff909216919091179055565b60005460ff1615613373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156133b5576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff16331461343a576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061344583613541565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260026020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055905061349c8282614394565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b60008082600114156135275750506001547f0000000000000000000000000000000000000000000000000000000000000000927e0100000000000000000000000000000000000000000000000000000000000090910461ffff169150565b50506000908152600460205260409020549060a082901c90565b73ffffffffffffffffffffffffffffffffffffffff80821660009081526002602052604090205416806135a0576040517fb5ba4c4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146136255773ffffffffffffffffffffffffffffffffffffffff8216600090815260066020526040902054613628565b60015b92915050565b6000613639826135a5565b73ffffffffffffffffffffffffffffffffffffffff909316600090815260086020526040902080549319939093169092555050565b8080156136c657507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b15613828576040517fd1660f9900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301526044820184905286169063d1660f9990606401600060405180830381600087803b15801561376357600080fd5b505af1158015613777573d6000803e3d6000fd5b50506040517f5869dba800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690527f0000000000000000000000000000000000000000000000000000000000000000169250635869dba89150604401600060405180830381600087803b15801561380b57600080fd5b505af115801561381f573d6000803e3d6000fd5b505050506138b9565b6040517fd1660f9900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301526044820184905286169063d1660f9990606401600060405180830381600087803b1580156138a057600080fd5b505af11580156138b4573d6000803e3d6000fd5b505050505b5050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261395590859061455b565b50505050565b60025b8181116138b95781811615613a2d576000613978826134c9565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529192506000918316906370a0823190602401602060405180830381865afa1580156139eb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a0f9190614fa4565b90506002811115613a2a57613a2a878388600185038961366e565b50505b60011b61395e565b73ffffffffffffffffffffffffffffffffffffffff811660009081526008602052604081205490613a6582614667565b60005490915062010000900460ff16811115613aa1576000613a86836146a7565b613a91906001614fec565b905061395584848460008561470b565b505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff16631afbb7a46040518163ffffffff1660e01b8152600401602060405180830381865afa158015613af6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b1a9190614fa4565b92508373ffffffffffffffffffffffffffffffffffffffff166317d11a156040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b8b9190614fa4565b91507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bf8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c1c9190614fa4565b929491935050565b60005460ff16613c90576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610bd0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6040805173ffffffffffffffffffffffffffffffffffffffff8681166024830152604480830186905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b30000000000000000000000000000000000000000000000000000000017905291517f1cff79cd000000000000000000000000000000000000000000000000000000008152600092861691631cff79cd91613dc6918a91600401615103565b6000604051808303816000875af1925050508015613e2457506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052613e219190810190615132565b60015b613e2d57613e61565b80511580613e50575080806020019051810190613e4a919061507c565b15156001145b15613e5f576001915050613e9d565b505b8115613e99576040517f76e3e29c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060005b95945050505050565b6000613eb1826135a5565b9050801580613ec35750600754811615155b15613efa576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83166000908152600860205260409020548116613aa15773ffffffffffffffffffffffffffffffffffffffff83166000908152600860205260409020805482179055505050565b60015473ffffffffffffffffffffffffffffffffffffffff8281166000908152600860205260408120546a010000000000000000000090930490911691908080613f9f86611122565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526127108202600482015273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350908716915063f9a6503090604401602060405180830381865afa15801561403a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061405e9190614fa4565b9250614069846146a7565b6001019150506000806000805b848110156142a157801561408f5760018186031b614092565b60015b935086841615614299576000806140a8866134c9565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8e811660048301529294509092506000918416906370a0823190602401602060405180830381865afa15801561411d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141419190614fa4565b9050600181111561428c576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff848116602483015261ffff841691908d169063f9a6503090604401602060405180830381865afa1580156141c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141ea9190614fa4565b6141f49190615004565b6141fe9087614fec565b95508886106142875760006142128b614667565b60005490915062010000900460ff16811115614249576142448d8c836001891561423e57898e0361470b565b8d61470b565b614278565b85156142785773ffffffffffffffffffffffffffffffffffffffff8d1660009081526008602052604090208b90555b50505050505050505050505050565b614295565b98861898600194505b5050505b600101614076565b506040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005460ff1615614341576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613cdb3390565b73ffffffffffffffffffffffffffffffffffffffff821615806143dd575073ffffffffffffffffffffffffffffffffffffffff8281166000908152600260205260409020541615155b15614414576040517f9e59609e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff918216600090815260026020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001691909216179055565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260066020526040902054156144c4576040517f2e5a5c7700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61010060055410614501576040517f1cbbe18500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005805473ffffffffffffffffffffffffffffffffffffffff83166000818152600660209081526040808320600190951b9485905584835260049091528120919091558254919290614552836151bd565b91905055505050565b60006145bd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166148799092919063ffffffff16565b805190915015613aa157808060200190518101906145db919061507c565b613aa1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610bd0565b60008060005b6101008110156146a0576001811b91508382161561468c578260010192505b838210614698576146a0565b60010161466d565b5050919050565b600081600114156146ba57506000919050565b61010060015b60016146cc8284614fec565b901c92506001831b848116158015906146e75750600185851c145b156146f257506146a0565b84811061470157839250614705565b8391505b506146c0565b815b81811015614846576001811b8581161561483d57600061472c826134c9565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529192506000918316906370a0823190602401602060405180830381865afa15801561479f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147c39190614fa4565b90506001811161483a57600054978318977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9097019660ff6201000090910416871161483a5750505073ffffffffffffffffffffffffffffffffffffffff86166000908152600860205260409020859055506138b9565b50505b5060010161470d565b506040517f53275fcb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606148888484600085614892565b90505b9392505050565b606082471015614924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610bd0565b843b61498c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610bd0565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516149b591906151f6565b60006040518083038185875af1925050503d80600081146149f2576040519150601f19603f3d011682016040523d82523d6000602084013e6149f7565b606091505b5091509150614a07828286614a12565b979650505050505050565b60608315614a2157508161488b565b825115614a315782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd09190614e5b565b73ffffffffffffffffffffffffffffffffffffffff8116811461111f57600080fd5b600060208284031215614a9957600080fd5b813561488b81614a65565b60008060408385031215614ab757600080fd5b8235614ac281614a65565b91506020830135614ad281614a65565b809150509250929050565b600060208284031215614aef57600080fd5b5035919050565b8035600381106135a057600080fd5b801515811461111f57600080fd5b600080600080600080600060e0888a031215614b2e57600080fd5b8735614b3981614a65565b9650614b4760208901614af6565b9550604088013594506060880135614b5e81614a65565b93506080880135614b6e81614a65565b925060a0880135915060c0880135614b8581614b05565b8091505092959891949750929550565b60008060008060808587031215614bab57600080fd5b8435614bb681614a65565b93506020850135614bc681614a65565b92506040850135614bd681614a65565b9396929550929360600135925050565b60008060008060808587031215614bfc57600080fd5b84359350614c0c60208601614af6565b93969395505050506040820135916060013590565b600080600080600060a08688031215614c3957600080fd5b8535614c4481614a65565b94506020860135614c5481614a65565b93506040860135614c6481614a65565b94979396509394606081013594506080013592915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614cf257614cf2614c7c565b604052919050565b600067ffffffffffffffff821115614d1457614d14614c7c565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600080600060608486031215614d5557600080fd5b8335614d6081614a65565b92506020840135614d7081614a65565b9150604084013567ffffffffffffffff811115614d8c57600080fd5b8401601f81018613614d9d57600080fd5b8035614db0614dab82614cfa565b614cab565b818152876020838501011115614dc557600080fd5b816020840160208301376000602083830101528093505050509250925092565b60005b83811015614e00578181015183820152602001614de8565b838111156139555750506000910152565b60008151808452614e29816020860160208601614de5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061488b6020830184614e11565b60008060408385031215614e8157600080fd5b823591506020830135614ad281614a65565b803561ffff811681146135a057600080fd5b600080600080600060a08688031215614ebd57600080fd5b614ec686614e93565b9450614ed460208701614e93565b9350614ee260408701614e93565b9250614ef060608701614e93565b9150614efe60808701614e93565b90509295509295909350565b600080600060608486031215614f1f57600080fd5b8335614f2a81614a65565b9250602084013591506040840135614f4181614b05565b809150509250925092565b60008060408385031215614f5f57600080fd5b8235614f6a81614a65565b9150614f7860208401614e93565b90509250929050565b600060208284031215614f9357600080fd5b813560ff8116811461488b57600080fd5b600060208284031215614fb657600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115614fff57614fff614fbd565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561503c5761503c614fbd565b500290565b600082615077577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60006020828403121561508e57600080fd5b815161488b81614b05565b6000828210156150ab576150ab614fbd565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600080604083850312156150f257600080fd5b505080516020909101519092909150565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015260006148886040830184614e11565b60006020828403121561514457600080fd5b815167ffffffffffffffff81111561515b57600080fd5b8201601f8101841361516c57600080fd5b805161517a614dab82614cfa565b81815285602083850101111561518f57600080fd5b613e9d826020830160208601614de5565b6000602082840312156151b257600080fd5b815161488b81614a65565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156151ef576151ef614fbd565b5060010190565b60008251615208818460208701614de5565b919091019291505056fea26469706673582212209d39bb9d4972b515acdad1ffb757acd15e103ca6ee762f88a6382b36243734ba64736f6c634300080a00336101406040523480156200001257600080fd5b5060405162005e9738038062005e97833981016040819052620000359162000198565b60016000556001600160a01b0383166200006257604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038316608081905260408051636f307dc360e01b81529051636f307dc3916004808201926020929091908290030181865afa158015620000ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d39190620001ea565b6001600160a01b031660a0816001600160a01b031681525050826001600160a01b0316634f0e0ef36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200012b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001519190620001ea565b6001600160a01b0390811660c0529190911660e0819052151561010052151561012052506200020f565b80516001600160a01b03811681146200019357600080fd5b919050565b600080600060608486031215620001ae57600080fd5b620001b9846200017b565b9250620001c9602085016200017b565b915060408401518015158114620001df57600080fd5b809150509250925092565b600060208284031215620001fd57600080fd5b62000208826200017b565b9392505050565b60805160a05160c05160e0516101005161012051615a86620004116000396000818161061101528181612fb5015261481f01526000818161031701528181610dde015281816144f901526146e5015260008181610557015281816146a901526147a901526000818161034b0152818161387d015261392d01526000818161047301528181611bfe0152818161274f0152818161280d0152818161366a01526137dd015260008181610665015281816109d801528181610b0301528181610bd501528181610cdd01528181610e6501528181610fe30152818161114e0152818161120e0152818161132e015281816114510152818161162b01528181611708015281816117e0015281816119e501528181611b1201528181611d9501528181611ed5015281816120040152818161216801528181612290015281816123c601528181612568015281816126390152818161266f0152818161293d01528181612a2101528181612a8a01528181612bde01528181612d2601528181612e6801528181612ec2015281816130a10152818161311b015281816131b401528181613341015281816134c10152818161358a0152818161372f01528181613a1a01528181613b2e01528181613dbb015281816142200152818161432801528181614492015281816148e7015281816149e801528181614aae0152614d8f0152615a866000f3fe6080604052600436106102695760003560e01c8063860aefcf11610153578063c7de38a6116100cb578063dfd594651161007f578063eb9606df11610064578063eb9606df1461081e578063f9eaee0d1461083e578063ffd9b9071461085e57600080fd5b8063dfd59465146107de578063e1f21c67146107fe57600080fd5b8063cff0ab96116100b0578063cff0ab96146106ef578063d9ccbec114610783578063dcf65482146107be57600080fd5b8063c7de38a6146106a7578063caa5c23f146106dc57600080fd5b80639c55a05411610122578063b55bb84b11610107578063b55bb84b14610633578063c12c21c014610653578063c690908a1461068757600080fd5b80639c55a054146105df578063b1836d32146105ff57600080fd5b8063860aefcf146104db5780639408b63f146105455780639b67ab30146105795780639be0536a146105bd57600080fd5b80635d91a0e0116101e65780636d19b486116101b55780637071b7c51161019a5780637071b7c51461049557806379c0ef91146104a857806382871ace146104c857600080fd5b80636d19b486146104415780636f307dc31461046157600080fd5b80635d91a0e0146103e85780635f73fbec146103fb578063601d66f61461040e5780636c8f225d1461042e57600080fd5b80633d9287fa1161023d5780635019e20a116102225780635019e20a1461039257806354fd4d50146103b257806359781034146103d557600080fd5b80633d9287fa146103055780634f0e0ef31461033957600080fd5b8062842b571461026e578063256ac915146102905780632a7ba1f7146102c55780632b7c7b11146102e5575b600080fd5b34801561027a57600080fd5b5061028e6102893660046151bf565b61087e565b005b34801561029c57600080fd5b506102b06102ab3660046151f8565b61098e565b60405190151581526020015b60405180910390f35b3480156102d157600080fd5b5061028e6102e0366004615215565b610a61565b3480156102f157600080fd5b5061028e610300366004615215565b610c3b565b34801561031157600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561034557600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102bc565b34801561039e57600080fd5b5061028e6103ad3660046151f8565b610d6a565b3480156103be57600080fd5b506103c7600281565b6040519081526020016102bc565b61028e6103e336600461522e565b61108c565b61028e6103f63660046152bb565b611275565b61028e610409366004615340565b611589565b34801561041a57600080fd5b5061028e6104293660046153d8565b6117de565b61028e61043c36600461541b565b611900565b34801561044d57600080fd5b506102b061045c3660046151f8565b611c31565b34801561046d57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b61028e6104a336600461546e565b611c60565b3480156104b457600080fd5b5061036d6104c3366004615215565b611f3e565b61028e6104d63660046152bb565b611f4b565b3480156104e757600080fd5b5060025461051c906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041682565b604080516fffffffffffffffffffffffffffffffff9384168152929091166020830152016102bc565b34801561055157600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561058557600080fd5b506004546040805167ffffffffffffffff608084901c1681526fffffffffffffffffffffffffffffffff9092166020830152016102bc565b3480156105c957600080fd5b506105d261227d565b6040516102bc91906154e2565b3480156105eb57600080fd5b5061028e6105fa36600461553c565b61228e565b34801561060b57600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561063f57600080fd5b5061028e61064e3660046151f8565b6123c4565b34801561065f57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561069357600080fd5b5061028e6106a23660046151f8565b6124c6565b3480156106b357600080fd5b506106c76106c23660046151f8565b612668565b604080519283526020830191909152016102bc565b61028e6106ea366004615557565b61289b565b3480156106fb57600080fd5b5060015461074e906fffffffffffffffffffffffffffffffff811690700100000000000000000000000000000000810460ff169071010000000000000000000000000000000000900464ffffffffff1683565b604080516fffffffffffffffffffffffffffffffff9094168452911515602084015264ffffffffff16908201526060016102bc565b34801561078f57600080fd5b506102b061079e366004615599565b600360209081526000928352604080842090915290825290205460ff1681565b3480156107ca57600080fd5b5061028e6107d93660046151f8565b612a88565b3480156107ea57600080fd5b506103c76107f93660046151f8565b612b86565b34801561080a57600080fd5b5061028e61081936600461522e565b612c6d565b34801561082a57600080fd5b5061028e6108393660046155c7565b612ec0565b34801561084a57600080fd5b506102b06108593660046151f8565b613057565b34801561086a57600080fd5b5061028e6108793660046155ee565b6131b2565b600260005414156108f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b6002600090815573ffffffffffffffffffffffffffffffffffffffff8316808252600360209081526040808420338086529083529381902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081527f9b3258bc4904fd6426b99843e206c6c7cdb1fd0f040121c25b71dafbb3851ee0910160405180910390a350506001600055565b6040517f055ee9b500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063055ee9b590602401602060405180830381865afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a43919061560b565b73ffffffffffffffffffffffffffffffffffffffff16141592915050565b60026000541415610ace576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610b5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b83919061560b565b9050610b903382846132eb565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906395373018906024015b600060405180830381600087803b158015610c1a57600080fd5b505af1158015610c2e573d6000803e3d6000fd5b5050600160005550505050565b60026000541415610ca8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610d39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5d919061560b565b9050610b90338284613411565b60026000541415610dd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000557f000000000000000000000000000000000000000000000000000000000000000015610e34576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610ec1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee5919061560b565b33600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915290205490915060ff16610f52576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f5d82613583565b5090508015610f98576040517ff713841e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b15801561102757600080fd5b505af115801561103b573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692503391507f93c70cc9715bef0d83edf2095f3595402279d274f402a73ffc17f1bcb19d863d90600090a35050600160005550565b600260005414156110f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611106613875565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063e958b70490602401602060405180830381865afa158015611197573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bb919061560b565b90506111c9848285856139b7565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401600060405180830381600087803b15801561125257600080fd5b505af1158015611266573d6000803e3d6000fd5b50506001600055505050505050565b600260005414156112e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611375573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611399919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166113e8576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806113f483613583565b915091508161142f576040517f1fdd676f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611437613875565b831561144d5761144d85858b8660016000613ae3565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632362a2d88b600185338e8e8e6040518863ffffffff1660e01b81526004016114b59796959493929190615663565b6020604051808303816000875af11580156114d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f891906156bf565b90508873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f7dfecd8419723a9d3954585a30c2a270165d70aafa146c11c1e1b88ae14390648460405161157091815260200190565b60405180910390a4505060016000555050505050505050565b600260005414156115f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ab919061560b565b90506116b5613875565b81156116cb576116cb8383338460016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d89061174a903390600090819083908d908d908d90600401615663565b6020604051808303816000875af1158015611769573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178d91906156bf565b5060405173ffffffffffffffffffffffffffffffffffffffff87169033907f460ad03b1cf79b1d64d3aefa28475f110ab66e84649c52bb41ed796b9b39198190600090a35050600160005550505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611849573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118d1576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff90811670010000000000000000000000000000000002911617600255565b6002600054141561196d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000908155606461198461ffff851687615707565b61198e9190615744565b9050611999816144f7565b6119a2816145e8565b6119ab84614668565b6119b3613875565b6040517f172c48c7000000000000000000000000000000000000000000000000000000008152600060048201819052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a64919061577f565b61ffff169150611a789050816127106157ae565b611a829083615707565b611a8c8288615707565b11611ac3576040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff86811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611b5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b81919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638587604051611bef92919091825261ffff16602082015260400190565b60405180910390a3611c2386827f00000000000000000000000000000000000000000000000000000000000000008a6139b7565b505060016000555050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526006602052604081205415155b92915050565b60026000541415611ccd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611cdb856144f7565b611ce484614668565b611ced856145e8565b600154700100000000000000000000000000000000900460ff1615611d3e576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d46613875565b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff85811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611de0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e04919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638885604051611e7292919091825261ffff16602082015260400190565b60405180910390a38215611e9057611e908484878460006001613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015611f1957600080fd5b505af1158015611f2d573d6000803e3d6000fd5b505060016000555050505050505050565b6000611c5a60058361480f565b60026000541415611fb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa15801561204b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206f919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166120be576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120c661481b565b6120fc576040517f7e52ccb400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061210782612668565b509050612112613875565b82156121285761212884848a8560016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d8906121aa908c90600290879033908f908f908f90600401615663565b6020604051808303816000875af11580156121c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ed91906156bf565b90508773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167ffada13ff2d5e1a1d9da37ad4a4130893b34e3c69c32b17f87ec31fd661b867078460405161226591815260200190565b60405180910390a45050600160005550505050505050565b6060612289600561486b565b905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612381576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561242f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612453919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146124b7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614878565b5050565b60026000541415612533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156125c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e8919061560b565b90506125f4818361489a565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401610c00565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126fc919061560b565b905060008061270b8387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156127a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127c991906156bf565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015291965061271091851690637afb010490604401602060405180830381865afa158015612863573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061288791906156bf565b6128919190615744565b9350505050915091565b60026000541415612908576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129bd919061560b565b90506129c7613875565b8115612a7e576129dc83833384600080613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015612a6557600080fd5b505af1158015612a79573d6000803e3d6000fd5b505050505b5050600160005550565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612af3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b17919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b7b576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614c92565b600080612b9283612668565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152919350600092507f000000000000000000000000000000000000000000000000000000000000000090911690633192195c906024016040805180830381865afa158015612c26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4a91906157c5565b9150819050612c5b61271084615707565b612c659190615744565b949350505050565b60026000541415612cda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063fdd5764590602401602060405180830381865afa158015612d6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d91919061560b565b73ffffffffffffffffffffffffffffffffffffffff161480612dd7575073ffffffffffffffffffffffffffffffffffffffff831660009081526006602052604090205415155b15612e0e576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612eac57600080fd5b505af1158015611c23573d6000803e3d6000fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f4f919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612fb3576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000061300a576040517f50dd11fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805464ffffffffff90921671010000000000000000000000000000000000027fffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffffff909216919091179055565b6040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063f67c5bd090602401602060405180830381865afa1580156130e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061310c91906156bf565b905080158015906131ab5750807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015613184573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a891906156bf565b16155b9392505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561321d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613241919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146132a5576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018054911515700100000000000000000000000000000000027fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff909216919091179055565b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600060448301819052917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561338c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133b091906156bf565b90506133bb816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f98274bf834d179ee08dc0604071b0dc90b54731bd5f725a5a96a39a86bce025a8360405161340391815260200190565b60405180910390a250505050565b61341a816144f7565b600154700100000000000000000000000000000000900460ff161561346b576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600160448301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561350c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061353091906156bf565b905061353b816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f9cac51154cc0d835e2f9c9d1f59a9344588cee107f4203bf58a8c797e3a58c458360405161340391815260200190565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613617919061560b565b90506000806136268387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156136c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136e491906156bf565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529195506000917f00000000000000000000000000000000000000000000000000000000000000001690633192195c906024016040805180830381865afa158015613775573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061379991906157c5565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350600092506127109187169063f9a6503090604401602060405180830381865afa158015613837573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061385b91906156bf565b6138659190615707565b9092109794965093945050505050565b34156139b5577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156138e357600080fd5b505af11580156138f7573d6000803e3d6000fd5b50506040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201523460248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16935063a9059cbb925060440190506020604051808303816000875af115801561398f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139b391906157e9565b505b565b6139c084614cb4565b6040517f830aa74500000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f0000000000000000000000000000000000000000000000000000000000000000169063830aa74590608401600060405180830381600087803b158015613a5e57600080fd5b505af1158015613a72573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fa32435755c235de2976ed44a75a2f85cb01faf0c894f639fe0c32bb9455fea8f83604051613ad591815260200190565b60405180910390a350505050565b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301523060248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b158015613b7257600080fd5b505af1158015613b86573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff871692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a28460005b8181101561441d5736888883818110613bea57613bea615806565b9050602002810190613bfc9190615835565b90506004613c0d6020830183615873565b90501015613c47576040517fe2b0e50600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b30613c5560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16141561421c578415613ca9576040517f5fb9107f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613cb86020830183615873565b613cc1916158d8565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167f59781034000000000000000000000000000000000000000000000000000000001415613e3c5760008080613d1e6020860186615873565b613d2c916004908290615920565b810190613d39919061522e565b925092509250613e34838c73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614613e2b576040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015613e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e26919061560b565b613e2d565b8b5b84846139b7565b505050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2b7c7b11000000000000000000000000000000000000000000000000000000001415613ec757600194506000613e996020840184615873565b613ea7916004908290615920565b810190613eb49190615215565b9050613ec1898983613411565b50614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2a7ba1f7000000000000000000000000000000000000000000000000000000001415613f80578415613f49576040517fc0b0caa800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613f586020840184615873565b613f66916004908290615920565b810190613f739190615215565b9050613ec18989836132eb565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f233a8caa0000000000000000000000000000000000000000000000000000000014156140e457600080613fda6020850185615873565b613fe8916004908290615920565b810190613ff5919061594a565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c8116600483015292945090925082918416906370a0823190602401602060405180830381865afa158015614069573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061408d91906156bf565b10156140dd576040517fa5ac537300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016108e7565b5050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fc690908a00000000000000000000000000000000000000000000000000000000141561416457600061413d6020840184615873565b61414b916004908290615920565b81019061415891906151f8565b9050613ec1888261489a565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f23e27a640000000000000000000000000000000000000000000000000000000014156141e45760006141bd6020840184615873565b6141cb916004908290615920565b8101906141d891906151f8565b9050613ec18882614d42565b6040517f1e9e7e7a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50614414565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff68754361426760208501856151f8565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156142d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142f4919061560b565b73ffffffffffffffffffffffffffffffffffffffff16148061436d575073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001661435560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16145b156143a4576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6144126143b46020830183615873565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506143f69250505060208401846151f8565b73ffffffffffffffffffffffffffffffffffffffff1690614e39565b505b50600101613bcf565b506040517f60c8e8938c9a0c0d88a98d6f1c562ce68077e12bf3edb8047378f2f736cb45b490600090a16040517fe1998cf900000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff86811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b1580156144d657600080fd5b505af11580156144ea573d6000803e3d6000fd5b5050505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006139b3576001546fffffffffffffffffffffffffffffffff9081169081146124c257600454608081901c906fffffffffffffffffffffffffffffffff16600067ffffffffffffffff8316431461456e578461458a565b61458a6fffffffffffffffffffffffffffffffff831686615976565b9050838111156145c6576040517f675f1a5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff81164360801b176004555050505050565b6002546fffffffffffffffffffffffffffffffff16811080614631575060025470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681115b156139b3576040517fce16799400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61467061481b565b156146a7576040517f63fc31c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1615614806577f0000000000000000000000000000000000000000000000000000000000000000801561472657503373ffffffffffffffffffffffffffffffffffffffff821614155b1561475d576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600160248301527f00000000000000000000000000000000000000000000000000000000000000001690639dc29fac90604401600060405180830381600087803b1580156147ed57600080fd5b505af1158015614801573d6000803e3d6000fd5b505050505b6139b381614cb4565b60006131ab8383614e7b565b60007f0000000000000000000000000000000000000000000000000000000000000000801561228957505060015471010000000000000000000000000000000000900464ffffffffff1642101590565b606060006131ab83614ea5565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f01565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561492b57600080fd5b505af115801561493f573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527fdf498aa1c340e992665d6fb4f3be8436d452c45a630cb6d7fab7963da39bac8793500190505b60405180910390a15050565b6040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600091829160019183917f00000000000000000000000000000000000000000000000000000000000000001690638991b2f190602401602060405180830381865afa158015614a2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a5391906156bf565b90505b808211614c895780821615614c7d576040517fe75538c700000000000000000000000000000000000000000000000000000000815260048101839052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e75538c7906024016040805180830381865afa158015614af4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b18919061577f565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529294509092506000918416906370a0823190602401602060405180830381865afa158015614b8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bb191906156bf565b90506001811115614c79576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff8481166024830152600091908b169063f9a6503090604401602060405180830381865afa158015614c33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c5791906156bf565b978801979050614c6b61ffff841682615707565b614c759088615976565b9650505b5050505b600182901b9150614a56565b50509250929050565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f50565b3373ffffffffffffffffffffffffffffffffffffffff821614801590614d0b575033600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16155b156139b3576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b158015614dd357600080fd5b505af1158015614de7573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527f69db9e9764da61b6681b89fb0f5be018506e0342036e56b59c3015a620d60977935001905061498d565b60606131ab83836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250615043565b6000826000018281548110614e9257614e92615806565b9060005260206000200154905092915050565b606081600001805480602002602001604051908101604052809291908181526020018280548015614ef557602002820191906000526020600020905b815481526020019060010190808311614ee1575b50505050509050919050565b6000818152600183016020526040812054614f4857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611c5a565b506000611c5a565b60008181526001830160205260408120548015615039576000614f746001836157ae565b8554909150600090614f88906001906157ae565b9050818114614fed576000866000018281548110614fa857614fa8615806565b9060005260206000200154905080876000018481548110614fcb57614fcb615806565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080614ffe57614ffe61598e565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611c5a565b6000915050611c5a565b6060612c65848460008585843b6150b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108e7565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516150df91906159ed565b60006040518083038185875af1925050503d806000811461511c576040519150601f19603f3d011682016040523d82523d6000602084013e615121565b606091505b509150915061513182828661513c565b979650505050505050565b6060831561514b5750816131ab565b82511561515b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e791906159ff565b73ffffffffffffffffffffffffffffffffffffffff811681146139b357600080fd5b80151581146139b357600080fd5b600080604083850312156151d257600080fd5b82356151dd8161518f565b915060208301356151ed816151b1565b809150509250929050565b60006020828403121561520a57600080fd5b81356131ab8161518f565b60006020828403121561522757600080fd5b5035919050565b60008060006060848603121561524357600080fd5b833561524e8161518f565b9250602084013561525e8161518f565b929592945050506040919091013590565b60008083601f84011261528157600080fd5b50813567ffffffffffffffff81111561529957600080fd5b6020830191508360208260051b85010111156152b457600080fd5b9250929050565b60008060008060008060a087890312156152d457600080fd5b86356152df8161518f565b955060208701356152ef8161518f565b9450604087013593506060870135615306816151b1565b9250608087013567ffffffffffffffff81111561532257600080fd5b61532e89828a0161526f565b979a9699509497509295939492505050565b60008060008060006080868803121561535857600080fd5b85356153638161518f565b945060208601359350604086013561537a816151b1565b9250606086013567ffffffffffffffff81111561539657600080fd5b6153a28882890161526f565b969995985093965092949392505050565b80356fffffffffffffffffffffffffffffffff811681146153d357600080fd5b919050565b600080604083850312156153eb57600080fd5b6153f4836153b3565b9150615402602084016153b3565b90509250929050565b61ffff811681146139b357600080fd5b6000806000806080858703121561543157600080fd5b8435935060208501356154438161518f565b925060408501356154538161540b565b915060608501356154638161540b565b939692955090935050565b60008060008060006080868803121561548657600080fd5b8535945060208601356154988161518f565b9350604086013567ffffffffffffffff8111156154b457600080fd5b6154c08882890161526f565b90945092505060608601356154d48161540b565b809150509295509295909350565b6020808252825182820181905260009190848201906040850190845b8181101561553057835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016154fe565b50909695505050505050565b60006020828403121561554e57600080fd5b6131ab826153b3565b6000806020838503121561556a57600080fd5b823567ffffffffffffffff81111561558157600080fd5b61558d8582860161526f565b90969095509350505050565b600080604083850312156155ac57600080fd5b82356155b78161518f565b915060208301356151ed8161518f565b6000602082840312156155d957600080fd5b813564ffffffffff811681146131ab57600080fd5b60006020828403121561560057600080fd5b81356131ab816151b1565b60006020828403121561561d57600080fd5b81516131ab8161518f565b6003811061565f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b73ffffffffffffffffffffffffffffffffffffffff888116825260e082019061568f602084018a615628565b6040830197909752948616606082015292909416608083015260a082015291151560c09092019190915292915050565b6000602082840312156156d157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561573f5761573f6156d8565b500290565b60008261577a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000806040838503121561579257600080fd5b825161579d8161518f565b60208401519092506151ed8161540b565b6000828210156157c0576157c06156d8565b500390565b600080604083850312156157d857600080fd5b505080516020909101519092909150565b6000602082840312156157fb57600080fd5b81516131ab816151b1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc183360301811261586957600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126158a857600080fd5b83018035915067ffffffffffffffff8211156158c357600080fd5b6020019150368190038213156152b457600080fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156159185780818660040360031b1b83161692505b505092915050565b6000808585111561593057600080fd5b8386111561593d57600080fd5b5050820193919092039150565b6000806040838503121561595d57600080fd5b82356159688161518f565b946020939093013593505050565b60008219821115615989576159896156d8565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60005b838110156159d85781810151838201526020016159c0565b838111156159e7576000848401525b50505050565b600082516158698184602087016159bd565b6020815260008251806020840152615a1e8160408501602087016159bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea2646970667358221220a3f4a705ab580a6ada1e438cd2ee4abc001b62d1d171fce12c41994900fef21664736f6c634300080a003360a06040523480156200001157600080fd5b5060405162005f3d38038062005f3d8339810160408190526200003491620012eb565b826001600160a01b031663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000073573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200009991906200147f565b6001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000d7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000fd91906200147f565b6000805460ff191690556001600160a01b0381166200012f57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200016e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200019491906200147f565b6001600160a01b03908116608052600180546001600160a01b031916918616918217905560408051636f307dc360e01b81529051919250636f307dc39160048083019260209291908290030181865afa158015620001f6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200021c91906200147f565b600260006101000a8154816001600160a01b0302191690836001600160a01b03160217905550826001600160a01b031663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000281573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a791906200147f565b6001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200030b91906200147f565b600080546001600160a01b039290921661010002610100600160a81b0319909216919091179055620003626103e860c86200034b6101f4612710620014bc565b60646200035c60c8612710620014bc565b620005e8565b60408101515160005b81811015620003ee576000836040015182815181106200038f576200038f620014e2565b6020026020010151600001519050620003ae81620007c260201b60201c565b620003e48185604001518481518110620003cc57620003cc620014e2565b60200260200101516020015162000a5e60201b60201c565b506001016200036b565b5060015460408051632630c12f60e01b815290516001600160a01b03909216916311ca4fc29186918491632630c12f9160048083019260209291908290030181865afa15801562000443573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200046991906200147f565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401600060405180830381600087803b158015620004b257600080fd5b505af1158015620004c7573d6000803e3d6000fd5b50506040516001600160a01b03861692507fa8b21f72cb83bce808df32dc2330217d744a1c22f3e9e44e4b11bbf049d37d9d9150600090a2600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000553573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200057991906200147f565b6001600160a01b03167f3f82447be465b0b5a4a9e54c74d5f6ae73f2e9537f2cc1590a340524703d096160405160405180910390a26020820151620005cb90620005c5906002620014f8565b62000bda565b81516020830151620005de919062000dc8565b5050505062001604565b6000620005f68585620014bc565b60015460405163172c48c760e01b81526000600482018190529293506001600160a01b039091169063172c48c7906024016040805180830381865afa15801562000644573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200066a91906200152a565b9150508061ffff168261ffff1614620006be57620006888262000f47565b60025460405161ffff841681526001600160a01b039091169060008051602062005f1d8339815191529060200160405180910390a25b60015460405163944ac59f60e01b815261ffff808a166004830152808916602483015280881660448301528087166064830152851660848201526001600160a01b039091169063944ac59f9060a401600060405180830381600087803b1580156200072857600080fd5b505af11580156200073d573d6000803e3d6000fd5b505050507f2214a403d5f8d049e52eacca974c6dea01a471e41d6a18903bfaf7dbc709741f878787612710620007749190620014bc565b876200078388612710620014bc565b6040805161ffff96871681529486166020860152928516848401529084166060840152909216608082015290519081900360a00190a150505050505050565b6001600160a01b038116620007ea57604051635919af9760e11b815260040160405180910390fd5b62000809816001600160a01b03166200116f60201b620023381760201c565b620008365760405163df4c572d60e01b81526001600160a01b038216600482015260240160405180910390fd5b6040516370a0823160e01b81523060048201526001600160a01b038216906370a0823190602401602060405180830381865afa92505050801562000899575060408051601f3d908101601f19168201909252620008969181019062001564565b60015b620008b75760405163528ca31d60e01b815260040160405180910390fd5b50600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200090c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200093291906200147f565b604051630f9a650360e41b8152670de0b6b3a764000060048201526001600160a01b038381166024830152919091169063f9a6503090604401602060405180830381865afa925050508015620009a7575060408051601f3d908101601f19168201909252620009a49181019062001564565b60015b620009c5576040516367a7cd4360e01b815260040160405180910390fd5b5060015460405163d48bfca760e01b81526001600160a01b0383811660048301529091169063d48bfca790602401600060405180830381600087803b15801562000a0e57600080fd5b505af115801562000a23573d6000803e3d6000fd5b50506040516001600160a01b03841692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a250565b6002546001600160a01b038381169116141562000a8e57604051633b899cf960e01b815260040160405180910390fd5b60015460405163172c48c760e01b8152600060048201819052916001600160a01b03169063172c48c7906024016040805180830381865afa15801562000ad8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000afe91906200152a565b91505061ffff8216158062000b1a57508061ffff168261ffff16115b1562000b39576040516333c6608d60e01b815260040160405180910390fd5b600154604051635385e2a160e11b81526001600160a01b03858116600483015261ffff851660248301529091169063a70bc54290604401600060405180830381600087803b15801562000b8b57600080fd5b505af115801562000ba0573d6000803e3d6000fd5b505060405161ffff851681526001600160a01b038616925060008051602062005f1d833981519152915060200160405180910390a2505050565b600062000be662001175565b6001600160a01b031663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801562000c24573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c4a91906200157e565b50509050600062000c606200117560201b60201c565b6001600160a01b031663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa15801562000c9d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000cc39190620015d5565b915050806001600160801b0316836001600160801b0316101562000cfa576040516309aadd6f60e41b815260040160405180910390fd5b826001600160801b0316826001600160801b03161462000dc35762000d1e62001175565b604051632715681560e21b81526001600160801b03851660048201526001600160a01b039190911690639c55a05490602401600060405180830381600087803b15801562000d6b57600080fd5b505af115801562000d80573d6000803e3d6000fd5b50506040516001600160801b03861681527fa030eec20ae970821387224ec3bb15b4bd22b89bfb86dc4d2b3827aa3d99e48d925060200190505b60405180910390a15b505050565b600062000dd462001175565b6001600160a01b031663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801562000e12573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e3891906200157e565b50509050816001600160801b0316836001600160801b0316118062000e6e5750806001600160801b0316826001600160801b0316115b1562000e8d576040516309aadd6f60e41b815260040160405180910390fd5b62000e9762001175565b60405163300eb37b60e11b81526001600160801b038086166004830152841660248201526001600160a01b03919091169063601d66f690604401600060405180830381600087803b15801562000eec57600080fd5b505af115801562000f01573d6000803e3d6000fd5b5050604080516001600160801b038088168252861660208201527f4d4981437d0211f9e6843eb024d9ada1fa3a99514d4343d4aece106dd11524bb935001905062000dba565b600154600254604051635385e2a160e11b81526001600160a01b03918216600482015261ffff8416602482015291169063a70bc54290604401600060405180830381600087803b15801562000f9b57600080fd5b505af115801562000fb0573d6000803e3d6000fd5b505050506000600160009054906101000a90046001600160a01b03166001600160a01b031663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200100a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001030919062001564565b905060015b8181101562000dc35760015460405163172c48c760e01b81526004810183905260009182916001600160a01b039091169063172c48c7906024016040805180830381865afa1580156200108c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010b291906200152a565b915091508461ffff168161ffff1611156200116457600154604051635385e2a160e11b81526001600160a01b03848116600483015261ffff881660248301529091169063a70bc54290604401600060405180830381600087803b1580156200111957600080fd5b505af11580156200112e573d6000803e3d6000fd5b505060405161ffff881681526001600160a01b038516925060008051602062005f1d833981519152915060200160405180910390a25b505060010162001035565b3b151590565b60015460408051632f7a188160e01b815290516000926001600160a01b031691632f7a18819160048083019260209291908290030181865afa158015620011c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011e691906200147f565b905090565b6001600160a01b03811681146200120157600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b03811182821017156200123f576200123f62001204565b60405290565b604080519081016001600160401b03811182821017156200123f576200123f62001204565b604051601f8201601f191681016001600160401b038111828210171562001295576200129562001204565b604052919050565b80516001600160801b0381168114620012b557600080fd5b919050565b8051620012b581620011eb565b805161ffff81168114620012b557600080fd5b80518015158114620012b557600080fd5b6000806000606084860312156200130157600080fd5b83516200130e81620011eb565b809350506020808501516200132381620011eb565b604086810151919450906001600160401b03808211156200134357600080fd5b9087019060a0828a0312156200135857600080fd5b620013626200121a565b6200136d836200129d565b81526200137c8584016200129d565b8582015283830151828111156200139257600080fd5b8301601f81018b13620013a457600080fd5b805183811115620013b957620013b962001204565b620013c9878260051b016200126a565b818152878101945060069190911b82018701908c821115620013ea57600080fd5b918701915b81831015620014435786838e031215620014095760008081fd5b6200141362001245565b83516200142081620011eb565b81526200142f848a01620012c7565b818a015285529387019391860191620013ef565b838701525062001458905060608401620012ba565b60608201526200146b60808401620012da565b608082015280955050505050509250925092565b6000602082840312156200149257600080fd5b81516200149f81620011eb565b9392505050565b634e487b7160e01b600052601160045260246000fd5b600061ffff83811690831681811015620014da57620014da620014a6565b039392505050565b634e487b7160e01b600052603260045260246000fd5b60006001600160801b0382811684821681151582840482111615620015215762001521620014a6565b02949350505050565b600080604083850312156200153e57600080fd5b82516200154b81620011eb565b91506200155b60208401620012c7565b90509250929050565b6000602082840312156200157757600080fd5b5051919050565b6000806000606084860312156200159457600080fd5b6200159f846200129d565b9250620015af60208501620012da565b9150604084015164ffffffffff81168114620015ca57600080fd5b809150509250925092565b60008060408385031215620015e957600080fd5b620015f4836200129d565b91506200155b602084016200129d565b608051614878620016a56000396000818161033601528181610446015281816107c5015281816108c0015281816109ae01528181610b8301528181610f0a015281816113e1015281816114cf015281816115bb015281816116ab015281816117990152818161187d01528181611ad901528181611bc601528181611cb301528181611da0015281816120090152818161218c015261227901526148786000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80638456cb59116100f9578063dc2b21c111610097578063f0527ac611610071578063f0527ac6146103d7578063f206d32a146103df578063fb1bd8c4146103f2578063ffd9b9071461040557600080fd5b8063dc2b21c11461039e578063e6492d7b146103b1578063eb9606df146103c457600080fd5b8063a50cf2c8116100d3578063a50cf2c814610331578063a70bc54214610358578063b53472ef1461036b578063c12c21c01461037e57600080fd5b80638456cb59146103035780639c55a0541461030b5780639f1c50691461031e57600080fd5b806350e036ff1161016657806354fd4d501161014057806354fd4d50146102b25780635c975abb146102ba5780636f307dc3146102d05780637bccacee146102f057600080fd5b806350e036ff1461027657806352438e541461028c578063526a41e81461029f57600080fd5b80633e7c88d6116101a25780633e7c88d6146102355780633f4ba83a14610248578063456e0742146102505780635094cb4f1461026357600080fd5b806324147708146101c95780632954018c146101de5780632f7a18811461022d575b600080fd5b6101dc6101d7366004614307565b610418565b005b60005461020390610100900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6102036106fe565b6101dc610243366004614334565b610797565b6101dc610892565b6101dc61025e366004614307565b610980565b61020361027136600461436d565b610b36565b61027e610b49565b604051908152602001610224565b6101dc61029a366004614307565b610b55565b6101dc6102ad366004614394565b610edc565b61027e600281565b60005460ff166040519015158152602001610224565b6002546102039073ffffffffffffffffffffffffffffffffffffffff1681565b6101dc6102fe3660046143c2565b6113b3565b6101dc6114a1565b6101dc61031936600461440e565b61158d565b6101dc61032c36600461442b565b61167d565b6102037f000000000000000000000000000000000000000000000000000000000000000081565b6101dc610366366004614334565b61176b565b6101dc610379366004614307565b61184f565b6001546102039073ffffffffffffffffffffffffffffffffffffffff1681565b6101dc6103ac366004614459565b611aab565b6101dc6103bf366004614307565b611b98565b6101dc6103d236600461448f565b611c85565b6101dc611d72565b6101dc6103ed3660046144ac565b611fdb565b6101dc610400366004614307565b61215e565b6101dc61041336600461451d565b61224b565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156104a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c6919061453a565b6104fc576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006105078261233e565b90506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015610578573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059c9190614557565b90508181166106f9576001546040517fa366f496000000000000000000000000000000000000000000000000000000008152918317600483018190529173ffffffffffffffffffffffffffffffffffffffff9091169063a366f49690602401600060405180830381600087803b15801561061557600080fd5b505af1158015610629573d6000803e3d6000fd5b505050506106356106fe565b6040517fffd9b9070000000000000000000000000000000000000000000000000000000081526001600482015273ffffffffffffffffffffffffffffffffffffffff919091169063ffd9b90790602401600060405180830381600087803b15801561069f57600080fd5b505af11580156106b3573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692507ff17b849746e74d7186170c9553d4bbf60b4f8bb1ed81fe50c099b934fb078f059150600090a25b505050565b600154604080517f2f7a1881000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691632f7a18819160048083019260209291908290030181865afa15801561076e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610792919061457b565b905090565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610821573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610845919061453a565b61087b576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108848261241e565b61088e82826127f8565b5050565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa15801561091c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610940919061453a565b610976576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61097e612a15565b565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610a0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2e919061453a565b610a64576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a6d81612af6565b6001546040517f9f5f86ae00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015290911690639f5f86ae90602401600060405180830381600087803b158015610ada57600080fd5b505af1158015610aee573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507f5a0b7d0f9c24b39256e112a0584b4c5ce38d8f1dee2e7c56f15b852604cdc8869150600090a250565b6000610b43600383612cb8565b92915050565b60006107926003612ccb565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610bdf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c03919061453a565b610c39576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610c86576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063fdd5764590602401602060405180830381865afa158015610cf7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1b919061457b565b905073ffffffffffffffffffffffffffffffffffffffff8116610d6a576040517f1170cc2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f6e98e5e400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526000602483015290911690636e98e5e490604401600060405180830381600087803b158015610dde57600080fd5b505af1158015610df2573d6000803e3d6000fd5b50506001546040517f6e98e5e40000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff86811660248301529091169250636e98e5e49150604401600060405180830381600087803b158015610e6a57600080fd5b505af1158015610e7e573d6000803e3d6000fd5b50505050610e96826003612cd590919063ffffffff16565b5060405173ffffffffffffffffffffffffffffffffffffffff8316907fab9f405bf0c19b97f65a7031634db41569cd2f0e0376a610a1e977f9ab22b58f90600090a25050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610f66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8a919061453a565b610fc0576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fc982612af6565b6000806000610fd66106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015611020573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110449190614598565b9250925092506000806110556106fe565b73ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa15801561109e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c291906145e5565b9150915060006110d06106fe565b73ffffffffffffffffffffffffffffffffffffffff16639be0536a6040518163ffffffff1660e01b8152600401600060405180830381865afa15801561111a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526111609190810190614643565b9050600061116c6106fe565b73ffffffffffffffffffffffffffffffffffffffff1663b1836d326040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111da919061453a565b600154604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905192935073ffffffffffffffffffffffffffffffffffffffff909116916311ca4fc2918c918491632630c12f9160048083019260209291908290030181865afa158015611256573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061127a919061457b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156112e757600080fd5b505af11580156112fb573d6000803e3d6000fd5b5050505087156113675761130e87612cf7565b6113188484612f5d565b61132186613152565b60005b82518110156113575761134f83828151811061134257611342614726565b60200260200101516132a3565b600101611324565b50801561136757611367856133c9565b60405173ffffffffffffffffffffffffffffffffffffffff8a16907fa8b21f72cb83bce808df32dc2330217d744a1c22f3e9e44e4b11bbf049d37d9d90600090a2505050505050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561143d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611461919061453a565b611497576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61088e828261357b565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561152b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061154f919061453a565b611585576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61097e6139c3565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611617573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163b919061453a565b611671576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81612cf7565b50565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611707573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172b919061453a565b611761576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61088e8282612f5d565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156117f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611819919061453a565b610884576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156118d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fd919061453a565b611933576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061193e8261233e565b90506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d39190614557565b9050818116156106f9576001546040517fa366f496000000000000000000000000000000000000000000000000000000008152918318600483018190529173ffffffffffffffffffffffffffffffffffffffff9091169063a366f49690602401600060405180830381600087803b158015611a4d57600080fd5b505af1158015611a61573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a2505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611b35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b59919061453a565b611b8f576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81613a83565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611c22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c46919061453a565b611c7c576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81613b3d565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611d0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d33919061453a565b611d69576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a816133c9565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611dfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e20919061453a565b611e56576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ec4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee8919061457b565b60015490915073ffffffffffffffffffffffffffffffffffffffff166311ca4fc2611f116106fe565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff91821660048201529084166024820152604401600060405180830381600087803b158015611f7f57600080fd5b505af1158015611f93573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507f3f82447be465b0b5a4a9e54c74d5f6ae73f2e9537f2cc1590a340524703d09619150600090a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015612065573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612089919061453a565b6120bf576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61271061ffff86161015806120e357506127106120dc8585614784565b61ffff1610155b806120fd57506127106120f68383614784565b61ffff1610155b15612134576040517f0b361d6900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6121578585612145866127106147aa565b85612152866127106147aa565b613c5c565b5050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156121e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061220c919061453a565b612242576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a816132a3565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156122d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122f9919061453a565b61232f576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81613152565b3b151590565b6001546040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063f67c5bd090602401602060405180830381865afa1580156123af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123d39190614557565b90508015806123e25750806001145b15612419576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b73ffffffffffffffffffffffffffffffffffffffff811661246b576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163b6124d6576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024015b60405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8216906370a0823190602401602060405180830381865afa92505050801561257a575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261257791810190614557565b60015b6125b0576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561261e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612642919061457b565b6040517ff9a65030000000000000000000000000000000000000000000000000000000008152670de0b6b3a7640000600482015273ffffffffffffffffffffffffffffffffffffffff8381166024830152919091169063f9a6503090604401602060405180830381865afa9250505080156126f8575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526126f591810190614557565b60015b61272e576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506001546040517fd48bfca700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301529091169063d48bfca790602401600060405180830381600087803b15801561279c57600080fd5b505af11580156127b0573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a250565b60025473ffffffffffffffffffffffffffffffffffffffff8381169116141561284d576040517f3b899cf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f172c48c70000000000000000000000000000000000000000000000000000000081526000600482018190529173ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa1580156128bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128e091906147cd565b91505061ffff821615806128fb57508061ffff168261ffff16115b15612932576040517f33c6608d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015261ffff851660248301529091169063a70bc54290604401600060405180830381600087803b1580156129a957600080fd5b505af11580156129bd573d6000803e3d6000fd5b505060405161ffff8516815273ffffffffffffffffffffffffffffffffffffffff861692507f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650915060200160405180910390a2505050565b60005460ff16612a81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016124cd565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b73ffffffffffffffffffffffffffffffffffffffff8116612b43576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163b612ba9576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024016124cd565b8073ffffffffffffffffffffffffffffffffffffffff1663c12c21c06040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612c2e575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252612c2b9181019061457b565b60015b612c64576040517fe9eddd1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60015473ffffffffffffffffffffffffffffffffffffffff82811691161461088e576040517fe9eddd1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612cc48383613e92565b9392505050565b6000610b43825490565b6000612cc48373ffffffffffffffffffffffffffffffffffffffff8416613ebc565b6000612d016106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015612d4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d6f9190614598565b505090506000612d7d6106fe565b73ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa158015612dc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dea91906145e5565b915050806fffffffffffffffffffffffffffffffff16836fffffffffffffffffffffffffffffffff161015612e4b576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826fffffffffffffffffffffffffffffffff16826fffffffffffffffffffffffffffffffff16146106f957612e7e6106fe565b6040517f9c55a0540000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff8516600482015273ffffffffffffffffffffffffffffffffffffffff9190911690639c55a05490602401600060405180830381600087803b158015612ef957600080fd5b505af1158015612f0d573d6000803e3d6000fd5b50506040516fffffffffffffffffffffffffffffffff861681527fa030eec20ae970821387224ec3bb15b4bd22b89bfb86dc4d2b3827aa3d99e48d925060200190505b60405180910390a1505050565b6000612f676106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015612fb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fd59190614598565b50509050816fffffffffffffffffffffffffffffffff16836fffffffffffffffffffffffffffffffff16118061302e5750806fffffffffffffffffffffffffffffffff16826fffffffffffffffffffffffffffffffff16115b15613065576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61306d6106fe565b6040517f601d66f60000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff80861660048301528416602482015273ffffffffffffffffffffffffffffffffffffffff919091169063601d66f690604401600060405180830381600087803b1580156130f057600080fd5b505af1158015613104573d6000803e3d6000fd5b5050604080516fffffffffffffffffffffffffffffffff8088168252861660208201527f4d4981437d0211f9e6843eb024d9ada1fa3a99514d4343d4aece106dd11524bb9350019050612f50565b600061315c6106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa1580156131a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131ca9190614598565b509150508015158215151461088e576131e16106fe565b6040517fffd9b907000000000000000000000000000000000000000000000000000000008152831515600482015273ffffffffffffffffffffffffffffffffffffffff919091169063ffd9b90790602401600060405180830381600087803b15801561324c57600080fd5b505af1158015613260573d6000803e3d6000fd5b505050507ff97ba903470ff3262b4a68a938fe81def401bac1bd742169d2e8d5c4ed2185d382604051613297911515815260200190565b60405180910390a15050565b73ffffffffffffffffffffffffffffffffffffffff81166132f0576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6132f86106fe565b6040517fb55bb84b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152919091169063b55bb84b90602401600060405180830381600087803b15801561336357600080fd5b505af1158015613377573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841681527fdac9a7995cbc0c0f01d78970fb6fd0b52fe0fe869eb6635e65cc1b5682b8325c925060200190505b60405180910390a150565b60006133d36106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801561341d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134419190614598565b925050508064ffffffffff168264ffffffffff161461088e578164ffffffffff168164ffffffffff16118061347c57508164ffffffffff1642115b156134b3576040517fe4eaca7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134bb6106fe565b6040517feb9606df00000000000000000000000000000000000000000000000000000000815264ffffffffff8416600482015273ffffffffffffffffffffffffffffffffffffffff919091169063eb9606df90602401600060405180830381600087803b15801561352b57600080fd5b505af115801561353f573d6000803e3d6000fd5b505060405164ffffffffff851681527f0b3eb35ba750e7a7e4d26c9eee3d226f4e1f68c5568f4a3d051c94b241b02ac092506020019050613297565b73ffffffffffffffffffffffffffffffffffffffff82166135c8576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82163b61362e576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016124cd565b61363781612af6565b60015473ffffffffffffffffffffffffffffffffffffffff8381169116148061369257506136636106fe565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b806136b7575060015473ffffffffffffffffffffffffffffffffffffffff8281169116145b806136f457506136c56106fe565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b1561372b576040517f727de5c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517fff68754300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063ff68754390602401602060405180830381865afa15801561379c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137c0919061457b565b73ffffffffffffffffffffffffffffffffffffffff1614158061388c57506001546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063fdd5764590602401602060405180830381865afa15801561384f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613873919061457b565b73ffffffffffffffffffffffffffffffffffffffff1614155b156138c3576040517f21ff1e7100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f6e98e5e400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152848116602483015290911690636e98e5e490604401600060405180830381600087803b15801561393857600080fd5b505af115801561394c573d6000803e3d6000fd5b50505050613964826003613faf90919063ffffffff16565b508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4bcbefaef68b99503d502f5a6abe7bca2b183ab8ac55457013c77d084ebd130560405160405180910390a35050565b60005460ff1615613a30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016124cd565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612acc3390565b6001546040517fdc2b21c100000000000000000000000000000000000000000000000000000000815260ff8316600482015273ffffffffffffffffffffffffffffffffffffffff9091169063dc2b21c190602401600060405180830381600087803b158015613af157600080fd5b505af1158015613b05573d6000803e3d6000fd5b505060405160ff841681527f73caacd705657a7d283e48ecf288b73bc517e3aea1bbc9da2fd54a979e8aa950925060200190506133be565b73ffffffffffffffffffffffffffffffffffffffff8116613b8a576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613b926106fe565b6040517fdcf6548200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152919091169063dcf6548290602401600060405180830381600087803b158015613bfd57600080fd5b505af1158015613c11573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841681527f32e53e2e527af8518ae889e5f7e674bc83f7cf68e4cc059aceeaa0e64208b85b925060200190506133be565b6000613c6885856147aa565b6001546040517f172c48c700000000000000000000000000000000000000000000000000000000815260006004820181905292935073ffffffffffffffffffffffffffffffffffffffff9091169063172c48c7906024016040805180830381865afa158015613cdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cff91906147cd565b9150508061ffff168261ffff1614613d6e57613d1a82613fd1565b60025460405161ffff8416815273ffffffffffffffffffffffffffffffffffffffff909116907f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac6509060200160405180910390a25b6001546040517f944ac59f00000000000000000000000000000000000000000000000000000000815261ffff808a1660048301528089166024830152808816604483015280871660648301528516608482015273ffffffffffffffffffffffffffffffffffffffff9091169063944ac59f9060a401600060405180830381600087803b158015613dfd57600080fd5b505af1158015613e11573d6000803e3d6000fd5b505050507f2214a403d5f8d049e52eacca974c6dea01a471e41d6a18903bfaf7dbc709741f878787612710613e4691906147aa565b87613e53886127106147aa565b6040805161ffff96871681529486166020860152928516848401529084166060840152909216608082015290519081900360a00190a150505050505050565b6000826000018281548110613ea957613ea9614726565b9060005260206000200154905092915050565b60008181526001830160205260408120548015613fa5576000613ee06001836147fc565b8554909150600090613ef4906001906147fc565b9050818114613f59576000866000018281548110613f1457613f14614726565b9060005260206000200154905080876000018481548110613f3757613f37614726565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080613f6a57613f6a614813565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610b43565b6000915050610b43565b6000612cc48373ffffffffffffffffffffffffffffffffffffffff8416614296565b6001546002546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015261ffff8416602482015291169063a70bc54290604401600060405180830381600087803b15801561404a57600080fd5b505af115801561405e573d6000803e3d6000fd5b505050506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156140d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140f59190614557565b905060015b818110156106f9576001546040517f172c48c700000000000000000000000000000000000000000000000000000000815260048101839052600091829173ffffffffffffffffffffffffffffffffffffffff9091169063172c48c7906024016040805180830381865afa158015614175573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061419991906147cd565b915091508461ffff168161ffff16111561428c576001546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015261ffff881660248301529091169063a70bc54290604401600060405180830381600087803b15801561422457600080fd5b505af1158015614238573d6000803e3d6000fd5b505060405161ffff8816815273ffffffffffffffffffffffffffffffffffffffff851692507f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650915060200160405180910390a25b50506001016140fa565b60008181526001830160205260408120546142dd57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610b43565b506000610b43565b73ffffffffffffffffffffffffffffffffffffffff8116811461167a57600080fd5b60006020828403121561431957600080fd5b8135612cc4816142e5565b61ffff8116811461167a57600080fd5b6000806040838503121561434757600080fd5b8235614352816142e5565b9150602083013561436281614324565b809150509250929050565b60006020828403121561437f57600080fd5b5035919050565b801515811461167a57600080fd5b600080604083850312156143a757600080fd5b82356143b2816142e5565b9150602083013561436281614386565b600080604083850312156143d557600080fd5b82356143e0816142e5565b91506020830135614362816142e5565b6fffffffffffffffffffffffffffffffff8116811461167a57600080fd5b60006020828403121561442057600080fd5b8135612cc4816143f0565b6000806040838503121561443e57600080fd5b8235614449816143f0565b91506020830135614362816143f0565b60006020828403121561446b57600080fd5b813560ff81168114612cc457600080fd5b64ffffffffff8116811461167a57600080fd5b6000602082840312156144a157600080fd5b8135612cc48161447c565b600080600080600060a086880312156144c457600080fd5b85356144cf81614324565b945060208601356144df81614324565b935060408601356144ef81614324565b925060608601356144ff81614324565b9150608086013561450f81614324565b809150509295509295909350565b60006020828403121561452f57600080fd5b8135612cc481614386565b60006020828403121561454c57600080fd5b8151612cc481614386565b60006020828403121561456957600080fd5b5051919050565b8051612419816142e5565b60006020828403121561458d57600080fd5b8151612cc4816142e5565b6000806000606084860312156145ad57600080fd5b83516145b8816143f0565b60208501519093506145c981614386565b60408501519092506145da8161447c565b809150509250925092565b600080604083850312156145f857600080fd5b8251614603816143f0565b6020840151909250614362816143f0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000602080838503121561465657600080fd5b825167ffffffffffffffff8082111561466e57600080fd5b818501915085601f83011261468257600080fd5b81518181111561469457614694614614565b8060051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f830116810181811085821117156146d7576146d7614614565b6040529182528482019250838101850191888311156146f557600080fd5b938501935b8285101561471a5761470b85614570565b845293850193928501926146fa565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061ffff8083168185168083038211156147a1576147a1614755565b01949350505050565b600061ffff838116908316818110156147c5576147c5614755565b039392505050565b600080604083850312156147e057600080fd5b82516147eb816142e5565b602084015190925061436281614324565b60008282101561480e5761480e614755565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea264697066735822122046c364b67d38a3dd85b57e027716324d90dd1df102f265f0a0e2697babdb3f3b64736f6c634300080a003394525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650608060405234801561001057600080fd5b5061029a806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80634e417a981461003a575b610037600080366100e6565b50005b610042610058565b60405161004f919061019d565b60405180910390f35b6000805461006590610210565b80601f016020809104026020016040519081016040528092919081815260200182805461009190610210565b80156100de5780601f106100b3576101008083540402835291602001916100de565b820191906000526020600020905b8154815290600101906020018083116100c157829003601f168201915b505050505081565b8280546100f290610210565b90600052602060002090601f0160209004810192826101145760008555610178565b82601f1061014b578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00823516178555610178565b82800160010185558215610178579182015b8281111561017857823582559160200191906001019061015d565b50610184929150610188565b5090565b5b808211156101845760008155600101610189565b600060208083528351808285015260005b818110156101ca578581018301518582016040015282016101ae565b818111156101dc576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b600181811c9082168061022457607f821691505b6020821081141561025e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b5091905056fea2646970667358221220ce4d98ff6e78d6e572ead23f5f0316947ad3d447e60e1efdfc3a1485144c317a64736f6c634300080a003360e06040523480156200001157600080fd5b50604051620018e8380380620018e883398101604081905262000034916200011d565b81816001600160a01b03821615806200005457506001600160a01b038116155b156200007357604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038216608081905260408051632f7a188160e01b81529051632f7a1881916004808201926020929091908290030181865afa158015620000be573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e4919062000155565b6001600160a01b0390811660a0521660c052506200017a915050565b80516001600160a01b03811681146200011857600080fd5b919050565b600080604083850312156200013157600080fd5b6200013c8362000100565b91506200014c6020840162000100565b90509250929050565b6000602082840312156200016857600080fd5b620001738262000100565b9392505050565b60805160a05160c05161169062000258600039600081816102990152818161038c0152818161071c0152818161083b0152818161091501528181610d1901528181610e380152610f120152600081816101f7015281816104390152818161058701528181610b840152610f9001526000818160fa015281816102c00152818161035d015281816104a3015281816107720152818161080c0152818161096b01528181610a2c01528181610af001528181610d6f01528181610e0901528181610f4901528181611018015281816110cc015261117601526116906000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c8063b73c1cfc11610081578063cd685c2c1161005b578063cd685c2c146102e2578063ce30bbdb146102f5578063d190b78d1461030a576100c9565b8063b73c1cfc14610281578063bd90df7014610294578063c12c21c0146102bb576100c9565b806333a9edaf116100b257806333a9edaf1461023e5780633ccb153e1461025357806378aa73a414610266576100c9565b806309c5eabe146101c95780632f7a1881146101f2575b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610156573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061017a91906111fd565b90506101bc6000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061031d92505050565b506101c681610421565b50005b6101dc6101d736600461133b565b610503565b6040516101e991906113f2565b60405180910390f35b6102197f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e9565b61025161024c366004611405565b61050e565b005b6101dc610261366004611437565b610517565b61026e600181565b60405161ffff90911681526020016101e9565b6101dc61028f3660046114cc565b610532565b6102197f000000000000000000000000000000000000000000000000000000000000000081565b6102197f000000000000000000000000000000000000000000000000000000000000000081565b6101dc6102f03660046114cc565b61054b565b6102fd600081565b6040516101e99190611550565b6101dc610318366004611437565b61055a565b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815260609073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a906103b69033907f0000000000000000000000000000000000000000000000000000000000000000908790600401611591565b6000604051808303816000875af11580156103d5573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261041b91908101906115d3565b92915050565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610500576040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b1580156104e757600080fd5b505af11580156104fb573d6000803e3d6000fd5b505050505b50565b606061041b8261031d565b61050081610421565b606061052787878787878761056a565b979650505050505050565b606061054186868686866109e3565b9695505050505050565b60606105418686868686610aa7565b6060610527878787878787610b67565b60606000803373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146106d3576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301528916906370a0823190602401602060405180830381865afa158015610618573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061063c9190611641565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152919350908816906370a0823190602401602060405180830381865afa1580156106ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d09190611641565b90505b84156107cf576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156107b657600080fd5b505af11580156107ca573d6000803e3d6000fd5b505050505b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a906108659033907f0000000000000000000000000000000000000000000000000000000000000000908b90600401611591565b6000604051808303816000875af1158015610884573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108ca91908101906115d3565b925084156109c9576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d906084015b600060405180830381600087803b1580156109b057600080fd5b505af11580156109c4573d6000803e3d6000fd5b505050505b6109d7898989858589610f78565b50509695505050505050565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015260609060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015610a73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a9791906111fd565b905061052781888888888861056a565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015260609060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015610b37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5b91906111fd565b90506105278188888888885b60606000803373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610cd0576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301528916906370a0823190602401602060405180830381865afa158015610c15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c399190611641565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152919350908816906370a0823190602401602060405180830381865afa158015610ca9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ccd9190611641565b90505b8415610dcc576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015610db357600080fd5b505af1158015610dc7573d6000803e3d6000fd5b505050505b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a90610e629033907f0000000000000000000000000000000000000000000000000000000000000000908b90600401611591565b6000604051808303816000875af1158015610e81573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610ec791908101906115d3565b925084156109c9576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301528981166044830152600160648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401610996565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614611079576040517f654a9eda00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528681166024830152858116604483015260648201859052608482018490527f0000000000000000000000000000000000000000000000000000000000000000169063654a9eda9060a401600060405180830381600087803b15801561105c57600080fd5b505af1158015611070573d6000803e3d6000fd5b505050506111d3565b8015611129576040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015286811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b15801561111057600080fd5b505af1158015611124573d6000803e3d6000fd5b505050505b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015285811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156111ba57600080fd5b505af11580156111ce573d6000803e3d6000fd5b505050505b505050505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461050057600080fd5b60006020828403121561120f57600080fd5b815161121a816111db565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561129757611297611221565b604052919050565b600067ffffffffffffffff8211156112b9576112b9611221565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f8301126112f657600080fd5b81356113096113048261129f565b611250565b81815284602083860101111561131e57600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121561134d57600080fd5b813567ffffffffffffffff81111561136457600080fd5b611370848285016112e5565b949350505050565b60005b8381101561139357818101518382015260200161137b565b838111156113a2576000848401525b50505050565b600081518084526113c0816020860160208601611378565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061121a60208301846113a8565b60006020828403121561141757600080fd5b813561121a816111db565b8035801515811461143257600080fd5b919050565b60008060008060008060c0878903121561145057600080fd5b863561145b816111db565b9550602087013561146b816111db565b9450604087013561147b816111db565b9350606087013567ffffffffffffffff81111561149757600080fd5b6114a389828a016112e5565b9350506114b260808801611422565b91506114c060a08801611422565b90509295509295509295565b600080600080600060a086880312156114e457600080fd5b85356114ef816111db565b945060208601356114ff816111db565b9350604086013567ffffffffffffffff81111561151b57600080fd5b611527888289016112e5565b93505061153660608701611422565b915061154460808701611422565b90509295509295909350565b602081016011831061158b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b600073ffffffffffffffffffffffffffffffffffffffff8086168352808516602084015250606060408301526115ca60608301846113a8565b95945050505050565b6000602082840312156115e557600080fd5b815167ffffffffffffffff8111156115fc57600080fd5b8201601f8101841361160d57600080fd5b805161161b6113048261129f565b81815285602083850101111561163057600080fd5b6115ca826020830160208601611378565b60006020828403121561165357600080fd5b505191905056fea264697066735822122018e43ffef2f9cc2414c0800d27162ab8481b522ae2a3529b201f7632a0fcba6764736f6c634300080a0033a264697066735822122022b3fbcce5dc0a1049dfb420dcb151d2441cdc723a987189afee67ae100631b864736f6c634300080a0033"; - -type AbstractAdapterTestConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: AbstractAdapterTestConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class AbstractAdapterTest__factory extends ContractFactory { - constructor(...args: AbstractAdapterTestConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): AbstractAdapterTest { - return super.attach(address) as AbstractAdapterTest; - } - override connect(signer: Signer): AbstractAdapterTest__factory { - return super.connect(signer) as AbstractAdapterTest__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): AbstractAdapterTestInterface { - return new utils.Interface(_abi) as AbstractAdapterTestInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): AbstractAdapterTest { - return new Contract(address, _abi, signerOrProvider) as AbstractAdapterTest; - } -} diff --git a/src/types/factories/contracts/test/adapters/AbstractAdapter.t.sol/index.ts b/src/types/factories/contracts/test/adapters/AbstractAdapter.t.sol/index.ts deleted file mode 100644 index c00ef370..00000000 --- a/src/types/factories/contracts/test/adapters/AbstractAdapter.t.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { AbstractAdapterTest__factory } from "./AbstractAdapterTest__factory"; diff --git a/src/types/factories/contracts/test/adapters/AdapterTestHelper__factory.ts b/src/types/factories/contracts/test/adapters/AdapterTestHelper__factory.ts deleted file mode 100644 index 1efade95..00000000 --- a/src/types/factories/contracts/test/adapters/AdapterTestHelper__factory.ts +++ /dev/null @@ -1,740 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - AdapterTestHelper, - AdapterTestHelperInterface, -} from "../../../../contracts/test/adapters/AdapterTestHelper"; - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "TokenIsNotInAllowedList", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "onBehalfOf", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "token", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "AddCollateral", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - ], - name: "CloseCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "DecreaseBorrowedAmount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "target", - type: "address", - }, - ], - name: "ExecuteOrder", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "IncreaseBorrowedAmount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "liquidator", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "remainingFunds", - type: "uint256", - }, - ], - name: "LiquidateCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "liquidator", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "remainingFunds", - type: "uint256", - }, - ], - name: "LiquidateExpiredCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [], - name: "MultiCallFinished", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - ], - name: "MultiCallStarted", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newConfigurator", - type: "address", - }, - ], - name: "NewConfigurator", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "onBehalfOf", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "borrowAmount", - type: "uint256", - }, - { - indexed: false, - internalType: "uint16", - name: "referralCode", - type: "uint16", - }, - ], - name: "OpenCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "token", - type: "address", - }, - ], - name: "TokenDisabled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "token", - type: "address", - }, - ], - name: "TokenEnabled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "oldOwner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "TransferAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "bool", - name: "state", - type: "bool", - }, - ], - name: "TransferAccountAllowed", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "", - type: "address", - }, - ], - name: "log_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "log_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - name: "log_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "int256", - name: "", - type: "int256", - }, - ], - name: "log_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "address", - name: "val", - type: "address", - }, - ], - name: "log_named_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes", - name: "val", - type: "bytes", - }, - ], - name: "log_named_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes32", - name: "val", - type: "bytes32", - }, - ], - name: "log_named_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - ], - name: "log_named_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "string", - name: "val", - type: "string", - }, - ], - name: "log_named_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - ], - name: "log_named_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "log_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "logs", - type: "event", - }, - { - inputs: [], - name: "IS_TEST", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "cft", - outputs: [ - { - internalType: "contract CreditFacadeTestSuite", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditConfigurator", - outputs: [ - { - internalType: "contract CreditConfigurator", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditFacade", - outputs: [ - { - internalType: "contract CreditFacade", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditManager", - outputs: [ - { - internalType: "contract ICreditManagerV2", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "failed", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "underlying", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x60806040526000805460ff1916600190811790915580546001600160a01b031916737109709ecfa91a80626ff3989d68f67f5b1dd12d17905534801561004457600080fd5b506103b3806100546000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063c12c21c01161005b578063c12c21c014610104578063df51443314610124578063f9aa028a14610144578063fa7626d41461016457600080fd5b80632f7a1881146100825780636f307dc3146100cc578063ba414fa6146100ec575b600080fd5b6003546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6006546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b6100f4610171565b60405190151581526020016100c3565b6002546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b6005546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b6004546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b6000546100f49060ff1681565b60008054610100900460ff16156101915750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156102cc5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610236917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc49160800161030c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261026e91610348565b6000604051808303816000865af19150503d80600081146102ab576040519150601f19603f3d011682016040523d82523d6000602084013e6102b0565b606091505b50915050808060200190518101906102c8919061035b565b9150505b919050565b6000815160005b818110156102f257602081850181015186830152016102d8565b81811115610301576000828601525b509290920192915050565b7fffffffff0000000000000000000000000000000000000000000000000000000083168152600061034060048301846102d1565b949350505050565b600061035482846102d1565b9392505050565b60006020828403121561036d57600080fd5b8151801515811461035457600080fdfea2646970667358221220a7bee5e5504488bbb192b7002d52980b1a75786cd6fb5a11561432feea575bbd64736f6c634300080a0033"; - -type AdapterTestHelperConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: AdapterTestHelperConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class AdapterTestHelper__factory extends ContractFactory { - constructor(...args: AdapterTestHelperConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): AdapterTestHelper { - return super.attach(address) as AdapterTestHelper; - } - override connect(signer: Signer): AdapterTestHelper__factory { - return super.connect(signer) as AdapterTestHelper__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): AdapterTestHelperInterface { - return new utils.Interface(_abi) as AdapterTestHelperInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): AdapterTestHelper { - return new Contract(address, _abi, signerOrProvider) as AdapterTestHelper; - } -} diff --git a/src/types/factories/contracts/test/adapters/ConvexAdapterHelper__factory.ts b/src/types/factories/contracts/test/adapters/ConvexAdapterHelper__factory.ts deleted file mode 100644 index 68135601..00000000 --- a/src/types/factories/contracts/test/adapters/ConvexAdapterHelper__factory.ts +++ /dev/null @@ -1,1190 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - ConvexAdapterHelper, - ConvexAdapterHelperInterface, -} from "../../../../contracts/test/adapters/ConvexAdapterHelper"; - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "token", - type: "address", - }, - ], - name: "TokenIsNotAddedToCreditManagerException", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "TokenIsNotInAllowedList", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "onBehalfOf", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "token", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "AddCollateral", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - ], - name: "CloseCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "DecreaseBorrowedAmount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "target", - type: "address", - }, - ], - name: "ExecuteOrder", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "IncreaseBorrowedAmount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "liquidator", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "remainingFunds", - type: "uint256", - }, - ], - name: "LiquidateCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "liquidator", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "remainingFunds", - type: "uint256", - }, - ], - name: "LiquidateExpiredCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "index", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "user", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "reward", - type: "uint256", - }, - ], - name: "Mock_BaseRewardPaid", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "index", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "user", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "Mock_BaseStaked", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "index", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "user", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "Mock_BaseWithdrawn", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "index", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "user", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "poolid", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - indexed: false, - internalType: "bool", - name: "_stake", - type: "bool", - }, - ], - name: "Mock_Deposited", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "index", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "user", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "reward", - type: "uint256", - }, - ], - name: "Mock_ExtraRewardPaid", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "index", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "user", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "Mock_ExtraStaked", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "index", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "user", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "Mock_ExtraWithdrawn", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "index", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "user", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "poolid", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "Mock_Withdrawn", - type: "event", - }, - { - anonymous: false, - inputs: [], - name: "MultiCallFinished", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - ], - name: "MultiCallStarted", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newConfigurator", - type: "address", - }, - ], - name: "NewConfigurator", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "onBehalfOf", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "borrowAmount", - type: "uint256", - }, - { - indexed: false, - internalType: "uint16", - name: "referralCode", - type: "uint16", - }, - ], - name: "OpenCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "token", - type: "address", - }, - ], - name: "TokenDisabled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "token", - type: "address", - }, - ], - name: "TokenEnabled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "oldOwner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "TransferAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "bool", - name: "state", - type: "bool", - }, - ], - name: "TransferAccountAllowed", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "", - type: "address", - }, - ], - name: "log_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "log_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - name: "log_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "int256", - name: "", - type: "int256", - }, - ], - name: "log_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "address", - name: "val", - type: "address", - }, - ], - name: "log_named_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes", - name: "val", - type: "bytes", - }, - ], - name: "log_named_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes32", - name: "val", - type: "bytes32", - }, - ], - name: "log_named_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - ], - name: "log_named_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "string", - name: "val", - type: "string", - }, - ], - name: "log_named_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - ], - name: "log_named_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "log_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "logs", - type: "event", - }, - { - inputs: [], - name: "IS_TEST", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "basePoolAdapter", - outputs: [ - { - internalType: "contract ConvexV1BaseRewardPoolAdapter", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "basePoolMock", - outputs: [ - { - internalType: "contract BaseRewardPoolMock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "boosterAdapter", - outputs: [ - { - internalType: "contract ConvexV1BoosterAdapter", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "boosterMock", - outputs: [ - { - internalType: "contract BoosterMock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "cft", - outputs: [ - { - internalType: "contract CreditFacadeTestSuite", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "claimZapAdapter", - outputs: [ - { - internalType: "contract ConvexV1ClaimZapAdapter", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "claimZapMock", - outputs: [ - { - internalType: "contract ClaimZapMock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "convexLPToken", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditConfigurator", - outputs: [ - { - internalType: "contract CreditConfigurator", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditFacade", - outputs: [ - { - internalType: "contract CreditFacade", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditManager", - outputs: [ - { - internalType: "contract ICreditManagerV2", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "crv", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "curveLPToken", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "cvx", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "extraPoolMock1", - outputs: [ - { - internalType: "contract ExtraRewardPoolMock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "extraPoolMock2", - outputs: [ - { - internalType: "contract ExtraRewardPoolMock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "extraRewardToken1", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "extraRewardToken2", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "failed", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "feed", - outputs: [ - { - internalType: "contract PriceFeedMock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "phantomToken", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "priceOracle", - outputs: [ - { - internalType: "contract IPriceOracleV2Ext", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "underlying", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x60806040526000805460ff1916600190811790915580546001600160a01b031916737109709ecfa91a80626ff3989d68f67f5b1dd12d17905534801561004457600080fd5b506106ee806100546000396000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c80637a24edf6116100e3578063c09654731161008c578063f9aa028a11610066578063f9aa028a1461045f578063fa7626d41461047f578063fc99a9731461048c57600080fd5b8063c0965473146103ff578063c12c21c01461041f578063df5144331461043f57600080fd5b8063a8577e88116100bd578063a8577e88146103a7578063aa30240e146103c7578063ba414fa6146103e757600080fd5b80637a24edf614610347578063923c1d6114610367578063a7ea33941461038757600080fd5b80634194a9f81161014557806364243fc31161011f57806364243fc3146102e75780636a4874a1146103075780636f307dc31461032757600080fd5b80634194a9f8146102875780635c91172f146102a7578063614fa6c2146102c757600080fd5b8063278e660911610176578063278e6609146102275780632f7a18811461024757806337a7b7d81461026757600080fd5b80630ae2904a1461019d578063170aa96d146101e75780632630c12f14610207575b600080fd5b6017546101bd9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6010546101bd9073ffffffffffffffffffffffffffffffffffffffff1681565b6008546101bd9073ffffffffffffffffffffffffffffffffffffffff1681565b600d546101bd9073ffffffffffffffffffffffffffffffffffffffff1681565b6003546101bd9073ffffffffffffffffffffffffffffffffffffffff1681565b6007546101bd9073ffffffffffffffffffffffffffffffffffffffff1681565b600f546101bd9073ffffffffffffffffffffffffffffffffffffffff1681565b6014546101bd9073ffffffffffffffffffffffffffffffffffffffff1681565b6015546101bd9073ffffffffffffffffffffffffffffffffffffffff1681565b6011546101bd9073ffffffffffffffffffffffffffffffffffffffff1681565b6009546101bd9073ffffffffffffffffffffffffffffffffffffffff1681565b6006546101bd9073ffffffffffffffffffffffffffffffffffffffff1681565b6012546101bd9073ffffffffffffffffffffffffffffffffffffffff1681565b600a546101bd9073ffffffffffffffffffffffffffffffffffffffff1681565b600e546101bd9073ffffffffffffffffffffffffffffffffffffffff1681565b600b546101bd9073ffffffffffffffffffffffffffffffffffffffff1681565b600c546101bd9073ffffffffffffffffffffffffffffffffffffffff1681565b6103ef6104ac565b60405190151581526020016101de565b6013546101bd9073ffffffffffffffffffffffffffffffffffffffff1681565b6002546101bd9073ffffffffffffffffffffffffffffffffffffffff1681565b6005546101bd9073ffffffffffffffffffffffffffffffffffffffff1681565b6004546101bd9073ffffffffffffffffffffffffffffffffffffffff1681565b6000546103ef9060ff1681565b6016546101bd9073ffffffffffffffffffffffffffffffffffffffff1681565b60008054610100900460ff16156104cc5750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106075760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610571917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc491608001610647565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526105a991610683565b6000604051808303816000865af19150503d80600081146105e6576040519150601f19603f3d011682016040523d82523d6000602084013e6105eb565b606091505b50915050808060200190518101906106039190610696565b9150505b919050565b6000815160005b8181101561062d5760208185018101518683015201610613565b8181111561063c576000828601525b509290920192915050565b7fffffffff0000000000000000000000000000000000000000000000000000000083168152600061067b600483018461060c565b949350505050565b600061068f828461060c565b9392505050565b6000602082840312156106a857600080fd5b8151801515811461068f57600080fdfea2646970667358221220661accf2826fc074bad337a75d75a0e99b9ea3ed13c5fc0d14f0466a8021a26264736f6c634300080a0033"; - -type ConvexAdapterHelperConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: ConvexAdapterHelperConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class ConvexAdapterHelper__factory extends ContractFactory { - constructor(...args: ConvexAdapterHelperConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): ConvexAdapterHelper { - return super.attach(address) as ConvexAdapterHelper; - } - override connect(signer: Signer): ConvexAdapterHelper__factory { - return super.connect(signer) as ConvexAdapterHelper__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): ConvexAdapterHelperInterface { - return new utils.Interface(_abi) as ConvexAdapterHelperInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): ConvexAdapterHelper { - return new Contract(address, _abi, signerOrProvider) as ConvexAdapterHelper; - } -} diff --git a/src/types/factories/contracts/test/adapters/ConvexV1_BaseRewardPool.t.sol/ConvexV1AdapterBasePoolTest__factory.ts b/src/types/factories/contracts/test/adapters/ConvexV1_BaseRewardPool.t.sol/ConvexV1AdapterBasePoolTest__factory.ts deleted file mode 100644 index a7995b35..00000000 --- a/src/types/factories/contracts/test/adapters/ConvexV1_BaseRewardPool.t.sol/ConvexV1AdapterBasePoolTest__factory.ts +++ /dev/null @@ -1,1280 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - ConvexV1AdapterBasePoolTest, - ConvexV1AdapterBasePoolTestInterface, -} from "../../../../../contracts/test/adapters/ConvexV1_BaseRewardPool.t.sol/ConvexV1AdapterBasePoolTest"; - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "token", - type: "address", - }, - ], - name: "TokenIsNotAddedToCreditManagerException", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "TokenIsNotInAllowedList", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "onBehalfOf", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "token", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "AddCollateral", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - ], - name: "CloseCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "DecreaseBorrowedAmount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "target", - type: "address", - }, - ], - name: "ExecuteOrder", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "IncreaseBorrowedAmount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "liquidator", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "remainingFunds", - type: "uint256", - }, - ], - name: "LiquidateCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "liquidator", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "remainingFunds", - type: "uint256", - }, - ], - name: "LiquidateExpiredCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "index", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "user", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "reward", - type: "uint256", - }, - ], - name: "Mock_BaseRewardPaid", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "index", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "user", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "Mock_BaseStaked", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "index", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "user", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "Mock_BaseWithdrawn", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "index", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "user", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "poolid", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - indexed: false, - internalType: "bool", - name: "_stake", - type: "bool", - }, - ], - name: "Mock_Deposited", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "index", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "user", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "reward", - type: "uint256", - }, - ], - name: "Mock_ExtraRewardPaid", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "index", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "user", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "Mock_ExtraStaked", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "index", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "user", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "Mock_ExtraWithdrawn", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "index", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "user", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "poolid", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "Mock_Withdrawn", - type: "event", - }, - { - anonymous: false, - inputs: [], - name: "MultiCallFinished", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - ], - name: "MultiCallStarted", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newConfigurator", - type: "address", - }, - ], - name: "NewConfigurator", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "onBehalfOf", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "borrowAmount", - type: "uint256", - }, - { - indexed: false, - internalType: "uint16", - name: "referralCode", - type: "uint16", - }, - ], - name: "OpenCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "token", - type: "address", - }, - ], - name: "TokenDisabled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "token", - type: "address", - }, - ], - name: "TokenEnabled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "oldOwner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "TransferAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "bool", - name: "state", - type: "bool", - }, - ], - name: "TransferAccountAllowed", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "", - type: "address", - }, - ], - name: "log_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "log_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - name: "log_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "int256", - name: "", - type: "int256", - }, - ], - name: "log_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "address", - name: "val", - type: "address", - }, - ], - name: "log_named_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes", - name: "val", - type: "bytes", - }, - ], - name: "log_named_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes32", - name: "val", - type: "bytes32", - }, - ], - name: "log_named_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - ], - name: "log_named_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "string", - name: "val", - type: "string", - }, - ], - name: "log_named_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - ], - name: "log_named_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "log_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "logs", - type: "event", - }, - { - inputs: [], - name: "IS_TEST", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "basePoolAdapter", - outputs: [ - { - internalType: "contract ConvexV1BaseRewardPoolAdapter", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "basePoolMock", - outputs: [ - { - internalType: "contract BaseRewardPoolMock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "boosterAdapter", - outputs: [ - { - internalType: "contract ConvexV1BoosterAdapter", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "boosterMock", - outputs: [ - { - internalType: "contract BoosterMock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "cft", - outputs: [ - { - internalType: "contract CreditFacadeTestSuite", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "claimZapAdapter", - outputs: [ - { - internalType: "contract ConvexV1ClaimZapAdapter", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "claimZapMock", - outputs: [ - { - internalType: "contract ClaimZapMock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "convexLPToken", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditConfigurator", - outputs: [ - { - internalType: "contract CreditConfigurator", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditFacade", - outputs: [ - { - internalType: "contract CreditFacade", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditManager", - outputs: [ - { - internalType: "contract ICreditManagerV2", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "crv", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "curveLPToken", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "cvx", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "extraPoolMock1", - outputs: [ - { - internalType: "contract ExtraRewardPoolMock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "extraPoolMock2", - outputs: [ - { - internalType: "contract ExtraRewardPoolMock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "extraRewardToken1", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "extraRewardToken2", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "failed", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "feed", - outputs: [ - { - internalType: "contract PriceFeedMock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "phantomToken", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "priceOracle", - outputs: [ - { - internalType: "contract IPriceOracleV2Ext", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "setUp", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_ACVX1_P_01_constructor_sets_correct_values", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_ACVX1_P_02_constructor_reverts_on_token_not_allowed", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_ACVX1_P_03_stake_works_correctly", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_ACVX1_P_04_stakeAll_works_correctly", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_ACVX1_P_05_stakeFor_reverts", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_ACVX1_P_06_getReward_works_correctly", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_ACVX1_P_09_withdraw_works_correctly", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_ACVX1_P_10_withdrawAll_works_correctly", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_ACVX1_P_11_withdrawAndUnwrap_works_correctly", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_ACVX1_P_12_withdrawAllAndUnwrap_works_correctly", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_ACVX1_P_13_getters_are_consistent", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "underlying", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x60806040526000805460ff1916600190811790915580546001600160a01b031916737109709ecfa91a80626ff3989d68f67f5b1dd12d1790553480156200004557600080fd5b506205697d80620000576000396000f3fe60806040523480156200001157600080fd5b50600436106200028d5760003560e01c80637a24edf6116200015f578063aa30240e11620000cc578063c12c21c01162000097578063f9aa028a116200007a578063f9aa028a14620005e5578063fa7626d41462000606578063fc99a973146200061457600080fd5b8063c12c21c014620005a3578063df51443314620005c457600080fd5b8063aa30240e146200053c578063b8b35a67146200055d578063ba414fa61462000567578063c0965473146200058257600080fd5b806387647114116200012a578063923c1d61116200010d578063923c1d6114620004d9578063a7ea339414620004fa578063a8577e88146200051b57600080fd5b80638764711414620004c55780638b5a820d14620004cf57600080fd5b80637a24edf614620004865780637fefab0914620004a757806381ee46eb14620004b15780638722ef9514620004bb57600080fd5b806337a7b7d811620001fe578063614fa6c211620001c95780636a4874a111620001ac5780636a4874a1146200043a5780636f307dc3146200045b57806376df81be146200047c57600080fd5b8063614fa6c214620003f857806364243fc3146200041957600080fd5b806337a7b7d8146200038b5780633875d2b914620003ac5780634194a9f814620003b65780635c91172f14620003d757600080fd5b80632630c12f116200025c5780632f7a1881116200023f5780632f7a188114620003565780632fe41dcf146200037757806335495fff146200038157600080fd5b80632630c12f1462000314578063278e6609146200033557600080fd5b80630a9254e414620002925780630ae2904a146200029e578063170aa96d14620002e957806324c08d4f146200030a575b600080fd5b6200029c62000635565b005b601754620002bf9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b601054620002bf9073ffffffffffffffffffffffffffffffffffffffff1681565b6200029c62000643565b600854620002bf9073ffffffffffffffffffffffffffffffffffffffff1681565b600d54620002bf9073ffffffffffffffffffffffffffffffffffffffff1681565b600354620002bf9073ffffffffffffffffffffffffffffffffffffffff1681565b6200029c62000f1e565b6200029c620012d4565b600754620002bf9073ffffffffffffffffffffffffffffffffffffffff1681565b6200029c62001c51565b600f54620002bf9073ffffffffffffffffffffffffffffffffffffffff1681565b601454620002bf9073ffffffffffffffffffffffffffffffffffffffff1681565b601554620002bf9073ffffffffffffffffffffffffffffffffffffffff1681565b601154620002bf9073ffffffffffffffffffffffffffffffffffffffff1681565b600954620002bf9073ffffffffffffffffffffffffffffffffffffffff1681565b600654620002bf9073ffffffffffffffffffffffffffffffffffffffff1681565b6200029c62001da6565b601254620002bf9073ffffffffffffffffffffffffffffffffffffffff1681565b6200029c62002501565b6200029c62002534565b6200029c62002e5f565b6200029c62003680565b6200029c620059fc565b600a54620002bf9073ffffffffffffffffffffffffffffffffffffffff1681565b600e54620002bf9073ffffffffffffffffffffffffffffffffffffffff1681565b600b54620002bf9073ffffffffffffffffffffffffffffffffffffffff1681565b600c54620002bf9073ffffffffffffffffffffffffffffffffffffffff1681565b6200029c62005d61565b62000571620065a8565b6040519015158152602001620002e0565b601354620002bf9073ffffffffffffffffffffffffffffffffffffffff1681565b600254620002bf9073ffffffffffffffffffffffffffffffffffffffff1681565b600554620002bf9073ffffffffffffffffffffffffffffffffffffffff1681565b600454620002bf9073ffffffffffffffffffffffffffffffffffffffff1681565b600054620005719060ff1681565b601654620002bf9073ffffffffffffffffffffffffffffffffffffffff1681565b62000641600262006712565b565b60005b6002811162000f1b5760005b600281101562000f05578015156200066a8362006712565b60006200067662007a2f565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015291925073ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b158015620006f757600080fd5b505af11580156200070c573d6000803e3d6000fd5b50505050601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638dcb40616040518163ffffffff1660e01b81526004016020604051808303816000875af115801562000780573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007a691906200c33b565b506011546040517f9b7ccf4c0000000000000000000000000000000000000000000000000000000081526b033b2e3c9fd0803ce8000000600482015273ffffffffffffffffffffffffffffffffffffffff90911690639b7ccf4c90602401600060405180830381600087803b1580156200081f57600080fd5b505af115801562000834573d6000803e3d6000fd5b5050505060018410620008cc5760125473ffffffffffffffffffffffffffffffffffffffff16639b7ccf4c620008786b033b2e3c9fd0803ce800000060216200c38f565b6040518263ffffffff1660e01b81526004016200089791815260200190565b600060405180830381600087803b158015620008b257600080fd5b505af1158015620008c7573d6000803e3d6000fd5b505050505b8360021415620009615760135473ffffffffffffffffffffffffffffffffffffffff16639b7ccf4c6200090d6b033b2e3c9fd0803ce800000060046200c38f565b6040518263ffffffff1660e01b81526004016200092c91815260200190565b600060405180830381600087803b1580156200094757600080fd5b505af11580156200095c573d6000803e3d6000fd5b505050505b600d54620009879073ffffffffffffffffffffffffffffffffffffffff16600162007c72565b600c54620009ad9073ffffffffffffffffffffffffffffffffffffffff16600062007c72565b600a54620009d39073ffffffffffffffffffffffffffffffffffffffff16600062007c72565b600954620009f99073ffffffffffffffffffffffffffffffffffffffff16600062007c72565b600e5462000a1f9073ffffffffffffffffffffffffffffffffffffffff16600062007c72565b600f5462000a459073ffffffffffffffffffffffffffffffffffffffff16600062007c72565b62000a8473f39fd6e51aad88f6f4ce6ab8827279cfffb9226662000a786b033b2e3c9fd0803ce80000006127106200c38f565b60016000868962007c92565b811562000b63576015546040516001602482015262000b5d9173ffffffffffffffffffffffffffffffffffffffff16907f1c1c6fe500000000000000000000000000000000000000000000000000000000906044015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262008437565b62000c83565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b15801562000be357600080fd5b505af115801562000bf8573d6000803e3d6000fd5b50506015546040517f1c1c6fe50000000000000000000000000000000000000000000000000000000081526001600482015273ffffffffffffffffffffffffffffffffffffffff9091169250631c1c6fe59150602401600060405180830381600087803b15801562000c6957600080fd5b505af115801562000c7e573d6000803e3d6000fd5b505050505b60095462000cb59073ffffffffffffffffffffffffffffffffffffffff16826b033b2e3c9fd0803ce80000006200854c565b600a5462000ce79073ffffffffffffffffffffffffffffffffffffffff16826b033b2e3c9fd0803ce80000006200854c565b600e5462000d379073ffffffffffffffffffffffffffffffffffffffff1682600187101562000d185760006200854c565b62000d316b033b2e3c9fd0803ce800000060216200c38f565b6200854c565b600f5462000d809073ffffffffffffffffffffffffffffffffffffffff16826002871462000d675760006200854c565b62000d316b033b2e3c9fd0803ce800000060046200c38f565b600c5462000db99073ffffffffffffffffffffffffffffffffffffffff168262000d316b033b2e3c9fd0803ce80000006127106200c38f565b600d5462000de09073ffffffffffffffffffffffffffffffffffffffff168260006200854c565b600d5462000e069073ffffffffffffffffffffffffffffffffffffffff16600062007c72565b600c5462000e2c9073ffffffffffffffffffffffffffffffffffffffff16600162007c72565b600a5462000e529073ffffffffffffffffffffffffffffffffffffffff16600162007c72565b60095462000e789073ffffffffffffffffffffffffffffffffffffffff16600162007c72565b600e5462000ea19073ffffffffffffffffffffffffffffffffffffffff16600186101562007c72565b600f5462000ec99073ffffffffffffffffffffffffffffffffffffffff166002861462007c72565b60115462000eed9073ffffffffffffffffffffffffffffffffffffffff166200856e565b5050808062000efc906200c3cf565b91505062000652565b508062000f12816200c3cf565b91505062000646565b50565b60005b600281101562000f1b5780151562000f3862000635565b600062000f4462007a2f565b600c5460115491925062000f769173ffffffffffffffffffffffffffffffffffffffff91821691849116600062008852565b62000fc073f39fd6e51aad88f6f4ce6ab8827279cfffb92266600262000fab6b033b2e3c9fd0803ce80000006127106200c38f565b62000fb791906200c40b565b60008562008870565b81156200104757601554620010419073ffffffffffffffffffffffffffffffffffffffff167fa694fc3a000000000000000000000000000000000000000000000000000000006002620010226b033b2e3c9fd0803ce80000006127106200c38f565b6200102e91906200c40b565b60405160240162000ada91815260200190565b6200118f565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b158015620010c757600080fd5b505af1158015620010dc573d6000803e3d6000fd5b505060155473ffffffffffffffffffffffffffffffffffffffff16915063a694fc3a905060026200111c6b033b2e3c9fd0803ce80000006127106200c38f565b6200112891906200c40b565b6040518263ffffffff1660e01b81526004016200114791815260200190565b6020604051808303816000875af115801562001167573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200118d91906200c33b565b505b600c54620011fc9073ffffffffffffffffffffffffffffffffffffffff16826002620011ca6b033b2e3c9fd0803ce80000006127106200c38f565b620011d691906200c40b565b620011f06b033b2e3c9fd0803ce80000006127106200c38f565b62000d3191906200c447565b600d54620012439073ffffffffffffffffffffffffffffffffffffffff16826002620012376b033b2e3c9fd0803ce80000006127106200c38f565b62000d3191906200c40b565b600c54601154620012729173ffffffffffffffffffffffffffffffffffffffff90811691849116600162008852565b600d54620012989073ffffffffffffffffffffffffffffffffffffffff16600162007c72565b601154620012bc9073ffffffffffffffffffffffffffffffffffffffff166200856e565b50508080620012cb906200c3cf565b91505062000f21565b60005b6002811162000f1b5760005b600281101562001c3b57801515620012fb8362006712565b60006200130762007a2f565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015291925073ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b1580156200138857600080fd5b505af11580156200139d573d6000803e3d6000fd5b50505050601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638dcb40616040518163ffffffff1660e01b81526004016020604051808303816000875af115801562001411573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200143791906200c33b565b506011546040517f9b7ccf4c0000000000000000000000000000000000000000000000000000000081526b033b2e3c9fd0803ce8000000600482015273ffffffffffffffffffffffffffffffffffffffff90911690639b7ccf4c90602401600060405180830381600087803b158015620014b057600080fd5b505af1158015620014c5573d6000803e3d6000fd5b50505050600184106200155d5760125473ffffffffffffffffffffffffffffffffffffffff16639b7ccf4c620015096b033b2e3c9fd0803ce800000060216200c38f565b6040518263ffffffff1660e01b81526004016200152891815260200190565b600060405180830381600087803b1580156200154357600080fd5b505af115801562001558573d6000803e3d6000fd5b505050505b8360021415620015f25760135473ffffffffffffffffffffffffffffffffffffffff16639b7ccf4c6200159e6b033b2e3c9fd0803ce800000060046200c38f565b6040518263ffffffff1660e01b8152600401620015bd91815260200190565b600060405180830381600087803b158015620015d857600080fd5b505af1158015620015ed573d6000803e3d6000fd5b505050505b600b5460408051808201909152600d81527f696e697469616c2073657475700000000000000000000000000000000000000060208201526200164e9173ffffffffffffffffffffffffffffffffffffffff1690600090620089ce565b600a5460408051808201909152600d81527f696e697469616c207365747570000000000000000000000000000000000000006020820152620016aa9173ffffffffffffffffffffffffffffffffffffffff1690600090620089ce565b60095460408051808201909152600d81527f696e697469616c207365747570000000000000000000000000000000000000006020820152620017069173ffffffffffffffffffffffffffffffffffffffff1690600090620089ce565b600e5460408051808201909152600d81527f696e697469616c207365747570000000000000000000000000000000000000006020820152620017629173ffffffffffffffffffffffffffffffffffffffff1690600090620089ce565b600f5460408051808201909152600d81527f696e697469616c207365747570000000000000000000000000000000000000006020820152620017be9173ffffffffffffffffffffffffffffffffffffffff1690600090620089ce565b6200180b73f39fd6e51aad88f6f4ce6ab8827279cfffb922666002620017f36b033b2e3c9fd0803ce80000006127106200c38f565b620017ff91906200c40b565b60006001868962007c92565b81156200189a57601554620018949073ffffffffffffffffffffffffffffffffffffffff167fc32e72020000000000000000000000000000000000000000000000000000000060026200186d6b033b2e3c9fd0803ce80000006127106200c38f565b6200187991906200c40b565b60405160248101919091526001604482015260640162000ada565b62001a01565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b1580156200191a57600080fd5b505af11580156200192f573d6000803e3d6000fd5b505060155473ffffffffffffffffffffffffffffffffffffffff16915063c32e7202905060026200196f6b033b2e3c9fd0803ce80000006127106200c38f565b6200197b91906200c40b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526004810191909152600160248201526044016020604051808303816000875af1158015620019d9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620019ff91906200c33b565b505b60095462001a339073ffffffffffffffffffffffffffffffffffffffff16826b033b2e3c9fd0803ce80000006200854c565b600a5462001a659073ffffffffffffffffffffffffffffffffffffffff16826b033b2e3c9fd0803ce80000006200854c565b600e5462001a969073ffffffffffffffffffffffffffffffffffffffff1682600187101562000d185760006200854c565b600f5462001ac69073ffffffffffffffffffffffffffffffffffffffff16826002871462000d675760006200854c565b600b5462001b019073ffffffffffffffffffffffffffffffffffffffff16826002620012376b033b2e3c9fd0803ce80000006127106200c38f565b600d5462001b3c9073ffffffffffffffffffffffffffffffffffffffff16826002620011ca6b033b2e3c9fd0803ce80000006127106200c38f565b600b5462001b629073ffffffffffffffffffffffffffffffffffffffff16600162007c72565b600a5462001b889073ffffffffffffffffffffffffffffffffffffffff16600162007c72565b60095462001bae9073ffffffffffffffffffffffffffffffffffffffff16600162007c72565b600e5462001bd79073ffffffffffffffffffffffffffffffffffffffff16600186101562007c72565b600f5462001bff9073ffffffffffffffffffffffffffffffffffffffff166002861462007c72565b60115462001c239073ffffffffffffffffffffffffffffffffffffffff166200856e565b5050808062001c32906200c3cf565b915050620012e3565b508062001c48816200c3cf565b915050620012d7565b6001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f24e46f7000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063c31eb0e090602401600060405180830381600087803b15801562001cdd57600080fd5b505af115801562001cf2573d6000803e3d6000fd5b50506015546040517f2ee4090800000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660048201526000602482015273ffffffffffffffffffffffffffffffffffffffff9091169250632ee409089150604401602060405180830381865afa15801562001d80573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000f1b91906200c33b565b60005b6002811162000f1b5762001dbd8162006712565b601554604080517f6a4874a1000000000000000000000000000000000000000000000000000000008152905162001eac9273ffffffffffffffffffffffffffffffffffffffff1691636a4874a19160048083019260209291908290030181865afa15801562001e30573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001e5691906200c484565b60095460408051808201909152601381527f496e636f72726563742043525620746f6b656e00000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff9091169062008d44565b601554604080517f923c1d61000000000000000000000000000000000000000000000000000000008152905162001f9b9273ffffffffffffffffffffffffffffffffffffffff169163923c1d619160048083019260209291908290030181865afa15801562001f1f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001f4591906200c484565b600a5460408051808201909152601681527f496e636f7272656374206d696e74657220284356582900000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff9091169062008d44565b601554604080517f99253ac000000000000000000000000000000000000000000000000000000000815290516200208a9273ffffffffffffffffffffffffffffffffffffffff16916399253ac09160048083019260209291908290030181865afa1580156200200e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200203491906200c484565b600c5460408051808201909152601381527f496e636f727265637420436f6e766578204c5000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff9091169062008d44565b601554604080517f927188d90000000000000000000000000000000000000000000000000000000081529051620021799273ffffffffffffffffffffffffffffffffffffffff169163927188d99160048083019260209291908290030181865afa158015620020fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200212391906200c484565b600b5460408051808201909152601281527f496e636f7272656374204375727665204c500000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff9091169062008d44565b600181106200227757601554604080517fda5b383f0000000000000000000000000000000000000000000000000000000081529051620022719273ffffffffffffffffffffffffffffffffffffffff169163da5b383f9160048083019260209291908290030181865afa158015620021f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200221b91906200c484565b600e5460408051808201909152601881527f496e636f72726563742072657761726420746f6b656e20310000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff9091169062008d44565b62002332565b601554604080517fda5b383f0000000000000000000000000000000000000000000000000000000081529051620023329273ffffffffffffffffffffffffffffffffffffffff169163da5b383f9160048083019260209291908290030181865afa158015620022ea573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200231091906200c484565b60006040518060600160405280602e81526020016205675b602e913962008d44565b80600214156200243157601554604080517f97c3413b00000000000000000000000000000000000000000000000000000000815290516200242b9273ffffffffffffffffffffffffffffffffffffffff16916397c3413b9160048083019260209291908290030181865afa158015620023af573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620023d591906200c484565b600f5460408051808201909152601881527f496e636f72726563742072657761726420746f6b656e20320000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff9091169062008d44565b620024ec565b601554604080517f97c3413b0000000000000000000000000000000000000000000000000000000081529051620024ec9273ffffffffffffffffffffffffffffffffffffffff16916397c3413b9160048083019260209291908290030181865afa158015620024a4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620024ca91906200c484565b60006040518060600160405280602e815260200162056843602e913962008d44565b80620024f8816200c3cf565b91505062001da9565b60005b60058160ff16101562000f1b576200251f8160ff1662008dbd565b806200252b816200c4a4565b91505062002504565b60005b600281101562000f1b5780151560005b600281101562002e475780151560005b6002811162002e2f5760005b600281101562002e19578015156200257b8362006712565b60006200258762007a2f565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015291925073ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b1580156200260857600080fd5b505af11580156200261d573d6000803e3d6000fd5b50505050601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638dcb40616040518163ffffffff1660e01b81526004016020604051808303816000875af115801562002691573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620026b791906200c33b565b506011546040517f9b7ccf4c0000000000000000000000000000000000000000000000000000000081526b033b2e3c9fd0803ce8000000600482015273ffffffffffffffffffffffffffffffffffffffff90911690639b7ccf4c90602401600060405180830381600087803b1580156200273057600080fd5b505af115801562002745573d6000803e3d6000fd5b5050505086156200275557600194505b8415620028855760018410620027f05760125473ffffffffffffffffffffffffffffffffffffffff16639b7ccf4c6200279c6b033b2e3c9fd0803ce800000060216200c38f565b6040518263ffffffff1660e01b8152600401620027bb91815260200190565b600060405180830381600087803b158015620027d657600080fd5b505af1158015620027eb573d6000803e3d6000fd5b505050505b8360021415620028855760135473ffffffffffffffffffffffffffffffffffffffff16639b7ccf4c620028316b033b2e3c9fd0803ce800000060046200c38f565b6040518263ffffffff1660e01b81526004016200285091815260200190565b600060405180830381600087803b1580156200286b57600080fd5b505af115801562002880573d6000803e3d6000fd5b505050505b600a54620028ab9073ffffffffffffffffffffffffffffffffffffffff16600062007c72565b600954620028d19073ffffffffffffffffffffffffffffffffffffffff16600062007c72565b600e54620028f79073ffffffffffffffffffffffffffffffffffffffff16600062007c72565b600f546200291d9073ffffffffffffffffffffffffffffffffffffffff16600062007c72565b6200294073f39fd6e51aad88f6f4ce6ab8827279cfffb922668689858862009699565b811562002a745760155462002a6e9073ffffffffffffffffffffffffffffffffffffffff168862002a115760405173ffffffffffffffffffffffffffffffffffffffff841660248201528715156044820152606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f7050ccd90000000000000000000000000000000000000000000000000000000017905262008437565b6040805160048152602481019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f3d18b9120000000000000000000000000000000000000000000000000000000017905262008437565b62002c54565b861562002bb1576001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b15801562002afb57600080fd5b505af115801562002b10573d6000803e3d6000fd5b50505050601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633d18b9126040518163ffffffff1660e01b81526004016020604051808303816000875af115801562002b84573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002baa91906200c33b565b5062002c54565b6015546040517f7050ccd900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152871515602483015290911690637050ccd9906044016020604051808303816000875af115801562002c2c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002c5291906200c33b565b505b60095462002c869073ffffffffffffffffffffffffffffffffffffffff16826b033b2e3c9fd0803ce80000006200854c565b600a5462002cb89073ffffffffffffffffffffffffffffffffffffffff16826b033b2e3c9fd0803ce80000006200854c565b600e5462002cf39073ffffffffffffffffffffffffffffffffffffffff168287801562002ce6575060018710155b62000d185760006200854c565b600f5462002d2d9073ffffffffffffffffffffffffffffffffffffffff168287801562002d205750866002145b62000d675760006200854c565b600a5462002d539073ffffffffffffffffffffffffffffffffffffffff16600162007c72565b60095462002d799073ffffffffffffffffffffffffffffffffffffffff16600162007c72565b600e5462002dac9073ffffffffffffffffffffffffffffffffffffffff1686801562002da6575060018610155b62007c72565b600f5462002ddd9073ffffffffffffffffffffffffffffffffffffffff1686801562002da657508560021462007c72565b60115462002e019073ffffffffffffffffffffffffffffffffffffffff166200856e565b5050808062002e10906200c3cf565b91505062002563565b508062002e26816200c3cf565b91505062002557565b5050808062002e3e906200c3cf565b91505062002547565b5050808062002e56906200c3cf565b91505062002537565b60005b6002811162000f1b5760005b60028110156200366a5780151562002e868362006712565b600062002e9262007a2f565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015291925073ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b15801562002f1357600080fd5b505af115801562002f28573d6000803e3d6000fd5b50505050601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638dcb40616040518163ffffffff1660e01b81526004016020604051808303816000875af115801562002f9c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002fc291906200c33b565b506011546040517f9b7ccf4c0000000000000000000000000000000000000000000000000000000081526b033b2e3c9fd0803ce8000000600482015273ffffffffffffffffffffffffffffffffffffffff90911690639b7ccf4c90602401600060405180830381600087803b1580156200303b57600080fd5b505af115801562003050573d6000803e3d6000fd5b5050505060018410620030e85760125473ffffffffffffffffffffffffffffffffffffffff16639b7ccf4c620030946b033b2e3c9fd0803ce800000060216200c38f565b6040518263ffffffff1660e01b8152600401620030b391815260200190565b600060405180830381600087803b158015620030ce57600080fd5b505af1158015620030e3573d6000803e3d6000fd5b505050505b83600214156200317d5760135473ffffffffffffffffffffffffffffffffffffffff16639b7ccf4c620031296b033b2e3c9fd0803ce800000060046200c38f565b6040518263ffffffff1660e01b81526004016200314891815260200190565b600060405180830381600087803b1580156200316357600080fd5b505af115801562003178573d6000803e3d6000fd5b505050505b600d54620031a39073ffffffffffffffffffffffffffffffffffffffff16600162007c72565b600b54620031c99073ffffffffffffffffffffffffffffffffffffffff16600062007c72565b600a54620031ef9073ffffffffffffffffffffffffffffffffffffffff16600062007c72565b600954620032159073ffffffffffffffffffffffffffffffffffffffff16600062007c72565b600e546200323b9073ffffffffffffffffffffffffffffffffffffffff16600062007c72565b600f54620032619073ffffffffffffffffffffffffffffffffffffffff16600062007c72565b6200329f73f39fd6e51aad88f6f4ce6ab8827279cfffb92266620032946b033b2e3c9fd0803ce80000006127106200c38f565b600180868962007c92565b8115620033005760155460405160016024820152620032fa9173ffffffffffffffffffffffffffffffffffffffff16907f49f039a2000000000000000000000000000000000000000000000000000000009060440162000ada565b62003420565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b1580156200338057600080fd5b505af115801562003395573d6000803e3d6000fd5b50506015546040517f49f039a20000000000000000000000000000000000000000000000000000000081526001600482015273ffffffffffffffffffffffffffffffffffffffff90911692506349f039a29150602401600060405180830381600087803b1580156200340657600080fd5b505af11580156200341b573d6000803e3d6000fd5b505050505b600954620034529073ffffffffffffffffffffffffffffffffffffffff16826b033b2e3c9fd0803ce80000006200854c565b600a54620034849073ffffffffffffffffffffffffffffffffffffffff16826b033b2e3c9fd0803ce80000006200854c565b600e54620034b59073ffffffffffffffffffffffffffffffffffffffff1682600187101562000d185760006200854c565b600f54620034e59073ffffffffffffffffffffffffffffffffffffffff16826002871462000d675760006200854c565b600b546200351e9073ffffffffffffffffffffffffffffffffffffffff168262000d316b033b2e3c9fd0803ce80000006127106200c38f565b600d54620035459073ffffffffffffffffffffffffffffffffffffffff168260006200854c565b600d546200356b9073ffffffffffffffffffffffffffffffffffffffff16600062007c72565b600b54620035919073ffffffffffffffffffffffffffffffffffffffff16600162007c72565b600a54620035b79073ffffffffffffffffffffffffffffffffffffffff16600162007c72565b600954620035dd9073ffffffffffffffffffffffffffffffffffffffff16600162007c72565b600e54620036069073ffffffffffffffffffffffffffffffffffffffff16600186101562007c72565b600f546200362e9073ffffffffffffffffffffffffffffffffffffffff166002861462007c72565b601154620036529073ffffffffffffffffffffffffffffffffffffffff166200856e565b5050808062003661906200c3cf565b91505062002e6e565b508062003677816200c3cf565b91505062002e62565b60006200368c62007a2f565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015291925073ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b1580156200370d57600080fd5b505af115801562003722573d6000803e3d6000fd5b50505050601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638dcb40616040518163ffffffff1660e01b81526004016020604051808303816000875af115801562003796573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620037bc91906200c33b565b506011546040517f9b7ccf4c0000000000000000000000000000000000000000000000000000000081526b033b2e3c9fd0803ce8000000600482015273ffffffffffffffffffffffffffffffffffffffff90911690639b7ccf4c90602401600060405180830381600087803b1580156200383557600080fd5b505af11580156200384a573d6000803e3d6000fd5b50506011546040517e8cc26200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152620039b994509091169150628cc26290602401602060405180830381865afa158015620038c2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620038e891906200c4c7565b6015546040517e8cc26200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015290911690628cc26290602401602060405180830381865afa15801562003957573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200397d91906200c4c7565b6040518060400160405280601a81526020017f6561726e65642829206973206e6f7420636f6e73697374656e740000000000008152506200a048565b601154604080517f80faa57d000000000000000000000000000000000000000000000000000000008152905162003b069273ffffffffffffffffffffffffffffffffffffffff16916380faa57d9160048083019260209291908290030181865afa15801562003a2c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003a5291906200c4c7565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166380faa57d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562003ac0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003ae691906200c4c7565b6040518060600160405280602c815260200162056871602c91396200a048565b601154604080517fcd3daf9d000000000000000000000000000000000000000000000000000000008152905162003c539273ffffffffffffffffffffffffffffffffffffffff169163cd3daf9d9160048083019260209291908290030181865afa15801562003b79573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003b9f91906200c4c7565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cd3daf9d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562003c0d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003c3391906200c4c7565b60405180606001604052806022815260200162056717602291396200a048565b601154604080517f18160ddd000000000000000000000000000000000000000000000000000000008152905162003dbc9273ffffffffffffffffffffffffffffffffffffffff16916318160ddd9160048083019260209291908290030181865afa15801562003cc6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003cec91906200c4c7565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562003d5a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003d8091906200c4c7565b6040518060400160405280601f81526020017f746f74616c537570706c792829206973206e6f7420636f6e73697374656e74008152506200a048565b6011546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015262003f299216906370a0823190602401602060405180830381865afa15801562003e30573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003e5691906200c4c7565b6015546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152909116906370a0823190602401602060405180830381865afa15801562003ec7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003eed91906200c4c7565b6040518060400160405280601d81526020017f62616c616e63654f662829206973206e6f7420636f6e73697374656e740000008152506200a048565b601154604080517fd55a23f40000000000000000000000000000000000000000000000000000000081529051620040769273ffffffffffffffffffffffffffffffffffffffff169163d55a23f49160048083019260209291908290030181865afa15801562003f9c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003fc291906200c4c7565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d55a23f46040518163ffffffff1660e01b8152600401602060405180830381865afa15801562004030573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200405691906200c4c7565b604051806060016040528060268152602001620567d2602691396200a048565b601154604080517ff7c618c10000000000000000000000000000000000000000000000000000000081529051620041df9273ffffffffffffffffffffffffffffffffffffffff169163f7c618c19160048083019260209291908290030181865afa158015620040e9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200410f91906200c484565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200417d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620041a391906200c484565b6040518060400160405280601f81526020017f726577617264546f6b656e2829206973206e6f7420636f6e73697374656e740081525062008d44565b601154604080517f72f702f30000000000000000000000000000000000000000000000000000000081529051620043489273ffffffffffffffffffffffffffffffffffffffff16916372f702f39160048083019260209291908290030181865afa15801562004252573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200427891906200c484565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166372f702f36040518163ffffffff1660e01b8152600401602060405180830381865afa158015620042e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200430c91906200c484565b6040518060400160405280602081526020017f7374616b696e67546f6b656e2829206973206e6f7420636f6e73697374656e7481525062008d44565b601154604080517f0fb5a6b40000000000000000000000000000000000000000000000000000000081529051620044b19273ffffffffffffffffffffffffffffffffffffffff1691630fb5a6b49160048083019260209291908290030181865afa158015620043bb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620043e191906200c4c7565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630fb5a6b46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200444f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200447591906200c4c7565b6040518060400160405280601c81526020017f6475726174696f6e2829206973206e6f7420636f6e73697374656e74000000008152506200a048565b601154604080517f570ca73500000000000000000000000000000000000000000000000000000000815290516200461a9273ffffffffffffffffffffffffffffffffffffffff169163570ca7359160048083019260209291908290030181865afa15801562004524573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200454a91906200c484565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663570ca7356040518163ffffffff1660e01b8152600401602060405180830381865afa158015620045b8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620045de91906200c484565b6040518060400160405280601c81526020017f6f70657261746f722829206973206e6f7420636f6e73697374656e740000000081525062008d44565b601154604080517f0f4ef8a60000000000000000000000000000000000000000000000000000000081529051620047679273ffffffffffffffffffffffffffffffffffffffff1691630f4ef8a69160048083019260209291908290030181865afa1580156200468d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620046b391906200c484565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630f4ef8a66040518163ffffffff1660e01b8152600401602060405180830381865afa15801562004721573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200474791906200c484565b604051806060016040528060218152602001620569276021913962008d44565b601154604080517ff10684540000000000000000000000000000000000000000000000000000000081529051620048d09273ffffffffffffffffffffffffffffffffffffffff169163f10684549160048083019260209291908290030181865afa158015620047da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200480091906200c4c7565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f10684546040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200486e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200489491906200c4c7565b6040518060400160405280601781526020017f7069642829206973206e6f7420636f6e73697374656e740000000000000000008152506200a048565b601154604080517febe2b12b000000000000000000000000000000000000000000000000000000008152905162004a399273ffffffffffffffffffffffffffffffffffffffff169163ebe2b12b9160048083019260209291908290030181865afa15801562004943573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200496991906200c4c7565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ebe2b12b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620049d7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620049fd91906200c4c7565b6040518060400160405280602081526020017f706572696f6446696e6973682829206973206e6f7420636f6e73697374656e748152506200a048565b601154604080517f7b0a47ee000000000000000000000000000000000000000000000000000000008152905162004ba29273ffffffffffffffffffffffffffffffffffffffff1691637b0a47ee9160048083019260209291908290030181865afa15801562004aac573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004ad291906200c4c7565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637b0a47ee6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562004b40573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004b6691906200c4c7565b6040518060400160405280601e81526020017f726577617264526174652829206973206e6f7420636f6e73697374656e7400008152506200a048565b601154604080517fc8f33c91000000000000000000000000000000000000000000000000000000008152905162004cef9273ffffffffffffffffffffffffffffffffffffffff169163c8f33c919160048083019260209291908290030181865afa15801562004c15573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004c3b91906200c4c7565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c8f33c916040518163ffffffff1660e01b8152600401602060405180830381865afa15801562004ca9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004ccf91906200c4c7565b6040518060600160405280602281526020016205689d602291396200a048565b601154604080517fdf136d65000000000000000000000000000000000000000000000000000000008152905162004e3c9273ffffffffffffffffffffffffffffffffffffffff169163df136d659160048083019260209291908290030181865afa15801562004d62573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004d8891906200c4c7565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663df136d656040518163ffffffff1660e01b8152600401602060405180830381865afa15801562004df6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004e1c91906200c4c7565b60405180606001604052806028815260200162056789602891396200a048565b601154604080517f63d38c3b000000000000000000000000000000000000000000000000000000008152905162004f899273ffffffffffffffffffffffffffffffffffffffff16916363d38c3b9160048083019260209291908290030181865afa15801562004eaf573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004ed591906200c4c7565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166363d38c3b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562004f43573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004f6991906200c4c7565b604051806060016040528060218152602001620567b1602191396200a048565b601154604080517f901a7d530000000000000000000000000000000000000000000000000000000081529051620050d69273ffffffffffffffffffffffffffffffffffffffff169163901a7d539160048083019260209291908290030181865afa15801562004ffc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200502291906200c4c7565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663901a7d536040518163ffffffff1660e01b8152600401602060405180830381865afa15801562005090573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620050b691906200c4c7565b604051806060016040528060228152602001620568e0602291396200a048565b601154604080517f262d3d6d0000000000000000000000000000000000000000000000000000000081529051620052239273ffffffffffffffffffffffffffffffffffffffff169163262d3d6d9160048083019260209291908290030181865afa15801562005149573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200516f91906200c4c7565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663262d3d6d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620051dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200520391906200c4c7565b60405180606001604052806025815260200162056902602591396200a048565b601154604080517f6c8bcee80000000000000000000000000000000000000000000000000000000081529051620053709273ffffffffffffffffffffffffffffffffffffffff1691636c8bcee89160048083019260209291908290030181865afa15801562005296573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620052bc91906200c4c7565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636c8bcee86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200532a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200535091906200c4c7565b60405180606001604052806022815260200162056739602291396200a048565b6011546040517f0700037d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152620054dd921690630700037d90602401602060405180830381865afa158015620053e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200540a91906200c4c7565b6015546040517f0700037d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015290911690630700037d90602401602060405180830381865afa1580156200547b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620054a191906200c4c7565b6040518060400160405280601b81526020017f726577617264732829206973206e6f7420636f6e73697374656e7400000000008152506200a048565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b1580156200555d57600080fd5b505af115801562005572573d6000803e3d6000fd5b50505050601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633d18b9126040518163ffffffff1660e01b81526004016020604051808303816000875af1158015620055e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200560c91906200c33b565b506011546040517f8b87634700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526200575e921690638b87634790602401602060405180830381865afa15801562005681573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620056a791906200c4c7565b6015546040517f8b87634700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015290911690638b87634790602401602060405180830381865afa15801562005718573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200573e91906200c4c7565b6040518060600160405280602a8152602001620567f8602a91396200a048565b6011546040517f40c3544600000000000000000000000000000000000000000000000000000000815260006004820152620058ad9173ffffffffffffffffffffffffffffffffffffffff16906340c3544690602401602060405180830381865afa158015620057d1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620057f791906200c484565b6015546040517f40c354460000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff909116906340c3544690602401602060405180830381865afa15801562005867573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200588d91906200c484565b604051806060016040528060218152602001620568bf6021913962008d44565b6011546040517f40c354460000000000000000000000000000000000000000000000000000000081526001600482015262000f1b9173ffffffffffffffffffffffffffffffffffffffff16906340c3544690602401602060405180830381865afa15801562005920573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200594691906200c484565b6015546040517f40c354460000000000000000000000000000000000000000000000000000000081526001600482015273ffffffffffffffffffffffffffffffffffffffff909116906340c3544690602401602060405180830381865afa158015620059b6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620059dc91906200c484565b604051806060016040528060218152602001620568226021913962008d44565b60005b600281101562000f1b5780151562005a1662000635565b600062005a2262007a2f565b600c5460115491925062005a549173ffffffffffffffffffffffffffffffffffffffff91821691849116600062008852565b62005a9073f39fd6e51aad88f6f4ce6ab8827279cfffb9226662005a876b033b2e3c9fd0803ce80000006127106200c38f565b60018562008870565b811562005b19576015546040805160048152602481019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8dcb40610000000000000000000000000000000000000000000000000000000017905262005b139173ffffffffffffffffffffffffffffffffffffffff169062008437565b62005c4a565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b15801562005b9957600080fd5b505af115801562005bae573d6000803e3d6000fd5b50505050601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638dcb40616040518163ffffffff1660e01b81526004016020604051808303816000875af115801562005c22573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005c4891906200c33b565b505b600c5462005c719073ffffffffffffffffffffffffffffffffffffffff168260006200854c565b600d5462005caa9073ffffffffffffffffffffffffffffffffffffffff168262000d316b033b2e3c9fd0803ce80000006127106200c38f565b600c5460115462005cd99173ffffffffffffffffffffffffffffffffffffffff90811691849116600162008852565b600c5462005cff9073ffffffffffffffffffffffffffffffffffffffff16600062007c72565b600d5462005d259073ffffffffffffffffffffffffffffffffffffffff16600162007c72565b60115462005d499073ffffffffffffffffffffffffffffffffffffffff166200856e565b5050808062005d58906200c3cf565b915050620059ff565b60005b6002811162000f1b5760005b6002811015620065925780151562005d888362006712565b600062005d9462007a2f565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015291925073ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b15801562005e1557600080fd5b505af115801562005e2a573d6000803e3d6000fd5b50505050601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638dcb40616040518163ffffffff1660e01b81526004016020604051808303816000875af115801562005e9e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005ec491906200c33b565b506011546040517f9b7ccf4c0000000000000000000000000000000000000000000000000000000081526b033b2e3c9fd0803ce8000000600482015273ffffffffffffffffffffffffffffffffffffffff90911690639b7ccf4c90602401600060405180830381600087803b15801562005f3d57600080fd5b505af115801562005f52573d6000803e3d6000fd5b505050506001841062005fea5760125473ffffffffffffffffffffffffffffffffffffffff16639b7ccf4c62005f966b033b2e3c9fd0803ce800000060216200c38f565b6040518263ffffffff1660e01b815260040162005fb591815260200190565b600060405180830381600087803b15801562005fd057600080fd5b505af115801562005fe5573d6000803e3d6000fd5b505050505b83600214156200607f5760135473ffffffffffffffffffffffffffffffffffffffff16639b7ccf4c6200602b6b033b2e3c9fd0803ce800000060046200c38f565b6040518263ffffffff1660e01b81526004016200604a91815260200190565b600060405180830381600087803b1580156200606557600080fd5b505af11580156200607a573d6000803e3d6000fd5b505050505b600c54620060a59073ffffffffffffffffffffffffffffffffffffffff16600062007c72565b600a54620060cb9073ffffffffffffffffffffffffffffffffffffffff16600062007c72565b600954620060f19073ffffffffffffffffffffffffffffffffffffffff16600062007c72565b600e54620061179073ffffffffffffffffffffffffffffffffffffffff16600062007c72565b600f546200613d9073ffffffffffffffffffffffffffffffffffffffff16600062007c72565b6200618973f39fd6e51aad88f6f4ce6ab8827279cfffb922666002620061726b033b2e3c9fd0803ce80000006127106200c38f565b6200617e91906200c40b565b600080868962007c92565b8115620061f157601554620061eb9073ffffffffffffffffffffffffffffffffffffffff167f38d074360000000000000000000000000000000000000000000000000000000060026200186d6b033b2e3c9fd0803ce80000006127106200c38f565b62006358565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b1580156200627157600080fd5b505af115801562006286573d6000803e3d6000fd5b505060155473ffffffffffffffffffffffffffffffffffffffff1691506338d0743690506002620062c66b033b2e3c9fd0803ce80000006127106200c38f565b620062d291906200c40b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526004810191909152600160248201526044016020604051808303816000875af115801562006330573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200635691906200c33b565b505b6009546200638a9073ffffffffffffffffffffffffffffffffffffffff16826b033b2e3c9fd0803ce80000006200854c565b600a54620063bc9073ffffffffffffffffffffffffffffffffffffffff16826b033b2e3c9fd0803ce80000006200854c565b600e54620063ed9073ffffffffffffffffffffffffffffffffffffffff1682600187101562000d185760006200854c565b600f546200641d9073ffffffffffffffffffffffffffffffffffffffff16826002871462000d675760006200854c565b600c54620064589073ffffffffffffffffffffffffffffffffffffffff16826002620012376b033b2e3c9fd0803ce80000006127106200c38f565b600d54620064939073ffffffffffffffffffffffffffffffffffffffff16826002620011ca6b033b2e3c9fd0803ce80000006127106200c38f565b600c54620064b99073ffffffffffffffffffffffffffffffffffffffff16600162007c72565b600a54620064df9073ffffffffffffffffffffffffffffffffffffffff16600162007c72565b600954620065059073ffffffffffffffffffffffffffffffffffffffff16600162007c72565b600e546200652e9073ffffffffffffffffffffffffffffffffffffffff16600186101562007c72565b600f54620065569073ffffffffffffffffffffffffffffffffffffffff166002861462007c72565b6011546200657a9073ffffffffffffffffffffffffffffffffffffffff166200856e565b5050808062006589906200c3cf565b91505062005d70565b50806200659f816200c3cf565b91505062005d64565b60008054610100900460ff1615620065c95750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200670d5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000008284015282518083038401815260608301909352600092909162006671917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016200c510565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052620066ab916200c55a565b6000604051808303816000865af19150503d8060008114620066ea576040519150601f19603f3d011682016040523d82523d6000602084013e620066ef565b606091505b50915050808060200190518101906200670991906200c33b565b9150505b919050565b6200671c6200a095565b6103e860086040516200672f906200c28f565b91825260ff166020820152604001604051809103906000f0801580156200675a573d6000803e3d6000fd5b50600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600554604080517f2630c12f00000000000000000000000000000000000000000000000000000000815290519190921691632630c12f9160048083019260209291908290030181865afa158015620067f8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200681e91906200c484565b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905560405160129062006874906200c29d565b6060808252600e908201527f4375727665204c5020546f6b656e000000000000000000000000000000000000608082015260a0602082018190526005908201527f4352564c5000000000000000000000000000000000000000000000000000000060c082015260ff909116604082015260e001604051809103906000f08015801562006904573d6000803e3d6000fd5b50600b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216918217905562006954906200a0a1565b601260405162006964906200c29d565b60608082526005908201527f4375727665000000000000000000000000000000000000000000000000000000608082015260a0602082018190526003908201527f435256000000000000000000000000000000000000000000000000000000000060c082015260ff909116604082015260e001604051809103906000f080158015620069f4573d6000803e3d6000fd5b50600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216918217905562006a44906200a0a1565b601260405162006a54906200c29d565b60608082526006908201527f436f6e7665780000000000000000000000000000000000000000000000000000608082015260a0602082018190526003908201527f435658000000000000000000000000000000000000000000000000000000000060c082015260ff909116604082015260e001604051809103906000f08015801562006ae4573d6000803e3d6000fd5b50600a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216918217905562006b34906200a0a1565b6001811062006c2d57601260405162006b4d906200c29d565b6060808252600e908201527f4578747261205265776172642031000000000000000000000000000000000000608082015260a0602082018190526005908201527f455854523100000000000000000000000000000000000000000000000000000060c082015260ff909116604082015260e001604051809103906000f08015801562006bdd573d6000803e3d6000fd5b50600e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216918217905562006c2d906200a0a1565b6002811062006d2657601260405162006c46906200c29d565b6060808252600e908201527f4578747261205265776172642032000000000000000000000000000000000000608082015260a0602082018190526005908201527f455854523200000000000000000000000000000000000000000000000000000060c082015260ff909116604082015260e001604051809103906000f08015801562006cd6573d6000803e3d6000fd5b50600f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216918217905562006d26906200a0a1565b600954600a5460405173ffffffffffffffffffffffffffffffffffffffff928316929091169062006d57906200c2ab565b73ffffffffffffffffffffffffffffffffffffffff928316815291166020820152604001604051809103906000f08015801562006d98573d6000803e3d6000fd5b50601080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316908117909155600b546040517fd914cd4b000000000000000000000000000000000000000000000000000000008152921660048301529063d914cd4b906024016020604051808303816000875af115801562006e37573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062006e5d91906200c33b565b506010546040517f1526fe270000000000000000000000000000000000000000000000000000000081526000600482018190529173ffffffffffffffffffffffffffffffffffffffff1690631526fe279060240160c060405180830381865afa15801562006ecf573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062006ef591906200c5a7565b6020810151600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909216918217905590915062006f4b906200a0a1565b6060810151601180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691909117905560018210620070ea57601154600e5460105460405173ffffffffffffffffffffffffffffffffffffffff93841693928316929091169062006fd5906200c2b9565b73ffffffffffffffffffffffffffffffffffffffff938416815291831660208301529091166040820152606001604051809103906000f0801580156200701f573d6000803e3d6000fd5b50601280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283169081179091556011546040517f5e43c47b000000000000000000000000000000000000000000000000000000008152600481019290925290911690635e43c47b906024016020604051808303816000875af1158015620070c2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620070e891906200c33b565b505b600282106200724057601154600f5460105460405173ffffffffffffffffffffffffffffffffffffffff9384169392831692909116906200712b906200c2b9565b73ffffffffffffffffffffffffffffffffffffffff938416815291831660208301529091166040820152606001604051809103906000f08015801562007175573d6000803e3d6000fd5b50601380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283169081179091556011546040517f5e43c47b000000000000000000000000000000000000000000000000000000008152600481019290925290911690635e43c47b906024016020604051808303816000875af115801562007218573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200723e91906200c33b565b505b600954600a5460405173ffffffffffffffffffffffffffffffffffffffff928316929091169062007271906200c2c7565b73ffffffffffffffffffffffffffffffffffffffff928316815291166020820152604001604051809103906000f080158015620072b2573d6000803e3d6000fd5b50601480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055601154600c546040519183169216906200730e906200c2d5565b73ffffffffffffffffffffffffffffffffffffffff928316815291166020820152604001604051809103906000f0801580156200734f573d6000803e3d6000fd5b50600d80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92831690811790915560025460115460405191841693169190620073af906200c2e3565b73ffffffffffffffffffffffffffffffffffffffff938416815291831660208301529091166040820152606001604051809103906000f080158015620073f9573d6000803e3d6000fd5b50601580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600d546200744a91166200a0a1565b6001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b158015620074ca57600080fd5b505af1158015620074df573d6000803e3d6000fd5b5050600480546011546015546040517f7bccacee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283169481019490945281166024840152169250637bccacee9150604401600060405180830381600087803b1580156200755f57600080fd5b505af115801562007574573d6000803e3d6000fd5b505060025460105460405173ffffffffffffffffffffffffffffffffffffffff928316945091169150620075a8906200c2f1565b73ffffffffffffffffffffffffffffffffffffffff928316815291166020820152604001604051809103906000f080158015620075e9573d6000803e3d6000fd5b50601680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283161790556001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291169063ca669fa790602401600060405180830381600087803b1580156200769557600080fd5b505af1158015620076aa573d6000803e3d6000fd5b5050600480546010546016546040517f7bccacee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283169481019490945281166024840152169250637bccacee9150604401600060405180830381600087803b1580156200772a57600080fd5b505af11580156200773f573d6000803e3d6000fd5b505060025460145460405173ffffffffffffffffffffffffffffffffffffffff92831694509116915062007773906200c2ff565b73ffffffffffffffffffffffffffffffffffffffff928316815291166020820152604001604051809103906000f080158015620077b4573d6000803e3d6000fd5b50601780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283161790556001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291169063ca669fa790602401600060405180830381600087803b1580156200786057600080fd5b505af115801562007875573d6000803e3d6000fd5b5050600480546014546017546040517f7bccacee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283169481019490945281166024840152169250637bccacee9150604401600060405180830381600087803b158015620078f557600080fd5b505af11580156200790a573d6000803e3d6000fd5b50506001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b1580156200798e57600080fd5b505af1158015620079a3573d6000803e3d6000fd5b50505050601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639b51ecd36040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562007a1257600080fd5b505af115801562007a27573d6000803e3d6000fd5b505050505050565b600062007a3b6200a2dc565b50600b5490915073ffffffffffffffffffffffffffffffffffffffff166340c10f198262007a786b033b2e3c9fd0803ce80000006127106200c38f565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af115801562007ae9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062007b0f91906200c33b565b506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b15801562007b9057600080fd5b505af115801562007ba5573d6000803e3d6000fd5b505060165473ffffffffffffffffffffffffffffffffffffffff1691506343a0d0669050600062007be56b033b2e3c9fd0803ce80000006127106200c38f565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815260048101929092526024820152600060448201526064016020604051808303816000875af115801562007c48573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062007c6e91906200c33b565b5090565b62007c8e828260405180602001604052806000815250620089ce565b5050565b6002546040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152600092169063e958b70490602401602060405180830381865afa15801562007d04573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062007d2a91906200c484565b90506060841562007e23578562007db157604080516024810189905260016044808301919091528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc32e72020000000000000000000000000000000000000000000000000000000017905262007e1b565b6040805160016024808301919091528251808303909101815260449091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f49f039a2000000000000000000000000000000000000000000000000000000001790525b905062007f0c565b8562007e9f57604080516024810189905260016044808301919091528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f38d074360000000000000000000000000000000000000000000000000000000017905262007f09565b6040805160016024808301919091528251808303909101815260449091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1c1c6fe5000000000000000000000000000000000000000000000000000000001790525b90505b831562007f9157601554601154600d5462007f8b9273ffffffffffffffffffffffffffffffffffffffff908116928116918c918691168a62007f6757600c5473ffffffffffffffffffffffffffffffffffffffff1662007f81565b600b5473ffffffffffffffffffffffffffffffffffffffff165b600160006200a6c3565b62008009565b601554601154600d54620080099273ffffffffffffffffffffffffffffffffffffffff908116928116918c918691168a62007fe557600c5473ffffffffffffffffffffffffffffffffffffffff1662007fff565b600b5473ffffffffffffffffffffffffffffffffffffffff165b600160006200adb4565b6001546002546009546040805173ffffffffffffffffffffffffffffffffffffffff878116602483015292831660448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f51e3f1600000000000000000000000000000000000000000000000000000000017905290517fbd6af4340000000000000000000000000000000000000000000000000000000081529382169363bd6af43493620080d8931691906004016200c6ac565b600060405180830381600087803b158015620080f357600080fd5b505af115801562008108573d6000803e3d6000fd5b5050600154600254600a546040805173ffffffffffffffffffffffffffffffffffffffff898116602483015292831660448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f51e3f1600000000000000000000000000000000000000000000000000000000017905290517fbd6af434000000000000000000000000000000000000000000000000000000008152938216955063bd6af4349450620081de939190921691906004016200c6ac565b600060405180830381600087803b158015620081f957600080fd5b505af11580156200820e573d6000803e3d6000fd5b50505050600183106200831f57600154600254600e546040805173ffffffffffffffffffffffffffffffffffffffff878116602483015292831660448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f51e3f1600000000000000000000000000000000000000000000000000000000017905290517fbd6af4340000000000000000000000000000000000000000000000000000000081529382169363bd6af43493620082ea931691906004016200c6ac565b600060405180830381600087803b1580156200830557600080fd5b505af11580156200831a573d6000803e3d6000fd5b505050505b82600214156200842d57600154600254600f546040805173ffffffffffffffffffffffffffffffffffffffff878116602483015292831660448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f51e3f1600000000000000000000000000000000000000000000000000000000017905290517fbd6af4340000000000000000000000000000000000000000000000000000000081529382169363bd6af43493620083f8931691906004016200c6ac565b600060405180830381600087803b1580156200841357600080fd5b505af115801562008428573d6000803e3d6000fd5b505050505b5050505050505050565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b158015620084b757600080fd5b505af1158015620084cc573d6000803e3d6000fd5b50506003546040805180820190915273ffffffffffffffffffffffffffffffffffffffff868116825260208201869052909116925063caa5c23f915062008513906200b2a2565b6040518263ffffffff1660e01b81526004016200853191906200c6e5565b600060405180830381600087803b15801562007a1257600080fd5b62008569838383604051806020016040528060008152506200b30b565b505050565b6002546040517fe958b70400000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015260009173ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015620085f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200861891906200c484565b90506000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200868a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620086b091906200c4c7565b905060005b818110156200884c576002546040517f172c48c70000000000000000000000000000000000000000000000000000000081526004810183905260009173ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa1580156200872e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200875491906200c791565b506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301528781166024830152919250620088369183169063dd62ed3e90604401602060405180830381865afa158015620087d2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620087f891906200c4c7565b60016040518060400160405280601581526020017f616c6c6f77616e636520697320746f6f206869676800000000000000000000008152506200b4c6565b508062008843816200c3cf565b915050620086b5565b50505050565b6200884c84848484604051806020016040528060008152506200b514565b600082620088e4576040805160248082018790528251808303909101815260449091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa694fc3a000000000000000000000000000000000000000000000000000000001790526200893c565b6040805160048152602481019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8dcb4061000000000000000000000000000000000000000000000000000000001790525b905081156200898957601554601154600c54600d54620089839373ffffffffffffffffffffffffffffffffffffffff908116938116928a928792918216911660016200b752565b620089c7565b601554601154600c54600d54620089c79373ffffffffffffffffffffffffffffffffffffffff908116938116928a928792918216911660016200b76e565b5050505050565b6002546040517fe958b70400000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015260009173ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa15801562008a52573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062008a7891906200c484565b6002546040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015292935060009290911690638991b2f190602401602060405180830381865afa15801562008aef573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062008b1591906200c4c7565b6002546040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529091169063f67c5bd090602401602060405180830381865afa15801562008b86573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062008bac91906200c4c7565b1615159050831515811480159062008bc45750825115155b1562008c04577f0b2e13ff20ac7b474198655583edf70dedd2c1dc980e329c4fbb2fc0748b796b8360405162008bfb91906200c7d6565b60405180910390a15b620089c7841515821515148673ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562008c5b573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262008ca391908101906200c7eb565b8362008ce5576040518060400160405280601981526020017f206e6f7420656e61626c6564206173206578706563746564200000000000000081525062008d1c565b6040518060400160405280601981526020017f20656e61626c6564206173206e6f7420657870657463746564000000000000008152505b60405160200162008d2f9291906200c8c2565b6040516020818303038152906040526200b781565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161462008569577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf35838160405162008da991906200c921565b60405180910390a16200856983836200b7cb565b600080601260405162008dd0906200c29d565b6060808252600e908201527f4375727665204c5020546f6b656e000000000000000000000000000000000000608082015260a0602082018190526005908201527f4352564c5000000000000000000000000000000000000000000000000000000060c082015260ff909116604082015260e001604051809103906000f08015801562008e60573d6000803e3d6000fd5b509050826002141562008e765780915062008e81565b62008e81816200a0a1565b6000601260405162008e93906200c29d565b60608082526005908201527f4375727665000000000000000000000000000000000000000000000000000000608082015260a0602082018190526003908201527f435256000000000000000000000000000000000000000000000000000000000060c082015260ff909116604082015260e001604051809103906000f08015801562008f23573d6000803e3d6000fd5b5090508362008f355780925062008f40565b62008f40816200a0a1565b6000601260405162008f52906200c29d565b60608082526006908201527f436f6e7665780000000000000000000000000000000000000000000000000000608082015260a0602082018190526003908201527f435658000000000000000000000000000000000000000000000000000000000060c082015260ff909116604082015260e001604051809103906000f08015801562008fe2573d6000803e3d6000fd5b509050846001141562008ff85780935062009003565b62009003816200a0a1565b6000601260405162009015906200c29d565b6060808252600e908201527f4578747261205265776172642031000000000000000000000000000000000000608082015260a0602082018190526005908201527f455854523100000000000000000000000000000000000000000000000000000060c082015260ff909116604082015260e001604051809103906000f080158015620090a5573d6000803e3d6000fd5b5090508560031415620090bb57809450620090c6565b620090c6816200a0a1565b60006012604051620090d8906200c29d565b6060808252600e908201527f4578747261205265776172642032000000000000000000000000000000000000608082015260a0602082018190526005908201527f455854523200000000000000000000000000000000000000000000000000000060c082015260ff909116604082015260e001604051809103906000f08015801562009168573d6000803e3d6000fd5b50905086600414156200917e5780955062009189565b62009189816200a0a1565b600084846040516200919b906200c2ab565b73ffffffffffffffffffffffffffffffffffffffff928316815291166020820152604001604051809103906000f080158015620091dc573d6000803e3d6000fd5b506040517fd914cd4b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529192509082169063d914cd4b906024016020604051808303816000875af115801562009250573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200927691906200c33b565b506040517f1526fe270000000000000000000000000000000000000000000000000000000081526000600482018190529073ffffffffffffffffffffffffffffffffffffffff831690631526fe279060240160c060405180830381865afa158015620092e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200930c91906200c5a7565b60208101519091506200931f816200a0a1565b60008260600151905060008187866040516200933b906200c2b9565b73ffffffffffffffffffffffffffffffffffffffff938416815291831660208301529091166040820152606001604051809103906000f08015801562009385573d6000803e3d6000fd5b506040517f5e43c47b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808316600483015291925090831690635e43c47b906024016020604051808303816000875af1158015620093f9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200941f91906200c33b565b50600082878760405162009433906200c2b9565b73ffffffffffffffffffffffffffffffffffffffff938416815291831660208301529091166040820152606001604051809103906000f0801580156200947d573d6000803e3d6000fd5b506040517f5e43c47b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808316600483015291925090841690635e43c47b906024016020604051808303816000875af1158015620094f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200951791906200c33b565b506001546040805173ffffffffffffffffffffffffffffffffffffffff8f811660248084019190915283518084039091018152604490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f898ac6d40000000000000000000000000000000000000000000000000000000017905291517ff28dceb3000000000000000000000000000000000000000000000000000000008152919092169163f28dceb391620095d891906004016200c7d6565b600060405180830381600087803b158015620095f357600080fd5b505af115801562009608573d6000803e3d6000fd5b5050600254600d5460405173ffffffffffffffffffffffffffffffffffffffff92831694508793509116906200963e906200c2e3565b73ffffffffffffffffffffffffffffffffffffffff938416815291831660208301529091166040820152606001604051809103906000f08015801562009688573d6000803e3d6000fd5b505050505050505050505050505050565b6002546040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152600092169063e958b70490602401602060405180830381865afa1580156200970b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200973191906200c484565b905082156200981757600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481019290925260006024830181905260448301819052606483015273ffffffffffffffffffffffffffffffffffffffff169063491cc7c290608401600060405180830381600087803b158015620097bc57600080fd5b505af1158015620097d1573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff891692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a25b831562009a2857600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526024810192909252600060448301819052606483015273ffffffffffffffffffffffffffffffffffffffff169063491cc7c290608401600060405180830381600087803b158015620098a057600080fd5b505af1158015620098b5573d6000803e3d6000fd5b505060115473ffffffffffffffffffffffffffffffffffffffff169150849050620098e15786620098fb565b60035473ffffffffffffffffffffffffffffffffffffffff165b73ffffffffffffffffffffffffffffffffffffffff167faed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab0360405160405180910390a36001546011546040805160048082526024820183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f3d18b9120000000000000000000000000000000000000000000000000000000017905291517fbd6af43400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9485169463bd6af43494620099ee9491169291016200c6ac565b600060405180830381600087803b15801562009a0957600080fd5b505af115801562009a1e573d6000803e3d6000fd5b5050505062009b4a565b60015460115460405173ffffffffffffffffffffffffffffffffffffffff848116602483015288151560448301529283169263bd6af434921690606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f7050ccd9000000000000000000000000000000000000000000000000000000001790525160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016815262009b159291906004016200c6ac565b600060405180830381600087803b15801562009b3057600080fd5b505af115801562009b45573d6000803e3d6000fd5b505050505b6001546002546009546040805173ffffffffffffffffffffffffffffffffffffffff868116602483015292831660448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f51e3f1600000000000000000000000000000000000000000000000000000000017905290517fbd6af4340000000000000000000000000000000000000000000000000000000081529382169363bd6af4349362009c19931691906004016200c6ac565b600060405180830381600087803b15801562009c3457600080fd5b505af115801562009c49573d6000803e3d6000fd5b5050600154600254600a546040805173ffffffffffffffffffffffffffffffffffffffff888116602483015292831660448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f51e3f1600000000000000000000000000000000000000000000000000000000017905290517fbd6af434000000000000000000000000000000000000000000000000000000008152938216955063bd6af434945062009d1f939190921691906004016200c6ac565b600060405180830381600087803b15801562009d3a57600080fd5b505af115801562009d4f573d6000803e3d6000fd5b50505050841562009f75576001821062009e6757600154600254600e546040805173ffffffffffffffffffffffffffffffffffffffff868116602483015292831660448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f51e3f1600000000000000000000000000000000000000000000000000000000017905290517fbd6af4340000000000000000000000000000000000000000000000000000000081529382169363bd6af4349362009e32931691906004016200c6ac565b600060405180830381600087803b15801562009e4d57600080fd5b505af115801562009e62573d6000803e3d6000fd5b505050505b816002141562009f7557600154600254600f546040805173ffffffffffffffffffffffffffffffffffffffff868116602483015292831660448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f51e3f1600000000000000000000000000000000000000000000000000000000017905290517fbd6af4340000000000000000000000000000000000000000000000000000000081529382169363bd6af4349362009f40931691906004016200c6ac565b600060405180830381600087803b15801562009f5b57600080fd5b505af115801562009f70573d6000803e3d6000fd5b505050505b821562007a27576001546040517f491cc7c20000000000000000000000000000000000000000000000000000000081526000600482018190526024820181905260448201819052606482015273ffffffffffffffffffffffffffffffffffffffff9091169063491cc7c290608401600060405180830381600087803b15801562009ffe57600080fd5b505af11580156200a013573d6000803e3d6000fd5b50506040517f60c8e8938c9a0c0d88a98d6f1c562ce68077e12bf3edb8047378f2f736cb45b4925060009150a1505050505050565b81831462008569577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf3583816040516200a08191906200c921565b60405180910390a16200856983836200b909565b6200064160016200ba09565b6001546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff909116906306447d5690602401600060405180830381600087803b1580156200a12157600080fd5b505af11580156200a136573d6000803e3d6000fd5b50506008546007546040517fe8a97a3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015291821660248201529116925063e8a97a3e9150604401600060405180830381600087803b1580156200a1b257600080fd5b505af11580156200a1c7573d6000803e3d6000fd5b5050600480546040517f3e7c88d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811693820193909352612454602482015291169250633e7c88d69150604401600060405180830381600087803b1580156200a24357600080fd5b505af11580156200a258573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200a2c757600080fd5b505af1158015620089c7573d6000803e3d6000fd5b6000806000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635f7c9bd06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200a34f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200a37591906200c4c7565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015291925073ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b1580156200a3f657600080fd5b505af11580156200a40b573d6000803e3d6000fd5b50506003546040517f6c8f225d0000000000000000000000000000000000000000000000000000000081526004810185905273f39fd6e51aad88f6f4ce6ab8827279cfffb92266602482015260646044820181905260009082015273ffffffffffffffffffffffffffffffffffffffff9091169250636c8f225d9150608401600060405180830381600087803b1580156200a4a557600080fd5b505af11580156200a4ba573d6000803e3d6000fd5b50506002546040517fe958b70400000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063e958b7049150602401602060405180830381865afa1580156200a541573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200a56791906200c484565b6006546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80841660048301529295509116906370a0823190602401602060405180830381865afa1580156200a5da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200a60091906200c4c7565b600154604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301526024820192909252600d60448201527f6372656469744163636f756e74000000000000000000000000000000000000006064820152929450169063c657c71890608401600060405180830381600087803b1580156200a6a557600080fd5b505af11580156200a6ba573d6000803e3d6000fd5b50505050509091565b6002546040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152600092169063e958b70490602401602060405180830381865afa1580156200a735573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200a75b91906200c484565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000918716906370a0823190602401602060405180830381865afa1580156200a7ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200a7f491906200c4c7565b600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481019290925260006024830181905260448301819052606483015291925073ffffffffffffffffffffffffffffffffffffffff9091169063491cc7c290608401600060405180830381600087803b1580156200a87b57600080fd5b505af11580156200a890573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff8b1692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a282156200aa0e576001546002546003546040805173ffffffffffffffffffffffffffffffffffffffff92831660248201528d831660448201528a831660648201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6084808301919091528251808303909101815260a490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f46fb371d0000000000000000000000000000000000000000000000000000000017905290517fbd6af4340000000000000000000000000000000000000000000000000000000081529382169363bd6af434936200a9d9931691906004016200c6ac565b600060405180830381600087803b1580156200a9f457600080fd5b505af11580156200aa09573d6000803e3d6000fd5b505050505b60015460025460035460405173ffffffffffffffffffffffffffffffffffffffff9384169363bd6af434938116927f6ce4074a00000000000000000000000000000000000000000000000000000000926200aa7492909116908f908e906024016200c96a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b90921682526200ab0792916004016200c6ac565b600060405180830381600087803b1580156200ab2257600080fd5b505af11580156200ab37573d6000803e3d6000fd5b5050600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526024810192909252600060448301819052606483015273ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b1580156200abbd57600080fd5b505af11580156200abd2573d6000803e3d6000fd5b505060035460405173ffffffffffffffffffffffffffffffffffffffff8d8116945090911691507faed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab0390600090a382156200ada85760015460025460035473ffffffffffffffffffffffffffffffffffffffff9283169263bd6af434928116917f46fb371d0000000000000000000000000000000000000000000000000000000091168d8b8a6200aca3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6200aca6565b60015b60405173ffffffffffffffffffffffffffffffffffffffff9485166024820152928416604484015292166064820152608481019190915260a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b90921682526200ad7392916004016200c6ac565b600060405180830381600087803b1580156200ad8e57600080fd5b505af11580156200ada3573d6000803e3d6000fd5b505050505b50505050505050505050565b6002546040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152600092169063e958b70490602401602060405180830381865afa1580156200ae26573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200ae4c91906200c484565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000918716906370a0823190602401602060405180830381865afa1580156200aebf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200aee591906200c4c7565b905082156200b01d576001546002546040805173ffffffffffffffffffffffffffffffffffffffff8c811660248301528d811660448301528a811660648301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6084808401919091528351808403909101815260a490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f46fb371d0000000000000000000000000000000000000000000000000000000017905291517fbd6af4340000000000000000000000000000000000000000000000000000000081529382169363bd6af434936200afe8931691906004016200c6ac565b600060405180830381600087803b1580156200b00357600080fd5b505af11580156200b018573d6000803e3d6000fd5b505050505b60015460025460405173ffffffffffffffffffffffffffffffffffffffff9283169263bd6af4349216907f6ce4074a00000000000000000000000000000000000000000000000000000000906200b07d908d908f908e906024016200c96a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b90921682526200b11092916004016200c6ac565b600060405180830381600087803b1580156200b12b57600080fd5b505af11580156200b140573d6000803e3d6000fd5b5050600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526024810192909252600060448301819052606483015273ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b1580156200b1c657600080fd5b505af11580156200b1db573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff808d1693508b1691507faed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab0390600090a382156200ada85760015460025473ffffffffffffffffffffffffffffffffffffffff9182169163bd6af43491167f46fb371d000000000000000000000000000000000000000000000000000000008b8d8b8a6200aca3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6200aca6565b604080516001808252818301909252606091816020015b6040805180820190915260008152606060208201528152602001906001900390816200b2b957905050905081816000815181106200b2fb576200b2fb6200c9ae565b6020026020010181905250919050565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600091908616906370a0823190602401602060405180830381865afa1580156200b37c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200b3a291906200c4c7565b90508281146200b4ba577f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f828673ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200b41a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200b46291908101906200c7eb565b6040516020016200b4759291906200c9dd565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526200b4b19187906200ca63565b60405180910390a15b620089c781846200b909565b8183111562008569577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf3583816040516200b50091906200c921565b60405180910390a16200856983836200bf34565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301526000919087169063dd62ed3e90604401602060405180830381865afa1580156200b58d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200b5b391906200c4c7565b90508281146200b746577f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f828773ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200b62b573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200b67391908101906200c7eb565b6040516020016200b6869291906200ca9d565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526200b6c29188906200ca63565b60405180910390a160408051818152600a818301527f207370656e6465723a2000000000000000000000000000000000000000000000606082015273ffffffffffffffffffffffffffffffffffffffff8616602082015290517f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f9181900360800190a15b62007a2781846200b909565b6200b7658787878787878760016200a6c3565b50505050505050565b6200b7658787878787878760016200adb4565b8162007c8e577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf3583816040516200b7b891906200c921565b60405180910390a162007c8e826200c099565b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462007c8e577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f506040516200b8859060208082526025908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b61646460408201527f726573735d000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f816040516200b8be91906200cb23565b60405180910390a17f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f826040516200b8f791906200cb85565b60405180910390a162007c8e6200c10c565b80821462007c8e577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f506040516200b9979060208082526022908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b75696e60408201527f745d000000000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a8816040516200b9d091906200cbc3565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a8826040516200b8f791906200cc0f565b600181600a8111156200ba20576200ba206200cc4d565b14806200ba415750600381600a8111156200ba3f576200ba3f6200cc4d565b145b6200baac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f556e737570706f7274656420746f6b656e000000000000000000000000000000604482015260640160405180910390fd5b6040516200baba906200c30d565b604051809103906000f0801580156200bad7573d6000803e3d6000fd5b50600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff166201000073ffffffffffffffffffffffffffffffffffffffff9384168102919091179182905590041663b36ba2086200bb41670de0b6b3a764000060646200c38f565b6040518263ffffffff1660e01b81526004016000604051808303818588803b1580156200bb6d57600080fd5b505af11580156200bb82573d6000803e3d6000fd5b5050505050600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816040516200bbb9906200c31b565b6200bbc69291906200cc7c565b604051809103906000f0801580156200bbe3573d6000803e3d6000fd5b50600580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169182179055604080517f6f307dc30000000000000000000000000000000000000000000000000000000081529051636f307dc3916004808201926020929091908290030181865afa1580156200bc7d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200bca391906200c484565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600554604080517fc12c21c00000000000000000000000000000000000000000000000000000000081529051919092169163c12c21c09160048083019260209291908290030181865afa1580156200bd40573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200bd6691906200c484565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600554604080517f2f7a188100000000000000000000000000000000000000000000000000000000815290519190921691632f7a18819160048083019260209291908290030181865afa1580156200be03573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200be2991906200c484565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600554604080517ff9aa028a0000000000000000000000000000000000000000000000000000000081529051919092169163f9aa028a9160048083019260209291908290030181865afa1580156200bec6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200beec91906200c484565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b8082111562007c8e577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f506040516200bfc39060208082526022908201527f4572726f723a2061203c3d2062206e6f7420736174697366696564205b75696e60408201527f745d000000000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a1604080518181526009818301527f202056616c75652061000000000000000000000000000000000000000000000060608201526020810184905290517fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a89181900360800190a1604080518181526009918101919091527f202056616c7565206200000000000000000000000000000000000000000000006060820152602081018290527fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a8906080016200b8f7565b8062000f1b577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f506040516200c0ff9060208082526017908201527f4572726f723a20417373657274696f6e204661696c6564000000000000000000604082015260600190565b60405180910390a162000f1b5b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200c2615760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000009282019290925260016060820152600091907f70ca10bbd0dbfd9020a9f4b13402c16cb120705e0d1c0aeab10fa353ae586fc490608001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526200c1de92916020016200c510565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526200c218916200c55a565b6000604051808303816000865af19150503d80600081146200c257576040519150601f19603f3d011682016040523d82523d6000602084013e6200c25c565b606091505b505050505b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055565b6106ca806200ccdf83390190565b611758806200d3a983390190565b615594806200eb0183390190565b611127806201409583390190565b6108e780620151bc83390190565b610b0f8062015aa383390190565b6135d180620165b283390190565b6124568062019b8383390190565b610e17806201bfd983390190565b617a51806201cdf083390190565b62031ed6806202484183390190565b805180151581146200670d57600080fd5b6000602082840312156200c34e57600080fd5b6200c359826200c32a565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156200c3ca576200c3ca6200c360565b500290565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156200c404576200c4046200c360565b5060010190565b6000826200c442577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000828210156200c45c576200c45c6200c360565b500390565b73ffffffffffffffffffffffffffffffffffffffff8116811462000f1b57600080fd5b6000602082840312156200c49757600080fd5b81516200c359816200c461565b600060ff821660ff8114156200c4be576200c4be6200c360565b60010192915050565b6000602082840312156200c4da57600080fd5b5051919050565b60005b838110156200c4fe5781810151838201526020016200c4e4565b838111156200884c5750506000910152565b7fffffffff0000000000000000000000000000000000000000000000000000000083168152600082516200c54c8160048501602087016200c4e1565b919091016004019392505050565b600082516200c56e8184602087016200c4e1565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060c082840312156200c5ba57600080fd5b60405160c0810181811067ffffffffffffffff821117156200c5e0576200c5e06200c578565b60405282516200c5f0816200c461565b815260208301516200c602816200c461565b602082015260408301516200c617816200c461565b604082015260608301516200c62c816200c461565b606082015260808301516200c641816200c461565b60808201526200c65460a084016200c32a565b60a08201529392505050565b600081518084526200c67a8160208601602086016200c4e1565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015260006200c6dd60408301846200c660565b949350505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b838110156200c783578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00185528151805173ffffffffffffffffffffffffffffffffffffffff1684528701518784018790526200c76f878501826200c660565b95880195935050908601906001016200c70c565b509098975050505050505050565b600080604083850312156200c7a557600080fd5b82516200c7b2816200c461565b602084015190925061ffff811681146200c7cb57600080fd5b809150509250929050565b6020815260006200c35960208301846200c660565b6000602082840312156200c7fe57600080fd5b815167ffffffffffffffff808211156200c81757600080fd5b818401915084601f8301126200c82c57600080fd5b8151818111156200c841576200c8416200c578565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156200c88a576200c88a6200c578565b816040528281528760208487010111156200c8a457600080fd5b6200c8b78360208301602088016200c4e1565b979650505050505050565b7f546f6b656e2000000000000000000000000000000000000000000000000000008152600083516200c8fc8160068501602088016200c4e1565b8351908301906200c9158160068401602088016200c4e1565b01600601949350505050565b60408152600560408201527f4572726f7200000000000000000000000000000000000000000000000000000060608201526080602082015260006200c35960808301846200c660565b600073ffffffffffffffffffffffffffffffffffffffff8086168352808516602084015250606060408301526200c9a560608301846200c660565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600083516200c9f18184602088016200c4e1565b7f496e636f7272656374200000000000000000000000000000000000000000000090830190815283516200ca2d81600a8401602088016200c4e1565b7f2062616c616e6365206f6e206163636f756e743a200000000000000000000000600a9290910191820152601f01949350505050565b6040815260006200ca7860408301856200c660565b905073ffffffffffffffffffffffffffffffffffffffff831660208301529392505050565b600083516200cab18184602088016200c4e1565b7f496e636f7272656374200000000000000000000000000000000000000000000090830190815283516200caed81600a8401602088016200c4e1565b7f20416c6c6f77616e6365206f6e206163636f756e743a20200000000000000000600a9290910191820152602201949350505050565b6040815260006200cb6160408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b905073ffffffffffffffffffffffffffffffffffffffff8316602083015292915050565b6040815260006200cb6160408301600a81527f2020202041637475616c00000000000000000000000000000000000000000000602082015260400190565b6040815260006200cc0160408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b905082602083015292915050565b6040815260006200cc0160408301600a81527f2020202041637475616c00000000000000000000000000000000000000000000602082015260400190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff8316815260408101600b83106200ccd1577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b826020830152939250505056fe60a060405234801561001057600080fd5b506040516106ca3803806106ca83398101604081905261002f9161006c565b60009190915560ff166080526001805460506001600160501b031991821681179092556004805490911690911790554260028190556003556100a2565b6000806040838503121561007f57600080fd5b82519150602083015160ff8116811461009757600080fd5b809150509250929050565b60805161060e6100bc600039600060d3015261060e6000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80639a6fc8f511610081578063d62ada111161005b578063d62ada11146102dc578063f7a30806146102f4578063feaf968c1461030757600080fd5b80639a6fc8f5146101cd578063bd18ad531461023a578063cd653afc1461024d57600080fd5b806354fd4d50116100b257806354fd4d501461012d57806367e8d83d1461013c5780637284e4161461018e57600080fd5b8063313ce567146100ce5780633fd0875f1461010c575b600080fd5b6100f57f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020015b60405180910390f35b6004546a0100000000000000000000900460ff166040516101039190610441565b60405160018152602001610103565b61018c61014a366004610482565b600480549115156c01000000000000000000000000027fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff909216919091179055565b005b604080518082018252600c81527f7072696365206f7261636c6500000000000000000000000000000000000000006020820152905161010391906104ab565b6102036101db36600461053d565b60015460005460025460035460045469ffffffffffffffffffff948516941691939590929450565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610103565b61018c610248366004610558565b61030f565b61018c61025b366004610579565b6001805469ffffffffffffffffffff9586167fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090911617905560029290925560035560048054919092167fffffffffffffffffffffffffffffffffffffffff00ff00000000000000000000909116176b020000000000000000000000179055565b6102e461035f565b6040519015158152602001610103565b61018c6103023660046105bf565b600055565b610203610385565b600480548291907fffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff166b01000000000000000000000083600281111561035757610357610412565b021790555050565b600454600090610380906b010000000000000000000000900460ff166103d6565b905090565b60008060008060006004600c9054906101000a900460ff16156103a757600080fd5b505060015460005460025460035460045469ffffffffffffffffffff9485169893975091955093509190911690565b600060028260028111156103ec576103ec610412565b14156103f757600080fd5b600182600281111561040b5761040b610412565b1492915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016006831061047c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561049457600080fd5b813580151581146104a457600080fd5b9392505050565b600060208083528351808285015260005b818110156104d8578581018301518582016040015282016104bc565b818111156104ea576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803569ffffffffffffffffffff8116811461053857600080fd5b919050565b60006020828403121561054f57600080fd5b6104a48261051e565b60006020828403121561056a57600080fd5b8135600381106104a457600080fd5b6000806000806080858703121561058f57600080fd5b6105988561051e565b935060208501359250604085013591506105b46060860161051e565b905092959194509250565b6000602082840312156105d157600080fd5b503591905056fea264697066735822122014874f7a973b86501c4c1a8be32490fe902c8f088ee234d25f9b2497e19f9e5264736f6c634300080a003360a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a003360c0604052600080546001600160a01b031916737109709ecfa91a80626ff3989d68f67f5b1dd12d1781556103e86002556101c2600355603260045560058190556014553480156200005057600080fd5b506040516200559438038062005594833981016040819052620000739162000113565b601380546000608052600680546001600160a01b031990811633908117909255600d80548216831790556007805482168317905560088054821690921790915560128054821690556001600160a81b0319909116909155600e8054821690556001600160a01b0391821660a052600180549390921692169190911790556200014b565b80516001600160a01b03811681146200010e57600080fd5b919050565b600080604083850312156200012757600080fd5b6200013283620000f6565b91506200014260208401620000f6565b90509250929050565b60805160a0516154156200017f6000396000818161035b01528181610d6d0152610ec7015260006104be01526154156000f3fe60806040523480156200001157600080fd5b5060043610620002e45760003560e01c80636a4874a11162000199578063b42eda7111620000e9578063d6a0f5301162000097578063d914cd4b116200007a578063d914cd4b1462000711578063dc4c90d31462000728578063e77772fe146200074957600080fd5b8063d6a0f53014620006e6578063d73792a9146200070757600080fd5b8063cb0d5b5211620000cc578063cb0d5b52146200067e578063cfb9cfba14620006a4578063d0fb020314620006c557600080fd5b8063b42eda71146200063c578063bf86d690146200065857600080fd5b806393e846a011620001475780639f00332b116200012a5780639f00332b14620005de578063a386a08014620005ff578063ab366292146200061b57600080fd5b806393e846a014620005be578063958e2d3114620005c757600080fd5b80637303df9a116200017c5780637303df9a146200057b5780637b10399914620005855780638da5cb5b146200059d57600080fd5b80636a4874a1146200054357806371192b17146200056457600080fd5b8063376d771a11620002555780635ebaf1db116200020357806361d027b311620001e657806361d027b314620004f757806362d28ac71462000518578063647846a5146200052257600080fd5b80635ebaf1db14620004b857806360759fce14620004e057600080fd5b806343a0d066116200023857806343a0d0661462000480578063441a3e7014620004975780635094061814620004ae57600080fd5b8063376d771a14620004555780633a088cd2146200047657600080fd5b806314cd70e411620002b3578063245e4bf01162000296578063245e4bf0146200042057806326232a2e14620004415780632986c0e5146200044b57600080fd5b806314cd70e414620003905780631526fe2714620003b857600080fd5b8063043b684a14620002e9578063068eb19e1462000334578063075461721462000355578063081e3eda146200037d575b600080fd5b600c546200030a9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b600a546200030a9073ffffffffffffffffffffffffffffffffffffffff1681565b6200030a7f000000000000000000000000000000000000000000000000000000000000000081565b6015545b6040519081526020016200032b565b620003a7620003a136600462001b05565b6200076a565b60405190151581526020016200032b565b620003cf620003c936600462001b41565b62000839565b6040805173ffffffffffffffffffffffffffffffffffffffff97881681529587166020870152938616938501939093529084166060840152909216608082015290151560a082015260c0016200032b565b6009546200030a9073ffffffffffffffffffffffffffffffffffffffff1681565b6200038160055481565b6200038160145481565b6010546200030a9073ffffffffffffffffffffffffffffffffffffffff1681565b6200038160045481565b620003a76200049136600462001b6a565b620008b9565b620003a7620004a836600462001b9b565b62000b8c565b6200038160025481565b6200030a7f000000000000000000000000000000000000000000000000000000000000000081565b620003a7620004f136600462001bbe565b62000ba5565b600e546200030a9073ffffffffffffffffffffffffffffffffffffffff1681565b6200038160035481565b6013546200030a9073ffffffffffffffffffffffffffffffffffffffff1681565b6001546200030a9073ffffffffffffffffffffffffffffffffffffffff1681565b620003a76200057536600462001bf1565b62000c7f565b620003816107d081565b6200030a6f22d53366457f9d5e68ec105046fc438381565b6006546200030a9073ffffffffffffffffffffffffffffffffffffffff1681565b62000381600481565b620003a7620005d836600462001b41565b62000f32565b600d546200030a9073ffffffffffffffffffffffffffffffffffffffff1681565b6200030a73e478de485ad2fe566d49342cbd03e49ed7db335681565b6011546200030a9073ffffffffffffffffffffffffffffffffffffffff1681565b6200030a73bcff8b0b9419b9a88c44546519b1e909cf33039981565b601354620003a79074010000000000000000000000000000000000000000900460ff1681565b620003a76200068f36600462001c2c565b60166020526000908152604090205460ff1681565b600f546200030a9073ffffffffffffffffffffffffffffffffffffffff1681565b6007546200030a9073ffffffffffffffffffffffffffffffffffffffff1681565b6012546200030a9073ffffffffffffffffffffffffffffffffffffffff1681565b6200038161271081565b620003a76200072236600462001c2c565b6200100d565b6008546200030a9073ffffffffffffffffffffffffffffffffffffffff1681565b600b546200030a9073ffffffffffffffffffffffffffffffffffffffff1681565b6000806015858154811062000783576200078362001c4c565b600091825260209091206003600590920201015473ffffffffffffffffffffffffffffffffffffffff1690503381146200081e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f216175746800000000000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b6200082c8585338662001385565b60019150505b9392505050565b601581815481106200084a57600080fd5b60009182526020909120600590910201805460018201546002830154600384015460049094015473ffffffffffffffffffffffffffffffffffffffff93841695509183169390831692908116919081169074010000000000000000000000000000000000000000900460ff1686565b60008060158581548110620008d257620008d262001c4c565b60009182526020909120600590910201805490915073ffffffffffffffffffffffffffffffffffffffff166200090b81333088620014ea565b600182015473ffffffffffffffffffffffffffffffffffffffff16841562000a95576040517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810187905273ffffffffffffffffffffffffffffffffffffffff8216906340c10f1990604401600060405180830381600087803b1580156200099c57600080fd5b505af1158015620009b1573d6000803e3d6000fd5b505050600384015473ffffffffffffffffffffffffffffffffffffffff9081169150620009e3908316826000620015ce565b62000a0673ffffffffffffffffffffffffffffffffffffffff83168289620015ce565b6040517f2ee409080000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff821690632ee4090890604401600060405180830381600087803b15801562000a7557600080fd5b505af115801562000a8a573d6000803e3d6000fd5b505050505062000b1e565b6040517f40c10f190000000000000000000000000000000000000000000000000000000081523360048201526024810187905273ffffffffffffffffffffffffffffffffffffffff8216906340c10f1990604401600060405180830381600087803b15801562000b0457600080fd5b505af115801562000b19573d6000803e3d6000fd5b505050505b60145460408051918252602082018890528615158282015251889133917fb16197b2bc5f21de7d21259f49728a7ae0f7f294f8b5d0815aed6ab550b137829181900360600190a360016014600082825462000b7a919062001c7b565b90915550600198975050505050505050565b600062000b9c8383333362001385565b50600192915050565b6000806015848154811062000bbe5762000bbe62001c4c565b60009182526020822060059190910201546040517f70a0823100000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff909116925082906370a0823190602401602060405180830381865afa15801562000c3e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c64919062001cbb565b905062000c73858286620008b9565b50600195945050505050565b6000806015858154811062000c985762000c9862001c4c565b600091825260209091206003600590920201015473ffffffffffffffffffffffffffffffffffffffff16905033811462000d2f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f2161757468000000000000000000000000000000000000000000000000000000604482015260640162000815565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ca669fa77f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663075461726040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000dd7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000dfd919062001cd5565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401600060405180830381600087803b15801562000e6457600080fd5b505af115801562000e79573d6000803e3d6000fd5b50506040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018790527f00000000000000000000000000000000000000000000000000000000000000001692506340c10f199150604401600060405180830381600087803b15801562000f0e57600080fd5b505af115801562000f23573d6000803e3d6000fd5b50600198975050505050505050565b6000806015838154811062000f4b5762000f4b62001c4c565b60009182526020822060059190910201600101546040517f70a0823100000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff909116925082906370a0823190602401602060405180830381865afa15801562000fce573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ff4919062001cbb565b905062001002848262000b8c565b506001949350505050565b600073ffffffffffffffffffffffffffffffffffffffff82166200108e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f21706172616d0000000000000000000000000000000000000000000000000000604482015260640162000815565b601554604051600090601290620010a59062001ac3565b6060808252600b908201527f436f6e766578546f6b656e000000000000000000000000000000000000000000608082015260a0602082018190526008908201527f435658544f4b454e00000000000000000000000000000000000000000000000060c082015260ff909116604082015260e001604051809103906000f08015801562001135573d6000803e3d6000fd5b50905060008282600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16306040516200116e9062001ad1565b93845273ffffffffffffffffffffffffffffffffffffffff92831660208501529082166040840152166060820152608001604051809103906000f080158015620011bc573d6000803e3d6000fd5b506040805160c08101825273ffffffffffffffffffffffffffffffffffffffff978816815293871660208501908152600191850182815292881660608601908152600260808701908152600060a088018181526015805480880182559252975160059091027f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec47581018054928d167fffffffffffffffffffffffff000000000000000000000000000000000000000093841617905593517f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec47685018054918d1691831691909117905594517f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec47784018054918c1691871691909117905590517f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec47883018054918b16919095161790935591517f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec47990920180549451151574010000000000000000000000000000000000000000027fffffffffffffffffffffff0000000000000000000000000000000000000000009095169290971691909117929092179094559392505050565b6000601585815481106200139d576200139d62001c4c565b60009182526020909120600590910201805460018201546040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018990529394509183169216908190639dc29fac90604401600060405180830381600087803b1580156200142d57600080fd5b505af115801562001442573d6000803e3d6000fd5b506200146a9250505073ffffffffffffffffffffffffffffffffffffffff831685886200175d565b868473ffffffffffffffffffffffffffffffffffffffff167f617ecc79b6b01a6f07d16c413645249f6c6b38105ddcd843e4d4c0d11009db8c60145489604051620014bf929190918252602082015260400190565b60405180910390a3600160146000828254620014dc919062001c7b565b909155505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052620015c89085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152620017b5565b50505050565b8015806200167257506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015284169063dd62ed3e90604401602060405180830381865afa1580156200164a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001670919062001cbb565b155b62001700576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e636500000000000000000000606482015260840162000815565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052620017589084907f095ea7b3000000000000000000000000000000000000000000000000000000009060640162001545565b505050565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052620017589084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640162001545565b600062001819826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16620018c89092919063ffffffff16565b8051909150156200175857808060200190518101906200183a919062001cf5565b62001758576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840162000815565b6060620018d98484600085620018e1565b949350505050565b60608247101562001975576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c0000000000000000000000000000000000000000000000000000606482015260840162000815565b843b620019df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000815565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405162001a0a919062001d44565b60006040518083038185875af1925050503d806000811462001a49576040519150601f19603f3d011682016040523d82523d6000602084013e62001a4e565b606091505b509150915062001a6082828662001a6b565b979650505050505050565b6060831562001a7c57508162000832565b82511562001a8d5782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000815919062001d62565b6117588062001db683390190565b611ed2806200350e83390190565b73ffffffffffffffffffffffffffffffffffffffff8116811462001b0257600080fd5b50565b60008060006060848603121562001b1b57600080fd5b8335925060208401359150604084013562001b368162001adf565b809150509250925092565b60006020828403121562001b5457600080fd5b5035919050565b801515811462001b0257600080fd5b60008060006060848603121562001b8057600080fd5b8335925060208401359150604084013562001b368162001b5b565b6000806040838503121562001baf57600080fd5b50508035926020909101359150565b6000806040838503121562001bd257600080fd5b82359150602083013562001be68162001b5b565b809150509250929050565b60008060006060848603121562001c0757600080fd5b83359250602084013562001c1b8162001adf565b929592945050506040919091013590565b60006020828403121562001c3f57600080fd5b8135620008328162001adf565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000821982111562001cb6577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500190565b60006020828403121562001cce57600080fd5b5051919050565b60006020828403121562001ce857600080fd5b8151620008328162001adf565b60006020828403121562001d0857600080fd5b8151620008328162001b5b565b60005b8381101562001d3257818101518382015260200162001d18565b83811115620015c85750506000910152565b6000825162001d5881846020870162001d15565b9190910192915050565b602081526000825180602084015262001d8381604085016020870162001d15565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe60a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a00336080604052600080546001600160a01b031916737109709ecfa91a80626ff3989d68f67f5b1dd12d17815560068190556007819055600a819055600b819055600c81905560128190556013553480156200005857600080fd5b5060405162001ed238038062001ed28339810160408190526200007b91620000e1565b600593909355600280546001600160a01b03199081166001600160a01b039485161790915560018054821692841692909217909155600380549091169190921617905562000135565b80516001600160a01b0381168114620000dc57600080fd5b919050565b60008060008060808587031215620000f857600080fd5b845193506200010a60208601620000c4565b92506200011a60408601620000c4565b91506200012a60608601620000c4565b905092959194509250565b611d8d80620001456000396000f3fe608060405234801561001057600080fd5b50600436106102765760003560e01c80637050ccd911610160578063a694fc3a116100d8578063df136d651161008c578063f106845411610071578063f10684541461050a578063f14faf6f146103c2578063f7c618c11461051357600080fd5b8063df136d65146104f8578063ebe2b12b1461050157600080fd5b8063c8f33c91116100bd578063c8f33c91146104df578063cd3daf9d146104e8578063d55a23f4146104f057600080fd5b8063a694fc3a146104b9578063c32e7202146104cc57600080fd5b806380faa57d1161012f5780638dcb4061116101145780638dcb406114610495578063901a7d531461049d5780639b7ccf4c146104a657600080fd5b806380faa57d1461046d5780638b8763471461047557600080fd5b80637050ccd9146103fb57806370a082311461040e57806372f702f3146104445780637b0a47ee1461046457600080fd5b806338d07436116101f3578063570ca735116101c25780635e43c47b116101a75780635e43c47b146103d657806363d38c3b146103e95780636c8bcee8146103f257600080fd5b8063570ca735146103a2578063590a41f5146103c257600080fd5b806338d07436146103615780633d18b9121461037457806340c354461461037c57806349f039a21461038f57600080fd5b80630fb5a6b41161024a5780631c1c6fe51161022f5780631c1c6fe514610322578063262d3d6d146103355780632ee409081461033e57600080fd5b80630fb5a6b41461031057806318160ddd1461031a57600080fd5b80628cc2621461027b5780630569d388146102a15780630700037d146102ab5780630f4ef8a6146102cb575b600080fd5b61028e610289366004611a42565b610533565b6040519081526020015b60405180910390f35b6102a96105cc565b005b61028e6102b9366004611a42565b600f6020526000908152604090205481565b6004546102eb9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610298565b61028e62093a8081565b600d5461028e565b6102a9610330366004611a6d565b6105da565b61028e600c5481565b61035161034c366004611a8a565b6105f8565b6040519015158152602001610298565b61035161036f366004611ab6565b61087f565b610351610aa7565b6102eb61038a366004611ae6565b610abc565b6102a961039d366004611a6d565b610af3565b6003546102eb9073ffffffffffffffffffffffffffffffffffffffff1681565b6103516103d0366004611ae6565b50600190565b6103516103e4366004611a42565b610b0d565b61028e600a5481565b61028e61033e81565b610351610409366004611aff565b610c07565b61028e61041c366004611a42565b73ffffffffffffffffffffffffffffffffffffffff1660009081526010602052604090205490565b6002546102eb9073ffffffffffffffffffffffffffffffffffffffff1681565b61028e60075481565b61028e610e88565b61028e610483366004611a42565b600e6020526000908152604090205481565b610351610e9b565b61028e600b5481565b6102a96104b4366004611ae6565b610f46565b6103516104c7366004611ae6565b61113f565b6103516104da366004611ab6565b611378565b61028e60085481565b60095461028e565b60115461028e565b61028e60095481565b61028e60065481565b61028e60055481565b6001546102eb9073ffffffffffffffffffffffffffffffffffffffff1681565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600f6020908152604080832054600e9092528220546105c691906105c090670de0b6b3a7640000906105ba9061058e9061058860095490565b9061156e565b73ffffffffffffffffffffffffffffffffffffffff881660009081526010602052604090205490611581565b9061158d565b90611599565b92915050565b6105d8601160006119ee565b565b336000908152601060205260409020546105f4908261087f565b5050565b60008273ffffffffffffffffffffffffffffffffffffffff8116156106595761062081610533565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600f6020908152604080832093909355600954600e909152919020555b600083116106c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f526577617264506f6f6c203a2043616e6e6f74207374616b652030000000000060448201526064015b60405180910390fd5b60005b60115481101561079057601181815481106106e8576106e8611b2d565b6000918252602090912001546040517fadc9772e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018790529091169063adc9772e90604401600060405180830381600087803b15801561076557600080fd5b505af1158015610779573d6000803e3d6000fd5b50505050808061078890611b8b565b9150506106cb565b50600d5461079e9084611599565b600d5573ffffffffffffffffffffffffffffffffffffffff84166000908152601060205260409020546107d19084611599565b73ffffffffffffffffffffffffffffffffffffffff80861660009081526010602052604090209190915560025461080b91163330866115a5565b8373ffffffffffffffffffffffffffffffffffffffff166013547e12ea37eafadc86c304798c357ee0b9923724f92be4e45c4796ccf0e33f84ce8560405161085591815260200190565b60405180910390a36001601360008282546108709190611bc4565b90915550600195945050505050565b60003380156108ca5761089181610533565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600f6020908152604080832093909355600954600e909152919020555b60008411610934576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f526577617264506f6f6c203a2043616e6e6f742077697468647261772030000060448201526064016106bf565b60005b6011548110156109fa576011818154811061095457610954611b2d565b6000918252602090912001546040517ff3fef3a30000000000000000000000000000000000000000000000000000000081523360048201526024810187905273ffffffffffffffffffffffffffffffffffffffff9091169063f3fef3a390604401600060405180830381600087803b1580156109cf57600080fd5b505af11580156109e3573d6000803e3d6000fd5b5050505080806109f290611b8b565b915050610937565b50600d54610a08908561156e565b600d5533600090815260106020526040902054610a25908561156e565b33600081815260106020526040902091909155600254610a5e9173ffffffffffffffffffffffffffffffffffffffff9091169086611687565b8215610a7157610a6f336001610c07565b505b6013546040518581523391907f5512f168a2a6322c28d70f2b2811c8857ea8b1f256d7be8ee8ef770665c3f96290602001610855565b6000610ab4336001610c07565b506001905090565b60118181548110610acc57600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b336000908152601060205260409020546105f49082611378565b600073ffffffffffffffffffffffffffffffffffffffff8216610b8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f217265776172642073657474696e67000000000000000000000000000000000060448201526064016106bf565b5060118054600180820183556000929092527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c680180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff939093169290921790915590565b60008273ffffffffffffffffffffffffffffffffffffffff811615610c6857610c2f81610533565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600f6020908152604080832093909355600954600e909152919020555b6000610c7385610533565b90508015610d495773ffffffffffffffffffffffffffffffffffffffff8086166000908152600f6020526040812055600154610cb191168683611687565b6003546005546040517f71192b17000000000000000000000000000000000000000000000000000000008152600481019190915273ffffffffffffffffffffffffffffffffffffffff878116602483015260448201849052909116906371192b1790606401600060405180830381600087803b158015610d3057600080fd5b505af1158015610d44573d6000803e3d6000fd5b505050505b8315610e125760005b601154811015610e105760118181548110610d6f57610d6f611b2d565b6000918252602090912001546040517fc00007b000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529091169063c00007b090602401600060405180830381600087803b158015610de557600080fd5b505af1158015610df9573d6000803e3d6000fd5b505050508080610e0890611b8b565b915050610d52565b505b8473ffffffffffffffffffffffffffffffffffffffff166013547fa7283f521536f3db5cd5c50a1f053bbba463b20de118ee0f9dd4c3ff2bc9532f83604051610e5d91815260200190565b60405180910390a3600160136000828254610e789190611bc4565b9091555060019695505050505050565b6000610e96426006546116e2565b905090565b6002546040517f70a08231000000000000000000000000000000000000000000000000000000008152336004820152600091829173ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa158015610f0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f329190611bdc565b9050610f3d8161113f565b50600191505090565b600054600154604080517f07546172000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169363ca669fa793169163075461729160048083019260209291908290030181865afa158015610fc0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe49190611bf5565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401600060405180830381600087803b15801561104a57600080fd5b505af115801561105e573d6000803e3d6000fd5b50506001546040517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810185905273ffffffffffffffffffffffffffffffffffffffff90911692506340c10f1991506044016020604051808303816000875af11580156110d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110fd9190611c12565b50600d541561113c57600d5461111b82670de0b6b3a7640000611c2f565b6111259190611c6c565b600960008282546111369190611bc4565b90915550505b50565b600033801561118a5761115181610533565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600f6020908152604080832093909355600954600e909152919020555b600083116111f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f526577617264506f6f6c203a2043616e6e6f74207374616b652030000000000060448201526064016106bf565b60005b6011548110156112ba576011818154811061121457611214611b2d565b6000918252602090912001546040517fadc9772e0000000000000000000000000000000000000000000000000000000081523360048201526024810186905273ffffffffffffffffffffffffffffffffffffffff9091169063adc9772e90604401600060405180830381600087803b15801561128f57600080fd5b505af11580156112a3573d6000803e3d6000fd5b5050505080806112b290611b8b565b9150506111f7565b50600d546112c89084611599565b600d55336000908152601060205260409020546112e59084611599565b3360008181526010602052604090209190915560025461131f9173ffffffffffffffffffffffffffffffffffffffff9091169030866115a5565b6013546040518481523391907e12ea37eafadc86c304798c357ee0b9923724f92be4e45c4796ccf0e33f84ce9060200160405180910390a360016013600082825461136a9190611bc4565b909155506001949350505050565b60003380156113c35761138a81610533565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600f6020908152604080832093909355600954600e909152919020555b60005b60115481101561148957601181815481106113e3576113e3611b2d565b6000918252602090912001546040517ff3fef3a30000000000000000000000000000000000000000000000000000000081523360048201526024810187905273ffffffffffffffffffffffffffffffffffffffff9091169063f3fef3a390604401600060405180830381600087803b15801561145e57600080fd5b505af1158015611472573d6000803e3d6000fd5b50505050808061148190611b8b565b9150506113c6565b50600d54611497908561156e565b600d55336000908152601060205260409020546114b4908561156e565b33600081815260106020526040908190209290925560035460055492517f14cd70e4000000000000000000000000000000000000000000000000000000008152600481019390935260248301879052604483019190915273ffffffffffffffffffffffffffffffffffffffff16906314cd70e490606401600060405180830381600087803b15801561154557600080fd5b505af1158015611559573d6000803e3d6000fd5b505050508215610a7157610a6f336001610c07565b600061157a8284611ca7565b9392505050565b600061157a8284611c2f565b600061157a8284611c6c565b600061157a8284611bc4565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526116819085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526116f8565b50505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526116dd9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016115ff565b505050565b60008183106116f1578161157a565b5090919050565b600061175a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166118049092919063ffffffff16565b8051909150156116dd57808060200190518101906117789190611c12565b6116dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016106bf565b6060611813848460008561181b565b949350505050565b6060824710156118ad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016106bf565b843b611915576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016106bf565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161193e9190611cea565b60006040518083038185875af1925050503d806000811461197b576040519150601f19603f3d011682016040523d82523d6000602084013e611980565b606091505b509150915061199082828661199b565b979650505050505050565b606083156119aa57508161157a565b8251156119ba5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106bf9190611d06565b508054600082559060005260206000209081019061113c91905b80821115611a1c5760008155600101611a08565b5090565b73ffffffffffffffffffffffffffffffffffffffff8116811461113c57600080fd5b600060208284031215611a5457600080fd5b813561157a81611a20565b801515811461113c57600080fd5b600060208284031215611a7f57600080fd5b813561157a81611a5f565b60008060408385031215611a9d57600080fd5b8235611aa881611a20565b946020939093013593505050565b60008060408385031215611ac957600080fd5b823591506020830135611adb81611a5f565b809150509250929050565b600060208284031215611af857600080fd5b5035919050565b60008060408385031215611b1257600080fd5b8235611b1d81611a20565b91506020830135611adb81611a5f565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611bbd57611bbd611b5c565b5060010190565b60008219821115611bd757611bd7611b5c565b500190565b600060208284031215611bee57600080fd5b5051919050565b600060208284031215611c0757600080fd5b815161157a81611a20565b600060208284031215611c2457600080fd5b815161157a81611a5f565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611c6757611c67611b5c565b500290565b600082611ca2577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600082821015611cb957611cb9611b5c565b500390565b60005b83811015611cd9578181015183820152602001611cc1565b838111156116815750506000910152565b60008251611cfc818460208701611cbe565b9190910192915050565b6020815260008251806020840152611d25816040850160208701611cbe565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea26469706673582212203f11f44bbbc8c8f79b251a573810815d0ad952cb93d7f9b03a3b1f9b4b5f088b64736f6c634300080a0033a264697066735822122044488a884b50168ddd6206e1b0e6f92b3a4c18569c421a05cd933000ca6bb7ec64736f6c634300080a00336080604052600180546001600160a01b031916737109709ecfa91a80626ff3989d68f67f5b1dd12d17905560006004819055600581905560088190556009819055600a819055600d819055600e5534801561005957600080fd5b50604051611127380380611127833981016040819052610078916100d6565b600080546001600160a01b039485166001600160a01b031991821617909155600280549385169382169390931790925560038054919093169116179055610119565b80516001600160a01b03811681146100d157600080fd5b919050565b6000806000606084860312156100eb57600080fd5b6100f4846100ba565b9250610102602085016100ba565b9150610110604085016100ba565b90509250925092565b610fff806101286000396000f3fe608060405234801561001057600080fd5b50600436106101a25760003560e01c80637b0a47ee116100ee578063c8f33c9111610097578063ebe2b12b11610071578063ebe2b12b14610345578063f14faf6f14610285578063f3fef3a31461034e578063f7c618c11461036157600080fd5b8063c8f33c911461032b578063cd3daf9d14610334578063df136d651461033c57600080fd5b80639b7ccf4c116100c85780639b7ccf4c146102f0578063adc9772e14610305578063c00007b01461031857600080fd5b80637b0a47ee146102be5780638b876347146102c7578063901a7d53146102e757600080fd5b80633d18b9121161015057806363d38c3b1161012a57806363d38c3b146102995780636c8bcee8146102a257806370a08231146102ab57600080fd5b80633d18b9121461024d578063570ca73514610265578063590a41f51461028557600080fd5b806318160ddd1161018157806318160ddd146101f7578063262d3d6d146101ff578063323a5e0b1461020857600080fd5b80628cc262146101a75780630700037d146101cd5780630fb5a6b4146101ed575b600080fd5b6101ba6101b5366004610d9c565b610381565b6040519081526020015b60405180910390f35b6101ba6101db366004610d9c565b600c6020526000908152604090205481565b6101ba62093a8081565b6101ba6103fd565b6101ba600a5481565b6000546102289073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101c4565b610255610494565b60405190151581526020016101c4565b6003546102289073ffffffffffffffffffffffffffffffffffffffff1681565b610255610293366004610db9565b50600190565b6101ba60085481565b6101ba61033e81565b6101ba6102b9366004610d9c565b6104a7565b6101ba60055481565b6101ba6102d5366004610d9c565b600b6020526000908152604090205481565b6101ba60095481565b6103036102fe366004610db9565b61053c565b005b610255610313366004610dd2565b61073f565b610255610326366004610d9c565b610815565b6101ba60065481565b6007546101ba565b6101ba60075481565b6101ba60045481565b61025561035c366004610dd2565b61090a565b6002546102289073ffffffffffffffffffffffffffffffffffffffff1681565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600c6020908152604080832054600b9092528220546103f791906103f190670de0b6b3a7640000906103eb906103dc906103d660075490565b906109b6565b6103e5886104a7565b906109c9565b906109d5565b906109e1565b92915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561046b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048f9190610dfe565b905090565b600061049f33610815565b506001905090565b600080546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152909116906370a0823190602401602060405180830381865afa158015610518573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103f79190610dfe565b600154600254604080517f07546172000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169363ca669fa793169163075461729160048083019260209291908290030181865afa1580156105b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105da9190610e17565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401600060405180830381600087803b15801561064057600080fd5b505af1158015610654573d6000803e3d6000fd5b50506002546040517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810185905273ffffffffffffffffffffffffffffffffffffffff90911692506340c10f1991506044016020604051808303816000875af11580156106cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f39190610e34565b506106fc6103fd565b1561073c576107096103fd565b61071b82670de0b6b3a7640000610e85565b6107259190610ec2565b600760008282546107369190610efd565b90915550505b50565b60008273ffffffffffffffffffffffffffffffffffffffff8116156107a05761076781610381565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600c6020908152604080832093909355600754600b909152919020555b8373ffffffffffffffffffffffffffffffffffffffff16600e547fd198b93c3f48daa3d45cc61906c9e4716488eeb15e548a75d758b920def2594b856040516107eb91815260200190565b60405180910390a36001600e60008282546108069190610efd565b90915550600195945050505050565b60008173ffffffffffffffffffffffffffffffffffffffff8116156108765761083d81610381565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600c6020908152604080832093909355600754600b909152919020555b600061088184610381565b905080156108bf5773ffffffffffffffffffffffffffffffffffffffff8085166000908152600c60205260408120556002546108bf911685836109ed565b8373ffffffffffffffffffffffffffffffffffffffff16600e547f7f6ed0d42a688c853d54c432db2c486796be01babc08c81d92cc84fac254e53a836040516107eb91815260200190565b60008273ffffffffffffffffffffffffffffffffffffffff81161561096b5761093281610381565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600c6020908152604080832093909355600754600b909152919020555b8373ffffffffffffffffffffffffffffffffffffffff16600e547f13da9d660b9991f6835852ad20002cecf1c4664a804c5b315539e1f8934c56df856040516107eb91815260200190565b60006109c28284610f15565b9392505050565b60006109c28284610e85565b60006109c28284610ec2565b60006109c28284610efd565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610a7a908490610a7f565b505050565b6000610ae1826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16610b909092919063ffffffff16565b805190915015610a7a5780806020019051810190610aff9190610e34565b610a7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6060610b9f8484600085610ba7565b949350505050565b606082471015610c39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610b87565b843b610ca1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610b87565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051610cca9190610f5c565b60006040518083038185875af1925050503d8060008114610d07576040519150601f19603f3d011682016040523d82523d6000602084013e610d0c565b606091505b5091509150610d1c828286610d27565b979650505050505050565b60608315610d365750816109c2565b825115610d465782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b879190610f78565b73ffffffffffffffffffffffffffffffffffffffff8116811461073c57600080fd5b600060208284031215610dae57600080fd5b81356109c281610d7a565b600060208284031215610dcb57600080fd5b5035919050565b60008060408385031215610de557600080fd5b8235610df081610d7a565b946020939093013593505050565b600060208284031215610e1057600080fd5b5051919050565b600060208284031215610e2957600080fd5b81516109c281610d7a565b600060208284031215610e4657600080fd5b815180151581146109c257600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610ebd57610ebd610e56565b500290565b600082610ef8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60008219821115610f1057610f10610e56565b500190565b600082821015610f2757610f27610e56565b500390565b60005b83811015610f47578181015183820152602001610f2f565b83811115610f56576000848401525b50505050565b60008251610f6e818460208701610f2c565b9190910192915050565b6020815260008251806020840152610f97816040850160208701610f2c565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea26469706673582212203edf2b496d59cc45e2c69e6980d4fa131b9a2d1fbf9bede11ec63d2d8cd65bfc64736f6c634300080a003360e060405234801561001057600080fd5b506040516108e73803806108e78339818101604052604081101561003357600080fd5b508051602090910151336080526001600160a01b0391821660a0521660c05260805160a05160c05161086661008160003960006103120152600061029b015260006102eb01526108666000f3fe608060405234801561001057600080fd5b50600436106100675760003560e01c80636a4874a1116100505780636a4874a1146102965780638da5cb5b146102e6578063923c1d611461030d57600080fd5b806317d7de7c1461006c5780635a7b87f214610115575b600080fd5b60408051808201909152600d81527f436c61696d5a61702056322e300000000000000000000000000000000000000060208201526040805160208082528351818301528351919283929083019185019080838360005b838110156100da5781810151838201526020016100c2565b50505050905090810190601f1680156101075780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610294600480360361012081101561012c57600080fd5b81019060208101813564010000000081111561014757600080fd5b82018360208201111561015957600080fd5b8035906020019184602083028401116401000000008311171561017b57600080fd5b91939092909160208101903564010000000081111561019957600080fd5b8201836020820111156101ab57600080fd5b803590602001918460208302840111640100000000831117156101cd57600080fd5b9193909290916020810190356401000000008111156101eb57600080fd5b8201836020820111156101fd57600080fd5b8035906020019184602083028401116401000000008311171561021f57600080fd5b91939092909160208101903564010000000081111561023d57600080fd5b82018360208201111561024f57600080fd5b8035906020019184602083028401116401000000008311171561027157600080fd5b919350915080359060208101359060408101359060608101359060800135610334565b005b6102bd7f000000000000000000000000000000000000000000000000000000000000000081565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6102bd7f000000000000000000000000000000000000000000000000000000000000000081565b6102bd7f000000000000000000000000000000000000000000000000000000000000000081565b60005b8c81101561040c578d8d8281811061035157610351610764565b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637050ccd93360016040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff168152602001821515815260200192505050600060405180830381600087803b1580156103e157600080fd5b505af11580156103f5573d6000803e3d6000fd5b50505050808061040490610793565b915050610337565b5060005b8a8110156104da578b8b8281811061042a5761042a610764565b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c00007b0336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b1580156104af57600080fd5b505af11580156104c3573d6000803e3d6000fd5b5050505080806104d290610793565b915050610410565b506104eb85858585600080876104fa565b50505050505050505050505050565b8615610551576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d8152602001806107f4603d913960400191505060405180910390fd5b85156105a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d8152602001806107f4603d913960400191505060405180910390fd5b84156105ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d8152602001806107f4603d913960400191505060405180910390fd5b8315610656576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d8152602001806107f4603d913960400191505060405180910390fd5b82156106ad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d8152602001806107f4603d913960400191505060405180910390fd5b8115610704576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d8152602001806107f4603d913960400191505060405180910390fd5b801561075b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d8152602001806107f4603d913960400191505060405180910390fd5b50505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156107ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fe436c61696d205a6170204d6f636b3a204e6f6e2d7a65726f20657874726120706172616d65746572207761732070617373656420746f20746172676574a2646970667358221220804b3364e3f1f3fdbeaae89a76796b90e4f98f99bcd43ed1c2f9bd27338d29d964736f6c634300080a003360e06040523480156200001157600080fd5b5060405162000b0f38038062000b0f8339810160408190526200003491620002c1565b80816001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000074573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200009e919081019062000342565b604051602001620000b09190620003fa565b604051602081830303815290604052826001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015620000fe573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000128919081019062000342565b6040516020016200013a919062000441565b604051602081830303815290604052836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000188573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ae91906200046e565b8151620001c3906000906020850190620001fe565b508251620001d9906001906020860190620001fe565b5060ff1660a05250506001600160a01b039081166080529190911660c05250620004d7565b8280546200020c906200049a565b90600052602060002090601f0160209004810192826200023057600085556200027b565b82601f106200024b57805160ff19168380011785556200027b565b828001600101855582156200027b579182015b828111156200027b5782518255916020019190600101906200025e565b50620002899291506200028d565b5090565b5b808211156200028957600081556001016200028e565b80516001600160a01b0381168114620002bc57600080fd5b919050565b60008060408385031215620002d557600080fd5b620002e083620002a4565b9150620002f060208401620002a4565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200032c57818101518382015260200162000312565b838111156200033c576000848401525b50505050565b6000602082840312156200035557600080fd5b81516001600160401b03808211156200036d57600080fd5b818401915084601f8301126200038257600080fd5b815181811115620003975762000397620002f9565b604051601f8201601f19908116603f01168101908382118183101715620003c257620003c2620002f9565b81604052828152876020848701011115620003dc57600080fd5b620003ef8360208301602088016200030f565b979650505050505050565b7f436f6e766578205374616b656420506f736974696f6e20000000000000000000815260008251620004348160178501602087016200030f565b9190910160170192915050565b6273746b60e81b815260008251620004618160038501602087016200030f565b9190910160030192915050565b6000602082840312156200048157600080fd5b815160ff811681146200049357600080fd5b9392505050565b600181811c90821680620004af57607f821691505b60208210811415620004d157634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c0516105fa62000515600039600081816101170152610380015260006101900152600081816101c901526102a601526105fa6000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c8063313ce5671161008157806395d89b411161005b57806395d89b41146101fe578063a9059cbb146100ec578063dd62ed3e1461020657600080fd5b8063313ce5671461018b5780636f307dc3146101c457806370a08231146101eb57600080fd5b806316f0115b116100b257806316f0115b1461011257806318160ddd1461015e57806323b872dd1461017457600080fd5b806306fdde03146100ce578063095ea7b3146100ec575b600080fd5b6100d6610214565b6040516100e39190610400565b60405180910390f35b6101026100fa36600461049c565b600092915050565b60405190151581526020016100e3565b6101397f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100e3565b6101666102a2565b6040519081526020016100e3565b6101026101823660046104c6565b60009392505050565b6101b27f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020016100e3565b6101397f000000000000000000000000000000000000000000000000000000000000000081565b6101666101f9366004610502565b610338565b6100d66103f3565b6101666100fa366004610524565b6001805461022190610557565b80601f016020809104026020016040519081016040528092919081815260200182805461024d90610557565b801561029a5780601f1061026f5761010080835404028352916020019161029a565b820191906000526020600020905b81548152906001019060200180831161027d57829003601f168201915b505050505081565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561030f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061033391906105ab565b905090565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa1580156103c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103ed91906105ab565b92915050565b6000805461022190610557565b600060208083528351808285015260005b8181101561042d57858101830151858201604001528201610411565b8181111561043f576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461049757600080fd5b919050565b600080604083850312156104af57600080fd5b6104b883610473565b946020939093013593505050565b6000806000606084860312156104db57600080fd5b6104e484610473565b92506104f260208501610473565b9150604084013590509250925092565b60006020828403121561051457600080fd5b61051d82610473565b9392505050565b6000806040838503121561053757600080fd5b61054083610473565b915061054e60208401610473565b90509250929050565b600181811c9082168061056b57607f821691505b602082108114156105a5577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156105bd57600080fd5b505191905056fea2646970667358221220fe176aed8ca6f061a19c6044454b19be91cf49811a0c97d16b3850e05baf33fe64736f6c634300080a00336102806040523480156200001257600080fd5b50604051620035d1380380620035d1833981016040819052620000359162000c7a565b82826001600160a01b03821615806200005557506001600160a01b038116155b156200007457604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038216608081905260408051632f7a188160e01b81529051632f7a1881916004808201926020929091908290030181865afa158015620000bf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e5919062000cce565b6001600160a01b0390811660a05290811660c0526001600055604080516372f702f360e01b8152905191851692506372f702f39160048083019260209291908290030181865afa1580156200013e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000164919062000cce565b6001600160a01b0316610100816001600160a01b031681525050816001600160a01b031663f10684546040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001bd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e3919062000cf5565b6101c08181525050816001600160a01b031663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200022a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000250919062000cce565b6001600160a01b03166101e0816001600160a01b031681525050816001600160a01b03166372f702f36040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002a9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002cf919062000cce565b6001600160a01b0316610200816001600160a01b031681525050816001600160a01b0316630fb5a6b46040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000328573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200034e919062000cf5565b6102208181525050816001600160a01b031663570ca7356040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000395573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003bb919062000cce565b6001600160a01b0316610240816001600160a01b031681525050816001600160a01b0316630f4ef8a66040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000414573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200043a919062000cce565b6001600160a01b0316610260816001600160a01b031681525050806001600160a01b0316610120816001600160a01b0316815250506000806000846001600160a01b031663d55a23f46040518163ffffffff1660e01b8152600401602060405180830381865afa158015620004b3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004d9919062000cf5565b9050600181106200069257604051632061aa2360e11b8152600060048201526001600160a01b038616906340c3544690602401602060405180830381865afa1580156200052a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000550919062000cce565b6001600160a01b031663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200058e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005b4919062000cce565b9250600281106200069257604051632061aa2360e11b8152600160048201526001600160a01b038616906340c3544690602401602060405180830381865afa15801562000605573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200062b919062000cce565b6001600160a01b031663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000669573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200068f919062000cce565b91505b6001600160a01b0380841661014052828116610160526040805163570ca73560e01b8152905160009288169163570ca7359160048083019260209291908290030181865afa158015620006e9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200070f919062000cce565b9050806001600160a01b0316636a4874a16040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000750573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000776919062000cce565b6001600160a01b0316610180816001600160a01b031681525050806001600160a01b031663075461726040518163ffffffff1660e01b8152600401602060405180830381865afa158015620007cf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007f5919062000cce565b6001600160a01b03166101a0816001600160a01b0316815250506000816001600160a01b0316631526fe27886001600160a01b031663f10684546040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200085f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000885919062000cf5565b6040518263ffffffff1660e01b8152600401620008a491815260200190565b60c060405180830381865afa158015620008c2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008e8919062000d20565b80516001600160a01b0390811660e05260805161018051604051630f67c5bd60e41b81529083166004820152929350169063f67c5bd090602401602060405180830381865afa15801562000940573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000966919062000cf5565b620009995761018051604051632262b1b560e21b81526001600160a01b0390911660048201526024015b60405180910390fd5b6080516101a051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620009e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a0d919062000cf5565b62000a3c576101a051604051632262b1b560e21b81526001600160a01b03909116600482015260240162000990565b60805160e051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa15801562000a89573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000aaf919062000cf5565b62000add5760e051604051632262b1b560e21b81526001600160a01b03909116600482015260240162000990565b6001600160a01b0385161580159062000b645750608051604051630f67c5bd60e41b81526001600160a01b0387811660048301529091169063f67c5bd090602401602060405180830381865afa15801562000b3c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b62919062000cf5565b155b1562000b8f57604051632262b1b560e21b81526001600160a01b038616600482015260240162000990565b6001600160a01b0384161580159062000c165750608051604051630f67c5bd60e41b81526001600160a01b0386811660048301529091169063f67c5bd090602401602060405180830381865afa15801562000bee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c14919062000cf5565b155b1562000c4157604051632262b1b560e21b81526001600160a01b038516600482015260240162000990565b505050505050505062000dda565b6001600160a01b038116811462000c6557600080fd5b50565b805162000c758162000c4f565b919050565b60008060006060848603121562000c9057600080fd5b835162000c9d8162000c4f565b602085015190935062000cb08162000c4f565b604085015190925062000cc38162000c4f565b809150509250925092565b60006020828403121562000ce157600080fd5b815162000cee8162000c4f565b9392505050565b60006020828403121562000d0857600080fd5b5051919050565b8051801515811462000c7557600080fd5b600060c0828403121562000d3357600080fd5b60405160c081016001600160401b038111828210171562000d6457634e487b7160e01b600052604160045260246000fd5b60405262000d728362000c68565b815262000d826020840162000c68565b602082015262000d956040840162000c68565b604082015262000da86060840162000c68565b606082015262000dbb6080840162000c68565b608082015262000dce60a0840162000d0f565b60a08201529392505050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e051610200516102205161024051610260516125c66200100b60003960006103410152600061048b0152600061038d0152600061050f0152600061072d015260006106f8015260008181610584015261169f0152600081816104ba01526115d80152600081816105d20152818161183601526118b70152600081816106c10152818161172701526117b10152600081816103d1015281816110b0015281816111ae0152818161152d01526119f80152600081816105f90152818161108f0152818161118d015261154e0152600081816105ab0152611a190152600081816106330152818161079601528181610851015281816108860152818161096501528181610b6f01528181610c4701528181610d1301528181610d8001528181610e3901528181610f0401528181610f3901528181610fa6015281816110570152818161111d01528181611255015281816112c20152818161132f0152818161139c0152818161140901528181611cda01528181611df90152611ed301526000818161042301528181611b450152611f9901526000818161065a01528181610a9501528181610b40015281816114ba01528181611600015281816116c7015281816117d9015281816118df0152818161197001528181611aa201528181611d3001528181611dca01528181611f0a01528181612021015281816120d5015261217f01526125c66000f3fe608060405234801561001057600080fd5b50600436106102fe5760003560e01c80637b0a47ee1161019c578063c12c21c0116100ee578063da5b383f11610097578063f106845411610071578063f1068454146106f3578063f14faf6f1461071a578063f7c618c11461072857600080fd5b8063da5b383f146106bc578063df136d65146106e3578063ebe2b12b146106eb57600080fd5b8063cd3daf9d116100c8578063cd3daf9d14610697578063ce30bbdb1461069f578063d55a23f4146106b457600080fd5b8063c12c21c014610655578063c32e72021461067c578063c8f33c911461068f57600080fd5b8063923c1d611161015057806399253ac01161012a57806399253ac0146105f4578063a694fc3a1461061b578063bd90df701461062e57600080fd5b8063923c1d611461057f578063927188d9146105a657806397c3413b146105cd57600080fd5b80638b876347116101815780638b8763471461055c5780638dcb40611461056f578063901a7d531461057757600080fd5b80637b0a47ee1461054c57806380faa57d1461055457600080fd5b80633d18b912116102555780636a4874a11161020957806370a08231116101e357806370a08231146104f757806372f702f31461050a57806378aa73a41461053157600080fd5b80636a4874a1146104b55780636c8bcee8146104dc5780637050ccd9146104e457600080fd5b806349f039a21161023a57806349f039a214610473578063570ca7351461048657806363d38c3b146104ad57600080fd5b80633d18b9121461045857806340c354461461046057600080fd5b80631c1c6fe5116102b75780632ee40908116102915780632ee40908146103fb5780632f7a18811461041e57806338d074361461044557600080fd5b80631c1c6fe5146103b757806320b2c151146103cc578063262d3d6d146103f357600080fd5b80630f4ef8a6116102e85780630f4ef8a61461033c5780630fb5a6b41461038857806318160ddd146103af57600080fd5b80628cc262146103035780630700037d14610329575b600080fd5b610316610311366004612205565b61074f565b6040519081526020015b60405180910390f35b610316610337366004612205565b610809565b6103637f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610320565b6103167f000000000000000000000000000000000000000000000000000000000000000081565b610316610882565b6103ca6103c5366004612230565b610918565b005b6103637f000000000000000000000000000000000000000000000000000000000000000081565b610316610961565b61040e61040936600461224d565b6109ce565b6040519015158152602001610320565b6103637f000000000000000000000000000000000000000000000000000000000000000081565b61040e610453366004612279565b610a02565b61040e610a4d565b61036361046e3660046122a9565b610c15565b6103ca610481366004612230565b610cc7565b6103637f000000000000000000000000000000000000000000000000000000000000000081565b610316610d0f565b6103637f000000000000000000000000000000000000000000000000000000000000000081565b610316610d7c565b61040e6104f23660046122c2565b610de9565b610316610505366004612205565b610ebc565b6103637f000000000000000000000000000000000000000000000000000000000000000081565b610539600181565b60405161ffff9091168152602001610320565b610316610f35565b610316610fa2565b61031661056a366004612205565b61100f565b61040e611088565b610316611119565b6103637f000000000000000000000000000000000000000000000000000000000000000081565b6103637f000000000000000000000000000000000000000000000000000000000000000081565b6103637f000000000000000000000000000000000000000000000000000000000000000081565b6103637f000000000000000000000000000000000000000000000000000000000000000081565b61040e6106293660046122a9565b611186565b6103637f000000000000000000000000000000000000000000000000000000000000000081565b6103637f000000000000000000000000000000000000000000000000000000000000000081565b61040e61068a366004612279565b61120d565b610316611251565b6103166112be565b6106a7600c81565b60405161032091906122f0565b61031661132b565b6103637f000000000000000000000000000000000000000000000000000000000000000081565b610316611398565b610316611405565b6103167f000000000000000000000000000000000000000000000000000000000000000081565b61040e6104093660046122a9565b6103637f000000000000000000000000000000000000000000000000000000000000000081565b6040517e8cc26200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f000000000000000000000000000000000000000000000000000000000000000090911690628cc262906024015b602060405180830381865afa1580156107df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108039190612331565b92915050565b6040517f0700037d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f000000000000000000000000000000000000000000000000000000000000000090911690630700037d906024016107c2565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109139190612331565b905090565b61095d6000368080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250859250600191506114729050565b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663262d3d6d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108ef573d6000803e3d6000fd5b60006040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610a466000368080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525087935091506114729050565b9392505050565b6040517fe958b704000000000000000000000000000000000000000000000000000000008152336004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015610adc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b00919061234a565b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a90610b9c9033907f0000000000000000000000000000000000000000000000000000000000000000906000903690600401612367565b6000604051808303816000875af1158015610bbb573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610c01919081019061243a565b50610c0d816001611593565b600191505090565b6040517f40c35446000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906340c3544690602401602060405180830381865afa158015610ca3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610803919061234a565b610d0c6000368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508592506001915061193f9050565b50565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166363d38c3b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108ef573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636c8bcee86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108ef573d6000803e3d6000fd5b6040517f7050ccd900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282151560248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690637050ccd9906044016020604051808303816000875af1158015610e84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea891906124fa565b50610eb38383611593565b50600192915050565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a08231906024016107c2565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637b0a47ee6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108ef573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166380faa57d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108ef573d6000803e3d6000fd5b6040517f8b87634700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638b876347906024016107c2565b60006111117f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525060019250829150611a599050565b506001905090565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663901a7d536040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108ef573d6000803e3d6000fd5b6000610eb37f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006000368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250600193509150611a599050565b6000610eb36000368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250879350915061193f9050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c8f33c916040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108ef573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663cd3daf9d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108ef573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d55a23f46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108ef573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663df136d656040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108ef573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ebe2b12b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108ef573d6000803e3d6000fd5b6040517fe958b704000000000000000000000000000000000000000000000000000000008152336004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611501573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611525919061234a565b9050611576817f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000088600088611b28565b50831561158857611588816001611593565b506001949350505050565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561164457600080fd5b505af1158015611658573d6000803e3d6000fd5b50506040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f00000000000000000000000000000000000000000000000000000000000000001692506351e3f1609150604401600060405180830381600087803b15801561170d57600080fd5b505af1158015611721573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16158015906117675750805b1561095d576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561181d57600080fd5b505af1158015611831573d6000803e3d6000fd5b5050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1615905061095d576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561192357600080fd5b505af1158015611937573d6000803e3d6000fd5b505050505050565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156119cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119f0919061234a565b9050611a41817f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000087600087611b28565b508215611a5357611a53816001611593565b50505050565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015260609060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611ae9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0d919061234a565b9050611b1d818888888888611b28565b979650505050505050565b60606000803373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614611c91576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301528916906370a0823190602401602060405180830381865afa158015611bd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bfa9190612331565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152919350908816906370a0823190602401602060405180830381865afa158015611c6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c8e9190612331565b90505b8415611d8d576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015611d7457600080fd5b505af1158015611d88573d6000803e3d6000fd5b505050505b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a90611e239033907f0000000000000000000000000000000000000000000000000000000000000000908b90600401612517565b6000604051808303816000875af1158015611e42573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611e88919081019061243a565b92508415611f67576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301528981166044830152600160648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015611f4e57600080fd5b505af1158015611f62573d6000803e3d6000fd5b505050505b611f75898989858589611f81565b50509695505050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614612082576040517f654a9eda00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528681166024830152858116604483015260648201859052608482018490527f0000000000000000000000000000000000000000000000000000000000000000169063654a9eda9060a401600060405180830381600087803b15801561206557600080fd5b505af1158015612079573d6000803e3d6000fd5b50505050611937565b8015612132576040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015286811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b15801561211957600080fd5b505af115801561212d573d6000803e3d6000fd5b505050505b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015285811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156121c357600080fd5b505af11580156121d7573d6000803e3d6000fd5b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114610d0c57600080fd5b60006020828403121561221757600080fd5b8135610a46816121e3565b8015158114610d0c57600080fd5b60006020828403121561224257600080fd5b8135610a4681612222565b6000806040838503121561226057600080fd5b823561226b816121e3565b946020939093013593505050565b6000806040838503121561228c57600080fd5b82359150602083013561229e81612222565b809150509250929050565b6000602082840312156122bb57600080fd5b5035919050565b600080604083850312156122d557600080fd5b82356122e0816121e3565b9150602083013561229e81612222565b602081016011831061232b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561234357600080fd5b5051919050565b60006020828403121561235c57600080fd5b8151610a46816121e3565b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250606060408301528260608301528284608084013760006080848401015260807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f850116830101905095945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60005b83811015612429578181015183820152602001612411565b83811115611a535750506000910152565b60006020828403121561244c57600080fd5b815167ffffffffffffffff8082111561246457600080fd5b818401915084601f83011261247857600080fd5b81518181111561248a5761248a6123df565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156124d0576124d06123df565b816040528281528760208487010111156124e957600080fd5b611b1d83602083016020880161240e565b60006020828403121561250c57600080fd5b8151610a4681612222565b600073ffffffffffffffffffffffffffffffffffffffff808616835280851660208401525060606040830152825180606084015261255c81608085016020870161240e565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160800194935050505056fea264697066735822122014882b5d8edce8ab020643e045bc4ec2fad569e354e7a0377cb2553dca8093d864736f6c634300080a00336101406040523480156200001257600080fd5b50604051620024563803806200245683398101604081905262000035916200037b565b816001600160a01b031663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000074573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200009a9190620003ba565b6001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000d8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000fe9190620003ba565b82826001600160a01b03821615806200011e57506001600160a01b038116155b156200013d57604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038216608081905260408051632f7a188160e01b81529051632f7a1881916004808201926020929091908290030181865afa15801562000188573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ae9190620003ba565b6001600160a01b0390811660a05290811660c0526000805460ff19169055821615159050620001f057604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200022f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002559190620003ba565b6001600160a01b0390811660e0526001805560408051636a4874a160e01b815290519184169250636a4874a19160048083019260209291908290030181865afa158015620002a7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002cd9190620003ba565b6001600160a01b0316610100816001600160a01b031681525050806001600160a01b031663075461726040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000326573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200034c9190620003ba565b6001600160a01b03166101205250620003e19050565b6001600160a01b03811681146200037857600080fd5b50565b600080604083850312156200038f57600080fd5b82516200039c8162000362565b6020840151909250620003af8162000362565b809150509250929050565b600060208284031215620003cd57600080fd5b8151620003da8162000362565b9392505050565b60805160a05160c05160e0516101005161012051611f6f620004e760003960006101a2015260006103550152600081816103c20152818161068f015281816109340152610a660152600081816103f10152818161045b0152818161055f015281816105d4015281816107e90152818161089d01528181610f4f01528181610fbc01528181611154015281816112630152818161163601528181611755015261182f0152600081816102c0015281816114a101526118f501526000818161041801528181610b2001528181610d0a015281816113fe0152818161168c01528181611726015281816118660152818161197d01528181611a310152611adb0152611f6f6000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c80636a4874a1116100e3578063a50cf2c81161008c578063c12c21c011610066578063c12c21c014610413578063ce30bbdb1461043a578063cfb9cfba1461044f57600080fd5b8063a50cf2c8146103bd578063ab366292146103e4578063bd90df70146103ec57600080fd5b80638456cb59116100bd5780638456cb591461039a578063958e2d31146103a25780639b51ecd3146103b557600080fd5b80636a4874a11461035057806378aa73a4146103775780637b1039991461039257600080fd5b80633f4ba83a116101455780635c975abb1161011f5780635c975abb1461032a5780635ebaf1db1461033557806360759fce1461033d57600080fd5b80633f4ba83a146102ea57806343a0d066146102f4578063441a3e701461031757600080fd5b8063251d48c011610176578063251d48c0146102855780632f7a1881146102bb578063376d771a146102e257600080fd5b8063075461721461019d578063081e3eda146101ee5780631526fe2714610204575b600080fd5b6101c47f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6101f6610457565b6040519081526020016101e5565b610217610212366004611b40565b6104ed565b6040516101e59190600060c08201905073ffffffffffffffffffffffffffffffffffffffff8084511683528060208501511660208401528060408501511660408401528060608501511660608401528060808501511660808401525060a0830151151560a083015292915050565b6101c4610293366004611b40565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6101c47f000000000000000000000000000000000000000000000000000000000000000081565b6101c46105d0565b6102f2610661565b005b610307610302366004611b6a565b61074f565b60405190151581526020016101e5565b610307610325366004611ba3565b61079b565b60005460ff16610307565b6101c46107e5565b61030761034b366004611bc5565b610852565b6101c47f000000000000000000000000000000000000000000000000000000000000000081565b61037f600181565b60405161ffff90911681526020016101e5565b6101c4610899565b6102f2610906565b6103076103b0366004611b40565b6109f2565b6102f2610a38565b6101c47f000000000000000000000000000000000000000000000000000000000000000081565b6101c4610f4b565b6101c47f000000000000000000000000000000000000000000000000000000000000000081565b6101c47f000000000000000000000000000000000000000000000000000000000000000081565b610442600d81565b6040516101e59190611c24565b6101c4610fb8565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663081e3eda6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e89190611c65565b905090565b6040805160c081018252600080825260208201819052818301819052606082018190526080820181905260a082015290517f1526fe270000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690631526fe279060240160c060405180830381865afa1580156105a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ca9190611cd6565b92915050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663376d771a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561063d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e89190611d77565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156106eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070f9190611d92565b610745576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61074d611025565b565b600061079384836000368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250925061110b915050565b949350505050565b60006107de836000368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250925061121a915050565b9392505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635ebaf1db6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561063d573d6000803e3d6000fd5b60006107de83836000368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061110b915050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637b1039996040518163ffffffff1660e01b8152600401602060405180830381865afa15801561063d573d6000803e3d6000fd5b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015610990573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b49190611d92565b6109ea576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61074d6112f5565b60006105ca826000368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061121a915050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610ac2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae69190611d92565b610b1c576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bad9190611d77565b905060008173ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c209190611c65565b905060005b81811015610f46576040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810182905260009073ffffffffffffffffffffffffffffffffffffffff851690635094cb4f90602401602060405180830381865afa158015610c9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cbf9190611d77565b6040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000917f0000000000000000000000000000000000000000000000000000000000000000169063fdd5764590602401602060405180830381865afa158015610d51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d759190611d77565b905060008173ffffffffffffffffffffffffffffffffffffffff1663ce30bbdb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de89190611daf565b9050600c816010811115610dfe57610dfe611bf5565b1415610f385760008273ffffffffffffffffffffffffffffffffffffffff1663f10684546040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e759190611c65565b90508273ffffffffffffffffffffffffffffffffffffffff166320b2c1516040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ec2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee69190611d77565b60009182526002602052604090912080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9092169190911790555b836001019350505050610c25565b505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ab3662926040518163ffffffff1660e01b8152600401602060405180830381865afa15801561063d573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663cfb9cfba6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561063d573d6000803e3d6000fd5b60005460ff16611096576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6040517f1526fe2700000000000000000000000000000000000000000000000000000000815260048101859052600090819073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690631526fe279060240160c060405180830381865afa15801561119b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bf9190611cd6565b80519091506000866111d55782602001516111fb565b60008881526002602052604090205473ffffffffffffffffffffffffffffffffffffffff165b905061120b8282886001896113b5565b50600198975050505050505050565b6040517f1526fe2700000000000000000000000000000000000000000000000000000000815260048101849052600090819073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690631526fe279060240160c060405180830381865afa1580156112aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ce9190611cd6565b60208101518151919250906112e78282886000896113b5565b506001979650505050505050565b60005460ff1615611362576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015260640161108d565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586110e13390565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015260609060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611445573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114699190611d77565b9050611479818888888888611484565b979650505050505050565b60606000803373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146115ed576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301528916906370a0823190602401602060405180830381865afa158015611532573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115569190611c65565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152919350908816906370a0823190602401602060405180830381865afa1580156115c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ea9190611c65565b90505b84156116e9576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156116d057600080fd5b505af11580156116e4573d6000803e3d6000fd5b505050505b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a9061177f9033907f0000000000000000000000000000000000000000000000000000000000000000908b90600401611e00565b6000604051808303816000875af115801561179e573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526117e49190810190611e79565b925084156118c3576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301528981166044830152600160648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156118aa57600080fd5b505af11580156118be573d6000803e3d6000fd5b505050505b6118d18989898585896118dd565b50509695505050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146119de576040517f654a9eda00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528681166024830152858116604483015260648201859052608482018490527f0000000000000000000000000000000000000000000000000000000000000000169063654a9eda9060a401600060405180830381600087803b1580156119c157600080fd5b505af11580156119d5573d6000803e3d6000fd5b50505050611b38565b8015611a8e576040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015286811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b158015611a7557600080fd5b505af1158015611a89573d6000803e3d6000fd5b505050505b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015285811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015611b1f57600080fd5b505af1158015611b33573d6000803e3d6000fd5b505050505b505050505050565b600060208284031215611b5257600080fd5b5035919050565b8015158114611b6757600080fd5b50565b600080600060608486031215611b7f57600080fd5b83359250602084013591506040840135611b9881611b59565b809150509250925092565b60008060408385031215611bb657600080fd5b50508035926020909101359150565b60008060408385031215611bd857600080fd5b823591506020830135611bea81611b59565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160118310611c5f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b600060208284031215611c7757600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b805173ffffffffffffffffffffffffffffffffffffffff81168114611cd157600080fd5b919050565b600060c08284031215611ce857600080fd5b60405160c0810181811067ffffffffffffffff82111715611d0b57611d0b611c7e565b604052611d1783611cad565b8152611d2560208401611cad565b6020820152611d3660408401611cad565b6040820152611d4760608401611cad565b6060820152611d5860808401611cad565b608082015260a0830151611d6b81611b59565b60a08201529392505050565b600060208284031215611d8957600080fd5b6107de82611cad565b600060208284031215611da457600080fd5b81516107de81611b59565b600060208284031215611dc157600080fd5b8151601181106107de57600080fd5b60005b83811015611deb578181015183820152602001611dd3565b83811115611dfa576000848401525b50505050565b600073ffffffffffffffffffffffffffffffffffffffff8086168352808516602084015250606060408301528251806060840152611e45816080850160208701611dd0565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01691909101608001949350505050565b600060208284031215611e8b57600080fd5b815167ffffffffffffffff80821115611ea357600080fd5b818401915084601f830112611eb757600080fd5b815181811115611ec957611ec9611c7e565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715611f0f57611f0f611c7e565b81604052828152876020848701011115611f2857600080fd5b611479836020830160208801611dd056fea264697066735822122080e1032e0766b40456cf2702ec4a669a6b8db0e189e75ab6c4126faae080b85d64736f6c634300080a003360e060405234801561001057600080fd5b50604051610e17380380610e178339818101604052604081101561003357600080fd5b50805160209091015181816001600160a01b038216158061005b57506001600160a01b038116155b1561007957604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038216608081905260408051632f7a188160e01b81529051632f7a1881916004808201926020929091908290030181865afa1580156100c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e79190610106565b6001600160a01b0390811660a0521660c0525050600160005550610136565b60006020828403121561011857600080fd5b81516001600160a01b038116811461012f57600080fd5b9392505050565b60805160a05160c051610c97610180600039600081816102920152818161040601526104900152600060920152600081816102b90152818161030e0152610b460152610c976000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c8063923c1d611161005b578063923c1d6114610285578063bd90df701461028d578063c12c21c0146102b4578063ce30bbdb146102db57600080fd5b80632f7a18811461008d5780635a7b87f2146100dd5780636a4874a11461025e57806378aa73a414610266575b600080fd5b6100b47f000000000000000000000000000000000000000000000000000000000000000081565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b61025c60048036036101208110156100f457600080fd5b81019060208101813564010000000081111561010f57600080fd5b82018360208201111561012157600080fd5b8035906020019184602083028401116401000000008311171561014357600080fd5b91939092909160208101903564010000000081111561016157600080fd5b82018360208201111561017357600080fd5b8035906020019184602083028401116401000000008311171561019557600080fd5b9193909290916020810190356401000000008111156101b357600080fd5b8201836020820111156101c557600080fd5b803590602001918460208302840111640100000000831117156101e757600080fd5b91939092909160208101903564010000000081111561020557600080fd5b82018360208201111561021757600080fd5b8035906020019184602083028401116401000000008311171561023957600080fd5b91935091508035906020810135906040810135906060810135906080013561030a565b005b6100b4610402565b61026e600181565b6040805161ffff9092168252519081900360200190f35b6100b461048c565b6100b47f000000000000000000000000000000000000000000000000000000000000000081565b6100b47f000000000000000000000000000000000000000000000000000000000000000081565b6102e3600e81565b604051808260108111156102f9576102f9610c03565b815260200191505060405180910390f35b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e958b704336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381865afa158015610398573d6000803e3d6000fd5b505050506040513d60208110156103ae57600080fd5b505190506103bd818f8f6104f9565b6103c8818d8d610830565b6103d5818b8b8b8b610991565b6103e6816103e1610402565b610ab8565b6103f2816103e161048c565b5050505050505050505050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636a4874a16040518163ffffffff1660e01b8152600401602060405180830381865afa15801561046f573d6000803e3d6000fd5b505050506040513d602081101561048557600080fd5b5051919050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663923c1d616040518163ffffffff1660e01b8152600401602060405180830381865afa15801561046f573d6000803e3d6000fd5b600081815b8181101561082857600085858381811061051a5761051a610c32565b604080517f7050ccd900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c811660048301526001602483015291516020938402959095013590911694508493637050ccd993506044808301939282900301816000875af11580156105a1573d6000803e3d6000fd5b505050506040513d60208110156105b757600080fd5b5050604080517ff7c618c1000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff83169163f7c618c19160048083019260209291908290030181865afa158015610624573d6000803e3d6000fd5b505050506040513d602081101561063a57600080fd5b5051604080517f40c3544600000000000000000000000000000000000000000000000000000000815260006004820152905191955073ffffffffffffffffffffffffffffffffffffffff8316916340c35446916024808201926020929091908290030181865afa9250505080156106c357506040513d60208110156106be57600080fd5b505160015b6106cc5761081f565b8073ffffffffffffffffffffffffffffffffffffffff1663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa158015610717573d6000803e3d6000fd5b505050506040513d602081101561072d57600080fd5b5051945061073b8886610ab8565b8173ffffffffffffffffffffffffffffffffffffffff166340c3544660016040518263ffffffff1660e01b815260040180828152602001915050602060405180830381865afa9250505080156107a357506040513d602081101561079e57600080fd5b505160015b6107ac5761081d565b8073ffffffffffffffffffffffffffffffffffffffff1663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107f7573d6000803e3d6000fd5b505050506040513d602081101561080d57600080fd5b5051955061081b8987610ab8565b505b505b506001016104fe565b505050505050565b600081815b818110156108285784848281811061084f5761084f610c32565b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108b6573d6000803e3d6000fd5b505050506040513d60208110156108cc57600080fd5b505192508484828181106108e2576108e2610c32565b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c00007b0876040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801561096757600080fd5b505af115801561097b573d6000803e3d6000fd5b505050506109898684610ab8565b600101610835565b600083815b81811015610aae578484828181106109b0576109b0610c32565b9050602002013573ffffffffffffffffffffffffffffffffffffffff1692508686828181106109e1576109e1610c32565b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636b09169589856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b158015610a8457600080fd5b505af1158015610a98573d6000803e3d6000fd5b50505050610aa68884610ab8565b600101610996565b5050505050505050565b60018173ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381865afa158015610b26573d6000803e3d6000fd5b505050506040513d6020811015610b3c57600080fd5b50511115610bff577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166351e3f16083836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b158015610beb57600080fd5b505af1158015610828573d6000803e3d6000fd5b5050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea2646970667358221220e1d3a52cae085825017fa65f4505505a00eb6fda58fef20587f8561e46c541c264736f6c634300080a003360806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d00011790553480156200003a57600080fd5b506040805161018081019091526000908060c081018060018152604080518082018252600381526244414960e81b6020828101919091528301526012908201526305f5e100606082015260800160018152602001600081525081526020016040518060c001604052806002600a811115620000b957620000b962000b78565b815260408051808201825260048152635553444360e01b6020828101919091528301526006908201526305f5e100606082015260800160018152602001600081525081526020016040518060c001604052806003600a81111562000121576200012162000b78565b815260408051808201825260048152630ae8aa8960e31b602082810191909152830152601290820152644a817c8000606082015260800160028152602001600081525081526020016040518060c001604052806004600a8111156200018a576200018a62000b78565b815260408051808201825260048152634c494e4b60e01b6020828101919091528301526012908201526359682f00606082015260800160018152602001600081525081526020016040518060c001604052806005600a811115620001f257620001f262000b78565b815260408051808201825260048152631554d11560e21b602082810191909152830152601290820152633b023380606082015260800160018152602001600081525081526020016040518060c001604052806006600a8111156200025a576200025a62000b78565b815260408051808201825260058152640e6e88aa8960db1b602082810191909152830152601290820152644cd588640060608201526080016003815260200160009052905260408051610140810190915290915060009080608081018060078152602001604051806040016040528060048152602001636344414960e01b8152508152602001601260ff1681526020016305f5e100815260200160048081111562000309576200030962000b78565b8152602001600181525081526020016040518060c001604052806008600a81111562000339576200033962000b78565b81526040805180820182526005815264635553444360d81b6020828101919091528301526006908201526305f5e100606082015260800160048152602001600281525081526020016040518060c001604052806009600a811115620003a257620003a262000b78565b8152604080518082018252600581526418d554d11560da1b602082810191909152830152601290820152633b023380606082015260800160048152602001600581525081526020016040518060c00160405280600a808111156200040a576200040a62000b78565b81526040805180820182526005815264634c494e4b60d81b6020828101919091528301526012908201526359682f00606082015260800160048152602001600490529052905060005b600681101562000496576200048183826006811062000476576200047662000b8e565b6020020151620004db565b806200048d8162000ba4565b91505062000453565b5060005b6004811015620004d257620004bd82826004811062000476576200047662000b8e565b80620004c98162000ba4565b9150506200049a565b50505062000d14565b6000600282608001516004811115620004f857620004f862000b78565b14156200054e576040516200050d9062000a8c565b604051809103906000f0801580156200052a573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b03831617905590506200071e565b60038260800151600481111562000569576200056962000b78565b1415620005a4576040516200057e9062000a9a565b604051809103906000f0801580156200059b573d6000803e3d6000fd5b5090506200071e565b600182608001516004811115620005bf57620005bf62000b78565b1415620005f157816020015182602001518360400151604051620005e39062000aa8565b6200057e9392919062000c1e565b6004826080015160048111156200060c576200060c62000b78565b1415620006be576000600260008460a00151600a81111562000632576200063262000b78565b600a81111562000646576200064662000b78565b815260200190815260200160002060009054906101000a90046001600160a01b0316905082602001518360200151846040015183604051620006889062000ab6565b62000697949392919062000c5b565b604051809103906000f080158015620006b4573d6000803e3d6000fd5b509150506200071e565b60405162461bcd60e51b815260206004820152602b60248201527f74657374546f6b656e53756974653a204372656174696e6720756e6b6e6f776e60448201526a20746f6b656e207479706560a81b606482015260840160405180910390fd5b60005460208301516040516318caf8e360e31b8152620100009092046001600160a01b03169163c657c718916200075b9185919060040162000ca9565b600060405180830381600087803b1580156200077657600080fd5b505af11580156200078b573d6000803e3d6000fd5b50505050600082606001516008604051620007a69062000ac4565b91825260ff166020820152604001604051809103906000f080158015620007d1573d6000803e3d6000fd5b50905081600260008560000151600a811115620007f257620007f262000b78565b600a81111562000806576200080662000b78565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055508260600151600560008560000151600a8111156200085a576200085a62000b78565b600a8111156200086e576200086e62000b78565b8152602080820192909252604090810160009081209390935585516001600160a01b03861684526008909252909120805460ff1916600183600a811115620008ba57620008ba62000b78565b02179055508260800151600360008560000151600a811115620008e157620008e162000b78565b600a811115620008f557620008f562000b78565b81526020810191909152604001600020805460ff1916600183600481111562000922576200092262000b78565b0217905550604080518082019091526001600160a01b0380841682528281166020808401918252600780546001810182556000918252945160029095027fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688810180549686166001600160a01b031997881617905592517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c689909301805493909416929094169190911790915584015184519091600491600a811115620009eb57620009eb62000b78565b600a811115620009ff57620009ff62000b78565b8152602001908152602001600020908051906020019062000a2292919062000ad2565b5080600660008560000151600a81111562000a415762000a4162000b78565b600a81111562000a555762000a5562000b78565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550505050565b610ab1806200285183390190565b611224806200330283390190565b611758806200452683390190565b6117098062005c7e83390190565b6106ca806200738783390190565b82805462000ae09062000cd7565b90600052602060002090601f01602090048101928262000b04576000855562000b4f565b82601f1062000b1f57805160ff191683800117855562000b4f565b8280016001018555821562000b4f579182015b8281111562000b4f57825182559160200191906001019062000b32565b5062000b5d92915062000b61565b5090565b5b8082111562000b5d576000815560010162000b62565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600060001982141562000bc757634e487b7160e01b600052601160045260246000fd5b5060010190565b6000815180845260005b8181101562000bf65760208185018101518683018201520162000bd8565b8181111562000c09576000602083870101525b50601f01601f19169290920160200192915050565b60608152600062000c33606083018662000bce565b828103602084015262000c47818662000bce565b91505060ff83166040830152949350505050565b60808152600062000c70608083018762000bce565b828103602084015262000c84818762000bce565b60ff95909516604084015250506001600160a01b039190911660609091015292915050565b6001600160a01b038316815260406020820181905260009062000ccf9083018462000bce565b949350505050565b600181811c9082168062000cec57607f821691505b6020821081141562000d0e57634e487b7160e01b600052602260045260246000fd5b50919050565b611b2d8062000d246000396000f3fe6080604052600436106101635760003560e01c80638eb86e8b116100c0578063c6c3bbe611610074578063d051a62211610059578063d051a62214610490578063eebab8ef146104b0578063fa7626d4146104d057600080fd5b8063c6c3bbe614610433578063c74912d21461045357600080fd5b80639b140a85116100a55780639b140a85146103e6578063b36ba20814610406578063ba414fa61461040e57600080fd5b80638eb86e8b1461038357806398cdaadf146103a357600080fd5b80636a72bde71161011757806388327863116100fc578063883278631461030857806388f776a2146103365780638a3177a31461035657600080fd5b80636a72bde7146102c45780636ca42ae3146102e657600080fd5b8063440864fa11610148578063440864fa146102025780634b57b0be1461022f57806367b426451461028157600080fd5b806304bc3b1c1461016f57806310c7f0b9146101b557600080fd5b3661016a57005b600080fd5b34801561017b57600080fd5b5061019f61018a3660046116f6565b60086020526000908152604090205460ff1681565b6040516101ac9190611742565b60405180910390f35b3480156101c157600080fd5b506101d56101d036600461175c565b6104ea565b6040805173ffffffffffffffffffffffffffffffffffffffff9384168152929091166020830152016101ac565b34801561020e57600080fd5b5061022261021d366004611784565b610530565b6040516101ac91906117cb565b34801561023b57600080fd5b5060015461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101ac565b34801561028d57600080fd5b5061025c61029c366004611784565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156102d057600080fd5b506102e46102df36600461181c565b6105ca565b005b3480156102f257600080fd5b506102fb610730565b6040516101ac919061186b565b34801561031457600080fd5b506103286103233660046118d4565b6107b5565b6040519081526020016101ac565b34801561034257600080fd5b506102e461035136600461190b565b610888565b34801561036257600080fd5b50610328610371366004611784565b60056020526000908152604090205481565b34801561038f57600080fd5b506102e461039e366004611954565b6108b9565b3480156103af57600080fd5b5061025c6103be366004611784565b60066020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156103f257600080fd5b506102e4610401366004611993565b610a73565b6102e4610b22565b34801561041a57600080fd5b50610423610ba0565b60405190151581526020016101ac565b34801561043f57600080fd5b506102e461044e3660046119b3565b610d00565b34801561045f57600080fd5b5061048361046e366004611784565b60036020526000908152604090205460ff1681565b6040516101ac91906119d3565b34801561049c57600080fd5b506103286104ab36600461190b565b610daf565b3480156104bc57600080fd5b506102e46104cb366004611954565b610e8b565b3480156104dc57600080fd5b506000546104239060ff1681565b600781815481106104fa57600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff91821692501682565b60046020526000908152604090208054610549906119e7565b80601f0160208091040260200160405190810160405280929190818152602001828054610575906119e7565b80156105c25780601f10610597576101008083540402835291602001916105c2565b820191906000526020600020905b8154815290600101906020018083116105a557829003601f168201915b505050505081565b6000546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152620100009092049091169063ca669fa790602401600060405180830381600087803b15801561063e57600080fd5b505af1158015610652573d6000803e3d6000fd5b505050506002600085600a81111561066c5761066c611713565b600a81111561067d5761067d611713565b8152602081019190915260409081016000205490517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490529091169063095ea7b3906044016020604051808303816000875af1158015610705573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107299190611a3b565b5050505050565b60606007805480602002602001604051908101604052809291908181526020016000905b828210156107ac5760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff908116835260019182015416828401529083529092019101610754565b50505050905090565b60006002600084600a8111156107cd576107cd611713565b600a8111156107de576107de611713565b8152602081019190915260409081016000205490517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152909116906370a0823190602401602060405180830381865afa15801561085d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108819190611a5d565b9392505050565b6108b48383837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6105ca565b505050565b60016003600085600a8111156108d1576108d1611713565b600a8111156108e2576108e2611713565b815260208101919091526040016000205460ff16600481111561090757610907611713565b14610999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f74657374546f6b656e53756974653a20547279696e6720746f206275726e206160448201527f206e6f6e2d6e6f726d616c20746f6b656e00000000000000000000000000000060648201526084015b60405180910390fd5b6002600084600a8111156109af576109af611713565b600a8111156109c0576109c0611713565b8152602081019190915260409081016000205490517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526024820184905290911690639dc29fac906044015b6020604051808303816000875af1158015610a49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6d9190611a3b565b50505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604081205460ff169081600a811115610aaf57610aaf611713565b1415610b17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f20746f6b656e2077697468207375636820616464726573730000000000006044820152606401610990565b610a6d818484610888565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015610b8c57600080fd5b505af1158015610729573d6000803e3d6000fd5b60008054610100900460ff1615610bc05750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610cfb5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610c65917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc491608001611a76565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052610c9d91611abe565b6000604051808303816000865af19150503d8060008114610cda576040519150601f19603f3d011682016040523d82523d6000602084013e610cdf565b606091505b5091505080806020019051810190610cf79190611a3b565b9150505b919050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604081205460ff169081600a811115610d3c57610d3c611713565b1415610da4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f20746f6b656e2077697468207375636820616464726573730000000000006044820152606401610990565b610a6d818484610e8b565b60006002600085600a811115610dc757610dc7611713565b600a811115610dd857610dd8611713565b8152602081019190915260409081016000205490517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301529091169063dd62ed3e90604401602060405180830381865afa158015610e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e839190611a5d565b949350505050565b60026003600085600a811115610ea357610ea3611713565b600a811115610eb457610eb4611713565b815260208101919091526040016000205460ff166004811115610ed957610ed9611713565b1415610ff6576000546040517fc88a5e6d000000000000000000000000000000000000000000000000000000008152306004820152602481018390526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c88a5e6d90604401600060405180830381600087803b158015610f5657600080fd5b505af1158015610f6a573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015610fd857600080fd5b505af1158015610fec573d6000803e3d6000fd5b505050505061163c565b600380600085600a81111561100d5761100d611713565b600a81111561101e5761101e611713565b815260208101919091526040016000205460ff16600481111561104357611043611713565b14156111aa576000546040517fc88a5e6d000000000000000000000000000000000000000000000000000000008152306004820152602481018390526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c88a5e6d90604401600060405180830381600087803b1580156110c057600080fd5b505af11580156110d4573d6000803e3d6000fd5b505050506002600084600a8111156110ee576110ee611713565b600a8111156110ff576110ff611713565b8152602081019190915260409081016000205490517fa1903eab00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a1903eab90839060240160206040518083038185885af115801561117f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906111a49190611a5d565b5061163c565b60046003600085600a8111156111c2576111c2611713565b600a8111156111d3576111d3611713565b815260208101919091526040016000205460ff1660048111156111f8576111f8611713565b141561148f5760006002600085600a81111561121657611216611713565b600a81111561122757611227611713565b815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c49190611ada565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600860205260409020549091506112fb9060ff163084610e8b565b8073ffffffffffffffffffffffffffffffffffffffff1663095ea7b36002600087600a81111561132d5761132d611713565b600a81111561133e5761133e611713565b81526020810191909152604090810160002054905160e083901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602481018590526044016020604051808303816000875af11580156113c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e69190611a3b565b506002600085600a8111156113fd576113fd611713565b600a81111561140e5761140e611713565b8152602081019190915260409081016000205490517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810184905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f1990604401600060405180830381600087803b158015610fd857600080fd5b60016003600085600a8111156114a7576114a7611713565b600a8111156114b8576114b8611713565b815260208101919091526040016000205460ff1660048111156114dd576114dd611713565b14156115b4576002600084600a8111156114f9576114f9611713565b600a81111561150a5761150a611713565b8152602081019190915260409081016000205490517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f19906044016020604051808303816000875af1158015611590573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a49190611a3b565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f74657374546f6b656e53756974653a20547279696e6720746f207472616e736660448201527f657220756e6b6e6f776e20746f6b656e000000000000000000000000000000006064820152608401610990565b6002600084600a81111561165257611652611713565b600a81111561166357611663611713565b8152602081019190915260409081016000205490517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490529091169063a9059cbb90604401610a2a565b73ffffffffffffffffffffffffffffffffffffffff811681146116f357600080fd5b50565b60006020828403121561170857600080fd5b8135610881816116d1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60208101600b831061175657611756611713565b91905290565b60006020828403121561176e57600080fd5b5035919050565b8035600b8110610cfb57600080fd5b60006020828403121561179657600080fd5b61088182611775565b60005b838110156117ba5781810151838201526020016117a2565b83811115610a6d5750506000910152565b60208152600082518060208401526117ea81604085016020870161179f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000806080858703121561183257600080fd5b61183b85611775565b9350602085013561184b816116d1565b9250604085013561185b816116d1565b9396929550929360600135925050565b602080825282518282018190526000919060409081850190868401855b828110156118c7578151805173ffffffffffffffffffffffffffffffffffffffff90811686529087015116868501529284019290850190600101611888565b5091979650505050505050565b600080604083850312156118e757600080fd5b6118f083611775565b91506020830135611900816116d1565b809150509250929050565b60008060006060848603121561192057600080fd5b61192984611775565b92506020840135611939816116d1565b91506040840135611949816116d1565b809150509250925092565b60008060006060848603121561196957600080fd5b61197284611775565b92506020840135611982816116d1565b929592945050506040919091013590565b6000806000606084860312156119a857600080fd5b8335611929816116d1565b6000806000606084860312156119c857600080fd5b8335611972816116d1565b602081016005831061175657611756611713565b600181811c908216806119fb57607f821691505b60208210811415611a35577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600060208284031215611a4d57600080fd5b8151801515811461088157600080fd5b600060208284031215611a6f57600080fd5b5051919050565b7fffffffff000000000000000000000000000000000000000000000000000000008316815260008251611ab081600485016020870161179f565b919091016004019392505050565b60008251611ad081846020870161179f565b9190910192915050565b600060208284031215611aec57600080fd5b8151610881816116d156fea264697066735822122010fe735ed069aca27931edce4ba2ff14ec7886bf21b0eea685a884f9200fb49e64736f6c634300080a003360c0604052600d60808190526c2bb930b83832b21022ba3432b960991b60a090815261002e916000919061007a565b50604080518082019091526004808252630ae8aa8960e31b602090920191825261005a9160019161007a565b506002805460ff1916601217905534801561007457600080fd5b5061014e565b82805461008690610113565b90600052602060002090601f0160209004810192826100a857600085556100ee565b82601f106100c157805160ff19168380011785556100ee565b828001600101855582156100ee579182015b828111156100ee5782518255916020019190600101906100d3565b506100fa9291506100fe565b5090565b5b808211156100fa57600081556001016100ff565b600181811c9082168061012757607f821691505b6020821081141561014857634e487b7160e01b600052602260045260246000fd5b50919050565b6109548061015d6000396000f3fe6080604052600436106100cb5760003560e01c806340c10f1911610074578063a9059cbb1161004e578063a9059cbb14610225578063d0e30db014610245578063dd62ed3e1461024d57600080fd5b806340c10f19146101c357806370a08231146101e357806395d89b411461021057600080fd5b806323b872dd116100a557806323b872dd146101575780632e1a7d4d14610177578063313ce5671461019757600080fd5b806306fdde03146100df578063095ea7b31461010a57806318160ddd1461013a57600080fd5b366100da576100d8610285565b005b600080fd5b3480156100eb57600080fd5b506100f46102e0565b6040516101019190610703565b60405180910390f35b34801561011657600080fd5b5061012a61012536600461079f565b61036e565b6040519015158152602001610101565b34801561014657600080fd5b50475b604051908152602001610101565b34801561016357600080fd5b5061012a6101723660046107c9565b6103e7565b34801561018357600080fd5b506100d8610192366004610805565b6105fe565b3480156101a357600080fd5b506002546101b19060ff1681565b60405160ff9091168152602001610101565b3480156101cf57600080fd5b506100d86101de36600461079f565b6106a4565b3480156101ef57600080fd5b506101496101fe36600461081e565b60036020526000908152604090205481565b34801561021c57600080fd5b506100f46106e2565b34801561023157600080fd5b5061012a61024036600461079f565b6106ef565b6100d8610285565b34801561025957600080fd5b50610149610268366004610839565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102a490849061089b565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102ed906108b3565b80601f0160208091040260200160405190810160405280929190818152602001828054610319906108b3565b80156103665780601f1061033b57610100808354040283529160200191610366565b820191906000526020600020905b81548152906001019060200180831161034957829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103d69086815260200190565b60405180910390a350600192915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561041957600080fd5b73ffffffffffffffffffffffffffffffffffffffff8416331480159061048f575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105175773ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020548211156104d157600080fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915281208054849290610511908490610907565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061054c908490610907565b909155505073ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260408120805484929061058690849061089b565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516105ec91815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561061a57600080fd5b3360009081526003602052604081208054839290610639908490610907565b9091555050604051339082156108fc029083906000818181858888f1935050505015801561066b573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260036020526040812080548392906106d990849061089b565b90915550505050565b600180546102ed906108b3565b60006106fc3384846103e7565b9392505050565b600060208083528351808285015260005b8181101561073057858101830151858201604001528201610714565b81811115610742576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461079a57600080fd5b919050565b600080604083850312156107b257600080fd5b6107bb83610776565b946020939093013593505050565b6000806000606084860312156107de57600080fd5b6107e784610776565b92506107f560208501610776565b9150604084013590509250925092565b60006020828403121561081757600080fd5b5035919050565b60006020828403121561083057600080fd5b6106fc82610776565b6000806040838503121561084c57600080fd5b61085583610776565b915061086360208401610776565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156108ae576108ae61086c565b500190565b600181811c908216806108c757607f821691505b60208210811415610901577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000828210156109195761091961086c565b50039056fea26469706673582212206ec943fa4e3b70d8fca6c25b6aa26fa18e8f8952ce3bc4d5afcb443bf3097c0564736f6c634300080a003360806040526000600255600060035534801561001a57600080fd5b506111fa8061002a6000396000f3fe60806040526004361061016e5760003560e01c80637a28fb88116100cb578063bdd17e1c1161007f578063dd62ed3e11610059578063dd62ed3e146103ee578063ee7a7c0414610441578063f5eb42dc1461046157600080fd5b8063bdd17e1c146103ad578063cdb9a21c146103c3578063d5002f2e146103d957600080fd5b8063a1903eab116100b0578063a1903eab1461035a578063a457c2d71461036d578063a9059cbb1461038d57600080fd5b80637a28fb88146102f457806395d89b411461031457600080fd5b806323b872dd1161012257806337cfdaca1161010757806337cfdaca1461020d57806339509351146102b457806370a08231146102d457600080fd5b806323b872dd14610278578063313ce5671461029857600080fd5b806318160ddd1161015357806318160ddd1461020d578063192084511461023057806322301f6e1461025057600080fd5b806306fdde0314610185578063095ea7b3146101dd57600080fd5b366101805761017d6000610481565b50005b600080fd5b34801561019157600080fd5b5060408051808201909152601781527f4c6971756964207374616b656420457468657220322e3000000000000000000060208201525b6040516101d49190610f63565b60405180910390f35b3480156101e957600080fd5b506101fd6101f8366004610fff565b610545565b60405190151581526020016101d4565b34801561021957600080fd5b5061022261055b565b6040519081526020016101d4565b34801561023c57600080fd5b5061022261024b366004611029565b61056b565b34801561025c57600080fd5b5061027661026b366004611042565b600391909155600255565b005b34801561028457600080fd5b506101fd610293366004611064565b6105ab565b3480156102a457600080fd5b50604051601281526020016101d4565b3480156102c057600080fd5b506101fd6102cf366004610fff565b610696565b3480156102e057600080fd5b506102226102ef3660046110a0565b6106d9565b34801561030057600080fd5b5061022261030f366004611029565b61070e565b34801561032057600080fd5b5060408051808201909152600581527f737445544800000000000000000000000000000000000000000000000000000060208201526101c7565b6102226103683660046110a0565b61073a565b34801561037957600080fd5b506101fd610388366004610fff565b610745565b34801561039957600080fd5b506101fd6103a8366004610fff565b6107f9565b3480156103b957600080fd5b5061022260035481565b3480156103cf57600080fd5b5061022260025481565b3480156103e557600080fd5b50610222610806565b3480156103fa57600080fd5b506102226104093660046110bb565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b34801561044d57600080fd5b5061027661045c366004610fff565b610811565b34801561046d57600080fd5b5061022261047c3660046110a0565b61081f565b60003334806104f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f5a45524f5f4445504f534954000000000000000000000000000000000000000060448201526064015b60405180910390fd5b60006104fc8261056b565b9050806105065750805b8160036000828254610518919061111d565b909155506105289050838261084a565b61053383838761093b565b61053d8382610992565b949350505050565b60006105523384846109ea565b50600192915050565b600061056660035490565b905090565b60008061057760035490565b9050806105875750600092915050565b6105a48161059e61059760025490565b8690610b52565b90610b5e565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001602090815260408083203384529091528120548281101561066c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f5452414e534645525f414d4f554e545f455843454544535f414c4c4f57414e4360448201527f450000000000000000000000000000000000000000000000000000000000000060648201526084016104e8565b610677858585610b6a565b61068b85336106868487610bef565b6109ea565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916105529185906106869086610bfb565b73ffffffffffffffffffffffffffffffffffffffff81166000908152602081905260408120546107089061070e565b92915050565b60008061071a60025490565b90508061072a5750600092915050565b6105a48161059e61059760035490565b600061070882610481565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156107e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4445435245415345445f414c4c4f57414e43455f42454c4f575f5a45524f000060448201526064016104e8565b6107ef33856106868487610bef565b5060019392505050565b6000610552338484610b6a565b600061056660025490565b61081b8282610c07565b5050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040812054610708565b73ffffffffffffffffffffffffffffffffffffffff82166108c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4d494e545f544f5f5448455f5a45524f5f41444452455353000000000000000060448201526064016104e8565b80600260008282546108d9919061111d565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205461090e9082610bfb565b73ffffffffffffffffffffffffffffffffffffffff90921660009081526020819052604090209190915550565b6040805183815273ffffffffffffffffffffffffffffffffffffffff83811660208301528516917fed8dd430b1e4bba98e943dc5b157cf7b54d9e12916d6c474ff5733a95001d03b910160405180910390a2505050565b73ffffffffffffffffffffffffffffffffffffffff821660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6109d58461070e565b60405190815260200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff8316610a67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f415050524f56455f46524f4d5f5a45524f5f414444524553530000000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff8216610ae4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f415050524f56455f544f5f5a45524f5f4144445245535300000000000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006105a48284611135565b60006105a48284611172565b6000610b758261056b565b9050610b82848483610d64565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610be191815260200190565b60405180910390a350505050565b60006105a482846111ad565b60006105a4828461111d565b73ffffffffffffffffffffffffffffffffffffffff8216610c84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4255524e5f46524f4d5f5448455f5a45524f5f4144445245535300000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205480821115610d14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4255524e5f414d4f554e545f455843454544535f42414c414e4345000000000060448201526064016104e8565b8160026000828254610d2691906111ad565b90915550610d3690508183610bef565b73ffffffffffffffffffffffffffffffffffffffff9093166000908152602081905260409020929092555050565b73ffffffffffffffffffffffffffffffffffffffff8316610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f5452414e534645525f46524f4d5f5448455f5a45524f5f41444452455353000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff8216610e5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f5452414e534645525f544f5f5448455f5a45524f5f414444524553530000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205480821115610eee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5452414e534645525f414d4f554e545f455843454544535f42414c414e43450060448201526064016104e8565b610ef88183610bef565b73ffffffffffffffffffffffffffffffffffffffff8086166000908152602081905260408082209390935590851681522054610f349083610bfb565b73ffffffffffffffffffffffffffffffffffffffff909316600090815260208190526040902092909255505050565b600060208083528351808285015260005b81811015610f9057858101830151858201604001528201610f74565b81811115610fa2576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ffa57600080fd5b919050565b6000806040838503121561101257600080fd5b61101b83610fd6565b946020939093013593505050565b60006020828403121561103b57600080fd5b5035919050565b6000806040838503121561105557600080fd5b50508035926020909101359150565b60008060006060848603121561107957600080fd5b61108284610fd6565b925061109060208501610fd6565b9150604084013590509250925092565b6000602082840312156110b257600080fd5b6105a482610fd6565b600080604083850312156110ce57600080fd5b6110d783610fd6565b91506110e560208401610fd6565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611130576111306110ee565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561116d5761116d6110ee565b500290565b6000826111a8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000828210156111bf576111bf6110ee565b50039056fea2646970667358221220a5b4f31162ba2b8b3424cef84b31ef91d05a825243602b5fdf758ffb49b8246364736f6c634300080a003360a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a003360c06040523480156200001157600080fd5b506040516200170938038062001709833981016040819052620000349162000266565b8351849084906200004d906003906020850190620000f3565b50805162000063906004906020840190620000f3565b505050620000806200007a6200009d60201b60201c565b620000a1565b60ff9091166080526001600160a01b031660a05250620003479050565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b82805462000101906200030a565b90600052602060002090601f01602090048101928262000125576000855562000170565b82601f106200014057805160ff191683800117855562000170565b8280016001018555821562000170579182015b828111156200017057825182559160200191906001019062000153565b506200017e92915062000182565b5090565b5b808211156200017e576000815560010162000183565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c157600080fd5b81516001600160401b0380821115620001de57620001de62000199565b604051601f8301601f19908116603f0116810190828211818310171562000209576200020962000199565b816040528381526020925086838588010111156200022657600080fd5b600091505b838210156200024a57858201830151818301840152908201906200022b565b838211156200025c5760008385830101525b9695505050505050565b600080600080608085870312156200027d57600080fd5b84516001600160401b03808211156200029557600080fd5b620002a388838901620001af565b95506020870151915080821115620002ba57600080fd5b50620002c987828801620001af565b935050604085015160ff81168114620002e157600080fd5b60608601519092506001600160a01b0381168114620002ff57600080fd5b939692955090935050565b600181811c908216806200031f57607f821691505b602082108114156200034157634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05161138e6200037b600039600081816101f70152818161041f0152610600015260006101a2015261138e6000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80636f307dc3116100b257806395d89b4111610081578063a9059cbb11610066578063a9059cbb146102b5578063dd62ed3e146102c8578063f2fde38b1461030e57600080fd5b806395d89b411461029a578063a457c2d7146102a257600080fd5b80636f307dc3146101f257806370a082311461023e578063715018a6146102745780638da5cb5b1461027c57600080fd5b806323b872dd116100ee57806323b872dd14610188578063313ce5671461019b57806339509351146101cc57806340c10f19146101df57600080fd5b806306fdde0314610120578063095ea7b31461013e57806318160ddd146101615780631e9a695014610173575b600080fd5b610128610321565b604051610135919061112d565b60405180910390f35b61015161014c3660046111c9565b6103b3565b6040519015158152602001610135565b6002545b604051908152602001610135565b6101866101813660046111c9565b6103c9565b005b6101516101963660046111f3565b610491565b60405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610135565b6101516101da3660046111c9565b61057c565b6101866101ed3660046111c9565b6105c5565b6102197f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b61016561024c36600461122f565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610186610691565b60055473ffffffffffffffffffffffffffffffffffffffff16610219565b61012861071e565b6101516102b03660046111c9565b61072d565b6101516102c33660046111c9565b610805565b6101656102d6366004611251565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b61018661031c36600461122f565b610812565b60606003805461033090611284565b80601f016020809104026020016040519081016040528092919081815260200182805461035c90611284565b80156103a95780601f1061037e576101008083540402835291602001916103a9565b820191906000526020600020905b81548152906001019060200180831161038c57829003601f168201915b5050505050905090565b60006103c0338484610942565b50600192915050565b6103d33382610af5565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015610468573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048c91906112d8565b505050565b600061049e848484610ce2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6105718533858403610942565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916103c09185906105c0908690611329565b610942565b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906323b872dd906064016020604051808303816000875af115801561065e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068291906112d8565b5061068d8282610f96565b5050565b60055473ffffffffffffffffffffffffffffffffffffffff163314610712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161055b565b61071c60006110b6565b565b60606004805461033090611284565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156107ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161055b565b6107fb3385858403610942565b5060019392505050565b60006103c0338484610ce2565b60055473ffffffffffffffffffffffffffffffffffffffff163314610893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161055b565b73ffffffffffffffffffffffffffffffffffffffff8116610936576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161055b565b61093f816110b6565b50565b73ffffffffffffffffffffffffffffffffffffffff83166109e4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff8216610a87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8216610b98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015610c4e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290610c8a908490611341565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff8216610e28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610ede576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610f22908490611329565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f8891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161055b565b80600260008282546110259190611329565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152602081905260408120805483929061105f908490611329565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208083528351808285015260005b8181101561115a5785810183015185820160400152820161113e565b8181111561116c576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146111c457600080fd5b919050565b600080604083850312156111dc57600080fd5b6111e5836111a0565b946020939093013593505050565b60008060006060848603121561120857600080fd5b611211846111a0565b925061121f602085016111a0565b9150604084013590509250925092565b60006020828403121561124157600080fd5b61124a826111a0565b9392505050565b6000806040838503121561126457600080fd5b61126d836111a0565b915061127b602084016111a0565b90509250929050565b600181811c9082168061129857607f821691505b602082108114156112d2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156112ea57600080fd5b8151801515811461124a57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561133c5761133c6112fa565b500190565b600082821015611353576113536112fa565b50039056fea26469706673582212203a6db30cd3c097921df4156794aa7973eb848711deeb2cffd7c54a9df1fdb0a564736f6c634300080a003360a060405234801561001057600080fd5b506040516106ca3803806106ca83398101604081905261002f9161006c565b60009190915560ff166080526001805460506001600160501b031991821681179092556004805490911690911790554260028190556003556100a2565b6000806040838503121561007f57600080fd5b82519150602083015160ff8116811461009757600080fd5b809150509250929050565b60805161060e6100bc600039600060d3015261060e6000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80639a6fc8f511610081578063d62ada111161005b578063d62ada11146102dc578063f7a30806146102f4578063feaf968c1461030757600080fd5b80639a6fc8f5146101cd578063bd18ad531461023a578063cd653afc1461024d57600080fd5b806354fd4d50116100b257806354fd4d501461012d57806367e8d83d1461013c5780637284e4161461018e57600080fd5b8063313ce567146100ce5780633fd0875f1461010c575b600080fd5b6100f57f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020015b60405180910390f35b6004546a0100000000000000000000900460ff166040516101039190610441565b60405160018152602001610103565b61018c61014a366004610482565b600480549115156c01000000000000000000000000027fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff909216919091179055565b005b604080518082018252600c81527f7072696365206f7261636c6500000000000000000000000000000000000000006020820152905161010391906104ab565b6102036101db36600461053d565b60015460005460025460035460045469ffffffffffffffffffff948516941691939590929450565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610103565b61018c610248366004610558565b61030f565b61018c61025b366004610579565b6001805469ffffffffffffffffffff9586167fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090911617905560029290925560035560048054919092167fffffffffffffffffffffffffffffffffffffffff00ff00000000000000000000909116176b020000000000000000000000179055565b6102e461035f565b6040519015158152602001610103565b61018c6103023660046105bf565b600055565b610203610385565b600480548291907fffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff166b01000000000000000000000083600281111561035757610357610412565b021790555050565b600454600090610380906b010000000000000000000000900460ff166103d6565b905090565b60008060008060006004600c9054906101000a900460ff16156103a757600080fd5b505060015460005460025460035460045469ffffffffffffffffffff9485169893975091955093509190911690565b600060028260028111156103ec576103ec610412565b14156103f757600080fd5b600182600281111561040b5761040b610412565b1492915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016006831061047c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561049457600080fd5b813580151581146104a457600080fd5b9392505050565b600060208083528351808285015260005b818110156104d8578581018301518582016040015282016104bc565b818111156104ea576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803569ffffffffffffffffffff8116811461053857600080fd5b919050565b60006020828403121561054f57600080fd5b6104a48261051e565b60006020828403121561056a57600080fd5b8135600381106104a457600080fd5b6000806000806080858703121561058f57600080fd5b6105988561051e565b935060208501359250604085013591506105b46060860161051e565b905092959194509250565b6000602082840312156105d157600080fd5b503591905056fea264697066735822122014874f7a973b86501c4c1a8be32490fe902c8f088ee234d25f9b2497e19f9e5264736f6c634300080a003360806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d00011790553480156200003a57600080fd5b5060405162031ed638038062031ed68339810160408190526200005d91620015e8565b81816040516200006d9062001595565b604051809103906000f0801580156200008a573d6000803e3d6000fd5b5050600180546001600160a01b0319166001600160a01b038416908117909155604080516325abd85f60e11b81529051634b57b0be916004808201926020929091908290030181865afa158015620000e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200010c91906200162a565b73c4375b7de8af5a38a93548eb8453a498222c4ff26040516200012f90620015a3565b6001600160a01b03928316815291166020820152604001604051809103906000f08015801562000163573d6000803e3d6000fd5b50600380546001600160a01b0319166001600160a01b039290921691821790556040805163de28735960e01b8152905163de287359916004808201926020929091908290030181865afa158015620001bf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e591906200162a565b604051634910832f60e01b81527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526001600160a01b039190911690634910832f90602401600060405180830381600087803b1580156200023d57600080fd5b505af115801562000252573d6000803e3d6000fd5b50505050600360009054906101000a90046001600160a01b03166001600160a01b031663de2873596040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d091906200162a565b60035460405163f2fde38b60e01b81526001600160a01b03918216600482015291169063f2fde38b90602401600060405180830381600087803b1580156200031757600080fd5b505af11580156200032c573d6000803e3d6000fd5b505060035460015460408051636ca42ae360e01b815290516001600160a01b039384169550638874ff1f94509190921691636ca42ae39160048083019260009291908290030181865afa15801562000388573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620003b29190810190620016c5565b6040518263ffffffff1660e01b8152600401620003d09190620017b6565b600060405180830381600087803b158015620003eb57600080fd5b505af115801562000400573d6000803e3d6000fd5b50505050600360009054906101000a90046001600160a01b03166001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000458573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200047e91906200162a565b600280546001600160a01b0319166001600160a01b039290921691821790556040805163120d150d60e31b81529051639068a868916004808201926020929091908290030181865afa158015620004d9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004ff91906200162a565b600480546001600160a01b0319166001600160a01b0392831617815560025460408051631f94a27560e31b81529051919093169263fca513a892818101926020929091908290030181865afa1580156200055d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200058391906200162a565b600880546001600160a01b0319166001600160a01b0392831617905560025460408051630873769560e01b81529051919092169163087376959160048083019260209291908290030181865afa158015620005e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200060891906200162a565b600780546001600160a01b0319166001600160a01b039283161790556002546040805163c513c9bb60e01b81529051919092169163c513c9bb9160048083019260209291908290030181865afa15801562000667573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200068d91906200162a565b600680546001600160a01b0319166001600160a01b039283161790556001546040516367b4264560e01b81529116906367b4264590620006d29084906004016200184d565b602060405180830381865afa158015620006f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200071691906200162a565b600980546001600160a01b0319166001600160a01b0392831617905560035460408051630a55006360e21b815290519190921691632954018c9160048083019260209291908290030181865afa15801562000775573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200079b91906200162a565b6009546040516001600160a01b0390911690620007b890620015b2565b6001600160a01b03928316815291166020820152604001604051809103906000f080158015620007ec573d6000803e3d6000fd5b50600580546001600160a01b0319166001600160a01b039283169081179091556001549091169063eebab8ef90839062000825620011ec565b6200083290600a62001879565b6040518463ffffffff1660e01b815260040162000852939291906200189b565b600060405180830381600087803b1580156200086d57600080fd5b505af115801562000882573d6000803e3d6000fd5b505060065460055460405163d914cd4b60e01b81526001600160a01b0391821660048201529116925063d914cd4b9150602401600060405180830381600087803b158015620008d057600080fd5b505af1158015620008e5573d6000803e3d6000fd5b5050600f80546001600160801b031916670de0b6b3a76400001790555062000911925050620011ec9050565b6200091e90600a62001879565b600f80546001600160801b03908116600160801b9382168402818117938490556040805160a0810182529184169092178152939092041660208301526000919081016200096b84620012ab565b815260006020820181905260409182018190526005549151929350916001600160a01b039091169083908390620009a290620015c0565b620009b093929190620018c5565b604051809103906000f080158015620009cd573d6000803e3d6000fd5b509050806001600160a01b031663c12c21c06040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a0f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a3591906200162a565b600b60006101000a8154816001600160a01b0302191690836001600160a01b03160217905550806001600160a01b0316632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a9a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ac091906200162a565b600c60006101000a8154816001600160a01b0302191690836001600160a01b03160217905550806001600160a01b031663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000b25573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b4b91906200162a565b600d80546001600160a01b0319166001600160a01b03928316179055600654600b5460405163e26b2f6360e01b8152908316600482015291169063e26b2f6390602401600060405180830381600087803b15801562000ba957600080fd5b505af115801562000bbe573d6000803e3d6000fd5b5050600054600554604080516318caf8e360e31b81526001600160a01b039283166004808301919091526024820192909252604481019190915263141bdbdb60e21b60648201526201000090920416925063c657c7189150608401600060405180830381600087803b15801562000c3457600080fd5b505af115801562000c49573d6000803e3d6000fd5b5050600054600c8054604080516318caf8e360e31b81526001600160a01b039283166004820152602481019190915260448101929092526b43726564697446616361646560a01b606483015262010000909204909116925063c657c7189150608401600060405180830381600087803b15801562000cc657600080fd5b505af115801562000cdb573d6000803e3d6000fd5b5050600054600b54604080516318caf8e360e31b81526001600160a01b0392831660048201526024810191909152600d60448201526c21b932b234ba26b0b730b3b2b960991b60648201526201000090920416925063c657c7189150608401600060405180830381600087803b15801562000d5557600080fd5b505af115801562000d6a573d6000803e3d6000fd5b5050600054600d54604080516318caf8e360e31b81526001600160a01b0392831660048201526024810191909152601260448201527121b932b234ba21b7b73334b3bab930ba37b960711b60648201526201000090920416925063c657c7189150608401600060405180830381600087803b15801562000de957600080fd5b505af115801562000dfe573d6000803e3d6000fd5b50506001546001600160a01b0316915063eebab8ef90508473f39fd6e51aad88f6f4ce6ab8827279cfffb9226662000e35620011ec565b6040518463ffffffff1660e01b815260040162000e55939291906200189b565b600060405180830381600087803b15801562000e7057600080fd5b505af115801562000e85573d6000803e3d6000fd5b50506001546001600160a01b0316915063eebab8ef9050847390f79bf6eb2c4f870365e785982e1f101e93b90662000ebc620011ec565b6040518463ffffffff1660e01b815260040162000edc939291906200189b565b600060405180830381600087803b15801562000ef757600080fd5b505af115801562000f0c573d6000803e3d6000fd5b505060005460405163ca669fa760e01b815273f39fd6e51aad88f6f4ce6ab8827279cfffb922666004820152620100009091046001600160a01b0316925063ca669fa79150602401600060405180830381600087803b15801562000f6f57600080fd5b505af115801562000f84573d6000803e3d6000fd5b5050600954600b5460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529116925063095ea7b391506044016020604051808303816000875af115801562000fdf573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001005919062001989565b5060005460405163ca669fa760e01b81527390f79bf6eb2c4f870365e785982e1f101e93b9066004820152620100009091046001600160a01b03169063ca669fa790602401600060405180830381600087803b1580156200106557600080fd5b505af11580156200107a573d6000803e3d6000fd5b5050600954600b5460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529116925063095ea7b391506044016020604051808303816000875af1158015620010d5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010fb919062001989565b5060025460405163f2fde38b60e01b81527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526001600160a01b039091169063f2fde38b90602401600060405180830381600087803b1580156200115657600080fd5b505af11580156200116b573d6000803e3d6000fd5b505060075460405163f2fde38b60e01b81527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b158015620011c957600080fd5b505af1158015620011de573d6000803e3d6000fd5b5050505050505050620019e1565b600180546040516367b4264560e01b81526000926001600160a01b03909216916367b42645916200122191906004016200184d565b602060405180830381865afa1580156200123f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200126591906200162a565b6009546001600160a01b03908116911614620012955762001290670de0b6b3a764000060c862001879565b905090565b62001290670de0b6b3a7640000614e2062001879565b6040805160c08101825260026080820190815261232860a08301528152815180830183526005815261226060208281019190915282015281518083018352606092600092919082019080600387600a8111156200130c576200130c62001814565b146200131a5760036200131d565b60015b600a81111562001331576200133162001814565b815261206c6020918201529082526040805180820190915260048152611c84818301529101529050612454600a6000858281111562001374576200137462001814565b600a81111562001388576200138862001814565b815260208101919091526040908101600020805461ffff9390931661ffff19909316929092179091558051600480825260a0820190925281816020015b6040805180820190915260008082526020820152815260200190600190039081620013c557905050925060005b818110156200158d57828160048110620014105762001410620019ad565b602002015160200151600a6000858460048110620014325762001432620019ad565b602002015151600a8111156200144c576200144c62001814565b600a81111562001460576200146062001814565b815260208101919091526040908101600020805461ffff191661ffff9390931692909217909155805180820190915260015481906001600160a01b03166367b42645868560048110620014b757620014b7620019ad565b6020020151516040516001600160e01b031960e084901b168152620014e091906004016200184d565b602060405180830381865afa158015620014fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200152491906200162a565b6001600160a01b03168152602001848360048110620015475762001547620019ad565b60200201516020015161ffff168152508482815181106200156c576200156c620019ad565b602002602001018190525080806200158490620019c3565b915050620013f2565b505050919050565b6105e6806200bc5283390190565b62011105806200c23883390190565b6110a7806201d33d83390190565b62013af2806201e3e483390190565b6001600160a01b0381168114620015e557600080fd5b50565b60008060408385031215620015fc57600080fd5b82516200160981620015cf565b6020840151909250600b81106200161f57600080fd5b809150509250929050565b6000602082840312156200163d57600080fd5b81516200164a81620015cf565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156200168c576200168c62001651565b60405290565b604051601f8201601f191681016001600160401b0381118282101715620016bd57620016bd62001651565b604052919050565b60006020808385031215620016d957600080fd5b82516001600160401b0380821115620016f157600080fd5b818501915085601f8301126200170657600080fd5b8151818111156200171b576200171b62001651565b6200172b848260051b0162001692565b818152848101925060069190911b8301840190878211156200174c57600080fd5b928401925b81841015620017ab57604084890312156200176c5760008081fd5b6200177662001667565b84516200178381620015cf565b8152848601516200179481620015cf565b818701528352604093909301929184019162001751565b979650505050505050565b602080825282518282018190526000919060409081850190868401855b828110156200180757815180516001600160a01b0390811686529087015116868501529284019290850190600101620017d3565b5091979650505050505050565b634e487b7160e01b600052602160045260246000fd5b600b81106200184957634e487b7160e01b600052602160045260246000fd5b9052565b602081016200185d82846200182a565b92915050565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161562001896576200189662001863565b500290565b60608101620018ab82866200182a565b6001600160a01b0393909316602082015260400152919050565b6001600160a01b0384811682526060602080840182905285516001600160801b039081169285019290925285810151909116608084015260408086015160a085810152805161010086018190526000949392918301919085906101208801905b808310156200195657845180518816835286015161ffff168683015293850193600192909201919083019062001925565b5060608a01516001600160a01b031660c0890152608090990151151560e088015250909401949094525092949350505050565b6000602082840312156200199c57600080fd5b815180151581146200164a57600080fd5b634e487b7160e01b600052603260045260246000fd5b6000600019821415620019da57620019da62001863565b5060010190565b61a26180620019f16000396000f3fe60806040523480156200001157600080fd5b5060043610620001ad5760003560e01c806362eb33e311620000f5578063ba414fa61162000097578063de287359116200006e578063de2873591462000479578063f9aa028a146200049a578063fa7626d414620004bb57600080fd5b8063ba414fa6146200041c578063c12c21c01462000437578063d46b9330146200045857600080fd5b80637785ff5d11620000cc5780637785ff5d14620003da5780639408b63f14620003e45780639dd55b45146200040557600080fd5b806362eb33e314620003775780636b70b04c14620003985780636f307dc314620003b957600080fd5b80632f7a1881116200015f5780635e813a8b11620001365780635e813a8b146200030c5780635f7c9bd0146200032d57806362186905146200034657600080fd5b80632f7a188114620002be578063406c8e2f14620002df57806354cae56e146200030057600080fd5b80630e42bc5d11620001945780630e42bc5d14620002305780632630c12f14620002565780632954018c146200029d57600080fd5b80630bc772da14620001b25780630c75f80614620001f5575b600080fd5b600f54620001cf906fffffffffffffffffffffffffffffffff1681565b6040516fffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6200021c62000206366004620012dd565b600a6020526000908152604090205461ffff1681565b60405161ffff9091168152602001620001ec565b6200024762000241366004620012dd565b620004c9565b604051620001ec919062001307565b600854620002779073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001620001ec565b600254620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600c54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600154620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200030a6200081f565b005b600454620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200033762000b1a565b604051908152602001620001ec565b600f54620001cf9070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681565b600654620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600554620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600954620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200030a62000c0c565b600e54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200030a6200041636600462001398565b62000fd6565b6200042662001149565b6040519015158152602001620001ec565b600b54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600354620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600754620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600d54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600054620004269060ff1681565b6040805160c08101825260026080820190815261232860a08301528152815180830183526005815261226060208281019190915282015281518083018352606092600092919082019080600387600a8111156200052a576200052a620013c7565b14620005385760036200053b565b60015b600a8111156200054f576200054f620013c7565b815261206c6020918201529082526040805180820190915260048152611c84818301529101529050612454600a60008582811115620005925762000592620013c7565b600a811115620005a657620005a6620013c7565b815260208101919091526040908101600020805461ffff939093167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909316929092179091558051600480825260a0820190925281816020015b60408051808201909152600080825260208201528152602001906001900390816200060057905050925060005b8181101562000817578281600481106200064b576200064b620013f6565b602002015160200151600a60008584600481106200066d576200066d620013f6565b602002015151600a811115620006875762000687620013c7565b600a8111156200069b576200069b620013c7565b81526020810191909152604090810160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff93909316929092179091558051808201909152600154819073ffffffffffffffffffffffffffffffffffffffff166367b426458685600481106200071c576200071c620013f6565b6020020151516040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526200075d919060040162001425565b602060405180830381865afa1580156200077b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007a1919062001467565b73ffffffffffffffffffffffffffffffffffffffff168152602001848360048110620007d157620007d1620013f6565b60200201516020015161ffff16815250848281518110620007f657620007f6620013f6565b602002602001018190525080806200080e90620014b6565b9150506200062d565b505050919050565b6000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16906306447d5690602401600060405180830381600087803b158015620008a457600080fd5b505af1158015620008b9573d6000803e3d6000fd5b5050600b5460405173ffffffffffffffffffffffffffffffffffffffff909116925060009150600190620008ed90620012b3565b73ffffffffffffffffffffffffffffffffffffffff938416815292909116602083015215156040820152606001604051809103906000f08015801562000937573d6000803e3d6000fd5b50600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316908117909155600d546040517f526a41e80000000000000000000000000000000000000000000000000000000081526004810192909252600160248301529091169063526a41e890604401600060405180830381600087803b158015620009dc57600080fd5b505af1158015620009f1573d6000803e3d6000fd5b5050600d5473ffffffffffffffffffffffffffffffffffffffff16915063eb9606df905062000a22426001620014f2565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815264ffffffffff90911660048201526024015b600060405180830381600087803b15801562000a7b57600080fd5b505af115801562000a90573d6000803e3d6000fd5b50505050600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562000aff57600080fd5b505af115801562000b14573d6000803e3d6000fd5b50505050565b600180546040517f67b4264500000000000000000000000000000000000000000000000000000000815260009273ffffffffffffffffffffffffffffffffffffffff909216916367b426459162000b75919060040162001425565b602060405180830381865afa15801562000b93573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000bb9919062001467565b60095473ffffffffffffffffffffffffffffffffffffffff90811691161462000bf65762000bf1670de0b6b3a764000060c86200150d565b905090565b62000bf1670de0b6b3a7640000614e206200150d565b60025460405173ffffffffffffffffffffffffffffffffffffffff9091169062000c3690620012c1565b73ffffffffffffffffffffffffffffffffffffffff90911681526060602082018190526008908201527f446567656e4e4654000000000000000000000000000000000000000000000000608082015260a060408201819052600a908201527f476561722d446567656e0000000000000000000000000000000000000000000060c082015260e001604051809103906000f08015801562000cda573d6000803e3d6000fd5b50600e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283161790556000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015262010000909104909116906306447d5690602401600060405180830381600087803b15801562000d8e57600080fd5b505af115801562000da3573d6000803e3d6000fd5b5050600e546040517ffca3b5aa0000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff909116925063fca3b5aa9150602401600060405180830381600087803b15801562000e2757600080fd5b505af115801562000e3c573d6000803e3d6000fd5b5050600b54600e5460405173ffffffffffffffffffffffffffffffffffffffff92831694509116915060009062000e7390620012b3565b73ffffffffffffffffffffffffffffffffffffffff938416815292909116602083015215156040820152606001604051809103906000f08015801562000ebd573d6000803e3d6000fd5b50600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316908117909155600d546040517f526a41e80000000000000000000000000000000000000000000000000000000081526004810192909252600160248301529091169063526a41e890604401600060405180830381600087803b15801562000f6257600080fd5b505af115801562000f77573d6000803e3d6000fd5b5050600e54600c546040517f4610f6ac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015291169250634610f6ac915060240162000a60565b600081600860405162000fe990620012cf565b91825260ff166020820152604001604051809103906000f08015801562001014573d6000803e3d6000fd5b506000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291925062010000900473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b1580156200109c57600080fd5b505af1158015620010b1573d6000803e3d6000fd5b50506008546040517fe8a97a3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528581166024830152909116925063e8a97a3e9150604401600060405180830381600087803b1580156200112b57600080fd5b505af115801562001140573d6000803e3d6000fd5b50505050505050565b60008054610100900460ff16156200116a5750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620012ae5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000008284015282518083038401815260608301909352600092909162001212917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016200158b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526200124c91620015c9565b6000604051808303816000865af19150503d80600081146200128b576040519150601f19603f3d011682016040523d82523d6000602084013e62001290565b606091505b5091505080806020019051810190620012aa9190620015d7565b9150505b919050565b615e9780620015fc83390190565b6126cf806200749383390190565b6106ca8062009b6283390190565b600060208284031215620012f057600080fd5b8135600b81106200130057600080fd5b9392505050565b602080825282518282018190526000919060409081850190868401855b8281101562001365578151805173ffffffffffffffffffffffffffffffffffffffff16855286015161ffff1686850152928401929085019060010162001324565b5091979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff811681146200139557600080fd5b50565b60008060408385031215620013ac57600080fd5b8235620013b98162001372565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60208101600b831062001461577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000602082840312156200147a57600080fd5b8151620013008162001372565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415620014eb57620014eb62001487565b5060010190565b6000821982111562001508576200150862001487565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562001548576200154862001487565b500290565b6000815160005b8181101562001570576020818501810151868301520162001554565b8181111562001580576000828601525b509290920192915050565b7fffffffff00000000000000000000000000000000000000000000000000000000831681526000620015c160048301846200154d565b949350505050565b60006200130082846200154d565b600060208284031215620015ea57600080fd5b815180151581146200130057600080fdfe6101406040523480156200001257600080fd5b5060405162005e9738038062005e97833981016040819052620000359162000198565b60016000556001600160a01b0383166200006257604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038316608081905260408051636f307dc360e01b81529051636f307dc3916004808201926020929091908290030181865afa158015620000ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d39190620001ea565b6001600160a01b031660a0816001600160a01b031681525050826001600160a01b0316634f0e0ef36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200012b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001519190620001ea565b6001600160a01b0390811660c0529190911660e0819052151561010052151561012052506200020f565b80516001600160a01b03811681146200019357600080fd5b919050565b600080600060608486031215620001ae57600080fd5b620001b9846200017b565b9250620001c9602085016200017b565b915060408401518015158114620001df57600080fd5b809150509250925092565b600060208284031215620001fd57600080fd5b62000208826200017b565b9392505050565b60805160a05160c05160e0516101005161012051615a86620004116000396000818161061101528181612fb5015261481f01526000818161031701528181610dde015281816144f901526146e5015260008181610557015281816146a901526147a901526000818161034b0152818161387d015261392d01526000818161047301528181611bfe0152818161274f0152818161280d0152818161366a01526137dd015260008181610665015281816109d801528181610b0301528181610bd501528181610cdd01528181610e6501528181610fe30152818161114e0152818161120e0152818161132e015281816114510152818161162b01528181611708015281816117e0015281816119e501528181611b1201528181611d9501528181611ed5015281816120040152818161216801528181612290015281816123c601528181612568015281816126390152818161266f0152818161293d01528181612a2101528181612a8a01528181612bde01528181612d2601528181612e6801528181612ec2015281816130a10152818161311b015281816131b401528181613341015281816134c10152818161358a0152818161372f01528181613a1a01528181613b2e01528181613dbb015281816142200152818161432801528181614492015281816148e7015281816149e801528181614aae0152614d8f0152615a866000f3fe6080604052600436106102695760003560e01c8063860aefcf11610153578063c7de38a6116100cb578063dfd594651161007f578063eb9606df11610064578063eb9606df1461081e578063f9eaee0d1461083e578063ffd9b9071461085e57600080fd5b8063dfd59465146107de578063e1f21c67146107fe57600080fd5b8063cff0ab96116100b0578063cff0ab96146106ef578063d9ccbec114610783578063dcf65482146107be57600080fd5b8063c7de38a6146106a7578063caa5c23f146106dc57600080fd5b80639c55a05411610122578063b55bb84b11610107578063b55bb84b14610633578063c12c21c014610653578063c690908a1461068757600080fd5b80639c55a054146105df578063b1836d32146105ff57600080fd5b8063860aefcf146104db5780639408b63f146105455780639b67ab30146105795780639be0536a146105bd57600080fd5b80635d91a0e0116101e65780636d19b486116101b55780637071b7c51161019a5780637071b7c51461049557806379c0ef91146104a857806382871ace146104c857600080fd5b80636d19b486146104415780636f307dc31461046157600080fd5b80635d91a0e0146103e85780635f73fbec146103fb578063601d66f61461040e5780636c8f225d1461042e57600080fd5b80633d9287fa1161023d5780635019e20a116102225780635019e20a1461039257806354fd4d50146103b257806359781034146103d557600080fd5b80633d9287fa146103055780634f0e0ef31461033957600080fd5b8062842b571461026e578063256ac915146102905780632a7ba1f7146102c55780632b7c7b11146102e5575b600080fd5b34801561027a57600080fd5b5061028e6102893660046151bf565b61087e565b005b34801561029c57600080fd5b506102b06102ab3660046151f8565b61098e565b60405190151581526020015b60405180910390f35b3480156102d157600080fd5b5061028e6102e0366004615215565b610a61565b3480156102f157600080fd5b5061028e610300366004615215565b610c3b565b34801561031157600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561034557600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102bc565b34801561039e57600080fd5b5061028e6103ad3660046151f8565b610d6a565b3480156103be57600080fd5b506103c7600281565b6040519081526020016102bc565b61028e6103e336600461522e565b61108c565b61028e6103f63660046152bb565b611275565b61028e610409366004615340565b611589565b34801561041a57600080fd5b5061028e6104293660046153d8565b6117de565b61028e61043c36600461541b565b611900565b34801561044d57600080fd5b506102b061045c3660046151f8565b611c31565b34801561046d57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b61028e6104a336600461546e565b611c60565b3480156104b457600080fd5b5061036d6104c3366004615215565b611f3e565b61028e6104d63660046152bb565b611f4b565b3480156104e757600080fd5b5060025461051c906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041682565b604080516fffffffffffffffffffffffffffffffff9384168152929091166020830152016102bc565b34801561055157600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561058557600080fd5b506004546040805167ffffffffffffffff608084901c1681526fffffffffffffffffffffffffffffffff9092166020830152016102bc565b3480156105c957600080fd5b506105d261227d565b6040516102bc91906154e2565b3480156105eb57600080fd5b5061028e6105fa36600461553c565b61228e565b34801561060b57600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561063f57600080fd5b5061028e61064e3660046151f8565b6123c4565b34801561065f57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561069357600080fd5b5061028e6106a23660046151f8565b6124c6565b3480156106b357600080fd5b506106c76106c23660046151f8565b612668565b604080519283526020830191909152016102bc565b61028e6106ea366004615557565b61289b565b3480156106fb57600080fd5b5060015461074e906fffffffffffffffffffffffffffffffff811690700100000000000000000000000000000000810460ff169071010000000000000000000000000000000000900464ffffffffff1683565b604080516fffffffffffffffffffffffffffffffff9094168452911515602084015264ffffffffff16908201526060016102bc565b34801561078f57600080fd5b506102b061079e366004615599565b600360209081526000928352604080842090915290825290205460ff1681565b3480156107ca57600080fd5b5061028e6107d93660046151f8565b612a88565b3480156107ea57600080fd5b506103c76107f93660046151f8565b612b86565b34801561080a57600080fd5b5061028e61081936600461522e565b612c6d565b34801561082a57600080fd5b5061028e6108393660046155c7565b612ec0565b34801561084a57600080fd5b506102b06108593660046151f8565b613057565b34801561086a57600080fd5b5061028e6108793660046155ee565b6131b2565b600260005414156108f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b6002600090815573ffffffffffffffffffffffffffffffffffffffff8316808252600360209081526040808420338086529083529381902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081527f9b3258bc4904fd6426b99843e206c6c7cdb1fd0f040121c25b71dafbb3851ee0910160405180910390a350506001600055565b6040517f055ee9b500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063055ee9b590602401602060405180830381865afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a43919061560b565b73ffffffffffffffffffffffffffffffffffffffff16141592915050565b60026000541415610ace576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610b5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b83919061560b565b9050610b903382846132eb565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906395373018906024015b600060405180830381600087803b158015610c1a57600080fd5b505af1158015610c2e573d6000803e3d6000fd5b5050600160005550505050565b60026000541415610ca8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610d39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5d919061560b565b9050610b90338284613411565b60026000541415610dd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000557f000000000000000000000000000000000000000000000000000000000000000015610e34576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610ec1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee5919061560b565b33600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915290205490915060ff16610f52576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f5d82613583565b5090508015610f98576040517ff713841e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b15801561102757600080fd5b505af115801561103b573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692503391507f93c70cc9715bef0d83edf2095f3595402279d274f402a73ffc17f1bcb19d863d90600090a35050600160005550565b600260005414156110f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611106613875565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063e958b70490602401602060405180830381865afa158015611197573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bb919061560b565b90506111c9848285856139b7565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401600060405180830381600087803b15801561125257600080fd5b505af1158015611266573d6000803e3d6000fd5b50506001600055505050505050565b600260005414156112e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611375573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611399919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166113e8576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806113f483613583565b915091508161142f576040517f1fdd676f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611437613875565b831561144d5761144d85858b8660016000613ae3565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632362a2d88b600185338e8e8e6040518863ffffffff1660e01b81526004016114b59796959493929190615663565b6020604051808303816000875af11580156114d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f891906156bf565b90508873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f7dfecd8419723a9d3954585a30c2a270165d70aafa146c11c1e1b88ae14390648460405161157091815260200190565b60405180910390a4505060016000555050505050505050565b600260005414156115f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ab919061560b565b90506116b5613875565b81156116cb576116cb8383338460016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d89061174a903390600090819083908d908d908d90600401615663565b6020604051808303816000875af1158015611769573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178d91906156bf565b5060405173ffffffffffffffffffffffffffffffffffffffff87169033907f460ad03b1cf79b1d64d3aefa28475f110ab66e84649c52bb41ed796b9b39198190600090a35050600160005550505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611849573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118d1576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff90811670010000000000000000000000000000000002911617600255565b6002600054141561196d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000908155606461198461ffff851687615707565b61198e9190615744565b9050611999816144f7565b6119a2816145e8565b6119ab84614668565b6119b3613875565b6040517f172c48c7000000000000000000000000000000000000000000000000000000008152600060048201819052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a64919061577f565b61ffff169150611a789050816127106157ae565b611a829083615707565b611a8c8288615707565b11611ac3576040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff86811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611b5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b81919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638587604051611bef92919091825261ffff16602082015260400190565b60405180910390a3611c2386827f00000000000000000000000000000000000000000000000000000000000000008a6139b7565b505060016000555050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526006602052604081205415155b92915050565b60026000541415611ccd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611cdb856144f7565b611ce484614668565b611ced856145e8565b600154700100000000000000000000000000000000900460ff1615611d3e576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d46613875565b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff85811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611de0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e04919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638885604051611e7292919091825261ffff16602082015260400190565b60405180910390a38215611e9057611e908484878460006001613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015611f1957600080fd5b505af1158015611f2d573d6000803e3d6000fd5b505060016000555050505050505050565b6000611c5a60058361480f565b60026000541415611fb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa15801561204b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206f919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166120be576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120c661481b565b6120fc576040517f7e52ccb400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061210782612668565b509050612112613875565b82156121285761212884848a8560016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d8906121aa908c90600290879033908f908f908f90600401615663565b6020604051808303816000875af11580156121c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ed91906156bf565b90508773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167ffada13ff2d5e1a1d9da37ad4a4130893b34e3c69c32b17f87ec31fd661b867078460405161226591815260200190565b60405180910390a45050600160005550505050505050565b6060612289600561486b565b905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612381576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561242f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612453919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146124b7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614878565b5050565b60026000541415612533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156125c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e8919061560b565b90506125f4818361489a565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401610c00565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126fc919061560b565b905060008061270b8387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156127a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127c991906156bf565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015291965061271091851690637afb010490604401602060405180830381865afa158015612863573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061288791906156bf565b6128919190615744565b9350505050915091565b60026000541415612908576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129bd919061560b565b90506129c7613875565b8115612a7e576129dc83833384600080613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015612a6557600080fd5b505af1158015612a79573d6000803e3d6000fd5b505050505b5050600160005550565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612af3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b17919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b7b576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614c92565b600080612b9283612668565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152919350600092507f000000000000000000000000000000000000000000000000000000000000000090911690633192195c906024016040805180830381865afa158015612c26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4a91906157c5565b9150819050612c5b61271084615707565b612c659190615744565b949350505050565b60026000541415612cda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063fdd5764590602401602060405180830381865afa158015612d6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d91919061560b565b73ffffffffffffffffffffffffffffffffffffffff161480612dd7575073ffffffffffffffffffffffffffffffffffffffff831660009081526006602052604090205415155b15612e0e576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612eac57600080fd5b505af1158015611c23573d6000803e3d6000fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f4f919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612fb3576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000061300a576040517f50dd11fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805464ffffffffff90921671010000000000000000000000000000000000027fffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffffff909216919091179055565b6040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063f67c5bd090602401602060405180830381865afa1580156130e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061310c91906156bf565b905080158015906131ab5750807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015613184573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a891906156bf565b16155b9392505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561321d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613241919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146132a5576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018054911515700100000000000000000000000000000000027fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff909216919091179055565b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600060448301819052917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561338c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133b091906156bf565b90506133bb816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f98274bf834d179ee08dc0604071b0dc90b54731bd5f725a5a96a39a86bce025a8360405161340391815260200190565b60405180910390a250505050565b61341a816144f7565b600154700100000000000000000000000000000000900460ff161561346b576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600160448301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561350c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061353091906156bf565b905061353b816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f9cac51154cc0d835e2f9c9d1f59a9344588cee107f4203bf58a8c797e3a58c458360405161340391815260200190565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613617919061560b565b90506000806136268387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156136c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136e491906156bf565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529195506000917f00000000000000000000000000000000000000000000000000000000000000001690633192195c906024016040805180830381865afa158015613775573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061379991906157c5565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350600092506127109187169063f9a6503090604401602060405180830381865afa158015613837573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061385b91906156bf565b6138659190615707565b9092109794965093945050505050565b34156139b5577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156138e357600080fd5b505af11580156138f7573d6000803e3d6000fd5b50506040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201523460248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16935063a9059cbb925060440190506020604051808303816000875af115801561398f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139b391906157e9565b505b565b6139c084614cb4565b6040517f830aa74500000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f0000000000000000000000000000000000000000000000000000000000000000169063830aa74590608401600060405180830381600087803b158015613a5e57600080fd5b505af1158015613a72573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fa32435755c235de2976ed44a75a2f85cb01faf0c894f639fe0c32bb9455fea8f83604051613ad591815260200190565b60405180910390a350505050565b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301523060248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b158015613b7257600080fd5b505af1158015613b86573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff871692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a28460005b8181101561441d5736888883818110613bea57613bea615806565b9050602002810190613bfc9190615835565b90506004613c0d6020830183615873565b90501015613c47576040517fe2b0e50600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b30613c5560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16141561421c578415613ca9576040517f5fb9107f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613cb86020830183615873565b613cc1916158d8565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167f59781034000000000000000000000000000000000000000000000000000000001415613e3c5760008080613d1e6020860186615873565b613d2c916004908290615920565b810190613d39919061522e565b925092509250613e34838c73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614613e2b576040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015613e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e26919061560b565b613e2d565b8b5b84846139b7565b505050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2b7c7b11000000000000000000000000000000000000000000000000000000001415613ec757600194506000613e996020840184615873565b613ea7916004908290615920565b810190613eb49190615215565b9050613ec1898983613411565b50614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2a7ba1f7000000000000000000000000000000000000000000000000000000001415613f80578415613f49576040517fc0b0caa800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613f586020840184615873565b613f66916004908290615920565b810190613f739190615215565b9050613ec18989836132eb565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f233a8caa0000000000000000000000000000000000000000000000000000000014156140e457600080613fda6020850185615873565b613fe8916004908290615920565b810190613ff5919061594a565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c8116600483015292945090925082918416906370a0823190602401602060405180830381865afa158015614069573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061408d91906156bf565b10156140dd576040517fa5ac537300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016108e7565b5050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fc690908a00000000000000000000000000000000000000000000000000000000141561416457600061413d6020840184615873565b61414b916004908290615920565b81019061415891906151f8565b9050613ec1888261489a565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f23e27a640000000000000000000000000000000000000000000000000000000014156141e45760006141bd6020840184615873565b6141cb916004908290615920565b8101906141d891906151f8565b9050613ec18882614d42565b6040517f1e9e7e7a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50614414565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff68754361426760208501856151f8565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156142d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142f4919061560b565b73ffffffffffffffffffffffffffffffffffffffff16148061436d575073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001661435560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16145b156143a4576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6144126143b46020830183615873565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506143f69250505060208401846151f8565b73ffffffffffffffffffffffffffffffffffffffff1690614e39565b505b50600101613bcf565b506040517f60c8e8938c9a0c0d88a98d6f1c562ce68077e12bf3edb8047378f2f736cb45b490600090a16040517fe1998cf900000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff86811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b1580156144d657600080fd5b505af11580156144ea573d6000803e3d6000fd5b5050505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006139b3576001546fffffffffffffffffffffffffffffffff9081169081146124c257600454608081901c906fffffffffffffffffffffffffffffffff16600067ffffffffffffffff8316431461456e578461458a565b61458a6fffffffffffffffffffffffffffffffff831686615976565b9050838111156145c6576040517f675f1a5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff81164360801b176004555050505050565b6002546fffffffffffffffffffffffffffffffff16811080614631575060025470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681115b156139b3576040517fce16799400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61467061481b565b156146a7576040517f63fc31c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1615614806577f0000000000000000000000000000000000000000000000000000000000000000801561472657503373ffffffffffffffffffffffffffffffffffffffff821614155b1561475d576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600160248301527f00000000000000000000000000000000000000000000000000000000000000001690639dc29fac90604401600060405180830381600087803b1580156147ed57600080fd5b505af1158015614801573d6000803e3d6000fd5b505050505b6139b381614cb4565b60006131ab8383614e7b565b60007f0000000000000000000000000000000000000000000000000000000000000000801561228957505060015471010000000000000000000000000000000000900464ffffffffff1642101590565b606060006131ab83614ea5565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f01565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561492b57600080fd5b505af115801561493f573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527fdf498aa1c340e992665d6fb4f3be8436d452c45a630cb6d7fab7963da39bac8793500190505b60405180910390a15050565b6040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600091829160019183917f00000000000000000000000000000000000000000000000000000000000000001690638991b2f190602401602060405180830381865afa158015614a2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a5391906156bf565b90505b808211614c895780821615614c7d576040517fe75538c700000000000000000000000000000000000000000000000000000000815260048101839052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e75538c7906024016040805180830381865afa158015614af4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b18919061577f565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529294509092506000918416906370a0823190602401602060405180830381865afa158015614b8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bb191906156bf565b90506001811115614c79576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff8481166024830152600091908b169063f9a6503090604401602060405180830381865afa158015614c33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c5791906156bf565b978801979050614c6b61ffff841682615707565b614c759088615976565b9650505b5050505b600182901b9150614a56565b50509250929050565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f50565b3373ffffffffffffffffffffffffffffffffffffffff821614801590614d0b575033600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16155b156139b3576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b158015614dd357600080fd5b505af1158015614de7573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527f69db9e9764da61b6681b89fb0f5be018506e0342036e56b59c3015a620d60977935001905061498d565b60606131ab83836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250615043565b6000826000018281548110614e9257614e92615806565b9060005260206000200154905092915050565b606081600001805480602002602001604051908101604052809291908181526020018280548015614ef557602002820191906000526020600020905b815481526020019060010190808311614ee1575b50505050509050919050565b6000818152600183016020526040812054614f4857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611c5a565b506000611c5a565b60008181526001830160205260408120548015615039576000614f746001836157ae565b8554909150600090614f88906001906157ae565b9050818114614fed576000866000018281548110614fa857614fa8615806565b9060005260206000200154905080876000018481548110614fcb57614fcb615806565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080614ffe57614ffe61598e565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611c5a565b6000915050611c5a565b6060612c65848460008585843b6150b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108e7565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516150df91906159ed565b60006040518083038185875af1925050503d806000811461511c576040519150601f19603f3d011682016040523d82523d6000602084013e615121565b606091505b509150915061513182828661513c565b979650505050505050565b6060831561514b5750816131ab565b82511561515b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e791906159ff565b73ffffffffffffffffffffffffffffffffffffffff811681146139b357600080fd5b80151581146139b357600080fd5b600080604083850312156151d257600080fd5b82356151dd8161518f565b915060208301356151ed816151b1565b809150509250929050565b60006020828403121561520a57600080fd5b81356131ab8161518f565b60006020828403121561522757600080fd5b5035919050565b60008060006060848603121561524357600080fd5b833561524e8161518f565b9250602084013561525e8161518f565b929592945050506040919091013590565b60008083601f84011261528157600080fd5b50813567ffffffffffffffff81111561529957600080fd5b6020830191508360208260051b85010111156152b457600080fd5b9250929050565b60008060008060008060a087890312156152d457600080fd5b86356152df8161518f565b955060208701356152ef8161518f565b9450604087013593506060870135615306816151b1565b9250608087013567ffffffffffffffff81111561532257600080fd5b61532e89828a0161526f565b979a9699509497509295939492505050565b60008060008060006080868803121561535857600080fd5b85356153638161518f565b945060208601359350604086013561537a816151b1565b9250606086013567ffffffffffffffff81111561539657600080fd5b6153a28882890161526f565b969995985093965092949392505050565b80356fffffffffffffffffffffffffffffffff811681146153d357600080fd5b919050565b600080604083850312156153eb57600080fd5b6153f4836153b3565b9150615402602084016153b3565b90509250929050565b61ffff811681146139b357600080fd5b6000806000806080858703121561543157600080fd5b8435935060208501356154438161518f565b925060408501356154538161540b565b915060608501356154638161540b565b939692955090935050565b60008060008060006080868803121561548657600080fd5b8535945060208601356154988161518f565b9350604086013567ffffffffffffffff8111156154b457600080fd5b6154c08882890161526f565b90945092505060608601356154d48161540b565b809150509295509295909350565b6020808252825182820181905260009190848201906040850190845b8181101561553057835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016154fe565b50909695505050505050565b60006020828403121561554e57600080fd5b6131ab826153b3565b6000806020838503121561556a57600080fd5b823567ffffffffffffffff81111561558157600080fd5b61558d8582860161526f565b90969095509350505050565b600080604083850312156155ac57600080fd5b82356155b78161518f565b915060208301356151ed8161518f565b6000602082840312156155d957600080fd5b813564ffffffffff811681146131ab57600080fd5b60006020828403121561560057600080fd5b81356131ab816151b1565b60006020828403121561561d57600080fd5b81516131ab8161518f565b6003811061565f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b73ffffffffffffffffffffffffffffffffffffffff888116825260e082019061568f602084018a615628565b6040830197909752948616606082015292909416608083015260a082015291151560c09092019190915292915050565b6000602082840312156156d157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561573f5761573f6156d8565b500290565b60008261577a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000806040838503121561579257600080fd5b825161579d8161518f565b60208401519092506151ed8161540b565b6000828210156157c0576157c06156d8565b500390565b600080604083850312156157d857600080fd5b505080516020909101519092909150565b6000602082840312156157fb57600080fd5b81516131ab816151b1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc183360301811261586957600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126158a857600080fd5b83018035915067ffffffffffffffff8211156158c357600080fd5b6020019150368190038213156152b457600080fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156159185780818660040360031b1b83161692505b505092915050565b6000808585111561593057600080fd5b8386111561593d57600080fd5b5050820193919092039150565b6000806040838503121561595d57600080fd5b82356159688161518f565b946020939093013593505050565b60008219821115615989576159896156d8565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60005b838110156159d85781810151838201526020016159c0565b838111156159e7576000848401525b50505050565b600082516158698184602087016159bd565b6020815260008251806020840152615a1e8160408501602087016159bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea2646970667358221220a3f4a705ab580a6ada1e438cd2ee4abc001b62d1d171fce12c41994900fef21664736f6c634300080a003360c06040523480156200001157600080fd5b50604051620026cf380380620026cf833981016040819052620000349162000324565b82828281600090805190602001906200004f92919062000194565b5080516200006590600190602084019062000194565b50506006805460ff19169055506001600160a01b0381166200009a57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000d9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ff9190620003a1565b6001600160a01b03166080816001600160a01b03168152505050826001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000158573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200017e9190620003a1565b6001600160a01b031660a0525062000403915050565b828054620001a290620003c6565b90600052602060002090601f016020900481019282620001c6576000855562000211565b82601f10620001e157805160ff191683800117855562000211565b8280016001018555821562000211579182015b8281111562000211578251825591602001919060010190620001f4565b506200021f92915062000223565b5090565b5b808211156200021f576000815560010162000224565b80516001600160a01b03811681146200025257600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200027f57600080fd5b81516001600160401b03808211156200029c576200029c62000257565b604051601f8301601f19908116603f01168101908282118183101715620002c757620002c762000257565b81604052838152602092508683858801011115620002e457600080fd5b600091505b83821015620003085785820183015181830184015290820190620002e9565b838211156200031a5760008385830101525b9695505050505050565b6000806000606084860312156200033a57600080fd5b62000345846200023a565b60208501519093506001600160401b03808211156200036357600080fd5b62000371878388016200026d565b935060408601519150808211156200038857600080fd5b5062000397868287016200026d565b9150509250925092565b600060208284031215620003b457600080fd5b620003bf826200023a565b9392505050565b600181811c90821680620003db57607f821691505b60208210811415620003fd57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a0516122756200045a6000396000610a9a015260008181610386015281816106db0152818161089101528181610f15015281816110010152818161115b015281816112f401526114f901526122756000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80636352211e116100f9578063a0bcfc7f11610097578063b88d4fde11610071578063b88d4fde146103a8578063c87b56dd146103b6578063e985e9c5146103c9578063fca3b5aa1461041257600080fd5b8063a0bcfc7f14610360578063a22cb46514610373578063a50cf2c81461038157600080fd5b80638456cb59116100d35780638456cb591461032a57806389406ff51461033257806395d89b41146103455780639dc29fac1461034d57600080fd5b80636352211e146102fc5780636c0360eb1461030f57806370a082311461031757600080fd5b80633f4ba83a116101665780634610f6ac116101405780634610f6ac146102b357806354fd4d50146102c6578063576cd2d1146102ce5780635c975abb146102f157600080fd5b80633f4ba83a1461029857806340c10f19146102a057806342842e0e1461028a57600080fd5b8063081812fc116101a2578063081812fc1461024b578063095ea7b31461025e57806318160ddd1461027357806323b872dd1461028a57600080fd5b806301ffc9a7146101c957806306fdde03146101f15780630754617214610206575b600080fd5b6101dc6101d7366004611cc6565b610425565b60405190151581526020015b60405180910390f35b6101f961050a565b6040516101e89190611d38565b6008546102269073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e8565b610226610259366004611d89565b61059c565b61027161026c366004611dc7565b61067b565b005b61027c60075481565b6040519081526020016101e8565b61027161026c366004611df3565b6102716106ad565b6102716102ae366004611dc7565b61079b565b6102716102c1366004611e34565b610863565b61027c600181565b6101dc6102dc366004611e34565b60096020526000908152604090205460ff1681565b60065460ff166101dc565b61022661030a366004611d89565b610cd9565b6101f9610d8b565b61027c610325366004611e34565b610e19565b610271610ee7565b610271610340366004611e34565b610fd3565b6101f9611103565b61027161035b366004611dc7565b611112565b61027161036e366004611e51565b6112c6565b61027161026c366004611ed1565b6102267f000000000000000000000000000000000000000000000000000000000000000081565b61027161026c366004611f39565b6101f96103c4366004611d89565b6113bb565b6101dc6103d7366004612037565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205460ff1690565b610271610420366004611e34565b6114cb565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd0000000000000000000000000000000000000000000000000000000014806104b857507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061050457507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60606000805461051990612065565b80601f016020809104026020016040519081016040528092919081815260200182805461054590612065565b80156105925780601f1061056757610100808354040283529160200191610592565b820191906000526020600020905b81548152906001019060200180831161057557829003601f168201915b5050505050905090565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff16610652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084015b60405180910390fd5b5060009081526004602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b6040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa158015610737573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075b91906120b9565b610791576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107996115f6565b565b60085473ffffffffffffffffffffffffffffffffffffffff1633146107ec576040517f5c2967f500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006107f783610e19565b905060005b82811015610846576000816108278473ffffffffffffffffffffffffffffffffffffffff8816612105565b6108319190612105565b905061083d85826116d7565b506001016107fc565b5081600760008282546108599190612105565b9091555050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156108ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091191906120b9565b610947576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163b610995576040517f9c01f6a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff1663c12c21c06040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610a1c575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610a199181019061211d565b60015b610a52576040517f9c01f6a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f6fbc6f6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192507f000000000000000000000000000000000000000000000000000000000000000090911690636fbc6f6b90602401602060405180830381865afa158015610ae3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0791906120b9565b1580610bad57503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16639408b63f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b94919061211d565b73ffffffffffffffffffffffffffffffffffffffff1614155b80610c5257508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c39919061211d565b73ffffffffffffffffffffffffffffffffffffffff1614155b15610c89576040517f9c01f6a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff16600090815260096020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff1680610504576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e00000000000000000000000000000000000000000000006064820152608401610649565b600a8054610d9890612065565b80601f0160208091040260200160405190810160405280929190818152602001828054610dc490612065565b8015610e115780601f10610de657610100808354040283529160200191610e11565b820191906000526020600020905b815481529060010190602001808311610df457829003601f168201915b505050505081565b600073ffffffffffffffffffffffffffffffffffffffff8216610ebe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152608401610649565b5073ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015610f71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9591906120b9565b610fcb576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610799611899565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561105d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108191906120b9565b6110b7576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff16600090815260096020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b60606001805461051990612065565b3360009081526009602052604090205460ff161580156111dd57506040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156111b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111db91906120b9565b155b15611214576040517f1e0d048500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061121f83610e19565b90508181101561125b576040517f90c9142d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b828110156112b357600060018261128b8573ffffffffffffffffffffffffffffffffffffffff8916612105565b611295919061213a565b61129f919061213a565b90506112aa81611959565b5060010161125e565b508160076000828254610859919061213a565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611350573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137491906120b9565b6113aa576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113b6600a8383611c0f565b505050565b60008181526002602052604090205460609073ffffffffffffffffffffffffffffffffffffffff1661146f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006064820152608401610649565b6000611479611a26565b9050600081511161149957604051806020016040528060008152506114c4565b806114a384611a35565b6040516020016114b4929190612151565b6040516020818303038152906040525b9392505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611555573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157991906120b9565b6115af576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60065460ff16611662576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610649565b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b73ffffffffffffffffffffffffffffffffffffffff8216611754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610649565b60008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff16156117e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610649565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805460019290611816908490612105565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60065460ff1615611906576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610649565b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586116ad3390565b600061196482610cd9565b9050611971600083611b6f565b73ffffffffffffffffffffffffffffffffffffffff811660009081526003602052604081208054600192906119a790849061213a565b909155505060008281526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555183919073ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6060600a805461051990612065565b606081611a7557505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611a9f5780611a8981612180565b9150611a989050600a836121e8565b9150611a79565b60008167ffffffffffffffff811115611aba57611aba611f0a565b6040519080825280601f01601f191660200182016040528015611ae4576020820181803683370190505b5090505b8415611b6757611af960018361213a565b9150611b06600a866121fc565b611b11906030612105565b60f81b818381518110611b2657611b26612210565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611b60600a866121e8565b9450611ae8565b949350505050565b600081815260046020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091558190611bc982610cd9565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b828054611c1b90612065565b90600052602060002090601f016020900481019282611c3d5760008555611ca1565b82601f10611c74578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00823516178555611ca1565b82800160010185558215611ca1579182015b82811115611ca1578235825591602001919060010190611c86565b50611cad929150611cb1565b5090565b5b80821115611cad5760008155600101611cb2565b600060208284031215611cd857600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146114c457600080fd5b60005b83811015611d23578181015183820152602001611d0b565b83811115611d32576000848401525b50505050565b6020815260008251806020840152611d57816040850160208701611d08565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b600060208284031215611d9b57600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff81168114611dc457600080fd5b50565b60008060408385031215611dda57600080fd5b8235611de581611da2565b946020939093013593505050565b600080600060608486031215611e0857600080fd5b8335611e1381611da2565b92506020840135611e2381611da2565b929592945050506040919091013590565b600060208284031215611e4657600080fd5b81356114c481611da2565b60008060208385031215611e6457600080fd5b823567ffffffffffffffff80821115611e7c57600080fd5b818501915085601f830112611e9057600080fd5b813581811115611e9f57600080fd5b866020828501011115611eb157600080fd5b60209290920196919550909350505050565b8015158114611dc457600080fd5b60008060408385031215611ee457600080fd5b8235611eef81611da2565b91506020830135611eff81611ec3565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060008060808587031215611f4f57600080fd5b8435611f5a81611da2565b93506020850135611f6a81611da2565b925060408501359150606085013567ffffffffffffffff80821115611f8e57600080fd5b818701915087601f830112611fa257600080fd5b813581811115611fb457611fb4611f0a565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715611ffa57611ffa611f0a565b816040528281528a602084870101111561201357600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000806040838503121561204a57600080fd5b823561205581611da2565b91506020830135611eff81611da2565b600181811c9082168061207957607f821691505b602082108114156120b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156120cb57600080fd5b81516114c481611ec3565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115612118576121186120d6565b500190565b60006020828403121561212f57600080fd5b81516114c481611da2565b60008282101561214c5761214c6120d6565b500390565b60008351612163818460208801611d08565b835190830190612177818360208801611d08565b01949350505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156121b2576121b26120d6565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826121f7576121f76121b9565b500490565b60008261220b5761220b6121b9565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea2646970667358221220ffdd83a2fc9a158347ca248f021e63fcef3a7985b3deb793f75cd1835b068aab64736f6c634300080a003360a060405234801561001057600080fd5b506040516106ca3803806106ca83398101604081905261002f9161006c565b60009190915560ff166080526001805460506001600160501b031991821681179092556004805490911690911790554260028190556003556100a2565b6000806040838503121561007f57600080fd5b82519150602083015160ff8116811461009757600080fd5b809150509250929050565b60805161060e6100bc600039600060d3015261060e6000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80639a6fc8f511610081578063d62ada111161005b578063d62ada11146102dc578063f7a30806146102f4578063feaf968c1461030757600080fd5b80639a6fc8f5146101cd578063bd18ad531461023a578063cd653afc1461024d57600080fd5b806354fd4d50116100b257806354fd4d501461012d57806367e8d83d1461013c5780637284e4161461018e57600080fd5b8063313ce567146100ce5780633fd0875f1461010c575b600080fd5b6100f57f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020015b60405180910390f35b6004546a0100000000000000000000900460ff166040516101039190610441565b60405160018152602001610103565b61018c61014a366004610482565b600480549115156c01000000000000000000000000027fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff909216919091179055565b005b604080518082018252600c81527f7072696365206f7261636c6500000000000000000000000000000000000000006020820152905161010391906104ab565b6102036101db36600461053d565b60015460005460025460035460045469ffffffffffffffffffff948516941691939590929450565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610103565b61018c610248366004610558565b61030f565b61018c61025b366004610579565b6001805469ffffffffffffffffffff9586167fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090911617905560029290925560035560048054919092167fffffffffffffffffffffffffffffffffffffffff00ff00000000000000000000909116176b020000000000000000000000179055565b6102e461035f565b6040519015158152602001610103565b61018c6103023660046105bf565b600055565b610203610385565b600480548291907fffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff166b01000000000000000000000083600281111561035757610357610412565b021790555050565b600454600090610380906b010000000000000000000000900460ff166103d6565b905090565b60008060008060006004600c9054906101000a900460ff16156103a757600080fd5b505060015460005460025460035460045469ffffffffffffffffffff9485169893975091955093509190911690565b600060028260028111156103ec576103ec610412565b14156103f757600080fd5b600182600281111561040b5761040b610412565b1492915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016006831061047c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561049457600080fd5b813580151581146104a457600080fd5b9392505050565b600060208083528351808285015260005b818110156104d8578581018301518582016040015282016104bc565b818111156104ea576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803569ffffffffffffffffffff8116811461053857600080fd5b919050565b60006020828403121561054f57600080fd5b6104a48261051e565b60006020828403121561056a57600080fd5b8135600381106104a457600080fd5b6000806000806080858703121561058f57600080fd5b6105988561051e565b935060208501359250604085013591506105b46060860161051e565b905092959194509250565b6000602082840312156105d157600080fd5b503591905056fea264697066735822122014874f7a973b86501c4c1a8be32490fe902c8f088ee234d25f9b2497e19f9e5264736f6c634300080a0033a2646970667358221220d8fdaadc825c43ac2783715ebcfe33e7b0ce3a396ac7717d65e4c95e98b6cf7f64736f6c634300080a003360806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d000117905534801561003957600080fd5b50600054604080516318caf8e360e31b815273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660048083019190915260248201929092526044810191909152632aa9a2a960e11b6064820152620100009091046001600160a01b03169063c657c71890608401600060405180830381600087803b1580156100ba57600080fd5b505af11580156100ce573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b81527390f79bf6eb2c4f870365e785982e1f101e93b90660048201526024810191909152600660448201526511949251539160d21b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561014f57600080fd5b505af1158015610163573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b8152733c44cdddb6a900fa2b585dd299e03d12fa4293bc60048201526024810191909152600a6044820152692624a8aaa4a220aa27a960b11b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b1580156101e857600080fd5b505af11580156101fc573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b815273c4375b7de8af5a38a93548eb8453a498222c4ff260048201526024810191909152600c60448201526b44554d425f4144445245535360a01b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561028357600080fd5b505af1158015610297573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b8152739965507d1a55bcc2695c58ba16fb37d819b0a4dc60048201526024810191909152600760448201526620a220a82a22a960c91b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561031957600080fd5b505af115801561032d573d6000803e3d6000fd5b505050506102a6806103406000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063ba414fa61461003b578063fa7626d414610057575b600080fd5b610043610064565b604051901515815260200160405180910390f35b6000546100439060ff1681565b60008054610100900460ff16156100845750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156101bf5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610129917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016101ff565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526101619161023b565b6000604051808303816000865af19150503d806000811461019e576040519150601f19603f3d011682016040523d82523d6000602084013e6101a3565b606091505b50915050808060200190518101906101bb919061024e565b9150505b919050565b6000815160005b818110156101e557602081850181015186830152016101cb565b818111156101f4576000828601525b509290920192915050565b7fffffffff0000000000000000000000000000000000000000000000000000000083168152600061023360048301846101c4565b949350505050565b600061024782846101c4565b9392505050565b60006020828403121561026057600080fd5b8151801515811461024757600080fdfea2646970667358221220293f55a0ef7b60c31a89dbc50e3339c80a8fdb1f9567614b200e97598226671f64736f6c634300080a003360806040523480156200001157600080fd5b506040516201110538038062011105833981016040819052620000349162000811565b6200003f3362000734565b6040516200004d9062000784565b604051809103906000f0801580156200006a573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b039283169081179091556040516310dc138160e31b81529184166004830152906386e09c0890602401600060405180830381600087803b158015620000c457600080fd5b505af1158015620000d9573d6000803e3d6000fd5b50506001546040516301ed651160e41b81526001600160a01b0385811660048301529091169250631ed651109150602401600060405180830381600087803b1580156200012557600080fd5b505af11580156200013a573d6000803e3d6000fd5b505050506040516200014c9062000792565b604051809103906000f08015801562000169573d6000803e3d6000fd5b50600280546001600160a01b0319166001600160a01b039283169081179091556001546040516376aad60560e01b81526004810192909252909116906376aad60590602401600060405180830381600087803b158015620001c957600080fd5b505af1158015620001de573d6000803e3d6000fd5b5050600154604051600093506001600160a01b0390911691506200020290620007a0565b6001600160a01b039091168152602001604051809103906000f0801580156200022f573d6000803e3d6000fd5b5060015460405163338f12b960e21b81526001600160a01b03808416600483015292935091169063ce3c4ae490602401600060405180830381600087803b1580156200027a57600080fd5b505af11580156200028f573d6000803e3d6000fd5b5050600154604051600093506001600160a01b039091169150620002b390620007ae565b6001600160a01b039091168152602001604051809103906000f080158015620002e0573d6000803e3d6000fd5b5060015460405163c5120b3960e01b81526001600160a01b03808416600483015292935091169063c5120b3990602401600060405180830381600087803b1580156200032b57600080fd5b505af115801562000340573d6000803e3d6000fd5b5050600154604051606093506001600160a01b03909116915082906200036690620007bc565b6200037392919062000849565b604051809103906000f08015801562000390573d6000803e3d6000fd5b50600380546001600160a01b0319166001600160a01b0392831690811790915560015460405163530e784f60e01b815260048101929092529091169063530e784f90602401600060405180830381600087803b158015620003f057600080fd5b505af115801562000405573d6000803e3d6000fd5b5050600154604051600093506001600160a01b0390911691506200042990620007ca565b6001600160a01b039091168152602001604051809103906000f08015801562000456573d6000803e3d6000fd5b506001546040516356ee0d3b60e11b81526001600160a01b03808416600483015292935091169063addc1a7690602401600060405180830381600087803b158015620004a157600080fd5b505af1158015620004b6573d6000803e3d6000fd5b5050600154604051600093506001600160a01b039091169150620004da90620007d8565b6001600160a01b039091168152602001604051809103906000f08015801562000507573d6000803e3d6000fd5b506001546040516321da583760e01b81526001600160a01b0380841660048301529293509116906321da583790602401600060405180830381600087803b1580156200055257600080fd5b505af115801562000567573d6000803e3d6000fd5b505050506000306040516200057c90620007e6565b6001600160a01b039091168152602001604051809103906000f080158015620005a9573d6000803e3d6000fd5b50600154604051631795d5b360e31b81526001600160a01b03808416600483015292935091169063bcaead9890602401600060405180830381600087803b158015620005f457600080fd5b505af115801562000609573d6000803e3d6000fd5b505060405163f2fde38b60e01b81523360048201526001600160a01b038416925063f2fde38b9150602401600060405180830381600087803b1580156200064f57600080fd5b505af115801562000664573d6000803e3d6000fd5b505060015460405163f2fde38b60e01b81523360048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b158015620006ae57600080fd5b505af1158015620006c3573d6000803e3d6000fd5b505060025460405163f2fde38b60e01b81523360048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b1580156200070d57600080fd5b505af115801562000722573d6000803e3d6000fd5b505050505050505050505050620008b2565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610fcd80620010dd83390190565b61098c80620020aa83390190565b610f508062002a3683390190565b614da6806200398683390190565b611b45806200872c83390190565b612ced806200a27183390190565b611627806200cf5e83390190565b612b80806200e58583390190565b80516001600160a01b03811681146200080c57600080fd5b919050565b600080604083850312156200082557600080fd5b6200083083620007f4565b91506200084060208401620007f4565b90509250929050565b6001600160a01b0383811682526040602080840182905284518483018190526000938683019290916060870190865b81811015620008a3578551805186168452840151851684840152948301949186019160010162000878565b50909998505050505050505050565b61081b80620008c26000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80638874ff1f1161005b5780638874ff1f146100f55780638da5cb5b14610108578063de28735914610126578063f2fde38b1461014657600080fd5b80632630c12f146100825780632954018c146100cb578063715018a6146100eb575b600080fd5b6003546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6001546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b6100f3610159565b005b6100f3610103366004610658565b6101eb565b60005473ffffffffffffffffffffffffffffffffffffffff166100a2565b6002546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b6100f3610154366004610734565b6103e3565b60005473ffffffffffffffffffffffffffffffffffffffff1633146101df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6101e96000610513565b565b60005473ffffffffffffffffffffffffffffffffffffffff16331461026c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101d6565b60005b815181101561035c57600354825173ffffffffffffffffffffffffffffffffffffffff9091169063e8a97a3e908490849081106102ae576102ae610756565b6020026020010151600001518484815181106102cc576102cc610756565b6020026020010151602001516040518363ffffffff1660e01b815260040161031792919073ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b600060405180830381600087803b15801561033157600080fd5b505af1158015610345573d6000803e3d6000fd5b50505050808061035490610785565b91505061026f565b506002546040517ff2fde38b00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063f2fde38b90602401600060405180830381600087803b1580156103c857600080fd5b505af11580156103dc573d6000803e3d6000fd5b5050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101d6565b73ffffffffffffffffffffffffffffffffffffffff8116610507576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016101d6565b61051081610513565b50565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156105da576105da610588565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561062757610627610588565b604052919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461065357600080fd5b919050565b6000602080838503121561066b57600080fd5b823567ffffffffffffffff8082111561068357600080fd5b818501915085601f83011261069757600080fd5b8135818111156106a9576106a9610588565b6106b7848260051b016105e0565b818152848101925060069190911b8301840190878211156106d757600080fd5b928401925b8184101561072957604084890312156106f55760008081fd5b6106fd6105b7565b6107068561062f565b815261071386860161062f565b81870152835260409390930192918401916106dc565b979650505050505050565b60006020828403121561074657600080fd5b61074f8261062f565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156107de577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea26469706673582212205ee75e57bb635aa49a1758f4ab0b04182a73115bff08f420c56a8ddb433c029364736f6c634300080a0033608060405234801561001057600080fd5b5061001a3361005f565b60405130906f20a2222922a9a9afa82927ab24a222a960811b907fb37614c7d254ea8d16eb81fa11dddaeb266aa8ba4917980859c7740aff30c69190600090a36100af565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610f0f806100be6000396000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c806377532ed9116100e3578063bcaead981161008c578063ce3c4ae411610066578063ce3c4ae414610308578063f2fde38b1461031b578063fca513a81461032e57600080fd5b8063bcaead98146102da578063c5120b39146102ed578063c513c9bb1461030057600080fd5b80639068a868116100bd5780639068a868146102b7578063addc1a76146102bf578063affd9243146102d257600080fd5b806377532ed91461027e57806386e09c08146102865780638da5cb5b1461029957600080fd5b80634c252f9111610145578063699f200f1161011f578063699f200f1461022d578063715018a61461026357806376aad6051461026b57600080fd5b80634c252f91146101fc578063530e784f1461020457806354fd4d501461021757600080fd5b80631ed65110116101765780631ed65110146101cc57806321da5837146101e157806326c74fc3146101f457600080fd5b8063060678c21461019257806308737695146101c4575b600080fd5b61019a610336565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61019a610366565b6101df6101da366004610e10565b610391565b005b6101df6101ef366004610e10565b610444565b61019a6104ef565b61019a61051a565b6101df610212366004610e10565b610545565b61021f600281565b6040519081526020016101bb565b61019a61023b366004610e4d565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6101df6105f0565b6101df610279366004610e10565b61067d565b61019a610728565b6101df610294366004610e10565b610753565b60005473ffffffffffffffffffffffffffffffffffffffff1661019a565b61019a6107fe565b6101df6102cd366004610e10565b610829565b61019a6108d4565b6101df6102e8366004610e10565b6108ff565b6101df6102fb366004610e10565b6109aa565b61019a610a55565b6101df610316366004610e10565b610a80565b6101df610329366004610e10565b610b2b565b61019a610c58565b60006103617f444154415f434f4d50524553534f520000000000000000000000000000000000610c7f565b905090565b60006103617f41434c0000000000000000000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610417576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6104417f54524541535552595f434f4e545241435400000000000000000000000000000082610d1d565b50565b60005473ffffffffffffffffffffffffffffffffffffffff1633146104c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f574554485f47415445574159000000000000000000000000000000000000000082610d1d565b60006103617f54524541535552595f434f4e5452414354000000000000000000000000000000610c7f565b60006103617f574554485f544f4b454e00000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f50524943455f4f5241434c45000000000000000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610671576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b61067b6000610d9b565b565b60005473ffffffffffffffffffffffffffffffffffffffff1633146106fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f41434c000000000000000000000000000000000000000000000000000000000082610d1d565b60006103617f574554485f474154455741590000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146107d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f574554485f544f4b454e0000000000000000000000000000000000000000000082610d1d565b60006103617f4143434f554e545f464143544f52590000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146108aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f4143434f554e545f464143544f5259000000000000000000000000000000000082610d1d565b60006103617f474541525f544f4b454e00000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610980576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f474541525f544f4b454e0000000000000000000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f444154415f434f4d50524553534f52000000000000000000000000000000000082610d1d565b60006103617f434f4e5452414354535f52454749535445520000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610b01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f434f4e5452414354535f5245474953544552000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610bac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b73ffffffffffffffffffffffffffffffffffffffff8116610c4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161040e565b61044181610d9b565b60006103617f50524943455f4f5241434c4500000000000000000000000000000000000000005b6000818152600160209081526040808320548151808301909252600382527f41503100000000000000000000000000000000000000000000000000000000009282019290925273ffffffffffffffffffffffffffffffffffffffff9091169081610d16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040e9190610e66565b5092915050565b60008281526001602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091559051909184917fb37614c7d254ea8d16eb81fa11dddaeb266aa8ba4917980859c7740aff30c6919190a35050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215610e2257600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610e4657600080fd5b9392505050565b600060208284031215610e5f57600080fd5b5035919050565b600060208083528351808285015260005b81811015610e9357858101830151858201604001528201610e77565b81811115610ea5576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea264697066735822122083c228af017c6f5cf8c395cdf7a53276ff56fdd4f4313c39f680ab73bd75417364736f6c634300080a0033608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61090e8061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063732818191161008c578063adce758d11610066578063adce758d14610215578063ba306df114610228578063d4eb5db01461023b578063f2fde38b1461027457600080fd5b806373281819146101b7578063819ad68e146101da5780638da5cb5b146101ed57600080fd5b806354fd4d50116100bd57806354fd4d501461016a5780635f259aba14610180578063715018a6146101af57600080fd5b806335914829146100e45780633a41ec641461011c5780634910832f14610155575b600080fd5b6101076100f236600461089b565b60016020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61010761012a36600461089b565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205460ff1690565b61016861016336600461089b565b610287565b005b610172600181565b604051908152602001610113565b61010761018e36600461089b565b60005473ffffffffffffffffffffffffffffffffffffffff91821691161490565b610168610387565b6101076101c536600461089b565b60026020526000908152604090205460ff1681565b6101686101e836600461089b565b610414565b60005460405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610113565b61016861022336600461089b565b61050c565b61016861023636600461089b565b610601565b61010761024936600461089b565b73ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205460ff1690565b61016861028236600461089b565b6106f6565b60005473ffffffffffffffffffffffffffffffffffffffff16331461030d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909217909155517fae26b1cfe9454ba87274a4e8330b6654684362d0f3d7bbd17f7449a1d38387c69190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610408576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b6104126000610826565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517fd400da6c0c0a894dacc0981730b88af0545d00272ee8fff1437bf560ff245fc49190a250565b60005473ffffffffffffffffffffffffffffffffffffffff16331461058d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f1998397e7203f7baca9d6f41b9e4da6e768daac5caad4234fb9bf5869d2715459190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610682576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526001602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f28b01395b7e25d20552a0c8dc8ecd3b1d4abc986f14dad7885fd45b6fd73c8d99190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811661081a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610304565b61082381610826565b50565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156108ad57600080fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146108d157600080fd5b939250505056fea26469706673582212204712efbfe997070def77285a5b8753bc882b62da2133ce1937ad26cd2b48e49864736f6c634300080a003360a060405234801561001057600080fd5b50604051610f50380380610f5083398101604081905261002f916100d7565b6000805460ff19169055806001600160a01b03811661006157604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa15801561009f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100c391906100d7565b6001600160a01b0316608052506101079050565b6000602082840312156100e957600080fd5b81516001600160a01b038116811461010057600080fd5b9392505050565b608051610e1261013e600039600081816101e2015281816102b20152818161040f0152818161057801526108510152610e126000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80638456cb5911610097578063b4ac686011610066578063b4ac686014610217578063c29277cd1461021f578063d914cd4b14610227578063e26b2f631461023a57600080fd5b80638456cb59146101cd57806394144856146101d5578063a50cf2c8146101dd578063ac4afa381461020457600080fd5b80635b16ebb7116100d35780635b16ebb7146101575780635c975abb1461018a578063673a2a1f146101955780636fbc6f6b146101aa57600080fd5b80631e16e4fc146100fa5780633f4ba83a1461013757806354fd4d5014610141575b600080fd5b61010d610108366004610c97565b61024d565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61013f610284565b005b610149600181565b60405190815260200161012e565b61017a610165366004610cb0565b60026020526000908152604090205460ff1681565b604051901515815260200161012e565b60005460ff1661017a565b61019d610372565b60405161012e9190610ced565b61017a6101b8366004610cb0565b60046020526000908152604090205460ff1681565b61013f6103e1565b61019d6104cd565b61010d7f000000000000000000000000000000000000000000000000000000000000000081565b61010d610212366004610c97565b61053a565b600154610149565b600354610149565b61013f610235366004610cb0565b61054a565b61013f610248366004610cb0565b610823565b6003818154811061025d57600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa15801561030e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103329190610d47565b610368576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610370610af6565b565b606060018054806020026020016040519081016040528092919081815260200182805480156103d757602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116103ac575b5050505050905090565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561046b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048f9190610d47565b6104c5576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610370610bd7565b606060038054806020026020016040519081016040528092919081815260200182805480156103d75760200282019190600052602060002090815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116103ac575050505050905090565b6001818154811061025d57600080fd5b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156105d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f89190610d47565b61062e576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051808201909152600281527f5a30000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff82166106b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b60405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff8116600090815260026020908152604091829020548251808401909352600383527f43523100000000000000000000000000000000000000000000000000000000009183019190915260ff1615610753576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b506001805480820182557fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915560008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909417909355915190917ff816b5143086c89d103a0683286be86c2b741e83ebfa75135aae606e2f5c6e5391a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156108ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d19190610d47565b610907576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051808201909152600281527f5a30000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8216610989576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b5073ffffffffffffffffffffffffffffffffffffffff8116600090815260046020908152604091829020548251808401909352600383527f43523200000000000000000000000000000000000000000000000000000000009183019190915260ff1615610a23576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b506003805460018082019092557fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915560008181526004602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909417909355915190917f58ad3cfc4b6552a53c8c4128ae9b080e14b4378a159280643a62c6f709cee24f91a250565b60005460ff16610b62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016106b0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff1615610c44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016106b0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610bad3390565b600060208284031215610ca957600080fd5b5035919050565b600060208284031215610cc257600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610ce657600080fd5b9392505050565b6020808252825182820181905260009190848201906040850190845b81811015610d3b57835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101610d09565b50909695505050505050565b600060208284031215610d5957600080fd5b81518015158114610ce657600080fd5b600060208083528351808285015260005b81811015610d9657858101830151858201604001528201610d7a565b81811115610da8576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea26469706673582212208f2d91c863db9ab1494a9c5db20e3fddc4b6c779ea3c3621737c105c60d9440a64736f6c634300080a003360e06040523480156200001157600080fd5b5060405162004da638038062004da6833981016040819052620000349162000160565b6001600160a01b0381166200005c57604051635919af9760e11b815260040160405180910390fd5b6001600160a01b03811660808190526040805163c513c9bb60e01b8152905163c513c9bb916004808201926020929091908290030181865afa158015620000a7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cd919062000160565b6001600160a01b031660a0816001600160a01b0316815250506080516001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000127573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200014d919062000160565b6001600160a01b031660c0525062000192565b6000602082840312156200017357600080fd5b81516001600160a01b03811681146200018b57600080fd5b9392505050565b60805160a05160c051614b896200021d6000396000818161018801528181611c4f0152612c5a0152600081816101ed015281816115e201528181611f5f0152818161213f0152818161223f0152818161243801528181612604015281816126bc01528181612788015281816129a501528181613c410152613d000152600061013c0152614b896000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c806354fd4d5011610081578063a80deda31161005b578063a80deda31461020f578063ae093f3f1461022f578063fc9914cb1461024f57600080fd5b806354fd4d50146101bd578063663b8fdb146101d35780637a0c7b21146101e857600080fd5b80632954018c116100b25780632954018c146101375780634b2f336d146101835780634c472fc9146101aa57600080fd5b80630dbd616d146100d957806313d21cdf146101025780631bcd8fc014610122575b600080fd5b6100ec6100e73660046140fc565b610272565b6040516100f9919061430b565b60405180910390f35b61011561011036600461431e565b6114d4565b6040516100f99190614444565b61012a611f59565b6040516100f99190614453565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100f9565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b61015e6101b83660046140fc565b6121f5565b6101c5600281565b6040519081526020016100f9565b6101db612432565b6040516100f991906146ea565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b61022261021d36600461431e565b6126b5565b6040516100f9919061476a565b61024261023d36600461431e565b612a75565b6040516100f991906147dd565b61026261025d3660046140fc565b613bf7565b60405190151581526020016100f9565b61035f604051806102400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160008152602001606081526020016000815260200160008152602001600015158152602001600081526020016000815260200160008152602001600060ff168152602001600081525090565b600080600080600061037088613cf4565b509450945094509450945060008560ff1660011461041d576040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015284169063e958b70490602401602060405180830381865afa1580156103f4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061041891906147f0565b6104ad565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015286169063e958b70490602401602060405180830381865afa158015610489573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ad91906147f0565b60ff8716610200890181905273ffffffffffffffffffffffffffffffffffffffff808b1660208b01528b811660608b015282168952909150600114156109e9578473ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610538573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055c91906147f0565b73ffffffffffffffffffffffffffffffffffffffff90811660808901526040517fc7de38a600000000000000000000000000000000000000000000000000000000815282821660048201529085169063c7de38a690602401602060405180830381865afa1580156105d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f5919061480d565b60c08801526040517fdfd5946500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015285169063dfd5946590602401602060405180830381865afa158015610666573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068a919061480d565b60e08801526040517f3ce0735500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015260006024830152861690633ce0735590604401602060405180830381865afa92505050801561073c575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526107399181019061480d565b60015b6107455761074c565b6101408801525b6040517f3ce0735500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015260016024830152861690633ce0735590604401602060405180830381865afa9250505080156107f9575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526107f69181019061480d565b60015b61080257610809565b6101608801525b60c08701516040517f996329f800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526024820192909252600060448201529086169063996329f89060640160a060405180830381865afa9250505080156108c4575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526108c191810190614826565b60015b6108cd576108da565b505015156101808a015250505b8073ffffffffffffffffffffffffffffffffffffffff16631afbb7a46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610925573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610949919061480d565b6101a08801526040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152851690633192195c90602401602060405180830381865afa1580156109bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109df919061480d565b60a0880152610c26565b8273ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5891906147f0565b73ffffffffffffffffffffffffffffffffffffffff90811660808901526040517fc7de38a600000000000000000000000000000000000000000000000000000000815282821660048201529083169063c7de38a6906024016040805180830381865afa158015610acc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af09190614866565b5060c08801526040517fdfd5946500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015283169063dfd5946590602401602060405180830381865afa158015610b62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b86919061480d565b60e08801526040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152841690633192195c906024016040805180830381865afa158015610bf6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1a9190614866565b60a08901526101a08801525b60008660ff16600114610ca7578373ffffffffffffffffffffffffffffffffffffffff166316f0115b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca291906147f0565b610d16565b8573ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1691906147f0565b90508073ffffffffffffffffffffffffffffffffffffffff166345d31f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d87919061480d565b6101008901526000600160ff891614610e0e578473ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610de5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e09919061480d565b610e7d565b8573ffffffffffffffffffffffffffffffffffffffff166320a05ff76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7d919061480d565b90508760ff16600114610f1f576040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152861690638991b2f190602401602060405180830381865afa158015610ef6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1a919061480d565b610faf565b6040517fb451cecc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015287169063b451cecc90602401602060405180830381865afa158015610f8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610faf919061480d565b6102208a01528067ffffffffffffffff811115610fce57610fce61488a565b60405190808252806020026020018201604052801561103e57816020015b6040805160808101825260008082526020808301829052928201819052606082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181610fec5790505b506101208a015260005b818110156113d657604080516080810182526000808252602082018190529181018290526060810191909152600180831b9060ff8c1614156111c5576040517faf0a650200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018590528a169063af0a650290604401608060405180830381865afa1580156110f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111b91906148b9565b5050602084015273ffffffffffffffffffffffffffffffffffffffff9081168084526040517ff9eaee0d0000000000000000000000000000000000000000000000000000000081526004810191909152908a169063f9eaee0d90602401602060405180830381865afa158015611195573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b9919061490d565b15156040830152611388565b6040517f172c48c70000000000000000000000000000000000000000000000000000000081526004810184905273ffffffffffffffffffffffffffffffffffffffff89169063172c48c7906024016040805180830381865afa15801561122f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112539190614928565b5073ffffffffffffffffffffffffffffffffffffffff9081168084526040517f70a082310000000000000000000000000000000000000000000000000000000081529188166004830152906370a0823190602401602060405180830381865afa1580156112c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e8919061480d565b602083015281516040517ff9eaee0d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529088169063f9eaee0d90602401602060405180830381865afa15801561135c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611380919061490d565b151560408301525b6102208c015181161561139c57600161139f565b60005b151560608301526101208c01518051839190859081106113c1576113c161495e565b60209081029190910101525050600101611048565b508273ffffffffffffffffffffffffffffffffffffffff166317d11a156040518163ffffffff1660e01b8152600401602060405180830381865afa158015611422573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611446919061480d565b896101c00181815250508273ffffffffffffffffffffffffffffffffffffffff16633dc54b406040518163ffffffff1660e01b8152600401602060405180830381865afa15801561149b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bf919061480d565b6101e08a015250969998505050505050505050565b61159b604051806102000160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600060ff1681525090565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015283917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa15801561162b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164f919061490d565b611685576040517fd384b23800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316808352604080517ffe14112d000000000000000000000000000000000000000000000000000000008152905185929163fe14112d9160048083019260209291908290030181865afa1580156116f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611719919061480d565b8360c00181815250508073ffffffffffffffffffffffffffffffffffffffff1663ef8d96036040518163ffffffff1660e01b8152600401602060405180830381865afa15801561176d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611791919061480d565b8360e00181815250508073ffffffffffffffffffffffffffffffffffffffff1663743753596040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611809919061480d565b8360a00181815250508073ffffffffffffffffffffffffffffffffffffffff16634c19386c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561185d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611881919061480d565b836101000181815250508073ffffffffffffffffffffffffffffffffffffffff1663788c6bfe6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fa919061480d565b836101600181815250508073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561194f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611973919061480d565b8360800181815250508073ffffffffffffffffffffffffffffffffffffffff166345d31f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119eb919061480d565b836101400181815250508073ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6491906147f0565b836040019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff166336dda7d56040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0a91906147f0565b836060019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663788c6bfe6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb0919061480d565b836101600181815250508073ffffffffffffffffffffffffffffffffffffffff1663e941fa786040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c29919061480d565b61018084015260408084015173ffffffffffffffffffffffffffffffffffffffff9081167f000000000000000000000000000000000000000000000000000000000000000082161460208087019190915282517f609ae31700000000000000000000000000000000000000000000000000000000815292519184169263609ae31792600480830193928290030181865afa158015611ccb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cef919061480d565b836101c00181815250508073ffffffffffffffffffffffffffffffffffffffff1663dbcb313b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d68919061480d565b836101a00181815250506000836060015173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de7919061480d565b6040517f5427c9380000000000000000000000000000000000000000000000000000000081526004810182905290915060009073ffffffffffffffffffffffffffffffffffffffff841690635427c93890602401602060405180830381865afa158015611e58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7c919061480d565b90508015611ec7576101808501518190611eb890611e9c906127106149bc565b876101000151886101400151611eb291906149d3565b90613fd0565b611ec29190614a3f565b611ece565b8461014001515b856101200181815250508273ffffffffffffffffffffffffffffffffffffffff166354fd4d506040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f47919061480d565b60ff166101e086015250505050919050565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b4ac68606040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fec919061480d565b90508067ffffffffffffffff8111156120075761200761488a565b6040519080825280602002602001820160405280156120ff57816020015b6120ec604051806102000160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600060ff1681525090565b8152602001906001900390816120255790505b50915060005b818110156121f0576040517fac4afa38000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ac4afa3890602401602060405180830381865afa15801561219b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121bf91906147f0565b90506121ca816114d4565b8483815181106121dc576121dc61495e565b602090810291909101015250600101612105565b505090565b6040517f6fbc6f6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015260009184917f00000000000000000000000000000000000000000000000000000000000000001690636fbc6f6b90602401602060405180830381865afa158015612286573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122aa919061490d565b6122e0576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060006122ee87613cf4565b5050935093505092508260ff16600114612397576040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015282169063fdd5764590602401602060405180830381865afa15801561236e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061239291906147f0565b612427565b6040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015283169063fdd5764590602401602060405180830381865afa158015612403573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061242791906147f0565b979650505050505050565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c29277cd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124c5919061480d565b90508067ffffffffffffffff8111156124e0576124e061488a565b6040519080825280602002602001820160405280156125c457816020015b60408051610260810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083018290526101208301819052610140830181905261016083015261018082018190526101a082018190526101c082018190526101e082018190526102008201819052610220820181905261024082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816124fe5790505b50915060005b818110156121f0576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa158015612660573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061268491906147f0565b905061268f81612a75565b8483815181106126a1576126a161495e565b6020908102919091010152506001016125ca565b60606000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c29277cd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612725573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612749919061480d565b905060005b81811015612829576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa1580156127e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061280891906147f0565b90506128148187613bf7565b15612820578360010193505b5060010161274e565b508167ffffffffffffffff8111156128435761284361488a565b60405190808252806020026020018201604052801561296157816020015b61294e604051806102400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160008152602001606081526020016000815260200160008152602001600015158152602001600081526020016000815260200160008152602001600060ff168152602001600081525090565b8152602001906001900390816128615790505b5092506000915060005b81811015612a6d576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa158015612a01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a2591906147f0565b9050612a318187613bf7565b15612a6457612a408187610272565b858581518110612a5257612a5261495e565b60209081029190910101526001909301925b5060010161296b565b505050919050565b604080516102608101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082018390526101208201819052610140820181905261016082015261018081018290526101a081018290526101c081018290526101e08101829052610200810182905261022081018290526102408101829052908080808080612b1b88613cf4565b73ffffffffffffffffffffffffffffffffffffffff8e168d5260ff86166101808e01819052959b50939950919750955093509150600114612bca578273ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ba1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bc591906147f0565b612c39565b8473ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c3991906147f0565b73ffffffffffffffffffffffffffffffffffffffff908116602089018190527f00000000000000000000000000000000000000000000000000000000000000009091161460408801526000600160ff881614612d03578373ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cfe91906147f0565b612d72565b8573ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d7291906147f0565b6040517f2e97ca2100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b8116600483015291925090821690632e97ca2190602401602060405180830381865afa158015612de2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e06919061490d565b15156060890152604080517f45d31f9d000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff8316916345d31f9d9160048083019260209291908290030181865afa158015612e78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e9c919061480d565b8860800181815250508073ffffffffffffffffffffffffffffffffffffffff1663743753596040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ef0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f14919061480d565b610100890152600160ff88161415613017578573ffffffffffffffffffffffffffffffffffffffff16639b2cb5d86040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f95919061480d565b8860a00181815250508573ffffffffffffffffffffffffffffffffffffffff16635f48f3936040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fe9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061300d919061480d565b60c08901526130a5565b8273ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa158015613061573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130859190614a73565b6fffffffffffffffffffffffffffffffff90811660c08b01521660a08901525b60008760ff16600114613126578473ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613121919061480d565b613195565b8573ffffffffffffffffffffffffffffffffffffffff166320a05ff76040518163ffffffff1660e01b8152600401602060405180830381865afa158015613171573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613195919061480d565b90508067ffffffffffffffff8111156131b0576131b061488a565b6040519080825280602002602001820160405280156131d9578160200160208202803683370190505b506101208a01528067ffffffffffffffff8111156131f9576131f961488a565b604051908082528060200260200182016040528015613222578160200160208202803683370190505b506101608a015260005b818110156134c4578860ff16600114156133b4576040517f5e5f2e260000000000000000000000000000000000000000000000000000000081526004810182905260009073ffffffffffffffffffffffffffffffffffffffff891690635e5f2e2690602401602060405180830381865afa1580156132ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132d291906147f0565b9050808b610120015183815181106132ec576132ec61495e565b73ffffffffffffffffffffffffffffffffffffffff92831660209182029290920101526040517f78327438000000000000000000000000000000000000000000000000000000008152828216600482015290891690637832743890602401602060405180830381865afa158015613367573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061338b919061480d565b8b610160015183815181106133a2576133a261495e565b602002602001018181525050506134bc565b6040517f172c48c70000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff87169063172c48c7906024016040805180830381865afa15801561341e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134429190614928565b8061ffff1690508b610120015183815181106134605761346061495e565b602002602001018c6101600151848151811061347e5761347e61495e565b60200260200101828152508273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525050505b60010161322c565b5060008860ff16600114613546578373ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561351d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613541919061480d565b6135b5565b8673ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613591573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135b5919061480d565b90508067ffffffffffffffff8111156135d0576135d061488a565b60405190808252806020026020018201604052801561361557816020015b60408051808201909152600080825260208201528152602001906001900390816135ee5790505b506101408b015260005b818110156139015760408051808201909152600080825260208201528a60ff166001146136da576040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff871690635094cb4f90602401602060405180830381865afa1580156136b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136d591906147f0565b613769565b6040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff8a1690635094cb4f90602401602060405180830381865afa158015613745573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061376991906147f0565b73ffffffffffffffffffffffffffffffffffffffff168152600160ff8c16146138245780516040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529089169063fdd5764590602401602060405180830381865afa1580156137fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061381f91906147f0565b6138b7565b80516040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152908a169063fdd5764590602401602060405180830381865afa158015613893573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138b791906147f0565b73ffffffffffffffffffffffffffffffffffffffff1660208201526101408c01518051829190849081106138ed576138ed61495e565b60209081029190910101525060010161361f565b508860ff166001141561398f578773ffffffffffffffffffffffffffffffffffffffff1663b2c53a6c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613959573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061397d919061480d565b60e08b015260ff6102408b0152613be9565b73ffffffffffffffffffffffffffffffffffffffff85166101a08b01819052604080517f9408b63f0000000000000000000000000000000000000000000000000000000081529051639408b63f916004808201926020929091908290030181865afa158015613a02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a2691906147f0565b8a6101e0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508473ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015613aa9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613acd9190614aa6565b5015156102008c015250604080517f9fd12b77000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff881691639fd12b779160048083019260209291908290030181865afa158015613b42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b66919061480d565b8a6102200181815250508573ffffffffffffffffffffffffffffffffffffffff16638345f26e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bdf9190614af7565b60ff166102408b01525b505050505050505050919050565b6040517f6fbc6f6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015260009184917f00000000000000000000000000000000000000000000000000000000000000001690636fbc6f6b90602401602060405180830381865afa158015613c88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cac919061490d565b613ce2576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613cec8484614023565b949350505050565b600080600080600080867f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636fbc6f6b826040518263ffffffff1660e01b8152600401613d73919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa158015613d90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613db4919061490d565b613dea576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8773ffffffffffffffffffffffffffffffffffffffff166354fd4d506040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e59919061480d565b96508660ff1660011415613ee0578795508573ffffffffffffffffffffffffffffffffffffffff1663f93f515b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613eb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ed991906147f0565b9450613fc6565b8793508373ffffffffffffffffffffffffffffffffffffffff16632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f5291906147f0565b92508373ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fc391906147f0565b91505b5091939550919395565b6000821580613fdd575081155b15613fea5750600061401d565b612710613ff8600282614b1a565b61ffff1661400684866149d3565b6140109190614b3b565b61401a9190614a3f565b90505b92915050565b6040517f055ee9b500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600091829185169063055ee9b590602401602060405180830381865afa158015614094573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140b891906147f0565b73ffffffffffffffffffffffffffffffffffffffff1614159392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146140f957600080fd5b50565b6000806040838503121561410f57600080fd5b823561411a816140d7565b9150602083013561412a816140d7565b809150509250929050565b600081518084526020808501945080840160005b8381101561419f578151805173ffffffffffffffffffffffffffffffffffffffff168852838101518489015260408082015115159089015260609081015115159088015260809096019590820190600101614149565b509495945050505050565b805173ffffffffffffffffffffffffffffffffffffffff168252600061024060208301516141f0602086018273ffffffffffffffffffffffffffffffffffffffff169052565b506040830151614204604086018215159052565b50606083015161422c606086018273ffffffffffffffffffffffffffffffffffffffff169052565b506080830151614254608086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060a083015160a085015260c083015160c085015260e083015160e085015261010080840151818601525061012080840151828287015261429783870182614135565b92505050610140808401518186015250610160808401518186015250610180808401516142c78287018215159052565b50506101a083810151908501526101c080840151908501526101e080840151908501526102008084015160ff16908501526102209283015192909301919091525090565b60208152600061401a60208301846141aa565b60006020828403121561433057600080fd5b813561433b816140d7565b9392505050565b805173ffffffffffffffffffffffffffffffffffffffff168252602081015161436f602084018215159052565b506040810151614397604084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060608101516143bf606084018273ffffffffffffffffffffffffffffffffffffffff169052565b506080818101519083015260a0808201519083015260c0808201519083015260e08082015190830152610100808201519083015261012080820151908301526101408082015190830152610160808201519083015261018080820151908301526101a080820151908301526101c080820151908301526101e09081015160ff16910152565b610200810161401d8284614342565b6020808252825182820181905260009190848201906040850190845b8181101561449657614482838551614342565b92840192610200929092019160010161446f565b50909695505050505050565b600081518084526020808501945080840160005b8381101561419f57815173ffffffffffffffffffffffffffffffffffffffff16875295820195908201906001016144b6565b600081518084526020808501945080840160005b8381101561419f578151805173ffffffffffffffffffffffffffffffffffffffff9081168952908401511683880152604090960195908201906001016144fc565b600081518084526020808501945080840160005b8381101561419f57815187529582019590820190600101614551565b805173ffffffffffffffffffffffffffffffffffffffff168252600061026060208301516145b3602086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060408301516145c7604086018215159052565b5060608301516145db606086018215159052565b506080830151608085015260a083015160a085015260c083015160c085015260e083015160e0850152610100808401518186015250610120808401518282870152614628838701826144a2565b92505050610140808401518583038287015261464483826144e8565b925050506101608084015185830382870152614660838261453d565b92505050610180808401516146798287018260ff169052565b50506101a08381015173ffffffffffffffffffffffffffffffffffffffff908116918601919091526101c0808501511515908601526101e080850151909116908501526102008084015115159085015261022080840151908501526102409283015160ff1692909301919091525090565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561475d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc088860301845261474b85835161456d565b94509285019290850190600101614711565b5092979650505050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561475d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08886030184526147cb8583516141aa565b94509285019290850190600101614791565b60208152600061401a602083018461456d565b60006020828403121561480257600080fd5b815161433b816140d7565b60006020828403121561481f57600080fd5b5051919050565b600080600080600060a0868803121561483e57600080fd5b5050835160208501516040860151606087015160809097015192989197509594509092509050565b6000806040838503121561487957600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080600080608085870312156148cf57600080fd5b84516148da816140d7565b60208601516040870151606090970151919890975090945092505050565b8051801515811461490857600080fd5b919050565b60006020828403121561491f57600080fd5b61401a826148f8565b6000806040838503121561493b57600080fd5b8251614946816140d7565b602084015190925061ffff8116811461412a57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156149ce576149ce61498d565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614a0b57614a0b61498d565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614a4e57614a4e614a10565b500490565b80516fffffffffffffffffffffffffffffffff8116811461490857600080fd5b60008060408385031215614a8657600080fd5b614a8f83614a53565b9150614a9d60208401614a53565b90509250929050565b600080600060608486031215614abb57600080fd5b614ac484614a53565b9250614ad2602085016148f8565b9150604084015164ffffffffff81168114614aec57600080fd5b809150509250925092565b600060208284031215614b0957600080fd5b815160ff8116811461433b57600080fd5b600061ffff80841680614b2f57614b2f614a10565b92169190910492915050565b60008219821115614b4e57614b4e61498d565b50019056fea2646970667358221220d15108d0bec9cc6f3903875dd8412869a3da1b36661bdc780e2e2f0ae3136d2464736f6c634300080a003360a06040523480156200001157600080fd5b5060405162001b4538038062001b45833981016040819052620000349162000608565b6000805460ff19169055816001600160a01b0381166200006757604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cc91906200070a565b6001600160a01b031660805250805160005b818110156200014257620001398382815181106200010057620001006200072f565b6020026020010151600001518483815181106200012157620001216200072f565b6020026020010151602001516200014c60201b60201c565b600101620000de565b5050505062000822565b6001600160a01b03821615806200016a57506001600160a01b038116155b156200018957604051635919af9760e11b815260040160405180910390fd5b620001a8826001600160a01b0316620004ba60201b620006751760201c565b620001d65760405163df4c572d60e01b81526001600160a01b03831660048201526024015b60405180910390fd5b620001f5816001600160a01b0316620004ba60201b620006751760201c565b6200021f5760405163df4c572d60e01b81526001600160a01b0382166004820152602401620001cd565b806001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200027c575060408051601f3d908101601f19168201909252620002799181019062000745565b60015b6200029a576040516367a7cd4360e01b815260040160405180910390fd5b8060ff16600814620002bf576040516367a7cd4360e01b815260040160405180910390fd5b506000816001600160a01b031663d62ada116040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200031f575060408051601f3d908101601f191682019092526200031c918101906200076a565b60015b6200032a576200032d565b90505b6000836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200038c575060408051601f3d908101601f19168201909252620003899181019062000745565b60015b620003aa5760405163528ca31d60e01b815260040160405180910390fd5b60128160ff161115620003d05760405163528ca31d60e01b815260040160405180910390fd5b9050826001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa9250505080156200042f575060408051601f3d908101601f191682019092526200042c91810190620007a6565b60015b6200044d576040516367a7cd4360e01b815260040160405180910390fd5b8662000461576200046185858484620004c0565b5050505050620004748484848462000526565b826001600160a01b0316846001600160a01b03167fe263805b03657ab13064915d0723c5ce14981547e7cba5283f66b9e5d81f6e6e60405160405180910390a350505050565b3b151590565b60008313620004e2576040516356e05d2b60e01b815260040160405180910390fd5b836001600160501b0316816001600160501b0316108062000501575081155b15620005205760405163b1cf675560e01b815260040160405180910390fd5b50505050565b6001600160a01b03831682156200053e57600160a11b175b6200055460ff60a21b60a284901b1682620007fb565b6001600160a01b0390951660009081526001602052604090209490945550505050565b80516001600160a01b03811681146200058f57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715620005cf57620005cf62000594565b60405290565b604051601f8201601f191681016001600160401b038111828210171562000600576200060062000594565b604052919050565b60008060408084860312156200061d57600080fd5b620006288462000577565b602085810151919450906001600160401b03808211156200064857600080fd5b818701915087601f8301126200065d57600080fd5b81518181111562000672576200067262000594565b62000682848260051b01620005d5565b818152848101925060069190911b830184019089821115620006a357600080fd5b928401925b81841015620006fa5785848b031215620006c25760008081fd5b620006cc620005aa565b620006d78562000577565b8152620006e686860162000577565b8187015283529285019291840191620006a8565b8096505050505050509250929050565b6000602082840312156200071d57600080fd5b620007288262000577565b9392505050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156200075857600080fd5b815160ff811681146200072857600080fd5b6000602082840312156200077d57600080fd5b815180151581146200072857600080fd5b80516001600160501b03811681146200058f57600080fd5b600080600080600060a08688031215620007bf57600080fd5b620007ca866200078e565b9450602086015193506040860151925060608601519150620007ef608087016200078e565b90509295509295909350565b600082198211156200081d57634e487b7160e01b600052601160045260246000fd5b500190565b6080516112f262000853600039600081816101b201528181610280015281816103e201526104ff01526112f26000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c80638456cb591161008c578063b66102df11610066578063b66102df146101d4578063e8a97a3e146101e7578063f190e5fa146101fa578063f9a650301461023f57600080fd5b80638456cb591461016d5780639dcb511a14610175578063a50cf2c8146101ad57600080fd5b80635c975abb116100bd5780635c975abb1461011c5780635cecbd0e146101325780637afb01041461015a57600080fd5b80633f4ba83a146100e457806341976e09146100ee57806354fd4d5014610114575b600080fd5b6100ec610252565b005b6101016100fc366004610f28565b610340565b6040519081526020015b60405180910390f35b610101600281565b60005460ff16604051901515815260200161010b565b610145610140366004610f4a565b610352565b6040805192835260208301919091520161010b565b610101610168366004610f90565b610376565b6100ec6103b4565b610188610183366004610f28565b6104a0565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010b565b6101887f000000000000000000000000000000000000000000000000000000000000000081565b6101016101e2366004610fbc565b6104b4565b6100ec6101f5366004610ff8565b6104d1565b61020d610208366004610f28565b6105c3565b6040805173ffffffffffffffffffffffffffffffffffffffff909416845291151560208401529082015260600161010b565b61010161024d366004610f90565b61064d565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156102dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103009190611022565b610336576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033e61067b565b565b600061034b82610761565b5092915050565b60008061035f868661064d565b915061036b848461064d565b905094509492505050565b600080600061038484610761565b90925090508161039582600a611193565b61039f908761119f565b6103a991906111dc565b925050505b92915050565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561043e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104629190611022565b610498576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033e610819565b60006104ab826105c3565b50909392505050565b60006104c96104c3858561064d565b83610376565b949350505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561055b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057f9190611022565b6105b5576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105bf82826108d9565b5050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600160205260408120548190819080610624576040517f4bb8ad8200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b947402000000000000000000000000000000000000000086161515945060a286901c9350915050565b600080600061065b84610761565b909250905061066b81600a611193565b61039f838761119f565b3b151590565b60005460ff166106ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b600080600080610770856105c3565b8095508193508294505050506000806000808573ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156107cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f19190611231565b9450945050935093508461080b5761080b84848484610dd9565b829750505050505050915091565b60005460ff1615610886576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016106e3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586107373390565b73ffffffffffffffffffffffffffffffffffffffff82161580610910575073ffffffffffffffffffffffffffffffffffffffff8116155b15610947576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82163b6109ad576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016106e3565b73ffffffffffffffffffffffffffffffffffffffff81163b610a13576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024016106e3565b8073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610a98575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610a9591810190611281565b60015b610ace576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060ff16600814610b0b576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060008173ffffffffffffffffffffffffffffffffffffffff1663d62ada116040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610b93575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610b9091810190611022565b60015b610b9c57610b9f565b90505b60008373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610c26575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610c2391810190611281565b60015b610c5c576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60128160ff161115610c9a576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b90508273ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa925050508015610d21575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610d1e91810190611231565b60015b610d57576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b86610d6857610d6885858484610dd9565b5050505050610d7984848484610e74565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fe263805b03657ab13064915d0723c5ce14981547e7cba5283f66b9e5d81f6e6e60405160405180910390a350505050565b60008313610e13576040517f56e05d2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8369ffffffffffffffffffff168169ffffffffffffffffffff161080610e37575081155b15610e6e576040517fb1cf675500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b73ffffffffffffffffffffffffffffffffffffffff83168215610ea95774020000000000000000000000000000000000000000175b610ecf7503fc000000000000000000000000000000000000000060a284901b16826112a4565b73ffffffffffffffffffffffffffffffffffffffff90951660009081526001602052604090209490945550505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610f2357600080fd5b919050565b600060208284031215610f3a57600080fd5b610f4382610eff565b9392505050565b60008060008060808587031215610f6057600080fd5b84359350610f7060208601610eff565b925060408501359150610f8560608601610eff565b905092959194509250565b60008060408385031215610fa357600080fd5b82359150610fb360208401610eff565b90509250929050565b600080600060608486031215610fd157600080fd5b83359250610fe160208501610eff565b9150610fef60408501610eff565b90509250925092565b6000806040838503121561100b57600080fd5b61101483610eff565b9150610fb360208401610eff565b60006020828403121561103457600080fd5b81518015158114610f4357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b808511156110cc57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156110b2576110b2611044565b808516156110bf57918102915b93841c9390800290611078565b509250929050565b6000826110e3575060016103ae565b816110f0575060006103ae565b816001811461110657600281146111105761112c565b60019150506103ae565b60ff84111561112157611121611044565b50506001821b6103ae565b5060208310610133831016604e8410600b841016171561114f575081810a6103ae565b6111598383611073565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561118b5761118b611044565b029392505050565b6000610f4383836110d4565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156111d7576111d7611044565b500290565b600082611212577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b805169ffffffffffffffffffff81168114610f2357600080fd5b600080600080600060a0868803121561124957600080fd5b61125286611217565b945060208601519350604086015192506060860151915061127560808701611217565b90509295509295909350565b60006020828403121561129357600080fd5b815160ff81168114610f4357600080fd5b600082198211156112b7576112b7611044565b50019056fea2646970667358221220e7485a2cb5750973f539ca59d2211008b42bb92b6c49605a53f5d9c88c330fb164736f6c634300080a003360e06040523480156200001157600080fd5b5060405162002ced38038062002ced8339810160408190526200003491620004bb565b6000805460ff19169055806001600160a01b0381166200006757604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cc9190620004bb565b6001600160a01b039081166080526001805560408051808201909152600281526105a360f41b602082015291508216620001245760405162461bcd60e51b81526004016200011b9190620004ed565b60405180910390fd5b50806001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000164573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200018a9190620004bb565b6001600160a01b031660c052604051620001a490620004ad565b604051809103906000f080158015620001c1573d6000803e3d6000fd5b506001600160a01b031660a08190526040805163204a7f0760e21b81529051638129fc1c9160048082019260009290919082900301818387803b1580156200020857600080fd5b505af11580156200021d573d6000803e3d6000fd5b50505050620002316200028a60201b60201c565b50600454600380546001600160a01b039092166001600160a01b03199283161790556000805260026020527fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b8054909116905562000545565b6000620002a460a0516200038c60201b6200119b1760201c565b9050806001600160a01b0316638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620002e257600080fd5b505af1158015620002f7573d6000803e3d6000fd5b5050600480546001600160a01b03908116600090815260026020908152604090912080546001600160a01b03199081169388169384179091558354169091179091556200035492506005915083906200043b811b6200127d17901c565b506040516001600160a01b038216907f9f69b6c10f6810213e055b0ba6bc0a4e2603f73c221aad77ea35da819cda7dc390600090a250565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260601b60148201526e5af43d82803e903d91602b57fd5bf360881b60288201526037816000f09150506001600160a01b038116620004365760405162461bcd60e51b815260206004820152601660248201527f455243313136373a20637265617465206661696c65640000000000000000000060448201526064016200011b565b919050565b600062000452836001600160a01b0384166200045b565b90505b92915050565b6000818152600183016020526040812054620004a45750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000455565b50600062000455565b610e788062001e7583390190565b600060208284031215620004ce57600080fd5b81516001600160a01b0381168114620004e657600080fd5b9392505050565b600060208083528351808285015260005b818110156200051c57858101830151858201604001528201620004fe565b818111156200052f576000604083870101525b50601f01601f1916929092016040019392505050565b60805160a05160c0516118cf620005a66000396000818161026a015281816103680152610b7001526000818161020201526110650152600081816102c4015281816105b80152818161099601528181610a840152610e7401526118cf6000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806388f64c54116100cd578063b193976311610081578063d82ecc4811610066578063d82ecc4814610309578063e3ba9ace1461031c578063f23953ab1461032f57600080fd5b8063b1939763146102f9578063b60e85181461030157600080fd5b80638f7dcfa3116100b25780638f7dcfa31461029f578063a50cf2c8146102bf578063a904aab6146102e657600080fd5b806388f64c541461026557806389b77b3e1461028c57600080fd5b806354fd4d50116101245780635da33c5b116101095780635da33c5b146101fd578063765e0159146102245780638456cb591461025d57600080fd5b806354fd4d50146101d05780635c975abb146101e657600080fd5b806313d8c8401461015657806321d18456146101a05780632932472f146101b35780633f4ba83a146101c8575b600080fd5b6004546101769073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6101766101ae366004611651565b610337565b6101c66101c1366004611697565b61058a565b005b6101c6610968565b6101d8600181565b604051908152602001610197565b60005460ff165b6040519015158152602001610197565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101766102323660046116da565b73ffffffffffffffffffffffffffffffffffffffff9081166000908152600260205260409020541690565b6101c6610a56565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101c661029a3660046116da565b610b42565b6003546101769073ffffffffffffffffffffffffffffffffffffffff1681565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101c66102f4366004611697565b610e46565b6101d8610fb8565b6101d8611033565b6101ed6103173660046116da565b611044565b61017661032a3660046116f5565b611051565b6101c661105e565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa1580156103c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103e8919061170e565b6040518060400160405280600281526020017f43500000000000000000000000000000000000000000000000000000000000008152509061045f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b60405180910390fd5b506104686112a6565b6003805473ffffffffffffffffffffffffffffffffffffffff8082166000818152600260205260409081902080549093167fffffffffffffffffffffffff0000000000000000000000000000000000000000948516179094558154909216905590517fc75b5a710000000000000000000000000000000000000000000000000000000081523360048201526024810185905260448101849052819063c75b5a7190606401600060405180830381600087803b15801561052657600080fd5b505af115801561053a573d6000803e3d6000fd5b505060405133925073ffffffffffffffffffffffffffffffffffffffff841691507ff3ede7039176503a8ad1fe7cfaa29475a9dbe0cdcaf04ecf9a5c10570c47b10390600090a390505b92915050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610614573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610638919061170e565b61066e576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106766112a6565b60035473ffffffffffffffffffffffffffffffffffffffff838116911614156106fa576003805473ffffffffffffffffffffffffffffffffffffffff808216600090815260026020526040902080549091167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092558154169055610865565b73ffffffffffffffffffffffffffffffffffffffff838116600090815260026020908152604091829020548251808401909352600383527f4146330000000000000000000000000000000000000000000000000000000000918301919091529091848116911614610798576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b5060045473ffffffffffffffffffffffffffffffffffffffff838116911614156107fd57600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85161790555b73ffffffffffffffffffffffffffffffffffffffff828116600081815260026020526040808220805488861684529183208054929095167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790945591905281541690555b6040517fc75b5a7100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600060248301819052604483015283169063c75b5a7190606401600060405180830381600087803b1580156108dc57600080fd5b505af11580156108f0573d6000803e3d6000fd5b505050506109088260056112dd90919063ffffffff16565b508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f25e267469ba2ae82515be7b3d45df60bf8308343f0809e8cf7319058e2255ce660405160405180910390a3505050565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156109f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a16919061170e565b610a4c576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a546112ff565b565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015610ae0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b04919061170e565b610b3a576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a546113e0565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa158015610bcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf0919061170e565b6040518060400160405280600281526020017f435000000000000000000000000000000000000000000000000000000000000081525090610c5e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b50610c6a6005826114a0565b6040518060400160405280600381526020017f414634000000000000000000000000000000000000000000000000000000000081525090610cd8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b50438173ffffffffffffffffffffffffffffffffffffffff16633dc54b406040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4991906117a3565b14156040518060400160405280600381526020017f414631000000000000000000000000000000000000000000000000000000000081525090610db9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b506004805473ffffffffffffffffffffffffffffffffffffffff90811660009081526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081169487169485179091558454168317909355915190917fced6ab9afc868b3a088366f6631ae20752993b5cce5d5f0534ea5a59fcc57d5691a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610ed0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef4919061170e565b610f2a576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f19a1603900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301528416906319a1603990604401600060405180830381600087803b158015610f9b57600080fd5b505af1158015610faf573d6000803e3d6000fd5b50505050505050565b600354600090819073ffffffffffffffffffffffffffffffffffffffff165b73ffffffffffffffffffffffffffffffffffffffff81161561102d5773ffffffffffffffffffffffffffffffffffffffff9081166000908152600260205260409020541681611025816117eb565b925050610fd7565b50919050565b600061103f60056114cf565b905090565b60006105846005836114a0565b60006105846005836114d9565b60006110897f000000000000000000000000000000000000000000000000000000000000000061119b565b90508073ffffffffffffffffffffffffffffffffffffffff16638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156110d357600080fd5b505af11580156110e7573d6000803e3d6000fd5b50506004805473ffffffffffffffffffffffffffffffffffffffff908116600090815260026020526040902080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811692871692831790915582541617905550611156905060058261127d565b5060405173ffffffffffffffffffffffffffffffffffffffff8216907f9f69b6c10f6810213e055b0ba6bc0a4e2603f73c221aad77ea35da819cda7dc390600090a250565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260601b60148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f091505073ffffffffffffffffffffffffffffffffffffffff8116611278576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f455243313136373a20637265617465206661696c6564000000000000000000006044820152606401610456565b919050565b600061129f8373ffffffffffffffffffffffffffffffffffffffff84166114e5565b9392505050565b60035473ffffffffffffffffffffffffffffffffffffffff90811660009081526002602052604090205416610a5457610a5461105e565b600061129f8373ffffffffffffffffffffffffffffffffffffffff8416611534565b60005460ff1661136b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610456565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff161561144d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610456565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586113b63390565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600183016020526040812054151561129f565b6000610584825490565b600061129f8383611627565b600081815260018301602052604081205461152c57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610584565b506000610584565b6000818152600183016020526040812054801561161d576000611558600183611824565b855490915060009061156c90600190611824565b90508181146115d157600086600001828154811061158c5761158c61183b565b90600052602060002001549050808760000184815481106115af576115af61183b565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806115e2576115e261186a565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610584565b6000915050610584565b600082600001828154811061163e5761163e61183b565b9060005260206000200154905092915050565b6000806040838503121561166457600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff8116811461127857600080fd5b6000806000606084860312156116ac57600080fd5b6116b584611673565b92506116c360208501611673565b91506116d160408501611673565b90509250925092565b6000602082840312156116ec57600080fd5b61129f82611673565b60006020828403121561170757600080fd5b5035919050565b60006020828403121561172057600080fd5b8151801515811461129f57600080fd5b600060208083528351808285015260005b8181101561175d57858101830151858201604001528201611741565b8181111561176f576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b6000602082840312156117b557600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561181d5761181d6117bc565b5060010190565b600082821015611836576118366117bc565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220f1e9c81b8c3af2491c907ee66cf24e1bb76111b821db02df8f98dbb48b5ab5fa64736f6c634300080a0033608060405234801561001057600080fd5b50610e58806100206000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c806354fd4d5011610081578063c45a01551161005b578063c45a0155146101a4578063c75b5a71146101ca578063d1660f99146101dd57600080fd5b806354fd4d501461014f5780638129fc1c14610157578063c12c21c01461015f57600080fd5b80631afbb7a4116100b25780631afbb7a41461011d5780631cff79cd146101265780633dc54b401461014657600080fd5b806316128211146100d957806317d11a15146100ee57806319a160391461010a575b600080fd5b6100ec6100e7366004610b42565b6101f0565b005b6100f760035481565b6040519081526020015b60405180910390f35b6100ec610118366004610b8d565b61024c565b6100f760025481565b610139610134366004610bef565b6102c9565b6040516101019190610d49565b6100f760045481565b6100f7600181565b6100ec610344565b60015461017f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610101565b60005461017f9062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b6100ec6101d8366004610d5c565b610494565b6100ec6101eb366004610d8f565b61053d565b60015473ffffffffffffffffffffffffffffffffffffffff163314610241576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600291909155600355565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1633146102a3576040517fb126b84800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102c573ffffffffffffffffffffffffffffffffffffffff83168260006105b4565b5050565b60015460609073ffffffffffffffffffffffffffffffffffffffff16331461031d576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033d73ffffffffffffffffffffffffffffffffffffffff8416836107b4565b9392505050565b600054610100900460ff1661035f5760005460ff1615610363565b303b155b6103f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600054610100900460ff1615801561043357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000166101011790555b600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16336201000002179055801561049157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b50565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1633146104eb576040517fb126b84800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff949094169390931790925560025560035543600455565b60015473ffffffffffffffffffffffffffffffffffffffff16331461058e576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105af73ffffffffffffffffffffffffffffffffffffffff841683836107f6565b505050565b80158061065457506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015284169063dd62ed3e90604401602060405180830381865afa15801561062e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106529190610dcb565b155b6106e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e63650000000000000000000060648201526084016103eb565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526105af9084907f095ea7b300000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261084c565b606061033d83836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250610958565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526105af9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401610732565b60006108ae826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166109589092919063ffffffff16565b8051909150156105af57808060200190518101906108cc9190610de4565b6105af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016103eb565b6060610967848460008561096f565b949350505050565b606082471015610a01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016103eb565b843b610a69576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016103eb565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051610a929190610e06565b60006040518083038185875af1925050503d8060008114610acf576040519150601f19603f3d011682016040523d82523d6000602084013e610ad4565b606091505b5091509150610ae4828286610aef565b979650505050505050565b60608315610afe57508161033d565b825115610b0e5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103eb9190610d49565b60008060408385031215610b5557600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff81168114610b8857600080fd5b919050565b60008060408385031215610ba057600080fd5b610ba983610b64565b9150610bb760208401610b64565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215610c0257600080fd5b610c0b83610b64565b9150602083013567ffffffffffffffff80821115610c2857600080fd5b818501915085601f830112610c3c57600080fd5b813581811115610c4e57610c4e610bc0565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715610c9457610c94610bc0565b81604052828152886020848701011115610cad57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b83811015610cea578181015183820152602001610cd2565b83811115610cf9576000848401525b50505050565b60008151808452610d17816020860160208601610ccf565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061033d6020830184610cff565b600080600060608486031215610d7157600080fd5b610d7a84610b64565b95602085013595506040909401359392505050565b600080600060608486031215610da457600080fd5b610dad84610b64565b9250610dbb60208501610b64565b9150604084013590509250925092565b600060208284031215610ddd57600080fd5b5051919050565b600060208284031215610df657600080fd5b8151801515811461033d57600080fd5b60008251610e18818460208701610ccf565b919091019291505056fea2646970667358221220448e7046078cd668c09328d857e534e2aab6cdc0e691d3d4f2c8baae8e084b1364736f6c634300080a003360c06040523480156200001157600080fd5b506040516200162738038062001627833981016040819052620000349162000177565b60408051808201909152600281526105a360f41b60208201526001600160a01b038216620000805760405162461bcd60e51b8152600401620000779190620001a9565b60405180910390fd5b50806001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e6919062000177565b6001600160a01b03166080816001600160a01b031681525050806001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200013e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000164919062000177565b6001600160a01b031660a0525062000201565b6000602082840312156200018a57600080fd5b81516001600160a01b0381168114620001a257600080fd5b9392505050565b600060208083528351808285015260005b81811015620001d857858101830151858201604001528201620001ba565b81811115620001eb576000604083870101525b50601f01601f1916929092016040019392505050565b60805160a0516113c2620002656000396000818161021f0152818161036401526106d501526000818160af0152818161012a015281816104420152818161056e015281816107b301528181610aa601528181610b890152610c6701526113c26000f3fe60806040526004361061005e5760003560e01c80635869dba8116100435780635869dba814610199578063deecfbc9146101bb578063e79a4089146101ce57600080fd5b80634f0e0ef31461011857806354fd4d501461017657600080fd5b366101135760408051808201909152600381527f574732000000000000000000000000000000000000000000000000000000000060208201523373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b60405180910390fd5b50005b600080fd5b34801561012457600080fd5b5061014c7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561018257600080fd5b5061018b600181565b60405190815260200161016d565b3480156101a557600080fd5b506101b96101b4366004611263565b6101ee565b005b6101b96101c936600461128f565b61031d565b3480156101da57600080fd5b506101b96101e93660046112e1565b61068e565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201819052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa15801561027b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061029f9190611318565b6040518060400160405280600281526020017f43500000000000000000000000000000000000000000000000000000000000008152509061030d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b506103188383610a77565b505050565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808516600483015284917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa1580156103ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103d19190611318565b6040518060400160405280600281526020017f52500000000000000000000000000000000000000000000000000000000000008152509061043f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e6919061133a565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600381526020017f57473100000000000000000000000000000000000000000000000000000000008152509061056b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156105d457600080fd5b505af11580156105e8573d6000803e3d6000fd5b50505050506105f78434610b3c565b6040517f9aa5d46200000000000000000000000000000000000000000000000000000000815234600482015273ffffffffffffffffffffffffffffffffffffffff848116602483015261ffff84166044830152851690639aa5d46290606401600060405180830381600087803b15801561067057600080fd5b505af1158015610684573d6000803e3d6000fd5b5050505050505050565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808516600483015284917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa15801561071e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107429190611318565b6040518060400160405280600281526020017f5250000000000000000000000000000000000000000000000000000000000000815250906107b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610833573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610857919061133a565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600381526020017f5747310000000000000000000000000000000000000000000000000000000000815250906108dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b506109703330858773ffffffffffffffffffffffffffffffffffffffff166336dda7d56040518163ffffffff1660e01b8152600401602060405180830381865afa15801561092e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610952919061133a565b73ffffffffffffffffffffffffffffffffffffffff16929190610cd4565b6040517f05fe138b0000000000000000000000000000000000000000000000000000000081526004810184905230602482015260009073ffffffffffffffffffffffffffffffffffffffff8616906305fe138b906044016020604051808303816000875af11580156109e6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0a9190611357565b9050610a168382610a77565b8273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f6de63bb986f2779478e384365c03cc2e62f06b453856acca87d5a519ce02664960405160405180910390a35050505050565b6040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632e1a7d4d90602401600060405180830381600087803b158015610aff57600080fd5b505af1158015610b13573d6000803e3d6000fd5b50610b389250505073ffffffffffffffffffffffffffffffffffffffff831682610d6f565b5050565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015282917f00000000000000000000000000000000000000000000000000000000000000009091169063dd62ed3e90604401602060405180830381865afa158015610bd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf69190611357565b1015610b38576040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303816000875af1158015610cb0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103189190611318565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052610d69908590610ec9565b50505050565b80471015610dd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610107565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114610e33576040519150601f19603f3d011682016040523d82523d6000602084013e610e38565b606091505b5050905080610318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610107565b6000610f2b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16610fd59092919063ffffffff16565b8051909150156103185780806020019051810190610f499190611318565b610318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610107565b6060610fe48484600085610fee565b90505b9392505050565b606082471015611080576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610107565b843b6110e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610107565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516111119190611370565b60006040518083038185875af1925050503d806000811461114e576040519150601f19603f3d011682016040523d82523d6000602084013e611153565b606091505b509150915061116382828661116e565b979650505050505050565b6060831561117d575081610fe7565b82511561118d5782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b60005b838110156111dc5781810151838201526020016111c4565b83811115610d695750506000910152565b602081526000825180602084015261120c8160408501602087016111c1565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461126057600080fd5b50565b6000806040838503121561127657600080fd5b82356112818161123e565b946020939093013593505050565b6000806000606084860312156112a457600080fd5b83356112af8161123e565b925060208401356112bf8161123e565b9150604084013561ffff811681146112d657600080fd5b809150509250925092565b6000806000606084860312156112f657600080fd5b83356113018161123e565b92506020840135915060408401356112d68161123e565b60006020828403121561132a57600080fd5b81518015158114610fe757600080fd5b60006020828403121561134c57600080fd5b8151610fe78161123e565b60006020828403121561136957600080fd5b5051919050565b600082516113828184602087016111c1565b919091019291505056fea264697066735822122017fd7fc76e4a1efcf24b78a3417fad7ab9576f0a23aa756ddb211c5e2227aa9564736f6c634300080a003360806040523480156200001157600080fd5b5060405162002b8038038062002b80833981016040819052620000349162000122565b6001600160a01b0381166200008f5760405162461bcd60e51b815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640160405180910390fd5b6001600160a01b03811660008181526001602052604080822080546001600160601b0319166b204fce5e3e2502611000000090811790915590517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91620000f99190815260200190565b60405180910390a350600680546001600160a81b031916336101000260ff191617905562000154565b6000602082840312156200013557600080fd5b81516001600160a01b03811681146200014d57600080fd5b9392505050565b612a1c80620001646000396000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c806370a08231116100f9578063b4b5ea5711610097578063dd62ed3e11610071578063dd62ed3e14610503578063e7a324dc14610555578063f1127ed81461057c578063f2fde38b146105ee57600080fd5b8063b4b5ea57146104ca578063c3cda520146104dd578063d505accf146104f057600080fd5b806395d89b41116100d357806395d89b411461045b5780639742ca4614610497578063a9059cbb146104aa578063b0660c3d146104bd57600080fd5b806370a08231146103c7578063782d6fe11461040b5780637ecebe001461043b57600080fd5b806330adf81f11610166578063481c6a7511610140578063481c6a751461031e578063587cde1e146103435780635c19a95c146103795780636fcfff451461038c57600080fd5b806330adf81f14610298578063313ce567146102bf578063349dc329146102d957600080fd5b806320606b701161019757806320606b70146102545780632185810b1461027b57806323b872dd1461028557600080fd5b806306fdde03146101be578063095ea7b31461021057806318160ddd14610233575b600080fd5b6101fa6040518060400160405280600781526020017f47656172626f780000000000000000000000000000000000000000000000000081525081565b60405161020791906124a3565b60405180910390f35b61022361021e36600461253f565b610601565b6040519015158152602001610207565b6102466b204fce5e3e2502611000000081565b604051908152602001610207565b6102467f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b61028361070d565b005b610223610293366004612569565b6107ee565b6102467f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b6102c7601281565b60405160ff9091168152602001610207565b6007546102f99073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610207565b6006546102f990610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6102f96103513660046125a5565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6102836103873660046125a5565b61098a565b6103b261039a3660046125a5565b60046020526000908152604090205463ffffffff1681565b60405163ffffffff9091168152602001610207565b6102466103d53660046125a5565b73ffffffffffffffffffffffffffffffffffffffff166000908152600160205260409020546bffffffffffffffffffffffff1690565b61041e61041936600461253f565b610997565b6040516bffffffffffffffffffffffff9091168152602001610207565b6102466104493660046125a5565b60056020526000908152604090205481565b6101fa6040518060400160405280600481526020017f474541520000000000000000000000000000000000000000000000000000000081525081565b6102836104a53660046125a5565b610cae565b6102236104b836600461253f565b610e20565b6006546102239060ff1681565b61041e6104d83660046125a5565b610e5c565b6102836104eb3660046125d1565b610efa565b6102836104fe366004612629565b611310565b610246610511366004612693565b73ffffffffffffffffffffffffffffffffffffffff9182166000908152602081815260408083209390941682529190915220546bffffffffffffffffffffffff1690565b6102467fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b6105c561058a3660046126c6565b600360209081526000928352604080842090915290825290205463ffffffff81169064010000000090046bffffffffffffffffffffffff1682565b6040805163ffffffff90931683526bffffffffffffffffffffffff909116602083015201610207565b6102836105fc3660046125a5565b61187a565b6000807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83141561063f57506bffffffffffffffffffffffff610664565b6106618360405180606001604052806025815260200161285260259139611a15565b90505b3360008181526020818152604080832073ffffffffffffffffffffffffffffffffffffffff89168085529083529281902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff871690811790915590519081529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a360019150505b92915050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314610798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e616765720060448201526064015b60405180910390fd5b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f795b0e16c8da9807b0a215f3749bd6dbcc49fc0472183f4e446abb7dcbd9d00790600090a1565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081815260408083203380855290835281842054825160608101909352602580845291936bffffffffffffffffffffffff909116928592610856928892919061285290830139611a15565b90508673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156108a257506bffffffffffffffffffffffff82811614155b156109725760006108cc83836040518060600160405280603d8152602001612974603d9139611a67565b73ffffffffffffffffffffffffffffffffffffffff898116600081815260208181526040808320948a168084529482529182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff87169081179091559151918252939450919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505b61097d878783611ad5565b5060019695505050505050565b6109943382611e9c565b50565b6000438210610a28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f476561723a3a6765745072696f72566f7465733a206e6f74207965742064657460448201527f65726d696e656400000000000000000000000000000000000000000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff831660009081526004602052604090205463ffffffff1680610a63576000915050610707565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604081208491610a95600185612735565b63ffffffff90811682526020820192909252604001600020541611610b1b5773ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812090610ae5600184612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff1691506107079050565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020908152604080832083805290915290205463ffffffff16831015610b63576000915050610707565b600080610b71600184612735565b90505b8163ffffffff168163ffffffff161115610c565760006002610b968484612735565b610ba0919061275a565b610baa9083612735565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260036020908152604080832063ffffffff8581168552908352928190208151808301909252549283168082526401000000009093046bffffffffffffffffffffffff1691810191909152919250871415610c2a576020015194506107079350505050565b805163ffffffff16871115610c4157819350610c4f565b610c4c600183612735565b92505b5050610b74565b5073ffffffffffffffffffffffffffffffffffffffff8516600090815260036020908152604080832063ffffffff909416835292905220546bffffffffffffffffffffffff6401000000009091041691505092915050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314610d34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e6167657200604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff8116610db1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640161078f565b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f2f834d1c8c4b956018fff5faca4d99868ae635487424d9c265c257ccbc698c6a90600090a250565b600080610e45836040518060600160405280602681526020016128a760269139611a15565b9050610e52338583611ad5565b5060019392505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526004602052604081205463ffffffff1680610e94576000610ef3565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812090610ec5600184612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b9392505050565b604080518082018252600781527f47656172626f780000000000000000000000000000000000000000000000000060209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f028ef9f797075f74ac647c65fde04fb0f128c2d59fd40f45732269917642fd4681840152466060820152306080808301919091528351808303909101815260a0820184528051908301207fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60c083015273ffffffffffffffffffffffffffffffffffffffff8a1660e08301526101008201899052610120808301899052845180840390910181526101408301909452835193909201929092207f19010000000000000000000000000000000000000000000000000000000000006101608401526101628301829052610182830181905290916000906101a201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa1580156110d8573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166111a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f476561723a3a64656c656761746542795369673a20696e76616c69642073696760448201527f6e61747572650000000000000000000000000000000000000000000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff811660009081526005602052604081208054916111d7836127a4565b919050558914611269576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f476561723a3a64656c656761746542795369673a20696e76616c6964206e6f6e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161078f565b874211156112f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f476561723a3a64656c656761746542795369673a207369676e6174757265206560448201527f7870697265640000000000000000000000000000000000000000000000000000606482015260840161078f565b611303818b611e9c565b505050505b505050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86141561134d57506bffffffffffffffffffffffff611372565b61136f8660405180606001604052806024815260200161291c60249139611a15565b90505b604080518082018252600781527f47656172626f780000000000000000000000000000000000000000000000000060209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f028ef9f797075f74ac647c65fde04fb0f128c2d59fd40f45732269917642fd4681840152466060820152306080808301919091528351808303909101815260a0909101835280519082012073ffffffffffffffffffffffffffffffffffffffff8b166000908152600590925291812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918c918c918c919086611472836127a4565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810188905260e001604051602081830303815290604052805190602001209050600082826040516020016115199291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff8b169284019290925260608301899052608083018890529092509060019060a0016020604051602081039080840390855afa1580156115a2573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661164a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a7065726d69743a20696e76616c6964207369676e617475726500604482015260640161078f565b8b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146116df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f476561723a3a7065726d69743a20756e617574686f72697a6564000000000000604482015260640161078f565b88421115611749576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a7065726d69743a207369676e6174757265206578706972656400604482015260640161078f565b846000808e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508a73ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258760405161186491906bffffffffffffffffffffffff91909116815260200190565b60405180910390a3505050505050505050505050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314611900576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e6167657200604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff811661197d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640161078f565b60065460405173ffffffffffffffffffffffffffffffffffffffff80841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36006805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b6000816c010000000000000000000000008410611a5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b509192915050565b6000836bffffffffffffffffffffffff16836bffffffffffffffffffffffff1611158290611ac2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b50611acd83856127dd565b949350505050565b60065460ff1680611b025750600654610100900473ffffffffffffffffffffffffffffffffffffffff1633145b80611b24575060075473ffffffffffffffffffffffffffffffffffffffff1633145b611b8a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f476561723a3a7472616e73666572732061726520666f7262696464656e000000604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff8316611c2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603c60248201527f476561723a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260448201527f616e736665722066726f6d20746865207a65726f206164647265737300000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff8216611cd0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f476561723a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260448201527f616e7366657220746f20746865207a65726f2061646472657373000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260016020908152604091829020548251606081019093526036808452611d2d936bffffffffffffffffffffffff90921692859291906129b190830139611a67565b73ffffffffffffffffffffffffffffffffffffffff848116600090815260016020908152604080832080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff968716179055928616825290829020548251606081019093526030808452611dbf949190911692859290919061287790830139611f50565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260409182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff968716179055905193851684529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a373ffffffffffffffffffffffffffffffffffffffff808416600090815260026020526040808220548584168352912054611e9792918216911683611fc1565b505050565b73ffffffffffffffffffffffffffffffffffffffff808316600081815260026020818152604080842080546001845282862054949093528787167fffffffffffffffffffffffff000000000000000000000000000000000000000084168117909155905191909516946bffffffffffffffffffffffff9092169391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4611f4a828483611fc1565b50505050565b600080611f5d8486612802565b9050846bffffffffffffffffffffffff16816bffffffffffffffffffffffff1610158390611fb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b50949350505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561200b57506000816bffffffffffffffffffffffff16115b15611e975773ffffffffffffffffffffffffffffffffffffffff8316156120fd5773ffffffffffffffffffffffffffffffffffffffff831660009081526004602052604081205463ffffffff1690816120655760006120c4565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812090612096600185612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b905060006120eb82856040518060600160405280602881526020016128cd60289139611a67565b90506120f9868484846121e2565b5050505b73ffffffffffffffffffffffffffffffffffffffff821615611e975773ffffffffffffffffffffffffffffffffffffffff821660009081526004602052604081205463ffffffff1690816121525760006121b1565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812090612183600185612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b905060006121d882856040518060600160405280602781526020016128f560279139611f50565b9050611308858484845b60006122064360405180606001604052806034815260200161294060349139612465565b905060008463ffffffff1611801561226d575073ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812063ffffffff831691612251600188612735565b63ffffffff908116825260208201929092526040016000205416145b156123035773ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812083916122a4600188612735565b63ffffffff168152602081019190915260400160002080546bffffffffffffffffffffffff92909216640100000000027fffffffffffffffffffffffffffffffff000000000000000000000000ffffffff9092169190911790556123fe565b60408051808201825263ffffffff80841682526bffffffffffffffffffffffff808616602080850191825273ffffffffffffffffffffffffffffffffffffffff8b166000908152600382528681208b8616825290915294909420925183549451909116640100000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009094169116179190911790556123a5846001612832565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260046020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff929092169190911790555b604080516bffffffffffffffffffffffff80861682528416602082015273ffffffffffffffffffffffffffffffffffffffff8716917fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724910160405180910390a25050505050565b6000816401000000008410611a5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91905b600060208083528351808285015260005b818110156124d0578581018301518582016040015282016124b4565b818111156124e2576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461253a57600080fd5b919050565b6000806040838503121561255257600080fd5b61255b83612516565b946020939093013593505050565b60008060006060848603121561257e57600080fd5b61258784612516565b925061259560208501612516565b9150604084013590509250925092565b6000602082840312156125b757600080fd5b610ef382612516565b803560ff8116811461253a57600080fd5b60008060008060008060c087890312156125ea57600080fd5b6125f387612516565b9550602087013594506040870135935061260f606088016125c0565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a03121561264457600080fd5b61264d88612516565b965061265b60208901612516565b95506040880135945060608801359350612677608089016125c0565b925060a0880135915060c0880135905092959891949750929550565b600080604083850312156126a657600080fd5b6126af83612516565b91506126bd60208401612516565b90509250929050565b600080604083850312156126d957600080fd5b6126e283612516565b9150602083013563ffffffff811681146126fb57600080fd5b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600063ffffffff8381169083168181101561275257612752612706565b039392505050565b600063ffffffff80841680612798577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156127d6576127d6612706565b5060010190565b60006bffffffffffffffffffffffff8381169083168181101561275257612752612706565b60006bffffffffffffffffffffffff80831681851680830382111561282957612829612706565b01949350505050565b600063ffffffff8083168185168083038211156128295761282961270656fe476561723a3a617070726f76653a20616d6f756e7420657863656564732039362062697473476561723a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e74206f766572666c6f7773476561723a3a7472616e736665723a20616d6f756e7420657863656564732039362062697473476561723a3a5f6d6f7665566f7465733a20766f746520616d6f756e7420756e646572666c6f7773476561723a3a5f6d6f7665566f7465733a20766f746520616d6f756e74206f766572666c6f7773476561723a3a7065726d69743a20616d6f756e7420657863656564732039362062697473476561723a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d62657220657863656564732033322062697473476561723a3a7472616e7366657246726f6d3a207472616e7366657220616d6f756e742065786365656473207370656e64657220616c6c6f77616e6365476561723a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e7420657863656564732062616c616e6365a26469706673582212201b84fd7789a35c022f692420863210a30e82d2405659f5a28275d433fa53467f64736f6c634300080a003360806040526016805460ff1916905534801561001a57600080fd5b506040516110a73803806110a7833981016040819052610039916100b6565b600080546001600160a01b038085166001600160a01b0319928316179092556003805492841692909116919091179055610080600a6b033b2e3c9fd0803ce80000006100e9565b60075550506b033b2e3c9fd0803ce800000060155561010b565b80516001600160a01b03811681146100b157600080fd5b919050565b600080604083850312156100c957600080fd5b6100d28361009a565b91506100e06020840161009a565b90509250929050565b60008261010657634e487b7160e01b600052601260045260246000fd5b500490565b610f8d8061011a6000396000f3fe608060405234801561001057600080fd5b50600436106102e95760003560e01c806367c99d5811610191578063c5f956af116100e3578063dbcb313b11610097578063f11a648711610071578063f11a648714610320578063f3fdb15a146105f1578063fe14112d1461061157600080fd5b8063dbcb313b146105d6578063e941fa78146105df578063ef8d9603146105e857600080fd5b8063cb3905e1116100c8578063cb3905e1146105c4578063cf33d95514610320578063d0efe753146105cd57600080fd5b8063c5f956af14610588578063ca9505e4146105a857600080fd5b80639aa5d46211610145578063b6ac642a1161011f578063b6ac642a14610567578063bb04b19314610567578063bf28068b1461057557600080fd5b80639aa5d46214610544578063a4e8273e14610557578063b3554a0a1461055e57600080fd5b8063788c6bfe11610176578063788c6bfe146104ef5780638456cb591461050157806396df5dc01461053157600080fd5b806367c99d58146104de57806374375359146104e757600080fd5b806336dda7d51161024a5780634d778ad1116101fe57806354fd4d50116101d857806354fd4d50146104c05780635c975abb146104c8578063609ae317146104d557600080fd5b80634d778ad114610491578063532fe502146104a45780635427c938146104ad57600080fd5b80633f4ba83a1161022f5780633f4ba83a1461045257806345d31f9d1461047f5780634c19386c1461048857600080fd5b806336dda7d51461040f5780633e163df01461042f57600080fd5b80632495a599116102a157806329f3d3b61161028657806329f3d3b6146103b35780632a3354c9146103bc5780632e97ca21146103dc57600080fd5b80632495a599146103735780632954018c1461039357600080fd5b8063078c4781116102d2578063078c4781146103205780630fce70fb146103335780631e16e4fc1461033b57600080fd5b8063030dbb04146102ee57806305fe138b1461030a575b600080fd5b6102f760105481565b6040519081526020015b60405180910390f35b6102f7610318366004610ce8565b600092915050565b61033161032e366004610d14565b50565b005b6015546102f7565b61034e610349366004610d2f565b610618565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610301565b60035461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b60005461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6102f760095481565b600a5461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103ff6103ea366004610d14565b60066020526000908152604090205460ff1681565b6040519015158152602001610301565b60055461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103ff61043d366004610d14565b60146020526000908152604090205460ff1681565b610331601680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b6102f760075481565b6102f760015481565b6102f761049f366004610d2f565b61064f565b6102f760115481565b6102f76104bb366004610d2f565b61066d565b6102f7600181565b6016546103ff9060ff1681565b6102f760085481565b6102f7600d5481565b6102f7610685565b6b033b2e3c9fd0803ce80000006102f7565b610331601680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b61033161053f366004610d2f565b601555565b610331610552366004610d48565b505050565b60016102f7565b6102f7600e5481565b61033161032e366004610d2f565b610331610583366004610ce8565b61071d565b60135461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103316105b6366004610d7d565b600b92909255600c55600d55565b6102f7600c5481565b6102f7600b5481565b6102f760155481565b6102f7600f5481565b6102f760025481565b60125461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b60006102f7565b6004818154811061062857600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6000610667826b033b2e3c9fd0803ce800000061077a565b92915050565b6000610667826b033b2e3c9fd0803ce80000006108e9565b6003546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156106f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107189190610da9565b905090565b6009829055600a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691909117909155600354610776911682846109fe565b5050565b60408051808201909152600281527f4d330000000000000000000000000000000000000000000000000000000000006020820152600090826107f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b60405180910390fd5b506000610800600284610e72565b90506b033b2e3c9fd0803ce8000000610839827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610ead565b6108439190610e72565b8411156040518060400160405280600281526020017f4d31000000000000000000000000000000000000000000000000000000000000815250906108b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b5082816108cd6b033b2e3c9fd0803ce800000087610ec4565b6108d79190610f01565b6108e19190610e72565b949350505050565b60008215806108f6575081155b1561090357506000610667565b8161091b60026b033b2e3c9fd0803ce8000000610e72565b610945907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610ead565b61094f9190610e72565b8311156040518060400160405280600281526020017f4d31000000000000000000000000000000000000000000000000000000000000815250906109c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b506b033b2e3c9fd0803ce80000006109d9600282610e72565b6109e38486610ec4565b6109ed9190610f01565b6109f79190610e72565b9392505050565b6040805173ffffffffffffffffffffffffffffffffffffffff848116602483015260448083018590528351808403909101815260649092018352602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65649084015261055292869291600091610ac9918516908490610b73565b8051909150156105525780806020019051810190610ae79190610f19565b610552576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016107e9565b60606108e1848460008585843b610be6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107e9565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051610c0f9190610f3b565b60006040518083038185875af1925050503d8060008114610c4c576040519150601f19603f3d011682016040523d82523d6000602084013e610c51565b606091505b5091509150610c61828286610c6c565b979650505050505050565b60608315610c7b5750816109f7565b825115610c8b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ce357600080fd5b919050565b60008060408385031215610cfb57600080fd5b82359150610d0b60208401610cbf565b90509250929050565b600060208284031215610d2657600080fd5b6109f782610cbf565b600060208284031215610d4157600080fd5b5035919050565b600080600060608486031215610d5d57600080fd5b83359250610d6d60208501610cbf565b9150604084013590509250925092565b600080600060608486031215610d9257600080fd5b505081359360208301359350604090920135919050565b600060208284031215610dbb57600080fd5b5051919050565b60005b83811015610ddd578181015183820152602001610dc5565b83811115610dec576000848401525b50505050565b6020815260008251806020840152610e11816040850160208701610dc2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082610ea8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600082821015610ebf57610ebf610e43565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610efc57610efc610e43565b500290565b60008219821115610f1457610f14610e43565b500190565b600060208284031215610f2b57600080fd5b815180151581146109f757600080fd5b60008251610f4d818460208701610dc2565b919091019291505056fea26469706673582212204edb887d94928b3914f60ab48df0182da9eb30ddbb7021b164cc728b60a655d564736f6c634300080a003360e06040523480156200001157600080fd5b5060405162013af238038062013af2833981016040819052620000349162000630565b826001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000073573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000999190620007bf565b620000a433620004ab565b6001600160a01b038116608081905260408051630873769560e01b815290516308737695916004808201926020929091908290030181865afa158015620000ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001159190620007bf565b6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000153573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001799190620007bf565b6001600160a01b0390811660a052841660c0525060405183906200019d9062000519565b6001600160a01b039091168152602001604051809103906000f080158015620001ca573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b0392909216918217905560608301516080840151604051620002029062000527565b6001600160a01b03938416815292909116602083015215156040820152606001604051809103906000f0801580156200023f573d6000803e3d6000fd5b50600280546001600160a01b0319166001600160a01b0392909216919091179055604051600090620002746020820162000535565b601f1982820381018352601f909101166040819052600154600254620002b0926001600160a01b039283169291909116908790602001620007e6565b60408051601f1981840301815290829052620002d09291602001620008e8565b60408051601f19818403018152919052905060006200035982848151602092830120604080517fff00000000000000000000000000000000000000000000000000000000000000818601523060601b6001600160601b03191660218201526035810193909352605580840192909252805180840390920182526075909201909152805191012090565b600154604051634fafc35760e11b81526001600160a01b038084166004830152929350911690639f5f86ae90602401600060405180830381600087803b158015620003a357600080fd5b505af1158015620003b8573d6000803e3d6000fd5b50505050620003ce8284620004fb60201b60201c565b600380546001600160a01b0319166001600160a01b0383811691821790925560015460408051630304b08760e61b81529051919093169263c12c21c09160048083019260209291908290030181865afa15801562000430573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004569190620007bf565b6001600160a01b031614620004a05760405162461bcd60e51b815260206004820152600c60248201526b496e636f727265637420434d60a01b604482015260640160405180910390fd5b505050505062000909565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008183516020850134f59050803b6200051457600080fd5b505050565b6158e8806200243683390190565b615e978062007d1e83390190565b615f3d806200dbb583390190565b6001600160a01b03811681146200055957600080fd5b50565b8051620005698162000543565b919050565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b0381118282101715620005a957620005a96200056e565b60405290565b604080519081016001600160401b0381118282101715620005a957620005a96200056e565b604051601f8201601f191681016001600160401b0381118282101715620005ff57620005ff6200056e565b604052919050565b80516001600160801b03811681146200056957600080fd5b805180151581146200056957600080fd5b6000806000606084860312156200064657600080fd5b8351620006538162000543565b602085810151919450906001600160401b03808211156200067357600080fd5b9086019060a082890312156200068857600080fd5b6200069262000584565b6200069d8362000607565b8152620006ac84840162000607565b8482015260408084015183811115620006c457600080fd5b8401601f81018b13620006d657600080fd5b805184811115620006eb57620006eb6200056e565b620006fb878260051b01620005d4565b818152878101955060069190911b82018701908c8211156200071c57600080fd5b918701915b818310156200077e5783838e0312156200073b5760008081fd5b62000745620005af565b8351620007528162000543565b81528389015161ffff811681146200076a5760008081fd5b818a01528652948701949183019162000721565b8484015250620007939050606085016200055c565b6060830152620007a6608085016200061f565b6080830152979097015195989697509495945050505050565b600060208284031215620007d257600080fd5b8151620007df8162000543565b9392505050565b600060018060a01b0380861683526020818616818501526040606081860152610100850160018060801b038088511660608801528084890151166080880152508187015160a080880152818151808452610120890191508583019350600092505b808310156200087857835180518816835286015161ffff168683015292850192600192909201919084019062000847565b5060608901516001600160a01b031660c0890152608090980151151560e0909701969096525094979650505050505050565b6000815160005b81811015620008cd5760208185018101518683015201620008b1565b81811115620008dd576000828601525b509290920192915050565b600062000901620008fa8386620008aa565b84620008aa565b949350505050565b60805160a05160c051611ad3620009636000396000818161010a0152610ea00152600081816103790152610b170152600081816101680152818161068c01528181610a4d01528181610b860152610c190152611ad36000f3fe6080604052600436106100f35760003560e01c80638da5cb5b1161008a578063ebf0c71711610059578063ebf0c71714610367578063f2fde38b1461039b578063f4747c58146103bb578063f9aa028a146103db57600080fd5b80638da5cb5b1461025a57806394ca2cb5146102855780639c4ae2d014610327578063c12c21c01461033a57600080fd5b80633e0b1a23116100c65780633e0b1a23146101ce5780634ef501ac146101e3578063715018a614610230578063805abe6a1461024557600080fd5b806316f0115b146100f85780632954018c146101565780632f7a18811461018a578063318d0d10146101b7575b600080fd5b34801561010457600080fd5b5061012c7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561016257600080fd5b5061012c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561019657600080fd5b5060025461012c9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156101c357600080fd5b506101cc610408565b005b3480156101da57600080fd5b506101cc610498565b3480156101ef57600080fd5b506102036101fe366004611726565b610521565b6040805173ffffffffffffffffffffffffffffffffffffffff93841681529290911660208301520161014d565b34801561023c57600080fd5b506101cc610567565b34801561025157600080fd5b506101cc6105f2565b34801561026657600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff1661012c565b34801561029157600080fd5b5061012c6102a03660046117e6565b8151602092830120604080517fff00000000000000000000000000000000000000000000000000000000000000818601523060601b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660218201526035810193909352605580840192909252805180840390920182526075909201909152805191012090565b6101cc6103353660046117e6565b6107d8565b34801561034657600080fd5b5060015461012c9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561037357600080fd5b5061012c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103a757600080fd5b506101cc6103b63660046118c0565b6107f5565b3480156103c757600080fd5b506101cc6103d63660046118e4565b610925565b3480156103e757600080fd5b5060035461012c9073ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff16331461048e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b610496610a49565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610519576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b61048e610b82565b6004818154811061053157600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff91821692501682565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b61049660006116b1565b60005473ffffffffffffffffffffffffffffffffffffffff163314610673576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b3073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106f5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071991906119c4565b73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610763573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078791906119c4565b73ffffffffffffffffffffffffffffffffffffffff1614156107d5576040517fbdebb83f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33ff5b60008183516020850134f59050803b6107f057600080fd5b505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b73ffffffffffffffffffffffffffffffffffffffff8116610919576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610485565b610922816116b1565b50565b60005473ffffffffffffffffffffffffffffffffffffffff1633146109a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b805160005b818110156107f05760048382815181106109c7576109c76119e1565b602090810291909101810151825460018082018555600094855293839020825160029092020180547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff938416178255929093015192840180549092169216919091179055016109ab565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ab6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ada91906119c4565b6040517ff2fde38b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301529192509082169063f2fde38b90602401600060405180830381600087803b158015610b6757600080fd5b505af1158015610b7b573d6000803e3d6000fd5b5050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1391906119c4565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca691906119c4565b60045490915060005b81811015610dd4576003546004805473ffffffffffffffffffffffffffffffffffffffff90921691637bccacee919084908110610cee57610cee6119e1565b906000526020600020906002020160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660048481548110610d3357610d336119e1565b600091825260209091206002909102015460405160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b158015610db157600080fd5b505af1158015610dc5573d6000803e3d6000fd5b50505050806001019050610caf565b506001546040517fe26b2f6300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529084169063e26b2f6390602401600060405180830381600087803b158015610e4257600080fd5b505af1158015610e56573d6000803e3d6000fd5b50506001546040517fcf33d95500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201527f0000000000000000000000000000000000000000000000000000000000000000909116925063cf33d9559150602401600060405180830381600087803b158015610ee857600080fd5b505af1158015610efc573d6000803e3d6000fd5b50505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f919190611a10565b905060005b818110156116ab576003546040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810183905260009173ffffffffffffffffffffffffffffffffffffffff1690635094cb4f90602401602060405180830381865afa15801561100e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103291906119c4565b6001546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80841660048301529293506000929091169063fdd5764590602401602060405180830381865afa1580156110a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110cc91906119c4565b905060008173ffffffffffffffffffffffffffffffffffffffff1663ce30bbdb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561111b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113f9190611a29565b9050600c81601081111561115557611155611a4a565b14156116225760008273ffffffffffffffffffffffffffffffffffffffff166320b2c1516040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111cc91906119c4565b905060008373ffffffffffffffffffffffffffffffffffffffff1663927188d96040518163ffffffff1660e01b8152600401602060405180830381865afa15801561121b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123f91906119c4565b905060008473ffffffffffffffffffffffffffffffffffffffff166399253ac06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561128e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b291906119c4565b6040517f9dcb511a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152919250908a169063e8a97a3e9083908390639dcb511a90602401602060405180830381865afa15801561132c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135091906119c4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156113bd57600080fd5b505af11580156113d1573d6000803e3d6000fd5b50506040517f9dcb511a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301528c16925063e8a97a3e915085908390639dcb511a90602401602060405180830381865afa15801561144b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061146f91906119c4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156114dc57600080fd5b505af11580156114f0573d6000803e3d6000fd5b50506003546001546040517f7832743800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301529283169450633e7c88d69350879290911690637832743890602401602060405180830381865afa158015611573573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115979190611a79565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015261ffff166024820152604401600060405180830381600087803b15801561160657600080fd5b505af115801561161a573d6000803e3d6000fd5b505050505050505b600d81601081111561163657611636611a4a565b141561169d578173ffffffffffffffffffffffffffffffffffffffff16639b51ecd36040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561168457600080fd5b505af1158015611698573d6000803e3d6000fd5b505050505b836001019350505050610f96565b50505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561173857600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156117915761179161173f565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156117de576117de61173f565b604052919050565b600080604083850312156117f957600080fd5b823567ffffffffffffffff8082111561181157600080fd5b818501915085601f83011261182557600080fd5b81356020828211156118395761183961173f565b611869817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011601611797565b9250818352878183860101111561187f57600080fd5b8181850182850137600091830181019190915290969401359450505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461092257600080fd5b6000602082840312156118d257600080fd5b81356118dd8161189e565b9392505050565b600060208083850312156118f757600080fd5b823567ffffffffffffffff8082111561190f57600080fd5b818501915085601f83011261192357600080fd5b8135818111156119355761193561173f565b611943848260051b01611797565b818152848101925060069190911b83018401908782111561196357600080fd5b928401925b818410156119b957604084890312156119815760008081fd5b61198961176e565b84356119948161189e565b8152848601356119a38161189e565b8187015283526040939093019291840191611968565b979650505050505050565b6000602082840312156119d657600080fd5b81516118dd8161189e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215611a2257600080fd5b5051919050565b600060208284031215611a3b57600080fd5b8151601181106118dd57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060208284031215611a8b57600080fd5b815161ffff811681146118dd57600080fdfea264697066735822122090f5e4310a8b66bfdd7fdfbe64bc5b98570e7c1a415ffb0ced3c857cf6c5b14064736f6c634300080a00336101606040526000805462ff00001916620c00001790553480156200002357600080fd5b50604051620058e8380380620058e8833981016040819052620000469162000537565b806001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000085573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ab919062000537565b6000805460ff191690556001600160a01b038116620000dd57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200011c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000142919062000537565b6001600160a01b03166080816001600160a01b031681525050506000816001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200019d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c3919062000537565b6001600160a01b03831661010081905260e081905260408051632495a59960e01b81529051929350600092632495a599916004808201926020929091908290030181865afa1580156200021a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000240919062000537565b6001600160a01b03811660c05290506200025a8162000472565b816001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000299573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002bf919062000537565b6001600160a01b0316610120816001600160a01b031681525050816001600160a01b03166377532ed96040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000318573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033e919062000537565b6001600160a01b0316610140816001600160a01b031681525050816001600160a01b031663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000397573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003bd919062000537565b6001600001600a6101000a8154816001600160a01b0302191690836001600160a01b03160217905550816001600160a01b0316639068a8686040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000425573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044b919062000537565b6001600160a01b031660a0525050600380546001600160a01b031916331790555062000588565b6001600160a01b03811660009081526006602052604090205415620004aa57604051632e5a5c7760e01b815260040160405180910390fd5b61010060055410620004cf57604051631cbbe18560e01b815260040160405180910390fd5b600580546001600160a01b0383166000818152600660209081526040808320600190951b948590558483526004909152812091909155825491929062000515836200055e565b91905055505050565b6001600160a01b03811681146200053457600080fd5b50565b6000602082840312156200054a57600080fd5b815162000557816200051e565b9392505050565b60006000198214156200058157634e487b7160e01b600052601160045260246000fd5b5060010190565b60805160a05160c05160e051610100516101205161014051615248620006a0600039600081816107e20152818161371001526137c501526000818161052f01526136780152600081816103d301528181610e5701528181610ebb015281816124ff0152818161265a01528181612aa101528181612b8c01528181612c4e01528181612d0d0152613b8f015260006105a401526000818161062701528181610d2201528181610db301528181610e0001528181610e3601528181610f3f0152818161203a01528181612b6b015281816130ee015281816134dc015281816135a90152613fe601526000818161081c01528181610fe101526124c20152600081816107a80152818161118401526122cb01526152486000f3fe608060405234801561001057600080fd5b50600436106103415760003560e01c8063830aa745116101bd578063a70bc542116100f9578063e75538c7116100a2578063f9aa028a1161007c578063f9aa028a1461089d578063fdd57645146108bd578063fe47cde7146108f3578063ff6875431461091357600080fd5b8063e75538c714610864578063e958b70414610877578063f67c5bd01461088a57600080fd5b8063db7ceb80116100d3578063db7ceb8014610817578063dc2b21c11461083e578063e1998cf91461085157600080fd5b8063a70bc542146107ca578063c5e10eef146107dd578063d48bfca71461080457600080fd5b806394cf073a116101665780639f5f86ae116101405780639f5f86ae146107745780639fd12b7714610787578063a366f49614610790578063a50cf2c8146107a357600080fd5b806394cf073a146106f557806395373018146107085780639af1d35a1461071b57600080fd5b80638991b2f1116101975780638991b2f1146106af5780638fe3f93f146106cf578063944ac59f146106e257600080fd5b8063830aa7451461066f5780638345f26e146106825780638456cb59146106a757600080fd5b8063458936f51161028c578063570a7af2116102355780636ce4074a1161020f5780636ce4074a146105ef5780636e98e5e41461060f5780636f307dc314610622578063783274381461064957600080fd5b8063570a7af21461059f5780635c975abb146105c6578063654a9eda146105dc57600080fd5b80635063524a116102665780635063524a1461055157806351e3f1601461058457806354fd4d501461059757600080fd5b8063458936f51461050e57806346fb371d146105175780634f0e0ef31461052a57600080fd5b80632630c12f116102ee5780633192195c116102c85780633192195c146104be5780633e8297ca146104e65780633f4ba83a1461050657600080fd5b80632630c12f1461045857806329df0b93146104845780632f7a18811461049757600080fd5b806316f0115b1161031f57806316f0115b146103ce578063172c48c7146103f55780632362a2d81461043757600080fd5b8063055ee9b5146103465780630d8f9cee146103a657806311ca4fc2146103bb575b600080fd5b61037c610354366004614a87565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6103b96103b4366004614aa4565b610949565b005b6103b96103c9366004614aa4565b610a76565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b610408610403366004614add565b610b4e565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835261ffff90911660208301520161039d565b61044a610445366004614b13565b610b66565b60405190815260200161039d565b6001546a0100000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1661037c565b6103b9610492366004614a87565b6110be565b60005461037c906301000000900473ffffffffffffffffffffffffffffffffffffffff1681565b6104d16104cc366004614a87565b611122565b6040805192835260208301919091520161039d565b61044a6104f4366004614a87565b60096020526000908152604090205481565b6103b9611156565b61044a60055481565b6103b9610525366004614b95565b611244565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b61056461055f366004614be6565b61149b565b60408051948552602085019390935291830152606082015260800161039d565b6103b9610592366004614aa4565b611602565b61044a600281565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b60005460ff16604051901515815260200161039d565b6103b96105ea366004614c21565b611703565b6106026105fd366004614d40565b611bbb565b60405161039d9190614e5b565b6103b961061d366004614aa4565b611e8e565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b61065c610657366004614a87565b612036565b60405161ffff909116815260200161039d565b6103b961067d366004614b95565b61210f565b6000546106959062010000900460ff1681565b60405160ff909116815260200161039d565b6103b961229d565b61044a6106bd366004614a87565b60086020526000908152604090205481565b61037c6106dd366004614e6e565b612389565b6103b96106f0366004614ea5565b612718565b61044a610703366004614f0a565b612845565b6103b9610716366004614a87565b612e5a565b6001546040805161ffff808416825262010000840481166020830152640100000000840481169282019290925266010000000000008304821660608201526801000000000000000090920416608082015260a00161039d565b6103b9610782366004614a87565b612f85565b61044a60075481565b6103b961079e366004614add565b613045565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b96107d8366004614f4c565b61309b565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b9610812366004614a87565b613221565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b961084c366004614f81565b61327b565b6103b961085f366004614aa4565b613306565b610408610872366004614add565b6134c9565b61037c610885366004614a87565b613541565b61044a610898366004614a87565b6135a5565b60035461037c9073ffffffffffffffffffffffffffffffffffffffff1681565b61037c6108cb366004614a87565b600b6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b600c5461037c9073ffffffffffffffffffffffffffffffffffffffff1681565b61037c610921366004614a87565b600a6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561099b57506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b156109d2576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff1615610a14576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055610a4a828261362e565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b60035473ffffffffffffffffffffffffffffffffffffffff163314610ac7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805473ffffffffffffffffffffffffffffffffffffffff9384166301000000027fffffffffffffffffff0000000000000000000000000000000000000000ffffff90911617905560018054919092166a0100000000000000000000027fffff0000000000000000000000000000000000000000ffffffffffffffffffff909116179055565b600080610b5d6001841b6134c9565b91509150915091565b6000805460ff1615610bd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064015b60405180910390fd5b600054610100900460ff1615610c1b576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff163314610ca0576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610cab89613541565b90506000806000806000610cbe86611122565b9094509050610ccf8c8e868461149b565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152939b5093985090955093506000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015610d6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8f9190614fa4565b9050610d9b8887614fec565b610da6906001614fec565b811115610de657610de1877f00000000000000000000000000000000000000000000000000000000000000008d60018c8b870303038d61366e565b610e30565b610e3073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168d8960018a8d01869003016138c0565b610e7e877f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000089600061366e565b6040517fca9505e40000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604481018490527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ca9505e490606401600060405180830381600087803b158015610f1457600080fd5b505af1158015610f28573d6000803e3d6000fd5b50505050505050506001841115610f6757610f67837f00000000000000000000000000000000000000000000000000000000000000008d87600061366e565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260086020526040902054861916610f9c8489888461395b565b6040517f89b77b3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f000000000000000000000000000000000000000000000000000000000000000016906389b77b3e90602401600060405180830381600087803b15801561102557600080fd5b505af1158015611039573d6000803e3d6000fd5b50505073ffffffffffffffffffffffffffffffffffffffff909c16600090815260026020526040812080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550929a9950505050505050505050565b6000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314611116576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61111f81613a35565b50565b60008060008061113185613aa6565b91955092509050816111438286615004565b61114d9190615041565b92505050915091565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156111e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611204919061507c565b61123a576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611242613c24565b565b60005460ff16156112b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156112f3576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100178155338152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff9081169084161480159061137457506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b80156113985750600c5473ffffffffffffffffffffffffffffffffffffffff163314155b806113b7575073ffffffffffffffffffffffffffffffffffffffff8316155b156113ee576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113f7826135a5565b61142d576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061143885613541565b9050611448838583856000613d05565b61146c5761145b83858360006001613d05565b5061146a838583856001613d05565b505b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b6001546000908190819081906127109061ffff166114b98888615099565b6114c39190615004565b6114cd9190615041565b6114d79086614fec565b935060018760028111156114ed576114ed6150b0565b1415611587576001546000906127109061151390640100000000900461ffff168b615004565b61151d9190615041565b6001549091506127109061153b9062010000900461ffff168b615004565b6115459190615041565b61154f9086614fec565b94508481111561156657600185820303935061156a565b8094505b85811061157b578585039250611581565b84860391505b506115f7565b600287600281111561159b5761159b6150b0565b14156115f157600154600090612710906115c59068010000000000000000900461ffff168b615004565b6115cf9190615041565b6001549091506127109061153b906601000000000000900461ffff168b615004565b84840391505b945094509450949050565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561165457506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b1561168b576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff16156116cd576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055610a4a8282613ea6565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561175557506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b1561178c576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff16156117ce576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790556118048584613ea6565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152600091908616906370a0823190602401602060405180830381865afa158015611874573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118989190614fa4565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529192506000918616906370a0823190602401602060405180830381865afa15801561190a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192e9190614fa4565b60015490915060009081906a0100000000000000000000900473ffffffffffffffffffffffffffffffffffffffff16635cecbd0e61196c8689615099565b8a6119778988615099565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152600481019390935273ffffffffffffffffffffffffffffffffffffffff918216602484015260448301528a1660648201526084016040805180830381865afa1580156119f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1791906150df565b9150915060018411611a2d57611a2d898961362e565b611a3687612036565b611a449061ffff1682615004565b9050611a4f88612036565b611a5d9061ffff1683615004565b9150818110611a7857611a6f89613a35565b5050505061146c565b73ffffffffffffffffffffffffffffffffffffffff891660009081526009602052604081205483611ab56b033b2e3c9fd0803ce800000085615004565b611abf9190615041565b611ad5906b033b2e3c9fd0803ce8000000615099565b611adf9190614fec565b60015490915061271090611b0a906b033b2e3c9fd0803ce80000009062010000900461ffff16615004565b611b149190615041565b8111611b555773ffffffffffffffffffffffffffffffffffffffff8a166000908152600960205260409020819055611b4b8a613a35565b505050505061146c565b611b5e8a613f56565b50505073ffffffffffffffffffffffffffffffffffffffff871660009081526009602052604090206001905550505050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b6060611bc960005460ff1690565b15611c30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff1615611c72576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100178155338152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff908116908416141580611ce7575073ffffffffffffffffffffffffffffffffffffffff8316155b15611d3d57600c5473ffffffffffffffffffffffffffffffffffffffff163314611d3d576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611d4885613541565b90508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167faed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab0360405160405180910390a36040517f1cff79cd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821690631cff79cd90611df89087908790600401615103565b6000604051808303816000875af1158015611e17573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611e5d9190810190615132565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905595945050505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314611edf576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821615611f4f5773ffffffffffffffffffffffffffffffffffffffff8281166000908152600a6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169183169190911790555b73ffffffffffffffffffffffffffffffffffffffff811615611fbf5773ffffffffffffffffffffffffffffffffffffffff8181166000908152600b6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169184169190911790555b73ffffffffffffffffffffffffffffffffffffffff811673cccccccccccccccccccccccccccccccccccccccc141561203257600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790555b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120ba5750506001547e01000000000000000000000000000000000000000000000000000000000000900461ffff1690565b60006120c5836135a5565b9050806120fe576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612107816134c9565b949350505050565b60005460ff161561217c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156121be576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff163314612243576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61224d8383613ea6565b61226f73ffffffffffffffffffffffffffffffffffffffff83168585846138c0565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555050565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015612327573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061234b919061507c565b612381576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112426142d4565b6000805460ff16156123f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff1615612439576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff1633146124be576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166321d18456857f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612568573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061258c9190614fa4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168152600481019290925260248201526044016020604051808303816000875af11580156125e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061260b91906151a0565b6040517fbf28068b0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff80831660248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063bf28068b90604401600060405180830381600087803b1580156126a057600080fd5b505af11580156126b4573d6000803e3d6000fd5b505050506126c28382614394565b73ffffffffffffffffffffffffffffffffffffffff811660009081526008602052604081206001905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690559392505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314612769576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805461ffff92831668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9484166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff96851664010000000002969096167fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff97851662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000090931694909816939093171794909416949094179190911716919091179055565b6000805460ff16156128b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156128f5576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff16331461297a576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080600061298887613aa6565b925092509250846129a25761299d8684615099565b6129ac565b6129ac8684614fec565b935060008515612b045769021e19e0c9bab24000008510612a15576129d583603689901c615004565b6129e3603686901c84615004565b6129ed9190614fec565b603686901c6129fc8585615004565b612a069190615004565b612a109190615041565b612a52565b612a1f8388615004565b612a298584615004565b612a339190614fec565b85612a3e8585615004565b612a489190615004565b612a529190615041565b6040517fbf28068b0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff8a811660248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063bf28068b90604401600060405180830381600087803b158015612ae757600080fd5b505af1158015612afb573d6000803e3d6000fd5b50505050612d9f565b60008484612b128583615004565b612b1c9190615041565b612b269190615099565b60015490915060009061271090612b419061ffff1684615004565b612b4b9190615041565b905073ffffffffffffffffffffffffffffffffffffffff8a1663d1660f997f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000084612bb6878f614fec565b612bc09190614fec565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b158015612c3457600080fd5b505af1158015612c48573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ca9505e4838b612c949190614fec565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815260048101919091526024810184905260006044820152606401600060405180830381600087803b158015612cf357600080fd5b505af1158015612d07573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d9a9190614fa4565b925050505b6040517f16128211000000000000000000000000000000000000000000000000000000008152600481018690526024810182905273ffffffffffffffffffffffffffffffffffffffff891690631612821190604401600060405180830381600087803b158015612e0e57600080fd5b505af1158015612e22573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055509498975050505050505050565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff16158015612eac57506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b15612ee3576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff1615612f25576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055612f5a81613f56565b50600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b60035473ffffffffffffffffffffffffffffffffffffffff163314612fd6576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517ff62005acebe9b616aefb5f248b48f5e89f28437b27d1eebc0b2d911209f297af90600090a250565b60035473ffffffffffffffffffffffffffffffffffffffff163314613096576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600755565b60035473ffffffffffffffffffffffffffffffffffffffff1633146130ec576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613193576001805461ffff83167e01000000000000000000000000000000000000000000000000000000000000027dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790555050565b600061319e836135a5565b9050806131d7576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000908152600460205260409020805473ffffffffffffffffffffffffffffffffffffffff1675ffff000000000000000000000000000000000000000060a084901b161790555050565b60035473ffffffffffffffffffffffffffffffffffffffff163314613272576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61111f81614467565b60035473ffffffffffffffffffffffffffffffffffffffff1633146132cc576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805460ff90921662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff909216919091179055565b60005460ff1615613373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156133b5576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff16331461343a576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061344583613541565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260026020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055905061349c8282614394565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b60008082600114156135275750506001547f0000000000000000000000000000000000000000000000000000000000000000927e0100000000000000000000000000000000000000000000000000000000000090910461ffff169150565b50506000908152600460205260409020549060a082901c90565b73ffffffffffffffffffffffffffffffffffffffff80821660009081526002602052604090205416806135a0576040517fb5ba4c4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146136255773ffffffffffffffffffffffffffffffffffffffff8216600090815260066020526040902054613628565b60015b92915050565b6000613639826135a5565b73ffffffffffffffffffffffffffffffffffffffff909316600090815260086020526040902080549319939093169092555050565b8080156136c657507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b15613828576040517fd1660f9900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301526044820184905286169063d1660f9990606401600060405180830381600087803b15801561376357600080fd5b505af1158015613777573d6000803e3d6000fd5b50506040517f5869dba800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690527f0000000000000000000000000000000000000000000000000000000000000000169250635869dba89150604401600060405180830381600087803b15801561380b57600080fd5b505af115801561381f573d6000803e3d6000fd5b505050506138b9565b6040517fd1660f9900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301526044820184905286169063d1660f9990606401600060405180830381600087803b1580156138a057600080fd5b505af11580156138b4573d6000803e3d6000fd5b505050505b5050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261395590859061455b565b50505050565b60025b8181116138b95781811615613a2d576000613978826134c9565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529192506000918316906370a0823190602401602060405180830381865afa1580156139eb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a0f9190614fa4565b90506002811115613a2a57613a2a878388600185038961366e565b50505b60011b61395e565b73ffffffffffffffffffffffffffffffffffffffff811660009081526008602052604081205490613a6582614667565b60005490915062010000900460ff16811115613aa1576000613a86836146a7565b613a91906001614fec565b905061395584848460008561470b565b505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff16631afbb7a46040518163ffffffff1660e01b8152600401602060405180830381865afa158015613af6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b1a9190614fa4565b92508373ffffffffffffffffffffffffffffffffffffffff166317d11a156040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b8b9190614fa4565b91507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bf8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c1c9190614fa4565b929491935050565b60005460ff16613c90576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610bd0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6040805173ffffffffffffffffffffffffffffffffffffffff8681166024830152604480830186905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b30000000000000000000000000000000000000000000000000000000017905291517f1cff79cd000000000000000000000000000000000000000000000000000000008152600092861691631cff79cd91613dc6918a91600401615103565b6000604051808303816000875af1925050508015613e2457506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052613e219190810190615132565b60015b613e2d57613e61565b80511580613e50575080806020019051810190613e4a919061507c565b15156001145b15613e5f576001915050613e9d565b505b8115613e99576040517f76e3e29c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060005b95945050505050565b6000613eb1826135a5565b9050801580613ec35750600754811615155b15613efa576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83166000908152600860205260409020548116613aa15773ffffffffffffffffffffffffffffffffffffffff83166000908152600860205260409020805482179055505050565b60015473ffffffffffffffffffffffffffffffffffffffff8281166000908152600860205260408120546a010000000000000000000090930490911691908080613f9f86611122565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526127108202600482015273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350908716915063f9a6503090604401602060405180830381865afa15801561403a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061405e9190614fa4565b9250614069846146a7565b6001019150506000806000805b848110156142a157801561408f5760018186031b614092565b60015b935086841615614299576000806140a8866134c9565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8e811660048301529294509092506000918416906370a0823190602401602060405180830381865afa15801561411d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141419190614fa4565b9050600181111561428c576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff848116602483015261ffff841691908d169063f9a6503090604401602060405180830381865afa1580156141c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141ea9190614fa4565b6141f49190615004565b6141fe9087614fec565b95508886106142875760006142128b614667565b60005490915062010000900460ff16811115614249576142448d8c836001891561423e57898e0361470b565b8d61470b565b614278565b85156142785773ffffffffffffffffffffffffffffffffffffffff8d1660009081526008602052604090208b90555b50505050505050505050505050565b614295565b98861898600194505b5050505b600101614076565b506040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005460ff1615614341576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613cdb3390565b73ffffffffffffffffffffffffffffffffffffffff821615806143dd575073ffffffffffffffffffffffffffffffffffffffff8281166000908152600260205260409020541615155b15614414576040517f9e59609e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff918216600090815260026020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001691909216179055565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260066020526040902054156144c4576040517f2e5a5c7700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61010060055410614501576040517f1cbbe18500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005805473ffffffffffffffffffffffffffffffffffffffff83166000818152600660209081526040808320600190951b9485905584835260049091528120919091558254919290614552836151bd565b91905055505050565b60006145bd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166148799092919063ffffffff16565b805190915015613aa157808060200190518101906145db919061507c565b613aa1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610bd0565b60008060005b6101008110156146a0576001811b91508382161561468c578260010192505b838210614698576146a0565b60010161466d565b5050919050565b600081600114156146ba57506000919050565b61010060015b60016146cc8284614fec565b901c92506001831b848116158015906146e75750600185851c145b156146f257506146a0565b84811061470157839250614705565b8391505b506146c0565b815b81811015614846576001811b8581161561483d57600061472c826134c9565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529192506000918316906370a0823190602401602060405180830381865afa15801561479f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147c39190614fa4565b90506001811161483a57600054978318977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9097019660ff6201000090910416871161483a5750505073ffffffffffffffffffffffffffffffffffffffff86166000908152600860205260409020859055506138b9565b50505b5060010161470d565b506040517f53275fcb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606148888484600085614892565b90505b9392505050565b606082471015614924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610bd0565b843b61498c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610bd0565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516149b591906151f6565b60006040518083038185875af1925050503d80600081146149f2576040519150601f19603f3d011682016040523d82523d6000602084013e6149f7565b606091505b5091509150614a07828286614a12565b979650505050505050565b60608315614a2157508161488b565b825115614a315782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd09190614e5b565b73ffffffffffffffffffffffffffffffffffffffff8116811461111f57600080fd5b600060208284031215614a9957600080fd5b813561488b81614a65565b60008060408385031215614ab757600080fd5b8235614ac281614a65565b91506020830135614ad281614a65565b809150509250929050565b600060208284031215614aef57600080fd5b5035919050565b8035600381106135a057600080fd5b801515811461111f57600080fd5b600080600080600080600060e0888a031215614b2e57600080fd5b8735614b3981614a65565b9650614b4760208901614af6565b9550604088013594506060880135614b5e81614a65565b93506080880135614b6e81614a65565b925060a0880135915060c0880135614b8581614b05565b8091505092959891949750929550565b60008060008060808587031215614bab57600080fd5b8435614bb681614a65565b93506020850135614bc681614a65565b92506040850135614bd681614a65565b9396929550929360600135925050565b60008060008060808587031215614bfc57600080fd5b84359350614c0c60208601614af6565b93969395505050506040820135916060013590565b600080600080600060a08688031215614c3957600080fd5b8535614c4481614a65565b94506020860135614c5481614a65565b93506040860135614c6481614a65565b94979396509394606081013594506080013592915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614cf257614cf2614c7c565b604052919050565b600067ffffffffffffffff821115614d1457614d14614c7c565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600080600060608486031215614d5557600080fd5b8335614d6081614a65565b92506020840135614d7081614a65565b9150604084013567ffffffffffffffff811115614d8c57600080fd5b8401601f81018613614d9d57600080fd5b8035614db0614dab82614cfa565b614cab565b818152876020838501011115614dc557600080fd5b816020840160208301376000602083830101528093505050509250925092565b60005b83811015614e00578181015183820152602001614de8565b838111156139555750506000910152565b60008151808452614e29816020860160208601614de5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061488b6020830184614e11565b60008060408385031215614e8157600080fd5b823591506020830135614ad281614a65565b803561ffff811681146135a057600080fd5b600080600080600060a08688031215614ebd57600080fd5b614ec686614e93565b9450614ed460208701614e93565b9350614ee260408701614e93565b9250614ef060608701614e93565b9150614efe60808701614e93565b90509295509295909350565b600080600060608486031215614f1f57600080fd5b8335614f2a81614a65565b9250602084013591506040840135614f4181614b05565b809150509250925092565b60008060408385031215614f5f57600080fd5b8235614f6a81614a65565b9150614f7860208401614e93565b90509250929050565b600060208284031215614f9357600080fd5b813560ff8116811461488b57600080fd5b600060208284031215614fb657600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115614fff57614fff614fbd565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561503c5761503c614fbd565b500290565b600082615077577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60006020828403121561508e57600080fd5b815161488b81614b05565b6000828210156150ab576150ab614fbd565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600080604083850312156150f257600080fd5b505080516020909101519092909150565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015260006148886040830184614e11565b60006020828403121561514457600080fd5b815167ffffffffffffffff81111561515b57600080fd5b8201601f8101841361516c57600080fd5b805161517a614dab82614cfa565b81815285602083850101111561518f57600080fd5b613e9d826020830160208601614de5565b6000602082840312156151b257600080fd5b815161488b81614a65565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156151ef576151ef614fbd565b5060010190565b60008251615208818460208701614de5565b919091019291505056fea26469706673582212209d39bb9d4972b515acdad1ffb757acd15e103ca6ee762f88a6382b36243734ba64736f6c634300080a00336101406040523480156200001257600080fd5b5060405162005e9738038062005e97833981016040819052620000359162000198565b60016000556001600160a01b0383166200006257604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038316608081905260408051636f307dc360e01b81529051636f307dc3916004808201926020929091908290030181865afa158015620000ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d39190620001ea565b6001600160a01b031660a0816001600160a01b031681525050826001600160a01b0316634f0e0ef36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200012b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001519190620001ea565b6001600160a01b0390811660c0529190911660e0819052151561010052151561012052506200020f565b80516001600160a01b03811681146200019357600080fd5b919050565b600080600060608486031215620001ae57600080fd5b620001b9846200017b565b9250620001c9602085016200017b565b915060408401518015158114620001df57600080fd5b809150509250925092565b600060208284031215620001fd57600080fd5b62000208826200017b565b9392505050565b60805160a05160c05160e0516101005161012051615a86620004116000396000818161061101528181612fb5015261481f01526000818161031701528181610dde015281816144f901526146e5015260008181610557015281816146a901526147a901526000818161034b0152818161387d015261392d01526000818161047301528181611bfe0152818161274f0152818161280d0152818161366a01526137dd015260008181610665015281816109d801528181610b0301528181610bd501528181610cdd01528181610e6501528181610fe30152818161114e0152818161120e0152818161132e015281816114510152818161162b01528181611708015281816117e0015281816119e501528181611b1201528181611d9501528181611ed5015281816120040152818161216801528181612290015281816123c601528181612568015281816126390152818161266f0152818161293d01528181612a2101528181612a8a01528181612bde01528181612d2601528181612e6801528181612ec2015281816130a10152818161311b015281816131b401528181613341015281816134c10152818161358a0152818161372f01528181613a1a01528181613b2e01528181613dbb015281816142200152818161432801528181614492015281816148e7015281816149e801528181614aae0152614d8f0152615a866000f3fe6080604052600436106102695760003560e01c8063860aefcf11610153578063c7de38a6116100cb578063dfd594651161007f578063eb9606df11610064578063eb9606df1461081e578063f9eaee0d1461083e578063ffd9b9071461085e57600080fd5b8063dfd59465146107de578063e1f21c67146107fe57600080fd5b8063cff0ab96116100b0578063cff0ab96146106ef578063d9ccbec114610783578063dcf65482146107be57600080fd5b8063c7de38a6146106a7578063caa5c23f146106dc57600080fd5b80639c55a05411610122578063b55bb84b11610107578063b55bb84b14610633578063c12c21c014610653578063c690908a1461068757600080fd5b80639c55a054146105df578063b1836d32146105ff57600080fd5b8063860aefcf146104db5780639408b63f146105455780639b67ab30146105795780639be0536a146105bd57600080fd5b80635d91a0e0116101e65780636d19b486116101b55780637071b7c51161019a5780637071b7c51461049557806379c0ef91146104a857806382871ace146104c857600080fd5b80636d19b486146104415780636f307dc31461046157600080fd5b80635d91a0e0146103e85780635f73fbec146103fb578063601d66f61461040e5780636c8f225d1461042e57600080fd5b80633d9287fa1161023d5780635019e20a116102225780635019e20a1461039257806354fd4d50146103b257806359781034146103d557600080fd5b80633d9287fa146103055780634f0e0ef31461033957600080fd5b8062842b571461026e578063256ac915146102905780632a7ba1f7146102c55780632b7c7b11146102e5575b600080fd5b34801561027a57600080fd5b5061028e6102893660046151bf565b61087e565b005b34801561029c57600080fd5b506102b06102ab3660046151f8565b61098e565b60405190151581526020015b60405180910390f35b3480156102d157600080fd5b5061028e6102e0366004615215565b610a61565b3480156102f157600080fd5b5061028e610300366004615215565b610c3b565b34801561031157600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561034557600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102bc565b34801561039e57600080fd5b5061028e6103ad3660046151f8565b610d6a565b3480156103be57600080fd5b506103c7600281565b6040519081526020016102bc565b61028e6103e336600461522e565b61108c565b61028e6103f63660046152bb565b611275565b61028e610409366004615340565b611589565b34801561041a57600080fd5b5061028e6104293660046153d8565b6117de565b61028e61043c36600461541b565b611900565b34801561044d57600080fd5b506102b061045c3660046151f8565b611c31565b34801561046d57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b61028e6104a336600461546e565b611c60565b3480156104b457600080fd5b5061036d6104c3366004615215565b611f3e565b61028e6104d63660046152bb565b611f4b565b3480156104e757600080fd5b5060025461051c906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041682565b604080516fffffffffffffffffffffffffffffffff9384168152929091166020830152016102bc565b34801561055157600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561058557600080fd5b506004546040805167ffffffffffffffff608084901c1681526fffffffffffffffffffffffffffffffff9092166020830152016102bc565b3480156105c957600080fd5b506105d261227d565b6040516102bc91906154e2565b3480156105eb57600080fd5b5061028e6105fa36600461553c565b61228e565b34801561060b57600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561063f57600080fd5b5061028e61064e3660046151f8565b6123c4565b34801561065f57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561069357600080fd5b5061028e6106a23660046151f8565b6124c6565b3480156106b357600080fd5b506106c76106c23660046151f8565b612668565b604080519283526020830191909152016102bc565b61028e6106ea366004615557565b61289b565b3480156106fb57600080fd5b5060015461074e906fffffffffffffffffffffffffffffffff811690700100000000000000000000000000000000810460ff169071010000000000000000000000000000000000900464ffffffffff1683565b604080516fffffffffffffffffffffffffffffffff9094168452911515602084015264ffffffffff16908201526060016102bc565b34801561078f57600080fd5b506102b061079e366004615599565b600360209081526000928352604080842090915290825290205460ff1681565b3480156107ca57600080fd5b5061028e6107d93660046151f8565b612a88565b3480156107ea57600080fd5b506103c76107f93660046151f8565b612b86565b34801561080a57600080fd5b5061028e61081936600461522e565b612c6d565b34801561082a57600080fd5b5061028e6108393660046155c7565b612ec0565b34801561084a57600080fd5b506102b06108593660046151f8565b613057565b34801561086a57600080fd5b5061028e6108793660046155ee565b6131b2565b600260005414156108f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b6002600090815573ffffffffffffffffffffffffffffffffffffffff8316808252600360209081526040808420338086529083529381902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081527f9b3258bc4904fd6426b99843e206c6c7cdb1fd0f040121c25b71dafbb3851ee0910160405180910390a350506001600055565b6040517f055ee9b500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063055ee9b590602401602060405180830381865afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a43919061560b565b73ffffffffffffffffffffffffffffffffffffffff16141592915050565b60026000541415610ace576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610b5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b83919061560b565b9050610b903382846132eb565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906395373018906024015b600060405180830381600087803b158015610c1a57600080fd5b505af1158015610c2e573d6000803e3d6000fd5b5050600160005550505050565b60026000541415610ca8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610d39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5d919061560b565b9050610b90338284613411565b60026000541415610dd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000557f000000000000000000000000000000000000000000000000000000000000000015610e34576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610ec1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee5919061560b565b33600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915290205490915060ff16610f52576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f5d82613583565b5090508015610f98576040517ff713841e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b15801561102757600080fd5b505af115801561103b573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692503391507f93c70cc9715bef0d83edf2095f3595402279d274f402a73ffc17f1bcb19d863d90600090a35050600160005550565b600260005414156110f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611106613875565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063e958b70490602401602060405180830381865afa158015611197573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bb919061560b565b90506111c9848285856139b7565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401600060405180830381600087803b15801561125257600080fd5b505af1158015611266573d6000803e3d6000fd5b50506001600055505050505050565b600260005414156112e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611375573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611399919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166113e8576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806113f483613583565b915091508161142f576040517f1fdd676f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611437613875565b831561144d5761144d85858b8660016000613ae3565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632362a2d88b600185338e8e8e6040518863ffffffff1660e01b81526004016114b59796959493929190615663565b6020604051808303816000875af11580156114d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f891906156bf565b90508873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f7dfecd8419723a9d3954585a30c2a270165d70aafa146c11c1e1b88ae14390648460405161157091815260200190565b60405180910390a4505060016000555050505050505050565b600260005414156115f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ab919061560b565b90506116b5613875565b81156116cb576116cb8383338460016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d89061174a903390600090819083908d908d908d90600401615663565b6020604051808303816000875af1158015611769573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178d91906156bf565b5060405173ffffffffffffffffffffffffffffffffffffffff87169033907f460ad03b1cf79b1d64d3aefa28475f110ab66e84649c52bb41ed796b9b39198190600090a35050600160005550505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611849573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118d1576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff90811670010000000000000000000000000000000002911617600255565b6002600054141561196d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000908155606461198461ffff851687615707565b61198e9190615744565b9050611999816144f7565b6119a2816145e8565b6119ab84614668565b6119b3613875565b6040517f172c48c7000000000000000000000000000000000000000000000000000000008152600060048201819052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a64919061577f565b61ffff169150611a789050816127106157ae565b611a829083615707565b611a8c8288615707565b11611ac3576040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff86811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611b5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b81919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638587604051611bef92919091825261ffff16602082015260400190565b60405180910390a3611c2386827f00000000000000000000000000000000000000000000000000000000000000008a6139b7565b505060016000555050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526006602052604081205415155b92915050565b60026000541415611ccd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611cdb856144f7565b611ce484614668565b611ced856145e8565b600154700100000000000000000000000000000000900460ff1615611d3e576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d46613875565b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff85811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611de0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e04919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638885604051611e7292919091825261ffff16602082015260400190565b60405180910390a38215611e9057611e908484878460006001613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015611f1957600080fd5b505af1158015611f2d573d6000803e3d6000fd5b505060016000555050505050505050565b6000611c5a60058361480f565b60026000541415611fb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa15801561204b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206f919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166120be576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120c661481b565b6120fc576040517f7e52ccb400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061210782612668565b509050612112613875565b82156121285761212884848a8560016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d8906121aa908c90600290879033908f908f908f90600401615663565b6020604051808303816000875af11580156121c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ed91906156bf565b90508773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167ffada13ff2d5e1a1d9da37ad4a4130893b34e3c69c32b17f87ec31fd661b867078460405161226591815260200190565b60405180910390a45050600160005550505050505050565b6060612289600561486b565b905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612381576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561242f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612453919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146124b7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614878565b5050565b60026000541415612533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156125c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e8919061560b565b90506125f4818361489a565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401610c00565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126fc919061560b565b905060008061270b8387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156127a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127c991906156bf565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015291965061271091851690637afb010490604401602060405180830381865afa158015612863573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061288791906156bf565b6128919190615744565b9350505050915091565b60026000541415612908576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129bd919061560b565b90506129c7613875565b8115612a7e576129dc83833384600080613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015612a6557600080fd5b505af1158015612a79573d6000803e3d6000fd5b505050505b5050600160005550565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612af3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b17919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b7b576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614c92565b600080612b9283612668565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152919350600092507f000000000000000000000000000000000000000000000000000000000000000090911690633192195c906024016040805180830381865afa158015612c26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4a91906157c5565b9150819050612c5b61271084615707565b612c659190615744565b949350505050565b60026000541415612cda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063fdd5764590602401602060405180830381865afa158015612d6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d91919061560b565b73ffffffffffffffffffffffffffffffffffffffff161480612dd7575073ffffffffffffffffffffffffffffffffffffffff831660009081526006602052604090205415155b15612e0e576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612eac57600080fd5b505af1158015611c23573d6000803e3d6000fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f4f919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612fb3576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000061300a576040517f50dd11fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805464ffffffffff90921671010000000000000000000000000000000000027fffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffffff909216919091179055565b6040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063f67c5bd090602401602060405180830381865afa1580156130e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061310c91906156bf565b905080158015906131ab5750807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015613184573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a891906156bf565b16155b9392505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561321d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613241919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146132a5576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018054911515700100000000000000000000000000000000027fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff909216919091179055565b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600060448301819052917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561338c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133b091906156bf565b90506133bb816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f98274bf834d179ee08dc0604071b0dc90b54731bd5f725a5a96a39a86bce025a8360405161340391815260200190565b60405180910390a250505050565b61341a816144f7565b600154700100000000000000000000000000000000900460ff161561346b576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600160448301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561350c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061353091906156bf565b905061353b816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f9cac51154cc0d835e2f9c9d1f59a9344588cee107f4203bf58a8c797e3a58c458360405161340391815260200190565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613617919061560b565b90506000806136268387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156136c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136e491906156bf565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529195506000917f00000000000000000000000000000000000000000000000000000000000000001690633192195c906024016040805180830381865afa158015613775573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061379991906157c5565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350600092506127109187169063f9a6503090604401602060405180830381865afa158015613837573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061385b91906156bf565b6138659190615707565b9092109794965093945050505050565b34156139b5577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156138e357600080fd5b505af11580156138f7573d6000803e3d6000fd5b50506040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201523460248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16935063a9059cbb925060440190506020604051808303816000875af115801561398f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139b391906157e9565b505b565b6139c084614cb4565b6040517f830aa74500000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f0000000000000000000000000000000000000000000000000000000000000000169063830aa74590608401600060405180830381600087803b158015613a5e57600080fd5b505af1158015613a72573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fa32435755c235de2976ed44a75a2f85cb01faf0c894f639fe0c32bb9455fea8f83604051613ad591815260200190565b60405180910390a350505050565b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301523060248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b158015613b7257600080fd5b505af1158015613b86573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff871692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a28460005b8181101561441d5736888883818110613bea57613bea615806565b9050602002810190613bfc9190615835565b90506004613c0d6020830183615873565b90501015613c47576040517fe2b0e50600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b30613c5560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16141561421c578415613ca9576040517f5fb9107f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613cb86020830183615873565b613cc1916158d8565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167f59781034000000000000000000000000000000000000000000000000000000001415613e3c5760008080613d1e6020860186615873565b613d2c916004908290615920565b810190613d39919061522e565b925092509250613e34838c73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614613e2b576040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015613e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e26919061560b565b613e2d565b8b5b84846139b7565b505050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2b7c7b11000000000000000000000000000000000000000000000000000000001415613ec757600194506000613e996020840184615873565b613ea7916004908290615920565b810190613eb49190615215565b9050613ec1898983613411565b50614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2a7ba1f7000000000000000000000000000000000000000000000000000000001415613f80578415613f49576040517fc0b0caa800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613f586020840184615873565b613f66916004908290615920565b810190613f739190615215565b9050613ec18989836132eb565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f233a8caa0000000000000000000000000000000000000000000000000000000014156140e457600080613fda6020850185615873565b613fe8916004908290615920565b810190613ff5919061594a565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c8116600483015292945090925082918416906370a0823190602401602060405180830381865afa158015614069573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061408d91906156bf565b10156140dd576040517fa5ac537300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016108e7565b5050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fc690908a00000000000000000000000000000000000000000000000000000000141561416457600061413d6020840184615873565b61414b916004908290615920565b81019061415891906151f8565b9050613ec1888261489a565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f23e27a640000000000000000000000000000000000000000000000000000000014156141e45760006141bd6020840184615873565b6141cb916004908290615920565b8101906141d891906151f8565b9050613ec18882614d42565b6040517f1e9e7e7a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50614414565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff68754361426760208501856151f8565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156142d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142f4919061560b565b73ffffffffffffffffffffffffffffffffffffffff16148061436d575073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001661435560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16145b156143a4576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6144126143b46020830183615873565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506143f69250505060208401846151f8565b73ffffffffffffffffffffffffffffffffffffffff1690614e39565b505b50600101613bcf565b506040517f60c8e8938c9a0c0d88a98d6f1c562ce68077e12bf3edb8047378f2f736cb45b490600090a16040517fe1998cf900000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff86811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b1580156144d657600080fd5b505af11580156144ea573d6000803e3d6000fd5b5050505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006139b3576001546fffffffffffffffffffffffffffffffff9081169081146124c257600454608081901c906fffffffffffffffffffffffffffffffff16600067ffffffffffffffff8316431461456e578461458a565b61458a6fffffffffffffffffffffffffffffffff831686615976565b9050838111156145c6576040517f675f1a5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff81164360801b176004555050505050565b6002546fffffffffffffffffffffffffffffffff16811080614631575060025470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681115b156139b3576040517fce16799400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61467061481b565b156146a7576040517f63fc31c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1615614806577f0000000000000000000000000000000000000000000000000000000000000000801561472657503373ffffffffffffffffffffffffffffffffffffffff821614155b1561475d576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600160248301527f00000000000000000000000000000000000000000000000000000000000000001690639dc29fac90604401600060405180830381600087803b1580156147ed57600080fd5b505af1158015614801573d6000803e3d6000fd5b505050505b6139b381614cb4565b60006131ab8383614e7b565b60007f0000000000000000000000000000000000000000000000000000000000000000801561228957505060015471010000000000000000000000000000000000900464ffffffffff1642101590565b606060006131ab83614ea5565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f01565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561492b57600080fd5b505af115801561493f573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527fdf498aa1c340e992665d6fb4f3be8436d452c45a630cb6d7fab7963da39bac8793500190505b60405180910390a15050565b6040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600091829160019183917f00000000000000000000000000000000000000000000000000000000000000001690638991b2f190602401602060405180830381865afa158015614a2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a5391906156bf565b90505b808211614c895780821615614c7d576040517fe75538c700000000000000000000000000000000000000000000000000000000815260048101839052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e75538c7906024016040805180830381865afa158015614af4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b18919061577f565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529294509092506000918416906370a0823190602401602060405180830381865afa158015614b8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bb191906156bf565b90506001811115614c79576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff8481166024830152600091908b169063f9a6503090604401602060405180830381865afa158015614c33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c5791906156bf565b978801979050614c6b61ffff841682615707565b614c759088615976565b9650505b5050505b600182901b9150614a56565b50509250929050565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f50565b3373ffffffffffffffffffffffffffffffffffffffff821614801590614d0b575033600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16155b156139b3576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b158015614dd357600080fd5b505af1158015614de7573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527f69db9e9764da61b6681b89fb0f5be018506e0342036e56b59c3015a620d60977935001905061498d565b60606131ab83836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250615043565b6000826000018281548110614e9257614e92615806565b9060005260206000200154905092915050565b606081600001805480602002602001604051908101604052809291908181526020018280548015614ef557602002820191906000526020600020905b815481526020019060010190808311614ee1575b50505050509050919050565b6000818152600183016020526040812054614f4857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611c5a565b506000611c5a565b60008181526001830160205260408120548015615039576000614f746001836157ae565b8554909150600090614f88906001906157ae565b9050818114614fed576000866000018281548110614fa857614fa8615806565b9060005260206000200154905080876000018481548110614fcb57614fcb615806565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080614ffe57614ffe61598e565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611c5a565b6000915050611c5a565b6060612c65848460008585843b6150b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108e7565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516150df91906159ed565b60006040518083038185875af1925050503d806000811461511c576040519150601f19603f3d011682016040523d82523d6000602084013e615121565b606091505b509150915061513182828661513c565b979650505050505050565b6060831561514b5750816131ab565b82511561515b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e791906159ff565b73ffffffffffffffffffffffffffffffffffffffff811681146139b357600080fd5b80151581146139b357600080fd5b600080604083850312156151d257600080fd5b82356151dd8161518f565b915060208301356151ed816151b1565b809150509250929050565b60006020828403121561520a57600080fd5b81356131ab8161518f565b60006020828403121561522757600080fd5b5035919050565b60008060006060848603121561524357600080fd5b833561524e8161518f565b9250602084013561525e8161518f565b929592945050506040919091013590565b60008083601f84011261528157600080fd5b50813567ffffffffffffffff81111561529957600080fd5b6020830191508360208260051b85010111156152b457600080fd5b9250929050565b60008060008060008060a087890312156152d457600080fd5b86356152df8161518f565b955060208701356152ef8161518f565b9450604087013593506060870135615306816151b1565b9250608087013567ffffffffffffffff81111561532257600080fd5b61532e89828a0161526f565b979a9699509497509295939492505050565b60008060008060006080868803121561535857600080fd5b85356153638161518f565b945060208601359350604086013561537a816151b1565b9250606086013567ffffffffffffffff81111561539657600080fd5b6153a28882890161526f565b969995985093965092949392505050565b80356fffffffffffffffffffffffffffffffff811681146153d357600080fd5b919050565b600080604083850312156153eb57600080fd5b6153f4836153b3565b9150615402602084016153b3565b90509250929050565b61ffff811681146139b357600080fd5b6000806000806080858703121561543157600080fd5b8435935060208501356154438161518f565b925060408501356154538161540b565b915060608501356154638161540b565b939692955090935050565b60008060008060006080868803121561548657600080fd5b8535945060208601356154988161518f565b9350604086013567ffffffffffffffff8111156154b457600080fd5b6154c08882890161526f565b90945092505060608601356154d48161540b565b809150509295509295909350565b6020808252825182820181905260009190848201906040850190845b8181101561553057835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016154fe565b50909695505050505050565b60006020828403121561554e57600080fd5b6131ab826153b3565b6000806020838503121561556a57600080fd5b823567ffffffffffffffff81111561558157600080fd5b61558d8582860161526f565b90969095509350505050565b600080604083850312156155ac57600080fd5b82356155b78161518f565b915060208301356151ed8161518f565b6000602082840312156155d957600080fd5b813564ffffffffff811681146131ab57600080fd5b60006020828403121561560057600080fd5b81356131ab816151b1565b60006020828403121561561d57600080fd5b81516131ab8161518f565b6003811061565f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b73ffffffffffffffffffffffffffffffffffffffff888116825260e082019061568f602084018a615628565b6040830197909752948616606082015292909416608083015260a082015291151560c09092019190915292915050565b6000602082840312156156d157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561573f5761573f6156d8565b500290565b60008261577a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000806040838503121561579257600080fd5b825161579d8161518f565b60208401519092506151ed8161540b565b6000828210156157c0576157c06156d8565b500390565b600080604083850312156157d857600080fd5b505080516020909101519092909150565b6000602082840312156157fb57600080fd5b81516131ab816151b1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc183360301811261586957600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126158a857600080fd5b83018035915067ffffffffffffffff8211156158c357600080fd5b6020019150368190038213156152b457600080fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156159185780818660040360031b1b83161692505b505092915050565b6000808585111561593057600080fd5b8386111561593d57600080fd5b5050820193919092039150565b6000806040838503121561595d57600080fd5b82356159688161518f565b946020939093013593505050565b60008219821115615989576159896156d8565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60005b838110156159d85781810151838201526020016159c0565b838111156159e7576000848401525b50505050565b600082516158698184602087016159bd565b6020815260008251806020840152615a1e8160408501602087016159bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea2646970667358221220a3f4a705ab580a6ada1e438cd2ee4abc001b62d1d171fce12c41994900fef21664736f6c634300080a003360a06040523480156200001157600080fd5b5060405162005f3d38038062005f3d8339810160408190526200003491620012eb565b826001600160a01b031663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000073573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200009991906200147f565b6001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000d7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000fd91906200147f565b6000805460ff191690556001600160a01b0381166200012f57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200016e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200019491906200147f565b6001600160a01b03908116608052600180546001600160a01b031916918616918217905560408051636f307dc360e01b81529051919250636f307dc39160048083019260209291908290030181865afa158015620001f6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200021c91906200147f565b600260006101000a8154816001600160a01b0302191690836001600160a01b03160217905550826001600160a01b031663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000281573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a791906200147f565b6001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200030b91906200147f565b600080546001600160a01b039290921661010002610100600160a81b0319909216919091179055620003626103e860c86200034b6101f4612710620014bc565b60646200035c60c8612710620014bc565b620005e8565b60408101515160005b81811015620003ee576000836040015182815181106200038f576200038f620014e2565b6020026020010151600001519050620003ae81620007c260201b60201c565b620003e48185604001518481518110620003cc57620003cc620014e2565b60200260200101516020015162000a5e60201b60201c565b506001016200036b565b5060015460408051632630c12f60e01b815290516001600160a01b03909216916311ca4fc29186918491632630c12f9160048083019260209291908290030181865afa15801562000443573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200046991906200147f565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401600060405180830381600087803b158015620004b257600080fd5b505af1158015620004c7573d6000803e3d6000fd5b50506040516001600160a01b03861692507fa8b21f72cb83bce808df32dc2330217d744a1c22f3e9e44e4b11bbf049d37d9d9150600090a2600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000553573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200057991906200147f565b6001600160a01b03167f3f82447be465b0b5a4a9e54c74d5f6ae73f2e9537f2cc1590a340524703d096160405160405180910390a26020820151620005cb90620005c5906002620014f8565b62000bda565b81516020830151620005de919062000dc8565b5050505062001604565b6000620005f68585620014bc565b60015460405163172c48c760e01b81526000600482018190529293506001600160a01b039091169063172c48c7906024016040805180830381865afa15801562000644573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200066a91906200152a565b9150508061ffff168261ffff1614620006be57620006888262000f47565b60025460405161ffff841681526001600160a01b039091169060008051602062005f1d8339815191529060200160405180910390a25b60015460405163944ac59f60e01b815261ffff808a166004830152808916602483015280881660448301528087166064830152851660848201526001600160a01b039091169063944ac59f9060a401600060405180830381600087803b1580156200072857600080fd5b505af11580156200073d573d6000803e3d6000fd5b505050507f2214a403d5f8d049e52eacca974c6dea01a471e41d6a18903bfaf7dbc709741f878787612710620007749190620014bc565b876200078388612710620014bc565b6040805161ffff96871681529486166020860152928516848401529084166060840152909216608082015290519081900360a00190a150505050505050565b6001600160a01b038116620007ea57604051635919af9760e11b815260040160405180910390fd5b62000809816001600160a01b03166200116f60201b620023381760201c565b620008365760405163df4c572d60e01b81526001600160a01b038216600482015260240160405180910390fd5b6040516370a0823160e01b81523060048201526001600160a01b038216906370a0823190602401602060405180830381865afa92505050801562000899575060408051601f3d908101601f19168201909252620008969181019062001564565b60015b620008b75760405163528ca31d60e01b815260040160405180910390fd5b50600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200090c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200093291906200147f565b604051630f9a650360e41b8152670de0b6b3a764000060048201526001600160a01b038381166024830152919091169063f9a6503090604401602060405180830381865afa925050508015620009a7575060408051601f3d908101601f19168201909252620009a49181019062001564565b60015b620009c5576040516367a7cd4360e01b815260040160405180910390fd5b5060015460405163d48bfca760e01b81526001600160a01b0383811660048301529091169063d48bfca790602401600060405180830381600087803b15801562000a0e57600080fd5b505af115801562000a23573d6000803e3d6000fd5b50506040516001600160a01b03841692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a250565b6002546001600160a01b038381169116141562000a8e57604051633b899cf960e01b815260040160405180910390fd5b60015460405163172c48c760e01b8152600060048201819052916001600160a01b03169063172c48c7906024016040805180830381865afa15801562000ad8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000afe91906200152a565b91505061ffff8216158062000b1a57508061ffff168261ffff16115b1562000b39576040516333c6608d60e01b815260040160405180910390fd5b600154604051635385e2a160e11b81526001600160a01b03858116600483015261ffff851660248301529091169063a70bc54290604401600060405180830381600087803b15801562000b8b57600080fd5b505af115801562000ba0573d6000803e3d6000fd5b505060405161ffff851681526001600160a01b038616925060008051602062005f1d833981519152915060200160405180910390a2505050565b600062000be662001175565b6001600160a01b031663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801562000c24573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c4a91906200157e565b50509050600062000c606200117560201b60201c565b6001600160a01b031663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa15801562000c9d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000cc39190620015d5565b915050806001600160801b0316836001600160801b0316101562000cfa576040516309aadd6f60e41b815260040160405180910390fd5b826001600160801b0316826001600160801b03161462000dc35762000d1e62001175565b604051632715681560e21b81526001600160801b03851660048201526001600160a01b039190911690639c55a05490602401600060405180830381600087803b15801562000d6b57600080fd5b505af115801562000d80573d6000803e3d6000fd5b50506040516001600160801b03861681527fa030eec20ae970821387224ec3bb15b4bd22b89bfb86dc4d2b3827aa3d99e48d925060200190505b60405180910390a15b505050565b600062000dd462001175565b6001600160a01b031663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801562000e12573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e3891906200157e565b50509050816001600160801b0316836001600160801b0316118062000e6e5750806001600160801b0316826001600160801b0316115b1562000e8d576040516309aadd6f60e41b815260040160405180910390fd5b62000e9762001175565b60405163300eb37b60e11b81526001600160801b038086166004830152841660248201526001600160a01b03919091169063601d66f690604401600060405180830381600087803b15801562000eec57600080fd5b505af115801562000f01573d6000803e3d6000fd5b5050604080516001600160801b038088168252861660208201527f4d4981437d0211f9e6843eb024d9ada1fa3a99514d4343d4aece106dd11524bb935001905062000dba565b600154600254604051635385e2a160e11b81526001600160a01b03918216600482015261ffff8416602482015291169063a70bc54290604401600060405180830381600087803b15801562000f9b57600080fd5b505af115801562000fb0573d6000803e3d6000fd5b505050506000600160009054906101000a90046001600160a01b03166001600160a01b031663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200100a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001030919062001564565b905060015b8181101562000dc35760015460405163172c48c760e01b81526004810183905260009182916001600160a01b039091169063172c48c7906024016040805180830381865afa1580156200108c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010b291906200152a565b915091508461ffff168161ffff1611156200116457600154604051635385e2a160e11b81526001600160a01b03848116600483015261ffff881660248301529091169063a70bc54290604401600060405180830381600087803b1580156200111957600080fd5b505af11580156200112e573d6000803e3d6000fd5b505060405161ffff881681526001600160a01b038516925060008051602062005f1d833981519152915060200160405180910390a25b505060010162001035565b3b151590565b60015460408051632f7a188160e01b815290516000926001600160a01b031691632f7a18819160048083019260209291908290030181865afa158015620011c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011e691906200147f565b905090565b6001600160a01b03811681146200120157600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b03811182821017156200123f576200123f62001204565b60405290565b604080519081016001600160401b03811182821017156200123f576200123f62001204565b604051601f8201601f191681016001600160401b038111828210171562001295576200129562001204565b604052919050565b80516001600160801b0381168114620012b557600080fd5b919050565b8051620012b581620011eb565b805161ffff81168114620012b557600080fd5b80518015158114620012b557600080fd5b6000806000606084860312156200130157600080fd5b83516200130e81620011eb565b809350506020808501516200132381620011eb565b604086810151919450906001600160401b03808211156200134357600080fd5b9087019060a0828a0312156200135857600080fd5b620013626200121a565b6200136d836200129d565b81526200137c8584016200129d565b8582015283830151828111156200139257600080fd5b8301601f81018b13620013a457600080fd5b805183811115620013b957620013b962001204565b620013c9878260051b016200126a565b818152878101945060069190911b82018701908c821115620013ea57600080fd5b918701915b81831015620014435786838e031215620014095760008081fd5b6200141362001245565b83516200142081620011eb565b81526200142f848a01620012c7565b818a015285529387019391860191620013ef565b838701525062001458905060608401620012ba565b60608201526200146b60808401620012da565b608082015280955050505050509250925092565b6000602082840312156200149257600080fd5b81516200149f81620011eb565b9392505050565b634e487b7160e01b600052601160045260246000fd5b600061ffff83811690831681811015620014da57620014da620014a6565b039392505050565b634e487b7160e01b600052603260045260246000fd5b60006001600160801b0382811684821681151582840482111615620015215762001521620014a6565b02949350505050565b600080604083850312156200153e57600080fd5b82516200154b81620011eb565b91506200155b60208401620012c7565b90509250929050565b6000602082840312156200157757600080fd5b5051919050565b6000806000606084860312156200159457600080fd5b6200159f846200129d565b9250620015af60208501620012da565b9150604084015164ffffffffff81168114620015ca57600080fd5b809150509250925092565b60008060408385031215620015e957600080fd5b620015f4836200129d565b91506200155b602084016200129d565b608051614878620016a56000396000818161033601528181610446015281816107c5015281816108c0015281816109ae01528181610b8301528181610f0a015281816113e1015281816114cf015281816115bb015281816116ab015281816117990152818161187d01528181611ad901528181611bc601528181611cb301528181611da0015281816120090152818161218c015261227901526148786000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80638456cb59116100f9578063dc2b21c111610097578063f0527ac611610071578063f0527ac6146103d7578063f206d32a146103df578063fb1bd8c4146103f2578063ffd9b9071461040557600080fd5b8063dc2b21c11461039e578063e6492d7b146103b1578063eb9606df146103c457600080fd5b8063a50cf2c8116100d3578063a50cf2c814610331578063a70bc54214610358578063b53472ef1461036b578063c12c21c01461037e57600080fd5b80638456cb59146103035780639c55a0541461030b5780639f1c50691461031e57600080fd5b806350e036ff1161016657806354fd4d501161014057806354fd4d50146102b25780635c975abb146102ba5780636f307dc3146102d05780637bccacee146102f057600080fd5b806350e036ff1461027657806352438e541461028c578063526a41e81461029f57600080fd5b80633e7c88d6116101a25780633e7c88d6146102355780633f4ba83a14610248578063456e0742146102505780635094cb4f1461026357600080fd5b806324147708146101c95780632954018c146101de5780632f7a18811461022d575b600080fd5b6101dc6101d7366004614307565b610418565b005b60005461020390610100900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6102036106fe565b6101dc610243366004614334565b610797565b6101dc610892565b6101dc61025e366004614307565b610980565b61020361027136600461436d565b610b36565b61027e610b49565b604051908152602001610224565b6101dc61029a366004614307565b610b55565b6101dc6102ad366004614394565b610edc565b61027e600281565b60005460ff166040519015158152602001610224565b6002546102039073ffffffffffffffffffffffffffffffffffffffff1681565b6101dc6102fe3660046143c2565b6113b3565b6101dc6114a1565b6101dc61031936600461440e565b61158d565b6101dc61032c36600461442b565b61167d565b6102037f000000000000000000000000000000000000000000000000000000000000000081565b6101dc610366366004614334565b61176b565b6101dc610379366004614307565b61184f565b6001546102039073ffffffffffffffffffffffffffffffffffffffff1681565b6101dc6103ac366004614459565b611aab565b6101dc6103bf366004614307565b611b98565b6101dc6103d236600461448f565b611c85565b6101dc611d72565b6101dc6103ed3660046144ac565b611fdb565b6101dc610400366004614307565b61215e565b6101dc61041336600461451d565b61224b565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156104a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c6919061453a565b6104fc576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006105078261233e565b90506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015610578573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059c9190614557565b90508181166106f9576001546040517fa366f496000000000000000000000000000000000000000000000000000000008152918317600483018190529173ffffffffffffffffffffffffffffffffffffffff9091169063a366f49690602401600060405180830381600087803b15801561061557600080fd5b505af1158015610629573d6000803e3d6000fd5b505050506106356106fe565b6040517fffd9b9070000000000000000000000000000000000000000000000000000000081526001600482015273ffffffffffffffffffffffffffffffffffffffff919091169063ffd9b90790602401600060405180830381600087803b15801561069f57600080fd5b505af11580156106b3573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692507ff17b849746e74d7186170c9553d4bbf60b4f8bb1ed81fe50c099b934fb078f059150600090a25b505050565b600154604080517f2f7a1881000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691632f7a18819160048083019260209291908290030181865afa15801561076e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610792919061457b565b905090565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610821573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610845919061453a565b61087b576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108848261241e565b61088e82826127f8565b5050565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa15801561091c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610940919061453a565b610976576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61097e612a15565b565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610a0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2e919061453a565b610a64576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a6d81612af6565b6001546040517f9f5f86ae00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015290911690639f5f86ae90602401600060405180830381600087803b158015610ada57600080fd5b505af1158015610aee573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507f5a0b7d0f9c24b39256e112a0584b4c5ce38d8f1dee2e7c56f15b852604cdc8869150600090a250565b6000610b43600383612cb8565b92915050565b60006107926003612ccb565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610bdf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c03919061453a565b610c39576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610c86576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063fdd5764590602401602060405180830381865afa158015610cf7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1b919061457b565b905073ffffffffffffffffffffffffffffffffffffffff8116610d6a576040517f1170cc2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f6e98e5e400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526000602483015290911690636e98e5e490604401600060405180830381600087803b158015610dde57600080fd5b505af1158015610df2573d6000803e3d6000fd5b50506001546040517f6e98e5e40000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff86811660248301529091169250636e98e5e49150604401600060405180830381600087803b158015610e6a57600080fd5b505af1158015610e7e573d6000803e3d6000fd5b50505050610e96826003612cd590919063ffffffff16565b5060405173ffffffffffffffffffffffffffffffffffffffff8316907fab9f405bf0c19b97f65a7031634db41569cd2f0e0376a610a1e977f9ab22b58f90600090a25050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610f66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8a919061453a565b610fc0576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fc982612af6565b6000806000610fd66106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015611020573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110449190614598565b9250925092506000806110556106fe565b73ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa15801561109e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c291906145e5565b9150915060006110d06106fe565b73ffffffffffffffffffffffffffffffffffffffff16639be0536a6040518163ffffffff1660e01b8152600401600060405180830381865afa15801561111a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526111609190810190614643565b9050600061116c6106fe565b73ffffffffffffffffffffffffffffffffffffffff1663b1836d326040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111da919061453a565b600154604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905192935073ffffffffffffffffffffffffffffffffffffffff909116916311ca4fc2918c918491632630c12f9160048083019260209291908290030181865afa158015611256573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061127a919061457b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156112e757600080fd5b505af11580156112fb573d6000803e3d6000fd5b5050505087156113675761130e87612cf7565b6113188484612f5d565b61132186613152565b60005b82518110156113575761134f83828151811061134257611342614726565b60200260200101516132a3565b600101611324565b50801561136757611367856133c9565b60405173ffffffffffffffffffffffffffffffffffffffff8a16907fa8b21f72cb83bce808df32dc2330217d744a1c22f3e9e44e4b11bbf049d37d9d90600090a2505050505050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561143d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611461919061453a565b611497576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61088e828261357b565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561152b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061154f919061453a565b611585576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61097e6139c3565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611617573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163b919061453a565b611671576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81612cf7565b50565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611707573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172b919061453a565b611761576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61088e8282612f5d565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156117f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611819919061453a565b610884576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156118d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fd919061453a565b611933576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061193e8261233e565b90506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d39190614557565b9050818116156106f9576001546040517fa366f496000000000000000000000000000000000000000000000000000000008152918318600483018190529173ffffffffffffffffffffffffffffffffffffffff9091169063a366f49690602401600060405180830381600087803b158015611a4d57600080fd5b505af1158015611a61573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a2505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611b35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b59919061453a565b611b8f576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81613a83565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611c22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c46919061453a565b611c7c576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81613b3d565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611d0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d33919061453a565b611d69576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a816133c9565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611dfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e20919061453a565b611e56576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ec4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee8919061457b565b60015490915073ffffffffffffffffffffffffffffffffffffffff166311ca4fc2611f116106fe565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff91821660048201529084166024820152604401600060405180830381600087803b158015611f7f57600080fd5b505af1158015611f93573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507f3f82447be465b0b5a4a9e54c74d5f6ae73f2e9537f2cc1590a340524703d09619150600090a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015612065573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612089919061453a565b6120bf576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61271061ffff86161015806120e357506127106120dc8585614784565b61ffff1610155b806120fd57506127106120f68383614784565b61ffff1610155b15612134576040517f0b361d6900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6121578585612145866127106147aa565b85612152866127106147aa565b613c5c565b5050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156121e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061220c919061453a565b612242576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a816132a3565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156122d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122f9919061453a565b61232f576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81613152565b3b151590565b6001546040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063f67c5bd090602401602060405180830381865afa1580156123af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123d39190614557565b90508015806123e25750806001145b15612419576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b73ffffffffffffffffffffffffffffffffffffffff811661246b576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163b6124d6576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024015b60405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8216906370a0823190602401602060405180830381865afa92505050801561257a575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261257791810190614557565b60015b6125b0576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561261e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612642919061457b565b6040517ff9a65030000000000000000000000000000000000000000000000000000000008152670de0b6b3a7640000600482015273ffffffffffffffffffffffffffffffffffffffff8381166024830152919091169063f9a6503090604401602060405180830381865afa9250505080156126f8575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526126f591810190614557565b60015b61272e576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506001546040517fd48bfca700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301529091169063d48bfca790602401600060405180830381600087803b15801561279c57600080fd5b505af11580156127b0573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a250565b60025473ffffffffffffffffffffffffffffffffffffffff8381169116141561284d576040517f3b899cf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f172c48c70000000000000000000000000000000000000000000000000000000081526000600482018190529173ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa1580156128bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128e091906147cd565b91505061ffff821615806128fb57508061ffff168261ffff16115b15612932576040517f33c6608d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015261ffff851660248301529091169063a70bc54290604401600060405180830381600087803b1580156129a957600080fd5b505af11580156129bd573d6000803e3d6000fd5b505060405161ffff8516815273ffffffffffffffffffffffffffffffffffffffff861692507f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650915060200160405180910390a2505050565b60005460ff16612a81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016124cd565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b73ffffffffffffffffffffffffffffffffffffffff8116612b43576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163b612ba9576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024016124cd565b8073ffffffffffffffffffffffffffffffffffffffff1663c12c21c06040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612c2e575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252612c2b9181019061457b565b60015b612c64576040517fe9eddd1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60015473ffffffffffffffffffffffffffffffffffffffff82811691161461088e576040517fe9eddd1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612cc48383613e92565b9392505050565b6000610b43825490565b6000612cc48373ffffffffffffffffffffffffffffffffffffffff8416613ebc565b6000612d016106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015612d4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d6f9190614598565b505090506000612d7d6106fe565b73ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa158015612dc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dea91906145e5565b915050806fffffffffffffffffffffffffffffffff16836fffffffffffffffffffffffffffffffff161015612e4b576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826fffffffffffffffffffffffffffffffff16826fffffffffffffffffffffffffffffffff16146106f957612e7e6106fe565b6040517f9c55a0540000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff8516600482015273ffffffffffffffffffffffffffffffffffffffff9190911690639c55a05490602401600060405180830381600087803b158015612ef957600080fd5b505af1158015612f0d573d6000803e3d6000fd5b50506040516fffffffffffffffffffffffffffffffff861681527fa030eec20ae970821387224ec3bb15b4bd22b89bfb86dc4d2b3827aa3d99e48d925060200190505b60405180910390a1505050565b6000612f676106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015612fb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fd59190614598565b50509050816fffffffffffffffffffffffffffffffff16836fffffffffffffffffffffffffffffffff16118061302e5750806fffffffffffffffffffffffffffffffff16826fffffffffffffffffffffffffffffffff16115b15613065576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61306d6106fe565b6040517f601d66f60000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff80861660048301528416602482015273ffffffffffffffffffffffffffffffffffffffff919091169063601d66f690604401600060405180830381600087803b1580156130f057600080fd5b505af1158015613104573d6000803e3d6000fd5b5050604080516fffffffffffffffffffffffffffffffff8088168252861660208201527f4d4981437d0211f9e6843eb024d9ada1fa3a99514d4343d4aece106dd11524bb9350019050612f50565b600061315c6106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa1580156131a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131ca9190614598565b509150508015158215151461088e576131e16106fe565b6040517fffd9b907000000000000000000000000000000000000000000000000000000008152831515600482015273ffffffffffffffffffffffffffffffffffffffff919091169063ffd9b90790602401600060405180830381600087803b15801561324c57600080fd5b505af1158015613260573d6000803e3d6000fd5b505050507ff97ba903470ff3262b4a68a938fe81def401bac1bd742169d2e8d5c4ed2185d382604051613297911515815260200190565b60405180910390a15050565b73ffffffffffffffffffffffffffffffffffffffff81166132f0576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6132f86106fe565b6040517fb55bb84b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152919091169063b55bb84b90602401600060405180830381600087803b15801561336357600080fd5b505af1158015613377573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841681527fdac9a7995cbc0c0f01d78970fb6fd0b52fe0fe869eb6635e65cc1b5682b8325c925060200190505b60405180910390a150565b60006133d36106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801561341d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134419190614598565b925050508064ffffffffff168264ffffffffff161461088e578164ffffffffff168164ffffffffff16118061347c57508164ffffffffff1642115b156134b3576040517fe4eaca7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134bb6106fe565b6040517feb9606df00000000000000000000000000000000000000000000000000000000815264ffffffffff8416600482015273ffffffffffffffffffffffffffffffffffffffff919091169063eb9606df90602401600060405180830381600087803b15801561352b57600080fd5b505af115801561353f573d6000803e3d6000fd5b505060405164ffffffffff851681527f0b3eb35ba750e7a7e4d26c9eee3d226f4e1f68c5568f4a3d051c94b241b02ac092506020019050613297565b73ffffffffffffffffffffffffffffffffffffffff82166135c8576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82163b61362e576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016124cd565b61363781612af6565b60015473ffffffffffffffffffffffffffffffffffffffff8381169116148061369257506136636106fe565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b806136b7575060015473ffffffffffffffffffffffffffffffffffffffff8281169116145b806136f457506136c56106fe565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b1561372b576040517f727de5c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517fff68754300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063ff68754390602401602060405180830381865afa15801561379c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137c0919061457b565b73ffffffffffffffffffffffffffffffffffffffff1614158061388c57506001546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063fdd5764590602401602060405180830381865afa15801561384f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613873919061457b565b73ffffffffffffffffffffffffffffffffffffffff1614155b156138c3576040517f21ff1e7100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f6e98e5e400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152848116602483015290911690636e98e5e490604401600060405180830381600087803b15801561393857600080fd5b505af115801561394c573d6000803e3d6000fd5b50505050613964826003613faf90919063ffffffff16565b508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4bcbefaef68b99503d502f5a6abe7bca2b183ab8ac55457013c77d084ebd130560405160405180910390a35050565b60005460ff1615613a30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016124cd565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612acc3390565b6001546040517fdc2b21c100000000000000000000000000000000000000000000000000000000815260ff8316600482015273ffffffffffffffffffffffffffffffffffffffff9091169063dc2b21c190602401600060405180830381600087803b158015613af157600080fd5b505af1158015613b05573d6000803e3d6000fd5b505060405160ff841681527f73caacd705657a7d283e48ecf288b73bc517e3aea1bbc9da2fd54a979e8aa950925060200190506133be565b73ffffffffffffffffffffffffffffffffffffffff8116613b8a576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613b926106fe565b6040517fdcf6548200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152919091169063dcf6548290602401600060405180830381600087803b158015613bfd57600080fd5b505af1158015613c11573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841681527f32e53e2e527af8518ae889e5f7e674bc83f7cf68e4cc059aceeaa0e64208b85b925060200190506133be565b6000613c6885856147aa565b6001546040517f172c48c700000000000000000000000000000000000000000000000000000000815260006004820181905292935073ffffffffffffffffffffffffffffffffffffffff9091169063172c48c7906024016040805180830381865afa158015613cdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cff91906147cd565b9150508061ffff168261ffff1614613d6e57613d1a82613fd1565b60025460405161ffff8416815273ffffffffffffffffffffffffffffffffffffffff909116907f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac6509060200160405180910390a25b6001546040517f944ac59f00000000000000000000000000000000000000000000000000000000815261ffff808a1660048301528089166024830152808816604483015280871660648301528516608482015273ffffffffffffffffffffffffffffffffffffffff9091169063944ac59f9060a401600060405180830381600087803b158015613dfd57600080fd5b505af1158015613e11573d6000803e3d6000fd5b505050507f2214a403d5f8d049e52eacca974c6dea01a471e41d6a18903bfaf7dbc709741f878787612710613e4691906147aa565b87613e53886127106147aa565b6040805161ffff96871681529486166020860152928516848401529084166060840152909216608082015290519081900360a00190a150505050505050565b6000826000018281548110613ea957613ea9614726565b9060005260206000200154905092915050565b60008181526001830160205260408120548015613fa5576000613ee06001836147fc565b8554909150600090613ef4906001906147fc565b9050818114613f59576000866000018281548110613f1457613f14614726565b9060005260206000200154905080876000018481548110613f3757613f37614726565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080613f6a57613f6a614813565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610b43565b6000915050610b43565b6000612cc48373ffffffffffffffffffffffffffffffffffffffff8416614296565b6001546002546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015261ffff8416602482015291169063a70bc54290604401600060405180830381600087803b15801561404a57600080fd5b505af115801561405e573d6000803e3d6000fd5b505050506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156140d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140f59190614557565b905060015b818110156106f9576001546040517f172c48c700000000000000000000000000000000000000000000000000000000815260048101839052600091829173ffffffffffffffffffffffffffffffffffffffff9091169063172c48c7906024016040805180830381865afa158015614175573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061419991906147cd565b915091508461ffff168161ffff16111561428c576001546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015261ffff881660248301529091169063a70bc54290604401600060405180830381600087803b15801561422457600080fd5b505af1158015614238573d6000803e3d6000fd5b505060405161ffff8816815273ffffffffffffffffffffffffffffffffffffffff851692507f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650915060200160405180910390a25b50506001016140fa565b60008181526001830160205260408120546142dd57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610b43565b506000610b43565b73ffffffffffffffffffffffffffffffffffffffff8116811461167a57600080fd5b60006020828403121561431957600080fd5b8135612cc4816142e5565b61ffff8116811461167a57600080fd5b6000806040838503121561434757600080fd5b8235614352816142e5565b9150602083013561436281614324565b809150509250929050565b60006020828403121561437f57600080fd5b5035919050565b801515811461167a57600080fd5b600080604083850312156143a757600080fd5b82356143b2816142e5565b9150602083013561436281614386565b600080604083850312156143d557600080fd5b82356143e0816142e5565b91506020830135614362816142e5565b6fffffffffffffffffffffffffffffffff8116811461167a57600080fd5b60006020828403121561442057600080fd5b8135612cc4816143f0565b6000806040838503121561443e57600080fd5b8235614449816143f0565b91506020830135614362816143f0565b60006020828403121561446b57600080fd5b813560ff81168114612cc457600080fd5b64ffffffffff8116811461167a57600080fd5b6000602082840312156144a157600080fd5b8135612cc48161447c565b600080600080600060a086880312156144c457600080fd5b85356144cf81614324565b945060208601356144df81614324565b935060408601356144ef81614324565b925060608601356144ff81614324565b9150608086013561450f81614324565b809150509295509295909350565b60006020828403121561452f57600080fd5b8135612cc481614386565b60006020828403121561454c57600080fd5b8151612cc481614386565b60006020828403121561456957600080fd5b5051919050565b8051612419816142e5565b60006020828403121561458d57600080fd5b8151612cc4816142e5565b6000806000606084860312156145ad57600080fd5b83516145b8816143f0565b60208501519093506145c981614386565b60408501519092506145da8161447c565b809150509250925092565b600080604083850312156145f857600080fd5b8251614603816143f0565b6020840151909250614362816143f0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000602080838503121561465657600080fd5b825167ffffffffffffffff8082111561466e57600080fd5b818501915085601f83011261468257600080fd5b81518181111561469457614694614614565b8060051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f830116810181811085821117156146d7576146d7614614565b6040529182528482019250838101850191888311156146f557600080fd5b938501935b8285101561471a5761470b85614570565b845293850193928501926146fa565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061ffff8083168185168083038211156147a1576147a1614755565b01949350505050565b600061ffff838116908316818110156147c5576147c5614755565b039392505050565b600080604083850312156147e057600080fd5b82516147eb816142e5565b602084015190925061436281614324565b60008282101561480e5761480e614755565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea264697066735822122046c364b67d38a3dd85b57e027716324d90dd1df102f265f0a0e2697babdb3f3b64736f6c634300080a003394525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650726577617264506572546f6b656e2829206973206e6f7420636f6e73697374656e746e6577526577617264526174696f2829206973206e6f7420636f6e73697374656e7452657761726420746f6b656e20312077617320696e636f72726563746c792073657420746f206e6f6e2d7a65726f726577617264506572546f6b656e53746f7265642829206973206e6f7420636f6e73697374656e74717565756564526577617264732829206973206e6f7420636f6e73697374656e746578747261526577617264734c656e6774682829206973206e6f7420636f6e73697374656e7475736572526577617264506572546f6b656e506169642829206973206e6f7420636f6e73697374656e74657874726152657761726473283129206973206e6f7420636f6e73697374656e7452657761726420746f6b656e20322077617320696e636f72726563746c792073657420746f206e6f6e2d7a65726f6c61737454696d655265776172644170706c696361626c652829206973206e6f7420636f6e73697374656e746c61737455706461746554696d652829206973206e6f7420636f6e73697374656e74657874726152657761726473283029206973206e6f7420636f6e73697374656e7463757272656e74526577617264732829206973206e6f7420636f6e73697374656e74686973746f726963616c526577617264732829206973206e6f7420636f6e73697374656e747265776172644d616e616765722829206973206e6f7420636f6e73697374656e74a26469706673582212206d7ca7dfddd99d61056d21cf234c75ae217151f2c590828713956a79f513972a64736f6c634300080a0033"; - -type ConvexV1AdapterBasePoolTestConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: ConvexV1AdapterBasePoolTestConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class ConvexV1AdapterBasePoolTest__factory extends ContractFactory { - constructor(...args: ConvexV1AdapterBasePoolTestConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - overrides || {} - ) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): ConvexV1AdapterBasePoolTest { - return super.attach(address) as ConvexV1AdapterBasePoolTest; - } - override connect(signer: Signer): ConvexV1AdapterBasePoolTest__factory { - return super.connect(signer) as ConvexV1AdapterBasePoolTest__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): ConvexV1AdapterBasePoolTestInterface { - return new utils.Interface(_abi) as ConvexV1AdapterBasePoolTestInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): ConvexV1AdapterBasePoolTest { - return new Contract( - address, - _abi, - signerOrProvider - ) as ConvexV1AdapterBasePoolTest; - } -} diff --git a/src/types/factories/contracts/test/adapters/ConvexV1_BaseRewardPool.t.sol/index.ts b/src/types/factories/contracts/test/adapters/ConvexV1_BaseRewardPool.t.sol/index.ts deleted file mode 100644 index 64792136..00000000 --- a/src/types/factories/contracts/test/adapters/ConvexV1_BaseRewardPool.t.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { ConvexV1AdapterBasePoolTest__factory } from "./ConvexV1AdapterBasePoolTest__factory"; diff --git a/src/types/factories/contracts/test/adapters/ConvexV1_Booster.t.sol/ConvexV1AdapterBoosterTest__factory.ts b/src/types/factories/contracts/test/adapters/ConvexV1_Booster.t.sol/ConvexV1AdapterBoosterTest__factory.ts deleted file mode 100644 index 73f9ad95..00000000 --- a/src/types/factories/contracts/test/adapters/ConvexV1_Booster.t.sol/ConvexV1AdapterBoosterTest__factory.ts +++ /dev/null @@ -1,1250 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - ConvexV1AdapterBoosterTest, - ConvexV1AdapterBoosterTestInterface, -} from "../../../../../contracts/test/adapters/ConvexV1_Booster.t.sol/ConvexV1AdapterBoosterTest"; - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "token", - type: "address", - }, - ], - name: "TokenIsNotAddedToCreditManagerException", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "TokenIsNotInAllowedList", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "onBehalfOf", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "token", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "AddCollateral", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - ], - name: "CloseCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "DecreaseBorrowedAmount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "target", - type: "address", - }, - ], - name: "ExecuteOrder", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "IncreaseBorrowedAmount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "liquidator", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "remainingFunds", - type: "uint256", - }, - ], - name: "LiquidateCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "liquidator", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "remainingFunds", - type: "uint256", - }, - ], - name: "LiquidateExpiredCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "index", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "user", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "reward", - type: "uint256", - }, - ], - name: "Mock_BaseRewardPaid", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "index", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "user", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "Mock_BaseStaked", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "index", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "user", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "Mock_BaseWithdrawn", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "index", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "user", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "poolid", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - indexed: false, - internalType: "bool", - name: "_stake", - type: "bool", - }, - ], - name: "Mock_Deposited", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "index", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "user", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "reward", - type: "uint256", - }, - ], - name: "Mock_ExtraRewardPaid", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "index", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "user", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "Mock_ExtraStaked", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "index", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "user", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "Mock_ExtraWithdrawn", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "index", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "user", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "poolid", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "Mock_Withdrawn", - type: "event", - }, - { - anonymous: false, - inputs: [], - name: "MultiCallFinished", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - ], - name: "MultiCallStarted", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newConfigurator", - type: "address", - }, - ], - name: "NewConfigurator", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "onBehalfOf", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "borrowAmount", - type: "uint256", - }, - { - indexed: false, - internalType: "uint16", - name: "referralCode", - type: "uint16", - }, - ], - name: "OpenCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "token", - type: "address", - }, - ], - name: "TokenDisabled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "token", - type: "address", - }, - ], - name: "TokenEnabled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "oldOwner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "TransferAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "bool", - name: "state", - type: "bool", - }, - ], - name: "TransferAccountAllowed", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "", - type: "address", - }, - ], - name: "log_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "log_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - name: "log_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "int256", - name: "", - type: "int256", - }, - ], - name: "log_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "address", - name: "val", - type: "address", - }, - ], - name: "log_named_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes", - name: "val", - type: "bytes", - }, - ], - name: "log_named_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes32", - name: "val", - type: "bytes32", - }, - ], - name: "log_named_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - ], - name: "log_named_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "string", - name: "val", - type: "string", - }, - ], - name: "log_named_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - ], - name: "log_named_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "log_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "logs", - type: "event", - }, - { - inputs: [], - name: "IS_TEST", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "basePoolAdapter", - outputs: [ - { - internalType: "contract ConvexV1BaseRewardPoolAdapter", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "basePoolMock", - outputs: [ - { - internalType: "contract BaseRewardPoolMock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "boosterAdapter", - outputs: [ - { - internalType: "contract ConvexV1BoosterAdapter", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "boosterMock", - outputs: [ - { - internalType: "contract BoosterMock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "cft", - outputs: [ - { - internalType: "contract CreditFacadeTestSuite", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "claimZapAdapter", - outputs: [ - { - internalType: "contract ConvexV1ClaimZapAdapter", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "claimZapMock", - outputs: [ - { - internalType: "contract ClaimZapMock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "convexLPToken", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditConfigurator", - outputs: [ - { - internalType: "contract CreditConfigurator", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditFacade", - outputs: [ - { - internalType: "contract CreditFacade", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditManager", - outputs: [ - { - internalType: "contract ICreditManagerV2", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "crv", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "curveLPToken", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "cvx", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "extraPoolMock1", - outputs: [ - { - internalType: "contract ExtraRewardPoolMock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "extraPoolMock2", - outputs: [ - { - internalType: "contract ExtraRewardPoolMock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "extraRewardToken1", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "extraRewardToken2", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "failed", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "feed", - outputs: [ - { - internalType: "contract PriceFeedMock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "phantomToken", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "priceOracle", - outputs: [ - { - internalType: "contract IPriceOracleV2Ext", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "setUp", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_ACVX1_B_01_constructor_sets_correct_values", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_ACVX1_B_02_deposit_without_staking_works_correctly", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_ACVX1_B_03_depositAll_without_staking_works_correctly", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_ACVX1_B_06_withdraw_works_correctly", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_ACVX1_B_07_withdrawAll_works_correctly", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_ACVX1_B_08_getters_are_consistent", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_ACVX1_B_09_updateStakedPhantomTokensMap_access_restricted", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "underlying", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x60806040526000805460ff1916600190811790915580546001600160a01b031916737109709ecfa91a80626ff3989d68f67f5b1dd12d17905534801561004457600080fd5b506205133a80620000566000396000f3fe60806040523480156200001157600080fd5b5060043610620002195760003560e01c80636f307dc31162000125578063aa30240e11620000af578063df514433116200007a578063df5144331462000528578063f9aa028a1462000549578063fa7626d4146200056a578063fc99a973146200057857600080fd5b8063aa30240e14620004aa578063ba414fa614620004cb578063c096547314620004e6578063c12c21c0146200050757600080fd5b806399e834bc11620000f057806399e834bc1462000454578063a7ea3394146200045e578063a8577e88146200047f578063a93cdbd114620004a057600080fd5b80636f307dc314620003e757806371fb3e2514620004085780637a24edf61462000412578063923c1d61146200043357600080fd5b806337a7b7d811620001a75780635c91172f11620001725780635c91172f1462000363578063614fa6c2146200038457806364243fc314620003a55780636a4874a114620003c657600080fd5b806337a7b7d8146200030d5780634194a9f8146200032e57806342831fd3146200034f57806349b5abd6146200035957600080fd5b80632630c12f11620001e85780632630c12f14620002a0578063278e660914620002c15780632f7a188114620002e25780633018e17c146200030357600080fd5b80630a9254e4146200021e5780630ae2904a146200022a578063170aa96d14620002755780631b475fa51462000296575b600080fd5b6200022862000599565b005b6017546200024b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6010546200024b9073ffffffffffffffffffffffffffffffffffffffff1681565b62000228620005f7565b6008546200024b9073ffffffffffffffffffffffffffffffffffffffff1681565b600d546200024b9073ffffffffffffffffffffffffffffffffffffffff1681565b6003546200024b9073ffffffffffffffffffffffffffffffffffffffff1681565b6200022862000bcd565b6007546200024b9073ffffffffffffffffffffffffffffffffffffffff1681565b600f546200024b9073ffffffffffffffffffffffffffffffffffffffff1681565b6200022862000eae565b620002286200135d565b6014546200024b9073ffffffffffffffffffffffffffffffffffffffff1681565b6015546200024b9073ffffffffffffffffffffffffffffffffffffffff1681565b6011546200024b9073ffffffffffffffffffffffffffffffffffffffff1681565b6009546200024b9073ffffffffffffffffffffffffffffffffffffffff1681565b6006546200024b9073ffffffffffffffffffffffffffffffffffffffff1681565b620002286200153d565b6012546200024b9073ffffffffffffffffffffffffffffffffffffffff1681565b600a546200024b9073ffffffffffffffffffffffffffffffffffffffff1681565b6200022862001b18565b600e546200024b9073ffffffffffffffffffffffffffffffffffffffff1681565b600b546200024b9073ffffffffffffffffffffffffffffffffffffffff1681565b620002286200263a565b600c546200024b9073ffffffffffffffffffffffffffffffffffffffff1681565b620004d562002bb3565b60405190151581526020016200026c565b6013546200024b9073ffffffffffffffffffffffffffffffffffffffff1681565b6002546200024b9073ffffffffffffffffffffffffffffffffffffffff1681565b6005546200024b9073ffffffffffffffffffffffffffffffffffffffff1681565b6004546200024b9073ffffffffffffffffffffffffffffffffffffffff1681565b600054620004d59060ff1681565b6016546200024b9073ffffffffffffffffffffffffffffffffffffffff1681565b620005a5600262002d1d565b620005af6200403a565b50601880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60005b600281101562000bca5780151560005b600281101562000bb2578015156200062162000599565b600b5460185473ffffffffffffffffffffffffffffffffffffffff918216916340c10f199116620006616b033b2e3c9fd0803ce800000061271062006f00565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af1158015620006d2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006f8919062006f51565b50600b546018546010546200072c9273ffffffffffffffffffffffffffffffffffffffff9081169281169116600062004421565b6200077773f39fd6e51aad88f6f4ce6ab8827279cfffb922666002620007616b033b2e3c9fd0803ce800000061271062006f00565b6200076d919062006f76565b856000856200443f565b80156200088e57601654620008889073ffffffffffffffffffffffffffffffffffffffff167f43a0d0660000000000000000000000000000000000000000000000000000000060006002620007db6b033b2e3c9fd0803ce800000061271062006f00565b620007e7919062006f76565b60405160ff9092166024830152604482015286151560648201526084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262004632565b620009fd565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b1580156200090e57600080fd5b505af115801562000923573d6000803e3d6000fd5b505060165473ffffffffffffffffffffffffffffffffffffffff1691506343a0d066905060006002620009656b033b2e3c9fd0803ce800000061271062006f00565b62000971919062006f76565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526004810192909252602482015285151560448201526064016020604051808303816000875af1158015620009d5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620009fb919062006f51565b505b600b5460185462000a769173ffffffffffffffffffffffffffffffffffffffff9081169116600262000a3e6b033b2e3c9fd0803ce800000061271062006f00565b62000a4a919062006f76565b62000a646b033b2e3c9fd0803ce800000061271062006f00565b62000a70919062006fb2565b62004747565b62000afa8362000a9f57600c5473ffffffffffffffffffffffffffffffffffffffff1662000ab9565b600d5473ffffffffffffffffffffffffffffffffffffffff165b60185473ffffffffffffffffffffffffffffffffffffffff16600262000aee6b033b2e3c9fd0803ce800000061271062006f00565b62000a70919062006f76565b600b5460185460105462000b2d9273ffffffffffffffffffffffffffffffffffffffff9081169281169116600162004421565b600c5462000b539073ffffffffffffffffffffffffffffffffffffffff16841562004769565b600d5462000b789073ffffffffffffffffffffffffffffffffffffffff168462004769565b60105462000b9c9073ffffffffffffffffffffffffffffffffffffffff1662004789565b508062000ba98162006fcc565b9150506200060a565b5050808062000bc19062006fcc565b915050620005fa565b50565b6001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b15801562000c4d57600080fd5b505af115801562000c62573d6000803e3d6000fd5b50505050601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639b51ecd36040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562000cd157600080fd5b505af115801562000ce6573d6000803e3d6000fd5b50506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f61081c1500000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff909116925063c31eb0e09150602401600060405180830381600087803b15801562000d7657600080fd5b505af115801562000d8b573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b15801562000e0f57600080fd5b505af115801562000e24573d6000803e3d6000fd5b50505050601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639b51ecd36040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562000e9357600080fd5b505af115801562000ea8573d6000803e3d6000fd5b50505050565b60005b600281101562000bca5780151560005b6002811015620013455780151562000ed862000599565b600b5460185473ffffffffffffffffffffffffffffffffffffffff918216916340c10f19911662000f186b033b2e3c9fd0803ce800000061271062006f00565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af115801562000f89573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000faf919062006f51565b50600b5460185460105462000fe39273ffffffffffffffffffffffffffffffffffffffff9081169281169116600062004421565b6200102073f39fd6e51aad88f6f4ce6ab8827279cfffb92266620010166b033b2e3c9fd0803ce800000061271062006f00565b856001856200443f565b80156200108957601654604051600060248201528415156044820152620010839173ffffffffffffffffffffffffffffffffffffffff16907f60759fce000000000000000000000000000000000000000000000000000000009060640162000805565b620011c4565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b1580156200110957600080fd5b505af11580156200111e573d6000803e3d6000fd5b50506016546040517f60759fce00000000000000000000000000000000000000000000000000000000815260006004820152861515602482015273ffffffffffffffffffffffffffffffffffffffff90911692506360759fce91506044016020604051808303816000875af11580156200119c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011c2919062006f51565b505b600b54601854620011f19173ffffffffffffffffffffffffffffffffffffffff9081169116600062004747565b62001267836200121a57600c5473ffffffffffffffffffffffffffffffffffffffff1662001234565b600d5473ffffffffffffffffffffffffffffffffffffffff165b60185473ffffffffffffffffffffffffffffffffffffffff1662000a706b033b2e3c9fd0803ce800000061271062006f00565b600b546018546010546200129a9273ffffffffffffffffffffffffffffffffffffffff9081169281169116600162004421565b600b54620012c09073ffffffffffffffffffffffffffffffffffffffff16600062004769565b600c54620012e69073ffffffffffffffffffffffffffffffffffffffff16841562004769565b600d546200130b9073ffffffffffffffffffffffffffffffffffffffff168462004769565b6010546200132f9073ffffffffffffffffffffffffffffffffffffffff1662004789565b50806200133c8162006fcc565b91505062000ec1565b50508080620013549062006fcc565b91505062000eb1565b601654604080517f6a4874a100000000000000000000000000000000000000000000000000000000815290516200144c9273ffffffffffffffffffffffffffffffffffffffff1691636a4874a19160048083019260209291908290030181865afa158015620013d0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013f691906200702b565b60095460408051808201909152601381527f496e636f72726563742043525620746f6b656e00000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff9091169062004a67565b601654604080517f0754617200000000000000000000000000000000000000000000000000000000815290516200153b9273ffffffffffffffffffffffffffffffffffffffff169163075461729160048083019260209291908290030181865afa158015620014bf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620014e591906200702b565b600a5460408051808201909152601681527f496e636f7272656374206d696e74657220284356582900000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff9091169062004a67565b565b60005b600281101562000bca578015156200155762000599565b600b5460185473ffffffffffffffffffffffffffffffffffffffff918216916340c10f199116620015976b033b2e3c9fd0803ce800000061271062006f00565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af115801562001608573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200162e919062006f51565b506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b158015620016af57600080fd5b505af1158015620016c4573d6000803e3d6000fd5b505060165473ffffffffffffffffffffffffffffffffffffffff1691506343a0d06690506000620017046b033b2e3c9fd0803ce800000061271062006f00565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815260048101929092526024820152600060448201526064016020604051808303816000875af115801562001767573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200178d919062006f51565b50600c54601854601054620017c19273ffffffffffffffffffffffffffffffffffffffff9081169281169116600062004421565b6200180b73f39fd6e51aad88f6f4ce6ab8827279cfffb922666002620017f66b033b2e3c9fd0803ce800000061271062006f00565b62001802919062006f76565b60008462004ae0565b80156200189c57601654620018969073ffffffffffffffffffffffffffffffffffffffff167f441a3e7000000000000000000000000000000000000000000000000000000000600060026200186f6b033b2e3c9fd0803ce800000061271062006f00565b6200187b919062006f76565b60405160ff9092166024830152604482015260640162000805565b62001a03565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b1580156200191c57600080fd5b505af115801562001931573d6000803e3d6000fd5b505060165473ffffffffffffffffffffffffffffffffffffffff16915063441a3e70905060006002620019736b033b2e3c9fd0803ce800000061271062006f00565b6200197f919062006f76565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168152600481019290925260248201526044016020604051808303816000875af1158015620019db573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001a01919062006f51565b505b600b5460185462001a449173ffffffffffffffffffffffffffffffffffffffff9081169116600262000aee6b033b2e3c9fd0803ce800000061271062006f00565b600c5460185462001a859173ffffffffffffffffffffffffffffffffffffffff9081169116600262000a3e6b033b2e3c9fd0803ce800000061271062006f00565b600c5460185460105462001ab89273ffffffffffffffffffffffffffffffffffffffff9081169281169116600062004421565b600b5462001ade9073ffffffffffffffffffffffffffffffffffffffff16600162004769565b60105462001b029073ffffffffffffffffffffffffffffffffffffffff1662004789565b508062001b0f8162006fcc565b91505062001540565b6010546016546040517f1526fe270000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff9283169262001c6b921690631526fe279060240160c060405180830381865afa15801562001b92573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001bb891906200707a565b516040517f1526fe270000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff841690631526fe279060240160c060405180830381865afa15801562001c25573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c4b91906200707a565b5160408051606081019091526022808252620512c0602083013962004a67565b6016546040517f1526fe270000000000000000000000000000000000000000000000000000000081526000600482015262001dda9173ffffffffffffffffffffffffffffffffffffffff1690631526fe279060240160c060405180830381865afa15801562001cde573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001d0491906200707a565b602001516040517f1526fe270000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff841690631526fe279060240160c060405180830381865afa15801562001d74573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001d9a91906200707a565b602001516040518060400160405280602081526020017f706f6f6c496e666f2e746f6b656e206973206e6f7420636f6e73697374656e7481525062004a67565b6016546040517f1526fe270000000000000000000000000000000000000000000000000000000081526000600482015262001f4a9173ffffffffffffffffffffffffffffffffffffffff1690631526fe279060240160c060405180830381865afa15801562001e4d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001e7391906200707a565b60409081015190517f1526fe270000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff841690631526fe279060240160c060405180830381865afa15801562001ee4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001f0a91906200707a565b604001516040518060400160405280602081526020017f706f6f6c496e666f2e6761756765206973206e6f7420636f6e73697374656e7481525062004a67565b6016546040517f1526fe27000000000000000000000000000000000000000000000000000000008152600060048201526200209d9173ffffffffffffffffffffffffffffffffffffffff1690631526fe279060240160c060405180830381865afa15801562001fbd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001fe391906200707a565b606001516040517f1526fe270000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff841690631526fe279060240160c060405180830381865afa15801562002053573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200207991906200707a565b606001516040518060600160405280602581526020016205129b6025913962004a67565b6016546040517f1526fe27000000000000000000000000000000000000000000000000000000008152600060048201526200220c9173ffffffffffffffffffffffffffffffffffffffff1690631526fe279060240160c060405180830381865afa15801562002110573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200213691906200707a565b608001516040517f1526fe270000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff841690631526fe279060240160c060405180830381865afa158015620021a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620021cc91906200707a565b608001516040518060400160405280602081526020017f706f6f6c496e666f2e7374617368206973206e6f7420636f6e73697374656e7481525062004a67565b6040517f1526fe2700000000000000000000000000000000000000000000000000000000815260006004820152620023689073ffffffffffffffffffffffffffffffffffffffff831690631526fe279060240160c060405180830381865afa1580156200227d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620022a391906200707a565b60a001516016546040517f1526fe27000000000000000000000000000000000000000000000000000000008152600060048201529115159173ffffffffffffffffffffffffffffffffffffffff90911690631526fe279060240160c060405180830381865afa1580156200231b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200234191906200707a565b60a00151151514604051806060016040528060238152602001620512e26023913962004c5b565b601654604080517f081e3eda0000000000000000000000000000000000000000000000000000000081529051620024d19273ffffffffffffffffffffffffffffffffffffffff169163081e3eda9160048083019260209291908290030181865afa158015620023db573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002401919062007133565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663081e3eda6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200246f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002495919062007133565b6040518060400160405280601c81526020017f706f6f6c4c656e677468206973206e6f7420636f6e73697374656e740000000081525062004ca5565b601654604080517f5ebaf1db000000000000000000000000000000000000000000000000000000008152905162000bca9273ffffffffffffffffffffffffffffffffffffffff1691635ebaf1db9160048083019260209291908290030181865afa15801562002544573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200256a91906200702b565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635ebaf1db6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620025d8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620025fe91906200702b565b6040518060400160405280601881526020017f7374616b6572206973206e6f7420636f6e73697374656e74000000000000000081525062004a67565b60005b600281101562000bca578015156200265462000599565b600b5460185473ffffffffffffffffffffffffffffffffffffffff918216916340c10f199116620026946b033b2e3c9fd0803ce800000061271062006f00565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af115801562002705573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200272b919062006f51565b506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b158015620027ac57600080fd5b505af1158015620027c1573d6000803e3d6000fd5b505060165473ffffffffffffffffffffffffffffffffffffffff1691506343a0d06690506000620028016b033b2e3c9fd0803ce800000061271062006f00565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815260048101929092526024820152600060448201526064016020604051808303816000875af115801562002864573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200288a919062006f51565b50600c54601854601054620028be9273ffffffffffffffffffffffffffffffffffffffff9081169281169116600062004421565b620028fa73f39fd6e51aad88f6f4ce6ab8827279cfffb92266620028f16b033b2e3c9fd0803ce800000061271062006f00565b60018462004ae0565b80156200295b5760165460405160006024820152620029559173ffffffffffffffffffffffffffffffffffffffff16907f958e2d31000000000000000000000000000000000000000000000000000000009060440162000805565b62002a8e565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b158015620029db57600080fd5b505af1158015620029f0573d6000803e3d6000fd5b50506016546040517f958e2d310000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff909116925063958e2d3191506024016020604051808303816000875af115801562002a66573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002a8c919062006f51565b505b600b5460185462002acd9173ffffffffffffffffffffffffffffffffffffffff908116911662000a706b033b2e3c9fd0803ce800000061271062006f00565b600c5460185462002afa9173ffffffffffffffffffffffffffffffffffffffff9081169116600062004747565b600c5460185460105462002b2d9273ffffffffffffffffffffffffffffffffffffffff9081169281169116600062004421565b600c5462002b539073ffffffffffffffffffffffffffffffffffffffff16600062004769565b600b5462002b799073ffffffffffffffffffffffffffffffffffffffff16600162004769565b60105462002b9d9073ffffffffffffffffffffffffffffffffffffffff1662004789565b508062002baa8162006fcc565b9150506200263d565b60008054610100900460ff161562002bd45750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1562002d185760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000008284015282518083038401815260608301909352600092909162002c7c917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016200717c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905262002cb691620071c6565b6000604051808303816000865af19150503d806000811462002cf5576040519150601f19603f3d011682016040523d82523d6000602084013e62002cfa565b606091505b509150508080602001905181019062002d14919062006f51565b9150505b919050565b62002d2762004cf2565b6103e8600860405162002d3a9062006e36565b91825260ff166020820152604001604051809103906000f08015801562002d65573d6000803e3d6000fd5b50600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600554604080517f2630c12f00000000000000000000000000000000000000000000000000000000815290519190921691632630c12f9160048083019260209291908290030181865afa15801562002e03573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002e2991906200702b565b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905560405160129062002e7f9062006e44565b6060808252600e908201527f4375727665204c5020546f6b656e000000000000000000000000000000000000608082015260a0602082018190526005908201527f4352564c5000000000000000000000000000000000000000000000000000000060c082015260ff909116604082015260e001604051809103906000f08015801562002f0f573d6000803e3d6000fd5b50600b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216918217905562002f5f9062004cfe565b601260405162002f6f9062006e44565b60608082526005908201527f4375727665000000000000000000000000000000000000000000000000000000608082015260a0602082018190526003908201527f435256000000000000000000000000000000000000000000000000000000000060c082015260ff909116604082015260e001604051809103906000f08015801562002fff573d6000803e3d6000fd5b50600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691821790556200304f9062004cfe565b60126040516200305f9062006e44565b60608082526006908201527f436f6e7665780000000000000000000000000000000000000000000000000000608082015260a0602082018190526003908201527f435658000000000000000000000000000000000000000000000000000000000060c082015260ff909116604082015260e001604051809103906000f080158015620030ef573d6000803e3d6000fd5b50600a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691821790556200313f9062004cfe565b6001811062003238576012604051620031589062006e44565b6060808252600e908201527f4578747261205265776172642031000000000000000000000000000000000000608082015260a0602082018190526005908201527f455854523100000000000000000000000000000000000000000000000000000060c082015260ff909116604082015260e001604051809103906000f080158015620031e8573d6000803e3d6000fd5b50600e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169182179055620032389062004cfe565b6002811062003331576012604051620032519062006e44565b6060808252600e908201527f4578747261205265776172642032000000000000000000000000000000000000608082015260a0602082018190526005908201527f455854523200000000000000000000000000000000000000000000000000000060c082015260ff909116604082015260e001604051809103906000f080158015620032e1573d6000803e3d6000fd5b50600f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169182179055620033319062004cfe565b600954600a5460405173ffffffffffffffffffffffffffffffffffffffff9283169290911690620033629062006e52565b73ffffffffffffffffffffffffffffffffffffffff928316815291166020820152604001604051809103906000f080158015620033a3573d6000803e3d6000fd5b50601080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316908117909155600b546040517fd914cd4b000000000000000000000000000000000000000000000000000000008152921660048301529063d914cd4b906024016020604051808303816000875af115801562003442573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003468919062006f51565b506010546040517f1526fe270000000000000000000000000000000000000000000000000000000081526000600482018190529173ffffffffffffffffffffffffffffffffffffffff1690631526fe279060240160c060405180830381865afa158015620034da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200350091906200707a565b6020810151600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9092169182179055909150620035569062004cfe565b6060810151601180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691909117905560018210620036f557601154600e5460105460405173ffffffffffffffffffffffffffffffffffffffff938416939283169290911690620035e09062006e60565b73ffffffffffffffffffffffffffffffffffffffff938416815291831660208301529091166040820152606001604051809103906000f0801580156200362a573d6000803e3d6000fd5b50601280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283169081179091556011546040517f5e43c47b000000000000000000000000000000000000000000000000000000008152600481019290925290911690635e43c47b906024016020604051808303816000875af1158015620036cd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620036f3919062006f51565b505b600282106200384b57601154600f5460105460405173ffffffffffffffffffffffffffffffffffffffff938416939283169290911690620037369062006e60565b73ffffffffffffffffffffffffffffffffffffffff938416815291831660208301529091166040820152606001604051809103906000f08015801562003780573d6000803e3d6000fd5b50601380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283169081179091556011546040517f5e43c47b000000000000000000000000000000000000000000000000000000008152600481019290925290911690635e43c47b906024016020604051808303816000875af115801562003823573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003849919062006f51565b505b600954600a5460405173ffffffffffffffffffffffffffffffffffffffff92831692909116906200387c9062006e6e565b73ffffffffffffffffffffffffffffffffffffffff928316815291166020820152604001604051809103906000f080158015620038bd573d6000803e3d6000fd5b50601480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055601154600c54604051918316921690620039199062006e7c565b73ffffffffffffffffffffffffffffffffffffffff928316815291166020820152604001604051809103906000f0801580156200395a573d6000803e3d6000fd5b50600d80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92831690811790915560025460115460405191841693169190620039ba9062006e8a565b73ffffffffffffffffffffffffffffffffffffffff938416815291831660208301529091166040820152606001604051809103906000f08015801562003a04573d6000803e3d6000fd5b50601580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600d5462003a55911662004cfe565b6001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b15801562003ad557600080fd5b505af115801562003aea573d6000803e3d6000fd5b5050600480546011546015546040517f7bccacee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283169481019490945281166024840152169250637bccacee9150604401600060405180830381600087803b15801562003b6a57600080fd5b505af115801562003b7f573d6000803e3d6000fd5b505060025460105460405173ffffffffffffffffffffffffffffffffffffffff92831694509116915062003bb39062006e98565b73ffffffffffffffffffffffffffffffffffffffff928316815291166020820152604001604051809103906000f08015801562003bf4573d6000803e3d6000fd5b50601680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283161790556001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291169063ca669fa790602401600060405180830381600087803b15801562003ca057600080fd5b505af115801562003cb5573d6000803e3d6000fd5b5050600480546010546016546040517f7bccacee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283169481019490945281166024840152169250637bccacee9150604401600060405180830381600087803b15801562003d3557600080fd5b505af115801562003d4a573d6000803e3d6000fd5b505060025460145460405173ffffffffffffffffffffffffffffffffffffffff92831694509116915062003d7e9062006ea6565b73ffffffffffffffffffffffffffffffffffffffff928316815291166020820152604001604051809103906000f08015801562003dbf573d6000803e3d6000fd5b50601780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283161790556001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291169063ca669fa790602401600060405180830381600087803b15801562003e6b57600080fd5b505af115801562003e80573d6000803e3d6000fd5b5050600480546014546017546040517f7bccacee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283169481019490945281166024840152169250637bccacee9150604401600060405180830381600087803b15801562003f0057600080fd5b505af115801562003f15573d6000803e3d6000fd5b50506001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b15801562003f9957600080fd5b505af115801562003fae573d6000803e3d6000fd5b50505050601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639b51ecd36040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200401d57600080fd5b505af115801562004032573d6000803e3d6000fd5b505050505050565b6000806000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635f7c9bd06040518163ffffffff1660e01b8152600401602060405180830381865afa158015620040ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620040d3919062007133565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015291925073ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b1580156200415457600080fd5b505af115801562004169573d6000803e3d6000fd5b50506003546040517f6c8f225d0000000000000000000000000000000000000000000000000000000081526004810185905273f39fd6e51aad88f6f4ce6ab8827279cfffb92266602482015260646044820181905260009082015273ffffffffffffffffffffffffffffffffffffffff9091169250636c8f225d9150608401600060405180830381600087803b1580156200420357600080fd5b505af115801562004218573d6000803e3d6000fd5b50506002546040517fe958b70400000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063e958b7049150602401602060405180830381865afa1580156200429f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620042c591906200702b565b6006546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80841660048301529295509116906370a0823190602401602060405180830381865afa15801562004338573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200435e919062007133565b600154604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301526024820192909252600d60448201527f6372656469744163636f756e74000000000000000000000000000000000000006064820152929450169063c657c71890608401600060405180830381600087803b1580156200440357600080fd5b505af115801562004418573d6000803e3d6000fd5b50505050509091565b62000ea8848484846040518060200160405280600081525062004f39565b600082620044c5576040805160006024820152604481018790528515156064808301919091528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f43a0d0660000000000000000000000000000000000000000000000000000000017905262004537565b60408051600060248201528515156044808301919091528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f60759fce000000000000000000000000000000000000000000000000000000001790525b90508115620045bc57601654601054600b54620045b69273ffffffffffffffffffffffffffffffffffffffff908116928116918a91869116896200459457600c5473ffffffffffffffffffffffffffffffffffffffff16620045ae565b600d5473ffffffffffffffffffffffffffffffffffffffff165b600162005177565b62004032565b601654601054600b54620040329273ffffffffffffffffffffffffffffffffffffffff908116928116918a91869116896200461057600c5473ffffffffffffffffffffffffffffffffffffffff166200462a565b600d5473ffffffffffffffffffffffffffffffffffffffff165b600162005193565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b158015620046b257600080fd5b505af1158015620046c7573d6000803e3d6000fd5b50506003546040805180820190915273ffffffffffffffffffffffffffffffffffffffff868116825260208201869052909116925063caa5c23f91506200470e90620051a6565b6040518263ffffffff1660e01b81526004016200472c919062007230565b600060405180830381600087803b1580156200401d57600080fd5b62004764838383604051806020016040528060008152506200520f565b505050565b62004785828260405180602001604052806000815250620053ca565b5050565b6002546040517fe958b70400000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015260009173ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156200480d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200483391906200702b565b90506000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa158015620048a5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620048cb919062007133565b905060005b8181101562000ea8576002546040517f172c48c70000000000000000000000000000000000000000000000000000000081526004810183905260009173ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa15801562004949573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200496f9190620072dc565b506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152878116602483015291925062004a519183169063dd62ed3e90604401602060405180830381865afa158015620049ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004a13919062007133565b60016040518060400160405280601581526020017f616c6c6f77616e636520697320746f6f2068696768000000000000000000000081525062005740565b508062004a5e8162006fcc565b915050620048d0565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161462004764577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf35838160405162004acc919062007321565b60405180910390a16200476483836200578e565b60008262004b5b57604080516000602482015260448082018790528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f441a3e700000000000000000000000000000000000000000000000000000000017905262004bc5565b6040805160006024808301919091528251808303909101815260449091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f958e2d31000000000000000000000000000000000000000000000000000000001790525b9050811562004c1457601654601054600c54600b5462004c0e9373ffffffffffffffffffffffffffffffffffffffff908116938116928a928792918216911660016000620058cc565b62004c54565b601654601054600c54600b5462004c549373ffffffffffffffffffffffffffffffffffffffff908116938116928a92879291821691166001600062005fbd565b5050505050565b8162004785577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf35838160405162004c92919062007321565b60405180910390a16200478582620064ab565b81831462004764577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf35838160405162004cde919062007321565b60405180910390a162004764838362006523565b6200153b600162006623565b6001546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff909116906306447d5690602401600060405180830381600087803b15801562004d7e57600080fd5b505af115801562004d93573d6000803e3d6000fd5b50506008546007546040517fe8a97a3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015291821660248201529116925063e8a97a3e9150604401600060405180830381600087803b15801562004e0f57600080fd5b505af115801562004e24573d6000803e3d6000fd5b5050600480546040517f3e7c88d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811693820193909352612454602482015291169250633e7c88d69150604401600060405180830381600087803b15801562004ea057600080fd5b505af115801562004eb5573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562004f2457600080fd5b505af115801562004c54573d6000803e3d6000fd5b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301526000919087169063dd62ed3e90604401602060405180830381865afa15801562004fb2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004fd8919062007133565b90508281146200516b577f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f828773ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562005050573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200509891908101906200736a565b604051602001620050ab92919062007441565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052620050e7918890620074c7565b60405180910390a160408051818152600a818301527f207370656e6465723a2000000000000000000000000000000000000000000000606082015273ffffffffffffffffffffffffffffffffffffffff8616602082015290517f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f9181900360800190a15b62004032818462006523565b6200518a878787878787876001620058cc565b50505050505050565b6200518a87878787878787600162005fbd565b604080516001808252818301909252606091816020015b604080518082019091526000815260606020820152815260200190600190039081620051bd5790505090508181600081518110620051ff57620051ff62007501565b6020026020010181905250919050565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600091908616906370a0823190602401602060405180830381865afa15801562005280573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620052a6919062007133565b9050828114620053be577f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f828673ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200531e573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200536691908101906200736a565b6040516020016200537992919062007530565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052620053b5918790620074c7565b60405180910390a15b62004c54818462006523565b6002546040517fe958b70400000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015260009173ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156200544e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200547491906200702b565b6002546040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015292935060009290911690638991b2f190602401602060405180830381865afa158015620054eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005511919062007133565b6002546040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529091169063f67c5bd090602401602060405180830381865afa15801562005582573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620055a8919062007133565b16151590508315158114801590620055c05750825115155b1562005600577f0b2e13ff20ac7b474198655583edf70dedd2c1dc980e329c4fbb2fc0748b796b83604051620055f79190620075b6565b60405180910390a15b62004c54841515821515148673ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562005657573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200569f91908101906200736a565b83620056e1576040518060400160405280601981526020017f206e6f7420656e61626c6564206173206578706563746564200000000000000081525062005718565b6040518060400160405280601981526020017f20656e61626c6564206173206e6f7420657870657463746564000000000000008152505b6040516020016200572b929190620075cb565b60405160208183030381529060405262004c5b565b8183111562004764577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf3583816040516200577a919062007321565b60405180910390a162004764838362006b4e565b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462004785577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f50604051620058489060208082526025908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b61646460408201527f726573735d000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f816040516200588191906200762a565b60405180910390a17f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f82604051620058ba91906200768c565b60405180910390a16200478562006cb3565b6002546040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152600092169063e958b70490602401602060405180830381865afa1580156200593e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200596491906200702b565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000918716906370a0823190602401602060405180830381865afa158015620059d7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620059fd919062007133565b600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481019290925260006024830181905260448301819052606483015291925073ffffffffffffffffffffffffffffffffffffffff9091169063491cc7c290608401600060405180830381600087803b15801562005a8457600080fd5b505af115801562005a99573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff8b1692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a2821562005c17576001546002546003546040805173ffffffffffffffffffffffffffffffffffffffff92831660248201528d831660448201528a831660648201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6084808301919091528251808303909101815260a490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f46fb371d0000000000000000000000000000000000000000000000000000000017905290517fbd6af4340000000000000000000000000000000000000000000000000000000081529382169363bd6af4349362005be293169190600401620076ca565b600060405180830381600087803b15801562005bfd57600080fd5b505af115801562005c12573d6000803e3d6000fd5b505050505b60015460025460035460405173ffffffffffffffffffffffffffffffffffffffff9384169363bd6af434938116927f6ce4074a000000000000000000000000000000000000000000000000000000009262005c7d92909116908f908e9060240162007703565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b909216825262005d109291600401620076ca565b600060405180830381600087803b15801562005d2b57600080fd5b505af115801562005d40573d6000803e3d6000fd5b5050600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526024810192909252600060448301819052606483015273ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b15801562005dc657600080fd5b505af115801562005ddb573d6000803e3d6000fd5b505060035460405173ffffffffffffffffffffffffffffffffffffffff8d8116945090911691507faed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab0390600090a3821562005fb15760015460025460035473ffffffffffffffffffffffffffffffffffffffff9283169263bd6af434928116917f46fb371d0000000000000000000000000000000000000000000000000000000091168d8b8a62005eac577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62005eaf565b60015b60405173ffffffffffffffffffffffffffffffffffffffff9485166024820152928416604484015292166064820152608481019190915260a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b909216825262005f7c9291600401620076ca565b600060405180830381600087803b15801562005f9757600080fd5b505af115801562005fac573d6000803e3d6000fd5b505050505b50505050505050505050565b6002546040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152600092169063e958b70490602401602060405180830381865afa1580156200602f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200605591906200702b565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000918716906370a0823190602401602060405180830381865afa158015620060c8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620060ee919062007133565b9050821562006226576001546002546040805173ffffffffffffffffffffffffffffffffffffffff8c811660248301528d811660448301528a811660648301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6084808401919091528351808403909101815260a490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f46fb371d0000000000000000000000000000000000000000000000000000000017905291517fbd6af4340000000000000000000000000000000000000000000000000000000081529382169363bd6af43493620061f193169190600401620076ca565b600060405180830381600087803b1580156200620c57600080fd5b505af115801562006221573d6000803e3d6000fd5b505050505b60015460025460405173ffffffffffffffffffffffffffffffffffffffff9283169263bd6af4349216907f6ce4074a000000000000000000000000000000000000000000000000000000009062006286908d908f908e9060240162007703565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b9092168252620063199291600401620076ca565b600060405180830381600087803b1580156200633457600080fd5b505af115801562006349573d6000803e3d6000fd5b5050600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526024810192909252600060448301819052606483015273ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b158015620063cf57600080fd5b505af1158015620063e4573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff808d1693508b1691507faed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab0390600090a3821562005fb15760015460025473ffffffffffffffffffffffffffffffffffffffff9182169163bd6af43491167f46fb371d000000000000000000000000000000000000000000000000000000008b8d8b8a62005eac577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62005eaf565b8062000bca577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f50604051620065119060208082526017908201527f4572726f723a20417373657274696f6e204661696c6564000000000000000000604082015260600190565b60405180910390a162000bca62006cb3565b80821462004785577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f50604051620065b19060208082526022908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b75696e60408201527f745d000000000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a881604051620065ea919062007747565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a882604051620058ba919062007793565b600181600a8111156200663a576200663a620077d1565b14806200665b5750600381600a811115620066595762006659620077d1565b145b620066c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f556e737570706f7274656420746f6b656e000000000000000000000000000000604482015260640160405180910390fd5b604051620066d49062006eb4565b604051809103906000f080158015620066f1573d6000803e3d6000fd5b50600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff166201000073ffffffffffffffffffffffffffffffffffffffff9384168102919091179182905590041663b36ba2086200675b670de0b6b3a7640000606462006f00565b6040518263ffffffff1660e01b81526004016000604051808303818588803b1580156200678757600080fd5b505af11580156200679c573d6000803e3d6000fd5b5050505050600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681604051620067d39062006ec2565b620067e092919062007800565b604051809103906000f080158015620067fd573d6000803e3d6000fd5b50600580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169182179055604080517f6f307dc30000000000000000000000000000000000000000000000000000000081529051636f307dc3916004808201926020929091908290030181865afa15801562006897573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620068bd91906200702b565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600554604080517fc12c21c00000000000000000000000000000000000000000000000000000000081529051919092169163c12c21c09160048083019260209291908290030181865afa1580156200695a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200698091906200702b565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600554604080517f2f7a188100000000000000000000000000000000000000000000000000000000815290519190921691632f7a18819160048083019260209291908290030181865afa15801562006a1d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062006a4391906200702b565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600554604080517ff9aa028a0000000000000000000000000000000000000000000000000000000081529051919092169163f9aa028a9160048083019260209291908290030181865afa15801562006ae0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062006b0691906200702b565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b8082111562004785577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f5060405162006bdd9060208082526022908201527f4572726f723a2061203c3d2062206e6f7420736174697366696564205b75696e60408201527f745d000000000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a1604080518181526009818301527f202056616c75652061000000000000000000000000000000000000000000000060608201526020810184905290517fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a89181900360800190a1604080518181526009918101919091527f202056616c7565206200000000000000000000000000000000000000000000006060820152602081018290527fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a890608001620058ba565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1562006e085760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000009282019290925260016060820152600091907f70ca10bbd0dbfd9020a9f4b13402c16cb120705e0d1c0aeab10fa353ae586fc490608001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905262006d8592916020016200717c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905262006dbf91620071c6565b6000604051808303816000865af19150503d806000811462006dfe576040519150601f19603f3d011682016040523d82523d6000602084013e62006e03565b606091505b505050505b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055565b6106ca806200786383390190565b6117588062007f2d83390190565b615594806200968583390190565b611127806200ec1983390190565b6108e7806200fd4083390190565b610b0f806201062783390190565b6135d1806201113683390190565b612456806201470783390190565b610e178062016b5d83390190565b617a51806201797483390190565b62031ed6806201f3c583390190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562006f3b5762006f3b62006ed1565b500290565b8051801515811462002d1857600080fd5b60006020828403121562006f6457600080fd5b62006f6f8262006f40565b9392505050565b60008262006fad577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60008282101562006fc75762006fc762006ed1565b500390565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141562007001576200700162006ed1565b5060010190565b73ffffffffffffffffffffffffffffffffffffffff8116811462000bca57600080fd5b6000602082840312156200703e57600080fd5b815162006f6f8162007008565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060c082840312156200708d57600080fd5b60405160c0810181811067ffffffffffffffff82111715620070b357620070b36200704b565b6040528251620070c38162007008565b81526020830151620070d58162007008565b60208201526040830151620070ea8162007008565b60408201526060830151620070ff8162007008565b60608201526080830151620071148162007008565b60808201526200712760a0840162006f40565b60a08201529392505050565b6000602082840312156200714657600080fd5b5051919050565b60005b838110156200716a57818101518382015260200162007150565b8381111562000ea85750506000910152565b7fffffffff000000000000000000000000000000000000000000000000000000008316815260008251620071b88160048501602087016200714d565b919091016004019392505050565b60008251620071da8184602087016200714d565b9190910192915050565b60008151808452620071fe8160208601602086016200714d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015620072ce578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00185528151805173ffffffffffffffffffffffffffffffffffffffff168452870151878401879052620072ba87850182620071e4565b958801959350509086019060010162007257565b509098975050505050505050565b60008060408385031215620072f057600080fd5b8251620072fd8162007008565b602084015190925061ffff811681146200731657600080fd5b809150509250929050565b60408152600560408201527f4572726f72000000000000000000000000000000000000000000000000000000606082015260806020820152600062006f6f6080830184620071e4565b6000602082840312156200737d57600080fd5b815167ffffffffffffffff808211156200739657600080fd5b818401915084601f830112620073ab57600080fd5b815181811115620073c057620073c06200704b565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156200740957620074096200704b565b816040528281528760208487010111156200742357600080fd5b620074368360208301602088016200714d565b979650505050505050565b60008351620074558184602088016200714d565b7f496e636f7272656374200000000000000000000000000000000000000000000090830190815283516200749181600a8401602088016200714d565b7f20416c6c6f77616e6365206f6e206163636f756e743a20200000000000000000600a9290910191820152602201949350505050565b604081526000620074dc6040830185620071e4565b905073ffffffffffffffffffffffffffffffffffffffff831660208301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008351620075448184602088016200714d565b7f496e636f7272656374200000000000000000000000000000000000000000000090830190815283516200758081600a8401602088016200714d565b7f2062616c616e6365206f6e206163636f756e743a200000000000000000000000600a9290910191820152601f01949350505050565b60208152600062006f6f6020830184620071e4565b7f546f6b656e200000000000000000000000000000000000000000000000000000815260008351620076058160068501602088016200714d565b8351908301906200761e8160068401602088016200714d565b01600601949350505050565b6040815260006200766860408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b905073ffffffffffffffffffffffffffffffffffffffff8316602083015292915050565b6040815260006200766860408301600a81527f2020202041637475616c00000000000000000000000000000000000000000000602082015260400190565b73ffffffffffffffffffffffffffffffffffffffff83168152604060208201526000620076fb6040830184620071e4565b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff8086168352808516602084015250606060408301526200773e6060830184620071e4565b95945050505050565b6040815260006200778560408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b905082602083015292915050565b6040815260006200778560408301600a81527f2020202041637475616c00000000000000000000000000000000000000000000602082015260400190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff8316815260408101600b831062007855577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b826020830152939250505056fe60a060405234801561001057600080fd5b506040516106ca3803806106ca83398101604081905261002f9161006c565b60009190915560ff166080526001805460506001600160501b031991821681179092556004805490911690911790554260028190556003556100a2565b6000806040838503121561007f57600080fd5b82519150602083015160ff8116811461009757600080fd5b809150509250929050565b60805161060e6100bc600039600060d3015261060e6000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80639a6fc8f511610081578063d62ada111161005b578063d62ada11146102dc578063f7a30806146102f4578063feaf968c1461030757600080fd5b80639a6fc8f5146101cd578063bd18ad531461023a578063cd653afc1461024d57600080fd5b806354fd4d50116100b257806354fd4d501461012d57806367e8d83d1461013c5780637284e4161461018e57600080fd5b8063313ce567146100ce5780633fd0875f1461010c575b600080fd5b6100f57f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020015b60405180910390f35b6004546a0100000000000000000000900460ff166040516101039190610441565b60405160018152602001610103565b61018c61014a366004610482565b600480549115156c01000000000000000000000000027fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff909216919091179055565b005b604080518082018252600c81527f7072696365206f7261636c6500000000000000000000000000000000000000006020820152905161010391906104ab565b6102036101db36600461053d565b60015460005460025460035460045469ffffffffffffffffffff948516941691939590929450565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610103565b61018c610248366004610558565b61030f565b61018c61025b366004610579565b6001805469ffffffffffffffffffff9586167fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090911617905560029290925560035560048054919092167fffffffffffffffffffffffffffffffffffffffff00ff00000000000000000000909116176b020000000000000000000000179055565b6102e461035f565b6040519015158152602001610103565b61018c6103023660046105bf565b600055565b610203610385565b600480548291907fffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff166b01000000000000000000000083600281111561035757610357610412565b021790555050565b600454600090610380906b010000000000000000000000900460ff166103d6565b905090565b60008060008060006004600c9054906101000a900460ff16156103a757600080fd5b505060015460005460025460035460045469ffffffffffffffffffff9485169893975091955093509190911690565b600060028260028111156103ec576103ec610412565b14156103f757600080fd5b600182600281111561040b5761040b610412565b1492915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016006831061047c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561049457600080fd5b813580151581146104a457600080fd5b9392505050565b600060208083528351808285015260005b818110156104d8578581018301518582016040015282016104bc565b818111156104ea576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803569ffffffffffffffffffff8116811461053857600080fd5b919050565b60006020828403121561054f57600080fd5b6104a48261051e565b60006020828403121561056a57600080fd5b8135600381106104a457600080fd5b6000806000806080858703121561058f57600080fd5b6105988561051e565b935060208501359250604085013591506105b46060860161051e565b905092959194509250565b6000602082840312156105d157600080fd5b503591905056fea264697066735822122014874f7a973b86501c4c1a8be32490fe902c8f088ee234d25f9b2497e19f9e5264736f6c634300080a003360a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a003360c0604052600080546001600160a01b031916737109709ecfa91a80626ff3989d68f67f5b1dd12d1781556103e86002556101c2600355603260045560058190556014553480156200005057600080fd5b506040516200559438038062005594833981016040819052620000739162000113565b601380546000608052600680546001600160a01b031990811633908117909255600d80548216831790556007805482168317905560088054821690921790915560128054821690556001600160a81b0319909116909155600e8054821690556001600160a01b0391821660a052600180549390921692169190911790556200014b565b80516001600160a01b03811681146200010e57600080fd5b919050565b600080604083850312156200012757600080fd5b6200013283620000f6565b91506200014260208401620000f6565b90509250929050565b60805160a0516154156200017f6000396000818161035b01528181610d6d0152610ec7015260006104be01526154156000f3fe60806040523480156200001157600080fd5b5060043610620002e45760003560e01c80636a4874a11162000199578063b42eda7111620000e9578063d6a0f5301162000097578063d914cd4b116200007a578063d914cd4b1462000711578063dc4c90d31462000728578063e77772fe146200074957600080fd5b8063d6a0f53014620006e6578063d73792a9146200070757600080fd5b8063cb0d5b5211620000cc578063cb0d5b52146200067e578063cfb9cfba14620006a4578063d0fb020314620006c557600080fd5b8063b42eda71146200063c578063bf86d690146200065857600080fd5b806393e846a011620001475780639f00332b116200012a5780639f00332b14620005de578063a386a08014620005ff578063ab366292146200061b57600080fd5b806393e846a014620005be578063958e2d3114620005c757600080fd5b80637303df9a116200017c5780637303df9a146200057b5780637b10399914620005855780638da5cb5b146200059d57600080fd5b80636a4874a1146200054357806371192b17146200056457600080fd5b8063376d771a11620002555780635ebaf1db116200020357806361d027b311620001e657806361d027b314620004f757806362d28ac71462000518578063647846a5146200052257600080fd5b80635ebaf1db14620004b857806360759fce14620004e057600080fd5b806343a0d066116200023857806343a0d0661462000480578063441a3e7014620004975780635094061814620004ae57600080fd5b8063376d771a14620004555780633a088cd2146200047657600080fd5b806314cd70e411620002b3578063245e4bf01162000296578063245e4bf0146200042057806326232a2e14620004415780632986c0e5146200044b57600080fd5b806314cd70e414620003905780631526fe2714620003b857600080fd5b8063043b684a14620002e9578063068eb19e1462000334578063075461721462000355578063081e3eda146200037d575b600080fd5b600c546200030a9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b600a546200030a9073ffffffffffffffffffffffffffffffffffffffff1681565b6200030a7f000000000000000000000000000000000000000000000000000000000000000081565b6015545b6040519081526020016200032b565b620003a7620003a136600462001b05565b6200076a565b60405190151581526020016200032b565b620003cf620003c936600462001b41565b62000839565b6040805173ffffffffffffffffffffffffffffffffffffffff97881681529587166020870152938616938501939093529084166060840152909216608082015290151560a082015260c0016200032b565b6009546200030a9073ffffffffffffffffffffffffffffffffffffffff1681565b6200038160055481565b6200038160145481565b6010546200030a9073ffffffffffffffffffffffffffffffffffffffff1681565b6200038160045481565b620003a76200049136600462001b6a565b620008b9565b620003a7620004a836600462001b9b565b62000b8c565b6200038160025481565b6200030a7f000000000000000000000000000000000000000000000000000000000000000081565b620003a7620004f136600462001bbe565b62000ba5565b600e546200030a9073ffffffffffffffffffffffffffffffffffffffff1681565b6200038160035481565b6013546200030a9073ffffffffffffffffffffffffffffffffffffffff1681565b6001546200030a9073ffffffffffffffffffffffffffffffffffffffff1681565b620003a76200057536600462001bf1565b62000c7f565b620003816107d081565b6200030a6f22d53366457f9d5e68ec105046fc438381565b6006546200030a9073ffffffffffffffffffffffffffffffffffffffff1681565b62000381600481565b620003a7620005d836600462001b41565b62000f32565b600d546200030a9073ffffffffffffffffffffffffffffffffffffffff1681565b6200030a73e478de485ad2fe566d49342cbd03e49ed7db335681565b6011546200030a9073ffffffffffffffffffffffffffffffffffffffff1681565b6200030a73bcff8b0b9419b9a88c44546519b1e909cf33039981565b601354620003a79074010000000000000000000000000000000000000000900460ff1681565b620003a76200068f36600462001c2c565b60166020526000908152604090205460ff1681565b600f546200030a9073ffffffffffffffffffffffffffffffffffffffff1681565b6007546200030a9073ffffffffffffffffffffffffffffffffffffffff1681565b6012546200030a9073ffffffffffffffffffffffffffffffffffffffff1681565b6200038161271081565b620003a76200072236600462001c2c565b6200100d565b6008546200030a9073ffffffffffffffffffffffffffffffffffffffff1681565b600b546200030a9073ffffffffffffffffffffffffffffffffffffffff1681565b6000806015858154811062000783576200078362001c4c565b600091825260209091206003600590920201015473ffffffffffffffffffffffffffffffffffffffff1690503381146200081e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f216175746800000000000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b6200082c8585338662001385565b60019150505b9392505050565b601581815481106200084a57600080fd5b60009182526020909120600590910201805460018201546002830154600384015460049094015473ffffffffffffffffffffffffffffffffffffffff93841695509183169390831692908116919081169074010000000000000000000000000000000000000000900460ff1686565b60008060158581548110620008d257620008d262001c4c565b60009182526020909120600590910201805490915073ffffffffffffffffffffffffffffffffffffffff166200090b81333088620014ea565b600182015473ffffffffffffffffffffffffffffffffffffffff16841562000a95576040517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810187905273ffffffffffffffffffffffffffffffffffffffff8216906340c10f1990604401600060405180830381600087803b1580156200099c57600080fd5b505af1158015620009b1573d6000803e3d6000fd5b505050600384015473ffffffffffffffffffffffffffffffffffffffff9081169150620009e3908316826000620015ce565b62000a0673ffffffffffffffffffffffffffffffffffffffff83168289620015ce565b6040517f2ee409080000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff821690632ee4090890604401600060405180830381600087803b15801562000a7557600080fd5b505af115801562000a8a573d6000803e3d6000fd5b505050505062000b1e565b6040517f40c10f190000000000000000000000000000000000000000000000000000000081523360048201526024810187905273ffffffffffffffffffffffffffffffffffffffff8216906340c10f1990604401600060405180830381600087803b15801562000b0457600080fd5b505af115801562000b19573d6000803e3d6000fd5b505050505b60145460408051918252602082018890528615158282015251889133917fb16197b2bc5f21de7d21259f49728a7ae0f7f294f8b5d0815aed6ab550b137829181900360600190a360016014600082825462000b7a919062001c7b565b90915550600198975050505050505050565b600062000b9c8383333362001385565b50600192915050565b6000806015848154811062000bbe5762000bbe62001c4c565b60009182526020822060059190910201546040517f70a0823100000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff909116925082906370a0823190602401602060405180830381865afa15801562000c3e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c64919062001cbb565b905062000c73858286620008b9565b50600195945050505050565b6000806015858154811062000c985762000c9862001c4c565b600091825260209091206003600590920201015473ffffffffffffffffffffffffffffffffffffffff16905033811462000d2f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f2161757468000000000000000000000000000000000000000000000000000000604482015260640162000815565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ca669fa77f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663075461726040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000dd7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000dfd919062001cd5565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401600060405180830381600087803b15801562000e6457600080fd5b505af115801562000e79573d6000803e3d6000fd5b50506040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018790527f00000000000000000000000000000000000000000000000000000000000000001692506340c10f199150604401600060405180830381600087803b15801562000f0e57600080fd5b505af115801562000f23573d6000803e3d6000fd5b50600198975050505050505050565b6000806015838154811062000f4b5762000f4b62001c4c565b60009182526020822060059190910201600101546040517f70a0823100000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff909116925082906370a0823190602401602060405180830381865afa15801562000fce573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ff4919062001cbb565b905062001002848262000b8c565b506001949350505050565b600073ffffffffffffffffffffffffffffffffffffffff82166200108e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f21706172616d0000000000000000000000000000000000000000000000000000604482015260640162000815565b601554604051600090601290620010a59062001ac3565b6060808252600b908201527f436f6e766578546f6b656e000000000000000000000000000000000000000000608082015260a0602082018190526008908201527f435658544f4b454e00000000000000000000000000000000000000000000000060c082015260ff909116604082015260e001604051809103906000f08015801562001135573d6000803e3d6000fd5b50905060008282600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16306040516200116e9062001ad1565b93845273ffffffffffffffffffffffffffffffffffffffff92831660208501529082166040840152166060820152608001604051809103906000f080158015620011bc573d6000803e3d6000fd5b506040805160c08101825273ffffffffffffffffffffffffffffffffffffffff978816815293871660208501908152600191850182815292881660608601908152600260808701908152600060a088018181526015805480880182559252975160059091027f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec47581018054928d167fffffffffffffffffffffffff000000000000000000000000000000000000000093841617905593517f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec47685018054918d1691831691909117905594517f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec47784018054918c1691871691909117905590517f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec47883018054918b16919095161790935591517f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec47990920180549451151574010000000000000000000000000000000000000000027fffffffffffffffffffffff0000000000000000000000000000000000000000009095169290971691909117929092179094559392505050565b6000601585815481106200139d576200139d62001c4c565b60009182526020909120600590910201805460018201546040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018990529394509183169216908190639dc29fac90604401600060405180830381600087803b1580156200142d57600080fd5b505af115801562001442573d6000803e3d6000fd5b506200146a9250505073ffffffffffffffffffffffffffffffffffffffff831685886200175d565b868473ffffffffffffffffffffffffffffffffffffffff167f617ecc79b6b01a6f07d16c413645249f6c6b38105ddcd843e4d4c0d11009db8c60145489604051620014bf929190918252602082015260400190565b60405180910390a3600160146000828254620014dc919062001c7b565b909155505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052620015c89085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152620017b5565b50505050565b8015806200167257506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015284169063dd62ed3e90604401602060405180830381865afa1580156200164a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001670919062001cbb565b155b62001700576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e636500000000000000000000606482015260840162000815565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052620017589084907f095ea7b3000000000000000000000000000000000000000000000000000000009060640162001545565b505050565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052620017589084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640162001545565b600062001819826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16620018c89092919063ffffffff16565b8051909150156200175857808060200190518101906200183a919062001cf5565b62001758576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840162000815565b6060620018d98484600085620018e1565b949350505050565b60608247101562001975576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c0000000000000000000000000000000000000000000000000000606482015260840162000815565b843b620019df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000815565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405162001a0a919062001d44565b60006040518083038185875af1925050503d806000811462001a49576040519150601f19603f3d011682016040523d82523d6000602084013e62001a4e565b606091505b509150915062001a6082828662001a6b565b979650505050505050565b6060831562001a7c57508162000832565b82511562001a8d5782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000815919062001d62565b6117588062001db683390190565b611ed2806200350e83390190565b73ffffffffffffffffffffffffffffffffffffffff8116811462001b0257600080fd5b50565b60008060006060848603121562001b1b57600080fd5b8335925060208401359150604084013562001b368162001adf565b809150509250925092565b60006020828403121562001b5457600080fd5b5035919050565b801515811462001b0257600080fd5b60008060006060848603121562001b8057600080fd5b8335925060208401359150604084013562001b368162001b5b565b6000806040838503121562001baf57600080fd5b50508035926020909101359150565b6000806040838503121562001bd257600080fd5b82359150602083013562001be68162001b5b565b809150509250929050565b60008060006060848603121562001c0757600080fd5b83359250602084013562001c1b8162001adf565b929592945050506040919091013590565b60006020828403121562001c3f57600080fd5b8135620008328162001adf565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000821982111562001cb6577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500190565b60006020828403121562001cce57600080fd5b5051919050565b60006020828403121562001ce857600080fd5b8151620008328162001adf565b60006020828403121562001d0857600080fd5b8151620008328162001b5b565b60005b8381101562001d3257818101518382015260200162001d18565b83811115620015c85750506000910152565b6000825162001d5881846020870162001d15565b9190910192915050565b602081526000825180602084015262001d8381604085016020870162001d15565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe60a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a00336080604052600080546001600160a01b031916737109709ecfa91a80626ff3989d68f67f5b1dd12d17815560068190556007819055600a819055600b819055600c81905560128190556013553480156200005857600080fd5b5060405162001ed238038062001ed28339810160408190526200007b91620000e1565b600593909355600280546001600160a01b03199081166001600160a01b039485161790915560018054821692841692909217909155600380549091169190921617905562000135565b80516001600160a01b0381168114620000dc57600080fd5b919050565b60008060008060808587031215620000f857600080fd5b845193506200010a60208601620000c4565b92506200011a60408601620000c4565b91506200012a60608601620000c4565b905092959194509250565b611d8d80620001456000396000f3fe608060405234801561001057600080fd5b50600436106102765760003560e01c80637050ccd911610160578063a694fc3a116100d8578063df136d651161008c578063f106845411610071578063f10684541461050a578063f14faf6f146103c2578063f7c618c11461051357600080fd5b8063df136d65146104f8578063ebe2b12b1461050157600080fd5b8063c8f33c91116100bd578063c8f33c91146104df578063cd3daf9d146104e8578063d55a23f4146104f057600080fd5b8063a694fc3a146104b9578063c32e7202146104cc57600080fd5b806380faa57d1161012f5780638dcb4061116101145780638dcb406114610495578063901a7d531461049d5780639b7ccf4c146104a657600080fd5b806380faa57d1461046d5780638b8763471461047557600080fd5b80637050ccd9146103fb57806370a082311461040e57806372f702f3146104445780637b0a47ee1461046457600080fd5b806338d07436116101f3578063570ca735116101c25780635e43c47b116101a75780635e43c47b146103d657806363d38c3b146103e95780636c8bcee8146103f257600080fd5b8063570ca735146103a2578063590a41f5146103c257600080fd5b806338d07436146103615780633d18b9121461037457806340c354461461037c57806349f039a21461038f57600080fd5b80630fb5a6b41161024a5780631c1c6fe51161022f5780631c1c6fe514610322578063262d3d6d146103355780632ee409081461033e57600080fd5b80630fb5a6b41461031057806318160ddd1461031a57600080fd5b80628cc2621461027b5780630569d388146102a15780630700037d146102ab5780630f4ef8a6146102cb575b600080fd5b61028e610289366004611a42565b610533565b6040519081526020015b60405180910390f35b6102a96105cc565b005b61028e6102b9366004611a42565b600f6020526000908152604090205481565b6004546102eb9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610298565b61028e62093a8081565b600d5461028e565b6102a9610330366004611a6d565b6105da565b61028e600c5481565b61035161034c366004611a8a565b6105f8565b6040519015158152602001610298565b61035161036f366004611ab6565b61087f565b610351610aa7565b6102eb61038a366004611ae6565b610abc565b6102a961039d366004611a6d565b610af3565b6003546102eb9073ffffffffffffffffffffffffffffffffffffffff1681565b6103516103d0366004611ae6565b50600190565b6103516103e4366004611a42565b610b0d565b61028e600a5481565b61028e61033e81565b610351610409366004611aff565b610c07565b61028e61041c366004611a42565b73ffffffffffffffffffffffffffffffffffffffff1660009081526010602052604090205490565b6002546102eb9073ffffffffffffffffffffffffffffffffffffffff1681565b61028e60075481565b61028e610e88565b61028e610483366004611a42565b600e6020526000908152604090205481565b610351610e9b565b61028e600b5481565b6102a96104b4366004611ae6565b610f46565b6103516104c7366004611ae6565b61113f565b6103516104da366004611ab6565b611378565b61028e60085481565b60095461028e565b60115461028e565b61028e60095481565b61028e60065481565b61028e60055481565b6001546102eb9073ffffffffffffffffffffffffffffffffffffffff1681565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600f6020908152604080832054600e9092528220546105c691906105c090670de0b6b3a7640000906105ba9061058e9061058860095490565b9061156e565b73ffffffffffffffffffffffffffffffffffffffff881660009081526010602052604090205490611581565b9061158d565b90611599565b92915050565b6105d8601160006119ee565b565b336000908152601060205260409020546105f4908261087f565b5050565b60008273ffffffffffffffffffffffffffffffffffffffff8116156106595761062081610533565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600f6020908152604080832093909355600954600e909152919020555b600083116106c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f526577617264506f6f6c203a2043616e6e6f74207374616b652030000000000060448201526064015b60405180910390fd5b60005b60115481101561079057601181815481106106e8576106e8611b2d565b6000918252602090912001546040517fadc9772e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018790529091169063adc9772e90604401600060405180830381600087803b15801561076557600080fd5b505af1158015610779573d6000803e3d6000fd5b50505050808061078890611b8b565b9150506106cb565b50600d5461079e9084611599565b600d5573ffffffffffffffffffffffffffffffffffffffff84166000908152601060205260409020546107d19084611599565b73ffffffffffffffffffffffffffffffffffffffff80861660009081526010602052604090209190915560025461080b91163330866115a5565b8373ffffffffffffffffffffffffffffffffffffffff166013547e12ea37eafadc86c304798c357ee0b9923724f92be4e45c4796ccf0e33f84ce8560405161085591815260200190565b60405180910390a36001601360008282546108709190611bc4565b90915550600195945050505050565b60003380156108ca5761089181610533565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600f6020908152604080832093909355600954600e909152919020555b60008411610934576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f526577617264506f6f6c203a2043616e6e6f742077697468647261772030000060448201526064016106bf565b60005b6011548110156109fa576011818154811061095457610954611b2d565b6000918252602090912001546040517ff3fef3a30000000000000000000000000000000000000000000000000000000081523360048201526024810187905273ffffffffffffffffffffffffffffffffffffffff9091169063f3fef3a390604401600060405180830381600087803b1580156109cf57600080fd5b505af11580156109e3573d6000803e3d6000fd5b5050505080806109f290611b8b565b915050610937565b50600d54610a08908561156e565b600d5533600090815260106020526040902054610a25908561156e565b33600081815260106020526040902091909155600254610a5e9173ffffffffffffffffffffffffffffffffffffffff9091169086611687565b8215610a7157610a6f336001610c07565b505b6013546040518581523391907f5512f168a2a6322c28d70f2b2811c8857ea8b1f256d7be8ee8ef770665c3f96290602001610855565b6000610ab4336001610c07565b506001905090565b60118181548110610acc57600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b336000908152601060205260409020546105f49082611378565b600073ffffffffffffffffffffffffffffffffffffffff8216610b8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f217265776172642073657474696e67000000000000000000000000000000000060448201526064016106bf565b5060118054600180820183556000929092527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c680180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff939093169290921790915590565b60008273ffffffffffffffffffffffffffffffffffffffff811615610c6857610c2f81610533565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600f6020908152604080832093909355600954600e909152919020555b6000610c7385610533565b90508015610d495773ffffffffffffffffffffffffffffffffffffffff8086166000908152600f6020526040812055600154610cb191168683611687565b6003546005546040517f71192b17000000000000000000000000000000000000000000000000000000008152600481019190915273ffffffffffffffffffffffffffffffffffffffff878116602483015260448201849052909116906371192b1790606401600060405180830381600087803b158015610d3057600080fd5b505af1158015610d44573d6000803e3d6000fd5b505050505b8315610e125760005b601154811015610e105760118181548110610d6f57610d6f611b2d565b6000918252602090912001546040517fc00007b000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529091169063c00007b090602401600060405180830381600087803b158015610de557600080fd5b505af1158015610df9573d6000803e3d6000fd5b505050508080610e0890611b8b565b915050610d52565b505b8473ffffffffffffffffffffffffffffffffffffffff166013547fa7283f521536f3db5cd5c50a1f053bbba463b20de118ee0f9dd4c3ff2bc9532f83604051610e5d91815260200190565b60405180910390a3600160136000828254610e789190611bc4565b9091555060019695505050505050565b6000610e96426006546116e2565b905090565b6002546040517f70a08231000000000000000000000000000000000000000000000000000000008152336004820152600091829173ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa158015610f0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f329190611bdc565b9050610f3d8161113f565b50600191505090565b600054600154604080517f07546172000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169363ca669fa793169163075461729160048083019260209291908290030181865afa158015610fc0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe49190611bf5565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401600060405180830381600087803b15801561104a57600080fd5b505af115801561105e573d6000803e3d6000fd5b50506001546040517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810185905273ffffffffffffffffffffffffffffffffffffffff90911692506340c10f1991506044016020604051808303816000875af11580156110d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110fd9190611c12565b50600d541561113c57600d5461111b82670de0b6b3a7640000611c2f565b6111259190611c6c565b600960008282546111369190611bc4565b90915550505b50565b600033801561118a5761115181610533565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600f6020908152604080832093909355600954600e909152919020555b600083116111f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f526577617264506f6f6c203a2043616e6e6f74207374616b652030000000000060448201526064016106bf565b60005b6011548110156112ba576011818154811061121457611214611b2d565b6000918252602090912001546040517fadc9772e0000000000000000000000000000000000000000000000000000000081523360048201526024810186905273ffffffffffffffffffffffffffffffffffffffff9091169063adc9772e90604401600060405180830381600087803b15801561128f57600080fd5b505af11580156112a3573d6000803e3d6000fd5b5050505080806112b290611b8b565b9150506111f7565b50600d546112c89084611599565b600d55336000908152601060205260409020546112e59084611599565b3360008181526010602052604090209190915560025461131f9173ffffffffffffffffffffffffffffffffffffffff9091169030866115a5565b6013546040518481523391907e12ea37eafadc86c304798c357ee0b9923724f92be4e45c4796ccf0e33f84ce9060200160405180910390a360016013600082825461136a9190611bc4565b909155506001949350505050565b60003380156113c35761138a81610533565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600f6020908152604080832093909355600954600e909152919020555b60005b60115481101561148957601181815481106113e3576113e3611b2d565b6000918252602090912001546040517ff3fef3a30000000000000000000000000000000000000000000000000000000081523360048201526024810187905273ffffffffffffffffffffffffffffffffffffffff9091169063f3fef3a390604401600060405180830381600087803b15801561145e57600080fd5b505af1158015611472573d6000803e3d6000fd5b50505050808061148190611b8b565b9150506113c6565b50600d54611497908561156e565b600d55336000908152601060205260409020546114b4908561156e565b33600081815260106020526040908190209290925560035460055492517f14cd70e4000000000000000000000000000000000000000000000000000000008152600481019390935260248301879052604483019190915273ffffffffffffffffffffffffffffffffffffffff16906314cd70e490606401600060405180830381600087803b15801561154557600080fd5b505af1158015611559573d6000803e3d6000fd5b505050508215610a7157610a6f336001610c07565b600061157a8284611ca7565b9392505050565b600061157a8284611c2f565b600061157a8284611c6c565b600061157a8284611bc4565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526116819085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526116f8565b50505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526116dd9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016115ff565b505050565b60008183106116f1578161157a565b5090919050565b600061175a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166118049092919063ffffffff16565b8051909150156116dd57808060200190518101906117789190611c12565b6116dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016106bf565b6060611813848460008561181b565b949350505050565b6060824710156118ad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016106bf565b843b611915576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016106bf565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161193e9190611cea565b60006040518083038185875af1925050503d806000811461197b576040519150601f19603f3d011682016040523d82523d6000602084013e611980565b606091505b509150915061199082828661199b565b979650505050505050565b606083156119aa57508161157a565b8251156119ba5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106bf9190611d06565b508054600082559060005260206000209081019061113c91905b80821115611a1c5760008155600101611a08565b5090565b73ffffffffffffffffffffffffffffffffffffffff8116811461113c57600080fd5b600060208284031215611a5457600080fd5b813561157a81611a20565b801515811461113c57600080fd5b600060208284031215611a7f57600080fd5b813561157a81611a5f565b60008060408385031215611a9d57600080fd5b8235611aa881611a20565b946020939093013593505050565b60008060408385031215611ac957600080fd5b823591506020830135611adb81611a5f565b809150509250929050565b600060208284031215611af857600080fd5b5035919050565b60008060408385031215611b1257600080fd5b8235611b1d81611a20565b91506020830135611adb81611a5f565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611bbd57611bbd611b5c565b5060010190565b60008219821115611bd757611bd7611b5c565b500190565b600060208284031215611bee57600080fd5b5051919050565b600060208284031215611c0757600080fd5b815161157a81611a20565b600060208284031215611c2457600080fd5b815161157a81611a5f565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611c6757611c67611b5c565b500290565b600082611ca2577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600082821015611cb957611cb9611b5c565b500390565b60005b83811015611cd9578181015183820152602001611cc1565b838111156116815750506000910152565b60008251611cfc818460208701611cbe565b9190910192915050565b6020815260008251806020840152611d25816040850160208701611cbe565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea26469706673582212203f11f44bbbc8c8f79b251a573810815d0ad952cb93d7f9b03a3b1f9b4b5f088b64736f6c634300080a0033a264697066735822122044488a884b50168ddd6206e1b0e6f92b3a4c18569c421a05cd933000ca6bb7ec64736f6c634300080a00336080604052600180546001600160a01b031916737109709ecfa91a80626ff3989d68f67f5b1dd12d17905560006004819055600581905560088190556009819055600a819055600d819055600e5534801561005957600080fd5b50604051611127380380611127833981016040819052610078916100d6565b600080546001600160a01b039485166001600160a01b031991821617909155600280549385169382169390931790925560038054919093169116179055610119565b80516001600160a01b03811681146100d157600080fd5b919050565b6000806000606084860312156100eb57600080fd5b6100f4846100ba565b9250610102602085016100ba565b9150610110604085016100ba565b90509250925092565b610fff806101286000396000f3fe608060405234801561001057600080fd5b50600436106101a25760003560e01c80637b0a47ee116100ee578063c8f33c9111610097578063ebe2b12b11610071578063ebe2b12b14610345578063f14faf6f14610285578063f3fef3a31461034e578063f7c618c11461036157600080fd5b8063c8f33c911461032b578063cd3daf9d14610334578063df136d651461033c57600080fd5b80639b7ccf4c116100c85780639b7ccf4c146102f0578063adc9772e14610305578063c00007b01461031857600080fd5b80637b0a47ee146102be5780638b876347146102c7578063901a7d53146102e757600080fd5b80633d18b9121161015057806363d38c3b1161012a57806363d38c3b146102995780636c8bcee8146102a257806370a08231146102ab57600080fd5b80633d18b9121461024d578063570ca73514610265578063590a41f51461028557600080fd5b806318160ddd1161018157806318160ddd146101f7578063262d3d6d146101ff578063323a5e0b1461020857600080fd5b80628cc262146101a75780630700037d146101cd5780630fb5a6b4146101ed575b600080fd5b6101ba6101b5366004610d9c565b610381565b6040519081526020015b60405180910390f35b6101ba6101db366004610d9c565b600c6020526000908152604090205481565b6101ba62093a8081565b6101ba6103fd565b6101ba600a5481565b6000546102289073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101c4565b610255610494565b60405190151581526020016101c4565b6003546102289073ffffffffffffffffffffffffffffffffffffffff1681565b610255610293366004610db9565b50600190565b6101ba60085481565b6101ba61033e81565b6101ba6102b9366004610d9c565b6104a7565b6101ba60055481565b6101ba6102d5366004610d9c565b600b6020526000908152604090205481565b6101ba60095481565b6103036102fe366004610db9565b61053c565b005b610255610313366004610dd2565b61073f565b610255610326366004610d9c565b610815565b6101ba60065481565b6007546101ba565b6101ba60075481565b6101ba60045481565b61025561035c366004610dd2565b61090a565b6002546102289073ffffffffffffffffffffffffffffffffffffffff1681565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600c6020908152604080832054600b9092528220546103f791906103f190670de0b6b3a7640000906103eb906103dc906103d660075490565b906109b6565b6103e5886104a7565b906109c9565b906109d5565b906109e1565b92915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561046b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048f9190610dfe565b905090565b600061049f33610815565b506001905090565b600080546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152909116906370a0823190602401602060405180830381865afa158015610518573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103f79190610dfe565b600154600254604080517f07546172000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169363ca669fa793169163075461729160048083019260209291908290030181865afa1580156105b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105da9190610e17565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401600060405180830381600087803b15801561064057600080fd5b505af1158015610654573d6000803e3d6000fd5b50506002546040517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810185905273ffffffffffffffffffffffffffffffffffffffff90911692506340c10f1991506044016020604051808303816000875af11580156106cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f39190610e34565b506106fc6103fd565b1561073c576107096103fd565b61071b82670de0b6b3a7640000610e85565b6107259190610ec2565b600760008282546107369190610efd565b90915550505b50565b60008273ffffffffffffffffffffffffffffffffffffffff8116156107a05761076781610381565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600c6020908152604080832093909355600754600b909152919020555b8373ffffffffffffffffffffffffffffffffffffffff16600e547fd198b93c3f48daa3d45cc61906c9e4716488eeb15e548a75d758b920def2594b856040516107eb91815260200190565b60405180910390a36001600e60008282546108069190610efd565b90915550600195945050505050565b60008173ffffffffffffffffffffffffffffffffffffffff8116156108765761083d81610381565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600c6020908152604080832093909355600754600b909152919020555b600061088184610381565b905080156108bf5773ffffffffffffffffffffffffffffffffffffffff8085166000908152600c60205260408120556002546108bf911685836109ed565b8373ffffffffffffffffffffffffffffffffffffffff16600e547f7f6ed0d42a688c853d54c432db2c486796be01babc08c81d92cc84fac254e53a836040516107eb91815260200190565b60008273ffffffffffffffffffffffffffffffffffffffff81161561096b5761093281610381565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600c6020908152604080832093909355600754600b909152919020555b8373ffffffffffffffffffffffffffffffffffffffff16600e547f13da9d660b9991f6835852ad20002cecf1c4664a804c5b315539e1f8934c56df856040516107eb91815260200190565b60006109c28284610f15565b9392505050565b60006109c28284610e85565b60006109c28284610ec2565b60006109c28284610efd565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610a7a908490610a7f565b505050565b6000610ae1826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16610b909092919063ffffffff16565b805190915015610a7a5780806020019051810190610aff9190610e34565b610a7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6060610b9f8484600085610ba7565b949350505050565b606082471015610c39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610b87565b843b610ca1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610b87565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051610cca9190610f5c565b60006040518083038185875af1925050503d8060008114610d07576040519150601f19603f3d011682016040523d82523d6000602084013e610d0c565b606091505b5091509150610d1c828286610d27565b979650505050505050565b60608315610d365750816109c2565b825115610d465782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b879190610f78565b73ffffffffffffffffffffffffffffffffffffffff8116811461073c57600080fd5b600060208284031215610dae57600080fd5b81356109c281610d7a565b600060208284031215610dcb57600080fd5b5035919050565b60008060408385031215610de557600080fd5b8235610df081610d7a565b946020939093013593505050565b600060208284031215610e1057600080fd5b5051919050565b600060208284031215610e2957600080fd5b81516109c281610d7a565b600060208284031215610e4657600080fd5b815180151581146109c257600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610ebd57610ebd610e56565b500290565b600082610ef8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60008219821115610f1057610f10610e56565b500190565b600082821015610f2757610f27610e56565b500390565b60005b83811015610f47578181015183820152602001610f2f565b83811115610f56576000848401525b50505050565b60008251610f6e818460208701610f2c565b9190910192915050565b6020815260008251806020840152610f97816040850160208701610f2c565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea26469706673582212203edf2b496d59cc45e2c69e6980d4fa131b9a2d1fbf9bede11ec63d2d8cd65bfc64736f6c634300080a003360e060405234801561001057600080fd5b506040516108e73803806108e78339818101604052604081101561003357600080fd5b508051602090910151336080526001600160a01b0391821660a0521660c05260805160a05160c05161086661008160003960006103120152600061029b015260006102eb01526108666000f3fe608060405234801561001057600080fd5b50600436106100675760003560e01c80636a4874a1116100505780636a4874a1146102965780638da5cb5b146102e6578063923c1d611461030d57600080fd5b806317d7de7c1461006c5780635a7b87f214610115575b600080fd5b60408051808201909152600d81527f436c61696d5a61702056322e300000000000000000000000000000000000000060208201526040805160208082528351818301528351919283929083019185019080838360005b838110156100da5781810151838201526020016100c2565b50505050905090810190601f1680156101075780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610294600480360361012081101561012c57600080fd5b81019060208101813564010000000081111561014757600080fd5b82018360208201111561015957600080fd5b8035906020019184602083028401116401000000008311171561017b57600080fd5b91939092909160208101903564010000000081111561019957600080fd5b8201836020820111156101ab57600080fd5b803590602001918460208302840111640100000000831117156101cd57600080fd5b9193909290916020810190356401000000008111156101eb57600080fd5b8201836020820111156101fd57600080fd5b8035906020019184602083028401116401000000008311171561021f57600080fd5b91939092909160208101903564010000000081111561023d57600080fd5b82018360208201111561024f57600080fd5b8035906020019184602083028401116401000000008311171561027157600080fd5b919350915080359060208101359060408101359060608101359060800135610334565b005b6102bd7f000000000000000000000000000000000000000000000000000000000000000081565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6102bd7f000000000000000000000000000000000000000000000000000000000000000081565b6102bd7f000000000000000000000000000000000000000000000000000000000000000081565b60005b8c81101561040c578d8d8281811061035157610351610764565b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637050ccd93360016040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff168152602001821515815260200192505050600060405180830381600087803b1580156103e157600080fd5b505af11580156103f5573d6000803e3d6000fd5b50505050808061040490610793565b915050610337565b5060005b8a8110156104da578b8b8281811061042a5761042a610764565b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c00007b0336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b1580156104af57600080fd5b505af11580156104c3573d6000803e3d6000fd5b5050505080806104d290610793565b915050610410565b506104eb85858585600080876104fa565b50505050505050505050505050565b8615610551576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d8152602001806107f4603d913960400191505060405180910390fd5b85156105a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d8152602001806107f4603d913960400191505060405180910390fd5b84156105ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d8152602001806107f4603d913960400191505060405180910390fd5b8315610656576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d8152602001806107f4603d913960400191505060405180910390fd5b82156106ad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d8152602001806107f4603d913960400191505060405180910390fd5b8115610704576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d8152602001806107f4603d913960400191505060405180910390fd5b801561075b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d8152602001806107f4603d913960400191505060405180910390fd5b50505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156107ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fe436c61696d205a6170204d6f636b3a204e6f6e2d7a65726f20657874726120706172616d65746572207761732070617373656420746f20746172676574a2646970667358221220804b3364e3f1f3fdbeaae89a76796b90e4f98f99bcd43ed1c2f9bd27338d29d964736f6c634300080a003360e06040523480156200001157600080fd5b5060405162000b0f38038062000b0f8339810160408190526200003491620002c1565b80816001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000074573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200009e919081019062000342565b604051602001620000b09190620003fa565b604051602081830303815290604052826001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015620000fe573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000128919081019062000342565b6040516020016200013a919062000441565b604051602081830303815290604052836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000188573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ae91906200046e565b8151620001c3906000906020850190620001fe565b508251620001d9906001906020860190620001fe565b5060ff1660a05250506001600160a01b039081166080529190911660c05250620004d7565b8280546200020c906200049a565b90600052602060002090601f0160209004810192826200023057600085556200027b565b82601f106200024b57805160ff19168380011785556200027b565b828001600101855582156200027b579182015b828111156200027b5782518255916020019190600101906200025e565b50620002899291506200028d565b5090565b5b808211156200028957600081556001016200028e565b80516001600160a01b0381168114620002bc57600080fd5b919050565b60008060408385031215620002d557600080fd5b620002e083620002a4565b9150620002f060208401620002a4565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200032c57818101518382015260200162000312565b838111156200033c576000848401525b50505050565b6000602082840312156200035557600080fd5b81516001600160401b03808211156200036d57600080fd5b818401915084601f8301126200038257600080fd5b815181811115620003975762000397620002f9565b604051601f8201601f19908116603f01168101908382118183101715620003c257620003c2620002f9565b81604052828152876020848701011115620003dc57600080fd5b620003ef8360208301602088016200030f565b979650505050505050565b7f436f6e766578205374616b656420506f736974696f6e20000000000000000000815260008251620004348160178501602087016200030f565b9190910160170192915050565b6273746b60e81b815260008251620004618160038501602087016200030f565b9190910160030192915050565b6000602082840312156200048157600080fd5b815160ff811681146200049357600080fd5b9392505050565b600181811c90821680620004af57607f821691505b60208210811415620004d157634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c0516105fa62000515600039600081816101170152610380015260006101900152600081816101c901526102a601526105fa6000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c8063313ce5671161008157806395d89b411161005b57806395d89b41146101fe578063a9059cbb146100ec578063dd62ed3e1461020657600080fd5b8063313ce5671461018b5780636f307dc3146101c457806370a08231146101eb57600080fd5b806316f0115b116100b257806316f0115b1461011257806318160ddd1461015e57806323b872dd1461017457600080fd5b806306fdde03146100ce578063095ea7b3146100ec575b600080fd5b6100d6610214565b6040516100e39190610400565b60405180910390f35b6101026100fa36600461049c565b600092915050565b60405190151581526020016100e3565b6101397f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100e3565b6101666102a2565b6040519081526020016100e3565b6101026101823660046104c6565b60009392505050565b6101b27f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020016100e3565b6101397f000000000000000000000000000000000000000000000000000000000000000081565b6101666101f9366004610502565b610338565b6100d66103f3565b6101666100fa366004610524565b6001805461022190610557565b80601f016020809104026020016040519081016040528092919081815260200182805461024d90610557565b801561029a5780601f1061026f5761010080835404028352916020019161029a565b820191906000526020600020905b81548152906001019060200180831161027d57829003601f168201915b505050505081565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561030f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061033391906105ab565b905090565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa1580156103c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103ed91906105ab565b92915050565b6000805461022190610557565b600060208083528351808285015260005b8181101561042d57858101830151858201604001528201610411565b8181111561043f576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461049757600080fd5b919050565b600080604083850312156104af57600080fd5b6104b883610473565b946020939093013593505050565b6000806000606084860312156104db57600080fd5b6104e484610473565b92506104f260208501610473565b9150604084013590509250925092565b60006020828403121561051457600080fd5b61051d82610473565b9392505050565b6000806040838503121561053757600080fd5b61054083610473565b915061054e60208401610473565b90509250929050565b600181811c9082168061056b57607f821691505b602082108114156105a5577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156105bd57600080fd5b505191905056fea2646970667358221220fe176aed8ca6f061a19c6044454b19be91cf49811a0c97d16b3850e05baf33fe64736f6c634300080a00336102806040523480156200001257600080fd5b50604051620035d1380380620035d1833981016040819052620000359162000c7a565b82826001600160a01b03821615806200005557506001600160a01b038116155b156200007457604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038216608081905260408051632f7a188160e01b81529051632f7a1881916004808201926020929091908290030181865afa158015620000bf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e5919062000cce565b6001600160a01b0390811660a05290811660c0526001600055604080516372f702f360e01b8152905191851692506372f702f39160048083019260209291908290030181865afa1580156200013e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000164919062000cce565b6001600160a01b0316610100816001600160a01b031681525050816001600160a01b031663f10684546040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001bd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e3919062000cf5565b6101c08181525050816001600160a01b031663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200022a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000250919062000cce565b6001600160a01b03166101e0816001600160a01b031681525050816001600160a01b03166372f702f36040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002a9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002cf919062000cce565b6001600160a01b0316610200816001600160a01b031681525050816001600160a01b0316630fb5a6b46040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000328573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200034e919062000cf5565b6102208181525050816001600160a01b031663570ca7356040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000395573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003bb919062000cce565b6001600160a01b0316610240816001600160a01b031681525050816001600160a01b0316630f4ef8a66040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000414573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200043a919062000cce565b6001600160a01b0316610260816001600160a01b031681525050806001600160a01b0316610120816001600160a01b0316815250506000806000846001600160a01b031663d55a23f46040518163ffffffff1660e01b8152600401602060405180830381865afa158015620004b3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004d9919062000cf5565b9050600181106200069257604051632061aa2360e11b8152600060048201526001600160a01b038616906340c3544690602401602060405180830381865afa1580156200052a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000550919062000cce565b6001600160a01b031663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200058e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005b4919062000cce565b9250600281106200069257604051632061aa2360e11b8152600160048201526001600160a01b038616906340c3544690602401602060405180830381865afa15801562000605573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200062b919062000cce565b6001600160a01b031663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000669573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200068f919062000cce565b91505b6001600160a01b0380841661014052828116610160526040805163570ca73560e01b8152905160009288169163570ca7359160048083019260209291908290030181865afa158015620006e9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200070f919062000cce565b9050806001600160a01b0316636a4874a16040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000750573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000776919062000cce565b6001600160a01b0316610180816001600160a01b031681525050806001600160a01b031663075461726040518163ffffffff1660e01b8152600401602060405180830381865afa158015620007cf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007f5919062000cce565b6001600160a01b03166101a0816001600160a01b0316815250506000816001600160a01b0316631526fe27886001600160a01b031663f10684546040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200085f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000885919062000cf5565b6040518263ffffffff1660e01b8152600401620008a491815260200190565b60c060405180830381865afa158015620008c2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008e8919062000d20565b80516001600160a01b0390811660e05260805161018051604051630f67c5bd60e41b81529083166004820152929350169063f67c5bd090602401602060405180830381865afa15801562000940573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000966919062000cf5565b620009995761018051604051632262b1b560e21b81526001600160a01b0390911660048201526024015b60405180910390fd5b6080516101a051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620009e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a0d919062000cf5565b62000a3c576101a051604051632262b1b560e21b81526001600160a01b03909116600482015260240162000990565b60805160e051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa15801562000a89573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000aaf919062000cf5565b62000add5760e051604051632262b1b560e21b81526001600160a01b03909116600482015260240162000990565b6001600160a01b0385161580159062000b645750608051604051630f67c5bd60e41b81526001600160a01b0387811660048301529091169063f67c5bd090602401602060405180830381865afa15801562000b3c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b62919062000cf5565b155b1562000b8f57604051632262b1b560e21b81526001600160a01b038616600482015260240162000990565b6001600160a01b0384161580159062000c165750608051604051630f67c5bd60e41b81526001600160a01b0386811660048301529091169063f67c5bd090602401602060405180830381865afa15801562000bee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c14919062000cf5565b155b1562000c4157604051632262b1b560e21b81526001600160a01b038516600482015260240162000990565b505050505050505062000dda565b6001600160a01b038116811462000c6557600080fd5b50565b805162000c758162000c4f565b919050565b60008060006060848603121562000c9057600080fd5b835162000c9d8162000c4f565b602085015190935062000cb08162000c4f565b604085015190925062000cc38162000c4f565b809150509250925092565b60006020828403121562000ce157600080fd5b815162000cee8162000c4f565b9392505050565b60006020828403121562000d0857600080fd5b5051919050565b8051801515811462000c7557600080fd5b600060c0828403121562000d3357600080fd5b60405160c081016001600160401b038111828210171562000d6457634e487b7160e01b600052604160045260246000fd5b60405262000d728362000c68565b815262000d826020840162000c68565b602082015262000d956040840162000c68565b604082015262000da86060840162000c68565b606082015262000dbb6080840162000c68565b608082015262000dce60a0840162000d0f565b60a08201529392505050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e051610200516102205161024051610260516125c66200100b60003960006103410152600061048b0152600061038d0152600061050f0152600061072d015260006106f8015260008181610584015261169f0152600081816104ba01526115d80152600081816105d20152818161183601526118b70152600081816106c10152818161172701526117b10152600081816103d1015281816110b0015281816111ae0152818161152d01526119f80152600081816105f90152818161108f0152818161118d015261154e0152600081816105ab0152611a190152600081816106330152818161079601528181610851015281816108860152818161096501528181610b6f01528181610c4701528181610d1301528181610d8001528181610e3901528181610f0401528181610f3901528181610fa6015281816110570152818161111d01528181611255015281816112c20152818161132f0152818161139c0152818161140901528181611cda01528181611df90152611ed301526000818161042301528181611b450152611f9901526000818161065a01528181610a9501528181610b40015281816114ba01528181611600015281816116c7015281816117d9015281816118df0152818161197001528181611aa201528181611d3001528181611dca01528181611f0a01528181612021015281816120d5015261217f01526125c66000f3fe608060405234801561001057600080fd5b50600436106102fe5760003560e01c80637b0a47ee1161019c578063c12c21c0116100ee578063da5b383f11610097578063f106845411610071578063f1068454146106f3578063f14faf6f1461071a578063f7c618c11461072857600080fd5b8063da5b383f146106bc578063df136d65146106e3578063ebe2b12b146106eb57600080fd5b8063cd3daf9d116100c8578063cd3daf9d14610697578063ce30bbdb1461069f578063d55a23f4146106b457600080fd5b8063c12c21c014610655578063c32e72021461067c578063c8f33c911461068f57600080fd5b8063923c1d611161015057806399253ac01161012a57806399253ac0146105f4578063a694fc3a1461061b578063bd90df701461062e57600080fd5b8063923c1d611461057f578063927188d9146105a657806397c3413b146105cd57600080fd5b80638b876347116101815780638b8763471461055c5780638dcb40611461056f578063901a7d531461057757600080fd5b80637b0a47ee1461054c57806380faa57d1461055457600080fd5b80633d18b912116102555780636a4874a11161020957806370a08231116101e357806370a08231146104f757806372f702f31461050a57806378aa73a41461053157600080fd5b80636a4874a1146104b55780636c8bcee8146104dc5780637050ccd9146104e457600080fd5b806349f039a21161023a57806349f039a214610473578063570ca7351461048657806363d38c3b146104ad57600080fd5b80633d18b9121461045857806340c354461461046057600080fd5b80631c1c6fe5116102b75780632ee40908116102915780632ee40908146103fb5780632f7a18811461041e57806338d074361461044557600080fd5b80631c1c6fe5146103b757806320b2c151146103cc578063262d3d6d146103f357600080fd5b80630f4ef8a6116102e85780630f4ef8a61461033c5780630fb5a6b41461038857806318160ddd146103af57600080fd5b80628cc262146103035780630700037d14610329575b600080fd5b610316610311366004612205565b61074f565b6040519081526020015b60405180910390f35b610316610337366004612205565b610809565b6103637f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610320565b6103167f000000000000000000000000000000000000000000000000000000000000000081565b610316610882565b6103ca6103c5366004612230565b610918565b005b6103637f000000000000000000000000000000000000000000000000000000000000000081565b610316610961565b61040e61040936600461224d565b6109ce565b6040519015158152602001610320565b6103637f000000000000000000000000000000000000000000000000000000000000000081565b61040e610453366004612279565b610a02565b61040e610a4d565b61036361046e3660046122a9565b610c15565b6103ca610481366004612230565b610cc7565b6103637f000000000000000000000000000000000000000000000000000000000000000081565b610316610d0f565b6103637f000000000000000000000000000000000000000000000000000000000000000081565b610316610d7c565b61040e6104f23660046122c2565b610de9565b610316610505366004612205565b610ebc565b6103637f000000000000000000000000000000000000000000000000000000000000000081565b610539600181565b60405161ffff9091168152602001610320565b610316610f35565b610316610fa2565b61031661056a366004612205565b61100f565b61040e611088565b610316611119565b6103637f000000000000000000000000000000000000000000000000000000000000000081565b6103637f000000000000000000000000000000000000000000000000000000000000000081565b6103637f000000000000000000000000000000000000000000000000000000000000000081565b6103637f000000000000000000000000000000000000000000000000000000000000000081565b61040e6106293660046122a9565b611186565b6103637f000000000000000000000000000000000000000000000000000000000000000081565b6103637f000000000000000000000000000000000000000000000000000000000000000081565b61040e61068a366004612279565b61120d565b610316611251565b6103166112be565b6106a7600c81565b60405161032091906122f0565b61031661132b565b6103637f000000000000000000000000000000000000000000000000000000000000000081565b610316611398565b610316611405565b6103167f000000000000000000000000000000000000000000000000000000000000000081565b61040e6104093660046122a9565b6103637f000000000000000000000000000000000000000000000000000000000000000081565b6040517e8cc26200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f000000000000000000000000000000000000000000000000000000000000000090911690628cc262906024015b602060405180830381865afa1580156107df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108039190612331565b92915050565b6040517f0700037d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f000000000000000000000000000000000000000000000000000000000000000090911690630700037d906024016107c2565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109139190612331565b905090565b61095d6000368080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250859250600191506114729050565b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663262d3d6d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108ef573d6000803e3d6000fd5b60006040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610a466000368080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525087935091506114729050565b9392505050565b6040517fe958b704000000000000000000000000000000000000000000000000000000008152336004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015610adc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b00919061234a565b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a90610b9c9033907f0000000000000000000000000000000000000000000000000000000000000000906000903690600401612367565b6000604051808303816000875af1158015610bbb573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610c01919081019061243a565b50610c0d816001611593565b600191505090565b6040517f40c35446000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906340c3544690602401602060405180830381865afa158015610ca3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610803919061234a565b610d0c6000368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508592506001915061193f9050565b50565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166363d38c3b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108ef573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636c8bcee86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108ef573d6000803e3d6000fd5b6040517f7050ccd900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282151560248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690637050ccd9906044016020604051808303816000875af1158015610e84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea891906124fa565b50610eb38383611593565b50600192915050565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a08231906024016107c2565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637b0a47ee6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108ef573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166380faa57d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108ef573d6000803e3d6000fd5b6040517f8b87634700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638b876347906024016107c2565b60006111117f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525060019250829150611a599050565b506001905090565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663901a7d536040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108ef573d6000803e3d6000fd5b6000610eb37f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006000368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250600193509150611a599050565b6000610eb36000368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250879350915061193f9050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c8f33c916040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108ef573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663cd3daf9d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108ef573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d55a23f46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108ef573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663df136d656040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108ef573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ebe2b12b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108ef573d6000803e3d6000fd5b6040517fe958b704000000000000000000000000000000000000000000000000000000008152336004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611501573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611525919061234a565b9050611576817f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000088600088611b28565b50831561158857611588816001611593565b506001949350505050565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561164457600080fd5b505af1158015611658573d6000803e3d6000fd5b50506040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f00000000000000000000000000000000000000000000000000000000000000001692506351e3f1609150604401600060405180830381600087803b15801561170d57600080fd5b505af1158015611721573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16158015906117675750805b1561095d576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561181d57600080fd5b505af1158015611831573d6000803e3d6000fd5b5050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1615905061095d576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561192357600080fd5b505af1158015611937573d6000803e3d6000fd5b505050505050565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156119cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119f0919061234a565b9050611a41817f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000087600087611b28565b508215611a5357611a53816001611593565b50505050565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015260609060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611ae9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0d919061234a565b9050611b1d818888888888611b28565b979650505050505050565b60606000803373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614611c91576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301528916906370a0823190602401602060405180830381865afa158015611bd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bfa9190612331565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152919350908816906370a0823190602401602060405180830381865afa158015611c6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c8e9190612331565b90505b8415611d8d576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015611d7457600080fd5b505af1158015611d88573d6000803e3d6000fd5b505050505b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a90611e239033907f0000000000000000000000000000000000000000000000000000000000000000908b90600401612517565b6000604051808303816000875af1158015611e42573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611e88919081019061243a565b92508415611f67576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301528981166044830152600160648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015611f4e57600080fd5b505af1158015611f62573d6000803e3d6000fd5b505050505b611f75898989858589611f81565b50509695505050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614612082576040517f654a9eda00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528681166024830152858116604483015260648201859052608482018490527f0000000000000000000000000000000000000000000000000000000000000000169063654a9eda9060a401600060405180830381600087803b15801561206557600080fd5b505af1158015612079573d6000803e3d6000fd5b50505050611937565b8015612132576040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015286811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b15801561211957600080fd5b505af115801561212d573d6000803e3d6000fd5b505050505b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015285811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156121c357600080fd5b505af11580156121d7573d6000803e3d6000fd5b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114610d0c57600080fd5b60006020828403121561221757600080fd5b8135610a46816121e3565b8015158114610d0c57600080fd5b60006020828403121561224257600080fd5b8135610a4681612222565b6000806040838503121561226057600080fd5b823561226b816121e3565b946020939093013593505050565b6000806040838503121561228c57600080fd5b82359150602083013561229e81612222565b809150509250929050565b6000602082840312156122bb57600080fd5b5035919050565b600080604083850312156122d557600080fd5b82356122e0816121e3565b9150602083013561229e81612222565b602081016011831061232b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561234357600080fd5b5051919050565b60006020828403121561235c57600080fd5b8151610a46816121e3565b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250606060408301528260608301528284608084013760006080848401015260807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f850116830101905095945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60005b83811015612429578181015183820152602001612411565b83811115611a535750506000910152565b60006020828403121561244c57600080fd5b815167ffffffffffffffff8082111561246457600080fd5b818401915084601f83011261247857600080fd5b81518181111561248a5761248a6123df565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156124d0576124d06123df565b816040528281528760208487010111156124e957600080fd5b611b1d83602083016020880161240e565b60006020828403121561250c57600080fd5b8151610a4681612222565b600073ffffffffffffffffffffffffffffffffffffffff808616835280851660208401525060606040830152825180606084015261255c81608085016020870161240e565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160800194935050505056fea264697066735822122014882b5d8edce8ab020643e045bc4ec2fad569e354e7a0377cb2553dca8093d864736f6c634300080a00336101406040523480156200001257600080fd5b50604051620024563803806200245683398101604081905262000035916200037b565b816001600160a01b031663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000074573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200009a9190620003ba565b6001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000d8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000fe9190620003ba565b82826001600160a01b03821615806200011e57506001600160a01b038116155b156200013d57604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038216608081905260408051632f7a188160e01b81529051632f7a1881916004808201926020929091908290030181865afa15801562000188573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ae9190620003ba565b6001600160a01b0390811660a05290811660c0526000805460ff19169055821615159050620001f057604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200022f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002559190620003ba565b6001600160a01b0390811660e0526001805560408051636a4874a160e01b815290519184169250636a4874a19160048083019260209291908290030181865afa158015620002a7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002cd9190620003ba565b6001600160a01b0316610100816001600160a01b031681525050806001600160a01b031663075461726040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000326573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200034c9190620003ba565b6001600160a01b03166101205250620003e19050565b6001600160a01b03811681146200037857600080fd5b50565b600080604083850312156200038f57600080fd5b82516200039c8162000362565b6020840151909250620003af8162000362565b809150509250929050565b600060208284031215620003cd57600080fd5b8151620003da8162000362565b9392505050565b60805160a05160c05160e0516101005161012051611f6f620004e760003960006101a2015260006103550152600081816103c20152818161068f015281816109340152610a660152600081816103f10152818161045b0152818161055f015281816105d4015281816107e90152818161089d01528181610f4f01528181610fbc01528181611154015281816112630152818161163601528181611755015261182f0152600081816102c0015281816114a101526118f501526000818161041801528181610b2001528181610d0a015281816113fe0152818161168c01528181611726015281816118660152818161197d01528181611a310152611adb0152611f6f6000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c80636a4874a1116100e3578063a50cf2c81161008c578063c12c21c011610066578063c12c21c014610413578063ce30bbdb1461043a578063cfb9cfba1461044f57600080fd5b8063a50cf2c8146103bd578063ab366292146103e4578063bd90df70146103ec57600080fd5b80638456cb59116100bd5780638456cb591461039a578063958e2d31146103a25780639b51ecd3146103b557600080fd5b80636a4874a11461035057806378aa73a4146103775780637b1039991461039257600080fd5b80633f4ba83a116101455780635c975abb1161011f5780635c975abb1461032a5780635ebaf1db1461033557806360759fce1461033d57600080fd5b80633f4ba83a146102ea57806343a0d066146102f4578063441a3e701461031757600080fd5b8063251d48c011610176578063251d48c0146102855780632f7a1881146102bb578063376d771a146102e257600080fd5b8063075461721461019d578063081e3eda146101ee5780631526fe2714610204575b600080fd5b6101c47f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6101f6610457565b6040519081526020016101e5565b610217610212366004611b40565b6104ed565b6040516101e59190600060c08201905073ffffffffffffffffffffffffffffffffffffffff8084511683528060208501511660208401528060408501511660408401528060608501511660608401528060808501511660808401525060a0830151151560a083015292915050565b6101c4610293366004611b40565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6101c47f000000000000000000000000000000000000000000000000000000000000000081565b6101c46105d0565b6102f2610661565b005b610307610302366004611b6a565b61074f565b60405190151581526020016101e5565b610307610325366004611ba3565b61079b565b60005460ff16610307565b6101c46107e5565b61030761034b366004611bc5565b610852565b6101c47f000000000000000000000000000000000000000000000000000000000000000081565b61037f600181565b60405161ffff90911681526020016101e5565b6101c4610899565b6102f2610906565b6103076103b0366004611b40565b6109f2565b6102f2610a38565b6101c47f000000000000000000000000000000000000000000000000000000000000000081565b6101c4610f4b565b6101c47f000000000000000000000000000000000000000000000000000000000000000081565b6101c47f000000000000000000000000000000000000000000000000000000000000000081565b610442600d81565b6040516101e59190611c24565b6101c4610fb8565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663081e3eda6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e89190611c65565b905090565b6040805160c081018252600080825260208201819052818301819052606082018190526080820181905260a082015290517f1526fe270000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690631526fe279060240160c060405180830381865afa1580156105a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ca9190611cd6565b92915050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663376d771a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561063d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e89190611d77565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156106eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070f9190611d92565b610745576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61074d611025565b565b600061079384836000368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250925061110b915050565b949350505050565b60006107de836000368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250925061121a915050565b9392505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635ebaf1db6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561063d573d6000803e3d6000fd5b60006107de83836000368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061110b915050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637b1039996040518163ffffffff1660e01b8152600401602060405180830381865afa15801561063d573d6000803e3d6000fd5b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015610990573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b49190611d92565b6109ea576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61074d6112f5565b60006105ca826000368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061121a915050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610ac2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae69190611d92565b610b1c576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bad9190611d77565b905060008173ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c209190611c65565b905060005b81811015610f46576040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810182905260009073ffffffffffffffffffffffffffffffffffffffff851690635094cb4f90602401602060405180830381865afa158015610c9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cbf9190611d77565b6040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000917f0000000000000000000000000000000000000000000000000000000000000000169063fdd5764590602401602060405180830381865afa158015610d51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d759190611d77565b905060008173ffffffffffffffffffffffffffffffffffffffff1663ce30bbdb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de89190611daf565b9050600c816010811115610dfe57610dfe611bf5565b1415610f385760008273ffffffffffffffffffffffffffffffffffffffff1663f10684546040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e759190611c65565b90508273ffffffffffffffffffffffffffffffffffffffff166320b2c1516040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ec2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee69190611d77565b60009182526002602052604090912080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9092169190911790555b836001019350505050610c25565b505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ab3662926040518163ffffffff1660e01b8152600401602060405180830381865afa15801561063d573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663cfb9cfba6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561063d573d6000803e3d6000fd5b60005460ff16611096576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6040517f1526fe2700000000000000000000000000000000000000000000000000000000815260048101859052600090819073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690631526fe279060240160c060405180830381865afa15801561119b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bf9190611cd6565b80519091506000866111d55782602001516111fb565b60008881526002602052604090205473ffffffffffffffffffffffffffffffffffffffff165b905061120b8282886001896113b5565b50600198975050505050505050565b6040517f1526fe2700000000000000000000000000000000000000000000000000000000815260048101849052600090819073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690631526fe279060240160c060405180830381865afa1580156112aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ce9190611cd6565b60208101518151919250906112e78282886000896113b5565b506001979650505050505050565b60005460ff1615611362576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015260640161108d565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586110e13390565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015260609060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611445573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114699190611d77565b9050611479818888888888611484565b979650505050505050565b60606000803373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146115ed576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301528916906370a0823190602401602060405180830381865afa158015611532573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115569190611c65565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152919350908816906370a0823190602401602060405180830381865afa1580156115c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ea9190611c65565b90505b84156116e9576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156116d057600080fd5b505af11580156116e4573d6000803e3d6000fd5b505050505b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a9061177f9033907f0000000000000000000000000000000000000000000000000000000000000000908b90600401611e00565b6000604051808303816000875af115801561179e573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526117e49190810190611e79565b925084156118c3576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301528981166044830152600160648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156118aa57600080fd5b505af11580156118be573d6000803e3d6000fd5b505050505b6118d18989898585896118dd565b50509695505050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146119de576040517f654a9eda00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528681166024830152858116604483015260648201859052608482018490527f0000000000000000000000000000000000000000000000000000000000000000169063654a9eda9060a401600060405180830381600087803b1580156119c157600080fd5b505af11580156119d5573d6000803e3d6000fd5b50505050611b38565b8015611a8e576040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015286811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b158015611a7557600080fd5b505af1158015611a89573d6000803e3d6000fd5b505050505b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015285811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015611b1f57600080fd5b505af1158015611b33573d6000803e3d6000fd5b505050505b505050505050565b600060208284031215611b5257600080fd5b5035919050565b8015158114611b6757600080fd5b50565b600080600060608486031215611b7f57600080fd5b83359250602084013591506040840135611b9881611b59565b809150509250925092565b60008060408385031215611bb657600080fd5b50508035926020909101359150565b60008060408385031215611bd857600080fd5b823591506020830135611bea81611b59565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160118310611c5f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b600060208284031215611c7757600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b805173ffffffffffffffffffffffffffffffffffffffff81168114611cd157600080fd5b919050565b600060c08284031215611ce857600080fd5b60405160c0810181811067ffffffffffffffff82111715611d0b57611d0b611c7e565b604052611d1783611cad565b8152611d2560208401611cad565b6020820152611d3660408401611cad565b6040820152611d4760608401611cad565b6060820152611d5860808401611cad565b608082015260a0830151611d6b81611b59565b60a08201529392505050565b600060208284031215611d8957600080fd5b6107de82611cad565b600060208284031215611da457600080fd5b81516107de81611b59565b600060208284031215611dc157600080fd5b8151601181106107de57600080fd5b60005b83811015611deb578181015183820152602001611dd3565b83811115611dfa576000848401525b50505050565b600073ffffffffffffffffffffffffffffffffffffffff8086168352808516602084015250606060408301528251806060840152611e45816080850160208701611dd0565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01691909101608001949350505050565b600060208284031215611e8b57600080fd5b815167ffffffffffffffff80821115611ea357600080fd5b818401915084601f830112611eb757600080fd5b815181811115611ec957611ec9611c7e565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715611f0f57611f0f611c7e565b81604052828152876020848701011115611f2857600080fd5b611479836020830160208801611dd056fea264697066735822122080e1032e0766b40456cf2702ec4a669a6b8db0e189e75ab6c4126faae080b85d64736f6c634300080a003360e060405234801561001057600080fd5b50604051610e17380380610e178339818101604052604081101561003357600080fd5b50805160209091015181816001600160a01b038216158061005b57506001600160a01b038116155b1561007957604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038216608081905260408051632f7a188160e01b81529051632f7a1881916004808201926020929091908290030181865afa1580156100c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e79190610106565b6001600160a01b0390811660a0521660c0525050600160005550610136565b60006020828403121561011857600080fd5b81516001600160a01b038116811461012f57600080fd5b9392505050565b60805160a05160c051610c97610180600039600081816102920152818161040601526104900152600060920152600081816102b90152818161030e0152610b460152610c976000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c8063923c1d611161005b578063923c1d6114610285578063bd90df701461028d578063c12c21c0146102b4578063ce30bbdb146102db57600080fd5b80632f7a18811461008d5780635a7b87f2146100dd5780636a4874a11461025e57806378aa73a414610266575b600080fd5b6100b47f000000000000000000000000000000000000000000000000000000000000000081565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b61025c60048036036101208110156100f457600080fd5b81019060208101813564010000000081111561010f57600080fd5b82018360208201111561012157600080fd5b8035906020019184602083028401116401000000008311171561014357600080fd5b91939092909160208101903564010000000081111561016157600080fd5b82018360208201111561017357600080fd5b8035906020019184602083028401116401000000008311171561019557600080fd5b9193909290916020810190356401000000008111156101b357600080fd5b8201836020820111156101c557600080fd5b803590602001918460208302840111640100000000831117156101e757600080fd5b91939092909160208101903564010000000081111561020557600080fd5b82018360208201111561021757600080fd5b8035906020019184602083028401116401000000008311171561023957600080fd5b91935091508035906020810135906040810135906060810135906080013561030a565b005b6100b4610402565b61026e600181565b6040805161ffff9092168252519081900360200190f35b6100b461048c565b6100b47f000000000000000000000000000000000000000000000000000000000000000081565b6100b47f000000000000000000000000000000000000000000000000000000000000000081565b6102e3600e81565b604051808260108111156102f9576102f9610c03565b815260200191505060405180910390f35b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e958b704336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381865afa158015610398573d6000803e3d6000fd5b505050506040513d60208110156103ae57600080fd5b505190506103bd818f8f6104f9565b6103c8818d8d610830565b6103d5818b8b8b8b610991565b6103e6816103e1610402565b610ab8565b6103f2816103e161048c565b5050505050505050505050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636a4874a16040518163ffffffff1660e01b8152600401602060405180830381865afa15801561046f573d6000803e3d6000fd5b505050506040513d602081101561048557600080fd5b5051919050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663923c1d616040518163ffffffff1660e01b8152600401602060405180830381865afa15801561046f573d6000803e3d6000fd5b600081815b8181101561082857600085858381811061051a5761051a610c32565b604080517f7050ccd900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c811660048301526001602483015291516020938402959095013590911694508493637050ccd993506044808301939282900301816000875af11580156105a1573d6000803e3d6000fd5b505050506040513d60208110156105b757600080fd5b5050604080517ff7c618c1000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff83169163f7c618c19160048083019260209291908290030181865afa158015610624573d6000803e3d6000fd5b505050506040513d602081101561063a57600080fd5b5051604080517f40c3544600000000000000000000000000000000000000000000000000000000815260006004820152905191955073ffffffffffffffffffffffffffffffffffffffff8316916340c35446916024808201926020929091908290030181865afa9250505080156106c357506040513d60208110156106be57600080fd5b505160015b6106cc5761081f565b8073ffffffffffffffffffffffffffffffffffffffff1663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa158015610717573d6000803e3d6000fd5b505050506040513d602081101561072d57600080fd5b5051945061073b8886610ab8565b8173ffffffffffffffffffffffffffffffffffffffff166340c3544660016040518263ffffffff1660e01b815260040180828152602001915050602060405180830381865afa9250505080156107a357506040513d602081101561079e57600080fd5b505160015b6107ac5761081d565b8073ffffffffffffffffffffffffffffffffffffffff1663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107f7573d6000803e3d6000fd5b505050506040513d602081101561080d57600080fd5b5051955061081b8987610ab8565b505b505b506001016104fe565b505050505050565b600081815b818110156108285784848281811061084f5761084f610c32565b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108b6573d6000803e3d6000fd5b505050506040513d60208110156108cc57600080fd5b505192508484828181106108e2576108e2610c32565b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c00007b0876040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801561096757600080fd5b505af115801561097b573d6000803e3d6000fd5b505050506109898684610ab8565b600101610835565b600083815b81811015610aae578484828181106109b0576109b0610c32565b9050602002013573ffffffffffffffffffffffffffffffffffffffff1692508686828181106109e1576109e1610c32565b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636b09169589856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b158015610a8457600080fd5b505af1158015610a98573d6000803e3d6000fd5b50505050610aa68884610ab8565b600101610996565b5050505050505050565b60018173ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381865afa158015610b26573d6000803e3d6000fd5b505050506040513d6020811015610b3c57600080fd5b50511115610bff577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166351e3f16083836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b158015610beb57600080fd5b505af1158015610828573d6000803e3d6000fd5b5050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea2646970667358221220e1d3a52cae085825017fa65f4505505a00eb6fda58fef20587f8561e46c541c264736f6c634300080a003360806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d00011790553480156200003a57600080fd5b506040805161018081019091526000908060c081018060018152604080518082018252600381526244414960e81b6020828101919091528301526012908201526305f5e100606082015260800160018152602001600081525081526020016040518060c001604052806002600a811115620000b957620000b962000b78565b815260408051808201825260048152635553444360e01b6020828101919091528301526006908201526305f5e100606082015260800160018152602001600081525081526020016040518060c001604052806003600a81111562000121576200012162000b78565b815260408051808201825260048152630ae8aa8960e31b602082810191909152830152601290820152644a817c8000606082015260800160028152602001600081525081526020016040518060c001604052806004600a8111156200018a576200018a62000b78565b815260408051808201825260048152634c494e4b60e01b6020828101919091528301526012908201526359682f00606082015260800160018152602001600081525081526020016040518060c001604052806005600a811115620001f257620001f262000b78565b815260408051808201825260048152631554d11560e21b602082810191909152830152601290820152633b023380606082015260800160018152602001600081525081526020016040518060c001604052806006600a8111156200025a576200025a62000b78565b815260408051808201825260058152640e6e88aa8960db1b602082810191909152830152601290820152644cd588640060608201526080016003815260200160009052905260408051610140810190915290915060009080608081018060078152602001604051806040016040528060048152602001636344414960e01b8152508152602001601260ff1681526020016305f5e100815260200160048081111562000309576200030962000b78565b8152602001600181525081526020016040518060c001604052806008600a81111562000339576200033962000b78565b81526040805180820182526005815264635553444360d81b6020828101919091528301526006908201526305f5e100606082015260800160048152602001600281525081526020016040518060c001604052806009600a811115620003a257620003a262000b78565b8152604080518082018252600581526418d554d11560da1b602082810191909152830152601290820152633b023380606082015260800160048152602001600581525081526020016040518060c00160405280600a808111156200040a576200040a62000b78565b81526040805180820182526005815264634c494e4b60d81b6020828101919091528301526012908201526359682f00606082015260800160048152602001600490529052905060005b600681101562000496576200048183826006811062000476576200047662000b8e565b6020020151620004db565b806200048d8162000ba4565b91505062000453565b5060005b6004811015620004d257620004bd82826004811062000476576200047662000b8e565b80620004c98162000ba4565b9150506200049a565b50505062000d14565b6000600282608001516004811115620004f857620004f862000b78565b14156200054e576040516200050d9062000a8c565b604051809103906000f0801580156200052a573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b03831617905590506200071e565b60038260800151600481111562000569576200056962000b78565b1415620005a4576040516200057e9062000a9a565b604051809103906000f0801580156200059b573d6000803e3d6000fd5b5090506200071e565b600182608001516004811115620005bf57620005bf62000b78565b1415620005f157816020015182602001518360400151604051620005e39062000aa8565b6200057e9392919062000c1e565b6004826080015160048111156200060c576200060c62000b78565b1415620006be576000600260008460a00151600a81111562000632576200063262000b78565b600a81111562000646576200064662000b78565b815260200190815260200160002060009054906101000a90046001600160a01b0316905082602001518360200151846040015183604051620006889062000ab6565b62000697949392919062000c5b565b604051809103906000f080158015620006b4573d6000803e3d6000fd5b509150506200071e565b60405162461bcd60e51b815260206004820152602b60248201527f74657374546f6b656e53756974653a204372656174696e6720756e6b6e6f776e60448201526a20746f6b656e207479706560a81b606482015260840160405180910390fd5b60005460208301516040516318caf8e360e31b8152620100009092046001600160a01b03169163c657c718916200075b9185919060040162000ca9565b600060405180830381600087803b1580156200077657600080fd5b505af11580156200078b573d6000803e3d6000fd5b50505050600082606001516008604051620007a69062000ac4565b91825260ff166020820152604001604051809103906000f080158015620007d1573d6000803e3d6000fd5b50905081600260008560000151600a811115620007f257620007f262000b78565b600a81111562000806576200080662000b78565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055508260600151600560008560000151600a8111156200085a576200085a62000b78565b600a8111156200086e576200086e62000b78565b8152602080820192909252604090810160009081209390935585516001600160a01b03861684526008909252909120805460ff1916600183600a811115620008ba57620008ba62000b78565b02179055508260800151600360008560000151600a811115620008e157620008e162000b78565b600a811115620008f557620008f562000b78565b81526020810191909152604001600020805460ff1916600183600481111562000922576200092262000b78565b0217905550604080518082019091526001600160a01b0380841682528281166020808401918252600780546001810182556000918252945160029095027fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688810180549686166001600160a01b031997881617905592517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c689909301805493909416929094169190911790915584015184519091600491600a811115620009eb57620009eb62000b78565b600a811115620009ff57620009ff62000b78565b8152602001908152602001600020908051906020019062000a2292919062000ad2565b5080600660008560000151600a81111562000a415762000a4162000b78565b600a81111562000a555762000a5562000b78565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550505050565b610ab1806200285183390190565b611224806200330283390190565b611758806200452683390190565b6117098062005c7e83390190565b6106ca806200738783390190565b82805462000ae09062000cd7565b90600052602060002090601f01602090048101928262000b04576000855562000b4f565b82601f1062000b1f57805160ff191683800117855562000b4f565b8280016001018555821562000b4f579182015b8281111562000b4f57825182559160200191906001019062000b32565b5062000b5d92915062000b61565b5090565b5b8082111562000b5d576000815560010162000b62565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600060001982141562000bc757634e487b7160e01b600052601160045260246000fd5b5060010190565b6000815180845260005b8181101562000bf65760208185018101518683018201520162000bd8565b8181111562000c09576000602083870101525b50601f01601f19169290920160200192915050565b60608152600062000c33606083018662000bce565b828103602084015262000c47818662000bce565b91505060ff83166040830152949350505050565b60808152600062000c70608083018762000bce565b828103602084015262000c84818762000bce565b60ff95909516604084015250506001600160a01b039190911660609091015292915050565b6001600160a01b038316815260406020820181905260009062000ccf9083018462000bce565b949350505050565b600181811c9082168062000cec57607f821691505b6020821081141562000d0e57634e487b7160e01b600052602260045260246000fd5b50919050565b611b2d8062000d246000396000f3fe6080604052600436106101635760003560e01c80638eb86e8b116100c0578063c6c3bbe611610074578063d051a62211610059578063d051a62214610490578063eebab8ef146104b0578063fa7626d4146104d057600080fd5b8063c6c3bbe614610433578063c74912d21461045357600080fd5b80639b140a85116100a55780639b140a85146103e6578063b36ba20814610406578063ba414fa61461040e57600080fd5b80638eb86e8b1461038357806398cdaadf146103a357600080fd5b80636a72bde71161011757806388327863116100fc578063883278631461030857806388f776a2146103365780638a3177a31461035657600080fd5b80636a72bde7146102c45780636ca42ae3146102e657600080fd5b8063440864fa11610148578063440864fa146102025780634b57b0be1461022f57806367b426451461028157600080fd5b806304bc3b1c1461016f57806310c7f0b9146101b557600080fd5b3661016a57005b600080fd5b34801561017b57600080fd5b5061019f61018a3660046116f6565b60086020526000908152604090205460ff1681565b6040516101ac9190611742565b60405180910390f35b3480156101c157600080fd5b506101d56101d036600461175c565b6104ea565b6040805173ffffffffffffffffffffffffffffffffffffffff9384168152929091166020830152016101ac565b34801561020e57600080fd5b5061022261021d366004611784565b610530565b6040516101ac91906117cb565b34801561023b57600080fd5b5060015461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101ac565b34801561028d57600080fd5b5061025c61029c366004611784565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156102d057600080fd5b506102e46102df36600461181c565b6105ca565b005b3480156102f257600080fd5b506102fb610730565b6040516101ac919061186b565b34801561031457600080fd5b506103286103233660046118d4565b6107b5565b6040519081526020016101ac565b34801561034257600080fd5b506102e461035136600461190b565b610888565b34801561036257600080fd5b50610328610371366004611784565b60056020526000908152604090205481565b34801561038f57600080fd5b506102e461039e366004611954565b6108b9565b3480156103af57600080fd5b5061025c6103be366004611784565b60066020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156103f257600080fd5b506102e4610401366004611993565b610a73565b6102e4610b22565b34801561041a57600080fd5b50610423610ba0565b60405190151581526020016101ac565b34801561043f57600080fd5b506102e461044e3660046119b3565b610d00565b34801561045f57600080fd5b5061048361046e366004611784565b60036020526000908152604090205460ff1681565b6040516101ac91906119d3565b34801561049c57600080fd5b506103286104ab36600461190b565b610daf565b3480156104bc57600080fd5b506102e46104cb366004611954565b610e8b565b3480156104dc57600080fd5b506000546104239060ff1681565b600781815481106104fa57600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff91821692501682565b60046020526000908152604090208054610549906119e7565b80601f0160208091040260200160405190810160405280929190818152602001828054610575906119e7565b80156105c25780601f10610597576101008083540402835291602001916105c2565b820191906000526020600020905b8154815290600101906020018083116105a557829003601f168201915b505050505081565b6000546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152620100009092049091169063ca669fa790602401600060405180830381600087803b15801561063e57600080fd5b505af1158015610652573d6000803e3d6000fd5b505050506002600085600a81111561066c5761066c611713565b600a81111561067d5761067d611713565b8152602081019190915260409081016000205490517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490529091169063095ea7b3906044016020604051808303816000875af1158015610705573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107299190611a3b565b5050505050565b60606007805480602002602001604051908101604052809291908181526020016000905b828210156107ac5760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff908116835260019182015416828401529083529092019101610754565b50505050905090565b60006002600084600a8111156107cd576107cd611713565b600a8111156107de576107de611713565b8152602081019190915260409081016000205490517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152909116906370a0823190602401602060405180830381865afa15801561085d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108819190611a5d565b9392505050565b6108b48383837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6105ca565b505050565b60016003600085600a8111156108d1576108d1611713565b600a8111156108e2576108e2611713565b815260208101919091526040016000205460ff16600481111561090757610907611713565b14610999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f74657374546f6b656e53756974653a20547279696e6720746f206275726e206160448201527f206e6f6e2d6e6f726d616c20746f6b656e00000000000000000000000000000060648201526084015b60405180910390fd5b6002600084600a8111156109af576109af611713565b600a8111156109c0576109c0611713565b8152602081019190915260409081016000205490517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526024820184905290911690639dc29fac906044015b6020604051808303816000875af1158015610a49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6d9190611a3b565b50505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604081205460ff169081600a811115610aaf57610aaf611713565b1415610b17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f20746f6b656e2077697468207375636820616464726573730000000000006044820152606401610990565b610a6d818484610888565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015610b8c57600080fd5b505af1158015610729573d6000803e3d6000fd5b60008054610100900460ff1615610bc05750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610cfb5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610c65917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc491608001611a76565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052610c9d91611abe565b6000604051808303816000865af19150503d8060008114610cda576040519150601f19603f3d011682016040523d82523d6000602084013e610cdf565b606091505b5091505080806020019051810190610cf79190611a3b565b9150505b919050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604081205460ff169081600a811115610d3c57610d3c611713565b1415610da4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f20746f6b656e2077697468207375636820616464726573730000000000006044820152606401610990565b610a6d818484610e8b565b60006002600085600a811115610dc757610dc7611713565b600a811115610dd857610dd8611713565b8152602081019190915260409081016000205490517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301529091169063dd62ed3e90604401602060405180830381865afa158015610e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e839190611a5d565b949350505050565b60026003600085600a811115610ea357610ea3611713565b600a811115610eb457610eb4611713565b815260208101919091526040016000205460ff166004811115610ed957610ed9611713565b1415610ff6576000546040517fc88a5e6d000000000000000000000000000000000000000000000000000000008152306004820152602481018390526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c88a5e6d90604401600060405180830381600087803b158015610f5657600080fd5b505af1158015610f6a573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015610fd857600080fd5b505af1158015610fec573d6000803e3d6000fd5b505050505061163c565b600380600085600a81111561100d5761100d611713565b600a81111561101e5761101e611713565b815260208101919091526040016000205460ff16600481111561104357611043611713565b14156111aa576000546040517fc88a5e6d000000000000000000000000000000000000000000000000000000008152306004820152602481018390526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c88a5e6d90604401600060405180830381600087803b1580156110c057600080fd5b505af11580156110d4573d6000803e3d6000fd5b505050506002600084600a8111156110ee576110ee611713565b600a8111156110ff576110ff611713565b8152602081019190915260409081016000205490517fa1903eab00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a1903eab90839060240160206040518083038185885af115801561117f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906111a49190611a5d565b5061163c565b60046003600085600a8111156111c2576111c2611713565b600a8111156111d3576111d3611713565b815260208101919091526040016000205460ff1660048111156111f8576111f8611713565b141561148f5760006002600085600a81111561121657611216611713565b600a81111561122757611227611713565b815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c49190611ada565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600860205260409020549091506112fb9060ff163084610e8b565b8073ffffffffffffffffffffffffffffffffffffffff1663095ea7b36002600087600a81111561132d5761132d611713565b600a81111561133e5761133e611713565b81526020810191909152604090810160002054905160e083901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602481018590526044016020604051808303816000875af11580156113c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e69190611a3b565b506002600085600a8111156113fd576113fd611713565b600a81111561140e5761140e611713565b8152602081019190915260409081016000205490517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810184905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f1990604401600060405180830381600087803b158015610fd857600080fd5b60016003600085600a8111156114a7576114a7611713565b600a8111156114b8576114b8611713565b815260208101919091526040016000205460ff1660048111156114dd576114dd611713565b14156115b4576002600084600a8111156114f9576114f9611713565b600a81111561150a5761150a611713565b8152602081019190915260409081016000205490517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f19906044016020604051808303816000875af1158015611590573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a49190611a3b565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f74657374546f6b656e53756974653a20547279696e6720746f207472616e736660448201527f657220756e6b6e6f776e20746f6b656e000000000000000000000000000000006064820152608401610990565b6002600084600a81111561165257611652611713565b600a81111561166357611663611713565b8152602081019190915260409081016000205490517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490529091169063a9059cbb90604401610a2a565b73ffffffffffffffffffffffffffffffffffffffff811681146116f357600080fd5b50565b60006020828403121561170857600080fd5b8135610881816116d1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60208101600b831061175657611756611713565b91905290565b60006020828403121561176e57600080fd5b5035919050565b8035600b8110610cfb57600080fd5b60006020828403121561179657600080fd5b61088182611775565b60005b838110156117ba5781810151838201526020016117a2565b83811115610a6d5750506000910152565b60208152600082518060208401526117ea81604085016020870161179f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000806080858703121561183257600080fd5b61183b85611775565b9350602085013561184b816116d1565b9250604085013561185b816116d1565b9396929550929360600135925050565b602080825282518282018190526000919060409081850190868401855b828110156118c7578151805173ffffffffffffffffffffffffffffffffffffffff90811686529087015116868501529284019290850190600101611888565b5091979650505050505050565b600080604083850312156118e757600080fd5b6118f083611775565b91506020830135611900816116d1565b809150509250929050565b60008060006060848603121561192057600080fd5b61192984611775565b92506020840135611939816116d1565b91506040840135611949816116d1565b809150509250925092565b60008060006060848603121561196957600080fd5b61197284611775565b92506020840135611982816116d1565b929592945050506040919091013590565b6000806000606084860312156119a857600080fd5b8335611929816116d1565b6000806000606084860312156119c857600080fd5b8335611972816116d1565b602081016005831061175657611756611713565b600181811c908216806119fb57607f821691505b60208210811415611a35577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600060208284031215611a4d57600080fd5b8151801515811461088157600080fd5b600060208284031215611a6f57600080fd5b5051919050565b7fffffffff000000000000000000000000000000000000000000000000000000008316815260008251611ab081600485016020870161179f565b919091016004019392505050565b60008251611ad081846020870161179f565b9190910192915050565b600060208284031215611aec57600080fd5b8151610881816116d156fea264697066735822122010fe735ed069aca27931edce4ba2ff14ec7886bf21b0eea685a884f9200fb49e64736f6c634300080a003360c0604052600d60808190526c2bb930b83832b21022ba3432b960991b60a090815261002e916000919061007a565b50604080518082019091526004808252630ae8aa8960e31b602090920191825261005a9160019161007a565b506002805460ff1916601217905534801561007457600080fd5b5061014e565b82805461008690610113565b90600052602060002090601f0160209004810192826100a857600085556100ee565b82601f106100c157805160ff19168380011785556100ee565b828001600101855582156100ee579182015b828111156100ee5782518255916020019190600101906100d3565b506100fa9291506100fe565b5090565b5b808211156100fa57600081556001016100ff565b600181811c9082168061012757607f821691505b6020821081141561014857634e487b7160e01b600052602260045260246000fd5b50919050565b6109548061015d6000396000f3fe6080604052600436106100cb5760003560e01c806340c10f1911610074578063a9059cbb1161004e578063a9059cbb14610225578063d0e30db014610245578063dd62ed3e1461024d57600080fd5b806340c10f19146101c357806370a08231146101e357806395d89b411461021057600080fd5b806323b872dd116100a557806323b872dd146101575780632e1a7d4d14610177578063313ce5671461019757600080fd5b806306fdde03146100df578063095ea7b31461010a57806318160ddd1461013a57600080fd5b366100da576100d8610285565b005b600080fd5b3480156100eb57600080fd5b506100f46102e0565b6040516101019190610703565b60405180910390f35b34801561011657600080fd5b5061012a61012536600461079f565b61036e565b6040519015158152602001610101565b34801561014657600080fd5b50475b604051908152602001610101565b34801561016357600080fd5b5061012a6101723660046107c9565b6103e7565b34801561018357600080fd5b506100d8610192366004610805565b6105fe565b3480156101a357600080fd5b506002546101b19060ff1681565b60405160ff9091168152602001610101565b3480156101cf57600080fd5b506100d86101de36600461079f565b6106a4565b3480156101ef57600080fd5b506101496101fe36600461081e565b60036020526000908152604090205481565b34801561021c57600080fd5b506100f46106e2565b34801561023157600080fd5b5061012a61024036600461079f565b6106ef565b6100d8610285565b34801561025957600080fd5b50610149610268366004610839565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102a490849061089b565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102ed906108b3565b80601f0160208091040260200160405190810160405280929190818152602001828054610319906108b3565b80156103665780601f1061033b57610100808354040283529160200191610366565b820191906000526020600020905b81548152906001019060200180831161034957829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103d69086815260200190565b60405180910390a350600192915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561041957600080fd5b73ffffffffffffffffffffffffffffffffffffffff8416331480159061048f575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105175773ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020548211156104d157600080fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915281208054849290610511908490610907565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061054c908490610907565b909155505073ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260408120805484929061058690849061089b565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516105ec91815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561061a57600080fd5b3360009081526003602052604081208054839290610639908490610907565b9091555050604051339082156108fc029083906000818181858888f1935050505015801561066b573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260036020526040812080548392906106d990849061089b565b90915550505050565b600180546102ed906108b3565b60006106fc3384846103e7565b9392505050565b600060208083528351808285015260005b8181101561073057858101830151858201604001528201610714565b81811115610742576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461079a57600080fd5b919050565b600080604083850312156107b257600080fd5b6107bb83610776565b946020939093013593505050565b6000806000606084860312156107de57600080fd5b6107e784610776565b92506107f560208501610776565b9150604084013590509250925092565b60006020828403121561081757600080fd5b5035919050565b60006020828403121561083057600080fd5b6106fc82610776565b6000806040838503121561084c57600080fd5b61085583610776565b915061086360208401610776565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156108ae576108ae61086c565b500190565b600181811c908216806108c757607f821691505b60208210811415610901577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000828210156109195761091961086c565b50039056fea26469706673582212206ec943fa4e3b70d8fca6c25b6aa26fa18e8f8952ce3bc4d5afcb443bf3097c0564736f6c634300080a003360806040526000600255600060035534801561001a57600080fd5b506111fa8061002a6000396000f3fe60806040526004361061016e5760003560e01c80637a28fb88116100cb578063bdd17e1c1161007f578063dd62ed3e11610059578063dd62ed3e146103ee578063ee7a7c0414610441578063f5eb42dc1461046157600080fd5b8063bdd17e1c146103ad578063cdb9a21c146103c3578063d5002f2e146103d957600080fd5b8063a1903eab116100b0578063a1903eab1461035a578063a457c2d71461036d578063a9059cbb1461038d57600080fd5b80637a28fb88146102f457806395d89b411461031457600080fd5b806323b872dd1161012257806337cfdaca1161010757806337cfdaca1461020d57806339509351146102b457806370a08231146102d457600080fd5b806323b872dd14610278578063313ce5671461029857600080fd5b806318160ddd1161015357806318160ddd1461020d578063192084511461023057806322301f6e1461025057600080fd5b806306fdde0314610185578063095ea7b3146101dd57600080fd5b366101805761017d6000610481565b50005b600080fd5b34801561019157600080fd5b5060408051808201909152601781527f4c6971756964207374616b656420457468657220322e3000000000000000000060208201525b6040516101d49190610f63565b60405180910390f35b3480156101e957600080fd5b506101fd6101f8366004610fff565b610545565b60405190151581526020016101d4565b34801561021957600080fd5b5061022261055b565b6040519081526020016101d4565b34801561023c57600080fd5b5061022261024b366004611029565b61056b565b34801561025c57600080fd5b5061027661026b366004611042565b600391909155600255565b005b34801561028457600080fd5b506101fd610293366004611064565b6105ab565b3480156102a457600080fd5b50604051601281526020016101d4565b3480156102c057600080fd5b506101fd6102cf366004610fff565b610696565b3480156102e057600080fd5b506102226102ef3660046110a0565b6106d9565b34801561030057600080fd5b5061022261030f366004611029565b61070e565b34801561032057600080fd5b5060408051808201909152600581527f737445544800000000000000000000000000000000000000000000000000000060208201526101c7565b6102226103683660046110a0565b61073a565b34801561037957600080fd5b506101fd610388366004610fff565b610745565b34801561039957600080fd5b506101fd6103a8366004610fff565b6107f9565b3480156103b957600080fd5b5061022260035481565b3480156103cf57600080fd5b5061022260025481565b3480156103e557600080fd5b50610222610806565b3480156103fa57600080fd5b506102226104093660046110bb565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b34801561044d57600080fd5b5061027661045c366004610fff565b610811565b34801561046d57600080fd5b5061022261047c3660046110a0565b61081f565b60003334806104f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f5a45524f5f4445504f534954000000000000000000000000000000000000000060448201526064015b60405180910390fd5b60006104fc8261056b565b9050806105065750805b8160036000828254610518919061111d565b909155506105289050838261084a565b61053383838761093b565b61053d8382610992565b949350505050565b60006105523384846109ea565b50600192915050565b600061056660035490565b905090565b60008061057760035490565b9050806105875750600092915050565b6105a48161059e61059760025490565b8690610b52565b90610b5e565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001602090815260408083203384529091528120548281101561066c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f5452414e534645525f414d4f554e545f455843454544535f414c4c4f57414e4360448201527f450000000000000000000000000000000000000000000000000000000000000060648201526084016104e8565b610677858585610b6a565b61068b85336106868487610bef565b6109ea565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916105529185906106869086610bfb565b73ffffffffffffffffffffffffffffffffffffffff81166000908152602081905260408120546107089061070e565b92915050565b60008061071a60025490565b90508061072a5750600092915050565b6105a48161059e61059760035490565b600061070882610481565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156107e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4445435245415345445f414c4c4f57414e43455f42454c4f575f5a45524f000060448201526064016104e8565b6107ef33856106868487610bef565b5060019392505050565b6000610552338484610b6a565b600061056660025490565b61081b8282610c07565b5050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040812054610708565b73ffffffffffffffffffffffffffffffffffffffff82166108c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4d494e545f544f5f5448455f5a45524f5f41444452455353000000000000000060448201526064016104e8565b80600260008282546108d9919061111d565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205461090e9082610bfb565b73ffffffffffffffffffffffffffffffffffffffff90921660009081526020819052604090209190915550565b6040805183815273ffffffffffffffffffffffffffffffffffffffff83811660208301528516917fed8dd430b1e4bba98e943dc5b157cf7b54d9e12916d6c474ff5733a95001d03b910160405180910390a2505050565b73ffffffffffffffffffffffffffffffffffffffff821660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6109d58461070e565b60405190815260200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff8316610a67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f415050524f56455f46524f4d5f5a45524f5f414444524553530000000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff8216610ae4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f415050524f56455f544f5f5a45524f5f4144445245535300000000000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006105a48284611135565b60006105a48284611172565b6000610b758261056b565b9050610b82848483610d64565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610be191815260200190565b60405180910390a350505050565b60006105a482846111ad565b60006105a4828461111d565b73ffffffffffffffffffffffffffffffffffffffff8216610c84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4255524e5f46524f4d5f5448455f5a45524f5f4144445245535300000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205480821115610d14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4255524e5f414d4f554e545f455843454544535f42414c414e4345000000000060448201526064016104e8565b8160026000828254610d2691906111ad565b90915550610d3690508183610bef565b73ffffffffffffffffffffffffffffffffffffffff9093166000908152602081905260409020929092555050565b73ffffffffffffffffffffffffffffffffffffffff8316610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f5452414e534645525f46524f4d5f5448455f5a45524f5f41444452455353000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff8216610e5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f5452414e534645525f544f5f5448455f5a45524f5f414444524553530000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205480821115610eee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5452414e534645525f414d4f554e545f455843454544535f42414c414e43450060448201526064016104e8565b610ef88183610bef565b73ffffffffffffffffffffffffffffffffffffffff8086166000908152602081905260408082209390935590851681522054610f349083610bfb565b73ffffffffffffffffffffffffffffffffffffffff909316600090815260208190526040902092909255505050565b600060208083528351808285015260005b81811015610f9057858101830151858201604001528201610f74565b81811115610fa2576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ffa57600080fd5b919050565b6000806040838503121561101257600080fd5b61101b83610fd6565b946020939093013593505050565b60006020828403121561103b57600080fd5b5035919050565b6000806040838503121561105557600080fd5b50508035926020909101359150565b60008060006060848603121561107957600080fd5b61108284610fd6565b925061109060208501610fd6565b9150604084013590509250925092565b6000602082840312156110b257600080fd5b6105a482610fd6565b600080604083850312156110ce57600080fd5b6110d783610fd6565b91506110e560208401610fd6565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611130576111306110ee565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561116d5761116d6110ee565b500290565b6000826111a8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000828210156111bf576111bf6110ee565b50039056fea2646970667358221220a5b4f31162ba2b8b3424cef84b31ef91d05a825243602b5fdf758ffb49b8246364736f6c634300080a003360a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a003360c06040523480156200001157600080fd5b506040516200170938038062001709833981016040819052620000349162000266565b8351849084906200004d906003906020850190620000f3565b50805162000063906004906020840190620000f3565b505050620000806200007a6200009d60201b60201c565b620000a1565b60ff9091166080526001600160a01b031660a05250620003479050565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b82805462000101906200030a565b90600052602060002090601f01602090048101928262000125576000855562000170565b82601f106200014057805160ff191683800117855562000170565b8280016001018555821562000170579182015b828111156200017057825182559160200191906001019062000153565b506200017e92915062000182565b5090565b5b808211156200017e576000815560010162000183565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c157600080fd5b81516001600160401b0380821115620001de57620001de62000199565b604051601f8301601f19908116603f0116810190828211818310171562000209576200020962000199565b816040528381526020925086838588010111156200022657600080fd5b600091505b838210156200024a57858201830151818301840152908201906200022b565b838211156200025c5760008385830101525b9695505050505050565b600080600080608085870312156200027d57600080fd5b84516001600160401b03808211156200029557600080fd5b620002a388838901620001af565b95506020870151915080821115620002ba57600080fd5b50620002c987828801620001af565b935050604085015160ff81168114620002e157600080fd5b60608601519092506001600160a01b0381168114620002ff57600080fd5b939692955090935050565b600181811c908216806200031f57607f821691505b602082108114156200034157634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05161138e6200037b600039600081816101f70152818161041f0152610600015260006101a2015261138e6000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80636f307dc3116100b257806395d89b4111610081578063a9059cbb11610066578063a9059cbb146102b5578063dd62ed3e146102c8578063f2fde38b1461030e57600080fd5b806395d89b411461029a578063a457c2d7146102a257600080fd5b80636f307dc3146101f257806370a082311461023e578063715018a6146102745780638da5cb5b1461027c57600080fd5b806323b872dd116100ee57806323b872dd14610188578063313ce5671461019b57806339509351146101cc57806340c10f19146101df57600080fd5b806306fdde0314610120578063095ea7b31461013e57806318160ddd146101615780631e9a695014610173575b600080fd5b610128610321565b604051610135919061112d565b60405180910390f35b61015161014c3660046111c9565b6103b3565b6040519015158152602001610135565b6002545b604051908152602001610135565b6101866101813660046111c9565b6103c9565b005b6101516101963660046111f3565b610491565b60405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610135565b6101516101da3660046111c9565b61057c565b6101866101ed3660046111c9565b6105c5565b6102197f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b61016561024c36600461122f565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610186610691565b60055473ffffffffffffffffffffffffffffffffffffffff16610219565b61012861071e565b6101516102b03660046111c9565b61072d565b6101516102c33660046111c9565b610805565b6101656102d6366004611251565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b61018661031c36600461122f565b610812565b60606003805461033090611284565b80601f016020809104026020016040519081016040528092919081815260200182805461035c90611284565b80156103a95780601f1061037e576101008083540402835291602001916103a9565b820191906000526020600020905b81548152906001019060200180831161038c57829003601f168201915b5050505050905090565b60006103c0338484610942565b50600192915050565b6103d33382610af5565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015610468573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048c91906112d8565b505050565b600061049e848484610ce2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6105718533858403610942565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916103c09185906105c0908690611329565b610942565b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906323b872dd906064016020604051808303816000875af115801561065e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068291906112d8565b5061068d8282610f96565b5050565b60055473ffffffffffffffffffffffffffffffffffffffff163314610712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161055b565b61071c60006110b6565b565b60606004805461033090611284565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156107ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161055b565b6107fb3385858403610942565b5060019392505050565b60006103c0338484610ce2565b60055473ffffffffffffffffffffffffffffffffffffffff163314610893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161055b565b73ffffffffffffffffffffffffffffffffffffffff8116610936576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161055b565b61093f816110b6565b50565b73ffffffffffffffffffffffffffffffffffffffff83166109e4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff8216610a87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8216610b98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015610c4e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290610c8a908490611341565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff8216610e28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610ede576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610f22908490611329565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f8891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161055b565b80600260008282546110259190611329565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152602081905260408120805483929061105f908490611329565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208083528351808285015260005b8181101561115a5785810183015185820160400152820161113e565b8181111561116c576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146111c457600080fd5b919050565b600080604083850312156111dc57600080fd5b6111e5836111a0565b946020939093013593505050565b60008060006060848603121561120857600080fd5b611211846111a0565b925061121f602085016111a0565b9150604084013590509250925092565b60006020828403121561124157600080fd5b61124a826111a0565b9392505050565b6000806040838503121561126457600080fd5b61126d836111a0565b915061127b602084016111a0565b90509250929050565b600181811c9082168061129857607f821691505b602082108114156112d2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156112ea57600080fd5b8151801515811461124a57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561133c5761133c6112fa565b500190565b600082821015611353576113536112fa565b50039056fea26469706673582212203a6db30cd3c097921df4156794aa7973eb848711deeb2cffd7c54a9df1fdb0a564736f6c634300080a003360a060405234801561001057600080fd5b506040516106ca3803806106ca83398101604081905261002f9161006c565b60009190915560ff166080526001805460506001600160501b031991821681179092556004805490911690911790554260028190556003556100a2565b6000806040838503121561007f57600080fd5b82519150602083015160ff8116811461009757600080fd5b809150509250929050565b60805161060e6100bc600039600060d3015261060e6000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80639a6fc8f511610081578063d62ada111161005b578063d62ada11146102dc578063f7a30806146102f4578063feaf968c1461030757600080fd5b80639a6fc8f5146101cd578063bd18ad531461023a578063cd653afc1461024d57600080fd5b806354fd4d50116100b257806354fd4d501461012d57806367e8d83d1461013c5780637284e4161461018e57600080fd5b8063313ce567146100ce5780633fd0875f1461010c575b600080fd5b6100f57f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020015b60405180910390f35b6004546a0100000000000000000000900460ff166040516101039190610441565b60405160018152602001610103565b61018c61014a366004610482565b600480549115156c01000000000000000000000000027fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff909216919091179055565b005b604080518082018252600c81527f7072696365206f7261636c6500000000000000000000000000000000000000006020820152905161010391906104ab565b6102036101db36600461053d565b60015460005460025460035460045469ffffffffffffffffffff948516941691939590929450565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610103565b61018c610248366004610558565b61030f565b61018c61025b366004610579565b6001805469ffffffffffffffffffff9586167fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090911617905560029290925560035560048054919092167fffffffffffffffffffffffffffffffffffffffff00ff00000000000000000000909116176b020000000000000000000000179055565b6102e461035f565b6040519015158152602001610103565b61018c6103023660046105bf565b600055565b610203610385565b600480548291907fffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff166b01000000000000000000000083600281111561035757610357610412565b021790555050565b600454600090610380906b010000000000000000000000900460ff166103d6565b905090565b60008060008060006004600c9054906101000a900460ff16156103a757600080fd5b505060015460005460025460035460045469ffffffffffffffffffff9485169893975091955093509190911690565b600060028260028111156103ec576103ec610412565b14156103f757600080fd5b600182600281111561040b5761040b610412565b1492915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016006831061047c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561049457600080fd5b813580151581146104a457600080fd5b9392505050565b600060208083528351808285015260005b818110156104d8578581018301518582016040015282016104bc565b818111156104ea576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803569ffffffffffffffffffff8116811461053857600080fd5b919050565b60006020828403121561054f57600080fd5b6104a48261051e565b60006020828403121561056a57600080fd5b8135600381106104a457600080fd5b6000806000806080858703121561058f57600080fd5b6105988561051e565b935060208501359250604085013591506105b46060860161051e565b905092959194509250565b6000602082840312156105d157600080fd5b503591905056fea264697066735822122014874f7a973b86501c4c1a8be32490fe902c8f088ee234d25f9b2497e19f9e5264736f6c634300080a003360806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d00011790553480156200003a57600080fd5b5060405162031ed638038062031ed68339810160408190526200005d91620015e8565b81816040516200006d9062001595565b604051809103906000f0801580156200008a573d6000803e3d6000fd5b5050600180546001600160a01b0319166001600160a01b038416908117909155604080516325abd85f60e11b81529051634b57b0be916004808201926020929091908290030181865afa158015620000e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200010c91906200162a565b73c4375b7de8af5a38a93548eb8453a498222c4ff26040516200012f90620015a3565b6001600160a01b03928316815291166020820152604001604051809103906000f08015801562000163573d6000803e3d6000fd5b50600380546001600160a01b0319166001600160a01b039290921691821790556040805163de28735960e01b8152905163de287359916004808201926020929091908290030181865afa158015620001bf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e591906200162a565b604051634910832f60e01b81527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526001600160a01b039190911690634910832f90602401600060405180830381600087803b1580156200023d57600080fd5b505af115801562000252573d6000803e3d6000fd5b50505050600360009054906101000a90046001600160a01b03166001600160a01b031663de2873596040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d091906200162a565b60035460405163f2fde38b60e01b81526001600160a01b03918216600482015291169063f2fde38b90602401600060405180830381600087803b1580156200031757600080fd5b505af11580156200032c573d6000803e3d6000fd5b505060035460015460408051636ca42ae360e01b815290516001600160a01b039384169550638874ff1f94509190921691636ca42ae39160048083019260009291908290030181865afa15801562000388573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620003b29190810190620016c5565b6040518263ffffffff1660e01b8152600401620003d09190620017b6565b600060405180830381600087803b158015620003eb57600080fd5b505af115801562000400573d6000803e3d6000fd5b50505050600360009054906101000a90046001600160a01b03166001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000458573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200047e91906200162a565b600280546001600160a01b0319166001600160a01b039290921691821790556040805163120d150d60e31b81529051639068a868916004808201926020929091908290030181865afa158015620004d9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004ff91906200162a565b600480546001600160a01b0319166001600160a01b0392831617815560025460408051631f94a27560e31b81529051919093169263fca513a892818101926020929091908290030181865afa1580156200055d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200058391906200162a565b600880546001600160a01b0319166001600160a01b0392831617905560025460408051630873769560e01b81529051919092169163087376959160048083019260209291908290030181865afa158015620005e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200060891906200162a565b600780546001600160a01b0319166001600160a01b039283161790556002546040805163c513c9bb60e01b81529051919092169163c513c9bb9160048083019260209291908290030181865afa15801562000667573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200068d91906200162a565b600680546001600160a01b0319166001600160a01b039283161790556001546040516367b4264560e01b81529116906367b4264590620006d29084906004016200184d565b602060405180830381865afa158015620006f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200071691906200162a565b600980546001600160a01b0319166001600160a01b0392831617905560035460408051630a55006360e21b815290519190921691632954018c9160048083019260209291908290030181865afa15801562000775573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200079b91906200162a565b6009546040516001600160a01b0390911690620007b890620015b2565b6001600160a01b03928316815291166020820152604001604051809103906000f080158015620007ec573d6000803e3d6000fd5b50600580546001600160a01b0319166001600160a01b039283169081179091556001549091169063eebab8ef90839062000825620011ec565b6200083290600a62001879565b6040518463ffffffff1660e01b815260040162000852939291906200189b565b600060405180830381600087803b1580156200086d57600080fd5b505af115801562000882573d6000803e3d6000fd5b505060065460055460405163d914cd4b60e01b81526001600160a01b0391821660048201529116925063d914cd4b9150602401600060405180830381600087803b158015620008d057600080fd5b505af1158015620008e5573d6000803e3d6000fd5b5050600f80546001600160801b031916670de0b6b3a76400001790555062000911925050620011ec9050565b6200091e90600a62001879565b600f80546001600160801b03908116600160801b9382168402818117938490556040805160a0810182529184169092178152939092041660208301526000919081016200096b84620012ab565b815260006020820181905260409182018190526005549151929350916001600160a01b039091169083908390620009a290620015c0565b620009b093929190620018c5565b604051809103906000f080158015620009cd573d6000803e3d6000fd5b509050806001600160a01b031663c12c21c06040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a0f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a3591906200162a565b600b60006101000a8154816001600160a01b0302191690836001600160a01b03160217905550806001600160a01b0316632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a9a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ac091906200162a565b600c60006101000a8154816001600160a01b0302191690836001600160a01b03160217905550806001600160a01b031663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000b25573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b4b91906200162a565b600d80546001600160a01b0319166001600160a01b03928316179055600654600b5460405163e26b2f6360e01b8152908316600482015291169063e26b2f6390602401600060405180830381600087803b15801562000ba957600080fd5b505af115801562000bbe573d6000803e3d6000fd5b5050600054600554604080516318caf8e360e31b81526001600160a01b039283166004808301919091526024820192909252604481019190915263141bdbdb60e21b60648201526201000090920416925063c657c7189150608401600060405180830381600087803b15801562000c3457600080fd5b505af115801562000c49573d6000803e3d6000fd5b5050600054600c8054604080516318caf8e360e31b81526001600160a01b039283166004820152602481019190915260448101929092526b43726564697446616361646560a01b606483015262010000909204909116925063c657c7189150608401600060405180830381600087803b15801562000cc657600080fd5b505af115801562000cdb573d6000803e3d6000fd5b5050600054600b54604080516318caf8e360e31b81526001600160a01b0392831660048201526024810191909152600d60448201526c21b932b234ba26b0b730b3b2b960991b60648201526201000090920416925063c657c7189150608401600060405180830381600087803b15801562000d5557600080fd5b505af115801562000d6a573d6000803e3d6000fd5b5050600054600d54604080516318caf8e360e31b81526001600160a01b0392831660048201526024810191909152601260448201527121b932b234ba21b7b73334b3bab930ba37b960711b60648201526201000090920416925063c657c7189150608401600060405180830381600087803b15801562000de957600080fd5b505af115801562000dfe573d6000803e3d6000fd5b50506001546001600160a01b0316915063eebab8ef90508473f39fd6e51aad88f6f4ce6ab8827279cfffb9226662000e35620011ec565b6040518463ffffffff1660e01b815260040162000e55939291906200189b565b600060405180830381600087803b15801562000e7057600080fd5b505af115801562000e85573d6000803e3d6000fd5b50506001546001600160a01b0316915063eebab8ef9050847390f79bf6eb2c4f870365e785982e1f101e93b90662000ebc620011ec565b6040518463ffffffff1660e01b815260040162000edc939291906200189b565b600060405180830381600087803b15801562000ef757600080fd5b505af115801562000f0c573d6000803e3d6000fd5b505060005460405163ca669fa760e01b815273f39fd6e51aad88f6f4ce6ab8827279cfffb922666004820152620100009091046001600160a01b0316925063ca669fa79150602401600060405180830381600087803b15801562000f6f57600080fd5b505af115801562000f84573d6000803e3d6000fd5b5050600954600b5460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529116925063095ea7b391506044016020604051808303816000875af115801562000fdf573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001005919062001989565b5060005460405163ca669fa760e01b81527390f79bf6eb2c4f870365e785982e1f101e93b9066004820152620100009091046001600160a01b03169063ca669fa790602401600060405180830381600087803b1580156200106557600080fd5b505af11580156200107a573d6000803e3d6000fd5b5050600954600b5460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529116925063095ea7b391506044016020604051808303816000875af1158015620010d5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010fb919062001989565b5060025460405163f2fde38b60e01b81527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526001600160a01b039091169063f2fde38b90602401600060405180830381600087803b1580156200115657600080fd5b505af11580156200116b573d6000803e3d6000fd5b505060075460405163f2fde38b60e01b81527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b158015620011c957600080fd5b505af1158015620011de573d6000803e3d6000fd5b5050505050505050620019e1565b600180546040516367b4264560e01b81526000926001600160a01b03909216916367b42645916200122191906004016200184d565b602060405180830381865afa1580156200123f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200126591906200162a565b6009546001600160a01b03908116911614620012955762001290670de0b6b3a764000060c862001879565b905090565b62001290670de0b6b3a7640000614e2062001879565b6040805160c08101825260026080820190815261232860a08301528152815180830183526005815261226060208281019190915282015281518083018352606092600092919082019080600387600a8111156200130c576200130c62001814565b146200131a5760036200131d565b60015b600a81111562001331576200133162001814565b815261206c6020918201529082526040805180820190915260048152611c84818301529101529050612454600a6000858281111562001374576200137462001814565b600a81111562001388576200138862001814565b815260208101919091526040908101600020805461ffff9390931661ffff19909316929092179091558051600480825260a0820190925281816020015b6040805180820190915260008082526020820152815260200190600190039081620013c557905050925060005b818110156200158d57828160048110620014105762001410620019ad565b602002015160200151600a6000858460048110620014325762001432620019ad565b602002015151600a8111156200144c576200144c62001814565b600a81111562001460576200146062001814565b815260208101919091526040908101600020805461ffff191661ffff9390931692909217909155805180820190915260015481906001600160a01b03166367b42645868560048110620014b757620014b7620019ad565b6020020151516040516001600160e01b031960e084901b168152620014e091906004016200184d565b602060405180830381865afa158015620014fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200152491906200162a565b6001600160a01b03168152602001848360048110620015475762001547620019ad565b60200201516020015161ffff168152508482815181106200156c576200156c620019ad565b602002602001018190525080806200158490620019c3565b915050620013f2565b505050919050565b6105e6806200bc5283390190565b62011105806200c23883390190565b6110a7806201d33d83390190565b62013af2806201e3e483390190565b6001600160a01b0381168114620015e557600080fd5b50565b60008060408385031215620015fc57600080fd5b82516200160981620015cf565b6020840151909250600b81106200161f57600080fd5b809150509250929050565b6000602082840312156200163d57600080fd5b81516200164a81620015cf565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156200168c576200168c62001651565b60405290565b604051601f8201601f191681016001600160401b0381118282101715620016bd57620016bd62001651565b604052919050565b60006020808385031215620016d957600080fd5b82516001600160401b0380821115620016f157600080fd5b818501915085601f8301126200170657600080fd5b8151818111156200171b576200171b62001651565b6200172b848260051b0162001692565b818152848101925060069190911b8301840190878211156200174c57600080fd5b928401925b81841015620017ab57604084890312156200176c5760008081fd5b6200177662001667565b84516200178381620015cf565b8152848601516200179481620015cf565b818701528352604093909301929184019162001751565b979650505050505050565b602080825282518282018190526000919060409081850190868401855b828110156200180757815180516001600160a01b0390811686529087015116868501529284019290850190600101620017d3565b5091979650505050505050565b634e487b7160e01b600052602160045260246000fd5b600b81106200184957634e487b7160e01b600052602160045260246000fd5b9052565b602081016200185d82846200182a565b92915050565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161562001896576200189662001863565b500290565b60608101620018ab82866200182a565b6001600160a01b0393909316602082015260400152919050565b6001600160a01b0384811682526060602080840182905285516001600160801b039081169285019290925285810151909116608084015260408086015160a085810152805161010086018190526000949392918301919085906101208801905b808310156200195657845180518816835286015161ffff168683015293850193600192909201919083019062001925565b5060608a01516001600160a01b031660c0890152608090990151151560e088015250909401949094525092949350505050565b6000602082840312156200199c57600080fd5b815180151581146200164a57600080fd5b634e487b7160e01b600052603260045260246000fd5b6000600019821415620019da57620019da62001863565b5060010190565b61a26180620019f16000396000f3fe60806040523480156200001157600080fd5b5060043610620001ad5760003560e01c806362eb33e311620000f5578063ba414fa61162000097578063de287359116200006e578063de2873591462000479578063f9aa028a146200049a578063fa7626d414620004bb57600080fd5b8063ba414fa6146200041c578063c12c21c01462000437578063d46b9330146200045857600080fd5b80637785ff5d11620000cc5780637785ff5d14620003da5780639408b63f14620003e45780639dd55b45146200040557600080fd5b806362eb33e314620003775780636b70b04c14620003985780636f307dc314620003b957600080fd5b80632f7a1881116200015f5780635e813a8b11620001365780635e813a8b146200030c5780635f7c9bd0146200032d57806362186905146200034657600080fd5b80632f7a188114620002be578063406c8e2f14620002df57806354cae56e146200030057600080fd5b80630e42bc5d11620001945780630e42bc5d14620002305780632630c12f14620002565780632954018c146200029d57600080fd5b80630bc772da14620001b25780630c75f80614620001f5575b600080fd5b600f54620001cf906fffffffffffffffffffffffffffffffff1681565b6040516fffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6200021c62000206366004620012dd565b600a6020526000908152604090205461ffff1681565b60405161ffff9091168152602001620001ec565b6200024762000241366004620012dd565b620004c9565b604051620001ec919062001307565b600854620002779073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001620001ec565b600254620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600c54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600154620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200030a6200081f565b005b600454620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200033762000b1a565b604051908152602001620001ec565b600f54620001cf9070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681565b600654620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600554620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600954620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200030a62000c0c565b600e54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200030a6200041636600462001398565b62000fd6565b6200042662001149565b6040519015158152602001620001ec565b600b54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600354620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600754620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600d54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600054620004269060ff1681565b6040805160c08101825260026080820190815261232860a08301528152815180830183526005815261226060208281019190915282015281518083018352606092600092919082019080600387600a8111156200052a576200052a620013c7565b14620005385760036200053b565b60015b600a8111156200054f576200054f620013c7565b815261206c6020918201529082526040805180820190915260048152611c84818301529101529050612454600a60008582811115620005925762000592620013c7565b600a811115620005a657620005a6620013c7565b815260208101919091526040908101600020805461ffff939093167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909316929092179091558051600480825260a0820190925281816020015b60408051808201909152600080825260208201528152602001906001900390816200060057905050925060005b8181101562000817578281600481106200064b576200064b620013f6565b602002015160200151600a60008584600481106200066d576200066d620013f6565b602002015151600a811115620006875762000687620013c7565b600a8111156200069b576200069b620013c7565b81526020810191909152604090810160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff93909316929092179091558051808201909152600154819073ffffffffffffffffffffffffffffffffffffffff166367b426458685600481106200071c576200071c620013f6565b6020020151516040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526200075d919060040162001425565b602060405180830381865afa1580156200077b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007a1919062001467565b73ffffffffffffffffffffffffffffffffffffffff168152602001848360048110620007d157620007d1620013f6565b60200201516020015161ffff16815250848281518110620007f657620007f6620013f6565b602002602001018190525080806200080e90620014b6565b9150506200062d565b505050919050565b6000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16906306447d5690602401600060405180830381600087803b158015620008a457600080fd5b505af1158015620008b9573d6000803e3d6000fd5b5050600b5460405173ffffffffffffffffffffffffffffffffffffffff909116925060009150600190620008ed90620012b3565b73ffffffffffffffffffffffffffffffffffffffff938416815292909116602083015215156040820152606001604051809103906000f08015801562000937573d6000803e3d6000fd5b50600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316908117909155600d546040517f526a41e80000000000000000000000000000000000000000000000000000000081526004810192909252600160248301529091169063526a41e890604401600060405180830381600087803b158015620009dc57600080fd5b505af1158015620009f1573d6000803e3d6000fd5b5050600d5473ffffffffffffffffffffffffffffffffffffffff16915063eb9606df905062000a22426001620014f2565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815264ffffffffff90911660048201526024015b600060405180830381600087803b15801562000a7b57600080fd5b505af115801562000a90573d6000803e3d6000fd5b50505050600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562000aff57600080fd5b505af115801562000b14573d6000803e3d6000fd5b50505050565b600180546040517f67b4264500000000000000000000000000000000000000000000000000000000815260009273ffffffffffffffffffffffffffffffffffffffff909216916367b426459162000b75919060040162001425565b602060405180830381865afa15801562000b93573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000bb9919062001467565b60095473ffffffffffffffffffffffffffffffffffffffff90811691161462000bf65762000bf1670de0b6b3a764000060c86200150d565b905090565b62000bf1670de0b6b3a7640000614e206200150d565b60025460405173ffffffffffffffffffffffffffffffffffffffff9091169062000c3690620012c1565b73ffffffffffffffffffffffffffffffffffffffff90911681526060602082018190526008908201527f446567656e4e4654000000000000000000000000000000000000000000000000608082015260a060408201819052600a908201527f476561722d446567656e0000000000000000000000000000000000000000000060c082015260e001604051809103906000f08015801562000cda573d6000803e3d6000fd5b50600e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283161790556000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015262010000909104909116906306447d5690602401600060405180830381600087803b15801562000d8e57600080fd5b505af115801562000da3573d6000803e3d6000fd5b5050600e546040517ffca3b5aa0000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff909116925063fca3b5aa9150602401600060405180830381600087803b15801562000e2757600080fd5b505af115801562000e3c573d6000803e3d6000fd5b5050600b54600e5460405173ffffffffffffffffffffffffffffffffffffffff92831694509116915060009062000e7390620012b3565b73ffffffffffffffffffffffffffffffffffffffff938416815292909116602083015215156040820152606001604051809103906000f08015801562000ebd573d6000803e3d6000fd5b50600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316908117909155600d546040517f526a41e80000000000000000000000000000000000000000000000000000000081526004810192909252600160248301529091169063526a41e890604401600060405180830381600087803b15801562000f6257600080fd5b505af115801562000f77573d6000803e3d6000fd5b5050600e54600c546040517f4610f6ac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015291169250634610f6ac915060240162000a60565b600081600860405162000fe990620012cf565b91825260ff166020820152604001604051809103906000f08015801562001014573d6000803e3d6000fd5b506000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291925062010000900473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b1580156200109c57600080fd5b505af1158015620010b1573d6000803e3d6000fd5b50506008546040517fe8a97a3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528581166024830152909116925063e8a97a3e9150604401600060405180830381600087803b1580156200112b57600080fd5b505af115801562001140573d6000803e3d6000fd5b50505050505050565b60008054610100900460ff16156200116a5750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620012ae5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000008284015282518083038401815260608301909352600092909162001212917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016200158b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526200124c91620015c9565b6000604051808303816000865af19150503d80600081146200128b576040519150601f19603f3d011682016040523d82523d6000602084013e62001290565b606091505b5091505080806020019051810190620012aa9190620015d7565b9150505b919050565b615e9780620015fc83390190565b6126cf806200749383390190565b6106ca8062009b6283390190565b600060208284031215620012f057600080fd5b8135600b81106200130057600080fd5b9392505050565b602080825282518282018190526000919060409081850190868401855b8281101562001365578151805173ffffffffffffffffffffffffffffffffffffffff16855286015161ffff1686850152928401929085019060010162001324565b5091979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff811681146200139557600080fd5b50565b60008060408385031215620013ac57600080fd5b8235620013b98162001372565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60208101600b831062001461577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000602082840312156200147a57600080fd5b8151620013008162001372565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415620014eb57620014eb62001487565b5060010190565b6000821982111562001508576200150862001487565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562001548576200154862001487565b500290565b6000815160005b8181101562001570576020818501810151868301520162001554565b8181111562001580576000828601525b509290920192915050565b7fffffffff00000000000000000000000000000000000000000000000000000000831681526000620015c160048301846200154d565b949350505050565b60006200130082846200154d565b600060208284031215620015ea57600080fd5b815180151581146200130057600080fdfe6101406040523480156200001257600080fd5b5060405162005e9738038062005e97833981016040819052620000359162000198565b60016000556001600160a01b0383166200006257604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038316608081905260408051636f307dc360e01b81529051636f307dc3916004808201926020929091908290030181865afa158015620000ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d39190620001ea565b6001600160a01b031660a0816001600160a01b031681525050826001600160a01b0316634f0e0ef36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200012b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001519190620001ea565b6001600160a01b0390811660c0529190911660e0819052151561010052151561012052506200020f565b80516001600160a01b03811681146200019357600080fd5b919050565b600080600060608486031215620001ae57600080fd5b620001b9846200017b565b9250620001c9602085016200017b565b915060408401518015158114620001df57600080fd5b809150509250925092565b600060208284031215620001fd57600080fd5b62000208826200017b565b9392505050565b60805160a05160c05160e0516101005161012051615a86620004116000396000818161061101528181612fb5015261481f01526000818161031701528181610dde015281816144f901526146e5015260008181610557015281816146a901526147a901526000818161034b0152818161387d015261392d01526000818161047301528181611bfe0152818161274f0152818161280d0152818161366a01526137dd015260008181610665015281816109d801528181610b0301528181610bd501528181610cdd01528181610e6501528181610fe30152818161114e0152818161120e0152818161132e015281816114510152818161162b01528181611708015281816117e0015281816119e501528181611b1201528181611d9501528181611ed5015281816120040152818161216801528181612290015281816123c601528181612568015281816126390152818161266f0152818161293d01528181612a2101528181612a8a01528181612bde01528181612d2601528181612e6801528181612ec2015281816130a10152818161311b015281816131b401528181613341015281816134c10152818161358a0152818161372f01528181613a1a01528181613b2e01528181613dbb015281816142200152818161432801528181614492015281816148e7015281816149e801528181614aae0152614d8f0152615a866000f3fe6080604052600436106102695760003560e01c8063860aefcf11610153578063c7de38a6116100cb578063dfd594651161007f578063eb9606df11610064578063eb9606df1461081e578063f9eaee0d1461083e578063ffd9b9071461085e57600080fd5b8063dfd59465146107de578063e1f21c67146107fe57600080fd5b8063cff0ab96116100b0578063cff0ab96146106ef578063d9ccbec114610783578063dcf65482146107be57600080fd5b8063c7de38a6146106a7578063caa5c23f146106dc57600080fd5b80639c55a05411610122578063b55bb84b11610107578063b55bb84b14610633578063c12c21c014610653578063c690908a1461068757600080fd5b80639c55a054146105df578063b1836d32146105ff57600080fd5b8063860aefcf146104db5780639408b63f146105455780639b67ab30146105795780639be0536a146105bd57600080fd5b80635d91a0e0116101e65780636d19b486116101b55780637071b7c51161019a5780637071b7c51461049557806379c0ef91146104a857806382871ace146104c857600080fd5b80636d19b486146104415780636f307dc31461046157600080fd5b80635d91a0e0146103e85780635f73fbec146103fb578063601d66f61461040e5780636c8f225d1461042e57600080fd5b80633d9287fa1161023d5780635019e20a116102225780635019e20a1461039257806354fd4d50146103b257806359781034146103d557600080fd5b80633d9287fa146103055780634f0e0ef31461033957600080fd5b8062842b571461026e578063256ac915146102905780632a7ba1f7146102c55780632b7c7b11146102e5575b600080fd5b34801561027a57600080fd5b5061028e6102893660046151bf565b61087e565b005b34801561029c57600080fd5b506102b06102ab3660046151f8565b61098e565b60405190151581526020015b60405180910390f35b3480156102d157600080fd5b5061028e6102e0366004615215565b610a61565b3480156102f157600080fd5b5061028e610300366004615215565b610c3b565b34801561031157600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561034557600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102bc565b34801561039e57600080fd5b5061028e6103ad3660046151f8565b610d6a565b3480156103be57600080fd5b506103c7600281565b6040519081526020016102bc565b61028e6103e336600461522e565b61108c565b61028e6103f63660046152bb565b611275565b61028e610409366004615340565b611589565b34801561041a57600080fd5b5061028e6104293660046153d8565b6117de565b61028e61043c36600461541b565b611900565b34801561044d57600080fd5b506102b061045c3660046151f8565b611c31565b34801561046d57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b61028e6104a336600461546e565b611c60565b3480156104b457600080fd5b5061036d6104c3366004615215565b611f3e565b61028e6104d63660046152bb565b611f4b565b3480156104e757600080fd5b5060025461051c906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041682565b604080516fffffffffffffffffffffffffffffffff9384168152929091166020830152016102bc565b34801561055157600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561058557600080fd5b506004546040805167ffffffffffffffff608084901c1681526fffffffffffffffffffffffffffffffff9092166020830152016102bc565b3480156105c957600080fd5b506105d261227d565b6040516102bc91906154e2565b3480156105eb57600080fd5b5061028e6105fa36600461553c565b61228e565b34801561060b57600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561063f57600080fd5b5061028e61064e3660046151f8565b6123c4565b34801561065f57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561069357600080fd5b5061028e6106a23660046151f8565b6124c6565b3480156106b357600080fd5b506106c76106c23660046151f8565b612668565b604080519283526020830191909152016102bc565b61028e6106ea366004615557565b61289b565b3480156106fb57600080fd5b5060015461074e906fffffffffffffffffffffffffffffffff811690700100000000000000000000000000000000810460ff169071010000000000000000000000000000000000900464ffffffffff1683565b604080516fffffffffffffffffffffffffffffffff9094168452911515602084015264ffffffffff16908201526060016102bc565b34801561078f57600080fd5b506102b061079e366004615599565b600360209081526000928352604080842090915290825290205460ff1681565b3480156107ca57600080fd5b5061028e6107d93660046151f8565b612a88565b3480156107ea57600080fd5b506103c76107f93660046151f8565b612b86565b34801561080a57600080fd5b5061028e61081936600461522e565b612c6d565b34801561082a57600080fd5b5061028e6108393660046155c7565b612ec0565b34801561084a57600080fd5b506102b06108593660046151f8565b613057565b34801561086a57600080fd5b5061028e6108793660046155ee565b6131b2565b600260005414156108f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b6002600090815573ffffffffffffffffffffffffffffffffffffffff8316808252600360209081526040808420338086529083529381902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081527f9b3258bc4904fd6426b99843e206c6c7cdb1fd0f040121c25b71dafbb3851ee0910160405180910390a350506001600055565b6040517f055ee9b500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063055ee9b590602401602060405180830381865afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a43919061560b565b73ffffffffffffffffffffffffffffffffffffffff16141592915050565b60026000541415610ace576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610b5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b83919061560b565b9050610b903382846132eb565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906395373018906024015b600060405180830381600087803b158015610c1a57600080fd5b505af1158015610c2e573d6000803e3d6000fd5b5050600160005550505050565b60026000541415610ca8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610d39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5d919061560b565b9050610b90338284613411565b60026000541415610dd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000557f000000000000000000000000000000000000000000000000000000000000000015610e34576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610ec1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee5919061560b565b33600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915290205490915060ff16610f52576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f5d82613583565b5090508015610f98576040517ff713841e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b15801561102757600080fd5b505af115801561103b573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692503391507f93c70cc9715bef0d83edf2095f3595402279d274f402a73ffc17f1bcb19d863d90600090a35050600160005550565b600260005414156110f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611106613875565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063e958b70490602401602060405180830381865afa158015611197573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bb919061560b565b90506111c9848285856139b7565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401600060405180830381600087803b15801561125257600080fd5b505af1158015611266573d6000803e3d6000fd5b50506001600055505050505050565b600260005414156112e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611375573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611399919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166113e8576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806113f483613583565b915091508161142f576040517f1fdd676f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611437613875565b831561144d5761144d85858b8660016000613ae3565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632362a2d88b600185338e8e8e6040518863ffffffff1660e01b81526004016114b59796959493929190615663565b6020604051808303816000875af11580156114d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f891906156bf565b90508873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f7dfecd8419723a9d3954585a30c2a270165d70aafa146c11c1e1b88ae14390648460405161157091815260200190565b60405180910390a4505060016000555050505050505050565b600260005414156115f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ab919061560b565b90506116b5613875565b81156116cb576116cb8383338460016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d89061174a903390600090819083908d908d908d90600401615663565b6020604051808303816000875af1158015611769573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178d91906156bf565b5060405173ffffffffffffffffffffffffffffffffffffffff87169033907f460ad03b1cf79b1d64d3aefa28475f110ab66e84649c52bb41ed796b9b39198190600090a35050600160005550505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611849573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118d1576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff90811670010000000000000000000000000000000002911617600255565b6002600054141561196d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000908155606461198461ffff851687615707565b61198e9190615744565b9050611999816144f7565b6119a2816145e8565b6119ab84614668565b6119b3613875565b6040517f172c48c7000000000000000000000000000000000000000000000000000000008152600060048201819052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a64919061577f565b61ffff169150611a789050816127106157ae565b611a829083615707565b611a8c8288615707565b11611ac3576040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff86811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611b5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b81919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638587604051611bef92919091825261ffff16602082015260400190565b60405180910390a3611c2386827f00000000000000000000000000000000000000000000000000000000000000008a6139b7565b505060016000555050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526006602052604081205415155b92915050565b60026000541415611ccd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611cdb856144f7565b611ce484614668565b611ced856145e8565b600154700100000000000000000000000000000000900460ff1615611d3e576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d46613875565b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff85811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611de0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e04919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638885604051611e7292919091825261ffff16602082015260400190565b60405180910390a38215611e9057611e908484878460006001613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015611f1957600080fd5b505af1158015611f2d573d6000803e3d6000fd5b505060016000555050505050505050565b6000611c5a60058361480f565b60026000541415611fb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa15801561204b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206f919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166120be576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120c661481b565b6120fc576040517f7e52ccb400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061210782612668565b509050612112613875565b82156121285761212884848a8560016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d8906121aa908c90600290879033908f908f908f90600401615663565b6020604051808303816000875af11580156121c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ed91906156bf565b90508773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167ffada13ff2d5e1a1d9da37ad4a4130893b34e3c69c32b17f87ec31fd661b867078460405161226591815260200190565b60405180910390a45050600160005550505050505050565b6060612289600561486b565b905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612381576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561242f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612453919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146124b7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614878565b5050565b60026000541415612533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156125c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e8919061560b565b90506125f4818361489a565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401610c00565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126fc919061560b565b905060008061270b8387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156127a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127c991906156bf565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015291965061271091851690637afb010490604401602060405180830381865afa158015612863573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061288791906156bf565b6128919190615744565b9350505050915091565b60026000541415612908576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129bd919061560b565b90506129c7613875565b8115612a7e576129dc83833384600080613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015612a6557600080fd5b505af1158015612a79573d6000803e3d6000fd5b505050505b5050600160005550565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612af3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b17919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b7b576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614c92565b600080612b9283612668565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152919350600092507f000000000000000000000000000000000000000000000000000000000000000090911690633192195c906024016040805180830381865afa158015612c26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4a91906157c5565b9150819050612c5b61271084615707565b612c659190615744565b949350505050565b60026000541415612cda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063fdd5764590602401602060405180830381865afa158015612d6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d91919061560b565b73ffffffffffffffffffffffffffffffffffffffff161480612dd7575073ffffffffffffffffffffffffffffffffffffffff831660009081526006602052604090205415155b15612e0e576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612eac57600080fd5b505af1158015611c23573d6000803e3d6000fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f4f919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612fb3576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000061300a576040517f50dd11fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805464ffffffffff90921671010000000000000000000000000000000000027fffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffffff909216919091179055565b6040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063f67c5bd090602401602060405180830381865afa1580156130e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061310c91906156bf565b905080158015906131ab5750807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015613184573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a891906156bf565b16155b9392505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561321d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613241919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146132a5576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018054911515700100000000000000000000000000000000027fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff909216919091179055565b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600060448301819052917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561338c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133b091906156bf565b90506133bb816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f98274bf834d179ee08dc0604071b0dc90b54731bd5f725a5a96a39a86bce025a8360405161340391815260200190565b60405180910390a250505050565b61341a816144f7565b600154700100000000000000000000000000000000900460ff161561346b576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600160448301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561350c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061353091906156bf565b905061353b816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f9cac51154cc0d835e2f9c9d1f59a9344588cee107f4203bf58a8c797e3a58c458360405161340391815260200190565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613617919061560b565b90506000806136268387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156136c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136e491906156bf565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529195506000917f00000000000000000000000000000000000000000000000000000000000000001690633192195c906024016040805180830381865afa158015613775573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061379991906157c5565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350600092506127109187169063f9a6503090604401602060405180830381865afa158015613837573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061385b91906156bf565b6138659190615707565b9092109794965093945050505050565b34156139b5577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156138e357600080fd5b505af11580156138f7573d6000803e3d6000fd5b50506040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201523460248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16935063a9059cbb925060440190506020604051808303816000875af115801561398f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139b391906157e9565b505b565b6139c084614cb4565b6040517f830aa74500000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f0000000000000000000000000000000000000000000000000000000000000000169063830aa74590608401600060405180830381600087803b158015613a5e57600080fd5b505af1158015613a72573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fa32435755c235de2976ed44a75a2f85cb01faf0c894f639fe0c32bb9455fea8f83604051613ad591815260200190565b60405180910390a350505050565b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301523060248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b158015613b7257600080fd5b505af1158015613b86573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff871692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a28460005b8181101561441d5736888883818110613bea57613bea615806565b9050602002810190613bfc9190615835565b90506004613c0d6020830183615873565b90501015613c47576040517fe2b0e50600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b30613c5560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16141561421c578415613ca9576040517f5fb9107f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613cb86020830183615873565b613cc1916158d8565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167f59781034000000000000000000000000000000000000000000000000000000001415613e3c5760008080613d1e6020860186615873565b613d2c916004908290615920565b810190613d39919061522e565b925092509250613e34838c73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614613e2b576040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015613e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e26919061560b565b613e2d565b8b5b84846139b7565b505050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2b7c7b11000000000000000000000000000000000000000000000000000000001415613ec757600194506000613e996020840184615873565b613ea7916004908290615920565b810190613eb49190615215565b9050613ec1898983613411565b50614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2a7ba1f7000000000000000000000000000000000000000000000000000000001415613f80578415613f49576040517fc0b0caa800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613f586020840184615873565b613f66916004908290615920565b810190613f739190615215565b9050613ec18989836132eb565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f233a8caa0000000000000000000000000000000000000000000000000000000014156140e457600080613fda6020850185615873565b613fe8916004908290615920565b810190613ff5919061594a565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c8116600483015292945090925082918416906370a0823190602401602060405180830381865afa158015614069573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061408d91906156bf565b10156140dd576040517fa5ac537300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016108e7565b5050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fc690908a00000000000000000000000000000000000000000000000000000000141561416457600061413d6020840184615873565b61414b916004908290615920565b81019061415891906151f8565b9050613ec1888261489a565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f23e27a640000000000000000000000000000000000000000000000000000000014156141e45760006141bd6020840184615873565b6141cb916004908290615920565b8101906141d891906151f8565b9050613ec18882614d42565b6040517f1e9e7e7a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50614414565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff68754361426760208501856151f8565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156142d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142f4919061560b565b73ffffffffffffffffffffffffffffffffffffffff16148061436d575073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001661435560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16145b156143a4576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6144126143b46020830183615873565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506143f69250505060208401846151f8565b73ffffffffffffffffffffffffffffffffffffffff1690614e39565b505b50600101613bcf565b506040517f60c8e8938c9a0c0d88a98d6f1c562ce68077e12bf3edb8047378f2f736cb45b490600090a16040517fe1998cf900000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff86811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b1580156144d657600080fd5b505af11580156144ea573d6000803e3d6000fd5b5050505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006139b3576001546fffffffffffffffffffffffffffffffff9081169081146124c257600454608081901c906fffffffffffffffffffffffffffffffff16600067ffffffffffffffff8316431461456e578461458a565b61458a6fffffffffffffffffffffffffffffffff831686615976565b9050838111156145c6576040517f675f1a5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff81164360801b176004555050505050565b6002546fffffffffffffffffffffffffffffffff16811080614631575060025470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681115b156139b3576040517fce16799400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61467061481b565b156146a7576040517f63fc31c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1615614806577f0000000000000000000000000000000000000000000000000000000000000000801561472657503373ffffffffffffffffffffffffffffffffffffffff821614155b1561475d576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600160248301527f00000000000000000000000000000000000000000000000000000000000000001690639dc29fac90604401600060405180830381600087803b1580156147ed57600080fd5b505af1158015614801573d6000803e3d6000fd5b505050505b6139b381614cb4565b60006131ab8383614e7b565b60007f0000000000000000000000000000000000000000000000000000000000000000801561228957505060015471010000000000000000000000000000000000900464ffffffffff1642101590565b606060006131ab83614ea5565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f01565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561492b57600080fd5b505af115801561493f573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527fdf498aa1c340e992665d6fb4f3be8436d452c45a630cb6d7fab7963da39bac8793500190505b60405180910390a15050565b6040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600091829160019183917f00000000000000000000000000000000000000000000000000000000000000001690638991b2f190602401602060405180830381865afa158015614a2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a5391906156bf565b90505b808211614c895780821615614c7d576040517fe75538c700000000000000000000000000000000000000000000000000000000815260048101839052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e75538c7906024016040805180830381865afa158015614af4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b18919061577f565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529294509092506000918416906370a0823190602401602060405180830381865afa158015614b8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bb191906156bf565b90506001811115614c79576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff8481166024830152600091908b169063f9a6503090604401602060405180830381865afa158015614c33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c5791906156bf565b978801979050614c6b61ffff841682615707565b614c759088615976565b9650505b5050505b600182901b9150614a56565b50509250929050565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f50565b3373ffffffffffffffffffffffffffffffffffffffff821614801590614d0b575033600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16155b156139b3576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b158015614dd357600080fd5b505af1158015614de7573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527f69db9e9764da61b6681b89fb0f5be018506e0342036e56b59c3015a620d60977935001905061498d565b60606131ab83836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250615043565b6000826000018281548110614e9257614e92615806565b9060005260206000200154905092915050565b606081600001805480602002602001604051908101604052809291908181526020018280548015614ef557602002820191906000526020600020905b815481526020019060010190808311614ee1575b50505050509050919050565b6000818152600183016020526040812054614f4857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611c5a565b506000611c5a565b60008181526001830160205260408120548015615039576000614f746001836157ae565b8554909150600090614f88906001906157ae565b9050818114614fed576000866000018281548110614fa857614fa8615806565b9060005260206000200154905080876000018481548110614fcb57614fcb615806565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080614ffe57614ffe61598e565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611c5a565b6000915050611c5a565b6060612c65848460008585843b6150b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108e7565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516150df91906159ed565b60006040518083038185875af1925050503d806000811461511c576040519150601f19603f3d011682016040523d82523d6000602084013e615121565b606091505b509150915061513182828661513c565b979650505050505050565b6060831561514b5750816131ab565b82511561515b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e791906159ff565b73ffffffffffffffffffffffffffffffffffffffff811681146139b357600080fd5b80151581146139b357600080fd5b600080604083850312156151d257600080fd5b82356151dd8161518f565b915060208301356151ed816151b1565b809150509250929050565b60006020828403121561520a57600080fd5b81356131ab8161518f565b60006020828403121561522757600080fd5b5035919050565b60008060006060848603121561524357600080fd5b833561524e8161518f565b9250602084013561525e8161518f565b929592945050506040919091013590565b60008083601f84011261528157600080fd5b50813567ffffffffffffffff81111561529957600080fd5b6020830191508360208260051b85010111156152b457600080fd5b9250929050565b60008060008060008060a087890312156152d457600080fd5b86356152df8161518f565b955060208701356152ef8161518f565b9450604087013593506060870135615306816151b1565b9250608087013567ffffffffffffffff81111561532257600080fd5b61532e89828a0161526f565b979a9699509497509295939492505050565b60008060008060006080868803121561535857600080fd5b85356153638161518f565b945060208601359350604086013561537a816151b1565b9250606086013567ffffffffffffffff81111561539657600080fd5b6153a28882890161526f565b969995985093965092949392505050565b80356fffffffffffffffffffffffffffffffff811681146153d357600080fd5b919050565b600080604083850312156153eb57600080fd5b6153f4836153b3565b9150615402602084016153b3565b90509250929050565b61ffff811681146139b357600080fd5b6000806000806080858703121561543157600080fd5b8435935060208501356154438161518f565b925060408501356154538161540b565b915060608501356154638161540b565b939692955090935050565b60008060008060006080868803121561548657600080fd5b8535945060208601356154988161518f565b9350604086013567ffffffffffffffff8111156154b457600080fd5b6154c08882890161526f565b90945092505060608601356154d48161540b565b809150509295509295909350565b6020808252825182820181905260009190848201906040850190845b8181101561553057835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016154fe565b50909695505050505050565b60006020828403121561554e57600080fd5b6131ab826153b3565b6000806020838503121561556a57600080fd5b823567ffffffffffffffff81111561558157600080fd5b61558d8582860161526f565b90969095509350505050565b600080604083850312156155ac57600080fd5b82356155b78161518f565b915060208301356151ed8161518f565b6000602082840312156155d957600080fd5b813564ffffffffff811681146131ab57600080fd5b60006020828403121561560057600080fd5b81356131ab816151b1565b60006020828403121561561d57600080fd5b81516131ab8161518f565b6003811061565f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b73ffffffffffffffffffffffffffffffffffffffff888116825260e082019061568f602084018a615628565b6040830197909752948616606082015292909416608083015260a082015291151560c09092019190915292915050565b6000602082840312156156d157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561573f5761573f6156d8565b500290565b60008261577a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000806040838503121561579257600080fd5b825161579d8161518f565b60208401519092506151ed8161540b565b6000828210156157c0576157c06156d8565b500390565b600080604083850312156157d857600080fd5b505080516020909101519092909150565b6000602082840312156157fb57600080fd5b81516131ab816151b1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc183360301811261586957600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126158a857600080fd5b83018035915067ffffffffffffffff8211156158c357600080fd5b6020019150368190038213156152b457600080fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156159185780818660040360031b1b83161692505b505092915050565b6000808585111561593057600080fd5b8386111561593d57600080fd5b5050820193919092039150565b6000806040838503121561595d57600080fd5b82356159688161518f565b946020939093013593505050565b60008219821115615989576159896156d8565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60005b838110156159d85781810151838201526020016159c0565b838111156159e7576000848401525b50505050565b600082516158698184602087016159bd565b6020815260008251806020840152615a1e8160408501602087016159bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea2646970667358221220a3f4a705ab580a6ada1e438cd2ee4abc001b62d1d171fce12c41994900fef21664736f6c634300080a003360c06040523480156200001157600080fd5b50604051620026cf380380620026cf833981016040819052620000349162000324565b82828281600090805190602001906200004f92919062000194565b5080516200006590600190602084019062000194565b50506006805460ff19169055506001600160a01b0381166200009a57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000d9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ff9190620003a1565b6001600160a01b03166080816001600160a01b03168152505050826001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000158573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200017e9190620003a1565b6001600160a01b031660a0525062000403915050565b828054620001a290620003c6565b90600052602060002090601f016020900481019282620001c6576000855562000211565b82601f10620001e157805160ff191683800117855562000211565b8280016001018555821562000211579182015b8281111562000211578251825591602001919060010190620001f4565b506200021f92915062000223565b5090565b5b808211156200021f576000815560010162000224565b80516001600160a01b03811681146200025257600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200027f57600080fd5b81516001600160401b03808211156200029c576200029c62000257565b604051601f8301601f19908116603f01168101908282118183101715620002c757620002c762000257565b81604052838152602092508683858801011115620002e457600080fd5b600091505b83821015620003085785820183015181830184015290820190620002e9565b838211156200031a5760008385830101525b9695505050505050565b6000806000606084860312156200033a57600080fd5b62000345846200023a565b60208501519093506001600160401b03808211156200036357600080fd5b62000371878388016200026d565b935060408601519150808211156200038857600080fd5b5062000397868287016200026d565b9150509250925092565b600060208284031215620003b457600080fd5b620003bf826200023a565b9392505050565b600181811c90821680620003db57607f821691505b60208210811415620003fd57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a0516122756200045a6000396000610a9a015260008181610386015281816106db0152818161089101528181610f15015281816110010152818161115b015281816112f401526114f901526122756000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80636352211e116100f9578063a0bcfc7f11610097578063b88d4fde11610071578063b88d4fde146103a8578063c87b56dd146103b6578063e985e9c5146103c9578063fca3b5aa1461041257600080fd5b8063a0bcfc7f14610360578063a22cb46514610373578063a50cf2c81461038157600080fd5b80638456cb59116100d35780638456cb591461032a57806389406ff51461033257806395d89b41146103455780639dc29fac1461034d57600080fd5b80636352211e146102fc5780636c0360eb1461030f57806370a082311461031757600080fd5b80633f4ba83a116101665780634610f6ac116101405780634610f6ac146102b357806354fd4d50146102c6578063576cd2d1146102ce5780635c975abb146102f157600080fd5b80633f4ba83a1461029857806340c10f19146102a057806342842e0e1461028a57600080fd5b8063081812fc116101a2578063081812fc1461024b578063095ea7b31461025e57806318160ddd1461027357806323b872dd1461028a57600080fd5b806301ffc9a7146101c957806306fdde03146101f15780630754617214610206575b600080fd5b6101dc6101d7366004611cc6565b610425565b60405190151581526020015b60405180910390f35b6101f961050a565b6040516101e89190611d38565b6008546102269073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e8565b610226610259366004611d89565b61059c565b61027161026c366004611dc7565b61067b565b005b61027c60075481565b6040519081526020016101e8565b61027161026c366004611df3565b6102716106ad565b6102716102ae366004611dc7565b61079b565b6102716102c1366004611e34565b610863565b61027c600181565b6101dc6102dc366004611e34565b60096020526000908152604090205460ff1681565b60065460ff166101dc565b61022661030a366004611d89565b610cd9565b6101f9610d8b565b61027c610325366004611e34565b610e19565b610271610ee7565b610271610340366004611e34565b610fd3565b6101f9611103565b61027161035b366004611dc7565b611112565b61027161036e366004611e51565b6112c6565b61027161026c366004611ed1565b6102267f000000000000000000000000000000000000000000000000000000000000000081565b61027161026c366004611f39565b6101f96103c4366004611d89565b6113bb565b6101dc6103d7366004612037565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205460ff1690565b610271610420366004611e34565b6114cb565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd0000000000000000000000000000000000000000000000000000000014806104b857507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061050457507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60606000805461051990612065565b80601f016020809104026020016040519081016040528092919081815260200182805461054590612065565b80156105925780601f1061056757610100808354040283529160200191610592565b820191906000526020600020905b81548152906001019060200180831161057557829003601f168201915b5050505050905090565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff16610652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084015b60405180910390fd5b5060009081526004602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b6040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa158015610737573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075b91906120b9565b610791576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107996115f6565b565b60085473ffffffffffffffffffffffffffffffffffffffff1633146107ec576040517f5c2967f500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006107f783610e19565b905060005b82811015610846576000816108278473ffffffffffffffffffffffffffffffffffffffff8816612105565b6108319190612105565b905061083d85826116d7565b506001016107fc565b5081600760008282546108599190612105565b9091555050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156108ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091191906120b9565b610947576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163b610995576040517f9c01f6a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff1663c12c21c06040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610a1c575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610a199181019061211d565b60015b610a52576040517f9c01f6a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f6fbc6f6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192507f000000000000000000000000000000000000000000000000000000000000000090911690636fbc6f6b90602401602060405180830381865afa158015610ae3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0791906120b9565b1580610bad57503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16639408b63f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b94919061211d565b73ffffffffffffffffffffffffffffffffffffffff1614155b80610c5257508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c39919061211d565b73ffffffffffffffffffffffffffffffffffffffff1614155b15610c89576040517f9c01f6a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff16600090815260096020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff1680610504576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e00000000000000000000000000000000000000000000006064820152608401610649565b600a8054610d9890612065565b80601f0160208091040260200160405190810160405280929190818152602001828054610dc490612065565b8015610e115780601f10610de657610100808354040283529160200191610e11565b820191906000526020600020905b815481529060010190602001808311610df457829003601f168201915b505050505081565b600073ffffffffffffffffffffffffffffffffffffffff8216610ebe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152608401610649565b5073ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015610f71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9591906120b9565b610fcb576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610799611899565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561105d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108191906120b9565b6110b7576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff16600090815260096020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b60606001805461051990612065565b3360009081526009602052604090205460ff161580156111dd57506040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156111b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111db91906120b9565b155b15611214576040517f1e0d048500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061121f83610e19565b90508181101561125b576040517f90c9142d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b828110156112b357600060018261128b8573ffffffffffffffffffffffffffffffffffffffff8916612105565b611295919061213a565b61129f919061213a565b90506112aa81611959565b5060010161125e565b508160076000828254610859919061213a565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611350573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137491906120b9565b6113aa576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113b6600a8383611c0f565b505050565b60008181526002602052604090205460609073ffffffffffffffffffffffffffffffffffffffff1661146f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006064820152608401610649565b6000611479611a26565b9050600081511161149957604051806020016040528060008152506114c4565b806114a384611a35565b6040516020016114b4929190612151565b6040516020818303038152906040525b9392505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611555573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157991906120b9565b6115af576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60065460ff16611662576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610649565b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b73ffffffffffffffffffffffffffffffffffffffff8216611754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610649565b60008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff16156117e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610649565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805460019290611816908490612105565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60065460ff1615611906576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610649565b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586116ad3390565b600061196482610cd9565b9050611971600083611b6f565b73ffffffffffffffffffffffffffffffffffffffff811660009081526003602052604081208054600192906119a790849061213a565b909155505060008281526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555183919073ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6060600a805461051990612065565b606081611a7557505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611a9f5780611a8981612180565b9150611a989050600a836121e8565b9150611a79565b60008167ffffffffffffffff811115611aba57611aba611f0a565b6040519080825280601f01601f191660200182016040528015611ae4576020820181803683370190505b5090505b8415611b6757611af960018361213a565b9150611b06600a866121fc565b611b11906030612105565b60f81b818381518110611b2657611b26612210565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611b60600a866121e8565b9450611ae8565b949350505050565b600081815260046020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091558190611bc982610cd9565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b828054611c1b90612065565b90600052602060002090601f016020900481019282611c3d5760008555611ca1565b82601f10611c74578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00823516178555611ca1565b82800160010185558215611ca1579182015b82811115611ca1578235825591602001919060010190611c86565b50611cad929150611cb1565b5090565b5b80821115611cad5760008155600101611cb2565b600060208284031215611cd857600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146114c457600080fd5b60005b83811015611d23578181015183820152602001611d0b565b83811115611d32576000848401525b50505050565b6020815260008251806020840152611d57816040850160208701611d08565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b600060208284031215611d9b57600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff81168114611dc457600080fd5b50565b60008060408385031215611dda57600080fd5b8235611de581611da2565b946020939093013593505050565b600080600060608486031215611e0857600080fd5b8335611e1381611da2565b92506020840135611e2381611da2565b929592945050506040919091013590565b600060208284031215611e4657600080fd5b81356114c481611da2565b60008060208385031215611e6457600080fd5b823567ffffffffffffffff80821115611e7c57600080fd5b818501915085601f830112611e9057600080fd5b813581811115611e9f57600080fd5b866020828501011115611eb157600080fd5b60209290920196919550909350505050565b8015158114611dc457600080fd5b60008060408385031215611ee457600080fd5b8235611eef81611da2565b91506020830135611eff81611ec3565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060008060808587031215611f4f57600080fd5b8435611f5a81611da2565b93506020850135611f6a81611da2565b925060408501359150606085013567ffffffffffffffff80821115611f8e57600080fd5b818701915087601f830112611fa257600080fd5b813581811115611fb457611fb4611f0a565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715611ffa57611ffa611f0a565b816040528281528a602084870101111561201357600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000806040838503121561204a57600080fd5b823561205581611da2565b91506020830135611eff81611da2565b600181811c9082168061207957607f821691505b602082108114156120b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156120cb57600080fd5b81516114c481611ec3565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115612118576121186120d6565b500190565b60006020828403121561212f57600080fd5b81516114c481611da2565b60008282101561214c5761214c6120d6565b500390565b60008351612163818460208801611d08565b835190830190612177818360208801611d08565b01949350505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156121b2576121b26120d6565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826121f7576121f76121b9565b500490565b60008261220b5761220b6121b9565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea2646970667358221220ffdd83a2fc9a158347ca248f021e63fcef3a7985b3deb793f75cd1835b068aab64736f6c634300080a003360a060405234801561001057600080fd5b506040516106ca3803806106ca83398101604081905261002f9161006c565b60009190915560ff166080526001805460506001600160501b031991821681179092556004805490911690911790554260028190556003556100a2565b6000806040838503121561007f57600080fd5b82519150602083015160ff8116811461009757600080fd5b809150509250929050565b60805161060e6100bc600039600060d3015261060e6000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80639a6fc8f511610081578063d62ada111161005b578063d62ada11146102dc578063f7a30806146102f4578063feaf968c1461030757600080fd5b80639a6fc8f5146101cd578063bd18ad531461023a578063cd653afc1461024d57600080fd5b806354fd4d50116100b257806354fd4d501461012d57806367e8d83d1461013c5780637284e4161461018e57600080fd5b8063313ce567146100ce5780633fd0875f1461010c575b600080fd5b6100f57f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020015b60405180910390f35b6004546a0100000000000000000000900460ff166040516101039190610441565b60405160018152602001610103565b61018c61014a366004610482565b600480549115156c01000000000000000000000000027fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff909216919091179055565b005b604080518082018252600c81527f7072696365206f7261636c6500000000000000000000000000000000000000006020820152905161010391906104ab565b6102036101db36600461053d565b60015460005460025460035460045469ffffffffffffffffffff948516941691939590929450565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610103565b61018c610248366004610558565b61030f565b61018c61025b366004610579565b6001805469ffffffffffffffffffff9586167fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090911617905560029290925560035560048054919092167fffffffffffffffffffffffffffffffffffffffff00ff00000000000000000000909116176b020000000000000000000000179055565b6102e461035f565b6040519015158152602001610103565b61018c6103023660046105bf565b600055565b610203610385565b600480548291907fffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff166b01000000000000000000000083600281111561035757610357610412565b021790555050565b600454600090610380906b010000000000000000000000900460ff166103d6565b905090565b60008060008060006004600c9054906101000a900460ff16156103a757600080fd5b505060015460005460025460035460045469ffffffffffffffffffff9485169893975091955093509190911690565b600060028260028111156103ec576103ec610412565b14156103f757600080fd5b600182600281111561040b5761040b610412565b1492915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016006831061047c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561049457600080fd5b813580151581146104a457600080fd5b9392505050565b600060208083528351808285015260005b818110156104d8578581018301518582016040015282016104bc565b818111156104ea576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803569ffffffffffffffffffff8116811461053857600080fd5b919050565b60006020828403121561054f57600080fd5b6104a48261051e565b60006020828403121561056a57600080fd5b8135600381106104a457600080fd5b6000806000806080858703121561058f57600080fd5b6105988561051e565b935060208501359250604085013591506105b46060860161051e565b905092959194509250565b6000602082840312156105d157600080fd5b503591905056fea264697066735822122014874f7a973b86501c4c1a8be32490fe902c8f088ee234d25f9b2497e19f9e5264736f6c634300080a0033a2646970667358221220d8fdaadc825c43ac2783715ebcfe33e7b0ce3a396ac7717d65e4c95e98b6cf7f64736f6c634300080a003360806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d000117905534801561003957600080fd5b50600054604080516318caf8e360e31b815273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660048083019190915260248201929092526044810191909152632aa9a2a960e11b6064820152620100009091046001600160a01b03169063c657c71890608401600060405180830381600087803b1580156100ba57600080fd5b505af11580156100ce573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b81527390f79bf6eb2c4f870365e785982e1f101e93b90660048201526024810191909152600660448201526511949251539160d21b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561014f57600080fd5b505af1158015610163573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b8152733c44cdddb6a900fa2b585dd299e03d12fa4293bc60048201526024810191909152600a6044820152692624a8aaa4a220aa27a960b11b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b1580156101e857600080fd5b505af11580156101fc573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b815273c4375b7de8af5a38a93548eb8453a498222c4ff260048201526024810191909152600c60448201526b44554d425f4144445245535360a01b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561028357600080fd5b505af1158015610297573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b8152739965507d1a55bcc2695c58ba16fb37d819b0a4dc60048201526024810191909152600760448201526620a220a82a22a960c91b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561031957600080fd5b505af115801561032d573d6000803e3d6000fd5b505050506102a6806103406000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063ba414fa61461003b578063fa7626d414610057575b600080fd5b610043610064565b604051901515815260200160405180910390f35b6000546100439060ff1681565b60008054610100900460ff16156100845750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156101bf5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610129917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016101ff565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526101619161023b565b6000604051808303816000865af19150503d806000811461019e576040519150601f19603f3d011682016040523d82523d6000602084013e6101a3565b606091505b50915050808060200190518101906101bb919061024e565b9150505b919050565b6000815160005b818110156101e557602081850181015186830152016101cb565b818111156101f4576000828601525b509290920192915050565b7fffffffff0000000000000000000000000000000000000000000000000000000083168152600061023360048301846101c4565b949350505050565b600061024782846101c4565b9392505050565b60006020828403121561026057600080fd5b8151801515811461024757600080fdfea2646970667358221220293f55a0ef7b60c31a89dbc50e3339c80a8fdb1f9567614b200e97598226671f64736f6c634300080a003360806040523480156200001157600080fd5b506040516201110538038062011105833981016040819052620000349162000811565b6200003f3362000734565b6040516200004d9062000784565b604051809103906000f0801580156200006a573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b039283169081179091556040516310dc138160e31b81529184166004830152906386e09c0890602401600060405180830381600087803b158015620000c457600080fd5b505af1158015620000d9573d6000803e3d6000fd5b50506001546040516301ed651160e41b81526001600160a01b0385811660048301529091169250631ed651109150602401600060405180830381600087803b1580156200012557600080fd5b505af11580156200013a573d6000803e3d6000fd5b505050506040516200014c9062000792565b604051809103906000f08015801562000169573d6000803e3d6000fd5b50600280546001600160a01b0319166001600160a01b039283169081179091556001546040516376aad60560e01b81526004810192909252909116906376aad60590602401600060405180830381600087803b158015620001c957600080fd5b505af1158015620001de573d6000803e3d6000fd5b5050600154604051600093506001600160a01b0390911691506200020290620007a0565b6001600160a01b039091168152602001604051809103906000f0801580156200022f573d6000803e3d6000fd5b5060015460405163338f12b960e21b81526001600160a01b03808416600483015292935091169063ce3c4ae490602401600060405180830381600087803b1580156200027a57600080fd5b505af11580156200028f573d6000803e3d6000fd5b5050600154604051600093506001600160a01b039091169150620002b390620007ae565b6001600160a01b039091168152602001604051809103906000f080158015620002e0573d6000803e3d6000fd5b5060015460405163c5120b3960e01b81526001600160a01b03808416600483015292935091169063c5120b3990602401600060405180830381600087803b1580156200032b57600080fd5b505af115801562000340573d6000803e3d6000fd5b5050600154604051606093506001600160a01b03909116915082906200036690620007bc565b6200037392919062000849565b604051809103906000f08015801562000390573d6000803e3d6000fd5b50600380546001600160a01b0319166001600160a01b0392831690811790915560015460405163530e784f60e01b815260048101929092529091169063530e784f90602401600060405180830381600087803b158015620003f057600080fd5b505af115801562000405573d6000803e3d6000fd5b5050600154604051600093506001600160a01b0390911691506200042990620007ca565b6001600160a01b039091168152602001604051809103906000f08015801562000456573d6000803e3d6000fd5b506001546040516356ee0d3b60e11b81526001600160a01b03808416600483015292935091169063addc1a7690602401600060405180830381600087803b158015620004a157600080fd5b505af1158015620004b6573d6000803e3d6000fd5b5050600154604051600093506001600160a01b039091169150620004da90620007d8565b6001600160a01b039091168152602001604051809103906000f08015801562000507573d6000803e3d6000fd5b506001546040516321da583760e01b81526001600160a01b0380841660048301529293509116906321da583790602401600060405180830381600087803b1580156200055257600080fd5b505af115801562000567573d6000803e3d6000fd5b505050506000306040516200057c90620007e6565b6001600160a01b039091168152602001604051809103906000f080158015620005a9573d6000803e3d6000fd5b50600154604051631795d5b360e31b81526001600160a01b03808416600483015292935091169063bcaead9890602401600060405180830381600087803b158015620005f457600080fd5b505af115801562000609573d6000803e3d6000fd5b505060405163f2fde38b60e01b81523360048201526001600160a01b038416925063f2fde38b9150602401600060405180830381600087803b1580156200064f57600080fd5b505af115801562000664573d6000803e3d6000fd5b505060015460405163f2fde38b60e01b81523360048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b158015620006ae57600080fd5b505af1158015620006c3573d6000803e3d6000fd5b505060025460405163f2fde38b60e01b81523360048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b1580156200070d57600080fd5b505af115801562000722573d6000803e3d6000fd5b505050505050505050505050620008b2565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610fcd80620010dd83390190565b61098c80620020aa83390190565b610f508062002a3683390190565b614da6806200398683390190565b611b45806200872c83390190565b612ced806200a27183390190565b611627806200cf5e83390190565b612b80806200e58583390190565b80516001600160a01b03811681146200080c57600080fd5b919050565b600080604083850312156200082557600080fd5b6200083083620007f4565b91506200084060208401620007f4565b90509250929050565b6001600160a01b0383811682526040602080840182905284518483018190526000938683019290916060870190865b81811015620008a3578551805186168452840151851684840152948301949186019160010162000878565b50909998505050505050505050565b61081b80620008c26000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80638874ff1f1161005b5780638874ff1f146100f55780638da5cb5b14610108578063de28735914610126578063f2fde38b1461014657600080fd5b80632630c12f146100825780632954018c146100cb578063715018a6146100eb575b600080fd5b6003546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6001546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b6100f3610159565b005b6100f3610103366004610658565b6101eb565b60005473ffffffffffffffffffffffffffffffffffffffff166100a2565b6002546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b6100f3610154366004610734565b6103e3565b60005473ffffffffffffffffffffffffffffffffffffffff1633146101df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6101e96000610513565b565b60005473ffffffffffffffffffffffffffffffffffffffff16331461026c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101d6565b60005b815181101561035c57600354825173ffffffffffffffffffffffffffffffffffffffff9091169063e8a97a3e908490849081106102ae576102ae610756565b6020026020010151600001518484815181106102cc576102cc610756565b6020026020010151602001516040518363ffffffff1660e01b815260040161031792919073ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b600060405180830381600087803b15801561033157600080fd5b505af1158015610345573d6000803e3d6000fd5b50505050808061035490610785565b91505061026f565b506002546040517ff2fde38b00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063f2fde38b90602401600060405180830381600087803b1580156103c857600080fd5b505af11580156103dc573d6000803e3d6000fd5b5050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101d6565b73ffffffffffffffffffffffffffffffffffffffff8116610507576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016101d6565b61051081610513565b50565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156105da576105da610588565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561062757610627610588565b604052919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461065357600080fd5b919050565b6000602080838503121561066b57600080fd5b823567ffffffffffffffff8082111561068357600080fd5b818501915085601f83011261069757600080fd5b8135818111156106a9576106a9610588565b6106b7848260051b016105e0565b818152848101925060069190911b8301840190878211156106d757600080fd5b928401925b8184101561072957604084890312156106f55760008081fd5b6106fd6105b7565b6107068561062f565b815261071386860161062f565b81870152835260409390930192918401916106dc565b979650505050505050565b60006020828403121561074657600080fd5b61074f8261062f565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156107de577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea26469706673582212205ee75e57bb635aa49a1758f4ab0b04182a73115bff08f420c56a8ddb433c029364736f6c634300080a0033608060405234801561001057600080fd5b5061001a3361005f565b60405130906f20a2222922a9a9afa82927ab24a222a960811b907fb37614c7d254ea8d16eb81fa11dddaeb266aa8ba4917980859c7740aff30c69190600090a36100af565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610f0f806100be6000396000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c806377532ed9116100e3578063bcaead981161008c578063ce3c4ae411610066578063ce3c4ae414610308578063f2fde38b1461031b578063fca513a81461032e57600080fd5b8063bcaead98146102da578063c5120b39146102ed578063c513c9bb1461030057600080fd5b80639068a868116100bd5780639068a868146102b7578063addc1a76146102bf578063affd9243146102d257600080fd5b806377532ed91461027e57806386e09c08146102865780638da5cb5b1461029957600080fd5b80634c252f9111610145578063699f200f1161011f578063699f200f1461022d578063715018a61461026357806376aad6051461026b57600080fd5b80634c252f91146101fc578063530e784f1461020457806354fd4d501461021757600080fd5b80631ed65110116101765780631ed65110146101cc57806321da5837146101e157806326c74fc3146101f457600080fd5b8063060678c21461019257806308737695146101c4575b600080fd5b61019a610336565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61019a610366565b6101df6101da366004610e10565b610391565b005b6101df6101ef366004610e10565b610444565b61019a6104ef565b61019a61051a565b6101df610212366004610e10565b610545565b61021f600281565b6040519081526020016101bb565b61019a61023b366004610e4d565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6101df6105f0565b6101df610279366004610e10565b61067d565b61019a610728565b6101df610294366004610e10565b610753565b60005473ffffffffffffffffffffffffffffffffffffffff1661019a565b61019a6107fe565b6101df6102cd366004610e10565b610829565b61019a6108d4565b6101df6102e8366004610e10565b6108ff565b6101df6102fb366004610e10565b6109aa565b61019a610a55565b6101df610316366004610e10565b610a80565b6101df610329366004610e10565b610b2b565b61019a610c58565b60006103617f444154415f434f4d50524553534f520000000000000000000000000000000000610c7f565b905090565b60006103617f41434c0000000000000000000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610417576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6104417f54524541535552595f434f4e545241435400000000000000000000000000000082610d1d565b50565b60005473ffffffffffffffffffffffffffffffffffffffff1633146104c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f574554485f47415445574159000000000000000000000000000000000000000082610d1d565b60006103617f54524541535552595f434f4e5452414354000000000000000000000000000000610c7f565b60006103617f574554485f544f4b454e00000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f50524943455f4f5241434c45000000000000000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610671576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b61067b6000610d9b565b565b60005473ffffffffffffffffffffffffffffffffffffffff1633146106fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f41434c000000000000000000000000000000000000000000000000000000000082610d1d565b60006103617f574554485f474154455741590000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146107d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f574554485f544f4b454e0000000000000000000000000000000000000000000082610d1d565b60006103617f4143434f554e545f464143544f52590000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146108aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f4143434f554e545f464143544f5259000000000000000000000000000000000082610d1d565b60006103617f474541525f544f4b454e00000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610980576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f474541525f544f4b454e0000000000000000000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f444154415f434f4d50524553534f52000000000000000000000000000000000082610d1d565b60006103617f434f4e5452414354535f52454749535445520000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610b01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f434f4e5452414354535f5245474953544552000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610bac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b73ffffffffffffffffffffffffffffffffffffffff8116610c4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161040e565b61044181610d9b565b60006103617f50524943455f4f5241434c4500000000000000000000000000000000000000005b6000818152600160209081526040808320548151808301909252600382527f41503100000000000000000000000000000000000000000000000000000000009282019290925273ffffffffffffffffffffffffffffffffffffffff9091169081610d16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040e9190610e66565b5092915050565b60008281526001602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091559051909184917fb37614c7d254ea8d16eb81fa11dddaeb266aa8ba4917980859c7740aff30c6919190a35050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215610e2257600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610e4657600080fd5b9392505050565b600060208284031215610e5f57600080fd5b5035919050565b600060208083528351808285015260005b81811015610e9357858101830151858201604001528201610e77565b81811115610ea5576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea264697066735822122083c228af017c6f5cf8c395cdf7a53276ff56fdd4f4313c39f680ab73bd75417364736f6c634300080a0033608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61090e8061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063732818191161008c578063adce758d11610066578063adce758d14610215578063ba306df114610228578063d4eb5db01461023b578063f2fde38b1461027457600080fd5b806373281819146101b7578063819ad68e146101da5780638da5cb5b146101ed57600080fd5b806354fd4d50116100bd57806354fd4d501461016a5780635f259aba14610180578063715018a6146101af57600080fd5b806335914829146100e45780633a41ec641461011c5780634910832f14610155575b600080fd5b6101076100f236600461089b565b60016020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61010761012a36600461089b565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205460ff1690565b61016861016336600461089b565b610287565b005b610172600181565b604051908152602001610113565b61010761018e36600461089b565b60005473ffffffffffffffffffffffffffffffffffffffff91821691161490565b610168610387565b6101076101c536600461089b565b60026020526000908152604090205460ff1681565b6101686101e836600461089b565b610414565b60005460405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610113565b61016861022336600461089b565b61050c565b61016861023636600461089b565b610601565b61010761024936600461089b565b73ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205460ff1690565b61016861028236600461089b565b6106f6565b60005473ffffffffffffffffffffffffffffffffffffffff16331461030d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909217909155517fae26b1cfe9454ba87274a4e8330b6654684362d0f3d7bbd17f7449a1d38387c69190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610408576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b6104126000610826565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517fd400da6c0c0a894dacc0981730b88af0545d00272ee8fff1437bf560ff245fc49190a250565b60005473ffffffffffffffffffffffffffffffffffffffff16331461058d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f1998397e7203f7baca9d6f41b9e4da6e768daac5caad4234fb9bf5869d2715459190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610682576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526001602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f28b01395b7e25d20552a0c8dc8ecd3b1d4abc986f14dad7885fd45b6fd73c8d99190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811661081a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610304565b61082381610826565b50565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156108ad57600080fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146108d157600080fd5b939250505056fea26469706673582212204712efbfe997070def77285a5b8753bc882b62da2133ce1937ad26cd2b48e49864736f6c634300080a003360a060405234801561001057600080fd5b50604051610f50380380610f5083398101604081905261002f916100d7565b6000805460ff19169055806001600160a01b03811661006157604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa15801561009f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100c391906100d7565b6001600160a01b0316608052506101079050565b6000602082840312156100e957600080fd5b81516001600160a01b038116811461010057600080fd5b9392505050565b608051610e1261013e600039600081816101e2015281816102b20152818161040f0152818161057801526108510152610e126000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80638456cb5911610097578063b4ac686011610066578063b4ac686014610217578063c29277cd1461021f578063d914cd4b14610227578063e26b2f631461023a57600080fd5b80638456cb59146101cd57806394144856146101d5578063a50cf2c8146101dd578063ac4afa381461020457600080fd5b80635b16ebb7116100d35780635b16ebb7146101575780635c975abb1461018a578063673a2a1f146101955780636fbc6f6b146101aa57600080fd5b80631e16e4fc146100fa5780633f4ba83a1461013757806354fd4d5014610141575b600080fd5b61010d610108366004610c97565b61024d565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61013f610284565b005b610149600181565b60405190815260200161012e565b61017a610165366004610cb0565b60026020526000908152604090205460ff1681565b604051901515815260200161012e565b60005460ff1661017a565b61019d610372565b60405161012e9190610ced565b61017a6101b8366004610cb0565b60046020526000908152604090205460ff1681565b61013f6103e1565b61019d6104cd565b61010d7f000000000000000000000000000000000000000000000000000000000000000081565b61010d610212366004610c97565b61053a565b600154610149565b600354610149565b61013f610235366004610cb0565b61054a565b61013f610248366004610cb0565b610823565b6003818154811061025d57600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa15801561030e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103329190610d47565b610368576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610370610af6565b565b606060018054806020026020016040519081016040528092919081815260200182805480156103d757602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116103ac575b5050505050905090565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561046b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048f9190610d47565b6104c5576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610370610bd7565b606060038054806020026020016040519081016040528092919081815260200182805480156103d75760200282019190600052602060002090815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116103ac575050505050905090565b6001818154811061025d57600080fd5b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156105d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f89190610d47565b61062e576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051808201909152600281527f5a30000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff82166106b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b60405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff8116600090815260026020908152604091829020548251808401909352600383527f43523100000000000000000000000000000000000000000000000000000000009183019190915260ff1615610753576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b506001805480820182557fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915560008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909417909355915190917ff816b5143086c89d103a0683286be86c2b741e83ebfa75135aae606e2f5c6e5391a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156108ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d19190610d47565b610907576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051808201909152600281527f5a30000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8216610989576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b5073ffffffffffffffffffffffffffffffffffffffff8116600090815260046020908152604091829020548251808401909352600383527f43523200000000000000000000000000000000000000000000000000000000009183019190915260ff1615610a23576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b506003805460018082019092557fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915560008181526004602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909417909355915190917f58ad3cfc4b6552a53c8c4128ae9b080e14b4378a159280643a62c6f709cee24f91a250565b60005460ff16610b62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016106b0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff1615610c44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016106b0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610bad3390565b600060208284031215610ca957600080fd5b5035919050565b600060208284031215610cc257600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610ce657600080fd5b9392505050565b6020808252825182820181905260009190848201906040850190845b81811015610d3b57835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101610d09565b50909695505050505050565b600060208284031215610d5957600080fd5b81518015158114610ce657600080fd5b600060208083528351808285015260005b81811015610d9657858101830151858201604001528201610d7a565b81811115610da8576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea26469706673582212208f2d91c863db9ab1494a9c5db20e3fddc4b6c779ea3c3621737c105c60d9440a64736f6c634300080a003360e06040523480156200001157600080fd5b5060405162004da638038062004da6833981016040819052620000349162000160565b6001600160a01b0381166200005c57604051635919af9760e11b815260040160405180910390fd5b6001600160a01b03811660808190526040805163c513c9bb60e01b8152905163c513c9bb916004808201926020929091908290030181865afa158015620000a7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cd919062000160565b6001600160a01b031660a0816001600160a01b0316815250506080516001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000127573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200014d919062000160565b6001600160a01b031660c0525062000192565b6000602082840312156200017357600080fd5b81516001600160a01b03811681146200018b57600080fd5b9392505050565b60805160a05160c051614b896200021d6000396000818161018801528181611c4f0152612c5a0152600081816101ed015281816115e201528181611f5f0152818161213f0152818161223f0152818161243801528181612604015281816126bc01528181612788015281816129a501528181613c410152613d000152600061013c0152614b896000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c806354fd4d5011610081578063a80deda31161005b578063a80deda31461020f578063ae093f3f1461022f578063fc9914cb1461024f57600080fd5b806354fd4d50146101bd578063663b8fdb146101d35780637a0c7b21146101e857600080fd5b80632954018c116100b25780632954018c146101375780634b2f336d146101835780634c472fc9146101aa57600080fd5b80630dbd616d146100d957806313d21cdf146101025780631bcd8fc014610122575b600080fd5b6100ec6100e73660046140fc565b610272565b6040516100f9919061430b565b60405180910390f35b61011561011036600461431e565b6114d4565b6040516100f99190614444565b61012a611f59565b6040516100f99190614453565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100f9565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b61015e6101b83660046140fc565b6121f5565b6101c5600281565b6040519081526020016100f9565b6101db612432565b6040516100f991906146ea565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b61022261021d36600461431e565b6126b5565b6040516100f9919061476a565b61024261023d36600461431e565b612a75565b6040516100f991906147dd565b61026261025d3660046140fc565b613bf7565b60405190151581526020016100f9565b61035f604051806102400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160008152602001606081526020016000815260200160008152602001600015158152602001600081526020016000815260200160008152602001600060ff168152602001600081525090565b600080600080600061037088613cf4565b509450945094509450945060008560ff1660011461041d576040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015284169063e958b70490602401602060405180830381865afa1580156103f4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061041891906147f0565b6104ad565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015286169063e958b70490602401602060405180830381865afa158015610489573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ad91906147f0565b60ff8716610200890181905273ffffffffffffffffffffffffffffffffffffffff808b1660208b01528b811660608b015282168952909150600114156109e9578473ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610538573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055c91906147f0565b73ffffffffffffffffffffffffffffffffffffffff90811660808901526040517fc7de38a600000000000000000000000000000000000000000000000000000000815282821660048201529085169063c7de38a690602401602060405180830381865afa1580156105d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f5919061480d565b60c08801526040517fdfd5946500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015285169063dfd5946590602401602060405180830381865afa158015610666573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068a919061480d565b60e08801526040517f3ce0735500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015260006024830152861690633ce0735590604401602060405180830381865afa92505050801561073c575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526107399181019061480d565b60015b6107455761074c565b6101408801525b6040517f3ce0735500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015260016024830152861690633ce0735590604401602060405180830381865afa9250505080156107f9575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526107f69181019061480d565b60015b61080257610809565b6101608801525b60c08701516040517f996329f800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526024820192909252600060448201529086169063996329f89060640160a060405180830381865afa9250505080156108c4575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526108c191810190614826565b60015b6108cd576108da565b505015156101808a015250505b8073ffffffffffffffffffffffffffffffffffffffff16631afbb7a46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610925573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610949919061480d565b6101a08801526040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152851690633192195c90602401602060405180830381865afa1580156109bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109df919061480d565b60a0880152610c26565b8273ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5891906147f0565b73ffffffffffffffffffffffffffffffffffffffff90811660808901526040517fc7de38a600000000000000000000000000000000000000000000000000000000815282821660048201529083169063c7de38a6906024016040805180830381865afa158015610acc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af09190614866565b5060c08801526040517fdfd5946500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015283169063dfd5946590602401602060405180830381865afa158015610b62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b86919061480d565b60e08801526040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152841690633192195c906024016040805180830381865afa158015610bf6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1a9190614866565b60a08901526101a08801525b60008660ff16600114610ca7578373ffffffffffffffffffffffffffffffffffffffff166316f0115b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca291906147f0565b610d16565b8573ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1691906147f0565b90508073ffffffffffffffffffffffffffffffffffffffff166345d31f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d87919061480d565b6101008901526000600160ff891614610e0e578473ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610de5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e09919061480d565b610e7d565b8573ffffffffffffffffffffffffffffffffffffffff166320a05ff76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7d919061480d565b90508760ff16600114610f1f576040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152861690638991b2f190602401602060405180830381865afa158015610ef6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1a919061480d565b610faf565b6040517fb451cecc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015287169063b451cecc90602401602060405180830381865afa158015610f8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610faf919061480d565b6102208a01528067ffffffffffffffff811115610fce57610fce61488a565b60405190808252806020026020018201604052801561103e57816020015b6040805160808101825260008082526020808301829052928201819052606082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181610fec5790505b506101208a015260005b818110156113d657604080516080810182526000808252602082018190529181018290526060810191909152600180831b9060ff8c1614156111c5576040517faf0a650200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018590528a169063af0a650290604401608060405180830381865afa1580156110f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111b91906148b9565b5050602084015273ffffffffffffffffffffffffffffffffffffffff9081168084526040517ff9eaee0d0000000000000000000000000000000000000000000000000000000081526004810191909152908a169063f9eaee0d90602401602060405180830381865afa158015611195573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b9919061490d565b15156040830152611388565b6040517f172c48c70000000000000000000000000000000000000000000000000000000081526004810184905273ffffffffffffffffffffffffffffffffffffffff89169063172c48c7906024016040805180830381865afa15801561122f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112539190614928565b5073ffffffffffffffffffffffffffffffffffffffff9081168084526040517f70a082310000000000000000000000000000000000000000000000000000000081529188166004830152906370a0823190602401602060405180830381865afa1580156112c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e8919061480d565b602083015281516040517ff9eaee0d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529088169063f9eaee0d90602401602060405180830381865afa15801561135c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611380919061490d565b151560408301525b6102208c015181161561139c57600161139f565b60005b151560608301526101208c01518051839190859081106113c1576113c161495e565b60209081029190910101525050600101611048565b508273ffffffffffffffffffffffffffffffffffffffff166317d11a156040518163ffffffff1660e01b8152600401602060405180830381865afa158015611422573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611446919061480d565b896101c00181815250508273ffffffffffffffffffffffffffffffffffffffff16633dc54b406040518163ffffffff1660e01b8152600401602060405180830381865afa15801561149b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bf919061480d565b6101e08a015250969998505050505050505050565b61159b604051806102000160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600060ff1681525090565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015283917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa15801561162b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164f919061490d565b611685576040517fd384b23800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316808352604080517ffe14112d000000000000000000000000000000000000000000000000000000008152905185929163fe14112d9160048083019260209291908290030181865afa1580156116f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611719919061480d565b8360c00181815250508073ffffffffffffffffffffffffffffffffffffffff1663ef8d96036040518163ffffffff1660e01b8152600401602060405180830381865afa15801561176d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611791919061480d565b8360e00181815250508073ffffffffffffffffffffffffffffffffffffffff1663743753596040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611809919061480d565b8360a00181815250508073ffffffffffffffffffffffffffffffffffffffff16634c19386c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561185d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611881919061480d565b836101000181815250508073ffffffffffffffffffffffffffffffffffffffff1663788c6bfe6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fa919061480d565b836101600181815250508073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561194f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611973919061480d565b8360800181815250508073ffffffffffffffffffffffffffffffffffffffff166345d31f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119eb919061480d565b836101400181815250508073ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6491906147f0565b836040019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff166336dda7d56040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0a91906147f0565b836060019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663788c6bfe6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb0919061480d565b836101600181815250508073ffffffffffffffffffffffffffffffffffffffff1663e941fa786040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c29919061480d565b61018084015260408084015173ffffffffffffffffffffffffffffffffffffffff9081167f000000000000000000000000000000000000000000000000000000000000000082161460208087019190915282517f609ae31700000000000000000000000000000000000000000000000000000000815292519184169263609ae31792600480830193928290030181865afa158015611ccb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cef919061480d565b836101c00181815250508073ffffffffffffffffffffffffffffffffffffffff1663dbcb313b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d68919061480d565b836101a00181815250506000836060015173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de7919061480d565b6040517f5427c9380000000000000000000000000000000000000000000000000000000081526004810182905290915060009073ffffffffffffffffffffffffffffffffffffffff841690635427c93890602401602060405180830381865afa158015611e58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7c919061480d565b90508015611ec7576101808501518190611eb890611e9c906127106149bc565b876101000151886101400151611eb291906149d3565b90613fd0565b611ec29190614a3f565b611ece565b8461014001515b856101200181815250508273ffffffffffffffffffffffffffffffffffffffff166354fd4d506040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f47919061480d565b60ff166101e086015250505050919050565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b4ac68606040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fec919061480d565b90508067ffffffffffffffff8111156120075761200761488a565b6040519080825280602002602001820160405280156120ff57816020015b6120ec604051806102000160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600060ff1681525090565b8152602001906001900390816120255790505b50915060005b818110156121f0576040517fac4afa38000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ac4afa3890602401602060405180830381865afa15801561219b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121bf91906147f0565b90506121ca816114d4565b8483815181106121dc576121dc61495e565b602090810291909101015250600101612105565b505090565b6040517f6fbc6f6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015260009184917f00000000000000000000000000000000000000000000000000000000000000001690636fbc6f6b90602401602060405180830381865afa158015612286573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122aa919061490d565b6122e0576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060006122ee87613cf4565b5050935093505092508260ff16600114612397576040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015282169063fdd5764590602401602060405180830381865afa15801561236e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061239291906147f0565b612427565b6040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015283169063fdd5764590602401602060405180830381865afa158015612403573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061242791906147f0565b979650505050505050565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c29277cd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124c5919061480d565b90508067ffffffffffffffff8111156124e0576124e061488a565b6040519080825280602002602001820160405280156125c457816020015b60408051610260810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083018290526101208301819052610140830181905261016083015261018082018190526101a082018190526101c082018190526101e082018190526102008201819052610220820181905261024082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816124fe5790505b50915060005b818110156121f0576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa158015612660573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061268491906147f0565b905061268f81612a75565b8483815181106126a1576126a161495e565b6020908102919091010152506001016125ca565b60606000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c29277cd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612725573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612749919061480d565b905060005b81811015612829576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa1580156127e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061280891906147f0565b90506128148187613bf7565b15612820578360010193505b5060010161274e565b508167ffffffffffffffff8111156128435761284361488a565b60405190808252806020026020018201604052801561296157816020015b61294e604051806102400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160008152602001606081526020016000815260200160008152602001600015158152602001600081526020016000815260200160008152602001600060ff168152602001600081525090565b8152602001906001900390816128615790505b5092506000915060005b81811015612a6d576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa158015612a01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a2591906147f0565b9050612a318187613bf7565b15612a6457612a408187610272565b858581518110612a5257612a5261495e565b60209081029190910101526001909301925b5060010161296b565b505050919050565b604080516102608101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082018390526101208201819052610140820181905261016082015261018081018290526101a081018290526101c081018290526101e08101829052610200810182905261022081018290526102408101829052908080808080612b1b88613cf4565b73ffffffffffffffffffffffffffffffffffffffff8e168d5260ff86166101808e01819052959b50939950919750955093509150600114612bca578273ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ba1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bc591906147f0565b612c39565b8473ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c3991906147f0565b73ffffffffffffffffffffffffffffffffffffffff908116602089018190527f00000000000000000000000000000000000000000000000000000000000000009091161460408801526000600160ff881614612d03578373ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cfe91906147f0565b612d72565b8573ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d7291906147f0565b6040517f2e97ca2100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b8116600483015291925090821690632e97ca2190602401602060405180830381865afa158015612de2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e06919061490d565b15156060890152604080517f45d31f9d000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff8316916345d31f9d9160048083019260209291908290030181865afa158015612e78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e9c919061480d565b8860800181815250508073ffffffffffffffffffffffffffffffffffffffff1663743753596040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ef0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f14919061480d565b610100890152600160ff88161415613017578573ffffffffffffffffffffffffffffffffffffffff16639b2cb5d86040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f95919061480d565b8860a00181815250508573ffffffffffffffffffffffffffffffffffffffff16635f48f3936040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fe9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061300d919061480d565b60c08901526130a5565b8273ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa158015613061573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130859190614a73565b6fffffffffffffffffffffffffffffffff90811660c08b01521660a08901525b60008760ff16600114613126578473ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613121919061480d565b613195565b8573ffffffffffffffffffffffffffffffffffffffff166320a05ff76040518163ffffffff1660e01b8152600401602060405180830381865afa158015613171573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613195919061480d565b90508067ffffffffffffffff8111156131b0576131b061488a565b6040519080825280602002602001820160405280156131d9578160200160208202803683370190505b506101208a01528067ffffffffffffffff8111156131f9576131f961488a565b604051908082528060200260200182016040528015613222578160200160208202803683370190505b506101608a015260005b818110156134c4578860ff16600114156133b4576040517f5e5f2e260000000000000000000000000000000000000000000000000000000081526004810182905260009073ffffffffffffffffffffffffffffffffffffffff891690635e5f2e2690602401602060405180830381865afa1580156132ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132d291906147f0565b9050808b610120015183815181106132ec576132ec61495e565b73ffffffffffffffffffffffffffffffffffffffff92831660209182029290920101526040517f78327438000000000000000000000000000000000000000000000000000000008152828216600482015290891690637832743890602401602060405180830381865afa158015613367573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061338b919061480d565b8b610160015183815181106133a2576133a261495e565b602002602001018181525050506134bc565b6040517f172c48c70000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff87169063172c48c7906024016040805180830381865afa15801561341e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134429190614928565b8061ffff1690508b610120015183815181106134605761346061495e565b602002602001018c6101600151848151811061347e5761347e61495e565b60200260200101828152508273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525050505b60010161322c565b5060008860ff16600114613546578373ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561351d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613541919061480d565b6135b5565b8673ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613591573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135b5919061480d565b90508067ffffffffffffffff8111156135d0576135d061488a565b60405190808252806020026020018201604052801561361557816020015b60408051808201909152600080825260208201528152602001906001900390816135ee5790505b506101408b015260005b818110156139015760408051808201909152600080825260208201528a60ff166001146136da576040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff871690635094cb4f90602401602060405180830381865afa1580156136b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136d591906147f0565b613769565b6040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff8a1690635094cb4f90602401602060405180830381865afa158015613745573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061376991906147f0565b73ffffffffffffffffffffffffffffffffffffffff168152600160ff8c16146138245780516040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529089169063fdd5764590602401602060405180830381865afa1580156137fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061381f91906147f0565b6138b7565b80516040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152908a169063fdd5764590602401602060405180830381865afa158015613893573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138b791906147f0565b73ffffffffffffffffffffffffffffffffffffffff1660208201526101408c01518051829190849081106138ed576138ed61495e565b60209081029190910101525060010161361f565b508860ff166001141561398f578773ffffffffffffffffffffffffffffffffffffffff1663b2c53a6c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613959573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061397d919061480d565b60e08b015260ff6102408b0152613be9565b73ffffffffffffffffffffffffffffffffffffffff85166101a08b01819052604080517f9408b63f0000000000000000000000000000000000000000000000000000000081529051639408b63f916004808201926020929091908290030181865afa158015613a02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a2691906147f0565b8a6101e0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508473ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015613aa9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613acd9190614aa6565b5015156102008c015250604080517f9fd12b77000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff881691639fd12b779160048083019260209291908290030181865afa158015613b42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b66919061480d565b8a6102200181815250508573ffffffffffffffffffffffffffffffffffffffff16638345f26e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bdf9190614af7565b60ff166102408b01525b505050505050505050919050565b6040517f6fbc6f6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015260009184917f00000000000000000000000000000000000000000000000000000000000000001690636fbc6f6b90602401602060405180830381865afa158015613c88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cac919061490d565b613ce2576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613cec8484614023565b949350505050565b600080600080600080867f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636fbc6f6b826040518263ffffffff1660e01b8152600401613d73919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa158015613d90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613db4919061490d565b613dea576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8773ffffffffffffffffffffffffffffffffffffffff166354fd4d506040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e59919061480d565b96508660ff1660011415613ee0578795508573ffffffffffffffffffffffffffffffffffffffff1663f93f515b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613eb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ed991906147f0565b9450613fc6565b8793508373ffffffffffffffffffffffffffffffffffffffff16632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f5291906147f0565b92508373ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fc391906147f0565b91505b5091939550919395565b6000821580613fdd575081155b15613fea5750600061401d565b612710613ff8600282614b1a565b61ffff1661400684866149d3565b6140109190614b3b565b61401a9190614a3f565b90505b92915050565b6040517f055ee9b500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600091829185169063055ee9b590602401602060405180830381865afa158015614094573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140b891906147f0565b73ffffffffffffffffffffffffffffffffffffffff1614159392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146140f957600080fd5b50565b6000806040838503121561410f57600080fd5b823561411a816140d7565b9150602083013561412a816140d7565b809150509250929050565b600081518084526020808501945080840160005b8381101561419f578151805173ffffffffffffffffffffffffffffffffffffffff168852838101518489015260408082015115159089015260609081015115159088015260809096019590820190600101614149565b509495945050505050565b805173ffffffffffffffffffffffffffffffffffffffff168252600061024060208301516141f0602086018273ffffffffffffffffffffffffffffffffffffffff169052565b506040830151614204604086018215159052565b50606083015161422c606086018273ffffffffffffffffffffffffffffffffffffffff169052565b506080830151614254608086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060a083015160a085015260c083015160c085015260e083015160e085015261010080840151818601525061012080840151828287015261429783870182614135565b92505050610140808401518186015250610160808401518186015250610180808401516142c78287018215159052565b50506101a083810151908501526101c080840151908501526101e080840151908501526102008084015160ff16908501526102209283015192909301919091525090565b60208152600061401a60208301846141aa565b60006020828403121561433057600080fd5b813561433b816140d7565b9392505050565b805173ffffffffffffffffffffffffffffffffffffffff168252602081015161436f602084018215159052565b506040810151614397604084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060608101516143bf606084018273ffffffffffffffffffffffffffffffffffffffff169052565b506080818101519083015260a0808201519083015260c0808201519083015260e08082015190830152610100808201519083015261012080820151908301526101408082015190830152610160808201519083015261018080820151908301526101a080820151908301526101c080820151908301526101e09081015160ff16910152565b610200810161401d8284614342565b6020808252825182820181905260009190848201906040850190845b8181101561449657614482838551614342565b92840192610200929092019160010161446f565b50909695505050505050565b600081518084526020808501945080840160005b8381101561419f57815173ffffffffffffffffffffffffffffffffffffffff16875295820195908201906001016144b6565b600081518084526020808501945080840160005b8381101561419f578151805173ffffffffffffffffffffffffffffffffffffffff9081168952908401511683880152604090960195908201906001016144fc565b600081518084526020808501945080840160005b8381101561419f57815187529582019590820190600101614551565b805173ffffffffffffffffffffffffffffffffffffffff168252600061026060208301516145b3602086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060408301516145c7604086018215159052565b5060608301516145db606086018215159052565b506080830151608085015260a083015160a085015260c083015160c085015260e083015160e0850152610100808401518186015250610120808401518282870152614628838701826144a2565b92505050610140808401518583038287015261464483826144e8565b925050506101608084015185830382870152614660838261453d565b92505050610180808401516146798287018260ff169052565b50506101a08381015173ffffffffffffffffffffffffffffffffffffffff908116918601919091526101c0808501511515908601526101e080850151909116908501526102008084015115159085015261022080840151908501526102409283015160ff1692909301919091525090565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561475d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc088860301845261474b85835161456d565b94509285019290850190600101614711565b5092979650505050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561475d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08886030184526147cb8583516141aa565b94509285019290850190600101614791565b60208152600061401a602083018461456d565b60006020828403121561480257600080fd5b815161433b816140d7565b60006020828403121561481f57600080fd5b5051919050565b600080600080600060a0868803121561483e57600080fd5b5050835160208501516040860151606087015160809097015192989197509594509092509050565b6000806040838503121561487957600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080600080608085870312156148cf57600080fd5b84516148da816140d7565b60208601516040870151606090970151919890975090945092505050565b8051801515811461490857600080fd5b919050565b60006020828403121561491f57600080fd5b61401a826148f8565b6000806040838503121561493b57600080fd5b8251614946816140d7565b602084015190925061ffff8116811461412a57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156149ce576149ce61498d565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614a0b57614a0b61498d565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614a4e57614a4e614a10565b500490565b80516fffffffffffffffffffffffffffffffff8116811461490857600080fd5b60008060408385031215614a8657600080fd5b614a8f83614a53565b9150614a9d60208401614a53565b90509250929050565b600080600060608486031215614abb57600080fd5b614ac484614a53565b9250614ad2602085016148f8565b9150604084015164ffffffffff81168114614aec57600080fd5b809150509250925092565b600060208284031215614b0957600080fd5b815160ff8116811461433b57600080fd5b600061ffff80841680614b2f57614b2f614a10565b92169190910492915050565b60008219821115614b4e57614b4e61498d565b50019056fea2646970667358221220d15108d0bec9cc6f3903875dd8412869a3da1b36661bdc780e2e2f0ae3136d2464736f6c634300080a003360a06040523480156200001157600080fd5b5060405162001b4538038062001b45833981016040819052620000349162000608565b6000805460ff19169055816001600160a01b0381166200006757604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cc91906200070a565b6001600160a01b031660805250805160005b818110156200014257620001398382815181106200010057620001006200072f565b6020026020010151600001518483815181106200012157620001216200072f565b6020026020010151602001516200014c60201b60201c565b600101620000de565b5050505062000822565b6001600160a01b03821615806200016a57506001600160a01b038116155b156200018957604051635919af9760e11b815260040160405180910390fd5b620001a8826001600160a01b0316620004ba60201b620006751760201c565b620001d65760405163df4c572d60e01b81526001600160a01b03831660048201526024015b60405180910390fd5b620001f5816001600160a01b0316620004ba60201b620006751760201c565b6200021f5760405163df4c572d60e01b81526001600160a01b0382166004820152602401620001cd565b806001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200027c575060408051601f3d908101601f19168201909252620002799181019062000745565b60015b6200029a576040516367a7cd4360e01b815260040160405180910390fd5b8060ff16600814620002bf576040516367a7cd4360e01b815260040160405180910390fd5b506000816001600160a01b031663d62ada116040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200031f575060408051601f3d908101601f191682019092526200031c918101906200076a565b60015b6200032a576200032d565b90505b6000836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200038c575060408051601f3d908101601f19168201909252620003899181019062000745565b60015b620003aa5760405163528ca31d60e01b815260040160405180910390fd5b60128160ff161115620003d05760405163528ca31d60e01b815260040160405180910390fd5b9050826001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa9250505080156200042f575060408051601f3d908101601f191682019092526200042c91810190620007a6565b60015b6200044d576040516367a7cd4360e01b815260040160405180910390fd5b8662000461576200046185858484620004c0565b5050505050620004748484848462000526565b826001600160a01b0316846001600160a01b03167fe263805b03657ab13064915d0723c5ce14981547e7cba5283f66b9e5d81f6e6e60405160405180910390a350505050565b3b151590565b60008313620004e2576040516356e05d2b60e01b815260040160405180910390fd5b836001600160501b0316816001600160501b0316108062000501575081155b15620005205760405163b1cf675560e01b815260040160405180910390fd5b50505050565b6001600160a01b03831682156200053e57600160a11b175b6200055460ff60a21b60a284901b1682620007fb565b6001600160a01b0390951660009081526001602052604090209490945550505050565b80516001600160a01b03811681146200058f57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715620005cf57620005cf62000594565b60405290565b604051601f8201601f191681016001600160401b038111828210171562000600576200060062000594565b604052919050565b60008060408084860312156200061d57600080fd5b620006288462000577565b602085810151919450906001600160401b03808211156200064857600080fd5b818701915087601f8301126200065d57600080fd5b81518181111562000672576200067262000594565b62000682848260051b01620005d5565b818152848101925060069190911b830184019089821115620006a357600080fd5b928401925b81841015620006fa5785848b031215620006c25760008081fd5b620006cc620005aa565b620006d78562000577565b8152620006e686860162000577565b8187015283529285019291840191620006a8565b8096505050505050509250929050565b6000602082840312156200071d57600080fd5b620007288262000577565b9392505050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156200075857600080fd5b815160ff811681146200072857600080fd5b6000602082840312156200077d57600080fd5b815180151581146200072857600080fd5b80516001600160501b03811681146200058f57600080fd5b600080600080600060a08688031215620007bf57600080fd5b620007ca866200078e565b9450602086015193506040860151925060608601519150620007ef608087016200078e565b90509295509295909350565b600082198211156200081d57634e487b7160e01b600052601160045260246000fd5b500190565b6080516112f262000853600039600081816101b201528181610280015281816103e201526104ff01526112f26000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c80638456cb591161008c578063b66102df11610066578063b66102df146101d4578063e8a97a3e146101e7578063f190e5fa146101fa578063f9a650301461023f57600080fd5b80638456cb591461016d5780639dcb511a14610175578063a50cf2c8146101ad57600080fd5b80635c975abb116100bd5780635c975abb1461011c5780635cecbd0e146101325780637afb01041461015a57600080fd5b80633f4ba83a146100e457806341976e09146100ee57806354fd4d5014610114575b600080fd5b6100ec610252565b005b6101016100fc366004610f28565b610340565b6040519081526020015b60405180910390f35b610101600281565b60005460ff16604051901515815260200161010b565b610145610140366004610f4a565b610352565b6040805192835260208301919091520161010b565b610101610168366004610f90565b610376565b6100ec6103b4565b610188610183366004610f28565b6104a0565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010b565b6101887f000000000000000000000000000000000000000000000000000000000000000081565b6101016101e2366004610fbc565b6104b4565b6100ec6101f5366004610ff8565b6104d1565b61020d610208366004610f28565b6105c3565b6040805173ffffffffffffffffffffffffffffffffffffffff909416845291151560208401529082015260600161010b565b61010161024d366004610f90565b61064d565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156102dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103009190611022565b610336576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033e61067b565b565b600061034b82610761565b5092915050565b60008061035f868661064d565b915061036b848461064d565b905094509492505050565b600080600061038484610761565b90925090508161039582600a611193565b61039f908761119f565b6103a991906111dc565b925050505b92915050565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561043e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104629190611022565b610498576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033e610819565b60006104ab826105c3565b50909392505050565b60006104c96104c3858561064d565b83610376565b949350505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561055b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057f9190611022565b6105b5576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105bf82826108d9565b5050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600160205260408120548190819080610624576040517f4bb8ad8200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b947402000000000000000000000000000000000000000086161515945060a286901c9350915050565b600080600061065b84610761565b909250905061066b81600a611193565b61039f838761119f565b3b151590565b60005460ff166106ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b600080600080610770856105c3565b8095508193508294505050506000806000808573ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156107cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f19190611231565b9450945050935093508461080b5761080b84848484610dd9565b829750505050505050915091565b60005460ff1615610886576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016106e3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586107373390565b73ffffffffffffffffffffffffffffffffffffffff82161580610910575073ffffffffffffffffffffffffffffffffffffffff8116155b15610947576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82163b6109ad576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016106e3565b73ffffffffffffffffffffffffffffffffffffffff81163b610a13576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024016106e3565b8073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610a98575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610a9591810190611281565b60015b610ace576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060ff16600814610b0b576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060008173ffffffffffffffffffffffffffffffffffffffff1663d62ada116040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610b93575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610b9091810190611022565b60015b610b9c57610b9f565b90505b60008373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610c26575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610c2391810190611281565b60015b610c5c576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60128160ff161115610c9a576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b90508273ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa925050508015610d21575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610d1e91810190611231565b60015b610d57576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b86610d6857610d6885858484610dd9565b5050505050610d7984848484610e74565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fe263805b03657ab13064915d0723c5ce14981547e7cba5283f66b9e5d81f6e6e60405160405180910390a350505050565b60008313610e13576040517f56e05d2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8369ffffffffffffffffffff168169ffffffffffffffffffff161080610e37575081155b15610e6e576040517fb1cf675500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b73ffffffffffffffffffffffffffffffffffffffff83168215610ea95774020000000000000000000000000000000000000000175b610ecf7503fc000000000000000000000000000000000000000060a284901b16826112a4565b73ffffffffffffffffffffffffffffffffffffffff90951660009081526001602052604090209490945550505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610f2357600080fd5b919050565b600060208284031215610f3a57600080fd5b610f4382610eff565b9392505050565b60008060008060808587031215610f6057600080fd5b84359350610f7060208601610eff565b925060408501359150610f8560608601610eff565b905092959194509250565b60008060408385031215610fa357600080fd5b82359150610fb360208401610eff565b90509250929050565b600080600060608486031215610fd157600080fd5b83359250610fe160208501610eff565b9150610fef60408501610eff565b90509250925092565b6000806040838503121561100b57600080fd5b61101483610eff565b9150610fb360208401610eff565b60006020828403121561103457600080fd5b81518015158114610f4357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b808511156110cc57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156110b2576110b2611044565b808516156110bf57918102915b93841c9390800290611078565b509250929050565b6000826110e3575060016103ae565b816110f0575060006103ae565b816001811461110657600281146111105761112c565b60019150506103ae565b60ff84111561112157611121611044565b50506001821b6103ae565b5060208310610133831016604e8410600b841016171561114f575081810a6103ae565b6111598383611073565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561118b5761118b611044565b029392505050565b6000610f4383836110d4565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156111d7576111d7611044565b500290565b600082611212577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b805169ffffffffffffffffffff81168114610f2357600080fd5b600080600080600060a0868803121561124957600080fd5b61125286611217565b945060208601519350604086015192506060860151915061127560808701611217565b90509295509295909350565b60006020828403121561129357600080fd5b815160ff81168114610f4357600080fd5b600082198211156112b7576112b7611044565b50019056fea2646970667358221220e7485a2cb5750973f539ca59d2211008b42bb92b6c49605a53f5d9c88c330fb164736f6c634300080a003360e06040523480156200001157600080fd5b5060405162002ced38038062002ced8339810160408190526200003491620004bb565b6000805460ff19169055806001600160a01b0381166200006757604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cc9190620004bb565b6001600160a01b039081166080526001805560408051808201909152600281526105a360f41b602082015291508216620001245760405162461bcd60e51b81526004016200011b9190620004ed565b60405180910390fd5b50806001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000164573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200018a9190620004bb565b6001600160a01b031660c052604051620001a490620004ad565b604051809103906000f080158015620001c1573d6000803e3d6000fd5b506001600160a01b031660a08190526040805163204a7f0760e21b81529051638129fc1c9160048082019260009290919082900301818387803b1580156200020857600080fd5b505af11580156200021d573d6000803e3d6000fd5b50505050620002316200028a60201b60201c565b50600454600380546001600160a01b039092166001600160a01b03199283161790556000805260026020527fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b8054909116905562000545565b6000620002a460a0516200038c60201b6200119b1760201c565b9050806001600160a01b0316638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620002e257600080fd5b505af1158015620002f7573d6000803e3d6000fd5b5050600480546001600160a01b03908116600090815260026020908152604090912080546001600160a01b03199081169388169384179091558354169091179091556200035492506005915083906200043b811b6200127d17901c565b506040516001600160a01b038216907f9f69b6c10f6810213e055b0ba6bc0a4e2603f73c221aad77ea35da819cda7dc390600090a250565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260601b60148201526e5af43d82803e903d91602b57fd5bf360881b60288201526037816000f09150506001600160a01b038116620004365760405162461bcd60e51b815260206004820152601660248201527f455243313136373a20637265617465206661696c65640000000000000000000060448201526064016200011b565b919050565b600062000452836001600160a01b0384166200045b565b90505b92915050565b6000818152600183016020526040812054620004a45750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000455565b50600062000455565b610e788062001e7583390190565b600060208284031215620004ce57600080fd5b81516001600160a01b0381168114620004e657600080fd5b9392505050565b600060208083528351808285015260005b818110156200051c57858101830151858201604001528201620004fe565b818111156200052f576000604083870101525b50601f01601f1916929092016040019392505050565b60805160a05160c0516118cf620005a66000396000818161026a015281816103680152610b7001526000818161020201526110650152600081816102c4015281816105b80152818161099601528181610a840152610e7401526118cf6000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806388f64c54116100cd578063b193976311610081578063d82ecc4811610066578063d82ecc4814610309578063e3ba9ace1461031c578063f23953ab1461032f57600080fd5b8063b1939763146102f9578063b60e85181461030157600080fd5b80638f7dcfa3116100b25780638f7dcfa31461029f578063a50cf2c8146102bf578063a904aab6146102e657600080fd5b806388f64c541461026557806389b77b3e1461028c57600080fd5b806354fd4d50116101245780635da33c5b116101095780635da33c5b146101fd578063765e0159146102245780638456cb591461025d57600080fd5b806354fd4d50146101d05780635c975abb146101e657600080fd5b806313d8c8401461015657806321d18456146101a05780632932472f146101b35780633f4ba83a146101c8575b600080fd5b6004546101769073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6101766101ae366004611651565b610337565b6101c66101c1366004611697565b61058a565b005b6101c6610968565b6101d8600181565b604051908152602001610197565b60005460ff165b6040519015158152602001610197565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101766102323660046116da565b73ffffffffffffffffffffffffffffffffffffffff9081166000908152600260205260409020541690565b6101c6610a56565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101c661029a3660046116da565b610b42565b6003546101769073ffffffffffffffffffffffffffffffffffffffff1681565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101c66102f4366004611697565b610e46565b6101d8610fb8565b6101d8611033565b6101ed6103173660046116da565b611044565b61017661032a3660046116f5565b611051565b6101c661105e565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa1580156103c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103e8919061170e565b6040518060400160405280600281526020017f43500000000000000000000000000000000000000000000000000000000000008152509061045f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b60405180910390fd5b506104686112a6565b6003805473ffffffffffffffffffffffffffffffffffffffff8082166000818152600260205260409081902080549093167fffffffffffffffffffffffff0000000000000000000000000000000000000000948516179094558154909216905590517fc75b5a710000000000000000000000000000000000000000000000000000000081523360048201526024810185905260448101849052819063c75b5a7190606401600060405180830381600087803b15801561052657600080fd5b505af115801561053a573d6000803e3d6000fd5b505060405133925073ffffffffffffffffffffffffffffffffffffffff841691507ff3ede7039176503a8ad1fe7cfaa29475a9dbe0cdcaf04ecf9a5c10570c47b10390600090a390505b92915050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610614573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610638919061170e565b61066e576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106766112a6565b60035473ffffffffffffffffffffffffffffffffffffffff838116911614156106fa576003805473ffffffffffffffffffffffffffffffffffffffff808216600090815260026020526040902080549091167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092558154169055610865565b73ffffffffffffffffffffffffffffffffffffffff838116600090815260026020908152604091829020548251808401909352600383527f4146330000000000000000000000000000000000000000000000000000000000918301919091529091848116911614610798576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b5060045473ffffffffffffffffffffffffffffffffffffffff838116911614156107fd57600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85161790555b73ffffffffffffffffffffffffffffffffffffffff828116600081815260026020526040808220805488861684529183208054929095167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790945591905281541690555b6040517fc75b5a7100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600060248301819052604483015283169063c75b5a7190606401600060405180830381600087803b1580156108dc57600080fd5b505af11580156108f0573d6000803e3d6000fd5b505050506109088260056112dd90919063ffffffff16565b508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f25e267469ba2ae82515be7b3d45df60bf8308343f0809e8cf7319058e2255ce660405160405180910390a3505050565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156109f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a16919061170e565b610a4c576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a546112ff565b565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015610ae0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b04919061170e565b610b3a576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a546113e0565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa158015610bcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf0919061170e565b6040518060400160405280600281526020017f435000000000000000000000000000000000000000000000000000000000000081525090610c5e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b50610c6a6005826114a0565b6040518060400160405280600381526020017f414634000000000000000000000000000000000000000000000000000000000081525090610cd8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b50438173ffffffffffffffffffffffffffffffffffffffff16633dc54b406040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4991906117a3565b14156040518060400160405280600381526020017f414631000000000000000000000000000000000000000000000000000000000081525090610db9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b506004805473ffffffffffffffffffffffffffffffffffffffff90811660009081526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081169487169485179091558454168317909355915190917fced6ab9afc868b3a088366f6631ae20752993b5cce5d5f0534ea5a59fcc57d5691a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610ed0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef4919061170e565b610f2a576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f19a1603900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301528416906319a1603990604401600060405180830381600087803b158015610f9b57600080fd5b505af1158015610faf573d6000803e3d6000fd5b50505050505050565b600354600090819073ffffffffffffffffffffffffffffffffffffffff165b73ffffffffffffffffffffffffffffffffffffffff81161561102d5773ffffffffffffffffffffffffffffffffffffffff9081166000908152600260205260409020541681611025816117eb565b925050610fd7565b50919050565b600061103f60056114cf565b905090565b60006105846005836114a0565b60006105846005836114d9565b60006110897f000000000000000000000000000000000000000000000000000000000000000061119b565b90508073ffffffffffffffffffffffffffffffffffffffff16638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156110d357600080fd5b505af11580156110e7573d6000803e3d6000fd5b50506004805473ffffffffffffffffffffffffffffffffffffffff908116600090815260026020526040902080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811692871692831790915582541617905550611156905060058261127d565b5060405173ffffffffffffffffffffffffffffffffffffffff8216907f9f69b6c10f6810213e055b0ba6bc0a4e2603f73c221aad77ea35da819cda7dc390600090a250565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260601b60148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f091505073ffffffffffffffffffffffffffffffffffffffff8116611278576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f455243313136373a20637265617465206661696c6564000000000000000000006044820152606401610456565b919050565b600061129f8373ffffffffffffffffffffffffffffffffffffffff84166114e5565b9392505050565b60035473ffffffffffffffffffffffffffffffffffffffff90811660009081526002602052604090205416610a5457610a5461105e565b600061129f8373ffffffffffffffffffffffffffffffffffffffff8416611534565b60005460ff1661136b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610456565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff161561144d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610456565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586113b63390565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600183016020526040812054151561129f565b6000610584825490565b600061129f8383611627565b600081815260018301602052604081205461152c57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610584565b506000610584565b6000818152600183016020526040812054801561161d576000611558600183611824565b855490915060009061156c90600190611824565b90508181146115d157600086600001828154811061158c5761158c61183b565b90600052602060002001549050808760000184815481106115af576115af61183b565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806115e2576115e261186a565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610584565b6000915050610584565b600082600001828154811061163e5761163e61183b565b9060005260206000200154905092915050565b6000806040838503121561166457600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff8116811461127857600080fd5b6000806000606084860312156116ac57600080fd5b6116b584611673565b92506116c360208501611673565b91506116d160408501611673565b90509250925092565b6000602082840312156116ec57600080fd5b61129f82611673565b60006020828403121561170757600080fd5b5035919050565b60006020828403121561172057600080fd5b8151801515811461129f57600080fd5b600060208083528351808285015260005b8181101561175d57858101830151858201604001528201611741565b8181111561176f576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b6000602082840312156117b557600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561181d5761181d6117bc565b5060010190565b600082821015611836576118366117bc565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220f1e9c81b8c3af2491c907ee66cf24e1bb76111b821db02df8f98dbb48b5ab5fa64736f6c634300080a0033608060405234801561001057600080fd5b50610e58806100206000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c806354fd4d5011610081578063c45a01551161005b578063c45a0155146101a4578063c75b5a71146101ca578063d1660f99146101dd57600080fd5b806354fd4d501461014f5780638129fc1c14610157578063c12c21c01461015f57600080fd5b80631afbb7a4116100b25780631afbb7a41461011d5780631cff79cd146101265780633dc54b401461014657600080fd5b806316128211146100d957806317d11a15146100ee57806319a160391461010a575b600080fd5b6100ec6100e7366004610b42565b6101f0565b005b6100f760035481565b6040519081526020015b60405180910390f35b6100ec610118366004610b8d565b61024c565b6100f760025481565b610139610134366004610bef565b6102c9565b6040516101019190610d49565b6100f760045481565b6100f7600181565b6100ec610344565b60015461017f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610101565b60005461017f9062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b6100ec6101d8366004610d5c565b610494565b6100ec6101eb366004610d8f565b61053d565b60015473ffffffffffffffffffffffffffffffffffffffff163314610241576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600291909155600355565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1633146102a3576040517fb126b84800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102c573ffffffffffffffffffffffffffffffffffffffff83168260006105b4565b5050565b60015460609073ffffffffffffffffffffffffffffffffffffffff16331461031d576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033d73ffffffffffffffffffffffffffffffffffffffff8416836107b4565b9392505050565b600054610100900460ff1661035f5760005460ff1615610363565b303b155b6103f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600054610100900460ff1615801561043357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000166101011790555b600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16336201000002179055801561049157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b50565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1633146104eb576040517fb126b84800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff949094169390931790925560025560035543600455565b60015473ffffffffffffffffffffffffffffffffffffffff16331461058e576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105af73ffffffffffffffffffffffffffffffffffffffff841683836107f6565b505050565b80158061065457506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015284169063dd62ed3e90604401602060405180830381865afa15801561062e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106529190610dcb565b155b6106e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e63650000000000000000000060648201526084016103eb565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526105af9084907f095ea7b300000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261084c565b606061033d83836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250610958565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526105af9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401610732565b60006108ae826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166109589092919063ffffffff16565b8051909150156105af57808060200190518101906108cc9190610de4565b6105af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016103eb565b6060610967848460008561096f565b949350505050565b606082471015610a01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016103eb565b843b610a69576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016103eb565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051610a929190610e06565b60006040518083038185875af1925050503d8060008114610acf576040519150601f19603f3d011682016040523d82523d6000602084013e610ad4565b606091505b5091509150610ae4828286610aef565b979650505050505050565b60608315610afe57508161033d565b825115610b0e5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103eb9190610d49565b60008060408385031215610b5557600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff81168114610b8857600080fd5b919050565b60008060408385031215610ba057600080fd5b610ba983610b64565b9150610bb760208401610b64565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215610c0257600080fd5b610c0b83610b64565b9150602083013567ffffffffffffffff80821115610c2857600080fd5b818501915085601f830112610c3c57600080fd5b813581811115610c4e57610c4e610bc0565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715610c9457610c94610bc0565b81604052828152886020848701011115610cad57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b83811015610cea578181015183820152602001610cd2565b83811115610cf9576000848401525b50505050565b60008151808452610d17816020860160208601610ccf565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061033d6020830184610cff565b600080600060608486031215610d7157600080fd5b610d7a84610b64565b95602085013595506040909401359392505050565b600080600060608486031215610da457600080fd5b610dad84610b64565b9250610dbb60208501610b64565b9150604084013590509250925092565b600060208284031215610ddd57600080fd5b5051919050565b600060208284031215610df657600080fd5b8151801515811461033d57600080fd5b60008251610e18818460208701610ccf565b919091019291505056fea2646970667358221220448e7046078cd668c09328d857e534e2aab6cdc0e691d3d4f2c8baae8e084b1364736f6c634300080a003360c06040523480156200001157600080fd5b506040516200162738038062001627833981016040819052620000349162000177565b60408051808201909152600281526105a360f41b60208201526001600160a01b038216620000805760405162461bcd60e51b8152600401620000779190620001a9565b60405180910390fd5b50806001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e6919062000177565b6001600160a01b03166080816001600160a01b031681525050806001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200013e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000164919062000177565b6001600160a01b031660a0525062000201565b6000602082840312156200018a57600080fd5b81516001600160a01b0381168114620001a257600080fd5b9392505050565b600060208083528351808285015260005b81811015620001d857858101830151858201604001528201620001ba565b81811115620001eb576000604083870101525b50601f01601f1916929092016040019392505050565b60805160a0516113c2620002656000396000818161021f0152818161036401526106d501526000818160af0152818161012a015281816104420152818161056e015281816107b301528181610aa601528181610b890152610c6701526113c26000f3fe60806040526004361061005e5760003560e01c80635869dba8116100435780635869dba814610199578063deecfbc9146101bb578063e79a4089146101ce57600080fd5b80634f0e0ef31461011857806354fd4d501461017657600080fd5b366101135760408051808201909152600381527f574732000000000000000000000000000000000000000000000000000000000060208201523373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b60405180910390fd5b50005b600080fd5b34801561012457600080fd5b5061014c7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561018257600080fd5b5061018b600181565b60405190815260200161016d565b3480156101a557600080fd5b506101b96101b4366004611263565b6101ee565b005b6101b96101c936600461128f565b61031d565b3480156101da57600080fd5b506101b96101e93660046112e1565b61068e565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201819052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa15801561027b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061029f9190611318565b6040518060400160405280600281526020017f43500000000000000000000000000000000000000000000000000000000000008152509061030d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b506103188383610a77565b505050565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808516600483015284917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa1580156103ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103d19190611318565b6040518060400160405280600281526020017f52500000000000000000000000000000000000000000000000000000000000008152509061043f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e6919061133a565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600381526020017f57473100000000000000000000000000000000000000000000000000000000008152509061056b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156105d457600080fd5b505af11580156105e8573d6000803e3d6000fd5b50505050506105f78434610b3c565b6040517f9aa5d46200000000000000000000000000000000000000000000000000000000815234600482015273ffffffffffffffffffffffffffffffffffffffff848116602483015261ffff84166044830152851690639aa5d46290606401600060405180830381600087803b15801561067057600080fd5b505af1158015610684573d6000803e3d6000fd5b5050505050505050565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808516600483015284917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa15801561071e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107429190611318565b6040518060400160405280600281526020017f5250000000000000000000000000000000000000000000000000000000000000815250906107b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610833573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610857919061133a565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600381526020017f5747310000000000000000000000000000000000000000000000000000000000815250906108dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b506109703330858773ffffffffffffffffffffffffffffffffffffffff166336dda7d56040518163ffffffff1660e01b8152600401602060405180830381865afa15801561092e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610952919061133a565b73ffffffffffffffffffffffffffffffffffffffff16929190610cd4565b6040517f05fe138b0000000000000000000000000000000000000000000000000000000081526004810184905230602482015260009073ffffffffffffffffffffffffffffffffffffffff8616906305fe138b906044016020604051808303816000875af11580156109e6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0a9190611357565b9050610a168382610a77565b8273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f6de63bb986f2779478e384365c03cc2e62f06b453856acca87d5a519ce02664960405160405180910390a35050505050565b6040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632e1a7d4d90602401600060405180830381600087803b158015610aff57600080fd5b505af1158015610b13573d6000803e3d6000fd5b50610b389250505073ffffffffffffffffffffffffffffffffffffffff831682610d6f565b5050565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015282917f00000000000000000000000000000000000000000000000000000000000000009091169063dd62ed3e90604401602060405180830381865afa158015610bd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf69190611357565b1015610b38576040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303816000875af1158015610cb0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103189190611318565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052610d69908590610ec9565b50505050565b80471015610dd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610107565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114610e33576040519150601f19603f3d011682016040523d82523d6000602084013e610e38565b606091505b5050905080610318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610107565b6000610f2b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16610fd59092919063ffffffff16565b8051909150156103185780806020019051810190610f499190611318565b610318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610107565b6060610fe48484600085610fee565b90505b9392505050565b606082471015611080576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610107565b843b6110e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610107565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516111119190611370565b60006040518083038185875af1925050503d806000811461114e576040519150601f19603f3d011682016040523d82523d6000602084013e611153565b606091505b509150915061116382828661116e565b979650505050505050565b6060831561117d575081610fe7565b82511561118d5782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b60005b838110156111dc5781810151838201526020016111c4565b83811115610d695750506000910152565b602081526000825180602084015261120c8160408501602087016111c1565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461126057600080fd5b50565b6000806040838503121561127657600080fd5b82356112818161123e565b946020939093013593505050565b6000806000606084860312156112a457600080fd5b83356112af8161123e565b925060208401356112bf8161123e565b9150604084013561ffff811681146112d657600080fd5b809150509250925092565b6000806000606084860312156112f657600080fd5b83356113018161123e565b92506020840135915060408401356112d68161123e565b60006020828403121561132a57600080fd5b81518015158114610fe757600080fd5b60006020828403121561134c57600080fd5b8151610fe78161123e565b60006020828403121561136957600080fd5b5051919050565b600082516113828184602087016111c1565b919091019291505056fea264697066735822122017fd7fc76e4a1efcf24b78a3417fad7ab9576f0a23aa756ddb211c5e2227aa9564736f6c634300080a003360806040523480156200001157600080fd5b5060405162002b8038038062002b80833981016040819052620000349162000122565b6001600160a01b0381166200008f5760405162461bcd60e51b815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640160405180910390fd5b6001600160a01b03811660008181526001602052604080822080546001600160601b0319166b204fce5e3e2502611000000090811790915590517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91620000f99190815260200190565b60405180910390a350600680546001600160a81b031916336101000260ff191617905562000154565b6000602082840312156200013557600080fd5b81516001600160a01b03811681146200014d57600080fd5b9392505050565b612a1c80620001646000396000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c806370a08231116100f9578063b4b5ea5711610097578063dd62ed3e11610071578063dd62ed3e14610503578063e7a324dc14610555578063f1127ed81461057c578063f2fde38b146105ee57600080fd5b8063b4b5ea57146104ca578063c3cda520146104dd578063d505accf146104f057600080fd5b806395d89b41116100d357806395d89b411461045b5780639742ca4614610497578063a9059cbb146104aa578063b0660c3d146104bd57600080fd5b806370a08231146103c7578063782d6fe11461040b5780637ecebe001461043b57600080fd5b806330adf81f11610166578063481c6a7511610140578063481c6a751461031e578063587cde1e146103435780635c19a95c146103795780636fcfff451461038c57600080fd5b806330adf81f14610298578063313ce567146102bf578063349dc329146102d957600080fd5b806320606b701161019757806320606b70146102545780632185810b1461027b57806323b872dd1461028557600080fd5b806306fdde03146101be578063095ea7b31461021057806318160ddd14610233575b600080fd5b6101fa6040518060400160405280600781526020017f47656172626f780000000000000000000000000000000000000000000000000081525081565b60405161020791906124a3565b60405180910390f35b61022361021e36600461253f565b610601565b6040519015158152602001610207565b6102466b204fce5e3e2502611000000081565b604051908152602001610207565b6102467f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b61028361070d565b005b610223610293366004612569565b6107ee565b6102467f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b6102c7601281565b60405160ff9091168152602001610207565b6007546102f99073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610207565b6006546102f990610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6102f96103513660046125a5565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6102836103873660046125a5565b61098a565b6103b261039a3660046125a5565b60046020526000908152604090205463ffffffff1681565b60405163ffffffff9091168152602001610207565b6102466103d53660046125a5565b73ffffffffffffffffffffffffffffffffffffffff166000908152600160205260409020546bffffffffffffffffffffffff1690565b61041e61041936600461253f565b610997565b6040516bffffffffffffffffffffffff9091168152602001610207565b6102466104493660046125a5565b60056020526000908152604090205481565b6101fa6040518060400160405280600481526020017f474541520000000000000000000000000000000000000000000000000000000081525081565b6102836104a53660046125a5565b610cae565b6102236104b836600461253f565b610e20565b6006546102239060ff1681565b61041e6104d83660046125a5565b610e5c565b6102836104eb3660046125d1565b610efa565b6102836104fe366004612629565b611310565b610246610511366004612693565b73ffffffffffffffffffffffffffffffffffffffff9182166000908152602081815260408083209390941682529190915220546bffffffffffffffffffffffff1690565b6102467fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b6105c561058a3660046126c6565b600360209081526000928352604080842090915290825290205463ffffffff81169064010000000090046bffffffffffffffffffffffff1682565b6040805163ffffffff90931683526bffffffffffffffffffffffff909116602083015201610207565b6102836105fc3660046125a5565b61187a565b6000807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83141561063f57506bffffffffffffffffffffffff610664565b6106618360405180606001604052806025815260200161285260259139611a15565b90505b3360008181526020818152604080832073ffffffffffffffffffffffffffffffffffffffff89168085529083529281902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff871690811790915590519081529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a360019150505b92915050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314610798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e616765720060448201526064015b60405180910390fd5b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f795b0e16c8da9807b0a215f3749bd6dbcc49fc0472183f4e446abb7dcbd9d00790600090a1565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081815260408083203380855290835281842054825160608101909352602580845291936bffffffffffffffffffffffff909116928592610856928892919061285290830139611a15565b90508673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156108a257506bffffffffffffffffffffffff82811614155b156109725760006108cc83836040518060600160405280603d8152602001612974603d9139611a67565b73ffffffffffffffffffffffffffffffffffffffff898116600081815260208181526040808320948a168084529482529182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff87169081179091559151918252939450919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505b61097d878783611ad5565b5060019695505050505050565b6109943382611e9c565b50565b6000438210610a28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f476561723a3a6765745072696f72566f7465733a206e6f74207965742064657460448201527f65726d696e656400000000000000000000000000000000000000000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff831660009081526004602052604090205463ffffffff1680610a63576000915050610707565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604081208491610a95600185612735565b63ffffffff90811682526020820192909252604001600020541611610b1b5773ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812090610ae5600184612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff1691506107079050565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020908152604080832083805290915290205463ffffffff16831015610b63576000915050610707565b600080610b71600184612735565b90505b8163ffffffff168163ffffffff161115610c565760006002610b968484612735565b610ba0919061275a565b610baa9083612735565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260036020908152604080832063ffffffff8581168552908352928190208151808301909252549283168082526401000000009093046bffffffffffffffffffffffff1691810191909152919250871415610c2a576020015194506107079350505050565b805163ffffffff16871115610c4157819350610c4f565b610c4c600183612735565b92505b5050610b74565b5073ffffffffffffffffffffffffffffffffffffffff8516600090815260036020908152604080832063ffffffff909416835292905220546bffffffffffffffffffffffff6401000000009091041691505092915050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314610d34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e6167657200604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff8116610db1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640161078f565b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f2f834d1c8c4b956018fff5faca4d99868ae635487424d9c265c257ccbc698c6a90600090a250565b600080610e45836040518060600160405280602681526020016128a760269139611a15565b9050610e52338583611ad5565b5060019392505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526004602052604081205463ffffffff1680610e94576000610ef3565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812090610ec5600184612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b9392505050565b604080518082018252600781527f47656172626f780000000000000000000000000000000000000000000000000060209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f028ef9f797075f74ac647c65fde04fb0f128c2d59fd40f45732269917642fd4681840152466060820152306080808301919091528351808303909101815260a0820184528051908301207fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60c083015273ffffffffffffffffffffffffffffffffffffffff8a1660e08301526101008201899052610120808301899052845180840390910181526101408301909452835193909201929092207f19010000000000000000000000000000000000000000000000000000000000006101608401526101628301829052610182830181905290916000906101a201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa1580156110d8573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166111a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f476561723a3a64656c656761746542795369673a20696e76616c69642073696760448201527f6e61747572650000000000000000000000000000000000000000000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff811660009081526005602052604081208054916111d7836127a4565b919050558914611269576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f476561723a3a64656c656761746542795369673a20696e76616c6964206e6f6e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161078f565b874211156112f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f476561723a3a64656c656761746542795369673a207369676e6174757265206560448201527f7870697265640000000000000000000000000000000000000000000000000000606482015260840161078f565b611303818b611e9c565b505050505b505050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86141561134d57506bffffffffffffffffffffffff611372565b61136f8660405180606001604052806024815260200161291c60249139611a15565b90505b604080518082018252600781527f47656172626f780000000000000000000000000000000000000000000000000060209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f028ef9f797075f74ac647c65fde04fb0f128c2d59fd40f45732269917642fd4681840152466060820152306080808301919091528351808303909101815260a0909101835280519082012073ffffffffffffffffffffffffffffffffffffffff8b166000908152600590925291812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918c918c918c919086611472836127a4565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810188905260e001604051602081830303815290604052805190602001209050600082826040516020016115199291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff8b169284019290925260608301899052608083018890529092509060019060a0016020604051602081039080840390855afa1580156115a2573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661164a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a7065726d69743a20696e76616c6964207369676e617475726500604482015260640161078f565b8b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146116df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f476561723a3a7065726d69743a20756e617574686f72697a6564000000000000604482015260640161078f565b88421115611749576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a7065726d69743a207369676e6174757265206578706972656400604482015260640161078f565b846000808e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508a73ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258760405161186491906bffffffffffffffffffffffff91909116815260200190565b60405180910390a3505050505050505050505050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314611900576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e6167657200604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff811661197d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640161078f565b60065460405173ffffffffffffffffffffffffffffffffffffffff80841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36006805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b6000816c010000000000000000000000008410611a5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b509192915050565b6000836bffffffffffffffffffffffff16836bffffffffffffffffffffffff1611158290611ac2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b50611acd83856127dd565b949350505050565b60065460ff1680611b025750600654610100900473ffffffffffffffffffffffffffffffffffffffff1633145b80611b24575060075473ffffffffffffffffffffffffffffffffffffffff1633145b611b8a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f476561723a3a7472616e73666572732061726520666f7262696464656e000000604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff8316611c2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603c60248201527f476561723a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260448201527f616e736665722066726f6d20746865207a65726f206164647265737300000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff8216611cd0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f476561723a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260448201527f616e7366657220746f20746865207a65726f2061646472657373000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260016020908152604091829020548251606081019093526036808452611d2d936bffffffffffffffffffffffff90921692859291906129b190830139611a67565b73ffffffffffffffffffffffffffffffffffffffff848116600090815260016020908152604080832080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff968716179055928616825290829020548251606081019093526030808452611dbf949190911692859290919061287790830139611f50565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260409182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff968716179055905193851684529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a373ffffffffffffffffffffffffffffffffffffffff808416600090815260026020526040808220548584168352912054611e9792918216911683611fc1565b505050565b73ffffffffffffffffffffffffffffffffffffffff808316600081815260026020818152604080842080546001845282862054949093528787167fffffffffffffffffffffffff000000000000000000000000000000000000000084168117909155905191909516946bffffffffffffffffffffffff9092169391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4611f4a828483611fc1565b50505050565b600080611f5d8486612802565b9050846bffffffffffffffffffffffff16816bffffffffffffffffffffffff1610158390611fb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b50949350505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561200b57506000816bffffffffffffffffffffffff16115b15611e975773ffffffffffffffffffffffffffffffffffffffff8316156120fd5773ffffffffffffffffffffffffffffffffffffffff831660009081526004602052604081205463ffffffff1690816120655760006120c4565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812090612096600185612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b905060006120eb82856040518060600160405280602881526020016128cd60289139611a67565b90506120f9868484846121e2565b5050505b73ffffffffffffffffffffffffffffffffffffffff821615611e975773ffffffffffffffffffffffffffffffffffffffff821660009081526004602052604081205463ffffffff1690816121525760006121b1565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812090612183600185612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b905060006121d882856040518060600160405280602781526020016128f560279139611f50565b9050611308858484845b60006122064360405180606001604052806034815260200161294060349139612465565b905060008463ffffffff1611801561226d575073ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812063ffffffff831691612251600188612735565b63ffffffff908116825260208201929092526040016000205416145b156123035773ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812083916122a4600188612735565b63ffffffff168152602081019190915260400160002080546bffffffffffffffffffffffff92909216640100000000027fffffffffffffffffffffffffffffffff000000000000000000000000ffffffff9092169190911790556123fe565b60408051808201825263ffffffff80841682526bffffffffffffffffffffffff808616602080850191825273ffffffffffffffffffffffffffffffffffffffff8b166000908152600382528681208b8616825290915294909420925183549451909116640100000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009094169116179190911790556123a5846001612832565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260046020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff929092169190911790555b604080516bffffffffffffffffffffffff80861682528416602082015273ffffffffffffffffffffffffffffffffffffffff8716917fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724910160405180910390a25050505050565b6000816401000000008410611a5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91905b600060208083528351808285015260005b818110156124d0578581018301518582016040015282016124b4565b818111156124e2576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461253a57600080fd5b919050565b6000806040838503121561255257600080fd5b61255b83612516565b946020939093013593505050565b60008060006060848603121561257e57600080fd5b61258784612516565b925061259560208501612516565b9150604084013590509250925092565b6000602082840312156125b757600080fd5b610ef382612516565b803560ff8116811461253a57600080fd5b60008060008060008060c087890312156125ea57600080fd5b6125f387612516565b9550602087013594506040870135935061260f606088016125c0565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a03121561264457600080fd5b61264d88612516565b965061265b60208901612516565b95506040880135945060608801359350612677608089016125c0565b925060a0880135915060c0880135905092959891949750929550565b600080604083850312156126a657600080fd5b6126af83612516565b91506126bd60208401612516565b90509250929050565b600080604083850312156126d957600080fd5b6126e283612516565b9150602083013563ffffffff811681146126fb57600080fd5b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600063ffffffff8381169083168181101561275257612752612706565b039392505050565b600063ffffffff80841680612798577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156127d6576127d6612706565b5060010190565b60006bffffffffffffffffffffffff8381169083168181101561275257612752612706565b60006bffffffffffffffffffffffff80831681851680830382111561282957612829612706565b01949350505050565b600063ffffffff8083168185168083038211156128295761282961270656fe476561723a3a617070726f76653a20616d6f756e7420657863656564732039362062697473476561723a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e74206f766572666c6f7773476561723a3a7472616e736665723a20616d6f756e7420657863656564732039362062697473476561723a3a5f6d6f7665566f7465733a20766f746520616d6f756e7420756e646572666c6f7773476561723a3a5f6d6f7665566f7465733a20766f746520616d6f756e74206f766572666c6f7773476561723a3a7065726d69743a20616d6f756e7420657863656564732039362062697473476561723a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d62657220657863656564732033322062697473476561723a3a7472616e7366657246726f6d3a207472616e7366657220616d6f756e742065786365656473207370656e64657220616c6c6f77616e6365476561723a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e7420657863656564732062616c616e6365a26469706673582212201b84fd7789a35c022f692420863210a30e82d2405659f5a28275d433fa53467f64736f6c634300080a003360806040526016805460ff1916905534801561001a57600080fd5b506040516110a73803806110a7833981016040819052610039916100b6565b600080546001600160a01b038085166001600160a01b0319928316179092556003805492841692909116919091179055610080600a6b033b2e3c9fd0803ce80000006100e9565b60075550506b033b2e3c9fd0803ce800000060155561010b565b80516001600160a01b03811681146100b157600080fd5b919050565b600080604083850312156100c957600080fd5b6100d28361009a565b91506100e06020840161009a565b90509250929050565b60008261010657634e487b7160e01b600052601260045260246000fd5b500490565b610f8d8061011a6000396000f3fe608060405234801561001057600080fd5b50600436106102e95760003560e01c806367c99d5811610191578063c5f956af116100e3578063dbcb313b11610097578063f11a648711610071578063f11a648714610320578063f3fdb15a146105f1578063fe14112d1461061157600080fd5b8063dbcb313b146105d6578063e941fa78146105df578063ef8d9603146105e857600080fd5b8063cb3905e1116100c8578063cb3905e1146105c4578063cf33d95514610320578063d0efe753146105cd57600080fd5b8063c5f956af14610588578063ca9505e4146105a857600080fd5b80639aa5d46211610145578063b6ac642a1161011f578063b6ac642a14610567578063bb04b19314610567578063bf28068b1461057557600080fd5b80639aa5d46214610544578063a4e8273e14610557578063b3554a0a1461055e57600080fd5b8063788c6bfe11610176578063788c6bfe146104ef5780638456cb591461050157806396df5dc01461053157600080fd5b806367c99d58146104de57806374375359146104e757600080fd5b806336dda7d51161024a5780634d778ad1116101fe57806354fd4d50116101d857806354fd4d50146104c05780635c975abb146104c8578063609ae317146104d557600080fd5b80634d778ad114610491578063532fe502146104a45780635427c938146104ad57600080fd5b80633f4ba83a1161022f5780633f4ba83a1461045257806345d31f9d1461047f5780634c19386c1461048857600080fd5b806336dda7d51461040f5780633e163df01461042f57600080fd5b80632495a599116102a157806329f3d3b61161028657806329f3d3b6146103b35780632a3354c9146103bc5780632e97ca21146103dc57600080fd5b80632495a599146103735780632954018c1461039357600080fd5b8063078c4781116102d2578063078c4781146103205780630fce70fb146103335780631e16e4fc1461033b57600080fd5b8063030dbb04146102ee57806305fe138b1461030a575b600080fd5b6102f760105481565b6040519081526020015b60405180910390f35b6102f7610318366004610ce8565b600092915050565b61033161032e366004610d14565b50565b005b6015546102f7565b61034e610349366004610d2f565b610618565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610301565b60035461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b60005461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6102f760095481565b600a5461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103ff6103ea366004610d14565b60066020526000908152604090205460ff1681565b6040519015158152602001610301565b60055461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103ff61043d366004610d14565b60146020526000908152604090205460ff1681565b610331601680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b6102f760075481565b6102f760015481565b6102f761049f366004610d2f565b61064f565b6102f760115481565b6102f76104bb366004610d2f565b61066d565b6102f7600181565b6016546103ff9060ff1681565b6102f760085481565b6102f7600d5481565b6102f7610685565b6b033b2e3c9fd0803ce80000006102f7565b610331601680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b61033161053f366004610d2f565b601555565b610331610552366004610d48565b505050565b60016102f7565b6102f7600e5481565b61033161032e366004610d2f565b610331610583366004610ce8565b61071d565b60135461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103316105b6366004610d7d565b600b92909255600c55600d55565b6102f7600c5481565b6102f7600b5481565b6102f760155481565b6102f7600f5481565b6102f760025481565b60125461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b60006102f7565b6004818154811061062857600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6000610667826b033b2e3c9fd0803ce800000061077a565b92915050565b6000610667826b033b2e3c9fd0803ce80000006108e9565b6003546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156106f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107189190610da9565b905090565b6009829055600a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691909117909155600354610776911682846109fe565b5050565b60408051808201909152600281527f4d330000000000000000000000000000000000000000000000000000000000006020820152600090826107f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b60405180910390fd5b506000610800600284610e72565b90506b033b2e3c9fd0803ce8000000610839827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610ead565b6108439190610e72565b8411156040518060400160405280600281526020017f4d31000000000000000000000000000000000000000000000000000000000000815250906108b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b5082816108cd6b033b2e3c9fd0803ce800000087610ec4565b6108d79190610f01565b6108e19190610e72565b949350505050565b60008215806108f6575081155b1561090357506000610667565b8161091b60026b033b2e3c9fd0803ce8000000610e72565b610945907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610ead565b61094f9190610e72565b8311156040518060400160405280600281526020017f4d31000000000000000000000000000000000000000000000000000000000000815250906109c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b506b033b2e3c9fd0803ce80000006109d9600282610e72565b6109e38486610ec4565b6109ed9190610f01565b6109f79190610e72565b9392505050565b6040805173ffffffffffffffffffffffffffffffffffffffff848116602483015260448083018590528351808403909101815260649092018352602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65649084015261055292869291600091610ac9918516908490610b73565b8051909150156105525780806020019051810190610ae79190610f19565b610552576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016107e9565b60606108e1848460008585843b610be6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107e9565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051610c0f9190610f3b565b60006040518083038185875af1925050503d8060008114610c4c576040519150601f19603f3d011682016040523d82523d6000602084013e610c51565b606091505b5091509150610c61828286610c6c565b979650505050505050565b60608315610c7b5750816109f7565b825115610c8b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ce357600080fd5b919050565b60008060408385031215610cfb57600080fd5b82359150610d0b60208401610cbf565b90509250929050565b600060208284031215610d2657600080fd5b6109f782610cbf565b600060208284031215610d4157600080fd5b5035919050565b600080600060608486031215610d5d57600080fd5b83359250610d6d60208501610cbf565b9150604084013590509250925092565b600080600060608486031215610d9257600080fd5b505081359360208301359350604090920135919050565b600060208284031215610dbb57600080fd5b5051919050565b60005b83811015610ddd578181015183820152602001610dc5565b83811115610dec576000848401525b50505050565b6020815260008251806020840152610e11816040850160208701610dc2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082610ea8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600082821015610ebf57610ebf610e43565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610efc57610efc610e43565b500290565b60008219821115610f1457610f14610e43565b500190565b600060208284031215610f2b57600080fd5b815180151581146109f757600080fd5b60008251610f4d818460208701610dc2565b919091019291505056fea26469706673582212204edb887d94928b3914f60ab48df0182da9eb30ddbb7021b164cc728b60a655d564736f6c634300080a003360e06040523480156200001157600080fd5b5060405162013af238038062013af2833981016040819052620000349162000630565b826001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000073573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000999190620007bf565b620000a433620004ab565b6001600160a01b038116608081905260408051630873769560e01b815290516308737695916004808201926020929091908290030181865afa158015620000ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001159190620007bf565b6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000153573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001799190620007bf565b6001600160a01b0390811660a052841660c0525060405183906200019d9062000519565b6001600160a01b039091168152602001604051809103906000f080158015620001ca573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b0392909216918217905560608301516080840151604051620002029062000527565b6001600160a01b03938416815292909116602083015215156040820152606001604051809103906000f0801580156200023f573d6000803e3d6000fd5b50600280546001600160a01b0319166001600160a01b0392909216919091179055604051600090620002746020820162000535565b601f1982820381018352601f909101166040819052600154600254620002b0926001600160a01b039283169291909116908790602001620007e6565b60408051601f1981840301815290829052620002d09291602001620008e8565b60408051601f19818403018152919052905060006200035982848151602092830120604080517fff00000000000000000000000000000000000000000000000000000000000000818601523060601b6001600160601b03191660218201526035810193909352605580840192909252805180840390920182526075909201909152805191012090565b600154604051634fafc35760e11b81526001600160a01b038084166004830152929350911690639f5f86ae90602401600060405180830381600087803b158015620003a357600080fd5b505af1158015620003b8573d6000803e3d6000fd5b50505050620003ce8284620004fb60201b60201c565b600380546001600160a01b0319166001600160a01b0383811691821790925560015460408051630304b08760e61b81529051919093169263c12c21c09160048083019260209291908290030181865afa15801562000430573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004569190620007bf565b6001600160a01b031614620004a05760405162461bcd60e51b815260206004820152600c60248201526b496e636f727265637420434d60a01b604482015260640160405180910390fd5b505050505062000909565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008183516020850134f59050803b6200051457600080fd5b505050565b6158e8806200243683390190565b615e978062007d1e83390190565b615f3d806200dbb583390190565b6001600160a01b03811681146200055957600080fd5b50565b8051620005698162000543565b919050565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b0381118282101715620005a957620005a96200056e565b60405290565b604080519081016001600160401b0381118282101715620005a957620005a96200056e565b604051601f8201601f191681016001600160401b0381118282101715620005ff57620005ff6200056e565b604052919050565b80516001600160801b03811681146200056957600080fd5b805180151581146200056957600080fd5b6000806000606084860312156200064657600080fd5b8351620006538162000543565b602085810151919450906001600160401b03808211156200067357600080fd5b9086019060a082890312156200068857600080fd5b6200069262000584565b6200069d8362000607565b8152620006ac84840162000607565b8482015260408084015183811115620006c457600080fd5b8401601f81018b13620006d657600080fd5b805184811115620006eb57620006eb6200056e565b620006fb878260051b01620005d4565b818152878101955060069190911b82018701908c8211156200071c57600080fd5b918701915b818310156200077e5783838e0312156200073b5760008081fd5b62000745620005af565b8351620007528162000543565b81528389015161ffff811681146200076a5760008081fd5b818a01528652948701949183019162000721565b8484015250620007939050606085016200055c565b6060830152620007a6608085016200061f565b6080830152979097015195989697509495945050505050565b600060208284031215620007d257600080fd5b8151620007df8162000543565b9392505050565b600060018060a01b0380861683526020818616818501526040606081860152610100850160018060801b038088511660608801528084890151166080880152508187015160a080880152818151808452610120890191508583019350600092505b808310156200087857835180518816835286015161ffff168683015292850192600192909201919084019062000847565b5060608901516001600160a01b031660c0890152608090980151151560e0909701969096525094979650505050505050565b6000815160005b81811015620008cd5760208185018101518683015201620008b1565b81811115620008dd576000828601525b509290920192915050565b600062000901620008fa8386620008aa565b84620008aa565b949350505050565b60805160a05160c051611ad3620009636000396000818161010a0152610ea00152600081816103790152610b170152600081816101680152818161068c01528181610a4d01528181610b860152610c190152611ad36000f3fe6080604052600436106100f35760003560e01c80638da5cb5b1161008a578063ebf0c71711610059578063ebf0c71714610367578063f2fde38b1461039b578063f4747c58146103bb578063f9aa028a146103db57600080fd5b80638da5cb5b1461025a57806394ca2cb5146102855780639c4ae2d014610327578063c12c21c01461033a57600080fd5b80633e0b1a23116100c65780633e0b1a23146101ce5780634ef501ac146101e3578063715018a614610230578063805abe6a1461024557600080fd5b806316f0115b146100f85780632954018c146101565780632f7a18811461018a578063318d0d10146101b7575b600080fd5b34801561010457600080fd5b5061012c7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561016257600080fd5b5061012c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561019657600080fd5b5060025461012c9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156101c357600080fd5b506101cc610408565b005b3480156101da57600080fd5b506101cc610498565b3480156101ef57600080fd5b506102036101fe366004611726565b610521565b6040805173ffffffffffffffffffffffffffffffffffffffff93841681529290911660208301520161014d565b34801561023c57600080fd5b506101cc610567565b34801561025157600080fd5b506101cc6105f2565b34801561026657600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff1661012c565b34801561029157600080fd5b5061012c6102a03660046117e6565b8151602092830120604080517fff00000000000000000000000000000000000000000000000000000000000000818601523060601b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660218201526035810193909352605580840192909252805180840390920182526075909201909152805191012090565b6101cc6103353660046117e6565b6107d8565b34801561034657600080fd5b5060015461012c9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561037357600080fd5b5061012c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103a757600080fd5b506101cc6103b63660046118c0565b6107f5565b3480156103c757600080fd5b506101cc6103d63660046118e4565b610925565b3480156103e757600080fd5b5060035461012c9073ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff16331461048e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b610496610a49565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610519576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b61048e610b82565b6004818154811061053157600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff91821692501682565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b61049660006116b1565b60005473ffffffffffffffffffffffffffffffffffffffff163314610673576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b3073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106f5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071991906119c4565b73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610763573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078791906119c4565b73ffffffffffffffffffffffffffffffffffffffff1614156107d5576040517fbdebb83f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33ff5b60008183516020850134f59050803b6107f057600080fd5b505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b73ffffffffffffffffffffffffffffffffffffffff8116610919576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610485565b610922816116b1565b50565b60005473ffffffffffffffffffffffffffffffffffffffff1633146109a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b805160005b818110156107f05760048382815181106109c7576109c76119e1565b602090810291909101810151825460018082018555600094855293839020825160029092020180547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff938416178255929093015192840180549092169216919091179055016109ab565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ab6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ada91906119c4565b6040517ff2fde38b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301529192509082169063f2fde38b90602401600060405180830381600087803b158015610b6757600080fd5b505af1158015610b7b573d6000803e3d6000fd5b5050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1391906119c4565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca691906119c4565b60045490915060005b81811015610dd4576003546004805473ffffffffffffffffffffffffffffffffffffffff90921691637bccacee919084908110610cee57610cee6119e1565b906000526020600020906002020160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660048481548110610d3357610d336119e1565b600091825260209091206002909102015460405160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b158015610db157600080fd5b505af1158015610dc5573d6000803e3d6000fd5b50505050806001019050610caf565b506001546040517fe26b2f6300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529084169063e26b2f6390602401600060405180830381600087803b158015610e4257600080fd5b505af1158015610e56573d6000803e3d6000fd5b50506001546040517fcf33d95500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201527f0000000000000000000000000000000000000000000000000000000000000000909116925063cf33d9559150602401600060405180830381600087803b158015610ee857600080fd5b505af1158015610efc573d6000803e3d6000fd5b50505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f919190611a10565b905060005b818110156116ab576003546040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810183905260009173ffffffffffffffffffffffffffffffffffffffff1690635094cb4f90602401602060405180830381865afa15801561100e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103291906119c4565b6001546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80841660048301529293506000929091169063fdd5764590602401602060405180830381865afa1580156110a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110cc91906119c4565b905060008173ffffffffffffffffffffffffffffffffffffffff1663ce30bbdb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561111b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113f9190611a29565b9050600c81601081111561115557611155611a4a565b14156116225760008273ffffffffffffffffffffffffffffffffffffffff166320b2c1516040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111cc91906119c4565b905060008373ffffffffffffffffffffffffffffffffffffffff1663927188d96040518163ffffffff1660e01b8152600401602060405180830381865afa15801561121b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123f91906119c4565b905060008473ffffffffffffffffffffffffffffffffffffffff166399253ac06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561128e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b291906119c4565b6040517f9dcb511a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152919250908a169063e8a97a3e9083908390639dcb511a90602401602060405180830381865afa15801561132c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135091906119c4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156113bd57600080fd5b505af11580156113d1573d6000803e3d6000fd5b50506040517f9dcb511a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301528c16925063e8a97a3e915085908390639dcb511a90602401602060405180830381865afa15801561144b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061146f91906119c4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156114dc57600080fd5b505af11580156114f0573d6000803e3d6000fd5b50506003546001546040517f7832743800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301529283169450633e7c88d69350879290911690637832743890602401602060405180830381865afa158015611573573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115979190611a79565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015261ffff166024820152604401600060405180830381600087803b15801561160657600080fd5b505af115801561161a573d6000803e3d6000fd5b505050505050505b600d81601081111561163657611636611a4a565b141561169d578173ffffffffffffffffffffffffffffffffffffffff16639b51ecd36040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561168457600080fd5b505af1158015611698573d6000803e3d6000fd5b505050505b836001019350505050610f96565b50505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561173857600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156117915761179161173f565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156117de576117de61173f565b604052919050565b600080604083850312156117f957600080fd5b823567ffffffffffffffff8082111561181157600080fd5b818501915085601f83011261182557600080fd5b81356020828211156118395761183961173f565b611869817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011601611797565b9250818352878183860101111561187f57600080fd5b8181850182850137600091830181019190915290969401359450505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461092257600080fd5b6000602082840312156118d257600080fd5b81356118dd8161189e565b9392505050565b600060208083850312156118f757600080fd5b823567ffffffffffffffff8082111561190f57600080fd5b818501915085601f83011261192357600080fd5b8135818111156119355761193561173f565b611943848260051b01611797565b818152848101925060069190911b83018401908782111561196357600080fd5b928401925b818410156119b957604084890312156119815760008081fd5b61198961176e565b84356119948161189e565b8152848601356119a38161189e565b8187015283526040939093019291840191611968565b979650505050505050565b6000602082840312156119d657600080fd5b81516118dd8161189e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215611a2257600080fd5b5051919050565b600060208284031215611a3b57600080fd5b8151601181106118dd57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060208284031215611a8b57600080fd5b815161ffff811681146118dd57600080fdfea264697066735822122090f5e4310a8b66bfdd7fdfbe64bc5b98570e7c1a415ffb0ced3c857cf6c5b14064736f6c634300080a00336101606040526000805462ff00001916620c00001790553480156200002357600080fd5b50604051620058e8380380620058e8833981016040819052620000469162000537565b806001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000085573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ab919062000537565b6000805460ff191690556001600160a01b038116620000dd57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200011c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000142919062000537565b6001600160a01b03166080816001600160a01b031681525050506000816001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200019d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c3919062000537565b6001600160a01b03831661010081905260e081905260408051632495a59960e01b81529051929350600092632495a599916004808201926020929091908290030181865afa1580156200021a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000240919062000537565b6001600160a01b03811660c05290506200025a8162000472565b816001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000299573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002bf919062000537565b6001600160a01b0316610120816001600160a01b031681525050816001600160a01b03166377532ed96040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000318573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033e919062000537565b6001600160a01b0316610140816001600160a01b031681525050816001600160a01b031663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000397573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003bd919062000537565b6001600001600a6101000a8154816001600160a01b0302191690836001600160a01b03160217905550816001600160a01b0316639068a8686040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000425573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044b919062000537565b6001600160a01b031660a0525050600380546001600160a01b031916331790555062000588565b6001600160a01b03811660009081526006602052604090205415620004aa57604051632e5a5c7760e01b815260040160405180910390fd5b61010060055410620004cf57604051631cbbe18560e01b815260040160405180910390fd5b600580546001600160a01b0383166000818152600660209081526040808320600190951b948590558483526004909152812091909155825491929062000515836200055e565b91905055505050565b6001600160a01b03811681146200053457600080fd5b50565b6000602082840312156200054a57600080fd5b815162000557816200051e565b9392505050565b60006000198214156200058157634e487b7160e01b600052601160045260246000fd5b5060010190565b60805160a05160c05160e051610100516101205161014051615248620006a0600039600081816107e20152818161371001526137c501526000818161052f01526136780152600081816103d301528181610e5701528181610ebb015281816124ff0152818161265a01528181612aa101528181612b8c01528181612c4e01528181612d0d0152613b8f015260006105a401526000818161062701528181610d2201528181610db301528181610e0001528181610e3601528181610f3f0152818161203a01528181612b6b015281816130ee015281816134dc015281816135a90152613fe601526000818161081c01528181610fe101526124c20152600081816107a80152818161118401526122cb01526152486000f3fe608060405234801561001057600080fd5b50600436106103415760003560e01c8063830aa745116101bd578063a70bc542116100f9578063e75538c7116100a2578063f9aa028a1161007c578063f9aa028a1461089d578063fdd57645146108bd578063fe47cde7146108f3578063ff6875431461091357600080fd5b8063e75538c714610864578063e958b70414610877578063f67c5bd01461088a57600080fd5b8063db7ceb80116100d3578063db7ceb8014610817578063dc2b21c11461083e578063e1998cf91461085157600080fd5b8063a70bc542146107ca578063c5e10eef146107dd578063d48bfca71461080457600080fd5b806394cf073a116101665780639f5f86ae116101405780639f5f86ae146107745780639fd12b7714610787578063a366f49614610790578063a50cf2c8146107a357600080fd5b806394cf073a146106f557806395373018146107085780639af1d35a1461071b57600080fd5b80638991b2f1116101975780638991b2f1146106af5780638fe3f93f146106cf578063944ac59f146106e257600080fd5b8063830aa7451461066f5780638345f26e146106825780638456cb59146106a757600080fd5b8063458936f51161028c578063570a7af2116102355780636ce4074a1161020f5780636ce4074a146105ef5780636e98e5e41461060f5780636f307dc314610622578063783274381461064957600080fd5b8063570a7af21461059f5780635c975abb146105c6578063654a9eda146105dc57600080fd5b80635063524a116102665780635063524a1461055157806351e3f1601461058457806354fd4d501461059757600080fd5b8063458936f51461050e57806346fb371d146105175780634f0e0ef31461052a57600080fd5b80632630c12f116102ee5780633192195c116102c85780633192195c146104be5780633e8297ca146104e65780633f4ba83a1461050657600080fd5b80632630c12f1461045857806329df0b93146104845780632f7a18811461049757600080fd5b806316f0115b1161031f57806316f0115b146103ce578063172c48c7146103f55780632362a2d81461043757600080fd5b8063055ee9b5146103465780630d8f9cee146103a657806311ca4fc2146103bb575b600080fd5b61037c610354366004614a87565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6103b96103b4366004614aa4565b610949565b005b6103b96103c9366004614aa4565b610a76565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b610408610403366004614add565b610b4e565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835261ffff90911660208301520161039d565b61044a610445366004614b13565b610b66565b60405190815260200161039d565b6001546a0100000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1661037c565b6103b9610492366004614a87565b6110be565b60005461037c906301000000900473ffffffffffffffffffffffffffffffffffffffff1681565b6104d16104cc366004614a87565b611122565b6040805192835260208301919091520161039d565b61044a6104f4366004614a87565b60096020526000908152604090205481565b6103b9611156565b61044a60055481565b6103b9610525366004614b95565b611244565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b61056461055f366004614be6565b61149b565b60408051948552602085019390935291830152606082015260800161039d565b6103b9610592366004614aa4565b611602565b61044a600281565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b60005460ff16604051901515815260200161039d565b6103b96105ea366004614c21565b611703565b6106026105fd366004614d40565b611bbb565b60405161039d9190614e5b565b6103b961061d366004614aa4565b611e8e565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b61065c610657366004614a87565b612036565b60405161ffff909116815260200161039d565b6103b961067d366004614b95565b61210f565b6000546106959062010000900460ff1681565b60405160ff909116815260200161039d565b6103b961229d565b61044a6106bd366004614a87565b60086020526000908152604090205481565b61037c6106dd366004614e6e565b612389565b6103b96106f0366004614ea5565b612718565b61044a610703366004614f0a565b612845565b6103b9610716366004614a87565b612e5a565b6001546040805161ffff808416825262010000840481166020830152640100000000840481169282019290925266010000000000008304821660608201526801000000000000000090920416608082015260a00161039d565b6103b9610782366004614a87565b612f85565b61044a60075481565b6103b961079e366004614add565b613045565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b96107d8366004614f4c565b61309b565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b9610812366004614a87565b613221565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b961084c366004614f81565b61327b565b6103b961085f366004614aa4565b613306565b610408610872366004614add565b6134c9565b61037c610885366004614a87565b613541565b61044a610898366004614a87565b6135a5565b60035461037c9073ffffffffffffffffffffffffffffffffffffffff1681565b61037c6108cb366004614a87565b600b6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b600c5461037c9073ffffffffffffffffffffffffffffffffffffffff1681565b61037c610921366004614a87565b600a6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561099b57506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b156109d2576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff1615610a14576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055610a4a828261362e565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b60035473ffffffffffffffffffffffffffffffffffffffff163314610ac7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805473ffffffffffffffffffffffffffffffffffffffff9384166301000000027fffffffffffffffffff0000000000000000000000000000000000000000ffffff90911617905560018054919092166a0100000000000000000000027fffff0000000000000000000000000000000000000000ffffffffffffffffffff909116179055565b600080610b5d6001841b6134c9565b91509150915091565b6000805460ff1615610bd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064015b60405180910390fd5b600054610100900460ff1615610c1b576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff163314610ca0576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610cab89613541565b90506000806000806000610cbe86611122565b9094509050610ccf8c8e868461149b565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152939b5093985090955093506000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015610d6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8f9190614fa4565b9050610d9b8887614fec565b610da6906001614fec565b811115610de657610de1877f00000000000000000000000000000000000000000000000000000000000000008d60018c8b870303038d61366e565b610e30565b610e3073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168d8960018a8d01869003016138c0565b610e7e877f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000089600061366e565b6040517fca9505e40000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604481018490527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ca9505e490606401600060405180830381600087803b158015610f1457600080fd5b505af1158015610f28573d6000803e3d6000fd5b50505050505050506001841115610f6757610f67837f00000000000000000000000000000000000000000000000000000000000000008d87600061366e565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260086020526040902054861916610f9c8489888461395b565b6040517f89b77b3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f000000000000000000000000000000000000000000000000000000000000000016906389b77b3e90602401600060405180830381600087803b15801561102557600080fd5b505af1158015611039573d6000803e3d6000fd5b50505073ffffffffffffffffffffffffffffffffffffffff909c16600090815260026020526040812080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550929a9950505050505050505050565b6000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314611116576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61111f81613a35565b50565b60008060008061113185613aa6565b91955092509050816111438286615004565b61114d9190615041565b92505050915091565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156111e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611204919061507c565b61123a576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611242613c24565b565b60005460ff16156112b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156112f3576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100178155338152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff9081169084161480159061137457506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b80156113985750600c5473ffffffffffffffffffffffffffffffffffffffff163314155b806113b7575073ffffffffffffffffffffffffffffffffffffffff8316155b156113ee576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113f7826135a5565b61142d576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061143885613541565b9050611448838583856000613d05565b61146c5761145b83858360006001613d05565b5061146a838583856001613d05565b505b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b6001546000908190819081906127109061ffff166114b98888615099565b6114c39190615004565b6114cd9190615041565b6114d79086614fec565b935060018760028111156114ed576114ed6150b0565b1415611587576001546000906127109061151390640100000000900461ffff168b615004565b61151d9190615041565b6001549091506127109061153b9062010000900461ffff168b615004565b6115459190615041565b61154f9086614fec565b94508481111561156657600185820303935061156a565b8094505b85811061157b578585039250611581565b84860391505b506115f7565b600287600281111561159b5761159b6150b0565b14156115f157600154600090612710906115c59068010000000000000000900461ffff168b615004565b6115cf9190615041565b6001549091506127109061153b906601000000000000900461ffff168b615004565b84840391505b945094509450949050565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561165457506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b1561168b576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff16156116cd576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055610a4a8282613ea6565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561175557506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b1561178c576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff16156117ce576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790556118048584613ea6565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152600091908616906370a0823190602401602060405180830381865afa158015611874573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118989190614fa4565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529192506000918616906370a0823190602401602060405180830381865afa15801561190a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192e9190614fa4565b60015490915060009081906a0100000000000000000000900473ffffffffffffffffffffffffffffffffffffffff16635cecbd0e61196c8689615099565b8a6119778988615099565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152600481019390935273ffffffffffffffffffffffffffffffffffffffff918216602484015260448301528a1660648201526084016040805180830381865afa1580156119f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1791906150df565b9150915060018411611a2d57611a2d898961362e565b611a3687612036565b611a449061ffff1682615004565b9050611a4f88612036565b611a5d9061ffff1683615004565b9150818110611a7857611a6f89613a35565b5050505061146c565b73ffffffffffffffffffffffffffffffffffffffff891660009081526009602052604081205483611ab56b033b2e3c9fd0803ce800000085615004565b611abf9190615041565b611ad5906b033b2e3c9fd0803ce8000000615099565b611adf9190614fec565b60015490915061271090611b0a906b033b2e3c9fd0803ce80000009062010000900461ffff16615004565b611b149190615041565b8111611b555773ffffffffffffffffffffffffffffffffffffffff8a166000908152600960205260409020819055611b4b8a613a35565b505050505061146c565b611b5e8a613f56565b50505073ffffffffffffffffffffffffffffffffffffffff871660009081526009602052604090206001905550505050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b6060611bc960005460ff1690565b15611c30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff1615611c72576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100178155338152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff908116908416141580611ce7575073ffffffffffffffffffffffffffffffffffffffff8316155b15611d3d57600c5473ffffffffffffffffffffffffffffffffffffffff163314611d3d576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611d4885613541565b90508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167faed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab0360405160405180910390a36040517f1cff79cd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821690631cff79cd90611df89087908790600401615103565b6000604051808303816000875af1158015611e17573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611e5d9190810190615132565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905595945050505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314611edf576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821615611f4f5773ffffffffffffffffffffffffffffffffffffffff8281166000908152600a6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169183169190911790555b73ffffffffffffffffffffffffffffffffffffffff811615611fbf5773ffffffffffffffffffffffffffffffffffffffff8181166000908152600b6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169184169190911790555b73ffffffffffffffffffffffffffffffffffffffff811673cccccccccccccccccccccccccccccccccccccccc141561203257600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790555b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120ba5750506001547e01000000000000000000000000000000000000000000000000000000000000900461ffff1690565b60006120c5836135a5565b9050806120fe576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612107816134c9565b949350505050565b60005460ff161561217c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156121be576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff163314612243576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61224d8383613ea6565b61226f73ffffffffffffffffffffffffffffffffffffffff83168585846138c0565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555050565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015612327573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061234b919061507c565b612381576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112426142d4565b6000805460ff16156123f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff1615612439576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff1633146124be576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166321d18456857f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612568573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061258c9190614fa4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168152600481019290925260248201526044016020604051808303816000875af11580156125e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061260b91906151a0565b6040517fbf28068b0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff80831660248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063bf28068b90604401600060405180830381600087803b1580156126a057600080fd5b505af11580156126b4573d6000803e3d6000fd5b505050506126c28382614394565b73ffffffffffffffffffffffffffffffffffffffff811660009081526008602052604081206001905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690559392505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314612769576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805461ffff92831668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9484166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff96851664010000000002969096167fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff97851662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000090931694909816939093171794909416949094179190911716919091179055565b6000805460ff16156128b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156128f5576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff16331461297a576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080600061298887613aa6565b925092509250846129a25761299d8684615099565b6129ac565b6129ac8684614fec565b935060008515612b045769021e19e0c9bab24000008510612a15576129d583603689901c615004565b6129e3603686901c84615004565b6129ed9190614fec565b603686901c6129fc8585615004565b612a069190615004565b612a109190615041565b612a52565b612a1f8388615004565b612a298584615004565b612a339190614fec565b85612a3e8585615004565b612a489190615004565b612a529190615041565b6040517fbf28068b0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff8a811660248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063bf28068b90604401600060405180830381600087803b158015612ae757600080fd5b505af1158015612afb573d6000803e3d6000fd5b50505050612d9f565b60008484612b128583615004565b612b1c9190615041565b612b269190615099565b60015490915060009061271090612b419061ffff1684615004565b612b4b9190615041565b905073ffffffffffffffffffffffffffffffffffffffff8a1663d1660f997f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000084612bb6878f614fec565b612bc09190614fec565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b158015612c3457600080fd5b505af1158015612c48573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ca9505e4838b612c949190614fec565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815260048101919091526024810184905260006044820152606401600060405180830381600087803b158015612cf357600080fd5b505af1158015612d07573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d9a9190614fa4565b925050505b6040517f16128211000000000000000000000000000000000000000000000000000000008152600481018690526024810182905273ffffffffffffffffffffffffffffffffffffffff891690631612821190604401600060405180830381600087803b158015612e0e57600080fd5b505af1158015612e22573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055509498975050505050505050565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff16158015612eac57506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b15612ee3576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff1615612f25576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055612f5a81613f56565b50600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b60035473ffffffffffffffffffffffffffffffffffffffff163314612fd6576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517ff62005acebe9b616aefb5f248b48f5e89f28437b27d1eebc0b2d911209f297af90600090a250565b60035473ffffffffffffffffffffffffffffffffffffffff163314613096576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600755565b60035473ffffffffffffffffffffffffffffffffffffffff1633146130ec576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613193576001805461ffff83167e01000000000000000000000000000000000000000000000000000000000000027dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790555050565b600061319e836135a5565b9050806131d7576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000908152600460205260409020805473ffffffffffffffffffffffffffffffffffffffff1675ffff000000000000000000000000000000000000000060a084901b161790555050565b60035473ffffffffffffffffffffffffffffffffffffffff163314613272576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61111f81614467565b60035473ffffffffffffffffffffffffffffffffffffffff1633146132cc576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805460ff90921662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff909216919091179055565b60005460ff1615613373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156133b5576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff16331461343a576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061344583613541565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260026020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055905061349c8282614394565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b60008082600114156135275750506001547f0000000000000000000000000000000000000000000000000000000000000000927e0100000000000000000000000000000000000000000000000000000000000090910461ffff169150565b50506000908152600460205260409020549060a082901c90565b73ffffffffffffffffffffffffffffffffffffffff80821660009081526002602052604090205416806135a0576040517fb5ba4c4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146136255773ffffffffffffffffffffffffffffffffffffffff8216600090815260066020526040902054613628565b60015b92915050565b6000613639826135a5565b73ffffffffffffffffffffffffffffffffffffffff909316600090815260086020526040902080549319939093169092555050565b8080156136c657507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b15613828576040517fd1660f9900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301526044820184905286169063d1660f9990606401600060405180830381600087803b15801561376357600080fd5b505af1158015613777573d6000803e3d6000fd5b50506040517f5869dba800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690527f0000000000000000000000000000000000000000000000000000000000000000169250635869dba89150604401600060405180830381600087803b15801561380b57600080fd5b505af115801561381f573d6000803e3d6000fd5b505050506138b9565b6040517fd1660f9900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301526044820184905286169063d1660f9990606401600060405180830381600087803b1580156138a057600080fd5b505af11580156138b4573d6000803e3d6000fd5b505050505b5050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261395590859061455b565b50505050565b60025b8181116138b95781811615613a2d576000613978826134c9565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529192506000918316906370a0823190602401602060405180830381865afa1580156139eb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a0f9190614fa4565b90506002811115613a2a57613a2a878388600185038961366e565b50505b60011b61395e565b73ffffffffffffffffffffffffffffffffffffffff811660009081526008602052604081205490613a6582614667565b60005490915062010000900460ff16811115613aa1576000613a86836146a7565b613a91906001614fec565b905061395584848460008561470b565b505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff16631afbb7a46040518163ffffffff1660e01b8152600401602060405180830381865afa158015613af6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b1a9190614fa4565b92508373ffffffffffffffffffffffffffffffffffffffff166317d11a156040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b8b9190614fa4565b91507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bf8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c1c9190614fa4565b929491935050565b60005460ff16613c90576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610bd0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6040805173ffffffffffffffffffffffffffffffffffffffff8681166024830152604480830186905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b30000000000000000000000000000000000000000000000000000000017905291517f1cff79cd000000000000000000000000000000000000000000000000000000008152600092861691631cff79cd91613dc6918a91600401615103565b6000604051808303816000875af1925050508015613e2457506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052613e219190810190615132565b60015b613e2d57613e61565b80511580613e50575080806020019051810190613e4a919061507c565b15156001145b15613e5f576001915050613e9d565b505b8115613e99576040517f76e3e29c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060005b95945050505050565b6000613eb1826135a5565b9050801580613ec35750600754811615155b15613efa576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83166000908152600860205260409020548116613aa15773ffffffffffffffffffffffffffffffffffffffff83166000908152600860205260409020805482179055505050565b60015473ffffffffffffffffffffffffffffffffffffffff8281166000908152600860205260408120546a010000000000000000000090930490911691908080613f9f86611122565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526127108202600482015273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350908716915063f9a6503090604401602060405180830381865afa15801561403a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061405e9190614fa4565b9250614069846146a7565b6001019150506000806000805b848110156142a157801561408f5760018186031b614092565b60015b935086841615614299576000806140a8866134c9565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8e811660048301529294509092506000918416906370a0823190602401602060405180830381865afa15801561411d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141419190614fa4565b9050600181111561428c576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff848116602483015261ffff841691908d169063f9a6503090604401602060405180830381865afa1580156141c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141ea9190614fa4565b6141f49190615004565b6141fe9087614fec565b95508886106142875760006142128b614667565b60005490915062010000900460ff16811115614249576142448d8c836001891561423e57898e0361470b565b8d61470b565b614278565b85156142785773ffffffffffffffffffffffffffffffffffffffff8d1660009081526008602052604090208b90555b50505050505050505050505050565b614295565b98861898600194505b5050505b600101614076565b506040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005460ff1615614341576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613cdb3390565b73ffffffffffffffffffffffffffffffffffffffff821615806143dd575073ffffffffffffffffffffffffffffffffffffffff8281166000908152600260205260409020541615155b15614414576040517f9e59609e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff918216600090815260026020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001691909216179055565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260066020526040902054156144c4576040517f2e5a5c7700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61010060055410614501576040517f1cbbe18500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005805473ffffffffffffffffffffffffffffffffffffffff83166000818152600660209081526040808320600190951b9485905584835260049091528120919091558254919290614552836151bd565b91905055505050565b60006145bd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166148799092919063ffffffff16565b805190915015613aa157808060200190518101906145db919061507c565b613aa1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610bd0565b60008060005b6101008110156146a0576001811b91508382161561468c578260010192505b838210614698576146a0565b60010161466d565b5050919050565b600081600114156146ba57506000919050565b61010060015b60016146cc8284614fec565b901c92506001831b848116158015906146e75750600185851c145b156146f257506146a0565b84811061470157839250614705565b8391505b506146c0565b815b81811015614846576001811b8581161561483d57600061472c826134c9565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529192506000918316906370a0823190602401602060405180830381865afa15801561479f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147c39190614fa4565b90506001811161483a57600054978318977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9097019660ff6201000090910416871161483a5750505073ffffffffffffffffffffffffffffffffffffffff86166000908152600860205260409020859055506138b9565b50505b5060010161470d565b506040517f53275fcb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606148888484600085614892565b90505b9392505050565b606082471015614924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610bd0565b843b61498c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610bd0565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516149b591906151f6565b60006040518083038185875af1925050503d80600081146149f2576040519150601f19603f3d011682016040523d82523d6000602084013e6149f7565b606091505b5091509150614a07828286614a12565b979650505050505050565b60608315614a2157508161488b565b825115614a315782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd09190614e5b565b73ffffffffffffffffffffffffffffffffffffffff8116811461111f57600080fd5b600060208284031215614a9957600080fd5b813561488b81614a65565b60008060408385031215614ab757600080fd5b8235614ac281614a65565b91506020830135614ad281614a65565b809150509250929050565b600060208284031215614aef57600080fd5b5035919050565b8035600381106135a057600080fd5b801515811461111f57600080fd5b600080600080600080600060e0888a031215614b2e57600080fd5b8735614b3981614a65565b9650614b4760208901614af6565b9550604088013594506060880135614b5e81614a65565b93506080880135614b6e81614a65565b925060a0880135915060c0880135614b8581614b05565b8091505092959891949750929550565b60008060008060808587031215614bab57600080fd5b8435614bb681614a65565b93506020850135614bc681614a65565b92506040850135614bd681614a65565b9396929550929360600135925050565b60008060008060808587031215614bfc57600080fd5b84359350614c0c60208601614af6565b93969395505050506040820135916060013590565b600080600080600060a08688031215614c3957600080fd5b8535614c4481614a65565b94506020860135614c5481614a65565b93506040860135614c6481614a65565b94979396509394606081013594506080013592915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614cf257614cf2614c7c565b604052919050565b600067ffffffffffffffff821115614d1457614d14614c7c565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600080600060608486031215614d5557600080fd5b8335614d6081614a65565b92506020840135614d7081614a65565b9150604084013567ffffffffffffffff811115614d8c57600080fd5b8401601f81018613614d9d57600080fd5b8035614db0614dab82614cfa565b614cab565b818152876020838501011115614dc557600080fd5b816020840160208301376000602083830101528093505050509250925092565b60005b83811015614e00578181015183820152602001614de8565b838111156139555750506000910152565b60008151808452614e29816020860160208601614de5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061488b6020830184614e11565b60008060408385031215614e8157600080fd5b823591506020830135614ad281614a65565b803561ffff811681146135a057600080fd5b600080600080600060a08688031215614ebd57600080fd5b614ec686614e93565b9450614ed460208701614e93565b9350614ee260408701614e93565b9250614ef060608701614e93565b9150614efe60808701614e93565b90509295509295909350565b600080600060608486031215614f1f57600080fd5b8335614f2a81614a65565b9250602084013591506040840135614f4181614b05565b809150509250925092565b60008060408385031215614f5f57600080fd5b8235614f6a81614a65565b9150614f7860208401614e93565b90509250929050565b600060208284031215614f9357600080fd5b813560ff8116811461488b57600080fd5b600060208284031215614fb657600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115614fff57614fff614fbd565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561503c5761503c614fbd565b500290565b600082615077577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60006020828403121561508e57600080fd5b815161488b81614b05565b6000828210156150ab576150ab614fbd565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600080604083850312156150f257600080fd5b505080516020909101519092909150565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015260006148886040830184614e11565b60006020828403121561514457600080fd5b815167ffffffffffffffff81111561515b57600080fd5b8201601f8101841361516c57600080fd5b805161517a614dab82614cfa565b81815285602083850101111561518f57600080fd5b613e9d826020830160208601614de5565b6000602082840312156151b257600080fd5b815161488b81614a65565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156151ef576151ef614fbd565b5060010190565b60008251615208818460208701614de5565b919091019291505056fea26469706673582212209d39bb9d4972b515acdad1ffb757acd15e103ca6ee762f88a6382b36243734ba64736f6c634300080a00336101406040523480156200001257600080fd5b5060405162005e9738038062005e97833981016040819052620000359162000198565b60016000556001600160a01b0383166200006257604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038316608081905260408051636f307dc360e01b81529051636f307dc3916004808201926020929091908290030181865afa158015620000ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d39190620001ea565b6001600160a01b031660a0816001600160a01b031681525050826001600160a01b0316634f0e0ef36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200012b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001519190620001ea565b6001600160a01b0390811660c0529190911660e0819052151561010052151561012052506200020f565b80516001600160a01b03811681146200019357600080fd5b919050565b600080600060608486031215620001ae57600080fd5b620001b9846200017b565b9250620001c9602085016200017b565b915060408401518015158114620001df57600080fd5b809150509250925092565b600060208284031215620001fd57600080fd5b62000208826200017b565b9392505050565b60805160a05160c05160e0516101005161012051615a86620004116000396000818161061101528181612fb5015261481f01526000818161031701528181610dde015281816144f901526146e5015260008181610557015281816146a901526147a901526000818161034b0152818161387d015261392d01526000818161047301528181611bfe0152818161274f0152818161280d0152818161366a01526137dd015260008181610665015281816109d801528181610b0301528181610bd501528181610cdd01528181610e6501528181610fe30152818161114e0152818161120e0152818161132e015281816114510152818161162b01528181611708015281816117e0015281816119e501528181611b1201528181611d9501528181611ed5015281816120040152818161216801528181612290015281816123c601528181612568015281816126390152818161266f0152818161293d01528181612a2101528181612a8a01528181612bde01528181612d2601528181612e6801528181612ec2015281816130a10152818161311b015281816131b401528181613341015281816134c10152818161358a0152818161372f01528181613a1a01528181613b2e01528181613dbb015281816142200152818161432801528181614492015281816148e7015281816149e801528181614aae0152614d8f0152615a866000f3fe6080604052600436106102695760003560e01c8063860aefcf11610153578063c7de38a6116100cb578063dfd594651161007f578063eb9606df11610064578063eb9606df1461081e578063f9eaee0d1461083e578063ffd9b9071461085e57600080fd5b8063dfd59465146107de578063e1f21c67146107fe57600080fd5b8063cff0ab96116100b0578063cff0ab96146106ef578063d9ccbec114610783578063dcf65482146107be57600080fd5b8063c7de38a6146106a7578063caa5c23f146106dc57600080fd5b80639c55a05411610122578063b55bb84b11610107578063b55bb84b14610633578063c12c21c014610653578063c690908a1461068757600080fd5b80639c55a054146105df578063b1836d32146105ff57600080fd5b8063860aefcf146104db5780639408b63f146105455780639b67ab30146105795780639be0536a146105bd57600080fd5b80635d91a0e0116101e65780636d19b486116101b55780637071b7c51161019a5780637071b7c51461049557806379c0ef91146104a857806382871ace146104c857600080fd5b80636d19b486146104415780636f307dc31461046157600080fd5b80635d91a0e0146103e85780635f73fbec146103fb578063601d66f61461040e5780636c8f225d1461042e57600080fd5b80633d9287fa1161023d5780635019e20a116102225780635019e20a1461039257806354fd4d50146103b257806359781034146103d557600080fd5b80633d9287fa146103055780634f0e0ef31461033957600080fd5b8062842b571461026e578063256ac915146102905780632a7ba1f7146102c55780632b7c7b11146102e5575b600080fd5b34801561027a57600080fd5b5061028e6102893660046151bf565b61087e565b005b34801561029c57600080fd5b506102b06102ab3660046151f8565b61098e565b60405190151581526020015b60405180910390f35b3480156102d157600080fd5b5061028e6102e0366004615215565b610a61565b3480156102f157600080fd5b5061028e610300366004615215565b610c3b565b34801561031157600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561034557600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102bc565b34801561039e57600080fd5b5061028e6103ad3660046151f8565b610d6a565b3480156103be57600080fd5b506103c7600281565b6040519081526020016102bc565b61028e6103e336600461522e565b61108c565b61028e6103f63660046152bb565b611275565b61028e610409366004615340565b611589565b34801561041a57600080fd5b5061028e6104293660046153d8565b6117de565b61028e61043c36600461541b565b611900565b34801561044d57600080fd5b506102b061045c3660046151f8565b611c31565b34801561046d57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b61028e6104a336600461546e565b611c60565b3480156104b457600080fd5b5061036d6104c3366004615215565b611f3e565b61028e6104d63660046152bb565b611f4b565b3480156104e757600080fd5b5060025461051c906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041682565b604080516fffffffffffffffffffffffffffffffff9384168152929091166020830152016102bc565b34801561055157600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561058557600080fd5b506004546040805167ffffffffffffffff608084901c1681526fffffffffffffffffffffffffffffffff9092166020830152016102bc565b3480156105c957600080fd5b506105d261227d565b6040516102bc91906154e2565b3480156105eb57600080fd5b5061028e6105fa36600461553c565b61228e565b34801561060b57600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561063f57600080fd5b5061028e61064e3660046151f8565b6123c4565b34801561065f57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561069357600080fd5b5061028e6106a23660046151f8565b6124c6565b3480156106b357600080fd5b506106c76106c23660046151f8565b612668565b604080519283526020830191909152016102bc565b61028e6106ea366004615557565b61289b565b3480156106fb57600080fd5b5060015461074e906fffffffffffffffffffffffffffffffff811690700100000000000000000000000000000000810460ff169071010000000000000000000000000000000000900464ffffffffff1683565b604080516fffffffffffffffffffffffffffffffff9094168452911515602084015264ffffffffff16908201526060016102bc565b34801561078f57600080fd5b506102b061079e366004615599565b600360209081526000928352604080842090915290825290205460ff1681565b3480156107ca57600080fd5b5061028e6107d93660046151f8565b612a88565b3480156107ea57600080fd5b506103c76107f93660046151f8565b612b86565b34801561080a57600080fd5b5061028e61081936600461522e565b612c6d565b34801561082a57600080fd5b5061028e6108393660046155c7565b612ec0565b34801561084a57600080fd5b506102b06108593660046151f8565b613057565b34801561086a57600080fd5b5061028e6108793660046155ee565b6131b2565b600260005414156108f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b6002600090815573ffffffffffffffffffffffffffffffffffffffff8316808252600360209081526040808420338086529083529381902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081527f9b3258bc4904fd6426b99843e206c6c7cdb1fd0f040121c25b71dafbb3851ee0910160405180910390a350506001600055565b6040517f055ee9b500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063055ee9b590602401602060405180830381865afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a43919061560b565b73ffffffffffffffffffffffffffffffffffffffff16141592915050565b60026000541415610ace576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610b5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b83919061560b565b9050610b903382846132eb565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906395373018906024015b600060405180830381600087803b158015610c1a57600080fd5b505af1158015610c2e573d6000803e3d6000fd5b5050600160005550505050565b60026000541415610ca8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610d39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5d919061560b565b9050610b90338284613411565b60026000541415610dd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000557f000000000000000000000000000000000000000000000000000000000000000015610e34576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610ec1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee5919061560b565b33600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915290205490915060ff16610f52576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f5d82613583565b5090508015610f98576040517ff713841e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b15801561102757600080fd5b505af115801561103b573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692503391507f93c70cc9715bef0d83edf2095f3595402279d274f402a73ffc17f1bcb19d863d90600090a35050600160005550565b600260005414156110f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611106613875565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063e958b70490602401602060405180830381865afa158015611197573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bb919061560b565b90506111c9848285856139b7565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401600060405180830381600087803b15801561125257600080fd5b505af1158015611266573d6000803e3d6000fd5b50506001600055505050505050565b600260005414156112e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611375573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611399919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166113e8576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806113f483613583565b915091508161142f576040517f1fdd676f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611437613875565b831561144d5761144d85858b8660016000613ae3565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632362a2d88b600185338e8e8e6040518863ffffffff1660e01b81526004016114b59796959493929190615663565b6020604051808303816000875af11580156114d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f891906156bf565b90508873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f7dfecd8419723a9d3954585a30c2a270165d70aafa146c11c1e1b88ae14390648460405161157091815260200190565b60405180910390a4505060016000555050505050505050565b600260005414156115f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ab919061560b565b90506116b5613875565b81156116cb576116cb8383338460016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d89061174a903390600090819083908d908d908d90600401615663565b6020604051808303816000875af1158015611769573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178d91906156bf565b5060405173ffffffffffffffffffffffffffffffffffffffff87169033907f460ad03b1cf79b1d64d3aefa28475f110ab66e84649c52bb41ed796b9b39198190600090a35050600160005550505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611849573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118d1576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff90811670010000000000000000000000000000000002911617600255565b6002600054141561196d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000908155606461198461ffff851687615707565b61198e9190615744565b9050611999816144f7565b6119a2816145e8565b6119ab84614668565b6119b3613875565b6040517f172c48c7000000000000000000000000000000000000000000000000000000008152600060048201819052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a64919061577f565b61ffff169150611a789050816127106157ae565b611a829083615707565b611a8c8288615707565b11611ac3576040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff86811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611b5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b81919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638587604051611bef92919091825261ffff16602082015260400190565b60405180910390a3611c2386827f00000000000000000000000000000000000000000000000000000000000000008a6139b7565b505060016000555050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526006602052604081205415155b92915050565b60026000541415611ccd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611cdb856144f7565b611ce484614668565b611ced856145e8565b600154700100000000000000000000000000000000900460ff1615611d3e576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d46613875565b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff85811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611de0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e04919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638885604051611e7292919091825261ffff16602082015260400190565b60405180910390a38215611e9057611e908484878460006001613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015611f1957600080fd5b505af1158015611f2d573d6000803e3d6000fd5b505060016000555050505050505050565b6000611c5a60058361480f565b60026000541415611fb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa15801561204b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206f919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166120be576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120c661481b565b6120fc576040517f7e52ccb400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061210782612668565b509050612112613875565b82156121285761212884848a8560016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d8906121aa908c90600290879033908f908f908f90600401615663565b6020604051808303816000875af11580156121c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ed91906156bf565b90508773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167ffada13ff2d5e1a1d9da37ad4a4130893b34e3c69c32b17f87ec31fd661b867078460405161226591815260200190565b60405180910390a45050600160005550505050505050565b6060612289600561486b565b905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612381576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561242f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612453919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146124b7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614878565b5050565b60026000541415612533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156125c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e8919061560b565b90506125f4818361489a565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401610c00565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126fc919061560b565b905060008061270b8387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156127a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127c991906156bf565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015291965061271091851690637afb010490604401602060405180830381865afa158015612863573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061288791906156bf565b6128919190615744565b9350505050915091565b60026000541415612908576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129bd919061560b565b90506129c7613875565b8115612a7e576129dc83833384600080613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015612a6557600080fd5b505af1158015612a79573d6000803e3d6000fd5b505050505b5050600160005550565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612af3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b17919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b7b576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614c92565b600080612b9283612668565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152919350600092507f000000000000000000000000000000000000000000000000000000000000000090911690633192195c906024016040805180830381865afa158015612c26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4a91906157c5565b9150819050612c5b61271084615707565b612c659190615744565b949350505050565b60026000541415612cda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063fdd5764590602401602060405180830381865afa158015612d6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d91919061560b565b73ffffffffffffffffffffffffffffffffffffffff161480612dd7575073ffffffffffffffffffffffffffffffffffffffff831660009081526006602052604090205415155b15612e0e576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612eac57600080fd5b505af1158015611c23573d6000803e3d6000fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f4f919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612fb3576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000061300a576040517f50dd11fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805464ffffffffff90921671010000000000000000000000000000000000027fffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffffff909216919091179055565b6040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063f67c5bd090602401602060405180830381865afa1580156130e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061310c91906156bf565b905080158015906131ab5750807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015613184573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a891906156bf565b16155b9392505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561321d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613241919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146132a5576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018054911515700100000000000000000000000000000000027fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff909216919091179055565b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600060448301819052917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561338c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133b091906156bf565b90506133bb816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f98274bf834d179ee08dc0604071b0dc90b54731bd5f725a5a96a39a86bce025a8360405161340391815260200190565b60405180910390a250505050565b61341a816144f7565b600154700100000000000000000000000000000000900460ff161561346b576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600160448301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561350c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061353091906156bf565b905061353b816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f9cac51154cc0d835e2f9c9d1f59a9344588cee107f4203bf58a8c797e3a58c458360405161340391815260200190565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613617919061560b565b90506000806136268387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156136c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136e491906156bf565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529195506000917f00000000000000000000000000000000000000000000000000000000000000001690633192195c906024016040805180830381865afa158015613775573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061379991906157c5565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350600092506127109187169063f9a6503090604401602060405180830381865afa158015613837573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061385b91906156bf565b6138659190615707565b9092109794965093945050505050565b34156139b5577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156138e357600080fd5b505af11580156138f7573d6000803e3d6000fd5b50506040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201523460248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16935063a9059cbb925060440190506020604051808303816000875af115801561398f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139b391906157e9565b505b565b6139c084614cb4565b6040517f830aa74500000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f0000000000000000000000000000000000000000000000000000000000000000169063830aa74590608401600060405180830381600087803b158015613a5e57600080fd5b505af1158015613a72573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fa32435755c235de2976ed44a75a2f85cb01faf0c894f639fe0c32bb9455fea8f83604051613ad591815260200190565b60405180910390a350505050565b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301523060248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b158015613b7257600080fd5b505af1158015613b86573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff871692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a28460005b8181101561441d5736888883818110613bea57613bea615806565b9050602002810190613bfc9190615835565b90506004613c0d6020830183615873565b90501015613c47576040517fe2b0e50600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b30613c5560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16141561421c578415613ca9576040517f5fb9107f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613cb86020830183615873565b613cc1916158d8565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167f59781034000000000000000000000000000000000000000000000000000000001415613e3c5760008080613d1e6020860186615873565b613d2c916004908290615920565b810190613d39919061522e565b925092509250613e34838c73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614613e2b576040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015613e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e26919061560b565b613e2d565b8b5b84846139b7565b505050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2b7c7b11000000000000000000000000000000000000000000000000000000001415613ec757600194506000613e996020840184615873565b613ea7916004908290615920565b810190613eb49190615215565b9050613ec1898983613411565b50614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2a7ba1f7000000000000000000000000000000000000000000000000000000001415613f80578415613f49576040517fc0b0caa800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613f586020840184615873565b613f66916004908290615920565b810190613f739190615215565b9050613ec18989836132eb565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f233a8caa0000000000000000000000000000000000000000000000000000000014156140e457600080613fda6020850185615873565b613fe8916004908290615920565b810190613ff5919061594a565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c8116600483015292945090925082918416906370a0823190602401602060405180830381865afa158015614069573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061408d91906156bf565b10156140dd576040517fa5ac537300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016108e7565b5050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fc690908a00000000000000000000000000000000000000000000000000000000141561416457600061413d6020840184615873565b61414b916004908290615920565b81019061415891906151f8565b9050613ec1888261489a565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f23e27a640000000000000000000000000000000000000000000000000000000014156141e45760006141bd6020840184615873565b6141cb916004908290615920565b8101906141d891906151f8565b9050613ec18882614d42565b6040517f1e9e7e7a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50614414565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff68754361426760208501856151f8565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156142d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142f4919061560b565b73ffffffffffffffffffffffffffffffffffffffff16148061436d575073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001661435560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16145b156143a4576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6144126143b46020830183615873565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506143f69250505060208401846151f8565b73ffffffffffffffffffffffffffffffffffffffff1690614e39565b505b50600101613bcf565b506040517f60c8e8938c9a0c0d88a98d6f1c562ce68077e12bf3edb8047378f2f736cb45b490600090a16040517fe1998cf900000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff86811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b1580156144d657600080fd5b505af11580156144ea573d6000803e3d6000fd5b5050505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006139b3576001546fffffffffffffffffffffffffffffffff9081169081146124c257600454608081901c906fffffffffffffffffffffffffffffffff16600067ffffffffffffffff8316431461456e578461458a565b61458a6fffffffffffffffffffffffffffffffff831686615976565b9050838111156145c6576040517f675f1a5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff81164360801b176004555050505050565b6002546fffffffffffffffffffffffffffffffff16811080614631575060025470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681115b156139b3576040517fce16799400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61467061481b565b156146a7576040517f63fc31c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1615614806577f0000000000000000000000000000000000000000000000000000000000000000801561472657503373ffffffffffffffffffffffffffffffffffffffff821614155b1561475d576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600160248301527f00000000000000000000000000000000000000000000000000000000000000001690639dc29fac90604401600060405180830381600087803b1580156147ed57600080fd5b505af1158015614801573d6000803e3d6000fd5b505050505b6139b381614cb4565b60006131ab8383614e7b565b60007f0000000000000000000000000000000000000000000000000000000000000000801561228957505060015471010000000000000000000000000000000000900464ffffffffff1642101590565b606060006131ab83614ea5565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f01565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561492b57600080fd5b505af115801561493f573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527fdf498aa1c340e992665d6fb4f3be8436d452c45a630cb6d7fab7963da39bac8793500190505b60405180910390a15050565b6040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600091829160019183917f00000000000000000000000000000000000000000000000000000000000000001690638991b2f190602401602060405180830381865afa158015614a2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a5391906156bf565b90505b808211614c895780821615614c7d576040517fe75538c700000000000000000000000000000000000000000000000000000000815260048101839052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e75538c7906024016040805180830381865afa158015614af4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b18919061577f565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529294509092506000918416906370a0823190602401602060405180830381865afa158015614b8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bb191906156bf565b90506001811115614c79576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff8481166024830152600091908b169063f9a6503090604401602060405180830381865afa158015614c33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c5791906156bf565b978801979050614c6b61ffff841682615707565b614c759088615976565b9650505b5050505b600182901b9150614a56565b50509250929050565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f50565b3373ffffffffffffffffffffffffffffffffffffffff821614801590614d0b575033600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16155b156139b3576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b158015614dd357600080fd5b505af1158015614de7573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527f69db9e9764da61b6681b89fb0f5be018506e0342036e56b59c3015a620d60977935001905061498d565b60606131ab83836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250615043565b6000826000018281548110614e9257614e92615806565b9060005260206000200154905092915050565b606081600001805480602002602001604051908101604052809291908181526020018280548015614ef557602002820191906000526020600020905b815481526020019060010190808311614ee1575b50505050509050919050565b6000818152600183016020526040812054614f4857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611c5a565b506000611c5a565b60008181526001830160205260408120548015615039576000614f746001836157ae565b8554909150600090614f88906001906157ae565b9050818114614fed576000866000018281548110614fa857614fa8615806565b9060005260206000200154905080876000018481548110614fcb57614fcb615806565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080614ffe57614ffe61598e565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611c5a565b6000915050611c5a565b6060612c65848460008585843b6150b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108e7565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516150df91906159ed565b60006040518083038185875af1925050503d806000811461511c576040519150601f19603f3d011682016040523d82523d6000602084013e615121565b606091505b509150915061513182828661513c565b979650505050505050565b6060831561514b5750816131ab565b82511561515b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e791906159ff565b73ffffffffffffffffffffffffffffffffffffffff811681146139b357600080fd5b80151581146139b357600080fd5b600080604083850312156151d257600080fd5b82356151dd8161518f565b915060208301356151ed816151b1565b809150509250929050565b60006020828403121561520a57600080fd5b81356131ab8161518f565b60006020828403121561522757600080fd5b5035919050565b60008060006060848603121561524357600080fd5b833561524e8161518f565b9250602084013561525e8161518f565b929592945050506040919091013590565b60008083601f84011261528157600080fd5b50813567ffffffffffffffff81111561529957600080fd5b6020830191508360208260051b85010111156152b457600080fd5b9250929050565b60008060008060008060a087890312156152d457600080fd5b86356152df8161518f565b955060208701356152ef8161518f565b9450604087013593506060870135615306816151b1565b9250608087013567ffffffffffffffff81111561532257600080fd5b61532e89828a0161526f565b979a9699509497509295939492505050565b60008060008060006080868803121561535857600080fd5b85356153638161518f565b945060208601359350604086013561537a816151b1565b9250606086013567ffffffffffffffff81111561539657600080fd5b6153a28882890161526f565b969995985093965092949392505050565b80356fffffffffffffffffffffffffffffffff811681146153d357600080fd5b919050565b600080604083850312156153eb57600080fd5b6153f4836153b3565b9150615402602084016153b3565b90509250929050565b61ffff811681146139b357600080fd5b6000806000806080858703121561543157600080fd5b8435935060208501356154438161518f565b925060408501356154538161540b565b915060608501356154638161540b565b939692955090935050565b60008060008060006080868803121561548657600080fd5b8535945060208601356154988161518f565b9350604086013567ffffffffffffffff8111156154b457600080fd5b6154c08882890161526f565b90945092505060608601356154d48161540b565b809150509295509295909350565b6020808252825182820181905260009190848201906040850190845b8181101561553057835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016154fe565b50909695505050505050565b60006020828403121561554e57600080fd5b6131ab826153b3565b6000806020838503121561556a57600080fd5b823567ffffffffffffffff81111561558157600080fd5b61558d8582860161526f565b90969095509350505050565b600080604083850312156155ac57600080fd5b82356155b78161518f565b915060208301356151ed8161518f565b6000602082840312156155d957600080fd5b813564ffffffffff811681146131ab57600080fd5b60006020828403121561560057600080fd5b81356131ab816151b1565b60006020828403121561561d57600080fd5b81516131ab8161518f565b6003811061565f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b73ffffffffffffffffffffffffffffffffffffffff888116825260e082019061568f602084018a615628565b6040830197909752948616606082015292909416608083015260a082015291151560c09092019190915292915050565b6000602082840312156156d157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561573f5761573f6156d8565b500290565b60008261577a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000806040838503121561579257600080fd5b825161579d8161518f565b60208401519092506151ed8161540b565b6000828210156157c0576157c06156d8565b500390565b600080604083850312156157d857600080fd5b505080516020909101519092909150565b6000602082840312156157fb57600080fd5b81516131ab816151b1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc183360301811261586957600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126158a857600080fd5b83018035915067ffffffffffffffff8211156158c357600080fd5b6020019150368190038213156152b457600080fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156159185780818660040360031b1b83161692505b505092915050565b6000808585111561593057600080fd5b8386111561593d57600080fd5b5050820193919092039150565b6000806040838503121561595d57600080fd5b82356159688161518f565b946020939093013593505050565b60008219821115615989576159896156d8565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60005b838110156159d85781810151838201526020016159c0565b838111156159e7576000848401525b50505050565b600082516158698184602087016159bd565b6020815260008251806020840152615a1e8160408501602087016159bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea2646970667358221220a3f4a705ab580a6ada1e438cd2ee4abc001b62d1d171fce12c41994900fef21664736f6c634300080a003360a06040523480156200001157600080fd5b5060405162005f3d38038062005f3d8339810160408190526200003491620012eb565b826001600160a01b031663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000073573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200009991906200147f565b6001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000d7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000fd91906200147f565b6000805460ff191690556001600160a01b0381166200012f57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200016e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200019491906200147f565b6001600160a01b03908116608052600180546001600160a01b031916918616918217905560408051636f307dc360e01b81529051919250636f307dc39160048083019260209291908290030181865afa158015620001f6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200021c91906200147f565b600260006101000a8154816001600160a01b0302191690836001600160a01b03160217905550826001600160a01b031663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000281573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a791906200147f565b6001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200030b91906200147f565b600080546001600160a01b039290921661010002610100600160a81b0319909216919091179055620003626103e860c86200034b6101f4612710620014bc565b60646200035c60c8612710620014bc565b620005e8565b60408101515160005b81811015620003ee576000836040015182815181106200038f576200038f620014e2565b6020026020010151600001519050620003ae81620007c260201b60201c565b620003e48185604001518481518110620003cc57620003cc620014e2565b60200260200101516020015162000a5e60201b60201c565b506001016200036b565b5060015460408051632630c12f60e01b815290516001600160a01b03909216916311ca4fc29186918491632630c12f9160048083019260209291908290030181865afa15801562000443573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200046991906200147f565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401600060405180830381600087803b158015620004b257600080fd5b505af1158015620004c7573d6000803e3d6000fd5b50506040516001600160a01b03861692507fa8b21f72cb83bce808df32dc2330217d744a1c22f3e9e44e4b11bbf049d37d9d9150600090a2600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000553573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200057991906200147f565b6001600160a01b03167f3f82447be465b0b5a4a9e54c74d5f6ae73f2e9537f2cc1590a340524703d096160405160405180910390a26020820151620005cb90620005c5906002620014f8565b62000bda565b81516020830151620005de919062000dc8565b5050505062001604565b6000620005f68585620014bc565b60015460405163172c48c760e01b81526000600482018190529293506001600160a01b039091169063172c48c7906024016040805180830381865afa15801562000644573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200066a91906200152a565b9150508061ffff168261ffff1614620006be57620006888262000f47565b60025460405161ffff841681526001600160a01b039091169060008051602062005f1d8339815191529060200160405180910390a25b60015460405163944ac59f60e01b815261ffff808a166004830152808916602483015280881660448301528087166064830152851660848201526001600160a01b039091169063944ac59f9060a401600060405180830381600087803b1580156200072857600080fd5b505af11580156200073d573d6000803e3d6000fd5b505050507f2214a403d5f8d049e52eacca974c6dea01a471e41d6a18903bfaf7dbc709741f878787612710620007749190620014bc565b876200078388612710620014bc565b6040805161ffff96871681529486166020860152928516848401529084166060840152909216608082015290519081900360a00190a150505050505050565b6001600160a01b038116620007ea57604051635919af9760e11b815260040160405180910390fd5b62000809816001600160a01b03166200116f60201b620023381760201c565b620008365760405163df4c572d60e01b81526001600160a01b038216600482015260240160405180910390fd5b6040516370a0823160e01b81523060048201526001600160a01b038216906370a0823190602401602060405180830381865afa92505050801562000899575060408051601f3d908101601f19168201909252620008969181019062001564565b60015b620008b75760405163528ca31d60e01b815260040160405180910390fd5b50600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200090c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200093291906200147f565b604051630f9a650360e41b8152670de0b6b3a764000060048201526001600160a01b038381166024830152919091169063f9a6503090604401602060405180830381865afa925050508015620009a7575060408051601f3d908101601f19168201909252620009a49181019062001564565b60015b620009c5576040516367a7cd4360e01b815260040160405180910390fd5b5060015460405163d48bfca760e01b81526001600160a01b0383811660048301529091169063d48bfca790602401600060405180830381600087803b15801562000a0e57600080fd5b505af115801562000a23573d6000803e3d6000fd5b50506040516001600160a01b03841692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a250565b6002546001600160a01b038381169116141562000a8e57604051633b899cf960e01b815260040160405180910390fd5b60015460405163172c48c760e01b8152600060048201819052916001600160a01b03169063172c48c7906024016040805180830381865afa15801562000ad8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000afe91906200152a565b91505061ffff8216158062000b1a57508061ffff168261ffff16115b1562000b39576040516333c6608d60e01b815260040160405180910390fd5b600154604051635385e2a160e11b81526001600160a01b03858116600483015261ffff851660248301529091169063a70bc54290604401600060405180830381600087803b15801562000b8b57600080fd5b505af115801562000ba0573d6000803e3d6000fd5b505060405161ffff851681526001600160a01b038616925060008051602062005f1d833981519152915060200160405180910390a2505050565b600062000be662001175565b6001600160a01b031663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801562000c24573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c4a91906200157e565b50509050600062000c606200117560201b60201c565b6001600160a01b031663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa15801562000c9d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000cc39190620015d5565b915050806001600160801b0316836001600160801b0316101562000cfa576040516309aadd6f60e41b815260040160405180910390fd5b826001600160801b0316826001600160801b03161462000dc35762000d1e62001175565b604051632715681560e21b81526001600160801b03851660048201526001600160a01b039190911690639c55a05490602401600060405180830381600087803b15801562000d6b57600080fd5b505af115801562000d80573d6000803e3d6000fd5b50506040516001600160801b03861681527fa030eec20ae970821387224ec3bb15b4bd22b89bfb86dc4d2b3827aa3d99e48d925060200190505b60405180910390a15b505050565b600062000dd462001175565b6001600160a01b031663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801562000e12573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e3891906200157e565b50509050816001600160801b0316836001600160801b0316118062000e6e5750806001600160801b0316826001600160801b0316115b1562000e8d576040516309aadd6f60e41b815260040160405180910390fd5b62000e9762001175565b60405163300eb37b60e11b81526001600160801b038086166004830152841660248201526001600160a01b03919091169063601d66f690604401600060405180830381600087803b15801562000eec57600080fd5b505af115801562000f01573d6000803e3d6000fd5b5050604080516001600160801b038088168252861660208201527f4d4981437d0211f9e6843eb024d9ada1fa3a99514d4343d4aece106dd11524bb935001905062000dba565b600154600254604051635385e2a160e11b81526001600160a01b03918216600482015261ffff8416602482015291169063a70bc54290604401600060405180830381600087803b15801562000f9b57600080fd5b505af115801562000fb0573d6000803e3d6000fd5b505050506000600160009054906101000a90046001600160a01b03166001600160a01b031663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200100a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001030919062001564565b905060015b8181101562000dc35760015460405163172c48c760e01b81526004810183905260009182916001600160a01b039091169063172c48c7906024016040805180830381865afa1580156200108c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010b291906200152a565b915091508461ffff168161ffff1611156200116457600154604051635385e2a160e11b81526001600160a01b03848116600483015261ffff881660248301529091169063a70bc54290604401600060405180830381600087803b1580156200111957600080fd5b505af11580156200112e573d6000803e3d6000fd5b505060405161ffff881681526001600160a01b038516925060008051602062005f1d833981519152915060200160405180910390a25b505060010162001035565b3b151590565b60015460408051632f7a188160e01b815290516000926001600160a01b031691632f7a18819160048083019260209291908290030181865afa158015620011c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011e691906200147f565b905090565b6001600160a01b03811681146200120157600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b03811182821017156200123f576200123f62001204565b60405290565b604080519081016001600160401b03811182821017156200123f576200123f62001204565b604051601f8201601f191681016001600160401b038111828210171562001295576200129562001204565b604052919050565b80516001600160801b0381168114620012b557600080fd5b919050565b8051620012b581620011eb565b805161ffff81168114620012b557600080fd5b80518015158114620012b557600080fd5b6000806000606084860312156200130157600080fd5b83516200130e81620011eb565b809350506020808501516200132381620011eb565b604086810151919450906001600160401b03808211156200134357600080fd5b9087019060a0828a0312156200135857600080fd5b620013626200121a565b6200136d836200129d565b81526200137c8584016200129d565b8582015283830151828111156200139257600080fd5b8301601f81018b13620013a457600080fd5b805183811115620013b957620013b962001204565b620013c9878260051b016200126a565b818152878101945060069190911b82018701908c821115620013ea57600080fd5b918701915b81831015620014435786838e031215620014095760008081fd5b6200141362001245565b83516200142081620011eb565b81526200142f848a01620012c7565b818a015285529387019391860191620013ef565b838701525062001458905060608401620012ba565b60608201526200146b60808401620012da565b608082015280955050505050509250925092565b6000602082840312156200149257600080fd5b81516200149f81620011eb565b9392505050565b634e487b7160e01b600052601160045260246000fd5b600061ffff83811690831681811015620014da57620014da620014a6565b039392505050565b634e487b7160e01b600052603260045260246000fd5b60006001600160801b0382811684821681151582840482111615620015215762001521620014a6565b02949350505050565b600080604083850312156200153e57600080fd5b82516200154b81620011eb565b91506200155b60208401620012c7565b90509250929050565b6000602082840312156200157757600080fd5b5051919050565b6000806000606084860312156200159457600080fd5b6200159f846200129d565b9250620015af60208501620012da565b9150604084015164ffffffffff81168114620015ca57600080fd5b809150509250925092565b60008060408385031215620015e957600080fd5b620015f4836200129d565b91506200155b602084016200129d565b608051614878620016a56000396000818161033601528181610446015281816107c5015281816108c0015281816109ae01528181610b8301528181610f0a015281816113e1015281816114cf015281816115bb015281816116ab015281816117990152818161187d01528181611ad901528181611bc601528181611cb301528181611da0015281816120090152818161218c015261227901526148786000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80638456cb59116100f9578063dc2b21c111610097578063f0527ac611610071578063f0527ac6146103d7578063f206d32a146103df578063fb1bd8c4146103f2578063ffd9b9071461040557600080fd5b8063dc2b21c11461039e578063e6492d7b146103b1578063eb9606df146103c457600080fd5b8063a50cf2c8116100d3578063a50cf2c814610331578063a70bc54214610358578063b53472ef1461036b578063c12c21c01461037e57600080fd5b80638456cb59146103035780639c55a0541461030b5780639f1c50691461031e57600080fd5b806350e036ff1161016657806354fd4d501161014057806354fd4d50146102b25780635c975abb146102ba5780636f307dc3146102d05780637bccacee146102f057600080fd5b806350e036ff1461027657806352438e541461028c578063526a41e81461029f57600080fd5b80633e7c88d6116101a25780633e7c88d6146102355780633f4ba83a14610248578063456e0742146102505780635094cb4f1461026357600080fd5b806324147708146101c95780632954018c146101de5780632f7a18811461022d575b600080fd5b6101dc6101d7366004614307565b610418565b005b60005461020390610100900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6102036106fe565b6101dc610243366004614334565b610797565b6101dc610892565b6101dc61025e366004614307565b610980565b61020361027136600461436d565b610b36565b61027e610b49565b604051908152602001610224565b6101dc61029a366004614307565b610b55565b6101dc6102ad366004614394565b610edc565b61027e600281565b60005460ff166040519015158152602001610224565b6002546102039073ffffffffffffffffffffffffffffffffffffffff1681565b6101dc6102fe3660046143c2565b6113b3565b6101dc6114a1565b6101dc61031936600461440e565b61158d565b6101dc61032c36600461442b565b61167d565b6102037f000000000000000000000000000000000000000000000000000000000000000081565b6101dc610366366004614334565b61176b565b6101dc610379366004614307565b61184f565b6001546102039073ffffffffffffffffffffffffffffffffffffffff1681565b6101dc6103ac366004614459565b611aab565b6101dc6103bf366004614307565b611b98565b6101dc6103d236600461448f565b611c85565b6101dc611d72565b6101dc6103ed3660046144ac565b611fdb565b6101dc610400366004614307565b61215e565b6101dc61041336600461451d565b61224b565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156104a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c6919061453a565b6104fc576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006105078261233e565b90506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015610578573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059c9190614557565b90508181166106f9576001546040517fa366f496000000000000000000000000000000000000000000000000000000008152918317600483018190529173ffffffffffffffffffffffffffffffffffffffff9091169063a366f49690602401600060405180830381600087803b15801561061557600080fd5b505af1158015610629573d6000803e3d6000fd5b505050506106356106fe565b6040517fffd9b9070000000000000000000000000000000000000000000000000000000081526001600482015273ffffffffffffffffffffffffffffffffffffffff919091169063ffd9b90790602401600060405180830381600087803b15801561069f57600080fd5b505af11580156106b3573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692507ff17b849746e74d7186170c9553d4bbf60b4f8bb1ed81fe50c099b934fb078f059150600090a25b505050565b600154604080517f2f7a1881000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691632f7a18819160048083019260209291908290030181865afa15801561076e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610792919061457b565b905090565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610821573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610845919061453a565b61087b576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108848261241e565b61088e82826127f8565b5050565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa15801561091c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610940919061453a565b610976576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61097e612a15565b565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610a0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2e919061453a565b610a64576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a6d81612af6565b6001546040517f9f5f86ae00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015290911690639f5f86ae90602401600060405180830381600087803b158015610ada57600080fd5b505af1158015610aee573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507f5a0b7d0f9c24b39256e112a0584b4c5ce38d8f1dee2e7c56f15b852604cdc8869150600090a250565b6000610b43600383612cb8565b92915050565b60006107926003612ccb565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610bdf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c03919061453a565b610c39576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610c86576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063fdd5764590602401602060405180830381865afa158015610cf7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1b919061457b565b905073ffffffffffffffffffffffffffffffffffffffff8116610d6a576040517f1170cc2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f6e98e5e400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526000602483015290911690636e98e5e490604401600060405180830381600087803b158015610dde57600080fd5b505af1158015610df2573d6000803e3d6000fd5b50506001546040517f6e98e5e40000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff86811660248301529091169250636e98e5e49150604401600060405180830381600087803b158015610e6a57600080fd5b505af1158015610e7e573d6000803e3d6000fd5b50505050610e96826003612cd590919063ffffffff16565b5060405173ffffffffffffffffffffffffffffffffffffffff8316907fab9f405bf0c19b97f65a7031634db41569cd2f0e0376a610a1e977f9ab22b58f90600090a25050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610f66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8a919061453a565b610fc0576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fc982612af6565b6000806000610fd66106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015611020573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110449190614598565b9250925092506000806110556106fe565b73ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa15801561109e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c291906145e5565b9150915060006110d06106fe565b73ffffffffffffffffffffffffffffffffffffffff16639be0536a6040518163ffffffff1660e01b8152600401600060405180830381865afa15801561111a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526111609190810190614643565b9050600061116c6106fe565b73ffffffffffffffffffffffffffffffffffffffff1663b1836d326040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111da919061453a565b600154604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905192935073ffffffffffffffffffffffffffffffffffffffff909116916311ca4fc2918c918491632630c12f9160048083019260209291908290030181865afa158015611256573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061127a919061457b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156112e757600080fd5b505af11580156112fb573d6000803e3d6000fd5b5050505087156113675761130e87612cf7565b6113188484612f5d565b61132186613152565b60005b82518110156113575761134f83828151811061134257611342614726565b60200260200101516132a3565b600101611324565b50801561136757611367856133c9565b60405173ffffffffffffffffffffffffffffffffffffffff8a16907fa8b21f72cb83bce808df32dc2330217d744a1c22f3e9e44e4b11bbf049d37d9d90600090a2505050505050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561143d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611461919061453a565b611497576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61088e828261357b565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561152b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061154f919061453a565b611585576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61097e6139c3565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611617573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163b919061453a565b611671576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81612cf7565b50565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611707573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172b919061453a565b611761576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61088e8282612f5d565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156117f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611819919061453a565b610884576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156118d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fd919061453a565b611933576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061193e8261233e565b90506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d39190614557565b9050818116156106f9576001546040517fa366f496000000000000000000000000000000000000000000000000000000008152918318600483018190529173ffffffffffffffffffffffffffffffffffffffff9091169063a366f49690602401600060405180830381600087803b158015611a4d57600080fd5b505af1158015611a61573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a2505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611b35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b59919061453a565b611b8f576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81613a83565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611c22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c46919061453a565b611c7c576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81613b3d565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611d0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d33919061453a565b611d69576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a816133c9565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611dfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e20919061453a565b611e56576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ec4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee8919061457b565b60015490915073ffffffffffffffffffffffffffffffffffffffff166311ca4fc2611f116106fe565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff91821660048201529084166024820152604401600060405180830381600087803b158015611f7f57600080fd5b505af1158015611f93573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507f3f82447be465b0b5a4a9e54c74d5f6ae73f2e9537f2cc1590a340524703d09619150600090a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015612065573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612089919061453a565b6120bf576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61271061ffff86161015806120e357506127106120dc8585614784565b61ffff1610155b806120fd57506127106120f68383614784565b61ffff1610155b15612134576040517f0b361d6900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6121578585612145866127106147aa565b85612152866127106147aa565b613c5c565b5050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156121e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061220c919061453a565b612242576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a816132a3565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156122d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122f9919061453a565b61232f576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81613152565b3b151590565b6001546040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063f67c5bd090602401602060405180830381865afa1580156123af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123d39190614557565b90508015806123e25750806001145b15612419576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b73ffffffffffffffffffffffffffffffffffffffff811661246b576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163b6124d6576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024015b60405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8216906370a0823190602401602060405180830381865afa92505050801561257a575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261257791810190614557565b60015b6125b0576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561261e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612642919061457b565b6040517ff9a65030000000000000000000000000000000000000000000000000000000008152670de0b6b3a7640000600482015273ffffffffffffffffffffffffffffffffffffffff8381166024830152919091169063f9a6503090604401602060405180830381865afa9250505080156126f8575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526126f591810190614557565b60015b61272e576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506001546040517fd48bfca700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301529091169063d48bfca790602401600060405180830381600087803b15801561279c57600080fd5b505af11580156127b0573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a250565b60025473ffffffffffffffffffffffffffffffffffffffff8381169116141561284d576040517f3b899cf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f172c48c70000000000000000000000000000000000000000000000000000000081526000600482018190529173ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa1580156128bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128e091906147cd565b91505061ffff821615806128fb57508061ffff168261ffff16115b15612932576040517f33c6608d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015261ffff851660248301529091169063a70bc54290604401600060405180830381600087803b1580156129a957600080fd5b505af11580156129bd573d6000803e3d6000fd5b505060405161ffff8516815273ffffffffffffffffffffffffffffffffffffffff861692507f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650915060200160405180910390a2505050565b60005460ff16612a81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016124cd565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b73ffffffffffffffffffffffffffffffffffffffff8116612b43576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163b612ba9576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024016124cd565b8073ffffffffffffffffffffffffffffffffffffffff1663c12c21c06040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612c2e575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252612c2b9181019061457b565b60015b612c64576040517fe9eddd1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60015473ffffffffffffffffffffffffffffffffffffffff82811691161461088e576040517fe9eddd1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612cc48383613e92565b9392505050565b6000610b43825490565b6000612cc48373ffffffffffffffffffffffffffffffffffffffff8416613ebc565b6000612d016106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015612d4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d6f9190614598565b505090506000612d7d6106fe565b73ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa158015612dc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dea91906145e5565b915050806fffffffffffffffffffffffffffffffff16836fffffffffffffffffffffffffffffffff161015612e4b576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826fffffffffffffffffffffffffffffffff16826fffffffffffffffffffffffffffffffff16146106f957612e7e6106fe565b6040517f9c55a0540000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff8516600482015273ffffffffffffffffffffffffffffffffffffffff9190911690639c55a05490602401600060405180830381600087803b158015612ef957600080fd5b505af1158015612f0d573d6000803e3d6000fd5b50506040516fffffffffffffffffffffffffffffffff861681527fa030eec20ae970821387224ec3bb15b4bd22b89bfb86dc4d2b3827aa3d99e48d925060200190505b60405180910390a1505050565b6000612f676106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015612fb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fd59190614598565b50509050816fffffffffffffffffffffffffffffffff16836fffffffffffffffffffffffffffffffff16118061302e5750806fffffffffffffffffffffffffffffffff16826fffffffffffffffffffffffffffffffff16115b15613065576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61306d6106fe565b6040517f601d66f60000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff80861660048301528416602482015273ffffffffffffffffffffffffffffffffffffffff919091169063601d66f690604401600060405180830381600087803b1580156130f057600080fd5b505af1158015613104573d6000803e3d6000fd5b5050604080516fffffffffffffffffffffffffffffffff8088168252861660208201527f4d4981437d0211f9e6843eb024d9ada1fa3a99514d4343d4aece106dd11524bb9350019050612f50565b600061315c6106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa1580156131a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131ca9190614598565b509150508015158215151461088e576131e16106fe565b6040517fffd9b907000000000000000000000000000000000000000000000000000000008152831515600482015273ffffffffffffffffffffffffffffffffffffffff919091169063ffd9b90790602401600060405180830381600087803b15801561324c57600080fd5b505af1158015613260573d6000803e3d6000fd5b505050507ff97ba903470ff3262b4a68a938fe81def401bac1bd742169d2e8d5c4ed2185d382604051613297911515815260200190565b60405180910390a15050565b73ffffffffffffffffffffffffffffffffffffffff81166132f0576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6132f86106fe565b6040517fb55bb84b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152919091169063b55bb84b90602401600060405180830381600087803b15801561336357600080fd5b505af1158015613377573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841681527fdac9a7995cbc0c0f01d78970fb6fd0b52fe0fe869eb6635e65cc1b5682b8325c925060200190505b60405180910390a150565b60006133d36106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801561341d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134419190614598565b925050508064ffffffffff168264ffffffffff161461088e578164ffffffffff168164ffffffffff16118061347c57508164ffffffffff1642115b156134b3576040517fe4eaca7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134bb6106fe565b6040517feb9606df00000000000000000000000000000000000000000000000000000000815264ffffffffff8416600482015273ffffffffffffffffffffffffffffffffffffffff919091169063eb9606df90602401600060405180830381600087803b15801561352b57600080fd5b505af115801561353f573d6000803e3d6000fd5b505060405164ffffffffff851681527f0b3eb35ba750e7a7e4d26c9eee3d226f4e1f68c5568f4a3d051c94b241b02ac092506020019050613297565b73ffffffffffffffffffffffffffffffffffffffff82166135c8576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82163b61362e576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016124cd565b61363781612af6565b60015473ffffffffffffffffffffffffffffffffffffffff8381169116148061369257506136636106fe565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b806136b7575060015473ffffffffffffffffffffffffffffffffffffffff8281169116145b806136f457506136c56106fe565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b1561372b576040517f727de5c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517fff68754300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063ff68754390602401602060405180830381865afa15801561379c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137c0919061457b565b73ffffffffffffffffffffffffffffffffffffffff1614158061388c57506001546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063fdd5764590602401602060405180830381865afa15801561384f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613873919061457b565b73ffffffffffffffffffffffffffffffffffffffff1614155b156138c3576040517f21ff1e7100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f6e98e5e400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152848116602483015290911690636e98e5e490604401600060405180830381600087803b15801561393857600080fd5b505af115801561394c573d6000803e3d6000fd5b50505050613964826003613faf90919063ffffffff16565b508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4bcbefaef68b99503d502f5a6abe7bca2b183ab8ac55457013c77d084ebd130560405160405180910390a35050565b60005460ff1615613a30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016124cd565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612acc3390565b6001546040517fdc2b21c100000000000000000000000000000000000000000000000000000000815260ff8316600482015273ffffffffffffffffffffffffffffffffffffffff9091169063dc2b21c190602401600060405180830381600087803b158015613af157600080fd5b505af1158015613b05573d6000803e3d6000fd5b505060405160ff841681527f73caacd705657a7d283e48ecf288b73bc517e3aea1bbc9da2fd54a979e8aa950925060200190506133be565b73ffffffffffffffffffffffffffffffffffffffff8116613b8a576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613b926106fe565b6040517fdcf6548200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152919091169063dcf6548290602401600060405180830381600087803b158015613bfd57600080fd5b505af1158015613c11573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841681527f32e53e2e527af8518ae889e5f7e674bc83f7cf68e4cc059aceeaa0e64208b85b925060200190506133be565b6000613c6885856147aa565b6001546040517f172c48c700000000000000000000000000000000000000000000000000000000815260006004820181905292935073ffffffffffffffffffffffffffffffffffffffff9091169063172c48c7906024016040805180830381865afa158015613cdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cff91906147cd565b9150508061ffff168261ffff1614613d6e57613d1a82613fd1565b60025460405161ffff8416815273ffffffffffffffffffffffffffffffffffffffff909116907f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac6509060200160405180910390a25b6001546040517f944ac59f00000000000000000000000000000000000000000000000000000000815261ffff808a1660048301528089166024830152808816604483015280871660648301528516608482015273ffffffffffffffffffffffffffffffffffffffff9091169063944ac59f9060a401600060405180830381600087803b158015613dfd57600080fd5b505af1158015613e11573d6000803e3d6000fd5b505050507f2214a403d5f8d049e52eacca974c6dea01a471e41d6a18903bfaf7dbc709741f878787612710613e4691906147aa565b87613e53886127106147aa565b6040805161ffff96871681529486166020860152928516848401529084166060840152909216608082015290519081900360a00190a150505050505050565b6000826000018281548110613ea957613ea9614726565b9060005260206000200154905092915050565b60008181526001830160205260408120548015613fa5576000613ee06001836147fc565b8554909150600090613ef4906001906147fc565b9050818114613f59576000866000018281548110613f1457613f14614726565b9060005260206000200154905080876000018481548110613f3757613f37614726565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080613f6a57613f6a614813565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610b43565b6000915050610b43565b6000612cc48373ffffffffffffffffffffffffffffffffffffffff8416614296565b6001546002546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015261ffff8416602482015291169063a70bc54290604401600060405180830381600087803b15801561404a57600080fd5b505af115801561405e573d6000803e3d6000fd5b505050506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156140d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140f59190614557565b905060015b818110156106f9576001546040517f172c48c700000000000000000000000000000000000000000000000000000000815260048101839052600091829173ffffffffffffffffffffffffffffffffffffffff9091169063172c48c7906024016040805180830381865afa158015614175573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061419991906147cd565b915091508461ffff168161ffff16111561428c576001546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015261ffff881660248301529091169063a70bc54290604401600060405180830381600087803b15801561422457600080fd5b505af1158015614238573d6000803e3d6000fd5b505060405161ffff8816815273ffffffffffffffffffffffffffffffffffffffff851692507f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650915060200160405180910390a25b50506001016140fa565b60008181526001830160205260408120546142dd57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610b43565b506000610b43565b73ffffffffffffffffffffffffffffffffffffffff8116811461167a57600080fd5b60006020828403121561431957600080fd5b8135612cc4816142e5565b61ffff8116811461167a57600080fd5b6000806040838503121561434757600080fd5b8235614352816142e5565b9150602083013561436281614324565b809150509250929050565b60006020828403121561437f57600080fd5b5035919050565b801515811461167a57600080fd5b600080604083850312156143a757600080fd5b82356143b2816142e5565b9150602083013561436281614386565b600080604083850312156143d557600080fd5b82356143e0816142e5565b91506020830135614362816142e5565b6fffffffffffffffffffffffffffffffff8116811461167a57600080fd5b60006020828403121561442057600080fd5b8135612cc4816143f0565b6000806040838503121561443e57600080fd5b8235614449816143f0565b91506020830135614362816143f0565b60006020828403121561446b57600080fd5b813560ff81168114612cc457600080fd5b64ffffffffff8116811461167a57600080fd5b6000602082840312156144a157600080fd5b8135612cc48161447c565b600080600080600060a086880312156144c457600080fd5b85356144cf81614324565b945060208601356144df81614324565b935060408601356144ef81614324565b925060608601356144ff81614324565b9150608086013561450f81614324565b809150509295509295909350565b60006020828403121561452f57600080fd5b8135612cc481614386565b60006020828403121561454c57600080fd5b8151612cc481614386565b60006020828403121561456957600080fd5b5051919050565b8051612419816142e5565b60006020828403121561458d57600080fd5b8151612cc4816142e5565b6000806000606084860312156145ad57600080fd5b83516145b8816143f0565b60208501519093506145c981614386565b60408501519092506145da8161447c565b809150509250925092565b600080604083850312156145f857600080fd5b8251614603816143f0565b6020840151909250614362816143f0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000602080838503121561465657600080fd5b825167ffffffffffffffff8082111561466e57600080fd5b818501915085601f83011261468257600080fd5b81518181111561469457614694614614565b8060051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f830116810181811085821117156146d7576146d7614614565b6040529182528482019250838101850191888311156146f557600080fd5b938501935b8285101561471a5761470b85614570565b845293850193928501926146fa565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061ffff8083168185168083038211156147a1576147a1614755565b01949350505050565b600061ffff838116908316818110156147c5576147c5614755565b039392505050565b600080604083850312156147e057600080fd5b82516147eb816142e5565b602084015190925061436281614324565b60008282101561480e5761480e614755565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea264697066735822122046c364b67d38a3dd85b57e027716324d90dd1df102f265f0a0e2697babdb3f3b64736f6c634300080a003394525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650706f6f6c496e666f2e63727652657761726473206973206e6f7420636f6e73697374656e74706f6f6c496e666f2e6c70746f6b656e206973206e6f7420636f6e73697374656e74706f6f6c496e666f2e73687574646f776e206973206e6f7420636f6e73697374656e74a264697066735822122055a00e5f47343ec1434c16beb3b79a3007284f46d62f2336f25e02e06dcc13ad64736f6c634300080a0033"; - -type ConvexV1AdapterBoosterTestConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: ConvexV1AdapterBoosterTestConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class ConvexV1AdapterBoosterTest__factory extends ContractFactory { - constructor(...args: ConvexV1AdapterBoosterTestConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): ConvexV1AdapterBoosterTest { - return super.attach(address) as ConvexV1AdapterBoosterTest; - } - override connect(signer: Signer): ConvexV1AdapterBoosterTest__factory { - return super.connect(signer) as ConvexV1AdapterBoosterTest__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): ConvexV1AdapterBoosterTestInterface { - return new utils.Interface(_abi) as ConvexV1AdapterBoosterTestInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): ConvexV1AdapterBoosterTest { - return new Contract( - address, - _abi, - signerOrProvider - ) as ConvexV1AdapterBoosterTest; - } -} diff --git a/src/types/factories/contracts/test/adapters/ConvexV1_Booster.t.sol/index.ts b/src/types/factories/contracts/test/adapters/ConvexV1_Booster.t.sol/index.ts deleted file mode 100644 index 539e577c..00000000 --- a/src/types/factories/contracts/test/adapters/ConvexV1_Booster.t.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { ConvexV1AdapterBoosterTest__factory } from "./ConvexV1AdapterBoosterTest__factory"; diff --git a/src/types/factories/contracts/test/adapters/ConvexV1_ClaimZap.t.sol/ConvexV1ClaimZapAdapterTest__factory.ts b/src/types/factories/contracts/test/adapters/ConvexV1_ClaimZap.t.sol/ConvexV1ClaimZapAdapterTest__factory.ts deleted file mode 100644 index 281e6c7a..00000000 --- a/src/types/factories/contracts/test/adapters/ConvexV1_ClaimZap.t.sol/ConvexV1ClaimZapAdapterTest__factory.ts +++ /dev/null @@ -1,1245 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - ConvexV1ClaimZapAdapterTest, - ConvexV1ClaimZapAdapterTestInterface, -} from "../../../../../contracts/test/adapters/ConvexV1_ClaimZap.t.sol/ConvexV1ClaimZapAdapterTest"; - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "token", - type: "address", - }, - ], - name: "TokenIsNotAddedToCreditManagerException", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "TokenIsNotInAllowedList", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "onBehalfOf", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "token", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "AddCollateral", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - ], - name: "CloseCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "DecreaseBorrowedAmount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "target", - type: "address", - }, - ], - name: "ExecuteOrder", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "IncreaseBorrowedAmount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "liquidator", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "remainingFunds", - type: "uint256", - }, - ], - name: "LiquidateCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "liquidator", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "remainingFunds", - type: "uint256", - }, - ], - name: "LiquidateExpiredCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "index", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "user", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "reward", - type: "uint256", - }, - ], - name: "Mock_BaseRewardPaid", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "index", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "user", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "Mock_BaseStaked", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "index", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "user", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "Mock_BaseWithdrawn", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "index", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "user", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "poolid", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - indexed: false, - internalType: "bool", - name: "_stake", - type: "bool", - }, - ], - name: "Mock_Deposited", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "index", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "user", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "reward", - type: "uint256", - }, - ], - name: "Mock_ExtraRewardPaid", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "index", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "user", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "Mock_ExtraStaked", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "index", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "user", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "Mock_ExtraWithdrawn", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "index", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "user", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "poolid", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "Mock_Withdrawn", - type: "event", - }, - { - anonymous: false, - inputs: [], - name: "MultiCallFinished", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - ], - name: "MultiCallStarted", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newConfigurator", - type: "address", - }, - ], - name: "NewConfigurator", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "onBehalfOf", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "borrowAmount", - type: "uint256", - }, - { - indexed: false, - internalType: "uint16", - name: "referralCode", - type: "uint16", - }, - ], - name: "OpenCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "token", - type: "address", - }, - ], - name: "TokenDisabled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "token", - type: "address", - }, - ], - name: "TokenEnabled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "oldOwner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "TransferAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "bool", - name: "state", - type: "bool", - }, - ], - name: "TransferAccountAllowed", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "", - type: "address", - }, - ], - name: "log_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "log_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - name: "log_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "int256", - name: "", - type: "int256", - }, - ], - name: "log_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "address", - name: "val", - type: "address", - }, - ], - name: "log_named_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes", - name: "val", - type: "bytes", - }, - ], - name: "log_named_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes32", - name: "val", - type: "bytes32", - }, - ], - name: "log_named_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - ], - name: "log_named_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "string", - name: "val", - type: "string", - }, - ], - name: "log_named_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - ], - name: "log_named_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "log_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "logs", - type: "event", - }, - { - inputs: [], - name: "IS_TEST", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "_setUpZeroExtras", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "basePoolAdapter", - outputs: [ - { - internalType: "contract ConvexV1BaseRewardPoolAdapter", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "basePoolMock", - outputs: [ - { - internalType: "contract BaseRewardPoolMock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "boosterAdapter", - outputs: [ - { - internalType: "contract ConvexV1BoosterAdapter", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "boosterMock", - outputs: [ - { - internalType: "contract BoosterMock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "cft", - outputs: [ - { - internalType: "contract CreditFacadeTestSuite", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "claimZapAdapter", - outputs: [ - { - internalType: "contract ConvexV1ClaimZapAdapter", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "claimZapMock", - outputs: [ - { - internalType: "contract ClaimZapMock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "convexLPToken", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditConfigurator", - outputs: [ - { - internalType: "contract CreditConfigurator", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditFacade", - outputs: [ - { - internalType: "contract CreditFacade", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditManager", - outputs: [ - { - internalType: "contract ICreditManagerV2", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "crv", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "curveLPToken", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "cvx", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "extraPoolMock1", - outputs: [ - { - internalType: "contract ExtraRewardPoolMock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "extraPoolMock2", - outputs: [ - { - internalType: "contract ExtraRewardPoolMock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "extraRewardToken1", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "extraRewardToken2", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "failed", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "feed", - outputs: [ - { - internalType: "contract PriceFeedMock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "phantomToken", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "priceOracle", - outputs: [ - { - internalType: "contract IPriceOracleV2Ext", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "setUp", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_ACVX1_Z_01_claimRewards_works_correctly", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_ACVX1_Z_02_claimRewards_supports_claiming_from_extra_pools", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_ACVX1_Z_03_claimRewards_ignores_options", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_ACVX1_Z_04_claimRewards_only_covers_tokens_with_corresponding_contract", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_ACVX1_Z_05_claimRewards_does_not_fail_for_no_extras", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "underlying", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x60806040526000805460ff1916600190811790915580546001600160a01b031916737109709ecfa91a80626ff3989d68f67f5b1dd12d17905534801561004457600080fd5b5062050e6880620000566000396000f3fe60806040523480156200001157600080fd5b50600436106200020d5760003560e01c80636f307dc31162000125578063ba414fa611620000af578063df514433116200007a578063df5144331462000512578063f9aa028a1462000533578063fa7626d41462000554578063fc99a973146200056257600080fd5b8063ba414fa614620004ab578063c096547314620004c6578063c12c21c014620004e7578063c83bdaa8146200050857600080fd5b8063923c1d6111620000f0578063923c1d611462000427578063a7ea33941462000448578063a8577e881462000469578063aa30240e146200048a57600080fd5b80636f307dc314620003d15780637a24edf614620003f25780638af9f86014620004135780638bf1032a146200041d57600080fd5b806337a7b7d811620001a757806360087ad9116200017257806360087ad91462000364578063614fa6c2146200036e57806364243fc3146200038f5780636a4874a114620003b057600080fd5b806337a7b7d814620002f75780634194a9f814620003185780635b40e5f014620003395780635c91172f146200034357600080fd5b80632630c12f11620001e85780632630c12f146200028a578063278e660914620002ab5780632ec60f3e14620002cc5780632f7a188114620002d657600080fd5b80630a9254e414620002125780630ae2904a146200021e578063170aa96d1462000269575b600080fd5b6200021c62000583565b005b6017546200023f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6010546200023f9073ffffffffffffffffffffffffffffffffffffffff1681565b6008546200023f9073ffffffffffffffffffffffffffffffffffffffff1681565b600d546200023f9073ffffffffffffffffffffffffffffffffffffffff1681565b6200021c62000eec565b6003546200023f9073ffffffffffffffffffffffffffffffffffffffff1681565b6007546200023f9073ffffffffffffffffffffffffffffffffffffffff1681565b600f546200023f9073ffffffffffffffffffffffffffffffffffffffff1681565b6200021c6200144f565b6014546200023f9073ffffffffffffffffffffffffffffffffffffffff1681565b6200021c62001687565b6015546200023f9073ffffffffffffffffffffffffffffffffffffffff1681565b6011546200023f9073ffffffffffffffffffffffffffffffffffffffff1681565b6009546200023f9073ffffffffffffffffffffffffffffffffffffffff1681565b6006546200023f9073ffffffffffffffffffffffffffffffffffffffff1681565b6012546200023f9073ffffffffffffffffffffffffffffffffffffffff1681565b6200021c62001e11565b6200021c620022f5565b600a546200023f9073ffffffffffffffffffffffffffffffffffffffff1681565b600e546200023f9073ffffffffffffffffffffffffffffffffffffffff1681565b600b546200023f9073ffffffffffffffffffffffffffffffffffffffff1681565b600c546200023f9073ffffffffffffffffffffffffffffffffffffffff1681565b620004b5620029c2565b604051901515815260200162000260565b6013546200023f9073ffffffffffffffffffffffffffffffffffffffff1681565b6002546200023f9073ffffffffffffffffffffffffffffffffffffffff1681565b6200021c62002b2c565b6005546200023f9073ffffffffffffffffffffffffffffffffffffffff1681565b6004546200023f9073ffffffffffffffffffffffffffffffffffffffff1681565b600054620004b59060ff1681565b6016546200023f9073ffffffffffffffffffffffffffffffffffffffff1681565b6200058f6002620032c1565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1663eebab8ef600173f39fd6e51aad88f6f4ce6ab8827279cfffb92266620005e0670de0b6b3a764000061271062005f26565b6040518463ffffffff1660e01b8152600401620006009392919062005fd1565b600060405180830381600087803b1580156200061b57600080fd5b505af115801562000630573d6000803e3d6000fd5b5050600b5473ffffffffffffffffffffffffffffffffffffffff1691506340c10f19905073f39fd6e51aad88f6f4ce6ab8827279cfffb92266620006836b033b2e3c9fd0803ce800000061271062005f26565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af1158015620006f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200071a919062006019565b5062000725620045de565b50601880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600b546200079091166200078a6b033b2e3c9fd0803ce800000061271062005f26565b620049c5565b6001546040517f06447d5600000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116906306447d5690602401600060405180830381600087803b1580156200081057600080fd5b505af115801562000825573d6000803e3d6000fd5b505060165473ffffffffffffffffffffffffffffffffffffffff1691506343a0d06690506000620008656b033b2e3c9fd0803ce800000061271062005f26565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815260048101929092526024820152600060448201526064016020604051808303816000875af1158015620008c8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008ee919062006019565b50601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638dcb40616040518163ffffffff1660e01b81526004016020604051808303816000875af11580156200095f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000985919062006019565b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620009f157600080fd5b505af115801562000a06573d6000803e3d6000fd5b50506011546040517f9b7ccf4c0000000000000000000000000000000000000000000000000000000081526b033b2e3c9fd0803ce8000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169250639b7ccf4c9150602401600060405180830381600087803b15801562000a8257600080fd5b505af115801562000a97573d6000803e3d6000fd5b505060125473ffffffffffffffffffffffffffffffffffffffff169150639b7ccf4c905062000ad46b033b2e3c9fd0803ce8000000602162005f26565b6040518263ffffffff1660e01b815260040162000af391815260200190565b600060405180830381600087803b15801562000b0e57600080fd5b505af115801562000b23573d6000803e3d6000fd5b505060135473ffffffffffffffffffffffffffffffffffffffff169150639b7ccf4c905062000b606b033b2e3c9fd0803ce8000000600462005f26565b6040518263ffffffff1660e01b815260040162000b7f91815260200190565b600060405180830381600087803b15801562000b9a57600080fd5b505af115801562000baf573d6000803e3d6000fd5b505060115460105460405173ffffffffffffffffffffffffffffffffffffffff92831694509116915062000be39062005e4e565b73ffffffffffffffffffffffffffffffffffffffff928316815291166020820152604001604051809103906000f08015801562000c24573d6000803e3d6000fd5b50601980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283169081179091556000546040517f67b426450000000000000000000000000000000000000000000000000000000081529192636b42e66a926201000090920416906367b426459062000cba906005906004016200603e565b602060405180830381865afa15801562000cd8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000cfe919062006077565b62000d176b033b2e3c9fd0803ce8000000602162005f26565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401600060405180830381600087803b15801562000d8357600080fd5b505af115801562000d98573d6000803e3d6000fd5b50506019546000546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283169450636b42e66a935062010000909104909116906367b426459062000e089060049081016200603e565b602060405180830381865afa15801562000e26573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e4c919062006077565b62000e656b033b2e3c9fd0803ce8000000600462005f26565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401600060405180830381600087803b15801562000ed157600080fd5b505af115801562000ee6573d6000803e3d6000fd5b50505050565b60005b60028110156200144c5780151562000f0662000583565b600080546040517f67b426450000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff16906367b426459062000f65906005906004016200603e565b602060405180830381865afa15801562000f83573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000fa9919062006077565b600080546040517f67b4264500000000000000000000000000000000000000000000000000000000815292935090916201000090910473ffffffffffffffffffffffffffffffffffffffff16906367b42645906200100c9060049081016200603e565b602060405180830381865afa1580156200102a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001050919062006077565b604080516001808252818301909252919250606091829160009190602080830190803683375050604080516002808252606082018352939450600093909250906020830190803683375050601954845192935073ffffffffffffffffffffffffffffffffffffffff1691849150600090620010cf57620010cf620060c6565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508581600081518110620011205762001120620060c6565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508481600181518110620011715762001171620060c6565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505086156200127757601754604051620012719173ffffffffffffffffffffffffffffffffffffffff1690620011f5908790879087908790600090819081908190819060240162006148565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f5a7b87f20000000000000000000000000000000000000000000000000000000017905262004c31565b620013ae565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b158015620012f757600080fd5b505af11580156200130c573d6000803e3d6000fd5b50506017546040517f5a7b87f200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169250635a7b87f29150620013799087908790879087906000908190819081908190600401620061d9565b600060405180830381600087803b1580156200139457600080fd5b505af1158015620013a9573d6000803e3d6000fd5b505050505b601854620013ed90879073ffffffffffffffffffffffffffffffffffffffff16620013e76b033b2e3c9fd0803ce8000000602162005f26565b62004d46565b6018546200141590869073ffffffffffffffffffffffffffffffffffffffff16600062004d46565b6200142286600162004d68565b6200142f85600062004d68565b50505050505050808062001443906200625f565b91505062000eef565b50565b60005b60028110156200144c578015156200146962000583565b60608060608084156200150657601754620015009073ffffffffffffffffffffffffffffffffffffffff16858585856b033b2e3c9fd0803ce8000000620014b281600262005f26565b620014cb6b033b2e3c9fd0803ce8000000600362005f26565b620014e46b033b2e3c9fd0803ce8000000600462005f26565b6001604051602401620011f5999897969594939291906200629b565b6200166c565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b1580156200158657600080fd5b505af11580156200159b573d6000803e3d6000fd5b505060175473ffffffffffffffffffffffffffffffffffffffff169150635a7b87f29050858585856b033b2e3c9fd0803ce8000000620015dd81600262005f26565b620015f66b033b2e3c9fd0803ce8000000600362005f26565b6200160f6b033b2e3c9fd0803ce8000000600462005f26565b60016040518a63ffffffff1660e01b81526004016200163799989796959493929190620061d9565b600060405180830381600087803b1580156200165257600080fd5b505af115801562001667573d6000803e3d6000fd5b505050505b505050505080806200167e906200625f565b91505062001452565b60005b600281116200144c5760005b600281101562001dfb57801515620016ad62000583565b60608080808087620017bc5760408051600180825281830190925290602080830190803683375050601254825192965073ffffffffffffffffffffffffffffffffffffffff1691869150600090620017095762001709620060c6565b73ffffffffffffffffffffffffffffffffffffffff929092166020928302919091018201526040805160018082528183019092529182810190803683375050600e54825192935073ffffffffffffffffffffffffffffffffffffffff16918391506000906200177c576200177c620060c6565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505062001a16565b8760011415620018895760408051600180825281830190925290602080830190803683375050601354825192965073ffffffffffffffffffffffffffffffffffffffff1691869150600090620018165762001816620060c6565b73ffffffffffffffffffffffffffffffffffffffff929092166020928302919091018201526040805160018082528183019092529182810190803683375050600f54825192935073ffffffffffffffffffffffffffffffffffffffff16918391506000906200177c576200177c620060c6565b876002141562001a165760408051600280825260608201835290916020830190803683375050601254825192965073ffffffffffffffffffffffffffffffffffffffff1691869150600090620018e357620018e3620060c6565b73ffffffffffffffffffffffffffffffffffffffff9283166020918202929092010152601354855191169085906001908110620019245762001924620060c6565b73ffffffffffffffffffffffffffffffffffffffff929092166020928302919091018201526040805160028082526060820183529092909190830190803683375050600e54825192935073ffffffffffffffffffffffffffffffffffffffff16918391506000906200199a576200199a620060c6565b73ffffffffffffffffffffffffffffffffffffffff9283166020918202929092010152600f54825191169082906001908110620019db57620019db620060c6565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505b600085858585600080600080600060405160240162001a3e9998979695949392919062006148565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f5a7b87f2000000000000000000000000000000000000000000000000000000001790529050861562001ae85760175462001ae29073ffffffffffffffffffffffffffffffffffffffff168262004c31565b62001c1f565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b15801562001b6857600080fd5b505af115801562001b7d573d6000803e3d6000fd5b50506017546040517f5a7b87f200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169250635a7b87f2915062001bea9089908990899089906000908190819081908190600401620061d9565b600060405180830381600087803b15801562001c0557600080fd5b505af115801562001c1a573d6000803e3d6000fd5b505050505b60095460185462001c4c9173ffffffffffffffffffffffffffffffffffffffff9081169116600062004d46565b600a5460185462001c799173ffffffffffffffffffffffffffffffffffffffff9081169116600062004d46565b600e5460185462001cd29173ffffffffffffffffffffffffffffffffffffffff90811691168b158062001cac57508b6002145b62001cb957600062004d46565b620013e76b033b2e3c9fd0803ce8000000602162005f26565b600f5460185462001d2d9173ffffffffffffffffffffffffffffffffffffffff908116911660018c148062001d0757508b6002145b62001d1457600062004d46565b620013e76b033b2e3c9fd0803ce8000000600462005f26565b60095462001d539073ffffffffffffffffffffffffffffffffffffffff16600062004d68565b600a5462001d799073ffffffffffffffffffffffffffffffffffffffff16600062004d68565b600e5462001dab9073ffffffffffffffffffffffffffffffffffffffff168a158062001da557508a6002145b62004d68565b600f5462001dde9073ffffffffffffffffffffffffffffffffffffffff1660018b148062001da557508a60021462004d68565b50505050505050808062001df2906200625f565b91505062001696565b508062001e08816200625f565b9150506200168a565b62001e1d6000620032c1565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1663eebab8ef600173f39fd6e51aad88f6f4ce6ab8827279cfffb9226662001e6e670de0b6b3a764000061271062005f26565b6040518463ffffffff1660e01b815260040162001e8e9392919062005fd1565b600060405180830381600087803b15801562001ea957600080fd5b505af115801562001ebe573d6000803e3d6000fd5b5050600b5473ffffffffffffffffffffffffffffffffffffffff1691506340c10f19905073f39fd6e51aad88f6f4ce6ab8827279cfffb9226662001f116b033b2e3c9fd0803ce800000061271062005f26565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af115801562001f82573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001fa8919062006019565b5062001fb3620045de565b50601880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600b546200201891166200078a6b033b2e3c9fd0803ce800000061271062005f26565b6001546040517f06447d5600000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116906306447d5690602401600060405180830381600087803b1580156200209857600080fd5b505af1158015620020ad573d6000803e3d6000fd5b505060165473ffffffffffffffffffffffffffffffffffffffff1691506343a0d06690506000620020ed6b033b2e3c9fd0803ce800000061271062005f26565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815260048101929092526024820152600060448201526064016020604051808303816000875af115801562002150573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002176919062006019565b50601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638dcb40616040518163ffffffff1660e01b81526004016020604051808303816000875af1158015620021e7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200220d919062006019565b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200227957600080fd5b505af11580156200228e573d6000803e3d6000fd5b50506011546040517f9b7ccf4c0000000000000000000000000000000000000000000000000000000081526b033b2e3c9fd0803ce8000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169250639b7ccf4c915060240162000b7f565b60005b60028110156200144c578015156200230f62001e11565b600080546040517f67b426450000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff16906367b42645906200236e906005906004016200603e565b602060405180830381865afa1580156200238c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620023b2919062006077565b600080546040517f67b4264500000000000000000000000000000000000000000000000000000000815292935090916201000090910473ffffffffffffffffffffffffffffffffffffffff16906367b4264590620024159060049081016200603e565b602060405180830381865afa15801562002433573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002459919062006077565b60408051600180825281830190925291925060009190602080830190803683375050604080516002808252606080830184529495506000935090916020830190803683375050604080516002808252606082018352939450600093909250906020830190803683375050601154865192935073ffffffffffffffffffffffffffffffffffffffff1691869150600090620024f757620024f7620060c6565b73ffffffffffffffffffffffffffffffffffffffff928316602091820292909201015260195483519116908390600090620025365762002536620060c6565b73ffffffffffffffffffffffffffffffffffffffff9283166020918202929092010152601954835191169083906001908110620025775762002577620060c6565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508581600081518110620025c857620025c8620060c6565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508481600181518110620026195762002619620060c6565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060008484848460008060008060006040516024016200267b9998979695949392919062006148565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f5a7b87f2000000000000000000000000000000000000000000000000000000001790529050871562002725576017546200271f9073ffffffffffffffffffffffffffffffffffffffff168262004c31565b6200285c565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b158015620027a557600080fd5b505af1158015620027ba573d6000803e3d6000fd5b50506017546040517f5a7b87f200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169250635a7b87f29150620028279088908890889088906000908190819081908190600401620061d9565b600060405180830381600087803b1580156200284257600080fd5b505af115801562002857573d6000803e3d6000fd5b505050505b600954601854620028949173ffffffffffffffffffffffffffffffffffffffff90811691166b033b2e3c9fd0803ce800000062004d46565b600a54601854620028cc9173ffffffffffffffffffffffffffffffffffffffff90811691166b033b2e3c9fd0803ce800000062004d46565b6018546200290590889073ffffffffffffffffffffffffffffffffffffffff16620013e76b033b2e3c9fd0803ce8000000602162005f26565b6018546200293e90879073ffffffffffffffffffffffffffffffffffffffff16620013e76b033b2e3c9fd0803ce8000000600462005f26565b600954620029649073ffffffffffffffffffffffffffffffffffffffff16600162004d68565b600a546200298a9073ffffffffffffffffffffffffffffffffffffffff16600162004d68565b6200299787600162004d68565b620029a486600162004d68565b50505050505050508080620029b9906200625f565b915050620022f8565b60008054610100900460ff1615620029e35750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1562002b275760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000008284015282518083038401815260608301909352600092909162002a8b917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc49160800162006353565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905262002ac5916200639d565b6000604051808303816000865af19150503d806000811462002b04576040519150601f19603f3d011682016040523d82523d6000602084013e62002b09565b606091505b509150508080602001905181019062002b23919062006019565b9150505b919050565b60005b60028110156200144c5780151562002b4662000583565b600080546040517f67b426450000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff16906367b426459062002ba5906005906004016200603e565b602060405180830381865afa15801562002bc3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002be9919062006077565b600080546040517f67b4264500000000000000000000000000000000000000000000000000000000815292935090916201000090910473ffffffffffffffffffffffffffffffffffffffff16906367b426459062002c4c9060049081016200603e565b602060405180830381865afa15801562002c6a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002c90919062006077565b60408051600180825281830190925291925060009190602080830190803683375050604080516002808252606080830184529495506000935090916020830190803683375050604080516002808252606082018352939450600093909250906020830190803683375050601154865192935073ffffffffffffffffffffffffffffffffffffffff169186915060009062002d2e5762002d2e620060c6565b73ffffffffffffffffffffffffffffffffffffffff92831660209182029290920101526019548351911690839060009062002d6d5762002d6d620060c6565b73ffffffffffffffffffffffffffffffffffffffff928316602091820292909201015260195483519116908390600190811062002dae5762002dae620060c6565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050858160008151811062002dff5762002dff620060c6565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050848160018151811062002e505762002e50620060c6565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600084848484600080600080600060405160240162002eb29998979695949392919062006148565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f5a7b87f2000000000000000000000000000000000000000000000000000000001790529050871562002f5c5760175462002f569073ffffffffffffffffffffffffffffffffffffffff168262004c31565b62003093565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b15801562002fdc57600080fd5b505af115801562002ff1573d6000803e3d6000fd5b50506017546040517f5a7b87f200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169250635a7b87f291506200305e9088908890889088906000908190819081908190600401620061d9565b600060405180830381600087803b1580156200307957600080fd5b505af11580156200308e573d6000803e3d6000fd5b505050505b600954601854620030cb9173ffffffffffffffffffffffffffffffffffffffff90811691166b033b2e3c9fd0803ce800000062004d46565b600a54601854620031039173ffffffffffffffffffffffffffffffffffffffff90811691166b033b2e3c9fd0803ce800000062004d46565b600e54601854620031419173ffffffffffffffffffffffffffffffffffffffff9081169116620013e76b033b2e3c9fd0803ce8000000602162005f26565b600f546018546200317f9173ffffffffffffffffffffffffffffffffffffffff9081169116620013e76b033b2e3c9fd0803ce8000000600462005f26565b601854620031b890889073ffffffffffffffffffffffffffffffffffffffff16620013e76b033b2e3c9fd0803ce8000000602162005f26565b601854620031f190879073ffffffffffffffffffffffffffffffffffffffff16620013e76b033b2e3c9fd0803ce8000000600462005f26565b600954620032179073ffffffffffffffffffffffffffffffffffffffff16600162004d68565b600a546200323d9073ffffffffffffffffffffffffffffffffffffffff16600162004d68565b600e54620032639073ffffffffffffffffffffffffffffffffffffffff16600162004d68565b600f54620032899073ffffffffffffffffffffffffffffffffffffffff16600162004d68565b6200329687600162004d68565b620032a386600162004d68565b50505050505050508080620032b8906200625f565b91505062002b2f565b620032cb62004d88565b6103e86008604051620032de9062005e5c565b91825260ff166020820152604001604051809103906000f08015801562003309573d6000803e3d6000fd5b50600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600554604080517f2630c12f00000000000000000000000000000000000000000000000000000000815290519190921691632630c12f9160048083019260209291908290030181865afa158015620033a7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620033cd919062006077565b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055604051601290620034239062005e6a565b6060808252600e908201527f4375727665204c5020546f6b656e000000000000000000000000000000000000608082015260a0602082018190526005908201527f4352564c5000000000000000000000000000000000000000000000000000000060c082015260ff909116604082015260e001604051809103906000f080158015620034b3573d6000803e3d6000fd5b50600b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169182179055620035039062004d96565b6012604051620035139062005e6a565b60608082526005908201527f4375727665000000000000000000000000000000000000000000000000000000608082015260a0602082018190526003908201527f435256000000000000000000000000000000000000000000000000000000000060c082015260ff909116604082015260e001604051809103906000f080158015620035a3573d6000803e3d6000fd5b50600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169182179055620035f39062004d96565b6012604051620036039062005e6a565b60608082526006908201527f436f6e7665780000000000000000000000000000000000000000000000000000608082015260a0602082018190526003908201527f435658000000000000000000000000000000000000000000000000000000000060c082015260ff909116604082015260e001604051809103906000f08015801562003693573d6000803e3d6000fd5b50600a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169182179055620036e39062004d96565b60018110620037dc576012604051620036fc9062005e6a565b6060808252600e908201527f4578747261205265776172642031000000000000000000000000000000000000608082015260a0602082018190526005908201527f455854523100000000000000000000000000000000000000000000000000000060c082015260ff909116604082015260e001604051809103906000f0801580156200378c573d6000803e3d6000fd5b50600e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169182179055620037dc9062004d96565b60028110620038d5576012604051620037f59062005e6a565b6060808252600e908201527f4578747261205265776172642032000000000000000000000000000000000000608082015260a0602082018190526005908201527f455854523200000000000000000000000000000000000000000000000000000060c082015260ff909116604082015260e001604051809103906000f08015801562003885573d6000803e3d6000fd5b50600f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169182179055620038d59062004d96565b600954600a5460405173ffffffffffffffffffffffffffffffffffffffff9283169290911690620039069062005e78565b73ffffffffffffffffffffffffffffffffffffffff928316815291166020820152604001604051809103906000f08015801562003947573d6000803e3d6000fd5b50601080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316908117909155600b546040517fd914cd4b000000000000000000000000000000000000000000000000000000008152921660048301529063d914cd4b906024016020604051808303816000875af1158015620039e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003a0c919062006019565b506010546040517f1526fe270000000000000000000000000000000000000000000000000000000081526000600482018190529173ffffffffffffffffffffffffffffffffffffffff1690631526fe279060240160c060405180830381865afa15801562003a7e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003aa49190620063bb565b6020810151600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909216918217905590915062003afa9062004d96565b6060810151601180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9092169190911790556001821062003c9957601154600e5460105460405173ffffffffffffffffffffffffffffffffffffffff93841693928316929091169062003b849062005e86565b73ffffffffffffffffffffffffffffffffffffffff938416815291831660208301529091166040820152606001604051809103906000f08015801562003bce573d6000803e3d6000fd5b50601280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283169081179091556011546040517f5e43c47b000000000000000000000000000000000000000000000000000000008152600481019290925290911690635e43c47b906024016020604051808303816000875af115801562003c71573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003c97919062006019565b505b6002821062003def57601154600f5460105460405173ffffffffffffffffffffffffffffffffffffffff93841693928316929091169062003cda9062005e86565b73ffffffffffffffffffffffffffffffffffffffff938416815291831660208301529091166040820152606001604051809103906000f08015801562003d24573d6000803e3d6000fd5b50601380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283169081179091556011546040517f5e43c47b000000000000000000000000000000000000000000000000000000008152600481019290925290911690635e43c47b906024016020604051808303816000875af115801562003dc7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003ded919062006019565b505b600954600a5460405173ffffffffffffffffffffffffffffffffffffffff928316929091169062003e209062005e94565b73ffffffffffffffffffffffffffffffffffffffff928316815291166020820152604001604051809103906000f08015801562003e61573d6000803e3d6000fd5b50601480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055601154600c5460405191831692169062003ebd9062005ea2565b73ffffffffffffffffffffffffffffffffffffffff928316815291166020820152604001604051809103906000f08015801562003efe573d6000803e3d6000fd5b50600d80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283169081179091556002546011546040519184169316919062003f5e9062005eb0565b73ffffffffffffffffffffffffffffffffffffffff938416815291831660208301529091166040820152606001604051809103906000f08015801562003fa8573d6000803e3d6000fd5b50601580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600d5462003ff9911662004d96565b6001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b1580156200407957600080fd5b505af11580156200408e573d6000803e3d6000fd5b5050600480546011546015546040517f7bccacee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283169481019490945281166024840152169250637bccacee9150604401600060405180830381600087803b1580156200410e57600080fd5b505af115801562004123573d6000803e3d6000fd5b505060025460105460405173ffffffffffffffffffffffffffffffffffffffff928316945091169150620041579062005ebe565b73ffffffffffffffffffffffffffffffffffffffff928316815291166020820152604001604051809103906000f08015801562004198573d6000803e3d6000fd5b50601680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283161790556001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291169063ca669fa790602401600060405180830381600087803b1580156200424457600080fd5b505af115801562004259573d6000803e3d6000fd5b5050600480546010546016546040517f7bccacee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283169481019490945281166024840152169250637bccacee9150604401600060405180830381600087803b158015620042d957600080fd5b505af1158015620042ee573d6000803e3d6000fd5b505060025460145460405173ffffffffffffffffffffffffffffffffffffffff928316945091169150620043229062005ecc565b73ffffffffffffffffffffffffffffffffffffffff928316815291166020820152604001604051809103906000f08015801562004363573d6000803e3d6000fd5b50601780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283161790556001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291169063ca669fa790602401600060405180830381600087803b1580156200440f57600080fd5b505af115801562004424573d6000803e3d6000fd5b5050600480546014546017546040517f7bccacee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283169481019490945281166024840152169250637bccacee9150604401600060405180830381600087803b158015620044a457600080fd5b505af1158015620044b9573d6000803e3d6000fd5b50506001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b1580156200453d57600080fd5b505af115801562004552573d6000803e3d6000fd5b50505050601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639b51ecd36040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620045c157600080fd5b505af1158015620045d6573d6000803e3d6000fd5b505050505050565b6000806000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635f7c9bd06040518163ffffffff1660e01b8152600401602060405180830381865afa15801562004651573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004677919062006474565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015291925073ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b158015620046f857600080fd5b505af11580156200470d573d6000803e3d6000fd5b50506003546040517f6c8f225d0000000000000000000000000000000000000000000000000000000081526004810185905273f39fd6e51aad88f6f4ce6ab8827279cfffb92266602482015260646044820181905260009082015273ffffffffffffffffffffffffffffffffffffffff9091169250636c8f225d9150608401600060405180830381600087803b158015620047a757600080fd5b505af1158015620047bc573d6000803e3d6000fd5b50506002546040517fe958b70400000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063e958b7049150602401602060405180830381865afa15801562004843573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004869919062006077565b6006546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80841660048301529295509116906370a0823190602401602060405180830381865afa158015620048dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004902919062006474565b600154604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301526024820192909252600d60448201527f6372656469744163636f756e74000000000000000000000000000000000000006064820152929450169063c657c71890608401600060405180830381600087803b158015620049a757600080fd5b505af1158015620049bc573d6000803e3d6000fd5b50505050509091565b6001546040517f06447d5600000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116906306447d5690602401600060405180830381600087803b15801562004a4557600080fd5b505af115801562004a5a573d6000803e3d6000fd5b50506002546040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6024820152908516925063095ea7b391506044016020604051808303816000875af115801562004af7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004b1d919062006019565b506003546040517f5978103400000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301526044820184905290911690635978103490606401600060405180830381600087803b15801562004bad57600080fd5b505af115801562004bc2573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620045c157600080fd5b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b15801562004cb157600080fd5b505af115801562004cc6573d6000803e3d6000fd5b50506003546040805180820190915273ffffffffffffffffffffffffffffffffffffffff868116825260208201869052909116925063caa5c23f915062004d0d9062004fd8565b6040518263ffffffff1660e01b815260040162004d2b9190620064da565b600060405180830381600087803b158015620045c157600080fd5b62004d638383836040518060200160405280600081525062005041565b505050565b62004d84828260405180602001604052806000815250620051fc565b5050565b62004d94600162005572565b565b6001546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff909116906306447d5690602401600060405180830381600087803b15801562004e1657600080fd5b505af115801562004e2b573d6000803e3d6000fd5b50506008546007546040517fe8a97a3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015291821660248201529116925063e8a97a3e9150604401600060405180830381600087803b15801562004ea757600080fd5b505af115801562004ebc573d6000803e3d6000fd5b5050600480546040517f3e7c88d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811693820193909352612454602482015291169250633e7c88d69150604401600060405180830381600087803b15801562004f3857600080fd5b505af115801562004f4d573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562004fbc57600080fd5b505af115801562004fd1573d6000803e3d6000fd5b5050505050565b604080516001808252818301909252606091816020015b60408051808201909152600081526060602082015281526020019060019003908162004fef5790505090508181600081518110620050315762005031620060c6565b6020026020010181905250919050565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600091908616906370a0823190602401602060405180830381865afa158015620050b2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620050d8919062006474565b9050828114620051f0577f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f828673ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562005150573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262005198919081019062006586565b604051602001620051ab9291906200665d565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052620051e7918790620066e3565b60405180910390a15b62004fd1818462005a9d565b6002546040517fe958b70400000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015260009173ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa15801562005280573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620052a6919062006077565b6002546040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015292935060009290911690638991b2f190602401602060405180830381865afa1580156200531d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005343919062006474565b6002546040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529091169063f67c5bd090602401602060405180830381865afa158015620053b4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620053da919062006474565b16151590508315158114801590620053f25750825115155b1562005432577f0b2e13ff20ac7b474198655583edf70dedd2c1dc980e329c4fbb2fc0748b796b836040516200542991906200671d565b60405180910390a15b62004fd1841515821515148673ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562005489573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620054d1919081019062006586565b8362005513576040518060400160405280601981526020017f206e6f7420656e61626c656420617320657870656374656420000000000000008152506200554a565b6040518060400160405280601981526020017f20656e61626c6564206173206e6f7420657870657463746564000000000000008152505b6040516020016200555d92919062006732565b60405160208183030381529060405262005c09565b600181600a81111562005589576200558962005f66565b1480620055aa5750600381600a811115620055a857620055a862005f66565b145b62005615576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f556e737570706f7274656420746f6b656e000000000000000000000000000000604482015260640160405180910390fd5b604051620056239062005eda565b604051809103906000f08015801562005640573d6000803e3d6000fd5b50600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff166201000073ffffffffffffffffffffffffffffffffffffffff9384168102919091179182905590041663b36ba208620056aa670de0b6b3a7640000606462005f26565b6040518263ffffffff1660e01b81526004016000604051808303818588803b158015620056d657600080fd5b505af1158015620056eb573d6000803e3d6000fd5b5050505050600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681604051620057229062005ee8565b6200572f92919062006791565b604051809103906000f0801580156200574c573d6000803e3d6000fd5b50600580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169182179055604080517f6f307dc30000000000000000000000000000000000000000000000000000000081529051636f307dc3916004808201926020929091908290030181865afa158015620057e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200580c919062006077565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600554604080517fc12c21c00000000000000000000000000000000000000000000000000000000081529051919092169163c12c21c09160048083019260209291908290030181865afa158015620058a9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620058cf919062006077565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600554604080517f2f7a188100000000000000000000000000000000000000000000000000000000815290519190921691632f7a18819160048083019260209291908290030181865afa1580156200596c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005992919062006077565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600554604080517ff9aa028a0000000000000000000000000000000000000000000000000000000081529051919092169163f9aa028a9160048083019260209291908290030181865afa15801562005a2f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005a55919062006077565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b80821462004d84577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f5060405162005b2b9060208082526022908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b75696e60408201527f745d000000000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a160408051818152600a818301527f202045787065637465640000000000000000000000000000000000000000000060608201526020810183905290517fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a89181900360800190a160408051818152600a818301527f2020202041637475616c0000000000000000000000000000000000000000000060608201526020810184905290517fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a89181900360800190a162004d8462005c53565b8162004d84577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf35838160405162005c409190620067bd565b60405180910390a162004d848262005dd6565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1562005da85760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000009282019290925260016060820152600091907f70ca10bbd0dbfd9020a9f4b13402c16cb120705e0d1c0aeab10fa353ae586fc490608001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905262005d25929160200162006353565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905262005d5f916200639d565b6000604051808303816000865af19150503d806000811462005d9e576040519150601f19603f3d011682016040523d82523d6000602084013e62005da3565b606091505b505050505b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055565b806200144c577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f5060405162005e3c9060208082526017908201527f4572726f723a20417373657274696f6e204661696c6564000000000000000000604082015260600190565b60405180910390a16200144c62005c53565b610bf4806200680783390190565b6106ca80620073fb83390190565b6117588062007ac583390190565b615594806200921d83390190565b611127806200e7b183390190565b6108e7806200f8d883390190565b610b0f80620101bf83390190565b6135d18062010cce83390190565b612456806201429f83390190565b610e1780620166f583390190565b617a51806201750c83390190565b62031ed6806201ef5d83390190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562005f615762005f6162005ef7565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600b811062005fcd577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b6060810162005fe1828662005f95565b73ffffffffffffffffffffffffffffffffffffffff93909316602082015260400152919050565b8051801515811462002b2757600080fd5b6000602082840312156200602c57600080fd5b620060378262006008565b9392505050565b602081016200604e828462005f95565b92915050565b73ffffffffffffffffffffffffffffffffffffffff811681146200144c57600080fd5b6000602082840312156200608a57600080fd5b8151620060378162006054565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081518084526020808501945080840160005b838110156200613d57815173ffffffffffffffffffffffffffffffffffffffff168752958201959082019060010162006109565b509495945050505050565b60006101208083526200615e8184018d620060f5565b9050828103602084015262006174818c620060f5565b905082810360408401526200618a818b620060f5565b90508281036060840152620061a0818a620060f5565b60ff988916608085015296881660a0840152505092851660c084015290841660e083015290921661010090920191909152949350505050565b6000610120808352620061ef8184018d620060f5565b9050828103602084015262006205818c620060f5565b905082810360408401526200621b818b620060f5565b9050828103606084015262006231818a620060f5565b6080840198909852505060a081019490945260c084019290925260e083015261010090910152949350505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141562006294576200629462005ef7565b5060010190565b6000610120808352620062b18184018d620060f5565b90508281036020840152620062c7818c620060f5565b90508281036040840152620062dd818b620060f5565b90508281036060840152620062f3818a620060f5565b6080840198909852505060a081019490945260c084019290925260e083015260ff1661010090910152949350505050565b60005b838110156200634157818101518382015260200162006327565b8381111562000ee65750506000910152565b7fffffffff0000000000000000000000000000000000000000000000000000000083168152600082516200638f81600485016020870162006324565b919091016004019392505050565b60008251620063b181846020870162006324565b9190910192915050565b600060c08284031215620063ce57600080fd5b60405160c0810181811067ffffffffffffffff82111715620063f457620063f462006097565b6040528251620064048162006054565b81526020830151620064168162006054565b602082015260408301516200642b8162006054565b60408201526060830151620064408162006054565b60608201526080830151620064558162006054565b60808201526200646860a0840162006008565b60a08201529392505050565b6000602082840312156200648757600080fd5b5051919050565b60008151808452620064a881602086016020860162006324565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101562006578578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00185528151805173ffffffffffffffffffffffffffffffffffffffff16845287015187840187905262006564878501826200648e565b958801959350509086019060010162006501565b509098975050505050505050565b6000602082840312156200659957600080fd5b815167ffffffffffffffff80821115620065b257600080fd5b818401915084601f830112620065c757600080fd5b815181811115620065dc57620065dc62006097565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171562006625576200662562006097565b816040528281528760208487010111156200663f57600080fd5b6200665283602083016020880162006324565b979650505050505050565b600083516200667181846020880162006324565b7f496e636f727265637420000000000000000000000000000000000000000000009083019081528351620066ad81600a84016020880162006324565b7f2062616c616e6365206f6e206163636f756e743a200000000000000000000000600a9290910191820152601f01949350505050565b604081526000620066f860408301856200648e565b905073ffffffffffffffffffffffffffffffffffffffff831660208301529392505050565b6020815260006200603760208301846200648e565b7f546f6b656e2000000000000000000000000000000000000000000000000000008152600083516200676c81600685016020880162006324565b8351908301906200678581600684016020880162006324565b01600601949350505050565b73ffffffffffffffffffffffffffffffffffffffff831681526040810162006037602083018462005f95565b60408152600560408201527f4572726f7200000000000000000000000000000000000000000000000000000060608201526080602082015260006200603760808301846200648e56fe6080604052600180546001600160a01b031916737109709ecfa91a80626ff3989d68f67f5b1dd12d17905534801561003657600080fd5b50604051610bf4380380610bf4833981016040819052610055916100a2565b600080546001600160a01b039384166001600160a01b031991821617909155600280549290931691161790556100d5565b80516001600160a01b038116811461009d57600080fd5b919050565b600080604083850312156100b557600080fd5b6100be83610086565b91506100cc60208401610086565b90509250929050565b610b10806100e46000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c80636b42e66a11610076578063adc9772e1161005b578063adc9772e14610198578063c00007b0146101ae578063f3fef3a31461019857600080fd5b80636b42e66a1461017057806370a082311461018557600080fd5b8063323a5e0b116100a7578063323a5e0b146100e8578063570ca7351461012d5780636b0916951461014d57600080fd5b80630fb5a6b4146100c357806318160ddd146100e0575b600080fd5b6100cd62093a8081565b6040519081526020015b60405180910390f35b6100cd6101c1565b6000546101089073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100d7565b6002546101089073ffffffffffffffffffffffffffffffffffffffff1681565b61016061015b366004610924565b610258565b60405190151581526020016100d7565b61018361017e36600461095d565b6102bf565b005b6100cd610193366004610989565b6104c0565b6101606101a636600461095d565b600192915050565b6101606101bc366004610989565b61055b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561022f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061025391906109a6565b905090565b73ffffffffffffffffffffffffffffffffffffffff811660009081526003602052604081205480156102b55773ffffffffffffffffffffffffffffffffffffffff83166000818152600360205260408120556102b5908583610570565b5060019392505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ca669fa78373ffffffffffffffffffffffffffffffffffffffff1663075461726040518163ffffffff1660e01b8152600401602060405180830381865afa158015610348573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061036c91906109bf565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401600060405180830381600087803b1580156103d257600080fd5b505af11580156103e6573d6000803e3d6000fd5b50506040517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810184905273ffffffffffffffffffffffffffffffffffffffff851692506340c10f1991506044016020604051808303816000875af115801561045d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048191906109dc565b5073ffffffffffffffffffffffffffffffffffffffff8216600090815260036020526040812080548392906104b79084906109fe565b90915550505050565b600080546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152909116906370a0823190602401602060405180830381865afa158015610531573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055591906109a6565b92915050565b60006105673383610258565b50600192915050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526105fd908490610602565b505050565b6000610664826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166107139092919063ffffffff16565b8051909150156105fd578080602001905181019061068291906109dc565b6105fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6060610722848460008561072c565b90505b9392505050565b6060824710156107be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c0000000000000000000000000000000000000000000000000000606482015260840161070a565b843b610826576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161070a565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161084f9190610a6d565b60006040518083038185875af1925050503d806000811461088c576040519150601f19603f3d011682016040523d82523d6000602084013e610891565b606091505b50915091506108a18282866108ac565b979650505050505050565b606083156108bb575081610725565b8251156108cb5782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070a9190610a89565b73ffffffffffffffffffffffffffffffffffffffff8116811461092157600080fd5b50565b6000806040838503121561093757600080fd5b8235610942816108ff565b91506020830135610952816108ff565b809150509250929050565b6000806040838503121561097057600080fd5b823561097b816108ff565b946020939093013593505050565b60006020828403121561099b57600080fd5b8135610725816108ff565b6000602082840312156109b857600080fd5b5051919050565b6000602082840312156109d157600080fd5b8151610725816108ff565b6000602082840312156109ee57600080fd5b8151801515811461072557600080fd5b60008219821115610a38577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500190565b60005b83811015610a58578181015183820152602001610a40565b83811115610a67576000848401525b50505050565b60008251610a7f818460208701610a3d565b9190910192915050565b6020815260008251806020840152610aa8816040850160208701610a3d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea26469706673582212204596b0ce7c8237b2db420876fc95b273d09200ff4edcfead35e0b6e715065a7f64736f6c634300080a003360a060405234801561001057600080fd5b506040516106ca3803806106ca83398101604081905261002f9161006c565b60009190915560ff166080526001805460506001600160501b031991821681179092556004805490911690911790554260028190556003556100a2565b6000806040838503121561007f57600080fd5b82519150602083015160ff8116811461009757600080fd5b809150509250929050565b60805161060e6100bc600039600060d3015261060e6000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80639a6fc8f511610081578063d62ada111161005b578063d62ada11146102dc578063f7a30806146102f4578063feaf968c1461030757600080fd5b80639a6fc8f5146101cd578063bd18ad531461023a578063cd653afc1461024d57600080fd5b806354fd4d50116100b257806354fd4d501461012d57806367e8d83d1461013c5780637284e4161461018e57600080fd5b8063313ce567146100ce5780633fd0875f1461010c575b600080fd5b6100f57f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020015b60405180910390f35b6004546a0100000000000000000000900460ff166040516101039190610441565b60405160018152602001610103565b61018c61014a366004610482565b600480549115156c01000000000000000000000000027fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff909216919091179055565b005b604080518082018252600c81527f7072696365206f7261636c6500000000000000000000000000000000000000006020820152905161010391906104ab565b6102036101db36600461053d565b60015460005460025460035460045469ffffffffffffffffffff948516941691939590929450565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610103565b61018c610248366004610558565b61030f565b61018c61025b366004610579565b6001805469ffffffffffffffffffff9586167fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090911617905560029290925560035560048054919092167fffffffffffffffffffffffffffffffffffffffff00ff00000000000000000000909116176b020000000000000000000000179055565b6102e461035f565b6040519015158152602001610103565b61018c6103023660046105bf565b600055565b610203610385565b600480548291907fffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff166b01000000000000000000000083600281111561035757610357610412565b021790555050565b600454600090610380906b010000000000000000000000900460ff166103d6565b905090565b60008060008060006004600c9054906101000a900460ff16156103a757600080fd5b505060015460005460025460035460045469ffffffffffffffffffff9485169893975091955093509190911690565b600060028260028111156103ec576103ec610412565b14156103f757600080fd5b600182600281111561040b5761040b610412565b1492915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016006831061047c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561049457600080fd5b813580151581146104a457600080fd5b9392505050565b600060208083528351808285015260005b818110156104d8578581018301518582016040015282016104bc565b818111156104ea576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803569ffffffffffffffffffff8116811461053857600080fd5b919050565b60006020828403121561054f57600080fd5b6104a48261051e565b60006020828403121561056a57600080fd5b8135600381106104a457600080fd5b6000806000806080858703121561058f57600080fd5b6105988561051e565b935060208501359250604085013591506105b46060860161051e565b905092959194509250565b6000602082840312156105d157600080fd5b503591905056fea264697066735822122014874f7a973b86501c4c1a8be32490fe902c8f088ee234d25f9b2497e19f9e5264736f6c634300080a003360a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a003360c0604052600080546001600160a01b031916737109709ecfa91a80626ff3989d68f67f5b1dd12d1781556103e86002556101c2600355603260045560058190556014553480156200005057600080fd5b506040516200559438038062005594833981016040819052620000739162000113565b601380546000608052600680546001600160a01b031990811633908117909255600d80548216831790556007805482168317905560088054821690921790915560128054821690556001600160a81b0319909116909155600e8054821690556001600160a01b0391821660a052600180549390921692169190911790556200014b565b80516001600160a01b03811681146200010e57600080fd5b919050565b600080604083850312156200012757600080fd5b6200013283620000f6565b91506200014260208401620000f6565b90509250929050565b60805160a0516154156200017f6000396000818161035b01528181610d6d0152610ec7015260006104be01526154156000f3fe60806040523480156200001157600080fd5b5060043610620002e45760003560e01c80636a4874a11162000199578063b42eda7111620000e9578063d6a0f5301162000097578063d914cd4b116200007a578063d914cd4b1462000711578063dc4c90d31462000728578063e77772fe146200074957600080fd5b8063d6a0f53014620006e6578063d73792a9146200070757600080fd5b8063cb0d5b5211620000cc578063cb0d5b52146200067e578063cfb9cfba14620006a4578063d0fb020314620006c557600080fd5b8063b42eda71146200063c578063bf86d690146200065857600080fd5b806393e846a011620001475780639f00332b116200012a5780639f00332b14620005de578063a386a08014620005ff578063ab366292146200061b57600080fd5b806393e846a014620005be578063958e2d3114620005c757600080fd5b80637303df9a116200017c5780637303df9a146200057b5780637b10399914620005855780638da5cb5b146200059d57600080fd5b80636a4874a1146200054357806371192b17146200056457600080fd5b8063376d771a11620002555780635ebaf1db116200020357806361d027b311620001e657806361d027b314620004f757806362d28ac71462000518578063647846a5146200052257600080fd5b80635ebaf1db14620004b857806360759fce14620004e057600080fd5b806343a0d066116200023857806343a0d0661462000480578063441a3e7014620004975780635094061814620004ae57600080fd5b8063376d771a14620004555780633a088cd2146200047657600080fd5b806314cd70e411620002b3578063245e4bf01162000296578063245e4bf0146200042057806326232a2e14620004415780632986c0e5146200044b57600080fd5b806314cd70e414620003905780631526fe2714620003b857600080fd5b8063043b684a14620002e9578063068eb19e1462000334578063075461721462000355578063081e3eda146200037d575b600080fd5b600c546200030a9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b600a546200030a9073ffffffffffffffffffffffffffffffffffffffff1681565b6200030a7f000000000000000000000000000000000000000000000000000000000000000081565b6015545b6040519081526020016200032b565b620003a7620003a136600462001b05565b6200076a565b60405190151581526020016200032b565b620003cf620003c936600462001b41565b62000839565b6040805173ffffffffffffffffffffffffffffffffffffffff97881681529587166020870152938616938501939093529084166060840152909216608082015290151560a082015260c0016200032b565b6009546200030a9073ffffffffffffffffffffffffffffffffffffffff1681565b6200038160055481565b6200038160145481565b6010546200030a9073ffffffffffffffffffffffffffffffffffffffff1681565b6200038160045481565b620003a76200049136600462001b6a565b620008b9565b620003a7620004a836600462001b9b565b62000b8c565b6200038160025481565b6200030a7f000000000000000000000000000000000000000000000000000000000000000081565b620003a7620004f136600462001bbe565b62000ba5565b600e546200030a9073ffffffffffffffffffffffffffffffffffffffff1681565b6200038160035481565b6013546200030a9073ffffffffffffffffffffffffffffffffffffffff1681565b6001546200030a9073ffffffffffffffffffffffffffffffffffffffff1681565b620003a76200057536600462001bf1565b62000c7f565b620003816107d081565b6200030a6f22d53366457f9d5e68ec105046fc438381565b6006546200030a9073ffffffffffffffffffffffffffffffffffffffff1681565b62000381600481565b620003a7620005d836600462001b41565b62000f32565b600d546200030a9073ffffffffffffffffffffffffffffffffffffffff1681565b6200030a73e478de485ad2fe566d49342cbd03e49ed7db335681565b6011546200030a9073ffffffffffffffffffffffffffffffffffffffff1681565b6200030a73bcff8b0b9419b9a88c44546519b1e909cf33039981565b601354620003a79074010000000000000000000000000000000000000000900460ff1681565b620003a76200068f36600462001c2c565b60166020526000908152604090205460ff1681565b600f546200030a9073ffffffffffffffffffffffffffffffffffffffff1681565b6007546200030a9073ffffffffffffffffffffffffffffffffffffffff1681565b6012546200030a9073ffffffffffffffffffffffffffffffffffffffff1681565b6200038161271081565b620003a76200072236600462001c2c565b6200100d565b6008546200030a9073ffffffffffffffffffffffffffffffffffffffff1681565b600b546200030a9073ffffffffffffffffffffffffffffffffffffffff1681565b6000806015858154811062000783576200078362001c4c565b600091825260209091206003600590920201015473ffffffffffffffffffffffffffffffffffffffff1690503381146200081e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f216175746800000000000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b6200082c8585338662001385565b60019150505b9392505050565b601581815481106200084a57600080fd5b60009182526020909120600590910201805460018201546002830154600384015460049094015473ffffffffffffffffffffffffffffffffffffffff93841695509183169390831692908116919081169074010000000000000000000000000000000000000000900460ff1686565b60008060158581548110620008d257620008d262001c4c565b60009182526020909120600590910201805490915073ffffffffffffffffffffffffffffffffffffffff166200090b81333088620014ea565b600182015473ffffffffffffffffffffffffffffffffffffffff16841562000a95576040517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810187905273ffffffffffffffffffffffffffffffffffffffff8216906340c10f1990604401600060405180830381600087803b1580156200099c57600080fd5b505af1158015620009b1573d6000803e3d6000fd5b505050600384015473ffffffffffffffffffffffffffffffffffffffff9081169150620009e3908316826000620015ce565b62000a0673ffffffffffffffffffffffffffffffffffffffff83168289620015ce565b6040517f2ee409080000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff821690632ee4090890604401600060405180830381600087803b15801562000a7557600080fd5b505af115801562000a8a573d6000803e3d6000fd5b505050505062000b1e565b6040517f40c10f190000000000000000000000000000000000000000000000000000000081523360048201526024810187905273ffffffffffffffffffffffffffffffffffffffff8216906340c10f1990604401600060405180830381600087803b15801562000b0457600080fd5b505af115801562000b19573d6000803e3d6000fd5b505050505b60145460408051918252602082018890528615158282015251889133917fb16197b2bc5f21de7d21259f49728a7ae0f7f294f8b5d0815aed6ab550b137829181900360600190a360016014600082825462000b7a919062001c7b565b90915550600198975050505050505050565b600062000b9c8383333362001385565b50600192915050565b6000806015848154811062000bbe5762000bbe62001c4c565b60009182526020822060059190910201546040517f70a0823100000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff909116925082906370a0823190602401602060405180830381865afa15801562000c3e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c64919062001cbb565b905062000c73858286620008b9565b50600195945050505050565b6000806015858154811062000c985762000c9862001c4c565b600091825260209091206003600590920201015473ffffffffffffffffffffffffffffffffffffffff16905033811462000d2f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f2161757468000000000000000000000000000000000000000000000000000000604482015260640162000815565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ca669fa77f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663075461726040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000dd7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000dfd919062001cd5565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401600060405180830381600087803b15801562000e6457600080fd5b505af115801562000e79573d6000803e3d6000fd5b50506040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018790527f00000000000000000000000000000000000000000000000000000000000000001692506340c10f199150604401600060405180830381600087803b15801562000f0e57600080fd5b505af115801562000f23573d6000803e3d6000fd5b50600198975050505050505050565b6000806015838154811062000f4b5762000f4b62001c4c565b60009182526020822060059190910201600101546040517f70a0823100000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff909116925082906370a0823190602401602060405180830381865afa15801562000fce573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ff4919062001cbb565b905062001002848262000b8c565b506001949350505050565b600073ffffffffffffffffffffffffffffffffffffffff82166200108e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f21706172616d0000000000000000000000000000000000000000000000000000604482015260640162000815565b601554604051600090601290620010a59062001ac3565b6060808252600b908201527f436f6e766578546f6b656e000000000000000000000000000000000000000000608082015260a0602082018190526008908201527f435658544f4b454e00000000000000000000000000000000000000000000000060c082015260ff909116604082015260e001604051809103906000f08015801562001135573d6000803e3d6000fd5b50905060008282600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16306040516200116e9062001ad1565b93845273ffffffffffffffffffffffffffffffffffffffff92831660208501529082166040840152166060820152608001604051809103906000f080158015620011bc573d6000803e3d6000fd5b506040805160c08101825273ffffffffffffffffffffffffffffffffffffffff978816815293871660208501908152600191850182815292881660608601908152600260808701908152600060a088018181526015805480880182559252975160059091027f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec47581018054928d167fffffffffffffffffffffffff000000000000000000000000000000000000000093841617905593517f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec47685018054918d1691831691909117905594517f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec47784018054918c1691871691909117905590517f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec47883018054918b16919095161790935591517f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec47990920180549451151574010000000000000000000000000000000000000000027fffffffffffffffffffffff0000000000000000000000000000000000000000009095169290971691909117929092179094559392505050565b6000601585815481106200139d576200139d62001c4c565b60009182526020909120600590910201805460018201546040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018990529394509183169216908190639dc29fac90604401600060405180830381600087803b1580156200142d57600080fd5b505af115801562001442573d6000803e3d6000fd5b506200146a9250505073ffffffffffffffffffffffffffffffffffffffff831685886200175d565b868473ffffffffffffffffffffffffffffffffffffffff167f617ecc79b6b01a6f07d16c413645249f6c6b38105ddcd843e4d4c0d11009db8c60145489604051620014bf929190918252602082015260400190565b60405180910390a3600160146000828254620014dc919062001c7b565b909155505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052620015c89085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152620017b5565b50505050565b8015806200167257506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015284169063dd62ed3e90604401602060405180830381865afa1580156200164a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001670919062001cbb565b155b62001700576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e636500000000000000000000606482015260840162000815565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052620017589084907f095ea7b3000000000000000000000000000000000000000000000000000000009060640162001545565b505050565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052620017589084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640162001545565b600062001819826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16620018c89092919063ffffffff16565b8051909150156200175857808060200190518101906200183a919062001cf5565b62001758576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840162000815565b6060620018d98484600085620018e1565b949350505050565b60608247101562001975576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c0000000000000000000000000000000000000000000000000000606482015260840162000815565b843b620019df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000815565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405162001a0a919062001d44565b60006040518083038185875af1925050503d806000811462001a49576040519150601f19603f3d011682016040523d82523d6000602084013e62001a4e565b606091505b509150915062001a6082828662001a6b565b979650505050505050565b6060831562001a7c57508162000832565b82511562001a8d5782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000815919062001d62565b6117588062001db683390190565b611ed2806200350e83390190565b73ffffffffffffffffffffffffffffffffffffffff8116811462001b0257600080fd5b50565b60008060006060848603121562001b1b57600080fd5b8335925060208401359150604084013562001b368162001adf565b809150509250925092565b60006020828403121562001b5457600080fd5b5035919050565b801515811462001b0257600080fd5b60008060006060848603121562001b8057600080fd5b8335925060208401359150604084013562001b368162001b5b565b6000806040838503121562001baf57600080fd5b50508035926020909101359150565b6000806040838503121562001bd257600080fd5b82359150602083013562001be68162001b5b565b809150509250929050565b60008060006060848603121562001c0757600080fd5b83359250602084013562001c1b8162001adf565b929592945050506040919091013590565b60006020828403121562001c3f57600080fd5b8135620008328162001adf565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000821982111562001cb6577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500190565b60006020828403121562001cce57600080fd5b5051919050565b60006020828403121562001ce857600080fd5b8151620008328162001adf565b60006020828403121562001d0857600080fd5b8151620008328162001b5b565b60005b8381101562001d3257818101518382015260200162001d18565b83811115620015c85750506000910152565b6000825162001d5881846020870162001d15565b9190910192915050565b602081526000825180602084015262001d8381604085016020870162001d15565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe60a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a00336080604052600080546001600160a01b031916737109709ecfa91a80626ff3989d68f67f5b1dd12d17815560068190556007819055600a819055600b819055600c81905560128190556013553480156200005857600080fd5b5060405162001ed238038062001ed28339810160408190526200007b91620000e1565b600593909355600280546001600160a01b03199081166001600160a01b039485161790915560018054821692841692909217909155600380549091169190921617905562000135565b80516001600160a01b0381168114620000dc57600080fd5b919050565b60008060008060808587031215620000f857600080fd5b845193506200010a60208601620000c4565b92506200011a60408601620000c4565b91506200012a60608601620000c4565b905092959194509250565b611d8d80620001456000396000f3fe608060405234801561001057600080fd5b50600436106102765760003560e01c80637050ccd911610160578063a694fc3a116100d8578063df136d651161008c578063f106845411610071578063f10684541461050a578063f14faf6f146103c2578063f7c618c11461051357600080fd5b8063df136d65146104f8578063ebe2b12b1461050157600080fd5b8063c8f33c91116100bd578063c8f33c91146104df578063cd3daf9d146104e8578063d55a23f4146104f057600080fd5b8063a694fc3a146104b9578063c32e7202146104cc57600080fd5b806380faa57d1161012f5780638dcb4061116101145780638dcb406114610495578063901a7d531461049d5780639b7ccf4c146104a657600080fd5b806380faa57d1461046d5780638b8763471461047557600080fd5b80637050ccd9146103fb57806370a082311461040e57806372f702f3146104445780637b0a47ee1461046457600080fd5b806338d07436116101f3578063570ca735116101c25780635e43c47b116101a75780635e43c47b146103d657806363d38c3b146103e95780636c8bcee8146103f257600080fd5b8063570ca735146103a2578063590a41f5146103c257600080fd5b806338d07436146103615780633d18b9121461037457806340c354461461037c57806349f039a21461038f57600080fd5b80630fb5a6b41161024a5780631c1c6fe51161022f5780631c1c6fe514610322578063262d3d6d146103355780632ee409081461033e57600080fd5b80630fb5a6b41461031057806318160ddd1461031a57600080fd5b80628cc2621461027b5780630569d388146102a15780630700037d146102ab5780630f4ef8a6146102cb575b600080fd5b61028e610289366004611a42565b610533565b6040519081526020015b60405180910390f35b6102a96105cc565b005b61028e6102b9366004611a42565b600f6020526000908152604090205481565b6004546102eb9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610298565b61028e62093a8081565b600d5461028e565b6102a9610330366004611a6d565b6105da565b61028e600c5481565b61035161034c366004611a8a565b6105f8565b6040519015158152602001610298565b61035161036f366004611ab6565b61087f565b610351610aa7565b6102eb61038a366004611ae6565b610abc565b6102a961039d366004611a6d565b610af3565b6003546102eb9073ffffffffffffffffffffffffffffffffffffffff1681565b6103516103d0366004611ae6565b50600190565b6103516103e4366004611a42565b610b0d565b61028e600a5481565b61028e61033e81565b610351610409366004611aff565b610c07565b61028e61041c366004611a42565b73ffffffffffffffffffffffffffffffffffffffff1660009081526010602052604090205490565b6002546102eb9073ffffffffffffffffffffffffffffffffffffffff1681565b61028e60075481565b61028e610e88565b61028e610483366004611a42565b600e6020526000908152604090205481565b610351610e9b565b61028e600b5481565b6102a96104b4366004611ae6565b610f46565b6103516104c7366004611ae6565b61113f565b6103516104da366004611ab6565b611378565b61028e60085481565b60095461028e565b60115461028e565b61028e60095481565b61028e60065481565b61028e60055481565b6001546102eb9073ffffffffffffffffffffffffffffffffffffffff1681565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600f6020908152604080832054600e9092528220546105c691906105c090670de0b6b3a7640000906105ba9061058e9061058860095490565b9061156e565b73ffffffffffffffffffffffffffffffffffffffff881660009081526010602052604090205490611581565b9061158d565b90611599565b92915050565b6105d8601160006119ee565b565b336000908152601060205260409020546105f4908261087f565b5050565b60008273ffffffffffffffffffffffffffffffffffffffff8116156106595761062081610533565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600f6020908152604080832093909355600954600e909152919020555b600083116106c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f526577617264506f6f6c203a2043616e6e6f74207374616b652030000000000060448201526064015b60405180910390fd5b60005b60115481101561079057601181815481106106e8576106e8611b2d565b6000918252602090912001546040517fadc9772e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018790529091169063adc9772e90604401600060405180830381600087803b15801561076557600080fd5b505af1158015610779573d6000803e3d6000fd5b50505050808061078890611b8b565b9150506106cb565b50600d5461079e9084611599565b600d5573ffffffffffffffffffffffffffffffffffffffff84166000908152601060205260409020546107d19084611599565b73ffffffffffffffffffffffffffffffffffffffff80861660009081526010602052604090209190915560025461080b91163330866115a5565b8373ffffffffffffffffffffffffffffffffffffffff166013547e12ea37eafadc86c304798c357ee0b9923724f92be4e45c4796ccf0e33f84ce8560405161085591815260200190565b60405180910390a36001601360008282546108709190611bc4565b90915550600195945050505050565b60003380156108ca5761089181610533565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600f6020908152604080832093909355600954600e909152919020555b60008411610934576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f526577617264506f6f6c203a2043616e6e6f742077697468647261772030000060448201526064016106bf565b60005b6011548110156109fa576011818154811061095457610954611b2d565b6000918252602090912001546040517ff3fef3a30000000000000000000000000000000000000000000000000000000081523360048201526024810187905273ffffffffffffffffffffffffffffffffffffffff9091169063f3fef3a390604401600060405180830381600087803b1580156109cf57600080fd5b505af11580156109e3573d6000803e3d6000fd5b5050505080806109f290611b8b565b915050610937565b50600d54610a08908561156e565b600d5533600090815260106020526040902054610a25908561156e565b33600081815260106020526040902091909155600254610a5e9173ffffffffffffffffffffffffffffffffffffffff9091169086611687565b8215610a7157610a6f336001610c07565b505b6013546040518581523391907f5512f168a2a6322c28d70f2b2811c8857ea8b1f256d7be8ee8ef770665c3f96290602001610855565b6000610ab4336001610c07565b506001905090565b60118181548110610acc57600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b336000908152601060205260409020546105f49082611378565b600073ffffffffffffffffffffffffffffffffffffffff8216610b8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f217265776172642073657474696e67000000000000000000000000000000000060448201526064016106bf565b5060118054600180820183556000929092527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c680180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff939093169290921790915590565b60008273ffffffffffffffffffffffffffffffffffffffff811615610c6857610c2f81610533565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600f6020908152604080832093909355600954600e909152919020555b6000610c7385610533565b90508015610d495773ffffffffffffffffffffffffffffffffffffffff8086166000908152600f6020526040812055600154610cb191168683611687565b6003546005546040517f71192b17000000000000000000000000000000000000000000000000000000008152600481019190915273ffffffffffffffffffffffffffffffffffffffff878116602483015260448201849052909116906371192b1790606401600060405180830381600087803b158015610d3057600080fd5b505af1158015610d44573d6000803e3d6000fd5b505050505b8315610e125760005b601154811015610e105760118181548110610d6f57610d6f611b2d565b6000918252602090912001546040517fc00007b000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529091169063c00007b090602401600060405180830381600087803b158015610de557600080fd5b505af1158015610df9573d6000803e3d6000fd5b505050508080610e0890611b8b565b915050610d52565b505b8473ffffffffffffffffffffffffffffffffffffffff166013547fa7283f521536f3db5cd5c50a1f053bbba463b20de118ee0f9dd4c3ff2bc9532f83604051610e5d91815260200190565b60405180910390a3600160136000828254610e789190611bc4565b9091555060019695505050505050565b6000610e96426006546116e2565b905090565b6002546040517f70a08231000000000000000000000000000000000000000000000000000000008152336004820152600091829173ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa158015610f0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f329190611bdc565b9050610f3d8161113f565b50600191505090565b600054600154604080517f07546172000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169363ca669fa793169163075461729160048083019260209291908290030181865afa158015610fc0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe49190611bf5565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401600060405180830381600087803b15801561104a57600080fd5b505af115801561105e573d6000803e3d6000fd5b50506001546040517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810185905273ffffffffffffffffffffffffffffffffffffffff90911692506340c10f1991506044016020604051808303816000875af11580156110d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110fd9190611c12565b50600d541561113c57600d5461111b82670de0b6b3a7640000611c2f565b6111259190611c6c565b600960008282546111369190611bc4565b90915550505b50565b600033801561118a5761115181610533565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600f6020908152604080832093909355600954600e909152919020555b600083116111f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f526577617264506f6f6c203a2043616e6e6f74207374616b652030000000000060448201526064016106bf565b60005b6011548110156112ba576011818154811061121457611214611b2d565b6000918252602090912001546040517fadc9772e0000000000000000000000000000000000000000000000000000000081523360048201526024810186905273ffffffffffffffffffffffffffffffffffffffff9091169063adc9772e90604401600060405180830381600087803b15801561128f57600080fd5b505af11580156112a3573d6000803e3d6000fd5b5050505080806112b290611b8b565b9150506111f7565b50600d546112c89084611599565b600d55336000908152601060205260409020546112e59084611599565b3360008181526010602052604090209190915560025461131f9173ffffffffffffffffffffffffffffffffffffffff9091169030866115a5565b6013546040518481523391907e12ea37eafadc86c304798c357ee0b9923724f92be4e45c4796ccf0e33f84ce9060200160405180910390a360016013600082825461136a9190611bc4565b909155506001949350505050565b60003380156113c35761138a81610533565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600f6020908152604080832093909355600954600e909152919020555b60005b60115481101561148957601181815481106113e3576113e3611b2d565b6000918252602090912001546040517ff3fef3a30000000000000000000000000000000000000000000000000000000081523360048201526024810187905273ffffffffffffffffffffffffffffffffffffffff9091169063f3fef3a390604401600060405180830381600087803b15801561145e57600080fd5b505af1158015611472573d6000803e3d6000fd5b50505050808061148190611b8b565b9150506113c6565b50600d54611497908561156e565b600d55336000908152601060205260409020546114b4908561156e565b33600081815260106020526040908190209290925560035460055492517f14cd70e4000000000000000000000000000000000000000000000000000000008152600481019390935260248301879052604483019190915273ffffffffffffffffffffffffffffffffffffffff16906314cd70e490606401600060405180830381600087803b15801561154557600080fd5b505af1158015611559573d6000803e3d6000fd5b505050508215610a7157610a6f336001610c07565b600061157a8284611ca7565b9392505050565b600061157a8284611c2f565b600061157a8284611c6c565b600061157a8284611bc4565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526116819085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526116f8565b50505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526116dd9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016115ff565b505050565b60008183106116f1578161157a565b5090919050565b600061175a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166118049092919063ffffffff16565b8051909150156116dd57808060200190518101906117789190611c12565b6116dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016106bf565b6060611813848460008561181b565b949350505050565b6060824710156118ad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016106bf565b843b611915576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016106bf565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161193e9190611cea565b60006040518083038185875af1925050503d806000811461197b576040519150601f19603f3d011682016040523d82523d6000602084013e611980565b606091505b509150915061199082828661199b565b979650505050505050565b606083156119aa57508161157a565b8251156119ba5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106bf9190611d06565b508054600082559060005260206000209081019061113c91905b80821115611a1c5760008155600101611a08565b5090565b73ffffffffffffffffffffffffffffffffffffffff8116811461113c57600080fd5b600060208284031215611a5457600080fd5b813561157a81611a20565b801515811461113c57600080fd5b600060208284031215611a7f57600080fd5b813561157a81611a5f565b60008060408385031215611a9d57600080fd5b8235611aa881611a20565b946020939093013593505050565b60008060408385031215611ac957600080fd5b823591506020830135611adb81611a5f565b809150509250929050565b600060208284031215611af857600080fd5b5035919050565b60008060408385031215611b1257600080fd5b8235611b1d81611a20565b91506020830135611adb81611a5f565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611bbd57611bbd611b5c565b5060010190565b60008219821115611bd757611bd7611b5c565b500190565b600060208284031215611bee57600080fd5b5051919050565b600060208284031215611c0757600080fd5b815161157a81611a20565b600060208284031215611c2457600080fd5b815161157a81611a5f565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611c6757611c67611b5c565b500290565b600082611ca2577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600082821015611cb957611cb9611b5c565b500390565b60005b83811015611cd9578181015183820152602001611cc1565b838111156116815750506000910152565b60008251611cfc818460208701611cbe565b9190910192915050565b6020815260008251806020840152611d25816040850160208701611cbe565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea26469706673582212203f11f44bbbc8c8f79b251a573810815d0ad952cb93d7f9b03a3b1f9b4b5f088b64736f6c634300080a0033a264697066735822122044488a884b50168ddd6206e1b0e6f92b3a4c18569c421a05cd933000ca6bb7ec64736f6c634300080a00336080604052600180546001600160a01b031916737109709ecfa91a80626ff3989d68f67f5b1dd12d17905560006004819055600581905560088190556009819055600a819055600d819055600e5534801561005957600080fd5b50604051611127380380611127833981016040819052610078916100d6565b600080546001600160a01b039485166001600160a01b031991821617909155600280549385169382169390931790925560038054919093169116179055610119565b80516001600160a01b03811681146100d157600080fd5b919050565b6000806000606084860312156100eb57600080fd5b6100f4846100ba565b9250610102602085016100ba565b9150610110604085016100ba565b90509250925092565b610fff806101286000396000f3fe608060405234801561001057600080fd5b50600436106101a25760003560e01c80637b0a47ee116100ee578063c8f33c9111610097578063ebe2b12b11610071578063ebe2b12b14610345578063f14faf6f14610285578063f3fef3a31461034e578063f7c618c11461036157600080fd5b8063c8f33c911461032b578063cd3daf9d14610334578063df136d651461033c57600080fd5b80639b7ccf4c116100c85780639b7ccf4c146102f0578063adc9772e14610305578063c00007b01461031857600080fd5b80637b0a47ee146102be5780638b876347146102c7578063901a7d53146102e757600080fd5b80633d18b9121161015057806363d38c3b1161012a57806363d38c3b146102995780636c8bcee8146102a257806370a08231146102ab57600080fd5b80633d18b9121461024d578063570ca73514610265578063590a41f51461028557600080fd5b806318160ddd1161018157806318160ddd146101f7578063262d3d6d146101ff578063323a5e0b1461020857600080fd5b80628cc262146101a75780630700037d146101cd5780630fb5a6b4146101ed575b600080fd5b6101ba6101b5366004610d9c565b610381565b6040519081526020015b60405180910390f35b6101ba6101db366004610d9c565b600c6020526000908152604090205481565b6101ba62093a8081565b6101ba6103fd565b6101ba600a5481565b6000546102289073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101c4565b610255610494565b60405190151581526020016101c4565b6003546102289073ffffffffffffffffffffffffffffffffffffffff1681565b610255610293366004610db9565b50600190565b6101ba60085481565b6101ba61033e81565b6101ba6102b9366004610d9c565b6104a7565b6101ba60055481565b6101ba6102d5366004610d9c565b600b6020526000908152604090205481565b6101ba60095481565b6103036102fe366004610db9565b61053c565b005b610255610313366004610dd2565b61073f565b610255610326366004610d9c565b610815565b6101ba60065481565b6007546101ba565b6101ba60075481565b6101ba60045481565b61025561035c366004610dd2565b61090a565b6002546102289073ffffffffffffffffffffffffffffffffffffffff1681565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600c6020908152604080832054600b9092528220546103f791906103f190670de0b6b3a7640000906103eb906103dc906103d660075490565b906109b6565b6103e5886104a7565b906109c9565b906109d5565b906109e1565b92915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561046b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048f9190610dfe565b905090565b600061049f33610815565b506001905090565b600080546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152909116906370a0823190602401602060405180830381865afa158015610518573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103f79190610dfe565b600154600254604080517f07546172000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169363ca669fa793169163075461729160048083019260209291908290030181865afa1580156105b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105da9190610e17565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401600060405180830381600087803b15801561064057600080fd5b505af1158015610654573d6000803e3d6000fd5b50506002546040517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810185905273ffffffffffffffffffffffffffffffffffffffff90911692506340c10f1991506044016020604051808303816000875af11580156106cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f39190610e34565b506106fc6103fd565b1561073c576107096103fd565b61071b82670de0b6b3a7640000610e85565b6107259190610ec2565b600760008282546107369190610efd565b90915550505b50565b60008273ffffffffffffffffffffffffffffffffffffffff8116156107a05761076781610381565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600c6020908152604080832093909355600754600b909152919020555b8373ffffffffffffffffffffffffffffffffffffffff16600e547fd198b93c3f48daa3d45cc61906c9e4716488eeb15e548a75d758b920def2594b856040516107eb91815260200190565b60405180910390a36001600e60008282546108069190610efd565b90915550600195945050505050565b60008173ffffffffffffffffffffffffffffffffffffffff8116156108765761083d81610381565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600c6020908152604080832093909355600754600b909152919020555b600061088184610381565b905080156108bf5773ffffffffffffffffffffffffffffffffffffffff8085166000908152600c60205260408120556002546108bf911685836109ed565b8373ffffffffffffffffffffffffffffffffffffffff16600e547f7f6ed0d42a688c853d54c432db2c486796be01babc08c81d92cc84fac254e53a836040516107eb91815260200190565b60008273ffffffffffffffffffffffffffffffffffffffff81161561096b5761093281610381565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600c6020908152604080832093909355600754600b909152919020555b8373ffffffffffffffffffffffffffffffffffffffff16600e547f13da9d660b9991f6835852ad20002cecf1c4664a804c5b315539e1f8934c56df856040516107eb91815260200190565b60006109c28284610f15565b9392505050565b60006109c28284610e85565b60006109c28284610ec2565b60006109c28284610efd565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610a7a908490610a7f565b505050565b6000610ae1826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16610b909092919063ffffffff16565b805190915015610a7a5780806020019051810190610aff9190610e34565b610a7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6060610b9f8484600085610ba7565b949350505050565b606082471015610c39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610b87565b843b610ca1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610b87565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051610cca9190610f5c565b60006040518083038185875af1925050503d8060008114610d07576040519150601f19603f3d011682016040523d82523d6000602084013e610d0c565b606091505b5091509150610d1c828286610d27565b979650505050505050565b60608315610d365750816109c2565b825115610d465782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b879190610f78565b73ffffffffffffffffffffffffffffffffffffffff8116811461073c57600080fd5b600060208284031215610dae57600080fd5b81356109c281610d7a565b600060208284031215610dcb57600080fd5b5035919050565b60008060408385031215610de557600080fd5b8235610df081610d7a565b946020939093013593505050565b600060208284031215610e1057600080fd5b5051919050565b600060208284031215610e2957600080fd5b81516109c281610d7a565b600060208284031215610e4657600080fd5b815180151581146109c257600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610ebd57610ebd610e56565b500290565b600082610ef8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60008219821115610f1057610f10610e56565b500190565b600082821015610f2757610f27610e56565b500390565b60005b83811015610f47578181015183820152602001610f2f565b83811115610f56576000848401525b50505050565b60008251610f6e818460208701610f2c565b9190910192915050565b6020815260008251806020840152610f97816040850160208701610f2c565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea26469706673582212203edf2b496d59cc45e2c69e6980d4fa131b9a2d1fbf9bede11ec63d2d8cd65bfc64736f6c634300080a003360e060405234801561001057600080fd5b506040516108e73803806108e78339818101604052604081101561003357600080fd5b508051602090910151336080526001600160a01b0391821660a0521660c05260805160a05160c05161086661008160003960006103120152600061029b015260006102eb01526108666000f3fe608060405234801561001057600080fd5b50600436106100675760003560e01c80636a4874a1116100505780636a4874a1146102965780638da5cb5b146102e6578063923c1d611461030d57600080fd5b806317d7de7c1461006c5780635a7b87f214610115575b600080fd5b60408051808201909152600d81527f436c61696d5a61702056322e300000000000000000000000000000000000000060208201526040805160208082528351818301528351919283929083019185019080838360005b838110156100da5781810151838201526020016100c2565b50505050905090810190601f1680156101075780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610294600480360361012081101561012c57600080fd5b81019060208101813564010000000081111561014757600080fd5b82018360208201111561015957600080fd5b8035906020019184602083028401116401000000008311171561017b57600080fd5b91939092909160208101903564010000000081111561019957600080fd5b8201836020820111156101ab57600080fd5b803590602001918460208302840111640100000000831117156101cd57600080fd5b9193909290916020810190356401000000008111156101eb57600080fd5b8201836020820111156101fd57600080fd5b8035906020019184602083028401116401000000008311171561021f57600080fd5b91939092909160208101903564010000000081111561023d57600080fd5b82018360208201111561024f57600080fd5b8035906020019184602083028401116401000000008311171561027157600080fd5b919350915080359060208101359060408101359060608101359060800135610334565b005b6102bd7f000000000000000000000000000000000000000000000000000000000000000081565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6102bd7f000000000000000000000000000000000000000000000000000000000000000081565b6102bd7f000000000000000000000000000000000000000000000000000000000000000081565b60005b8c81101561040c578d8d8281811061035157610351610764565b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637050ccd93360016040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff168152602001821515815260200192505050600060405180830381600087803b1580156103e157600080fd5b505af11580156103f5573d6000803e3d6000fd5b50505050808061040490610793565b915050610337565b5060005b8a8110156104da578b8b8281811061042a5761042a610764565b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c00007b0336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b1580156104af57600080fd5b505af11580156104c3573d6000803e3d6000fd5b5050505080806104d290610793565b915050610410565b506104eb85858585600080876104fa565b50505050505050505050505050565b8615610551576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d8152602001806107f4603d913960400191505060405180910390fd5b85156105a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d8152602001806107f4603d913960400191505060405180910390fd5b84156105ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d8152602001806107f4603d913960400191505060405180910390fd5b8315610656576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d8152602001806107f4603d913960400191505060405180910390fd5b82156106ad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d8152602001806107f4603d913960400191505060405180910390fd5b8115610704576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d8152602001806107f4603d913960400191505060405180910390fd5b801561075b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d8152602001806107f4603d913960400191505060405180910390fd5b50505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156107ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fe436c61696d205a6170204d6f636b3a204e6f6e2d7a65726f20657874726120706172616d65746572207761732070617373656420746f20746172676574a2646970667358221220804b3364e3f1f3fdbeaae89a76796b90e4f98f99bcd43ed1c2f9bd27338d29d964736f6c634300080a003360e06040523480156200001157600080fd5b5060405162000b0f38038062000b0f8339810160408190526200003491620002c1565b80816001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000074573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200009e919081019062000342565b604051602001620000b09190620003fa565b604051602081830303815290604052826001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015620000fe573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000128919081019062000342565b6040516020016200013a919062000441565b604051602081830303815290604052836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000188573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ae91906200046e565b8151620001c3906000906020850190620001fe565b508251620001d9906001906020860190620001fe565b5060ff1660a05250506001600160a01b039081166080529190911660c05250620004d7565b8280546200020c906200049a565b90600052602060002090601f0160209004810192826200023057600085556200027b565b82601f106200024b57805160ff19168380011785556200027b565b828001600101855582156200027b579182015b828111156200027b5782518255916020019190600101906200025e565b50620002899291506200028d565b5090565b5b808211156200028957600081556001016200028e565b80516001600160a01b0381168114620002bc57600080fd5b919050565b60008060408385031215620002d557600080fd5b620002e083620002a4565b9150620002f060208401620002a4565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200032c57818101518382015260200162000312565b838111156200033c576000848401525b50505050565b6000602082840312156200035557600080fd5b81516001600160401b03808211156200036d57600080fd5b818401915084601f8301126200038257600080fd5b815181811115620003975762000397620002f9565b604051601f8201601f19908116603f01168101908382118183101715620003c257620003c2620002f9565b81604052828152876020848701011115620003dc57600080fd5b620003ef8360208301602088016200030f565b979650505050505050565b7f436f6e766578205374616b656420506f736974696f6e20000000000000000000815260008251620004348160178501602087016200030f565b9190910160170192915050565b6273746b60e81b815260008251620004618160038501602087016200030f565b9190910160030192915050565b6000602082840312156200048157600080fd5b815160ff811681146200049357600080fd5b9392505050565b600181811c90821680620004af57607f821691505b60208210811415620004d157634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c0516105fa62000515600039600081816101170152610380015260006101900152600081816101c901526102a601526105fa6000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c8063313ce5671161008157806395d89b411161005b57806395d89b41146101fe578063a9059cbb146100ec578063dd62ed3e1461020657600080fd5b8063313ce5671461018b5780636f307dc3146101c457806370a08231146101eb57600080fd5b806316f0115b116100b257806316f0115b1461011257806318160ddd1461015e57806323b872dd1461017457600080fd5b806306fdde03146100ce578063095ea7b3146100ec575b600080fd5b6100d6610214565b6040516100e39190610400565b60405180910390f35b6101026100fa36600461049c565b600092915050565b60405190151581526020016100e3565b6101397f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100e3565b6101666102a2565b6040519081526020016100e3565b6101026101823660046104c6565b60009392505050565b6101b27f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020016100e3565b6101397f000000000000000000000000000000000000000000000000000000000000000081565b6101666101f9366004610502565b610338565b6100d66103f3565b6101666100fa366004610524565b6001805461022190610557565b80601f016020809104026020016040519081016040528092919081815260200182805461024d90610557565b801561029a5780601f1061026f5761010080835404028352916020019161029a565b820191906000526020600020905b81548152906001019060200180831161027d57829003601f168201915b505050505081565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561030f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061033391906105ab565b905090565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa1580156103c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103ed91906105ab565b92915050565b6000805461022190610557565b600060208083528351808285015260005b8181101561042d57858101830151858201604001528201610411565b8181111561043f576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461049757600080fd5b919050565b600080604083850312156104af57600080fd5b6104b883610473565b946020939093013593505050565b6000806000606084860312156104db57600080fd5b6104e484610473565b92506104f260208501610473565b9150604084013590509250925092565b60006020828403121561051457600080fd5b61051d82610473565b9392505050565b6000806040838503121561053757600080fd5b61054083610473565b915061054e60208401610473565b90509250929050565b600181811c9082168061056b57607f821691505b602082108114156105a5577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156105bd57600080fd5b505191905056fea2646970667358221220fe176aed8ca6f061a19c6044454b19be91cf49811a0c97d16b3850e05baf33fe64736f6c634300080a00336102806040523480156200001257600080fd5b50604051620035d1380380620035d1833981016040819052620000359162000c7a565b82826001600160a01b03821615806200005557506001600160a01b038116155b156200007457604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038216608081905260408051632f7a188160e01b81529051632f7a1881916004808201926020929091908290030181865afa158015620000bf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e5919062000cce565b6001600160a01b0390811660a05290811660c0526001600055604080516372f702f360e01b8152905191851692506372f702f39160048083019260209291908290030181865afa1580156200013e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000164919062000cce565b6001600160a01b0316610100816001600160a01b031681525050816001600160a01b031663f10684546040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001bd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e3919062000cf5565b6101c08181525050816001600160a01b031663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200022a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000250919062000cce565b6001600160a01b03166101e0816001600160a01b031681525050816001600160a01b03166372f702f36040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002a9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002cf919062000cce565b6001600160a01b0316610200816001600160a01b031681525050816001600160a01b0316630fb5a6b46040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000328573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200034e919062000cf5565b6102208181525050816001600160a01b031663570ca7356040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000395573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003bb919062000cce565b6001600160a01b0316610240816001600160a01b031681525050816001600160a01b0316630f4ef8a66040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000414573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200043a919062000cce565b6001600160a01b0316610260816001600160a01b031681525050806001600160a01b0316610120816001600160a01b0316815250506000806000846001600160a01b031663d55a23f46040518163ffffffff1660e01b8152600401602060405180830381865afa158015620004b3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004d9919062000cf5565b9050600181106200069257604051632061aa2360e11b8152600060048201526001600160a01b038616906340c3544690602401602060405180830381865afa1580156200052a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000550919062000cce565b6001600160a01b031663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200058e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005b4919062000cce565b9250600281106200069257604051632061aa2360e11b8152600160048201526001600160a01b038616906340c3544690602401602060405180830381865afa15801562000605573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200062b919062000cce565b6001600160a01b031663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000669573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200068f919062000cce565b91505b6001600160a01b0380841661014052828116610160526040805163570ca73560e01b8152905160009288169163570ca7359160048083019260209291908290030181865afa158015620006e9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200070f919062000cce565b9050806001600160a01b0316636a4874a16040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000750573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000776919062000cce565b6001600160a01b0316610180816001600160a01b031681525050806001600160a01b031663075461726040518163ffffffff1660e01b8152600401602060405180830381865afa158015620007cf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007f5919062000cce565b6001600160a01b03166101a0816001600160a01b0316815250506000816001600160a01b0316631526fe27886001600160a01b031663f10684546040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200085f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000885919062000cf5565b6040518263ffffffff1660e01b8152600401620008a491815260200190565b60c060405180830381865afa158015620008c2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008e8919062000d20565b80516001600160a01b0390811660e05260805161018051604051630f67c5bd60e41b81529083166004820152929350169063f67c5bd090602401602060405180830381865afa15801562000940573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000966919062000cf5565b620009995761018051604051632262b1b560e21b81526001600160a01b0390911660048201526024015b60405180910390fd5b6080516101a051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620009e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a0d919062000cf5565b62000a3c576101a051604051632262b1b560e21b81526001600160a01b03909116600482015260240162000990565b60805160e051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa15801562000a89573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000aaf919062000cf5565b62000add5760e051604051632262b1b560e21b81526001600160a01b03909116600482015260240162000990565b6001600160a01b0385161580159062000b645750608051604051630f67c5bd60e41b81526001600160a01b0387811660048301529091169063f67c5bd090602401602060405180830381865afa15801562000b3c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b62919062000cf5565b155b1562000b8f57604051632262b1b560e21b81526001600160a01b038616600482015260240162000990565b6001600160a01b0384161580159062000c165750608051604051630f67c5bd60e41b81526001600160a01b0386811660048301529091169063f67c5bd090602401602060405180830381865afa15801562000bee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c14919062000cf5565b155b1562000c4157604051632262b1b560e21b81526001600160a01b038516600482015260240162000990565b505050505050505062000dda565b6001600160a01b038116811462000c6557600080fd5b50565b805162000c758162000c4f565b919050565b60008060006060848603121562000c9057600080fd5b835162000c9d8162000c4f565b602085015190935062000cb08162000c4f565b604085015190925062000cc38162000c4f565b809150509250925092565b60006020828403121562000ce157600080fd5b815162000cee8162000c4f565b9392505050565b60006020828403121562000d0857600080fd5b5051919050565b8051801515811462000c7557600080fd5b600060c0828403121562000d3357600080fd5b60405160c081016001600160401b038111828210171562000d6457634e487b7160e01b600052604160045260246000fd5b60405262000d728362000c68565b815262000d826020840162000c68565b602082015262000d956040840162000c68565b604082015262000da86060840162000c68565b606082015262000dbb6080840162000c68565b608082015262000dce60a0840162000d0f565b60a08201529392505050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e051610200516102205161024051610260516125c66200100b60003960006103410152600061048b0152600061038d0152600061050f0152600061072d015260006106f8015260008181610584015261169f0152600081816104ba01526115d80152600081816105d20152818161183601526118b70152600081816106c10152818161172701526117b10152600081816103d1015281816110b0015281816111ae0152818161152d01526119f80152600081816105f90152818161108f0152818161118d015261154e0152600081816105ab0152611a190152600081816106330152818161079601528181610851015281816108860152818161096501528181610b6f01528181610c4701528181610d1301528181610d8001528181610e3901528181610f0401528181610f3901528181610fa6015281816110570152818161111d01528181611255015281816112c20152818161132f0152818161139c0152818161140901528181611cda01528181611df90152611ed301526000818161042301528181611b450152611f9901526000818161065a01528181610a9501528181610b40015281816114ba01528181611600015281816116c7015281816117d9015281816118df0152818161197001528181611aa201528181611d3001528181611dca01528181611f0a01528181612021015281816120d5015261217f01526125c66000f3fe608060405234801561001057600080fd5b50600436106102fe5760003560e01c80637b0a47ee1161019c578063c12c21c0116100ee578063da5b383f11610097578063f106845411610071578063f1068454146106f3578063f14faf6f1461071a578063f7c618c11461072857600080fd5b8063da5b383f146106bc578063df136d65146106e3578063ebe2b12b146106eb57600080fd5b8063cd3daf9d116100c8578063cd3daf9d14610697578063ce30bbdb1461069f578063d55a23f4146106b457600080fd5b8063c12c21c014610655578063c32e72021461067c578063c8f33c911461068f57600080fd5b8063923c1d611161015057806399253ac01161012a57806399253ac0146105f4578063a694fc3a1461061b578063bd90df701461062e57600080fd5b8063923c1d611461057f578063927188d9146105a657806397c3413b146105cd57600080fd5b80638b876347116101815780638b8763471461055c5780638dcb40611461056f578063901a7d531461057757600080fd5b80637b0a47ee1461054c57806380faa57d1461055457600080fd5b80633d18b912116102555780636a4874a11161020957806370a08231116101e357806370a08231146104f757806372f702f31461050a57806378aa73a41461053157600080fd5b80636a4874a1146104b55780636c8bcee8146104dc5780637050ccd9146104e457600080fd5b806349f039a21161023a57806349f039a214610473578063570ca7351461048657806363d38c3b146104ad57600080fd5b80633d18b9121461045857806340c354461461046057600080fd5b80631c1c6fe5116102b75780632ee40908116102915780632ee40908146103fb5780632f7a18811461041e57806338d074361461044557600080fd5b80631c1c6fe5146103b757806320b2c151146103cc578063262d3d6d146103f357600080fd5b80630f4ef8a6116102e85780630f4ef8a61461033c5780630fb5a6b41461038857806318160ddd146103af57600080fd5b80628cc262146103035780630700037d14610329575b600080fd5b610316610311366004612205565b61074f565b6040519081526020015b60405180910390f35b610316610337366004612205565b610809565b6103637f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610320565b6103167f000000000000000000000000000000000000000000000000000000000000000081565b610316610882565b6103ca6103c5366004612230565b610918565b005b6103637f000000000000000000000000000000000000000000000000000000000000000081565b610316610961565b61040e61040936600461224d565b6109ce565b6040519015158152602001610320565b6103637f000000000000000000000000000000000000000000000000000000000000000081565b61040e610453366004612279565b610a02565b61040e610a4d565b61036361046e3660046122a9565b610c15565b6103ca610481366004612230565b610cc7565b6103637f000000000000000000000000000000000000000000000000000000000000000081565b610316610d0f565b6103637f000000000000000000000000000000000000000000000000000000000000000081565b610316610d7c565b61040e6104f23660046122c2565b610de9565b610316610505366004612205565b610ebc565b6103637f000000000000000000000000000000000000000000000000000000000000000081565b610539600181565b60405161ffff9091168152602001610320565b610316610f35565b610316610fa2565b61031661056a366004612205565b61100f565b61040e611088565b610316611119565b6103637f000000000000000000000000000000000000000000000000000000000000000081565b6103637f000000000000000000000000000000000000000000000000000000000000000081565b6103637f000000000000000000000000000000000000000000000000000000000000000081565b6103637f000000000000000000000000000000000000000000000000000000000000000081565b61040e6106293660046122a9565b611186565b6103637f000000000000000000000000000000000000000000000000000000000000000081565b6103637f000000000000000000000000000000000000000000000000000000000000000081565b61040e61068a366004612279565b61120d565b610316611251565b6103166112be565b6106a7600c81565b60405161032091906122f0565b61031661132b565b6103637f000000000000000000000000000000000000000000000000000000000000000081565b610316611398565b610316611405565b6103167f000000000000000000000000000000000000000000000000000000000000000081565b61040e6104093660046122a9565b6103637f000000000000000000000000000000000000000000000000000000000000000081565b6040517e8cc26200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f000000000000000000000000000000000000000000000000000000000000000090911690628cc262906024015b602060405180830381865afa1580156107df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108039190612331565b92915050565b6040517f0700037d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f000000000000000000000000000000000000000000000000000000000000000090911690630700037d906024016107c2565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109139190612331565b905090565b61095d6000368080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250859250600191506114729050565b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663262d3d6d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108ef573d6000803e3d6000fd5b60006040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610a466000368080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525087935091506114729050565b9392505050565b6040517fe958b704000000000000000000000000000000000000000000000000000000008152336004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015610adc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b00919061234a565b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a90610b9c9033907f0000000000000000000000000000000000000000000000000000000000000000906000903690600401612367565b6000604051808303816000875af1158015610bbb573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610c01919081019061243a565b50610c0d816001611593565b600191505090565b6040517f40c35446000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906340c3544690602401602060405180830381865afa158015610ca3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610803919061234a565b610d0c6000368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508592506001915061193f9050565b50565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166363d38c3b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108ef573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636c8bcee86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108ef573d6000803e3d6000fd5b6040517f7050ccd900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282151560248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690637050ccd9906044016020604051808303816000875af1158015610e84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea891906124fa565b50610eb38383611593565b50600192915050565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a08231906024016107c2565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637b0a47ee6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108ef573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166380faa57d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108ef573d6000803e3d6000fd5b6040517f8b87634700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638b876347906024016107c2565b60006111117f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525060019250829150611a599050565b506001905090565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663901a7d536040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108ef573d6000803e3d6000fd5b6000610eb37f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006000368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250600193509150611a599050565b6000610eb36000368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250879350915061193f9050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c8f33c916040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108ef573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663cd3daf9d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108ef573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d55a23f46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108ef573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663df136d656040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108ef573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ebe2b12b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108ef573d6000803e3d6000fd5b6040517fe958b704000000000000000000000000000000000000000000000000000000008152336004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611501573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611525919061234a565b9050611576817f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000088600088611b28565b50831561158857611588816001611593565b506001949350505050565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561164457600080fd5b505af1158015611658573d6000803e3d6000fd5b50506040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f00000000000000000000000000000000000000000000000000000000000000001692506351e3f1609150604401600060405180830381600087803b15801561170d57600080fd5b505af1158015611721573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16158015906117675750805b1561095d576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561181d57600080fd5b505af1158015611831573d6000803e3d6000fd5b5050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1615905061095d576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561192357600080fd5b505af1158015611937573d6000803e3d6000fd5b505050505050565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156119cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119f0919061234a565b9050611a41817f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000087600087611b28565b508215611a5357611a53816001611593565b50505050565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015260609060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611ae9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0d919061234a565b9050611b1d818888888888611b28565b979650505050505050565b60606000803373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614611c91576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301528916906370a0823190602401602060405180830381865afa158015611bd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bfa9190612331565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152919350908816906370a0823190602401602060405180830381865afa158015611c6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c8e9190612331565b90505b8415611d8d576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015611d7457600080fd5b505af1158015611d88573d6000803e3d6000fd5b505050505b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a90611e239033907f0000000000000000000000000000000000000000000000000000000000000000908b90600401612517565b6000604051808303816000875af1158015611e42573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611e88919081019061243a565b92508415611f67576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301528981166044830152600160648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015611f4e57600080fd5b505af1158015611f62573d6000803e3d6000fd5b505050505b611f75898989858589611f81565b50509695505050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614612082576040517f654a9eda00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528681166024830152858116604483015260648201859052608482018490527f0000000000000000000000000000000000000000000000000000000000000000169063654a9eda9060a401600060405180830381600087803b15801561206557600080fd5b505af1158015612079573d6000803e3d6000fd5b50505050611937565b8015612132576040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015286811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b15801561211957600080fd5b505af115801561212d573d6000803e3d6000fd5b505050505b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015285811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156121c357600080fd5b505af11580156121d7573d6000803e3d6000fd5b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114610d0c57600080fd5b60006020828403121561221757600080fd5b8135610a46816121e3565b8015158114610d0c57600080fd5b60006020828403121561224257600080fd5b8135610a4681612222565b6000806040838503121561226057600080fd5b823561226b816121e3565b946020939093013593505050565b6000806040838503121561228c57600080fd5b82359150602083013561229e81612222565b809150509250929050565b6000602082840312156122bb57600080fd5b5035919050565b600080604083850312156122d557600080fd5b82356122e0816121e3565b9150602083013561229e81612222565b602081016011831061232b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561234357600080fd5b5051919050565b60006020828403121561235c57600080fd5b8151610a46816121e3565b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250606060408301528260608301528284608084013760006080848401015260807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f850116830101905095945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60005b83811015612429578181015183820152602001612411565b83811115611a535750506000910152565b60006020828403121561244c57600080fd5b815167ffffffffffffffff8082111561246457600080fd5b818401915084601f83011261247857600080fd5b81518181111561248a5761248a6123df565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156124d0576124d06123df565b816040528281528760208487010111156124e957600080fd5b611b1d83602083016020880161240e565b60006020828403121561250c57600080fd5b8151610a4681612222565b600073ffffffffffffffffffffffffffffffffffffffff808616835280851660208401525060606040830152825180606084015261255c81608085016020870161240e565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160800194935050505056fea264697066735822122014882b5d8edce8ab020643e045bc4ec2fad569e354e7a0377cb2553dca8093d864736f6c634300080a00336101406040523480156200001257600080fd5b50604051620024563803806200245683398101604081905262000035916200037b565b816001600160a01b031663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000074573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200009a9190620003ba565b6001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000d8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000fe9190620003ba565b82826001600160a01b03821615806200011e57506001600160a01b038116155b156200013d57604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038216608081905260408051632f7a188160e01b81529051632f7a1881916004808201926020929091908290030181865afa15801562000188573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ae9190620003ba565b6001600160a01b0390811660a05290811660c0526000805460ff19169055821615159050620001f057604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200022f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002559190620003ba565b6001600160a01b0390811660e0526001805560408051636a4874a160e01b815290519184169250636a4874a19160048083019260209291908290030181865afa158015620002a7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002cd9190620003ba565b6001600160a01b0316610100816001600160a01b031681525050806001600160a01b031663075461726040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000326573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200034c9190620003ba565b6001600160a01b03166101205250620003e19050565b6001600160a01b03811681146200037857600080fd5b50565b600080604083850312156200038f57600080fd5b82516200039c8162000362565b6020840151909250620003af8162000362565b809150509250929050565b600060208284031215620003cd57600080fd5b8151620003da8162000362565b9392505050565b60805160a05160c05160e0516101005161012051611f6f620004e760003960006101a2015260006103550152600081816103c20152818161068f015281816109340152610a660152600081816103f10152818161045b0152818161055f015281816105d4015281816107e90152818161089d01528181610f4f01528181610fbc01528181611154015281816112630152818161163601528181611755015261182f0152600081816102c0015281816114a101526118f501526000818161041801528181610b2001528181610d0a015281816113fe0152818161168c01528181611726015281816118660152818161197d01528181611a310152611adb0152611f6f6000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c80636a4874a1116100e3578063a50cf2c81161008c578063c12c21c011610066578063c12c21c014610413578063ce30bbdb1461043a578063cfb9cfba1461044f57600080fd5b8063a50cf2c8146103bd578063ab366292146103e4578063bd90df70146103ec57600080fd5b80638456cb59116100bd5780638456cb591461039a578063958e2d31146103a25780639b51ecd3146103b557600080fd5b80636a4874a11461035057806378aa73a4146103775780637b1039991461039257600080fd5b80633f4ba83a116101455780635c975abb1161011f5780635c975abb1461032a5780635ebaf1db1461033557806360759fce1461033d57600080fd5b80633f4ba83a146102ea57806343a0d066146102f4578063441a3e701461031757600080fd5b8063251d48c011610176578063251d48c0146102855780632f7a1881146102bb578063376d771a146102e257600080fd5b8063075461721461019d578063081e3eda146101ee5780631526fe2714610204575b600080fd5b6101c47f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6101f6610457565b6040519081526020016101e5565b610217610212366004611b40565b6104ed565b6040516101e59190600060c08201905073ffffffffffffffffffffffffffffffffffffffff8084511683528060208501511660208401528060408501511660408401528060608501511660608401528060808501511660808401525060a0830151151560a083015292915050565b6101c4610293366004611b40565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6101c47f000000000000000000000000000000000000000000000000000000000000000081565b6101c46105d0565b6102f2610661565b005b610307610302366004611b6a565b61074f565b60405190151581526020016101e5565b610307610325366004611ba3565b61079b565b60005460ff16610307565b6101c46107e5565b61030761034b366004611bc5565b610852565b6101c47f000000000000000000000000000000000000000000000000000000000000000081565b61037f600181565b60405161ffff90911681526020016101e5565b6101c4610899565b6102f2610906565b6103076103b0366004611b40565b6109f2565b6102f2610a38565b6101c47f000000000000000000000000000000000000000000000000000000000000000081565b6101c4610f4b565b6101c47f000000000000000000000000000000000000000000000000000000000000000081565b6101c47f000000000000000000000000000000000000000000000000000000000000000081565b610442600d81565b6040516101e59190611c24565b6101c4610fb8565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663081e3eda6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e89190611c65565b905090565b6040805160c081018252600080825260208201819052818301819052606082018190526080820181905260a082015290517f1526fe270000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690631526fe279060240160c060405180830381865afa1580156105a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ca9190611cd6565b92915050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663376d771a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561063d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e89190611d77565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156106eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070f9190611d92565b610745576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61074d611025565b565b600061079384836000368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250925061110b915050565b949350505050565b60006107de836000368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250925061121a915050565b9392505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635ebaf1db6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561063d573d6000803e3d6000fd5b60006107de83836000368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061110b915050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637b1039996040518163ffffffff1660e01b8152600401602060405180830381865afa15801561063d573d6000803e3d6000fd5b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015610990573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b49190611d92565b6109ea576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61074d6112f5565b60006105ca826000368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061121a915050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610ac2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae69190611d92565b610b1c576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bad9190611d77565b905060008173ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c209190611c65565b905060005b81811015610f46576040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810182905260009073ffffffffffffffffffffffffffffffffffffffff851690635094cb4f90602401602060405180830381865afa158015610c9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cbf9190611d77565b6040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000917f0000000000000000000000000000000000000000000000000000000000000000169063fdd5764590602401602060405180830381865afa158015610d51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d759190611d77565b905060008173ffffffffffffffffffffffffffffffffffffffff1663ce30bbdb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de89190611daf565b9050600c816010811115610dfe57610dfe611bf5565b1415610f385760008273ffffffffffffffffffffffffffffffffffffffff1663f10684546040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e759190611c65565b90508273ffffffffffffffffffffffffffffffffffffffff166320b2c1516040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ec2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee69190611d77565b60009182526002602052604090912080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9092169190911790555b836001019350505050610c25565b505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ab3662926040518163ffffffff1660e01b8152600401602060405180830381865afa15801561063d573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663cfb9cfba6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561063d573d6000803e3d6000fd5b60005460ff16611096576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6040517f1526fe2700000000000000000000000000000000000000000000000000000000815260048101859052600090819073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690631526fe279060240160c060405180830381865afa15801561119b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bf9190611cd6565b80519091506000866111d55782602001516111fb565b60008881526002602052604090205473ffffffffffffffffffffffffffffffffffffffff165b905061120b8282886001896113b5565b50600198975050505050505050565b6040517f1526fe2700000000000000000000000000000000000000000000000000000000815260048101849052600090819073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690631526fe279060240160c060405180830381865afa1580156112aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ce9190611cd6565b60208101518151919250906112e78282886000896113b5565b506001979650505050505050565b60005460ff1615611362576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015260640161108d565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586110e13390565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015260609060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611445573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114699190611d77565b9050611479818888888888611484565b979650505050505050565b60606000803373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146115ed576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301528916906370a0823190602401602060405180830381865afa158015611532573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115569190611c65565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152919350908816906370a0823190602401602060405180830381865afa1580156115c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ea9190611c65565b90505b84156116e9576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156116d057600080fd5b505af11580156116e4573d6000803e3d6000fd5b505050505b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a9061177f9033907f0000000000000000000000000000000000000000000000000000000000000000908b90600401611e00565b6000604051808303816000875af115801561179e573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526117e49190810190611e79565b925084156118c3576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301528981166044830152600160648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156118aa57600080fd5b505af11580156118be573d6000803e3d6000fd5b505050505b6118d18989898585896118dd565b50509695505050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146119de576040517f654a9eda00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528681166024830152858116604483015260648201859052608482018490527f0000000000000000000000000000000000000000000000000000000000000000169063654a9eda9060a401600060405180830381600087803b1580156119c157600080fd5b505af11580156119d5573d6000803e3d6000fd5b50505050611b38565b8015611a8e576040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015286811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b158015611a7557600080fd5b505af1158015611a89573d6000803e3d6000fd5b505050505b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015285811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015611b1f57600080fd5b505af1158015611b33573d6000803e3d6000fd5b505050505b505050505050565b600060208284031215611b5257600080fd5b5035919050565b8015158114611b6757600080fd5b50565b600080600060608486031215611b7f57600080fd5b83359250602084013591506040840135611b9881611b59565b809150509250925092565b60008060408385031215611bb657600080fd5b50508035926020909101359150565b60008060408385031215611bd857600080fd5b823591506020830135611bea81611b59565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160118310611c5f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b600060208284031215611c7757600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b805173ffffffffffffffffffffffffffffffffffffffff81168114611cd157600080fd5b919050565b600060c08284031215611ce857600080fd5b60405160c0810181811067ffffffffffffffff82111715611d0b57611d0b611c7e565b604052611d1783611cad565b8152611d2560208401611cad565b6020820152611d3660408401611cad565b6040820152611d4760608401611cad565b6060820152611d5860808401611cad565b608082015260a0830151611d6b81611b59565b60a08201529392505050565b600060208284031215611d8957600080fd5b6107de82611cad565b600060208284031215611da457600080fd5b81516107de81611b59565b600060208284031215611dc157600080fd5b8151601181106107de57600080fd5b60005b83811015611deb578181015183820152602001611dd3565b83811115611dfa576000848401525b50505050565b600073ffffffffffffffffffffffffffffffffffffffff8086168352808516602084015250606060408301528251806060840152611e45816080850160208701611dd0565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01691909101608001949350505050565b600060208284031215611e8b57600080fd5b815167ffffffffffffffff80821115611ea357600080fd5b818401915084601f830112611eb757600080fd5b815181811115611ec957611ec9611c7e565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715611f0f57611f0f611c7e565b81604052828152876020848701011115611f2857600080fd5b611479836020830160208801611dd056fea264697066735822122080e1032e0766b40456cf2702ec4a669a6b8db0e189e75ab6c4126faae080b85d64736f6c634300080a003360e060405234801561001057600080fd5b50604051610e17380380610e178339818101604052604081101561003357600080fd5b50805160209091015181816001600160a01b038216158061005b57506001600160a01b038116155b1561007957604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038216608081905260408051632f7a188160e01b81529051632f7a1881916004808201926020929091908290030181865afa1580156100c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e79190610106565b6001600160a01b0390811660a0521660c0525050600160005550610136565b60006020828403121561011857600080fd5b81516001600160a01b038116811461012f57600080fd5b9392505050565b60805160a05160c051610c97610180600039600081816102920152818161040601526104900152600060920152600081816102b90152818161030e0152610b460152610c976000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c8063923c1d611161005b578063923c1d6114610285578063bd90df701461028d578063c12c21c0146102b4578063ce30bbdb146102db57600080fd5b80632f7a18811461008d5780635a7b87f2146100dd5780636a4874a11461025e57806378aa73a414610266575b600080fd5b6100b47f000000000000000000000000000000000000000000000000000000000000000081565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b61025c60048036036101208110156100f457600080fd5b81019060208101813564010000000081111561010f57600080fd5b82018360208201111561012157600080fd5b8035906020019184602083028401116401000000008311171561014357600080fd5b91939092909160208101903564010000000081111561016157600080fd5b82018360208201111561017357600080fd5b8035906020019184602083028401116401000000008311171561019557600080fd5b9193909290916020810190356401000000008111156101b357600080fd5b8201836020820111156101c557600080fd5b803590602001918460208302840111640100000000831117156101e757600080fd5b91939092909160208101903564010000000081111561020557600080fd5b82018360208201111561021757600080fd5b8035906020019184602083028401116401000000008311171561023957600080fd5b91935091508035906020810135906040810135906060810135906080013561030a565b005b6100b4610402565b61026e600181565b6040805161ffff9092168252519081900360200190f35b6100b461048c565b6100b47f000000000000000000000000000000000000000000000000000000000000000081565b6100b47f000000000000000000000000000000000000000000000000000000000000000081565b6102e3600e81565b604051808260108111156102f9576102f9610c03565b815260200191505060405180910390f35b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e958b704336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381865afa158015610398573d6000803e3d6000fd5b505050506040513d60208110156103ae57600080fd5b505190506103bd818f8f6104f9565b6103c8818d8d610830565b6103d5818b8b8b8b610991565b6103e6816103e1610402565b610ab8565b6103f2816103e161048c565b5050505050505050505050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636a4874a16040518163ffffffff1660e01b8152600401602060405180830381865afa15801561046f573d6000803e3d6000fd5b505050506040513d602081101561048557600080fd5b5051919050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663923c1d616040518163ffffffff1660e01b8152600401602060405180830381865afa15801561046f573d6000803e3d6000fd5b600081815b8181101561082857600085858381811061051a5761051a610c32565b604080517f7050ccd900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c811660048301526001602483015291516020938402959095013590911694508493637050ccd993506044808301939282900301816000875af11580156105a1573d6000803e3d6000fd5b505050506040513d60208110156105b757600080fd5b5050604080517ff7c618c1000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff83169163f7c618c19160048083019260209291908290030181865afa158015610624573d6000803e3d6000fd5b505050506040513d602081101561063a57600080fd5b5051604080517f40c3544600000000000000000000000000000000000000000000000000000000815260006004820152905191955073ffffffffffffffffffffffffffffffffffffffff8316916340c35446916024808201926020929091908290030181865afa9250505080156106c357506040513d60208110156106be57600080fd5b505160015b6106cc5761081f565b8073ffffffffffffffffffffffffffffffffffffffff1663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa158015610717573d6000803e3d6000fd5b505050506040513d602081101561072d57600080fd5b5051945061073b8886610ab8565b8173ffffffffffffffffffffffffffffffffffffffff166340c3544660016040518263ffffffff1660e01b815260040180828152602001915050602060405180830381865afa9250505080156107a357506040513d602081101561079e57600080fd5b505160015b6107ac5761081d565b8073ffffffffffffffffffffffffffffffffffffffff1663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107f7573d6000803e3d6000fd5b505050506040513d602081101561080d57600080fd5b5051955061081b8987610ab8565b505b505b506001016104fe565b505050505050565b600081815b818110156108285784848281811061084f5761084f610c32565b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108b6573d6000803e3d6000fd5b505050506040513d60208110156108cc57600080fd5b505192508484828181106108e2576108e2610c32565b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c00007b0876040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801561096757600080fd5b505af115801561097b573d6000803e3d6000fd5b505050506109898684610ab8565b600101610835565b600083815b81811015610aae578484828181106109b0576109b0610c32565b9050602002013573ffffffffffffffffffffffffffffffffffffffff1692508686828181106109e1576109e1610c32565b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636b09169589856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b158015610a8457600080fd5b505af1158015610a98573d6000803e3d6000fd5b50505050610aa68884610ab8565b600101610996565b5050505050505050565b60018173ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381865afa158015610b26573d6000803e3d6000fd5b505050506040513d6020811015610b3c57600080fd5b50511115610bff577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166351e3f16083836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b158015610beb57600080fd5b505af1158015610828573d6000803e3d6000fd5b5050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea2646970667358221220e1d3a52cae085825017fa65f4505505a00eb6fda58fef20587f8561e46c541c264736f6c634300080a003360806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d00011790553480156200003a57600080fd5b506040805161018081019091526000908060c081018060018152604080518082018252600381526244414960e81b6020828101919091528301526012908201526305f5e100606082015260800160018152602001600081525081526020016040518060c001604052806002600a811115620000b957620000b962000b78565b815260408051808201825260048152635553444360e01b6020828101919091528301526006908201526305f5e100606082015260800160018152602001600081525081526020016040518060c001604052806003600a81111562000121576200012162000b78565b815260408051808201825260048152630ae8aa8960e31b602082810191909152830152601290820152644a817c8000606082015260800160028152602001600081525081526020016040518060c001604052806004600a8111156200018a576200018a62000b78565b815260408051808201825260048152634c494e4b60e01b6020828101919091528301526012908201526359682f00606082015260800160018152602001600081525081526020016040518060c001604052806005600a811115620001f257620001f262000b78565b815260408051808201825260048152631554d11560e21b602082810191909152830152601290820152633b023380606082015260800160018152602001600081525081526020016040518060c001604052806006600a8111156200025a576200025a62000b78565b815260408051808201825260058152640e6e88aa8960db1b602082810191909152830152601290820152644cd588640060608201526080016003815260200160009052905260408051610140810190915290915060009080608081018060078152602001604051806040016040528060048152602001636344414960e01b8152508152602001601260ff1681526020016305f5e100815260200160048081111562000309576200030962000b78565b8152602001600181525081526020016040518060c001604052806008600a81111562000339576200033962000b78565b81526040805180820182526005815264635553444360d81b6020828101919091528301526006908201526305f5e100606082015260800160048152602001600281525081526020016040518060c001604052806009600a811115620003a257620003a262000b78565b8152604080518082018252600581526418d554d11560da1b602082810191909152830152601290820152633b023380606082015260800160048152602001600581525081526020016040518060c00160405280600a808111156200040a576200040a62000b78565b81526040805180820182526005815264634c494e4b60d81b6020828101919091528301526012908201526359682f00606082015260800160048152602001600490529052905060005b600681101562000496576200048183826006811062000476576200047662000b8e565b6020020151620004db565b806200048d8162000ba4565b91505062000453565b5060005b6004811015620004d257620004bd82826004811062000476576200047662000b8e565b80620004c98162000ba4565b9150506200049a565b50505062000d14565b6000600282608001516004811115620004f857620004f862000b78565b14156200054e576040516200050d9062000a8c565b604051809103906000f0801580156200052a573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b03831617905590506200071e565b60038260800151600481111562000569576200056962000b78565b1415620005a4576040516200057e9062000a9a565b604051809103906000f0801580156200059b573d6000803e3d6000fd5b5090506200071e565b600182608001516004811115620005bf57620005bf62000b78565b1415620005f157816020015182602001518360400151604051620005e39062000aa8565b6200057e9392919062000c1e565b6004826080015160048111156200060c576200060c62000b78565b1415620006be576000600260008460a00151600a81111562000632576200063262000b78565b600a81111562000646576200064662000b78565b815260200190815260200160002060009054906101000a90046001600160a01b0316905082602001518360200151846040015183604051620006889062000ab6565b62000697949392919062000c5b565b604051809103906000f080158015620006b4573d6000803e3d6000fd5b509150506200071e565b60405162461bcd60e51b815260206004820152602b60248201527f74657374546f6b656e53756974653a204372656174696e6720756e6b6e6f776e60448201526a20746f6b656e207479706560a81b606482015260840160405180910390fd5b60005460208301516040516318caf8e360e31b8152620100009092046001600160a01b03169163c657c718916200075b9185919060040162000ca9565b600060405180830381600087803b1580156200077657600080fd5b505af11580156200078b573d6000803e3d6000fd5b50505050600082606001516008604051620007a69062000ac4565b91825260ff166020820152604001604051809103906000f080158015620007d1573d6000803e3d6000fd5b50905081600260008560000151600a811115620007f257620007f262000b78565b600a81111562000806576200080662000b78565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055508260600151600560008560000151600a8111156200085a576200085a62000b78565b600a8111156200086e576200086e62000b78565b8152602080820192909252604090810160009081209390935585516001600160a01b03861684526008909252909120805460ff1916600183600a811115620008ba57620008ba62000b78565b02179055508260800151600360008560000151600a811115620008e157620008e162000b78565b600a811115620008f557620008f562000b78565b81526020810191909152604001600020805460ff1916600183600481111562000922576200092262000b78565b0217905550604080518082019091526001600160a01b0380841682528281166020808401918252600780546001810182556000918252945160029095027fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688810180549686166001600160a01b031997881617905592517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c689909301805493909416929094169190911790915584015184519091600491600a811115620009eb57620009eb62000b78565b600a811115620009ff57620009ff62000b78565b8152602001908152602001600020908051906020019062000a2292919062000ad2565b5080600660008560000151600a81111562000a415762000a4162000b78565b600a81111562000a555762000a5562000b78565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550505050565b610ab1806200285183390190565b611224806200330283390190565b611758806200452683390190565b6117098062005c7e83390190565b6106ca806200738783390190565b82805462000ae09062000cd7565b90600052602060002090601f01602090048101928262000b04576000855562000b4f565b82601f1062000b1f57805160ff191683800117855562000b4f565b8280016001018555821562000b4f579182015b8281111562000b4f57825182559160200191906001019062000b32565b5062000b5d92915062000b61565b5090565b5b8082111562000b5d576000815560010162000b62565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600060001982141562000bc757634e487b7160e01b600052601160045260246000fd5b5060010190565b6000815180845260005b8181101562000bf65760208185018101518683018201520162000bd8565b8181111562000c09576000602083870101525b50601f01601f19169290920160200192915050565b60608152600062000c33606083018662000bce565b828103602084015262000c47818662000bce565b91505060ff83166040830152949350505050565b60808152600062000c70608083018762000bce565b828103602084015262000c84818762000bce565b60ff95909516604084015250506001600160a01b039190911660609091015292915050565b6001600160a01b038316815260406020820181905260009062000ccf9083018462000bce565b949350505050565b600181811c9082168062000cec57607f821691505b6020821081141562000d0e57634e487b7160e01b600052602260045260246000fd5b50919050565b611b2d8062000d246000396000f3fe6080604052600436106101635760003560e01c80638eb86e8b116100c0578063c6c3bbe611610074578063d051a62211610059578063d051a62214610490578063eebab8ef146104b0578063fa7626d4146104d057600080fd5b8063c6c3bbe614610433578063c74912d21461045357600080fd5b80639b140a85116100a55780639b140a85146103e6578063b36ba20814610406578063ba414fa61461040e57600080fd5b80638eb86e8b1461038357806398cdaadf146103a357600080fd5b80636a72bde71161011757806388327863116100fc578063883278631461030857806388f776a2146103365780638a3177a31461035657600080fd5b80636a72bde7146102c45780636ca42ae3146102e657600080fd5b8063440864fa11610148578063440864fa146102025780634b57b0be1461022f57806367b426451461028157600080fd5b806304bc3b1c1461016f57806310c7f0b9146101b557600080fd5b3661016a57005b600080fd5b34801561017b57600080fd5b5061019f61018a3660046116f6565b60086020526000908152604090205460ff1681565b6040516101ac9190611742565b60405180910390f35b3480156101c157600080fd5b506101d56101d036600461175c565b6104ea565b6040805173ffffffffffffffffffffffffffffffffffffffff9384168152929091166020830152016101ac565b34801561020e57600080fd5b5061022261021d366004611784565b610530565b6040516101ac91906117cb565b34801561023b57600080fd5b5060015461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101ac565b34801561028d57600080fd5b5061025c61029c366004611784565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156102d057600080fd5b506102e46102df36600461181c565b6105ca565b005b3480156102f257600080fd5b506102fb610730565b6040516101ac919061186b565b34801561031457600080fd5b506103286103233660046118d4565b6107b5565b6040519081526020016101ac565b34801561034257600080fd5b506102e461035136600461190b565b610888565b34801561036257600080fd5b50610328610371366004611784565b60056020526000908152604090205481565b34801561038f57600080fd5b506102e461039e366004611954565b6108b9565b3480156103af57600080fd5b5061025c6103be366004611784565b60066020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156103f257600080fd5b506102e4610401366004611993565b610a73565b6102e4610b22565b34801561041a57600080fd5b50610423610ba0565b60405190151581526020016101ac565b34801561043f57600080fd5b506102e461044e3660046119b3565b610d00565b34801561045f57600080fd5b5061048361046e366004611784565b60036020526000908152604090205460ff1681565b6040516101ac91906119d3565b34801561049c57600080fd5b506103286104ab36600461190b565b610daf565b3480156104bc57600080fd5b506102e46104cb366004611954565b610e8b565b3480156104dc57600080fd5b506000546104239060ff1681565b600781815481106104fa57600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff91821692501682565b60046020526000908152604090208054610549906119e7565b80601f0160208091040260200160405190810160405280929190818152602001828054610575906119e7565b80156105c25780601f10610597576101008083540402835291602001916105c2565b820191906000526020600020905b8154815290600101906020018083116105a557829003601f168201915b505050505081565b6000546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152620100009092049091169063ca669fa790602401600060405180830381600087803b15801561063e57600080fd5b505af1158015610652573d6000803e3d6000fd5b505050506002600085600a81111561066c5761066c611713565b600a81111561067d5761067d611713565b8152602081019190915260409081016000205490517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490529091169063095ea7b3906044016020604051808303816000875af1158015610705573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107299190611a3b565b5050505050565b60606007805480602002602001604051908101604052809291908181526020016000905b828210156107ac5760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff908116835260019182015416828401529083529092019101610754565b50505050905090565b60006002600084600a8111156107cd576107cd611713565b600a8111156107de576107de611713565b8152602081019190915260409081016000205490517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152909116906370a0823190602401602060405180830381865afa15801561085d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108819190611a5d565b9392505050565b6108b48383837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6105ca565b505050565b60016003600085600a8111156108d1576108d1611713565b600a8111156108e2576108e2611713565b815260208101919091526040016000205460ff16600481111561090757610907611713565b14610999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f74657374546f6b656e53756974653a20547279696e6720746f206275726e206160448201527f206e6f6e2d6e6f726d616c20746f6b656e00000000000000000000000000000060648201526084015b60405180910390fd5b6002600084600a8111156109af576109af611713565b600a8111156109c0576109c0611713565b8152602081019190915260409081016000205490517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526024820184905290911690639dc29fac906044015b6020604051808303816000875af1158015610a49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6d9190611a3b565b50505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604081205460ff169081600a811115610aaf57610aaf611713565b1415610b17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f20746f6b656e2077697468207375636820616464726573730000000000006044820152606401610990565b610a6d818484610888565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015610b8c57600080fd5b505af1158015610729573d6000803e3d6000fd5b60008054610100900460ff1615610bc05750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610cfb5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610c65917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc491608001611a76565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052610c9d91611abe565b6000604051808303816000865af19150503d8060008114610cda576040519150601f19603f3d011682016040523d82523d6000602084013e610cdf565b606091505b5091505080806020019051810190610cf79190611a3b565b9150505b919050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604081205460ff169081600a811115610d3c57610d3c611713565b1415610da4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f20746f6b656e2077697468207375636820616464726573730000000000006044820152606401610990565b610a6d818484610e8b565b60006002600085600a811115610dc757610dc7611713565b600a811115610dd857610dd8611713565b8152602081019190915260409081016000205490517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301529091169063dd62ed3e90604401602060405180830381865afa158015610e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e839190611a5d565b949350505050565b60026003600085600a811115610ea357610ea3611713565b600a811115610eb457610eb4611713565b815260208101919091526040016000205460ff166004811115610ed957610ed9611713565b1415610ff6576000546040517fc88a5e6d000000000000000000000000000000000000000000000000000000008152306004820152602481018390526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c88a5e6d90604401600060405180830381600087803b158015610f5657600080fd5b505af1158015610f6a573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015610fd857600080fd5b505af1158015610fec573d6000803e3d6000fd5b505050505061163c565b600380600085600a81111561100d5761100d611713565b600a81111561101e5761101e611713565b815260208101919091526040016000205460ff16600481111561104357611043611713565b14156111aa576000546040517fc88a5e6d000000000000000000000000000000000000000000000000000000008152306004820152602481018390526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c88a5e6d90604401600060405180830381600087803b1580156110c057600080fd5b505af11580156110d4573d6000803e3d6000fd5b505050506002600084600a8111156110ee576110ee611713565b600a8111156110ff576110ff611713565b8152602081019190915260409081016000205490517fa1903eab00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a1903eab90839060240160206040518083038185885af115801561117f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906111a49190611a5d565b5061163c565b60046003600085600a8111156111c2576111c2611713565b600a8111156111d3576111d3611713565b815260208101919091526040016000205460ff1660048111156111f8576111f8611713565b141561148f5760006002600085600a81111561121657611216611713565b600a81111561122757611227611713565b815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c49190611ada565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600860205260409020549091506112fb9060ff163084610e8b565b8073ffffffffffffffffffffffffffffffffffffffff1663095ea7b36002600087600a81111561132d5761132d611713565b600a81111561133e5761133e611713565b81526020810191909152604090810160002054905160e083901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602481018590526044016020604051808303816000875af11580156113c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e69190611a3b565b506002600085600a8111156113fd576113fd611713565b600a81111561140e5761140e611713565b8152602081019190915260409081016000205490517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810184905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f1990604401600060405180830381600087803b158015610fd857600080fd5b60016003600085600a8111156114a7576114a7611713565b600a8111156114b8576114b8611713565b815260208101919091526040016000205460ff1660048111156114dd576114dd611713565b14156115b4576002600084600a8111156114f9576114f9611713565b600a81111561150a5761150a611713565b8152602081019190915260409081016000205490517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f19906044016020604051808303816000875af1158015611590573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a49190611a3b565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f74657374546f6b656e53756974653a20547279696e6720746f207472616e736660448201527f657220756e6b6e6f776e20746f6b656e000000000000000000000000000000006064820152608401610990565b6002600084600a81111561165257611652611713565b600a81111561166357611663611713565b8152602081019190915260409081016000205490517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490529091169063a9059cbb90604401610a2a565b73ffffffffffffffffffffffffffffffffffffffff811681146116f357600080fd5b50565b60006020828403121561170857600080fd5b8135610881816116d1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60208101600b831061175657611756611713565b91905290565b60006020828403121561176e57600080fd5b5035919050565b8035600b8110610cfb57600080fd5b60006020828403121561179657600080fd5b61088182611775565b60005b838110156117ba5781810151838201526020016117a2565b83811115610a6d5750506000910152565b60208152600082518060208401526117ea81604085016020870161179f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000806080858703121561183257600080fd5b61183b85611775565b9350602085013561184b816116d1565b9250604085013561185b816116d1565b9396929550929360600135925050565b602080825282518282018190526000919060409081850190868401855b828110156118c7578151805173ffffffffffffffffffffffffffffffffffffffff90811686529087015116868501529284019290850190600101611888565b5091979650505050505050565b600080604083850312156118e757600080fd5b6118f083611775565b91506020830135611900816116d1565b809150509250929050565b60008060006060848603121561192057600080fd5b61192984611775565b92506020840135611939816116d1565b91506040840135611949816116d1565b809150509250925092565b60008060006060848603121561196957600080fd5b61197284611775565b92506020840135611982816116d1565b929592945050506040919091013590565b6000806000606084860312156119a857600080fd5b8335611929816116d1565b6000806000606084860312156119c857600080fd5b8335611972816116d1565b602081016005831061175657611756611713565b600181811c908216806119fb57607f821691505b60208210811415611a35577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600060208284031215611a4d57600080fd5b8151801515811461088157600080fd5b600060208284031215611a6f57600080fd5b5051919050565b7fffffffff000000000000000000000000000000000000000000000000000000008316815260008251611ab081600485016020870161179f565b919091016004019392505050565b60008251611ad081846020870161179f565b9190910192915050565b600060208284031215611aec57600080fd5b8151610881816116d156fea264697066735822122010fe735ed069aca27931edce4ba2ff14ec7886bf21b0eea685a884f9200fb49e64736f6c634300080a003360c0604052600d60808190526c2bb930b83832b21022ba3432b960991b60a090815261002e916000919061007a565b50604080518082019091526004808252630ae8aa8960e31b602090920191825261005a9160019161007a565b506002805460ff1916601217905534801561007457600080fd5b5061014e565b82805461008690610113565b90600052602060002090601f0160209004810192826100a857600085556100ee565b82601f106100c157805160ff19168380011785556100ee565b828001600101855582156100ee579182015b828111156100ee5782518255916020019190600101906100d3565b506100fa9291506100fe565b5090565b5b808211156100fa57600081556001016100ff565b600181811c9082168061012757607f821691505b6020821081141561014857634e487b7160e01b600052602260045260246000fd5b50919050565b6109548061015d6000396000f3fe6080604052600436106100cb5760003560e01c806340c10f1911610074578063a9059cbb1161004e578063a9059cbb14610225578063d0e30db014610245578063dd62ed3e1461024d57600080fd5b806340c10f19146101c357806370a08231146101e357806395d89b411461021057600080fd5b806323b872dd116100a557806323b872dd146101575780632e1a7d4d14610177578063313ce5671461019757600080fd5b806306fdde03146100df578063095ea7b31461010a57806318160ddd1461013a57600080fd5b366100da576100d8610285565b005b600080fd5b3480156100eb57600080fd5b506100f46102e0565b6040516101019190610703565b60405180910390f35b34801561011657600080fd5b5061012a61012536600461079f565b61036e565b6040519015158152602001610101565b34801561014657600080fd5b50475b604051908152602001610101565b34801561016357600080fd5b5061012a6101723660046107c9565b6103e7565b34801561018357600080fd5b506100d8610192366004610805565b6105fe565b3480156101a357600080fd5b506002546101b19060ff1681565b60405160ff9091168152602001610101565b3480156101cf57600080fd5b506100d86101de36600461079f565b6106a4565b3480156101ef57600080fd5b506101496101fe36600461081e565b60036020526000908152604090205481565b34801561021c57600080fd5b506100f46106e2565b34801561023157600080fd5b5061012a61024036600461079f565b6106ef565b6100d8610285565b34801561025957600080fd5b50610149610268366004610839565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102a490849061089b565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102ed906108b3565b80601f0160208091040260200160405190810160405280929190818152602001828054610319906108b3565b80156103665780601f1061033b57610100808354040283529160200191610366565b820191906000526020600020905b81548152906001019060200180831161034957829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103d69086815260200190565b60405180910390a350600192915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561041957600080fd5b73ffffffffffffffffffffffffffffffffffffffff8416331480159061048f575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105175773ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020548211156104d157600080fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915281208054849290610511908490610907565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061054c908490610907565b909155505073ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260408120805484929061058690849061089b565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516105ec91815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561061a57600080fd5b3360009081526003602052604081208054839290610639908490610907565b9091555050604051339082156108fc029083906000818181858888f1935050505015801561066b573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260036020526040812080548392906106d990849061089b565b90915550505050565b600180546102ed906108b3565b60006106fc3384846103e7565b9392505050565b600060208083528351808285015260005b8181101561073057858101830151858201604001528201610714565b81811115610742576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461079a57600080fd5b919050565b600080604083850312156107b257600080fd5b6107bb83610776565b946020939093013593505050565b6000806000606084860312156107de57600080fd5b6107e784610776565b92506107f560208501610776565b9150604084013590509250925092565b60006020828403121561081757600080fd5b5035919050565b60006020828403121561083057600080fd5b6106fc82610776565b6000806040838503121561084c57600080fd5b61085583610776565b915061086360208401610776565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156108ae576108ae61086c565b500190565b600181811c908216806108c757607f821691505b60208210811415610901577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000828210156109195761091961086c565b50039056fea26469706673582212206ec943fa4e3b70d8fca6c25b6aa26fa18e8f8952ce3bc4d5afcb443bf3097c0564736f6c634300080a003360806040526000600255600060035534801561001a57600080fd5b506111fa8061002a6000396000f3fe60806040526004361061016e5760003560e01c80637a28fb88116100cb578063bdd17e1c1161007f578063dd62ed3e11610059578063dd62ed3e146103ee578063ee7a7c0414610441578063f5eb42dc1461046157600080fd5b8063bdd17e1c146103ad578063cdb9a21c146103c3578063d5002f2e146103d957600080fd5b8063a1903eab116100b0578063a1903eab1461035a578063a457c2d71461036d578063a9059cbb1461038d57600080fd5b80637a28fb88146102f457806395d89b411461031457600080fd5b806323b872dd1161012257806337cfdaca1161010757806337cfdaca1461020d57806339509351146102b457806370a08231146102d457600080fd5b806323b872dd14610278578063313ce5671461029857600080fd5b806318160ddd1161015357806318160ddd1461020d578063192084511461023057806322301f6e1461025057600080fd5b806306fdde0314610185578063095ea7b3146101dd57600080fd5b366101805761017d6000610481565b50005b600080fd5b34801561019157600080fd5b5060408051808201909152601781527f4c6971756964207374616b656420457468657220322e3000000000000000000060208201525b6040516101d49190610f63565b60405180910390f35b3480156101e957600080fd5b506101fd6101f8366004610fff565b610545565b60405190151581526020016101d4565b34801561021957600080fd5b5061022261055b565b6040519081526020016101d4565b34801561023c57600080fd5b5061022261024b366004611029565b61056b565b34801561025c57600080fd5b5061027661026b366004611042565b600391909155600255565b005b34801561028457600080fd5b506101fd610293366004611064565b6105ab565b3480156102a457600080fd5b50604051601281526020016101d4565b3480156102c057600080fd5b506101fd6102cf366004610fff565b610696565b3480156102e057600080fd5b506102226102ef3660046110a0565b6106d9565b34801561030057600080fd5b5061022261030f366004611029565b61070e565b34801561032057600080fd5b5060408051808201909152600581527f737445544800000000000000000000000000000000000000000000000000000060208201526101c7565b6102226103683660046110a0565b61073a565b34801561037957600080fd5b506101fd610388366004610fff565b610745565b34801561039957600080fd5b506101fd6103a8366004610fff565b6107f9565b3480156103b957600080fd5b5061022260035481565b3480156103cf57600080fd5b5061022260025481565b3480156103e557600080fd5b50610222610806565b3480156103fa57600080fd5b506102226104093660046110bb565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b34801561044d57600080fd5b5061027661045c366004610fff565b610811565b34801561046d57600080fd5b5061022261047c3660046110a0565b61081f565b60003334806104f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f5a45524f5f4445504f534954000000000000000000000000000000000000000060448201526064015b60405180910390fd5b60006104fc8261056b565b9050806105065750805b8160036000828254610518919061111d565b909155506105289050838261084a565b61053383838761093b565b61053d8382610992565b949350505050565b60006105523384846109ea565b50600192915050565b600061056660035490565b905090565b60008061057760035490565b9050806105875750600092915050565b6105a48161059e61059760025490565b8690610b52565b90610b5e565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001602090815260408083203384529091528120548281101561066c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f5452414e534645525f414d4f554e545f455843454544535f414c4c4f57414e4360448201527f450000000000000000000000000000000000000000000000000000000000000060648201526084016104e8565b610677858585610b6a565b61068b85336106868487610bef565b6109ea565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916105529185906106869086610bfb565b73ffffffffffffffffffffffffffffffffffffffff81166000908152602081905260408120546107089061070e565b92915050565b60008061071a60025490565b90508061072a5750600092915050565b6105a48161059e61059760035490565b600061070882610481565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156107e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4445435245415345445f414c4c4f57414e43455f42454c4f575f5a45524f000060448201526064016104e8565b6107ef33856106868487610bef565b5060019392505050565b6000610552338484610b6a565b600061056660025490565b61081b8282610c07565b5050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040812054610708565b73ffffffffffffffffffffffffffffffffffffffff82166108c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4d494e545f544f5f5448455f5a45524f5f41444452455353000000000000000060448201526064016104e8565b80600260008282546108d9919061111d565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205461090e9082610bfb565b73ffffffffffffffffffffffffffffffffffffffff90921660009081526020819052604090209190915550565b6040805183815273ffffffffffffffffffffffffffffffffffffffff83811660208301528516917fed8dd430b1e4bba98e943dc5b157cf7b54d9e12916d6c474ff5733a95001d03b910160405180910390a2505050565b73ffffffffffffffffffffffffffffffffffffffff821660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6109d58461070e565b60405190815260200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff8316610a67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f415050524f56455f46524f4d5f5a45524f5f414444524553530000000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff8216610ae4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f415050524f56455f544f5f5a45524f5f4144445245535300000000000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006105a48284611135565b60006105a48284611172565b6000610b758261056b565b9050610b82848483610d64565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610be191815260200190565b60405180910390a350505050565b60006105a482846111ad565b60006105a4828461111d565b73ffffffffffffffffffffffffffffffffffffffff8216610c84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4255524e5f46524f4d5f5448455f5a45524f5f4144445245535300000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205480821115610d14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4255524e5f414d4f554e545f455843454544535f42414c414e4345000000000060448201526064016104e8565b8160026000828254610d2691906111ad565b90915550610d3690508183610bef565b73ffffffffffffffffffffffffffffffffffffffff9093166000908152602081905260409020929092555050565b73ffffffffffffffffffffffffffffffffffffffff8316610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f5452414e534645525f46524f4d5f5448455f5a45524f5f41444452455353000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff8216610e5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f5452414e534645525f544f5f5448455f5a45524f5f414444524553530000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205480821115610eee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5452414e534645525f414d4f554e545f455843454544535f42414c414e43450060448201526064016104e8565b610ef88183610bef565b73ffffffffffffffffffffffffffffffffffffffff8086166000908152602081905260408082209390935590851681522054610f349083610bfb565b73ffffffffffffffffffffffffffffffffffffffff909316600090815260208190526040902092909255505050565b600060208083528351808285015260005b81811015610f9057858101830151858201604001528201610f74565b81811115610fa2576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ffa57600080fd5b919050565b6000806040838503121561101257600080fd5b61101b83610fd6565b946020939093013593505050565b60006020828403121561103b57600080fd5b5035919050565b6000806040838503121561105557600080fd5b50508035926020909101359150565b60008060006060848603121561107957600080fd5b61108284610fd6565b925061109060208501610fd6565b9150604084013590509250925092565b6000602082840312156110b257600080fd5b6105a482610fd6565b600080604083850312156110ce57600080fd5b6110d783610fd6565b91506110e560208401610fd6565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611130576111306110ee565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561116d5761116d6110ee565b500290565b6000826111a8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000828210156111bf576111bf6110ee565b50039056fea2646970667358221220a5b4f31162ba2b8b3424cef84b31ef91d05a825243602b5fdf758ffb49b8246364736f6c634300080a003360a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a003360c06040523480156200001157600080fd5b506040516200170938038062001709833981016040819052620000349162000266565b8351849084906200004d906003906020850190620000f3565b50805162000063906004906020840190620000f3565b505050620000806200007a6200009d60201b60201c565b620000a1565b60ff9091166080526001600160a01b031660a05250620003479050565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b82805462000101906200030a565b90600052602060002090601f01602090048101928262000125576000855562000170565b82601f106200014057805160ff191683800117855562000170565b8280016001018555821562000170579182015b828111156200017057825182559160200191906001019062000153565b506200017e92915062000182565b5090565b5b808211156200017e576000815560010162000183565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c157600080fd5b81516001600160401b0380821115620001de57620001de62000199565b604051601f8301601f19908116603f0116810190828211818310171562000209576200020962000199565b816040528381526020925086838588010111156200022657600080fd5b600091505b838210156200024a57858201830151818301840152908201906200022b565b838211156200025c5760008385830101525b9695505050505050565b600080600080608085870312156200027d57600080fd5b84516001600160401b03808211156200029557600080fd5b620002a388838901620001af565b95506020870151915080821115620002ba57600080fd5b50620002c987828801620001af565b935050604085015160ff81168114620002e157600080fd5b60608601519092506001600160a01b0381168114620002ff57600080fd5b939692955090935050565b600181811c908216806200031f57607f821691505b602082108114156200034157634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05161138e6200037b600039600081816101f70152818161041f0152610600015260006101a2015261138e6000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80636f307dc3116100b257806395d89b4111610081578063a9059cbb11610066578063a9059cbb146102b5578063dd62ed3e146102c8578063f2fde38b1461030e57600080fd5b806395d89b411461029a578063a457c2d7146102a257600080fd5b80636f307dc3146101f257806370a082311461023e578063715018a6146102745780638da5cb5b1461027c57600080fd5b806323b872dd116100ee57806323b872dd14610188578063313ce5671461019b57806339509351146101cc57806340c10f19146101df57600080fd5b806306fdde0314610120578063095ea7b31461013e57806318160ddd146101615780631e9a695014610173575b600080fd5b610128610321565b604051610135919061112d565b60405180910390f35b61015161014c3660046111c9565b6103b3565b6040519015158152602001610135565b6002545b604051908152602001610135565b6101866101813660046111c9565b6103c9565b005b6101516101963660046111f3565b610491565b60405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610135565b6101516101da3660046111c9565b61057c565b6101866101ed3660046111c9565b6105c5565b6102197f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b61016561024c36600461122f565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610186610691565b60055473ffffffffffffffffffffffffffffffffffffffff16610219565b61012861071e565b6101516102b03660046111c9565b61072d565b6101516102c33660046111c9565b610805565b6101656102d6366004611251565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b61018661031c36600461122f565b610812565b60606003805461033090611284565b80601f016020809104026020016040519081016040528092919081815260200182805461035c90611284565b80156103a95780601f1061037e576101008083540402835291602001916103a9565b820191906000526020600020905b81548152906001019060200180831161038c57829003601f168201915b5050505050905090565b60006103c0338484610942565b50600192915050565b6103d33382610af5565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015610468573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048c91906112d8565b505050565b600061049e848484610ce2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6105718533858403610942565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916103c09185906105c0908690611329565b610942565b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906323b872dd906064016020604051808303816000875af115801561065e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068291906112d8565b5061068d8282610f96565b5050565b60055473ffffffffffffffffffffffffffffffffffffffff163314610712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161055b565b61071c60006110b6565b565b60606004805461033090611284565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156107ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161055b565b6107fb3385858403610942565b5060019392505050565b60006103c0338484610ce2565b60055473ffffffffffffffffffffffffffffffffffffffff163314610893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161055b565b73ffffffffffffffffffffffffffffffffffffffff8116610936576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161055b565b61093f816110b6565b50565b73ffffffffffffffffffffffffffffffffffffffff83166109e4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff8216610a87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8216610b98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015610c4e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290610c8a908490611341565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff8216610e28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610ede576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610f22908490611329565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f8891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161055b565b80600260008282546110259190611329565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152602081905260408120805483929061105f908490611329565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208083528351808285015260005b8181101561115a5785810183015185820160400152820161113e565b8181111561116c576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146111c457600080fd5b919050565b600080604083850312156111dc57600080fd5b6111e5836111a0565b946020939093013593505050565b60008060006060848603121561120857600080fd5b611211846111a0565b925061121f602085016111a0565b9150604084013590509250925092565b60006020828403121561124157600080fd5b61124a826111a0565b9392505050565b6000806040838503121561126457600080fd5b61126d836111a0565b915061127b602084016111a0565b90509250929050565b600181811c9082168061129857607f821691505b602082108114156112d2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156112ea57600080fd5b8151801515811461124a57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561133c5761133c6112fa565b500190565b600082821015611353576113536112fa565b50039056fea26469706673582212203a6db30cd3c097921df4156794aa7973eb848711deeb2cffd7c54a9df1fdb0a564736f6c634300080a003360a060405234801561001057600080fd5b506040516106ca3803806106ca83398101604081905261002f9161006c565b60009190915560ff166080526001805460506001600160501b031991821681179092556004805490911690911790554260028190556003556100a2565b6000806040838503121561007f57600080fd5b82519150602083015160ff8116811461009757600080fd5b809150509250929050565b60805161060e6100bc600039600060d3015261060e6000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80639a6fc8f511610081578063d62ada111161005b578063d62ada11146102dc578063f7a30806146102f4578063feaf968c1461030757600080fd5b80639a6fc8f5146101cd578063bd18ad531461023a578063cd653afc1461024d57600080fd5b806354fd4d50116100b257806354fd4d501461012d57806367e8d83d1461013c5780637284e4161461018e57600080fd5b8063313ce567146100ce5780633fd0875f1461010c575b600080fd5b6100f57f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020015b60405180910390f35b6004546a0100000000000000000000900460ff166040516101039190610441565b60405160018152602001610103565b61018c61014a366004610482565b600480549115156c01000000000000000000000000027fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff909216919091179055565b005b604080518082018252600c81527f7072696365206f7261636c6500000000000000000000000000000000000000006020820152905161010391906104ab565b6102036101db36600461053d565b60015460005460025460035460045469ffffffffffffffffffff948516941691939590929450565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610103565b61018c610248366004610558565b61030f565b61018c61025b366004610579565b6001805469ffffffffffffffffffff9586167fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090911617905560029290925560035560048054919092167fffffffffffffffffffffffffffffffffffffffff00ff00000000000000000000909116176b020000000000000000000000179055565b6102e461035f565b6040519015158152602001610103565b61018c6103023660046105bf565b600055565b610203610385565b600480548291907fffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff166b01000000000000000000000083600281111561035757610357610412565b021790555050565b600454600090610380906b010000000000000000000000900460ff166103d6565b905090565b60008060008060006004600c9054906101000a900460ff16156103a757600080fd5b505060015460005460025460035460045469ffffffffffffffffffff9485169893975091955093509190911690565b600060028260028111156103ec576103ec610412565b14156103f757600080fd5b600182600281111561040b5761040b610412565b1492915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016006831061047c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561049457600080fd5b813580151581146104a457600080fd5b9392505050565b600060208083528351808285015260005b818110156104d8578581018301518582016040015282016104bc565b818111156104ea576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803569ffffffffffffffffffff8116811461053857600080fd5b919050565b60006020828403121561054f57600080fd5b6104a48261051e565b60006020828403121561056a57600080fd5b8135600381106104a457600080fd5b6000806000806080858703121561058f57600080fd5b6105988561051e565b935060208501359250604085013591506105b46060860161051e565b905092959194509250565b6000602082840312156105d157600080fd5b503591905056fea264697066735822122014874f7a973b86501c4c1a8be32490fe902c8f088ee234d25f9b2497e19f9e5264736f6c634300080a003360806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d00011790553480156200003a57600080fd5b5060405162031ed638038062031ed68339810160408190526200005d91620015e8565b81816040516200006d9062001595565b604051809103906000f0801580156200008a573d6000803e3d6000fd5b5050600180546001600160a01b0319166001600160a01b038416908117909155604080516325abd85f60e11b81529051634b57b0be916004808201926020929091908290030181865afa158015620000e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200010c91906200162a565b73c4375b7de8af5a38a93548eb8453a498222c4ff26040516200012f90620015a3565b6001600160a01b03928316815291166020820152604001604051809103906000f08015801562000163573d6000803e3d6000fd5b50600380546001600160a01b0319166001600160a01b039290921691821790556040805163de28735960e01b8152905163de287359916004808201926020929091908290030181865afa158015620001bf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e591906200162a565b604051634910832f60e01b81527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526001600160a01b039190911690634910832f90602401600060405180830381600087803b1580156200023d57600080fd5b505af115801562000252573d6000803e3d6000fd5b50505050600360009054906101000a90046001600160a01b03166001600160a01b031663de2873596040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d091906200162a565b60035460405163f2fde38b60e01b81526001600160a01b03918216600482015291169063f2fde38b90602401600060405180830381600087803b1580156200031757600080fd5b505af11580156200032c573d6000803e3d6000fd5b505060035460015460408051636ca42ae360e01b815290516001600160a01b039384169550638874ff1f94509190921691636ca42ae39160048083019260009291908290030181865afa15801562000388573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620003b29190810190620016c5565b6040518263ffffffff1660e01b8152600401620003d09190620017b6565b600060405180830381600087803b158015620003eb57600080fd5b505af115801562000400573d6000803e3d6000fd5b50505050600360009054906101000a90046001600160a01b03166001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000458573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200047e91906200162a565b600280546001600160a01b0319166001600160a01b039290921691821790556040805163120d150d60e31b81529051639068a868916004808201926020929091908290030181865afa158015620004d9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004ff91906200162a565b600480546001600160a01b0319166001600160a01b0392831617815560025460408051631f94a27560e31b81529051919093169263fca513a892818101926020929091908290030181865afa1580156200055d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200058391906200162a565b600880546001600160a01b0319166001600160a01b0392831617905560025460408051630873769560e01b81529051919092169163087376959160048083019260209291908290030181865afa158015620005e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200060891906200162a565b600780546001600160a01b0319166001600160a01b039283161790556002546040805163c513c9bb60e01b81529051919092169163c513c9bb9160048083019260209291908290030181865afa15801562000667573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200068d91906200162a565b600680546001600160a01b0319166001600160a01b039283161790556001546040516367b4264560e01b81529116906367b4264590620006d29084906004016200184d565b602060405180830381865afa158015620006f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200071691906200162a565b600980546001600160a01b0319166001600160a01b0392831617905560035460408051630a55006360e21b815290519190921691632954018c9160048083019260209291908290030181865afa15801562000775573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200079b91906200162a565b6009546040516001600160a01b0390911690620007b890620015b2565b6001600160a01b03928316815291166020820152604001604051809103906000f080158015620007ec573d6000803e3d6000fd5b50600580546001600160a01b0319166001600160a01b039283169081179091556001549091169063eebab8ef90839062000825620011ec565b6200083290600a62001879565b6040518463ffffffff1660e01b815260040162000852939291906200189b565b600060405180830381600087803b1580156200086d57600080fd5b505af115801562000882573d6000803e3d6000fd5b505060065460055460405163d914cd4b60e01b81526001600160a01b0391821660048201529116925063d914cd4b9150602401600060405180830381600087803b158015620008d057600080fd5b505af1158015620008e5573d6000803e3d6000fd5b5050600f80546001600160801b031916670de0b6b3a76400001790555062000911925050620011ec9050565b6200091e90600a62001879565b600f80546001600160801b03908116600160801b9382168402818117938490556040805160a0810182529184169092178152939092041660208301526000919081016200096b84620012ab565b815260006020820181905260409182018190526005549151929350916001600160a01b039091169083908390620009a290620015c0565b620009b093929190620018c5565b604051809103906000f080158015620009cd573d6000803e3d6000fd5b509050806001600160a01b031663c12c21c06040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a0f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a3591906200162a565b600b60006101000a8154816001600160a01b0302191690836001600160a01b03160217905550806001600160a01b0316632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a9a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ac091906200162a565b600c60006101000a8154816001600160a01b0302191690836001600160a01b03160217905550806001600160a01b031663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000b25573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b4b91906200162a565b600d80546001600160a01b0319166001600160a01b03928316179055600654600b5460405163e26b2f6360e01b8152908316600482015291169063e26b2f6390602401600060405180830381600087803b15801562000ba957600080fd5b505af115801562000bbe573d6000803e3d6000fd5b5050600054600554604080516318caf8e360e31b81526001600160a01b039283166004808301919091526024820192909252604481019190915263141bdbdb60e21b60648201526201000090920416925063c657c7189150608401600060405180830381600087803b15801562000c3457600080fd5b505af115801562000c49573d6000803e3d6000fd5b5050600054600c8054604080516318caf8e360e31b81526001600160a01b039283166004820152602481019190915260448101929092526b43726564697446616361646560a01b606483015262010000909204909116925063c657c7189150608401600060405180830381600087803b15801562000cc657600080fd5b505af115801562000cdb573d6000803e3d6000fd5b5050600054600b54604080516318caf8e360e31b81526001600160a01b0392831660048201526024810191909152600d60448201526c21b932b234ba26b0b730b3b2b960991b60648201526201000090920416925063c657c7189150608401600060405180830381600087803b15801562000d5557600080fd5b505af115801562000d6a573d6000803e3d6000fd5b5050600054600d54604080516318caf8e360e31b81526001600160a01b0392831660048201526024810191909152601260448201527121b932b234ba21b7b73334b3bab930ba37b960711b60648201526201000090920416925063c657c7189150608401600060405180830381600087803b15801562000de957600080fd5b505af115801562000dfe573d6000803e3d6000fd5b50506001546001600160a01b0316915063eebab8ef90508473f39fd6e51aad88f6f4ce6ab8827279cfffb9226662000e35620011ec565b6040518463ffffffff1660e01b815260040162000e55939291906200189b565b600060405180830381600087803b15801562000e7057600080fd5b505af115801562000e85573d6000803e3d6000fd5b50506001546001600160a01b0316915063eebab8ef9050847390f79bf6eb2c4f870365e785982e1f101e93b90662000ebc620011ec565b6040518463ffffffff1660e01b815260040162000edc939291906200189b565b600060405180830381600087803b15801562000ef757600080fd5b505af115801562000f0c573d6000803e3d6000fd5b505060005460405163ca669fa760e01b815273f39fd6e51aad88f6f4ce6ab8827279cfffb922666004820152620100009091046001600160a01b0316925063ca669fa79150602401600060405180830381600087803b15801562000f6f57600080fd5b505af115801562000f84573d6000803e3d6000fd5b5050600954600b5460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529116925063095ea7b391506044016020604051808303816000875af115801562000fdf573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001005919062001989565b5060005460405163ca669fa760e01b81527390f79bf6eb2c4f870365e785982e1f101e93b9066004820152620100009091046001600160a01b03169063ca669fa790602401600060405180830381600087803b1580156200106557600080fd5b505af11580156200107a573d6000803e3d6000fd5b5050600954600b5460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529116925063095ea7b391506044016020604051808303816000875af1158015620010d5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010fb919062001989565b5060025460405163f2fde38b60e01b81527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526001600160a01b039091169063f2fde38b90602401600060405180830381600087803b1580156200115657600080fd5b505af11580156200116b573d6000803e3d6000fd5b505060075460405163f2fde38b60e01b81527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b158015620011c957600080fd5b505af1158015620011de573d6000803e3d6000fd5b5050505050505050620019e1565b600180546040516367b4264560e01b81526000926001600160a01b03909216916367b42645916200122191906004016200184d565b602060405180830381865afa1580156200123f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200126591906200162a565b6009546001600160a01b03908116911614620012955762001290670de0b6b3a764000060c862001879565b905090565b62001290670de0b6b3a7640000614e2062001879565b6040805160c08101825260026080820190815261232860a08301528152815180830183526005815261226060208281019190915282015281518083018352606092600092919082019080600387600a8111156200130c576200130c62001814565b146200131a5760036200131d565b60015b600a81111562001331576200133162001814565b815261206c6020918201529082526040805180820190915260048152611c84818301529101529050612454600a6000858281111562001374576200137462001814565b600a81111562001388576200138862001814565b815260208101919091526040908101600020805461ffff9390931661ffff19909316929092179091558051600480825260a0820190925281816020015b6040805180820190915260008082526020820152815260200190600190039081620013c557905050925060005b818110156200158d57828160048110620014105762001410620019ad565b602002015160200151600a6000858460048110620014325762001432620019ad565b602002015151600a8111156200144c576200144c62001814565b600a81111562001460576200146062001814565b815260208101919091526040908101600020805461ffff191661ffff9390931692909217909155805180820190915260015481906001600160a01b03166367b42645868560048110620014b757620014b7620019ad565b6020020151516040516001600160e01b031960e084901b168152620014e091906004016200184d565b602060405180830381865afa158015620014fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200152491906200162a565b6001600160a01b03168152602001848360048110620015475762001547620019ad565b60200201516020015161ffff168152508482815181106200156c576200156c620019ad565b602002602001018190525080806200158490620019c3565b915050620013f2565b505050919050565b6105e6806200bc5283390190565b62011105806200c23883390190565b6110a7806201d33d83390190565b62013af2806201e3e483390190565b6001600160a01b0381168114620015e557600080fd5b50565b60008060408385031215620015fc57600080fd5b82516200160981620015cf565b6020840151909250600b81106200161f57600080fd5b809150509250929050565b6000602082840312156200163d57600080fd5b81516200164a81620015cf565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156200168c576200168c62001651565b60405290565b604051601f8201601f191681016001600160401b0381118282101715620016bd57620016bd62001651565b604052919050565b60006020808385031215620016d957600080fd5b82516001600160401b0380821115620016f157600080fd5b818501915085601f8301126200170657600080fd5b8151818111156200171b576200171b62001651565b6200172b848260051b0162001692565b818152848101925060069190911b8301840190878211156200174c57600080fd5b928401925b81841015620017ab57604084890312156200176c5760008081fd5b6200177662001667565b84516200178381620015cf565b8152848601516200179481620015cf565b818701528352604093909301929184019162001751565b979650505050505050565b602080825282518282018190526000919060409081850190868401855b828110156200180757815180516001600160a01b0390811686529087015116868501529284019290850190600101620017d3565b5091979650505050505050565b634e487b7160e01b600052602160045260246000fd5b600b81106200184957634e487b7160e01b600052602160045260246000fd5b9052565b602081016200185d82846200182a565b92915050565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161562001896576200189662001863565b500290565b60608101620018ab82866200182a565b6001600160a01b0393909316602082015260400152919050565b6001600160a01b0384811682526060602080840182905285516001600160801b039081169285019290925285810151909116608084015260408086015160a085810152805161010086018190526000949392918301919085906101208801905b808310156200195657845180518816835286015161ffff168683015293850193600192909201919083019062001925565b5060608a01516001600160a01b031660c0890152608090990151151560e088015250909401949094525092949350505050565b6000602082840312156200199c57600080fd5b815180151581146200164a57600080fd5b634e487b7160e01b600052603260045260246000fd5b6000600019821415620019da57620019da62001863565b5060010190565b61a26180620019f16000396000f3fe60806040523480156200001157600080fd5b5060043610620001ad5760003560e01c806362eb33e311620000f5578063ba414fa61162000097578063de287359116200006e578063de2873591462000479578063f9aa028a146200049a578063fa7626d414620004bb57600080fd5b8063ba414fa6146200041c578063c12c21c01462000437578063d46b9330146200045857600080fd5b80637785ff5d11620000cc5780637785ff5d14620003da5780639408b63f14620003e45780639dd55b45146200040557600080fd5b806362eb33e314620003775780636b70b04c14620003985780636f307dc314620003b957600080fd5b80632f7a1881116200015f5780635e813a8b11620001365780635e813a8b146200030c5780635f7c9bd0146200032d57806362186905146200034657600080fd5b80632f7a188114620002be578063406c8e2f14620002df57806354cae56e146200030057600080fd5b80630e42bc5d11620001945780630e42bc5d14620002305780632630c12f14620002565780632954018c146200029d57600080fd5b80630bc772da14620001b25780630c75f80614620001f5575b600080fd5b600f54620001cf906fffffffffffffffffffffffffffffffff1681565b6040516fffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6200021c62000206366004620012dd565b600a6020526000908152604090205461ffff1681565b60405161ffff9091168152602001620001ec565b6200024762000241366004620012dd565b620004c9565b604051620001ec919062001307565b600854620002779073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001620001ec565b600254620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600c54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600154620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200030a6200081f565b005b600454620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200033762000b1a565b604051908152602001620001ec565b600f54620001cf9070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681565b600654620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600554620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600954620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200030a62000c0c565b600e54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200030a6200041636600462001398565b62000fd6565b6200042662001149565b6040519015158152602001620001ec565b600b54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600354620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600754620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600d54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600054620004269060ff1681565b6040805160c08101825260026080820190815261232860a08301528152815180830183526005815261226060208281019190915282015281518083018352606092600092919082019080600387600a8111156200052a576200052a620013c7565b14620005385760036200053b565b60015b600a8111156200054f576200054f620013c7565b815261206c6020918201529082526040805180820190915260048152611c84818301529101529050612454600a60008582811115620005925762000592620013c7565b600a811115620005a657620005a6620013c7565b815260208101919091526040908101600020805461ffff939093167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909316929092179091558051600480825260a0820190925281816020015b60408051808201909152600080825260208201528152602001906001900390816200060057905050925060005b8181101562000817578281600481106200064b576200064b620013f6565b602002015160200151600a60008584600481106200066d576200066d620013f6565b602002015151600a811115620006875762000687620013c7565b600a8111156200069b576200069b620013c7565b81526020810191909152604090810160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff93909316929092179091558051808201909152600154819073ffffffffffffffffffffffffffffffffffffffff166367b426458685600481106200071c576200071c620013f6565b6020020151516040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526200075d919060040162001425565b602060405180830381865afa1580156200077b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007a1919062001467565b73ffffffffffffffffffffffffffffffffffffffff168152602001848360048110620007d157620007d1620013f6565b60200201516020015161ffff16815250848281518110620007f657620007f6620013f6565b602002602001018190525080806200080e90620014b6565b9150506200062d565b505050919050565b6000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16906306447d5690602401600060405180830381600087803b158015620008a457600080fd5b505af1158015620008b9573d6000803e3d6000fd5b5050600b5460405173ffffffffffffffffffffffffffffffffffffffff909116925060009150600190620008ed90620012b3565b73ffffffffffffffffffffffffffffffffffffffff938416815292909116602083015215156040820152606001604051809103906000f08015801562000937573d6000803e3d6000fd5b50600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316908117909155600d546040517f526a41e80000000000000000000000000000000000000000000000000000000081526004810192909252600160248301529091169063526a41e890604401600060405180830381600087803b158015620009dc57600080fd5b505af1158015620009f1573d6000803e3d6000fd5b5050600d5473ffffffffffffffffffffffffffffffffffffffff16915063eb9606df905062000a22426001620014f2565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815264ffffffffff90911660048201526024015b600060405180830381600087803b15801562000a7b57600080fd5b505af115801562000a90573d6000803e3d6000fd5b50505050600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562000aff57600080fd5b505af115801562000b14573d6000803e3d6000fd5b50505050565b600180546040517f67b4264500000000000000000000000000000000000000000000000000000000815260009273ffffffffffffffffffffffffffffffffffffffff909216916367b426459162000b75919060040162001425565b602060405180830381865afa15801562000b93573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000bb9919062001467565b60095473ffffffffffffffffffffffffffffffffffffffff90811691161462000bf65762000bf1670de0b6b3a764000060c86200150d565b905090565b62000bf1670de0b6b3a7640000614e206200150d565b60025460405173ffffffffffffffffffffffffffffffffffffffff9091169062000c3690620012c1565b73ffffffffffffffffffffffffffffffffffffffff90911681526060602082018190526008908201527f446567656e4e4654000000000000000000000000000000000000000000000000608082015260a060408201819052600a908201527f476561722d446567656e0000000000000000000000000000000000000000000060c082015260e001604051809103906000f08015801562000cda573d6000803e3d6000fd5b50600e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283161790556000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015262010000909104909116906306447d5690602401600060405180830381600087803b15801562000d8e57600080fd5b505af115801562000da3573d6000803e3d6000fd5b5050600e546040517ffca3b5aa0000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff909116925063fca3b5aa9150602401600060405180830381600087803b15801562000e2757600080fd5b505af115801562000e3c573d6000803e3d6000fd5b5050600b54600e5460405173ffffffffffffffffffffffffffffffffffffffff92831694509116915060009062000e7390620012b3565b73ffffffffffffffffffffffffffffffffffffffff938416815292909116602083015215156040820152606001604051809103906000f08015801562000ebd573d6000803e3d6000fd5b50600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316908117909155600d546040517f526a41e80000000000000000000000000000000000000000000000000000000081526004810192909252600160248301529091169063526a41e890604401600060405180830381600087803b15801562000f6257600080fd5b505af115801562000f77573d6000803e3d6000fd5b5050600e54600c546040517f4610f6ac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015291169250634610f6ac915060240162000a60565b600081600860405162000fe990620012cf565b91825260ff166020820152604001604051809103906000f08015801562001014573d6000803e3d6000fd5b506000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291925062010000900473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b1580156200109c57600080fd5b505af1158015620010b1573d6000803e3d6000fd5b50506008546040517fe8a97a3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528581166024830152909116925063e8a97a3e9150604401600060405180830381600087803b1580156200112b57600080fd5b505af115801562001140573d6000803e3d6000fd5b50505050505050565b60008054610100900460ff16156200116a5750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620012ae5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000008284015282518083038401815260608301909352600092909162001212917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016200158b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526200124c91620015c9565b6000604051808303816000865af19150503d80600081146200128b576040519150601f19603f3d011682016040523d82523d6000602084013e62001290565b606091505b5091505080806020019051810190620012aa9190620015d7565b9150505b919050565b615e9780620015fc83390190565b6126cf806200749383390190565b6106ca8062009b6283390190565b600060208284031215620012f057600080fd5b8135600b81106200130057600080fd5b9392505050565b602080825282518282018190526000919060409081850190868401855b8281101562001365578151805173ffffffffffffffffffffffffffffffffffffffff16855286015161ffff1686850152928401929085019060010162001324565b5091979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff811681146200139557600080fd5b50565b60008060408385031215620013ac57600080fd5b8235620013b98162001372565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60208101600b831062001461577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000602082840312156200147a57600080fd5b8151620013008162001372565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415620014eb57620014eb62001487565b5060010190565b6000821982111562001508576200150862001487565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562001548576200154862001487565b500290565b6000815160005b8181101562001570576020818501810151868301520162001554565b8181111562001580576000828601525b509290920192915050565b7fffffffff00000000000000000000000000000000000000000000000000000000831681526000620015c160048301846200154d565b949350505050565b60006200130082846200154d565b600060208284031215620015ea57600080fd5b815180151581146200130057600080fdfe6101406040523480156200001257600080fd5b5060405162005e9738038062005e97833981016040819052620000359162000198565b60016000556001600160a01b0383166200006257604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038316608081905260408051636f307dc360e01b81529051636f307dc3916004808201926020929091908290030181865afa158015620000ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d39190620001ea565b6001600160a01b031660a0816001600160a01b031681525050826001600160a01b0316634f0e0ef36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200012b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001519190620001ea565b6001600160a01b0390811660c0529190911660e0819052151561010052151561012052506200020f565b80516001600160a01b03811681146200019357600080fd5b919050565b600080600060608486031215620001ae57600080fd5b620001b9846200017b565b9250620001c9602085016200017b565b915060408401518015158114620001df57600080fd5b809150509250925092565b600060208284031215620001fd57600080fd5b62000208826200017b565b9392505050565b60805160a05160c05160e0516101005161012051615a86620004116000396000818161061101528181612fb5015261481f01526000818161031701528181610dde015281816144f901526146e5015260008181610557015281816146a901526147a901526000818161034b0152818161387d015261392d01526000818161047301528181611bfe0152818161274f0152818161280d0152818161366a01526137dd015260008181610665015281816109d801528181610b0301528181610bd501528181610cdd01528181610e6501528181610fe30152818161114e0152818161120e0152818161132e015281816114510152818161162b01528181611708015281816117e0015281816119e501528181611b1201528181611d9501528181611ed5015281816120040152818161216801528181612290015281816123c601528181612568015281816126390152818161266f0152818161293d01528181612a2101528181612a8a01528181612bde01528181612d2601528181612e6801528181612ec2015281816130a10152818161311b015281816131b401528181613341015281816134c10152818161358a0152818161372f01528181613a1a01528181613b2e01528181613dbb015281816142200152818161432801528181614492015281816148e7015281816149e801528181614aae0152614d8f0152615a866000f3fe6080604052600436106102695760003560e01c8063860aefcf11610153578063c7de38a6116100cb578063dfd594651161007f578063eb9606df11610064578063eb9606df1461081e578063f9eaee0d1461083e578063ffd9b9071461085e57600080fd5b8063dfd59465146107de578063e1f21c67146107fe57600080fd5b8063cff0ab96116100b0578063cff0ab96146106ef578063d9ccbec114610783578063dcf65482146107be57600080fd5b8063c7de38a6146106a7578063caa5c23f146106dc57600080fd5b80639c55a05411610122578063b55bb84b11610107578063b55bb84b14610633578063c12c21c014610653578063c690908a1461068757600080fd5b80639c55a054146105df578063b1836d32146105ff57600080fd5b8063860aefcf146104db5780639408b63f146105455780639b67ab30146105795780639be0536a146105bd57600080fd5b80635d91a0e0116101e65780636d19b486116101b55780637071b7c51161019a5780637071b7c51461049557806379c0ef91146104a857806382871ace146104c857600080fd5b80636d19b486146104415780636f307dc31461046157600080fd5b80635d91a0e0146103e85780635f73fbec146103fb578063601d66f61461040e5780636c8f225d1461042e57600080fd5b80633d9287fa1161023d5780635019e20a116102225780635019e20a1461039257806354fd4d50146103b257806359781034146103d557600080fd5b80633d9287fa146103055780634f0e0ef31461033957600080fd5b8062842b571461026e578063256ac915146102905780632a7ba1f7146102c55780632b7c7b11146102e5575b600080fd5b34801561027a57600080fd5b5061028e6102893660046151bf565b61087e565b005b34801561029c57600080fd5b506102b06102ab3660046151f8565b61098e565b60405190151581526020015b60405180910390f35b3480156102d157600080fd5b5061028e6102e0366004615215565b610a61565b3480156102f157600080fd5b5061028e610300366004615215565b610c3b565b34801561031157600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561034557600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102bc565b34801561039e57600080fd5b5061028e6103ad3660046151f8565b610d6a565b3480156103be57600080fd5b506103c7600281565b6040519081526020016102bc565b61028e6103e336600461522e565b61108c565b61028e6103f63660046152bb565b611275565b61028e610409366004615340565b611589565b34801561041a57600080fd5b5061028e6104293660046153d8565b6117de565b61028e61043c36600461541b565b611900565b34801561044d57600080fd5b506102b061045c3660046151f8565b611c31565b34801561046d57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b61028e6104a336600461546e565b611c60565b3480156104b457600080fd5b5061036d6104c3366004615215565b611f3e565b61028e6104d63660046152bb565b611f4b565b3480156104e757600080fd5b5060025461051c906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041682565b604080516fffffffffffffffffffffffffffffffff9384168152929091166020830152016102bc565b34801561055157600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561058557600080fd5b506004546040805167ffffffffffffffff608084901c1681526fffffffffffffffffffffffffffffffff9092166020830152016102bc565b3480156105c957600080fd5b506105d261227d565b6040516102bc91906154e2565b3480156105eb57600080fd5b5061028e6105fa36600461553c565b61228e565b34801561060b57600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561063f57600080fd5b5061028e61064e3660046151f8565b6123c4565b34801561065f57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561069357600080fd5b5061028e6106a23660046151f8565b6124c6565b3480156106b357600080fd5b506106c76106c23660046151f8565b612668565b604080519283526020830191909152016102bc565b61028e6106ea366004615557565b61289b565b3480156106fb57600080fd5b5060015461074e906fffffffffffffffffffffffffffffffff811690700100000000000000000000000000000000810460ff169071010000000000000000000000000000000000900464ffffffffff1683565b604080516fffffffffffffffffffffffffffffffff9094168452911515602084015264ffffffffff16908201526060016102bc565b34801561078f57600080fd5b506102b061079e366004615599565b600360209081526000928352604080842090915290825290205460ff1681565b3480156107ca57600080fd5b5061028e6107d93660046151f8565b612a88565b3480156107ea57600080fd5b506103c76107f93660046151f8565b612b86565b34801561080a57600080fd5b5061028e61081936600461522e565b612c6d565b34801561082a57600080fd5b5061028e6108393660046155c7565b612ec0565b34801561084a57600080fd5b506102b06108593660046151f8565b613057565b34801561086a57600080fd5b5061028e6108793660046155ee565b6131b2565b600260005414156108f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b6002600090815573ffffffffffffffffffffffffffffffffffffffff8316808252600360209081526040808420338086529083529381902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081527f9b3258bc4904fd6426b99843e206c6c7cdb1fd0f040121c25b71dafbb3851ee0910160405180910390a350506001600055565b6040517f055ee9b500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063055ee9b590602401602060405180830381865afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a43919061560b565b73ffffffffffffffffffffffffffffffffffffffff16141592915050565b60026000541415610ace576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610b5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b83919061560b565b9050610b903382846132eb565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906395373018906024015b600060405180830381600087803b158015610c1a57600080fd5b505af1158015610c2e573d6000803e3d6000fd5b5050600160005550505050565b60026000541415610ca8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610d39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5d919061560b565b9050610b90338284613411565b60026000541415610dd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000557f000000000000000000000000000000000000000000000000000000000000000015610e34576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610ec1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee5919061560b565b33600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915290205490915060ff16610f52576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f5d82613583565b5090508015610f98576040517ff713841e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b15801561102757600080fd5b505af115801561103b573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692503391507f93c70cc9715bef0d83edf2095f3595402279d274f402a73ffc17f1bcb19d863d90600090a35050600160005550565b600260005414156110f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611106613875565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063e958b70490602401602060405180830381865afa158015611197573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bb919061560b565b90506111c9848285856139b7565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401600060405180830381600087803b15801561125257600080fd5b505af1158015611266573d6000803e3d6000fd5b50506001600055505050505050565b600260005414156112e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611375573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611399919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166113e8576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806113f483613583565b915091508161142f576040517f1fdd676f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611437613875565b831561144d5761144d85858b8660016000613ae3565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632362a2d88b600185338e8e8e6040518863ffffffff1660e01b81526004016114b59796959493929190615663565b6020604051808303816000875af11580156114d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f891906156bf565b90508873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f7dfecd8419723a9d3954585a30c2a270165d70aafa146c11c1e1b88ae14390648460405161157091815260200190565b60405180910390a4505060016000555050505050505050565b600260005414156115f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ab919061560b565b90506116b5613875565b81156116cb576116cb8383338460016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d89061174a903390600090819083908d908d908d90600401615663565b6020604051808303816000875af1158015611769573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178d91906156bf565b5060405173ffffffffffffffffffffffffffffffffffffffff87169033907f460ad03b1cf79b1d64d3aefa28475f110ab66e84649c52bb41ed796b9b39198190600090a35050600160005550505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611849573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118d1576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff90811670010000000000000000000000000000000002911617600255565b6002600054141561196d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000908155606461198461ffff851687615707565b61198e9190615744565b9050611999816144f7565b6119a2816145e8565b6119ab84614668565b6119b3613875565b6040517f172c48c7000000000000000000000000000000000000000000000000000000008152600060048201819052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a64919061577f565b61ffff169150611a789050816127106157ae565b611a829083615707565b611a8c8288615707565b11611ac3576040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff86811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611b5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b81919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638587604051611bef92919091825261ffff16602082015260400190565b60405180910390a3611c2386827f00000000000000000000000000000000000000000000000000000000000000008a6139b7565b505060016000555050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526006602052604081205415155b92915050565b60026000541415611ccd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611cdb856144f7565b611ce484614668565b611ced856145e8565b600154700100000000000000000000000000000000900460ff1615611d3e576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d46613875565b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff85811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611de0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e04919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638885604051611e7292919091825261ffff16602082015260400190565b60405180910390a38215611e9057611e908484878460006001613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015611f1957600080fd5b505af1158015611f2d573d6000803e3d6000fd5b505060016000555050505050505050565b6000611c5a60058361480f565b60026000541415611fb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa15801561204b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206f919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166120be576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120c661481b565b6120fc576040517f7e52ccb400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061210782612668565b509050612112613875565b82156121285761212884848a8560016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d8906121aa908c90600290879033908f908f908f90600401615663565b6020604051808303816000875af11580156121c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ed91906156bf565b90508773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167ffada13ff2d5e1a1d9da37ad4a4130893b34e3c69c32b17f87ec31fd661b867078460405161226591815260200190565b60405180910390a45050600160005550505050505050565b6060612289600561486b565b905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612381576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561242f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612453919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146124b7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614878565b5050565b60026000541415612533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156125c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e8919061560b565b90506125f4818361489a565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401610c00565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126fc919061560b565b905060008061270b8387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156127a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127c991906156bf565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015291965061271091851690637afb010490604401602060405180830381865afa158015612863573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061288791906156bf565b6128919190615744565b9350505050915091565b60026000541415612908576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129bd919061560b565b90506129c7613875565b8115612a7e576129dc83833384600080613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015612a6557600080fd5b505af1158015612a79573d6000803e3d6000fd5b505050505b5050600160005550565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612af3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b17919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b7b576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614c92565b600080612b9283612668565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152919350600092507f000000000000000000000000000000000000000000000000000000000000000090911690633192195c906024016040805180830381865afa158015612c26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4a91906157c5565b9150819050612c5b61271084615707565b612c659190615744565b949350505050565b60026000541415612cda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063fdd5764590602401602060405180830381865afa158015612d6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d91919061560b565b73ffffffffffffffffffffffffffffffffffffffff161480612dd7575073ffffffffffffffffffffffffffffffffffffffff831660009081526006602052604090205415155b15612e0e576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612eac57600080fd5b505af1158015611c23573d6000803e3d6000fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f4f919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612fb3576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000061300a576040517f50dd11fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805464ffffffffff90921671010000000000000000000000000000000000027fffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffffff909216919091179055565b6040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063f67c5bd090602401602060405180830381865afa1580156130e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061310c91906156bf565b905080158015906131ab5750807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015613184573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a891906156bf565b16155b9392505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561321d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613241919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146132a5576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018054911515700100000000000000000000000000000000027fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff909216919091179055565b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600060448301819052917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561338c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133b091906156bf565b90506133bb816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f98274bf834d179ee08dc0604071b0dc90b54731bd5f725a5a96a39a86bce025a8360405161340391815260200190565b60405180910390a250505050565b61341a816144f7565b600154700100000000000000000000000000000000900460ff161561346b576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600160448301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561350c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061353091906156bf565b905061353b816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f9cac51154cc0d835e2f9c9d1f59a9344588cee107f4203bf58a8c797e3a58c458360405161340391815260200190565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613617919061560b565b90506000806136268387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156136c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136e491906156bf565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529195506000917f00000000000000000000000000000000000000000000000000000000000000001690633192195c906024016040805180830381865afa158015613775573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061379991906157c5565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350600092506127109187169063f9a6503090604401602060405180830381865afa158015613837573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061385b91906156bf565b6138659190615707565b9092109794965093945050505050565b34156139b5577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156138e357600080fd5b505af11580156138f7573d6000803e3d6000fd5b50506040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201523460248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16935063a9059cbb925060440190506020604051808303816000875af115801561398f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139b391906157e9565b505b565b6139c084614cb4565b6040517f830aa74500000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f0000000000000000000000000000000000000000000000000000000000000000169063830aa74590608401600060405180830381600087803b158015613a5e57600080fd5b505af1158015613a72573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fa32435755c235de2976ed44a75a2f85cb01faf0c894f639fe0c32bb9455fea8f83604051613ad591815260200190565b60405180910390a350505050565b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301523060248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b158015613b7257600080fd5b505af1158015613b86573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff871692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a28460005b8181101561441d5736888883818110613bea57613bea615806565b9050602002810190613bfc9190615835565b90506004613c0d6020830183615873565b90501015613c47576040517fe2b0e50600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b30613c5560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16141561421c578415613ca9576040517f5fb9107f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613cb86020830183615873565b613cc1916158d8565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167f59781034000000000000000000000000000000000000000000000000000000001415613e3c5760008080613d1e6020860186615873565b613d2c916004908290615920565b810190613d39919061522e565b925092509250613e34838c73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614613e2b576040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015613e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e26919061560b565b613e2d565b8b5b84846139b7565b505050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2b7c7b11000000000000000000000000000000000000000000000000000000001415613ec757600194506000613e996020840184615873565b613ea7916004908290615920565b810190613eb49190615215565b9050613ec1898983613411565b50614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2a7ba1f7000000000000000000000000000000000000000000000000000000001415613f80578415613f49576040517fc0b0caa800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613f586020840184615873565b613f66916004908290615920565b810190613f739190615215565b9050613ec18989836132eb565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f233a8caa0000000000000000000000000000000000000000000000000000000014156140e457600080613fda6020850185615873565b613fe8916004908290615920565b810190613ff5919061594a565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c8116600483015292945090925082918416906370a0823190602401602060405180830381865afa158015614069573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061408d91906156bf565b10156140dd576040517fa5ac537300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016108e7565b5050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fc690908a00000000000000000000000000000000000000000000000000000000141561416457600061413d6020840184615873565b61414b916004908290615920565b81019061415891906151f8565b9050613ec1888261489a565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f23e27a640000000000000000000000000000000000000000000000000000000014156141e45760006141bd6020840184615873565b6141cb916004908290615920565b8101906141d891906151f8565b9050613ec18882614d42565b6040517f1e9e7e7a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50614414565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff68754361426760208501856151f8565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156142d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142f4919061560b565b73ffffffffffffffffffffffffffffffffffffffff16148061436d575073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001661435560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16145b156143a4576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6144126143b46020830183615873565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506143f69250505060208401846151f8565b73ffffffffffffffffffffffffffffffffffffffff1690614e39565b505b50600101613bcf565b506040517f60c8e8938c9a0c0d88a98d6f1c562ce68077e12bf3edb8047378f2f736cb45b490600090a16040517fe1998cf900000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff86811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b1580156144d657600080fd5b505af11580156144ea573d6000803e3d6000fd5b5050505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006139b3576001546fffffffffffffffffffffffffffffffff9081169081146124c257600454608081901c906fffffffffffffffffffffffffffffffff16600067ffffffffffffffff8316431461456e578461458a565b61458a6fffffffffffffffffffffffffffffffff831686615976565b9050838111156145c6576040517f675f1a5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff81164360801b176004555050505050565b6002546fffffffffffffffffffffffffffffffff16811080614631575060025470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681115b156139b3576040517fce16799400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61467061481b565b156146a7576040517f63fc31c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1615614806577f0000000000000000000000000000000000000000000000000000000000000000801561472657503373ffffffffffffffffffffffffffffffffffffffff821614155b1561475d576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600160248301527f00000000000000000000000000000000000000000000000000000000000000001690639dc29fac90604401600060405180830381600087803b1580156147ed57600080fd5b505af1158015614801573d6000803e3d6000fd5b505050505b6139b381614cb4565b60006131ab8383614e7b565b60007f0000000000000000000000000000000000000000000000000000000000000000801561228957505060015471010000000000000000000000000000000000900464ffffffffff1642101590565b606060006131ab83614ea5565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f01565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561492b57600080fd5b505af115801561493f573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527fdf498aa1c340e992665d6fb4f3be8436d452c45a630cb6d7fab7963da39bac8793500190505b60405180910390a15050565b6040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600091829160019183917f00000000000000000000000000000000000000000000000000000000000000001690638991b2f190602401602060405180830381865afa158015614a2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a5391906156bf565b90505b808211614c895780821615614c7d576040517fe75538c700000000000000000000000000000000000000000000000000000000815260048101839052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e75538c7906024016040805180830381865afa158015614af4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b18919061577f565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529294509092506000918416906370a0823190602401602060405180830381865afa158015614b8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bb191906156bf565b90506001811115614c79576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff8481166024830152600091908b169063f9a6503090604401602060405180830381865afa158015614c33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c5791906156bf565b978801979050614c6b61ffff841682615707565b614c759088615976565b9650505b5050505b600182901b9150614a56565b50509250929050565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f50565b3373ffffffffffffffffffffffffffffffffffffffff821614801590614d0b575033600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16155b156139b3576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b158015614dd357600080fd5b505af1158015614de7573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527f69db9e9764da61b6681b89fb0f5be018506e0342036e56b59c3015a620d60977935001905061498d565b60606131ab83836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250615043565b6000826000018281548110614e9257614e92615806565b9060005260206000200154905092915050565b606081600001805480602002602001604051908101604052809291908181526020018280548015614ef557602002820191906000526020600020905b815481526020019060010190808311614ee1575b50505050509050919050565b6000818152600183016020526040812054614f4857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611c5a565b506000611c5a565b60008181526001830160205260408120548015615039576000614f746001836157ae565b8554909150600090614f88906001906157ae565b9050818114614fed576000866000018281548110614fa857614fa8615806565b9060005260206000200154905080876000018481548110614fcb57614fcb615806565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080614ffe57614ffe61598e565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611c5a565b6000915050611c5a565b6060612c65848460008585843b6150b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108e7565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516150df91906159ed565b60006040518083038185875af1925050503d806000811461511c576040519150601f19603f3d011682016040523d82523d6000602084013e615121565b606091505b509150915061513182828661513c565b979650505050505050565b6060831561514b5750816131ab565b82511561515b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e791906159ff565b73ffffffffffffffffffffffffffffffffffffffff811681146139b357600080fd5b80151581146139b357600080fd5b600080604083850312156151d257600080fd5b82356151dd8161518f565b915060208301356151ed816151b1565b809150509250929050565b60006020828403121561520a57600080fd5b81356131ab8161518f565b60006020828403121561522757600080fd5b5035919050565b60008060006060848603121561524357600080fd5b833561524e8161518f565b9250602084013561525e8161518f565b929592945050506040919091013590565b60008083601f84011261528157600080fd5b50813567ffffffffffffffff81111561529957600080fd5b6020830191508360208260051b85010111156152b457600080fd5b9250929050565b60008060008060008060a087890312156152d457600080fd5b86356152df8161518f565b955060208701356152ef8161518f565b9450604087013593506060870135615306816151b1565b9250608087013567ffffffffffffffff81111561532257600080fd5b61532e89828a0161526f565b979a9699509497509295939492505050565b60008060008060006080868803121561535857600080fd5b85356153638161518f565b945060208601359350604086013561537a816151b1565b9250606086013567ffffffffffffffff81111561539657600080fd5b6153a28882890161526f565b969995985093965092949392505050565b80356fffffffffffffffffffffffffffffffff811681146153d357600080fd5b919050565b600080604083850312156153eb57600080fd5b6153f4836153b3565b9150615402602084016153b3565b90509250929050565b61ffff811681146139b357600080fd5b6000806000806080858703121561543157600080fd5b8435935060208501356154438161518f565b925060408501356154538161540b565b915060608501356154638161540b565b939692955090935050565b60008060008060006080868803121561548657600080fd5b8535945060208601356154988161518f565b9350604086013567ffffffffffffffff8111156154b457600080fd5b6154c08882890161526f565b90945092505060608601356154d48161540b565b809150509295509295909350565b6020808252825182820181905260009190848201906040850190845b8181101561553057835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016154fe565b50909695505050505050565b60006020828403121561554e57600080fd5b6131ab826153b3565b6000806020838503121561556a57600080fd5b823567ffffffffffffffff81111561558157600080fd5b61558d8582860161526f565b90969095509350505050565b600080604083850312156155ac57600080fd5b82356155b78161518f565b915060208301356151ed8161518f565b6000602082840312156155d957600080fd5b813564ffffffffff811681146131ab57600080fd5b60006020828403121561560057600080fd5b81356131ab816151b1565b60006020828403121561561d57600080fd5b81516131ab8161518f565b6003811061565f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b73ffffffffffffffffffffffffffffffffffffffff888116825260e082019061568f602084018a615628565b6040830197909752948616606082015292909416608083015260a082015291151560c09092019190915292915050565b6000602082840312156156d157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561573f5761573f6156d8565b500290565b60008261577a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000806040838503121561579257600080fd5b825161579d8161518f565b60208401519092506151ed8161540b565b6000828210156157c0576157c06156d8565b500390565b600080604083850312156157d857600080fd5b505080516020909101519092909150565b6000602082840312156157fb57600080fd5b81516131ab816151b1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc183360301811261586957600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126158a857600080fd5b83018035915067ffffffffffffffff8211156158c357600080fd5b6020019150368190038213156152b457600080fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156159185780818660040360031b1b83161692505b505092915050565b6000808585111561593057600080fd5b8386111561593d57600080fd5b5050820193919092039150565b6000806040838503121561595d57600080fd5b82356159688161518f565b946020939093013593505050565b60008219821115615989576159896156d8565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60005b838110156159d85781810151838201526020016159c0565b838111156159e7576000848401525b50505050565b600082516158698184602087016159bd565b6020815260008251806020840152615a1e8160408501602087016159bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea2646970667358221220a3f4a705ab580a6ada1e438cd2ee4abc001b62d1d171fce12c41994900fef21664736f6c634300080a003360c06040523480156200001157600080fd5b50604051620026cf380380620026cf833981016040819052620000349162000324565b82828281600090805190602001906200004f92919062000194565b5080516200006590600190602084019062000194565b50506006805460ff19169055506001600160a01b0381166200009a57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000d9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ff9190620003a1565b6001600160a01b03166080816001600160a01b03168152505050826001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000158573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200017e9190620003a1565b6001600160a01b031660a0525062000403915050565b828054620001a290620003c6565b90600052602060002090601f016020900481019282620001c6576000855562000211565b82601f10620001e157805160ff191683800117855562000211565b8280016001018555821562000211579182015b8281111562000211578251825591602001919060010190620001f4565b506200021f92915062000223565b5090565b5b808211156200021f576000815560010162000224565b80516001600160a01b03811681146200025257600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200027f57600080fd5b81516001600160401b03808211156200029c576200029c62000257565b604051601f8301601f19908116603f01168101908282118183101715620002c757620002c762000257565b81604052838152602092508683858801011115620002e457600080fd5b600091505b83821015620003085785820183015181830184015290820190620002e9565b838211156200031a5760008385830101525b9695505050505050565b6000806000606084860312156200033a57600080fd5b62000345846200023a565b60208501519093506001600160401b03808211156200036357600080fd5b62000371878388016200026d565b935060408601519150808211156200038857600080fd5b5062000397868287016200026d565b9150509250925092565b600060208284031215620003b457600080fd5b620003bf826200023a565b9392505050565b600181811c90821680620003db57607f821691505b60208210811415620003fd57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a0516122756200045a6000396000610a9a015260008181610386015281816106db0152818161089101528181610f15015281816110010152818161115b015281816112f401526114f901526122756000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80636352211e116100f9578063a0bcfc7f11610097578063b88d4fde11610071578063b88d4fde146103a8578063c87b56dd146103b6578063e985e9c5146103c9578063fca3b5aa1461041257600080fd5b8063a0bcfc7f14610360578063a22cb46514610373578063a50cf2c81461038157600080fd5b80638456cb59116100d35780638456cb591461032a57806389406ff51461033257806395d89b41146103455780639dc29fac1461034d57600080fd5b80636352211e146102fc5780636c0360eb1461030f57806370a082311461031757600080fd5b80633f4ba83a116101665780634610f6ac116101405780634610f6ac146102b357806354fd4d50146102c6578063576cd2d1146102ce5780635c975abb146102f157600080fd5b80633f4ba83a1461029857806340c10f19146102a057806342842e0e1461028a57600080fd5b8063081812fc116101a2578063081812fc1461024b578063095ea7b31461025e57806318160ddd1461027357806323b872dd1461028a57600080fd5b806301ffc9a7146101c957806306fdde03146101f15780630754617214610206575b600080fd5b6101dc6101d7366004611cc6565b610425565b60405190151581526020015b60405180910390f35b6101f961050a565b6040516101e89190611d38565b6008546102269073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e8565b610226610259366004611d89565b61059c565b61027161026c366004611dc7565b61067b565b005b61027c60075481565b6040519081526020016101e8565b61027161026c366004611df3565b6102716106ad565b6102716102ae366004611dc7565b61079b565b6102716102c1366004611e34565b610863565b61027c600181565b6101dc6102dc366004611e34565b60096020526000908152604090205460ff1681565b60065460ff166101dc565b61022661030a366004611d89565b610cd9565b6101f9610d8b565b61027c610325366004611e34565b610e19565b610271610ee7565b610271610340366004611e34565b610fd3565b6101f9611103565b61027161035b366004611dc7565b611112565b61027161036e366004611e51565b6112c6565b61027161026c366004611ed1565b6102267f000000000000000000000000000000000000000000000000000000000000000081565b61027161026c366004611f39565b6101f96103c4366004611d89565b6113bb565b6101dc6103d7366004612037565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205460ff1690565b610271610420366004611e34565b6114cb565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd0000000000000000000000000000000000000000000000000000000014806104b857507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061050457507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60606000805461051990612065565b80601f016020809104026020016040519081016040528092919081815260200182805461054590612065565b80156105925780601f1061056757610100808354040283529160200191610592565b820191906000526020600020905b81548152906001019060200180831161057557829003601f168201915b5050505050905090565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff16610652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084015b60405180910390fd5b5060009081526004602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b6040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa158015610737573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075b91906120b9565b610791576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107996115f6565b565b60085473ffffffffffffffffffffffffffffffffffffffff1633146107ec576040517f5c2967f500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006107f783610e19565b905060005b82811015610846576000816108278473ffffffffffffffffffffffffffffffffffffffff8816612105565b6108319190612105565b905061083d85826116d7565b506001016107fc565b5081600760008282546108599190612105565b9091555050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156108ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091191906120b9565b610947576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163b610995576040517f9c01f6a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff1663c12c21c06040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610a1c575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610a199181019061211d565b60015b610a52576040517f9c01f6a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f6fbc6f6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192507f000000000000000000000000000000000000000000000000000000000000000090911690636fbc6f6b90602401602060405180830381865afa158015610ae3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0791906120b9565b1580610bad57503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16639408b63f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b94919061211d565b73ffffffffffffffffffffffffffffffffffffffff1614155b80610c5257508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c39919061211d565b73ffffffffffffffffffffffffffffffffffffffff1614155b15610c89576040517f9c01f6a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff16600090815260096020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff1680610504576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e00000000000000000000000000000000000000000000006064820152608401610649565b600a8054610d9890612065565b80601f0160208091040260200160405190810160405280929190818152602001828054610dc490612065565b8015610e115780601f10610de657610100808354040283529160200191610e11565b820191906000526020600020905b815481529060010190602001808311610df457829003601f168201915b505050505081565b600073ffffffffffffffffffffffffffffffffffffffff8216610ebe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152608401610649565b5073ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015610f71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9591906120b9565b610fcb576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610799611899565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561105d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108191906120b9565b6110b7576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff16600090815260096020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b60606001805461051990612065565b3360009081526009602052604090205460ff161580156111dd57506040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156111b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111db91906120b9565b155b15611214576040517f1e0d048500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061121f83610e19565b90508181101561125b576040517f90c9142d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b828110156112b357600060018261128b8573ffffffffffffffffffffffffffffffffffffffff8916612105565b611295919061213a565b61129f919061213a565b90506112aa81611959565b5060010161125e565b508160076000828254610859919061213a565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611350573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137491906120b9565b6113aa576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113b6600a8383611c0f565b505050565b60008181526002602052604090205460609073ffffffffffffffffffffffffffffffffffffffff1661146f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006064820152608401610649565b6000611479611a26565b9050600081511161149957604051806020016040528060008152506114c4565b806114a384611a35565b6040516020016114b4929190612151565b6040516020818303038152906040525b9392505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611555573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157991906120b9565b6115af576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60065460ff16611662576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610649565b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b73ffffffffffffffffffffffffffffffffffffffff8216611754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610649565b60008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff16156117e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610649565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805460019290611816908490612105565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60065460ff1615611906576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610649565b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586116ad3390565b600061196482610cd9565b9050611971600083611b6f565b73ffffffffffffffffffffffffffffffffffffffff811660009081526003602052604081208054600192906119a790849061213a565b909155505060008281526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555183919073ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6060600a805461051990612065565b606081611a7557505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611a9f5780611a8981612180565b9150611a989050600a836121e8565b9150611a79565b60008167ffffffffffffffff811115611aba57611aba611f0a565b6040519080825280601f01601f191660200182016040528015611ae4576020820181803683370190505b5090505b8415611b6757611af960018361213a565b9150611b06600a866121fc565b611b11906030612105565b60f81b818381518110611b2657611b26612210565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611b60600a866121e8565b9450611ae8565b949350505050565b600081815260046020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091558190611bc982610cd9565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b828054611c1b90612065565b90600052602060002090601f016020900481019282611c3d5760008555611ca1565b82601f10611c74578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00823516178555611ca1565b82800160010185558215611ca1579182015b82811115611ca1578235825591602001919060010190611c86565b50611cad929150611cb1565b5090565b5b80821115611cad5760008155600101611cb2565b600060208284031215611cd857600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146114c457600080fd5b60005b83811015611d23578181015183820152602001611d0b565b83811115611d32576000848401525b50505050565b6020815260008251806020840152611d57816040850160208701611d08565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b600060208284031215611d9b57600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff81168114611dc457600080fd5b50565b60008060408385031215611dda57600080fd5b8235611de581611da2565b946020939093013593505050565b600080600060608486031215611e0857600080fd5b8335611e1381611da2565b92506020840135611e2381611da2565b929592945050506040919091013590565b600060208284031215611e4657600080fd5b81356114c481611da2565b60008060208385031215611e6457600080fd5b823567ffffffffffffffff80821115611e7c57600080fd5b818501915085601f830112611e9057600080fd5b813581811115611e9f57600080fd5b866020828501011115611eb157600080fd5b60209290920196919550909350505050565b8015158114611dc457600080fd5b60008060408385031215611ee457600080fd5b8235611eef81611da2565b91506020830135611eff81611ec3565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060008060808587031215611f4f57600080fd5b8435611f5a81611da2565b93506020850135611f6a81611da2565b925060408501359150606085013567ffffffffffffffff80821115611f8e57600080fd5b818701915087601f830112611fa257600080fd5b813581811115611fb457611fb4611f0a565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715611ffa57611ffa611f0a565b816040528281528a602084870101111561201357600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000806040838503121561204a57600080fd5b823561205581611da2565b91506020830135611eff81611da2565b600181811c9082168061207957607f821691505b602082108114156120b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156120cb57600080fd5b81516114c481611ec3565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115612118576121186120d6565b500190565b60006020828403121561212f57600080fd5b81516114c481611da2565b60008282101561214c5761214c6120d6565b500390565b60008351612163818460208801611d08565b835190830190612177818360208801611d08565b01949350505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156121b2576121b26120d6565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826121f7576121f76121b9565b500490565b60008261220b5761220b6121b9565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea2646970667358221220ffdd83a2fc9a158347ca248f021e63fcef3a7985b3deb793f75cd1835b068aab64736f6c634300080a003360a060405234801561001057600080fd5b506040516106ca3803806106ca83398101604081905261002f9161006c565b60009190915560ff166080526001805460506001600160501b031991821681179092556004805490911690911790554260028190556003556100a2565b6000806040838503121561007f57600080fd5b82519150602083015160ff8116811461009757600080fd5b809150509250929050565b60805161060e6100bc600039600060d3015261060e6000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80639a6fc8f511610081578063d62ada111161005b578063d62ada11146102dc578063f7a30806146102f4578063feaf968c1461030757600080fd5b80639a6fc8f5146101cd578063bd18ad531461023a578063cd653afc1461024d57600080fd5b806354fd4d50116100b257806354fd4d501461012d57806367e8d83d1461013c5780637284e4161461018e57600080fd5b8063313ce567146100ce5780633fd0875f1461010c575b600080fd5b6100f57f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020015b60405180910390f35b6004546a0100000000000000000000900460ff166040516101039190610441565b60405160018152602001610103565b61018c61014a366004610482565b600480549115156c01000000000000000000000000027fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff909216919091179055565b005b604080518082018252600c81527f7072696365206f7261636c6500000000000000000000000000000000000000006020820152905161010391906104ab565b6102036101db36600461053d565b60015460005460025460035460045469ffffffffffffffffffff948516941691939590929450565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610103565b61018c610248366004610558565b61030f565b61018c61025b366004610579565b6001805469ffffffffffffffffffff9586167fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090911617905560029290925560035560048054919092167fffffffffffffffffffffffffffffffffffffffff00ff00000000000000000000909116176b020000000000000000000000179055565b6102e461035f565b6040519015158152602001610103565b61018c6103023660046105bf565b600055565b610203610385565b600480548291907fffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff166b01000000000000000000000083600281111561035757610357610412565b021790555050565b600454600090610380906b010000000000000000000000900460ff166103d6565b905090565b60008060008060006004600c9054906101000a900460ff16156103a757600080fd5b505060015460005460025460035460045469ffffffffffffffffffff9485169893975091955093509190911690565b600060028260028111156103ec576103ec610412565b14156103f757600080fd5b600182600281111561040b5761040b610412565b1492915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016006831061047c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561049457600080fd5b813580151581146104a457600080fd5b9392505050565b600060208083528351808285015260005b818110156104d8578581018301518582016040015282016104bc565b818111156104ea576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803569ffffffffffffffffffff8116811461053857600080fd5b919050565b60006020828403121561054f57600080fd5b6104a48261051e565b60006020828403121561056a57600080fd5b8135600381106104a457600080fd5b6000806000806080858703121561058f57600080fd5b6105988561051e565b935060208501359250604085013591506105b46060860161051e565b905092959194509250565b6000602082840312156105d157600080fd5b503591905056fea264697066735822122014874f7a973b86501c4c1a8be32490fe902c8f088ee234d25f9b2497e19f9e5264736f6c634300080a0033a2646970667358221220d8fdaadc825c43ac2783715ebcfe33e7b0ce3a396ac7717d65e4c95e98b6cf7f64736f6c634300080a003360806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d000117905534801561003957600080fd5b50600054604080516318caf8e360e31b815273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660048083019190915260248201929092526044810191909152632aa9a2a960e11b6064820152620100009091046001600160a01b03169063c657c71890608401600060405180830381600087803b1580156100ba57600080fd5b505af11580156100ce573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b81527390f79bf6eb2c4f870365e785982e1f101e93b90660048201526024810191909152600660448201526511949251539160d21b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561014f57600080fd5b505af1158015610163573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b8152733c44cdddb6a900fa2b585dd299e03d12fa4293bc60048201526024810191909152600a6044820152692624a8aaa4a220aa27a960b11b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b1580156101e857600080fd5b505af11580156101fc573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b815273c4375b7de8af5a38a93548eb8453a498222c4ff260048201526024810191909152600c60448201526b44554d425f4144445245535360a01b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561028357600080fd5b505af1158015610297573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b8152739965507d1a55bcc2695c58ba16fb37d819b0a4dc60048201526024810191909152600760448201526620a220a82a22a960c91b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561031957600080fd5b505af115801561032d573d6000803e3d6000fd5b505050506102a6806103406000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063ba414fa61461003b578063fa7626d414610057575b600080fd5b610043610064565b604051901515815260200160405180910390f35b6000546100439060ff1681565b60008054610100900460ff16156100845750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156101bf5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610129917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016101ff565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526101619161023b565b6000604051808303816000865af19150503d806000811461019e576040519150601f19603f3d011682016040523d82523d6000602084013e6101a3565b606091505b50915050808060200190518101906101bb919061024e565b9150505b919050565b6000815160005b818110156101e557602081850181015186830152016101cb565b818111156101f4576000828601525b509290920192915050565b7fffffffff0000000000000000000000000000000000000000000000000000000083168152600061023360048301846101c4565b949350505050565b600061024782846101c4565b9392505050565b60006020828403121561026057600080fd5b8151801515811461024757600080fdfea2646970667358221220293f55a0ef7b60c31a89dbc50e3339c80a8fdb1f9567614b200e97598226671f64736f6c634300080a003360806040523480156200001157600080fd5b506040516201110538038062011105833981016040819052620000349162000811565b6200003f3362000734565b6040516200004d9062000784565b604051809103906000f0801580156200006a573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b039283169081179091556040516310dc138160e31b81529184166004830152906386e09c0890602401600060405180830381600087803b158015620000c457600080fd5b505af1158015620000d9573d6000803e3d6000fd5b50506001546040516301ed651160e41b81526001600160a01b0385811660048301529091169250631ed651109150602401600060405180830381600087803b1580156200012557600080fd5b505af11580156200013a573d6000803e3d6000fd5b505050506040516200014c9062000792565b604051809103906000f08015801562000169573d6000803e3d6000fd5b50600280546001600160a01b0319166001600160a01b039283169081179091556001546040516376aad60560e01b81526004810192909252909116906376aad60590602401600060405180830381600087803b158015620001c957600080fd5b505af1158015620001de573d6000803e3d6000fd5b5050600154604051600093506001600160a01b0390911691506200020290620007a0565b6001600160a01b039091168152602001604051809103906000f0801580156200022f573d6000803e3d6000fd5b5060015460405163338f12b960e21b81526001600160a01b03808416600483015292935091169063ce3c4ae490602401600060405180830381600087803b1580156200027a57600080fd5b505af11580156200028f573d6000803e3d6000fd5b5050600154604051600093506001600160a01b039091169150620002b390620007ae565b6001600160a01b039091168152602001604051809103906000f080158015620002e0573d6000803e3d6000fd5b5060015460405163c5120b3960e01b81526001600160a01b03808416600483015292935091169063c5120b3990602401600060405180830381600087803b1580156200032b57600080fd5b505af115801562000340573d6000803e3d6000fd5b5050600154604051606093506001600160a01b03909116915082906200036690620007bc565b6200037392919062000849565b604051809103906000f08015801562000390573d6000803e3d6000fd5b50600380546001600160a01b0319166001600160a01b0392831690811790915560015460405163530e784f60e01b815260048101929092529091169063530e784f90602401600060405180830381600087803b158015620003f057600080fd5b505af115801562000405573d6000803e3d6000fd5b5050600154604051600093506001600160a01b0390911691506200042990620007ca565b6001600160a01b039091168152602001604051809103906000f08015801562000456573d6000803e3d6000fd5b506001546040516356ee0d3b60e11b81526001600160a01b03808416600483015292935091169063addc1a7690602401600060405180830381600087803b158015620004a157600080fd5b505af1158015620004b6573d6000803e3d6000fd5b5050600154604051600093506001600160a01b039091169150620004da90620007d8565b6001600160a01b039091168152602001604051809103906000f08015801562000507573d6000803e3d6000fd5b506001546040516321da583760e01b81526001600160a01b0380841660048301529293509116906321da583790602401600060405180830381600087803b1580156200055257600080fd5b505af115801562000567573d6000803e3d6000fd5b505050506000306040516200057c90620007e6565b6001600160a01b039091168152602001604051809103906000f080158015620005a9573d6000803e3d6000fd5b50600154604051631795d5b360e31b81526001600160a01b03808416600483015292935091169063bcaead9890602401600060405180830381600087803b158015620005f457600080fd5b505af115801562000609573d6000803e3d6000fd5b505060405163f2fde38b60e01b81523360048201526001600160a01b038416925063f2fde38b9150602401600060405180830381600087803b1580156200064f57600080fd5b505af115801562000664573d6000803e3d6000fd5b505060015460405163f2fde38b60e01b81523360048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b158015620006ae57600080fd5b505af1158015620006c3573d6000803e3d6000fd5b505060025460405163f2fde38b60e01b81523360048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b1580156200070d57600080fd5b505af115801562000722573d6000803e3d6000fd5b505050505050505050505050620008b2565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610fcd80620010dd83390190565b61098c80620020aa83390190565b610f508062002a3683390190565b614da6806200398683390190565b611b45806200872c83390190565b612ced806200a27183390190565b611627806200cf5e83390190565b612b80806200e58583390190565b80516001600160a01b03811681146200080c57600080fd5b919050565b600080604083850312156200082557600080fd5b6200083083620007f4565b91506200084060208401620007f4565b90509250929050565b6001600160a01b0383811682526040602080840182905284518483018190526000938683019290916060870190865b81811015620008a3578551805186168452840151851684840152948301949186019160010162000878565b50909998505050505050505050565b61081b80620008c26000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80638874ff1f1161005b5780638874ff1f146100f55780638da5cb5b14610108578063de28735914610126578063f2fde38b1461014657600080fd5b80632630c12f146100825780632954018c146100cb578063715018a6146100eb575b600080fd5b6003546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6001546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b6100f3610159565b005b6100f3610103366004610658565b6101eb565b60005473ffffffffffffffffffffffffffffffffffffffff166100a2565b6002546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b6100f3610154366004610734565b6103e3565b60005473ffffffffffffffffffffffffffffffffffffffff1633146101df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6101e96000610513565b565b60005473ffffffffffffffffffffffffffffffffffffffff16331461026c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101d6565b60005b815181101561035c57600354825173ffffffffffffffffffffffffffffffffffffffff9091169063e8a97a3e908490849081106102ae576102ae610756565b6020026020010151600001518484815181106102cc576102cc610756565b6020026020010151602001516040518363ffffffff1660e01b815260040161031792919073ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b600060405180830381600087803b15801561033157600080fd5b505af1158015610345573d6000803e3d6000fd5b50505050808061035490610785565b91505061026f565b506002546040517ff2fde38b00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063f2fde38b90602401600060405180830381600087803b1580156103c857600080fd5b505af11580156103dc573d6000803e3d6000fd5b5050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101d6565b73ffffffffffffffffffffffffffffffffffffffff8116610507576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016101d6565b61051081610513565b50565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156105da576105da610588565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561062757610627610588565b604052919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461065357600080fd5b919050565b6000602080838503121561066b57600080fd5b823567ffffffffffffffff8082111561068357600080fd5b818501915085601f83011261069757600080fd5b8135818111156106a9576106a9610588565b6106b7848260051b016105e0565b818152848101925060069190911b8301840190878211156106d757600080fd5b928401925b8184101561072957604084890312156106f55760008081fd5b6106fd6105b7565b6107068561062f565b815261071386860161062f565b81870152835260409390930192918401916106dc565b979650505050505050565b60006020828403121561074657600080fd5b61074f8261062f565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156107de577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea26469706673582212205ee75e57bb635aa49a1758f4ab0b04182a73115bff08f420c56a8ddb433c029364736f6c634300080a0033608060405234801561001057600080fd5b5061001a3361005f565b60405130906f20a2222922a9a9afa82927ab24a222a960811b907fb37614c7d254ea8d16eb81fa11dddaeb266aa8ba4917980859c7740aff30c69190600090a36100af565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610f0f806100be6000396000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c806377532ed9116100e3578063bcaead981161008c578063ce3c4ae411610066578063ce3c4ae414610308578063f2fde38b1461031b578063fca513a81461032e57600080fd5b8063bcaead98146102da578063c5120b39146102ed578063c513c9bb1461030057600080fd5b80639068a868116100bd5780639068a868146102b7578063addc1a76146102bf578063affd9243146102d257600080fd5b806377532ed91461027e57806386e09c08146102865780638da5cb5b1461029957600080fd5b80634c252f9111610145578063699f200f1161011f578063699f200f1461022d578063715018a61461026357806376aad6051461026b57600080fd5b80634c252f91146101fc578063530e784f1461020457806354fd4d501461021757600080fd5b80631ed65110116101765780631ed65110146101cc57806321da5837146101e157806326c74fc3146101f457600080fd5b8063060678c21461019257806308737695146101c4575b600080fd5b61019a610336565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61019a610366565b6101df6101da366004610e10565b610391565b005b6101df6101ef366004610e10565b610444565b61019a6104ef565b61019a61051a565b6101df610212366004610e10565b610545565b61021f600281565b6040519081526020016101bb565b61019a61023b366004610e4d565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6101df6105f0565b6101df610279366004610e10565b61067d565b61019a610728565b6101df610294366004610e10565b610753565b60005473ffffffffffffffffffffffffffffffffffffffff1661019a565b61019a6107fe565b6101df6102cd366004610e10565b610829565b61019a6108d4565b6101df6102e8366004610e10565b6108ff565b6101df6102fb366004610e10565b6109aa565b61019a610a55565b6101df610316366004610e10565b610a80565b6101df610329366004610e10565b610b2b565b61019a610c58565b60006103617f444154415f434f4d50524553534f520000000000000000000000000000000000610c7f565b905090565b60006103617f41434c0000000000000000000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610417576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6104417f54524541535552595f434f4e545241435400000000000000000000000000000082610d1d565b50565b60005473ffffffffffffffffffffffffffffffffffffffff1633146104c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f574554485f47415445574159000000000000000000000000000000000000000082610d1d565b60006103617f54524541535552595f434f4e5452414354000000000000000000000000000000610c7f565b60006103617f574554485f544f4b454e00000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f50524943455f4f5241434c45000000000000000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610671576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b61067b6000610d9b565b565b60005473ffffffffffffffffffffffffffffffffffffffff1633146106fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f41434c000000000000000000000000000000000000000000000000000000000082610d1d565b60006103617f574554485f474154455741590000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146107d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f574554485f544f4b454e0000000000000000000000000000000000000000000082610d1d565b60006103617f4143434f554e545f464143544f52590000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146108aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f4143434f554e545f464143544f5259000000000000000000000000000000000082610d1d565b60006103617f474541525f544f4b454e00000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610980576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f474541525f544f4b454e0000000000000000000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f444154415f434f4d50524553534f52000000000000000000000000000000000082610d1d565b60006103617f434f4e5452414354535f52454749535445520000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610b01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f434f4e5452414354535f5245474953544552000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610bac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b73ffffffffffffffffffffffffffffffffffffffff8116610c4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161040e565b61044181610d9b565b60006103617f50524943455f4f5241434c4500000000000000000000000000000000000000005b6000818152600160209081526040808320548151808301909252600382527f41503100000000000000000000000000000000000000000000000000000000009282019290925273ffffffffffffffffffffffffffffffffffffffff9091169081610d16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040e9190610e66565b5092915050565b60008281526001602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091559051909184917fb37614c7d254ea8d16eb81fa11dddaeb266aa8ba4917980859c7740aff30c6919190a35050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215610e2257600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610e4657600080fd5b9392505050565b600060208284031215610e5f57600080fd5b5035919050565b600060208083528351808285015260005b81811015610e9357858101830151858201604001528201610e77565b81811115610ea5576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea264697066735822122083c228af017c6f5cf8c395cdf7a53276ff56fdd4f4313c39f680ab73bd75417364736f6c634300080a0033608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61090e8061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063732818191161008c578063adce758d11610066578063adce758d14610215578063ba306df114610228578063d4eb5db01461023b578063f2fde38b1461027457600080fd5b806373281819146101b7578063819ad68e146101da5780638da5cb5b146101ed57600080fd5b806354fd4d50116100bd57806354fd4d501461016a5780635f259aba14610180578063715018a6146101af57600080fd5b806335914829146100e45780633a41ec641461011c5780634910832f14610155575b600080fd5b6101076100f236600461089b565b60016020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61010761012a36600461089b565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205460ff1690565b61016861016336600461089b565b610287565b005b610172600181565b604051908152602001610113565b61010761018e36600461089b565b60005473ffffffffffffffffffffffffffffffffffffffff91821691161490565b610168610387565b6101076101c536600461089b565b60026020526000908152604090205460ff1681565b6101686101e836600461089b565b610414565b60005460405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610113565b61016861022336600461089b565b61050c565b61016861023636600461089b565b610601565b61010761024936600461089b565b73ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205460ff1690565b61016861028236600461089b565b6106f6565b60005473ffffffffffffffffffffffffffffffffffffffff16331461030d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909217909155517fae26b1cfe9454ba87274a4e8330b6654684362d0f3d7bbd17f7449a1d38387c69190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610408576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b6104126000610826565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517fd400da6c0c0a894dacc0981730b88af0545d00272ee8fff1437bf560ff245fc49190a250565b60005473ffffffffffffffffffffffffffffffffffffffff16331461058d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f1998397e7203f7baca9d6f41b9e4da6e768daac5caad4234fb9bf5869d2715459190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610682576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526001602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f28b01395b7e25d20552a0c8dc8ecd3b1d4abc986f14dad7885fd45b6fd73c8d99190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811661081a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610304565b61082381610826565b50565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156108ad57600080fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146108d157600080fd5b939250505056fea26469706673582212204712efbfe997070def77285a5b8753bc882b62da2133ce1937ad26cd2b48e49864736f6c634300080a003360a060405234801561001057600080fd5b50604051610f50380380610f5083398101604081905261002f916100d7565b6000805460ff19169055806001600160a01b03811661006157604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa15801561009f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100c391906100d7565b6001600160a01b0316608052506101079050565b6000602082840312156100e957600080fd5b81516001600160a01b038116811461010057600080fd5b9392505050565b608051610e1261013e600039600081816101e2015281816102b20152818161040f0152818161057801526108510152610e126000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80638456cb5911610097578063b4ac686011610066578063b4ac686014610217578063c29277cd1461021f578063d914cd4b14610227578063e26b2f631461023a57600080fd5b80638456cb59146101cd57806394144856146101d5578063a50cf2c8146101dd578063ac4afa381461020457600080fd5b80635b16ebb7116100d35780635b16ebb7146101575780635c975abb1461018a578063673a2a1f146101955780636fbc6f6b146101aa57600080fd5b80631e16e4fc146100fa5780633f4ba83a1461013757806354fd4d5014610141575b600080fd5b61010d610108366004610c97565b61024d565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61013f610284565b005b610149600181565b60405190815260200161012e565b61017a610165366004610cb0565b60026020526000908152604090205460ff1681565b604051901515815260200161012e565b60005460ff1661017a565b61019d610372565b60405161012e9190610ced565b61017a6101b8366004610cb0565b60046020526000908152604090205460ff1681565b61013f6103e1565b61019d6104cd565b61010d7f000000000000000000000000000000000000000000000000000000000000000081565b61010d610212366004610c97565b61053a565b600154610149565b600354610149565b61013f610235366004610cb0565b61054a565b61013f610248366004610cb0565b610823565b6003818154811061025d57600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa15801561030e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103329190610d47565b610368576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610370610af6565b565b606060018054806020026020016040519081016040528092919081815260200182805480156103d757602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116103ac575b5050505050905090565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561046b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048f9190610d47565b6104c5576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610370610bd7565b606060038054806020026020016040519081016040528092919081815260200182805480156103d75760200282019190600052602060002090815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116103ac575050505050905090565b6001818154811061025d57600080fd5b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156105d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f89190610d47565b61062e576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051808201909152600281527f5a30000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff82166106b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b60405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff8116600090815260026020908152604091829020548251808401909352600383527f43523100000000000000000000000000000000000000000000000000000000009183019190915260ff1615610753576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b506001805480820182557fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915560008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909417909355915190917ff816b5143086c89d103a0683286be86c2b741e83ebfa75135aae606e2f5c6e5391a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156108ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d19190610d47565b610907576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051808201909152600281527f5a30000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8216610989576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b5073ffffffffffffffffffffffffffffffffffffffff8116600090815260046020908152604091829020548251808401909352600383527f43523200000000000000000000000000000000000000000000000000000000009183019190915260ff1615610a23576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b506003805460018082019092557fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915560008181526004602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909417909355915190917f58ad3cfc4b6552a53c8c4128ae9b080e14b4378a159280643a62c6f709cee24f91a250565b60005460ff16610b62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016106b0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff1615610c44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016106b0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610bad3390565b600060208284031215610ca957600080fd5b5035919050565b600060208284031215610cc257600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610ce657600080fd5b9392505050565b6020808252825182820181905260009190848201906040850190845b81811015610d3b57835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101610d09565b50909695505050505050565b600060208284031215610d5957600080fd5b81518015158114610ce657600080fd5b600060208083528351808285015260005b81811015610d9657858101830151858201604001528201610d7a565b81811115610da8576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea26469706673582212208f2d91c863db9ab1494a9c5db20e3fddc4b6c779ea3c3621737c105c60d9440a64736f6c634300080a003360e06040523480156200001157600080fd5b5060405162004da638038062004da6833981016040819052620000349162000160565b6001600160a01b0381166200005c57604051635919af9760e11b815260040160405180910390fd5b6001600160a01b03811660808190526040805163c513c9bb60e01b8152905163c513c9bb916004808201926020929091908290030181865afa158015620000a7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cd919062000160565b6001600160a01b031660a0816001600160a01b0316815250506080516001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000127573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200014d919062000160565b6001600160a01b031660c0525062000192565b6000602082840312156200017357600080fd5b81516001600160a01b03811681146200018b57600080fd5b9392505050565b60805160a05160c051614b896200021d6000396000818161018801528181611c4f0152612c5a0152600081816101ed015281816115e201528181611f5f0152818161213f0152818161223f0152818161243801528181612604015281816126bc01528181612788015281816129a501528181613c410152613d000152600061013c0152614b896000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c806354fd4d5011610081578063a80deda31161005b578063a80deda31461020f578063ae093f3f1461022f578063fc9914cb1461024f57600080fd5b806354fd4d50146101bd578063663b8fdb146101d35780637a0c7b21146101e857600080fd5b80632954018c116100b25780632954018c146101375780634b2f336d146101835780634c472fc9146101aa57600080fd5b80630dbd616d146100d957806313d21cdf146101025780631bcd8fc014610122575b600080fd5b6100ec6100e73660046140fc565b610272565b6040516100f9919061430b565b60405180910390f35b61011561011036600461431e565b6114d4565b6040516100f99190614444565b61012a611f59565b6040516100f99190614453565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100f9565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b61015e6101b83660046140fc565b6121f5565b6101c5600281565b6040519081526020016100f9565b6101db612432565b6040516100f991906146ea565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b61022261021d36600461431e565b6126b5565b6040516100f9919061476a565b61024261023d36600461431e565b612a75565b6040516100f991906147dd565b61026261025d3660046140fc565b613bf7565b60405190151581526020016100f9565b61035f604051806102400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160008152602001606081526020016000815260200160008152602001600015158152602001600081526020016000815260200160008152602001600060ff168152602001600081525090565b600080600080600061037088613cf4565b509450945094509450945060008560ff1660011461041d576040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015284169063e958b70490602401602060405180830381865afa1580156103f4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061041891906147f0565b6104ad565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015286169063e958b70490602401602060405180830381865afa158015610489573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ad91906147f0565b60ff8716610200890181905273ffffffffffffffffffffffffffffffffffffffff808b1660208b01528b811660608b015282168952909150600114156109e9578473ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610538573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055c91906147f0565b73ffffffffffffffffffffffffffffffffffffffff90811660808901526040517fc7de38a600000000000000000000000000000000000000000000000000000000815282821660048201529085169063c7de38a690602401602060405180830381865afa1580156105d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f5919061480d565b60c08801526040517fdfd5946500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015285169063dfd5946590602401602060405180830381865afa158015610666573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068a919061480d565b60e08801526040517f3ce0735500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015260006024830152861690633ce0735590604401602060405180830381865afa92505050801561073c575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526107399181019061480d565b60015b6107455761074c565b6101408801525b6040517f3ce0735500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015260016024830152861690633ce0735590604401602060405180830381865afa9250505080156107f9575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526107f69181019061480d565b60015b61080257610809565b6101608801525b60c08701516040517f996329f800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526024820192909252600060448201529086169063996329f89060640160a060405180830381865afa9250505080156108c4575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526108c191810190614826565b60015b6108cd576108da565b505015156101808a015250505b8073ffffffffffffffffffffffffffffffffffffffff16631afbb7a46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610925573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610949919061480d565b6101a08801526040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152851690633192195c90602401602060405180830381865afa1580156109bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109df919061480d565b60a0880152610c26565b8273ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5891906147f0565b73ffffffffffffffffffffffffffffffffffffffff90811660808901526040517fc7de38a600000000000000000000000000000000000000000000000000000000815282821660048201529083169063c7de38a6906024016040805180830381865afa158015610acc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af09190614866565b5060c08801526040517fdfd5946500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015283169063dfd5946590602401602060405180830381865afa158015610b62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b86919061480d565b60e08801526040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152841690633192195c906024016040805180830381865afa158015610bf6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1a9190614866565b60a08901526101a08801525b60008660ff16600114610ca7578373ffffffffffffffffffffffffffffffffffffffff166316f0115b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca291906147f0565b610d16565b8573ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1691906147f0565b90508073ffffffffffffffffffffffffffffffffffffffff166345d31f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d87919061480d565b6101008901526000600160ff891614610e0e578473ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610de5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e09919061480d565b610e7d565b8573ffffffffffffffffffffffffffffffffffffffff166320a05ff76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7d919061480d565b90508760ff16600114610f1f576040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152861690638991b2f190602401602060405180830381865afa158015610ef6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1a919061480d565b610faf565b6040517fb451cecc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015287169063b451cecc90602401602060405180830381865afa158015610f8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610faf919061480d565b6102208a01528067ffffffffffffffff811115610fce57610fce61488a565b60405190808252806020026020018201604052801561103e57816020015b6040805160808101825260008082526020808301829052928201819052606082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181610fec5790505b506101208a015260005b818110156113d657604080516080810182526000808252602082018190529181018290526060810191909152600180831b9060ff8c1614156111c5576040517faf0a650200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018590528a169063af0a650290604401608060405180830381865afa1580156110f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111b91906148b9565b5050602084015273ffffffffffffffffffffffffffffffffffffffff9081168084526040517ff9eaee0d0000000000000000000000000000000000000000000000000000000081526004810191909152908a169063f9eaee0d90602401602060405180830381865afa158015611195573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b9919061490d565b15156040830152611388565b6040517f172c48c70000000000000000000000000000000000000000000000000000000081526004810184905273ffffffffffffffffffffffffffffffffffffffff89169063172c48c7906024016040805180830381865afa15801561122f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112539190614928565b5073ffffffffffffffffffffffffffffffffffffffff9081168084526040517f70a082310000000000000000000000000000000000000000000000000000000081529188166004830152906370a0823190602401602060405180830381865afa1580156112c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e8919061480d565b602083015281516040517ff9eaee0d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529088169063f9eaee0d90602401602060405180830381865afa15801561135c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611380919061490d565b151560408301525b6102208c015181161561139c57600161139f565b60005b151560608301526101208c01518051839190859081106113c1576113c161495e565b60209081029190910101525050600101611048565b508273ffffffffffffffffffffffffffffffffffffffff166317d11a156040518163ffffffff1660e01b8152600401602060405180830381865afa158015611422573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611446919061480d565b896101c00181815250508273ffffffffffffffffffffffffffffffffffffffff16633dc54b406040518163ffffffff1660e01b8152600401602060405180830381865afa15801561149b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bf919061480d565b6101e08a015250969998505050505050505050565b61159b604051806102000160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600060ff1681525090565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015283917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa15801561162b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164f919061490d565b611685576040517fd384b23800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316808352604080517ffe14112d000000000000000000000000000000000000000000000000000000008152905185929163fe14112d9160048083019260209291908290030181865afa1580156116f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611719919061480d565b8360c00181815250508073ffffffffffffffffffffffffffffffffffffffff1663ef8d96036040518163ffffffff1660e01b8152600401602060405180830381865afa15801561176d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611791919061480d565b8360e00181815250508073ffffffffffffffffffffffffffffffffffffffff1663743753596040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611809919061480d565b8360a00181815250508073ffffffffffffffffffffffffffffffffffffffff16634c19386c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561185d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611881919061480d565b836101000181815250508073ffffffffffffffffffffffffffffffffffffffff1663788c6bfe6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fa919061480d565b836101600181815250508073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561194f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611973919061480d565b8360800181815250508073ffffffffffffffffffffffffffffffffffffffff166345d31f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119eb919061480d565b836101400181815250508073ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6491906147f0565b836040019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff166336dda7d56040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0a91906147f0565b836060019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663788c6bfe6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb0919061480d565b836101600181815250508073ffffffffffffffffffffffffffffffffffffffff1663e941fa786040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c29919061480d565b61018084015260408084015173ffffffffffffffffffffffffffffffffffffffff9081167f000000000000000000000000000000000000000000000000000000000000000082161460208087019190915282517f609ae31700000000000000000000000000000000000000000000000000000000815292519184169263609ae31792600480830193928290030181865afa158015611ccb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cef919061480d565b836101c00181815250508073ffffffffffffffffffffffffffffffffffffffff1663dbcb313b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d68919061480d565b836101a00181815250506000836060015173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de7919061480d565b6040517f5427c9380000000000000000000000000000000000000000000000000000000081526004810182905290915060009073ffffffffffffffffffffffffffffffffffffffff841690635427c93890602401602060405180830381865afa158015611e58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7c919061480d565b90508015611ec7576101808501518190611eb890611e9c906127106149bc565b876101000151886101400151611eb291906149d3565b90613fd0565b611ec29190614a3f565b611ece565b8461014001515b856101200181815250508273ffffffffffffffffffffffffffffffffffffffff166354fd4d506040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f47919061480d565b60ff166101e086015250505050919050565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b4ac68606040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fec919061480d565b90508067ffffffffffffffff8111156120075761200761488a565b6040519080825280602002602001820160405280156120ff57816020015b6120ec604051806102000160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600060ff1681525090565b8152602001906001900390816120255790505b50915060005b818110156121f0576040517fac4afa38000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ac4afa3890602401602060405180830381865afa15801561219b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121bf91906147f0565b90506121ca816114d4565b8483815181106121dc576121dc61495e565b602090810291909101015250600101612105565b505090565b6040517f6fbc6f6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015260009184917f00000000000000000000000000000000000000000000000000000000000000001690636fbc6f6b90602401602060405180830381865afa158015612286573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122aa919061490d565b6122e0576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060006122ee87613cf4565b5050935093505092508260ff16600114612397576040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015282169063fdd5764590602401602060405180830381865afa15801561236e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061239291906147f0565b612427565b6040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015283169063fdd5764590602401602060405180830381865afa158015612403573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061242791906147f0565b979650505050505050565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c29277cd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124c5919061480d565b90508067ffffffffffffffff8111156124e0576124e061488a565b6040519080825280602002602001820160405280156125c457816020015b60408051610260810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083018290526101208301819052610140830181905261016083015261018082018190526101a082018190526101c082018190526101e082018190526102008201819052610220820181905261024082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816124fe5790505b50915060005b818110156121f0576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa158015612660573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061268491906147f0565b905061268f81612a75565b8483815181106126a1576126a161495e565b6020908102919091010152506001016125ca565b60606000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c29277cd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612725573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612749919061480d565b905060005b81811015612829576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa1580156127e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061280891906147f0565b90506128148187613bf7565b15612820578360010193505b5060010161274e565b508167ffffffffffffffff8111156128435761284361488a565b60405190808252806020026020018201604052801561296157816020015b61294e604051806102400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160008152602001606081526020016000815260200160008152602001600015158152602001600081526020016000815260200160008152602001600060ff168152602001600081525090565b8152602001906001900390816128615790505b5092506000915060005b81811015612a6d576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa158015612a01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a2591906147f0565b9050612a318187613bf7565b15612a6457612a408187610272565b858581518110612a5257612a5261495e565b60209081029190910101526001909301925b5060010161296b565b505050919050565b604080516102608101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082018390526101208201819052610140820181905261016082015261018081018290526101a081018290526101c081018290526101e08101829052610200810182905261022081018290526102408101829052908080808080612b1b88613cf4565b73ffffffffffffffffffffffffffffffffffffffff8e168d5260ff86166101808e01819052959b50939950919750955093509150600114612bca578273ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ba1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bc591906147f0565b612c39565b8473ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c3991906147f0565b73ffffffffffffffffffffffffffffffffffffffff908116602089018190527f00000000000000000000000000000000000000000000000000000000000000009091161460408801526000600160ff881614612d03578373ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cfe91906147f0565b612d72565b8573ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d7291906147f0565b6040517f2e97ca2100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b8116600483015291925090821690632e97ca2190602401602060405180830381865afa158015612de2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e06919061490d565b15156060890152604080517f45d31f9d000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff8316916345d31f9d9160048083019260209291908290030181865afa158015612e78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e9c919061480d565b8860800181815250508073ffffffffffffffffffffffffffffffffffffffff1663743753596040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ef0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f14919061480d565b610100890152600160ff88161415613017578573ffffffffffffffffffffffffffffffffffffffff16639b2cb5d86040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f95919061480d565b8860a00181815250508573ffffffffffffffffffffffffffffffffffffffff16635f48f3936040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fe9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061300d919061480d565b60c08901526130a5565b8273ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa158015613061573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130859190614a73565b6fffffffffffffffffffffffffffffffff90811660c08b01521660a08901525b60008760ff16600114613126578473ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613121919061480d565b613195565b8573ffffffffffffffffffffffffffffffffffffffff166320a05ff76040518163ffffffff1660e01b8152600401602060405180830381865afa158015613171573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613195919061480d565b90508067ffffffffffffffff8111156131b0576131b061488a565b6040519080825280602002602001820160405280156131d9578160200160208202803683370190505b506101208a01528067ffffffffffffffff8111156131f9576131f961488a565b604051908082528060200260200182016040528015613222578160200160208202803683370190505b506101608a015260005b818110156134c4578860ff16600114156133b4576040517f5e5f2e260000000000000000000000000000000000000000000000000000000081526004810182905260009073ffffffffffffffffffffffffffffffffffffffff891690635e5f2e2690602401602060405180830381865afa1580156132ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132d291906147f0565b9050808b610120015183815181106132ec576132ec61495e565b73ffffffffffffffffffffffffffffffffffffffff92831660209182029290920101526040517f78327438000000000000000000000000000000000000000000000000000000008152828216600482015290891690637832743890602401602060405180830381865afa158015613367573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061338b919061480d565b8b610160015183815181106133a2576133a261495e565b602002602001018181525050506134bc565b6040517f172c48c70000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff87169063172c48c7906024016040805180830381865afa15801561341e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134429190614928565b8061ffff1690508b610120015183815181106134605761346061495e565b602002602001018c6101600151848151811061347e5761347e61495e565b60200260200101828152508273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525050505b60010161322c565b5060008860ff16600114613546578373ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561351d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613541919061480d565b6135b5565b8673ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613591573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135b5919061480d565b90508067ffffffffffffffff8111156135d0576135d061488a565b60405190808252806020026020018201604052801561361557816020015b60408051808201909152600080825260208201528152602001906001900390816135ee5790505b506101408b015260005b818110156139015760408051808201909152600080825260208201528a60ff166001146136da576040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff871690635094cb4f90602401602060405180830381865afa1580156136b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136d591906147f0565b613769565b6040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff8a1690635094cb4f90602401602060405180830381865afa158015613745573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061376991906147f0565b73ffffffffffffffffffffffffffffffffffffffff168152600160ff8c16146138245780516040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529089169063fdd5764590602401602060405180830381865afa1580156137fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061381f91906147f0565b6138b7565b80516040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152908a169063fdd5764590602401602060405180830381865afa158015613893573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138b791906147f0565b73ffffffffffffffffffffffffffffffffffffffff1660208201526101408c01518051829190849081106138ed576138ed61495e565b60209081029190910101525060010161361f565b508860ff166001141561398f578773ffffffffffffffffffffffffffffffffffffffff1663b2c53a6c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613959573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061397d919061480d565b60e08b015260ff6102408b0152613be9565b73ffffffffffffffffffffffffffffffffffffffff85166101a08b01819052604080517f9408b63f0000000000000000000000000000000000000000000000000000000081529051639408b63f916004808201926020929091908290030181865afa158015613a02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a2691906147f0565b8a6101e0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508473ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015613aa9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613acd9190614aa6565b5015156102008c015250604080517f9fd12b77000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff881691639fd12b779160048083019260209291908290030181865afa158015613b42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b66919061480d565b8a6102200181815250508573ffffffffffffffffffffffffffffffffffffffff16638345f26e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bdf9190614af7565b60ff166102408b01525b505050505050505050919050565b6040517f6fbc6f6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015260009184917f00000000000000000000000000000000000000000000000000000000000000001690636fbc6f6b90602401602060405180830381865afa158015613c88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cac919061490d565b613ce2576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613cec8484614023565b949350505050565b600080600080600080867f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636fbc6f6b826040518263ffffffff1660e01b8152600401613d73919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa158015613d90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613db4919061490d565b613dea576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8773ffffffffffffffffffffffffffffffffffffffff166354fd4d506040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e59919061480d565b96508660ff1660011415613ee0578795508573ffffffffffffffffffffffffffffffffffffffff1663f93f515b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613eb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ed991906147f0565b9450613fc6565b8793508373ffffffffffffffffffffffffffffffffffffffff16632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f5291906147f0565b92508373ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fc391906147f0565b91505b5091939550919395565b6000821580613fdd575081155b15613fea5750600061401d565b612710613ff8600282614b1a565b61ffff1661400684866149d3565b6140109190614b3b565b61401a9190614a3f565b90505b92915050565b6040517f055ee9b500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600091829185169063055ee9b590602401602060405180830381865afa158015614094573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140b891906147f0565b73ffffffffffffffffffffffffffffffffffffffff1614159392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146140f957600080fd5b50565b6000806040838503121561410f57600080fd5b823561411a816140d7565b9150602083013561412a816140d7565b809150509250929050565b600081518084526020808501945080840160005b8381101561419f578151805173ffffffffffffffffffffffffffffffffffffffff168852838101518489015260408082015115159089015260609081015115159088015260809096019590820190600101614149565b509495945050505050565b805173ffffffffffffffffffffffffffffffffffffffff168252600061024060208301516141f0602086018273ffffffffffffffffffffffffffffffffffffffff169052565b506040830151614204604086018215159052565b50606083015161422c606086018273ffffffffffffffffffffffffffffffffffffffff169052565b506080830151614254608086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060a083015160a085015260c083015160c085015260e083015160e085015261010080840151818601525061012080840151828287015261429783870182614135565b92505050610140808401518186015250610160808401518186015250610180808401516142c78287018215159052565b50506101a083810151908501526101c080840151908501526101e080840151908501526102008084015160ff16908501526102209283015192909301919091525090565b60208152600061401a60208301846141aa565b60006020828403121561433057600080fd5b813561433b816140d7565b9392505050565b805173ffffffffffffffffffffffffffffffffffffffff168252602081015161436f602084018215159052565b506040810151614397604084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060608101516143bf606084018273ffffffffffffffffffffffffffffffffffffffff169052565b506080818101519083015260a0808201519083015260c0808201519083015260e08082015190830152610100808201519083015261012080820151908301526101408082015190830152610160808201519083015261018080820151908301526101a080820151908301526101c080820151908301526101e09081015160ff16910152565b610200810161401d8284614342565b6020808252825182820181905260009190848201906040850190845b8181101561449657614482838551614342565b92840192610200929092019160010161446f565b50909695505050505050565b600081518084526020808501945080840160005b8381101561419f57815173ffffffffffffffffffffffffffffffffffffffff16875295820195908201906001016144b6565b600081518084526020808501945080840160005b8381101561419f578151805173ffffffffffffffffffffffffffffffffffffffff9081168952908401511683880152604090960195908201906001016144fc565b600081518084526020808501945080840160005b8381101561419f57815187529582019590820190600101614551565b805173ffffffffffffffffffffffffffffffffffffffff168252600061026060208301516145b3602086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060408301516145c7604086018215159052565b5060608301516145db606086018215159052565b506080830151608085015260a083015160a085015260c083015160c085015260e083015160e0850152610100808401518186015250610120808401518282870152614628838701826144a2565b92505050610140808401518583038287015261464483826144e8565b925050506101608084015185830382870152614660838261453d565b92505050610180808401516146798287018260ff169052565b50506101a08381015173ffffffffffffffffffffffffffffffffffffffff908116918601919091526101c0808501511515908601526101e080850151909116908501526102008084015115159085015261022080840151908501526102409283015160ff1692909301919091525090565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561475d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc088860301845261474b85835161456d565b94509285019290850190600101614711565b5092979650505050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561475d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08886030184526147cb8583516141aa565b94509285019290850190600101614791565b60208152600061401a602083018461456d565b60006020828403121561480257600080fd5b815161433b816140d7565b60006020828403121561481f57600080fd5b5051919050565b600080600080600060a0868803121561483e57600080fd5b5050835160208501516040860151606087015160809097015192989197509594509092509050565b6000806040838503121561487957600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080600080608085870312156148cf57600080fd5b84516148da816140d7565b60208601516040870151606090970151919890975090945092505050565b8051801515811461490857600080fd5b919050565b60006020828403121561491f57600080fd5b61401a826148f8565b6000806040838503121561493b57600080fd5b8251614946816140d7565b602084015190925061ffff8116811461412a57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156149ce576149ce61498d565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614a0b57614a0b61498d565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614a4e57614a4e614a10565b500490565b80516fffffffffffffffffffffffffffffffff8116811461490857600080fd5b60008060408385031215614a8657600080fd5b614a8f83614a53565b9150614a9d60208401614a53565b90509250929050565b600080600060608486031215614abb57600080fd5b614ac484614a53565b9250614ad2602085016148f8565b9150604084015164ffffffffff81168114614aec57600080fd5b809150509250925092565b600060208284031215614b0957600080fd5b815160ff8116811461433b57600080fd5b600061ffff80841680614b2f57614b2f614a10565b92169190910492915050565b60008219821115614b4e57614b4e61498d565b50019056fea2646970667358221220d15108d0bec9cc6f3903875dd8412869a3da1b36661bdc780e2e2f0ae3136d2464736f6c634300080a003360a06040523480156200001157600080fd5b5060405162001b4538038062001b45833981016040819052620000349162000608565b6000805460ff19169055816001600160a01b0381166200006757604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cc91906200070a565b6001600160a01b031660805250805160005b818110156200014257620001398382815181106200010057620001006200072f565b6020026020010151600001518483815181106200012157620001216200072f565b6020026020010151602001516200014c60201b60201c565b600101620000de565b5050505062000822565b6001600160a01b03821615806200016a57506001600160a01b038116155b156200018957604051635919af9760e11b815260040160405180910390fd5b620001a8826001600160a01b0316620004ba60201b620006751760201c565b620001d65760405163df4c572d60e01b81526001600160a01b03831660048201526024015b60405180910390fd5b620001f5816001600160a01b0316620004ba60201b620006751760201c565b6200021f5760405163df4c572d60e01b81526001600160a01b0382166004820152602401620001cd565b806001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200027c575060408051601f3d908101601f19168201909252620002799181019062000745565b60015b6200029a576040516367a7cd4360e01b815260040160405180910390fd5b8060ff16600814620002bf576040516367a7cd4360e01b815260040160405180910390fd5b506000816001600160a01b031663d62ada116040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200031f575060408051601f3d908101601f191682019092526200031c918101906200076a565b60015b6200032a576200032d565b90505b6000836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200038c575060408051601f3d908101601f19168201909252620003899181019062000745565b60015b620003aa5760405163528ca31d60e01b815260040160405180910390fd5b60128160ff161115620003d05760405163528ca31d60e01b815260040160405180910390fd5b9050826001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa9250505080156200042f575060408051601f3d908101601f191682019092526200042c91810190620007a6565b60015b6200044d576040516367a7cd4360e01b815260040160405180910390fd5b8662000461576200046185858484620004c0565b5050505050620004748484848462000526565b826001600160a01b0316846001600160a01b03167fe263805b03657ab13064915d0723c5ce14981547e7cba5283f66b9e5d81f6e6e60405160405180910390a350505050565b3b151590565b60008313620004e2576040516356e05d2b60e01b815260040160405180910390fd5b836001600160501b0316816001600160501b0316108062000501575081155b15620005205760405163b1cf675560e01b815260040160405180910390fd5b50505050565b6001600160a01b03831682156200053e57600160a11b175b6200055460ff60a21b60a284901b1682620007fb565b6001600160a01b0390951660009081526001602052604090209490945550505050565b80516001600160a01b03811681146200058f57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715620005cf57620005cf62000594565b60405290565b604051601f8201601f191681016001600160401b038111828210171562000600576200060062000594565b604052919050565b60008060408084860312156200061d57600080fd5b620006288462000577565b602085810151919450906001600160401b03808211156200064857600080fd5b818701915087601f8301126200065d57600080fd5b81518181111562000672576200067262000594565b62000682848260051b01620005d5565b818152848101925060069190911b830184019089821115620006a357600080fd5b928401925b81841015620006fa5785848b031215620006c25760008081fd5b620006cc620005aa565b620006d78562000577565b8152620006e686860162000577565b8187015283529285019291840191620006a8565b8096505050505050509250929050565b6000602082840312156200071d57600080fd5b620007288262000577565b9392505050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156200075857600080fd5b815160ff811681146200072857600080fd5b6000602082840312156200077d57600080fd5b815180151581146200072857600080fd5b80516001600160501b03811681146200058f57600080fd5b600080600080600060a08688031215620007bf57600080fd5b620007ca866200078e565b9450602086015193506040860151925060608601519150620007ef608087016200078e565b90509295509295909350565b600082198211156200081d57634e487b7160e01b600052601160045260246000fd5b500190565b6080516112f262000853600039600081816101b201528181610280015281816103e201526104ff01526112f26000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c80638456cb591161008c578063b66102df11610066578063b66102df146101d4578063e8a97a3e146101e7578063f190e5fa146101fa578063f9a650301461023f57600080fd5b80638456cb591461016d5780639dcb511a14610175578063a50cf2c8146101ad57600080fd5b80635c975abb116100bd5780635c975abb1461011c5780635cecbd0e146101325780637afb01041461015a57600080fd5b80633f4ba83a146100e457806341976e09146100ee57806354fd4d5014610114575b600080fd5b6100ec610252565b005b6101016100fc366004610f28565b610340565b6040519081526020015b60405180910390f35b610101600281565b60005460ff16604051901515815260200161010b565b610145610140366004610f4a565b610352565b6040805192835260208301919091520161010b565b610101610168366004610f90565b610376565b6100ec6103b4565b610188610183366004610f28565b6104a0565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010b565b6101887f000000000000000000000000000000000000000000000000000000000000000081565b6101016101e2366004610fbc565b6104b4565b6100ec6101f5366004610ff8565b6104d1565b61020d610208366004610f28565b6105c3565b6040805173ffffffffffffffffffffffffffffffffffffffff909416845291151560208401529082015260600161010b565b61010161024d366004610f90565b61064d565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156102dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103009190611022565b610336576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033e61067b565b565b600061034b82610761565b5092915050565b60008061035f868661064d565b915061036b848461064d565b905094509492505050565b600080600061038484610761565b90925090508161039582600a611193565b61039f908761119f565b6103a991906111dc565b925050505b92915050565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561043e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104629190611022565b610498576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033e610819565b60006104ab826105c3565b50909392505050565b60006104c96104c3858561064d565b83610376565b949350505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561055b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057f9190611022565b6105b5576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105bf82826108d9565b5050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600160205260408120548190819080610624576040517f4bb8ad8200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b947402000000000000000000000000000000000000000086161515945060a286901c9350915050565b600080600061065b84610761565b909250905061066b81600a611193565b61039f838761119f565b3b151590565b60005460ff166106ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b600080600080610770856105c3565b8095508193508294505050506000806000808573ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156107cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f19190611231565b9450945050935093508461080b5761080b84848484610dd9565b829750505050505050915091565b60005460ff1615610886576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016106e3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586107373390565b73ffffffffffffffffffffffffffffffffffffffff82161580610910575073ffffffffffffffffffffffffffffffffffffffff8116155b15610947576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82163b6109ad576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016106e3565b73ffffffffffffffffffffffffffffffffffffffff81163b610a13576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024016106e3565b8073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610a98575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610a9591810190611281565b60015b610ace576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060ff16600814610b0b576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060008173ffffffffffffffffffffffffffffffffffffffff1663d62ada116040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610b93575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610b9091810190611022565b60015b610b9c57610b9f565b90505b60008373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610c26575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610c2391810190611281565b60015b610c5c576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60128160ff161115610c9a576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b90508273ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa925050508015610d21575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610d1e91810190611231565b60015b610d57576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b86610d6857610d6885858484610dd9565b5050505050610d7984848484610e74565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fe263805b03657ab13064915d0723c5ce14981547e7cba5283f66b9e5d81f6e6e60405160405180910390a350505050565b60008313610e13576040517f56e05d2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8369ffffffffffffffffffff168169ffffffffffffffffffff161080610e37575081155b15610e6e576040517fb1cf675500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b73ffffffffffffffffffffffffffffffffffffffff83168215610ea95774020000000000000000000000000000000000000000175b610ecf7503fc000000000000000000000000000000000000000060a284901b16826112a4565b73ffffffffffffffffffffffffffffffffffffffff90951660009081526001602052604090209490945550505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610f2357600080fd5b919050565b600060208284031215610f3a57600080fd5b610f4382610eff565b9392505050565b60008060008060808587031215610f6057600080fd5b84359350610f7060208601610eff565b925060408501359150610f8560608601610eff565b905092959194509250565b60008060408385031215610fa357600080fd5b82359150610fb360208401610eff565b90509250929050565b600080600060608486031215610fd157600080fd5b83359250610fe160208501610eff565b9150610fef60408501610eff565b90509250925092565b6000806040838503121561100b57600080fd5b61101483610eff565b9150610fb360208401610eff565b60006020828403121561103457600080fd5b81518015158114610f4357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b808511156110cc57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156110b2576110b2611044565b808516156110bf57918102915b93841c9390800290611078565b509250929050565b6000826110e3575060016103ae565b816110f0575060006103ae565b816001811461110657600281146111105761112c565b60019150506103ae565b60ff84111561112157611121611044565b50506001821b6103ae565b5060208310610133831016604e8410600b841016171561114f575081810a6103ae565b6111598383611073565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561118b5761118b611044565b029392505050565b6000610f4383836110d4565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156111d7576111d7611044565b500290565b600082611212577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b805169ffffffffffffffffffff81168114610f2357600080fd5b600080600080600060a0868803121561124957600080fd5b61125286611217565b945060208601519350604086015192506060860151915061127560808701611217565b90509295509295909350565b60006020828403121561129357600080fd5b815160ff81168114610f4357600080fd5b600082198211156112b7576112b7611044565b50019056fea2646970667358221220e7485a2cb5750973f539ca59d2211008b42bb92b6c49605a53f5d9c88c330fb164736f6c634300080a003360e06040523480156200001157600080fd5b5060405162002ced38038062002ced8339810160408190526200003491620004bb565b6000805460ff19169055806001600160a01b0381166200006757604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cc9190620004bb565b6001600160a01b039081166080526001805560408051808201909152600281526105a360f41b602082015291508216620001245760405162461bcd60e51b81526004016200011b9190620004ed565b60405180910390fd5b50806001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000164573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200018a9190620004bb565b6001600160a01b031660c052604051620001a490620004ad565b604051809103906000f080158015620001c1573d6000803e3d6000fd5b506001600160a01b031660a08190526040805163204a7f0760e21b81529051638129fc1c9160048082019260009290919082900301818387803b1580156200020857600080fd5b505af11580156200021d573d6000803e3d6000fd5b50505050620002316200028a60201b60201c565b50600454600380546001600160a01b039092166001600160a01b03199283161790556000805260026020527fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b8054909116905562000545565b6000620002a460a0516200038c60201b6200119b1760201c565b9050806001600160a01b0316638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620002e257600080fd5b505af1158015620002f7573d6000803e3d6000fd5b5050600480546001600160a01b03908116600090815260026020908152604090912080546001600160a01b03199081169388169384179091558354169091179091556200035492506005915083906200043b811b6200127d17901c565b506040516001600160a01b038216907f9f69b6c10f6810213e055b0ba6bc0a4e2603f73c221aad77ea35da819cda7dc390600090a250565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260601b60148201526e5af43d82803e903d91602b57fd5bf360881b60288201526037816000f09150506001600160a01b038116620004365760405162461bcd60e51b815260206004820152601660248201527f455243313136373a20637265617465206661696c65640000000000000000000060448201526064016200011b565b919050565b600062000452836001600160a01b0384166200045b565b90505b92915050565b6000818152600183016020526040812054620004a45750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000455565b50600062000455565b610e788062001e7583390190565b600060208284031215620004ce57600080fd5b81516001600160a01b0381168114620004e657600080fd5b9392505050565b600060208083528351808285015260005b818110156200051c57858101830151858201604001528201620004fe565b818111156200052f576000604083870101525b50601f01601f1916929092016040019392505050565b60805160a05160c0516118cf620005a66000396000818161026a015281816103680152610b7001526000818161020201526110650152600081816102c4015281816105b80152818161099601528181610a840152610e7401526118cf6000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806388f64c54116100cd578063b193976311610081578063d82ecc4811610066578063d82ecc4814610309578063e3ba9ace1461031c578063f23953ab1461032f57600080fd5b8063b1939763146102f9578063b60e85181461030157600080fd5b80638f7dcfa3116100b25780638f7dcfa31461029f578063a50cf2c8146102bf578063a904aab6146102e657600080fd5b806388f64c541461026557806389b77b3e1461028c57600080fd5b806354fd4d50116101245780635da33c5b116101095780635da33c5b146101fd578063765e0159146102245780638456cb591461025d57600080fd5b806354fd4d50146101d05780635c975abb146101e657600080fd5b806313d8c8401461015657806321d18456146101a05780632932472f146101b35780633f4ba83a146101c8575b600080fd5b6004546101769073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6101766101ae366004611651565b610337565b6101c66101c1366004611697565b61058a565b005b6101c6610968565b6101d8600181565b604051908152602001610197565b60005460ff165b6040519015158152602001610197565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101766102323660046116da565b73ffffffffffffffffffffffffffffffffffffffff9081166000908152600260205260409020541690565b6101c6610a56565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101c661029a3660046116da565b610b42565b6003546101769073ffffffffffffffffffffffffffffffffffffffff1681565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101c66102f4366004611697565b610e46565b6101d8610fb8565b6101d8611033565b6101ed6103173660046116da565b611044565b61017661032a3660046116f5565b611051565b6101c661105e565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa1580156103c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103e8919061170e565b6040518060400160405280600281526020017f43500000000000000000000000000000000000000000000000000000000000008152509061045f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b60405180910390fd5b506104686112a6565b6003805473ffffffffffffffffffffffffffffffffffffffff8082166000818152600260205260409081902080549093167fffffffffffffffffffffffff0000000000000000000000000000000000000000948516179094558154909216905590517fc75b5a710000000000000000000000000000000000000000000000000000000081523360048201526024810185905260448101849052819063c75b5a7190606401600060405180830381600087803b15801561052657600080fd5b505af115801561053a573d6000803e3d6000fd5b505060405133925073ffffffffffffffffffffffffffffffffffffffff841691507ff3ede7039176503a8ad1fe7cfaa29475a9dbe0cdcaf04ecf9a5c10570c47b10390600090a390505b92915050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610614573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610638919061170e565b61066e576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106766112a6565b60035473ffffffffffffffffffffffffffffffffffffffff838116911614156106fa576003805473ffffffffffffffffffffffffffffffffffffffff808216600090815260026020526040902080549091167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092558154169055610865565b73ffffffffffffffffffffffffffffffffffffffff838116600090815260026020908152604091829020548251808401909352600383527f4146330000000000000000000000000000000000000000000000000000000000918301919091529091848116911614610798576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b5060045473ffffffffffffffffffffffffffffffffffffffff838116911614156107fd57600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85161790555b73ffffffffffffffffffffffffffffffffffffffff828116600081815260026020526040808220805488861684529183208054929095167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790945591905281541690555b6040517fc75b5a7100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600060248301819052604483015283169063c75b5a7190606401600060405180830381600087803b1580156108dc57600080fd5b505af11580156108f0573d6000803e3d6000fd5b505050506109088260056112dd90919063ffffffff16565b508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f25e267469ba2ae82515be7b3d45df60bf8308343f0809e8cf7319058e2255ce660405160405180910390a3505050565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156109f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a16919061170e565b610a4c576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a546112ff565b565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015610ae0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b04919061170e565b610b3a576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a546113e0565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa158015610bcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf0919061170e565b6040518060400160405280600281526020017f435000000000000000000000000000000000000000000000000000000000000081525090610c5e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b50610c6a6005826114a0565b6040518060400160405280600381526020017f414634000000000000000000000000000000000000000000000000000000000081525090610cd8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b50438173ffffffffffffffffffffffffffffffffffffffff16633dc54b406040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4991906117a3565b14156040518060400160405280600381526020017f414631000000000000000000000000000000000000000000000000000000000081525090610db9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b506004805473ffffffffffffffffffffffffffffffffffffffff90811660009081526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081169487169485179091558454168317909355915190917fced6ab9afc868b3a088366f6631ae20752993b5cce5d5f0534ea5a59fcc57d5691a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610ed0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef4919061170e565b610f2a576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f19a1603900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301528416906319a1603990604401600060405180830381600087803b158015610f9b57600080fd5b505af1158015610faf573d6000803e3d6000fd5b50505050505050565b600354600090819073ffffffffffffffffffffffffffffffffffffffff165b73ffffffffffffffffffffffffffffffffffffffff81161561102d5773ffffffffffffffffffffffffffffffffffffffff9081166000908152600260205260409020541681611025816117eb565b925050610fd7565b50919050565b600061103f60056114cf565b905090565b60006105846005836114a0565b60006105846005836114d9565b60006110897f000000000000000000000000000000000000000000000000000000000000000061119b565b90508073ffffffffffffffffffffffffffffffffffffffff16638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156110d357600080fd5b505af11580156110e7573d6000803e3d6000fd5b50506004805473ffffffffffffffffffffffffffffffffffffffff908116600090815260026020526040902080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811692871692831790915582541617905550611156905060058261127d565b5060405173ffffffffffffffffffffffffffffffffffffffff8216907f9f69b6c10f6810213e055b0ba6bc0a4e2603f73c221aad77ea35da819cda7dc390600090a250565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260601b60148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f091505073ffffffffffffffffffffffffffffffffffffffff8116611278576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f455243313136373a20637265617465206661696c6564000000000000000000006044820152606401610456565b919050565b600061129f8373ffffffffffffffffffffffffffffffffffffffff84166114e5565b9392505050565b60035473ffffffffffffffffffffffffffffffffffffffff90811660009081526002602052604090205416610a5457610a5461105e565b600061129f8373ffffffffffffffffffffffffffffffffffffffff8416611534565b60005460ff1661136b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610456565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff161561144d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610456565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586113b63390565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600183016020526040812054151561129f565b6000610584825490565b600061129f8383611627565b600081815260018301602052604081205461152c57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610584565b506000610584565b6000818152600183016020526040812054801561161d576000611558600183611824565b855490915060009061156c90600190611824565b90508181146115d157600086600001828154811061158c5761158c61183b565b90600052602060002001549050808760000184815481106115af576115af61183b565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806115e2576115e261186a565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610584565b6000915050610584565b600082600001828154811061163e5761163e61183b565b9060005260206000200154905092915050565b6000806040838503121561166457600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff8116811461127857600080fd5b6000806000606084860312156116ac57600080fd5b6116b584611673565b92506116c360208501611673565b91506116d160408501611673565b90509250925092565b6000602082840312156116ec57600080fd5b61129f82611673565b60006020828403121561170757600080fd5b5035919050565b60006020828403121561172057600080fd5b8151801515811461129f57600080fd5b600060208083528351808285015260005b8181101561175d57858101830151858201604001528201611741565b8181111561176f576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b6000602082840312156117b557600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561181d5761181d6117bc565b5060010190565b600082821015611836576118366117bc565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220f1e9c81b8c3af2491c907ee66cf24e1bb76111b821db02df8f98dbb48b5ab5fa64736f6c634300080a0033608060405234801561001057600080fd5b50610e58806100206000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c806354fd4d5011610081578063c45a01551161005b578063c45a0155146101a4578063c75b5a71146101ca578063d1660f99146101dd57600080fd5b806354fd4d501461014f5780638129fc1c14610157578063c12c21c01461015f57600080fd5b80631afbb7a4116100b25780631afbb7a41461011d5780631cff79cd146101265780633dc54b401461014657600080fd5b806316128211146100d957806317d11a15146100ee57806319a160391461010a575b600080fd5b6100ec6100e7366004610b42565b6101f0565b005b6100f760035481565b6040519081526020015b60405180910390f35b6100ec610118366004610b8d565b61024c565b6100f760025481565b610139610134366004610bef565b6102c9565b6040516101019190610d49565b6100f760045481565b6100f7600181565b6100ec610344565b60015461017f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610101565b60005461017f9062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b6100ec6101d8366004610d5c565b610494565b6100ec6101eb366004610d8f565b61053d565b60015473ffffffffffffffffffffffffffffffffffffffff163314610241576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600291909155600355565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1633146102a3576040517fb126b84800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102c573ffffffffffffffffffffffffffffffffffffffff83168260006105b4565b5050565b60015460609073ffffffffffffffffffffffffffffffffffffffff16331461031d576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033d73ffffffffffffffffffffffffffffffffffffffff8416836107b4565b9392505050565b600054610100900460ff1661035f5760005460ff1615610363565b303b155b6103f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600054610100900460ff1615801561043357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000166101011790555b600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16336201000002179055801561049157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b50565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1633146104eb576040517fb126b84800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff949094169390931790925560025560035543600455565b60015473ffffffffffffffffffffffffffffffffffffffff16331461058e576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105af73ffffffffffffffffffffffffffffffffffffffff841683836107f6565b505050565b80158061065457506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015284169063dd62ed3e90604401602060405180830381865afa15801561062e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106529190610dcb565b155b6106e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e63650000000000000000000060648201526084016103eb565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526105af9084907f095ea7b300000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261084c565b606061033d83836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250610958565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526105af9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401610732565b60006108ae826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166109589092919063ffffffff16565b8051909150156105af57808060200190518101906108cc9190610de4565b6105af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016103eb565b6060610967848460008561096f565b949350505050565b606082471015610a01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016103eb565b843b610a69576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016103eb565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051610a929190610e06565b60006040518083038185875af1925050503d8060008114610acf576040519150601f19603f3d011682016040523d82523d6000602084013e610ad4565b606091505b5091509150610ae4828286610aef565b979650505050505050565b60608315610afe57508161033d565b825115610b0e5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103eb9190610d49565b60008060408385031215610b5557600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff81168114610b8857600080fd5b919050565b60008060408385031215610ba057600080fd5b610ba983610b64565b9150610bb760208401610b64565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215610c0257600080fd5b610c0b83610b64565b9150602083013567ffffffffffffffff80821115610c2857600080fd5b818501915085601f830112610c3c57600080fd5b813581811115610c4e57610c4e610bc0565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715610c9457610c94610bc0565b81604052828152886020848701011115610cad57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b83811015610cea578181015183820152602001610cd2565b83811115610cf9576000848401525b50505050565b60008151808452610d17816020860160208601610ccf565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061033d6020830184610cff565b600080600060608486031215610d7157600080fd5b610d7a84610b64565b95602085013595506040909401359392505050565b600080600060608486031215610da457600080fd5b610dad84610b64565b9250610dbb60208501610b64565b9150604084013590509250925092565b600060208284031215610ddd57600080fd5b5051919050565b600060208284031215610df657600080fd5b8151801515811461033d57600080fd5b60008251610e18818460208701610ccf565b919091019291505056fea2646970667358221220448e7046078cd668c09328d857e534e2aab6cdc0e691d3d4f2c8baae8e084b1364736f6c634300080a003360c06040523480156200001157600080fd5b506040516200162738038062001627833981016040819052620000349162000177565b60408051808201909152600281526105a360f41b60208201526001600160a01b038216620000805760405162461bcd60e51b8152600401620000779190620001a9565b60405180910390fd5b50806001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e6919062000177565b6001600160a01b03166080816001600160a01b031681525050806001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200013e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000164919062000177565b6001600160a01b031660a0525062000201565b6000602082840312156200018a57600080fd5b81516001600160a01b0381168114620001a257600080fd5b9392505050565b600060208083528351808285015260005b81811015620001d857858101830151858201604001528201620001ba565b81811115620001eb576000604083870101525b50601f01601f1916929092016040019392505050565b60805160a0516113c2620002656000396000818161021f0152818161036401526106d501526000818160af0152818161012a015281816104420152818161056e015281816107b301528181610aa601528181610b890152610c6701526113c26000f3fe60806040526004361061005e5760003560e01c80635869dba8116100435780635869dba814610199578063deecfbc9146101bb578063e79a4089146101ce57600080fd5b80634f0e0ef31461011857806354fd4d501461017657600080fd5b366101135760408051808201909152600381527f574732000000000000000000000000000000000000000000000000000000000060208201523373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b60405180910390fd5b50005b600080fd5b34801561012457600080fd5b5061014c7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561018257600080fd5b5061018b600181565b60405190815260200161016d565b3480156101a557600080fd5b506101b96101b4366004611263565b6101ee565b005b6101b96101c936600461128f565b61031d565b3480156101da57600080fd5b506101b96101e93660046112e1565b61068e565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201819052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa15801561027b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061029f9190611318565b6040518060400160405280600281526020017f43500000000000000000000000000000000000000000000000000000000000008152509061030d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b506103188383610a77565b505050565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808516600483015284917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa1580156103ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103d19190611318565b6040518060400160405280600281526020017f52500000000000000000000000000000000000000000000000000000000000008152509061043f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e6919061133a565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600381526020017f57473100000000000000000000000000000000000000000000000000000000008152509061056b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156105d457600080fd5b505af11580156105e8573d6000803e3d6000fd5b50505050506105f78434610b3c565b6040517f9aa5d46200000000000000000000000000000000000000000000000000000000815234600482015273ffffffffffffffffffffffffffffffffffffffff848116602483015261ffff84166044830152851690639aa5d46290606401600060405180830381600087803b15801561067057600080fd5b505af1158015610684573d6000803e3d6000fd5b5050505050505050565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808516600483015284917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa15801561071e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107429190611318565b6040518060400160405280600281526020017f5250000000000000000000000000000000000000000000000000000000000000815250906107b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610833573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610857919061133a565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600381526020017f5747310000000000000000000000000000000000000000000000000000000000815250906108dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b506109703330858773ffffffffffffffffffffffffffffffffffffffff166336dda7d56040518163ffffffff1660e01b8152600401602060405180830381865afa15801561092e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610952919061133a565b73ffffffffffffffffffffffffffffffffffffffff16929190610cd4565b6040517f05fe138b0000000000000000000000000000000000000000000000000000000081526004810184905230602482015260009073ffffffffffffffffffffffffffffffffffffffff8616906305fe138b906044016020604051808303816000875af11580156109e6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0a9190611357565b9050610a168382610a77565b8273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f6de63bb986f2779478e384365c03cc2e62f06b453856acca87d5a519ce02664960405160405180910390a35050505050565b6040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632e1a7d4d90602401600060405180830381600087803b158015610aff57600080fd5b505af1158015610b13573d6000803e3d6000fd5b50610b389250505073ffffffffffffffffffffffffffffffffffffffff831682610d6f565b5050565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015282917f00000000000000000000000000000000000000000000000000000000000000009091169063dd62ed3e90604401602060405180830381865afa158015610bd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf69190611357565b1015610b38576040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303816000875af1158015610cb0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103189190611318565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052610d69908590610ec9565b50505050565b80471015610dd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610107565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114610e33576040519150601f19603f3d011682016040523d82523d6000602084013e610e38565b606091505b5050905080610318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610107565b6000610f2b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16610fd59092919063ffffffff16565b8051909150156103185780806020019051810190610f499190611318565b610318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610107565b6060610fe48484600085610fee565b90505b9392505050565b606082471015611080576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610107565b843b6110e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610107565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516111119190611370565b60006040518083038185875af1925050503d806000811461114e576040519150601f19603f3d011682016040523d82523d6000602084013e611153565b606091505b509150915061116382828661116e565b979650505050505050565b6060831561117d575081610fe7565b82511561118d5782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b60005b838110156111dc5781810151838201526020016111c4565b83811115610d695750506000910152565b602081526000825180602084015261120c8160408501602087016111c1565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461126057600080fd5b50565b6000806040838503121561127657600080fd5b82356112818161123e565b946020939093013593505050565b6000806000606084860312156112a457600080fd5b83356112af8161123e565b925060208401356112bf8161123e565b9150604084013561ffff811681146112d657600080fd5b809150509250925092565b6000806000606084860312156112f657600080fd5b83356113018161123e565b92506020840135915060408401356112d68161123e565b60006020828403121561132a57600080fd5b81518015158114610fe757600080fd5b60006020828403121561134c57600080fd5b8151610fe78161123e565b60006020828403121561136957600080fd5b5051919050565b600082516113828184602087016111c1565b919091019291505056fea264697066735822122017fd7fc76e4a1efcf24b78a3417fad7ab9576f0a23aa756ddb211c5e2227aa9564736f6c634300080a003360806040523480156200001157600080fd5b5060405162002b8038038062002b80833981016040819052620000349162000122565b6001600160a01b0381166200008f5760405162461bcd60e51b815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640160405180910390fd5b6001600160a01b03811660008181526001602052604080822080546001600160601b0319166b204fce5e3e2502611000000090811790915590517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91620000f99190815260200190565b60405180910390a350600680546001600160a81b031916336101000260ff191617905562000154565b6000602082840312156200013557600080fd5b81516001600160a01b03811681146200014d57600080fd5b9392505050565b612a1c80620001646000396000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c806370a08231116100f9578063b4b5ea5711610097578063dd62ed3e11610071578063dd62ed3e14610503578063e7a324dc14610555578063f1127ed81461057c578063f2fde38b146105ee57600080fd5b8063b4b5ea57146104ca578063c3cda520146104dd578063d505accf146104f057600080fd5b806395d89b41116100d357806395d89b411461045b5780639742ca4614610497578063a9059cbb146104aa578063b0660c3d146104bd57600080fd5b806370a08231146103c7578063782d6fe11461040b5780637ecebe001461043b57600080fd5b806330adf81f11610166578063481c6a7511610140578063481c6a751461031e578063587cde1e146103435780635c19a95c146103795780636fcfff451461038c57600080fd5b806330adf81f14610298578063313ce567146102bf578063349dc329146102d957600080fd5b806320606b701161019757806320606b70146102545780632185810b1461027b57806323b872dd1461028557600080fd5b806306fdde03146101be578063095ea7b31461021057806318160ddd14610233575b600080fd5b6101fa6040518060400160405280600781526020017f47656172626f780000000000000000000000000000000000000000000000000081525081565b60405161020791906124a3565b60405180910390f35b61022361021e36600461253f565b610601565b6040519015158152602001610207565b6102466b204fce5e3e2502611000000081565b604051908152602001610207565b6102467f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b61028361070d565b005b610223610293366004612569565b6107ee565b6102467f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b6102c7601281565b60405160ff9091168152602001610207565b6007546102f99073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610207565b6006546102f990610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6102f96103513660046125a5565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6102836103873660046125a5565b61098a565b6103b261039a3660046125a5565b60046020526000908152604090205463ffffffff1681565b60405163ffffffff9091168152602001610207565b6102466103d53660046125a5565b73ffffffffffffffffffffffffffffffffffffffff166000908152600160205260409020546bffffffffffffffffffffffff1690565b61041e61041936600461253f565b610997565b6040516bffffffffffffffffffffffff9091168152602001610207565b6102466104493660046125a5565b60056020526000908152604090205481565b6101fa6040518060400160405280600481526020017f474541520000000000000000000000000000000000000000000000000000000081525081565b6102836104a53660046125a5565b610cae565b6102236104b836600461253f565b610e20565b6006546102239060ff1681565b61041e6104d83660046125a5565b610e5c565b6102836104eb3660046125d1565b610efa565b6102836104fe366004612629565b611310565b610246610511366004612693565b73ffffffffffffffffffffffffffffffffffffffff9182166000908152602081815260408083209390941682529190915220546bffffffffffffffffffffffff1690565b6102467fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b6105c561058a3660046126c6565b600360209081526000928352604080842090915290825290205463ffffffff81169064010000000090046bffffffffffffffffffffffff1682565b6040805163ffffffff90931683526bffffffffffffffffffffffff909116602083015201610207565b6102836105fc3660046125a5565b61187a565b6000807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83141561063f57506bffffffffffffffffffffffff610664565b6106618360405180606001604052806025815260200161285260259139611a15565b90505b3360008181526020818152604080832073ffffffffffffffffffffffffffffffffffffffff89168085529083529281902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff871690811790915590519081529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a360019150505b92915050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314610798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e616765720060448201526064015b60405180910390fd5b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f795b0e16c8da9807b0a215f3749bd6dbcc49fc0472183f4e446abb7dcbd9d00790600090a1565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081815260408083203380855290835281842054825160608101909352602580845291936bffffffffffffffffffffffff909116928592610856928892919061285290830139611a15565b90508673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156108a257506bffffffffffffffffffffffff82811614155b156109725760006108cc83836040518060600160405280603d8152602001612974603d9139611a67565b73ffffffffffffffffffffffffffffffffffffffff898116600081815260208181526040808320948a168084529482529182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff87169081179091559151918252939450919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505b61097d878783611ad5565b5060019695505050505050565b6109943382611e9c565b50565b6000438210610a28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f476561723a3a6765745072696f72566f7465733a206e6f74207965742064657460448201527f65726d696e656400000000000000000000000000000000000000000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff831660009081526004602052604090205463ffffffff1680610a63576000915050610707565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604081208491610a95600185612735565b63ffffffff90811682526020820192909252604001600020541611610b1b5773ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812090610ae5600184612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff1691506107079050565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020908152604080832083805290915290205463ffffffff16831015610b63576000915050610707565b600080610b71600184612735565b90505b8163ffffffff168163ffffffff161115610c565760006002610b968484612735565b610ba0919061275a565b610baa9083612735565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260036020908152604080832063ffffffff8581168552908352928190208151808301909252549283168082526401000000009093046bffffffffffffffffffffffff1691810191909152919250871415610c2a576020015194506107079350505050565b805163ffffffff16871115610c4157819350610c4f565b610c4c600183612735565b92505b5050610b74565b5073ffffffffffffffffffffffffffffffffffffffff8516600090815260036020908152604080832063ffffffff909416835292905220546bffffffffffffffffffffffff6401000000009091041691505092915050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314610d34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e6167657200604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff8116610db1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640161078f565b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f2f834d1c8c4b956018fff5faca4d99868ae635487424d9c265c257ccbc698c6a90600090a250565b600080610e45836040518060600160405280602681526020016128a760269139611a15565b9050610e52338583611ad5565b5060019392505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526004602052604081205463ffffffff1680610e94576000610ef3565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812090610ec5600184612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b9392505050565b604080518082018252600781527f47656172626f780000000000000000000000000000000000000000000000000060209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f028ef9f797075f74ac647c65fde04fb0f128c2d59fd40f45732269917642fd4681840152466060820152306080808301919091528351808303909101815260a0820184528051908301207fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60c083015273ffffffffffffffffffffffffffffffffffffffff8a1660e08301526101008201899052610120808301899052845180840390910181526101408301909452835193909201929092207f19010000000000000000000000000000000000000000000000000000000000006101608401526101628301829052610182830181905290916000906101a201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa1580156110d8573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166111a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f476561723a3a64656c656761746542795369673a20696e76616c69642073696760448201527f6e61747572650000000000000000000000000000000000000000000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff811660009081526005602052604081208054916111d7836127a4565b919050558914611269576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f476561723a3a64656c656761746542795369673a20696e76616c6964206e6f6e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161078f565b874211156112f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f476561723a3a64656c656761746542795369673a207369676e6174757265206560448201527f7870697265640000000000000000000000000000000000000000000000000000606482015260840161078f565b611303818b611e9c565b505050505b505050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86141561134d57506bffffffffffffffffffffffff611372565b61136f8660405180606001604052806024815260200161291c60249139611a15565b90505b604080518082018252600781527f47656172626f780000000000000000000000000000000000000000000000000060209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f028ef9f797075f74ac647c65fde04fb0f128c2d59fd40f45732269917642fd4681840152466060820152306080808301919091528351808303909101815260a0909101835280519082012073ffffffffffffffffffffffffffffffffffffffff8b166000908152600590925291812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918c918c918c919086611472836127a4565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810188905260e001604051602081830303815290604052805190602001209050600082826040516020016115199291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff8b169284019290925260608301899052608083018890529092509060019060a0016020604051602081039080840390855afa1580156115a2573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661164a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a7065726d69743a20696e76616c6964207369676e617475726500604482015260640161078f565b8b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146116df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f476561723a3a7065726d69743a20756e617574686f72697a6564000000000000604482015260640161078f565b88421115611749576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a7065726d69743a207369676e6174757265206578706972656400604482015260640161078f565b846000808e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508a73ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258760405161186491906bffffffffffffffffffffffff91909116815260200190565b60405180910390a3505050505050505050505050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314611900576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e6167657200604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff811661197d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640161078f565b60065460405173ffffffffffffffffffffffffffffffffffffffff80841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36006805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b6000816c010000000000000000000000008410611a5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b509192915050565b6000836bffffffffffffffffffffffff16836bffffffffffffffffffffffff1611158290611ac2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b50611acd83856127dd565b949350505050565b60065460ff1680611b025750600654610100900473ffffffffffffffffffffffffffffffffffffffff1633145b80611b24575060075473ffffffffffffffffffffffffffffffffffffffff1633145b611b8a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f476561723a3a7472616e73666572732061726520666f7262696464656e000000604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff8316611c2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603c60248201527f476561723a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260448201527f616e736665722066726f6d20746865207a65726f206164647265737300000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff8216611cd0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f476561723a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260448201527f616e7366657220746f20746865207a65726f2061646472657373000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260016020908152604091829020548251606081019093526036808452611d2d936bffffffffffffffffffffffff90921692859291906129b190830139611a67565b73ffffffffffffffffffffffffffffffffffffffff848116600090815260016020908152604080832080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff968716179055928616825290829020548251606081019093526030808452611dbf949190911692859290919061287790830139611f50565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260409182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff968716179055905193851684529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a373ffffffffffffffffffffffffffffffffffffffff808416600090815260026020526040808220548584168352912054611e9792918216911683611fc1565b505050565b73ffffffffffffffffffffffffffffffffffffffff808316600081815260026020818152604080842080546001845282862054949093528787167fffffffffffffffffffffffff000000000000000000000000000000000000000084168117909155905191909516946bffffffffffffffffffffffff9092169391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4611f4a828483611fc1565b50505050565b600080611f5d8486612802565b9050846bffffffffffffffffffffffff16816bffffffffffffffffffffffff1610158390611fb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b50949350505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561200b57506000816bffffffffffffffffffffffff16115b15611e975773ffffffffffffffffffffffffffffffffffffffff8316156120fd5773ffffffffffffffffffffffffffffffffffffffff831660009081526004602052604081205463ffffffff1690816120655760006120c4565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812090612096600185612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b905060006120eb82856040518060600160405280602881526020016128cd60289139611a67565b90506120f9868484846121e2565b5050505b73ffffffffffffffffffffffffffffffffffffffff821615611e975773ffffffffffffffffffffffffffffffffffffffff821660009081526004602052604081205463ffffffff1690816121525760006121b1565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812090612183600185612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b905060006121d882856040518060600160405280602781526020016128f560279139611f50565b9050611308858484845b60006122064360405180606001604052806034815260200161294060349139612465565b905060008463ffffffff1611801561226d575073ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812063ffffffff831691612251600188612735565b63ffffffff908116825260208201929092526040016000205416145b156123035773ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812083916122a4600188612735565b63ffffffff168152602081019190915260400160002080546bffffffffffffffffffffffff92909216640100000000027fffffffffffffffffffffffffffffffff000000000000000000000000ffffffff9092169190911790556123fe565b60408051808201825263ffffffff80841682526bffffffffffffffffffffffff808616602080850191825273ffffffffffffffffffffffffffffffffffffffff8b166000908152600382528681208b8616825290915294909420925183549451909116640100000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009094169116179190911790556123a5846001612832565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260046020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff929092169190911790555b604080516bffffffffffffffffffffffff80861682528416602082015273ffffffffffffffffffffffffffffffffffffffff8716917fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724910160405180910390a25050505050565b6000816401000000008410611a5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91905b600060208083528351808285015260005b818110156124d0578581018301518582016040015282016124b4565b818111156124e2576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461253a57600080fd5b919050565b6000806040838503121561255257600080fd5b61255b83612516565b946020939093013593505050565b60008060006060848603121561257e57600080fd5b61258784612516565b925061259560208501612516565b9150604084013590509250925092565b6000602082840312156125b757600080fd5b610ef382612516565b803560ff8116811461253a57600080fd5b60008060008060008060c087890312156125ea57600080fd5b6125f387612516565b9550602087013594506040870135935061260f606088016125c0565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a03121561264457600080fd5b61264d88612516565b965061265b60208901612516565b95506040880135945060608801359350612677608089016125c0565b925060a0880135915060c0880135905092959891949750929550565b600080604083850312156126a657600080fd5b6126af83612516565b91506126bd60208401612516565b90509250929050565b600080604083850312156126d957600080fd5b6126e283612516565b9150602083013563ffffffff811681146126fb57600080fd5b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600063ffffffff8381169083168181101561275257612752612706565b039392505050565b600063ffffffff80841680612798577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156127d6576127d6612706565b5060010190565b60006bffffffffffffffffffffffff8381169083168181101561275257612752612706565b60006bffffffffffffffffffffffff80831681851680830382111561282957612829612706565b01949350505050565b600063ffffffff8083168185168083038211156128295761282961270656fe476561723a3a617070726f76653a20616d6f756e7420657863656564732039362062697473476561723a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e74206f766572666c6f7773476561723a3a7472616e736665723a20616d6f756e7420657863656564732039362062697473476561723a3a5f6d6f7665566f7465733a20766f746520616d6f756e7420756e646572666c6f7773476561723a3a5f6d6f7665566f7465733a20766f746520616d6f756e74206f766572666c6f7773476561723a3a7065726d69743a20616d6f756e7420657863656564732039362062697473476561723a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d62657220657863656564732033322062697473476561723a3a7472616e7366657246726f6d3a207472616e7366657220616d6f756e742065786365656473207370656e64657220616c6c6f77616e6365476561723a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e7420657863656564732062616c616e6365a26469706673582212201b84fd7789a35c022f692420863210a30e82d2405659f5a28275d433fa53467f64736f6c634300080a003360806040526016805460ff1916905534801561001a57600080fd5b506040516110a73803806110a7833981016040819052610039916100b6565b600080546001600160a01b038085166001600160a01b0319928316179092556003805492841692909116919091179055610080600a6b033b2e3c9fd0803ce80000006100e9565b60075550506b033b2e3c9fd0803ce800000060155561010b565b80516001600160a01b03811681146100b157600080fd5b919050565b600080604083850312156100c957600080fd5b6100d28361009a565b91506100e06020840161009a565b90509250929050565b60008261010657634e487b7160e01b600052601260045260246000fd5b500490565b610f8d8061011a6000396000f3fe608060405234801561001057600080fd5b50600436106102e95760003560e01c806367c99d5811610191578063c5f956af116100e3578063dbcb313b11610097578063f11a648711610071578063f11a648714610320578063f3fdb15a146105f1578063fe14112d1461061157600080fd5b8063dbcb313b146105d6578063e941fa78146105df578063ef8d9603146105e857600080fd5b8063cb3905e1116100c8578063cb3905e1146105c4578063cf33d95514610320578063d0efe753146105cd57600080fd5b8063c5f956af14610588578063ca9505e4146105a857600080fd5b80639aa5d46211610145578063b6ac642a1161011f578063b6ac642a14610567578063bb04b19314610567578063bf28068b1461057557600080fd5b80639aa5d46214610544578063a4e8273e14610557578063b3554a0a1461055e57600080fd5b8063788c6bfe11610176578063788c6bfe146104ef5780638456cb591461050157806396df5dc01461053157600080fd5b806367c99d58146104de57806374375359146104e757600080fd5b806336dda7d51161024a5780634d778ad1116101fe57806354fd4d50116101d857806354fd4d50146104c05780635c975abb146104c8578063609ae317146104d557600080fd5b80634d778ad114610491578063532fe502146104a45780635427c938146104ad57600080fd5b80633f4ba83a1161022f5780633f4ba83a1461045257806345d31f9d1461047f5780634c19386c1461048857600080fd5b806336dda7d51461040f5780633e163df01461042f57600080fd5b80632495a599116102a157806329f3d3b61161028657806329f3d3b6146103b35780632a3354c9146103bc5780632e97ca21146103dc57600080fd5b80632495a599146103735780632954018c1461039357600080fd5b8063078c4781116102d2578063078c4781146103205780630fce70fb146103335780631e16e4fc1461033b57600080fd5b8063030dbb04146102ee57806305fe138b1461030a575b600080fd5b6102f760105481565b6040519081526020015b60405180910390f35b6102f7610318366004610ce8565b600092915050565b61033161032e366004610d14565b50565b005b6015546102f7565b61034e610349366004610d2f565b610618565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610301565b60035461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b60005461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6102f760095481565b600a5461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103ff6103ea366004610d14565b60066020526000908152604090205460ff1681565b6040519015158152602001610301565b60055461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103ff61043d366004610d14565b60146020526000908152604090205460ff1681565b610331601680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b6102f760075481565b6102f760015481565b6102f761049f366004610d2f565b61064f565b6102f760115481565b6102f76104bb366004610d2f565b61066d565b6102f7600181565b6016546103ff9060ff1681565b6102f760085481565b6102f7600d5481565b6102f7610685565b6b033b2e3c9fd0803ce80000006102f7565b610331601680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b61033161053f366004610d2f565b601555565b610331610552366004610d48565b505050565b60016102f7565b6102f7600e5481565b61033161032e366004610d2f565b610331610583366004610ce8565b61071d565b60135461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103316105b6366004610d7d565b600b92909255600c55600d55565b6102f7600c5481565b6102f7600b5481565b6102f760155481565b6102f7600f5481565b6102f760025481565b60125461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b60006102f7565b6004818154811061062857600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6000610667826b033b2e3c9fd0803ce800000061077a565b92915050565b6000610667826b033b2e3c9fd0803ce80000006108e9565b6003546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156106f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107189190610da9565b905090565b6009829055600a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691909117909155600354610776911682846109fe565b5050565b60408051808201909152600281527f4d330000000000000000000000000000000000000000000000000000000000006020820152600090826107f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b60405180910390fd5b506000610800600284610e72565b90506b033b2e3c9fd0803ce8000000610839827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610ead565b6108439190610e72565b8411156040518060400160405280600281526020017f4d31000000000000000000000000000000000000000000000000000000000000815250906108b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b5082816108cd6b033b2e3c9fd0803ce800000087610ec4565b6108d79190610f01565b6108e19190610e72565b949350505050565b60008215806108f6575081155b1561090357506000610667565b8161091b60026b033b2e3c9fd0803ce8000000610e72565b610945907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610ead565b61094f9190610e72565b8311156040518060400160405280600281526020017f4d31000000000000000000000000000000000000000000000000000000000000815250906109c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b506b033b2e3c9fd0803ce80000006109d9600282610e72565b6109e38486610ec4565b6109ed9190610f01565b6109f79190610e72565b9392505050565b6040805173ffffffffffffffffffffffffffffffffffffffff848116602483015260448083018590528351808403909101815260649092018352602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65649084015261055292869291600091610ac9918516908490610b73565b8051909150156105525780806020019051810190610ae79190610f19565b610552576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016107e9565b60606108e1848460008585843b610be6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107e9565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051610c0f9190610f3b565b60006040518083038185875af1925050503d8060008114610c4c576040519150601f19603f3d011682016040523d82523d6000602084013e610c51565b606091505b5091509150610c61828286610c6c565b979650505050505050565b60608315610c7b5750816109f7565b825115610c8b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ce357600080fd5b919050565b60008060408385031215610cfb57600080fd5b82359150610d0b60208401610cbf565b90509250929050565b600060208284031215610d2657600080fd5b6109f782610cbf565b600060208284031215610d4157600080fd5b5035919050565b600080600060608486031215610d5d57600080fd5b83359250610d6d60208501610cbf565b9150604084013590509250925092565b600080600060608486031215610d9257600080fd5b505081359360208301359350604090920135919050565b600060208284031215610dbb57600080fd5b5051919050565b60005b83811015610ddd578181015183820152602001610dc5565b83811115610dec576000848401525b50505050565b6020815260008251806020840152610e11816040850160208701610dc2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082610ea8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600082821015610ebf57610ebf610e43565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610efc57610efc610e43565b500290565b60008219821115610f1457610f14610e43565b500190565b600060208284031215610f2b57600080fd5b815180151581146109f757600080fd5b60008251610f4d818460208701610dc2565b919091019291505056fea26469706673582212204edb887d94928b3914f60ab48df0182da9eb30ddbb7021b164cc728b60a655d564736f6c634300080a003360e06040523480156200001157600080fd5b5060405162013af238038062013af2833981016040819052620000349162000630565b826001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000073573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000999190620007bf565b620000a433620004ab565b6001600160a01b038116608081905260408051630873769560e01b815290516308737695916004808201926020929091908290030181865afa158015620000ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001159190620007bf565b6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000153573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001799190620007bf565b6001600160a01b0390811660a052841660c0525060405183906200019d9062000519565b6001600160a01b039091168152602001604051809103906000f080158015620001ca573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b0392909216918217905560608301516080840151604051620002029062000527565b6001600160a01b03938416815292909116602083015215156040820152606001604051809103906000f0801580156200023f573d6000803e3d6000fd5b50600280546001600160a01b0319166001600160a01b0392909216919091179055604051600090620002746020820162000535565b601f1982820381018352601f909101166040819052600154600254620002b0926001600160a01b039283169291909116908790602001620007e6565b60408051601f1981840301815290829052620002d09291602001620008e8565b60408051601f19818403018152919052905060006200035982848151602092830120604080517fff00000000000000000000000000000000000000000000000000000000000000818601523060601b6001600160601b03191660218201526035810193909352605580840192909252805180840390920182526075909201909152805191012090565b600154604051634fafc35760e11b81526001600160a01b038084166004830152929350911690639f5f86ae90602401600060405180830381600087803b158015620003a357600080fd5b505af1158015620003b8573d6000803e3d6000fd5b50505050620003ce8284620004fb60201b60201c565b600380546001600160a01b0319166001600160a01b0383811691821790925560015460408051630304b08760e61b81529051919093169263c12c21c09160048083019260209291908290030181865afa15801562000430573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004569190620007bf565b6001600160a01b031614620004a05760405162461bcd60e51b815260206004820152600c60248201526b496e636f727265637420434d60a01b604482015260640160405180910390fd5b505050505062000909565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008183516020850134f59050803b6200051457600080fd5b505050565b6158e8806200243683390190565b615e978062007d1e83390190565b615f3d806200dbb583390190565b6001600160a01b03811681146200055957600080fd5b50565b8051620005698162000543565b919050565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b0381118282101715620005a957620005a96200056e565b60405290565b604080519081016001600160401b0381118282101715620005a957620005a96200056e565b604051601f8201601f191681016001600160401b0381118282101715620005ff57620005ff6200056e565b604052919050565b80516001600160801b03811681146200056957600080fd5b805180151581146200056957600080fd5b6000806000606084860312156200064657600080fd5b8351620006538162000543565b602085810151919450906001600160401b03808211156200067357600080fd5b9086019060a082890312156200068857600080fd5b6200069262000584565b6200069d8362000607565b8152620006ac84840162000607565b8482015260408084015183811115620006c457600080fd5b8401601f81018b13620006d657600080fd5b805184811115620006eb57620006eb6200056e565b620006fb878260051b01620005d4565b818152878101955060069190911b82018701908c8211156200071c57600080fd5b918701915b818310156200077e5783838e0312156200073b5760008081fd5b62000745620005af565b8351620007528162000543565b81528389015161ffff811681146200076a5760008081fd5b818a01528652948701949183019162000721565b8484015250620007939050606085016200055c565b6060830152620007a6608085016200061f565b6080830152979097015195989697509495945050505050565b600060208284031215620007d257600080fd5b8151620007df8162000543565b9392505050565b600060018060a01b0380861683526020818616818501526040606081860152610100850160018060801b038088511660608801528084890151166080880152508187015160a080880152818151808452610120890191508583019350600092505b808310156200087857835180518816835286015161ffff168683015292850192600192909201919084019062000847565b5060608901516001600160a01b031660c0890152608090980151151560e0909701969096525094979650505050505050565b6000815160005b81811015620008cd5760208185018101518683015201620008b1565b81811115620008dd576000828601525b509290920192915050565b600062000901620008fa8386620008aa565b84620008aa565b949350505050565b60805160a05160c051611ad3620009636000396000818161010a0152610ea00152600081816103790152610b170152600081816101680152818161068c01528181610a4d01528181610b860152610c190152611ad36000f3fe6080604052600436106100f35760003560e01c80638da5cb5b1161008a578063ebf0c71711610059578063ebf0c71714610367578063f2fde38b1461039b578063f4747c58146103bb578063f9aa028a146103db57600080fd5b80638da5cb5b1461025a57806394ca2cb5146102855780639c4ae2d014610327578063c12c21c01461033a57600080fd5b80633e0b1a23116100c65780633e0b1a23146101ce5780634ef501ac146101e3578063715018a614610230578063805abe6a1461024557600080fd5b806316f0115b146100f85780632954018c146101565780632f7a18811461018a578063318d0d10146101b7575b600080fd5b34801561010457600080fd5b5061012c7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561016257600080fd5b5061012c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561019657600080fd5b5060025461012c9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156101c357600080fd5b506101cc610408565b005b3480156101da57600080fd5b506101cc610498565b3480156101ef57600080fd5b506102036101fe366004611726565b610521565b6040805173ffffffffffffffffffffffffffffffffffffffff93841681529290911660208301520161014d565b34801561023c57600080fd5b506101cc610567565b34801561025157600080fd5b506101cc6105f2565b34801561026657600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff1661012c565b34801561029157600080fd5b5061012c6102a03660046117e6565b8151602092830120604080517fff00000000000000000000000000000000000000000000000000000000000000818601523060601b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660218201526035810193909352605580840192909252805180840390920182526075909201909152805191012090565b6101cc6103353660046117e6565b6107d8565b34801561034657600080fd5b5060015461012c9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561037357600080fd5b5061012c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103a757600080fd5b506101cc6103b63660046118c0565b6107f5565b3480156103c757600080fd5b506101cc6103d63660046118e4565b610925565b3480156103e757600080fd5b5060035461012c9073ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff16331461048e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b610496610a49565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610519576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b61048e610b82565b6004818154811061053157600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff91821692501682565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b61049660006116b1565b60005473ffffffffffffffffffffffffffffffffffffffff163314610673576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b3073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106f5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071991906119c4565b73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610763573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078791906119c4565b73ffffffffffffffffffffffffffffffffffffffff1614156107d5576040517fbdebb83f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33ff5b60008183516020850134f59050803b6107f057600080fd5b505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b73ffffffffffffffffffffffffffffffffffffffff8116610919576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610485565b610922816116b1565b50565b60005473ffffffffffffffffffffffffffffffffffffffff1633146109a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b805160005b818110156107f05760048382815181106109c7576109c76119e1565b602090810291909101810151825460018082018555600094855293839020825160029092020180547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff938416178255929093015192840180549092169216919091179055016109ab565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ab6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ada91906119c4565b6040517ff2fde38b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301529192509082169063f2fde38b90602401600060405180830381600087803b158015610b6757600080fd5b505af1158015610b7b573d6000803e3d6000fd5b5050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1391906119c4565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca691906119c4565b60045490915060005b81811015610dd4576003546004805473ffffffffffffffffffffffffffffffffffffffff90921691637bccacee919084908110610cee57610cee6119e1565b906000526020600020906002020160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660048481548110610d3357610d336119e1565b600091825260209091206002909102015460405160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b158015610db157600080fd5b505af1158015610dc5573d6000803e3d6000fd5b50505050806001019050610caf565b506001546040517fe26b2f6300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529084169063e26b2f6390602401600060405180830381600087803b158015610e4257600080fd5b505af1158015610e56573d6000803e3d6000fd5b50506001546040517fcf33d95500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201527f0000000000000000000000000000000000000000000000000000000000000000909116925063cf33d9559150602401600060405180830381600087803b158015610ee857600080fd5b505af1158015610efc573d6000803e3d6000fd5b50505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f919190611a10565b905060005b818110156116ab576003546040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810183905260009173ffffffffffffffffffffffffffffffffffffffff1690635094cb4f90602401602060405180830381865afa15801561100e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103291906119c4565b6001546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80841660048301529293506000929091169063fdd5764590602401602060405180830381865afa1580156110a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110cc91906119c4565b905060008173ffffffffffffffffffffffffffffffffffffffff1663ce30bbdb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561111b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113f9190611a29565b9050600c81601081111561115557611155611a4a565b14156116225760008273ffffffffffffffffffffffffffffffffffffffff166320b2c1516040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111cc91906119c4565b905060008373ffffffffffffffffffffffffffffffffffffffff1663927188d96040518163ffffffff1660e01b8152600401602060405180830381865afa15801561121b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123f91906119c4565b905060008473ffffffffffffffffffffffffffffffffffffffff166399253ac06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561128e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b291906119c4565b6040517f9dcb511a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152919250908a169063e8a97a3e9083908390639dcb511a90602401602060405180830381865afa15801561132c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135091906119c4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156113bd57600080fd5b505af11580156113d1573d6000803e3d6000fd5b50506040517f9dcb511a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301528c16925063e8a97a3e915085908390639dcb511a90602401602060405180830381865afa15801561144b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061146f91906119c4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156114dc57600080fd5b505af11580156114f0573d6000803e3d6000fd5b50506003546001546040517f7832743800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301529283169450633e7c88d69350879290911690637832743890602401602060405180830381865afa158015611573573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115979190611a79565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015261ffff166024820152604401600060405180830381600087803b15801561160657600080fd5b505af115801561161a573d6000803e3d6000fd5b505050505050505b600d81601081111561163657611636611a4a565b141561169d578173ffffffffffffffffffffffffffffffffffffffff16639b51ecd36040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561168457600080fd5b505af1158015611698573d6000803e3d6000fd5b505050505b836001019350505050610f96565b50505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561173857600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156117915761179161173f565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156117de576117de61173f565b604052919050565b600080604083850312156117f957600080fd5b823567ffffffffffffffff8082111561181157600080fd5b818501915085601f83011261182557600080fd5b81356020828211156118395761183961173f565b611869817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011601611797565b9250818352878183860101111561187f57600080fd5b8181850182850137600091830181019190915290969401359450505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461092257600080fd5b6000602082840312156118d257600080fd5b81356118dd8161189e565b9392505050565b600060208083850312156118f757600080fd5b823567ffffffffffffffff8082111561190f57600080fd5b818501915085601f83011261192357600080fd5b8135818111156119355761193561173f565b611943848260051b01611797565b818152848101925060069190911b83018401908782111561196357600080fd5b928401925b818410156119b957604084890312156119815760008081fd5b61198961176e565b84356119948161189e565b8152848601356119a38161189e565b8187015283526040939093019291840191611968565b979650505050505050565b6000602082840312156119d657600080fd5b81516118dd8161189e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215611a2257600080fd5b5051919050565b600060208284031215611a3b57600080fd5b8151601181106118dd57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060208284031215611a8b57600080fd5b815161ffff811681146118dd57600080fdfea264697066735822122090f5e4310a8b66bfdd7fdfbe64bc5b98570e7c1a415ffb0ced3c857cf6c5b14064736f6c634300080a00336101606040526000805462ff00001916620c00001790553480156200002357600080fd5b50604051620058e8380380620058e8833981016040819052620000469162000537565b806001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000085573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ab919062000537565b6000805460ff191690556001600160a01b038116620000dd57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200011c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000142919062000537565b6001600160a01b03166080816001600160a01b031681525050506000816001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200019d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c3919062000537565b6001600160a01b03831661010081905260e081905260408051632495a59960e01b81529051929350600092632495a599916004808201926020929091908290030181865afa1580156200021a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000240919062000537565b6001600160a01b03811660c05290506200025a8162000472565b816001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000299573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002bf919062000537565b6001600160a01b0316610120816001600160a01b031681525050816001600160a01b03166377532ed96040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000318573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033e919062000537565b6001600160a01b0316610140816001600160a01b031681525050816001600160a01b031663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000397573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003bd919062000537565b6001600001600a6101000a8154816001600160a01b0302191690836001600160a01b03160217905550816001600160a01b0316639068a8686040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000425573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044b919062000537565b6001600160a01b031660a0525050600380546001600160a01b031916331790555062000588565b6001600160a01b03811660009081526006602052604090205415620004aa57604051632e5a5c7760e01b815260040160405180910390fd5b61010060055410620004cf57604051631cbbe18560e01b815260040160405180910390fd5b600580546001600160a01b0383166000818152600660209081526040808320600190951b948590558483526004909152812091909155825491929062000515836200055e565b91905055505050565b6001600160a01b03811681146200053457600080fd5b50565b6000602082840312156200054a57600080fd5b815162000557816200051e565b9392505050565b60006000198214156200058157634e487b7160e01b600052601160045260246000fd5b5060010190565b60805160a05160c05160e051610100516101205161014051615248620006a0600039600081816107e20152818161371001526137c501526000818161052f01526136780152600081816103d301528181610e5701528181610ebb015281816124ff0152818161265a01528181612aa101528181612b8c01528181612c4e01528181612d0d0152613b8f015260006105a401526000818161062701528181610d2201528181610db301528181610e0001528181610e3601528181610f3f0152818161203a01528181612b6b015281816130ee015281816134dc015281816135a90152613fe601526000818161081c01528181610fe101526124c20152600081816107a80152818161118401526122cb01526152486000f3fe608060405234801561001057600080fd5b50600436106103415760003560e01c8063830aa745116101bd578063a70bc542116100f9578063e75538c7116100a2578063f9aa028a1161007c578063f9aa028a1461089d578063fdd57645146108bd578063fe47cde7146108f3578063ff6875431461091357600080fd5b8063e75538c714610864578063e958b70414610877578063f67c5bd01461088a57600080fd5b8063db7ceb80116100d3578063db7ceb8014610817578063dc2b21c11461083e578063e1998cf91461085157600080fd5b8063a70bc542146107ca578063c5e10eef146107dd578063d48bfca71461080457600080fd5b806394cf073a116101665780639f5f86ae116101405780639f5f86ae146107745780639fd12b7714610787578063a366f49614610790578063a50cf2c8146107a357600080fd5b806394cf073a146106f557806395373018146107085780639af1d35a1461071b57600080fd5b80638991b2f1116101975780638991b2f1146106af5780638fe3f93f146106cf578063944ac59f146106e257600080fd5b8063830aa7451461066f5780638345f26e146106825780638456cb59146106a757600080fd5b8063458936f51161028c578063570a7af2116102355780636ce4074a1161020f5780636ce4074a146105ef5780636e98e5e41461060f5780636f307dc314610622578063783274381461064957600080fd5b8063570a7af21461059f5780635c975abb146105c6578063654a9eda146105dc57600080fd5b80635063524a116102665780635063524a1461055157806351e3f1601461058457806354fd4d501461059757600080fd5b8063458936f51461050e57806346fb371d146105175780634f0e0ef31461052a57600080fd5b80632630c12f116102ee5780633192195c116102c85780633192195c146104be5780633e8297ca146104e65780633f4ba83a1461050657600080fd5b80632630c12f1461045857806329df0b93146104845780632f7a18811461049757600080fd5b806316f0115b1161031f57806316f0115b146103ce578063172c48c7146103f55780632362a2d81461043757600080fd5b8063055ee9b5146103465780630d8f9cee146103a657806311ca4fc2146103bb575b600080fd5b61037c610354366004614a87565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6103b96103b4366004614aa4565b610949565b005b6103b96103c9366004614aa4565b610a76565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b610408610403366004614add565b610b4e565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835261ffff90911660208301520161039d565b61044a610445366004614b13565b610b66565b60405190815260200161039d565b6001546a0100000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1661037c565b6103b9610492366004614a87565b6110be565b60005461037c906301000000900473ffffffffffffffffffffffffffffffffffffffff1681565b6104d16104cc366004614a87565b611122565b6040805192835260208301919091520161039d565b61044a6104f4366004614a87565b60096020526000908152604090205481565b6103b9611156565b61044a60055481565b6103b9610525366004614b95565b611244565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b61056461055f366004614be6565b61149b565b60408051948552602085019390935291830152606082015260800161039d565b6103b9610592366004614aa4565b611602565b61044a600281565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b60005460ff16604051901515815260200161039d565b6103b96105ea366004614c21565b611703565b6106026105fd366004614d40565b611bbb565b60405161039d9190614e5b565b6103b961061d366004614aa4565b611e8e565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b61065c610657366004614a87565b612036565b60405161ffff909116815260200161039d565b6103b961067d366004614b95565b61210f565b6000546106959062010000900460ff1681565b60405160ff909116815260200161039d565b6103b961229d565b61044a6106bd366004614a87565b60086020526000908152604090205481565b61037c6106dd366004614e6e565b612389565b6103b96106f0366004614ea5565b612718565b61044a610703366004614f0a565b612845565b6103b9610716366004614a87565b612e5a565b6001546040805161ffff808416825262010000840481166020830152640100000000840481169282019290925266010000000000008304821660608201526801000000000000000090920416608082015260a00161039d565b6103b9610782366004614a87565b612f85565b61044a60075481565b6103b961079e366004614add565b613045565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b96107d8366004614f4c565b61309b565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b9610812366004614a87565b613221565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b961084c366004614f81565b61327b565b6103b961085f366004614aa4565b613306565b610408610872366004614add565b6134c9565b61037c610885366004614a87565b613541565b61044a610898366004614a87565b6135a5565b60035461037c9073ffffffffffffffffffffffffffffffffffffffff1681565b61037c6108cb366004614a87565b600b6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b600c5461037c9073ffffffffffffffffffffffffffffffffffffffff1681565b61037c610921366004614a87565b600a6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561099b57506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b156109d2576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff1615610a14576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055610a4a828261362e565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b60035473ffffffffffffffffffffffffffffffffffffffff163314610ac7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805473ffffffffffffffffffffffffffffffffffffffff9384166301000000027fffffffffffffffffff0000000000000000000000000000000000000000ffffff90911617905560018054919092166a0100000000000000000000027fffff0000000000000000000000000000000000000000ffffffffffffffffffff909116179055565b600080610b5d6001841b6134c9565b91509150915091565b6000805460ff1615610bd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064015b60405180910390fd5b600054610100900460ff1615610c1b576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff163314610ca0576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610cab89613541565b90506000806000806000610cbe86611122565b9094509050610ccf8c8e868461149b565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152939b5093985090955093506000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015610d6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8f9190614fa4565b9050610d9b8887614fec565b610da6906001614fec565b811115610de657610de1877f00000000000000000000000000000000000000000000000000000000000000008d60018c8b870303038d61366e565b610e30565b610e3073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168d8960018a8d01869003016138c0565b610e7e877f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000089600061366e565b6040517fca9505e40000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604481018490527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ca9505e490606401600060405180830381600087803b158015610f1457600080fd5b505af1158015610f28573d6000803e3d6000fd5b50505050505050506001841115610f6757610f67837f00000000000000000000000000000000000000000000000000000000000000008d87600061366e565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260086020526040902054861916610f9c8489888461395b565b6040517f89b77b3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f000000000000000000000000000000000000000000000000000000000000000016906389b77b3e90602401600060405180830381600087803b15801561102557600080fd5b505af1158015611039573d6000803e3d6000fd5b50505073ffffffffffffffffffffffffffffffffffffffff909c16600090815260026020526040812080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550929a9950505050505050505050565b6000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314611116576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61111f81613a35565b50565b60008060008061113185613aa6565b91955092509050816111438286615004565b61114d9190615041565b92505050915091565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156111e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611204919061507c565b61123a576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611242613c24565b565b60005460ff16156112b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156112f3576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100178155338152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff9081169084161480159061137457506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b80156113985750600c5473ffffffffffffffffffffffffffffffffffffffff163314155b806113b7575073ffffffffffffffffffffffffffffffffffffffff8316155b156113ee576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113f7826135a5565b61142d576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061143885613541565b9050611448838583856000613d05565b61146c5761145b83858360006001613d05565b5061146a838583856001613d05565b505b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b6001546000908190819081906127109061ffff166114b98888615099565b6114c39190615004565b6114cd9190615041565b6114d79086614fec565b935060018760028111156114ed576114ed6150b0565b1415611587576001546000906127109061151390640100000000900461ffff168b615004565b61151d9190615041565b6001549091506127109061153b9062010000900461ffff168b615004565b6115459190615041565b61154f9086614fec565b94508481111561156657600185820303935061156a565b8094505b85811061157b578585039250611581565b84860391505b506115f7565b600287600281111561159b5761159b6150b0565b14156115f157600154600090612710906115c59068010000000000000000900461ffff168b615004565b6115cf9190615041565b6001549091506127109061153b906601000000000000900461ffff168b615004565b84840391505b945094509450949050565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561165457506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b1561168b576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff16156116cd576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055610a4a8282613ea6565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561175557506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b1561178c576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff16156117ce576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790556118048584613ea6565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152600091908616906370a0823190602401602060405180830381865afa158015611874573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118989190614fa4565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529192506000918616906370a0823190602401602060405180830381865afa15801561190a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192e9190614fa4565b60015490915060009081906a0100000000000000000000900473ffffffffffffffffffffffffffffffffffffffff16635cecbd0e61196c8689615099565b8a6119778988615099565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152600481019390935273ffffffffffffffffffffffffffffffffffffffff918216602484015260448301528a1660648201526084016040805180830381865afa1580156119f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1791906150df565b9150915060018411611a2d57611a2d898961362e565b611a3687612036565b611a449061ffff1682615004565b9050611a4f88612036565b611a5d9061ffff1683615004565b9150818110611a7857611a6f89613a35565b5050505061146c565b73ffffffffffffffffffffffffffffffffffffffff891660009081526009602052604081205483611ab56b033b2e3c9fd0803ce800000085615004565b611abf9190615041565b611ad5906b033b2e3c9fd0803ce8000000615099565b611adf9190614fec565b60015490915061271090611b0a906b033b2e3c9fd0803ce80000009062010000900461ffff16615004565b611b149190615041565b8111611b555773ffffffffffffffffffffffffffffffffffffffff8a166000908152600960205260409020819055611b4b8a613a35565b505050505061146c565b611b5e8a613f56565b50505073ffffffffffffffffffffffffffffffffffffffff871660009081526009602052604090206001905550505050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b6060611bc960005460ff1690565b15611c30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff1615611c72576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100178155338152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff908116908416141580611ce7575073ffffffffffffffffffffffffffffffffffffffff8316155b15611d3d57600c5473ffffffffffffffffffffffffffffffffffffffff163314611d3d576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611d4885613541565b90508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167faed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab0360405160405180910390a36040517f1cff79cd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821690631cff79cd90611df89087908790600401615103565b6000604051808303816000875af1158015611e17573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611e5d9190810190615132565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905595945050505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314611edf576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821615611f4f5773ffffffffffffffffffffffffffffffffffffffff8281166000908152600a6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169183169190911790555b73ffffffffffffffffffffffffffffffffffffffff811615611fbf5773ffffffffffffffffffffffffffffffffffffffff8181166000908152600b6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169184169190911790555b73ffffffffffffffffffffffffffffffffffffffff811673cccccccccccccccccccccccccccccccccccccccc141561203257600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790555b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120ba5750506001547e01000000000000000000000000000000000000000000000000000000000000900461ffff1690565b60006120c5836135a5565b9050806120fe576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612107816134c9565b949350505050565b60005460ff161561217c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156121be576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff163314612243576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61224d8383613ea6565b61226f73ffffffffffffffffffffffffffffffffffffffff83168585846138c0565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555050565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015612327573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061234b919061507c565b612381576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112426142d4565b6000805460ff16156123f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff1615612439576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff1633146124be576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166321d18456857f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612568573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061258c9190614fa4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168152600481019290925260248201526044016020604051808303816000875af11580156125e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061260b91906151a0565b6040517fbf28068b0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff80831660248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063bf28068b90604401600060405180830381600087803b1580156126a057600080fd5b505af11580156126b4573d6000803e3d6000fd5b505050506126c28382614394565b73ffffffffffffffffffffffffffffffffffffffff811660009081526008602052604081206001905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690559392505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314612769576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805461ffff92831668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9484166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff96851664010000000002969096167fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff97851662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000090931694909816939093171794909416949094179190911716919091179055565b6000805460ff16156128b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156128f5576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff16331461297a576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080600061298887613aa6565b925092509250846129a25761299d8684615099565b6129ac565b6129ac8684614fec565b935060008515612b045769021e19e0c9bab24000008510612a15576129d583603689901c615004565b6129e3603686901c84615004565b6129ed9190614fec565b603686901c6129fc8585615004565b612a069190615004565b612a109190615041565b612a52565b612a1f8388615004565b612a298584615004565b612a339190614fec565b85612a3e8585615004565b612a489190615004565b612a529190615041565b6040517fbf28068b0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff8a811660248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063bf28068b90604401600060405180830381600087803b158015612ae757600080fd5b505af1158015612afb573d6000803e3d6000fd5b50505050612d9f565b60008484612b128583615004565b612b1c9190615041565b612b269190615099565b60015490915060009061271090612b419061ffff1684615004565b612b4b9190615041565b905073ffffffffffffffffffffffffffffffffffffffff8a1663d1660f997f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000084612bb6878f614fec565b612bc09190614fec565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b158015612c3457600080fd5b505af1158015612c48573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ca9505e4838b612c949190614fec565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815260048101919091526024810184905260006044820152606401600060405180830381600087803b158015612cf357600080fd5b505af1158015612d07573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d9a9190614fa4565b925050505b6040517f16128211000000000000000000000000000000000000000000000000000000008152600481018690526024810182905273ffffffffffffffffffffffffffffffffffffffff891690631612821190604401600060405180830381600087803b158015612e0e57600080fd5b505af1158015612e22573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055509498975050505050505050565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff16158015612eac57506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b15612ee3576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff1615612f25576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055612f5a81613f56565b50600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b60035473ffffffffffffffffffffffffffffffffffffffff163314612fd6576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517ff62005acebe9b616aefb5f248b48f5e89f28437b27d1eebc0b2d911209f297af90600090a250565b60035473ffffffffffffffffffffffffffffffffffffffff163314613096576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600755565b60035473ffffffffffffffffffffffffffffffffffffffff1633146130ec576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613193576001805461ffff83167e01000000000000000000000000000000000000000000000000000000000000027dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790555050565b600061319e836135a5565b9050806131d7576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000908152600460205260409020805473ffffffffffffffffffffffffffffffffffffffff1675ffff000000000000000000000000000000000000000060a084901b161790555050565b60035473ffffffffffffffffffffffffffffffffffffffff163314613272576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61111f81614467565b60035473ffffffffffffffffffffffffffffffffffffffff1633146132cc576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805460ff90921662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff909216919091179055565b60005460ff1615613373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156133b5576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff16331461343a576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061344583613541565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260026020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055905061349c8282614394565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b60008082600114156135275750506001547f0000000000000000000000000000000000000000000000000000000000000000927e0100000000000000000000000000000000000000000000000000000000000090910461ffff169150565b50506000908152600460205260409020549060a082901c90565b73ffffffffffffffffffffffffffffffffffffffff80821660009081526002602052604090205416806135a0576040517fb5ba4c4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146136255773ffffffffffffffffffffffffffffffffffffffff8216600090815260066020526040902054613628565b60015b92915050565b6000613639826135a5565b73ffffffffffffffffffffffffffffffffffffffff909316600090815260086020526040902080549319939093169092555050565b8080156136c657507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b15613828576040517fd1660f9900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301526044820184905286169063d1660f9990606401600060405180830381600087803b15801561376357600080fd5b505af1158015613777573d6000803e3d6000fd5b50506040517f5869dba800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690527f0000000000000000000000000000000000000000000000000000000000000000169250635869dba89150604401600060405180830381600087803b15801561380b57600080fd5b505af115801561381f573d6000803e3d6000fd5b505050506138b9565b6040517fd1660f9900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301526044820184905286169063d1660f9990606401600060405180830381600087803b1580156138a057600080fd5b505af11580156138b4573d6000803e3d6000fd5b505050505b5050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261395590859061455b565b50505050565b60025b8181116138b95781811615613a2d576000613978826134c9565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529192506000918316906370a0823190602401602060405180830381865afa1580156139eb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a0f9190614fa4565b90506002811115613a2a57613a2a878388600185038961366e565b50505b60011b61395e565b73ffffffffffffffffffffffffffffffffffffffff811660009081526008602052604081205490613a6582614667565b60005490915062010000900460ff16811115613aa1576000613a86836146a7565b613a91906001614fec565b905061395584848460008561470b565b505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff16631afbb7a46040518163ffffffff1660e01b8152600401602060405180830381865afa158015613af6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b1a9190614fa4565b92508373ffffffffffffffffffffffffffffffffffffffff166317d11a156040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b8b9190614fa4565b91507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bf8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c1c9190614fa4565b929491935050565b60005460ff16613c90576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610bd0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6040805173ffffffffffffffffffffffffffffffffffffffff8681166024830152604480830186905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b30000000000000000000000000000000000000000000000000000000017905291517f1cff79cd000000000000000000000000000000000000000000000000000000008152600092861691631cff79cd91613dc6918a91600401615103565b6000604051808303816000875af1925050508015613e2457506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052613e219190810190615132565b60015b613e2d57613e61565b80511580613e50575080806020019051810190613e4a919061507c565b15156001145b15613e5f576001915050613e9d565b505b8115613e99576040517f76e3e29c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060005b95945050505050565b6000613eb1826135a5565b9050801580613ec35750600754811615155b15613efa576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83166000908152600860205260409020548116613aa15773ffffffffffffffffffffffffffffffffffffffff83166000908152600860205260409020805482179055505050565b60015473ffffffffffffffffffffffffffffffffffffffff8281166000908152600860205260408120546a010000000000000000000090930490911691908080613f9f86611122565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526127108202600482015273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350908716915063f9a6503090604401602060405180830381865afa15801561403a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061405e9190614fa4565b9250614069846146a7565b6001019150506000806000805b848110156142a157801561408f5760018186031b614092565b60015b935086841615614299576000806140a8866134c9565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8e811660048301529294509092506000918416906370a0823190602401602060405180830381865afa15801561411d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141419190614fa4565b9050600181111561428c576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff848116602483015261ffff841691908d169063f9a6503090604401602060405180830381865afa1580156141c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141ea9190614fa4565b6141f49190615004565b6141fe9087614fec565b95508886106142875760006142128b614667565b60005490915062010000900460ff16811115614249576142448d8c836001891561423e57898e0361470b565b8d61470b565b614278565b85156142785773ffffffffffffffffffffffffffffffffffffffff8d1660009081526008602052604090208b90555b50505050505050505050505050565b614295565b98861898600194505b5050505b600101614076565b506040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005460ff1615614341576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613cdb3390565b73ffffffffffffffffffffffffffffffffffffffff821615806143dd575073ffffffffffffffffffffffffffffffffffffffff8281166000908152600260205260409020541615155b15614414576040517f9e59609e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff918216600090815260026020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001691909216179055565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260066020526040902054156144c4576040517f2e5a5c7700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61010060055410614501576040517f1cbbe18500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005805473ffffffffffffffffffffffffffffffffffffffff83166000818152600660209081526040808320600190951b9485905584835260049091528120919091558254919290614552836151bd565b91905055505050565b60006145bd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166148799092919063ffffffff16565b805190915015613aa157808060200190518101906145db919061507c565b613aa1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610bd0565b60008060005b6101008110156146a0576001811b91508382161561468c578260010192505b838210614698576146a0565b60010161466d565b5050919050565b600081600114156146ba57506000919050565b61010060015b60016146cc8284614fec565b901c92506001831b848116158015906146e75750600185851c145b156146f257506146a0565b84811061470157839250614705565b8391505b506146c0565b815b81811015614846576001811b8581161561483d57600061472c826134c9565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529192506000918316906370a0823190602401602060405180830381865afa15801561479f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147c39190614fa4565b90506001811161483a57600054978318977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9097019660ff6201000090910416871161483a5750505073ffffffffffffffffffffffffffffffffffffffff86166000908152600860205260409020859055506138b9565b50505b5060010161470d565b506040517f53275fcb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606148888484600085614892565b90505b9392505050565b606082471015614924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610bd0565b843b61498c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610bd0565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516149b591906151f6565b60006040518083038185875af1925050503d80600081146149f2576040519150601f19603f3d011682016040523d82523d6000602084013e6149f7565b606091505b5091509150614a07828286614a12565b979650505050505050565b60608315614a2157508161488b565b825115614a315782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd09190614e5b565b73ffffffffffffffffffffffffffffffffffffffff8116811461111f57600080fd5b600060208284031215614a9957600080fd5b813561488b81614a65565b60008060408385031215614ab757600080fd5b8235614ac281614a65565b91506020830135614ad281614a65565b809150509250929050565b600060208284031215614aef57600080fd5b5035919050565b8035600381106135a057600080fd5b801515811461111f57600080fd5b600080600080600080600060e0888a031215614b2e57600080fd5b8735614b3981614a65565b9650614b4760208901614af6565b9550604088013594506060880135614b5e81614a65565b93506080880135614b6e81614a65565b925060a0880135915060c0880135614b8581614b05565b8091505092959891949750929550565b60008060008060808587031215614bab57600080fd5b8435614bb681614a65565b93506020850135614bc681614a65565b92506040850135614bd681614a65565b9396929550929360600135925050565b60008060008060808587031215614bfc57600080fd5b84359350614c0c60208601614af6565b93969395505050506040820135916060013590565b600080600080600060a08688031215614c3957600080fd5b8535614c4481614a65565b94506020860135614c5481614a65565b93506040860135614c6481614a65565b94979396509394606081013594506080013592915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614cf257614cf2614c7c565b604052919050565b600067ffffffffffffffff821115614d1457614d14614c7c565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600080600060608486031215614d5557600080fd5b8335614d6081614a65565b92506020840135614d7081614a65565b9150604084013567ffffffffffffffff811115614d8c57600080fd5b8401601f81018613614d9d57600080fd5b8035614db0614dab82614cfa565b614cab565b818152876020838501011115614dc557600080fd5b816020840160208301376000602083830101528093505050509250925092565b60005b83811015614e00578181015183820152602001614de8565b838111156139555750506000910152565b60008151808452614e29816020860160208601614de5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061488b6020830184614e11565b60008060408385031215614e8157600080fd5b823591506020830135614ad281614a65565b803561ffff811681146135a057600080fd5b600080600080600060a08688031215614ebd57600080fd5b614ec686614e93565b9450614ed460208701614e93565b9350614ee260408701614e93565b9250614ef060608701614e93565b9150614efe60808701614e93565b90509295509295909350565b600080600060608486031215614f1f57600080fd5b8335614f2a81614a65565b9250602084013591506040840135614f4181614b05565b809150509250925092565b60008060408385031215614f5f57600080fd5b8235614f6a81614a65565b9150614f7860208401614e93565b90509250929050565b600060208284031215614f9357600080fd5b813560ff8116811461488b57600080fd5b600060208284031215614fb657600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115614fff57614fff614fbd565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561503c5761503c614fbd565b500290565b600082615077577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60006020828403121561508e57600080fd5b815161488b81614b05565b6000828210156150ab576150ab614fbd565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600080604083850312156150f257600080fd5b505080516020909101519092909150565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015260006148886040830184614e11565b60006020828403121561514457600080fd5b815167ffffffffffffffff81111561515b57600080fd5b8201601f8101841361516c57600080fd5b805161517a614dab82614cfa565b81815285602083850101111561518f57600080fd5b613e9d826020830160208601614de5565b6000602082840312156151b257600080fd5b815161488b81614a65565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156151ef576151ef614fbd565b5060010190565b60008251615208818460208701614de5565b919091019291505056fea26469706673582212209d39bb9d4972b515acdad1ffb757acd15e103ca6ee762f88a6382b36243734ba64736f6c634300080a00336101406040523480156200001257600080fd5b5060405162005e9738038062005e97833981016040819052620000359162000198565b60016000556001600160a01b0383166200006257604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038316608081905260408051636f307dc360e01b81529051636f307dc3916004808201926020929091908290030181865afa158015620000ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d39190620001ea565b6001600160a01b031660a0816001600160a01b031681525050826001600160a01b0316634f0e0ef36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200012b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001519190620001ea565b6001600160a01b0390811660c0529190911660e0819052151561010052151561012052506200020f565b80516001600160a01b03811681146200019357600080fd5b919050565b600080600060608486031215620001ae57600080fd5b620001b9846200017b565b9250620001c9602085016200017b565b915060408401518015158114620001df57600080fd5b809150509250925092565b600060208284031215620001fd57600080fd5b62000208826200017b565b9392505050565b60805160a05160c05160e0516101005161012051615a86620004116000396000818161061101528181612fb5015261481f01526000818161031701528181610dde015281816144f901526146e5015260008181610557015281816146a901526147a901526000818161034b0152818161387d015261392d01526000818161047301528181611bfe0152818161274f0152818161280d0152818161366a01526137dd015260008181610665015281816109d801528181610b0301528181610bd501528181610cdd01528181610e6501528181610fe30152818161114e0152818161120e0152818161132e015281816114510152818161162b01528181611708015281816117e0015281816119e501528181611b1201528181611d9501528181611ed5015281816120040152818161216801528181612290015281816123c601528181612568015281816126390152818161266f0152818161293d01528181612a2101528181612a8a01528181612bde01528181612d2601528181612e6801528181612ec2015281816130a10152818161311b015281816131b401528181613341015281816134c10152818161358a0152818161372f01528181613a1a01528181613b2e01528181613dbb015281816142200152818161432801528181614492015281816148e7015281816149e801528181614aae0152614d8f0152615a866000f3fe6080604052600436106102695760003560e01c8063860aefcf11610153578063c7de38a6116100cb578063dfd594651161007f578063eb9606df11610064578063eb9606df1461081e578063f9eaee0d1461083e578063ffd9b9071461085e57600080fd5b8063dfd59465146107de578063e1f21c67146107fe57600080fd5b8063cff0ab96116100b0578063cff0ab96146106ef578063d9ccbec114610783578063dcf65482146107be57600080fd5b8063c7de38a6146106a7578063caa5c23f146106dc57600080fd5b80639c55a05411610122578063b55bb84b11610107578063b55bb84b14610633578063c12c21c014610653578063c690908a1461068757600080fd5b80639c55a054146105df578063b1836d32146105ff57600080fd5b8063860aefcf146104db5780639408b63f146105455780639b67ab30146105795780639be0536a146105bd57600080fd5b80635d91a0e0116101e65780636d19b486116101b55780637071b7c51161019a5780637071b7c51461049557806379c0ef91146104a857806382871ace146104c857600080fd5b80636d19b486146104415780636f307dc31461046157600080fd5b80635d91a0e0146103e85780635f73fbec146103fb578063601d66f61461040e5780636c8f225d1461042e57600080fd5b80633d9287fa1161023d5780635019e20a116102225780635019e20a1461039257806354fd4d50146103b257806359781034146103d557600080fd5b80633d9287fa146103055780634f0e0ef31461033957600080fd5b8062842b571461026e578063256ac915146102905780632a7ba1f7146102c55780632b7c7b11146102e5575b600080fd5b34801561027a57600080fd5b5061028e6102893660046151bf565b61087e565b005b34801561029c57600080fd5b506102b06102ab3660046151f8565b61098e565b60405190151581526020015b60405180910390f35b3480156102d157600080fd5b5061028e6102e0366004615215565b610a61565b3480156102f157600080fd5b5061028e610300366004615215565b610c3b565b34801561031157600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561034557600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102bc565b34801561039e57600080fd5b5061028e6103ad3660046151f8565b610d6a565b3480156103be57600080fd5b506103c7600281565b6040519081526020016102bc565b61028e6103e336600461522e565b61108c565b61028e6103f63660046152bb565b611275565b61028e610409366004615340565b611589565b34801561041a57600080fd5b5061028e6104293660046153d8565b6117de565b61028e61043c36600461541b565b611900565b34801561044d57600080fd5b506102b061045c3660046151f8565b611c31565b34801561046d57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b61028e6104a336600461546e565b611c60565b3480156104b457600080fd5b5061036d6104c3366004615215565b611f3e565b61028e6104d63660046152bb565b611f4b565b3480156104e757600080fd5b5060025461051c906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041682565b604080516fffffffffffffffffffffffffffffffff9384168152929091166020830152016102bc565b34801561055157600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561058557600080fd5b506004546040805167ffffffffffffffff608084901c1681526fffffffffffffffffffffffffffffffff9092166020830152016102bc565b3480156105c957600080fd5b506105d261227d565b6040516102bc91906154e2565b3480156105eb57600080fd5b5061028e6105fa36600461553c565b61228e565b34801561060b57600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561063f57600080fd5b5061028e61064e3660046151f8565b6123c4565b34801561065f57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561069357600080fd5b5061028e6106a23660046151f8565b6124c6565b3480156106b357600080fd5b506106c76106c23660046151f8565b612668565b604080519283526020830191909152016102bc565b61028e6106ea366004615557565b61289b565b3480156106fb57600080fd5b5060015461074e906fffffffffffffffffffffffffffffffff811690700100000000000000000000000000000000810460ff169071010000000000000000000000000000000000900464ffffffffff1683565b604080516fffffffffffffffffffffffffffffffff9094168452911515602084015264ffffffffff16908201526060016102bc565b34801561078f57600080fd5b506102b061079e366004615599565b600360209081526000928352604080842090915290825290205460ff1681565b3480156107ca57600080fd5b5061028e6107d93660046151f8565b612a88565b3480156107ea57600080fd5b506103c76107f93660046151f8565b612b86565b34801561080a57600080fd5b5061028e61081936600461522e565b612c6d565b34801561082a57600080fd5b5061028e6108393660046155c7565b612ec0565b34801561084a57600080fd5b506102b06108593660046151f8565b613057565b34801561086a57600080fd5b5061028e6108793660046155ee565b6131b2565b600260005414156108f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b6002600090815573ffffffffffffffffffffffffffffffffffffffff8316808252600360209081526040808420338086529083529381902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081527f9b3258bc4904fd6426b99843e206c6c7cdb1fd0f040121c25b71dafbb3851ee0910160405180910390a350506001600055565b6040517f055ee9b500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063055ee9b590602401602060405180830381865afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a43919061560b565b73ffffffffffffffffffffffffffffffffffffffff16141592915050565b60026000541415610ace576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610b5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b83919061560b565b9050610b903382846132eb565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906395373018906024015b600060405180830381600087803b158015610c1a57600080fd5b505af1158015610c2e573d6000803e3d6000fd5b5050600160005550505050565b60026000541415610ca8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610d39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5d919061560b565b9050610b90338284613411565b60026000541415610dd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000557f000000000000000000000000000000000000000000000000000000000000000015610e34576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610ec1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee5919061560b565b33600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915290205490915060ff16610f52576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f5d82613583565b5090508015610f98576040517ff713841e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b15801561102757600080fd5b505af115801561103b573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692503391507f93c70cc9715bef0d83edf2095f3595402279d274f402a73ffc17f1bcb19d863d90600090a35050600160005550565b600260005414156110f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611106613875565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063e958b70490602401602060405180830381865afa158015611197573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bb919061560b565b90506111c9848285856139b7565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401600060405180830381600087803b15801561125257600080fd5b505af1158015611266573d6000803e3d6000fd5b50506001600055505050505050565b600260005414156112e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611375573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611399919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166113e8576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806113f483613583565b915091508161142f576040517f1fdd676f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611437613875565b831561144d5761144d85858b8660016000613ae3565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632362a2d88b600185338e8e8e6040518863ffffffff1660e01b81526004016114b59796959493929190615663565b6020604051808303816000875af11580156114d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f891906156bf565b90508873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f7dfecd8419723a9d3954585a30c2a270165d70aafa146c11c1e1b88ae14390648460405161157091815260200190565b60405180910390a4505060016000555050505050505050565b600260005414156115f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ab919061560b565b90506116b5613875565b81156116cb576116cb8383338460016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d89061174a903390600090819083908d908d908d90600401615663565b6020604051808303816000875af1158015611769573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178d91906156bf565b5060405173ffffffffffffffffffffffffffffffffffffffff87169033907f460ad03b1cf79b1d64d3aefa28475f110ab66e84649c52bb41ed796b9b39198190600090a35050600160005550505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611849573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118d1576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff90811670010000000000000000000000000000000002911617600255565b6002600054141561196d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000908155606461198461ffff851687615707565b61198e9190615744565b9050611999816144f7565b6119a2816145e8565b6119ab84614668565b6119b3613875565b6040517f172c48c7000000000000000000000000000000000000000000000000000000008152600060048201819052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a64919061577f565b61ffff169150611a789050816127106157ae565b611a829083615707565b611a8c8288615707565b11611ac3576040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff86811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611b5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b81919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638587604051611bef92919091825261ffff16602082015260400190565b60405180910390a3611c2386827f00000000000000000000000000000000000000000000000000000000000000008a6139b7565b505060016000555050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526006602052604081205415155b92915050565b60026000541415611ccd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611cdb856144f7565b611ce484614668565b611ced856145e8565b600154700100000000000000000000000000000000900460ff1615611d3e576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d46613875565b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff85811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611de0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e04919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638885604051611e7292919091825261ffff16602082015260400190565b60405180910390a38215611e9057611e908484878460006001613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015611f1957600080fd5b505af1158015611f2d573d6000803e3d6000fd5b505060016000555050505050505050565b6000611c5a60058361480f565b60026000541415611fb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa15801561204b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206f919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166120be576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120c661481b565b6120fc576040517f7e52ccb400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061210782612668565b509050612112613875565b82156121285761212884848a8560016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d8906121aa908c90600290879033908f908f908f90600401615663565b6020604051808303816000875af11580156121c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ed91906156bf565b90508773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167ffada13ff2d5e1a1d9da37ad4a4130893b34e3c69c32b17f87ec31fd661b867078460405161226591815260200190565b60405180910390a45050600160005550505050505050565b6060612289600561486b565b905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612381576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561242f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612453919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146124b7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614878565b5050565b60026000541415612533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156125c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e8919061560b565b90506125f4818361489a565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401610c00565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126fc919061560b565b905060008061270b8387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156127a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127c991906156bf565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015291965061271091851690637afb010490604401602060405180830381865afa158015612863573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061288791906156bf565b6128919190615744565b9350505050915091565b60026000541415612908576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129bd919061560b565b90506129c7613875565b8115612a7e576129dc83833384600080613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015612a6557600080fd5b505af1158015612a79573d6000803e3d6000fd5b505050505b5050600160005550565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612af3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b17919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b7b576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614c92565b600080612b9283612668565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152919350600092507f000000000000000000000000000000000000000000000000000000000000000090911690633192195c906024016040805180830381865afa158015612c26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4a91906157c5565b9150819050612c5b61271084615707565b612c659190615744565b949350505050565b60026000541415612cda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063fdd5764590602401602060405180830381865afa158015612d6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d91919061560b565b73ffffffffffffffffffffffffffffffffffffffff161480612dd7575073ffffffffffffffffffffffffffffffffffffffff831660009081526006602052604090205415155b15612e0e576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612eac57600080fd5b505af1158015611c23573d6000803e3d6000fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f4f919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612fb3576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000061300a576040517f50dd11fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805464ffffffffff90921671010000000000000000000000000000000000027fffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffffff909216919091179055565b6040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063f67c5bd090602401602060405180830381865afa1580156130e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061310c91906156bf565b905080158015906131ab5750807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015613184573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a891906156bf565b16155b9392505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561321d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613241919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146132a5576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018054911515700100000000000000000000000000000000027fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff909216919091179055565b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600060448301819052917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561338c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133b091906156bf565b90506133bb816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f98274bf834d179ee08dc0604071b0dc90b54731bd5f725a5a96a39a86bce025a8360405161340391815260200190565b60405180910390a250505050565b61341a816144f7565b600154700100000000000000000000000000000000900460ff161561346b576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600160448301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561350c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061353091906156bf565b905061353b816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f9cac51154cc0d835e2f9c9d1f59a9344588cee107f4203bf58a8c797e3a58c458360405161340391815260200190565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613617919061560b565b90506000806136268387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156136c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136e491906156bf565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529195506000917f00000000000000000000000000000000000000000000000000000000000000001690633192195c906024016040805180830381865afa158015613775573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061379991906157c5565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350600092506127109187169063f9a6503090604401602060405180830381865afa158015613837573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061385b91906156bf565b6138659190615707565b9092109794965093945050505050565b34156139b5577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156138e357600080fd5b505af11580156138f7573d6000803e3d6000fd5b50506040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201523460248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16935063a9059cbb925060440190506020604051808303816000875af115801561398f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139b391906157e9565b505b565b6139c084614cb4565b6040517f830aa74500000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f0000000000000000000000000000000000000000000000000000000000000000169063830aa74590608401600060405180830381600087803b158015613a5e57600080fd5b505af1158015613a72573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fa32435755c235de2976ed44a75a2f85cb01faf0c894f639fe0c32bb9455fea8f83604051613ad591815260200190565b60405180910390a350505050565b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301523060248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b158015613b7257600080fd5b505af1158015613b86573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff871692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a28460005b8181101561441d5736888883818110613bea57613bea615806565b9050602002810190613bfc9190615835565b90506004613c0d6020830183615873565b90501015613c47576040517fe2b0e50600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b30613c5560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16141561421c578415613ca9576040517f5fb9107f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613cb86020830183615873565b613cc1916158d8565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167f59781034000000000000000000000000000000000000000000000000000000001415613e3c5760008080613d1e6020860186615873565b613d2c916004908290615920565b810190613d39919061522e565b925092509250613e34838c73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614613e2b576040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015613e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e26919061560b565b613e2d565b8b5b84846139b7565b505050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2b7c7b11000000000000000000000000000000000000000000000000000000001415613ec757600194506000613e996020840184615873565b613ea7916004908290615920565b810190613eb49190615215565b9050613ec1898983613411565b50614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2a7ba1f7000000000000000000000000000000000000000000000000000000001415613f80578415613f49576040517fc0b0caa800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613f586020840184615873565b613f66916004908290615920565b810190613f739190615215565b9050613ec18989836132eb565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f233a8caa0000000000000000000000000000000000000000000000000000000014156140e457600080613fda6020850185615873565b613fe8916004908290615920565b810190613ff5919061594a565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c8116600483015292945090925082918416906370a0823190602401602060405180830381865afa158015614069573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061408d91906156bf565b10156140dd576040517fa5ac537300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016108e7565b5050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fc690908a00000000000000000000000000000000000000000000000000000000141561416457600061413d6020840184615873565b61414b916004908290615920565b81019061415891906151f8565b9050613ec1888261489a565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f23e27a640000000000000000000000000000000000000000000000000000000014156141e45760006141bd6020840184615873565b6141cb916004908290615920565b8101906141d891906151f8565b9050613ec18882614d42565b6040517f1e9e7e7a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50614414565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff68754361426760208501856151f8565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156142d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142f4919061560b565b73ffffffffffffffffffffffffffffffffffffffff16148061436d575073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001661435560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16145b156143a4576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6144126143b46020830183615873565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506143f69250505060208401846151f8565b73ffffffffffffffffffffffffffffffffffffffff1690614e39565b505b50600101613bcf565b506040517f60c8e8938c9a0c0d88a98d6f1c562ce68077e12bf3edb8047378f2f736cb45b490600090a16040517fe1998cf900000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff86811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b1580156144d657600080fd5b505af11580156144ea573d6000803e3d6000fd5b5050505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006139b3576001546fffffffffffffffffffffffffffffffff9081169081146124c257600454608081901c906fffffffffffffffffffffffffffffffff16600067ffffffffffffffff8316431461456e578461458a565b61458a6fffffffffffffffffffffffffffffffff831686615976565b9050838111156145c6576040517f675f1a5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff81164360801b176004555050505050565b6002546fffffffffffffffffffffffffffffffff16811080614631575060025470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681115b156139b3576040517fce16799400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61467061481b565b156146a7576040517f63fc31c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1615614806577f0000000000000000000000000000000000000000000000000000000000000000801561472657503373ffffffffffffffffffffffffffffffffffffffff821614155b1561475d576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600160248301527f00000000000000000000000000000000000000000000000000000000000000001690639dc29fac90604401600060405180830381600087803b1580156147ed57600080fd5b505af1158015614801573d6000803e3d6000fd5b505050505b6139b381614cb4565b60006131ab8383614e7b565b60007f0000000000000000000000000000000000000000000000000000000000000000801561228957505060015471010000000000000000000000000000000000900464ffffffffff1642101590565b606060006131ab83614ea5565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f01565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561492b57600080fd5b505af115801561493f573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527fdf498aa1c340e992665d6fb4f3be8436d452c45a630cb6d7fab7963da39bac8793500190505b60405180910390a15050565b6040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600091829160019183917f00000000000000000000000000000000000000000000000000000000000000001690638991b2f190602401602060405180830381865afa158015614a2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a5391906156bf565b90505b808211614c895780821615614c7d576040517fe75538c700000000000000000000000000000000000000000000000000000000815260048101839052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e75538c7906024016040805180830381865afa158015614af4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b18919061577f565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529294509092506000918416906370a0823190602401602060405180830381865afa158015614b8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bb191906156bf565b90506001811115614c79576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff8481166024830152600091908b169063f9a6503090604401602060405180830381865afa158015614c33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c5791906156bf565b978801979050614c6b61ffff841682615707565b614c759088615976565b9650505b5050505b600182901b9150614a56565b50509250929050565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f50565b3373ffffffffffffffffffffffffffffffffffffffff821614801590614d0b575033600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16155b156139b3576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b158015614dd357600080fd5b505af1158015614de7573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527f69db9e9764da61b6681b89fb0f5be018506e0342036e56b59c3015a620d60977935001905061498d565b60606131ab83836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250615043565b6000826000018281548110614e9257614e92615806565b9060005260206000200154905092915050565b606081600001805480602002602001604051908101604052809291908181526020018280548015614ef557602002820191906000526020600020905b815481526020019060010190808311614ee1575b50505050509050919050565b6000818152600183016020526040812054614f4857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611c5a565b506000611c5a565b60008181526001830160205260408120548015615039576000614f746001836157ae565b8554909150600090614f88906001906157ae565b9050818114614fed576000866000018281548110614fa857614fa8615806565b9060005260206000200154905080876000018481548110614fcb57614fcb615806565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080614ffe57614ffe61598e565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611c5a565b6000915050611c5a565b6060612c65848460008585843b6150b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108e7565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516150df91906159ed565b60006040518083038185875af1925050503d806000811461511c576040519150601f19603f3d011682016040523d82523d6000602084013e615121565b606091505b509150915061513182828661513c565b979650505050505050565b6060831561514b5750816131ab565b82511561515b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e791906159ff565b73ffffffffffffffffffffffffffffffffffffffff811681146139b357600080fd5b80151581146139b357600080fd5b600080604083850312156151d257600080fd5b82356151dd8161518f565b915060208301356151ed816151b1565b809150509250929050565b60006020828403121561520a57600080fd5b81356131ab8161518f565b60006020828403121561522757600080fd5b5035919050565b60008060006060848603121561524357600080fd5b833561524e8161518f565b9250602084013561525e8161518f565b929592945050506040919091013590565b60008083601f84011261528157600080fd5b50813567ffffffffffffffff81111561529957600080fd5b6020830191508360208260051b85010111156152b457600080fd5b9250929050565b60008060008060008060a087890312156152d457600080fd5b86356152df8161518f565b955060208701356152ef8161518f565b9450604087013593506060870135615306816151b1565b9250608087013567ffffffffffffffff81111561532257600080fd5b61532e89828a0161526f565b979a9699509497509295939492505050565b60008060008060006080868803121561535857600080fd5b85356153638161518f565b945060208601359350604086013561537a816151b1565b9250606086013567ffffffffffffffff81111561539657600080fd5b6153a28882890161526f565b969995985093965092949392505050565b80356fffffffffffffffffffffffffffffffff811681146153d357600080fd5b919050565b600080604083850312156153eb57600080fd5b6153f4836153b3565b9150615402602084016153b3565b90509250929050565b61ffff811681146139b357600080fd5b6000806000806080858703121561543157600080fd5b8435935060208501356154438161518f565b925060408501356154538161540b565b915060608501356154638161540b565b939692955090935050565b60008060008060006080868803121561548657600080fd5b8535945060208601356154988161518f565b9350604086013567ffffffffffffffff8111156154b457600080fd5b6154c08882890161526f565b90945092505060608601356154d48161540b565b809150509295509295909350565b6020808252825182820181905260009190848201906040850190845b8181101561553057835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016154fe565b50909695505050505050565b60006020828403121561554e57600080fd5b6131ab826153b3565b6000806020838503121561556a57600080fd5b823567ffffffffffffffff81111561558157600080fd5b61558d8582860161526f565b90969095509350505050565b600080604083850312156155ac57600080fd5b82356155b78161518f565b915060208301356151ed8161518f565b6000602082840312156155d957600080fd5b813564ffffffffff811681146131ab57600080fd5b60006020828403121561560057600080fd5b81356131ab816151b1565b60006020828403121561561d57600080fd5b81516131ab8161518f565b6003811061565f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b73ffffffffffffffffffffffffffffffffffffffff888116825260e082019061568f602084018a615628565b6040830197909752948616606082015292909416608083015260a082015291151560c09092019190915292915050565b6000602082840312156156d157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561573f5761573f6156d8565b500290565b60008261577a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000806040838503121561579257600080fd5b825161579d8161518f565b60208401519092506151ed8161540b565b6000828210156157c0576157c06156d8565b500390565b600080604083850312156157d857600080fd5b505080516020909101519092909150565b6000602082840312156157fb57600080fd5b81516131ab816151b1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc183360301811261586957600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126158a857600080fd5b83018035915067ffffffffffffffff8211156158c357600080fd5b6020019150368190038213156152b457600080fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156159185780818660040360031b1b83161692505b505092915050565b6000808585111561593057600080fd5b8386111561593d57600080fd5b5050820193919092039150565b6000806040838503121561595d57600080fd5b82356159688161518f565b946020939093013593505050565b60008219821115615989576159896156d8565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60005b838110156159d85781810151838201526020016159c0565b838111156159e7576000848401525b50505050565b600082516158698184602087016159bd565b6020815260008251806020840152615a1e8160408501602087016159bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea2646970667358221220a3f4a705ab580a6ada1e438cd2ee4abc001b62d1d171fce12c41994900fef21664736f6c634300080a003360a06040523480156200001157600080fd5b5060405162005f3d38038062005f3d8339810160408190526200003491620012eb565b826001600160a01b031663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000073573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200009991906200147f565b6001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000d7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000fd91906200147f565b6000805460ff191690556001600160a01b0381166200012f57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200016e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200019491906200147f565b6001600160a01b03908116608052600180546001600160a01b031916918616918217905560408051636f307dc360e01b81529051919250636f307dc39160048083019260209291908290030181865afa158015620001f6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200021c91906200147f565b600260006101000a8154816001600160a01b0302191690836001600160a01b03160217905550826001600160a01b031663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000281573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a791906200147f565b6001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200030b91906200147f565b600080546001600160a01b039290921661010002610100600160a81b0319909216919091179055620003626103e860c86200034b6101f4612710620014bc565b60646200035c60c8612710620014bc565b620005e8565b60408101515160005b81811015620003ee576000836040015182815181106200038f576200038f620014e2565b6020026020010151600001519050620003ae81620007c260201b60201c565b620003e48185604001518481518110620003cc57620003cc620014e2565b60200260200101516020015162000a5e60201b60201c565b506001016200036b565b5060015460408051632630c12f60e01b815290516001600160a01b03909216916311ca4fc29186918491632630c12f9160048083019260209291908290030181865afa15801562000443573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200046991906200147f565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401600060405180830381600087803b158015620004b257600080fd5b505af1158015620004c7573d6000803e3d6000fd5b50506040516001600160a01b03861692507fa8b21f72cb83bce808df32dc2330217d744a1c22f3e9e44e4b11bbf049d37d9d9150600090a2600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000553573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200057991906200147f565b6001600160a01b03167f3f82447be465b0b5a4a9e54c74d5f6ae73f2e9537f2cc1590a340524703d096160405160405180910390a26020820151620005cb90620005c5906002620014f8565b62000bda565b81516020830151620005de919062000dc8565b5050505062001604565b6000620005f68585620014bc565b60015460405163172c48c760e01b81526000600482018190529293506001600160a01b039091169063172c48c7906024016040805180830381865afa15801562000644573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200066a91906200152a565b9150508061ffff168261ffff1614620006be57620006888262000f47565b60025460405161ffff841681526001600160a01b039091169060008051602062005f1d8339815191529060200160405180910390a25b60015460405163944ac59f60e01b815261ffff808a166004830152808916602483015280881660448301528087166064830152851660848201526001600160a01b039091169063944ac59f9060a401600060405180830381600087803b1580156200072857600080fd5b505af11580156200073d573d6000803e3d6000fd5b505050507f2214a403d5f8d049e52eacca974c6dea01a471e41d6a18903bfaf7dbc709741f878787612710620007749190620014bc565b876200078388612710620014bc565b6040805161ffff96871681529486166020860152928516848401529084166060840152909216608082015290519081900360a00190a150505050505050565b6001600160a01b038116620007ea57604051635919af9760e11b815260040160405180910390fd5b62000809816001600160a01b03166200116f60201b620023381760201c565b620008365760405163df4c572d60e01b81526001600160a01b038216600482015260240160405180910390fd5b6040516370a0823160e01b81523060048201526001600160a01b038216906370a0823190602401602060405180830381865afa92505050801562000899575060408051601f3d908101601f19168201909252620008969181019062001564565b60015b620008b75760405163528ca31d60e01b815260040160405180910390fd5b50600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200090c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200093291906200147f565b604051630f9a650360e41b8152670de0b6b3a764000060048201526001600160a01b038381166024830152919091169063f9a6503090604401602060405180830381865afa925050508015620009a7575060408051601f3d908101601f19168201909252620009a49181019062001564565b60015b620009c5576040516367a7cd4360e01b815260040160405180910390fd5b5060015460405163d48bfca760e01b81526001600160a01b0383811660048301529091169063d48bfca790602401600060405180830381600087803b15801562000a0e57600080fd5b505af115801562000a23573d6000803e3d6000fd5b50506040516001600160a01b03841692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a250565b6002546001600160a01b038381169116141562000a8e57604051633b899cf960e01b815260040160405180910390fd5b60015460405163172c48c760e01b8152600060048201819052916001600160a01b03169063172c48c7906024016040805180830381865afa15801562000ad8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000afe91906200152a565b91505061ffff8216158062000b1a57508061ffff168261ffff16115b1562000b39576040516333c6608d60e01b815260040160405180910390fd5b600154604051635385e2a160e11b81526001600160a01b03858116600483015261ffff851660248301529091169063a70bc54290604401600060405180830381600087803b15801562000b8b57600080fd5b505af115801562000ba0573d6000803e3d6000fd5b505060405161ffff851681526001600160a01b038616925060008051602062005f1d833981519152915060200160405180910390a2505050565b600062000be662001175565b6001600160a01b031663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801562000c24573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c4a91906200157e565b50509050600062000c606200117560201b60201c565b6001600160a01b031663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa15801562000c9d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000cc39190620015d5565b915050806001600160801b0316836001600160801b0316101562000cfa576040516309aadd6f60e41b815260040160405180910390fd5b826001600160801b0316826001600160801b03161462000dc35762000d1e62001175565b604051632715681560e21b81526001600160801b03851660048201526001600160a01b039190911690639c55a05490602401600060405180830381600087803b15801562000d6b57600080fd5b505af115801562000d80573d6000803e3d6000fd5b50506040516001600160801b03861681527fa030eec20ae970821387224ec3bb15b4bd22b89bfb86dc4d2b3827aa3d99e48d925060200190505b60405180910390a15b505050565b600062000dd462001175565b6001600160a01b031663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801562000e12573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e3891906200157e565b50509050816001600160801b0316836001600160801b0316118062000e6e5750806001600160801b0316826001600160801b0316115b1562000e8d576040516309aadd6f60e41b815260040160405180910390fd5b62000e9762001175565b60405163300eb37b60e11b81526001600160801b038086166004830152841660248201526001600160a01b03919091169063601d66f690604401600060405180830381600087803b15801562000eec57600080fd5b505af115801562000f01573d6000803e3d6000fd5b5050604080516001600160801b038088168252861660208201527f4d4981437d0211f9e6843eb024d9ada1fa3a99514d4343d4aece106dd11524bb935001905062000dba565b600154600254604051635385e2a160e11b81526001600160a01b03918216600482015261ffff8416602482015291169063a70bc54290604401600060405180830381600087803b15801562000f9b57600080fd5b505af115801562000fb0573d6000803e3d6000fd5b505050506000600160009054906101000a90046001600160a01b03166001600160a01b031663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200100a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001030919062001564565b905060015b8181101562000dc35760015460405163172c48c760e01b81526004810183905260009182916001600160a01b039091169063172c48c7906024016040805180830381865afa1580156200108c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010b291906200152a565b915091508461ffff168161ffff1611156200116457600154604051635385e2a160e11b81526001600160a01b03848116600483015261ffff881660248301529091169063a70bc54290604401600060405180830381600087803b1580156200111957600080fd5b505af11580156200112e573d6000803e3d6000fd5b505060405161ffff881681526001600160a01b038516925060008051602062005f1d833981519152915060200160405180910390a25b505060010162001035565b3b151590565b60015460408051632f7a188160e01b815290516000926001600160a01b031691632f7a18819160048083019260209291908290030181865afa158015620011c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011e691906200147f565b905090565b6001600160a01b03811681146200120157600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b03811182821017156200123f576200123f62001204565b60405290565b604080519081016001600160401b03811182821017156200123f576200123f62001204565b604051601f8201601f191681016001600160401b038111828210171562001295576200129562001204565b604052919050565b80516001600160801b0381168114620012b557600080fd5b919050565b8051620012b581620011eb565b805161ffff81168114620012b557600080fd5b80518015158114620012b557600080fd5b6000806000606084860312156200130157600080fd5b83516200130e81620011eb565b809350506020808501516200132381620011eb565b604086810151919450906001600160401b03808211156200134357600080fd5b9087019060a0828a0312156200135857600080fd5b620013626200121a565b6200136d836200129d565b81526200137c8584016200129d565b8582015283830151828111156200139257600080fd5b8301601f81018b13620013a457600080fd5b805183811115620013b957620013b962001204565b620013c9878260051b016200126a565b818152878101945060069190911b82018701908c821115620013ea57600080fd5b918701915b81831015620014435786838e031215620014095760008081fd5b6200141362001245565b83516200142081620011eb565b81526200142f848a01620012c7565b818a015285529387019391860191620013ef565b838701525062001458905060608401620012ba565b60608201526200146b60808401620012da565b608082015280955050505050509250925092565b6000602082840312156200149257600080fd5b81516200149f81620011eb565b9392505050565b634e487b7160e01b600052601160045260246000fd5b600061ffff83811690831681811015620014da57620014da620014a6565b039392505050565b634e487b7160e01b600052603260045260246000fd5b60006001600160801b0382811684821681151582840482111615620015215762001521620014a6565b02949350505050565b600080604083850312156200153e57600080fd5b82516200154b81620011eb565b91506200155b60208401620012c7565b90509250929050565b6000602082840312156200157757600080fd5b5051919050565b6000806000606084860312156200159457600080fd5b6200159f846200129d565b9250620015af60208501620012da565b9150604084015164ffffffffff81168114620015ca57600080fd5b809150509250925092565b60008060408385031215620015e957600080fd5b620015f4836200129d565b91506200155b602084016200129d565b608051614878620016a56000396000818161033601528181610446015281816107c5015281816108c0015281816109ae01528181610b8301528181610f0a015281816113e1015281816114cf015281816115bb015281816116ab015281816117990152818161187d01528181611ad901528181611bc601528181611cb301528181611da0015281816120090152818161218c015261227901526148786000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80638456cb59116100f9578063dc2b21c111610097578063f0527ac611610071578063f0527ac6146103d7578063f206d32a146103df578063fb1bd8c4146103f2578063ffd9b9071461040557600080fd5b8063dc2b21c11461039e578063e6492d7b146103b1578063eb9606df146103c457600080fd5b8063a50cf2c8116100d3578063a50cf2c814610331578063a70bc54214610358578063b53472ef1461036b578063c12c21c01461037e57600080fd5b80638456cb59146103035780639c55a0541461030b5780639f1c50691461031e57600080fd5b806350e036ff1161016657806354fd4d501161014057806354fd4d50146102b25780635c975abb146102ba5780636f307dc3146102d05780637bccacee146102f057600080fd5b806350e036ff1461027657806352438e541461028c578063526a41e81461029f57600080fd5b80633e7c88d6116101a25780633e7c88d6146102355780633f4ba83a14610248578063456e0742146102505780635094cb4f1461026357600080fd5b806324147708146101c95780632954018c146101de5780632f7a18811461022d575b600080fd5b6101dc6101d7366004614307565b610418565b005b60005461020390610100900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6102036106fe565b6101dc610243366004614334565b610797565b6101dc610892565b6101dc61025e366004614307565b610980565b61020361027136600461436d565b610b36565b61027e610b49565b604051908152602001610224565b6101dc61029a366004614307565b610b55565b6101dc6102ad366004614394565b610edc565b61027e600281565b60005460ff166040519015158152602001610224565b6002546102039073ffffffffffffffffffffffffffffffffffffffff1681565b6101dc6102fe3660046143c2565b6113b3565b6101dc6114a1565b6101dc61031936600461440e565b61158d565b6101dc61032c36600461442b565b61167d565b6102037f000000000000000000000000000000000000000000000000000000000000000081565b6101dc610366366004614334565b61176b565b6101dc610379366004614307565b61184f565b6001546102039073ffffffffffffffffffffffffffffffffffffffff1681565b6101dc6103ac366004614459565b611aab565b6101dc6103bf366004614307565b611b98565b6101dc6103d236600461448f565b611c85565b6101dc611d72565b6101dc6103ed3660046144ac565b611fdb565b6101dc610400366004614307565b61215e565b6101dc61041336600461451d565b61224b565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156104a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c6919061453a565b6104fc576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006105078261233e565b90506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015610578573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059c9190614557565b90508181166106f9576001546040517fa366f496000000000000000000000000000000000000000000000000000000008152918317600483018190529173ffffffffffffffffffffffffffffffffffffffff9091169063a366f49690602401600060405180830381600087803b15801561061557600080fd5b505af1158015610629573d6000803e3d6000fd5b505050506106356106fe565b6040517fffd9b9070000000000000000000000000000000000000000000000000000000081526001600482015273ffffffffffffffffffffffffffffffffffffffff919091169063ffd9b90790602401600060405180830381600087803b15801561069f57600080fd5b505af11580156106b3573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692507ff17b849746e74d7186170c9553d4bbf60b4f8bb1ed81fe50c099b934fb078f059150600090a25b505050565b600154604080517f2f7a1881000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691632f7a18819160048083019260209291908290030181865afa15801561076e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610792919061457b565b905090565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610821573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610845919061453a565b61087b576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108848261241e565b61088e82826127f8565b5050565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa15801561091c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610940919061453a565b610976576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61097e612a15565b565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610a0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2e919061453a565b610a64576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a6d81612af6565b6001546040517f9f5f86ae00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015290911690639f5f86ae90602401600060405180830381600087803b158015610ada57600080fd5b505af1158015610aee573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507f5a0b7d0f9c24b39256e112a0584b4c5ce38d8f1dee2e7c56f15b852604cdc8869150600090a250565b6000610b43600383612cb8565b92915050565b60006107926003612ccb565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610bdf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c03919061453a565b610c39576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610c86576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063fdd5764590602401602060405180830381865afa158015610cf7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1b919061457b565b905073ffffffffffffffffffffffffffffffffffffffff8116610d6a576040517f1170cc2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f6e98e5e400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526000602483015290911690636e98e5e490604401600060405180830381600087803b158015610dde57600080fd5b505af1158015610df2573d6000803e3d6000fd5b50506001546040517f6e98e5e40000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff86811660248301529091169250636e98e5e49150604401600060405180830381600087803b158015610e6a57600080fd5b505af1158015610e7e573d6000803e3d6000fd5b50505050610e96826003612cd590919063ffffffff16565b5060405173ffffffffffffffffffffffffffffffffffffffff8316907fab9f405bf0c19b97f65a7031634db41569cd2f0e0376a610a1e977f9ab22b58f90600090a25050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610f66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8a919061453a565b610fc0576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fc982612af6565b6000806000610fd66106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015611020573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110449190614598565b9250925092506000806110556106fe565b73ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa15801561109e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c291906145e5565b9150915060006110d06106fe565b73ffffffffffffffffffffffffffffffffffffffff16639be0536a6040518163ffffffff1660e01b8152600401600060405180830381865afa15801561111a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526111609190810190614643565b9050600061116c6106fe565b73ffffffffffffffffffffffffffffffffffffffff1663b1836d326040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111da919061453a565b600154604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905192935073ffffffffffffffffffffffffffffffffffffffff909116916311ca4fc2918c918491632630c12f9160048083019260209291908290030181865afa158015611256573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061127a919061457b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156112e757600080fd5b505af11580156112fb573d6000803e3d6000fd5b5050505087156113675761130e87612cf7565b6113188484612f5d565b61132186613152565b60005b82518110156113575761134f83828151811061134257611342614726565b60200260200101516132a3565b600101611324565b50801561136757611367856133c9565b60405173ffffffffffffffffffffffffffffffffffffffff8a16907fa8b21f72cb83bce808df32dc2330217d744a1c22f3e9e44e4b11bbf049d37d9d90600090a2505050505050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561143d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611461919061453a565b611497576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61088e828261357b565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561152b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061154f919061453a565b611585576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61097e6139c3565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611617573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163b919061453a565b611671576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81612cf7565b50565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611707573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172b919061453a565b611761576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61088e8282612f5d565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156117f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611819919061453a565b610884576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156118d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fd919061453a565b611933576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061193e8261233e565b90506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d39190614557565b9050818116156106f9576001546040517fa366f496000000000000000000000000000000000000000000000000000000008152918318600483018190529173ffffffffffffffffffffffffffffffffffffffff9091169063a366f49690602401600060405180830381600087803b158015611a4d57600080fd5b505af1158015611a61573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a2505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611b35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b59919061453a565b611b8f576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81613a83565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611c22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c46919061453a565b611c7c576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81613b3d565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611d0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d33919061453a565b611d69576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a816133c9565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611dfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e20919061453a565b611e56576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ec4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee8919061457b565b60015490915073ffffffffffffffffffffffffffffffffffffffff166311ca4fc2611f116106fe565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff91821660048201529084166024820152604401600060405180830381600087803b158015611f7f57600080fd5b505af1158015611f93573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507f3f82447be465b0b5a4a9e54c74d5f6ae73f2e9537f2cc1590a340524703d09619150600090a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015612065573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612089919061453a565b6120bf576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61271061ffff86161015806120e357506127106120dc8585614784565b61ffff1610155b806120fd57506127106120f68383614784565b61ffff1610155b15612134576040517f0b361d6900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6121578585612145866127106147aa565b85612152866127106147aa565b613c5c565b5050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156121e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061220c919061453a565b612242576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a816132a3565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156122d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122f9919061453a565b61232f576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81613152565b3b151590565b6001546040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063f67c5bd090602401602060405180830381865afa1580156123af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123d39190614557565b90508015806123e25750806001145b15612419576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b73ffffffffffffffffffffffffffffffffffffffff811661246b576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163b6124d6576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024015b60405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8216906370a0823190602401602060405180830381865afa92505050801561257a575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261257791810190614557565b60015b6125b0576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561261e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612642919061457b565b6040517ff9a65030000000000000000000000000000000000000000000000000000000008152670de0b6b3a7640000600482015273ffffffffffffffffffffffffffffffffffffffff8381166024830152919091169063f9a6503090604401602060405180830381865afa9250505080156126f8575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526126f591810190614557565b60015b61272e576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506001546040517fd48bfca700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301529091169063d48bfca790602401600060405180830381600087803b15801561279c57600080fd5b505af11580156127b0573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a250565b60025473ffffffffffffffffffffffffffffffffffffffff8381169116141561284d576040517f3b899cf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f172c48c70000000000000000000000000000000000000000000000000000000081526000600482018190529173ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa1580156128bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128e091906147cd565b91505061ffff821615806128fb57508061ffff168261ffff16115b15612932576040517f33c6608d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015261ffff851660248301529091169063a70bc54290604401600060405180830381600087803b1580156129a957600080fd5b505af11580156129bd573d6000803e3d6000fd5b505060405161ffff8516815273ffffffffffffffffffffffffffffffffffffffff861692507f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650915060200160405180910390a2505050565b60005460ff16612a81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016124cd565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b73ffffffffffffffffffffffffffffffffffffffff8116612b43576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163b612ba9576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024016124cd565b8073ffffffffffffffffffffffffffffffffffffffff1663c12c21c06040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612c2e575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252612c2b9181019061457b565b60015b612c64576040517fe9eddd1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60015473ffffffffffffffffffffffffffffffffffffffff82811691161461088e576040517fe9eddd1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612cc48383613e92565b9392505050565b6000610b43825490565b6000612cc48373ffffffffffffffffffffffffffffffffffffffff8416613ebc565b6000612d016106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015612d4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d6f9190614598565b505090506000612d7d6106fe565b73ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa158015612dc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dea91906145e5565b915050806fffffffffffffffffffffffffffffffff16836fffffffffffffffffffffffffffffffff161015612e4b576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826fffffffffffffffffffffffffffffffff16826fffffffffffffffffffffffffffffffff16146106f957612e7e6106fe565b6040517f9c55a0540000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff8516600482015273ffffffffffffffffffffffffffffffffffffffff9190911690639c55a05490602401600060405180830381600087803b158015612ef957600080fd5b505af1158015612f0d573d6000803e3d6000fd5b50506040516fffffffffffffffffffffffffffffffff861681527fa030eec20ae970821387224ec3bb15b4bd22b89bfb86dc4d2b3827aa3d99e48d925060200190505b60405180910390a1505050565b6000612f676106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015612fb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fd59190614598565b50509050816fffffffffffffffffffffffffffffffff16836fffffffffffffffffffffffffffffffff16118061302e5750806fffffffffffffffffffffffffffffffff16826fffffffffffffffffffffffffffffffff16115b15613065576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61306d6106fe565b6040517f601d66f60000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff80861660048301528416602482015273ffffffffffffffffffffffffffffffffffffffff919091169063601d66f690604401600060405180830381600087803b1580156130f057600080fd5b505af1158015613104573d6000803e3d6000fd5b5050604080516fffffffffffffffffffffffffffffffff8088168252861660208201527f4d4981437d0211f9e6843eb024d9ada1fa3a99514d4343d4aece106dd11524bb9350019050612f50565b600061315c6106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa1580156131a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131ca9190614598565b509150508015158215151461088e576131e16106fe565b6040517fffd9b907000000000000000000000000000000000000000000000000000000008152831515600482015273ffffffffffffffffffffffffffffffffffffffff919091169063ffd9b90790602401600060405180830381600087803b15801561324c57600080fd5b505af1158015613260573d6000803e3d6000fd5b505050507ff97ba903470ff3262b4a68a938fe81def401bac1bd742169d2e8d5c4ed2185d382604051613297911515815260200190565b60405180910390a15050565b73ffffffffffffffffffffffffffffffffffffffff81166132f0576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6132f86106fe565b6040517fb55bb84b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152919091169063b55bb84b90602401600060405180830381600087803b15801561336357600080fd5b505af1158015613377573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841681527fdac9a7995cbc0c0f01d78970fb6fd0b52fe0fe869eb6635e65cc1b5682b8325c925060200190505b60405180910390a150565b60006133d36106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801561341d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134419190614598565b925050508064ffffffffff168264ffffffffff161461088e578164ffffffffff168164ffffffffff16118061347c57508164ffffffffff1642115b156134b3576040517fe4eaca7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134bb6106fe565b6040517feb9606df00000000000000000000000000000000000000000000000000000000815264ffffffffff8416600482015273ffffffffffffffffffffffffffffffffffffffff919091169063eb9606df90602401600060405180830381600087803b15801561352b57600080fd5b505af115801561353f573d6000803e3d6000fd5b505060405164ffffffffff851681527f0b3eb35ba750e7a7e4d26c9eee3d226f4e1f68c5568f4a3d051c94b241b02ac092506020019050613297565b73ffffffffffffffffffffffffffffffffffffffff82166135c8576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82163b61362e576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016124cd565b61363781612af6565b60015473ffffffffffffffffffffffffffffffffffffffff8381169116148061369257506136636106fe565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b806136b7575060015473ffffffffffffffffffffffffffffffffffffffff8281169116145b806136f457506136c56106fe565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b1561372b576040517f727de5c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517fff68754300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063ff68754390602401602060405180830381865afa15801561379c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137c0919061457b565b73ffffffffffffffffffffffffffffffffffffffff1614158061388c57506001546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063fdd5764590602401602060405180830381865afa15801561384f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613873919061457b565b73ffffffffffffffffffffffffffffffffffffffff1614155b156138c3576040517f21ff1e7100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f6e98e5e400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152848116602483015290911690636e98e5e490604401600060405180830381600087803b15801561393857600080fd5b505af115801561394c573d6000803e3d6000fd5b50505050613964826003613faf90919063ffffffff16565b508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4bcbefaef68b99503d502f5a6abe7bca2b183ab8ac55457013c77d084ebd130560405160405180910390a35050565b60005460ff1615613a30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016124cd565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612acc3390565b6001546040517fdc2b21c100000000000000000000000000000000000000000000000000000000815260ff8316600482015273ffffffffffffffffffffffffffffffffffffffff9091169063dc2b21c190602401600060405180830381600087803b158015613af157600080fd5b505af1158015613b05573d6000803e3d6000fd5b505060405160ff841681527f73caacd705657a7d283e48ecf288b73bc517e3aea1bbc9da2fd54a979e8aa950925060200190506133be565b73ffffffffffffffffffffffffffffffffffffffff8116613b8a576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613b926106fe565b6040517fdcf6548200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152919091169063dcf6548290602401600060405180830381600087803b158015613bfd57600080fd5b505af1158015613c11573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841681527f32e53e2e527af8518ae889e5f7e674bc83f7cf68e4cc059aceeaa0e64208b85b925060200190506133be565b6000613c6885856147aa565b6001546040517f172c48c700000000000000000000000000000000000000000000000000000000815260006004820181905292935073ffffffffffffffffffffffffffffffffffffffff9091169063172c48c7906024016040805180830381865afa158015613cdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cff91906147cd565b9150508061ffff168261ffff1614613d6e57613d1a82613fd1565b60025460405161ffff8416815273ffffffffffffffffffffffffffffffffffffffff909116907f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac6509060200160405180910390a25b6001546040517f944ac59f00000000000000000000000000000000000000000000000000000000815261ffff808a1660048301528089166024830152808816604483015280871660648301528516608482015273ffffffffffffffffffffffffffffffffffffffff9091169063944ac59f9060a401600060405180830381600087803b158015613dfd57600080fd5b505af1158015613e11573d6000803e3d6000fd5b505050507f2214a403d5f8d049e52eacca974c6dea01a471e41d6a18903bfaf7dbc709741f878787612710613e4691906147aa565b87613e53886127106147aa565b6040805161ffff96871681529486166020860152928516848401529084166060840152909216608082015290519081900360a00190a150505050505050565b6000826000018281548110613ea957613ea9614726565b9060005260206000200154905092915050565b60008181526001830160205260408120548015613fa5576000613ee06001836147fc565b8554909150600090613ef4906001906147fc565b9050818114613f59576000866000018281548110613f1457613f14614726565b9060005260206000200154905080876000018481548110613f3757613f37614726565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080613f6a57613f6a614813565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610b43565b6000915050610b43565b6000612cc48373ffffffffffffffffffffffffffffffffffffffff8416614296565b6001546002546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015261ffff8416602482015291169063a70bc54290604401600060405180830381600087803b15801561404a57600080fd5b505af115801561405e573d6000803e3d6000fd5b505050506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156140d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140f59190614557565b905060015b818110156106f9576001546040517f172c48c700000000000000000000000000000000000000000000000000000000815260048101839052600091829173ffffffffffffffffffffffffffffffffffffffff9091169063172c48c7906024016040805180830381865afa158015614175573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061419991906147cd565b915091508461ffff168161ffff16111561428c576001546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015261ffff881660248301529091169063a70bc54290604401600060405180830381600087803b15801561422457600080fd5b505af1158015614238573d6000803e3d6000fd5b505060405161ffff8816815273ffffffffffffffffffffffffffffffffffffffff851692507f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650915060200160405180910390a25b50506001016140fa565b60008181526001830160205260408120546142dd57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610b43565b506000610b43565b73ffffffffffffffffffffffffffffffffffffffff8116811461167a57600080fd5b60006020828403121561431957600080fd5b8135612cc4816142e5565b61ffff8116811461167a57600080fd5b6000806040838503121561434757600080fd5b8235614352816142e5565b9150602083013561436281614324565b809150509250929050565b60006020828403121561437f57600080fd5b5035919050565b801515811461167a57600080fd5b600080604083850312156143a757600080fd5b82356143b2816142e5565b9150602083013561436281614386565b600080604083850312156143d557600080fd5b82356143e0816142e5565b91506020830135614362816142e5565b6fffffffffffffffffffffffffffffffff8116811461167a57600080fd5b60006020828403121561442057600080fd5b8135612cc4816143f0565b6000806040838503121561443e57600080fd5b8235614449816143f0565b91506020830135614362816143f0565b60006020828403121561446b57600080fd5b813560ff81168114612cc457600080fd5b64ffffffffff8116811461167a57600080fd5b6000602082840312156144a157600080fd5b8135612cc48161447c565b600080600080600060a086880312156144c457600080fd5b85356144cf81614324565b945060208601356144df81614324565b935060408601356144ef81614324565b925060608601356144ff81614324565b9150608086013561450f81614324565b809150509295509295909350565b60006020828403121561452f57600080fd5b8135612cc481614386565b60006020828403121561454c57600080fd5b8151612cc481614386565b60006020828403121561456957600080fd5b5051919050565b8051612419816142e5565b60006020828403121561458d57600080fd5b8151612cc4816142e5565b6000806000606084860312156145ad57600080fd5b83516145b8816143f0565b60208501519093506145c981614386565b60408501519092506145da8161447c565b809150509250925092565b600080604083850312156145f857600080fd5b8251614603816143f0565b6020840151909250614362816143f0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000602080838503121561465657600080fd5b825167ffffffffffffffff8082111561466e57600080fd5b818501915085601f83011261468257600080fd5b81518181111561469457614694614614565b8060051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f830116810181811085821117156146d7576146d7614614565b6040529182528482019250838101850191888311156146f557600080fd5b938501935b8285101561471a5761470b85614570565b845293850193928501926146fa565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061ffff8083168185168083038211156147a1576147a1614755565b01949350505050565b600061ffff838116908316818110156147c5576147c5614755565b039392505050565b600080604083850312156147e057600080fd5b82516147eb816142e5565b602084015190925061436281614324565b60008282101561480e5761480e614755565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea264697066735822122046c364b67d38a3dd85b57e027716324d90dd1df102f265f0a0e2697babdb3f3b64736f6c634300080a003394525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650a264697066735822122060a6769f0738e39eae238fb402f2897e68091d4282422f31f97df313a427217864736f6c634300080a0033"; - -type ConvexV1ClaimZapAdapterTestConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: ConvexV1ClaimZapAdapterTestConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class ConvexV1ClaimZapAdapterTest__factory extends ContractFactory { - constructor(...args: ConvexV1ClaimZapAdapterTestConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - overrides || {} - ) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): ConvexV1ClaimZapAdapterTest { - return super.attach(address) as ConvexV1ClaimZapAdapterTest; - } - override connect(signer: Signer): ConvexV1ClaimZapAdapterTest__factory { - return super.connect(signer) as ConvexV1ClaimZapAdapterTest__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): ConvexV1ClaimZapAdapterTestInterface { - return new utils.Interface(_abi) as ConvexV1ClaimZapAdapterTestInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): ConvexV1ClaimZapAdapterTest { - return new Contract( - address, - _abi, - signerOrProvider - ) as ConvexV1ClaimZapAdapterTest; - } -} diff --git a/src/types/factories/contracts/test/adapters/ConvexV1_ClaimZap.t.sol/index.ts b/src/types/factories/contracts/test/adapters/ConvexV1_ClaimZap.t.sol/index.ts deleted file mode 100644 index 88e8cc7c..00000000 --- a/src/types/factories/contracts/test/adapters/ConvexV1_ClaimZap.t.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { ConvexV1ClaimZapAdapterTest__factory } from "./ConvexV1ClaimZapAdapterTest__factory"; diff --git a/src/types/factories/contracts/test/adapters/CurveV1AdapterBaseMetapoolTest.t.sol/CurveV1AdapterBaseMetaPoolTest__factory.ts b/src/types/factories/contracts/test/adapters/CurveV1AdapterBaseMetapoolTest.t.sol/CurveV1AdapterBaseMetaPoolTest__factory.ts deleted file mode 100644 index 13ec9576..00000000 --- a/src/types/factories/contracts/test/adapters/CurveV1AdapterBaseMetapoolTest.t.sol/CurveV1AdapterBaseMetaPoolTest__factory.ts +++ /dev/null @@ -1,819 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - CurveV1AdapterBaseMetaPoolTest, - CurveV1AdapterBaseMetaPoolTestInterface, -} from "../../../../../contracts/test/adapters/CurveV1AdapterBaseMetapoolTest.t.sol/CurveV1AdapterBaseMetaPoolTest"; - -const _abi = [ - { - inputs: [], - name: "IncorrectIndexException", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "TokenIsNotInAllowedList", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "onBehalfOf", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "token", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "AddCollateral", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - ], - name: "CloseCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "DecreaseBorrowedAmount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "target", - type: "address", - }, - ], - name: "ExecuteOrder", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "IncreaseBorrowedAmount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "liquidator", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "remainingFunds", - type: "uint256", - }, - ], - name: "LiquidateCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "liquidator", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "remainingFunds", - type: "uint256", - }, - ], - name: "LiquidateExpiredCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [], - name: "MultiCallFinished", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - ], - name: "MultiCallStarted", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newConfigurator", - type: "address", - }, - ], - name: "NewConfigurator", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "onBehalfOf", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "borrowAmount", - type: "uint256", - }, - { - indexed: false, - internalType: "uint16", - name: "referralCode", - type: "uint16", - }, - ], - name: "OpenCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "token", - type: "address", - }, - ], - name: "TokenDisabled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "token", - type: "address", - }, - ], - name: "TokenEnabled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "oldOwner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "TransferAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "bool", - name: "state", - type: "bool", - }, - ], - name: "TransferAccountAllowed", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "", - type: "address", - }, - ], - name: "log_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "log_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - name: "log_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "int256", - name: "", - type: "int256", - }, - ], - name: "log_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "address", - name: "val", - type: "address", - }, - ], - name: "log_named_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes", - name: "val", - type: "bytes", - }, - ], - name: "log_named_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes32", - name: "val", - type: "bytes32", - }, - ], - name: "log_named_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - ], - name: "log_named_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "string", - name: "val", - type: "string", - }, - ], - name: "log_named_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - ], - name: "log_named_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "log_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "logs", - type: "event", - }, - { - inputs: [], - name: "IS_TEST", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "adapter", - outputs: [ - { - internalType: "contract ICurveV1Adapter", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "cft", - outputs: [ - { - internalType: "contract CreditFacadeTestSuite", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditConfigurator", - outputs: [ - { - internalType: "contract CreditConfigurator", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditFacade", - outputs: [ - { - internalType: "contract CreditFacade", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditManager", - outputs: [ - { - internalType: "contract ICreditManagerV2", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "curveV1Mock", - outputs: [ - { - internalType: "contract CurveV1MetapoolMock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "failed", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "setUp", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_ACV1_M_01_constructor_sets_correct_values", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_ACV1_M_02_exchange_underlying_works_correctly", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_ACV1_M_03_exchange_all_underlying_works_correctly", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_ACV1_M_04_multicall_exchange_underlying_works_correctly", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_ACV1_M_05_multicall_exchange_all_underlying_works_correctly", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "underlying", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x60806040526000805460ff1916600190811790915580546001600160a01b031916737109709ecfa91a80626ff3989d68f67f5b1dd12d17905534801561004457600080fd5b5062050edc80620000566000396000f3fe60806040523480156200001157600080fd5b5060043610620001095760003560e01c80636f307dc311620000a3578063df514433116200006e578063df514433146200022c578063ee5f9b52146200024d578063f9aa028a1462000257578063fa7626d4146200027857600080fd5b80636f307dc314620001c5578063ba414fa614620001e6578063bdaff1151462000201578063c12c21c0146200020b57600080fd5b806329d351d811620000e457806329d351d8146200016f5780632f7a188114620001905780633c8bc64014620001b157806352bb769d14620001bb57600080fd5b806303eadcfc146200010e57806306a489d414620001595780630a9254e41462000165575b600080fd5b6010546200012f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6200016362000286565b005b6200016362000765565b6011546200012f9073ffffffffffffffffffffffffffffffffffffffff1681565b6003546200012f9073ffffffffffffffffffffffffffffffffffffffff1681565b6200016362000bfc565b62000163620011e3565b6006546200012f9073ffffffffffffffffffffffffffffffffffffffff1681565b620001f062001678565b604051901515815260200162000150565b62000163620017e2565b6002546200012f9073ffffffffffffffffffffffffffffffffffffffff1681565b6005546200012f9073ffffffffffffffffffffffffffffffffffffffff1681565b6200016362001caa565b6004546200012f9073ffffffffffffffffffffffffffffffffffffffff1681565b600054620001f09060ff1681565b600080546040517f67b426450000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff16906367b4264590620002e590600a9060040162006f2a565b602060405180830381865afa15801562000303573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000329919062006f63565b600080546040517f67b4264500000000000000000000000000000000000000000000000000000000815292935090916201000090910473ffffffffffffffffffffffffffffffffffffffff16906367b42645906200038d9060099060040162006f2a565b602060405180830381865afa158015620003ab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003d1919062006f63565b90506000620003df62001e15565b50905062000404600a620003fe670de0b6b3a7640000612ee062006fb9565b620021fc565b60007fa6417ed60000000000000000000000000000000000000000000000000000000081600362000440670de0b6b3a764000061012c62006fb9565b606462000458670de0b6b3a764000061012c62006fb9565b6200046590606362006fb9565b62000471919062006ff9565b60405160ff94851660248201529390921660448401526064830152608482015260a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152601054601154919250620005599173ffffffffffffffffffffffffffffffffffffffff918216911673f39fd6e51aad88f6f4ce6ab8827279cfffb922668488886000620027c5565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b158015620005d957600080fd5b505af1158015620005ee573d6000803e3d6000fd5b505060105473ffffffffffffffffffffffffffffffffffffffff16915063a6417ed69050600060036200062c670de0b6b3a764000061012c62006fb9565b606462000644670de0b6b3a764000061012c62006fb9565b6200065190606362006fb9565b6200065d919062006ff9565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b168152600f94850b60048201529290930b602483015260448201526064810191909152608401600060405180830381600087803b158015620006c757600080fd5b505af1158015620006dc573d6000803e3d6000fd5b5050505062000727600a83670de0b6b3a764000061012c620006ff919062006fb9565b62000715670de0b6b3a7640000612ee062006fb9565b62000721919062007035565b620027e1565b6200075f600983606462000746670de0b6b3a764000061012c62006fb9565b6200075390606362006fb9565b62000721919062006ff9565b50505050565b6200076f62002803565b6000546007546040517f883278630000000000000000000000000000000000000000000000000000000081526201000090920473ffffffffffffffffffffffffffffffffffffffff90811692638832786392620007d5926001929116906004016200704f565b602060405180830381865afa158015620007f3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000819919062007082565b50600754601180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691821790556040517fb91434d100000000000000000000000000000000000000000000000000000000815260006004820152600160248201526b033b2e3c9fd0803ce8000000604482015263b91434d190606401600060405180830381600087803b158015620008ca57600080fd5b505af1158015620008df573d6000803e3d6000fd5b50506011546040517f56ac350300000000000000000000000000000000000000000000000000000000815260006004820152600160248201526b033b2e3c9fd0803ce8000000604482015273ffffffffffffffffffffffffffffffffffffffff90911692506356ac35039150606401600060405180830381600087803b1580156200096957600080fd5b505af11580156200097e573d6000803e3d6000fd5b505060115473ffffffffffffffffffffffffffffffffffffffff1691506356ac35039050600060026064620009c16b033b2e3c9fd0803ce8000000606362006fb9565b620009cd919062006ff9565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152600f93840b60048201529190920b60248201526044810191909152606401600060405180830381600087803b15801562000a3257600080fd5b505af115801562000a47573d6000803e3d6000fd5b505060115473ffffffffffffffffffffffffffffffffffffffff1691506356ac3503905060006003606462000a8a6b033b2e3c9fd0803ce8000000606362006fb9565b62000a96919062006ff9565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152600f93840b60048201529190920b60248201526044810191909152606401600060405180830381600087803b15801562000afb57600080fd5b505af115801562000b10573d6000803e3d6000fd5b50506011546040517f56ac350300000000000000000000000000000000000000000000000000000000815260026004820152600360248201526b033b2e3c9fd0803ce8000000604482015273ffffffffffffffffffffffffffffffffffffffff90911692506356ac35039150606401600060405180830381600087803b15801562000b9a57600080fd5b505af115801562000baf573d6000803e3d6000fd5b5050600854601080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9092169190911790555050565b600080546040517f67b426450000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff16906367b426459062000c5b90600a9060040162006f2a565b602060405180830381865afa15801562000c79573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c9f919062006f63565b600080546040517f67b4264500000000000000000000000000000000000000000000000000000000815292935090916201000090910473ffffffffffffffffffffffffffffffffffffffff16906367b426459062000d039060099060040162006f2a565b602060405180830381865afa15801562000d21573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000d47919062006f63565b9050600062000d5562001e15565b50905062000d74600a620003fe670de0b6b3a7640000612ee062006fb9565b60007fa6417ed600000000000000000000000000000000000000000000000000000000816003600162000db2670de0b6b3a7640000612ee062006fb9565b62000dbe919062007035565b6064600162000dd8670de0b6b3a7640000612ee062006fb9565b62000de4919062007035565b62000df190606362006fb9565b62000dfd919062006ff9565b60405160ff94851660248201529390921660448401526064830152608482015260a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152905060007f1af4de8300000000000000000000000000000000000000000000000000000000816003606462000ee06b033b2e3c9fd0803ce8000000606362006fb9565b62000eec919062006ff9565b60405160ff93841660248201529290911660448301526064820152608401604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00181529181526020820180517fffffffff00000000000000000000000000000000000000000000000000000000949094167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff9094169390931790925281516001808252818401909352909250600091816020015b60408051808201909152600081526060602082015281526020019060019003908162000fa25750506040805180820190915260105473ffffffffffffffffffffffffffffffffffffffff168152602081018490528151919250908290600090620010105762001010620070cb565b6020908102919091010152601054601154620010609173ffffffffffffffffffffffffffffffffffffffff908116911673f39fd6e51aad88f6f4ce6ab8827279cfffb92266868a8a6000620043e1565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b158015620010e057600080fd5b505af1158015620010f5573d6000803e3d6000fd5b50506003546040517fcaa5c23f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116925063caa5c23f91506200115190849060040162007175565b600060405180830381600087803b1580156200116c57600080fd5b505af115801562001181573d6000803e3d6000fd5b5050505062001194600a856001620027e1565b620011c160098560646001620011b5670de0b6b3a7640000612ee062006fb9565b62000746919062007035565b620011ce866000620043f4565b620011db856001620043f4565b505050505050565b600080546040517f67b426450000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff16906367b42645906200124290600a9060040162006f2a565b602060405180830381865afa15801562001260573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001286919062006f63565b600080546040517f67b4264500000000000000000000000000000000000000000000000000000000815292935090916201000090910473ffffffffffffffffffffffffffffffffffffffff16906367b4264590620012ea9060099060040162006f2a565b602060405180830381865afa15801562001308573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200132e919062006f63565b905060006200133c62001e15565b5090506200135b600a620003fe670de0b6b3a7640000612ee062006fb9565b60007fa6417ed600000000000000000000000000000000000000000000000000000000816003600162001399670de0b6b3a7640000612ee062006fb9565b620013a5919062007035565b60646001620013bf670de0b6b3a7640000612ee062006fb9565b620013cb919062007035565b620013d890606362006fb9565b620013e4919062006ff9565b60405160ff94851660248201529390921660448401526064830152608482015260a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152601054601154919250620014cc9173ffffffffffffffffffffffffffffffffffffffff918216911673f39fd6e51aad88f6f4ce6ab8827279cfffb922668488886000620027c5565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b1580156200154c57600080fd5b505af115801562001561573d6000803e3d6000fd5b505060105473ffffffffffffffffffffffffffffffffffffffff169150631af4de839050600060036064620015a46b033b2e3c9fd0803ce8000000606362006fb9565b620015b0919062006ff9565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152600f93840b60048201529190920b60248201526044810191909152606401600060405180830381600087803b1580156200161557600080fd5b505af11580156200162a573d6000803e3d6000fd5b505050506200163d600a836001620027e1565b6200165e60098360646001620011b5670de0b6b3a7640000612ee062006fb9565b6200166b846000620043f4565b6200075f836001620043f4565b60008054610100900460ff1615620016995750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620017dd5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000008284015282518083038401815260608301909352600092909162001741917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc49160800162007221565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526200177b916200726b565b6000604051808303816000865af19150503d8060008114620017ba576040519150601f19603f3d011682016040523d82523d6000602084013e620017bf565b606091505b5091505080806020019051810190620017d9919062007289565b9150505b919050565b600080546040517f67b426450000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff16906367b42645906200184190600a9060040162006f2a565b602060405180830381865afa1580156200185f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001885919062006f63565b600080546040517f67b4264500000000000000000000000000000000000000000000000000000000815292935090916201000090910473ffffffffffffffffffffffffffffffffffffffff16906367b4264590620018e99060099060040162006f2a565b602060405180830381865afa15801562001907573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200192d919062006f63565b905060006200193b62001e15565b5090506200195a600a620003fe670de0b6b3a7640000612ee062006fb9565b60007fa6417ed60000000000000000000000000000000000000000000000000000000081600362001996670de0b6b3a764000061012c62006fb9565b6064620019ae670de0b6b3a764000061012c62006fb9565b620019bb90606362006fb9565b620019c7919062006ff9565b60405160ff94851660248201529390921660448401526064830152608482015260a401604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00181529181526020820180517fffffffff00000000000000000000000000000000000000000000000000000000949094167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff9094169390931790925281516001808252818401909352909250600091816020015b60408051808201909152600081526060602082015281526020019060019003908162001a825750506040805180820190915260105473ffffffffffffffffffffffffffffffffffffffff16815260208101849052815191925090829060009062001af05762001af0620070cb565b602090810291909101015260105460115462001b409173ffffffffffffffffffffffffffffffffffffffff908116911673f39fd6e51aad88f6f4ce6ab8827279cfffb922668589896000620043e1565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b15801562001bc057600080fd5b505af115801562001bd5573d6000803e3d6000fd5b50506003546040517fcaa5c23f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116925063caa5c23f915062001c3190849060040162007175565b600060405180830381600087803b15801562001c4c57600080fd5b505af115801562001c61573d6000803e3d6000fd5b5050505062001c84600a84670de0b6b3a764000061012c620006ff919062006fb9565b62001ca3600984606462000746670de0b6b3a764000061012c62006fb9565b5050505050565b601054604080517f64a89bca000000000000000000000000000000000000000000000000000000008152905162001e139273ffffffffffffffffffffffffffffffffffffffff16916364a89bca9160048083019260209291908290030181865afa15801562001d1d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001d43919062006f63565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c531e24f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001db1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001dd7919062006f63565b6040518060400160405280601381526020017f496e636f7272656374206261736520706f6f6c0000000000000000000000000081525062004414565b565b6000806000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635f7c9bd06040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001e88573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001eae919062007082565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015291925073ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b15801562001f2f57600080fd5b505af115801562001f44573d6000803e3d6000fd5b50506003546040517f6c8f225d0000000000000000000000000000000000000000000000000000000081526004810185905273f39fd6e51aad88f6f4ce6ab8827279cfffb92266602482015260646044820181905260009082015273ffffffffffffffffffffffffffffffffffffffff9091169250636c8f225d9150608401600060405180830381600087803b15801562001fde57600080fd5b505af115801562001ff3573d6000803e3d6000fd5b50506002546040517fe958b70400000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063e958b7049150602401602060405180830381865afa1580156200207a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620020a0919062006f63565b6006546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80841660048301529295509116906370a0823190602401602060405180830381865afa15801562002113573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002139919062007082565b600154604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301526024820192909252600d60448201527f6372656469744163636f756e74000000000000000000000000000000000000006064820152929450169063c657c71890608401600060405180830381600087803b158015620021de57600080fd5b505af1158015620021f3573d6000803e3d6000fd5b50505050509091565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663406c8e2f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200226a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002290919062006f63565b73ffffffffffffffffffffffffffffffffffffffff1663eebab8ef8373f39fd6e51aad88f6f4ce6ab8827279cfffb92266846040518463ffffffff1660e01b8152600401620022e293929190620072ad565b600060405180830381600087803b158015620022fd57600080fd5b505af115801562002312573d6000803e3d6000fd5b50506001546040517f06447d5600000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff90911692506306447d569150602401600060405180830381600087803b1580156200239657600080fd5b505af1158015620023ab573d6000803e3d6000fd5b50505050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663406c8e2f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200241d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002443919062006f63565b73ffffffffffffffffffffffffffffffffffffffff166367b42645836040518263ffffffff1660e01b81526004016200247d919062006f2a565b602060405180830381865afa1580156200249b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620024c1919062006f63565b6002546040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602482015291169063095ea7b3906044016020604051808303816000875af115801562002559573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200257f919062007289565b50600354600554604080517f406c8e2f000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169363597810349373f39fd6e51aad88f6f4ce6ab8827279cfffb922669391169163406c8e2f916004808201926020929091908290030181865afa15801562002613573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002639919062006f63565b73ffffffffffffffffffffffffffffffffffffffff166367b42645866040518263ffffffff1660e01b815260040162002673919062006f2a565b602060405180830381865afa15801562002691573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620026b7919062006f63565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff92831660048201529116602482015260448101849052606401600060405180830381600087803b1580156200272c57600080fd5b505af115801562002741573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620027b057600080fd5b505af1158015620011db573d6000803e3d6000fd5b620027d88787878787878760016200448d565b50505050505050565b620027fe8383836040518060200160405280600081525062004a8c565b505050565b6200280f600162004bc5565b604080516080810190915280600781526020016008815260200160098152602001600a90526200284490600d90600462006d9a565b50604080516080810190915280600181526020016002815260200160058152602001600490526200287a90600e90600462006d9a565b506000620028896003620050ed565b905060006200289960036200577b565b90508181604051620028ab9062006e45565b620028b892919062007337565b604051809103906000f080158015620028d5573d6000803e3d6000fd5b50600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600554604080517f2954018c00000000000000000000000000000000000000000000000000000000815290516000939290921691632954018c916004808201926020929091908290030181865afa15801562002977573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200299d919062006f63565b600c54600554604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691632630c12f916004808201926020929091908290030181865afa15801562002a15573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002a3b919062006f63565b73ffffffffffffffffffffffffffffffffffffffff16639dcb511a8660008151811062002a6c5762002a6c620070cb565b60200260200101516040518263ffffffff1660e01b815260040162002aad919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa15801562002acb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002af1919062006f63565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002b5f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002b85919062006f63565b73ffffffffffffffffffffffffffffffffffffffff16639dcb511a8760018151811062002bb65762002bb6620070cb565b60200260200101516040518263ffffffff1660e01b815260040162002bf7919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa15801562002c15573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002c3b919062006f63565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002ca9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002ccf919062006f63565b73ffffffffffffffffffffffffffffffffffffffff16639dcb511a8860028151811062002d005762002d00620070cb565b60200260200101516040518263ffffffff1660e01b815260040162002d41919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa15801562002d5f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002d85919062006f63565b60405162002d939062006e53565b62002da395949392919062007369565b604051809103906000f08015801562002dc0573d6000803e3d6000fd5b5090506000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002e33573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002e59919062006f63565b6001546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291925073ffffffffffffffffffffffffffffffffffffffff16906306447d5690602401600060405180830381600087803b15801562002eda57600080fd5b505af115801562002eef573d6000803e3d6000fd5b50505050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002f61573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002f87919062006f63565b6040517fe8a97a3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301528481166024830152919091169063e8a97a3e90604401600060405180830381600087803b15801562002ffb57600080fd5b505af115801562003010573d6000803e3d6000fd5b5050600480546040517f3e7c88d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811693820193909352612454602482015291169250633e7c88d69150604401600060405180830381600087803b1580156200308c57600080fd5b505af1158015620030a1573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200311057600080fd5b505af115801562003125573d6000803e3d6000fd5b5050600054600c5473ffffffffffffffffffffffffffffffffffffffff620100009092048216935063eebab8ef9250600791166200316e670de0b6b3a7640000614e2062006fb9565b6040518463ffffffff1660e01b81526004016200318e93929190620072ad565b600060405180830381600087803b158015620031a957600080fd5b505af1158015620031be573d6000803e3d6000fd5b5050600054600c546040517feebab8ef00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff620100009093048316945063eebab8ef93506200322d9260089216906404a817c80090600401620072ad565b600060405180830381600087803b1580156200324857600080fd5b505af11580156200325d573d6000803e3d6000fd5b5050600054600c5473ffffffffffffffffffffffffffffffffffffffff620100009092048216935063eebab8ef925060099116620032a6670de0b6b3a764000061a41062006fb9565b6040518463ffffffff1660e01b8152600401620032c693929190620072ad565b600060405180830381600087803b158015620032e157600080fd5b505af1158015620032f6573d6000803e3d6000fd5b50506000546040517f67b426450000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff1692506367b4264591506200335890600a9060040162006f2a565b602060405180830381865afa15801562003376573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200339c919062006f63565b600c5460405173ffffffffffffffffffffffffffffffffffffffff90911690620033c69062006e61565b73ffffffffffffffffffffffffffffffffffffffff928316815291166020820152604001604051809103906000f08015801562003407573d6000803e3d6000fd5b50600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055620034596004620050ed565b9350600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620034c9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620034ef919062006f63565b600754600554604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691632630c12f916004808201926020929091908290030181865afa15801562003567573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200358d919062006f63565b73ffffffffffffffffffffffffffffffffffffffff16639dcb511a87600081518110620035be57620035be620070cb565b60200260200101516040518263ffffffff1660e01b8152600401620035ff919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa1580156200361d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003643919062006f63565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620036b1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620036d7919062006f63565b73ffffffffffffffffffffffffffffffffffffffff16639dcb511a88600181518110620037085762003708620070cb565b60200260200101516040518263ffffffff1660e01b815260040162003749919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa15801562003767573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200378d919062006f63565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620037fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003821919062006f63565b73ffffffffffffffffffffffffffffffffffffffff16639dcb511a89600281518110620038525762003852620070cb565b60200260200101516040518263ffffffff1660e01b815260040162003893919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa158015620038b1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620038d7919062006f63565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562003945573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200396b919062006f63565b73ffffffffffffffffffffffffffffffffffffffff16639dcb511a8a6003815181106200399c576200399c620070cb565b60200260200101516040518263ffffffff1660e01b8152600401620039dd919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa158015620039fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003a21919062006f63565b60405162003a2f9062006e6f565b73ffffffffffffffffffffffffffffffffffffffff96871681529486166020860152928516604085015290841660608401528316608083015290911660a082015260e060c082018190526011908201527f43757276654c503350726963654665656400000000000000000000000000000061010082015261012001604051809103906000f08015801562003ac7573d6000803e3d6000fd5b509150600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562003b38573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003b5e919062006f63565b600f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283161790556001546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201529116906306447d5690602401600060405180830381600087803b15801562003c0957600080fd5b505af115801562003c1e573d6000803e3d6000fd5b50505050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562003c90573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003cb6919062006f63565b600f546040517fe8a97a3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152848216602482015291169063e8a97a3e90604401600060405180830381600087803b15801562003d2b57600080fd5b505af115801562003d40573d6000803e3d6000fd5b505060048054600f546040517f3e7c88d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216938101939093526124546024840152169250633e7c88d69150604401600060405180830381600087803b15801562003dbe57600080fd5b505af115801562003dd3573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562003e4257600080fd5b505af115801562003e57573d6000803e3d6000fd5b5050600254600754600f54600c5460405173ffffffffffffffffffffffffffffffffffffffff9485169650928416945090831692169062003e989062006e7d565b73ffffffffffffffffffffffffffffffffffffffff9485168152928416602084015290831660408301529091166060820152608001604051809103906000f08015801562003eea573d6000803e3d6000fd5b50600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283161790556001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291169063ca669fa790602401600060405180830381600087803b15801562003f9657600080fd5b505af115801562003fab573d6000803e3d6000fd5b5050600480546007546008546040517f7bccacee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283169481019490945281166024840152169250637bccacee9150604401600060405180830381600087803b1580156200402b57600080fd5b505af115801562004040573d6000803e3d6000fd5b505060005460075473ffffffffffffffffffffffffffffffffffffffff620100009092048216935063eebab8ef9250600a911662004089670de0b6b3a7640000612ee062006fb9565b6040518463ffffffff1660e01b8152600401620040a993929190620072ad565b600060405180830381600087803b158015620040c457600080fd5b505af1158015620040d9573d6000803e3d6000fd5b5050600c5460075473ffffffffffffffffffffffffffffffffffffffff91821693506399bd2ba592501662004119670de0b6b3a7640000614e2062006fb9565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401600060405180830381600087803b1580156200418557600080fd5b505af11580156200419a573d6000803e3d6000fd5b5050600154600854604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152600760448201527f414441505445520000000000000000000000000000000000000000000000000060648201529116925063c657c7189150608401600060405180830381600087803b1580156200424457600080fd5b505af115801562004259573d6000803e3d6000fd5b5050600154600754604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152600a60448201527f43555256455f4d4f434b0000000000000000000000000000000000000000000060648201529116925063c657c7189150608401600060405180830381600087803b1580156200430357600080fd5b505af115801562004318573d6000803e3d6000fd5b5050600154600f54604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152600e60448201527f43555256455f4c505f544f4b454e00000000000000000000000000000000000060648201529116925063c657c7189150608401600060405180830381600087803b158015620043c257600080fd5b505af1158015620043d7573d6000803e3d6000fd5b5050505050505050565b620027d887878787878787600162005e03565b62004410828260405180602001604052806000815250620063e3565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614620027fe577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf358381604051620044799190620073ea565b60405180910390a1620027fe838362006759565b6002546040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152600092169063e958b70490602401602060405180830381865afa158015620044ff573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004525919062006f63565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000918716906370a0823190602401602060405180830381865afa15801562004598573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620045be919062007082565b90508215620046f6576001546002546040805173ffffffffffffffffffffffffffffffffffffffff8c811660248301528d811660448301528a811660648301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6084808401919091528351808403909101815260a490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f46fb371d0000000000000000000000000000000000000000000000000000000017905291517fbd6af4340000000000000000000000000000000000000000000000000000000081529382169363bd6af43493620046c19316919060040162007433565b600060405180830381600087803b158015620046dc57600080fd5b505af1158015620046f1573d6000803e3d6000fd5b505050505b60015460025460405173ffffffffffffffffffffffffffffffffffffffff9283169263bd6af4349216907f6ce4074a000000000000000000000000000000000000000000000000000000009062004756908d908f908e906024016200746c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b9092168252620047e9929160040162007433565b600060405180830381600087803b1580156200480457600080fd5b505af115801562004819573d6000803e3d6000fd5b5050600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526024810192909252600060448301819052606483015273ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b1580156200489f57600080fd5b505af1158015620048b4573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff808d1693508b1691507faed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab0390600090a3821562004a805760015460025473ffffffffffffffffffffffffffffffffffffffff9182169163bd6af43491167f46fb371d000000000000000000000000000000000000000000000000000000008b8d8b8a6200497b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6200497e565b60015b60405173ffffffffffffffffffffffffffffffffffffffff9485166024820152928416604484015292166064820152608481019190915260a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b909216825262004a4b929160040162007433565b600060405180830381600087803b15801562004a6657600080fd5b505af115801562004a7b573d6000803e3d6000fd5b505050505b50505050505050505050565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1662004b17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f74657374546f6b656e5375697465206973206e6f74207365740000000000000060448201526064015b60405180910390fd5b6000546040517f67b426450000000000000000000000000000000000000000000000000000000081526200075f9162010000900473ffffffffffffffffffffffffffffffffffffffff16906367b426459062004b7890889060040162006f2a565b602060405180830381865afa15801562004b96573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004bbc919062006f63565b84848462006897565b600181600a81111562004bdc5762004bdc62006ebf565b148062004bfd5750600381600a81111562004bfb5762004bfb62006ebf565b145b62004c65576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f556e737570706f7274656420746f6b656e000000000000000000000000000000604482015260640162004b0e565b60405162004c739062006e8b565b604051809103906000f08015801562004c90573d6000803e3d6000fd5b50600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff166201000073ffffffffffffffffffffffffffffffffffffffff9384168102919091179182905590041663b36ba20862004cfa670de0b6b3a7640000606462006fb9565b6040518263ffffffff1660e01b81526004016000604051808303818588803b15801562004d2657600080fd5b505af115801562004d3b573d6000803e3d6000fd5b5050505050600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160405162004d729062006e99565b62004d7f929190620074a7565b604051809103906000f08015801562004d9c573d6000803e3d6000fd5b50600580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169182179055604080517f6f307dc30000000000000000000000000000000000000000000000000000000081529051636f307dc3916004808201926020929091908290030181865afa15801562004e36573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004e5c919062006f63565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600554604080517fc12c21c00000000000000000000000000000000000000000000000000000000081529051919092169163c12c21c09160048083019260209291908290030181865afa15801562004ef9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004f1f919062006f63565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600554604080517f2f7a188100000000000000000000000000000000000000000000000000000000815290519190921691632f7a18819160048083019260209291908290030181865afa15801562004fbc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004fe2919062006f63565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600554604080517ff9aa028a0000000000000000000000000000000000000000000000000000000081529051919092169163f9aa028a9160048083019260209291908290030181865afa1580156200507f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620050a5919062006f63565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b6060600482111562005182576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f676574506f6f6c546f6b656e733a20496e636f7272656374206e436f696e732060448201527f706172616d657465720000000000000000000000000000000000000000000000606482015260840162004b0e565b8167ffffffffffffffff8111156200519e576200519e6200709c565b604051908082528060200260200182016040528015620051c8578160200160208202803683370190505b50905060005b82811015620057755760005462010000900473ffffffffffffffffffffffffffffffffffffffff166367b42645600d8360048110620052115762005211620070cb565b602091828204019190069054906101000a900460ff166040518263ffffffff1660e01b815260040162005245919062006f2a565b602060405180830381865afa15801562005263573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005289919062006f63565b8282815181106200529e576200529e620070cb565b73ffffffffffffffffffffffffffffffffffffffff9283166020918202929092010152600254835191169063f67c5bd090849084908110620052e457620052e4620070cb565b60200260200101516040518263ffffffff1660e01b815260040162005325919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa15801562005343573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005369919062007082565b62005760576001546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff909116906306447d5690602401600060405180830381600087803b158015620053ee57600080fd5b505af115801562005403573d6000803e3d6000fd5b50505050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562005475573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200549b919062006f63565b73ffffffffffffffffffffffffffffffffffffffff1663e8a97a3e838381518110620054cb57620054cb620070cb565b602090810291909101015160005462010000900473ffffffffffffffffffffffffffffffffffffffff166398cdaadf600d8660048110620055105762005510620070cb565b602091828204019190069054906101000a900460ff166040518263ffffffff1660e01b815260040162005544919062006f2a565b602060405180830381865afa15801562005562573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005588919062006f63565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b158015620055f657600080fd5b505af11580156200560b573d6000803e3d6000fd5b5050600454845173ffffffffffffffffffffffffffffffffffffffff9091169250633e7c88d69150849084908110620056485762005648620070cb565b60209081029190910101516040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff90911660048201526124546024820152604401600060405180830381600087803b158015620056c257600080fd5b505af1158015620056d7573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200574657600080fd5b505af11580156200575b573d6000803e3d6000fd5b505050505b806200576c81620074d3565b915050620051ce565b50919050565b6060600482111562005810576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f676574556e6465726c79696e67506f6f6c546f6b656e733a20496e636f72726560448201527f6374206e436f696e7320706172616d6574657200000000000000000000000000606482015260840162004b0e565b8167ffffffffffffffff8111156200582c576200582c6200709c565b60405190808252806020026020018201604052801562005856578160200160208202803683370190505b50905060005b82811015620057755760005462010000900473ffffffffffffffffffffffffffffffffffffffff166367b42645600e83600481106200589f576200589f620070cb565b602091828204019190069054906101000a900460ff166040518263ffffffff1660e01b8152600401620058d3919062006f2a565b602060405180830381865afa158015620058f1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005917919062006f63565b8282815181106200592c576200592c620070cb565b73ffffffffffffffffffffffffffffffffffffffff9283166020918202929092010152600254835191169063f67c5bd090849084908110620059725762005972620070cb565b60200260200101516040518263ffffffff1660e01b8152600401620059b3919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa158015620059d1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620059f7919062007082565b62005dee576001546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff909116906306447d5690602401600060405180830381600087803b15801562005a7c57600080fd5b505af115801562005a91573d6000803e3d6000fd5b50505050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562005b03573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005b29919062006f63565b73ffffffffffffffffffffffffffffffffffffffff1663e8a97a3e83838151811062005b595762005b59620070cb565b602090810291909101015160005462010000900473ffffffffffffffffffffffffffffffffffffffff166398cdaadf600e866004811062005b9e5762005b9e620070cb565b602091828204019190069054906101000a900460ff166040518263ffffffff1660e01b815260040162005bd2919062006f2a565b602060405180830381865afa15801562005bf0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005c16919062006f63565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b15801562005c8457600080fd5b505af115801562005c99573d6000803e3d6000fd5b5050600454845173ffffffffffffffffffffffffffffffffffffffff9091169250633e7c88d6915084908490811062005cd65762005cd6620070cb565b60209081029190910101516040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff90911660048201526124546024820152604401600060405180830381600087803b15801562005d5057600080fd5b505af115801562005d65573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562005dd457600080fd5b505af115801562005de9573d6000803e3d6000fd5b505050505b8062005dfa81620074d3565b9150506200585c565b6002546040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152600092169063e958b70490602401602060405180830381865afa15801562005e75573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005e9b919062006f63565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000918716906370a0823190602401602060405180830381865afa15801562005f0e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005f34919062007082565b600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481019290925260006024830181905260448301819052606483015291925073ffffffffffffffffffffffffffffffffffffffff9091169063491cc7c290608401600060405180830381600087803b15801562005fbb57600080fd5b505af115801562005fd0573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff8b1692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a282156200614e576001546002546003546040805173ffffffffffffffffffffffffffffffffffffffff92831660248201528d831660448201528a831660648201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6084808301919091528251808303909101815260a490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f46fb371d0000000000000000000000000000000000000000000000000000000017905290517fbd6af4340000000000000000000000000000000000000000000000000000000081529382169363bd6af43493620061199316919060040162007433565b600060405180830381600087803b1580156200613457600080fd5b505af115801562006149573d6000803e3d6000fd5b505050505b60015460025460035460405173ffffffffffffffffffffffffffffffffffffffff9384169363bd6af434938116927f6ce4074a0000000000000000000000000000000000000000000000000000000092620061b492909116908f908e906024016200746c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b909216825262006247929160040162007433565b600060405180830381600087803b1580156200626257600080fd5b505af115801562006277573d6000803e3d6000fd5b5050600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526024810192909252600060448301819052606483015273ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b158015620062fd57600080fd5b505af115801562006312573d6000803e3d6000fd5b505060035460405173ffffffffffffffffffffffffffffffffffffffff8d8116945090911691507faed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab0390600090a3821562004a805760015460025460035473ffffffffffffffffffffffffffffffffffffffff9283169263bd6af434928116917f46fb371d0000000000000000000000000000000000000000000000000000000091168d8b8a6200497b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6200497e565b6002546040517fe958b70400000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015260009173ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa15801562006467573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200648d919062006f63565b6002546040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015292935060009290911690638991b2f190602401602060405180830381865afa15801562006504573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200652a919062007082565b6002546040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529091169063f67c5bd090602401602060405180830381865afa1580156200659b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620065c1919062007082565b16151590508315158114801590620065d95750825115155b1562006619577f0b2e13ff20ac7b474198655583edf70dedd2c1dc980e329c4fbb2fc0748b796b836040516200661091906200750f565b60405180910390a15b62001ca3841515821515148673ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562006670573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620066b8919081019062007524565b83620066fa576040518060400160405280601981526020017f206e6f7420656e61626c6564206173206578706563746564200000000000000081525062006731565b6040518060400160405280601981526020017f20656e61626c6564206173206e6f7420657870657463746564000000000000008152505b60405160200162006744929190620075f0565b60405160208183030381529060405262006a52565b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462004410577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f50604051620068139060208082526025908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b61646460408201527f726573735d000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f816040516200684c91906200764f565b60405180910390a17f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f82604051620068859190620076b1565b60405180910390a16200441062006a9c565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600091908616906370a0823190602401602060405180830381865afa15801562006908573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200692e919062007082565b905082811462006a46577f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f828673ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015620069a6573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620069ee919081019062007524565b60405160200162006a01929190620076ef565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905262006a3d91879062007775565b60405180910390a15b62001ca3818462006c1f565b8162004410577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf35838160405162006a899190620073ea565b60405180910390a1620044108262006d1f565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1562006bf15760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000009282019290925260016060820152600091907f70ca10bbd0dbfd9020a9f4b13402c16cb120705e0d1c0aeab10fa353ae586fc490608001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905262006b6e929160200162007221565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905262006ba8916200726b565b6000604051808303816000865af19150503d806000811462006be7576040519150601f19603f3d011682016040523d82523d6000602084013e62006bec565b606091505b505050505b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055565b80821462004410577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f5060405162006cad9060208082526022908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b75696e60408201527f745d000000000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a88160405162006ce69190620077af565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a882604051620068859190620077fb565b8062006d97577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f5060405162006d859060208082526017908201527f4572726f723a20417373657274696f6e204661696c6564000000000000000000604082015260600190565b60405180910390a162006d9762006a9c565b50565b60018301918390821562006e335791602002820160005b8382111562006e0257835183826101000a81548160ff0219169083600a81111562006de05762006de062006ebf565b0217905550926020019260010160208160000104928301926001030262006db1565b801562006e315782816101000a81549060ff021916905560010160208160000104928301926001030262006e02565b505b5062006e4192915062006ea8565b5090565b613960806200783a83390190565b611852806200b19a83390190565b613294806200c9ec83390190565b611982806200fc8083390190565b615f7e806201160283390190565b617a51806201758083390190565b62031ed6806201efd183390190565b5b8082111562006e41576000815560010162006ea9565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600b811062006f26577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b6020810162006f3a828462006eee565b92915050565b73ffffffffffffffffffffffffffffffffffffffff8116811462006d9757600080fd5b60006020828403121562006f7657600080fd5b815162006f838162006f40565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562006ff45762006ff462006f8a565b500290565b60008262007030577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000828210156200704a576200704a62006f8a565b500390565b604081016200705f828562006eee565b73ffffffffffffffffffffffffffffffffffffffff831660208301529392505050565b6000602082840312156200709557600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60005b8381101562007117578181015183820152602001620070fd565b838111156200075f5750506000910152565b6000815180845262007143816020860160208601620070fa565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101562007213578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00185528151805173ffffffffffffffffffffffffffffffffffffffff168452870151878401879052620071ff8785018262007129565b95880195935050908601906001016200719c565b509098975050505050505050565b7fffffffff0000000000000000000000000000000000000000000000000000000083168152600082516200725d816004850160208701620070fa565b919091016004019392505050565b600082516200727f818460208701620070fa565b9190910192915050565b6000602082840312156200729c57600080fd5b8151801515811462006f8357600080fd5b60608101620072bd828662006eee565b73ffffffffffffffffffffffffffffffffffffffff93909316602082015260400152919050565b600081518084526020808501945080840160005b838110156200732c57815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101620072f8565b509495945050505050565b6040815260006200734c6040830185620072e4565b8281036020840152620073608185620072e4565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff86811682528581166020830152848116604083015283811660608301528216608082015260c060a082018190526011908201527f43757276654c503350726963654665656400000000000000000000000000000060e0820152600061010082015b979650505050505050565b60408152600560408201527f4572726f72000000000000000000000000000000000000000000000000000000606082015260806020820152600062006f83608083018462007129565b73ffffffffffffffffffffffffffffffffffffffff8316815260406020820152600062007464604083018462007129565b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff80861683528085166020840152506060604083015262007360606083018462007129565b73ffffffffffffffffffffffffffffffffffffffff831681526040810162006f83602083018462006eee565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141562007508576200750862006f8a565b5060010190565b60208152600062006f83602083018462007129565b6000602082840312156200753757600080fd5b815167ffffffffffffffff808211156200755057600080fd5b818401915084601f8301126200756557600080fd5b8151818111156200757a576200757a6200709c565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715620075c357620075c36200709c565b81604052828152876020848701011115620075dd57600080fd5b620073df836020830160208801620070fa565b7f546f6b656e2000000000000000000000000000000000000000000000000000008152600083516200762a816006850160208801620070fa565b83519083019062007643816006840160208801620070fa565b01600601949350505050565b6040815260006200768d60408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b905073ffffffffffffffffffffffffffffffffffffffff8316602083015292915050565b6040815260006200768d60408301600a81527f2020202041637475616c00000000000000000000000000000000000000000000602082015260400190565b6000835162007703818460208801620070fa565b7f496e636f7272656374200000000000000000000000000000000000000000000090830190815283516200773f81600a840160208801620070fa565b7f2062616c616e6365206f6e206163636f756e743a200000000000000000000000600a9290910191820152601f01949350505050565b6040815260006200778a604083018562007129565b905073ffffffffffffffffffffffffffffffffffffffff831660208301529392505050565b604081526000620077ed60408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b905082602083015292915050565b604081526000620077ed60408301600a81527f2020202041637475616c0000000000000000000000000000000000000000000060208201526040019056fe60806040523480156200001157600080fd5b5060405162003960380380620039608339810160408190526200003491620002a2565b8151829082906200004d90600290602085019062000133565b5080516200006390600390602084019062000133565b506000601260405162000076906200019d565b6060808252600790820152664352564d6f636b60c81b608082015260a0602082018190526015908201527f43525620666f72204375727665506f6f6c4d6f636b000000000000000000000060c082015260ff909116604082015260e001604051809103906000f080158015620000f0573d6000803e3d6000fd5b50600080546001600160a01b039092166001600160a01b03199283168117909155600180549092161790555050670de0b6b3a7640000600755506200030c915050565b8280548282559060005260206000209081019282156200018b579160200282015b828111156200018b57825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019062000154565b5062000199929150620001ab565b5090565b611758806200220883390190565b5b80821115620001995760008155600101620001ac565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b0381168114620001f057600080fd5b919050565b600082601f8301126200020757600080fd5b815160206001600160401b0380831115620002265762000226620001c2565b8260051b604051601f19603f830116810181811084821117156200024e576200024e620001c2565b6040529384528581018301938381019250878511156200026d57600080fd5b83870191505b8482101562000297576200028782620001d8565b8352918301919083019062000273565b979650505050505050565b60008060408385031215620002b657600080fd5b82516001600160401b0380821115620002ce57600080fd5b620002dc86838701620001f5565b93506020850151915080821115620002f357600080fd5b506200030285828601620001f5565b9150509250929050565b611eec806200031c6000396000f3fe608060405234801561001057600080fd5b506004361061030a5760003560e01c806382c630661161019c578063bb7b8b80116100ee578063e2e7d26411610097578063f851a44011610071578063f851a44014610597578063fc0c546a1461059e578063fee3f7f91461036257600080fd5b8063e2e7d26414610576578063ecb586a514610584578063f446c1d01461036257600080fd5b8063d96c7fce116100c8578063d96c7fce14610369578063dd62ed3e14610568578063ddca3f431461036257600080fd5b8063bb7b8b801461053a578063c661065714610542578063cc2b27d71461055557600080fd5b80639fdaea0c11610150578063b739953e1161012a578063b739953e14610501578063b91434d114610514578063b9947eb01461052757600080fd5b80639fdaea0c146104db578063a6417ed6146104ee578063b4b577ad1461036257600080fd5b80638ea875f3116101815780638ea875f3146104bf57806395d89b411461033557806399bd2ba5146104c857600080fd5b806382c630661461048c57806385ca3c6f146104ac57600080fd5b80633df02124116102605780635e0d443f1161020957806371035418116101e3578063710354181461045457806376a2f0f0146103625780637b475b681461046757600080fd5b80635e0d443f1461042d57806363543f061461036257806370a082311461044057600080fd5b80634903b0d11161023a5780634903b0d1146104075780635409491a1461036257806356ac35031461041a57600080fd5b80633df02124146103e15780634469e30e146103695780634515cef3146103f457600080fd5b806318160ddd116102c257806323746eb81161029c57806323746eb814610393578063313ce567146103625780633883e119146103cb57600080fd5b806318160ddd146103625780631a4d01d21461037e5780632081066c1461036257600080fd5b806307211ef7116102f357806307211ef71461034f578063140522881461036257806314f059791461036957600080fd5b8063065a80d81461030f57806306fdde0314610335575b600080fd5b61032261031d36600461192d565b6105be565b6040519081526020015b60405180910390f35b6040805160208101825260008152905161032c9190611974565b61032261035d3660046119c5565b610677565b6000610322565b6103716106c7565b60405161032c9190611a01565b61039161038c366004611a32565b6106f2565b005b6103a66103a136600461192d565b6107e6565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161032c565b6103226103d9366004611a79565b600092915050565b6103916103ef366004611ab1565b610826565b610391610402366004611b88565b610950565b610322610415366004611bb3565b610b1c565b6103916104283660046119c5565b610b31565b61032261043b3660046119c5565b610b92565b61032261044e366004611bf0565b50600090565b610391610462366004611bb3565b600755565b610391610475366004611c0b565b600f9190910b600090815260066020526040902055565b6001546103a69073ffffffffffffffffffffffffffffffffffffffff1681565b6103716104ba366004611c35565b610bce565b61032260075481565b6103916104d6366004611c73565b610c04565b6103916104e9366004611c8f565b610c63565b6103916104fc366004611ab1565b610de6565b6103a661050f36600461192d565b6111a6565b6103916105223660046119c5565b6111be565b6103a6610535366004611bb3565b61121f565b600754610322565b6103a6610550366004611bb3565b611234565b610322610563366004611cac565b611249565b6103226103d9366004611cd8565b61032261044e366004611bb3565b610391610592366004611d02565b61127f565b60006103a6565b6000546103a69073ffffffffffffffffffffffffffffffffffffffff1681565b6000600282600f0b815481106105d6576105d6611d26565b6000918252602090912001546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa15801561064d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106719190611d55565b92915050565b600f83810b60009081526005602090815260408083209386900b8352929052908120546b033b2e3c9fd0803ce8000000906106b3908490611d9d565b6106bd9190611dda565b90505b9392505050565b6106cf6118f8565b604051806060016040528060008152602001600081526020016000815250905090565b6000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810185905273ffffffffffffffffffffffffffffffffffffffff909116906379cc6790906044016020604051808303816000875af1158015610769573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078d9190611e15565b506107e133826002856fffffffffffffffffffffffffffffffff16815481106107b8576107b8611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169190611402565b505050565b6000600282600f0b815481106107fe576107fe611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1692915050565b6000610833858585610b92565b9050818110156108ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f437572766556314d6f636b3a20494e53554646494349454e545f4f555450555460448201527f5f414d4f554e540000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61091f3330856002896fffffffffffffffffffffffffffffffff16815481106108f5576108f5611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169291906114d6565b61094933826002876fffffffffffffffffffffffffffffffff16815481106107b8576107b8611d26565b5050505050565b60005b6003811015610a7f57600083826003811061097057610970611d26565b60200201511115610a6d576002818154811061098e5761098e611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff166323b872dd33308685600381106109c9576109c9611d26565b60200201516040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff938416600482015292909116602483015260448201526064016020604051808303816000875af1158015610a47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6b9190611e15565b505b80610a7781611e32565b915050610953565b506000546040517f40c10f190000000000000000000000000000000000000000000000000000000081523360048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f19906044015b6020604051808303816000875af1158015610af8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e19190611e15565b6000600282815481106105d6576105d6611d26565b600f83810b60009081526005602090815260408083209386900b835292905220819055610b6a6b033b2e3c9fd0803ce80000008261153a565b600f92830b60009081526005602090815260408083209690950b825294909452919092205550565b600f83810b60009081526004602090815260408083209386900b8352929052908120546b033b2e3c9fd0803ce8000000906106b3908490611d9d565b610bd66118f8565b6040805160608181019092529085906003908390839080828437600092019190915250919695505050505050565b6000546040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052909116906340c10f1990604401610ad9565b60005b6003811015610d88576000838260038110610c8357610c83611d26565b60200201351115610d765760028181548110610ca157610ca1611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33858460038110610cdb57610cdb611d26565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff9093166004840152602002013560248201526044016020604051808303816000875af1158015610d50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d749190611e15565b505b80610d8081611e32565b915050610c66565b506000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906379cc679090604401610ad9565b60006002856fffffffffffffffffffffffffffffffff1681548110610e0d57610e0d611d26565b60009182526020822001546003805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff8816908110610e5957610e59611d26565b60009182526020822001546002805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff8816908110610ea557610ea5611d26565b60009182526020822001546003805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff8916908110610ef157610ef1611d26565b600091825260208220015473ffffffffffffffffffffffffffffffffffffffff169150610f1f898989610677565b905085811015610fb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f437572766556314d6f636b3a20494e53554646494349454e545f4f555450555460448201527f5f414d4f554e540000000000000000000000000000000000000000000000000060648201526084016108c1565b610fd373ffffffffffffffffffffffffffffffffffffffff851633308a6114d6565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526024820189905285169063095ea7b3906044016020604051808303816000875af1158015611048573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061106c9190611e15565b506040517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8616906340c10f1990604401600060405180830381600087803b1580156110db57600080fd5b505af11580156110ef573d6000803e3d6000fd5b50506040517f1e9a69500000000000000000000000000000000000000000000000000000000081523060048201526024810184905273ffffffffffffffffffffffffffffffffffffffff86169250631e9a69509150604401600060405180830381600087803b15801561116157600080fd5b505af1158015611175573d6000803e3d6000fd5b5061119b9250505073ffffffffffffffffffffffffffffffffffffffff83163383611402565b505050505050505050565b6000600382600f0b815481106107fe576107fe611d26565b600f83810b60009081526004602090815260408083209386900b8352929052208190556111f76b033b2e3c9fd0803ce80000008261153a565b600f92830b60009081526004602090815260408083209690950b825294909452919092205550565b6000600382815481106107fe576107fe611d26565b6000600282815481106107fe576107fe611d26565b600f81900b6000908152600660205260408120546b033b2e3c9fd0803ce8000000906112759085611d9d565b6106c09190611dda565b60005b60038110156113a457600082826003811061129f5761129f611d26565b6020020151111561139257600281815481106112bd576112bd611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb338484600381106112f7576112f7611d26565b60200201516040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af115801561136c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113909190611e15565b505b8061139c81611e32565b915050611282565b506000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810184905273ffffffffffffffffffffffffffffffffffffffff909116906379cc679090604401610ad9565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526107e19084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526116a0565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526115349085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611454565b50505050565b60408051808201909152600281527f4d330000000000000000000000000000000000000000000000000000000000006020820152600090826115a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c19190611974565b5060006115b7600284611dda565b90506b033b2e3c9fd0803ce80000006115f0827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611e6b565b6115fa9190611dda565b8411156040518060400160405280600281526020017f4d310000000000000000000000000000000000000000000000000000000000008152509061166b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c19190611974565b5082816116846b033b2e3c9fd0803ce800000087611d9d565b61168e9190611e82565b6116989190611dda565b949350505050565b6000611702826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166117ac9092919063ffffffff16565b8051909150156107e157808060200190518101906117209190611e15565b6107e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016108c1565b60606106bd848460008585843b61181f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108c1565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516118489190611e9a565b60006040518083038185875af1925050503d8060008114611885576040519150601f19603f3d011682016040523d82523d6000602084013e61188a565b606091505b509150915061189a8282866118a5565b979650505050505050565b606083156118b45750816106c0565b8251156118c45782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c19190611974565b60405180606001604052806003906020820280368337509192915050565b8035600f81900b811461192857600080fd5b919050565b60006020828403121561193f57600080fd5b6106c082611916565b60005b8381101561196357818101518382015260200161194b565b838111156115345750506000910152565b6020815260008251806020840152611993816040850160208701611948565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000606084860312156119da57600080fd5b6119e384611916565b92506119f160208501611916565b9150604084013590509250925092565b60608101818360005b6003811015611a29578151835260209283019290910190600101611a0a565b50505092915050565b600080600060608486031215611a4757600080fd5b833592506119f160208501611916565b806060810183101561067157600080fd5b8015158114611a7657600080fd5b50565b60008060808385031215611a8c57600080fd5b611a968484611a57565b91506060830135611aa681611a68565b809150509250929050565b60008060008060808587031215611ac757600080fd5b611ad085611916565b9350611ade60208601611916565b93969395505050506040820135916060013590565b600082601f830112611b0457600080fd5b6040516060810181811067ffffffffffffffff82111715611b4e577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604052806060840185811115611b6357600080fd5b845b81811015611b7d578035835260209283019201611b65565b509195945050505050565b60008060808385031215611b9b57600080fd5b611ba58484611af3565b946060939093013593505050565b600060208284031215611bc557600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461192857600080fd5b600060208284031215611c0257600080fd5b6106c082611bcc565b60008060408385031215611c1e57600080fd5b611c2783611916565b946020939093013593505050565b600080600060e08486031215611c4a57600080fd5b611c548585611a57565b9250611c638560608601611a57565b915060c084013590509250925092565b60008060408385031215611c8657600080fd5b611c2783611bcc565b60008060808385031215611ca257600080fd5b611ba58484611a57565b60008060408385031215611cbf57600080fd5b82359150611ccf60208401611916565b90509250929050565b60008060408385031215611ceb57600080fd5b611cf483611bcc565b9150611ccf60208401611bcc565b60008060808385031215611d1557600080fd5b82359150611ccf8460208501611af3565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215611d6757600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611dd557611dd5611d6e565b500290565b600082611e10577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600060208284031215611e2757600080fd5b81516106c081611a68565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611e6457611e64611d6e565b5060010190565b600082821015611e7d57611e7d611d6e565b500390565b60008219821115611e9557611e95611d6e565b500190565b60008251611eac818460208701611948565b919091019291505056fea2646970667358221220a76213374b33de2cb1c5d61e9c1133f6d8163c7b90c32a6142a6f4fd98fe430364736f6c634300080a003360a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a00336101606040523480156200001257600080fd5b5060405162001852380380620018528339810160408190526200003591620003a3565b6000805460ff191690558585828260c882826001600160a01b0381166200006f57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000ae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d49190620004de565b6001600160a01b0316608052508051620000f6906002906020840190620002ca565b505060a052506001600160a01b0382166200012457604051635919af9760e11b815260040160405180910390fd5b6001600160a01b03821660c0819052670de0b6b3a764000060e05260408051630176f71760e71b815290516000929163bb7b8b809160048083019260209291908290030181865afa1580156200017e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001a4919062000503565b9050620001b1816200022a565b505050506001600160a01b0384161580620001d357506001600160a01b038316155b80620001e657506001600160a01b038216155b156200020557604051635919af9760e11b815260040160405180910390fd5b506001600160a01b039283166101005290821661012052166101405250620005d09050565b8062000249576040516309aadd6f60e41b815260040160405180910390fd5b60018190557f82e7ee47180a631312683eeb2a85ad264c9af490d54de5a75bbdb95b968c6de2816200027b8162000296565b6040805192835260208301919091520160405180910390a150565b60a05160009061271090620002ac908262000533565b620002b890846200054e565b620002c4919062000570565b92915050565b828054620002d89062000593565b90600052602060002090601f016020900481019282620002fc576000855562000347565b82601f106200031757805160ff191683800117855562000347565b8280016001018555821562000347579182015b82811115620003475782518255916020019190600101906200032a565b506200035592915062000359565b5090565b5b808211156200035557600081556001016200035a565b80516001600160a01b03811681146200038857600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60008060008060008060c08789031215620003bd57600080fd5b620003c88762000370565b95506020620003d981890162000370565b9550620003e96040890162000370565b9450620003f96060890162000370565b9350620004096080890162000370565b60a08901519093506001600160401b03808211156200042757600080fd5b818a0191508a601f8301126200043c57600080fd5b8151818111156200045157620004516200038d565b604051601f8201601f19908116603f011681019083821181831017156200047c576200047c6200038d565b816040528281528d868487010111156200049557600080fd5b600093505b82841015620004b957848401860151818501870152928501926200049a565b82841115620004cb5760008684830101525b8096505050505050509295509295509295565b600060208284031215620004f157600080fd5b620004fc8262000370565b9392505050565b6000602082840312156200051657600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156200054957620005496200051d565b500190565b60008160001904831182151516156200056b576200056b6200051d565b500290565b6000826200058e57634e487b7160e01b600052601260045260246000fd5b500490565b600181811c90821680620005a857607f821691505b60208210811415620005ca57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c05160e0516101005161012051610140516111e86200066a6000396000818161023501526108c8015260008181610383015261080901526000818161033901526107620152600081816103120152610a250152600081816101b001526109890152600081816101760152610c170152600081816102eb015281816103db01528181610557015261068f01526111e86000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c80639a6fc8f5116100cd578063b09ad8a011610081578063d62ada1111610066578063d62ada1114610376578063e5693f411461037e578063feaf968c146103a557600080fd5b8063b09ad8a01461035b578063bc489a651461036357600080fd5b8063a50cf2c8116100b2578063a50cf2c8146102e6578063a834559e1461030d578063ab0ca0e11461033457600080fd5b80639a6fc8f514610293578063a384d6ff146102dd57600080fd5b8063427cb6fe116101245780635c975abb116101095780635c975abb1461025f5780637284e416146102765780638456cb591461028b57600080fd5b8063427cb6fe1461023057806354fd4d501461025757600080fd5b8063313ce56711610155578063313ce567146101f75780633f4ba83a146102115780633fd0875f1461021b57600080fd5b806312b495a814610171578063218751b2146101ab575b600080fd5b6101987f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101a2565b6101ff600881565b60405160ff90911681526020016101a2565b6102196103ad565b005b610223600381565b6040516101a29190610dd7565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b610198600181565b60005460ff165b60405190151581526020016101a2565b61027e61049b565b6040516101a29190610e18565b610219610529565b6102a66102a1366004610ea3565b610615565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a0016101a2565b61019860015481565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b6101987f000000000000000000000000000000000000000000000000000000000000000081565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b61019861064f565b610219610371366004610ec7565b610661565b610266600181565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b6102a6610751565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa158015610437573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061045b9190610ee0565b610491576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610499610a67565b565b600280546104a890610f02565b80601f01602080910402602001604051908101604052809291908181526020018280546104d490610f02565b80156105215780601f106104f657610100808354040283529160200191610521565b820191906000526020600020905b81548152906001019060200180831161050457829003601f168201915b505050505081565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa1580156105b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105d79190610ee0565b61060d576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610499610b4d565b60008060008060006040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061065c600154610c0d565b905090565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156106eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070f9190610ee0565b610745576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61074e81610c56565b50565b6000806000806000806000806000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156107cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ef9190610f56565b939d50919b509950975095506108078a8a8989610cd8565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610872573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108969190610f56565b9398509196509450925090506108ae85858484610cd8565b888412156108c6578499508398508297508196508095505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610931573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109559190610f56565b93985091965094509250905061096d85858484610cd8565b88841215610985578499508398508297508196508095505b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb7b8b806040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a169190610fae565b9050610a2181610d73565b90507f0000000000000000000000000000000000000000000000000000000000000000610a4e828c610ff6565b610a5891906110e1565b99505050505050509091929394565b60005460ff16610ad8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff1615610bba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610acf565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b233390565b6000612710610c3c7f000000000000000000000000000000000000000000000000000000000000000082611149565b610c469084611161565b610c50919061119e565b92915050565b80610c8d576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190557f82e7ee47180a631312683eeb2a85ad264c9af490d54de5a75bbdb95b968c6de281610cbd81610c0d565b6040805192835260208301919091520160405180910390a150565b60008313610d12576040517f56e05d2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8369ffffffffffffffffffff168169ffffffffffffffffffff161080610d36575081155b15610d6d576040517fb1cf675500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60015460009080831015610db3576040517fb416da7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610dbe82610c0d565b905080841115610dcf579392505050565b509192915050565b6020810160068310610e12577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b600060208083528351808285015260005b81811015610e4557858101830151858201604001528201610e29565b81811115610e57576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b69ffffffffffffffffffff8116811461074e57600080fd5b600060208284031215610eb557600080fd5b8135610ec081610e8b565b9392505050565b600060208284031215610ed957600080fd5b5035919050565b600060208284031215610ef257600080fd5b81518015158114610ec057600080fd5b600181811c90821680610f1657607f821691505b60208210811415610f50577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600080600080600060a08688031215610f6e57600080fd5b8551610f7981610e8b565b809550506020860151935060408601519250606086015191506080860151610fa081610e8b565b809150509295509295909350565b600060208284031215610fc057600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60008413600084138583048511828216161561103757611037610fc7565b7f8000000000000000000000000000000000000000000000000000000000000000600087128682058812818416161561107257611072610fc7565b6000871292508782058712848416161561108e5761108e610fc7565b878505871281841616156110a4576110a4610fc7565b505050929093029392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826110f0576110f06110b2565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f80000000000000000000000000000000000000000000000000000000000000008314161561114457611144610fc7565b500590565b6000821982111561115c5761115c610fc7565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561119957611199610fc7565b500290565b6000826111ad576111ad6110b2565b50049056fea2646970667358221220226b667ed6fc6db7c8ec1377cc84dae524e2dc572320ead4a7092944a6b912de64736f6c634300080a003360806040523480156200001157600080fd5b506040516200329438038062003294833981016040819052620000349162000222565b6002805460018101825560008290527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319166001600160a01b038581169190911790915560408051637e062a3560e11b815290519184169163fc0c546a916004808201926020929091908290030181865afa158015620000c3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e991906200025a565b81546001810183556000928352602083200180546001600160a01b0319166001600160a01b03929092169190911790556040516012906200012a90620001f7565b6060808252600790820152664352564d6f636b60c81b608082015260a0602082018190526015908201527f43525620666f72204375727665506f6f6c4d6f636b000000000000000000000060c082015260ff909116604082015260e001604051809103906000f080158015620001a4573d6000803e3d6000fd5b50600080546001600160a01b039283166001600160a01b03199182168117909255600180548216909217909155670de0b6b3a76400006007556003805494909216931692909217909155506200027f9050565b6117588062001b3c83390190565b80516001600160a01b03811681146200021d57600080fd5b919050565b600080604083850312156200023657600080fd5b620002418362000205565b9150620002516020840162000205565b90509250929050565b6000602082840312156200026d57600080fd5b620002788262000205565b9392505050565b6118ad806200028f6000396000f3fe608060405234801561001057600080fd5b50600436106102925760003560e01c806382c6306611610160578063c531e24f116100d8578063e2e7d2641161008c578063f851a44011610071578063f851a440146104bd578063fc0c546a146104c4578063fee3f7f9146102ea57600080fd5b8063e2e7d264146104af578063f446c1d0146102ea57600080fd5b8063cc2b27d7116100bd578063cc2b27d714610486578063dd62ed3e14610499578063ddca3f43146102ea57600080fd5b8063c531e24f14610453578063c66106571461047357600080fd5b8063b4b577ad1161012f578063b91434d111610114578063b91434d114610425578063b9947eb014610438578063bb7b8b801461044b57600080fd5b8063b4b577ad146102ea578063b739953e1461041257600080fd5b806382c63066146103d65780638ea875f3146103f657806395d89b41146102bd578063a6417ed6146103ff57600080fd5b80633df021241161020e57806363543f06116101c257806371035418116101a7578063710354181461039e57806376a2f0f0146102ea5780637b475b68146103b157600080fd5b806363543f06146102ea57806370a082311461038a57600080fd5b80635409491a116101f35780635409491a146102ea57806356ac3503146103645780635e0d443f1461037757600080fd5b80633df021241461033e5780634903b0d11461035157600080fd5b806318160ddd116102655780632081066c1161024a5780632081066c146102ea57806323746eb814610306578063313ce567146102ea57600080fd5b806318160ddd146102ea5780631a4d01d2146102f157600080fd5b8063065a80d81461029757806306fdde03146102bd57806307211ef7146102d757806314052288146102ea575b600080fd5b6102aa6102a5366004611468565b6104e4565b6040519081526020015b60405180910390f35b604080516020810182526000815290516102b491906114af565b6102aa6102e5366004611500565b610507565b60006102aa565b6103046102ff36600461153c565b610557565b005b610319610314366004611468565b61064b565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102b4565b61030461034c366004611561565b61069a565b6102aa61035f3660046115a3565b6107c4565b610304610372366004611500565b610874565b6102aa610385366004611500565b6108d5565b6102aa6103983660046115e1565b50600090565b6103046103ac3660046115a3565b600755565b6103046103bf3660046115fe565b600f9190910b600090815260066020526040902055565b6001546103199073ffffffffffffffffffffffffffffffffffffffff1681565b6102aa60075481565b61030461040d366004611561565b610911565b610319610420366004611468565b610daf565b610304610433366004611500565b610e70565b6103196104463660046115a3565b610ed1565b6007546102aa565b6003546103199073ffffffffffffffffffffffffffffffffffffffff1681565b6103196104813660046115a3565b610f15565b6102aa610494366004611628565b610f2a565b6102aa6104a7366004611654565b600092915050565b6102aa6103983660046115a3565b6000610319565b6000546103199073ffffffffffffffffffffffffffffffffffffffff1681565b6000610501826fffffffffffffffffffffffffffffffff166107c4565b92915050565b600f83810b60009081526005602090815260408083209386900b8352929052908120546b033b2e3c9fd0803ce8000000906105439084906116bc565b61054d91906116f9565b90505b9392505050565b6000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810185905273ffffffffffffffffffffffffffffffffffffffff909116906379cc6790906044016020604051808303816000875af11580156105ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f29190611734565b5061064633826002856fffffffffffffffffffffffffffffffff168154811061061d5761061d611756565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169190610f60565b505050565b60006002826fffffffffffffffffffffffffffffffff168154811061067257610672611756565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1692915050565b60006106a78585856108d5565b90508181101561073e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f437572766556314d6f636b3a20494e53554646494349454e545f4f555450555460448201527f5f414d4f554e540000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6107933330856002896fffffffffffffffffffffffffffffffff168154811061076957610769611756565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16929190611034565b6107bd33826002876fffffffffffffffffffffffffffffffff168154811061061d5761061d611756565b5050505050565b6000600282815481106107d9576107d9611756565b6000918252602090912001546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa158015610850573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105019190611785565b600f83810b60009081526005602090815260408083209386900b8352929052208190556108ad6b033b2e3c9fd0803ce800000082611098565b600f92830b60009081526005602090815260408083209690950b825294909452919092205550565b600f83810b60009081526004602090815260408083209386900b8352929052908120546b033b2e3c9fd0803ce8000000906105439084906116bc565b83600f0b600014156109e157600260008154811061093157610931611756565b6000918252602090912001546040517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201523060248201526044810184905273ffffffffffffffffffffffffffffffffffffffff909116906323b872dd906064016020604051808303816000875af11580156109b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109db9190611734565b50610aa1565b60006109fe856fffffffffffffffffffffffffffffffff16610ed1565b6040517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201523060248201526044810185905290915073ffffffffffffffffffffffffffffffffffffffff8216906323b872dd906064016020604051808303816000875af1158015610a7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a9e9190611734565b50505b60008085600f0b13610ab4576000610ab7565b60015b905060008085600f0b13610acc576000610acf565b60015b90506000610ade8383876108d5565b90506000610aed888888610507565b905084811015610b7f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f437572766556314d6f636b3a20494e53554646494349454e545f4f555450555460448201527f5f414d4f554e54000000000000000000000000000000000000000000000000006064820152608401610735565b86600f0b60001415610c49576002600081548110610b9f57610b9f611756565b6000918252602090912001546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201526024810183905273ffffffffffffffffffffffffffffffffffffffff9091169063a9059cbb906044016020604051808303816000875af1158015610c1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c439190611734565b50610da5565b6000610c66886fffffffffffffffffffffffffffffffff16610ed1565b60035490915073ffffffffffffffffffffffffffffffffffffffff16631a4d01d284610c9360018c61179e565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526004810192909252600f0b602482015260448101859052606401600060405180830381600087803b158015610cf357600080fd5b505af1158015610d07573d6000803e3d6000fd5b50506040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201526024810185905273ffffffffffffffffffffffffffffffffffffffff8416925063a9059cbb91506044016020604051808303816000875af1158015610d7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da29190611734565b50505b5050505050505050565b600081600f0b60001415610dd157600260008154811061067257610672611756565b60035473ffffffffffffffffffffffffffffffffffffffff1663c6610657610e0c60016fffffffffffffffffffffffffffffffff861661180f565b6040518263ffffffff1660e01b8152600401610e2a91815260200190565b602060405180830381865afa158015610e47573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105019190611826565b919050565b600f83810b60009081526004602090815260408083209386900b835292905220819055610ea96b033b2e3c9fd0803ce800000082611098565b600f92830b60009081526004602090815260408083209690950b825294909452919092205550565b600081610eec57600260008154811061067257610672611756565b60035473ffffffffffffffffffffffffffffffffffffffff1663c6610657610e0c60018561180f565b60006002828154811061067257610672611756565b600f81900b6000908152600660205260408120546b033b2e3c9fd0803ce800000090610f5690856116bc565b61055091906116f9565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526106469084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526111fe565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526110929085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401610fb2565b50505050565b60408051808201909152600281527f4d33000000000000000000000000000000000000000000000000000000000000602082015260009082611107576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073591906114af565b5060006111156002846116f9565b90506b033b2e3c9fd0803ce800000061114e827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61180f565b61115891906116f9565b8411156040518060400160405280600281526020017f4d31000000000000000000000000000000000000000000000000000000000000815250906111c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073591906114af565b5082816111e26b033b2e3c9fd0803ce8000000876116bc565b6111ec9190611843565b6111f691906116f9565b949350505050565b6000611260826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661130a9092919063ffffffff16565b805190915015610646578080602001905181019061127e9190611734565b610646576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610735565b606061054d848460008585843b61137d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610735565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516113a6919061185b565b60006040518083038185875af1925050503d80600081146113e3576040519150601f19603f3d011682016040523d82523d6000602084013e6113e8565b606091505b50915091506113f8828286611403565b979650505050505050565b60608315611412575081610550565b8251156114225782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073591906114af565b8035600f81900b8114610e6b57600080fd5b60006020828403121561147a57600080fd5b61055082611456565b60005b8381101561149e578181015183820152602001611486565b838111156110925750506000910152565b60208152600082518060208401526114ce816040850160208701611483565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b60008060006060848603121561151557600080fd5b61151e84611456565b925061152c60208501611456565b9150604084013590509250925092565b60008060006060848603121561155157600080fd5b8335925061152c60208501611456565b6000806000806080858703121561157757600080fd5b61158085611456565b935061158e60208601611456565b93969395505050506040820135916060013590565b6000602082840312156115b557600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff811681146115de57600080fd5b50565b6000602082840312156115f357600080fd5b8135610550816115bc565b6000806040838503121561161157600080fd5b61161a83611456565b946020939093013593505050565b6000806040838503121561163b57600080fd5b8235915061164b60208401611456565b90509250929050565b6000806040838503121561166757600080fd5b8235611672816115bc565b91506020830135611682816115bc565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156116f4576116f461168d565b500290565b60008261172f577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60006020828403121561174657600080fd5b8151801515811461055057600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561179757600080fd5b5051919050565b600081600f0b83600f0b60008112817fffffffffffffffffffffffffffffffff80000000000000000000000000000000018312811516156117e1576117e161168d565b816f7fffffffffffffffffffffffffffffff0183138116156118055761180561168d565b5090039392505050565b6000828210156118215761182161168d565b500390565b60006020828403121561183857600080fd5b8151610550816115bc565b600082198211156118565761185661168d565b500190565b6000825161186d818460208701611483565b919091019291505056fea264697066735822122003bb569820a08cb24f2e28d9f88e09bbb1ba6be2f41ea54f1d153e677b3aab3464736f6c634300080a003360a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a00336101806040523480156200001257600080fd5b5060405162001982380380620019828339810160408190526200003591620003bc565b6000805460ff191690558686828260c882826001600160a01b0381166200006f57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000ae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d491906200050b565b6001600160a01b0316608052508051620000f6906002906020840190620002e3565b505060a052506001600160a01b0382166200012457604051635919af9760e11b815260040160405180910390fd5b6001600160a01b03821660c0819052670de0b6b3a764000060e05260408051630176f71760e71b815290516000929163bb7b8b809160048083019260209291908290030181865afa1580156200017e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001a4919062000530565b9050620001b18162000243565b505050506001600160a01b0385161580620001d357506001600160a01b038416155b80620001e657506001600160a01b038316155b80620001f957506001600160a01b038216155b156200021857604051635919af9760e11b815260040160405180910390fd5b506001600160a01b039384166101005291831661012052821661014052166101605250620005fd9050565b8062000262576040516309aadd6f60e41b815260040160405180910390fd5b60018190557f82e7ee47180a631312683eeb2a85ad264c9af490d54de5a75bbdb95b968c6de2816200029481620002af565b6040805192835260208301919091520160405180910390a150565b60a05160009061271090620002c5908262000560565b620002d190846200057b565b620002dd91906200059d565b92915050565b828054620002f190620005c0565b90600052602060002090601f01602090048101928262000315576000855562000360565b82601f106200033057805160ff191683800117855562000360565b8280016001018555821562000360579182015b828111156200036057825182559160200191906001019062000343565b506200036e92915062000372565b5090565b5b808211156200036e576000815560010162000373565b80516001600160a01b0381168114620003a157600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600080600080600080600060e0888a031215620003d857600080fd5b620003e38862000389565b96506020620003f4818a0162000389565b96506200040460408a0162000389565b95506200041460608a0162000389565b94506200042460808a0162000389565b93506200043460a08a0162000389565b60c08a01519093506001600160401b03808211156200045257600080fd5b818b0191508b601f8301126200046757600080fd5b8151818111156200047c576200047c620003a6565b604051601f8201601f19908116603f01168101908382118183101715620004a757620004a7620003a6565b816040528281528e86848701011115620004c057600080fd5b600093505b82841015620004e45784840186015181850187015292850192620004c5565b82841115620004f65760008684830101525b80965050505050505092959891949750929550565b6000602082840312156200051e57600080fd5b620005298262000389565b9392505050565b6000602082840312156200054357600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156200057657620005766200054a565b500190565b60008160001904831182151516156200059857620005986200054a565b500290565b600082620005bb57634e487b7160e01b600052601260045260246000fd5b500490565b600181811c90821680620005d557607f821691505b60208210811415620005f757634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c05160e051610100516101205161014051610160516112d9620006a96000396000818161029b01526109b901526000818161024001526108fa0152600081816103b5015261083b01526000818161036b01526107940152600081816103440152610b160152600081816101bb0152610a7a0152600081816101810152610d0801526000818161031d0152818161040d0152818161058901526106c101526112d96000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80638456cb59116100d8578063ab0ca0e11161008c578063d62ada1111610066578063d62ada11146103a8578063e5693f41146103b0578063feaf968c146103d757600080fd5b8063ab0ca0e114610366578063b09ad8a01461038d578063bc489a651461039557600080fd5b8063a384d6ff116100bd578063a384d6ff1461030f578063a50cf2c814610318578063a834559e1461033f57600080fd5b80638456cb59146102bd5780639a6fc8f5146102c557600080fd5b8063427cb6fe1161012f5780635c975abb116101145780635c975abb1461026a5780637284e416146102815780637aac1c481461029657600080fd5b8063427cb6fe1461023b57806354fd4d501461026257600080fd5b8063313ce56711610160578063313ce567146102025780633f4ba83a1461021c5780633fd0875f1461022657600080fd5b806312b495a81461017c578063218751b2146101b6575b600080fd5b6101a37f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b6101dd7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101ad565b61020a600881565b60405160ff90911681526020016101ad565b6102246103df565b005b61022e600481565b6040516101ad9190610ec8565b6101dd7f000000000000000000000000000000000000000000000000000000000000000081565b6101a3600181565b60005460ff165b60405190151581526020016101ad565b6102896104cd565b6040516101ad9190610f09565b6101dd7f000000000000000000000000000000000000000000000000000000000000000081565b61022461055b565b6102d86102d3366004610f94565b610647565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a0016101ad565b6101a360015481565b6101dd7f000000000000000000000000000000000000000000000000000000000000000081565b6101a37f000000000000000000000000000000000000000000000000000000000000000081565b6101dd7f000000000000000000000000000000000000000000000000000000000000000081565b6101a3610681565b6102246103a3366004610fb8565b610693565b610271600181565b6101dd7f000000000000000000000000000000000000000000000000000000000000000081565b6102d8610783565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa158015610469573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048d9190610fd1565b6104c3576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104cb610b58565b565b600280546104da90610ff3565b80601f016020809104026020016040519081016040528092919081815260200182805461050690610ff3565b80156105535780601f1061052857610100808354040283529160200191610553565b820191906000526020600020905b81548152906001019060200180831161053657829003601f168201915b505050505081565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa1580156105e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106099190610fd1565b61063f576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104cb610c3e565b60008060008060006040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061068e600154610cfe565b905090565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561071d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107419190610fd1565b610777576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61078081610d47565b50565b6000806000806000806000806000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156107fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108219190611047565b939d50919b509950975095506108398a8a8989610dc9565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156108a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c89190611047565b9398509196509450925090506108e085858484610dc9565b888412156108f8578499508398508297508196508095505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610963573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109879190611047565b93985091965094509250905061099f85858484610dc9565b888412156109b7578499508398508297508196508095505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610a22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a469190611047565b939850919650945092509050610a5e85858484610dc9565b88841215610a76578499508398508297508196508095505b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb7b8b806040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ae3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b07919061109f565b9050610b1281610e64565b90507f0000000000000000000000000000000000000000000000000000000000000000610b3f828c6110e7565b610b4991906111d2565b99505050505050509091929394565b60005460ff16610bc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff1615610cab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bc0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610c143390565b6000612710610d2d7f00000000000000000000000000000000000000000000000000000000000000008261123a565b610d379084611252565b610d41919061128f565b92915050565b80610d7e576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190557f82e7ee47180a631312683eeb2a85ad264c9af490d54de5a75bbdb95b968c6de281610dae81610cfe565b6040805192835260208301919091520160405180910390a150565b60008313610e03576040517f56e05d2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8369ffffffffffffffffffff168169ffffffffffffffffffff161080610e27575081155b15610e5e576040517fb1cf675500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60015460009080831015610ea4576040517fb416da7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610eaf82610cfe565b905080841115610ec0579392505050565b509192915050565b6020810160068310610f03577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b600060208083528351808285015260005b81811015610f3657858101830151858201604001528201610f1a565b81811115610f48576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b69ffffffffffffffffffff8116811461078057600080fd5b600060208284031215610fa657600080fd5b8135610fb181610f7c565b9392505050565b600060208284031215610fca57600080fd5b5035919050565b600060208284031215610fe357600080fd5b81518015158114610fb157600080fd5b600181811c9082168061100757607f821691505b60208210811415611041577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600080600080600060a0868803121561105f57600080fd5b855161106a81610f7c565b80955050602086015193506040860151925060608601519150608086015161109181610f7c565b809150509295509295909350565b6000602082840312156110b157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615611128576111286110b8565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615611163576111636110b8565b6000871292508782058712848416161561117f5761117f6110b8565b87850587128184161615611195576111956110b8565b505050929093029392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826111e1576111e16111a3565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615611235576112356110b8565b500590565b6000821982111561124d5761124d6110b8565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561128a5761128a6110b8565b500290565b60008261129e5761129e6111a3565b50049056fea26469706673582212201ac3e66d7646fe6cc19eeb98703f28a4e57d890bef3635f1ed53ec7a4ea130d864736f6c634300080a00336102606040523480156200001257600080fd5b5060405162005f7e38038062005f7e833981016040819052620000359162000ba4565b83838383600284846001600160a01b03821615806200005b57506001600160a01b038116155b156200007a57604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038216608081905260408051632f7a188160e01b81529051632f7a1881916004808201926020929091908290030181865afa158015620000c5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000eb919062000c01565b6001600160a01b0390811660a05290811660c05260016000558416151590506200012857604051635919af9760e11b815260040160405180910390fd5b608051604051630f67c5bd60e41b81526001600160a01b0385811660048301529091169063f67c5bd090602401602060405180830381865afa15801562000173573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000199919062000c26565b620001c757604051634c607af960e11b81526001600160a01b03841660048201526024015b60405180910390fd5b6001600160a01b038084166101e081905261020052821661022052610240819052620001f460006200090a565b6001600160a01b031660e0526200020c60016200090a565b6001600160a01b0316610100526200022560026200090a565b6001600160a01b0316610120526200023e60036200090a565b6001600160a01b031661014052620002576000620009fd565b6001600160a01b031661016052620002706001620009fd565b6001600160a01b031661018052620002896002620009fd565b6001600160a01b03166101a052620002a26003620009fd565b6001600160a01b039081166101c05260e051161580620002cc5750610100516001600160a01b0316155b15620002eb57604051635919af9760e11b815260040160405180910390fd5b600281118015620003065750610120516001600160a01b0316155b156200032557604051635919af9760e11b815260040160405180910390fd5b600381118015620003405750610140516001600160a01b0316155b156200035f57604051635919af9760e11b815260040160405180910390fd5b60805160e051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620003ac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003d2919062000c26565b620004005760e051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b60805161010051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa1580156200044e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000474919062000c26565b620004a35761010051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b60028111801562000525575060805161012051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620004fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000523919062000c26565b155b15620005555761012051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b600381118015620005d7575060805161014051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620005af573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005d5919062000c26565b155b15620006075761014051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b610160516001600160a01b03161580159062000694575060805161016051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa1580156200066c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000692919062000c26565b155b15620006c45761016051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b610180516001600160a01b03161580159062000751575060805161018051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa15801562000729573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200074f919062000c26565b155b15620007815761018051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b6101a0516001600160a01b0316158015906200080e57506080516101a051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620007e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200080c919062000c26565b155b156200083e576101a051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b6101c0516001600160a01b031615801590620008cb57506080516101c051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620008a3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008c9919062000c26565b155b15620008fb576101c051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b50505050505050505062000c66565b60c05160405163c661065760e01b8152600481018390526000916001600160a01b03169063c661065790602401602060405180830381865afa92505050801562000973575060408051601f3d908101601f19168201909252620009709181019062000c01565b60015b6200097e5762000984565b92915050565b60c05160405163046e8dd760e31b8152600f84900b60048201526001600160a01b03909116906323746eb8906024015b602060405180830381865afa925050508015620009f0575060408051601f3d908101601f19168201909252620009ed9181019062000c01565b60015b6200097e57506000919050565b610220516000906001600160a01b03161562000a1e576200097e8262000ac0565b60c051604051630b9947eb60e41b8152600481018490526001600160a01b039091169063b9947eb090602401602060405180830381865afa92505050801562000a86575060408051601f3d908101601f1916820190925262000a839181019062000c01565b60015b6200097e5760c051604051635b9cca9f60e11b8152600f84900b60048201526001600160a01b039091169063b739953e90602401620009b4565b60008162000ad4576200097e600062000b17565b610220516001600160a01b031663c661065762000af360018562000c40565b6040518263ffffffff1660e01b8152600401620009b491815260200190565b919050565b600081600f0b6000141562000b2b575060e0515b81600f0b6001141562000b3e5750610100515b81600f0b6002141562000b515750610120515b81600f0b6003141562000b645750610140515b6001600160a01b03811662000b12576040516334769e6f60e21b815260040160405180910390fd5b80516001600160a01b038116811462000b1257600080fd5b6000806000806080858703121562000bbb57600080fd5b62000bc68562000b8c565b935062000bd66020860162000b8c565b925062000be66040860162000b8c565b915062000bf66060860162000b8c565b905092959194509250565b60006020828403121562000c1457600080fd5b62000c1f8262000b8c565b9392505050565b60006020828403121562000c3957600080fd5b5051919050565b60008282101562000c6157634e487b7160e01b600052601160045260246000fd5b500390565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e051610200516102205161024051614f9b62000fe36000396000818161077001528181613503015281816135f501528181613735015281816138ec0152613a06015260006105f101526000818161068801528181611ec70152818161238c015281816126b3015281816129580152818161303a01526130d8015260006108a701526000818161059c0152612a5a0152600081816103d40152612a2b01526000818161061801526129fc0152600081816106af01526129cd015260008181610870015281816128320152818161365f01528181613f5e01526143f20152600081816104fd015281816128030152818161356d01528181613e8e01526142d60152600081816107da015281816127d40152818161347901528181613dbe01526141ba01526000818161045d015281816127a5015281816133ad01528181613cee015261409e01526000818161072201528181610914015281816109e101528181610a7101528181610b6901528181610cd601528181610d5301528181610dea01528181610e7a0152818161128801528181611300015281816114d801528181611572015281816115ba015281816116e101528181611729015281816117da0152818161180f01528181611af801528181611bef01528181611c6701528181611d0c01528181611f1101528181611fc901528181611ffe015281816120990152818161240d01528181612448015281816124b50152818161254601528181612c7801528181612d9701528181612e710152818161407601528181614192015281816142ae015281816143ca015261451201526000818161052401528181612ae3015281816145b90152614693015260008181610749015281816110180152818161191a01528181611e5301528181612232015281816125e0015281816126db015281816128d001528181612cce01528181612d6801528181612ec701528181612f6f01528181613231015281816132e8015281816133d8015281816134a1015281816135950152818161368701528181613c2101528181613d1601528181613de601528181613eb601528181613f86015281816140ec015281816142080152818161432401528181614440015281816144e3015281816146230152818161471b015281816147cf01526148790152614f9b6000f3fe608060405234801561001057600080fd5b50600436106103a45760003560e01c806378aa73a4116101e9578063ce30bbdb1161010f578063e3103273116100ad578063f446c1d01161007c578063f446c1d014610892578063f851a4401461089a578063fc0c546a146108a2578063fee3f7f9146108c957600080fd5b8063e310327314610832578063ec026ca714610845578063ed8e84f314610858578063ef14101e1461086b57600080fd5b8063d96c7fce116100e9578063d96c7fce146107fc578063dd62ed3e14610804578063ddca3f4314610817578063e2e7d2641461081f57600080fd5b8063ce30bbdb146107b3578063cf023dd0146107c2578063d21220a7146107d557600080fd5b8063b739953e11610187578063c12c21c011610156578063c12c21c014610744578063c21ee1621461076b578063c661065714610792578063cc2b27d7146107a057600080fd5b8063b739953e146106f4578063b9947eb014610707578063bb7b8b8014610715578063bd90df701461071d57600080fd5b80638ba51dfc116101c35780638ba51dfc146106aa57806395d89b41146106d1578063a6417ed6146106d9578063b4b577ad146106ec57600080fd5b806378aa73a41461065557806379bea6641461067057806382c630661461068357600080fd5b80632f7a1881116102ce57806357d788751161026c57806364a89bca1161023b57806364a89bca146105ec5780636e1d82711461061357806370a082311461063a57806376a2f0f01461064d57600080fd5b806357d78875146105975780635b36389c146105be5780635e0d443f146105d157806363543f06146105e457600080fd5b80633df02124116102a85780633df02124146105615780634469e30e146105745780634903b0d11461057c5780635409491a1461058f57600080fd5b80632f7a18811461051f578063313ce5671461054657806333d2ebf21461054e57600080fd5b806314052288116103465780631af4de83116103155780631af4de83146104ca5780632081066c146104dd57806323746eb8146104e557806325be124e146104f857600080fd5b8063140522881461049f57806314f05979146104a757806318160ddd146104af5780631a4d01d2146104b757600080fd5b806307211ef71161038257806307211ef7146104305780630b4c7e4d146104435780630dfe1681146104585780630f6ba8e31461047f57600080fd5b8063065a80d8146103a957806306871163146103cf57806306fdde031461041b575b600080fd5b6103bc6103b736600461490d565b6108d1565b6040519081526020015b60405180910390f35b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016103c6565b610423610a6d565b6040516103c6919061499e565b6103bc61043e3660046149b1565b610b25565b6104566104513660046149fe565b610bf4565b005b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b61049261048d366004614a29565b610c91565b6040516103c69190614a67565b6103bc610d4f565b610492610de0565b6103bc610e76565b6104566104c5366004614a98565b610ee3565b6104566104d83660046149b1565b610f76565b6103bc611284565b6103f66104f336600461490d565b6112f1565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc6112fc565b61045661055c366004614abd565b611369565b61045661056f366004614ae7565b6113fd565b6104926114ce565b6103bc61058a366004614b29565b611540565b6103bc6115b6565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6104566105cc366004614b42565b611623565b6103bc6105df3660046149b1565b61169d565b6103bc611725565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc610648366004614b91565b611792565b6103bc61180b565b61065d600281565b60405161ffff90911681526020016103c6565b61045661067e3660046149b1565b611878565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b610423611af4565b6104566106e7366004614ae7565b611b61565b6103bc611beb565b6103f661070236600461490d565b611c58565b6103f6610702366004614b29565b6103bc611c63565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc7f000000000000000000000000000000000000000000000000000000000000000081565b6103f66104f3366004614b29565b6103bc6107ae366004614bae565b611cd0565b60056040516103c69190614bd1565b6104566107d0366004614a98565b611d8d565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b610492611f07565b6103bc610812366004614c12565b611f79565b6103bc611ffa565b6103bc61082d366004614b29565b612067565b6104566108403660046149fe565b6120dd565b610456610853366004614abd565b61216c565b6103bc610866366004614c4b565b6123cd565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc612444565b6103f66124b1565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc612542565b6040517f4903b0d10000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff821660048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634903b0d1906024015b602060405180830381865afa9250505080156109ab575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526109a891810190614c7d565b60015b610a62576040517f065a80d8000000000000000000000000000000000000000000000000000000008152600f83900b60048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063065a80d8906024015b602060405180830381865afa158015610a3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a629190614c7d565b92915050565b919050565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015610ada573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b209190810190614d57565b905090565b6040517f07211ef7000000000000000000000000000000000000000000000000000000008152600f84810b600483015283900b6024820152604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906307211ef7906064015b602060405180830381865afa158015610bc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bea9190614c7d565b90505b9392505050565b60026000541415610c66576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b60026000908155610c88906001843581109160208601359190911190806125af565b50506001600055565b610c996148dd565b6040517f0f6ba8e300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690630f6ba8e390610d0f90879087908790600401614da8565b6040805180830381865afa158015610d2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bea9190614dcf565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663140522886040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b209190614c7d565b610de86148dd565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166314f059796040518163ffffffff1660e01b81526004016040805180830381865afa158015610e52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b209190614dcf565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b60026000541415610f50576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b60026000908155610f6083612794565b9050610f6b8161289f565b505060016000555050565b60026000541415610fe3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611074573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110989190614e4f565b905060006110a5856129bc565b905060006110b2856129bc565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529192506000918416906370a0823190602401602060405180830381865afa158015611124573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111489190614c7d565b90506001811115611276577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce800000061118e8784614e6c565b6111989190614ed0565b604051600f8a810b602483015289900b60448201526064810184905260848101829052909150611273908690869086907fa6417ed6000000000000000000000000000000000000000000000000000000009060a4015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152600180612ac6565b50505b505060016000555050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632081066c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b6000610a6282612794565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b600260005414156113d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b600260009081556113e683612794565b90506113f3838284612f3e565b5050600160005550565b6002600054141561146a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b6002600090815561147a85612794565b9050600061148785612794565b905061127682826000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052506001935091506131e89050565b6114d66148dd565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16634469e30e6040518163ffffffff1660e01b81526004016040805180830381865afa158015610e52573d6000803e3d6000fd5b6040517f4903b0d1000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634903b0d190602401610954565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635409491a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b60026000541415611690576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b6002600055610c886132b7565b6040517f5e0d443f000000000000000000000000000000000000000000000000000000008152600f84810b600483015283900b6024820152604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635e0d443f90606401610ba9565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166363543f066040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401610a21565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166376a2f0f06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b600260005414156118e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611976573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061199a9190614e4f565b905060006119a785612794565b905060006119b485612794565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529192506000918416906370a0823190602401602060405180830381865afa158015611a26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a4a9190614c7d565b90506001811115611276577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce8000000611a908784614e6c565b611a9a9190614ed0565b604051600f8a810b602483015289900b60448201526064810184905260848101829052909150611273908690869086907f3df02124000000000000000000000000000000000000000000000000000000009060a4016111ee565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610ada573d6000803e3d6000fd5b60026000541415611bce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b60026000908155611bde856129bc565b90506000611487856129bc565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b4b577ad6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b6000610a62826129bc565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb7b8b806040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b6040517fcc2b27d700000000000000000000000000000000000000000000000000000000815260048101839052600f82900b60248201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063cc2b27d7906044015b602060405180830381865afa158015611d69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bed9190614c7d565b60026000541415611dfa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b60026000908155611e0a83612794565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611e9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ebe9190614e4f565b9050611efa81837f0000000000000000000000000000000000000000000000000000000000000000611ef1888a89613731565b60016000612ac6565b5050600160005550505050565b611f0f6148dd565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d96c7fce6040518163ffffffff1660e01b81526004016040805180830381865afa158015610e52573d6000803e3d6000fd5b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063dd62ed3e90604401611d4c565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b6040517fe2e7d264000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e2e7d26490602401610a21565b6002600054141561214a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b60026000908155610c8890600184358110916020860135919091119080613bf0565b600260005414156121d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b600260009081556121e983612794565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015612279573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061229d9190614e4f565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000918416906370a0823190602401602060405180830381865afa15801561230f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123339190614c7d565b905060018111156123c1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce80000006123798684614e6c565b6123839190614ed0565b90506123be83857f00000000000000000000000000000000000000000000000000000000000000006123b68a8787613731565b600180612ac6565b50505b50506001600055505050565b6040517fed8e84f300000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063ed8e84f390611d4c9086908690600401614f0b565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f446c1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa15801561251e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b209190614e4f565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fee3f7f96040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa15801561263c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126609190614e4f565b905061266e8585858561402d565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561271f57600080fd5b505af1158015612733573d6000803e3d6000fd5b505050506127776000368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506144a392505050565b506127848585858561402d565b61278d816145a1565b5050505050565b600081600f0b600014156127c557507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b600114156127f457507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6002141561282357507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6003141561285257507f00000000000000000000000000000000000000000000000000000000000000005b73ffffffffffffffffffffffffffffffffffffffff8116610a68576040517fd1da79bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa15801561292c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129509190614e4f565b90506129b7817f0000000000000000000000000000000000000000000000000000000000000000846000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509250829150612ac69050565b505050565b600081600f0b600014156129ed57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b60011415612a1c57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b60021415612a4b57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6003141561285257507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff8116610a68576040517fd1da79bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606000803373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614612c2f576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301528916906370a0823190602401602060405180830381865afa158015612b74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b989190614c7d565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152919350908816906370a0823190602401602060405180830381865afa158015612c08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c2c9190614c7d565b90505b8415612d2b576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612d1257600080fd5b505af1158015612d26573d6000803e3d6000fd5b505050505b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a90612dc19033907f0000000000000000000000000000000000000000000000000000000000000000908b90600401614f23565b6000604051808303816000875af1158015612de0573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052612e269190810190614d57565b92508415612f24576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612f0b57600080fd5b505af1158015612f1f573d6000803e3d6000fd5b505050505b612f3289898985858961467b565b50509695505050505050565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612fcb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fef9190614e4f565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000917f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015613081573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130a59190614c7d565b9050600181111561278d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016131e0827f0000000000000000000000000000000000000000000000000000000000000000867f1a4d01d200000000000000000000000000000000000000000000000000000000858a6b033b2e3c9fd0803ce80000006131328b84614e6c565b61313c9190614ed0565b6040516024810193909352600f9190910b60448301526064820152608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915260006001612ac6565b505050505050565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015260609060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015613278573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061329c9190614e4f565b90506132ac818888888888612ac6565b979650505050505050565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015613344573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133689190614e4f565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301529192507f0000000000000000000000000000000000000000000000000000000000000000909116906351e3f16090604401600060405180830381600087803b15801561341e57600080fd5b505af1158015613432573d6000803e3d6000fd5b50506040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f00000000000000000000000000000000000000000000000000000000000000001692506351e3f1609150604401600060405180830381600087803b1580156134e757600080fd5b505af11580156134fb573d6000803e3d6000fd5b5050505060027f000000000000000000000000000000000000000000000000000000000000000011156136e4576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156135d957600080fd5b505af11580156135ed573d6000803e3d6000fd5b5050505060037f000000000000000000000000000000000000000000000000000000000000000011156136e4576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156136cb57600080fd5b505af11580156136df573d6000803e3d6000fd5b505050505b6137246000368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506144a392505050565b5061372e816145a1565b50565b60607f0000000000000000000000000000000000000000000000000000000000000000600214156138ea5783600f0b600014613827576040516000602482015260448101849052606481018390527f0b4c7e4d00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526138e3565b6040516024810184905260006044820152606481018390527f0b4c7e4d00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091525b9050610bed565b7f000000000000000000000000000000000000000000000000000000000000000060031415613a045783600f0b6000146139bb5783600f0b60011461397257604051600060248201819052604482015260648101849052608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a4016137a5565b604051600060248201819052604482018590526064820152608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a4016137a5565b604051602481018490526000604482018190526064820152608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401613865565b7f000000000000000000000000000000000000000000000000000000000000000060041415613b8e5783600f0b600014613b3e5783600f0b600114613aee5783600f0b600214613a9e576040516000602482018190526044820181905260648201526084810184905260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c4016137a5565b6040516000602482018190526044820181905260648201859052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c4016137a5565b6040516000602482018190526044820185905260648201819052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c4016137a5565b6040516024810184905260006044820181905260648201819052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613865565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f496e636f7272656374206e436f696e73000000000000000000000000000000006044820152606401610c5d565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015613c7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ca19190614e4f565b90508415613d73576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015613d5a57600080fd5b505af1158015613d6e573d6000803e3d6000fd5b505050505b8315613e43576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015613e2a57600080fd5b505af1158015613e3e573d6000803e3d6000fd5b505050505b8215613f13576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015613efa57600080fd5b505af1158015613f0e573d6000803e3d6000fd5b505050505b8115613fe3576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015613fca57600080fd5b505af1158015613fde573d6000803e3d6000fd5b505050505b6140236000368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506144a392505050565b5061278d816145a1565b8315614149576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561413057600080fd5b505af1158015614144573d6000803e3d6000fd5b505050505b8215614265576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561424c57600080fd5b505af1158015614260573d6000803e3d6000fd5b505050505b8115614381576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561436857600080fd5b505af115801561437c573d6000803e3d6000fd5b505050505b801561449d576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561448457600080fd5b505af1158015614498573d6000803e3d6000fd5b505050505b50505050565b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815260609073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a9061453c9033907f0000000000000000000000000000000000000000000000000000000000000000908790600401614f23565b6000604051808303816000875af115801561455b573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610a629190810190614d57565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461372e576040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b15801561466757600080fd5b505af115801561278d573d6000803e3d6000fd5b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461477c576040517f654a9eda00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528681166024830152858116604483015260648201859052608482018490527f0000000000000000000000000000000000000000000000000000000000000000169063654a9eda9060a401600060405180830381600087803b15801561475f57600080fd5b505af1158015614773573d6000803e3d6000fd5b505050506131e0565b801561482c576040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015286811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b15801561481357600080fd5b505af1158015614827573d6000803e3d6000fd5b505050505b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015285811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156148bd57600080fd5b505af11580156148d1573d6000803e3d6000fd5b50505050505050505050565b60405180604001604052806002906020820280368337509192915050565b8035600f81900b8114610a6857600080fd5b60006020828403121561491f57600080fd5b610bed826148fb565b60005b8381101561494357818101518382015260200161492b565b8381111561449d5750506000910152565b6000815180845261496c816020860160208601614928565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610bed6020830184614954565b6000806000606084860312156149c657600080fd5b6149cf846148fb565b92506149dd602085016148fb565b9150604084013590509250925092565b8060408101831015610a6257600080fd5b60008060608385031215614a1157600080fd5b614a1b84846149ed565b946040939093013593505050565b600080600060a08486031215614a3e57600080fd5b614a4885856149ed565b9250614a5785604086016149ed565b9150608084013590509250925092565b60408101818360005b6002811015614a8f578151835260209283019290910190600101614a70565b50505092915050565b600080600060608486031215614aad57600080fd5b833592506149dd602085016148fb565b60008060408385031215614ad057600080fd5b614ad9836148fb565b946020939093013593505050565b60008060008060808587031215614afd57600080fd5b614b06856148fb565b9350614b14602086016148fb565b93969395505050506040820135916060013590565b600060208284031215614b3b57600080fd5b5035919050565b60008060608385031215614b5557600080fd5b82359150614b6684602085016149ed565b90509250929050565b73ffffffffffffffffffffffffffffffffffffffff8116811461372e57600080fd5b600060208284031215614ba357600080fd5b8135610bed81614b6f565b60008060408385031215614bc157600080fd5b82359150614b66602084016148fb565b6020810160118310614c0c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60008060408385031215614c2557600080fd5b8235614c3081614b6f565b91506020830135614c4081614b6f565b809150509250929050565b60008060608385031215614c5e57600080fd5b614c6884846149ed565b915060408301358015158114614c4057600080fd5b600060208284031215614c8f57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff80841115614ce057614ce0614c96565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715614d2657614d26614c96565b81604052809350858152868686011115614d3f57600080fd5b614d4d866020830187614928565b5050509392505050565b600060208284031215614d6957600080fd5b815167ffffffffffffffff811115614d8057600080fd5b8201601f81018413614d9157600080fd5b614da084825160208401614cc5565b949350505050565b60a08101604085833760408201600081526040858237506080919091019190915292915050565b600060408284031215614de157600080fd5b82601f830112614df057600080fd5b6040516040810181811067ffffffffffffffff82111715614e1357614e13614c96565b8060405250806040840185811115614e2a57600080fd5b845b81811015614e44578051835260209283019201614e2c565b509195945050505050565b600060208284031215614e6157600080fd5b8151610bed81614b6f565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ecb577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500290565b600082614f06577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60608101604084833791151560409190910152919050565b600073ffffffffffffffffffffffffffffffffffffffff808616835280851660208401525060606040830152614f5c6060830184614954565b9594505050505056fea26469706673582212205dd1b4208756e7993c5cfaf271be99123f9b37ebc97bdd8fd152eac9cd1e945564736f6c634300080a003360806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d00011790553480156200003a57600080fd5b506040805161018081019091526000908060c081018060018152604080518082018252600381526244414960e81b6020828101919091528301526012908201526305f5e100606082015260800160018152602001600081525081526020016040518060c001604052806002600a811115620000b957620000b962000b78565b815260408051808201825260048152635553444360e01b6020828101919091528301526006908201526305f5e100606082015260800160018152602001600081525081526020016040518060c001604052806003600a81111562000121576200012162000b78565b815260408051808201825260048152630ae8aa8960e31b602082810191909152830152601290820152644a817c8000606082015260800160028152602001600081525081526020016040518060c001604052806004600a8111156200018a576200018a62000b78565b815260408051808201825260048152634c494e4b60e01b6020828101919091528301526012908201526359682f00606082015260800160018152602001600081525081526020016040518060c001604052806005600a811115620001f257620001f262000b78565b815260408051808201825260048152631554d11560e21b602082810191909152830152601290820152633b023380606082015260800160018152602001600081525081526020016040518060c001604052806006600a8111156200025a576200025a62000b78565b815260408051808201825260058152640e6e88aa8960db1b602082810191909152830152601290820152644cd588640060608201526080016003815260200160009052905260408051610140810190915290915060009080608081018060078152602001604051806040016040528060048152602001636344414960e01b8152508152602001601260ff1681526020016305f5e100815260200160048081111562000309576200030962000b78565b8152602001600181525081526020016040518060c001604052806008600a81111562000339576200033962000b78565b81526040805180820182526005815264635553444360d81b6020828101919091528301526006908201526305f5e100606082015260800160048152602001600281525081526020016040518060c001604052806009600a811115620003a257620003a262000b78565b8152604080518082018252600581526418d554d11560da1b602082810191909152830152601290820152633b023380606082015260800160048152602001600581525081526020016040518060c00160405280600a808111156200040a576200040a62000b78565b81526040805180820182526005815264634c494e4b60d81b6020828101919091528301526012908201526359682f00606082015260800160048152602001600490529052905060005b600681101562000496576200048183826006811062000476576200047662000b8e565b6020020151620004db565b806200048d8162000ba4565b91505062000453565b5060005b6004811015620004d257620004bd82826004811062000476576200047662000b8e565b80620004c98162000ba4565b9150506200049a565b50505062000d14565b6000600282608001516004811115620004f857620004f862000b78565b14156200054e576040516200050d9062000a8c565b604051809103906000f0801580156200052a573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b03831617905590506200071e565b60038260800151600481111562000569576200056962000b78565b1415620005a4576040516200057e9062000a9a565b604051809103906000f0801580156200059b573d6000803e3d6000fd5b5090506200071e565b600182608001516004811115620005bf57620005bf62000b78565b1415620005f157816020015182602001518360400151604051620005e39062000aa8565b6200057e9392919062000c1e565b6004826080015160048111156200060c576200060c62000b78565b1415620006be576000600260008460a00151600a81111562000632576200063262000b78565b600a81111562000646576200064662000b78565b815260200190815260200160002060009054906101000a90046001600160a01b0316905082602001518360200151846040015183604051620006889062000ab6565b62000697949392919062000c5b565b604051809103906000f080158015620006b4573d6000803e3d6000fd5b509150506200071e565b60405162461bcd60e51b815260206004820152602b60248201527f74657374546f6b656e53756974653a204372656174696e6720756e6b6e6f776e60448201526a20746f6b656e207479706560a81b606482015260840160405180910390fd5b60005460208301516040516318caf8e360e31b8152620100009092046001600160a01b03169163c657c718916200075b9185919060040162000ca9565b600060405180830381600087803b1580156200077657600080fd5b505af11580156200078b573d6000803e3d6000fd5b50505050600082606001516008604051620007a69062000ac4565b91825260ff166020820152604001604051809103906000f080158015620007d1573d6000803e3d6000fd5b50905081600260008560000151600a811115620007f257620007f262000b78565b600a81111562000806576200080662000b78565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055508260600151600560008560000151600a8111156200085a576200085a62000b78565b600a8111156200086e576200086e62000b78565b8152602080820192909252604090810160009081209390935585516001600160a01b03861684526008909252909120805460ff1916600183600a811115620008ba57620008ba62000b78565b02179055508260800151600360008560000151600a811115620008e157620008e162000b78565b600a811115620008f557620008f562000b78565b81526020810191909152604001600020805460ff1916600183600481111562000922576200092262000b78565b0217905550604080518082019091526001600160a01b0380841682528281166020808401918252600780546001810182556000918252945160029095027fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688810180549686166001600160a01b031997881617905592517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c689909301805493909416929094169190911790915584015184519091600491600a811115620009eb57620009eb62000b78565b600a811115620009ff57620009ff62000b78565b8152602001908152602001600020908051906020019062000a2292919062000ad2565b5080600660008560000151600a81111562000a415762000a4162000b78565b600a81111562000a555762000a5562000b78565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550505050565b610ab1806200285183390190565b611224806200330283390190565b611758806200452683390190565b6117098062005c7e83390190565b6106ca806200738783390190565b82805462000ae09062000cd7565b90600052602060002090601f01602090048101928262000b04576000855562000b4f565b82601f1062000b1f57805160ff191683800117855562000b4f565b8280016001018555821562000b4f579182015b8281111562000b4f57825182559160200191906001019062000b32565b5062000b5d92915062000b61565b5090565b5b8082111562000b5d576000815560010162000b62565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600060001982141562000bc757634e487b7160e01b600052601160045260246000fd5b5060010190565b6000815180845260005b8181101562000bf65760208185018101518683018201520162000bd8565b8181111562000c09576000602083870101525b50601f01601f19169290920160200192915050565b60608152600062000c33606083018662000bce565b828103602084015262000c47818662000bce565b91505060ff83166040830152949350505050565b60808152600062000c70608083018762000bce565b828103602084015262000c84818762000bce565b60ff95909516604084015250506001600160a01b039190911660609091015292915050565b6001600160a01b038316815260406020820181905260009062000ccf9083018462000bce565b949350505050565b600181811c9082168062000cec57607f821691505b6020821081141562000d0e57634e487b7160e01b600052602260045260246000fd5b50919050565b611b2d8062000d246000396000f3fe6080604052600436106101635760003560e01c80638eb86e8b116100c0578063c6c3bbe611610074578063d051a62211610059578063d051a62214610490578063eebab8ef146104b0578063fa7626d4146104d057600080fd5b8063c6c3bbe614610433578063c74912d21461045357600080fd5b80639b140a85116100a55780639b140a85146103e6578063b36ba20814610406578063ba414fa61461040e57600080fd5b80638eb86e8b1461038357806398cdaadf146103a357600080fd5b80636a72bde71161011757806388327863116100fc578063883278631461030857806388f776a2146103365780638a3177a31461035657600080fd5b80636a72bde7146102c45780636ca42ae3146102e657600080fd5b8063440864fa11610148578063440864fa146102025780634b57b0be1461022f57806367b426451461028157600080fd5b806304bc3b1c1461016f57806310c7f0b9146101b557600080fd5b3661016a57005b600080fd5b34801561017b57600080fd5b5061019f61018a3660046116f6565b60086020526000908152604090205460ff1681565b6040516101ac9190611742565b60405180910390f35b3480156101c157600080fd5b506101d56101d036600461175c565b6104ea565b6040805173ffffffffffffffffffffffffffffffffffffffff9384168152929091166020830152016101ac565b34801561020e57600080fd5b5061022261021d366004611784565b610530565b6040516101ac91906117cb565b34801561023b57600080fd5b5060015461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101ac565b34801561028d57600080fd5b5061025c61029c366004611784565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156102d057600080fd5b506102e46102df36600461181c565b6105ca565b005b3480156102f257600080fd5b506102fb610730565b6040516101ac919061186b565b34801561031457600080fd5b506103286103233660046118d4565b6107b5565b6040519081526020016101ac565b34801561034257600080fd5b506102e461035136600461190b565b610888565b34801561036257600080fd5b50610328610371366004611784565b60056020526000908152604090205481565b34801561038f57600080fd5b506102e461039e366004611954565b6108b9565b3480156103af57600080fd5b5061025c6103be366004611784565b60066020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156103f257600080fd5b506102e4610401366004611993565b610a73565b6102e4610b22565b34801561041a57600080fd5b50610423610ba0565b60405190151581526020016101ac565b34801561043f57600080fd5b506102e461044e3660046119b3565b610d00565b34801561045f57600080fd5b5061048361046e366004611784565b60036020526000908152604090205460ff1681565b6040516101ac91906119d3565b34801561049c57600080fd5b506103286104ab36600461190b565b610daf565b3480156104bc57600080fd5b506102e46104cb366004611954565b610e8b565b3480156104dc57600080fd5b506000546104239060ff1681565b600781815481106104fa57600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff91821692501682565b60046020526000908152604090208054610549906119e7565b80601f0160208091040260200160405190810160405280929190818152602001828054610575906119e7565b80156105c25780601f10610597576101008083540402835291602001916105c2565b820191906000526020600020905b8154815290600101906020018083116105a557829003601f168201915b505050505081565b6000546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152620100009092049091169063ca669fa790602401600060405180830381600087803b15801561063e57600080fd5b505af1158015610652573d6000803e3d6000fd5b505050506002600085600a81111561066c5761066c611713565b600a81111561067d5761067d611713565b8152602081019190915260409081016000205490517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490529091169063095ea7b3906044016020604051808303816000875af1158015610705573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107299190611a3b565b5050505050565b60606007805480602002602001604051908101604052809291908181526020016000905b828210156107ac5760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff908116835260019182015416828401529083529092019101610754565b50505050905090565b60006002600084600a8111156107cd576107cd611713565b600a8111156107de576107de611713565b8152602081019190915260409081016000205490517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152909116906370a0823190602401602060405180830381865afa15801561085d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108819190611a5d565b9392505050565b6108b48383837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6105ca565b505050565b60016003600085600a8111156108d1576108d1611713565b600a8111156108e2576108e2611713565b815260208101919091526040016000205460ff16600481111561090757610907611713565b14610999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f74657374546f6b656e53756974653a20547279696e6720746f206275726e206160448201527f206e6f6e2d6e6f726d616c20746f6b656e00000000000000000000000000000060648201526084015b60405180910390fd5b6002600084600a8111156109af576109af611713565b600a8111156109c0576109c0611713565b8152602081019190915260409081016000205490517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526024820184905290911690639dc29fac906044015b6020604051808303816000875af1158015610a49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6d9190611a3b565b50505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604081205460ff169081600a811115610aaf57610aaf611713565b1415610b17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f20746f6b656e2077697468207375636820616464726573730000000000006044820152606401610990565b610a6d818484610888565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015610b8c57600080fd5b505af1158015610729573d6000803e3d6000fd5b60008054610100900460ff1615610bc05750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610cfb5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610c65917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc491608001611a76565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052610c9d91611abe565b6000604051808303816000865af19150503d8060008114610cda576040519150601f19603f3d011682016040523d82523d6000602084013e610cdf565b606091505b5091505080806020019051810190610cf79190611a3b565b9150505b919050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604081205460ff169081600a811115610d3c57610d3c611713565b1415610da4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f20746f6b656e2077697468207375636820616464726573730000000000006044820152606401610990565b610a6d818484610e8b565b60006002600085600a811115610dc757610dc7611713565b600a811115610dd857610dd8611713565b8152602081019190915260409081016000205490517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301529091169063dd62ed3e90604401602060405180830381865afa158015610e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e839190611a5d565b949350505050565b60026003600085600a811115610ea357610ea3611713565b600a811115610eb457610eb4611713565b815260208101919091526040016000205460ff166004811115610ed957610ed9611713565b1415610ff6576000546040517fc88a5e6d000000000000000000000000000000000000000000000000000000008152306004820152602481018390526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c88a5e6d90604401600060405180830381600087803b158015610f5657600080fd5b505af1158015610f6a573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015610fd857600080fd5b505af1158015610fec573d6000803e3d6000fd5b505050505061163c565b600380600085600a81111561100d5761100d611713565b600a81111561101e5761101e611713565b815260208101919091526040016000205460ff16600481111561104357611043611713565b14156111aa576000546040517fc88a5e6d000000000000000000000000000000000000000000000000000000008152306004820152602481018390526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c88a5e6d90604401600060405180830381600087803b1580156110c057600080fd5b505af11580156110d4573d6000803e3d6000fd5b505050506002600084600a8111156110ee576110ee611713565b600a8111156110ff576110ff611713565b8152602081019190915260409081016000205490517fa1903eab00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a1903eab90839060240160206040518083038185885af115801561117f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906111a49190611a5d565b5061163c565b60046003600085600a8111156111c2576111c2611713565b600a8111156111d3576111d3611713565b815260208101919091526040016000205460ff1660048111156111f8576111f8611713565b141561148f5760006002600085600a81111561121657611216611713565b600a81111561122757611227611713565b815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c49190611ada565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600860205260409020549091506112fb9060ff163084610e8b565b8073ffffffffffffffffffffffffffffffffffffffff1663095ea7b36002600087600a81111561132d5761132d611713565b600a81111561133e5761133e611713565b81526020810191909152604090810160002054905160e083901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602481018590526044016020604051808303816000875af11580156113c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e69190611a3b565b506002600085600a8111156113fd576113fd611713565b600a81111561140e5761140e611713565b8152602081019190915260409081016000205490517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810184905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f1990604401600060405180830381600087803b158015610fd857600080fd5b60016003600085600a8111156114a7576114a7611713565b600a8111156114b8576114b8611713565b815260208101919091526040016000205460ff1660048111156114dd576114dd611713565b14156115b4576002600084600a8111156114f9576114f9611713565b600a81111561150a5761150a611713565b8152602081019190915260409081016000205490517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f19906044016020604051808303816000875af1158015611590573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a49190611a3b565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f74657374546f6b656e53756974653a20547279696e6720746f207472616e736660448201527f657220756e6b6e6f776e20746f6b656e000000000000000000000000000000006064820152608401610990565b6002600084600a81111561165257611652611713565b600a81111561166357611663611713565b8152602081019190915260409081016000205490517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490529091169063a9059cbb90604401610a2a565b73ffffffffffffffffffffffffffffffffffffffff811681146116f357600080fd5b50565b60006020828403121561170857600080fd5b8135610881816116d1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60208101600b831061175657611756611713565b91905290565b60006020828403121561176e57600080fd5b5035919050565b8035600b8110610cfb57600080fd5b60006020828403121561179657600080fd5b61088182611775565b60005b838110156117ba5781810151838201526020016117a2565b83811115610a6d5750506000910152565b60208152600082518060208401526117ea81604085016020870161179f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000806080858703121561183257600080fd5b61183b85611775565b9350602085013561184b816116d1565b9250604085013561185b816116d1565b9396929550929360600135925050565b602080825282518282018190526000919060409081850190868401855b828110156118c7578151805173ffffffffffffffffffffffffffffffffffffffff90811686529087015116868501529284019290850190600101611888565b5091979650505050505050565b600080604083850312156118e757600080fd5b6118f083611775565b91506020830135611900816116d1565b809150509250929050565b60008060006060848603121561192057600080fd5b61192984611775565b92506020840135611939816116d1565b91506040840135611949816116d1565b809150509250925092565b60008060006060848603121561196957600080fd5b61197284611775565b92506020840135611982816116d1565b929592945050506040919091013590565b6000806000606084860312156119a857600080fd5b8335611929816116d1565b6000806000606084860312156119c857600080fd5b8335611972816116d1565b602081016005831061175657611756611713565b600181811c908216806119fb57607f821691505b60208210811415611a35577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600060208284031215611a4d57600080fd5b8151801515811461088157600080fd5b600060208284031215611a6f57600080fd5b5051919050565b7fffffffff000000000000000000000000000000000000000000000000000000008316815260008251611ab081600485016020870161179f565b919091016004019392505050565b60008251611ad081846020870161179f565b9190910192915050565b600060208284031215611aec57600080fd5b8151610881816116d156fea264697066735822122010fe735ed069aca27931edce4ba2ff14ec7886bf21b0eea685a884f9200fb49e64736f6c634300080a003360c0604052600d60808190526c2bb930b83832b21022ba3432b960991b60a090815261002e916000919061007a565b50604080518082019091526004808252630ae8aa8960e31b602090920191825261005a9160019161007a565b506002805460ff1916601217905534801561007457600080fd5b5061014e565b82805461008690610113565b90600052602060002090601f0160209004810192826100a857600085556100ee565b82601f106100c157805160ff19168380011785556100ee565b828001600101855582156100ee579182015b828111156100ee5782518255916020019190600101906100d3565b506100fa9291506100fe565b5090565b5b808211156100fa57600081556001016100ff565b600181811c9082168061012757607f821691505b6020821081141561014857634e487b7160e01b600052602260045260246000fd5b50919050565b6109548061015d6000396000f3fe6080604052600436106100cb5760003560e01c806340c10f1911610074578063a9059cbb1161004e578063a9059cbb14610225578063d0e30db014610245578063dd62ed3e1461024d57600080fd5b806340c10f19146101c357806370a08231146101e357806395d89b411461021057600080fd5b806323b872dd116100a557806323b872dd146101575780632e1a7d4d14610177578063313ce5671461019757600080fd5b806306fdde03146100df578063095ea7b31461010a57806318160ddd1461013a57600080fd5b366100da576100d8610285565b005b600080fd5b3480156100eb57600080fd5b506100f46102e0565b6040516101019190610703565b60405180910390f35b34801561011657600080fd5b5061012a61012536600461079f565b61036e565b6040519015158152602001610101565b34801561014657600080fd5b50475b604051908152602001610101565b34801561016357600080fd5b5061012a6101723660046107c9565b6103e7565b34801561018357600080fd5b506100d8610192366004610805565b6105fe565b3480156101a357600080fd5b506002546101b19060ff1681565b60405160ff9091168152602001610101565b3480156101cf57600080fd5b506100d86101de36600461079f565b6106a4565b3480156101ef57600080fd5b506101496101fe36600461081e565b60036020526000908152604090205481565b34801561021c57600080fd5b506100f46106e2565b34801561023157600080fd5b5061012a61024036600461079f565b6106ef565b6100d8610285565b34801561025957600080fd5b50610149610268366004610839565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102a490849061089b565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102ed906108b3565b80601f0160208091040260200160405190810160405280929190818152602001828054610319906108b3565b80156103665780601f1061033b57610100808354040283529160200191610366565b820191906000526020600020905b81548152906001019060200180831161034957829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103d69086815260200190565b60405180910390a350600192915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561041957600080fd5b73ffffffffffffffffffffffffffffffffffffffff8416331480159061048f575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105175773ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020548211156104d157600080fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915281208054849290610511908490610907565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061054c908490610907565b909155505073ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260408120805484929061058690849061089b565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516105ec91815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561061a57600080fd5b3360009081526003602052604081208054839290610639908490610907565b9091555050604051339082156108fc029083906000818181858888f1935050505015801561066b573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260036020526040812080548392906106d990849061089b565b90915550505050565b600180546102ed906108b3565b60006106fc3384846103e7565b9392505050565b600060208083528351808285015260005b8181101561073057858101830151858201604001528201610714565b81811115610742576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461079a57600080fd5b919050565b600080604083850312156107b257600080fd5b6107bb83610776565b946020939093013593505050565b6000806000606084860312156107de57600080fd5b6107e784610776565b92506107f560208501610776565b9150604084013590509250925092565b60006020828403121561081757600080fd5b5035919050565b60006020828403121561083057600080fd5b6106fc82610776565b6000806040838503121561084c57600080fd5b61085583610776565b915061086360208401610776565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156108ae576108ae61086c565b500190565b600181811c908216806108c757607f821691505b60208210811415610901577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000828210156109195761091961086c565b50039056fea26469706673582212206ec943fa4e3b70d8fca6c25b6aa26fa18e8f8952ce3bc4d5afcb443bf3097c0564736f6c634300080a003360806040526000600255600060035534801561001a57600080fd5b506111fa8061002a6000396000f3fe60806040526004361061016e5760003560e01c80637a28fb88116100cb578063bdd17e1c1161007f578063dd62ed3e11610059578063dd62ed3e146103ee578063ee7a7c0414610441578063f5eb42dc1461046157600080fd5b8063bdd17e1c146103ad578063cdb9a21c146103c3578063d5002f2e146103d957600080fd5b8063a1903eab116100b0578063a1903eab1461035a578063a457c2d71461036d578063a9059cbb1461038d57600080fd5b80637a28fb88146102f457806395d89b411461031457600080fd5b806323b872dd1161012257806337cfdaca1161010757806337cfdaca1461020d57806339509351146102b457806370a08231146102d457600080fd5b806323b872dd14610278578063313ce5671461029857600080fd5b806318160ddd1161015357806318160ddd1461020d578063192084511461023057806322301f6e1461025057600080fd5b806306fdde0314610185578063095ea7b3146101dd57600080fd5b366101805761017d6000610481565b50005b600080fd5b34801561019157600080fd5b5060408051808201909152601781527f4c6971756964207374616b656420457468657220322e3000000000000000000060208201525b6040516101d49190610f63565b60405180910390f35b3480156101e957600080fd5b506101fd6101f8366004610fff565b610545565b60405190151581526020016101d4565b34801561021957600080fd5b5061022261055b565b6040519081526020016101d4565b34801561023c57600080fd5b5061022261024b366004611029565b61056b565b34801561025c57600080fd5b5061027661026b366004611042565b600391909155600255565b005b34801561028457600080fd5b506101fd610293366004611064565b6105ab565b3480156102a457600080fd5b50604051601281526020016101d4565b3480156102c057600080fd5b506101fd6102cf366004610fff565b610696565b3480156102e057600080fd5b506102226102ef3660046110a0565b6106d9565b34801561030057600080fd5b5061022261030f366004611029565b61070e565b34801561032057600080fd5b5060408051808201909152600581527f737445544800000000000000000000000000000000000000000000000000000060208201526101c7565b6102226103683660046110a0565b61073a565b34801561037957600080fd5b506101fd610388366004610fff565b610745565b34801561039957600080fd5b506101fd6103a8366004610fff565b6107f9565b3480156103b957600080fd5b5061022260035481565b3480156103cf57600080fd5b5061022260025481565b3480156103e557600080fd5b50610222610806565b3480156103fa57600080fd5b506102226104093660046110bb565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b34801561044d57600080fd5b5061027661045c366004610fff565b610811565b34801561046d57600080fd5b5061022261047c3660046110a0565b61081f565b60003334806104f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f5a45524f5f4445504f534954000000000000000000000000000000000000000060448201526064015b60405180910390fd5b60006104fc8261056b565b9050806105065750805b8160036000828254610518919061111d565b909155506105289050838261084a565b61053383838761093b565b61053d8382610992565b949350505050565b60006105523384846109ea565b50600192915050565b600061056660035490565b905090565b60008061057760035490565b9050806105875750600092915050565b6105a48161059e61059760025490565b8690610b52565b90610b5e565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001602090815260408083203384529091528120548281101561066c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f5452414e534645525f414d4f554e545f455843454544535f414c4c4f57414e4360448201527f450000000000000000000000000000000000000000000000000000000000000060648201526084016104e8565b610677858585610b6a565b61068b85336106868487610bef565b6109ea565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916105529185906106869086610bfb565b73ffffffffffffffffffffffffffffffffffffffff81166000908152602081905260408120546107089061070e565b92915050565b60008061071a60025490565b90508061072a5750600092915050565b6105a48161059e61059760035490565b600061070882610481565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156107e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4445435245415345445f414c4c4f57414e43455f42454c4f575f5a45524f000060448201526064016104e8565b6107ef33856106868487610bef565b5060019392505050565b6000610552338484610b6a565b600061056660025490565b61081b8282610c07565b5050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040812054610708565b73ffffffffffffffffffffffffffffffffffffffff82166108c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4d494e545f544f5f5448455f5a45524f5f41444452455353000000000000000060448201526064016104e8565b80600260008282546108d9919061111d565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205461090e9082610bfb565b73ffffffffffffffffffffffffffffffffffffffff90921660009081526020819052604090209190915550565b6040805183815273ffffffffffffffffffffffffffffffffffffffff83811660208301528516917fed8dd430b1e4bba98e943dc5b157cf7b54d9e12916d6c474ff5733a95001d03b910160405180910390a2505050565b73ffffffffffffffffffffffffffffffffffffffff821660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6109d58461070e565b60405190815260200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff8316610a67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f415050524f56455f46524f4d5f5a45524f5f414444524553530000000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff8216610ae4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f415050524f56455f544f5f5a45524f5f4144445245535300000000000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006105a48284611135565b60006105a48284611172565b6000610b758261056b565b9050610b82848483610d64565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610be191815260200190565b60405180910390a350505050565b60006105a482846111ad565b60006105a4828461111d565b73ffffffffffffffffffffffffffffffffffffffff8216610c84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4255524e5f46524f4d5f5448455f5a45524f5f4144445245535300000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205480821115610d14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4255524e5f414d4f554e545f455843454544535f42414c414e4345000000000060448201526064016104e8565b8160026000828254610d2691906111ad565b90915550610d3690508183610bef565b73ffffffffffffffffffffffffffffffffffffffff9093166000908152602081905260409020929092555050565b73ffffffffffffffffffffffffffffffffffffffff8316610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f5452414e534645525f46524f4d5f5448455f5a45524f5f41444452455353000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff8216610e5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f5452414e534645525f544f5f5448455f5a45524f5f414444524553530000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205480821115610eee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5452414e534645525f414d4f554e545f455843454544535f42414c414e43450060448201526064016104e8565b610ef88183610bef565b73ffffffffffffffffffffffffffffffffffffffff8086166000908152602081905260408082209390935590851681522054610f349083610bfb565b73ffffffffffffffffffffffffffffffffffffffff909316600090815260208190526040902092909255505050565b600060208083528351808285015260005b81811015610f9057858101830151858201604001528201610f74565b81811115610fa2576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ffa57600080fd5b919050565b6000806040838503121561101257600080fd5b61101b83610fd6565b946020939093013593505050565b60006020828403121561103b57600080fd5b5035919050565b6000806040838503121561105557600080fd5b50508035926020909101359150565b60008060006060848603121561107957600080fd5b61108284610fd6565b925061109060208501610fd6565b9150604084013590509250925092565b6000602082840312156110b257600080fd5b6105a482610fd6565b600080604083850312156110ce57600080fd5b6110d783610fd6565b91506110e560208401610fd6565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611130576111306110ee565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561116d5761116d6110ee565b500290565b6000826111a8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000828210156111bf576111bf6110ee565b50039056fea2646970667358221220a5b4f31162ba2b8b3424cef84b31ef91d05a825243602b5fdf758ffb49b8246364736f6c634300080a003360a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a003360c06040523480156200001157600080fd5b506040516200170938038062001709833981016040819052620000349162000266565b8351849084906200004d906003906020850190620000f3565b50805162000063906004906020840190620000f3565b505050620000806200007a6200009d60201b60201c565b620000a1565b60ff9091166080526001600160a01b031660a05250620003479050565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b82805462000101906200030a565b90600052602060002090601f01602090048101928262000125576000855562000170565b82601f106200014057805160ff191683800117855562000170565b8280016001018555821562000170579182015b828111156200017057825182559160200191906001019062000153565b506200017e92915062000182565b5090565b5b808211156200017e576000815560010162000183565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c157600080fd5b81516001600160401b0380821115620001de57620001de62000199565b604051601f8301601f19908116603f0116810190828211818310171562000209576200020962000199565b816040528381526020925086838588010111156200022657600080fd5b600091505b838210156200024a57858201830151818301840152908201906200022b565b838211156200025c5760008385830101525b9695505050505050565b600080600080608085870312156200027d57600080fd5b84516001600160401b03808211156200029557600080fd5b620002a388838901620001af565b95506020870151915080821115620002ba57600080fd5b50620002c987828801620001af565b935050604085015160ff81168114620002e157600080fd5b60608601519092506001600160a01b0381168114620002ff57600080fd5b939692955090935050565b600181811c908216806200031f57607f821691505b602082108114156200034157634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05161138e6200037b600039600081816101f70152818161041f0152610600015260006101a2015261138e6000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80636f307dc3116100b257806395d89b4111610081578063a9059cbb11610066578063a9059cbb146102b5578063dd62ed3e146102c8578063f2fde38b1461030e57600080fd5b806395d89b411461029a578063a457c2d7146102a257600080fd5b80636f307dc3146101f257806370a082311461023e578063715018a6146102745780638da5cb5b1461027c57600080fd5b806323b872dd116100ee57806323b872dd14610188578063313ce5671461019b57806339509351146101cc57806340c10f19146101df57600080fd5b806306fdde0314610120578063095ea7b31461013e57806318160ddd146101615780631e9a695014610173575b600080fd5b610128610321565b604051610135919061112d565b60405180910390f35b61015161014c3660046111c9565b6103b3565b6040519015158152602001610135565b6002545b604051908152602001610135565b6101866101813660046111c9565b6103c9565b005b6101516101963660046111f3565b610491565b60405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610135565b6101516101da3660046111c9565b61057c565b6101866101ed3660046111c9565b6105c5565b6102197f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b61016561024c36600461122f565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610186610691565b60055473ffffffffffffffffffffffffffffffffffffffff16610219565b61012861071e565b6101516102b03660046111c9565b61072d565b6101516102c33660046111c9565b610805565b6101656102d6366004611251565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b61018661031c36600461122f565b610812565b60606003805461033090611284565b80601f016020809104026020016040519081016040528092919081815260200182805461035c90611284565b80156103a95780601f1061037e576101008083540402835291602001916103a9565b820191906000526020600020905b81548152906001019060200180831161038c57829003601f168201915b5050505050905090565b60006103c0338484610942565b50600192915050565b6103d33382610af5565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015610468573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048c91906112d8565b505050565b600061049e848484610ce2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6105718533858403610942565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916103c09185906105c0908690611329565b610942565b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906323b872dd906064016020604051808303816000875af115801561065e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068291906112d8565b5061068d8282610f96565b5050565b60055473ffffffffffffffffffffffffffffffffffffffff163314610712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161055b565b61071c60006110b6565b565b60606004805461033090611284565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156107ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161055b565b6107fb3385858403610942565b5060019392505050565b60006103c0338484610ce2565b60055473ffffffffffffffffffffffffffffffffffffffff163314610893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161055b565b73ffffffffffffffffffffffffffffffffffffffff8116610936576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161055b565b61093f816110b6565b50565b73ffffffffffffffffffffffffffffffffffffffff83166109e4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff8216610a87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8216610b98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015610c4e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290610c8a908490611341565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff8216610e28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610ede576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610f22908490611329565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f8891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161055b565b80600260008282546110259190611329565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152602081905260408120805483929061105f908490611329565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208083528351808285015260005b8181101561115a5785810183015185820160400152820161113e565b8181111561116c576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146111c457600080fd5b919050565b600080604083850312156111dc57600080fd5b6111e5836111a0565b946020939093013593505050565b60008060006060848603121561120857600080fd5b611211846111a0565b925061121f602085016111a0565b9150604084013590509250925092565b60006020828403121561124157600080fd5b61124a826111a0565b9392505050565b6000806040838503121561126457600080fd5b61126d836111a0565b915061127b602084016111a0565b90509250929050565b600181811c9082168061129857607f821691505b602082108114156112d2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156112ea57600080fd5b8151801515811461124a57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561133c5761133c6112fa565b500190565b600082821015611353576113536112fa565b50039056fea26469706673582212203a6db30cd3c097921df4156794aa7973eb848711deeb2cffd7c54a9df1fdb0a564736f6c634300080a003360a060405234801561001057600080fd5b506040516106ca3803806106ca83398101604081905261002f9161006c565b60009190915560ff166080526001805460506001600160501b031991821681179092556004805490911690911790554260028190556003556100a2565b6000806040838503121561007f57600080fd5b82519150602083015160ff8116811461009757600080fd5b809150509250929050565b60805161060e6100bc600039600060d3015261060e6000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80639a6fc8f511610081578063d62ada111161005b578063d62ada11146102dc578063f7a30806146102f4578063feaf968c1461030757600080fd5b80639a6fc8f5146101cd578063bd18ad531461023a578063cd653afc1461024d57600080fd5b806354fd4d50116100b257806354fd4d501461012d57806367e8d83d1461013c5780637284e4161461018e57600080fd5b8063313ce567146100ce5780633fd0875f1461010c575b600080fd5b6100f57f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020015b60405180910390f35b6004546a0100000000000000000000900460ff166040516101039190610441565b60405160018152602001610103565b61018c61014a366004610482565b600480549115156c01000000000000000000000000027fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff909216919091179055565b005b604080518082018252600c81527f7072696365206f7261636c6500000000000000000000000000000000000000006020820152905161010391906104ab565b6102036101db36600461053d565b60015460005460025460035460045469ffffffffffffffffffff948516941691939590929450565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610103565b61018c610248366004610558565b61030f565b61018c61025b366004610579565b6001805469ffffffffffffffffffff9586167fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090911617905560029290925560035560048054919092167fffffffffffffffffffffffffffffffffffffffff00ff00000000000000000000909116176b020000000000000000000000179055565b6102e461035f565b6040519015158152602001610103565b61018c6103023660046105bf565b600055565b610203610385565b600480548291907fffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff166b01000000000000000000000083600281111561035757610357610412565b021790555050565b600454600090610380906b010000000000000000000000900460ff166103d6565b905090565b60008060008060006004600c9054906101000a900460ff16156103a757600080fd5b505060015460005460025460035460045469ffffffffffffffffffff9485169893975091955093509190911690565b600060028260028111156103ec576103ec610412565b14156103f757600080fd5b600182600281111561040b5761040b610412565b1492915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016006831061047c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561049457600080fd5b813580151581146104a457600080fd5b9392505050565b600060208083528351808285015260005b818110156104d8578581018301518582016040015282016104bc565b818111156104ea576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803569ffffffffffffffffffff8116811461053857600080fd5b919050565b60006020828403121561054f57600080fd5b6104a48261051e565b60006020828403121561056a57600080fd5b8135600381106104a457600080fd5b6000806000806080858703121561058f57600080fd5b6105988561051e565b935060208501359250604085013591506105b46060860161051e565b905092959194509250565b6000602082840312156105d157600080fd5b503591905056fea264697066735822122014874f7a973b86501c4c1a8be32490fe902c8f088ee234d25f9b2497e19f9e5264736f6c634300080a003360806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d00011790553480156200003a57600080fd5b5060405162031ed638038062031ed68339810160408190526200005d91620015e8565b81816040516200006d9062001595565b604051809103906000f0801580156200008a573d6000803e3d6000fd5b5050600180546001600160a01b0319166001600160a01b038416908117909155604080516325abd85f60e11b81529051634b57b0be916004808201926020929091908290030181865afa158015620000e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200010c91906200162a565b73c4375b7de8af5a38a93548eb8453a498222c4ff26040516200012f90620015a3565b6001600160a01b03928316815291166020820152604001604051809103906000f08015801562000163573d6000803e3d6000fd5b50600380546001600160a01b0319166001600160a01b039290921691821790556040805163de28735960e01b8152905163de287359916004808201926020929091908290030181865afa158015620001bf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e591906200162a565b604051634910832f60e01b81527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526001600160a01b039190911690634910832f90602401600060405180830381600087803b1580156200023d57600080fd5b505af115801562000252573d6000803e3d6000fd5b50505050600360009054906101000a90046001600160a01b03166001600160a01b031663de2873596040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d091906200162a565b60035460405163f2fde38b60e01b81526001600160a01b03918216600482015291169063f2fde38b90602401600060405180830381600087803b1580156200031757600080fd5b505af11580156200032c573d6000803e3d6000fd5b505060035460015460408051636ca42ae360e01b815290516001600160a01b039384169550638874ff1f94509190921691636ca42ae39160048083019260009291908290030181865afa15801562000388573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620003b29190810190620016c5565b6040518263ffffffff1660e01b8152600401620003d09190620017b6565b600060405180830381600087803b158015620003eb57600080fd5b505af115801562000400573d6000803e3d6000fd5b50505050600360009054906101000a90046001600160a01b03166001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000458573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200047e91906200162a565b600280546001600160a01b0319166001600160a01b039290921691821790556040805163120d150d60e31b81529051639068a868916004808201926020929091908290030181865afa158015620004d9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004ff91906200162a565b600480546001600160a01b0319166001600160a01b0392831617815560025460408051631f94a27560e31b81529051919093169263fca513a892818101926020929091908290030181865afa1580156200055d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200058391906200162a565b600880546001600160a01b0319166001600160a01b0392831617905560025460408051630873769560e01b81529051919092169163087376959160048083019260209291908290030181865afa158015620005e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200060891906200162a565b600780546001600160a01b0319166001600160a01b039283161790556002546040805163c513c9bb60e01b81529051919092169163c513c9bb9160048083019260209291908290030181865afa15801562000667573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200068d91906200162a565b600680546001600160a01b0319166001600160a01b039283161790556001546040516367b4264560e01b81529116906367b4264590620006d29084906004016200184d565b602060405180830381865afa158015620006f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200071691906200162a565b600980546001600160a01b0319166001600160a01b0392831617905560035460408051630a55006360e21b815290519190921691632954018c9160048083019260209291908290030181865afa15801562000775573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200079b91906200162a565b6009546040516001600160a01b0390911690620007b890620015b2565b6001600160a01b03928316815291166020820152604001604051809103906000f080158015620007ec573d6000803e3d6000fd5b50600580546001600160a01b0319166001600160a01b039283169081179091556001549091169063eebab8ef90839062000825620011ec565b6200083290600a62001879565b6040518463ffffffff1660e01b815260040162000852939291906200189b565b600060405180830381600087803b1580156200086d57600080fd5b505af115801562000882573d6000803e3d6000fd5b505060065460055460405163d914cd4b60e01b81526001600160a01b0391821660048201529116925063d914cd4b9150602401600060405180830381600087803b158015620008d057600080fd5b505af1158015620008e5573d6000803e3d6000fd5b5050600f80546001600160801b031916670de0b6b3a76400001790555062000911925050620011ec9050565b6200091e90600a62001879565b600f80546001600160801b03908116600160801b9382168402818117938490556040805160a0810182529184169092178152939092041660208301526000919081016200096b84620012ab565b815260006020820181905260409182018190526005549151929350916001600160a01b039091169083908390620009a290620015c0565b620009b093929190620018c5565b604051809103906000f080158015620009cd573d6000803e3d6000fd5b509050806001600160a01b031663c12c21c06040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a0f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a3591906200162a565b600b60006101000a8154816001600160a01b0302191690836001600160a01b03160217905550806001600160a01b0316632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a9a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ac091906200162a565b600c60006101000a8154816001600160a01b0302191690836001600160a01b03160217905550806001600160a01b031663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000b25573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b4b91906200162a565b600d80546001600160a01b0319166001600160a01b03928316179055600654600b5460405163e26b2f6360e01b8152908316600482015291169063e26b2f6390602401600060405180830381600087803b15801562000ba957600080fd5b505af115801562000bbe573d6000803e3d6000fd5b5050600054600554604080516318caf8e360e31b81526001600160a01b039283166004808301919091526024820192909252604481019190915263141bdbdb60e21b60648201526201000090920416925063c657c7189150608401600060405180830381600087803b15801562000c3457600080fd5b505af115801562000c49573d6000803e3d6000fd5b5050600054600c8054604080516318caf8e360e31b81526001600160a01b039283166004820152602481019190915260448101929092526b43726564697446616361646560a01b606483015262010000909204909116925063c657c7189150608401600060405180830381600087803b15801562000cc657600080fd5b505af115801562000cdb573d6000803e3d6000fd5b5050600054600b54604080516318caf8e360e31b81526001600160a01b0392831660048201526024810191909152600d60448201526c21b932b234ba26b0b730b3b2b960991b60648201526201000090920416925063c657c7189150608401600060405180830381600087803b15801562000d5557600080fd5b505af115801562000d6a573d6000803e3d6000fd5b5050600054600d54604080516318caf8e360e31b81526001600160a01b0392831660048201526024810191909152601260448201527121b932b234ba21b7b73334b3bab930ba37b960711b60648201526201000090920416925063c657c7189150608401600060405180830381600087803b15801562000de957600080fd5b505af115801562000dfe573d6000803e3d6000fd5b50506001546001600160a01b0316915063eebab8ef90508473f39fd6e51aad88f6f4ce6ab8827279cfffb9226662000e35620011ec565b6040518463ffffffff1660e01b815260040162000e55939291906200189b565b600060405180830381600087803b15801562000e7057600080fd5b505af115801562000e85573d6000803e3d6000fd5b50506001546001600160a01b0316915063eebab8ef9050847390f79bf6eb2c4f870365e785982e1f101e93b90662000ebc620011ec565b6040518463ffffffff1660e01b815260040162000edc939291906200189b565b600060405180830381600087803b15801562000ef757600080fd5b505af115801562000f0c573d6000803e3d6000fd5b505060005460405163ca669fa760e01b815273f39fd6e51aad88f6f4ce6ab8827279cfffb922666004820152620100009091046001600160a01b0316925063ca669fa79150602401600060405180830381600087803b15801562000f6f57600080fd5b505af115801562000f84573d6000803e3d6000fd5b5050600954600b5460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529116925063095ea7b391506044016020604051808303816000875af115801562000fdf573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001005919062001989565b5060005460405163ca669fa760e01b81527390f79bf6eb2c4f870365e785982e1f101e93b9066004820152620100009091046001600160a01b03169063ca669fa790602401600060405180830381600087803b1580156200106557600080fd5b505af11580156200107a573d6000803e3d6000fd5b5050600954600b5460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529116925063095ea7b391506044016020604051808303816000875af1158015620010d5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010fb919062001989565b5060025460405163f2fde38b60e01b81527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526001600160a01b039091169063f2fde38b90602401600060405180830381600087803b1580156200115657600080fd5b505af11580156200116b573d6000803e3d6000fd5b505060075460405163f2fde38b60e01b81527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b158015620011c957600080fd5b505af1158015620011de573d6000803e3d6000fd5b5050505050505050620019e1565b600180546040516367b4264560e01b81526000926001600160a01b03909216916367b42645916200122191906004016200184d565b602060405180830381865afa1580156200123f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200126591906200162a565b6009546001600160a01b03908116911614620012955762001290670de0b6b3a764000060c862001879565b905090565b62001290670de0b6b3a7640000614e2062001879565b6040805160c08101825260026080820190815261232860a08301528152815180830183526005815261226060208281019190915282015281518083018352606092600092919082019080600387600a8111156200130c576200130c62001814565b146200131a5760036200131d565b60015b600a81111562001331576200133162001814565b815261206c6020918201529082526040805180820190915260048152611c84818301529101529050612454600a6000858281111562001374576200137462001814565b600a81111562001388576200138862001814565b815260208101919091526040908101600020805461ffff9390931661ffff19909316929092179091558051600480825260a0820190925281816020015b6040805180820190915260008082526020820152815260200190600190039081620013c557905050925060005b818110156200158d57828160048110620014105762001410620019ad565b602002015160200151600a6000858460048110620014325762001432620019ad565b602002015151600a8111156200144c576200144c62001814565b600a81111562001460576200146062001814565b815260208101919091526040908101600020805461ffff191661ffff9390931692909217909155805180820190915260015481906001600160a01b03166367b42645868560048110620014b757620014b7620019ad565b6020020151516040516001600160e01b031960e084901b168152620014e091906004016200184d565b602060405180830381865afa158015620014fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200152491906200162a565b6001600160a01b03168152602001848360048110620015475762001547620019ad565b60200201516020015161ffff168152508482815181106200156c576200156c620019ad565b602002602001018190525080806200158490620019c3565b915050620013f2565b505050919050565b6105e6806200bc5283390190565b62011105806200c23883390190565b6110a7806201d33d83390190565b62013af2806201e3e483390190565b6001600160a01b0381168114620015e557600080fd5b50565b60008060408385031215620015fc57600080fd5b82516200160981620015cf565b6020840151909250600b81106200161f57600080fd5b809150509250929050565b6000602082840312156200163d57600080fd5b81516200164a81620015cf565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156200168c576200168c62001651565b60405290565b604051601f8201601f191681016001600160401b0381118282101715620016bd57620016bd62001651565b604052919050565b60006020808385031215620016d957600080fd5b82516001600160401b0380821115620016f157600080fd5b818501915085601f8301126200170657600080fd5b8151818111156200171b576200171b62001651565b6200172b848260051b0162001692565b818152848101925060069190911b8301840190878211156200174c57600080fd5b928401925b81841015620017ab57604084890312156200176c5760008081fd5b6200177662001667565b84516200178381620015cf565b8152848601516200179481620015cf565b818701528352604093909301929184019162001751565b979650505050505050565b602080825282518282018190526000919060409081850190868401855b828110156200180757815180516001600160a01b0390811686529087015116868501529284019290850190600101620017d3565b5091979650505050505050565b634e487b7160e01b600052602160045260246000fd5b600b81106200184957634e487b7160e01b600052602160045260246000fd5b9052565b602081016200185d82846200182a565b92915050565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161562001896576200189662001863565b500290565b60608101620018ab82866200182a565b6001600160a01b0393909316602082015260400152919050565b6001600160a01b0384811682526060602080840182905285516001600160801b039081169285019290925285810151909116608084015260408086015160a085810152805161010086018190526000949392918301919085906101208801905b808310156200195657845180518816835286015161ffff168683015293850193600192909201919083019062001925565b5060608a01516001600160a01b031660c0890152608090990151151560e088015250909401949094525092949350505050565b6000602082840312156200199c57600080fd5b815180151581146200164a57600080fd5b634e487b7160e01b600052603260045260246000fd5b6000600019821415620019da57620019da62001863565b5060010190565b61a26180620019f16000396000f3fe60806040523480156200001157600080fd5b5060043610620001ad5760003560e01c806362eb33e311620000f5578063ba414fa61162000097578063de287359116200006e578063de2873591462000479578063f9aa028a146200049a578063fa7626d414620004bb57600080fd5b8063ba414fa6146200041c578063c12c21c01462000437578063d46b9330146200045857600080fd5b80637785ff5d11620000cc5780637785ff5d14620003da5780639408b63f14620003e45780639dd55b45146200040557600080fd5b806362eb33e314620003775780636b70b04c14620003985780636f307dc314620003b957600080fd5b80632f7a1881116200015f5780635e813a8b11620001365780635e813a8b146200030c5780635f7c9bd0146200032d57806362186905146200034657600080fd5b80632f7a188114620002be578063406c8e2f14620002df57806354cae56e146200030057600080fd5b80630e42bc5d11620001945780630e42bc5d14620002305780632630c12f14620002565780632954018c146200029d57600080fd5b80630bc772da14620001b25780630c75f80614620001f5575b600080fd5b600f54620001cf906fffffffffffffffffffffffffffffffff1681565b6040516fffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6200021c62000206366004620012dd565b600a6020526000908152604090205461ffff1681565b60405161ffff9091168152602001620001ec565b6200024762000241366004620012dd565b620004c9565b604051620001ec919062001307565b600854620002779073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001620001ec565b600254620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600c54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600154620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200030a6200081f565b005b600454620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200033762000b1a565b604051908152602001620001ec565b600f54620001cf9070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681565b600654620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600554620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600954620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200030a62000c0c565b600e54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200030a6200041636600462001398565b62000fd6565b6200042662001149565b6040519015158152602001620001ec565b600b54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600354620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600754620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600d54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600054620004269060ff1681565b6040805160c08101825260026080820190815261232860a08301528152815180830183526005815261226060208281019190915282015281518083018352606092600092919082019080600387600a8111156200052a576200052a620013c7565b14620005385760036200053b565b60015b600a8111156200054f576200054f620013c7565b815261206c6020918201529082526040805180820190915260048152611c84818301529101529050612454600a60008582811115620005925762000592620013c7565b600a811115620005a657620005a6620013c7565b815260208101919091526040908101600020805461ffff939093167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909316929092179091558051600480825260a0820190925281816020015b60408051808201909152600080825260208201528152602001906001900390816200060057905050925060005b8181101562000817578281600481106200064b576200064b620013f6565b602002015160200151600a60008584600481106200066d576200066d620013f6565b602002015151600a811115620006875762000687620013c7565b600a8111156200069b576200069b620013c7565b81526020810191909152604090810160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff93909316929092179091558051808201909152600154819073ffffffffffffffffffffffffffffffffffffffff166367b426458685600481106200071c576200071c620013f6565b6020020151516040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526200075d919060040162001425565b602060405180830381865afa1580156200077b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007a1919062001467565b73ffffffffffffffffffffffffffffffffffffffff168152602001848360048110620007d157620007d1620013f6565b60200201516020015161ffff16815250848281518110620007f657620007f6620013f6565b602002602001018190525080806200080e90620014b6565b9150506200062d565b505050919050565b6000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16906306447d5690602401600060405180830381600087803b158015620008a457600080fd5b505af1158015620008b9573d6000803e3d6000fd5b5050600b5460405173ffffffffffffffffffffffffffffffffffffffff909116925060009150600190620008ed90620012b3565b73ffffffffffffffffffffffffffffffffffffffff938416815292909116602083015215156040820152606001604051809103906000f08015801562000937573d6000803e3d6000fd5b50600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316908117909155600d546040517f526a41e80000000000000000000000000000000000000000000000000000000081526004810192909252600160248301529091169063526a41e890604401600060405180830381600087803b158015620009dc57600080fd5b505af1158015620009f1573d6000803e3d6000fd5b5050600d5473ffffffffffffffffffffffffffffffffffffffff16915063eb9606df905062000a22426001620014f2565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815264ffffffffff90911660048201526024015b600060405180830381600087803b15801562000a7b57600080fd5b505af115801562000a90573d6000803e3d6000fd5b50505050600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562000aff57600080fd5b505af115801562000b14573d6000803e3d6000fd5b50505050565b600180546040517f67b4264500000000000000000000000000000000000000000000000000000000815260009273ffffffffffffffffffffffffffffffffffffffff909216916367b426459162000b75919060040162001425565b602060405180830381865afa15801562000b93573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000bb9919062001467565b60095473ffffffffffffffffffffffffffffffffffffffff90811691161462000bf65762000bf1670de0b6b3a764000060c86200150d565b905090565b62000bf1670de0b6b3a7640000614e206200150d565b60025460405173ffffffffffffffffffffffffffffffffffffffff9091169062000c3690620012c1565b73ffffffffffffffffffffffffffffffffffffffff90911681526060602082018190526008908201527f446567656e4e4654000000000000000000000000000000000000000000000000608082015260a060408201819052600a908201527f476561722d446567656e0000000000000000000000000000000000000000000060c082015260e001604051809103906000f08015801562000cda573d6000803e3d6000fd5b50600e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283161790556000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015262010000909104909116906306447d5690602401600060405180830381600087803b15801562000d8e57600080fd5b505af115801562000da3573d6000803e3d6000fd5b5050600e546040517ffca3b5aa0000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff909116925063fca3b5aa9150602401600060405180830381600087803b15801562000e2757600080fd5b505af115801562000e3c573d6000803e3d6000fd5b5050600b54600e5460405173ffffffffffffffffffffffffffffffffffffffff92831694509116915060009062000e7390620012b3565b73ffffffffffffffffffffffffffffffffffffffff938416815292909116602083015215156040820152606001604051809103906000f08015801562000ebd573d6000803e3d6000fd5b50600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316908117909155600d546040517f526a41e80000000000000000000000000000000000000000000000000000000081526004810192909252600160248301529091169063526a41e890604401600060405180830381600087803b15801562000f6257600080fd5b505af115801562000f77573d6000803e3d6000fd5b5050600e54600c546040517f4610f6ac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015291169250634610f6ac915060240162000a60565b600081600860405162000fe990620012cf565b91825260ff166020820152604001604051809103906000f08015801562001014573d6000803e3d6000fd5b506000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291925062010000900473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b1580156200109c57600080fd5b505af1158015620010b1573d6000803e3d6000fd5b50506008546040517fe8a97a3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528581166024830152909116925063e8a97a3e9150604401600060405180830381600087803b1580156200112b57600080fd5b505af115801562001140573d6000803e3d6000fd5b50505050505050565b60008054610100900460ff16156200116a5750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620012ae5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000008284015282518083038401815260608301909352600092909162001212917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016200158b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526200124c91620015c9565b6000604051808303816000865af19150503d80600081146200128b576040519150601f19603f3d011682016040523d82523d6000602084013e62001290565b606091505b5091505080806020019051810190620012aa9190620015d7565b9150505b919050565b615e9780620015fc83390190565b6126cf806200749383390190565b6106ca8062009b6283390190565b600060208284031215620012f057600080fd5b8135600b81106200130057600080fd5b9392505050565b602080825282518282018190526000919060409081850190868401855b8281101562001365578151805173ffffffffffffffffffffffffffffffffffffffff16855286015161ffff1686850152928401929085019060010162001324565b5091979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff811681146200139557600080fd5b50565b60008060408385031215620013ac57600080fd5b8235620013b98162001372565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60208101600b831062001461577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000602082840312156200147a57600080fd5b8151620013008162001372565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415620014eb57620014eb62001487565b5060010190565b6000821982111562001508576200150862001487565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562001548576200154862001487565b500290565b6000815160005b8181101562001570576020818501810151868301520162001554565b8181111562001580576000828601525b509290920192915050565b7fffffffff00000000000000000000000000000000000000000000000000000000831681526000620015c160048301846200154d565b949350505050565b60006200130082846200154d565b600060208284031215620015ea57600080fd5b815180151581146200130057600080fdfe6101406040523480156200001257600080fd5b5060405162005e9738038062005e97833981016040819052620000359162000198565b60016000556001600160a01b0383166200006257604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038316608081905260408051636f307dc360e01b81529051636f307dc3916004808201926020929091908290030181865afa158015620000ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d39190620001ea565b6001600160a01b031660a0816001600160a01b031681525050826001600160a01b0316634f0e0ef36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200012b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001519190620001ea565b6001600160a01b0390811660c0529190911660e0819052151561010052151561012052506200020f565b80516001600160a01b03811681146200019357600080fd5b919050565b600080600060608486031215620001ae57600080fd5b620001b9846200017b565b9250620001c9602085016200017b565b915060408401518015158114620001df57600080fd5b809150509250925092565b600060208284031215620001fd57600080fd5b62000208826200017b565b9392505050565b60805160a05160c05160e0516101005161012051615a86620004116000396000818161061101528181612fb5015261481f01526000818161031701528181610dde015281816144f901526146e5015260008181610557015281816146a901526147a901526000818161034b0152818161387d015261392d01526000818161047301528181611bfe0152818161274f0152818161280d0152818161366a01526137dd015260008181610665015281816109d801528181610b0301528181610bd501528181610cdd01528181610e6501528181610fe30152818161114e0152818161120e0152818161132e015281816114510152818161162b01528181611708015281816117e0015281816119e501528181611b1201528181611d9501528181611ed5015281816120040152818161216801528181612290015281816123c601528181612568015281816126390152818161266f0152818161293d01528181612a2101528181612a8a01528181612bde01528181612d2601528181612e6801528181612ec2015281816130a10152818161311b015281816131b401528181613341015281816134c10152818161358a0152818161372f01528181613a1a01528181613b2e01528181613dbb015281816142200152818161432801528181614492015281816148e7015281816149e801528181614aae0152614d8f0152615a866000f3fe6080604052600436106102695760003560e01c8063860aefcf11610153578063c7de38a6116100cb578063dfd594651161007f578063eb9606df11610064578063eb9606df1461081e578063f9eaee0d1461083e578063ffd9b9071461085e57600080fd5b8063dfd59465146107de578063e1f21c67146107fe57600080fd5b8063cff0ab96116100b0578063cff0ab96146106ef578063d9ccbec114610783578063dcf65482146107be57600080fd5b8063c7de38a6146106a7578063caa5c23f146106dc57600080fd5b80639c55a05411610122578063b55bb84b11610107578063b55bb84b14610633578063c12c21c014610653578063c690908a1461068757600080fd5b80639c55a054146105df578063b1836d32146105ff57600080fd5b8063860aefcf146104db5780639408b63f146105455780639b67ab30146105795780639be0536a146105bd57600080fd5b80635d91a0e0116101e65780636d19b486116101b55780637071b7c51161019a5780637071b7c51461049557806379c0ef91146104a857806382871ace146104c857600080fd5b80636d19b486146104415780636f307dc31461046157600080fd5b80635d91a0e0146103e85780635f73fbec146103fb578063601d66f61461040e5780636c8f225d1461042e57600080fd5b80633d9287fa1161023d5780635019e20a116102225780635019e20a1461039257806354fd4d50146103b257806359781034146103d557600080fd5b80633d9287fa146103055780634f0e0ef31461033957600080fd5b8062842b571461026e578063256ac915146102905780632a7ba1f7146102c55780632b7c7b11146102e5575b600080fd5b34801561027a57600080fd5b5061028e6102893660046151bf565b61087e565b005b34801561029c57600080fd5b506102b06102ab3660046151f8565b61098e565b60405190151581526020015b60405180910390f35b3480156102d157600080fd5b5061028e6102e0366004615215565b610a61565b3480156102f157600080fd5b5061028e610300366004615215565b610c3b565b34801561031157600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561034557600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102bc565b34801561039e57600080fd5b5061028e6103ad3660046151f8565b610d6a565b3480156103be57600080fd5b506103c7600281565b6040519081526020016102bc565b61028e6103e336600461522e565b61108c565b61028e6103f63660046152bb565b611275565b61028e610409366004615340565b611589565b34801561041a57600080fd5b5061028e6104293660046153d8565b6117de565b61028e61043c36600461541b565b611900565b34801561044d57600080fd5b506102b061045c3660046151f8565b611c31565b34801561046d57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b61028e6104a336600461546e565b611c60565b3480156104b457600080fd5b5061036d6104c3366004615215565b611f3e565b61028e6104d63660046152bb565b611f4b565b3480156104e757600080fd5b5060025461051c906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041682565b604080516fffffffffffffffffffffffffffffffff9384168152929091166020830152016102bc565b34801561055157600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561058557600080fd5b506004546040805167ffffffffffffffff608084901c1681526fffffffffffffffffffffffffffffffff9092166020830152016102bc565b3480156105c957600080fd5b506105d261227d565b6040516102bc91906154e2565b3480156105eb57600080fd5b5061028e6105fa36600461553c565b61228e565b34801561060b57600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561063f57600080fd5b5061028e61064e3660046151f8565b6123c4565b34801561065f57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561069357600080fd5b5061028e6106a23660046151f8565b6124c6565b3480156106b357600080fd5b506106c76106c23660046151f8565b612668565b604080519283526020830191909152016102bc565b61028e6106ea366004615557565b61289b565b3480156106fb57600080fd5b5060015461074e906fffffffffffffffffffffffffffffffff811690700100000000000000000000000000000000810460ff169071010000000000000000000000000000000000900464ffffffffff1683565b604080516fffffffffffffffffffffffffffffffff9094168452911515602084015264ffffffffff16908201526060016102bc565b34801561078f57600080fd5b506102b061079e366004615599565b600360209081526000928352604080842090915290825290205460ff1681565b3480156107ca57600080fd5b5061028e6107d93660046151f8565b612a88565b3480156107ea57600080fd5b506103c76107f93660046151f8565b612b86565b34801561080a57600080fd5b5061028e61081936600461522e565b612c6d565b34801561082a57600080fd5b5061028e6108393660046155c7565b612ec0565b34801561084a57600080fd5b506102b06108593660046151f8565b613057565b34801561086a57600080fd5b5061028e6108793660046155ee565b6131b2565b600260005414156108f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b6002600090815573ffffffffffffffffffffffffffffffffffffffff8316808252600360209081526040808420338086529083529381902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081527f9b3258bc4904fd6426b99843e206c6c7cdb1fd0f040121c25b71dafbb3851ee0910160405180910390a350506001600055565b6040517f055ee9b500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063055ee9b590602401602060405180830381865afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a43919061560b565b73ffffffffffffffffffffffffffffffffffffffff16141592915050565b60026000541415610ace576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610b5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b83919061560b565b9050610b903382846132eb565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906395373018906024015b600060405180830381600087803b158015610c1a57600080fd5b505af1158015610c2e573d6000803e3d6000fd5b5050600160005550505050565b60026000541415610ca8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610d39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5d919061560b565b9050610b90338284613411565b60026000541415610dd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000557f000000000000000000000000000000000000000000000000000000000000000015610e34576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610ec1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee5919061560b565b33600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915290205490915060ff16610f52576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f5d82613583565b5090508015610f98576040517ff713841e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b15801561102757600080fd5b505af115801561103b573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692503391507f93c70cc9715bef0d83edf2095f3595402279d274f402a73ffc17f1bcb19d863d90600090a35050600160005550565b600260005414156110f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611106613875565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063e958b70490602401602060405180830381865afa158015611197573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bb919061560b565b90506111c9848285856139b7565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401600060405180830381600087803b15801561125257600080fd5b505af1158015611266573d6000803e3d6000fd5b50506001600055505050505050565b600260005414156112e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611375573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611399919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166113e8576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806113f483613583565b915091508161142f576040517f1fdd676f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611437613875565b831561144d5761144d85858b8660016000613ae3565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632362a2d88b600185338e8e8e6040518863ffffffff1660e01b81526004016114b59796959493929190615663565b6020604051808303816000875af11580156114d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f891906156bf565b90508873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f7dfecd8419723a9d3954585a30c2a270165d70aafa146c11c1e1b88ae14390648460405161157091815260200190565b60405180910390a4505060016000555050505050505050565b600260005414156115f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ab919061560b565b90506116b5613875565b81156116cb576116cb8383338460016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d89061174a903390600090819083908d908d908d90600401615663565b6020604051808303816000875af1158015611769573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178d91906156bf565b5060405173ffffffffffffffffffffffffffffffffffffffff87169033907f460ad03b1cf79b1d64d3aefa28475f110ab66e84649c52bb41ed796b9b39198190600090a35050600160005550505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611849573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118d1576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff90811670010000000000000000000000000000000002911617600255565b6002600054141561196d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000908155606461198461ffff851687615707565b61198e9190615744565b9050611999816144f7565b6119a2816145e8565b6119ab84614668565b6119b3613875565b6040517f172c48c7000000000000000000000000000000000000000000000000000000008152600060048201819052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a64919061577f565b61ffff169150611a789050816127106157ae565b611a829083615707565b611a8c8288615707565b11611ac3576040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff86811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611b5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b81919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638587604051611bef92919091825261ffff16602082015260400190565b60405180910390a3611c2386827f00000000000000000000000000000000000000000000000000000000000000008a6139b7565b505060016000555050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526006602052604081205415155b92915050565b60026000541415611ccd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611cdb856144f7565b611ce484614668565b611ced856145e8565b600154700100000000000000000000000000000000900460ff1615611d3e576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d46613875565b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff85811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611de0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e04919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638885604051611e7292919091825261ffff16602082015260400190565b60405180910390a38215611e9057611e908484878460006001613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015611f1957600080fd5b505af1158015611f2d573d6000803e3d6000fd5b505060016000555050505050505050565b6000611c5a60058361480f565b60026000541415611fb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa15801561204b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206f919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166120be576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120c661481b565b6120fc576040517f7e52ccb400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061210782612668565b509050612112613875565b82156121285761212884848a8560016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d8906121aa908c90600290879033908f908f908f90600401615663565b6020604051808303816000875af11580156121c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ed91906156bf565b90508773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167ffada13ff2d5e1a1d9da37ad4a4130893b34e3c69c32b17f87ec31fd661b867078460405161226591815260200190565b60405180910390a45050600160005550505050505050565b6060612289600561486b565b905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612381576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561242f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612453919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146124b7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614878565b5050565b60026000541415612533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156125c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e8919061560b565b90506125f4818361489a565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401610c00565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126fc919061560b565b905060008061270b8387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156127a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127c991906156bf565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015291965061271091851690637afb010490604401602060405180830381865afa158015612863573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061288791906156bf565b6128919190615744565b9350505050915091565b60026000541415612908576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129bd919061560b565b90506129c7613875565b8115612a7e576129dc83833384600080613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015612a6557600080fd5b505af1158015612a79573d6000803e3d6000fd5b505050505b5050600160005550565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612af3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b17919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b7b576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614c92565b600080612b9283612668565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152919350600092507f000000000000000000000000000000000000000000000000000000000000000090911690633192195c906024016040805180830381865afa158015612c26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4a91906157c5565b9150819050612c5b61271084615707565b612c659190615744565b949350505050565b60026000541415612cda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063fdd5764590602401602060405180830381865afa158015612d6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d91919061560b565b73ffffffffffffffffffffffffffffffffffffffff161480612dd7575073ffffffffffffffffffffffffffffffffffffffff831660009081526006602052604090205415155b15612e0e576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612eac57600080fd5b505af1158015611c23573d6000803e3d6000fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f4f919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612fb3576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000061300a576040517f50dd11fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805464ffffffffff90921671010000000000000000000000000000000000027fffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffffff909216919091179055565b6040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063f67c5bd090602401602060405180830381865afa1580156130e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061310c91906156bf565b905080158015906131ab5750807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015613184573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a891906156bf565b16155b9392505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561321d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613241919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146132a5576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018054911515700100000000000000000000000000000000027fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff909216919091179055565b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600060448301819052917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561338c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133b091906156bf565b90506133bb816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f98274bf834d179ee08dc0604071b0dc90b54731bd5f725a5a96a39a86bce025a8360405161340391815260200190565b60405180910390a250505050565b61341a816144f7565b600154700100000000000000000000000000000000900460ff161561346b576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600160448301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561350c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061353091906156bf565b905061353b816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f9cac51154cc0d835e2f9c9d1f59a9344588cee107f4203bf58a8c797e3a58c458360405161340391815260200190565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613617919061560b565b90506000806136268387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156136c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136e491906156bf565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529195506000917f00000000000000000000000000000000000000000000000000000000000000001690633192195c906024016040805180830381865afa158015613775573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061379991906157c5565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350600092506127109187169063f9a6503090604401602060405180830381865afa158015613837573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061385b91906156bf565b6138659190615707565b9092109794965093945050505050565b34156139b5577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156138e357600080fd5b505af11580156138f7573d6000803e3d6000fd5b50506040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201523460248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16935063a9059cbb925060440190506020604051808303816000875af115801561398f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139b391906157e9565b505b565b6139c084614cb4565b6040517f830aa74500000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f0000000000000000000000000000000000000000000000000000000000000000169063830aa74590608401600060405180830381600087803b158015613a5e57600080fd5b505af1158015613a72573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fa32435755c235de2976ed44a75a2f85cb01faf0c894f639fe0c32bb9455fea8f83604051613ad591815260200190565b60405180910390a350505050565b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301523060248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b158015613b7257600080fd5b505af1158015613b86573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff871692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a28460005b8181101561441d5736888883818110613bea57613bea615806565b9050602002810190613bfc9190615835565b90506004613c0d6020830183615873565b90501015613c47576040517fe2b0e50600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b30613c5560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16141561421c578415613ca9576040517f5fb9107f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613cb86020830183615873565b613cc1916158d8565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167f59781034000000000000000000000000000000000000000000000000000000001415613e3c5760008080613d1e6020860186615873565b613d2c916004908290615920565b810190613d39919061522e565b925092509250613e34838c73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614613e2b576040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015613e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e26919061560b565b613e2d565b8b5b84846139b7565b505050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2b7c7b11000000000000000000000000000000000000000000000000000000001415613ec757600194506000613e996020840184615873565b613ea7916004908290615920565b810190613eb49190615215565b9050613ec1898983613411565b50614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2a7ba1f7000000000000000000000000000000000000000000000000000000001415613f80578415613f49576040517fc0b0caa800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613f586020840184615873565b613f66916004908290615920565b810190613f739190615215565b9050613ec18989836132eb565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f233a8caa0000000000000000000000000000000000000000000000000000000014156140e457600080613fda6020850185615873565b613fe8916004908290615920565b810190613ff5919061594a565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c8116600483015292945090925082918416906370a0823190602401602060405180830381865afa158015614069573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061408d91906156bf565b10156140dd576040517fa5ac537300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016108e7565b5050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fc690908a00000000000000000000000000000000000000000000000000000000141561416457600061413d6020840184615873565b61414b916004908290615920565b81019061415891906151f8565b9050613ec1888261489a565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f23e27a640000000000000000000000000000000000000000000000000000000014156141e45760006141bd6020840184615873565b6141cb916004908290615920565b8101906141d891906151f8565b9050613ec18882614d42565b6040517f1e9e7e7a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50614414565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff68754361426760208501856151f8565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156142d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142f4919061560b565b73ffffffffffffffffffffffffffffffffffffffff16148061436d575073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001661435560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16145b156143a4576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6144126143b46020830183615873565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506143f69250505060208401846151f8565b73ffffffffffffffffffffffffffffffffffffffff1690614e39565b505b50600101613bcf565b506040517f60c8e8938c9a0c0d88a98d6f1c562ce68077e12bf3edb8047378f2f736cb45b490600090a16040517fe1998cf900000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff86811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b1580156144d657600080fd5b505af11580156144ea573d6000803e3d6000fd5b5050505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006139b3576001546fffffffffffffffffffffffffffffffff9081169081146124c257600454608081901c906fffffffffffffffffffffffffffffffff16600067ffffffffffffffff8316431461456e578461458a565b61458a6fffffffffffffffffffffffffffffffff831686615976565b9050838111156145c6576040517f675f1a5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff81164360801b176004555050505050565b6002546fffffffffffffffffffffffffffffffff16811080614631575060025470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681115b156139b3576040517fce16799400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61467061481b565b156146a7576040517f63fc31c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1615614806577f0000000000000000000000000000000000000000000000000000000000000000801561472657503373ffffffffffffffffffffffffffffffffffffffff821614155b1561475d576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600160248301527f00000000000000000000000000000000000000000000000000000000000000001690639dc29fac90604401600060405180830381600087803b1580156147ed57600080fd5b505af1158015614801573d6000803e3d6000fd5b505050505b6139b381614cb4565b60006131ab8383614e7b565b60007f0000000000000000000000000000000000000000000000000000000000000000801561228957505060015471010000000000000000000000000000000000900464ffffffffff1642101590565b606060006131ab83614ea5565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f01565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561492b57600080fd5b505af115801561493f573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527fdf498aa1c340e992665d6fb4f3be8436d452c45a630cb6d7fab7963da39bac8793500190505b60405180910390a15050565b6040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600091829160019183917f00000000000000000000000000000000000000000000000000000000000000001690638991b2f190602401602060405180830381865afa158015614a2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a5391906156bf565b90505b808211614c895780821615614c7d576040517fe75538c700000000000000000000000000000000000000000000000000000000815260048101839052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e75538c7906024016040805180830381865afa158015614af4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b18919061577f565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529294509092506000918416906370a0823190602401602060405180830381865afa158015614b8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bb191906156bf565b90506001811115614c79576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff8481166024830152600091908b169063f9a6503090604401602060405180830381865afa158015614c33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c5791906156bf565b978801979050614c6b61ffff841682615707565b614c759088615976565b9650505b5050505b600182901b9150614a56565b50509250929050565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f50565b3373ffffffffffffffffffffffffffffffffffffffff821614801590614d0b575033600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16155b156139b3576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b158015614dd357600080fd5b505af1158015614de7573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527f69db9e9764da61b6681b89fb0f5be018506e0342036e56b59c3015a620d60977935001905061498d565b60606131ab83836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250615043565b6000826000018281548110614e9257614e92615806565b9060005260206000200154905092915050565b606081600001805480602002602001604051908101604052809291908181526020018280548015614ef557602002820191906000526020600020905b815481526020019060010190808311614ee1575b50505050509050919050565b6000818152600183016020526040812054614f4857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611c5a565b506000611c5a565b60008181526001830160205260408120548015615039576000614f746001836157ae565b8554909150600090614f88906001906157ae565b9050818114614fed576000866000018281548110614fa857614fa8615806565b9060005260206000200154905080876000018481548110614fcb57614fcb615806565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080614ffe57614ffe61598e565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611c5a565b6000915050611c5a565b6060612c65848460008585843b6150b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108e7565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516150df91906159ed565b60006040518083038185875af1925050503d806000811461511c576040519150601f19603f3d011682016040523d82523d6000602084013e615121565b606091505b509150915061513182828661513c565b979650505050505050565b6060831561514b5750816131ab565b82511561515b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e791906159ff565b73ffffffffffffffffffffffffffffffffffffffff811681146139b357600080fd5b80151581146139b357600080fd5b600080604083850312156151d257600080fd5b82356151dd8161518f565b915060208301356151ed816151b1565b809150509250929050565b60006020828403121561520a57600080fd5b81356131ab8161518f565b60006020828403121561522757600080fd5b5035919050565b60008060006060848603121561524357600080fd5b833561524e8161518f565b9250602084013561525e8161518f565b929592945050506040919091013590565b60008083601f84011261528157600080fd5b50813567ffffffffffffffff81111561529957600080fd5b6020830191508360208260051b85010111156152b457600080fd5b9250929050565b60008060008060008060a087890312156152d457600080fd5b86356152df8161518f565b955060208701356152ef8161518f565b9450604087013593506060870135615306816151b1565b9250608087013567ffffffffffffffff81111561532257600080fd5b61532e89828a0161526f565b979a9699509497509295939492505050565b60008060008060006080868803121561535857600080fd5b85356153638161518f565b945060208601359350604086013561537a816151b1565b9250606086013567ffffffffffffffff81111561539657600080fd5b6153a28882890161526f565b969995985093965092949392505050565b80356fffffffffffffffffffffffffffffffff811681146153d357600080fd5b919050565b600080604083850312156153eb57600080fd5b6153f4836153b3565b9150615402602084016153b3565b90509250929050565b61ffff811681146139b357600080fd5b6000806000806080858703121561543157600080fd5b8435935060208501356154438161518f565b925060408501356154538161540b565b915060608501356154638161540b565b939692955090935050565b60008060008060006080868803121561548657600080fd5b8535945060208601356154988161518f565b9350604086013567ffffffffffffffff8111156154b457600080fd5b6154c08882890161526f565b90945092505060608601356154d48161540b565b809150509295509295909350565b6020808252825182820181905260009190848201906040850190845b8181101561553057835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016154fe565b50909695505050505050565b60006020828403121561554e57600080fd5b6131ab826153b3565b6000806020838503121561556a57600080fd5b823567ffffffffffffffff81111561558157600080fd5b61558d8582860161526f565b90969095509350505050565b600080604083850312156155ac57600080fd5b82356155b78161518f565b915060208301356151ed8161518f565b6000602082840312156155d957600080fd5b813564ffffffffff811681146131ab57600080fd5b60006020828403121561560057600080fd5b81356131ab816151b1565b60006020828403121561561d57600080fd5b81516131ab8161518f565b6003811061565f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b73ffffffffffffffffffffffffffffffffffffffff888116825260e082019061568f602084018a615628565b6040830197909752948616606082015292909416608083015260a082015291151560c09092019190915292915050565b6000602082840312156156d157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561573f5761573f6156d8565b500290565b60008261577a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000806040838503121561579257600080fd5b825161579d8161518f565b60208401519092506151ed8161540b565b6000828210156157c0576157c06156d8565b500390565b600080604083850312156157d857600080fd5b505080516020909101519092909150565b6000602082840312156157fb57600080fd5b81516131ab816151b1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc183360301811261586957600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126158a857600080fd5b83018035915067ffffffffffffffff8211156158c357600080fd5b6020019150368190038213156152b457600080fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156159185780818660040360031b1b83161692505b505092915050565b6000808585111561593057600080fd5b8386111561593d57600080fd5b5050820193919092039150565b6000806040838503121561595d57600080fd5b82356159688161518f565b946020939093013593505050565b60008219821115615989576159896156d8565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60005b838110156159d85781810151838201526020016159c0565b838111156159e7576000848401525b50505050565b600082516158698184602087016159bd565b6020815260008251806020840152615a1e8160408501602087016159bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea2646970667358221220a3f4a705ab580a6ada1e438cd2ee4abc001b62d1d171fce12c41994900fef21664736f6c634300080a003360c06040523480156200001157600080fd5b50604051620026cf380380620026cf833981016040819052620000349162000324565b82828281600090805190602001906200004f92919062000194565b5080516200006590600190602084019062000194565b50506006805460ff19169055506001600160a01b0381166200009a57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000d9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ff9190620003a1565b6001600160a01b03166080816001600160a01b03168152505050826001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000158573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200017e9190620003a1565b6001600160a01b031660a0525062000403915050565b828054620001a290620003c6565b90600052602060002090601f016020900481019282620001c6576000855562000211565b82601f10620001e157805160ff191683800117855562000211565b8280016001018555821562000211579182015b8281111562000211578251825591602001919060010190620001f4565b506200021f92915062000223565b5090565b5b808211156200021f576000815560010162000224565b80516001600160a01b03811681146200025257600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200027f57600080fd5b81516001600160401b03808211156200029c576200029c62000257565b604051601f8301601f19908116603f01168101908282118183101715620002c757620002c762000257565b81604052838152602092508683858801011115620002e457600080fd5b600091505b83821015620003085785820183015181830184015290820190620002e9565b838211156200031a5760008385830101525b9695505050505050565b6000806000606084860312156200033a57600080fd5b62000345846200023a565b60208501519093506001600160401b03808211156200036357600080fd5b62000371878388016200026d565b935060408601519150808211156200038857600080fd5b5062000397868287016200026d565b9150509250925092565b600060208284031215620003b457600080fd5b620003bf826200023a565b9392505050565b600181811c90821680620003db57607f821691505b60208210811415620003fd57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a0516122756200045a6000396000610a9a015260008181610386015281816106db0152818161089101528181610f15015281816110010152818161115b015281816112f401526114f901526122756000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80636352211e116100f9578063a0bcfc7f11610097578063b88d4fde11610071578063b88d4fde146103a8578063c87b56dd146103b6578063e985e9c5146103c9578063fca3b5aa1461041257600080fd5b8063a0bcfc7f14610360578063a22cb46514610373578063a50cf2c81461038157600080fd5b80638456cb59116100d35780638456cb591461032a57806389406ff51461033257806395d89b41146103455780639dc29fac1461034d57600080fd5b80636352211e146102fc5780636c0360eb1461030f57806370a082311461031757600080fd5b80633f4ba83a116101665780634610f6ac116101405780634610f6ac146102b357806354fd4d50146102c6578063576cd2d1146102ce5780635c975abb146102f157600080fd5b80633f4ba83a1461029857806340c10f19146102a057806342842e0e1461028a57600080fd5b8063081812fc116101a2578063081812fc1461024b578063095ea7b31461025e57806318160ddd1461027357806323b872dd1461028a57600080fd5b806301ffc9a7146101c957806306fdde03146101f15780630754617214610206575b600080fd5b6101dc6101d7366004611cc6565b610425565b60405190151581526020015b60405180910390f35b6101f961050a565b6040516101e89190611d38565b6008546102269073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e8565b610226610259366004611d89565b61059c565b61027161026c366004611dc7565b61067b565b005b61027c60075481565b6040519081526020016101e8565b61027161026c366004611df3565b6102716106ad565b6102716102ae366004611dc7565b61079b565b6102716102c1366004611e34565b610863565b61027c600181565b6101dc6102dc366004611e34565b60096020526000908152604090205460ff1681565b60065460ff166101dc565b61022661030a366004611d89565b610cd9565b6101f9610d8b565b61027c610325366004611e34565b610e19565b610271610ee7565b610271610340366004611e34565b610fd3565b6101f9611103565b61027161035b366004611dc7565b611112565b61027161036e366004611e51565b6112c6565b61027161026c366004611ed1565b6102267f000000000000000000000000000000000000000000000000000000000000000081565b61027161026c366004611f39565b6101f96103c4366004611d89565b6113bb565b6101dc6103d7366004612037565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205460ff1690565b610271610420366004611e34565b6114cb565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd0000000000000000000000000000000000000000000000000000000014806104b857507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061050457507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60606000805461051990612065565b80601f016020809104026020016040519081016040528092919081815260200182805461054590612065565b80156105925780601f1061056757610100808354040283529160200191610592565b820191906000526020600020905b81548152906001019060200180831161057557829003601f168201915b5050505050905090565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff16610652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084015b60405180910390fd5b5060009081526004602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b6040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa158015610737573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075b91906120b9565b610791576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107996115f6565b565b60085473ffffffffffffffffffffffffffffffffffffffff1633146107ec576040517f5c2967f500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006107f783610e19565b905060005b82811015610846576000816108278473ffffffffffffffffffffffffffffffffffffffff8816612105565b6108319190612105565b905061083d85826116d7565b506001016107fc565b5081600760008282546108599190612105565b9091555050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156108ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091191906120b9565b610947576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163b610995576040517f9c01f6a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff1663c12c21c06040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610a1c575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610a199181019061211d565b60015b610a52576040517f9c01f6a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f6fbc6f6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192507f000000000000000000000000000000000000000000000000000000000000000090911690636fbc6f6b90602401602060405180830381865afa158015610ae3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0791906120b9565b1580610bad57503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16639408b63f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b94919061211d565b73ffffffffffffffffffffffffffffffffffffffff1614155b80610c5257508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c39919061211d565b73ffffffffffffffffffffffffffffffffffffffff1614155b15610c89576040517f9c01f6a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff16600090815260096020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff1680610504576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e00000000000000000000000000000000000000000000006064820152608401610649565b600a8054610d9890612065565b80601f0160208091040260200160405190810160405280929190818152602001828054610dc490612065565b8015610e115780601f10610de657610100808354040283529160200191610e11565b820191906000526020600020905b815481529060010190602001808311610df457829003601f168201915b505050505081565b600073ffffffffffffffffffffffffffffffffffffffff8216610ebe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152608401610649565b5073ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015610f71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9591906120b9565b610fcb576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610799611899565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561105d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108191906120b9565b6110b7576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff16600090815260096020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b60606001805461051990612065565b3360009081526009602052604090205460ff161580156111dd57506040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156111b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111db91906120b9565b155b15611214576040517f1e0d048500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061121f83610e19565b90508181101561125b576040517f90c9142d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b828110156112b357600060018261128b8573ffffffffffffffffffffffffffffffffffffffff8916612105565b611295919061213a565b61129f919061213a565b90506112aa81611959565b5060010161125e565b508160076000828254610859919061213a565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611350573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137491906120b9565b6113aa576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113b6600a8383611c0f565b505050565b60008181526002602052604090205460609073ffffffffffffffffffffffffffffffffffffffff1661146f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006064820152608401610649565b6000611479611a26565b9050600081511161149957604051806020016040528060008152506114c4565b806114a384611a35565b6040516020016114b4929190612151565b6040516020818303038152906040525b9392505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611555573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157991906120b9565b6115af576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60065460ff16611662576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610649565b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b73ffffffffffffffffffffffffffffffffffffffff8216611754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610649565b60008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff16156117e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610649565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805460019290611816908490612105565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60065460ff1615611906576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610649565b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586116ad3390565b600061196482610cd9565b9050611971600083611b6f565b73ffffffffffffffffffffffffffffffffffffffff811660009081526003602052604081208054600192906119a790849061213a565b909155505060008281526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555183919073ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6060600a805461051990612065565b606081611a7557505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611a9f5780611a8981612180565b9150611a989050600a836121e8565b9150611a79565b60008167ffffffffffffffff811115611aba57611aba611f0a565b6040519080825280601f01601f191660200182016040528015611ae4576020820181803683370190505b5090505b8415611b6757611af960018361213a565b9150611b06600a866121fc565b611b11906030612105565b60f81b818381518110611b2657611b26612210565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611b60600a866121e8565b9450611ae8565b949350505050565b600081815260046020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091558190611bc982610cd9565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b828054611c1b90612065565b90600052602060002090601f016020900481019282611c3d5760008555611ca1565b82601f10611c74578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00823516178555611ca1565b82800160010185558215611ca1579182015b82811115611ca1578235825591602001919060010190611c86565b50611cad929150611cb1565b5090565b5b80821115611cad5760008155600101611cb2565b600060208284031215611cd857600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146114c457600080fd5b60005b83811015611d23578181015183820152602001611d0b565b83811115611d32576000848401525b50505050565b6020815260008251806020840152611d57816040850160208701611d08565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b600060208284031215611d9b57600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff81168114611dc457600080fd5b50565b60008060408385031215611dda57600080fd5b8235611de581611da2565b946020939093013593505050565b600080600060608486031215611e0857600080fd5b8335611e1381611da2565b92506020840135611e2381611da2565b929592945050506040919091013590565b600060208284031215611e4657600080fd5b81356114c481611da2565b60008060208385031215611e6457600080fd5b823567ffffffffffffffff80821115611e7c57600080fd5b818501915085601f830112611e9057600080fd5b813581811115611e9f57600080fd5b866020828501011115611eb157600080fd5b60209290920196919550909350505050565b8015158114611dc457600080fd5b60008060408385031215611ee457600080fd5b8235611eef81611da2565b91506020830135611eff81611ec3565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060008060808587031215611f4f57600080fd5b8435611f5a81611da2565b93506020850135611f6a81611da2565b925060408501359150606085013567ffffffffffffffff80821115611f8e57600080fd5b818701915087601f830112611fa257600080fd5b813581811115611fb457611fb4611f0a565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715611ffa57611ffa611f0a565b816040528281528a602084870101111561201357600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000806040838503121561204a57600080fd5b823561205581611da2565b91506020830135611eff81611da2565b600181811c9082168061207957607f821691505b602082108114156120b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156120cb57600080fd5b81516114c481611ec3565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115612118576121186120d6565b500190565b60006020828403121561212f57600080fd5b81516114c481611da2565b60008282101561214c5761214c6120d6565b500390565b60008351612163818460208801611d08565b835190830190612177818360208801611d08565b01949350505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156121b2576121b26120d6565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826121f7576121f76121b9565b500490565b60008261220b5761220b6121b9565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea2646970667358221220ffdd83a2fc9a158347ca248f021e63fcef3a7985b3deb793f75cd1835b068aab64736f6c634300080a003360a060405234801561001057600080fd5b506040516106ca3803806106ca83398101604081905261002f9161006c565b60009190915560ff166080526001805460506001600160501b031991821681179092556004805490911690911790554260028190556003556100a2565b6000806040838503121561007f57600080fd5b82519150602083015160ff8116811461009757600080fd5b809150509250929050565b60805161060e6100bc600039600060d3015261060e6000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80639a6fc8f511610081578063d62ada111161005b578063d62ada11146102dc578063f7a30806146102f4578063feaf968c1461030757600080fd5b80639a6fc8f5146101cd578063bd18ad531461023a578063cd653afc1461024d57600080fd5b806354fd4d50116100b257806354fd4d501461012d57806367e8d83d1461013c5780637284e4161461018e57600080fd5b8063313ce567146100ce5780633fd0875f1461010c575b600080fd5b6100f57f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020015b60405180910390f35b6004546a0100000000000000000000900460ff166040516101039190610441565b60405160018152602001610103565b61018c61014a366004610482565b600480549115156c01000000000000000000000000027fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff909216919091179055565b005b604080518082018252600c81527f7072696365206f7261636c6500000000000000000000000000000000000000006020820152905161010391906104ab565b6102036101db36600461053d565b60015460005460025460035460045469ffffffffffffffffffff948516941691939590929450565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610103565b61018c610248366004610558565b61030f565b61018c61025b366004610579565b6001805469ffffffffffffffffffff9586167fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090911617905560029290925560035560048054919092167fffffffffffffffffffffffffffffffffffffffff00ff00000000000000000000909116176b020000000000000000000000179055565b6102e461035f565b6040519015158152602001610103565b61018c6103023660046105bf565b600055565b610203610385565b600480548291907fffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff166b01000000000000000000000083600281111561035757610357610412565b021790555050565b600454600090610380906b010000000000000000000000900460ff166103d6565b905090565b60008060008060006004600c9054906101000a900460ff16156103a757600080fd5b505060015460005460025460035460045469ffffffffffffffffffff9485169893975091955093509190911690565b600060028260028111156103ec576103ec610412565b14156103f757600080fd5b600182600281111561040b5761040b610412565b1492915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016006831061047c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561049457600080fd5b813580151581146104a457600080fd5b9392505050565b600060208083528351808285015260005b818110156104d8578581018301518582016040015282016104bc565b818111156104ea576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803569ffffffffffffffffffff8116811461053857600080fd5b919050565b60006020828403121561054f57600080fd5b6104a48261051e565b60006020828403121561056a57600080fd5b8135600381106104a457600080fd5b6000806000806080858703121561058f57600080fd5b6105988561051e565b935060208501359250604085013591506105b46060860161051e565b905092959194509250565b6000602082840312156105d157600080fd5b503591905056fea264697066735822122014874f7a973b86501c4c1a8be32490fe902c8f088ee234d25f9b2497e19f9e5264736f6c634300080a0033a2646970667358221220d8fdaadc825c43ac2783715ebcfe33e7b0ce3a396ac7717d65e4c95e98b6cf7f64736f6c634300080a003360806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d000117905534801561003957600080fd5b50600054604080516318caf8e360e31b815273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660048083019190915260248201929092526044810191909152632aa9a2a960e11b6064820152620100009091046001600160a01b03169063c657c71890608401600060405180830381600087803b1580156100ba57600080fd5b505af11580156100ce573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b81527390f79bf6eb2c4f870365e785982e1f101e93b90660048201526024810191909152600660448201526511949251539160d21b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561014f57600080fd5b505af1158015610163573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b8152733c44cdddb6a900fa2b585dd299e03d12fa4293bc60048201526024810191909152600a6044820152692624a8aaa4a220aa27a960b11b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b1580156101e857600080fd5b505af11580156101fc573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b815273c4375b7de8af5a38a93548eb8453a498222c4ff260048201526024810191909152600c60448201526b44554d425f4144445245535360a01b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561028357600080fd5b505af1158015610297573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b8152739965507d1a55bcc2695c58ba16fb37d819b0a4dc60048201526024810191909152600760448201526620a220a82a22a960c91b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561031957600080fd5b505af115801561032d573d6000803e3d6000fd5b505050506102a6806103406000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063ba414fa61461003b578063fa7626d414610057575b600080fd5b610043610064565b604051901515815260200160405180910390f35b6000546100439060ff1681565b60008054610100900460ff16156100845750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156101bf5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610129917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016101ff565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526101619161023b565b6000604051808303816000865af19150503d806000811461019e576040519150601f19603f3d011682016040523d82523d6000602084013e6101a3565b606091505b50915050808060200190518101906101bb919061024e565b9150505b919050565b6000815160005b818110156101e557602081850181015186830152016101cb565b818111156101f4576000828601525b509290920192915050565b7fffffffff0000000000000000000000000000000000000000000000000000000083168152600061023360048301846101c4565b949350505050565b600061024782846101c4565b9392505050565b60006020828403121561026057600080fd5b8151801515811461024757600080fdfea2646970667358221220293f55a0ef7b60c31a89dbc50e3339c80a8fdb1f9567614b200e97598226671f64736f6c634300080a003360806040523480156200001157600080fd5b506040516201110538038062011105833981016040819052620000349162000811565b6200003f3362000734565b6040516200004d9062000784565b604051809103906000f0801580156200006a573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b039283169081179091556040516310dc138160e31b81529184166004830152906386e09c0890602401600060405180830381600087803b158015620000c457600080fd5b505af1158015620000d9573d6000803e3d6000fd5b50506001546040516301ed651160e41b81526001600160a01b0385811660048301529091169250631ed651109150602401600060405180830381600087803b1580156200012557600080fd5b505af11580156200013a573d6000803e3d6000fd5b505050506040516200014c9062000792565b604051809103906000f08015801562000169573d6000803e3d6000fd5b50600280546001600160a01b0319166001600160a01b039283169081179091556001546040516376aad60560e01b81526004810192909252909116906376aad60590602401600060405180830381600087803b158015620001c957600080fd5b505af1158015620001de573d6000803e3d6000fd5b5050600154604051600093506001600160a01b0390911691506200020290620007a0565b6001600160a01b039091168152602001604051809103906000f0801580156200022f573d6000803e3d6000fd5b5060015460405163338f12b960e21b81526001600160a01b03808416600483015292935091169063ce3c4ae490602401600060405180830381600087803b1580156200027a57600080fd5b505af11580156200028f573d6000803e3d6000fd5b5050600154604051600093506001600160a01b039091169150620002b390620007ae565b6001600160a01b039091168152602001604051809103906000f080158015620002e0573d6000803e3d6000fd5b5060015460405163c5120b3960e01b81526001600160a01b03808416600483015292935091169063c5120b3990602401600060405180830381600087803b1580156200032b57600080fd5b505af115801562000340573d6000803e3d6000fd5b5050600154604051606093506001600160a01b03909116915082906200036690620007bc565b6200037392919062000849565b604051809103906000f08015801562000390573d6000803e3d6000fd5b50600380546001600160a01b0319166001600160a01b0392831690811790915560015460405163530e784f60e01b815260048101929092529091169063530e784f90602401600060405180830381600087803b158015620003f057600080fd5b505af115801562000405573d6000803e3d6000fd5b5050600154604051600093506001600160a01b0390911691506200042990620007ca565b6001600160a01b039091168152602001604051809103906000f08015801562000456573d6000803e3d6000fd5b506001546040516356ee0d3b60e11b81526001600160a01b03808416600483015292935091169063addc1a7690602401600060405180830381600087803b158015620004a157600080fd5b505af1158015620004b6573d6000803e3d6000fd5b5050600154604051600093506001600160a01b039091169150620004da90620007d8565b6001600160a01b039091168152602001604051809103906000f08015801562000507573d6000803e3d6000fd5b506001546040516321da583760e01b81526001600160a01b0380841660048301529293509116906321da583790602401600060405180830381600087803b1580156200055257600080fd5b505af115801562000567573d6000803e3d6000fd5b505050506000306040516200057c90620007e6565b6001600160a01b039091168152602001604051809103906000f080158015620005a9573d6000803e3d6000fd5b50600154604051631795d5b360e31b81526001600160a01b03808416600483015292935091169063bcaead9890602401600060405180830381600087803b158015620005f457600080fd5b505af115801562000609573d6000803e3d6000fd5b505060405163f2fde38b60e01b81523360048201526001600160a01b038416925063f2fde38b9150602401600060405180830381600087803b1580156200064f57600080fd5b505af115801562000664573d6000803e3d6000fd5b505060015460405163f2fde38b60e01b81523360048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b158015620006ae57600080fd5b505af1158015620006c3573d6000803e3d6000fd5b505060025460405163f2fde38b60e01b81523360048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b1580156200070d57600080fd5b505af115801562000722573d6000803e3d6000fd5b505050505050505050505050620008b2565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610fcd80620010dd83390190565b61098c80620020aa83390190565b610f508062002a3683390190565b614da6806200398683390190565b611b45806200872c83390190565b612ced806200a27183390190565b611627806200cf5e83390190565b612b80806200e58583390190565b80516001600160a01b03811681146200080c57600080fd5b919050565b600080604083850312156200082557600080fd5b6200083083620007f4565b91506200084060208401620007f4565b90509250929050565b6001600160a01b0383811682526040602080840182905284518483018190526000938683019290916060870190865b81811015620008a3578551805186168452840151851684840152948301949186019160010162000878565b50909998505050505050505050565b61081b80620008c26000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80638874ff1f1161005b5780638874ff1f146100f55780638da5cb5b14610108578063de28735914610126578063f2fde38b1461014657600080fd5b80632630c12f146100825780632954018c146100cb578063715018a6146100eb575b600080fd5b6003546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6001546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b6100f3610159565b005b6100f3610103366004610658565b6101eb565b60005473ffffffffffffffffffffffffffffffffffffffff166100a2565b6002546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b6100f3610154366004610734565b6103e3565b60005473ffffffffffffffffffffffffffffffffffffffff1633146101df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6101e96000610513565b565b60005473ffffffffffffffffffffffffffffffffffffffff16331461026c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101d6565b60005b815181101561035c57600354825173ffffffffffffffffffffffffffffffffffffffff9091169063e8a97a3e908490849081106102ae576102ae610756565b6020026020010151600001518484815181106102cc576102cc610756565b6020026020010151602001516040518363ffffffff1660e01b815260040161031792919073ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b600060405180830381600087803b15801561033157600080fd5b505af1158015610345573d6000803e3d6000fd5b50505050808061035490610785565b91505061026f565b506002546040517ff2fde38b00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063f2fde38b90602401600060405180830381600087803b1580156103c857600080fd5b505af11580156103dc573d6000803e3d6000fd5b5050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101d6565b73ffffffffffffffffffffffffffffffffffffffff8116610507576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016101d6565b61051081610513565b50565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156105da576105da610588565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561062757610627610588565b604052919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461065357600080fd5b919050565b6000602080838503121561066b57600080fd5b823567ffffffffffffffff8082111561068357600080fd5b818501915085601f83011261069757600080fd5b8135818111156106a9576106a9610588565b6106b7848260051b016105e0565b818152848101925060069190911b8301840190878211156106d757600080fd5b928401925b8184101561072957604084890312156106f55760008081fd5b6106fd6105b7565b6107068561062f565b815261071386860161062f565b81870152835260409390930192918401916106dc565b979650505050505050565b60006020828403121561074657600080fd5b61074f8261062f565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156107de577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea26469706673582212205ee75e57bb635aa49a1758f4ab0b04182a73115bff08f420c56a8ddb433c029364736f6c634300080a0033608060405234801561001057600080fd5b5061001a3361005f565b60405130906f20a2222922a9a9afa82927ab24a222a960811b907fb37614c7d254ea8d16eb81fa11dddaeb266aa8ba4917980859c7740aff30c69190600090a36100af565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610f0f806100be6000396000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c806377532ed9116100e3578063bcaead981161008c578063ce3c4ae411610066578063ce3c4ae414610308578063f2fde38b1461031b578063fca513a81461032e57600080fd5b8063bcaead98146102da578063c5120b39146102ed578063c513c9bb1461030057600080fd5b80639068a868116100bd5780639068a868146102b7578063addc1a76146102bf578063affd9243146102d257600080fd5b806377532ed91461027e57806386e09c08146102865780638da5cb5b1461029957600080fd5b80634c252f9111610145578063699f200f1161011f578063699f200f1461022d578063715018a61461026357806376aad6051461026b57600080fd5b80634c252f91146101fc578063530e784f1461020457806354fd4d501461021757600080fd5b80631ed65110116101765780631ed65110146101cc57806321da5837146101e157806326c74fc3146101f457600080fd5b8063060678c21461019257806308737695146101c4575b600080fd5b61019a610336565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61019a610366565b6101df6101da366004610e10565b610391565b005b6101df6101ef366004610e10565b610444565b61019a6104ef565b61019a61051a565b6101df610212366004610e10565b610545565b61021f600281565b6040519081526020016101bb565b61019a61023b366004610e4d565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6101df6105f0565b6101df610279366004610e10565b61067d565b61019a610728565b6101df610294366004610e10565b610753565b60005473ffffffffffffffffffffffffffffffffffffffff1661019a565b61019a6107fe565b6101df6102cd366004610e10565b610829565b61019a6108d4565b6101df6102e8366004610e10565b6108ff565b6101df6102fb366004610e10565b6109aa565b61019a610a55565b6101df610316366004610e10565b610a80565b6101df610329366004610e10565b610b2b565b61019a610c58565b60006103617f444154415f434f4d50524553534f520000000000000000000000000000000000610c7f565b905090565b60006103617f41434c0000000000000000000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610417576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6104417f54524541535552595f434f4e545241435400000000000000000000000000000082610d1d565b50565b60005473ffffffffffffffffffffffffffffffffffffffff1633146104c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f574554485f47415445574159000000000000000000000000000000000000000082610d1d565b60006103617f54524541535552595f434f4e5452414354000000000000000000000000000000610c7f565b60006103617f574554485f544f4b454e00000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f50524943455f4f5241434c45000000000000000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610671576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b61067b6000610d9b565b565b60005473ffffffffffffffffffffffffffffffffffffffff1633146106fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f41434c000000000000000000000000000000000000000000000000000000000082610d1d565b60006103617f574554485f474154455741590000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146107d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f574554485f544f4b454e0000000000000000000000000000000000000000000082610d1d565b60006103617f4143434f554e545f464143544f52590000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146108aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f4143434f554e545f464143544f5259000000000000000000000000000000000082610d1d565b60006103617f474541525f544f4b454e00000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610980576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f474541525f544f4b454e0000000000000000000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f444154415f434f4d50524553534f52000000000000000000000000000000000082610d1d565b60006103617f434f4e5452414354535f52454749535445520000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610b01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f434f4e5452414354535f5245474953544552000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610bac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b73ffffffffffffffffffffffffffffffffffffffff8116610c4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161040e565b61044181610d9b565b60006103617f50524943455f4f5241434c4500000000000000000000000000000000000000005b6000818152600160209081526040808320548151808301909252600382527f41503100000000000000000000000000000000000000000000000000000000009282019290925273ffffffffffffffffffffffffffffffffffffffff9091169081610d16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040e9190610e66565b5092915050565b60008281526001602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091559051909184917fb37614c7d254ea8d16eb81fa11dddaeb266aa8ba4917980859c7740aff30c6919190a35050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215610e2257600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610e4657600080fd5b9392505050565b600060208284031215610e5f57600080fd5b5035919050565b600060208083528351808285015260005b81811015610e9357858101830151858201604001528201610e77565b81811115610ea5576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea264697066735822122083c228af017c6f5cf8c395cdf7a53276ff56fdd4f4313c39f680ab73bd75417364736f6c634300080a0033608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61090e8061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063732818191161008c578063adce758d11610066578063adce758d14610215578063ba306df114610228578063d4eb5db01461023b578063f2fde38b1461027457600080fd5b806373281819146101b7578063819ad68e146101da5780638da5cb5b146101ed57600080fd5b806354fd4d50116100bd57806354fd4d501461016a5780635f259aba14610180578063715018a6146101af57600080fd5b806335914829146100e45780633a41ec641461011c5780634910832f14610155575b600080fd5b6101076100f236600461089b565b60016020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61010761012a36600461089b565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205460ff1690565b61016861016336600461089b565b610287565b005b610172600181565b604051908152602001610113565b61010761018e36600461089b565b60005473ffffffffffffffffffffffffffffffffffffffff91821691161490565b610168610387565b6101076101c536600461089b565b60026020526000908152604090205460ff1681565b6101686101e836600461089b565b610414565b60005460405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610113565b61016861022336600461089b565b61050c565b61016861023636600461089b565b610601565b61010761024936600461089b565b73ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205460ff1690565b61016861028236600461089b565b6106f6565b60005473ffffffffffffffffffffffffffffffffffffffff16331461030d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909217909155517fae26b1cfe9454ba87274a4e8330b6654684362d0f3d7bbd17f7449a1d38387c69190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610408576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b6104126000610826565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517fd400da6c0c0a894dacc0981730b88af0545d00272ee8fff1437bf560ff245fc49190a250565b60005473ffffffffffffffffffffffffffffffffffffffff16331461058d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f1998397e7203f7baca9d6f41b9e4da6e768daac5caad4234fb9bf5869d2715459190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610682576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526001602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f28b01395b7e25d20552a0c8dc8ecd3b1d4abc986f14dad7885fd45b6fd73c8d99190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811661081a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610304565b61082381610826565b50565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156108ad57600080fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146108d157600080fd5b939250505056fea26469706673582212204712efbfe997070def77285a5b8753bc882b62da2133ce1937ad26cd2b48e49864736f6c634300080a003360a060405234801561001057600080fd5b50604051610f50380380610f5083398101604081905261002f916100d7565b6000805460ff19169055806001600160a01b03811661006157604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa15801561009f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100c391906100d7565b6001600160a01b0316608052506101079050565b6000602082840312156100e957600080fd5b81516001600160a01b038116811461010057600080fd5b9392505050565b608051610e1261013e600039600081816101e2015281816102b20152818161040f0152818161057801526108510152610e126000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80638456cb5911610097578063b4ac686011610066578063b4ac686014610217578063c29277cd1461021f578063d914cd4b14610227578063e26b2f631461023a57600080fd5b80638456cb59146101cd57806394144856146101d5578063a50cf2c8146101dd578063ac4afa381461020457600080fd5b80635b16ebb7116100d35780635b16ebb7146101575780635c975abb1461018a578063673a2a1f146101955780636fbc6f6b146101aa57600080fd5b80631e16e4fc146100fa5780633f4ba83a1461013757806354fd4d5014610141575b600080fd5b61010d610108366004610c97565b61024d565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61013f610284565b005b610149600181565b60405190815260200161012e565b61017a610165366004610cb0565b60026020526000908152604090205460ff1681565b604051901515815260200161012e565b60005460ff1661017a565b61019d610372565b60405161012e9190610ced565b61017a6101b8366004610cb0565b60046020526000908152604090205460ff1681565b61013f6103e1565b61019d6104cd565b61010d7f000000000000000000000000000000000000000000000000000000000000000081565b61010d610212366004610c97565b61053a565b600154610149565b600354610149565b61013f610235366004610cb0565b61054a565b61013f610248366004610cb0565b610823565b6003818154811061025d57600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa15801561030e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103329190610d47565b610368576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610370610af6565b565b606060018054806020026020016040519081016040528092919081815260200182805480156103d757602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116103ac575b5050505050905090565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561046b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048f9190610d47565b6104c5576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610370610bd7565b606060038054806020026020016040519081016040528092919081815260200182805480156103d75760200282019190600052602060002090815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116103ac575050505050905090565b6001818154811061025d57600080fd5b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156105d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f89190610d47565b61062e576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051808201909152600281527f5a30000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff82166106b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b60405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff8116600090815260026020908152604091829020548251808401909352600383527f43523100000000000000000000000000000000000000000000000000000000009183019190915260ff1615610753576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b506001805480820182557fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915560008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909417909355915190917ff816b5143086c89d103a0683286be86c2b741e83ebfa75135aae606e2f5c6e5391a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156108ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d19190610d47565b610907576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051808201909152600281527f5a30000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8216610989576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b5073ffffffffffffffffffffffffffffffffffffffff8116600090815260046020908152604091829020548251808401909352600383527f43523200000000000000000000000000000000000000000000000000000000009183019190915260ff1615610a23576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b506003805460018082019092557fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915560008181526004602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909417909355915190917f58ad3cfc4b6552a53c8c4128ae9b080e14b4378a159280643a62c6f709cee24f91a250565b60005460ff16610b62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016106b0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff1615610c44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016106b0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610bad3390565b600060208284031215610ca957600080fd5b5035919050565b600060208284031215610cc257600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610ce657600080fd5b9392505050565b6020808252825182820181905260009190848201906040850190845b81811015610d3b57835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101610d09565b50909695505050505050565b600060208284031215610d5957600080fd5b81518015158114610ce657600080fd5b600060208083528351808285015260005b81811015610d9657858101830151858201604001528201610d7a565b81811115610da8576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea26469706673582212208f2d91c863db9ab1494a9c5db20e3fddc4b6c779ea3c3621737c105c60d9440a64736f6c634300080a003360e06040523480156200001157600080fd5b5060405162004da638038062004da6833981016040819052620000349162000160565b6001600160a01b0381166200005c57604051635919af9760e11b815260040160405180910390fd5b6001600160a01b03811660808190526040805163c513c9bb60e01b8152905163c513c9bb916004808201926020929091908290030181865afa158015620000a7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cd919062000160565b6001600160a01b031660a0816001600160a01b0316815250506080516001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000127573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200014d919062000160565b6001600160a01b031660c0525062000192565b6000602082840312156200017357600080fd5b81516001600160a01b03811681146200018b57600080fd5b9392505050565b60805160a05160c051614b896200021d6000396000818161018801528181611c4f0152612c5a0152600081816101ed015281816115e201528181611f5f0152818161213f0152818161223f0152818161243801528181612604015281816126bc01528181612788015281816129a501528181613c410152613d000152600061013c0152614b896000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c806354fd4d5011610081578063a80deda31161005b578063a80deda31461020f578063ae093f3f1461022f578063fc9914cb1461024f57600080fd5b806354fd4d50146101bd578063663b8fdb146101d35780637a0c7b21146101e857600080fd5b80632954018c116100b25780632954018c146101375780634b2f336d146101835780634c472fc9146101aa57600080fd5b80630dbd616d146100d957806313d21cdf146101025780631bcd8fc014610122575b600080fd5b6100ec6100e73660046140fc565b610272565b6040516100f9919061430b565b60405180910390f35b61011561011036600461431e565b6114d4565b6040516100f99190614444565b61012a611f59565b6040516100f99190614453565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100f9565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b61015e6101b83660046140fc565b6121f5565b6101c5600281565b6040519081526020016100f9565b6101db612432565b6040516100f991906146ea565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b61022261021d36600461431e565b6126b5565b6040516100f9919061476a565b61024261023d36600461431e565b612a75565b6040516100f991906147dd565b61026261025d3660046140fc565b613bf7565b60405190151581526020016100f9565b61035f604051806102400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160008152602001606081526020016000815260200160008152602001600015158152602001600081526020016000815260200160008152602001600060ff168152602001600081525090565b600080600080600061037088613cf4565b509450945094509450945060008560ff1660011461041d576040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015284169063e958b70490602401602060405180830381865afa1580156103f4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061041891906147f0565b6104ad565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015286169063e958b70490602401602060405180830381865afa158015610489573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ad91906147f0565b60ff8716610200890181905273ffffffffffffffffffffffffffffffffffffffff808b1660208b01528b811660608b015282168952909150600114156109e9578473ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610538573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055c91906147f0565b73ffffffffffffffffffffffffffffffffffffffff90811660808901526040517fc7de38a600000000000000000000000000000000000000000000000000000000815282821660048201529085169063c7de38a690602401602060405180830381865afa1580156105d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f5919061480d565b60c08801526040517fdfd5946500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015285169063dfd5946590602401602060405180830381865afa158015610666573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068a919061480d565b60e08801526040517f3ce0735500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015260006024830152861690633ce0735590604401602060405180830381865afa92505050801561073c575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526107399181019061480d565b60015b6107455761074c565b6101408801525b6040517f3ce0735500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015260016024830152861690633ce0735590604401602060405180830381865afa9250505080156107f9575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526107f69181019061480d565b60015b61080257610809565b6101608801525b60c08701516040517f996329f800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526024820192909252600060448201529086169063996329f89060640160a060405180830381865afa9250505080156108c4575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526108c191810190614826565b60015b6108cd576108da565b505015156101808a015250505b8073ffffffffffffffffffffffffffffffffffffffff16631afbb7a46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610925573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610949919061480d565b6101a08801526040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152851690633192195c90602401602060405180830381865afa1580156109bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109df919061480d565b60a0880152610c26565b8273ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5891906147f0565b73ffffffffffffffffffffffffffffffffffffffff90811660808901526040517fc7de38a600000000000000000000000000000000000000000000000000000000815282821660048201529083169063c7de38a6906024016040805180830381865afa158015610acc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af09190614866565b5060c08801526040517fdfd5946500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015283169063dfd5946590602401602060405180830381865afa158015610b62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b86919061480d565b60e08801526040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152841690633192195c906024016040805180830381865afa158015610bf6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1a9190614866565b60a08901526101a08801525b60008660ff16600114610ca7578373ffffffffffffffffffffffffffffffffffffffff166316f0115b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca291906147f0565b610d16565b8573ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1691906147f0565b90508073ffffffffffffffffffffffffffffffffffffffff166345d31f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d87919061480d565b6101008901526000600160ff891614610e0e578473ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610de5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e09919061480d565b610e7d565b8573ffffffffffffffffffffffffffffffffffffffff166320a05ff76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7d919061480d565b90508760ff16600114610f1f576040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152861690638991b2f190602401602060405180830381865afa158015610ef6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1a919061480d565b610faf565b6040517fb451cecc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015287169063b451cecc90602401602060405180830381865afa158015610f8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610faf919061480d565b6102208a01528067ffffffffffffffff811115610fce57610fce61488a565b60405190808252806020026020018201604052801561103e57816020015b6040805160808101825260008082526020808301829052928201819052606082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181610fec5790505b506101208a015260005b818110156113d657604080516080810182526000808252602082018190529181018290526060810191909152600180831b9060ff8c1614156111c5576040517faf0a650200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018590528a169063af0a650290604401608060405180830381865afa1580156110f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111b91906148b9565b5050602084015273ffffffffffffffffffffffffffffffffffffffff9081168084526040517ff9eaee0d0000000000000000000000000000000000000000000000000000000081526004810191909152908a169063f9eaee0d90602401602060405180830381865afa158015611195573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b9919061490d565b15156040830152611388565b6040517f172c48c70000000000000000000000000000000000000000000000000000000081526004810184905273ffffffffffffffffffffffffffffffffffffffff89169063172c48c7906024016040805180830381865afa15801561122f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112539190614928565b5073ffffffffffffffffffffffffffffffffffffffff9081168084526040517f70a082310000000000000000000000000000000000000000000000000000000081529188166004830152906370a0823190602401602060405180830381865afa1580156112c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e8919061480d565b602083015281516040517ff9eaee0d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529088169063f9eaee0d90602401602060405180830381865afa15801561135c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611380919061490d565b151560408301525b6102208c015181161561139c57600161139f565b60005b151560608301526101208c01518051839190859081106113c1576113c161495e565b60209081029190910101525050600101611048565b508273ffffffffffffffffffffffffffffffffffffffff166317d11a156040518163ffffffff1660e01b8152600401602060405180830381865afa158015611422573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611446919061480d565b896101c00181815250508273ffffffffffffffffffffffffffffffffffffffff16633dc54b406040518163ffffffff1660e01b8152600401602060405180830381865afa15801561149b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bf919061480d565b6101e08a015250969998505050505050505050565b61159b604051806102000160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600060ff1681525090565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015283917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa15801561162b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164f919061490d565b611685576040517fd384b23800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316808352604080517ffe14112d000000000000000000000000000000000000000000000000000000008152905185929163fe14112d9160048083019260209291908290030181865afa1580156116f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611719919061480d565b8360c00181815250508073ffffffffffffffffffffffffffffffffffffffff1663ef8d96036040518163ffffffff1660e01b8152600401602060405180830381865afa15801561176d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611791919061480d565b8360e00181815250508073ffffffffffffffffffffffffffffffffffffffff1663743753596040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611809919061480d565b8360a00181815250508073ffffffffffffffffffffffffffffffffffffffff16634c19386c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561185d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611881919061480d565b836101000181815250508073ffffffffffffffffffffffffffffffffffffffff1663788c6bfe6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fa919061480d565b836101600181815250508073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561194f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611973919061480d565b8360800181815250508073ffffffffffffffffffffffffffffffffffffffff166345d31f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119eb919061480d565b836101400181815250508073ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6491906147f0565b836040019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff166336dda7d56040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0a91906147f0565b836060019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663788c6bfe6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb0919061480d565b836101600181815250508073ffffffffffffffffffffffffffffffffffffffff1663e941fa786040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c29919061480d565b61018084015260408084015173ffffffffffffffffffffffffffffffffffffffff9081167f000000000000000000000000000000000000000000000000000000000000000082161460208087019190915282517f609ae31700000000000000000000000000000000000000000000000000000000815292519184169263609ae31792600480830193928290030181865afa158015611ccb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cef919061480d565b836101c00181815250508073ffffffffffffffffffffffffffffffffffffffff1663dbcb313b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d68919061480d565b836101a00181815250506000836060015173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de7919061480d565b6040517f5427c9380000000000000000000000000000000000000000000000000000000081526004810182905290915060009073ffffffffffffffffffffffffffffffffffffffff841690635427c93890602401602060405180830381865afa158015611e58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7c919061480d565b90508015611ec7576101808501518190611eb890611e9c906127106149bc565b876101000151886101400151611eb291906149d3565b90613fd0565b611ec29190614a3f565b611ece565b8461014001515b856101200181815250508273ffffffffffffffffffffffffffffffffffffffff166354fd4d506040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f47919061480d565b60ff166101e086015250505050919050565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b4ac68606040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fec919061480d565b90508067ffffffffffffffff8111156120075761200761488a565b6040519080825280602002602001820160405280156120ff57816020015b6120ec604051806102000160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600060ff1681525090565b8152602001906001900390816120255790505b50915060005b818110156121f0576040517fac4afa38000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ac4afa3890602401602060405180830381865afa15801561219b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121bf91906147f0565b90506121ca816114d4565b8483815181106121dc576121dc61495e565b602090810291909101015250600101612105565b505090565b6040517f6fbc6f6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015260009184917f00000000000000000000000000000000000000000000000000000000000000001690636fbc6f6b90602401602060405180830381865afa158015612286573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122aa919061490d565b6122e0576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060006122ee87613cf4565b5050935093505092508260ff16600114612397576040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015282169063fdd5764590602401602060405180830381865afa15801561236e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061239291906147f0565b612427565b6040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015283169063fdd5764590602401602060405180830381865afa158015612403573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061242791906147f0565b979650505050505050565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c29277cd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124c5919061480d565b90508067ffffffffffffffff8111156124e0576124e061488a565b6040519080825280602002602001820160405280156125c457816020015b60408051610260810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083018290526101208301819052610140830181905261016083015261018082018190526101a082018190526101c082018190526101e082018190526102008201819052610220820181905261024082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816124fe5790505b50915060005b818110156121f0576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa158015612660573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061268491906147f0565b905061268f81612a75565b8483815181106126a1576126a161495e565b6020908102919091010152506001016125ca565b60606000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c29277cd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612725573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612749919061480d565b905060005b81811015612829576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa1580156127e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061280891906147f0565b90506128148187613bf7565b15612820578360010193505b5060010161274e565b508167ffffffffffffffff8111156128435761284361488a565b60405190808252806020026020018201604052801561296157816020015b61294e604051806102400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160008152602001606081526020016000815260200160008152602001600015158152602001600081526020016000815260200160008152602001600060ff168152602001600081525090565b8152602001906001900390816128615790505b5092506000915060005b81811015612a6d576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa158015612a01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a2591906147f0565b9050612a318187613bf7565b15612a6457612a408187610272565b858581518110612a5257612a5261495e565b60209081029190910101526001909301925b5060010161296b565b505050919050565b604080516102608101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082018390526101208201819052610140820181905261016082015261018081018290526101a081018290526101c081018290526101e08101829052610200810182905261022081018290526102408101829052908080808080612b1b88613cf4565b73ffffffffffffffffffffffffffffffffffffffff8e168d5260ff86166101808e01819052959b50939950919750955093509150600114612bca578273ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ba1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bc591906147f0565b612c39565b8473ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c3991906147f0565b73ffffffffffffffffffffffffffffffffffffffff908116602089018190527f00000000000000000000000000000000000000000000000000000000000000009091161460408801526000600160ff881614612d03578373ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cfe91906147f0565b612d72565b8573ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d7291906147f0565b6040517f2e97ca2100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b8116600483015291925090821690632e97ca2190602401602060405180830381865afa158015612de2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e06919061490d565b15156060890152604080517f45d31f9d000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff8316916345d31f9d9160048083019260209291908290030181865afa158015612e78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e9c919061480d565b8860800181815250508073ffffffffffffffffffffffffffffffffffffffff1663743753596040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ef0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f14919061480d565b610100890152600160ff88161415613017578573ffffffffffffffffffffffffffffffffffffffff16639b2cb5d86040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f95919061480d565b8860a00181815250508573ffffffffffffffffffffffffffffffffffffffff16635f48f3936040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fe9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061300d919061480d565b60c08901526130a5565b8273ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa158015613061573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130859190614a73565b6fffffffffffffffffffffffffffffffff90811660c08b01521660a08901525b60008760ff16600114613126578473ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613121919061480d565b613195565b8573ffffffffffffffffffffffffffffffffffffffff166320a05ff76040518163ffffffff1660e01b8152600401602060405180830381865afa158015613171573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613195919061480d565b90508067ffffffffffffffff8111156131b0576131b061488a565b6040519080825280602002602001820160405280156131d9578160200160208202803683370190505b506101208a01528067ffffffffffffffff8111156131f9576131f961488a565b604051908082528060200260200182016040528015613222578160200160208202803683370190505b506101608a015260005b818110156134c4578860ff16600114156133b4576040517f5e5f2e260000000000000000000000000000000000000000000000000000000081526004810182905260009073ffffffffffffffffffffffffffffffffffffffff891690635e5f2e2690602401602060405180830381865afa1580156132ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132d291906147f0565b9050808b610120015183815181106132ec576132ec61495e565b73ffffffffffffffffffffffffffffffffffffffff92831660209182029290920101526040517f78327438000000000000000000000000000000000000000000000000000000008152828216600482015290891690637832743890602401602060405180830381865afa158015613367573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061338b919061480d565b8b610160015183815181106133a2576133a261495e565b602002602001018181525050506134bc565b6040517f172c48c70000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff87169063172c48c7906024016040805180830381865afa15801561341e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134429190614928565b8061ffff1690508b610120015183815181106134605761346061495e565b602002602001018c6101600151848151811061347e5761347e61495e565b60200260200101828152508273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525050505b60010161322c565b5060008860ff16600114613546578373ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561351d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613541919061480d565b6135b5565b8673ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613591573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135b5919061480d565b90508067ffffffffffffffff8111156135d0576135d061488a565b60405190808252806020026020018201604052801561361557816020015b60408051808201909152600080825260208201528152602001906001900390816135ee5790505b506101408b015260005b818110156139015760408051808201909152600080825260208201528a60ff166001146136da576040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff871690635094cb4f90602401602060405180830381865afa1580156136b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136d591906147f0565b613769565b6040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff8a1690635094cb4f90602401602060405180830381865afa158015613745573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061376991906147f0565b73ffffffffffffffffffffffffffffffffffffffff168152600160ff8c16146138245780516040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529089169063fdd5764590602401602060405180830381865afa1580156137fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061381f91906147f0565b6138b7565b80516040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152908a169063fdd5764590602401602060405180830381865afa158015613893573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138b791906147f0565b73ffffffffffffffffffffffffffffffffffffffff1660208201526101408c01518051829190849081106138ed576138ed61495e565b60209081029190910101525060010161361f565b508860ff166001141561398f578773ffffffffffffffffffffffffffffffffffffffff1663b2c53a6c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613959573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061397d919061480d565b60e08b015260ff6102408b0152613be9565b73ffffffffffffffffffffffffffffffffffffffff85166101a08b01819052604080517f9408b63f0000000000000000000000000000000000000000000000000000000081529051639408b63f916004808201926020929091908290030181865afa158015613a02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a2691906147f0565b8a6101e0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508473ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015613aa9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613acd9190614aa6565b5015156102008c015250604080517f9fd12b77000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff881691639fd12b779160048083019260209291908290030181865afa158015613b42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b66919061480d565b8a6102200181815250508573ffffffffffffffffffffffffffffffffffffffff16638345f26e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bdf9190614af7565b60ff166102408b01525b505050505050505050919050565b6040517f6fbc6f6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015260009184917f00000000000000000000000000000000000000000000000000000000000000001690636fbc6f6b90602401602060405180830381865afa158015613c88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cac919061490d565b613ce2576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613cec8484614023565b949350505050565b600080600080600080867f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636fbc6f6b826040518263ffffffff1660e01b8152600401613d73919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa158015613d90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613db4919061490d565b613dea576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8773ffffffffffffffffffffffffffffffffffffffff166354fd4d506040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e59919061480d565b96508660ff1660011415613ee0578795508573ffffffffffffffffffffffffffffffffffffffff1663f93f515b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613eb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ed991906147f0565b9450613fc6565b8793508373ffffffffffffffffffffffffffffffffffffffff16632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f5291906147f0565b92508373ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fc391906147f0565b91505b5091939550919395565b6000821580613fdd575081155b15613fea5750600061401d565b612710613ff8600282614b1a565b61ffff1661400684866149d3565b6140109190614b3b565b61401a9190614a3f565b90505b92915050565b6040517f055ee9b500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600091829185169063055ee9b590602401602060405180830381865afa158015614094573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140b891906147f0565b73ffffffffffffffffffffffffffffffffffffffff1614159392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146140f957600080fd5b50565b6000806040838503121561410f57600080fd5b823561411a816140d7565b9150602083013561412a816140d7565b809150509250929050565b600081518084526020808501945080840160005b8381101561419f578151805173ffffffffffffffffffffffffffffffffffffffff168852838101518489015260408082015115159089015260609081015115159088015260809096019590820190600101614149565b509495945050505050565b805173ffffffffffffffffffffffffffffffffffffffff168252600061024060208301516141f0602086018273ffffffffffffffffffffffffffffffffffffffff169052565b506040830151614204604086018215159052565b50606083015161422c606086018273ffffffffffffffffffffffffffffffffffffffff169052565b506080830151614254608086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060a083015160a085015260c083015160c085015260e083015160e085015261010080840151818601525061012080840151828287015261429783870182614135565b92505050610140808401518186015250610160808401518186015250610180808401516142c78287018215159052565b50506101a083810151908501526101c080840151908501526101e080840151908501526102008084015160ff16908501526102209283015192909301919091525090565b60208152600061401a60208301846141aa565b60006020828403121561433057600080fd5b813561433b816140d7565b9392505050565b805173ffffffffffffffffffffffffffffffffffffffff168252602081015161436f602084018215159052565b506040810151614397604084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060608101516143bf606084018273ffffffffffffffffffffffffffffffffffffffff169052565b506080818101519083015260a0808201519083015260c0808201519083015260e08082015190830152610100808201519083015261012080820151908301526101408082015190830152610160808201519083015261018080820151908301526101a080820151908301526101c080820151908301526101e09081015160ff16910152565b610200810161401d8284614342565b6020808252825182820181905260009190848201906040850190845b8181101561449657614482838551614342565b92840192610200929092019160010161446f565b50909695505050505050565b600081518084526020808501945080840160005b8381101561419f57815173ffffffffffffffffffffffffffffffffffffffff16875295820195908201906001016144b6565b600081518084526020808501945080840160005b8381101561419f578151805173ffffffffffffffffffffffffffffffffffffffff9081168952908401511683880152604090960195908201906001016144fc565b600081518084526020808501945080840160005b8381101561419f57815187529582019590820190600101614551565b805173ffffffffffffffffffffffffffffffffffffffff168252600061026060208301516145b3602086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060408301516145c7604086018215159052565b5060608301516145db606086018215159052565b506080830151608085015260a083015160a085015260c083015160c085015260e083015160e0850152610100808401518186015250610120808401518282870152614628838701826144a2565b92505050610140808401518583038287015261464483826144e8565b925050506101608084015185830382870152614660838261453d565b92505050610180808401516146798287018260ff169052565b50506101a08381015173ffffffffffffffffffffffffffffffffffffffff908116918601919091526101c0808501511515908601526101e080850151909116908501526102008084015115159085015261022080840151908501526102409283015160ff1692909301919091525090565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561475d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc088860301845261474b85835161456d565b94509285019290850190600101614711565b5092979650505050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561475d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08886030184526147cb8583516141aa565b94509285019290850190600101614791565b60208152600061401a602083018461456d565b60006020828403121561480257600080fd5b815161433b816140d7565b60006020828403121561481f57600080fd5b5051919050565b600080600080600060a0868803121561483e57600080fd5b5050835160208501516040860151606087015160809097015192989197509594509092509050565b6000806040838503121561487957600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080600080608085870312156148cf57600080fd5b84516148da816140d7565b60208601516040870151606090970151919890975090945092505050565b8051801515811461490857600080fd5b919050565b60006020828403121561491f57600080fd5b61401a826148f8565b6000806040838503121561493b57600080fd5b8251614946816140d7565b602084015190925061ffff8116811461412a57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156149ce576149ce61498d565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614a0b57614a0b61498d565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614a4e57614a4e614a10565b500490565b80516fffffffffffffffffffffffffffffffff8116811461490857600080fd5b60008060408385031215614a8657600080fd5b614a8f83614a53565b9150614a9d60208401614a53565b90509250929050565b600080600060608486031215614abb57600080fd5b614ac484614a53565b9250614ad2602085016148f8565b9150604084015164ffffffffff81168114614aec57600080fd5b809150509250925092565b600060208284031215614b0957600080fd5b815160ff8116811461433b57600080fd5b600061ffff80841680614b2f57614b2f614a10565b92169190910492915050565b60008219821115614b4e57614b4e61498d565b50019056fea2646970667358221220d15108d0bec9cc6f3903875dd8412869a3da1b36661bdc780e2e2f0ae3136d2464736f6c634300080a003360a06040523480156200001157600080fd5b5060405162001b4538038062001b45833981016040819052620000349162000608565b6000805460ff19169055816001600160a01b0381166200006757604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cc91906200070a565b6001600160a01b031660805250805160005b818110156200014257620001398382815181106200010057620001006200072f565b6020026020010151600001518483815181106200012157620001216200072f565b6020026020010151602001516200014c60201b60201c565b600101620000de565b5050505062000822565b6001600160a01b03821615806200016a57506001600160a01b038116155b156200018957604051635919af9760e11b815260040160405180910390fd5b620001a8826001600160a01b0316620004ba60201b620006751760201c565b620001d65760405163df4c572d60e01b81526001600160a01b03831660048201526024015b60405180910390fd5b620001f5816001600160a01b0316620004ba60201b620006751760201c565b6200021f5760405163df4c572d60e01b81526001600160a01b0382166004820152602401620001cd565b806001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200027c575060408051601f3d908101601f19168201909252620002799181019062000745565b60015b6200029a576040516367a7cd4360e01b815260040160405180910390fd5b8060ff16600814620002bf576040516367a7cd4360e01b815260040160405180910390fd5b506000816001600160a01b031663d62ada116040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200031f575060408051601f3d908101601f191682019092526200031c918101906200076a565b60015b6200032a576200032d565b90505b6000836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200038c575060408051601f3d908101601f19168201909252620003899181019062000745565b60015b620003aa5760405163528ca31d60e01b815260040160405180910390fd5b60128160ff161115620003d05760405163528ca31d60e01b815260040160405180910390fd5b9050826001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa9250505080156200042f575060408051601f3d908101601f191682019092526200042c91810190620007a6565b60015b6200044d576040516367a7cd4360e01b815260040160405180910390fd5b8662000461576200046185858484620004c0565b5050505050620004748484848462000526565b826001600160a01b0316846001600160a01b03167fe263805b03657ab13064915d0723c5ce14981547e7cba5283f66b9e5d81f6e6e60405160405180910390a350505050565b3b151590565b60008313620004e2576040516356e05d2b60e01b815260040160405180910390fd5b836001600160501b0316816001600160501b0316108062000501575081155b15620005205760405163b1cf675560e01b815260040160405180910390fd5b50505050565b6001600160a01b03831682156200053e57600160a11b175b6200055460ff60a21b60a284901b1682620007fb565b6001600160a01b0390951660009081526001602052604090209490945550505050565b80516001600160a01b03811681146200058f57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715620005cf57620005cf62000594565b60405290565b604051601f8201601f191681016001600160401b038111828210171562000600576200060062000594565b604052919050565b60008060408084860312156200061d57600080fd5b620006288462000577565b602085810151919450906001600160401b03808211156200064857600080fd5b818701915087601f8301126200065d57600080fd5b81518181111562000672576200067262000594565b62000682848260051b01620005d5565b818152848101925060069190911b830184019089821115620006a357600080fd5b928401925b81841015620006fa5785848b031215620006c25760008081fd5b620006cc620005aa565b620006d78562000577565b8152620006e686860162000577565b8187015283529285019291840191620006a8565b8096505050505050509250929050565b6000602082840312156200071d57600080fd5b620007288262000577565b9392505050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156200075857600080fd5b815160ff811681146200072857600080fd5b6000602082840312156200077d57600080fd5b815180151581146200072857600080fd5b80516001600160501b03811681146200058f57600080fd5b600080600080600060a08688031215620007bf57600080fd5b620007ca866200078e565b9450602086015193506040860151925060608601519150620007ef608087016200078e565b90509295509295909350565b600082198211156200081d57634e487b7160e01b600052601160045260246000fd5b500190565b6080516112f262000853600039600081816101b201528181610280015281816103e201526104ff01526112f26000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c80638456cb591161008c578063b66102df11610066578063b66102df146101d4578063e8a97a3e146101e7578063f190e5fa146101fa578063f9a650301461023f57600080fd5b80638456cb591461016d5780639dcb511a14610175578063a50cf2c8146101ad57600080fd5b80635c975abb116100bd5780635c975abb1461011c5780635cecbd0e146101325780637afb01041461015a57600080fd5b80633f4ba83a146100e457806341976e09146100ee57806354fd4d5014610114575b600080fd5b6100ec610252565b005b6101016100fc366004610f28565b610340565b6040519081526020015b60405180910390f35b610101600281565b60005460ff16604051901515815260200161010b565b610145610140366004610f4a565b610352565b6040805192835260208301919091520161010b565b610101610168366004610f90565b610376565b6100ec6103b4565b610188610183366004610f28565b6104a0565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010b565b6101887f000000000000000000000000000000000000000000000000000000000000000081565b6101016101e2366004610fbc565b6104b4565b6100ec6101f5366004610ff8565b6104d1565b61020d610208366004610f28565b6105c3565b6040805173ffffffffffffffffffffffffffffffffffffffff909416845291151560208401529082015260600161010b565b61010161024d366004610f90565b61064d565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156102dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103009190611022565b610336576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033e61067b565b565b600061034b82610761565b5092915050565b60008061035f868661064d565b915061036b848461064d565b905094509492505050565b600080600061038484610761565b90925090508161039582600a611193565b61039f908761119f565b6103a991906111dc565b925050505b92915050565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561043e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104629190611022565b610498576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033e610819565b60006104ab826105c3565b50909392505050565b60006104c96104c3858561064d565b83610376565b949350505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561055b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057f9190611022565b6105b5576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105bf82826108d9565b5050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600160205260408120548190819080610624576040517f4bb8ad8200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b947402000000000000000000000000000000000000000086161515945060a286901c9350915050565b600080600061065b84610761565b909250905061066b81600a611193565b61039f838761119f565b3b151590565b60005460ff166106ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b600080600080610770856105c3565b8095508193508294505050506000806000808573ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156107cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f19190611231565b9450945050935093508461080b5761080b84848484610dd9565b829750505050505050915091565b60005460ff1615610886576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016106e3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586107373390565b73ffffffffffffffffffffffffffffffffffffffff82161580610910575073ffffffffffffffffffffffffffffffffffffffff8116155b15610947576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82163b6109ad576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016106e3565b73ffffffffffffffffffffffffffffffffffffffff81163b610a13576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024016106e3565b8073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610a98575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610a9591810190611281565b60015b610ace576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060ff16600814610b0b576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060008173ffffffffffffffffffffffffffffffffffffffff1663d62ada116040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610b93575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610b9091810190611022565b60015b610b9c57610b9f565b90505b60008373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610c26575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610c2391810190611281565b60015b610c5c576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60128160ff161115610c9a576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b90508273ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa925050508015610d21575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610d1e91810190611231565b60015b610d57576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b86610d6857610d6885858484610dd9565b5050505050610d7984848484610e74565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fe263805b03657ab13064915d0723c5ce14981547e7cba5283f66b9e5d81f6e6e60405160405180910390a350505050565b60008313610e13576040517f56e05d2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8369ffffffffffffffffffff168169ffffffffffffffffffff161080610e37575081155b15610e6e576040517fb1cf675500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b73ffffffffffffffffffffffffffffffffffffffff83168215610ea95774020000000000000000000000000000000000000000175b610ecf7503fc000000000000000000000000000000000000000060a284901b16826112a4565b73ffffffffffffffffffffffffffffffffffffffff90951660009081526001602052604090209490945550505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610f2357600080fd5b919050565b600060208284031215610f3a57600080fd5b610f4382610eff565b9392505050565b60008060008060808587031215610f6057600080fd5b84359350610f7060208601610eff565b925060408501359150610f8560608601610eff565b905092959194509250565b60008060408385031215610fa357600080fd5b82359150610fb360208401610eff565b90509250929050565b600080600060608486031215610fd157600080fd5b83359250610fe160208501610eff565b9150610fef60408501610eff565b90509250925092565b6000806040838503121561100b57600080fd5b61101483610eff565b9150610fb360208401610eff565b60006020828403121561103457600080fd5b81518015158114610f4357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b808511156110cc57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156110b2576110b2611044565b808516156110bf57918102915b93841c9390800290611078565b509250929050565b6000826110e3575060016103ae565b816110f0575060006103ae565b816001811461110657600281146111105761112c565b60019150506103ae565b60ff84111561112157611121611044565b50506001821b6103ae565b5060208310610133831016604e8410600b841016171561114f575081810a6103ae565b6111598383611073565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561118b5761118b611044565b029392505050565b6000610f4383836110d4565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156111d7576111d7611044565b500290565b600082611212577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b805169ffffffffffffffffffff81168114610f2357600080fd5b600080600080600060a0868803121561124957600080fd5b61125286611217565b945060208601519350604086015192506060860151915061127560808701611217565b90509295509295909350565b60006020828403121561129357600080fd5b815160ff81168114610f4357600080fd5b600082198211156112b7576112b7611044565b50019056fea2646970667358221220e7485a2cb5750973f539ca59d2211008b42bb92b6c49605a53f5d9c88c330fb164736f6c634300080a003360e06040523480156200001157600080fd5b5060405162002ced38038062002ced8339810160408190526200003491620004bb565b6000805460ff19169055806001600160a01b0381166200006757604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cc9190620004bb565b6001600160a01b039081166080526001805560408051808201909152600281526105a360f41b602082015291508216620001245760405162461bcd60e51b81526004016200011b9190620004ed565b60405180910390fd5b50806001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000164573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200018a9190620004bb565b6001600160a01b031660c052604051620001a490620004ad565b604051809103906000f080158015620001c1573d6000803e3d6000fd5b506001600160a01b031660a08190526040805163204a7f0760e21b81529051638129fc1c9160048082019260009290919082900301818387803b1580156200020857600080fd5b505af11580156200021d573d6000803e3d6000fd5b50505050620002316200028a60201b60201c565b50600454600380546001600160a01b039092166001600160a01b03199283161790556000805260026020527fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b8054909116905562000545565b6000620002a460a0516200038c60201b6200119b1760201c565b9050806001600160a01b0316638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620002e257600080fd5b505af1158015620002f7573d6000803e3d6000fd5b5050600480546001600160a01b03908116600090815260026020908152604090912080546001600160a01b03199081169388169384179091558354169091179091556200035492506005915083906200043b811b6200127d17901c565b506040516001600160a01b038216907f9f69b6c10f6810213e055b0ba6bc0a4e2603f73c221aad77ea35da819cda7dc390600090a250565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260601b60148201526e5af43d82803e903d91602b57fd5bf360881b60288201526037816000f09150506001600160a01b038116620004365760405162461bcd60e51b815260206004820152601660248201527f455243313136373a20637265617465206661696c65640000000000000000000060448201526064016200011b565b919050565b600062000452836001600160a01b0384166200045b565b90505b92915050565b6000818152600183016020526040812054620004a45750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000455565b50600062000455565b610e788062001e7583390190565b600060208284031215620004ce57600080fd5b81516001600160a01b0381168114620004e657600080fd5b9392505050565b600060208083528351808285015260005b818110156200051c57858101830151858201604001528201620004fe565b818111156200052f576000604083870101525b50601f01601f1916929092016040019392505050565b60805160a05160c0516118cf620005a66000396000818161026a015281816103680152610b7001526000818161020201526110650152600081816102c4015281816105b80152818161099601528181610a840152610e7401526118cf6000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806388f64c54116100cd578063b193976311610081578063d82ecc4811610066578063d82ecc4814610309578063e3ba9ace1461031c578063f23953ab1461032f57600080fd5b8063b1939763146102f9578063b60e85181461030157600080fd5b80638f7dcfa3116100b25780638f7dcfa31461029f578063a50cf2c8146102bf578063a904aab6146102e657600080fd5b806388f64c541461026557806389b77b3e1461028c57600080fd5b806354fd4d50116101245780635da33c5b116101095780635da33c5b146101fd578063765e0159146102245780638456cb591461025d57600080fd5b806354fd4d50146101d05780635c975abb146101e657600080fd5b806313d8c8401461015657806321d18456146101a05780632932472f146101b35780633f4ba83a146101c8575b600080fd5b6004546101769073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6101766101ae366004611651565b610337565b6101c66101c1366004611697565b61058a565b005b6101c6610968565b6101d8600181565b604051908152602001610197565b60005460ff165b6040519015158152602001610197565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101766102323660046116da565b73ffffffffffffffffffffffffffffffffffffffff9081166000908152600260205260409020541690565b6101c6610a56565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101c661029a3660046116da565b610b42565b6003546101769073ffffffffffffffffffffffffffffffffffffffff1681565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101c66102f4366004611697565b610e46565b6101d8610fb8565b6101d8611033565b6101ed6103173660046116da565b611044565b61017661032a3660046116f5565b611051565b6101c661105e565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa1580156103c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103e8919061170e565b6040518060400160405280600281526020017f43500000000000000000000000000000000000000000000000000000000000008152509061045f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b60405180910390fd5b506104686112a6565b6003805473ffffffffffffffffffffffffffffffffffffffff8082166000818152600260205260409081902080549093167fffffffffffffffffffffffff0000000000000000000000000000000000000000948516179094558154909216905590517fc75b5a710000000000000000000000000000000000000000000000000000000081523360048201526024810185905260448101849052819063c75b5a7190606401600060405180830381600087803b15801561052657600080fd5b505af115801561053a573d6000803e3d6000fd5b505060405133925073ffffffffffffffffffffffffffffffffffffffff841691507ff3ede7039176503a8ad1fe7cfaa29475a9dbe0cdcaf04ecf9a5c10570c47b10390600090a390505b92915050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610614573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610638919061170e565b61066e576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106766112a6565b60035473ffffffffffffffffffffffffffffffffffffffff838116911614156106fa576003805473ffffffffffffffffffffffffffffffffffffffff808216600090815260026020526040902080549091167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092558154169055610865565b73ffffffffffffffffffffffffffffffffffffffff838116600090815260026020908152604091829020548251808401909352600383527f4146330000000000000000000000000000000000000000000000000000000000918301919091529091848116911614610798576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b5060045473ffffffffffffffffffffffffffffffffffffffff838116911614156107fd57600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85161790555b73ffffffffffffffffffffffffffffffffffffffff828116600081815260026020526040808220805488861684529183208054929095167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790945591905281541690555b6040517fc75b5a7100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600060248301819052604483015283169063c75b5a7190606401600060405180830381600087803b1580156108dc57600080fd5b505af11580156108f0573d6000803e3d6000fd5b505050506109088260056112dd90919063ffffffff16565b508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f25e267469ba2ae82515be7b3d45df60bf8308343f0809e8cf7319058e2255ce660405160405180910390a3505050565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156109f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a16919061170e565b610a4c576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a546112ff565b565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015610ae0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b04919061170e565b610b3a576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a546113e0565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa158015610bcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf0919061170e565b6040518060400160405280600281526020017f435000000000000000000000000000000000000000000000000000000000000081525090610c5e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b50610c6a6005826114a0565b6040518060400160405280600381526020017f414634000000000000000000000000000000000000000000000000000000000081525090610cd8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b50438173ffffffffffffffffffffffffffffffffffffffff16633dc54b406040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4991906117a3565b14156040518060400160405280600381526020017f414631000000000000000000000000000000000000000000000000000000000081525090610db9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b506004805473ffffffffffffffffffffffffffffffffffffffff90811660009081526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081169487169485179091558454168317909355915190917fced6ab9afc868b3a088366f6631ae20752993b5cce5d5f0534ea5a59fcc57d5691a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610ed0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef4919061170e565b610f2a576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f19a1603900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301528416906319a1603990604401600060405180830381600087803b158015610f9b57600080fd5b505af1158015610faf573d6000803e3d6000fd5b50505050505050565b600354600090819073ffffffffffffffffffffffffffffffffffffffff165b73ffffffffffffffffffffffffffffffffffffffff81161561102d5773ffffffffffffffffffffffffffffffffffffffff9081166000908152600260205260409020541681611025816117eb565b925050610fd7565b50919050565b600061103f60056114cf565b905090565b60006105846005836114a0565b60006105846005836114d9565b60006110897f000000000000000000000000000000000000000000000000000000000000000061119b565b90508073ffffffffffffffffffffffffffffffffffffffff16638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156110d357600080fd5b505af11580156110e7573d6000803e3d6000fd5b50506004805473ffffffffffffffffffffffffffffffffffffffff908116600090815260026020526040902080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811692871692831790915582541617905550611156905060058261127d565b5060405173ffffffffffffffffffffffffffffffffffffffff8216907f9f69b6c10f6810213e055b0ba6bc0a4e2603f73c221aad77ea35da819cda7dc390600090a250565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260601b60148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f091505073ffffffffffffffffffffffffffffffffffffffff8116611278576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f455243313136373a20637265617465206661696c6564000000000000000000006044820152606401610456565b919050565b600061129f8373ffffffffffffffffffffffffffffffffffffffff84166114e5565b9392505050565b60035473ffffffffffffffffffffffffffffffffffffffff90811660009081526002602052604090205416610a5457610a5461105e565b600061129f8373ffffffffffffffffffffffffffffffffffffffff8416611534565b60005460ff1661136b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610456565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff161561144d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610456565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586113b63390565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600183016020526040812054151561129f565b6000610584825490565b600061129f8383611627565b600081815260018301602052604081205461152c57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610584565b506000610584565b6000818152600183016020526040812054801561161d576000611558600183611824565b855490915060009061156c90600190611824565b90508181146115d157600086600001828154811061158c5761158c61183b565b90600052602060002001549050808760000184815481106115af576115af61183b565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806115e2576115e261186a565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610584565b6000915050610584565b600082600001828154811061163e5761163e61183b565b9060005260206000200154905092915050565b6000806040838503121561166457600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff8116811461127857600080fd5b6000806000606084860312156116ac57600080fd5b6116b584611673565b92506116c360208501611673565b91506116d160408501611673565b90509250925092565b6000602082840312156116ec57600080fd5b61129f82611673565b60006020828403121561170757600080fd5b5035919050565b60006020828403121561172057600080fd5b8151801515811461129f57600080fd5b600060208083528351808285015260005b8181101561175d57858101830151858201604001528201611741565b8181111561176f576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b6000602082840312156117b557600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561181d5761181d6117bc565b5060010190565b600082821015611836576118366117bc565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220f1e9c81b8c3af2491c907ee66cf24e1bb76111b821db02df8f98dbb48b5ab5fa64736f6c634300080a0033608060405234801561001057600080fd5b50610e58806100206000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c806354fd4d5011610081578063c45a01551161005b578063c45a0155146101a4578063c75b5a71146101ca578063d1660f99146101dd57600080fd5b806354fd4d501461014f5780638129fc1c14610157578063c12c21c01461015f57600080fd5b80631afbb7a4116100b25780631afbb7a41461011d5780631cff79cd146101265780633dc54b401461014657600080fd5b806316128211146100d957806317d11a15146100ee57806319a160391461010a575b600080fd5b6100ec6100e7366004610b42565b6101f0565b005b6100f760035481565b6040519081526020015b60405180910390f35b6100ec610118366004610b8d565b61024c565b6100f760025481565b610139610134366004610bef565b6102c9565b6040516101019190610d49565b6100f760045481565b6100f7600181565b6100ec610344565b60015461017f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610101565b60005461017f9062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b6100ec6101d8366004610d5c565b610494565b6100ec6101eb366004610d8f565b61053d565b60015473ffffffffffffffffffffffffffffffffffffffff163314610241576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600291909155600355565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1633146102a3576040517fb126b84800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102c573ffffffffffffffffffffffffffffffffffffffff83168260006105b4565b5050565b60015460609073ffffffffffffffffffffffffffffffffffffffff16331461031d576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033d73ffffffffffffffffffffffffffffffffffffffff8416836107b4565b9392505050565b600054610100900460ff1661035f5760005460ff1615610363565b303b155b6103f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600054610100900460ff1615801561043357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000166101011790555b600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16336201000002179055801561049157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b50565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1633146104eb576040517fb126b84800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff949094169390931790925560025560035543600455565b60015473ffffffffffffffffffffffffffffffffffffffff16331461058e576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105af73ffffffffffffffffffffffffffffffffffffffff841683836107f6565b505050565b80158061065457506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015284169063dd62ed3e90604401602060405180830381865afa15801561062e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106529190610dcb565b155b6106e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e63650000000000000000000060648201526084016103eb565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526105af9084907f095ea7b300000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261084c565b606061033d83836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250610958565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526105af9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401610732565b60006108ae826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166109589092919063ffffffff16565b8051909150156105af57808060200190518101906108cc9190610de4565b6105af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016103eb565b6060610967848460008561096f565b949350505050565b606082471015610a01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016103eb565b843b610a69576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016103eb565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051610a929190610e06565b60006040518083038185875af1925050503d8060008114610acf576040519150601f19603f3d011682016040523d82523d6000602084013e610ad4565b606091505b5091509150610ae4828286610aef565b979650505050505050565b60608315610afe57508161033d565b825115610b0e5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103eb9190610d49565b60008060408385031215610b5557600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff81168114610b8857600080fd5b919050565b60008060408385031215610ba057600080fd5b610ba983610b64565b9150610bb760208401610b64565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215610c0257600080fd5b610c0b83610b64565b9150602083013567ffffffffffffffff80821115610c2857600080fd5b818501915085601f830112610c3c57600080fd5b813581811115610c4e57610c4e610bc0565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715610c9457610c94610bc0565b81604052828152886020848701011115610cad57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b83811015610cea578181015183820152602001610cd2565b83811115610cf9576000848401525b50505050565b60008151808452610d17816020860160208601610ccf565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061033d6020830184610cff565b600080600060608486031215610d7157600080fd5b610d7a84610b64565b95602085013595506040909401359392505050565b600080600060608486031215610da457600080fd5b610dad84610b64565b9250610dbb60208501610b64565b9150604084013590509250925092565b600060208284031215610ddd57600080fd5b5051919050565b600060208284031215610df657600080fd5b8151801515811461033d57600080fd5b60008251610e18818460208701610ccf565b919091019291505056fea2646970667358221220448e7046078cd668c09328d857e534e2aab6cdc0e691d3d4f2c8baae8e084b1364736f6c634300080a003360c06040523480156200001157600080fd5b506040516200162738038062001627833981016040819052620000349162000177565b60408051808201909152600281526105a360f41b60208201526001600160a01b038216620000805760405162461bcd60e51b8152600401620000779190620001a9565b60405180910390fd5b50806001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e6919062000177565b6001600160a01b03166080816001600160a01b031681525050806001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200013e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000164919062000177565b6001600160a01b031660a0525062000201565b6000602082840312156200018a57600080fd5b81516001600160a01b0381168114620001a257600080fd5b9392505050565b600060208083528351808285015260005b81811015620001d857858101830151858201604001528201620001ba565b81811115620001eb576000604083870101525b50601f01601f1916929092016040019392505050565b60805160a0516113c2620002656000396000818161021f0152818161036401526106d501526000818160af0152818161012a015281816104420152818161056e015281816107b301528181610aa601528181610b890152610c6701526113c26000f3fe60806040526004361061005e5760003560e01c80635869dba8116100435780635869dba814610199578063deecfbc9146101bb578063e79a4089146101ce57600080fd5b80634f0e0ef31461011857806354fd4d501461017657600080fd5b366101135760408051808201909152600381527f574732000000000000000000000000000000000000000000000000000000000060208201523373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b60405180910390fd5b50005b600080fd5b34801561012457600080fd5b5061014c7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561018257600080fd5b5061018b600181565b60405190815260200161016d565b3480156101a557600080fd5b506101b96101b4366004611263565b6101ee565b005b6101b96101c936600461128f565b61031d565b3480156101da57600080fd5b506101b96101e93660046112e1565b61068e565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201819052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa15801561027b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061029f9190611318565b6040518060400160405280600281526020017f43500000000000000000000000000000000000000000000000000000000000008152509061030d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b506103188383610a77565b505050565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808516600483015284917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa1580156103ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103d19190611318565b6040518060400160405280600281526020017f52500000000000000000000000000000000000000000000000000000000000008152509061043f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e6919061133a565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600381526020017f57473100000000000000000000000000000000000000000000000000000000008152509061056b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156105d457600080fd5b505af11580156105e8573d6000803e3d6000fd5b50505050506105f78434610b3c565b6040517f9aa5d46200000000000000000000000000000000000000000000000000000000815234600482015273ffffffffffffffffffffffffffffffffffffffff848116602483015261ffff84166044830152851690639aa5d46290606401600060405180830381600087803b15801561067057600080fd5b505af1158015610684573d6000803e3d6000fd5b5050505050505050565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808516600483015284917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa15801561071e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107429190611318565b6040518060400160405280600281526020017f5250000000000000000000000000000000000000000000000000000000000000815250906107b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610833573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610857919061133a565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600381526020017f5747310000000000000000000000000000000000000000000000000000000000815250906108dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b506109703330858773ffffffffffffffffffffffffffffffffffffffff166336dda7d56040518163ffffffff1660e01b8152600401602060405180830381865afa15801561092e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610952919061133a565b73ffffffffffffffffffffffffffffffffffffffff16929190610cd4565b6040517f05fe138b0000000000000000000000000000000000000000000000000000000081526004810184905230602482015260009073ffffffffffffffffffffffffffffffffffffffff8616906305fe138b906044016020604051808303816000875af11580156109e6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0a9190611357565b9050610a168382610a77565b8273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f6de63bb986f2779478e384365c03cc2e62f06b453856acca87d5a519ce02664960405160405180910390a35050505050565b6040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632e1a7d4d90602401600060405180830381600087803b158015610aff57600080fd5b505af1158015610b13573d6000803e3d6000fd5b50610b389250505073ffffffffffffffffffffffffffffffffffffffff831682610d6f565b5050565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015282917f00000000000000000000000000000000000000000000000000000000000000009091169063dd62ed3e90604401602060405180830381865afa158015610bd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf69190611357565b1015610b38576040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303816000875af1158015610cb0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103189190611318565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052610d69908590610ec9565b50505050565b80471015610dd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610107565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114610e33576040519150601f19603f3d011682016040523d82523d6000602084013e610e38565b606091505b5050905080610318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610107565b6000610f2b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16610fd59092919063ffffffff16565b8051909150156103185780806020019051810190610f499190611318565b610318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610107565b6060610fe48484600085610fee565b90505b9392505050565b606082471015611080576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610107565b843b6110e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610107565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516111119190611370565b60006040518083038185875af1925050503d806000811461114e576040519150601f19603f3d011682016040523d82523d6000602084013e611153565b606091505b509150915061116382828661116e565b979650505050505050565b6060831561117d575081610fe7565b82511561118d5782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b60005b838110156111dc5781810151838201526020016111c4565b83811115610d695750506000910152565b602081526000825180602084015261120c8160408501602087016111c1565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461126057600080fd5b50565b6000806040838503121561127657600080fd5b82356112818161123e565b946020939093013593505050565b6000806000606084860312156112a457600080fd5b83356112af8161123e565b925060208401356112bf8161123e565b9150604084013561ffff811681146112d657600080fd5b809150509250925092565b6000806000606084860312156112f657600080fd5b83356113018161123e565b92506020840135915060408401356112d68161123e565b60006020828403121561132a57600080fd5b81518015158114610fe757600080fd5b60006020828403121561134c57600080fd5b8151610fe78161123e565b60006020828403121561136957600080fd5b5051919050565b600082516113828184602087016111c1565b919091019291505056fea264697066735822122017fd7fc76e4a1efcf24b78a3417fad7ab9576f0a23aa756ddb211c5e2227aa9564736f6c634300080a003360806040523480156200001157600080fd5b5060405162002b8038038062002b80833981016040819052620000349162000122565b6001600160a01b0381166200008f5760405162461bcd60e51b815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640160405180910390fd5b6001600160a01b03811660008181526001602052604080822080546001600160601b0319166b204fce5e3e2502611000000090811790915590517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91620000f99190815260200190565b60405180910390a350600680546001600160a81b031916336101000260ff191617905562000154565b6000602082840312156200013557600080fd5b81516001600160a01b03811681146200014d57600080fd5b9392505050565b612a1c80620001646000396000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c806370a08231116100f9578063b4b5ea5711610097578063dd62ed3e11610071578063dd62ed3e14610503578063e7a324dc14610555578063f1127ed81461057c578063f2fde38b146105ee57600080fd5b8063b4b5ea57146104ca578063c3cda520146104dd578063d505accf146104f057600080fd5b806395d89b41116100d357806395d89b411461045b5780639742ca4614610497578063a9059cbb146104aa578063b0660c3d146104bd57600080fd5b806370a08231146103c7578063782d6fe11461040b5780637ecebe001461043b57600080fd5b806330adf81f11610166578063481c6a7511610140578063481c6a751461031e578063587cde1e146103435780635c19a95c146103795780636fcfff451461038c57600080fd5b806330adf81f14610298578063313ce567146102bf578063349dc329146102d957600080fd5b806320606b701161019757806320606b70146102545780632185810b1461027b57806323b872dd1461028557600080fd5b806306fdde03146101be578063095ea7b31461021057806318160ddd14610233575b600080fd5b6101fa6040518060400160405280600781526020017f47656172626f780000000000000000000000000000000000000000000000000081525081565b60405161020791906124a3565b60405180910390f35b61022361021e36600461253f565b610601565b6040519015158152602001610207565b6102466b204fce5e3e2502611000000081565b604051908152602001610207565b6102467f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b61028361070d565b005b610223610293366004612569565b6107ee565b6102467f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b6102c7601281565b60405160ff9091168152602001610207565b6007546102f99073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610207565b6006546102f990610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6102f96103513660046125a5565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6102836103873660046125a5565b61098a565b6103b261039a3660046125a5565b60046020526000908152604090205463ffffffff1681565b60405163ffffffff9091168152602001610207565b6102466103d53660046125a5565b73ffffffffffffffffffffffffffffffffffffffff166000908152600160205260409020546bffffffffffffffffffffffff1690565b61041e61041936600461253f565b610997565b6040516bffffffffffffffffffffffff9091168152602001610207565b6102466104493660046125a5565b60056020526000908152604090205481565b6101fa6040518060400160405280600481526020017f474541520000000000000000000000000000000000000000000000000000000081525081565b6102836104a53660046125a5565b610cae565b6102236104b836600461253f565b610e20565b6006546102239060ff1681565b61041e6104d83660046125a5565b610e5c565b6102836104eb3660046125d1565b610efa565b6102836104fe366004612629565b611310565b610246610511366004612693565b73ffffffffffffffffffffffffffffffffffffffff9182166000908152602081815260408083209390941682529190915220546bffffffffffffffffffffffff1690565b6102467fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b6105c561058a3660046126c6565b600360209081526000928352604080842090915290825290205463ffffffff81169064010000000090046bffffffffffffffffffffffff1682565b6040805163ffffffff90931683526bffffffffffffffffffffffff909116602083015201610207565b6102836105fc3660046125a5565b61187a565b6000807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83141561063f57506bffffffffffffffffffffffff610664565b6106618360405180606001604052806025815260200161285260259139611a15565b90505b3360008181526020818152604080832073ffffffffffffffffffffffffffffffffffffffff89168085529083529281902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff871690811790915590519081529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a360019150505b92915050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314610798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e616765720060448201526064015b60405180910390fd5b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f795b0e16c8da9807b0a215f3749bd6dbcc49fc0472183f4e446abb7dcbd9d00790600090a1565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081815260408083203380855290835281842054825160608101909352602580845291936bffffffffffffffffffffffff909116928592610856928892919061285290830139611a15565b90508673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156108a257506bffffffffffffffffffffffff82811614155b156109725760006108cc83836040518060600160405280603d8152602001612974603d9139611a67565b73ffffffffffffffffffffffffffffffffffffffff898116600081815260208181526040808320948a168084529482529182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff87169081179091559151918252939450919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505b61097d878783611ad5565b5060019695505050505050565b6109943382611e9c565b50565b6000438210610a28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f476561723a3a6765745072696f72566f7465733a206e6f74207965742064657460448201527f65726d696e656400000000000000000000000000000000000000000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff831660009081526004602052604090205463ffffffff1680610a63576000915050610707565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604081208491610a95600185612735565b63ffffffff90811682526020820192909252604001600020541611610b1b5773ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812090610ae5600184612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff1691506107079050565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020908152604080832083805290915290205463ffffffff16831015610b63576000915050610707565b600080610b71600184612735565b90505b8163ffffffff168163ffffffff161115610c565760006002610b968484612735565b610ba0919061275a565b610baa9083612735565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260036020908152604080832063ffffffff8581168552908352928190208151808301909252549283168082526401000000009093046bffffffffffffffffffffffff1691810191909152919250871415610c2a576020015194506107079350505050565b805163ffffffff16871115610c4157819350610c4f565b610c4c600183612735565b92505b5050610b74565b5073ffffffffffffffffffffffffffffffffffffffff8516600090815260036020908152604080832063ffffffff909416835292905220546bffffffffffffffffffffffff6401000000009091041691505092915050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314610d34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e6167657200604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff8116610db1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640161078f565b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f2f834d1c8c4b956018fff5faca4d99868ae635487424d9c265c257ccbc698c6a90600090a250565b600080610e45836040518060600160405280602681526020016128a760269139611a15565b9050610e52338583611ad5565b5060019392505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526004602052604081205463ffffffff1680610e94576000610ef3565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812090610ec5600184612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b9392505050565b604080518082018252600781527f47656172626f780000000000000000000000000000000000000000000000000060209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f028ef9f797075f74ac647c65fde04fb0f128c2d59fd40f45732269917642fd4681840152466060820152306080808301919091528351808303909101815260a0820184528051908301207fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60c083015273ffffffffffffffffffffffffffffffffffffffff8a1660e08301526101008201899052610120808301899052845180840390910181526101408301909452835193909201929092207f19010000000000000000000000000000000000000000000000000000000000006101608401526101628301829052610182830181905290916000906101a201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa1580156110d8573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166111a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f476561723a3a64656c656761746542795369673a20696e76616c69642073696760448201527f6e61747572650000000000000000000000000000000000000000000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff811660009081526005602052604081208054916111d7836127a4565b919050558914611269576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f476561723a3a64656c656761746542795369673a20696e76616c6964206e6f6e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161078f565b874211156112f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f476561723a3a64656c656761746542795369673a207369676e6174757265206560448201527f7870697265640000000000000000000000000000000000000000000000000000606482015260840161078f565b611303818b611e9c565b505050505b505050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86141561134d57506bffffffffffffffffffffffff611372565b61136f8660405180606001604052806024815260200161291c60249139611a15565b90505b604080518082018252600781527f47656172626f780000000000000000000000000000000000000000000000000060209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f028ef9f797075f74ac647c65fde04fb0f128c2d59fd40f45732269917642fd4681840152466060820152306080808301919091528351808303909101815260a0909101835280519082012073ffffffffffffffffffffffffffffffffffffffff8b166000908152600590925291812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918c918c918c919086611472836127a4565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810188905260e001604051602081830303815290604052805190602001209050600082826040516020016115199291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff8b169284019290925260608301899052608083018890529092509060019060a0016020604051602081039080840390855afa1580156115a2573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661164a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a7065726d69743a20696e76616c6964207369676e617475726500604482015260640161078f565b8b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146116df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f476561723a3a7065726d69743a20756e617574686f72697a6564000000000000604482015260640161078f565b88421115611749576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a7065726d69743a207369676e6174757265206578706972656400604482015260640161078f565b846000808e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508a73ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258760405161186491906bffffffffffffffffffffffff91909116815260200190565b60405180910390a3505050505050505050505050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314611900576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e6167657200604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff811661197d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640161078f565b60065460405173ffffffffffffffffffffffffffffffffffffffff80841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36006805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b6000816c010000000000000000000000008410611a5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b509192915050565b6000836bffffffffffffffffffffffff16836bffffffffffffffffffffffff1611158290611ac2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b50611acd83856127dd565b949350505050565b60065460ff1680611b025750600654610100900473ffffffffffffffffffffffffffffffffffffffff1633145b80611b24575060075473ffffffffffffffffffffffffffffffffffffffff1633145b611b8a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f476561723a3a7472616e73666572732061726520666f7262696464656e000000604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff8316611c2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603c60248201527f476561723a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260448201527f616e736665722066726f6d20746865207a65726f206164647265737300000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff8216611cd0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f476561723a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260448201527f616e7366657220746f20746865207a65726f2061646472657373000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260016020908152604091829020548251606081019093526036808452611d2d936bffffffffffffffffffffffff90921692859291906129b190830139611a67565b73ffffffffffffffffffffffffffffffffffffffff848116600090815260016020908152604080832080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff968716179055928616825290829020548251606081019093526030808452611dbf949190911692859290919061287790830139611f50565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260409182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff968716179055905193851684529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a373ffffffffffffffffffffffffffffffffffffffff808416600090815260026020526040808220548584168352912054611e9792918216911683611fc1565b505050565b73ffffffffffffffffffffffffffffffffffffffff808316600081815260026020818152604080842080546001845282862054949093528787167fffffffffffffffffffffffff000000000000000000000000000000000000000084168117909155905191909516946bffffffffffffffffffffffff9092169391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4611f4a828483611fc1565b50505050565b600080611f5d8486612802565b9050846bffffffffffffffffffffffff16816bffffffffffffffffffffffff1610158390611fb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b50949350505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561200b57506000816bffffffffffffffffffffffff16115b15611e975773ffffffffffffffffffffffffffffffffffffffff8316156120fd5773ffffffffffffffffffffffffffffffffffffffff831660009081526004602052604081205463ffffffff1690816120655760006120c4565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812090612096600185612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b905060006120eb82856040518060600160405280602881526020016128cd60289139611a67565b90506120f9868484846121e2565b5050505b73ffffffffffffffffffffffffffffffffffffffff821615611e975773ffffffffffffffffffffffffffffffffffffffff821660009081526004602052604081205463ffffffff1690816121525760006121b1565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812090612183600185612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b905060006121d882856040518060600160405280602781526020016128f560279139611f50565b9050611308858484845b60006122064360405180606001604052806034815260200161294060349139612465565b905060008463ffffffff1611801561226d575073ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812063ffffffff831691612251600188612735565b63ffffffff908116825260208201929092526040016000205416145b156123035773ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812083916122a4600188612735565b63ffffffff168152602081019190915260400160002080546bffffffffffffffffffffffff92909216640100000000027fffffffffffffffffffffffffffffffff000000000000000000000000ffffffff9092169190911790556123fe565b60408051808201825263ffffffff80841682526bffffffffffffffffffffffff808616602080850191825273ffffffffffffffffffffffffffffffffffffffff8b166000908152600382528681208b8616825290915294909420925183549451909116640100000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009094169116179190911790556123a5846001612832565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260046020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff929092169190911790555b604080516bffffffffffffffffffffffff80861682528416602082015273ffffffffffffffffffffffffffffffffffffffff8716917fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724910160405180910390a25050505050565b6000816401000000008410611a5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91905b600060208083528351808285015260005b818110156124d0578581018301518582016040015282016124b4565b818111156124e2576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461253a57600080fd5b919050565b6000806040838503121561255257600080fd5b61255b83612516565b946020939093013593505050565b60008060006060848603121561257e57600080fd5b61258784612516565b925061259560208501612516565b9150604084013590509250925092565b6000602082840312156125b757600080fd5b610ef382612516565b803560ff8116811461253a57600080fd5b60008060008060008060c087890312156125ea57600080fd5b6125f387612516565b9550602087013594506040870135935061260f606088016125c0565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a03121561264457600080fd5b61264d88612516565b965061265b60208901612516565b95506040880135945060608801359350612677608089016125c0565b925060a0880135915060c0880135905092959891949750929550565b600080604083850312156126a657600080fd5b6126af83612516565b91506126bd60208401612516565b90509250929050565b600080604083850312156126d957600080fd5b6126e283612516565b9150602083013563ffffffff811681146126fb57600080fd5b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600063ffffffff8381169083168181101561275257612752612706565b039392505050565b600063ffffffff80841680612798577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156127d6576127d6612706565b5060010190565b60006bffffffffffffffffffffffff8381169083168181101561275257612752612706565b60006bffffffffffffffffffffffff80831681851680830382111561282957612829612706565b01949350505050565b600063ffffffff8083168185168083038211156128295761282961270656fe476561723a3a617070726f76653a20616d6f756e7420657863656564732039362062697473476561723a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e74206f766572666c6f7773476561723a3a7472616e736665723a20616d6f756e7420657863656564732039362062697473476561723a3a5f6d6f7665566f7465733a20766f746520616d6f756e7420756e646572666c6f7773476561723a3a5f6d6f7665566f7465733a20766f746520616d6f756e74206f766572666c6f7773476561723a3a7065726d69743a20616d6f756e7420657863656564732039362062697473476561723a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d62657220657863656564732033322062697473476561723a3a7472616e7366657246726f6d3a207472616e7366657220616d6f756e742065786365656473207370656e64657220616c6c6f77616e6365476561723a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e7420657863656564732062616c616e6365a26469706673582212201b84fd7789a35c022f692420863210a30e82d2405659f5a28275d433fa53467f64736f6c634300080a003360806040526016805460ff1916905534801561001a57600080fd5b506040516110a73803806110a7833981016040819052610039916100b6565b600080546001600160a01b038085166001600160a01b0319928316179092556003805492841692909116919091179055610080600a6b033b2e3c9fd0803ce80000006100e9565b60075550506b033b2e3c9fd0803ce800000060155561010b565b80516001600160a01b03811681146100b157600080fd5b919050565b600080604083850312156100c957600080fd5b6100d28361009a565b91506100e06020840161009a565b90509250929050565b60008261010657634e487b7160e01b600052601260045260246000fd5b500490565b610f8d8061011a6000396000f3fe608060405234801561001057600080fd5b50600436106102e95760003560e01c806367c99d5811610191578063c5f956af116100e3578063dbcb313b11610097578063f11a648711610071578063f11a648714610320578063f3fdb15a146105f1578063fe14112d1461061157600080fd5b8063dbcb313b146105d6578063e941fa78146105df578063ef8d9603146105e857600080fd5b8063cb3905e1116100c8578063cb3905e1146105c4578063cf33d95514610320578063d0efe753146105cd57600080fd5b8063c5f956af14610588578063ca9505e4146105a857600080fd5b80639aa5d46211610145578063b6ac642a1161011f578063b6ac642a14610567578063bb04b19314610567578063bf28068b1461057557600080fd5b80639aa5d46214610544578063a4e8273e14610557578063b3554a0a1461055e57600080fd5b8063788c6bfe11610176578063788c6bfe146104ef5780638456cb591461050157806396df5dc01461053157600080fd5b806367c99d58146104de57806374375359146104e757600080fd5b806336dda7d51161024a5780634d778ad1116101fe57806354fd4d50116101d857806354fd4d50146104c05780635c975abb146104c8578063609ae317146104d557600080fd5b80634d778ad114610491578063532fe502146104a45780635427c938146104ad57600080fd5b80633f4ba83a1161022f5780633f4ba83a1461045257806345d31f9d1461047f5780634c19386c1461048857600080fd5b806336dda7d51461040f5780633e163df01461042f57600080fd5b80632495a599116102a157806329f3d3b61161028657806329f3d3b6146103b35780632a3354c9146103bc5780632e97ca21146103dc57600080fd5b80632495a599146103735780632954018c1461039357600080fd5b8063078c4781116102d2578063078c4781146103205780630fce70fb146103335780631e16e4fc1461033b57600080fd5b8063030dbb04146102ee57806305fe138b1461030a575b600080fd5b6102f760105481565b6040519081526020015b60405180910390f35b6102f7610318366004610ce8565b600092915050565b61033161032e366004610d14565b50565b005b6015546102f7565b61034e610349366004610d2f565b610618565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610301565b60035461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b60005461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6102f760095481565b600a5461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103ff6103ea366004610d14565b60066020526000908152604090205460ff1681565b6040519015158152602001610301565b60055461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103ff61043d366004610d14565b60146020526000908152604090205460ff1681565b610331601680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b6102f760075481565b6102f760015481565b6102f761049f366004610d2f565b61064f565b6102f760115481565b6102f76104bb366004610d2f565b61066d565b6102f7600181565b6016546103ff9060ff1681565b6102f760085481565b6102f7600d5481565b6102f7610685565b6b033b2e3c9fd0803ce80000006102f7565b610331601680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b61033161053f366004610d2f565b601555565b610331610552366004610d48565b505050565b60016102f7565b6102f7600e5481565b61033161032e366004610d2f565b610331610583366004610ce8565b61071d565b60135461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103316105b6366004610d7d565b600b92909255600c55600d55565b6102f7600c5481565b6102f7600b5481565b6102f760155481565b6102f7600f5481565b6102f760025481565b60125461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b60006102f7565b6004818154811061062857600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6000610667826b033b2e3c9fd0803ce800000061077a565b92915050565b6000610667826b033b2e3c9fd0803ce80000006108e9565b6003546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156106f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107189190610da9565b905090565b6009829055600a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691909117909155600354610776911682846109fe565b5050565b60408051808201909152600281527f4d330000000000000000000000000000000000000000000000000000000000006020820152600090826107f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b60405180910390fd5b506000610800600284610e72565b90506b033b2e3c9fd0803ce8000000610839827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610ead565b6108439190610e72565b8411156040518060400160405280600281526020017f4d31000000000000000000000000000000000000000000000000000000000000815250906108b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b5082816108cd6b033b2e3c9fd0803ce800000087610ec4565b6108d79190610f01565b6108e19190610e72565b949350505050565b60008215806108f6575081155b1561090357506000610667565b8161091b60026b033b2e3c9fd0803ce8000000610e72565b610945907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610ead565b61094f9190610e72565b8311156040518060400160405280600281526020017f4d31000000000000000000000000000000000000000000000000000000000000815250906109c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b506b033b2e3c9fd0803ce80000006109d9600282610e72565b6109e38486610ec4565b6109ed9190610f01565b6109f79190610e72565b9392505050565b6040805173ffffffffffffffffffffffffffffffffffffffff848116602483015260448083018590528351808403909101815260649092018352602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65649084015261055292869291600091610ac9918516908490610b73565b8051909150156105525780806020019051810190610ae79190610f19565b610552576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016107e9565b60606108e1848460008585843b610be6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107e9565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051610c0f9190610f3b565b60006040518083038185875af1925050503d8060008114610c4c576040519150601f19603f3d011682016040523d82523d6000602084013e610c51565b606091505b5091509150610c61828286610c6c565b979650505050505050565b60608315610c7b5750816109f7565b825115610c8b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ce357600080fd5b919050565b60008060408385031215610cfb57600080fd5b82359150610d0b60208401610cbf565b90509250929050565b600060208284031215610d2657600080fd5b6109f782610cbf565b600060208284031215610d4157600080fd5b5035919050565b600080600060608486031215610d5d57600080fd5b83359250610d6d60208501610cbf565b9150604084013590509250925092565b600080600060608486031215610d9257600080fd5b505081359360208301359350604090920135919050565b600060208284031215610dbb57600080fd5b5051919050565b60005b83811015610ddd578181015183820152602001610dc5565b83811115610dec576000848401525b50505050565b6020815260008251806020840152610e11816040850160208701610dc2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082610ea8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600082821015610ebf57610ebf610e43565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610efc57610efc610e43565b500290565b60008219821115610f1457610f14610e43565b500190565b600060208284031215610f2b57600080fd5b815180151581146109f757600080fd5b60008251610f4d818460208701610dc2565b919091019291505056fea26469706673582212204edb887d94928b3914f60ab48df0182da9eb30ddbb7021b164cc728b60a655d564736f6c634300080a003360e06040523480156200001157600080fd5b5060405162013af238038062013af2833981016040819052620000349162000630565b826001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000073573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000999190620007bf565b620000a433620004ab565b6001600160a01b038116608081905260408051630873769560e01b815290516308737695916004808201926020929091908290030181865afa158015620000ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001159190620007bf565b6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000153573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001799190620007bf565b6001600160a01b0390811660a052841660c0525060405183906200019d9062000519565b6001600160a01b039091168152602001604051809103906000f080158015620001ca573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b0392909216918217905560608301516080840151604051620002029062000527565b6001600160a01b03938416815292909116602083015215156040820152606001604051809103906000f0801580156200023f573d6000803e3d6000fd5b50600280546001600160a01b0319166001600160a01b0392909216919091179055604051600090620002746020820162000535565b601f1982820381018352601f909101166040819052600154600254620002b0926001600160a01b039283169291909116908790602001620007e6565b60408051601f1981840301815290829052620002d09291602001620008e8565b60408051601f19818403018152919052905060006200035982848151602092830120604080517fff00000000000000000000000000000000000000000000000000000000000000818601523060601b6001600160601b03191660218201526035810193909352605580840192909252805180840390920182526075909201909152805191012090565b600154604051634fafc35760e11b81526001600160a01b038084166004830152929350911690639f5f86ae90602401600060405180830381600087803b158015620003a357600080fd5b505af1158015620003b8573d6000803e3d6000fd5b50505050620003ce8284620004fb60201b60201c565b600380546001600160a01b0319166001600160a01b0383811691821790925560015460408051630304b08760e61b81529051919093169263c12c21c09160048083019260209291908290030181865afa15801562000430573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004569190620007bf565b6001600160a01b031614620004a05760405162461bcd60e51b815260206004820152600c60248201526b496e636f727265637420434d60a01b604482015260640160405180910390fd5b505050505062000909565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008183516020850134f59050803b6200051457600080fd5b505050565b6158e8806200243683390190565b615e978062007d1e83390190565b615f3d806200dbb583390190565b6001600160a01b03811681146200055957600080fd5b50565b8051620005698162000543565b919050565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b0381118282101715620005a957620005a96200056e565b60405290565b604080519081016001600160401b0381118282101715620005a957620005a96200056e565b604051601f8201601f191681016001600160401b0381118282101715620005ff57620005ff6200056e565b604052919050565b80516001600160801b03811681146200056957600080fd5b805180151581146200056957600080fd5b6000806000606084860312156200064657600080fd5b8351620006538162000543565b602085810151919450906001600160401b03808211156200067357600080fd5b9086019060a082890312156200068857600080fd5b6200069262000584565b6200069d8362000607565b8152620006ac84840162000607565b8482015260408084015183811115620006c457600080fd5b8401601f81018b13620006d657600080fd5b805184811115620006eb57620006eb6200056e565b620006fb878260051b01620005d4565b818152878101955060069190911b82018701908c8211156200071c57600080fd5b918701915b818310156200077e5783838e0312156200073b5760008081fd5b62000745620005af565b8351620007528162000543565b81528389015161ffff811681146200076a5760008081fd5b818a01528652948701949183019162000721565b8484015250620007939050606085016200055c565b6060830152620007a6608085016200061f565b6080830152979097015195989697509495945050505050565b600060208284031215620007d257600080fd5b8151620007df8162000543565b9392505050565b600060018060a01b0380861683526020818616818501526040606081860152610100850160018060801b038088511660608801528084890151166080880152508187015160a080880152818151808452610120890191508583019350600092505b808310156200087857835180518816835286015161ffff168683015292850192600192909201919084019062000847565b5060608901516001600160a01b031660c0890152608090980151151560e0909701969096525094979650505050505050565b6000815160005b81811015620008cd5760208185018101518683015201620008b1565b81811115620008dd576000828601525b509290920192915050565b600062000901620008fa8386620008aa565b84620008aa565b949350505050565b60805160a05160c051611ad3620009636000396000818161010a0152610ea00152600081816103790152610b170152600081816101680152818161068c01528181610a4d01528181610b860152610c190152611ad36000f3fe6080604052600436106100f35760003560e01c80638da5cb5b1161008a578063ebf0c71711610059578063ebf0c71714610367578063f2fde38b1461039b578063f4747c58146103bb578063f9aa028a146103db57600080fd5b80638da5cb5b1461025a57806394ca2cb5146102855780639c4ae2d014610327578063c12c21c01461033a57600080fd5b80633e0b1a23116100c65780633e0b1a23146101ce5780634ef501ac146101e3578063715018a614610230578063805abe6a1461024557600080fd5b806316f0115b146100f85780632954018c146101565780632f7a18811461018a578063318d0d10146101b7575b600080fd5b34801561010457600080fd5b5061012c7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561016257600080fd5b5061012c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561019657600080fd5b5060025461012c9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156101c357600080fd5b506101cc610408565b005b3480156101da57600080fd5b506101cc610498565b3480156101ef57600080fd5b506102036101fe366004611726565b610521565b6040805173ffffffffffffffffffffffffffffffffffffffff93841681529290911660208301520161014d565b34801561023c57600080fd5b506101cc610567565b34801561025157600080fd5b506101cc6105f2565b34801561026657600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff1661012c565b34801561029157600080fd5b5061012c6102a03660046117e6565b8151602092830120604080517fff00000000000000000000000000000000000000000000000000000000000000818601523060601b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660218201526035810193909352605580840192909252805180840390920182526075909201909152805191012090565b6101cc6103353660046117e6565b6107d8565b34801561034657600080fd5b5060015461012c9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561037357600080fd5b5061012c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103a757600080fd5b506101cc6103b63660046118c0565b6107f5565b3480156103c757600080fd5b506101cc6103d63660046118e4565b610925565b3480156103e757600080fd5b5060035461012c9073ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff16331461048e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b610496610a49565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610519576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b61048e610b82565b6004818154811061053157600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff91821692501682565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b61049660006116b1565b60005473ffffffffffffffffffffffffffffffffffffffff163314610673576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b3073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106f5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071991906119c4565b73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610763573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078791906119c4565b73ffffffffffffffffffffffffffffffffffffffff1614156107d5576040517fbdebb83f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33ff5b60008183516020850134f59050803b6107f057600080fd5b505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b73ffffffffffffffffffffffffffffffffffffffff8116610919576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610485565b610922816116b1565b50565b60005473ffffffffffffffffffffffffffffffffffffffff1633146109a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b805160005b818110156107f05760048382815181106109c7576109c76119e1565b602090810291909101810151825460018082018555600094855293839020825160029092020180547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff938416178255929093015192840180549092169216919091179055016109ab565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ab6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ada91906119c4565b6040517ff2fde38b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301529192509082169063f2fde38b90602401600060405180830381600087803b158015610b6757600080fd5b505af1158015610b7b573d6000803e3d6000fd5b5050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1391906119c4565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca691906119c4565b60045490915060005b81811015610dd4576003546004805473ffffffffffffffffffffffffffffffffffffffff90921691637bccacee919084908110610cee57610cee6119e1565b906000526020600020906002020160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660048481548110610d3357610d336119e1565b600091825260209091206002909102015460405160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b158015610db157600080fd5b505af1158015610dc5573d6000803e3d6000fd5b50505050806001019050610caf565b506001546040517fe26b2f6300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529084169063e26b2f6390602401600060405180830381600087803b158015610e4257600080fd5b505af1158015610e56573d6000803e3d6000fd5b50506001546040517fcf33d95500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201527f0000000000000000000000000000000000000000000000000000000000000000909116925063cf33d9559150602401600060405180830381600087803b158015610ee857600080fd5b505af1158015610efc573d6000803e3d6000fd5b50505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f919190611a10565b905060005b818110156116ab576003546040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810183905260009173ffffffffffffffffffffffffffffffffffffffff1690635094cb4f90602401602060405180830381865afa15801561100e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103291906119c4565b6001546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80841660048301529293506000929091169063fdd5764590602401602060405180830381865afa1580156110a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110cc91906119c4565b905060008173ffffffffffffffffffffffffffffffffffffffff1663ce30bbdb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561111b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113f9190611a29565b9050600c81601081111561115557611155611a4a565b14156116225760008273ffffffffffffffffffffffffffffffffffffffff166320b2c1516040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111cc91906119c4565b905060008373ffffffffffffffffffffffffffffffffffffffff1663927188d96040518163ffffffff1660e01b8152600401602060405180830381865afa15801561121b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123f91906119c4565b905060008473ffffffffffffffffffffffffffffffffffffffff166399253ac06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561128e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b291906119c4565b6040517f9dcb511a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152919250908a169063e8a97a3e9083908390639dcb511a90602401602060405180830381865afa15801561132c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135091906119c4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156113bd57600080fd5b505af11580156113d1573d6000803e3d6000fd5b50506040517f9dcb511a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301528c16925063e8a97a3e915085908390639dcb511a90602401602060405180830381865afa15801561144b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061146f91906119c4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156114dc57600080fd5b505af11580156114f0573d6000803e3d6000fd5b50506003546001546040517f7832743800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301529283169450633e7c88d69350879290911690637832743890602401602060405180830381865afa158015611573573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115979190611a79565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015261ffff166024820152604401600060405180830381600087803b15801561160657600080fd5b505af115801561161a573d6000803e3d6000fd5b505050505050505b600d81601081111561163657611636611a4a565b141561169d578173ffffffffffffffffffffffffffffffffffffffff16639b51ecd36040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561168457600080fd5b505af1158015611698573d6000803e3d6000fd5b505050505b836001019350505050610f96565b50505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561173857600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156117915761179161173f565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156117de576117de61173f565b604052919050565b600080604083850312156117f957600080fd5b823567ffffffffffffffff8082111561181157600080fd5b818501915085601f83011261182557600080fd5b81356020828211156118395761183961173f565b611869817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011601611797565b9250818352878183860101111561187f57600080fd5b8181850182850137600091830181019190915290969401359450505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461092257600080fd5b6000602082840312156118d257600080fd5b81356118dd8161189e565b9392505050565b600060208083850312156118f757600080fd5b823567ffffffffffffffff8082111561190f57600080fd5b818501915085601f83011261192357600080fd5b8135818111156119355761193561173f565b611943848260051b01611797565b818152848101925060069190911b83018401908782111561196357600080fd5b928401925b818410156119b957604084890312156119815760008081fd5b61198961176e565b84356119948161189e565b8152848601356119a38161189e565b8187015283526040939093019291840191611968565b979650505050505050565b6000602082840312156119d657600080fd5b81516118dd8161189e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215611a2257600080fd5b5051919050565b600060208284031215611a3b57600080fd5b8151601181106118dd57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060208284031215611a8b57600080fd5b815161ffff811681146118dd57600080fdfea264697066735822122090f5e4310a8b66bfdd7fdfbe64bc5b98570e7c1a415ffb0ced3c857cf6c5b14064736f6c634300080a00336101606040526000805462ff00001916620c00001790553480156200002357600080fd5b50604051620058e8380380620058e8833981016040819052620000469162000537565b806001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000085573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ab919062000537565b6000805460ff191690556001600160a01b038116620000dd57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200011c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000142919062000537565b6001600160a01b03166080816001600160a01b031681525050506000816001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200019d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c3919062000537565b6001600160a01b03831661010081905260e081905260408051632495a59960e01b81529051929350600092632495a599916004808201926020929091908290030181865afa1580156200021a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000240919062000537565b6001600160a01b03811660c05290506200025a8162000472565b816001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000299573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002bf919062000537565b6001600160a01b0316610120816001600160a01b031681525050816001600160a01b03166377532ed96040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000318573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033e919062000537565b6001600160a01b0316610140816001600160a01b031681525050816001600160a01b031663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000397573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003bd919062000537565b6001600001600a6101000a8154816001600160a01b0302191690836001600160a01b03160217905550816001600160a01b0316639068a8686040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000425573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044b919062000537565b6001600160a01b031660a0525050600380546001600160a01b031916331790555062000588565b6001600160a01b03811660009081526006602052604090205415620004aa57604051632e5a5c7760e01b815260040160405180910390fd5b61010060055410620004cf57604051631cbbe18560e01b815260040160405180910390fd5b600580546001600160a01b0383166000818152600660209081526040808320600190951b948590558483526004909152812091909155825491929062000515836200055e565b91905055505050565b6001600160a01b03811681146200053457600080fd5b50565b6000602082840312156200054a57600080fd5b815162000557816200051e565b9392505050565b60006000198214156200058157634e487b7160e01b600052601160045260246000fd5b5060010190565b60805160a05160c05160e051610100516101205161014051615248620006a0600039600081816107e20152818161371001526137c501526000818161052f01526136780152600081816103d301528181610e5701528181610ebb015281816124ff0152818161265a01528181612aa101528181612b8c01528181612c4e01528181612d0d0152613b8f015260006105a401526000818161062701528181610d2201528181610db301528181610e0001528181610e3601528181610f3f0152818161203a01528181612b6b015281816130ee015281816134dc015281816135a90152613fe601526000818161081c01528181610fe101526124c20152600081816107a80152818161118401526122cb01526152486000f3fe608060405234801561001057600080fd5b50600436106103415760003560e01c8063830aa745116101bd578063a70bc542116100f9578063e75538c7116100a2578063f9aa028a1161007c578063f9aa028a1461089d578063fdd57645146108bd578063fe47cde7146108f3578063ff6875431461091357600080fd5b8063e75538c714610864578063e958b70414610877578063f67c5bd01461088a57600080fd5b8063db7ceb80116100d3578063db7ceb8014610817578063dc2b21c11461083e578063e1998cf91461085157600080fd5b8063a70bc542146107ca578063c5e10eef146107dd578063d48bfca71461080457600080fd5b806394cf073a116101665780639f5f86ae116101405780639f5f86ae146107745780639fd12b7714610787578063a366f49614610790578063a50cf2c8146107a357600080fd5b806394cf073a146106f557806395373018146107085780639af1d35a1461071b57600080fd5b80638991b2f1116101975780638991b2f1146106af5780638fe3f93f146106cf578063944ac59f146106e257600080fd5b8063830aa7451461066f5780638345f26e146106825780638456cb59146106a757600080fd5b8063458936f51161028c578063570a7af2116102355780636ce4074a1161020f5780636ce4074a146105ef5780636e98e5e41461060f5780636f307dc314610622578063783274381461064957600080fd5b8063570a7af21461059f5780635c975abb146105c6578063654a9eda146105dc57600080fd5b80635063524a116102665780635063524a1461055157806351e3f1601461058457806354fd4d501461059757600080fd5b8063458936f51461050e57806346fb371d146105175780634f0e0ef31461052a57600080fd5b80632630c12f116102ee5780633192195c116102c85780633192195c146104be5780633e8297ca146104e65780633f4ba83a1461050657600080fd5b80632630c12f1461045857806329df0b93146104845780632f7a18811461049757600080fd5b806316f0115b1161031f57806316f0115b146103ce578063172c48c7146103f55780632362a2d81461043757600080fd5b8063055ee9b5146103465780630d8f9cee146103a657806311ca4fc2146103bb575b600080fd5b61037c610354366004614a87565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6103b96103b4366004614aa4565b610949565b005b6103b96103c9366004614aa4565b610a76565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b610408610403366004614add565b610b4e565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835261ffff90911660208301520161039d565b61044a610445366004614b13565b610b66565b60405190815260200161039d565b6001546a0100000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1661037c565b6103b9610492366004614a87565b6110be565b60005461037c906301000000900473ffffffffffffffffffffffffffffffffffffffff1681565b6104d16104cc366004614a87565b611122565b6040805192835260208301919091520161039d565b61044a6104f4366004614a87565b60096020526000908152604090205481565b6103b9611156565b61044a60055481565b6103b9610525366004614b95565b611244565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b61056461055f366004614be6565b61149b565b60408051948552602085019390935291830152606082015260800161039d565b6103b9610592366004614aa4565b611602565b61044a600281565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b60005460ff16604051901515815260200161039d565b6103b96105ea366004614c21565b611703565b6106026105fd366004614d40565b611bbb565b60405161039d9190614e5b565b6103b961061d366004614aa4565b611e8e565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b61065c610657366004614a87565b612036565b60405161ffff909116815260200161039d565b6103b961067d366004614b95565b61210f565b6000546106959062010000900460ff1681565b60405160ff909116815260200161039d565b6103b961229d565b61044a6106bd366004614a87565b60086020526000908152604090205481565b61037c6106dd366004614e6e565b612389565b6103b96106f0366004614ea5565b612718565b61044a610703366004614f0a565b612845565b6103b9610716366004614a87565b612e5a565b6001546040805161ffff808416825262010000840481166020830152640100000000840481169282019290925266010000000000008304821660608201526801000000000000000090920416608082015260a00161039d565b6103b9610782366004614a87565b612f85565b61044a60075481565b6103b961079e366004614add565b613045565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b96107d8366004614f4c565b61309b565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b9610812366004614a87565b613221565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b961084c366004614f81565b61327b565b6103b961085f366004614aa4565b613306565b610408610872366004614add565b6134c9565b61037c610885366004614a87565b613541565b61044a610898366004614a87565b6135a5565b60035461037c9073ffffffffffffffffffffffffffffffffffffffff1681565b61037c6108cb366004614a87565b600b6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b600c5461037c9073ffffffffffffffffffffffffffffffffffffffff1681565b61037c610921366004614a87565b600a6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561099b57506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b156109d2576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff1615610a14576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055610a4a828261362e565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b60035473ffffffffffffffffffffffffffffffffffffffff163314610ac7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805473ffffffffffffffffffffffffffffffffffffffff9384166301000000027fffffffffffffffffff0000000000000000000000000000000000000000ffffff90911617905560018054919092166a0100000000000000000000027fffff0000000000000000000000000000000000000000ffffffffffffffffffff909116179055565b600080610b5d6001841b6134c9565b91509150915091565b6000805460ff1615610bd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064015b60405180910390fd5b600054610100900460ff1615610c1b576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff163314610ca0576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610cab89613541565b90506000806000806000610cbe86611122565b9094509050610ccf8c8e868461149b565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152939b5093985090955093506000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015610d6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8f9190614fa4565b9050610d9b8887614fec565b610da6906001614fec565b811115610de657610de1877f00000000000000000000000000000000000000000000000000000000000000008d60018c8b870303038d61366e565b610e30565b610e3073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168d8960018a8d01869003016138c0565b610e7e877f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000089600061366e565b6040517fca9505e40000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604481018490527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ca9505e490606401600060405180830381600087803b158015610f1457600080fd5b505af1158015610f28573d6000803e3d6000fd5b50505050505050506001841115610f6757610f67837f00000000000000000000000000000000000000000000000000000000000000008d87600061366e565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260086020526040902054861916610f9c8489888461395b565b6040517f89b77b3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f000000000000000000000000000000000000000000000000000000000000000016906389b77b3e90602401600060405180830381600087803b15801561102557600080fd5b505af1158015611039573d6000803e3d6000fd5b50505073ffffffffffffffffffffffffffffffffffffffff909c16600090815260026020526040812080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550929a9950505050505050505050565b6000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314611116576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61111f81613a35565b50565b60008060008061113185613aa6565b91955092509050816111438286615004565b61114d9190615041565b92505050915091565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156111e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611204919061507c565b61123a576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611242613c24565b565b60005460ff16156112b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156112f3576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100178155338152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff9081169084161480159061137457506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b80156113985750600c5473ffffffffffffffffffffffffffffffffffffffff163314155b806113b7575073ffffffffffffffffffffffffffffffffffffffff8316155b156113ee576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113f7826135a5565b61142d576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061143885613541565b9050611448838583856000613d05565b61146c5761145b83858360006001613d05565b5061146a838583856001613d05565b505b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b6001546000908190819081906127109061ffff166114b98888615099565b6114c39190615004565b6114cd9190615041565b6114d79086614fec565b935060018760028111156114ed576114ed6150b0565b1415611587576001546000906127109061151390640100000000900461ffff168b615004565b61151d9190615041565b6001549091506127109061153b9062010000900461ffff168b615004565b6115459190615041565b61154f9086614fec565b94508481111561156657600185820303935061156a565b8094505b85811061157b578585039250611581565b84860391505b506115f7565b600287600281111561159b5761159b6150b0565b14156115f157600154600090612710906115c59068010000000000000000900461ffff168b615004565b6115cf9190615041565b6001549091506127109061153b906601000000000000900461ffff168b615004565b84840391505b945094509450949050565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561165457506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b1561168b576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff16156116cd576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055610a4a8282613ea6565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561175557506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b1561178c576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff16156117ce576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790556118048584613ea6565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152600091908616906370a0823190602401602060405180830381865afa158015611874573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118989190614fa4565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529192506000918616906370a0823190602401602060405180830381865afa15801561190a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192e9190614fa4565b60015490915060009081906a0100000000000000000000900473ffffffffffffffffffffffffffffffffffffffff16635cecbd0e61196c8689615099565b8a6119778988615099565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152600481019390935273ffffffffffffffffffffffffffffffffffffffff918216602484015260448301528a1660648201526084016040805180830381865afa1580156119f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1791906150df565b9150915060018411611a2d57611a2d898961362e565b611a3687612036565b611a449061ffff1682615004565b9050611a4f88612036565b611a5d9061ffff1683615004565b9150818110611a7857611a6f89613a35565b5050505061146c565b73ffffffffffffffffffffffffffffffffffffffff891660009081526009602052604081205483611ab56b033b2e3c9fd0803ce800000085615004565b611abf9190615041565b611ad5906b033b2e3c9fd0803ce8000000615099565b611adf9190614fec565b60015490915061271090611b0a906b033b2e3c9fd0803ce80000009062010000900461ffff16615004565b611b149190615041565b8111611b555773ffffffffffffffffffffffffffffffffffffffff8a166000908152600960205260409020819055611b4b8a613a35565b505050505061146c565b611b5e8a613f56565b50505073ffffffffffffffffffffffffffffffffffffffff871660009081526009602052604090206001905550505050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b6060611bc960005460ff1690565b15611c30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff1615611c72576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100178155338152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff908116908416141580611ce7575073ffffffffffffffffffffffffffffffffffffffff8316155b15611d3d57600c5473ffffffffffffffffffffffffffffffffffffffff163314611d3d576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611d4885613541565b90508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167faed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab0360405160405180910390a36040517f1cff79cd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821690631cff79cd90611df89087908790600401615103565b6000604051808303816000875af1158015611e17573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611e5d9190810190615132565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905595945050505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314611edf576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821615611f4f5773ffffffffffffffffffffffffffffffffffffffff8281166000908152600a6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169183169190911790555b73ffffffffffffffffffffffffffffffffffffffff811615611fbf5773ffffffffffffffffffffffffffffffffffffffff8181166000908152600b6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169184169190911790555b73ffffffffffffffffffffffffffffffffffffffff811673cccccccccccccccccccccccccccccccccccccccc141561203257600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790555b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120ba5750506001547e01000000000000000000000000000000000000000000000000000000000000900461ffff1690565b60006120c5836135a5565b9050806120fe576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612107816134c9565b949350505050565b60005460ff161561217c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156121be576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff163314612243576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61224d8383613ea6565b61226f73ffffffffffffffffffffffffffffffffffffffff83168585846138c0565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555050565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015612327573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061234b919061507c565b612381576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112426142d4565b6000805460ff16156123f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff1615612439576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff1633146124be576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166321d18456857f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612568573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061258c9190614fa4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168152600481019290925260248201526044016020604051808303816000875af11580156125e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061260b91906151a0565b6040517fbf28068b0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff80831660248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063bf28068b90604401600060405180830381600087803b1580156126a057600080fd5b505af11580156126b4573d6000803e3d6000fd5b505050506126c28382614394565b73ffffffffffffffffffffffffffffffffffffffff811660009081526008602052604081206001905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690559392505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314612769576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805461ffff92831668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9484166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff96851664010000000002969096167fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff97851662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000090931694909816939093171794909416949094179190911716919091179055565b6000805460ff16156128b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156128f5576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff16331461297a576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080600061298887613aa6565b925092509250846129a25761299d8684615099565b6129ac565b6129ac8684614fec565b935060008515612b045769021e19e0c9bab24000008510612a15576129d583603689901c615004565b6129e3603686901c84615004565b6129ed9190614fec565b603686901c6129fc8585615004565b612a069190615004565b612a109190615041565b612a52565b612a1f8388615004565b612a298584615004565b612a339190614fec565b85612a3e8585615004565b612a489190615004565b612a529190615041565b6040517fbf28068b0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff8a811660248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063bf28068b90604401600060405180830381600087803b158015612ae757600080fd5b505af1158015612afb573d6000803e3d6000fd5b50505050612d9f565b60008484612b128583615004565b612b1c9190615041565b612b269190615099565b60015490915060009061271090612b419061ffff1684615004565b612b4b9190615041565b905073ffffffffffffffffffffffffffffffffffffffff8a1663d1660f997f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000084612bb6878f614fec565b612bc09190614fec565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b158015612c3457600080fd5b505af1158015612c48573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ca9505e4838b612c949190614fec565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815260048101919091526024810184905260006044820152606401600060405180830381600087803b158015612cf357600080fd5b505af1158015612d07573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d9a9190614fa4565b925050505b6040517f16128211000000000000000000000000000000000000000000000000000000008152600481018690526024810182905273ffffffffffffffffffffffffffffffffffffffff891690631612821190604401600060405180830381600087803b158015612e0e57600080fd5b505af1158015612e22573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055509498975050505050505050565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff16158015612eac57506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b15612ee3576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff1615612f25576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055612f5a81613f56565b50600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b60035473ffffffffffffffffffffffffffffffffffffffff163314612fd6576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517ff62005acebe9b616aefb5f248b48f5e89f28437b27d1eebc0b2d911209f297af90600090a250565b60035473ffffffffffffffffffffffffffffffffffffffff163314613096576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600755565b60035473ffffffffffffffffffffffffffffffffffffffff1633146130ec576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613193576001805461ffff83167e01000000000000000000000000000000000000000000000000000000000000027dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790555050565b600061319e836135a5565b9050806131d7576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000908152600460205260409020805473ffffffffffffffffffffffffffffffffffffffff1675ffff000000000000000000000000000000000000000060a084901b161790555050565b60035473ffffffffffffffffffffffffffffffffffffffff163314613272576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61111f81614467565b60035473ffffffffffffffffffffffffffffffffffffffff1633146132cc576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805460ff90921662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff909216919091179055565b60005460ff1615613373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156133b5576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff16331461343a576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061344583613541565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260026020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055905061349c8282614394565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b60008082600114156135275750506001547f0000000000000000000000000000000000000000000000000000000000000000927e0100000000000000000000000000000000000000000000000000000000000090910461ffff169150565b50506000908152600460205260409020549060a082901c90565b73ffffffffffffffffffffffffffffffffffffffff80821660009081526002602052604090205416806135a0576040517fb5ba4c4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146136255773ffffffffffffffffffffffffffffffffffffffff8216600090815260066020526040902054613628565b60015b92915050565b6000613639826135a5565b73ffffffffffffffffffffffffffffffffffffffff909316600090815260086020526040902080549319939093169092555050565b8080156136c657507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b15613828576040517fd1660f9900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301526044820184905286169063d1660f9990606401600060405180830381600087803b15801561376357600080fd5b505af1158015613777573d6000803e3d6000fd5b50506040517f5869dba800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690527f0000000000000000000000000000000000000000000000000000000000000000169250635869dba89150604401600060405180830381600087803b15801561380b57600080fd5b505af115801561381f573d6000803e3d6000fd5b505050506138b9565b6040517fd1660f9900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301526044820184905286169063d1660f9990606401600060405180830381600087803b1580156138a057600080fd5b505af11580156138b4573d6000803e3d6000fd5b505050505b5050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261395590859061455b565b50505050565b60025b8181116138b95781811615613a2d576000613978826134c9565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529192506000918316906370a0823190602401602060405180830381865afa1580156139eb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a0f9190614fa4565b90506002811115613a2a57613a2a878388600185038961366e565b50505b60011b61395e565b73ffffffffffffffffffffffffffffffffffffffff811660009081526008602052604081205490613a6582614667565b60005490915062010000900460ff16811115613aa1576000613a86836146a7565b613a91906001614fec565b905061395584848460008561470b565b505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff16631afbb7a46040518163ffffffff1660e01b8152600401602060405180830381865afa158015613af6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b1a9190614fa4565b92508373ffffffffffffffffffffffffffffffffffffffff166317d11a156040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b8b9190614fa4565b91507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bf8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c1c9190614fa4565b929491935050565b60005460ff16613c90576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610bd0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6040805173ffffffffffffffffffffffffffffffffffffffff8681166024830152604480830186905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b30000000000000000000000000000000000000000000000000000000017905291517f1cff79cd000000000000000000000000000000000000000000000000000000008152600092861691631cff79cd91613dc6918a91600401615103565b6000604051808303816000875af1925050508015613e2457506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052613e219190810190615132565b60015b613e2d57613e61565b80511580613e50575080806020019051810190613e4a919061507c565b15156001145b15613e5f576001915050613e9d565b505b8115613e99576040517f76e3e29c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060005b95945050505050565b6000613eb1826135a5565b9050801580613ec35750600754811615155b15613efa576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83166000908152600860205260409020548116613aa15773ffffffffffffffffffffffffffffffffffffffff83166000908152600860205260409020805482179055505050565b60015473ffffffffffffffffffffffffffffffffffffffff8281166000908152600860205260408120546a010000000000000000000090930490911691908080613f9f86611122565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526127108202600482015273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350908716915063f9a6503090604401602060405180830381865afa15801561403a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061405e9190614fa4565b9250614069846146a7565b6001019150506000806000805b848110156142a157801561408f5760018186031b614092565b60015b935086841615614299576000806140a8866134c9565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8e811660048301529294509092506000918416906370a0823190602401602060405180830381865afa15801561411d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141419190614fa4565b9050600181111561428c576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff848116602483015261ffff841691908d169063f9a6503090604401602060405180830381865afa1580156141c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141ea9190614fa4565b6141f49190615004565b6141fe9087614fec565b95508886106142875760006142128b614667565b60005490915062010000900460ff16811115614249576142448d8c836001891561423e57898e0361470b565b8d61470b565b614278565b85156142785773ffffffffffffffffffffffffffffffffffffffff8d1660009081526008602052604090208b90555b50505050505050505050505050565b614295565b98861898600194505b5050505b600101614076565b506040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005460ff1615614341576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613cdb3390565b73ffffffffffffffffffffffffffffffffffffffff821615806143dd575073ffffffffffffffffffffffffffffffffffffffff8281166000908152600260205260409020541615155b15614414576040517f9e59609e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff918216600090815260026020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001691909216179055565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260066020526040902054156144c4576040517f2e5a5c7700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61010060055410614501576040517f1cbbe18500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005805473ffffffffffffffffffffffffffffffffffffffff83166000818152600660209081526040808320600190951b9485905584835260049091528120919091558254919290614552836151bd565b91905055505050565b60006145bd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166148799092919063ffffffff16565b805190915015613aa157808060200190518101906145db919061507c565b613aa1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610bd0565b60008060005b6101008110156146a0576001811b91508382161561468c578260010192505b838210614698576146a0565b60010161466d565b5050919050565b600081600114156146ba57506000919050565b61010060015b60016146cc8284614fec565b901c92506001831b848116158015906146e75750600185851c145b156146f257506146a0565b84811061470157839250614705565b8391505b506146c0565b815b81811015614846576001811b8581161561483d57600061472c826134c9565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529192506000918316906370a0823190602401602060405180830381865afa15801561479f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147c39190614fa4565b90506001811161483a57600054978318977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9097019660ff6201000090910416871161483a5750505073ffffffffffffffffffffffffffffffffffffffff86166000908152600860205260409020859055506138b9565b50505b5060010161470d565b506040517f53275fcb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606148888484600085614892565b90505b9392505050565b606082471015614924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610bd0565b843b61498c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610bd0565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516149b591906151f6565b60006040518083038185875af1925050503d80600081146149f2576040519150601f19603f3d011682016040523d82523d6000602084013e6149f7565b606091505b5091509150614a07828286614a12565b979650505050505050565b60608315614a2157508161488b565b825115614a315782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd09190614e5b565b73ffffffffffffffffffffffffffffffffffffffff8116811461111f57600080fd5b600060208284031215614a9957600080fd5b813561488b81614a65565b60008060408385031215614ab757600080fd5b8235614ac281614a65565b91506020830135614ad281614a65565b809150509250929050565b600060208284031215614aef57600080fd5b5035919050565b8035600381106135a057600080fd5b801515811461111f57600080fd5b600080600080600080600060e0888a031215614b2e57600080fd5b8735614b3981614a65565b9650614b4760208901614af6565b9550604088013594506060880135614b5e81614a65565b93506080880135614b6e81614a65565b925060a0880135915060c0880135614b8581614b05565b8091505092959891949750929550565b60008060008060808587031215614bab57600080fd5b8435614bb681614a65565b93506020850135614bc681614a65565b92506040850135614bd681614a65565b9396929550929360600135925050565b60008060008060808587031215614bfc57600080fd5b84359350614c0c60208601614af6565b93969395505050506040820135916060013590565b600080600080600060a08688031215614c3957600080fd5b8535614c4481614a65565b94506020860135614c5481614a65565b93506040860135614c6481614a65565b94979396509394606081013594506080013592915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614cf257614cf2614c7c565b604052919050565b600067ffffffffffffffff821115614d1457614d14614c7c565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600080600060608486031215614d5557600080fd5b8335614d6081614a65565b92506020840135614d7081614a65565b9150604084013567ffffffffffffffff811115614d8c57600080fd5b8401601f81018613614d9d57600080fd5b8035614db0614dab82614cfa565b614cab565b818152876020838501011115614dc557600080fd5b816020840160208301376000602083830101528093505050509250925092565b60005b83811015614e00578181015183820152602001614de8565b838111156139555750506000910152565b60008151808452614e29816020860160208601614de5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061488b6020830184614e11565b60008060408385031215614e8157600080fd5b823591506020830135614ad281614a65565b803561ffff811681146135a057600080fd5b600080600080600060a08688031215614ebd57600080fd5b614ec686614e93565b9450614ed460208701614e93565b9350614ee260408701614e93565b9250614ef060608701614e93565b9150614efe60808701614e93565b90509295509295909350565b600080600060608486031215614f1f57600080fd5b8335614f2a81614a65565b9250602084013591506040840135614f4181614b05565b809150509250925092565b60008060408385031215614f5f57600080fd5b8235614f6a81614a65565b9150614f7860208401614e93565b90509250929050565b600060208284031215614f9357600080fd5b813560ff8116811461488b57600080fd5b600060208284031215614fb657600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115614fff57614fff614fbd565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561503c5761503c614fbd565b500290565b600082615077577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60006020828403121561508e57600080fd5b815161488b81614b05565b6000828210156150ab576150ab614fbd565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600080604083850312156150f257600080fd5b505080516020909101519092909150565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015260006148886040830184614e11565b60006020828403121561514457600080fd5b815167ffffffffffffffff81111561515b57600080fd5b8201601f8101841361516c57600080fd5b805161517a614dab82614cfa565b81815285602083850101111561518f57600080fd5b613e9d826020830160208601614de5565b6000602082840312156151b257600080fd5b815161488b81614a65565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156151ef576151ef614fbd565b5060010190565b60008251615208818460208701614de5565b919091019291505056fea26469706673582212209d39bb9d4972b515acdad1ffb757acd15e103ca6ee762f88a6382b36243734ba64736f6c634300080a00336101406040523480156200001257600080fd5b5060405162005e9738038062005e97833981016040819052620000359162000198565b60016000556001600160a01b0383166200006257604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038316608081905260408051636f307dc360e01b81529051636f307dc3916004808201926020929091908290030181865afa158015620000ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d39190620001ea565b6001600160a01b031660a0816001600160a01b031681525050826001600160a01b0316634f0e0ef36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200012b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001519190620001ea565b6001600160a01b0390811660c0529190911660e0819052151561010052151561012052506200020f565b80516001600160a01b03811681146200019357600080fd5b919050565b600080600060608486031215620001ae57600080fd5b620001b9846200017b565b9250620001c9602085016200017b565b915060408401518015158114620001df57600080fd5b809150509250925092565b600060208284031215620001fd57600080fd5b62000208826200017b565b9392505050565b60805160a05160c05160e0516101005161012051615a86620004116000396000818161061101528181612fb5015261481f01526000818161031701528181610dde015281816144f901526146e5015260008181610557015281816146a901526147a901526000818161034b0152818161387d015261392d01526000818161047301528181611bfe0152818161274f0152818161280d0152818161366a01526137dd015260008181610665015281816109d801528181610b0301528181610bd501528181610cdd01528181610e6501528181610fe30152818161114e0152818161120e0152818161132e015281816114510152818161162b01528181611708015281816117e0015281816119e501528181611b1201528181611d9501528181611ed5015281816120040152818161216801528181612290015281816123c601528181612568015281816126390152818161266f0152818161293d01528181612a2101528181612a8a01528181612bde01528181612d2601528181612e6801528181612ec2015281816130a10152818161311b015281816131b401528181613341015281816134c10152818161358a0152818161372f01528181613a1a01528181613b2e01528181613dbb015281816142200152818161432801528181614492015281816148e7015281816149e801528181614aae0152614d8f0152615a866000f3fe6080604052600436106102695760003560e01c8063860aefcf11610153578063c7de38a6116100cb578063dfd594651161007f578063eb9606df11610064578063eb9606df1461081e578063f9eaee0d1461083e578063ffd9b9071461085e57600080fd5b8063dfd59465146107de578063e1f21c67146107fe57600080fd5b8063cff0ab96116100b0578063cff0ab96146106ef578063d9ccbec114610783578063dcf65482146107be57600080fd5b8063c7de38a6146106a7578063caa5c23f146106dc57600080fd5b80639c55a05411610122578063b55bb84b11610107578063b55bb84b14610633578063c12c21c014610653578063c690908a1461068757600080fd5b80639c55a054146105df578063b1836d32146105ff57600080fd5b8063860aefcf146104db5780639408b63f146105455780639b67ab30146105795780639be0536a146105bd57600080fd5b80635d91a0e0116101e65780636d19b486116101b55780637071b7c51161019a5780637071b7c51461049557806379c0ef91146104a857806382871ace146104c857600080fd5b80636d19b486146104415780636f307dc31461046157600080fd5b80635d91a0e0146103e85780635f73fbec146103fb578063601d66f61461040e5780636c8f225d1461042e57600080fd5b80633d9287fa1161023d5780635019e20a116102225780635019e20a1461039257806354fd4d50146103b257806359781034146103d557600080fd5b80633d9287fa146103055780634f0e0ef31461033957600080fd5b8062842b571461026e578063256ac915146102905780632a7ba1f7146102c55780632b7c7b11146102e5575b600080fd5b34801561027a57600080fd5b5061028e6102893660046151bf565b61087e565b005b34801561029c57600080fd5b506102b06102ab3660046151f8565b61098e565b60405190151581526020015b60405180910390f35b3480156102d157600080fd5b5061028e6102e0366004615215565b610a61565b3480156102f157600080fd5b5061028e610300366004615215565b610c3b565b34801561031157600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561034557600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102bc565b34801561039e57600080fd5b5061028e6103ad3660046151f8565b610d6a565b3480156103be57600080fd5b506103c7600281565b6040519081526020016102bc565b61028e6103e336600461522e565b61108c565b61028e6103f63660046152bb565b611275565b61028e610409366004615340565b611589565b34801561041a57600080fd5b5061028e6104293660046153d8565b6117de565b61028e61043c36600461541b565b611900565b34801561044d57600080fd5b506102b061045c3660046151f8565b611c31565b34801561046d57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b61028e6104a336600461546e565b611c60565b3480156104b457600080fd5b5061036d6104c3366004615215565b611f3e565b61028e6104d63660046152bb565b611f4b565b3480156104e757600080fd5b5060025461051c906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041682565b604080516fffffffffffffffffffffffffffffffff9384168152929091166020830152016102bc565b34801561055157600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561058557600080fd5b506004546040805167ffffffffffffffff608084901c1681526fffffffffffffffffffffffffffffffff9092166020830152016102bc565b3480156105c957600080fd5b506105d261227d565b6040516102bc91906154e2565b3480156105eb57600080fd5b5061028e6105fa36600461553c565b61228e565b34801561060b57600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561063f57600080fd5b5061028e61064e3660046151f8565b6123c4565b34801561065f57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561069357600080fd5b5061028e6106a23660046151f8565b6124c6565b3480156106b357600080fd5b506106c76106c23660046151f8565b612668565b604080519283526020830191909152016102bc565b61028e6106ea366004615557565b61289b565b3480156106fb57600080fd5b5060015461074e906fffffffffffffffffffffffffffffffff811690700100000000000000000000000000000000810460ff169071010000000000000000000000000000000000900464ffffffffff1683565b604080516fffffffffffffffffffffffffffffffff9094168452911515602084015264ffffffffff16908201526060016102bc565b34801561078f57600080fd5b506102b061079e366004615599565b600360209081526000928352604080842090915290825290205460ff1681565b3480156107ca57600080fd5b5061028e6107d93660046151f8565b612a88565b3480156107ea57600080fd5b506103c76107f93660046151f8565b612b86565b34801561080a57600080fd5b5061028e61081936600461522e565b612c6d565b34801561082a57600080fd5b5061028e6108393660046155c7565b612ec0565b34801561084a57600080fd5b506102b06108593660046151f8565b613057565b34801561086a57600080fd5b5061028e6108793660046155ee565b6131b2565b600260005414156108f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b6002600090815573ffffffffffffffffffffffffffffffffffffffff8316808252600360209081526040808420338086529083529381902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081527f9b3258bc4904fd6426b99843e206c6c7cdb1fd0f040121c25b71dafbb3851ee0910160405180910390a350506001600055565b6040517f055ee9b500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063055ee9b590602401602060405180830381865afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a43919061560b565b73ffffffffffffffffffffffffffffffffffffffff16141592915050565b60026000541415610ace576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610b5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b83919061560b565b9050610b903382846132eb565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906395373018906024015b600060405180830381600087803b158015610c1a57600080fd5b505af1158015610c2e573d6000803e3d6000fd5b5050600160005550505050565b60026000541415610ca8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610d39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5d919061560b565b9050610b90338284613411565b60026000541415610dd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000557f000000000000000000000000000000000000000000000000000000000000000015610e34576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610ec1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee5919061560b565b33600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915290205490915060ff16610f52576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f5d82613583565b5090508015610f98576040517ff713841e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b15801561102757600080fd5b505af115801561103b573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692503391507f93c70cc9715bef0d83edf2095f3595402279d274f402a73ffc17f1bcb19d863d90600090a35050600160005550565b600260005414156110f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611106613875565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063e958b70490602401602060405180830381865afa158015611197573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bb919061560b565b90506111c9848285856139b7565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401600060405180830381600087803b15801561125257600080fd5b505af1158015611266573d6000803e3d6000fd5b50506001600055505050505050565b600260005414156112e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611375573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611399919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166113e8576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806113f483613583565b915091508161142f576040517f1fdd676f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611437613875565b831561144d5761144d85858b8660016000613ae3565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632362a2d88b600185338e8e8e6040518863ffffffff1660e01b81526004016114b59796959493929190615663565b6020604051808303816000875af11580156114d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f891906156bf565b90508873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f7dfecd8419723a9d3954585a30c2a270165d70aafa146c11c1e1b88ae14390648460405161157091815260200190565b60405180910390a4505060016000555050505050505050565b600260005414156115f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ab919061560b565b90506116b5613875565b81156116cb576116cb8383338460016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d89061174a903390600090819083908d908d908d90600401615663565b6020604051808303816000875af1158015611769573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178d91906156bf565b5060405173ffffffffffffffffffffffffffffffffffffffff87169033907f460ad03b1cf79b1d64d3aefa28475f110ab66e84649c52bb41ed796b9b39198190600090a35050600160005550505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611849573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118d1576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff90811670010000000000000000000000000000000002911617600255565b6002600054141561196d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000908155606461198461ffff851687615707565b61198e9190615744565b9050611999816144f7565b6119a2816145e8565b6119ab84614668565b6119b3613875565b6040517f172c48c7000000000000000000000000000000000000000000000000000000008152600060048201819052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a64919061577f565b61ffff169150611a789050816127106157ae565b611a829083615707565b611a8c8288615707565b11611ac3576040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff86811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611b5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b81919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638587604051611bef92919091825261ffff16602082015260400190565b60405180910390a3611c2386827f00000000000000000000000000000000000000000000000000000000000000008a6139b7565b505060016000555050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526006602052604081205415155b92915050565b60026000541415611ccd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611cdb856144f7565b611ce484614668565b611ced856145e8565b600154700100000000000000000000000000000000900460ff1615611d3e576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d46613875565b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff85811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611de0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e04919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638885604051611e7292919091825261ffff16602082015260400190565b60405180910390a38215611e9057611e908484878460006001613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015611f1957600080fd5b505af1158015611f2d573d6000803e3d6000fd5b505060016000555050505050505050565b6000611c5a60058361480f565b60026000541415611fb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa15801561204b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206f919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166120be576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120c661481b565b6120fc576040517f7e52ccb400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061210782612668565b509050612112613875565b82156121285761212884848a8560016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d8906121aa908c90600290879033908f908f908f90600401615663565b6020604051808303816000875af11580156121c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ed91906156bf565b90508773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167ffada13ff2d5e1a1d9da37ad4a4130893b34e3c69c32b17f87ec31fd661b867078460405161226591815260200190565b60405180910390a45050600160005550505050505050565b6060612289600561486b565b905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612381576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561242f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612453919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146124b7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614878565b5050565b60026000541415612533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156125c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e8919061560b565b90506125f4818361489a565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401610c00565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126fc919061560b565b905060008061270b8387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156127a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127c991906156bf565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015291965061271091851690637afb010490604401602060405180830381865afa158015612863573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061288791906156bf565b6128919190615744565b9350505050915091565b60026000541415612908576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129bd919061560b565b90506129c7613875565b8115612a7e576129dc83833384600080613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015612a6557600080fd5b505af1158015612a79573d6000803e3d6000fd5b505050505b5050600160005550565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612af3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b17919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b7b576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614c92565b600080612b9283612668565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152919350600092507f000000000000000000000000000000000000000000000000000000000000000090911690633192195c906024016040805180830381865afa158015612c26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4a91906157c5565b9150819050612c5b61271084615707565b612c659190615744565b949350505050565b60026000541415612cda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063fdd5764590602401602060405180830381865afa158015612d6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d91919061560b565b73ffffffffffffffffffffffffffffffffffffffff161480612dd7575073ffffffffffffffffffffffffffffffffffffffff831660009081526006602052604090205415155b15612e0e576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612eac57600080fd5b505af1158015611c23573d6000803e3d6000fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f4f919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612fb3576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000061300a576040517f50dd11fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805464ffffffffff90921671010000000000000000000000000000000000027fffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffffff909216919091179055565b6040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063f67c5bd090602401602060405180830381865afa1580156130e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061310c91906156bf565b905080158015906131ab5750807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015613184573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a891906156bf565b16155b9392505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561321d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613241919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146132a5576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018054911515700100000000000000000000000000000000027fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff909216919091179055565b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600060448301819052917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561338c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133b091906156bf565b90506133bb816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f98274bf834d179ee08dc0604071b0dc90b54731bd5f725a5a96a39a86bce025a8360405161340391815260200190565b60405180910390a250505050565b61341a816144f7565b600154700100000000000000000000000000000000900460ff161561346b576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600160448301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561350c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061353091906156bf565b905061353b816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f9cac51154cc0d835e2f9c9d1f59a9344588cee107f4203bf58a8c797e3a58c458360405161340391815260200190565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613617919061560b565b90506000806136268387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156136c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136e491906156bf565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529195506000917f00000000000000000000000000000000000000000000000000000000000000001690633192195c906024016040805180830381865afa158015613775573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061379991906157c5565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350600092506127109187169063f9a6503090604401602060405180830381865afa158015613837573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061385b91906156bf565b6138659190615707565b9092109794965093945050505050565b34156139b5577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156138e357600080fd5b505af11580156138f7573d6000803e3d6000fd5b50506040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201523460248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16935063a9059cbb925060440190506020604051808303816000875af115801561398f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139b391906157e9565b505b565b6139c084614cb4565b6040517f830aa74500000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f0000000000000000000000000000000000000000000000000000000000000000169063830aa74590608401600060405180830381600087803b158015613a5e57600080fd5b505af1158015613a72573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fa32435755c235de2976ed44a75a2f85cb01faf0c894f639fe0c32bb9455fea8f83604051613ad591815260200190565b60405180910390a350505050565b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301523060248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b158015613b7257600080fd5b505af1158015613b86573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff871692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a28460005b8181101561441d5736888883818110613bea57613bea615806565b9050602002810190613bfc9190615835565b90506004613c0d6020830183615873565b90501015613c47576040517fe2b0e50600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b30613c5560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16141561421c578415613ca9576040517f5fb9107f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613cb86020830183615873565b613cc1916158d8565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167f59781034000000000000000000000000000000000000000000000000000000001415613e3c5760008080613d1e6020860186615873565b613d2c916004908290615920565b810190613d39919061522e565b925092509250613e34838c73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614613e2b576040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015613e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e26919061560b565b613e2d565b8b5b84846139b7565b505050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2b7c7b11000000000000000000000000000000000000000000000000000000001415613ec757600194506000613e996020840184615873565b613ea7916004908290615920565b810190613eb49190615215565b9050613ec1898983613411565b50614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2a7ba1f7000000000000000000000000000000000000000000000000000000001415613f80578415613f49576040517fc0b0caa800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613f586020840184615873565b613f66916004908290615920565b810190613f739190615215565b9050613ec18989836132eb565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f233a8caa0000000000000000000000000000000000000000000000000000000014156140e457600080613fda6020850185615873565b613fe8916004908290615920565b810190613ff5919061594a565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c8116600483015292945090925082918416906370a0823190602401602060405180830381865afa158015614069573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061408d91906156bf565b10156140dd576040517fa5ac537300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016108e7565b5050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fc690908a00000000000000000000000000000000000000000000000000000000141561416457600061413d6020840184615873565b61414b916004908290615920565b81019061415891906151f8565b9050613ec1888261489a565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f23e27a640000000000000000000000000000000000000000000000000000000014156141e45760006141bd6020840184615873565b6141cb916004908290615920565b8101906141d891906151f8565b9050613ec18882614d42565b6040517f1e9e7e7a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50614414565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff68754361426760208501856151f8565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156142d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142f4919061560b565b73ffffffffffffffffffffffffffffffffffffffff16148061436d575073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001661435560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16145b156143a4576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6144126143b46020830183615873565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506143f69250505060208401846151f8565b73ffffffffffffffffffffffffffffffffffffffff1690614e39565b505b50600101613bcf565b506040517f60c8e8938c9a0c0d88a98d6f1c562ce68077e12bf3edb8047378f2f736cb45b490600090a16040517fe1998cf900000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff86811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b1580156144d657600080fd5b505af11580156144ea573d6000803e3d6000fd5b5050505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006139b3576001546fffffffffffffffffffffffffffffffff9081169081146124c257600454608081901c906fffffffffffffffffffffffffffffffff16600067ffffffffffffffff8316431461456e578461458a565b61458a6fffffffffffffffffffffffffffffffff831686615976565b9050838111156145c6576040517f675f1a5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff81164360801b176004555050505050565b6002546fffffffffffffffffffffffffffffffff16811080614631575060025470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681115b156139b3576040517fce16799400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61467061481b565b156146a7576040517f63fc31c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1615614806577f0000000000000000000000000000000000000000000000000000000000000000801561472657503373ffffffffffffffffffffffffffffffffffffffff821614155b1561475d576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600160248301527f00000000000000000000000000000000000000000000000000000000000000001690639dc29fac90604401600060405180830381600087803b1580156147ed57600080fd5b505af1158015614801573d6000803e3d6000fd5b505050505b6139b381614cb4565b60006131ab8383614e7b565b60007f0000000000000000000000000000000000000000000000000000000000000000801561228957505060015471010000000000000000000000000000000000900464ffffffffff1642101590565b606060006131ab83614ea5565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f01565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561492b57600080fd5b505af115801561493f573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527fdf498aa1c340e992665d6fb4f3be8436d452c45a630cb6d7fab7963da39bac8793500190505b60405180910390a15050565b6040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600091829160019183917f00000000000000000000000000000000000000000000000000000000000000001690638991b2f190602401602060405180830381865afa158015614a2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a5391906156bf565b90505b808211614c895780821615614c7d576040517fe75538c700000000000000000000000000000000000000000000000000000000815260048101839052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e75538c7906024016040805180830381865afa158015614af4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b18919061577f565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529294509092506000918416906370a0823190602401602060405180830381865afa158015614b8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bb191906156bf565b90506001811115614c79576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff8481166024830152600091908b169063f9a6503090604401602060405180830381865afa158015614c33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c5791906156bf565b978801979050614c6b61ffff841682615707565b614c759088615976565b9650505b5050505b600182901b9150614a56565b50509250929050565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f50565b3373ffffffffffffffffffffffffffffffffffffffff821614801590614d0b575033600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16155b156139b3576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b158015614dd357600080fd5b505af1158015614de7573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527f69db9e9764da61b6681b89fb0f5be018506e0342036e56b59c3015a620d60977935001905061498d565b60606131ab83836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250615043565b6000826000018281548110614e9257614e92615806565b9060005260206000200154905092915050565b606081600001805480602002602001604051908101604052809291908181526020018280548015614ef557602002820191906000526020600020905b815481526020019060010190808311614ee1575b50505050509050919050565b6000818152600183016020526040812054614f4857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611c5a565b506000611c5a565b60008181526001830160205260408120548015615039576000614f746001836157ae565b8554909150600090614f88906001906157ae565b9050818114614fed576000866000018281548110614fa857614fa8615806565b9060005260206000200154905080876000018481548110614fcb57614fcb615806565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080614ffe57614ffe61598e565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611c5a565b6000915050611c5a565b6060612c65848460008585843b6150b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108e7565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516150df91906159ed565b60006040518083038185875af1925050503d806000811461511c576040519150601f19603f3d011682016040523d82523d6000602084013e615121565b606091505b509150915061513182828661513c565b979650505050505050565b6060831561514b5750816131ab565b82511561515b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e791906159ff565b73ffffffffffffffffffffffffffffffffffffffff811681146139b357600080fd5b80151581146139b357600080fd5b600080604083850312156151d257600080fd5b82356151dd8161518f565b915060208301356151ed816151b1565b809150509250929050565b60006020828403121561520a57600080fd5b81356131ab8161518f565b60006020828403121561522757600080fd5b5035919050565b60008060006060848603121561524357600080fd5b833561524e8161518f565b9250602084013561525e8161518f565b929592945050506040919091013590565b60008083601f84011261528157600080fd5b50813567ffffffffffffffff81111561529957600080fd5b6020830191508360208260051b85010111156152b457600080fd5b9250929050565b60008060008060008060a087890312156152d457600080fd5b86356152df8161518f565b955060208701356152ef8161518f565b9450604087013593506060870135615306816151b1565b9250608087013567ffffffffffffffff81111561532257600080fd5b61532e89828a0161526f565b979a9699509497509295939492505050565b60008060008060006080868803121561535857600080fd5b85356153638161518f565b945060208601359350604086013561537a816151b1565b9250606086013567ffffffffffffffff81111561539657600080fd5b6153a28882890161526f565b969995985093965092949392505050565b80356fffffffffffffffffffffffffffffffff811681146153d357600080fd5b919050565b600080604083850312156153eb57600080fd5b6153f4836153b3565b9150615402602084016153b3565b90509250929050565b61ffff811681146139b357600080fd5b6000806000806080858703121561543157600080fd5b8435935060208501356154438161518f565b925060408501356154538161540b565b915060608501356154638161540b565b939692955090935050565b60008060008060006080868803121561548657600080fd5b8535945060208601356154988161518f565b9350604086013567ffffffffffffffff8111156154b457600080fd5b6154c08882890161526f565b90945092505060608601356154d48161540b565b809150509295509295909350565b6020808252825182820181905260009190848201906040850190845b8181101561553057835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016154fe565b50909695505050505050565b60006020828403121561554e57600080fd5b6131ab826153b3565b6000806020838503121561556a57600080fd5b823567ffffffffffffffff81111561558157600080fd5b61558d8582860161526f565b90969095509350505050565b600080604083850312156155ac57600080fd5b82356155b78161518f565b915060208301356151ed8161518f565b6000602082840312156155d957600080fd5b813564ffffffffff811681146131ab57600080fd5b60006020828403121561560057600080fd5b81356131ab816151b1565b60006020828403121561561d57600080fd5b81516131ab8161518f565b6003811061565f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b73ffffffffffffffffffffffffffffffffffffffff888116825260e082019061568f602084018a615628565b6040830197909752948616606082015292909416608083015260a082015291151560c09092019190915292915050565b6000602082840312156156d157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561573f5761573f6156d8565b500290565b60008261577a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000806040838503121561579257600080fd5b825161579d8161518f565b60208401519092506151ed8161540b565b6000828210156157c0576157c06156d8565b500390565b600080604083850312156157d857600080fd5b505080516020909101519092909150565b6000602082840312156157fb57600080fd5b81516131ab816151b1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc183360301811261586957600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126158a857600080fd5b83018035915067ffffffffffffffff8211156158c357600080fd5b6020019150368190038213156152b457600080fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156159185780818660040360031b1b83161692505b505092915050565b6000808585111561593057600080fd5b8386111561593d57600080fd5b5050820193919092039150565b6000806040838503121561595d57600080fd5b82356159688161518f565b946020939093013593505050565b60008219821115615989576159896156d8565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60005b838110156159d85781810151838201526020016159c0565b838111156159e7576000848401525b50505050565b600082516158698184602087016159bd565b6020815260008251806020840152615a1e8160408501602087016159bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea2646970667358221220a3f4a705ab580a6ada1e438cd2ee4abc001b62d1d171fce12c41994900fef21664736f6c634300080a003360a06040523480156200001157600080fd5b5060405162005f3d38038062005f3d8339810160408190526200003491620012eb565b826001600160a01b031663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000073573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200009991906200147f565b6001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000d7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000fd91906200147f565b6000805460ff191690556001600160a01b0381166200012f57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200016e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200019491906200147f565b6001600160a01b03908116608052600180546001600160a01b031916918616918217905560408051636f307dc360e01b81529051919250636f307dc39160048083019260209291908290030181865afa158015620001f6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200021c91906200147f565b600260006101000a8154816001600160a01b0302191690836001600160a01b03160217905550826001600160a01b031663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000281573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a791906200147f565b6001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200030b91906200147f565b600080546001600160a01b039290921661010002610100600160a81b0319909216919091179055620003626103e860c86200034b6101f4612710620014bc565b60646200035c60c8612710620014bc565b620005e8565b60408101515160005b81811015620003ee576000836040015182815181106200038f576200038f620014e2565b6020026020010151600001519050620003ae81620007c260201b60201c565b620003e48185604001518481518110620003cc57620003cc620014e2565b60200260200101516020015162000a5e60201b60201c565b506001016200036b565b5060015460408051632630c12f60e01b815290516001600160a01b03909216916311ca4fc29186918491632630c12f9160048083019260209291908290030181865afa15801562000443573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200046991906200147f565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401600060405180830381600087803b158015620004b257600080fd5b505af1158015620004c7573d6000803e3d6000fd5b50506040516001600160a01b03861692507fa8b21f72cb83bce808df32dc2330217d744a1c22f3e9e44e4b11bbf049d37d9d9150600090a2600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000553573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200057991906200147f565b6001600160a01b03167f3f82447be465b0b5a4a9e54c74d5f6ae73f2e9537f2cc1590a340524703d096160405160405180910390a26020820151620005cb90620005c5906002620014f8565b62000bda565b81516020830151620005de919062000dc8565b5050505062001604565b6000620005f68585620014bc565b60015460405163172c48c760e01b81526000600482018190529293506001600160a01b039091169063172c48c7906024016040805180830381865afa15801562000644573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200066a91906200152a565b9150508061ffff168261ffff1614620006be57620006888262000f47565b60025460405161ffff841681526001600160a01b039091169060008051602062005f1d8339815191529060200160405180910390a25b60015460405163944ac59f60e01b815261ffff808a166004830152808916602483015280881660448301528087166064830152851660848201526001600160a01b039091169063944ac59f9060a401600060405180830381600087803b1580156200072857600080fd5b505af11580156200073d573d6000803e3d6000fd5b505050507f2214a403d5f8d049e52eacca974c6dea01a471e41d6a18903bfaf7dbc709741f878787612710620007749190620014bc565b876200078388612710620014bc565b6040805161ffff96871681529486166020860152928516848401529084166060840152909216608082015290519081900360a00190a150505050505050565b6001600160a01b038116620007ea57604051635919af9760e11b815260040160405180910390fd5b62000809816001600160a01b03166200116f60201b620023381760201c565b620008365760405163df4c572d60e01b81526001600160a01b038216600482015260240160405180910390fd5b6040516370a0823160e01b81523060048201526001600160a01b038216906370a0823190602401602060405180830381865afa92505050801562000899575060408051601f3d908101601f19168201909252620008969181019062001564565b60015b620008b75760405163528ca31d60e01b815260040160405180910390fd5b50600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200090c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200093291906200147f565b604051630f9a650360e41b8152670de0b6b3a764000060048201526001600160a01b038381166024830152919091169063f9a6503090604401602060405180830381865afa925050508015620009a7575060408051601f3d908101601f19168201909252620009a49181019062001564565b60015b620009c5576040516367a7cd4360e01b815260040160405180910390fd5b5060015460405163d48bfca760e01b81526001600160a01b0383811660048301529091169063d48bfca790602401600060405180830381600087803b15801562000a0e57600080fd5b505af115801562000a23573d6000803e3d6000fd5b50506040516001600160a01b03841692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a250565b6002546001600160a01b038381169116141562000a8e57604051633b899cf960e01b815260040160405180910390fd5b60015460405163172c48c760e01b8152600060048201819052916001600160a01b03169063172c48c7906024016040805180830381865afa15801562000ad8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000afe91906200152a565b91505061ffff8216158062000b1a57508061ffff168261ffff16115b1562000b39576040516333c6608d60e01b815260040160405180910390fd5b600154604051635385e2a160e11b81526001600160a01b03858116600483015261ffff851660248301529091169063a70bc54290604401600060405180830381600087803b15801562000b8b57600080fd5b505af115801562000ba0573d6000803e3d6000fd5b505060405161ffff851681526001600160a01b038616925060008051602062005f1d833981519152915060200160405180910390a2505050565b600062000be662001175565b6001600160a01b031663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801562000c24573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c4a91906200157e565b50509050600062000c606200117560201b60201c565b6001600160a01b031663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa15801562000c9d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000cc39190620015d5565b915050806001600160801b0316836001600160801b0316101562000cfa576040516309aadd6f60e41b815260040160405180910390fd5b826001600160801b0316826001600160801b03161462000dc35762000d1e62001175565b604051632715681560e21b81526001600160801b03851660048201526001600160a01b039190911690639c55a05490602401600060405180830381600087803b15801562000d6b57600080fd5b505af115801562000d80573d6000803e3d6000fd5b50506040516001600160801b03861681527fa030eec20ae970821387224ec3bb15b4bd22b89bfb86dc4d2b3827aa3d99e48d925060200190505b60405180910390a15b505050565b600062000dd462001175565b6001600160a01b031663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801562000e12573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e3891906200157e565b50509050816001600160801b0316836001600160801b0316118062000e6e5750806001600160801b0316826001600160801b0316115b1562000e8d576040516309aadd6f60e41b815260040160405180910390fd5b62000e9762001175565b60405163300eb37b60e11b81526001600160801b038086166004830152841660248201526001600160a01b03919091169063601d66f690604401600060405180830381600087803b15801562000eec57600080fd5b505af115801562000f01573d6000803e3d6000fd5b5050604080516001600160801b038088168252861660208201527f4d4981437d0211f9e6843eb024d9ada1fa3a99514d4343d4aece106dd11524bb935001905062000dba565b600154600254604051635385e2a160e11b81526001600160a01b03918216600482015261ffff8416602482015291169063a70bc54290604401600060405180830381600087803b15801562000f9b57600080fd5b505af115801562000fb0573d6000803e3d6000fd5b505050506000600160009054906101000a90046001600160a01b03166001600160a01b031663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200100a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001030919062001564565b905060015b8181101562000dc35760015460405163172c48c760e01b81526004810183905260009182916001600160a01b039091169063172c48c7906024016040805180830381865afa1580156200108c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010b291906200152a565b915091508461ffff168161ffff1611156200116457600154604051635385e2a160e11b81526001600160a01b03848116600483015261ffff881660248301529091169063a70bc54290604401600060405180830381600087803b1580156200111957600080fd5b505af11580156200112e573d6000803e3d6000fd5b505060405161ffff881681526001600160a01b038516925060008051602062005f1d833981519152915060200160405180910390a25b505060010162001035565b3b151590565b60015460408051632f7a188160e01b815290516000926001600160a01b031691632f7a18819160048083019260209291908290030181865afa158015620011c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011e691906200147f565b905090565b6001600160a01b03811681146200120157600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b03811182821017156200123f576200123f62001204565b60405290565b604080519081016001600160401b03811182821017156200123f576200123f62001204565b604051601f8201601f191681016001600160401b038111828210171562001295576200129562001204565b604052919050565b80516001600160801b0381168114620012b557600080fd5b919050565b8051620012b581620011eb565b805161ffff81168114620012b557600080fd5b80518015158114620012b557600080fd5b6000806000606084860312156200130157600080fd5b83516200130e81620011eb565b809350506020808501516200132381620011eb565b604086810151919450906001600160401b03808211156200134357600080fd5b9087019060a0828a0312156200135857600080fd5b620013626200121a565b6200136d836200129d565b81526200137c8584016200129d565b8582015283830151828111156200139257600080fd5b8301601f81018b13620013a457600080fd5b805183811115620013b957620013b962001204565b620013c9878260051b016200126a565b818152878101945060069190911b82018701908c821115620013ea57600080fd5b918701915b81831015620014435786838e031215620014095760008081fd5b6200141362001245565b83516200142081620011eb565b81526200142f848a01620012c7565b818a015285529387019391860191620013ef565b838701525062001458905060608401620012ba565b60608201526200146b60808401620012da565b608082015280955050505050509250925092565b6000602082840312156200149257600080fd5b81516200149f81620011eb565b9392505050565b634e487b7160e01b600052601160045260246000fd5b600061ffff83811690831681811015620014da57620014da620014a6565b039392505050565b634e487b7160e01b600052603260045260246000fd5b60006001600160801b0382811684821681151582840482111615620015215762001521620014a6565b02949350505050565b600080604083850312156200153e57600080fd5b82516200154b81620011eb565b91506200155b60208401620012c7565b90509250929050565b6000602082840312156200157757600080fd5b5051919050565b6000806000606084860312156200159457600080fd5b6200159f846200129d565b9250620015af60208501620012da565b9150604084015164ffffffffff81168114620015ca57600080fd5b809150509250925092565b60008060408385031215620015e957600080fd5b620015f4836200129d565b91506200155b602084016200129d565b608051614878620016a56000396000818161033601528181610446015281816107c5015281816108c0015281816109ae01528181610b8301528181610f0a015281816113e1015281816114cf015281816115bb015281816116ab015281816117990152818161187d01528181611ad901528181611bc601528181611cb301528181611da0015281816120090152818161218c015261227901526148786000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80638456cb59116100f9578063dc2b21c111610097578063f0527ac611610071578063f0527ac6146103d7578063f206d32a146103df578063fb1bd8c4146103f2578063ffd9b9071461040557600080fd5b8063dc2b21c11461039e578063e6492d7b146103b1578063eb9606df146103c457600080fd5b8063a50cf2c8116100d3578063a50cf2c814610331578063a70bc54214610358578063b53472ef1461036b578063c12c21c01461037e57600080fd5b80638456cb59146103035780639c55a0541461030b5780639f1c50691461031e57600080fd5b806350e036ff1161016657806354fd4d501161014057806354fd4d50146102b25780635c975abb146102ba5780636f307dc3146102d05780637bccacee146102f057600080fd5b806350e036ff1461027657806352438e541461028c578063526a41e81461029f57600080fd5b80633e7c88d6116101a25780633e7c88d6146102355780633f4ba83a14610248578063456e0742146102505780635094cb4f1461026357600080fd5b806324147708146101c95780632954018c146101de5780632f7a18811461022d575b600080fd5b6101dc6101d7366004614307565b610418565b005b60005461020390610100900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6102036106fe565b6101dc610243366004614334565b610797565b6101dc610892565b6101dc61025e366004614307565b610980565b61020361027136600461436d565b610b36565b61027e610b49565b604051908152602001610224565b6101dc61029a366004614307565b610b55565b6101dc6102ad366004614394565b610edc565b61027e600281565b60005460ff166040519015158152602001610224565b6002546102039073ffffffffffffffffffffffffffffffffffffffff1681565b6101dc6102fe3660046143c2565b6113b3565b6101dc6114a1565b6101dc61031936600461440e565b61158d565b6101dc61032c36600461442b565b61167d565b6102037f000000000000000000000000000000000000000000000000000000000000000081565b6101dc610366366004614334565b61176b565b6101dc610379366004614307565b61184f565b6001546102039073ffffffffffffffffffffffffffffffffffffffff1681565b6101dc6103ac366004614459565b611aab565b6101dc6103bf366004614307565b611b98565b6101dc6103d236600461448f565b611c85565b6101dc611d72565b6101dc6103ed3660046144ac565b611fdb565b6101dc610400366004614307565b61215e565b6101dc61041336600461451d565b61224b565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156104a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c6919061453a565b6104fc576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006105078261233e565b90506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015610578573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059c9190614557565b90508181166106f9576001546040517fa366f496000000000000000000000000000000000000000000000000000000008152918317600483018190529173ffffffffffffffffffffffffffffffffffffffff9091169063a366f49690602401600060405180830381600087803b15801561061557600080fd5b505af1158015610629573d6000803e3d6000fd5b505050506106356106fe565b6040517fffd9b9070000000000000000000000000000000000000000000000000000000081526001600482015273ffffffffffffffffffffffffffffffffffffffff919091169063ffd9b90790602401600060405180830381600087803b15801561069f57600080fd5b505af11580156106b3573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692507ff17b849746e74d7186170c9553d4bbf60b4f8bb1ed81fe50c099b934fb078f059150600090a25b505050565b600154604080517f2f7a1881000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691632f7a18819160048083019260209291908290030181865afa15801561076e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610792919061457b565b905090565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610821573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610845919061453a565b61087b576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108848261241e565b61088e82826127f8565b5050565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa15801561091c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610940919061453a565b610976576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61097e612a15565b565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610a0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2e919061453a565b610a64576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a6d81612af6565b6001546040517f9f5f86ae00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015290911690639f5f86ae90602401600060405180830381600087803b158015610ada57600080fd5b505af1158015610aee573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507f5a0b7d0f9c24b39256e112a0584b4c5ce38d8f1dee2e7c56f15b852604cdc8869150600090a250565b6000610b43600383612cb8565b92915050565b60006107926003612ccb565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610bdf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c03919061453a565b610c39576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610c86576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063fdd5764590602401602060405180830381865afa158015610cf7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1b919061457b565b905073ffffffffffffffffffffffffffffffffffffffff8116610d6a576040517f1170cc2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f6e98e5e400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526000602483015290911690636e98e5e490604401600060405180830381600087803b158015610dde57600080fd5b505af1158015610df2573d6000803e3d6000fd5b50506001546040517f6e98e5e40000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff86811660248301529091169250636e98e5e49150604401600060405180830381600087803b158015610e6a57600080fd5b505af1158015610e7e573d6000803e3d6000fd5b50505050610e96826003612cd590919063ffffffff16565b5060405173ffffffffffffffffffffffffffffffffffffffff8316907fab9f405bf0c19b97f65a7031634db41569cd2f0e0376a610a1e977f9ab22b58f90600090a25050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610f66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8a919061453a565b610fc0576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fc982612af6565b6000806000610fd66106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015611020573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110449190614598565b9250925092506000806110556106fe565b73ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa15801561109e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c291906145e5565b9150915060006110d06106fe565b73ffffffffffffffffffffffffffffffffffffffff16639be0536a6040518163ffffffff1660e01b8152600401600060405180830381865afa15801561111a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526111609190810190614643565b9050600061116c6106fe565b73ffffffffffffffffffffffffffffffffffffffff1663b1836d326040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111da919061453a565b600154604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905192935073ffffffffffffffffffffffffffffffffffffffff909116916311ca4fc2918c918491632630c12f9160048083019260209291908290030181865afa158015611256573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061127a919061457b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156112e757600080fd5b505af11580156112fb573d6000803e3d6000fd5b5050505087156113675761130e87612cf7565b6113188484612f5d565b61132186613152565b60005b82518110156113575761134f83828151811061134257611342614726565b60200260200101516132a3565b600101611324565b50801561136757611367856133c9565b60405173ffffffffffffffffffffffffffffffffffffffff8a16907fa8b21f72cb83bce808df32dc2330217d744a1c22f3e9e44e4b11bbf049d37d9d90600090a2505050505050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561143d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611461919061453a565b611497576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61088e828261357b565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561152b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061154f919061453a565b611585576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61097e6139c3565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611617573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163b919061453a565b611671576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81612cf7565b50565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611707573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172b919061453a565b611761576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61088e8282612f5d565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156117f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611819919061453a565b610884576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156118d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fd919061453a565b611933576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061193e8261233e565b90506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d39190614557565b9050818116156106f9576001546040517fa366f496000000000000000000000000000000000000000000000000000000008152918318600483018190529173ffffffffffffffffffffffffffffffffffffffff9091169063a366f49690602401600060405180830381600087803b158015611a4d57600080fd5b505af1158015611a61573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a2505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611b35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b59919061453a565b611b8f576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81613a83565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611c22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c46919061453a565b611c7c576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81613b3d565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611d0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d33919061453a565b611d69576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a816133c9565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611dfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e20919061453a565b611e56576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ec4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee8919061457b565b60015490915073ffffffffffffffffffffffffffffffffffffffff166311ca4fc2611f116106fe565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff91821660048201529084166024820152604401600060405180830381600087803b158015611f7f57600080fd5b505af1158015611f93573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507f3f82447be465b0b5a4a9e54c74d5f6ae73f2e9537f2cc1590a340524703d09619150600090a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015612065573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612089919061453a565b6120bf576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61271061ffff86161015806120e357506127106120dc8585614784565b61ffff1610155b806120fd57506127106120f68383614784565b61ffff1610155b15612134576040517f0b361d6900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6121578585612145866127106147aa565b85612152866127106147aa565b613c5c565b5050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156121e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061220c919061453a565b612242576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a816132a3565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156122d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122f9919061453a565b61232f576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81613152565b3b151590565b6001546040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063f67c5bd090602401602060405180830381865afa1580156123af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123d39190614557565b90508015806123e25750806001145b15612419576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b73ffffffffffffffffffffffffffffffffffffffff811661246b576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163b6124d6576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024015b60405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8216906370a0823190602401602060405180830381865afa92505050801561257a575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261257791810190614557565b60015b6125b0576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561261e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612642919061457b565b6040517ff9a65030000000000000000000000000000000000000000000000000000000008152670de0b6b3a7640000600482015273ffffffffffffffffffffffffffffffffffffffff8381166024830152919091169063f9a6503090604401602060405180830381865afa9250505080156126f8575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526126f591810190614557565b60015b61272e576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506001546040517fd48bfca700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301529091169063d48bfca790602401600060405180830381600087803b15801561279c57600080fd5b505af11580156127b0573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a250565b60025473ffffffffffffffffffffffffffffffffffffffff8381169116141561284d576040517f3b899cf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f172c48c70000000000000000000000000000000000000000000000000000000081526000600482018190529173ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa1580156128bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128e091906147cd565b91505061ffff821615806128fb57508061ffff168261ffff16115b15612932576040517f33c6608d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015261ffff851660248301529091169063a70bc54290604401600060405180830381600087803b1580156129a957600080fd5b505af11580156129bd573d6000803e3d6000fd5b505060405161ffff8516815273ffffffffffffffffffffffffffffffffffffffff861692507f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650915060200160405180910390a2505050565b60005460ff16612a81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016124cd565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b73ffffffffffffffffffffffffffffffffffffffff8116612b43576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163b612ba9576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024016124cd565b8073ffffffffffffffffffffffffffffffffffffffff1663c12c21c06040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612c2e575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252612c2b9181019061457b565b60015b612c64576040517fe9eddd1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60015473ffffffffffffffffffffffffffffffffffffffff82811691161461088e576040517fe9eddd1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612cc48383613e92565b9392505050565b6000610b43825490565b6000612cc48373ffffffffffffffffffffffffffffffffffffffff8416613ebc565b6000612d016106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015612d4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d6f9190614598565b505090506000612d7d6106fe565b73ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa158015612dc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dea91906145e5565b915050806fffffffffffffffffffffffffffffffff16836fffffffffffffffffffffffffffffffff161015612e4b576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826fffffffffffffffffffffffffffffffff16826fffffffffffffffffffffffffffffffff16146106f957612e7e6106fe565b6040517f9c55a0540000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff8516600482015273ffffffffffffffffffffffffffffffffffffffff9190911690639c55a05490602401600060405180830381600087803b158015612ef957600080fd5b505af1158015612f0d573d6000803e3d6000fd5b50506040516fffffffffffffffffffffffffffffffff861681527fa030eec20ae970821387224ec3bb15b4bd22b89bfb86dc4d2b3827aa3d99e48d925060200190505b60405180910390a1505050565b6000612f676106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015612fb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fd59190614598565b50509050816fffffffffffffffffffffffffffffffff16836fffffffffffffffffffffffffffffffff16118061302e5750806fffffffffffffffffffffffffffffffff16826fffffffffffffffffffffffffffffffff16115b15613065576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61306d6106fe565b6040517f601d66f60000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff80861660048301528416602482015273ffffffffffffffffffffffffffffffffffffffff919091169063601d66f690604401600060405180830381600087803b1580156130f057600080fd5b505af1158015613104573d6000803e3d6000fd5b5050604080516fffffffffffffffffffffffffffffffff8088168252861660208201527f4d4981437d0211f9e6843eb024d9ada1fa3a99514d4343d4aece106dd11524bb9350019050612f50565b600061315c6106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa1580156131a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131ca9190614598565b509150508015158215151461088e576131e16106fe565b6040517fffd9b907000000000000000000000000000000000000000000000000000000008152831515600482015273ffffffffffffffffffffffffffffffffffffffff919091169063ffd9b90790602401600060405180830381600087803b15801561324c57600080fd5b505af1158015613260573d6000803e3d6000fd5b505050507ff97ba903470ff3262b4a68a938fe81def401bac1bd742169d2e8d5c4ed2185d382604051613297911515815260200190565b60405180910390a15050565b73ffffffffffffffffffffffffffffffffffffffff81166132f0576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6132f86106fe565b6040517fb55bb84b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152919091169063b55bb84b90602401600060405180830381600087803b15801561336357600080fd5b505af1158015613377573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841681527fdac9a7995cbc0c0f01d78970fb6fd0b52fe0fe869eb6635e65cc1b5682b8325c925060200190505b60405180910390a150565b60006133d36106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801561341d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134419190614598565b925050508064ffffffffff168264ffffffffff161461088e578164ffffffffff168164ffffffffff16118061347c57508164ffffffffff1642115b156134b3576040517fe4eaca7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134bb6106fe565b6040517feb9606df00000000000000000000000000000000000000000000000000000000815264ffffffffff8416600482015273ffffffffffffffffffffffffffffffffffffffff919091169063eb9606df90602401600060405180830381600087803b15801561352b57600080fd5b505af115801561353f573d6000803e3d6000fd5b505060405164ffffffffff851681527f0b3eb35ba750e7a7e4d26c9eee3d226f4e1f68c5568f4a3d051c94b241b02ac092506020019050613297565b73ffffffffffffffffffffffffffffffffffffffff82166135c8576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82163b61362e576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016124cd565b61363781612af6565b60015473ffffffffffffffffffffffffffffffffffffffff8381169116148061369257506136636106fe565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b806136b7575060015473ffffffffffffffffffffffffffffffffffffffff8281169116145b806136f457506136c56106fe565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b1561372b576040517f727de5c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517fff68754300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063ff68754390602401602060405180830381865afa15801561379c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137c0919061457b565b73ffffffffffffffffffffffffffffffffffffffff1614158061388c57506001546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063fdd5764590602401602060405180830381865afa15801561384f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613873919061457b565b73ffffffffffffffffffffffffffffffffffffffff1614155b156138c3576040517f21ff1e7100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f6e98e5e400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152848116602483015290911690636e98e5e490604401600060405180830381600087803b15801561393857600080fd5b505af115801561394c573d6000803e3d6000fd5b50505050613964826003613faf90919063ffffffff16565b508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4bcbefaef68b99503d502f5a6abe7bca2b183ab8ac55457013c77d084ebd130560405160405180910390a35050565b60005460ff1615613a30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016124cd565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612acc3390565b6001546040517fdc2b21c100000000000000000000000000000000000000000000000000000000815260ff8316600482015273ffffffffffffffffffffffffffffffffffffffff9091169063dc2b21c190602401600060405180830381600087803b158015613af157600080fd5b505af1158015613b05573d6000803e3d6000fd5b505060405160ff841681527f73caacd705657a7d283e48ecf288b73bc517e3aea1bbc9da2fd54a979e8aa950925060200190506133be565b73ffffffffffffffffffffffffffffffffffffffff8116613b8a576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613b926106fe565b6040517fdcf6548200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152919091169063dcf6548290602401600060405180830381600087803b158015613bfd57600080fd5b505af1158015613c11573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841681527f32e53e2e527af8518ae889e5f7e674bc83f7cf68e4cc059aceeaa0e64208b85b925060200190506133be565b6000613c6885856147aa565b6001546040517f172c48c700000000000000000000000000000000000000000000000000000000815260006004820181905292935073ffffffffffffffffffffffffffffffffffffffff9091169063172c48c7906024016040805180830381865afa158015613cdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cff91906147cd565b9150508061ffff168261ffff1614613d6e57613d1a82613fd1565b60025460405161ffff8416815273ffffffffffffffffffffffffffffffffffffffff909116907f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac6509060200160405180910390a25b6001546040517f944ac59f00000000000000000000000000000000000000000000000000000000815261ffff808a1660048301528089166024830152808816604483015280871660648301528516608482015273ffffffffffffffffffffffffffffffffffffffff9091169063944ac59f9060a401600060405180830381600087803b158015613dfd57600080fd5b505af1158015613e11573d6000803e3d6000fd5b505050507f2214a403d5f8d049e52eacca974c6dea01a471e41d6a18903bfaf7dbc709741f878787612710613e4691906147aa565b87613e53886127106147aa565b6040805161ffff96871681529486166020860152928516848401529084166060840152909216608082015290519081900360a00190a150505050505050565b6000826000018281548110613ea957613ea9614726565b9060005260206000200154905092915050565b60008181526001830160205260408120548015613fa5576000613ee06001836147fc565b8554909150600090613ef4906001906147fc565b9050818114613f59576000866000018281548110613f1457613f14614726565b9060005260206000200154905080876000018481548110613f3757613f37614726565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080613f6a57613f6a614813565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610b43565b6000915050610b43565b6000612cc48373ffffffffffffffffffffffffffffffffffffffff8416614296565b6001546002546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015261ffff8416602482015291169063a70bc54290604401600060405180830381600087803b15801561404a57600080fd5b505af115801561405e573d6000803e3d6000fd5b505050506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156140d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140f59190614557565b905060015b818110156106f9576001546040517f172c48c700000000000000000000000000000000000000000000000000000000815260048101839052600091829173ffffffffffffffffffffffffffffffffffffffff9091169063172c48c7906024016040805180830381865afa158015614175573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061419991906147cd565b915091508461ffff168161ffff16111561428c576001546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015261ffff881660248301529091169063a70bc54290604401600060405180830381600087803b15801561422457600080fd5b505af1158015614238573d6000803e3d6000fd5b505060405161ffff8816815273ffffffffffffffffffffffffffffffffffffffff851692507f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650915060200160405180910390a25b50506001016140fa565b60008181526001830160205260408120546142dd57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610b43565b506000610b43565b73ffffffffffffffffffffffffffffffffffffffff8116811461167a57600080fd5b60006020828403121561431957600080fd5b8135612cc4816142e5565b61ffff8116811461167a57600080fd5b6000806040838503121561434757600080fd5b8235614352816142e5565b9150602083013561436281614324565b809150509250929050565b60006020828403121561437f57600080fd5b5035919050565b801515811461167a57600080fd5b600080604083850312156143a757600080fd5b82356143b2816142e5565b9150602083013561436281614386565b600080604083850312156143d557600080fd5b82356143e0816142e5565b91506020830135614362816142e5565b6fffffffffffffffffffffffffffffffff8116811461167a57600080fd5b60006020828403121561442057600080fd5b8135612cc4816143f0565b6000806040838503121561443e57600080fd5b8235614449816143f0565b91506020830135614362816143f0565b60006020828403121561446b57600080fd5b813560ff81168114612cc457600080fd5b64ffffffffff8116811461167a57600080fd5b6000602082840312156144a157600080fd5b8135612cc48161447c565b600080600080600060a086880312156144c457600080fd5b85356144cf81614324565b945060208601356144df81614324565b935060408601356144ef81614324565b925060608601356144ff81614324565b9150608086013561450f81614324565b809150509295509295909350565b60006020828403121561452f57600080fd5b8135612cc481614386565b60006020828403121561454c57600080fd5b8151612cc481614386565b60006020828403121561456957600080fd5b5051919050565b8051612419816142e5565b60006020828403121561458d57600080fd5b8151612cc4816142e5565b6000806000606084860312156145ad57600080fd5b83516145b8816143f0565b60208501519093506145c981614386565b60408501519092506145da8161447c565b809150509250925092565b600080604083850312156145f857600080fd5b8251614603816143f0565b6020840151909250614362816143f0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000602080838503121561465657600080fd5b825167ffffffffffffffff8082111561466e57600080fd5b818501915085601f83011261468257600080fd5b81518181111561469457614694614614565b8060051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f830116810181811085821117156146d7576146d7614614565b6040529182528482019250838101850191888311156146f557600080fd5b938501935b8285101561471a5761470b85614570565b845293850193928501926146fa565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061ffff8083168185168083038211156147a1576147a1614755565b01949350505050565b600061ffff838116908316818110156147c5576147c5614755565b039392505050565b600080604083850312156147e057600080fd5b82516147eb816142e5565b602084015190925061436281614324565b60008282101561480e5761480e614755565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea264697066735822122046c364b67d38a3dd85b57e027716324d90dd1df102f265f0a0e2697babdb3f3b64736f6c634300080a003394525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650a2646970667358221220ba3de2dcb9f023a5736a3f9723aeec3890f2cd4ffb54e242d4490d057d75b76764736f6c634300080a0033"; - -type CurveV1AdapterBaseMetaPoolTestConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: CurveV1AdapterBaseMetaPoolTestConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class CurveV1AdapterBaseMetaPoolTest__factory extends ContractFactory { - constructor(...args: CurveV1AdapterBaseMetaPoolTestConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - overrides || {} - ) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): CurveV1AdapterBaseMetaPoolTest { - return super.attach(address) as CurveV1AdapterBaseMetaPoolTest; - } - override connect(signer: Signer): CurveV1AdapterBaseMetaPoolTest__factory { - return super.connect(signer) as CurveV1AdapterBaseMetaPoolTest__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): CurveV1AdapterBaseMetaPoolTestInterface { - return new utils.Interface(_abi) as CurveV1AdapterBaseMetaPoolTestInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): CurveV1AdapterBaseMetaPoolTest { - return new Contract( - address, - _abi, - signerOrProvider - ) as CurveV1AdapterBaseMetaPoolTest; - } -} diff --git a/src/types/factories/contracts/test/adapters/CurveV1AdapterBaseMetapoolTest.t.sol/index.ts b/src/types/factories/contracts/test/adapters/CurveV1AdapterBaseMetapoolTest.t.sol/index.ts deleted file mode 100644 index f43193f1..00000000 --- a/src/types/factories/contracts/test/adapters/CurveV1AdapterBaseMetapoolTest.t.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { CurveV1AdapterBaseMetaPoolTest__factory } from "./CurveV1AdapterBaseMetaPoolTest__factory"; diff --git a/src/types/factories/contracts/test/adapters/CurveV1AdapterBaseTest.t.sol/CurveV1AdapterBaseTest__factory.ts b/src/types/factories/contracts/test/adapters/CurveV1AdapterBaseTest.t.sol/CurveV1AdapterBaseTest__factory.ts deleted file mode 100644 index 7934fc93..00000000 --- a/src/types/factories/contracts/test/adapters/CurveV1AdapterBaseTest.t.sol/CurveV1AdapterBaseTest__factory.ts +++ /dev/null @@ -1,899 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - CurveV1AdapterBaseTest, - CurveV1AdapterBaseTestInterface, -} from "../../../../../contracts/test/adapters/CurveV1AdapterBaseTest.t.sol/CurveV1AdapterBaseTest"; - -const _abi = [ - { - inputs: [], - name: "IncorrectIndexException", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "TokenIsNotInAllowedList", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "onBehalfOf", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "token", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "AddCollateral", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - ], - name: "CloseCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "DecreaseBorrowedAmount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "target", - type: "address", - }, - ], - name: "ExecuteOrder", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "IncreaseBorrowedAmount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "liquidator", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "remainingFunds", - type: "uint256", - }, - ], - name: "LiquidateCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "liquidator", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "remainingFunds", - type: "uint256", - }, - ], - name: "LiquidateExpiredCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [], - name: "MultiCallFinished", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - ], - name: "MultiCallStarted", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newConfigurator", - type: "address", - }, - ], - name: "NewConfigurator", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "onBehalfOf", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "borrowAmount", - type: "uint256", - }, - { - indexed: false, - internalType: "uint16", - name: "referralCode", - type: "uint16", - }, - ], - name: "OpenCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "token", - type: "address", - }, - ], - name: "TokenDisabled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "token", - type: "address", - }, - ], - name: "TokenEnabled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "oldOwner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "TransferAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "bool", - name: "state", - type: "bool", - }, - ], - name: "TransferAccountAllowed", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "", - type: "address", - }, - ], - name: "log_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "log_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - name: "log_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "int256", - name: "", - type: "int256", - }, - ], - name: "log_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "address", - name: "val", - type: "address", - }, - ], - name: "log_named_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes", - name: "val", - type: "bytes", - }, - ], - name: "log_named_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes32", - name: "val", - type: "bytes32", - }, - ], - name: "log_named_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - ], - name: "log_named_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "string", - name: "val", - type: "string", - }, - ], - name: "log_named_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - ], - name: "log_named_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "log_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "logs", - type: "event", - }, - { - inputs: [], - name: "IS_TEST", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "nCoins", - type: "uint256", - }, - ], - name: "_setUp", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "adapter", - outputs: [ - { - internalType: "contract ICurveV1Adapter", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "cft", - outputs: [ - { - internalType: "contract CreditFacadeTestSuite", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditConfigurator", - outputs: [ - { - internalType: "contract CreditConfigurator", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditFacade", - outputs: [ - { - internalType: "contract CreditFacade", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditManager", - outputs: [ - { - internalType: "contract ICreditManagerV2", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "curveV1Mock", - outputs: [ - { - internalType: "contract CurveV1Mock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "failed", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "setUp", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_ACV1_01_constructor_reverts_for_zero_addresses_and_non_allowed_tokens", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_ACV1_02_constructor_sets_correct_values", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_ACV1_03_swap_reverts_if_uses_has_no_account", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_ACV1_04_exchange_works_for_user_as_expected", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_ACV1_05_exchnage_all_works_for_user_as_expected", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_ACV1_06_exchange_underlying_works_for_user_as_expected", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_ACV1_07_exchange_all_underlying_works_for_user_as_expected", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_ACV1_08_add_all_liquidity_one_coin_works_for_user_as_expected", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_ACV1_09_remove_liquidity_one_coin_works_correctly", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_ACV1_10_remove_all_liquidity_one_coin_works_correctly", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "test_ACV1_11_get_dy_and_get_dy_underlying_are_consistent", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_ACV1_12_get_virtual_price_is_consistent", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_ACV1_13_getters_revert_for_indices_gt_nCoins", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_ACV1_14_getter_are_consistent", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "underlying", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x60806040526000805460ff1916600190811790915580546001600160a01b031916737109709ecfa91a80626ff3989d68f67f5b1dd12d1790553480156200004557600080fd5b506206ffd280620000576000396000f3fe60806040523480156200001157600080fd5b5060043610620001c55760003560e01c8063a19158161162000101578063c12c21c011620000a3578063df514433116200007a578063df5144331462000366578063f9aa028a1462000387578063fa7626d414620003a8578063fcfa2bd314620003b657600080fd5b8063c12c21c01462000331578063c3b9d3071462000352578063d67d68e2146200035c57600080fd5b8063bc6c399f11620000d8578063bc6c399f1462000306578063c0617f5e1462000310578063c10ca558146200031a57600080fd5b8063a191581614620002d7578063abaf675414620002e1578063ba414fa614620002eb57600080fd5b80632f7a1881116200016b5780636aced15c11620001425780636aced15c14620002a25780636f307dc314620002ac5780637dbd722d14620002cd57600080fd5b80632f7a1881146200026d57806330cac13b146200028e5780635e2d3cc2146200029857600080fd5b806311ce88da11620001a057806311ce88da146200022b57806329d351d814620002425780632bbc8ba9146200026357600080fd5b806303e41d6214620001ca57806303eadcfc14620001d65780630a9254e41462000221575b600080fd5b620001d4620003c0565b005b601054620001f79073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b620001d462000a19565b620001d46200023c3660046200d04c565b62000a27565b601154620001f79073ffffffffffffffffffffffffffffffffffffffff1681565b620001d46200103c565b600354620001f79073ffffffffffffffffffffffffffffffffffffffff1681565b620001d46200116f565b620001d46200196b565b620001d462002397565b600654620001f79073ffffffffffffffffffffffffffffffffffffffff1681565b620001d46200298d565b620001d462003003565b620001d462004014565b620002f56200428f565b604051901515815260200162000218565b620001d4620043f9565b620001d462005579565b620001d46200032b3660046200d04c565b62005be2565b600254620001f79073ffffffffffffffffffffffffffffffffffffffff1681565b620001d462005f2e565b620001d4620064b2565b600554620001f79073ffffffffffffffffffffffffffffffffffffffff1681565b600454620001f79073ffffffffffffffffffffffffffffffffffffffff1681565b600054620002f59060ff1681565b620001d462006aac565b60005b600281101562000a1657801515620003da62000a19565b600080546040517f67b426450000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff16906367b426459062000439906007906004016200d0d1565b602060405180830381865afa15801562000457573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200047d91906200d10a565b600080546040517f67b4264500000000000000000000000000000000000000000000000000000000815292935090916201000090910473ffffffffffffffffffffffffffffffffffffffff16906367b4264590620004e1906009906004016200d0d1565b602060405180830381865afa158015620004ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200052591906200d10a565b905060006200053362007092565b5060115490915062000561908490839073ffffffffffffffffffffffffffffffffffffffff16600062007479565b6200058360076200057d670de0b6b3a7640000614e206200d160565b62007497565b60007f3df021240000000000000000000000000000000000000000000000000000000081600280620005c0670de0b6b3a7640000614e206200d160565b620005cc91906200d1a0565b60646002620005e6670de0b6b3a7640000614e206200d160565b620005f291906200d1a0565b620005ff9060636200d160565b6200060b91906200d1a0565b60405160ff94851660248201529390921660448401526064830152608482015260a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152905084156200072457601054601154620006f99173ffffffffffffffffffffffffffffffffffffffff908116911673f39fd6e51aad88f6f4ce6ab8827279cfffb92266848888600062007a69565b6010546200071e9073ffffffffffffffffffffffffffffffffffffffff168262007a85565b6200090c565b601054601154620007699173ffffffffffffffffffffffffffffffffffffffff908116911673f39fd6e51aad88f6f4ce6ab8827279cfffb92266848888600062007b9a565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b158015620007e957600080fd5b505af1158015620007fe573d6000803e3d6000fd5b505060105473ffffffffffffffffffffffffffffffffffffffff169150633df02124905060006002806200083d670de0b6b3a7640000614e206200d160565b6200084991906200d1a0565b6064600262000863670de0b6b3a7640000614e206200d160565b6200086f91906200d1a0565b6200087c9060636200d160565b6200088891906200d1a0565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b168152600f94850b60048201529290930b602483015260448201526064810191909152608401600060405180830381600087803b158015620008f257600080fd5b505af115801562000907573d6000803e3d6000fd5b505050505b6200095f60078360026200092b670de0b6b3a7640000614e206200d160565b6200093791906200d1a0565b6200094d670de0b6b3a7640000614e206200d160565b6200095991906200d1dc565b62007bad565b620009a56009836064600262000980670de0b6b3a7640000614e206200d160565b6200098c91906200d1a0565b620009999060636200d160565b6200095991906200d1a0565b601154620009ee908590849073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62007479565b620009fb83600162007bcf565b5050505050808062000a0d906200d1f6565b915050620003c3565b50565b62000a25600462000a27565b565b62000a328162007beb565b600754601180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691821790556040517fb91434d100000000000000000000000000000000000000000000000000000000815260006004820152600160248201526b033b2e3c9fd0803ce8000000604482015263b91434d190606401600060405180830381600087803b15801562000ae257600080fd5b505af115801562000af7573d6000803e3d6000fd5b505060115473ffffffffffffffffffffffffffffffffffffffff16915063b91434d1905060006002606462000b3a6b033b2e3c9fd0803ce800000060636200d160565b62000b4691906200d1a0565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152600f93840b60048201529190920b60248201526044810191909152606401600060405180830381600087803b15801562000bab57600080fd5b505af115801562000bc0573d6000803e3d6000fd5b505060115473ffffffffffffffffffffffffffffffffffffffff16915063b91434d1905060016002606462000c036b033b2e3c9fd0803ce800000060636200d160565b62000c0f91906200d1a0565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152600f93840b60048201529190920b60248201526044810191909152606401600060405180830381600087803b15801562000c7457600080fd5b505af115801562000c89573d6000803e3d6000fd5b50506011546040517f56ac350300000000000000000000000000000000000000000000000000000000815260006004820152600160248201526b033b2e3c9fd0803ce8000000604482015273ffffffffffffffffffffffffffffffffffffffff90911692506356ac35039150606401600060405180830381600087803b15801562000d1357600080fd5b505af115801562000d28573d6000803e3d6000fd5b505060115473ffffffffffffffffffffffffffffffffffffffff1691506356ac3503905060006002606462000d6b6b033b2e3c9fd0803ce800000060636200d160565b62000d7791906200d1a0565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152600f93840b60048201529190920b60248201526044810191909152606401600060405180830381600087803b15801562000ddc57600080fd5b505af115801562000df1573d6000803e3d6000fd5b505060115473ffffffffffffffffffffffffffffffffffffffff1691506356ac3503905060016002606462000e346b033b2e3c9fd0803ce800000060636200d160565b62000e4091906200d1a0565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152600f93840b60048201529190920b60248201526044810191909152606401600060405180830381600087803b15801562000ea557600080fd5b505af115801562000eba573d6000803e3d6000fd5b5050600854601080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600054601154620100009091048216935063eebab8ef92506005911662000f32670de0b6b3a7640000614e206200d160565b62000f3f9060026200d160565b6040518463ffffffff1660e01b815260040162000f5f939291906200d232565b600060405180830381600087803b15801562000f7a57600080fd5b505af115801562000f8f573d6000803e3d6000fd5b505060005460115473ffffffffffffffffffffffffffffffffffffffff620100009092048216935063eebab8ef92506002911662000fd8670de0b6b3a7640000614e206200d160565b62000fe59060026200d160565b6040518463ffffffff1660e01b815260040162001005939291906200d232565b600060405180830381600087803b1580156200102057600080fd5b505af115801562001035573d6000803e3d6000fd5b5050505050565b601054604080517fbb7b8b80000000000000000000000000000000000000000000000000000000008152905162000a259273ffffffffffffffffffffffffffffffffffffffff169163bb7b8b809160048083019260209291908290030181865afa158015620010af573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010d591906200d269565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb7b8b806040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001143573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200116991906200d269565b620099cd565b60025b6004811162000a1657620011868162000a27565b805b600581101562001955576001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd1da79bc000000000000000000000000000000000000000000000000000000006004820152829173ffffffffffffffffffffffffffffffffffffffff169063c31eb0e090602401600060405180830381600087803b1580156200121e57600080fd5b505af115801562001233573d6000803e3d6000fd5b50506010546040517fc66106570000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff909116925063c66106579150602401602060405180830381865afa158015620012a7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620012cd91906200d10a565b506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd1da79bc00000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063c31eb0e090602401600060405180830381600087803b1580156200135a57600080fd5b505af11580156200136f573d6000803e3d6000fd5b50506010546040517f23746eb8000000000000000000000000000000000000000000000000000000008152600f85900b600482015273ffffffffffffffffffffffffffffffffffffffff90911692506323746eb89150602401602060405180830381865afa158015620013e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200140c91906200d10a565b506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd1da79bc00000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063c31eb0e090602401600060405180830381600087803b1580156200149957600080fd5b505af1158015620014ae573d6000803e3d6000fd5b50506010546040517f23746eb80000000000000000000000000000000000000000000000000000000081527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600482015273ffffffffffffffffffffffffffffffffffffffff90911692506323746eb89150602401602060405180830381865afa15801562001541573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200156791906200d10a565b506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd1da79bc00000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063c31eb0e090602401600060405180830381600087803b158015620015f457600080fd5b505af115801562001609573d6000803e3d6000fd5b50506010546040517fb9947eb00000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff909116925063b9947eb09150602401602060405180830381865afa1580156200167d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620016a391906200d10a565b506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd1da79bc00000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063c31eb0e090602401600060405180830381600087803b1580156200173057600080fd5b505af115801562001745573d6000803e3d6000fd5b50506010546040517fb739953e000000000000000000000000000000000000000000000000000000008152600f85900b600482015273ffffffffffffffffffffffffffffffffffffffff909116925063b739953e9150602401602060405180830381865afa158015620017bc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017e291906200d10a565b506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd1da79bc00000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063c31eb0e090602401600060405180830381600087803b1580156200186f57600080fd5b505af115801562001884573d6000803e3d6000fd5b50506010546040517fb739953e0000000000000000000000000000000000000000000000000000000081527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600482015273ffffffffffffffffffffffffffffffffffffffff909116925063b739953e9150602401602060405180830381865afa15801562001917573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200193d91906200d10a565b505080806200194c906200d1f6565b91505062001188565b508062001962816200d1f6565b91505062001172565b60005b600281101562000a165780151560025b600481116200237f5760005b8181101562002369576200199e8262000a27565b6010546040517fc66106570000000000000000000000000000000000000000000000000000000081526004810183905260009173ffffffffffffffffffffffffffffffffffffffff169063c661065790602401602060405180830381865afa15801562001a0f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001a3591906200d10a565b600f5490915073ffffffffffffffffffffffffffffffffffffffff16600062001a5d62007092565b5060005490915062010000900473ffffffffffffffffffffffffffffffffffffffff1663c6c3bbe68473f39fd6e51aad88f6f4ce6ab8827279cfffb9226662001ab1670de0b6b3a7640000614e206200d160565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b15801562001b2657600080fd5b505af115801562001b3b573d6000803e3d6000fd5b5050505062001b6283670de0b6b3a7640000614e2062001b5c91906200d160565b62009adf565b60007fec026ca7000000000000000000000000000000000000000000000000000000008562001b9f60026b033b2e3c9fd0803ce80000006200d1a0565b60405160248101929092526044820152606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290506060600287141562001d735762001c476200ce79565b600162001c5f670de0b6b3a7640000614e206200d160565b62001c6b91906200d1dc565b81886002811062001c805762001c806200d283565b60200201527f0b4c7e4d00000000000000000000000000000000000000000000000000000000816002600162001cc1670de0b6b3a7640000614e206200d160565b62001ccd91906200d1dc565b62001cd991906200d1a0565b60405160240162001cec9291906200d2b2565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152915062001f669050565b866003141562001e2c5762001d876200ce97565b600162001d9f670de0b6b3a7640000614e206200d160565b62001dab91906200d1dc565b81886003811062001dc05762001dc06200d283565b60200201527f4515cef300000000000000000000000000000000000000000000000000000000816002600162001e01670de0b6b3a7640000614e206200d160565b62001e0d91906200d1dc565b62001e1991906200d1a0565b60405160240162001cec9291906200d2ec565b866004141562001f665762001e406200ceb5565b600162001e58670de0b6b3a7640000614e206200d160565b62001e6491906200d1dc565b81886004811062001e795762001e796200d283565b60200201527f029b2f3400000000000000000000000000000000000000000000000000000000816002600162001eba670de0b6b3a7640000614e206200d160565b62001ec691906200d1dc565b62001ed291906200d1a0565b60405160240162001ee59291906200d326565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529150505b871562001fdf5760105460115462001fb49173ffffffffffffffffffffffffffffffffffffffff908116911673f39fd6e51aad88f6f4ce6ab8827279cfffb922668489896000600162009cb2565b60105462001fd99073ffffffffffffffffffffffffffffffffffffffff168362007a85565b6200216d565b601054601154620020269173ffffffffffffffffffffffffffffffffffffffff908116911673f39fd6e51aad88f6f4ce6ab8827279cfffb92266848989600060016200a3a3565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b158015620020a657600080fd5b505af1158015620020bb573d6000803e3d6000fd5b505060105473ffffffffffffffffffffffffffffffffffffffff16915063ec026ca7905087620020f960026b033b2e3c9fd0803ce80000006200d1a0565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168152600f9290920b60048301526024820152604401600060405180830381600087803b1580156200215357600080fd5b505af115801562002168573d6000803e3d6000fd5b505050505b6200217b858460016200a891565b601154604080517ffc0c546a00000000000000000000000000000000000000000000000000000000815290516200224d9273ffffffffffffffffffffffffffffffffffffffff169163fc0c546a9160048083019260209291908290030181865afa158015620021ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200221491906200d10a565b84600260016200222f670de0b6b3a7640000614e206200d160565b6200223b91906200d1dc565b6200224791906200d1a0565b6200a891565b6200225a85600062007bcf565b601154604080517ffc0c546a0000000000000000000000000000000000000000000000000000000081529051620022fb9273ffffffffffffffffffffffffffffffffffffffff169163fc0c546a9160048083019260209291908290030181865afa158015620022cd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620022f391906200d10a565b600162007bcf565b60115462002344908690859073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62007479565b6200234e6200a8ae565b5050505050808062002360906200d1f6565b9150506200198a565b508062002376816200d1f6565b9150506200197e565b505080806200238e906200d1f6565b9150506200196e565b60005b600281101562000a1657801515620023b162000a19565b600080546040517f67b426450000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff16906367b426459062002410906001906004016200d0d1565b602060405180830381865afa1580156200242e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200245491906200d10a565b600080546040517f67b4264500000000000000000000000000000000000000000000000000000000815292935090916201000090910473ffffffffffffffffffffffffffffffffffffffff16906367b4264590620024b8906005906004016200d0d1565b602060405180830381865afa158015620024d6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620024fc91906200d10a565b90506000806200250b62007092565b60115491935091506200253a908590849073ffffffffffffffffffffffffffffffffffffffff16600062007479565b60007fa6417ed6000000000000000000000000000000000000000000000000000000008160028062002577670de0b6b3a7640000614e206200d160565b6200258391906200d1a0565b606460026200259d670de0b6b3a7640000614e206200d160565b620025a991906200d1a0565b620025b69060636200d160565b620025c291906200d1a0565b60405160ff94851660248201529390921660448401526064830152608482015260a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290508515620026db57601054601154620026b09173ffffffffffffffffffffffffffffffffffffffff908116911673f39fd6e51aad88f6f4ce6ab8827279cfffb92266848989600062007a69565b601054620026d59073ffffffffffffffffffffffffffffffffffffffff168262007a85565b620028c3565b601054601154620027209173ffffffffffffffffffffffffffffffffffffffff908116911673f39fd6e51aad88f6f4ce6ab8827279cfffb92266848989600062007b9a565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b158015620027a057600080fd5b505af1158015620027b5573d6000803e3d6000fd5b505060105473ffffffffffffffffffffffffffffffffffffffff16915063a6417ed690506000600280620027f4670de0b6b3a7640000614e206200d160565b6200280091906200d1a0565b606460026200281a670de0b6b3a7640000614e206200d160565b6200282691906200d1a0565b620028339060636200d160565b6200283f91906200d1a0565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b168152600f94850b60048201529290930b602483015260448201526064810191909152608401600060405180830381600087803b158015620028a957600080fd5b505af1158015620028be573d6000803e3d6000fd5b505050505b620028fa6001846002620028e2670de0b6b3a7640000614e206200d160565b620028ee91906200d1a0565b6200095990866200d1dc565b6200291b6005846064600262000980670de0b6b3a7640000614e206200d160565b60115462002964908690859073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62007479565b6200297184600162007bcf565b505050505050808062002984906200d1f6565b9150506200239a565b60005b600281101562000a165780151560025b6004811162002feb5760005b8181101562002fd557620029c08262000a27565b600f546010546040517fc66106570000000000000000000000000000000000000000000000000000000081526004810184905273ffffffffffffffffffffffffffffffffffffffff92831692600092169063c661065790602401602060405180830381865afa15801562002a38573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002a5e91906200d10a565b9050600062002a7b60026b033b2e3c9fd0803ce80000006200d1a0565b9050600062002a8962007092565b5060115490915062002ac69073ffffffffffffffffffffffffffffffffffffffff1662002ac0670de0b6b3a764000060646200d160565b6200aa40565b60005460115473ffffffffffffffffffffffffffffffffffffffff6201000090920482169163c6c3bbe69186911662002b0a670de0b6b3a764000061a4106200d160565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b15801562002b7f57600080fd5b505af115801562002b94573d6000803e3d6000fd5b50600092507f1a4d01d20000000000000000000000000000000000000000000000000000000091506001905062002bd5670de0b6b3a764000060646200d160565b62002be191906200d1dc565b876002600162002bfb670de0b6b3a764000060646200d160565b62002c0791906200d1dc565b62002c1391906200d1a0565b604051602481019390935260448301919091526064820152608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529050871562002dd95760105460115462002cfa9173ffffffffffffffffffffffffffffffffffffffff908116911673f39fd6e51aad88f6f4ce6ab8827279cfffb9226684898960008062009cb2565b601054604051602481018890526044810185905262002dd39173ffffffffffffffffffffffffffffffffffffffff16907f33d2ebf200000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262007a85565b62002f49565b60105460115462002e1f9173ffffffffffffffffffffffffffffffffffffffff908116911673f39fd6e51aad88f6f4ce6ab8827279cfffb922668489896000806200a3a3565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b15801562002e9f57600080fd5b505af115801562002eb4573d6000803e3d6000fd5b50506010546040517f33d2ebf2000000000000000000000000000000000000000000000000000000008152600f8a900b60048201526024810187905273ffffffffffffffffffffffffffffffffffffffff90911692506333d2ebf29150604401600060405180830381600087803b15801562002f2f57600080fd5b505af115801562002f44573d6000803e3d6000fd5b505050505b62002f57858360016200a891565b62002f768483600260016200222f670de0b6b3a764000060646200d160565b60115462002fa0908690849073ffffffffffffffffffffffffffffffffffffffff16600062007479565b62002fad85600062007bcf565b62002fba84600162007bcf565b5050505050808062002fcc906200d1f6565b915050620029ac565b508062002fe2816200d1f6565b915050620029a0565b5050808062002ffa906200d1f6565b91505062002990565b6001546040805160048082526024820183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fb2335f2e0000000000000000000000000000000000000000000000000000000017905291517ff28dceb300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9093169263f28dceb392620030ae9291016200d3db565b600060405180830381600087803b158015620030c957600080fd5b505af1158015620030de573d6000803e3d6000fd5b50506002805460405173ffffffffffffffffffffffffffffffffffffffff9091169350600092508291829162003114906200ced3565b73ffffffffffffffffffffffffffffffffffffffff9586168152938516602085015291841660408401529092166060820152608081019190915260a001604051809103906000f0801580156200316e573d6000803e3d6000fd5b50506001546040805160048082526024820183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fb2335f2e0000000000000000000000000000000000000000000000000000000017905291517ff28dceb300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9093169263f28dceb3926200321b9291016200d3db565b600060405180830381600087803b1580156200323657600080fd5b505af11580156200324b573d6000803e3d6000fd5b50506002805460115460405173ffffffffffffffffffffffffffffffffffffffff928316955091169250600091829162003285906200ced3565b73ffffffffffffffffffffffffffffffffffffffff9586168152938516602085015291841660408401529092166060820152608081019190915260a001604051809103906000f080158015620032df573d6000803e3d6000fd5b50506001546040805173c4375b7de8af5a38a93548eb8453a498222c4ff260248083019190915282518083039091018152604490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f98c0f5f20000000000000000000000000000000000000000000000000000000017905290517ff28dceb300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163f28dceb391620033b1916004016200d3db565b600060405180830381600087803b158015620033cc57600080fd5b505af1158015620033e1573d6000803e3d6000fd5b50506002805460115460405173ffffffffffffffffffffffffffffffffffffffff92831695509116925073c4375b7de8af5a38a93548eb8453a498222c4ff2916000916200342f906200ced3565b73ffffffffffffffffffffffffffffffffffffffff9586168152938516602085015291841660408401529092166060820152608081019190915260a001604051809103906000f08015801562003489573d6000803e3d6000fd5b5060009050805b6004811015620038075760006001821115620034b957620034b38260016200d3f0565b620034bc565b60025b905060008167ffffffffffffffff811115620034dc57620034dc6200d40b565b60405190808252806020026020018201604052801562003506578160200160208202803683370190505b50905060008267ffffffffffffffff8111156200352757620035276200d40b565b60405190808252806020026020018201604052801562003551578160200160208202803683370190505b50905060005b83811015620036285773c4375b7de8af5a38a93548eb8453a498222c4ff28382815181106200358a576200358a6200d283565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505073c4375b7de8af5a38a93548eb8453a498222c4ff2828281518110620035ee57620035ee6200d283565b73ffffffffffffffffffffffffffffffffffffffff90921660209283029190910190910152806200361f816200d1f6565b91505062003557565b5060008285815181106200364057620036406200d283565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505081816040516200368a906200cee1565b620036979291906200d48d565b604051809103906000f080158015620036b4573d6000803e3d6000fd5b506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb2335f2e00000000000000000000000000000000000000000000000000000000600482015291965073ffffffffffffffffffffffffffffffffffffffff169063c31eb0e090602401600060405180830381600087803b1580156200374257600080fd5b505af115801562003757573d6000803e3d6000fd5b5050600254600f5460405173ffffffffffffffffffffffffffffffffffffffff9283169450899350911690600090879062003792906200ced3565b73ffffffffffffffffffffffffffffffffffffffff9586168152938516602085015291841660408401529092166060820152608081019190915260a001604051809103906000f080158015620037ec573d6000803e3d6000fd5b50505050508080620037fe906200d1f6565b91505062003490565b5060005b600481101562004010576000600182111562003834576200382e8260016200d3f0565b62003837565b60025b905060008167ffffffffffffffff8111156200385757620038576200d40b565b60405190808252806020026020018201604052801562003881578160200160208202803683370190505b50905060008267ffffffffffffffff811115620038a257620038a26200d40b565b604051908082528060200260200182016040528015620038cc578160200160208202803683370190505b50905060005b8381101562003a93576000546040517f67b426450000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff16906367b426459062003939906001906004016200d0d1565b602060405180830381865afa15801562003957573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200397d91906200d10a565b8382815181106200399257620039926200d283565b73ffffffffffffffffffffffffffffffffffffffff92831660209182029290920101526000546040517f67b4264500000000000000000000000000000000000000000000000000000000815262010000909104909116906367b426459062003a00906001906004016200d0d1565b602060405180830381865afa15801562003a1e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003a4491906200d10a565b82828151811062003a595762003a596200d283565b73ffffffffffffffffffffffffffffffffffffffff909216602092830291909101909101528062003a8a816200d1f6565b915050620038d2565b5073c4375b7de8af5a38a93548eb8453a498222c4ff282858151811062003abe5762003abe6200d283565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050818160405162003b08906200cee1565b62003b159291906200d48d565b604051809103906000f08015801562003b32573d6000803e3d6000fd5b506001546040805173c4375b7de8af5a38a93548eb8453a498222c4ff260248083019190915282518083039091018152604490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f98c0f5f20000000000000000000000000000000000000000000000000000000017905290517ff28dceb300000000000000000000000000000000000000000000000000000000815292975073ffffffffffffffffffffffffffffffffffffffff9091169163f28dceb39162003c06916004016200d3db565b600060405180830381600087803b15801562003c2157600080fd5b505af115801562003c36573d6000803e3d6000fd5b5050600254600f5460405173ffffffffffffffffffffffffffffffffffffffff9283169450899350911690600090879062003c71906200ced3565b73ffffffffffffffffffffffffffffffffffffffff9586168152938516602085015291841660408401529092166060820152608081019190915260a001604051809103906000f08015801562003ccb573d6000803e3d6000fd5b50506000546040517f67b426450000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff16906367b426459062003d2b906001906004016200d0d1565b602060405180830381865afa15801562003d49573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003d6f91906200d10a565b82858151811062003d845762003d846200d283565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505073c4375b7de8af5a38a93548eb8453a498222c4ff281858151811062003de85762003de86200d283565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050818160405162003e32906200cee1565b62003e3f9291906200d48d565b604051809103906000f08015801562003e5c573d6000803e3d6000fd5b506001546040805173c4375b7de8af5a38a93548eb8453a498222c4ff260248083019190915282518083039091018152604490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f98c0f5f20000000000000000000000000000000000000000000000000000000017905290517ff28dceb300000000000000000000000000000000000000000000000000000000815292975073ffffffffffffffffffffffffffffffffffffffff9091169163f28dceb39162003f30916004016200d3db565b600060405180830381600087803b15801562003f4b57600080fd5b505af115801562003f60573d6000803e3d6000fd5b5050600254600f5460405173ffffffffffffffffffffffffffffffffffffffff9283169450899350911690600090879062003f9b906200ced3565b73ffffffffffffffffffffffffffffffffffffffff9586168152938516602085015291841660408401529092166060820152608081019190915260a001604051809103906000f08015801562003ff5573d6000803e3d6000fd5b5050505050808062004007906200d1f6565b9150506200380b565b5050565b6001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb5ba4c4d00000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063c31eb0e090602401600060405180830381600087803b158015620040a057600080fd5b505af1158015620040b5573d6000803e3d6000fd5b50506010546040517f3df021240000000000000000000000000000000000000000000000000000000081526000600482015260016024820181905260448201819052606482015273ffffffffffffffffffffffffffffffffffffffff9091169250633df021249150608401600060405180830381600087803b1580156200413b57600080fd5b505af115801562004150573d6000803e3d6000fd5b50506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb5ba4c4d00000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff909116925063c31eb0e09150602401600060405180830381600087803b158015620041e057600080fd5b505af1158015620041f5573d6000803e3d6000fd5b50506010546040517f79bea66400000000000000000000000000000000000000000000000000000000815260006004820181905260248201526001604482015273ffffffffffffffffffffffffffffffffffffffff90911692506379bea6649150606401600060405180830381600087803b1580156200427457600080fd5b505af115801562004289573d6000803e3d6000fd5b50505050565b60008054610100900460ff1615620042b05750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620043f45760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000008284015282518083038401815260608301909352600092909162004358917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016200d4bf565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905262004392916200d509565b6000604051808303816000865af19150503d8060008114620043d1576040519150601f19603f3d011682016040523d82523d6000602084013e620043d6565b606091505b5091505080806020019051810190620043f091906200d527565b9150505b919050565b601054604080517fc12c21c00000000000000000000000000000000000000000000000000000000081529051620044e89273ffffffffffffffffffffffffffffffffffffffff169163c12c21c09160048083019260209291908290030181865afa1580156200446c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200449291906200d10a565b60025460408051808201909152601781527f496e636f7272656374206372656469744d616e61676572000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff909116906200aeeb565b601054604080517f2f7a18810000000000000000000000000000000000000000000000000000000081529051620045d79273ffffffffffffffffffffffffffffffffffffffff1691632f7a18819160048083019260209291908290030181865afa1580156200455b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200458191906200d10a565b60035460408051808201909152601681527f496e636f72726563742063726564697446616361646500000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff909116906200aeeb565b601054604080517fbd90df700000000000000000000000000000000000000000000000000000000081529051620046c69273ffffffffffffffffffffffffffffffffffffffff169163bd90df709160048083019260209291908290030181865afa1580156200464a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200467091906200d10a565b60115460408051808201909152601081527f496e636f727265637420726f7574657200000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff909116906200aeeb565b601054604080517ffc0c546a00000000000000000000000000000000000000000000000000000000815290516200482f9273ffffffffffffffffffffffffffffffffffffffff169163fc0c546a9160048083019260209291908290030181865afa15801562004739573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200475f91906200d10a565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620047cd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620047f391906200d10a565b6040518060400160405280601281526020017f496e636f7272656374204c5020746f6b656e00000000000000000000000000008152506200aeeb565b601054604080517f82c630660000000000000000000000000000000000000000000000000000000081529051620048a29273ffffffffffffffffffffffffffffffffffffffff16916382c630669160048083019260209291908290030181865afa15801562004739573d6000803e3d6000fd5b601054604080517fc21ee1620000000000000000000000000000000000000000000000000000000081529051620049799273ffffffffffffffffffffffffffffffffffffffff169163c21ee1629160048083019260209291908290030181865afa15801562004915573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200493b91906200d269565b60046040518060400160405280601081526020017f496e636f7272656374206e436f696e73000000000000000000000000000000008152506200af64565b601054604080517f0dfe1681000000000000000000000000000000000000000000000000000000008152905162004af69273ffffffffffffffffffffffffffffffffffffffff1691630dfe16819160048083019260209291908290030181865afa158015620049ec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004a1291906200d10a565b600054600d546040517f67b426450000000000000000000000000000000000000000000000000000000081526201000090920473ffffffffffffffffffffffffffffffffffffffff16916367b426459162004a769160ff909116906004016200d0d1565b602060405180830381865afa15801562004a94573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004aba91906200d10a565b6040518060400160405280601181526020017f496e636f727265637420746f6b656e20300000000000000000000000000000008152506200aeeb565b601054604080517fd21220a7000000000000000000000000000000000000000000000000000000008152905162004c779273ffffffffffffffffffffffffffffffffffffffff169163d21220a79160048083019260209291908290030181865afa15801562004b69573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004b8f91906200d10a565b600054600d546040517f67b426450000000000000000000000000000000000000000000000000000000081526201000090920473ffffffffffffffffffffffffffffffffffffffff16916367b426459162004bf79161010090910460ff16906004016200d0d1565b602060405180830381865afa15801562004c15573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004c3b91906200d10a565b6040518060400160405280601181526020017f496e636f727265637420746f6b656e20310000000000000000000000000000008152506200aeeb565b601054604080517f25be124e000000000000000000000000000000000000000000000000000000008152905162004df69273ffffffffffffffffffffffffffffffffffffffff16916325be124e9160048083019260209291908290030181865afa15801562004cea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004d1091906200d10a565b600054600d546040517f67b42645000000000000000000000000000000000000000000000000000000008152620100009283900473ffffffffffffffffffffffffffffffffffffffff16926367b426459262004d769291900460ff16906004016200d0d1565b602060405180830381865afa15801562004d94573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004dba91906200d10a565b6040518060400160405280601181526020017f496e636f727265637420746f6b656e20320000000000000000000000000000008152506200aeeb565b601054604080517fef14101e000000000000000000000000000000000000000000000000000000008152905162004f799273ffffffffffffffffffffffffffffffffffffffff169163ef14101e9160048083019260209291908290030181865afa15801562004e69573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004e8f91906200d10a565b600054600d546040517f67b426450000000000000000000000000000000000000000000000000000000081526201000090920473ffffffffffffffffffffffffffffffffffffffff16916367b426459162004ef991630100000090910460ff16906004016200d0d1565b602060405180830381865afa15801562004f17573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004f3d91906200d10a565b6040518060400160405280601181526020017f496e636f727265637420746f6b656e20330000000000000000000000000000008152506200aeeb565b601054604080517f8ba51dfc0000000000000000000000000000000000000000000000000000000081529051620050f69273ffffffffffffffffffffffffffffffffffffffff1691638ba51dfc9160048083019260209291908290030181865afa15801562004fec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200501291906200d10a565b600054600e546040517f67b426450000000000000000000000000000000000000000000000000000000081526201000090920473ffffffffffffffffffffffffffffffffffffffff16916367b4264591620050769160ff909116906004016200d0d1565b602060405180830381865afa15801562005094573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620050ba91906200d10a565b6040518060400160405280601c81526020017f496e636f727265637420756e6465726c79696e6720746f6b656e2030000000008152506200aeeb565b601054604080517f6e1d82710000000000000000000000000000000000000000000000000000000081529051620052779273ffffffffffffffffffffffffffffffffffffffff1691636e1d82719160048083019260209291908290030181865afa15801562005169573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200518f91906200d10a565b600054600e546040517f67b426450000000000000000000000000000000000000000000000000000000081526201000090920473ffffffffffffffffffffffffffffffffffffffff16916367b4264591620051f79161010090910460ff16906004016200d0d1565b602060405180830381865afa15801562005215573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200523b91906200d10a565b6040518060400160405280601c81526020017f496e636f727265637420756e6465726c79696e6720746f6b656e2031000000008152506200aeeb565b601054604080517f068711630000000000000000000000000000000000000000000000000000000081529051620053f69273ffffffffffffffffffffffffffffffffffffffff169163068711639160048083019260209291908290030181865afa158015620052ea573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200531091906200d10a565b600054600e546040517f67b42645000000000000000000000000000000000000000000000000000000008152620100009283900473ffffffffffffffffffffffffffffffffffffffff16926367b4264592620053769291900460ff16906004016200d0d1565b602060405180830381865afa15801562005394573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620053ba91906200d10a565b6040518060400160405280601c81526020017f496e636f727265637420756e6465726c79696e6720746f6b656e2032000000008152506200aeeb565b601054604080517f57d78875000000000000000000000000000000000000000000000000000000008152905162000a259273ffffffffffffffffffffffffffffffffffffffff16916357d788759160048083019260209291908290030181865afa15801562005469573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200548f91906200d10a565b600054600e546040517f67b426450000000000000000000000000000000000000000000000000000000081526201000090920473ffffffffffffffffffffffffffffffffffffffff16916367b4264591620054f991630100000090910460ff16906004016200d0d1565b602060405180830381865afa15801562005517573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200553d91906200d10a565b6040518060400160405280601c81526020017f496e636f727265637420756e6465726c79696e6720746f6b656e2033000000008152506200aeeb565b60025b6004811162000a1657620055908162000a27565b60005b8181101562005bcc576010546040517fc6610657000000000000000000000000000000000000000000000000000000008152600481018390528291620056d69173ffffffffffffffffffffffffffffffffffffffff9091169063c661065790602401602060405180830381865afa15801562005613573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200563991906200d10a565b6011546040517fc66106570000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff9091169063c6610657906024015b602060405180830381865afa158015620056aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620056d091906200d10a565b6200afb1565b6010546040517f23746eb8000000000000000000000000000000000000000000000000000000008152600f83900b6004820152620057cd9173ffffffffffffffffffffffffffffffffffffffff16906323746eb890602401602060405180830381865afa1580156200574c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200577291906200d10a565b6011546040517f23746eb8000000000000000000000000000000000000000000000000000000008152600f85900b600482015273ffffffffffffffffffffffffffffffffffffffff909116906323746eb8906024016200568c565b6010546040517fb9947eb000000000000000000000000000000000000000000000000000000000815260048101849052620058be9173ffffffffffffffffffffffffffffffffffffffff169063b9947eb090602401602060405180830381865afa15801562005840573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200586691906200d10a565b6011546040517fb9947eb00000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff9091169063b9947eb0906024016200568c565b6010546040517fb739953e000000000000000000000000000000000000000000000000000000008152600f83900b6004820152620059b59173ffffffffffffffffffffffffffffffffffffffff169063b739953e90602401602060405180830381865afa15801562005934573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200595a91906200d10a565b6011546040517fb739953e000000000000000000000000000000000000000000000000000000008152600f85900b600482015273ffffffffffffffffffffffffffffffffffffffff9091169063b739953e906024016200568c565b6010546040517f4903b0d10000000000000000000000000000000000000000000000000000000081526004810184905262005abf9173ffffffffffffffffffffffffffffffffffffffff1690634903b0d190602401602060405180830381865afa15801562005a28573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005a4e91906200d269565b6011546040517f4903b0d10000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff90911690634903b0d1906024015b602060405180830381865afa15801562001143573d6000803e3d6000fd5b6010546040517f065a80d8000000000000000000000000000000000000000000000000000000008152600f83900b600482015262005bb69173ffffffffffffffffffffffffffffffffffffffff169063065a80d890602401602060405180830381865afa15801562005b35573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005b5b91906200d269565b6011546040517f065a80d8000000000000000000000000000000000000000000000000000000008152600f85900b600482015273ffffffffffffffffffffffffffffffffffffffff9091169063065a80d89060240162005aa1565b508062005bc3816200d1f6565b91505062005593565b508062005bd9816200d1f6565b9150506200557c565b60015473ffffffffffffffffffffffffffffffffffffffff16634c63e56262005c1f6b033b2e3c9fd0803ce8000000662386f26fc100006200d160565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681529084106004820152602401600060405180830381600087803b15801562005c7157600080fd5b505af115801562005c86573d6000803e3d6000fd5b506002925050505b60048111620040105762005ca28162000a27565b60005b8181101562005f18578060005b83600f0b81600f0b121562005f00576010546040517f5e0d443f000000000000000000000000000000000000000000000000000000008152600f84810b600483015283900b60248201526044810187905262005dd69173ffffffffffffffffffffffffffffffffffffffff1690635e0d443f90606401602060405180830381865afa15801562005d46573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005d6c91906200d269565b6011546040517f5e0d443f000000000000000000000000000000000000000000000000000000008152600f86810b600483015285900b60248201526044810189905273ffffffffffffffffffffffffffffffffffffffff90911690635e0d443f9060640162005aa1565b6010546040517f07211ef7000000000000000000000000000000000000000000000000000000008152600f84810b600483015283900b60248201526044810187905262005eeb9173ffffffffffffffffffffffffffffffffffffffff16906307211ef790606401602060405180830381865afa15801562005e5b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005e8191906200d269565b6011546040517f07211ef7000000000000000000000000000000000000000000000000000000008152600f86810b600483015285900b60248201526044810189905273ffffffffffffffffffffffffffffffffffffffff909116906307211ef79060640162005aa1565b8062005ef7816200d54b565b91505062005cb2565b5050808062005f0f906200d1f6565b91505062005ca5565b508062005f25816200d1f6565b91505062005c8e565b60005b600281101562000a165780151562005f4862000a19565b600080546040517f67b426450000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff16906367b426459062005fa7906001906004016200d0d1565b602060405180830381865afa15801562005fc5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005feb91906200d10a565b600080546040517f67b4264500000000000000000000000000000000000000000000000000000000815292935090916201000090910473ffffffffffffffffffffffffffffffffffffffff16906367b42645906200604f906005906004016200d0d1565b602060405180830381865afa1580156200606d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200609391906200d10a565b9050600080620060a262007092565b909250905060007fa6417ed600000000000000000000000000000000000000000000000000000000816002620060da6001866200d1dc565b6064620060e96001886200d1dc565b620060f69060636200d160565b6200610291906200d1a0565b60405160ff94851660248201529390921660448401526064830152608482015260a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152601154909150620061cf908690859073ffffffffffffffffffffffffffffffffffffffff16600062007479565b8515620062af576010546011546200621b9173ffffffffffffffffffffffffffffffffffffffff908116911673f39fd6e51aad88f6f4ce6ab8827279cfffb92266848989600062007a69565b601054620062a99073ffffffffffffffffffffffffffffffffffffffff167f1af4de8300000000000000000000000000000000000000000000000000000000600060026064620062796b033b2e3c9fd0803ce800000060636200d160565b6200628591906200d1a0565b60405160ff9384166024820152929091166044830152606482015260840162002d50565b62006457565b601054601154620062f49173ffffffffffffffffffffffffffffffffffffffff908116911673f39fd6e51aad88f6f4ce6ab8827279cfffb92266848989600062007b9a565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b1580156200637457600080fd5b505af115801562006389573d6000803e3d6000fd5b505060105473ffffffffffffffffffffffffffffffffffffffff169150631af4de839050600060026064620063cc6b033b2e3c9fd0803ce800000060636200d160565b620063d891906200d1a0565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152600f93840b60048201529190920b60248201526044810191909152606401600060405180830381600087803b1580156200643d57600080fd5b505af115801562006452573d6000803e3d6000fd5b505050505b62006466600184600162007bad565b6200647c60058460646200098c6001876200d1dc565b6200648985600062007bcf565b6200649684600162007bcf565b5050505050508080620064a9906200d1f6565b91505062005f31565b60005b600281101562000a1657801515620064cc62000a19565b600080546040517f67b426450000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff16906367b42645906200652b906007906004016200d0d1565b602060405180830381865afa15801562006549573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200656f91906200d10a565b600080546040517f67b4264500000000000000000000000000000000000000000000000000000000815292935090916201000090910473ffffffffffffffffffffffffffffffffffffffff16906367b4264590620065d3906009906004016200d0d1565b602060405180830381865afa158015620065f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200661791906200d10a565b905060006200662562007092565b5060115490915062006653908490839073ffffffffffffffffffffffffffffffffffffffff16600062007479565b6200666f60076200057d670de0b6b3a7640000614e206200d160565b60007f3df02124000000000000000000000000000000000000000000000000000000008160026001620066ad670de0b6b3a7640000614e206200d160565b620066b991906200d1dc565b60646001620066d3670de0b6b3a7640000614e206200d160565b620066df91906200d1dc565b620066ec9060636200d160565b620066f891906200d1a0565b60405160ff94851660248201529390921660448401526064830152608482015260a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152905084156200684a57601054601154620067e69173ffffffffffffffffffffffffffffffffffffffff908116911673f39fd6e51aad88f6f4ce6ab8827279cfffb92266848888600062007a69565b601054620068449073ffffffffffffffffffffffffffffffffffffffff167f79bea66400000000000000000000000000000000000000000000000000000000600060026064620062796b033b2e3c9fd0803ce800000060636200d160565b620069f2565b6010546011546200688f9173ffffffffffffffffffffffffffffffffffffffff908116911673f39fd6e51aad88f6f4ce6ab8827279cfffb92266848888600062007b9a565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b1580156200690f57600080fd5b505af115801562006924573d6000803e3d6000fd5b505060105473ffffffffffffffffffffffffffffffffffffffff1691506379bea6649050600060026064620069676b033b2e3c9fd0803ce800000060636200d160565b6200697391906200d1a0565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152600f93840b60048201529190920b60248201526044810191909152606401600060405180830381600087803b158015620069d857600080fd5b505af1158015620069ed573d6000803e3d6000fd5b505050505b62006a01600783600162007bad565b62006a2e6009836064600162006a22670de0b6b3a7640000614e206200d160565b6200098c91906200d1dc565b60115462006a77908590849073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62007479565b62006a8484600062007bcf565b62006a9183600162007bcf565b5050505050808062006aa3906200d1f6565b915050620064b5565b60005b600281101562000a165780151560025b600481116200707a5760005b81811015620070645762006adf8262000a27565b600f546010546040517fc66106570000000000000000000000000000000000000000000000000000000081526004810184905273ffffffffffffffffffffffffffffffffffffffff92831692600092169063c661065790602401602060405180830381865afa15801562006b57573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062006b7d91906200d10a565b9050600062006b8b62007092565b5060115490915062006bc29073ffffffffffffffffffffffffffffffffffffffff1662002ac0670de0b6b3a764000060646200d160565b60007f1a4d01d20000000000000000000000000000000000000000000000000000000062006bfa670de0b6b3a764000060376200d160565b86600262006c13670de0b6b3a764000061a4106200d160565b62006c1f91906200d1a0565b604051602481019390935260448301919091526064820152608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915260005460115491925073ffffffffffffffffffffffffffffffffffffffff6201000090910481169163c6c3bbe69186911662006cfe670de0b6b3a764000061a4106200d160565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b15801562006d7357600080fd5b505af115801562006d88573d6000803e3d6000fd5b50505050861562006e045760105460115462006dd99173ffffffffffffffffffffffffffffffffffffffff908116911673f39fd6e51aad88f6f4ce6ab8827279cfffb9226684888860008062009cb2565b60105462006dfe9073ffffffffffffffffffffffffffffffffffffffff168262007a85565b62006fb9565b60105460115462006e4a9173ffffffffffffffffffffffffffffffffffffffff908116911673f39fd6e51aad88f6f4ce6ab8827279cfffb922668488886000806200a3a3565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b15801562006eca57600080fd5b505af115801562006edf573d6000803e3d6000fd5b505060105473ffffffffffffffffffffffffffffffffffffffff169150631a4d01d2905062006f18670de0b6b3a764000060376200d160565b87600262006f31670de0b6b3a764000061a4106200d160565b62006f3d91906200d1a0565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526004810193909352600f9190910b60248301526044820152606401600060405180830381600087803b15801562006f9f57600080fd5b505af115801562006fb4573d6000803e3d6000fd5b505050505b62006ff5848362006fd4670de0b6b3a764000060376200d160565b62006fe9670de0b6b3a764000060646200d160565b6200224791906200d1dc565b62007013838360026200223b670de0b6b3a764000061a4106200d160565b6011546200703d908590849073ffffffffffffffffffffffffffffffffffffffff16600062007479565b6200704a83600162007bcf565b5050505080806200705b906200d1f6565b91505062006acb565b508062007071816200d1f6565b91505062006abf565b5050808062007089906200d1f6565b91505062006aaf565b6000806000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635f7c9bd06040518163ffffffff1660e01b8152600401602060405180830381865afa15801562007105573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200712b91906200d269565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015291925073ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b158015620071ac57600080fd5b505af1158015620071c1573d6000803e3d6000fd5b50506003546040517f6c8f225d0000000000000000000000000000000000000000000000000000000081526004810185905273f39fd6e51aad88f6f4ce6ab8827279cfffb92266602482015260646044820181905260009082015273ffffffffffffffffffffffffffffffffffffffff9091169250636c8f225d9150608401600060405180830381600087803b1580156200725b57600080fd5b505af115801562007270573d6000803e3d6000fd5b50506002546040517fe958b70400000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063e958b7049150602401602060405180830381865afa158015620072f7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200731d91906200d10a565b6006546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80841660048301529295509116906370a0823190602401602060405180830381865afa15801562007390573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620073b691906200d269565b600154604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301526024820192909252600d60448201527f6372656469744163636f756e74000000000000000000000000000000000000006064820152929450169063c657c71890608401600060405180830381600087803b1580156200745b57600080fd5b505af115801562007470573d6000803e3d6000fd5b50505050509091565b6200428984848484604051806020016040528060008152506200b0dd565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663406c8e2f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562007505573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200752b91906200d10a565b73ffffffffffffffffffffffffffffffffffffffff1663eebab8ef8373f39fd6e51aad88f6f4ce6ab8827279cfffb92266846040518463ffffffff1660e01b81526004016200757d939291906200d232565b600060405180830381600087803b1580156200759857600080fd5b505af1158015620075ad573d6000803e3d6000fd5b50506001546040517f06447d5600000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff90911692506306447d569150602401600060405180830381600087803b1580156200763157600080fd5b505af115801562007646573d6000803e3d6000fd5b50505050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663406c8e2f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620076b8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620076de91906200d10a565b73ffffffffffffffffffffffffffffffffffffffff166367b42645836040518263ffffffff1660e01b81526004016200771891906200d0d1565b602060405180830381865afa15801562007736573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200775c91906200d10a565b6002546040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602482015291169063095ea7b3906044016020604051808303816000875af1158015620077f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200781a91906200d527565b50600354600554604080517f406c8e2f000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169363597810349373f39fd6e51aad88f6f4ce6ab8827279cfffb922669391169163406c8e2f916004808201926020929091908290030181865afa158015620078ae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620078d491906200d10a565b73ffffffffffffffffffffffffffffffffffffffff166367b42645866040518263ffffffff1660e01b81526004016200790e91906200d0d1565b602060405180830381865afa1580156200792c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200795291906200d10a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604481018490526064015b600060405180830381600087803b158015620079c857600080fd5b505af1158015620079dd573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562007a4c57600080fd5b505af115801562007a61573d6000803e3d6000fd5b505050505050565b62007a7c87878787878787600162009cb2565b50505050505050565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b15801562007b0557600080fd5b505af115801562007b1a573d6000803e3d6000fd5b50506003546040805180820190915273ffffffffffffffffffffffffffffffffffffffff868116825260208201869052909116925063caa5c23f915062007b61906200b31b565b6040518263ffffffff1660e01b815260040162007b7f91906200d621565b600060405180830381600087803b15801562007a4c57600080fd5b62007a7c8787878787878760016200a3a3565b62007bca838383604051806020016040528060008152506200b384565b505050565b620040108282604051806020016040528060008152506200b4b9565b62007bf56200b82f565b604080516080810190915280600781526020016008815260200160098152602001600a905262007c2a90600d9060046200ceef565b506040805160808101909152806001815260200160028152602001600581526020016004905262007c6090600e9060046200ceef565b50600062007c6e826200b83b565b9050600062007c7d836200bec9565b905060008360021415620080c657828260405162007c9b906200cf9a565b62007ca89291906200d48d565b604051809103906000f08015801562007cc5573d6000803e3d6000fd5b50600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600554604080517f2954018c00000000000000000000000000000000000000000000000000000000815290519190921691632954018c9160048083019260209291908290030181865afa15801562007d63573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062007d8991906200d10a565b600754600554604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691632630c12f916004808201926020929091908290030181865afa15801562007e01573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062007e2791906200d10a565b73ffffffffffffffffffffffffffffffffffffffff16639dcb511a8660008151811062007e585762007e586200d283565b60200260200101516040518263ffffffff1660e01b815260040162007e99919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa15801562007eb7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062007edd91906200d10a565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562007f4b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062007f7191906200d10a565b73ffffffffffffffffffffffffffffffffffffffff16639dcb511a8760018151811062007fa25762007fa26200d283565b60200260200101516040518263ffffffff1660e01b815260040162007fe3919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa15801562008001573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200802791906200d10a565b60405162008035906200cfa8565b73ffffffffffffffffffffffffffffffffffffffff948516815292841660208401529083166040830152909116606082015260a0608082018190526011908201527f43757276654c503250726963654665656400000000000000000000000000000060c082015260e0015b604051809103906000f080158015620080bd573d6000803e3d6000fd5b50905062008d92565b83600314156200863c578282604051620080e0906200cfb6565b620080ed9291906200d48d565b604051809103906000f0801580156200810a573d6000803e3d6000fd5b50600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600554604080517f2954018c00000000000000000000000000000000000000000000000000000000815290519190921691632954018c9160048083019260209291908290030181865afa158015620081a8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620081ce91906200d10a565b600754600554604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691632630c12f916004808201926020929091908290030181865afa15801562008246573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200826c91906200d10a565b73ffffffffffffffffffffffffffffffffffffffff16639dcb511a866000815181106200829d576200829d6200d283565b60200260200101516040518263ffffffff1660e01b8152600401620082de919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa158015620082fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200832291906200d10a565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562008390573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620083b691906200d10a565b73ffffffffffffffffffffffffffffffffffffffff16639dcb511a87600181518110620083e757620083e76200d283565b60200260200101516040518263ffffffff1660e01b815260040162008428919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa15801562008446573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200846c91906200d10a565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620084da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200850091906200d10a565b73ffffffffffffffffffffffffffffffffffffffff16639dcb511a886002815181106200853157620085316200d283565b60200260200101516040518263ffffffff1660e01b815260040162008572919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa15801562008590573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620085b691906200d10a565b604051620085c4906200cfc4565b73ffffffffffffffffffffffffffffffffffffffff95861681529385166020850152918416604084015283166060830152909116608082015260c060a082018190526011908201527f43757276654c503350726963654665656400000000000000000000000000000060e082015261010001620080a0565b836004141562008d0557828260405162008656906200cfd2565b620086639291906200d48d565b604051809103906000f08015801562008680573d6000803e3d6000fd5b50600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600554604080517f2954018c00000000000000000000000000000000000000000000000000000000815290519190921691632954018c9160048083019260209291908290030181865afa1580156200871e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200874491906200d10a565b600754600554604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691632630c12f916004808201926020929091908290030181865afa158015620087bc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620087e291906200d10a565b73ffffffffffffffffffffffffffffffffffffffff16639dcb511a866000815181106200881357620088136200d283565b60200260200101516040518263ffffffff1660e01b815260040162008854919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa15801562008872573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200889891906200d10a565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562008906573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200892c91906200d10a565b73ffffffffffffffffffffffffffffffffffffffff16639dcb511a876001815181106200895d576200895d6200d283565b60200260200101516040518263ffffffff1660e01b81526004016200899e919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa158015620089bc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620089e291906200d10a565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562008a50573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062008a7691906200d10a565b73ffffffffffffffffffffffffffffffffffffffff16639dcb511a8860028151811062008aa75762008aa76200d283565b60200260200101516040518263ffffffff1660e01b815260040162008ae8919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa15801562008b06573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062008b2c91906200d10a565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562008b9a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062008bc091906200d10a565b73ffffffffffffffffffffffffffffffffffffffff16639dcb511a8960038151811062008bf15762008bf16200d283565b60200260200101516040518263ffffffff1660e01b815260040162008c32919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa15801562008c50573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062008c7691906200d10a565b60405162008c84906200cfe0565b73ffffffffffffffffffffffffffffffffffffffff96871681529486166020860152928516604085015290841660608401528316608083015290911660a082015260e060c082018190526011908201527f43757276654c503450726963654665656400000000000000000000000000000061010082015261012001620080a0565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f636f7374727563746f723a20496e636f7272656374206e436f696e732070617260448201527f616d65746572000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562008e00573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062008e2691906200d10a565b600f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283161790556001546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201529116906306447d5690602401600060405180830381600087803b15801562008ed157600080fd5b505af115801562008ee6573d6000803e3d6000fd5b50505050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562008f58573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062008f7e91906200d10a565b600f546040517fe8a97a3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152838216602482015291169063e8a97a3e90604401600060405180830381600087803b15801562008ff357600080fd5b505af115801562009008573d6000803e3d6000fd5b505060048054600f546040517f3e7c88d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216938101939093526124546024840152169250633e7c88d69150604401600060405180830381600087803b1580156200908657600080fd5b505af11580156200909b573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200910a57600080fd5b505af11580156200911f573d6000803e3d6000fd5b5050505083600214156200920657600254600754600f5460405173ffffffffffffffffffffffffffffffffffffffff93841693928316929091169060009062009168906200cfee565b73ffffffffffffffffffffffffffffffffffffffff9485168152928416602084015290831660408301529091166060820152608001604051809103906000f080158015620091ba573d6000803e3d6000fd5b50600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905562009290565b83600314156200924b57600254600754600f5460405173ffffffffffffffffffffffffffffffffffffffff93841693928316929091169060009062009168906200cffc565b836004141562008d0557600254600754600f5460405173ffffffffffffffffffffffffffffffffffffffff93841693928316929091169060009062009168906200d00a565b6001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b1580156200931057600080fd5b505af115801562009325573d6000803e3d6000fd5b5050600480546007546008546040517f7bccacee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283169481019490945281166024840152169250637bccacee9150604401600060405180830381600087803b158015620093a557600080fd5b505af1158015620093ba573d6000803e3d6000fd5b505060005462010000900473ffffffffffffffffffffffffffffffffffffffff16915063eebab8ef9050600773f39fd6e51aad88f6f4ce6ab8827279cfffb9226662009411670de0b6b3a7640000614e206200d160565b6040518463ffffffff1660e01b815260040162009431939291906200d232565b600060405180830381600087803b1580156200944c57600080fd5b505af115801562009461573d6000803e3d6000fd5b505060005462010000900473ffffffffffffffffffffffffffffffffffffffff16915063eebab8ef9050600173f39fd6e51aad88f6f4ce6ab8827279cfffb92266620094b8670de0b6b3a7640000614e206200d160565b6040518463ffffffff1660e01b8152600401620094d8939291906200d232565b600060405180830381600087803b158015620094f357600080fd5b505af115801562009508573d6000803e3d6000fd5b50506000546007805473ffffffffffffffffffffffffffffffffffffffff620100009093048316945063eebab8ef935090911662009551670de0b6b3a7640000614e206200d160565b6040518463ffffffff1660e01b815260040162009571939291906200d232565b600060405180830381600087803b1580156200958c57600080fd5b505af1158015620095a1573d6000803e3d6000fd5b50506000546007546040517feebab8ef00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff620100009093048316945063eebab8ef9350620096109260089216906404a817c800906004016200d232565b600060405180830381600087803b1580156200962b57600080fd5b505af115801562009640573d6000803e3d6000fd5b5050505060038410620096e75760005460075473ffffffffffffffffffffffffffffffffffffffff6201000090920482169163eebab8ef916009911662009692670de0b6b3a764000061a4106200d160565b6040518463ffffffff1660e01b8152600401620096b2939291906200d232565b600060405180830381600087803b158015620096cd57600080fd5b505af1158015620096e2573d6000803e3d6000fd5b505050505b600484106200978a5760005460075473ffffffffffffffffffffffffffffffffffffffff6201000090920482169163eebab8ef91600a911662009735670de0b6b3a7640000612ee06200d160565b6040518463ffffffff1660e01b815260040162009755939291906200d232565b600060405180830381600087803b1580156200977057600080fd5b505af115801562009785573d6000803e3d6000fd5b505050505b600154600854604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152600760448201527f4144415054455200000000000000000000000000000000000000000000000000606482015291169063c657c71890608401600060405180830381600087803b1580156200983057600080fd5b505af115801562009845573d6000803e3d6000fd5b5050600154600754604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152600a60448201527f43555256455f4d4f434b0000000000000000000000000000000000000000000060648201529116925063c657c7189150608401600060405180830381600087803b158015620098ef57600080fd5b505af115801562009904573d6000803e3d6000fd5b5050600154600f54604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152600e60448201527f43555256455f4c505f544f4b454e00000000000000000000000000000000000060648201529116925063c657c7189150608401600060405180830381600087803b158015620099ae57600080fd5b505af1158015620099c3573d6000803e3d6000fd5b5050505050505050565b80821462004010577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f5060405162009a5b9060208082526022908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b75696e60408201527f745d000000000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a88160405162009a9491906200d636565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a88260405162009acd91906200d682565b60405180910390a1620040106200c551565b6001546040517f06447d5600000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116906306447d5690602401600060405180830381600087803b15801562009b5f57600080fd5b505af115801562009b74573d6000803e3d6000fd5b50506002546040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6024820152908516925063095ea7b391506044016020604051808303816000875af115801562009c11573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062009c3791906200d527565b506003546040517f5978103400000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301526044820184905290911690635978103490606401620079ad565b6002546040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152600092169063e958b70490602401602060405180830381865afa15801562009d24573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062009d4a91906200d10a565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000918716906370a0823190602401602060405180830381865afa15801562009dbd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062009de391906200d269565b600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481019290925260006024830181905260448301819052606483015291925073ffffffffffffffffffffffffffffffffffffffff9091169063491cc7c290608401600060405180830381600087803b15801562009e6a57600080fd5b505af115801562009e7f573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff8b1692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a2821562009ffd576001546002546003546040805173ffffffffffffffffffffffffffffffffffffffff92831660248201528d831660448201528a831660648201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6084808301919091528251808303909101815260a490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f46fb371d0000000000000000000000000000000000000000000000000000000017905290517fbd6af4340000000000000000000000000000000000000000000000000000000081529382169363bd6af4349362009fc8931691906004016200d6c0565b600060405180830381600087803b15801562009fe357600080fd5b505af115801562009ff8573d6000803e3d6000fd5b505050505b60015460025460035460405173ffffffffffffffffffffffffffffffffffffffff9384169363bd6af434938116927f6ce4074a00000000000000000000000000000000000000000000000000000000926200a06392909116908f908e906024016200d6f9565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b90921682526200a0f692916004016200d6c0565b600060405180830381600087803b1580156200a11157600080fd5b505af11580156200a126573d6000803e3d6000fd5b5050600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526024810192909252600060448301819052606483015273ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b1580156200a1ac57600080fd5b505af11580156200a1c1573d6000803e3d6000fd5b505060035460405173ffffffffffffffffffffffffffffffffffffffff8d8116945090911691507faed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab0390600090a382156200a3975760015460025460035473ffffffffffffffffffffffffffffffffffffffff9283169263bd6af434928116917f46fb371d0000000000000000000000000000000000000000000000000000000091168d8b8a6200a292577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6200a295565b60015b60405173ffffffffffffffffffffffffffffffffffffffff9485166024820152928416604484015292166064820152608481019190915260a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b90921682526200a36292916004016200d6c0565b600060405180830381600087803b1580156200a37d57600080fd5b505af11580156200a392573d6000803e3d6000fd5b505050505b50505050505050505050565b6002546040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152600092169063e958b70490602401602060405180830381865afa1580156200a415573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200a43b91906200d10a565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000918716906370a0823190602401602060405180830381865afa1580156200a4ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200a4d491906200d269565b905082156200a60c576001546002546040805173ffffffffffffffffffffffffffffffffffffffff8c811660248301528d811660448301528a811660648301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6084808401919091528351808403909101815260a490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f46fb371d0000000000000000000000000000000000000000000000000000000017905291517fbd6af4340000000000000000000000000000000000000000000000000000000081529382169363bd6af434936200a5d7931691906004016200d6c0565b600060405180830381600087803b1580156200a5f257600080fd5b505af11580156200a607573d6000803e3d6000fd5b505050505b60015460025460405173ffffffffffffffffffffffffffffffffffffffff9283169263bd6af4349216907f6ce4074a00000000000000000000000000000000000000000000000000000000906200a66c908d908f908e906024016200d6f9565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b90921682526200a6ff92916004016200d6c0565b600060405180830381600087803b1580156200a71a57600080fd5b505af11580156200a72f573d6000803e3d6000fd5b5050600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526024810192909252600060448301819052606483015273ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b1580156200a7b557600080fd5b505af11580156200a7ca573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff808d1693508b1691507faed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab0390600090a382156200a3975760015460025473ffffffffffffffffffffffffffffffffffffffff9182169163bd6af43491167f46fb371d000000000000000000000000000000000000000000000000000000008b8d8b8a6200a292577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6200a295565b62007bca838383604051806020016040528060008152506200c6d4565b6001805460609173ffffffffffffffffffffffffffffffffffffffff90911690631f7b4f30906200a8e19043906200d3f0565b6040518263ffffffff1660e01b81526004016200a90091815260200190565b600060405180830381600087803b1580156200a91b57600080fd5b505af11580156200a930573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b1580156200a9b457600080fd5b505af11580156200a9c9573d6000803e3d6000fd5b50506003546040517f5f73fbec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169250635f73fbec915062001005907390f79bf6eb2c4f870365e785982e1f101e93b90690600090819087906004016200d734565b60008273ffffffffffffffffffffffffffffffffffffffff1663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200aa8e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200aab491906200d10a565b6040517f1652e9fc00000000000000000000000000000000000000000000000000000000815230600482015290915073ffffffffffffffffffffffffffffffffffffffff821690631652e9fc90602401600060405180830381600087803b1580156200ab1f57600080fd5b505af11580156200ab34573d6000803e3d6000fd5b50506040517f40c10f1900000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660048201526024810185905273ffffffffffffffffffffffffffffffffffffffff841692506340c10f1991506044016020604051808303816000875af11580156200abc0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200abe691906200d527565b506040517f1652e9fc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152821690631652e9fc90602401600060405180830381600087803b1580156200ac5157600080fd5b505af11580156200ac66573d6000803e3d6000fd5b50506001546040517f06447d5600000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff90911692506306447d569150602401600060405180830381600087803b1580156200acea57600080fd5b505af11580156200acff573d6000803e3d6000fd5b50506002546040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6024820152908416925063095ea7b391506044016020604051808303816000875af11580156200ad9c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200adc291906200d527565b506003546040517f5978103400000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff83811660248301526044820185905290911690635978103490606401600060405180830381600087803b1580156200ae5257600080fd5b505af11580156200ae67573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200aed657600080fd5b505af115801562007a7c573d6000803e3d6000fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161462007bca577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf3583816040516200af5091906200d77d565b60405180910390a162007bca83836200afb1565b81831462007bca577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf3583816040516200af9d91906200d77d565b60405180910390a162007bca8383620099cd565b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462004010577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f506040516200b06b9060208082526025908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b61646460408201527f726573735d000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f816040516200b0a491906200d7c6565b60405180910390a17f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f8260405162009acd91906200d828565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301526000919087169063dd62ed3e90604401602060405180830381865afa1580156200b156573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200b17c91906200d269565b90508281146200b30f577f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f828773ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200b1f4573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200b23c91908101906200d866565b6040516020016200b24f9291906200d93d565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526200b28b9188906200d9c3565b60405180910390a160408051818152600a818301527f207370656e6465723a2000000000000000000000000000000000000000000000606082015273ffffffffffffffffffffffffffffffffffffffff8616602082015290517f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f9181900360800190a15b62007a618184620099cd565b604080516001808252818301909252606091816020015b6040805180820190915260008152606060208201528152602001906001900390816200b33257905050905081816000815181106200b374576200b3746200d283565b6020026020010181905250919050565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff166200b40b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f74657374546f6b656e5375697465206973206e6f742073657400000000000000604482015260640162008d89565b6000546040517f67b42645000000000000000000000000000000000000000000000000000000008152620042899162010000900473ffffffffffffffffffffffffffffffffffffffff16906367b42645906200b46c9088906004016200d0d1565b602060405180830381865afa1580156200b48a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200b4b091906200d10a565b8484846200c6d4565b6002546040517fe958b70400000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015260009173ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156200b53d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200b56391906200d10a565b6002546040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015292935060009290911690638991b2f190602401602060405180830381865afa1580156200b5da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200b60091906200d269565b6002546040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529091169063f67c5bd090602401602060405180830381865afa1580156200b671573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200b69791906200d269565b161515905083151581148015906200b6af5750825115155b156200b6ef577f0b2e13ff20ac7b474198655583edf70dedd2c1dc980e329c4fbb2fc0748b796b836040516200b6e691906200d3db565b60405180910390a15b62001035841515821515148673ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200b746573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200b78e91908101906200d866565b836200b7d0576040518060400160405280601981526020017f206e6f7420656e61626c656420617320657870656374656420000000000000008152506200b807565b6040518060400160405280601981526020017f20656e61626c6564206173206e6f7420657870657463746564000000000000008152505b6040516020016200b81a9291906200d9fd565b6040516020818303038152906040526200c88f565b62000a2560016200c8d9565b606060048211156200b8d0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f676574506f6f6c546f6b656e733a20496e636f7272656374206e436f696e732060448201527f706172616d657465720000000000000000000000000000000000000000000000606482015260840162008d89565b8167ffffffffffffffff8111156200b8ec576200b8ec6200d40b565b6040519080825280602002602001820160405280156200b916578160200160208202803683370190505b50905060005b828110156200bec35760005462010000900473ffffffffffffffffffffffffffffffffffffffff166367b42645600d83600481106200b95f576200b95f6200d283565b602091828204019190069054906101000a900460ff166040518263ffffffff1660e01b81526004016200b99391906200d0d1565b602060405180830381865afa1580156200b9b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200b9d791906200d10a565b8282815181106200b9ec576200b9ec6200d283565b73ffffffffffffffffffffffffffffffffffffffff9283166020918202929092010152600254835191169063f67c5bd0908490849081106200ba32576200ba326200d283565b60200260200101516040518263ffffffff1660e01b81526004016200ba73919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa1580156200ba91573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200bab791906200d269565b6200beae576001546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff909116906306447d5690602401600060405180830381600087803b1580156200bb3c57600080fd5b505af11580156200bb51573d6000803e3d6000fd5b50505050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200bbc3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200bbe991906200d10a565b73ffffffffffffffffffffffffffffffffffffffff1663e8a97a3e8383815181106200bc19576200bc196200d283565b602090810291909101015160005462010000900473ffffffffffffffffffffffffffffffffffffffff166398cdaadf600d86600481106200bc5e576200bc5e6200d283565b602091828204019190069054906101000a900460ff166040518263ffffffff1660e01b81526004016200bc9291906200d0d1565b602060405180830381865afa1580156200bcb0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200bcd691906200d10a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156200bd4457600080fd5b505af11580156200bd59573d6000803e3d6000fd5b5050600454845173ffffffffffffffffffffffffffffffffffffffff9091169250633e7c88d691508490849081106200bd96576200bd966200d283565b60209081029190910101516040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff90911660048201526124546024820152604401600060405180830381600087803b1580156200be1057600080fd5b505af11580156200be25573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200be9457600080fd5b505af11580156200bea9573d6000803e3d6000fd5b505050505b806200beba816200d1f6565b9150506200b91c565b50919050565b606060048211156200bf5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f676574556e6465726c79696e67506f6f6c546f6b656e733a20496e636f72726560448201527f6374206e436f696e7320706172616d6574657200000000000000000000000000606482015260840162008d89565b8167ffffffffffffffff8111156200bf7a576200bf7a6200d40b565b6040519080825280602002602001820160405280156200bfa4578160200160208202803683370190505b50905060005b828110156200bec35760005462010000900473ffffffffffffffffffffffffffffffffffffffff166367b42645600e83600481106200bfed576200bfed6200d283565b602091828204019190069054906101000a900460ff166040518263ffffffff1660e01b81526004016200c02191906200d0d1565b602060405180830381865afa1580156200c03f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200c06591906200d10a565b8282815181106200c07a576200c07a6200d283565b73ffffffffffffffffffffffffffffffffffffffff9283166020918202929092010152600254835191169063f67c5bd0908490849081106200c0c0576200c0c06200d283565b60200260200101516040518263ffffffff1660e01b81526004016200c101919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa1580156200c11f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200c14591906200d269565b6200c53c576001546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff909116906306447d5690602401600060405180830381600087803b1580156200c1ca57600080fd5b505af11580156200c1df573d6000803e3d6000fd5b50505050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200c251573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200c27791906200d10a565b73ffffffffffffffffffffffffffffffffffffffff1663e8a97a3e8383815181106200c2a7576200c2a76200d283565b602090810291909101015160005462010000900473ffffffffffffffffffffffffffffffffffffffff166398cdaadf600e86600481106200c2ec576200c2ec6200d283565b602091828204019190069054906101000a900460ff166040518263ffffffff1660e01b81526004016200c32091906200d0d1565b602060405180830381865afa1580156200c33e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200c36491906200d10a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156200c3d257600080fd5b505af11580156200c3e7573d6000803e3d6000fd5b5050600454845173ffffffffffffffffffffffffffffffffffffffff9091169250633e7c88d691508490849081106200c424576200c4246200d283565b60209081029190910101516040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff90911660048201526124546024820152604401600060405180830381600087803b1580156200c49e57600080fd5b505af11580156200c4b3573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200c52257600080fd5b505af11580156200c537573d6000803e3d6000fd5b505050505b806200c548816200d1f6565b9150506200bfaa565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200c6a65760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000009282019290925260016060820152600091907f70ca10bbd0dbfd9020a9f4b13402c16cb120705e0d1c0aeab10fa353ae586fc490608001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526200c62392916020016200d4bf565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526200c65d916200d509565b6000604051808303816000865af19150503d80600081146200c69c576040519150601f19603f3d011682016040523d82523d6000602084013e6200c6a1565b606091505b505050505b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600091908616906370a0823190602401602060405180830381865afa1580156200c745573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200c76b91906200d269565b90508281146200c883577f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f828673ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200c7e3573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200c82b91908101906200d866565b6040516020016200c83e9291906200da5c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526200c87a9187906200d9c3565b60405180910390a15b620010358184620099cd565b8162004010577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf3583816040516200c8c691906200d77d565b60405180910390a162004010826200ce01565b600181600a8111156200c8f0576200c8f06200d066565b14806200c9115750600381600a8111156200c90f576200c90f6200d066565b145b6200c979576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f556e737570706f7274656420746f6b656e000000000000000000000000000000604482015260640162008d89565b6040516200c987906200d018565b604051809103906000f0801580156200c9a4573d6000803e3d6000fd5b50600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff166201000073ffffffffffffffffffffffffffffffffffffffff9384168102919091179182905590041663b36ba2086200ca0e670de0b6b3a764000060646200d160565b6040518263ffffffff1660e01b81526004016000604051808303818588803b1580156200ca3a57600080fd5b505af11580156200ca4f573d6000803e3d6000fd5b5050505050600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816040516200ca86906200d026565b6200ca939291906200dae2565b604051809103906000f0801580156200cab0573d6000803e3d6000fd5b50600580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169182179055604080517f6f307dc30000000000000000000000000000000000000000000000000000000081529051636f307dc3916004808201926020929091908290030181865afa1580156200cb4a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200cb7091906200d10a565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600554604080517fc12c21c00000000000000000000000000000000000000000000000000000000081529051919092169163c12c21c09160048083019260209291908290030181865afa1580156200cc0d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200cc3391906200d10a565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600554604080517f2f7a188100000000000000000000000000000000000000000000000000000000815290519190921691632f7a18819160048083019260209291908290030181865afa1580156200ccd0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200ccf691906200d10a565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600554604080517ff9aa028a0000000000000000000000000000000000000000000000000000000081529051919092169163f9aa028a9160048083019260209291908290030181865afa1580156200cd93573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200cdb991906200d10a565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b8062000a16577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f506040516200ce679060208082526017908201527f4572726f723a20417373657274696f6e204661696c6564000000000000000000604082015260600190565b60405180910390a162000a166200c551565b60405180604001604052806002906020820280368337509192915050565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b61465e806200db0f83390190565b613161806201216d83390190565b6001830191839082156200cf885791602002820160005b838211156200cf5757835183826101000a81548160ff0219169083600a8111156200cf35576200cf356200d066565b021790555092602001926001016020816000010492830192600103026200cf06565b80156200cf865782816101000a81549060ff02191690556001016020816000010492830192600103026200cf57565b505b506200cf969291506200d035565b5090565b61395480620152ce83390190565b6117138062018c2283390190565b613960806201a33583390190565b611852806201dc9583390190565b613969806201f4e783390190565b6119828062022e5083390190565b615f7e80620247d283390190565b615f8c806202a75083390190565b615f9a80620306dc83390190565b617a51806203667683390190565b62031ed6806203e0c783390190565b5b808211156200cf9657600081556001016200d036565b6000602082840312156200d05f57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600b81106200d0cd577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b602081016200d0e182846200d095565b92915050565b73ffffffffffffffffffffffffffffffffffffffff8116811462000a1657600080fd5b6000602082840312156200d11d57600080fd5b81516200d12a816200d0e7565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156200d19b576200d19b6200d131565b500290565b6000826200d1d7577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000828210156200d1f1576200d1f16200d131565b500390565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156200d22b576200d22b6200d131565b5060010190565b606081016200d24282866200d095565b73ffffffffffffffffffffffffffffffffffffffff93909316602082015260400152919050565b6000602082840312156200d27c57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60608101818460005b60028110156200d2dc5781518352602092830192909101906001016200d2bb565b5050508260408301529392505050565b60808101818460005b60038110156200d3165781518352602092830192909101906001016200d2f5565b5050508260608301529392505050565b60a08101818460005b60048110156200d3505781518352602092830192909101906001016200d32f565b5050508260808301529392505050565b60005b838110156200d37d5781810151838201526020016200d363565b83811115620042895750506000910152565b600081518084526200d3a98160208601602086016200d360565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006200d12a60208301846200d38f565b600082198211156200d406576200d4066200d131565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081518084526020808501945080840160005b838110156200d48257815173ffffffffffffffffffffffffffffffffffffffff16875295820195908201906001016200d44e565b509495945050505050565b6040815260006200d4a260408301856200d43a565b82810360208401526200d4b681856200d43a565b95945050505050565b7fffffffff0000000000000000000000000000000000000000000000000000000083168152600082516200d4fb8160048501602087016200d360565b919091016004019392505050565b600082516200d51d8184602087016200d360565b9190910192915050565b6000602082840312156200d53a57600080fd5b815180151581146200d12a57600080fd5b600081600f0b6f7fffffffffffffffffffffffffffffff8114156200d574576200d5746200d131565b60010192915050565b600082825180855260208086019550808260051b84010181860160005b848110156200d614578583037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00189528151805173ffffffffffffffffffffffffffffffffffffffff16845284015160408585018190526200d5ff818601836200d38f565b9a86019a94505050908301906001016200d59a565b5090979650505050505050565b6020815260006200d12a60208301846200d57d565b6040815260006200d67460408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b905082602083015292915050565b6040815260006200d67460408301600a81527f2020202041637475616c00000000000000000000000000000000000000000000602082015260400190565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015260006200d6f160408301846200d38f565b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff8086168352808516602084015250606060408301526200d4b660608301846200d38f565b73ffffffffffffffffffffffffffffffffffffffff8516815283602082015282151560408201526080606082015260006200d77360808301846200d57d565b9695505050505050565b60408152600560408201527f4572726f7200000000000000000000000000000000000000000000000000000060608201526080602082015260006200d12a60808301846200d38f565b6040815260006200d80460408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b905073ffffffffffffffffffffffffffffffffffffffff8316602083015292915050565b6040815260006200d80460408301600a81527f2020202041637475616c00000000000000000000000000000000000000000000602082015260400190565b6000602082840312156200d87957600080fd5b815167ffffffffffffffff808211156200d89257600080fd5b818401915084601f8301126200d8a757600080fd5b8151818111156200d8bc576200d8bc6200d40b565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156200d905576200d9056200d40b565b816040528281528760208487010111156200d91f57600080fd5b6200d9328360208301602088016200d360565b979650505050505050565b600083516200d9518184602088016200d360565b7f496e636f7272656374200000000000000000000000000000000000000000000090830190815283516200d98d81600a8401602088016200d360565b7f20416c6c6f77616e6365206f6e206163636f756e743a20200000000000000000600a9290910191820152602201949350505050565b6040815260006200d9d860408301856200d38f565b905073ffffffffffffffffffffffffffffffffffffffff831660208301529392505050565b7f546f6b656e2000000000000000000000000000000000000000000000000000008152600083516200da378160068501602088016200d360565b8351908301906200da508160068401602088016200d360565b01600601949350505050565b600083516200da708184602088016200d360565b7f496e636f7272656374200000000000000000000000000000000000000000000090830190815283516200daac81600a8401602088016200d360565b7f2062616c616e6365206f6e206163636f756e743a200000000000000000000000600a9290910191820152601f01949350505050565b73ffffffffffffffffffffffffffffffffffffffff83168152604081016200d12a60208301846200d09556fe6102606040523480156200001257600080fd5b506040516200465e3803806200465e833981016040819052620000359162000b9a565b84846001600160a01b03821615806200005557506001600160a01b038116155b156200007457604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038216608081905260408051632f7a188160e01b81529051632f7a1881916004808201926020929091908290030181865afa158015620000bf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e5919062000c01565b6001600160a01b0390811660a05290811660c05260016000558416151590506200012257604051635919af9760e11b815260040160405180910390fd5b608051604051630f67c5bd60e41b81526001600160a01b0385811660048301529091169063f67c5bd090602401602060405180830381865afa1580156200016d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000193919062000c26565b620001c157604051634c607af960e11b81526001600160a01b03841660048201526024015b60405180910390fd5b6001600160a01b038084166101e081905261020052821661022052610240819052620001ee600062000900565b6001600160a01b031660e05262000206600162000900565b6001600160a01b0316610100526200021f600262000900565b6001600160a01b03166101205262000238600362000900565b6001600160a01b031661014052620002516000620009f3565b6001600160a01b0316610160526200026a6001620009f3565b6001600160a01b031661018052620002836002620009f3565b6001600160a01b03166101a0526200029c6003620009f3565b6001600160a01b039081166101c05260e051161580620002c65750610100516001600160a01b0316155b15620002e557604051635919af9760e11b815260040160405180910390fd5b600281118015620003005750610120516001600160a01b0316155b156200031f57604051635919af9760e11b815260040160405180910390fd5b6003811180156200033a5750610140516001600160a01b0316155b156200035957604051635919af9760e11b815260040160405180910390fd5b60805160e051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620003a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003cc919062000c26565b620003fa5760e051604051634c607af960e11b81526001600160a01b039091166004820152602401620001b8565b60805161010051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa15801562000448573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200046e919062000c26565b6200049d5761010051604051634c607af960e11b81526001600160a01b039091166004820152602401620001b8565b6002811180156200051f575060805161012051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620004f7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200051d919062000c26565b155b156200054f5761012051604051634c607af960e11b81526001600160a01b039091166004820152602401620001b8565b600381118015620005d1575060805161014051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620005a9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005cf919062000c26565b155b15620006015761014051604051634c607af960e11b81526001600160a01b039091166004820152602401620001b8565b610160516001600160a01b0316158015906200068e575060805161016051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa15801562000666573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200068c919062000c26565b155b15620006be5761016051604051634c607af960e11b81526001600160a01b039091166004820152602401620001b8565b610180516001600160a01b0316158015906200074b575060805161018051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa15801562000723573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000749919062000c26565b155b156200077b5761018051604051634c607af960e11b81526001600160a01b039091166004820152602401620001b8565b6101a0516001600160a01b0316158015906200080857506080516101a051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620007e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000806919062000c26565b155b1562000838576101a051604051634c607af960e11b81526001600160a01b039091166004820152602401620001b8565b6101c0516001600160a01b031615801590620008c557506080516101c051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa1580156200089d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008c3919062000c26565b155b15620008f5576101c051604051634c607af960e11b81526001600160a01b039091166004820152602401620001b8565b505050505062000c66565b60c05160405163c661065760e01b8152600481018390526000916001600160a01b03169063c661065790602401602060405180830381865afa92505050801562000969575060408051601f3d908101601f19168201909252620009669181019062000c01565b60015b62000974576200097a565b92915050565b60c05160405163046e8dd760e31b8152600f84900b60048201526001600160a01b03909116906323746eb8906024015b602060405180830381865afa925050508015620009e6575060408051601f3d908101601f19168201909252620009e39181019062000c01565b60015b6200097457506000919050565b610220516000906001600160a01b03161562000a1457620009748262000ab6565b60c051604051630b9947eb60e41b8152600481018490526001600160a01b039091169063b9947eb090602401602060405180830381865afa92505050801562000a7c575060408051601f3d908101601f1916820190925262000a799181019062000c01565b60015b620009745760c051604051635b9cca9f60e11b8152600f84900b60048201526001600160a01b039091169063b739953e90602401620009aa565b60008162000aca5762000974600062000b0d565b610220516001600160a01b031663c661065762000ae960018562000c40565b6040518263ffffffff1660e01b8152600401620009aa91815260200190565b919050565b600081600f0b6000141562000b21575060e0515b81600f0b6001141562000b345750610100515b81600f0b6002141562000b475750610120515b81600f0b6003141562000b5a5750610140515b6001600160a01b03811662000b08576040516334769e6f60e21b815260040160405180910390fd5b80516001600160a01b038116811462000b0857600080fd5b600080600080600060a0868803121562000bb357600080fd5b62000bbe8662000b82565b945062000bce6020870162000b82565b935062000bde6040870162000b82565b925062000bee6060870162000b82565b9150608086015190509295509295909350565b60006020828403121562000c1457600080fd5b62000c1f8262000b82565b9392505050565b60006020828403121562000c3957600080fd5b5051919050565b60008282101562000c6157634e487b7160e01b600052601160045260246000fd5b500390565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e0516102005161022051610240516137af62000eaf600039600081816106c201528181612bab01528181612d620152612e7c015260006105430152600081816105da01528181611b1301528181611ed7015281816122470152818161292901526129c7015260006107cb015260008181610501015261234901526000818161037c015261231a01526000818161056a01526122eb01526000818161060101526122bc015260008181610794015261212101526000818161046a01526120f201526000818161072c01526120c30152600081816103f0015261209401526000818161067401528181610838015281816109050152818161099501528181610a8d01528181610b1c01528181610bad01528181610fc00152818161103801528181611238015281816112800152818161132d01528181611375015281816114260152818161145b015281816117440152818161183b015281816118b30152818161195801528181611ba301528181611bd801528181611c7301528181611f1c01528181611f890152818161201a01528181612567015281816126860152612760015260008181610491015281816123d2015261307e01526000818161069b01528181610d500152818161156601528181611a9f01528181611d7d015281816121bf015281816125bd01528181612657015281816127b60152818161285e01528181612b2101528181613106015281816131ba015261326401526137af6000f3fe608060405234801561001057600080fd5b506004361061034c5760003560e01c806379bea664116101bd578063cc2b27d7116100f9578063e2e7d264116100a2578063f446c1d01161007c578063f446c1d0146107b6578063f851a440146107be578063fc0c546a146107c6578063fee3f7f9146107ed57600080fd5b8063e2e7d26414610769578063ec026ca71461077c578063ef14101e1461078f57600080fd5b8063d21220a7116100d3578063d21220a714610727578063dd62ed3e1461074e578063ddca3f431461076157600080fd5b8063cc2b27d7146106f2578063ce30bbdb14610705578063cf023dd01461071457600080fd5b8063b739953e11610166578063bd90df7011610140578063bd90df701461066f578063c12c21c014610696578063c21ee162146106bd578063c6610657146106e457600080fd5b8063b739953e14610646578063b9947eb014610659578063bb7b8b801461066757600080fd5b806395d89b411161019757806395d89b4114610623578063a6417ed61461062b578063b4b577ad1461063e57600080fd5b806379bea664146105c257806382c63066146105d55780638ba51dfc146105fc57600080fd5b8063313ce5671161028c5780635e0d443f116102355780636e1d82711161020f5780636e1d82711461056557806370a082311461058c57806376a2f0f01461059f57806378aa73a4146105a757600080fd5b80635e0d443f1461052357806363543f061461053657806364a89bca1461053e57600080fd5b80634903b0d1116102665780634903b0d1146104e15780635409491a146104f457806357d78875146104fc57600080fd5b8063313ce567146104b357806333d2ebf2146104bb5780633df02124146104ce57600080fd5b806318160ddd116102f95780632081066c116102d35780632081066c1461044a57806323746eb81461045257806325be124e146104655780632f7a18811461048c57600080fd5b806318160ddd1461041a5780631a4d01d2146104225780631af4de831461043757600080fd5b806307211ef71161032a57806307211ef7146103d85780630dfe1681146103eb578063140522881461041257600080fd5b8063065a80d814610351578063068711631461037757806306fdde03146103c3575b600080fd5b61036461035f3660046132da565b6107f5565b6040519081526020015b60405180910390f35b61039e7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161036e565b6103cb610991565b60405161036e919061336f565b6103646103e6366004613382565b610a49565b61039e7f000000000000000000000000000000000000000000000000000000000000000081565b610364610b18565b610364610ba9565b6104356104303660046133be565b610c16565b005b610435610445366004613382565b610cae565b610364610fbc565b61039e6104603660046132da565b611029565b61039e7f000000000000000000000000000000000000000000000000000000000000000081565b61039e7f000000000000000000000000000000000000000000000000000000000000000081565b610364611034565b6104356104c93660046133e3565b6110a1565b6104356104dc36600461340d565b611135565b6103646104ef36600461344f565b611206565b61036461127c565b61039e7f000000000000000000000000000000000000000000000000000000000000000081565b610364610531366004613382565b6112e9565b610364611371565b61039e7f000000000000000000000000000000000000000000000000000000000000000081565b61039e7f000000000000000000000000000000000000000000000000000000000000000081565b61036461059a36600461348d565b6113de565b610364611457565b6105af600281565b60405161ffff909116815260200161036e565b6104356105d0366004613382565b6114c4565b61039e7f000000000000000000000000000000000000000000000000000000000000000081565b61039e7f000000000000000000000000000000000000000000000000000000000000000081565b6103cb611740565b61043561063936600461340d565b6117ad565b610364611837565b61039e6106543660046132da565b6118a4565b61039e61065436600461344f565b6103646118af565b61039e7f000000000000000000000000000000000000000000000000000000000000000081565b61039e7f000000000000000000000000000000000000000000000000000000000000000081565b6103647f000000000000000000000000000000000000000000000000000000000000000081565b61039e61046036600461344f565b6103646107003660046134aa565b61191c565b600360405161036e91906134d6565b6104356107223660046133be565b6119d9565b61039e7f000000000000000000000000000000000000000000000000000000000000000081565b61036461075c366004613517565b611b53565b610364611bd4565b61036461077736600461344f565b611c41565b61043561078a3660046133e3565b611cb7565b61039e7f000000000000000000000000000000000000000000000000000000000000000081565b610364611f18565b61039e611f85565b61039e7f000000000000000000000000000000000000000000000000000000000000000081565b610364612016565b6040517f4903b0d10000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff821660048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634903b0d1906024015b602060405180830381865afa9250505080156108cf575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526108cc91810190613550565b60015b610986576040517f065a80d8000000000000000000000000000000000000000000000000000000008152600f83900b60048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063065a80d8906024015b602060405180830381865afa158015610962573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109869190613550565b92915050565b919050565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156109fe573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610a44919081019061362a565b905090565b6040517f07211ef7000000000000000000000000000000000000000000000000000000008152600f84810b600483015283900b6024820152604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906307211ef7906064015b602060405180830381865afa158015610aea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0e9190613550565b90505b9392505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663140522886040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a449190613550565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b85573d6000803e3d6000fd5b60026000541415610c88576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b60026000908155610c9883612083565b9050610ca38161218e565b505060016000555050565b60026000541415610d1b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c7f565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610dac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dd0919061367b565b90506000610ddd856122ab565b90506000610dea856122ab565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529192506000918416906370a0823190602401602060405180830381865afa158015610e5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e809190613550565b90506001811115610fae577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce8000000610ec68784613698565b610ed091906136fc565b604051600f8a810b602483015289900b60448201526064810184905260848101829052909150610fab908690869086907fa6417ed6000000000000000000000000000000000000000000000000000000009060a4015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526001806123b5565b50505b505060016000555050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632081066c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b85573d6000803e3d6000fd5b600061098682612083565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b85573d6000803e3d6000fd5b6002600054141561110e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c7f565b6002600090815561111e83612083565b905061112b83828461282d565b5050600160005550565b600260005414156111a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c7f565b600260009081556111b285612083565b905060006111bf85612083565b9050610fae82826000368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250600193509150612ad89050565b6040517f4903b0d1000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634903b0d190602401610878565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635409491a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b85573d6000803e3d6000fd5b6040517f5e0d443f000000000000000000000000000000000000000000000000000000008152600f84810b600483015283900b6024820152604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635e0d443f90606401610acd565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166363543f066040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b85573d6000803e3d6000fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401610945565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166376a2f0f06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b85573d6000803e3d6000fd5b60026000541415611531576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c7f565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156115c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e6919061367b565b905060006115f385612083565b9050600061160085612083565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529192506000918416906370a0823190602401602060405180830381865afa158015611672573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116969190613550565b90506001811115610fae577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce80000006116dc8784613698565b6116e691906136fc565b604051600f8a810b602483015289900b60448201526064810184905260848101829052909150610fab908690869086907f3df02124000000000000000000000000000000000000000000000000000000009060a401610f26565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156109fe573d6000803e3d6000fd5b6002600054141561181a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c7f565b6002600090815561182a856122ab565b905060006111bf856122ab565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b4b577ad6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b85573d6000803e3d6000fd5b6000610986826122ab565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb7b8b806040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b85573d6000803e3d6000fd5b6040517fcc2b27d700000000000000000000000000000000000000000000000000000000815260048101839052600f82900b60248201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063cc2b27d7906044015b602060405180830381865afa1580156119b5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b119190613550565b60026000541415611a46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c7f565b60026000908155611a5683612083565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0a919061367b565b9050611b4681837f0000000000000000000000000000000000000000000000000000000000000000611b3d888a89612ba7565b600160006123b5565b5050600160005550505050565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063dd62ed3e90604401611998565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b85573d6000803e3d6000fd5b6040517fe2e7d264000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e2e7d26490602401610945565b60026000541415611d24576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c7f565b60026000908155611d3483612083565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611dc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de8919061367b565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000918416906370a0823190602401602060405180830381865afa158015611e5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7e9190613550565b90506001811115611f0c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce8000000611ec48684613698565b611ece91906136fc565b9050611f0983857f0000000000000000000000000000000000000000000000000000000000000000611f018a8787612ba7565b6001806123b5565b50505b50506001600055505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f446c1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b85573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ff2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a44919061367b565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fee3f7f96040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b85573d6000803e3d6000fd5b600081600f0b600014156120b457507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b600114156120e357507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6002141561211257507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6003141561214157507f00000000000000000000000000000000000000000000000000000000000000005b73ffffffffffffffffffffffffffffffffffffffff811661098c576040517fd1da79bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa15801561221b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061223f919061367b565b90506122a6817f0000000000000000000000000000000000000000000000000000000000000000846000368080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525092508291506123b59050565b505050565b600081600f0b600014156122dc57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6001141561230b57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6002141561233a57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6003141561214157507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff811661098c576040517fd1da79bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606000803373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461251e576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301528916906370a0823190602401602060405180830381865afa158015612463573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124879190613550565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152919350908816906370a0823190602401602060405180830381865afa1580156124f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251b9190613550565b90505b841561261a576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561260157600080fd5b505af1158015612615573d6000803e3d6000fd5b505050505b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a906126b09033907f0000000000000000000000000000000000000000000000000000000000000000908b90600401613737565b6000604051808303816000875af11580156126cf573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052612715919081019061362a565b92508415612813576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156127fa57600080fd5b505af115801561280e573d6000803e3d6000fd5b505050505b612821898989858589613066565b50509695505050505050565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156128ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128de919061367b565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000917f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015612970573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129949190613550565b90506001811115612ad1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01612acf827f0000000000000000000000000000000000000000000000000000000000000000867f1a4d01d200000000000000000000000000000000000000000000000000000000858a6b033b2e3c9fd0803ce8000000612a218b84613698565b612a2b91906136fc565b6040516024810193909352600f9190910b60448301526064820152608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152600060016123b5565b505b5050505050565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015260609060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015612b68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b8c919061367b565b9050612b9c8188888888886123b5565b979650505050505050565b60607f000000000000000000000000000000000000000000000000000000000000000060021415612d605783600f0b600014612c9d576040516000602482015260448101849052606481018390527f0b4c7e4d00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612d59565b6040516024810184905260006044820152606481018390527f0b4c7e4d00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091525b9050610b11565b7f000000000000000000000000000000000000000000000000000000000000000060031415612e7a5783600f0b600014612e315783600f0b600114612de857604051600060248201819052604482015260648101849052608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401612c1b565b604051600060248201819052604482018590526064820152608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401612c1b565b604051602481018490526000604482018190526064820152608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401612cdb565b7f0000000000000000000000000000000000000000000000000000000000000000600414156130045783600f0b600014612fb45783600f0b600114612f645783600f0b600214612f14576040516000602482018190526044820181905260648201526084810184905260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401612c1b565b6040516000602482018190526044820181905260648201859052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401612c1b565b6040516000602482018190526044820185905260648201819052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401612c1b565b6040516024810184905260006044820181905260648201819052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401612cdb565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f496e636f7272656374206e436f696e73000000000000000000000000000000006044820152606401610c7f565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614613167576040517f654a9eda00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528681166024830152858116604483015260648201859052608482018490527f0000000000000000000000000000000000000000000000000000000000000000169063654a9eda9060a401600060405180830381600087803b15801561314a57600080fd5b505af115801561315e573d6000803e3d6000fd5b50505050612acf565b8015613217576040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015286811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b1580156131fe57600080fd5b505af1158015613212573d6000803e3d6000fd5b505050505b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015285811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156132a857600080fd5b505af11580156132bc573d6000803e3d6000fd5b50505050505050505050565b8035600f81900b811461098c57600080fd5b6000602082840312156132ec57600080fd5b610b11826132c8565b60005b838110156133105781810151838201526020016132f8565b8381111561331f576000848401525b50505050565b6000815180845261333d8160208601602086016132f5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610b116020830184613325565b60008060006060848603121561339757600080fd5b6133a0846132c8565b92506133ae602085016132c8565b9150604084013590509250925092565b6000806000606084860312156133d357600080fd5b833592506133ae602085016132c8565b600080604083850312156133f657600080fd5b6133ff836132c8565b946020939093013593505050565b6000806000806080858703121561342357600080fd5b61342c856132c8565b935061343a602086016132c8565b93969395505050506040820135916060013590565b60006020828403121561346157600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461348a57600080fd5b50565b60006020828403121561349f57600080fd5b8135610b1181613468565b600080604083850312156134bd57600080fd5b823591506134cd602084016132c8565b90509250929050565b6020810160118310613511577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000806040838503121561352a57600080fd5b823561353581613468565b9150602083013561354581613468565b809150509250929050565b60006020828403121561356257600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff808411156135b3576135b3613569565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019082821181831017156135f9576135f9613569565b8160405280935085815286868601111561361257600080fd5b6136208660208301876132f5565b5050509392505050565b60006020828403121561363c57600080fd5b815167ffffffffffffffff81111561365357600080fd5b8201601f8101841361366457600080fd5b61367384825160208401613598565b949350505050565b60006020828403121561368d57600080fd5b8151610b1181613468565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156136f7577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500290565b600082613732577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600073ffffffffffffffffffffffffffffffffffffffff8086168352808516602084015250606060408301526137706060830184613325565b9594505050505056fea264697066735822122051074fd8cf58ca5bb49685589b34462a809a6a5e78b8280b154f4733c0eb0c5964736f6c634300080a003360806040523480156200001157600080fd5b50604051620031613803806200316183398101604081905262000034916200029b565b8151620000499060029060208501906200012c565b5080516200005f9060039060208401906200012c565b5060006012604051620000729062000196565b6060808252600790820152664352564d6f636b60c81b608082015260a0602082018190526015908201527f43525620666f72204375727665506f6f6c4d6f636b000000000000000000000060c082015260ff909116604082015260e001604051809103906000f080158015620000ec573d6000803e3d6000fd5b50600080546001600160a01b039092166001600160a01b03199283168117909155600180549092161790555050670de0b6b3a76400006007555062000305565b82805482825590600052602060002090810192821562000184579160200282015b828111156200018457825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906200014d565b5062000192929150620001a4565b5090565b6117588062001a0983390190565b5b80821115620001925760008155600101620001a5565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b0381168114620001e957600080fd5b919050565b600082601f8301126200020057600080fd5b815160206001600160401b03808311156200021f576200021f620001bb565b8260051b604051601f19603f83011681018181108482111715620002475762000247620001bb565b6040529384528581018301938381019250878511156200026657600080fd5b83870191505b8482101562000290576200028082620001d1565b835291830191908301906200026c565b979650505050505050565b60008060408385031215620002af57600080fd5b82516001600160401b0380821115620002c757600080fd5b620002d586838701620001ee565b93506020850151915080821115620002ec57600080fd5b50620002fb85828601620001ee565b9150509250929050565b6116f480620003156000396000f3fe608060405234801561001057600080fd5b50600436106102925760003560e01c806382c6306611610160578063bb7b8b80116100d8578063e2e7d2641161008c578063f851a44011610071578063f851a440146104b0578063fc0c546a146104b7578063fee3f7f9146102ea57600080fd5b8063e2e7d264146104a2578063f446c1d0146102ea57600080fd5b8063cc2b27d7116100bd578063cc2b27d714610479578063dd62ed3e1461048c578063ddca3f43146102ea57600080fd5b8063bb7b8b801461045e578063c66106571461046657600080fd5b8063a6417ed61161012f578063b739953e11610114578063b739953e14610425578063b91434d114610438578063b9947eb01461044b57600080fd5b8063a6417ed614610412578063b4b577ad146102ea57600080fd5b806382c63066146103d65780638ea875f3146103f657806395d89b41146102bd57806399bd2ba5146103ff57600080fd5b80633df021241161020e57806363543f06116101c257806371035418116101a7578063710354181461039e57806376a2f0f0146102ea5780637b475b68146103b157600080fd5b806363543f06146102ea57806370a082311461038a57600080fd5b80635409491a116101f35780635409491a146102ea57806356ac3503146103645780635e0d443f1461037757600080fd5b80633df021241461033e5780634903b0d11461035157600080fd5b806318160ddd116102655780632081066c1161024a5780632081066c146102ea57806323746eb814610306578063313ce567146102ea57600080fd5b806318160ddd146102ea5780631a4d01d2146102f157600080fd5b8063065a80d81461029757806306fdde03146102bd57806307211ef7146102d757806314052288146102ea575b600080fd5b6102aa6102a5366004611333565b6104d7565b6040519081526020015b60405180910390f35b604080516020810182526000815290516102b4919061137a565b6102aa6102e53660046113cb565b610590565b60006102aa565b6103046102ff366004611407565b6105e0565b005b610319610314366004611333565b6106d4565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102b4565b61030461034c36600461142c565b610714565b6102aa61035f36600461146e565b61083e565b6103046103723660046113cb565b610853565b6102aa6103853660046113cb565b6108b4565b6102aa6103983660046114ab565b50600090565b6103046103ac36600461146e565b600755565b6103046103bf3660046114c6565b600f9190910b600090815260066020526040902055565b6001546103199073ffffffffffffffffffffffffffffffffffffffff1681565b6102aa60075481565b61030461040d3660046114f0565b6108f0565b61030461042036600461142c565b61098d565b610319610433366004611333565b610d4d565b6103046104463660046113cb565b610d65565b61031961045936600461146e565b610dc6565b6007546102aa565b61031961047436600461146e565b610ddb565b6102aa61048736600461150c565b610df0565b6102aa61049a366004611538565b600092915050565b6102aa61039836600461146e565b6000610319565b6000546103199073ffffffffffffffffffffffffffffffffffffffff1681565b6000600282600f0b815481106104ef576104ef611562565b6000918252602090912001546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa158015610566573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061058a9190611591565b92915050565b600f83810b60009081526005602090815260408083209386900b8352929052908120546b033b2e3c9fd0803ce8000000906105cc9084906115d9565b6105d69190611616565b90505b9392505050565b6000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810185905273ffffffffffffffffffffffffffffffffffffffff909116906379cc6790906044016020604051808303816000875af1158015610657573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061067b9190611651565b506106cf33826002856fffffffffffffffffffffffffffffffff16815481106106a6576106a6611562565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169190610e26565b505050565b6000600282600f0b815481106106ec576106ec611562565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1692915050565b60006107218585856108b4565b9050818110156107b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f437572766556314d6f636b3a20494e53554646494349454e545f4f555450555460448201527f5f414d4f554e540000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61080d3330856002896fffffffffffffffffffffffffffffffff16815481106107e3576107e3611562565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16929190610efa565b61083733826002876fffffffffffffffffffffffffffffffff16815481106106a6576106a6611562565b5050505050565b6000600282815481106104ef576104ef611562565b600f83810b60009081526005602090815260408083209386900b83529290522081905561088c6b033b2e3c9fd0803ce800000082610f5e565b600f92830b60009081526005602090815260408083209690950b825294909452919092205550565b600f83810b60009081526004602090815260408083209386900b8352929052908120546b033b2e3c9fd0803ce8000000906105cc9084906115d9565b6000546040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052909116906340c10f19906044016020604051808303816000875af1158015610969573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106cf9190611651565b60006002856fffffffffffffffffffffffffffffffff16815481106109b4576109b4611562565b60009182526020822001546003805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff8816908110610a0057610a00611562565b60009182526020822001546002805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff8816908110610a4c57610a4c611562565b60009182526020822001546003805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff8916908110610a9857610a98611562565b600091825260208220015473ffffffffffffffffffffffffffffffffffffffff169150610ac6898989610590565b905085811015610b58576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f437572766556314d6f636b3a20494e53554646494349454e545f4f555450555460448201527f5f414d4f554e540000000000000000000000000000000000000000000000000060648201526084016107af565b610b7a73ffffffffffffffffffffffffffffffffffffffff851633308a610efa565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526024820189905285169063095ea7b3906044016020604051808303816000875af1158015610bef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c139190611651565b506040517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8616906340c10f1990604401600060405180830381600087803b158015610c8257600080fd5b505af1158015610c96573d6000803e3d6000fd5b50506040517f1e9a69500000000000000000000000000000000000000000000000000000000081523060048201526024810184905273ffffffffffffffffffffffffffffffffffffffff86169250631e9a69509150604401600060405180830381600087803b158015610d0857600080fd5b505af1158015610d1c573d6000803e3d6000fd5b50610d429250505073ffffffffffffffffffffffffffffffffffffffff83163383610e26565b505050505050505050565b6000600382600f0b815481106106ec576106ec611562565b600f83810b60009081526004602090815260408083209386900b835292905220819055610d9e6b033b2e3c9fd0803ce800000082610f5e565b600f92830b60009081526004602090815260408083209690950b825294909452919092205550565b6000600382815481106106ec576106ec611562565b6000600282815481106106ec576106ec611562565b600f81900b6000908152600660205260408120546b033b2e3c9fd0803ce800000090610e1c90856115d9565b6105d99190611616565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526106cf9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526110c4565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052610f589085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401610e78565b50505050565b60408051808201909152600281527f4d33000000000000000000000000000000000000000000000000000000000000602082015260009082610fcd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107af919061137a565b506000610fdb600284611616565b90506b033b2e3c9fd0803ce8000000611014827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611673565b61101e9190611616565b8411156040518060400160405280600281526020017f4d310000000000000000000000000000000000000000000000000000000000008152509061108f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107af919061137a565b5082816110a86b033b2e3c9fd0803ce8000000876115d9565b6110b2919061168a565b6110bc9190611616565b949350505050565b6000611126826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166111d09092919063ffffffff16565b8051909150156106cf57808060200190518101906111449190611651565b6106cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016107af565b60606105d6848460008585843b611243576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107af565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161126c91906116a2565b60006040518083038185875af1925050503d80600081146112a9576040519150601f19603f3d011682016040523d82523d6000602084013e6112ae565b606091505b50915091506112be8282866112c9565b979650505050505050565b606083156112d85750816105d9565b8251156112e85782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107af919061137a565b8035600f81900b811461132e57600080fd5b919050565b60006020828403121561134557600080fd5b6105d98261131c565b60005b83811015611369578181015183820152602001611351565b83811115610f585750506000910152565b602081526000825180602084015261139981604085016020870161134e565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000606084860312156113e057600080fd5b6113e98461131c565b92506113f76020850161131c565b9150604084013590509250925092565b60008060006060848603121561141c57600080fd5b833592506113f76020850161131c565b6000806000806080858703121561144257600080fd5b61144b8561131c565b93506114596020860161131c565b93969395505050506040820135916060013590565b60006020828403121561148057600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461132e57600080fd5b6000602082840312156114bd57600080fd5b6105d982611487565b600080604083850312156114d957600080fd5b6114e28361131c565b946020939093013593505050565b6000806040838503121561150357600080fd5b6114e283611487565b6000806040838503121561151f57600080fd5b8235915061152f6020840161131c565b90509250929050565b6000806040838503121561154b57600080fd5b61155483611487565b915061152f60208401611487565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000602082840312156115a357600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611611576116116115aa565b500290565b60008261164c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60006020828403121561166357600080fd5b815180151581146105d957600080fd5b600082821015611685576116856115aa565b500390565b6000821982111561169d5761169d6115aa565b500190565b600082516116b481846020870161134e565b919091019291505056fea264697066735822122085930fb95d77cfd8b121f00dfae6066e162c3aa4154af7bb3967ed233996408164736f6c634300080a003360a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a003360806040523480156200001157600080fd5b5060405162003954380380620039548339810160408190526200003491620002a2565b8151829082906200004d90600290602085019062000133565b5080516200006390600390602084019062000133565b506000601260405162000076906200019d565b6060808252600790820152664352564d6f636b60c81b608082015260a0602082018190526015908201527f43525620666f72204375727665506f6f6c4d6f636b000000000000000000000060c082015260ff909116604082015260e001604051809103906000f080158015620000f0573d6000803e3d6000fd5b50600080546001600160a01b039092166001600160a01b03199283168117909155600180549092161790555050670de0b6b3a7640000600755506200030c915050565b8280548282559060005260206000209081019282156200018b579160200282015b828111156200018b57825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019062000154565b5062000199929150620001ab565b5090565b61175880620021fc83390190565b5b80821115620001995760008155600101620001ac565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b0381168114620001f057600080fd5b919050565b600082601f8301126200020757600080fd5b815160206001600160401b0380831115620002265762000226620001c2565b8260051b604051601f19603f830116810181811084821117156200024e576200024e620001c2565b6040529384528581018301938381019250878511156200026d57600080fd5b83870191505b8482101562000297576200028782620001d8565b8352918301919083019062000273565b979650505050505050565b60008060408385031215620002b657600080fd5b82516001600160401b0380821115620002ce57600080fd5b620002dc86838701620001f5565b93506020850151915080821115620002f357600080fd5b506200030285828601620001f5565b9150509250929050565b611ee0806200031c6000396000f3fe608060405234801561001057600080fd5b506004361061030a5760003560e01c80637b475b681161019c578063c6610657116100ee578063e310327311610097578063f851a44011610071578063f851a44014610597578063fc0c546a1461059e578063fee3f7f91461039757600080fd5b8063e310327314610576578063ed8e84f314610589578063f446c1d01461039757600080fd5b8063dd62ed3e116100c8578063dd62ed3e14610552578063ddca3f4314610397578063e2e7d2641461056857600080fd5b8063c66106571461052c578063cc2b27d71461053f578063d96c7fce1461039e57600080fd5b8063a6417ed611610150578063b91434d11161012a578063b91434d1146104fe578063b9947eb014610511578063bb7b8b801461052457600080fd5b8063a6417ed6146104d8578063b4b577ad14610397578063b739953e146104eb57600080fd5b80638ea875f3116101815780638ea875f3146104bc57806395d89b411461033557806399bd2ba5146104c557600080fd5b80637b475b681461047757806382c630661461049c57600080fd5b8063313ce567116102605780635b36389c1161020957806370a08231116101e357806370a0823114610450578063710354181461046457806376a2f0f01461039757600080fd5b80635b36389c1461042a5780635e0d443f1461043d57806363543f061461039757600080fd5b80634903b0d11161023a5780634903b0d1146104045780635409491a1461039757806356ac35031461041757600080fd5b8063313ce567146103975780633df02124146103f15780634469e30e1461039e57600080fd5b806314052288116102c25780631a4d01d21161029c5780631a4d01d2146103a65780632081066c1461039757806323746eb8146103b957600080fd5b8063140522881461039757806314f059791461039e57806318160ddd1461039757600080fd5b806307211ef7116102f357806307211ef71461034f5780630b4c7e4d146103625780630f6ba8e31461037757600080fd5b8063065a80d81461030f57806306fdde0314610335575b600080fd5b61032261031d36600461191f565b6105be565b6040519081526020015b60405180910390f35b6040805160208101825260008152905161032c9190611966565b61032261035d3660046119b7565b610677565b610375610370366004611a8a565b6106c7565b005b61038a610385366004611ac6565b610898565b60405161032c9190611b04565b6000610322565b61038a6108cb565b6103756103b4366004611b35565b6108eb565b6103cc6103c736600461191f565b6109da565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161032c565b6103756103ff366004611b5a565b610a1a565b610322610412366004611b9c565b610b44565b6103756104253660046119b7565b610b59565b610375610438366004611bb5565b610bba565b61032261044b3660046119b7565b610d3d565b61032261045e366004611c06565b50600090565b610375610472366004611b9c565b600755565b610375610485366004611c21565b600f9190910b600090815260066020526040902055565b6001546103cc9073ffffffffffffffffffffffffffffffffffffffff1681565b61032260075481565b6103756104d3366004611c4b565b610d79565b6103756104e6366004611b5a565b610dd8565b6103cc6104f936600461191f565b611198565b61037561050c3660046119b7565b6111b0565b6103cc61051f366004611b9c565b611211565b600754610322565b6103cc61053a366004611b9c565b611226565b61032261054d366004611c67565b61123b565b610322610560366004611c8a565b600092915050565b61032261045e366004611b9c565b610375610584366004611cb4565b611271565b610322610560366004611ce2565b60006103cc565b6000546103cc9073ffffffffffffffffffffffffffffffffffffffff1681565b6000600282600f0b815481106105d6576105d6611d1a565b6000918252602090912001546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa15801561064d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106719190611d49565b92915050565b600f83810b60009081526005602090815260408083209386900b8352929052908120546b033b2e3c9fd0803ce8000000906106b3908490611d91565b6106bd9190611dce565b90505b9392505050565b60005b60028110156107f65760008382600281106106e7576106e7611d1a565b602002015111156107e4576002818154811061070557610705611d1a565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff166323b872dd333086856002811061074057610740611d1a565b60200201516040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff938416600482015292909116602483015260448201526064016020604051808303816000875af11580156107be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e29190611e09565b505b806107ee81611e26565b9150506106ca565b506000546040517f40c10f190000000000000000000000000000000000000000000000000000000081523360048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f19906044015b6020604051808303816000875af115801561086f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108939190611e09565b505050565b6108a06118ea565b6040805180820182529085906002908390839080828437600092019190915250919695505050505050565b6108d36118ea565b50604080518082019091526000808252602082015290565b6000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810185905273ffffffffffffffffffffffffffffffffffffffff909116906379cc6790906044016020604051808303816000875af1158015610962573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109869190611e09565b5061089333826002856fffffffffffffffffffffffffffffffff16815481106109b1576109b1611d1a565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1691906113f4565b6000600282600f0b815481106109f2576109f2611d1a565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1692915050565b6000610a27858585610d3d565b905081811015610abe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f437572766556314d6f636b3a20494e53554646494349454e545f4f555450555460448201527f5f414d4f554e540000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b610b133330856002896fffffffffffffffffffffffffffffffff1681548110610ae957610ae9611d1a565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169291906114c8565b610b3d33826002876fffffffffffffffffffffffffffffffff16815481106109b1576109b1611d1a565b5050505050565b6000600282815481106105d6576105d6611d1a565b600f83810b60009081526005602090815260408083209386900b835292905220819055610b926b033b2e3c9fd0803ce80000008261152c565b600f92830b60009081526005602090815260408083209690950b825294909452919092205550565b60005b6002811015610cdf576000828260028110610bda57610bda611d1a565b60200201511115610ccd5760028181548110610bf857610bf8611d1a565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33848460028110610c3257610c32611d1a565b60200201516040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af1158015610ca7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ccb9190611e09565b505b80610cd781611e26565b915050610bbd565b506000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810184905273ffffffffffffffffffffffffffffffffffffffff909116906379cc679090604401610850565b600f83810b60009081526004602090815260408083209386900b8352929052908120546b033b2e3c9fd0803ce8000000906106b3908490611d91565b6000546040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052909116906340c10f1990604401610850565b60006002856fffffffffffffffffffffffffffffffff1681548110610dff57610dff611d1a565b60009182526020822001546003805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff8816908110610e4b57610e4b611d1a565b60009182526020822001546002805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff8816908110610e9757610e97611d1a565b60009182526020822001546003805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff8916908110610ee357610ee3611d1a565b600091825260208220015473ffffffffffffffffffffffffffffffffffffffff169150610f11898989610677565b905085811015610fa3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f437572766556314d6f636b3a20494e53554646494349454e545f4f555450555460448201527f5f414d4f554e54000000000000000000000000000000000000000000000000006064820152608401610ab5565b610fc573ffffffffffffffffffffffffffffffffffffffff851633308a6114c8565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526024820189905285169063095ea7b3906044016020604051808303816000875af115801561103a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061105e9190611e09565b506040517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8616906340c10f1990604401600060405180830381600087803b1580156110cd57600080fd5b505af11580156110e1573d6000803e3d6000fd5b50506040517f1e9a69500000000000000000000000000000000000000000000000000000000081523060048201526024810184905273ffffffffffffffffffffffffffffffffffffffff86169250631e9a69509150604401600060405180830381600087803b15801561115357600080fd5b505af1158015611167573d6000803e3d6000fd5b5061118d9250505073ffffffffffffffffffffffffffffffffffffffff831633836113f4565b505050505050505050565b6000600382600f0b815481106109f2576109f2611d1a565b600f83810b60009081526004602090815260408083209386900b8352929052208190556111e96b033b2e3c9fd0803ce80000008261152c565b600f92830b60009081526004602090815260408083209690950b825294909452919092205550565b6000600382815481106109f2576109f2611d1a565b6000600282815481106109f2576109f2611d1a565b600f81900b6000908152600660205260408120546b033b2e3c9fd0803ce8000000906112679085611d91565b6106c09190611dce565b60005b600281101561139657600083826002811061129157611291611d1a565b6020020135111561138457600281815481106112af576112af611d1a565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb338584600281106112e9576112e9611d1a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff9093166004840152602002013560248201526044016020604051808303816000875af115801561135e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113829190611e09565b505b8061138e81611e26565b915050611274565b506000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906379cc679090604401610850565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526108939084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611692565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526115269085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611446565b50505050565b60408051808201909152600281527f4d3300000000000000000000000000000000000000000000000000000000000060208201526000908261159b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab59190611966565b5060006115a9600284611dce565b90506b033b2e3c9fd0803ce80000006115e2827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611e5f565b6115ec9190611dce565b8411156040518060400160405280600281526020017f4d310000000000000000000000000000000000000000000000000000000000008152509061165d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab59190611966565b5082816116766b033b2e3c9fd0803ce800000087611d91565b6116809190611e76565b61168a9190611dce565b949350505050565b60006116f4826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661179e9092919063ffffffff16565b80519091501561089357808060200190518101906117129190611e09565b610893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610ab5565b60606106bd848460008585843b611811576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610ab5565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161183a9190611e8e565b60006040518083038185875af1925050503d8060008114611877576040519150601f19603f3d011682016040523d82523d6000602084013e61187c565b606091505b509150915061188c828286611897565b979650505050505050565b606083156118a65750816106c0565b8251156118b65782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab59190611966565b60405180604001604052806002906020820280368337509192915050565b8035600f81900b811461191a57600080fd5b919050565b60006020828403121561193157600080fd5b6106c082611908565b60005b8381101561195557818101518382015260200161193d565b838111156115265750506000910152565b602081526000825180602084015261198581604085016020870161193a565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000606084860312156119cc57600080fd5b6119d584611908565b92506119e360208501611908565b9150604084013590509250925092565b600082601f830112611a0457600080fd5b6040516040810181811067ffffffffffffffff82111715611a4e577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b8060405250806040840185811115611a6557600080fd5b845b81811015611a7f578035835260209283019201611a67565b509195945050505050565b60008060608385031215611a9d57600080fd5b611aa784846119f3565b946040939093013593505050565b806040810183101561067157600080fd5b600080600060a08486031215611adb57600080fd5b611ae58585611ab5565b9250611af48560408601611ab5565b9150608084013590509250925092565b60408101818360005b6002811015611b2c578151835260209283019290910190600101611b0d565b50505092915050565b600080600060608486031215611b4a57600080fd5b833592506119e360208501611908565b60008060008060808587031215611b7057600080fd5b611b7985611908565b9350611b8760208601611908565b93969395505050506040820135916060013590565b600060208284031215611bae57600080fd5b5035919050565b60008060608385031215611bc857600080fd5b82359150611bd984602085016119f3565b90509250929050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461191a57600080fd5b600060208284031215611c1857600080fd5b6106c082611be2565b60008060408385031215611c3457600080fd5b611c3d83611908565b946020939093013593505050565b60008060408385031215611c5e57600080fd5b611c3d83611be2565b60008060408385031215611c7a57600080fd5b82359150611bd960208401611908565b60008060408385031215611c9d57600080fd5b611ca683611be2565b9150611bd960208401611be2565b60008060608385031215611cc757600080fd5b611aa78484611ab5565b8015158114611cdf57600080fd5b50565b60008060608385031215611cf557600080fd5b611cff8484611ab5565b91506040830135611d0f81611cd1565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215611d5b57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611dc957611dc9611d62565b500290565b600082611e04577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600060208284031215611e1b57600080fd5b81516106c081611cd1565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611e5857611e58611d62565b5060010190565b600082821015611e7157611e71611d62565b500390565b60008219821115611e8957611e89611d62565b500190565b60008251611ea081846020870161193a565b919091019291505056fea2646970667358221220adf7625854adc68c76c6173acf1acab253dff9360c8a557d9c3227c5377c0ffb64736f6c634300080a003360a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a00336101406040523480156200001257600080fd5b506040516200171338038062001713833981016040819052620000359162000389565b6000805460ff191690558484828260c882826001600160a01b0381166200006f57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000ae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d49190620004b3565b6001600160a01b0316608052508051620000f6906002906020840190620002b0565b505060a052506001600160a01b0382166200012457604051635919af9760e11b815260040160405180910390fd5b6001600160a01b03821660c0819052670de0b6b3a764000060e05260408051630176f71760e71b815290516000929163bb7b8b809160048083019260209291908290030181865afa1580156200017e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001a49190620004d8565b9050620001b18162000210565b505050506001600160a01b0383161580620001d357506001600160a01b038216155b15620001f257604051635919af9760e11b815260040160405180910390fd5b506001600160a01b0391821661010052166101205250620005a59050565b806200022f576040516309aadd6f60e41b815260040160405180910390fd5b60018190557f82e7ee47180a631312683eeb2a85ad264c9af490d54de5a75bbdb95b968c6de28162000261816200027c565b6040805192835260208301919091520160405180910390a150565b60a0516000906127109062000292908262000508565b6200029e908462000523565b620002aa919062000545565b92915050565b828054620002be9062000568565b90600052602060002090601f016020900481019282620002e257600085556200032d565b82601f10620002fd57805160ff19168380011785556200032d565b828001600101855582156200032d579182015b828111156200032d57825182559160200191906001019062000310565b506200033b9291506200033f565b5090565b5b808211156200033b576000815560010162000340565b80516001600160a01b03811681146200036e57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600080600080600060a08688031215620003a257600080fd5b620003ad8662000356565b94506020620003be81880162000356565b9450620003ce6040880162000356565b9350620003de6060880162000356565b60808801519093506001600160401b0380821115620003fc57600080fd5b818901915089601f8301126200041157600080fd5b81518181111562000426576200042662000373565b604051601f8201601f19908116603f0116810190838211818310171562000451576200045162000373565b816040528281528c868487010111156200046a57600080fd5b600093505b828410156200048e57848401860151818501870152928501926200046f565b82841115620004a05760008684830101525b8096505050505050509295509295909350565b600060208284031215620004c657600080fd5b620004d18262000356565b9392505050565b600060208284031215620004eb57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156200051e576200051e620004f2565b500190565b6000816000190483118215151615620005405762000540620004f2565b500290565b6000826200056357634e487b7160e01b600052601260045260246000fd5b500490565b600181811c908216806200057d57607f821691505b602082108114156200059f57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c05160e05161010051610120516110e66200062d6000396000818161034101526107c80152600081816102f701526107190152600081816102d00152610923015260008181610195015261088701526000818161015b0152610b150152600081816102a90152818161039901528181610515015261064d01526110e66000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c80639a6fc8f5116100cd578063b09ad8a011610081578063d62ada1111610066578063d62ada1114610334578063e5693f411461033c578063feaf968c1461036357600080fd5b8063b09ad8a014610319578063bc489a651461032157600080fd5b8063a50cf2c8116100b2578063a50cf2c8146102a4578063a834559e146102cb578063ab0ca0e1146102f257600080fd5b80639a6fc8f514610251578063a384d6ff1461029b57600080fd5b80633fd0875f116101245780635c975abb116101095780635c975abb1461021d5780637284e416146102345780638456cb591461024957600080fd5b80633fd0875f1461020057806354fd4d501461021557600080fd5b806312b495a814610156578063218751b214610190578063313ce567146101dc5780633f4ba83a146101f6575b600080fd5b61017d7f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b6101b77f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610187565b6101e4600881565b60405160ff9091168152602001610187565b6101fe61036b565b005b610208600281565b6040516101879190610cd5565b61017d600181565b60005460ff165b6040519015158152602001610187565b61023c610459565b6040516101879190610d16565b6101fe6104e7565b61026461025f366004610da1565b6105d3565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610187565b61017d60015481565b6101b77f000000000000000000000000000000000000000000000000000000000000000081565b61017d7f000000000000000000000000000000000000000000000000000000000000000081565b6101b77f000000000000000000000000000000000000000000000000000000000000000081565b61017d61060d565b6101fe61032f366004610dc5565b61061f565b610224600181565b6101b77f000000000000000000000000000000000000000000000000000000000000000081565b61026461070f565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156103f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104199190610dde565b61044f576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610457610965565b565b6002805461046690610e00565b80601f016020809104026020016040519081016040528092919081815260200182805461049290610e00565b80156104df5780601f106104b4576101008083540402835291602001916104df565b820191906000526020600020905b8154815290600101906020018083116104c257829003601f168201915b505050505081565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015610571573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105959190610dde565b6105cb576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610457610a4b565b60008060008060006040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061061a600154610b0b565b905090565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156106a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106cd9190610dde565b610703576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61070c81610b54565b50565b60008060008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610782573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a69190610e54565b9398509196509450925090506107be85858484610bd6565b60008060008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610831573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108559190610e54565b9450945094509450945061086b85858484610bd6565b88841215610883578499508398508297508196508095505b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb7b8b806040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109149190610eac565b905061091f81610c71565b90507f000000000000000000000000000000000000000000000000000000000000000061094c828c610ef4565b6109569190610fdf565b99505050505050509091929394565b60005460ff166109d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff1615610ab8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016109cd565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610a213390565b6000612710610b3a7f000000000000000000000000000000000000000000000000000000000000000082611047565b610b44908461105f565b610b4e919061109c565b92915050565b80610b8b576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190557f82e7ee47180a631312683eeb2a85ad264c9af490d54de5a75bbdb95b968c6de281610bbb81610b0b565b6040805192835260208301919091520160405180910390a150565b60008313610c10576040517f56e05d2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8369ffffffffffffffffffff168169ffffffffffffffffffff161080610c34575081155b15610c6b576040517fb1cf675500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60015460009080831015610cb1576040517fb416da7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610cbc82610b0b565b905080841115610ccd579392505050565b509192915050565b6020810160068310610d10577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b600060208083528351808285015260005b81811015610d4357858101830151858201604001528201610d27565b81811115610d55576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b69ffffffffffffffffffff8116811461070c57600080fd5b600060208284031215610db357600080fd5b8135610dbe81610d89565b9392505050565b600060208284031215610dd757600080fd5b5035919050565b600060208284031215610df057600080fd5b81518015158114610dbe57600080fd5b600181811c90821680610e1457607f821691505b60208210811415610e4e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600080600080600060a08688031215610e6c57600080fd5b8551610e7781610d89565b809550506020860151935060408601519250606086015191506080860151610e9e81610d89565b809150509295509295909350565b600060208284031215610ebe57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615610f3557610f35610ec5565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615610f7057610f70610ec5565b60008712925087820587128484161615610f8c57610f8c610ec5565b87850587128184161615610fa257610fa2610ec5565b505050929093029392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082610fee57610fee610fb0565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f80000000000000000000000000000000000000000000000000000000000000008314161561104257611042610ec5565b500590565b6000821982111561105a5761105a610ec5565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561109757611097610ec5565b500290565b6000826110ab576110ab610fb0565b50049056fea2646970667358221220ca5730f8ac976a41fd1283a55d712276536b576394940abc65027e8592280cc364736f6c634300080a003360806040523480156200001157600080fd5b5060405162003960380380620039608339810160408190526200003491620002a2565b8151829082906200004d90600290602085019062000133565b5080516200006390600390602084019062000133565b506000601260405162000076906200019d565b6060808252600790820152664352564d6f636b60c81b608082015260a0602082018190526015908201527f43525620666f72204375727665506f6f6c4d6f636b000000000000000000000060c082015260ff909116604082015260e001604051809103906000f080158015620000f0573d6000803e3d6000fd5b50600080546001600160a01b039092166001600160a01b03199283168117909155600180549092161790555050670de0b6b3a7640000600755506200030c915050565b8280548282559060005260206000209081019282156200018b579160200282015b828111156200018b57825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019062000154565b5062000199929150620001ab565b5090565b611758806200220883390190565b5b80821115620001995760008155600101620001ac565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b0381168114620001f057600080fd5b919050565b600082601f8301126200020757600080fd5b815160206001600160401b0380831115620002265762000226620001c2565b8260051b604051601f19603f830116810181811084821117156200024e576200024e620001c2565b6040529384528581018301938381019250878511156200026d57600080fd5b83870191505b8482101562000297576200028782620001d8565b8352918301919083019062000273565b979650505050505050565b60008060408385031215620002b657600080fd5b82516001600160401b0380821115620002ce57600080fd5b620002dc86838701620001f5565b93506020850151915080821115620002f357600080fd5b506200030285828601620001f5565b9150509250929050565b611eec806200031c6000396000f3fe608060405234801561001057600080fd5b506004361061030a5760003560e01c806382c630661161019c578063bb7b8b80116100ee578063e2e7d26411610097578063f851a44011610071578063f851a44014610597578063fc0c546a1461059e578063fee3f7f91461036257600080fd5b8063e2e7d26414610576578063ecb586a514610584578063f446c1d01461036257600080fd5b8063d96c7fce116100c8578063d96c7fce14610369578063dd62ed3e14610568578063ddca3f431461036257600080fd5b8063bb7b8b801461053a578063c661065714610542578063cc2b27d71461055557600080fd5b80639fdaea0c11610150578063b739953e1161012a578063b739953e14610501578063b91434d114610514578063b9947eb01461052757600080fd5b80639fdaea0c146104db578063a6417ed6146104ee578063b4b577ad1461036257600080fd5b80638ea875f3116101815780638ea875f3146104bf57806395d89b411461033557806399bd2ba5146104c857600080fd5b806382c630661461048c57806385ca3c6f146104ac57600080fd5b80633df02124116102605780635e0d443f1161020957806371035418116101e3578063710354181461045457806376a2f0f0146103625780637b475b681461046757600080fd5b80635e0d443f1461042d57806363543f061461036257806370a082311461044057600080fd5b80634903b0d11161023a5780634903b0d1146104075780635409491a1461036257806356ac35031461041a57600080fd5b80633df02124146103e15780634469e30e146103695780634515cef3146103f457600080fd5b806318160ddd116102c257806323746eb81161029c57806323746eb814610393578063313ce567146103625780633883e119146103cb57600080fd5b806318160ddd146103625780631a4d01d21461037e5780632081066c1461036257600080fd5b806307211ef7116102f357806307211ef71461034f578063140522881461036257806314f059791461036957600080fd5b8063065a80d81461030f57806306fdde0314610335575b600080fd5b61032261031d36600461192d565b6105be565b6040519081526020015b60405180910390f35b6040805160208101825260008152905161032c9190611974565b61032261035d3660046119c5565b610677565b6000610322565b6103716106c7565b60405161032c9190611a01565b61039161038c366004611a32565b6106f2565b005b6103a66103a136600461192d565b6107e6565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161032c565b6103226103d9366004611a79565b600092915050565b6103916103ef366004611ab1565b610826565b610391610402366004611b88565b610950565b610322610415366004611bb3565b610b1c565b6103916104283660046119c5565b610b31565b61032261043b3660046119c5565b610b92565b61032261044e366004611bf0565b50600090565b610391610462366004611bb3565b600755565b610391610475366004611c0b565b600f9190910b600090815260066020526040902055565b6001546103a69073ffffffffffffffffffffffffffffffffffffffff1681565b6103716104ba366004611c35565b610bce565b61032260075481565b6103916104d6366004611c73565b610c04565b6103916104e9366004611c8f565b610c63565b6103916104fc366004611ab1565b610de6565b6103a661050f36600461192d565b6111a6565b6103916105223660046119c5565b6111be565b6103a6610535366004611bb3565b61121f565b600754610322565b6103a6610550366004611bb3565b611234565b610322610563366004611cac565b611249565b6103226103d9366004611cd8565b61032261044e366004611bb3565b610391610592366004611d02565b61127f565b60006103a6565b6000546103a69073ffffffffffffffffffffffffffffffffffffffff1681565b6000600282600f0b815481106105d6576105d6611d26565b6000918252602090912001546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa15801561064d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106719190611d55565b92915050565b600f83810b60009081526005602090815260408083209386900b8352929052908120546b033b2e3c9fd0803ce8000000906106b3908490611d9d565b6106bd9190611dda565b90505b9392505050565b6106cf6118f8565b604051806060016040528060008152602001600081526020016000815250905090565b6000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810185905273ffffffffffffffffffffffffffffffffffffffff909116906379cc6790906044016020604051808303816000875af1158015610769573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078d9190611e15565b506107e133826002856fffffffffffffffffffffffffffffffff16815481106107b8576107b8611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169190611402565b505050565b6000600282600f0b815481106107fe576107fe611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1692915050565b6000610833858585610b92565b9050818110156108ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f437572766556314d6f636b3a20494e53554646494349454e545f4f555450555460448201527f5f414d4f554e540000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61091f3330856002896fffffffffffffffffffffffffffffffff16815481106108f5576108f5611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169291906114d6565b61094933826002876fffffffffffffffffffffffffffffffff16815481106107b8576107b8611d26565b5050505050565b60005b6003811015610a7f57600083826003811061097057610970611d26565b60200201511115610a6d576002818154811061098e5761098e611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff166323b872dd33308685600381106109c9576109c9611d26565b60200201516040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff938416600482015292909116602483015260448201526064016020604051808303816000875af1158015610a47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6b9190611e15565b505b80610a7781611e32565b915050610953565b506000546040517f40c10f190000000000000000000000000000000000000000000000000000000081523360048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f19906044015b6020604051808303816000875af1158015610af8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e19190611e15565b6000600282815481106105d6576105d6611d26565b600f83810b60009081526005602090815260408083209386900b835292905220819055610b6a6b033b2e3c9fd0803ce80000008261153a565b600f92830b60009081526005602090815260408083209690950b825294909452919092205550565b600f83810b60009081526004602090815260408083209386900b8352929052908120546b033b2e3c9fd0803ce8000000906106b3908490611d9d565b610bd66118f8565b6040805160608181019092529085906003908390839080828437600092019190915250919695505050505050565b6000546040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052909116906340c10f1990604401610ad9565b60005b6003811015610d88576000838260038110610c8357610c83611d26565b60200201351115610d765760028181548110610ca157610ca1611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33858460038110610cdb57610cdb611d26565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff9093166004840152602002013560248201526044016020604051808303816000875af1158015610d50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d749190611e15565b505b80610d8081611e32565b915050610c66565b506000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906379cc679090604401610ad9565b60006002856fffffffffffffffffffffffffffffffff1681548110610e0d57610e0d611d26565b60009182526020822001546003805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff8816908110610e5957610e59611d26565b60009182526020822001546002805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff8816908110610ea557610ea5611d26565b60009182526020822001546003805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff8916908110610ef157610ef1611d26565b600091825260208220015473ffffffffffffffffffffffffffffffffffffffff169150610f1f898989610677565b905085811015610fb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f437572766556314d6f636b3a20494e53554646494349454e545f4f555450555460448201527f5f414d4f554e540000000000000000000000000000000000000000000000000060648201526084016108c1565b610fd373ffffffffffffffffffffffffffffffffffffffff851633308a6114d6565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526024820189905285169063095ea7b3906044016020604051808303816000875af1158015611048573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061106c9190611e15565b506040517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8616906340c10f1990604401600060405180830381600087803b1580156110db57600080fd5b505af11580156110ef573d6000803e3d6000fd5b50506040517f1e9a69500000000000000000000000000000000000000000000000000000000081523060048201526024810184905273ffffffffffffffffffffffffffffffffffffffff86169250631e9a69509150604401600060405180830381600087803b15801561116157600080fd5b505af1158015611175573d6000803e3d6000fd5b5061119b9250505073ffffffffffffffffffffffffffffffffffffffff83163383611402565b505050505050505050565b6000600382600f0b815481106107fe576107fe611d26565b600f83810b60009081526004602090815260408083209386900b8352929052208190556111f76b033b2e3c9fd0803ce80000008261153a565b600f92830b60009081526004602090815260408083209690950b825294909452919092205550565b6000600382815481106107fe576107fe611d26565b6000600282815481106107fe576107fe611d26565b600f81900b6000908152600660205260408120546b033b2e3c9fd0803ce8000000906112759085611d9d565b6106c09190611dda565b60005b60038110156113a457600082826003811061129f5761129f611d26565b6020020151111561139257600281815481106112bd576112bd611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb338484600381106112f7576112f7611d26565b60200201516040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af115801561136c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113909190611e15565b505b8061139c81611e32565b915050611282565b506000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810184905273ffffffffffffffffffffffffffffffffffffffff909116906379cc679090604401610ad9565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526107e19084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526116a0565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526115349085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611454565b50505050565b60408051808201909152600281527f4d330000000000000000000000000000000000000000000000000000000000006020820152600090826115a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c19190611974565b5060006115b7600284611dda565b90506b033b2e3c9fd0803ce80000006115f0827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611e6b565b6115fa9190611dda565b8411156040518060400160405280600281526020017f4d310000000000000000000000000000000000000000000000000000000000008152509061166b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c19190611974565b5082816116846b033b2e3c9fd0803ce800000087611d9d565b61168e9190611e82565b6116989190611dda565b949350505050565b6000611702826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166117ac9092919063ffffffff16565b8051909150156107e157808060200190518101906117209190611e15565b6107e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016108c1565b60606106bd848460008585843b61181f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108c1565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516118489190611e9a565b60006040518083038185875af1925050503d8060008114611885576040519150601f19603f3d011682016040523d82523d6000602084013e61188a565b606091505b509150915061189a8282866118a5565b979650505050505050565b606083156118b45750816106c0565b8251156118c45782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c19190611974565b60405180606001604052806003906020820280368337509192915050565b8035600f81900b811461192857600080fd5b919050565b60006020828403121561193f57600080fd5b6106c082611916565b60005b8381101561196357818101518382015260200161194b565b838111156115345750506000910152565b6020815260008251806020840152611993816040850160208701611948565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000606084860312156119da57600080fd5b6119e384611916565b92506119f160208501611916565b9150604084013590509250925092565b60608101818360005b6003811015611a29578151835260209283019290910190600101611a0a565b50505092915050565b600080600060608486031215611a4757600080fd5b833592506119f160208501611916565b806060810183101561067157600080fd5b8015158114611a7657600080fd5b50565b60008060808385031215611a8c57600080fd5b611a968484611a57565b91506060830135611aa681611a68565b809150509250929050565b60008060008060808587031215611ac757600080fd5b611ad085611916565b9350611ade60208601611916565b93969395505050506040820135916060013590565b600082601f830112611b0457600080fd5b6040516060810181811067ffffffffffffffff82111715611b4e577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604052806060840185811115611b6357600080fd5b845b81811015611b7d578035835260209283019201611b65565b509195945050505050565b60008060808385031215611b9b57600080fd5b611ba58484611af3565b946060939093013593505050565b600060208284031215611bc557600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461192857600080fd5b600060208284031215611c0257600080fd5b6106c082611bcc565b60008060408385031215611c1e57600080fd5b611c2783611916565b946020939093013593505050565b600080600060e08486031215611c4a57600080fd5b611c548585611a57565b9250611c638560608601611a57565b915060c084013590509250925092565b60008060408385031215611c8657600080fd5b611c2783611bcc565b60008060808385031215611ca257600080fd5b611ba58484611a57565b60008060408385031215611cbf57600080fd5b82359150611ccf60208401611916565b90509250929050565b60008060408385031215611ceb57600080fd5b611cf483611bcc565b9150611ccf60208401611bcc565b60008060808385031215611d1557600080fd5b82359150611ccf8460208501611af3565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215611d6757600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611dd557611dd5611d6e565b500290565b600082611e10577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600060208284031215611e2757600080fd5b81516106c081611a68565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611e6457611e64611d6e565b5060010190565b600082821015611e7d57611e7d611d6e565b500390565b60008219821115611e9557611e95611d6e565b500190565b60008251611eac818460208701611948565b919091019291505056fea2646970667358221220a76213374b33de2cb1c5d61e9c1133f6d8163c7b90c32a6142a6f4fd98fe430364736f6c634300080a003360a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a00336101606040523480156200001257600080fd5b5060405162001852380380620018528339810160408190526200003591620003a3565b6000805460ff191690558585828260c882826001600160a01b0381166200006f57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000ae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d49190620004de565b6001600160a01b0316608052508051620000f6906002906020840190620002ca565b505060a052506001600160a01b0382166200012457604051635919af9760e11b815260040160405180910390fd5b6001600160a01b03821660c0819052670de0b6b3a764000060e05260408051630176f71760e71b815290516000929163bb7b8b809160048083019260209291908290030181865afa1580156200017e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001a4919062000503565b9050620001b1816200022a565b505050506001600160a01b0384161580620001d357506001600160a01b038316155b80620001e657506001600160a01b038216155b156200020557604051635919af9760e11b815260040160405180910390fd5b506001600160a01b039283166101005290821661012052166101405250620005d09050565b8062000249576040516309aadd6f60e41b815260040160405180910390fd5b60018190557f82e7ee47180a631312683eeb2a85ad264c9af490d54de5a75bbdb95b968c6de2816200027b8162000296565b6040805192835260208301919091520160405180910390a150565b60a05160009061271090620002ac908262000533565b620002b890846200054e565b620002c4919062000570565b92915050565b828054620002d89062000593565b90600052602060002090601f016020900481019282620002fc576000855562000347565b82601f106200031757805160ff191683800117855562000347565b8280016001018555821562000347579182015b82811115620003475782518255916020019190600101906200032a565b506200035592915062000359565b5090565b5b808211156200035557600081556001016200035a565b80516001600160a01b03811681146200038857600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60008060008060008060c08789031215620003bd57600080fd5b620003c88762000370565b95506020620003d981890162000370565b9550620003e96040890162000370565b9450620003f96060890162000370565b9350620004096080890162000370565b60a08901519093506001600160401b03808211156200042757600080fd5b818a0191508a601f8301126200043c57600080fd5b8151818111156200045157620004516200038d565b604051601f8201601f19908116603f011681019083821181831017156200047c576200047c6200038d565b816040528281528d868487010111156200049557600080fd5b600093505b82841015620004b957848401860151818501870152928501926200049a565b82841115620004cb5760008684830101525b8096505050505050509295509295509295565b600060208284031215620004f157600080fd5b620004fc8262000370565b9392505050565b6000602082840312156200051657600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156200054957620005496200051d565b500190565b60008160001904831182151516156200056b576200056b6200051d565b500290565b6000826200058e57634e487b7160e01b600052601260045260246000fd5b500490565b600181811c90821680620005a857607f821691505b60208210811415620005ca57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c05160e0516101005161012051610140516111e86200066a6000396000818161023501526108c8015260008181610383015261080901526000818161033901526107620152600081816103120152610a250152600081816101b001526109890152600081816101760152610c170152600081816102eb015281816103db01528181610557015261068f01526111e86000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c80639a6fc8f5116100cd578063b09ad8a011610081578063d62ada1111610066578063d62ada1114610376578063e5693f411461037e578063feaf968c146103a557600080fd5b8063b09ad8a01461035b578063bc489a651461036357600080fd5b8063a50cf2c8116100b2578063a50cf2c8146102e6578063a834559e1461030d578063ab0ca0e11461033457600080fd5b80639a6fc8f514610293578063a384d6ff146102dd57600080fd5b8063427cb6fe116101245780635c975abb116101095780635c975abb1461025f5780637284e416146102765780638456cb591461028b57600080fd5b8063427cb6fe1461023057806354fd4d501461025757600080fd5b8063313ce56711610155578063313ce567146101f75780633f4ba83a146102115780633fd0875f1461021b57600080fd5b806312b495a814610171578063218751b2146101ab575b600080fd5b6101987f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101a2565b6101ff600881565b60405160ff90911681526020016101a2565b6102196103ad565b005b610223600381565b6040516101a29190610dd7565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b610198600181565b60005460ff165b60405190151581526020016101a2565b61027e61049b565b6040516101a29190610e18565b610219610529565b6102a66102a1366004610ea3565b610615565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a0016101a2565b61019860015481565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b6101987f000000000000000000000000000000000000000000000000000000000000000081565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b61019861064f565b610219610371366004610ec7565b610661565b610266600181565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b6102a6610751565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa158015610437573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061045b9190610ee0565b610491576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610499610a67565b565b600280546104a890610f02565b80601f01602080910402602001604051908101604052809291908181526020018280546104d490610f02565b80156105215780601f106104f657610100808354040283529160200191610521565b820191906000526020600020905b81548152906001019060200180831161050457829003601f168201915b505050505081565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa1580156105b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105d79190610ee0565b61060d576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610499610b4d565b60008060008060006040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061065c600154610c0d565b905090565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156106eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070f9190610ee0565b610745576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61074e81610c56565b50565b6000806000806000806000806000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156107cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ef9190610f56565b939d50919b509950975095506108078a8a8989610cd8565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610872573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108969190610f56565b9398509196509450925090506108ae85858484610cd8565b888412156108c6578499508398508297508196508095505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610931573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109559190610f56565b93985091965094509250905061096d85858484610cd8565b88841215610985578499508398508297508196508095505b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb7b8b806040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a169190610fae565b9050610a2181610d73565b90507f0000000000000000000000000000000000000000000000000000000000000000610a4e828c610ff6565b610a5891906110e1565b99505050505050509091929394565b60005460ff16610ad8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff1615610bba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610acf565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b233390565b6000612710610c3c7f000000000000000000000000000000000000000000000000000000000000000082611149565b610c469084611161565b610c50919061119e565b92915050565b80610c8d576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190557f82e7ee47180a631312683eeb2a85ad264c9af490d54de5a75bbdb95b968c6de281610cbd81610c0d565b6040805192835260208301919091520160405180910390a150565b60008313610d12576040517f56e05d2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8369ffffffffffffffffffff168169ffffffffffffffffffff161080610d36575081155b15610d6d576040517fb1cf675500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60015460009080831015610db3576040517fb416da7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610dbe82610c0d565b905080841115610dcf579392505050565b509192915050565b6020810160068310610e12577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b600060208083528351808285015260005b81811015610e4557858101830151858201604001528201610e29565b81811115610e57576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b69ffffffffffffffffffff8116811461074e57600080fd5b600060208284031215610eb557600080fd5b8135610ec081610e8b565b9392505050565b600060208284031215610ed957600080fd5b5035919050565b600060208284031215610ef257600080fd5b81518015158114610ec057600080fd5b600181811c90821680610f1657607f821691505b60208210811415610f50577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600080600080600060a08688031215610f6e57600080fd5b8551610f7981610e8b565b809550506020860151935060408601519250606086015191506080860151610fa081610e8b565b809150509295509295909350565b600060208284031215610fc057600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60008413600084138583048511828216161561103757611037610fc7565b7f8000000000000000000000000000000000000000000000000000000000000000600087128682058812818416161561107257611072610fc7565b6000871292508782058712848416161561108e5761108e610fc7565b878505871281841616156110a4576110a4610fc7565b505050929093029392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826110f0576110f06110b2565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f80000000000000000000000000000000000000000000000000000000000000008314161561114457611144610fc7565b500590565b6000821982111561115c5761115c610fc7565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561119957611199610fc7565b500290565b6000826111ad576111ad6110b2565b50049056fea2646970667358221220226b667ed6fc6db7c8ec1377cc84dae524e2dc572320ead4a7092944a6b912de64736f6c634300080a003360806040523480156200001157600080fd5b5060405162003969380380620039698339810160408190526200003491620002a2565b8151829082906200004d90600290602085019062000133565b5080516200006390600390602084019062000133565b506000601260405162000076906200019d565b6060808252600790820152664352564d6f636b60c81b608082015260a0602082018190526015908201527f43525620666f72204375727665506f6f6c4d6f636b000000000000000000000060c082015260ff909116604082015260e001604051809103906000f080158015620000f0573d6000803e3d6000fd5b50600080546001600160a01b039092166001600160a01b03199283168117909155600180549092161790555050670de0b6b3a7640000600755506200030c915050565b8280548282559060005260206000209081019282156200018b579160200282015b828111156200018b57825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019062000154565b5062000199929150620001ab565b5090565b611758806200221183390190565b5b80821115620001995760008155600101620001ac565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b0381168114620001f057600080fd5b919050565b600082601f8301126200020757600080fd5b815160206001600160401b0380831115620002265762000226620001c2565b8260051b604051601f19603f830116810181811084821117156200024e576200024e620001c2565b6040529384528581018301938381019250878511156200026d57600080fd5b83870191505b8482101562000297576200028782620001d8565b8352918301919083019062000273565b979650505050505050565b60008060408385031215620002b657600080fd5b82516001600160401b0380821115620002ce57600080fd5b620002dc86838701620001f5565b93506020850151915080821115620002f357600080fd5b506200030285828601620001f5565b9150509250929050565b611ef5806200031c6000396000f3fe608060405234801561001057600080fd5b506004361061030a5760003560e01c80637b475b681161019c578063bb7b8b80116100ee578063ddca3f4311610097578063f851a44011610071578063f851a44014610597578063fc0c546a1461059e578063fee3f7f91461037757600080fd5b8063ddca3f4314610377578063e2e7d26414610589578063f446c1d01461037757600080fd5b8063cf701ff7116100c8578063cf701ff714610565578063d96c7fce1461037e578063dd62ed3e1461057b57600080fd5b8063bb7b8b8014610537578063c66106571461053f578063cc2b27d71461055257600080fd5b806399bd2ba511610150578063b739953e1161012a578063b739953e146104fe578063b91434d114610511578063b9947eb01461052457600080fd5b806399bd2ba5146104d8578063a6417ed6146104eb578063b4b577ad1461037757600080fd5b806382c630661161018157806382c63066146104af5780638ea875f3146104cf57806395d89b411461034a57600080fd5b80637b475b68146104775780637d49d8751461049c57600080fd5b8063313ce5671161026057806356ac35031161020957806370a08231116101e357806370a0823114610450578063710354181461046457806376a2f0f01461037757600080fd5b806356ac35031461042a5780635e0d443f1461043d57806363543f061461037757600080fd5b80634903b0d11161023a5780634903b0d11461040457806353b546cd146104175780635409491a1461037757600080fd5b8063313ce567146103775780633df02124146103f15780634469e30e1461037e57600080fd5b806314f05979116102c25780631a4d01d21161029c5780631a4d01d2146103a65780632081066c1461037757806323746eb8146103b957600080fd5b806314f059791461037e57806318160ddd1461037757806318a7bd761461039357600080fd5b806306fdde03116102f357806306fdde031461034a57806307211ef714610364578063140522881461037757600080fd5b8063029b2f341461030f578063065a80d814610324575b600080fd5b61032261031d3660046119b2565b6105be565b005b6103376103323660046119f4565b61078f565b6040519081526020015b60405180910390f35b604080516020810182526000815290516103419190611a3b565b610337610372366004611a8c565b610848565b6000610337565b610386610898565b6040516103419190611ac8565b6103226103a1366004611b0a565b6108ca565b6103226103b4366004611b27565b610a4d565b6103cc6103c73660046119f4565b610b3c565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610341565b6103226103ff366004611b4c565b610b7c565b610337610412366004611b8e565b610ca6565b610386610425366004611ba7565b610cbb565b610322610438366004611a8c565b610cf1565b61033761044b366004611a8c565b610d52565b61033761045e366004611c0b565b50600090565b610322610472366004611b8e565b600755565b610322610485366004611c26565b600f9190910b600090815260066020526040902055565b6103226104aa366004611c50565b610d8e565b6001546103cc9073ffffffffffffffffffffffffffffffffffffffff1681565b61033760075481565b6103226104e6366004611c7d565b610f11565b6103226104f9366004611b4c565b610f70565b6103cc61050c3660046119f4565b611330565b61032261051f366004611a8c565b611348565b6103cc610532366004611b8e565b6113a9565b600754610337565b6103cc61054d366004611b8e565b6113be565b610337610560366004611c99565b6113d3565b610337610573366004611ccd565b600092915050565b610337610573366004611d05565b61033761045e366004611b8e565b60006103cc565b6000546103cc9073ffffffffffffffffffffffffffffffffffffffff1681565b60005b60048110156106ed5760008382600481106105de576105de611d2f565b602002015111156106db57600281815481106105fc576105fc611d2f565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff166323b872dd333086856004811061063757610637611d2f565b60200201516040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff938416600482015292909116602483015260448201526064016020604051808303816000875af11580156106b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d99190611d5e565b505b806106e581611daa565b9150506105c1565b506000546040517f40c10f190000000000000000000000000000000000000000000000000000000081523360048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f19906044015b6020604051808303816000875af1158015610766573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078a9190611d5e565b505050565b6000600282600f0b815481106107a7576107a7611d2f565b6000918252602090912001546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa15801561081e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108429190611de3565b92915050565b600f83810b60009081526005602090815260408083209386900b8352929052908120546b033b2e3c9fd0803ce800000090610884908490611dfc565b61088e9190611e39565b90505b9392505050565b6108a06118ff565b60405180608001604052806000815260200160008152602001600081526020016000815250905090565b60005b60048110156109ef5760008382600481106108ea576108ea611d2f565b602002013511156109dd576002818154811061090857610908611d2f565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb3385846004811061094257610942611d2f565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff9093166004840152602002013560248201526044016020604051808303816000875af11580156109b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109db9190611d5e565b505b806109e781611daa565b9150506108cd565b506000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906379cc679090604401610747565b6000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810185905273ffffffffffffffffffffffffffffffffffffffff909116906379cc6790906044016020604051808303816000875af1158015610ac4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae89190611d5e565b5061078a33826002856fffffffffffffffffffffffffffffffff1681548110610b1357610b13611d2f565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169190611409565b6000600282600f0b81548110610b5457610b54611d2f565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1692915050565b6000610b89858585610d52565b905081811015610c20576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f437572766556314d6f636b3a20494e53554646494349454e545f4f555450555460448201527f5f414d4f554e540000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b610c753330856002896fffffffffffffffffffffffffffffffff1681548110610c4b57610c4b611d2f565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169291906114dd565b610c9f33826002876fffffffffffffffffffffffffffffffff1681548110610b1357610b13611d2f565b5050505050565b6000600282815481106107a7576107a7611d2f565b610cc36118ff565b6040805160808181019092529085906004908390839080828437600092019190915250919695505050505050565b600f83810b60009081526005602090815260408083209386900b835292905220819055610d2a6b033b2e3c9fd0803ce800000082611541565b600f92830b60009081526005602090815260408083209690950b825294909452919092205550565b600f83810b60009081526004602090815260408083209386900b8352929052908120546b033b2e3c9fd0803ce800000090610884908490611dfc565b60005b6004811015610eb3576000828260048110610dae57610dae611d2f565b60200201511115610ea15760028181548110610dcc57610dcc611d2f565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33848460048110610e0657610e06611d2f565b60200201516040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af1158015610e7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9f9190611d5e565b505b80610eab81611daa565b915050610d91565b506000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810184905273ffffffffffffffffffffffffffffffffffffffff909116906379cc679090604401610747565b6000546040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052909116906340c10f1990604401610747565b60006002856fffffffffffffffffffffffffffffffff1681548110610f9757610f97611d2f565b60009182526020822001546003805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff8816908110610fe357610fe3611d2f565b60009182526020822001546002805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff881690811061102f5761102f611d2f565b60009182526020822001546003805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff891690811061107b5761107b611d2f565b600091825260208220015473ffffffffffffffffffffffffffffffffffffffff1691506110a9898989610848565b90508581101561113b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f437572766556314d6f636b3a20494e53554646494349454e545f4f555450555460448201527f5f414d4f554e54000000000000000000000000000000000000000000000000006064820152608401610c17565b61115d73ffffffffffffffffffffffffffffffffffffffff851633308a6114dd565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526024820189905285169063095ea7b3906044016020604051808303816000875af11580156111d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f69190611d5e565b506040517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8616906340c10f1990604401600060405180830381600087803b15801561126557600080fd5b505af1158015611279573d6000803e3d6000fd5b50506040517f1e9a69500000000000000000000000000000000000000000000000000000000081523060048201526024810184905273ffffffffffffffffffffffffffffffffffffffff86169250631e9a69509150604401600060405180830381600087803b1580156112eb57600080fd5b505af11580156112ff573d6000803e3d6000fd5b506113259250505073ffffffffffffffffffffffffffffffffffffffff83163383611409565b505050505050505050565b6000600382600f0b81548110610b5457610b54611d2f565b600f83810b60009081526004602090815260408083209386900b8352929052208190556113816b033b2e3c9fd0803ce800000082611541565b600f92830b60009081526004602090815260408083209690950b825294909452919092205550565b600060038281548110610b5457610b54611d2f565b600060028281548110610b5457610b54611d2f565b600f81900b6000908152600660205260408120546b033b2e3c9fd0803ce8000000906113ff9085611dfc565b6108919190611e39565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905261078a9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526116a7565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905261153b9085907f23b872dd000000000000000000000000000000000000000000000000000000009060840161145b565b50505050565b60408051808201909152600281527f4d330000000000000000000000000000000000000000000000000000000000006020820152600090826115b0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c179190611a3b565b5060006115be600284611e39565b90506b033b2e3c9fd0803ce80000006115f7827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611e74565b6116019190611e39565b8411156040518060400160405280600281526020017f4d3100000000000000000000000000000000000000000000000000000000000081525090611672576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c179190611a3b565b50828161168b6b033b2e3c9fd0803ce800000087611dfc565b6116959190611e8b565b61169f9190611e39565b949350505050565b6000611709826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166117b39092919063ffffffff16565b80519091501561078a57808060200190518101906117279190611d5e565b61078a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610c17565b606061088e848460008585843b611826576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610c17565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161184f9190611ea3565b60006040518083038185875af1925050503d806000811461188c576040519150601f19603f3d011682016040523d82523d6000602084013e611891565b606091505b50915091506118a18282866118ac565b979650505050505050565b606083156118bb575081610891565b8251156118cb5782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c179190611a3b565b60405180608001604052806004906020820280368337509192915050565b600082601f83011261192e57600080fd5b6040516080810181811067ffffffffffffffff82111715611978577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405280608084018581111561198d57600080fd5b845b818110156119a757803583526020928301920161198f565b509195945050505050565b60008060a083850312156119c557600080fd5b6119cf848461191d565b946080939093013593505050565b8035600f81900b81146119ef57600080fd5b919050565b600060208284031215611a0657600080fd5b610891826119dd565b60005b83811015611a2a578181015183820152602001611a12565b8381111561153b5750506000910152565b6020815260008251806020840152611a5a816040850160208701611a0f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b600080600060608486031215611aa157600080fd5b611aaa846119dd565b9250611ab8602085016119dd565b9150604084013590509250925092565b60808101818360005b6004811015611af0578151835260209283019290910190600101611ad1565b50505092915050565b806080810183101561084257600080fd5b60008060a08385031215611b1d57600080fd5b6119cf8484611af9565b600080600060608486031215611b3c57600080fd5b83359250611ab8602085016119dd565b60008060008060808587031215611b6257600080fd5b611b6b856119dd565b9350611b79602086016119dd565b93969395505050506040820135916060013590565b600060208284031215611ba057600080fd5b5035919050565b60008060006101208486031215611bbd57600080fd5b611bc78585611af9565b9250611bd68560808601611af9565b915061010084013590509250925092565b803573ffffffffffffffffffffffffffffffffffffffff811681146119ef57600080fd5b600060208284031215611c1d57600080fd5b61089182611be7565b60008060408385031215611c3957600080fd5b611c42836119dd565b946020939093013593505050565b60008060a08385031215611c6357600080fd5b82359150611c74846020850161191d565b90509250929050565b60008060408385031215611c9057600080fd5b611c4283611be7565b60008060408385031215611cac57600080fd5b82359150611c74602084016119dd565b8015158114611cca57600080fd5b50565b60008060a08385031215611ce057600080fd5b611cea8484611af9565b91506080830135611cfa81611cbc565b809150509250929050565b60008060408385031215611d1857600080fd5b611d2183611be7565b9150611c7460208401611be7565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215611d7057600080fd5b815161089181611cbc565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611ddc57611ddc611d7b565b5060010190565b600060208284031215611df557600080fd5b5051919050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611e3457611e34611d7b565b500290565b600082611e6f577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600082821015611e8657611e86611d7b565b500390565b60008219821115611e9e57611e9e611d7b565b500190565b60008251611eb5818460208701611a0f565b919091019291505056fea2646970667358221220f61dc1547f427f062d37b4d652f14b779f56255086161f347804b4d07b32be2064736f6c634300080a003360a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a00336101806040523480156200001257600080fd5b5060405162001982380380620019828339810160408190526200003591620003bc565b6000805460ff191690558686828260c882826001600160a01b0381166200006f57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000ae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d491906200050b565b6001600160a01b0316608052508051620000f6906002906020840190620002e3565b505060a052506001600160a01b0382166200012457604051635919af9760e11b815260040160405180910390fd5b6001600160a01b03821660c0819052670de0b6b3a764000060e05260408051630176f71760e71b815290516000929163bb7b8b809160048083019260209291908290030181865afa1580156200017e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001a4919062000530565b9050620001b18162000243565b505050506001600160a01b0385161580620001d357506001600160a01b038416155b80620001e657506001600160a01b038316155b80620001f957506001600160a01b038216155b156200021857604051635919af9760e11b815260040160405180910390fd5b506001600160a01b039384166101005291831661012052821661014052166101605250620005fd9050565b8062000262576040516309aadd6f60e41b815260040160405180910390fd5b60018190557f82e7ee47180a631312683eeb2a85ad264c9af490d54de5a75bbdb95b968c6de2816200029481620002af565b6040805192835260208301919091520160405180910390a150565b60a05160009061271090620002c5908262000560565b620002d190846200057b565b620002dd91906200059d565b92915050565b828054620002f190620005c0565b90600052602060002090601f01602090048101928262000315576000855562000360565b82601f106200033057805160ff191683800117855562000360565b8280016001018555821562000360579182015b828111156200036057825182559160200191906001019062000343565b506200036e92915062000372565b5090565b5b808211156200036e576000815560010162000373565b80516001600160a01b0381168114620003a157600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600080600080600080600060e0888a031215620003d857600080fd5b620003e38862000389565b96506020620003f4818a0162000389565b96506200040460408a0162000389565b95506200041460608a0162000389565b94506200042460808a0162000389565b93506200043460a08a0162000389565b60c08a01519093506001600160401b03808211156200045257600080fd5b818b0191508b601f8301126200046757600080fd5b8151818111156200047c576200047c620003a6565b604051601f8201601f19908116603f01168101908382118183101715620004a757620004a7620003a6565b816040528281528e86848701011115620004c057600080fd5b600093505b82841015620004e45784840186015181850187015292850192620004c5565b82841115620004f65760008684830101525b80965050505050505092959891949750929550565b6000602082840312156200051e57600080fd5b620005298262000389565b9392505050565b6000602082840312156200054357600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156200057657620005766200054a565b500190565b60008160001904831182151516156200059857620005986200054a565b500290565b600082620005bb57634e487b7160e01b600052601260045260246000fd5b500490565b600181811c90821680620005d557607f821691505b60208210811415620005f757634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c05160e051610100516101205161014051610160516112d9620006a96000396000818161029b01526109b901526000818161024001526108fa0152600081816103b5015261083b01526000818161036b01526107940152600081816103440152610b160152600081816101bb0152610a7a0152600081816101810152610d0801526000818161031d0152818161040d0152818161058901526106c101526112d96000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80638456cb59116100d8578063ab0ca0e11161008c578063d62ada1111610066578063d62ada11146103a8578063e5693f41146103b0578063feaf968c146103d757600080fd5b8063ab0ca0e114610366578063b09ad8a01461038d578063bc489a651461039557600080fd5b8063a384d6ff116100bd578063a384d6ff1461030f578063a50cf2c814610318578063a834559e1461033f57600080fd5b80638456cb59146102bd5780639a6fc8f5146102c557600080fd5b8063427cb6fe1161012f5780635c975abb116101145780635c975abb1461026a5780637284e416146102815780637aac1c481461029657600080fd5b8063427cb6fe1461023b57806354fd4d501461026257600080fd5b8063313ce56711610160578063313ce567146102025780633f4ba83a1461021c5780633fd0875f1461022657600080fd5b806312b495a81461017c578063218751b2146101b6575b600080fd5b6101a37f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b6101dd7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101ad565b61020a600881565b60405160ff90911681526020016101ad565b6102246103df565b005b61022e600481565b6040516101ad9190610ec8565b6101dd7f000000000000000000000000000000000000000000000000000000000000000081565b6101a3600181565b60005460ff165b60405190151581526020016101ad565b6102896104cd565b6040516101ad9190610f09565b6101dd7f000000000000000000000000000000000000000000000000000000000000000081565b61022461055b565b6102d86102d3366004610f94565b610647565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a0016101ad565b6101a360015481565b6101dd7f000000000000000000000000000000000000000000000000000000000000000081565b6101a37f000000000000000000000000000000000000000000000000000000000000000081565b6101dd7f000000000000000000000000000000000000000000000000000000000000000081565b6101a3610681565b6102246103a3366004610fb8565b610693565b610271600181565b6101dd7f000000000000000000000000000000000000000000000000000000000000000081565b6102d8610783565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa158015610469573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048d9190610fd1565b6104c3576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104cb610b58565b565b600280546104da90610ff3565b80601f016020809104026020016040519081016040528092919081815260200182805461050690610ff3565b80156105535780601f1061052857610100808354040283529160200191610553565b820191906000526020600020905b81548152906001019060200180831161053657829003601f168201915b505050505081565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa1580156105e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106099190610fd1565b61063f576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104cb610c3e565b60008060008060006040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061068e600154610cfe565b905090565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561071d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107419190610fd1565b610777576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61078081610d47565b50565b6000806000806000806000806000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156107fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108219190611047565b939d50919b509950975095506108398a8a8989610dc9565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156108a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c89190611047565b9398509196509450925090506108e085858484610dc9565b888412156108f8578499508398508297508196508095505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610963573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109879190611047565b93985091965094509250905061099f85858484610dc9565b888412156109b7578499508398508297508196508095505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610a22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a469190611047565b939850919650945092509050610a5e85858484610dc9565b88841215610a76578499508398508297508196508095505b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb7b8b806040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ae3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b07919061109f565b9050610b1281610e64565b90507f0000000000000000000000000000000000000000000000000000000000000000610b3f828c6110e7565b610b4991906111d2565b99505050505050509091929394565b60005460ff16610bc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff1615610cab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bc0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610c143390565b6000612710610d2d7f00000000000000000000000000000000000000000000000000000000000000008261123a565b610d379084611252565b610d41919061128f565b92915050565b80610d7e576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190557f82e7ee47180a631312683eeb2a85ad264c9af490d54de5a75bbdb95b968c6de281610dae81610cfe565b6040805192835260208301919091520160405180910390a150565b60008313610e03576040517f56e05d2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8369ffffffffffffffffffff168169ffffffffffffffffffff161080610e27575081155b15610e5e576040517fb1cf675500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60015460009080831015610ea4576040517fb416da7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610eaf82610cfe565b905080841115610ec0579392505050565b509192915050565b6020810160068310610f03577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b600060208083528351808285015260005b81811015610f3657858101830151858201604001528201610f1a565b81811115610f48576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b69ffffffffffffffffffff8116811461078057600080fd5b600060208284031215610fa657600080fd5b8135610fb181610f7c565b9392505050565b600060208284031215610fca57600080fd5b5035919050565b600060208284031215610fe357600080fd5b81518015158114610fb157600080fd5b600181811c9082168061100757607f821691505b60208210811415611041577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600080600080600060a0868803121561105f57600080fd5b855161106a81610f7c565b80955050602086015193506040860151925060608601519150608086015161109181610f7c565b809150509295509295909350565b6000602082840312156110b157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615611128576111286110b8565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615611163576111636110b8565b6000871292508782058712848416161561117f5761117f6110b8565b87850587128184161615611195576111956110b8565b505050929093029392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826111e1576111e16111a3565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615611235576112356110b8565b500590565b6000821982111561124d5761124d6110b8565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561128a5761128a6110b8565b500290565b60008261129e5761129e6111a3565b50049056fea26469706673582212201ac3e66d7646fe6cc19eeb98703f28a4e57d890bef3635f1ed53ec7a4ea130d864736f6c634300080a00336102606040523480156200001257600080fd5b5060405162005f7e38038062005f7e833981016040819052620000359162000ba4565b83838383600284846001600160a01b03821615806200005b57506001600160a01b038116155b156200007a57604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038216608081905260408051632f7a188160e01b81529051632f7a1881916004808201926020929091908290030181865afa158015620000c5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000eb919062000c01565b6001600160a01b0390811660a05290811660c05260016000558416151590506200012857604051635919af9760e11b815260040160405180910390fd5b608051604051630f67c5bd60e41b81526001600160a01b0385811660048301529091169063f67c5bd090602401602060405180830381865afa15801562000173573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000199919062000c26565b620001c757604051634c607af960e11b81526001600160a01b03841660048201526024015b60405180910390fd5b6001600160a01b038084166101e081905261020052821661022052610240819052620001f460006200090a565b6001600160a01b031660e0526200020c60016200090a565b6001600160a01b0316610100526200022560026200090a565b6001600160a01b0316610120526200023e60036200090a565b6001600160a01b031661014052620002576000620009fd565b6001600160a01b031661016052620002706001620009fd565b6001600160a01b031661018052620002896002620009fd565b6001600160a01b03166101a052620002a26003620009fd565b6001600160a01b039081166101c05260e051161580620002cc5750610100516001600160a01b0316155b15620002eb57604051635919af9760e11b815260040160405180910390fd5b600281118015620003065750610120516001600160a01b0316155b156200032557604051635919af9760e11b815260040160405180910390fd5b600381118015620003405750610140516001600160a01b0316155b156200035f57604051635919af9760e11b815260040160405180910390fd5b60805160e051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620003ac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003d2919062000c26565b620004005760e051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b60805161010051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa1580156200044e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000474919062000c26565b620004a35761010051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b60028111801562000525575060805161012051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620004fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000523919062000c26565b155b15620005555761012051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b600381118015620005d7575060805161014051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620005af573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005d5919062000c26565b155b15620006075761014051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b610160516001600160a01b03161580159062000694575060805161016051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa1580156200066c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000692919062000c26565b155b15620006c45761016051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b610180516001600160a01b03161580159062000751575060805161018051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa15801562000729573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200074f919062000c26565b155b15620007815761018051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b6101a0516001600160a01b0316158015906200080e57506080516101a051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620007e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200080c919062000c26565b155b156200083e576101a051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b6101c0516001600160a01b031615801590620008cb57506080516101c051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620008a3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008c9919062000c26565b155b15620008fb576101c051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b50505050505050505062000c66565b60c05160405163c661065760e01b8152600481018390526000916001600160a01b03169063c661065790602401602060405180830381865afa92505050801562000973575060408051601f3d908101601f19168201909252620009709181019062000c01565b60015b6200097e5762000984565b92915050565b60c05160405163046e8dd760e31b8152600f84900b60048201526001600160a01b03909116906323746eb8906024015b602060405180830381865afa925050508015620009f0575060408051601f3d908101601f19168201909252620009ed9181019062000c01565b60015b6200097e57506000919050565b610220516000906001600160a01b03161562000a1e576200097e8262000ac0565b60c051604051630b9947eb60e41b8152600481018490526001600160a01b039091169063b9947eb090602401602060405180830381865afa92505050801562000a86575060408051601f3d908101601f1916820190925262000a839181019062000c01565b60015b6200097e5760c051604051635b9cca9f60e11b8152600f84900b60048201526001600160a01b039091169063b739953e90602401620009b4565b60008162000ad4576200097e600062000b17565b610220516001600160a01b031663c661065762000af360018562000c40565b6040518263ffffffff1660e01b8152600401620009b491815260200190565b919050565b600081600f0b6000141562000b2b575060e0515b81600f0b6001141562000b3e5750610100515b81600f0b6002141562000b515750610120515b81600f0b6003141562000b645750610140515b6001600160a01b03811662000b12576040516334769e6f60e21b815260040160405180910390fd5b80516001600160a01b038116811462000b1257600080fd5b6000806000806080858703121562000bbb57600080fd5b62000bc68562000b8c565b935062000bd66020860162000b8c565b925062000be66040860162000b8c565b915062000bf66060860162000b8c565b905092959194509250565b60006020828403121562000c1457600080fd5b62000c1f8262000b8c565b9392505050565b60006020828403121562000c3957600080fd5b5051919050565b60008282101562000c6157634e487b7160e01b600052601160045260246000fd5b500390565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e051610200516102205161024051614f9b62000fe36000396000818161077001528181613503015281816135f501528181613735015281816138ec0152613a06015260006105f101526000818161068801528181611ec70152818161238c015281816126b3015281816129580152818161303a01526130d8015260006108a701526000818161059c0152612a5a0152600081816103d40152612a2b01526000818161061801526129fc0152600081816106af01526129cd015260008181610870015281816128320152818161365f01528181613f5e01526143f20152600081816104fd015281816128030152818161356d01528181613e8e01526142d60152600081816107da015281816127d40152818161347901528181613dbe01526141ba01526000818161045d015281816127a5015281816133ad01528181613cee015261409e01526000818161072201528181610914015281816109e101528181610a7101528181610b6901528181610cd601528181610d5301528181610dea01528181610e7a0152818161128801528181611300015281816114d801528181611572015281816115ba015281816116e101528181611729015281816117da0152818161180f01528181611af801528181611bef01528181611c6701528181611d0c01528181611f1101528181611fc901528181611ffe015281816120990152818161240d01528181612448015281816124b50152818161254601528181612c7801528181612d9701528181612e710152818161407601528181614192015281816142ae015281816143ca015261451201526000818161052401528181612ae3015281816145b90152614693015260008181610749015281816110180152818161191a01528181611e5301528181612232015281816125e0015281816126db015281816128d001528181612cce01528181612d6801528181612ec701528181612f6f01528181613231015281816132e8015281816133d8015281816134a1015281816135950152818161368701528181613c2101528181613d1601528181613de601528181613eb601528181613f86015281816140ec015281816142080152818161432401528181614440015281816144e3015281816146230152818161471b015281816147cf01526148790152614f9b6000f3fe608060405234801561001057600080fd5b50600436106103a45760003560e01c806378aa73a4116101e9578063ce30bbdb1161010f578063e3103273116100ad578063f446c1d01161007c578063f446c1d014610892578063f851a4401461089a578063fc0c546a146108a2578063fee3f7f9146108c957600080fd5b8063e310327314610832578063ec026ca714610845578063ed8e84f314610858578063ef14101e1461086b57600080fd5b8063d96c7fce116100e9578063d96c7fce146107fc578063dd62ed3e14610804578063ddca3f4314610817578063e2e7d2641461081f57600080fd5b8063ce30bbdb146107b3578063cf023dd0146107c2578063d21220a7146107d557600080fd5b8063b739953e11610187578063c12c21c011610156578063c12c21c014610744578063c21ee1621461076b578063c661065714610792578063cc2b27d7146107a057600080fd5b8063b739953e146106f4578063b9947eb014610707578063bb7b8b8014610715578063bd90df701461071d57600080fd5b80638ba51dfc116101c35780638ba51dfc146106aa57806395d89b41146106d1578063a6417ed6146106d9578063b4b577ad146106ec57600080fd5b806378aa73a41461065557806379bea6641461067057806382c630661461068357600080fd5b80632f7a1881116102ce57806357d788751161026c57806364a89bca1161023b57806364a89bca146105ec5780636e1d82711461061357806370a082311461063a57806376a2f0f01461064d57600080fd5b806357d78875146105975780635b36389c146105be5780635e0d443f146105d157806363543f06146105e457600080fd5b80633df02124116102a85780633df02124146105615780634469e30e146105745780634903b0d11461057c5780635409491a1461058f57600080fd5b80632f7a18811461051f578063313ce5671461054657806333d2ebf21461054e57600080fd5b806314052288116103465780631af4de83116103155780631af4de83146104ca5780632081066c146104dd57806323746eb8146104e557806325be124e146104f857600080fd5b8063140522881461049f57806314f05979146104a757806318160ddd146104af5780631a4d01d2146104b757600080fd5b806307211ef71161038257806307211ef7146104305780630b4c7e4d146104435780630dfe1681146104585780630f6ba8e31461047f57600080fd5b8063065a80d8146103a957806306871163146103cf57806306fdde031461041b575b600080fd5b6103bc6103b736600461490d565b6108d1565b6040519081526020015b60405180910390f35b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016103c6565b610423610a6d565b6040516103c6919061499e565b6103bc61043e3660046149b1565b610b25565b6104566104513660046149fe565b610bf4565b005b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b61049261048d366004614a29565b610c91565b6040516103c69190614a67565b6103bc610d4f565b610492610de0565b6103bc610e76565b6104566104c5366004614a98565b610ee3565b6104566104d83660046149b1565b610f76565b6103bc611284565b6103f66104f336600461490d565b6112f1565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc6112fc565b61045661055c366004614abd565b611369565b61045661056f366004614ae7565b6113fd565b6104926114ce565b6103bc61058a366004614b29565b611540565b6103bc6115b6565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6104566105cc366004614b42565b611623565b6103bc6105df3660046149b1565b61169d565b6103bc611725565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc610648366004614b91565b611792565b6103bc61180b565b61065d600281565b60405161ffff90911681526020016103c6565b61045661067e3660046149b1565b611878565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b610423611af4565b6104566106e7366004614ae7565b611b61565b6103bc611beb565b6103f661070236600461490d565b611c58565b6103f6610702366004614b29565b6103bc611c63565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc7f000000000000000000000000000000000000000000000000000000000000000081565b6103f66104f3366004614b29565b6103bc6107ae366004614bae565b611cd0565b60056040516103c69190614bd1565b6104566107d0366004614a98565b611d8d565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b610492611f07565b6103bc610812366004614c12565b611f79565b6103bc611ffa565b6103bc61082d366004614b29565b612067565b6104566108403660046149fe565b6120dd565b610456610853366004614abd565b61216c565b6103bc610866366004614c4b565b6123cd565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc612444565b6103f66124b1565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc612542565b6040517f4903b0d10000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff821660048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634903b0d1906024015b602060405180830381865afa9250505080156109ab575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526109a891810190614c7d565b60015b610a62576040517f065a80d8000000000000000000000000000000000000000000000000000000008152600f83900b60048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063065a80d8906024015b602060405180830381865afa158015610a3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a629190614c7d565b92915050565b919050565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015610ada573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b209190810190614d57565b905090565b6040517f07211ef7000000000000000000000000000000000000000000000000000000008152600f84810b600483015283900b6024820152604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906307211ef7906064015b602060405180830381865afa158015610bc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bea9190614c7d565b90505b9392505050565b60026000541415610c66576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b60026000908155610c88906001843581109160208601359190911190806125af565b50506001600055565b610c996148dd565b6040517f0f6ba8e300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690630f6ba8e390610d0f90879087908790600401614da8565b6040805180830381865afa158015610d2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bea9190614dcf565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663140522886040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b209190614c7d565b610de86148dd565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166314f059796040518163ffffffff1660e01b81526004016040805180830381865afa158015610e52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b209190614dcf565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b60026000541415610f50576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b60026000908155610f6083612794565b9050610f6b8161289f565b505060016000555050565b60026000541415610fe3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611074573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110989190614e4f565b905060006110a5856129bc565b905060006110b2856129bc565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529192506000918416906370a0823190602401602060405180830381865afa158015611124573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111489190614c7d565b90506001811115611276577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce800000061118e8784614e6c565b6111989190614ed0565b604051600f8a810b602483015289900b60448201526064810184905260848101829052909150611273908690869086907fa6417ed6000000000000000000000000000000000000000000000000000000009060a4015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152600180612ac6565b50505b505060016000555050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632081066c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b6000610a6282612794565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b600260005414156113d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b600260009081556113e683612794565b90506113f3838284612f3e565b5050600160005550565b6002600054141561146a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b6002600090815561147a85612794565b9050600061148785612794565b905061127682826000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052506001935091506131e89050565b6114d66148dd565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16634469e30e6040518163ffffffff1660e01b81526004016040805180830381865afa158015610e52573d6000803e3d6000fd5b6040517f4903b0d1000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634903b0d190602401610954565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635409491a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b60026000541415611690576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b6002600055610c886132b7565b6040517f5e0d443f000000000000000000000000000000000000000000000000000000008152600f84810b600483015283900b6024820152604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635e0d443f90606401610ba9565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166363543f066040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401610a21565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166376a2f0f06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b600260005414156118e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611976573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061199a9190614e4f565b905060006119a785612794565b905060006119b485612794565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529192506000918416906370a0823190602401602060405180830381865afa158015611a26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a4a9190614c7d565b90506001811115611276577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce8000000611a908784614e6c565b611a9a9190614ed0565b604051600f8a810b602483015289900b60448201526064810184905260848101829052909150611273908690869086907f3df02124000000000000000000000000000000000000000000000000000000009060a4016111ee565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610ada573d6000803e3d6000fd5b60026000541415611bce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b60026000908155611bde856129bc565b90506000611487856129bc565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b4b577ad6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b6000610a62826129bc565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb7b8b806040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b6040517fcc2b27d700000000000000000000000000000000000000000000000000000000815260048101839052600f82900b60248201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063cc2b27d7906044015b602060405180830381865afa158015611d69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bed9190614c7d565b60026000541415611dfa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b60026000908155611e0a83612794565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611e9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ebe9190614e4f565b9050611efa81837f0000000000000000000000000000000000000000000000000000000000000000611ef1888a89613731565b60016000612ac6565b5050600160005550505050565b611f0f6148dd565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d96c7fce6040518163ffffffff1660e01b81526004016040805180830381865afa158015610e52573d6000803e3d6000fd5b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063dd62ed3e90604401611d4c565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b6040517fe2e7d264000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e2e7d26490602401610a21565b6002600054141561214a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b60026000908155610c8890600184358110916020860135919091119080613bf0565b600260005414156121d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b600260009081556121e983612794565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015612279573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061229d9190614e4f565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000918416906370a0823190602401602060405180830381865afa15801561230f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123339190614c7d565b905060018111156123c1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce80000006123798684614e6c565b6123839190614ed0565b90506123be83857f00000000000000000000000000000000000000000000000000000000000000006123b68a8787613731565b600180612ac6565b50505b50506001600055505050565b6040517fed8e84f300000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063ed8e84f390611d4c9086908690600401614f0b565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f446c1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa15801561251e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b209190614e4f565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fee3f7f96040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa15801561263c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126609190614e4f565b905061266e8585858561402d565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561271f57600080fd5b505af1158015612733573d6000803e3d6000fd5b505050506127776000368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506144a392505050565b506127848585858561402d565b61278d816145a1565b5050505050565b600081600f0b600014156127c557507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b600114156127f457507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6002141561282357507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6003141561285257507f00000000000000000000000000000000000000000000000000000000000000005b73ffffffffffffffffffffffffffffffffffffffff8116610a68576040517fd1da79bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa15801561292c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129509190614e4f565b90506129b7817f0000000000000000000000000000000000000000000000000000000000000000846000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509250829150612ac69050565b505050565b600081600f0b600014156129ed57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b60011415612a1c57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b60021415612a4b57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6003141561285257507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff8116610a68576040517fd1da79bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606000803373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614612c2f576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301528916906370a0823190602401602060405180830381865afa158015612b74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b989190614c7d565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152919350908816906370a0823190602401602060405180830381865afa158015612c08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c2c9190614c7d565b90505b8415612d2b576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612d1257600080fd5b505af1158015612d26573d6000803e3d6000fd5b505050505b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a90612dc19033907f0000000000000000000000000000000000000000000000000000000000000000908b90600401614f23565b6000604051808303816000875af1158015612de0573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052612e269190810190614d57565b92508415612f24576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612f0b57600080fd5b505af1158015612f1f573d6000803e3d6000fd5b505050505b612f3289898985858961467b565b50509695505050505050565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612fcb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fef9190614e4f565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000917f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015613081573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130a59190614c7d565b9050600181111561278d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016131e0827f0000000000000000000000000000000000000000000000000000000000000000867f1a4d01d200000000000000000000000000000000000000000000000000000000858a6b033b2e3c9fd0803ce80000006131328b84614e6c565b61313c9190614ed0565b6040516024810193909352600f9190910b60448301526064820152608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915260006001612ac6565b505050505050565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015260609060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015613278573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061329c9190614e4f565b90506132ac818888888888612ac6565b979650505050505050565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015613344573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133689190614e4f565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301529192507f0000000000000000000000000000000000000000000000000000000000000000909116906351e3f16090604401600060405180830381600087803b15801561341e57600080fd5b505af1158015613432573d6000803e3d6000fd5b50506040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f00000000000000000000000000000000000000000000000000000000000000001692506351e3f1609150604401600060405180830381600087803b1580156134e757600080fd5b505af11580156134fb573d6000803e3d6000fd5b5050505060027f000000000000000000000000000000000000000000000000000000000000000011156136e4576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156135d957600080fd5b505af11580156135ed573d6000803e3d6000fd5b5050505060037f000000000000000000000000000000000000000000000000000000000000000011156136e4576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156136cb57600080fd5b505af11580156136df573d6000803e3d6000fd5b505050505b6137246000368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506144a392505050565b5061372e816145a1565b50565b60607f0000000000000000000000000000000000000000000000000000000000000000600214156138ea5783600f0b600014613827576040516000602482015260448101849052606481018390527f0b4c7e4d00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526138e3565b6040516024810184905260006044820152606481018390527f0b4c7e4d00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091525b9050610bed565b7f000000000000000000000000000000000000000000000000000000000000000060031415613a045783600f0b6000146139bb5783600f0b60011461397257604051600060248201819052604482015260648101849052608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a4016137a5565b604051600060248201819052604482018590526064820152608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a4016137a5565b604051602481018490526000604482018190526064820152608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401613865565b7f000000000000000000000000000000000000000000000000000000000000000060041415613b8e5783600f0b600014613b3e5783600f0b600114613aee5783600f0b600214613a9e576040516000602482018190526044820181905260648201526084810184905260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c4016137a5565b6040516000602482018190526044820181905260648201859052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c4016137a5565b6040516000602482018190526044820185905260648201819052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c4016137a5565b6040516024810184905260006044820181905260648201819052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613865565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f496e636f7272656374206e436f696e73000000000000000000000000000000006044820152606401610c5d565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015613c7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ca19190614e4f565b90508415613d73576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015613d5a57600080fd5b505af1158015613d6e573d6000803e3d6000fd5b505050505b8315613e43576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015613e2a57600080fd5b505af1158015613e3e573d6000803e3d6000fd5b505050505b8215613f13576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015613efa57600080fd5b505af1158015613f0e573d6000803e3d6000fd5b505050505b8115613fe3576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015613fca57600080fd5b505af1158015613fde573d6000803e3d6000fd5b505050505b6140236000368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506144a392505050565b5061278d816145a1565b8315614149576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561413057600080fd5b505af1158015614144573d6000803e3d6000fd5b505050505b8215614265576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561424c57600080fd5b505af1158015614260573d6000803e3d6000fd5b505050505b8115614381576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561436857600080fd5b505af115801561437c573d6000803e3d6000fd5b505050505b801561449d576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561448457600080fd5b505af1158015614498573d6000803e3d6000fd5b505050505b50505050565b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815260609073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a9061453c9033907f0000000000000000000000000000000000000000000000000000000000000000908790600401614f23565b6000604051808303816000875af115801561455b573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610a629190810190614d57565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461372e576040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b15801561466757600080fd5b505af115801561278d573d6000803e3d6000fd5b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461477c576040517f654a9eda00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528681166024830152858116604483015260648201859052608482018490527f0000000000000000000000000000000000000000000000000000000000000000169063654a9eda9060a401600060405180830381600087803b15801561475f57600080fd5b505af1158015614773573d6000803e3d6000fd5b505050506131e0565b801561482c576040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015286811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b15801561481357600080fd5b505af1158015614827573d6000803e3d6000fd5b505050505b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015285811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156148bd57600080fd5b505af11580156148d1573d6000803e3d6000fd5b50505050505050505050565b60405180604001604052806002906020820280368337509192915050565b8035600f81900b8114610a6857600080fd5b60006020828403121561491f57600080fd5b610bed826148fb565b60005b8381101561494357818101518382015260200161492b565b8381111561449d5750506000910152565b6000815180845261496c816020860160208601614928565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610bed6020830184614954565b6000806000606084860312156149c657600080fd5b6149cf846148fb565b92506149dd602085016148fb565b9150604084013590509250925092565b8060408101831015610a6257600080fd5b60008060608385031215614a1157600080fd5b614a1b84846149ed565b946040939093013593505050565b600080600060a08486031215614a3e57600080fd5b614a4885856149ed565b9250614a5785604086016149ed565b9150608084013590509250925092565b60408101818360005b6002811015614a8f578151835260209283019290910190600101614a70565b50505092915050565b600080600060608486031215614aad57600080fd5b833592506149dd602085016148fb565b60008060408385031215614ad057600080fd5b614ad9836148fb565b946020939093013593505050565b60008060008060808587031215614afd57600080fd5b614b06856148fb565b9350614b14602086016148fb565b93969395505050506040820135916060013590565b600060208284031215614b3b57600080fd5b5035919050565b60008060608385031215614b5557600080fd5b82359150614b6684602085016149ed565b90509250929050565b73ffffffffffffffffffffffffffffffffffffffff8116811461372e57600080fd5b600060208284031215614ba357600080fd5b8135610bed81614b6f565b60008060408385031215614bc157600080fd5b82359150614b66602084016148fb565b6020810160118310614c0c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60008060408385031215614c2557600080fd5b8235614c3081614b6f565b91506020830135614c4081614b6f565b809150509250929050565b60008060608385031215614c5e57600080fd5b614c6884846149ed565b915060408301358015158114614c4057600080fd5b600060208284031215614c8f57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff80841115614ce057614ce0614c96565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715614d2657614d26614c96565b81604052809350858152868686011115614d3f57600080fd5b614d4d866020830187614928565b5050509392505050565b600060208284031215614d6957600080fd5b815167ffffffffffffffff811115614d8057600080fd5b8201601f81018413614d9157600080fd5b614da084825160208401614cc5565b949350505050565b60a08101604085833760408201600081526040858237506080919091019190915292915050565b600060408284031215614de157600080fd5b82601f830112614df057600080fd5b6040516040810181811067ffffffffffffffff82111715614e1357614e13614c96565b8060405250806040840185811115614e2a57600080fd5b845b81811015614e44578051835260209283019201614e2c565b509195945050505050565b600060208284031215614e6157600080fd5b8151610bed81614b6f565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ecb577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500290565b600082614f06577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60608101604084833791151560409190910152919050565b600073ffffffffffffffffffffffffffffffffffffffff808616835280851660208401525060606040830152614f5c6060830184614954565b9594505050505056fea26469706673582212205dd1b4208756e7993c5cfaf271be99123f9b37ebc97bdd8fd152eac9cd1e945564736f6c634300080a00336102606040523480156200001257600080fd5b5060405162005f8c38038062005f8c833981016040819052620000359162000ba4565b83838383600384846001600160a01b03821615806200005b57506001600160a01b038116155b156200007a57604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038216608081905260408051632f7a188160e01b81529051632f7a1881916004808201926020929091908290030181865afa158015620000c5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000eb919062000c01565b6001600160a01b0390811660a05290811660c05260016000558416151590506200012857604051635919af9760e11b815260040160405180910390fd5b608051604051630f67c5bd60e41b81526001600160a01b0385811660048301529091169063f67c5bd090602401602060405180830381865afa15801562000173573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000199919062000c26565b620001c757604051634c607af960e11b81526001600160a01b03841660048201526024015b60405180910390fd5b6001600160a01b038084166101e081905261020052821661022052610240819052620001f460006200090a565b6001600160a01b031660e0526200020c60016200090a565b6001600160a01b0316610100526200022560026200090a565b6001600160a01b0316610120526200023e60036200090a565b6001600160a01b031661014052620002576000620009fd565b6001600160a01b031661016052620002706001620009fd565b6001600160a01b031661018052620002896002620009fd565b6001600160a01b03166101a052620002a26003620009fd565b6001600160a01b039081166101c05260e051161580620002cc5750610100516001600160a01b0316155b15620002eb57604051635919af9760e11b815260040160405180910390fd5b600281118015620003065750610120516001600160a01b0316155b156200032557604051635919af9760e11b815260040160405180910390fd5b600381118015620003405750610140516001600160a01b0316155b156200035f57604051635919af9760e11b815260040160405180910390fd5b60805160e051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620003ac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003d2919062000c26565b620004005760e051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b60805161010051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa1580156200044e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000474919062000c26565b620004a35761010051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b60028111801562000525575060805161012051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620004fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000523919062000c26565b155b15620005555761012051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b600381118015620005d7575060805161014051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620005af573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005d5919062000c26565b155b15620006075761014051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b610160516001600160a01b03161580159062000694575060805161016051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa1580156200066c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000692919062000c26565b155b15620006c45761016051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b610180516001600160a01b03161580159062000751575060805161018051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa15801562000729573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200074f919062000c26565b155b15620007815761018051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b6101a0516001600160a01b0316158015906200080e57506080516101a051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620007e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200080c919062000c26565b155b156200083e576101a051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b6101c0516001600160a01b031615801590620008cb57506080516101c051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620008a3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008c9919062000c26565b155b15620008fb576101c051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b50505050505050505062000c66565b60c05160405163c661065760e01b8152600481018390526000916001600160a01b03169063c661065790602401602060405180830381865afa92505050801562000973575060408051601f3d908101601f19168201909252620009709181019062000c01565b60015b6200097e5762000984565b92915050565b60c05160405163046e8dd760e31b8152600f84900b60048201526001600160a01b03909116906323746eb8906024015b602060405180830381865afa925050508015620009f0575060408051601f3d908101601f19168201909252620009ed9181019062000c01565b60015b6200097e57506000919050565b610220516000906001600160a01b03161562000a1e576200097e8262000ac0565b60c051604051630b9947eb60e41b8152600481018490526001600160a01b039091169063b9947eb090602401602060405180830381865afa92505050801562000a86575060408051601f3d908101601f1916820190925262000a839181019062000c01565b60015b6200097e5760c051604051635b9cca9f60e11b8152600f84900b60048201526001600160a01b039091169063b739953e90602401620009b4565b60008162000ad4576200097e600062000b17565b610220516001600160a01b031663c661065762000af360018562000c40565b6040518263ffffffff1660e01b8152600401620009b491815260200190565b919050565b600081600f0b6000141562000b2b575060e0515b81600f0b6001141562000b3e5750610100515b81600f0b6002141562000b515750610120515b81600f0b6003141562000b645750610140515b6001600160a01b03811662000b12576040516334769e6f60e21b815260040160405180910390fd5b80516001600160a01b038116811462000b1257600080fd5b6000806000806080858703121562000bbb57600080fd5b62000bc68562000b8c565b935062000bd66020860162000b8c565b925062000be66040860162000b8c565b915062000bf66060860162000b8c565b905092959194509250565b60006020828403121562000c1457600080fd5b62000c1f8262000b8c565b9392505050565b60006020828403121562000c3957600080fd5b5051919050565b60008282101562000c6157634e487b7160e01b600052601160045260246000fd5b500390565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e051610200516102205161024051614fa962000fe36000396000818161078301528181613708015281816138bf015281816139d901528181613e0f0152613f01015260006105de01526000818161067501528181611f680152818161239f0152818161278901528181612e6b01528181612f0901526131ed015260006108ad01526000818161059c015261288b0152600081816103d4015261285c015260008181610605015261282d0152600081816106af01526127fe015260008181610876015281816126630152818161363501528181613f6b01526146640152600081816104d7015281816126340152818161356501528181613e7901526145480152600081816107f3015281816126050152818161349501528181613d85015261442c015260008181610448015281816125d6015281816133c501528181613cb901526143100152600081816107350152818161091a015281816109e701528181610a7701528181610b6f01528181610bfe01528181610c9501528181610d2601528181611139015281816111b1015281816112ee0152818161144101528181611578015281816115c00152818161166d015281816116b5015281816117660152818161179b01528181611ac501528181611b4301528181611ccd01528181611d4501528181611dea01528181611fb20152818161206b015281816120a00152818161213b0152818161245e015281816124cb0152818161255c01528181612aa901528181612bc801528181612ca2015281816142e801528181614404015281816145200152818161463c01526147840152600081816104fe0152818161291401528181614055015261482b01526000818161075c01528181610ec9015281816118a601528181611ef4015281816122450152818161270101528181612aff01528181612b9901528181612cf801528181612da0015281816130630152818161311a01528181613215015281816132f8015281816133ed015281816134bd0152818161358d0152818161365d01528181613bf401528181613ce401528181613dad01528181613ea101528181613f93015281816140dd015281816141910152818161423b0152818161435e0152818161447a01528181614596015281816146b20152818161475501526148950152614fa96000f3fe608060405234801561001057600080fd5b50600436106103a45760003560e01c806379bea664116101e9578063cc2b27d71161010f578063e2e7d264116100ad578063f446c1d01161007c578063f446c1d014610898578063f851a440146108a0578063fc0c546a146108a8578063fee3f7f9146108cf57600080fd5b8063e2e7d26414610838578063ec026ca71461084b578063ecb586a51461085e578063ef14101e1461087157600080fd5b8063d21220a7116100e9578063d21220a7146107ee578063d96c7fce14610815578063dd62ed3e1461081d578063ddca3f431461083057600080fd5b8063cc2b27d7146107b3578063ce30bbdb146107c6578063cf023dd0146107db57600080fd5b8063b4b577ad11610187578063bd90df7011610156578063bd90df7014610730578063c12c21c014610757578063c21ee1621461077e578063c6610657146107a557600080fd5b8063b4b577ad146106ff578063b739953e14610707578063b9947eb01461071a578063bb7b8b801461072857600080fd5b80638ba51dfc116101c35780638ba51dfc146106aa57806395d89b41146106d15780639fdaea0c146106d9578063a6417ed6146106ec57600080fd5b806379bea6641461065d57806382c630661461067057806385ca3c6f1461069757600080fd5b806333d2ebf2116102ce57806357d788751161026c5780636e1d82711161023b5780636e1d82711461060057806370a082311461062757806376a2f0f01461063a57806378aa73a41461064257600080fd5b806357d78875146105975780635e0d443f146105be57806363543f06146105d157806364a89bca146105d957600080fd5b80634469e30e116102a85780634469e30e146105615780634515cef3146105695780634903b0d11461057c5780635409491a1461058f57600080fd5b806333d2ebf2146105285780633883e1191461053b5780633df021241461054e57600080fd5b806318160ddd1161034657806323746eb81161031557806323746eb8146104bf57806325be124e146104d25780632f7a1881146104f9578063313ce5671461052057600080fd5b806318160ddd146104875780631a4d01d21461048f5780631af4de83146104a45780632081066c146104b757600080fd5b806307211ef71161038257806307211ef7146104305780630dfe168114610443578063140522881461046a57806314f059791461047257600080fd5b8063065a80d8146103a957806306871163146103cf57806306fdde031461041b575b600080fd5b6103bc6103b736600461491d565b6108d7565b6040519081526020015b60405180910390f35b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016103c6565b610423610a73565b6040516103c691906149ae565b6103bc61043e3660046149c1565b610b2b565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc610bfa565b61047a610c8b565b6040516103c691906149fd565b6103bc610d22565b6104a261049d366004614a2e565b610d8f565b005b6104a26104b23660046149c1565b610e27565b6103bc611135565b6103f66104cd36600461491d565b6111a2565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc6111ad565b6104a2610536366004614a53565b61121a565b6103bc610549366004614a8e565b6112ae565b6104a261055c366004614acb565b611366565b61047a611437565b6104a2610577366004614b0d565b6114aa565b6103bc61058a366004614b38565b611546565b6103bc6115bc565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc6105cc3660046149c1565b611629565b6103bc6116b1565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc610635366004614b73565b61171e565b6103bc611797565b61064a600281565b60405161ffff90911681526020016103c6565b6104a261066b3660046149c1565b611804565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b61047a6106a5366004614b90565b611a80565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b610423611b3f565b6104a26106e7366004614b0d565b611bac565b6104a26106fa366004614acb565b611c3f565b6103bc611cc9565b6103f661071536600461491d565b611d36565b6103f6610715366004614b38565b6103bc611d41565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc7f000000000000000000000000000000000000000000000000000000000000000081565b6103f66104cd366004614b38565b6103bc6107c1366004614bce565b611dae565b6107ce600681565b6040516103c69190614bfa565b6104a26107e9366004614a2e565b611e2e565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b61047a611fa8565b6103bc61082b366004614c3b565b61201b565b6103bc61209c565b6103bc610846366004614b38565b612109565b6104a2610859366004614a53565b61217f565b6104a261086c366004614c69565b6123e0565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc61245a565b6103f66124c7565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc612558565b6040517f4903b0d10000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff821660048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634903b0d1906024015b602060405180830381865afa9250505080156109b1575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526109ae91810190614c8d565b60015b610a68576040517f065a80d8000000000000000000000000000000000000000000000000000000008152600f83900b60048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063065a80d8906024015b602060405180830381865afa158015610a44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a689190614c8d565b92915050565b919050565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015610ae0573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b269190810190614d67565b905090565b6040517f07211ef7000000000000000000000000000000000000000000000000000000008152600f84810b600483015283900b6024820152604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906307211ef7906064015b602060405180830381865afa158015610bcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf09190614c8d565b90505b9392505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663140522886040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b269190614c8d565b610c936148ed565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166314f059796040518163ffffffff1660e01b8152600401606060405180830381865afa158015610cfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b269190614db8565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b60026000541415610e01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b60026000908155610e11836125c5565b9050610e1c816126d0565b505060016000555050565b60026000541415610e94576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610f25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f499190614e36565b90506000610f56856127ed565b90506000610f63856127ed565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529192506000918416906370a0823190602401602060405180830381865afa158015610fd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff99190614c8d565b90506001811115611127577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce800000061103f8784614e53565b6110499190614eb7565b604051600f8a810b602483015289900b60448201526064810184905260848101829052909150611124908690869086907fa6417ed6000000000000000000000000000000000000000000000000000000009060a4015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526001806128f7565b50505b505060016000555050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632081066c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6000610a68826125c5565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b60026000541415611287576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b60026000908155611297836125c5565b90506112a4838284612d6f565b5050600160005550565b6040517f3883e11900000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690633883e119906113259086908690600401614ef2565b602060405180830381865afa158015611342573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf39190614c8d565b600260005414156113d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b600260009081556113e3856125c5565b905060006113f0856125c5565b905061112782826000368080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525060019350915061301a9050565b61143f6148ed565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16634469e30e6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610cfe573d6000803e3d6000fd5b60026000541415611517576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b6002600090815561153d90600184358110916020860135821091604087013511906130e9565b50506001600055565b6040517f4903b0d1000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634903b0d19060240161095a565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635409491a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6040517f5e0d443f000000000000000000000000000000000000000000000000000000008152600f84810b600483015283900b6024820152604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635e0d443f90606401610baf565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166363543f066040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401610a27565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166376a2f0f06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b60026000541415611871576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611902573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119269190614e36565b90506000611933856125c5565b90506000611940856125c5565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529192506000918416906370a0823190602401602060405180830381865afa1580156119b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d69190614c8d565b90506001811115611127577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce8000000611a1c8784614e53565b611a269190614eb7565b604051600f8a810b602483015289900b60448201526064810184905260848101829052909150611124908690869086907f3df02124000000000000000000000000000000000000000000000000000000009060a40161109f565b611a886148ed565b6040517f85ca3c6f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906385ca3c6f90611afe90879087908790600401614f0a565b606060405180830381865afa158015611b1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf09190614db8565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610ae0573d6000803e3d6000fd5b60026000541415611c19576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b6002600090815561153d90600184358110916020860135821091604087013511906132c7565b60026000541415611cac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b60026000908155611cbc856127ed565b905060006113f0856127ed565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b4b577ad6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6000610a68826127ed565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb7b8b806040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6040517fcc2b27d700000000000000000000000000000000000000000000000000000000815260048101839052600f82900b60248201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063cc2b27d790604401611325565b60026000541415611e9b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b60026000908155611eab836125c5565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611f3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f5f9190614e36565b9050611f9b81837f0000000000000000000000000000000000000000000000000000000000000000611f92888a89613704565b600160006128f7565b5050600160005550505050565b611fb06148ed565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d96c7fce6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610cfe573d6000803e3d6000fd5b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063dd62ed3e90604401611325565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6040517fe2e7d264000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e2e7d26490602401610a27565b600260005414156121ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b600260009081556121fc836125c5565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa15801561228c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b09190614e36565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000918416906370a0823190602401602060405180830381865afa158015612322573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123469190614c8d565b905060018111156123d4577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce800000061238c8684614e53565b6123969190614eb7565b90506123d183857f00000000000000000000000000000000000000000000000000000000000000006123c98a8787613704565b6001806128f7565b50505b50506001600055505050565b6002600054141561244d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b600260005561153d613bc3565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f446c1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa158015612534573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b269190614e36565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fee3f7f96040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b600081600f0b600014156125f657507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6001141561262557507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6002141561265457507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6003141561268357507f00000000000000000000000000000000000000000000000000000000000000005b73ffffffffffffffffffffffffffffffffffffffff8116610a6e576040517fd1da79bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa15801561275d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127819190614e36565b90506127e8817f0000000000000000000000000000000000000000000000000000000000000000846000368080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525092508291506128f79050565b505050565b600081600f0b6000141561281e57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6001141561284d57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6002141561287c57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6003141561268357507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff8116610a6e576040517fd1da79bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606000803373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614612a60576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301528916906370a0823190602401602060405180830381865afa1580156129a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129c99190614c8d565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152919350908816906370a0823190602401602060405180830381865afa158015612a39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a5d9190614c8d565b90505b8415612b5c576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612b4357600080fd5b505af1158015612b57573d6000803e3d6000fd5b505050505b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a90612bf29033907f0000000000000000000000000000000000000000000000000000000000000000908b90600401614f31565b6000604051808303816000875af1158015612c11573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052612c579190810190614d67565b92508415612d55576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612d3c57600080fd5b505af1158015612d50573d6000803e3d6000fd5b505050505b612d6389898985858961403d565b50509695505050505050565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612dfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e209190614e36565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000917f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015612eb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ed69190614c8d565b90506001811115613013577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01613011827f0000000000000000000000000000000000000000000000000000000000000000867f1a4d01d200000000000000000000000000000000000000000000000000000000858a6b033b2e3c9fd0803ce8000000612f638b84614e53565b612f6d9190614eb7565b6040516024810193909352600f9190910b60448301526064820152608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152600060016128f7565b505b5050505050565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015260609060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa1580156130aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130ce9190614e36565b90506130de8188888888886128f7565b979650505050505050565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015613176573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061319a9190614e36565b90506131a88585858561429f565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561325957600080fd5b505af115801561326d573d6000803e3d6000fd5b505050506132b16000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061471592505050565b506132be8585858561429f565b61301381614813565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015613354573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133789190614e36565b9050841561344a576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561343157600080fd5b505af1158015613445573d6000803e3d6000fd5b505050505b831561351a576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561350157600080fd5b505af1158015613515573d6000803e3d6000fd5b505050505b82156135ea576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156135d157600080fd5b505af11580156135e5573d6000803e3d6000fd5b505050505b81156136ba576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156136a157600080fd5b505af11580156136b5573d6000803e3d6000fd5b505050505b6136fa6000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061471592505050565b5061301381614813565b60607f0000000000000000000000000000000000000000000000000000000000000000600214156138bd5783600f0b6000146137fa576040516000602482015260448101849052606481018390527f0b4c7e4d00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526138b6565b6040516024810184905260006044820152606481018390527f0b4c7e4d00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091525b9050610bf3565b7f0000000000000000000000000000000000000000000000000000000000000000600314156139d75783600f0b60001461398e5783600f0b60011461394557604051600060248201819052604482015260648101849052608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401613778565b604051600060248201819052604482018590526064820152608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401613778565b604051602481018490526000604482018190526064820152608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401613838565b7f000000000000000000000000000000000000000000000000000000000000000060041415613b615783600f0b600014613b115783600f0b600114613ac15783600f0b600214613a71576040516000602482018190526044820181905260648201526084810184905260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613778565b6040516000602482018190526044820181905260648201859052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613778565b6040516000602482018190526044820185905260648201819052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613778565b6040516024810184905260006044820181905260648201819052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613838565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f496e636f7272656374206e436f696e73000000000000000000000000000000006044820152606401610df8565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015613c50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c749190614e36565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301529192507f0000000000000000000000000000000000000000000000000000000000000000909116906351e3f16090604401600060405180830381600087803b158015613d2a57600080fd5b505af1158015613d3e573d6000803e3d6000fd5b50506040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f00000000000000000000000000000000000000000000000000000000000000001692506351e3f1609150604401600060405180830381600087803b158015613df357600080fd5b505af1158015613e07573d6000803e3d6000fd5b5050505060027f00000000000000000000000000000000000000000000000000000000000000001115613ff0576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015613ee557600080fd5b505af1158015613ef9573d6000803e3d6000fd5b5050505060037f00000000000000000000000000000000000000000000000000000000000000001115613ff0576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015613fd757600080fd5b505af1158015613feb573d6000803e3d6000fd5b505050505b6140306000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061471592505050565b5061403a81614813565b50565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461413e576040517f654a9eda00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528681166024830152858116604483015260648201859052608482018490527f0000000000000000000000000000000000000000000000000000000000000000169063654a9eda9060a401600060405180830381600087803b15801561412157600080fd5b505af1158015614135573d6000803e3d6000fd5b50505050613011565b80156141ee576040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015286811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b1580156141d557600080fd5b505af11580156141e9573d6000803e3d6000fd5b505050505b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015285811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561427f57600080fd5b505af1158015614293573d6000803e3d6000fd5b50505050505050505050565b83156143bb576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156143a257600080fd5b505af11580156143b6573d6000803e3d6000fd5b505050505b82156144d7576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156144be57600080fd5b505af11580156144d2573d6000803e3d6000fd5b505050505b81156145f3576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156145da57600080fd5b505af11580156145ee573d6000803e3d6000fd5b505050505b801561470f576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156146f657600080fd5b505af115801561470a573d6000803e3d6000fd5b505050505b50505050565b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815260609073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a906147ae9033907f0000000000000000000000000000000000000000000000000000000000000000908790600401614f31565b6000604051808303816000875af11580156147cd573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610a689190810190614d67565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461403a576040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b1580156148d957600080fd5b505af1158015613013573d6000803e3d6000fd5b60405180606001604052806003906020820280368337509192915050565b8035600f81900b8114610a6e57600080fd5b60006020828403121561492f57600080fd5b610bf38261490b565b60005b8381101561495357818101518382015260200161493b565b8381111561470f5750506000910152565b6000815180845261497c816020860160208601614938565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610bf36020830184614964565b6000806000606084860312156149d657600080fd5b6149df8461490b565b92506149ed6020850161490b565b9150604084013590509250925092565b60608101818360005b6003811015614a25578151835260209283019290910190600101614a06565b50505092915050565b600080600060608486031215614a4357600080fd5b833592506149ed6020850161490b565b60008060408385031215614a6657600080fd5b614a6f8361490b565b946020939093013593505050565b8060608101831015610a6857600080fd5b60008060808385031215614aa157600080fd5b614aab8484614a7d565b915060608301358015158114614ac057600080fd5b809150509250929050565b60008060008060808587031215614ae157600080fd5b614aea8561490b565b9350614af86020860161490b565b93969395505050506040820135916060013590565b60008060808385031215614b2057600080fd5b614b2a8484614a7d565b946060939093013593505050565b600060208284031215614b4a57600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461403a57600080fd5b600060208284031215614b8557600080fd5b8135610bf381614b51565b600080600060e08486031215614ba557600080fd5b614baf8585614a7d565b9250614bbe8560608601614a7d565b915060c084013590509250925092565b60008060408385031215614be157600080fd5b82359150614bf16020840161490b565b90509250929050565b6020810160118310614c35577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60008060408385031215614c4e57600080fd5b8235614c5981614b51565b91506020830135614ac081614b51565b60008060808385031215614c7c57600080fd5b82359150614bf18460208501614a7d565b600060208284031215614c9f57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff80841115614cf057614cf0614ca6565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715614d3657614d36614ca6565b81604052809350858152868686011115614d4f57600080fd5b614d5d866020830187614938565b5050509392505050565b600060208284031215614d7957600080fd5b815167ffffffffffffffff811115614d9057600080fd5b8201601f81018413614da157600080fd5b614db084825160208401614cd5565b949350505050565b600060608284031215614dca57600080fd5b82601f830112614dd957600080fd5b6040516060810181811067ffffffffffffffff82111715614dfc57614dfc614ca6565b604052806060840185811115614e1157600080fd5b845b81811015614e2b578051835260209283019201614e13565b509195945050505050565b600060208284031215614e4857600080fd5b8151610bf381614b51565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614eb2577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500290565b600082614eed577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60808101606084833791151560609190910152919050565b60e081016060858337606082016000815260608582375060c0919091019190915292915050565b600073ffffffffffffffffffffffffffffffffffffffff808616835280851660208401525060606040830152614f6a6060830184614964565b9594505050505056fea2646970667358221220efb951725986e76ee157ff0d00cd7b7a6a9b8a581784400c52be5c96516fe15064736f6c634300080a00336102606040523480156200001257600080fd5b5060405162005f9a38038062005f9a833981016040819052620000359162000ba4565b83838383600484846001600160a01b03821615806200005b57506001600160a01b038116155b156200007a57604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038216608081905260408051632f7a188160e01b81529051632f7a1881916004808201926020929091908290030181865afa158015620000c5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000eb919062000c01565b6001600160a01b0390811660a05290811660c05260016000558416151590506200012857604051635919af9760e11b815260040160405180910390fd5b608051604051630f67c5bd60e41b81526001600160a01b0385811660048301529091169063f67c5bd090602401602060405180830381865afa15801562000173573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000199919062000c26565b620001c757604051634c607af960e11b81526001600160a01b03841660048201526024015b60405180910390fd5b6001600160a01b038084166101e081905261020052821661022052610240819052620001f460006200090a565b6001600160a01b031660e0526200020c60016200090a565b6001600160a01b0316610100526200022560026200090a565b6001600160a01b0316610120526200023e60036200090a565b6001600160a01b031661014052620002576000620009fd565b6001600160a01b031661016052620002706001620009fd565b6001600160a01b031661018052620002896002620009fd565b6001600160a01b03166101a052620002a26003620009fd565b6001600160a01b039081166101c05260e051161580620002cc5750610100516001600160a01b0316155b15620002eb57604051635919af9760e11b815260040160405180910390fd5b600281118015620003065750610120516001600160a01b0316155b156200032557604051635919af9760e11b815260040160405180910390fd5b600381118015620003405750610140516001600160a01b0316155b156200035f57604051635919af9760e11b815260040160405180910390fd5b60805160e051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620003ac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003d2919062000c26565b620004005760e051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b60805161010051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa1580156200044e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000474919062000c26565b620004a35761010051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b60028111801562000525575060805161012051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620004fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000523919062000c26565b155b15620005555761012051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b600381118015620005d7575060805161014051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620005af573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005d5919062000c26565b155b15620006075761014051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b610160516001600160a01b03161580159062000694575060805161016051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa1580156200066c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000692919062000c26565b155b15620006c45761016051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b610180516001600160a01b03161580159062000751575060805161018051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa15801562000729573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200074f919062000c26565b155b15620007815761018051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b6101a0516001600160a01b0316158015906200080e57506080516101a051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620007e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200080c919062000c26565b155b156200083e576101a051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b6101c0516001600160a01b031615801590620008cb57506080516101c051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620008a3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008c9919062000c26565b155b15620008fb576101c051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b50505050505050505062000c66565b60c05160405163c661065760e01b8152600481018390526000916001600160a01b03169063c661065790602401602060405180830381865afa92505050801562000973575060408051601f3d908101601f19168201909252620009709181019062000c01565b60015b6200097e5762000984565b92915050565b60c05160405163046e8dd760e31b8152600f84900b60048201526001600160a01b03909116906323746eb8906024015b602060405180830381865afa925050508015620009f0575060408051601f3d908101601f19168201909252620009ed9181019062000c01565b60015b6200097e57506000919050565b610220516000906001600160a01b03161562000a1e576200097e8262000ac0565b60c051604051630b9947eb60e41b8152600481018490526001600160a01b039091169063b9947eb090602401602060405180830381865afa92505050801562000a86575060408051601f3d908101601f1916820190925262000a839181019062000c01565b60015b6200097e5760c051604051635b9cca9f60e11b8152600f84900b60048201526001600160a01b039091169063b739953e90602401620009b4565b60008162000ad4576200097e600062000b17565b610220516001600160a01b031663c661065762000af360018562000c40565b6040518263ffffffff1660e01b8152600401620009b491815260200190565b919050565b600081600f0b6000141562000b2b575060e0515b81600f0b6001141562000b3e5750610100515b81600f0b6002141562000b515750610120515b81600f0b6003141562000b645750610140515b6001600160a01b03811662000b12576040516334769e6f60e21b815260040160405180910390fd5b80516001600160a01b038116811462000b1257600080fd5b6000806000806080858703121562000bbb57600080fd5b62000bc68562000b8c565b935062000bd66020860162000b8c565b925062000be66040860162000b8c565b915062000bf66060860162000b8c565b905092959194509250565b60006020828403121562000c1457600080fd5b62000c1f8262000b8c565b9392505050565b60006020828403121562000c3957600080fd5b5051919050565b60008282101562000c6157634e487b7160e01b600052601160045260246000fd5b500390565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e051610200516102205161024051614fb762000fe3600039600081816107830152818161395a01528181613a4c01528181613b8c01528181613d430152613e5d015260006105f101526000818161069b01528181611f6f0152818161241d015281816126cd01528181612daf01528181613491015261352f015260006108ad0152600081816105af0152612eb10152600081816103e90152612e820152600081816106180152612e530152600081816106c20152612e2401526000818161087601528181612b1c01528181612c8901528181613ab6015261440c0152600081816104fd01528181612a4c01528181612c5a015281816139c401526142f00152600081816108060152818161297c01528181612c2b015281816138d001526141d401526000818161045d015281816128ac01528181612bfc0152818161380401526140b8015260008181610735015281816109bf01528181610a8c01528181610b1c01528181610c1401528181610ca301528181610d3a01528181610dcb01528181611270015281816112e8015281816114c00152818161155b015281816115e4015281816116620152818161170f01528181611757015281816118080152818161183d01528181611ba001528181611c9701528181611d0f01528181611db401528181611fef01528181612030015281816120e90152818161211e015281816121b901528181612462015281816124cf01528181612560015281816130cf015281816131ee015281816132c801528181614090015281816141ac015281816142c8015281816143e4015261452c01526000818161052401528181612f3a015281816145d301526146ad01526000818161075c015281816110000152818161194801528181611efb015281816122c3015281816125fa015281816126f5015281816127df015281816128d4015281816129a401528181612a7401528181612b4401528181612d2701528181613125015281816131bf0152818161331e015281816133c6015281816136880152818161373f0152818161382f015281816138f8015281816139ec01528181613ade01528181614106015281816142220152818161433e0152818161445a015281816144fd0152818161463d01528181614735015281816147e901526148930152614fb76000f3fe608060405234801561001057600080fd5b50600436106103a45760003560e01c806378aa73a4116101e9578063cc2b27d71161010f578063ddca3f43116100ad578063f446c1d01161007c578063f446c1d014610898578063f851a440146108a0578063fc0c546a146108a8578063fee3f7f9146108cf57600080fd5b8063ddca3f4314610843578063e2e7d2641461084b578063ec026ca71461085e578063ef14101e1461087157600080fd5b8063cf701ff7116100e9578063cf701ff7146107ee578063d21220a714610801578063d96c7fce14610828578063dd62ed3e1461083057600080fd5b8063cc2b27d7146107b3578063ce30bbdb146107c6578063cf023dd0146107db57600080fd5b8063b4b577ad11610187578063bd90df7011610156578063bd90df7014610730578063c12c21c014610757578063c21ee1621461077e578063c6610657146107a557600080fd5b8063b4b577ad146106ff578063b739953e14610707578063b9947eb01461071a578063bb7b8b801461072857600080fd5b806382c63066116101c357806382c63066146106965780638ba51dfc146106bd57806395d89b41146106e4578063a6417ed6146106ec57600080fd5b806378aa73a41461065557806379bea664146106705780637d49d8751461068357600080fd5b80632f7a1881116102ce5780635409491a1161026c57806364a89bca1161023b57806364a89bca146105ec5780636e1d82711461061357806370a082311461063a57806376a2f0f01461064d57600080fd5b80635409491a146105a257806357d78875146105aa5780635e0d443f146105d157806363543f06146105e457600080fd5b80633df02124116102a85780633df02124146105615780634469e30e146105745780634903b0d11461057c57806353b546cd1461058f57600080fd5b80632f7a18811461051f578063313ce5671461054657806333d2ebf21461054e57600080fd5b806314f05979116103465780631af4de83116103155780631af4de83146104ca5780632081066c146104dd57806323746eb8146104e557806325be124e146104f857600080fd5b806314f059791461048757806318160ddd1461049c57806318a7bd76146104a45780631a4d01d2146104b757600080fd5b806306fdde031161038257806306fdde031461043057806307211ef7146104455780630dfe168114610458578063140522881461047f57600080fd5b8063029b2f34146103a9578063065a80d8146103be57806306871163146103e4575b600080fd5b6103bc6103b7366004614926565b6108d7565b005b6103d16103cc366004614963565b61097c565b6040519081526020015b60405180910390f35b61040b7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016103db565b610438610b18565b6040516103db91906149f4565b6103d1610453366004614a07565b610bd0565b61040b7f000000000000000000000000000000000000000000000000000000000000000081565b6103d1610c9f565b61048f610d30565b6040516103db9190614a43565b6103d1610dc7565b6103bc6104b2366004614926565b610e34565b6103bc6104c5366004614a74565b610ecb565b6103bc6104d8366004614a07565b610f5e565b6103d161126c565b61040b6104f3366004614963565b6112d9565b61040b7f000000000000000000000000000000000000000000000000000000000000000081565b61040b7f000000000000000000000000000000000000000000000000000000000000000081565b6103d16112e4565b6103bc61055c366004614a99565b611351565b6103bc61056f366004614ac3565b6113e5565b61048f6114b6565b6103d161058a366004614b05565b611529565b61048f61059d366004614b1e565b61159f565b6103d161165e565b61040b7f000000000000000000000000000000000000000000000000000000000000000081565b6103d16105df366004614a07565b6116cb565b6103d1611753565b61040b7f000000000000000000000000000000000000000000000000000000000000000081565b61040b7f000000000000000000000000000000000000000000000000000000000000000081565b6103d1610648366004614b80565b6117c0565b6103d1611839565b61065d600281565b60405161ffff90911681526020016103db565b6103bc61067e366004614a07565b6118a6565b6103bc610691366004614b9d565b611b22565b61040b7f000000000000000000000000000000000000000000000000000000000000000081565b61040b7f000000000000000000000000000000000000000000000000000000000000000081565b610438611b9c565b6103bc6106fa366004614ac3565b611c09565b6103d1611c93565b61040b610715366004614963565b611d00565b61040b610715366004614b05565b6103d1611d0b565b61040b7f000000000000000000000000000000000000000000000000000000000000000081565b61040b7f000000000000000000000000000000000000000000000000000000000000000081565b6103d17f000000000000000000000000000000000000000000000000000000000000000081565b61040b6104f3366004614b05565b6103d16107c1366004614bca565b611d78565b6107ce600781565b6040516103db9190614bed565b6103bc6107e9366004614a74565b611e35565b6103d16107fc366004614c2e565b611faf565b61040b7f000000000000000000000000000000000000000000000000000000000000000081565b61048f612026565b6103d161083e366004614c6b565b612099565b6103d161211a565b6103d1610859366004614b05565b612187565b6103bc61086c366004614a99565b6121fd565b61040b7f000000000000000000000000000000000000000000000000000000000000000081565b6103d161245e565b61040b6124cb565b61040b7f000000000000000000000000000000000000000000000000000000000000000081565b6103d161255c565b60026000541415610949576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b600260005561097360018335811090602085013581109060408601358110906060870135116125c9565b50506001600055565b6040517f4903b0d10000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff821660048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634903b0d1906024015b602060405180830381865afa925050508015610a56575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610a5391810190614c99565b60015b610b0d576040517f065a80d8000000000000000000000000000000000000000000000000000000008152600f83900b60048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063065a80d8906024015b602060405180830381865afa158015610ae9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0d9190614c99565b92915050565b919050565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015610b85573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610bcb9190810190614d73565b905090565b6040517f07211ef7000000000000000000000000000000000000000000000000000000008152600f84810b600483015283900b6024820152604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906307211ef7906064015b602060405180830381865afa158015610c71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c959190614c99565b90505b9392505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663140522886040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bcb9190614c99565b610d386148f7565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166314f059796040518163ffffffff1660e01b8152600401608060405180830381865afa158015610da3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bcb9190614dc4565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d0c573d6000803e3d6000fd5b60026000541415610ea1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610940565b600260005561097360018335811090602085013581109060408601358110906060870135116127ae565b60026000541415610f38576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610940565b60026000908155610f4883612beb565b9050610f5381612cf6565b505060016000555050565b60026000541415610fcb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610940565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa15801561105c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110809190614e42565b9050600061108d85612e13565b9050600061109a85612e13565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529192506000918416906370a0823190602401602060405180830381865afa15801561110c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111309190614c99565b9050600181111561125e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce80000006111768784614e5f565b6111809190614ec3565b604051600f8a810b602483015289900b6044820152606481018490526084810182905290915061125b908690869086907fa6417ed6000000000000000000000000000000000000000000000000000000009060a4015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152600180612f1d565b50505b505060016000555050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632081066c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d0c573d6000803e3d6000fd5b6000610b0d82612beb565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d0c573d6000803e3d6000fd5b600260005414156113be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610940565b600260009081556113ce83612beb565b90506113db838284613395565b5050600160005550565b60026000541415611452576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610940565b6002600090815561146285612beb565b9050600061146f85612beb565b905061125e82826000368080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525060019350915061363f9050565b6114be6148f7565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16634469e30e6040518163ffffffff1660e01b8152600401608060405180830381865afa158015610da3573d6000803e3d6000fd5b6040517f4903b0d1000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634903b0d1906024016109ff565b6115a76148f7565b6040517f53b546cd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906353b546cd9061161d90879087908790600401614efe565b608060405180830381865afa15801561163a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c959190614dc4565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635409491a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d0c573d6000803e3d6000fd5b6040517f5e0d443f000000000000000000000000000000000000000000000000000000008152600f84810b600483015283900b6024820152604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635e0d443f90606401610c54565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166363543f066040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d0c573d6000803e3d6000fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401610acc565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166376a2f0f06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d0c573d6000803e3d6000fd5b60026000541415611913576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610940565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156119a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c89190614e42565b905060006119d585612beb565b905060006119e285612beb565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529192506000918416906370a0823190602401602060405180830381865afa158015611a54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a789190614c99565b9050600181111561125e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce8000000611abe8784614e5f565b611ac89190614ec3565b604051600f8a810b602483015289900b6044820152606481018490526084810182905290915061125b908690869086907f3df02124000000000000000000000000000000000000000000000000000000009060a4016111d6565b60026000541415611b8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610940565b600260005561097361370e565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610b85573d6000803e3d6000fd5b60026000541415611c76576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610940565b60026000908155611c8685612e13565b9050600061146f85612e13565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b4b577ad6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d0c573d6000803e3d6000fd5b6000610b0d82612e13565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb7b8b806040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d0c573d6000803e3d6000fd5b6040517fcc2b27d700000000000000000000000000000000000000000000000000000000815260048101839052600f82900b60248201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063cc2b27d7906044015b602060405180830381865afa158015611e11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c989190614c99565b60026000541415611ea2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610940565b60026000908155611eb283612beb565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611f42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f669190614e42565b9050611fa281837f0000000000000000000000000000000000000000000000000000000000000000611f99888a89613b88565b60016000612f1d565b5050600160005550505050565b6040517fcf701ff700000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063cf701ff790611df49086908690600401614f27565b61202e6148f7565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d96c7fce6040518163ffffffff1660e01b8152600401608060405180830381865afa158015610da3573d6000803e3d6000fd5b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063dd62ed3e90604401611df4565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d0c573d6000803e3d6000fd5b6040517fe2e7d264000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e2e7d26490602401610acc565b6002600054141561226a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610940565b6002600090815561227a83612beb565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa15801561230a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061232e9190614e42565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000918416906370a0823190602401602060405180830381865afa1580156123a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123c49190614c99565b90506001811115612452577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce800000061240a8684614e5f565b6124149190614ec3565b905061244f83857f00000000000000000000000000000000000000000000000000000000000000006124478a8787613b88565b600180612f1d565b50505b50506001600055505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f446c1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d0c573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa158015612538573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bcb9190614e42565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fee3f7f96040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d0c573d6000803e3d6000fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612656573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061267a9190614e42565b905061268885858585614047565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561273957600080fd5b505af115801561274d573d6000803e3d6000fd5b505050506127916000368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506144bd92505050565b5061279e85858585614047565b6127a7816145bb565b5050505050565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa15801561283b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061285f9190614e42565b90508415612931576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561291857600080fd5b505af115801561292c573d6000803e3d6000fd5b505050505b8315612a01576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156129e857600080fd5b505af11580156129fc573d6000803e3d6000fd5b505050505b8215612ad1576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015612ab857600080fd5b505af1158015612acc573d6000803e3d6000fd5b505050505b8115612ba1576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015612b8857600080fd5b505af1158015612b9c573d6000803e3d6000fd5b505050505b612be16000368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506144bd92505050565b506127a7816145bb565b600081600f0b60001415612c1c57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b60011415612c4b57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b60021415612c7a57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b60031415612ca957507f00000000000000000000000000000000000000000000000000000000000000005b73ffffffffffffffffffffffffffffffffffffffff8116610b13576040517fd1da79bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612d83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612da79190614e42565b9050612e0e817f0000000000000000000000000000000000000000000000000000000000000000846000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509250829150612f1d9050565b505050565b600081600f0b60001415612e4457507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b60011415612e7357507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b60021415612ea257507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b60031415612ca957507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff8116610b13576040517fd1da79bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606000803373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614613086576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301528916906370a0823190602401602060405180830381865afa158015612fcb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fef9190614c99565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152919350908816906370a0823190602401602060405180830381865afa15801561305f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130839190614c99565b90505b8415613182576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561316957600080fd5b505af115801561317d573d6000803e3d6000fd5b505050505b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a906132189033907f0000000000000000000000000000000000000000000000000000000000000000908b90600401614f3f565b6000604051808303816000875af1158015613237573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261327d9190810190614d73565b9250841561337b576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561336257600080fd5b505af1158015613376573d6000803e3d6000fd5b505050505b613389898989858589614695565b50509695505050505050565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015613422573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134469190614e42565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000917f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa1580156134d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134fc9190614c99565b905060018111156127a7577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01613637827f0000000000000000000000000000000000000000000000000000000000000000867f1a4d01d200000000000000000000000000000000000000000000000000000000858a6b033b2e3c9fd0803ce80000006135898b84614e5f565b6135939190614ec3565b6040516024810193909352600f9190910b60448301526064820152608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915260006001612f1d565b505050505050565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015260609060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa1580156136cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136f39190614e42565b9050613703818888888888612f1d565b979650505050505050565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa15801561379b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137bf9190614e42565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301529192507f0000000000000000000000000000000000000000000000000000000000000000909116906351e3f16090604401600060405180830381600087803b15801561387557600080fd5b505af1158015613889573d6000803e3d6000fd5b50506040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f00000000000000000000000000000000000000000000000000000000000000001692506351e3f1609150604401600060405180830381600087803b15801561393e57600080fd5b505af1158015613952573d6000803e3d6000fd5b5050505060027f00000000000000000000000000000000000000000000000000000000000000001115613b3b576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015613a3057600080fd5b505af1158015613a44573d6000803e3d6000fd5b5050505060037f00000000000000000000000000000000000000000000000000000000000000001115613b3b576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015613b2257600080fd5b505af1158015613b36573d6000803e3d6000fd5b505050505b613b7b6000368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506144bd92505050565b50613b85816145bb565b50565b60607f000000000000000000000000000000000000000000000000000000000000000060021415613d415783600f0b600014613c7e576040516000602482015260448101849052606481018390527f0b4c7e4d00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613d3a565b6040516024810184905260006044820152606481018390527f0b4c7e4d00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091525b9050610c98565b7f000000000000000000000000000000000000000000000000000000000000000060031415613e5b5783600f0b600014613e125783600f0b600114613dc957604051600060248201819052604482015260648101849052608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401613bfc565b604051600060248201819052604482018590526064820152608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401613bfc565b604051602481018490526000604482018190526064820152608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401613cbc565b7f000000000000000000000000000000000000000000000000000000000000000060041415613fe55783600f0b600014613f955783600f0b600114613f455783600f0b600214613ef5576040516000602482018190526044820181905260648201526084810184905260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613bfc565b6040516000602482018190526044820181905260648201859052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613bfc565b6040516000602482018190526044820185905260648201819052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613bfc565b6040516024810184905260006044820181905260648201819052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613cbc565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f496e636f7272656374206e436f696e73000000000000000000000000000000006044820152606401610940565b8315614163576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561414a57600080fd5b505af115801561415e573d6000803e3d6000fd5b505050505b821561427f576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561426657600080fd5b505af115801561427a573d6000803e3d6000fd5b505050505b811561439b576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561438257600080fd5b505af1158015614396573d6000803e3d6000fd5b505050505b80156144b7576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561449e57600080fd5b505af11580156144b2573d6000803e3d6000fd5b505050505b50505050565b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815260609073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a906145569033907f0000000000000000000000000000000000000000000000000000000000000000908790600401614f3f565b6000604051808303816000875af1158015614575573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b0d9190810190614d73565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614613b85576040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b15801561468157600080fd5b505af11580156127a7573d6000803e3d6000fd5b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614614796576040517f654a9eda00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528681166024830152858116604483015260648201859052608482018490527f0000000000000000000000000000000000000000000000000000000000000000169063654a9eda9060a401600060405180830381600087803b15801561477957600080fd5b505af115801561478d573d6000803e3d6000fd5b50505050613637565b8015614846576040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015286811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b15801561482d57600080fd5b505af1158015614841573d6000803e3d6000fd5b505050505b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015285811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156148d757600080fd5b505af11580156148eb573d6000803e3d6000fd5b50505050505050505050565b60405180608001604052806004906020820280368337509192915050565b8060808101831015610b0d57600080fd5b60008060a0838503121561493957600080fd5b6149438484614915565b946080939093013593505050565b8035600f81900b8114610b1357600080fd5b60006020828403121561497557600080fd5b610c9882614951565b60005b83811015614999578181015183820152602001614981565b838111156144b75750506000910152565b600081518084526149c281602086016020860161497e565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610c9860208301846149aa565b600080600060608486031215614a1c57600080fd5b614a2584614951565b9250614a3360208501614951565b9150604084013590509250925092565b60808101818360005b6004811015614a6b578151835260209283019290910190600101614a4c565b50505092915050565b600080600060608486031215614a8957600080fd5b83359250614a3360208501614951565b60008060408385031215614aac57600080fd5b614ab583614951565b946020939093013593505050565b60008060008060808587031215614ad957600080fd5b614ae285614951565b9350614af060208601614951565b93969395505050506040820135916060013590565b600060208284031215614b1757600080fd5b5035919050565b60008060006101208486031215614b3457600080fd5b614b3e8585614915565b9250614b4d8560808601614915565b915061010084013590509250925092565b73ffffffffffffffffffffffffffffffffffffffff81168114613b8557600080fd5b600060208284031215614b9257600080fd5b8135610c9881614b5e565b60008060a08385031215614bb057600080fd5b82359150614bc18460208501614915565b90509250929050565b60008060408385031215614bdd57600080fd5b82359150614bc160208401614951565b6020810160118310614c28577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60008060a08385031215614c4157600080fd5b614c4b8484614915565b915060808301358015158114614c6057600080fd5b809150509250929050565b60008060408385031215614c7e57600080fd5b8235614c8981614b5e565b91506020830135614c6081614b5e565b600060208284031215614cab57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff80841115614cfc57614cfc614cb2565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715614d4257614d42614cb2565b81604052809350858152868686011115614d5b57600080fd5b614d6986602083018761497e565b5050509392505050565b600060208284031215614d8557600080fd5b815167ffffffffffffffff811115614d9c57600080fd5b8201601f81018413614dad57600080fd5b614dbc84825160208401614ce1565b949350505050565b600060808284031215614dd657600080fd5b82601f830112614de557600080fd5b6040516080810181811067ffffffffffffffff82111715614e0857614e08614cb2565b604052806080840185811115614e1d57600080fd5b845b81811015614e37578051835260209283019201614e1f565b509195945050505050565b600060208284031215614e5457600080fd5b8151610c9881614b5e565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ebe577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500290565b600082614ef9577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b610120810160808583376080820160008152608085823750610100919091019190915292915050565b60a08101608084833791151560809190910152919050565b600073ffffffffffffffffffffffffffffffffffffffff808616835280851660208401525060606040830152614f7860608301846149aa565b9594505050505056fea26469706673582212202cfa6940592b7cd1b1fb4eed6a97af4919d3bdbe1c8d89c62204ae78f5bc27ba64736f6c634300080a003360806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d00011790553480156200003a57600080fd5b506040805161018081019091526000908060c081018060018152604080518082018252600381526244414960e81b6020828101919091528301526012908201526305f5e100606082015260800160018152602001600081525081526020016040518060c001604052806002600a811115620000b957620000b962000b78565b815260408051808201825260048152635553444360e01b6020828101919091528301526006908201526305f5e100606082015260800160018152602001600081525081526020016040518060c001604052806003600a81111562000121576200012162000b78565b815260408051808201825260048152630ae8aa8960e31b602082810191909152830152601290820152644a817c8000606082015260800160028152602001600081525081526020016040518060c001604052806004600a8111156200018a576200018a62000b78565b815260408051808201825260048152634c494e4b60e01b6020828101919091528301526012908201526359682f00606082015260800160018152602001600081525081526020016040518060c001604052806005600a811115620001f257620001f262000b78565b815260408051808201825260048152631554d11560e21b602082810191909152830152601290820152633b023380606082015260800160018152602001600081525081526020016040518060c001604052806006600a8111156200025a576200025a62000b78565b815260408051808201825260058152640e6e88aa8960db1b602082810191909152830152601290820152644cd588640060608201526080016003815260200160009052905260408051610140810190915290915060009080608081018060078152602001604051806040016040528060048152602001636344414960e01b8152508152602001601260ff1681526020016305f5e100815260200160048081111562000309576200030962000b78565b8152602001600181525081526020016040518060c001604052806008600a81111562000339576200033962000b78565b81526040805180820182526005815264635553444360d81b6020828101919091528301526006908201526305f5e100606082015260800160048152602001600281525081526020016040518060c001604052806009600a811115620003a257620003a262000b78565b8152604080518082018252600581526418d554d11560da1b602082810191909152830152601290820152633b023380606082015260800160048152602001600581525081526020016040518060c00160405280600a808111156200040a576200040a62000b78565b81526040805180820182526005815264634c494e4b60d81b6020828101919091528301526012908201526359682f00606082015260800160048152602001600490529052905060005b600681101562000496576200048183826006811062000476576200047662000b8e565b6020020151620004db565b806200048d8162000ba4565b91505062000453565b5060005b6004811015620004d257620004bd82826004811062000476576200047662000b8e565b80620004c98162000ba4565b9150506200049a565b50505062000d14565b6000600282608001516004811115620004f857620004f862000b78565b14156200054e576040516200050d9062000a8c565b604051809103906000f0801580156200052a573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b03831617905590506200071e565b60038260800151600481111562000569576200056962000b78565b1415620005a4576040516200057e9062000a9a565b604051809103906000f0801580156200059b573d6000803e3d6000fd5b5090506200071e565b600182608001516004811115620005bf57620005bf62000b78565b1415620005f157816020015182602001518360400151604051620005e39062000aa8565b6200057e9392919062000c1e565b6004826080015160048111156200060c576200060c62000b78565b1415620006be576000600260008460a00151600a81111562000632576200063262000b78565b600a81111562000646576200064662000b78565b815260200190815260200160002060009054906101000a90046001600160a01b0316905082602001518360200151846040015183604051620006889062000ab6565b62000697949392919062000c5b565b604051809103906000f080158015620006b4573d6000803e3d6000fd5b509150506200071e565b60405162461bcd60e51b815260206004820152602b60248201527f74657374546f6b656e53756974653a204372656174696e6720756e6b6e6f776e60448201526a20746f6b656e207479706560a81b606482015260840160405180910390fd5b60005460208301516040516318caf8e360e31b8152620100009092046001600160a01b03169163c657c718916200075b9185919060040162000ca9565b600060405180830381600087803b1580156200077657600080fd5b505af11580156200078b573d6000803e3d6000fd5b50505050600082606001516008604051620007a69062000ac4565b91825260ff166020820152604001604051809103906000f080158015620007d1573d6000803e3d6000fd5b50905081600260008560000151600a811115620007f257620007f262000b78565b600a81111562000806576200080662000b78565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055508260600151600560008560000151600a8111156200085a576200085a62000b78565b600a8111156200086e576200086e62000b78565b8152602080820192909252604090810160009081209390935585516001600160a01b03861684526008909252909120805460ff1916600183600a811115620008ba57620008ba62000b78565b02179055508260800151600360008560000151600a811115620008e157620008e162000b78565b600a811115620008f557620008f562000b78565b81526020810191909152604001600020805460ff1916600183600481111562000922576200092262000b78565b0217905550604080518082019091526001600160a01b0380841682528281166020808401918252600780546001810182556000918252945160029095027fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688810180549686166001600160a01b031997881617905592517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c689909301805493909416929094169190911790915584015184519091600491600a811115620009eb57620009eb62000b78565b600a811115620009ff57620009ff62000b78565b8152602001908152602001600020908051906020019062000a2292919062000ad2565b5080600660008560000151600a81111562000a415762000a4162000b78565b600a81111562000a555762000a5562000b78565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550505050565b610ab1806200285183390190565b611224806200330283390190565b611758806200452683390190565b6117098062005c7e83390190565b6106ca806200738783390190565b82805462000ae09062000cd7565b90600052602060002090601f01602090048101928262000b04576000855562000b4f565b82601f1062000b1f57805160ff191683800117855562000b4f565b8280016001018555821562000b4f579182015b8281111562000b4f57825182559160200191906001019062000b32565b5062000b5d92915062000b61565b5090565b5b8082111562000b5d576000815560010162000b62565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600060001982141562000bc757634e487b7160e01b600052601160045260246000fd5b5060010190565b6000815180845260005b8181101562000bf65760208185018101518683018201520162000bd8565b8181111562000c09576000602083870101525b50601f01601f19169290920160200192915050565b60608152600062000c33606083018662000bce565b828103602084015262000c47818662000bce565b91505060ff83166040830152949350505050565b60808152600062000c70608083018762000bce565b828103602084015262000c84818762000bce565b60ff95909516604084015250506001600160a01b039190911660609091015292915050565b6001600160a01b038316815260406020820181905260009062000ccf9083018462000bce565b949350505050565b600181811c9082168062000cec57607f821691505b6020821081141562000d0e57634e487b7160e01b600052602260045260246000fd5b50919050565b611b2d8062000d246000396000f3fe6080604052600436106101635760003560e01c80638eb86e8b116100c0578063c6c3bbe611610074578063d051a62211610059578063d051a62214610490578063eebab8ef146104b0578063fa7626d4146104d057600080fd5b8063c6c3bbe614610433578063c74912d21461045357600080fd5b80639b140a85116100a55780639b140a85146103e6578063b36ba20814610406578063ba414fa61461040e57600080fd5b80638eb86e8b1461038357806398cdaadf146103a357600080fd5b80636a72bde71161011757806388327863116100fc578063883278631461030857806388f776a2146103365780638a3177a31461035657600080fd5b80636a72bde7146102c45780636ca42ae3146102e657600080fd5b8063440864fa11610148578063440864fa146102025780634b57b0be1461022f57806367b426451461028157600080fd5b806304bc3b1c1461016f57806310c7f0b9146101b557600080fd5b3661016a57005b600080fd5b34801561017b57600080fd5b5061019f61018a3660046116f6565b60086020526000908152604090205460ff1681565b6040516101ac9190611742565b60405180910390f35b3480156101c157600080fd5b506101d56101d036600461175c565b6104ea565b6040805173ffffffffffffffffffffffffffffffffffffffff9384168152929091166020830152016101ac565b34801561020e57600080fd5b5061022261021d366004611784565b610530565b6040516101ac91906117cb565b34801561023b57600080fd5b5060015461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101ac565b34801561028d57600080fd5b5061025c61029c366004611784565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156102d057600080fd5b506102e46102df36600461181c565b6105ca565b005b3480156102f257600080fd5b506102fb610730565b6040516101ac919061186b565b34801561031457600080fd5b506103286103233660046118d4565b6107b5565b6040519081526020016101ac565b34801561034257600080fd5b506102e461035136600461190b565b610888565b34801561036257600080fd5b50610328610371366004611784565b60056020526000908152604090205481565b34801561038f57600080fd5b506102e461039e366004611954565b6108b9565b3480156103af57600080fd5b5061025c6103be366004611784565b60066020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156103f257600080fd5b506102e4610401366004611993565b610a73565b6102e4610b22565b34801561041a57600080fd5b50610423610ba0565b60405190151581526020016101ac565b34801561043f57600080fd5b506102e461044e3660046119b3565b610d00565b34801561045f57600080fd5b5061048361046e366004611784565b60036020526000908152604090205460ff1681565b6040516101ac91906119d3565b34801561049c57600080fd5b506103286104ab36600461190b565b610daf565b3480156104bc57600080fd5b506102e46104cb366004611954565b610e8b565b3480156104dc57600080fd5b506000546104239060ff1681565b600781815481106104fa57600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff91821692501682565b60046020526000908152604090208054610549906119e7565b80601f0160208091040260200160405190810160405280929190818152602001828054610575906119e7565b80156105c25780601f10610597576101008083540402835291602001916105c2565b820191906000526020600020905b8154815290600101906020018083116105a557829003601f168201915b505050505081565b6000546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152620100009092049091169063ca669fa790602401600060405180830381600087803b15801561063e57600080fd5b505af1158015610652573d6000803e3d6000fd5b505050506002600085600a81111561066c5761066c611713565b600a81111561067d5761067d611713565b8152602081019190915260409081016000205490517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490529091169063095ea7b3906044016020604051808303816000875af1158015610705573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107299190611a3b565b5050505050565b60606007805480602002602001604051908101604052809291908181526020016000905b828210156107ac5760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff908116835260019182015416828401529083529092019101610754565b50505050905090565b60006002600084600a8111156107cd576107cd611713565b600a8111156107de576107de611713565b8152602081019190915260409081016000205490517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152909116906370a0823190602401602060405180830381865afa15801561085d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108819190611a5d565b9392505050565b6108b48383837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6105ca565b505050565b60016003600085600a8111156108d1576108d1611713565b600a8111156108e2576108e2611713565b815260208101919091526040016000205460ff16600481111561090757610907611713565b14610999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f74657374546f6b656e53756974653a20547279696e6720746f206275726e206160448201527f206e6f6e2d6e6f726d616c20746f6b656e00000000000000000000000000000060648201526084015b60405180910390fd5b6002600084600a8111156109af576109af611713565b600a8111156109c0576109c0611713565b8152602081019190915260409081016000205490517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526024820184905290911690639dc29fac906044015b6020604051808303816000875af1158015610a49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6d9190611a3b565b50505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604081205460ff169081600a811115610aaf57610aaf611713565b1415610b17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f20746f6b656e2077697468207375636820616464726573730000000000006044820152606401610990565b610a6d818484610888565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015610b8c57600080fd5b505af1158015610729573d6000803e3d6000fd5b60008054610100900460ff1615610bc05750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610cfb5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610c65917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc491608001611a76565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052610c9d91611abe565b6000604051808303816000865af19150503d8060008114610cda576040519150601f19603f3d011682016040523d82523d6000602084013e610cdf565b606091505b5091505080806020019051810190610cf79190611a3b565b9150505b919050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604081205460ff169081600a811115610d3c57610d3c611713565b1415610da4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f20746f6b656e2077697468207375636820616464726573730000000000006044820152606401610990565b610a6d818484610e8b565b60006002600085600a811115610dc757610dc7611713565b600a811115610dd857610dd8611713565b8152602081019190915260409081016000205490517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301529091169063dd62ed3e90604401602060405180830381865afa158015610e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e839190611a5d565b949350505050565b60026003600085600a811115610ea357610ea3611713565b600a811115610eb457610eb4611713565b815260208101919091526040016000205460ff166004811115610ed957610ed9611713565b1415610ff6576000546040517fc88a5e6d000000000000000000000000000000000000000000000000000000008152306004820152602481018390526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c88a5e6d90604401600060405180830381600087803b158015610f5657600080fd5b505af1158015610f6a573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015610fd857600080fd5b505af1158015610fec573d6000803e3d6000fd5b505050505061163c565b600380600085600a81111561100d5761100d611713565b600a81111561101e5761101e611713565b815260208101919091526040016000205460ff16600481111561104357611043611713565b14156111aa576000546040517fc88a5e6d000000000000000000000000000000000000000000000000000000008152306004820152602481018390526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c88a5e6d90604401600060405180830381600087803b1580156110c057600080fd5b505af11580156110d4573d6000803e3d6000fd5b505050506002600084600a8111156110ee576110ee611713565b600a8111156110ff576110ff611713565b8152602081019190915260409081016000205490517fa1903eab00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a1903eab90839060240160206040518083038185885af115801561117f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906111a49190611a5d565b5061163c565b60046003600085600a8111156111c2576111c2611713565b600a8111156111d3576111d3611713565b815260208101919091526040016000205460ff1660048111156111f8576111f8611713565b141561148f5760006002600085600a81111561121657611216611713565b600a81111561122757611227611713565b815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c49190611ada565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600860205260409020549091506112fb9060ff163084610e8b565b8073ffffffffffffffffffffffffffffffffffffffff1663095ea7b36002600087600a81111561132d5761132d611713565b600a81111561133e5761133e611713565b81526020810191909152604090810160002054905160e083901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602481018590526044016020604051808303816000875af11580156113c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e69190611a3b565b506002600085600a8111156113fd576113fd611713565b600a81111561140e5761140e611713565b8152602081019190915260409081016000205490517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810184905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f1990604401600060405180830381600087803b158015610fd857600080fd5b60016003600085600a8111156114a7576114a7611713565b600a8111156114b8576114b8611713565b815260208101919091526040016000205460ff1660048111156114dd576114dd611713565b14156115b4576002600084600a8111156114f9576114f9611713565b600a81111561150a5761150a611713565b8152602081019190915260409081016000205490517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f19906044016020604051808303816000875af1158015611590573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a49190611a3b565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f74657374546f6b656e53756974653a20547279696e6720746f207472616e736660448201527f657220756e6b6e6f776e20746f6b656e000000000000000000000000000000006064820152608401610990565b6002600084600a81111561165257611652611713565b600a81111561166357611663611713565b8152602081019190915260409081016000205490517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490529091169063a9059cbb90604401610a2a565b73ffffffffffffffffffffffffffffffffffffffff811681146116f357600080fd5b50565b60006020828403121561170857600080fd5b8135610881816116d1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60208101600b831061175657611756611713565b91905290565b60006020828403121561176e57600080fd5b5035919050565b8035600b8110610cfb57600080fd5b60006020828403121561179657600080fd5b61088182611775565b60005b838110156117ba5781810151838201526020016117a2565b83811115610a6d5750506000910152565b60208152600082518060208401526117ea81604085016020870161179f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000806080858703121561183257600080fd5b61183b85611775565b9350602085013561184b816116d1565b9250604085013561185b816116d1565b9396929550929360600135925050565b602080825282518282018190526000919060409081850190868401855b828110156118c7578151805173ffffffffffffffffffffffffffffffffffffffff90811686529087015116868501529284019290850190600101611888565b5091979650505050505050565b600080604083850312156118e757600080fd5b6118f083611775565b91506020830135611900816116d1565b809150509250929050565b60008060006060848603121561192057600080fd5b61192984611775565b92506020840135611939816116d1565b91506040840135611949816116d1565b809150509250925092565b60008060006060848603121561196957600080fd5b61197284611775565b92506020840135611982816116d1565b929592945050506040919091013590565b6000806000606084860312156119a857600080fd5b8335611929816116d1565b6000806000606084860312156119c857600080fd5b8335611972816116d1565b602081016005831061175657611756611713565b600181811c908216806119fb57607f821691505b60208210811415611a35577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600060208284031215611a4d57600080fd5b8151801515811461088157600080fd5b600060208284031215611a6f57600080fd5b5051919050565b7fffffffff000000000000000000000000000000000000000000000000000000008316815260008251611ab081600485016020870161179f565b919091016004019392505050565b60008251611ad081846020870161179f565b9190910192915050565b600060208284031215611aec57600080fd5b8151610881816116d156fea264697066735822122010fe735ed069aca27931edce4ba2ff14ec7886bf21b0eea685a884f9200fb49e64736f6c634300080a003360c0604052600d60808190526c2bb930b83832b21022ba3432b960991b60a090815261002e916000919061007a565b50604080518082019091526004808252630ae8aa8960e31b602090920191825261005a9160019161007a565b506002805460ff1916601217905534801561007457600080fd5b5061014e565b82805461008690610113565b90600052602060002090601f0160209004810192826100a857600085556100ee565b82601f106100c157805160ff19168380011785556100ee565b828001600101855582156100ee579182015b828111156100ee5782518255916020019190600101906100d3565b506100fa9291506100fe565b5090565b5b808211156100fa57600081556001016100ff565b600181811c9082168061012757607f821691505b6020821081141561014857634e487b7160e01b600052602260045260246000fd5b50919050565b6109548061015d6000396000f3fe6080604052600436106100cb5760003560e01c806340c10f1911610074578063a9059cbb1161004e578063a9059cbb14610225578063d0e30db014610245578063dd62ed3e1461024d57600080fd5b806340c10f19146101c357806370a08231146101e357806395d89b411461021057600080fd5b806323b872dd116100a557806323b872dd146101575780632e1a7d4d14610177578063313ce5671461019757600080fd5b806306fdde03146100df578063095ea7b31461010a57806318160ddd1461013a57600080fd5b366100da576100d8610285565b005b600080fd5b3480156100eb57600080fd5b506100f46102e0565b6040516101019190610703565b60405180910390f35b34801561011657600080fd5b5061012a61012536600461079f565b61036e565b6040519015158152602001610101565b34801561014657600080fd5b50475b604051908152602001610101565b34801561016357600080fd5b5061012a6101723660046107c9565b6103e7565b34801561018357600080fd5b506100d8610192366004610805565b6105fe565b3480156101a357600080fd5b506002546101b19060ff1681565b60405160ff9091168152602001610101565b3480156101cf57600080fd5b506100d86101de36600461079f565b6106a4565b3480156101ef57600080fd5b506101496101fe36600461081e565b60036020526000908152604090205481565b34801561021c57600080fd5b506100f46106e2565b34801561023157600080fd5b5061012a61024036600461079f565b6106ef565b6100d8610285565b34801561025957600080fd5b50610149610268366004610839565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102a490849061089b565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102ed906108b3565b80601f0160208091040260200160405190810160405280929190818152602001828054610319906108b3565b80156103665780601f1061033b57610100808354040283529160200191610366565b820191906000526020600020905b81548152906001019060200180831161034957829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103d69086815260200190565b60405180910390a350600192915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561041957600080fd5b73ffffffffffffffffffffffffffffffffffffffff8416331480159061048f575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105175773ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020548211156104d157600080fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915281208054849290610511908490610907565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061054c908490610907565b909155505073ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260408120805484929061058690849061089b565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516105ec91815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561061a57600080fd5b3360009081526003602052604081208054839290610639908490610907565b9091555050604051339082156108fc029083906000818181858888f1935050505015801561066b573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260036020526040812080548392906106d990849061089b565b90915550505050565b600180546102ed906108b3565b60006106fc3384846103e7565b9392505050565b600060208083528351808285015260005b8181101561073057858101830151858201604001528201610714565b81811115610742576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461079a57600080fd5b919050565b600080604083850312156107b257600080fd5b6107bb83610776565b946020939093013593505050565b6000806000606084860312156107de57600080fd5b6107e784610776565b92506107f560208501610776565b9150604084013590509250925092565b60006020828403121561081757600080fd5b5035919050565b60006020828403121561083057600080fd5b6106fc82610776565b6000806040838503121561084c57600080fd5b61085583610776565b915061086360208401610776565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156108ae576108ae61086c565b500190565b600181811c908216806108c757607f821691505b60208210811415610901577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000828210156109195761091961086c565b50039056fea26469706673582212206ec943fa4e3b70d8fca6c25b6aa26fa18e8f8952ce3bc4d5afcb443bf3097c0564736f6c634300080a003360806040526000600255600060035534801561001a57600080fd5b506111fa8061002a6000396000f3fe60806040526004361061016e5760003560e01c80637a28fb88116100cb578063bdd17e1c1161007f578063dd62ed3e11610059578063dd62ed3e146103ee578063ee7a7c0414610441578063f5eb42dc1461046157600080fd5b8063bdd17e1c146103ad578063cdb9a21c146103c3578063d5002f2e146103d957600080fd5b8063a1903eab116100b0578063a1903eab1461035a578063a457c2d71461036d578063a9059cbb1461038d57600080fd5b80637a28fb88146102f457806395d89b411461031457600080fd5b806323b872dd1161012257806337cfdaca1161010757806337cfdaca1461020d57806339509351146102b457806370a08231146102d457600080fd5b806323b872dd14610278578063313ce5671461029857600080fd5b806318160ddd1161015357806318160ddd1461020d578063192084511461023057806322301f6e1461025057600080fd5b806306fdde0314610185578063095ea7b3146101dd57600080fd5b366101805761017d6000610481565b50005b600080fd5b34801561019157600080fd5b5060408051808201909152601781527f4c6971756964207374616b656420457468657220322e3000000000000000000060208201525b6040516101d49190610f63565b60405180910390f35b3480156101e957600080fd5b506101fd6101f8366004610fff565b610545565b60405190151581526020016101d4565b34801561021957600080fd5b5061022261055b565b6040519081526020016101d4565b34801561023c57600080fd5b5061022261024b366004611029565b61056b565b34801561025c57600080fd5b5061027661026b366004611042565b600391909155600255565b005b34801561028457600080fd5b506101fd610293366004611064565b6105ab565b3480156102a457600080fd5b50604051601281526020016101d4565b3480156102c057600080fd5b506101fd6102cf366004610fff565b610696565b3480156102e057600080fd5b506102226102ef3660046110a0565b6106d9565b34801561030057600080fd5b5061022261030f366004611029565b61070e565b34801561032057600080fd5b5060408051808201909152600581527f737445544800000000000000000000000000000000000000000000000000000060208201526101c7565b6102226103683660046110a0565b61073a565b34801561037957600080fd5b506101fd610388366004610fff565b610745565b34801561039957600080fd5b506101fd6103a8366004610fff565b6107f9565b3480156103b957600080fd5b5061022260035481565b3480156103cf57600080fd5b5061022260025481565b3480156103e557600080fd5b50610222610806565b3480156103fa57600080fd5b506102226104093660046110bb565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b34801561044d57600080fd5b5061027661045c366004610fff565b610811565b34801561046d57600080fd5b5061022261047c3660046110a0565b61081f565b60003334806104f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f5a45524f5f4445504f534954000000000000000000000000000000000000000060448201526064015b60405180910390fd5b60006104fc8261056b565b9050806105065750805b8160036000828254610518919061111d565b909155506105289050838261084a565b61053383838761093b565b61053d8382610992565b949350505050565b60006105523384846109ea565b50600192915050565b600061056660035490565b905090565b60008061057760035490565b9050806105875750600092915050565b6105a48161059e61059760025490565b8690610b52565b90610b5e565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001602090815260408083203384529091528120548281101561066c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f5452414e534645525f414d4f554e545f455843454544535f414c4c4f57414e4360448201527f450000000000000000000000000000000000000000000000000000000000000060648201526084016104e8565b610677858585610b6a565b61068b85336106868487610bef565b6109ea565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916105529185906106869086610bfb565b73ffffffffffffffffffffffffffffffffffffffff81166000908152602081905260408120546107089061070e565b92915050565b60008061071a60025490565b90508061072a5750600092915050565b6105a48161059e61059760035490565b600061070882610481565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156107e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4445435245415345445f414c4c4f57414e43455f42454c4f575f5a45524f000060448201526064016104e8565b6107ef33856106868487610bef565b5060019392505050565b6000610552338484610b6a565b600061056660025490565b61081b8282610c07565b5050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040812054610708565b73ffffffffffffffffffffffffffffffffffffffff82166108c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4d494e545f544f5f5448455f5a45524f5f41444452455353000000000000000060448201526064016104e8565b80600260008282546108d9919061111d565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205461090e9082610bfb565b73ffffffffffffffffffffffffffffffffffffffff90921660009081526020819052604090209190915550565b6040805183815273ffffffffffffffffffffffffffffffffffffffff83811660208301528516917fed8dd430b1e4bba98e943dc5b157cf7b54d9e12916d6c474ff5733a95001d03b910160405180910390a2505050565b73ffffffffffffffffffffffffffffffffffffffff821660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6109d58461070e565b60405190815260200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff8316610a67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f415050524f56455f46524f4d5f5a45524f5f414444524553530000000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff8216610ae4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f415050524f56455f544f5f5a45524f5f4144445245535300000000000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006105a48284611135565b60006105a48284611172565b6000610b758261056b565b9050610b82848483610d64565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610be191815260200190565b60405180910390a350505050565b60006105a482846111ad565b60006105a4828461111d565b73ffffffffffffffffffffffffffffffffffffffff8216610c84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4255524e5f46524f4d5f5448455f5a45524f5f4144445245535300000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205480821115610d14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4255524e5f414d4f554e545f455843454544535f42414c414e4345000000000060448201526064016104e8565b8160026000828254610d2691906111ad565b90915550610d3690508183610bef565b73ffffffffffffffffffffffffffffffffffffffff9093166000908152602081905260409020929092555050565b73ffffffffffffffffffffffffffffffffffffffff8316610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f5452414e534645525f46524f4d5f5448455f5a45524f5f41444452455353000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff8216610e5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f5452414e534645525f544f5f5448455f5a45524f5f414444524553530000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205480821115610eee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5452414e534645525f414d4f554e545f455843454544535f42414c414e43450060448201526064016104e8565b610ef88183610bef565b73ffffffffffffffffffffffffffffffffffffffff8086166000908152602081905260408082209390935590851681522054610f349083610bfb565b73ffffffffffffffffffffffffffffffffffffffff909316600090815260208190526040902092909255505050565b600060208083528351808285015260005b81811015610f9057858101830151858201604001528201610f74565b81811115610fa2576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ffa57600080fd5b919050565b6000806040838503121561101257600080fd5b61101b83610fd6565b946020939093013593505050565b60006020828403121561103b57600080fd5b5035919050565b6000806040838503121561105557600080fd5b50508035926020909101359150565b60008060006060848603121561107957600080fd5b61108284610fd6565b925061109060208501610fd6565b9150604084013590509250925092565b6000602082840312156110b257600080fd5b6105a482610fd6565b600080604083850312156110ce57600080fd5b6110d783610fd6565b91506110e560208401610fd6565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611130576111306110ee565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561116d5761116d6110ee565b500290565b6000826111a8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000828210156111bf576111bf6110ee565b50039056fea2646970667358221220a5b4f31162ba2b8b3424cef84b31ef91d05a825243602b5fdf758ffb49b8246364736f6c634300080a003360a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a003360c06040523480156200001157600080fd5b506040516200170938038062001709833981016040819052620000349162000266565b8351849084906200004d906003906020850190620000f3565b50805162000063906004906020840190620000f3565b505050620000806200007a6200009d60201b60201c565b620000a1565b60ff9091166080526001600160a01b031660a05250620003479050565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b82805462000101906200030a565b90600052602060002090601f01602090048101928262000125576000855562000170565b82601f106200014057805160ff191683800117855562000170565b8280016001018555821562000170579182015b828111156200017057825182559160200191906001019062000153565b506200017e92915062000182565b5090565b5b808211156200017e576000815560010162000183565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c157600080fd5b81516001600160401b0380821115620001de57620001de62000199565b604051601f8301601f19908116603f0116810190828211818310171562000209576200020962000199565b816040528381526020925086838588010111156200022657600080fd5b600091505b838210156200024a57858201830151818301840152908201906200022b565b838211156200025c5760008385830101525b9695505050505050565b600080600080608085870312156200027d57600080fd5b84516001600160401b03808211156200029557600080fd5b620002a388838901620001af565b95506020870151915080821115620002ba57600080fd5b50620002c987828801620001af565b935050604085015160ff81168114620002e157600080fd5b60608601519092506001600160a01b0381168114620002ff57600080fd5b939692955090935050565b600181811c908216806200031f57607f821691505b602082108114156200034157634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05161138e6200037b600039600081816101f70152818161041f0152610600015260006101a2015261138e6000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80636f307dc3116100b257806395d89b4111610081578063a9059cbb11610066578063a9059cbb146102b5578063dd62ed3e146102c8578063f2fde38b1461030e57600080fd5b806395d89b411461029a578063a457c2d7146102a257600080fd5b80636f307dc3146101f257806370a082311461023e578063715018a6146102745780638da5cb5b1461027c57600080fd5b806323b872dd116100ee57806323b872dd14610188578063313ce5671461019b57806339509351146101cc57806340c10f19146101df57600080fd5b806306fdde0314610120578063095ea7b31461013e57806318160ddd146101615780631e9a695014610173575b600080fd5b610128610321565b604051610135919061112d565b60405180910390f35b61015161014c3660046111c9565b6103b3565b6040519015158152602001610135565b6002545b604051908152602001610135565b6101866101813660046111c9565b6103c9565b005b6101516101963660046111f3565b610491565b60405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610135565b6101516101da3660046111c9565b61057c565b6101866101ed3660046111c9565b6105c5565b6102197f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b61016561024c36600461122f565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610186610691565b60055473ffffffffffffffffffffffffffffffffffffffff16610219565b61012861071e565b6101516102b03660046111c9565b61072d565b6101516102c33660046111c9565b610805565b6101656102d6366004611251565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b61018661031c36600461122f565b610812565b60606003805461033090611284565b80601f016020809104026020016040519081016040528092919081815260200182805461035c90611284565b80156103a95780601f1061037e576101008083540402835291602001916103a9565b820191906000526020600020905b81548152906001019060200180831161038c57829003601f168201915b5050505050905090565b60006103c0338484610942565b50600192915050565b6103d33382610af5565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015610468573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048c91906112d8565b505050565b600061049e848484610ce2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6105718533858403610942565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916103c09185906105c0908690611329565b610942565b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906323b872dd906064016020604051808303816000875af115801561065e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068291906112d8565b5061068d8282610f96565b5050565b60055473ffffffffffffffffffffffffffffffffffffffff163314610712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161055b565b61071c60006110b6565b565b60606004805461033090611284565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156107ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161055b565b6107fb3385858403610942565b5060019392505050565b60006103c0338484610ce2565b60055473ffffffffffffffffffffffffffffffffffffffff163314610893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161055b565b73ffffffffffffffffffffffffffffffffffffffff8116610936576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161055b565b61093f816110b6565b50565b73ffffffffffffffffffffffffffffffffffffffff83166109e4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff8216610a87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8216610b98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015610c4e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290610c8a908490611341565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff8216610e28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610ede576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610f22908490611329565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f8891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161055b565b80600260008282546110259190611329565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152602081905260408120805483929061105f908490611329565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208083528351808285015260005b8181101561115a5785810183015185820160400152820161113e565b8181111561116c576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146111c457600080fd5b919050565b600080604083850312156111dc57600080fd5b6111e5836111a0565b946020939093013593505050565b60008060006060848603121561120857600080fd5b611211846111a0565b925061121f602085016111a0565b9150604084013590509250925092565b60006020828403121561124157600080fd5b61124a826111a0565b9392505050565b6000806040838503121561126457600080fd5b61126d836111a0565b915061127b602084016111a0565b90509250929050565b600181811c9082168061129857607f821691505b602082108114156112d2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156112ea57600080fd5b8151801515811461124a57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561133c5761133c6112fa565b500190565b600082821015611353576113536112fa565b50039056fea26469706673582212203a6db30cd3c097921df4156794aa7973eb848711deeb2cffd7c54a9df1fdb0a564736f6c634300080a003360a060405234801561001057600080fd5b506040516106ca3803806106ca83398101604081905261002f9161006c565b60009190915560ff166080526001805460506001600160501b031991821681179092556004805490911690911790554260028190556003556100a2565b6000806040838503121561007f57600080fd5b82519150602083015160ff8116811461009757600080fd5b809150509250929050565b60805161060e6100bc600039600060d3015261060e6000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80639a6fc8f511610081578063d62ada111161005b578063d62ada11146102dc578063f7a30806146102f4578063feaf968c1461030757600080fd5b80639a6fc8f5146101cd578063bd18ad531461023a578063cd653afc1461024d57600080fd5b806354fd4d50116100b257806354fd4d501461012d57806367e8d83d1461013c5780637284e4161461018e57600080fd5b8063313ce567146100ce5780633fd0875f1461010c575b600080fd5b6100f57f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020015b60405180910390f35b6004546a0100000000000000000000900460ff166040516101039190610441565b60405160018152602001610103565b61018c61014a366004610482565b600480549115156c01000000000000000000000000027fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff909216919091179055565b005b604080518082018252600c81527f7072696365206f7261636c6500000000000000000000000000000000000000006020820152905161010391906104ab565b6102036101db36600461053d565b60015460005460025460035460045469ffffffffffffffffffff948516941691939590929450565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610103565b61018c610248366004610558565b61030f565b61018c61025b366004610579565b6001805469ffffffffffffffffffff9586167fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090911617905560029290925560035560048054919092167fffffffffffffffffffffffffffffffffffffffff00ff00000000000000000000909116176b020000000000000000000000179055565b6102e461035f565b6040519015158152602001610103565b61018c6103023660046105bf565b600055565b610203610385565b600480548291907fffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff166b01000000000000000000000083600281111561035757610357610412565b021790555050565b600454600090610380906b010000000000000000000000900460ff166103d6565b905090565b60008060008060006004600c9054906101000a900460ff16156103a757600080fd5b505060015460005460025460035460045469ffffffffffffffffffff9485169893975091955093509190911690565b600060028260028111156103ec576103ec610412565b14156103f757600080fd5b600182600281111561040b5761040b610412565b1492915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016006831061047c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561049457600080fd5b813580151581146104a457600080fd5b9392505050565b600060208083528351808285015260005b818110156104d8578581018301518582016040015282016104bc565b818111156104ea576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803569ffffffffffffffffffff8116811461053857600080fd5b919050565b60006020828403121561054f57600080fd5b6104a48261051e565b60006020828403121561056a57600080fd5b8135600381106104a457600080fd5b6000806000806080858703121561058f57600080fd5b6105988561051e565b935060208501359250604085013591506105b46060860161051e565b905092959194509250565b6000602082840312156105d157600080fd5b503591905056fea264697066735822122014874f7a973b86501c4c1a8be32490fe902c8f088ee234d25f9b2497e19f9e5264736f6c634300080a003360806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d00011790553480156200003a57600080fd5b5060405162031ed638038062031ed68339810160408190526200005d91620015e8565b81816040516200006d9062001595565b604051809103906000f0801580156200008a573d6000803e3d6000fd5b5050600180546001600160a01b0319166001600160a01b038416908117909155604080516325abd85f60e11b81529051634b57b0be916004808201926020929091908290030181865afa158015620000e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200010c91906200162a565b73c4375b7de8af5a38a93548eb8453a498222c4ff26040516200012f90620015a3565b6001600160a01b03928316815291166020820152604001604051809103906000f08015801562000163573d6000803e3d6000fd5b50600380546001600160a01b0319166001600160a01b039290921691821790556040805163de28735960e01b8152905163de287359916004808201926020929091908290030181865afa158015620001bf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e591906200162a565b604051634910832f60e01b81527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526001600160a01b039190911690634910832f90602401600060405180830381600087803b1580156200023d57600080fd5b505af115801562000252573d6000803e3d6000fd5b50505050600360009054906101000a90046001600160a01b03166001600160a01b031663de2873596040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d091906200162a565b60035460405163f2fde38b60e01b81526001600160a01b03918216600482015291169063f2fde38b90602401600060405180830381600087803b1580156200031757600080fd5b505af11580156200032c573d6000803e3d6000fd5b505060035460015460408051636ca42ae360e01b815290516001600160a01b039384169550638874ff1f94509190921691636ca42ae39160048083019260009291908290030181865afa15801562000388573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620003b29190810190620016c5565b6040518263ffffffff1660e01b8152600401620003d09190620017b6565b600060405180830381600087803b158015620003eb57600080fd5b505af115801562000400573d6000803e3d6000fd5b50505050600360009054906101000a90046001600160a01b03166001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000458573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200047e91906200162a565b600280546001600160a01b0319166001600160a01b039290921691821790556040805163120d150d60e31b81529051639068a868916004808201926020929091908290030181865afa158015620004d9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004ff91906200162a565b600480546001600160a01b0319166001600160a01b0392831617815560025460408051631f94a27560e31b81529051919093169263fca513a892818101926020929091908290030181865afa1580156200055d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200058391906200162a565b600880546001600160a01b0319166001600160a01b0392831617905560025460408051630873769560e01b81529051919092169163087376959160048083019260209291908290030181865afa158015620005e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200060891906200162a565b600780546001600160a01b0319166001600160a01b039283161790556002546040805163c513c9bb60e01b81529051919092169163c513c9bb9160048083019260209291908290030181865afa15801562000667573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200068d91906200162a565b600680546001600160a01b0319166001600160a01b039283161790556001546040516367b4264560e01b81529116906367b4264590620006d29084906004016200184d565b602060405180830381865afa158015620006f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200071691906200162a565b600980546001600160a01b0319166001600160a01b0392831617905560035460408051630a55006360e21b815290519190921691632954018c9160048083019260209291908290030181865afa15801562000775573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200079b91906200162a565b6009546040516001600160a01b0390911690620007b890620015b2565b6001600160a01b03928316815291166020820152604001604051809103906000f080158015620007ec573d6000803e3d6000fd5b50600580546001600160a01b0319166001600160a01b039283169081179091556001549091169063eebab8ef90839062000825620011ec565b6200083290600a62001879565b6040518463ffffffff1660e01b815260040162000852939291906200189b565b600060405180830381600087803b1580156200086d57600080fd5b505af115801562000882573d6000803e3d6000fd5b505060065460055460405163d914cd4b60e01b81526001600160a01b0391821660048201529116925063d914cd4b9150602401600060405180830381600087803b158015620008d057600080fd5b505af1158015620008e5573d6000803e3d6000fd5b5050600f80546001600160801b031916670de0b6b3a76400001790555062000911925050620011ec9050565b6200091e90600a62001879565b600f80546001600160801b03908116600160801b9382168402818117938490556040805160a0810182529184169092178152939092041660208301526000919081016200096b84620012ab565b815260006020820181905260409182018190526005549151929350916001600160a01b039091169083908390620009a290620015c0565b620009b093929190620018c5565b604051809103906000f080158015620009cd573d6000803e3d6000fd5b509050806001600160a01b031663c12c21c06040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a0f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a3591906200162a565b600b60006101000a8154816001600160a01b0302191690836001600160a01b03160217905550806001600160a01b0316632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a9a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ac091906200162a565b600c60006101000a8154816001600160a01b0302191690836001600160a01b03160217905550806001600160a01b031663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000b25573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b4b91906200162a565b600d80546001600160a01b0319166001600160a01b03928316179055600654600b5460405163e26b2f6360e01b8152908316600482015291169063e26b2f6390602401600060405180830381600087803b15801562000ba957600080fd5b505af115801562000bbe573d6000803e3d6000fd5b5050600054600554604080516318caf8e360e31b81526001600160a01b039283166004808301919091526024820192909252604481019190915263141bdbdb60e21b60648201526201000090920416925063c657c7189150608401600060405180830381600087803b15801562000c3457600080fd5b505af115801562000c49573d6000803e3d6000fd5b5050600054600c8054604080516318caf8e360e31b81526001600160a01b039283166004820152602481019190915260448101929092526b43726564697446616361646560a01b606483015262010000909204909116925063c657c7189150608401600060405180830381600087803b15801562000cc657600080fd5b505af115801562000cdb573d6000803e3d6000fd5b5050600054600b54604080516318caf8e360e31b81526001600160a01b0392831660048201526024810191909152600d60448201526c21b932b234ba26b0b730b3b2b960991b60648201526201000090920416925063c657c7189150608401600060405180830381600087803b15801562000d5557600080fd5b505af115801562000d6a573d6000803e3d6000fd5b5050600054600d54604080516318caf8e360e31b81526001600160a01b0392831660048201526024810191909152601260448201527121b932b234ba21b7b73334b3bab930ba37b960711b60648201526201000090920416925063c657c7189150608401600060405180830381600087803b15801562000de957600080fd5b505af115801562000dfe573d6000803e3d6000fd5b50506001546001600160a01b0316915063eebab8ef90508473f39fd6e51aad88f6f4ce6ab8827279cfffb9226662000e35620011ec565b6040518463ffffffff1660e01b815260040162000e55939291906200189b565b600060405180830381600087803b15801562000e7057600080fd5b505af115801562000e85573d6000803e3d6000fd5b50506001546001600160a01b0316915063eebab8ef9050847390f79bf6eb2c4f870365e785982e1f101e93b90662000ebc620011ec565b6040518463ffffffff1660e01b815260040162000edc939291906200189b565b600060405180830381600087803b15801562000ef757600080fd5b505af115801562000f0c573d6000803e3d6000fd5b505060005460405163ca669fa760e01b815273f39fd6e51aad88f6f4ce6ab8827279cfffb922666004820152620100009091046001600160a01b0316925063ca669fa79150602401600060405180830381600087803b15801562000f6f57600080fd5b505af115801562000f84573d6000803e3d6000fd5b5050600954600b5460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529116925063095ea7b391506044016020604051808303816000875af115801562000fdf573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001005919062001989565b5060005460405163ca669fa760e01b81527390f79bf6eb2c4f870365e785982e1f101e93b9066004820152620100009091046001600160a01b03169063ca669fa790602401600060405180830381600087803b1580156200106557600080fd5b505af11580156200107a573d6000803e3d6000fd5b5050600954600b5460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529116925063095ea7b391506044016020604051808303816000875af1158015620010d5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010fb919062001989565b5060025460405163f2fde38b60e01b81527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526001600160a01b039091169063f2fde38b90602401600060405180830381600087803b1580156200115657600080fd5b505af11580156200116b573d6000803e3d6000fd5b505060075460405163f2fde38b60e01b81527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b158015620011c957600080fd5b505af1158015620011de573d6000803e3d6000fd5b5050505050505050620019e1565b600180546040516367b4264560e01b81526000926001600160a01b03909216916367b42645916200122191906004016200184d565b602060405180830381865afa1580156200123f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200126591906200162a565b6009546001600160a01b03908116911614620012955762001290670de0b6b3a764000060c862001879565b905090565b62001290670de0b6b3a7640000614e2062001879565b6040805160c08101825260026080820190815261232860a08301528152815180830183526005815261226060208281019190915282015281518083018352606092600092919082019080600387600a8111156200130c576200130c62001814565b146200131a5760036200131d565b60015b600a81111562001331576200133162001814565b815261206c6020918201529082526040805180820190915260048152611c84818301529101529050612454600a6000858281111562001374576200137462001814565b600a81111562001388576200138862001814565b815260208101919091526040908101600020805461ffff9390931661ffff19909316929092179091558051600480825260a0820190925281816020015b6040805180820190915260008082526020820152815260200190600190039081620013c557905050925060005b818110156200158d57828160048110620014105762001410620019ad565b602002015160200151600a6000858460048110620014325762001432620019ad565b602002015151600a8111156200144c576200144c62001814565b600a81111562001460576200146062001814565b815260208101919091526040908101600020805461ffff191661ffff9390931692909217909155805180820190915260015481906001600160a01b03166367b42645868560048110620014b757620014b7620019ad565b6020020151516040516001600160e01b031960e084901b168152620014e091906004016200184d565b602060405180830381865afa158015620014fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200152491906200162a565b6001600160a01b03168152602001848360048110620015475762001547620019ad565b60200201516020015161ffff168152508482815181106200156c576200156c620019ad565b602002602001018190525080806200158490620019c3565b915050620013f2565b505050919050565b6105e6806200bc5283390190565b62011105806200c23883390190565b6110a7806201d33d83390190565b62013af2806201e3e483390190565b6001600160a01b0381168114620015e557600080fd5b50565b60008060408385031215620015fc57600080fd5b82516200160981620015cf565b6020840151909250600b81106200161f57600080fd5b809150509250929050565b6000602082840312156200163d57600080fd5b81516200164a81620015cf565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156200168c576200168c62001651565b60405290565b604051601f8201601f191681016001600160401b0381118282101715620016bd57620016bd62001651565b604052919050565b60006020808385031215620016d957600080fd5b82516001600160401b0380821115620016f157600080fd5b818501915085601f8301126200170657600080fd5b8151818111156200171b576200171b62001651565b6200172b848260051b0162001692565b818152848101925060069190911b8301840190878211156200174c57600080fd5b928401925b81841015620017ab57604084890312156200176c5760008081fd5b6200177662001667565b84516200178381620015cf565b8152848601516200179481620015cf565b818701528352604093909301929184019162001751565b979650505050505050565b602080825282518282018190526000919060409081850190868401855b828110156200180757815180516001600160a01b0390811686529087015116868501529284019290850190600101620017d3565b5091979650505050505050565b634e487b7160e01b600052602160045260246000fd5b600b81106200184957634e487b7160e01b600052602160045260246000fd5b9052565b602081016200185d82846200182a565b92915050565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161562001896576200189662001863565b500290565b60608101620018ab82866200182a565b6001600160a01b0393909316602082015260400152919050565b6001600160a01b0384811682526060602080840182905285516001600160801b039081169285019290925285810151909116608084015260408086015160a085810152805161010086018190526000949392918301919085906101208801905b808310156200195657845180518816835286015161ffff168683015293850193600192909201919083019062001925565b5060608a01516001600160a01b031660c0890152608090990151151560e088015250909401949094525092949350505050565b6000602082840312156200199c57600080fd5b815180151581146200164a57600080fd5b634e487b7160e01b600052603260045260246000fd5b6000600019821415620019da57620019da62001863565b5060010190565b61a26180620019f16000396000f3fe60806040523480156200001157600080fd5b5060043610620001ad5760003560e01c806362eb33e311620000f5578063ba414fa61162000097578063de287359116200006e578063de2873591462000479578063f9aa028a146200049a578063fa7626d414620004bb57600080fd5b8063ba414fa6146200041c578063c12c21c01462000437578063d46b9330146200045857600080fd5b80637785ff5d11620000cc5780637785ff5d14620003da5780639408b63f14620003e45780639dd55b45146200040557600080fd5b806362eb33e314620003775780636b70b04c14620003985780636f307dc314620003b957600080fd5b80632f7a1881116200015f5780635e813a8b11620001365780635e813a8b146200030c5780635f7c9bd0146200032d57806362186905146200034657600080fd5b80632f7a188114620002be578063406c8e2f14620002df57806354cae56e146200030057600080fd5b80630e42bc5d11620001945780630e42bc5d14620002305780632630c12f14620002565780632954018c146200029d57600080fd5b80630bc772da14620001b25780630c75f80614620001f5575b600080fd5b600f54620001cf906fffffffffffffffffffffffffffffffff1681565b6040516fffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6200021c62000206366004620012dd565b600a6020526000908152604090205461ffff1681565b60405161ffff9091168152602001620001ec565b6200024762000241366004620012dd565b620004c9565b604051620001ec919062001307565b600854620002779073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001620001ec565b600254620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600c54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600154620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200030a6200081f565b005b600454620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200033762000b1a565b604051908152602001620001ec565b600f54620001cf9070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681565b600654620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600554620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600954620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200030a62000c0c565b600e54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200030a6200041636600462001398565b62000fd6565b6200042662001149565b6040519015158152602001620001ec565b600b54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600354620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600754620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600d54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600054620004269060ff1681565b6040805160c08101825260026080820190815261232860a08301528152815180830183526005815261226060208281019190915282015281518083018352606092600092919082019080600387600a8111156200052a576200052a620013c7565b14620005385760036200053b565b60015b600a8111156200054f576200054f620013c7565b815261206c6020918201529082526040805180820190915260048152611c84818301529101529050612454600a60008582811115620005925762000592620013c7565b600a811115620005a657620005a6620013c7565b815260208101919091526040908101600020805461ffff939093167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909316929092179091558051600480825260a0820190925281816020015b60408051808201909152600080825260208201528152602001906001900390816200060057905050925060005b8181101562000817578281600481106200064b576200064b620013f6565b602002015160200151600a60008584600481106200066d576200066d620013f6565b602002015151600a811115620006875762000687620013c7565b600a8111156200069b576200069b620013c7565b81526020810191909152604090810160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff93909316929092179091558051808201909152600154819073ffffffffffffffffffffffffffffffffffffffff166367b426458685600481106200071c576200071c620013f6565b6020020151516040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526200075d919060040162001425565b602060405180830381865afa1580156200077b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007a1919062001467565b73ffffffffffffffffffffffffffffffffffffffff168152602001848360048110620007d157620007d1620013f6565b60200201516020015161ffff16815250848281518110620007f657620007f6620013f6565b602002602001018190525080806200080e90620014b6565b9150506200062d565b505050919050565b6000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16906306447d5690602401600060405180830381600087803b158015620008a457600080fd5b505af1158015620008b9573d6000803e3d6000fd5b5050600b5460405173ffffffffffffffffffffffffffffffffffffffff909116925060009150600190620008ed90620012b3565b73ffffffffffffffffffffffffffffffffffffffff938416815292909116602083015215156040820152606001604051809103906000f08015801562000937573d6000803e3d6000fd5b50600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316908117909155600d546040517f526a41e80000000000000000000000000000000000000000000000000000000081526004810192909252600160248301529091169063526a41e890604401600060405180830381600087803b158015620009dc57600080fd5b505af1158015620009f1573d6000803e3d6000fd5b5050600d5473ffffffffffffffffffffffffffffffffffffffff16915063eb9606df905062000a22426001620014f2565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815264ffffffffff90911660048201526024015b600060405180830381600087803b15801562000a7b57600080fd5b505af115801562000a90573d6000803e3d6000fd5b50505050600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562000aff57600080fd5b505af115801562000b14573d6000803e3d6000fd5b50505050565b600180546040517f67b4264500000000000000000000000000000000000000000000000000000000815260009273ffffffffffffffffffffffffffffffffffffffff909216916367b426459162000b75919060040162001425565b602060405180830381865afa15801562000b93573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000bb9919062001467565b60095473ffffffffffffffffffffffffffffffffffffffff90811691161462000bf65762000bf1670de0b6b3a764000060c86200150d565b905090565b62000bf1670de0b6b3a7640000614e206200150d565b60025460405173ffffffffffffffffffffffffffffffffffffffff9091169062000c3690620012c1565b73ffffffffffffffffffffffffffffffffffffffff90911681526060602082018190526008908201527f446567656e4e4654000000000000000000000000000000000000000000000000608082015260a060408201819052600a908201527f476561722d446567656e0000000000000000000000000000000000000000000060c082015260e001604051809103906000f08015801562000cda573d6000803e3d6000fd5b50600e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283161790556000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015262010000909104909116906306447d5690602401600060405180830381600087803b15801562000d8e57600080fd5b505af115801562000da3573d6000803e3d6000fd5b5050600e546040517ffca3b5aa0000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff909116925063fca3b5aa9150602401600060405180830381600087803b15801562000e2757600080fd5b505af115801562000e3c573d6000803e3d6000fd5b5050600b54600e5460405173ffffffffffffffffffffffffffffffffffffffff92831694509116915060009062000e7390620012b3565b73ffffffffffffffffffffffffffffffffffffffff938416815292909116602083015215156040820152606001604051809103906000f08015801562000ebd573d6000803e3d6000fd5b50600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316908117909155600d546040517f526a41e80000000000000000000000000000000000000000000000000000000081526004810192909252600160248301529091169063526a41e890604401600060405180830381600087803b15801562000f6257600080fd5b505af115801562000f77573d6000803e3d6000fd5b5050600e54600c546040517f4610f6ac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015291169250634610f6ac915060240162000a60565b600081600860405162000fe990620012cf565b91825260ff166020820152604001604051809103906000f08015801562001014573d6000803e3d6000fd5b506000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291925062010000900473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b1580156200109c57600080fd5b505af1158015620010b1573d6000803e3d6000fd5b50506008546040517fe8a97a3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528581166024830152909116925063e8a97a3e9150604401600060405180830381600087803b1580156200112b57600080fd5b505af115801562001140573d6000803e3d6000fd5b50505050505050565b60008054610100900460ff16156200116a5750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620012ae5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000008284015282518083038401815260608301909352600092909162001212917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016200158b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526200124c91620015c9565b6000604051808303816000865af19150503d80600081146200128b576040519150601f19603f3d011682016040523d82523d6000602084013e62001290565b606091505b5091505080806020019051810190620012aa9190620015d7565b9150505b919050565b615e9780620015fc83390190565b6126cf806200749383390190565b6106ca8062009b6283390190565b600060208284031215620012f057600080fd5b8135600b81106200130057600080fd5b9392505050565b602080825282518282018190526000919060409081850190868401855b8281101562001365578151805173ffffffffffffffffffffffffffffffffffffffff16855286015161ffff1686850152928401929085019060010162001324565b5091979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff811681146200139557600080fd5b50565b60008060408385031215620013ac57600080fd5b8235620013b98162001372565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60208101600b831062001461577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000602082840312156200147a57600080fd5b8151620013008162001372565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415620014eb57620014eb62001487565b5060010190565b6000821982111562001508576200150862001487565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562001548576200154862001487565b500290565b6000815160005b8181101562001570576020818501810151868301520162001554565b8181111562001580576000828601525b509290920192915050565b7fffffffff00000000000000000000000000000000000000000000000000000000831681526000620015c160048301846200154d565b949350505050565b60006200130082846200154d565b600060208284031215620015ea57600080fd5b815180151581146200130057600080fdfe6101406040523480156200001257600080fd5b5060405162005e9738038062005e97833981016040819052620000359162000198565b60016000556001600160a01b0383166200006257604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038316608081905260408051636f307dc360e01b81529051636f307dc3916004808201926020929091908290030181865afa158015620000ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d39190620001ea565b6001600160a01b031660a0816001600160a01b031681525050826001600160a01b0316634f0e0ef36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200012b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001519190620001ea565b6001600160a01b0390811660c0529190911660e0819052151561010052151561012052506200020f565b80516001600160a01b03811681146200019357600080fd5b919050565b600080600060608486031215620001ae57600080fd5b620001b9846200017b565b9250620001c9602085016200017b565b915060408401518015158114620001df57600080fd5b809150509250925092565b600060208284031215620001fd57600080fd5b62000208826200017b565b9392505050565b60805160a05160c05160e0516101005161012051615a86620004116000396000818161061101528181612fb5015261481f01526000818161031701528181610dde015281816144f901526146e5015260008181610557015281816146a901526147a901526000818161034b0152818161387d015261392d01526000818161047301528181611bfe0152818161274f0152818161280d0152818161366a01526137dd015260008181610665015281816109d801528181610b0301528181610bd501528181610cdd01528181610e6501528181610fe30152818161114e0152818161120e0152818161132e015281816114510152818161162b01528181611708015281816117e0015281816119e501528181611b1201528181611d9501528181611ed5015281816120040152818161216801528181612290015281816123c601528181612568015281816126390152818161266f0152818161293d01528181612a2101528181612a8a01528181612bde01528181612d2601528181612e6801528181612ec2015281816130a10152818161311b015281816131b401528181613341015281816134c10152818161358a0152818161372f01528181613a1a01528181613b2e01528181613dbb015281816142200152818161432801528181614492015281816148e7015281816149e801528181614aae0152614d8f0152615a866000f3fe6080604052600436106102695760003560e01c8063860aefcf11610153578063c7de38a6116100cb578063dfd594651161007f578063eb9606df11610064578063eb9606df1461081e578063f9eaee0d1461083e578063ffd9b9071461085e57600080fd5b8063dfd59465146107de578063e1f21c67146107fe57600080fd5b8063cff0ab96116100b0578063cff0ab96146106ef578063d9ccbec114610783578063dcf65482146107be57600080fd5b8063c7de38a6146106a7578063caa5c23f146106dc57600080fd5b80639c55a05411610122578063b55bb84b11610107578063b55bb84b14610633578063c12c21c014610653578063c690908a1461068757600080fd5b80639c55a054146105df578063b1836d32146105ff57600080fd5b8063860aefcf146104db5780639408b63f146105455780639b67ab30146105795780639be0536a146105bd57600080fd5b80635d91a0e0116101e65780636d19b486116101b55780637071b7c51161019a5780637071b7c51461049557806379c0ef91146104a857806382871ace146104c857600080fd5b80636d19b486146104415780636f307dc31461046157600080fd5b80635d91a0e0146103e85780635f73fbec146103fb578063601d66f61461040e5780636c8f225d1461042e57600080fd5b80633d9287fa1161023d5780635019e20a116102225780635019e20a1461039257806354fd4d50146103b257806359781034146103d557600080fd5b80633d9287fa146103055780634f0e0ef31461033957600080fd5b8062842b571461026e578063256ac915146102905780632a7ba1f7146102c55780632b7c7b11146102e5575b600080fd5b34801561027a57600080fd5b5061028e6102893660046151bf565b61087e565b005b34801561029c57600080fd5b506102b06102ab3660046151f8565b61098e565b60405190151581526020015b60405180910390f35b3480156102d157600080fd5b5061028e6102e0366004615215565b610a61565b3480156102f157600080fd5b5061028e610300366004615215565b610c3b565b34801561031157600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561034557600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102bc565b34801561039e57600080fd5b5061028e6103ad3660046151f8565b610d6a565b3480156103be57600080fd5b506103c7600281565b6040519081526020016102bc565b61028e6103e336600461522e565b61108c565b61028e6103f63660046152bb565b611275565b61028e610409366004615340565b611589565b34801561041a57600080fd5b5061028e6104293660046153d8565b6117de565b61028e61043c36600461541b565b611900565b34801561044d57600080fd5b506102b061045c3660046151f8565b611c31565b34801561046d57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b61028e6104a336600461546e565b611c60565b3480156104b457600080fd5b5061036d6104c3366004615215565b611f3e565b61028e6104d63660046152bb565b611f4b565b3480156104e757600080fd5b5060025461051c906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041682565b604080516fffffffffffffffffffffffffffffffff9384168152929091166020830152016102bc565b34801561055157600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561058557600080fd5b506004546040805167ffffffffffffffff608084901c1681526fffffffffffffffffffffffffffffffff9092166020830152016102bc565b3480156105c957600080fd5b506105d261227d565b6040516102bc91906154e2565b3480156105eb57600080fd5b5061028e6105fa36600461553c565b61228e565b34801561060b57600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561063f57600080fd5b5061028e61064e3660046151f8565b6123c4565b34801561065f57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561069357600080fd5b5061028e6106a23660046151f8565b6124c6565b3480156106b357600080fd5b506106c76106c23660046151f8565b612668565b604080519283526020830191909152016102bc565b61028e6106ea366004615557565b61289b565b3480156106fb57600080fd5b5060015461074e906fffffffffffffffffffffffffffffffff811690700100000000000000000000000000000000810460ff169071010000000000000000000000000000000000900464ffffffffff1683565b604080516fffffffffffffffffffffffffffffffff9094168452911515602084015264ffffffffff16908201526060016102bc565b34801561078f57600080fd5b506102b061079e366004615599565b600360209081526000928352604080842090915290825290205460ff1681565b3480156107ca57600080fd5b5061028e6107d93660046151f8565b612a88565b3480156107ea57600080fd5b506103c76107f93660046151f8565b612b86565b34801561080a57600080fd5b5061028e61081936600461522e565b612c6d565b34801561082a57600080fd5b5061028e6108393660046155c7565b612ec0565b34801561084a57600080fd5b506102b06108593660046151f8565b613057565b34801561086a57600080fd5b5061028e6108793660046155ee565b6131b2565b600260005414156108f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b6002600090815573ffffffffffffffffffffffffffffffffffffffff8316808252600360209081526040808420338086529083529381902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081527f9b3258bc4904fd6426b99843e206c6c7cdb1fd0f040121c25b71dafbb3851ee0910160405180910390a350506001600055565b6040517f055ee9b500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063055ee9b590602401602060405180830381865afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a43919061560b565b73ffffffffffffffffffffffffffffffffffffffff16141592915050565b60026000541415610ace576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610b5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b83919061560b565b9050610b903382846132eb565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906395373018906024015b600060405180830381600087803b158015610c1a57600080fd5b505af1158015610c2e573d6000803e3d6000fd5b5050600160005550505050565b60026000541415610ca8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610d39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5d919061560b565b9050610b90338284613411565b60026000541415610dd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000557f000000000000000000000000000000000000000000000000000000000000000015610e34576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610ec1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee5919061560b565b33600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915290205490915060ff16610f52576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f5d82613583565b5090508015610f98576040517ff713841e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b15801561102757600080fd5b505af115801561103b573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692503391507f93c70cc9715bef0d83edf2095f3595402279d274f402a73ffc17f1bcb19d863d90600090a35050600160005550565b600260005414156110f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611106613875565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063e958b70490602401602060405180830381865afa158015611197573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bb919061560b565b90506111c9848285856139b7565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401600060405180830381600087803b15801561125257600080fd5b505af1158015611266573d6000803e3d6000fd5b50506001600055505050505050565b600260005414156112e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611375573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611399919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166113e8576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806113f483613583565b915091508161142f576040517f1fdd676f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611437613875565b831561144d5761144d85858b8660016000613ae3565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632362a2d88b600185338e8e8e6040518863ffffffff1660e01b81526004016114b59796959493929190615663565b6020604051808303816000875af11580156114d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f891906156bf565b90508873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f7dfecd8419723a9d3954585a30c2a270165d70aafa146c11c1e1b88ae14390648460405161157091815260200190565b60405180910390a4505060016000555050505050505050565b600260005414156115f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ab919061560b565b90506116b5613875565b81156116cb576116cb8383338460016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d89061174a903390600090819083908d908d908d90600401615663565b6020604051808303816000875af1158015611769573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178d91906156bf565b5060405173ffffffffffffffffffffffffffffffffffffffff87169033907f460ad03b1cf79b1d64d3aefa28475f110ab66e84649c52bb41ed796b9b39198190600090a35050600160005550505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611849573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118d1576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff90811670010000000000000000000000000000000002911617600255565b6002600054141561196d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000908155606461198461ffff851687615707565b61198e9190615744565b9050611999816144f7565b6119a2816145e8565b6119ab84614668565b6119b3613875565b6040517f172c48c7000000000000000000000000000000000000000000000000000000008152600060048201819052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a64919061577f565b61ffff169150611a789050816127106157ae565b611a829083615707565b611a8c8288615707565b11611ac3576040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff86811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611b5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b81919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638587604051611bef92919091825261ffff16602082015260400190565b60405180910390a3611c2386827f00000000000000000000000000000000000000000000000000000000000000008a6139b7565b505060016000555050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526006602052604081205415155b92915050565b60026000541415611ccd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611cdb856144f7565b611ce484614668565b611ced856145e8565b600154700100000000000000000000000000000000900460ff1615611d3e576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d46613875565b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff85811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611de0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e04919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638885604051611e7292919091825261ffff16602082015260400190565b60405180910390a38215611e9057611e908484878460006001613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015611f1957600080fd5b505af1158015611f2d573d6000803e3d6000fd5b505060016000555050505050505050565b6000611c5a60058361480f565b60026000541415611fb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa15801561204b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206f919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166120be576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120c661481b565b6120fc576040517f7e52ccb400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061210782612668565b509050612112613875565b82156121285761212884848a8560016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d8906121aa908c90600290879033908f908f908f90600401615663565b6020604051808303816000875af11580156121c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ed91906156bf565b90508773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167ffada13ff2d5e1a1d9da37ad4a4130893b34e3c69c32b17f87ec31fd661b867078460405161226591815260200190565b60405180910390a45050600160005550505050505050565b6060612289600561486b565b905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612381576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561242f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612453919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146124b7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614878565b5050565b60026000541415612533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156125c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e8919061560b565b90506125f4818361489a565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401610c00565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126fc919061560b565b905060008061270b8387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156127a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127c991906156bf565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015291965061271091851690637afb010490604401602060405180830381865afa158015612863573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061288791906156bf565b6128919190615744565b9350505050915091565b60026000541415612908576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129bd919061560b565b90506129c7613875565b8115612a7e576129dc83833384600080613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015612a6557600080fd5b505af1158015612a79573d6000803e3d6000fd5b505050505b5050600160005550565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612af3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b17919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b7b576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614c92565b600080612b9283612668565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152919350600092507f000000000000000000000000000000000000000000000000000000000000000090911690633192195c906024016040805180830381865afa158015612c26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4a91906157c5565b9150819050612c5b61271084615707565b612c659190615744565b949350505050565b60026000541415612cda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063fdd5764590602401602060405180830381865afa158015612d6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d91919061560b565b73ffffffffffffffffffffffffffffffffffffffff161480612dd7575073ffffffffffffffffffffffffffffffffffffffff831660009081526006602052604090205415155b15612e0e576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612eac57600080fd5b505af1158015611c23573d6000803e3d6000fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f4f919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612fb3576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000061300a576040517f50dd11fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805464ffffffffff90921671010000000000000000000000000000000000027fffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffffff909216919091179055565b6040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063f67c5bd090602401602060405180830381865afa1580156130e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061310c91906156bf565b905080158015906131ab5750807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015613184573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a891906156bf565b16155b9392505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561321d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613241919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146132a5576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018054911515700100000000000000000000000000000000027fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff909216919091179055565b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600060448301819052917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561338c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133b091906156bf565b90506133bb816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f98274bf834d179ee08dc0604071b0dc90b54731bd5f725a5a96a39a86bce025a8360405161340391815260200190565b60405180910390a250505050565b61341a816144f7565b600154700100000000000000000000000000000000900460ff161561346b576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600160448301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561350c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061353091906156bf565b905061353b816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f9cac51154cc0d835e2f9c9d1f59a9344588cee107f4203bf58a8c797e3a58c458360405161340391815260200190565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613617919061560b565b90506000806136268387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156136c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136e491906156bf565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529195506000917f00000000000000000000000000000000000000000000000000000000000000001690633192195c906024016040805180830381865afa158015613775573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061379991906157c5565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350600092506127109187169063f9a6503090604401602060405180830381865afa158015613837573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061385b91906156bf565b6138659190615707565b9092109794965093945050505050565b34156139b5577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156138e357600080fd5b505af11580156138f7573d6000803e3d6000fd5b50506040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201523460248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16935063a9059cbb925060440190506020604051808303816000875af115801561398f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139b391906157e9565b505b565b6139c084614cb4565b6040517f830aa74500000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f0000000000000000000000000000000000000000000000000000000000000000169063830aa74590608401600060405180830381600087803b158015613a5e57600080fd5b505af1158015613a72573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fa32435755c235de2976ed44a75a2f85cb01faf0c894f639fe0c32bb9455fea8f83604051613ad591815260200190565b60405180910390a350505050565b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301523060248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b158015613b7257600080fd5b505af1158015613b86573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff871692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a28460005b8181101561441d5736888883818110613bea57613bea615806565b9050602002810190613bfc9190615835565b90506004613c0d6020830183615873565b90501015613c47576040517fe2b0e50600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b30613c5560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16141561421c578415613ca9576040517f5fb9107f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613cb86020830183615873565b613cc1916158d8565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167f59781034000000000000000000000000000000000000000000000000000000001415613e3c5760008080613d1e6020860186615873565b613d2c916004908290615920565b810190613d39919061522e565b925092509250613e34838c73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614613e2b576040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015613e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e26919061560b565b613e2d565b8b5b84846139b7565b505050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2b7c7b11000000000000000000000000000000000000000000000000000000001415613ec757600194506000613e996020840184615873565b613ea7916004908290615920565b810190613eb49190615215565b9050613ec1898983613411565b50614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2a7ba1f7000000000000000000000000000000000000000000000000000000001415613f80578415613f49576040517fc0b0caa800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613f586020840184615873565b613f66916004908290615920565b810190613f739190615215565b9050613ec18989836132eb565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f233a8caa0000000000000000000000000000000000000000000000000000000014156140e457600080613fda6020850185615873565b613fe8916004908290615920565b810190613ff5919061594a565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c8116600483015292945090925082918416906370a0823190602401602060405180830381865afa158015614069573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061408d91906156bf565b10156140dd576040517fa5ac537300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016108e7565b5050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fc690908a00000000000000000000000000000000000000000000000000000000141561416457600061413d6020840184615873565b61414b916004908290615920565b81019061415891906151f8565b9050613ec1888261489a565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f23e27a640000000000000000000000000000000000000000000000000000000014156141e45760006141bd6020840184615873565b6141cb916004908290615920565b8101906141d891906151f8565b9050613ec18882614d42565b6040517f1e9e7e7a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50614414565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff68754361426760208501856151f8565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156142d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142f4919061560b565b73ffffffffffffffffffffffffffffffffffffffff16148061436d575073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001661435560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16145b156143a4576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6144126143b46020830183615873565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506143f69250505060208401846151f8565b73ffffffffffffffffffffffffffffffffffffffff1690614e39565b505b50600101613bcf565b506040517f60c8e8938c9a0c0d88a98d6f1c562ce68077e12bf3edb8047378f2f736cb45b490600090a16040517fe1998cf900000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff86811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b1580156144d657600080fd5b505af11580156144ea573d6000803e3d6000fd5b5050505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006139b3576001546fffffffffffffffffffffffffffffffff9081169081146124c257600454608081901c906fffffffffffffffffffffffffffffffff16600067ffffffffffffffff8316431461456e578461458a565b61458a6fffffffffffffffffffffffffffffffff831686615976565b9050838111156145c6576040517f675f1a5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff81164360801b176004555050505050565b6002546fffffffffffffffffffffffffffffffff16811080614631575060025470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681115b156139b3576040517fce16799400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61467061481b565b156146a7576040517f63fc31c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1615614806577f0000000000000000000000000000000000000000000000000000000000000000801561472657503373ffffffffffffffffffffffffffffffffffffffff821614155b1561475d576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600160248301527f00000000000000000000000000000000000000000000000000000000000000001690639dc29fac90604401600060405180830381600087803b1580156147ed57600080fd5b505af1158015614801573d6000803e3d6000fd5b505050505b6139b381614cb4565b60006131ab8383614e7b565b60007f0000000000000000000000000000000000000000000000000000000000000000801561228957505060015471010000000000000000000000000000000000900464ffffffffff1642101590565b606060006131ab83614ea5565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f01565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561492b57600080fd5b505af115801561493f573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527fdf498aa1c340e992665d6fb4f3be8436d452c45a630cb6d7fab7963da39bac8793500190505b60405180910390a15050565b6040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600091829160019183917f00000000000000000000000000000000000000000000000000000000000000001690638991b2f190602401602060405180830381865afa158015614a2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a5391906156bf565b90505b808211614c895780821615614c7d576040517fe75538c700000000000000000000000000000000000000000000000000000000815260048101839052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e75538c7906024016040805180830381865afa158015614af4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b18919061577f565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529294509092506000918416906370a0823190602401602060405180830381865afa158015614b8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bb191906156bf565b90506001811115614c79576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff8481166024830152600091908b169063f9a6503090604401602060405180830381865afa158015614c33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c5791906156bf565b978801979050614c6b61ffff841682615707565b614c759088615976565b9650505b5050505b600182901b9150614a56565b50509250929050565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f50565b3373ffffffffffffffffffffffffffffffffffffffff821614801590614d0b575033600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16155b156139b3576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b158015614dd357600080fd5b505af1158015614de7573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527f69db9e9764da61b6681b89fb0f5be018506e0342036e56b59c3015a620d60977935001905061498d565b60606131ab83836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250615043565b6000826000018281548110614e9257614e92615806565b9060005260206000200154905092915050565b606081600001805480602002602001604051908101604052809291908181526020018280548015614ef557602002820191906000526020600020905b815481526020019060010190808311614ee1575b50505050509050919050565b6000818152600183016020526040812054614f4857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611c5a565b506000611c5a565b60008181526001830160205260408120548015615039576000614f746001836157ae565b8554909150600090614f88906001906157ae565b9050818114614fed576000866000018281548110614fa857614fa8615806565b9060005260206000200154905080876000018481548110614fcb57614fcb615806565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080614ffe57614ffe61598e565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611c5a565b6000915050611c5a565b6060612c65848460008585843b6150b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108e7565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516150df91906159ed565b60006040518083038185875af1925050503d806000811461511c576040519150601f19603f3d011682016040523d82523d6000602084013e615121565b606091505b509150915061513182828661513c565b979650505050505050565b6060831561514b5750816131ab565b82511561515b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e791906159ff565b73ffffffffffffffffffffffffffffffffffffffff811681146139b357600080fd5b80151581146139b357600080fd5b600080604083850312156151d257600080fd5b82356151dd8161518f565b915060208301356151ed816151b1565b809150509250929050565b60006020828403121561520a57600080fd5b81356131ab8161518f565b60006020828403121561522757600080fd5b5035919050565b60008060006060848603121561524357600080fd5b833561524e8161518f565b9250602084013561525e8161518f565b929592945050506040919091013590565b60008083601f84011261528157600080fd5b50813567ffffffffffffffff81111561529957600080fd5b6020830191508360208260051b85010111156152b457600080fd5b9250929050565b60008060008060008060a087890312156152d457600080fd5b86356152df8161518f565b955060208701356152ef8161518f565b9450604087013593506060870135615306816151b1565b9250608087013567ffffffffffffffff81111561532257600080fd5b61532e89828a0161526f565b979a9699509497509295939492505050565b60008060008060006080868803121561535857600080fd5b85356153638161518f565b945060208601359350604086013561537a816151b1565b9250606086013567ffffffffffffffff81111561539657600080fd5b6153a28882890161526f565b969995985093965092949392505050565b80356fffffffffffffffffffffffffffffffff811681146153d357600080fd5b919050565b600080604083850312156153eb57600080fd5b6153f4836153b3565b9150615402602084016153b3565b90509250929050565b61ffff811681146139b357600080fd5b6000806000806080858703121561543157600080fd5b8435935060208501356154438161518f565b925060408501356154538161540b565b915060608501356154638161540b565b939692955090935050565b60008060008060006080868803121561548657600080fd5b8535945060208601356154988161518f565b9350604086013567ffffffffffffffff8111156154b457600080fd5b6154c08882890161526f565b90945092505060608601356154d48161540b565b809150509295509295909350565b6020808252825182820181905260009190848201906040850190845b8181101561553057835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016154fe565b50909695505050505050565b60006020828403121561554e57600080fd5b6131ab826153b3565b6000806020838503121561556a57600080fd5b823567ffffffffffffffff81111561558157600080fd5b61558d8582860161526f565b90969095509350505050565b600080604083850312156155ac57600080fd5b82356155b78161518f565b915060208301356151ed8161518f565b6000602082840312156155d957600080fd5b813564ffffffffff811681146131ab57600080fd5b60006020828403121561560057600080fd5b81356131ab816151b1565b60006020828403121561561d57600080fd5b81516131ab8161518f565b6003811061565f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b73ffffffffffffffffffffffffffffffffffffffff888116825260e082019061568f602084018a615628565b6040830197909752948616606082015292909416608083015260a082015291151560c09092019190915292915050565b6000602082840312156156d157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561573f5761573f6156d8565b500290565b60008261577a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000806040838503121561579257600080fd5b825161579d8161518f565b60208401519092506151ed8161540b565b6000828210156157c0576157c06156d8565b500390565b600080604083850312156157d857600080fd5b505080516020909101519092909150565b6000602082840312156157fb57600080fd5b81516131ab816151b1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc183360301811261586957600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126158a857600080fd5b83018035915067ffffffffffffffff8211156158c357600080fd5b6020019150368190038213156152b457600080fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156159185780818660040360031b1b83161692505b505092915050565b6000808585111561593057600080fd5b8386111561593d57600080fd5b5050820193919092039150565b6000806040838503121561595d57600080fd5b82356159688161518f565b946020939093013593505050565b60008219821115615989576159896156d8565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60005b838110156159d85781810151838201526020016159c0565b838111156159e7576000848401525b50505050565b600082516158698184602087016159bd565b6020815260008251806020840152615a1e8160408501602087016159bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea2646970667358221220a3f4a705ab580a6ada1e438cd2ee4abc001b62d1d171fce12c41994900fef21664736f6c634300080a003360c06040523480156200001157600080fd5b50604051620026cf380380620026cf833981016040819052620000349162000324565b82828281600090805190602001906200004f92919062000194565b5080516200006590600190602084019062000194565b50506006805460ff19169055506001600160a01b0381166200009a57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000d9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ff9190620003a1565b6001600160a01b03166080816001600160a01b03168152505050826001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000158573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200017e9190620003a1565b6001600160a01b031660a0525062000403915050565b828054620001a290620003c6565b90600052602060002090601f016020900481019282620001c6576000855562000211565b82601f10620001e157805160ff191683800117855562000211565b8280016001018555821562000211579182015b8281111562000211578251825591602001919060010190620001f4565b506200021f92915062000223565b5090565b5b808211156200021f576000815560010162000224565b80516001600160a01b03811681146200025257600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200027f57600080fd5b81516001600160401b03808211156200029c576200029c62000257565b604051601f8301601f19908116603f01168101908282118183101715620002c757620002c762000257565b81604052838152602092508683858801011115620002e457600080fd5b600091505b83821015620003085785820183015181830184015290820190620002e9565b838211156200031a5760008385830101525b9695505050505050565b6000806000606084860312156200033a57600080fd5b62000345846200023a565b60208501519093506001600160401b03808211156200036357600080fd5b62000371878388016200026d565b935060408601519150808211156200038857600080fd5b5062000397868287016200026d565b9150509250925092565b600060208284031215620003b457600080fd5b620003bf826200023a565b9392505050565b600181811c90821680620003db57607f821691505b60208210811415620003fd57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a0516122756200045a6000396000610a9a015260008181610386015281816106db0152818161089101528181610f15015281816110010152818161115b015281816112f401526114f901526122756000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80636352211e116100f9578063a0bcfc7f11610097578063b88d4fde11610071578063b88d4fde146103a8578063c87b56dd146103b6578063e985e9c5146103c9578063fca3b5aa1461041257600080fd5b8063a0bcfc7f14610360578063a22cb46514610373578063a50cf2c81461038157600080fd5b80638456cb59116100d35780638456cb591461032a57806389406ff51461033257806395d89b41146103455780639dc29fac1461034d57600080fd5b80636352211e146102fc5780636c0360eb1461030f57806370a082311461031757600080fd5b80633f4ba83a116101665780634610f6ac116101405780634610f6ac146102b357806354fd4d50146102c6578063576cd2d1146102ce5780635c975abb146102f157600080fd5b80633f4ba83a1461029857806340c10f19146102a057806342842e0e1461028a57600080fd5b8063081812fc116101a2578063081812fc1461024b578063095ea7b31461025e57806318160ddd1461027357806323b872dd1461028a57600080fd5b806301ffc9a7146101c957806306fdde03146101f15780630754617214610206575b600080fd5b6101dc6101d7366004611cc6565b610425565b60405190151581526020015b60405180910390f35b6101f961050a565b6040516101e89190611d38565b6008546102269073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e8565b610226610259366004611d89565b61059c565b61027161026c366004611dc7565b61067b565b005b61027c60075481565b6040519081526020016101e8565b61027161026c366004611df3565b6102716106ad565b6102716102ae366004611dc7565b61079b565b6102716102c1366004611e34565b610863565b61027c600181565b6101dc6102dc366004611e34565b60096020526000908152604090205460ff1681565b60065460ff166101dc565b61022661030a366004611d89565b610cd9565b6101f9610d8b565b61027c610325366004611e34565b610e19565b610271610ee7565b610271610340366004611e34565b610fd3565b6101f9611103565b61027161035b366004611dc7565b611112565b61027161036e366004611e51565b6112c6565b61027161026c366004611ed1565b6102267f000000000000000000000000000000000000000000000000000000000000000081565b61027161026c366004611f39565b6101f96103c4366004611d89565b6113bb565b6101dc6103d7366004612037565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205460ff1690565b610271610420366004611e34565b6114cb565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd0000000000000000000000000000000000000000000000000000000014806104b857507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061050457507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60606000805461051990612065565b80601f016020809104026020016040519081016040528092919081815260200182805461054590612065565b80156105925780601f1061056757610100808354040283529160200191610592565b820191906000526020600020905b81548152906001019060200180831161057557829003601f168201915b5050505050905090565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff16610652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084015b60405180910390fd5b5060009081526004602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b6040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa158015610737573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075b91906120b9565b610791576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107996115f6565b565b60085473ffffffffffffffffffffffffffffffffffffffff1633146107ec576040517f5c2967f500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006107f783610e19565b905060005b82811015610846576000816108278473ffffffffffffffffffffffffffffffffffffffff8816612105565b6108319190612105565b905061083d85826116d7565b506001016107fc565b5081600760008282546108599190612105565b9091555050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156108ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091191906120b9565b610947576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163b610995576040517f9c01f6a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff1663c12c21c06040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610a1c575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610a199181019061211d565b60015b610a52576040517f9c01f6a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f6fbc6f6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192507f000000000000000000000000000000000000000000000000000000000000000090911690636fbc6f6b90602401602060405180830381865afa158015610ae3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0791906120b9565b1580610bad57503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16639408b63f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b94919061211d565b73ffffffffffffffffffffffffffffffffffffffff1614155b80610c5257508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c39919061211d565b73ffffffffffffffffffffffffffffffffffffffff1614155b15610c89576040517f9c01f6a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff16600090815260096020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff1680610504576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e00000000000000000000000000000000000000000000006064820152608401610649565b600a8054610d9890612065565b80601f0160208091040260200160405190810160405280929190818152602001828054610dc490612065565b8015610e115780601f10610de657610100808354040283529160200191610e11565b820191906000526020600020905b815481529060010190602001808311610df457829003601f168201915b505050505081565b600073ffffffffffffffffffffffffffffffffffffffff8216610ebe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152608401610649565b5073ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015610f71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9591906120b9565b610fcb576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610799611899565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561105d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108191906120b9565b6110b7576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff16600090815260096020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b60606001805461051990612065565b3360009081526009602052604090205460ff161580156111dd57506040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156111b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111db91906120b9565b155b15611214576040517f1e0d048500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061121f83610e19565b90508181101561125b576040517f90c9142d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b828110156112b357600060018261128b8573ffffffffffffffffffffffffffffffffffffffff8916612105565b611295919061213a565b61129f919061213a565b90506112aa81611959565b5060010161125e565b508160076000828254610859919061213a565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611350573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137491906120b9565b6113aa576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113b6600a8383611c0f565b505050565b60008181526002602052604090205460609073ffffffffffffffffffffffffffffffffffffffff1661146f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006064820152608401610649565b6000611479611a26565b9050600081511161149957604051806020016040528060008152506114c4565b806114a384611a35565b6040516020016114b4929190612151565b6040516020818303038152906040525b9392505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611555573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157991906120b9565b6115af576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60065460ff16611662576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610649565b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b73ffffffffffffffffffffffffffffffffffffffff8216611754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610649565b60008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff16156117e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610649565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805460019290611816908490612105565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60065460ff1615611906576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610649565b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586116ad3390565b600061196482610cd9565b9050611971600083611b6f565b73ffffffffffffffffffffffffffffffffffffffff811660009081526003602052604081208054600192906119a790849061213a565b909155505060008281526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555183919073ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6060600a805461051990612065565b606081611a7557505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611a9f5780611a8981612180565b9150611a989050600a836121e8565b9150611a79565b60008167ffffffffffffffff811115611aba57611aba611f0a565b6040519080825280601f01601f191660200182016040528015611ae4576020820181803683370190505b5090505b8415611b6757611af960018361213a565b9150611b06600a866121fc565b611b11906030612105565b60f81b818381518110611b2657611b26612210565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611b60600a866121e8565b9450611ae8565b949350505050565b600081815260046020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091558190611bc982610cd9565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b828054611c1b90612065565b90600052602060002090601f016020900481019282611c3d5760008555611ca1565b82601f10611c74578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00823516178555611ca1565b82800160010185558215611ca1579182015b82811115611ca1578235825591602001919060010190611c86565b50611cad929150611cb1565b5090565b5b80821115611cad5760008155600101611cb2565b600060208284031215611cd857600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146114c457600080fd5b60005b83811015611d23578181015183820152602001611d0b565b83811115611d32576000848401525b50505050565b6020815260008251806020840152611d57816040850160208701611d08565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b600060208284031215611d9b57600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff81168114611dc457600080fd5b50565b60008060408385031215611dda57600080fd5b8235611de581611da2565b946020939093013593505050565b600080600060608486031215611e0857600080fd5b8335611e1381611da2565b92506020840135611e2381611da2565b929592945050506040919091013590565b600060208284031215611e4657600080fd5b81356114c481611da2565b60008060208385031215611e6457600080fd5b823567ffffffffffffffff80821115611e7c57600080fd5b818501915085601f830112611e9057600080fd5b813581811115611e9f57600080fd5b866020828501011115611eb157600080fd5b60209290920196919550909350505050565b8015158114611dc457600080fd5b60008060408385031215611ee457600080fd5b8235611eef81611da2565b91506020830135611eff81611ec3565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060008060808587031215611f4f57600080fd5b8435611f5a81611da2565b93506020850135611f6a81611da2565b925060408501359150606085013567ffffffffffffffff80821115611f8e57600080fd5b818701915087601f830112611fa257600080fd5b813581811115611fb457611fb4611f0a565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715611ffa57611ffa611f0a565b816040528281528a602084870101111561201357600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000806040838503121561204a57600080fd5b823561205581611da2565b91506020830135611eff81611da2565b600181811c9082168061207957607f821691505b602082108114156120b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156120cb57600080fd5b81516114c481611ec3565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115612118576121186120d6565b500190565b60006020828403121561212f57600080fd5b81516114c481611da2565b60008282101561214c5761214c6120d6565b500390565b60008351612163818460208801611d08565b835190830190612177818360208801611d08565b01949350505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156121b2576121b26120d6565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826121f7576121f76121b9565b500490565b60008261220b5761220b6121b9565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea2646970667358221220ffdd83a2fc9a158347ca248f021e63fcef3a7985b3deb793f75cd1835b068aab64736f6c634300080a003360a060405234801561001057600080fd5b506040516106ca3803806106ca83398101604081905261002f9161006c565b60009190915560ff166080526001805460506001600160501b031991821681179092556004805490911690911790554260028190556003556100a2565b6000806040838503121561007f57600080fd5b82519150602083015160ff8116811461009757600080fd5b809150509250929050565b60805161060e6100bc600039600060d3015261060e6000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80639a6fc8f511610081578063d62ada111161005b578063d62ada11146102dc578063f7a30806146102f4578063feaf968c1461030757600080fd5b80639a6fc8f5146101cd578063bd18ad531461023a578063cd653afc1461024d57600080fd5b806354fd4d50116100b257806354fd4d501461012d57806367e8d83d1461013c5780637284e4161461018e57600080fd5b8063313ce567146100ce5780633fd0875f1461010c575b600080fd5b6100f57f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020015b60405180910390f35b6004546a0100000000000000000000900460ff166040516101039190610441565b60405160018152602001610103565b61018c61014a366004610482565b600480549115156c01000000000000000000000000027fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff909216919091179055565b005b604080518082018252600c81527f7072696365206f7261636c6500000000000000000000000000000000000000006020820152905161010391906104ab565b6102036101db36600461053d565b60015460005460025460035460045469ffffffffffffffffffff948516941691939590929450565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610103565b61018c610248366004610558565b61030f565b61018c61025b366004610579565b6001805469ffffffffffffffffffff9586167fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090911617905560029290925560035560048054919092167fffffffffffffffffffffffffffffffffffffffff00ff00000000000000000000909116176b020000000000000000000000179055565b6102e461035f565b6040519015158152602001610103565b61018c6103023660046105bf565b600055565b610203610385565b600480548291907fffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff166b01000000000000000000000083600281111561035757610357610412565b021790555050565b600454600090610380906b010000000000000000000000900460ff166103d6565b905090565b60008060008060006004600c9054906101000a900460ff16156103a757600080fd5b505060015460005460025460035460045469ffffffffffffffffffff9485169893975091955093509190911690565b600060028260028111156103ec576103ec610412565b14156103f757600080fd5b600182600281111561040b5761040b610412565b1492915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016006831061047c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561049457600080fd5b813580151581146104a457600080fd5b9392505050565b600060208083528351808285015260005b818110156104d8578581018301518582016040015282016104bc565b818111156104ea576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803569ffffffffffffffffffff8116811461053857600080fd5b919050565b60006020828403121561054f57600080fd5b6104a48261051e565b60006020828403121561056a57600080fd5b8135600381106104a457600080fd5b6000806000806080858703121561058f57600080fd5b6105988561051e565b935060208501359250604085013591506105b46060860161051e565b905092959194509250565b6000602082840312156105d157600080fd5b503591905056fea264697066735822122014874f7a973b86501c4c1a8be32490fe902c8f088ee234d25f9b2497e19f9e5264736f6c634300080a0033a2646970667358221220d8fdaadc825c43ac2783715ebcfe33e7b0ce3a396ac7717d65e4c95e98b6cf7f64736f6c634300080a003360806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d000117905534801561003957600080fd5b50600054604080516318caf8e360e31b815273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660048083019190915260248201929092526044810191909152632aa9a2a960e11b6064820152620100009091046001600160a01b03169063c657c71890608401600060405180830381600087803b1580156100ba57600080fd5b505af11580156100ce573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b81527390f79bf6eb2c4f870365e785982e1f101e93b90660048201526024810191909152600660448201526511949251539160d21b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561014f57600080fd5b505af1158015610163573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b8152733c44cdddb6a900fa2b585dd299e03d12fa4293bc60048201526024810191909152600a6044820152692624a8aaa4a220aa27a960b11b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b1580156101e857600080fd5b505af11580156101fc573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b815273c4375b7de8af5a38a93548eb8453a498222c4ff260048201526024810191909152600c60448201526b44554d425f4144445245535360a01b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561028357600080fd5b505af1158015610297573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b8152739965507d1a55bcc2695c58ba16fb37d819b0a4dc60048201526024810191909152600760448201526620a220a82a22a960c91b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561031957600080fd5b505af115801561032d573d6000803e3d6000fd5b505050506102a6806103406000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063ba414fa61461003b578063fa7626d414610057575b600080fd5b610043610064565b604051901515815260200160405180910390f35b6000546100439060ff1681565b60008054610100900460ff16156100845750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156101bf5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610129917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016101ff565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526101619161023b565b6000604051808303816000865af19150503d806000811461019e576040519150601f19603f3d011682016040523d82523d6000602084013e6101a3565b606091505b50915050808060200190518101906101bb919061024e565b9150505b919050565b6000815160005b818110156101e557602081850181015186830152016101cb565b818111156101f4576000828601525b509290920192915050565b7fffffffff0000000000000000000000000000000000000000000000000000000083168152600061023360048301846101c4565b949350505050565b600061024782846101c4565b9392505050565b60006020828403121561026057600080fd5b8151801515811461024757600080fdfea2646970667358221220293f55a0ef7b60c31a89dbc50e3339c80a8fdb1f9567614b200e97598226671f64736f6c634300080a003360806040523480156200001157600080fd5b506040516201110538038062011105833981016040819052620000349162000811565b6200003f3362000734565b6040516200004d9062000784565b604051809103906000f0801580156200006a573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b039283169081179091556040516310dc138160e31b81529184166004830152906386e09c0890602401600060405180830381600087803b158015620000c457600080fd5b505af1158015620000d9573d6000803e3d6000fd5b50506001546040516301ed651160e41b81526001600160a01b0385811660048301529091169250631ed651109150602401600060405180830381600087803b1580156200012557600080fd5b505af11580156200013a573d6000803e3d6000fd5b505050506040516200014c9062000792565b604051809103906000f08015801562000169573d6000803e3d6000fd5b50600280546001600160a01b0319166001600160a01b039283169081179091556001546040516376aad60560e01b81526004810192909252909116906376aad60590602401600060405180830381600087803b158015620001c957600080fd5b505af1158015620001de573d6000803e3d6000fd5b5050600154604051600093506001600160a01b0390911691506200020290620007a0565b6001600160a01b039091168152602001604051809103906000f0801580156200022f573d6000803e3d6000fd5b5060015460405163338f12b960e21b81526001600160a01b03808416600483015292935091169063ce3c4ae490602401600060405180830381600087803b1580156200027a57600080fd5b505af11580156200028f573d6000803e3d6000fd5b5050600154604051600093506001600160a01b039091169150620002b390620007ae565b6001600160a01b039091168152602001604051809103906000f080158015620002e0573d6000803e3d6000fd5b5060015460405163c5120b3960e01b81526001600160a01b03808416600483015292935091169063c5120b3990602401600060405180830381600087803b1580156200032b57600080fd5b505af115801562000340573d6000803e3d6000fd5b5050600154604051606093506001600160a01b03909116915082906200036690620007bc565b6200037392919062000849565b604051809103906000f08015801562000390573d6000803e3d6000fd5b50600380546001600160a01b0319166001600160a01b0392831690811790915560015460405163530e784f60e01b815260048101929092529091169063530e784f90602401600060405180830381600087803b158015620003f057600080fd5b505af115801562000405573d6000803e3d6000fd5b5050600154604051600093506001600160a01b0390911691506200042990620007ca565b6001600160a01b039091168152602001604051809103906000f08015801562000456573d6000803e3d6000fd5b506001546040516356ee0d3b60e11b81526001600160a01b03808416600483015292935091169063addc1a7690602401600060405180830381600087803b158015620004a157600080fd5b505af1158015620004b6573d6000803e3d6000fd5b5050600154604051600093506001600160a01b039091169150620004da90620007d8565b6001600160a01b039091168152602001604051809103906000f08015801562000507573d6000803e3d6000fd5b506001546040516321da583760e01b81526001600160a01b0380841660048301529293509116906321da583790602401600060405180830381600087803b1580156200055257600080fd5b505af115801562000567573d6000803e3d6000fd5b505050506000306040516200057c90620007e6565b6001600160a01b039091168152602001604051809103906000f080158015620005a9573d6000803e3d6000fd5b50600154604051631795d5b360e31b81526001600160a01b03808416600483015292935091169063bcaead9890602401600060405180830381600087803b158015620005f457600080fd5b505af115801562000609573d6000803e3d6000fd5b505060405163f2fde38b60e01b81523360048201526001600160a01b038416925063f2fde38b9150602401600060405180830381600087803b1580156200064f57600080fd5b505af115801562000664573d6000803e3d6000fd5b505060015460405163f2fde38b60e01b81523360048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b158015620006ae57600080fd5b505af1158015620006c3573d6000803e3d6000fd5b505060025460405163f2fde38b60e01b81523360048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b1580156200070d57600080fd5b505af115801562000722573d6000803e3d6000fd5b505050505050505050505050620008b2565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610fcd80620010dd83390190565b61098c80620020aa83390190565b610f508062002a3683390190565b614da6806200398683390190565b611b45806200872c83390190565b612ced806200a27183390190565b611627806200cf5e83390190565b612b80806200e58583390190565b80516001600160a01b03811681146200080c57600080fd5b919050565b600080604083850312156200082557600080fd5b6200083083620007f4565b91506200084060208401620007f4565b90509250929050565b6001600160a01b0383811682526040602080840182905284518483018190526000938683019290916060870190865b81811015620008a3578551805186168452840151851684840152948301949186019160010162000878565b50909998505050505050505050565b61081b80620008c26000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80638874ff1f1161005b5780638874ff1f146100f55780638da5cb5b14610108578063de28735914610126578063f2fde38b1461014657600080fd5b80632630c12f146100825780632954018c146100cb578063715018a6146100eb575b600080fd5b6003546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6001546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b6100f3610159565b005b6100f3610103366004610658565b6101eb565b60005473ffffffffffffffffffffffffffffffffffffffff166100a2565b6002546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b6100f3610154366004610734565b6103e3565b60005473ffffffffffffffffffffffffffffffffffffffff1633146101df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6101e96000610513565b565b60005473ffffffffffffffffffffffffffffffffffffffff16331461026c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101d6565b60005b815181101561035c57600354825173ffffffffffffffffffffffffffffffffffffffff9091169063e8a97a3e908490849081106102ae576102ae610756565b6020026020010151600001518484815181106102cc576102cc610756565b6020026020010151602001516040518363ffffffff1660e01b815260040161031792919073ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b600060405180830381600087803b15801561033157600080fd5b505af1158015610345573d6000803e3d6000fd5b50505050808061035490610785565b91505061026f565b506002546040517ff2fde38b00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063f2fde38b90602401600060405180830381600087803b1580156103c857600080fd5b505af11580156103dc573d6000803e3d6000fd5b5050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101d6565b73ffffffffffffffffffffffffffffffffffffffff8116610507576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016101d6565b61051081610513565b50565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156105da576105da610588565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561062757610627610588565b604052919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461065357600080fd5b919050565b6000602080838503121561066b57600080fd5b823567ffffffffffffffff8082111561068357600080fd5b818501915085601f83011261069757600080fd5b8135818111156106a9576106a9610588565b6106b7848260051b016105e0565b818152848101925060069190911b8301840190878211156106d757600080fd5b928401925b8184101561072957604084890312156106f55760008081fd5b6106fd6105b7565b6107068561062f565b815261071386860161062f565b81870152835260409390930192918401916106dc565b979650505050505050565b60006020828403121561074657600080fd5b61074f8261062f565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156107de577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea26469706673582212205ee75e57bb635aa49a1758f4ab0b04182a73115bff08f420c56a8ddb433c029364736f6c634300080a0033608060405234801561001057600080fd5b5061001a3361005f565b60405130906f20a2222922a9a9afa82927ab24a222a960811b907fb37614c7d254ea8d16eb81fa11dddaeb266aa8ba4917980859c7740aff30c69190600090a36100af565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610f0f806100be6000396000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c806377532ed9116100e3578063bcaead981161008c578063ce3c4ae411610066578063ce3c4ae414610308578063f2fde38b1461031b578063fca513a81461032e57600080fd5b8063bcaead98146102da578063c5120b39146102ed578063c513c9bb1461030057600080fd5b80639068a868116100bd5780639068a868146102b7578063addc1a76146102bf578063affd9243146102d257600080fd5b806377532ed91461027e57806386e09c08146102865780638da5cb5b1461029957600080fd5b80634c252f9111610145578063699f200f1161011f578063699f200f1461022d578063715018a61461026357806376aad6051461026b57600080fd5b80634c252f91146101fc578063530e784f1461020457806354fd4d501461021757600080fd5b80631ed65110116101765780631ed65110146101cc57806321da5837146101e157806326c74fc3146101f457600080fd5b8063060678c21461019257806308737695146101c4575b600080fd5b61019a610336565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61019a610366565b6101df6101da366004610e10565b610391565b005b6101df6101ef366004610e10565b610444565b61019a6104ef565b61019a61051a565b6101df610212366004610e10565b610545565b61021f600281565b6040519081526020016101bb565b61019a61023b366004610e4d565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6101df6105f0565b6101df610279366004610e10565b61067d565b61019a610728565b6101df610294366004610e10565b610753565b60005473ffffffffffffffffffffffffffffffffffffffff1661019a565b61019a6107fe565b6101df6102cd366004610e10565b610829565b61019a6108d4565b6101df6102e8366004610e10565b6108ff565b6101df6102fb366004610e10565b6109aa565b61019a610a55565b6101df610316366004610e10565b610a80565b6101df610329366004610e10565b610b2b565b61019a610c58565b60006103617f444154415f434f4d50524553534f520000000000000000000000000000000000610c7f565b905090565b60006103617f41434c0000000000000000000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610417576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6104417f54524541535552595f434f4e545241435400000000000000000000000000000082610d1d565b50565b60005473ffffffffffffffffffffffffffffffffffffffff1633146104c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f574554485f47415445574159000000000000000000000000000000000000000082610d1d565b60006103617f54524541535552595f434f4e5452414354000000000000000000000000000000610c7f565b60006103617f574554485f544f4b454e00000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f50524943455f4f5241434c45000000000000000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610671576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b61067b6000610d9b565b565b60005473ffffffffffffffffffffffffffffffffffffffff1633146106fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f41434c000000000000000000000000000000000000000000000000000000000082610d1d565b60006103617f574554485f474154455741590000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146107d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f574554485f544f4b454e0000000000000000000000000000000000000000000082610d1d565b60006103617f4143434f554e545f464143544f52590000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146108aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f4143434f554e545f464143544f5259000000000000000000000000000000000082610d1d565b60006103617f474541525f544f4b454e00000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610980576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f474541525f544f4b454e0000000000000000000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f444154415f434f4d50524553534f52000000000000000000000000000000000082610d1d565b60006103617f434f4e5452414354535f52454749535445520000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610b01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f434f4e5452414354535f5245474953544552000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610bac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b73ffffffffffffffffffffffffffffffffffffffff8116610c4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161040e565b61044181610d9b565b60006103617f50524943455f4f5241434c4500000000000000000000000000000000000000005b6000818152600160209081526040808320548151808301909252600382527f41503100000000000000000000000000000000000000000000000000000000009282019290925273ffffffffffffffffffffffffffffffffffffffff9091169081610d16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040e9190610e66565b5092915050565b60008281526001602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091559051909184917fb37614c7d254ea8d16eb81fa11dddaeb266aa8ba4917980859c7740aff30c6919190a35050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215610e2257600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610e4657600080fd5b9392505050565b600060208284031215610e5f57600080fd5b5035919050565b600060208083528351808285015260005b81811015610e9357858101830151858201604001528201610e77565b81811115610ea5576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea264697066735822122083c228af017c6f5cf8c395cdf7a53276ff56fdd4f4313c39f680ab73bd75417364736f6c634300080a0033608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61090e8061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063732818191161008c578063adce758d11610066578063adce758d14610215578063ba306df114610228578063d4eb5db01461023b578063f2fde38b1461027457600080fd5b806373281819146101b7578063819ad68e146101da5780638da5cb5b146101ed57600080fd5b806354fd4d50116100bd57806354fd4d501461016a5780635f259aba14610180578063715018a6146101af57600080fd5b806335914829146100e45780633a41ec641461011c5780634910832f14610155575b600080fd5b6101076100f236600461089b565b60016020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61010761012a36600461089b565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205460ff1690565b61016861016336600461089b565b610287565b005b610172600181565b604051908152602001610113565b61010761018e36600461089b565b60005473ffffffffffffffffffffffffffffffffffffffff91821691161490565b610168610387565b6101076101c536600461089b565b60026020526000908152604090205460ff1681565b6101686101e836600461089b565b610414565b60005460405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610113565b61016861022336600461089b565b61050c565b61016861023636600461089b565b610601565b61010761024936600461089b565b73ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205460ff1690565b61016861028236600461089b565b6106f6565b60005473ffffffffffffffffffffffffffffffffffffffff16331461030d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909217909155517fae26b1cfe9454ba87274a4e8330b6654684362d0f3d7bbd17f7449a1d38387c69190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610408576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b6104126000610826565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517fd400da6c0c0a894dacc0981730b88af0545d00272ee8fff1437bf560ff245fc49190a250565b60005473ffffffffffffffffffffffffffffffffffffffff16331461058d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f1998397e7203f7baca9d6f41b9e4da6e768daac5caad4234fb9bf5869d2715459190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610682576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526001602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f28b01395b7e25d20552a0c8dc8ecd3b1d4abc986f14dad7885fd45b6fd73c8d99190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811661081a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610304565b61082381610826565b50565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156108ad57600080fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146108d157600080fd5b939250505056fea26469706673582212204712efbfe997070def77285a5b8753bc882b62da2133ce1937ad26cd2b48e49864736f6c634300080a003360a060405234801561001057600080fd5b50604051610f50380380610f5083398101604081905261002f916100d7565b6000805460ff19169055806001600160a01b03811661006157604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa15801561009f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100c391906100d7565b6001600160a01b0316608052506101079050565b6000602082840312156100e957600080fd5b81516001600160a01b038116811461010057600080fd5b9392505050565b608051610e1261013e600039600081816101e2015281816102b20152818161040f0152818161057801526108510152610e126000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80638456cb5911610097578063b4ac686011610066578063b4ac686014610217578063c29277cd1461021f578063d914cd4b14610227578063e26b2f631461023a57600080fd5b80638456cb59146101cd57806394144856146101d5578063a50cf2c8146101dd578063ac4afa381461020457600080fd5b80635b16ebb7116100d35780635b16ebb7146101575780635c975abb1461018a578063673a2a1f146101955780636fbc6f6b146101aa57600080fd5b80631e16e4fc146100fa5780633f4ba83a1461013757806354fd4d5014610141575b600080fd5b61010d610108366004610c97565b61024d565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61013f610284565b005b610149600181565b60405190815260200161012e565b61017a610165366004610cb0565b60026020526000908152604090205460ff1681565b604051901515815260200161012e565b60005460ff1661017a565b61019d610372565b60405161012e9190610ced565b61017a6101b8366004610cb0565b60046020526000908152604090205460ff1681565b61013f6103e1565b61019d6104cd565b61010d7f000000000000000000000000000000000000000000000000000000000000000081565b61010d610212366004610c97565b61053a565b600154610149565b600354610149565b61013f610235366004610cb0565b61054a565b61013f610248366004610cb0565b610823565b6003818154811061025d57600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa15801561030e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103329190610d47565b610368576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610370610af6565b565b606060018054806020026020016040519081016040528092919081815260200182805480156103d757602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116103ac575b5050505050905090565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561046b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048f9190610d47565b6104c5576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610370610bd7565b606060038054806020026020016040519081016040528092919081815260200182805480156103d75760200282019190600052602060002090815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116103ac575050505050905090565b6001818154811061025d57600080fd5b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156105d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f89190610d47565b61062e576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051808201909152600281527f5a30000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff82166106b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b60405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff8116600090815260026020908152604091829020548251808401909352600383527f43523100000000000000000000000000000000000000000000000000000000009183019190915260ff1615610753576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b506001805480820182557fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915560008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909417909355915190917ff816b5143086c89d103a0683286be86c2b741e83ebfa75135aae606e2f5c6e5391a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156108ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d19190610d47565b610907576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051808201909152600281527f5a30000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8216610989576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b5073ffffffffffffffffffffffffffffffffffffffff8116600090815260046020908152604091829020548251808401909352600383527f43523200000000000000000000000000000000000000000000000000000000009183019190915260ff1615610a23576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b506003805460018082019092557fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915560008181526004602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909417909355915190917f58ad3cfc4b6552a53c8c4128ae9b080e14b4378a159280643a62c6f709cee24f91a250565b60005460ff16610b62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016106b0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff1615610c44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016106b0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610bad3390565b600060208284031215610ca957600080fd5b5035919050565b600060208284031215610cc257600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610ce657600080fd5b9392505050565b6020808252825182820181905260009190848201906040850190845b81811015610d3b57835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101610d09565b50909695505050505050565b600060208284031215610d5957600080fd5b81518015158114610ce657600080fd5b600060208083528351808285015260005b81811015610d9657858101830151858201604001528201610d7a565b81811115610da8576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea26469706673582212208f2d91c863db9ab1494a9c5db20e3fddc4b6c779ea3c3621737c105c60d9440a64736f6c634300080a003360e06040523480156200001157600080fd5b5060405162004da638038062004da6833981016040819052620000349162000160565b6001600160a01b0381166200005c57604051635919af9760e11b815260040160405180910390fd5b6001600160a01b03811660808190526040805163c513c9bb60e01b8152905163c513c9bb916004808201926020929091908290030181865afa158015620000a7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cd919062000160565b6001600160a01b031660a0816001600160a01b0316815250506080516001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000127573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200014d919062000160565b6001600160a01b031660c0525062000192565b6000602082840312156200017357600080fd5b81516001600160a01b03811681146200018b57600080fd5b9392505050565b60805160a05160c051614b896200021d6000396000818161018801528181611c4f0152612c5a0152600081816101ed015281816115e201528181611f5f0152818161213f0152818161223f0152818161243801528181612604015281816126bc01528181612788015281816129a501528181613c410152613d000152600061013c0152614b896000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c806354fd4d5011610081578063a80deda31161005b578063a80deda31461020f578063ae093f3f1461022f578063fc9914cb1461024f57600080fd5b806354fd4d50146101bd578063663b8fdb146101d35780637a0c7b21146101e857600080fd5b80632954018c116100b25780632954018c146101375780634b2f336d146101835780634c472fc9146101aa57600080fd5b80630dbd616d146100d957806313d21cdf146101025780631bcd8fc014610122575b600080fd5b6100ec6100e73660046140fc565b610272565b6040516100f9919061430b565b60405180910390f35b61011561011036600461431e565b6114d4565b6040516100f99190614444565b61012a611f59565b6040516100f99190614453565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100f9565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b61015e6101b83660046140fc565b6121f5565b6101c5600281565b6040519081526020016100f9565b6101db612432565b6040516100f991906146ea565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b61022261021d36600461431e565b6126b5565b6040516100f9919061476a565b61024261023d36600461431e565b612a75565b6040516100f991906147dd565b61026261025d3660046140fc565b613bf7565b60405190151581526020016100f9565b61035f604051806102400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160008152602001606081526020016000815260200160008152602001600015158152602001600081526020016000815260200160008152602001600060ff168152602001600081525090565b600080600080600061037088613cf4565b509450945094509450945060008560ff1660011461041d576040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015284169063e958b70490602401602060405180830381865afa1580156103f4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061041891906147f0565b6104ad565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015286169063e958b70490602401602060405180830381865afa158015610489573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ad91906147f0565b60ff8716610200890181905273ffffffffffffffffffffffffffffffffffffffff808b1660208b01528b811660608b015282168952909150600114156109e9578473ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610538573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055c91906147f0565b73ffffffffffffffffffffffffffffffffffffffff90811660808901526040517fc7de38a600000000000000000000000000000000000000000000000000000000815282821660048201529085169063c7de38a690602401602060405180830381865afa1580156105d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f5919061480d565b60c08801526040517fdfd5946500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015285169063dfd5946590602401602060405180830381865afa158015610666573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068a919061480d565b60e08801526040517f3ce0735500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015260006024830152861690633ce0735590604401602060405180830381865afa92505050801561073c575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526107399181019061480d565b60015b6107455761074c565b6101408801525b6040517f3ce0735500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015260016024830152861690633ce0735590604401602060405180830381865afa9250505080156107f9575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526107f69181019061480d565b60015b61080257610809565b6101608801525b60c08701516040517f996329f800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526024820192909252600060448201529086169063996329f89060640160a060405180830381865afa9250505080156108c4575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526108c191810190614826565b60015b6108cd576108da565b505015156101808a015250505b8073ffffffffffffffffffffffffffffffffffffffff16631afbb7a46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610925573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610949919061480d565b6101a08801526040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152851690633192195c90602401602060405180830381865afa1580156109bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109df919061480d565b60a0880152610c26565b8273ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5891906147f0565b73ffffffffffffffffffffffffffffffffffffffff90811660808901526040517fc7de38a600000000000000000000000000000000000000000000000000000000815282821660048201529083169063c7de38a6906024016040805180830381865afa158015610acc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af09190614866565b5060c08801526040517fdfd5946500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015283169063dfd5946590602401602060405180830381865afa158015610b62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b86919061480d565b60e08801526040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152841690633192195c906024016040805180830381865afa158015610bf6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1a9190614866565b60a08901526101a08801525b60008660ff16600114610ca7578373ffffffffffffffffffffffffffffffffffffffff166316f0115b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca291906147f0565b610d16565b8573ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1691906147f0565b90508073ffffffffffffffffffffffffffffffffffffffff166345d31f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d87919061480d565b6101008901526000600160ff891614610e0e578473ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610de5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e09919061480d565b610e7d565b8573ffffffffffffffffffffffffffffffffffffffff166320a05ff76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7d919061480d565b90508760ff16600114610f1f576040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152861690638991b2f190602401602060405180830381865afa158015610ef6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1a919061480d565b610faf565b6040517fb451cecc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015287169063b451cecc90602401602060405180830381865afa158015610f8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610faf919061480d565b6102208a01528067ffffffffffffffff811115610fce57610fce61488a565b60405190808252806020026020018201604052801561103e57816020015b6040805160808101825260008082526020808301829052928201819052606082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181610fec5790505b506101208a015260005b818110156113d657604080516080810182526000808252602082018190529181018290526060810191909152600180831b9060ff8c1614156111c5576040517faf0a650200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018590528a169063af0a650290604401608060405180830381865afa1580156110f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111b91906148b9565b5050602084015273ffffffffffffffffffffffffffffffffffffffff9081168084526040517ff9eaee0d0000000000000000000000000000000000000000000000000000000081526004810191909152908a169063f9eaee0d90602401602060405180830381865afa158015611195573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b9919061490d565b15156040830152611388565b6040517f172c48c70000000000000000000000000000000000000000000000000000000081526004810184905273ffffffffffffffffffffffffffffffffffffffff89169063172c48c7906024016040805180830381865afa15801561122f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112539190614928565b5073ffffffffffffffffffffffffffffffffffffffff9081168084526040517f70a082310000000000000000000000000000000000000000000000000000000081529188166004830152906370a0823190602401602060405180830381865afa1580156112c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e8919061480d565b602083015281516040517ff9eaee0d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529088169063f9eaee0d90602401602060405180830381865afa15801561135c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611380919061490d565b151560408301525b6102208c015181161561139c57600161139f565b60005b151560608301526101208c01518051839190859081106113c1576113c161495e565b60209081029190910101525050600101611048565b508273ffffffffffffffffffffffffffffffffffffffff166317d11a156040518163ffffffff1660e01b8152600401602060405180830381865afa158015611422573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611446919061480d565b896101c00181815250508273ffffffffffffffffffffffffffffffffffffffff16633dc54b406040518163ffffffff1660e01b8152600401602060405180830381865afa15801561149b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bf919061480d565b6101e08a015250969998505050505050505050565b61159b604051806102000160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600060ff1681525090565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015283917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa15801561162b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164f919061490d565b611685576040517fd384b23800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316808352604080517ffe14112d000000000000000000000000000000000000000000000000000000008152905185929163fe14112d9160048083019260209291908290030181865afa1580156116f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611719919061480d565b8360c00181815250508073ffffffffffffffffffffffffffffffffffffffff1663ef8d96036040518163ffffffff1660e01b8152600401602060405180830381865afa15801561176d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611791919061480d565b8360e00181815250508073ffffffffffffffffffffffffffffffffffffffff1663743753596040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611809919061480d565b8360a00181815250508073ffffffffffffffffffffffffffffffffffffffff16634c19386c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561185d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611881919061480d565b836101000181815250508073ffffffffffffffffffffffffffffffffffffffff1663788c6bfe6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fa919061480d565b836101600181815250508073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561194f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611973919061480d565b8360800181815250508073ffffffffffffffffffffffffffffffffffffffff166345d31f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119eb919061480d565b836101400181815250508073ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6491906147f0565b836040019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff166336dda7d56040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0a91906147f0565b836060019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663788c6bfe6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb0919061480d565b836101600181815250508073ffffffffffffffffffffffffffffffffffffffff1663e941fa786040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c29919061480d565b61018084015260408084015173ffffffffffffffffffffffffffffffffffffffff9081167f000000000000000000000000000000000000000000000000000000000000000082161460208087019190915282517f609ae31700000000000000000000000000000000000000000000000000000000815292519184169263609ae31792600480830193928290030181865afa158015611ccb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cef919061480d565b836101c00181815250508073ffffffffffffffffffffffffffffffffffffffff1663dbcb313b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d68919061480d565b836101a00181815250506000836060015173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de7919061480d565b6040517f5427c9380000000000000000000000000000000000000000000000000000000081526004810182905290915060009073ffffffffffffffffffffffffffffffffffffffff841690635427c93890602401602060405180830381865afa158015611e58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7c919061480d565b90508015611ec7576101808501518190611eb890611e9c906127106149bc565b876101000151886101400151611eb291906149d3565b90613fd0565b611ec29190614a3f565b611ece565b8461014001515b856101200181815250508273ffffffffffffffffffffffffffffffffffffffff166354fd4d506040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f47919061480d565b60ff166101e086015250505050919050565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b4ac68606040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fec919061480d565b90508067ffffffffffffffff8111156120075761200761488a565b6040519080825280602002602001820160405280156120ff57816020015b6120ec604051806102000160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600060ff1681525090565b8152602001906001900390816120255790505b50915060005b818110156121f0576040517fac4afa38000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ac4afa3890602401602060405180830381865afa15801561219b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121bf91906147f0565b90506121ca816114d4565b8483815181106121dc576121dc61495e565b602090810291909101015250600101612105565b505090565b6040517f6fbc6f6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015260009184917f00000000000000000000000000000000000000000000000000000000000000001690636fbc6f6b90602401602060405180830381865afa158015612286573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122aa919061490d565b6122e0576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060006122ee87613cf4565b5050935093505092508260ff16600114612397576040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015282169063fdd5764590602401602060405180830381865afa15801561236e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061239291906147f0565b612427565b6040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015283169063fdd5764590602401602060405180830381865afa158015612403573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061242791906147f0565b979650505050505050565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c29277cd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124c5919061480d565b90508067ffffffffffffffff8111156124e0576124e061488a565b6040519080825280602002602001820160405280156125c457816020015b60408051610260810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083018290526101208301819052610140830181905261016083015261018082018190526101a082018190526101c082018190526101e082018190526102008201819052610220820181905261024082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816124fe5790505b50915060005b818110156121f0576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa158015612660573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061268491906147f0565b905061268f81612a75565b8483815181106126a1576126a161495e565b6020908102919091010152506001016125ca565b60606000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c29277cd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612725573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612749919061480d565b905060005b81811015612829576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa1580156127e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061280891906147f0565b90506128148187613bf7565b15612820578360010193505b5060010161274e565b508167ffffffffffffffff8111156128435761284361488a565b60405190808252806020026020018201604052801561296157816020015b61294e604051806102400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160008152602001606081526020016000815260200160008152602001600015158152602001600081526020016000815260200160008152602001600060ff168152602001600081525090565b8152602001906001900390816128615790505b5092506000915060005b81811015612a6d576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa158015612a01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a2591906147f0565b9050612a318187613bf7565b15612a6457612a408187610272565b858581518110612a5257612a5261495e565b60209081029190910101526001909301925b5060010161296b565b505050919050565b604080516102608101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082018390526101208201819052610140820181905261016082015261018081018290526101a081018290526101c081018290526101e08101829052610200810182905261022081018290526102408101829052908080808080612b1b88613cf4565b73ffffffffffffffffffffffffffffffffffffffff8e168d5260ff86166101808e01819052959b50939950919750955093509150600114612bca578273ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ba1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bc591906147f0565b612c39565b8473ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c3991906147f0565b73ffffffffffffffffffffffffffffffffffffffff908116602089018190527f00000000000000000000000000000000000000000000000000000000000000009091161460408801526000600160ff881614612d03578373ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cfe91906147f0565b612d72565b8573ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d7291906147f0565b6040517f2e97ca2100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b8116600483015291925090821690632e97ca2190602401602060405180830381865afa158015612de2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e06919061490d565b15156060890152604080517f45d31f9d000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff8316916345d31f9d9160048083019260209291908290030181865afa158015612e78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e9c919061480d565b8860800181815250508073ffffffffffffffffffffffffffffffffffffffff1663743753596040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ef0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f14919061480d565b610100890152600160ff88161415613017578573ffffffffffffffffffffffffffffffffffffffff16639b2cb5d86040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f95919061480d565b8860a00181815250508573ffffffffffffffffffffffffffffffffffffffff16635f48f3936040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fe9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061300d919061480d565b60c08901526130a5565b8273ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa158015613061573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130859190614a73565b6fffffffffffffffffffffffffffffffff90811660c08b01521660a08901525b60008760ff16600114613126578473ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613121919061480d565b613195565b8573ffffffffffffffffffffffffffffffffffffffff166320a05ff76040518163ffffffff1660e01b8152600401602060405180830381865afa158015613171573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613195919061480d565b90508067ffffffffffffffff8111156131b0576131b061488a565b6040519080825280602002602001820160405280156131d9578160200160208202803683370190505b506101208a01528067ffffffffffffffff8111156131f9576131f961488a565b604051908082528060200260200182016040528015613222578160200160208202803683370190505b506101608a015260005b818110156134c4578860ff16600114156133b4576040517f5e5f2e260000000000000000000000000000000000000000000000000000000081526004810182905260009073ffffffffffffffffffffffffffffffffffffffff891690635e5f2e2690602401602060405180830381865afa1580156132ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132d291906147f0565b9050808b610120015183815181106132ec576132ec61495e565b73ffffffffffffffffffffffffffffffffffffffff92831660209182029290920101526040517f78327438000000000000000000000000000000000000000000000000000000008152828216600482015290891690637832743890602401602060405180830381865afa158015613367573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061338b919061480d565b8b610160015183815181106133a2576133a261495e565b602002602001018181525050506134bc565b6040517f172c48c70000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff87169063172c48c7906024016040805180830381865afa15801561341e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134429190614928565b8061ffff1690508b610120015183815181106134605761346061495e565b602002602001018c6101600151848151811061347e5761347e61495e565b60200260200101828152508273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525050505b60010161322c565b5060008860ff16600114613546578373ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561351d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613541919061480d565b6135b5565b8673ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613591573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135b5919061480d565b90508067ffffffffffffffff8111156135d0576135d061488a565b60405190808252806020026020018201604052801561361557816020015b60408051808201909152600080825260208201528152602001906001900390816135ee5790505b506101408b015260005b818110156139015760408051808201909152600080825260208201528a60ff166001146136da576040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff871690635094cb4f90602401602060405180830381865afa1580156136b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136d591906147f0565b613769565b6040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff8a1690635094cb4f90602401602060405180830381865afa158015613745573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061376991906147f0565b73ffffffffffffffffffffffffffffffffffffffff168152600160ff8c16146138245780516040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529089169063fdd5764590602401602060405180830381865afa1580156137fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061381f91906147f0565b6138b7565b80516040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152908a169063fdd5764590602401602060405180830381865afa158015613893573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138b791906147f0565b73ffffffffffffffffffffffffffffffffffffffff1660208201526101408c01518051829190849081106138ed576138ed61495e565b60209081029190910101525060010161361f565b508860ff166001141561398f578773ffffffffffffffffffffffffffffffffffffffff1663b2c53a6c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613959573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061397d919061480d565b60e08b015260ff6102408b0152613be9565b73ffffffffffffffffffffffffffffffffffffffff85166101a08b01819052604080517f9408b63f0000000000000000000000000000000000000000000000000000000081529051639408b63f916004808201926020929091908290030181865afa158015613a02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a2691906147f0565b8a6101e0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508473ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015613aa9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613acd9190614aa6565b5015156102008c015250604080517f9fd12b77000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff881691639fd12b779160048083019260209291908290030181865afa158015613b42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b66919061480d565b8a6102200181815250508573ffffffffffffffffffffffffffffffffffffffff16638345f26e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bdf9190614af7565b60ff166102408b01525b505050505050505050919050565b6040517f6fbc6f6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015260009184917f00000000000000000000000000000000000000000000000000000000000000001690636fbc6f6b90602401602060405180830381865afa158015613c88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cac919061490d565b613ce2576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613cec8484614023565b949350505050565b600080600080600080867f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636fbc6f6b826040518263ffffffff1660e01b8152600401613d73919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa158015613d90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613db4919061490d565b613dea576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8773ffffffffffffffffffffffffffffffffffffffff166354fd4d506040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e59919061480d565b96508660ff1660011415613ee0578795508573ffffffffffffffffffffffffffffffffffffffff1663f93f515b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613eb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ed991906147f0565b9450613fc6565b8793508373ffffffffffffffffffffffffffffffffffffffff16632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f5291906147f0565b92508373ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fc391906147f0565b91505b5091939550919395565b6000821580613fdd575081155b15613fea5750600061401d565b612710613ff8600282614b1a565b61ffff1661400684866149d3565b6140109190614b3b565b61401a9190614a3f565b90505b92915050565b6040517f055ee9b500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600091829185169063055ee9b590602401602060405180830381865afa158015614094573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140b891906147f0565b73ffffffffffffffffffffffffffffffffffffffff1614159392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146140f957600080fd5b50565b6000806040838503121561410f57600080fd5b823561411a816140d7565b9150602083013561412a816140d7565b809150509250929050565b600081518084526020808501945080840160005b8381101561419f578151805173ffffffffffffffffffffffffffffffffffffffff168852838101518489015260408082015115159089015260609081015115159088015260809096019590820190600101614149565b509495945050505050565b805173ffffffffffffffffffffffffffffffffffffffff168252600061024060208301516141f0602086018273ffffffffffffffffffffffffffffffffffffffff169052565b506040830151614204604086018215159052565b50606083015161422c606086018273ffffffffffffffffffffffffffffffffffffffff169052565b506080830151614254608086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060a083015160a085015260c083015160c085015260e083015160e085015261010080840151818601525061012080840151828287015261429783870182614135565b92505050610140808401518186015250610160808401518186015250610180808401516142c78287018215159052565b50506101a083810151908501526101c080840151908501526101e080840151908501526102008084015160ff16908501526102209283015192909301919091525090565b60208152600061401a60208301846141aa565b60006020828403121561433057600080fd5b813561433b816140d7565b9392505050565b805173ffffffffffffffffffffffffffffffffffffffff168252602081015161436f602084018215159052565b506040810151614397604084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060608101516143bf606084018273ffffffffffffffffffffffffffffffffffffffff169052565b506080818101519083015260a0808201519083015260c0808201519083015260e08082015190830152610100808201519083015261012080820151908301526101408082015190830152610160808201519083015261018080820151908301526101a080820151908301526101c080820151908301526101e09081015160ff16910152565b610200810161401d8284614342565b6020808252825182820181905260009190848201906040850190845b8181101561449657614482838551614342565b92840192610200929092019160010161446f565b50909695505050505050565b600081518084526020808501945080840160005b8381101561419f57815173ffffffffffffffffffffffffffffffffffffffff16875295820195908201906001016144b6565b600081518084526020808501945080840160005b8381101561419f578151805173ffffffffffffffffffffffffffffffffffffffff9081168952908401511683880152604090960195908201906001016144fc565b600081518084526020808501945080840160005b8381101561419f57815187529582019590820190600101614551565b805173ffffffffffffffffffffffffffffffffffffffff168252600061026060208301516145b3602086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060408301516145c7604086018215159052565b5060608301516145db606086018215159052565b506080830151608085015260a083015160a085015260c083015160c085015260e083015160e0850152610100808401518186015250610120808401518282870152614628838701826144a2565b92505050610140808401518583038287015261464483826144e8565b925050506101608084015185830382870152614660838261453d565b92505050610180808401516146798287018260ff169052565b50506101a08381015173ffffffffffffffffffffffffffffffffffffffff908116918601919091526101c0808501511515908601526101e080850151909116908501526102008084015115159085015261022080840151908501526102409283015160ff1692909301919091525090565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561475d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc088860301845261474b85835161456d565b94509285019290850190600101614711565b5092979650505050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561475d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08886030184526147cb8583516141aa565b94509285019290850190600101614791565b60208152600061401a602083018461456d565b60006020828403121561480257600080fd5b815161433b816140d7565b60006020828403121561481f57600080fd5b5051919050565b600080600080600060a0868803121561483e57600080fd5b5050835160208501516040860151606087015160809097015192989197509594509092509050565b6000806040838503121561487957600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080600080608085870312156148cf57600080fd5b84516148da816140d7565b60208601516040870151606090970151919890975090945092505050565b8051801515811461490857600080fd5b919050565b60006020828403121561491f57600080fd5b61401a826148f8565b6000806040838503121561493b57600080fd5b8251614946816140d7565b602084015190925061ffff8116811461412a57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156149ce576149ce61498d565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614a0b57614a0b61498d565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614a4e57614a4e614a10565b500490565b80516fffffffffffffffffffffffffffffffff8116811461490857600080fd5b60008060408385031215614a8657600080fd5b614a8f83614a53565b9150614a9d60208401614a53565b90509250929050565b600080600060608486031215614abb57600080fd5b614ac484614a53565b9250614ad2602085016148f8565b9150604084015164ffffffffff81168114614aec57600080fd5b809150509250925092565b600060208284031215614b0957600080fd5b815160ff8116811461433b57600080fd5b600061ffff80841680614b2f57614b2f614a10565b92169190910492915050565b60008219821115614b4e57614b4e61498d565b50019056fea2646970667358221220d15108d0bec9cc6f3903875dd8412869a3da1b36661bdc780e2e2f0ae3136d2464736f6c634300080a003360a06040523480156200001157600080fd5b5060405162001b4538038062001b45833981016040819052620000349162000608565b6000805460ff19169055816001600160a01b0381166200006757604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cc91906200070a565b6001600160a01b031660805250805160005b818110156200014257620001398382815181106200010057620001006200072f565b6020026020010151600001518483815181106200012157620001216200072f565b6020026020010151602001516200014c60201b60201c565b600101620000de565b5050505062000822565b6001600160a01b03821615806200016a57506001600160a01b038116155b156200018957604051635919af9760e11b815260040160405180910390fd5b620001a8826001600160a01b0316620004ba60201b620006751760201c565b620001d65760405163df4c572d60e01b81526001600160a01b03831660048201526024015b60405180910390fd5b620001f5816001600160a01b0316620004ba60201b620006751760201c565b6200021f5760405163df4c572d60e01b81526001600160a01b0382166004820152602401620001cd565b806001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200027c575060408051601f3d908101601f19168201909252620002799181019062000745565b60015b6200029a576040516367a7cd4360e01b815260040160405180910390fd5b8060ff16600814620002bf576040516367a7cd4360e01b815260040160405180910390fd5b506000816001600160a01b031663d62ada116040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200031f575060408051601f3d908101601f191682019092526200031c918101906200076a565b60015b6200032a576200032d565b90505b6000836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200038c575060408051601f3d908101601f19168201909252620003899181019062000745565b60015b620003aa5760405163528ca31d60e01b815260040160405180910390fd5b60128160ff161115620003d05760405163528ca31d60e01b815260040160405180910390fd5b9050826001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa9250505080156200042f575060408051601f3d908101601f191682019092526200042c91810190620007a6565b60015b6200044d576040516367a7cd4360e01b815260040160405180910390fd5b8662000461576200046185858484620004c0565b5050505050620004748484848462000526565b826001600160a01b0316846001600160a01b03167fe263805b03657ab13064915d0723c5ce14981547e7cba5283f66b9e5d81f6e6e60405160405180910390a350505050565b3b151590565b60008313620004e2576040516356e05d2b60e01b815260040160405180910390fd5b836001600160501b0316816001600160501b0316108062000501575081155b15620005205760405163b1cf675560e01b815260040160405180910390fd5b50505050565b6001600160a01b03831682156200053e57600160a11b175b6200055460ff60a21b60a284901b1682620007fb565b6001600160a01b0390951660009081526001602052604090209490945550505050565b80516001600160a01b03811681146200058f57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715620005cf57620005cf62000594565b60405290565b604051601f8201601f191681016001600160401b038111828210171562000600576200060062000594565b604052919050565b60008060408084860312156200061d57600080fd5b620006288462000577565b602085810151919450906001600160401b03808211156200064857600080fd5b818701915087601f8301126200065d57600080fd5b81518181111562000672576200067262000594565b62000682848260051b01620005d5565b818152848101925060069190911b830184019089821115620006a357600080fd5b928401925b81841015620006fa5785848b031215620006c25760008081fd5b620006cc620005aa565b620006d78562000577565b8152620006e686860162000577565b8187015283529285019291840191620006a8565b8096505050505050509250929050565b6000602082840312156200071d57600080fd5b620007288262000577565b9392505050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156200075857600080fd5b815160ff811681146200072857600080fd5b6000602082840312156200077d57600080fd5b815180151581146200072857600080fd5b80516001600160501b03811681146200058f57600080fd5b600080600080600060a08688031215620007bf57600080fd5b620007ca866200078e565b9450602086015193506040860151925060608601519150620007ef608087016200078e565b90509295509295909350565b600082198211156200081d57634e487b7160e01b600052601160045260246000fd5b500190565b6080516112f262000853600039600081816101b201528181610280015281816103e201526104ff01526112f26000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c80638456cb591161008c578063b66102df11610066578063b66102df146101d4578063e8a97a3e146101e7578063f190e5fa146101fa578063f9a650301461023f57600080fd5b80638456cb591461016d5780639dcb511a14610175578063a50cf2c8146101ad57600080fd5b80635c975abb116100bd5780635c975abb1461011c5780635cecbd0e146101325780637afb01041461015a57600080fd5b80633f4ba83a146100e457806341976e09146100ee57806354fd4d5014610114575b600080fd5b6100ec610252565b005b6101016100fc366004610f28565b610340565b6040519081526020015b60405180910390f35b610101600281565b60005460ff16604051901515815260200161010b565b610145610140366004610f4a565b610352565b6040805192835260208301919091520161010b565b610101610168366004610f90565b610376565b6100ec6103b4565b610188610183366004610f28565b6104a0565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010b565b6101887f000000000000000000000000000000000000000000000000000000000000000081565b6101016101e2366004610fbc565b6104b4565b6100ec6101f5366004610ff8565b6104d1565b61020d610208366004610f28565b6105c3565b6040805173ffffffffffffffffffffffffffffffffffffffff909416845291151560208401529082015260600161010b565b61010161024d366004610f90565b61064d565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156102dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103009190611022565b610336576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033e61067b565b565b600061034b82610761565b5092915050565b60008061035f868661064d565b915061036b848461064d565b905094509492505050565b600080600061038484610761565b90925090508161039582600a611193565b61039f908761119f565b6103a991906111dc565b925050505b92915050565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561043e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104629190611022565b610498576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033e610819565b60006104ab826105c3565b50909392505050565b60006104c96104c3858561064d565b83610376565b949350505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561055b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057f9190611022565b6105b5576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105bf82826108d9565b5050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600160205260408120548190819080610624576040517f4bb8ad8200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b947402000000000000000000000000000000000000000086161515945060a286901c9350915050565b600080600061065b84610761565b909250905061066b81600a611193565b61039f838761119f565b3b151590565b60005460ff166106ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b600080600080610770856105c3565b8095508193508294505050506000806000808573ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156107cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f19190611231565b9450945050935093508461080b5761080b84848484610dd9565b829750505050505050915091565b60005460ff1615610886576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016106e3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586107373390565b73ffffffffffffffffffffffffffffffffffffffff82161580610910575073ffffffffffffffffffffffffffffffffffffffff8116155b15610947576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82163b6109ad576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016106e3565b73ffffffffffffffffffffffffffffffffffffffff81163b610a13576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024016106e3565b8073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610a98575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610a9591810190611281565b60015b610ace576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060ff16600814610b0b576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060008173ffffffffffffffffffffffffffffffffffffffff1663d62ada116040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610b93575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610b9091810190611022565b60015b610b9c57610b9f565b90505b60008373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610c26575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610c2391810190611281565b60015b610c5c576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60128160ff161115610c9a576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b90508273ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa925050508015610d21575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610d1e91810190611231565b60015b610d57576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b86610d6857610d6885858484610dd9565b5050505050610d7984848484610e74565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fe263805b03657ab13064915d0723c5ce14981547e7cba5283f66b9e5d81f6e6e60405160405180910390a350505050565b60008313610e13576040517f56e05d2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8369ffffffffffffffffffff168169ffffffffffffffffffff161080610e37575081155b15610e6e576040517fb1cf675500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b73ffffffffffffffffffffffffffffffffffffffff83168215610ea95774020000000000000000000000000000000000000000175b610ecf7503fc000000000000000000000000000000000000000060a284901b16826112a4565b73ffffffffffffffffffffffffffffffffffffffff90951660009081526001602052604090209490945550505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610f2357600080fd5b919050565b600060208284031215610f3a57600080fd5b610f4382610eff565b9392505050565b60008060008060808587031215610f6057600080fd5b84359350610f7060208601610eff565b925060408501359150610f8560608601610eff565b905092959194509250565b60008060408385031215610fa357600080fd5b82359150610fb360208401610eff565b90509250929050565b600080600060608486031215610fd157600080fd5b83359250610fe160208501610eff565b9150610fef60408501610eff565b90509250925092565b6000806040838503121561100b57600080fd5b61101483610eff565b9150610fb360208401610eff565b60006020828403121561103457600080fd5b81518015158114610f4357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b808511156110cc57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156110b2576110b2611044565b808516156110bf57918102915b93841c9390800290611078565b509250929050565b6000826110e3575060016103ae565b816110f0575060006103ae565b816001811461110657600281146111105761112c565b60019150506103ae565b60ff84111561112157611121611044565b50506001821b6103ae565b5060208310610133831016604e8410600b841016171561114f575081810a6103ae565b6111598383611073565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561118b5761118b611044565b029392505050565b6000610f4383836110d4565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156111d7576111d7611044565b500290565b600082611212577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b805169ffffffffffffffffffff81168114610f2357600080fd5b600080600080600060a0868803121561124957600080fd5b61125286611217565b945060208601519350604086015192506060860151915061127560808701611217565b90509295509295909350565b60006020828403121561129357600080fd5b815160ff81168114610f4357600080fd5b600082198211156112b7576112b7611044565b50019056fea2646970667358221220e7485a2cb5750973f539ca59d2211008b42bb92b6c49605a53f5d9c88c330fb164736f6c634300080a003360e06040523480156200001157600080fd5b5060405162002ced38038062002ced8339810160408190526200003491620004bb565b6000805460ff19169055806001600160a01b0381166200006757604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cc9190620004bb565b6001600160a01b039081166080526001805560408051808201909152600281526105a360f41b602082015291508216620001245760405162461bcd60e51b81526004016200011b9190620004ed565b60405180910390fd5b50806001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000164573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200018a9190620004bb565b6001600160a01b031660c052604051620001a490620004ad565b604051809103906000f080158015620001c1573d6000803e3d6000fd5b506001600160a01b031660a08190526040805163204a7f0760e21b81529051638129fc1c9160048082019260009290919082900301818387803b1580156200020857600080fd5b505af11580156200021d573d6000803e3d6000fd5b50505050620002316200028a60201b60201c565b50600454600380546001600160a01b039092166001600160a01b03199283161790556000805260026020527fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b8054909116905562000545565b6000620002a460a0516200038c60201b6200119b1760201c565b9050806001600160a01b0316638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620002e257600080fd5b505af1158015620002f7573d6000803e3d6000fd5b5050600480546001600160a01b03908116600090815260026020908152604090912080546001600160a01b03199081169388169384179091558354169091179091556200035492506005915083906200043b811b6200127d17901c565b506040516001600160a01b038216907f9f69b6c10f6810213e055b0ba6bc0a4e2603f73c221aad77ea35da819cda7dc390600090a250565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260601b60148201526e5af43d82803e903d91602b57fd5bf360881b60288201526037816000f09150506001600160a01b038116620004365760405162461bcd60e51b815260206004820152601660248201527f455243313136373a20637265617465206661696c65640000000000000000000060448201526064016200011b565b919050565b600062000452836001600160a01b0384166200045b565b90505b92915050565b6000818152600183016020526040812054620004a45750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000455565b50600062000455565b610e788062001e7583390190565b600060208284031215620004ce57600080fd5b81516001600160a01b0381168114620004e657600080fd5b9392505050565b600060208083528351808285015260005b818110156200051c57858101830151858201604001528201620004fe565b818111156200052f576000604083870101525b50601f01601f1916929092016040019392505050565b60805160a05160c0516118cf620005a66000396000818161026a015281816103680152610b7001526000818161020201526110650152600081816102c4015281816105b80152818161099601528181610a840152610e7401526118cf6000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806388f64c54116100cd578063b193976311610081578063d82ecc4811610066578063d82ecc4814610309578063e3ba9ace1461031c578063f23953ab1461032f57600080fd5b8063b1939763146102f9578063b60e85181461030157600080fd5b80638f7dcfa3116100b25780638f7dcfa31461029f578063a50cf2c8146102bf578063a904aab6146102e657600080fd5b806388f64c541461026557806389b77b3e1461028c57600080fd5b806354fd4d50116101245780635da33c5b116101095780635da33c5b146101fd578063765e0159146102245780638456cb591461025d57600080fd5b806354fd4d50146101d05780635c975abb146101e657600080fd5b806313d8c8401461015657806321d18456146101a05780632932472f146101b35780633f4ba83a146101c8575b600080fd5b6004546101769073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6101766101ae366004611651565b610337565b6101c66101c1366004611697565b61058a565b005b6101c6610968565b6101d8600181565b604051908152602001610197565b60005460ff165b6040519015158152602001610197565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101766102323660046116da565b73ffffffffffffffffffffffffffffffffffffffff9081166000908152600260205260409020541690565b6101c6610a56565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101c661029a3660046116da565b610b42565b6003546101769073ffffffffffffffffffffffffffffffffffffffff1681565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101c66102f4366004611697565b610e46565b6101d8610fb8565b6101d8611033565b6101ed6103173660046116da565b611044565b61017661032a3660046116f5565b611051565b6101c661105e565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa1580156103c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103e8919061170e565b6040518060400160405280600281526020017f43500000000000000000000000000000000000000000000000000000000000008152509061045f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b60405180910390fd5b506104686112a6565b6003805473ffffffffffffffffffffffffffffffffffffffff8082166000818152600260205260409081902080549093167fffffffffffffffffffffffff0000000000000000000000000000000000000000948516179094558154909216905590517fc75b5a710000000000000000000000000000000000000000000000000000000081523360048201526024810185905260448101849052819063c75b5a7190606401600060405180830381600087803b15801561052657600080fd5b505af115801561053a573d6000803e3d6000fd5b505060405133925073ffffffffffffffffffffffffffffffffffffffff841691507ff3ede7039176503a8ad1fe7cfaa29475a9dbe0cdcaf04ecf9a5c10570c47b10390600090a390505b92915050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610614573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610638919061170e565b61066e576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106766112a6565b60035473ffffffffffffffffffffffffffffffffffffffff838116911614156106fa576003805473ffffffffffffffffffffffffffffffffffffffff808216600090815260026020526040902080549091167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092558154169055610865565b73ffffffffffffffffffffffffffffffffffffffff838116600090815260026020908152604091829020548251808401909352600383527f4146330000000000000000000000000000000000000000000000000000000000918301919091529091848116911614610798576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b5060045473ffffffffffffffffffffffffffffffffffffffff838116911614156107fd57600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85161790555b73ffffffffffffffffffffffffffffffffffffffff828116600081815260026020526040808220805488861684529183208054929095167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790945591905281541690555b6040517fc75b5a7100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600060248301819052604483015283169063c75b5a7190606401600060405180830381600087803b1580156108dc57600080fd5b505af11580156108f0573d6000803e3d6000fd5b505050506109088260056112dd90919063ffffffff16565b508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f25e267469ba2ae82515be7b3d45df60bf8308343f0809e8cf7319058e2255ce660405160405180910390a3505050565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156109f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a16919061170e565b610a4c576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a546112ff565b565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015610ae0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b04919061170e565b610b3a576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a546113e0565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa158015610bcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf0919061170e565b6040518060400160405280600281526020017f435000000000000000000000000000000000000000000000000000000000000081525090610c5e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b50610c6a6005826114a0565b6040518060400160405280600381526020017f414634000000000000000000000000000000000000000000000000000000000081525090610cd8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b50438173ffffffffffffffffffffffffffffffffffffffff16633dc54b406040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4991906117a3565b14156040518060400160405280600381526020017f414631000000000000000000000000000000000000000000000000000000000081525090610db9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b506004805473ffffffffffffffffffffffffffffffffffffffff90811660009081526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081169487169485179091558454168317909355915190917fced6ab9afc868b3a088366f6631ae20752993b5cce5d5f0534ea5a59fcc57d5691a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610ed0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef4919061170e565b610f2a576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f19a1603900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301528416906319a1603990604401600060405180830381600087803b158015610f9b57600080fd5b505af1158015610faf573d6000803e3d6000fd5b50505050505050565b600354600090819073ffffffffffffffffffffffffffffffffffffffff165b73ffffffffffffffffffffffffffffffffffffffff81161561102d5773ffffffffffffffffffffffffffffffffffffffff9081166000908152600260205260409020541681611025816117eb565b925050610fd7565b50919050565b600061103f60056114cf565b905090565b60006105846005836114a0565b60006105846005836114d9565b60006110897f000000000000000000000000000000000000000000000000000000000000000061119b565b90508073ffffffffffffffffffffffffffffffffffffffff16638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156110d357600080fd5b505af11580156110e7573d6000803e3d6000fd5b50506004805473ffffffffffffffffffffffffffffffffffffffff908116600090815260026020526040902080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811692871692831790915582541617905550611156905060058261127d565b5060405173ffffffffffffffffffffffffffffffffffffffff8216907f9f69b6c10f6810213e055b0ba6bc0a4e2603f73c221aad77ea35da819cda7dc390600090a250565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260601b60148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f091505073ffffffffffffffffffffffffffffffffffffffff8116611278576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f455243313136373a20637265617465206661696c6564000000000000000000006044820152606401610456565b919050565b600061129f8373ffffffffffffffffffffffffffffffffffffffff84166114e5565b9392505050565b60035473ffffffffffffffffffffffffffffffffffffffff90811660009081526002602052604090205416610a5457610a5461105e565b600061129f8373ffffffffffffffffffffffffffffffffffffffff8416611534565b60005460ff1661136b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610456565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff161561144d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610456565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586113b63390565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600183016020526040812054151561129f565b6000610584825490565b600061129f8383611627565b600081815260018301602052604081205461152c57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610584565b506000610584565b6000818152600183016020526040812054801561161d576000611558600183611824565b855490915060009061156c90600190611824565b90508181146115d157600086600001828154811061158c5761158c61183b565b90600052602060002001549050808760000184815481106115af576115af61183b565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806115e2576115e261186a565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610584565b6000915050610584565b600082600001828154811061163e5761163e61183b565b9060005260206000200154905092915050565b6000806040838503121561166457600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff8116811461127857600080fd5b6000806000606084860312156116ac57600080fd5b6116b584611673565b92506116c360208501611673565b91506116d160408501611673565b90509250925092565b6000602082840312156116ec57600080fd5b61129f82611673565b60006020828403121561170757600080fd5b5035919050565b60006020828403121561172057600080fd5b8151801515811461129f57600080fd5b600060208083528351808285015260005b8181101561175d57858101830151858201604001528201611741565b8181111561176f576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b6000602082840312156117b557600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561181d5761181d6117bc565b5060010190565b600082821015611836576118366117bc565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220f1e9c81b8c3af2491c907ee66cf24e1bb76111b821db02df8f98dbb48b5ab5fa64736f6c634300080a0033608060405234801561001057600080fd5b50610e58806100206000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c806354fd4d5011610081578063c45a01551161005b578063c45a0155146101a4578063c75b5a71146101ca578063d1660f99146101dd57600080fd5b806354fd4d501461014f5780638129fc1c14610157578063c12c21c01461015f57600080fd5b80631afbb7a4116100b25780631afbb7a41461011d5780631cff79cd146101265780633dc54b401461014657600080fd5b806316128211146100d957806317d11a15146100ee57806319a160391461010a575b600080fd5b6100ec6100e7366004610b42565b6101f0565b005b6100f760035481565b6040519081526020015b60405180910390f35b6100ec610118366004610b8d565b61024c565b6100f760025481565b610139610134366004610bef565b6102c9565b6040516101019190610d49565b6100f760045481565b6100f7600181565b6100ec610344565b60015461017f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610101565b60005461017f9062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b6100ec6101d8366004610d5c565b610494565b6100ec6101eb366004610d8f565b61053d565b60015473ffffffffffffffffffffffffffffffffffffffff163314610241576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600291909155600355565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1633146102a3576040517fb126b84800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102c573ffffffffffffffffffffffffffffffffffffffff83168260006105b4565b5050565b60015460609073ffffffffffffffffffffffffffffffffffffffff16331461031d576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033d73ffffffffffffffffffffffffffffffffffffffff8416836107b4565b9392505050565b600054610100900460ff1661035f5760005460ff1615610363565b303b155b6103f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600054610100900460ff1615801561043357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000166101011790555b600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16336201000002179055801561049157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b50565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1633146104eb576040517fb126b84800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff949094169390931790925560025560035543600455565b60015473ffffffffffffffffffffffffffffffffffffffff16331461058e576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105af73ffffffffffffffffffffffffffffffffffffffff841683836107f6565b505050565b80158061065457506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015284169063dd62ed3e90604401602060405180830381865afa15801561062e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106529190610dcb565b155b6106e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e63650000000000000000000060648201526084016103eb565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526105af9084907f095ea7b300000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261084c565b606061033d83836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250610958565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526105af9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401610732565b60006108ae826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166109589092919063ffffffff16565b8051909150156105af57808060200190518101906108cc9190610de4565b6105af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016103eb565b6060610967848460008561096f565b949350505050565b606082471015610a01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016103eb565b843b610a69576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016103eb565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051610a929190610e06565b60006040518083038185875af1925050503d8060008114610acf576040519150601f19603f3d011682016040523d82523d6000602084013e610ad4565b606091505b5091509150610ae4828286610aef565b979650505050505050565b60608315610afe57508161033d565b825115610b0e5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103eb9190610d49565b60008060408385031215610b5557600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff81168114610b8857600080fd5b919050565b60008060408385031215610ba057600080fd5b610ba983610b64565b9150610bb760208401610b64565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215610c0257600080fd5b610c0b83610b64565b9150602083013567ffffffffffffffff80821115610c2857600080fd5b818501915085601f830112610c3c57600080fd5b813581811115610c4e57610c4e610bc0565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715610c9457610c94610bc0565b81604052828152886020848701011115610cad57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b83811015610cea578181015183820152602001610cd2565b83811115610cf9576000848401525b50505050565b60008151808452610d17816020860160208601610ccf565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061033d6020830184610cff565b600080600060608486031215610d7157600080fd5b610d7a84610b64565b95602085013595506040909401359392505050565b600080600060608486031215610da457600080fd5b610dad84610b64565b9250610dbb60208501610b64565b9150604084013590509250925092565b600060208284031215610ddd57600080fd5b5051919050565b600060208284031215610df657600080fd5b8151801515811461033d57600080fd5b60008251610e18818460208701610ccf565b919091019291505056fea2646970667358221220448e7046078cd668c09328d857e534e2aab6cdc0e691d3d4f2c8baae8e084b1364736f6c634300080a003360c06040523480156200001157600080fd5b506040516200162738038062001627833981016040819052620000349162000177565b60408051808201909152600281526105a360f41b60208201526001600160a01b038216620000805760405162461bcd60e51b8152600401620000779190620001a9565b60405180910390fd5b50806001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e6919062000177565b6001600160a01b03166080816001600160a01b031681525050806001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200013e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000164919062000177565b6001600160a01b031660a0525062000201565b6000602082840312156200018a57600080fd5b81516001600160a01b0381168114620001a257600080fd5b9392505050565b600060208083528351808285015260005b81811015620001d857858101830151858201604001528201620001ba565b81811115620001eb576000604083870101525b50601f01601f1916929092016040019392505050565b60805160a0516113c2620002656000396000818161021f0152818161036401526106d501526000818160af0152818161012a015281816104420152818161056e015281816107b301528181610aa601528181610b890152610c6701526113c26000f3fe60806040526004361061005e5760003560e01c80635869dba8116100435780635869dba814610199578063deecfbc9146101bb578063e79a4089146101ce57600080fd5b80634f0e0ef31461011857806354fd4d501461017657600080fd5b366101135760408051808201909152600381527f574732000000000000000000000000000000000000000000000000000000000060208201523373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b60405180910390fd5b50005b600080fd5b34801561012457600080fd5b5061014c7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561018257600080fd5b5061018b600181565b60405190815260200161016d565b3480156101a557600080fd5b506101b96101b4366004611263565b6101ee565b005b6101b96101c936600461128f565b61031d565b3480156101da57600080fd5b506101b96101e93660046112e1565b61068e565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201819052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa15801561027b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061029f9190611318565b6040518060400160405280600281526020017f43500000000000000000000000000000000000000000000000000000000000008152509061030d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b506103188383610a77565b505050565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808516600483015284917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa1580156103ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103d19190611318565b6040518060400160405280600281526020017f52500000000000000000000000000000000000000000000000000000000000008152509061043f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e6919061133a565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600381526020017f57473100000000000000000000000000000000000000000000000000000000008152509061056b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156105d457600080fd5b505af11580156105e8573d6000803e3d6000fd5b50505050506105f78434610b3c565b6040517f9aa5d46200000000000000000000000000000000000000000000000000000000815234600482015273ffffffffffffffffffffffffffffffffffffffff848116602483015261ffff84166044830152851690639aa5d46290606401600060405180830381600087803b15801561067057600080fd5b505af1158015610684573d6000803e3d6000fd5b5050505050505050565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808516600483015284917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa15801561071e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107429190611318565b6040518060400160405280600281526020017f5250000000000000000000000000000000000000000000000000000000000000815250906107b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610833573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610857919061133a565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600381526020017f5747310000000000000000000000000000000000000000000000000000000000815250906108dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b506109703330858773ffffffffffffffffffffffffffffffffffffffff166336dda7d56040518163ffffffff1660e01b8152600401602060405180830381865afa15801561092e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610952919061133a565b73ffffffffffffffffffffffffffffffffffffffff16929190610cd4565b6040517f05fe138b0000000000000000000000000000000000000000000000000000000081526004810184905230602482015260009073ffffffffffffffffffffffffffffffffffffffff8616906305fe138b906044016020604051808303816000875af11580156109e6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0a9190611357565b9050610a168382610a77565b8273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f6de63bb986f2779478e384365c03cc2e62f06b453856acca87d5a519ce02664960405160405180910390a35050505050565b6040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632e1a7d4d90602401600060405180830381600087803b158015610aff57600080fd5b505af1158015610b13573d6000803e3d6000fd5b50610b389250505073ffffffffffffffffffffffffffffffffffffffff831682610d6f565b5050565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015282917f00000000000000000000000000000000000000000000000000000000000000009091169063dd62ed3e90604401602060405180830381865afa158015610bd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf69190611357565b1015610b38576040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303816000875af1158015610cb0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103189190611318565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052610d69908590610ec9565b50505050565b80471015610dd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610107565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114610e33576040519150601f19603f3d011682016040523d82523d6000602084013e610e38565b606091505b5050905080610318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610107565b6000610f2b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16610fd59092919063ffffffff16565b8051909150156103185780806020019051810190610f499190611318565b610318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610107565b6060610fe48484600085610fee565b90505b9392505050565b606082471015611080576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610107565b843b6110e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610107565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516111119190611370565b60006040518083038185875af1925050503d806000811461114e576040519150601f19603f3d011682016040523d82523d6000602084013e611153565b606091505b509150915061116382828661116e565b979650505050505050565b6060831561117d575081610fe7565b82511561118d5782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b60005b838110156111dc5781810151838201526020016111c4565b83811115610d695750506000910152565b602081526000825180602084015261120c8160408501602087016111c1565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461126057600080fd5b50565b6000806040838503121561127657600080fd5b82356112818161123e565b946020939093013593505050565b6000806000606084860312156112a457600080fd5b83356112af8161123e565b925060208401356112bf8161123e565b9150604084013561ffff811681146112d657600080fd5b809150509250925092565b6000806000606084860312156112f657600080fd5b83356113018161123e565b92506020840135915060408401356112d68161123e565b60006020828403121561132a57600080fd5b81518015158114610fe757600080fd5b60006020828403121561134c57600080fd5b8151610fe78161123e565b60006020828403121561136957600080fd5b5051919050565b600082516113828184602087016111c1565b919091019291505056fea264697066735822122017fd7fc76e4a1efcf24b78a3417fad7ab9576f0a23aa756ddb211c5e2227aa9564736f6c634300080a003360806040523480156200001157600080fd5b5060405162002b8038038062002b80833981016040819052620000349162000122565b6001600160a01b0381166200008f5760405162461bcd60e51b815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640160405180910390fd5b6001600160a01b03811660008181526001602052604080822080546001600160601b0319166b204fce5e3e2502611000000090811790915590517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91620000f99190815260200190565b60405180910390a350600680546001600160a81b031916336101000260ff191617905562000154565b6000602082840312156200013557600080fd5b81516001600160a01b03811681146200014d57600080fd5b9392505050565b612a1c80620001646000396000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c806370a08231116100f9578063b4b5ea5711610097578063dd62ed3e11610071578063dd62ed3e14610503578063e7a324dc14610555578063f1127ed81461057c578063f2fde38b146105ee57600080fd5b8063b4b5ea57146104ca578063c3cda520146104dd578063d505accf146104f057600080fd5b806395d89b41116100d357806395d89b411461045b5780639742ca4614610497578063a9059cbb146104aa578063b0660c3d146104bd57600080fd5b806370a08231146103c7578063782d6fe11461040b5780637ecebe001461043b57600080fd5b806330adf81f11610166578063481c6a7511610140578063481c6a751461031e578063587cde1e146103435780635c19a95c146103795780636fcfff451461038c57600080fd5b806330adf81f14610298578063313ce567146102bf578063349dc329146102d957600080fd5b806320606b701161019757806320606b70146102545780632185810b1461027b57806323b872dd1461028557600080fd5b806306fdde03146101be578063095ea7b31461021057806318160ddd14610233575b600080fd5b6101fa6040518060400160405280600781526020017f47656172626f780000000000000000000000000000000000000000000000000081525081565b60405161020791906124a3565b60405180910390f35b61022361021e36600461253f565b610601565b6040519015158152602001610207565b6102466b204fce5e3e2502611000000081565b604051908152602001610207565b6102467f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b61028361070d565b005b610223610293366004612569565b6107ee565b6102467f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b6102c7601281565b60405160ff9091168152602001610207565b6007546102f99073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610207565b6006546102f990610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6102f96103513660046125a5565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6102836103873660046125a5565b61098a565b6103b261039a3660046125a5565b60046020526000908152604090205463ffffffff1681565b60405163ffffffff9091168152602001610207565b6102466103d53660046125a5565b73ffffffffffffffffffffffffffffffffffffffff166000908152600160205260409020546bffffffffffffffffffffffff1690565b61041e61041936600461253f565b610997565b6040516bffffffffffffffffffffffff9091168152602001610207565b6102466104493660046125a5565b60056020526000908152604090205481565b6101fa6040518060400160405280600481526020017f474541520000000000000000000000000000000000000000000000000000000081525081565b6102836104a53660046125a5565b610cae565b6102236104b836600461253f565b610e20565b6006546102239060ff1681565b61041e6104d83660046125a5565b610e5c565b6102836104eb3660046125d1565b610efa565b6102836104fe366004612629565b611310565b610246610511366004612693565b73ffffffffffffffffffffffffffffffffffffffff9182166000908152602081815260408083209390941682529190915220546bffffffffffffffffffffffff1690565b6102467fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b6105c561058a3660046126c6565b600360209081526000928352604080842090915290825290205463ffffffff81169064010000000090046bffffffffffffffffffffffff1682565b6040805163ffffffff90931683526bffffffffffffffffffffffff909116602083015201610207565b6102836105fc3660046125a5565b61187a565b6000807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83141561063f57506bffffffffffffffffffffffff610664565b6106618360405180606001604052806025815260200161285260259139611a15565b90505b3360008181526020818152604080832073ffffffffffffffffffffffffffffffffffffffff89168085529083529281902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff871690811790915590519081529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a360019150505b92915050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314610798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e616765720060448201526064015b60405180910390fd5b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f795b0e16c8da9807b0a215f3749bd6dbcc49fc0472183f4e446abb7dcbd9d00790600090a1565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081815260408083203380855290835281842054825160608101909352602580845291936bffffffffffffffffffffffff909116928592610856928892919061285290830139611a15565b90508673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156108a257506bffffffffffffffffffffffff82811614155b156109725760006108cc83836040518060600160405280603d8152602001612974603d9139611a67565b73ffffffffffffffffffffffffffffffffffffffff898116600081815260208181526040808320948a168084529482529182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff87169081179091559151918252939450919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505b61097d878783611ad5565b5060019695505050505050565b6109943382611e9c565b50565b6000438210610a28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f476561723a3a6765745072696f72566f7465733a206e6f74207965742064657460448201527f65726d696e656400000000000000000000000000000000000000000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff831660009081526004602052604090205463ffffffff1680610a63576000915050610707565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604081208491610a95600185612735565b63ffffffff90811682526020820192909252604001600020541611610b1b5773ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812090610ae5600184612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff1691506107079050565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020908152604080832083805290915290205463ffffffff16831015610b63576000915050610707565b600080610b71600184612735565b90505b8163ffffffff168163ffffffff161115610c565760006002610b968484612735565b610ba0919061275a565b610baa9083612735565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260036020908152604080832063ffffffff8581168552908352928190208151808301909252549283168082526401000000009093046bffffffffffffffffffffffff1691810191909152919250871415610c2a576020015194506107079350505050565b805163ffffffff16871115610c4157819350610c4f565b610c4c600183612735565b92505b5050610b74565b5073ffffffffffffffffffffffffffffffffffffffff8516600090815260036020908152604080832063ffffffff909416835292905220546bffffffffffffffffffffffff6401000000009091041691505092915050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314610d34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e6167657200604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff8116610db1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640161078f565b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f2f834d1c8c4b956018fff5faca4d99868ae635487424d9c265c257ccbc698c6a90600090a250565b600080610e45836040518060600160405280602681526020016128a760269139611a15565b9050610e52338583611ad5565b5060019392505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526004602052604081205463ffffffff1680610e94576000610ef3565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812090610ec5600184612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b9392505050565b604080518082018252600781527f47656172626f780000000000000000000000000000000000000000000000000060209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f028ef9f797075f74ac647c65fde04fb0f128c2d59fd40f45732269917642fd4681840152466060820152306080808301919091528351808303909101815260a0820184528051908301207fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60c083015273ffffffffffffffffffffffffffffffffffffffff8a1660e08301526101008201899052610120808301899052845180840390910181526101408301909452835193909201929092207f19010000000000000000000000000000000000000000000000000000000000006101608401526101628301829052610182830181905290916000906101a201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa1580156110d8573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166111a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f476561723a3a64656c656761746542795369673a20696e76616c69642073696760448201527f6e61747572650000000000000000000000000000000000000000000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff811660009081526005602052604081208054916111d7836127a4565b919050558914611269576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f476561723a3a64656c656761746542795369673a20696e76616c6964206e6f6e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161078f565b874211156112f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f476561723a3a64656c656761746542795369673a207369676e6174757265206560448201527f7870697265640000000000000000000000000000000000000000000000000000606482015260840161078f565b611303818b611e9c565b505050505b505050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86141561134d57506bffffffffffffffffffffffff611372565b61136f8660405180606001604052806024815260200161291c60249139611a15565b90505b604080518082018252600781527f47656172626f780000000000000000000000000000000000000000000000000060209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f028ef9f797075f74ac647c65fde04fb0f128c2d59fd40f45732269917642fd4681840152466060820152306080808301919091528351808303909101815260a0909101835280519082012073ffffffffffffffffffffffffffffffffffffffff8b166000908152600590925291812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918c918c918c919086611472836127a4565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810188905260e001604051602081830303815290604052805190602001209050600082826040516020016115199291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff8b169284019290925260608301899052608083018890529092509060019060a0016020604051602081039080840390855afa1580156115a2573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661164a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a7065726d69743a20696e76616c6964207369676e617475726500604482015260640161078f565b8b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146116df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f476561723a3a7065726d69743a20756e617574686f72697a6564000000000000604482015260640161078f565b88421115611749576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a7065726d69743a207369676e6174757265206578706972656400604482015260640161078f565b846000808e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508a73ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258760405161186491906bffffffffffffffffffffffff91909116815260200190565b60405180910390a3505050505050505050505050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314611900576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e6167657200604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff811661197d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640161078f565b60065460405173ffffffffffffffffffffffffffffffffffffffff80841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36006805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b6000816c010000000000000000000000008410611a5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b509192915050565b6000836bffffffffffffffffffffffff16836bffffffffffffffffffffffff1611158290611ac2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b50611acd83856127dd565b949350505050565b60065460ff1680611b025750600654610100900473ffffffffffffffffffffffffffffffffffffffff1633145b80611b24575060075473ffffffffffffffffffffffffffffffffffffffff1633145b611b8a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f476561723a3a7472616e73666572732061726520666f7262696464656e000000604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff8316611c2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603c60248201527f476561723a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260448201527f616e736665722066726f6d20746865207a65726f206164647265737300000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff8216611cd0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f476561723a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260448201527f616e7366657220746f20746865207a65726f2061646472657373000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260016020908152604091829020548251606081019093526036808452611d2d936bffffffffffffffffffffffff90921692859291906129b190830139611a67565b73ffffffffffffffffffffffffffffffffffffffff848116600090815260016020908152604080832080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff968716179055928616825290829020548251606081019093526030808452611dbf949190911692859290919061287790830139611f50565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260409182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff968716179055905193851684529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a373ffffffffffffffffffffffffffffffffffffffff808416600090815260026020526040808220548584168352912054611e9792918216911683611fc1565b505050565b73ffffffffffffffffffffffffffffffffffffffff808316600081815260026020818152604080842080546001845282862054949093528787167fffffffffffffffffffffffff000000000000000000000000000000000000000084168117909155905191909516946bffffffffffffffffffffffff9092169391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4611f4a828483611fc1565b50505050565b600080611f5d8486612802565b9050846bffffffffffffffffffffffff16816bffffffffffffffffffffffff1610158390611fb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b50949350505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561200b57506000816bffffffffffffffffffffffff16115b15611e975773ffffffffffffffffffffffffffffffffffffffff8316156120fd5773ffffffffffffffffffffffffffffffffffffffff831660009081526004602052604081205463ffffffff1690816120655760006120c4565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812090612096600185612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b905060006120eb82856040518060600160405280602881526020016128cd60289139611a67565b90506120f9868484846121e2565b5050505b73ffffffffffffffffffffffffffffffffffffffff821615611e975773ffffffffffffffffffffffffffffffffffffffff821660009081526004602052604081205463ffffffff1690816121525760006121b1565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812090612183600185612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b905060006121d882856040518060600160405280602781526020016128f560279139611f50565b9050611308858484845b60006122064360405180606001604052806034815260200161294060349139612465565b905060008463ffffffff1611801561226d575073ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812063ffffffff831691612251600188612735565b63ffffffff908116825260208201929092526040016000205416145b156123035773ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812083916122a4600188612735565b63ffffffff168152602081019190915260400160002080546bffffffffffffffffffffffff92909216640100000000027fffffffffffffffffffffffffffffffff000000000000000000000000ffffffff9092169190911790556123fe565b60408051808201825263ffffffff80841682526bffffffffffffffffffffffff808616602080850191825273ffffffffffffffffffffffffffffffffffffffff8b166000908152600382528681208b8616825290915294909420925183549451909116640100000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009094169116179190911790556123a5846001612832565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260046020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff929092169190911790555b604080516bffffffffffffffffffffffff80861682528416602082015273ffffffffffffffffffffffffffffffffffffffff8716917fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724910160405180910390a25050505050565b6000816401000000008410611a5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91905b600060208083528351808285015260005b818110156124d0578581018301518582016040015282016124b4565b818111156124e2576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461253a57600080fd5b919050565b6000806040838503121561255257600080fd5b61255b83612516565b946020939093013593505050565b60008060006060848603121561257e57600080fd5b61258784612516565b925061259560208501612516565b9150604084013590509250925092565b6000602082840312156125b757600080fd5b610ef382612516565b803560ff8116811461253a57600080fd5b60008060008060008060c087890312156125ea57600080fd5b6125f387612516565b9550602087013594506040870135935061260f606088016125c0565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a03121561264457600080fd5b61264d88612516565b965061265b60208901612516565b95506040880135945060608801359350612677608089016125c0565b925060a0880135915060c0880135905092959891949750929550565b600080604083850312156126a657600080fd5b6126af83612516565b91506126bd60208401612516565b90509250929050565b600080604083850312156126d957600080fd5b6126e283612516565b9150602083013563ffffffff811681146126fb57600080fd5b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600063ffffffff8381169083168181101561275257612752612706565b039392505050565b600063ffffffff80841680612798577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156127d6576127d6612706565b5060010190565b60006bffffffffffffffffffffffff8381169083168181101561275257612752612706565b60006bffffffffffffffffffffffff80831681851680830382111561282957612829612706565b01949350505050565b600063ffffffff8083168185168083038211156128295761282961270656fe476561723a3a617070726f76653a20616d6f756e7420657863656564732039362062697473476561723a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e74206f766572666c6f7773476561723a3a7472616e736665723a20616d6f756e7420657863656564732039362062697473476561723a3a5f6d6f7665566f7465733a20766f746520616d6f756e7420756e646572666c6f7773476561723a3a5f6d6f7665566f7465733a20766f746520616d6f756e74206f766572666c6f7773476561723a3a7065726d69743a20616d6f756e7420657863656564732039362062697473476561723a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d62657220657863656564732033322062697473476561723a3a7472616e7366657246726f6d3a207472616e7366657220616d6f756e742065786365656473207370656e64657220616c6c6f77616e6365476561723a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e7420657863656564732062616c616e6365a26469706673582212201b84fd7789a35c022f692420863210a30e82d2405659f5a28275d433fa53467f64736f6c634300080a003360806040526016805460ff1916905534801561001a57600080fd5b506040516110a73803806110a7833981016040819052610039916100b6565b600080546001600160a01b038085166001600160a01b0319928316179092556003805492841692909116919091179055610080600a6b033b2e3c9fd0803ce80000006100e9565b60075550506b033b2e3c9fd0803ce800000060155561010b565b80516001600160a01b03811681146100b157600080fd5b919050565b600080604083850312156100c957600080fd5b6100d28361009a565b91506100e06020840161009a565b90509250929050565b60008261010657634e487b7160e01b600052601260045260246000fd5b500490565b610f8d8061011a6000396000f3fe608060405234801561001057600080fd5b50600436106102e95760003560e01c806367c99d5811610191578063c5f956af116100e3578063dbcb313b11610097578063f11a648711610071578063f11a648714610320578063f3fdb15a146105f1578063fe14112d1461061157600080fd5b8063dbcb313b146105d6578063e941fa78146105df578063ef8d9603146105e857600080fd5b8063cb3905e1116100c8578063cb3905e1146105c4578063cf33d95514610320578063d0efe753146105cd57600080fd5b8063c5f956af14610588578063ca9505e4146105a857600080fd5b80639aa5d46211610145578063b6ac642a1161011f578063b6ac642a14610567578063bb04b19314610567578063bf28068b1461057557600080fd5b80639aa5d46214610544578063a4e8273e14610557578063b3554a0a1461055e57600080fd5b8063788c6bfe11610176578063788c6bfe146104ef5780638456cb591461050157806396df5dc01461053157600080fd5b806367c99d58146104de57806374375359146104e757600080fd5b806336dda7d51161024a5780634d778ad1116101fe57806354fd4d50116101d857806354fd4d50146104c05780635c975abb146104c8578063609ae317146104d557600080fd5b80634d778ad114610491578063532fe502146104a45780635427c938146104ad57600080fd5b80633f4ba83a1161022f5780633f4ba83a1461045257806345d31f9d1461047f5780634c19386c1461048857600080fd5b806336dda7d51461040f5780633e163df01461042f57600080fd5b80632495a599116102a157806329f3d3b61161028657806329f3d3b6146103b35780632a3354c9146103bc5780632e97ca21146103dc57600080fd5b80632495a599146103735780632954018c1461039357600080fd5b8063078c4781116102d2578063078c4781146103205780630fce70fb146103335780631e16e4fc1461033b57600080fd5b8063030dbb04146102ee57806305fe138b1461030a575b600080fd5b6102f760105481565b6040519081526020015b60405180910390f35b6102f7610318366004610ce8565b600092915050565b61033161032e366004610d14565b50565b005b6015546102f7565b61034e610349366004610d2f565b610618565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610301565b60035461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b60005461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6102f760095481565b600a5461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103ff6103ea366004610d14565b60066020526000908152604090205460ff1681565b6040519015158152602001610301565b60055461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103ff61043d366004610d14565b60146020526000908152604090205460ff1681565b610331601680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b6102f760075481565b6102f760015481565b6102f761049f366004610d2f565b61064f565b6102f760115481565b6102f76104bb366004610d2f565b61066d565b6102f7600181565b6016546103ff9060ff1681565b6102f760085481565b6102f7600d5481565b6102f7610685565b6b033b2e3c9fd0803ce80000006102f7565b610331601680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b61033161053f366004610d2f565b601555565b610331610552366004610d48565b505050565b60016102f7565b6102f7600e5481565b61033161032e366004610d2f565b610331610583366004610ce8565b61071d565b60135461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103316105b6366004610d7d565b600b92909255600c55600d55565b6102f7600c5481565b6102f7600b5481565b6102f760155481565b6102f7600f5481565b6102f760025481565b60125461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b60006102f7565b6004818154811061062857600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6000610667826b033b2e3c9fd0803ce800000061077a565b92915050565b6000610667826b033b2e3c9fd0803ce80000006108e9565b6003546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156106f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107189190610da9565b905090565b6009829055600a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691909117909155600354610776911682846109fe565b5050565b60408051808201909152600281527f4d330000000000000000000000000000000000000000000000000000000000006020820152600090826107f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b60405180910390fd5b506000610800600284610e72565b90506b033b2e3c9fd0803ce8000000610839827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610ead565b6108439190610e72565b8411156040518060400160405280600281526020017f4d31000000000000000000000000000000000000000000000000000000000000815250906108b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b5082816108cd6b033b2e3c9fd0803ce800000087610ec4565b6108d79190610f01565b6108e19190610e72565b949350505050565b60008215806108f6575081155b1561090357506000610667565b8161091b60026b033b2e3c9fd0803ce8000000610e72565b610945907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610ead565b61094f9190610e72565b8311156040518060400160405280600281526020017f4d31000000000000000000000000000000000000000000000000000000000000815250906109c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b506b033b2e3c9fd0803ce80000006109d9600282610e72565b6109e38486610ec4565b6109ed9190610f01565b6109f79190610e72565b9392505050565b6040805173ffffffffffffffffffffffffffffffffffffffff848116602483015260448083018590528351808403909101815260649092018352602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65649084015261055292869291600091610ac9918516908490610b73565b8051909150156105525780806020019051810190610ae79190610f19565b610552576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016107e9565b60606108e1848460008585843b610be6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107e9565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051610c0f9190610f3b565b60006040518083038185875af1925050503d8060008114610c4c576040519150601f19603f3d011682016040523d82523d6000602084013e610c51565b606091505b5091509150610c61828286610c6c565b979650505050505050565b60608315610c7b5750816109f7565b825115610c8b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ce357600080fd5b919050565b60008060408385031215610cfb57600080fd5b82359150610d0b60208401610cbf565b90509250929050565b600060208284031215610d2657600080fd5b6109f782610cbf565b600060208284031215610d4157600080fd5b5035919050565b600080600060608486031215610d5d57600080fd5b83359250610d6d60208501610cbf565b9150604084013590509250925092565b600080600060608486031215610d9257600080fd5b505081359360208301359350604090920135919050565b600060208284031215610dbb57600080fd5b5051919050565b60005b83811015610ddd578181015183820152602001610dc5565b83811115610dec576000848401525b50505050565b6020815260008251806020840152610e11816040850160208701610dc2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082610ea8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600082821015610ebf57610ebf610e43565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610efc57610efc610e43565b500290565b60008219821115610f1457610f14610e43565b500190565b600060208284031215610f2b57600080fd5b815180151581146109f757600080fd5b60008251610f4d818460208701610dc2565b919091019291505056fea26469706673582212204edb887d94928b3914f60ab48df0182da9eb30ddbb7021b164cc728b60a655d564736f6c634300080a003360e06040523480156200001157600080fd5b5060405162013af238038062013af2833981016040819052620000349162000630565b826001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000073573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000999190620007bf565b620000a433620004ab565b6001600160a01b038116608081905260408051630873769560e01b815290516308737695916004808201926020929091908290030181865afa158015620000ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001159190620007bf565b6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000153573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001799190620007bf565b6001600160a01b0390811660a052841660c0525060405183906200019d9062000519565b6001600160a01b039091168152602001604051809103906000f080158015620001ca573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b0392909216918217905560608301516080840151604051620002029062000527565b6001600160a01b03938416815292909116602083015215156040820152606001604051809103906000f0801580156200023f573d6000803e3d6000fd5b50600280546001600160a01b0319166001600160a01b0392909216919091179055604051600090620002746020820162000535565b601f1982820381018352601f909101166040819052600154600254620002b0926001600160a01b039283169291909116908790602001620007e6565b60408051601f1981840301815290829052620002d09291602001620008e8565b60408051601f19818403018152919052905060006200035982848151602092830120604080517fff00000000000000000000000000000000000000000000000000000000000000818601523060601b6001600160601b03191660218201526035810193909352605580840192909252805180840390920182526075909201909152805191012090565b600154604051634fafc35760e11b81526001600160a01b038084166004830152929350911690639f5f86ae90602401600060405180830381600087803b158015620003a357600080fd5b505af1158015620003b8573d6000803e3d6000fd5b50505050620003ce8284620004fb60201b60201c565b600380546001600160a01b0319166001600160a01b0383811691821790925560015460408051630304b08760e61b81529051919093169263c12c21c09160048083019260209291908290030181865afa15801562000430573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004569190620007bf565b6001600160a01b031614620004a05760405162461bcd60e51b815260206004820152600c60248201526b496e636f727265637420434d60a01b604482015260640160405180910390fd5b505050505062000909565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008183516020850134f59050803b6200051457600080fd5b505050565b6158e8806200243683390190565b615e978062007d1e83390190565b615f3d806200dbb583390190565b6001600160a01b03811681146200055957600080fd5b50565b8051620005698162000543565b919050565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b0381118282101715620005a957620005a96200056e565b60405290565b604080519081016001600160401b0381118282101715620005a957620005a96200056e565b604051601f8201601f191681016001600160401b0381118282101715620005ff57620005ff6200056e565b604052919050565b80516001600160801b03811681146200056957600080fd5b805180151581146200056957600080fd5b6000806000606084860312156200064657600080fd5b8351620006538162000543565b602085810151919450906001600160401b03808211156200067357600080fd5b9086019060a082890312156200068857600080fd5b6200069262000584565b6200069d8362000607565b8152620006ac84840162000607565b8482015260408084015183811115620006c457600080fd5b8401601f81018b13620006d657600080fd5b805184811115620006eb57620006eb6200056e565b620006fb878260051b01620005d4565b818152878101955060069190911b82018701908c8211156200071c57600080fd5b918701915b818310156200077e5783838e0312156200073b5760008081fd5b62000745620005af565b8351620007528162000543565b81528389015161ffff811681146200076a5760008081fd5b818a01528652948701949183019162000721565b8484015250620007939050606085016200055c565b6060830152620007a6608085016200061f565b6080830152979097015195989697509495945050505050565b600060208284031215620007d257600080fd5b8151620007df8162000543565b9392505050565b600060018060a01b0380861683526020818616818501526040606081860152610100850160018060801b038088511660608801528084890151166080880152508187015160a080880152818151808452610120890191508583019350600092505b808310156200087857835180518816835286015161ffff168683015292850192600192909201919084019062000847565b5060608901516001600160a01b031660c0890152608090980151151560e0909701969096525094979650505050505050565b6000815160005b81811015620008cd5760208185018101518683015201620008b1565b81811115620008dd576000828601525b509290920192915050565b600062000901620008fa8386620008aa565b84620008aa565b949350505050565b60805160a05160c051611ad3620009636000396000818161010a0152610ea00152600081816103790152610b170152600081816101680152818161068c01528181610a4d01528181610b860152610c190152611ad36000f3fe6080604052600436106100f35760003560e01c80638da5cb5b1161008a578063ebf0c71711610059578063ebf0c71714610367578063f2fde38b1461039b578063f4747c58146103bb578063f9aa028a146103db57600080fd5b80638da5cb5b1461025a57806394ca2cb5146102855780639c4ae2d014610327578063c12c21c01461033a57600080fd5b80633e0b1a23116100c65780633e0b1a23146101ce5780634ef501ac146101e3578063715018a614610230578063805abe6a1461024557600080fd5b806316f0115b146100f85780632954018c146101565780632f7a18811461018a578063318d0d10146101b7575b600080fd5b34801561010457600080fd5b5061012c7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561016257600080fd5b5061012c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561019657600080fd5b5060025461012c9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156101c357600080fd5b506101cc610408565b005b3480156101da57600080fd5b506101cc610498565b3480156101ef57600080fd5b506102036101fe366004611726565b610521565b6040805173ffffffffffffffffffffffffffffffffffffffff93841681529290911660208301520161014d565b34801561023c57600080fd5b506101cc610567565b34801561025157600080fd5b506101cc6105f2565b34801561026657600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff1661012c565b34801561029157600080fd5b5061012c6102a03660046117e6565b8151602092830120604080517fff00000000000000000000000000000000000000000000000000000000000000818601523060601b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660218201526035810193909352605580840192909252805180840390920182526075909201909152805191012090565b6101cc6103353660046117e6565b6107d8565b34801561034657600080fd5b5060015461012c9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561037357600080fd5b5061012c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103a757600080fd5b506101cc6103b63660046118c0565b6107f5565b3480156103c757600080fd5b506101cc6103d63660046118e4565b610925565b3480156103e757600080fd5b5060035461012c9073ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff16331461048e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b610496610a49565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610519576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b61048e610b82565b6004818154811061053157600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff91821692501682565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b61049660006116b1565b60005473ffffffffffffffffffffffffffffffffffffffff163314610673576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b3073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106f5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071991906119c4565b73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610763573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078791906119c4565b73ffffffffffffffffffffffffffffffffffffffff1614156107d5576040517fbdebb83f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33ff5b60008183516020850134f59050803b6107f057600080fd5b505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b73ffffffffffffffffffffffffffffffffffffffff8116610919576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610485565b610922816116b1565b50565b60005473ffffffffffffffffffffffffffffffffffffffff1633146109a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b805160005b818110156107f05760048382815181106109c7576109c76119e1565b602090810291909101810151825460018082018555600094855293839020825160029092020180547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff938416178255929093015192840180549092169216919091179055016109ab565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ab6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ada91906119c4565b6040517ff2fde38b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301529192509082169063f2fde38b90602401600060405180830381600087803b158015610b6757600080fd5b505af1158015610b7b573d6000803e3d6000fd5b5050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1391906119c4565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca691906119c4565b60045490915060005b81811015610dd4576003546004805473ffffffffffffffffffffffffffffffffffffffff90921691637bccacee919084908110610cee57610cee6119e1565b906000526020600020906002020160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660048481548110610d3357610d336119e1565b600091825260209091206002909102015460405160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b158015610db157600080fd5b505af1158015610dc5573d6000803e3d6000fd5b50505050806001019050610caf565b506001546040517fe26b2f6300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529084169063e26b2f6390602401600060405180830381600087803b158015610e4257600080fd5b505af1158015610e56573d6000803e3d6000fd5b50506001546040517fcf33d95500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201527f0000000000000000000000000000000000000000000000000000000000000000909116925063cf33d9559150602401600060405180830381600087803b158015610ee857600080fd5b505af1158015610efc573d6000803e3d6000fd5b50505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f919190611a10565b905060005b818110156116ab576003546040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810183905260009173ffffffffffffffffffffffffffffffffffffffff1690635094cb4f90602401602060405180830381865afa15801561100e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103291906119c4565b6001546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80841660048301529293506000929091169063fdd5764590602401602060405180830381865afa1580156110a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110cc91906119c4565b905060008173ffffffffffffffffffffffffffffffffffffffff1663ce30bbdb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561111b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113f9190611a29565b9050600c81601081111561115557611155611a4a565b14156116225760008273ffffffffffffffffffffffffffffffffffffffff166320b2c1516040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111cc91906119c4565b905060008373ffffffffffffffffffffffffffffffffffffffff1663927188d96040518163ffffffff1660e01b8152600401602060405180830381865afa15801561121b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123f91906119c4565b905060008473ffffffffffffffffffffffffffffffffffffffff166399253ac06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561128e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b291906119c4565b6040517f9dcb511a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152919250908a169063e8a97a3e9083908390639dcb511a90602401602060405180830381865afa15801561132c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135091906119c4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156113bd57600080fd5b505af11580156113d1573d6000803e3d6000fd5b50506040517f9dcb511a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301528c16925063e8a97a3e915085908390639dcb511a90602401602060405180830381865afa15801561144b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061146f91906119c4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156114dc57600080fd5b505af11580156114f0573d6000803e3d6000fd5b50506003546001546040517f7832743800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301529283169450633e7c88d69350879290911690637832743890602401602060405180830381865afa158015611573573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115979190611a79565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015261ffff166024820152604401600060405180830381600087803b15801561160657600080fd5b505af115801561161a573d6000803e3d6000fd5b505050505050505b600d81601081111561163657611636611a4a565b141561169d578173ffffffffffffffffffffffffffffffffffffffff16639b51ecd36040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561168457600080fd5b505af1158015611698573d6000803e3d6000fd5b505050505b836001019350505050610f96565b50505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561173857600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156117915761179161173f565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156117de576117de61173f565b604052919050565b600080604083850312156117f957600080fd5b823567ffffffffffffffff8082111561181157600080fd5b818501915085601f83011261182557600080fd5b81356020828211156118395761183961173f565b611869817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011601611797565b9250818352878183860101111561187f57600080fd5b8181850182850137600091830181019190915290969401359450505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461092257600080fd5b6000602082840312156118d257600080fd5b81356118dd8161189e565b9392505050565b600060208083850312156118f757600080fd5b823567ffffffffffffffff8082111561190f57600080fd5b818501915085601f83011261192357600080fd5b8135818111156119355761193561173f565b611943848260051b01611797565b818152848101925060069190911b83018401908782111561196357600080fd5b928401925b818410156119b957604084890312156119815760008081fd5b61198961176e565b84356119948161189e565b8152848601356119a38161189e565b8187015283526040939093019291840191611968565b979650505050505050565b6000602082840312156119d657600080fd5b81516118dd8161189e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215611a2257600080fd5b5051919050565b600060208284031215611a3b57600080fd5b8151601181106118dd57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060208284031215611a8b57600080fd5b815161ffff811681146118dd57600080fdfea264697066735822122090f5e4310a8b66bfdd7fdfbe64bc5b98570e7c1a415ffb0ced3c857cf6c5b14064736f6c634300080a00336101606040526000805462ff00001916620c00001790553480156200002357600080fd5b50604051620058e8380380620058e8833981016040819052620000469162000537565b806001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000085573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ab919062000537565b6000805460ff191690556001600160a01b038116620000dd57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200011c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000142919062000537565b6001600160a01b03166080816001600160a01b031681525050506000816001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200019d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c3919062000537565b6001600160a01b03831661010081905260e081905260408051632495a59960e01b81529051929350600092632495a599916004808201926020929091908290030181865afa1580156200021a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000240919062000537565b6001600160a01b03811660c05290506200025a8162000472565b816001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000299573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002bf919062000537565b6001600160a01b0316610120816001600160a01b031681525050816001600160a01b03166377532ed96040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000318573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033e919062000537565b6001600160a01b0316610140816001600160a01b031681525050816001600160a01b031663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000397573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003bd919062000537565b6001600001600a6101000a8154816001600160a01b0302191690836001600160a01b03160217905550816001600160a01b0316639068a8686040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000425573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044b919062000537565b6001600160a01b031660a0525050600380546001600160a01b031916331790555062000588565b6001600160a01b03811660009081526006602052604090205415620004aa57604051632e5a5c7760e01b815260040160405180910390fd5b61010060055410620004cf57604051631cbbe18560e01b815260040160405180910390fd5b600580546001600160a01b0383166000818152600660209081526040808320600190951b948590558483526004909152812091909155825491929062000515836200055e565b91905055505050565b6001600160a01b03811681146200053457600080fd5b50565b6000602082840312156200054a57600080fd5b815162000557816200051e565b9392505050565b60006000198214156200058157634e487b7160e01b600052601160045260246000fd5b5060010190565b60805160a05160c05160e051610100516101205161014051615248620006a0600039600081816107e20152818161371001526137c501526000818161052f01526136780152600081816103d301528181610e5701528181610ebb015281816124ff0152818161265a01528181612aa101528181612b8c01528181612c4e01528181612d0d0152613b8f015260006105a401526000818161062701528181610d2201528181610db301528181610e0001528181610e3601528181610f3f0152818161203a01528181612b6b015281816130ee015281816134dc015281816135a90152613fe601526000818161081c01528181610fe101526124c20152600081816107a80152818161118401526122cb01526152486000f3fe608060405234801561001057600080fd5b50600436106103415760003560e01c8063830aa745116101bd578063a70bc542116100f9578063e75538c7116100a2578063f9aa028a1161007c578063f9aa028a1461089d578063fdd57645146108bd578063fe47cde7146108f3578063ff6875431461091357600080fd5b8063e75538c714610864578063e958b70414610877578063f67c5bd01461088a57600080fd5b8063db7ceb80116100d3578063db7ceb8014610817578063dc2b21c11461083e578063e1998cf91461085157600080fd5b8063a70bc542146107ca578063c5e10eef146107dd578063d48bfca71461080457600080fd5b806394cf073a116101665780639f5f86ae116101405780639f5f86ae146107745780639fd12b7714610787578063a366f49614610790578063a50cf2c8146107a357600080fd5b806394cf073a146106f557806395373018146107085780639af1d35a1461071b57600080fd5b80638991b2f1116101975780638991b2f1146106af5780638fe3f93f146106cf578063944ac59f146106e257600080fd5b8063830aa7451461066f5780638345f26e146106825780638456cb59146106a757600080fd5b8063458936f51161028c578063570a7af2116102355780636ce4074a1161020f5780636ce4074a146105ef5780636e98e5e41461060f5780636f307dc314610622578063783274381461064957600080fd5b8063570a7af21461059f5780635c975abb146105c6578063654a9eda146105dc57600080fd5b80635063524a116102665780635063524a1461055157806351e3f1601461058457806354fd4d501461059757600080fd5b8063458936f51461050e57806346fb371d146105175780634f0e0ef31461052a57600080fd5b80632630c12f116102ee5780633192195c116102c85780633192195c146104be5780633e8297ca146104e65780633f4ba83a1461050657600080fd5b80632630c12f1461045857806329df0b93146104845780632f7a18811461049757600080fd5b806316f0115b1161031f57806316f0115b146103ce578063172c48c7146103f55780632362a2d81461043757600080fd5b8063055ee9b5146103465780630d8f9cee146103a657806311ca4fc2146103bb575b600080fd5b61037c610354366004614a87565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6103b96103b4366004614aa4565b610949565b005b6103b96103c9366004614aa4565b610a76565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b610408610403366004614add565b610b4e565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835261ffff90911660208301520161039d565b61044a610445366004614b13565b610b66565b60405190815260200161039d565b6001546a0100000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1661037c565b6103b9610492366004614a87565b6110be565b60005461037c906301000000900473ffffffffffffffffffffffffffffffffffffffff1681565b6104d16104cc366004614a87565b611122565b6040805192835260208301919091520161039d565b61044a6104f4366004614a87565b60096020526000908152604090205481565b6103b9611156565b61044a60055481565b6103b9610525366004614b95565b611244565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b61056461055f366004614be6565b61149b565b60408051948552602085019390935291830152606082015260800161039d565b6103b9610592366004614aa4565b611602565b61044a600281565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b60005460ff16604051901515815260200161039d565b6103b96105ea366004614c21565b611703565b6106026105fd366004614d40565b611bbb565b60405161039d9190614e5b565b6103b961061d366004614aa4565b611e8e565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b61065c610657366004614a87565b612036565b60405161ffff909116815260200161039d565b6103b961067d366004614b95565b61210f565b6000546106959062010000900460ff1681565b60405160ff909116815260200161039d565b6103b961229d565b61044a6106bd366004614a87565b60086020526000908152604090205481565b61037c6106dd366004614e6e565b612389565b6103b96106f0366004614ea5565b612718565b61044a610703366004614f0a565b612845565b6103b9610716366004614a87565b612e5a565b6001546040805161ffff808416825262010000840481166020830152640100000000840481169282019290925266010000000000008304821660608201526801000000000000000090920416608082015260a00161039d565b6103b9610782366004614a87565b612f85565b61044a60075481565b6103b961079e366004614add565b613045565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b96107d8366004614f4c565b61309b565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b9610812366004614a87565b613221565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b961084c366004614f81565b61327b565b6103b961085f366004614aa4565b613306565b610408610872366004614add565b6134c9565b61037c610885366004614a87565b613541565b61044a610898366004614a87565b6135a5565b60035461037c9073ffffffffffffffffffffffffffffffffffffffff1681565b61037c6108cb366004614a87565b600b6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b600c5461037c9073ffffffffffffffffffffffffffffffffffffffff1681565b61037c610921366004614a87565b600a6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561099b57506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b156109d2576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff1615610a14576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055610a4a828261362e565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b60035473ffffffffffffffffffffffffffffffffffffffff163314610ac7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805473ffffffffffffffffffffffffffffffffffffffff9384166301000000027fffffffffffffffffff0000000000000000000000000000000000000000ffffff90911617905560018054919092166a0100000000000000000000027fffff0000000000000000000000000000000000000000ffffffffffffffffffff909116179055565b600080610b5d6001841b6134c9565b91509150915091565b6000805460ff1615610bd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064015b60405180910390fd5b600054610100900460ff1615610c1b576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff163314610ca0576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610cab89613541565b90506000806000806000610cbe86611122565b9094509050610ccf8c8e868461149b565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152939b5093985090955093506000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015610d6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8f9190614fa4565b9050610d9b8887614fec565b610da6906001614fec565b811115610de657610de1877f00000000000000000000000000000000000000000000000000000000000000008d60018c8b870303038d61366e565b610e30565b610e3073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168d8960018a8d01869003016138c0565b610e7e877f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000089600061366e565b6040517fca9505e40000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604481018490527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ca9505e490606401600060405180830381600087803b158015610f1457600080fd5b505af1158015610f28573d6000803e3d6000fd5b50505050505050506001841115610f6757610f67837f00000000000000000000000000000000000000000000000000000000000000008d87600061366e565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260086020526040902054861916610f9c8489888461395b565b6040517f89b77b3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f000000000000000000000000000000000000000000000000000000000000000016906389b77b3e90602401600060405180830381600087803b15801561102557600080fd5b505af1158015611039573d6000803e3d6000fd5b50505073ffffffffffffffffffffffffffffffffffffffff909c16600090815260026020526040812080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550929a9950505050505050505050565b6000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314611116576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61111f81613a35565b50565b60008060008061113185613aa6565b91955092509050816111438286615004565b61114d9190615041565b92505050915091565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156111e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611204919061507c565b61123a576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611242613c24565b565b60005460ff16156112b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156112f3576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100178155338152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff9081169084161480159061137457506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b80156113985750600c5473ffffffffffffffffffffffffffffffffffffffff163314155b806113b7575073ffffffffffffffffffffffffffffffffffffffff8316155b156113ee576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113f7826135a5565b61142d576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061143885613541565b9050611448838583856000613d05565b61146c5761145b83858360006001613d05565b5061146a838583856001613d05565b505b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b6001546000908190819081906127109061ffff166114b98888615099565b6114c39190615004565b6114cd9190615041565b6114d79086614fec565b935060018760028111156114ed576114ed6150b0565b1415611587576001546000906127109061151390640100000000900461ffff168b615004565b61151d9190615041565b6001549091506127109061153b9062010000900461ffff168b615004565b6115459190615041565b61154f9086614fec565b94508481111561156657600185820303935061156a565b8094505b85811061157b578585039250611581565b84860391505b506115f7565b600287600281111561159b5761159b6150b0565b14156115f157600154600090612710906115c59068010000000000000000900461ffff168b615004565b6115cf9190615041565b6001549091506127109061153b906601000000000000900461ffff168b615004565b84840391505b945094509450949050565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561165457506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b1561168b576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff16156116cd576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055610a4a8282613ea6565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561175557506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b1561178c576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff16156117ce576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790556118048584613ea6565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152600091908616906370a0823190602401602060405180830381865afa158015611874573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118989190614fa4565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529192506000918616906370a0823190602401602060405180830381865afa15801561190a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192e9190614fa4565b60015490915060009081906a0100000000000000000000900473ffffffffffffffffffffffffffffffffffffffff16635cecbd0e61196c8689615099565b8a6119778988615099565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152600481019390935273ffffffffffffffffffffffffffffffffffffffff918216602484015260448301528a1660648201526084016040805180830381865afa1580156119f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1791906150df565b9150915060018411611a2d57611a2d898961362e565b611a3687612036565b611a449061ffff1682615004565b9050611a4f88612036565b611a5d9061ffff1683615004565b9150818110611a7857611a6f89613a35565b5050505061146c565b73ffffffffffffffffffffffffffffffffffffffff891660009081526009602052604081205483611ab56b033b2e3c9fd0803ce800000085615004565b611abf9190615041565b611ad5906b033b2e3c9fd0803ce8000000615099565b611adf9190614fec565b60015490915061271090611b0a906b033b2e3c9fd0803ce80000009062010000900461ffff16615004565b611b149190615041565b8111611b555773ffffffffffffffffffffffffffffffffffffffff8a166000908152600960205260409020819055611b4b8a613a35565b505050505061146c565b611b5e8a613f56565b50505073ffffffffffffffffffffffffffffffffffffffff871660009081526009602052604090206001905550505050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b6060611bc960005460ff1690565b15611c30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff1615611c72576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100178155338152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff908116908416141580611ce7575073ffffffffffffffffffffffffffffffffffffffff8316155b15611d3d57600c5473ffffffffffffffffffffffffffffffffffffffff163314611d3d576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611d4885613541565b90508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167faed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab0360405160405180910390a36040517f1cff79cd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821690631cff79cd90611df89087908790600401615103565b6000604051808303816000875af1158015611e17573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611e5d9190810190615132565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905595945050505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314611edf576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821615611f4f5773ffffffffffffffffffffffffffffffffffffffff8281166000908152600a6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169183169190911790555b73ffffffffffffffffffffffffffffffffffffffff811615611fbf5773ffffffffffffffffffffffffffffffffffffffff8181166000908152600b6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169184169190911790555b73ffffffffffffffffffffffffffffffffffffffff811673cccccccccccccccccccccccccccccccccccccccc141561203257600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790555b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120ba5750506001547e01000000000000000000000000000000000000000000000000000000000000900461ffff1690565b60006120c5836135a5565b9050806120fe576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612107816134c9565b949350505050565b60005460ff161561217c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156121be576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff163314612243576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61224d8383613ea6565b61226f73ffffffffffffffffffffffffffffffffffffffff83168585846138c0565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555050565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015612327573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061234b919061507c565b612381576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112426142d4565b6000805460ff16156123f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff1615612439576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff1633146124be576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166321d18456857f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612568573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061258c9190614fa4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168152600481019290925260248201526044016020604051808303816000875af11580156125e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061260b91906151a0565b6040517fbf28068b0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff80831660248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063bf28068b90604401600060405180830381600087803b1580156126a057600080fd5b505af11580156126b4573d6000803e3d6000fd5b505050506126c28382614394565b73ffffffffffffffffffffffffffffffffffffffff811660009081526008602052604081206001905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690559392505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314612769576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805461ffff92831668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9484166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff96851664010000000002969096167fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff97851662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000090931694909816939093171794909416949094179190911716919091179055565b6000805460ff16156128b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156128f5576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff16331461297a576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080600061298887613aa6565b925092509250846129a25761299d8684615099565b6129ac565b6129ac8684614fec565b935060008515612b045769021e19e0c9bab24000008510612a15576129d583603689901c615004565b6129e3603686901c84615004565b6129ed9190614fec565b603686901c6129fc8585615004565b612a069190615004565b612a109190615041565b612a52565b612a1f8388615004565b612a298584615004565b612a339190614fec565b85612a3e8585615004565b612a489190615004565b612a529190615041565b6040517fbf28068b0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff8a811660248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063bf28068b90604401600060405180830381600087803b158015612ae757600080fd5b505af1158015612afb573d6000803e3d6000fd5b50505050612d9f565b60008484612b128583615004565b612b1c9190615041565b612b269190615099565b60015490915060009061271090612b419061ffff1684615004565b612b4b9190615041565b905073ffffffffffffffffffffffffffffffffffffffff8a1663d1660f997f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000084612bb6878f614fec565b612bc09190614fec565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b158015612c3457600080fd5b505af1158015612c48573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ca9505e4838b612c949190614fec565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815260048101919091526024810184905260006044820152606401600060405180830381600087803b158015612cf357600080fd5b505af1158015612d07573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d9a9190614fa4565b925050505b6040517f16128211000000000000000000000000000000000000000000000000000000008152600481018690526024810182905273ffffffffffffffffffffffffffffffffffffffff891690631612821190604401600060405180830381600087803b158015612e0e57600080fd5b505af1158015612e22573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055509498975050505050505050565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff16158015612eac57506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b15612ee3576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff1615612f25576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055612f5a81613f56565b50600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b60035473ffffffffffffffffffffffffffffffffffffffff163314612fd6576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517ff62005acebe9b616aefb5f248b48f5e89f28437b27d1eebc0b2d911209f297af90600090a250565b60035473ffffffffffffffffffffffffffffffffffffffff163314613096576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600755565b60035473ffffffffffffffffffffffffffffffffffffffff1633146130ec576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613193576001805461ffff83167e01000000000000000000000000000000000000000000000000000000000000027dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790555050565b600061319e836135a5565b9050806131d7576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000908152600460205260409020805473ffffffffffffffffffffffffffffffffffffffff1675ffff000000000000000000000000000000000000000060a084901b161790555050565b60035473ffffffffffffffffffffffffffffffffffffffff163314613272576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61111f81614467565b60035473ffffffffffffffffffffffffffffffffffffffff1633146132cc576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805460ff90921662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff909216919091179055565b60005460ff1615613373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156133b5576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff16331461343a576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061344583613541565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260026020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055905061349c8282614394565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b60008082600114156135275750506001547f0000000000000000000000000000000000000000000000000000000000000000927e0100000000000000000000000000000000000000000000000000000000000090910461ffff169150565b50506000908152600460205260409020549060a082901c90565b73ffffffffffffffffffffffffffffffffffffffff80821660009081526002602052604090205416806135a0576040517fb5ba4c4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146136255773ffffffffffffffffffffffffffffffffffffffff8216600090815260066020526040902054613628565b60015b92915050565b6000613639826135a5565b73ffffffffffffffffffffffffffffffffffffffff909316600090815260086020526040902080549319939093169092555050565b8080156136c657507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b15613828576040517fd1660f9900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301526044820184905286169063d1660f9990606401600060405180830381600087803b15801561376357600080fd5b505af1158015613777573d6000803e3d6000fd5b50506040517f5869dba800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690527f0000000000000000000000000000000000000000000000000000000000000000169250635869dba89150604401600060405180830381600087803b15801561380b57600080fd5b505af115801561381f573d6000803e3d6000fd5b505050506138b9565b6040517fd1660f9900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301526044820184905286169063d1660f9990606401600060405180830381600087803b1580156138a057600080fd5b505af11580156138b4573d6000803e3d6000fd5b505050505b5050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261395590859061455b565b50505050565b60025b8181116138b95781811615613a2d576000613978826134c9565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529192506000918316906370a0823190602401602060405180830381865afa1580156139eb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a0f9190614fa4565b90506002811115613a2a57613a2a878388600185038961366e565b50505b60011b61395e565b73ffffffffffffffffffffffffffffffffffffffff811660009081526008602052604081205490613a6582614667565b60005490915062010000900460ff16811115613aa1576000613a86836146a7565b613a91906001614fec565b905061395584848460008561470b565b505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff16631afbb7a46040518163ffffffff1660e01b8152600401602060405180830381865afa158015613af6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b1a9190614fa4565b92508373ffffffffffffffffffffffffffffffffffffffff166317d11a156040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b8b9190614fa4565b91507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bf8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c1c9190614fa4565b929491935050565b60005460ff16613c90576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610bd0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6040805173ffffffffffffffffffffffffffffffffffffffff8681166024830152604480830186905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b30000000000000000000000000000000000000000000000000000000017905291517f1cff79cd000000000000000000000000000000000000000000000000000000008152600092861691631cff79cd91613dc6918a91600401615103565b6000604051808303816000875af1925050508015613e2457506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052613e219190810190615132565b60015b613e2d57613e61565b80511580613e50575080806020019051810190613e4a919061507c565b15156001145b15613e5f576001915050613e9d565b505b8115613e99576040517f76e3e29c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060005b95945050505050565b6000613eb1826135a5565b9050801580613ec35750600754811615155b15613efa576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83166000908152600860205260409020548116613aa15773ffffffffffffffffffffffffffffffffffffffff83166000908152600860205260409020805482179055505050565b60015473ffffffffffffffffffffffffffffffffffffffff8281166000908152600860205260408120546a010000000000000000000090930490911691908080613f9f86611122565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526127108202600482015273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350908716915063f9a6503090604401602060405180830381865afa15801561403a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061405e9190614fa4565b9250614069846146a7565b6001019150506000806000805b848110156142a157801561408f5760018186031b614092565b60015b935086841615614299576000806140a8866134c9565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8e811660048301529294509092506000918416906370a0823190602401602060405180830381865afa15801561411d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141419190614fa4565b9050600181111561428c576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff848116602483015261ffff841691908d169063f9a6503090604401602060405180830381865afa1580156141c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141ea9190614fa4565b6141f49190615004565b6141fe9087614fec565b95508886106142875760006142128b614667565b60005490915062010000900460ff16811115614249576142448d8c836001891561423e57898e0361470b565b8d61470b565b614278565b85156142785773ffffffffffffffffffffffffffffffffffffffff8d1660009081526008602052604090208b90555b50505050505050505050505050565b614295565b98861898600194505b5050505b600101614076565b506040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005460ff1615614341576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613cdb3390565b73ffffffffffffffffffffffffffffffffffffffff821615806143dd575073ffffffffffffffffffffffffffffffffffffffff8281166000908152600260205260409020541615155b15614414576040517f9e59609e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff918216600090815260026020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001691909216179055565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260066020526040902054156144c4576040517f2e5a5c7700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61010060055410614501576040517f1cbbe18500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005805473ffffffffffffffffffffffffffffffffffffffff83166000818152600660209081526040808320600190951b9485905584835260049091528120919091558254919290614552836151bd565b91905055505050565b60006145bd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166148799092919063ffffffff16565b805190915015613aa157808060200190518101906145db919061507c565b613aa1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610bd0565b60008060005b6101008110156146a0576001811b91508382161561468c578260010192505b838210614698576146a0565b60010161466d565b5050919050565b600081600114156146ba57506000919050565b61010060015b60016146cc8284614fec565b901c92506001831b848116158015906146e75750600185851c145b156146f257506146a0565b84811061470157839250614705565b8391505b506146c0565b815b81811015614846576001811b8581161561483d57600061472c826134c9565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529192506000918316906370a0823190602401602060405180830381865afa15801561479f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147c39190614fa4565b90506001811161483a57600054978318977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9097019660ff6201000090910416871161483a5750505073ffffffffffffffffffffffffffffffffffffffff86166000908152600860205260409020859055506138b9565b50505b5060010161470d565b506040517f53275fcb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606148888484600085614892565b90505b9392505050565b606082471015614924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610bd0565b843b61498c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610bd0565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516149b591906151f6565b60006040518083038185875af1925050503d80600081146149f2576040519150601f19603f3d011682016040523d82523d6000602084013e6149f7565b606091505b5091509150614a07828286614a12565b979650505050505050565b60608315614a2157508161488b565b825115614a315782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd09190614e5b565b73ffffffffffffffffffffffffffffffffffffffff8116811461111f57600080fd5b600060208284031215614a9957600080fd5b813561488b81614a65565b60008060408385031215614ab757600080fd5b8235614ac281614a65565b91506020830135614ad281614a65565b809150509250929050565b600060208284031215614aef57600080fd5b5035919050565b8035600381106135a057600080fd5b801515811461111f57600080fd5b600080600080600080600060e0888a031215614b2e57600080fd5b8735614b3981614a65565b9650614b4760208901614af6565b9550604088013594506060880135614b5e81614a65565b93506080880135614b6e81614a65565b925060a0880135915060c0880135614b8581614b05565b8091505092959891949750929550565b60008060008060808587031215614bab57600080fd5b8435614bb681614a65565b93506020850135614bc681614a65565b92506040850135614bd681614a65565b9396929550929360600135925050565b60008060008060808587031215614bfc57600080fd5b84359350614c0c60208601614af6565b93969395505050506040820135916060013590565b600080600080600060a08688031215614c3957600080fd5b8535614c4481614a65565b94506020860135614c5481614a65565b93506040860135614c6481614a65565b94979396509394606081013594506080013592915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614cf257614cf2614c7c565b604052919050565b600067ffffffffffffffff821115614d1457614d14614c7c565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600080600060608486031215614d5557600080fd5b8335614d6081614a65565b92506020840135614d7081614a65565b9150604084013567ffffffffffffffff811115614d8c57600080fd5b8401601f81018613614d9d57600080fd5b8035614db0614dab82614cfa565b614cab565b818152876020838501011115614dc557600080fd5b816020840160208301376000602083830101528093505050509250925092565b60005b83811015614e00578181015183820152602001614de8565b838111156139555750506000910152565b60008151808452614e29816020860160208601614de5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061488b6020830184614e11565b60008060408385031215614e8157600080fd5b823591506020830135614ad281614a65565b803561ffff811681146135a057600080fd5b600080600080600060a08688031215614ebd57600080fd5b614ec686614e93565b9450614ed460208701614e93565b9350614ee260408701614e93565b9250614ef060608701614e93565b9150614efe60808701614e93565b90509295509295909350565b600080600060608486031215614f1f57600080fd5b8335614f2a81614a65565b9250602084013591506040840135614f4181614b05565b809150509250925092565b60008060408385031215614f5f57600080fd5b8235614f6a81614a65565b9150614f7860208401614e93565b90509250929050565b600060208284031215614f9357600080fd5b813560ff8116811461488b57600080fd5b600060208284031215614fb657600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115614fff57614fff614fbd565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561503c5761503c614fbd565b500290565b600082615077577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60006020828403121561508e57600080fd5b815161488b81614b05565b6000828210156150ab576150ab614fbd565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600080604083850312156150f257600080fd5b505080516020909101519092909150565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015260006148886040830184614e11565b60006020828403121561514457600080fd5b815167ffffffffffffffff81111561515b57600080fd5b8201601f8101841361516c57600080fd5b805161517a614dab82614cfa565b81815285602083850101111561518f57600080fd5b613e9d826020830160208601614de5565b6000602082840312156151b257600080fd5b815161488b81614a65565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156151ef576151ef614fbd565b5060010190565b60008251615208818460208701614de5565b919091019291505056fea26469706673582212209d39bb9d4972b515acdad1ffb757acd15e103ca6ee762f88a6382b36243734ba64736f6c634300080a00336101406040523480156200001257600080fd5b5060405162005e9738038062005e97833981016040819052620000359162000198565b60016000556001600160a01b0383166200006257604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038316608081905260408051636f307dc360e01b81529051636f307dc3916004808201926020929091908290030181865afa158015620000ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d39190620001ea565b6001600160a01b031660a0816001600160a01b031681525050826001600160a01b0316634f0e0ef36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200012b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001519190620001ea565b6001600160a01b0390811660c0529190911660e0819052151561010052151561012052506200020f565b80516001600160a01b03811681146200019357600080fd5b919050565b600080600060608486031215620001ae57600080fd5b620001b9846200017b565b9250620001c9602085016200017b565b915060408401518015158114620001df57600080fd5b809150509250925092565b600060208284031215620001fd57600080fd5b62000208826200017b565b9392505050565b60805160a05160c05160e0516101005161012051615a86620004116000396000818161061101528181612fb5015261481f01526000818161031701528181610dde015281816144f901526146e5015260008181610557015281816146a901526147a901526000818161034b0152818161387d015261392d01526000818161047301528181611bfe0152818161274f0152818161280d0152818161366a01526137dd015260008181610665015281816109d801528181610b0301528181610bd501528181610cdd01528181610e6501528181610fe30152818161114e0152818161120e0152818161132e015281816114510152818161162b01528181611708015281816117e0015281816119e501528181611b1201528181611d9501528181611ed5015281816120040152818161216801528181612290015281816123c601528181612568015281816126390152818161266f0152818161293d01528181612a2101528181612a8a01528181612bde01528181612d2601528181612e6801528181612ec2015281816130a10152818161311b015281816131b401528181613341015281816134c10152818161358a0152818161372f01528181613a1a01528181613b2e01528181613dbb015281816142200152818161432801528181614492015281816148e7015281816149e801528181614aae0152614d8f0152615a866000f3fe6080604052600436106102695760003560e01c8063860aefcf11610153578063c7de38a6116100cb578063dfd594651161007f578063eb9606df11610064578063eb9606df1461081e578063f9eaee0d1461083e578063ffd9b9071461085e57600080fd5b8063dfd59465146107de578063e1f21c67146107fe57600080fd5b8063cff0ab96116100b0578063cff0ab96146106ef578063d9ccbec114610783578063dcf65482146107be57600080fd5b8063c7de38a6146106a7578063caa5c23f146106dc57600080fd5b80639c55a05411610122578063b55bb84b11610107578063b55bb84b14610633578063c12c21c014610653578063c690908a1461068757600080fd5b80639c55a054146105df578063b1836d32146105ff57600080fd5b8063860aefcf146104db5780639408b63f146105455780639b67ab30146105795780639be0536a146105bd57600080fd5b80635d91a0e0116101e65780636d19b486116101b55780637071b7c51161019a5780637071b7c51461049557806379c0ef91146104a857806382871ace146104c857600080fd5b80636d19b486146104415780636f307dc31461046157600080fd5b80635d91a0e0146103e85780635f73fbec146103fb578063601d66f61461040e5780636c8f225d1461042e57600080fd5b80633d9287fa1161023d5780635019e20a116102225780635019e20a1461039257806354fd4d50146103b257806359781034146103d557600080fd5b80633d9287fa146103055780634f0e0ef31461033957600080fd5b8062842b571461026e578063256ac915146102905780632a7ba1f7146102c55780632b7c7b11146102e5575b600080fd5b34801561027a57600080fd5b5061028e6102893660046151bf565b61087e565b005b34801561029c57600080fd5b506102b06102ab3660046151f8565b61098e565b60405190151581526020015b60405180910390f35b3480156102d157600080fd5b5061028e6102e0366004615215565b610a61565b3480156102f157600080fd5b5061028e610300366004615215565b610c3b565b34801561031157600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561034557600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102bc565b34801561039e57600080fd5b5061028e6103ad3660046151f8565b610d6a565b3480156103be57600080fd5b506103c7600281565b6040519081526020016102bc565b61028e6103e336600461522e565b61108c565b61028e6103f63660046152bb565b611275565b61028e610409366004615340565b611589565b34801561041a57600080fd5b5061028e6104293660046153d8565b6117de565b61028e61043c36600461541b565b611900565b34801561044d57600080fd5b506102b061045c3660046151f8565b611c31565b34801561046d57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b61028e6104a336600461546e565b611c60565b3480156104b457600080fd5b5061036d6104c3366004615215565b611f3e565b61028e6104d63660046152bb565b611f4b565b3480156104e757600080fd5b5060025461051c906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041682565b604080516fffffffffffffffffffffffffffffffff9384168152929091166020830152016102bc565b34801561055157600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561058557600080fd5b506004546040805167ffffffffffffffff608084901c1681526fffffffffffffffffffffffffffffffff9092166020830152016102bc565b3480156105c957600080fd5b506105d261227d565b6040516102bc91906154e2565b3480156105eb57600080fd5b5061028e6105fa36600461553c565b61228e565b34801561060b57600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561063f57600080fd5b5061028e61064e3660046151f8565b6123c4565b34801561065f57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561069357600080fd5b5061028e6106a23660046151f8565b6124c6565b3480156106b357600080fd5b506106c76106c23660046151f8565b612668565b604080519283526020830191909152016102bc565b61028e6106ea366004615557565b61289b565b3480156106fb57600080fd5b5060015461074e906fffffffffffffffffffffffffffffffff811690700100000000000000000000000000000000810460ff169071010000000000000000000000000000000000900464ffffffffff1683565b604080516fffffffffffffffffffffffffffffffff9094168452911515602084015264ffffffffff16908201526060016102bc565b34801561078f57600080fd5b506102b061079e366004615599565b600360209081526000928352604080842090915290825290205460ff1681565b3480156107ca57600080fd5b5061028e6107d93660046151f8565b612a88565b3480156107ea57600080fd5b506103c76107f93660046151f8565b612b86565b34801561080a57600080fd5b5061028e61081936600461522e565b612c6d565b34801561082a57600080fd5b5061028e6108393660046155c7565b612ec0565b34801561084a57600080fd5b506102b06108593660046151f8565b613057565b34801561086a57600080fd5b5061028e6108793660046155ee565b6131b2565b600260005414156108f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b6002600090815573ffffffffffffffffffffffffffffffffffffffff8316808252600360209081526040808420338086529083529381902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081527f9b3258bc4904fd6426b99843e206c6c7cdb1fd0f040121c25b71dafbb3851ee0910160405180910390a350506001600055565b6040517f055ee9b500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063055ee9b590602401602060405180830381865afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a43919061560b565b73ffffffffffffffffffffffffffffffffffffffff16141592915050565b60026000541415610ace576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610b5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b83919061560b565b9050610b903382846132eb565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906395373018906024015b600060405180830381600087803b158015610c1a57600080fd5b505af1158015610c2e573d6000803e3d6000fd5b5050600160005550505050565b60026000541415610ca8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610d39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5d919061560b565b9050610b90338284613411565b60026000541415610dd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000557f000000000000000000000000000000000000000000000000000000000000000015610e34576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610ec1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee5919061560b565b33600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915290205490915060ff16610f52576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f5d82613583565b5090508015610f98576040517ff713841e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b15801561102757600080fd5b505af115801561103b573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692503391507f93c70cc9715bef0d83edf2095f3595402279d274f402a73ffc17f1bcb19d863d90600090a35050600160005550565b600260005414156110f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611106613875565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063e958b70490602401602060405180830381865afa158015611197573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bb919061560b565b90506111c9848285856139b7565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401600060405180830381600087803b15801561125257600080fd5b505af1158015611266573d6000803e3d6000fd5b50506001600055505050505050565b600260005414156112e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611375573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611399919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166113e8576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806113f483613583565b915091508161142f576040517f1fdd676f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611437613875565b831561144d5761144d85858b8660016000613ae3565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632362a2d88b600185338e8e8e6040518863ffffffff1660e01b81526004016114b59796959493929190615663565b6020604051808303816000875af11580156114d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f891906156bf565b90508873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f7dfecd8419723a9d3954585a30c2a270165d70aafa146c11c1e1b88ae14390648460405161157091815260200190565b60405180910390a4505060016000555050505050505050565b600260005414156115f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ab919061560b565b90506116b5613875565b81156116cb576116cb8383338460016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d89061174a903390600090819083908d908d908d90600401615663565b6020604051808303816000875af1158015611769573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178d91906156bf565b5060405173ffffffffffffffffffffffffffffffffffffffff87169033907f460ad03b1cf79b1d64d3aefa28475f110ab66e84649c52bb41ed796b9b39198190600090a35050600160005550505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611849573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118d1576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff90811670010000000000000000000000000000000002911617600255565b6002600054141561196d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000908155606461198461ffff851687615707565b61198e9190615744565b9050611999816144f7565b6119a2816145e8565b6119ab84614668565b6119b3613875565b6040517f172c48c7000000000000000000000000000000000000000000000000000000008152600060048201819052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a64919061577f565b61ffff169150611a789050816127106157ae565b611a829083615707565b611a8c8288615707565b11611ac3576040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff86811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611b5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b81919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638587604051611bef92919091825261ffff16602082015260400190565b60405180910390a3611c2386827f00000000000000000000000000000000000000000000000000000000000000008a6139b7565b505060016000555050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526006602052604081205415155b92915050565b60026000541415611ccd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611cdb856144f7565b611ce484614668565b611ced856145e8565b600154700100000000000000000000000000000000900460ff1615611d3e576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d46613875565b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff85811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611de0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e04919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638885604051611e7292919091825261ffff16602082015260400190565b60405180910390a38215611e9057611e908484878460006001613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015611f1957600080fd5b505af1158015611f2d573d6000803e3d6000fd5b505060016000555050505050505050565b6000611c5a60058361480f565b60026000541415611fb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa15801561204b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206f919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166120be576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120c661481b565b6120fc576040517f7e52ccb400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061210782612668565b509050612112613875565b82156121285761212884848a8560016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d8906121aa908c90600290879033908f908f908f90600401615663565b6020604051808303816000875af11580156121c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ed91906156bf565b90508773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167ffada13ff2d5e1a1d9da37ad4a4130893b34e3c69c32b17f87ec31fd661b867078460405161226591815260200190565b60405180910390a45050600160005550505050505050565b6060612289600561486b565b905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612381576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561242f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612453919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146124b7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614878565b5050565b60026000541415612533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156125c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e8919061560b565b90506125f4818361489a565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401610c00565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126fc919061560b565b905060008061270b8387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156127a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127c991906156bf565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015291965061271091851690637afb010490604401602060405180830381865afa158015612863573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061288791906156bf565b6128919190615744565b9350505050915091565b60026000541415612908576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129bd919061560b565b90506129c7613875565b8115612a7e576129dc83833384600080613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015612a6557600080fd5b505af1158015612a79573d6000803e3d6000fd5b505050505b5050600160005550565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612af3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b17919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b7b576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614c92565b600080612b9283612668565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152919350600092507f000000000000000000000000000000000000000000000000000000000000000090911690633192195c906024016040805180830381865afa158015612c26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4a91906157c5565b9150819050612c5b61271084615707565b612c659190615744565b949350505050565b60026000541415612cda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063fdd5764590602401602060405180830381865afa158015612d6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d91919061560b565b73ffffffffffffffffffffffffffffffffffffffff161480612dd7575073ffffffffffffffffffffffffffffffffffffffff831660009081526006602052604090205415155b15612e0e576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612eac57600080fd5b505af1158015611c23573d6000803e3d6000fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f4f919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612fb3576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000061300a576040517f50dd11fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805464ffffffffff90921671010000000000000000000000000000000000027fffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffffff909216919091179055565b6040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063f67c5bd090602401602060405180830381865afa1580156130e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061310c91906156bf565b905080158015906131ab5750807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015613184573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a891906156bf565b16155b9392505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561321d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613241919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146132a5576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018054911515700100000000000000000000000000000000027fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff909216919091179055565b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600060448301819052917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561338c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133b091906156bf565b90506133bb816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f98274bf834d179ee08dc0604071b0dc90b54731bd5f725a5a96a39a86bce025a8360405161340391815260200190565b60405180910390a250505050565b61341a816144f7565b600154700100000000000000000000000000000000900460ff161561346b576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600160448301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561350c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061353091906156bf565b905061353b816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f9cac51154cc0d835e2f9c9d1f59a9344588cee107f4203bf58a8c797e3a58c458360405161340391815260200190565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613617919061560b565b90506000806136268387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156136c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136e491906156bf565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529195506000917f00000000000000000000000000000000000000000000000000000000000000001690633192195c906024016040805180830381865afa158015613775573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061379991906157c5565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350600092506127109187169063f9a6503090604401602060405180830381865afa158015613837573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061385b91906156bf565b6138659190615707565b9092109794965093945050505050565b34156139b5577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156138e357600080fd5b505af11580156138f7573d6000803e3d6000fd5b50506040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201523460248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16935063a9059cbb925060440190506020604051808303816000875af115801561398f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139b391906157e9565b505b565b6139c084614cb4565b6040517f830aa74500000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f0000000000000000000000000000000000000000000000000000000000000000169063830aa74590608401600060405180830381600087803b158015613a5e57600080fd5b505af1158015613a72573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fa32435755c235de2976ed44a75a2f85cb01faf0c894f639fe0c32bb9455fea8f83604051613ad591815260200190565b60405180910390a350505050565b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301523060248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b158015613b7257600080fd5b505af1158015613b86573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff871692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a28460005b8181101561441d5736888883818110613bea57613bea615806565b9050602002810190613bfc9190615835565b90506004613c0d6020830183615873565b90501015613c47576040517fe2b0e50600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b30613c5560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16141561421c578415613ca9576040517f5fb9107f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613cb86020830183615873565b613cc1916158d8565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167f59781034000000000000000000000000000000000000000000000000000000001415613e3c5760008080613d1e6020860186615873565b613d2c916004908290615920565b810190613d39919061522e565b925092509250613e34838c73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614613e2b576040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015613e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e26919061560b565b613e2d565b8b5b84846139b7565b505050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2b7c7b11000000000000000000000000000000000000000000000000000000001415613ec757600194506000613e996020840184615873565b613ea7916004908290615920565b810190613eb49190615215565b9050613ec1898983613411565b50614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2a7ba1f7000000000000000000000000000000000000000000000000000000001415613f80578415613f49576040517fc0b0caa800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613f586020840184615873565b613f66916004908290615920565b810190613f739190615215565b9050613ec18989836132eb565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f233a8caa0000000000000000000000000000000000000000000000000000000014156140e457600080613fda6020850185615873565b613fe8916004908290615920565b810190613ff5919061594a565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c8116600483015292945090925082918416906370a0823190602401602060405180830381865afa158015614069573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061408d91906156bf565b10156140dd576040517fa5ac537300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016108e7565b5050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fc690908a00000000000000000000000000000000000000000000000000000000141561416457600061413d6020840184615873565b61414b916004908290615920565b81019061415891906151f8565b9050613ec1888261489a565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f23e27a640000000000000000000000000000000000000000000000000000000014156141e45760006141bd6020840184615873565b6141cb916004908290615920565b8101906141d891906151f8565b9050613ec18882614d42565b6040517f1e9e7e7a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50614414565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff68754361426760208501856151f8565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156142d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142f4919061560b565b73ffffffffffffffffffffffffffffffffffffffff16148061436d575073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001661435560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16145b156143a4576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6144126143b46020830183615873565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506143f69250505060208401846151f8565b73ffffffffffffffffffffffffffffffffffffffff1690614e39565b505b50600101613bcf565b506040517f60c8e8938c9a0c0d88a98d6f1c562ce68077e12bf3edb8047378f2f736cb45b490600090a16040517fe1998cf900000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff86811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b1580156144d657600080fd5b505af11580156144ea573d6000803e3d6000fd5b5050505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006139b3576001546fffffffffffffffffffffffffffffffff9081169081146124c257600454608081901c906fffffffffffffffffffffffffffffffff16600067ffffffffffffffff8316431461456e578461458a565b61458a6fffffffffffffffffffffffffffffffff831686615976565b9050838111156145c6576040517f675f1a5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff81164360801b176004555050505050565b6002546fffffffffffffffffffffffffffffffff16811080614631575060025470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681115b156139b3576040517fce16799400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61467061481b565b156146a7576040517f63fc31c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1615614806577f0000000000000000000000000000000000000000000000000000000000000000801561472657503373ffffffffffffffffffffffffffffffffffffffff821614155b1561475d576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600160248301527f00000000000000000000000000000000000000000000000000000000000000001690639dc29fac90604401600060405180830381600087803b1580156147ed57600080fd5b505af1158015614801573d6000803e3d6000fd5b505050505b6139b381614cb4565b60006131ab8383614e7b565b60007f0000000000000000000000000000000000000000000000000000000000000000801561228957505060015471010000000000000000000000000000000000900464ffffffffff1642101590565b606060006131ab83614ea5565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f01565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561492b57600080fd5b505af115801561493f573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527fdf498aa1c340e992665d6fb4f3be8436d452c45a630cb6d7fab7963da39bac8793500190505b60405180910390a15050565b6040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600091829160019183917f00000000000000000000000000000000000000000000000000000000000000001690638991b2f190602401602060405180830381865afa158015614a2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a5391906156bf565b90505b808211614c895780821615614c7d576040517fe75538c700000000000000000000000000000000000000000000000000000000815260048101839052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e75538c7906024016040805180830381865afa158015614af4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b18919061577f565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529294509092506000918416906370a0823190602401602060405180830381865afa158015614b8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bb191906156bf565b90506001811115614c79576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff8481166024830152600091908b169063f9a6503090604401602060405180830381865afa158015614c33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c5791906156bf565b978801979050614c6b61ffff841682615707565b614c759088615976565b9650505b5050505b600182901b9150614a56565b50509250929050565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f50565b3373ffffffffffffffffffffffffffffffffffffffff821614801590614d0b575033600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16155b156139b3576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b158015614dd357600080fd5b505af1158015614de7573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527f69db9e9764da61b6681b89fb0f5be018506e0342036e56b59c3015a620d60977935001905061498d565b60606131ab83836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250615043565b6000826000018281548110614e9257614e92615806565b9060005260206000200154905092915050565b606081600001805480602002602001604051908101604052809291908181526020018280548015614ef557602002820191906000526020600020905b815481526020019060010190808311614ee1575b50505050509050919050565b6000818152600183016020526040812054614f4857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611c5a565b506000611c5a565b60008181526001830160205260408120548015615039576000614f746001836157ae565b8554909150600090614f88906001906157ae565b9050818114614fed576000866000018281548110614fa857614fa8615806565b9060005260206000200154905080876000018481548110614fcb57614fcb615806565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080614ffe57614ffe61598e565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611c5a565b6000915050611c5a565b6060612c65848460008585843b6150b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108e7565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516150df91906159ed565b60006040518083038185875af1925050503d806000811461511c576040519150601f19603f3d011682016040523d82523d6000602084013e615121565b606091505b509150915061513182828661513c565b979650505050505050565b6060831561514b5750816131ab565b82511561515b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e791906159ff565b73ffffffffffffffffffffffffffffffffffffffff811681146139b357600080fd5b80151581146139b357600080fd5b600080604083850312156151d257600080fd5b82356151dd8161518f565b915060208301356151ed816151b1565b809150509250929050565b60006020828403121561520a57600080fd5b81356131ab8161518f565b60006020828403121561522757600080fd5b5035919050565b60008060006060848603121561524357600080fd5b833561524e8161518f565b9250602084013561525e8161518f565b929592945050506040919091013590565b60008083601f84011261528157600080fd5b50813567ffffffffffffffff81111561529957600080fd5b6020830191508360208260051b85010111156152b457600080fd5b9250929050565b60008060008060008060a087890312156152d457600080fd5b86356152df8161518f565b955060208701356152ef8161518f565b9450604087013593506060870135615306816151b1565b9250608087013567ffffffffffffffff81111561532257600080fd5b61532e89828a0161526f565b979a9699509497509295939492505050565b60008060008060006080868803121561535857600080fd5b85356153638161518f565b945060208601359350604086013561537a816151b1565b9250606086013567ffffffffffffffff81111561539657600080fd5b6153a28882890161526f565b969995985093965092949392505050565b80356fffffffffffffffffffffffffffffffff811681146153d357600080fd5b919050565b600080604083850312156153eb57600080fd5b6153f4836153b3565b9150615402602084016153b3565b90509250929050565b61ffff811681146139b357600080fd5b6000806000806080858703121561543157600080fd5b8435935060208501356154438161518f565b925060408501356154538161540b565b915060608501356154638161540b565b939692955090935050565b60008060008060006080868803121561548657600080fd5b8535945060208601356154988161518f565b9350604086013567ffffffffffffffff8111156154b457600080fd5b6154c08882890161526f565b90945092505060608601356154d48161540b565b809150509295509295909350565b6020808252825182820181905260009190848201906040850190845b8181101561553057835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016154fe565b50909695505050505050565b60006020828403121561554e57600080fd5b6131ab826153b3565b6000806020838503121561556a57600080fd5b823567ffffffffffffffff81111561558157600080fd5b61558d8582860161526f565b90969095509350505050565b600080604083850312156155ac57600080fd5b82356155b78161518f565b915060208301356151ed8161518f565b6000602082840312156155d957600080fd5b813564ffffffffff811681146131ab57600080fd5b60006020828403121561560057600080fd5b81356131ab816151b1565b60006020828403121561561d57600080fd5b81516131ab8161518f565b6003811061565f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b73ffffffffffffffffffffffffffffffffffffffff888116825260e082019061568f602084018a615628565b6040830197909752948616606082015292909416608083015260a082015291151560c09092019190915292915050565b6000602082840312156156d157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561573f5761573f6156d8565b500290565b60008261577a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000806040838503121561579257600080fd5b825161579d8161518f565b60208401519092506151ed8161540b565b6000828210156157c0576157c06156d8565b500390565b600080604083850312156157d857600080fd5b505080516020909101519092909150565b6000602082840312156157fb57600080fd5b81516131ab816151b1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc183360301811261586957600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126158a857600080fd5b83018035915067ffffffffffffffff8211156158c357600080fd5b6020019150368190038213156152b457600080fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156159185780818660040360031b1b83161692505b505092915050565b6000808585111561593057600080fd5b8386111561593d57600080fd5b5050820193919092039150565b6000806040838503121561595d57600080fd5b82356159688161518f565b946020939093013593505050565b60008219821115615989576159896156d8565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60005b838110156159d85781810151838201526020016159c0565b838111156159e7576000848401525b50505050565b600082516158698184602087016159bd565b6020815260008251806020840152615a1e8160408501602087016159bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea2646970667358221220a3f4a705ab580a6ada1e438cd2ee4abc001b62d1d171fce12c41994900fef21664736f6c634300080a003360a06040523480156200001157600080fd5b5060405162005f3d38038062005f3d8339810160408190526200003491620012eb565b826001600160a01b031663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000073573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200009991906200147f565b6001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000d7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000fd91906200147f565b6000805460ff191690556001600160a01b0381166200012f57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200016e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200019491906200147f565b6001600160a01b03908116608052600180546001600160a01b031916918616918217905560408051636f307dc360e01b81529051919250636f307dc39160048083019260209291908290030181865afa158015620001f6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200021c91906200147f565b600260006101000a8154816001600160a01b0302191690836001600160a01b03160217905550826001600160a01b031663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000281573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a791906200147f565b6001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200030b91906200147f565b600080546001600160a01b039290921661010002610100600160a81b0319909216919091179055620003626103e860c86200034b6101f4612710620014bc565b60646200035c60c8612710620014bc565b620005e8565b60408101515160005b81811015620003ee576000836040015182815181106200038f576200038f620014e2565b6020026020010151600001519050620003ae81620007c260201b60201c565b620003e48185604001518481518110620003cc57620003cc620014e2565b60200260200101516020015162000a5e60201b60201c565b506001016200036b565b5060015460408051632630c12f60e01b815290516001600160a01b03909216916311ca4fc29186918491632630c12f9160048083019260209291908290030181865afa15801562000443573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200046991906200147f565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401600060405180830381600087803b158015620004b257600080fd5b505af1158015620004c7573d6000803e3d6000fd5b50506040516001600160a01b03861692507fa8b21f72cb83bce808df32dc2330217d744a1c22f3e9e44e4b11bbf049d37d9d9150600090a2600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000553573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200057991906200147f565b6001600160a01b03167f3f82447be465b0b5a4a9e54c74d5f6ae73f2e9537f2cc1590a340524703d096160405160405180910390a26020820151620005cb90620005c5906002620014f8565b62000bda565b81516020830151620005de919062000dc8565b5050505062001604565b6000620005f68585620014bc565b60015460405163172c48c760e01b81526000600482018190529293506001600160a01b039091169063172c48c7906024016040805180830381865afa15801562000644573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200066a91906200152a565b9150508061ffff168261ffff1614620006be57620006888262000f47565b60025460405161ffff841681526001600160a01b039091169060008051602062005f1d8339815191529060200160405180910390a25b60015460405163944ac59f60e01b815261ffff808a166004830152808916602483015280881660448301528087166064830152851660848201526001600160a01b039091169063944ac59f9060a401600060405180830381600087803b1580156200072857600080fd5b505af11580156200073d573d6000803e3d6000fd5b505050507f2214a403d5f8d049e52eacca974c6dea01a471e41d6a18903bfaf7dbc709741f878787612710620007749190620014bc565b876200078388612710620014bc565b6040805161ffff96871681529486166020860152928516848401529084166060840152909216608082015290519081900360a00190a150505050505050565b6001600160a01b038116620007ea57604051635919af9760e11b815260040160405180910390fd5b62000809816001600160a01b03166200116f60201b620023381760201c565b620008365760405163df4c572d60e01b81526001600160a01b038216600482015260240160405180910390fd5b6040516370a0823160e01b81523060048201526001600160a01b038216906370a0823190602401602060405180830381865afa92505050801562000899575060408051601f3d908101601f19168201909252620008969181019062001564565b60015b620008b75760405163528ca31d60e01b815260040160405180910390fd5b50600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200090c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200093291906200147f565b604051630f9a650360e41b8152670de0b6b3a764000060048201526001600160a01b038381166024830152919091169063f9a6503090604401602060405180830381865afa925050508015620009a7575060408051601f3d908101601f19168201909252620009a49181019062001564565b60015b620009c5576040516367a7cd4360e01b815260040160405180910390fd5b5060015460405163d48bfca760e01b81526001600160a01b0383811660048301529091169063d48bfca790602401600060405180830381600087803b15801562000a0e57600080fd5b505af115801562000a23573d6000803e3d6000fd5b50506040516001600160a01b03841692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a250565b6002546001600160a01b038381169116141562000a8e57604051633b899cf960e01b815260040160405180910390fd5b60015460405163172c48c760e01b8152600060048201819052916001600160a01b03169063172c48c7906024016040805180830381865afa15801562000ad8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000afe91906200152a565b91505061ffff8216158062000b1a57508061ffff168261ffff16115b1562000b39576040516333c6608d60e01b815260040160405180910390fd5b600154604051635385e2a160e11b81526001600160a01b03858116600483015261ffff851660248301529091169063a70bc54290604401600060405180830381600087803b15801562000b8b57600080fd5b505af115801562000ba0573d6000803e3d6000fd5b505060405161ffff851681526001600160a01b038616925060008051602062005f1d833981519152915060200160405180910390a2505050565b600062000be662001175565b6001600160a01b031663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801562000c24573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c4a91906200157e565b50509050600062000c606200117560201b60201c565b6001600160a01b031663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa15801562000c9d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000cc39190620015d5565b915050806001600160801b0316836001600160801b0316101562000cfa576040516309aadd6f60e41b815260040160405180910390fd5b826001600160801b0316826001600160801b03161462000dc35762000d1e62001175565b604051632715681560e21b81526001600160801b03851660048201526001600160a01b039190911690639c55a05490602401600060405180830381600087803b15801562000d6b57600080fd5b505af115801562000d80573d6000803e3d6000fd5b50506040516001600160801b03861681527fa030eec20ae970821387224ec3bb15b4bd22b89bfb86dc4d2b3827aa3d99e48d925060200190505b60405180910390a15b505050565b600062000dd462001175565b6001600160a01b031663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801562000e12573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e3891906200157e565b50509050816001600160801b0316836001600160801b0316118062000e6e5750806001600160801b0316826001600160801b0316115b1562000e8d576040516309aadd6f60e41b815260040160405180910390fd5b62000e9762001175565b60405163300eb37b60e11b81526001600160801b038086166004830152841660248201526001600160a01b03919091169063601d66f690604401600060405180830381600087803b15801562000eec57600080fd5b505af115801562000f01573d6000803e3d6000fd5b5050604080516001600160801b038088168252861660208201527f4d4981437d0211f9e6843eb024d9ada1fa3a99514d4343d4aece106dd11524bb935001905062000dba565b600154600254604051635385e2a160e11b81526001600160a01b03918216600482015261ffff8416602482015291169063a70bc54290604401600060405180830381600087803b15801562000f9b57600080fd5b505af115801562000fb0573d6000803e3d6000fd5b505050506000600160009054906101000a90046001600160a01b03166001600160a01b031663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200100a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001030919062001564565b905060015b8181101562000dc35760015460405163172c48c760e01b81526004810183905260009182916001600160a01b039091169063172c48c7906024016040805180830381865afa1580156200108c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010b291906200152a565b915091508461ffff168161ffff1611156200116457600154604051635385e2a160e11b81526001600160a01b03848116600483015261ffff881660248301529091169063a70bc54290604401600060405180830381600087803b1580156200111957600080fd5b505af11580156200112e573d6000803e3d6000fd5b505060405161ffff881681526001600160a01b038516925060008051602062005f1d833981519152915060200160405180910390a25b505060010162001035565b3b151590565b60015460408051632f7a188160e01b815290516000926001600160a01b031691632f7a18819160048083019260209291908290030181865afa158015620011c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011e691906200147f565b905090565b6001600160a01b03811681146200120157600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b03811182821017156200123f576200123f62001204565b60405290565b604080519081016001600160401b03811182821017156200123f576200123f62001204565b604051601f8201601f191681016001600160401b038111828210171562001295576200129562001204565b604052919050565b80516001600160801b0381168114620012b557600080fd5b919050565b8051620012b581620011eb565b805161ffff81168114620012b557600080fd5b80518015158114620012b557600080fd5b6000806000606084860312156200130157600080fd5b83516200130e81620011eb565b809350506020808501516200132381620011eb565b604086810151919450906001600160401b03808211156200134357600080fd5b9087019060a0828a0312156200135857600080fd5b620013626200121a565b6200136d836200129d565b81526200137c8584016200129d565b8582015283830151828111156200139257600080fd5b8301601f81018b13620013a457600080fd5b805183811115620013b957620013b962001204565b620013c9878260051b016200126a565b818152878101945060069190911b82018701908c821115620013ea57600080fd5b918701915b81831015620014435786838e031215620014095760008081fd5b6200141362001245565b83516200142081620011eb565b81526200142f848a01620012c7565b818a015285529387019391860191620013ef565b838701525062001458905060608401620012ba565b60608201526200146b60808401620012da565b608082015280955050505050509250925092565b6000602082840312156200149257600080fd5b81516200149f81620011eb565b9392505050565b634e487b7160e01b600052601160045260246000fd5b600061ffff83811690831681811015620014da57620014da620014a6565b039392505050565b634e487b7160e01b600052603260045260246000fd5b60006001600160801b0382811684821681151582840482111615620015215762001521620014a6565b02949350505050565b600080604083850312156200153e57600080fd5b82516200154b81620011eb565b91506200155b60208401620012c7565b90509250929050565b6000602082840312156200157757600080fd5b5051919050565b6000806000606084860312156200159457600080fd5b6200159f846200129d565b9250620015af60208501620012da565b9150604084015164ffffffffff81168114620015ca57600080fd5b809150509250925092565b60008060408385031215620015e957600080fd5b620015f4836200129d565b91506200155b602084016200129d565b608051614878620016a56000396000818161033601528181610446015281816107c5015281816108c0015281816109ae01528181610b8301528181610f0a015281816113e1015281816114cf015281816115bb015281816116ab015281816117990152818161187d01528181611ad901528181611bc601528181611cb301528181611da0015281816120090152818161218c015261227901526148786000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80638456cb59116100f9578063dc2b21c111610097578063f0527ac611610071578063f0527ac6146103d7578063f206d32a146103df578063fb1bd8c4146103f2578063ffd9b9071461040557600080fd5b8063dc2b21c11461039e578063e6492d7b146103b1578063eb9606df146103c457600080fd5b8063a50cf2c8116100d3578063a50cf2c814610331578063a70bc54214610358578063b53472ef1461036b578063c12c21c01461037e57600080fd5b80638456cb59146103035780639c55a0541461030b5780639f1c50691461031e57600080fd5b806350e036ff1161016657806354fd4d501161014057806354fd4d50146102b25780635c975abb146102ba5780636f307dc3146102d05780637bccacee146102f057600080fd5b806350e036ff1461027657806352438e541461028c578063526a41e81461029f57600080fd5b80633e7c88d6116101a25780633e7c88d6146102355780633f4ba83a14610248578063456e0742146102505780635094cb4f1461026357600080fd5b806324147708146101c95780632954018c146101de5780632f7a18811461022d575b600080fd5b6101dc6101d7366004614307565b610418565b005b60005461020390610100900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6102036106fe565b6101dc610243366004614334565b610797565b6101dc610892565b6101dc61025e366004614307565b610980565b61020361027136600461436d565b610b36565b61027e610b49565b604051908152602001610224565b6101dc61029a366004614307565b610b55565b6101dc6102ad366004614394565b610edc565b61027e600281565b60005460ff166040519015158152602001610224565b6002546102039073ffffffffffffffffffffffffffffffffffffffff1681565b6101dc6102fe3660046143c2565b6113b3565b6101dc6114a1565b6101dc61031936600461440e565b61158d565b6101dc61032c36600461442b565b61167d565b6102037f000000000000000000000000000000000000000000000000000000000000000081565b6101dc610366366004614334565b61176b565b6101dc610379366004614307565b61184f565b6001546102039073ffffffffffffffffffffffffffffffffffffffff1681565b6101dc6103ac366004614459565b611aab565b6101dc6103bf366004614307565b611b98565b6101dc6103d236600461448f565b611c85565b6101dc611d72565b6101dc6103ed3660046144ac565b611fdb565b6101dc610400366004614307565b61215e565b6101dc61041336600461451d565b61224b565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156104a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c6919061453a565b6104fc576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006105078261233e565b90506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015610578573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059c9190614557565b90508181166106f9576001546040517fa366f496000000000000000000000000000000000000000000000000000000008152918317600483018190529173ffffffffffffffffffffffffffffffffffffffff9091169063a366f49690602401600060405180830381600087803b15801561061557600080fd5b505af1158015610629573d6000803e3d6000fd5b505050506106356106fe565b6040517fffd9b9070000000000000000000000000000000000000000000000000000000081526001600482015273ffffffffffffffffffffffffffffffffffffffff919091169063ffd9b90790602401600060405180830381600087803b15801561069f57600080fd5b505af11580156106b3573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692507ff17b849746e74d7186170c9553d4bbf60b4f8bb1ed81fe50c099b934fb078f059150600090a25b505050565b600154604080517f2f7a1881000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691632f7a18819160048083019260209291908290030181865afa15801561076e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610792919061457b565b905090565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610821573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610845919061453a565b61087b576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108848261241e565b61088e82826127f8565b5050565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa15801561091c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610940919061453a565b610976576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61097e612a15565b565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610a0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2e919061453a565b610a64576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a6d81612af6565b6001546040517f9f5f86ae00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015290911690639f5f86ae90602401600060405180830381600087803b158015610ada57600080fd5b505af1158015610aee573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507f5a0b7d0f9c24b39256e112a0584b4c5ce38d8f1dee2e7c56f15b852604cdc8869150600090a250565b6000610b43600383612cb8565b92915050565b60006107926003612ccb565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610bdf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c03919061453a565b610c39576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610c86576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063fdd5764590602401602060405180830381865afa158015610cf7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1b919061457b565b905073ffffffffffffffffffffffffffffffffffffffff8116610d6a576040517f1170cc2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f6e98e5e400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526000602483015290911690636e98e5e490604401600060405180830381600087803b158015610dde57600080fd5b505af1158015610df2573d6000803e3d6000fd5b50506001546040517f6e98e5e40000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff86811660248301529091169250636e98e5e49150604401600060405180830381600087803b158015610e6a57600080fd5b505af1158015610e7e573d6000803e3d6000fd5b50505050610e96826003612cd590919063ffffffff16565b5060405173ffffffffffffffffffffffffffffffffffffffff8316907fab9f405bf0c19b97f65a7031634db41569cd2f0e0376a610a1e977f9ab22b58f90600090a25050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610f66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8a919061453a565b610fc0576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fc982612af6565b6000806000610fd66106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015611020573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110449190614598565b9250925092506000806110556106fe565b73ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa15801561109e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c291906145e5565b9150915060006110d06106fe565b73ffffffffffffffffffffffffffffffffffffffff16639be0536a6040518163ffffffff1660e01b8152600401600060405180830381865afa15801561111a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526111609190810190614643565b9050600061116c6106fe565b73ffffffffffffffffffffffffffffffffffffffff1663b1836d326040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111da919061453a565b600154604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905192935073ffffffffffffffffffffffffffffffffffffffff909116916311ca4fc2918c918491632630c12f9160048083019260209291908290030181865afa158015611256573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061127a919061457b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156112e757600080fd5b505af11580156112fb573d6000803e3d6000fd5b5050505087156113675761130e87612cf7565b6113188484612f5d565b61132186613152565b60005b82518110156113575761134f83828151811061134257611342614726565b60200260200101516132a3565b600101611324565b50801561136757611367856133c9565b60405173ffffffffffffffffffffffffffffffffffffffff8a16907fa8b21f72cb83bce808df32dc2330217d744a1c22f3e9e44e4b11bbf049d37d9d90600090a2505050505050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561143d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611461919061453a565b611497576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61088e828261357b565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561152b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061154f919061453a565b611585576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61097e6139c3565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611617573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163b919061453a565b611671576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81612cf7565b50565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611707573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172b919061453a565b611761576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61088e8282612f5d565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156117f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611819919061453a565b610884576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156118d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fd919061453a565b611933576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061193e8261233e565b90506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d39190614557565b9050818116156106f9576001546040517fa366f496000000000000000000000000000000000000000000000000000000008152918318600483018190529173ffffffffffffffffffffffffffffffffffffffff9091169063a366f49690602401600060405180830381600087803b158015611a4d57600080fd5b505af1158015611a61573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a2505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611b35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b59919061453a565b611b8f576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81613a83565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611c22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c46919061453a565b611c7c576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81613b3d565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611d0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d33919061453a565b611d69576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a816133c9565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611dfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e20919061453a565b611e56576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ec4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee8919061457b565b60015490915073ffffffffffffffffffffffffffffffffffffffff166311ca4fc2611f116106fe565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff91821660048201529084166024820152604401600060405180830381600087803b158015611f7f57600080fd5b505af1158015611f93573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507f3f82447be465b0b5a4a9e54c74d5f6ae73f2e9537f2cc1590a340524703d09619150600090a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015612065573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612089919061453a565b6120bf576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61271061ffff86161015806120e357506127106120dc8585614784565b61ffff1610155b806120fd57506127106120f68383614784565b61ffff1610155b15612134576040517f0b361d6900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6121578585612145866127106147aa565b85612152866127106147aa565b613c5c565b5050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156121e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061220c919061453a565b612242576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a816132a3565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156122d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122f9919061453a565b61232f576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81613152565b3b151590565b6001546040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063f67c5bd090602401602060405180830381865afa1580156123af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123d39190614557565b90508015806123e25750806001145b15612419576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b73ffffffffffffffffffffffffffffffffffffffff811661246b576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163b6124d6576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024015b60405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8216906370a0823190602401602060405180830381865afa92505050801561257a575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261257791810190614557565b60015b6125b0576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561261e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612642919061457b565b6040517ff9a65030000000000000000000000000000000000000000000000000000000008152670de0b6b3a7640000600482015273ffffffffffffffffffffffffffffffffffffffff8381166024830152919091169063f9a6503090604401602060405180830381865afa9250505080156126f8575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526126f591810190614557565b60015b61272e576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506001546040517fd48bfca700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301529091169063d48bfca790602401600060405180830381600087803b15801561279c57600080fd5b505af11580156127b0573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a250565b60025473ffffffffffffffffffffffffffffffffffffffff8381169116141561284d576040517f3b899cf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f172c48c70000000000000000000000000000000000000000000000000000000081526000600482018190529173ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa1580156128bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128e091906147cd565b91505061ffff821615806128fb57508061ffff168261ffff16115b15612932576040517f33c6608d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015261ffff851660248301529091169063a70bc54290604401600060405180830381600087803b1580156129a957600080fd5b505af11580156129bd573d6000803e3d6000fd5b505060405161ffff8516815273ffffffffffffffffffffffffffffffffffffffff861692507f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650915060200160405180910390a2505050565b60005460ff16612a81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016124cd565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b73ffffffffffffffffffffffffffffffffffffffff8116612b43576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163b612ba9576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024016124cd565b8073ffffffffffffffffffffffffffffffffffffffff1663c12c21c06040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612c2e575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252612c2b9181019061457b565b60015b612c64576040517fe9eddd1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60015473ffffffffffffffffffffffffffffffffffffffff82811691161461088e576040517fe9eddd1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612cc48383613e92565b9392505050565b6000610b43825490565b6000612cc48373ffffffffffffffffffffffffffffffffffffffff8416613ebc565b6000612d016106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015612d4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d6f9190614598565b505090506000612d7d6106fe565b73ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa158015612dc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dea91906145e5565b915050806fffffffffffffffffffffffffffffffff16836fffffffffffffffffffffffffffffffff161015612e4b576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826fffffffffffffffffffffffffffffffff16826fffffffffffffffffffffffffffffffff16146106f957612e7e6106fe565b6040517f9c55a0540000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff8516600482015273ffffffffffffffffffffffffffffffffffffffff9190911690639c55a05490602401600060405180830381600087803b158015612ef957600080fd5b505af1158015612f0d573d6000803e3d6000fd5b50506040516fffffffffffffffffffffffffffffffff861681527fa030eec20ae970821387224ec3bb15b4bd22b89bfb86dc4d2b3827aa3d99e48d925060200190505b60405180910390a1505050565b6000612f676106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015612fb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fd59190614598565b50509050816fffffffffffffffffffffffffffffffff16836fffffffffffffffffffffffffffffffff16118061302e5750806fffffffffffffffffffffffffffffffff16826fffffffffffffffffffffffffffffffff16115b15613065576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61306d6106fe565b6040517f601d66f60000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff80861660048301528416602482015273ffffffffffffffffffffffffffffffffffffffff919091169063601d66f690604401600060405180830381600087803b1580156130f057600080fd5b505af1158015613104573d6000803e3d6000fd5b5050604080516fffffffffffffffffffffffffffffffff8088168252861660208201527f4d4981437d0211f9e6843eb024d9ada1fa3a99514d4343d4aece106dd11524bb9350019050612f50565b600061315c6106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa1580156131a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131ca9190614598565b509150508015158215151461088e576131e16106fe565b6040517fffd9b907000000000000000000000000000000000000000000000000000000008152831515600482015273ffffffffffffffffffffffffffffffffffffffff919091169063ffd9b90790602401600060405180830381600087803b15801561324c57600080fd5b505af1158015613260573d6000803e3d6000fd5b505050507ff97ba903470ff3262b4a68a938fe81def401bac1bd742169d2e8d5c4ed2185d382604051613297911515815260200190565b60405180910390a15050565b73ffffffffffffffffffffffffffffffffffffffff81166132f0576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6132f86106fe565b6040517fb55bb84b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152919091169063b55bb84b90602401600060405180830381600087803b15801561336357600080fd5b505af1158015613377573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841681527fdac9a7995cbc0c0f01d78970fb6fd0b52fe0fe869eb6635e65cc1b5682b8325c925060200190505b60405180910390a150565b60006133d36106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801561341d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134419190614598565b925050508064ffffffffff168264ffffffffff161461088e578164ffffffffff168164ffffffffff16118061347c57508164ffffffffff1642115b156134b3576040517fe4eaca7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134bb6106fe565b6040517feb9606df00000000000000000000000000000000000000000000000000000000815264ffffffffff8416600482015273ffffffffffffffffffffffffffffffffffffffff919091169063eb9606df90602401600060405180830381600087803b15801561352b57600080fd5b505af115801561353f573d6000803e3d6000fd5b505060405164ffffffffff851681527f0b3eb35ba750e7a7e4d26c9eee3d226f4e1f68c5568f4a3d051c94b241b02ac092506020019050613297565b73ffffffffffffffffffffffffffffffffffffffff82166135c8576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82163b61362e576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016124cd565b61363781612af6565b60015473ffffffffffffffffffffffffffffffffffffffff8381169116148061369257506136636106fe565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b806136b7575060015473ffffffffffffffffffffffffffffffffffffffff8281169116145b806136f457506136c56106fe565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b1561372b576040517f727de5c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517fff68754300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063ff68754390602401602060405180830381865afa15801561379c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137c0919061457b565b73ffffffffffffffffffffffffffffffffffffffff1614158061388c57506001546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063fdd5764590602401602060405180830381865afa15801561384f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613873919061457b565b73ffffffffffffffffffffffffffffffffffffffff1614155b156138c3576040517f21ff1e7100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f6e98e5e400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152848116602483015290911690636e98e5e490604401600060405180830381600087803b15801561393857600080fd5b505af115801561394c573d6000803e3d6000fd5b50505050613964826003613faf90919063ffffffff16565b508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4bcbefaef68b99503d502f5a6abe7bca2b183ab8ac55457013c77d084ebd130560405160405180910390a35050565b60005460ff1615613a30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016124cd565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612acc3390565b6001546040517fdc2b21c100000000000000000000000000000000000000000000000000000000815260ff8316600482015273ffffffffffffffffffffffffffffffffffffffff9091169063dc2b21c190602401600060405180830381600087803b158015613af157600080fd5b505af1158015613b05573d6000803e3d6000fd5b505060405160ff841681527f73caacd705657a7d283e48ecf288b73bc517e3aea1bbc9da2fd54a979e8aa950925060200190506133be565b73ffffffffffffffffffffffffffffffffffffffff8116613b8a576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613b926106fe565b6040517fdcf6548200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152919091169063dcf6548290602401600060405180830381600087803b158015613bfd57600080fd5b505af1158015613c11573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841681527f32e53e2e527af8518ae889e5f7e674bc83f7cf68e4cc059aceeaa0e64208b85b925060200190506133be565b6000613c6885856147aa565b6001546040517f172c48c700000000000000000000000000000000000000000000000000000000815260006004820181905292935073ffffffffffffffffffffffffffffffffffffffff9091169063172c48c7906024016040805180830381865afa158015613cdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cff91906147cd565b9150508061ffff168261ffff1614613d6e57613d1a82613fd1565b60025460405161ffff8416815273ffffffffffffffffffffffffffffffffffffffff909116907f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac6509060200160405180910390a25b6001546040517f944ac59f00000000000000000000000000000000000000000000000000000000815261ffff808a1660048301528089166024830152808816604483015280871660648301528516608482015273ffffffffffffffffffffffffffffffffffffffff9091169063944ac59f9060a401600060405180830381600087803b158015613dfd57600080fd5b505af1158015613e11573d6000803e3d6000fd5b505050507f2214a403d5f8d049e52eacca974c6dea01a471e41d6a18903bfaf7dbc709741f878787612710613e4691906147aa565b87613e53886127106147aa565b6040805161ffff96871681529486166020860152928516848401529084166060840152909216608082015290519081900360a00190a150505050505050565b6000826000018281548110613ea957613ea9614726565b9060005260206000200154905092915050565b60008181526001830160205260408120548015613fa5576000613ee06001836147fc565b8554909150600090613ef4906001906147fc565b9050818114613f59576000866000018281548110613f1457613f14614726565b9060005260206000200154905080876000018481548110613f3757613f37614726565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080613f6a57613f6a614813565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610b43565b6000915050610b43565b6000612cc48373ffffffffffffffffffffffffffffffffffffffff8416614296565b6001546002546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015261ffff8416602482015291169063a70bc54290604401600060405180830381600087803b15801561404a57600080fd5b505af115801561405e573d6000803e3d6000fd5b505050506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156140d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140f59190614557565b905060015b818110156106f9576001546040517f172c48c700000000000000000000000000000000000000000000000000000000815260048101839052600091829173ffffffffffffffffffffffffffffffffffffffff9091169063172c48c7906024016040805180830381865afa158015614175573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061419991906147cd565b915091508461ffff168161ffff16111561428c576001546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015261ffff881660248301529091169063a70bc54290604401600060405180830381600087803b15801561422457600080fd5b505af1158015614238573d6000803e3d6000fd5b505060405161ffff8816815273ffffffffffffffffffffffffffffffffffffffff851692507f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650915060200160405180910390a25b50506001016140fa565b60008181526001830160205260408120546142dd57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610b43565b506000610b43565b73ffffffffffffffffffffffffffffffffffffffff8116811461167a57600080fd5b60006020828403121561431957600080fd5b8135612cc4816142e5565b61ffff8116811461167a57600080fd5b6000806040838503121561434757600080fd5b8235614352816142e5565b9150602083013561436281614324565b809150509250929050565b60006020828403121561437f57600080fd5b5035919050565b801515811461167a57600080fd5b600080604083850312156143a757600080fd5b82356143b2816142e5565b9150602083013561436281614386565b600080604083850312156143d557600080fd5b82356143e0816142e5565b91506020830135614362816142e5565b6fffffffffffffffffffffffffffffffff8116811461167a57600080fd5b60006020828403121561442057600080fd5b8135612cc4816143f0565b6000806040838503121561443e57600080fd5b8235614449816143f0565b91506020830135614362816143f0565b60006020828403121561446b57600080fd5b813560ff81168114612cc457600080fd5b64ffffffffff8116811461167a57600080fd5b6000602082840312156144a157600080fd5b8135612cc48161447c565b600080600080600060a086880312156144c457600080fd5b85356144cf81614324565b945060208601356144df81614324565b935060408601356144ef81614324565b925060608601356144ff81614324565b9150608086013561450f81614324565b809150509295509295909350565b60006020828403121561452f57600080fd5b8135612cc481614386565b60006020828403121561454c57600080fd5b8151612cc481614386565b60006020828403121561456957600080fd5b5051919050565b8051612419816142e5565b60006020828403121561458d57600080fd5b8151612cc4816142e5565b6000806000606084860312156145ad57600080fd5b83516145b8816143f0565b60208501519093506145c981614386565b60408501519092506145da8161447c565b809150509250925092565b600080604083850312156145f857600080fd5b8251614603816143f0565b6020840151909250614362816143f0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000602080838503121561465657600080fd5b825167ffffffffffffffff8082111561466e57600080fd5b818501915085601f83011261468257600080fd5b81518181111561469457614694614614565b8060051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f830116810181811085821117156146d7576146d7614614565b6040529182528482019250838101850191888311156146f557600080fd5b938501935b8285101561471a5761470b85614570565b845293850193928501926146fa565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061ffff8083168185168083038211156147a1576147a1614755565b01949350505050565b600061ffff838116908316818110156147c5576147c5614755565b039392505050565b600080604083850312156147e057600080fd5b82516147eb816142e5565b602084015190925061436281614324565b60008282101561480e5761480e614755565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea264697066735822122046c364b67d38a3dd85b57e027716324d90dd1df102f265f0a0e2697babdb3f3b64736f6c634300080a003394525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650a2646970667358221220088662d917bb31be139bb9cfccf731923e0b5b0bd02a1a898adc995df7ded63864736f6c634300080a0033"; - -type CurveV1AdapterBaseTestConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: CurveV1AdapterBaseTestConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class CurveV1AdapterBaseTest__factory extends ContractFactory { - constructor(...args: CurveV1AdapterBaseTestConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): CurveV1AdapterBaseTest { - return super.attach(address) as CurveV1AdapterBaseTest; - } - override connect(signer: Signer): CurveV1AdapterBaseTest__factory { - return super.connect(signer) as CurveV1AdapterBaseTest__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): CurveV1AdapterBaseTestInterface { - return new utils.Interface(_abi) as CurveV1AdapterBaseTestInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): CurveV1AdapterBaseTest { - return new Contract( - address, - _abi, - signerOrProvider - ) as CurveV1AdapterBaseTest; - } -} diff --git a/src/types/factories/contracts/test/adapters/CurveV1AdapterBaseTest.t.sol/index.ts b/src/types/factories/contracts/test/adapters/CurveV1AdapterBaseTest.t.sol/index.ts deleted file mode 100644 index fb2e2bd0..00000000 --- a/src/types/factories/contracts/test/adapters/CurveV1AdapterBaseTest.t.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { CurveV1AdapterBaseTest__factory } from "./CurveV1AdapterBaseTest__factory"; diff --git a/src/types/factories/contracts/test/adapters/CurveV1AdapterHelper__factory.ts b/src/types/factories/contracts/test/adapters/CurveV1AdapterHelper__factory.ts deleted file mode 100644 index 1e0db8f8..00000000 --- a/src/types/factories/contracts/test/adapters/CurveV1AdapterHelper__factory.ts +++ /dev/null @@ -1,749 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - CurveV1AdapterHelper, - CurveV1AdapterHelperInterface, -} from "../../../../contracts/test/adapters/CurveV1AdapterHelper"; - -const _abi = [ - { - inputs: [], - name: "IncorrectIndexException", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "TokenIsNotInAllowedList", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "onBehalfOf", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "token", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "AddCollateral", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - ], - name: "CloseCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "DecreaseBorrowedAmount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "target", - type: "address", - }, - ], - name: "ExecuteOrder", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "IncreaseBorrowedAmount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "liquidator", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "remainingFunds", - type: "uint256", - }, - ], - name: "LiquidateCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "liquidator", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "remainingFunds", - type: "uint256", - }, - ], - name: "LiquidateExpiredCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [], - name: "MultiCallFinished", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - ], - name: "MultiCallStarted", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newConfigurator", - type: "address", - }, - ], - name: "NewConfigurator", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "onBehalfOf", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "borrowAmount", - type: "uint256", - }, - { - indexed: false, - internalType: "uint16", - name: "referralCode", - type: "uint16", - }, - ], - name: "OpenCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "token", - type: "address", - }, - ], - name: "TokenDisabled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "token", - type: "address", - }, - ], - name: "TokenEnabled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "oldOwner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "TransferAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "bool", - name: "state", - type: "bool", - }, - ], - name: "TransferAccountAllowed", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "", - type: "address", - }, - ], - name: "log_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "log_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - name: "log_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "int256", - name: "", - type: "int256", - }, - ], - name: "log_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "address", - name: "val", - type: "address", - }, - ], - name: "log_named_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes", - name: "val", - type: "bytes", - }, - ], - name: "log_named_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes32", - name: "val", - type: "bytes32", - }, - ], - name: "log_named_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - ], - name: "log_named_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "string", - name: "val", - type: "string", - }, - ], - name: "log_named_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - ], - name: "log_named_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "log_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "logs", - type: "event", - }, - { - inputs: [], - name: "IS_TEST", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "cft", - outputs: [ - { - internalType: "contract CreditFacadeTestSuite", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditConfigurator", - outputs: [ - { - internalType: "contract CreditConfigurator", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditFacade", - outputs: [ - { - internalType: "contract CreditFacade", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditManager", - outputs: [ - { - internalType: "contract ICreditManagerV2", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "failed", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "underlying", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x60806040526000805460ff1916600190811790915580546001600160a01b031916737109709ecfa91a80626ff3989d68f67f5b1dd12d17905534801561004457600080fd5b506103b3806100546000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063c12c21c01161005b578063c12c21c014610104578063df51443314610124578063f9aa028a14610144578063fa7626d41461016457600080fd5b80632f7a1881146100825780636f307dc3146100cc578063ba414fa6146100ec575b600080fd5b6003546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6006546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b6100f4610171565b60405190151581526020016100c3565b6002546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b6005546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b6004546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b6000546100f49060ff1681565b60008054610100900460ff16156101915750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156102cc5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610236917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc49160800161030c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261026e91610348565b6000604051808303816000865af19150503d80600081146102ab576040519150601f19603f3d011682016040523d82523d6000602084013e6102b0565b606091505b50915050808060200190518101906102c8919061035b565b9150505b919050565b6000815160005b818110156102f257602081850181015186830152016102d8565b81811115610301576000828601525b509290920192915050565b7fffffffff0000000000000000000000000000000000000000000000000000000083168152600061034060048301846102d1565b949350505050565b600061035482846102d1565b9392505050565b60006020828403121561036d57600080fd5b8151801515811461035457600080fdfea2646970667358221220db5389b9634f81446aeef70b049bd1835be7e759a3d0cd764022c95ea9e479ee64736f6c634300080a0033"; - -type CurveV1AdapterHelperConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: CurveV1AdapterHelperConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class CurveV1AdapterHelper__factory extends ContractFactory { - constructor(...args: CurveV1AdapterHelperConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): CurveV1AdapterHelper { - return super.attach(address) as CurveV1AdapterHelper; - } - override connect(signer: Signer): CurveV1AdapterHelper__factory { - return super.connect(signer) as CurveV1AdapterHelper__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): CurveV1AdapterHelperInterface { - return new utils.Interface(_abi) as CurveV1AdapterHelperInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): CurveV1AdapterHelper { - return new Contract( - address, - _abi, - signerOrProvider - ) as CurveV1AdapterHelper; - } -} diff --git a/src/types/factories/contracts/test/adapters/CurveV1Adapter_2AssetsTest.t.sol/CurveV1Adapter2AssetsTest__factory.ts b/src/types/factories/contracts/test/adapters/CurveV1Adapter_2AssetsTest.t.sol/CurveV1Adapter2AssetsTest__factory.ts deleted file mode 100644 index 244aea93..00000000 --- a/src/types/factories/contracts/test/adapters/CurveV1Adapter_2AssetsTest.t.sol/CurveV1Adapter2AssetsTest__factory.ts +++ /dev/null @@ -1,831 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - CurveV1Adapter2AssetsTest, - CurveV1Adapter2AssetsTestInterface, -} from "../../../../../contracts/test/adapters/CurveV1Adapter_2AssetsTest.t.sol/CurveV1Adapter2AssetsTest"; - -const _abi = [ - { - inputs: [], - name: "IncorrectIndexException", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "TokenIsNotInAllowedList", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "onBehalfOf", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "token", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "AddCollateral", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - ], - name: "CloseCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "DecreaseBorrowedAmount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "target", - type: "address", - }, - ], - name: "ExecuteOrder", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "IncreaseBorrowedAmount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "liquidator", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "remainingFunds", - type: "uint256", - }, - ], - name: "LiquidateCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "liquidator", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "remainingFunds", - type: "uint256", - }, - ], - name: "LiquidateExpiredCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [], - name: "MultiCallFinished", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - ], - name: "MultiCallStarted", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newConfigurator", - type: "address", - }, - ], - name: "NewConfigurator", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "onBehalfOf", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "borrowAmount", - type: "uint256", - }, - { - indexed: false, - internalType: "uint16", - name: "referralCode", - type: "uint16", - }, - ], - name: "OpenCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "token", - type: "address", - }, - ], - name: "TokenDisabled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "token", - type: "address", - }, - ], - name: "TokenEnabled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "oldOwner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "TransferAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "bool", - name: "state", - type: "bool", - }, - ], - name: "TransferAccountAllowed", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "", - type: "address", - }, - ], - name: "log_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "log_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - name: "log_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "int256", - name: "", - type: "int256", - }, - ], - name: "log_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "address", - name: "val", - type: "address", - }, - ], - name: "log_named_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes", - name: "val", - type: "bytes", - }, - ], - name: "log_named_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes32", - name: "val", - type: "bytes32", - }, - ], - name: "log_named_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - ], - name: "log_named_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "string", - name: "val", - type: "string", - }, - ], - name: "log_named_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - ], - name: "log_named_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "log_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "logs", - type: "event", - }, - { - inputs: [], - name: "IS_TEST", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "adapter", - outputs: [ - { - internalType: "contract CurveV1Adapter2Assets", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "cft", - outputs: [ - { - internalType: "contract CreditFacadeTestSuite", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditConfigurator", - outputs: [ - { - internalType: "contract CreditConfigurator", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditFacade", - outputs: [ - { - internalType: "contract CreditFacade", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditManager", - outputs: [ - { - internalType: "contract ICreditManagerV2", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "curveV1Mock", - outputs: [ - { - internalType: "contract CurveV1Mock_2Assets", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "failed", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "setUp", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_ACV1_2_01_constructor_sets_correct_values", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_ACV1_2_02A_constructor_reverts_for_unknown_addresses", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_ACV1_2_02_constructor_reverts_for_zero_addresses", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_ACV1_2_03_liquidity_functions_revert_if_user_has_no_account", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_ACV1_2_04_add_liquidity_works_as_expected", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_ACV1_2_05_remove_liquidity_works_as_expected", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_ACV1_2_06_remove_liquidity_imbalance_works_as_expected", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "underlying", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x60806040526000805460ff1916600190811790915580546001600160a01b031916737109709ecfa91a80626ff3989d68f67f5b1dd12d1790553480156200004557600080fd5b50620648cf80620000576000396000f3fe60806040523480156200001157600080fd5b5060043610620001325760003560e01c8063c12c21c011620000c0578063e5e1bbd2116200008b578063f0604ac5116200006e578063f0604ac5146200028a578063f9aa028a1462000294578063fa7626d414620002b557600080fd5b8063e5e1bbd21462000276578063efd4c6f8146200028057600080fd5b8063c12c21c01462000220578063ca16fb7c1462000241578063da308cca146200024b578063df514433146200025557600080fd5b80632f7a188111620001015780632f7a188114620001b95780636f307dc314620001da57806384f3e56e14620001fb578063ba414fa6146200020557600080fd5b806303eadcfc14620001375780630a9254e4146200018257806311c80b64146200018e57806329d351d81462000198575b600080fd5b601054620001589073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6200018c620002c3565b005b6200018c62000328565b601154620001589073ffffffffffffffffffffffffffffffffffffffff1681565b600354620001589073ffffffffffffffffffffffffffffffffffffffff1681565b600654620001589073ffffffffffffffffffffffffffffffffffffffff1681565b6200018c62000831565b6200020f62000e9a565b604051901515815260200162000179565b600254620001589073ffffffffffffffffffffffffffffffffffffffff1681565b6200018c62001004565b6200018c620013b5565b600554620001589073ffffffffffffffffffffffffffffffffffffffff1681565b6200018c6200196f565b6200018c62001db2565b6200018c620020a2565b600454620001589073ffffffffffffffffffffffffffffffffffffffff1681565b6000546200020f9060ff1681565b620002cf60026200258f565b6007546011805473ffffffffffffffffffffffffffffffffffffffff9283167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560085460108054919093169116179055565b60005b60028110156200082e5780151562000342620002c3565b60006200034e62004371565b506011549091506200038b9073ffffffffffffffffffffffffffffffffffffffff1662000385670de0b6b3a764000060646200924a565b62004758565b600060405180604001604052806004670de0b6b3a7640000614e20620003b291906200924a565b620003be91906200928a565b8152602001620003d560036404a817c8006200928a565b9052905060007f5b36389c0000000000000000000000000000000000000000000000000000000062000411670de0b6b3a764000060376200924a565b8360405160240162000425929190620092eb565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529050620004c773f39fd6e51aad88f6f4ce6ab8827279cfffb922668260028762004c0c565b8315620004f957601054620004f39073ffffffffffffffffffffffffffffffffffffffff168262004c47565b6200061c565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b1580156200057957600080fd5b505af11580156200058e573d6000803e3d6000fd5b505060105473ffffffffffffffffffffffffffffffffffffffff169150635b36389c9050620005c7670de0b6b3a764000060376200924a565b846040518363ffffffff1660e01b8152600401620005e7929190620092eb565b600060405180830381600087803b1580156200060257600080fd5b505af115801562000617573d6000803e3d6000fd5b505050505b6200064d60078460046200063b670de0b6b3a7640000614e206200924a565b6200064791906200928a565b62004d79565b620006666008846200064760036404a817c8006200928a565b601154604080517ffc0c546a00000000000000000000000000000000000000000000000000000000815290516200073c9273ffffffffffffffffffffffffffffffffffffffff169163fc0c546a9160048083019260209291908290030181865afa158015620006d9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006ff91906200932b565b8462000715670de0b6b3a764000060376200924a565b6200072a670de0b6b3a764000060646200924a565b6200073691906200934b565b62004d9b565b601154604080517ffc0c546a0000000000000000000000000000000000000000000000000000000081529051620007f89273ffffffffffffffffffffffffffffffffffffffff169163fc0c546a9160048083019260209291908290030181865afa158015620007af573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007d591906200932b565b601154859073ffffffffffffffffffffffffffffffffffffffff16600062004db8565b620008066007600162004ddc565b620008146008600162004ddc565b505050508080620008259062009365565b9150506200032b565b50565b60005b60028110156200082e5760006200084c600262004dfc565b6000546040517f67b4264500000000000000000000000000000000000000000000000000000000815291925062010000900473ffffffffffffffffffffffffffffffffffffffff16906367b4264590620008ac906006906004016200940c565b602060405180830381865afa158015620008ca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008f091906200932b565b81838151811062000905576200090562009422565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505080816040516200094f90620090be565b6200095c929190620094a4565b604051809103906000f08015801562000979573d6000803e3d6000fd5b50601180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169182179055604080517f82c630660000000000000000000000000000000000000000000000000000000081529051600092916382c630669160048083019260209291908290030181865afa15801562000a16573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a3c91906200932b565b6005546040517f9dd55b4500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80841660048301526305f5e1006024830152929350911690639dd55b4590604401600060405180830381600087803b15801562000ab657600080fd5b505af115801562000acb573d6000803e3d6000fd5b50506001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b15801562000b4f57600080fd5b505af115801562000b64573d6000803e3d6000fd5b5050600480546040517f3e7c88d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811693820193909352612260602482015291169250633e7c88d69150604401600060405180830381600087803b15801562000be057600080fd5b505af115801562000bf5573d6000803e3d6000fd5b50506001546000546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316945063f28dceb393507f98c0f5f2000000000000000000000000000000000000000000000000000000009262010000909204909116906367b426459062000c88906006906004016200940c565b602060405180830381865afa15801562000ca6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ccc91906200932b565b60405173ffffffffffffffffffffffffffffffffffffffff9091166024820152604401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e084901b909216825262000d819160040162009551565b600060405180830381600087803b15801562000d9c57600080fd5b505af115801562000db1573d6000803e3d6000fd5b505060025460115460405173ffffffffffffffffffffffffffffffffffffffff928316945091169150839060009062000dea90620090cc565b73ffffffffffffffffffffffffffffffffffffffff9485168152928416602084015290831660408301529091166060820152608001604051809103906000f08015801562000e3c573d6000803e3d6000fd5b50601080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169190911790555081905062000e918162009365565b91505062000834565b60008054610100900460ff161562000ebb5750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1562000fff5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000008284015282518083038401815260608301909352600092909162000f63917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc49160800162009566565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905262000f9d91620095b0565b6000604051808303816000865af19150503d806000811462000fdc576040519150601f19603f3d011682016040523d82523d6000602084013e62000fe1565b606091505b509150508080602001905181019062000ffb9190620095ce565b9150505b919050565b6040805180820182526001808252600260208301525491517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb5ba4c4d000000000000000000000000000000000000000000000000000000006004820152909173ffffffffffffffffffffffffffffffffffffffff169063c31eb0e090602401600060405180830381600087803b158015620010a257600080fd5b505af1158015620010b7573d6000803e3d6000fd5b50506010546040517f0b4c7e4d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169250630b4c7e4d915062001116908490600090600401620095f2565b600060405180830381600087803b1580156200113157600080fd5b505af115801562001146573d6000803e3d6000fd5b50506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb5ba4c4d00000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff909116925063c31eb0e09150602401600060405180830381600087803b158015620011d657600080fd5b505af1158015620011eb573d6000803e3d6000fd5b50506010546040517f5b36389c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169250635b36389c91506200124a906000908590600401620092eb565b600060405180830381600087803b1580156200126557600080fd5b505af11580156200127a573d6000803e3d6000fd5b50506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb5ba4c4d00000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff909116925063c31eb0e09150602401600060405180830381600087803b1580156200130a57600080fd5b505af11580156200131f573d6000803e3d6000fd5b50506010546040517fe310327300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116925063e310327391506200137e908490600190600401620095f2565b600060405180830381600087803b1580156200139957600080fd5b505af1158015620013ae573d6000803e3d6000fd5b5050505050565b60005b60028110156200082e57801515620013cf620002c3565b6000620013db62004371565b509050620014006007620013fa670de0b6b3a7640000614e206200924a565b6200548a565b6200141260086404a817c8006200548a565b600060405180604001604052806004670de0b6b3a7640000614e206200143991906200924a565b6200144591906200928a565b81526020016200145c60036404a817c8006200928a565b9052905060007f0b4c7e4d000000000000000000000000000000000000000000000000000000008262001499670de0b6b3a764000060376200924a565b604051602401620014ac929190620095f2565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526011549091506200155790600790859073ffffffffffffffffffffffffffffffffffffffff16600062005a3e565b6011546200158290600890859073ffffffffffffffffffffffffffffffffffffffff16600062005a3e565b620015a573f39fd6e51aad88f6f4ce6ab8827279cfffb922668260028762005a5c565b8315620015d757601054620015d19073ffffffffffffffffffffffffffffffffffffffff168262004c47565b620016fa565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b1580156200165757600080fd5b505af11580156200166c573d6000803e3d6000fd5b505060105473ffffffffffffffffffffffffffffffffffffffff169150630b4c7e4d905083620016a6670de0b6b3a764000060376200924a565b6040518363ffffffff1660e01b8152600401620016c5929190620095f2565b600060405180830381600087803b158015620016e057600080fd5b505af1158015620016f5573d6000803e3d6000fd5b505050505b62001747600784600462001719670de0b6b3a7640000614e206200924a565b6200172591906200928a565b6200173b670de0b6b3a7640000614e206200924a565b6200064791906200934b565b620017716008846200176060036404a817c8006200928a565b62000647906404a817c8006200934b565b601154604080517ffc0c546a0000000000000000000000000000000000000000000000000000000081529051620018209273ffffffffffffffffffffffffffffffffffffffff169163fc0c546a9160048083019260209291908290030181865afa158015620017e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200180a91906200932b565b8462000736670de0b6b3a764000060376200924a565b601154604080517ffc0c546a0000000000000000000000000000000000000000000000000000000081529051620018c19273ffffffffffffffffffffffffffffffffffffffff169163fc0c546a9160048083019260209291908290030181865afa15801562001893573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620018b991906200932b565b600162005a97565b6011546200190b90600790859073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62005a3e565b6011546200195590600890859073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62005a3e565b505050508080620019669062009365565b915050620013b8565b60005b60028110156200082e5780151562001989620002c3565b60006200199562004371565b50601154909150620019cc9073ffffffffffffffffffffffffffffffffffffffff1662000385670de0b6b3a764000060646200924a565b600060405180604001604052806004670de0b6b3a7640000614e20620019f391906200924a565b620019ff91906200928a565b815260200162001a1660036404a817c8006200928a565b9052905060007fe3103273000000000000000000000000000000000000000000000000000000008262001a53670de0b6b3a764000060376200924a565b60405160240162001a66929190620095f2565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152905062001b0973f39fd6e51aad88f6f4ce6ab8827279cfffb92266826002858862005ab3565b831562001b3b5760105462001b359073ffffffffffffffffffffffffffffffffffffffff168262004c47565b62001c5e565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b15801562001bbb57600080fd5b505af115801562001bd0573d6000803e3d6000fd5b505060105473ffffffffffffffffffffffffffffffffffffffff16915063e310327390508362001c0a670de0b6b3a764000060376200924a565b6040518363ffffffff1660e01b815260040162001c29929190620095f2565b600060405180830381600087803b15801562001c4457600080fd5b505af115801562001c59573d6000803e3d6000fd5b505050505b62001c7d60078460046200063b670de0b6b3a7640000614e206200924a565b62001c966008846200064760036404a817c8006200928a565b601154604080517ffc0c546a000000000000000000000000000000000000000000000000000000008152905162001d099273ffffffffffffffffffffffffffffffffffffffff169163fc0c546a9160048083019260209291908290030181865afa158015620006d9573d6000803e3d6000fd5b601154604080517ffc0c546a000000000000000000000000000000000000000000000000000000008152905162001d7c9273ffffffffffffffffffffffffffffffffffffffff169163fc0c546a9160048083019260209291908290030181865afa158015620007af573d6000803e3d6000fd5b62001d8a6007600162004ddc565b62001d986008600162004ddc565b50505050808062001da99062009365565b91505062001972565b601054604080517f0dfe1681000000000000000000000000000000000000000000000000000000008152905162001f299273ffffffffffffffffffffffffffffffffffffffff1691630dfe16819160048083019260209291908290030181865afa15801562001e25573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001e4b91906200932b565b6000546040517f67b426450000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff16906367b426459062001ea9906007906004016200940c565b602060405180830381865afa15801562001ec7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001eed91906200932b565b6040518060400160405280601081526020017f496e636f727265637420746f6b656e300000000000000000000000000000000081525062005ad1565b601054604080517fd21220a70000000000000000000000000000000000000000000000000000000081529051620020a09273ffffffffffffffffffffffffffffffffffffffff169163d21220a79160048083019260209291908290030181865afa15801562001f9c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001fc291906200932b565b6000546040517f67b426450000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff16906367b426459062002020906008906004016200940c565b602060405180830381865afa1580156200203e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200206491906200932b565b6040518060400160405280601081526020017f496e636f727265637420746f6b656e310000000000000000000000000000000081525062005ad1565b565b60005b60028110156200082e576000620020bd600262004dfc565b90506000818381518110620020d657620020d662009422565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505080816040516200212090620090be565b6200212d929190620094a4565b604051809103906000f0801580156200214a573d6000803e3d6000fd5b50601180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169182179055604080517f82c630660000000000000000000000000000000000000000000000000000000081529051600092916382c630669160048083019260209291908290030181865afa158015620021e7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200220d91906200932b565b6005546040517f9dd55b4500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80841660048301526305f5e1006024830152929350911690639dd55b4590604401600060405180830381600087803b1580156200228757600080fd5b505af11580156200229c573d6000803e3d6000fd5b50506001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b1580156200232057600080fd5b505af115801562002335573d6000803e3d6000fd5b5050600480546040517f3e7c88d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811693820193909352612260602482015291169250633e7c88d69150604401600060405180830381600087803b158015620023b157600080fd5b505af1158015620023c6573d6000803e3d6000fd5b50506001546040805160048082526024820183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fb2335f2e0000000000000000000000000000000000000000000000000000000017905291517ff28dceb300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909316945063f28dceb39350620024769290910162009551565b600060405180830381600087803b1580156200249157600080fd5b505af1158015620024a6573d6000803e3d6000fd5b505060025460115460405173ffffffffffffffffffffffffffffffffffffffff9283169450911691508390600090620024df90620090cc565b73ffffffffffffffffffffffffffffffffffffffff9485168152928416602084015290831660408301529091166060820152608001604051809103906000f08015801562002531573d6000803e3d6000fd5b50601080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550819050620025868162009365565b915050620020a5565b6200259962005b4a565b604080516080810190915280600781526020016008815260200160098152602001600a9052620025ce90600d906004620090da565b50604080516080810190915280600181526020016002815260200160058152602001600490526200260490600e906004620090da565b506000620026128262004dfc565b90506000620026218362005b56565b90506000836002141562002a6a5782826040516200263f90620090be565b6200264c929190620094a4565b604051809103906000f08015801562002669573d6000803e3d6000fd5b50600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600554604080517f2954018c00000000000000000000000000000000000000000000000000000000815290519190921691632954018c9160048083019260209291908290030181865afa15801562002707573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200272d91906200932b565b600754600554604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691632630c12f916004808201926020929091908290030181865afa158015620027a5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620027cb91906200932b565b73ffffffffffffffffffffffffffffffffffffffff16639dcb511a86600081518110620027fc57620027fc62009422565b60200260200101516040518263ffffffff1660e01b81526004016200283d919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa1580156200285b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200288191906200932b565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620028ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200291591906200932b565b73ffffffffffffffffffffffffffffffffffffffff16639dcb511a8760018151811062002946576200294662009422565b60200260200101516040518263ffffffff1660e01b815260040162002987919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa158015620029a5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620029cb91906200932b565b604051620029d99062009185565b73ffffffffffffffffffffffffffffffffffffffff948516815292841660208401529083166040830152909116606082015260a0608082018190526011908201527f43757276654c503250726963654665656400000000000000000000000000000060c082015260e0015b604051809103906000f08015801562002a61573d6000803e3d6000fd5b50905062003736565b836003141562002fe057828260405162002a849062009193565b62002a91929190620094a4565b604051809103906000f08015801562002aae573d6000803e3d6000fd5b50600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600554604080517f2954018c00000000000000000000000000000000000000000000000000000000815290519190921691632954018c9160048083019260209291908290030181865afa15801562002b4c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002b7291906200932b565b600754600554604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691632630c12f916004808201926020929091908290030181865afa15801562002bea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002c1091906200932b565b73ffffffffffffffffffffffffffffffffffffffff16639dcb511a8660008151811062002c415762002c4162009422565b60200260200101516040518263ffffffff1660e01b815260040162002c82919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa15801562002ca0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002cc691906200932b565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002d34573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002d5a91906200932b565b73ffffffffffffffffffffffffffffffffffffffff16639dcb511a8760018151811062002d8b5762002d8b62009422565b60200260200101516040518263ffffffff1660e01b815260040162002dcc919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa15801562002dea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002e1091906200932b565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002e7e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002ea491906200932b565b73ffffffffffffffffffffffffffffffffffffffff16639dcb511a8860028151811062002ed55762002ed562009422565b60200260200101516040518263ffffffff1660e01b815260040162002f16919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa15801562002f34573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002f5a91906200932b565b60405162002f6890620091a1565b73ffffffffffffffffffffffffffffffffffffffff95861681529385166020850152918416604084015283166060830152909116608082015260c060a082018190526011908201527f43757276654c503350726963654665656400000000000000000000000000000060e08201526101000162002a44565b8360041415620036a957828260405162002ffa90620091af565b62003007929190620094a4565b604051809103906000f08015801562003024573d6000803e3d6000fd5b50600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600554604080517f2954018c00000000000000000000000000000000000000000000000000000000815290519190921691632954018c9160048083019260209291908290030181865afa158015620030c2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620030e891906200932b565b600754600554604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691632630c12f916004808201926020929091908290030181865afa15801562003160573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200318691906200932b565b73ffffffffffffffffffffffffffffffffffffffff16639dcb511a86600081518110620031b757620031b762009422565b60200260200101516040518263ffffffff1660e01b8152600401620031f8919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa15801562003216573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200323c91906200932b565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620032aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620032d091906200932b565b73ffffffffffffffffffffffffffffffffffffffff16639dcb511a8760018151811062003301576200330162009422565b60200260200101516040518263ffffffff1660e01b815260040162003342919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa15801562003360573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200338691906200932b565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620033f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200341a91906200932b565b73ffffffffffffffffffffffffffffffffffffffff16639dcb511a886002815181106200344b576200344b62009422565b60200260200101516040518263ffffffff1660e01b81526004016200348c919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa158015620034aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620034d091906200932b565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200353e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200356491906200932b565b73ffffffffffffffffffffffffffffffffffffffff16639dcb511a8960038151811062003595576200359562009422565b60200260200101516040518263ffffffff1660e01b8152600401620035d6919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa158015620035f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200361a91906200932b565b6040516200362890620091bd565b73ffffffffffffffffffffffffffffffffffffffff96871681529486166020860152928516604085015290841660608401528316608083015290911660a082015260e060c082018190526011908201527f43757276654c50345072696365466565640000000000000000000000000000006101008201526101200162002a44565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f636f7374727563746f723a20496e636f7272656374206e436f696e732070617260448201527f616d65746572000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620037a4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620037ca91906200932b565b600f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283161790556001546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201529116906306447d5690602401600060405180830381600087803b1580156200387557600080fd5b505af11580156200388a573d6000803e3d6000fd5b50505050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620038fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200392291906200932b565b600f546040517fe8a97a3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152838216602482015291169063e8a97a3e90604401600060405180830381600087803b1580156200399757600080fd5b505af1158015620039ac573d6000803e3d6000fd5b505060048054600f546040517f3e7c88d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216938101939093526124546024840152169250633e7c88d69150604401600060405180830381600087803b15801562003a2a57600080fd5b505af115801562003a3f573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562003aae57600080fd5b505af115801562003ac3573d6000803e3d6000fd5b50505050836002141562003baa57600254600754600f5460405173ffffffffffffffffffffffffffffffffffffffff93841693928316929091169060009062003b0c90620090cc565b73ffffffffffffffffffffffffffffffffffffffff9485168152928416602084015290831660408301529091166060820152608001604051809103906000f08015801562003b5e573d6000803e3d6000fd5b50600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905562003c34565b836003141562003bef57600254600754600f5460405173ffffffffffffffffffffffffffffffffffffffff93841693928316929091169060009062003b0c90620091cb565b8360041415620036a957600254600754600f5460405173ffffffffffffffffffffffffffffffffffffffff93841693928316929091169060009062003b0c90620091d9565b6001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b15801562003cb457600080fd5b505af115801562003cc9573d6000803e3d6000fd5b5050600480546007546008546040517f7bccacee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283169481019490945281166024840152169250637bccacee9150604401600060405180830381600087803b15801562003d4957600080fd5b505af115801562003d5e573d6000803e3d6000fd5b505060005462010000900473ffffffffffffffffffffffffffffffffffffffff16915063eebab8ef9050600773f39fd6e51aad88f6f4ce6ab8827279cfffb9226662003db5670de0b6b3a7640000614e206200924a565b6040518463ffffffff1660e01b815260040162003dd5939291906200960f565b600060405180830381600087803b15801562003df057600080fd5b505af115801562003e05573d6000803e3d6000fd5b505060005462010000900473ffffffffffffffffffffffffffffffffffffffff16915063eebab8ef9050600173f39fd6e51aad88f6f4ce6ab8827279cfffb9226662003e5c670de0b6b3a7640000614e206200924a565b6040518463ffffffff1660e01b815260040162003e7c939291906200960f565b600060405180830381600087803b15801562003e9757600080fd5b505af115801562003eac573d6000803e3d6000fd5b50506000546007805473ffffffffffffffffffffffffffffffffffffffff620100009093048316945063eebab8ef935090911662003ef5670de0b6b3a7640000614e206200924a565b6040518463ffffffff1660e01b815260040162003f15939291906200960f565b600060405180830381600087803b15801562003f3057600080fd5b505af115801562003f45573d6000803e3d6000fd5b50506000546007546040517feebab8ef00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff620100009093048316945063eebab8ef935062003fb49260089216906404a817c800906004016200960f565b600060405180830381600087803b15801562003fcf57600080fd5b505af115801562003fe4573d6000803e3d6000fd5b50505050600384106200408b5760005460075473ffffffffffffffffffffffffffffffffffffffff6201000090920482169163eebab8ef916009911662004036670de0b6b3a764000061a4106200924a565b6040518463ffffffff1660e01b815260040162004056939291906200960f565b600060405180830381600087803b1580156200407157600080fd5b505af115801562004086573d6000803e3d6000fd5b505050505b600484106200412e5760005460075473ffffffffffffffffffffffffffffffffffffffff6201000090920482169163eebab8ef91600a9116620040d9670de0b6b3a7640000612ee06200924a565b6040518463ffffffff1660e01b8152600401620040f9939291906200960f565b600060405180830381600087803b1580156200411457600080fd5b505af115801562004129573d6000803e3d6000fd5b505050505b600154600854604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152600760448201527f4144415054455200000000000000000000000000000000000000000000000000606482015291169063c657c71890608401600060405180830381600087803b158015620041d457600080fd5b505af1158015620041e9573d6000803e3d6000fd5b5050600154600754604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152600a60448201527f43555256455f4d4f434b0000000000000000000000000000000000000000000060648201529116925063c657c7189150608401600060405180830381600087803b1580156200429357600080fd5b505af1158015620042a8573d6000803e3d6000fd5b5050600154600f54604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152600e60448201527f43555256455f4c505f544f4b454e00000000000000000000000000000000000060648201529116925063c657c7189150608401600060405180830381600087803b1580156200435257600080fd5b505af115801562004367573d6000803e3d6000fd5b5050505050505050565b6000806000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635f7c9bd06040518163ffffffff1660e01b8152600401602060405180830381865afa158015620043e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200440a919062009646565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015291925073ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b1580156200448b57600080fd5b505af1158015620044a0573d6000803e3d6000fd5b50506003546040517f6c8f225d0000000000000000000000000000000000000000000000000000000081526004810185905273f39fd6e51aad88f6f4ce6ab8827279cfffb92266602482015260646044820181905260009082015273ffffffffffffffffffffffffffffffffffffffff9091169250636c8f225d9150608401600060405180830381600087803b1580156200453a57600080fd5b505af11580156200454f573d6000803e3d6000fd5b50506002546040517fe958b70400000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063e958b7049150602401602060405180830381865afa158015620045d6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620045fc91906200932b565b6006546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80841660048301529295509116906370a0823190602401602060405180830381865afa1580156200466f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004695919062009646565b600154604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301526024820192909252600d60448201527f6372656469744163636f756e74000000000000000000000000000000000000006064820152929450169063c657c71890608401600060405180830381600087803b1580156200473a57600080fd5b505af11580156200474f573d6000803e3d6000fd5b50505050509091565b60008273ffffffffffffffffffffffffffffffffffffffff1663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620047a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620047cc91906200932b565b6040517f1652e9fc00000000000000000000000000000000000000000000000000000000815230600482015290915073ffffffffffffffffffffffffffffffffffffffff821690631652e9fc90602401600060405180830381600087803b1580156200483757600080fd5b505af11580156200484c573d6000803e3d6000fd5b50506040517f40c10f1900000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660048201526024810185905273ffffffffffffffffffffffffffffffffffffffff841692506340c10f1991506044016020604051808303816000875af1158015620048d8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620048fe9190620095ce565b506040517f1652e9fc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152821690631652e9fc90602401600060405180830381600087803b1580156200496957600080fd5b505af11580156200497e573d6000803e3d6000fd5b50506001546040517f06447d5600000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff90911692506306447d569150602401600060405180830381600087803b15801562004a0257600080fd5b505af115801562004a17573d6000803e3d6000fd5b50506002546040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6024820152908416925063095ea7b391506044016020604051808303816000875af115801562004ab4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004ada9190620095ce565b506003546040517f5978103400000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff83811660248301526044820185905290911690635978103490606401600060405180830381600087803b15801562004b6a57600080fd5b505af115801562004b7f573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562004bee57600080fd5b505af115801562004c03573d6000803e3d6000fd5b50505050505050565b600062004c198362004dfc565b600754909150620013ae9086908690859073ffffffffffffffffffffffffffffffffffffffff1685620061de565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b15801562004cc757600080fd5b505af115801562004cdc573d6000803e3d6000fd5b50506003546040805180820190915273ffffffffffffffffffffffffffffffffffffffff868116825260208201869052909116925063caa5c23f915062004d23906200684d565b6040518263ffffffff1660e01b815260040162004d41919062009660565b600060405180830381600087803b15801562004d5c57600080fd5b505af115801562004d71573d6000803e3d6000fd5b505050505050565b62004d9683838360405180602001604052806000815250620068b6565b505050565b62004d9683838360405180602001604052806000815250620069e6565b62004dd6848484846040518060200160405280600081525062006ba1565b50505050565b62004df882826040518060200160405280600081525062006ddf565b5050565b6060600482111562004e91576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f676574506f6f6c546f6b656e733a20496e636f7272656374206e436f696e732060448201527f706172616d65746572000000000000000000000000000000000000000000000060648201526084016200372d565b8167ffffffffffffffff81111562004ead5762004ead6200970c565b60405190808252806020026020018201604052801562004ed7578160200160208202803683370190505b50905060005b82811015620054845760005462010000900473ffffffffffffffffffffffffffffffffffffffff166367b42645600d836004811062004f205762004f2062009422565b602091828204019190069054906101000a900460ff166040518263ffffffff1660e01b815260040162004f5491906200940c565b602060405180830381865afa15801562004f72573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004f9891906200932b565b82828151811062004fad5762004fad62009422565b73ffffffffffffffffffffffffffffffffffffffff9283166020918202929092010152600254835191169063f67c5bd09084908490811062004ff35762004ff362009422565b60200260200101516040518263ffffffff1660e01b815260040162005034919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa15801562005052573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005078919062009646565b6200546f576001546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff909116906306447d5690602401600060405180830381600087803b158015620050fd57600080fd5b505af115801562005112573d6000803e3d6000fd5b50505050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562005184573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620051aa91906200932b565b73ffffffffffffffffffffffffffffffffffffffff1663e8a97a3e838381518110620051da57620051da62009422565b602090810291909101015160005462010000900473ffffffffffffffffffffffffffffffffffffffff166398cdaadf600d86600481106200521f576200521f62009422565b602091828204019190069054906101000a900460ff166040518263ffffffff1660e01b81526004016200525391906200940c565b602060405180830381865afa15801562005271573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200529791906200932b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156200530557600080fd5b505af11580156200531a573d6000803e3d6000fd5b5050600454845173ffffffffffffffffffffffffffffffffffffffff9091169250633e7c88d6915084908490811062005357576200535762009422565b60209081029190910101516040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff90911660048201526124546024820152604401600060405180830381600087803b158015620053d157600080fd5b505af1158015620053e6573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200545557600080fd5b505af11580156200546a573d6000803e3d6000fd5b505050505b806200547b8162009365565b91505062004edd565b50919050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663406c8e2f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620054f8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200551e91906200932b565b73ffffffffffffffffffffffffffffffffffffffff1663eebab8ef8373f39fd6e51aad88f6f4ce6ab8827279cfffb92266846040518463ffffffff1660e01b815260040162005570939291906200960f565b600060405180830381600087803b1580156200558b57600080fd5b505af1158015620055a0573d6000803e3d6000fd5b50506001546040517f06447d5600000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff90911692506306447d569150602401600060405180830381600087803b1580156200562457600080fd5b505af115801562005639573d6000803e3d6000fd5b50505050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663406c8e2f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620056ab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620056d191906200932b565b73ffffffffffffffffffffffffffffffffffffffff166367b42645836040518263ffffffff1660e01b81526004016200570b91906200940c565b602060405180830381865afa15801562005729573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200574f91906200932b565b6002546040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602482015291169063095ea7b3906044016020604051808303816000875af1158015620057e7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200580d9190620095ce565b50600354600554604080517f406c8e2f000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169363597810349373f39fd6e51aad88f6f4ce6ab8827279cfffb922669391169163406c8e2f916004808201926020929091908290030181865afa158015620058a1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620058c791906200932b565b73ffffffffffffffffffffffffffffffffffffffff166367b42645866040518263ffffffff1660e01b81526004016200590191906200940c565b602060405180830381865afa1580156200591f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200594591906200932b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff92831660048201529116602482015260448101849052606401600060405180830381600087803b158015620059ba57600080fd5b505af1158015620059cf573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562004d5c57600080fd5b62004dd6848484846040518060200160405280600081525062006efe565b600062005a698362004dfc565b600754909150620013ae9086908690859073ffffffffffffffffffffffffffffffffffffffff168562007034565b62004df882826040518060200160405280600081525062007c57565b600062005ac08362007fcd565b905062004d71868686848662008040565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161462004d96577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf35838160405162005b3691906200973b565b60405180910390a162004d9683836200807d565b620020a06001620081bb565b6060600482111562005beb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f676574556e6465726c79696e67506f6f6c546f6b656e733a20496e636f72726560448201527f6374206e436f696e7320706172616d657465720000000000000000000000000060648201526084016200372d565b8167ffffffffffffffff81111562005c075762005c076200970c565b60405190808252806020026020018201604052801562005c31578160200160208202803683370190505b50905060005b82811015620054845760005462010000900473ffffffffffffffffffffffffffffffffffffffff166367b42645600e836004811062005c7a5762005c7a62009422565b602091828204019190069054906101000a900460ff166040518263ffffffff1660e01b815260040162005cae91906200940c565b602060405180830381865afa15801562005ccc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005cf291906200932b565b82828151811062005d075762005d0762009422565b73ffffffffffffffffffffffffffffffffffffffff9283166020918202929092010152600254835191169063f67c5bd09084908490811062005d4d5762005d4d62009422565b60200260200101516040518263ffffffff1660e01b815260040162005d8e919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa15801562005dac573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005dd2919062009646565b620061c9576001546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff909116906306447d5690602401600060405180830381600087803b15801562005e5757600080fd5b505af115801562005e6c573d6000803e3d6000fd5b50505050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562005ede573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005f0491906200932b565b73ffffffffffffffffffffffffffffffffffffffff1663e8a97a3e83838151811062005f345762005f3462009422565b602090810291909101015160005462010000900473ffffffffffffffffffffffffffffffffffffffff166398cdaadf600e866004811062005f795762005f7962009422565b602091828204019190069054906101000a900460ff166040518263ffffffff1660e01b815260040162005fad91906200940c565b602060405180830381865afa15801562005fcb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005ff191906200932b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156200605f57600080fd5b505af115801562006074573d6000803e3d6000fd5b5050600454845173ffffffffffffffffffffffffffffffffffffffff9091169250633e7c88d69150849084908110620060b157620060b162009422565b60209081029190910101516040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff90911660048201526124546024820152604401600060405180830381600087803b1580156200612b57600080fd5b505af115801562006140573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620061af57600080fd5b505af1158015620061c4573d6000803e3d6000fd5b505050505b80620061d58162009365565b91505062005c37565b80516002546040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152600092169063e958b70490602401602060405180830381865afa15801562006252573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200627891906200932b565b905084156200635e57600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481019290925260006024830181905260448301819052606483015273ffffffffffffffffffffffffffffffffffffffff169063491cc7c290608401600060405180830381600087803b1580156200630357600080fd5b505af115801562006318573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff8a1692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a25b60005b82811015620064e557600154600254855173ffffffffffffffffffffffffffffffffffffffff9283169263bd6af4349216907f51e3f16000000000000000000000000000000000000000000000000000000000908690899087908110620063cc57620063cc62009422565b60200260200101516040516024016200640892919073ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b90921682526200649b929160040162009784565b600060405180830381600087803b158015620064b657600080fd5b505af1158015620064cb573d6000803e3d6000fd5b505050508080620064dc9062009365565b91505062006361565b5060015460025473ffffffffffffffffffffffffffffffffffffffff9182169163bd6af43491167f6ce4074a00000000000000000000000000000000000000000000000000000000886200653a578a62006554565b60035473ffffffffffffffffffffffffffffffffffffffff165b888b6040516024016200656a93929190620097bd565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b9092168252620065fd929160040162009784565b600060405180830381600087803b1580156200661857600080fd5b505af11580156200662d573d6000803e3d6000fd5b5050600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526024810192909252600060448301819052606483015273ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b158015620066b357600080fd5b505af1158015620066c8573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff1685620066f057876200670a565b60035473ffffffffffffffffffffffffffffffffffffffff165b73ffffffffffffffffffffffffffffffffffffffff167faed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab0360405160405180910390a36001546002546040805173ffffffffffffffffffffffffffffffffffffffff85811660248084019190915283518084039091018152604490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f953730180000000000000000000000000000000000000000000000000000000017905291517fbd6af4340000000000000000000000000000000000000000000000000000000081529382169363bd6af43493620068109316919060040162009784565b600060405180830381600087803b1580156200682b57600080fd5b505af115801562006840573d6000803e3d6000fd5b5050505050505050505050565b604080516001808252818301909252606091816020015b604080518082019091526000815260606020820152815260200190600190039081620068645790505090508181600081518110620068a657620068a662009422565b6020026020010181905250919050565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff166200693d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f74657374546f6b656e5375697465206973206e6f74207365740000000000000060448201526064016200372d565b6000546040517f67b4264500000000000000000000000000000000000000000000000000000000815262004dd69162010000900473ffffffffffffffffffffffffffffffffffffffff16906367b42645906200699e9088906004016200940c565b602060405180830381865afa158015620069bc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620069e291906200932b565b8484845b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600091908616906370a0823190602401602060405180830381865afa15801562006a57573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062006a7d919062009646565b905082811462006b95577f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f828673ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562006af5573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262006b3d9190810190620097f8565b60405160200162006b50929190620098cf565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905262006b8c91879062009955565b60405180910390a15b620013ae8184620086e3565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301526000919087169063dd62ed3e90604401602060405180830381865afa15801562006c1a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062006c40919062009646565b905082811462006dd3577f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f828773ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562006cb8573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262006d009190810190620097f8565b60405160200162006d139291906200998f565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905262006d4f91889062009955565b60405180910390a160408051818152600a818301527f207370656e6465723a2000000000000000000000000000000000000000000000606082015273ffffffffffffffffffffffffffffffffffffffff8616602082015290517f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f9181900360800190a15b62004d718184620086e3565b600554604080517f406c8e2f000000000000000000000000000000000000000000000000000000008152905162004d969273ffffffffffffffffffffffffffffffffffffffff169163406c8e2f9160048083019260209291908290030181865afa15801562006e52573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062006e7891906200932b565b73ffffffffffffffffffffffffffffffffffffffff166367b42645856040518263ffffffff1660e01b815260040162006eb291906200940c565b602060405180830381865afa15801562006ed0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062006ef691906200932b565b838362007c57565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1662006f85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f74657374546f6b656e5375697465206973206e6f74207365740000000000000060448201526064016200372d565b6000546040517f67b42645000000000000000000000000000000000000000000000000000000008152620013ae9162010000900473ffffffffffffffffffffffffffffffffffffffff16906367b426459062006fe69089906004016200940c565b602060405180830381865afa15801562007004573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200702a91906200932b565b8585858562006ba1565b80516002546040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152600092169063e958b70490602401602060405180830381865afa158015620070a8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620070ce91906200932b565b90508415620071b457600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481019290925260006024830181905260448301819052606483015273ffffffffffffffffffffffffffffffffffffffff169063491cc7c290608401600060405180830381600087803b1580156200715957600080fd5b505af11580156200716e573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff8a1692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a25b60005b82811015620073865760015460025473ffffffffffffffffffffffffffffffffffffffff9182169163bd6af43491167f46fb371d000000000000000000000000000000000000000000000000000000008962007214578b6200722e565b60035473ffffffffffffffffffffffffffffffffffffffff165b8989878151811062007244576200724462009422565b602090810291909101015160405173ffffffffffffffffffffffffffffffffffffffff938416602482015291831660448301529190911660648201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff608482015260a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b90921682526200733c929160040162009784565b600060405180830381600087803b1580156200735757600080fd5b505af11580156200736c573d6000803e3d6000fd5b5050505080806200737d9062009365565b915050620071b7565b50600154600254600f546040805173ffffffffffffffffffffffffffffffffffffffff868116602483015292831660448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f51e3f1600000000000000000000000000000000000000000000000000000000017905290517fbd6af4340000000000000000000000000000000000000000000000000000000081529382169363bd6af43493620074569316919060040162009784565b600060405180830381600087803b1580156200747157600080fd5b505af115801562007486573d6000803e3d6000fd5b505060015460025473ffffffffffffffffffffffffffffffffffffffff918216935063bd6af4349250167f6ce4074a0000000000000000000000000000000000000000000000000000000088620074de578a620074f8565b60035473ffffffffffffffffffffffffffffffffffffffff165b888b6040516024016200750e93929190620097bd565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b9092168252620075a1929160040162009784565b600060405180830381600087803b158015620075bc57600080fd5b505af1158015620075d1573d6000803e3d6000fd5b5050600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526024810192909252600060448301819052606483015273ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b1580156200765757600080fd5b505af11580156200766c573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff1685620076945787620076ae565b60035473ffffffffffffffffffffffffffffffffffffffff165b73ffffffffffffffffffffffffffffffffffffffff167faed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab0360405160405180910390a38415620079ad5760005b82811015620078ae57600154600254600354865173ffffffffffffffffffffffffffffffffffffffff9384169363bd6af434938116927f46fb371d00000000000000000000000000000000000000000000000000000000929116908a908a90889081106200776c576200776c62009422565b602090810291909101015160405173ffffffffffffffffffffffffffffffffffffffff938416602482015291831660448301529190911660648201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff608482015260a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b909216825262007864929160040162009784565b600060405180830381600087803b1580156200787f57600080fd5b505af115801562007894573d6000803e3d6000fd5b505050508080620078a59062009365565b915050620076fa565b506001546002546040805173ffffffffffffffffffffffffffffffffffffffff85811660248084019190915283518084039091018152604490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f953730180000000000000000000000000000000000000000000000000000000017905291517fbd6af4340000000000000000000000000000000000000000000000000000000081529382169363bd6af43493620079739316919060040162009784565b600060405180830381600087803b1580156200798e57600080fd5b505af1158015620079a3573d6000803e3d6000fd5b5050505062004c03565b6001546002546040805173ffffffffffffffffffffffffffffffffffffffff85811660248084019190915283518084039091018152604490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f953730180000000000000000000000000000000000000000000000000000000017905291517fbd6af4340000000000000000000000000000000000000000000000000000000081529382169363bd6af4349362007a719316919060040162009784565b600060405180830381600087803b15801562007a8c57600080fd5b505af115801562007aa1573d6000803e3d6000fd5b5050505060005b828110156200436757600154600254855173ffffffffffffffffffffffffffffffffffffffff9283169263bd6af4349216907f46fb371d00000000000000000000000000000000000000000000000000000000908c908a908a908890811062007b155762007b1562009422565b602090810291909101015160405173ffffffffffffffffffffffffffffffffffffffff938416602482015291831660448301529190911660648201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff608482015260a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b909216825262007c0d929160040162009784565b600060405180830381600087803b15801562007c2857600080fd5b505af115801562007c3d573d6000803e3d6000fd5b50505050808062007c4e9062009365565b91505062007aa8565b6002546040517fe958b70400000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015260009173ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa15801562007cdb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062007d0191906200932b565b6002546040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015292935060009290911690638991b2f190602401602060405180830381865afa15801562007d78573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062007d9e919062009646565b6002546040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529091169063f67c5bd090602401602060405180830381865afa15801562007e0f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062007e35919062009646565b1615159050831515811480159062007e4d5750825115155b1562007e8d577f0b2e13ff20ac7b474198655583edf70dedd2c1dc980e329c4fbb2fc0748b796b8360405162007e84919062009551565b60405180910390a15b620013ae841515821515148673ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562007ee4573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262007f2c9190810190620097f8565b8362007f6e576040518060400160405280601981526020017f206e6f7420656e61626c6564206173206578706563746564200000000000000081525062007fa5565b6040518060400160405280601981526020017f20656e61626c6564206173206e6f7420657870657463746564000000000000008152505b60405160200162007fb892919062009a15565b604051602081830303815290604052620087e3565b60408051600280825260608083018452926020830190803683375050835182519293509183915060009062008006576200800662009422565b60209081029190910101528160016020020151816001815181106200802f576200802f62009422565b602002602001018181525050919050565b60006200804d8462004dfc565b60075490915062004d7190879087908690869073ffffffffffffffffffffffffffffffffffffffff16866200882d565b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462004df8577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f50604051620081379060208082526025908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b61646460408201527f726573735d000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f8160405162008170919062009a74565b60405180910390a17f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f82604051620081a9919062009ad6565b60405180910390a162004df862008ec3565b600181600a811115620081d257620081d2620093a1565b1480620081f35750600381600a811115620081f157620081f1620093a1565b145b6200825b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f556e737570706f7274656420746f6b656e00000000000000000000000000000060448201526064016200372d565b6040516200826990620091e7565b604051809103906000f08015801562008286573d6000803e3d6000fd5b50600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff166201000073ffffffffffffffffffffffffffffffffffffffff9384168102919091179182905590041663b36ba208620082f0670de0b6b3a764000060646200924a565b6040518263ffffffff1660e01b81526004016000604051808303818588803b1580156200831c57600080fd5b505af115801562008331573d6000803e3d6000fd5b5050505050600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816040516200836890620091f5565b6200837592919062009b14565b604051809103906000f08015801562008392573d6000803e3d6000fd5b50600580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169182179055604080517f6f307dc30000000000000000000000000000000000000000000000000000000081529051636f307dc3916004808201926020929091908290030181865afa1580156200842c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200845291906200932b565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600554604080517fc12c21c00000000000000000000000000000000000000000000000000000000081529051919092169163c12c21c09160048083019260209291908290030181865afa158015620084ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200851591906200932b565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600554604080517f2f7a188100000000000000000000000000000000000000000000000000000000815290519190921691632f7a18819160048083019260209291908290030181865afa158015620085b2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620085d891906200932b565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600554604080517ff9aa028a0000000000000000000000000000000000000000000000000000000081529051919092169163f9aa028a9160048083019260209291908290030181865afa15801562008675573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200869b91906200932b565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b80821462004df8577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f50604051620087719060208082526022908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b75696e60408201527f745d000000000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a881604051620087aa919062009b40565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a882604051620081a9919062009b8c565b8162004df8577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf3583816040516200881a91906200973b565b60405180910390a162004df88262009046565b80516002546040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8981166004830152600092169063e958b70490602401602060405180830381865afa158015620088a1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620088c791906200932b565b90508415620089ad57600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481019290925260006024830181905260448301819052606483015273ffffffffffffffffffffffffffffffffffffffff169063491cc7c290608401600060405180830381600087803b1580156200895257600080fd5b505af115801562008967573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff8b1692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a25b60005b8281101562008b5a576000878281518110620089d057620089d062009422565b6020026020010151111562008b4557600154600254855173ffffffffffffffffffffffffffffffffffffffff9283169263bd6af4349216907f51e3f1600000000000000000000000000000000000000000000000000000000090869089908790811062008a415762008a4162009422565b602002602001015160405160240162008a7d92919073ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b909216825262008b10929160040162009784565b600060405180830381600087803b15801562008b2b57600080fd5b505af115801562008b40573d6000803e3d6000fd5b505050505b8062008b518162009365565b915050620089b0565b5060015460025473ffffffffffffffffffffffffffffffffffffffff9182169163bd6af43491167f6ce4074a000000000000000000000000000000000000000000000000000000008862008baf578b62008bc9565b60035473ffffffffffffffffffffffffffffffffffffffff165b888c60405160240162008bdf93929190620097bd565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b909216825262008c72929160040162009784565b600060405180830381600087803b15801562008c8d57600080fd5b505af115801562008ca2573d6000803e3d6000fd5b5050600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526024810192909252600060448301819052606483015273ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b15801562008d2857600080fd5b505af115801562008d3d573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff168562008d65578862008d7f565b60035473ffffffffffffffffffffffffffffffffffffffff165b73ffffffffffffffffffffffffffffffffffffffff167faed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab0360405160405180910390a36001546002546040805173ffffffffffffffffffffffffffffffffffffffff85811660248084019190915283518084039091018152604490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f953730180000000000000000000000000000000000000000000000000000000017905291517fbd6af4340000000000000000000000000000000000000000000000000000000081529382169363bd6af4349362008e859316919060040162009784565b600060405180830381600087803b15801562008ea057600080fd5b505af115801562008eb5573d6000803e3d6000fd5b505050505050505050505050565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620090185760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000009282019290925260016060820152600091907f70ca10bbd0dbfd9020a9f4b13402c16cb120705e0d1c0aeab10fa353ae586fc490608001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905262008f95929160200162009566565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905262008fcf91620095b0565b6000604051808303816000865af19150503d80600081146200900e576040519150601f19603f3d011682016040523d82523d6000602084013e62009013565b606091505b505050505b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055565b806200082e577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f50604051620090ac9060208082526017908201527f4572726f723a20417373657274696f6e204661696c6564000000000000000000604082015260600190565b60405180910390a16200082e62008ec3565b6139548062009bcb83390190565b615f7e806200d51f83390190565b600183019183908215620091735791602002820160005b838211156200914257835183826101000a81548160ff0219169083600a811115620091205762009120620093a1565b02179055509260200192600101602081600001049283019260010302620090f1565b8015620091715782816101000a81549060ff021916905560010160208160000104928301926001030262009142565b505b506200918192915062009204565b5090565b611713806201349d83390190565b6139608062014bb083390190565b611852806201851083390190565b6139698062019d6283390190565b611982806201d6cb83390190565b615f8c806201f04d83390190565b615f9a8062024fd983390190565b617a51806202af7383390190565b62031ed680620329c483390190565b5b8082111562009181576000815560010162009205565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156200928557620092856200921b565b500290565b600082620092c1577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b8060005b600281101562004dd6578151845260209384019390910190600101620092ca565b82815260608101620093016020830184620092c6565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146200082e57600080fd5b6000602082840312156200933e57600080fd5b8151620093018162009308565b6000828210156200936057620093606200921b565b500390565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156200939a576200939a6200921b565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600b811062009408577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b602081016200941c8284620093d0565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081518084526020808501945080840160005b838110156200949957815173ffffffffffffffffffffffffffffffffffffffff168752958201959082019060010162009465565b509495945050505050565b604081526000620094b9604083018562009451565b8281036020840152620094cd818562009451565b95945050505050565b60005b83811015620094f3578181015183820152602001620094d9565b8381111562004dd65750506000910152565b600081518084526200951f816020860160208601620094d6565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600062009301602083018462009505565b7fffffffff000000000000000000000000000000000000000000000000000000008316815260008251620095a2816004850160208701620094d6565b919091016004019392505050565b60008251620095c4818460208701620094d6565b9190910192915050565b600060208284031215620095e157600080fd5b815180151581146200930157600080fd5b60608101620096028285620092c6565b8260408301529392505050565b606081016200961f8286620093d0565b73ffffffffffffffffffffffffffffffffffffffff93909316602082015260400152919050565b6000602082840312156200965957600080fd5b5051919050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015620096fe578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00185528151805173ffffffffffffffffffffffffffffffffffffffff168452870151878401879052620096ea8785018262009505565b958801959350509086019060010162009687565b509098975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60408152600560408201527f4572726f72000000000000000000000000000000000000000000000000000000606082015260806020820152600062009301608083018462009505565b73ffffffffffffffffffffffffffffffffffffffff83168152604060208201526000620097b5604083018462009505565b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff808616835280851660208401525060606040830152620094cd606083018462009505565b6000602082840312156200980b57600080fd5b815167ffffffffffffffff808211156200982457600080fd5b818401915084601f8301126200983957600080fd5b8151818111156200984e576200984e6200970c565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156200989757620098976200970c565b81604052828152876020848701011115620098b157600080fd5b620098c4836020830160208801620094d6565b979650505050505050565b60008351620098e3818460208801620094d6565b7f496e636f7272656374200000000000000000000000000000000000000000000090830190815283516200991f81600a840160208801620094d6565b7f2062616c616e6365206f6e206163636f756e743a200000000000000000000000600a9290910191820152601f01949350505050565b6040815260006200996a604083018562009505565b905073ffffffffffffffffffffffffffffffffffffffff831660208301529392505050565b60008351620099a3818460208801620094d6565b7f496e636f727265637420000000000000000000000000000000000000000000009083019081528351620099df81600a840160208801620094d6565b7f20416c6c6f77616e6365206f6e206163636f756e743a20200000000000000000600a9290910191820152602201949350505050565b7f546f6b656e20000000000000000000000000000000000000000000000000000081526000835162009a4f816006850160208801620094d6565b83519083019062009a68816006840160208801620094d6565b01600601949350505050565b60408152600062009ab260408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b905073ffffffffffffffffffffffffffffffffffffffff8316602083015292915050565b60408152600062009ab260408301600a81527f2020202041637475616c00000000000000000000000000000000000000000000602082015260400190565b73ffffffffffffffffffffffffffffffffffffffff8316815260408101620093016020830184620093d0565b60408152600062009b7e60408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b905082602083015292915050565b60408152600062009b7e60408301600a81527f2020202041637475616c0000000000000000000000000000000000000000000060208201526040019056fe60806040523480156200001157600080fd5b5060405162003954380380620039548339810160408190526200003491620002a2565b8151829082906200004d90600290602085019062000133565b5080516200006390600390602084019062000133565b506000601260405162000076906200019d565b6060808252600790820152664352564d6f636b60c81b608082015260a0602082018190526015908201527f43525620666f72204375727665506f6f6c4d6f636b000000000000000000000060c082015260ff909116604082015260e001604051809103906000f080158015620000f0573d6000803e3d6000fd5b50600080546001600160a01b039092166001600160a01b03199283168117909155600180549092161790555050670de0b6b3a7640000600755506200030c915050565b8280548282559060005260206000209081019282156200018b579160200282015b828111156200018b57825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019062000154565b5062000199929150620001ab565b5090565b61175880620021fc83390190565b5b80821115620001995760008155600101620001ac565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b0381168114620001f057600080fd5b919050565b600082601f8301126200020757600080fd5b815160206001600160401b0380831115620002265762000226620001c2565b8260051b604051601f19603f830116810181811084821117156200024e576200024e620001c2565b6040529384528581018301938381019250878511156200026d57600080fd5b83870191505b8482101562000297576200028782620001d8565b8352918301919083019062000273565b979650505050505050565b60008060408385031215620002b657600080fd5b82516001600160401b0380821115620002ce57600080fd5b620002dc86838701620001f5565b93506020850151915080821115620002f357600080fd5b506200030285828601620001f5565b9150509250929050565b611ee0806200031c6000396000f3fe608060405234801561001057600080fd5b506004361061030a5760003560e01c80637b475b681161019c578063c6610657116100ee578063e310327311610097578063f851a44011610071578063f851a44014610597578063fc0c546a1461059e578063fee3f7f91461039757600080fd5b8063e310327314610576578063ed8e84f314610589578063f446c1d01461039757600080fd5b8063dd62ed3e116100c8578063dd62ed3e14610552578063ddca3f4314610397578063e2e7d2641461056857600080fd5b8063c66106571461052c578063cc2b27d71461053f578063d96c7fce1461039e57600080fd5b8063a6417ed611610150578063b91434d11161012a578063b91434d1146104fe578063b9947eb014610511578063bb7b8b801461052457600080fd5b8063a6417ed6146104d8578063b4b577ad14610397578063b739953e146104eb57600080fd5b80638ea875f3116101815780638ea875f3146104bc57806395d89b411461033557806399bd2ba5146104c557600080fd5b80637b475b681461047757806382c630661461049c57600080fd5b8063313ce567116102605780635b36389c1161020957806370a08231116101e357806370a0823114610450578063710354181461046457806376a2f0f01461039757600080fd5b80635b36389c1461042a5780635e0d443f1461043d57806363543f061461039757600080fd5b80634903b0d11161023a5780634903b0d1146104045780635409491a1461039757806356ac35031461041757600080fd5b8063313ce567146103975780633df02124146103f15780634469e30e1461039e57600080fd5b806314052288116102c25780631a4d01d21161029c5780631a4d01d2146103a65780632081066c1461039757806323746eb8146103b957600080fd5b8063140522881461039757806314f059791461039e57806318160ddd1461039757600080fd5b806307211ef7116102f357806307211ef71461034f5780630b4c7e4d146103625780630f6ba8e31461037757600080fd5b8063065a80d81461030f57806306fdde0314610335575b600080fd5b61032261031d36600461191f565b6105be565b6040519081526020015b60405180910390f35b6040805160208101825260008152905161032c9190611966565b61032261035d3660046119b7565b610677565b610375610370366004611a8a565b6106c7565b005b61038a610385366004611ac6565b610898565b60405161032c9190611b04565b6000610322565b61038a6108cb565b6103756103b4366004611b35565b6108eb565b6103cc6103c736600461191f565b6109da565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161032c565b6103756103ff366004611b5a565b610a1a565b610322610412366004611b9c565b610b44565b6103756104253660046119b7565b610b59565b610375610438366004611bb5565b610bba565b61032261044b3660046119b7565b610d3d565b61032261045e366004611c06565b50600090565b610375610472366004611b9c565b600755565b610375610485366004611c21565b600f9190910b600090815260066020526040902055565b6001546103cc9073ffffffffffffffffffffffffffffffffffffffff1681565b61032260075481565b6103756104d3366004611c4b565b610d79565b6103756104e6366004611b5a565b610dd8565b6103cc6104f936600461191f565b611198565b61037561050c3660046119b7565b6111b0565b6103cc61051f366004611b9c565b611211565b600754610322565b6103cc61053a366004611b9c565b611226565b61032261054d366004611c67565b61123b565b610322610560366004611c8a565b600092915050565b61032261045e366004611b9c565b610375610584366004611cb4565b611271565b610322610560366004611ce2565b60006103cc565b6000546103cc9073ffffffffffffffffffffffffffffffffffffffff1681565b6000600282600f0b815481106105d6576105d6611d1a565b6000918252602090912001546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa15801561064d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106719190611d49565b92915050565b600f83810b60009081526005602090815260408083209386900b8352929052908120546b033b2e3c9fd0803ce8000000906106b3908490611d91565b6106bd9190611dce565b90505b9392505050565b60005b60028110156107f65760008382600281106106e7576106e7611d1a565b602002015111156107e4576002818154811061070557610705611d1a565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff166323b872dd333086856002811061074057610740611d1a565b60200201516040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff938416600482015292909116602483015260448201526064016020604051808303816000875af11580156107be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e29190611e09565b505b806107ee81611e26565b9150506106ca565b506000546040517f40c10f190000000000000000000000000000000000000000000000000000000081523360048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f19906044015b6020604051808303816000875af115801561086f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108939190611e09565b505050565b6108a06118ea565b6040805180820182529085906002908390839080828437600092019190915250919695505050505050565b6108d36118ea565b50604080518082019091526000808252602082015290565b6000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810185905273ffffffffffffffffffffffffffffffffffffffff909116906379cc6790906044016020604051808303816000875af1158015610962573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109869190611e09565b5061089333826002856fffffffffffffffffffffffffffffffff16815481106109b1576109b1611d1a565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1691906113f4565b6000600282600f0b815481106109f2576109f2611d1a565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1692915050565b6000610a27858585610d3d565b905081811015610abe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f437572766556314d6f636b3a20494e53554646494349454e545f4f555450555460448201527f5f414d4f554e540000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b610b133330856002896fffffffffffffffffffffffffffffffff1681548110610ae957610ae9611d1a565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169291906114c8565b610b3d33826002876fffffffffffffffffffffffffffffffff16815481106109b1576109b1611d1a565b5050505050565b6000600282815481106105d6576105d6611d1a565b600f83810b60009081526005602090815260408083209386900b835292905220819055610b926b033b2e3c9fd0803ce80000008261152c565b600f92830b60009081526005602090815260408083209690950b825294909452919092205550565b60005b6002811015610cdf576000828260028110610bda57610bda611d1a565b60200201511115610ccd5760028181548110610bf857610bf8611d1a565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33848460028110610c3257610c32611d1a565b60200201516040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af1158015610ca7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ccb9190611e09565b505b80610cd781611e26565b915050610bbd565b506000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810184905273ffffffffffffffffffffffffffffffffffffffff909116906379cc679090604401610850565b600f83810b60009081526004602090815260408083209386900b8352929052908120546b033b2e3c9fd0803ce8000000906106b3908490611d91565b6000546040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052909116906340c10f1990604401610850565b60006002856fffffffffffffffffffffffffffffffff1681548110610dff57610dff611d1a565b60009182526020822001546003805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff8816908110610e4b57610e4b611d1a565b60009182526020822001546002805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff8816908110610e9757610e97611d1a565b60009182526020822001546003805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff8916908110610ee357610ee3611d1a565b600091825260208220015473ffffffffffffffffffffffffffffffffffffffff169150610f11898989610677565b905085811015610fa3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f437572766556314d6f636b3a20494e53554646494349454e545f4f555450555460448201527f5f414d4f554e54000000000000000000000000000000000000000000000000006064820152608401610ab5565b610fc573ffffffffffffffffffffffffffffffffffffffff851633308a6114c8565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526024820189905285169063095ea7b3906044016020604051808303816000875af115801561103a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061105e9190611e09565b506040517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8616906340c10f1990604401600060405180830381600087803b1580156110cd57600080fd5b505af11580156110e1573d6000803e3d6000fd5b50506040517f1e9a69500000000000000000000000000000000000000000000000000000000081523060048201526024810184905273ffffffffffffffffffffffffffffffffffffffff86169250631e9a69509150604401600060405180830381600087803b15801561115357600080fd5b505af1158015611167573d6000803e3d6000fd5b5061118d9250505073ffffffffffffffffffffffffffffffffffffffff831633836113f4565b505050505050505050565b6000600382600f0b815481106109f2576109f2611d1a565b600f83810b60009081526004602090815260408083209386900b8352929052208190556111e96b033b2e3c9fd0803ce80000008261152c565b600f92830b60009081526004602090815260408083209690950b825294909452919092205550565b6000600382815481106109f2576109f2611d1a565b6000600282815481106109f2576109f2611d1a565b600f81900b6000908152600660205260408120546b033b2e3c9fd0803ce8000000906112679085611d91565b6106c09190611dce565b60005b600281101561139657600083826002811061129157611291611d1a565b6020020135111561138457600281815481106112af576112af611d1a565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb338584600281106112e9576112e9611d1a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff9093166004840152602002013560248201526044016020604051808303816000875af115801561135e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113829190611e09565b505b8061138e81611e26565b915050611274565b506000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906379cc679090604401610850565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526108939084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611692565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526115269085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611446565b50505050565b60408051808201909152600281527f4d3300000000000000000000000000000000000000000000000000000000000060208201526000908261159b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab59190611966565b5060006115a9600284611dce565b90506b033b2e3c9fd0803ce80000006115e2827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611e5f565b6115ec9190611dce565b8411156040518060400160405280600281526020017f4d310000000000000000000000000000000000000000000000000000000000008152509061165d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab59190611966565b5082816116766b033b2e3c9fd0803ce800000087611d91565b6116809190611e76565b61168a9190611dce565b949350505050565b60006116f4826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661179e9092919063ffffffff16565b80519091501561089357808060200190518101906117129190611e09565b610893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610ab5565b60606106bd848460008585843b611811576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610ab5565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161183a9190611e8e565b60006040518083038185875af1925050503d8060008114611877576040519150601f19603f3d011682016040523d82523d6000602084013e61187c565b606091505b509150915061188c828286611897565b979650505050505050565b606083156118a65750816106c0565b8251156118b65782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab59190611966565b60405180604001604052806002906020820280368337509192915050565b8035600f81900b811461191a57600080fd5b919050565b60006020828403121561193157600080fd5b6106c082611908565b60005b8381101561195557818101518382015260200161193d565b838111156115265750506000910152565b602081526000825180602084015261198581604085016020870161193a565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000606084860312156119cc57600080fd5b6119d584611908565b92506119e360208501611908565b9150604084013590509250925092565b600082601f830112611a0457600080fd5b6040516040810181811067ffffffffffffffff82111715611a4e577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b8060405250806040840185811115611a6557600080fd5b845b81811015611a7f578035835260209283019201611a67565b509195945050505050565b60008060608385031215611a9d57600080fd5b611aa784846119f3565b946040939093013593505050565b806040810183101561067157600080fd5b600080600060a08486031215611adb57600080fd5b611ae58585611ab5565b9250611af48560408601611ab5565b9150608084013590509250925092565b60408101818360005b6002811015611b2c578151835260209283019290910190600101611b0d565b50505092915050565b600080600060608486031215611b4a57600080fd5b833592506119e360208501611908565b60008060008060808587031215611b7057600080fd5b611b7985611908565b9350611b8760208601611908565b93969395505050506040820135916060013590565b600060208284031215611bae57600080fd5b5035919050565b60008060608385031215611bc857600080fd5b82359150611bd984602085016119f3565b90509250929050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461191a57600080fd5b600060208284031215611c1857600080fd5b6106c082611be2565b60008060408385031215611c3457600080fd5b611c3d83611908565b946020939093013593505050565b60008060408385031215611c5e57600080fd5b611c3d83611be2565b60008060408385031215611c7a57600080fd5b82359150611bd960208401611908565b60008060408385031215611c9d57600080fd5b611ca683611be2565b9150611bd960208401611be2565b60008060608385031215611cc757600080fd5b611aa78484611ab5565b8015158114611cdf57600080fd5b50565b60008060608385031215611cf557600080fd5b611cff8484611ab5565b91506040830135611d0f81611cd1565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215611d5b57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611dc957611dc9611d62565b500290565b600082611e04577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600060208284031215611e1b57600080fd5b81516106c081611cd1565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611e5857611e58611d62565b5060010190565b600082821015611e7157611e71611d62565b500390565b60008219821115611e8957611e89611d62565b500190565b60008251611ea081846020870161193a565b919091019291505056fea2646970667358221220adf7625854adc68c76c6173acf1acab253dff9360c8a557d9c3227c5377c0ffb64736f6c634300080a003360a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a00336102606040523480156200001257600080fd5b5060405162005f7e38038062005f7e833981016040819052620000359162000ba4565b83838383600284846001600160a01b03821615806200005b57506001600160a01b038116155b156200007a57604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038216608081905260408051632f7a188160e01b81529051632f7a1881916004808201926020929091908290030181865afa158015620000c5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000eb919062000c01565b6001600160a01b0390811660a05290811660c05260016000558416151590506200012857604051635919af9760e11b815260040160405180910390fd5b608051604051630f67c5bd60e41b81526001600160a01b0385811660048301529091169063f67c5bd090602401602060405180830381865afa15801562000173573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000199919062000c26565b620001c757604051634c607af960e11b81526001600160a01b03841660048201526024015b60405180910390fd5b6001600160a01b038084166101e081905261020052821661022052610240819052620001f460006200090a565b6001600160a01b031660e0526200020c60016200090a565b6001600160a01b0316610100526200022560026200090a565b6001600160a01b0316610120526200023e60036200090a565b6001600160a01b031661014052620002576000620009fd565b6001600160a01b031661016052620002706001620009fd565b6001600160a01b031661018052620002896002620009fd565b6001600160a01b03166101a052620002a26003620009fd565b6001600160a01b039081166101c05260e051161580620002cc5750610100516001600160a01b0316155b15620002eb57604051635919af9760e11b815260040160405180910390fd5b600281118015620003065750610120516001600160a01b0316155b156200032557604051635919af9760e11b815260040160405180910390fd5b600381118015620003405750610140516001600160a01b0316155b156200035f57604051635919af9760e11b815260040160405180910390fd5b60805160e051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620003ac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003d2919062000c26565b620004005760e051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b60805161010051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa1580156200044e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000474919062000c26565b620004a35761010051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b60028111801562000525575060805161012051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620004fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000523919062000c26565b155b15620005555761012051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b600381118015620005d7575060805161014051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620005af573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005d5919062000c26565b155b15620006075761014051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b610160516001600160a01b03161580159062000694575060805161016051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa1580156200066c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000692919062000c26565b155b15620006c45761016051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b610180516001600160a01b03161580159062000751575060805161018051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa15801562000729573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200074f919062000c26565b155b15620007815761018051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b6101a0516001600160a01b0316158015906200080e57506080516101a051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620007e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200080c919062000c26565b155b156200083e576101a051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b6101c0516001600160a01b031615801590620008cb57506080516101c051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620008a3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008c9919062000c26565b155b15620008fb576101c051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b50505050505050505062000c66565b60c05160405163c661065760e01b8152600481018390526000916001600160a01b03169063c661065790602401602060405180830381865afa92505050801562000973575060408051601f3d908101601f19168201909252620009709181019062000c01565b60015b6200097e5762000984565b92915050565b60c05160405163046e8dd760e31b8152600f84900b60048201526001600160a01b03909116906323746eb8906024015b602060405180830381865afa925050508015620009f0575060408051601f3d908101601f19168201909252620009ed9181019062000c01565b60015b6200097e57506000919050565b610220516000906001600160a01b03161562000a1e576200097e8262000ac0565b60c051604051630b9947eb60e41b8152600481018490526001600160a01b039091169063b9947eb090602401602060405180830381865afa92505050801562000a86575060408051601f3d908101601f1916820190925262000a839181019062000c01565b60015b6200097e5760c051604051635b9cca9f60e11b8152600f84900b60048201526001600160a01b039091169063b739953e90602401620009b4565b60008162000ad4576200097e600062000b17565b610220516001600160a01b031663c661065762000af360018562000c40565b6040518263ffffffff1660e01b8152600401620009b491815260200190565b919050565b600081600f0b6000141562000b2b575060e0515b81600f0b6001141562000b3e5750610100515b81600f0b6002141562000b515750610120515b81600f0b6003141562000b645750610140515b6001600160a01b03811662000b12576040516334769e6f60e21b815260040160405180910390fd5b80516001600160a01b038116811462000b1257600080fd5b6000806000806080858703121562000bbb57600080fd5b62000bc68562000b8c565b935062000bd66020860162000b8c565b925062000be66040860162000b8c565b915062000bf66060860162000b8c565b905092959194509250565b60006020828403121562000c1457600080fd5b62000c1f8262000b8c565b9392505050565b60006020828403121562000c3957600080fd5b5051919050565b60008282101562000c6157634e487b7160e01b600052601160045260246000fd5b500390565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e051610200516102205161024051614f9b62000fe36000396000818161077001528181613503015281816135f501528181613735015281816138ec0152613a06015260006105f101526000818161068801528181611ec70152818161238c015281816126b3015281816129580152818161303a01526130d8015260006108a701526000818161059c0152612a5a0152600081816103d40152612a2b01526000818161061801526129fc0152600081816106af01526129cd015260008181610870015281816128320152818161365f01528181613f5e01526143f20152600081816104fd015281816128030152818161356d01528181613e8e01526142d60152600081816107da015281816127d40152818161347901528181613dbe01526141ba01526000818161045d015281816127a5015281816133ad01528181613cee015261409e01526000818161072201528181610914015281816109e101528181610a7101528181610b6901528181610cd601528181610d5301528181610dea01528181610e7a0152818161128801528181611300015281816114d801528181611572015281816115ba015281816116e101528181611729015281816117da0152818161180f01528181611af801528181611bef01528181611c6701528181611d0c01528181611f1101528181611fc901528181611ffe015281816120990152818161240d01528181612448015281816124b50152818161254601528181612c7801528181612d9701528181612e710152818161407601528181614192015281816142ae015281816143ca015261451201526000818161052401528181612ae3015281816145b90152614693015260008181610749015281816110180152818161191a01528181611e5301528181612232015281816125e0015281816126db015281816128d001528181612cce01528181612d6801528181612ec701528181612f6f01528181613231015281816132e8015281816133d8015281816134a1015281816135950152818161368701528181613c2101528181613d1601528181613de601528181613eb601528181613f86015281816140ec015281816142080152818161432401528181614440015281816144e3015281816146230152818161471b015281816147cf01526148790152614f9b6000f3fe608060405234801561001057600080fd5b50600436106103a45760003560e01c806378aa73a4116101e9578063ce30bbdb1161010f578063e3103273116100ad578063f446c1d01161007c578063f446c1d014610892578063f851a4401461089a578063fc0c546a146108a2578063fee3f7f9146108c957600080fd5b8063e310327314610832578063ec026ca714610845578063ed8e84f314610858578063ef14101e1461086b57600080fd5b8063d96c7fce116100e9578063d96c7fce146107fc578063dd62ed3e14610804578063ddca3f4314610817578063e2e7d2641461081f57600080fd5b8063ce30bbdb146107b3578063cf023dd0146107c2578063d21220a7146107d557600080fd5b8063b739953e11610187578063c12c21c011610156578063c12c21c014610744578063c21ee1621461076b578063c661065714610792578063cc2b27d7146107a057600080fd5b8063b739953e146106f4578063b9947eb014610707578063bb7b8b8014610715578063bd90df701461071d57600080fd5b80638ba51dfc116101c35780638ba51dfc146106aa57806395d89b41146106d1578063a6417ed6146106d9578063b4b577ad146106ec57600080fd5b806378aa73a41461065557806379bea6641461067057806382c630661461068357600080fd5b80632f7a1881116102ce57806357d788751161026c57806364a89bca1161023b57806364a89bca146105ec5780636e1d82711461061357806370a082311461063a57806376a2f0f01461064d57600080fd5b806357d78875146105975780635b36389c146105be5780635e0d443f146105d157806363543f06146105e457600080fd5b80633df02124116102a85780633df02124146105615780634469e30e146105745780634903b0d11461057c5780635409491a1461058f57600080fd5b80632f7a18811461051f578063313ce5671461054657806333d2ebf21461054e57600080fd5b806314052288116103465780631af4de83116103155780631af4de83146104ca5780632081066c146104dd57806323746eb8146104e557806325be124e146104f857600080fd5b8063140522881461049f57806314f05979146104a757806318160ddd146104af5780631a4d01d2146104b757600080fd5b806307211ef71161038257806307211ef7146104305780630b4c7e4d146104435780630dfe1681146104585780630f6ba8e31461047f57600080fd5b8063065a80d8146103a957806306871163146103cf57806306fdde031461041b575b600080fd5b6103bc6103b736600461490d565b6108d1565b6040519081526020015b60405180910390f35b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016103c6565b610423610a6d565b6040516103c6919061499e565b6103bc61043e3660046149b1565b610b25565b6104566104513660046149fe565b610bf4565b005b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b61049261048d366004614a29565b610c91565b6040516103c69190614a67565b6103bc610d4f565b610492610de0565b6103bc610e76565b6104566104c5366004614a98565b610ee3565b6104566104d83660046149b1565b610f76565b6103bc611284565b6103f66104f336600461490d565b6112f1565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc6112fc565b61045661055c366004614abd565b611369565b61045661056f366004614ae7565b6113fd565b6104926114ce565b6103bc61058a366004614b29565b611540565b6103bc6115b6565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6104566105cc366004614b42565b611623565b6103bc6105df3660046149b1565b61169d565b6103bc611725565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc610648366004614b91565b611792565b6103bc61180b565b61065d600281565b60405161ffff90911681526020016103c6565b61045661067e3660046149b1565b611878565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b610423611af4565b6104566106e7366004614ae7565b611b61565b6103bc611beb565b6103f661070236600461490d565b611c58565b6103f6610702366004614b29565b6103bc611c63565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc7f000000000000000000000000000000000000000000000000000000000000000081565b6103f66104f3366004614b29565b6103bc6107ae366004614bae565b611cd0565b60056040516103c69190614bd1565b6104566107d0366004614a98565b611d8d565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b610492611f07565b6103bc610812366004614c12565b611f79565b6103bc611ffa565b6103bc61082d366004614b29565b612067565b6104566108403660046149fe565b6120dd565b610456610853366004614abd565b61216c565b6103bc610866366004614c4b565b6123cd565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc612444565b6103f66124b1565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc612542565b6040517f4903b0d10000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff821660048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634903b0d1906024015b602060405180830381865afa9250505080156109ab575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526109a891810190614c7d565b60015b610a62576040517f065a80d8000000000000000000000000000000000000000000000000000000008152600f83900b60048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063065a80d8906024015b602060405180830381865afa158015610a3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a629190614c7d565b92915050565b919050565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015610ada573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b209190810190614d57565b905090565b6040517f07211ef7000000000000000000000000000000000000000000000000000000008152600f84810b600483015283900b6024820152604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906307211ef7906064015b602060405180830381865afa158015610bc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bea9190614c7d565b90505b9392505050565b60026000541415610c66576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b60026000908155610c88906001843581109160208601359190911190806125af565b50506001600055565b610c996148dd565b6040517f0f6ba8e300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690630f6ba8e390610d0f90879087908790600401614da8565b6040805180830381865afa158015610d2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bea9190614dcf565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663140522886040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b209190614c7d565b610de86148dd565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166314f059796040518163ffffffff1660e01b81526004016040805180830381865afa158015610e52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b209190614dcf565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b60026000541415610f50576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b60026000908155610f6083612794565b9050610f6b8161289f565b505060016000555050565b60026000541415610fe3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611074573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110989190614e4f565b905060006110a5856129bc565b905060006110b2856129bc565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529192506000918416906370a0823190602401602060405180830381865afa158015611124573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111489190614c7d565b90506001811115611276577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce800000061118e8784614e6c565b6111989190614ed0565b604051600f8a810b602483015289900b60448201526064810184905260848101829052909150611273908690869086907fa6417ed6000000000000000000000000000000000000000000000000000000009060a4015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152600180612ac6565b50505b505060016000555050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632081066c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b6000610a6282612794565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b600260005414156113d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b600260009081556113e683612794565b90506113f3838284612f3e565b5050600160005550565b6002600054141561146a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b6002600090815561147a85612794565b9050600061148785612794565b905061127682826000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052506001935091506131e89050565b6114d66148dd565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16634469e30e6040518163ffffffff1660e01b81526004016040805180830381865afa158015610e52573d6000803e3d6000fd5b6040517f4903b0d1000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634903b0d190602401610954565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635409491a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b60026000541415611690576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b6002600055610c886132b7565b6040517f5e0d443f000000000000000000000000000000000000000000000000000000008152600f84810b600483015283900b6024820152604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635e0d443f90606401610ba9565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166363543f066040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401610a21565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166376a2f0f06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b600260005414156118e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611976573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061199a9190614e4f565b905060006119a785612794565b905060006119b485612794565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529192506000918416906370a0823190602401602060405180830381865afa158015611a26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a4a9190614c7d565b90506001811115611276577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce8000000611a908784614e6c565b611a9a9190614ed0565b604051600f8a810b602483015289900b60448201526064810184905260848101829052909150611273908690869086907f3df02124000000000000000000000000000000000000000000000000000000009060a4016111ee565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610ada573d6000803e3d6000fd5b60026000541415611bce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b60026000908155611bde856129bc565b90506000611487856129bc565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b4b577ad6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b6000610a62826129bc565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb7b8b806040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b6040517fcc2b27d700000000000000000000000000000000000000000000000000000000815260048101839052600f82900b60248201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063cc2b27d7906044015b602060405180830381865afa158015611d69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bed9190614c7d565b60026000541415611dfa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b60026000908155611e0a83612794565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611e9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ebe9190614e4f565b9050611efa81837f0000000000000000000000000000000000000000000000000000000000000000611ef1888a89613731565b60016000612ac6565b5050600160005550505050565b611f0f6148dd565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d96c7fce6040518163ffffffff1660e01b81526004016040805180830381865afa158015610e52573d6000803e3d6000fd5b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063dd62ed3e90604401611d4c565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b6040517fe2e7d264000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e2e7d26490602401610a21565b6002600054141561214a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b60026000908155610c8890600184358110916020860135919091119080613bf0565b600260005414156121d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b600260009081556121e983612794565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015612279573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061229d9190614e4f565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000918416906370a0823190602401602060405180830381865afa15801561230f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123339190614c7d565b905060018111156123c1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce80000006123798684614e6c565b6123839190614ed0565b90506123be83857f00000000000000000000000000000000000000000000000000000000000000006123b68a8787613731565b600180612ac6565b50505b50506001600055505050565b6040517fed8e84f300000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063ed8e84f390611d4c9086908690600401614f0b565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f446c1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa15801561251e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b209190614e4f565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fee3f7f96040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa15801561263c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126609190614e4f565b905061266e8585858561402d565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561271f57600080fd5b505af1158015612733573d6000803e3d6000fd5b505050506127776000368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506144a392505050565b506127848585858561402d565b61278d816145a1565b5050505050565b600081600f0b600014156127c557507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b600114156127f457507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6002141561282357507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6003141561285257507f00000000000000000000000000000000000000000000000000000000000000005b73ffffffffffffffffffffffffffffffffffffffff8116610a68576040517fd1da79bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa15801561292c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129509190614e4f565b90506129b7817f0000000000000000000000000000000000000000000000000000000000000000846000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509250829150612ac69050565b505050565b600081600f0b600014156129ed57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b60011415612a1c57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b60021415612a4b57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6003141561285257507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff8116610a68576040517fd1da79bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606000803373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614612c2f576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301528916906370a0823190602401602060405180830381865afa158015612b74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b989190614c7d565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152919350908816906370a0823190602401602060405180830381865afa158015612c08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c2c9190614c7d565b90505b8415612d2b576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612d1257600080fd5b505af1158015612d26573d6000803e3d6000fd5b505050505b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a90612dc19033907f0000000000000000000000000000000000000000000000000000000000000000908b90600401614f23565b6000604051808303816000875af1158015612de0573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052612e269190810190614d57565b92508415612f24576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612f0b57600080fd5b505af1158015612f1f573d6000803e3d6000fd5b505050505b612f3289898985858961467b565b50509695505050505050565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612fcb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fef9190614e4f565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000917f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015613081573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130a59190614c7d565b9050600181111561278d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016131e0827f0000000000000000000000000000000000000000000000000000000000000000867f1a4d01d200000000000000000000000000000000000000000000000000000000858a6b033b2e3c9fd0803ce80000006131328b84614e6c565b61313c9190614ed0565b6040516024810193909352600f9190910b60448301526064820152608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915260006001612ac6565b505050505050565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015260609060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015613278573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061329c9190614e4f565b90506132ac818888888888612ac6565b979650505050505050565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015613344573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133689190614e4f565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301529192507f0000000000000000000000000000000000000000000000000000000000000000909116906351e3f16090604401600060405180830381600087803b15801561341e57600080fd5b505af1158015613432573d6000803e3d6000fd5b50506040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f00000000000000000000000000000000000000000000000000000000000000001692506351e3f1609150604401600060405180830381600087803b1580156134e757600080fd5b505af11580156134fb573d6000803e3d6000fd5b5050505060027f000000000000000000000000000000000000000000000000000000000000000011156136e4576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156135d957600080fd5b505af11580156135ed573d6000803e3d6000fd5b5050505060037f000000000000000000000000000000000000000000000000000000000000000011156136e4576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156136cb57600080fd5b505af11580156136df573d6000803e3d6000fd5b505050505b6137246000368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506144a392505050565b5061372e816145a1565b50565b60607f0000000000000000000000000000000000000000000000000000000000000000600214156138ea5783600f0b600014613827576040516000602482015260448101849052606481018390527f0b4c7e4d00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526138e3565b6040516024810184905260006044820152606481018390527f0b4c7e4d00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091525b9050610bed565b7f000000000000000000000000000000000000000000000000000000000000000060031415613a045783600f0b6000146139bb5783600f0b60011461397257604051600060248201819052604482015260648101849052608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a4016137a5565b604051600060248201819052604482018590526064820152608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a4016137a5565b604051602481018490526000604482018190526064820152608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401613865565b7f000000000000000000000000000000000000000000000000000000000000000060041415613b8e5783600f0b600014613b3e5783600f0b600114613aee5783600f0b600214613a9e576040516000602482018190526044820181905260648201526084810184905260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c4016137a5565b6040516000602482018190526044820181905260648201859052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c4016137a5565b6040516000602482018190526044820185905260648201819052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c4016137a5565b6040516024810184905260006044820181905260648201819052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613865565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f496e636f7272656374206e436f696e73000000000000000000000000000000006044820152606401610c5d565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015613c7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ca19190614e4f565b90508415613d73576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015613d5a57600080fd5b505af1158015613d6e573d6000803e3d6000fd5b505050505b8315613e43576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015613e2a57600080fd5b505af1158015613e3e573d6000803e3d6000fd5b505050505b8215613f13576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015613efa57600080fd5b505af1158015613f0e573d6000803e3d6000fd5b505050505b8115613fe3576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015613fca57600080fd5b505af1158015613fde573d6000803e3d6000fd5b505050505b6140236000368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506144a392505050565b5061278d816145a1565b8315614149576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561413057600080fd5b505af1158015614144573d6000803e3d6000fd5b505050505b8215614265576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561424c57600080fd5b505af1158015614260573d6000803e3d6000fd5b505050505b8115614381576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561436857600080fd5b505af115801561437c573d6000803e3d6000fd5b505050505b801561449d576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561448457600080fd5b505af1158015614498573d6000803e3d6000fd5b505050505b50505050565b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815260609073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a9061453c9033907f0000000000000000000000000000000000000000000000000000000000000000908790600401614f23565b6000604051808303816000875af115801561455b573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610a629190810190614d57565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461372e576040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b15801561466757600080fd5b505af115801561278d573d6000803e3d6000fd5b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461477c576040517f654a9eda00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528681166024830152858116604483015260648201859052608482018490527f0000000000000000000000000000000000000000000000000000000000000000169063654a9eda9060a401600060405180830381600087803b15801561475f57600080fd5b505af1158015614773573d6000803e3d6000fd5b505050506131e0565b801561482c576040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015286811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b15801561481357600080fd5b505af1158015614827573d6000803e3d6000fd5b505050505b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015285811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156148bd57600080fd5b505af11580156148d1573d6000803e3d6000fd5b50505050505050505050565b60405180604001604052806002906020820280368337509192915050565b8035600f81900b8114610a6857600080fd5b60006020828403121561491f57600080fd5b610bed826148fb565b60005b8381101561494357818101518382015260200161492b565b8381111561449d5750506000910152565b6000815180845261496c816020860160208601614928565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610bed6020830184614954565b6000806000606084860312156149c657600080fd5b6149cf846148fb565b92506149dd602085016148fb565b9150604084013590509250925092565b8060408101831015610a6257600080fd5b60008060608385031215614a1157600080fd5b614a1b84846149ed565b946040939093013593505050565b600080600060a08486031215614a3e57600080fd5b614a4885856149ed565b9250614a5785604086016149ed565b9150608084013590509250925092565b60408101818360005b6002811015614a8f578151835260209283019290910190600101614a70565b50505092915050565b600080600060608486031215614aad57600080fd5b833592506149dd602085016148fb565b60008060408385031215614ad057600080fd5b614ad9836148fb565b946020939093013593505050565b60008060008060808587031215614afd57600080fd5b614b06856148fb565b9350614b14602086016148fb565b93969395505050506040820135916060013590565b600060208284031215614b3b57600080fd5b5035919050565b60008060608385031215614b5557600080fd5b82359150614b6684602085016149ed565b90509250929050565b73ffffffffffffffffffffffffffffffffffffffff8116811461372e57600080fd5b600060208284031215614ba357600080fd5b8135610bed81614b6f565b60008060408385031215614bc157600080fd5b82359150614b66602084016148fb565b6020810160118310614c0c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60008060408385031215614c2557600080fd5b8235614c3081614b6f565b91506020830135614c4081614b6f565b809150509250929050565b60008060608385031215614c5e57600080fd5b614c6884846149ed565b915060408301358015158114614c4057600080fd5b600060208284031215614c8f57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff80841115614ce057614ce0614c96565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715614d2657614d26614c96565b81604052809350858152868686011115614d3f57600080fd5b614d4d866020830187614928565b5050509392505050565b600060208284031215614d6957600080fd5b815167ffffffffffffffff811115614d8057600080fd5b8201601f81018413614d9157600080fd5b614da084825160208401614cc5565b949350505050565b60a08101604085833760408201600081526040858237506080919091019190915292915050565b600060408284031215614de157600080fd5b82601f830112614df057600080fd5b6040516040810181811067ffffffffffffffff82111715614e1357614e13614c96565b8060405250806040840185811115614e2a57600080fd5b845b81811015614e44578051835260209283019201614e2c565b509195945050505050565b600060208284031215614e6157600080fd5b8151610bed81614b6f565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ecb577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500290565b600082614f06577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60608101604084833791151560409190910152919050565b600073ffffffffffffffffffffffffffffffffffffffff808616835280851660208401525060606040830152614f5c6060830184614954565b9594505050505056fea26469706673582212205dd1b4208756e7993c5cfaf271be99123f9b37ebc97bdd8fd152eac9cd1e945564736f6c634300080a00336101406040523480156200001257600080fd5b506040516200171338038062001713833981016040819052620000359162000389565b6000805460ff191690558484828260c882826001600160a01b0381166200006f57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000ae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d49190620004b3565b6001600160a01b0316608052508051620000f6906002906020840190620002b0565b505060a052506001600160a01b0382166200012457604051635919af9760e11b815260040160405180910390fd5b6001600160a01b03821660c0819052670de0b6b3a764000060e05260408051630176f71760e71b815290516000929163bb7b8b809160048083019260209291908290030181865afa1580156200017e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001a49190620004d8565b9050620001b18162000210565b505050506001600160a01b0383161580620001d357506001600160a01b038216155b15620001f257604051635919af9760e11b815260040160405180910390fd5b506001600160a01b0391821661010052166101205250620005a59050565b806200022f576040516309aadd6f60e41b815260040160405180910390fd5b60018190557f82e7ee47180a631312683eeb2a85ad264c9af490d54de5a75bbdb95b968c6de28162000261816200027c565b6040805192835260208301919091520160405180910390a150565b60a0516000906127109062000292908262000508565b6200029e908462000523565b620002aa919062000545565b92915050565b828054620002be9062000568565b90600052602060002090601f016020900481019282620002e257600085556200032d565b82601f10620002fd57805160ff19168380011785556200032d565b828001600101855582156200032d579182015b828111156200032d57825182559160200191906001019062000310565b506200033b9291506200033f565b5090565b5b808211156200033b576000815560010162000340565b80516001600160a01b03811681146200036e57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600080600080600060a08688031215620003a257600080fd5b620003ad8662000356565b94506020620003be81880162000356565b9450620003ce6040880162000356565b9350620003de6060880162000356565b60808801519093506001600160401b0380821115620003fc57600080fd5b818901915089601f8301126200041157600080fd5b81518181111562000426576200042662000373565b604051601f8201601f19908116603f0116810190838211818310171562000451576200045162000373565b816040528281528c868487010111156200046a57600080fd5b600093505b828410156200048e57848401860151818501870152928501926200046f565b82841115620004a05760008684830101525b8096505050505050509295509295909350565b600060208284031215620004c657600080fd5b620004d18262000356565b9392505050565b600060208284031215620004eb57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156200051e576200051e620004f2565b500190565b6000816000190483118215151615620005405762000540620004f2565b500290565b6000826200056357634e487b7160e01b600052601260045260246000fd5b500490565b600181811c908216806200057d57607f821691505b602082108114156200059f57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c05160e05161010051610120516110e66200062d6000396000818161034101526107c80152600081816102f701526107190152600081816102d00152610923015260008181610195015261088701526000818161015b0152610b150152600081816102a90152818161039901528181610515015261064d01526110e66000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c80639a6fc8f5116100cd578063b09ad8a011610081578063d62ada1111610066578063d62ada1114610334578063e5693f411461033c578063feaf968c1461036357600080fd5b8063b09ad8a014610319578063bc489a651461032157600080fd5b8063a50cf2c8116100b2578063a50cf2c8146102a4578063a834559e146102cb578063ab0ca0e1146102f257600080fd5b80639a6fc8f514610251578063a384d6ff1461029b57600080fd5b80633fd0875f116101245780635c975abb116101095780635c975abb1461021d5780637284e416146102345780638456cb591461024957600080fd5b80633fd0875f1461020057806354fd4d501461021557600080fd5b806312b495a814610156578063218751b214610190578063313ce567146101dc5780633f4ba83a146101f6575b600080fd5b61017d7f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b6101b77f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610187565b6101e4600881565b60405160ff9091168152602001610187565b6101fe61036b565b005b610208600281565b6040516101879190610cd5565b61017d600181565b60005460ff165b6040519015158152602001610187565b61023c610459565b6040516101879190610d16565b6101fe6104e7565b61026461025f366004610da1565b6105d3565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610187565b61017d60015481565b6101b77f000000000000000000000000000000000000000000000000000000000000000081565b61017d7f000000000000000000000000000000000000000000000000000000000000000081565b6101b77f000000000000000000000000000000000000000000000000000000000000000081565b61017d61060d565b6101fe61032f366004610dc5565b61061f565b610224600181565b6101b77f000000000000000000000000000000000000000000000000000000000000000081565b61026461070f565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156103f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104199190610dde565b61044f576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610457610965565b565b6002805461046690610e00565b80601f016020809104026020016040519081016040528092919081815260200182805461049290610e00565b80156104df5780601f106104b4576101008083540402835291602001916104df565b820191906000526020600020905b8154815290600101906020018083116104c257829003601f168201915b505050505081565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015610571573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105959190610dde565b6105cb576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610457610a4b565b60008060008060006040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061061a600154610b0b565b905090565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156106a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106cd9190610dde565b610703576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61070c81610b54565b50565b60008060008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610782573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a69190610e54565b9398509196509450925090506107be85858484610bd6565b60008060008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610831573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108559190610e54565b9450945094509450945061086b85858484610bd6565b88841215610883578499508398508297508196508095505b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb7b8b806040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109149190610eac565b905061091f81610c71565b90507f000000000000000000000000000000000000000000000000000000000000000061094c828c610ef4565b6109569190610fdf565b99505050505050509091929394565b60005460ff166109d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff1615610ab8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016109cd565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610a213390565b6000612710610b3a7f000000000000000000000000000000000000000000000000000000000000000082611047565b610b44908461105f565b610b4e919061109c565b92915050565b80610b8b576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190557f82e7ee47180a631312683eeb2a85ad264c9af490d54de5a75bbdb95b968c6de281610bbb81610b0b565b6040805192835260208301919091520160405180910390a150565b60008313610c10576040517f56e05d2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8369ffffffffffffffffffff168169ffffffffffffffffffff161080610c34575081155b15610c6b576040517fb1cf675500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60015460009080831015610cb1576040517fb416da7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610cbc82610b0b565b905080841115610ccd579392505050565b509192915050565b6020810160068310610d10577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b600060208083528351808285015260005b81811015610d4357858101830151858201604001528201610d27565b81811115610d55576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b69ffffffffffffffffffff8116811461070c57600080fd5b600060208284031215610db357600080fd5b8135610dbe81610d89565b9392505050565b600060208284031215610dd757600080fd5b5035919050565b600060208284031215610df057600080fd5b81518015158114610dbe57600080fd5b600181811c90821680610e1457607f821691505b60208210811415610e4e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600080600080600060a08688031215610e6c57600080fd5b8551610e7781610d89565b809550506020860151935060408601519250606086015191506080860151610e9e81610d89565b809150509295509295909350565b600060208284031215610ebe57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615610f3557610f35610ec5565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615610f7057610f70610ec5565b60008712925087820587128484161615610f8c57610f8c610ec5565b87850587128184161615610fa257610fa2610ec5565b505050929093029392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082610fee57610fee610fb0565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f80000000000000000000000000000000000000000000000000000000000000008314161561104257611042610ec5565b500590565b6000821982111561105a5761105a610ec5565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561109757611097610ec5565b500290565b6000826110ab576110ab610fb0565b50049056fea2646970667358221220ca5730f8ac976a41fd1283a55d712276536b576394940abc65027e8592280cc364736f6c634300080a003360806040523480156200001157600080fd5b5060405162003960380380620039608339810160408190526200003491620002a2565b8151829082906200004d90600290602085019062000133565b5080516200006390600390602084019062000133565b506000601260405162000076906200019d565b6060808252600790820152664352564d6f636b60c81b608082015260a0602082018190526015908201527f43525620666f72204375727665506f6f6c4d6f636b000000000000000000000060c082015260ff909116604082015260e001604051809103906000f080158015620000f0573d6000803e3d6000fd5b50600080546001600160a01b039092166001600160a01b03199283168117909155600180549092161790555050670de0b6b3a7640000600755506200030c915050565b8280548282559060005260206000209081019282156200018b579160200282015b828111156200018b57825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019062000154565b5062000199929150620001ab565b5090565b611758806200220883390190565b5b80821115620001995760008155600101620001ac565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b0381168114620001f057600080fd5b919050565b600082601f8301126200020757600080fd5b815160206001600160401b0380831115620002265762000226620001c2565b8260051b604051601f19603f830116810181811084821117156200024e576200024e620001c2565b6040529384528581018301938381019250878511156200026d57600080fd5b83870191505b8482101562000297576200028782620001d8565b8352918301919083019062000273565b979650505050505050565b60008060408385031215620002b657600080fd5b82516001600160401b0380821115620002ce57600080fd5b620002dc86838701620001f5565b93506020850151915080821115620002f357600080fd5b506200030285828601620001f5565b9150509250929050565b611eec806200031c6000396000f3fe608060405234801561001057600080fd5b506004361061030a5760003560e01c806382c630661161019c578063bb7b8b80116100ee578063e2e7d26411610097578063f851a44011610071578063f851a44014610597578063fc0c546a1461059e578063fee3f7f91461036257600080fd5b8063e2e7d26414610576578063ecb586a514610584578063f446c1d01461036257600080fd5b8063d96c7fce116100c8578063d96c7fce14610369578063dd62ed3e14610568578063ddca3f431461036257600080fd5b8063bb7b8b801461053a578063c661065714610542578063cc2b27d71461055557600080fd5b80639fdaea0c11610150578063b739953e1161012a578063b739953e14610501578063b91434d114610514578063b9947eb01461052757600080fd5b80639fdaea0c146104db578063a6417ed6146104ee578063b4b577ad1461036257600080fd5b80638ea875f3116101815780638ea875f3146104bf57806395d89b411461033557806399bd2ba5146104c857600080fd5b806382c630661461048c57806385ca3c6f146104ac57600080fd5b80633df02124116102605780635e0d443f1161020957806371035418116101e3578063710354181461045457806376a2f0f0146103625780637b475b681461046757600080fd5b80635e0d443f1461042d57806363543f061461036257806370a082311461044057600080fd5b80634903b0d11161023a5780634903b0d1146104075780635409491a1461036257806356ac35031461041a57600080fd5b80633df02124146103e15780634469e30e146103695780634515cef3146103f457600080fd5b806318160ddd116102c257806323746eb81161029c57806323746eb814610393578063313ce567146103625780633883e119146103cb57600080fd5b806318160ddd146103625780631a4d01d21461037e5780632081066c1461036257600080fd5b806307211ef7116102f357806307211ef71461034f578063140522881461036257806314f059791461036957600080fd5b8063065a80d81461030f57806306fdde0314610335575b600080fd5b61032261031d36600461192d565b6105be565b6040519081526020015b60405180910390f35b6040805160208101825260008152905161032c9190611974565b61032261035d3660046119c5565b610677565b6000610322565b6103716106c7565b60405161032c9190611a01565b61039161038c366004611a32565b6106f2565b005b6103a66103a136600461192d565b6107e6565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161032c565b6103226103d9366004611a79565b600092915050565b6103916103ef366004611ab1565b610826565b610391610402366004611b88565b610950565b610322610415366004611bb3565b610b1c565b6103916104283660046119c5565b610b31565b61032261043b3660046119c5565b610b92565b61032261044e366004611bf0565b50600090565b610391610462366004611bb3565b600755565b610391610475366004611c0b565b600f9190910b600090815260066020526040902055565b6001546103a69073ffffffffffffffffffffffffffffffffffffffff1681565b6103716104ba366004611c35565b610bce565b61032260075481565b6103916104d6366004611c73565b610c04565b6103916104e9366004611c8f565b610c63565b6103916104fc366004611ab1565b610de6565b6103a661050f36600461192d565b6111a6565b6103916105223660046119c5565b6111be565b6103a6610535366004611bb3565b61121f565b600754610322565b6103a6610550366004611bb3565b611234565b610322610563366004611cac565b611249565b6103226103d9366004611cd8565b61032261044e366004611bb3565b610391610592366004611d02565b61127f565b60006103a6565b6000546103a69073ffffffffffffffffffffffffffffffffffffffff1681565b6000600282600f0b815481106105d6576105d6611d26565b6000918252602090912001546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa15801561064d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106719190611d55565b92915050565b600f83810b60009081526005602090815260408083209386900b8352929052908120546b033b2e3c9fd0803ce8000000906106b3908490611d9d565b6106bd9190611dda565b90505b9392505050565b6106cf6118f8565b604051806060016040528060008152602001600081526020016000815250905090565b6000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810185905273ffffffffffffffffffffffffffffffffffffffff909116906379cc6790906044016020604051808303816000875af1158015610769573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078d9190611e15565b506107e133826002856fffffffffffffffffffffffffffffffff16815481106107b8576107b8611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169190611402565b505050565b6000600282600f0b815481106107fe576107fe611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1692915050565b6000610833858585610b92565b9050818110156108ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f437572766556314d6f636b3a20494e53554646494349454e545f4f555450555460448201527f5f414d4f554e540000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61091f3330856002896fffffffffffffffffffffffffffffffff16815481106108f5576108f5611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169291906114d6565b61094933826002876fffffffffffffffffffffffffffffffff16815481106107b8576107b8611d26565b5050505050565b60005b6003811015610a7f57600083826003811061097057610970611d26565b60200201511115610a6d576002818154811061098e5761098e611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff166323b872dd33308685600381106109c9576109c9611d26565b60200201516040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff938416600482015292909116602483015260448201526064016020604051808303816000875af1158015610a47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6b9190611e15565b505b80610a7781611e32565b915050610953565b506000546040517f40c10f190000000000000000000000000000000000000000000000000000000081523360048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f19906044015b6020604051808303816000875af1158015610af8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e19190611e15565b6000600282815481106105d6576105d6611d26565b600f83810b60009081526005602090815260408083209386900b835292905220819055610b6a6b033b2e3c9fd0803ce80000008261153a565b600f92830b60009081526005602090815260408083209690950b825294909452919092205550565b600f83810b60009081526004602090815260408083209386900b8352929052908120546b033b2e3c9fd0803ce8000000906106b3908490611d9d565b610bd66118f8565b6040805160608181019092529085906003908390839080828437600092019190915250919695505050505050565b6000546040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052909116906340c10f1990604401610ad9565b60005b6003811015610d88576000838260038110610c8357610c83611d26565b60200201351115610d765760028181548110610ca157610ca1611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33858460038110610cdb57610cdb611d26565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff9093166004840152602002013560248201526044016020604051808303816000875af1158015610d50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d749190611e15565b505b80610d8081611e32565b915050610c66565b506000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906379cc679090604401610ad9565b60006002856fffffffffffffffffffffffffffffffff1681548110610e0d57610e0d611d26565b60009182526020822001546003805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff8816908110610e5957610e59611d26565b60009182526020822001546002805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff8816908110610ea557610ea5611d26565b60009182526020822001546003805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff8916908110610ef157610ef1611d26565b600091825260208220015473ffffffffffffffffffffffffffffffffffffffff169150610f1f898989610677565b905085811015610fb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f437572766556314d6f636b3a20494e53554646494349454e545f4f555450555460448201527f5f414d4f554e540000000000000000000000000000000000000000000000000060648201526084016108c1565b610fd373ffffffffffffffffffffffffffffffffffffffff851633308a6114d6565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526024820189905285169063095ea7b3906044016020604051808303816000875af1158015611048573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061106c9190611e15565b506040517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8616906340c10f1990604401600060405180830381600087803b1580156110db57600080fd5b505af11580156110ef573d6000803e3d6000fd5b50506040517f1e9a69500000000000000000000000000000000000000000000000000000000081523060048201526024810184905273ffffffffffffffffffffffffffffffffffffffff86169250631e9a69509150604401600060405180830381600087803b15801561116157600080fd5b505af1158015611175573d6000803e3d6000fd5b5061119b9250505073ffffffffffffffffffffffffffffffffffffffff83163383611402565b505050505050505050565b6000600382600f0b815481106107fe576107fe611d26565b600f83810b60009081526004602090815260408083209386900b8352929052208190556111f76b033b2e3c9fd0803ce80000008261153a565b600f92830b60009081526004602090815260408083209690950b825294909452919092205550565b6000600382815481106107fe576107fe611d26565b6000600282815481106107fe576107fe611d26565b600f81900b6000908152600660205260408120546b033b2e3c9fd0803ce8000000906112759085611d9d565b6106c09190611dda565b60005b60038110156113a457600082826003811061129f5761129f611d26565b6020020151111561139257600281815481106112bd576112bd611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb338484600381106112f7576112f7611d26565b60200201516040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af115801561136c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113909190611e15565b505b8061139c81611e32565b915050611282565b506000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810184905273ffffffffffffffffffffffffffffffffffffffff909116906379cc679090604401610ad9565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526107e19084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526116a0565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526115349085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611454565b50505050565b60408051808201909152600281527f4d330000000000000000000000000000000000000000000000000000000000006020820152600090826115a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c19190611974565b5060006115b7600284611dda565b90506b033b2e3c9fd0803ce80000006115f0827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611e6b565b6115fa9190611dda565b8411156040518060400160405280600281526020017f4d310000000000000000000000000000000000000000000000000000000000008152509061166b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c19190611974565b5082816116846b033b2e3c9fd0803ce800000087611d9d565b61168e9190611e82565b6116989190611dda565b949350505050565b6000611702826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166117ac9092919063ffffffff16565b8051909150156107e157808060200190518101906117209190611e15565b6107e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016108c1565b60606106bd848460008585843b61181f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108c1565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516118489190611e9a565b60006040518083038185875af1925050503d8060008114611885576040519150601f19603f3d011682016040523d82523d6000602084013e61188a565b606091505b509150915061189a8282866118a5565b979650505050505050565b606083156118b45750816106c0565b8251156118c45782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c19190611974565b60405180606001604052806003906020820280368337509192915050565b8035600f81900b811461192857600080fd5b919050565b60006020828403121561193f57600080fd5b6106c082611916565b60005b8381101561196357818101518382015260200161194b565b838111156115345750506000910152565b6020815260008251806020840152611993816040850160208701611948565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000606084860312156119da57600080fd5b6119e384611916565b92506119f160208501611916565b9150604084013590509250925092565b60608101818360005b6003811015611a29578151835260209283019290910190600101611a0a565b50505092915050565b600080600060608486031215611a4757600080fd5b833592506119f160208501611916565b806060810183101561067157600080fd5b8015158114611a7657600080fd5b50565b60008060808385031215611a8c57600080fd5b611a968484611a57565b91506060830135611aa681611a68565b809150509250929050565b60008060008060808587031215611ac757600080fd5b611ad085611916565b9350611ade60208601611916565b93969395505050506040820135916060013590565b600082601f830112611b0457600080fd5b6040516060810181811067ffffffffffffffff82111715611b4e577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604052806060840185811115611b6357600080fd5b845b81811015611b7d578035835260209283019201611b65565b509195945050505050565b60008060808385031215611b9b57600080fd5b611ba58484611af3565b946060939093013593505050565b600060208284031215611bc557600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461192857600080fd5b600060208284031215611c0257600080fd5b6106c082611bcc565b60008060408385031215611c1e57600080fd5b611c2783611916565b946020939093013593505050565b600080600060e08486031215611c4a57600080fd5b611c548585611a57565b9250611c638560608601611a57565b915060c084013590509250925092565b60008060408385031215611c8657600080fd5b611c2783611bcc565b60008060808385031215611ca257600080fd5b611ba58484611a57565b60008060408385031215611cbf57600080fd5b82359150611ccf60208401611916565b90509250929050565b60008060408385031215611ceb57600080fd5b611cf483611bcc565b9150611ccf60208401611bcc565b60008060808385031215611d1557600080fd5b82359150611ccf8460208501611af3565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215611d6757600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611dd557611dd5611d6e565b500290565b600082611e10577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600060208284031215611e2757600080fd5b81516106c081611a68565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611e6457611e64611d6e565b5060010190565b600082821015611e7d57611e7d611d6e565b500390565b60008219821115611e9557611e95611d6e565b500190565b60008251611eac818460208701611948565b919091019291505056fea2646970667358221220a76213374b33de2cb1c5d61e9c1133f6d8163c7b90c32a6142a6f4fd98fe430364736f6c634300080a003360a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a00336101606040523480156200001257600080fd5b5060405162001852380380620018528339810160408190526200003591620003a3565b6000805460ff191690558585828260c882826001600160a01b0381166200006f57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000ae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d49190620004de565b6001600160a01b0316608052508051620000f6906002906020840190620002ca565b505060a052506001600160a01b0382166200012457604051635919af9760e11b815260040160405180910390fd5b6001600160a01b03821660c0819052670de0b6b3a764000060e05260408051630176f71760e71b815290516000929163bb7b8b809160048083019260209291908290030181865afa1580156200017e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001a4919062000503565b9050620001b1816200022a565b505050506001600160a01b0384161580620001d357506001600160a01b038316155b80620001e657506001600160a01b038216155b156200020557604051635919af9760e11b815260040160405180910390fd5b506001600160a01b039283166101005290821661012052166101405250620005d09050565b8062000249576040516309aadd6f60e41b815260040160405180910390fd5b60018190557f82e7ee47180a631312683eeb2a85ad264c9af490d54de5a75bbdb95b968c6de2816200027b8162000296565b6040805192835260208301919091520160405180910390a150565b60a05160009061271090620002ac908262000533565b620002b890846200054e565b620002c4919062000570565b92915050565b828054620002d89062000593565b90600052602060002090601f016020900481019282620002fc576000855562000347565b82601f106200031757805160ff191683800117855562000347565b8280016001018555821562000347579182015b82811115620003475782518255916020019190600101906200032a565b506200035592915062000359565b5090565b5b808211156200035557600081556001016200035a565b80516001600160a01b03811681146200038857600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60008060008060008060c08789031215620003bd57600080fd5b620003c88762000370565b95506020620003d981890162000370565b9550620003e96040890162000370565b9450620003f96060890162000370565b9350620004096080890162000370565b60a08901519093506001600160401b03808211156200042757600080fd5b818a0191508a601f8301126200043c57600080fd5b8151818111156200045157620004516200038d565b604051601f8201601f19908116603f011681019083821181831017156200047c576200047c6200038d565b816040528281528d868487010111156200049557600080fd5b600093505b82841015620004b957848401860151818501870152928501926200049a565b82841115620004cb5760008684830101525b8096505050505050509295509295509295565b600060208284031215620004f157600080fd5b620004fc8262000370565b9392505050565b6000602082840312156200051657600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156200054957620005496200051d565b500190565b60008160001904831182151516156200056b576200056b6200051d565b500290565b6000826200058e57634e487b7160e01b600052601260045260246000fd5b500490565b600181811c90821680620005a857607f821691505b60208210811415620005ca57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c05160e0516101005161012051610140516111e86200066a6000396000818161023501526108c8015260008181610383015261080901526000818161033901526107620152600081816103120152610a250152600081816101b001526109890152600081816101760152610c170152600081816102eb015281816103db01528181610557015261068f01526111e86000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c80639a6fc8f5116100cd578063b09ad8a011610081578063d62ada1111610066578063d62ada1114610376578063e5693f411461037e578063feaf968c146103a557600080fd5b8063b09ad8a01461035b578063bc489a651461036357600080fd5b8063a50cf2c8116100b2578063a50cf2c8146102e6578063a834559e1461030d578063ab0ca0e11461033457600080fd5b80639a6fc8f514610293578063a384d6ff146102dd57600080fd5b8063427cb6fe116101245780635c975abb116101095780635c975abb1461025f5780637284e416146102765780638456cb591461028b57600080fd5b8063427cb6fe1461023057806354fd4d501461025757600080fd5b8063313ce56711610155578063313ce567146101f75780633f4ba83a146102115780633fd0875f1461021b57600080fd5b806312b495a814610171578063218751b2146101ab575b600080fd5b6101987f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101a2565b6101ff600881565b60405160ff90911681526020016101a2565b6102196103ad565b005b610223600381565b6040516101a29190610dd7565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b610198600181565b60005460ff165b60405190151581526020016101a2565b61027e61049b565b6040516101a29190610e18565b610219610529565b6102a66102a1366004610ea3565b610615565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a0016101a2565b61019860015481565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b6101987f000000000000000000000000000000000000000000000000000000000000000081565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b61019861064f565b610219610371366004610ec7565b610661565b610266600181565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b6102a6610751565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa158015610437573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061045b9190610ee0565b610491576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610499610a67565b565b600280546104a890610f02565b80601f01602080910402602001604051908101604052809291908181526020018280546104d490610f02565b80156105215780601f106104f657610100808354040283529160200191610521565b820191906000526020600020905b81548152906001019060200180831161050457829003601f168201915b505050505081565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa1580156105b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105d79190610ee0565b61060d576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610499610b4d565b60008060008060006040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061065c600154610c0d565b905090565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156106eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070f9190610ee0565b610745576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61074e81610c56565b50565b6000806000806000806000806000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156107cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ef9190610f56565b939d50919b509950975095506108078a8a8989610cd8565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610872573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108969190610f56565b9398509196509450925090506108ae85858484610cd8565b888412156108c6578499508398508297508196508095505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610931573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109559190610f56565b93985091965094509250905061096d85858484610cd8565b88841215610985578499508398508297508196508095505b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb7b8b806040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a169190610fae565b9050610a2181610d73565b90507f0000000000000000000000000000000000000000000000000000000000000000610a4e828c610ff6565b610a5891906110e1565b99505050505050509091929394565b60005460ff16610ad8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff1615610bba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610acf565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b233390565b6000612710610c3c7f000000000000000000000000000000000000000000000000000000000000000082611149565b610c469084611161565b610c50919061119e565b92915050565b80610c8d576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190557f82e7ee47180a631312683eeb2a85ad264c9af490d54de5a75bbdb95b968c6de281610cbd81610c0d565b6040805192835260208301919091520160405180910390a150565b60008313610d12576040517f56e05d2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8369ffffffffffffffffffff168169ffffffffffffffffffff161080610d36575081155b15610d6d576040517fb1cf675500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60015460009080831015610db3576040517fb416da7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610dbe82610c0d565b905080841115610dcf579392505050565b509192915050565b6020810160068310610e12577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b600060208083528351808285015260005b81811015610e4557858101830151858201604001528201610e29565b81811115610e57576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b69ffffffffffffffffffff8116811461074e57600080fd5b600060208284031215610eb557600080fd5b8135610ec081610e8b565b9392505050565b600060208284031215610ed957600080fd5b5035919050565b600060208284031215610ef257600080fd5b81518015158114610ec057600080fd5b600181811c90821680610f1657607f821691505b60208210811415610f50577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600080600080600060a08688031215610f6e57600080fd5b8551610f7981610e8b565b809550506020860151935060408601519250606086015191506080860151610fa081610e8b565b809150509295509295909350565b600060208284031215610fc057600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60008413600084138583048511828216161561103757611037610fc7565b7f8000000000000000000000000000000000000000000000000000000000000000600087128682058812818416161561107257611072610fc7565b6000871292508782058712848416161561108e5761108e610fc7565b878505871281841616156110a4576110a4610fc7565b505050929093029392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826110f0576110f06110b2565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f80000000000000000000000000000000000000000000000000000000000000008314161561114457611144610fc7565b500590565b6000821982111561115c5761115c610fc7565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561119957611199610fc7565b500290565b6000826111ad576111ad6110b2565b50049056fea2646970667358221220226b667ed6fc6db7c8ec1377cc84dae524e2dc572320ead4a7092944a6b912de64736f6c634300080a003360806040523480156200001157600080fd5b5060405162003969380380620039698339810160408190526200003491620002a2565b8151829082906200004d90600290602085019062000133565b5080516200006390600390602084019062000133565b506000601260405162000076906200019d565b6060808252600790820152664352564d6f636b60c81b608082015260a0602082018190526015908201527f43525620666f72204375727665506f6f6c4d6f636b000000000000000000000060c082015260ff909116604082015260e001604051809103906000f080158015620000f0573d6000803e3d6000fd5b50600080546001600160a01b039092166001600160a01b03199283168117909155600180549092161790555050670de0b6b3a7640000600755506200030c915050565b8280548282559060005260206000209081019282156200018b579160200282015b828111156200018b57825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019062000154565b5062000199929150620001ab565b5090565b611758806200221183390190565b5b80821115620001995760008155600101620001ac565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b0381168114620001f057600080fd5b919050565b600082601f8301126200020757600080fd5b815160206001600160401b0380831115620002265762000226620001c2565b8260051b604051601f19603f830116810181811084821117156200024e576200024e620001c2565b6040529384528581018301938381019250878511156200026d57600080fd5b83870191505b8482101562000297576200028782620001d8565b8352918301919083019062000273565b979650505050505050565b60008060408385031215620002b657600080fd5b82516001600160401b0380821115620002ce57600080fd5b620002dc86838701620001f5565b93506020850151915080821115620002f357600080fd5b506200030285828601620001f5565b9150509250929050565b611ef5806200031c6000396000f3fe608060405234801561001057600080fd5b506004361061030a5760003560e01c80637b475b681161019c578063bb7b8b80116100ee578063ddca3f4311610097578063f851a44011610071578063f851a44014610597578063fc0c546a1461059e578063fee3f7f91461037757600080fd5b8063ddca3f4314610377578063e2e7d26414610589578063f446c1d01461037757600080fd5b8063cf701ff7116100c8578063cf701ff714610565578063d96c7fce1461037e578063dd62ed3e1461057b57600080fd5b8063bb7b8b8014610537578063c66106571461053f578063cc2b27d71461055257600080fd5b806399bd2ba511610150578063b739953e1161012a578063b739953e146104fe578063b91434d114610511578063b9947eb01461052457600080fd5b806399bd2ba5146104d8578063a6417ed6146104eb578063b4b577ad1461037757600080fd5b806382c630661161018157806382c63066146104af5780638ea875f3146104cf57806395d89b411461034a57600080fd5b80637b475b68146104775780637d49d8751461049c57600080fd5b8063313ce5671161026057806356ac35031161020957806370a08231116101e357806370a0823114610450578063710354181461046457806376a2f0f01461037757600080fd5b806356ac35031461042a5780635e0d443f1461043d57806363543f061461037757600080fd5b80634903b0d11161023a5780634903b0d11461040457806353b546cd146104175780635409491a1461037757600080fd5b8063313ce567146103775780633df02124146103f15780634469e30e1461037e57600080fd5b806314f05979116102c25780631a4d01d21161029c5780631a4d01d2146103a65780632081066c1461037757806323746eb8146103b957600080fd5b806314f059791461037e57806318160ddd1461037757806318a7bd761461039357600080fd5b806306fdde03116102f357806306fdde031461034a57806307211ef714610364578063140522881461037757600080fd5b8063029b2f341461030f578063065a80d814610324575b600080fd5b61032261031d3660046119b2565b6105be565b005b6103376103323660046119f4565b61078f565b6040519081526020015b60405180910390f35b604080516020810182526000815290516103419190611a3b565b610337610372366004611a8c565b610848565b6000610337565b610386610898565b6040516103419190611ac8565b6103226103a1366004611b0a565b6108ca565b6103226103b4366004611b27565b610a4d565b6103cc6103c73660046119f4565b610b3c565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610341565b6103226103ff366004611b4c565b610b7c565b610337610412366004611b8e565b610ca6565b610386610425366004611ba7565b610cbb565b610322610438366004611a8c565b610cf1565b61033761044b366004611a8c565b610d52565b61033761045e366004611c0b565b50600090565b610322610472366004611b8e565b600755565b610322610485366004611c26565b600f9190910b600090815260066020526040902055565b6103226104aa366004611c50565b610d8e565b6001546103cc9073ffffffffffffffffffffffffffffffffffffffff1681565b61033760075481565b6103226104e6366004611c7d565b610f11565b6103226104f9366004611b4c565b610f70565b6103cc61050c3660046119f4565b611330565b61032261051f366004611a8c565b611348565b6103cc610532366004611b8e565b6113a9565b600754610337565b6103cc61054d366004611b8e565b6113be565b610337610560366004611c99565b6113d3565b610337610573366004611ccd565b600092915050565b610337610573366004611d05565b61033761045e366004611b8e565b60006103cc565b6000546103cc9073ffffffffffffffffffffffffffffffffffffffff1681565b60005b60048110156106ed5760008382600481106105de576105de611d2f565b602002015111156106db57600281815481106105fc576105fc611d2f565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff166323b872dd333086856004811061063757610637611d2f565b60200201516040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff938416600482015292909116602483015260448201526064016020604051808303816000875af11580156106b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d99190611d5e565b505b806106e581611daa565b9150506105c1565b506000546040517f40c10f190000000000000000000000000000000000000000000000000000000081523360048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f19906044015b6020604051808303816000875af1158015610766573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078a9190611d5e565b505050565b6000600282600f0b815481106107a7576107a7611d2f565b6000918252602090912001546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa15801561081e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108429190611de3565b92915050565b600f83810b60009081526005602090815260408083209386900b8352929052908120546b033b2e3c9fd0803ce800000090610884908490611dfc565b61088e9190611e39565b90505b9392505050565b6108a06118ff565b60405180608001604052806000815260200160008152602001600081526020016000815250905090565b60005b60048110156109ef5760008382600481106108ea576108ea611d2f565b602002013511156109dd576002818154811061090857610908611d2f565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb3385846004811061094257610942611d2f565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff9093166004840152602002013560248201526044016020604051808303816000875af11580156109b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109db9190611d5e565b505b806109e781611daa565b9150506108cd565b506000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906379cc679090604401610747565b6000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810185905273ffffffffffffffffffffffffffffffffffffffff909116906379cc6790906044016020604051808303816000875af1158015610ac4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae89190611d5e565b5061078a33826002856fffffffffffffffffffffffffffffffff1681548110610b1357610b13611d2f565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169190611409565b6000600282600f0b81548110610b5457610b54611d2f565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1692915050565b6000610b89858585610d52565b905081811015610c20576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f437572766556314d6f636b3a20494e53554646494349454e545f4f555450555460448201527f5f414d4f554e540000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b610c753330856002896fffffffffffffffffffffffffffffffff1681548110610c4b57610c4b611d2f565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169291906114dd565b610c9f33826002876fffffffffffffffffffffffffffffffff1681548110610b1357610b13611d2f565b5050505050565b6000600282815481106107a7576107a7611d2f565b610cc36118ff565b6040805160808181019092529085906004908390839080828437600092019190915250919695505050505050565b600f83810b60009081526005602090815260408083209386900b835292905220819055610d2a6b033b2e3c9fd0803ce800000082611541565b600f92830b60009081526005602090815260408083209690950b825294909452919092205550565b600f83810b60009081526004602090815260408083209386900b8352929052908120546b033b2e3c9fd0803ce800000090610884908490611dfc565b60005b6004811015610eb3576000828260048110610dae57610dae611d2f565b60200201511115610ea15760028181548110610dcc57610dcc611d2f565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33848460048110610e0657610e06611d2f565b60200201516040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af1158015610e7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9f9190611d5e565b505b80610eab81611daa565b915050610d91565b506000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810184905273ffffffffffffffffffffffffffffffffffffffff909116906379cc679090604401610747565b6000546040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052909116906340c10f1990604401610747565b60006002856fffffffffffffffffffffffffffffffff1681548110610f9757610f97611d2f565b60009182526020822001546003805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff8816908110610fe357610fe3611d2f565b60009182526020822001546002805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff881690811061102f5761102f611d2f565b60009182526020822001546003805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff891690811061107b5761107b611d2f565b600091825260208220015473ffffffffffffffffffffffffffffffffffffffff1691506110a9898989610848565b90508581101561113b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f437572766556314d6f636b3a20494e53554646494349454e545f4f555450555460448201527f5f414d4f554e54000000000000000000000000000000000000000000000000006064820152608401610c17565b61115d73ffffffffffffffffffffffffffffffffffffffff851633308a6114dd565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526024820189905285169063095ea7b3906044016020604051808303816000875af11580156111d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f69190611d5e565b506040517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8616906340c10f1990604401600060405180830381600087803b15801561126557600080fd5b505af1158015611279573d6000803e3d6000fd5b50506040517f1e9a69500000000000000000000000000000000000000000000000000000000081523060048201526024810184905273ffffffffffffffffffffffffffffffffffffffff86169250631e9a69509150604401600060405180830381600087803b1580156112eb57600080fd5b505af11580156112ff573d6000803e3d6000fd5b506113259250505073ffffffffffffffffffffffffffffffffffffffff83163383611409565b505050505050505050565b6000600382600f0b81548110610b5457610b54611d2f565b600f83810b60009081526004602090815260408083209386900b8352929052208190556113816b033b2e3c9fd0803ce800000082611541565b600f92830b60009081526004602090815260408083209690950b825294909452919092205550565b600060038281548110610b5457610b54611d2f565b600060028281548110610b5457610b54611d2f565b600f81900b6000908152600660205260408120546b033b2e3c9fd0803ce8000000906113ff9085611dfc565b6108919190611e39565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905261078a9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526116a7565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905261153b9085907f23b872dd000000000000000000000000000000000000000000000000000000009060840161145b565b50505050565b60408051808201909152600281527f4d330000000000000000000000000000000000000000000000000000000000006020820152600090826115b0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c179190611a3b565b5060006115be600284611e39565b90506b033b2e3c9fd0803ce80000006115f7827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611e74565b6116019190611e39565b8411156040518060400160405280600281526020017f4d3100000000000000000000000000000000000000000000000000000000000081525090611672576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c179190611a3b565b50828161168b6b033b2e3c9fd0803ce800000087611dfc565b6116959190611e8b565b61169f9190611e39565b949350505050565b6000611709826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166117b39092919063ffffffff16565b80519091501561078a57808060200190518101906117279190611d5e565b61078a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610c17565b606061088e848460008585843b611826576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610c17565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161184f9190611ea3565b60006040518083038185875af1925050503d806000811461188c576040519150601f19603f3d011682016040523d82523d6000602084013e611891565b606091505b50915091506118a18282866118ac565b979650505050505050565b606083156118bb575081610891565b8251156118cb5782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c179190611a3b565b60405180608001604052806004906020820280368337509192915050565b600082601f83011261192e57600080fd5b6040516080810181811067ffffffffffffffff82111715611978577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405280608084018581111561198d57600080fd5b845b818110156119a757803583526020928301920161198f565b509195945050505050565b60008060a083850312156119c557600080fd5b6119cf848461191d565b946080939093013593505050565b8035600f81900b81146119ef57600080fd5b919050565b600060208284031215611a0657600080fd5b610891826119dd565b60005b83811015611a2a578181015183820152602001611a12565b8381111561153b5750506000910152565b6020815260008251806020840152611a5a816040850160208701611a0f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b600080600060608486031215611aa157600080fd5b611aaa846119dd565b9250611ab8602085016119dd565b9150604084013590509250925092565b60808101818360005b6004811015611af0578151835260209283019290910190600101611ad1565b50505092915050565b806080810183101561084257600080fd5b60008060a08385031215611b1d57600080fd5b6119cf8484611af9565b600080600060608486031215611b3c57600080fd5b83359250611ab8602085016119dd565b60008060008060808587031215611b6257600080fd5b611b6b856119dd565b9350611b79602086016119dd565b93969395505050506040820135916060013590565b600060208284031215611ba057600080fd5b5035919050565b60008060006101208486031215611bbd57600080fd5b611bc78585611af9565b9250611bd68560808601611af9565b915061010084013590509250925092565b803573ffffffffffffffffffffffffffffffffffffffff811681146119ef57600080fd5b600060208284031215611c1d57600080fd5b61089182611be7565b60008060408385031215611c3957600080fd5b611c42836119dd565b946020939093013593505050565b60008060a08385031215611c6357600080fd5b82359150611c74846020850161191d565b90509250929050565b60008060408385031215611c9057600080fd5b611c4283611be7565b60008060408385031215611cac57600080fd5b82359150611c74602084016119dd565b8015158114611cca57600080fd5b50565b60008060a08385031215611ce057600080fd5b611cea8484611af9565b91506080830135611cfa81611cbc565b809150509250929050565b60008060408385031215611d1857600080fd5b611d2183611be7565b9150611c7460208401611be7565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215611d7057600080fd5b815161089181611cbc565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611ddc57611ddc611d7b565b5060010190565b600060208284031215611df557600080fd5b5051919050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611e3457611e34611d7b565b500290565b600082611e6f577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600082821015611e8657611e86611d7b565b500390565b60008219821115611e9e57611e9e611d7b565b500190565b60008251611eb5818460208701611a0f565b919091019291505056fea2646970667358221220f61dc1547f427f062d37b4d652f14b779f56255086161f347804b4d07b32be2064736f6c634300080a003360a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a00336101806040523480156200001257600080fd5b5060405162001982380380620019828339810160408190526200003591620003bc565b6000805460ff191690558686828260c882826001600160a01b0381166200006f57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000ae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d491906200050b565b6001600160a01b0316608052508051620000f6906002906020840190620002e3565b505060a052506001600160a01b0382166200012457604051635919af9760e11b815260040160405180910390fd5b6001600160a01b03821660c0819052670de0b6b3a764000060e05260408051630176f71760e71b815290516000929163bb7b8b809160048083019260209291908290030181865afa1580156200017e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001a4919062000530565b9050620001b18162000243565b505050506001600160a01b0385161580620001d357506001600160a01b038416155b80620001e657506001600160a01b038316155b80620001f957506001600160a01b038216155b156200021857604051635919af9760e11b815260040160405180910390fd5b506001600160a01b039384166101005291831661012052821661014052166101605250620005fd9050565b8062000262576040516309aadd6f60e41b815260040160405180910390fd5b60018190557f82e7ee47180a631312683eeb2a85ad264c9af490d54de5a75bbdb95b968c6de2816200029481620002af565b6040805192835260208301919091520160405180910390a150565b60a05160009061271090620002c5908262000560565b620002d190846200057b565b620002dd91906200059d565b92915050565b828054620002f190620005c0565b90600052602060002090601f01602090048101928262000315576000855562000360565b82601f106200033057805160ff191683800117855562000360565b8280016001018555821562000360579182015b828111156200036057825182559160200191906001019062000343565b506200036e92915062000372565b5090565b5b808211156200036e576000815560010162000373565b80516001600160a01b0381168114620003a157600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600080600080600080600060e0888a031215620003d857600080fd5b620003e38862000389565b96506020620003f4818a0162000389565b96506200040460408a0162000389565b95506200041460608a0162000389565b94506200042460808a0162000389565b93506200043460a08a0162000389565b60c08a01519093506001600160401b03808211156200045257600080fd5b818b0191508b601f8301126200046757600080fd5b8151818111156200047c576200047c620003a6565b604051601f8201601f19908116603f01168101908382118183101715620004a757620004a7620003a6565b816040528281528e86848701011115620004c057600080fd5b600093505b82841015620004e45784840186015181850187015292850192620004c5565b82841115620004f65760008684830101525b80965050505050505092959891949750929550565b6000602082840312156200051e57600080fd5b620005298262000389565b9392505050565b6000602082840312156200054357600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156200057657620005766200054a565b500190565b60008160001904831182151516156200059857620005986200054a565b500290565b600082620005bb57634e487b7160e01b600052601260045260246000fd5b500490565b600181811c90821680620005d557607f821691505b60208210811415620005f757634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c05160e051610100516101205161014051610160516112d9620006a96000396000818161029b01526109b901526000818161024001526108fa0152600081816103b5015261083b01526000818161036b01526107940152600081816103440152610b160152600081816101bb0152610a7a0152600081816101810152610d0801526000818161031d0152818161040d0152818161058901526106c101526112d96000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80638456cb59116100d8578063ab0ca0e11161008c578063d62ada1111610066578063d62ada11146103a8578063e5693f41146103b0578063feaf968c146103d757600080fd5b8063ab0ca0e114610366578063b09ad8a01461038d578063bc489a651461039557600080fd5b8063a384d6ff116100bd578063a384d6ff1461030f578063a50cf2c814610318578063a834559e1461033f57600080fd5b80638456cb59146102bd5780639a6fc8f5146102c557600080fd5b8063427cb6fe1161012f5780635c975abb116101145780635c975abb1461026a5780637284e416146102815780637aac1c481461029657600080fd5b8063427cb6fe1461023b57806354fd4d501461026257600080fd5b8063313ce56711610160578063313ce567146102025780633f4ba83a1461021c5780633fd0875f1461022657600080fd5b806312b495a81461017c578063218751b2146101b6575b600080fd5b6101a37f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b6101dd7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101ad565b61020a600881565b60405160ff90911681526020016101ad565b6102246103df565b005b61022e600481565b6040516101ad9190610ec8565b6101dd7f000000000000000000000000000000000000000000000000000000000000000081565b6101a3600181565b60005460ff165b60405190151581526020016101ad565b6102896104cd565b6040516101ad9190610f09565b6101dd7f000000000000000000000000000000000000000000000000000000000000000081565b61022461055b565b6102d86102d3366004610f94565b610647565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a0016101ad565b6101a360015481565b6101dd7f000000000000000000000000000000000000000000000000000000000000000081565b6101a37f000000000000000000000000000000000000000000000000000000000000000081565b6101dd7f000000000000000000000000000000000000000000000000000000000000000081565b6101a3610681565b6102246103a3366004610fb8565b610693565b610271600181565b6101dd7f000000000000000000000000000000000000000000000000000000000000000081565b6102d8610783565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa158015610469573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048d9190610fd1565b6104c3576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104cb610b58565b565b600280546104da90610ff3565b80601f016020809104026020016040519081016040528092919081815260200182805461050690610ff3565b80156105535780601f1061052857610100808354040283529160200191610553565b820191906000526020600020905b81548152906001019060200180831161053657829003601f168201915b505050505081565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa1580156105e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106099190610fd1565b61063f576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104cb610c3e565b60008060008060006040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061068e600154610cfe565b905090565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561071d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107419190610fd1565b610777576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61078081610d47565b50565b6000806000806000806000806000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156107fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108219190611047565b939d50919b509950975095506108398a8a8989610dc9565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156108a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c89190611047565b9398509196509450925090506108e085858484610dc9565b888412156108f8578499508398508297508196508095505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610963573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109879190611047565b93985091965094509250905061099f85858484610dc9565b888412156109b7578499508398508297508196508095505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610a22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a469190611047565b939850919650945092509050610a5e85858484610dc9565b88841215610a76578499508398508297508196508095505b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb7b8b806040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ae3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b07919061109f565b9050610b1281610e64565b90507f0000000000000000000000000000000000000000000000000000000000000000610b3f828c6110e7565b610b4991906111d2565b99505050505050509091929394565b60005460ff16610bc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff1615610cab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bc0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610c143390565b6000612710610d2d7f00000000000000000000000000000000000000000000000000000000000000008261123a565b610d379084611252565b610d41919061128f565b92915050565b80610d7e576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190557f82e7ee47180a631312683eeb2a85ad264c9af490d54de5a75bbdb95b968c6de281610dae81610cfe565b6040805192835260208301919091520160405180910390a150565b60008313610e03576040517f56e05d2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8369ffffffffffffffffffff168169ffffffffffffffffffff161080610e27575081155b15610e5e576040517fb1cf675500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60015460009080831015610ea4576040517fb416da7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610eaf82610cfe565b905080841115610ec0579392505050565b509192915050565b6020810160068310610f03577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b600060208083528351808285015260005b81811015610f3657858101830151858201604001528201610f1a565b81811115610f48576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b69ffffffffffffffffffff8116811461078057600080fd5b600060208284031215610fa657600080fd5b8135610fb181610f7c565b9392505050565b600060208284031215610fca57600080fd5b5035919050565b600060208284031215610fe357600080fd5b81518015158114610fb157600080fd5b600181811c9082168061100757607f821691505b60208210811415611041577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600080600080600060a0868803121561105f57600080fd5b855161106a81610f7c565b80955050602086015193506040860151925060608601519150608086015161109181610f7c565b809150509295509295909350565b6000602082840312156110b157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615611128576111286110b8565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615611163576111636110b8565b6000871292508782058712848416161561117f5761117f6110b8565b87850587128184161615611195576111956110b8565b505050929093029392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826111e1576111e16111a3565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615611235576112356110b8565b500590565b6000821982111561124d5761124d6110b8565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561128a5761128a6110b8565b500290565b60008261129e5761129e6111a3565b50049056fea26469706673582212201ac3e66d7646fe6cc19eeb98703f28a4e57d890bef3635f1ed53ec7a4ea130d864736f6c634300080a00336102606040523480156200001257600080fd5b5060405162005f8c38038062005f8c833981016040819052620000359162000ba4565b83838383600384846001600160a01b03821615806200005b57506001600160a01b038116155b156200007a57604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038216608081905260408051632f7a188160e01b81529051632f7a1881916004808201926020929091908290030181865afa158015620000c5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000eb919062000c01565b6001600160a01b0390811660a05290811660c05260016000558416151590506200012857604051635919af9760e11b815260040160405180910390fd5b608051604051630f67c5bd60e41b81526001600160a01b0385811660048301529091169063f67c5bd090602401602060405180830381865afa15801562000173573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000199919062000c26565b620001c757604051634c607af960e11b81526001600160a01b03841660048201526024015b60405180910390fd5b6001600160a01b038084166101e081905261020052821661022052610240819052620001f460006200090a565b6001600160a01b031660e0526200020c60016200090a565b6001600160a01b0316610100526200022560026200090a565b6001600160a01b0316610120526200023e60036200090a565b6001600160a01b031661014052620002576000620009fd565b6001600160a01b031661016052620002706001620009fd565b6001600160a01b031661018052620002896002620009fd565b6001600160a01b03166101a052620002a26003620009fd565b6001600160a01b039081166101c05260e051161580620002cc5750610100516001600160a01b0316155b15620002eb57604051635919af9760e11b815260040160405180910390fd5b600281118015620003065750610120516001600160a01b0316155b156200032557604051635919af9760e11b815260040160405180910390fd5b600381118015620003405750610140516001600160a01b0316155b156200035f57604051635919af9760e11b815260040160405180910390fd5b60805160e051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620003ac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003d2919062000c26565b620004005760e051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b60805161010051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa1580156200044e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000474919062000c26565b620004a35761010051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b60028111801562000525575060805161012051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620004fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000523919062000c26565b155b15620005555761012051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b600381118015620005d7575060805161014051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620005af573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005d5919062000c26565b155b15620006075761014051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b610160516001600160a01b03161580159062000694575060805161016051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa1580156200066c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000692919062000c26565b155b15620006c45761016051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b610180516001600160a01b03161580159062000751575060805161018051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa15801562000729573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200074f919062000c26565b155b15620007815761018051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b6101a0516001600160a01b0316158015906200080e57506080516101a051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620007e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200080c919062000c26565b155b156200083e576101a051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b6101c0516001600160a01b031615801590620008cb57506080516101c051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620008a3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008c9919062000c26565b155b15620008fb576101c051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b50505050505050505062000c66565b60c05160405163c661065760e01b8152600481018390526000916001600160a01b03169063c661065790602401602060405180830381865afa92505050801562000973575060408051601f3d908101601f19168201909252620009709181019062000c01565b60015b6200097e5762000984565b92915050565b60c05160405163046e8dd760e31b8152600f84900b60048201526001600160a01b03909116906323746eb8906024015b602060405180830381865afa925050508015620009f0575060408051601f3d908101601f19168201909252620009ed9181019062000c01565b60015b6200097e57506000919050565b610220516000906001600160a01b03161562000a1e576200097e8262000ac0565b60c051604051630b9947eb60e41b8152600481018490526001600160a01b039091169063b9947eb090602401602060405180830381865afa92505050801562000a86575060408051601f3d908101601f1916820190925262000a839181019062000c01565b60015b6200097e5760c051604051635b9cca9f60e11b8152600f84900b60048201526001600160a01b039091169063b739953e90602401620009b4565b60008162000ad4576200097e600062000b17565b610220516001600160a01b031663c661065762000af360018562000c40565b6040518263ffffffff1660e01b8152600401620009b491815260200190565b919050565b600081600f0b6000141562000b2b575060e0515b81600f0b6001141562000b3e5750610100515b81600f0b6002141562000b515750610120515b81600f0b6003141562000b645750610140515b6001600160a01b03811662000b12576040516334769e6f60e21b815260040160405180910390fd5b80516001600160a01b038116811462000b1257600080fd5b6000806000806080858703121562000bbb57600080fd5b62000bc68562000b8c565b935062000bd66020860162000b8c565b925062000be66040860162000b8c565b915062000bf66060860162000b8c565b905092959194509250565b60006020828403121562000c1457600080fd5b62000c1f8262000b8c565b9392505050565b60006020828403121562000c3957600080fd5b5051919050565b60008282101562000c6157634e487b7160e01b600052601160045260246000fd5b500390565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e051610200516102205161024051614fa962000fe36000396000818161078301528181613708015281816138bf015281816139d901528181613e0f0152613f01015260006105de01526000818161067501528181611f680152818161239f0152818161278901528181612e6b01528181612f0901526131ed015260006108ad01526000818161059c015261288b0152600081816103d4015261285c015260008181610605015261282d0152600081816106af01526127fe015260008181610876015281816126630152818161363501528181613f6b01526146640152600081816104d7015281816126340152818161356501528181613e7901526145480152600081816107f3015281816126050152818161349501528181613d85015261442c015260008181610448015281816125d6015281816133c501528181613cb901526143100152600081816107350152818161091a015281816109e701528181610a7701528181610b6f01528181610bfe01528181610c9501528181610d2601528181611139015281816111b1015281816112ee0152818161144101528181611578015281816115c00152818161166d015281816116b5015281816117660152818161179b01528181611ac501528181611b4301528181611ccd01528181611d4501528181611dea01528181611fb20152818161206b015281816120a00152818161213b0152818161245e015281816124cb0152818161255c01528181612aa901528181612bc801528181612ca2015281816142e801528181614404015281816145200152818161463c01526147840152600081816104fe0152818161291401528181614055015261482b01526000818161075c01528181610ec9015281816118a601528181611ef4015281816122450152818161270101528181612aff01528181612b9901528181612cf801528181612da0015281816130630152818161311a01528181613215015281816132f8015281816133ed015281816134bd0152818161358d0152818161365d01528181613bf401528181613ce401528181613dad01528181613ea101528181613f93015281816140dd015281816141910152818161423b0152818161435e0152818161447a01528181614596015281816146b20152818161475501526148950152614fa96000f3fe608060405234801561001057600080fd5b50600436106103a45760003560e01c806379bea664116101e9578063cc2b27d71161010f578063e2e7d264116100ad578063f446c1d01161007c578063f446c1d014610898578063f851a440146108a0578063fc0c546a146108a8578063fee3f7f9146108cf57600080fd5b8063e2e7d26414610838578063ec026ca71461084b578063ecb586a51461085e578063ef14101e1461087157600080fd5b8063d21220a7116100e9578063d21220a7146107ee578063d96c7fce14610815578063dd62ed3e1461081d578063ddca3f431461083057600080fd5b8063cc2b27d7146107b3578063ce30bbdb146107c6578063cf023dd0146107db57600080fd5b8063b4b577ad11610187578063bd90df7011610156578063bd90df7014610730578063c12c21c014610757578063c21ee1621461077e578063c6610657146107a557600080fd5b8063b4b577ad146106ff578063b739953e14610707578063b9947eb01461071a578063bb7b8b801461072857600080fd5b80638ba51dfc116101c35780638ba51dfc146106aa57806395d89b41146106d15780639fdaea0c146106d9578063a6417ed6146106ec57600080fd5b806379bea6641461065d57806382c630661461067057806385ca3c6f1461069757600080fd5b806333d2ebf2116102ce57806357d788751161026c5780636e1d82711161023b5780636e1d82711461060057806370a082311461062757806376a2f0f01461063a57806378aa73a41461064257600080fd5b806357d78875146105975780635e0d443f146105be57806363543f06146105d157806364a89bca146105d957600080fd5b80634469e30e116102a85780634469e30e146105615780634515cef3146105695780634903b0d11461057c5780635409491a1461058f57600080fd5b806333d2ebf2146105285780633883e1191461053b5780633df021241461054e57600080fd5b806318160ddd1161034657806323746eb81161031557806323746eb8146104bf57806325be124e146104d25780632f7a1881146104f9578063313ce5671461052057600080fd5b806318160ddd146104875780631a4d01d21461048f5780631af4de83146104a45780632081066c146104b757600080fd5b806307211ef71161038257806307211ef7146104305780630dfe168114610443578063140522881461046a57806314f059791461047257600080fd5b8063065a80d8146103a957806306871163146103cf57806306fdde031461041b575b600080fd5b6103bc6103b736600461491d565b6108d7565b6040519081526020015b60405180910390f35b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016103c6565b610423610a73565b6040516103c691906149ae565b6103bc61043e3660046149c1565b610b2b565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc610bfa565b61047a610c8b565b6040516103c691906149fd565b6103bc610d22565b6104a261049d366004614a2e565b610d8f565b005b6104a26104b23660046149c1565b610e27565b6103bc611135565b6103f66104cd36600461491d565b6111a2565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc6111ad565b6104a2610536366004614a53565b61121a565b6103bc610549366004614a8e565b6112ae565b6104a261055c366004614acb565b611366565b61047a611437565b6104a2610577366004614b0d565b6114aa565b6103bc61058a366004614b38565b611546565b6103bc6115bc565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc6105cc3660046149c1565b611629565b6103bc6116b1565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc610635366004614b73565b61171e565b6103bc611797565b61064a600281565b60405161ffff90911681526020016103c6565b6104a261066b3660046149c1565b611804565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b61047a6106a5366004614b90565b611a80565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b610423611b3f565b6104a26106e7366004614b0d565b611bac565b6104a26106fa366004614acb565b611c3f565b6103bc611cc9565b6103f661071536600461491d565b611d36565b6103f6610715366004614b38565b6103bc611d41565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc7f000000000000000000000000000000000000000000000000000000000000000081565b6103f66104cd366004614b38565b6103bc6107c1366004614bce565b611dae565b6107ce600681565b6040516103c69190614bfa565b6104a26107e9366004614a2e565b611e2e565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b61047a611fa8565b6103bc61082b366004614c3b565b61201b565b6103bc61209c565b6103bc610846366004614b38565b612109565b6104a2610859366004614a53565b61217f565b6104a261086c366004614c69565b6123e0565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc61245a565b6103f66124c7565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc612558565b6040517f4903b0d10000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff821660048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634903b0d1906024015b602060405180830381865afa9250505080156109b1575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526109ae91810190614c8d565b60015b610a68576040517f065a80d8000000000000000000000000000000000000000000000000000000008152600f83900b60048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063065a80d8906024015b602060405180830381865afa158015610a44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a689190614c8d565b92915050565b919050565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015610ae0573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b269190810190614d67565b905090565b6040517f07211ef7000000000000000000000000000000000000000000000000000000008152600f84810b600483015283900b6024820152604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906307211ef7906064015b602060405180830381865afa158015610bcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf09190614c8d565b90505b9392505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663140522886040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b269190614c8d565b610c936148ed565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166314f059796040518163ffffffff1660e01b8152600401606060405180830381865afa158015610cfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b269190614db8565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b60026000541415610e01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b60026000908155610e11836125c5565b9050610e1c816126d0565b505060016000555050565b60026000541415610e94576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610f25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f499190614e36565b90506000610f56856127ed565b90506000610f63856127ed565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529192506000918416906370a0823190602401602060405180830381865afa158015610fd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff99190614c8d565b90506001811115611127577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce800000061103f8784614e53565b6110499190614eb7565b604051600f8a810b602483015289900b60448201526064810184905260848101829052909150611124908690869086907fa6417ed6000000000000000000000000000000000000000000000000000000009060a4015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526001806128f7565b50505b505060016000555050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632081066c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6000610a68826125c5565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b60026000541415611287576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b60026000908155611297836125c5565b90506112a4838284612d6f565b5050600160005550565b6040517f3883e11900000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690633883e119906113259086908690600401614ef2565b602060405180830381865afa158015611342573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf39190614c8d565b600260005414156113d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b600260009081556113e3856125c5565b905060006113f0856125c5565b905061112782826000368080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525060019350915061301a9050565b61143f6148ed565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16634469e30e6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610cfe573d6000803e3d6000fd5b60026000541415611517576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b6002600090815561153d90600184358110916020860135821091604087013511906130e9565b50506001600055565b6040517f4903b0d1000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634903b0d19060240161095a565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635409491a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6040517f5e0d443f000000000000000000000000000000000000000000000000000000008152600f84810b600483015283900b6024820152604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635e0d443f90606401610baf565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166363543f066040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401610a27565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166376a2f0f06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b60026000541415611871576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611902573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119269190614e36565b90506000611933856125c5565b90506000611940856125c5565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529192506000918416906370a0823190602401602060405180830381865afa1580156119b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d69190614c8d565b90506001811115611127577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce8000000611a1c8784614e53565b611a269190614eb7565b604051600f8a810b602483015289900b60448201526064810184905260848101829052909150611124908690869086907f3df02124000000000000000000000000000000000000000000000000000000009060a40161109f565b611a886148ed565b6040517f85ca3c6f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906385ca3c6f90611afe90879087908790600401614f0a565b606060405180830381865afa158015611b1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf09190614db8565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610ae0573d6000803e3d6000fd5b60026000541415611c19576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b6002600090815561153d90600184358110916020860135821091604087013511906132c7565b60026000541415611cac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b60026000908155611cbc856127ed565b905060006113f0856127ed565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b4b577ad6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6000610a68826127ed565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb7b8b806040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6040517fcc2b27d700000000000000000000000000000000000000000000000000000000815260048101839052600f82900b60248201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063cc2b27d790604401611325565b60026000541415611e9b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b60026000908155611eab836125c5565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611f3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f5f9190614e36565b9050611f9b81837f0000000000000000000000000000000000000000000000000000000000000000611f92888a89613704565b600160006128f7565b5050600160005550505050565b611fb06148ed565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d96c7fce6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610cfe573d6000803e3d6000fd5b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063dd62ed3e90604401611325565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6040517fe2e7d264000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e2e7d26490602401610a27565b600260005414156121ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b600260009081556121fc836125c5565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa15801561228c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b09190614e36565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000918416906370a0823190602401602060405180830381865afa158015612322573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123469190614c8d565b905060018111156123d4577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce800000061238c8684614e53565b6123969190614eb7565b90506123d183857f00000000000000000000000000000000000000000000000000000000000000006123c98a8787613704565b6001806128f7565b50505b50506001600055505050565b6002600054141561244d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b600260005561153d613bc3565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f446c1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa158015612534573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b269190614e36565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fee3f7f96040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b600081600f0b600014156125f657507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6001141561262557507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6002141561265457507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6003141561268357507f00000000000000000000000000000000000000000000000000000000000000005b73ffffffffffffffffffffffffffffffffffffffff8116610a6e576040517fd1da79bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa15801561275d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127819190614e36565b90506127e8817f0000000000000000000000000000000000000000000000000000000000000000846000368080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525092508291506128f79050565b505050565b600081600f0b6000141561281e57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6001141561284d57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6002141561287c57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6003141561268357507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff8116610a6e576040517fd1da79bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606000803373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614612a60576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301528916906370a0823190602401602060405180830381865afa1580156129a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129c99190614c8d565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152919350908816906370a0823190602401602060405180830381865afa158015612a39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a5d9190614c8d565b90505b8415612b5c576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612b4357600080fd5b505af1158015612b57573d6000803e3d6000fd5b505050505b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a90612bf29033907f0000000000000000000000000000000000000000000000000000000000000000908b90600401614f31565b6000604051808303816000875af1158015612c11573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052612c579190810190614d67565b92508415612d55576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612d3c57600080fd5b505af1158015612d50573d6000803e3d6000fd5b505050505b612d6389898985858961403d565b50509695505050505050565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612dfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e209190614e36565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000917f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015612eb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ed69190614c8d565b90506001811115613013577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01613011827f0000000000000000000000000000000000000000000000000000000000000000867f1a4d01d200000000000000000000000000000000000000000000000000000000858a6b033b2e3c9fd0803ce8000000612f638b84614e53565b612f6d9190614eb7565b6040516024810193909352600f9190910b60448301526064820152608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152600060016128f7565b505b5050505050565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015260609060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa1580156130aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130ce9190614e36565b90506130de8188888888886128f7565b979650505050505050565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015613176573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061319a9190614e36565b90506131a88585858561429f565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561325957600080fd5b505af115801561326d573d6000803e3d6000fd5b505050506132b16000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061471592505050565b506132be8585858561429f565b61301381614813565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015613354573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133789190614e36565b9050841561344a576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561343157600080fd5b505af1158015613445573d6000803e3d6000fd5b505050505b831561351a576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561350157600080fd5b505af1158015613515573d6000803e3d6000fd5b505050505b82156135ea576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156135d157600080fd5b505af11580156135e5573d6000803e3d6000fd5b505050505b81156136ba576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156136a157600080fd5b505af11580156136b5573d6000803e3d6000fd5b505050505b6136fa6000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061471592505050565b5061301381614813565b60607f0000000000000000000000000000000000000000000000000000000000000000600214156138bd5783600f0b6000146137fa576040516000602482015260448101849052606481018390527f0b4c7e4d00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526138b6565b6040516024810184905260006044820152606481018390527f0b4c7e4d00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091525b9050610bf3565b7f0000000000000000000000000000000000000000000000000000000000000000600314156139d75783600f0b60001461398e5783600f0b60011461394557604051600060248201819052604482015260648101849052608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401613778565b604051600060248201819052604482018590526064820152608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401613778565b604051602481018490526000604482018190526064820152608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401613838565b7f000000000000000000000000000000000000000000000000000000000000000060041415613b615783600f0b600014613b115783600f0b600114613ac15783600f0b600214613a71576040516000602482018190526044820181905260648201526084810184905260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613778565b6040516000602482018190526044820181905260648201859052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613778565b6040516000602482018190526044820185905260648201819052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613778565b6040516024810184905260006044820181905260648201819052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613838565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f496e636f7272656374206e436f696e73000000000000000000000000000000006044820152606401610df8565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015613c50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c749190614e36565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301529192507f0000000000000000000000000000000000000000000000000000000000000000909116906351e3f16090604401600060405180830381600087803b158015613d2a57600080fd5b505af1158015613d3e573d6000803e3d6000fd5b50506040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f00000000000000000000000000000000000000000000000000000000000000001692506351e3f1609150604401600060405180830381600087803b158015613df357600080fd5b505af1158015613e07573d6000803e3d6000fd5b5050505060027f00000000000000000000000000000000000000000000000000000000000000001115613ff0576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015613ee557600080fd5b505af1158015613ef9573d6000803e3d6000fd5b5050505060037f00000000000000000000000000000000000000000000000000000000000000001115613ff0576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015613fd757600080fd5b505af1158015613feb573d6000803e3d6000fd5b505050505b6140306000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061471592505050565b5061403a81614813565b50565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461413e576040517f654a9eda00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528681166024830152858116604483015260648201859052608482018490527f0000000000000000000000000000000000000000000000000000000000000000169063654a9eda9060a401600060405180830381600087803b15801561412157600080fd5b505af1158015614135573d6000803e3d6000fd5b50505050613011565b80156141ee576040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015286811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b1580156141d557600080fd5b505af11580156141e9573d6000803e3d6000fd5b505050505b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015285811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561427f57600080fd5b505af1158015614293573d6000803e3d6000fd5b50505050505050505050565b83156143bb576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156143a257600080fd5b505af11580156143b6573d6000803e3d6000fd5b505050505b82156144d7576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156144be57600080fd5b505af11580156144d2573d6000803e3d6000fd5b505050505b81156145f3576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156145da57600080fd5b505af11580156145ee573d6000803e3d6000fd5b505050505b801561470f576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156146f657600080fd5b505af115801561470a573d6000803e3d6000fd5b505050505b50505050565b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815260609073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a906147ae9033907f0000000000000000000000000000000000000000000000000000000000000000908790600401614f31565b6000604051808303816000875af11580156147cd573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610a689190810190614d67565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461403a576040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b1580156148d957600080fd5b505af1158015613013573d6000803e3d6000fd5b60405180606001604052806003906020820280368337509192915050565b8035600f81900b8114610a6e57600080fd5b60006020828403121561492f57600080fd5b610bf38261490b565b60005b8381101561495357818101518382015260200161493b565b8381111561470f5750506000910152565b6000815180845261497c816020860160208601614938565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610bf36020830184614964565b6000806000606084860312156149d657600080fd5b6149df8461490b565b92506149ed6020850161490b565b9150604084013590509250925092565b60608101818360005b6003811015614a25578151835260209283019290910190600101614a06565b50505092915050565b600080600060608486031215614a4357600080fd5b833592506149ed6020850161490b565b60008060408385031215614a6657600080fd5b614a6f8361490b565b946020939093013593505050565b8060608101831015610a6857600080fd5b60008060808385031215614aa157600080fd5b614aab8484614a7d565b915060608301358015158114614ac057600080fd5b809150509250929050565b60008060008060808587031215614ae157600080fd5b614aea8561490b565b9350614af86020860161490b565b93969395505050506040820135916060013590565b60008060808385031215614b2057600080fd5b614b2a8484614a7d565b946060939093013593505050565b600060208284031215614b4a57600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461403a57600080fd5b600060208284031215614b8557600080fd5b8135610bf381614b51565b600080600060e08486031215614ba557600080fd5b614baf8585614a7d565b9250614bbe8560608601614a7d565b915060c084013590509250925092565b60008060408385031215614be157600080fd5b82359150614bf16020840161490b565b90509250929050565b6020810160118310614c35577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60008060408385031215614c4e57600080fd5b8235614c5981614b51565b91506020830135614ac081614b51565b60008060808385031215614c7c57600080fd5b82359150614bf18460208501614a7d565b600060208284031215614c9f57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff80841115614cf057614cf0614ca6565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715614d3657614d36614ca6565b81604052809350858152868686011115614d4f57600080fd5b614d5d866020830187614938565b5050509392505050565b600060208284031215614d7957600080fd5b815167ffffffffffffffff811115614d9057600080fd5b8201601f81018413614da157600080fd5b614db084825160208401614cd5565b949350505050565b600060608284031215614dca57600080fd5b82601f830112614dd957600080fd5b6040516060810181811067ffffffffffffffff82111715614dfc57614dfc614ca6565b604052806060840185811115614e1157600080fd5b845b81811015614e2b578051835260209283019201614e13565b509195945050505050565b600060208284031215614e4857600080fd5b8151610bf381614b51565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614eb2577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500290565b600082614eed577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60808101606084833791151560609190910152919050565b60e081016060858337606082016000815260608582375060c0919091019190915292915050565b600073ffffffffffffffffffffffffffffffffffffffff808616835280851660208401525060606040830152614f6a6060830184614964565b9594505050505056fea2646970667358221220efb951725986e76ee157ff0d00cd7b7a6a9b8a581784400c52be5c96516fe15064736f6c634300080a00336102606040523480156200001257600080fd5b5060405162005f9a38038062005f9a833981016040819052620000359162000ba4565b83838383600484846001600160a01b03821615806200005b57506001600160a01b038116155b156200007a57604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038216608081905260408051632f7a188160e01b81529051632f7a1881916004808201926020929091908290030181865afa158015620000c5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000eb919062000c01565b6001600160a01b0390811660a05290811660c05260016000558416151590506200012857604051635919af9760e11b815260040160405180910390fd5b608051604051630f67c5bd60e41b81526001600160a01b0385811660048301529091169063f67c5bd090602401602060405180830381865afa15801562000173573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000199919062000c26565b620001c757604051634c607af960e11b81526001600160a01b03841660048201526024015b60405180910390fd5b6001600160a01b038084166101e081905261020052821661022052610240819052620001f460006200090a565b6001600160a01b031660e0526200020c60016200090a565b6001600160a01b0316610100526200022560026200090a565b6001600160a01b0316610120526200023e60036200090a565b6001600160a01b031661014052620002576000620009fd565b6001600160a01b031661016052620002706001620009fd565b6001600160a01b031661018052620002896002620009fd565b6001600160a01b03166101a052620002a26003620009fd565b6001600160a01b039081166101c05260e051161580620002cc5750610100516001600160a01b0316155b15620002eb57604051635919af9760e11b815260040160405180910390fd5b600281118015620003065750610120516001600160a01b0316155b156200032557604051635919af9760e11b815260040160405180910390fd5b600381118015620003405750610140516001600160a01b0316155b156200035f57604051635919af9760e11b815260040160405180910390fd5b60805160e051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620003ac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003d2919062000c26565b620004005760e051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b60805161010051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa1580156200044e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000474919062000c26565b620004a35761010051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b60028111801562000525575060805161012051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620004fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000523919062000c26565b155b15620005555761012051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b600381118015620005d7575060805161014051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620005af573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005d5919062000c26565b155b15620006075761014051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b610160516001600160a01b03161580159062000694575060805161016051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa1580156200066c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000692919062000c26565b155b15620006c45761016051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b610180516001600160a01b03161580159062000751575060805161018051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa15801562000729573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200074f919062000c26565b155b15620007815761018051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b6101a0516001600160a01b0316158015906200080e57506080516101a051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620007e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200080c919062000c26565b155b156200083e576101a051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b6101c0516001600160a01b031615801590620008cb57506080516101c051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620008a3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008c9919062000c26565b155b15620008fb576101c051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b50505050505050505062000c66565b60c05160405163c661065760e01b8152600481018390526000916001600160a01b03169063c661065790602401602060405180830381865afa92505050801562000973575060408051601f3d908101601f19168201909252620009709181019062000c01565b60015b6200097e5762000984565b92915050565b60c05160405163046e8dd760e31b8152600f84900b60048201526001600160a01b03909116906323746eb8906024015b602060405180830381865afa925050508015620009f0575060408051601f3d908101601f19168201909252620009ed9181019062000c01565b60015b6200097e57506000919050565b610220516000906001600160a01b03161562000a1e576200097e8262000ac0565b60c051604051630b9947eb60e41b8152600481018490526001600160a01b039091169063b9947eb090602401602060405180830381865afa92505050801562000a86575060408051601f3d908101601f1916820190925262000a839181019062000c01565b60015b6200097e5760c051604051635b9cca9f60e11b8152600f84900b60048201526001600160a01b039091169063b739953e90602401620009b4565b60008162000ad4576200097e600062000b17565b610220516001600160a01b031663c661065762000af360018562000c40565b6040518263ffffffff1660e01b8152600401620009b491815260200190565b919050565b600081600f0b6000141562000b2b575060e0515b81600f0b6001141562000b3e5750610100515b81600f0b6002141562000b515750610120515b81600f0b6003141562000b645750610140515b6001600160a01b03811662000b12576040516334769e6f60e21b815260040160405180910390fd5b80516001600160a01b038116811462000b1257600080fd5b6000806000806080858703121562000bbb57600080fd5b62000bc68562000b8c565b935062000bd66020860162000b8c565b925062000be66040860162000b8c565b915062000bf66060860162000b8c565b905092959194509250565b60006020828403121562000c1457600080fd5b62000c1f8262000b8c565b9392505050565b60006020828403121562000c3957600080fd5b5051919050565b60008282101562000c6157634e487b7160e01b600052601160045260246000fd5b500390565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e051610200516102205161024051614fb762000fe3600039600081816107830152818161395a01528181613a4c01528181613b8c01528181613d430152613e5d015260006105f101526000818161069b01528181611f6f0152818161241d015281816126cd01528181612daf01528181613491015261352f015260006108ad0152600081816105af0152612eb10152600081816103e90152612e820152600081816106180152612e530152600081816106c20152612e2401526000818161087601528181612b1c01528181612c8901528181613ab6015261440c0152600081816104fd01528181612a4c01528181612c5a015281816139c401526142f00152600081816108060152818161297c01528181612c2b015281816138d001526141d401526000818161045d015281816128ac01528181612bfc0152818161380401526140b8015260008181610735015281816109bf01528181610a8c01528181610b1c01528181610c1401528181610ca301528181610d3a01528181610dcb01528181611270015281816112e8015281816114c00152818161155b015281816115e4015281816116620152818161170f01528181611757015281816118080152818161183d01528181611ba001528181611c9701528181611d0f01528181611db401528181611fef01528181612030015281816120e90152818161211e015281816121b901528181612462015281816124cf01528181612560015281816130cf015281816131ee015281816132c801528181614090015281816141ac015281816142c8015281816143e4015261452c01526000818161052401528181612f3a015281816145d301526146ad01526000818161075c015281816110000152818161194801528181611efb015281816122c3015281816125fa015281816126f5015281816127df015281816128d4015281816129a401528181612a7401528181612b4401528181612d2701528181613125015281816131bf0152818161331e015281816133c6015281816136880152818161373f0152818161382f015281816138f8015281816139ec01528181613ade01528181614106015281816142220152818161433e0152818161445a015281816144fd0152818161463d01528181614735015281816147e901526148930152614fb76000f3fe608060405234801561001057600080fd5b50600436106103a45760003560e01c806378aa73a4116101e9578063cc2b27d71161010f578063ddca3f43116100ad578063f446c1d01161007c578063f446c1d014610898578063f851a440146108a0578063fc0c546a146108a8578063fee3f7f9146108cf57600080fd5b8063ddca3f4314610843578063e2e7d2641461084b578063ec026ca71461085e578063ef14101e1461087157600080fd5b8063cf701ff7116100e9578063cf701ff7146107ee578063d21220a714610801578063d96c7fce14610828578063dd62ed3e1461083057600080fd5b8063cc2b27d7146107b3578063ce30bbdb146107c6578063cf023dd0146107db57600080fd5b8063b4b577ad11610187578063bd90df7011610156578063bd90df7014610730578063c12c21c014610757578063c21ee1621461077e578063c6610657146107a557600080fd5b8063b4b577ad146106ff578063b739953e14610707578063b9947eb01461071a578063bb7b8b801461072857600080fd5b806382c63066116101c357806382c63066146106965780638ba51dfc146106bd57806395d89b41146106e4578063a6417ed6146106ec57600080fd5b806378aa73a41461065557806379bea664146106705780637d49d8751461068357600080fd5b80632f7a1881116102ce5780635409491a1161026c57806364a89bca1161023b57806364a89bca146105ec5780636e1d82711461061357806370a082311461063a57806376a2f0f01461064d57600080fd5b80635409491a146105a257806357d78875146105aa5780635e0d443f146105d157806363543f06146105e457600080fd5b80633df02124116102a85780633df02124146105615780634469e30e146105745780634903b0d11461057c57806353b546cd1461058f57600080fd5b80632f7a18811461051f578063313ce5671461054657806333d2ebf21461054e57600080fd5b806314f05979116103465780631af4de83116103155780631af4de83146104ca5780632081066c146104dd57806323746eb8146104e557806325be124e146104f857600080fd5b806314f059791461048757806318160ddd1461049c57806318a7bd76146104a45780631a4d01d2146104b757600080fd5b806306fdde031161038257806306fdde031461043057806307211ef7146104455780630dfe168114610458578063140522881461047f57600080fd5b8063029b2f34146103a9578063065a80d8146103be57806306871163146103e4575b600080fd5b6103bc6103b7366004614926565b6108d7565b005b6103d16103cc366004614963565b61097c565b6040519081526020015b60405180910390f35b61040b7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016103db565b610438610b18565b6040516103db91906149f4565b6103d1610453366004614a07565b610bd0565b61040b7f000000000000000000000000000000000000000000000000000000000000000081565b6103d1610c9f565b61048f610d30565b6040516103db9190614a43565b6103d1610dc7565b6103bc6104b2366004614926565b610e34565b6103bc6104c5366004614a74565b610ecb565b6103bc6104d8366004614a07565b610f5e565b6103d161126c565b61040b6104f3366004614963565b6112d9565b61040b7f000000000000000000000000000000000000000000000000000000000000000081565b61040b7f000000000000000000000000000000000000000000000000000000000000000081565b6103d16112e4565b6103bc61055c366004614a99565b611351565b6103bc61056f366004614ac3565b6113e5565b61048f6114b6565b6103d161058a366004614b05565b611529565b61048f61059d366004614b1e565b61159f565b6103d161165e565b61040b7f000000000000000000000000000000000000000000000000000000000000000081565b6103d16105df366004614a07565b6116cb565b6103d1611753565b61040b7f000000000000000000000000000000000000000000000000000000000000000081565b61040b7f000000000000000000000000000000000000000000000000000000000000000081565b6103d1610648366004614b80565b6117c0565b6103d1611839565b61065d600281565b60405161ffff90911681526020016103db565b6103bc61067e366004614a07565b6118a6565b6103bc610691366004614b9d565b611b22565b61040b7f000000000000000000000000000000000000000000000000000000000000000081565b61040b7f000000000000000000000000000000000000000000000000000000000000000081565b610438611b9c565b6103bc6106fa366004614ac3565b611c09565b6103d1611c93565b61040b610715366004614963565b611d00565b61040b610715366004614b05565b6103d1611d0b565b61040b7f000000000000000000000000000000000000000000000000000000000000000081565b61040b7f000000000000000000000000000000000000000000000000000000000000000081565b6103d17f000000000000000000000000000000000000000000000000000000000000000081565b61040b6104f3366004614b05565b6103d16107c1366004614bca565b611d78565b6107ce600781565b6040516103db9190614bed565b6103bc6107e9366004614a74565b611e35565b6103d16107fc366004614c2e565b611faf565b61040b7f000000000000000000000000000000000000000000000000000000000000000081565b61048f612026565b6103d161083e366004614c6b565b612099565b6103d161211a565b6103d1610859366004614b05565b612187565b6103bc61086c366004614a99565b6121fd565b61040b7f000000000000000000000000000000000000000000000000000000000000000081565b6103d161245e565b61040b6124cb565b61040b7f000000000000000000000000000000000000000000000000000000000000000081565b6103d161255c565b60026000541415610949576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b600260005561097360018335811090602085013581109060408601358110906060870135116125c9565b50506001600055565b6040517f4903b0d10000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff821660048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634903b0d1906024015b602060405180830381865afa925050508015610a56575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610a5391810190614c99565b60015b610b0d576040517f065a80d8000000000000000000000000000000000000000000000000000000008152600f83900b60048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063065a80d8906024015b602060405180830381865afa158015610ae9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0d9190614c99565b92915050565b919050565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015610b85573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610bcb9190810190614d73565b905090565b6040517f07211ef7000000000000000000000000000000000000000000000000000000008152600f84810b600483015283900b6024820152604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906307211ef7906064015b602060405180830381865afa158015610c71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c959190614c99565b90505b9392505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663140522886040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bcb9190614c99565b610d386148f7565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166314f059796040518163ffffffff1660e01b8152600401608060405180830381865afa158015610da3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bcb9190614dc4565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d0c573d6000803e3d6000fd5b60026000541415610ea1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610940565b600260005561097360018335811090602085013581109060408601358110906060870135116127ae565b60026000541415610f38576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610940565b60026000908155610f4883612beb565b9050610f5381612cf6565b505060016000555050565b60026000541415610fcb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610940565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa15801561105c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110809190614e42565b9050600061108d85612e13565b9050600061109a85612e13565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529192506000918416906370a0823190602401602060405180830381865afa15801561110c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111309190614c99565b9050600181111561125e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce80000006111768784614e5f565b6111809190614ec3565b604051600f8a810b602483015289900b6044820152606481018490526084810182905290915061125b908690869086907fa6417ed6000000000000000000000000000000000000000000000000000000009060a4015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152600180612f1d565b50505b505060016000555050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632081066c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d0c573d6000803e3d6000fd5b6000610b0d82612beb565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d0c573d6000803e3d6000fd5b600260005414156113be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610940565b600260009081556113ce83612beb565b90506113db838284613395565b5050600160005550565b60026000541415611452576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610940565b6002600090815561146285612beb565b9050600061146f85612beb565b905061125e82826000368080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525060019350915061363f9050565b6114be6148f7565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16634469e30e6040518163ffffffff1660e01b8152600401608060405180830381865afa158015610da3573d6000803e3d6000fd5b6040517f4903b0d1000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634903b0d1906024016109ff565b6115a76148f7565b6040517f53b546cd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906353b546cd9061161d90879087908790600401614efe565b608060405180830381865afa15801561163a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c959190614dc4565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635409491a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d0c573d6000803e3d6000fd5b6040517f5e0d443f000000000000000000000000000000000000000000000000000000008152600f84810b600483015283900b6024820152604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635e0d443f90606401610c54565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166363543f066040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d0c573d6000803e3d6000fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401610acc565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166376a2f0f06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d0c573d6000803e3d6000fd5b60026000541415611913576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610940565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156119a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c89190614e42565b905060006119d585612beb565b905060006119e285612beb565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529192506000918416906370a0823190602401602060405180830381865afa158015611a54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a789190614c99565b9050600181111561125e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce8000000611abe8784614e5f565b611ac89190614ec3565b604051600f8a810b602483015289900b6044820152606481018490526084810182905290915061125b908690869086907f3df02124000000000000000000000000000000000000000000000000000000009060a4016111d6565b60026000541415611b8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610940565b600260005561097361370e565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610b85573d6000803e3d6000fd5b60026000541415611c76576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610940565b60026000908155611c8685612e13565b9050600061146f85612e13565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b4b577ad6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d0c573d6000803e3d6000fd5b6000610b0d82612e13565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb7b8b806040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d0c573d6000803e3d6000fd5b6040517fcc2b27d700000000000000000000000000000000000000000000000000000000815260048101839052600f82900b60248201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063cc2b27d7906044015b602060405180830381865afa158015611e11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c989190614c99565b60026000541415611ea2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610940565b60026000908155611eb283612beb565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611f42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f669190614e42565b9050611fa281837f0000000000000000000000000000000000000000000000000000000000000000611f99888a89613b88565b60016000612f1d565b5050600160005550505050565b6040517fcf701ff700000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063cf701ff790611df49086908690600401614f27565b61202e6148f7565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d96c7fce6040518163ffffffff1660e01b8152600401608060405180830381865afa158015610da3573d6000803e3d6000fd5b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063dd62ed3e90604401611df4565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d0c573d6000803e3d6000fd5b6040517fe2e7d264000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e2e7d26490602401610acc565b6002600054141561226a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610940565b6002600090815561227a83612beb565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa15801561230a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061232e9190614e42565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000918416906370a0823190602401602060405180830381865afa1580156123a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123c49190614c99565b90506001811115612452577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce800000061240a8684614e5f565b6124149190614ec3565b905061244f83857f00000000000000000000000000000000000000000000000000000000000000006124478a8787613b88565b600180612f1d565b50505b50506001600055505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f446c1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d0c573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa158015612538573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bcb9190614e42565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fee3f7f96040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d0c573d6000803e3d6000fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612656573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061267a9190614e42565b905061268885858585614047565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561273957600080fd5b505af115801561274d573d6000803e3d6000fd5b505050506127916000368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506144bd92505050565b5061279e85858585614047565b6127a7816145bb565b5050505050565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa15801561283b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061285f9190614e42565b90508415612931576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561291857600080fd5b505af115801561292c573d6000803e3d6000fd5b505050505b8315612a01576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156129e857600080fd5b505af11580156129fc573d6000803e3d6000fd5b505050505b8215612ad1576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015612ab857600080fd5b505af1158015612acc573d6000803e3d6000fd5b505050505b8115612ba1576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015612b8857600080fd5b505af1158015612b9c573d6000803e3d6000fd5b505050505b612be16000368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506144bd92505050565b506127a7816145bb565b600081600f0b60001415612c1c57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b60011415612c4b57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b60021415612c7a57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b60031415612ca957507f00000000000000000000000000000000000000000000000000000000000000005b73ffffffffffffffffffffffffffffffffffffffff8116610b13576040517fd1da79bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612d83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612da79190614e42565b9050612e0e817f0000000000000000000000000000000000000000000000000000000000000000846000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509250829150612f1d9050565b505050565b600081600f0b60001415612e4457507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b60011415612e7357507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b60021415612ea257507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b60031415612ca957507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff8116610b13576040517fd1da79bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606000803373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614613086576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301528916906370a0823190602401602060405180830381865afa158015612fcb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fef9190614c99565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152919350908816906370a0823190602401602060405180830381865afa15801561305f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130839190614c99565b90505b8415613182576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561316957600080fd5b505af115801561317d573d6000803e3d6000fd5b505050505b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a906132189033907f0000000000000000000000000000000000000000000000000000000000000000908b90600401614f3f565b6000604051808303816000875af1158015613237573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261327d9190810190614d73565b9250841561337b576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561336257600080fd5b505af1158015613376573d6000803e3d6000fd5b505050505b613389898989858589614695565b50509695505050505050565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015613422573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134469190614e42565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000917f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa1580156134d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134fc9190614c99565b905060018111156127a7577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01613637827f0000000000000000000000000000000000000000000000000000000000000000867f1a4d01d200000000000000000000000000000000000000000000000000000000858a6b033b2e3c9fd0803ce80000006135898b84614e5f565b6135939190614ec3565b6040516024810193909352600f9190910b60448301526064820152608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915260006001612f1d565b505050505050565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015260609060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa1580156136cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136f39190614e42565b9050613703818888888888612f1d565b979650505050505050565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa15801561379b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137bf9190614e42565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301529192507f0000000000000000000000000000000000000000000000000000000000000000909116906351e3f16090604401600060405180830381600087803b15801561387557600080fd5b505af1158015613889573d6000803e3d6000fd5b50506040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f00000000000000000000000000000000000000000000000000000000000000001692506351e3f1609150604401600060405180830381600087803b15801561393e57600080fd5b505af1158015613952573d6000803e3d6000fd5b5050505060027f00000000000000000000000000000000000000000000000000000000000000001115613b3b576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015613a3057600080fd5b505af1158015613a44573d6000803e3d6000fd5b5050505060037f00000000000000000000000000000000000000000000000000000000000000001115613b3b576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015613b2257600080fd5b505af1158015613b36573d6000803e3d6000fd5b505050505b613b7b6000368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506144bd92505050565b50613b85816145bb565b50565b60607f000000000000000000000000000000000000000000000000000000000000000060021415613d415783600f0b600014613c7e576040516000602482015260448101849052606481018390527f0b4c7e4d00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613d3a565b6040516024810184905260006044820152606481018390527f0b4c7e4d00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091525b9050610c98565b7f000000000000000000000000000000000000000000000000000000000000000060031415613e5b5783600f0b600014613e125783600f0b600114613dc957604051600060248201819052604482015260648101849052608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401613bfc565b604051600060248201819052604482018590526064820152608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401613bfc565b604051602481018490526000604482018190526064820152608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401613cbc565b7f000000000000000000000000000000000000000000000000000000000000000060041415613fe55783600f0b600014613f955783600f0b600114613f455783600f0b600214613ef5576040516000602482018190526044820181905260648201526084810184905260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613bfc565b6040516000602482018190526044820181905260648201859052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613bfc565b6040516000602482018190526044820185905260648201819052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613bfc565b6040516024810184905260006044820181905260648201819052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613cbc565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f496e636f7272656374206e436f696e73000000000000000000000000000000006044820152606401610940565b8315614163576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561414a57600080fd5b505af115801561415e573d6000803e3d6000fd5b505050505b821561427f576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561426657600080fd5b505af115801561427a573d6000803e3d6000fd5b505050505b811561439b576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561438257600080fd5b505af1158015614396573d6000803e3d6000fd5b505050505b80156144b7576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561449e57600080fd5b505af11580156144b2573d6000803e3d6000fd5b505050505b50505050565b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815260609073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a906145569033907f0000000000000000000000000000000000000000000000000000000000000000908790600401614f3f565b6000604051808303816000875af1158015614575573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b0d9190810190614d73565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614613b85576040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b15801561468157600080fd5b505af11580156127a7573d6000803e3d6000fd5b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614614796576040517f654a9eda00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528681166024830152858116604483015260648201859052608482018490527f0000000000000000000000000000000000000000000000000000000000000000169063654a9eda9060a401600060405180830381600087803b15801561477957600080fd5b505af115801561478d573d6000803e3d6000fd5b50505050613637565b8015614846576040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015286811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b15801561482d57600080fd5b505af1158015614841573d6000803e3d6000fd5b505050505b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015285811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156148d757600080fd5b505af11580156148eb573d6000803e3d6000fd5b50505050505050505050565b60405180608001604052806004906020820280368337509192915050565b8060808101831015610b0d57600080fd5b60008060a0838503121561493957600080fd5b6149438484614915565b946080939093013593505050565b8035600f81900b8114610b1357600080fd5b60006020828403121561497557600080fd5b610c9882614951565b60005b83811015614999578181015183820152602001614981565b838111156144b75750506000910152565b600081518084526149c281602086016020860161497e565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610c9860208301846149aa565b600080600060608486031215614a1c57600080fd5b614a2584614951565b9250614a3360208501614951565b9150604084013590509250925092565b60808101818360005b6004811015614a6b578151835260209283019290910190600101614a4c565b50505092915050565b600080600060608486031215614a8957600080fd5b83359250614a3360208501614951565b60008060408385031215614aac57600080fd5b614ab583614951565b946020939093013593505050565b60008060008060808587031215614ad957600080fd5b614ae285614951565b9350614af060208601614951565b93969395505050506040820135916060013590565b600060208284031215614b1757600080fd5b5035919050565b60008060006101208486031215614b3457600080fd5b614b3e8585614915565b9250614b4d8560808601614915565b915061010084013590509250925092565b73ffffffffffffffffffffffffffffffffffffffff81168114613b8557600080fd5b600060208284031215614b9257600080fd5b8135610c9881614b5e565b60008060a08385031215614bb057600080fd5b82359150614bc18460208501614915565b90509250929050565b60008060408385031215614bdd57600080fd5b82359150614bc160208401614951565b6020810160118310614c28577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60008060a08385031215614c4157600080fd5b614c4b8484614915565b915060808301358015158114614c6057600080fd5b809150509250929050565b60008060408385031215614c7e57600080fd5b8235614c8981614b5e565b91506020830135614c6081614b5e565b600060208284031215614cab57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff80841115614cfc57614cfc614cb2565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715614d4257614d42614cb2565b81604052809350858152868686011115614d5b57600080fd5b614d6986602083018761497e565b5050509392505050565b600060208284031215614d8557600080fd5b815167ffffffffffffffff811115614d9c57600080fd5b8201601f81018413614dad57600080fd5b614dbc84825160208401614ce1565b949350505050565b600060808284031215614dd657600080fd5b82601f830112614de557600080fd5b6040516080810181811067ffffffffffffffff82111715614e0857614e08614cb2565b604052806080840185811115614e1d57600080fd5b845b81811015614e37578051835260209283019201614e1f565b509195945050505050565b600060208284031215614e5457600080fd5b8151610c9881614b5e565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ebe577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500290565b600082614ef9577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b610120810160808583376080820160008152608085823750610100919091019190915292915050565b60a08101608084833791151560809190910152919050565b600073ffffffffffffffffffffffffffffffffffffffff808616835280851660208401525060606040830152614f7860608301846149aa565b9594505050505056fea26469706673582212202cfa6940592b7cd1b1fb4eed6a97af4919d3bdbe1c8d89c62204ae78f5bc27ba64736f6c634300080a003360806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d00011790553480156200003a57600080fd5b506040805161018081019091526000908060c081018060018152604080518082018252600381526244414960e81b6020828101919091528301526012908201526305f5e100606082015260800160018152602001600081525081526020016040518060c001604052806002600a811115620000b957620000b962000b78565b815260408051808201825260048152635553444360e01b6020828101919091528301526006908201526305f5e100606082015260800160018152602001600081525081526020016040518060c001604052806003600a81111562000121576200012162000b78565b815260408051808201825260048152630ae8aa8960e31b602082810191909152830152601290820152644a817c8000606082015260800160028152602001600081525081526020016040518060c001604052806004600a8111156200018a576200018a62000b78565b815260408051808201825260048152634c494e4b60e01b6020828101919091528301526012908201526359682f00606082015260800160018152602001600081525081526020016040518060c001604052806005600a811115620001f257620001f262000b78565b815260408051808201825260048152631554d11560e21b602082810191909152830152601290820152633b023380606082015260800160018152602001600081525081526020016040518060c001604052806006600a8111156200025a576200025a62000b78565b815260408051808201825260058152640e6e88aa8960db1b602082810191909152830152601290820152644cd588640060608201526080016003815260200160009052905260408051610140810190915290915060009080608081018060078152602001604051806040016040528060048152602001636344414960e01b8152508152602001601260ff1681526020016305f5e100815260200160048081111562000309576200030962000b78565b8152602001600181525081526020016040518060c001604052806008600a81111562000339576200033962000b78565b81526040805180820182526005815264635553444360d81b6020828101919091528301526006908201526305f5e100606082015260800160048152602001600281525081526020016040518060c001604052806009600a811115620003a257620003a262000b78565b8152604080518082018252600581526418d554d11560da1b602082810191909152830152601290820152633b023380606082015260800160048152602001600581525081526020016040518060c00160405280600a808111156200040a576200040a62000b78565b81526040805180820182526005815264634c494e4b60d81b6020828101919091528301526012908201526359682f00606082015260800160048152602001600490529052905060005b600681101562000496576200048183826006811062000476576200047662000b8e565b6020020151620004db565b806200048d8162000ba4565b91505062000453565b5060005b6004811015620004d257620004bd82826004811062000476576200047662000b8e565b80620004c98162000ba4565b9150506200049a565b50505062000d14565b6000600282608001516004811115620004f857620004f862000b78565b14156200054e576040516200050d9062000a8c565b604051809103906000f0801580156200052a573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b03831617905590506200071e565b60038260800151600481111562000569576200056962000b78565b1415620005a4576040516200057e9062000a9a565b604051809103906000f0801580156200059b573d6000803e3d6000fd5b5090506200071e565b600182608001516004811115620005bf57620005bf62000b78565b1415620005f157816020015182602001518360400151604051620005e39062000aa8565b6200057e9392919062000c1e565b6004826080015160048111156200060c576200060c62000b78565b1415620006be576000600260008460a00151600a81111562000632576200063262000b78565b600a81111562000646576200064662000b78565b815260200190815260200160002060009054906101000a90046001600160a01b0316905082602001518360200151846040015183604051620006889062000ab6565b62000697949392919062000c5b565b604051809103906000f080158015620006b4573d6000803e3d6000fd5b509150506200071e565b60405162461bcd60e51b815260206004820152602b60248201527f74657374546f6b656e53756974653a204372656174696e6720756e6b6e6f776e60448201526a20746f6b656e207479706560a81b606482015260840160405180910390fd5b60005460208301516040516318caf8e360e31b8152620100009092046001600160a01b03169163c657c718916200075b9185919060040162000ca9565b600060405180830381600087803b1580156200077657600080fd5b505af11580156200078b573d6000803e3d6000fd5b50505050600082606001516008604051620007a69062000ac4565b91825260ff166020820152604001604051809103906000f080158015620007d1573d6000803e3d6000fd5b50905081600260008560000151600a811115620007f257620007f262000b78565b600a81111562000806576200080662000b78565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055508260600151600560008560000151600a8111156200085a576200085a62000b78565b600a8111156200086e576200086e62000b78565b8152602080820192909252604090810160009081209390935585516001600160a01b03861684526008909252909120805460ff1916600183600a811115620008ba57620008ba62000b78565b02179055508260800151600360008560000151600a811115620008e157620008e162000b78565b600a811115620008f557620008f562000b78565b81526020810191909152604001600020805460ff1916600183600481111562000922576200092262000b78565b0217905550604080518082019091526001600160a01b0380841682528281166020808401918252600780546001810182556000918252945160029095027fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688810180549686166001600160a01b031997881617905592517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c689909301805493909416929094169190911790915584015184519091600491600a811115620009eb57620009eb62000b78565b600a811115620009ff57620009ff62000b78565b8152602001908152602001600020908051906020019062000a2292919062000ad2565b5080600660008560000151600a81111562000a415762000a4162000b78565b600a81111562000a555762000a5562000b78565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550505050565b610ab1806200285183390190565b611224806200330283390190565b611758806200452683390190565b6117098062005c7e83390190565b6106ca806200738783390190565b82805462000ae09062000cd7565b90600052602060002090601f01602090048101928262000b04576000855562000b4f565b82601f1062000b1f57805160ff191683800117855562000b4f565b8280016001018555821562000b4f579182015b8281111562000b4f57825182559160200191906001019062000b32565b5062000b5d92915062000b61565b5090565b5b8082111562000b5d576000815560010162000b62565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600060001982141562000bc757634e487b7160e01b600052601160045260246000fd5b5060010190565b6000815180845260005b8181101562000bf65760208185018101518683018201520162000bd8565b8181111562000c09576000602083870101525b50601f01601f19169290920160200192915050565b60608152600062000c33606083018662000bce565b828103602084015262000c47818662000bce565b91505060ff83166040830152949350505050565b60808152600062000c70608083018762000bce565b828103602084015262000c84818762000bce565b60ff95909516604084015250506001600160a01b039190911660609091015292915050565b6001600160a01b038316815260406020820181905260009062000ccf9083018462000bce565b949350505050565b600181811c9082168062000cec57607f821691505b6020821081141562000d0e57634e487b7160e01b600052602260045260246000fd5b50919050565b611b2d8062000d246000396000f3fe6080604052600436106101635760003560e01c80638eb86e8b116100c0578063c6c3bbe611610074578063d051a62211610059578063d051a62214610490578063eebab8ef146104b0578063fa7626d4146104d057600080fd5b8063c6c3bbe614610433578063c74912d21461045357600080fd5b80639b140a85116100a55780639b140a85146103e6578063b36ba20814610406578063ba414fa61461040e57600080fd5b80638eb86e8b1461038357806398cdaadf146103a357600080fd5b80636a72bde71161011757806388327863116100fc578063883278631461030857806388f776a2146103365780638a3177a31461035657600080fd5b80636a72bde7146102c45780636ca42ae3146102e657600080fd5b8063440864fa11610148578063440864fa146102025780634b57b0be1461022f57806367b426451461028157600080fd5b806304bc3b1c1461016f57806310c7f0b9146101b557600080fd5b3661016a57005b600080fd5b34801561017b57600080fd5b5061019f61018a3660046116f6565b60086020526000908152604090205460ff1681565b6040516101ac9190611742565b60405180910390f35b3480156101c157600080fd5b506101d56101d036600461175c565b6104ea565b6040805173ffffffffffffffffffffffffffffffffffffffff9384168152929091166020830152016101ac565b34801561020e57600080fd5b5061022261021d366004611784565b610530565b6040516101ac91906117cb565b34801561023b57600080fd5b5060015461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101ac565b34801561028d57600080fd5b5061025c61029c366004611784565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156102d057600080fd5b506102e46102df36600461181c565b6105ca565b005b3480156102f257600080fd5b506102fb610730565b6040516101ac919061186b565b34801561031457600080fd5b506103286103233660046118d4565b6107b5565b6040519081526020016101ac565b34801561034257600080fd5b506102e461035136600461190b565b610888565b34801561036257600080fd5b50610328610371366004611784565b60056020526000908152604090205481565b34801561038f57600080fd5b506102e461039e366004611954565b6108b9565b3480156103af57600080fd5b5061025c6103be366004611784565b60066020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156103f257600080fd5b506102e4610401366004611993565b610a73565b6102e4610b22565b34801561041a57600080fd5b50610423610ba0565b60405190151581526020016101ac565b34801561043f57600080fd5b506102e461044e3660046119b3565b610d00565b34801561045f57600080fd5b5061048361046e366004611784565b60036020526000908152604090205460ff1681565b6040516101ac91906119d3565b34801561049c57600080fd5b506103286104ab36600461190b565b610daf565b3480156104bc57600080fd5b506102e46104cb366004611954565b610e8b565b3480156104dc57600080fd5b506000546104239060ff1681565b600781815481106104fa57600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff91821692501682565b60046020526000908152604090208054610549906119e7565b80601f0160208091040260200160405190810160405280929190818152602001828054610575906119e7565b80156105c25780601f10610597576101008083540402835291602001916105c2565b820191906000526020600020905b8154815290600101906020018083116105a557829003601f168201915b505050505081565b6000546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152620100009092049091169063ca669fa790602401600060405180830381600087803b15801561063e57600080fd5b505af1158015610652573d6000803e3d6000fd5b505050506002600085600a81111561066c5761066c611713565b600a81111561067d5761067d611713565b8152602081019190915260409081016000205490517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490529091169063095ea7b3906044016020604051808303816000875af1158015610705573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107299190611a3b565b5050505050565b60606007805480602002602001604051908101604052809291908181526020016000905b828210156107ac5760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff908116835260019182015416828401529083529092019101610754565b50505050905090565b60006002600084600a8111156107cd576107cd611713565b600a8111156107de576107de611713565b8152602081019190915260409081016000205490517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152909116906370a0823190602401602060405180830381865afa15801561085d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108819190611a5d565b9392505050565b6108b48383837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6105ca565b505050565b60016003600085600a8111156108d1576108d1611713565b600a8111156108e2576108e2611713565b815260208101919091526040016000205460ff16600481111561090757610907611713565b14610999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f74657374546f6b656e53756974653a20547279696e6720746f206275726e206160448201527f206e6f6e2d6e6f726d616c20746f6b656e00000000000000000000000000000060648201526084015b60405180910390fd5b6002600084600a8111156109af576109af611713565b600a8111156109c0576109c0611713565b8152602081019190915260409081016000205490517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526024820184905290911690639dc29fac906044015b6020604051808303816000875af1158015610a49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6d9190611a3b565b50505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604081205460ff169081600a811115610aaf57610aaf611713565b1415610b17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f20746f6b656e2077697468207375636820616464726573730000000000006044820152606401610990565b610a6d818484610888565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015610b8c57600080fd5b505af1158015610729573d6000803e3d6000fd5b60008054610100900460ff1615610bc05750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610cfb5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610c65917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc491608001611a76565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052610c9d91611abe565b6000604051808303816000865af19150503d8060008114610cda576040519150601f19603f3d011682016040523d82523d6000602084013e610cdf565b606091505b5091505080806020019051810190610cf79190611a3b565b9150505b919050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604081205460ff169081600a811115610d3c57610d3c611713565b1415610da4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f20746f6b656e2077697468207375636820616464726573730000000000006044820152606401610990565b610a6d818484610e8b565b60006002600085600a811115610dc757610dc7611713565b600a811115610dd857610dd8611713565b8152602081019190915260409081016000205490517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301529091169063dd62ed3e90604401602060405180830381865afa158015610e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e839190611a5d565b949350505050565b60026003600085600a811115610ea357610ea3611713565b600a811115610eb457610eb4611713565b815260208101919091526040016000205460ff166004811115610ed957610ed9611713565b1415610ff6576000546040517fc88a5e6d000000000000000000000000000000000000000000000000000000008152306004820152602481018390526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c88a5e6d90604401600060405180830381600087803b158015610f5657600080fd5b505af1158015610f6a573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015610fd857600080fd5b505af1158015610fec573d6000803e3d6000fd5b505050505061163c565b600380600085600a81111561100d5761100d611713565b600a81111561101e5761101e611713565b815260208101919091526040016000205460ff16600481111561104357611043611713565b14156111aa576000546040517fc88a5e6d000000000000000000000000000000000000000000000000000000008152306004820152602481018390526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c88a5e6d90604401600060405180830381600087803b1580156110c057600080fd5b505af11580156110d4573d6000803e3d6000fd5b505050506002600084600a8111156110ee576110ee611713565b600a8111156110ff576110ff611713565b8152602081019190915260409081016000205490517fa1903eab00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a1903eab90839060240160206040518083038185885af115801561117f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906111a49190611a5d565b5061163c565b60046003600085600a8111156111c2576111c2611713565b600a8111156111d3576111d3611713565b815260208101919091526040016000205460ff1660048111156111f8576111f8611713565b141561148f5760006002600085600a81111561121657611216611713565b600a81111561122757611227611713565b815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c49190611ada565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600860205260409020549091506112fb9060ff163084610e8b565b8073ffffffffffffffffffffffffffffffffffffffff1663095ea7b36002600087600a81111561132d5761132d611713565b600a81111561133e5761133e611713565b81526020810191909152604090810160002054905160e083901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602481018590526044016020604051808303816000875af11580156113c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e69190611a3b565b506002600085600a8111156113fd576113fd611713565b600a81111561140e5761140e611713565b8152602081019190915260409081016000205490517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810184905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f1990604401600060405180830381600087803b158015610fd857600080fd5b60016003600085600a8111156114a7576114a7611713565b600a8111156114b8576114b8611713565b815260208101919091526040016000205460ff1660048111156114dd576114dd611713565b14156115b4576002600084600a8111156114f9576114f9611713565b600a81111561150a5761150a611713565b8152602081019190915260409081016000205490517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f19906044016020604051808303816000875af1158015611590573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a49190611a3b565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f74657374546f6b656e53756974653a20547279696e6720746f207472616e736660448201527f657220756e6b6e6f776e20746f6b656e000000000000000000000000000000006064820152608401610990565b6002600084600a81111561165257611652611713565b600a81111561166357611663611713565b8152602081019190915260409081016000205490517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490529091169063a9059cbb90604401610a2a565b73ffffffffffffffffffffffffffffffffffffffff811681146116f357600080fd5b50565b60006020828403121561170857600080fd5b8135610881816116d1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60208101600b831061175657611756611713565b91905290565b60006020828403121561176e57600080fd5b5035919050565b8035600b8110610cfb57600080fd5b60006020828403121561179657600080fd5b61088182611775565b60005b838110156117ba5781810151838201526020016117a2565b83811115610a6d5750506000910152565b60208152600082518060208401526117ea81604085016020870161179f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000806080858703121561183257600080fd5b61183b85611775565b9350602085013561184b816116d1565b9250604085013561185b816116d1565b9396929550929360600135925050565b602080825282518282018190526000919060409081850190868401855b828110156118c7578151805173ffffffffffffffffffffffffffffffffffffffff90811686529087015116868501529284019290850190600101611888565b5091979650505050505050565b600080604083850312156118e757600080fd5b6118f083611775565b91506020830135611900816116d1565b809150509250929050565b60008060006060848603121561192057600080fd5b61192984611775565b92506020840135611939816116d1565b91506040840135611949816116d1565b809150509250925092565b60008060006060848603121561196957600080fd5b61197284611775565b92506020840135611982816116d1565b929592945050506040919091013590565b6000806000606084860312156119a857600080fd5b8335611929816116d1565b6000806000606084860312156119c857600080fd5b8335611972816116d1565b602081016005831061175657611756611713565b600181811c908216806119fb57607f821691505b60208210811415611a35577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600060208284031215611a4d57600080fd5b8151801515811461088157600080fd5b600060208284031215611a6f57600080fd5b5051919050565b7fffffffff000000000000000000000000000000000000000000000000000000008316815260008251611ab081600485016020870161179f565b919091016004019392505050565b60008251611ad081846020870161179f565b9190910192915050565b600060208284031215611aec57600080fd5b8151610881816116d156fea264697066735822122010fe735ed069aca27931edce4ba2ff14ec7886bf21b0eea685a884f9200fb49e64736f6c634300080a003360c0604052600d60808190526c2bb930b83832b21022ba3432b960991b60a090815261002e916000919061007a565b50604080518082019091526004808252630ae8aa8960e31b602090920191825261005a9160019161007a565b506002805460ff1916601217905534801561007457600080fd5b5061014e565b82805461008690610113565b90600052602060002090601f0160209004810192826100a857600085556100ee565b82601f106100c157805160ff19168380011785556100ee565b828001600101855582156100ee579182015b828111156100ee5782518255916020019190600101906100d3565b506100fa9291506100fe565b5090565b5b808211156100fa57600081556001016100ff565b600181811c9082168061012757607f821691505b6020821081141561014857634e487b7160e01b600052602260045260246000fd5b50919050565b6109548061015d6000396000f3fe6080604052600436106100cb5760003560e01c806340c10f1911610074578063a9059cbb1161004e578063a9059cbb14610225578063d0e30db014610245578063dd62ed3e1461024d57600080fd5b806340c10f19146101c357806370a08231146101e357806395d89b411461021057600080fd5b806323b872dd116100a557806323b872dd146101575780632e1a7d4d14610177578063313ce5671461019757600080fd5b806306fdde03146100df578063095ea7b31461010a57806318160ddd1461013a57600080fd5b366100da576100d8610285565b005b600080fd5b3480156100eb57600080fd5b506100f46102e0565b6040516101019190610703565b60405180910390f35b34801561011657600080fd5b5061012a61012536600461079f565b61036e565b6040519015158152602001610101565b34801561014657600080fd5b50475b604051908152602001610101565b34801561016357600080fd5b5061012a6101723660046107c9565b6103e7565b34801561018357600080fd5b506100d8610192366004610805565b6105fe565b3480156101a357600080fd5b506002546101b19060ff1681565b60405160ff9091168152602001610101565b3480156101cf57600080fd5b506100d86101de36600461079f565b6106a4565b3480156101ef57600080fd5b506101496101fe36600461081e565b60036020526000908152604090205481565b34801561021c57600080fd5b506100f46106e2565b34801561023157600080fd5b5061012a61024036600461079f565b6106ef565b6100d8610285565b34801561025957600080fd5b50610149610268366004610839565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102a490849061089b565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102ed906108b3565b80601f0160208091040260200160405190810160405280929190818152602001828054610319906108b3565b80156103665780601f1061033b57610100808354040283529160200191610366565b820191906000526020600020905b81548152906001019060200180831161034957829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103d69086815260200190565b60405180910390a350600192915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561041957600080fd5b73ffffffffffffffffffffffffffffffffffffffff8416331480159061048f575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105175773ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020548211156104d157600080fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915281208054849290610511908490610907565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061054c908490610907565b909155505073ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260408120805484929061058690849061089b565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516105ec91815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561061a57600080fd5b3360009081526003602052604081208054839290610639908490610907565b9091555050604051339082156108fc029083906000818181858888f1935050505015801561066b573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260036020526040812080548392906106d990849061089b565b90915550505050565b600180546102ed906108b3565b60006106fc3384846103e7565b9392505050565b600060208083528351808285015260005b8181101561073057858101830151858201604001528201610714565b81811115610742576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461079a57600080fd5b919050565b600080604083850312156107b257600080fd5b6107bb83610776565b946020939093013593505050565b6000806000606084860312156107de57600080fd5b6107e784610776565b92506107f560208501610776565b9150604084013590509250925092565b60006020828403121561081757600080fd5b5035919050565b60006020828403121561083057600080fd5b6106fc82610776565b6000806040838503121561084c57600080fd5b61085583610776565b915061086360208401610776565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156108ae576108ae61086c565b500190565b600181811c908216806108c757607f821691505b60208210811415610901577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000828210156109195761091961086c565b50039056fea26469706673582212206ec943fa4e3b70d8fca6c25b6aa26fa18e8f8952ce3bc4d5afcb443bf3097c0564736f6c634300080a003360806040526000600255600060035534801561001a57600080fd5b506111fa8061002a6000396000f3fe60806040526004361061016e5760003560e01c80637a28fb88116100cb578063bdd17e1c1161007f578063dd62ed3e11610059578063dd62ed3e146103ee578063ee7a7c0414610441578063f5eb42dc1461046157600080fd5b8063bdd17e1c146103ad578063cdb9a21c146103c3578063d5002f2e146103d957600080fd5b8063a1903eab116100b0578063a1903eab1461035a578063a457c2d71461036d578063a9059cbb1461038d57600080fd5b80637a28fb88146102f457806395d89b411461031457600080fd5b806323b872dd1161012257806337cfdaca1161010757806337cfdaca1461020d57806339509351146102b457806370a08231146102d457600080fd5b806323b872dd14610278578063313ce5671461029857600080fd5b806318160ddd1161015357806318160ddd1461020d578063192084511461023057806322301f6e1461025057600080fd5b806306fdde0314610185578063095ea7b3146101dd57600080fd5b366101805761017d6000610481565b50005b600080fd5b34801561019157600080fd5b5060408051808201909152601781527f4c6971756964207374616b656420457468657220322e3000000000000000000060208201525b6040516101d49190610f63565b60405180910390f35b3480156101e957600080fd5b506101fd6101f8366004610fff565b610545565b60405190151581526020016101d4565b34801561021957600080fd5b5061022261055b565b6040519081526020016101d4565b34801561023c57600080fd5b5061022261024b366004611029565b61056b565b34801561025c57600080fd5b5061027661026b366004611042565b600391909155600255565b005b34801561028457600080fd5b506101fd610293366004611064565b6105ab565b3480156102a457600080fd5b50604051601281526020016101d4565b3480156102c057600080fd5b506101fd6102cf366004610fff565b610696565b3480156102e057600080fd5b506102226102ef3660046110a0565b6106d9565b34801561030057600080fd5b5061022261030f366004611029565b61070e565b34801561032057600080fd5b5060408051808201909152600581527f737445544800000000000000000000000000000000000000000000000000000060208201526101c7565b6102226103683660046110a0565b61073a565b34801561037957600080fd5b506101fd610388366004610fff565b610745565b34801561039957600080fd5b506101fd6103a8366004610fff565b6107f9565b3480156103b957600080fd5b5061022260035481565b3480156103cf57600080fd5b5061022260025481565b3480156103e557600080fd5b50610222610806565b3480156103fa57600080fd5b506102226104093660046110bb565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b34801561044d57600080fd5b5061027661045c366004610fff565b610811565b34801561046d57600080fd5b5061022261047c3660046110a0565b61081f565b60003334806104f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f5a45524f5f4445504f534954000000000000000000000000000000000000000060448201526064015b60405180910390fd5b60006104fc8261056b565b9050806105065750805b8160036000828254610518919061111d565b909155506105289050838261084a565b61053383838761093b565b61053d8382610992565b949350505050565b60006105523384846109ea565b50600192915050565b600061056660035490565b905090565b60008061057760035490565b9050806105875750600092915050565b6105a48161059e61059760025490565b8690610b52565b90610b5e565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001602090815260408083203384529091528120548281101561066c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f5452414e534645525f414d4f554e545f455843454544535f414c4c4f57414e4360448201527f450000000000000000000000000000000000000000000000000000000000000060648201526084016104e8565b610677858585610b6a565b61068b85336106868487610bef565b6109ea565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916105529185906106869086610bfb565b73ffffffffffffffffffffffffffffffffffffffff81166000908152602081905260408120546107089061070e565b92915050565b60008061071a60025490565b90508061072a5750600092915050565b6105a48161059e61059760035490565b600061070882610481565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156107e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4445435245415345445f414c4c4f57414e43455f42454c4f575f5a45524f000060448201526064016104e8565b6107ef33856106868487610bef565b5060019392505050565b6000610552338484610b6a565b600061056660025490565b61081b8282610c07565b5050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040812054610708565b73ffffffffffffffffffffffffffffffffffffffff82166108c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4d494e545f544f5f5448455f5a45524f5f41444452455353000000000000000060448201526064016104e8565b80600260008282546108d9919061111d565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205461090e9082610bfb565b73ffffffffffffffffffffffffffffffffffffffff90921660009081526020819052604090209190915550565b6040805183815273ffffffffffffffffffffffffffffffffffffffff83811660208301528516917fed8dd430b1e4bba98e943dc5b157cf7b54d9e12916d6c474ff5733a95001d03b910160405180910390a2505050565b73ffffffffffffffffffffffffffffffffffffffff821660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6109d58461070e565b60405190815260200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff8316610a67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f415050524f56455f46524f4d5f5a45524f5f414444524553530000000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff8216610ae4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f415050524f56455f544f5f5a45524f5f4144445245535300000000000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006105a48284611135565b60006105a48284611172565b6000610b758261056b565b9050610b82848483610d64565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610be191815260200190565b60405180910390a350505050565b60006105a482846111ad565b60006105a4828461111d565b73ffffffffffffffffffffffffffffffffffffffff8216610c84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4255524e5f46524f4d5f5448455f5a45524f5f4144445245535300000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205480821115610d14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4255524e5f414d4f554e545f455843454544535f42414c414e4345000000000060448201526064016104e8565b8160026000828254610d2691906111ad565b90915550610d3690508183610bef565b73ffffffffffffffffffffffffffffffffffffffff9093166000908152602081905260409020929092555050565b73ffffffffffffffffffffffffffffffffffffffff8316610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f5452414e534645525f46524f4d5f5448455f5a45524f5f41444452455353000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff8216610e5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f5452414e534645525f544f5f5448455f5a45524f5f414444524553530000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205480821115610eee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5452414e534645525f414d4f554e545f455843454544535f42414c414e43450060448201526064016104e8565b610ef88183610bef565b73ffffffffffffffffffffffffffffffffffffffff8086166000908152602081905260408082209390935590851681522054610f349083610bfb565b73ffffffffffffffffffffffffffffffffffffffff909316600090815260208190526040902092909255505050565b600060208083528351808285015260005b81811015610f9057858101830151858201604001528201610f74565b81811115610fa2576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ffa57600080fd5b919050565b6000806040838503121561101257600080fd5b61101b83610fd6565b946020939093013593505050565b60006020828403121561103b57600080fd5b5035919050565b6000806040838503121561105557600080fd5b50508035926020909101359150565b60008060006060848603121561107957600080fd5b61108284610fd6565b925061109060208501610fd6565b9150604084013590509250925092565b6000602082840312156110b257600080fd5b6105a482610fd6565b600080604083850312156110ce57600080fd5b6110d783610fd6565b91506110e560208401610fd6565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611130576111306110ee565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561116d5761116d6110ee565b500290565b6000826111a8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000828210156111bf576111bf6110ee565b50039056fea2646970667358221220a5b4f31162ba2b8b3424cef84b31ef91d05a825243602b5fdf758ffb49b8246364736f6c634300080a003360a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a003360c06040523480156200001157600080fd5b506040516200170938038062001709833981016040819052620000349162000266565b8351849084906200004d906003906020850190620000f3565b50805162000063906004906020840190620000f3565b505050620000806200007a6200009d60201b60201c565b620000a1565b60ff9091166080526001600160a01b031660a05250620003479050565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b82805462000101906200030a565b90600052602060002090601f01602090048101928262000125576000855562000170565b82601f106200014057805160ff191683800117855562000170565b8280016001018555821562000170579182015b828111156200017057825182559160200191906001019062000153565b506200017e92915062000182565b5090565b5b808211156200017e576000815560010162000183565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c157600080fd5b81516001600160401b0380821115620001de57620001de62000199565b604051601f8301601f19908116603f0116810190828211818310171562000209576200020962000199565b816040528381526020925086838588010111156200022657600080fd5b600091505b838210156200024a57858201830151818301840152908201906200022b565b838211156200025c5760008385830101525b9695505050505050565b600080600080608085870312156200027d57600080fd5b84516001600160401b03808211156200029557600080fd5b620002a388838901620001af565b95506020870151915080821115620002ba57600080fd5b50620002c987828801620001af565b935050604085015160ff81168114620002e157600080fd5b60608601519092506001600160a01b0381168114620002ff57600080fd5b939692955090935050565b600181811c908216806200031f57607f821691505b602082108114156200034157634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05161138e6200037b600039600081816101f70152818161041f0152610600015260006101a2015261138e6000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80636f307dc3116100b257806395d89b4111610081578063a9059cbb11610066578063a9059cbb146102b5578063dd62ed3e146102c8578063f2fde38b1461030e57600080fd5b806395d89b411461029a578063a457c2d7146102a257600080fd5b80636f307dc3146101f257806370a082311461023e578063715018a6146102745780638da5cb5b1461027c57600080fd5b806323b872dd116100ee57806323b872dd14610188578063313ce5671461019b57806339509351146101cc57806340c10f19146101df57600080fd5b806306fdde0314610120578063095ea7b31461013e57806318160ddd146101615780631e9a695014610173575b600080fd5b610128610321565b604051610135919061112d565b60405180910390f35b61015161014c3660046111c9565b6103b3565b6040519015158152602001610135565b6002545b604051908152602001610135565b6101866101813660046111c9565b6103c9565b005b6101516101963660046111f3565b610491565b60405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610135565b6101516101da3660046111c9565b61057c565b6101866101ed3660046111c9565b6105c5565b6102197f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b61016561024c36600461122f565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610186610691565b60055473ffffffffffffffffffffffffffffffffffffffff16610219565b61012861071e565b6101516102b03660046111c9565b61072d565b6101516102c33660046111c9565b610805565b6101656102d6366004611251565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b61018661031c36600461122f565b610812565b60606003805461033090611284565b80601f016020809104026020016040519081016040528092919081815260200182805461035c90611284565b80156103a95780601f1061037e576101008083540402835291602001916103a9565b820191906000526020600020905b81548152906001019060200180831161038c57829003601f168201915b5050505050905090565b60006103c0338484610942565b50600192915050565b6103d33382610af5565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015610468573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048c91906112d8565b505050565b600061049e848484610ce2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6105718533858403610942565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916103c09185906105c0908690611329565b610942565b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906323b872dd906064016020604051808303816000875af115801561065e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068291906112d8565b5061068d8282610f96565b5050565b60055473ffffffffffffffffffffffffffffffffffffffff163314610712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161055b565b61071c60006110b6565b565b60606004805461033090611284565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156107ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161055b565b6107fb3385858403610942565b5060019392505050565b60006103c0338484610ce2565b60055473ffffffffffffffffffffffffffffffffffffffff163314610893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161055b565b73ffffffffffffffffffffffffffffffffffffffff8116610936576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161055b565b61093f816110b6565b50565b73ffffffffffffffffffffffffffffffffffffffff83166109e4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff8216610a87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8216610b98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015610c4e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290610c8a908490611341565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff8216610e28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610ede576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610f22908490611329565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f8891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161055b565b80600260008282546110259190611329565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152602081905260408120805483929061105f908490611329565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208083528351808285015260005b8181101561115a5785810183015185820160400152820161113e565b8181111561116c576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146111c457600080fd5b919050565b600080604083850312156111dc57600080fd5b6111e5836111a0565b946020939093013593505050565b60008060006060848603121561120857600080fd5b611211846111a0565b925061121f602085016111a0565b9150604084013590509250925092565b60006020828403121561124157600080fd5b61124a826111a0565b9392505050565b6000806040838503121561126457600080fd5b61126d836111a0565b915061127b602084016111a0565b90509250929050565b600181811c9082168061129857607f821691505b602082108114156112d2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156112ea57600080fd5b8151801515811461124a57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561133c5761133c6112fa565b500190565b600082821015611353576113536112fa565b50039056fea26469706673582212203a6db30cd3c097921df4156794aa7973eb848711deeb2cffd7c54a9df1fdb0a564736f6c634300080a003360a060405234801561001057600080fd5b506040516106ca3803806106ca83398101604081905261002f9161006c565b60009190915560ff166080526001805460506001600160501b031991821681179092556004805490911690911790554260028190556003556100a2565b6000806040838503121561007f57600080fd5b82519150602083015160ff8116811461009757600080fd5b809150509250929050565b60805161060e6100bc600039600060d3015261060e6000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80639a6fc8f511610081578063d62ada111161005b578063d62ada11146102dc578063f7a30806146102f4578063feaf968c1461030757600080fd5b80639a6fc8f5146101cd578063bd18ad531461023a578063cd653afc1461024d57600080fd5b806354fd4d50116100b257806354fd4d501461012d57806367e8d83d1461013c5780637284e4161461018e57600080fd5b8063313ce567146100ce5780633fd0875f1461010c575b600080fd5b6100f57f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020015b60405180910390f35b6004546a0100000000000000000000900460ff166040516101039190610441565b60405160018152602001610103565b61018c61014a366004610482565b600480549115156c01000000000000000000000000027fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff909216919091179055565b005b604080518082018252600c81527f7072696365206f7261636c6500000000000000000000000000000000000000006020820152905161010391906104ab565b6102036101db36600461053d565b60015460005460025460035460045469ffffffffffffffffffff948516941691939590929450565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610103565b61018c610248366004610558565b61030f565b61018c61025b366004610579565b6001805469ffffffffffffffffffff9586167fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090911617905560029290925560035560048054919092167fffffffffffffffffffffffffffffffffffffffff00ff00000000000000000000909116176b020000000000000000000000179055565b6102e461035f565b6040519015158152602001610103565b61018c6103023660046105bf565b600055565b610203610385565b600480548291907fffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff166b01000000000000000000000083600281111561035757610357610412565b021790555050565b600454600090610380906b010000000000000000000000900460ff166103d6565b905090565b60008060008060006004600c9054906101000a900460ff16156103a757600080fd5b505060015460005460025460035460045469ffffffffffffffffffff9485169893975091955093509190911690565b600060028260028111156103ec576103ec610412565b14156103f757600080fd5b600182600281111561040b5761040b610412565b1492915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016006831061047c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561049457600080fd5b813580151581146104a457600080fd5b9392505050565b600060208083528351808285015260005b818110156104d8578581018301518582016040015282016104bc565b818111156104ea576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803569ffffffffffffffffffff8116811461053857600080fd5b919050565b60006020828403121561054f57600080fd5b6104a48261051e565b60006020828403121561056a57600080fd5b8135600381106104a457600080fd5b6000806000806080858703121561058f57600080fd5b6105988561051e565b935060208501359250604085013591506105b46060860161051e565b905092959194509250565b6000602082840312156105d157600080fd5b503591905056fea264697066735822122014874f7a973b86501c4c1a8be32490fe902c8f088ee234d25f9b2497e19f9e5264736f6c634300080a003360806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d00011790553480156200003a57600080fd5b5060405162031ed638038062031ed68339810160408190526200005d91620015e8565b81816040516200006d9062001595565b604051809103906000f0801580156200008a573d6000803e3d6000fd5b5050600180546001600160a01b0319166001600160a01b038416908117909155604080516325abd85f60e11b81529051634b57b0be916004808201926020929091908290030181865afa158015620000e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200010c91906200162a565b73c4375b7de8af5a38a93548eb8453a498222c4ff26040516200012f90620015a3565b6001600160a01b03928316815291166020820152604001604051809103906000f08015801562000163573d6000803e3d6000fd5b50600380546001600160a01b0319166001600160a01b039290921691821790556040805163de28735960e01b8152905163de287359916004808201926020929091908290030181865afa158015620001bf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e591906200162a565b604051634910832f60e01b81527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526001600160a01b039190911690634910832f90602401600060405180830381600087803b1580156200023d57600080fd5b505af115801562000252573d6000803e3d6000fd5b50505050600360009054906101000a90046001600160a01b03166001600160a01b031663de2873596040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d091906200162a565b60035460405163f2fde38b60e01b81526001600160a01b03918216600482015291169063f2fde38b90602401600060405180830381600087803b1580156200031757600080fd5b505af11580156200032c573d6000803e3d6000fd5b505060035460015460408051636ca42ae360e01b815290516001600160a01b039384169550638874ff1f94509190921691636ca42ae39160048083019260009291908290030181865afa15801562000388573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620003b29190810190620016c5565b6040518263ffffffff1660e01b8152600401620003d09190620017b6565b600060405180830381600087803b158015620003eb57600080fd5b505af115801562000400573d6000803e3d6000fd5b50505050600360009054906101000a90046001600160a01b03166001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000458573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200047e91906200162a565b600280546001600160a01b0319166001600160a01b039290921691821790556040805163120d150d60e31b81529051639068a868916004808201926020929091908290030181865afa158015620004d9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004ff91906200162a565b600480546001600160a01b0319166001600160a01b0392831617815560025460408051631f94a27560e31b81529051919093169263fca513a892818101926020929091908290030181865afa1580156200055d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200058391906200162a565b600880546001600160a01b0319166001600160a01b0392831617905560025460408051630873769560e01b81529051919092169163087376959160048083019260209291908290030181865afa158015620005e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200060891906200162a565b600780546001600160a01b0319166001600160a01b039283161790556002546040805163c513c9bb60e01b81529051919092169163c513c9bb9160048083019260209291908290030181865afa15801562000667573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200068d91906200162a565b600680546001600160a01b0319166001600160a01b039283161790556001546040516367b4264560e01b81529116906367b4264590620006d29084906004016200184d565b602060405180830381865afa158015620006f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200071691906200162a565b600980546001600160a01b0319166001600160a01b0392831617905560035460408051630a55006360e21b815290519190921691632954018c9160048083019260209291908290030181865afa15801562000775573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200079b91906200162a565b6009546040516001600160a01b0390911690620007b890620015b2565b6001600160a01b03928316815291166020820152604001604051809103906000f080158015620007ec573d6000803e3d6000fd5b50600580546001600160a01b0319166001600160a01b039283169081179091556001549091169063eebab8ef90839062000825620011ec565b6200083290600a62001879565b6040518463ffffffff1660e01b815260040162000852939291906200189b565b600060405180830381600087803b1580156200086d57600080fd5b505af115801562000882573d6000803e3d6000fd5b505060065460055460405163d914cd4b60e01b81526001600160a01b0391821660048201529116925063d914cd4b9150602401600060405180830381600087803b158015620008d057600080fd5b505af1158015620008e5573d6000803e3d6000fd5b5050600f80546001600160801b031916670de0b6b3a76400001790555062000911925050620011ec9050565b6200091e90600a62001879565b600f80546001600160801b03908116600160801b9382168402818117938490556040805160a0810182529184169092178152939092041660208301526000919081016200096b84620012ab565b815260006020820181905260409182018190526005549151929350916001600160a01b039091169083908390620009a290620015c0565b620009b093929190620018c5565b604051809103906000f080158015620009cd573d6000803e3d6000fd5b509050806001600160a01b031663c12c21c06040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a0f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a3591906200162a565b600b60006101000a8154816001600160a01b0302191690836001600160a01b03160217905550806001600160a01b0316632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a9a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ac091906200162a565b600c60006101000a8154816001600160a01b0302191690836001600160a01b03160217905550806001600160a01b031663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000b25573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b4b91906200162a565b600d80546001600160a01b0319166001600160a01b03928316179055600654600b5460405163e26b2f6360e01b8152908316600482015291169063e26b2f6390602401600060405180830381600087803b15801562000ba957600080fd5b505af115801562000bbe573d6000803e3d6000fd5b5050600054600554604080516318caf8e360e31b81526001600160a01b039283166004808301919091526024820192909252604481019190915263141bdbdb60e21b60648201526201000090920416925063c657c7189150608401600060405180830381600087803b15801562000c3457600080fd5b505af115801562000c49573d6000803e3d6000fd5b5050600054600c8054604080516318caf8e360e31b81526001600160a01b039283166004820152602481019190915260448101929092526b43726564697446616361646560a01b606483015262010000909204909116925063c657c7189150608401600060405180830381600087803b15801562000cc657600080fd5b505af115801562000cdb573d6000803e3d6000fd5b5050600054600b54604080516318caf8e360e31b81526001600160a01b0392831660048201526024810191909152600d60448201526c21b932b234ba26b0b730b3b2b960991b60648201526201000090920416925063c657c7189150608401600060405180830381600087803b15801562000d5557600080fd5b505af115801562000d6a573d6000803e3d6000fd5b5050600054600d54604080516318caf8e360e31b81526001600160a01b0392831660048201526024810191909152601260448201527121b932b234ba21b7b73334b3bab930ba37b960711b60648201526201000090920416925063c657c7189150608401600060405180830381600087803b15801562000de957600080fd5b505af115801562000dfe573d6000803e3d6000fd5b50506001546001600160a01b0316915063eebab8ef90508473f39fd6e51aad88f6f4ce6ab8827279cfffb9226662000e35620011ec565b6040518463ffffffff1660e01b815260040162000e55939291906200189b565b600060405180830381600087803b15801562000e7057600080fd5b505af115801562000e85573d6000803e3d6000fd5b50506001546001600160a01b0316915063eebab8ef9050847390f79bf6eb2c4f870365e785982e1f101e93b90662000ebc620011ec565b6040518463ffffffff1660e01b815260040162000edc939291906200189b565b600060405180830381600087803b15801562000ef757600080fd5b505af115801562000f0c573d6000803e3d6000fd5b505060005460405163ca669fa760e01b815273f39fd6e51aad88f6f4ce6ab8827279cfffb922666004820152620100009091046001600160a01b0316925063ca669fa79150602401600060405180830381600087803b15801562000f6f57600080fd5b505af115801562000f84573d6000803e3d6000fd5b5050600954600b5460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529116925063095ea7b391506044016020604051808303816000875af115801562000fdf573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001005919062001989565b5060005460405163ca669fa760e01b81527390f79bf6eb2c4f870365e785982e1f101e93b9066004820152620100009091046001600160a01b03169063ca669fa790602401600060405180830381600087803b1580156200106557600080fd5b505af11580156200107a573d6000803e3d6000fd5b5050600954600b5460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529116925063095ea7b391506044016020604051808303816000875af1158015620010d5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010fb919062001989565b5060025460405163f2fde38b60e01b81527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526001600160a01b039091169063f2fde38b90602401600060405180830381600087803b1580156200115657600080fd5b505af11580156200116b573d6000803e3d6000fd5b505060075460405163f2fde38b60e01b81527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b158015620011c957600080fd5b505af1158015620011de573d6000803e3d6000fd5b5050505050505050620019e1565b600180546040516367b4264560e01b81526000926001600160a01b03909216916367b42645916200122191906004016200184d565b602060405180830381865afa1580156200123f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200126591906200162a565b6009546001600160a01b03908116911614620012955762001290670de0b6b3a764000060c862001879565b905090565b62001290670de0b6b3a7640000614e2062001879565b6040805160c08101825260026080820190815261232860a08301528152815180830183526005815261226060208281019190915282015281518083018352606092600092919082019080600387600a8111156200130c576200130c62001814565b146200131a5760036200131d565b60015b600a81111562001331576200133162001814565b815261206c6020918201529082526040805180820190915260048152611c84818301529101529050612454600a6000858281111562001374576200137462001814565b600a81111562001388576200138862001814565b815260208101919091526040908101600020805461ffff9390931661ffff19909316929092179091558051600480825260a0820190925281816020015b6040805180820190915260008082526020820152815260200190600190039081620013c557905050925060005b818110156200158d57828160048110620014105762001410620019ad565b602002015160200151600a6000858460048110620014325762001432620019ad565b602002015151600a8111156200144c576200144c62001814565b600a81111562001460576200146062001814565b815260208101919091526040908101600020805461ffff191661ffff9390931692909217909155805180820190915260015481906001600160a01b03166367b42645868560048110620014b757620014b7620019ad565b6020020151516040516001600160e01b031960e084901b168152620014e091906004016200184d565b602060405180830381865afa158015620014fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200152491906200162a565b6001600160a01b03168152602001848360048110620015475762001547620019ad565b60200201516020015161ffff168152508482815181106200156c576200156c620019ad565b602002602001018190525080806200158490620019c3565b915050620013f2565b505050919050565b6105e6806200bc5283390190565b62011105806200c23883390190565b6110a7806201d33d83390190565b62013af2806201e3e483390190565b6001600160a01b0381168114620015e557600080fd5b50565b60008060408385031215620015fc57600080fd5b82516200160981620015cf565b6020840151909250600b81106200161f57600080fd5b809150509250929050565b6000602082840312156200163d57600080fd5b81516200164a81620015cf565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156200168c576200168c62001651565b60405290565b604051601f8201601f191681016001600160401b0381118282101715620016bd57620016bd62001651565b604052919050565b60006020808385031215620016d957600080fd5b82516001600160401b0380821115620016f157600080fd5b818501915085601f8301126200170657600080fd5b8151818111156200171b576200171b62001651565b6200172b848260051b0162001692565b818152848101925060069190911b8301840190878211156200174c57600080fd5b928401925b81841015620017ab57604084890312156200176c5760008081fd5b6200177662001667565b84516200178381620015cf565b8152848601516200179481620015cf565b818701528352604093909301929184019162001751565b979650505050505050565b602080825282518282018190526000919060409081850190868401855b828110156200180757815180516001600160a01b0390811686529087015116868501529284019290850190600101620017d3565b5091979650505050505050565b634e487b7160e01b600052602160045260246000fd5b600b81106200184957634e487b7160e01b600052602160045260246000fd5b9052565b602081016200185d82846200182a565b92915050565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161562001896576200189662001863565b500290565b60608101620018ab82866200182a565b6001600160a01b0393909316602082015260400152919050565b6001600160a01b0384811682526060602080840182905285516001600160801b039081169285019290925285810151909116608084015260408086015160a085810152805161010086018190526000949392918301919085906101208801905b808310156200195657845180518816835286015161ffff168683015293850193600192909201919083019062001925565b5060608a01516001600160a01b031660c0890152608090990151151560e088015250909401949094525092949350505050565b6000602082840312156200199c57600080fd5b815180151581146200164a57600080fd5b634e487b7160e01b600052603260045260246000fd5b6000600019821415620019da57620019da62001863565b5060010190565b61a26180620019f16000396000f3fe60806040523480156200001157600080fd5b5060043610620001ad5760003560e01c806362eb33e311620000f5578063ba414fa61162000097578063de287359116200006e578063de2873591462000479578063f9aa028a146200049a578063fa7626d414620004bb57600080fd5b8063ba414fa6146200041c578063c12c21c01462000437578063d46b9330146200045857600080fd5b80637785ff5d11620000cc5780637785ff5d14620003da5780639408b63f14620003e45780639dd55b45146200040557600080fd5b806362eb33e314620003775780636b70b04c14620003985780636f307dc314620003b957600080fd5b80632f7a1881116200015f5780635e813a8b11620001365780635e813a8b146200030c5780635f7c9bd0146200032d57806362186905146200034657600080fd5b80632f7a188114620002be578063406c8e2f14620002df57806354cae56e146200030057600080fd5b80630e42bc5d11620001945780630e42bc5d14620002305780632630c12f14620002565780632954018c146200029d57600080fd5b80630bc772da14620001b25780630c75f80614620001f5575b600080fd5b600f54620001cf906fffffffffffffffffffffffffffffffff1681565b6040516fffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6200021c62000206366004620012dd565b600a6020526000908152604090205461ffff1681565b60405161ffff9091168152602001620001ec565b6200024762000241366004620012dd565b620004c9565b604051620001ec919062001307565b600854620002779073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001620001ec565b600254620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600c54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600154620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200030a6200081f565b005b600454620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200033762000b1a565b604051908152602001620001ec565b600f54620001cf9070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681565b600654620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600554620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600954620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200030a62000c0c565b600e54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200030a6200041636600462001398565b62000fd6565b6200042662001149565b6040519015158152602001620001ec565b600b54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600354620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600754620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600d54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600054620004269060ff1681565b6040805160c08101825260026080820190815261232860a08301528152815180830183526005815261226060208281019190915282015281518083018352606092600092919082019080600387600a8111156200052a576200052a620013c7565b14620005385760036200053b565b60015b600a8111156200054f576200054f620013c7565b815261206c6020918201529082526040805180820190915260048152611c84818301529101529050612454600a60008582811115620005925762000592620013c7565b600a811115620005a657620005a6620013c7565b815260208101919091526040908101600020805461ffff939093167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909316929092179091558051600480825260a0820190925281816020015b60408051808201909152600080825260208201528152602001906001900390816200060057905050925060005b8181101562000817578281600481106200064b576200064b620013f6565b602002015160200151600a60008584600481106200066d576200066d620013f6565b602002015151600a811115620006875762000687620013c7565b600a8111156200069b576200069b620013c7565b81526020810191909152604090810160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff93909316929092179091558051808201909152600154819073ffffffffffffffffffffffffffffffffffffffff166367b426458685600481106200071c576200071c620013f6565b6020020151516040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526200075d919060040162001425565b602060405180830381865afa1580156200077b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007a1919062001467565b73ffffffffffffffffffffffffffffffffffffffff168152602001848360048110620007d157620007d1620013f6565b60200201516020015161ffff16815250848281518110620007f657620007f6620013f6565b602002602001018190525080806200080e90620014b6565b9150506200062d565b505050919050565b6000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16906306447d5690602401600060405180830381600087803b158015620008a457600080fd5b505af1158015620008b9573d6000803e3d6000fd5b5050600b5460405173ffffffffffffffffffffffffffffffffffffffff909116925060009150600190620008ed90620012b3565b73ffffffffffffffffffffffffffffffffffffffff938416815292909116602083015215156040820152606001604051809103906000f08015801562000937573d6000803e3d6000fd5b50600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316908117909155600d546040517f526a41e80000000000000000000000000000000000000000000000000000000081526004810192909252600160248301529091169063526a41e890604401600060405180830381600087803b158015620009dc57600080fd5b505af1158015620009f1573d6000803e3d6000fd5b5050600d5473ffffffffffffffffffffffffffffffffffffffff16915063eb9606df905062000a22426001620014f2565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815264ffffffffff90911660048201526024015b600060405180830381600087803b15801562000a7b57600080fd5b505af115801562000a90573d6000803e3d6000fd5b50505050600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562000aff57600080fd5b505af115801562000b14573d6000803e3d6000fd5b50505050565b600180546040517f67b4264500000000000000000000000000000000000000000000000000000000815260009273ffffffffffffffffffffffffffffffffffffffff909216916367b426459162000b75919060040162001425565b602060405180830381865afa15801562000b93573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000bb9919062001467565b60095473ffffffffffffffffffffffffffffffffffffffff90811691161462000bf65762000bf1670de0b6b3a764000060c86200150d565b905090565b62000bf1670de0b6b3a7640000614e206200150d565b60025460405173ffffffffffffffffffffffffffffffffffffffff9091169062000c3690620012c1565b73ffffffffffffffffffffffffffffffffffffffff90911681526060602082018190526008908201527f446567656e4e4654000000000000000000000000000000000000000000000000608082015260a060408201819052600a908201527f476561722d446567656e0000000000000000000000000000000000000000000060c082015260e001604051809103906000f08015801562000cda573d6000803e3d6000fd5b50600e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283161790556000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015262010000909104909116906306447d5690602401600060405180830381600087803b15801562000d8e57600080fd5b505af115801562000da3573d6000803e3d6000fd5b5050600e546040517ffca3b5aa0000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff909116925063fca3b5aa9150602401600060405180830381600087803b15801562000e2757600080fd5b505af115801562000e3c573d6000803e3d6000fd5b5050600b54600e5460405173ffffffffffffffffffffffffffffffffffffffff92831694509116915060009062000e7390620012b3565b73ffffffffffffffffffffffffffffffffffffffff938416815292909116602083015215156040820152606001604051809103906000f08015801562000ebd573d6000803e3d6000fd5b50600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316908117909155600d546040517f526a41e80000000000000000000000000000000000000000000000000000000081526004810192909252600160248301529091169063526a41e890604401600060405180830381600087803b15801562000f6257600080fd5b505af115801562000f77573d6000803e3d6000fd5b5050600e54600c546040517f4610f6ac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015291169250634610f6ac915060240162000a60565b600081600860405162000fe990620012cf565b91825260ff166020820152604001604051809103906000f08015801562001014573d6000803e3d6000fd5b506000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291925062010000900473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b1580156200109c57600080fd5b505af1158015620010b1573d6000803e3d6000fd5b50506008546040517fe8a97a3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528581166024830152909116925063e8a97a3e9150604401600060405180830381600087803b1580156200112b57600080fd5b505af115801562001140573d6000803e3d6000fd5b50505050505050565b60008054610100900460ff16156200116a5750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620012ae5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000008284015282518083038401815260608301909352600092909162001212917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016200158b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526200124c91620015c9565b6000604051808303816000865af19150503d80600081146200128b576040519150601f19603f3d011682016040523d82523d6000602084013e62001290565b606091505b5091505080806020019051810190620012aa9190620015d7565b9150505b919050565b615e9780620015fc83390190565b6126cf806200749383390190565b6106ca8062009b6283390190565b600060208284031215620012f057600080fd5b8135600b81106200130057600080fd5b9392505050565b602080825282518282018190526000919060409081850190868401855b8281101562001365578151805173ffffffffffffffffffffffffffffffffffffffff16855286015161ffff1686850152928401929085019060010162001324565b5091979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff811681146200139557600080fd5b50565b60008060408385031215620013ac57600080fd5b8235620013b98162001372565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60208101600b831062001461577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000602082840312156200147a57600080fd5b8151620013008162001372565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415620014eb57620014eb62001487565b5060010190565b6000821982111562001508576200150862001487565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562001548576200154862001487565b500290565b6000815160005b8181101562001570576020818501810151868301520162001554565b8181111562001580576000828601525b509290920192915050565b7fffffffff00000000000000000000000000000000000000000000000000000000831681526000620015c160048301846200154d565b949350505050565b60006200130082846200154d565b600060208284031215620015ea57600080fd5b815180151581146200130057600080fdfe6101406040523480156200001257600080fd5b5060405162005e9738038062005e97833981016040819052620000359162000198565b60016000556001600160a01b0383166200006257604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038316608081905260408051636f307dc360e01b81529051636f307dc3916004808201926020929091908290030181865afa158015620000ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d39190620001ea565b6001600160a01b031660a0816001600160a01b031681525050826001600160a01b0316634f0e0ef36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200012b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001519190620001ea565b6001600160a01b0390811660c0529190911660e0819052151561010052151561012052506200020f565b80516001600160a01b03811681146200019357600080fd5b919050565b600080600060608486031215620001ae57600080fd5b620001b9846200017b565b9250620001c9602085016200017b565b915060408401518015158114620001df57600080fd5b809150509250925092565b600060208284031215620001fd57600080fd5b62000208826200017b565b9392505050565b60805160a05160c05160e0516101005161012051615a86620004116000396000818161061101528181612fb5015261481f01526000818161031701528181610dde015281816144f901526146e5015260008181610557015281816146a901526147a901526000818161034b0152818161387d015261392d01526000818161047301528181611bfe0152818161274f0152818161280d0152818161366a01526137dd015260008181610665015281816109d801528181610b0301528181610bd501528181610cdd01528181610e6501528181610fe30152818161114e0152818161120e0152818161132e015281816114510152818161162b01528181611708015281816117e0015281816119e501528181611b1201528181611d9501528181611ed5015281816120040152818161216801528181612290015281816123c601528181612568015281816126390152818161266f0152818161293d01528181612a2101528181612a8a01528181612bde01528181612d2601528181612e6801528181612ec2015281816130a10152818161311b015281816131b401528181613341015281816134c10152818161358a0152818161372f01528181613a1a01528181613b2e01528181613dbb015281816142200152818161432801528181614492015281816148e7015281816149e801528181614aae0152614d8f0152615a866000f3fe6080604052600436106102695760003560e01c8063860aefcf11610153578063c7de38a6116100cb578063dfd594651161007f578063eb9606df11610064578063eb9606df1461081e578063f9eaee0d1461083e578063ffd9b9071461085e57600080fd5b8063dfd59465146107de578063e1f21c67146107fe57600080fd5b8063cff0ab96116100b0578063cff0ab96146106ef578063d9ccbec114610783578063dcf65482146107be57600080fd5b8063c7de38a6146106a7578063caa5c23f146106dc57600080fd5b80639c55a05411610122578063b55bb84b11610107578063b55bb84b14610633578063c12c21c014610653578063c690908a1461068757600080fd5b80639c55a054146105df578063b1836d32146105ff57600080fd5b8063860aefcf146104db5780639408b63f146105455780639b67ab30146105795780639be0536a146105bd57600080fd5b80635d91a0e0116101e65780636d19b486116101b55780637071b7c51161019a5780637071b7c51461049557806379c0ef91146104a857806382871ace146104c857600080fd5b80636d19b486146104415780636f307dc31461046157600080fd5b80635d91a0e0146103e85780635f73fbec146103fb578063601d66f61461040e5780636c8f225d1461042e57600080fd5b80633d9287fa1161023d5780635019e20a116102225780635019e20a1461039257806354fd4d50146103b257806359781034146103d557600080fd5b80633d9287fa146103055780634f0e0ef31461033957600080fd5b8062842b571461026e578063256ac915146102905780632a7ba1f7146102c55780632b7c7b11146102e5575b600080fd5b34801561027a57600080fd5b5061028e6102893660046151bf565b61087e565b005b34801561029c57600080fd5b506102b06102ab3660046151f8565b61098e565b60405190151581526020015b60405180910390f35b3480156102d157600080fd5b5061028e6102e0366004615215565b610a61565b3480156102f157600080fd5b5061028e610300366004615215565b610c3b565b34801561031157600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561034557600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102bc565b34801561039e57600080fd5b5061028e6103ad3660046151f8565b610d6a565b3480156103be57600080fd5b506103c7600281565b6040519081526020016102bc565b61028e6103e336600461522e565b61108c565b61028e6103f63660046152bb565b611275565b61028e610409366004615340565b611589565b34801561041a57600080fd5b5061028e6104293660046153d8565b6117de565b61028e61043c36600461541b565b611900565b34801561044d57600080fd5b506102b061045c3660046151f8565b611c31565b34801561046d57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b61028e6104a336600461546e565b611c60565b3480156104b457600080fd5b5061036d6104c3366004615215565b611f3e565b61028e6104d63660046152bb565b611f4b565b3480156104e757600080fd5b5060025461051c906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041682565b604080516fffffffffffffffffffffffffffffffff9384168152929091166020830152016102bc565b34801561055157600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561058557600080fd5b506004546040805167ffffffffffffffff608084901c1681526fffffffffffffffffffffffffffffffff9092166020830152016102bc565b3480156105c957600080fd5b506105d261227d565b6040516102bc91906154e2565b3480156105eb57600080fd5b5061028e6105fa36600461553c565b61228e565b34801561060b57600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561063f57600080fd5b5061028e61064e3660046151f8565b6123c4565b34801561065f57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561069357600080fd5b5061028e6106a23660046151f8565b6124c6565b3480156106b357600080fd5b506106c76106c23660046151f8565b612668565b604080519283526020830191909152016102bc565b61028e6106ea366004615557565b61289b565b3480156106fb57600080fd5b5060015461074e906fffffffffffffffffffffffffffffffff811690700100000000000000000000000000000000810460ff169071010000000000000000000000000000000000900464ffffffffff1683565b604080516fffffffffffffffffffffffffffffffff9094168452911515602084015264ffffffffff16908201526060016102bc565b34801561078f57600080fd5b506102b061079e366004615599565b600360209081526000928352604080842090915290825290205460ff1681565b3480156107ca57600080fd5b5061028e6107d93660046151f8565b612a88565b3480156107ea57600080fd5b506103c76107f93660046151f8565b612b86565b34801561080a57600080fd5b5061028e61081936600461522e565b612c6d565b34801561082a57600080fd5b5061028e6108393660046155c7565b612ec0565b34801561084a57600080fd5b506102b06108593660046151f8565b613057565b34801561086a57600080fd5b5061028e6108793660046155ee565b6131b2565b600260005414156108f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b6002600090815573ffffffffffffffffffffffffffffffffffffffff8316808252600360209081526040808420338086529083529381902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081527f9b3258bc4904fd6426b99843e206c6c7cdb1fd0f040121c25b71dafbb3851ee0910160405180910390a350506001600055565b6040517f055ee9b500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063055ee9b590602401602060405180830381865afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a43919061560b565b73ffffffffffffffffffffffffffffffffffffffff16141592915050565b60026000541415610ace576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610b5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b83919061560b565b9050610b903382846132eb565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906395373018906024015b600060405180830381600087803b158015610c1a57600080fd5b505af1158015610c2e573d6000803e3d6000fd5b5050600160005550505050565b60026000541415610ca8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610d39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5d919061560b565b9050610b90338284613411565b60026000541415610dd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000557f000000000000000000000000000000000000000000000000000000000000000015610e34576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610ec1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee5919061560b565b33600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915290205490915060ff16610f52576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f5d82613583565b5090508015610f98576040517ff713841e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b15801561102757600080fd5b505af115801561103b573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692503391507f93c70cc9715bef0d83edf2095f3595402279d274f402a73ffc17f1bcb19d863d90600090a35050600160005550565b600260005414156110f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611106613875565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063e958b70490602401602060405180830381865afa158015611197573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bb919061560b565b90506111c9848285856139b7565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401600060405180830381600087803b15801561125257600080fd5b505af1158015611266573d6000803e3d6000fd5b50506001600055505050505050565b600260005414156112e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611375573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611399919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166113e8576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806113f483613583565b915091508161142f576040517f1fdd676f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611437613875565b831561144d5761144d85858b8660016000613ae3565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632362a2d88b600185338e8e8e6040518863ffffffff1660e01b81526004016114b59796959493929190615663565b6020604051808303816000875af11580156114d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f891906156bf565b90508873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f7dfecd8419723a9d3954585a30c2a270165d70aafa146c11c1e1b88ae14390648460405161157091815260200190565b60405180910390a4505060016000555050505050505050565b600260005414156115f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ab919061560b565b90506116b5613875565b81156116cb576116cb8383338460016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d89061174a903390600090819083908d908d908d90600401615663565b6020604051808303816000875af1158015611769573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178d91906156bf565b5060405173ffffffffffffffffffffffffffffffffffffffff87169033907f460ad03b1cf79b1d64d3aefa28475f110ab66e84649c52bb41ed796b9b39198190600090a35050600160005550505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611849573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118d1576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff90811670010000000000000000000000000000000002911617600255565b6002600054141561196d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000908155606461198461ffff851687615707565b61198e9190615744565b9050611999816144f7565b6119a2816145e8565b6119ab84614668565b6119b3613875565b6040517f172c48c7000000000000000000000000000000000000000000000000000000008152600060048201819052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a64919061577f565b61ffff169150611a789050816127106157ae565b611a829083615707565b611a8c8288615707565b11611ac3576040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff86811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611b5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b81919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638587604051611bef92919091825261ffff16602082015260400190565b60405180910390a3611c2386827f00000000000000000000000000000000000000000000000000000000000000008a6139b7565b505060016000555050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526006602052604081205415155b92915050565b60026000541415611ccd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611cdb856144f7565b611ce484614668565b611ced856145e8565b600154700100000000000000000000000000000000900460ff1615611d3e576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d46613875565b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff85811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611de0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e04919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638885604051611e7292919091825261ffff16602082015260400190565b60405180910390a38215611e9057611e908484878460006001613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015611f1957600080fd5b505af1158015611f2d573d6000803e3d6000fd5b505060016000555050505050505050565b6000611c5a60058361480f565b60026000541415611fb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa15801561204b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206f919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166120be576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120c661481b565b6120fc576040517f7e52ccb400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061210782612668565b509050612112613875565b82156121285761212884848a8560016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d8906121aa908c90600290879033908f908f908f90600401615663565b6020604051808303816000875af11580156121c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ed91906156bf565b90508773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167ffada13ff2d5e1a1d9da37ad4a4130893b34e3c69c32b17f87ec31fd661b867078460405161226591815260200190565b60405180910390a45050600160005550505050505050565b6060612289600561486b565b905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612381576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561242f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612453919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146124b7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614878565b5050565b60026000541415612533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156125c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e8919061560b565b90506125f4818361489a565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401610c00565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126fc919061560b565b905060008061270b8387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156127a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127c991906156bf565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015291965061271091851690637afb010490604401602060405180830381865afa158015612863573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061288791906156bf565b6128919190615744565b9350505050915091565b60026000541415612908576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129bd919061560b565b90506129c7613875565b8115612a7e576129dc83833384600080613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015612a6557600080fd5b505af1158015612a79573d6000803e3d6000fd5b505050505b5050600160005550565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612af3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b17919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b7b576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614c92565b600080612b9283612668565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152919350600092507f000000000000000000000000000000000000000000000000000000000000000090911690633192195c906024016040805180830381865afa158015612c26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4a91906157c5565b9150819050612c5b61271084615707565b612c659190615744565b949350505050565b60026000541415612cda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063fdd5764590602401602060405180830381865afa158015612d6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d91919061560b565b73ffffffffffffffffffffffffffffffffffffffff161480612dd7575073ffffffffffffffffffffffffffffffffffffffff831660009081526006602052604090205415155b15612e0e576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612eac57600080fd5b505af1158015611c23573d6000803e3d6000fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f4f919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612fb3576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000061300a576040517f50dd11fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805464ffffffffff90921671010000000000000000000000000000000000027fffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffffff909216919091179055565b6040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063f67c5bd090602401602060405180830381865afa1580156130e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061310c91906156bf565b905080158015906131ab5750807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015613184573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a891906156bf565b16155b9392505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561321d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613241919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146132a5576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018054911515700100000000000000000000000000000000027fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff909216919091179055565b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600060448301819052917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561338c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133b091906156bf565b90506133bb816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f98274bf834d179ee08dc0604071b0dc90b54731bd5f725a5a96a39a86bce025a8360405161340391815260200190565b60405180910390a250505050565b61341a816144f7565b600154700100000000000000000000000000000000900460ff161561346b576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600160448301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561350c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061353091906156bf565b905061353b816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f9cac51154cc0d835e2f9c9d1f59a9344588cee107f4203bf58a8c797e3a58c458360405161340391815260200190565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613617919061560b565b90506000806136268387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156136c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136e491906156bf565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529195506000917f00000000000000000000000000000000000000000000000000000000000000001690633192195c906024016040805180830381865afa158015613775573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061379991906157c5565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350600092506127109187169063f9a6503090604401602060405180830381865afa158015613837573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061385b91906156bf565b6138659190615707565b9092109794965093945050505050565b34156139b5577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156138e357600080fd5b505af11580156138f7573d6000803e3d6000fd5b50506040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201523460248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16935063a9059cbb925060440190506020604051808303816000875af115801561398f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139b391906157e9565b505b565b6139c084614cb4565b6040517f830aa74500000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f0000000000000000000000000000000000000000000000000000000000000000169063830aa74590608401600060405180830381600087803b158015613a5e57600080fd5b505af1158015613a72573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fa32435755c235de2976ed44a75a2f85cb01faf0c894f639fe0c32bb9455fea8f83604051613ad591815260200190565b60405180910390a350505050565b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301523060248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b158015613b7257600080fd5b505af1158015613b86573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff871692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a28460005b8181101561441d5736888883818110613bea57613bea615806565b9050602002810190613bfc9190615835565b90506004613c0d6020830183615873565b90501015613c47576040517fe2b0e50600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b30613c5560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16141561421c578415613ca9576040517f5fb9107f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613cb86020830183615873565b613cc1916158d8565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167f59781034000000000000000000000000000000000000000000000000000000001415613e3c5760008080613d1e6020860186615873565b613d2c916004908290615920565b810190613d39919061522e565b925092509250613e34838c73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614613e2b576040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015613e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e26919061560b565b613e2d565b8b5b84846139b7565b505050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2b7c7b11000000000000000000000000000000000000000000000000000000001415613ec757600194506000613e996020840184615873565b613ea7916004908290615920565b810190613eb49190615215565b9050613ec1898983613411565b50614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2a7ba1f7000000000000000000000000000000000000000000000000000000001415613f80578415613f49576040517fc0b0caa800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613f586020840184615873565b613f66916004908290615920565b810190613f739190615215565b9050613ec18989836132eb565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f233a8caa0000000000000000000000000000000000000000000000000000000014156140e457600080613fda6020850185615873565b613fe8916004908290615920565b810190613ff5919061594a565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c8116600483015292945090925082918416906370a0823190602401602060405180830381865afa158015614069573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061408d91906156bf565b10156140dd576040517fa5ac537300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016108e7565b5050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fc690908a00000000000000000000000000000000000000000000000000000000141561416457600061413d6020840184615873565b61414b916004908290615920565b81019061415891906151f8565b9050613ec1888261489a565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f23e27a640000000000000000000000000000000000000000000000000000000014156141e45760006141bd6020840184615873565b6141cb916004908290615920565b8101906141d891906151f8565b9050613ec18882614d42565b6040517f1e9e7e7a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50614414565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff68754361426760208501856151f8565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156142d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142f4919061560b565b73ffffffffffffffffffffffffffffffffffffffff16148061436d575073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001661435560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16145b156143a4576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6144126143b46020830183615873565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506143f69250505060208401846151f8565b73ffffffffffffffffffffffffffffffffffffffff1690614e39565b505b50600101613bcf565b506040517f60c8e8938c9a0c0d88a98d6f1c562ce68077e12bf3edb8047378f2f736cb45b490600090a16040517fe1998cf900000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff86811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b1580156144d657600080fd5b505af11580156144ea573d6000803e3d6000fd5b5050505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006139b3576001546fffffffffffffffffffffffffffffffff9081169081146124c257600454608081901c906fffffffffffffffffffffffffffffffff16600067ffffffffffffffff8316431461456e578461458a565b61458a6fffffffffffffffffffffffffffffffff831686615976565b9050838111156145c6576040517f675f1a5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff81164360801b176004555050505050565b6002546fffffffffffffffffffffffffffffffff16811080614631575060025470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681115b156139b3576040517fce16799400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61467061481b565b156146a7576040517f63fc31c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1615614806577f0000000000000000000000000000000000000000000000000000000000000000801561472657503373ffffffffffffffffffffffffffffffffffffffff821614155b1561475d576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600160248301527f00000000000000000000000000000000000000000000000000000000000000001690639dc29fac90604401600060405180830381600087803b1580156147ed57600080fd5b505af1158015614801573d6000803e3d6000fd5b505050505b6139b381614cb4565b60006131ab8383614e7b565b60007f0000000000000000000000000000000000000000000000000000000000000000801561228957505060015471010000000000000000000000000000000000900464ffffffffff1642101590565b606060006131ab83614ea5565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f01565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561492b57600080fd5b505af115801561493f573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527fdf498aa1c340e992665d6fb4f3be8436d452c45a630cb6d7fab7963da39bac8793500190505b60405180910390a15050565b6040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600091829160019183917f00000000000000000000000000000000000000000000000000000000000000001690638991b2f190602401602060405180830381865afa158015614a2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a5391906156bf565b90505b808211614c895780821615614c7d576040517fe75538c700000000000000000000000000000000000000000000000000000000815260048101839052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e75538c7906024016040805180830381865afa158015614af4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b18919061577f565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529294509092506000918416906370a0823190602401602060405180830381865afa158015614b8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bb191906156bf565b90506001811115614c79576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff8481166024830152600091908b169063f9a6503090604401602060405180830381865afa158015614c33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c5791906156bf565b978801979050614c6b61ffff841682615707565b614c759088615976565b9650505b5050505b600182901b9150614a56565b50509250929050565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f50565b3373ffffffffffffffffffffffffffffffffffffffff821614801590614d0b575033600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16155b156139b3576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b158015614dd357600080fd5b505af1158015614de7573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527f69db9e9764da61b6681b89fb0f5be018506e0342036e56b59c3015a620d60977935001905061498d565b60606131ab83836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250615043565b6000826000018281548110614e9257614e92615806565b9060005260206000200154905092915050565b606081600001805480602002602001604051908101604052809291908181526020018280548015614ef557602002820191906000526020600020905b815481526020019060010190808311614ee1575b50505050509050919050565b6000818152600183016020526040812054614f4857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611c5a565b506000611c5a565b60008181526001830160205260408120548015615039576000614f746001836157ae565b8554909150600090614f88906001906157ae565b9050818114614fed576000866000018281548110614fa857614fa8615806565b9060005260206000200154905080876000018481548110614fcb57614fcb615806565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080614ffe57614ffe61598e565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611c5a565b6000915050611c5a565b6060612c65848460008585843b6150b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108e7565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516150df91906159ed565b60006040518083038185875af1925050503d806000811461511c576040519150601f19603f3d011682016040523d82523d6000602084013e615121565b606091505b509150915061513182828661513c565b979650505050505050565b6060831561514b5750816131ab565b82511561515b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e791906159ff565b73ffffffffffffffffffffffffffffffffffffffff811681146139b357600080fd5b80151581146139b357600080fd5b600080604083850312156151d257600080fd5b82356151dd8161518f565b915060208301356151ed816151b1565b809150509250929050565b60006020828403121561520a57600080fd5b81356131ab8161518f565b60006020828403121561522757600080fd5b5035919050565b60008060006060848603121561524357600080fd5b833561524e8161518f565b9250602084013561525e8161518f565b929592945050506040919091013590565b60008083601f84011261528157600080fd5b50813567ffffffffffffffff81111561529957600080fd5b6020830191508360208260051b85010111156152b457600080fd5b9250929050565b60008060008060008060a087890312156152d457600080fd5b86356152df8161518f565b955060208701356152ef8161518f565b9450604087013593506060870135615306816151b1565b9250608087013567ffffffffffffffff81111561532257600080fd5b61532e89828a0161526f565b979a9699509497509295939492505050565b60008060008060006080868803121561535857600080fd5b85356153638161518f565b945060208601359350604086013561537a816151b1565b9250606086013567ffffffffffffffff81111561539657600080fd5b6153a28882890161526f565b969995985093965092949392505050565b80356fffffffffffffffffffffffffffffffff811681146153d357600080fd5b919050565b600080604083850312156153eb57600080fd5b6153f4836153b3565b9150615402602084016153b3565b90509250929050565b61ffff811681146139b357600080fd5b6000806000806080858703121561543157600080fd5b8435935060208501356154438161518f565b925060408501356154538161540b565b915060608501356154638161540b565b939692955090935050565b60008060008060006080868803121561548657600080fd5b8535945060208601356154988161518f565b9350604086013567ffffffffffffffff8111156154b457600080fd5b6154c08882890161526f565b90945092505060608601356154d48161540b565b809150509295509295909350565b6020808252825182820181905260009190848201906040850190845b8181101561553057835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016154fe565b50909695505050505050565b60006020828403121561554e57600080fd5b6131ab826153b3565b6000806020838503121561556a57600080fd5b823567ffffffffffffffff81111561558157600080fd5b61558d8582860161526f565b90969095509350505050565b600080604083850312156155ac57600080fd5b82356155b78161518f565b915060208301356151ed8161518f565b6000602082840312156155d957600080fd5b813564ffffffffff811681146131ab57600080fd5b60006020828403121561560057600080fd5b81356131ab816151b1565b60006020828403121561561d57600080fd5b81516131ab8161518f565b6003811061565f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b73ffffffffffffffffffffffffffffffffffffffff888116825260e082019061568f602084018a615628565b6040830197909752948616606082015292909416608083015260a082015291151560c09092019190915292915050565b6000602082840312156156d157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561573f5761573f6156d8565b500290565b60008261577a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000806040838503121561579257600080fd5b825161579d8161518f565b60208401519092506151ed8161540b565b6000828210156157c0576157c06156d8565b500390565b600080604083850312156157d857600080fd5b505080516020909101519092909150565b6000602082840312156157fb57600080fd5b81516131ab816151b1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc183360301811261586957600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126158a857600080fd5b83018035915067ffffffffffffffff8211156158c357600080fd5b6020019150368190038213156152b457600080fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156159185780818660040360031b1b83161692505b505092915050565b6000808585111561593057600080fd5b8386111561593d57600080fd5b5050820193919092039150565b6000806040838503121561595d57600080fd5b82356159688161518f565b946020939093013593505050565b60008219821115615989576159896156d8565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60005b838110156159d85781810151838201526020016159c0565b838111156159e7576000848401525b50505050565b600082516158698184602087016159bd565b6020815260008251806020840152615a1e8160408501602087016159bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea2646970667358221220a3f4a705ab580a6ada1e438cd2ee4abc001b62d1d171fce12c41994900fef21664736f6c634300080a003360c06040523480156200001157600080fd5b50604051620026cf380380620026cf833981016040819052620000349162000324565b82828281600090805190602001906200004f92919062000194565b5080516200006590600190602084019062000194565b50506006805460ff19169055506001600160a01b0381166200009a57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000d9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ff9190620003a1565b6001600160a01b03166080816001600160a01b03168152505050826001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000158573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200017e9190620003a1565b6001600160a01b031660a0525062000403915050565b828054620001a290620003c6565b90600052602060002090601f016020900481019282620001c6576000855562000211565b82601f10620001e157805160ff191683800117855562000211565b8280016001018555821562000211579182015b8281111562000211578251825591602001919060010190620001f4565b506200021f92915062000223565b5090565b5b808211156200021f576000815560010162000224565b80516001600160a01b03811681146200025257600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200027f57600080fd5b81516001600160401b03808211156200029c576200029c62000257565b604051601f8301601f19908116603f01168101908282118183101715620002c757620002c762000257565b81604052838152602092508683858801011115620002e457600080fd5b600091505b83821015620003085785820183015181830184015290820190620002e9565b838211156200031a5760008385830101525b9695505050505050565b6000806000606084860312156200033a57600080fd5b62000345846200023a565b60208501519093506001600160401b03808211156200036357600080fd5b62000371878388016200026d565b935060408601519150808211156200038857600080fd5b5062000397868287016200026d565b9150509250925092565b600060208284031215620003b457600080fd5b620003bf826200023a565b9392505050565b600181811c90821680620003db57607f821691505b60208210811415620003fd57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a0516122756200045a6000396000610a9a015260008181610386015281816106db0152818161089101528181610f15015281816110010152818161115b015281816112f401526114f901526122756000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80636352211e116100f9578063a0bcfc7f11610097578063b88d4fde11610071578063b88d4fde146103a8578063c87b56dd146103b6578063e985e9c5146103c9578063fca3b5aa1461041257600080fd5b8063a0bcfc7f14610360578063a22cb46514610373578063a50cf2c81461038157600080fd5b80638456cb59116100d35780638456cb591461032a57806389406ff51461033257806395d89b41146103455780639dc29fac1461034d57600080fd5b80636352211e146102fc5780636c0360eb1461030f57806370a082311461031757600080fd5b80633f4ba83a116101665780634610f6ac116101405780634610f6ac146102b357806354fd4d50146102c6578063576cd2d1146102ce5780635c975abb146102f157600080fd5b80633f4ba83a1461029857806340c10f19146102a057806342842e0e1461028a57600080fd5b8063081812fc116101a2578063081812fc1461024b578063095ea7b31461025e57806318160ddd1461027357806323b872dd1461028a57600080fd5b806301ffc9a7146101c957806306fdde03146101f15780630754617214610206575b600080fd5b6101dc6101d7366004611cc6565b610425565b60405190151581526020015b60405180910390f35b6101f961050a565b6040516101e89190611d38565b6008546102269073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e8565b610226610259366004611d89565b61059c565b61027161026c366004611dc7565b61067b565b005b61027c60075481565b6040519081526020016101e8565b61027161026c366004611df3565b6102716106ad565b6102716102ae366004611dc7565b61079b565b6102716102c1366004611e34565b610863565b61027c600181565b6101dc6102dc366004611e34565b60096020526000908152604090205460ff1681565b60065460ff166101dc565b61022661030a366004611d89565b610cd9565b6101f9610d8b565b61027c610325366004611e34565b610e19565b610271610ee7565b610271610340366004611e34565b610fd3565b6101f9611103565b61027161035b366004611dc7565b611112565b61027161036e366004611e51565b6112c6565b61027161026c366004611ed1565b6102267f000000000000000000000000000000000000000000000000000000000000000081565b61027161026c366004611f39565b6101f96103c4366004611d89565b6113bb565b6101dc6103d7366004612037565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205460ff1690565b610271610420366004611e34565b6114cb565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd0000000000000000000000000000000000000000000000000000000014806104b857507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061050457507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60606000805461051990612065565b80601f016020809104026020016040519081016040528092919081815260200182805461054590612065565b80156105925780601f1061056757610100808354040283529160200191610592565b820191906000526020600020905b81548152906001019060200180831161057557829003601f168201915b5050505050905090565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff16610652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084015b60405180910390fd5b5060009081526004602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b6040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa158015610737573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075b91906120b9565b610791576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107996115f6565b565b60085473ffffffffffffffffffffffffffffffffffffffff1633146107ec576040517f5c2967f500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006107f783610e19565b905060005b82811015610846576000816108278473ffffffffffffffffffffffffffffffffffffffff8816612105565b6108319190612105565b905061083d85826116d7565b506001016107fc565b5081600760008282546108599190612105565b9091555050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156108ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091191906120b9565b610947576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163b610995576040517f9c01f6a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff1663c12c21c06040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610a1c575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610a199181019061211d565b60015b610a52576040517f9c01f6a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f6fbc6f6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192507f000000000000000000000000000000000000000000000000000000000000000090911690636fbc6f6b90602401602060405180830381865afa158015610ae3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0791906120b9565b1580610bad57503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16639408b63f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b94919061211d565b73ffffffffffffffffffffffffffffffffffffffff1614155b80610c5257508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c39919061211d565b73ffffffffffffffffffffffffffffffffffffffff1614155b15610c89576040517f9c01f6a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff16600090815260096020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff1680610504576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e00000000000000000000000000000000000000000000006064820152608401610649565b600a8054610d9890612065565b80601f0160208091040260200160405190810160405280929190818152602001828054610dc490612065565b8015610e115780601f10610de657610100808354040283529160200191610e11565b820191906000526020600020905b815481529060010190602001808311610df457829003601f168201915b505050505081565b600073ffffffffffffffffffffffffffffffffffffffff8216610ebe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152608401610649565b5073ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015610f71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9591906120b9565b610fcb576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610799611899565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561105d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108191906120b9565b6110b7576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff16600090815260096020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b60606001805461051990612065565b3360009081526009602052604090205460ff161580156111dd57506040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156111b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111db91906120b9565b155b15611214576040517f1e0d048500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061121f83610e19565b90508181101561125b576040517f90c9142d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b828110156112b357600060018261128b8573ffffffffffffffffffffffffffffffffffffffff8916612105565b611295919061213a565b61129f919061213a565b90506112aa81611959565b5060010161125e565b508160076000828254610859919061213a565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611350573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137491906120b9565b6113aa576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113b6600a8383611c0f565b505050565b60008181526002602052604090205460609073ffffffffffffffffffffffffffffffffffffffff1661146f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006064820152608401610649565b6000611479611a26565b9050600081511161149957604051806020016040528060008152506114c4565b806114a384611a35565b6040516020016114b4929190612151565b6040516020818303038152906040525b9392505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611555573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157991906120b9565b6115af576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60065460ff16611662576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610649565b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b73ffffffffffffffffffffffffffffffffffffffff8216611754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610649565b60008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff16156117e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610649565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805460019290611816908490612105565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60065460ff1615611906576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610649565b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586116ad3390565b600061196482610cd9565b9050611971600083611b6f565b73ffffffffffffffffffffffffffffffffffffffff811660009081526003602052604081208054600192906119a790849061213a565b909155505060008281526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555183919073ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6060600a805461051990612065565b606081611a7557505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611a9f5780611a8981612180565b9150611a989050600a836121e8565b9150611a79565b60008167ffffffffffffffff811115611aba57611aba611f0a565b6040519080825280601f01601f191660200182016040528015611ae4576020820181803683370190505b5090505b8415611b6757611af960018361213a565b9150611b06600a866121fc565b611b11906030612105565b60f81b818381518110611b2657611b26612210565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611b60600a866121e8565b9450611ae8565b949350505050565b600081815260046020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091558190611bc982610cd9565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b828054611c1b90612065565b90600052602060002090601f016020900481019282611c3d5760008555611ca1565b82601f10611c74578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00823516178555611ca1565b82800160010185558215611ca1579182015b82811115611ca1578235825591602001919060010190611c86565b50611cad929150611cb1565b5090565b5b80821115611cad5760008155600101611cb2565b600060208284031215611cd857600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146114c457600080fd5b60005b83811015611d23578181015183820152602001611d0b565b83811115611d32576000848401525b50505050565b6020815260008251806020840152611d57816040850160208701611d08565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b600060208284031215611d9b57600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff81168114611dc457600080fd5b50565b60008060408385031215611dda57600080fd5b8235611de581611da2565b946020939093013593505050565b600080600060608486031215611e0857600080fd5b8335611e1381611da2565b92506020840135611e2381611da2565b929592945050506040919091013590565b600060208284031215611e4657600080fd5b81356114c481611da2565b60008060208385031215611e6457600080fd5b823567ffffffffffffffff80821115611e7c57600080fd5b818501915085601f830112611e9057600080fd5b813581811115611e9f57600080fd5b866020828501011115611eb157600080fd5b60209290920196919550909350505050565b8015158114611dc457600080fd5b60008060408385031215611ee457600080fd5b8235611eef81611da2565b91506020830135611eff81611ec3565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060008060808587031215611f4f57600080fd5b8435611f5a81611da2565b93506020850135611f6a81611da2565b925060408501359150606085013567ffffffffffffffff80821115611f8e57600080fd5b818701915087601f830112611fa257600080fd5b813581811115611fb457611fb4611f0a565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715611ffa57611ffa611f0a565b816040528281528a602084870101111561201357600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000806040838503121561204a57600080fd5b823561205581611da2565b91506020830135611eff81611da2565b600181811c9082168061207957607f821691505b602082108114156120b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156120cb57600080fd5b81516114c481611ec3565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115612118576121186120d6565b500190565b60006020828403121561212f57600080fd5b81516114c481611da2565b60008282101561214c5761214c6120d6565b500390565b60008351612163818460208801611d08565b835190830190612177818360208801611d08565b01949350505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156121b2576121b26120d6565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826121f7576121f76121b9565b500490565b60008261220b5761220b6121b9565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea2646970667358221220ffdd83a2fc9a158347ca248f021e63fcef3a7985b3deb793f75cd1835b068aab64736f6c634300080a003360a060405234801561001057600080fd5b506040516106ca3803806106ca83398101604081905261002f9161006c565b60009190915560ff166080526001805460506001600160501b031991821681179092556004805490911690911790554260028190556003556100a2565b6000806040838503121561007f57600080fd5b82519150602083015160ff8116811461009757600080fd5b809150509250929050565b60805161060e6100bc600039600060d3015261060e6000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80639a6fc8f511610081578063d62ada111161005b578063d62ada11146102dc578063f7a30806146102f4578063feaf968c1461030757600080fd5b80639a6fc8f5146101cd578063bd18ad531461023a578063cd653afc1461024d57600080fd5b806354fd4d50116100b257806354fd4d501461012d57806367e8d83d1461013c5780637284e4161461018e57600080fd5b8063313ce567146100ce5780633fd0875f1461010c575b600080fd5b6100f57f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020015b60405180910390f35b6004546a0100000000000000000000900460ff166040516101039190610441565b60405160018152602001610103565b61018c61014a366004610482565b600480549115156c01000000000000000000000000027fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff909216919091179055565b005b604080518082018252600c81527f7072696365206f7261636c6500000000000000000000000000000000000000006020820152905161010391906104ab565b6102036101db36600461053d565b60015460005460025460035460045469ffffffffffffffffffff948516941691939590929450565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610103565b61018c610248366004610558565b61030f565b61018c61025b366004610579565b6001805469ffffffffffffffffffff9586167fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090911617905560029290925560035560048054919092167fffffffffffffffffffffffffffffffffffffffff00ff00000000000000000000909116176b020000000000000000000000179055565b6102e461035f565b6040519015158152602001610103565b61018c6103023660046105bf565b600055565b610203610385565b600480548291907fffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff166b01000000000000000000000083600281111561035757610357610412565b021790555050565b600454600090610380906b010000000000000000000000900460ff166103d6565b905090565b60008060008060006004600c9054906101000a900460ff16156103a757600080fd5b505060015460005460025460035460045469ffffffffffffffffffff9485169893975091955093509190911690565b600060028260028111156103ec576103ec610412565b14156103f757600080fd5b600182600281111561040b5761040b610412565b1492915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016006831061047c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561049457600080fd5b813580151581146104a457600080fd5b9392505050565b600060208083528351808285015260005b818110156104d8578581018301518582016040015282016104bc565b818111156104ea576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803569ffffffffffffffffffff8116811461053857600080fd5b919050565b60006020828403121561054f57600080fd5b6104a48261051e565b60006020828403121561056a57600080fd5b8135600381106104a457600080fd5b6000806000806080858703121561058f57600080fd5b6105988561051e565b935060208501359250604085013591506105b46060860161051e565b905092959194509250565b6000602082840312156105d157600080fd5b503591905056fea264697066735822122014874f7a973b86501c4c1a8be32490fe902c8f088ee234d25f9b2497e19f9e5264736f6c634300080a0033a2646970667358221220d8fdaadc825c43ac2783715ebcfe33e7b0ce3a396ac7717d65e4c95e98b6cf7f64736f6c634300080a003360806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d000117905534801561003957600080fd5b50600054604080516318caf8e360e31b815273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660048083019190915260248201929092526044810191909152632aa9a2a960e11b6064820152620100009091046001600160a01b03169063c657c71890608401600060405180830381600087803b1580156100ba57600080fd5b505af11580156100ce573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b81527390f79bf6eb2c4f870365e785982e1f101e93b90660048201526024810191909152600660448201526511949251539160d21b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561014f57600080fd5b505af1158015610163573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b8152733c44cdddb6a900fa2b585dd299e03d12fa4293bc60048201526024810191909152600a6044820152692624a8aaa4a220aa27a960b11b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b1580156101e857600080fd5b505af11580156101fc573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b815273c4375b7de8af5a38a93548eb8453a498222c4ff260048201526024810191909152600c60448201526b44554d425f4144445245535360a01b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561028357600080fd5b505af1158015610297573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b8152739965507d1a55bcc2695c58ba16fb37d819b0a4dc60048201526024810191909152600760448201526620a220a82a22a960c91b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561031957600080fd5b505af115801561032d573d6000803e3d6000fd5b505050506102a6806103406000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063ba414fa61461003b578063fa7626d414610057575b600080fd5b610043610064565b604051901515815260200160405180910390f35b6000546100439060ff1681565b60008054610100900460ff16156100845750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156101bf5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610129917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016101ff565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526101619161023b565b6000604051808303816000865af19150503d806000811461019e576040519150601f19603f3d011682016040523d82523d6000602084013e6101a3565b606091505b50915050808060200190518101906101bb919061024e565b9150505b919050565b6000815160005b818110156101e557602081850181015186830152016101cb565b818111156101f4576000828601525b509290920192915050565b7fffffffff0000000000000000000000000000000000000000000000000000000083168152600061023360048301846101c4565b949350505050565b600061024782846101c4565b9392505050565b60006020828403121561026057600080fd5b8151801515811461024757600080fdfea2646970667358221220293f55a0ef7b60c31a89dbc50e3339c80a8fdb1f9567614b200e97598226671f64736f6c634300080a003360806040523480156200001157600080fd5b506040516201110538038062011105833981016040819052620000349162000811565b6200003f3362000734565b6040516200004d9062000784565b604051809103906000f0801580156200006a573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b039283169081179091556040516310dc138160e31b81529184166004830152906386e09c0890602401600060405180830381600087803b158015620000c457600080fd5b505af1158015620000d9573d6000803e3d6000fd5b50506001546040516301ed651160e41b81526001600160a01b0385811660048301529091169250631ed651109150602401600060405180830381600087803b1580156200012557600080fd5b505af11580156200013a573d6000803e3d6000fd5b505050506040516200014c9062000792565b604051809103906000f08015801562000169573d6000803e3d6000fd5b50600280546001600160a01b0319166001600160a01b039283169081179091556001546040516376aad60560e01b81526004810192909252909116906376aad60590602401600060405180830381600087803b158015620001c957600080fd5b505af1158015620001de573d6000803e3d6000fd5b5050600154604051600093506001600160a01b0390911691506200020290620007a0565b6001600160a01b039091168152602001604051809103906000f0801580156200022f573d6000803e3d6000fd5b5060015460405163338f12b960e21b81526001600160a01b03808416600483015292935091169063ce3c4ae490602401600060405180830381600087803b1580156200027a57600080fd5b505af11580156200028f573d6000803e3d6000fd5b5050600154604051600093506001600160a01b039091169150620002b390620007ae565b6001600160a01b039091168152602001604051809103906000f080158015620002e0573d6000803e3d6000fd5b5060015460405163c5120b3960e01b81526001600160a01b03808416600483015292935091169063c5120b3990602401600060405180830381600087803b1580156200032b57600080fd5b505af115801562000340573d6000803e3d6000fd5b5050600154604051606093506001600160a01b03909116915082906200036690620007bc565b6200037392919062000849565b604051809103906000f08015801562000390573d6000803e3d6000fd5b50600380546001600160a01b0319166001600160a01b0392831690811790915560015460405163530e784f60e01b815260048101929092529091169063530e784f90602401600060405180830381600087803b158015620003f057600080fd5b505af115801562000405573d6000803e3d6000fd5b5050600154604051600093506001600160a01b0390911691506200042990620007ca565b6001600160a01b039091168152602001604051809103906000f08015801562000456573d6000803e3d6000fd5b506001546040516356ee0d3b60e11b81526001600160a01b03808416600483015292935091169063addc1a7690602401600060405180830381600087803b158015620004a157600080fd5b505af1158015620004b6573d6000803e3d6000fd5b5050600154604051600093506001600160a01b039091169150620004da90620007d8565b6001600160a01b039091168152602001604051809103906000f08015801562000507573d6000803e3d6000fd5b506001546040516321da583760e01b81526001600160a01b0380841660048301529293509116906321da583790602401600060405180830381600087803b1580156200055257600080fd5b505af115801562000567573d6000803e3d6000fd5b505050506000306040516200057c90620007e6565b6001600160a01b039091168152602001604051809103906000f080158015620005a9573d6000803e3d6000fd5b50600154604051631795d5b360e31b81526001600160a01b03808416600483015292935091169063bcaead9890602401600060405180830381600087803b158015620005f457600080fd5b505af115801562000609573d6000803e3d6000fd5b505060405163f2fde38b60e01b81523360048201526001600160a01b038416925063f2fde38b9150602401600060405180830381600087803b1580156200064f57600080fd5b505af115801562000664573d6000803e3d6000fd5b505060015460405163f2fde38b60e01b81523360048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b158015620006ae57600080fd5b505af1158015620006c3573d6000803e3d6000fd5b505060025460405163f2fde38b60e01b81523360048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b1580156200070d57600080fd5b505af115801562000722573d6000803e3d6000fd5b505050505050505050505050620008b2565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610fcd80620010dd83390190565b61098c80620020aa83390190565b610f508062002a3683390190565b614da6806200398683390190565b611b45806200872c83390190565b612ced806200a27183390190565b611627806200cf5e83390190565b612b80806200e58583390190565b80516001600160a01b03811681146200080c57600080fd5b919050565b600080604083850312156200082557600080fd5b6200083083620007f4565b91506200084060208401620007f4565b90509250929050565b6001600160a01b0383811682526040602080840182905284518483018190526000938683019290916060870190865b81811015620008a3578551805186168452840151851684840152948301949186019160010162000878565b50909998505050505050505050565b61081b80620008c26000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80638874ff1f1161005b5780638874ff1f146100f55780638da5cb5b14610108578063de28735914610126578063f2fde38b1461014657600080fd5b80632630c12f146100825780632954018c146100cb578063715018a6146100eb575b600080fd5b6003546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6001546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b6100f3610159565b005b6100f3610103366004610658565b6101eb565b60005473ffffffffffffffffffffffffffffffffffffffff166100a2565b6002546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b6100f3610154366004610734565b6103e3565b60005473ffffffffffffffffffffffffffffffffffffffff1633146101df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6101e96000610513565b565b60005473ffffffffffffffffffffffffffffffffffffffff16331461026c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101d6565b60005b815181101561035c57600354825173ffffffffffffffffffffffffffffffffffffffff9091169063e8a97a3e908490849081106102ae576102ae610756565b6020026020010151600001518484815181106102cc576102cc610756565b6020026020010151602001516040518363ffffffff1660e01b815260040161031792919073ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b600060405180830381600087803b15801561033157600080fd5b505af1158015610345573d6000803e3d6000fd5b50505050808061035490610785565b91505061026f565b506002546040517ff2fde38b00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063f2fde38b90602401600060405180830381600087803b1580156103c857600080fd5b505af11580156103dc573d6000803e3d6000fd5b5050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101d6565b73ffffffffffffffffffffffffffffffffffffffff8116610507576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016101d6565b61051081610513565b50565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156105da576105da610588565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561062757610627610588565b604052919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461065357600080fd5b919050565b6000602080838503121561066b57600080fd5b823567ffffffffffffffff8082111561068357600080fd5b818501915085601f83011261069757600080fd5b8135818111156106a9576106a9610588565b6106b7848260051b016105e0565b818152848101925060069190911b8301840190878211156106d757600080fd5b928401925b8184101561072957604084890312156106f55760008081fd5b6106fd6105b7565b6107068561062f565b815261071386860161062f565b81870152835260409390930192918401916106dc565b979650505050505050565b60006020828403121561074657600080fd5b61074f8261062f565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156107de577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea26469706673582212205ee75e57bb635aa49a1758f4ab0b04182a73115bff08f420c56a8ddb433c029364736f6c634300080a0033608060405234801561001057600080fd5b5061001a3361005f565b60405130906f20a2222922a9a9afa82927ab24a222a960811b907fb37614c7d254ea8d16eb81fa11dddaeb266aa8ba4917980859c7740aff30c69190600090a36100af565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610f0f806100be6000396000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c806377532ed9116100e3578063bcaead981161008c578063ce3c4ae411610066578063ce3c4ae414610308578063f2fde38b1461031b578063fca513a81461032e57600080fd5b8063bcaead98146102da578063c5120b39146102ed578063c513c9bb1461030057600080fd5b80639068a868116100bd5780639068a868146102b7578063addc1a76146102bf578063affd9243146102d257600080fd5b806377532ed91461027e57806386e09c08146102865780638da5cb5b1461029957600080fd5b80634c252f9111610145578063699f200f1161011f578063699f200f1461022d578063715018a61461026357806376aad6051461026b57600080fd5b80634c252f91146101fc578063530e784f1461020457806354fd4d501461021757600080fd5b80631ed65110116101765780631ed65110146101cc57806321da5837146101e157806326c74fc3146101f457600080fd5b8063060678c21461019257806308737695146101c4575b600080fd5b61019a610336565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61019a610366565b6101df6101da366004610e10565b610391565b005b6101df6101ef366004610e10565b610444565b61019a6104ef565b61019a61051a565b6101df610212366004610e10565b610545565b61021f600281565b6040519081526020016101bb565b61019a61023b366004610e4d565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6101df6105f0565b6101df610279366004610e10565b61067d565b61019a610728565b6101df610294366004610e10565b610753565b60005473ffffffffffffffffffffffffffffffffffffffff1661019a565b61019a6107fe565b6101df6102cd366004610e10565b610829565b61019a6108d4565b6101df6102e8366004610e10565b6108ff565b6101df6102fb366004610e10565b6109aa565b61019a610a55565b6101df610316366004610e10565b610a80565b6101df610329366004610e10565b610b2b565b61019a610c58565b60006103617f444154415f434f4d50524553534f520000000000000000000000000000000000610c7f565b905090565b60006103617f41434c0000000000000000000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610417576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6104417f54524541535552595f434f4e545241435400000000000000000000000000000082610d1d565b50565b60005473ffffffffffffffffffffffffffffffffffffffff1633146104c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f574554485f47415445574159000000000000000000000000000000000000000082610d1d565b60006103617f54524541535552595f434f4e5452414354000000000000000000000000000000610c7f565b60006103617f574554485f544f4b454e00000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f50524943455f4f5241434c45000000000000000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610671576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b61067b6000610d9b565b565b60005473ffffffffffffffffffffffffffffffffffffffff1633146106fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f41434c000000000000000000000000000000000000000000000000000000000082610d1d565b60006103617f574554485f474154455741590000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146107d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f574554485f544f4b454e0000000000000000000000000000000000000000000082610d1d565b60006103617f4143434f554e545f464143544f52590000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146108aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f4143434f554e545f464143544f5259000000000000000000000000000000000082610d1d565b60006103617f474541525f544f4b454e00000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610980576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f474541525f544f4b454e0000000000000000000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f444154415f434f4d50524553534f52000000000000000000000000000000000082610d1d565b60006103617f434f4e5452414354535f52454749535445520000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610b01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f434f4e5452414354535f5245474953544552000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610bac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b73ffffffffffffffffffffffffffffffffffffffff8116610c4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161040e565b61044181610d9b565b60006103617f50524943455f4f5241434c4500000000000000000000000000000000000000005b6000818152600160209081526040808320548151808301909252600382527f41503100000000000000000000000000000000000000000000000000000000009282019290925273ffffffffffffffffffffffffffffffffffffffff9091169081610d16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040e9190610e66565b5092915050565b60008281526001602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091559051909184917fb37614c7d254ea8d16eb81fa11dddaeb266aa8ba4917980859c7740aff30c6919190a35050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215610e2257600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610e4657600080fd5b9392505050565b600060208284031215610e5f57600080fd5b5035919050565b600060208083528351808285015260005b81811015610e9357858101830151858201604001528201610e77565b81811115610ea5576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea264697066735822122083c228af017c6f5cf8c395cdf7a53276ff56fdd4f4313c39f680ab73bd75417364736f6c634300080a0033608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61090e8061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063732818191161008c578063adce758d11610066578063adce758d14610215578063ba306df114610228578063d4eb5db01461023b578063f2fde38b1461027457600080fd5b806373281819146101b7578063819ad68e146101da5780638da5cb5b146101ed57600080fd5b806354fd4d50116100bd57806354fd4d501461016a5780635f259aba14610180578063715018a6146101af57600080fd5b806335914829146100e45780633a41ec641461011c5780634910832f14610155575b600080fd5b6101076100f236600461089b565b60016020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61010761012a36600461089b565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205460ff1690565b61016861016336600461089b565b610287565b005b610172600181565b604051908152602001610113565b61010761018e36600461089b565b60005473ffffffffffffffffffffffffffffffffffffffff91821691161490565b610168610387565b6101076101c536600461089b565b60026020526000908152604090205460ff1681565b6101686101e836600461089b565b610414565b60005460405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610113565b61016861022336600461089b565b61050c565b61016861023636600461089b565b610601565b61010761024936600461089b565b73ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205460ff1690565b61016861028236600461089b565b6106f6565b60005473ffffffffffffffffffffffffffffffffffffffff16331461030d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909217909155517fae26b1cfe9454ba87274a4e8330b6654684362d0f3d7bbd17f7449a1d38387c69190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610408576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b6104126000610826565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517fd400da6c0c0a894dacc0981730b88af0545d00272ee8fff1437bf560ff245fc49190a250565b60005473ffffffffffffffffffffffffffffffffffffffff16331461058d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f1998397e7203f7baca9d6f41b9e4da6e768daac5caad4234fb9bf5869d2715459190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610682576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526001602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f28b01395b7e25d20552a0c8dc8ecd3b1d4abc986f14dad7885fd45b6fd73c8d99190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811661081a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610304565b61082381610826565b50565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156108ad57600080fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146108d157600080fd5b939250505056fea26469706673582212204712efbfe997070def77285a5b8753bc882b62da2133ce1937ad26cd2b48e49864736f6c634300080a003360a060405234801561001057600080fd5b50604051610f50380380610f5083398101604081905261002f916100d7565b6000805460ff19169055806001600160a01b03811661006157604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa15801561009f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100c391906100d7565b6001600160a01b0316608052506101079050565b6000602082840312156100e957600080fd5b81516001600160a01b038116811461010057600080fd5b9392505050565b608051610e1261013e600039600081816101e2015281816102b20152818161040f0152818161057801526108510152610e126000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80638456cb5911610097578063b4ac686011610066578063b4ac686014610217578063c29277cd1461021f578063d914cd4b14610227578063e26b2f631461023a57600080fd5b80638456cb59146101cd57806394144856146101d5578063a50cf2c8146101dd578063ac4afa381461020457600080fd5b80635b16ebb7116100d35780635b16ebb7146101575780635c975abb1461018a578063673a2a1f146101955780636fbc6f6b146101aa57600080fd5b80631e16e4fc146100fa5780633f4ba83a1461013757806354fd4d5014610141575b600080fd5b61010d610108366004610c97565b61024d565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61013f610284565b005b610149600181565b60405190815260200161012e565b61017a610165366004610cb0565b60026020526000908152604090205460ff1681565b604051901515815260200161012e565b60005460ff1661017a565b61019d610372565b60405161012e9190610ced565b61017a6101b8366004610cb0565b60046020526000908152604090205460ff1681565b61013f6103e1565b61019d6104cd565b61010d7f000000000000000000000000000000000000000000000000000000000000000081565b61010d610212366004610c97565b61053a565b600154610149565b600354610149565b61013f610235366004610cb0565b61054a565b61013f610248366004610cb0565b610823565b6003818154811061025d57600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa15801561030e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103329190610d47565b610368576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610370610af6565b565b606060018054806020026020016040519081016040528092919081815260200182805480156103d757602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116103ac575b5050505050905090565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561046b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048f9190610d47565b6104c5576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610370610bd7565b606060038054806020026020016040519081016040528092919081815260200182805480156103d75760200282019190600052602060002090815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116103ac575050505050905090565b6001818154811061025d57600080fd5b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156105d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f89190610d47565b61062e576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051808201909152600281527f5a30000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff82166106b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b60405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff8116600090815260026020908152604091829020548251808401909352600383527f43523100000000000000000000000000000000000000000000000000000000009183019190915260ff1615610753576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b506001805480820182557fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915560008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909417909355915190917ff816b5143086c89d103a0683286be86c2b741e83ebfa75135aae606e2f5c6e5391a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156108ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d19190610d47565b610907576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051808201909152600281527f5a30000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8216610989576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b5073ffffffffffffffffffffffffffffffffffffffff8116600090815260046020908152604091829020548251808401909352600383527f43523200000000000000000000000000000000000000000000000000000000009183019190915260ff1615610a23576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b506003805460018082019092557fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915560008181526004602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909417909355915190917f58ad3cfc4b6552a53c8c4128ae9b080e14b4378a159280643a62c6f709cee24f91a250565b60005460ff16610b62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016106b0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff1615610c44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016106b0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610bad3390565b600060208284031215610ca957600080fd5b5035919050565b600060208284031215610cc257600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610ce657600080fd5b9392505050565b6020808252825182820181905260009190848201906040850190845b81811015610d3b57835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101610d09565b50909695505050505050565b600060208284031215610d5957600080fd5b81518015158114610ce657600080fd5b600060208083528351808285015260005b81811015610d9657858101830151858201604001528201610d7a565b81811115610da8576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea26469706673582212208f2d91c863db9ab1494a9c5db20e3fddc4b6c779ea3c3621737c105c60d9440a64736f6c634300080a003360e06040523480156200001157600080fd5b5060405162004da638038062004da6833981016040819052620000349162000160565b6001600160a01b0381166200005c57604051635919af9760e11b815260040160405180910390fd5b6001600160a01b03811660808190526040805163c513c9bb60e01b8152905163c513c9bb916004808201926020929091908290030181865afa158015620000a7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cd919062000160565b6001600160a01b031660a0816001600160a01b0316815250506080516001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000127573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200014d919062000160565b6001600160a01b031660c0525062000192565b6000602082840312156200017357600080fd5b81516001600160a01b03811681146200018b57600080fd5b9392505050565b60805160a05160c051614b896200021d6000396000818161018801528181611c4f0152612c5a0152600081816101ed015281816115e201528181611f5f0152818161213f0152818161223f0152818161243801528181612604015281816126bc01528181612788015281816129a501528181613c410152613d000152600061013c0152614b896000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c806354fd4d5011610081578063a80deda31161005b578063a80deda31461020f578063ae093f3f1461022f578063fc9914cb1461024f57600080fd5b806354fd4d50146101bd578063663b8fdb146101d35780637a0c7b21146101e857600080fd5b80632954018c116100b25780632954018c146101375780634b2f336d146101835780634c472fc9146101aa57600080fd5b80630dbd616d146100d957806313d21cdf146101025780631bcd8fc014610122575b600080fd5b6100ec6100e73660046140fc565b610272565b6040516100f9919061430b565b60405180910390f35b61011561011036600461431e565b6114d4565b6040516100f99190614444565b61012a611f59565b6040516100f99190614453565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100f9565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b61015e6101b83660046140fc565b6121f5565b6101c5600281565b6040519081526020016100f9565b6101db612432565b6040516100f991906146ea565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b61022261021d36600461431e565b6126b5565b6040516100f9919061476a565b61024261023d36600461431e565b612a75565b6040516100f991906147dd565b61026261025d3660046140fc565b613bf7565b60405190151581526020016100f9565b61035f604051806102400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160008152602001606081526020016000815260200160008152602001600015158152602001600081526020016000815260200160008152602001600060ff168152602001600081525090565b600080600080600061037088613cf4565b509450945094509450945060008560ff1660011461041d576040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015284169063e958b70490602401602060405180830381865afa1580156103f4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061041891906147f0565b6104ad565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015286169063e958b70490602401602060405180830381865afa158015610489573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ad91906147f0565b60ff8716610200890181905273ffffffffffffffffffffffffffffffffffffffff808b1660208b01528b811660608b015282168952909150600114156109e9578473ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610538573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055c91906147f0565b73ffffffffffffffffffffffffffffffffffffffff90811660808901526040517fc7de38a600000000000000000000000000000000000000000000000000000000815282821660048201529085169063c7de38a690602401602060405180830381865afa1580156105d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f5919061480d565b60c08801526040517fdfd5946500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015285169063dfd5946590602401602060405180830381865afa158015610666573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068a919061480d565b60e08801526040517f3ce0735500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015260006024830152861690633ce0735590604401602060405180830381865afa92505050801561073c575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526107399181019061480d565b60015b6107455761074c565b6101408801525b6040517f3ce0735500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015260016024830152861690633ce0735590604401602060405180830381865afa9250505080156107f9575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526107f69181019061480d565b60015b61080257610809565b6101608801525b60c08701516040517f996329f800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526024820192909252600060448201529086169063996329f89060640160a060405180830381865afa9250505080156108c4575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526108c191810190614826565b60015b6108cd576108da565b505015156101808a015250505b8073ffffffffffffffffffffffffffffffffffffffff16631afbb7a46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610925573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610949919061480d565b6101a08801526040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152851690633192195c90602401602060405180830381865afa1580156109bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109df919061480d565b60a0880152610c26565b8273ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5891906147f0565b73ffffffffffffffffffffffffffffffffffffffff90811660808901526040517fc7de38a600000000000000000000000000000000000000000000000000000000815282821660048201529083169063c7de38a6906024016040805180830381865afa158015610acc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af09190614866565b5060c08801526040517fdfd5946500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015283169063dfd5946590602401602060405180830381865afa158015610b62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b86919061480d565b60e08801526040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152841690633192195c906024016040805180830381865afa158015610bf6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1a9190614866565b60a08901526101a08801525b60008660ff16600114610ca7578373ffffffffffffffffffffffffffffffffffffffff166316f0115b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca291906147f0565b610d16565b8573ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1691906147f0565b90508073ffffffffffffffffffffffffffffffffffffffff166345d31f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d87919061480d565b6101008901526000600160ff891614610e0e578473ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610de5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e09919061480d565b610e7d565b8573ffffffffffffffffffffffffffffffffffffffff166320a05ff76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7d919061480d565b90508760ff16600114610f1f576040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152861690638991b2f190602401602060405180830381865afa158015610ef6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1a919061480d565b610faf565b6040517fb451cecc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015287169063b451cecc90602401602060405180830381865afa158015610f8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610faf919061480d565b6102208a01528067ffffffffffffffff811115610fce57610fce61488a565b60405190808252806020026020018201604052801561103e57816020015b6040805160808101825260008082526020808301829052928201819052606082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181610fec5790505b506101208a015260005b818110156113d657604080516080810182526000808252602082018190529181018290526060810191909152600180831b9060ff8c1614156111c5576040517faf0a650200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018590528a169063af0a650290604401608060405180830381865afa1580156110f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111b91906148b9565b5050602084015273ffffffffffffffffffffffffffffffffffffffff9081168084526040517ff9eaee0d0000000000000000000000000000000000000000000000000000000081526004810191909152908a169063f9eaee0d90602401602060405180830381865afa158015611195573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b9919061490d565b15156040830152611388565b6040517f172c48c70000000000000000000000000000000000000000000000000000000081526004810184905273ffffffffffffffffffffffffffffffffffffffff89169063172c48c7906024016040805180830381865afa15801561122f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112539190614928565b5073ffffffffffffffffffffffffffffffffffffffff9081168084526040517f70a082310000000000000000000000000000000000000000000000000000000081529188166004830152906370a0823190602401602060405180830381865afa1580156112c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e8919061480d565b602083015281516040517ff9eaee0d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529088169063f9eaee0d90602401602060405180830381865afa15801561135c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611380919061490d565b151560408301525b6102208c015181161561139c57600161139f565b60005b151560608301526101208c01518051839190859081106113c1576113c161495e565b60209081029190910101525050600101611048565b508273ffffffffffffffffffffffffffffffffffffffff166317d11a156040518163ffffffff1660e01b8152600401602060405180830381865afa158015611422573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611446919061480d565b896101c00181815250508273ffffffffffffffffffffffffffffffffffffffff16633dc54b406040518163ffffffff1660e01b8152600401602060405180830381865afa15801561149b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bf919061480d565b6101e08a015250969998505050505050505050565b61159b604051806102000160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600060ff1681525090565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015283917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa15801561162b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164f919061490d565b611685576040517fd384b23800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316808352604080517ffe14112d000000000000000000000000000000000000000000000000000000008152905185929163fe14112d9160048083019260209291908290030181865afa1580156116f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611719919061480d565b8360c00181815250508073ffffffffffffffffffffffffffffffffffffffff1663ef8d96036040518163ffffffff1660e01b8152600401602060405180830381865afa15801561176d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611791919061480d565b8360e00181815250508073ffffffffffffffffffffffffffffffffffffffff1663743753596040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611809919061480d565b8360a00181815250508073ffffffffffffffffffffffffffffffffffffffff16634c19386c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561185d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611881919061480d565b836101000181815250508073ffffffffffffffffffffffffffffffffffffffff1663788c6bfe6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fa919061480d565b836101600181815250508073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561194f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611973919061480d565b8360800181815250508073ffffffffffffffffffffffffffffffffffffffff166345d31f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119eb919061480d565b836101400181815250508073ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6491906147f0565b836040019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff166336dda7d56040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0a91906147f0565b836060019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663788c6bfe6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb0919061480d565b836101600181815250508073ffffffffffffffffffffffffffffffffffffffff1663e941fa786040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c29919061480d565b61018084015260408084015173ffffffffffffffffffffffffffffffffffffffff9081167f000000000000000000000000000000000000000000000000000000000000000082161460208087019190915282517f609ae31700000000000000000000000000000000000000000000000000000000815292519184169263609ae31792600480830193928290030181865afa158015611ccb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cef919061480d565b836101c00181815250508073ffffffffffffffffffffffffffffffffffffffff1663dbcb313b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d68919061480d565b836101a00181815250506000836060015173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de7919061480d565b6040517f5427c9380000000000000000000000000000000000000000000000000000000081526004810182905290915060009073ffffffffffffffffffffffffffffffffffffffff841690635427c93890602401602060405180830381865afa158015611e58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7c919061480d565b90508015611ec7576101808501518190611eb890611e9c906127106149bc565b876101000151886101400151611eb291906149d3565b90613fd0565b611ec29190614a3f565b611ece565b8461014001515b856101200181815250508273ffffffffffffffffffffffffffffffffffffffff166354fd4d506040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f47919061480d565b60ff166101e086015250505050919050565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b4ac68606040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fec919061480d565b90508067ffffffffffffffff8111156120075761200761488a565b6040519080825280602002602001820160405280156120ff57816020015b6120ec604051806102000160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600060ff1681525090565b8152602001906001900390816120255790505b50915060005b818110156121f0576040517fac4afa38000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ac4afa3890602401602060405180830381865afa15801561219b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121bf91906147f0565b90506121ca816114d4565b8483815181106121dc576121dc61495e565b602090810291909101015250600101612105565b505090565b6040517f6fbc6f6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015260009184917f00000000000000000000000000000000000000000000000000000000000000001690636fbc6f6b90602401602060405180830381865afa158015612286573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122aa919061490d565b6122e0576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060006122ee87613cf4565b5050935093505092508260ff16600114612397576040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015282169063fdd5764590602401602060405180830381865afa15801561236e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061239291906147f0565b612427565b6040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015283169063fdd5764590602401602060405180830381865afa158015612403573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061242791906147f0565b979650505050505050565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c29277cd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124c5919061480d565b90508067ffffffffffffffff8111156124e0576124e061488a565b6040519080825280602002602001820160405280156125c457816020015b60408051610260810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083018290526101208301819052610140830181905261016083015261018082018190526101a082018190526101c082018190526101e082018190526102008201819052610220820181905261024082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816124fe5790505b50915060005b818110156121f0576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa158015612660573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061268491906147f0565b905061268f81612a75565b8483815181106126a1576126a161495e565b6020908102919091010152506001016125ca565b60606000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c29277cd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612725573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612749919061480d565b905060005b81811015612829576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa1580156127e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061280891906147f0565b90506128148187613bf7565b15612820578360010193505b5060010161274e565b508167ffffffffffffffff8111156128435761284361488a565b60405190808252806020026020018201604052801561296157816020015b61294e604051806102400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160008152602001606081526020016000815260200160008152602001600015158152602001600081526020016000815260200160008152602001600060ff168152602001600081525090565b8152602001906001900390816128615790505b5092506000915060005b81811015612a6d576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa158015612a01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a2591906147f0565b9050612a318187613bf7565b15612a6457612a408187610272565b858581518110612a5257612a5261495e565b60209081029190910101526001909301925b5060010161296b565b505050919050565b604080516102608101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082018390526101208201819052610140820181905261016082015261018081018290526101a081018290526101c081018290526101e08101829052610200810182905261022081018290526102408101829052908080808080612b1b88613cf4565b73ffffffffffffffffffffffffffffffffffffffff8e168d5260ff86166101808e01819052959b50939950919750955093509150600114612bca578273ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ba1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bc591906147f0565b612c39565b8473ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c3991906147f0565b73ffffffffffffffffffffffffffffffffffffffff908116602089018190527f00000000000000000000000000000000000000000000000000000000000000009091161460408801526000600160ff881614612d03578373ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cfe91906147f0565b612d72565b8573ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d7291906147f0565b6040517f2e97ca2100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b8116600483015291925090821690632e97ca2190602401602060405180830381865afa158015612de2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e06919061490d565b15156060890152604080517f45d31f9d000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff8316916345d31f9d9160048083019260209291908290030181865afa158015612e78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e9c919061480d565b8860800181815250508073ffffffffffffffffffffffffffffffffffffffff1663743753596040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ef0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f14919061480d565b610100890152600160ff88161415613017578573ffffffffffffffffffffffffffffffffffffffff16639b2cb5d86040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f95919061480d565b8860a00181815250508573ffffffffffffffffffffffffffffffffffffffff16635f48f3936040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fe9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061300d919061480d565b60c08901526130a5565b8273ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa158015613061573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130859190614a73565b6fffffffffffffffffffffffffffffffff90811660c08b01521660a08901525b60008760ff16600114613126578473ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613121919061480d565b613195565b8573ffffffffffffffffffffffffffffffffffffffff166320a05ff76040518163ffffffff1660e01b8152600401602060405180830381865afa158015613171573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613195919061480d565b90508067ffffffffffffffff8111156131b0576131b061488a565b6040519080825280602002602001820160405280156131d9578160200160208202803683370190505b506101208a01528067ffffffffffffffff8111156131f9576131f961488a565b604051908082528060200260200182016040528015613222578160200160208202803683370190505b506101608a015260005b818110156134c4578860ff16600114156133b4576040517f5e5f2e260000000000000000000000000000000000000000000000000000000081526004810182905260009073ffffffffffffffffffffffffffffffffffffffff891690635e5f2e2690602401602060405180830381865afa1580156132ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132d291906147f0565b9050808b610120015183815181106132ec576132ec61495e565b73ffffffffffffffffffffffffffffffffffffffff92831660209182029290920101526040517f78327438000000000000000000000000000000000000000000000000000000008152828216600482015290891690637832743890602401602060405180830381865afa158015613367573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061338b919061480d565b8b610160015183815181106133a2576133a261495e565b602002602001018181525050506134bc565b6040517f172c48c70000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff87169063172c48c7906024016040805180830381865afa15801561341e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134429190614928565b8061ffff1690508b610120015183815181106134605761346061495e565b602002602001018c6101600151848151811061347e5761347e61495e565b60200260200101828152508273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525050505b60010161322c565b5060008860ff16600114613546578373ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561351d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613541919061480d565b6135b5565b8673ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613591573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135b5919061480d565b90508067ffffffffffffffff8111156135d0576135d061488a565b60405190808252806020026020018201604052801561361557816020015b60408051808201909152600080825260208201528152602001906001900390816135ee5790505b506101408b015260005b818110156139015760408051808201909152600080825260208201528a60ff166001146136da576040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff871690635094cb4f90602401602060405180830381865afa1580156136b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136d591906147f0565b613769565b6040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff8a1690635094cb4f90602401602060405180830381865afa158015613745573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061376991906147f0565b73ffffffffffffffffffffffffffffffffffffffff168152600160ff8c16146138245780516040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529089169063fdd5764590602401602060405180830381865afa1580156137fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061381f91906147f0565b6138b7565b80516040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152908a169063fdd5764590602401602060405180830381865afa158015613893573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138b791906147f0565b73ffffffffffffffffffffffffffffffffffffffff1660208201526101408c01518051829190849081106138ed576138ed61495e565b60209081029190910101525060010161361f565b508860ff166001141561398f578773ffffffffffffffffffffffffffffffffffffffff1663b2c53a6c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613959573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061397d919061480d565b60e08b015260ff6102408b0152613be9565b73ffffffffffffffffffffffffffffffffffffffff85166101a08b01819052604080517f9408b63f0000000000000000000000000000000000000000000000000000000081529051639408b63f916004808201926020929091908290030181865afa158015613a02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a2691906147f0565b8a6101e0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508473ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015613aa9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613acd9190614aa6565b5015156102008c015250604080517f9fd12b77000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff881691639fd12b779160048083019260209291908290030181865afa158015613b42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b66919061480d565b8a6102200181815250508573ffffffffffffffffffffffffffffffffffffffff16638345f26e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bdf9190614af7565b60ff166102408b01525b505050505050505050919050565b6040517f6fbc6f6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015260009184917f00000000000000000000000000000000000000000000000000000000000000001690636fbc6f6b90602401602060405180830381865afa158015613c88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cac919061490d565b613ce2576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613cec8484614023565b949350505050565b600080600080600080867f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636fbc6f6b826040518263ffffffff1660e01b8152600401613d73919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa158015613d90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613db4919061490d565b613dea576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8773ffffffffffffffffffffffffffffffffffffffff166354fd4d506040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e59919061480d565b96508660ff1660011415613ee0578795508573ffffffffffffffffffffffffffffffffffffffff1663f93f515b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613eb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ed991906147f0565b9450613fc6565b8793508373ffffffffffffffffffffffffffffffffffffffff16632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f5291906147f0565b92508373ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fc391906147f0565b91505b5091939550919395565b6000821580613fdd575081155b15613fea5750600061401d565b612710613ff8600282614b1a565b61ffff1661400684866149d3565b6140109190614b3b565b61401a9190614a3f565b90505b92915050565b6040517f055ee9b500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600091829185169063055ee9b590602401602060405180830381865afa158015614094573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140b891906147f0565b73ffffffffffffffffffffffffffffffffffffffff1614159392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146140f957600080fd5b50565b6000806040838503121561410f57600080fd5b823561411a816140d7565b9150602083013561412a816140d7565b809150509250929050565b600081518084526020808501945080840160005b8381101561419f578151805173ffffffffffffffffffffffffffffffffffffffff168852838101518489015260408082015115159089015260609081015115159088015260809096019590820190600101614149565b509495945050505050565b805173ffffffffffffffffffffffffffffffffffffffff168252600061024060208301516141f0602086018273ffffffffffffffffffffffffffffffffffffffff169052565b506040830151614204604086018215159052565b50606083015161422c606086018273ffffffffffffffffffffffffffffffffffffffff169052565b506080830151614254608086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060a083015160a085015260c083015160c085015260e083015160e085015261010080840151818601525061012080840151828287015261429783870182614135565b92505050610140808401518186015250610160808401518186015250610180808401516142c78287018215159052565b50506101a083810151908501526101c080840151908501526101e080840151908501526102008084015160ff16908501526102209283015192909301919091525090565b60208152600061401a60208301846141aa565b60006020828403121561433057600080fd5b813561433b816140d7565b9392505050565b805173ffffffffffffffffffffffffffffffffffffffff168252602081015161436f602084018215159052565b506040810151614397604084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060608101516143bf606084018273ffffffffffffffffffffffffffffffffffffffff169052565b506080818101519083015260a0808201519083015260c0808201519083015260e08082015190830152610100808201519083015261012080820151908301526101408082015190830152610160808201519083015261018080820151908301526101a080820151908301526101c080820151908301526101e09081015160ff16910152565b610200810161401d8284614342565b6020808252825182820181905260009190848201906040850190845b8181101561449657614482838551614342565b92840192610200929092019160010161446f565b50909695505050505050565b600081518084526020808501945080840160005b8381101561419f57815173ffffffffffffffffffffffffffffffffffffffff16875295820195908201906001016144b6565b600081518084526020808501945080840160005b8381101561419f578151805173ffffffffffffffffffffffffffffffffffffffff9081168952908401511683880152604090960195908201906001016144fc565b600081518084526020808501945080840160005b8381101561419f57815187529582019590820190600101614551565b805173ffffffffffffffffffffffffffffffffffffffff168252600061026060208301516145b3602086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060408301516145c7604086018215159052565b5060608301516145db606086018215159052565b506080830151608085015260a083015160a085015260c083015160c085015260e083015160e0850152610100808401518186015250610120808401518282870152614628838701826144a2565b92505050610140808401518583038287015261464483826144e8565b925050506101608084015185830382870152614660838261453d565b92505050610180808401516146798287018260ff169052565b50506101a08381015173ffffffffffffffffffffffffffffffffffffffff908116918601919091526101c0808501511515908601526101e080850151909116908501526102008084015115159085015261022080840151908501526102409283015160ff1692909301919091525090565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561475d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc088860301845261474b85835161456d565b94509285019290850190600101614711565b5092979650505050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561475d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08886030184526147cb8583516141aa565b94509285019290850190600101614791565b60208152600061401a602083018461456d565b60006020828403121561480257600080fd5b815161433b816140d7565b60006020828403121561481f57600080fd5b5051919050565b600080600080600060a0868803121561483e57600080fd5b5050835160208501516040860151606087015160809097015192989197509594509092509050565b6000806040838503121561487957600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080600080608085870312156148cf57600080fd5b84516148da816140d7565b60208601516040870151606090970151919890975090945092505050565b8051801515811461490857600080fd5b919050565b60006020828403121561491f57600080fd5b61401a826148f8565b6000806040838503121561493b57600080fd5b8251614946816140d7565b602084015190925061ffff8116811461412a57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156149ce576149ce61498d565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614a0b57614a0b61498d565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614a4e57614a4e614a10565b500490565b80516fffffffffffffffffffffffffffffffff8116811461490857600080fd5b60008060408385031215614a8657600080fd5b614a8f83614a53565b9150614a9d60208401614a53565b90509250929050565b600080600060608486031215614abb57600080fd5b614ac484614a53565b9250614ad2602085016148f8565b9150604084015164ffffffffff81168114614aec57600080fd5b809150509250925092565b600060208284031215614b0957600080fd5b815160ff8116811461433b57600080fd5b600061ffff80841680614b2f57614b2f614a10565b92169190910492915050565b60008219821115614b4e57614b4e61498d565b50019056fea2646970667358221220d15108d0bec9cc6f3903875dd8412869a3da1b36661bdc780e2e2f0ae3136d2464736f6c634300080a003360a06040523480156200001157600080fd5b5060405162001b4538038062001b45833981016040819052620000349162000608565b6000805460ff19169055816001600160a01b0381166200006757604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cc91906200070a565b6001600160a01b031660805250805160005b818110156200014257620001398382815181106200010057620001006200072f565b6020026020010151600001518483815181106200012157620001216200072f565b6020026020010151602001516200014c60201b60201c565b600101620000de565b5050505062000822565b6001600160a01b03821615806200016a57506001600160a01b038116155b156200018957604051635919af9760e11b815260040160405180910390fd5b620001a8826001600160a01b0316620004ba60201b620006751760201c565b620001d65760405163df4c572d60e01b81526001600160a01b03831660048201526024015b60405180910390fd5b620001f5816001600160a01b0316620004ba60201b620006751760201c565b6200021f5760405163df4c572d60e01b81526001600160a01b0382166004820152602401620001cd565b806001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200027c575060408051601f3d908101601f19168201909252620002799181019062000745565b60015b6200029a576040516367a7cd4360e01b815260040160405180910390fd5b8060ff16600814620002bf576040516367a7cd4360e01b815260040160405180910390fd5b506000816001600160a01b031663d62ada116040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200031f575060408051601f3d908101601f191682019092526200031c918101906200076a565b60015b6200032a576200032d565b90505b6000836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200038c575060408051601f3d908101601f19168201909252620003899181019062000745565b60015b620003aa5760405163528ca31d60e01b815260040160405180910390fd5b60128160ff161115620003d05760405163528ca31d60e01b815260040160405180910390fd5b9050826001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa9250505080156200042f575060408051601f3d908101601f191682019092526200042c91810190620007a6565b60015b6200044d576040516367a7cd4360e01b815260040160405180910390fd5b8662000461576200046185858484620004c0565b5050505050620004748484848462000526565b826001600160a01b0316846001600160a01b03167fe263805b03657ab13064915d0723c5ce14981547e7cba5283f66b9e5d81f6e6e60405160405180910390a350505050565b3b151590565b60008313620004e2576040516356e05d2b60e01b815260040160405180910390fd5b836001600160501b0316816001600160501b0316108062000501575081155b15620005205760405163b1cf675560e01b815260040160405180910390fd5b50505050565b6001600160a01b03831682156200053e57600160a11b175b6200055460ff60a21b60a284901b1682620007fb565b6001600160a01b0390951660009081526001602052604090209490945550505050565b80516001600160a01b03811681146200058f57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715620005cf57620005cf62000594565b60405290565b604051601f8201601f191681016001600160401b038111828210171562000600576200060062000594565b604052919050565b60008060408084860312156200061d57600080fd5b620006288462000577565b602085810151919450906001600160401b03808211156200064857600080fd5b818701915087601f8301126200065d57600080fd5b81518181111562000672576200067262000594565b62000682848260051b01620005d5565b818152848101925060069190911b830184019089821115620006a357600080fd5b928401925b81841015620006fa5785848b031215620006c25760008081fd5b620006cc620005aa565b620006d78562000577565b8152620006e686860162000577565b8187015283529285019291840191620006a8565b8096505050505050509250929050565b6000602082840312156200071d57600080fd5b620007288262000577565b9392505050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156200075857600080fd5b815160ff811681146200072857600080fd5b6000602082840312156200077d57600080fd5b815180151581146200072857600080fd5b80516001600160501b03811681146200058f57600080fd5b600080600080600060a08688031215620007bf57600080fd5b620007ca866200078e565b9450602086015193506040860151925060608601519150620007ef608087016200078e565b90509295509295909350565b600082198211156200081d57634e487b7160e01b600052601160045260246000fd5b500190565b6080516112f262000853600039600081816101b201528181610280015281816103e201526104ff01526112f26000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c80638456cb591161008c578063b66102df11610066578063b66102df146101d4578063e8a97a3e146101e7578063f190e5fa146101fa578063f9a650301461023f57600080fd5b80638456cb591461016d5780639dcb511a14610175578063a50cf2c8146101ad57600080fd5b80635c975abb116100bd5780635c975abb1461011c5780635cecbd0e146101325780637afb01041461015a57600080fd5b80633f4ba83a146100e457806341976e09146100ee57806354fd4d5014610114575b600080fd5b6100ec610252565b005b6101016100fc366004610f28565b610340565b6040519081526020015b60405180910390f35b610101600281565b60005460ff16604051901515815260200161010b565b610145610140366004610f4a565b610352565b6040805192835260208301919091520161010b565b610101610168366004610f90565b610376565b6100ec6103b4565b610188610183366004610f28565b6104a0565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010b565b6101887f000000000000000000000000000000000000000000000000000000000000000081565b6101016101e2366004610fbc565b6104b4565b6100ec6101f5366004610ff8565b6104d1565b61020d610208366004610f28565b6105c3565b6040805173ffffffffffffffffffffffffffffffffffffffff909416845291151560208401529082015260600161010b565b61010161024d366004610f90565b61064d565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156102dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103009190611022565b610336576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033e61067b565b565b600061034b82610761565b5092915050565b60008061035f868661064d565b915061036b848461064d565b905094509492505050565b600080600061038484610761565b90925090508161039582600a611193565b61039f908761119f565b6103a991906111dc565b925050505b92915050565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561043e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104629190611022565b610498576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033e610819565b60006104ab826105c3565b50909392505050565b60006104c96104c3858561064d565b83610376565b949350505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561055b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057f9190611022565b6105b5576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105bf82826108d9565b5050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600160205260408120548190819080610624576040517f4bb8ad8200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b947402000000000000000000000000000000000000000086161515945060a286901c9350915050565b600080600061065b84610761565b909250905061066b81600a611193565b61039f838761119f565b3b151590565b60005460ff166106ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b600080600080610770856105c3565b8095508193508294505050506000806000808573ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156107cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f19190611231565b9450945050935093508461080b5761080b84848484610dd9565b829750505050505050915091565b60005460ff1615610886576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016106e3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586107373390565b73ffffffffffffffffffffffffffffffffffffffff82161580610910575073ffffffffffffffffffffffffffffffffffffffff8116155b15610947576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82163b6109ad576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016106e3565b73ffffffffffffffffffffffffffffffffffffffff81163b610a13576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024016106e3565b8073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610a98575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610a9591810190611281565b60015b610ace576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060ff16600814610b0b576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060008173ffffffffffffffffffffffffffffffffffffffff1663d62ada116040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610b93575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610b9091810190611022565b60015b610b9c57610b9f565b90505b60008373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610c26575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610c2391810190611281565b60015b610c5c576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60128160ff161115610c9a576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b90508273ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa925050508015610d21575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610d1e91810190611231565b60015b610d57576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b86610d6857610d6885858484610dd9565b5050505050610d7984848484610e74565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fe263805b03657ab13064915d0723c5ce14981547e7cba5283f66b9e5d81f6e6e60405160405180910390a350505050565b60008313610e13576040517f56e05d2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8369ffffffffffffffffffff168169ffffffffffffffffffff161080610e37575081155b15610e6e576040517fb1cf675500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b73ffffffffffffffffffffffffffffffffffffffff83168215610ea95774020000000000000000000000000000000000000000175b610ecf7503fc000000000000000000000000000000000000000060a284901b16826112a4565b73ffffffffffffffffffffffffffffffffffffffff90951660009081526001602052604090209490945550505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610f2357600080fd5b919050565b600060208284031215610f3a57600080fd5b610f4382610eff565b9392505050565b60008060008060808587031215610f6057600080fd5b84359350610f7060208601610eff565b925060408501359150610f8560608601610eff565b905092959194509250565b60008060408385031215610fa357600080fd5b82359150610fb360208401610eff565b90509250929050565b600080600060608486031215610fd157600080fd5b83359250610fe160208501610eff565b9150610fef60408501610eff565b90509250925092565b6000806040838503121561100b57600080fd5b61101483610eff565b9150610fb360208401610eff565b60006020828403121561103457600080fd5b81518015158114610f4357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b808511156110cc57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156110b2576110b2611044565b808516156110bf57918102915b93841c9390800290611078565b509250929050565b6000826110e3575060016103ae565b816110f0575060006103ae565b816001811461110657600281146111105761112c565b60019150506103ae565b60ff84111561112157611121611044565b50506001821b6103ae565b5060208310610133831016604e8410600b841016171561114f575081810a6103ae565b6111598383611073565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561118b5761118b611044565b029392505050565b6000610f4383836110d4565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156111d7576111d7611044565b500290565b600082611212577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b805169ffffffffffffffffffff81168114610f2357600080fd5b600080600080600060a0868803121561124957600080fd5b61125286611217565b945060208601519350604086015192506060860151915061127560808701611217565b90509295509295909350565b60006020828403121561129357600080fd5b815160ff81168114610f4357600080fd5b600082198211156112b7576112b7611044565b50019056fea2646970667358221220e7485a2cb5750973f539ca59d2211008b42bb92b6c49605a53f5d9c88c330fb164736f6c634300080a003360e06040523480156200001157600080fd5b5060405162002ced38038062002ced8339810160408190526200003491620004bb565b6000805460ff19169055806001600160a01b0381166200006757604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cc9190620004bb565b6001600160a01b039081166080526001805560408051808201909152600281526105a360f41b602082015291508216620001245760405162461bcd60e51b81526004016200011b9190620004ed565b60405180910390fd5b50806001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000164573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200018a9190620004bb565b6001600160a01b031660c052604051620001a490620004ad565b604051809103906000f080158015620001c1573d6000803e3d6000fd5b506001600160a01b031660a08190526040805163204a7f0760e21b81529051638129fc1c9160048082019260009290919082900301818387803b1580156200020857600080fd5b505af11580156200021d573d6000803e3d6000fd5b50505050620002316200028a60201b60201c565b50600454600380546001600160a01b039092166001600160a01b03199283161790556000805260026020527fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b8054909116905562000545565b6000620002a460a0516200038c60201b6200119b1760201c565b9050806001600160a01b0316638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620002e257600080fd5b505af1158015620002f7573d6000803e3d6000fd5b5050600480546001600160a01b03908116600090815260026020908152604090912080546001600160a01b03199081169388169384179091558354169091179091556200035492506005915083906200043b811b6200127d17901c565b506040516001600160a01b038216907f9f69b6c10f6810213e055b0ba6bc0a4e2603f73c221aad77ea35da819cda7dc390600090a250565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260601b60148201526e5af43d82803e903d91602b57fd5bf360881b60288201526037816000f09150506001600160a01b038116620004365760405162461bcd60e51b815260206004820152601660248201527f455243313136373a20637265617465206661696c65640000000000000000000060448201526064016200011b565b919050565b600062000452836001600160a01b0384166200045b565b90505b92915050565b6000818152600183016020526040812054620004a45750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000455565b50600062000455565b610e788062001e7583390190565b600060208284031215620004ce57600080fd5b81516001600160a01b0381168114620004e657600080fd5b9392505050565b600060208083528351808285015260005b818110156200051c57858101830151858201604001528201620004fe565b818111156200052f576000604083870101525b50601f01601f1916929092016040019392505050565b60805160a05160c0516118cf620005a66000396000818161026a015281816103680152610b7001526000818161020201526110650152600081816102c4015281816105b80152818161099601528181610a840152610e7401526118cf6000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806388f64c54116100cd578063b193976311610081578063d82ecc4811610066578063d82ecc4814610309578063e3ba9ace1461031c578063f23953ab1461032f57600080fd5b8063b1939763146102f9578063b60e85181461030157600080fd5b80638f7dcfa3116100b25780638f7dcfa31461029f578063a50cf2c8146102bf578063a904aab6146102e657600080fd5b806388f64c541461026557806389b77b3e1461028c57600080fd5b806354fd4d50116101245780635da33c5b116101095780635da33c5b146101fd578063765e0159146102245780638456cb591461025d57600080fd5b806354fd4d50146101d05780635c975abb146101e657600080fd5b806313d8c8401461015657806321d18456146101a05780632932472f146101b35780633f4ba83a146101c8575b600080fd5b6004546101769073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6101766101ae366004611651565b610337565b6101c66101c1366004611697565b61058a565b005b6101c6610968565b6101d8600181565b604051908152602001610197565b60005460ff165b6040519015158152602001610197565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101766102323660046116da565b73ffffffffffffffffffffffffffffffffffffffff9081166000908152600260205260409020541690565b6101c6610a56565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101c661029a3660046116da565b610b42565b6003546101769073ffffffffffffffffffffffffffffffffffffffff1681565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101c66102f4366004611697565b610e46565b6101d8610fb8565b6101d8611033565b6101ed6103173660046116da565b611044565b61017661032a3660046116f5565b611051565b6101c661105e565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa1580156103c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103e8919061170e565b6040518060400160405280600281526020017f43500000000000000000000000000000000000000000000000000000000000008152509061045f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b60405180910390fd5b506104686112a6565b6003805473ffffffffffffffffffffffffffffffffffffffff8082166000818152600260205260409081902080549093167fffffffffffffffffffffffff0000000000000000000000000000000000000000948516179094558154909216905590517fc75b5a710000000000000000000000000000000000000000000000000000000081523360048201526024810185905260448101849052819063c75b5a7190606401600060405180830381600087803b15801561052657600080fd5b505af115801561053a573d6000803e3d6000fd5b505060405133925073ffffffffffffffffffffffffffffffffffffffff841691507ff3ede7039176503a8ad1fe7cfaa29475a9dbe0cdcaf04ecf9a5c10570c47b10390600090a390505b92915050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610614573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610638919061170e565b61066e576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106766112a6565b60035473ffffffffffffffffffffffffffffffffffffffff838116911614156106fa576003805473ffffffffffffffffffffffffffffffffffffffff808216600090815260026020526040902080549091167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092558154169055610865565b73ffffffffffffffffffffffffffffffffffffffff838116600090815260026020908152604091829020548251808401909352600383527f4146330000000000000000000000000000000000000000000000000000000000918301919091529091848116911614610798576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b5060045473ffffffffffffffffffffffffffffffffffffffff838116911614156107fd57600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85161790555b73ffffffffffffffffffffffffffffffffffffffff828116600081815260026020526040808220805488861684529183208054929095167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790945591905281541690555b6040517fc75b5a7100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600060248301819052604483015283169063c75b5a7190606401600060405180830381600087803b1580156108dc57600080fd5b505af11580156108f0573d6000803e3d6000fd5b505050506109088260056112dd90919063ffffffff16565b508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f25e267469ba2ae82515be7b3d45df60bf8308343f0809e8cf7319058e2255ce660405160405180910390a3505050565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156109f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a16919061170e565b610a4c576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a546112ff565b565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015610ae0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b04919061170e565b610b3a576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a546113e0565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa158015610bcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf0919061170e565b6040518060400160405280600281526020017f435000000000000000000000000000000000000000000000000000000000000081525090610c5e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b50610c6a6005826114a0565b6040518060400160405280600381526020017f414634000000000000000000000000000000000000000000000000000000000081525090610cd8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b50438173ffffffffffffffffffffffffffffffffffffffff16633dc54b406040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4991906117a3565b14156040518060400160405280600381526020017f414631000000000000000000000000000000000000000000000000000000000081525090610db9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b506004805473ffffffffffffffffffffffffffffffffffffffff90811660009081526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081169487169485179091558454168317909355915190917fced6ab9afc868b3a088366f6631ae20752993b5cce5d5f0534ea5a59fcc57d5691a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610ed0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef4919061170e565b610f2a576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f19a1603900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301528416906319a1603990604401600060405180830381600087803b158015610f9b57600080fd5b505af1158015610faf573d6000803e3d6000fd5b50505050505050565b600354600090819073ffffffffffffffffffffffffffffffffffffffff165b73ffffffffffffffffffffffffffffffffffffffff81161561102d5773ffffffffffffffffffffffffffffffffffffffff9081166000908152600260205260409020541681611025816117eb565b925050610fd7565b50919050565b600061103f60056114cf565b905090565b60006105846005836114a0565b60006105846005836114d9565b60006110897f000000000000000000000000000000000000000000000000000000000000000061119b565b90508073ffffffffffffffffffffffffffffffffffffffff16638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156110d357600080fd5b505af11580156110e7573d6000803e3d6000fd5b50506004805473ffffffffffffffffffffffffffffffffffffffff908116600090815260026020526040902080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811692871692831790915582541617905550611156905060058261127d565b5060405173ffffffffffffffffffffffffffffffffffffffff8216907f9f69b6c10f6810213e055b0ba6bc0a4e2603f73c221aad77ea35da819cda7dc390600090a250565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260601b60148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f091505073ffffffffffffffffffffffffffffffffffffffff8116611278576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f455243313136373a20637265617465206661696c6564000000000000000000006044820152606401610456565b919050565b600061129f8373ffffffffffffffffffffffffffffffffffffffff84166114e5565b9392505050565b60035473ffffffffffffffffffffffffffffffffffffffff90811660009081526002602052604090205416610a5457610a5461105e565b600061129f8373ffffffffffffffffffffffffffffffffffffffff8416611534565b60005460ff1661136b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610456565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff161561144d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610456565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586113b63390565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600183016020526040812054151561129f565b6000610584825490565b600061129f8383611627565b600081815260018301602052604081205461152c57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610584565b506000610584565b6000818152600183016020526040812054801561161d576000611558600183611824565b855490915060009061156c90600190611824565b90508181146115d157600086600001828154811061158c5761158c61183b565b90600052602060002001549050808760000184815481106115af576115af61183b565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806115e2576115e261186a565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610584565b6000915050610584565b600082600001828154811061163e5761163e61183b565b9060005260206000200154905092915050565b6000806040838503121561166457600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff8116811461127857600080fd5b6000806000606084860312156116ac57600080fd5b6116b584611673565b92506116c360208501611673565b91506116d160408501611673565b90509250925092565b6000602082840312156116ec57600080fd5b61129f82611673565b60006020828403121561170757600080fd5b5035919050565b60006020828403121561172057600080fd5b8151801515811461129f57600080fd5b600060208083528351808285015260005b8181101561175d57858101830151858201604001528201611741565b8181111561176f576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b6000602082840312156117b557600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561181d5761181d6117bc565b5060010190565b600082821015611836576118366117bc565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220f1e9c81b8c3af2491c907ee66cf24e1bb76111b821db02df8f98dbb48b5ab5fa64736f6c634300080a0033608060405234801561001057600080fd5b50610e58806100206000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c806354fd4d5011610081578063c45a01551161005b578063c45a0155146101a4578063c75b5a71146101ca578063d1660f99146101dd57600080fd5b806354fd4d501461014f5780638129fc1c14610157578063c12c21c01461015f57600080fd5b80631afbb7a4116100b25780631afbb7a41461011d5780631cff79cd146101265780633dc54b401461014657600080fd5b806316128211146100d957806317d11a15146100ee57806319a160391461010a575b600080fd5b6100ec6100e7366004610b42565b6101f0565b005b6100f760035481565b6040519081526020015b60405180910390f35b6100ec610118366004610b8d565b61024c565b6100f760025481565b610139610134366004610bef565b6102c9565b6040516101019190610d49565b6100f760045481565b6100f7600181565b6100ec610344565b60015461017f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610101565b60005461017f9062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b6100ec6101d8366004610d5c565b610494565b6100ec6101eb366004610d8f565b61053d565b60015473ffffffffffffffffffffffffffffffffffffffff163314610241576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600291909155600355565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1633146102a3576040517fb126b84800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102c573ffffffffffffffffffffffffffffffffffffffff83168260006105b4565b5050565b60015460609073ffffffffffffffffffffffffffffffffffffffff16331461031d576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033d73ffffffffffffffffffffffffffffffffffffffff8416836107b4565b9392505050565b600054610100900460ff1661035f5760005460ff1615610363565b303b155b6103f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600054610100900460ff1615801561043357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000166101011790555b600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16336201000002179055801561049157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b50565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1633146104eb576040517fb126b84800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff949094169390931790925560025560035543600455565b60015473ffffffffffffffffffffffffffffffffffffffff16331461058e576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105af73ffffffffffffffffffffffffffffffffffffffff841683836107f6565b505050565b80158061065457506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015284169063dd62ed3e90604401602060405180830381865afa15801561062e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106529190610dcb565b155b6106e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e63650000000000000000000060648201526084016103eb565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526105af9084907f095ea7b300000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261084c565b606061033d83836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250610958565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526105af9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401610732565b60006108ae826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166109589092919063ffffffff16565b8051909150156105af57808060200190518101906108cc9190610de4565b6105af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016103eb565b6060610967848460008561096f565b949350505050565b606082471015610a01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016103eb565b843b610a69576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016103eb565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051610a929190610e06565b60006040518083038185875af1925050503d8060008114610acf576040519150601f19603f3d011682016040523d82523d6000602084013e610ad4565b606091505b5091509150610ae4828286610aef565b979650505050505050565b60608315610afe57508161033d565b825115610b0e5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103eb9190610d49565b60008060408385031215610b5557600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff81168114610b8857600080fd5b919050565b60008060408385031215610ba057600080fd5b610ba983610b64565b9150610bb760208401610b64565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215610c0257600080fd5b610c0b83610b64565b9150602083013567ffffffffffffffff80821115610c2857600080fd5b818501915085601f830112610c3c57600080fd5b813581811115610c4e57610c4e610bc0565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715610c9457610c94610bc0565b81604052828152886020848701011115610cad57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b83811015610cea578181015183820152602001610cd2565b83811115610cf9576000848401525b50505050565b60008151808452610d17816020860160208601610ccf565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061033d6020830184610cff565b600080600060608486031215610d7157600080fd5b610d7a84610b64565b95602085013595506040909401359392505050565b600080600060608486031215610da457600080fd5b610dad84610b64565b9250610dbb60208501610b64565b9150604084013590509250925092565b600060208284031215610ddd57600080fd5b5051919050565b600060208284031215610df657600080fd5b8151801515811461033d57600080fd5b60008251610e18818460208701610ccf565b919091019291505056fea2646970667358221220448e7046078cd668c09328d857e534e2aab6cdc0e691d3d4f2c8baae8e084b1364736f6c634300080a003360c06040523480156200001157600080fd5b506040516200162738038062001627833981016040819052620000349162000177565b60408051808201909152600281526105a360f41b60208201526001600160a01b038216620000805760405162461bcd60e51b8152600401620000779190620001a9565b60405180910390fd5b50806001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e6919062000177565b6001600160a01b03166080816001600160a01b031681525050806001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200013e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000164919062000177565b6001600160a01b031660a0525062000201565b6000602082840312156200018a57600080fd5b81516001600160a01b0381168114620001a257600080fd5b9392505050565b600060208083528351808285015260005b81811015620001d857858101830151858201604001528201620001ba565b81811115620001eb576000604083870101525b50601f01601f1916929092016040019392505050565b60805160a0516113c2620002656000396000818161021f0152818161036401526106d501526000818160af0152818161012a015281816104420152818161056e015281816107b301528181610aa601528181610b890152610c6701526113c26000f3fe60806040526004361061005e5760003560e01c80635869dba8116100435780635869dba814610199578063deecfbc9146101bb578063e79a4089146101ce57600080fd5b80634f0e0ef31461011857806354fd4d501461017657600080fd5b366101135760408051808201909152600381527f574732000000000000000000000000000000000000000000000000000000000060208201523373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b60405180910390fd5b50005b600080fd5b34801561012457600080fd5b5061014c7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561018257600080fd5b5061018b600181565b60405190815260200161016d565b3480156101a557600080fd5b506101b96101b4366004611263565b6101ee565b005b6101b96101c936600461128f565b61031d565b3480156101da57600080fd5b506101b96101e93660046112e1565b61068e565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201819052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa15801561027b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061029f9190611318565b6040518060400160405280600281526020017f43500000000000000000000000000000000000000000000000000000000000008152509061030d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b506103188383610a77565b505050565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808516600483015284917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa1580156103ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103d19190611318565b6040518060400160405280600281526020017f52500000000000000000000000000000000000000000000000000000000000008152509061043f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e6919061133a565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600381526020017f57473100000000000000000000000000000000000000000000000000000000008152509061056b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156105d457600080fd5b505af11580156105e8573d6000803e3d6000fd5b50505050506105f78434610b3c565b6040517f9aa5d46200000000000000000000000000000000000000000000000000000000815234600482015273ffffffffffffffffffffffffffffffffffffffff848116602483015261ffff84166044830152851690639aa5d46290606401600060405180830381600087803b15801561067057600080fd5b505af1158015610684573d6000803e3d6000fd5b5050505050505050565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808516600483015284917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa15801561071e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107429190611318565b6040518060400160405280600281526020017f5250000000000000000000000000000000000000000000000000000000000000815250906107b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610833573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610857919061133a565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600381526020017f5747310000000000000000000000000000000000000000000000000000000000815250906108dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b506109703330858773ffffffffffffffffffffffffffffffffffffffff166336dda7d56040518163ffffffff1660e01b8152600401602060405180830381865afa15801561092e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610952919061133a565b73ffffffffffffffffffffffffffffffffffffffff16929190610cd4565b6040517f05fe138b0000000000000000000000000000000000000000000000000000000081526004810184905230602482015260009073ffffffffffffffffffffffffffffffffffffffff8616906305fe138b906044016020604051808303816000875af11580156109e6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0a9190611357565b9050610a168382610a77565b8273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f6de63bb986f2779478e384365c03cc2e62f06b453856acca87d5a519ce02664960405160405180910390a35050505050565b6040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632e1a7d4d90602401600060405180830381600087803b158015610aff57600080fd5b505af1158015610b13573d6000803e3d6000fd5b50610b389250505073ffffffffffffffffffffffffffffffffffffffff831682610d6f565b5050565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015282917f00000000000000000000000000000000000000000000000000000000000000009091169063dd62ed3e90604401602060405180830381865afa158015610bd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf69190611357565b1015610b38576040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303816000875af1158015610cb0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103189190611318565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052610d69908590610ec9565b50505050565b80471015610dd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610107565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114610e33576040519150601f19603f3d011682016040523d82523d6000602084013e610e38565b606091505b5050905080610318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610107565b6000610f2b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16610fd59092919063ffffffff16565b8051909150156103185780806020019051810190610f499190611318565b610318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610107565b6060610fe48484600085610fee565b90505b9392505050565b606082471015611080576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610107565b843b6110e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610107565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516111119190611370565b60006040518083038185875af1925050503d806000811461114e576040519150601f19603f3d011682016040523d82523d6000602084013e611153565b606091505b509150915061116382828661116e565b979650505050505050565b6060831561117d575081610fe7565b82511561118d5782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b60005b838110156111dc5781810151838201526020016111c4565b83811115610d695750506000910152565b602081526000825180602084015261120c8160408501602087016111c1565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461126057600080fd5b50565b6000806040838503121561127657600080fd5b82356112818161123e565b946020939093013593505050565b6000806000606084860312156112a457600080fd5b83356112af8161123e565b925060208401356112bf8161123e565b9150604084013561ffff811681146112d657600080fd5b809150509250925092565b6000806000606084860312156112f657600080fd5b83356113018161123e565b92506020840135915060408401356112d68161123e565b60006020828403121561132a57600080fd5b81518015158114610fe757600080fd5b60006020828403121561134c57600080fd5b8151610fe78161123e565b60006020828403121561136957600080fd5b5051919050565b600082516113828184602087016111c1565b919091019291505056fea264697066735822122017fd7fc76e4a1efcf24b78a3417fad7ab9576f0a23aa756ddb211c5e2227aa9564736f6c634300080a003360806040523480156200001157600080fd5b5060405162002b8038038062002b80833981016040819052620000349162000122565b6001600160a01b0381166200008f5760405162461bcd60e51b815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640160405180910390fd5b6001600160a01b03811660008181526001602052604080822080546001600160601b0319166b204fce5e3e2502611000000090811790915590517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91620000f99190815260200190565b60405180910390a350600680546001600160a81b031916336101000260ff191617905562000154565b6000602082840312156200013557600080fd5b81516001600160a01b03811681146200014d57600080fd5b9392505050565b612a1c80620001646000396000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c806370a08231116100f9578063b4b5ea5711610097578063dd62ed3e11610071578063dd62ed3e14610503578063e7a324dc14610555578063f1127ed81461057c578063f2fde38b146105ee57600080fd5b8063b4b5ea57146104ca578063c3cda520146104dd578063d505accf146104f057600080fd5b806395d89b41116100d357806395d89b411461045b5780639742ca4614610497578063a9059cbb146104aa578063b0660c3d146104bd57600080fd5b806370a08231146103c7578063782d6fe11461040b5780637ecebe001461043b57600080fd5b806330adf81f11610166578063481c6a7511610140578063481c6a751461031e578063587cde1e146103435780635c19a95c146103795780636fcfff451461038c57600080fd5b806330adf81f14610298578063313ce567146102bf578063349dc329146102d957600080fd5b806320606b701161019757806320606b70146102545780632185810b1461027b57806323b872dd1461028557600080fd5b806306fdde03146101be578063095ea7b31461021057806318160ddd14610233575b600080fd5b6101fa6040518060400160405280600781526020017f47656172626f780000000000000000000000000000000000000000000000000081525081565b60405161020791906124a3565b60405180910390f35b61022361021e36600461253f565b610601565b6040519015158152602001610207565b6102466b204fce5e3e2502611000000081565b604051908152602001610207565b6102467f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b61028361070d565b005b610223610293366004612569565b6107ee565b6102467f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b6102c7601281565b60405160ff9091168152602001610207565b6007546102f99073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610207565b6006546102f990610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6102f96103513660046125a5565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6102836103873660046125a5565b61098a565b6103b261039a3660046125a5565b60046020526000908152604090205463ffffffff1681565b60405163ffffffff9091168152602001610207565b6102466103d53660046125a5565b73ffffffffffffffffffffffffffffffffffffffff166000908152600160205260409020546bffffffffffffffffffffffff1690565b61041e61041936600461253f565b610997565b6040516bffffffffffffffffffffffff9091168152602001610207565b6102466104493660046125a5565b60056020526000908152604090205481565b6101fa6040518060400160405280600481526020017f474541520000000000000000000000000000000000000000000000000000000081525081565b6102836104a53660046125a5565b610cae565b6102236104b836600461253f565b610e20565b6006546102239060ff1681565b61041e6104d83660046125a5565b610e5c565b6102836104eb3660046125d1565b610efa565b6102836104fe366004612629565b611310565b610246610511366004612693565b73ffffffffffffffffffffffffffffffffffffffff9182166000908152602081815260408083209390941682529190915220546bffffffffffffffffffffffff1690565b6102467fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b6105c561058a3660046126c6565b600360209081526000928352604080842090915290825290205463ffffffff81169064010000000090046bffffffffffffffffffffffff1682565b6040805163ffffffff90931683526bffffffffffffffffffffffff909116602083015201610207565b6102836105fc3660046125a5565b61187a565b6000807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83141561063f57506bffffffffffffffffffffffff610664565b6106618360405180606001604052806025815260200161285260259139611a15565b90505b3360008181526020818152604080832073ffffffffffffffffffffffffffffffffffffffff89168085529083529281902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff871690811790915590519081529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a360019150505b92915050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314610798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e616765720060448201526064015b60405180910390fd5b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f795b0e16c8da9807b0a215f3749bd6dbcc49fc0472183f4e446abb7dcbd9d00790600090a1565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081815260408083203380855290835281842054825160608101909352602580845291936bffffffffffffffffffffffff909116928592610856928892919061285290830139611a15565b90508673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156108a257506bffffffffffffffffffffffff82811614155b156109725760006108cc83836040518060600160405280603d8152602001612974603d9139611a67565b73ffffffffffffffffffffffffffffffffffffffff898116600081815260208181526040808320948a168084529482529182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff87169081179091559151918252939450919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505b61097d878783611ad5565b5060019695505050505050565b6109943382611e9c565b50565b6000438210610a28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f476561723a3a6765745072696f72566f7465733a206e6f74207965742064657460448201527f65726d696e656400000000000000000000000000000000000000000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff831660009081526004602052604090205463ffffffff1680610a63576000915050610707565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604081208491610a95600185612735565b63ffffffff90811682526020820192909252604001600020541611610b1b5773ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812090610ae5600184612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff1691506107079050565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020908152604080832083805290915290205463ffffffff16831015610b63576000915050610707565b600080610b71600184612735565b90505b8163ffffffff168163ffffffff161115610c565760006002610b968484612735565b610ba0919061275a565b610baa9083612735565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260036020908152604080832063ffffffff8581168552908352928190208151808301909252549283168082526401000000009093046bffffffffffffffffffffffff1691810191909152919250871415610c2a576020015194506107079350505050565b805163ffffffff16871115610c4157819350610c4f565b610c4c600183612735565b92505b5050610b74565b5073ffffffffffffffffffffffffffffffffffffffff8516600090815260036020908152604080832063ffffffff909416835292905220546bffffffffffffffffffffffff6401000000009091041691505092915050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314610d34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e6167657200604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff8116610db1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640161078f565b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f2f834d1c8c4b956018fff5faca4d99868ae635487424d9c265c257ccbc698c6a90600090a250565b600080610e45836040518060600160405280602681526020016128a760269139611a15565b9050610e52338583611ad5565b5060019392505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526004602052604081205463ffffffff1680610e94576000610ef3565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812090610ec5600184612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b9392505050565b604080518082018252600781527f47656172626f780000000000000000000000000000000000000000000000000060209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f028ef9f797075f74ac647c65fde04fb0f128c2d59fd40f45732269917642fd4681840152466060820152306080808301919091528351808303909101815260a0820184528051908301207fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60c083015273ffffffffffffffffffffffffffffffffffffffff8a1660e08301526101008201899052610120808301899052845180840390910181526101408301909452835193909201929092207f19010000000000000000000000000000000000000000000000000000000000006101608401526101628301829052610182830181905290916000906101a201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa1580156110d8573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166111a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f476561723a3a64656c656761746542795369673a20696e76616c69642073696760448201527f6e61747572650000000000000000000000000000000000000000000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff811660009081526005602052604081208054916111d7836127a4565b919050558914611269576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f476561723a3a64656c656761746542795369673a20696e76616c6964206e6f6e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161078f565b874211156112f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f476561723a3a64656c656761746542795369673a207369676e6174757265206560448201527f7870697265640000000000000000000000000000000000000000000000000000606482015260840161078f565b611303818b611e9c565b505050505b505050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86141561134d57506bffffffffffffffffffffffff611372565b61136f8660405180606001604052806024815260200161291c60249139611a15565b90505b604080518082018252600781527f47656172626f780000000000000000000000000000000000000000000000000060209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f028ef9f797075f74ac647c65fde04fb0f128c2d59fd40f45732269917642fd4681840152466060820152306080808301919091528351808303909101815260a0909101835280519082012073ffffffffffffffffffffffffffffffffffffffff8b166000908152600590925291812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918c918c918c919086611472836127a4565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810188905260e001604051602081830303815290604052805190602001209050600082826040516020016115199291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff8b169284019290925260608301899052608083018890529092509060019060a0016020604051602081039080840390855afa1580156115a2573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661164a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a7065726d69743a20696e76616c6964207369676e617475726500604482015260640161078f565b8b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146116df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f476561723a3a7065726d69743a20756e617574686f72697a6564000000000000604482015260640161078f565b88421115611749576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a7065726d69743a207369676e6174757265206578706972656400604482015260640161078f565b846000808e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508a73ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258760405161186491906bffffffffffffffffffffffff91909116815260200190565b60405180910390a3505050505050505050505050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314611900576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e6167657200604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff811661197d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640161078f565b60065460405173ffffffffffffffffffffffffffffffffffffffff80841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36006805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b6000816c010000000000000000000000008410611a5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b509192915050565b6000836bffffffffffffffffffffffff16836bffffffffffffffffffffffff1611158290611ac2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b50611acd83856127dd565b949350505050565b60065460ff1680611b025750600654610100900473ffffffffffffffffffffffffffffffffffffffff1633145b80611b24575060075473ffffffffffffffffffffffffffffffffffffffff1633145b611b8a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f476561723a3a7472616e73666572732061726520666f7262696464656e000000604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff8316611c2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603c60248201527f476561723a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260448201527f616e736665722066726f6d20746865207a65726f206164647265737300000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff8216611cd0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f476561723a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260448201527f616e7366657220746f20746865207a65726f2061646472657373000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260016020908152604091829020548251606081019093526036808452611d2d936bffffffffffffffffffffffff90921692859291906129b190830139611a67565b73ffffffffffffffffffffffffffffffffffffffff848116600090815260016020908152604080832080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff968716179055928616825290829020548251606081019093526030808452611dbf949190911692859290919061287790830139611f50565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260409182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff968716179055905193851684529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a373ffffffffffffffffffffffffffffffffffffffff808416600090815260026020526040808220548584168352912054611e9792918216911683611fc1565b505050565b73ffffffffffffffffffffffffffffffffffffffff808316600081815260026020818152604080842080546001845282862054949093528787167fffffffffffffffffffffffff000000000000000000000000000000000000000084168117909155905191909516946bffffffffffffffffffffffff9092169391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4611f4a828483611fc1565b50505050565b600080611f5d8486612802565b9050846bffffffffffffffffffffffff16816bffffffffffffffffffffffff1610158390611fb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b50949350505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561200b57506000816bffffffffffffffffffffffff16115b15611e975773ffffffffffffffffffffffffffffffffffffffff8316156120fd5773ffffffffffffffffffffffffffffffffffffffff831660009081526004602052604081205463ffffffff1690816120655760006120c4565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812090612096600185612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b905060006120eb82856040518060600160405280602881526020016128cd60289139611a67565b90506120f9868484846121e2565b5050505b73ffffffffffffffffffffffffffffffffffffffff821615611e975773ffffffffffffffffffffffffffffffffffffffff821660009081526004602052604081205463ffffffff1690816121525760006121b1565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812090612183600185612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b905060006121d882856040518060600160405280602781526020016128f560279139611f50565b9050611308858484845b60006122064360405180606001604052806034815260200161294060349139612465565b905060008463ffffffff1611801561226d575073ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812063ffffffff831691612251600188612735565b63ffffffff908116825260208201929092526040016000205416145b156123035773ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812083916122a4600188612735565b63ffffffff168152602081019190915260400160002080546bffffffffffffffffffffffff92909216640100000000027fffffffffffffffffffffffffffffffff000000000000000000000000ffffffff9092169190911790556123fe565b60408051808201825263ffffffff80841682526bffffffffffffffffffffffff808616602080850191825273ffffffffffffffffffffffffffffffffffffffff8b166000908152600382528681208b8616825290915294909420925183549451909116640100000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009094169116179190911790556123a5846001612832565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260046020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff929092169190911790555b604080516bffffffffffffffffffffffff80861682528416602082015273ffffffffffffffffffffffffffffffffffffffff8716917fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724910160405180910390a25050505050565b6000816401000000008410611a5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91905b600060208083528351808285015260005b818110156124d0578581018301518582016040015282016124b4565b818111156124e2576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461253a57600080fd5b919050565b6000806040838503121561255257600080fd5b61255b83612516565b946020939093013593505050565b60008060006060848603121561257e57600080fd5b61258784612516565b925061259560208501612516565b9150604084013590509250925092565b6000602082840312156125b757600080fd5b610ef382612516565b803560ff8116811461253a57600080fd5b60008060008060008060c087890312156125ea57600080fd5b6125f387612516565b9550602087013594506040870135935061260f606088016125c0565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a03121561264457600080fd5b61264d88612516565b965061265b60208901612516565b95506040880135945060608801359350612677608089016125c0565b925060a0880135915060c0880135905092959891949750929550565b600080604083850312156126a657600080fd5b6126af83612516565b91506126bd60208401612516565b90509250929050565b600080604083850312156126d957600080fd5b6126e283612516565b9150602083013563ffffffff811681146126fb57600080fd5b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600063ffffffff8381169083168181101561275257612752612706565b039392505050565b600063ffffffff80841680612798577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156127d6576127d6612706565b5060010190565b60006bffffffffffffffffffffffff8381169083168181101561275257612752612706565b60006bffffffffffffffffffffffff80831681851680830382111561282957612829612706565b01949350505050565b600063ffffffff8083168185168083038211156128295761282961270656fe476561723a3a617070726f76653a20616d6f756e7420657863656564732039362062697473476561723a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e74206f766572666c6f7773476561723a3a7472616e736665723a20616d6f756e7420657863656564732039362062697473476561723a3a5f6d6f7665566f7465733a20766f746520616d6f756e7420756e646572666c6f7773476561723a3a5f6d6f7665566f7465733a20766f746520616d6f756e74206f766572666c6f7773476561723a3a7065726d69743a20616d6f756e7420657863656564732039362062697473476561723a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d62657220657863656564732033322062697473476561723a3a7472616e7366657246726f6d3a207472616e7366657220616d6f756e742065786365656473207370656e64657220616c6c6f77616e6365476561723a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e7420657863656564732062616c616e6365a26469706673582212201b84fd7789a35c022f692420863210a30e82d2405659f5a28275d433fa53467f64736f6c634300080a003360806040526016805460ff1916905534801561001a57600080fd5b506040516110a73803806110a7833981016040819052610039916100b6565b600080546001600160a01b038085166001600160a01b0319928316179092556003805492841692909116919091179055610080600a6b033b2e3c9fd0803ce80000006100e9565b60075550506b033b2e3c9fd0803ce800000060155561010b565b80516001600160a01b03811681146100b157600080fd5b919050565b600080604083850312156100c957600080fd5b6100d28361009a565b91506100e06020840161009a565b90509250929050565b60008261010657634e487b7160e01b600052601260045260246000fd5b500490565b610f8d8061011a6000396000f3fe608060405234801561001057600080fd5b50600436106102e95760003560e01c806367c99d5811610191578063c5f956af116100e3578063dbcb313b11610097578063f11a648711610071578063f11a648714610320578063f3fdb15a146105f1578063fe14112d1461061157600080fd5b8063dbcb313b146105d6578063e941fa78146105df578063ef8d9603146105e857600080fd5b8063cb3905e1116100c8578063cb3905e1146105c4578063cf33d95514610320578063d0efe753146105cd57600080fd5b8063c5f956af14610588578063ca9505e4146105a857600080fd5b80639aa5d46211610145578063b6ac642a1161011f578063b6ac642a14610567578063bb04b19314610567578063bf28068b1461057557600080fd5b80639aa5d46214610544578063a4e8273e14610557578063b3554a0a1461055e57600080fd5b8063788c6bfe11610176578063788c6bfe146104ef5780638456cb591461050157806396df5dc01461053157600080fd5b806367c99d58146104de57806374375359146104e757600080fd5b806336dda7d51161024a5780634d778ad1116101fe57806354fd4d50116101d857806354fd4d50146104c05780635c975abb146104c8578063609ae317146104d557600080fd5b80634d778ad114610491578063532fe502146104a45780635427c938146104ad57600080fd5b80633f4ba83a1161022f5780633f4ba83a1461045257806345d31f9d1461047f5780634c19386c1461048857600080fd5b806336dda7d51461040f5780633e163df01461042f57600080fd5b80632495a599116102a157806329f3d3b61161028657806329f3d3b6146103b35780632a3354c9146103bc5780632e97ca21146103dc57600080fd5b80632495a599146103735780632954018c1461039357600080fd5b8063078c4781116102d2578063078c4781146103205780630fce70fb146103335780631e16e4fc1461033b57600080fd5b8063030dbb04146102ee57806305fe138b1461030a575b600080fd5b6102f760105481565b6040519081526020015b60405180910390f35b6102f7610318366004610ce8565b600092915050565b61033161032e366004610d14565b50565b005b6015546102f7565b61034e610349366004610d2f565b610618565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610301565b60035461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b60005461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6102f760095481565b600a5461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103ff6103ea366004610d14565b60066020526000908152604090205460ff1681565b6040519015158152602001610301565b60055461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103ff61043d366004610d14565b60146020526000908152604090205460ff1681565b610331601680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b6102f760075481565b6102f760015481565b6102f761049f366004610d2f565b61064f565b6102f760115481565b6102f76104bb366004610d2f565b61066d565b6102f7600181565b6016546103ff9060ff1681565b6102f760085481565b6102f7600d5481565b6102f7610685565b6b033b2e3c9fd0803ce80000006102f7565b610331601680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b61033161053f366004610d2f565b601555565b610331610552366004610d48565b505050565b60016102f7565b6102f7600e5481565b61033161032e366004610d2f565b610331610583366004610ce8565b61071d565b60135461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103316105b6366004610d7d565b600b92909255600c55600d55565b6102f7600c5481565b6102f7600b5481565b6102f760155481565b6102f7600f5481565b6102f760025481565b60125461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b60006102f7565b6004818154811061062857600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6000610667826b033b2e3c9fd0803ce800000061077a565b92915050565b6000610667826b033b2e3c9fd0803ce80000006108e9565b6003546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156106f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107189190610da9565b905090565b6009829055600a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691909117909155600354610776911682846109fe565b5050565b60408051808201909152600281527f4d330000000000000000000000000000000000000000000000000000000000006020820152600090826107f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b60405180910390fd5b506000610800600284610e72565b90506b033b2e3c9fd0803ce8000000610839827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610ead565b6108439190610e72565b8411156040518060400160405280600281526020017f4d31000000000000000000000000000000000000000000000000000000000000815250906108b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b5082816108cd6b033b2e3c9fd0803ce800000087610ec4565b6108d79190610f01565b6108e19190610e72565b949350505050565b60008215806108f6575081155b1561090357506000610667565b8161091b60026b033b2e3c9fd0803ce8000000610e72565b610945907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610ead565b61094f9190610e72565b8311156040518060400160405280600281526020017f4d31000000000000000000000000000000000000000000000000000000000000815250906109c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b506b033b2e3c9fd0803ce80000006109d9600282610e72565b6109e38486610ec4565b6109ed9190610f01565b6109f79190610e72565b9392505050565b6040805173ffffffffffffffffffffffffffffffffffffffff848116602483015260448083018590528351808403909101815260649092018352602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65649084015261055292869291600091610ac9918516908490610b73565b8051909150156105525780806020019051810190610ae79190610f19565b610552576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016107e9565b60606108e1848460008585843b610be6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107e9565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051610c0f9190610f3b565b60006040518083038185875af1925050503d8060008114610c4c576040519150601f19603f3d011682016040523d82523d6000602084013e610c51565b606091505b5091509150610c61828286610c6c565b979650505050505050565b60608315610c7b5750816109f7565b825115610c8b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ce357600080fd5b919050565b60008060408385031215610cfb57600080fd5b82359150610d0b60208401610cbf565b90509250929050565b600060208284031215610d2657600080fd5b6109f782610cbf565b600060208284031215610d4157600080fd5b5035919050565b600080600060608486031215610d5d57600080fd5b83359250610d6d60208501610cbf565b9150604084013590509250925092565b600080600060608486031215610d9257600080fd5b505081359360208301359350604090920135919050565b600060208284031215610dbb57600080fd5b5051919050565b60005b83811015610ddd578181015183820152602001610dc5565b83811115610dec576000848401525b50505050565b6020815260008251806020840152610e11816040850160208701610dc2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082610ea8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600082821015610ebf57610ebf610e43565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610efc57610efc610e43565b500290565b60008219821115610f1457610f14610e43565b500190565b600060208284031215610f2b57600080fd5b815180151581146109f757600080fd5b60008251610f4d818460208701610dc2565b919091019291505056fea26469706673582212204edb887d94928b3914f60ab48df0182da9eb30ddbb7021b164cc728b60a655d564736f6c634300080a003360e06040523480156200001157600080fd5b5060405162013af238038062013af2833981016040819052620000349162000630565b826001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000073573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000999190620007bf565b620000a433620004ab565b6001600160a01b038116608081905260408051630873769560e01b815290516308737695916004808201926020929091908290030181865afa158015620000ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001159190620007bf565b6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000153573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001799190620007bf565b6001600160a01b0390811660a052841660c0525060405183906200019d9062000519565b6001600160a01b039091168152602001604051809103906000f080158015620001ca573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b0392909216918217905560608301516080840151604051620002029062000527565b6001600160a01b03938416815292909116602083015215156040820152606001604051809103906000f0801580156200023f573d6000803e3d6000fd5b50600280546001600160a01b0319166001600160a01b0392909216919091179055604051600090620002746020820162000535565b601f1982820381018352601f909101166040819052600154600254620002b0926001600160a01b039283169291909116908790602001620007e6565b60408051601f1981840301815290829052620002d09291602001620008e8565b60408051601f19818403018152919052905060006200035982848151602092830120604080517fff00000000000000000000000000000000000000000000000000000000000000818601523060601b6001600160601b03191660218201526035810193909352605580840192909252805180840390920182526075909201909152805191012090565b600154604051634fafc35760e11b81526001600160a01b038084166004830152929350911690639f5f86ae90602401600060405180830381600087803b158015620003a357600080fd5b505af1158015620003b8573d6000803e3d6000fd5b50505050620003ce8284620004fb60201b60201c565b600380546001600160a01b0319166001600160a01b0383811691821790925560015460408051630304b08760e61b81529051919093169263c12c21c09160048083019260209291908290030181865afa15801562000430573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004569190620007bf565b6001600160a01b031614620004a05760405162461bcd60e51b815260206004820152600c60248201526b496e636f727265637420434d60a01b604482015260640160405180910390fd5b505050505062000909565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008183516020850134f59050803b6200051457600080fd5b505050565b6158e8806200243683390190565b615e978062007d1e83390190565b615f3d806200dbb583390190565b6001600160a01b03811681146200055957600080fd5b50565b8051620005698162000543565b919050565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b0381118282101715620005a957620005a96200056e565b60405290565b604080519081016001600160401b0381118282101715620005a957620005a96200056e565b604051601f8201601f191681016001600160401b0381118282101715620005ff57620005ff6200056e565b604052919050565b80516001600160801b03811681146200056957600080fd5b805180151581146200056957600080fd5b6000806000606084860312156200064657600080fd5b8351620006538162000543565b602085810151919450906001600160401b03808211156200067357600080fd5b9086019060a082890312156200068857600080fd5b6200069262000584565b6200069d8362000607565b8152620006ac84840162000607565b8482015260408084015183811115620006c457600080fd5b8401601f81018b13620006d657600080fd5b805184811115620006eb57620006eb6200056e565b620006fb878260051b01620005d4565b818152878101955060069190911b82018701908c8211156200071c57600080fd5b918701915b818310156200077e5783838e0312156200073b5760008081fd5b62000745620005af565b8351620007528162000543565b81528389015161ffff811681146200076a5760008081fd5b818a01528652948701949183019162000721565b8484015250620007939050606085016200055c565b6060830152620007a6608085016200061f565b6080830152979097015195989697509495945050505050565b600060208284031215620007d257600080fd5b8151620007df8162000543565b9392505050565b600060018060a01b0380861683526020818616818501526040606081860152610100850160018060801b038088511660608801528084890151166080880152508187015160a080880152818151808452610120890191508583019350600092505b808310156200087857835180518816835286015161ffff168683015292850192600192909201919084019062000847565b5060608901516001600160a01b031660c0890152608090980151151560e0909701969096525094979650505050505050565b6000815160005b81811015620008cd5760208185018101518683015201620008b1565b81811115620008dd576000828601525b509290920192915050565b600062000901620008fa8386620008aa565b84620008aa565b949350505050565b60805160a05160c051611ad3620009636000396000818161010a0152610ea00152600081816103790152610b170152600081816101680152818161068c01528181610a4d01528181610b860152610c190152611ad36000f3fe6080604052600436106100f35760003560e01c80638da5cb5b1161008a578063ebf0c71711610059578063ebf0c71714610367578063f2fde38b1461039b578063f4747c58146103bb578063f9aa028a146103db57600080fd5b80638da5cb5b1461025a57806394ca2cb5146102855780639c4ae2d014610327578063c12c21c01461033a57600080fd5b80633e0b1a23116100c65780633e0b1a23146101ce5780634ef501ac146101e3578063715018a614610230578063805abe6a1461024557600080fd5b806316f0115b146100f85780632954018c146101565780632f7a18811461018a578063318d0d10146101b7575b600080fd5b34801561010457600080fd5b5061012c7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561016257600080fd5b5061012c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561019657600080fd5b5060025461012c9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156101c357600080fd5b506101cc610408565b005b3480156101da57600080fd5b506101cc610498565b3480156101ef57600080fd5b506102036101fe366004611726565b610521565b6040805173ffffffffffffffffffffffffffffffffffffffff93841681529290911660208301520161014d565b34801561023c57600080fd5b506101cc610567565b34801561025157600080fd5b506101cc6105f2565b34801561026657600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff1661012c565b34801561029157600080fd5b5061012c6102a03660046117e6565b8151602092830120604080517fff00000000000000000000000000000000000000000000000000000000000000818601523060601b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660218201526035810193909352605580840192909252805180840390920182526075909201909152805191012090565b6101cc6103353660046117e6565b6107d8565b34801561034657600080fd5b5060015461012c9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561037357600080fd5b5061012c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103a757600080fd5b506101cc6103b63660046118c0565b6107f5565b3480156103c757600080fd5b506101cc6103d63660046118e4565b610925565b3480156103e757600080fd5b5060035461012c9073ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff16331461048e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b610496610a49565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610519576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b61048e610b82565b6004818154811061053157600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff91821692501682565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b61049660006116b1565b60005473ffffffffffffffffffffffffffffffffffffffff163314610673576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b3073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106f5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071991906119c4565b73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610763573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078791906119c4565b73ffffffffffffffffffffffffffffffffffffffff1614156107d5576040517fbdebb83f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33ff5b60008183516020850134f59050803b6107f057600080fd5b505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b73ffffffffffffffffffffffffffffffffffffffff8116610919576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610485565b610922816116b1565b50565b60005473ffffffffffffffffffffffffffffffffffffffff1633146109a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b805160005b818110156107f05760048382815181106109c7576109c76119e1565b602090810291909101810151825460018082018555600094855293839020825160029092020180547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff938416178255929093015192840180549092169216919091179055016109ab565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ab6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ada91906119c4565b6040517ff2fde38b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301529192509082169063f2fde38b90602401600060405180830381600087803b158015610b6757600080fd5b505af1158015610b7b573d6000803e3d6000fd5b5050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1391906119c4565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca691906119c4565b60045490915060005b81811015610dd4576003546004805473ffffffffffffffffffffffffffffffffffffffff90921691637bccacee919084908110610cee57610cee6119e1565b906000526020600020906002020160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660048481548110610d3357610d336119e1565b600091825260209091206002909102015460405160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b158015610db157600080fd5b505af1158015610dc5573d6000803e3d6000fd5b50505050806001019050610caf565b506001546040517fe26b2f6300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529084169063e26b2f6390602401600060405180830381600087803b158015610e4257600080fd5b505af1158015610e56573d6000803e3d6000fd5b50506001546040517fcf33d95500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201527f0000000000000000000000000000000000000000000000000000000000000000909116925063cf33d9559150602401600060405180830381600087803b158015610ee857600080fd5b505af1158015610efc573d6000803e3d6000fd5b50505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f919190611a10565b905060005b818110156116ab576003546040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810183905260009173ffffffffffffffffffffffffffffffffffffffff1690635094cb4f90602401602060405180830381865afa15801561100e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103291906119c4565b6001546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80841660048301529293506000929091169063fdd5764590602401602060405180830381865afa1580156110a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110cc91906119c4565b905060008173ffffffffffffffffffffffffffffffffffffffff1663ce30bbdb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561111b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113f9190611a29565b9050600c81601081111561115557611155611a4a565b14156116225760008273ffffffffffffffffffffffffffffffffffffffff166320b2c1516040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111cc91906119c4565b905060008373ffffffffffffffffffffffffffffffffffffffff1663927188d96040518163ffffffff1660e01b8152600401602060405180830381865afa15801561121b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123f91906119c4565b905060008473ffffffffffffffffffffffffffffffffffffffff166399253ac06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561128e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b291906119c4565b6040517f9dcb511a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152919250908a169063e8a97a3e9083908390639dcb511a90602401602060405180830381865afa15801561132c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135091906119c4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156113bd57600080fd5b505af11580156113d1573d6000803e3d6000fd5b50506040517f9dcb511a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301528c16925063e8a97a3e915085908390639dcb511a90602401602060405180830381865afa15801561144b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061146f91906119c4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156114dc57600080fd5b505af11580156114f0573d6000803e3d6000fd5b50506003546001546040517f7832743800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301529283169450633e7c88d69350879290911690637832743890602401602060405180830381865afa158015611573573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115979190611a79565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015261ffff166024820152604401600060405180830381600087803b15801561160657600080fd5b505af115801561161a573d6000803e3d6000fd5b505050505050505b600d81601081111561163657611636611a4a565b141561169d578173ffffffffffffffffffffffffffffffffffffffff16639b51ecd36040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561168457600080fd5b505af1158015611698573d6000803e3d6000fd5b505050505b836001019350505050610f96565b50505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561173857600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156117915761179161173f565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156117de576117de61173f565b604052919050565b600080604083850312156117f957600080fd5b823567ffffffffffffffff8082111561181157600080fd5b818501915085601f83011261182557600080fd5b81356020828211156118395761183961173f565b611869817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011601611797565b9250818352878183860101111561187f57600080fd5b8181850182850137600091830181019190915290969401359450505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461092257600080fd5b6000602082840312156118d257600080fd5b81356118dd8161189e565b9392505050565b600060208083850312156118f757600080fd5b823567ffffffffffffffff8082111561190f57600080fd5b818501915085601f83011261192357600080fd5b8135818111156119355761193561173f565b611943848260051b01611797565b818152848101925060069190911b83018401908782111561196357600080fd5b928401925b818410156119b957604084890312156119815760008081fd5b61198961176e565b84356119948161189e565b8152848601356119a38161189e565b8187015283526040939093019291840191611968565b979650505050505050565b6000602082840312156119d657600080fd5b81516118dd8161189e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215611a2257600080fd5b5051919050565b600060208284031215611a3b57600080fd5b8151601181106118dd57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060208284031215611a8b57600080fd5b815161ffff811681146118dd57600080fdfea264697066735822122090f5e4310a8b66bfdd7fdfbe64bc5b98570e7c1a415ffb0ced3c857cf6c5b14064736f6c634300080a00336101606040526000805462ff00001916620c00001790553480156200002357600080fd5b50604051620058e8380380620058e8833981016040819052620000469162000537565b806001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000085573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ab919062000537565b6000805460ff191690556001600160a01b038116620000dd57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200011c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000142919062000537565b6001600160a01b03166080816001600160a01b031681525050506000816001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200019d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c3919062000537565b6001600160a01b03831661010081905260e081905260408051632495a59960e01b81529051929350600092632495a599916004808201926020929091908290030181865afa1580156200021a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000240919062000537565b6001600160a01b03811660c05290506200025a8162000472565b816001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000299573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002bf919062000537565b6001600160a01b0316610120816001600160a01b031681525050816001600160a01b03166377532ed96040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000318573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033e919062000537565b6001600160a01b0316610140816001600160a01b031681525050816001600160a01b031663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000397573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003bd919062000537565b6001600001600a6101000a8154816001600160a01b0302191690836001600160a01b03160217905550816001600160a01b0316639068a8686040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000425573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044b919062000537565b6001600160a01b031660a0525050600380546001600160a01b031916331790555062000588565b6001600160a01b03811660009081526006602052604090205415620004aa57604051632e5a5c7760e01b815260040160405180910390fd5b61010060055410620004cf57604051631cbbe18560e01b815260040160405180910390fd5b600580546001600160a01b0383166000818152600660209081526040808320600190951b948590558483526004909152812091909155825491929062000515836200055e565b91905055505050565b6001600160a01b03811681146200053457600080fd5b50565b6000602082840312156200054a57600080fd5b815162000557816200051e565b9392505050565b60006000198214156200058157634e487b7160e01b600052601160045260246000fd5b5060010190565b60805160a05160c05160e051610100516101205161014051615248620006a0600039600081816107e20152818161371001526137c501526000818161052f01526136780152600081816103d301528181610e5701528181610ebb015281816124ff0152818161265a01528181612aa101528181612b8c01528181612c4e01528181612d0d0152613b8f015260006105a401526000818161062701528181610d2201528181610db301528181610e0001528181610e3601528181610f3f0152818161203a01528181612b6b015281816130ee015281816134dc015281816135a90152613fe601526000818161081c01528181610fe101526124c20152600081816107a80152818161118401526122cb01526152486000f3fe608060405234801561001057600080fd5b50600436106103415760003560e01c8063830aa745116101bd578063a70bc542116100f9578063e75538c7116100a2578063f9aa028a1161007c578063f9aa028a1461089d578063fdd57645146108bd578063fe47cde7146108f3578063ff6875431461091357600080fd5b8063e75538c714610864578063e958b70414610877578063f67c5bd01461088a57600080fd5b8063db7ceb80116100d3578063db7ceb8014610817578063dc2b21c11461083e578063e1998cf91461085157600080fd5b8063a70bc542146107ca578063c5e10eef146107dd578063d48bfca71461080457600080fd5b806394cf073a116101665780639f5f86ae116101405780639f5f86ae146107745780639fd12b7714610787578063a366f49614610790578063a50cf2c8146107a357600080fd5b806394cf073a146106f557806395373018146107085780639af1d35a1461071b57600080fd5b80638991b2f1116101975780638991b2f1146106af5780638fe3f93f146106cf578063944ac59f146106e257600080fd5b8063830aa7451461066f5780638345f26e146106825780638456cb59146106a757600080fd5b8063458936f51161028c578063570a7af2116102355780636ce4074a1161020f5780636ce4074a146105ef5780636e98e5e41461060f5780636f307dc314610622578063783274381461064957600080fd5b8063570a7af21461059f5780635c975abb146105c6578063654a9eda146105dc57600080fd5b80635063524a116102665780635063524a1461055157806351e3f1601461058457806354fd4d501461059757600080fd5b8063458936f51461050e57806346fb371d146105175780634f0e0ef31461052a57600080fd5b80632630c12f116102ee5780633192195c116102c85780633192195c146104be5780633e8297ca146104e65780633f4ba83a1461050657600080fd5b80632630c12f1461045857806329df0b93146104845780632f7a18811461049757600080fd5b806316f0115b1161031f57806316f0115b146103ce578063172c48c7146103f55780632362a2d81461043757600080fd5b8063055ee9b5146103465780630d8f9cee146103a657806311ca4fc2146103bb575b600080fd5b61037c610354366004614a87565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6103b96103b4366004614aa4565b610949565b005b6103b96103c9366004614aa4565b610a76565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b610408610403366004614add565b610b4e565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835261ffff90911660208301520161039d565b61044a610445366004614b13565b610b66565b60405190815260200161039d565b6001546a0100000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1661037c565b6103b9610492366004614a87565b6110be565b60005461037c906301000000900473ffffffffffffffffffffffffffffffffffffffff1681565b6104d16104cc366004614a87565b611122565b6040805192835260208301919091520161039d565b61044a6104f4366004614a87565b60096020526000908152604090205481565b6103b9611156565b61044a60055481565b6103b9610525366004614b95565b611244565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b61056461055f366004614be6565b61149b565b60408051948552602085019390935291830152606082015260800161039d565b6103b9610592366004614aa4565b611602565b61044a600281565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b60005460ff16604051901515815260200161039d565b6103b96105ea366004614c21565b611703565b6106026105fd366004614d40565b611bbb565b60405161039d9190614e5b565b6103b961061d366004614aa4565b611e8e565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b61065c610657366004614a87565b612036565b60405161ffff909116815260200161039d565b6103b961067d366004614b95565b61210f565b6000546106959062010000900460ff1681565b60405160ff909116815260200161039d565b6103b961229d565b61044a6106bd366004614a87565b60086020526000908152604090205481565b61037c6106dd366004614e6e565b612389565b6103b96106f0366004614ea5565b612718565b61044a610703366004614f0a565b612845565b6103b9610716366004614a87565b612e5a565b6001546040805161ffff808416825262010000840481166020830152640100000000840481169282019290925266010000000000008304821660608201526801000000000000000090920416608082015260a00161039d565b6103b9610782366004614a87565b612f85565b61044a60075481565b6103b961079e366004614add565b613045565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b96107d8366004614f4c565b61309b565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b9610812366004614a87565b613221565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b961084c366004614f81565b61327b565b6103b961085f366004614aa4565b613306565b610408610872366004614add565b6134c9565b61037c610885366004614a87565b613541565b61044a610898366004614a87565b6135a5565b60035461037c9073ffffffffffffffffffffffffffffffffffffffff1681565b61037c6108cb366004614a87565b600b6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b600c5461037c9073ffffffffffffffffffffffffffffffffffffffff1681565b61037c610921366004614a87565b600a6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561099b57506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b156109d2576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff1615610a14576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055610a4a828261362e565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b60035473ffffffffffffffffffffffffffffffffffffffff163314610ac7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805473ffffffffffffffffffffffffffffffffffffffff9384166301000000027fffffffffffffffffff0000000000000000000000000000000000000000ffffff90911617905560018054919092166a0100000000000000000000027fffff0000000000000000000000000000000000000000ffffffffffffffffffff909116179055565b600080610b5d6001841b6134c9565b91509150915091565b6000805460ff1615610bd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064015b60405180910390fd5b600054610100900460ff1615610c1b576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff163314610ca0576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610cab89613541565b90506000806000806000610cbe86611122565b9094509050610ccf8c8e868461149b565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152939b5093985090955093506000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015610d6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8f9190614fa4565b9050610d9b8887614fec565b610da6906001614fec565b811115610de657610de1877f00000000000000000000000000000000000000000000000000000000000000008d60018c8b870303038d61366e565b610e30565b610e3073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168d8960018a8d01869003016138c0565b610e7e877f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000089600061366e565b6040517fca9505e40000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604481018490527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ca9505e490606401600060405180830381600087803b158015610f1457600080fd5b505af1158015610f28573d6000803e3d6000fd5b50505050505050506001841115610f6757610f67837f00000000000000000000000000000000000000000000000000000000000000008d87600061366e565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260086020526040902054861916610f9c8489888461395b565b6040517f89b77b3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f000000000000000000000000000000000000000000000000000000000000000016906389b77b3e90602401600060405180830381600087803b15801561102557600080fd5b505af1158015611039573d6000803e3d6000fd5b50505073ffffffffffffffffffffffffffffffffffffffff909c16600090815260026020526040812080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550929a9950505050505050505050565b6000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314611116576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61111f81613a35565b50565b60008060008061113185613aa6565b91955092509050816111438286615004565b61114d9190615041565b92505050915091565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156111e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611204919061507c565b61123a576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611242613c24565b565b60005460ff16156112b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156112f3576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100178155338152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff9081169084161480159061137457506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b80156113985750600c5473ffffffffffffffffffffffffffffffffffffffff163314155b806113b7575073ffffffffffffffffffffffffffffffffffffffff8316155b156113ee576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113f7826135a5565b61142d576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061143885613541565b9050611448838583856000613d05565b61146c5761145b83858360006001613d05565b5061146a838583856001613d05565b505b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b6001546000908190819081906127109061ffff166114b98888615099565b6114c39190615004565b6114cd9190615041565b6114d79086614fec565b935060018760028111156114ed576114ed6150b0565b1415611587576001546000906127109061151390640100000000900461ffff168b615004565b61151d9190615041565b6001549091506127109061153b9062010000900461ffff168b615004565b6115459190615041565b61154f9086614fec565b94508481111561156657600185820303935061156a565b8094505b85811061157b578585039250611581565b84860391505b506115f7565b600287600281111561159b5761159b6150b0565b14156115f157600154600090612710906115c59068010000000000000000900461ffff168b615004565b6115cf9190615041565b6001549091506127109061153b906601000000000000900461ffff168b615004565b84840391505b945094509450949050565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561165457506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b1561168b576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff16156116cd576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055610a4a8282613ea6565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561175557506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b1561178c576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff16156117ce576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790556118048584613ea6565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152600091908616906370a0823190602401602060405180830381865afa158015611874573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118989190614fa4565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529192506000918616906370a0823190602401602060405180830381865afa15801561190a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192e9190614fa4565b60015490915060009081906a0100000000000000000000900473ffffffffffffffffffffffffffffffffffffffff16635cecbd0e61196c8689615099565b8a6119778988615099565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152600481019390935273ffffffffffffffffffffffffffffffffffffffff918216602484015260448301528a1660648201526084016040805180830381865afa1580156119f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1791906150df565b9150915060018411611a2d57611a2d898961362e565b611a3687612036565b611a449061ffff1682615004565b9050611a4f88612036565b611a5d9061ffff1683615004565b9150818110611a7857611a6f89613a35565b5050505061146c565b73ffffffffffffffffffffffffffffffffffffffff891660009081526009602052604081205483611ab56b033b2e3c9fd0803ce800000085615004565b611abf9190615041565b611ad5906b033b2e3c9fd0803ce8000000615099565b611adf9190614fec565b60015490915061271090611b0a906b033b2e3c9fd0803ce80000009062010000900461ffff16615004565b611b149190615041565b8111611b555773ffffffffffffffffffffffffffffffffffffffff8a166000908152600960205260409020819055611b4b8a613a35565b505050505061146c565b611b5e8a613f56565b50505073ffffffffffffffffffffffffffffffffffffffff871660009081526009602052604090206001905550505050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b6060611bc960005460ff1690565b15611c30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff1615611c72576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100178155338152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff908116908416141580611ce7575073ffffffffffffffffffffffffffffffffffffffff8316155b15611d3d57600c5473ffffffffffffffffffffffffffffffffffffffff163314611d3d576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611d4885613541565b90508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167faed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab0360405160405180910390a36040517f1cff79cd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821690631cff79cd90611df89087908790600401615103565b6000604051808303816000875af1158015611e17573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611e5d9190810190615132565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905595945050505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314611edf576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821615611f4f5773ffffffffffffffffffffffffffffffffffffffff8281166000908152600a6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169183169190911790555b73ffffffffffffffffffffffffffffffffffffffff811615611fbf5773ffffffffffffffffffffffffffffffffffffffff8181166000908152600b6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169184169190911790555b73ffffffffffffffffffffffffffffffffffffffff811673cccccccccccccccccccccccccccccccccccccccc141561203257600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790555b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120ba5750506001547e01000000000000000000000000000000000000000000000000000000000000900461ffff1690565b60006120c5836135a5565b9050806120fe576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612107816134c9565b949350505050565b60005460ff161561217c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156121be576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff163314612243576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61224d8383613ea6565b61226f73ffffffffffffffffffffffffffffffffffffffff83168585846138c0565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555050565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015612327573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061234b919061507c565b612381576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112426142d4565b6000805460ff16156123f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff1615612439576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff1633146124be576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166321d18456857f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612568573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061258c9190614fa4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168152600481019290925260248201526044016020604051808303816000875af11580156125e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061260b91906151a0565b6040517fbf28068b0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff80831660248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063bf28068b90604401600060405180830381600087803b1580156126a057600080fd5b505af11580156126b4573d6000803e3d6000fd5b505050506126c28382614394565b73ffffffffffffffffffffffffffffffffffffffff811660009081526008602052604081206001905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690559392505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314612769576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805461ffff92831668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9484166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff96851664010000000002969096167fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff97851662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000090931694909816939093171794909416949094179190911716919091179055565b6000805460ff16156128b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156128f5576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff16331461297a576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080600061298887613aa6565b925092509250846129a25761299d8684615099565b6129ac565b6129ac8684614fec565b935060008515612b045769021e19e0c9bab24000008510612a15576129d583603689901c615004565b6129e3603686901c84615004565b6129ed9190614fec565b603686901c6129fc8585615004565b612a069190615004565b612a109190615041565b612a52565b612a1f8388615004565b612a298584615004565b612a339190614fec565b85612a3e8585615004565b612a489190615004565b612a529190615041565b6040517fbf28068b0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff8a811660248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063bf28068b90604401600060405180830381600087803b158015612ae757600080fd5b505af1158015612afb573d6000803e3d6000fd5b50505050612d9f565b60008484612b128583615004565b612b1c9190615041565b612b269190615099565b60015490915060009061271090612b419061ffff1684615004565b612b4b9190615041565b905073ffffffffffffffffffffffffffffffffffffffff8a1663d1660f997f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000084612bb6878f614fec565b612bc09190614fec565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b158015612c3457600080fd5b505af1158015612c48573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ca9505e4838b612c949190614fec565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815260048101919091526024810184905260006044820152606401600060405180830381600087803b158015612cf357600080fd5b505af1158015612d07573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d9a9190614fa4565b925050505b6040517f16128211000000000000000000000000000000000000000000000000000000008152600481018690526024810182905273ffffffffffffffffffffffffffffffffffffffff891690631612821190604401600060405180830381600087803b158015612e0e57600080fd5b505af1158015612e22573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055509498975050505050505050565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff16158015612eac57506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b15612ee3576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff1615612f25576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055612f5a81613f56565b50600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b60035473ffffffffffffffffffffffffffffffffffffffff163314612fd6576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517ff62005acebe9b616aefb5f248b48f5e89f28437b27d1eebc0b2d911209f297af90600090a250565b60035473ffffffffffffffffffffffffffffffffffffffff163314613096576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600755565b60035473ffffffffffffffffffffffffffffffffffffffff1633146130ec576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613193576001805461ffff83167e01000000000000000000000000000000000000000000000000000000000000027dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790555050565b600061319e836135a5565b9050806131d7576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000908152600460205260409020805473ffffffffffffffffffffffffffffffffffffffff1675ffff000000000000000000000000000000000000000060a084901b161790555050565b60035473ffffffffffffffffffffffffffffffffffffffff163314613272576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61111f81614467565b60035473ffffffffffffffffffffffffffffffffffffffff1633146132cc576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805460ff90921662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff909216919091179055565b60005460ff1615613373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156133b5576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff16331461343a576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061344583613541565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260026020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055905061349c8282614394565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b60008082600114156135275750506001547f0000000000000000000000000000000000000000000000000000000000000000927e0100000000000000000000000000000000000000000000000000000000000090910461ffff169150565b50506000908152600460205260409020549060a082901c90565b73ffffffffffffffffffffffffffffffffffffffff80821660009081526002602052604090205416806135a0576040517fb5ba4c4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146136255773ffffffffffffffffffffffffffffffffffffffff8216600090815260066020526040902054613628565b60015b92915050565b6000613639826135a5565b73ffffffffffffffffffffffffffffffffffffffff909316600090815260086020526040902080549319939093169092555050565b8080156136c657507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b15613828576040517fd1660f9900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301526044820184905286169063d1660f9990606401600060405180830381600087803b15801561376357600080fd5b505af1158015613777573d6000803e3d6000fd5b50506040517f5869dba800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690527f0000000000000000000000000000000000000000000000000000000000000000169250635869dba89150604401600060405180830381600087803b15801561380b57600080fd5b505af115801561381f573d6000803e3d6000fd5b505050506138b9565b6040517fd1660f9900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301526044820184905286169063d1660f9990606401600060405180830381600087803b1580156138a057600080fd5b505af11580156138b4573d6000803e3d6000fd5b505050505b5050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261395590859061455b565b50505050565b60025b8181116138b95781811615613a2d576000613978826134c9565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529192506000918316906370a0823190602401602060405180830381865afa1580156139eb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a0f9190614fa4565b90506002811115613a2a57613a2a878388600185038961366e565b50505b60011b61395e565b73ffffffffffffffffffffffffffffffffffffffff811660009081526008602052604081205490613a6582614667565b60005490915062010000900460ff16811115613aa1576000613a86836146a7565b613a91906001614fec565b905061395584848460008561470b565b505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff16631afbb7a46040518163ffffffff1660e01b8152600401602060405180830381865afa158015613af6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b1a9190614fa4565b92508373ffffffffffffffffffffffffffffffffffffffff166317d11a156040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b8b9190614fa4565b91507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bf8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c1c9190614fa4565b929491935050565b60005460ff16613c90576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610bd0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6040805173ffffffffffffffffffffffffffffffffffffffff8681166024830152604480830186905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b30000000000000000000000000000000000000000000000000000000017905291517f1cff79cd000000000000000000000000000000000000000000000000000000008152600092861691631cff79cd91613dc6918a91600401615103565b6000604051808303816000875af1925050508015613e2457506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052613e219190810190615132565b60015b613e2d57613e61565b80511580613e50575080806020019051810190613e4a919061507c565b15156001145b15613e5f576001915050613e9d565b505b8115613e99576040517f76e3e29c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060005b95945050505050565b6000613eb1826135a5565b9050801580613ec35750600754811615155b15613efa576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83166000908152600860205260409020548116613aa15773ffffffffffffffffffffffffffffffffffffffff83166000908152600860205260409020805482179055505050565b60015473ffffffffffffffffffffffffffffffffffffffff8281166000908152600860205260408120546a010000000000000000000090930490911691908080613f9f86611122565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526127108202600482015273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350908716915063f9a6503090604401602060405180830381865afa15801561403a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061405e9190614fa4565b9250614069846146a7565b6001019150506000806000805b848110156142a157801561408f5760018186031b614092565b60015b935086841615614299576000806140a8866134c9565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8e811660048301529294509092506000918416906370a0823190602401602060405180830381865afa15801561411d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141419190614fa4565b9050600181111561428c576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff848116602483015261ffff841691908d169063f9a6503090604401602060405180830381865afa1580156141c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141ea9190614fa4565b6141f49190615004565b6141fe9087614fec565b95508886106142875760006142128b614667565b60005490915062010000900460ff16811115614249576142448d8c836001891561423e57898e0361470b565b8d61470b565b614278565b85156142785773ffffffffffffffffffffffffffffffffffffffff8d1660009081526008602052604090208b90555b50505050505050505050505050565b614295565b98861898600194505b5050505b600101614076565b506040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005460ff1615614341576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613cdb3390565b73ffffffffffffffffffffffffffffffffffffffff821615806143dd575073ffffffffffffffffffffffffffffffffffffffff8281166000908152600260205260409020541615155b15614414576040517f9e59609e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff918216600090815260026020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001691909216179055565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260066020526040902054156144c4576040517f2e5a5c7700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61010060055410614501576040517f1cbbe18500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005805473ffffffffffffffffffffffffffffffffffffffff83166000818152600660209081526040808320600190951b9485905584835260049091528120919091558254919290614552836151bd565b91905055505050565b60006145bd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166148799092919063ffffffff16565b805190915015613aa157808060200190518101906145db919061507c565b613aa1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610bd0565b60008060005b6101008110156146a0576001811b91508382161561468c578260010192505b838210614698576146a0565b60010161466d565b5050919050565b600081600114156146ba57506000919050565b61010060015b60016146cc8284614fec565b901c92506001831b848116158015906146e75750600185851c145b156146f257506146a0565b84811061470157839250614705565b8391505b506146c0565b815b81811015614846576001811b8581161561483d57600061472c826134c9565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529192506000918316906370a0823190602401602060405180830381865afa15801561479f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147c39190614fa4565b90506001811161483a57600054978318977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9097019660ff6201000090910416871161483a5750505073ffffffffffffffffffffffffffffffffffffffff86166000908152600860205260409020859055506138b9565b50505b5060010161470d565b506040517f53275fcb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606148888484600085614892565b90505b9392505050565b606082471015614924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610bd0565b843b61498c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610bd0565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516149b591906151f6565b60006040518083038185875af1925050503d80600081146149f2576040519150601f19603f3d011682016040523d82523d6000602084013e6149f7565b606091505b5091509150614a07828286614a12565b979650505050505050565b60608315614a2157508161488b565b825115614a315782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd09190614e5b565b73ffffffffffffffffffffffffffffffffffffffff8116811461111f57600080fd5b600060208284031215614a9957600080fd5b813561488b81614a65565b60008060408385031215614ab757600080fd5b8235614ac281614a65565b91506020830135614ad281614a65565b809150509250929050565b600060208284031215614aef57600080fd5b5035919050565b8035600381106135a057600080fd5b801515811461111f57600080fd5b600080600080600080600060e0888a031215614b2e57600080fd5b8735614b3981614a65565b9650614b4760208901614af6565b9550604088013594506060880135614b5e81614a65565b93506080880135614b6e81614a65565b925060a0880135915060c0880135614b8581614b05565b8091505092959891949750929550565b60008060008060808587031215614bab57600080fd5b8435614bb681614a65565b93506020850135614bc681614a65565b92506040850135614bd681614a65565b9396929550929360600135925050565b60008060008060808587031215614bfc57600080fd5b84359350614c0c60208601614af6565b93969395505050506040820135916060013590565b600080600080600060a08688031215614c3957600080fd5b8535614c4481614a65565b94506020860135614c5481614a65565b93506040860135614c6481614a65565b94979396509394606081013594506080013592915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614cf257614cf2614c7c565b604052919050565b600067ffffffffffffffff821115614d1457614d14614c7c565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600080600060608486031215614d5557600080fd5b8335614d6081614a65565b92506020840135614d7081614a65565b9150604084013567ffffffffffffffff811115614d8c57600080fd5b8401601f81018613614d9d57600080fd5b8035614db0614dab82614cfa565b614cab565b818152876020838501011115614dc557600080fd5b816020840160208301376000602083830101528093505050509250925092565b60005b83811015614e00578181015183820152602001614de8565b838111156139555750506000910152565b60008151808452614e29816020860160208601614de5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061488b6020830184614e11565b60008060408385031215614e8157600080fd5b823591506020830135614ad281614a65565b803561ffff811681146135a057600080fd5b600080600080600060a08688031215614ebd57600080fd5b614ec686614e93565b9450614ed460208701614e93565b9350614ee260408701614e93565b9250614ef060608701614e93565b9150614efe60808701614e93565b90509295509295909350565b600080600060608486031215614f1f57600080fd5b8335614f2a81614a65565b9250602084013591506040840135614f4181614b05565b809150509250925092565b60008060408385031215614f5f57600080fd5b8235614f6a81614a65565b9150614f7860208401614e93565b90509250929050565b600060208284031215614f9357600080fd5b813560ff8116811461488b57600080fd5b600060208284031215614fb657600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115614fff57614fff614fbd565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561503c5761503c614fbd565b500290565b600082615077577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60006020828403121561508e57600080fd5b815161488b81614b05565b6000828210156150ab576150ab614fbd565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600080604083850312156150f257600080fd5b505080516020909101519092909150565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015260006148886040830184614e11565b60006020828403121561514457600080fd5b815167ffffffffffffffff81111561515b57600080fd5b8201601f8101841361516c57600080fd5b805161517a614dab82614cfa565b81815285602083850101111561518f57600080fd5b613e9d826020830160208601614de5565b6000602082840312156151b257600080fd5b815161488b81614a65565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156151ef576151ef614fbd565b5060010190565b60008251615208818460208701614de5565b919091019291505056fea26469706673582212209d39bb9d4972b515acdad1ffb757acd15e103ca6ee762f88a6382b36243734ba64736f6c634300080a00336101406040523480156200001257600080fd5b5060405162005e9738038062005e97833981016040819052620000359162000198565b60016000556001600160a01b0383166200006257604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038316608081905260408051636f307dc360e01b81529051636f307dc3916004808201926020929091908290030181865afa158015620000ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d39190620001ea565b6001600160a01b031660a0816001600160a01b031681525050826001600160a01b0316634f0e0ef36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200012b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001519190620001ea565b6001600160a01b0390811660c0529190911660e0819052151561010052151561012052506200020f565b80516001600160a01b03811681146200019357600080fd5b919050565b600080600060608486031215620001ae57600080fd5b620001b9846200017b565b9250620001c9602085016200017b565b915060408401518015158114620001df57600080fd5b809150509250925092565b600060208284031215620001fd57600080fd5b62000208826200017b565b9392505050565b60805160a05160c05160e0516101005161012051615a86620004116000396000818161061101528181612fb5015261481f01526000818161031701528181610dde015281816144f901526146e5015260008181610557015281816146a901526147a901526000818161034b0152818161387d015261392d01526000818161047301528181611bfe0152818161274f0152818161280d0152818161366a01526137dd015260008181610665015281816109d801528181610b0301528181610bd501528181610cdd01528181610e6501528181610fe30152818161114e0152818161120e0152818161132e015281816114510152818161162b01528181611708015281816117e0015281816119e501528181611b1201528181611d9501528181611ed5015281816120040152818161216801528181612290015281816123c601528181612568015281816126390152818161266f0152818161293d01528181612a2101528181612a8a01528181612bde01528181612d2601528181612e6801528181612ec2015281816130a10152818161311b015281816131b401528181613341015281816134c10152818161358a0152818161372f01528181613a1a01528181613b2e01528181613dbb015281816142200152818161432801528181614492015281816148e7015281816149e801528181614aae0152614d8f0152615a866000f3fe6080604052600436106102695760003560e01c8063860aefcf11610153578063c7de38a6116100cb578063dfd594651161007f578063eb9606df11610064578063eb9606df1461081e578063f9eaee0d1461083e578063ffd9b9071461085e57600080fd5b8063dfd59465146107de578063e1f21c67146107fe57600080fd5b8063cff0ab96116100b0578063cff0ab96146106ef578063d9ccbec114610783578063dcf65482146107be57600080fd5b8063c7de38a6146106a7578063caa5c23f146106dc57600080fd5b80639c55a05411610122578063b55bb84b11610107578063b55bb84b14610633578063c12c21c014610653578063c690908a1461068757600080fd5b80639c55a054146105df578063b1836d32146105ff57600080fd5b8063860aefcf146104db5780639408b63f146105455780639b67ab30146105795780639be0536a146105bd57600080fd5b80635d91a0e0116101e65780636d19b486116101b55780637071b7c51161019a5780637071b7c51461049557806379c0ef91146104a857806382871ace146104c857600080fd5b80636d19b486146104415780636f307dc31461046157600080fd5b80635d91a0e0146103e85780635f73fbec146103fb578063601d66f61461040e5780636c8f225d1461042e57600080fd5b80633d9287fa1161023d5780635019e20a116102225780635019e20a1461039257806354fd4d50146103b257806359781034146103d557600080fd5b80633d9287fa146103055780634f0e0ef31461033957600080fd5b8062842b571461026e578063256ac915146102905780632a7ba1f7146102c55780632b7c7b11146102e5575b600080fd5b34801561027a57600080fd5b5061028e6102893660046151bf565b61087e565b005b34801561029c57600080fd5b506102b06102ab3660046151f8565b61098e565b60405190151581526020015b60405180910390f35b3480156102d157600080fd5b5061028e6102e0366004615215565b610a61565b3480156102f157600080fd5b5061028e610300366004615215565b610c3b565b34801561031157600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561034557600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102bc565b34801561039e57600080fd5b5061028e6103ad3660046151f8565b610d6a565b3480156103be57600080fd5b506103c7600281565b6040519081526020016102bc565b61028e6103e336600461522e565b61108c565b61028e6103f63660046152bb565b611275565b61028e610409366004615340565b611589565b34801561041a57600080fd5b5061028e6104293660046153d8565b6117de565b61028e61043c36600461541b565b611900565b34801561044d57600080fd5b506102b061045c3660046151f8565b611c31565b34801561046d57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b61028e6104a336600461546e565b611c60565b3480156104b457600080fd5b5061036d6104c3366004615215565b611f3e565b61028e6104d63660046152bb565b611f4b565b3480156104e757600080fd5b5060025461051c906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041682565b604080516fffffffffffffffffffffffffffffffff9384168152929091166020830152016102bc565b34801561055157600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561058557600080fd5b506004546040805167ffffffffffffffff608084901c1681526fffffffffffffffffffffffffffffffff9092166020830152016102bc565b3480156105c957600080fd5b506105d261227d565b6040516102bc91906154e2565b3480156105eb57600080fd5b5061028e6105fa36600461553c565b61228e565b34801561060b57600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561063f57600080fd5b5061028e61064e3660046151f8565b6123c4565b34801561065f57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561069357600080fd5b5061028e6106a23660046151f8565b6124c6565b3480156106b357600080fd5b506106c76106c23660046151f8565b612668565b604080519283526020830191909152016102bc565b61028e6106ea366004615557565b61289b565b3480156106fb57600080fd5b5060015461074e906fffffffffffffffffffffffffffffffff811690700100000000000000000000000000000000810460ff169071010000000000000000000000000000000000900464ffffffffff1683565b604080516fffffffffffffffffffffffffffffffff9094168452911515602084015264ffffffffff16908201526060016102bc565b34801561078f57600080fd5b506102b061079e366004615599565b600360209081526000928352604080842090915290825290205460ff1681565b3480156107ca57600080fd5b5061028e6107d93660046151f8565b612a88565b3480156107ea57600080fd5b506103c76107f93660046151f8565b612b86565b34801561080a57600080fd5b5061028e61081936600461522e565b612c6d565b34801561082a57600080fd5b5061028e6108393660046155c7565b612ec0565b34801561084a57600080fd5b506102b06108593660046151f8565b613057565b34801561086a57600080fd5b5061028e6108793660046155ee565b6131b2565b600260005414156108f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b6002600090815573ffffffffffffffffffffffffffffffffffffffff8316808252600360209081526040808420338086529083529381902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081527f9b3258bc4904fd6426b99843e206c6c7cdb1fd0f040121c25b71dafbb3851ee0910160405180910390a350506001600055565b6040517f055ee9b500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063055ee9b590602401602060405180830381865afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a43919061560b565b73ffffffffffffffffffffffffffffffffffffffff16141592915050565b60026000541415610ace576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610b5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b83919061560b565b9050610b903382846132eb565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906395373018906024015b600060405180830381600087803b158015610c1a57600080fd5b505af1158015610c2e573d6000803e3d6000fd5b5050600160005550505050565b60026000541415610ca8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610d39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5d919061560b565b9050610b90338284613411565b60026000541415610dd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000557f000000000000000000000000000000000000000000000000000000000000000015610e34576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610ec1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee5919061560b565b33600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915290205490915060ff16610f52576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f5d82613583565b5090508015610f98576040517ff713841e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b15801561102757600080fd5b505af115801561103b573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692503391507f93c70cc9715bef0d83edf2095f3595402279d274f402a73ffc17f1bcb19d863d90600090a35050600160005550565b600260005414156110f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611106613875565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063e958b70490602401602060405180830381865afa158015611197573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bb919061560b565b90506111c9848285856139b7565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401600060405180830381600087803b15801561125257600080fd5b505af1158015611266573d6000803e3d6000fd5b50506001600055505050505050565b600260005414156112e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611375573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611399919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166113e8576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806113f483613583565b915091508161142f576040517f1fdd676f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611437613875565b831561144d5761144d85858b8660016000613ae3565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632362a2d88b600185338e8e8e6040518863ffffffff1660e01b81526004016114b59796959493929190615663565b6020604051808303816000875af11580156114d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f891906156bf565b90508873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f7dfecd8419723a9d3954585a30c2a270165d70aafa146c11c1e1b88ae14390648460405161157091815260200190565b60405180910390a4505060016000555050505050505050565b600260005414156115f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ab919061560b565b90506116b5613875565b81156116cb576116cb8383338460016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d89061174a903390600090819083908d908d908d90600401615663565b6020604051808303816000875af1158015611769573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178d91906156bf565b5060405173ffffffffffffffffffffffffffffffffffffffff87169033907f460ad03b1cf79b1d64d3aefa28475f110ab66e84649c52bb41ed796b9b39198190600090a35050600160005550505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611849573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118d1576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff90811670010000000000000000000000000000000002911617600255565b6002600054141561196d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000908155606461198461ffff851687615707565b61198e9190615744565b9050611999816144f7565b6119a2816145e8565b6119ab84614668565b6119b3613875565b6040517f172c48c7000000000000000000000000000000000000000000000000000000008152600060048201819052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a64919061577f565b61ffff169150611a789050816127106157ae565b611a829083615707565b611a8c8288615707565b11611ac3576040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff86811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611b5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b81919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638587604051611bef92919091825261ffff16602082015260400190565b60405180910390a3611c2386827f00000000000000000000000000000000000000000000000000000000000000008a6139b7565b505060016000555050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526006602052604081205415155b92915050565b60026000541415611ccd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611cdb856144f7565b611ce484614668565b611ced856145e8565b600154700100000000000000000000000000000000900460ff1615611d3e576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d46613875565b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff85811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611de0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e04919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638885604051611e7292919091825261ffff16602082015260400190565b60405180910390a38215611e9057611e908484878460006001613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015611f1957600080fd5b505af1158015611f2d573d6000803e3d6000fd5b505060016000555050505050505050565b6000611c5a60058361480f565b60026000541415611fb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa15801561204b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206f919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166120be576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120c661481b565b6120fc576040517f7e52ccb400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061210782612668565b509050612112613875565b82156121285761212884848a8560016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d8906121aa908c90600290879033908f908f908f90600401615663565b6020604051808303816000875af11580156121c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ed91906156bf565b90508773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167ffada13ff2d5e1a1d9da37ad4a4130893b34e3c69c32b17f87ec31fd661b867078460405161226591815260200190565b60405180910390a45050600160005550505050505050565b6060612289600561486b565b905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612381576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561242f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612453919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146124b7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614878565b5050565b60026000541415612533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156125c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e8919061560b565b90506125f4818361489a565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401610c00565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126fc919061560b565b905060008061270b8387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156127a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127c991906156bf565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015291965061271091851690637afb010490604401602060405180830381865afa158015612863573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061288791906156bf565b6128919190615744565b9350505050915091565b60026000541415612908576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129bd919061560b565b90506129c7613875565b8115612a7e576129dc83833384600080613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015612a6557600080fd5b505af1158015612a79573d6000803e3d6000fd5b505050505b5050600160005550565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612af3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b17919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b7b576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614c92565b600080612b9283612668565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152919350600092507f000000000000000000000000000000000000000000000000000000000000000090911690633192195c906024016040805180830381865afa158015612c26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4a91906157c5565b9150819050612c5b61271084615707565b612c659190615744565b949350505050565b60026000541415612cda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063fdd5764590602401602060405180830381865afa158015612d6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d91919061560b565b73ffffffffffffffffffffffffffffffffffffffff161480612dd7575073ffffffffffffffffffffffffffffffffffffffff831660009081526006602052604090205415155b15612e0e576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612eac57600080fd5b505af1158015611c23573d6000803e3d6000fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f4f919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612fb3576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000061300a576040517f50dd11fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805464ffffffffff90921671010000000000000000000000000000000000027fffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffffff909216919091179055565b6040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063f67c5bd090602401602060405180830381865afa1580156130e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061310c91906156bf565b905080158015906131ab5750807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015613184573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a891906156bf565b16155b9392505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561321d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613241919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146132a5576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018054911515700100000000000000000000000000000000027fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff909216919091179055565b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600060448301819052917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561338c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133b091906156bf565b90506133bb816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f98274bf834d179ee08dc0604071b0dc90b54731bd5f725a5a96a39a86bce025a8360405161340391815260200190565b60405180910390a250505050565b61341a816144f7565b600154700100000000000000000000000000000000900460ff161561346b576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600160448301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561350c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061353091906156bf565b905061353b816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f9cac51154cc0d835e2f9c9d1f59a9344588cee107f4203bf58a8c797e3a58c458360405161340391815260200190565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613617919061560b565b90506000806136268387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156136c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136e491906156bf565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529195506000917f00000000000000000000000000000000000000000000000000000000000000001690633192195c906024016040805180830381865afa158015613775573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061379991906157c5565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350600092506127109187169063f9a6503090604401602060405180830381865afa158015613837573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061385b91906156bf565b6138659190615707565b9092109794965093945050505050565b34156139b5577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156138e357600080fd5b505af11580156138f7573d6000803e3d6000fd5b50506040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201523460248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16935063a9059cbb925060440190506020604051808303816000875af115801561398f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139b391906157e9565b505b565b6139c084614cb4565b6040517f830aa74500000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f0000000000000000000000000000000000000000000000000000000000000000169063830aa74590608401600060405180830381600087803b158015613a5e57600080fd5b505af1158015613a72573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fa32435755c235de2976ed44a75a2f85cb01faf0c894f639fe0c32bb9455fea8f83604051613ad591815260200190565b60405180910390a350505050565b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301523060248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b158015613b7257600080fd5b505af1158015613b86573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff871692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a28460005b8181101561441d5736888883818110613bea57613bea615806565b9050602002810190613bfc9190615835565b90506004613c0d6020830183615873565b90501015613c47576040517fe2b0e50600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b30613c5560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16141561421c578415613ca9576040517f5fb9107f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613cb86020830183615873565b613cc1916158d8565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167f59781034000000000000000000000000000000000000000000000000000000001415613e3c5760008080613d1e6020860186615873565b613d2c916004908290615920565b810190613d39919061522e565b925092509250613e34838c73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614613e2b576040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015613e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e26919061560b565b613e2d565b8b5b84846139b7565b505050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2b7c7b11000000000000000000000000000000000000000000000000000000001415613ec757600194506000613e996020840184615873565b613ea7916004908290615920565b810190613eb49190615215565b9050613ec1898983613411565b50614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2a7ba1f7000000000000000000000000000000000000000000000000000000001415613f80578415613f49576040517fc0b0caa800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613f586020840184615873565b613f66916004908290615920565b810190613f739190615215565b9050613ec18989836132eb565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f233a8caa0000000000000000000000000000000000000000000000000000000014156140e457600080613fda6020850185615873565b613fe8916004908290615920565b810190613ff5919061594a565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c8116600483015292945090925082918416906370a0823190602401602060405180830381865afa158015614069573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061408d91906156bf565b10156140dd576040517fa5ac537300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016108e7565b5050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fc690908a00000000000000000000000000000000000000000000000000000000141561416457600061413d6020840184615873565b61414b916004908290615920565b81019061415891906151f8565b9050613ec1888261489a565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f23e27a640000000000000000000000000000000000000000000000000000000014156141e45760006141bd6020840184615873565b6141cb916004908290615920565b8101906141d891906151f8565b9050613ec18882614d42565b6040517f1e9e7e7a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50614414565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff68754361426760208501856151f8565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156142d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142f4919061560b565b73ffffffffffffffffffffffffffffffffffffffff16148061436d575073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001661435560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16145b156143a4576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6144126143b46020830183615873565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506143f69250505060208401846151f8565b73ffffffffffffffffffffffffffffffffffffffff1690614e39565b505b50600101613bcf565b506040517f60c8e8938c9a0c0d88a98d6f1c562ce68077e12bf3edb8047378f2f736cb45b490600090a16040517fe1998cf900000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff86811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b1580156144d657600080fd5b505af11580156144ea573d6000803e3d6000fd5b5050505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006139b3576001546fffffffffffffffffffffffffffffffff9081169081146124c257600454608081901c906fffffffffffffffffffffffffffffffff16600067ffffffffffffffff8316431461456e578461458a565b61458a6fffffffffffffffffffffffffffffffff831686615976565b9050838111156145c6576040517f675f1a5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff81164360801b176004555050505050565b6002546fffffffffffffffffffffffffffffffff16811080614631575060025470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681115b156139b3576040517fce16799400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61467061481b565b156146a7576040517f63fc31c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1615614806577f0000000000000000000000000000000000000000000000000000000000000000801561472657503373ffffffffffffffffffffffffffffffffffffffff821614155b1561475d576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600160248301527f00000000000000000000000000000000000000000000000000000000000000001690639dc29fac90604401600060405180830381600087803b1580156147ed57600080fd5b505af1158015614801573d6000803e3d6000fd5b505050505b6139b381614cb4565b60006131ab8383614e7b565b60007f0000000000000000000000000000000000000000000000000000000000000000801561228957505060015471010000000000000000000000000000000000900464ffffffffff1642101590565b606060006131ab83614ea5565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f01565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561492b57600080fd5b505af115801561493f573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527fdf498aa1c340e992665d6fb4f3be8436d452c45a630cb6d7fab7963da39bac8793500190505b60405180910390a15050565b6040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600091829160019183917f00000000000000000000000000000000000000000000000000000000000000001690638991b2f190602401602060405180830381865afa158015614a2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a5391906156bf565b90505b808211614c895780821615614c7d576040517fe75538c700000000000000000000000000000000000000000000000000000000815260048101839052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e75538c7906024016040805180830381865afa158015614af4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b18919061577f565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529294509092506000918416906370a0823190602401602060405180830381865afa158015614b8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bb191906156bf565b90506001811115614c79576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff8481166024830152600091908b169063f9a6503090604401602060405180830381865afa158015614c33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c5791906156bf565b978801979050614c6b61ffff841682615707565b614c759088615976565b9650505b5050505b600182901b9150614a56565b50509250929050565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f50565b3373ffffffffffffffffffffffffffffffffffffffff821614801590614d0b575033600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16155b156139b3576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b158015614dd357600080fd5b505af1158015614de7573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527f69db9e9764da61b6681b89fb0f5be018506e0342036e56b59c3015a620d60977935001905061498d565b60606131ab83836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250615043565b6000826000018281548110614e9257614e92615806565b9060005260206000200154905092915050565b606081600001805480602002602001604051908101604052809291908181526020018280548015614ef557602002820191906000526020600020905b815481526020019060010190808311614ee1575b50505050509050919050565b6000818152600183016020526040812054614f4857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611c5a565b506000611c5a565b60008181526001830160205260408120548015615039576000614f746001836157ae565b8554909150600090614f88906001906157ae565b9050818114614fed576000866000018281548110614fa857614fa8615806565b9060005260206000200154905080876000018481548110614fcb57614fcb615806565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080614ffe57614ffe61598e565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611c5a565b6000915050611c5a565b6060612c65848460008585843b6150b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108e7565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516150df91906159ed565b60006040518083038185875af1925050503d806000811461511c576040519150601f19603f3d011682016040523d82523d6000602084013e615121565b606091505b509150915061513182828661513c565b979650505050505050565b6060831561514b5750816131ab565b82511561515b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e791906159ff565b73ffffffffffffffffffffffffffffffffffffffff811681146139b357600080fd5b80151581146139b357600080fd5b600080604083850312156151d257600080fd5b82356151dd8161518f565b915060208301356151ed816151b1565b809150509250929050565b60006020828403121561520a57600080fd5b81356131ab8161518f565b60006020828403121561522757600080fd5b5035919050565b60008060006060848603121561524357600080fd5b833561524e8161518f565b9250602084013561525e8161518f565b929592945050506040919091013590565b60008083601f84011261528157600080fd5b50813567ffffffffffffffff81111561529957600080fd5b6020830191508360208260051b85010111156152b457600080fd5b9250929050565b60008060008060008060a087890312156152d457600080fd5b86356152df8161518f565b955060208701356152ef8161518f565b9450604087013593506060870135615306816151b1565b9250608087013567ffffffffffffffff81111561532257600080fd5b61532e89828a0161526f565b979a9699509497509295939492505050565b60008060008060006080868803121561535857600080fd5b85356153638161518f565b945060208601359350604086013561537a816151b1565b9250606086013567ffffffffffffffff81111561539657600080fd5b6153a28882890161526f565b969995985093965092949392505050565b80356fffffffffffffffffffffffffffffffff811681146153d357600080fd5b919050565b600080604083850312156153eb57600080fd5b6153f4836153b3565b9150615402602084016153b3565b90509250929050565b61ffff811681146139b357600080fd5b6000806000806080858703121561543157600080fd5b8435935060208501356154438161518f565b925060408501356154538161540b565b915060608501356154638161540b565b939692955090935050565b60008060008060006080868803121561548657600080fd5b8535945060208601356154988161518f565b9350604086013567ffffffffffffffff8111156154b457600080fd5b6154c08882890161526f565b90945092505060608601356154d48161540b565b809150509295509295909350565b6020808252825182820181905260009190848201906040850190845b8181101561553057835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016154fe565b50909695505050505050565b60006020828403121561554e57600080fd5b6131ab826153b3565b6000806020838503121561556a57600080fd5b823567ffffffffffffffff81111561558157600080fd5b61558d8582860161526f565b90969095509350505050565b600080604083850312156155ac57600080fd5b82356155b78161518f565b915060208301356151ed8161518f565b6000602082840312156155d957600080fd5b813564ffffffffff811681146131ab57600080fd5b60006020828403121561560057600080fd5b81356131ab816151b1565b60006020828403121561561d57600080fd5b81516131ab8161518f565b6003811061565f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b73ffffffffffffffffffffffffffffffffffffffff888116825260e082019061568f602084018a615628565b6040830197909752948616606082015292909416608083015260a082015291151560c09092019190915292915050565b6000602082840312156156d157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561573f5761573f6156d8565b500290565b60008261577a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000806040838503121561579257600080fd5b825161579d8161518f565b60208401519092506151ed8161540b565b6000828210156157c0576157c06156d8565b500390565b600080604083850312156157d857600080fd5b505080516020909101519092909150565b6000602082840312156157fb57600080fd5b81516131ab816151b1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc183360301811261586957600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126158a857600080fd5b83018035915067ffffffffffffffff8211156158c357600080fd5b6020019150368190038213156152b457600080fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156159185780818660040360031b1b83161692505b505092915050565b6000808585111561593057600080fd5b8386111561593d57600080fd5b5050820193919092039150565b6000806040838503121561595d57600080fd5b82356159688161518f565b946020939093013593505050565b60008219821115615989576159896156d8565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60005b838110156159d85781810151838201526020016159c0565b838111156159e7576000848401525b50505050565b600082516158698184602087016159bd565b6020815260008251806020840152615a1e8160408501602087016159bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea2646970667358221220a3f4a705ab580a6ada1e438cd2ee4abc001b62d1d171fce12c41994900fef21664736f6c634300080a003360a06040523480156200001157600080fd5b5060405162005f3d38038062005f3d8339810160408190526200003491620012eb565b826001600160a01b031663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000073573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200009991906200147f565b6001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000d7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000fd91906200147f565b6000805460ff191690556001600160a01b0381166200012f57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200016e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200019491906200147f565b6001600160a01b03908116608052600180546001600160a01b031916918616918217905560408051636f307dc360e01b81529051919250636f307dc39160048083019260209291908290030181865afa158015620001f6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200021c91906200147f565b600260006101000a8154816001600160a01b0302191690836001600160a01b03160217905550826001600160a01b031663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000281573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a791906200147f565b6001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200030b91906200147f565b600080546001600160a01b039290921661010002610100600160a81b0319909216919091179055620003626103e860c86200034b6101f4612710620014bc565b60646200035c60c8612710620014bc565b620005e8565b60408101515160005b81811015620003ee576000836040015182815181106200038f576200038f620014e2565b6020026020010151600001519050620003ae81620007c260201b60201c565b620003e48185604001518481518110620003cc57620003cc620014e2565b60200260200101516020015162000a5e60201b60201c565b506001016200036b565b5060015460408051632630c12f60e01b815290516001600160a01b03909216916311ca4fc29186918491632630c12f9160048083019260209291908290030181865afa15801562000443573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200046991906200147f565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401600060405180830381600087803b158015620004b257600080fd5b505af1158015620004c7573d6000803e3d6000fd5b50506040516001600160a01b03861692507fa8b21f72cb83bce808df32dc2330217d744a1c22f3e9e44e4b11bbf049d37d9d9150600090a2600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000553573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200057991906200147f565b6001600160a01b03167f3f82447be465b0b5a4a9e54c74d5f6ae73f2e9537f2cc1590a340524703d096160405160405180910390a26020820151620005cb90620005c5906002620014f8565b62000bda565b81516020830151620005de919062000dc8565b5050505062001604565b6000620005f68585620014bc565b60015460405163172c48c760e01b81526000600482018190529293506001600160a01b039091169063172c48c7906024016040805180830381865afa15801562000644573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200066a91906200152a565b9150508061ffff168261ffff1614620006be57620006888262000f47565b60025460405161ffff841681526001600160a01b039091169060008051602062005f1d8339815191529060200160405180910390a25b60015460405163944ac59f60e01b815261ffff808a166004830152808916602483015280881660448301528087166064830152851660848201526001600160a01b039091169063944ac59f9060a401600060405180830381600087803b1580156200072857600080fd5b505af11580156200073d573d6000803e3d6000fd5b505050507f2214a403d5f8d049e52eacca974c6dea01a471e41d6a18903bfaf7dbc709741f878787612710620007749190620014bc565b876200078388612710620014bc565b6040805161ffff96871681529486166020860152928516848401529084166060840152909216608082015290519081900360a00190a150505050505050565b6001600160a01b038116620007ea57604051635919af9760e11b815260040160405180910390fd5b62000809816001600160a01b03166200116f60201b620023381760201c565b620008365760405163df4c572d60e01b81526001600160a01b038216600482015260240160405180910390fd5b6040516370a0823160e01b81523060048201526001600160a01b038216906370a0823190602401602060405180830381865afa92505050801562000899575060408051601f3d908101601f19168201909252620008969181019062001564565b60015b620008b75760405163528ca31d60e01b815260040160405180910390fd5b50600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200090c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200093291906200147f565b604051630f9a650360e41b8152670de0b6b3a764000060048201526001600160a01b038381166024830152919091169063f9a6503090604401602060405180830381865afa925050508015620009a7575060408051601f3d908101601f19168201909252620009a49181019062001564565b60015b620009c5576040516367a7cd4360e01b815260040160405180910390fd5b5060015460405163d48bfca760e01b81526001600160a01b0383811660048301529091169063d48bfca790602401600060405180830381600087803b15801562000a0e57600080fd5b505af115801562000a23573d6000803e3d6000fd5b50506040516001600160a01b03841692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a250565b6002546001600160a01b038381169116141562000a8e57604051633b899cf960e01b815260040160405180910390fd5b60015460405163172c48c760e01b8152600060048201819052916001600160a01b03169063172c48c7906024016040805180830381865afa15801562000ad8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000afe91906200152a565b91505061ffff8216158062000b1a57508061ffff168261ffff16115b1562000b39576040516333c6608d60e01b815260040160405180910390fd5b600154604051635385e2a160e11b81526001600160a01b03858116600483015261ffff851660248301529091169063a70bc54290604401600060405180830381600087803b15801562000b8b57600080fd5b505af115801562000ba0573d6000803e3d6000fd5b505060405161ffff851681526001600160a01b038616925060008051602062005f1d833981519152915060200160405180910390a2505050565b600062000be662001175565b6001600160a01b031663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801562000c24573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c4a91906200157e565b50509050600062000c606200117560201b60201c565b6001600160a01b031663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa15801562000c9d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000cc39190620015d5565b915050806001600160801b0316836001600160801b0316101562000cfa576040516309aadd6f60e41b815260040160405180910390fd5b826001600160801b0316826001600160801b03161462000dc35762000d1e62001175565b604051632715681560e21b81526001600160801b03851660048201526001600160a01b039190911690639c55a05490602401600060405180830381600087803b15801562000d6b57600080fd5b505af115801562000d80573d6000803e3d6000fd5b50506040516001600160801b03861681527fa030eec20ae970821387224ec3bb15b4bd22b89bfb86dc4d2b3827aa3d99e48d925060200190505b60405180910390a15b505050565b600062000dd462001175565b6001600160a01b031663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801562000e12573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e3891906200157e565b50509050816001600160801b0316836001600160801b0316118062000e6e5750806001600160801b0316826001600160801b0316115b1562000e8d576040516309aadd6f60e41b815260040160405180910390fd5b62000e9762001175565b60405163300eb37b60e11b81526001600160801b038086166004830152841660248201526001600160a01b03919091169063601d66f690604401600060405180830381600087803b15801562000eec57600080fd5b505af115801562000f01573d6000803e3d6000fd5b5050604080516001600160801b038088168252861660208201527f4d4981437d0211f9e6843eb024d9ada1fa3a99514d4343d4aece106dd11524bb935001905062000dba565b600154600254604051635385e2a160e11b81526001600160a01b03918216600482015261ffff8416602482015291169063a70bc54290604401600060405180830381600087803b15801562000f9b57600080fd5b505af115801562000fb0573d6000803e3d6000fd5b505050506000600160009054906101000a90046001600160a01b03166001600160a01b031663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200100a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001030919062001564565b905060015b8181101562000dc35760015460405163172c48c760e01b81526004810183905260009182916001600160a01b039091169063172c48c7906024016040805180830381865afa1580156200108c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010b291906200152a565b915091508461ffff168161ffff1611156200116457600154604051635385e2a160e11b81526001600160a01b03848116600483015261ffff881660248301529091169063a70bc54290604401600060405180830381600087803b1580156200111957600080fd5b505af11580156200112e573d6000803e3d6000fd5b505060405161ffff881681526001600160a01b038516925060008051602062005f1d833981519152915060200160405180910390a25b505060010162001035565b3b151590565b60015460408051632f7a188160e01b815290516000926001600160a01b031691632f7a18819160048083019260209291908290030181865afa158015620011c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011e691906200147f565b905090565b6001600160a01b03811681146200120157600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b03811182821017156200123f576200123f62001204565b60405290565b604080519081016001600160401b03811182821017156200123f576200123f62001204565b604051601f8201601f191681016001600160401b038111828210171562001295576200129562001204565b604052919050565b80516001600160801b0381168114620012b557600080fd5b919050565b8051620012b581620011eb565b805161ffff81168114620012b557600080fd5b80518015158114620012b557600080fd5b6000806000606084860312156200130157600080fd5b83516200130e81620011eb565b809350506020808501516200132381620011eb565b604086810151919450906001600160401b03808211156200134357600080fd5b9087019060a0828a0312156200135857600080fd5b620013626200121a565b6200136d836200129d565b81526200137c8584016200129d565b8582015283830151828111156200139257600080fd5b8301601f81018b13620013a457600080fd5b805183811115620013b957620013b962001204565b620013c9878260051b016200126a565b818152878101945060069190911b82018701908c821115620013ea57600080fd5b918701915b81831015620014435786838e031215620014095760008081fd5b6200141362001245565b83516200142081620011eb565b81526200142f848a01620012c7565b818a015285529387019391860191620013ef565b838701525062001458905060608401620012ba565b60608201526200146b60808401620012da565b608082015280955050505050509250925092565b6000602082840312156200149257600080fd5b81516200149f81620011eb565b9392505050565b634e487b7160e01b600052601160045260246000fd5b600061ffff83811690831681811015620014da57620014da620014a6565b039392505050565b634e487b7160e01b600052603260045260246000fd5b60006001600160801b0382811684821681151582840482111615620015215762001521620014a6565b02949350505050565b600080604083850312156200153e57600080fd5b82516200154b81620011eb565b91506200155b60208401620012c7565b90509250929050565b6000602082840312156200157757600080fd5b5051919050565b6000806000606084860312156200159457600080fd5b6200159f846200129d565b9250620015af60208501620012da565b9150604084015164ffffffffff81168114620015ca57600080fd5b809150509250925092565b60008060408385031215620015e957600080fd5b620015f4836200129d565b91506200155b602084016200129d565b608051614878620016a56000396000818161033601528181610446015281816107c5015281816108c0015281816109ae01528181610b8301528181610f0a015281816113e1015281816114cf015281816115bb015281816116ab015281816117990152818161187d01528181611ad901528181611bc601528181611cb301528181611da0015281816120090152818161218c015261227901526148786000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80638456cb59116100f9578063dc2b21c111610097578063f0527ac611610071578063f0527ac6146103d7578063f206d32a146103df578063fb1bd8c4146103f2578063ffd9b9071461040557600080fd5b8063dc2b21c11461039e578063e6492d7b146103b1578063eb9606df146103c457600080fd5b8063a50cf2c8116100d3578063a50cf2c814610331578063a70bc54214610358578063b53472ef1461036b578063c12c21c01461037e57600080fd5b80638456cb59146103035780639c55a0541461030b5780639f1c50691461031e57600080fd5b806350e036ff1161016657806354fd4d501161014057806354fd4d50146102b25780635c975abb146102ba5780636f307dc3146102d05780637bccacee146102f057600080fd5b806350e036ff1461027657806352438e541461028c578063526a41e81461029f57600080fd5b80633e7c88d6116101a25780633e7c88d6146102355780633f4ba83a14610248578063456e0742146102505780635094cb4f1461026357600080fd5b806324147708146101c95780632954018c146101de5780632f7a18811461022d575b600080fd5b6101dc6101d7366004614307565b610418565b005b60005461020390610100900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6102036106fe565b6101dc610243366004614334565b610797565b6101dc610892565b6101dc61025e366004614307565b610980565b61020361027136600461436d565b610b36565b61027e610b49565b604051908152602001610224565b6101dc61029a366004614307565b610b55565b6101dc6102ad366004614394565b610edc565b61027e600281565b60005460ff166040519015158152602001610224565b6002546102039073ffffffffffffffffffffffffffffffffffffffff1681565b6101dc6102fe3660046143c2565b6113b3565b6101dc6114a1565b6101dc61031936600461440e565b61158d565b6101dc61032c36600461442b565b61167d565b6102037f000000000000000000000000000000000000000000000000000000000000000081565b6101dc610366366004614334565b61176b565b6101dc610379366004614307565b61184f565b6001546102039073ffffffffffffffffffffffffffffffffffffffff1681565b6101dc6103ac366004614459565b611aab565b6101dc6103bf366004614307565b611b98565b6101dc6103d236600461448f565b611c85565b6101dc611d72565b6101dc6103ed3660046144ac565b611fdb565b6101dc610400366004614307565b61215e565b6101dc61041336600461451d565b61224b565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156104a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c6919061453a565b6104fc576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006105078261233e565b90506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015610578573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059c9190614557565b90508181166106f9576001546040517fa366f496000000000000000000000000000000000000000000000000000000008152918317600483018190529173ffffffffffffffffffffffffffffffffffffffff9091169063a366f49690602401600060405180830381600087803b15801561061557600080fd5b505af1158015610629573d6000803e3d6000fd5b505050506106356106fe565b6040517fffd9b9070000000000000000000000000000000000000000000000000000000081526001600482015273ffffffffffffffffffffffffffffffffffffffff919091169063ffd9b90790602401600060405180830381600087803b15801561069f57600080fd5b505af11580156106b3573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692507ff17b849746e74d7186170c9553d4bbf60b4f8bb1ed81fe50c099b934fb078f059150600090a25b505050565b600154604080517f2f7a1881000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691632f7a18819160048083019260209291908290030181865afa15801561076e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610792919061457b565b905090565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610821573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610845919061453a565b61087b576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108848261241e565b61088e82826127f8565b5050565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa15801561091c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610940919061453a565b610976576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61097e612a15565b565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610a0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2e919061453a565b610a64576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a6d81612af6565b6001546040517f9f5f86ae00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015290911690639f5f86ae90602401600060405180830381600087803b158015610ada57600080fd5b505af1158015610aee573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507f5a0b7d0f9c24b39256e112a0584b4c5ce38d8f1dee2e7c56f15b852604cdc8869150600090a250565b6000610b43600383612cb8565b92915050565b60006107926003612ccb565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610bdf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c03919061453a565b610c39576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610c86576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063fdd5764590602401602060405180830381865afa158015610cf7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1b919061457b565b905073ffffffffffffffffffffffffffffffffffffffff8116610d6a576040517f1170cc2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f6e98e5e400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526000602483015290911690636e98e5e490604401600060405180830381600087803b158015610dde57600080fd5b505af1158015610df2573d6000803e3d6000fd5b50506001546040517f6e98e5e40000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff86811660248301529091169250636e98e5e49150604401600060405180830381600087803b158015610e6a57600080fd5b505af1158015610e7e573d6000803e3d6000fd5b50505050610e96826003612cd590919063ffffffff16565b5060405173ffffffffffffffffffffffffffffffffffffffff8316907fab9f405bf0c19b97f65a7031634db41569cd2f0e0376a610a1e977f9ab22b58f90600090a25050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610f66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8a919061453a565b610fc0576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fc982612af6565b6000806000610fd66106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015611020573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110449190614598565b9250925092506000806110556106fe565b73ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa15801561109e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c291906145e5565b9150915060006110d06106fe565b73ffffffffffffffffffffffffffffffffffffffff16639be0536a6040518163ffffffff1660e01b8152600401600060405180830381865afa15801561111a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526111609190810190614643565b9050600061116c6106fe565b73ffffffffffffffffffffffffffffffffffffffff1663b1836d326040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111da919061453a565b600154604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905192935073ffffffffffffffffffffffffffffffffffffffff909116916311ca4fc2918c918491632630c12f9160048083019260209291908290030181865afa158015611256573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061127a919061457b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156112e757600080fd5b505af11580156112fb573d6000803e3d6000fd5b5050505087156113675761130e87612cf7565b6113188484612f5d565b61132186613152565b60005b82518110156113575761134f83828151811061134257611342614726565b60200260200101516132a3565b600101611324565b50801561136757611367856133c9565b60405173ffffffffffffffffffffffffffffffffffffffff8a16907fa8b21f72cb83bce808df32dc2330217d744a1c22f3e9e44e4b11bbf049d37d9d90600090a2505050505050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561143d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611461919061453a565b611497576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61088e828261357b565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561152b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061154f919061453a565b611585576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61097e6139c3565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611617573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163b919061453a565b611671576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81612cf7565b50565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611707573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172b919061453a565b611761576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61088e8282612f5d565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156117f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611819919061453a565b610884576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156118d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fd919061453a565b611933576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061193e8261233e565b90506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d39190614557565b9050818116156106f9576001546040517fa366f496000000000000000000000000000000000000000000000000000000008152918318600483018190529173ffffffffffffffffffffffffffffffffffffffff9091169063a366f49690602401600060405180830381600087803b158015611a4d57600080fd5b505af1158015611a61573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a2505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611b35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b59919061453a565b611b8f576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81613a83565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611c22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c46919061453a565b611c7c576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81613b3d565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611d0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d33919061453a565b611d69576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a816133c9565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611dfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e20919061453a565b611e56576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ec4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee8919061457b565b60015490915073ffffffffffffffffffffffffffffffffffffffff166311ca4fc2611f116106fe565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff91821660048201529084166024820152604401600060405180830381600087803b158015611f7f57600080fd5b505af1158015611f93573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507f3f82447be465b0b5a4a9e54c74d5f6ae73f2e9537f2cc1590a340524703d09619150600090a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015612065573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612089919061453a565b6120bf576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61271061ffff86161015806120e357506127106120dc8585614784565b61ffff1610155b806120fd57506127106120f68383614784565b61ffff1610155b15612134576040517f0b361d6900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6121578585612145866127106147aa565b85612152866127106147aa565b613c5c565b5050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156121e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061220c919061453a565b612242576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a816132a3565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156122d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122f9919061453a565b61232f576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81613152565b3b151590565b6001546040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063f67c5bd090602401602060405180830381865afa1580156123af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123d39190614557565b90508015806123e25750806001145b15612419576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b73ffffffffffffffffffffffffffffffffffffffff811661246b576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163b6124d6576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024015b60405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8216906370a0823190602401602060405180830381865afa92505050801561257a575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261257791810190614557565b60015b6125b0576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561261e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612642919061457b565b6040517ff9a65030000000000000000000000000000000000000000000000000000000008152670de0b6b3a7640000600482015273ffffffffffffffffffffffffffffffffffffffff8381166024830152919091169063f9a6503090604401602060405180830381865afa9250505080156126f8575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526126f591810190614557565b60015b61272e576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506001546040517fd48bfca700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301529091169063d48bfca790602401600060405180830381600087803b15801561279c57600080fd5b505af11580156127b0573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a250565b60025473ffffffffffffffffffffffffffffffffffffffff8381169116141561284d576040517f3b899cf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f172c48c70000000000000000000000000000000000000000000000000000000081526000600482018190529173ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa1580156128bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128e091906147cd565b91505061ffff821615806128fb57508061ffff168261ffff16115b15612932576040517f33c6608d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015261ffff851660248301529091169063a70bc54290604401600060405180830381600087803b1580156129a957600080fd5b505af11580156129bd573d6000803e3d6000fd5b505060405161ffff8516815273ffffffffffffffffffffffffffffffffffffffff861692507f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650915060200160405180910390a2505050565b60005460ff16612a81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016124cd565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b73ffffffffffffffffffffffffffffffffffffffff8116612b43576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163b612ba9576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024016124cd565b8073ffffffffffffffffffffffffffffffffffffffff1663c12c21c06040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612c2e575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252612c2b9181019061457b565b60015b612c64576040517fe9eddd1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60015473ffffffffffffffffffffffffffffffffffffffff82811691161461088e576040517fe9eddd1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612cc48383613e92565b9392505050565b6000610b43825490565b6000612cc48373ffffffffffffffffffffffffffffffffffffffff8416613ebc565b6000612d016106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015612d4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d6f9190614598565b505090506000612d7d6106fe565b73ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa158015612dc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dea91906145e5565b915050806fffffffffffffffffffffffffffffffff16836fffffffffffffffffffffffffffffffff161015612e4b576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826fffffffffffffffffffffffffffffffff16826fffffffffffffffffffffffffffffffff16146106f957612e7e6106fe565b6040517f9c55a0540000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff8516600482015273ffffffffffffffffffffffffffffffffffffffff9190911690639c55a05490602401600060405180830381600087803b158015612ef957600080fd5b505af1158015612f0d573d6000803e3d6000fd5b50506040516fffffffffffffffffffffffffffffffff861681527fa030eec20ae970821387224ec3bb15b4bd22b89bfb86dc4d2b3827aa3d99e48d925060200190505b60405180910390a1505050565b6000612f676106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015612fb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fd59190614598565b50509050816fffffffffffffffffffffffffffffffff16836fffffffffffffffffffffffffffffffff16118061302e5750806fffffffffffffffffffffffffffffffff16826fffffffffffffffffffffffffffffffff16115b15613065576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61306d6106fe565b6040517f601d66f60000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff80861660048301528416602482015273ffffffffffffffffffffffffffffffffffffffff919091169063601d66f690604401600060405180830381600087803b1580156130f057600080fd5b505af1158015613104573d6000803e3d6000fd5b5050604080516fffffffffffffffffffffffffffffffff8088168252861660208201527f4d4981437d0211f9e6843eb024d9ada1fa3a99514d4343d4aece106dd11524bb9350019050612f50565b600061315c6106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa1580156131a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131ca9190614598565b509150508015158215151461088e576131e16106fe565b6040517fffd9b907000000000000000000000000000000000000000000000000000000008152831515600482015273ffffffffffffffffffffffffffffffffffffffff919091169063ffd9b90790602401600060405180830381600087803b15801561324c57600080fd5b505af1158015613260573d6000803e3d6000fd5b505050507ff97ba903470ff3262b4a68a938fe81def401bac1bd742169d2e8d5c4ed2185d382604051613297911515815260200190565b60405180910390a15050565b73ffffffffffffffffffffffffffffffffffffffff81166132f0576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6132f86106fe565b6040517fb55bb84b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152919091169063b55bb84b90602401600060405180830381600087803b15801561336357600080fd5b505af1158015613377573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841681527fdac9a7995cbc0c0f01d78970fb6fd0b52fe0fe869eb6635e65cc1b5682b8325c925060200190505b60405180910390a150565b60006133d36106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801561341d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134419190614598565b925050508064ffffffffff168264ffffffffff161461088e578164ffffffffff168164ffffffffff16118061347c57508164ffffffffff1642115b156134b3576040517fe4eaca7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134bb6106fe565b6040517feb9606df00000000000000000000000000000000000000000000000000000000815264ffffffffff8416600482015273ffffffffffffffffffffffffffffffffffffffff919091169063eb9606df90602401600060405180830381600087803b15801561352b57600080fd5b505af115801561353f573d6000803e3d6000fd5b505060405164ffffffffff851681527f0b3eb35ba750e7a7e4d26c9eee3d226f4e1f68c5568f4a3d051c94b241b02ac092506020019050613297565b73ffffffffffffffffffffffffffffffffffffffff82166135c8576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82163b61362e576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016124cd565b61363781612af6565b60015473ffffffffffffffffffffffffffffffffffffffff8381169116148061369257506136636106fe565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b806136b7575060015473ffffffffffffffffffffffffffffffffffffffff8281169116145b806136f457506136c56106fe565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b1561372b576040517f727de5c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517fff68754300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063ff68754390602401602060405180830381865afa15801561379c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137c0919061457b565b73ffffffffffffffffffffffffffffffffffffffff1614158061388c57506001546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063fdd5764590602401602060405180830381865afa15801561384f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613873919061457b565b73ffffffffffffffffffffffffffffffffffffffff1614155b156138c3576040517f21ff1e7100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f6e98e5e400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152848116602483015290911690636e98e5e490604401600060405180830381600087803b15801561393857600080fd5b505af115801561394c573d6000803e3d6000fd5b50505050613964826003613faf90919063ffffffff16565b508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4bcbefaef68b99503d502f5a6abe7bca2b183ab8ac55457013c77d084ebd130560405160405180910390a35050565b60005460ff1615613a30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016124cd565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612acc3390565b6001546040517fdc2b21c100000000000000000000000000000000000000000000000000000000815260ff8316600482015273ffffffffffffffffffffffffffffffffffffffff9091169063dc2b21c190602401600060405180830381600087803b158015613af157600080fd5b505af1158015613b05573d6000803e3d6000fd5b505060405160ff841681527f73caacd705657a7d283e48ecf288b73bc517e3aea1bbc9da2fd54a979e8aa950925060200190506133be565b73ffffffffffffffffffffffffffffffffffffffff8116613b8a576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613b926106fe565b6040517fdcf6548200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152919091169063dcf6548290602401600060405180830381600087803b158015613bfd57600080fd5b505af1158015613c11573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841681527f32e53e2e527af8518ae889e5f7e674bc83f7cf68e4cc059aceeaa0e64208b85b925060200190506133be565b6000613c6885856147aa565b6001546040517f172c48c700000000000000000000000000000000000000000000000000000000815260006004820181905292935073ffffffffffffffffffffffffffffffffffffffff9091169063172c48c7906024016040805180830381865afa158015613cdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cff91906147cd565b9150508061ffff168261ffff1614613d6e57613d1a82613fd1565b60025460405161ffff8416815273ffffffffffffffffffffffffffffffffffffffff909116907f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac6509060200160405180910390a25b6001546040517f944ac59f00000000000000000000000000000000000000000000000000000000815261ffff808a1660048301528089166024830152808816604483015280871660648301528516608482015273ffffffffffffffffffffffffffffffffffffffff9091169063944ac59f9060a401600060405180830381600087803b158015613dfd57600080fd5b505af1158015613e11573d6000803e3d6000fd5b505050507f2214a403d5f8d049e52eacca974c6dea01a471e41d6a18903bfaf7dbc709741f878787612710613e4691906147aa565b87613e53886127106147aa565b6040805161ffff96871681529486166020860152928516848401529084166060840152909216608082015290519081900360a00190a150505050505050565b6000826000018281548110613ea957613ea9614726565b9060005260206000200154905092915050565b60008181526001830160205260408120548015613fa5576000613ee06001836147fc565b8554909150600090613ef4906001906147fc565b9050818114613f59576000866000018281548110613f1457613f14614726565b9060005260206000200154905080876000018481548110613f3757613f37614726565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080613f6a57613f6a614813565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610b43565b6000915050610b43565b6000612cc48373ffffffffffffffffffffffffffffffffffffffff8416614296565b6001546002546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015261ffff8416602482015291169063a70bc54290604401600060405180830381600087803b15801561404a57600080fd5b505af115801561405e573d6000803e3d6000fd5b505050506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156140d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140f59190614557565b905060015b818110156106f9576001546040517f172c48c700000000000000000000000000000000000000000000000000000000815260048101839052600091829173ffffffffffffffffffffffffffffffffffffffff9091169063172c48c7906024016040805180830381865afa158015614175573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061419991906147cd565b915091508461ffff168161ffff16111561428c576001546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015261ffff881660248301529091169063a70bc54290604401600060405180830381600087803b15801561422457600080fd5b505af1158015614238573d6000803e3d6000fd5b505060405161ffff8816815273ffffffffffffffffffffffffffffffffffffffff851692507f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650915060200160405180910390a25b50506001016140fa565b60008181526001830160205260408120546142dd57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610b43565b506000610b43565b73ffffffffffffffffffffffffffffffffffffffff8116811461167a57600080fd5b60006020828403121561431957600080fd5b8135612cc4816142e5565b61ffff8116811461167a57600080fd5b6000806040838503121561434757600080fd5b8235614352816142e5565b9150602083013561436281614324565b809150509250929050565b60006020828403121561437f57600080fd5b5035919050565b801515811461167a57600080fd5b600080604083850312156143a757600080fd5b82356143b2816142e5565b9150602083013561436281614386565b600080604083850312156143d557600080fd5b82356143e0816142e5565b91506020830135614362816142e5565b6fffffffffffffffffffffffffffffffff8116811461167a57600080fd5b60006020828403121561442057600080fd5b8135612cc4816143f0565b6000806040838503121561443e57600080fd5b8235614449816143f0565b91506020830135614362816143f0565b60006020828403121561446b57600080fd5b813560ff81168114612cc457600080fd5b64ffffffffff8116811461167a57600080fd5b6000602082840312156144a157600080fd5b8135612cc48161447c565b600080600080600060a086880312156144c457600080fd5b85356144cf81614324565b945060208601356144df81614324565b935060408601356144ef81614324565b925060608601356144ff81614324565b9150608086013561450f81614324565b809150509295509295909350565b60006020828403121561452f57600080fd5b8135612cc481614386565b60006020828403121561454c57600080fd5b8151612cc481614386565b60006020828403121561456957600080fd5b5051919050565b8051612419816142e5565b60006020828403121561458d57600080fd5b8151612cc4816142e5565b6000806000606084860312156145ad57600080fd5b83516145b8816143f0565b60208501519093506145c981614386565b60408501519092506145da8161447c565b809150509250925092565b600080604083850312156145f857600080fd5b8251614603816143f0565b6020840151909250614362816143f0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000602080838503121561465657600080fd5b825167ffffffffffffffff8082111561466e57600080fd5b818501915085601f83011261468257600080fd5b81518181111561469457614694614614565b8060051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f830116810181811085821117156146d7576146d7614614565b6040529182528482019250838101850191888311156146f557600080fd5b938501935b8285101561471a5761470b85614570565b845293850193928501926146fa565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061ffff8083168185168083038211156147a1576147a1614755565b01949350505050565b600061ffff838116908316818110156147c5576147c5614755565b039392505050565b600080604083850312156147e057600080fd5b82516147eb816142e5565b602084015190925061436281614324565b60008282101561480e5761480e614755565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea264697066735822122046c364b67d38a3dd85b57e027716324d90dd1df102f265f0a0e2697babdb3f3b64736f6c634300080a003394525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650a26469706673582212200cb4b630731d451e401243bedd6b1b2f488e352f3f700d746dc7d9e9b1420c2f64736f6c634300080a0033"; - -type CurveV1Adapter2AssetsTestConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: CurveV1Adapter2AssetsTestConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class CurveV1Adapter2AssetsTest__factory extends ContractFactory { - constructor(...args: CurveV1Adapter2AssetsTestConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): CurveV1Adapter2AssetsTest { - return super.attach(address) as CurveV1Adapter2AssetsTest; - } - override connect(signer: Signer): CurveV1Adapter2AssetsTest__factory { - return super.connect(signer) as CurveV1Adapter2AssetsTest__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): CurveV1Adapter2AssetsTestInterface { - return new utils.Interface(_abi) as CurveV1Adapter2AssetsTestInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): CurveV1Adapter2AssetsTest { - return new Contract( - address, - _abi, - signerOrProvider - ) as CurveV1Adapter2AssetsTest; - } -} diff --git a/src/types/factories/contracts/test/adapters/CurveV1Adapter_2AssetsTest.t.sol/index.ts b/src/types/factories/contracts/test/adapters/CurveV1Adapter_2AssetsTest.t.sol/index.ts deleted file mode 100644 index 64d2e38e..00000000 --- a/src/types/factories/contracts/test/adapters/CurveV1Adapter_2AssetsTest.t.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { CurveV1Adapter2AssetsTest__factory } from "./CurveV1Adapter2AssetsTest__factory"; diff --git a/src/types/factories/contracts/test/adapters/CurveV1Adapter_3AssetsTest.t.sol/CurveV1Adapter3AssetsTest__factory.ts b/src/types/factories/contracts/test/adapters/CurveV1Adapter_3AssetsTest.t.sol/CurveV1Adapter3AssetsTest__factory.ts deleted file mode 100644 index 66b3152a..00000000 --- a/src/types/factories/contracts/test/adapters/CurveV1Adapter_3AssetsTest.t.sol/CurveV1Adapter3AssetsTest__factory.ts +++ /dev/null @@ -1,831 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - CurveV1Adapter3AssetsTest, - CurveV1Adapter3AssetsTestInterface, -} from "../../../../../contracts/test/adapters/CurveV1Adapter_3AssetsTest.t.sol/CurveV1Adapter3AssetsTest"; - -const _abi = [ - { - inputs: [], - name: "IncorrectIndexException", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "TokenIsNotInAllowedList", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "onBehalfOf", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "token", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "AddCollateral", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - ], - name: "CloseCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "DecreaseBorrowedAmount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "target", - type: "address", - }, - ], - name: "ExecuteOrder", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "IncreaseBorrowedAmount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "liquidator", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "remainingFunds", - type: "uint256", - }, - ], - name: "LiquidateCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "liquidator", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "remainingFunds", - type: "uint256", - }, - ], - name: "LiquidateExpiredCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [], - name: "MultiCallFinished", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - ], - name: "MultiCallStarted", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newConfigurator", - type: "address", - }, - ], - name: "NewConfigurator", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "onBehalfOf", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "borrowAmount", - type: "uint256", - }, - { - indexed: false, - internalType: "uint16", - name: "referralCode", - type: "uint16", - }, - ], - name: "OpenCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "token", - type: "address", - }, - ], - name: "TokenDisabled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "token", - type: "address", - }, - ], - name: "TokenEnabled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "oldOwner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "TransferAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "bool", - name: "state", - type: "bool", - }, - ], - name: "TransferAccountAllowed", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "", - type: "address", - }, - ], - name: "log_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "log_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - name: "log_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "int256", - name: "", - type: "int256", - }, - ], - name: "log_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "address", - name: "val", - type: "address", - }, - ], - name: "log_named_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes", - name: "val", - type: "bytes", - }, - ], - name: "log_named_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes32", - name: "val", - type: "bytes32", - }, - ], - name: "log_named_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - ], - name: "log_named_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "string", - name: "val", - type: "string", - }, - ], - name: "log_named_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - ], - name: "log_named_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "log_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "logs", - type: "event", - }, - { - inputs: [], - name: "IS_TEST", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "adapter", - outputs: [ - { - internalType: "contract CurveV1Adapter3Assets", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "cft", - outputs: [ - { - internalType: "contract CreditFacadeTestSuite", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditConfigurator", - outputs: [ - { - internalType: "contract CreditConfigurator", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditFacade", - outputs: [ - { - internalType: "contract CreditFacade", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditManager", - outputs: [ - { - internalType: "contract ICreditManagerV2", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "curveV1Mock", - outputs: [ - { - internalType: "contract CurveV1Mock_3Assets", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "failed", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "setUp", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_ACV1_3_01_constructor_sets_correct_values", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_ACV1_3_02A_constructor_reverts_for_unknown_addresses", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_ACV1_3_02_constructor_reverts_for_zero_addresses", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_ACV1_3_03_liquidity_functions_revert_if_user_has_no_account", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_ACV1_3_04_add_liquidity_works_as_expected", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_ACV1_3_05_remove_liquidity_works_as_expected", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_ACV1_3_06_remove_liquidity_imbalance_works_as_expected", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "underlying", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x60806040526000805460ff1916600190811790915580546001600160a01b031916737109709ecfa91a80626ff3989d68f67f5b1dd12d1790553480156200004557600080fd5b5062064bbe80620000576000396000f3fe60806040523480156200001157600080fd5b5060043610620001325760003560e01c80636f307dc311620000c0578063cf0284c8116200008b578063df514433116200006e578063df5144331462000273578063f9aa028a1462000294578063fa7626d414620002b557600080fd5b8063cf0284c8146200025f578063ddd304d0146200026957600080fd5b80636f307dc314620001f85780639d2605891462000219578063ba414fa61462000223578063c12c21c0146200023e57600080fd5b80632b61964e11620001015780632b61964e14620001b95780632f7a188114620001c35780635564cb9a14620001e457806359c89a9014620001ee57600080fd5b806303eadcfc14620001375780630a9254e414620001825780631b7fc35c146200018e57806329d351d81462000198575b600080fd5b601054620001589073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6200018c620002c3565b005b6200018c62000328565b601154620001589073ffffffffffffffffffffffffffffffffffffffff1681565b6200018c62000818565b600354620001589073ffffffffffffffffffffffffffffffffffffffff1681565b6200018c62000d1b565b6200018c62001182565b600654620001589073ffffffffffffffffffffffffffffffffffffffff1681565b6200018c620017eb565b6200022d62001ba3565b604051901515815260200162000179565b600254620001589073ffffffffffffffffffffffffffffffffffffffff1681565b6200018c62001d0d565b6200018c620021a5565b600554620001589073ffffffffffffffffffffffffffffffffffffffff1681565b600454620001589073ffffffffffffffffffffffffffffffffffffffff1681565b6000546200022d9060ff1681565b620002cf600362002859565b6007546011805473ffffffffffffffffffffffffffffffffffffffff9283167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560085460108054919093169116179055565b60005b6003811015620008155760006200034360036200463b565b905060008183815181106200035c576200035c6200950a565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508081604051620003a690620093ad565b620003b39291906200958c565b604051809103906000f080158015620003d0573d6000803e3d6000fd5b50601180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169182179055604080517f82c630660000000000000000000000000000000000000000000000000000000081529051600092916382c630669160048083019260209291908290030181865afa1580156200046d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004939190620095e1565b6005546040517f9dd55b4500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80841660048301526305f5e1006024830152929350911690639dd55b4590604401600060405180830381600087803b1580156200050d57600080fd5b505af115801562000522573d6000803e3d6000fd5b50506001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b158015620005a657600080fd5b505af1158015620005bb573d6000803e3d6000fd5b5050600480546040517f3e7c88d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811693820193909352612260602482015291169250633e7c88d69150604401600060405180830381600087803b1580156200063757600080fd5b505af11580156200064c573d6000803e3d6000fd5b50506001546040805160048082526024820183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fb2335f2e0000000000000000000000000000000000000000000000000000000017905291517ff28dceb300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909316945063f28dceb39350620006fc9290910162009683565b600060405180830381600087803b1580156200071757600080fd5b505af11580156200072c573d6000803e3d6000fd5b505060025460115460405173ffffffffffffffffffffffffffffffffffffffff92831694509116915083906000906200076590620093bb565b73ffffffffffffffffffffffffffffffffffffffff9485168152928416602084015290831660408301529091166060820152608001604051809103906000f080158015620007b7573d6000803e3d6000fd5b50601080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055508190506200080c81620096c7565b9150506200032b565b50565b60005b6002811015620008155780151562000832620002c3565b60006200083e62004cc9565b506011549091506200087b9073ffffffffffffffffffffffffffffffffffffffff1662000875670de0b6b3a7640000606462009703565b620050b0565b6000604051806060016040528060008152602001600081526020016005670de0b6b3a764000061a410620008b0919062009703565b620008bc919062009743565b9052905060007f9fdaea0c0000000000000000000000000000000000000000000000000000000082620008f9670de0b6b3a7640000603762009703565b6040516024016200090c929190620097a4565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529050620009af73f39fd6e51aad88f6f4ce6ab8827279cfffb92266826003858862005564565b8315620009e157601054620009db9073ffffffffffffffffffffffffffffffffffffffff16826200558a565b62000b04565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b15801562000a6157600080fd5b505af115801562000a76573d6000803e3d6000fd5b505060105473ffffffffffffffffffffffffffffffffffffffff169150639fdaea0c90508362000ab0670de0b6b3a7640000603762009703565b6040518363ffffffff1660e01b815260040162000acf929190620097a4565b600060405180830381600087803b15801562000aea57600080fd5b505af115801562000aff573d6000803e3d6000fd5b505050505b62000b136007846000620056b4565b62000b226008846000620056b4565b62000b53600984600562000b41670de0b6b3a764000061a41062009703565b62000b4d919062009743565b620056b4565b601154604080517ffc0c546a000000000000000000000000000000000000000000000000000000008152905162000c299273ffffffffffffffffffffffffffffffffffffffff169163fc0c546a9160048083019260209291908290030181865afa15801562000bc6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000bec9190620095e1565b8462000c02670de0b6b3a7640000603762009703565b62000c17670de0b6b3a7640000606462009703565b62000c239190620097c1565b620056d6565b601154604080517ffc0c546a000000000000000000000000000000000000000000000000000000008152905162000ce59273ffffffffffffffffffffffffffffffffffffffff169163fc0c546a9160048083019260209291908290030181865afa15801562000c9c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000cc29190620095e1565b601154859073ffffffffffffffffffffffffffffffffffffffff166000620056f3565b62000cf36008600062005717565b62000d016009600162005717565b50505050808062000d1290620096c7565b9150506200081b565b601054604080517f0dfe1681000000000000000000000000000000000000000000000000000000008152905162000e929273ffffffffffffffffffffffffffffffffffffffff1691630dfe16819160048083019260209291908290030181865afa15801562000d8e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000db49190620095e1565b6000546040517f67b426450000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff16906367b426459062000e129060079060040162009846565b602060405180830381865afa15801562000e30573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e569190620095e1565b6040518060400160405280601081526020017f496e636f727265637420746f6b656e300000000000000000000000000000000081525062005737565b601054604080517fd21220a70000000000000000000000000000000000000000000000000000000081529051620010099273ffffffffffffffffffffffffffffffffffffffff169163d21220a79160048083019260209291908290030181865afa15801562000f05573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000f2b9190620095e1565b6000546040517f67b426450000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff16906367b426459062000f899060089060040162009846565b602060405180830381865afa15801562000fa7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000fcd9190620095e1565b6040518060400160405280601081526020017f496e636f727265637420746f6b656e310000000000000000000000000000000081525062005737565b601054604080517f25be124e0000000000000000000000000000000000000000000000000000000081529051620011809273ffffffffffffffffffffffffffffffffffffffff16916325be124e9160048083019260209291908290030181865afa1580156200107c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010a29190620095e1565b6000546040517f67b426450000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff16906367b4264590620011009060099060040162009846565b602060405180830381865afa1580156200111e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011449190620095e1565b6040518060400160405280601081526020017f496e636f727265637420746f6b656e320000000000000000000000000000000081525062005737565b565b60005b6003811015620008155760006200119d60036200463b565b6000546040517f67b4264500000000000000000000000000000000000000000000000000000000815291925062010000900473ffffffffffffffffffffffffffffffffffffffff16906367b4264590620011fd9060069060040162009846565b602060405180830381865afa1580156200121b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620012419190620095e1565b8183815181106200125657620012566200950a565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508081604051620012a090620093ad565b620012ad9291906200958c565b604051809103906000f080158015620012ca573d6000803e3d6000fd5b50601180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169182179055604080517f82c630660000000000000000000000000000000000000000000000000000000081529051600092916382c630669160048083019260209291908290030181865afa15801562001367573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200138d9190620095e1565b6005546040517f9dd55b4500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80841660048301526305f5e1006024830152929350911690639dd55b4590604401600060405180830381600087803b1580156200140757600080fd5b505af11580156200141c573d6000803e3d6000fd5b50506001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b158015620014a057600080fd5b505af1158015620014b5573d6000803e3d6000fd5b5050600480546040517f3e7c88d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811693820193909352612260602482015291169250633e7c88d69150604401600060405180830381600087803b1580156200153157600080fd5b505af115801562001546573d6000803e3d6000fd5b50506001546000546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316945063f28dceb393507f98c0f5f2000000000000000000000000000000000000000000000000000000009262010000909204909116906367b4264590620015d99060069060040162009846565b602060405180830381865afa158015620015f7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200161d9190620095e1565b60405173ffffffffffffffffffffffffffffffffffffffff9091166024820152604401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e084901b9092168252620016d29160040162009683565b600060405180830381600087803b158015620016ed57600080fd5b505af115801562001702573d6000803e3d6000fd5b505060025460115460405173ffffffffffffffffffffffffffffffffffffffff92831694509116915083906000906200173b90620093bb565b73ffffffffffffffffffffffffffffffffffffffff9485168152928416602084015290831660408301529091166060820152608001604051809103906000f0801580156200178d573d6000803e3d6000fd5b50601080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550819050620017e281620096c7565b91505062001185565b604080516060810182526001808252600260208301526003828401525491517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb5ba4c4d000000000000000000000000000000000000000000000000000000006004820152909173ffffffffffffffffffffffffffffffffffffffff169063c31eb0e090602401600060405180830381600087803b1580156200189057600080fd5b505af1158015620018a5573d6000803e3d6000fd5b50506010546040517f4515cef300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169250634515cef3915062001904908490600090600401620097a4565b600060405180830381600087803b1580156200191f57600080fd5b505af115801562001934573d6000803e3d6000fd5b50506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb5ba4c4d00000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff909116925063c31eb0e09150602401600060405180830381600087803b158015620019c457600080fd5b505af1158015620019d9573d6000803e3d6000fd5b50506010546040517fecb586a500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116925063ecb586a5915062001a389060009085906004016200985c565b600060405180830381600087803b15801562001a5357600080fd5b505af115801562001a68573d6000803e3d6000fd5b50506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb5ba4c4d00000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff909116925063c31eb0e09150602401600060405180830381600087803b15801562001af857600080fd5b505af115801562001b0d573d6000803e3d6000fd5b50506010546040517f9fdaea0c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169250639fdaea0c915062001b6c908490600190600401620097a4565b600060405180830381600087803b15801562001b8757600080fd5b505af115801562001b9c573d6000803e3d6000fd5b5050505050565b60008054610100900460ff161562001bc45750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1562001d085760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000008284015282518083038401815260608301909352600092909162001c6c917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc49160800162009872565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905262001ca691620098bc565b6000604051808303816000865af19150503d806000811462001ce5576040519150601f19603f3d011682016040523d82523d6000602084013e62001cea565b606091505b509150508080602001905181019062001d049190620098da565b9150505b919050565b60005b6002811015620008155780151562001d27620002c3565b600062001d3362004cc9565b5060115490915062001d6a9073ffffffffffffffffffffffffffffffffffffffff1662000875670de0b6b3a7640000606462009703565b600060405180606001604052806004670de0b6b3a7640000614e2062001d91919062009703565b62001d9d919062009743565b815260200162001db460036404a817c80062009743565b8152602001600562001dd1670de0b6b3a764000061a41062009703565b62001ddd919062009743565b9052905060007fecb586a50000000000000000000000000000000000000000000000000000000062001e19670de0b6b3a7640000603762009703565b8360405160240162001e2d9291906200985c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152905062001ecf73f39fd6e51aad88f6f4ce6ab8827279cfffb9226682600387620057b0565b831562001f015760105462001efb9073ffffffffffffffffffffffffffffffffffffffff16826200558a565b62002024565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b15801562001f8157600080fd5b505af115801562001f96573d6000803e3d6000fd5b505060105473ffffffffffffffffffffffffffffffffffffffff16915063ecb586a5905062001fcf670de0b6b3a7640000603762009703565b846040518363ffffffff1660e01b815260040162001fef9291906200985c565b600060405180830381600087803b1580156200200a57600080fd5b505af11580156200201f573d6000803e3d6000fd5b505050505b62002043600784600462000b41670de0b6b3a7640000614e2062009703565b6200205c60088462000b4d60036404a817c80062009743565b6200207b600984600562000b41670de0b6b3a764000061a41062009703565b601154604080517ffc0c546a0000000000000000000000000000000000000000000000000000000081529051620020ee9273ffffffffffffffffffffffffffffffffffffffff169163fc0c546a9160048083019260209291908290030181865afa15801562000bc6573d6000803e3d6000fd5b601154604080517ffc0c546a0000000000000000000000000000000000000000000000000000000081529051620021619273ffffffffffffffffffffffffffffffffffffffff169163fc0c546a9160048083019260209291908290030181865afa15801562000c9c573d6000803e3d6000fd5b6200216f6007600162005717565b6200217d6008600162005717565b6200218b6009600162005717565b5050505080806200219c90620096c7565b91505062001d10565b60005b60028110156200081557801515620021bf620002c3565b6000620021cb62004cc9565b509050620021f06007620021ea670de0b6b3a7640000614e2062009703565b620057eb565b6200220260086404a817c800620057eb565b6200221e6009620021ea670de0b6b3a764000061a41062009703565b6011546200224990600790839073ffffffffffffffffffffffffffffffffffffffff16600062005d9f565b6011546200227490600890839073ffffffffffffffffffffffffffffffffffffffff16600062005d9f565b6011546200229f90600990839073ffffffffffffffffffffffffffffffffffffffff16600062005d9f565b600060405180606001604052806004670de0b6b3a7640000614e20620022c6919062009703565b620022d2919062009743565b8152602001620022e960036404a817c80062009743565b8152602001600562002306670de0b6b3a764000061a41062009703565b62002312919062009743565b9052905060007f4515cef300000000000000000000000000000000000000000000000000000000826200234f670de0b6b3a7640000603762009703565b60405160240162002362929190620097a4565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290506200240473f39fd6e51aad88f6f4ce6ab8827279cfffb922668260038762005dbd565b83156200243657601054620024309073ffffffffffffffffffffffffffffffffffffffff16826200558a565b62002559565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b158015620024b657600080fd5b505af1158015620024cb573d6000803e3d6000fd5b505060105473ffffffffffffffffffffffffffffffffffffffff169150634515cef390508362002505670de0b6b3a7640000603762009703565b6040518363ffffffff1660e01b815260040162002524929190620097a4565b600060405180830381600087803b1580156200253f57600080fd5b505af115801562002554573d6000803e3d6000fd5b505050505b620025a6600784600462002578670de0b6b3a7640000614e2062009703565b62002584919062009743565b6200259a670de0b6b3a7640000614e2062009703565b62000b4d9190620097c1565b620025d0600884620025bf60036404a817c80062009743565b62000b4d906404a817c800620097c1565b620026116009846005620025ef670de0b6b3a764000061a41062009703565b620025fb919062009743565b6200259a670de0b6b3a764000061a41062009703565b601154604080517ffc0c546a0000000000000000000000000000000000000000000000000000000081529051620026c09273ffffffffffffffffffffffffffffffffffffffff169163fc0c546a9160048083019260209291908290030181865afa15801562002684573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620026aa9190620095e1565b8462000c23670de0b6b3a7640000603762009703565b601154604080517ffc0c546a0000000000000000000000000000000000000000000000000000000081529051620027619273ffffffffffffffffffffffffffffffffffffffff169163fc0c546a9160048083019260209291908290030181865afa15801562002733573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620027599190620095e1565b600162005df8565b601154620027ab90600790859073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62005d9f565b601154620027f590600890859073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62005d9f565b6011546200283f90600990859073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62005d9f565b5050505080806200285090620096c7565b915050620021a8565b6200286362005e14565b604080516080810190915280600781526020016008815260200160098152602001600a90526200289890600d906004620093c9565b5060408051608081019091528060018152602001600281526020016005815260200160049052620028ce90600e906004620093c9565b506000620028dc826200463b565b90506000620028eb8362005e20565b90506000836002141562002d34578282604051620029099062009474565b620029169291906200958c565b604051809103906000f08015801562002933573d6000803e3d6000fd5b50600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600554604080517f2954018c00000000000000000000000000000000000000000000000000000000815290519190921691632954018c9160048083019260209291908290030181865afa158015620029d1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620029f79190620095e1565b600754600554604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691632630c12f916004808201926020929091908290030181865afa15801562002a6f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002a959190620095e1565b73ffffffffffffffffffffffffffffffffffffffff16639dcb511a8660008151811062002ac65762002ac66200950a565b60200260200101516040518263ffffffff1660e01b815260040162002b07919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa15801562002b25573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002b4b9190620095e1565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002bb9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002bdf9190620095e1565b73ffffffffffffffffffffffffffffffffffffffff16639dcb511a8760018151811062002c105762002c106200950a565b60200260200101516040518263ffffffff1660e01b815260040162002c51919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa15801562002c6f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002c959190620095e1565b60405162002ca39062009482565b73ffffffffffffffffffffffffffffffffffffffff948516815292841660208401529083166040830152909116606082015260a0608082018190526011908201527f43757276654c503250726963654665656400000000000000000000000000000060c082015260e0015b604051809103906000f08015801562002d2b573d6000803e3d6000fd5b50905062003a00565b8360031415620032aa57828260405162002d4e90620093ad565b62002d5b9291906200958c565b604051809103906000f08015801562002d78573d6000803e3d6000fd5b50600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600554604080517f2954018c00000000000000000000000000000000000000000000000000000000815290519190921691632954018c9160048083019260209291908290030181865afa15801562002e16573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002e3c9190620095e1565b600754600554604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691632630c12f916004808201926020929091908290030181865afa15801562002eb4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002eda9190620095e1565b73ffffffffffffffffffffffffffffffffffffffff16639dcb511a8660008151811062002f0b5762002f0b6200950a565b60200260200101516040518263ffffffff1660e01b815260040162002f4c919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa15801562002f6a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002f909190620095e1565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002ffe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620030249190620095e1565b73ffffffffffffffffffffffffffffffffffffffff16639dcb511a876001815181106200305557620030556200950a565b60200260200101516040518263ffffffff1660e01b815260040162003096919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa158015620030b4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620030da9190620095e1565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562003148573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200316e9190620095e1565b73ffffffffffffffffffffffffffffffffffffffff16639dcb511a886002815181106200319f576200319f6200950a565b60200260200101516040518263ffffffff1660e01b8152600401620031e0919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa158015620031fe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620032249190620095e1565b604051620032329062009490565b73ffffffffffffffffffffffffffffffffffffffff95861681529385166020850152918416604084015283166060830152909116608082015260c060a082018190526011908201527f43757276654c503350726963654665656400000000000000000000000000000060e08201526101000162002d0e565b836004141562003973578282604051620032c4906200949e565b620032d19291906200958c565b604051809103906000f080158015620032ee573d6000803e3d6000fd5b50600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600554604080517f2954018c00000000000000000000000000000000000000000000000000000000815290519190921691632954018c9160048083019260209291908290030181865afa1580156200338c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620033b29190620095e1565b600754600554604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691632630c12f916004808201926020929091908290030181865afa1580156200342a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620034509190620095e1565b73ffffffffffffffffffffffffffffffffffffffff16639dcb511a866000815181106200348157620034816200950a565b60200260200101516040518263ffffffff1660e01b8152600401620034c2919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa158015620034e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620035069190620095e1565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562003574573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200359a9190620095e1565b73ffffffffffffffffffffffffffffffffffffffff16639dcb511a87600181518110620035cb57620035cb6200950a565b60200260200101516040518263ffffffff1660e01b81526004016200360c919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa1580156200362a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620036509190620095e1565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620036be573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620036e49190620095e1565b73ffffffffffffffffffffffffffffffffffffffff16639dcb511a886002815181106200371557620037156200950a565b60200260200101516040518263ffffffff1660e01b815260040162003756919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa15801562003774573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200379a9190620095e1565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562003808573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200382e9190620095e1565b73ffffffffffffffffffffffffffffffffffffffff16639dcb511a896003815181106200385f576200385f6200950a565b60200260200101516040518263ffffffff1660e01b8152600401620038a0919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa158015620038be573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620038e49190620095e1565b604051620038f290620094ac565b73ffffffffffffffffffffffffffffffffffffffff96871681529486166020860152928516604085015290841660608401528316608083015290911660a082015260e060c082018190526011908201527f43757276654c50345072696365466565640000000000000000000000000000006101008201526101200162002d0e565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f636f7374727563746f723a20496e636f7272656374206e436f696e732070617260448201527f616d65746572000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562003a6e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003a949190620095e1565b600f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283161790556001546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201529116906306447d5690602401600060405180830381600087803b15801562003b3f57600080fd5b505af115801562003b54573d6000803e3d6000fd5b50505050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562003bc6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003bec9190620095e1565b600f546040517fe8a97a3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152838216602482015291169063e8a97a3e90604401600060405180830381600087803b15801562003c6157600080fd5b505af115801562003c76573d6000803e3d6000fd5b505060048054600f546040517f3e7c88d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216938101939093526124546024840152169250633e7c88d69150604401600060405180830381600087803b15801562003cf457600080fd5b505af115801562003d09573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562003d7857600080fd5b505af115801562003d8d573d6000803e3d6000fd5b50505050836002141562003e7457600254600754600f5460405173ffffffffffffffffffffffffffffffffffffffff93841693928316929091169060009062003dd690620094ba565b73ffffffffffffffffffffffffffffffffffffffff9485168152928416602084015290831660408301529091166060820152608001604051809103906000f08015801562003e28573d6000803e3d6000fd5b50600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905562003efe565b836003141562003eb957600254600754600f5460405173ffffffffffffffffffffffffffffffffffffffff93841693928316929091169060009062003dd690620093bb565b83600414156200397357600254600754600f5460405173ffffffffffffffffffffffffffffffffffffffff93841693928316929091169060009062003dd690620094c8565b6001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b15801562003f7e57600080fd5b505af115801562003f93573d6000803e3d6000fd5b5050600480546007546008546040517f7bccacee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283169481019490945281166024840152169250637bccacee9150604401600060405180830381600087803b1580156200401357600080fd5b505af115801562004028573d6000803e3d6000fd5b505060005462010000900473ffffffffffffffffffffffffffffffffffffffff16915063eebab8ef9050600773f39fd6e51aad88f6f4ce6ab8827279cfffb922666200407f670de0b6b3a7640000614e2062009703565b6040518463ffffffff1660e01b81526004016200409f93929190620098fe565b600060405180830381600087803b158015620040ba57600080fd5b505af1158015620040cf573d6000803e3d6000fd5b505060005462010000900473ffffffffffffffffffffffffffffffffffffffff16915063eebab8ef9050600173f39fd6e51aad88f6f4ce6ab8827279cfffb9226662004126670de0b6b3a7640000614e2062009703565b6040518463ffffffff1660e01b81526004016200414693929190620098fe565b600060405180830381600087803b1580156200416157600080fd5b505af115801562004176573d6000803e3d6000fd5b50506000546007805473ffffffffffffffffffffffffffffffffffffffff620100009093048316945063eebab8ef9350909116620041bf670de0b6b3a7640000614e2062009703565b6040518463ffffffff1660e01b8152600401620041df93929190620098fe565b600060405180830381600087803b158015620041fa57600080fd5b505af11580156200420f573d6000803e3d6000fd5b50506000546007546040517feebab8ef00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff620100009093048316945063eebab8ef93506200427e9260089216906404a817c80090600401620098fe565b600060405180830381600087803b1580156200429957600080fd5b505af1158015620042ae573d6000803e3d6000fd5b5050505060038410620043555760005460075473ffffffffffffffffffffffffffffffffffffffff6201000090920482169163eebab8ef916009911662004300670de0b6b3a764000061a41062009703565b6040518463ffffffff1660e01b81526004016200432093929190620098fe565b600060405180830381600087803b1580156200433b57600080fd5b505af115801562004350573d6000803e3d6000fd5b505050505b60048410620043f85760005460075473ffffffffffffffffffffffffffffffffffffffff6201000090920482169163eebab8ef91600a9116620043a3670de0b6b3a7640000612ee062009703565b6040518463ffffffff1660e01b8152600401620043c393929190620098fe565b600060405180830381600087803b158015620043de57600080fd5b505af1158015620043f3573d6000803e3d6000fd5b505050505b600154600854604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152600760448201527f4144415054455200000000000000000000000000000000000000000000000000606482015291169063c657c71890608401600060405180830381600087803b1580156200449e57600080fd5b505af1158015620044b3573d6000803e3d6000fd5b5050600154600754604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152600a60448201527f43555256455f4d4f434b0000000000000000000000000000000000000000000060648201529116925063c657c7189150608401600060405180830381600087803b1580156200455d57600080fd5b505af115801562004572573d6000803e3d6000fd5b5050600154600f54604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152600e60448201527f43555256455f4c505f544f4b454e00000000000000000000000000000000000060648201529116925063c657c7189150608401600060405180830381600087803b1580156200461c57600080fd5b505af115801562004631573d6000803e3d6000fd5b5050505050505050565b60606004821115620046d0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f676574506f6f6c546f6b656e733a20496e636f7272656374206e436f696e732060448201527f706172616d6574657200000000000000000000000000000000000000000000006064820152608401620039f7565b8167ffffffffffffffff811115620046ec57620046ec62009935565b60405190808252806020026020018201604052801562004716578160200160208202803683370190505b50905060005b8281101562004cc35760005462010000900473ffffffffffffffffffffffffffffffffffffffff166367b42645600d83600481106200475f576200475f6200950a565b602091828204019190069054906101000a900460ff166040518263ffffffff1660e01b815260040162004793919062009846565b602060405180830381865afa158015620047b1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620047d79190620095e1565b828281518110620047ec57620047ec6200950a565b73ffffffffffffffffffffffffffffffffffffffff9283166020918202929092010152600254835191169063f67c5bd0908490849081106200483257620048326200950a565b60200260200101516040518263ffffffff1660e01b815260040162004873919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa15801562004891573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620048b7919062009964565b62004cae576001546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff909116906306447d5690602401600060405180830381600087803b1580156200493c57600080fd5b505af115801562004951573d6000803e3d6000fd5b50505050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620049c3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620049e99190620095e1565b73ffffffffffffffffffffffffffffffffffffffff1663e8a97a3e83838151811062004a195762004a196200950a565b602090810291909101015160005462010000900473ffffffffffffffffffffffffffffffffffffffff166398cdaadf600d866004811062004a5e5762004a5e6200950a565b602091828204019190069054906101000a900460ff166040518263ffffffff1660e01b815260040162004a92919062009846565b602060405180830381865afa15801562004ab0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004ad69190620095e1565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b15801562004b4457600080fd5b505af115801562004b59573d6000803e3d6000fd5b5050600454845173ffffffffffffffffffffffffffffffffffffffff9091169250633e7c88d6915084908490811062004b965762004b966200950a565b60209081029190910101516040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff90911660048201526124546024820152604401600060405180830381600087803b15801562004c1057600080fd5b505af115801562004c25573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562004c9457600080fd5b505af115801562004ca9573d6000803e3d6000fd5b505050505b8062004cba81620096c7565b9150506200471c565b50919050565b6000806000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635f7c9bd06040518163ffffffff1660e01b8152600401602060405180830381865afa15801562004d3c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004d62919062009964565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015291925073ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b15801562004de357600080fd5b505af115801562004df8573d6000803e3d6000fd5b50506003546040517f6c8f225d0000000000000000000000000000000000000000000000000000000081526004810185905273f39fd6e51aad88f6f4ce6ab8827279cfffb92266602482015260646044820181905260009082015273ffffffffffffffffffffffffffffffffffffffff9091169250636c8f225d9150608401600060405180830381600087803b15801562004e9257600080fd5b505af115801562004ea7573d6000803e3d6000fd5b50506002546040517fe958b70400000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063e958b7049150602401602060405180830381865afa15801562004f2e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004f549190620095e1565b6006546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80841660048301529295509116906370a0823190602401602060405180830381865afa15801562004fc7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004fed919062009964565b600154604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301526024820192909252600d60448201527f6372656469744163636f756e74000000000000000000000000000000000000006064820152929450169063c657c71890608401600060405180830381600087803b1580156200509257600080fd5b505af1158015620050a7573d6000803e3d6000fd5b50505050509091565b60008273ffffffffffffffffffffffffffffffffffffffff1663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620050fe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620051249190620095e1565b6040517f1652e9fc00000000000000000000000000000000000000000000000000000000815230600482015290915073ffffffffffffffffffffffffffffffffffffffff821690631652e9fc90602401600060405180830381600087803b1580156200518f57600080fd5b505af1158015620051a4573d6000803e3d6000fd5b50506040517f40c10f1900000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660048201526024810185905273ffffffffffffffffffffffffffffffffffffffff841692506340c10f1991506044016020604051808303816000875af115801562005230573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620052569190620098da565b506040517f1652e9fc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152821690631652e9fc90602401600060405180830381600087803b158015620052c157600080fd5b505af1158015620052d6573d6000803e3d6000fd5b50506001546040517f06447d5600000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff90911692506306447d569150602401600060405180830381600087803b1580156200535a57600080fd5b505af11580156200536f573d6000803e3d6000fd5b50506002546040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6024820152908416925063095ea7b391506044016020604051808303816000875af11580156200540c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620054329190620098da565b506003546040517f5978103400000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff83811660248301526044820185905290911690635978103490606401600060405180830381600087803b158015620054c257600080fd5b505af1158015620054d7573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200554657600080fd5b505af11580156200555b573d6000803e3d6000fd5b50505050505050565b60006200557183620064a8565b905062005582868686848662006546565b505050505050565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b1580156200560a57600080fd5b505af11580156200561f573d6000803e3d6000fd5b50506003546040805180820190915273ffffffffffffffffffffffffffffffffffffffff868116825260208201869052909116925063caa5c23f9150620056669062006583565b6040518263ffffffff1660e01b81526004016200568491906200997e565b600060405180830381600087803b1580156200569f57600080fd5b505af115801562005582573d6000803e3d6000fd5b620056d183838360405180602001604052806000815250620065ec565b505050565b620056d1838383604051806020016040528060008152506200671c565b620057118484848460405180602001604052806000815250620068d7565b50505050565b6200573382826040518060200160405280600081525062006b15565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614620056d1577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf3583816040516200579c919062009a2a565b60405180910390a1620056d1838362006c34565b6000620057bd836200463b565b60075490915062001b9c9086908690859073ffffffffffffffffffffffffffffffffffffffff168562006d72565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663406c8e2f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562005859573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200587f9190620095e1565b73ffffffffffffffffffffffffffffffffffffffff1663eebab8ef8373f39fd6e51aad88f6f4ce6ab8827279cfffb92266846040518463ffffffff1660e01b8152600401620058d193929190620098fe565b600060405180830381600087803b158015620058ec57600080fd5b505af115801562005901573d6000803e3d6000fd5b50506001546040517f06447d5600000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff90911692506306447d569150602401600060405180830381600087803b1580156200598557600080fd5b505af11580156200599a573d6000803e3d6000fd5b50505050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663406c8e2f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562005a0c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005a329190620095e1565b73ffffffffffffffffffffffffffffffffffffffff166367b42645836040518263ffffffff1660e01b815260040162005a6c919062009846565b602060405180830381865afa15801562005a8a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005ab09190620095e1565b6002546040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602482015291169063095ea7b3906044016020604051808303816000875af115801562005b48573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005b6e9190620098da565b50600354600554604080517f406c8e2f000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169363597810349373f39fd6e51aad88f6f4ce6ab8827279cfffb922669391169163406c8e2f916004808201926020929091908290030181865afa15801562005c02573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005c289190620095e1565b73ffffffffffffffffffffffffffffffffffffffff166367b42645866040518263ffffffff1660e01b815260040162005c62919062009846565b602060405180830381865afa15801562005c80573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005ca69190620095e1565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff92831660048201529116602482015260448101849052606401600060405180830381600087803b15801562005d1b57600080fd5b505af115801562005d30573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200569f57600080fd5b620057118484848460405180602001604052806000815250620073e1565b600062005dca836200463b565b60075490915062001b9c9086908690859073ffffffffffffffffffffffffffffffffffffffff168562007517565b620057338282604051806020016040528060008152506200813a565b620011806001620084b0565b6060600482111562005eb5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f676574556e6465726c79696e67506f6f6c546f6b656e733a20496e636f72726560448201527f6374206e436f696e7320706172616d65746572000000000000000000000000006064820152608401620039f7565b8167ffffffffffffffff81111562005ed15762005ed162009935565b60405190808252806020026020018201604052801562005efb578160200160208202803683370190505b50905060005b8281101562004cc35760005462010000900473ffffffffffffffffffffffffffffffffffffffff166367b42645600e836004811062005f445762005f446200950a565b602091828204019190069054906101000a900460ff166040518263ffffffff1660e01b815260040162005f78919062009846565b602060405180830381865afa15801562005f96573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005fbc9190620095e1565b82828151811062005fd15762005fd16200950a565b73ffffffffffffffffffffffffffffffffffffffff9283166020918202929092010152600254835191169063f67c5bd0908490849081106200601757620060176200950a565b60200260200101516040518263ffffffff1660e01b815260040162006058919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa15801562006076573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200609c919062009964565b62006493576001546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff909116906306447d5690602401600060405180830381600087803b1580156200612157600080fd5b505af115801562006136573d6000803e3d6000fd5b50505050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620061a8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620061ce9190620095e1565b73ffffffffffffffffffffffffffffffffffffffff1663e8a97a3e838381518110620061fe57620061fe6200950a565b602090810291909101015160005462010000900473ffffffffffffffffffffffffffffffffffffffff166398cdaadf600e86600481106200624357620062436200950a565b602091828204019190069054906101000a900460ff166040518263ffffffff1660e01b815260040162006277919062009846565b602060405180830381865afa15801562006295573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620062bb9190620095e1565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156200632957600080fd5b505af11580156200633e573d6000803e3d6000fd5b5050600454845173ffffffffffffffffffffffffffffffffffffffff9091169250633e7c88d691508490849081106200637b576200637b6200950a565b60209081029190910101516040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff90911660048201526124546024820152604401600060405180830381600087803b158015620063f557600080fd5b505af11580156200640a573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200647957600080fd5b505af11580156200648e573d6000803e3d6000fd5b505050505b806200649f81620096c7565b91505062005f01565b6040805160038082526080820190925260609160208201838036833750508351825192935091839150600090620064e357620064e36200950a565b60209081029190910101528160016020020151816001815181106200650c576200650c6200950a565b60209081029190910101528160026020020151816002815181106200653557620065356200950a565b602002602001018181525050919050565b600062006553846200463b565b6007549091506200558290879087908690869073ffffffffffffffffffffffffffffffffffffffff1686620089d8565b604080516001808252818301909252606091816020015b6040805180820190915260008152606060208201528152602001906001900390816200659a5790505090508181600081518110620065dc57620065dc6200950a565b6020026020010181905250919050565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1662006673576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f74657374546f6b656e5375697465206973206e6f7420736574000000000000006044820152606401620039f7565b6000546040517f67b42645000000000000000000000000000000000000000000000000000000008152620057119162010000900473ffffffffffffffffffffffffffffffffffffffff16906367b4264590620066d490889060040162009846565b602060405180830381865afa158015620066f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620067189190620095e1565b8484845b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600091908616906370a0823190602401602060405180830381865afa1580156200678d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620067b3919062009964565b9050828114620068cb577f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f828673ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200682b573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262006873919081019062009a73565b6040516020016200688692919062009b4a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052620068c291879062009bd0565b60405180910390a15b62001b9c81846200906e565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301526000919087169063dd62ed3e90604401602060405180830381865afa15801562006950573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062006976919062009964565b905082811462006b09577f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f828773ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015620069ee573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262006a36919081019062009a73565b60405160200162006a4992919062009c0a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905262006a8591889062009bd0565b60405180910390a160408051818152600a818301527f207370656e6465723a2000000000000000000000000000000000000000000000606082015273ffffffffffffffffffffffffffffffffffffffff8616602082015290517f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f9181900360800190a15b6200558281846200906e565b600554604080517f406c8e2f0000000000000000000000000000000000000000000000000000000081529051620056d19273ffffffffffffffffffffffffffffffffffffffff169163406c8e2f9160048083019260209291908290030181865afa15801562006b88573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062006bae9190620095e1565b73ffffffffffffffffffffffffffffffffffffffff166367b42645856040518263ffffffff1660e01b815260040162006be8919062009846565b602060405180830381865afa15801562006c06573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062006c2c9190620095e1565b83836200813a565b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462005733577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f5060405162006cee9060208082526025908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b61646460408201527f726573735d000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f8160405162006d27919062009c90565b60405180910390a17f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f8260405162006d60919062009cf2565b60405180910390a1620057336200916e565b80516002546040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152600092169063e958b70490602401602060405180830381865afa15801562006de6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062006e0c9190620095e1565b9050841562006ef257600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481019290925260006024830181905260448301819052606483015273ffffffffffffffffffffffffffffffffffffffff169063491cc7c290608401600060405180830381600087803b15801562006e9757600080fd5b505af115801562006eac573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff8a1692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a25b60005b828110156200707957600154600254855173ffffffffffffffffffffffffffffffffffffffff9283169263bd6af4349216907f51e3f1600000000000000000000000000000000000000000000000000000000090869089908790811062006f605762006f606200950a565b602002602001015160405160240162006f9c92919073ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b90921682526200702f929160040162009d30565b600060405180830381600087803b1580156200704a57600080fd5b505af11580156200705f573d6000803e3d6000fd5b5050505080806200707090620096c7565b91505062006ef5565b5060015460025473ffffffffffffffffffffffffffffffffffffffff9182169163bd6af43491167f6ce4074a0000000000000000000000000000000000000000000000000000000088620070ce578a620070e8565b60035473ffffffffffffffffffffffffffffffffffffffff165b888b604051602401620070fe9392919062009d69565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b909216825262007191929160040162009d30565b600060405180830381600087803b158015620071ac57600080fd5b505af1158015620071c1573d6000803e3d6000fd5b5050600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526024810192909252600060448301819052606483015273ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b1580156200724757600080fd5b505af11580156200725c573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff16856200728457876200729e565b60035473ffffffffffffffffffffffffffffffffffffffff165b73ffffffffffffffffffffffffffffffffffffffff167faed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab0360405160405180910390a36001546002546040805173ffffffffffffffffffffffffffffffffffffffff85811660248084019190915283518084039091018152604490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f953730180000000000000000000000000000000000000000000000000000000017905291517fbd6af4340000000000000000000000000000000000000000000000000000000081529382169363bd6af43493620073a49316919060040162009d30565b600060405180830381600087803b158015620073bf57600080fd5b505af1158015620073d4573d6000803e3d6000fd5b5050505050505050505050565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1662007468576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f74657374546f6b656e5375697465206973206e6f7420736574000000000000006044820152606401620039f7565b6000546040517f67b4264500000000000000000000000000000000000000000000000000000000815262001b9c9162010000900473ffffffffffffffffffffffffffffffffffffffff16906367b4264590620074c990899060040162009846565b602060405180830381865afa158015620074e7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200750d9190620095e1565b85858585620068d7565b80516002546040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152600092169063e958b70490602401602060405180830381865afa1580156200758b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620075b19190620095e1565b905084156200769757600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481019290925260006024830181905260448301819052606483015273ffffffffffffffffffffffffffffffffffffffff169063491cc7c290608401600060405180830381600087803b1580156200763c57600080fd5b505af115801562007651573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff8a1692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a25b60005b82811015620078695760015460025473ffffffffffffffffffffffffffffffffffffffff9182169163bd6af43491167f46fb371d0000000000000000000000000000000000000000000000000000000089620076f7578b62007711565b60035473ffffffffffffffffffffffffffffffffffffffff165b898987815181106200772757620077276200950a565b602090810291909101015160405173ffffffffffffffffffffffffffffffffffffffff938416602482015291831660448301529190911660648201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff608482015260a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b90921682526200781f929160040162009d30565b600060405180830381600087803b1580156200783a57600080fd5b505af11580156200784f573d6000803e3d6000fd5b5050505080806200786090620096c7565b9150506200769a565b50600154600254600f546040805173ffffffffffffffffffffffffffffffffffffffff868116602483015292831660448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f51e3f1600000000000000000000000000000000000000000000000000000000017905290517fbd6af4340000000000000000000000000000000000000000000000000000000081529382169363bd6af43493620079399316919060040162009d30565b600060405180830381600087803b1580156200795457600080fd5b505af115801562007969573d6000803e3d6000fd5b505060015460025473ffffffffffffffffffffffffffffffffffffffff918216935063bd6af4349250167f6ce4074a0000000000000000000000000000000000000000000000000000000088620079c1578a620079db565b60035473ffffffffffffffffffffffffffffffffffffffff165b888b604051602401620079f19392919062009d69565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b909216825262007a84929160040162009d30565b600060405180830381600087803b15801562007a9f57600080fd5b505af115801562007ab4573d6000803e3d6000fd5b5050600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526024810192909252600060448301819052606483015273ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b15801562007b3a57600080fd5b505af115801562007b4f573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff168562007b77578762007b91565b60035473ffffffffffffffffffffffffffffffffffffffff165b73ffffffffffffffffffffffffffffffffffffffff167faed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab0360405160405180910390a3841562007e905760005b8281101562007d9157600154600254600354865173ffffffffffffffffffffffffffffffffffffffff9384169363bd6af434938116927f46fb371d00000000000000000000000000000000000000000000000000000000929116908a908a908890811062007c4f5762007c4f6200950a565b602090810291909101015160405173ffffffffffffffffffffffffffffffffffffffff938416602482015291831660448301529190911660648201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff608482015260a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b909216825262007d47929160040162009d30565b600060405180830381600087803b15801562007d6257600080fd5b505af115801562007d77573d6000803e3d6000fd5b50505050808062007d8890620096c7565b91505062007bdd565b506001546002546040805173ffffffffffffffffffffffffffffffffffffffff85811660248084019190915283518084039091018152604490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f953730180000000000000000000000000000000000000000000000000000000017905291517fbd6af4340000000000000000000000000000000000000000000000000000000081529382169363bd6af4349362007e569316919060040162009d30565b600060405180830381600087803b15801562007e7157600080fd5b505af115801562007e86573d6000803e3d6000fd5b505050506200555b565b6001546002546040805173ffffffffffffffffffffffffffffffffffffffff85811660248084019190915283518084039091018152604490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f953730180000000000000000000000000000000000000000000000000000000017905291517fbd6af4340000000000000000000000000000000000000000000000000000000081529382169363bd6af4349362007f549316919060040162009d30565b600060405180830381600087803b15801562007f6f57600080fd5b505af115801562007f84573d6000803e3d6000fd5b5050505060005b828110156200463157600154600254855173ffffffffffffffffffffffffffffffffffffffff9283169263bd6af4349216907f46fb371d00000000000000000000000000000000000000000000000000000000908c908a908a908890811062007ff85762007ff86200950a565b602090810291909101015160405173ffffffffffffffffffffffffffffffffffffffff938416602482015291831660448301529190911660648201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff608482015260a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b9092168252620080f0929160040162009d30565b600060405180830381600087803b1580156200810b57600080fd5b505af115801562008120573d6000803e3d6000fd5b5050505080806200813190620096c7565b91505062007f8b565b6002546040517fe958b70400000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015260009173ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015620081be573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620081e49190620095e1565b6002546040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015292935060009290911690638991b2f190602401602060405180830381865afa1580156200825b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062008281919062009964565b6002546040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529091169063f67c5bd090602401602060405180830381865afa158015620082f2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062008318919062009964565b16151590508315158114801590620083305750825115155b1562008370577f0b2e13ff20ac7b474198655583edf70dedd2c1dc980e329c4fbb2fc0748b796b8360405162008367919062009683565b60405180910390a15b62001b9c841515821515148673ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015620083c7573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200840f919081019062009a73565b8362008451576040518060400160405280601981526020017f206e6f7420656e61626c6564206173206578706563746564200000000000000081525062008488565b6040518060400160405280601981526020017f20656e61626c6564206173206e6f7420657870657463746564000000000000008152505b6040516020016200849b92919062009da4565b604051602081830303815290604052620092f1565b600181600a811115620084c757620084c7620097db565b1480620084e85750600381600a811115620084e657620084e6620097db565b145b62008550576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f556e737570706f7274656420746f6b656e0000000000000000000000000000006044820152606401620039f7565b6040516200855e90620094d6565b604051809103906000f0801580156200857b573d6000803e3d6000fd5b50600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff166201000073ffffffffffffffffffffffffffffffffffffffff9384168102919091179182905590041663b36ba208620085e5670de0b6b3a7640000606462009703565b6040518263ffffffff1660e01b81526004016000604051808303818588803b1580156200861157600080fd5b505af115801562008626573d6000803e3d6000fd5b5050505050600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816040516200865d90620094e4565b6200866a92919062009e03565b604051809103906000f08015801562008687573d6000803e3d6000fd5b50600580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169182179055604080517f6f307dc30000000000000000000000000000000000000000000000000000000081529051636f307dc3916004808201926020929091908290030181865afa15801562008721573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620087479190620095e1565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600554604080517fc12c21c00000000000000000000000000000000000000000000000000000000081529051919092169163c12c21c09160048083019260209291908290030181865afa158015620087e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200880a9190620095e1565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600554604080517f2f7a188100000000000000000000000000000000000000000000000000000000815290519190921691632f7a18819160048083019260209291908290030181865afa158015620088a7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620088cd9190620095e1565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600554604080517ff9aa028a0000000000000000000000000000000000000000000000000000000081529051919092169163f9aa028a9160048083019260209291908290030181865afa1580156200896a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620089909190620095e1565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b80516002546040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8981166004830152600092169063e958b70490602401602060405180830381865afa15801562008a4c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062008a729190620095e1565b9050841562008b5857600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481019290925260006024830181905260448301819052606483015273ffffffffffffffffffffffffffffffffffffffff169063491cc7c290608401600060405180830381600087803b15801562008afd57600080fd5b505af115801562008b12573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff8b1692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a25b60005b8281101562008d0557600087828151811062008b7b5762008b7b6200950a565b6020026020010151111562008cf057600154600254855173ffffffffffffffffffffffffffffffffffffffff9283169263bd6af4349216907f51e3f1600000000000000000000000000000000000000000000000000000000090869089908790811062008bec5762008bec6200950a565b602002602001015160405160240162008c2892919073ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b909216825262008cbb929160040162009d30565b600060405180830381600087803b15801562008cd657600080fd5b505af115801562008ceb573d6000803e3d6000fd5b505050505b8062008cfc81620096c7565b91505062008b5b565b5060015460025473ffffffffffffffffffffffffffffffffffffffff9182169163bd6af43491167f6ce4074a000000000000000000000000000000000000000000000000000000008862008d5a578b62008d74565b60035473ffffffffffffffffffffffffffffffffffffffff165b888c60405160240162008d8a9392919062009d69565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b909216825262008e1d929160040162009d30565b600060405180830381600087803b15801562008e3857600080fd5b505af115801562008e4d573d6000803e3d6000fd5b5050600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526024810192909252600060448301819052606483015273ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b15801562008ed357600080fd5b505af115801562008ee8573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff168562008f10578862008f2a565b60035473ffffffffffffffffffffffffffffffffffffffff165b73ffffffffffffffffffffffffffffffffffffffff167faed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab0360405160405180910390a36001546002546040805173ffffffffffffffffffffffffffffffffffffffff85811660248084019190915283518084039091018152604490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f953730180000000000000000000000000000000000000000000000000000000017905291517fbd6af4340000000000000000000000000000000000000000000000000000000081529382169363bd6af43493620090309316919060040162009d30565b600060405180830381600087803b1580156200904b57600080fd5b505af115801562009060573d6000803e3d6000fd5b505050505050505050505050565b80821462005733577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f50604051620090fc9060208082526022908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b75696e60408201527f745d000000000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a88160405162009135919062009e2f565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a88260405162006d60919062009e7b565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620092c35760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000009282019290925260016060820152600091907f70ca10bbd0dbfd9020a9f4b13402c16cb120705e0d1c0aeab10fa353ae586fc490608001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905262009240929160200162009872565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526200927a91620098bc565b6000604051808303816000865af19150503d8060008114620092b9576040519150601f19603f3d011682016040523d82523d6000602084013e620092be565b606091505b505050505b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055565b8162005733577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf35838160405162009328919062009a2a565b60405180910390a162005733828062000815577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f506040516200939b9060208082526017908201527f4572726f723a20417373657274696f6e204661696c6564000000000000000000604082015260600190565b60405180910390a1620008156200916e565b6139608062009eba83390190565b615f8c806200d81a83390190565b600183019183908215620094625791602002820160005b838211156200943157835183826101000a81548160ff0219169083600a8111156200940f576200940f620097db565b02179055509260200192600101602081600001049283019260010302620093e0565b8015620094605782816101000a81549060ff021916905560010160208160000104928301926001030262009431565b505b5062009470929150620094f3565b5090565b61395480620137a683390190565b61171380620170fa83390190565b611852806201880d83390190565b613969806201a05f83390190565b611982806201d9c883390190565b615f7e806201f34a83390190565b615f9a80620252c883390190565b617a51806202b26283390190565b62031ed68062032cb383390190565b5b80821115620094705760008155600101620094f4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081518084526020808501945080840160005b838110156200958157815173ffffffffffffffffffffffffffffffffffffffff16875295820195908201906001016200954d565b509495945050505050565b604081526000620095a1604083018562009539565b8281036020840152620095b5818562009539565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff811681146200081557600080fd5b600060208284031215620095f457600080fd5b81516200960181620095be565b9392505050565b60005b83811015620096255781810151838201526020016200960b565b83811115620057115750506000910152565b600081518084526200965181602086016020860162009608565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600062009601602083018462009637565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415620096fc57620096fc62009698565b5060010190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156200973e576200973e62009698565b500290565b6000826200977a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b8060005b60038110156200571157815184526020938401939091019060010162009783565b60808101620097b482856200977f565b8260608301529392505050565b600082821015620097d657620097d662009698565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600b811062009842577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b602081016200985682846200980a565b92915050565b828152608081016200960160208301846200977f565b7fffffffff000000000000000000000000000000000000000000000000000000008316815260008251620098ae81600485016020870162009608565b919091016004019392505050565b60008251620098d081846020870162009608565b9190910192915050565b600060208284031215620098ed57600080fd5b815180151581146200960157600080fd5b606081016200990e82866200980a565b73ffffffffffffffffffffffffffffffffffffffff93909316602082015260400152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000602082840312156200997757600080fd5b5051919050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101562009a1c578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00185528151805173ffffffffffffffffffffffffffffffffffffffff16845287015187840187905262009a088785018262009637565b9588019593505090860190600101620099a5565b509098975050505050505050565b60408152600560408201527f4572726f72000000000000000000000000000000000000000000000000000000606082015260806020820152600062009601608083018462009637565b60006020828403121562009a8657600080fd5b815167ffffffffffffffff8082111562009a9f57600080fd5b818401915084601f83011262009ab457600080fd5b81518181111562009ac95762009ac962009935565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171562009b125762009b1262009935565b8160405282815287602084870101111562009b2c57600080fd5b62009b3f83602083016020880162009608565b979650505050505050565b6000835162009b5e81846020880162009608565b7f496e636f72726563742000000000000000000000000000000000000000000000908301908152835162009b9a81600a84016020880162009608565b7f2062616c616e6365206f6e206163636f756e743a200000000000000000000000600a9290910191820152601f01949350505050565b60408152600062009be5604083018562009637565b905073ffffffffffffffffffffffffffffffffffffffff831660208301529392505050565b6000835162009c1e81846020880162009608565b7f496e636f72726563742000000000000000000000000000000000000000000000908301908152835162009c5a81600a84016020880162009608565b7f20416c6c6f77616e6365206f6e206163636f756e743a20200000000000000000600a9290910191820152602201949350505050565b60408152600062009cce60408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b905073ffffffffffffffffffffffffffffffffffffffff8316602083015292915050565b60408152600062009cce60408301600a81527f2020202041637475616c00000000000000000000000000000000000000000000602082015260400190565b73ffffffffffffffffffffffffffffffffffffffff8316815260406020820152600062009d61604083018462009637565b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff808616835280851660208401525060606040830152620095b5606083018462009637565b7f546f6b656e20000000000000000000000000000000000000000000000000000081526000835162009dde81600685016020880162009608565b83519083019062009df781600684016020880162009608565b01600601949350505050565b73ffffffffffffffffffffffffffffffffffffffff83168152604081016200960160208301846200980a565b60408152600062009e6d60408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b905082602083015292915050565b60408152600062009e6d60408301600a81527f2020202041637475616c0000000000000000000000000000000000000000000060208201526040019056fe60806040523480156200001157600080fd5b5060405162003960380380620039608339810160408190526200003491620002a2565b8151829082906200004d90600290602085019062000133565b5080516200006390600390602084019062000133565b506000601260405162000076906200019d565b6060808252600790820152664352564d6f636b60c81b608082015260a0602082018190526015908201527f43525620666f72204375727665506f6f6c4d6f636b000000000000000000000060c082015260ff909116604082015260e001604051809103906000f080158015620000f0573d6000803e3d6000fd5b50600080546001600160a01b039092166001600160a01b03199283168117909155600180549092161790555050670de0b6b3a7640000600755506200030c915050565b8280548282559060005260206000209081019282156200018b579160200282015b828111156200018b57825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019062000154565b5062000199929150620001ab565b5090565b611758806200220883390190565b5b80821115620001995760008155600101620001ac565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b0381168114620001f057600080fd5b919050565b600082601f8301126200020757600080fd5b815160206001600160401b0380831115620002265762000226620001c2565b8260051b604051601f19603f830116810181811084821117156200024e576200024e620001c2565b6040529384528581018301938381019250878511156200026d57600080fd5b83870191505b8482101562000297576200028782620001d8565b8352918301919083019062000273565b979650505050505050565b60008060408385031215620002b657600080fd5b82516001600160401b0380821115620002ce57600080fd5b620002dc86838701620001f5565b93506020850151915080821115620002f357600080fd5b506200030285828601620001f5565b9150509250929050565b611eec806200031c6000396000f3fe608060405234801561001057600080fd5b506004361061030a5760003560e01c806382c630661161019c578063bb7b8b80116100ee578063e2e7d26411610097578063f851a44011610071578063f851a44014610597578063fc0c546a1461059e578063fee3f7f91461036257600080fd5b8063e2e7d26414610576578063ecb586a514610584578063f446c1d01461036257600080fd5b8063d96c7fce116100c8578063d96c7fce14610369578063dd62ed3e14610568578063ddca3f431461036257600080fd5b8063bb7b8b801461053a578063c661065714610542578063cc2b27d71461055557600080fd5b80639fdaea0c11610150578063b739953e1161012a578063b739953e14610501578063b91434d114610514578063b9947eb01461052757600080fd5b80639fdaea0c146104db578063a6417ed6146104ee578063b4b577ad1461036257600080fd5b80638ea875f3116101815780638ea875f3146104bf57806395d89b411461033557806399bd2ba5146104c857600080fd5b806382c630661461048c57806385ca3c6f146104ac57600080fd5b80633df02124116102605780635e0d443f1161020957806371035418116101e3578063710354181461045457806376a2f0f0146103625780637b475b681461046757600080fd5b80635e0d443f1461042d57806363543f061461036257806370a082311461044057600080fd5b80634903b0d11161023a5780634903b0d1146104075780635409491a1461036257806356ac35031461041a57600080fd5b80633df02124146103e15780634469e30e146103695780634515cef3146103f457600080fd5b806318160ddd116102c257806323746eb81161029c57806323746eb814610393578063313ce567146103625780633883e119146103cb57600080fd5b806318160ddd146103625780631a4d01d21461037e5780632081066c1461036257600080fd5b806307211ef7116102f357806307211ef71461034f578063140522881461036257806314f059791461036957600080fd5b8063065a80d81461030f57806306fdde0314610335575b600080fd5b61032261031d36600461192d565b6105be565b6040519081526020015b60405180910390f35b6040805160208101825260008152905161032c9190611974565b61032261035d3660046119c5565b610677565b6000610322565b6103716106c7565b60405161032c9190611a01565b61039161038c366004611a32565b6106f2565b005b6103a66103a136600461192d565b6107e6565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161032c565b6103226103d9366004611a79565b600092915050565b6103916103ef366004611ab1565b610826565b610391610402366004611b88565b610950565b610322610415366004611bb3565b610b1c565b6103916104283660046119c5565b610b31565b61032261043b3660046119c5565b610b92565b61032261044e366004611bf0565b50600090565b610391610462366004611bb3565b600755565b610391610475366004611c0b565b600f9190910b600090815260066020526040902055565b6001546103a69073ffffffffffffffffffffffffffffffffffffffff1681565b6103716104ba366004611c35565b610bce565b61032260075481565b6103916104d6366004611c73565b610c04565b6103916104e9366004611c8f565b610c63565b6103916104fc366004611ab1565b610de6565b6103a661050f36600461192d565b6111a6565b6103916105223660046119c5565b6111be565b6103a6610535366004611bb3565b61121f565b600754610322565b6103a6610550366004611bb3565b611234565b610322610563366004611cac565b611249565b6103226103d9366004611cd8565b61032261044e366004611bb3565b610391610592366004611d02565b61127f565b60006103a6565b6000546103a69073ffffffffffffffffffffffffffffffffffffffff1681565b6000600282600f0b815481106105d6576105d6611d26565b6000918252602090912001546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa15801561064d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106719190611d55565b92915050565b600f83810b60009081526005602090815260408083209386900b8352929052908120546b033b2e3c9fd0803ce8000000906106b3908490611d9d565b6106bd9190611dda565b90505b9392505050565b6106cf6118f8565b604051806060016040528060008152602001600081526020016000815250905090565b6000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810185905273ffffffffffffffffffffffffffffffffffffffff909116906379cc6790906044016020604051808303816000875af1158015610769573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078d9190611e15565b506107e133826002856fffffffffffffffffffffffffffffffff16815481106107b8576107b8611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169190611402565b505050565b6000600282600f0b815481106107fe576107fe611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1692915050565b6000610833858585610b92565b9050818110156108ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f437572766556314d6f636b3a20494e53554646494349454e545f4f555450555460448201527f5f414d4f554e540000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61091f3330856002896fffffffffffffffffffffffffffffffff16815481106108f5576108f5611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169291906114d6565b61094933826002876fffffffffffffffffffffffffffffffff16815481106107b8576107b8611d26565b5050505050565b60005b6003811015610a7f57600083826003811061097057610970611d26565b60200201511115610a6d576002818154811061098e5761098e611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff166323b872dd33308685600381106109c9576109c9611d26565b60200201516040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff938416600482015292909116602483015260448201526064016020604051808303816000875af1158015610a47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6b9190611e15565b505b80610a7781611e32565b915050610953565b506000546040517f40c10f190000000000000000000000000000000000000000000000000000000081523360048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f19906044015b6020604051808303816000875af1158015610af8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e19190611e15565b6000600282815481106105d6576105d6611d26565b600f83810b60009081526005602090815260408083209386900b835292905220819055610b6a6b033b2e3c9fd0803ce80000008261153a565b600f92830b60009081526005602090815260408083209690950b825294909452919092205550565b600f83810b60009081526004602090815260408083209386900b8352929052908120546b033b2e3c9fd0803ce8000000906106b3908490611d9d565b610bd66118f8565b6040805160608181019092529085906003908390839080828437600092019190915250919695505050505050565b6000546040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052909116906340c10f1990604401610ad9565b60005b6003811015610d88576000838260038110610c8357610c83611d26565b60200201351115610d765760028181548110610ca157610ca1611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33858460038110610cdb57610cdb611d26565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff9093166004840152602002013560248201526044016020604051808303816000875af1158015610d50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d749190611e15565b505b80610d8081611e32565b915050610c66565b506000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906379cc679090604401610ad9565b60006002856fffffffffffffffffffffffffffffffff1681548110610e0d57610e0d611d26565b60009182526020822001546003805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff8816908110610e5957610e59611d26565b60009182526020822001546002805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff8816908110610ea557610ea5611d26565b60009182526020822001546003805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff8916908110610ef157610ef1611d26565b600091825260208220015473ffffffffffffffffffffffffffffffffffffffff169150610f1f898989610677565b905085811015610fb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f437572766556314d6f636b3a20494e53554646494349454e545f4f555450555460448201527f5f414d4f554e540000000000000000000000000000000000000000000000000060648201526084016108c1565b610fd373ffffffffffffffffffffffffffffffffffffffff851633308a6114d6565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526024820189905285169063095ea7b3906044016020604051808303816000875af1158015611048573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061106c9190611e15565b506040517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8616906340c10f1990604401600060405180830381600087803b1580156110db57600080fd5b505af11580156110ef573d6000803e3d6000fd5b50506040517f1e9a69500000000000000000000000000000000000000000000000000000000081523060048201526024810184905273ffffffffffffffffffffffffffffffffffffffff86169250631e9a69509150604401600060405180830381600087803b15801561116157600080fd5b505af1158015611175573d6000803e3d6000fd5b5061119b9250505073ffffffffffffffffffffffffffffffffffffffff83163383611402565b505050505050505050565b6000600382600f0b815481106107fe576107fe611d26565b600f83810b60009081526004602090815260408083209386900b8352929052208190556111f76b033b2e3c9fd0803ce80000008261153a565b600f92830b60009081526004602090815260408083209690950b825294909452919092205550565b6000600382815481106107fe576107fe611d26565b6000600282815481106107fe576107fe611d26565b600f81900b6000908152600660205260408120546b033b2e3c9fd0803ce8000000906112759085611d9d565b6106c09190611dda565b60005b60038110156113a457600082826003811061129f5761129f611d26565b6020020151111561139257600281815481106112bd576112bd611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb338484600381106112f7576112f7611d26565b60200201516040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af115801561136c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113909190611e15565b505b8061139c81611e32565b915050611282565b506000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810184905273ffffffffffffffffffffffffffffffffffffffff909116906379cc679090604401610ad9565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526107e19084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526116a0565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526115349085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611454565b50505050565b60408051808201909152600281527f4d330000000000000000000000000000000000000000000000000000000000006020820152600090826115a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c19190611974565b5060006115b7600284611dda565b90506b033b2e3c9fd0803ce80000006115f0827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611e6b565b6115fa9190611dda565b8411156040518060400160405280600281526020017f4d310000000000000000000000000000000000000000000000000000000000008152509061166b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c19190611974565b5082816116846b033b2e3c9fd0803ce800000087611d9d565b61168e9190611e82565b6116989190611dda565b949350505050565b6000611702826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166117ac9092919063ffffffff16565b8051909150156107e157808060200190518101906117209190611e15565b6107e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016108c1565b60606106bd848460008585843b61181f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108c1565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516118489190611e9a565b60006040518083038185875af1925050503d8060008114611885576040519150601f19603f3d011682016040523d82523d6000602084013e61188a565b606091505b509150915061189a8282866118a5565b979650505050505050565b606083156118b45750816106c0565b8251156118c45782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c19190611974565b60405180606001604052806003906020820280368337509192915050565b8035600f81900b811461192857600080fd5b919050565b60006020828403121561193f57600080fd5b6106c082611916565b60005b8381101561196357818101518382015260200161194b565b838111156115345750506000910152565b6020815260008251806020840152611993816040850160208701611948565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000606084860312156119da57600080fd5b6119e384611916565b92506119f160208501611916565b9150604084013590509250925092565b60608101818360005b6003811015611a29578151835260209283019290910190600101611a0a565b50505092915050565b600080600060608486031215611a4757600080fd5b833592506119f160208501611916565b806060810183101561067157600080fd5b8015158114611a7657600080fd5b50565b60008060808385031215611a8c57600080fd5b611a968484611a57565b91506060830135611aa681611a68565b809150509250929050565b60008060008060808587031215611ac757600080fd5b611ad085611916565b9350611ade60208601611916565b93969395505050506040820135916060013590565b600082601f830112611b0457600080fd5b6040516060810181811067ffffffffffffffff82111715611b4e577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604052806060840185811115611b6357600080fd5b845b81811015611b7d578035835260209283019201611b65565b509195945050505050565b60008060808385031215611b9b57600080fd5b611ba58484611af3565b946060939093013593505050565b600060208284031215611bc557600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461192857600080fd5b600060208284031215611c0257600080fd5b6106c082611bcc565b60008060408385031215611c1e57600080fd5b611c2783611916565b946020939093013593505050565b600080600060e08486031215611c4a57600080fd5b611c548585611a57565b9250611c638560608601611a57565b915060c084013590509250925092565b60008060408385031215611c8657600080fd5b611c2783611bcc565b60008060808385031215611ca257600080fd5b611ba58484611a57565b60008060408385031215611cbf57600080fd5b82359150611ccf60208401611916565b90509250929050565b60008060408385031215611ceb57600080fd5b611cf483611bcc565b9150611ccf60208401611bcc565b60008060808385031215611d1557600080fd5b82359150611ccf8460208501611af3565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215611d6757600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611dd557611dd5611d6e565b500290565b600082611e10577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600060208284031215611e2757600080fd5b81516106c081611a68565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611e6457611e64611d6e565b5060010190565b600082821015611e7d57611e7d611d6e565b500390565b60008219821115611e9557611e95611d6e565b500190565b60008251611eac818460208701611948565b919091019291505056fea2646970667358221220a76213374b33de2cb1c5d61e9c1133f6d8163c7b90c32a6142a6f4fd98fe430364736f6c634300080a003360a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a00336102606040523480156200001257600080fd5b5060405162005f8c38038062005f8c833981016040819052620000359162000ba4565b83838383600384846001600160a01b03821615806200005b57506001600160a01b038116155b156200007a57604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038216608081905260408051632f7a188160e01b81529051632f7a1881916004808201926020929091908290030181865afa158015620000c5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000eb919062000c01565b6001600160a01b0390811660a05290811660c05260016000558416151590506200012857604051635919af9760e11b815260040160405180910390fd5b608051604051630f67c5bd60e41b81526001600160a01b0385811660048301529091169063f67c5bd090602401602060405180830381865afa15801562000173573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000199919062000c26565b620001c757604051634c607af960e11b81526001600160a01b03841660048201526024015b60405180910390fd5b6001600160a01b038084166101e081905261020052821661022052610240819052620001f460006200090a565b6001600160a01b031660e0526200020c60016200090a565b6001600160a01b0316610100526200022560026200090a565b6001600160a01b0316610120526200023e60036200090a565b6001600160a01b031661014052620002576000620009fd565b6001600160a01b031661016052620002706001620009fd565b6001600160a01b031661018052620002896002620009fd565b6001600160a01b03166101a052620002a26003620009fd565b6001600160a01b039081166101c05260e051161580620002cc5750610100516001600160a01b0316155b15620002eb57604051635919af9760e11b815260040160405180910390fd5b600281118015620003065750610120516001600160a01b0316155b156200032557604051635919af9760e11b815260040160405180910390fd5b600381118015620003405750610140516001600160a01b0316155b156200035f57604051635919af9760e11b815260040160405180910390fd5b60805160e051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620003ac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003d2919062000c26565b620004005760e051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b60805161010051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa1580156200044e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000474919062000c26565b620004a35761010051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b60028111801562000525575060805161012051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620004fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000523919062000c26565b155b15620005555761012051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b600381118015620005d7575060805161014051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620005af573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005d5919062000c26565b155b15620006075761014051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b610160516001600160a01b03161580159062000694575060805161016051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa1580156200066c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000692919062000c26565b155b15620006c45761016051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b610180516001600160a01b03161580159062000751575060805161018051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa15801562000729573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200074f919062000c26565b155b15620007815761018051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b6101a0516001600160a01b0316158015906200080e57506080516101a051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620007e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200080c919062000c26565b155b156200083e576101a051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b6101c0516001600160a01b031615801590620008cb57506080516101c051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620008a3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008c9919062000c26565b155b15620008fb576101c051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b50505050505050505062000c66565b60c05160405163c661065760e01b8152600481018390526000916001600160a01b03169063c661065790602401602060405180830381865afa92505050801562000973575060408051601f3d908101601f19168201909252620009709181019062000c01565b60015b6200097e5762000984565b92915050565b60c05160405163046e8dd760e31b8152600f84900b60048201526001600160a01b03909116906323746eb8906024015b602060405180830381865afa925050508015620009f0575060408051601f3d908101601f19168201909252620009ed9181019062000c01565b60015b6200097e57506000919050565b610220516000906001600160a01b03161562000a1e576200097e8262000ac0565b60c051604051630b9947eb60e41b8152600481018490526001600160a01b039091169063b9947eb090602401602060405180830381865afa92505050801562000a86575060408051601f3d908101601f1916820190925262000a839181019062000c01565b60015b6200097e5760c051604051635b9cca9f60e11b8152600f84900b60048201526001600160a01b039091169063b739953e90602401620009b4565b60008162000ad4576200097e600062000b17565b610220516001600160a01b031663c661065762000af360018562000c40565b6040518263ffffffff1660e01b8152600401620009b491815260200190565b919050565b600081600f0b6000141562000b2b575060e0515b81600f0b6001141562000b3e5750610100515b81600f0b6002141562000b515750610120515b81600f0b6003141562000b645750610140515b6001600160a01b03811662000b12576040516334769e6f60e21b815260040160405180910390fd5b80516001600160a01b038116811462000b1257600080fd5b6000806000806080858703121562000bbb57600080fd5b62000bc68562000b8c565b935062000bd66020860162000b8c565b925062000be66040860162000b8c565b915062000bf66060860162000b8c565b905092959194509250565b60006020828403121562000c1457600080fd5b62000c1f8262000b8c565b9392505050565b60006020828403121562000c3957600080fd5b5051919050565b60008282101562000c6157634e487b7160e01b600052601160045260246000fd5b500390565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e051610200516102205161024051614fa962000fe36000396000818161078301528181613708015281816138bf015281816139d901528181613e0f0152613f01015260006105de01526000818161067501528181611f680152818161239f0152818161278901528181612e6b01528181612f0901526131ed015260006108ad01526000818161059c015261288b0152600081816103d4015261285c015260008181610605015261282d0152600081816106af01526127fe015260008181610876015281816126630152818161363501528181613f6b01526146640152600081816104d7015281816126340152818161356501528181613e7901526145480152600081816107f3015281816126050152818161349501528181613d85015261442c015260008181610448015281816125d6015281816133c501528181613cb901526143100152600081816107350152818161091a015281816109e701528181610a7701528181610b6f01528181610bfe01528181610c9501528181610d2601528181611139015281816111b1015281816112ee0152818161144101528181611578015281816115c00152818161166d015281816116b5015281816117660152818161179b01528181611ac501528181611b4301528181611ccd01528181611d4501528181611dea01528181611fb20152818161206b015281816120a00152818161213b0152818161245e015281816124cb0152818161255c01528181612aa901528181612bc801528181612ca2015281816142e801528181614404015281816145200152818161463c01526147840152600081816104fe0152818161291401528181614055015261482b01526000818161075c01528181610ec9015281816118a601528181611ef4015281816122450152818161270101528181612aff01528181612b9901528181612cf801528181612da0015281816130630152818161311a01528181613215015281816132f8015281816133ed015281816134bd0152818161358d0152818161365d01528181613bf401528181613ce401528181613dad01528181613ea101528181613f93015281816140dd015281816141910152818161423b0152818161435e0152818161447a01528181614596015281816146b20152818161475501526148950152614fa96000f3fe608060405234801561001057600080fd5b50600436106103a45760003560e01c806379bea664116101e9578063cc2b27d71161010f578063e2e7d264116100ad578063f446c1d01161007c578063f446c1d014610898578063f851a440146108a0578063fc0c546a146108a8578063fee3f7f9146108cf57600080fd5b8063e2e7d26414610838578063ec026ca71461084b578063ecb586a51461085e578063ef14101e1461087157600080fd5b8063d21220a7116100e9578063d21220a7146107ee578063d96c7fce14610815578063dd62ed3e1461081d578063ddca3f431461083057600080fd5b8063cc2b27d7146107b3578063ce30bbdb146107c6578063cf023dd0146107db57600080fd5b8063b4b577ad11610187578063bd90df7011610156578063bd90df7014610730578063c12c21c014610757578063c21ee1621461077e578063c6610657146107a557600080fd5b8063b4b577ad146106ff578063b739953e14610707578063b9947eb01461071a578063bb7b8b801461072857600080fd5b80638ba51dfc116101c35780638ba51dfc146106aa57806395d89b41146106d15780639fdaea0c146106d9578063a6417ed6146106ec57600080fd5b806379bea6641461065d57806382c630661461067057806385ca3c6f1461069757600080fd5b806333d2ebf2116102ce57806357d788751161026c5780636e1d82711161023b5780636e1d82711461060057806370a082311461062757806376a2f0f01461063a57806378aa73a41461064257600080fd5b806357d78875146105975780635e0d443f146105be57806363543f06146105d157806364a89bca146105d957600080fd5b80634469e30e116102a85780634469e30e146105615780634515cef3146105695780634903b0d11461057c5780635409491a1461058f57600080fd5b806333d2ebf2146105285780633883e1191461053b5780633df021241461054e57600080fd5b806318160ddd1161034657806323746eb81161031557806323746eb8146104bf57806325be124e146104d25780632f7a1881146104f9578063313ce5671461052057600080fd5b806318160ddd146104875780631a4d01d21461048f5780631af4de83146104a45780632081066c146104b757600080fd5b806307211ef71161038257806307211ef7146104305780630dfe168114610443578063140522881461046a57806314f059791461047257600080fd5b8063065a80d8146103a957806306871163146103cf57806306fdde031461041b575b600080fd5b6103bc6103b736600461491d565b6108d7565b6040519081526020015b60405180910390f35b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016103c6565b610423610a73565b6040516103c691906149ae565b6103bc61043e3660046149c1565b610b2b565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc610bfa565b61047a610c8b565b6040516103c691906149fd565b6103bc610d22565b6104a261049d366004614a2e565b610d8f565b005b6104a26104b23660046149c1565b610e27565b6103bc611135565b6103f66104cd36600461491d565b6111a2565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc6111ad565b6104a2610536366004614a53565b61121a565b6103bc610549366004614a8e565b6112ae565b6104a261055c366004614acb565b611366565b61047a611437565b6104a2610577366004614b0d565b6114aa565b6103bc61058a366004614b38565b611546565b6103bc6115bc565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc6105cc3660046149c1565b611629565b6103bc6116b1565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc610635366004614b73565b61171e565b6103bc611797565b61064a600281565b60405161ffff90911681526020016103c6565b6104a261066b3660046149c1565b611804565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b61047a6106a5366004614b90565b611a80565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b610423611b3f565b6104a26106e7366004614b0d565b611bac565b6104a26106fa366004614acb565b611c3f565b6103bc611cc9565b6103f661071536600461491d565b611d36565b6103f6610715366004614b38565b6103bc611d41565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc7f000000000000000000000000000000000000000000000000000000000000000081565b6103f66104cd366004614b38565b6103bc6107c1366004614bce565b611dae565b6107ce600681565b6040516103c69190614bfa565b6104a26107e9366004614a2e565b611e2e565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b61047a611fa8565b6103bc61082b366004614c3b565b61201b565b6103bc61209c565b6103bc610846366004614b38565b612109565b6104a2610859366004614a53565b61217f565b6104a261086c366004614c69565b6123e0565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc61245a565b6103f66124c7565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc612558565b6040517f4903b0d10000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff821660048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634903b0d1906024015b602060405180830381865afa9250505080156109b1575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526109ae91810190614c8d565b60015b610a68576040517f065a80d8000000000000000000000000000000000000000000000000000000008152600f83900b60048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063065a80d8906024015b602060405180830381865afa158015610a44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a689190614c8d565b92915050565b919050565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015610ae0573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b269190810190614d67565b905090565b6040517f07211ef7000000000000000000000000000000000000000000000000000000008152600f84810b600483015283900b6024820152604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906307211ef7906064015b602060405180830381865afa158015610bcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf09190614c8d565b90505b9392505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663140522886040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b269190614c8d565b610c936148ed565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166314f059796040518163ffffffff1660e01b8152600401606060405180830381865afa158015610cfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b269190614db8565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b60026000541415610e01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b60026000908155610e11836125c5565b9050610e1c816126d0565b505060016000555050565b60026000541415610e94576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610f25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f499190614e36565b90506000610f56856127ed565b90506000610f63856127ed565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529192506000918416906370a0823190602401602060405180830381865afa158015610fd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff99190614c8d565b90506001811115611127577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce800000061103f8784614e53565b6110499190614eb7565b604051600f8a810b602483015289900b60448201526064810184905260848101829052909150611124908690869086907fa6417ed6000000000000000000000000000000000000000000000000000000009060a4015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526001806128f7565b50505b505060016000555050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632081066c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6000610a68826125c5565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b60026000541415611287576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b60026000908155611297836125c5565b90506112a4838284612d6f565b5050600160005550565b6040517f3883e11900000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690633883e119906113259086908690600401614ef2565b602060405180830381865afa158015611342573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf39190614c8d565b600260005414156113d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b600260009081556113e3856125c5565b905060006113f0856125c5565b905061112782826000368080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525060019350915061301a9050565b61143f6148ed565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16634469e30e6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610cfe573d6000803e3d6000fd5b60026000541415611517576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b6002600090815561153d90600184358110916020860135821091604087013511906130e9565b50506001600055565b6040517f4903b0d1000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634903b0d19060240161095a565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635409491a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6040517f5e0d443f000000000000000000000000000000000000000000000000000000008152600f84810b600483015283900b6024820152604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635e0d443f90606401610baf565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166363543f066040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401610a27565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166376a2f0f06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b60026000541415611871576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611902573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119269190614e36565b90506000611933856125c5565b90506000611940856125c5565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529192506000918416906370a0823190602401602060405180830381865afa1580156119b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d69190614c8d565b90506001811115611127577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce8000000611a1c8784614e53565b611a269190614eb7565b604051600f8a810b602483015289900b60448201526064810184905260848101829052909150611124908690869086907f3df02124000000000000000000000000000000000000000000000000000000009060a40161109f565b611a886148ed565b6040517f85ca3c6f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906385ca3c6f90611afe90879087908790600401614f0a565b606060405180830381865afa158015611b1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf09190614db8565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610ae0573d6000803e3d6000fd5b60026000541415611c19576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b6002600090815561153d90600184358110916020860135821091604087013511906132c7565b60026000541415611cac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b60026000908155611cbc856127ed565b905060006113f0856127ed565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b4b577ad6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6000610a68826127ed565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb7b8b806040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6040517fcc2b27d700000000000000000000000000000000000000000000000000000000815260048101839052600f82900b60248201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063cc2b27d790604401611325565b60026000541415611e9b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b60026000908155611eab836125c5565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611f3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f5f9190614e36565b9050611f9b81837f0000000000000000000000000000000000000000000000000000000000000000611f92888a89613704565b600160006128f7565b5050600160005550505050565b611fb06148ed565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d96c7fce6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610cfe573d6000803e3d6000fd5b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063dd62ed3e90604401611325565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6040517fe2e7d264000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e2e7d26490602401610a27565b600260005414156121ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b600260009081556121fc836125c5565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa15801561228c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b09190614e36565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000918416906370a0823190602401602060405180830381865afa158015612322573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123469190614c8d565b905060018111156123d4577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce800000061238c8684614e53565b6123969190614eb7565b90506123d183857f00000000000000000000000000000000000000000000000000000000000000006123c98a8787613704565b6001806128f7565b50505b50506001600055505050565b6002600054141561244d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b600260005561153d613bc3565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f446c1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa158015612534573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b269190614e36565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fee3f7f96040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b600081600f0b600014156125f657507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6001141561262557507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6002141561265457507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6003141561268357507f00000000000000000000000000000000000000000000000000000000000000005b73ffffffffffffffffffffffffffffffffffffffff8116610a6e576040517fd1da79bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa15801561275d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127819190614e36565b90506127e8817f0000000000000000000000000000000000000000000000000000000000000000846000368080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525092508291506128f79050565b505050565b600081600f0b6000141561281e57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6001141561284d57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6002141561287c57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6003141561268357507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff8116610a6e576040517fd1da79bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606000803373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614612a60576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301528916906370a0823190602401602060405180830381865afa1580156129a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129c99190614c8d565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152919350908816906370a0823190602401602060405180830381865afa158015612a39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a5d9190614c8d565b90505b8415612b5c576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612b4357600080fd5b505af1158015612b57573d6000803e3d6000fd5b505050505b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a90612bf29033907f0000000000000000000000000000000000000000000000000000000000000000908b90600401614f31565b6000604051808303816000875af1158015612c11573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052612c579190810190614d67565b92508415612d55576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612d3c57600080fd5b505af1158015612d50573d6000803e3d6000fd5b505050505b612d6389898985858961403d565b50509695505050505050565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612dfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e209190614e36565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000917f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015612eb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ed69190614c8d565b90506001811115613013577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01613011827f0000000000000000000000000000000000000000000000000000000000000000867f1a4d01d200000000000000000000000000000000000000000000000000000000858a6b033b2e3c9fd0803ce8000000612f638b84614e53565b612f6d9190614eb7565b6040516024810193909352600f9190910b60448301526064820152608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152600060016128f7565b505b5050505050565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015260609060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa1580156130aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130ce9190614e36565b90506130de8188888888886128f7565b979650505050505050565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015613176573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061319a9190614e36565b90506131a88585858561429f565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561325957600080fd5b505af115801561326d573d6000803e3d6000fd5b505050506132b16000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061471592505050565b506132be8585858561429f565b61301381614813565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015613354573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133789190614e36565b9050841561344a576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561343157600080fd5b505af1158015613445573d6000803e3d6000fd5b505050505b831561351a576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561350157600080fd5b505af1158015613515573d6000803e3d6000fd5b505050505b82156135ea576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156135d157600080fd5b505af11580156135e5573d6000803e3d6000fd5b505050505b81156136ba576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156136a157600080fd5b505af11580156136b5573d6000803e3d6000fd5b505050505b6136fa6000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061471592505050565b5061301381614813565b60607f0000000000000000000000000000000000000000000000000000000000000000600214156138bd5783600f0b6000146137fa576040516000602482015260448101849052606481018390527f0b4c7e4d00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526138b6565b6040516024810184905260006044820152606481018390527f0b4c7e4d00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091525b9050610bf3565b7f0000000000000000000000000000000000000000000000000000000000000000600314156139d75783600f0b60001461398e5783600f0b60011461394557604051600060248201819052604482015260648101849052608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401613778565b604051600060248201819052604482018590526064820152608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401613778565b604051602481018490526000604482018190526064820152608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401613838565b7f000000000000000000000000000000000000000000000000000000000000000060041415613b615783600f0b600014613b115783600f0b600114613ac15783600f0b600214613a71576040516000602482018190526044820181905260648201526084810184905260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613778565b6040516000602482018190526044820181905260648201859052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613778565b6040516000602482018190526044820185905260648201819052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613778565b6040516024810184905260006044820181905260648201819052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613838565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f496e636f7272656374206e436f696e73000000000000000000000000000000006044820152606401610df8565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015613c50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c749190614e36565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301529192507f0000000000000000000000000000000000000000000000000000000000000000909116906351e3f16090604401600060405180830381600087803b158015613d2a57600080fd5b505af1158015613d3e573d6000803e3d6000fd5b50506040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f00000000000000000000000000000000000000000000000000000000000000001692506351e3f1609150604401600060405180830381600087803b158015613df357600080fd5b505af1158015613e07573d6000803e3d6000fd5b5050505060027f00000000000000000000000000000000000000000000000000000000000000001115613ff0576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015613ee557600080fd5b505af1158015613ef9573d6000803e3d6000fd5b5050505060037f00000000000000000000000000000000000000000000000000000000000000001115613ff0576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015613fd757600080fd5b505af1158015613feb573d6000803e3d6000fd5b505050505b6140306000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061471592505050565b5061403a81614813565b50565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461413e576040517f654a9eda00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528681166024830152858116604483015260648201859052608482018490527f0000000000000000000000000000000000000000000000000000000000000000169063654a9eda9060a401600060405180830381600087803b15801561412157600080fd5b505af1158015614135573d6000803e3d6000fd5b50505050613011565b80156141ee576040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015286811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b1580156141d557600080fd5b505af11580156141e9573d6000803e3d6000fd5b505050505b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015285811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561427f57600080fd5b505af1158015614293573d6000803e3d6000fd5b50505050505050505050565b83156143bb576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156143a257600080fd5b505af11580156143b6573d6000803e3d6000fd5b505050505b82156144d7576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156144be57600080fd5b505af11580156144d2573d6000803e3d6000fd5b505050505b81156145f3576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156145da57600080fd5b505af11580156145ee573d6000803e3d6000fd5b505050505b801561470f576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156146f657600080fd5b505af115801561470a573d6000803e3d6000fd5b505050505b50505050565b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815260609073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a906147ae9033907f0000000000000000000000000000000000000000000000000000000000000000908790600401614f31565b6000604051808303816000875af11580156147cd573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610a689190810190614d67565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461403a576040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b1580156148d957600080fd5b505af1158015613013573d6000803e3d6000fd5b60405180606001604052806003906020820280368337509192915050565b8035600f81900b8114610a6e57600080fd5b60006020828403121561492f57600080fd5b610bf38261490b565b60005b8381101561495357818101518382015260200161493b565b8381111561470f5750506000910152565b6000815180845261497c816020860160208601614938565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610bf36020830184614964565b6000806000606084860312156149d657600080fd5b6149df8461490b565b92506149ed6020850161490b565b9150604084013590509250925092565b60608101818360005b6003811015614a25578151835260209283019290910190600101614a06565b50505092915050565b600080600060608486031215614a4357600080fd5b833592506149ed6020850161490b565b60008060408385031215614a6657600080fd5b614a6f8361490b565b946020939093013593505050565b8060608101831015610a6857600080fd5b60008060808385031215614aa157600080fd5b614aab8484614a7d565b915060608301358015158114614ac057600080fd5b809150509250929050565b60008060008060808587031215614ae157600080fd5b614aea8561490b565b9350614af86020860161490b565b93969395505050506040820135916060013590565b60008060808385031215614b2057600080fd5b614b2a8484614a7d565b946060939093013593505050565b600060208284031215614b4a57600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461403a57600080fd5b600060208284031215614b8557600080fd5b8135610bf381614b51565b600080600060e08486031215614ba557600080fd5b614baf8585614a7d565b9250614bbe8560608601614a7d565b915060c084013590509250925092565b60008060408385031215614be157600080fd5b82359150614bf16020840161490b565b90509250929050565b6020810160118310614c35577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60008060408385031215614c4e57600080fd5b8235614c5981614b51565b91506020830135614ac081614b51565b60008060808385031215614c7c57600080fd5b82359150614bf18460208501614a7d565b600060208284031215614c9f57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff80841115614cf057614cf0614ca6565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715614d3657614d36614ca6565b81604052809350858152868686011115614d4f57600080fd5b614d5d866020830187614938565b5050509392505050565b600060208284031215614d7957600080fd5b815167ffffffffffffffff811115614d9057600080fd5b8201601f81018413614da157600080fd5b614db084825160208401614cd5565b949350505050565b600060608284031215614dca57600080fd5b82601f830112614dd957600080fd5b6040516060810181811067ffffffffffffffff82111715614dfc57614dfc614ca6565b604052806060840185811115614e1157600080fd5b845b81811015614e2b578051835260209283019201614e13565b509195945050505050565b600060208284031215614e4857600080fd5b8151610bf381614b51565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614eb2577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500290565b600082614eed577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60808101606084833791151560609190910152919050565b60e081016060858337606082016000815260608582375060c0919091019190915292915050565b600073ffffffffffffffffffffffffffffffffffffffff808616835280851660208401525060606040830152614f6a6060830184614964565b9594505050505056fea2646970667358221220efb951725986e76ee157ff0d00cd7b7a6a9b8a581784400c52be5c96516fe15064736f6c634300080a003360806040523480156200001157600080fd5b5060405162003954380380620039548339810160408190526200003491620002a2565b8151829082906200004d90600290602085019062000133565b5080516200006390600390602084019062000133565b506000601260405162000076906200019d565b6060808252600790820152664352564d6f636b60c81b608082015260a0602082018190526015908201527f43525620666f72204375727665506f6f6c4d6f636b000000000000000000000060c082015260ff909116604082015260e001604051809103906000f080158015620000f0573d6000803e3d6000fd5b50600080546001600160a01b039092166001600160a01b03199283168117909155600180549092161790555050670de0b6b3a7640000600755506200030c915050565b8280548282559060005260206000209081019282156200018b579160200282015b828111156200018b57825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019062000154565b5062000199929150620001ab565b5090565b61175880620021fc83390190565b5b80821115620001995760008155600101620001ac565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b0381168114620001f057600080fd5b919050565b600082601f8301126200020757600080fd5b815160206001600160401b0380831115620002265762000226620001c2565b8260051b604051601f19603f830116810181811084821117156200024e576200024e620001c2565b6040529384528581018301938381019250878511156200026d57600080fd5b83870191505b8482101562000297576200028782620001d8565b8352918301919083019062000273565b979650505050505050565b60008060408385031215620002b657600080fd5b82516001600160401b0380821115620002ce57600080fd5b620002dc86838701620001f5565b93506020850151915080821115620002f357600080fd5b506200030285828601620001f5565b9150509250929050565b611ee0806200031c6000396000f3fe608060405234801561001057600080fd5b506004361061030a5760003560e01c80637b475b681161019c578063c6610657116100ee578063e310327311610097578063f851a44011610071578063f851a44014610597578063fc0c546a1461059e578063fee3f7f91461039757600080fd5b8063e310327314610576578063ed8e84f314610589578063f446c1d01461039757600080fd5b8063dd62ed3e116100c8578063dd62ed3e14610552578063ddca3f4314610397578063e2e7d2641461056857600080fd5b8063c66106571461052c578063cc2b27d71461053f578063d96c7fce1461039e57600080fd5b8063a6417ed611610150578063b91434d11161012a578063b91434d1146104fe578063b9947eb014610511578063bb7b8b801461052457600080fd5b8063a6417ed6146104d8578063b4b577ad14610397578063b739953e146104eb57600080fd5b80638ea875f3116101815780638ea875f3146104bc57806395d89b411461033557806399bd2ba5146104c557600080fd5b80637b475b681461047757806382c630661461049c57600080fd5b8063313ce567116102605780635b36389c1161020957806370a08231116101e357806370a0823114610450578063710354181461046457806376a2f0f01461039757600080fd5b80635b36389c1461042a5780635e0d443f1461043d57806363543f061461039757600080fd5b80634903b0d11161023a5780634903b0d1146104045780635409491a1461039757806356ac35031461041757600080fd5b8063313ce567146103975780633df02124146103f15780634469e30e1461039e57600080fd5b806314052288116102c25780631a4d01d21161029c5780631a4d01d2146103a65780632081066c1461039757806323746eb8146103b957600080fd5b8063140522881461039757806314f059791461039e57806318160ddd1461039757600080fd5b806307211ef7116102f357806307211ef71461034f5780630b4c7e4d146103625780630f6ba8e31461037757600080fd5b8063065a80d81461030f57806306fdde0314610335575b600080fd5b61032261031d36600461191f565b6105be565b6040519081526020015b60405180910390f35b6040805160208101825260008152905161032c9190611966565b61032261035d3660046119b7565b610677565b610375610370366004611a8a565b6106c7565b005b61038a610385366004611ac6565b610898565b60405161032c9190611b04565b6000610322565b61038a6108cb565b6103756103b4366004611b35565b6108eb565b6103cc6103c736600461191f565b6109da565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161032c565b6103756103ff366004611b5a565b610a1a565b610322610412366004611b9c565b610b44565b6103756104253660046119b7565b610b59565b610375610438366004611bb5565b610bba565b61032261044b3660046119b7565b610d3d565b61032261045e366004611c06565b50600090565b610375610472366004611b9c565b600755565b610375610485366004611c21565b600f9190910b600090815260066020526040902055565b6001546103cc9073ffffffffffffffffffffffffffffffffffffffff1681565b61032260075481565b6103756104d3366004611c4b565b610d79565b6103756104e6366004611b5a565b610dd8565b6103cc6104f936600461191f565b611198565b61037561050c3660046119b7565b6111b0565b6103cc61051f366004611b9c565b611211565b600754610322565b6103cc61053a366004611b9c565b611226565b61032261054d366004611c67565b61123b565b610322610560366004611c8a565b600092915050565b61032261045e366004611b9c565b610375610584366004611cb4565b611271565b610322610560366004611ce2565b60006103cc565b6000546103cc9073ffffffffffffffffffffffffffffffffffffffff1681565b6000600282600f0b815481106105d6576105d6611d1a565b6000918252602090912001546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa15801561064d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106719190611d49565b92915050565b600f83810b60009081526005602090815260408083209386900b8352929052908120546b033b2e3c9fd0803ce8000000906106b3908490611d91565b6106bd9190611dce565b90505b9392505050565b60005b60028110156107f65760008382600281106106e7576106e7611d1a565b602002015111156107e4576002818154811061070557610705611d1a565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff166323b872dd333086856002811061074057610740611d1a565b60200201516040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff938416600482015292909116602483015260448201526064016020604051808303816000875af11580156107be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e29190611e09565b505b806107ee81611e26565b9150506106ca565b506000546040517f40c10f190000000000000000000000000000000000000000000000000000000081523360048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f19906044015b6020604051808303816000875af115801561086f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108939190611e09565b505050565b6108a06118ea565b6040805180820182529085906002908390839080828437600092019190915250919695505050505050565b6108d36118ea565b50604080518082019091526000808252602082015290565b6000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810185905273ffffffffffffffffffffffffffffffffffffffff909116906379cc6790906044016020604051808303816000875af1158015610962573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109869190611e09565b5061089333826002856fffffffffffffffffffffffffffffffff16815481106109b1576109b1611d1a565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1691906113f4565b6000600282600f0b815481106109f2576109f2611d1a565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1692915050565b6000610a27858585610d3d565b905081811015610abe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f437572766556314d6f636b3a20494e53554646494349454e545f4f555450555460448201527f5f414d4f554e540000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b610b133330856002896fffffffffffffffffffffffffffffffff1681548110610ae957610ae9611d1a565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169291906114c8565b610b3d33826002876fffffffffffffffffffffffffffffffff16815481106109b1576109b1611d1a565b5050505050565b6000600282815481106105d6576105d6611d1a565b600f83810b60009081526005602090815260408083209386900b835292905220819055610b926b033b2e3c9fd0803ce80000008261152c565b600f92830b60009081526005602090815260408083209690950b825294909452919092205550565b60005b6002811015610cdf576000828260028110610bda57610bda611d1a565b60200201511115610ccd5760028181548110610bf857610bf8611d1a565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33848460028110610c3257610c32611d1a565b60200201516040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af1158015610ca7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ccb9190611e09565b505b80610cd781611e26565b915050610bbd565b506000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810184905273ffffffffffffffffffffffffffffffffffffffff909116906379cc679090604401610850565b600f83810b60009081526004602090815260408083209386900b8352929052908120546b033b2e3c9fd0803ce8000000906106b3908490611d91565b6000546040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052909116906340c10f1990604401610850565b60006002856fffffffffffffffffffffffffffffffff1681548110610dff57610dff611d1a565b60009182526020822001546003805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff8816908110610e4b57610e4b611d1a565b60009182526020822001546002805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff8816908110610e9757610e97611d1a565b60009182526020822001546003805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff8916908110610ee357610ee3611d1a565b600091825260208220015473ffffffffffffffffffffffffffffffffffffffff169150610f11898989610677565b905085811015610fa3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f437572766556314d6f636b3a20494e53554646494349454e545f4f555450555460448201527f5f414d4f554e54000000000000000000000000000000000000000000000000006064820152608401610ab5565b610fc573ffffffffffffffffffffffffffffffffffffffff851633308a6114c8565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526024820189905285169063095ea7b3906044016020604051808303816000875af115801561103a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061105e9190611e09565b506040517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8616906340c10f1990604401600060405180830381600087803b1580156110cd57600080fd5b505af11580156110e1573d6000803e3d6000fd5b50506040517f1e9a69500000000000000000000000000000000000000000000000000000000081523060048201526024810184905273ffffffffffffffffffffffffffffffffffffffff86169250631e9a69509150604401600060405180830381600087803b15801561115357600080fd5b505af1158015611167573d6000803e3d6000fd5b5061118d9250505073ffffffffffffffffffffffffffffffffffffffff831633836113f4565b505050505050505050565b6000600382600f0b815481106109f2576109f2611d1a565b600f83810b60009081526004602090815260408083209386900b8352929052208190556111e96b033b2e3c9fd0803ce80000008261152c565b600f92830b60009081526004602090815260408083209690950b825294909452919092205550565b6000600382815481106109f2576109f2611d1a565b6000600282815481106109f2576109f2611d1a565b600f81900b6000908152600660205260408120546b033b2e3c9fd0803ce8000000906112679085611d91565b6106c09190611dce565b60005b600281101561139657600083826002811061129157611291611d1a565b6020020135111561138457600281815481106112af576112af611d1a565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb338584600281106112e9576112e9611d1a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff9093166004840152602002013560248201526044016020604051808303816000875af115801561135e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113829190611e09565b505b8061138e81611e26565b915050611274565b506000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906379cc679090604401610850565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526108939084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611692565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526115269085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611446565b50505050565b60408051808201909152600281527f4d3300000000000000000000000000000000000000000000000000000000000060208201526000908261159b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab59190611966565b5060006115a9600284611dce565b90506b033b2e3c9fd0803ce80000006115e2827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611e5f565b6115ec9190611dce565b8411156040518060400160405280600281526020017f4d310000000000000000000000000000000000000000000000000000000000008152509061165d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab59190611966565b5082816116766b033b2e3c9fd0803ce800000087611d91565b6116809190611e76565b61168a9190611dce565b949350505050565b60006116f4826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661179e9092919063ffffffff16565b80519091501561089357808060200190518101906117129190611e09565b610893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610ab5565b60606106bd848460008585843b611811576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610ab5565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161183a9190611e8e565b60006040518083038185875af1925050503d8060008114611877576040519150601f19603f3d011682016040523d82523d6000602084013e61187c565b606091505b509150915061188c828286611897565b979650505050505050565b606083156118a65750816106c0565b8251156118b65782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab59190611966565b60405180604001604052806002906020820280368337509192915050565b8035600f81900b811461191a57600080fd5b919050565b60006020828403121561193157600080fd5b6106c082611908565b60005b8381101561195557818101518382015260200161193d565b838111156115265750506000910152565b602081526000825180602084015261198581604085016020870161193a565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000606084860312156119cc57600080fd5b6119d584611908565b92506119e360208501611908565b9150604084013590509250925092565b600082601f830112611a0457600080fd5b6040516040810181811067ffffffffffffffff82111715611a4e577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b8060405250806040840185811115611a6557600080fd5b845b81811015611a7f578035835260209283019201611a67565b509195945050505050565b60008060608385031215611a9d57600080fd5b611aa784846119f3565b946040939093013593505050565b806040810183101561067157600080fd5b600080600060a08486031215611adb57600080fd5b611ae58585611ab5565b9250611af48560408601611ab5565b9150608084013590509250925092565b60408101818360005b6002811015611b2c578151835260209283019290910190600101611b0d565b50505092915050565b600080600060608486031215611b4a57600080fd5b833592506119e360208501611908565b60008060008060808587031215611b7057600080fd5b611b7985611908565b9350611b8760208601611908565b93969395505050506040820135916060013590565b600060208284031215611bae57600080fd5b5035919050565b60008060608385031215611bc857600080fd5b82359150611bd984602085016119f3565b90509250929050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461191a57600080fd5b600060208284031215611c1857600080fd5b6106c082611be2565b60008060408385031215611c3457600080fd5b611c3d83611908565b946020939093013593505050565b60008060408385031215611c5e57600080fd5b611c3d83611be2565b60008060408385031215611c7a57600080fd5b82359150611bd960208401611908565b60008060408385031215611c9d57600080fd5b611ca683611be2565b9150611bd960208401611be2565b60008060608385031215611cc757600080fd5b611aa78484611ab5565b8015158114611cdf57600080fd5b50565b60008060608385031215611cf557600080fd5b611cff8484611ab5565b91506040830135611d0f81611cd1565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215611d5b57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611dc957611dc9611d62565b500290565b600082611e04577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600060208284031215611e1b57600080fd5b81516106c081611cd1565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611e5857611e58611d62565b5060010190565b600082821015611e7157611e71611d62565b500390565b60008219821115611e8957611e89611d62565b500190565b60008251611ea081846020870161193a565b919091019291505056fea2646970667358221220adf7625854adc68c76c6173acf1acab253dff9360c8a557d9c3227c5377c0ffb64736f6c634300080a003360a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a00336101406040523480156200001257600080fd5b506040516200171338038062001713833981016040819052620000359162000389565b6000805460ff191690558484828260c882826001600160a01b0381166200006f57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000ae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d49190620004b3565b6001600160a01b0316608052508051620000f6906002906020840190620002b0565b505060a052506001600160a01b0382166200012457604051635919af9760e11b815260040160405180910390fd5b6001600160a01b03821660c0819052670de0b6b3a764000060e05260408051630176f71760e71b815290516000929163bb7b8b809160048083019260209291908290030181865afa1580156200017e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001a49190620004d8565b9050620001b18162000210565b505050506001600160a01b0383161580620001d357506001600160a01b038216155b15620001f257604051635919af9760e11b815260040160405180910390fd5b506001600160a01b0391821661010052166101205250620005a59050565b806200022f576040516309aadd6f60e41b815260040160405180910390fd5b60018190557f82e7ee47180a631312683eeb2a85ad264c9af490d54de5a75bbdb95b968c6de28162000261816200027c565b6040805192835260208301919091520160405180910390a150565b60a0516000906127109062000292908262000508565b6200029e908462000523565b620002aa919062000545565b92915050565b828054620002be9062000568565b90600052602060002090601f016020900481019282620002e257600085556200032d565b82601f10620002fd57805160ff19168380011785556200032d565b828001600101855582156200032d579182015b828111156200032d57825182559160200191906001019062000310565b506200033b9291506200033f565b5090565b5b808211156200033b576000815560010162000340565b80516001600160a01b03811681146200036e57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600080600080600060a08688031215620003a257600080fd5b620003ad8662000356565b94506020620003be81880162000356565b9450620003ce6040880162000356565b9350620003de6060880162000356565b60808801519093506001600160401b0380821115620003fc57600080fd5b818901915089601f8301126200041157600080fd5b81518181111562000426576200042662000373565b604051601f8201601f19908116603f0116810190838211818310171562000451576200045162000373565b816040528281528c868487010111156200046a57600080fd5b600093505b828410156200048e57848401860151818501870152928501926200046f565b82841115620004a05760008684830101525b8096505050505050509295509295909350565b600060208284031215620004c657600080fd5b620004d18262000356565b9392505050565b600060208284031215620004eb57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156200051e576200051e620004f2565b500190565b6000816000190483118215151615620005405762000540620004f2565b500290565b6000826200056357634e487b7160e01b600052601260045260246000fd5b500490565b600181811c908216806200057d57607f821691505b602082108114156200059f57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c05160e05161010051610120516110e66200062d6000396000818161034101526107c80152600081816102f701526107190152600081816102d00152610923015260008181610195015261088701526000818161015b0152610b150152600081816102a90152818161039901528181610515015261064d01526110e66000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c80639a6fc8f5116100cd578063b09ad8a011610081578063d62ada1111610066578063d62ada1114610334578063e5693f411461033c578063feaf968c1461036357600080fd5b8063b09ad8a014610319578063bc489a651461032157600080fd5b8063a50cf2c8116100b2578063a50cf2c8146102a4578063a834559e146102cb578063ab0ca0e1146102f257600080fd5b80639a6fc8f514610251578063a384d6ff1461029b57600080fd5b80633fd0875f116101245780635c975abb116101095780635c975abb1461021d5780637284e416146102345780638456cb591461024957600080fd5b80633fd0875f1461020057806354fd4d501461021557600080fd5b806312b495a814610156578063218751b214610190578063313ce567146101dc5780633f4ba83a146101f6575b600080fd5b61017d7f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b6101b77f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610187565b6101e4600881565b60405160ff9091168152602001610187565b6101fe61036b565b005b610208600281565b6040516101879190610cd5565b61017d600181565b60005460ff165b6040519015158152602001610187565b61023c610459565b6040516101879190610d16565b6101fe6104e7565b61026461025f366004610da1565b6105d3565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610187565b61017d60015481565b6101b77f000000000000000000000000000000000000000000000000000000000000000081565b61017d7f000000000000000000000000000000000000000000000000000000000000000081565b6101b77f000000000000000000000000000000000000000000000000000000000000000081565b61017d61060d565b6101fe61032f366004610dc5565b61061f565b610224600181565b6101b77f000000000000000000000000000000000000000000000000000000000000000081565b61026461070f565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156103f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104199190610dde565b61044f576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610457610965565b565b6002805461046690610e00565b80601f016020809104026020016040519081016040528092919081815260200182805461049290610e00565b80156104df5780601f106104b4576101008083540402835291602001916104df565b820191906000526020600020905b8154815290600101906020018083116104c257829003601f168201915b505050505081565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015610571573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105959190610dde565b6105cb576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610457610a4b565b60008060008060006040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061061a600154610b0b565b905090565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156106a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106cd9190610dde565b610703576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61070c81610b54565b50565b60008060008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610782573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a69190610e54565b9398509196509450925090506107be85858484610bd6565b60008060008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610831573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108559190610e54565b9450945094509450945061086b85858484610bd6565b88841215610883578499508398508297508196508095505b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb7b8b806040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109149190610eac565b905061091f81610c71565b90507f000000000000000000000000000000000000000000000000000000000000000061094c828c610ef4565b6109569190610fdf565b99505050505050509091929394565b60005460ff166109d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff1615610ab8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016109cd565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610a213390565b6000612710610b3a7f000000000000000000000000000000000000000000000000000000000000000082611047565b610b44908461105f565b610b4e919061109c565b92915050565b80610b8b576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190557f82e7ee47180a631312683eeb2a85ad264c9af490d54de5a75bbdb95b968c6de281610bbb81610b0b565b6040805192835260208301919091520160405180910390a150565b60008313610c10576040517f56e05d2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8369ffffffffffffffffffff168169ffffffffffffffffffff161080610c34575081155b15610c6b576040517fb1cf675500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60015460009080831015610cb1576040517fb416da7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610cbc82610b0b565b905080841115610ccd579392505050565b509192915050565b6020810160068310610d10577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b600060208083528351808285015260005b81811015610d4357858101830151858201604001528201610d27565b81811115610d55576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b69ffffffffffffffffffff8116811461070c57600080fd5b600060208284031215610db357600080fd5b8135610dbe81610d89565b9392505050565b600060208284031215610dd757600080fd5b5035919050565b600060208284031215610df057600080fd5b81518015158114610dbe57600080fd5b600181811c90821680610e1457607f821691505b60208210811415610e4e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600080600080600060a08688031215610e6c57600080fd5b8551610e7781610d89565b809550506020860151935060408601519250606086015191506080860151610e9e81610d89565b809150509295509295909350565b600060208284031215610ebe57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615610f3557610f35610ec5565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615610f7057610f70610ec5565b60008712925087820587128484161615610f8c57610f8c610ec5565b87850587128184161615610fa257610fa2610ec5565b505050929093029392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082610fee57610fee610fb0565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f80000000000000000000000000000000000000000000000000000000000000008314161561104257611042610ec5565b500590565b6000821982111561105a5761105a610ec5565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561109757611097610ec5565b500290565b6000826110ab576110ab610fb0565b50049056fea2646970667358221220ca5730f8ac976a41fd1283a55d712276536b576394940abc65027e8592280cc364736f6c634300080a00336101606040523480156200001257600080fd5b5060405162001852380380620018528339810160408190526200003591620003a3565b6000805460ff191690558585828260c882826001600160a01b0381166200006f57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000ae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d49190620004de565b6001600160a01b0316608052508051620000f6906002906020840190620002ca565b505060a052506001600160a01b0382166200012457604051635919af9760e11b815260040160405180910390fd5b6001600160a01b03821660c0819052670de0b6b3a764000060e05260408051630176f71760e71b815290516000929163bb7b8b809160048083019260209291908290030181865afa1580156200017e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001a4919062000503565b9050620001b1816200022a565b505050506001600160a01b0384161580620001d357506001600160a01b038316155b80620001e657506001600160a01b038216155b156200020557604051635919af9760e11b815260040160405180910390fd5b506001600160a01b039283166101005290821661012052166101405250620005d09050565b8062000249576040516309aadd6f60e41b815260040160405180910390fd5b60018190557f82e7ee47180a631312683eeb2a85ad264c9af490d54de5a75bbdb95b968c6de2816200027b8162000296565b6040805192835260208301919091520160405180910390a150565b60a05160009061271090620002ac908262000533565b620002b890846200054e565b620002c4919062000570565b92915050565b828054620002d89062000593565b90600052602060002090601f016020900481019282620002fc576000855562000347565b82601f106200031757805160ff191683800117855562000347565b8280016001018555821562000347579182015b82811115620003475782518255916020019190600101906200032a565b506200035592915062000359565b5090565b5b808211156200035557600081556001016200035a565b80516001600160a01b03811681146200038857600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60008060008060008060c08789031215620003bd57600080fd5b620003c88762000370565b95506020620003d981890162000370565b9550620003e96040890162000370565b9450620003f96060890162000370565b9350620004096080890162000370565b60a08901519093506001600160401b03808211156200042757600080fd5b818a0191508a601f8301126200043c57600080fd5b8151818111156200045157620004516200038d565b604051601f8201601f19908116603f011681019083821181831017156200047c576200047c6200038d565b816040528281528d868487010111156200049557600080fd5b600093505b82841015620004b957848401860151818501870152928501926200049a565b82841115620004cb5760008684830101525b8096505050505050509295509295509295565b600060208284031215620004f157600080fd5b620004fc8262000370565b9392505050565b6000602082840312156200051657600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156200054957620005496200051d565b500190565b60008160001904831182151516156200056b576200056b6200051d565b500290565b6000826200058e57634e487b7160e01b600052601260045260246000fd5b500490565b600181811c90821680620005a857607f821691505b60208210811415620005ca57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c05160e0516101005161012051610140516111e86200066a6000396000818161023501526108c8015260008181610383015261080901526000818161033901526107620152600081816103120152610a250152600081816101b001526109890152600081816101760152610c170152600081816102eb015281816103db01528181610557015261068f01526111e86000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c80639a6fc8f5116100cd578063b09ad8a011610081578063d62ada1111610066578063d62ada1114610376578063e5693f411461037e578063feaf968c146103a557600080fd5b8063b09ad8a01461035b578063bc489a651461036357600080fd5b8063a50cf2c8116100b2578063a50cf2c8146102e6578063a834559e1461030d578063ab0ca0e11461033457600080fd5b80639a6fc8f514610293578063a384d6ff146102dd57600080fd5b8063427cb6fe116101245780635c975abb116101095780635c975abb1461025f5780637284e416146102765780638456cb591461028b57600080fd5b8063427cb6fe1461023057806354fd4d501461025757600080fd5b8063313ce56711610155578063313ce567146101f75780633f4ba83a146102115780633fd0875f1461021b57600080fd5b806312b495a814610171578063218751b2146101ab575b600080fd5b6101987f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101a2565b6101ff600881565b60405160ff90911681526020016101a2565b6102196103ad565b005b610223600381565b6040516101a29190610dd7565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b610198600181565b60005460ff165b60405190151581526020016101a2565b61027e61049b565b6040516101a29190610e18565b610219610529565b6102a66102a1366004610ea3565b610615565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a0016101a2565b61019860015481565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b6101987f000000000000000000000000000000000000000000000000000000000000000081565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b61019861064f565b610219610371366004610ec7565b610661565b610266600181565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b6102a6610751565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa158015610437573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061045b9190610ee0565b610491576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610499610a67565b565b600280546104a890610f02565b80601f01602080910402602001604051908101604052809291908181526020018280546104d490610f02565b80156105215780601f106104f657610100808354040283529160200191610521565b820191906000526020600020905b81548152906001019060200180831161050457829003601f168201915b505050505081565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa1580156105b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105d79190610ee0565b61060d576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610499610b4d565b60008060008060006040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061065c600154610c0d565b905090565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156106eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070f9190610ee0565b610745576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61074e81610c56565b50565b6000806000806000806000806000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156107cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ef9190610f56565b939d50919b509950975095506108078a8a8989610cd8565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610872573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108969190610f56565b9398509196509450925090506108ae85858484610cd8565b888412156108c6578499508398508297508196508095505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610931573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109559190610f56565b93985091965094509250905061096d85858484610cd8565b88841215610985578499508398508297508196508095505b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb7b8b806040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a169190610fae565b9050610a2181610d73565b90507f0000000000000000000000000000000000000000000000000000000000000000610a4e828c610ff6565b610a5891906110e1565b99505050505050509091929394565b60005460ff16610ad8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff1615610bba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610acf565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b233390565b6000612710610c3c7f000000000000000000000000000000000000000000000000000000000000000082611149565b610c469084611161565b610c50919061119e565b92915050565b80610c8d576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190557f82e7ee47180a631312683eeb2a85ad264c9af490d54de5a75bbdb95b968c6de281610cbd81610c0d565b6040805192835260208301919091520160405180910390a150565b60008313610d12576040517f56e05d2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8369ffffffffffffffffffff168169ffffffffffffffffffff161080610d36575081155b15610d6d576040517fb1cf675500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60015460009080831015610db3576040517fb416da7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610dbe82610c0d565b905080841115610dcf579392505050565b509192915050565b6020810160068310610e12577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b600060208083528351808285015260005b81811015610e4557858101830151858201604001528201610e29565b81811115610e57576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b69ffffffffffffffffffff8116811461074e57600080fd5b600060208284031215610eb557600080fd5b8135610ec081610e8b565b9392505050565b600060208284031215610ed957600080fd5b5035919050565b600060208284031215610ef257600080fd5b81518015158114610ec057600080fd5b600181811c90821680610f1657607f821691505b60208210811415610f50577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600080600080600060a08688031215610f6e57600080fd5b8551610f7981610e8b565b809550506020860151935060408601519250606086015191506080860151610fa081610e8b565b809150509295509295909350565b600060208284031215610fc057600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60008413600084138583048511828216161561103757611037610fc7565b7f8000000000000000000000000000000000000000000000000000000000000000600087128682058812818416161561107257611072610fc7565b6000871292508782058712848416161561108e5761108e610fc7565b878505871281841616156110a4576110a4610fc7565b505050929093029392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826110f0576110f06110b2565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f80000000000000000000000000000000000000000000000000000000000000008314161561114457611144610fc7565b500590565b6000821982111561115c5761115c610fc7565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561119957611199610fc7565b500290565b6000826111ad576111ad6110b2565b50049056fea2646970667358221220226b667ed6fc6db7c8ec1377cc84dae524e2dc572320ead4a7092944a6b912de64736f6c634300080a003360806040523480156200001157600080fd5b5060405162003969380380620039698339810160408190526200003491620002a2565b8151829082906200004d90600290602085019062000133565b5080516200006390600390602084019062000133565b506000601260405162000076906200019d565b6060808252600790820152664352564d6f636b60c81b608082015260a0602082018190526015908201527f43525620666f72204375727665506f6f6c4d6f636b000000000000000000000060c082015260ff909116604082015260e001604051809103906000f080158015620000f0573d6000803e3d6000fd5b50600080546001600160a01b039092166001600160a01b03199283168117909155600180549092161790555050670de0b6b3a7640000600755506200030c915050565b8280548282559060005260206000209081019282156200018b579160200282015b828111156200018b57825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019062000154565b5062000199929150620001ab565b5090565b611758806200221183390190565b5b80821115620001995760008155600101620001ac565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b0381168114620001f057600080fd5b919050565b600082601f8301126200020757600080fd5b815160206001600160401b0380831115620002265762000226620001c2565b8260051b604051601f19603f830116810181811084821117156200024e576200024e620001c2565b6040529384528581018301938381019250878511156200026d57600080fd5b83870191505b8482101562000297576200028782620001d8565b8352918301919083019062000273565b979650505050505050565b60008060408385031215620002b657600080fd5b82516001600160401b0380821115620002ce57600080fd5b620002dc86838701620001f5565b93506020850151915080821115620002f357600080fd5b506200030285828601620001f5565b9150509250929050565b611ef5806200031c6000396000f3fe608060405234801561001057600080fd5b506004361061030a5760003560e01c80637b475b681161019c578063bb7b8b80116100ee578063ddca3f4311610097578063f851a44011610071578063f851a44014610597578063fc0c546a1461059e578063fee3f7f91461037757600080fd5b8063ddca3f4314610377578063e2e7d26414610589578063f446c1d01461037757600080fd5b8063cf701ff7116100c8578063cf701ff714610565578063d96c7fce1461037e578063dd62ed3e1461057b57600080fd5b8063bb7b8b8014610537578063c66106571461053f578063cc2b27d71461055257600080fd5b806399bd2ba511610150578063b739953e1161012a578063b739953e146104fe578063b91434d114610511578063b9947eb01461052457600080fd5b806399bd2ba5146104d8578063a6417ed6146104eb578063b4b577ad1461037757600080fd5b806382c630661161018157806382c63066146104af5780638ea875f3146104cf57806395d89b411461034a57600080fd5b80637b475b68146104775780637d49d8751461049c57600080fd5b8063313ce5671161026057806356ac35031161020957806370a08231116101e357806370a0823114610450578063710354181461046457806376a2f0f01461037757600080fd5b806356ac35031461042a5780635e0d443f1461043d57806363543f061461037757600080fd5b80634903b0d11161023a5780634903b0d11461040457806353b546cd146104175780635409491a1461037757600080fd5b8063313ce567146103775780633df02124146103f15780634469e30e1461037e57600080fd5b806314f05979116102c25780631a4d01d21161029c5780631a4d01d2146103a65780632081066c1461037757806323746eb8146103b957600080fd5b806314f059791461037e57806318160ddd1461037757806318a7bd761461039357600080fd5b806306fdde03116102f357806306fdde031461034a57806307211ef714610364578063140522881461037757600080fd5b8063029b2f341461030f578063065a80d814610324575b600080fd5b61032261031d3660046119b2565b6105be565b005b6103376103323660046119f4565b61078f565b6040519081526020015b60405180910390f35b604080516020810182526000815290516103419190611a3b565b610337610372366004611a8c565b610848565b6000610337565b610386610898565b6040516103419190611ac8565b6103226103a1366004611b0a565b6108ca565b6103226103b4366004611b27565b610a4d565b6103cc6103c73660046119f4565b610b3c565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610341565b6103226103ff366004611b4c565b610b7c565b610337610412366004611b8e565b610ca6565b610386610425366004611ba7565b610cbb565b610322610438366004611a8c565b610cf1565b61033761044b366004611a8c565b610d52565b61033761045e366004611c0b565b50600090565b610322610472366004611b8e565b600755565b610322610485366004611c26565b600f9190910b600090815260066020526040902055565b6103226104aa366004611c50565b610d8e565b6001546103cc9073ffffffffffffffffffffffffffffffffffffffff1681565b61033760075481565b6103226104e6366004611c7d565b610f11565b6103226104f9366004611b4c565b610f70565b6103cc61050c3660046119f4565b611330565b61032261051f366004611a8c565b611348565b6103cc610532366004611b8e565b6113a9565b600754610337565b6103cc61054d366004611b8e565b6113be565b610337610560366004611c99565b6113d3565b610337610573366004611ccd565b600092915050565b610337610573366004611d05565b61033761045e366004611b8e565b60006103cc565b6000546103cc9073ffffffffffffffffffffffffffffffffffffffff1681565b60005b60048110156106ed5760008382600481106105de576105de611d2f565b602002015111156106db57600281815481106105fc576105fc611d2f565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff166323b872dd333086856004811061063757610637611d2f565b60200201516040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff938416600482015292909116602483015260448201526064016020604051808303816000875af11580156106b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d99190611d5e565b505b806106e581611daa565b9150506105c1565b506000546040517f40c10f190000000000000000000000000000000000000000000000000000000081523360048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f19906044015b6020604051808303816000875af1158015610766573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078a9190611d5e565b505050565b6000600282600f0b815481106107a7576107a7611d2f565b6000918252602090912001546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa15801561081e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108429190611de3565b92915050565b600f83810b60009081526005602090815260408083209386900b8352929052908120546b033b2e3c9fd0803ce800000090610884908490611dfc565b61088e9190611e39565b90505b9392505050565b6108a06118ff565b60405180608001604052806000815260200160008152602001600081526020016000815250905090565b60005b60048110156109ef5760008382600481106108ea576108ea611d2f565b602002013511156109dd576002818154811061090857610908611d2f565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb3385846004811061094257610942611d2f565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff9093166004840152602002013560248201526044016020604051808303816000875af11580156109b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109db9190611d5e565b505b806109e781611daa565b9150506108cd565b506000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906379cc679090604401610747565b6000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810185905273ffffffffffffffffffffffffffffffffffffffff909116906379cc6790906044016020604051808303816000875af1158015610ac4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae89190611d5e565b5061078a33826002856fffffffffffffffffffffffffffffffff1681548110610b1357610b13611d2f565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169190611409565b6000600282600f0b81548110610b5457610b54611d2f565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1692915050565b6000610b89858585610d52565b905081811015610c20576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f437572766556314d6f636b3a20494e53554646494349454e545f4f555450555460448201527f5f414d4f554e540000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b610c753330856002896fffffffffffffffffffffffffffffffff1681548110610c4b57610c4b611d2f565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169291906114dd565b610c9f33826002876fffffffffffffffffffffffffffffffff1681548110610b1357610b13611d2f565b5050505050565b6000600282815481106107a7576107a7611d2f565b610cc36118ff565b6040805160808181019092529085906004908390839080828437600092019190915250919695505050505050565b600f83810b60009081526005602090815260408083209386900b835292905220819055610d2a6b033b2e3c9fd0803ce800000082611541565b600f92830b60009081526005602090815260408083209690950b825294909452919092205550565b600f83810b60009081526004602090815260408083209386900b8352929052908120546b033b2e3c9fd0803ce800000090610884908490611dfc565b60005b6004811015610eb3576000828260048110610dae57610dae611d2f565b60200201511115610ea15760028181548110610dcc57610dcc611d2f565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33848460048110610e0657610e06611d2f565b60200201516040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af1158015610e7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9f9190611d5e565b505b80610eab81611daa565b915050610d91565b506000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810184905273ffffffffffffffffffffffffffffffffffffffff909116906379cc679090604401610747565b6000546040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052909116906340c10f1990604401610747565b60006002856fffffffffffffffffffffffffffffffff1681548110610f9757610f97611d2f565b60009182526020822001546003805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff8816908110610fe357610fe3611d2f565b60009182526020822001546002805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff881690811061102f5761102f611d2f565b60009182526020822001546003805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff891690811061107b5761107b611d2f565b600091825260208220015473ffffffffffffffffffffffffffffffffffffffff1691506110a9898989610848565b90508581101561113b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f437572766556314d6f636b3a20494e53554646494349454e545f4f555450555460448201527f5f414d4f554e54000000000000000000000000000000000000000000000000006064820152608401610c17565b61115d73ffffffffffffffffffffffffffffffffffffffff851633308a6114dd565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526024820189905285169063095ea7b3906044016020604051808303816000875af11580156111d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f69190611d5e565b506040517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8616906340c10f1990604401600060405180830381600087803b15801561126557600080fd5b505af1158015611279573d6000803e3d6000fd5b50506040517f1e9a69500000000000000000000000000000000000000000000000000000000081523060048201526024810184905273ffffffffffffffffffffffffffffffffffffffff86169250631e9a69509150604401600060405180830381600087803b1580156112eb57600080fd5b505af11580156112ff573d6000803e3d6000fd5b506113259250505073ffffffffffffffffffffffffffffffffffffffff83163383611409565b505050505050505050565b6000600382600f0b81548110610b5457610b54611d2f565b600f83810b60009081526004602090815260408083209386900b8352929052208190556113816b033b2e3c9fd0803ce800000082611541565b600f92830b60009081526004602090815260408083209690950b825294909452919092205550565b600060038281548110610b5457610b54611d2f565b600060028281548110610b5457610b54611d2f565b600f81900b6000908152600660205260408120546b033b2e3c9fd0803ce8000000906113ff9085611dfc565b6108919190611e39565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905261078a9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526116a7565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905261153b9085907f23b872dd000000000000000000000000000000000000000000000000000000009060840161145b565b50505050565b60408051808201909152600281527f4d330000000000000000000000000000000000000000000000000000000000006020820152600090826115b0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c179190611a3b565b5060006115be600284611e39565b90506b033b2e3c9fd0803ce80000006115f7827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611e74565b6116019190611e39565b8411156040518060400160405280600281526020017f4d3100000000000000000000000000000000000000000000000000000000000081525090611672576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c179190611a3b565b50828161168b6b033b2e3c9fd0803ce800000087611dfc565b6116959190611e8b565b61169f9190611e39565b949350505050565b6000611709826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166117b39092919063ffffffff16565b80519091501561078a57808060200190518101906117279190611d5e565b61078a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610c17565b606061088e848460008585843b611826576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610c17565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161184f9190611ea3565b60006040518083038185875af1925050503d806000811461188c576040519150601f19603f3d011682016040523d82523d6000602084013e611891565b606091505b50915091506118a18282866118ac565b979650505050505050565b606083156118bb575081610891565b8251156118cb5782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c179190611a3b565b60405180608001604052806004906020820280368337509192915050565b600082601f83011261192e57600080fd5b6040516080810181811067ffffffffffffffff82111715611978577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405280608084018581111561198d57600080fd5b845b818110156119a757803583526020928301920161198f565b509195945050505050565b60008060a083850312156119c557600080fd5b6119cf848461191d565b946080939093013593505050565b8035600f81900b81146119ef57600080fd5b919050565b600060208284031215611a0657600080fd5b610891826119dd565b60005b83811015611a2a578181015183820152602001611a12565b8381111561153b5750506000910152565b6020815260008251806020840152611a5a816040850160208701611a0f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b600080600060608486031215611aa157600080fd5b611aaa846119dd565b9250611ab8602085016119dd565b9150604084013590509250925092565b60808101818360005b6004811015611af0578151835260209283019290910190600101611ad1565b50505092915050565b806080810183101561084257600080fd5b60008060a08385031215611b1d57600080fd5b6119cf8484611af9565b600080600060608486031215611b3c57600080fd5b83359250611ab8602085016119dd565b60008060008060808587031215611b6257600080fd5b611b6b856119dd565b9350611b79602086016119dd565b93969395505050506040820135916060013590565b600060208284031215611ba057600080fd5b5035919050565b60008060006101208486031215611bbd57600080fd5b611bc78585611af9565b9250611bd68560808601611af9565b915061010084013590509250925092565b803573ffffffffffffffffffffffffffffffffffffffff811681146119ef57600080fd5b600060208284031215611c1d57600080fd5b61089182611be7565b60008060408385031215611c3957600080fd5b611c42836119dd565b946020939093013593505050565b60008060a08385031215611c6357600080fd5b82359150611c74846020850161191d565b90509250929050565b60008060408385031215611c9057600080fd5b611c4283611be7565b60008060408385031215611cac57600080fd5b82359150611c74602084016119dd565b8015158114611cca57600080fd5b50565b60008060a08385031215611ce057600080fd5b611cea8484611af9565b91506080830135611cfa81611cbc565b809150509250929050565b60008060408385031215611d1857600080fd5b611d2183611be7565b9150611c7460208401611be7565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215611d7057600080fd5b815161089181611cbc565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611ddc57611ddc611d7b565b5060010190565b600060208284031215611df557600080fd5b5051919050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611e3457611e34611d7b565b500290565b600082611e6f577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600082821015611e8657611e86611d7b565b500390565b60008219821115611e9e57611e9e611d7b565b500190565b60008251611eb5818460208701611a0f565b919091019291505056fea2646970667358221220f61dc1547f427f062d37b4d652f14b779f56255086161f347804b4d07b32be2064736f6c634300080a003360a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a00336101806040523480156200001257600080fd5b5060405162001982380380620019828339810160408190526200003591620003bc565b6000805460ff191690558686828260c882826001600160a01b0381166200006f57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000ae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d491906200050b565b6001600160a01b0316608052508051620000f6906002906020840190620002e3565b505060a052506001600160a01b0382166200012457604051635919af9760e11b815260040160405180910390fd5b6001600160a01b03821660c0819052670de0b6b3a764000060e05260408051630176f71760e71b815290516000929163bb7b8b809160048083019260209291908290030181865afa1580156200017e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001a4919062000530565b9050620001b18162000243565b505050506001600160a01b0385161580620001d357506001600160a01b038416155b80620001e657506001600160a01b038316155b80620001f957506001600160a01b038216155b156200021857604051635919af9760e11b815260040160405180910390fd5b506001600160a01b039384166101005291831661012052821661014052166101605250620005fd9050565b8062000262576040516309aadd6f60e41b815260040160405180910390fd5b60018190557f82e7ee47180a631312683eeb2a85ad264c9af490d54de5a75bbdb95b968c6de2816200029481620002af565b6040805192835260208301919091520160405180910390a150565b60a05160009061271090620002c5908262000560565b620002d190846200057b565b620002dd91906200059d565b92915050565b828054620002f190620005c0565b90600052602060002090601f01602090048101928262000315576000855562000360565b82601f106200033057805160ff191683800117855562000360565b8280016001018555821562000360579182015b828111156200036057825182559160200191906001019062000343565b506200036e92915062000372565b5090565b5b808211156200036e576000815560010162000373565b80516001600160a01b0381168114620003a157600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600080600080600080600060e0888a031215620003d857600080fd5b620003e38862000389565b96506020620003f4818a0162000389565b96506200040460408a0162000389565b95506200041460608a0162000389565b94506200042460808a0162000389565b93506200043460a08a0162000389565b60c08a01519093506001600160401b03808211156200045257600080fd5b818b0191508b601f8301126200046757600080fd5b8151818111156200047c576200047c620003a6565b604051601f8201601f19908116603f01168101908382118183101715620004a757620004a7620003a6565b816040528281528e86848701011115620004c057600080fd5b600093505b82841015620004e45784840186015181850187015292850192620004c5565b82841115620004f65760008684830101525b80965050505050505092959891949750929550565b6000602082840312156200051e57600080fd5b620005298262000389565b9392505050565b6000602082840312156200054357600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156200057657620005766200054a565b500190565b60008160001904831182151516156200059857620005986200054a565b500290565b600082620005bb57634e487b7160e01b600052601260045260246000fd5b500490565b600181811c90821680620005d557607f821691505b60208210811415620005f757634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c05160e051610100516101205161014051610160516112d9620006a96000396000818161029b01526109b901526000818161024001526108fa0152600081816103b5015261083b01526000818161036b01526107940152600081816103440152610b160152600081816101bb0152610a7a0152600081816101810152610d0801526000818161031d0152818161040d0152818161058901526106c101526112d96000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80638456cb59116100d8578063ab0ca0e11161008c578063d62ada1111610066578063d62ada11146103a8578063e5693f41146103b0578063feaf968c146103d757600080fd5b8063ab0ca0e114610366578063b09ad8a01461038d578063bc489a651461039557600080fd5b8063a384d6ff116100bd578063a384d6ff1461030f578063a50cf2c814610318578063a834559e1461033f57600080fd5b80638456cb59146102bd5780639a6fc8f5146102c557600080fd5b8063427cb6fe1161012f5780635c975abb116101145780635c975abb1461026a5780637284e416146102815780637aac1c481461029657600080fd5b8063427cb6fe1461023b57806354fd4d501461026257600080fd5b8063313ce56711610160578063313ce567146102025780633f4ba83a1461021c5780633fd0875f1461022657600080fd5b806312b495a81461017c578063218751b2146101b6575b600080fd5b6101a37f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b6101dd7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101ad565b61020a600881565b60405160ff90911681526020016101ad565b6102246103df565b005b61022e600481565b6040516101ad9190610ec8565b6101dd7f000000000000000000000000000000000000000000000000000000000000000081565b6101a3600181565b60005460ff165b60405190151581526020016101ad565b6102896104cd565b6040516101ad9190610f09565b6101dd7f000000000000000000000000000000000000000000000000000000000000000081565b61022461055b565b6102d86102d3366004610f94565b610647565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a0016101ad565b6101a360015481565b6101dd7f000000000000000000000000000000000000000000000000000000000000000081565b6101a37f000000000000000000000000000000000000000000000000000000000000000081565b6101dd7f000000000000000000000000000000000000000000000000000000000000000081565b6101a3610681565b6102246103a3366004610fb8565b610693565b610271600181565b6101dd7f000000000000000000000000000000000000000000000000000000000000000081565b6102d8610783565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa158015610469573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048d9190610fd1565b6104c3576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104cb610b58565b565b600280546104da90610ff3565b80601f016020809104026020016040519081016040528092919081815260200182805461050690610ff3565b80156105535780601f1061052857610100808354040283529160200191610553565b820191906000526020600020905b81548152906001019060200180831161053657829003601f168201915b505050505081565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa1580156105e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106099190610fd1565b61063f576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104cb610c3e565b60008060008060006040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061068e600154610cfe565b905090565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561071d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107419190610fd1565b610777576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61078081610d47565b50565b6000806000806000806000806000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156107fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108219190611047565b939d50919b509950975095506108398a8a8989610dc9565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156108a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c89190611047565b9398509196509450925090506108e085858484610dc9565b888412156108f8578499508398508297508196508095505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610963573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109879190611047565b93985091965094509250905061099f85858484610dc9565b888412156109b7578499508398508297508196508095505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610a22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a469190611047565b939850919650945092509050610a5e85858484610dc9565b88841215610a76578499508398508297508196508095505b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb7b8b806040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ae3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b07919061109f565b9050610b1281610e64565b90507f0000000000000000000000000000000000000000000000000000000000000000610b3f828c6110e7565b610b4991906111d2565b99505050505050509091929394565b60005460ff16610bc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff1615610cab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bc0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610c143390565b6000612710610d2d7f00000000000000000000000000000000000000000000000000000000000000008261123a565b610d379084611252565b610d41919061128f565b92915050565b80610d7e576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190557f82e7ee47180a631312683eeb2a85ad264c9af490d54de5a75bbdb95b968c6de281610dae81610cfe565b6040805192835260208301919091520160405180910390a150565b60008313610e03576040517f56e05d2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8369ffffffffffffffffffff168169ffffffffffffffffffff161080610e27575081155b15610e5e576040517fb1cf675500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60015460009080831015610ea4576040517fb416da7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610eaf82610cfe565b905080841115610ec0579392505050565b509192915050565b6020810160068310610f03577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b600060208083528351808285015260005b81811015610f3657858101830151858201604001528201610f1a565b81811115610f48576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b69ffffffffffffffffffff8116811461078057600080fd5b600060208284031215610fa657600080fd5b8135610fb181610f7c565b9392505050565b600060208284031215610fca57600080fd5b5035919050565b600060208284031215610fe357600080fd5b81518015158114610fb157600080fd5b600181811c9082168061100757607f821691505b60208210811415611041577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600080600080600060a0868803121561105f57600080fd5b855161106a81610f7c565b80955050602086015193506040860151925060608601519150608086015161109181610f7c565b809150509295509295909350565b6000602082840312156110b157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615611128576111286110b8565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615611163576111636110b8565b6000871292508782058712848416161561117f5761117f6110b8565b87850587128184161615611195576111956110b8565b505050929093029392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826111e1576111e16111a3565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615611235576112356110b8565b500590565b6000821982111561124d5761124d6110b8565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561128a5761128a6110b8565b500290565b60008261129e5761129e6111a3565b50049056fea26469706673582212201ac3e66d7646fe6cc19eeb98703f28a4e57d890bef3635f1ed53ec7a4ea130d864736f6c634300080a00336102606040523480156200001257600080fd5b5060405162005f7e38038062005f7e833981016040819052620000359162000ba4565b83838383600284846001600160a01b03821615806200005b57506001600160a01b038116155b156200007a57604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038216608081905260408051632f7a188160e01b81529051632f7a1881916004808201926020929091908290030181865afa158015620000c5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000eb919062000c01565b6001600160a01b0390811660a05290811660c05260016000558416151590506200012857604051635919af9760e11b815260040160405180910390fd5b608051604051630f67c5bd60e41b81526001600160a01b0385811660048301529091169063f67c5bd090602401602060405180830381865afa15801562000173573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000199919062000c26565b620001c757604051634c607af960e11b81526001600160a01b03841660048201526024015b60405180910390fd5b6001600160a01b038084166101e081905261020052821661022052610240819052620001f460006200090a565b6001600160a01b031660e0526200020c60016200090a565b6001600160a01b0316610100526200022560026200090a565b6001600160a01b0316610120526200023e60036200090a565b6001600160a01b031661014052620002576000620009fd565b6001600160a01b031661016052620002706001620009fd565b6001600160a01b031661018052620002896002620009fd565b6001600160a01b03166101a052620002a26003620009fd565b6001600160a01b039081166101c05260e051161580620002cc5750610100516001600160a01b0316155b15620002eb57604051635919af9760e11b815260040160405180910390fd5b600281118015620003065750610120516001600160a01b0316155b156200032557604051635919af9760e11b815260040160405180910390fd5b600381118015620003405750610140516001600160a01b0316155b156200035f57604051635919af9760e11b815260040160405180910390fd5b60805160e051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620003ac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003d2919062000c26565b620004005760e051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b60805161010051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa1580156200044e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000474919062000c26565b620004a35761010051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b60028111801562000525575060805161012051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620004fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000523919062000c26565b155b15620005555761012051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b600381118015620005d7575060805161014051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620005af573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005d5919062000c26565b155b15620006075761014051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b610160516001600160a01b03161580159062000694575060805161016051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa1580156200066c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000692919062000c26565b155b15620006c45761016051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b610180516001600160a01b03161580159062000751575060805161018051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa15801562000729573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200074f919062000c26565b155b15620007815761018051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b6101a0516001600160a01b0316158015906200080e57506080516101a051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620007e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200080c919062000c26565b155b156200083e576101a051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b6101c0516001600160a01b031615801590620008cb57506080516101c051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620008a3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008c9919062000c26565b155b15620008fb576101c051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b50505050505050505062000c66565b60c05160405163c661065760e01b8152600481018390526000916001600160a01b03169063c661065790602401602060405180830381865afa92505050801562000973575060408051601f3d908101601f19168201909252620009709181019062000c01565b60015b6200097e5762000984565b92915050565b60c05160405163046e8dd760e31b8152600f84900b60048201526001600160a01b03909116906323746eb8906024015b602060405180830381865afa925050508015620009f0575060408051601f3d908101601f19168201909252620009ed9181019062000c01565b60015b6200097e57506000919050565b610220516000906001600160a01b03161562000a1e576200097e8262000ac0565b60c051604051630b9947eb60e41b8152600481018490526001600160a01b039091169063b9947eb090602401602060405180830381865afa92505050801562000a86575060408051601f3d908101601f1916820190925262000a839181019062000c01565b60015b6200097e5760c051604051635b9cca9f60e11b8152600f84900b60048201526001600160a01b039091169063b739953e90602401620009b4565b60008162000ad4576200097e600062000b17565b610220516001600160a01b031663c661065762000af360018562000c40565b6040518263ffffffff1660e01b8152600401620009b491815260200190565b919050565b600081600f0b6000141562000b2b575060e0515b81600f0b6001141562000b3e5750610100515b81600f0b6002141562000b515750610120515b81600f0b6003141562000b645750610140515b6001600160a01b03811662000b12576040516334769e6f60e21b815260040160405180910390fd5b80516001600160a01b038116811462000b1257600080fd5b6000806000806080858703121562000bbb57600080fd5b62000bc68562000b8c565b935062000bd66020860162000b8c565b925062000be66040860162000b8c565b915062000bf66060860162000b8c565b905092959194509250565b60006020828403121562000c1457600080fd5b62000c1f8262000b8c565b9392505050565b60006020828403121562000c3957600080fd5b5051919050565b60008282101562000c6157634e487b7160e01b600052601160045260246000fd5b500390565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e051610200516102205161024051614f9b62000fe36000396000818161077001528181613503015281816135f501528181613735015281816138ec0152613a06015260006105f101526000818161068801528181611ec70152818161238c015281816126b3015281816129580152818161303a01526130d8015260006108a701526000818161059c0152612a5a0152600081816103d40152612a2b01526000818161061801526129fc0152600081816106af01526129cd015260008181610870015281816128320152818161365f01528181613f5e01526143f20152600081816104fd015281816128030152818161356d01528181613e8e01526142d60152600081816107da015281816127d40152818161347901528181613dbe01526141ba01526000818161045d015281816127a5015281816133ad01528181613cee015261409e01526000818161072201528181610914015281816109e101528181610a7101528181610b6901528181610cd601528181610d5301528181610dea01528181610e7a0152818161128801528181611300015281816114d801528181611572015281816115ba015281816116e101528181611729015281816117da0152818161180f01528181611af801528181611bef01528181611c6701528181611d0c01528181611f1101528181611fc901528181611ffe015281816120990152818161240d01528181612448015281816124b50152818161254601528181612c7801528181612d9701528181612e710152818161407601528181614192015281816142ae015281816143ca015261451201526000818161052401528181612ae3015281816145b90152614693015260008181610749015281816110180152818161191a01528181611e5301528181612232015281816125e0015281816126db015281816128d001528181612cce01528181612d6801528181612ec701528181612f6f01528181613231015281816132e8015281816133d8015281816134a1015281816135950152818161368701528181613c2101528181613d1601528181613de601528181613eb601528181613f86015281816140ec015281816142080152818161432401528181614440015281816144e3015281816146230152818161471b015281816147cf01526148790152614f9b6000f3fe608060405234801561001057600080fd5b50600436106103a45760003560e01c806378aa73a4116101e9578063ce30bbdb1161010f578063e3103273116100ad578063f446c1d01161007c578063f446c1d014610892578063f851a4401461089a578063fc0c546a146108a2578063fee3f7f9146108c957600080fd5b8063e310327314610832578063ec026ca714610845578063ed8e84f314610858578063ef14101e1461086b57600080fd5b8063d96c7fce116100e9578063d96c7fce146107fc578063dd62ed3e14610804578063ddca3f4314610817578063e2e7d2641461081f57600080fd5b8063ce30bbdb146107b3578063cf023dd0146107c2578063d21220a7146107d557600080fd5b8063b739953e11610187578063c12c21c011610156578063c12c21c014610744578063c21ee1621461076b578063c661065714610792578063cc2b27d7146107a057600080fd5b8063b739953e146106f4578063b9947eb014610707578063bb7b8b8014610715578063bd90df701461071d57600080fd5b80638ba51dfc116101c35780638ba51dfc146106aa57806395d89b41146106d1578063a6417ed6146106d9578063b4b577ad146106ec57600080fd5b806378aa73a41461065557806379bea6641461067057806382c630661461068357600080fd5b80632f7a1881116102ce57806357d788751161026c57806364a89bca1161023b57806364a89bca146105ec5780636e1d82711461061357806370a082311461063a57806376a2f0f01461064d57600080fd5b806357d78875146105975780635b36389c146105be5780635e0d443f146105d157806363543f06146105e457600080fd5b80633df02124116102a85780633df02124146105615780634469e30e146105745780634903b0d11461057c5780635409491a1461058f57600080fd5b80632f7a18811461051f578063313ce5671461054657806333d2ebf21461054e57600080fd5b806314052288116103465780631af4de83116103155780631af4de83146104ca5780632081066c146104dd57806323746eb8146104e557806325be124e146104f857600080fd5b8063140522881461049f57806314f05979146104a757806318160ddd146104af5780631a4d01d2146104b757600080fd5b806307211ef71161038257806307211ef7146104305780630b4c7e4d146104435780630dfe1681146104585780630f6ba8e31461047f57600080fd5b8063065a80d8146103a957806306871163146103cf57806306fdde031461041b575b600080fd5b6103bc6103b736600461490d565b6108d1565b6040519081526020015b60405180910390f35b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016103c6565b610423610a6d565b6040516103c6919061499e565b6103bc61043e3660046149b1565b610b25565b6104566104513660046149fe565b610bf4565b005b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b61049261048d366004614a29565b610c91565b6040516103c69190614a67565b6103bc610d4f565b610492610de0565b6103bc610e76565b6104566104c5366004614a98565b610ee3565b6104566104d83660046149b1565b610f76565b6103bc611284565b6103f66104f336600461490d565b6112f1565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc6112fc565b61045661055c366004614abd565b611369565b61045661056f366004614ae7565b6113fd565b6104926114ce565b6103bc61058a366004614b29565b611540565b6103bc6115b6565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6104566105cc366004614b42565b611623565b6103bc6105df3660046149b1565b61169d565b6103bc611725565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc610648366004614b91565b611792565b6103bc61180b565b61065d600281565b60405161ffff90911681526020016103c6565b61045661067e3660046149b1565b611878565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b610423611af4565b6104566106e7366004614ae7565b611b61565b6103bc611beb565b6103f661070236600461490d565b611c58565b6103f6610702366004614b29565b6103bc611c63565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc7f000000000000000000000000000000000000000000000000000000000000000081565b6103f66104f3366004614b29565b6103bc6107ae366004614bae565b611cd0565b60056040516103c69190614bd1565b6104566107d0366004614a98565b611d8d565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b610492611f07565b6103bc610812366004614c12565b611f79565b6103bc611ffa565b6103bc61082d366004614b29565b612067565b6104566108403660046149fe565b6120dd565b610456610853366004614abd565b61216c565b6103bc610866366004614c4b565b6123cd565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc612444565b6103f66124b1565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc612542565b6040517f4903b0d10000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff821660048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634903b0d1906024015b602060405180830381865afa9250505080156109ab575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526109a891810190614c7d565b60015b610a62576040517f065a80d8000000000000000000000000000000000000000000000000000000008152600f83900b60048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063065a80d8906024015b602060405180830381865afa158015610a3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a629190614c7d565b92915050565b919050565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015610ada573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b209190810190614d57565b905090565b6040517f07211ef7000000000000000000000000000000000000000000000000000000008152600f84810b600483015283900b6024820152604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906307211ef7906064015b602060405180830381865afa158015610bc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bea9190614c7d565b90505b9392505050565b60026000541415610c66576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b60026000908155610c88906001843581109160208601359190911190806125af565b50506001600055565b610c996148dd565b6040517f0f6ba8e300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690630f6ba8e390610d0f90879087908790600401614da8565b6040805180830381865afa158015610d2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bea9190614dcf565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663140522886040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b209190614c7d565b610de86148dd565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166314f059796040518163ffffffff1660e01b81526004016040805180830381865afa158015610e52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b209190614dcf565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b60026000541415610f50576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b60026000908155610f6083612794565b9050610f6b8161289f565b505060016000555050565b60026000541415610fe3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611074573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110989190614e4f565b905060006110a5856129bc565b905060006110b2856129bc565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529192506000918416906370a0823190602401602060405180830381865afa158015611124573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111489190614c7d565b90506001811115611276577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce800000061118e8784614e6c565b6111989190614ed0565b604051600f8a810b602483015289900b60448201526064810184905260848101829052909150611273908690869086907fa6417ed6000000000000000000000000000000000000000000000000000000009060a4015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152600180612ac6565b50505b505060016000555050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632081066c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b6000610a6282612794565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b600260005414156113d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b600260009081556113e683612794565b90506113f3838284612f3e565b5050600160005550565b6002600054141561146a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b6002600090815561147a85612794565b9050600061148785612794565b905061127682826000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052506001935091506131e89050565b6114d66148dd565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16634469e30e6040518163ffffffff1660e01b81526004016040805180830381865afa158015610e52573d6000803e3d6000fd5b6040517f4903b0d1000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634903b0d190602401610954565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635409491a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b60026000541415611690576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b6002600055610c886132b7565b6040517f5e0d443f000000000000000000000000000000000000000000000000000000008152600f84810b600483015283900b6024820152604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635e0d443f90606401610ba9565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166363543f066040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401610a21565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166376a2f0f06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b600260005414156118e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611976573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061199a9190614e4f565b905060006119a785612794565b905060006119b485612794565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529192506000918416906370a0823190602401602060405180830381865afa158015611a26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a4a9190614c7d565b90506001811115611276577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce8000000611a908784614e6c565b611a9a9190614ed0565b604051600f8a810b602483015289900b60448201526064810184905260848101829052909150611273908690869086907f3df02124000000000000000000000000000000000000000000000000000000009060a4016111ee565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610ada573d6000803e3d6000fd5b60026000541415611bce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b60026000908155611bde856129bc565b90506000611487856129bc565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b4b577ad6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b6000610a62826129bc565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb7b8b806040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b6040517fcc2b27d700000000000000000000000000000000000000000000000000000000815260048101839052600f82900b60248201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063cc2b27d7906044015b602060405180830381865afa158015611d69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bed9190614c7d565b60026000541415611dfa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b60026000908155611e0a83612794565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611e9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ebe9190614e4f565b9050611efa81837f0000000000000000000000000000000000000000000000000000000000000000611ef1888a89613731565b60016000612ac6565b5050600160005550505050565b611f0f6148dd565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d96c7fce6040518163ffffffff1660e01b81526004016040805180830381865afa158015610e52573d6000803e3d6000fd5b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063dd62ed3e90604401611d4c565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b6040517fe2e7d264000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e2e7d26490602401610a21565b6002600054141561214a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b60026000908155610c8890600184358110916020860135919091119080613bf0565b600260005414156121d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b600260009081556121e983612794565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015612279573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061229d9190614e4f565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000918416906370a0823190602401602060405180830381865afa15801561230f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123339190614c7d565b905060018111156123c1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce80000006123798684614e6c565b6123839190614ed0565b90506123be83857f00000000000000000000000000000000000000000000000000000000000000006123b68a8787613731565b600180612ac6565b50505b50506001600055505050565b6040517fed8e84f300000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063ed8e84f390611d4c9086908690600401614f0b565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f446c1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa15801561251e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b209190614e4f565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fee3f7f96040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa15801561263c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126609190614e4f565b905061266e8585858561402d565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561271f57600080fd5b505af1158015612733573d6000803e3d6000fd5b505050506127776000368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506144a392505050565b506127848585858561402d565b61278d816145a1565b5050505050565b600081600f0b600014156127c557507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b600114156127f457507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6002141561282357507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6003141561285257507f00000000000000000000000000000000000000000000000000000000000000005b73ffffffffffffffffffffffffffffffffffffffff8116610a68576040517fd1da79bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa15801561292c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129509190614e4f565b90506129b7817f0000000000000000000000000000000000000000000000000000000000000000846000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509250829150612ac69050565b505050565b600081600f0b600014156129ed57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b60011415612a1c57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b60021415612a4b57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6003141561285257507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff8116610a68576040517fd1da79bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606000803373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614612c2f576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301528916906370a0823190602401602060405180830381865afa158015612b74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b989190614c7d565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152919350908816906370a0823190602401602060405180830381865afa158015612c08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c2c9190614c7d565b90505b8415612d2b576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612d1257600080fd5b505af1158015612d26573d6000803e3d6000fd5b505050505b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a90612dc19033907f0000000000000000000000000000000000000000000000000000000000000000908b90600401614f23565b6000604051808303816000875af1158015612de0573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052612e269190810190614d57565b92508415612f24576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612f0b57600080fd5b505af1158015612f1f573d6000803e3d6000fd5b505050505b612f3289898985858961467b565b50509695505050505050565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612fcb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fef9190614e4f565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000917f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015613081573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130a59190614c7d565b9050600181111561278d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016131e0827f0000000000000000000000000000000000000000000000000000000000000000867f1a4d01d200000000000000000000000000000000000000000000000000000000858a6b033b2e3c9fd0803ce80000006131328b84614e6c565b61313c9190614ed0565b6040516024810193909352600f9190910b60448301526064820152608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915260006001612ac6565b505050505050565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015260609060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015613278573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061329c9190614e4f565b90506132ac818888888888612ac6565b979650505050505050565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015613344573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133689190614e4f565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301529192507f0000000000000000000000000000000000000000000000000000000000000000909116906351e3f16090604401600060405180830381600087803b15801561341e57600080fd5b505af1158015613432573d6000803e3d6000fd5b50506040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f00000000000000000000000000000000000000000000000000000000000000001692506351e3f1609150604401600060405180830381600087803b1580156134e757600080fd5b505af11580156134fb573d6000803e3d6000fd5b5050505060027f000000000000000000000000000000000000000000000000000000000000000011156136e4576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156135d957600080fd5b505af11580156135ed573d6000803e3d6000fd5b5050505060037f000000000000000000000000000000000000000000000000000000000000000011156136e4576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156136cb57600080fd5b505af11580156136df573d6000803e3d6000fd5b505050505b6137246000368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506144a392505050565b5061372e816145a1565b50565b60607f0000000000000000000000000000000000000000000000000000000000000000600214156138ea5783600f0b600014613827576040516000602482015260448101849052606481018390527f0b4c7e4d00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526138e3565b6040516024810184905260006044820152606481018390527f0b4c7e4d00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091525b9050610bed565b7f000000000000000000000000000000000000000000000000000000000000000060031415613a045783600f0b6000146139bb5783600f0b60011461397257604051600060248201819052604482015260648101849052608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a4016137a5565b604051600060248201819052604482018590526064820152608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a4016137a5565b604051602481018490526000604482018190526064820152608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401613865565b7f000000000000000000000000000000000000000000000000000000000000000060041415613b8e5783600f0b600014613b3e5783600f0b600114613aee5783600f0b600214613a9e576040516000602482018190526044820181905260648201526084810184905260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c4016137a5565b6040516000602482018190526044820181905260648201859052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c4016137a5565b6040516000602482018190526044820185905260648201819052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c4016137a5565b6040516024810184905260006044820181905260648201819052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613865565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f496e636f7272656374206e436f696e73000000000000000000000000000000006044820152606401610c5d565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015613c7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ca19190614e4f565b90508415613d73576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015613d5a57600080fd5b505af1158015613d6e573d6000803e3d6000fd5b505050505b8315613e43576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015613e2a57600080fd5b505af1158015613e3e573d6000803e3d6000fd5b505050505b8215613f13576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015613efa57600080fd5b505af1158015613f0e573d6000803e3d6000fd5b505050505b8115613fe3576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015613fca57600080fd5b505af1158015613fde573d6000803e3d6000fd5b505050505b6140236000368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506144a392505050565b5061278d816145a1565b8315614149576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561413057600080fd5b505af1158015614144573d6000803e3d6000fd5b505050505b8215614265576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561424c57600080fd5b505af1158015614260573d6000803e3d6000fd5b505050505b8115614381576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561436857600080fd5b505af115801561437c573d6000803e3d6000fd5b505050505b801561449d576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561448457600080fd5b505af1158015614498573d6000803e3d6000fd5b505050505b50505050565b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815260609073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a9061453c9033907f0000000000000000000000000000000000000000000000000000000000000000908790600401614f23565b6000604051808303816000875af115801561455b573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610a629190810190614d57565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461372e576040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b15801561466757600080fd5b505af115801561278d573d6000803e3d6000fd5b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461477c576040517f654a9eda00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528681166024830152858116604483015260648201859052608482018490527f0000000000000000000000000000000000000000000000000000000000000000169063654a9eda9060a401600060405180830381600087803b15801561475f57600080fd5b505af1158015614773573d6000803e3d6000fd5b505050506131e0565b801561482c576040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015286811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b15801561481357600080fd5b505af1158015614827573d6000803e3d6000fd5b505050505b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015285811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156148bd57600080fd5b505af11580156148d1573d6000803e3d6000fd5b50505050505050505050565b60405180604001604052806002906020820280368337509192915050565b8035600f81900b8114610a6857600080fd5b60006020828403121561491f57600080fd5b610bed826148fb565b60005b8381101561494357818101518382015260200161492b565b8381111561449d5750506000910152565b6000815180845261496c816020860160208601614928565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610bed6020830184614954565b6000806000606084860312156149c657600080fd5b6149cf846148fb565b92506149dd602085016148fb565b9150604084013590509250925092565b8060408101831015610a6257600080fd5b60008060608385031215614a1157600080fd5b614a1b84846149ed565b946040939093013593505050565b600080600060a08486031215614a3e57600080fd5b614a4885856149ed565b9250614a5785604086016149ed565b9150608084013590509250925092565b60408101818360005b6002811015614a8f578151835260209283019290910190600101614a70565b50505092915050565b600080600060608486031215614aad57600080fd5b833592506149dd602085016148fb565b60008060408385031215614ad057600080fd5b614ad9836148fb565b946020939093013593505050565b60008060008060808587031215614afd57600080fd5b614b06856148fb565b9350614b14602086016148fb565b93969395505050506040820135916060013590565b600060208284031215614b3b57600080fd5b5035919050565b60008060608385031215614b5557600080fd5b82359150614b6684602085016149ed565b90509250929050565b73ffffffffffffffffffffffffffffffffffffffff8116811461372e57600080fd5b600060208284031215614ba357600080fd5b8135610bed81614b6f565b60008060408385031215614bc157600080fd5b82359150614b66602084016148fb565b6020810160118310614c0c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60008060408385031215614c2557600080fd5b8235614c3081614b6f565b91506020830135614c4081614b6f565b809150509250929050565b60008060608385031215614c5e57600080fd5b614c6884846149ed565b915060408301358015158114614c4057600080fd5b600060208284031215614c8f57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff80841115614ce057614ce0614c96565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715614d2657614d26614c96565b81604052809350858152868686011115614d3f57600080fd5b614d4d866020830187614928565b5050509392505050565b600060208284031215614d6957600080fd5b815167ffffffffffffffff811115614d8057600080fd5b8201601f81018413614d9157600080fd5b614da084825160208401614cc5565b949350505050565b60a08101604085833760408201600081526040858237506080919091019190915292915050565b600060408284031215614de157600080fd5b82601f830112614df057600080fd5b6040516040810181811067ffffffffffffffff82111715614e1357614e13614c96565b8060405250806040840185811115614e2a57600080fd5b845b81811015614e44578051835260209283019201614e2c565b509195945050505050565b600060208284031215614e6157600080fd5b8151610bed81614b6f565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ecb577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500290565b600082614f06577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60608101604084833791151560409190910152919050565b600073ffffffffffffffffffffffffffffffffffffffff808616835280851660208401525060606040830152614f5c6060830184614954565b9594505050505056fea26469706673582212205dd1b4208756e7993c5cfaf271be99123f9b37ebc97bdd8fd152eac9cd1e945564736f6c634300080a00336102606040523480156200001257600080fd5b5060405162005f9a38038062005f9a833981016040819052620000359162000ba4565b83838383600484846001600160a01b03821615806200005b57506001600160a01b038116155b156200007a57604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038216608081905260408051632f7a188160e01b81529051632f7a1881916004808201926020929091908290030181865afa158015620000c5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000eb919062000c01565b6001600160a01b0390811660a05290811660c05260016000558416151590506200012857604051635919af9760e11b815260040160405180910390fd5b608051604051630f67c5bd60e41b81526001600160a01b0385811660048301529091169063f67c5bd090602401602060405180830381865afa15801562000173573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000199919062000c26565b620001c757604051634c607af960e11b81526001600160a01b03841660048201526024015b60405180910390fd5b6001600160a01b038084166101e081905261020052821661022052610240819052620001f460006200090a565b6001600160a01b031660e0526200020c60016200090a565b6001600160a01b0316610100526200022560026200090a565b6001600160a01b0316610120526200023e60036200090a565b6001600160a01b031661014052620002576000620009fd565b6001600160a01b031661016052620002706001620009fd565b6001600160a01b031661018052620002896002620009fd565b6001600160a01b03166101a052620002a26003620009fd565b6001600160a01b039081166101c05260e051161580620002cc5750610100516001600160a01b0316155b15620002eb57604051635919af9760e11b815260040160405180910390fd5b600281118015620003065750610120516001600160a01b0316155b156200032557604051635919af9760e11b815260040160405180910390fd5b600381118015620003405750610140516001600160a01b0316155b156200035f57604051635919af9760e11b815260040160405180910390fd5b60805160e051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620003ac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003d2919062000c26565b620004005760e051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b60805161010051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa1580156200044e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000474919062000c26565b620004a35761010051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b60028111801562000525575060805161012051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620004fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000523919062000c26565b155b15620005555761012051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b600381118015620005d7575060805161014051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620005af573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005d5919062000c26565b155b15620006075761014051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b610160516001600160a01b03161580159062000694575060805161016051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa1580156200066c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000692919062000c26565b155b15620006c45761016051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b610180516001600160a01b03161580159062000751575060805161018051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa15801562000729573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200074f919062000c26565b155b15620007815761018051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b6101a0516001600160a01b0316158015906200080e57506080516101a051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620007e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200080c919062000c26565b155b156200083e576101a051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b6101c0516001600160a01b031615801590620008cb57506080516101c051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620008a3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008c9919062000c26565b155b15620008fb576101c051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b50505050505050505062000c66565b60c05160405163c661065760e01b8152600481018390526000916001600160a01b03169063c661065790602401602060405180830381865afa92505050801562000973575060408051601f3d908101601f19168201909252620009709181019062000c01565b60015b6200097e5762000984565b92915050565b60c05160405163046e8dd760e31b8152600f84900b60048201526001600160a01b03909116906323746eb8906024015b602060405180830381865afa925050508015620009f0575060408051601f3d908101601f19168201909252620009ed9181019062000c01565b60015b6200097e57506000919050565b610220516000906001600160a01b03161562000a1e576200097e8262000ac0565b60c051604051630b9947eb60e41b8152600481018490526001600160a01b039091169063b9947eb090602401602060405180830381865afa92505050801562000a86575060408051601f3d908101601f1916820190925262000a839181019062000c01565b60015b6200097e5760c051604051635b9cca9f60e11b8152600f84900b60048201526001600160a01b039091169063b739953e90602401620009b4565b60008162000ad4576200097e600062000b17565b610220516001600160a01b031663c661065762000af360018562000c40565b6040518263ffffffff1660e01b8152600401620009b491815260200190565b919050565b600081600f0b6000141562000b2b575060e0515b81600f0b6001141562000b3e5750610100515b81600f0b6002141562000b515750610120515b81600f0b6003141562000b645750610140515b6001600160a01b03811662000b12576040516334769e6f60e21b815260040160405180910390fd5b80516001600160a01b038116811462000b1257600080fd5b6000806000806080858703121562000bbb57600080fd5b62000bc68562000b8c565b935062000bd66020860162000b8c565b925062000be66040860162000b8c565b915062000bf66060860162000b8c565b905092959194509250565b60006020828403121562000c1457600080fd5b62000c1f8262000b8c565b9392505050565b60006020828403121562000c3957600080fd5b5051919050565b60008282101562000c6157634e487b7160e01b600052601160045260246000fd5b500390565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e051610200516102205161024051614fb762000fe3600039600081816107830152818161395a01528181613a4c01528181613b8c01528181613d430152613e5d015260006105f101526000818161069b01528181611f6f0152818161241d015281816126cd01528181612daf01528181613491015261352f015260006108ad0152600081816105af0152612eb10152600081816103e90152612e820152600081816106180152612e530152600081816106c20152612e2401526000818161087601528181612b1c01528181612c8901528181613ab6015261440c0152600081816104fd01528181612a4c01528181612c5a015281816139c401526142f00152600081816108060152818161297c01528181612c2b015281816138d001526141d401526000818161045d015281816128ac01528181612bfc0152818161380401526140b8015260008181610735015281816109bf01528181610a8c01528181610b1c01528181610c1401528181610ca301528181610d3a01528181610dcb01528181611270015281816112e8015281816114c00152818161155b015281816115e4015281816116620152818161170f01528181611757015281816118080152818161183d01528181611ba001528181611c9701528181611d0f01528181611db401528181611fef01528181612030015281816120e90152818161211e015281816121b901528181612462015281816124cf01528181612560015281816130cf015281816131ee015281816132c801528181614090015281816141ac015281816142c8015281816143e4015261452c01526000818161052401528181612f3a015281816145d301526146ad01526000818161075c015281816110000152818161194801528181611efb015281816122c3015281816125fa015281816126f5015281816127df015281816128d4015281816129a401528181612a7401528181612b4401528181612d2701528181613125015281816131bf0152818161331e015281816133c6015281816136880152818161373f0152818161382f015281816138f8015281816139ec01528181613ade01528181614106015281816142220152818161433e0152818161445a015281816144fd0152818161463d01528181614735015281816147e901526148930152614fb76000f3fe608060405234801561001057600080fd5b50600436106103a45760003560e01c806378aa73a4116101e9578063cc2b27d71161010f578063ddca3f43116100ad578063f446c1d01161007c578063f446c1d014610898578063f851a440146108a0578063fc0c546a146108a8578063fee3f7f9146108cf57600080fd5b8063ddca3f4314610843578063e2e7d2641461084b578063ec026ca71461085e578063ef14101e1461087157600080fd5b8063cf701ff7116100e9578063cf701ff7146107ee578063d21220a714610801578063d96c7fce14610828578063dd62ed3e1461083057600080fd5b8063cc2b27d7146107b3578063ce30bbdb146107c6578063cf023dd0146107db57600080fd5b8063b4b577ad11610187578063bd90df7011610156578063bd90df7014610730578063c12c21c014610757578063c21ee1621461077e578063c6610657146107a557600080fd5b8063b4b577ad146106ff578063b739953e14610707578063b9947eb01461071a578063bb7b8b801461072857600080fd5b806382c63066116101c357806382c63066146106965780638ba51dfc146106bd57806395d89b41146106e4578063a6417ed6146106ec57600080fd5b806378aa73a41461065557806379bea664146106705780637d49d8751461068357600080fd5b80632f7a1881116102ce5780635409491a1161026c57806364a89bca1161023b57806364a89bca146105ec5780636e1d82711461061357806370a082311461063a57806376a2f0f01461064d57600080fd5b80635409491a146105a257806357d78875146105aa5780635e0d443f146105d157806363543f06146105e457600080fd5b80633df02124116102a85780633df02124146105615780634469e30e146105745780634903b0d11461057c57806353b546cd1461058f57600080fd5b80632f7a18811461051f578063313ce5671461054657806333d2ebf21461054e57600080fd5b806314f05979116103465780631af4de83116103155780631af4de83146104ca5780632081066c146104dd57806323746eb8146104e557806325be124e146104f857600080fd5b806314f059791461048757806318160ddd1461049c57806318a7bd76146104a45780631a4d01d2146104b757600080fd5b806306fdde031161038257806306fdde031461043057806307211ef7146104455780630dfe168114610458578063140522881461047f57600080fd5b8063029b2f34146103a9578063065a80d8146103be57806306871163146103e4575b600080fd5b6103bc6103b7366004614926565b6108d7565b005b6103d16103cc366004614963565b61097c565b6040519081526020015b60405180910390f35b61040b7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016103db565b610438610b18565b6040516103db91906149f4565b6103d1610453366004614a07565b610bd0565b61040b7f000000000000000000000000000000000000000000000000000000000000000081565b6103d1610c9f565b61048f610d30565b6040516103db9190614a43565b6103d1610dc7565b6103bc6104b2366004614926565b610e34565b6103bc6104c5366004614a74565b610ecb565b6103bc6104d8366004614a07565b610f5e565b6103d161126c565b61040b6104f3366004614963565b6112d9565b61040b7f000000000000000000000000000000000000000000000000000000000000000081565b61040b7f000000000000000000000000000000000000000000000000000000000000000081565b6103d16112e4565b6103bc61055c366004614a99565b611351565b6103bc61056f366004614ac3565b6113e5565b61048f6114b6565b6103d161058a366004614b05565b611529565b61048f61059d366004614b1e565b61159f565b6103d161165e565b61040b7f000000000000000000000000000000000000000000000000000000000000000081565b6103d16105df366004614a07565b6116cb565b6103d1611753565b61040b7f000000000000000000000000000000000000000000000000000000000000000081565b61040b7f000000000000000000000000000000000000000000000000000000000000000081565b6103d1610648366004614b80565b6117c0565b6103d1611839565b61065d600281565b60405161ffff90911681526020016103db565b6103bc61067e366004614a07565b6118a6565b6103bc610691366004614b9d565b611b22565b61040b7f000000000000000000000000000000000000000000000000000000000000000081565b61040b7f000000000000000000000000000000000000000000000000000000000000000081565b610438611b9c565b6103bc6106fa366004614ac3565b611c09565b6103d1611c93565b61040b610715366004614963565b611d00565b61040b610715366004614b05565b6103d1611d0b565b61040b7f000000000000000000000000000000000000000000000000000000000000000081565b61040b7f000000000000000000000000000000000000000000000000000000000000000081565b6103d17f000000000000000000000000000000000000000000000000000000000000000081565b61040b6104f3366004614b05565b6103d16107c1366004614bca565b611d78565b6107ce600781565b6040516103db9190614bed565b6103bc6107e9366004614a74565b611e35565b6103d16107fc366004614c2e565b611faf565b61040b7f000000000000000000000000000000000000000000000000000000000000000081565b61048f612026565b6103d161083e366004614c6b565b612099565b6103d161211a565b6103d1610859366004614b05565b612187565b6103bc61086c366004614a99565b6121fd565b61040b7f000000000000000000000000000000000000000000000000000000000000000081565b6103d161245e565b61040b6124cb565b61040b7f000000000000000000000000000000000000000000000000000000000000000081565b6103d161255c565b60026000541415610949576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b600260005561097360018335811090602085013581109060408601358110906060870135116125c9565b50506001600055565b6040517f4903b0d10000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff821660048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634903b0d1906024015b602060405180830381865afa925050508015610a56575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610a5391810190614c99565b60015b610b0d576040517f065a80d8000000000000000000000000000000000000000000000000000000008152600f83900b60048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063065a80d8906024015b602060405180830381865afa158015610ae9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0d9190614c99565b92915050565b919050565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015610b85573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610bcb9190810190614d73565b905090565b6040517f07211ef7000000000000000000000000000000000000000000000000000000008152600f84810b600483015283900b6024820152604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906307211ef7906064015b602060405180830381865afa158015610c71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c959190614c99565b90505b9392505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663140522886040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bcb9190614c99565b610d386148f7565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166314f059796040518163ffffffff1660e01b8152600401608060405180830381865afa158015610da3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bcb9190614dc4565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d0c573d6000803e3d6000fd5b60026000541415610ea1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610940565b600260005561097360018335811090602085013581109060408601358110906060870135116127ae565b60026000541415610f38576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610940565b60026000908155610f4883612beb565b9050610f5381612cf6565b505060016000555050565b60026000541415610fcb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610940565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa15801561105c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110809190614e42565b9050600061108d85612e13565b9050600061109a85612e13565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529192506000918416906370a0823190602401602060405180830381865afa15801561110c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111309190614c99565b9050600181111561125e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce80000006111768784614e5f565b6111809190614ec3565b604051600f8a810b602483015289900b6044820152606481018490526084810182905290915061125b908690869086907fa6417ed6000000000000000000000000000000000000000000000000000000009060a4015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152600180612f1d565b50505b505060016000555050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632081066c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d0c573d6000803e3d6000fd5b6000610b0d82612beb565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d0c573d6000803e3d6000fd5b600260005414156113be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610940565b600260009081556113ce83612beb565b90506113db838284613395565b5050600160005550565b60026000541415611452576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610940565b6002600090815561146285612beb565b9050600061146f85612beb565b905061125e82826000368080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525060019350915061363f9050565b6114be6148f7565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16634469e30e6040518163ffffffff1660e01b8152600401608060405180830381865afa158015610da3573d6000803e3d6000fd5b6040517f4903b0d1000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634903b0d1906024016109ff565b6115a76148f7565b6040517f53b546cd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906353b546cd9061161d90879087908790600401614efe565b608060405180830381865afa15801561163a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c959190614dc4565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635409491a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d0c573d6000803e3d6000fd5b6040517f5e0d443f000000000000000000000000000000000000000000000000000000008152600f84810b600483015283900b6024820152604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635e0d443f90606401610c54565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166363543f066040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d0c573d6000803e3d6000fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401610acc565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166376a2f0f06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d0c573d6000803e3d6000fd5b60026000541415611913576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610940565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156119a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c89190614e42565b905060006119d585612beb565b905060006119e285612beb565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529192506000918416906370a0823190602401602060405180830381865afa158015611a54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a789190614c99565b9050600181111561125e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce8000000611abe8784614e5f565b611ac89190614ec3565b604051600f8a810b602483015289900b6044820152606481018490526084810182905290915061125b908690869086907f3df02124000000000000000000000000000000000000000000000000000000009060a4016111d6565b60026000541415611b8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610940565b600260005561097361370e565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610b85573d6000803e3d6000fd5b60026000541415611c76576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610940565b60026000908155611c8685612e13565b9050600061146f85612e13565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b4b577ad6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d0c573d6000803e3d6000fd5b6000610b0d82612e13565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb7b8b806040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d0c573d6000803e3d6000fd5b6040517fcc2b27d700000000000000000000000000000000000000000000000000000000815260048101839052600f82900b60248201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063cc2b27d7906044015b602060405180830381865afa158015611e11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c989190614c99565b60026000541415611ea2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610940565b60026000908155611eb283612beb565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611f42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f669190614e42565b9050611fa281837f0000000000000000000000000000000000000000000000000000000000000000611f99888a89613b88565b60016000612f1d565b5050600160005550505050565b6040517fcf701ff700000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063cf701ff790611df49086908690600401614f27565b61202e6148f7565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d96c7fce6040518163ffffffff1660e01b8152600401608060405180830381865afa158015610da3573d6000803e3d6000fd5b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063dd62ed3e90604401611df4565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d0c573d6000803e3d6000fd5b6040517fe2e7d264000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e2e7d26490602401610acc565b6002600054141561226a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610940565b6002600090815561227a83612beb565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa15801561230a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061232e9190614e42565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000918416906370a0823190602401602060405180830381865afa1580156123a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123c49190614c99565b90506001811115612452577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce800000061240a8684614e5f565b6124149190614ec3565b905061244f83857f00000000000000000000000000000000000000000000000000000000000000006124478a8787613b88565b600180612f1d565b50505b50506001600055505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f446c1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d0c573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa158015612538573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bcb9190614e42565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fee3f7f96040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d0c573d6000803e3d6000fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612656573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061267a9190614e42565b905061268885858585614047565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561273957600080fd5b505af115801561274d573d6000803e3d6000fd5b505050506127916000368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506144bd92505050565b5061279e85858585614047565b6127a7816145bb565b5050505050565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa15801561283b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061285f9190614e42565b90508415612931576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561291857600080fd5b505af115801561292c573d6000803e3d6000fd5b505050505b8315612a01576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156129e857600080fd5b505af11580156129fc573d6000803e3d6000fd5b505050505b8215612ad1576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015612ab857600080fd5b505af1158015612acc573d6000803e3d6000fd5b505050505b8115612ba1576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015612b8857600080fd5b505af1158015612b9c573d6000803e3d6000fd5b505050505b612be16000368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506144bd92505050565b506127a7816145bb565b600081600f0b60001415612c1c57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b60011415612c4b57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b60021415612c7a57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b60031415612ca957507f00000000000000000000000000000000000000000000000000000000000000005b73ffffffffffffffffffffffffffffffffffffffff8116610b13576040517fd1da79bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612d83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612da79190614e42565b9050612e0e817f0000000000000000000000000000000000000000000000000000000000000000846000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509250829150612f1d9050565b505050565b600081600f0b60001415612e4457507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b60011415612e7357507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b60021415612ea257507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b60031415612ca957507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff8116610b13576040517fd1da79bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606000803373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614613086576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301528916906370a0823190602401602060405180830381865afa158015612fcb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fef9190614c99565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152919350908816906370a0823190602401602060405180830381865afa15801561305f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130839190614c99565b90505b8415613182576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561316957600080fd5b505af115801561317d573d6000803e3d6000fd5b505050505b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a906132189033907f0000000000000000000000000000000000000000000000000000000000000000908b90600401614f3f565b6000604051808303816000875af1158015613237573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261327d9190810190614d73565b9250841561337b576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561336257600080fd5b505af1158015613376573d6000803e3d6000fd5b505050505b613389898989858589614695565b50509695505050505050565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015613422573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134469190614e42565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000917f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa1580156134d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134fc9190614c99565b905060018111156127a7577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01613637827f0000000000000000000000000000000000000000000000000000000000000000867f1a4d01d200000000000000000000000000000000000000000000000000000000858a6b033b2e3c9fd0803ce80000006135898b84614e5f565b6135939190614ec3565b6040516024810193909352600f9190910b60448301526064820152608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915260006001612f1d565b505050505050565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015260609060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa1580156136cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136f39190614e42565b9050613703818888888888612f1d565b979650505050505050565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa15801561379b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137bf9190614e42565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301529192507f0000000000000000000000000000000000000000000000000000000000000000909116906351e3f16090604401600060405180830381600087803b15801561387557600080fd5b505af1158015613889573d6000803e3d6000fd5b50506040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f00000000000000000000000000000000000000000000000000000000000000001692506351e3f1609150604401600060405180830381600087803b15801561393e57600080fd5b505af1158015613952573d6000803e3d6000fd5b5050505060027f00000000000000000000000000000000000000000000000000000000000000001115613b3b576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015613a3057600080fd5b505af1158015613a44573d6000803e3d6000fd5b5050505060037f00000000000000000000000000000000000000000000000000000000000000001115613b3b576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015613b2257600080fd5b505af1158015613b36573d6000803e3d6000fd5b505050505b613b7b6000368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506144bd92505050565b50613b85816145bb565b50565b60607f000000000000000000000000000000000000000000000000000000000000000060021415613d415783600f0b600014613c7e576040516000602482015260448101849052606481018390527f0b4c7e4d00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613d3a565b6040516024810184905260006044820152606481018390527f0b4c7e4d00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091525b9050610c98565b7f000000000000000000000000000000000000000000000000000000000000000060031415613e5b5783600f0b600014613e125783600f0b600114613dc957604051600060248201819052604482015260648101849052608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401613bfc565b604051600060248201819052604482018590526064820152608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401613bfc565b604051602481018490526000604482018190526064820152608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401613cbc565b7f000000000000000000000000000000000000000000000000000000000000000060041415613fe55783600f0b600014613f955783600f0b600114613f455783600f0b600214613ef5576040516000602482018190526044820181905260648201526084810184905260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613bfc565b6040516000602482018190526044820181905260648201859052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613bfc565b6040516000602482018190526044820185905260648201819052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613bfc565b6040516024810184905260006044820181905260648201819052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613cbc565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f496e636f7272656374206e436f696e73000000000000000000000000000000006044820152606401610940565b8315614163576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561414a57600080fd5b505af115801561415e573d6000803e3d6000fd5b505050505b821561427f576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561426657600080fd5b505af115801561427a573d6000803e3d6000fd5b505050505b811561439b576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561438257600080fd5b505af1158015614396573d6000803e3d6000fd5b505050505b80156144b7576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561449e57600080fd5b505af11580156144b2573d6000803e3d6000fd5b505050505b50505050565b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815260609073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a906145569033907f0000000000000000000000000000000000000000000000000000000000000000908790600401614f3f565b6000604051808303816000875af1158015614575573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b0d9190810190614d73565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614613b85576040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b15801561468157600080fd5b505af11580156127a7573d6000803e3d6000fd5b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614614796576040517f654a9eda00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528681166024830152858116604483015260648201859052608482018490527f0000000000000000000000000000000000000000000000000000000000000000169063654a9eda9060a401600060405180830381600087803b15801561477957600080fd5b505af115801561478d573d6000803e3d6000fd5b50505050613637565b8015614846576040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015286811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b15801561482d57600080fd5b505af1158015614841573d6000803e3d6000fd5b505050505b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015285811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156148d757600080fd5b505af11580156148eb573d6000803e3d6000fd5b50505050505050505050565b60405180608001604052806004906020820280368337509192915050565b8060808101831015610b0d57600080fd5b60008060a0838503121561493957600080fd5b6149438484614915565b946080939093013593505050565b8035600f81900b8114610b1357600080fd5b60006020828403121561497557600080fd5b610c9882614951565b60005b83811015614999578181015183820152602001614981565b838111156144b75750506000910152565b600081518084526149c281602086016020860161497e565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610c9860208301846149aa565b600080600060608486031215614a1c57600080fd5b614a2584614951565b9250614a3360208501614951565b9150604084013590509250925092565b60808101818360005b6004811015614a6b578151835260209283019290910190600101614a4c565b50505092915050565b600080600060608486031215614a8957600080fd5b83359250614a3360208501614951565b60008060408385031215614aac57600080fd5b614ab583614951565b946020939093013593505050565b60008060008060808587031215614ad957600080fd5b614ae285614951565b9350614af060208601614951565b93969395505050506040820135916060013590565b600060208284031215614b1757600080fd5b5035919050565b60008060006101208486031215614b3457600080fd5b614b3e8585614915565b9250614b4d8560808601614915565b915061010084013590509250925092565b73ffffffffffffffffffffffffffffffffffffffff81168114613b8557600080fd5b600060208284031215614b9257600080fd5b8135610c9881614b5e565b60008060a08385031215614bb057600080fd5b82359150614bc18460208501614915565b90509250929050565b60008060408385031215614bdd57600080fd5b82359150614bc160208401614951565b6020810160118310614c28577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60008060a08385031215614c4157600080fd5b614c4b8484614915565b915060808301358015158114614c6057600080fd5b809150509250929050565b60008060408385031215614c7e57600080fd5b8235614c8981614b5e565b91506020830135614c6081614b5e565b600060208284031215614cab57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff80841115614cfc57614cfc614cb2565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715614d4257614d42614cb2565b81604052809350858152868686011115614d5b57600080fd5b614d6986602083018761497e565b5050509392505050565b600060208284031215614d8557600080fd5b815167ffffffffffffffff811115614d9c57600080fd5b8201601f81018413614dad57600080fd5b614dbc84825160208401614ce1565b949350505050565b600060808284031215614dd657600080fd5b82601f830112614de557600080fd5b6040516080810181811067ffffffffffffffff82111715614e0857614e08614cb2565b604052806080840185811115614e1d57600080fd5b845b81811015614e37578051835260209283019201614e1f565b509195945050505050565b600060208284031215614e5457600080fd5b8151610c9881614b5e565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ebe577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500290565b600082614ef9577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b610120810160808583376080820160008152608085823750610100919091019190915292915050565b60a08101608084833791151560809190910152919050565b600073ffffffffffffffffffffffffffffffffffffffff808616835280851660208401525060606040830152614f7860608301846149aa565b9594505050505056fea26469706673582212202cfa6940592b7cd1b1fb4eed6a97af4919d3bdbe1c8d89c62204ae78f5bc27ba64736f6c634300080a003360806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d00011790553480156200003a57600080fd5b506040805161018081019091526000908060c081018060018152604080518082018252600381526244414960e81b6020828101919091528301526012908201526305f5e100606082015260800160018152602001600081525081526020016040518060c001604052806002600a811115620000b957620000b962000b78565b815260408051808201825260048152635553444360e01b6020828101919091528301526006908201526305f5e100606082015260800160018152602001600081525081526020016040518060c001604052806003600a81111562000121576200012162000b78565b815260408051808201825260048152630ae8aa8960e31b602082810191909152830152601290820152644a817c8000606082015260800160028152602001600081525081526020016040518060c001604052806004600a8111156200018a576200018a62000b78565b815260408051808201825260048152634c494e4b60e01b6020828101919091528301526012908201526359682f00606082015260800160018152602001600081525081526020016040518060c001604052806005600a811115620001f257620001f262000b78565b815260408051808201825260048152631554d11560e21b602082810191909152830152601290820152633b023380606082015260800160018152602001600081525081526020016040518060c001604052806006600a8111156200025a576200025a62000b78565b815260408051808201825260058152640e6e88aa8960db1b602082810191909152830152601290820152644cd588640060608201526080016003815260200160009052905260408051610140810190915290915060009080608081018060078152602001604051806040016040528060048152602001636344414960e01b8152508152602001601260ff1681526020016305f5e100815260200160048081111562000309576200030962000b78565b8152602001600181525081526020016040518060c001604052806008600a81111562000339576200033962000b78565b81526040805180820182526005815264635553444360d81b6020828101919091528301526006908201526305f5e100606082015260800160048152602001600281525081526020016040518060c001604052806009600a811115620003a257620003a262000b78565b8152604080518082018252600581526418d554d11560da1b602082810191909152830152601290820152633b023380606082015260800160048152602001600581525081526020016040518060c00160405280600a808111156200040a576200040a62000b78565b81526040805180820182526005815264634c494e4b60d81b6020828101919091528301526012908201526359682f00606082015260800160048152602001600490529052905060005b600681101562000496576200048183826006811062000476576200047662000b8e565b6020020151620004db565b806200048d8162000ba4565b91505062000453565b5060005b6004811015620004d257620004bd82826004811062000476576200047662000b8e565b80620004c98162000ba4565b9150506200049a565b50505062000d14565b6000600282608001516004811115620004f857620004f862000b78565b14156200054e576040516200050d9062000a8c565b604051809103906000f0801580156200052a573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b03831617905590506200071e565b60038260800151600481111562000569576200056962000b78565b1415620005a4576040516200057e9062000a9a565b604051809103906000f0801580156200059b573d6000803e3d6000fd5b5090506200071e565b600182608001516004811115620005bf57620005bf62000b78565b1415620005f157816020015182602001518360400151604051620005e39062000aa8565b6200057e9392919062000c1e565b6004826080015160048111156200060c576200060c62000b78565b1415620006be576000600260008460a00151600a81111562000632576200063262000b78565b600a81111562000646576200064662000b78565b815260200190815260200160002060009054906101000a90046001600160a01b0316905082602001518360200151846040015183604051620006889062000ab6565b62000697949392919062000c5b565b604051809103906000f080158015620006b4573d6000803e3d6000fd5b509150506200071e565b60405162461bcd60e51b815260206004820152602b60248201527f74657374546f6b656e53756974653a204372656174696e6720756e6b6e6f776e60448201526a20746f6b656e207479706560a81b606482015260840160405180910390fd5b60005460208301516040516318caf8e360e31b8152620100009092046001600160a01b03169163c657c718916200075b9185919060040162000ca9565b600060405180830381600087803b1580156200077657600080fd5b505af11580156200078b573d6000803e3d6000fd5b50505050600082606001516008604051620007a69062000ac4565b91825260ff166020820152604001604051809103906000f080158015620007d1573d6000803e3d6000fd5b50905081600260008560000151600a811115620007f257620007f262000b78565b600a81111562000806576200080662000b78565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055508260600151600560008560000151600a8111156200085a576200085a62000b78565b600a8111156200086e576200086e62000b78565b8152602080820192909252604090810160009081209390935585516001600160a01b03861684526008909252909120805460ff1916600183600a811115620008ba57620008ba62000b78565b02179055508260800151600360008560000151600a811115620008e157620008e162000b78565b600a811115620008f557620008f562000b78565b81526020810191909152604001600020805460ff1916600183600481111562000922576200092262000b78565b0217905550604080518082019091526001600160a01b0380841682528281166020808401918252600780546001810182556000918252945160029095027fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688810180549686166001600160a01b031997881617905592517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c689909301805493909416929094169190911790915584015184519091600491600a811115620009eb57620009eb62000b78565b600a811115620009ff57620009ff62000b78565b8152602001908152602001600020908051906020019062000a2292919062000ad2565b5080600660008560000151600a81111562000a415762000a4162000b78565b600a81111562000a555762000a5562000b78565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550505050565b610ab1806200285183390190565b611224806200330283390190565b611758806200452683390190565b6117098062005c7e83390190565b6106ca806200738783390190565b82805462000ae09062000cd7565b90600052602060002090601f01602090048101928262000b04576000855562000b4f565b82601f1062000b1f57805160ff191683800117855562000b4f565b8280016001018555821562000b4f579182015b8281111562000b4f57825182559160200191906001019062000b32565b5062000b5d92915062000b61565b5090565b5b8082111562000b5d576000815560010162000b62565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600060001982141562000bc757634e487b7160e01b600052601160045260246000fd5b5060010190565b6000815180845260005b8181101562000bf65760208185018101518683018201520162000bd8565b8181111562000c09576000602083870101525b50601f01601f19169290920160200192915050565b60608152600062000c33606083018662000bce565b828103602084015262000c47818662000bce565b91505060ff83166040830152949350505050565b60808152600062000c70608083018762000bce565b828103602084015262000c84818762000bce565b60ff95909516604084015250506001600160a01b039190911660609091015292915050565b6001600160a01b038316815260406020820181905260009062000ccf9083018462000bce565b949350505050565b600181811c9082168062000cec57607f821691505b6020821081141562000d0e57634e487b7160e01b600052602260045260246000fd5b50919050565b611b2d8062000d246000396000f3fe6080604052600436106101635760003560e01c80638eb86e8b116100c0578063c6c3bbe611610074578063d051a62211610059578063d051a62214610490578063eebab8ef146104b0578063fa7626d4146104d057600080fd5b8063c6c3bbe614610433578063c74912d21461045357600080fd5b80639b140a85116100a55780639b140a85146103e6578063b36ba20814610406578063ba414fa61461040e57600080fd5b80638eb86e8b1461038357806398cdaadf146103a357600080fd5b80636a72bde71161011757806388327863116100fc578063883278631461030857806388f776a2146103365780638a3177a31461035657600080fd5b80636a72bde7146102c45780636ca42ae3146102e657600080fd5b8063440864fa11610148578063440864fa146102025780634b57b0be1461022f57806367b426451461028157600080fd5b806304bc3b1c1461016f57806310c7f0b9146101b557600080fd5b3661016a57005b600080fd5b34801561017b57600080fd5b5061019f61018a3660046116f6565b60086020526000908152604090205460ff1681565b6040516101ac9190611742565b60405180910390f35b3480156101c157600080fd5b506101d56101d036600461175c565b6104ea565b6040805173ffffffffffffffffffffffffffffffffffffffff9384168152929091166020830152016101ac565b34801561020e57600080fd5b5061022261021d366004611784565b610530565b6040516101ac91906117cb565b34801561023b57600080fd5b5060015461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101ac565b34801561028d57600080fd5b5061025c61029c366004611784565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156102d057600080fd5b506102e46102df36600461181c565b6105ca565b005b3480156102f257600080fd5b506102fb610730565b6040516101ac919061186b565b34801561031457600080fd5b506103286103233660046118d4565b6107b5565b6040519081526020016101ac565b34801561034257600080fd5b506102e461035136600461190b565b610888565b34801561036257600080fd5b50610328610371366004611784565b60056020526000908152604090205481565b34801561038f57600080fd5b506102e461039e366004611954565b6108b9565b3480156103af57600080fd5b5061025c6103be366004611784565b60066020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156103f257600080fd5b506102e4610401366004611993565b610a73565b6102e4610b22565b34801561041a57600080fd5b50610423610ba0565b60405190151581526020016101ac565b34801561043f57600080fd5b506102e461044e3660046119b3565b610d00565b34801561045f57600080fd5b5061048361046e366004611784565b60036020526000908152604090205460ff1681565b6040516101ac91906119d3565b34801561049c57600080fd5b506103286104ab36600461190b565b610daf565b3480156104bc57600080fd5b506102e46104cb366004611954565b610e8b565b3480156104dc57600080fd5b506000546104239060ff1681565b600781815481106104fa57600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff91821692501682565b60046020526000908152604090208054610549906119e7565b80601f0160208091040260200160405190810160405280929190818152602001828054610575906119e7565b80156105c25780601f10610597576101008083540402835291602001916105c2565b820191906000526020600020905b8154815290600101906020018083116105a557829003601f168201915b505050505081565b6000546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152620100009092049091169063ca669fa790602401600060405180830381600087803b15801561063e57600080fd5b505af1158015610652573d6000803e3d6000fd5b505050506002600085600a81111561066c5761066c611713565b600a81111561067d5761067d611713565b8152602081019190915260409081016000205490517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490529091169063095ea7b3906044016020604051808303816000875af1158015610705573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107299190611a3b565b5050505050565b60606007805480602002602001604051908101604052809291908181526020016000905b828210156107ac5760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff908116835260019182015416828401529083529092019101610754565b50505050905090565b60006002600084600a8111156107cd576107cd611713565b600a8111156107de576107de611713565b8152602081019190915260409081016000205490517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152909116906370a0823190602401602060405180830381865afa15801561085d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108819190611a5d565b9392505050565b6108b48383837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6105ca565b505050565b60016003600085600a8111156108d1576108d1611713565b600a8111156108e2576108e2611713565b815260208101919091526040016000205460ff16600481111561090757610907611713565b14610999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f74657374546f6b656e53756974653a20547279696e6720746f206275726e206160448201527f206e6f6e2d6e6f726d616c20746f6b656e00000000000000000000000000000060648201526084015b60405180910390fd5b6002600084600a8111156109af576109af611713565b600a8111156109c0576109c0611713565b8152602081019190915260409081016000205490517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526024820184905290911690639dc29fac906044015b6020604051808303816000875af1158015610a49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6d9190611a3b565b50505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604081205460ff169081600a811115610aaf57610aaf611713565b1415610b17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f20746f6b656e2077697468207375636820616464726573730000000000006044820152606401610990565b610a6d818484610888565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015610b8c57600080fd5b505af1158015610729573d6000803e3d6000fd5b60008054610100900460ff1615610bc05750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610cfb5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610c65917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc491608001611a76565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052610c9d91611abe565b6000604051808303816000865af19150503d8060008114610cda576040519150601f19603f3d011682016040523d82523d6000602084013e610cdf565b606091505b5091505080806020019051810190610cf79190611a3b565b9150505b919050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604081205460ff169081600a811115610d3c57610d3c611713565b1415610da4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f20746f6b656e2077697468207375636820616464726573730000000000006044820152606401610990565b610a6d818484610e8b565b60006002600085600a811115610dc757610dc7611713565b600a811115610dd857610dd8611713565b8152602081019190915260409081016000205490517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301529091169063dd62ed3e90604401602060405180830381865afa158015610e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e839190611a5d565b949350505050565b60026003600085600a811115610ea357610ea3611713565b600a811115610eb457610eb4611713565b815260208101919091526040016000205460ff166004811115610ed957610ed9611713565b1415610ff6576000546040517fc88a5e6d000000000000000000000000000000000000000000000000000000008152306004820152602481018390526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c88a5e6d90604401600060405180830381600087803b158015610f5657600080fd5b505af1158015610f6a573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015610fd857600080fd5b505af1158015610fec573d6000803e3d6000fd5b505050505061163c565b600380600085600a81111561100d5761100d611713565b600a81111561101e5761101e611713565b815260208101919091526040016000205460ff16600481111561104357611043611713565b14156111aa576000546040517fc88a5e6d000000000000000000000000000000000000000000000000000000008152306004820152602481018390526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c88a5e6d90604401600060405180830381600087803b1580156110c057600080fd5b505af11580156110d4573d6000803e3d6000fd5b505050506002600084600a8111156110ee576110ee611713565b600a8111156110ff576110ff611713565b8152602081019190915260409081016000205490517fa1903eab00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a1903eab90839060240160206040518083038185885af115801561117f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906111a49190611a5d565b5061163c565b60046003600085600a8111156111c2576111c2611713565b600a8111156111d3576111d3611713565b815260208101919091526040016000205460ff1660048111156111f8576111f8611713565b141561148f5760006002600085600a81111561121657611216611713565b600a81111561122757611227611713565b815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c49190611ada565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600860205260409020549091506112fb9060ff163084610e8b565b8073ffffffffffffffffffffffffffffffffffffffff1663095ea7b36002600087600a81111561132d5761132d611713565b600a81111561133e5761133e611713565b81526020810191909152604090810160002054905160e083901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602481018590526044016020604051808303816000875af11580156113c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e69190611a3b565b506002600085600a8111156113fd576113fd611713565b600a81111561140e5761140e611713565b8152602081019190915260409081016000205490517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810184905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f1990604401600060405180830381600087803b158015610fd857600080fd5b60016003600085600a8111156114a7576114a7611713565b600a8111156114b8576114b8611713565b815260208101919091526040016000205460ff1660048111156114dd576114dd611713565b14156115b4576002600084600a8111156114f9576114f9611713565b600a81111561150a5761150a611713565b8152602081019190915260409081016000205490517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f19906044016020604051808303816000875af1158015611590573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a49190611a3b565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f74657374546f6b656e53756974653a20547279696e6720746f207472616e736660448201527f657220756e6b6e6f776e20746f6b656e000000000000000000000000000000006064820152608401610990565b6002600084600a81111561165257611652611713565b600a81111561166357611663611713565b8152602081019190915260409081016000205490517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490529091169063a9059cbb90604401610a2a565b73ffffffffffffffffffffffffffffffffffffffff811681146116f357600080fd5b50565b60006020828403121561170857600080fd5b8135610881816116d1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60208101600b831061175657611756611713565b91905290565b60006020828403121561176e57600080fd5b5035919050565b8035600b8110610cfb57600080fd5b60006020828403121561179657600080fd5b61088182611775565b60005b838110156117ba5781810151838201526020016117a2565b83811115610a6d5750506000910152565b60208152600082518060208401526117ea81604085016020870161179f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000806080858703121561183257600080fd5b61183b85611775565b9350602085013561184b816116d1565b9250604085013561185b816116d1565b9396929550929360600135925050565b602080825282518282018190526000919060409081850190868401855b828110156118c7578151805173ffffffffffffffffffffffffffffffffffffffff90811686529087015116868501529284019290850190600101611888565b5091979650505050505050565b600080604083850312156118e757600080fd5b6118f083611775565b91506020830135611900816116d1565b809150509250929050565b60008060006060848603121561192057600080fd5b61192984611775565b92506020840135611939816116d1565b91506040840135611949816116d1565b809150509250925092565b60008060006060848603121561196957600080fd5b61197284611775565b92506020840135611982816116d1565b929592945050506040919091013590565b6000806000606084860312156119a857600080fd5b8335611929816116d1565b6000806000606084860312156119c857600080fd5b8335611972816116d1565b602081016005831061175657611756611713565b600181811c908216806119fb57607f821691505b60208210811415611a35577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600060208284031215611a4d57600080fd5b8151801515811461088157600080fd5b600060208284031215611a6f57600080fd5b5051919050565b7fffffffff000000000000000000000000000000000000000000000000000000008316815260008251611ab081600485016020870161179f565b919091016004019392505050565b60008251611ad081846020870161179f565b9190910192915050565b600060208284031215611aec57600080fd5b8151610881816116d156fea264697066735822122010fe735ed069aca27931edce4ba2ff14ec7886bf21b0eea685a884f9200fb49e64736f6c634300080a003360c0604052600d60808190526c2bb930b83832b21022ba3432b960991b60a090815261002e916000919061007a565b50604080518082019091526004808252630ae8aa8960e31b602090920191825261005a9160019161007a565b506002805460ff1916601217905534801561007457600080fd5b5061014e565b82805461008690610113565b90600052602060002090601f0160209004810192826100a857600085556100ee565b82601f106100c157805160ff19168380011785556100ee565b828001600101855582156100ee579182015b828111156100ee5782518255916020019190600101906100d3565b506100fa9291506100fe565b5090565b5b808211156100fa57600081556001016100ff565b600181811c9082168061012757607f821691505b6020821081141561014857634e487b7160e01b600052602260045260246000fd5b50919050565b6109548061015d6000396000f3fe6080604052600436106100cb5760003560e01c806340c10f1911610074578063a9059cbb1161004e578063a9059cbb14610225578063d0e30db014610245578063dd62ed3e1461024d57600080fd5b806340c10f19146101c357806370a08231146101e357806395d89b411461021057600080fd5b806323b872dd116100a557806323b872dd146101575780632e1a7d4d14610177578063313ce5671461019757600080fd5b806306fdde03146100df578063095ea7b31461010a57806318160ddd1461013a57600080fd5b366100da576100d8610285565b005b600080fd5b3480156100eb57600080fd5b506100f46102e0565b6040516101019190610703565b60405180910390f35b34801561011657600080fd5b5061012a61012536600461079f565b61036e565b6040519015158152602001610101565b34801561014657600080fd5b50475b604051908152602001610101565b34801561016357600080fd5b5061012a6101723660046107c9565b6103e7565b34801561018357600080fd5b506100d8610192366004610805565b6105fe565b3480156101a357600080fd5b506002546101b19060ff1681565b60405160ff9091168152602001610101565b3480156101cf57600080fd5b506100d86101de36600461079f565b6106a4565b3480156101ef57600080fd5b506101496101fe36600461081e565b60036020526000908152604090205481565b34801561021c57600080fd5b506100f46106e2565b34801561023157600080fd5b5061012a61024036600461079f565b6106ef565b6100d8610285565b34801561025957600080fd5b50610149610268366004610839565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102a490849061089b565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102ed906108b3565b80601f0160208091040260200160405190810160405280929190818152602001828054610319906108b3565b80156103665780601f1061033b57610100808354040283529160200191610366565b820191906000526020600020905b81548152906001019060200180831161034957829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103d69086815260200190565b60405180910390a350600192915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561041957600080fd5b73ffffffffffffffffffffffffffffffffffffffff8416331480159061048f575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105175773ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020548211156104d157600080fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915281208054849290610511908490610907565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061054c908490610907565b909155505073ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260408120805484929061058690849061089b565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516105ec91815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561061a57600080fd5b3360009081526003602052604081208054839290610639908490610907565b9091555050604051339082156108fc029083906000818181858888f1935050505015801561066b573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260036020526040812080548392906106d990849061089b565b90915550505050565b600180546102ed906108b3565b60006106fc3384846103e7565b9392505050565b600060208083528351808285015260005b8181101561073057858101830151858201604001528201610714565b81811115610742576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461079a57600080fd5b919050565b600080604083850312156107b257600080fd5b6107bb83610776565b946020939093013593505050565b6000806000606084860312156107de57600080fd5b6107e784610776565b92506107f560208501610776565b9150604084013590509250925092565b60006020828403121561081757600080fd5b5035919050565b60006020828403121561083057600080fd5b6106fc82610776565b6000806040838503121561084c57600080fd5b61085583610776565b915061086360208401610776565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156108ae576108ae61086c565b500190565b600181811c908216806108c757607f821691505b60208210811415610901577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000828210156109195761091961086c565b50039056fea26469706673582212206ec943fa4e3b70d8fca6c25b6aa26fa18e8f8952ce3bc4d5afcb443bf3097c0564736f6c634300080a003360806040526000600255600060035534801561001a57600080fd5b506111fa8061002a6000396000f3fe60806040526004361061016e5760003560e01c80637a28fb88116100cb578063bdd17e1c1161007f578063dd62ed3e11610059578063dd62ed3e146103ee578063ee7a7c0414610441578063f5eb42dc1461046157600080fd5b8063bdd17e1c146103ad578063cdb9a21c146103c3578063d5002f2e146103d957600080fd5b8063a1903eab116100b0578063a1903eab1461035a578063a457c2d71461036d578063a9059cbb1461038d57600080fd5b80637a28fb88146102f457806395d89b411461031457600080fd5b806323b872dd1161012257806337cfdaca1161010757806337cfdaca1461020d57806339509351146102b457806370a08231146102d457600080fd5b806323b872dd14610278578063313ce5671461029857600080fd5b806318160ddd1161015357806318160ddd1461020d578063192084511461023057806322301f6e1461025057600080fd5b806306fdde0314610185578063095ea7b3146101dd57600080fd5b366101805761017d6000610481565b50005b600080fd5b34801561019157600080fd5b5060408051808201909152601781527f4c6971756964207374616b656420457468657220322e3000000000000000000060208201525b6040516101d49190610f63565b60405180910390f35b3480156101e957600080fd5b506101fd6101f8366004610fff565b610545565b60405190151581526020016101d4565b34801561021957600080fd5b5061022261055b565b6040519081526020016101d4565b34801561023c57600080fd5b5061022261024b366004611029565b61056b565b34801561025c57600080fd5b5061027661026b366004611042565b600391909155600255565b005b34801561028457600080fd5b506101fd610293366004611064565b6105ab565b3480156102a457600080fd5b50604051601281526020016101d4565b3480156102c057600080fd5b506101fd6102cf366004610fff565b610696565b3480156102e057600080fd5b506102226102ef3660046110a0565b6106d9565b34801561030057600080fd5b5061022261030f366004611029565b61070e565b34801561032057600080fd5b5060408051808201909152600581527f737445544800000000000000000000000000000000000000000000000000000060208201526101c7565b6102226103683660046110a0565b61073a565b34801561037957600080fd5b506101fd610388366004610fff565b610745565b34801561039957600080fd5b506101fd6103a8366004610fff565b6107f9565b3480156103b957600080fd5b5061022260035481565b3480156103cf57600080fd5b5061022260025481565b3480156103e557600080fd5b50610222610806565b3480156103fa57600080fd5b506102226104093660046110bb565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b34801561044d57600080fd5b5061027661045c366004610fff565b610811565b34801561046d57600080fd5b5061022261047c3660046110a0565b61081f565b60003334806104f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f5a45524f5f4445504f534954000000000000000000000000000000000000000060448201526064015b60405180910390fd5b60006104fc8261056b565b9050806105065750805b8160036000828254610518919061111d565b909155506105289050838261084a565b61053383838761093b565b61053d8382610992565b949350505050565b60006105523384846109ea565b50600192915050565b600061056660035490565b905090565b60008061057760035490565b9050806105875750600092915050565b6105a48161059e61059760025490565b8690610b52565b90610b5e565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001602090815260408083203384529091528120548281101561066c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f5452414e534645525f414d4f554e545f455843454544535f414c4c4f57414e4360448201527f450000000000000000000000000000000000000000000000000000000000000060648201526084016104e8565b610677858585610b6a565b61068b85336106868487610bef565b6109ea565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916105529185906106869086610bfb565b73ffffffffffffffffffffffffffffffffffffffff81166000908152602081905260408120546107089061070e565b92915050565b60008061071a60025490565b90508061072a5750600092915050565b6105a48161059e61059760035490565b600061070882610481565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156107e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4445435245415345445f414c4c4f57414e43455f42454c4f575f5a45524f000060448201526064016104e8565b6107ef33856106868487610bef565b5060019392505050565b6000610552338484610b6a565b600061056660025490565b61081b8282610c07565b5050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040812054610708565b73ffffffffffffffffffffffffffffffffffffffff82166108c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4d494e545f544f5f5448455f5a45524f5f41444452455353000000000000000060448201526064016104e8565b80600260008282546108d9919061111d565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205461090e9082610bfb565b73ffffffffffffffffffffffffffffffffffffffff90921660009081526020819052604090209190915550565b6040805183815273ffffffffffffffffffffffffffffffffffffffff83811660208301528516917fed8dd430b1e4bba98e943dc5b157cf7b54d9e12916d6c474ff5733a95001d03b910160405180910390a2505050565b73ffffffffffffffffffffffffffffffffffffffff821660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6109d58461070e565b60405190815260200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff8316610a67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f415050524f56455f46524f4d5f5a45524f5f414444524553530000000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff8216610ae4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f415050524f56455f544f5f5a45524f5f4144445245535300000000000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006105a48284611135565b60006105a48284611172565b6000610b758261056b565b9050610b82848483610d64565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610be191815260200190565b60405180910390a350505050565b60006105a482846111ad565b60006105a4828461111d565b73ffffffffffffffffffffffffffffffffffffffff8216610c84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4255524e5f46524f4d5f5448455f5a45524f5f4144445245535300000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205480821115610d14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4255524e5f414d4f554e545f455843454544535f42414c414e4345000000000060448201526064016104e8565b8160026000828254610d2691906111ad565b90915550610d3690508183610bef565b73ffffffffffffffffffffffffffffffffffffffff9093166000908152602081905260409020929092555050565b73ffffffffffffffffffffffffffffffffffffffff8316610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f5452414e534645525f46524f4d5f5448455f5a45524f5f41444452455353000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff8216610e5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f5452414e534645525f544f5f5448455f5a45524f5f414444524553530000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205480821115610eee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5452414e534645525f414d4f554e545f455843454544535f42414c414e43450060448201526064016104e8565b610ef88183610bef565b73ffffffffffffffffffffffffffffffffffffffff8086166000908152602081905260408082209390935590851681522054610f349083610bfb565b73ffffffffffffffffffffffffffffffffffffffff909316600090815260208190526040902092909255505050565b600060208083528351808285015260005b81811015610f9057858101830151858201604001528201610f74565b81811115610fa2576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ffa57600080fd5b919050565b6000806040838503121561101257600080fd5b61101b83610fd6565b946020939093013593505050565b60006020828403121561103b57600080fd5b5035919050565b6000806040838503121561105557600080fd5b50508035926020909101359150565b60008060006060848603121561107957600080fd5b61108284610fd6565b925061109060208501610fd6565b9150604084013590509250925092565b6000602082840312156110b257600080fd5b6105a482610fd6565b600080604083850312156110ce57600080fd5b6110d783610fd6565b91506110e560208401610fd6565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611130576111306110ee565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561116d5761116d6110ee565b500290565b6000826111a8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000828210156111bf576111bf6110ee565b50039056fea2646970667358221220a5b4f31162ba2b8b3424cef84b31ef91d05a825243602b5fdf758ffb49b8246364736f6c634300080a003360a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a003360c06040523480156200001157600080fd5b506040516200170938038062001709833981016040819052620000349162000266565b8351849084906200004d906003906020850190620000f3565b50805162000063906004906020840190620000f3565b505050620000806200007a6200009d60201b60201c565b620000a1565b60ff9091166080526001600160a01b031660a05250620003479050565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b82805462000101906200030a565b90600052602060002090601f01602090048101928262000125576000855562000170565b82601f106200014057805160ff191683800117855562000170565b8280016001018555821562000170579182015b828111156200017057825182559160200191906001019062000153565b506200017e92915062000182565b5090565b5b808211156200017e576000815560010162000183565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c157600080fd5b81516001600160401b0380821115620001de57620001de62000199565b604051601f8301601f19908116603f0116810190828211818310171562000209576200020962000199565b816040528381526020925086838588010111156200022657600080fd5b600091505b838210156200024a57858201830151818301840152908201906200022b565b838211156200025c5760008385830101525b9695505050505050565b600080600080608085870312156200027d57600080fd5b84516001600160401b03808211156200029557600080fd5b620002a388838901620001af565b95506020870151915080821115620002ba57600080fd5b50620002c987828801620001af565b935050604085015160ff81168114620002e157600080fd5b60608601519092506001600160a01b0381168114620002ff57600080fd5b939692955090935050565b600181811c908216806200031f57607f821691505b602082108114156200034157634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05161138e6200037b600039600081816101f70152818161041f0152610600015260006101a2015261138e6000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80636f307dc3116100b257806395d89b4111610081578063a9059cbb11610066578063a9059cbb146102b5578063dd62ed3e146102c8578063f2fde38b1461030e57600080fd5b806395d89b411461029a578063a457c2d7146102a257600080fd5b80636f307dc3146101f257806370a082311461023e578063715018a6146102745780638da5cb5b1461027c57600080fd5b806323b872dd116100ee57806323b872dd14610188578063313ce5671461019b57806339509351146101cc57806340c10f19146101df57600080fd5b806306fdde0314610120578063095ea7b31461013e57806318160ddd146101615780631e9a695014610173575b600080fd5b610128610321565b604051610135919061112d565b60405180910390f35b61015161014c3660046111c9565b6103b3565b6040519015158152602001610135565b6002545b604051908152602001610135565b6101866101813660046111c9565b6103c9565b005b6101516101963660046111f3565b610491565b60405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610135565b6101516101da3660046111c9565b61057c565b6101866101ed3660046111c9565b6105c5565b6102197f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b61016561024c36600461122f565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610186610691565b60055473ffffffffffffffffffffffffffffffffffffffff16610219565b61012861071e565b6101516102b03660046111c9565b61072d565b6101516102c33660046111c9565b610805565b6101656102d6366004611251565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b61018661031c36600461122f565b610812565b60606003805461033090611284565b80601f016020809104026020016040519081016040528092919081815260200182805461035c90611284565b80156103a95780601f1061037e576101008083540402835291602001916103a9565b820191906000526020600020905b81548152906001019060200180831161038c57829003601f168201915b5050505050905090565b60006103c0338484610942565b50600192915050565b6103d33382610af5565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015610468573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048c91906112d8565b505050565b600061049e848484610ce2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6105718533858403610942565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916103c09185906105c0908690611329565b610942565b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906323b872dd906064016020604051808303816000875af115801561065e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068291906112d8565b5061068d8282610f96565b5050565b60055473ffffffffffffffffffffffffffffffffffffffff163314610712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161055b565b61071c60006110b6565b565b60606004805461033090611284565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156107ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161055b565b6107fb3385858403610942565b5060019392505050565b60006103c0338484610ce2565b60055473ffffffffffffffffffffffffffffffffffffffff163314610893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161055b565b73ffffffffffffffffffffffffffffffffffffffff8116610936576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161055b565b61093f816110b6565b50565b73ffffffffffffffffffffffffffffffffffffffff83166109e4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff8216610a87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8216610b98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015610c4e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290610c8a908490611341565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff8216610e28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610ede576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610f22908490611329565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f8891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161055b565b80600260008282546110259190611329565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152602081905260408120805483929061105f908490611329565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208083528351808285015260005b8181101561115a5785810183015185820160400152820161113e565b8181111561116c576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146111c457600080fd5b919050565b600080604083850312156111dc57600080fd5b6111e5836111a0565b946020939093013593505050565b60008060006060848603121561120857600080fd5b611211846111a0565b925061121f602085016111a0565b9150604084013590509250925092565b60006020828403121561124157600080fd5b61124a826111a0565b9392505050565b6000806040838503121561126457600080fd5b61126d836111a0565b915061127b602084016111a0565b90509250929050565b600181811c9082168061129857607f821691505b602082108114156112d2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156112ea57600080fd5b8151801515811461124a57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561133c5761133c6112fa565b500190565b600082821015611353576113536112fa565b50039056fea26469706673582212203a6db30cd3c097921df4156794aa7973eb848711deeb2cffd7c54a9df1fdb0a564736f6c634300080a003360a060405234801561001057600080fd5b506040516106ca3803806106ca83398101604081905261002f9161006c565b60009190915560ff166080526001805460506001600160501b031991821681179092556004805490911690911790554260028190556003556100a2565b6000806040838503121561007f57600080fd5b82519150602083015160ff8116811461009757600080fd5b809150509250929050565b60805161060e6100bc600039600060d3015261060e6000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80639a6fc8f511610081578063d62ada111161005b578063d62ada11146102dc578063f7a30806146102f4578063feaf968c1461030757600080fd5b80639a6fc8f5146101cd578063bd18ad531461023a578063cd653afc1461024d57600080fd5b806354fd4d50116100b257806354fd4d501461012d57806367e8d83d1461013c5780637284e4161461018e57600080fd5b8063313ce567146100ce5780633fd0875f1461010c575b600080fd5b6100f57f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020015b60405180910390f35b6004546a0100000000000000000000900460ff166040516101039190610441565b60405160018152602001610103565b61018c61014a366004610482565b600480549115156c01000000000000000000000000027fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff909216919091179055565b005b604080518082018252600c81527f7072696365206f7261636c6500000000000000000000000000000000000000006020820152905161010391906104ab565b6102036101db36600461053d565b60015460005460025460035460045469ffffffffffffffffffff948516941691939590929450565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610103565b61018c610248366004610558565b61030f565b61018c61025b366004610579565b6001805469ffffffffffffffffffff9586167fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090911617905560029290925560035560048054919092167fffffffffffffffffffffffffffffffffffffffff00ff00000000000000000000909116176b020000000000000000000000179055565b6102e461035f565b6040519015158152602001610103565b61018c6103023660046105bf565b600055565b610203610385565b600480548291907fffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff166b01000000000000000000000083600281111561035757610357610412565b021790555050565b600454600090610380906b010000000000000000000000900460ff166103d6565b905090565b60008060008060006004600c9054906101000a900460ff16156103a757600080fd5b505060015460005460025460035460045469ffffffffffffffffffff9485169893975091955093509190911690565b600060028260028111156103ec576103ec610412565b14156103f757600080fd5b600182600281111561040b5761040b610412565b1492915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016006831061047c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561049457600080fd5b813580151581146104a457600080fd5b9392505050565b600060208083528351808285015260005b818110156104d8578581018301518582016040015282016104bc565b818111156104ea576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803569ffffffffffffffffffff8116811461053857600080fd5b919050565b60006020828403121561054f57600080fd5b6104a48261051e565b60006020828403121561056a57600080fd5b8135600381106104a457600080fd5b6000806000806080858703121561058f57600080fd5b6105988561051e565b935060208501359250604085013591506105b46060860161051e565b905092959194509250565b6000602082840312156105d157600080fd5b503591905056fea264697066735822122014874f7a973b86501c4c1a8be32490fe902c8f088ee234d25f9b2497e19f9e5264736f6c634300080a003360806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d00011790553480156200003a57600080fd5b5060405162031ed638038062031ed68339810160408190526200005d91620015e8565b81816040516200006d9062001595565b604051809103906000f0801580156200008a573d6000803e3d6000fd5b5050600180546001600160a01b0319166001600160a01b038416908117909155604080516325abd85f60e11b81529051634b57b0be916004808201926020929091908290030181865afa158015620000e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200010c91906200162a565b73c4375b7de8af5a38a93548eb8453a498222c4ff26040516200012f90620015a3565b6001600160a01b03928316815291166020820152604001604051809103906000f08015801562000163573d6000803e3d6000fd5b50600380546001600160a01b0319166001600160a01b039290921691821790556040805163de28735960e01b8152905163de287359916004808201926020929091908290030181865afa158015620001bf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e591906200162a565b604051634910832f60e01b81527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526001600160a01b039190911690634910832f90602401600060405180830381600087803b1580156200023d57600080fd5b505af115801562000252573d6000803e3d6000fd5b50505050600360009054906101000a90046001600160a01b03166001600160a01b031663de2873596040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d091906200162a565b60035460405163f2fde38b60e01b81526001600160a01b03918216600482015291169063f2fde38b90602401600060405180830381600087803b1580156200031757600080fd5b505af11580156200032c573d6000803e3d6000fd5b505060035460015460408051636ca42ae360e01b815290516001600160a01b039384169550638874ff1f94509190921691636ca42ae39160048083019260009291908290030181865afa15801562000388573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620003b29190810190620016c5565b6040518263ffffffff1660e01b8152600401620003d09190620017b6565b600060405180830381600087803b158015620003eb57600080fd5b505af115801562000400573d6000803e3d6000fd5b50505050600360009054906101000a90046001600160a01b03166001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000458573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200047e91906200162a565b600280546001600160a01b0319166001600160a01b039290921691821790556040805163120d150d60e31b81529051639068a868916004808201926020929091908290030181865afa158015620004d9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004ff91906200162a565b600480546001600160a01b0319166001600160a01b0392831617815560025460408051631f94a27560e31b81529051919093169263fca513a892818101926020929091908290030181865afa1580156200055d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200058391906200162a565b600880546001600160a01b0319166001600160a01b0392831617905560025460408051630873769560e01b81529051919092169163087376959160048083019260209291908290030181865afa158015620005e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200060891906200162a565b600780546001600160a01b0319166001600160a01b039283161790556002546040805163c513c9bb60e01b81529051919092169163c513c9bb9160048083019260209291908290030181865afa15801562000667573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200068d91906200162a565b600680546001600160a01b0319166001600160a01b039283161790556001546040516367b4264560e01b81529116906367b4264590620006d29084906004016200184d565b602060405180830381865afa158015620006f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200071691906200162a565b600980546001600160a01b0319166001600160a01b0392831617905560035460408051630a55006360e21b815290519190921691632954018c9160048083019260209291908290030181865afa15801562000775573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200079b91906200162a565b6009546040516001600160a01b0390911690620007b890620015b2565b6001600160a01b03928316815291166020820152604001604051809103906000f080158015620007ec573d6000803e3d6000fd5b50600580546001600160a01b0319166001600160a01b039283169081179091556001549091169063eebab8ef90839062000825620011ec565b6200083290600a62001879565b6040518463ffffffff1660e01b815260040162000852939291906200189b565b600060405180830381600087803b1580156200086d57600080fd5b505af115801562000882573d6000803e3d6000fd5b505060065460055460405163d914cd4b60e01b81526001600160a01b0391821660048201529116925063d914cd4b9150602401600060405180830381600087803b158015620008d057600080fd5b505af1158015620008e5573d6000803e3d6000fd5b5050600f80546001600160801b031916670de0b6b3a76400001790555062000911925050620011ec9050565b6200091e90600a62001879565b600f80546001600160801b03908116600160801b9382168402818117938490556040805160a0810182529184169092178152939092041660208301526000919081016200096b84620012ab565b815260006020820181905260409182018190526005549151929350916001600160a01b039091169083908390620009a290620015c0565b620009b093929190620018c5565b604051809103906000f080158015620009cd573d6000803e3d6000fd5b509050806001600160a01b031663c12c21c06040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a0f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a3591906200162a565b600b60006101000a8154816001600160a01b0302191690836001600160a01b03160217905550806001600160a01b0316632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a9a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ac091906200162a565b600c60006101000a8154816001600160a01b0302191690836001600160a01b03160217905550806001600160a01b031663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000b25573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b4b91906200162a565b600d80546001600160a01b0319166001600160a01b03928316179055600654600b5460405163e26b2f6360e01b8152908316600482015291169063e26b2f6390602401600060405180830381600087803b15801562000ba957600080fd5b505af115801562000bbe573d6000803e3d6000fd5b5050600054600554604080516318caf8e360e31b81526001600160a01b039283166004808301919091526024820192909252604481019190915263141bdbdb60e21b60648201526201000090920416925063c657c7189150608401600060405180830381600087803b15801562000c3457600080fd5b505af115801562000c49573d6000803e3d6000fd5b5050600054600c8054604080516318caf8e360e31b81526001600160a01b039283166004820152602481019190915260448101929092526b43726564697446616361646560a01b606483015262010000909204909116925063c657c7189150608401600060405180830381600087803b15801562000cc657600080fd5b505af115801562000cdb573d6000803e3d6000fd5b5050600054600b54604080516318caf8e360e31b81526001600160a01b0392831660048201526024810191909152600d60448201526c21b932b234ba26b0b730b3b2b960991b60648201526201000090920416925063c657c7189150608401600060405180830381600087803b15801562000d5557600080fd5b505af115801562000d6a573d6000803e3d6000fd5b5050600054600d54604080516318caf8e360e31b81526001600160a01b0392831660048201526024810191909152601260448201527121b932b234ba21b7b73334b3bab930ba37b960711b60648201526201000090920416925063c657c7189150608401600060405180830381600087803b15801562000de957600080fd5b505af115801562000dfe573d6000803e3d6000fd5b50506001546001600160a01b0316915063eebab8ef90508473f39fd6e51aad88f6f4ce6ab8827279cfffb9226662000e35620011ec565b6040518463ffffffff1660e01b815260040162000e55939291906200189b565b600060405180830381600087803b15801562000e7057600080fd5b505af115801562000e85573d6000803e3d6000fd5b50506001546001600160a01b0316915063eebab8ef9050847390f79bf6eb2c4f870365e785982e1f101e93b90662000ebc620011ec565b6040518463ffffffff1660e01b815260040162000edc939291906200189b565b600060405180830381600087803b15801562000ef757600080fd5b505af115801562000f0c573d6000803e3d6000fd5b505060005460405163ca669fa760e01b815273f39fd6e51aad88f6f4ce6ab8827279cfffb922666004820152620100009091046001600160a01b0316925063ca669fa79150602401600060405180830381600087803b15801562000f6f57600080fd5b505af115801562000f84573d6000803e3d6000fd5b5050600954600b5460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529116925063095ea7b391506044016020604051808303816000875af115801562000fdf573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001005919062001989565b5060005460405163ca669fa760e01b81527390f79bf6eb2c4f870365e785982e1f101e93b9066004820152620100009091046001600160a01b03169063ca669fa790602401600060405180830381600087803b1580156200106557600080fd5b505af11580156200107a573d6000803e3d6000fd5b5050600954600b5460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529116925063095ea7b391506044016020604051808303816000875af1158015620010d5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010fb919062001989565b5060025460405163f2fde38b60e01b81527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526001600160a01b039091169063f2fde38b90602401600060405180830381600087803b1580156200115657600080fd5b505af11580156200116b573d6000803e3d6000fd5b505060075460405163f2fde38b60e01b81527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b158015620011c957600080fd5b505af1158015620011de573d6000803e3d6000fd5b5050505050505050620019e1565b600180546040516367b4264560e01b81526000926001600160a01b03909216916367b42645916200122191906004016200184d565b602060405180830381865afa1580156200123f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200126591906200162a565b6009546001600160a01b03908116911614620012955762001290670de0b6b3a764000060c862001879565b905090565b62001290670de0b6b3a7640000614e2062001879565b6040805160c08101825260026080820190815261232860a08301528152815180830183526005815261226060208281019190915282015281518083018352606092600092919082019080600387600a8111156200130c576200130c62001814565b146200131a5760036200131d565b60015b600a81111562001331576200133162001814565b815261206c6020918201529082526040805180820190915260048152611c84818301529101529050612454600a6000858281111562001374576200137462001814565b600a81111562001388576200138862001814565b815260208101919091526040908101600020805461ffff9390931661ffff19909316929092179091558051600480825260a0820190925281816020015b6040805180820190915260008082526020820152815260200190600190039081620013c557905050925060005b818110156200158d57828160048110620014105762001410620019ad565b602002015160200151600a6000858460048110620014325762001432620019ad565b602002015151600a8111156200144c576200144c62001814565b600a81111562001460576200146062001814565b815260208101919091526040908101600020805461ffff191661ffff9390931692909217909155805180820190915260015481906001600160a01b03166367b42645868560048110620014b757620014b7620019ad565b6020020151516040516001600160e01b031960e084901b168152620014e091906004016200184d565b602060405180830381865afa158015620014fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200152491906200162a565b6001600160a01b03168152602001848360048110620015475762001547620019ad565b60200201516020015161ffff168152508482815181106200156c576200156c620019ad565b602002602001018190525080806200158490620019c3565b915050620013f2565b505050919050565b6105e6806200bc5283390190565b62011105806200c23883390190565b6110a7806201d33d83390190565b62013af2806201e3e483390190565b6001600160a01b0381168114620015e557600080fd5b50565b60008060408385031215620015fc57600080fd5b82516200160981620015cf565b6020840151909250600b81106200161f57600080fd5b809150509250929050565b6000602082840312156200163d57600080fd5b81516200164a81620015cf565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156200168c576200168c62001651565b60405290565b604051601f8201601f191681016001600160401b0381118282101715620016bd57620016bd62001651565b604052919050565b60006020808385031215620016d957600080fd5b82516001600160401b0380821115620016f157600080fd5b818501915085601f8301126200170657600080fd5b8151818111156200171b576200171b62001651565b6200172b848260051b0162001692565b818152848101925060069190911b8301840190878211156200174c57600080fd5b928401925b81841015620017ab57604084890312156200176c5760008081fd5b6200177662001667565b84516200178381620015cf565b8152848601516200179481620015cf565b818701528352604093909301929184019162001751565b979650505050505050565b602080825282518282018190526000919060409081850190868401855b828110156200180757815180516001600160a01b0390811686529087015116868501529284019290850190600101620017d3565b5091979650505050505050565b634e487b7160e01b600052602160045260246000fd5b600b81106200184957634e487b7160e01b600052602160045260246000fd5b9052565b602081016200185d82846200182a565b92915050565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161562001896576200189662001863565b500290565b60608101620018ab82866200182a565b6001600160a01b0393909316602082015260400152919050565b6001600160a01b0384811682526060602080840182905285516001600160801b039081169285019290925285810151909116608084015260408086015160a085810152805161010086018190526000949392918301919085906101208801905b808310156200195657845180518816835286015161ffff168683015293850193600192909201919083019062001925565b5060608a01516001600160a01b031660c0890152608090990151151560e088015250909401949094525092949350505050565b6000602082840312156200199c57600080fd5b815180151581146200164a57600080fd5b634e487b7160e01b600052603260045260246000fd5b6000600019821415620019da57620019da62001863565b5060010190565b61a26180620019f16000396000f3fe60806040523480156200001157600080fd5b5060043610620001ad5760003560e01c806362eb33e311620000f5578063ba414fa61162000097578063de287359116200006e578063de2873591462000479578063f9aa028a146200049a578063fa7626d414620004bb57600080fd5b8063ba414fa6146200041c578063c12c21c01462000437578063d46b9330146200045857600080fd5b80637785ff5d11620000cc5780637785ff5d14620003da5780639408b63f14620003e45780639dd55b45146200040557600080fd5b806362eb33e314620003775780636b70b04c14620003985780636f307dc314620003b957600080fd5b80632f7a1881116200015f5780635e813a8b11620001365780635e813a8b146200030c5780635f7c9bd0146200032d57806362186905146200034657600080fd5b80632f7a188114620002be578063406c8e2f14620002df57806354cae56e146200030057600080fd5b80630e42bc5d11620001945780630e42bc5d14620002305780632630c12f14620002565780632954018c146200029d57600080fd5b80630bc772da14620001b25780630c75f80614620001f5575b600080fd5b600f54620001cf906fffffffffffffffffffffffffffffffff1681565b6040516fffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6200021c62000206366004620012dd565b600a6020526000908152604090205461ffff1681565b60405161ffff9091168152602001620001ec565b6200024762000241366004620012dd565b620004c9565b604051620001ec919062001307565b600854620002779073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001620001ec565b600254620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600c54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600154620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200030a6200081f565b005b600454620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200033762000b1a565b604051908152602001620001ec565b600f54620001cf9070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681565b600654620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600554620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600954620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200030a62000c0c565b600e54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200030a6200041636600462001398565b62000fd6565b6200042662001149565b6040519015158152602001620001ec565b600b54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600354620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600754620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600d54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600054620004269060ff1681565b6040805160c08101825260026080820190815261232860a08301528152815180830183526005815261226060208281019190915282015281518083018352606092600092919082019080600387600a8111156200052a576200052a620013c7565b14620005385760036200053b565b60015b600a8111156200054f576200054f620013c7565b815261206c6020918201529082526040805180820190915260048152611c84818301529101529050612454600a60008582811115620005925762000592620013c7565b600a811115620005a657620005a6620013c7565b815260208101919091526040908101600020805461ffff939093167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909316929092179091558051600480825260a0820190925281816020015b60408051808201909152600080825260208201528152602001906001900390816200060057905050925060005b8181101562000817578281600481106200064b576200064b620013f6565b602002015160200151600a60008584600481106200066d576200066d620013f6565b602002015151600a811115620006875762000687620013c7565b600a8111156200069b576200069b620013c7565b81526020810191909152604090810160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff93909316929092179091558051808201909152600154819073ffffffffffffffffffffffffffffffffffffffff166367b426458685600481106200071c576200071c620013f6565b6020020151516040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526200075d919060040162001425565b602060405180830381865afa1580156200077b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007a1919062001467565b73ffffffffffffffffffffffffffffffffffffffff168152602001848360048110620007d157620007d1620013f6565b60200201516020015161ffff16815250848281518110620007f657620007f6620013f6565b602002602001018190525080806200080e90620014b6565b9150506200062d565b505050919050565b6000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16906306447d5690602401600060405180830381600087803b158015620008a457600080fd5b505af1158015620008b9573d6000803e3d6000fd5b5050600b5460405173ffffffffffffffffffffffffffffffffffffffff909116925060009150600190620008ed90620012b3565b73ffffffffffffffffffffffffffffffffffffffff938416815292909116602083015215156040820152606001604051809103906000f08015801562000937573d6000803e3d6000fd5b50600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316908117909155600d546040517f526a41e80000000000000000000000000000000000000000000000000000000081526004810192909252600160248301529091169063526a41e890604401600060405180830381600087803b158015620009dc57600080fd5b505af1158015620009f1573d6000803e3d6000fd5b5050600d5473ffffffffffffffffffffffffffffffffffffffff16915063eb9606df905062000a22426001620014f2565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815264ffffffffff90911660048201526024015b600060405180830381600087803b15801562000a7b57600080fd5b505af115801562000a90573d6000803e3d6000fd5b50505050600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562000aff57600080fd5b505af115801562000b14573d6000803e3d6000fd5b50505050565b600180546040517f67b4264500000000000000000000000000000000000000000000000000000000815260009273ffffffffffffffffffffffffffffffffffffffff909216916367b426459162000b75919060040162001425565b602060405180830381865afa15801562000b93573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000bb9919062001467565b60095473ffffffffffffffffffffffffffffffffffffffff90811691161462000bf65762000bf1670de0b6b3a764000060c86200150d565b905090565b62000bf1670de0b6b3a7640000614e206200150d565b60025460405173ffffffffffffffffffffffffffffffffffffffff9091169062000c3690620012c1565b73ffffffffffffffffffffffffffffffffffffffff90911681526060602082018190526008908201527f446567656e4e4654000000000000000000000000000000000000000000000000608082015260a060408201819052600a908201527f476561722d446567656e0000000000000000000000000000000000000000000060c082015260e001604051809103906000f08015801562000cda573d6000803e3d6000fd5b50600e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283161790556000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015262010000909104909116906306447d5690602401600060405180830381600087803b15801562000d8e57600080fd5b505af115801562000da3573d6000803e3d6000fd5b5050600e546040517ffca3b5aa0000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff909116925063fca3b5aa9150602401600060405180830381600087803b15801562000e2757600080fd5b505af115801562000e3c573d6000803e3d6000fd5b5050600b54600e5460405173ffffffffffffffffffffffffffffffffffffffff92831694509116915060009062000e7390620012b3565b73ffffffffffffffffffffffffffffffffffffffff938416815292909116602083015215156040820152606001604051809103906000f08015801562000ebd573d6000803e3d6000fd5b50600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316908117909155600d546040517f526a41e80000000000000000000000000000000000000000000000000000000081526004810192909252600160248301529091169063526a41e890604401600060405180830381600087803b15801562000f6257600080fd5b505af115801562000f77573d6000803e3d6000fd5b5050600e54600c546040517f4610f6ac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015291169250634610f6ac915060240162000a60565b600081600860405162000fe990620012cf565b91825260ff166020820152604001604051809103906000f08015801562001014573d6000803e3d6000fd5b506000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291925062010000900473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b1580156200109c57600080fd5b505af1158015620010b1573d6000803e3d6000fd5b50506008546040517fe8a97a3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528581166024830152909116925063e8a97a3e9150604401600060405180830381600087803b1580156200112b57600080fd5b505af115801562001140573d6000803e3d6000fd5b50505050505050565b60008054610100900460ff16156200116a5750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620012ae5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000008284015282518083038401815260608301909352600092909162001212917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016200158b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526200124c91620015c9565b6000604051808303816000865af19150503d80600081146200128b576040519150601f19603f3d011682016040523d82523d6000602084013e62001290565b606091505b5091505080806020019051810190620012aa9190620015d7565b9150505b919050565b615e9780620015fc83390190565b6126cf806200749383390190565b6106ca8062009b6283390190565b600060208284031215620012f057600080fd5b8135600b81106200130057600080fd5b9392505050565b602080825282518282018190526000919060409081850190868401855b8281101562001365578151805173ffffffffffffffffffffffffffffffffffffffff16855286015161ffff1686850152928401929085019060010162001324565b5091979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff811681146200139557600080fd5b50565b60008060408385031215620013ac57600080fd5b8235620013b98162001372565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60208101600b831062001461577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000602082840312156200147a57600080fd5b8151620013008162001372565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415620014eb57620014eb62001487565b5060010190565b6000821982111562001508576200150862001487565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562001548576200154862001487565b500290565b6000815160005b8181101562001570576020818501810151868301520162001554565b8181111562001580576000828601525b509290920192915050565b7fffffffff00000000000000000000000000000000000000000000000000000000831681526000620015c160048301846200154d565b949350505050565b60006200130082846200154d565b600060208284031215620015ea57600080fd5b815180151581146200130057600080fdfe6101406040523480156200001257600080fd5b5060405162005e9738038062005e97833981016040819052620000359162000198565b60016000556001600160a01b0383166200006257604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038316608081905260408051636f307dc360e01b81529051636f307dc3916004808201926020929091908290030181865afa158015620000ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d39190620001ea565b6001600160a01b031660a0816001600160a01b031681525050826001600160a01b0316634f0e0ef36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200012b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001519190620001ea565b6001600160a01b0390811660c0529190911660e0819052151561010052151561012052506200020f565b80516001600160a01b03811681146200019357600080fd5b919050565b600080600060608486031215620001ae57600080fd5b620001b9846200017b565b9250620001c9602085016200017b565b915060408401518015158114620001df57600080fd5b809150509250925092565b600060208284031215620001fd57600080fd5b62000208826200017b565b9392505050565b60805160a05160c05160e0516101005161012051615a86620004116000396000818161061101528181612fb5015261481f01526000818161031701528181610dde015281816144f901526146e5015260008181610557015281816146a901526147a901526000818161034b0152818161387d015261392d01526000818161047301528181611bfe0152818161274f0152818161280d0152818161366a01526137dd015260008181610665015281816109d801528181610b0301528181610bd501528181610cdd01528181610e6501528181610fe30152818161114e0152818161120e0152818161132e015281816114510152818161162b01528181611708015281816117e0015281816119e501528181611b1201528181611d9501528181611ed5015281816120040152818161216801528181612290015281816123c601528181612568015281816126390152818161266f0152818161293d01528181612a2101528181612a8a01528181612bde01528181612d2601528181612e6801528181612ec2015281816130a10152818161311b015281816131b401528181613341015281816134c10152818161358a0152818161372f01528181613a1a01528181613b2e01528181613dbb015281816142200152818161432801528181614492015281816148e7015281816149e801528181614aae0152614d8f0152615a866000f3fe6080604052600436106102695760003560e01c8063860aefcf11610153578063c7de38a6116100cb578063dfd594651161007f578063eb9606df11610064578063eb9606df1461081e578063f9eaee0d1461083e578063ffd9b9071461085e57600080fd5b8063dfd59465146107de578063e1f21c67146107fe57600080fd5b8063cff0ab96116100b0578063cff0ab96146106ef578063d9ccbec114610783578063dcf65482146107be57600080fd5b8063c7de38a6146106a7578063caa5c23f146106dc57600080fd5b80639c55a05411610122578063b55bb84b11610107578063b55bb84b14610633578063c12c21c014610653578063c690908a1461068757600080fd5b80639c55a054146105df578063b1836d32146105ff57600080fd5b8063860aefcf146104db5780639408b63f146105455780639b67ab30146105795780639be0536a146105bd57600080fd5b80635d91a0e0116101e65780636d19b486116101b55780637071b7c51161019a5780637071b7c51461049557806379c0ef91146104a857806382871ace146104c857600080fd5b80636d19b486146104415780636f307dc31461046157600080fd5b80635d91a0e0146103e85780635f73fbec146103fb578063601d66f61461040e5780636c8f225d1461042e57600080fd5b80633d9287fa1161023d5780635019e20a116102225780635019e20a1461039257806354fd4d50146103b257806359781034146103d557600080fd5b80633d9287fa146103055780634f0e0ef31461033957600080fd5b8062842b571461026e578063256ac915146102905780632a7ba1f7146102c55780632b7c7b11146102e5575b600080fd5b34801561027a57600080fd5b5061028e6102893660046151bf565b61087e565b005b34801561029c57600080fd5b506102b06102ab3660046151f8565b61098e565b60405190151581526020015b60405180910390f35b3480156102d157600080fd5b5061028e6102e0366004615215565b610a61565b3480156102f157600080fd5b5061028e610300366004615215565b610c3b565b34801561031157600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561034557600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102bc565b34801561039e57600080fd5b5061028e6103ad3660046151f8565b610d6a565b3480156103be57600080fd5b506103c7600281565b6040519081526020016102bc565b61028e6103e336600461522e565b61108c565b61028e6103f63660046152bb565b611275565b61028e610409366004615340565b611589565b34801561041a57600080fd5b5061028e6104293660046153d8565b6117de565b61028e61043c36600461541b565b611900565b34801561044d57600080fd5b506102b061045c3660046151f8565b611c31565b34801561046d57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b61028e6104a336600461546e565b611c60565b3480156104b457600080fd5b5061036d6104c3366004615215565b611f3e565b61028e6104d63660046152bb565b611f4b565b3480156104e757600080fd5b5060025461051c906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041682565b604080516fffffffffffffffffffffffffffffffff9384168152929091166020830152016102bc565b34801561055157600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561058557600080fd5b506004546040805167ffffffffffffffff608084901c1681526fffffffffffffffffffffffffffffffff9092166020830152016102bc565b3480156105c957600080fd5b506105d261227d565b6040516102bc91906154e2565b3480156105eb57600080fd5b5061028e6105fa36600461553c565b61228e565b34801561060b57600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561063f57600080fd5b5061028e61064e3660046151f8565b6123c4565b34801561065f57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561069357600080fd5b5061028e6106a23660046151f8565b6124c6565b3480156106b357600080fd5b506106c76106c23660046151f8565b612668565b604080519283526020830191909152016102bc565b61028e6106ea366004615557565b61289b565b3480156106fb57600080fd5b5060015461074e906fffffffffffffffffffffffffffffffff811690700100000000000000000000000000000000810460ff169071010000000000000000000000000000000000900464ffffffffff1683565b604080516fffffffffffffffffffffffffffffffff9094168452911515602084015264ffffffffff16908201526060016102bc565b34801561078f57600080fd5b506102b061079e366004615599565b600360209081526000928352604080842090915290825290205460ff1681565b3480156107ca57600080fd5b5061028e6107d93660046151f8565b612a88565b3480156107ea57600080fd5b506103c76107f93660046151f8565b612b86565b34801561080a57600080fd5b5061028e61081936600461522e565b612c6d565b34801561082a57600080fd5b5061028e6108393660046155c7565b612ec0565b34801561084a57600080fd5b506102b06108593660046151f8565b613057565b34801561086a57600080fd5b5061028e6108793660046155ee565b6131b2565b600260005414156108f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b6002600090815573ffffffffffffffffffffffffffffffffffffffff8316808252600360209081526040808420338086529083529381902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081527f9b3258bc4904fd6426b99843e206c6c7cdb1fd0f040121c25b71dafbb3851ee0910160405180910390a350506001600055565b6040517f055ee9b500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063055ee9b590602401602060405180830381865afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a43919061560b565b73ffffffffffffffffffffffffffffffffffffffff16141592915050565b60026000541415610ace576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610b5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b83919061560b565b9050610b903382846132eb565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906395373018906024015b600060405180830381600087803b158015610c1a57600080fd5b505af1158015610c2e573d6000803e3d6000fd5b5050600160005550505050565b60026000541415610ca8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610d39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5d919061560b565b9050610b90338284613411565b60026000541415610dd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000557f000000000000000000000000000000000000000000000000000000000000000015610e34576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610ec1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee5919061560b565b33600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915290205490915060ff16610f52576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f5d82613583565b5090508015610f98576040517ff713841e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b15801561102757600080fd5b505af115801561103b573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692503391507f93c70cc9715bef0d83edf2095f3595402279d274f402a73ffc17f1bcb19d863d90600090a35050600160005550565b600260005414156110f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611106613875565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063e958b70490602401602060405180830381865afa158015611197573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bb919061560b565b90506111c9848285856139b7565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401600060405180830381600087803b15801561125257600080fd5b505af1158015611266573d6000803e3d6000fd5b50506001600055505050505050565b600260005414156112e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611375573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611399919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166113e8576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806113f483613583565b915091508161142f576040517f1fdd676f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611437613875565b831561144d5761144d85858b8660016000613ae3565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632362a2d88b600185338e8e8e6040518863ffffffff1660e01b81526004016114b59796959493929190615663565b6020604051808303816000875af11580156114d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f891906156bf565b90508873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f7dfecd8419723a9d3954585a30c2a270165d70aafa146c11c1e1b88ae14390648460405161157091815260200190565b60405180910390a4505060016000555050505050505050565b600260005414156115f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ab919061560b565b90506116b5613875565b81156116cb576116cb8383338460016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d89061174a903390600090819083908d908d908d90600401615663565b6020604051808303816000875af1158015611769573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178d91906156bf565b5060405173ffffffffffffffffffffffffffffffffffffffff87169033907f460ad03b1cf79b1d64d3aefa28475f110ab66e84649c52bb41ed796b9b39198190600090a35050600160005550505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611849573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118d1576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff90811670010000000000000000000000000000000002911617600255565b6002600054141561196d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000908155606461198461ffff851687615707565b61198e9190615744565b9050611999816144f7565b6119a2816145e8565b6119ab84614668565b6119b3613875565b6040517f172c48c7000000000000000000000000000000000000000000000000000000008152600060048201819052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a64919061577f565b61ffff169150611a789050816127106157ae565b611a829083615707565b611a8c8288615707565b11611ac3576040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff86811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611b5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b81919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638587604051611bef92919091825261ffff16602082015260400190565b60405180910390a3611c2386827f00000000000000000000000000000000000000000000000000000000000000008a6139b7565b505060016000555050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526006602052604081205415155b92915050565b60026000541415611ccd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611cdb856144f7565b611ce484614668565b611ced856145e8565b600154700100000000000000000000000000000000900460ff1615611d3e576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d46613875565b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff85811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611de0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e04919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638885604051611e7292919091825261ffff16602082015260400190565b60405180910390a38215611e9057611e908484878460006001613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015611f1957600080fd5b505af1158015611f2d573d6000803e3d6000fd5b505060016000555050505050505050565b6000611c5a60058361480f565b60026000541415611fb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa15801561204b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206f919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166120be576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120c661481b565b6120fc576040517f7e52ccb400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061210782612668565b509050612112613875565b82156121285761212884848a8560016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d8906121aa908c90600290879033908f908f908f90600401615663565b6020604051808303816000875af11580156121c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ed91906156bf565b90508773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167ffada13ff2d5e1a1d9da37ad4a4130893b34e3c69c32b17f87ec31fd661b867078460405161226591815260200190565b60405180910390a45050600160005550505050505050565b6060612289600561486b565b905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612381576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561242f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612453919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146124b7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614878565b5050565b60026000541415612533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156125c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e8919061560b565b90506125f4818361489a565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401610c00565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126fc919061560b565b905060008061270b8387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156127a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127c991906156bf565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015291965061271091851690637afb010490604401602060405180830381865afa158015612863573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061288791906156bf565b6128919190615744565b9350505050915091565b60026000541415612908576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129bd919061560b565b90506129c7613875565b8115612a7e576129dc83833384600080613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015612a6557600080fd5b505af1158015612a79573d6000803e3d6000fd5b505050505b5050600160005550565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612af3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b17919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b7b576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614c92565b600080612b9283612668565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152919350600092507f000000000000000000000000000000000000000000000000000000000000000090911690633192195c906024016040805180830381865afa158015612c26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4a91906157c5565b9150819050612c5b61271084615707565b612c659190615744565b949350505050565b60026000541415612cda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063fdd5764590602401602060405180830381865afa158015612d6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d91919061560b565b73ffffffffffffffffffffffffffffffffffffffff161480612dd7575073ffffffffffffffffffffffffffffffffffffffff831660009081526006602052604090205415155b15612e0e576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612eac57600080fd5b505af1158015611c23573d6000803e3d6000fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f4f919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612fb3576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000061300a576040517f50dd11fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805464ffffffffff90921671010000000000000000000000000000000000027fffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffffff909216919091179055565b6040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063f67c5bd090602401602060405180830381865afa1580156130e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061310c91906156bf565b905080158015906131ab5750807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015613184573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a891906156bf565b16155b9392505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561321d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613241919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146132a5576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018054911515700100000000000000000000000000000000027fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff909216919091179055565b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600060448301819052917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561338c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133b091906156bf565b90506133bb816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f98274bf834d179ee08dc0604071b0dc90b54731bd5f725a5a96a39a86bce025a8360405161340391815260200190565b60405180910390a250505050565b61341a816144f7565b600154700100000000000000000000000000000000900460ff161561346b576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600160448301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561350c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061353091906156bf565b905061353b816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f9cac51154cc0d835e2f9c9d1f59a9344588cee107f4203bf58a8c797e3a58c458360405161340391815260200190565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613617919061560b565b90506000806136268387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156136c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136e491906156bf565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529195506000917f00000000000000000000000000000000000000000000000000000000000000001690633192195c906024016040805180830381865afa158015613775573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061379991906157c5565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350600092506127109187169063f9a6503090604401602060405180830381865afa158015613837573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061385b91906156bf565b6138659190615707565b9092109794965093945050505050565b34156139b5577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156138e357600080fd5b505af11580156138f7573d6000803e3d6000fd5b50506040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201523460248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16935063a9059cbb925060440190506020604051808303816000875af115801561398f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139b391906157e9565b505b565b6139c084614cb4565b6040517f830aa74500000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f0000000000000000000000000000000000000000000000000000000000000000169063830aa74590608401600060405180830381600087803b158015613a5e57600080fd5b505af1158015613a72573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fa32435755c235de2976ed44a75a2f85cb01faf0c894f639fe0c32bb9455fea8f83604051613ad591815260200190565b60405180910390a350505050565b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301523060248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b158015613b7257600080fd5b505af1158015613b86573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff871692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a28460005b8181101561441d5736888883818110613bea57613bea615806565b9050602002810190613bfc9190615835565b90506004613c0d6020830183615873565b90501015613c47576040517fe2b0e50600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b30613c5560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16141561421c578415613ca9576040517f5fb9107f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613cb86020830183615873565b613cc1916158d8565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167f59781034000000000000000000000000000000000000000000000000000000001415613e3c5760008080613d1e6020860186615873565b613d2c916004908290615920565b810190613d39919061522e565b925092509250613e34838c73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614613e2b576040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015613e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e26919061560b565b613e2d565b8b5b84846139b7565b505050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2b7c7b11000000000000000000000000000000000000000000000000000000001415613ec757600194506000613e996020840184615873565b613ea7916004908290615920565b810190613eb49190615215565b9050613ec1898983613411565b50614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2a7ba1f7000000000000000000000000000000000000000000000000000000001415613f80578415613f49576040517fc0b0caa800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613f586020840184615873565b613f66916004908290615920565b810190613f739190615215565b9050613ec18989836132eb565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f233a8caa0000000000000000000000000000000000000000000000000000000014156140e457600080613fda6020850185615873565b613fe8916004908290615920565b810190613ff5919061594a565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c8116600483015292945090925082918416906370a0823190602401602060405180830381865afa158015614069573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061408d91906156bf565b10156140dd576040517fa5ac537300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016108e7565b5050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fc690908a00000000000000000000000000000000000000000000000000000000141561416457600061413d6020840184615873565b61414b916004908290615920565b81019061415891906151f8565b9050613ec1888261489a565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f23e27a640000000000000000000000000000000000000000000000000000000014156141e45760006141bd6020840184615873565b6141cb916004908290615920565b8101906141d891906151f8565b9050613ec18882614d42565b6040517f1e9e7e7a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50614414565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff68754361426760208501856151f8565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156142d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142f4919061560b565b73ffffffffffffffffffffffffffffffffffffffff16148061436d575073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001661435560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16145b156143a4576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6144126143b46020830183615873565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506143f69250505060208401846151f8565b73ffffffffffffffffffffffffffffffffffffffff1690614e39565b505b50600101613bcf565b506040517f60c8e8938c9a0c0d88a98d6f1c562ce68077e12bf3edb8047378f2f736cb45b490600090a16040517fe1998cf900000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff86811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b1580156144d657600080fd5b505af11580156144ea573d6000803e3d6000fd5b5050505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006139b3576001546fffffffffffffffffffffffffffffffff9081169081146124c257600454608081901c906fffffffffffffffffffffffffffffffff16600067ffffffffffffffff8316431461456e578461458a565b61458a6fffffffffffffffffffffffffffffffff831686615976565b9050838111156145c6576040517f675f1a5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff81164360801b176004555050505050565b6002546fffffffffffffffffffffffffffffffff16811080614631575060025470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681115b156139b3576040517fce16799400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61467061481b565b156146a7576040517f63fc31c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1615614806577f0000000000000000000000000000000000000000000000000000000000000000801561472657503373ffffffffffffffffffffffffffffffffffffffff821614155b1561475d576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600160248301527f00000000000000000000000000000000000000000000000000000000000000001690639dc29fac90604401600060405180830381600087803b1580156147ed57600080fd5b505af1158015614801573d6000803e3d6000fd5b505050505b6139b381614cb4565b60006131ab8383614e7b565b60007f0000000000000000000000000000000000000000000000000000000000000000801561228957505060015471010000000000000000000000000000000000900464ffffffffff1642101590565b606060006131ab83614ea5565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f01565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561492b57600080fd5b505af115801561493f573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527fdf498aa1c340e992665d6fb4f3be8436d452c45a630cb6d7fab7963da39bac8793500190505b60405180910390a15050565b6040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600091829160019183917f00000000000000000000000000000000000000000000000000000000000000001690638991b2f190602401602060405180830381865afa158015614a2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a5391906156bf565b90505b808211614c895780821615614c7d576040517fe75538c700000000000000000000000000000000000000000000000000000000815260048101839052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e75538c7906024016040805180830381865afa158015614af4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b18919061577f565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529294509092506000918416906370a0823190602401602060405180830381865afa158015614b8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bb191906156bf565b90506001811115614c79576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff8481166024830152600091908b169063f9a6503090604401602060405180830381865afa158015614c33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c5791906156bf565b978801979050614c6b61ffff841682615707565b614c759088615976565b9650505b5050505b600182901b9150614a56565b50509250929050565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f50565b3373ffffffffffffffffffffffffffffffffffffffff821614801590614d0b575033600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16155b156139b3576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b158015614dd357600080fd5b505af1158015614de7573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527f69db9e9764da61b6681b89fb0f5be018506e0342036e56b59c3015a620d60977935001905061498d565b60606131ab83836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250615043565b6000826000018281548110614e9257614e92615806565b9060005260206000200154905092915050565b606081600001805480602002602001604051908101604052809291908181526020018280548015614ef557602002820191906000526020600020905b815481526020019060010190808311614ee1575b50505050509050919050565b6000818152600183016020526040812054614f4857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611c5a565b506000611c5a565b60008181526001830160205260408120548015615039576000614f746001836157ae565b8554909150600090614f88906001906157ae565b9050818114614fed576000866000018281548110614fa857614fa8615806565b9060005260206000200154905080876000018481548110614fcb57614fcb615806565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080614ffe57614ffe61598e565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611c5a565b6000915050611c5a565b6060612c65848460008585843b6150b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108e7565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516150df91906159ed565b60006040518083038185875af1925050503d806000811461511c576040519150601f19603f3d011682016040523d82523d6000602084013e615121565b606091505b509150915061513182828661513c565b979650505050505050565b6060831561514b5750816131ab565b82511561515b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e791906159ff565b73ffffffffffffffffffffffffffffffffffffffff811681146139b357600080fd5b80151581146139b357600080fd5b600080604083850312156151d257600080fd5b82356151dd8161518f565b915060208301356151ed816151b1565b809150509250929050565b60006020828403121561520a57600080fd5b81356131ab8161518f565b60006020828403121561522757600080fd5b5035919050565b60008060006060848603121561524357600080fd5b833561524e8161518f565b9250602084013561525e8161518f565b929592945050506040919091013590565b60008083601f84011261528157600080fd5b50813567ffffffffffffffff81111561529957600080fd5b6020830191508360208260051b85010111156152b457600080fd5b9250929050565b60008060008060008060a087890312156152d457600080fd5b86356152df8161518f565b955060208701356152ef8161518f565b9450604087013593506060870135615306816151b1565b9250608087013567ffffffffffffffff81111561532257600080fd5b61532e89828a0161526f565b979a9699509497509295939492505050565b60008060008060006080868803121561535857600080fd5b85356153638161518f565b945060208601359350604086013561537a816151b1565b9250606086013567ffffffffffffffff81111561539657600080fd5b6153a28882890161526f565b969995985093965092949392505050565b80356fffffffffffffffffffffffffffffffff811681146153d357600080fd5b919050565b600080604083850312156153eb57600080fd5b6153f4836153b3565b9150615402602084016153b3565b90509250929050565b61ffff811681146139b357600080fd5b6000806000806080858703121561543157600080fd5b8435935060208501356154438161518f565b925060408501356154538161540b565b915060608501356154638161540b565b939692955090935050565b60008060008060006080868803121561548657600080fd5b8535945060208601356154988161518f565b9350604086013567ffffffffffffffff8111156154b457600080fd5b6154c08882890161526f565b90945092505060608601356154d48161540b565b809150509295509295909350565b6020808252825182820181905260009190848201906040850190845b8181101561553057835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016154fe565b50909695505050505050565b60006020828403121561554e57600080fd5b6131ab826153b3565b6000806020838503121561556a57600080fd5b823567ffffffffffffffff81111561558157600080fd5b61558d8582860161526f565b90969095509350505050565b600080604083850312156155ac57600080fd5b82356155b78161518f565b915060208301356151ed8161518f565b6000602082840312156155d957600080fd5b813564ffffffffff811681146131ab57600080fd5b60006020828403121561560057600080fd5b81356131ab816151b1565b60006020828403121561561d57600080fd5b81516131ab8161518f565b6003811061565f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b73ffffffffffffffffffffffffffffffffffffffff888116825260e082019061568f602084018a615628565b6040830197909752948616606082015292909416608083015260a082015291151560c09092019190915292915050565b6000602082840312156156d157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561573f5761573f6156d8565b500290565b60008261577a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000806040838503121561579257600080fd5b825161579d8161518f565b60208401519092506151ed8161540b565b6000828210156157c0576157c06156d8565b500390565b600080604083850312156157d857600080fd5b505080516020909101519092909150565b6000602082840312156157fb57600080fd5b81516131ab816151b1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc183360301811261586957600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126158a857600080fd5b83018035915067ffffffffffffffff8211156158c357600080fd5b6020019150368190038213156152b457600080fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156159185780818660040360031b1b83161692505b505092915050565b6000808585111561593057600080fd5b8386111561593d57600080fd5b5050820193919092039150565b6000806040838503121561595d57600080fd5b82356159688161518f565b946020939093013593505050565b60008219821115615989576159896156d8565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60005b838110156159d85781810151838201526020016159c0565b838111156159e7576000848401525b50505050565b600082516158698184602087016159bd565b6020815260008251806020840152615a1e8160408501602087016159bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea2646970667358221220a3f4a705ab580a6ada1e438cd2ee4abc001b62d1d171fce12c41994900fef21664736f6c634300080a003360c06040523480156200001157600080fd5b50604051620026cf380380620026cf833981016040819052620000349162000324565b82828281600090805190602001906200004f92919062000194565b5080516200006590600190602084019062000194565b50506006805460ff19169055506001600160a01b0381166200009a57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000d9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ff9190620003a1565b6001600160a01b03166080816001600160a01b03168152505050826001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000158573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200017e9190620003a1565b6001600160a01b031660a0525062000403915050565b828054620001a290620003c6565b90600052602060002090601f016020900481019282620001c6576000855562000211565b82601f10620001e157805160ff191683800117855562000211565b8280016001018555821562000211579182015b8281111562000211578251825591602001919060010190620001f4565b506200021f92915062000223565b5090565b5b808211156200021f576000815560010162000224565b80516001600160a01b03811681146200025257600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200027f57600080fd5b81516001600160401b03808211156200029c576200029c62000257565b604051601f8301601f19908116603f01168101908282118183101715620002c757620002c762000257565b81604052838152602092508683858801011115620002e457600080fd5b600091505b83821015620003085785820183015181830184015290820190620002e9565b838211156200031a5760008385830101525b9695505050505050565b6000806000606084860312156200033a57600080fd5b62000345846200023a565b60208501519093506001600160401b03808211156200036357600080fd5b62000371878388016200026d565b935060408601519150808211156200038857600080fd5b5062000397868287016200026d565b9150509250925092565b600060208284031215620003b457600080fd5b620003bf826200023a565b9392505050565b600181811c90821680620003db57607f821691505b60208210811415620003fd57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a0516122756200045a6000396000610a9a015260008181610386015281816106db0152818161089101528181610f15015281816110010152818161115b015281816112f401526114f901526122756000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80636352211e116100f9578063a0bcfc7f11610097578063b88d4fde11610071578063b88d4fde146103a8578063c87b56dd146103b6578063e985e9c5146103c9578063fca3b5aa1461041257600080fd5b8063a0bcfc7f14610360578063a22cb46514610373578063a50cf2c81461038157600080fd5b80638456cb59116100d35780638456cb591461032a57806389406ff51461033257806395d89b41146103455780639dc29fac1461034d57600080fd5b80636352211e146102fc5780636c0360eb1461030f57806370a082311461031757600080fd5b80633f4ba83a116101665780634610f6ac116101405780634610f6ac146102b357806354fd4d50146102c6578063576cd2d1146102ce5780635c975abb146102f157600080fd5b80633f4ba83a1461029857806340c10f19146102a057806342842e0e1461028a57600080fd5b8063081812fc116101a2578063081812fc1461024b578063095ea7b31461025e57806318160ddd1461027357806323b872dd1461028a57600080fd5b806301ffc9a7146101c957806306fdde03146101f15780630754617214610206575b600080fd5b6101dc6101d7366004611cc6565b610425565b60405190151581526020015b60405180910390f35b6101f961050a565b6040516101e89190611d38565b6008546102269073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e8565b610226610259366004611d89565b61059c565b61027161026c366004611dc7565b61067b565b005b61027c60075481565b6040519081526020016101e8565b61027161026c366004611df3565b6102716106ad565b6102716102ae366004611dc7565b61079b565b6102716102c1366004611e34565b610863565b61027c600181565b6101dc6102dc366004611e34565b60096020526000908152604090205460ff1681565b60065460ff166101dc565b61022661030a366004611d89565b610cd9565b6101f9610d8b565b61027c610325366004611e34565b610e19565b610271610ee7565b610271610340366004611e34565b610fd3565b6101f9611103565b61027161035b366004611dc7565b611112565b61027161036e366004611e51565b6112c6565b61027161026c366004611ed1565b6102267f000000000000000000000000000000000000000000000000000000000000000081565b61027161026c366004611f39565b6101f96103c4366004611d89565b6113bb565b6101dc6103d7366004612037565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205460ff1690565b610271610420366004611e34565b6114cb565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd0000000000000000000000000000000000000000000000000000000014806104b857507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061050457507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60606000805461051990612065565b80601f016020809104026020016040519081016040528092919081815260200182805461054590612065565b80156105925780601f1061056757610100808354040283529160200191610592565b820191906000526020600020905b81548152906001019060200180831161057557829003601f168201915b5050505050905090565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff16610652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084015b60405180910390fd5b5060009081526004602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b6040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa158015610737573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075b91906120b9565b610791576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107996115f6565b565b60085473ffffffffffffffffffffffffffffffffffffffff1633146107ec576040517f5c2967f500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006107f783610e19565b905060005b82811015610846576000816108278473ffffffffffffffffffffffffffffffffffffffff8816612105565b6108319190612105565b905061083d85826116d7565b506001016107fc565b5081600760008282546108599190612105565b9091555050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156108ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091191906120b9565b610947576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163b610995576040517f9c01f6a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff1663c12c21c06040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610a1c575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610a199181019061211d565b60015b610a52576040517f9c01f6a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f6fbc6f6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192507f000000000000000000000000000000000000000000000000000000000000000090911690636fbc6f6b90602401602060405180830381865afa158015610ae3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0791906120b9565b1580610bad57503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16639408b63f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b94919061211d565b73ffffffffffffffffffffffffffffffffffffffff1614155b80610c5257508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c39919061211d565b73ffffffffffffffffffffffffffffffffffffffff1614155b15610c89576040517f9c01f6a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff16600090815260096020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff1680610504576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e00000000000000000000000000000000000000000000006064820152608401610649565b600a8054610d9890612065565b80601f0160208091040260200160405190810160405280929190818152602001828054610dc490612065565b8015610e115780601f10610de657610100808354040283529160200191610e11565b820191906000526020600020905b815481529060010190602001808311610df457829003601f168201915b505050505081565b600073ffffffffffffffffffffffffffffffffffffffff8216610ebe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152608401610649565b5073ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015610f71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9591906120b9565b610fcb576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610799611899565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561105d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108191906120b9565b6110b7576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff16600090815260096020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b60606001805461051990612065565b3360009081526009602052604090205460ff161580156111dd57506040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156111b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111db91906120b9565b155b15611214576040517f1e0d048500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061121f83610e19565b90508181101561125b576040517f90c9142d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b828110156112b357600060018261128b8573ffffffffffffffffffffffffffffffffffffffff8916612105565b611295919061213a565b61129f919061213a565b90506112aa81611959565b5060010161125e565b508160076000828254610859919061213a565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611350573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137491906120b9565b6113aa576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113b6600a8383611c0f565b505050565b60008181526002602052604090205460609073ffffffffffffffffffffffffffffffffffffffff1661146f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006064820152608401610649565b6000611479611a26565b9050600081511161149957604051806020016040528060008152506114c4565b806114a384611a35565b6040516020016114b4929190612151565b6040516020818303038152906040525b9392505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611555573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157991906120b9565b6115af576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60065460ff16611662576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610649565b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b73ffffffffffffffffffffffffffffffffffffffff8216611754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610649565b60008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff16156117e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610649565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805460019290611816908490612105565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60065460ff1615611906576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610649565b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586116ad3390565b600061196482610cd9565b9050611971600083611b6f565b73ffffffffffffffffffffffffffffffffffffffff811660009081526003602052604081208054600192906119a790849061213a565b909155505060008281526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555183919073ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6060600a805461051990612065565b606081611a7557505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611a9f5780611a8981612180565b9150611a989050600a836121e8565b9150611a79565b60008167ffffffffffffffff811115611aba57611aba611f0a565b6040519080825280601f01601f191660200182016040528015611ae4576020820181803683370190505b5090505b8415611b6757611af960018361213a565b9150611b06600a866121fc565b611b11906030612105565b60f81b818381518110611b2657611b26612210565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611b60600a866121e8565b9450611ae8565b949350505050565b600081815260046020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091558190611bc982610cd9565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b828054611c1b90612065565b90600052602060002090601f016020900481019282611c3d5760008555611ca1565b82601f10611c74578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00823516178555611ca1565b82800160010185558215611ca1579182015b82811115611ca1578235825591602001919060010190611c86565b50611cad929150611cb1565b5090565b5b80821115611cad5760008155600101611cb2565b600060208284031215611cd857600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146114c457600080fd5b60005b83811015611d23578181015183820152602001611d0b565b83811115611d32576000848401525b50505050565b6020815260008251806020840152611d57816040850160208701611d08565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b600060208284031215611d9b57600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff81168114611dc457600080fd5b50565b60008060408385031215611dda57600080fd5b8235611de581611da2565b946020939093013593505050565b600080600060608486031215611e0857600080fd5b8335611e1381611da2565b92506020840135611e2381611da2565b929592945050506040919091013590565b600060208284031215611e4657600080fd5b81356114c481611da2565b60008060208385031215611e6457600080fd5b823567ffffffffffffffff80821115611e7c57600080fd5b818501915085601f830112611e9057600080fd5b813581811115611e9f57600080fd5b866020828501011115611eb157600080fd5b60209290920196919550909350505050565b8015158114611dc457600080fd5b60008060408385031215611ee457600080fd5b8235611eef81611da2565b91506020830135611eff81611ec3565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060008060808587031215611f4f57600080fd5b8435611f5a81611da2565b93506020850135611f6a81611da2565b925060408501359150606085013567ffffffffffffffff80821115611f8e57600080fd5b818701915087601f830112611fa257600080fd5b813581811115611fb457611fb4611f0a565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715611ffa57611ffa611f0a565b816040528281528a602084870101111561201357600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000806040838503121561204a57600080fd5b823561205581611da2565b91506020830135611eff81611da2565b600181811c9082168061207957607f821691505b602082108114156120b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156120cb57600080fd5b81516114c481611ec3565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115612118576121186120d6565b500190565b60006020828403121561212f57600080fd5b81516114c481611da2565b60008282101561214c5761214c6120d6565b500390565b60008351612163818460208801611d08565b835190830190612177818360208801611d08565b01949350505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156121b2576121b26120d6565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826121f7576121f76121b9565b500490565b60008261220b5761220b6121b9565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea2646970667358221220ffdd83a2fc9a158347ca248f021e63fcef3a7985b3deb793f75cd1835b068aab64736f6c634300080a003360a060405234801561001057600080fd5b506040516106ca3803806106ca83398101604081905261002f9161006c565b60009190915560ff166080526001805460506001600160501b031991821681179092556004805490911690911790554260028190556003556100a2565b6000806040838503121561007f57600080fd5b82519150602083015160ff8116811461009757600080fd5b809150509250929050565b60805161060e6100bc600039600060d3015261060e6000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80639a6fc8f511610081578063d62ada111161005b578063d62ada11146102dc578063f7a30806146102f4578063feaf968c1461030757600080fd5b80639a6fc8f5146101cd578063bd18ad531461023a578063cd653afc1461024d57600080fd5b806354fd4d50116100b257806354fd4d501461012d57806367e8d83d1461013c5780637284e4161461018e57600080fd5b8063313ce567146100ce5780633fd0875f1461010c575b600080fd5b6100f57f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020015b60405180910390f35b6004546a0100000000000000000000900460ff166040516101039190610441565b60405160018152602001610103565b61018c61014a366004610482565b600480549115156c01000000000000000000000000027fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff909216919091179055565b005b604080518082018252600c81527f7072696365206f7261636c6500000000000000000000000000000000000000006020820152905161010391906104ab565b6102036101db36600461053d565b60015460005460025460035460045469ffffffffffffffffffff948516941691939590929450565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610103565b61018c610248366004610558565b61030f565b61018c61025b366004610579565b6001805469ffffffffffffffffffff9586167fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090911617905560029290925560035560048054919092167fffffffffffffffffffffffffffffffffffffffff00ff00000000000000000000909116176b020000000000000000000000179055565b6102e461035f565b6040519015158152602001610103565b61018c6103023660046105bf565b600055565b610203610385565b600480548291907fffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff166b01000000000000000000000083600281111561035757610357610412565b021790555050565b600454600090610380906b010000000000000000000000900460ff166103d6565b905090565b60008060008060006004600c9054906101000a900460ff16156103a757600080fd5b505060015460005460025460035460045469ffffffffffffffffffff9485169893975091955093509190911690565b600060028260028111156103ec576103ec610412565b14156103f757600080fd5b600182600281111561040b5761040b610412565b1492915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016006831061047c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561049457600080fd5b813580151581146104a457600080fd5b9392505050565b600060208083528351808285015260005b818110156104d8578581018301518582016040015282016104bc565b818111156104ea576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803569ffffffffffffffffffff8116811461053857600080fd5b919050565b60006020828403121561054f57600080fd5b6104a48261051e565b60006020828403121561056a57600080fd5b8135600381106104a457600080fd5b6000806000806080858703121561058f57600080fd5b6105988561051e565b935060208501359250604085013591506105b46060860161051e565b905092959194509250565b6000602082840312156105d157600080fd5b503591905056fea264697066735822122014874f7a973b86501c4c1a8be32490fe902c8f088ee234d25f9b2497e19f9e5264736f6c634300080a0033a2646970667358221220d8fdaadc825c43ac2783715ebcfe33e7b0ce3a396ac7717d65e4c95e98b6cf7f64736f6c634300080a003360806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d000117905534801561003957600080fd5b50600054604080516318caf8e360e31b815273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660048083019190915260248201929092526044810191909152632aa9a2a960e11b6064820152620100009091046001600160a01b03169063c657c71890608401600060405180830381600087803b1580156100ba57600080fd5b505af11580156100ce573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b81527390f79bf6eb2c4f870365e785982e1f101e93b90660048201526024810191909152600660448201526511949251539160d21b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561014f57600080fd5b505af1158015610163573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b8152733c44cdddb6a900fa2b585dd299e03d12fa4293bc60048201526024810191909152600a6044820152692624a8aaa4a220aa27a960b11b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b1580156101e857600080fd5b505af11580156101fc573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b815273c4375b7de8af5a38a93548eb8453a498222c4ff260048201526024810191909152600c60448201526b44554d425f4144445245535360a01b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561028357600080fd5b505af1158015610297573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b8152739965507d1a55bcc2695c58ba16fb37d819b0a4dc60048201526024810191909152600760448201526620a220a82a22a960c91b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561031957600080fd5b505af115801561032d573d6000803e3d6000fd5b505050506102a6806103406000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063ba414fa61461003b578063fa7626d414610057575b600080fd5b610043610064565b604051901515815260200160405180910390f35b6000546100439060ff1681565b60008054610100900460ff16156100845750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156101bf5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610129917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016101ff565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526101619161023b565b6000604051808303816000865af19150503d806000811461019e576040519150601f19603f3d011682016040523d82523d6000602084013e6101a3565b606091505b50915050808060200190518101906101bb919061024e565b9150505b919050565b6000815160005b818110156101e557602081850181015186830152016101cb565b818111156101f4576000828601525b509290920192915050565b7fffffffff0000000000000000000000000000000000000000000000000000000083168152600061023360048301846101c4565b949350505050565b600061024782846101c4565b9392505050565b60006020828403121561026057600080fd5b8151801515811461024757600080fdfea2646970667358221220293f55a0ef7b60c31a89dbc50e3339c80a8fdb1f9567614b200e97598226671f64736f6c634300080a003360806040523480156200001157600080fd5b506040516201110538038062011105833981016040819052620000349162000811565b6200003f3362000734565b6040516200004d9062000784565b604051809103906000f0801580156200006a573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b039283169081179091556040516310dc138160e31b81529184166004830152906386e09c0890602401600060405180830381600087803b158015620000c457600080fd5b505af1158015620000d9573d6000803e3d6000fd5b50506001546040516301ed651160e41b81526001600160a01b0385811660048301529091169250631ed651109150602401600060405180830381600087803b1580156200012557600080fd5b505af11580156200013a573d6000803e3d6000fd5b505050506040516200014c9062000792565b604051809103906000f08015801562000169573d6000803e3d6000fd5b50600280546001600160a01b0319166001600160a01b039283169081179091556001546040516376aad60560e01b81526004810192909252909116906376aad60590602401600060405180830381600087803b158015620001c957600080fd5b505af1158015620001de573d6000803e3d6000fd5b5050600154604051600093506001600160a01b0390911691506200020290620007a0565b6001600160a01b039091168152602001604051809103906000f0801580156200022f573d6000803e3d6000fd5b5060015460405163338f12b960e21b81526001600160a01b03808416600483015292935091169063ce3c4ae490602401600060405180830381600087803b1580156200027a57600080fd5b505af11580156200028f573d6000803e3d6000fd5b5050600154604051600093506001600160a01b039091169150620002b390620007ae565b6001600160a01b039091168152602001604051809103906000f080158015620002e0573d6000803e3d6000fd5b5060015460405163c5120b3960e01b81526001600160a01b03808416600483015292935091169063c5120b3990602401600060405180830381600087803b1580156200032b57600080fd5b505af115801562000340573d6000803e3d6000fd5b5050600154604051606093506001600160a01b03909116915082906200036690620007bc565b6200037392919062000849565b604051809103906000f08015801562000390573d6000803e3d6000fd5b50600380546001600160a01b0319166001600160a01b0392831690811790915560015460405163530e784f60e01b815260048101929092529091169063530e784f90602401600060405180830381600087803b158015620003f057600080fd5b505af115801562000405573d6000803e3d6000fd5b5050600154604051600093506001600160a01b0390911691506200042990620007ca565b6001600160a01b039091168152602001604051809103906000f08015801562000456573d6000803e3d6000fd5b506001546040516356ee0d3b60e11b81526001600160a01b03808416600483015292935091169063addc1a7690602401600060405180830381600087803b158015620004a157600080fd5b505af1158015620004b6573d6000803e3d6000fd5b5050600154604051600093506001600160a01b039091169150620004da90620007d8565b6001600160a01b039091168152602001604051809103906000f08015801562000507573d6000803e3d6000fd5b506001546040516321da583760e01b81526001600160a01b0380841660048301529293509116906321da583790602401600060405180830381600087803b1580156200055257600080fd5b505af115801562000567573d6000803e3d6000fd5b505050506000306040516200057c90620007e6565b6001600160a01b039091168152602001604051809103906000f080158015620005a9573d6000803e3d6000fd5b50600154604051631795d5b360e31b81526001600160a01b03808416600483015292935091169063bcaead9890602401600060405180830381600087803b158015620005f457600080fd5b505af115801562000609573d6000803e3d6000fd5b505060405163f2fde38b60e01b81523360048201526001600160a01b038416925063f2fde38b9150602401600060405180830381600087803b1580156200064f57600080fd5b505af115801562000664573d6000803e3d6000fd5b505060015460405163f2fde38b60e01b81523360048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b158015620006ae57600080fd5b505af1158015620006c3573d6000803e3d6000fd5b505060025460405163f2fde38b60e01b81523360048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b1580156200070d57600080fd5b505af115801562000722573d6000803e3d6000fd5b505050505050505050505050620008b2565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610fcd80620010dd83390190565b61098c80620020aa83390190565b610f508062002a3683390190565b614da6806200398683390190565b611b45806200872c83390190565b612ced806200a27183390190565b611627806200cf5e83390190565b612b80806200e58583390190565b80516001600160a01b03811681146200080c57600080fd5b919050565b600080604083850312156200082557600080fd5b6200083083620007f4565b91506200084060208401620007f4565b90509250929050565b6001600160a01b0383811682526040602080840182905284518483018190526000938683019290916060870190865b81811015620008a3578551805186168452840151851684840152948301949186019160010162000878565b50909998505050505050505050565b61081b80620008c26000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80638874ff1f1161005b5780638874ff1f146100f55780638da5cb5b14610108578063de28735914610126578063f2fde38b1461014657600080fd5b80632630c12f146100825780632954018c146100cb578063715018a6146100eb575b600080fd5b6003546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6001546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b6100f3610159565b005b6100f3610103366004610658565b6101eb565b60005473ffffffffffffffffffffffffffffffffffffffff166100a2565b6002546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b6100f3610154366004610734565b6103e3565b60005473ffffffffffffffffffffffffffffffffffffffff1633146101df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6101e96000610513565b565b60005473ffffffffffffffffffffffffffffffffffffffff16331461026c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101d6565b60005b815181101561035c57600354825173ffffffffffffffffffffffffffffffffffffffff9091169063e8a97a3e908490849081106102ae576102ae610756565b6020026020010151600001518484815181106102cc576102cc610756565b6020026020010151602001516040518363ffffffff1660e01b815260040161031792919073ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b600060405180830381600087803b15801561033157600080fd5b505af1158015610345573d6000803e3d6000fd5b50505050808061035490610785565b91505061026f565b506002546040517ff2fde38b00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063f2fde38b90602401600060405180830381600087803b1580156103c857600080fd5b505af11580156103dc573d6000803e3d6000fd5b5050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101d6565b73ffffffffffffffffffffffffffffffffffffffff8116610507576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016101d6565b61051081610513565b50565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156105da576105da610588565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561062757610627610588565b604052919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461065357600080fd5b919050565b6000602080838503121561066b57600080fd5b823567ffffffffffffffff8082111561068357600080fd5b818501915085601f83011261069757600080fd5b8135818111156106a9576106a9610588565b6106b7848260051b016105e0565b818152848101925060069190911b8301840190878211156106d757600080fd5b928401925b8184101561072957604084890312156106f55760008081fd5b6106fd6105b7565b6107068561062f565b815261071386860161062f565b81870152835260409390930192918401916106dc565b979650505050505050565b60006020828403121561074657600080fd5b61074f8261062f565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156107de577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea26469706673582212205ee75e57bb635aa49a1758f4ab0b04182a73115bff08f420c56a8ddb433c029364736f6c634300080a0033608060405234801561001057600080fd5b5061001a3361005f565b60405130906f20a2222922a9a9afa82927ab24a222a960811b907fb37614c7d254ea8d16eb81fa11dddaeb266aa8ba4917980859c7740aff30c69190600090a36100af565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610f0f806100be6000396000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c806377532ed9116100e3578063bcaead981161008c578063ce3c4ae411610066578063ce3c4ae414610308578063f2fde38b1461031b578063fca513a81461032e57600080fd5b8063bcaead98146102da578063c5120b39146102ed578063c513c9bb1461030057600080fd5b80639068a868116100bd5780639068a868146102b7578063addc1a76146102bf578063affd9243146102d257600080fd5b806377532ed91461027e57806386e09c08146102865780638da5cb5b1461029957600080fd5b80634c252f9111610145578063699f200f1161011f578063699f200f1461022d578063715018a61461026357806376aad6051461026b57600080fd5b80634c252f91146101fc578063530e784f1461020457806354fd4d501461021757600080fd5b80631ed65110116101765780631ed65110146101cc57806321da5837146101e157806326c74fc3146101f457600080fd5b8063060678c21461019257806308737695146101c4575b600080fd5b61019a610336565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61019a610366565b6101df6101da366004610e10565b610391565b005b6101df6101ef366004610e10565b610444565b61019a6104ef565b61019a61051a565b6101df610212366004610e10565b610545565b61021f600281565b6040519081526020016101bb565b61019a61023b366004610e4d565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6101df6105f0565b6101df610279366004610e10565b61067d565b61019a610728565b6101df610294366004610e10565b610753565b60005473ffffffffffffffffffffffffffffffffffffffff1661019a565b61019a6107fe565b6101df6102cd366004610e10565b610829565b61019a6108d4565b6101df6102e8366004610e10565b6108ff565b6101df6102fb366004610e10565b6109aa565b61019a610a55565b6101df610316366004610e10565b610a80565b6101df610329366004610e10565b610b2b565b61019a610c58565b60006103617f444154415f434f4d50524553534f520000000000000000000000000000000000610c7f565b905090565b60006103617f41434c0000000000000000000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610417576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6104417f54524541535552595f434f4e545241435400000000000000000000000000000082610d1d565b50565b60005473ffffffffffffffffffffffffffffffffffffffff1633146104c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f574554485f47415445574159000000000000000000000000000000000000000082610d1d565b60006103617f54524541535552595f434f4e5452414354000000000000000000000000000000610c7f565b60006103617f574554485f544f4b454e00000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f50524943455f4f5241434c45000000000000000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610671576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b61067b6000610d9b565b565b60005473ffffffffffffffffffffffffffffffffffffffff1633146106fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f41434c000000000000000000000000000000000000000000000000000000000082610d1d565b60006103617f574554485f474154455741590000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146107d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f574554485f544f4b454e0000000000000000000000000000000000000000000082610d1d565b60006103617f4143434f554e545f464143544f52590000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146108aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f4143434f554e545f464143544f5259000000000000000000000000000000000082610d1d565b60006103617f474541525f544f4b454e00000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610980576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f474541525f544f4b454e0000000000000000000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f444154415f434f4d50524553534f52000000000000000000000000000000000082610d1d565b60006103617f434f4e5452414354535f52454749535445520000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610b01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f434f4e5452414354535f5245474953544552000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610bac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b73ffffffffffffffffffffffffffffffffffffffff8116610c4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161040e565b61044181610d9b565b60006103617f50524943455f4f5241434c4500000000000000000000000000000000000000005b6000818152600160209081526040808320548151808301909252600382527f41503100000000000000000000000000000000000000000000000000000000009282019290925273ffffffffffffffffffffffffffffffffffffffff9091169081610d16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040e9190610e66565b5092915050565b60008281526001602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091559051909184917fb37614c7d254ea8d16eb81fa11dddaeb266aa8ba4917980859c7740aff30c6919190a35050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215610e2257600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610e4657600080fd5b9392505050565b600060208284031215610e5f57600080fd5b5035919050565b600060208083528351808285015260005b81811015610e9357858101830151858201604001528201610e77565b81811115610ea5576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea264697066735822122083c228af017c6f5cf8c395cdf7a53276ff56fdd4f4313c39f680ab73bd75417364736f6c634300080a0033608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61090e8061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063732818191161008c578063adce758d11610066578063adce758d14610215578063ba306df114610228578063d4eb5db01461023b578063f2fde38b1461027457600080fd5b806373281819146101b7578063819ad68e146101da5780638da5cb5b146101ed57600080fd5b806354fd4d50116100bd57806354fd4d501461016a5780635f259aba14610180578063715018a6146101af57600080fd5b806335914829146100e45780633a41ec641461011c5780634910832f14610155575b600080fd5b6101076100f236600461089b565b60016020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61010761012a36600461089b565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205460ff1690565b61016861016336600461089b565b610287565b005b610172600181565b604051908152602001610113565b61010761018e36600461089b565b60005473ffffffffffffffffffffffffffffffffffffffff91821691161490565b610168610387565b6101076101c536600461089b565b60026020526000908152604090205460ff1681565b6101686101e836600461089b565b610414565b60005460405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610113565b61016861022336600461089b565b61050c565b61016861023636600461089b565b610601565b61010761024936600461089b565b73ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205460ff1690565b61016861028236600461089b565b6106f6565b60005473ffffffffffffffffffffffffffffffffffffffff16331461030d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909217909155517fae26b1cfe9454ba87274a4e8330b6654684362d0f3d7bbd17f7449a1d38387c69190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610408576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b6104126000610826565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517fd400da6c0c0a894dacc0981730b88af0545d00272ee8fff1437bf560ff245fc49190a250565b60005473ffffffffffffffffffffffffffffffffffffffff16331461058d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f1998397e7203f7baca9d6f41b9e4da6e768daac5caad4234fb9bf5869d2715459190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610682576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526001602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f28b01395b7e25d20552a0c8dc8ecd3b1d4abc986f14dad7885fd45b6fd73c8d99190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811661081a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610304565b61082381610826565b50565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156108ad57600080fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146108d157600080fd5b939250505056fea26469706673582212204712efbfe997070def77285a5b8753bc882b62da2133ce1937ad26cd2b48e49864736f6c634300080a003360a060405234801561001057600080fd5b50604051610f50380380610f5083398101604081905261002f916100d7565b6000805460ff19169055806001600160a01b03811661006157604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa15801561009f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100c391906100d7565b6001600160a01b0316608052506101079050565b6000602082840312156100e957600080fd5b81516001600160a01b038116811461010057600080fd5b9392505050565b608051610e1261013e600039600081816101e2015281816102b20152818161040f0152818161057801526108510152610e126000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80638456cb5911610097578063b4ac686011610066578063b4ac686014610217578063c29277cd1461021f578063d914cd4b14610227578063e26b2f631461023a57600080fd5b80638456cb59146101cd57806394144856146101d5578063a50cf2c8146101dd578063ac4afa381461020457600080fd5b80635b16ebb7116100d35780635b16ebb7146101575780635c975abb1461018a578063673a2a1f146101955780636fbc6f6b146101aa57600080fd5b80631e16e4fc146100fa5780633f4ba83a1461013757806354fd4d5014610141575b600080fd5b61010d610108366004610c97565b61024d565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61013f610284565b005b610149600181565b60405190815260200161012e565b61017a610165366004610cb0565b60026020526000908152604090205460ff1681565b604051901515815260200161012e565b60005460ff1661017a565b61019d610372565b60405161012e9190610ced565b61017a6101b8366004610cb0565b60046020526000908152604090205460ff1681565b61013f6103e1565b61019d6104cd565b61010d7f000000000000000000000000000000000000000000000000000000000000000081565b61010d610212366004610c97565b61053a565b600154610149565b600354610149565b61013f610235366004610cb0565b61054a565b61013f610248366004610cb0565b610823565b6003818154811061025d57600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa15801561030e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103329190610d47565b610368576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610370610af6565b565b606060018054806020026020016040519081016040528092919081815260200182805480156103d757602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116103ac575b5050505050905090565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561046b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048f9190610d47565b6104c5576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610370610bd7565b606060038054806020026020016040519081016040528092919081815260200182805480156103d75760200282019190600052602060002090815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116103ac575050505050905090565b6001818154811061025d57600080fd5b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156105d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f89190610d47565b61062e576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051808201909152600281527f5a30000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff82166106b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b60405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff8116600090815260026020908152604091829020548251808401909352600383527f43523100000000000000000000000000000000000000000000000000000000009183019190915260ff1615610753576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b506001805480820182557fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915560008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909417909355915190917ff816b5143086c89d103a0683286be86c2b741e83ebfa75135aae606e2f5c6e5391a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156108ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d19190610d47565b610907576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051808201909152600281527f5a30000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8216610989576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b5073ffffffffffffffffffffffffffffffffffffffff8116600090815260046020908152604091829020548251808401909352600383527f43523200000000000000000000000000000000000000000000000000000000009183019190915260ff1615610a23576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b506003805460018082019092557fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915560008181526004602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909417909355915190917f58ad3cfc4b6552a53c8c4128ae9b080e14b4378a159280643a62c6f709cee24f91a250565b60005460ff16610b62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016106b0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff1615610c44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016106b0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610bad3390565b600060208284031215610ca957600080fd5b5035919050565b600060208284031215610cc257600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610ce657600080fd5b9392505050565b6020808252825182820181905260009190848201906040850190845b81811015610d3b57835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101610d09565b50909695505050505050565b600060208284031215610d5957600080fd5b81518015158114610ce657600080fd5b600060208083528351808285015260005b81811015610d9657858101830151858201604001528201610d7a565b81811115610da8576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea26469706673582212208f2d91c863db9ab1494a9c5db20e3fddc4b6c779ea3c3621737c105c60d9440a64736f6c634300080a003360e06040523480156200001157600080fd5b5060405162004da638038062004da6833981016040819052620000349162000160565b6001600160a01b0381166200005c57604051635919af9760e11b815260040160405180910390fd5b6001600160a01b03811660808190526040805163c513c9bb60e01b8152905163c513c9bb916004808201926020929091908290030181865afa158015620000a7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cd919062000160565b6001600160a01b031660a0816001600160a01b0316815250506080516001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000127573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200014d919062000160565b6001600160a01b031660c0525062000192565b6000602082840312156200017357600080fd5b81516001600160a01b03811681146200018b57600080fd5b9392505050565b60805160a05160c051614b896200021d6000396000818161018801528181611c4f0152612c5a0152600081816101ed015281816115e201528181611f5f0152818161213f0152818161223f0152818161243801528181612604015281816126bc01528181612788015281816129a501528181613c410152613d000152600061013c0152614b896000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c806354fd4d5011610081578063a80deda31161005b578063a80deda31461020f578063ae093f3f1461022f578063fc9914cb1461024f57600080fd5b806354fd4d50146101bd578063663b8fdb146101d35780637a0c7b21146101e857600080fd5b80632954018c116100b25780632954018c146101375780634b2f336d146101835780634c472fc9146101aa57600080fd5b80630dbd616d146100d957806313d21cdf146101025780631bcd8fc014610122575b600080fd5b6100ec6100e73660046140fc565b610272565b6040516100f9919061430b565b60405180910390f35b61011561011036600461431e565b6114d4565b6040516100f99190614444565b61012a611f59565b6040516100f99190614453565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100f9565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b61015e6101b83660046140fc565b6121f5565b6101c5600281565b6040519081526020016100f9565b6101db612432565b6040516100f991906146ea565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b61022261021d36600461431e565b6126b5565b6040516100f9919061476a565b61024261023d36600461431e565b612a75565b6040516100f991906147dd565b61026261025d3660046140fc565b613bf7565b60405190151581526020016100f9565b61035f604051806102400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160008152602001606081526020016000815260200160008152602001600015158152602001600081526020016000815260200160008152602001600060ff168152602001600081525090565b600080600080600061037088613cf4565b509450945094509450945060008560ff1660011461041d576040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015284169063e958b70490602401602060405180830381865afa1580156103f4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061041891906147f0565b6104ad565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015286169063e958b70490602401602060405180830381865afa158015610489573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ad91906147f0565b60ff8716610200890181905273ffffffffffffffffffffffffffffffffffffffff808b1660208b01528b811660608b015282168952909150600114156109e9578473ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610538573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055c91906147f0565b73ffffffffffffffffffffffffffffffffffffffff90811660808901526040517fc7de38a600000000000000000000000000000000000000000000000000000000815282821660048201529085169063c7de38a690602401602060405180830381865afa1580156105d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f5919061480d565b60c08801526040517fdfd5946500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015285169063dfd5946590602401602060405180830381865afa158015610666573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068a919061480d565b60e08801526040517f3ce0735500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015260006024830152861690633ce0735590604401602060405180830381865afa92505050801561073c575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526107399181019061480d565b60015b6107455761074c565b6101408801525b6040517f3ce0735500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015260016024830152861690633ce0735590604401602060405180830381865afa9250505080156107f9575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526107f69181019061480d565b60015b61080257610809565b6101608801525b60c08701516040517f996329f800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526024820192909252600060448201529086169063996329f89060640160a060405180830381865afa9250505080156108c4575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526108c191810190614826565b60015b6108cd576108da565b505015156101808a015250505b8073ffffffffffffffffffffffffffffffffffffffff16631afbb7a46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610925573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610949919061480d565b6101a08801526040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152851690633192195c90602401602060405180830381865afa1580156109bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109df919061480d565b60a0880152610c26565b8273ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5891906147f0565b73ffffffffffffffffffffffffffffffffffffffff90811660808901526040517fc7de38a600000000000000000000000000000000000000000000000000000000815282821660048201529083169063c7de38a6906024016040805180830381865afa158015610acc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af09190614866565b5060c08801526040517fdfd5946500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015283169063dfd5946590602401602060405180830381865afa158015610b62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b86919061480d565b60e08801526040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152841690633192195c906024016040805180830381865afa158015610bf6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1a9190614866565b60a08901526101a08801525b60008660ff16600114610ca7578373ffffffffffffffffffffffffffffffffffffffff166316f0115b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca291906147f0565b610d16565b8573ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1691906147f0565b90508073ffffffffffffffffffffffffffffffffffffffff166345d31f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d87919061480d565b6101008901526000600160ff891614610e0e578473ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610de5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e09919061480d565b610e7d565b8573ffffffffffffffffffffffffffffffffffffffff166320a05ff76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7d919061480d565b90508760ff16600114610f1f576040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152861690638991b2f190602401602060405180830381865afa158015610ef6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1a919061480d565b610faf565b6040517fb451cecc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015287169063b451cecc90602401602060405180830381865afa158015610f8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610faf919061480d565b6102208a01528067ffffffffffffffff811115610fce57610fce61488a565b60405190808252806020026020018201604052801561103e57816020015b6040805160808101825260008082526020808301829052928201819052606082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181610fec5790505b506101208a015260005b818110156113d657604080516080810182526000808252602082018190529181018290526060810191909152600180831b9060ff8c1614156111c5576040517faf0a650200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018590528a169063af0a650290604401608060405180830381865afa1580156110f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111b91906148b9565b5050602084015273ffffffffffffffffffffffffffffffffffffffff9081168084526040517ff9eaee0d0000000000000000000000000000000000000000000000000000000081526004810191909152908a169063f9eaee0d90602401602060405180830381865afa158015611195573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b9919061490d565b15156040830152611388565b6040517f172c48c70000000000000000000000000000000000000000000000000000000081526004810184905273ffffffffffffffffffffffffffffffffffffffff89169063172c48c7906024016040805180830381865afa15801561122f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112539190614928565b5073ffffffffffffffffffffffffffffffffffffffff9081168084526040517f70a082310000000000000000000000000000000000000000000000000000000081529188166004830152906370a0823190602401602060405180830381865afa1580156112c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e8919061480d565b602083015281516040517ff9eaee0d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529088169063f9eaee0d90602401602060405180830381865afa15801561135c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611380919061490d565b151560408301525b6102208c015181161561139c57600161139f565b60005b151560608301526101208c01518051839190859081106113c1576113c161495e565b60209081029190910101525050600101611048565b508273ffffffffffffffffffffffffffffffffffffffff166317d11a156040518163ffffffff1660e01b8152600401602060405180830381865afa158015611422573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611446919061480d565b896101c00181815250508273ffffffffffffffffffffffffffffffffffffffff16633dc54b406040518163ffffffff1660e01b8152600401602060405180830381865afa15801561149b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bf919061480d565b6101e08a015250969998505050505050505050565b61159b604051806102000160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600060ff1681525090565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015283917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa15801561162b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164f919061490d565b611685576040517fd384b23800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316808352604080517ffe14112d000000000000000000000000000000000000000000000000000000008152905185929163fe14112d9160048083019260209291908290030181865afa1580156116f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611719919061480d565b8360c00181815250508073ffffffffffffffffffffffffffffffffffffffff1663ef8d96036040518163ffffffff1660e01b8152600401602060405180830381865afa15801561176d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611791919061480d565b8360e00181815250508073ffffffffffffffffffffffffffffffffffffffff1663743753596040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611809919061480d565b8360a00181815250508073ffffffffffffffffffffffffffffffffffffffff16634c19386c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561185d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611881919061480d565b836101000181815250508073ffffffffffffffffffffffffffffffffffffffff1663788c6bfe6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fa919061480d565b836101600181815250508073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561194f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611973919061480d565b8360800181815250508073ffffffffffffffffffffffffffffffffffffffff166345d31f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119eb919061480d565b836101400181815250508073ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6491906147f0565b836040019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff166336dda7d56040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0a91906147f0565b836060019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663788c6bfe6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb0919061480d565b836101600181815250508073ffffffffffffffffffffffffffffffffffffffff1663e941fa786040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c29919061480d565b61018084015260408084015173ffffffffffffffffffffffffffffffffffffffff9081167f000000000000000000000000000000000000000000000000000000000000000082161460208087019190915282517f609ae31700000000000000000000000000000000000000000000000000000000815292519184169263609ae31792600480830193928290030181865afa158015611ccb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cef919061480d565b836101c00181815250508073ffffffffffffffffffffffffffffffffffffffff1663dbcb313b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d68919061480d565b836101a00181815250506000836060015173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de7919061480d565b6040517f5427c9380000000000000000000000000000000000000000000000000000000081526004810182905290915060009073ffffffffffffffffffffffffffffffffffffffff841690635427c93890602401602060405180830381865afa158015611e58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7c919061480d565b90508015611ec7576101808501518190611eb890611e9c906127106149bc565b876101000151886101400151611eb291906149d3565b90613fd0565b611ec29190614a3f565b611ece565b8461014001515b856101200181815250508273ffffffffffffffffffffffffffffffffffffffff166354fd4d506040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f47919061480d565b60ff166101e086015250505050919050565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b4ac68606040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fec919061480d565b90508067ffffffffffffffff8111156120075761200761488a565b6040519080825280602002602001820160405280156120ff57816020015b6120ec604051806102000160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600060ff1681525090565b8152602001906001900390816120255790505b50915060005b818110156121f0576040517fac4afa38000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ac4afa3890602401602060405180830381865afa15801561219b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121bf91906147f0565b90506121ca816114d4565b8483815181106121dc576121dc61495e565b602090810291909101015250600101612105565b505090565b6040517f6fbc6f6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015260009184917f00000000000000000000000000000000000000000000000000000000000000001690636fbc6f6b90602401602060405180830381865afa158015612286573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122aa919061490d565b6122e0576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060006122ee87613cf4565b5050935093505092508260ff16600114612397576040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015282169063fdd5764590602401602060405180830381865afa15801561236e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061239291906147f0565b612427565b6040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015283169063fdd5764590602401602060405180830381865afa158015612403573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061242791906147f0565b979650505050505050565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c29277cd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124c5919061480d565b90508067ffffffffffffffff8111156124e0576124e061488a565b6040519080825280602002602001820160405280156125c457816020015b60408051610260810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083018290526101208301819052610140830181905261016083015261018082018190526101a082018190526101c082018190526101e082018190526102008201819052610220820181905261024082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816124fe5790505b50915060005b818110156121f0576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa158015612660573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061268491906147f0565b905061268f81612a75565b8483815181106126a1576126a161495e565b6020908102919091010152506001016125ca565b60606000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c29277cd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612725573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612749919061480d565b905060005b81811015612829576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa1580156127e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061280891906147f0565b90506128148187613bf7565b15612820578360010193505b5060010161274e565b508167ffffffffffffffff8111156128435761284361488a565b60405190808252806020026020018201604052801561296157816020015b61294e604051806102400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160008152602001606081526020016000815260200160008152602001600015158152602001600081526020016000815260200160008152602001600060ff168152602001600081525090565b8152602001906001900390816128615790505b5092506000915060005b81811015612a6d576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa158015612a01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a2591906147f0565b9050612a318187613bf7565b15612a6457612a408187610272565b858581518110612a5257612a5261495e565b60209081029190910101526001909301925b5060010161296b565b505050919050565b604080516102608101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082018390526101208201819052610140820181905261016082015261018081018290526101a081018290526101c081018290526101e08101829052610200810182905261022081018290526102408101829052908080808080612b1b88613cf4565b73ffffffffffffffffffffffffffffffffffffffff8e168d5260ff86166101808e01819052959b50939950919750955093509150600114612bca578273ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ba1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bc591906147f0565b612c39565b8473ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c3991906147f0565b73ffffffffffffffffffffffffffffffffffffffff908116602089018190527f00000000000000000000000000000000000000000000000000000000000000009091161460408801526000600160ff881614612d03578373ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cfe91906147f0565b612d72565b8573ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d7291906147f0565b6040517f2e97ca2100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b8116600483015291925090821690632e97ca2190602401602060405180830381865afa158015612de2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e06919061490d565b15156060890152604080517f45d31f9d000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff8316916345d31f9d9160048083019260209291908290030181865afa158015612e78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e9c919061480d565b8860800181815250508073ffffffffffffffffffffffffffffffffffffffff1663743753596040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ef0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f14919061480d565b610100890152600160ff88161415613017578573ffffffffffffffffffffffffffffffffffffffff16639b2cb5d86040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f95919061480d565b8860a00181815250508573ffffffffffffffffffffffffffffffffffffffff16635f48f3936040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fe9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061300d919061480d565b60c08901526130a5565b8273ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa158015613061573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130859190614a73565b6fffffffffffffffffffffffffffffffff90811660c08b01521660a08901525b60008760ff16600114613126578473ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613121919061480d565b613195565b8573ffffffffffffffffffffffffffffffffffffffff166320a05ff76040518163ffffffff1660e01b8152600401602060405180830381865afa158015613171573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613195919061480d565b90508067ffffffffffffffff8111156131b0576131b061488a565b6040519080825280602002602001820160405280156131d9578160200160208202803683370190505b506101208a01528067ffffffffffffffff8111156131f9576131f961488a565b604051908082528060200260200182016040528015613222578160200160208202803683370190505b506101608a015260005b818110156134c4578860ff16600114156133b4576040517f5e5f2e260000000000000000000000000000000000000000000000000000000081526004810182905260009073ffffffffffffffffffffffffffffffffffffffff891690635e5f2e2690602401602060405180830381865afa1580156132ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132d291906147f0565b9050808b610120015183815181106132ec576132ec61495e565b73ffffffffffffffffffffffffffffffffffffffff92831660209182029290920101526040517f78327438000000000000000000000000000000000000000000000000000000008152828216600482015290891690637832743890602401602060405180830381865afa158015613367573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061338b919061480d565b8b610160015183815181106133a2576133a261495e565b602002602001018181525050506134bc565b6040517f172c48c70000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff87169063172c48c7906024016040805180830381865afa15801561341e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134429190614928565b8061ffff1690508b610120015183815181106134605761346061495e565b602002602001018c6101600151848151811061347e5761347e61495e565b60200260200101828152508273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525050505b60010161322c565b5060008860ff16600114613546578373ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561351d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613541919061480d565b6135b5565b8673ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613591573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135b5919061480d565b90508067ffffffffffffffff8111156135d0576135d061488a565b60405190808252806020026020018201604052801561361557816020015b60408051808201909152600080825260208201528152602001906001900390816135ee5790505b506101408b015260005b818110156139015760408051808201909152600080825260208201528a60ff166001146136da576040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff871690635094cb4f90602401602060405180830381865afa1580156136b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136d591906147f0565b613769565b6040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff8a1690635094cb4f90602401602060405180830381865afa158015613745573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061376991906147f0565b73ffffffffffffffffffffffffffffffffffffffff168152600160ff8c16146138245780516040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529089169063fdd5764590602401602060405180830381865afa1580156137fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061381f91906147f0565b6138b7565b80516040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152908a169063fdd5764590602401602060405180830381865afa158015613893573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138b791906147f0565b73ffffffffffffffffffffffffffffffffffffffff1660208201526101408c01518051829190849081106138ed576138ed61495e565b60209081029190910101525060010161361f565b508860ff166001141561398f578773ffffffffffffffffffffffffffffffffffffffff1663b2c53a6c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613959573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061397d919061480d565b60e08b015260ff6102408b0152613be9565b73ffffffffffffffffffffffffffffffffffffffff85166101a08b01819052604080517f9408b63f0000000000000000000000000000000000000000000000000000000081529051639408b63f916004808201926020929091908290030181865afa158015613a02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a2691906147f0565b8a6101e0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508473ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015613aa9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613acd9190614aa6565b5015156102008c015250604080517f9fd12b77000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff881691639fd12b779160048083019260209291908290030181865afa158015613b42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b66919061480d565b8a6102200181815250508573ffffffffffffffffffffffffffffffffffffffff16638345f26e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bdf9190614af7565b60ff166102408b01525b505050505050505050919050565b6040517f6fbc6f6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015260009184917f00000000000000000000000000000000000000000000000000000000000000001690636fbc6f6b90602401602060405180830381865afa158015613c88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cac919061490d565b613ce2576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613cec8484614023565b949350505050565b600080600080600080867f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636fbc6f6b826040518263ffffffff1660e01b8152600401613d73919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa158015613d90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613db4919061490d565b613dea576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8773ffffffffffffffffffffffffffffffffffffffff166354fd4d506040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e59919061480d565b96508660ff1660011415613ee0578795508573ffffffffffffffffffffffffffffffffffffffff1663f93f515b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613eb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ed991906147f0565b9450613fc6565b8793508373ffffffffffffffffffffffffffffffffffffffff16632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f5291906147f0565b92508373ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fc391906147f0565b91505b5091939550919395565b6000821580613fdd575081155b15613fea5750600061401d565b612710613ff8600282614b1a565b61ffff1661400684866149d3565b6140109190614b3b565b61401a9190614a3f565b90505b92915050565b6040517f055ee9b500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600091829185169063055ee9b590602401602060405180830381865afa158015614094573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140b891906147f0565b73ffffffffffffffffffffffffffffffffffffffff1614159392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146140f957600080fd5b50565b6000806040838503121561410f57600080fd5b823561411a816140d7565b9150602083013561412a816140d7565b809150509250929050565b600081518084526020808501945080840160005b8381101561419f578151805173ffffffffffffffffffffffffffffffffffffffff168852838101518489015260408082015115159089015260609081015115159088015260809096019590820190600101614149565b509495945050505050565b805173ffffffffffffffffffffffffffffffffffffffff168252600061024060208301516141f0602086018273ffffffffffffffffffffffffffffffffffffffff169052565b506040830151614204604086018215159052565b50606083015161422c606086018273ffffffffffffffffffffffffffffffffffffffff169052565b506080830151614254608086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060a083015160a085015260c083015160c085015260e083015160e085015261010080840151818601525061012080840151828287015261429783870182614135565b92505050610140808401518186015250610160808401518186015250610180808401516142c78287018215159052565b50506101a083810151908501526101c080840151908501526101e080840151908501526102008084015160ff16908501526102209283015192909301919091525090565b60208152600061401a60208301846141aa565b60006020828403121561433057600080fd5b813561433b816140d7565b9392505050565b805173ffffffffffffffffffffffffffffffffffffffff168252602081015161436f602084018215159052565b506040810151614397604084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060608101516143bf606084018273ffffffffffffffffffffffffffffffffffffffff169052565b506080818101519083015260a0808201519083015260c0808201519083015260e08082015190830152610100808201519083015261012080820151908301526101408082015190830152610160808201519083015261018080820151908301526101a080820151908301526101c080820151908301526101e09081015160ff16910152565b610200810161401d8284614342565b6020808252825182820181905260009190848201906040850190845b8181101561449657614482838551614342565b92840192610200929092019160010161446f565b50909695505050505050565b600081518084526020808501945080840160005b8381101561419f57815173ffffffffffffffffffffffffffffffffffffffff16875295820195908201906001016144b6565b600081518084526020808501945080840160005b8381101561419f578151805173ffffffffffffffffffffffffffffffffffffffff9081168952908401511683880152604090960195908201906001016144fc565b600081518084526020808501945080840160005b8381101561419f57815187529582019590820190600101614551565b805173ffffffffffffffffffffffffffffffffffffffff168252600061026060208301516145b3602086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060408301516145c7604086018215159052565b5060608301516145db606086018215159052565b506080830151608085015260a083015160a085015260c083015160c085015260e083015160e0850152610100808401518186015250610120808401518282870152614628838701826144a2565b92505050610140808401518583038287015261464483826144e8565b925050506101608084015185830382870152614660838261453d565b92505050610180808401516146798287018260ff169052565b50506101a08381015173ffffffffffffffffffffffffffffffffffffffff908116918601919091526101c0808501511515908601526101e080850151909116908501526102008084015115159085015261022080840151908501526102409283015160ff1692909301919091525090565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561475d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc088860301845261474b85835161456d565b94509285019290850190600101614711565b5092979650505050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561475d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08886030184526147cb8583516141aa565b94509285019290850190600101614791565b60208152600061401a602083018461456d565b60006020828403121561480257600080fd5b815161433b816140d7565b60006020828403121561481f57600080fd5b5051919050565b600080600080600060a0868803121561483e57600080fd5b5050835160208501516040860151606087015160809097015192989197509594509092509050565b6000806040838503121561487957600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080600080608085870312156148cf57600080fd5b84516148da816140d7565b60208601516040870151606090970151919890975090945092505050565b8051801515811461490857600080fd5b919050565b60006020828403121561491f57600080fd5b61401a826148f8565b6000806040838503121561493b57600080fd5b8251614946816140d7565b602084015190925061ffff8116811461412a57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156149ce576149ce61498d565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614a0b57614a0b61498d565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614a4e57614a4e614a10565b500490565b80516fffffffffffffffffffffffffffffffff8116811461490857600080fd5b60008060408385031215614a8657600080fd5b614a8f83614a53565b9150614a9d60208401614a53565b90509250929050565b600080600060608486031215614abb57600080fd5b614ac484614a53565b9250614ad2602085016148f8565b9150604084015164ffffffffff81168114614aec57600080fd5b809150509250925092565b600060208284031215614b0957600080fd5b815160ff8116811461433b57600080fd5b600061ffff80841680614b2f57614b2f614a10565b92169190910492915050565b60008219821115614b4e57614b4e61498d565b50019056fea2646970667358221220d15108d0bec9cc6f3903875dd8412869a3da1b36661bdc780e2e2f0ae3136d2464736f6c634300080a003360a06040523480156200001157600080fd5b5060405162001b4538038062001b45833981016040819052620000349162000608565b6000805460ff19169055816001600160a01b0381166200006757604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cc91906200070a565b6001600160a01b031660805250805160005b818110156200014257620001398382815181106200010057620001006200072f565b6020026020010151600001518483815181106200012157620001216200072f565b6020026020010151602001516200014c60201b60201c565b600101620000de565b5050505062000822565b6001600160a01b03821615806200016a57506001600160a01b038116155b156200018957604051635919af9760e11b815260040160405180910390fd5b620001a8826001600160a01b0316620004ba60201b620006751760201c565b620001d65760405163df4c572d60e01b81526001600160a01b03831660048201526024015b60405180910390fd5b620001f5816001600160a01b0316620004ba60201b620006751760201c565b6200021f5760405163df4c572d60e01b81526001600160a01b0382166004820152602401620001cd565b806001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200027c575060408051601f3d908101601f19168201909252620002799181019062000745565b60015b6200029a576040516367a7cd4360e01b815260040160405180910390fd5b8060ff16600814620002bf576040516367a7cd4360e01b815260040160405180910390fd5b506000816001600160a01b031663d62ada116040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200031f575060408051601f3d908101601f191682019092526200031c918101906200076a565b60015b6200032a576200032d565b90505b6000836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200038c575060408051601f3d908101601f19168201909252620003899181019062000745565b60015b620003aa5760405163528ca31d60e01b815260040160405180910390fd5b60128160ff161115620003d05760405163528ca31d60e01b815260040160405180910390fd5b9050826001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa9250505080156200042f575060408051601f3d908101601f191682019092526200042c91810190620007a6565b60015b6200044d576040516367a7cd4360e01b815260040160405180910390fd5b8662000461576200046185858484620004c0565b5050505050620004748484848462000526565b826001600160a01b0316846001600160a01b03167fe263805b03657ab13064915d0723c5ce14981547e7cba5283f66b9e5d81f6e6e60405160405180910390a350505050565b3b151590565b60008313620004e2576040516356e05d2b60e01b815260040160405180910390fd5b836001600160501b0316816001600160501b0316108062000501575081155b15620005205760405163b1cf675560e01b815260040160405180910390fd5b50505050565b6001600160a01b03831682156200053e57600160a11b175b6200055460ff60a21b60a284901b1682620007fb565b6001600160a01b0390951660009081526001602052604090209490945550505050565b80516001600160a01b03811681146200058f57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715620005cf57620005cf62000594565b60405290565b604051601f8201601f191681016001600160401b038111828210171562000600576200060062000594565b604052919050565b60008060408084860312156200061d57600080fd5b620006288462000577565b602085810151919450906001600160401b03808211156200064857600080fd5b818701915087601f8301126200065d57600080fd5b81518181111562000672576200067262000594565b62000682848260051b01620005d5565b818152848101925060069190911b830184019089821115620006a357600080fd5b928401925b81841015620006fa5785848b031215620006c25760008081fd5b620006cc620005aa565b620006d78562000577565b8152620006e686860162000577565b8187015283529285019291840191620006a8565b8096505050505050509250929050565b6000602082840312156200071d57600080fd5b620007288262000577565b9392505050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156200075857600080fd5b815160ff811681146200072857600080fd5b6000602082840312156200077d57600080fd5b815180151581146200072857600080fd5b80516001600160501b03811681146200058f57600080fd5b600080600080600060a08688031215620007bf57600080fd5b620007ca866200078e565b9450602086015193506040860151925060608601519150620007ef608087016200078e565b90509295509295909350565b600082198211156200081d57634e487b7160e01b600052601160045260246000fd5b500190565b6080516112f262000853600039600081816101b201528181610280015281816103e201526104ff01526112f26000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c80638456cb591161008c578063b66102df11610066578063b66102df146101d4578063e8a97a3e146101e7578063f190e5fa146101fa578063f9a650301461023f57600080fd5b80638456cb591461016d5780639dcb511a14610175578063a50cf2c8146101ad57600080fd5b80635c975abb116100bd5780635c975abb1461011c5780635cecbd0e146101325780637afb01041461015a57600080fd5b80633f4ba83a146100e457806341976e09146100ee57806354fd4d5014610114575b600080fd5b6100ec610252565b005b6101016100fc366004610f28565b610340565b6040519081526020015b60405180910390f35b610101600281565b60005460ff16604051901515815260200161010b565b610145610140366004610f4a565b610352565b6040805192835260208301919091520161010b565b610101610168366004610f90565b610376565b6100ec6103b4565b610188610183366004610f28565b6104a0565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010b565b6101887f000000000000000000000000000000000000000000000000000000000000000081565b6101016101e2366004610fbc565b6104b4565b6100ec6101f5366004610ff8565b6104d1565b61020d610208366004610f28565b6105c3565b6040805173ffffffffffffffffffffffffffffffffffffffff909416845291151560208401529082015260600161010b565b61010161024d366004610f90565b61064d565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156102dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103009190611022565b610336576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033e61067b565b565b600061034b82610761565b5092915050565b60008061035f868661064d565b915061036b848461064d565b905094509492505050565b600080600061038484610761565b90925090508161039582600a611193565b61039f908761119f565b6103a991906111dc565b925050505b92915050565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561043e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104629190611022565b610498576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033e610819565b60006104ab826105c3565b50909392505050565b60006104c96104c3858561064d565b83610376565b949350505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561055b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057f9190611022565b6105b5576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105bf82826108d9565b5050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600160205260408120548190819080610624576040517f4bb8ad8200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b947402000000000000000000000000000000000000000086161515945060a286901c9350915050565b600080600061065b84610761565b909250905061066b81600a611193565b61039f838761119f565b3b151590565b60005460ff166106ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b600080600080610770856105c3565b8095508193508294505050506000806000808573ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156107cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f19190611231565b9450945050935093508461080b5761080b84848484610dd9565b829750505050505050915091565b60005460ff1615610886576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016106e3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586107373390565b73ffffffffffffffffffffffffffffffffffffffff82161580610910575073ffffffffffffffffffffffffffffffffffffffff8116155b15610947576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82163b6109ad576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016106e3565b73ffffffffffffffffffffffffffffffffffffffff81163b610a13576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024016106e3565b8073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610a98575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610a9591810190611281565b60015b610ace576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060ff16600814610b0b576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060008173ffffffffffffffffffffffffffffffffffffffff1663d62ada116040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610b93575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610b9091810190611022565b60015b610b9c57610b9f565b90505b60008373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610c26575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610c2391810190611281565b60015b610c5c576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60128160ff161115610c9a576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b90508273ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa925050508015610d21575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610d1e91810190611231565b60015b610d57576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b86610d6857610d6885858484610dd9565b5050505050610d7984848484610e74565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fe263805b03657ab13064915d0723c5ce14981547e7cba5283f66b9e5d81f6e6e60405160405180910390a350505050565b60008313610e13576040517f56e05d2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8369ffffffffffffffffffff168169ffffffffffffffffffff161080610e37575081155b15610e6e576040517fb1cf675500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b73ffffffffffffffffffffffffffffffffffffffff83168215610ea95774020000000000000000000000000000000000000000175b610ecf7503fc000000000000000000000000000000000000000060a284901b16826112a4565b73ffffffffffffffffffffffffffffffffffffffff90951660009081526001602052604090209490945550505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610f2357600080fd5b919050565b600060208284031215610f3a57600080fd5b610f4382610eff565b9392505050565b60008060008060808587031215610f6057600080fd5b84359350610f7060208601610eff565b925060408501359150610f8560608601610eff565b905092959194509250565b60008060408385031215610fa357600080fd5b82359150610fb360208401610eff565b90509250929050565b600080600060608486031215610fd157600080fd5b83359250610fe160208501610eff565b9150610fef60408501610eff565b90509250925092565b6000806040838503121561100b57600080fd5b61101483610eff565b9150610fb360208401610eff565b60006020828403121561103457600080fd5b81518015158114610f4357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b808511156110cc57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156110b2576110b2611044565b808516156110bf57918102915b93841c9390800290611078565b509250929050565b6000826110e3575060016103ae565b816110f0575060006103ae565b816001811461110657600281146111105761112c565b60019150506103ae565b60ff84111561112157611121611044565b50506001821b6103ae565b5060208310610133831016604e8410600b841016171561114f575081810a6103ae565b6111598383611073565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561118b5761118b611044565b029392505050565b6000610f4383836110d4565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156111d7576111d7611044565b500290565b600082611212577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b805169ffffffffffffffffffff81168114610f2357600080fd5b600080600080600060a0868803121561124957600080fd5b61125286611217565b945060208601519350604086015192506060860151915061127560808701611217565b90509295509295909350565b60006020828403121561129357600080fd5b815160ff81168114610f4357600080fd5b600082198211156112b7576112b7611044565b50019056fea2646970667358221220e7485a2cb5750973f539ca59d2211008b42bb92b6c49605a53f5d9c88c330fb164736f6c634300080a003360e06040523480156200001157600080fd5b5060405162002ced38038062002ced8339810160408190526200003491620004bb565b6000805460ff19169055806001600160a01b0381166200006757604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cc9190620004bb565b6001600160a01b039081166080526001805560408051808201909152600281526105a360f41b602082015291508216620001245760405162461bcd60e51b81526004016200011b9190620004ed565b60405180910390fd5b50806001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000164573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200018a9190620004bb565b6001600160a01b031660c052604051620001a490620004ad565b604051809103906000f080158015620001c1573d6000803e3d6000fd5b506001600160a01b031660a08190526040805163204a7f0760e21b81529051638129fc1c9160048082019260009290919082900301818387803b1580156200020857600080fd5b505af11580156200021d573d6000803e3d6000fd5b50505050620002316200028a60201b60201c565b50600454600380546001600160a01b039092166001600160a01b03199283161790556000805260026020527fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b8054909116905562000545565b6000620002a460a0516200038c60201b6200119b1760201c565b9050806001600160a01b0316638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620002e257600080fd5b505af1158015620002f7573d6000803e3d6000fd5b5050600480546001600160a01b03908116600090815260026020908152604090912080546001600160a01b03199081169388169384179091558354169091179091556200035492506005915083906200043b811b6200127d17901c565b506040516001600160a01b038216907f9f69b6c10f6810213e055b0ba6bc0a4e2603f73c221aad77ea35da819cda7dc390600090a250565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260601b60148201526e5af43d82803e903d91602b57fd5bf360881b60288201526037816000f09150506001600160a01b038116620004365760405162461bcd60e51b815260206004820152601660248201527f455243313136373a20637265617465206661696c65640000000000000000000060448201526064016200011b565b919050565b600062000452836001600160a01b0384166200045b565b90505b92915050565b6000818152600183016020526040812054620004a45750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000455565b50600062000455565b610e788062001e7583390190565b600060208284031215620004ce57600080fd5b81516001600160a01b0381168114620004e657600080fd5b9392505050565b600060208083528351808285015260005b818110156200051c57858101830151858201604001528201620004fe565b818111156200052f576000604083870101525b50601f01601f1916929092016040019392505050565b60805160a05160c0516118cf620005a66000396000818161026a015281816103680152610b7001526000818161020201526110650152600081816102c4015281816105b80152818161099601528181610a840152610e7401526118cf6000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806388f64c54116100cd578063b193976311610081578063d82ecc4811610066578063d82ecc4814610309578063e3ba9ace1461031c578063f23953ab1461032f57600080fd5b8063b1939763146102f9578063b60e85181461030157600080fd5b80638f7dcfa3116100b25780638f7dcfa31461029f578063a50cf2c8146102bf578063a904aab6146102e657600080fd5b806388f64c541461026557806389b77b3e1461028c57600080fd5b806354fd4d50116101245780635da33c5b116101095780635da33c5b146101fd578063765e0159146102245780638456cb591461025d57600080fd5b806354fd4d50146101d05780635c975abb146101e657600080fd5b806313d8c8401461015657806321d18456146101a05780632932472f146101b35780633f4ba83a146101c8575b600080fd5b6004546101769073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6101766101ae366004611651565b610337565b6101c66101c1366004611697565b61058a565b005b6101c6610968565b6101d8600181565b604051908152602001610197565b60005460ff165b6040519015158152602001610197565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101766102323660046116da565b73ffffffffffffffffffffffffffffffffffffffff9081166000908152600260205260409020541690565b6101c6610a56565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101c661029a3660046116da565b610b42565b6003546101769073ffffffffffffffffffffffffffffffffffffffff1681565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101c66102f4366004611697565b610e46565b6101d8610fb8565b6101d8611033565b6101ed6103173660046116da565b611044565b61017661032a3660046116f5565b611051565b6101c661105e565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa1580156103c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103e8919061170e565b6040518060400160405280600281526020017f43500000000000000000000000000000000000000000000000000000000000008152509061045f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b60405180910390fd5b506104686112a6565b6003805473ffffffffffffffffffffffffffffffffffffffff8082166000818152600260205260409081902080549093167fffffffffffffffffffffffff0000000000000000000000000000000000000000948516179094558154909216905590517fc75b5a710000000000000000000000000000000000000000000000000000000081523360048201526024810185905260448101849052819063c75b5a7190606401600060405180830381600087803b15801561052657600080fd5b505af115801561053a573d6000803e3d6000fd5b505060405133925073ffffffffffffffffffffffffffffffffffffffff841691507ff3ede7039176503a8ad1fe7cfaa29475a9dbe0cdcaf04ecf9a5c10570c47b10390600090a390505b92915050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610614573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610638919061170e565b61066e576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106766112a6565b60035473ffffffffffffffffffffffffffffffffffffffff838116911614156106fa576003805473ffffffffffffffffffffffffffffffffffffffff808216600090815260026020526040902080549091167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092558154169055610865565b73ffffffffffffffffffffffffffffffffffffffff838116600090815260026020908152604091829020548251808401909352600383527f4146330000000000000000000000000000000000000000000000000000000000918301919091529091848116911614610798576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b5060045473ffffffffffffffffffffffffffffffffffffffff838116911614156107fd57600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85161790555b73ffffffffffffffffffffffffffffffffffffffff828116600081815260026020526040808220805488861684529183208054929095167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790945591905281541690555b6040517fc75b5a7100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600060248301819052604483015283169063c75b5a7190606401600060405180830381600087803b1580156108dc57600080fd5b505af11580156108f0573d6000803e3d6000fd5b505050506109088260056112dd90919063ffffffff16565b508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f25e267469ba2ae82515be7b3d45df60bf8308343f0809e8cf7319058e2255ce660405160405180910390a3505050565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156109f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a16919061170e565b610a4c576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a546112ff565b565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015610ae0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b04919061170e565b610b3a576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a546113e0565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa158015610bcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf0919061170e565b6040518060400160405280600281526020017f435000000000000000000000000000000000000000000000000000000000000081525090610c5e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b50610c6a6005826114a0565b6040518060400160405280600381526020017f414634000000000000000000000000000000000000000000000000000000000081525090610cd8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b50438173ffffffffffffffffffffffffffffffffffffffff16633dc54b406040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4991906117a3565b14156040518060400160405280600381526020017f414631000000000000000000000000000000000000000000000000000000000081525090610db9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b506004805473ffffffffffffffffffffffffffffffffffffffff90811660009081526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081169487169485179091558454168317909355915190917fced6ab9afc868b3a088366f6631ae20752993b5cce5d5f0534ea5a59fcc57d5691a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610ed0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef4919061170e565b610f2a576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f19a1603900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301528416906319a1603990604401600060405180830381600087803b158015610f9b57600080fd5b505af1158015610faf573d6000803e3d6000fd5b50505050505050565b600354600090819073ffffffffffffffffffffffffffffffffffffffff165b73ffffffffffffffffffffffffffffffffffffffff81161561102d5773ffffffffffffffffffffffffffffffffffffffff9081166000908152600260205260409020541681611025816117eb565b925050610fd7565b50919050565b600061103f60056114cf565b905090565b60006105846005836114a0565b60006105846005836114d9565b60006110897f000000000000000000000000000000000000000000000000000000000000000061119b565b90508073ffffffffffffffffffffffffffffffffffffffff16638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156110d357600080fd5b505af11580156110e7573d6000803e3d6000fd5b50506004805473ffffffffffffffffffffffffffffffffffffffff908116600090815260026020526040902080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811692871692831790915582541617905550611156905060058261127d565b5060405173ffffffffffffffffffffffffffffffffffffffff8216907f9f69b6c10f6810213e055b0ba6bc0a4e2603f73c221aad77ea35da819cda7dc390600090a250565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260601b60148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f091505073ffffffffffffffffffffffffffffffffffffffff8116611278576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f455243313136373a20637265617465206661696c6564000000000000000000006044820152606401610456565b919050565b600061129f8373ffffffffffffffffffffffffffffffffffffffff84166114e5565b9392505050565b60035473ffffffffffffffffffffffffffffffffffffffff90811660009081526002602052604090205416610a5457610a5461105e565b600061129f8373ffffffffffffffffffffffffffffffffffffffff8416611534565b60005460ff1661136b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610456565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff161561144d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610456565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586113b63390565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600183016020526040812054151561129f565b6000610584825490565b600061129f8383611627565b600081815260018301602052604081205461152c57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610584565b506000610584565b6000818152600183016020526040812054801561161d576000611558600183611824565b855490915060009061156c90600190611824565b90508181146115d157600086600001828154811061158c5761158c61183b565b90600052602060002001549050808760000184815481106115af576115af61183b565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806115e2576115e261186a565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610584565b6000915050610584565b600082600001828154811061163e5761163e61183b565b9060005260206000200154905092915050565b6000806040838503121561166457600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff8116811461127857600080fd5b6000806000606084860312156116ac57600080fd5b6116b584611673565b92506116c360208501611673565b91506116d160408501611673565b90509250925092565b6000602082840312156116ec57600080fd5b61129f82611673565b60006020828403121561170757600080fd5b5035919050565b60006020828403121561172057600080fd5b8151801515811461129f57600080fd5b600060208083528351808285015260005b8181101561175d57858101830151858201604001528201611741565b8181111561176f576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b6000602082840312156117b557600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561181d5761181d6117bc565b5060010190565b600082821015611836576118366117bc565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220f1e9c81b8c3af2491c907ee66cf24e1bb76111b821db02df8f98dbb48b5ab5fa64736f6c634300080a0033608060405234801561001057600080fd5b50610e58806100206000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c806354fd4d5011610081578063c45a01551161005b578063c45a0155146101a4578063c75b5a71146101ca578063d1660f99146101dd57600080fd5b806354fd4d501461014f5780638129fc1c14610157578063c12c21c01461015f57600080fd5b80631afbb7a4116100b25780631afbb7a41461011d5780631cff79cd146101265780633dc54b401461014657600080fd5b806316128211146100d957806317d11a15146100ee57806319a160391461010a575b600080fd5b6100ec6100e7366004610b42565b6101f0565b005b6100f760035481565b6040519081526020015b60405180910390f35b6100ec610118366004610b8d565b61024c565b6100f760025481565b610139610134366004610bef565b6102c9565b6040516101019190610d49565b6100f760045481565b6100f7600181565b6100ec610344565b60015461017f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610101565b60005461017f9062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b6100ec6101d8366004610d5c565b610494565b6100ec6101eb366004610d8f565b61053d565b60015473ffffffffffffffffffffffffffffffffffffffff163314610241576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600291909155600355565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1633146102a3576040517fb126b84800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102c573ffffffffffffffffffffffffffffffffffffffff83168260006105b4565b5050565b60015460609073ffffffffffffffffffffffffffffffffffffffff16331461031d576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033d73ffffffffffffffffffffffffffffffffffffffff8416836107b4565b9392505050565b600054610100900460ff1661035f5760005460ff1615610363565b303b155b6103f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600054610100900460ff1615801561043357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000166101011790555b600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16336201000002179055801561049157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b50565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1633146104eb576040517fb126b84800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff949094169390931790925560025560035543600455565b60015473ffffffffffffffffffffffffffffffffffffffff16331461058e576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105af73ffffffffffffffffffffffffffffffffffffffff841683836107f6565b505050565b80158061065457506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015284169063dd62ed3e90604401602060405180830381865afa15801561062e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106529190610dcb565b155b6106e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e63650000000000000000000060648201526084016103eb565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526105af9084907f095ea7b300000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261084c565b606061033d83836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250610958565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526105af9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401610732565b60006108ae826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166109589092919063ffffffff16565b8051909150156105af57808060200190518101906108cc9190610de4565b6105af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016103eb565b6060610967848460008561096f565b949350505050565b606082471015610a01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016103eb565b843b610a69576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016103eb565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051610a929190610e06565b60006040518083038185875af1925050503d8060008114610acf576040519150601f19603f3d011682016040523d82523d6000602084013e610ad4565b606091505b5091509150610ae4828286610aef565b979650505050505050565b60608315610afe57508161033d565b825115610b0e5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103eb9190610d49565b60008060408385031215610b5557600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff81168114610b8857600080fd5b919050565b60008060408385031215610ba057600080fd5b610ba983610b64565b9150610bb760208401610b64565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215610c0257600080fd5b610c0b83610b64565b9150602083013567ffffffffffffffff80821115610c2857600080fd5b818501915085601f830112610c3c57600080fd5b813581811115610c4e57610c4e610bc0565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715610c9457610c94610bc0565b81604052828152886020848701011115610cad57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b83811015610cea578181015183820152602001610cd2565b83811115610cf9576000848401525b50505050565b60008151808452610d17816020860160208601610ccf565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061033d6020830184610cff565b600080600060608486031215610d7157600080fd5b610d7a84610b64565b95602085013595506040909401359392505050565b600080600060608486031215610da457600080fd5b610dad84610b64565b9250610dbb60208501610b64565b9150604084013590509250925092565b600060208284031215610ddd57600080fd5b5051919050565b600060208284031215610df657600080fd5b8151801515811461033d57600080fd5b60008251610e18818460208701610ccf565b919091019291505056fea2646970667358221220448e7046078cd668c09328d857e534e2aab6cdc0e691d3d4f2c8baae8e084b1364736f6c634300080a003360c06040523480156200001157600080fd5b506040516200162738038062001627833981016040819052620000349162000177565b60408051808201909152600281526105a360f41b60208201526001600160a01b038216620000805760405162461bcd60e51b8152600401620000779190620001a9565b60405180910390fd5b50806001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e6919062000177565b6001600160a01b03166080816001600160a01b031681525050806001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200013e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000164919062000177565b6001600160a01b031660a0525062000201565b6000602082840312156200018a57600080fd5b81516001600160a01b0381168114620001a257600080fd5b9392505050565b600060208083528351808285015260005b81811015620001d857858101830151858201604001528201620001ba565b81811115620001eb576000604083870101525b50601f01601f1916929092016040019392505050565b60805160a0516113c2620002656000396000818161021f0152818161036401526106d501526000818160af0152818161012a015281816104420152818161056e015281816107b301528181610aa601528181610b890152610c6701526113c26000f3fe60806040526004361061005e5760003560e01c80635869dba8116100435780635869dba814610199578063deecfbc9146101bb578063e79a4089146101ce57600080fd5b80634f0e0ef31461011857806354fd4d501461017657600080fd5b366101135760408051808201909152600381527f574732000000000000000000000000000000000000000000000000000000000060208201523373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b60405180910390fd5b50005b600080fd5b34801561012457600080fd5b5061014c7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561018257600080fd5b5061018b600181565b60405190815260200161016d565b3480156101a557600080fd5b506101b96101b4366004611263565b6101ee565b005b6101b96101c936600461128f565b61031d565b3480156101da57600080fd5b506101b96101e93660046112e1565b61068e565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201819052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa15801561027b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061029f9190611318565b6040518060400160405280600281526020017f43500000000000000000000000000000000000000000000000000000000000008152509061030d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b506103188383610a77565b505050565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808516600483015284917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa1580156103ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103d19190611318565b6040518060400160405280600281526020017f52500000000000000000000000000000000000000000000000000000000000008152509061043f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e6919061133a565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600381526020017f57473100000000000000000000000000000000000000000000000000000000008152509061056b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156105d457600080fd5b505af11580156105e8573d6000803e3d6000fd5b50505050506105f78434610b3c565b6040517f9aa5d46200000000000000000000000000000000000000000000000000000000815234600482015273ffffffffffffffffffffffffffffffffffffffff848116602483015261ffff84166044830152851690639aa5d46290606401600060405180830381600087803b15801561067057600080fd5b505af1158015610684573d6000803e3d6000fd5b5050505050505050565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808516600483015284917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa15801561071e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107429190611318565b6040518060400160405280600281526020017f5250000000000000000000000000000000000000000000000000000000000000815250906107b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610833573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610857919061133a565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600381526020017f5747310000000000000000000000000000000000000000000000000000000000815250906108dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b506109703330858773ffffffffffffffffffffffffffffffffffffffff166336dda7d56040518163ffffffff1660e01b8152600401602060405180830381865afa15801561092e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610952919061133a565b73ffffffffffffffffffffffffffffffffffffffff16929190610cd4565b6040517f05fe138b0000000000000000000000000000000000000000000000000000000081526004810184905230602482015260009073ffffffffffffffffffffffffffffffffffffffff8616906305fe138b906044016020604051808303816000875af11580156109e6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0a9190611357565b9050610a168382610a77565b8273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f6de63bb986f2779478e384365c03cc2e62f06b453856acca87d5a519ce02664960405160405180910390a35050505050565b6040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632e1a7d4d90602401600060405180830381600087803b158015610aff57600080fd5b505af1158015610b13573d6000803e3d6000fd5b50610b389250505073ffffffffffffffffffffffffffffffffffffffff831682610d6f565b5050565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015282917f00000000000000000000000000000000000000000000000000000000000000009091169063dd62ed3e90604401602060405180830381865afa158015610bd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf69190611357565b1015610b38576040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303816000875af1158015610cb0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103189190611318565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052610d69908590610ec9565b50505050565b80471015610dd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610107565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114610e33576040519150601f19603f3d011682016040523d82523d6000602084013e610e38565b606091505b5050905080610318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610107565b6000610f2b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16610fd59092919063ffffffff16565b8051909150156103185780806020019051810190610f499190611318565b610318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610107565b6060610fe48484600085610fee565b90505b9392505050565b606082471015611080576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610107565b843b6110e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610107565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516111119190611370565b60006040518083038185875af1925050503d806000811461114e576040519150601f19603f3d011682016040523d82523d6000602084013e611153565b606091505b509150915061116382828661116e565b979650505050505050565b6060831561117d575081610fe7565b82511561118d5782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b60005b838110156111dc5781810151838201526020016111c4565b83811115610d695750506000910152565b602081526000825180602084015261120c8160408501602087016111c1565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461126057600080fd5b50565b6000806040838503121561127657600080fd5b82356112818161123e565b946020939093013593505050565b6000806000606084860312156112a457600080fd5b83356112af8161123e565b925060208401356112bf8161123e565b9150604084013561ffff811681146112d657600080fd5b809150509250925092565b6000806000606084860312156112f657600080fd5b83356113018161123e565b92506020840135915060408401356112d68161123e565b60006020828403121561132a57600080fd5b81518015158114610fe757600080fd5b60006020828403121561134c57600080fd5b8151610fe78161123e565b60006020828403121561136957600080fd5b5051919050565b600082516113828184602087016111c1565b919091019291505056fea264697066735822122017fd7fc76e4a1efcf24b78a3417fad7ab9576f0a23aa756ddb211c5e2227aa9564736f6c634300080a003360806040523480156200001157600080fd5b5060405162002b8038038062002b80833981016040819052620000349162000122565b6001600160a01b0381166200008f5760405162461bcd60e51b815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640160405180910390fd5b6001600160a01b03811660008181526001602052604080822080546001600160601b0319166b204fce5e3e2502611000000090811790915590517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91620000f99190815260200190565b60405180910390a350600680546001600160a81b031916336101000260ff191617905562000154565b6000602082840312156200013557600080fd5b81516001600160a01b03811681146200014d57600080fd5b9392505050565b612a1c80620001646000396000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c806370a08231116100f9578063b4b5ea5711610097578063dd62ed3e11610071578063dd62ed3e14610503578063e7a324dc14610555578063f1127ed81461057c578063f2fde38b146105ee57600080fd5b8063b4b5ea57146104ca578063c3cda520146104dd578063d505accf146104f057600080fd5b806395d89b41116100d357806395d89b411461045b5780639742ca4614610497578063a9059cbb146104aa578063b0660c3d146104bd57600080fd5b806370a08231146103c7578063782d6fe11461040b5780637ecebe001461043b57600080fd5b806330adf81f11610166578063481c6a7511610140578063481c6a751461031e578063587cde1e146103435780635c19a95c146103795780636fcfff451461038c57600080fd5b806330adf81f14610298578063313ce567146102bf578063349dc329146102d957600080fd5b806320606b701161019757806320606b70146102545780632185810b1461027b57806323b872dd1461028557600080fd5b806306fdde03146101be578063095ea7b31461021057806318160ddd14610233575b600080fd5b6101fa6040518060400160405280600781526020017f47656172626f780000000000000000000000000000000000000000000000000081525081565b60405161020791906124a3565b60405180910390f35b61022361021e36600461253f565b610601565b6040519015158152602001610207565b6102466b204fce5e3e2502611000000081565b604051908152602001610207565b6102467f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b61028361070d565b005b610223610293366004612569565b6107ee565b6102467f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b6102c7601281565b60405160ff9091168152602001610207565b6007546102f99073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610207565b6006546102f990610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6102f96103513660046125a5565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6102836103873660046125a5565b61098a565b6103b261039a3660046125a5565b60046020526000908152604090205463ffffffff1681565b60405163ffffffff9091168152602001610207565b6102466103d53660046125a5565b73ffffffffffffffffffffffffffffffffffffffff166000908152600160205260409020546bffffffffffffffffffffffff1690565b61041e61041936600461253f565b610997565b6040516bffffffffffffffffffffffff9091168152602001610207565b6102466104493660046125a5565b60056020526000908152604090205481565b6101fa6040518060400160405280600481526020017f474541520000000000000000000000000000000000000000000000000000000081525081565b6102836104a53660046125a5565b610cae565b6102236104b836600461253f565b610e20565b6006546102239060ff1681565b61041e6104d83660046125a5565b610e5c565b6102836104eb3660046125d1565b610efa565b6102836104fe366004612629565b611310565b610246610511366004612693565b73ffffffffffffffffffffffffffffffffffffffff9182166000908152602081815260408083209390941682529190915220546bffffffffffffffffffffffff1690565b6102467fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b6105c561058a3660046126c6565b600360209081526000928352604080842090915290825290205463ffffffff81169064010000000090046bffffffffffffffffffffffff1682565b6040805163ffffffff90931683526bffffffffffffffffffffffff909116602083015201610207565b6102836105fc3660046125a5565b61187a565b6000807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83141561063f57506bffffffffffffffffffffffff610664565b6106618360405180606001604052806025815260200161285260259139611a15565b90505b3360008181526020818152604080832073ffffffffffffffffffffffffffffffffffffffff89168085529083529281902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff871690811790915590519081529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a360019150505b92915050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314610798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e616765720060448201526064015b60405180910390fd5b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f795b0e16c8da9807b0a215f3749bd6dbcc49fc0472183f4e446abb7dcbd9d00790600090a1565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081815260408083203380855290835281842054825160608101909352602580845291936bffffffffffffffffffffffff909116928592610856928892919061285290830139611a15565b90508673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156108a257506bffffffffffffffffffffffff82811614155b156109725760006108cc83836040518060600160405280603d8152602001612974603d9139611a67565b73ffffffffffffffffffffffffffffffffffffffff898116600081815260208181526040808320948a168084529482529182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff87169081179091559151918252939450919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505b61097d878783611ad5565b5060019695505050505050565b6109943382611e9c565b50565b6000438210610a28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f476561723a3a6765745072696f72566f7465733a206e6f74207965742064657460448201527f65726d696e656400000000000000000000000000000000000000000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff831660009081526004602052604090205463ffffffff1680610a63576000915050610707565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604081208491610a95600185612735565b63ffffffff90811682526020820192909252604001600020541611610b1b5773ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812090610ae5600184612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff1691506107079050565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020908152604080832083805290915290205463ffffffff16831015610b63576000915050610707565b600080610b71600184612735565b90505b8163ffffffff168163ffffffff161115610c565760006002610b968484612735565b610ba0919061275a565b610baa9083612735565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260036020908152604080832063ffffffff8581168552908352928190208151808301909252549283168082526401000000009093046bffffffffffffffffffffffff1691810191909152919250871415610c2a576020015194506107079350505050565b805163ffffffff16871115610c4157819350610c4f565b610c4c600183612735565b92505b5050610b74565b5073ffffffffffffffffffffffffffffffffffffffff8516600090815260036020908152604080832063ffffffff909416835292905220546bffffffffffffffffffffffff6401000000009091041691505092915050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314610d34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e6167657200604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff8116610db1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640161078f565b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f2f834d1c8c4b956018fff5faca4d99868ae635487424d9c265c257ccbc698c6a90600090a250565b600080610e45836040518060600160405280602681526020016128a760269139611a15565b9050610e52338583611ad5565b5060019392505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526004602052604081205463ffffffff1680610e94576000610ef3565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812090610ec5600184612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b9392505050565b604080518082018252600781527f47656172626f780000000000000000000000000000000000000000000000000060209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f028ef9f797075f74ac647c65fde04fb0f128c2d59fd40f45732269917642fd4681840152466060820152306080808301919091528351808303909101815260a0820184528051908301207fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60c083015273ffffffffffffffffffffffffffffffffffffffff8a1660e08301526101008201899052610120808301899052845180840390910181526101408301909452835193909201929092207f19010000000000000000000000000000000000000000000000000000000000006101608401526101628301829052610182830181905290916000906101a201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa1580156110d8573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166111a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f476561723a3a64656c656761746542795369673a20696e76616c69642073696760448201527f6e61747572650000000000000000000000000000000000000000000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff811660009081526005602052604081208054916111d7836127a4565b919050558914611269576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f476561723a3a64656c656761746542795369673a20696e76616c6964206e6f6e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161078f565b874211156112f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f476561723a3a64656c656761746542795369673a207369676e6174757265206560448201527f7870697265640000000000000000000000000000000000000000000000000000606482015260840161078f565b611303818b611e9c565b505050505b505050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86141561134d57506bffffffffffffffffffffffff611372565b61136f8660405180606001604052806024815260200161291c60249139611a15565b90505b604080518082018252600781527f47656172626f780000000000000000000000000000000000000000000000000060209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f028ef9f797075f74ac647c65fde04fb0f128c2d59fd40f45732269917642fd4681840152466060820152306080808301919091528351808303909101815260a0909101835280519082012073ffffffffffffffffffffffffffffffffffffffff8b166000908152600590925291812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918c918c918c919086611472836127a4565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810188905260e001604051602081830303815290604052805190602001209050600082826040516020016115199291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff8b169284019290925260608301899052608083018890529092509060019060a0016020604051602081039080840390855afa1580156115a2573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661164a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a7065726d69743a20696e76616c6964207369676e617475726500604482015260640161078f565b8b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146116df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f476561723a3a7065726d69743a20756e617574686f72697a6564000000000000604482015260640161078f565b88421115611749576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a7065726d69743a207369676e6174757265206578706972656400604482015260640161078f565b846000808e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508a73ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258760405161186491906bffffffffffffffffffffffff91909116815260200190565b60405180910390a3505050505050505050505050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314611900576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e6167657200604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff811661197d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640161078f565b60065460405173ffffffffffffffffffffffffffffffffffffffff80841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36006805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b6000816c010000000000000000000000008410611a5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b509192915050565b6000836bffffffffffffffffffffffff16836bffffffffffffffffffffffff1611158290611ac2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b50611acd83856127dd565b949350505050565b60065460ff1680611b025750600654610100900473ffffffffffffffffffffffffffffffffffffffff1633145b80611b24575060075473ffffffffffffffffffffffffffffffffffffffff1633145b611b8a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f476561723a3a7472616e73666572732061726520666f7262696464656e000000604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff8316611c2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603c60248201527f476561723a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260448201527f616e736665722066726f6d20746865207a65726f206164647265737300000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff8216611cd0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f476561723a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260448201527f616e7366657220746f20746865207a65726f2061646472657373000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260016020908152604091829020548251606081019093526036808452611d2d936bffffffffffffffffffffffff90921692859291906129b190830139611a67565b73ffffffffffffffffffffffffffffffffffffffff848116600090815260016020908152604080832080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff968716179055928616825290829020548251606081019093526030808452611dbf949190911692859290919061287790830139611f50565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260409182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff968716179055905193851684529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a373ffffffffffffffffffffffffffffffffffffffff808416600090815260026020526040808220548584168352912054611e9792918216911683611fc1565b505050565b73ffffffffffffffffffffffffffffffffffffffff808316600081815260026020818152604080842080546001845282862054949093528787167fffffffffffffffffffffffff000000000000000000000000000000000000000084168117909155905191909516946bffffffffffffffffffffffff9092169391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4611f4a828483611fc1565b50505050565b600080611f5d8486612802565b9050846bffffffffffffffffffffffff16816bffffffffffffffffffffffff1610158390611fb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b50949350505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561200b57506000816bffffffffffffffffffffffff16115b15611e975773ffffffffffffffffffffffffffffffffffffffff8316156120fd5773ffffffffffffffffffffffffffffffffffffffff831660009081526004602052604081205463ffffffff1690816120655760006120c4565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812090612096600185612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b905060006120eb82856040518060600160405280602881526020016128cd60289139611a67565b90506120f9868484846121e2565b5050505b73ffffffffffffffffffffffffffffffffffffffff821615611e975773ffffffffffffffffffffffffffffffffffffffff821660009081526004602052604081205463ffffffff1690816121525760006121b1565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812090612183600185612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b905060006121d882856040518060600160405280602781526020016128f560279139611f50565b9050611308858484845b60006122064360405180606001604052806034815260200161294060349139612465565b905060008463ffffffff1611801561226d575073ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812063ffffffff831691612251600188612735565b63ffffffff908116825260208201929092526040016000205416145b156123035773ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812083916122a4600188612735565b63ffffffff168152602081019190915260400160002080546bffffffffffffffffffffffff92909216640100000000027fffffffffffffffffffffffffffffffff000000000000000000000000ffffffff9092169190911790556123fe565b60408051808201825263ffffffff80841682526bffffffffffffffffffffffff808616602080850191825273ffffffffffffffffffffffffffffffffffffffff8b166000908152600382528681208b8616825290915294909420925183549451909116640100000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009094169116179190911790556123a5846001612832565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260046020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff929092169190911790555b604080516bffffffffffffffffffffffff80861682528416602082015273ffffffffffffffffffffffffffffffffffffffff8716917fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724910160405180910390a25050505050565b6000816401000000008410611a5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91905b600060208083528351808285015260005b818110156124d0578581018301518582016040015282016124b4565b818111156124e2576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461253a57600080fd5b919050565b6000806040838503121561255257600080fd5b61255b83612516565b946020939093013593505050565b60008060006060848603121561257e57600080fd5b61258784612516565b925061259560208501612516565b9150604084013590509250925092565b6000602082840312156125b757600080fd5b610ef382612516565b803560ff8116811461253a57600080fd5b60008060008060008060c087890312156125ea57600080fd5b6125f387612516565b9550602087013594506040870135935061260f606088016125c0565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a03121561264457600080fd5b61264d88612516565b965061265b60208901612516565b95506040880135945060608801359350612677608089016125c0565b925060a0880135915060c0880135905092959891949750929550565b600080604083850312156126a657600080fd5b6126af83612516565b91506126bd60208401612516565b90509250929050565b600080604083850312156126d957600080fd5b6126e283612516565b9150602083013563ffffffff811681146126fb57600080fd5b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600063ffffffff8381169083168181101561275257612752612706565b039392505050565b600063ffffffff80841680612798577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156127d6576127d6612706565b5060010190565b60006bffffffffffffffffffffffff8381169083168181101561275257612752612706565b60006bffffffffffffffffffffffff80831681851680830382111561282957612829612706565b01949350505050565b600063ffffffff8083168185168083038211156128295761282961270656fe476561723a3a617070726f76653a20616d6f756e7420657863656564732039362062697473476561723a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e74206f766572666c6f7773476561723a3a7472616e736665723a20616d6f756e7420657863656564732039362062697473476561723a3a5f6d6f7665566f7465733a20766f746520616d6f756e7420756e646572666c6f7773476561723a3a5f6d6f7665566f7465733a20766f746520616d6f756e74206f766572666c6f7773476561723a3a7065726d69743a20616d6f756e7420657863656564732039362062697473476561723a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d62657220657863656564732033322062697473476561723a3a7472616e7366657246726f6d3a207472616e7366657220616d6f756e742065786365656473207370656e64657220616c6c6f77616e6365476561723a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e7420657863656564732062616c616e6365a26469706673582212201b84fd7789a35c022f692420863210a30e82d2405659f5a28275d433fa53467f64736f6c634300080a003360806040526016805460ff1916905534801561001a57600080fd5b506040516110a73803806110a7833981016040819052610039916100b6565b600080546001600160a01b038085166001600160a01b0319928316179092556003805492841692909116919091179055610080600a6b033b2e3c9fd0803ce80000006100e9565b60075550506b033b2e3c9fd0803ce800000060155561010b565b80516001600160a01b03811681146100b157600080fd5b919050565b600080604083850312156100c957600080fd5b6100d28361009a565b91506100e06020840161009a565b90509250929050565b60008261010657634e487b7160e01b600052601260045260246000fd5b500490565b610f8d8061011a6000396000f3fe608060405234801561001057600080fd5b50600436106102e95760003560e01c806367c99d5811610191578063c5f956af116100e3578063dbcb313b11610097578063f11a648711610071578063f11a648714610320578063f3fdb15a146105f1578063fe14112d1461061157600080fd5b8063dbcb313b146105d6578063e941fa78146105df578063ef8d9603146105e857600080fd5b8063cb3905e1116100c8578063cb3905e1146105c4578063cf33d95514610320578063d0efe753146105cd57600080fd5b8063c5f956af14610588578063ca9505e4146105a857600080fd5b80639aa5d46211610145578063b6ac642a1161011f578063b6ac642a14610567578063bb04b19314610567578063bf28068b1461057557600080fd5b80639aa5d46214610544578063a4e8273e14610557578063b3554a0a1461055e57600080fd5b8063788c6bfe11610176578063788c6bfe146104ef5780638456cb591461050157806396df5dc01461053157600080fd5b806367c99d58146104de57806374375359146104e757600080fd5b806336dda7d51161024a5780634d778ad1116101fe57806354fd4d50116101d857806354fd4d50146104c05780635c975abb146104c8578063609ae317146104d557600080fd5b80634d778ad114610491578063532fe502146104a45780635427c938146104ad57600080fd5b80633f4ba83a1161022f5780633f4ba83a1461045257806345d31f9d1461047f5780634c19386c1461048857600080fd5b806336dda7d51461040f5780633e163df01461042f57600080fd5b80632495a599116102a157806329f3d3b61161028657806329f3d3b6146103b35780632a3354c9146103bc5780632e97ca21146103dc57600080fd5b80632495a599146103735780632954018c1461039357600080fd5b8063078c4781116102d2578063078c4781146103205780630fce70fb146103335780631e16e4fc1461033b57600080fd5b8063030dbb04146102ee57806305fe138b1461030a575b600080fd5b6102f760105481565b6040519081526020015b60405180910390f35b6102f7610318366004610ce8565b600092915050565b61033161032e366004610d14565b50565b005b6015546102f7565b61034e610349366004610d2f565b610618565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610301565b60035461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b60005461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6102f760095481565b600a5461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103ff6103ea366004610d14565b60066020526000908152604090205460ff1681565b6040519015158152602001610301565b60055461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103ff61043d366004610d14565b60146020526000908152604090205460ff1681565b610331601680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b6102f760075481565b6102f760015481565b6102f761049f366004610d2f565b61064f565b6102f760115481565b6102f76104bb366004610d2f565b61066d565b6102f7600181565b6016546103ff9060ff1681565b6102f760085481565b6102f7600d5481565b6102f7610685565b6b033b2e3c9fd0803ce80000006102f7565b610331601680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b61033161053f366004610d2f565b601555565b610331610552366004610d48565b505050565b60016102f7565b6102f7600e5481565b61033161032e366004610d2f565b610331610583366004610ce8565b61071d565b60135461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103316105b6366004610d7d565b600b92909255600c55600d55565b6102f7600c5481565b6102f7600b5481565b6102f760155481565b6102f7600f5481565b6102f760025481565b60125461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b60006102f7565b6004818154811061062857600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6000610667826b033b2e3c9fd0803ce800000061077a565b92915050565b6000610667826b033b2e3c9fd0803ce80000006108e9565b6003546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156106f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107189190610da9565b905090565b6009829055600a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691909117909155600354610776911682846109fe565b5050565b60408051808201909152600281527f4d330000000000000000000000000000000000000000000000000000000000006020820152600090826107f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b60405180910390fd5b506000610800600284610e72565b90506b033b2e3c9fd0803ce8000000610839827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610ead565b6108439190610e72565b8411156040518060400160405280600281526020017f4d31000000000000000000000000000000000000000000000000000000000000815250906108b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b5082816108cd6b033b2e3c9fd0803ce800000087610ec4565b6108d79190610f01565b6108e19190610e72565b949350505050565b60008215806108f6575081155b1561090357506000610667565b8161091b60026b033b2e3c9fd0803ce8000000610e72565b610945907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610ead565b61094f9190610e72565b8311156040518060400160405280600281526020017f4d31000000000000000000000000000000000000000000000000000000000000815250906109c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b506b033b2e3c9fd0803ce80000006109d9600282610e72565b6109e38486610ec4565b6109ed9190610f01565b6109f79190610e72565b9392505050565b6040805173ffffffffffffffffffffffffffffffffffffffff848116602483015260448083018590528351808403909101815260649092018352602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65649084015261055292869291600091610ac9918516908490610b73565b8051909150156105525780806020019051810190610ae79190610f19565b610552576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016107e9565b60606108e1848460008585843b610be6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107e9565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051610c0f9190610f3b565b60006040518083038185875af1925050503d8060008114610c4c576040519150601f19603f3d011682016040523d82523d6000602084013e610c51565b606091505b5091509150610c61828286610c6c565b979650505050505050565b60608315610c7b5750816109f7565b825115610c8b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ce357600080fd5b919050565b60008060408385031215610cfb57600080fd5b82359150610d0b60208401610cbf565b90509250929050565b600060208284031215610d2657600080fd5b6109f782610cbf565b600060208284031215610d4157600080fd5b5035919050565b600080600060608486031215610d5d57600080fd5b83359250610d6d60208501610cbf565b9150604084013590509250925092565b600080600060608486031215610d9257600080fd5b505081359360208301359350604090920135919050565b600060208284031215610dbb57600080fd5b5051919050565b60005b83811015610ddd578181015183820152602001610dc5565b83811115610dec576000848401525b50505050565b6020815260008251806020840152610e11816040850160208701610dc2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082610ea8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600082821015610ebf57610ebf610e43565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610efc57610efc610e43565b500290565b60008219821115610f1457610f14610e43565b500190565b600060208284031215610f2b57600080fd5b815180151581146109f757600080fd5b60008251610f4d818460208701610dc2565b919091019291505056fea26469706673582212204edb887d94928b3914f60ab48df0182da9eb30ddbb7021b164cc728b60a655d564736f6c634300080a003360e06040523480156200001157600080fd5b5060405162013af238038062013af2833981016040819052620000349162000630565b826001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000073573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000999190620007bf565b620000a433620004ab565b6001600160a01b038116608081905260408051630873769560e01b815290516308737695916004808201926020929091908290030181865afa158015620000ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001159190620007bf565b6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000153573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001799190620007bf565b6001600160a01b0390811660a052841660c0525060405183906200019d9062000519565b6001600160a01b039091168152602001604051809103906000f080158015620001ca573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b0392909216918217905560608301516080840151604051620002029062000527565b6001600160a01b03938416815292909116602083015215156040820152606001604051809103906000f0801580156200023f573d6000803e3d6000fd5b50600280546001600160a01b0319166001600160a01b0392909216919091179055604051600090620002746020820162000535565b601f1982820381018352601f909101166040819052600154600254620002b0926001600160a01b039283169291909116908790602001620007e6565b60408051601f1981840301815290829052620002d09291602001620008e8565b60408051601f19818403018152919052905060006200035982848151602092830120604080517fff00000000000000000000000000000000000000000000000000000000000000818601523060601b6001600160601b03191660218201526035810193909352605580840192909252805180840390920182526075909201909152805191012090565b600154604051634fafc35760e11b81526001600160a01b038084166004830152929350911690639f5f86ae90602401600060405180830381600087803b158015620003a357600080fd5b505af1158015620003b8573d6000803e3d6000fd5b50505050620003ce8284620004fb60201b60201c565b600380546001600160a01b0319166001600160a01b0383811691821790925560015460408051630304b08760e61b81529051919093169263c12c21c09160048083019260209291908290030181865afa15801562000430573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004569190620007bf565b6001600160a01b031614620004a05760405162461bcd60e51b815260206004820152600c60248201526b496e636f727265637420434d60a01b604482015260640160405180910390fd5b505050505062000909565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008183516020850134f59050803b6200051457600080fd5b505050565b6158e8806200243683390190565b615e978062007d1e83390190565b615f3d806200dbb583390190565b6001600160a01b03811681146200055957600080fd5b50565b8051620005698162000543565b919050565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b0381118282101715620005a957620005a96200056e565b60405290565b604080519081016001600160401b0381118282101715620005a957620005a96200056e565b604051601f8201601f191681016001600160401b0381118282101715620005ff57620005ff6200056e565b604052919050565b80516001600160801b03811681146200056957600080fd5b805180151581146200056957600080fd5b6000806000606084860312156200064657600080fd5b8351620006538162000543565b602085810151919450906001600160401b03808211156200067357600080fd5b9086019060a082890312156200068857600080fd5b6200069262000584565b6200069d8362000607565b8152620006ac84840162000607565b8482015260408084015183811115620006c457600080fd5b8401601f81018b13620006d657600080fd5b805184811115620006eb57620006eb6200056e565b620006fb878260051b01620005d4565b818152878101955060069190911b82018701908c8211156200071c57600080fd5b918701915b818310156200077e5783838e0312156200073b5760008081fd5b62000745620005af565b8351620007528162000543565b81528389015161ffff811681146200076a5760008081fd5b818a01528652948701949183019162000721565b8484015250620007939050606085016200055c565b6060830152620007a6608085016200061f565b6080830152979097015195989697509495945050505050565b600060208284031215620007d257600080fd5b8151620007df8162000543565b9392505050565b600060018060a01b0380861683526020818616818501526040606081860152610100850160018060801b038088511660608801528084890151166080880152508187015160a080880152818151808452610120890191508583019350600092505b808310156200087857835180518816835286015161ffff168683015292850192600192909201919084019062000847565b5060608901516001600160a01b031660c0890152608090980151151560e0909701969096525094979650505050505050565b6000815160005b81811015620008cd5760208185018101518683015201620008b1565b81811115620008dd576000828601525b509290920192915050565b600062000901620008fa8386620008aa565b84620008aa565b949350505050565b60805160a05160c051611ad3620009636000396000818161010a0152610ea00152600081816103790152610b170152600081816101680152818161068c01528181610a4d01528181610b860152610c190152611ad36000f3fe6080604052600436106100f35760003560e01c80638da5cb5b1161008a578063ebf0c71711610059578063ebf0c71714610367578063f2fde38b1461039b578063f4747c58146103bb578063f9aa028a146103db57600080fd5b80638da5cb5b1461025a57806394ca2cb5146102855780639c4ae2d014610327578063c12c21c01461033a57600080fd5b80633e0b1a23116100c65780633e0b1a23146101ce5780634ef501ac146101e3578063715018a614610230578063805abe6a1461024557600080fd5b806316f0115b146100f85780632954018c146101565780632f7a18811461018a578063318d0d10146101b7575b600080fd5b34801561010457600080fd5b5061012c7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561016257600080fd5b5061012c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561019657600080fd5b5060025461012c9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156101c357600080fd5b506101cc610408565b005b3480156101da57600080fd5b506101cc610498565b3480156101ef57600080fd5b506102036101fe366004611726565b610521565b6040805173ffffffffffffffffffffffffffffffffffffffff93841681529290911660208301520161014d565b34801561023c57600080fd5b506101cc610567565b34801561025157600080fd5b506101cc6105f2565b34801561026657600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff1661012c565b34801561029157600080fd5b5061012c6102a03660046117e6565b8151602092830120604080517fff00000000000000000000000000000000000000000000000000000000000000818601523060601b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660218201526035810193909352605580840192909252805180840390920182526075909201909152805191012090565b6101cc6103353660046117e6565b6107d8565b34801561034657600080fd5b5060015461012c9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561037357600080fd5b5061012c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103a757600080fd5b506101cc6103b63660046118c0565b6107f5565b3480156103c757600080fd5b506101cc6103d63660046118e4565b610925565b3480156103e757600080fd5b5060035461012c9073ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff16331461048e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b610496610a49565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610519576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b61048e610b82565b6004818154811061053157600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff91821692501682565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b61049660006116b1565b60005473ffffffffffffffffffffffffffffffffffffffff163314610673576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b3073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106f5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071991906119c4565b73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610763573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078791906119c4565b73ffffffffffffffffffffffffffffffffffffffff1614156107d5576040517fbdebb83f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33ff5b60008183516020850134f59050803b6107f057600080fd5b505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b73ffffffffffffffffffffffffffffffffffffffff8116610919576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610485565b610922816116b1565b50565b60005473ffffffffffffffffffffffffffffffffffffffff1633146109a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b805160005b818110156107f05760048382815181106109c7576109c76119e1565b602090810291909101810151825460018082018555600094855293839020825160029092020180547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff938416178255929093015192840180549092169216919091179055016109ab565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ab6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ada91906119c4565b6040517ff2fde38b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301529192509082169063f2fde38b90602401600060405180830381600087803b158015610b6757600080fd5b505af1158015610b7b573d6000803e3d6000fd5b5050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1391906119c4565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca691906119c4565b60045490915060005b81811015610dd4576003546004805473ffffffffffffffffffffffffffffffffffffffff90921691637bccacee919084908110610cee57610cee6119e1565b906000526020600020906002020160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660048481548110610d3357610d336119e1565b600091825260209091206002909102015460405160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b158015610db157600080fd5b505af1158015610dc5573d6000803e3d6000fd5b50505050806001019050610caf565b506001546040517fe26b2f6300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529084169063e26b2f6390602401600060405180830381600087803b158015610e4257600080fd5b505af1158015610e56573d6000803e3d6000fd5b50506001546040517fcf33d95500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201527f0000000000000000000000000000000000000000000000000000000000000000909116925063cf33d9559150602401600060405180830381600087803b158015610ee857600080fd5b505af1158015610efc573d6000803e3d6000fd5b50505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f919190611a10565b905060005b818110156116ab576003546040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810183905260009173ffffffffffffffffffffffffffffffffffffffff1690635094cb4f90602401602060405180830381865afa15801561100e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103291906119c4565b6001546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80841660048301529293506000929091169063fdd5764590602401602060405180830381865afa1580156110a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110cc91906119c4565b905060008173ffffffffffffffffffffffffffffffffffffffff1663ce30bbdb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561111b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113f9190611a29565b9050600c81601081111561115557611155611a4a565b14156116225760008273ffffffffffffffffffffffffffffffffffffffff166320b2c1516040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111cc91906119c4565b905060008373ffffffffffffffffffffffffffffffffffffffff1663927188d96040518163ffffffff1660e01b8152600401602060405180830381865afa15801561121b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123f91906119c4565b905060008473ffffffffffffffffffffffffffffffffffffffff166399253ac06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561128e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b291906119c4565b6040517f9dcb511a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152919250908a169063e8a97a3e9083908390639dcb511a90602401602060405180830381865afa15801561132c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135091906119c4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156113bd57600080fd5b505af11580156113d1573d6000803e3d6000fd5b50506040517f9dcb511a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301528c16925063e8a97a3e915085908390639dcb511a90602401602060405180830381865afa15801561144b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061146f91906119c4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156114dc57600080fd5b505af11580156114f0573d6000803e3d6000fd5b50506003546001546040517f7832743800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301529283169450633e7c88d69350879290911690637832743890602401602060405180830381865afa158015611573573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115979190611a79565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015261ffff166024820152604401600060405180830381600087803b15801561160657600080fd5b505af115801561161a573d6000803e3d6000fd5b505050505050505b600d81601081111561163657611636611a4a565b141561169d578173ffffffffffffffffffffffffffffffffffffffff16639b51ecd36040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561168457600080fd5b505af1158015611698573d6000803e3d6000fd5b505050505b836001019350505050610f96565b50505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561173857600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156117915761179161173f565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156117de576117de61173f565b604052919050565b600080604083850312156117f957600080fd5b823567ffffffffffffffff8082111561181157600080fd5b818501915085601f83011261182557600080fd5b81356020828211156118395761183961173f565b611869817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011601611797565b9250818352878183860101111561187f57600080fd5b8181850182850137600091830181019190915290969401359450505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461092257600080fd5b6000602082840312156118d257600080fd5b81356118dd8161189e565b9392505050565b600060208083850312156118f757600080fd5b823567ffffffffffffffff8082111561190f57600080fd5b818501915085601f83011261192357600080fd5b8135818111156119355761193561173f565b611943848260051b01611797565b818152848101925060069190911b83018401908782111561196357600080fd5b928401925b818410156119b957604084890312156119815760008081fd5b61198961176e565b84356119948161189e565b8152848601356119a38161189e565b8187015283526040939093019291840191611968565b979650505050505050565b6000602082840312156119d657600080fd5b81516118dd8161189e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215611a2257600080fd5b5051919050565b600060208284031215611a3b57600080fd5b8151601181106118dd57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060208284031215611a8b57600080fd5b815161ffff811681146118dd57600080fdfea264697066735822122090f5e4310a8b66bfdd7fdfbe64bc5b98570e7c1a415ffb0ced3c857cf6c5b14064736f6c634300080a00336101606040526000805462ff00001916620c00001790553480156200002357600080fd5b50604051620058e8380380620058e8833981016040819052620000469162000537565b806001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000085573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ab919062000537565b6000805460ff191690556001600160a01b038116620000dd57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200011c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000142919062000537565b6001600160a01b03166080816001600160a01b031681525050506000816001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200019d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c3919062000537565b6001600160a01b03831661010081905260e081905260408051632495a59960e01b81529051929350600092632495a599916004808201926020929091908290030181865afa1580156200021a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000240919062000537565b6001600160a01b03811660c05290506200025a8162000472565b816001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000299573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002bf919062000537565b6001600160a01b0316610120816001600160a01b031681525050816001600160a01b03166377532ed96040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000318573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033e919062000537565b6001600160a01b0316610140816001600160a01b031681525050816001600160a01b031663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000397573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003bd919062000537565b6001600001600a6101000a8154816001600160a01b0302191690836001600160a01b03160217905550816001600160a01b0316639068a8686040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000425573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044b919062000537565b6001600160a01b031660a0525050600380546001600160a01b031916331790555062000588565b6001600160a01b03811660009081526006602052604090205415620004aa57604051632e5a5c7760e01b815260040160405180910390fd5b61010060055410620004cf57604051631cbbe18560e01b815260040160405180910390fd5b600580546001600160a01b0383166000818152600660209081526040808320600190951b948590558483526004909152812091909155825491929062000515836200055e565b91905055505050565b6001600160a01b03811681146200053457600080fd5b50565b6000602082840312156200054a57600080fd5b815162000557816200051e565b9392505050565b60006000198214156200058157634e487b7160e01b600052601160045260246000fd5b5060010190565b60805160a05160c05160e051610100516101205161014051615248620006a0600039600081816107e20152818161371001526137c501526000818161052f01526136780152600081816103d301528181610e5701528181610ebb015281816124ff0152818161265a01528181612aa101528181612b8c01528181612c4e01528181612d0d0152613b8f015260006105a401526000818161062701528181610d2201528181610db301528181610e0001528181610e3601528181610f3f0152818161203a01528181612b6b015281816130ee015281816134dc015281816135a90152613fe601526000818161081c01528181610fe101526124c20152600081816107a80152818161118401526122cb01526152486000f3fe608060405234801561001057600080fd5b50600436106103415760003560e01c8063830aa745116101bd578063a70bc542116100f9578063e75538c7116100a2578063f9aa028a1161007c578063f9aa028a1461089d578063fdd57645146108bd578063fe47cde7146108f3578063ff6875431461091357600080fd5b8063e75538c714610864578063e958b70414610877578063f67c5bd01461088a57600080fd5b8063db7ceb80116100d3578063db7ceb8014610817578063dc2b21c11461083e578063e1998cf91461085157600080fd5b8063a70bc542146107ca578063c5e10eef146107dd578063d48bfca71461080457600080fd5b806394cf073a116101665780639f5f86ae116101405780639f5f86ae146107745780639fd12b7714610787578063a366f49614610790578063a50cf2c8146107a357600080fd5b806394cf073a146106f557806395373018146107085780639af1d35a1461071b57600080fd5b80638991b2f1116101975780638991b2f1146106af5780638fe3f93f146106cf578063944ac59f146106e257600080fd5b8063830aa7451461066f5780638345f26e146106825780638456cb59146106a757600080fd5b8063458936f51161028c578063570a7af2116102355780636ce4074a1161020f5780636ce4074a146105ef5780636e98e5e41461060f5780636f307dc314610622578063783274381461064957600080fd5b8063570a7af21461059f5780635c975abb146105c6578063654a9eda146105dc57600080fd5b80635063524a116102665780635063524a1461055157806351e3f1601461058457806354fd4d501461059757600080fd5b8063458936f51461050e57806346fb371d146105175780634f0e0ef31461052a57600080fd5b80632630c12f116102ee5780633192195c116102c85780633192195c146104be5780633e8297ca146104e65780633f4ba83a1461050657600080fd5b80632630c12f1461045857806329df0b93146104845780632f7a18811461049757600080fd5b806316f0115b1161031f57806316f0115b146103ce578063172c48c7146103f55780632362a2d81461043757600080fd5b8063055ee9b5146103465780630d8f9cee146103a657806311ca4fc2146103bb575b600080fd5b61037c610354366004614a87565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6103b96103b4366004614aa4565b610949565b005b6103b96103c9366004614aa4565b610a76565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b610408610403366004614add565b610b4e565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835261ffff90911660208301520161039d565b61044a610445366004614b13565b610b66565b60405190815260200161039d565b6001546a0100000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1661037c565b6103b9610492366004614a87565b6110be565b60005461037c906301000000900473ffffffffffffffffffffffffffffffffffffffff1681565b6104d16104cc366004614a87565b611122565b6040805192835260208301919091520161039d565b61044a6104f4366004614a87565b60096020526000908152604090205481565b6103b9611156565b61044a60055481565b6103b9610525366004614b95565b611244565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b61056461055f366004614be6565b61149b565b60408051948552602085019390935291830152606082015260800161039d565b6103b9610592366004614aa4565b611602565b61044a600281565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b60005460ff16604051901515815260200161039d565b6103b96105ea366004614c21565b611703565b6106026105fd366004614d40565b611bbb565b60405161039d9190614e5b565b6103b961061d366004614aa4565b611e8e565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b61065c610657366004614a87565b612036565b60405161ffff909116815260200161039d565b6103b961067d366004614b95565b61210f565b6000546106959062010000900460ff1681565b60405160ff909116815260200161039d565b6103b961229d565b61044a6106bd366004614a87565b60086020526000908152604090205481565b61037c6106dd366004614e6e565b612389565b6103b96106f0366004614ea5565b612718565b61044a610703366004614f0a565b612845565b6103b9610716366004614a87565b612e5a565b6001546040805161ffff808416825262010000840481166020830152640100000000840481169282019290925266010000000000008304821660608201526801000000000000000090920416608082015260a00161039d565b6103b9610782366004614a87565b612f85565b61044a60075481565b6103b961079e366004614add565b613045565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b96107d8366004614f4c565b61309b565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b9610812366004614a87565b613221565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b961084c366004614f81565b61327b565b6103b961085f366004614aa4565b613306565b610408610872366004614add565b6134c9565b61037c610885366004614a87565b613541565b61044a610898366004614a87565b6135a5565b60035461037c9073ffffffffffffffffffffffffffffffffffffffff1681565b61037c6108cb366004614a87565b600b6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b600c5461037c9073ffffffffffffffffffffffffffffffffffffffff1681565b61037c610921366004614a87565b600a6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561099b57506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b156109d2576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff1615610a14576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055610a4a828261362e565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b60035473ffffffffffffffffffffffffffffffffffffffff163314610ac7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805473ffffffffffffffffffffffffffffffffffffffff9384166301000000027fffffffffffffffffff0000000000000000000000000000000000000000ffffff90911617905560018054919092166a0100000000000000000000027fffff0000000000000000000000000000000000000000ffffffffffffffffffff909116179055565b600080610b5d6001841b6134c9565b91509150915091565b6000805460ff1615610bd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064015b60405180910390fd5b600054610100900460ff1615610c1b576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff163314610ca0576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610cab89613541565b90506000806000806000610cbe86611122565b9094509050610ccf8c8e868461149b565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152939b5093985090955093506000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015610d6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8f9190614fa4565b9050610d9b8887614fec565b610da6906001614fec565b811115610de657610de1877f00000000000000000000000000000000000000000000000000000000000000008d60018c8b870303038d61366e565b610e30565b610e3073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168d8960018a8d01869003016138c0565b610e7e877f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000089600061366e565b6040517fca9505e40000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604481018490527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ca9505e490606401600060405180830381600087803b158015610f1457600080fd5b505af1158015610f28573d6000803e3d6000fd5b50505050505050506001841115610f6757610f67837f00000000000000000000000000000000000000000000000000000000000000008d87600061366e565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260086020526040902054861916610f9c8489888461395b565b6040517f89b77b3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f000000000000000000000000000000000000000000000000000000000000000016906389b77b3e90602401600060405180830381600087803b15801561102557600080fd5b505af1158015611039573d6000803e3d6000fd5b50505073ffffffffffffffffffffffffffffffffffffffff909c16600090815260026020526040812080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550929a9950505050505050505050565b6000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314611116576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61111f81613a35565b50565b60008060008061113185613aa6565b91955092509050816111438286615004565b61114d9190615041565b92505050915091565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156111e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611204919061507c565b61123a576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611242613c24565b565b60005460ff16156112b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156112f3576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100178155338152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff9081169084161480159061137457506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b80156113985750600c5473ffffffffffffffffffffffffffffffffffffffff163314155b806113b7575073ffffffffffffffffffffffffffffffffffffffff8316155b156113ee576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113f7826135a5565b61142d576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061143885613541565b9050611448838583856000613d05565b61146c5761145b83858360006001613d05565b5061146a838583856001613d05565b505b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b6001546000908190819081906127109061ffff166114b98888615099565b6114c39190615004565b6114cd9190615041565b6114d79086614fec565b935060018760028111156114ed576114ed6150b0565b1415611587576001546000906127109061151390640100000000900461ffff168b615004565b61151d9190615041565b6001549091506127109061153b9062010000900461ffff168b615004565b6115459190615041565b61154f9086614fec565b94508481111561156657600185820303935061156a565b8094505b85811061157b578585039250611581565b84860391505b506115f7565b600287600281111561159b5761159b6150b0565b14156115f157600154600090612710906115c59068010000000000000000900461ffff168b615004565b6115cf9190615041565b6001549091506127109061153b906601000000000000900461ffff168b615004565b84840391505b945094509450949050565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561165457506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b1561168b576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff16156116cd576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055610a4a8282613ea6565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561175557506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b1561178c576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff16156117ce576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790556118048584613ea6565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152600091908616906370a0823190602401602060405180830381865afa158015611874573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118989190614fa4565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529192506000918616906370a0823190602401602060405180830381865afa15801561190a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192e9190614fa4565b60015490915060009081906a0100000000000000000000900473ffffffffffffffffffffffffffffffffffffffff16635cecbd0e61196c8689615099565b8a6119778988615099565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152600481019390935273ffffffffffffffffffffffffffffffffffffffff918216602484015260448301528a1660648201526084016040805180830381865afa1580156119f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1791906150df565b9150915060018411611a2d57611a2d898961362e565b611a3687612036565b611a449061ffff1682615004565b9050611a4f88612036565b611a5d9061ffff1683615004565b9150818110611a7857611a6f89613a35565b5050505061146c565b73ffffffffffffffffffffffffffffffffffffffff891660009081526009602052604081205483611ab56b033b2e3c9fd0803ce800000085615004565b611abf9190615041565b611ad5906b033b2e3c9fd0803ce8000000615099565b611adf9190614fec565b60015490915061271090611b0a906b033b2e3c9fd0803ce80000009062010000900461ffff16615004565b611b149190615041565b8111611b555773ffffffffffffffffffffffffffffffffffffffff8a166000908152600960205260409020819055611b4b8a613a35565b505050505061146c565b611b5e8a613f56565b50505073ffffffffffffffffffffffffffffffffffffffff871660009081526009602052604090206001905550505050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b6060611bc960005460ff1690565b15611c30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff1615611c72576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100178155338152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff908116908416141580611ce7575073ffffffffffffffffffffffffffffffffffffffff8316155b15611d3d57600c5473ffffffffffffffffffffffffffffffffffffffff163314611d3d576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611d4885613541565b90508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167faed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab0360405160405180910390a36040517f1cff79cd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821690631cff79cd90611df89087908790600401615103565b6000604051808303816000875af1158015611e17573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611e5d9190810190615132565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905595945050505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314611edf576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821615611f4f5773ffffffffffffffffffffffffffffffffffffffff8281166000908152600a6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169183169190911790555b73ffffffffffffffffffffffffffffffffffffffff811615611fbf5773ffffffffffffffffffffffffffffffffffffffff8181166000908152600b6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169184169190911790555b73ffffffffffffffffffffffffffffffffffffffff811673cccccccccccccccccccccccccccccccccccccccc141561203257600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790555b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120ba5750506001547e01000000000000000000000000000000000000000000000000000000000000900461ffff1690565b60006120c5836135a5565b9050806120fe576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612107816134c9565b949350505050565b60005460ff161561217c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156121be576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff163314612243576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61224d8383613ea6565b61226f73ffffffffffffffffffffffffffffffffffffffff83168585846138c0565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555050565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015612327573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061234b919061507c565b612381576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112426142d4565b6000805460ff16156123f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff1615612439576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff1633146124be576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166321d18456857f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612568573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061258c9190614fa4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168152600481019290925260248201526044016020604051808303816000875af11580156125e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061260b91906151a0565b6040517fbf28068b0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff80831660248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063bf28068b90604401600060405180830381600087803b1580156126a057600080fd5b505af11580156126b4573d6000803e3d6000fd5b505050506126c28382614394565b73ffffffffffffffffffffffffffffffffffffffff811660009081526008602052604081206001905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690559392505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314612769576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805461ffff92831668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9484166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff96851664010000000002969096167fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff97851662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000090931694909816939093171794909416949094179190911716919091179055565b6000805460ff16156128b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156128f5576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff16331461297a576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080600061298887613aa6565b925092509250846129a25761299d8684615099565b6129ac565b6129ac8684614fec565b935060008515612b045769021e19e0c9bab24000008510612a15576129d583603689901c615004565b6129e3603686901c84615004565b6129ed9190614fec565b603686901c6129fc8585615004565b612a069190615004565b612a109190615041565b612a52565b612a1f8388615004565b612a298584615004565b612a339190614fec565b85612a3e8585615004565b612a489190615004565b612a529190615041565b6040517fbf28068b0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff8a811660248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063bf28068b90604401600060405180830381600087803b158015612ae757600080fd5b505af1158015612afb573d6000803e3d6000fd5b50505050612d9f565b60008484612b128583615004565b612b1c9190615041565b612b269190615099565b60015490915060009061271090612b419061ffff1684615004565b612b4b9190615041565b905073ffffffffffffffffffffffffffffffffffffffff8a1663d1660f997f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000084612bb6878f614fec565b612bc09190614fec565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b158015612c3457600080fd5b505af1158015612c48573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ca9505e4838b612c949190614fec565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815260048101919091526024810184905260006044820152606401600060405180830381600087803b158015612cf357600080fd5b505af1158015612d07573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d9a9190614fa4565b925050505b6040517f16128211000000000000000000000000000000000000000000000000000000008152600481018690526024810182905273ffffffffffffffffffffffffffffffffffffffff891690631612821190604401600060405180830381600087803b158015612e0e57600080fd5b505af1158015612e22573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055509498975050505050505050565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff16158015612eac57506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b15612ee3576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff1615612f25576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055612f5a81613f56565b50600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b60035473ffffffffffffffffffffffffffffffffffffffff163314612fd6576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517ff62005acebe9b616aefb5f248b48f5e89f28437b27d1eebc0b2d911209f297af90600090a250565b60035473ffffffffffffffffffffffffffffffffffffffff163314613096576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600755565b60035473ffffffffffffffffffffffffffffffffffffffff1633146130ec576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613193576001805461ffff83167e01000000000000000000000000000000000000000000000000000000000000027dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790555050565b600061319e836135a5565b9050806131d7576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000908152600460205260409020805473ffffffffffffffffffffffffffffffffffffffff1675ffff000000000000000000000000000000000000000060a084901b161790555050565b60035473ffffffffffffffffffffffffffffffffffffffff163314613272576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61111f81614467565b60035473ffffffffffffffffffffffffffffffffffffffff1633146132cc576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805460ff90921662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff909216919091179055565b60005460ff1615613373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156133b5576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff16331461343a576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061344583613541565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260026020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055905061349c8282614394565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b60008082600114156135275750506001547f0000000000000000000000000000000000000000000000000000000000000000927e0100000000000000000000000000000000000000000000000000000000000090910461ffff169150565b50506000908152600460205260409020549060a082901c90565b73ffffffffffffffffffffffffffffffffffffffff80821660009081526002602052604090205416806135a0576040517fb5ba4c4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146136255773ffffffffffffffffffffffffffffffffffffffff8216600090815260066020526040902054613628565b60015b92915050565b6000613639826135a5565b73ffffffffffffffffffffffffffffffffffffffff909316600090815260086020526040902080549319939093169092555050565b8080156136c657507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b15613828576040517fd1660f9900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301526044820184905286169063d1660f9990606401600060405180830381600087803b15801561376357600080fd5b505af1158015613777573d6000803e3d6000fd5b50506040517f5869dba800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690527f0000000000000000000000000000000000000000000000000000000000000000169250635869dba89150604401600060405180830381600087803b15801561380b57600080fd5b505af115801561381f573d6000803e3d6000fd5b505050506138b9565b6040517fd1660f9900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301526044820184905286169063d1660f9990606401600060405180830381600087803b1580156138a057600080fd5b505af11580156138b4573d6000803e3d6000fd5b505050505b5050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261395590859061455b565b50505050565b60025b8181116138b95781811615613a2d576000613978826134c9565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529192506000918316906370a0823190602401602060405180830381865afa1580156139eb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a0f9190614fa4565b90506002811115613a2a57613a2a878388600185038961366e565b50505b60011b61395e565b73ffffffffffffffffffffffffffffffffffffffff811660009081526008602052604081205490613a6582614667565b60005490915062010000900460ff16811115613aa1576000613a86836146a7565b613a91906001614fec565b905061395584848460008561470b565b505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff16631afbb7a46040518163ffffffff1660e01b8152600401602060405180830381865afa158015613af6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b1a9190614fa4565b92508373ffffffffffffffffffffffffffffffffffffffff166317d11a156040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b8b9190614fa4565b91507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bf8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c1c9190614fa4565b929491935050565b60005460ff16613c90576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610bd0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6040805173ffffffffffffffffffffffffffffffffffffffff8681166024830152604480830186905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b30000000000000000000000000000000000000000000000000000000017905291517f1cff79cd000000000000000000000000000000000000000000000000000000008152600092861691631cff79cd91613dc6918a91600401615103565b6000604051808303816000875af1925050508015613e2457506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052613e219190810190615132565b60015b613e2d57613e61565b80511580613e50575080806020019051810190613e4a919061507c565b15156001145b15613e5f576001915050613e9d565b505b8115613e99576040517f76e3e29c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060005b95945050505050565b6000613eb1826135a5565b9050801580613ec35750600754811615155b15613efa576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83166000908152600860205260409020548116613aa15773ffffffffffffffffffffffffffffffffffffffff83166000908152600860205260409020805482179055505050565b60015473ffffffffffffffffffffffffffffffffffffffff8281166000908152600860205260408120546a010000000000000000000090930490911691908080613f9f86611122565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526127108202600482015273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350908716915063f9a6503090604401602060405180830381865afa15801561403a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061405e9190614fa4565b9250614069846146a7565b6001019150506000806000805b848110156142a157801561408f5760018186031b614092565b60015b935086841615614299576000806140a8866134c9565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8e811660048301529294509092506000918416906370a0823190602401602060405180830381865afa15801561411d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141419190614fa4565b9050600181111561428c576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff848116602483015261ffff841691908d169063f9a6503090604401602060405180830381865afa1580156141c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141ea9190614fa4565b6141f49190615004565b6141fe9087614fec565b95508886106142875760006142128b614667565b60005490915062010000900460ff16811115614249576142448d8c836001891561423e57898e0361470b565b8d61470b565b614278565b85156142785773ffffffffffffffffffffffffffffffffffffffff8d1660009081526008602052604090208b90555b50505050505050505050505050565b614295565b98861898600194505b5050505b600101614076565b506040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005460ff1615614341576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613cdb3390565b73ffffffffffffffffffffffffffffffffffffffff821615806143dd575073ffffffffffffffffffffffffffffffffffffffff8281166000908152600260205260409020541615155b15614414576040517f9e59609e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff918216600090815260026020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001691909216179055565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260066020526040902054156144c4576040517f2e5a5c7700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61010060055410614501576040517f1cbbe18500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005805473ffffffffffffffffffffffffffffffffffffffff83166000818152600660209081526040808320600190951b9485905584835260049091528120919091558254919290614552836151bd565b91905055505050565b60006145bd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166148799092919063ffffffff16565b805190915015613aa157808060200190518101906145db919061507c565b613aa1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610bd0565b60008060005b6101008110156146a0576001811b91508382161561468c578260010192505b838210614698576146a0565b60010161466d565b5050919050565b600081600114156146ba57506000919050565b61010060015b60016146cc8284614fec565b901c92506001831b848116158015906146e75750600185851c145b156146f257506146a0565b84811061470157839250614705565b8391505b506146c0565b815b81811015614846576001811b8581161561483d57600061472c826134c9565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529192506000918316906370a0823190602401602060405180830381865afa15801561479f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147c39190614fa4565b90506001811161483a57600054978318977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9097019660ff6201000090910416871161483a5750505073ffffffffffffffffffffffffffffffffffffffff86166000908152600860205260409020859055506138b9565b50505b5060010161470d565b506040517f53275fcb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606148888484600085614892565b90505b9392505050565b606082471015614924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610bd0565b843b61498c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610bd0565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516149b591906151f6565b60006040518083038185875af1925050503d80600081146149f2576040519150601f19603f3d011682016040523d82523d6000602084013e6149f7565b606091505b5091509150614a07828286614a12565b979650505050505050565b60608315614a2157508161488b565b825115614a315782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd09190614e5b565b73ffffffffffffffffffffffffffffffffffffffff8116811461111f57600080fd5b600060208284031215614a9957600080fd5b813561488b81614a65565b60008060408385031215614ab757600080fd5b8235614ac281614a65565b91506020830135614ad281614a65565b809150509250929050565b600060208284031215614aef57600080fd5b5035919050565b8035600381106135a057600080fd5b801515811461111f57600080fd5b600080600080600080600060e0888a031215614b2e57600080fd5b8735614b3981614a65565b9650614b4760208901614af6565b9550604088013594506060880135614b5e81614a65565b93506080880135614b6e81614a65565b925060a0880135915060c0880135614b8581614b05565b8091505092959891949750929550565b60008060008060808587031215614bab57600080fd5b8435614bb681614a65565b93506020850135614bc681614a65565b92506040850135614bd681614a65565b9396929550929360600135925050565b60008060008060808587031215614bfc57600080fd5b84359350614c0c60208601614af6565b93969395505050506040820135916060013590565b600080600080600060a08688031215614c3957600080fd5b8535614c4481614a65565b94506020860135614c5481614a65565b93506040860135614c6481614a65565b94979396509394606081013594506080013592915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614cf257614cf2614c7c565b604052919050565b600067ffffffffffffffff821115614d1457614d14614c7c565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600080600060608486031215614d5557600080fd5b8335614d6081614a65565b92506020840135614d7081614a65565b9150604084013567ffffffffffffffff811115614d8c57600080fd5b8401601f81018613614d9d57600080fd5b8035614db0614dab82614cfa565b614cab565b818152876020838501011115614dc557600080fd5b816020840160208301376000602083830101528093505050509250925092565b60005b83811015614e00578181015183820152602001614de8565b838111156139555750506000910152565b60008151808452614e29816020860160208601614de5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061488b6020830184614e11565b60008060408385031215614e8157600080fd5b823591506020830135614ad281614a65565b803561ffff811681146135a057600080fd5b600080600080600060a08688031215614ebd57600080fd5b614ec686614e93565b9450614ed460208701614e93565b9350614ee260408701614e93565b9250614ef060608701614e93565b9150614efe60808701614e93565b90509295509295909350565b600080600060608486031215614f1f57600080fd5b8335614f2a81614a65565b9250602084013591506040840135614f4181614b05565b809150509250925092565b60008060408385031215614f5f57600080fd5b8235614f6a81614a65565b9150614f7860208401614e93565b90509250929050565b600060208284031215614f9357600080fd5b813560ff8116811461488b57600080fd5b600060208284031215614fb657600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115614fff57614fff614fbd565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561503c5761503c614fbd565b500290565b600082615077577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60006020828403121561508e57600080fd5b815161488b81614b05565b6000828210156150ab576150ab614fbd565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600080604083850312156150f257600080fd5b505080516020909101519092909150565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015260006148886040830184614e11565b60006020828403121561514457600080fd5b815167ffffffffffffffff81111561515b57600080fd5b8201601f8101841361516c57600080fd5b805161517a614dab82614cfa565b81815285602083850101111561518f57600080fd5b613e9d826020830160208601614de5565b6000602082840312156151b257600080fd5b815161488b81614a65565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156151ef576151ef614fbd565b5060010190565b60008251615208818460208701614de5565b919091019291505056fea26469706673582212209d39bb9d4972b515acdad1ffb757acd15e103ca6ee762f88a6382b36243734ba64736f6c634300080a00336101406040523480156200001257600080fd5b5060405162005e9738038062005e97833981016040819052620000359162000198565b60016000556001600160a01b0383166200006257604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038316608081905260408051636f307dc360e01b81529051636f307dc3916004808201926020929091908290030181865afa158015620000ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d39190620001ea565b6001600160a01b031660a0816001600160a01b031681525050826001600160a01b0316634f0e0ef36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200012b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001519190620001ea565b6001600160a01b0390811660c0529190911660e0819052151561010052151561012052506200020f565b80516001600160a01b03811681146200019357600080fd5b919050565b600080600060608486031215620001ae57600080fd5b620001b9846200017b565b9250620001c9602085016200017b565b915060408401518015158114620001df57600080fd5b809150509250925092565b600060208284031215620001fd57600080fd5b62000208826200017b565b9392505050565b60805160a05160c05160e0516101005161012051615a86620004116000396000818161061101528181612fb5015261481f01526000818161031701528181610dde015281816144f901526146e5015260008181610557015281816146a901526147a901526000818161034b0152818161387d015261392d01526000818161047301528181611bfe0152818161274f0152818161280d0152818161366a01526137dd015260008181610665015281816109d801528181610b0301528181610bd501528181610cdd01528181610e6501528181610fe30152818161114e0152818161120e0152818161132e015281816114510152818161162b01528181611708015281816117e0015281816119e501528181611b1201528181611d9501528181611ed5015281816120040152818161216801528181612290015281816123c601528181612568015281816126390152818161266f0152818161293d01528181612a2101528181612a8a01528181612bde01528181612d2601528181612e6801528181612ec2015281816130a10152818161311b015281816131b401528181613341015281816134c10152818161358a0152818161372f01528181613a1a01528181613b2e01528181613dbb015281816142200152818161432801528181614492015281816148e7015281816149e801528181614aae0152614d8f0152615a866000f3fe6080604052600436106102695760003560e01c8063860aefcf11610153578063c7de38a6116100cb578063dfd594651161007f578063eb9606df11610064578063eb9606df1461081e578063f9eaee0d1461083e578063ffd9b9071461085e57600080fd5b8063dfd59465146107de578063e1f21c67146107fe57600080fd5b8063cff0ab96116100b0578063cff0ab96146106ef578063d9ccbec114610783578063dcf65482146107be57600080fd5b8063c7de38a6146106a7578063caa5c23f146106dc57600080fd5b80639c55a05411610122578063b55bb84b11610107578063b55bb84b14610633578063c12c21c014610653578063c690908a1461068757600080fd5b80639c55a054146105df578063b1836d32146105ff57600080fd5b8063860aefcf146104db5780639408b63f146105455780639b67ab30146105795780639be0536a146105bd57600080fd5b80635d91a0e0116101e65780636d19b486116101b55780637071b7c51161019a5780637071b7c51461049557806379c0ef91146104a857806382871ace146104c857600080fd5b80636d19b486146104415780636f307dc31461046157600080fd5b80635d91a0e0146103e85780635f73fbec146103fb578063601d66f61461040e5780636c8f225d1461042e57600080fd5b80633d9287fa1161023d5780635019e20a116102225780635019e20a1461039257806354fd4d50146103b257806359781034146103d557600080fd5b80633d9287fa146103055780634f0e0ef31461033957600080fd5b8062842b571461026e578063256ac915146102905780632a7ba1f7146102c55780632b7c7b11146102e5575b600080fd5b34801561027a57600080fd5b5061028e6102893660046151bf565b61087e565b005b34801561029c57600080fd5b506102b06102ab3660046151f8565b61098e565b60405190151581526020015b60405180910390f35b3480156102d157600080fd5b5061028e6102e0366004615215565b610a61565b3480156102f157600080fd5b5061028e610300366004615215565b610c3b565b34801561031157600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561034557600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102bc565b34801561039e57600080fd5b5061028e6103ad3660046151f8565b610d6a565b3480156103be57600080fd5b506103c7600281565b6040519081526020016102bc565b61028e6103e336600461522e565b61108c565b61028e6103f63660046152bb565b611275565b61028e610409366004615340565b611589565b34801561041a57600080fd5b5061028e6104293660046153d8565b6117de565b61028e61043c36600461541b565b611900565b34801561044d57600080fd5b506102b061045c3660046151f8565b611c31565b34801561046d57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b61028e6104a336600461546e565b611c60565b3480156104b457600080fd5b5061036d6104c3366004615215565b611f3e565b61028e6104d63660046152bb565b611f4b565b3480156104e757600080fd5b5060025461051c906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041682565b604080516fffffffffffffffffffffffffffffffff9384168152929091166020830152016102bc565b34801561055157600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561058557600080fd5b506004546040805167ffffffffffffffff608084901c1681526fffffffffffffffffffffffffffffffff9092166020830152016102bc565b3480156105c957600080fd5b506105d261227d565b6040516102bc91906154e2565b3480156105eb57600080fd5b5061028e6105fa36600461553c565b61228e565b34801561060b57600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561063f57600080fd5b5061028e61064e3660046151f8565b6123c4565b34801561065f57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561069357600080fd5b5061028e6106a23660046151f8565b6124c6565b3480156106b357600080fd5b506106c76106c23660046151f8565b612668565b604080519283526020830191909152016102bc565b61028e6106ea366004615557565b61289b565b3480156106fb57600080fd5b5060015461074e906fffffffffffffffffffffffffffffffff811690700100000000000000000000000000000000810460ff169071010000000000000000000000000000000000900464ffffffffff1683565b604080516fffffffffffffffffffffffffffffffff9094168452911515602084015264ffffffffff16908201526060016102bc565b34801561078f57600080fd5b506102b061079e366004615599565b600360209081526000928352604080842090915290825290205460ff1681565b3480156107ca57600080fd5b5061028e6107d93660046151f8565b612a88565b3480156107ea57600080fd5b506103c76107f93660046151f8565b612b86565b34801561080a57600080fd5b5061028e61081936600461522e565b612c6d565b34801561082a57600080fd5b5061028e6108393660046155c7565b612ec0565b34801561084a57600080fd5b506102b06108593660046151f8565b613057565b34801561086a57600080fd5b5061028e6108793660046155ee565b6131b2565b600260005414156108f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b6002600090815573ffffffffffffffffffffffffffffffffffffffff8316808252600360209081526040808420338086529083529381902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081527f9b3258bc4904fd6426b99843e206c6c7cdb1fd0f040121c25b71dafbb3851ee0910160405180910390a350506001600055565b6040517f055ee9b500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063055ee9b590602401602060405180830381865afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a43919061560b565b73ffffffffffffffffffffffffffffffffffffffff16141592915050565b60026000541415610ace576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610b5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b83919061560b565b9050610b903382846132eb565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906395373018906024015b600060405180830381600087803b158015610c1a57600080fd5b505af1158015610c2e573d6000803e3d6000fd5b5050600160005550505050565b60026000541415610ca8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610d39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5d919061560b565b9050610b90338284613411565b60026000541415610dd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000557f000000000000000000000000000000000000000000000000000000000000000015610e34576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610ec1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee5919061560b565b33600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915290205490915060ff16610f52576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f5d82613583565b5090508015610f98576040517ff713841e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b15801561102757600080fd5b505af115801561103b573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692503391507f93c70cc9715bef0d83edf2095f3595402279d274f402a73ffc17f1bcb19d863d90600090a35050600160005550565b600260005414156110f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611106613875565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063e958b70490602401602060405180830381865afa158015611197573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bb919061560b565b90506111c9848285856139b7565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401600060405180830381600087803b15801561125257600080fd5b505af1158015611266573d6000803e3d6000fd5b50506001600055505050505050565b600260005414156112e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611375573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611399919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166113e8576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806113f483613583565b915091508161142f576040517f1fdd676f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611437613875565b831561144d5761144d85858b8660016000613ae3565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632362a2d88b600185338e8e8e6040518863ffffffff1660e01b81526004016114b59796959493929190615663565b6020604051808303816000875af11580156114d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f891906156bf565b90508873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f7dfecd8419723a9d3954585a30c2a270165d70aafa146c11c1e1b88ae14390648460405161157091815260200190565b60405180910390a4505060016000555050505050505050565b600260005414156115f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ab919061560b565b90506116b5613875565b81156116cb576116cb8383338460016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d89061174a903390600090819083908d908d908d90600401615663565b6020604051808303816000875af1158015611769573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178d91906156bf565b5060405173ffffffffffffffffffffffffffffffffffffffff87169033907f460ad03b1cf79b1d64d3aefa28475f110ab66e84649c52bb41ed796b9b39198190600090a35050600160005550505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611849573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118d1576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff90811670010000000000000000000000000000000002911617600255565b6002600054141561196d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000908155606461198461ffff851687615707565b61198e9190615744565b9050611999816144f7565b6119a2816145e8565b6119ab84614668565b6119b3613875565b6040517f172c48c7000000000000000000000000000000000000000000000000000000008152600060048201819052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a64919061577f565b61ffff169150611a789050816127106157ae565b611a829083615707565b611a8c8288615707565b11611ac3576040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff86811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611b5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b81919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638587604051611bef92919091825261ffff16602082015260400190565b60405180910390a3611c2386827f00000000000000000000000000000000000000000000000000000000000000008a6139b7565b505060016000555050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526006602052604081205415155b92915050565b60026000541415611ccd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611cdb856144f7565b611ce484614668565b611ced856145e8565b600154700100000000000000000000000000000000900460ff1615611d3e576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d46613875565b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff85811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611de0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e04919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638885604051611e7292919091825261ffff16602082015260400190565b60405180910390a38215611e9057611e908484878460006001613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015611f1957600080fd5b505af1158015611f2d573d6000803e3d6000fd5b505060016000555050505050505050565b6000611c5a60058361480f565b60026000541415611fb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa15801561204b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206f919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166120be576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120c661481b565b6120fc576040517f7e52ccb400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061210782612668565b509050612112613875565b82156121285761212884848a8560016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d8906121aa908c90600290879033908f908f908f90600401615663565b6020604051808303816000875af11580156121c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ed91906156bf565b90508773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167ffada13ff2d5e1a1d9da37ad4a4130893b34e3c69c32b17f87ec31fd661b867078460405161226591815260200190565b60405180910390a45050600160005550505050505050565b6060612289600561486b565b905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612381576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561242f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612453919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146124b7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614878565b5050565b60026000541415612533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156125c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e8919061560b565b90506125f4818361489a565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401610c00565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126fc919061560b565b905060008061270b8387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156127a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127c991906156bf565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015291965061271091851690637afb010490604401602060405180830381865afa158015612863573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061288791906156bf565b6128919190615744565b9350505050915091565b60026000541415612908576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129bd919061560b565b90506129c7613875565b8115612a7e576129dc83833384600080613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015612a6557600080fd5b505af1158015612a79573d6000803e3d6000fd5b505050505b5050600160005550565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612af3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b17919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b7b576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614c92565b600080612b9283612668565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152919350600092507f000000000000000000000000000000000000000000000000000000000000000090911690633192195c906024016040805180830381865afa158015612c26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4a91906157c5565b9150819050612c5b61271084615707565b612c659190615744565b949350505050565b60026000541415612cda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063fdd5764590602401602060405180830381865afa158015612d6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d91919061560b565b73ffffffffffffffffffffffffffffffffffffffff161480612dd7575073ffffffffffffffffffffffffffffffffffffffff831660009081526006602052604090205415155b15612e0e576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612eac57600080fd5b505af1158015611c23573d6000803e3d6000fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f4f919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612fb3576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000061300a576040517f50dd11fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805464ffffffffff90921671010000000000000000000000000000000000027fffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffffff909216919091179055565b6040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063f67c5bd090602401602060405180830381865afa1580156130e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061310c91906156bf565b905080158015906131ab5750807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015613184573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a891906156bf565b16155b9392505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561321d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613241919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146132a5576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018054911515700100000000000000000000000000000000027fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff909216919091179055565b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600060448301819052917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561338c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133b091906156bf565b90506133bb816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f98274bf834d179ee08dc0604071b0dc90b54731bd5f725a5a96a39a86bce025a8360405161340391815260200190565b60405180910390a250505050565b61341a816144f7565b600154700100000000000000000000000000000000900460ff161561346b576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600160448301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561350c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061353091906156bf565b905061353b816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f9cac51154cc0d835e2f9c9d1f59a9344588cee107f4203bf58a8c797e3a58c458360405161340391815260200190565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613617919061560b565b90506000806136268387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156136c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136e491906156bf565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529195506000917f00000000000000000000000000000000000000000000000000000000000000001690633192195c906024016040805180830381865afa158015613775573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061379991906157c5565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350600092506127109187169063f9a6503090604401602060405180830381865afa158015613837573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061385b91906156bf565b6138659190615707565b9092109794965093945050505050565b34156139b5577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156138e357600080fd5b505af11580156138f7573d6000803e3d6000fd5b50506040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201523460248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16935063a9059cbb925060440190506020604051808303816000875af115801561398f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139b391906157e9565b505b565b6139c084614cb4565b6040517f830aa74500000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f0000000000000000000000000000000000000000000000000000000000000000169063830aa74590608401600060405180830381600087803b158015613a5e57600080fd5b505af1158015613a72573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fa32435755c235de2976ed44a75a2f85cb01faf0c894f639fe0c32bb9455fea8f83604051613ad591815260200190565b60405180910390a350505050565b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301523060248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b158015613b7257600080fd5b505af1158015613b86573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff871692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a28460005b8181101561441d5736888883818110613bea57613bea615806565b9050602002810190613bfc9190615835565b90506004613c0d6020830183615873565b90501015613c47576040517fe2b0e50600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b30613c5560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16141561421c578415613ca9576040517f5fb9107f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613cb86020830183615873565b613cc1916158d8565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167f59781034000000000000000000000000000000000000000000000000000000001415613e3c5760008080613d1e6020860186615873565b613d2c916004908290615920565b810190613d39919061522e565b925092509250613e34838c73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614613e2b576040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015613e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e26919061560b565b613e2d565b8b5b84846139b7565b505050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2b7c7b11000000000000000000000000000000000000000000000000000000001415613ec757600194506000613e996020840184615873565b613ea7916004908290615920565b810190613eb49190615215565b9050613ec1898983613411565b50614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2a7ba1f7000000000000000000000000000000000000000000000000000000001415613f80578415613f49576040517fc0b0caa800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613f586020840184615873565b613f66916004908290615920565b810190613f739190615215565b9050613ec18989836132eb565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f233a8caa0000000000000000000000000000000000000000000000000000000014156140e457600080613fda6020850185615873565b613fe8916004908290615920565b810190613ff5919061594a565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c8116600483015292945090925082918416906370a0823190602401602060405180830381865afa158015614069573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061408d91906156bf565b10156140dd576040517fa5ac537300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016108e7565b5050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fc690908a00000000000000000000000000000000000000000000000000000000141561416457600061413d6020840184615873565b61414b916004908290615920565b81019061415891906151f8565b9050613ec1888261489a565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f23e27a640000000000000000000000000000000000000000000000000000000014156141e45760006141bd6020840184615873565b6141cb916004908290615920565b8101906141d891906151f8565b9050613ec18882614d42565b6040517f1e9e7e7a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50614414565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff68754361426760208501856151f8565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156142d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142f4919061560b565b73ffffffffffffffffffffffffffffffffffffffff16148061436d575073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001661435560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16145b156143a4576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6144126143b46020830183615873565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506143f69250505060208401846151f8565b73ffffffffffffffffffffffffffffffffffffffff1690614e39565b505b50600101613bcf565b506040517f60c8e8938c9a0c0d88a98d6f1c562ce68077e12bf3edb8047378f2f736cb45b490600090a16040517fe1998cf900000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff86811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b1580156144d657600080fd5b505af11580156144ea573d6000803e3d6000fd5b5050505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006139b3576001546fffffffffffffffffffffffffffffffff9081169081146124c257600454608081901c906fffffffffffffffffffffffffffffffff16600067ffffffffffffffff8316431461456e578461458a565b61458a6fffffffffffffffffffffffffffffffff831686615976565b9050838111156145c6576040517f675f1a5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff81164360801b176004555050505050565b6002546fffffffffffffffffffffffffffffffff16811080614631575060025470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681115b156139b3576040517fce16799400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61467061481b565b156146a7576040517f63fc31c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1615614806577f0000000000000000000000000000000000000000000000000000000000000000801561472657503373ffffffffffffffffffffffffffffffffffffffff821614155b1561475d576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600160248301527f00000000000000000000000000000000000000000000000000000000000000001690639dc29fac90604401600060405180830381600087803b1580156147ed57600080fd5b505af1158015614801573d6000803e3d6000fd5b505050505b6139b381614cb4565b60006131ab8383614e7b565b60007f0000000000000000000000000000000000000000000000000000000000000000801561228957505060015471010000000000000000000000000000000000900464ffffffffff1642101590565b606060006131ab83614ea5565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f01565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561492b57600080fd5b505af115801561493f573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527fdf498aa1c340e992665d6fb4f3be8436d452c45a630cb6d7fab7963da39bac8793500190505b60405180910390a15050565b6040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600091829160019183917f00000000000000000000000000000000000000000000000000000000000000001690638991b2f190602401602060405180830381865afa158015614a2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a5391906156bf565b90505b808211614c895780821615614c7d576040517fe75538c700000000000000000000000000000000000000000000000000000000815260048101839052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e75538c7906024016040805180830381865afa158015614af4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b18919061577f565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529294509092506000918416906370a0823190602401602060405180830381865afa158015614b8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bb191906156bf565b90506001811115614c79576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff8481166024830152600091908b169063f9a6503090604401602060405180830381865afa158015614c33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c5791906156bf565b978801979050614c6b61ffff841682615707565b614c759088615976565b9650505b5050505b600182901b9150614a56565b50509250929050565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f50565b3373ffffffffffffffffffffffffffffffffffffffff821614801590614d0b575033600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16155b156139b3576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b158015614dd357600080fd5b505af1158015614de7573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527f69db9e9764da61b6681b89fb0f5be018506e0342036e56b59c3015a620d60977935001905061498d565b60606131ab83836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250615043565b6000826000018281548110614e9257614e92615806565b9060005260206000200154905092915050565b606081600001805480602002602001604051908101604052809291908181526020018280548015614ef557602002820191906000526020600020905b815481526020019060010190808311614ee1575b50505050509050919050565b6000818152600183016020526040812054614f4857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611c5a565b506000611c5a565b60008181526001830160205260408120548015615039576000614f746001836157ae565b8554909150600090614f88906001906157ae565b9050818114614fed576000866000018281548110614fa857614fa8615806565b9060005260206000200154905080876000018481548110614fcb57614fcb615806565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080614ffe57614ffe61598e565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611c5a565b6000915050611c5a565b6060612c65848460008585843b6150b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108e7565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516150df91906159ed565b60006040518083038185875af1925050503d806000811461511c576040519150601f19603f3d011682016040523d82523d6000602084013e615121565b606091505b509150915061513182828661513c565b979650505050505050565b6060831561514b5750816131ab565b82511561515b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e791906159ff565b73ffffffffffffffffffffffffffffffffffffffff811681146139b357600080fd5b80151581146139b357600080fd5b600080604083850312156151d257600080fd5b82356151dd8161518f565b915060208301356151ed816151b1565b809150509250929050565b60006020828403121561520a57600080fd5b81356131ab8161518f565b60006020828403121561522757600080fd5b5035919050565b60008060006060848603121561524357600080fd5b833561524e8161518f565b9250602084013561525e8161518f565b929592945050506040919091013590565b60008083601f84011261528157600080fd5b50813567ffffffffffffffff81111561529957600080fd5b6020830191508360208260051b85010111156152b457600080fd5b9250929050565b60008060008060008060a087890312156152d457600080fd5b86356152df8161518f565b955060208701356152ef8161518f565b9450604087013593506060870135615306816151b1565b9250608087013567ffffffffffffffff81111561532257600080fd5b61532e89828a0161526f565b979a9699509497509295939492505050565b60008060008060006080868803121561535857600080fd5b85356153638161518f565b945060208601359350604086013561537a816151b1565b9250606086013567ffffffffffffffff81111561539657600080fd5b6153a28882890161526f565b969995985093965092949392505050565b80356fffffffffffffffffffffffffffffffff811681146153d357600080fd5b919050565b600080604083850312156153eb57600080fd5b6153f4836153b3565b9150615402602084016153b3565b90509250929050565b61ffff811681146139b357600080fd5b6000806000806080858703121561543157600080fd5b8435935060208501356154438161518f565b925060408501356154538161540b565b915060608501356154638161540b565b939692955090935050565b60008060008060006080868803121561548657600080fd5b8535945060208601356154988161518f565b9350604086013567ffffffffffffffff8111156154b457600080fd5b6154c08882890161526f565b90945092505060608601356154d48161540b565b809150509295509295909350565b6020808252825182820181905260009190848201906040850190845b8181101561553057835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016154fe565b50909695505050505050565b60006020828403121561554e57600080fd5b6131ab826153b3565b6000806020838503121561556a57600080fd5b823567ffffffffffffffff81111561558157600080fd5b61558d8582860161526f565b90969095509350505050565b600080604083850312156155ac57600080fd5b82356155b78161518f565b915060208301356151ed8161518f565b6000602082840312156155d957600080fd5b813564ffffffffff811681146131ab57600080fd5b60006020828403121561560057600080fd5b81356131ab816151b1565b60006020828403121561561d57600080fd5b81516131ab8161518f565b6003811061565f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b73ffffffffffffffffffffffffffffffffffffffff888116825260e082019061568f602084018a615628565b6040830197909752948616606082015292909416608083015260a082015291151560c09092019190915292915050565b6000602082840312156156d157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561573f5761573f6156d8565b500290565b60008261577a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000806040838503121561579257600080fd5b825161579d8161518f565b60208401519092506151ed8161540b565b6000828210156157c0576157c06156d8565b500390565b600080604083850312156157d857600080fd5b505080516020909101519092909150565b6000602082840312156157fb57600080fd5b81516131ab816151b1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc183360301811261586957600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126158a857600080fd5b83018035915067ffffffffffffffff8211156158c357600080fd5b6020019150368190038213156152b457600080fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156159185780818660040360031b1b83161692505b505092915050565b6000808585111561593057600080fd5b8386111561593d57600080fd5b5050820193919092039150565b6000806040838503121561595d57600080fd5b82356159688161518f565b946020939093013593505050565b60008219821115615989576159896156d8565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60005b838110156159d85781810151838201526020016159c0565b838111156159e7576000848401525b50505050565b600082516158698184602087016159bd565b6020815260008251806020840152615a1e8160408501602087016159bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea2646970667358221220a3f4a705ab580a6ada1e438cd2ee4abc001b62d1d171fce12c41994900fef21664736f6c634300080a003360a06040523480156200001157600080fd5b5060405162005f3d38038062005f3d8339810160408190526200003491620012eb565b826001600160a01b031663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000073573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200009991906200147f565b6001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000d7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000fd91906200147f565b6000805460ff191690556001600160a01b0381166200012f57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200016e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200019491906200147f565b6001600160a01b03908116608052600180546001600160a01b031916918616918217905560408051636f307dc360e01b81529051919250636f307dc39160048083019260209291908290030181865afa158015620001f6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200021c91906200147f565b600260006101000a8154816001600160a01b0302191690836001600160a01b03160217905550826001600160a01b031663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000281573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a791906200147f565b6001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200030b91906200147f565b600080546001600160a01b039290921661010002610100600160a81b0319909216919091179055620003626103e860c86200034b6101f4612710620014bc565b60646200035c60c8612710620014bc565b620005e8565b60408101515160005b81811015620003ee576000836040015182815181106200038f576200038f620014e2565b6020026020010151600001519050620003ae81620007c260201b60201c565b620003e48185604001518481518110620003cc57620003cc620014e2565b60200260200101516020015162000a5e60201b60201c565b506001016200036b565b5060015460408051632630c12f60e01b815290516001600160a01b03909216916311ca4fc29186918491632630c12f9160048083019260209291908290030181865afa15801562000443573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200046991906200147f565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401600060405180830381600087803b158015620004b257600080fd5b505af1158015620004c7573d6000803e3d6000fd5b50506040516001600160a01b03861692507fa8b21f72cb83bce808df32dc2330217d744a1c22f3e9e44e4b11bbf049d37d9d9150600090a2600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000553573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200057991906200147f565b6001600160a01b03167f3f82447be465b0b5a4a9e54c74d5f6ae73f2e9537f2cc1590a340524703d096160405160405180910390a26020820151620005cb90620005c5906002620014f8565b62000bda565b81516020830151620005de919062000dc8565b5050505062001604565b6000620005f68585620014bc565b60015460405163172c48c760e01b81526000600482018190529293506001600160a01b039091169063172c48c7906024016040805180830381865afa15801562000644573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200066a91906200152a565b9150508061ffff168261ffff1614620006be57620006888262000f47565b60025460405161ffff841681526001600160a01b039091169060008051602062005f1d8339815191529060200160405180910390a25b60015460405163944ac59f60e01b815261ffff808a166004830152808916602483015280881660448301528087166064830152851660848201526001600160a01b039091169063944ac59f9060a401600060405180830381600087803b1580156200072857600080fd5b505af11580156200073d573d6000803e3d6000fd5b505050507f2214a403d5f8d049e52eacca974c6dea01a471e41d6a18903bfaf7dbc709741f878787612710620007749190620014bc565b876200078388612710620014bc565b6040805161ffff96871681529486166020860152928516848401529084166060840152909216608082015290519081900360a00190a150505050505050565b6001600160a01b038116620007ea57604051635919af9760e11b815260040160405180910390fd5b62000809816001600160a01b03166200116f60201b620023381760201c565b620008365760405163df4c572d60e01b81526001600160a01b038216600482015260240160405180910390fd5b6040516370a0823160e01b81523060048201526001600160a01b038216906370a0823190602401602060405180830381865afa92505050801562000899575060408051601f3d908101601f19168201909252620008969181019062001564565b60015b620008b75760405163528ca31d60e01b815260040160405180910390fd5b50600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200090c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200093291906200147f565b604051630f9a650360e41b8152670de0b6b3a764000060048201526001600160a01b038381166024830152919091169063f9a6503090604401602060405180830381865afa925050508015620009a7575060408051601f3d908101601f19168201909252620009a49181019062001564565b60015b620009c5576040516367a7cd4360e01b815260040160405180910390fd5b5060015460405163d48bfca760e01b81526001600160a01b0383811660048301529091169063d48bfca790602401600060405180830381600087803b15801562000a0e57600080fd5b505af115801562000a23573d6000803e3d6000fd5b50506040516001600160a01b03841692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a250565b6002546001600160a01b038381169116141562000a8e57604051633b899cf960e01b815260040160405180910390fd5b60015460405163172c48c760e01b8152600060048201819052916001600160a01b03169063172c48c7906024016040805180830381865afa15801562000ad8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000afe91906200152a565b91505061ffff8216158062000b1a57508061ffff168261ffff16115b1562000b39576040516333c6608d60e01b815260040160405180910390fd5b600154604051635385e2a160e11b81526001600160a01b03858116600483015261ffff851660248301529091169063a70bc54290604401600060405180830381600087803b15801562000b8b57600080fd5b505af115801562000ba0573d6000803e3d6000fd5b505060405161ffff851681526001600160a01b038616925060008051602062005f1d833981519152915060200160405180910390a2505050565b600062000be662001175565b6001600160a01b031663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801562000c24573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c4a91906200157e565b50509050600062000c606200117560201b60201c565b6001600160a01b031663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa15801562000c9d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000cc39190620015d5565b915050806001600160801b0316836001600160801b0316101562000cfa576040516309aadd6f60e41b815260040160405180910390fd5b826001600160801b0316826001600160801b03161462000dc35762000d1e62001175565b604051632715681560e21b81526001600160801b03851660048201526001600160a01b039190911690639c55a05490602401600060405180830381600087803b15801562000d6b57600080fd5b505af115801562000d80573d6000803e3d6000fd5b50506040516001600160801b03861681527fa030eec20ae970821387224ec3bb15b4bd22b89bfb86dc4d2b3827aa3d99e48d925060200190505b60405180910390a15b505050565b600062000dd462001175565b6001600160a01b031663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801562000e12573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e3891906200157e565b50509050816001600160801b0316836001600160801b0316118062000e6e5750806001600160801b0316826001600160801b0316115b1562000e8d576040516309aadd6f60e41b815260040160405180910390fd5b62000e9762001175565b60405163300eb37b60e11b81526001600160801b038086166004830152841660248201526001600160a01b03919091169063601d66f690604401600060405180830381600087803b15801562000eec57600080fd5b505af115801562000f01573d6000803e3d6000fd5b5050604080516001600160801b038088168252861660208201527f4d4981437d0211f9e6843eb024d9ada1fa3a99514d4343d4aece106dd11524bb935001905062000dba565b600154600254604051635385e2a160e11b81526001600160a01b03918216600482015261ffff8416602482015291169063a70bc54290604401600060405180830381600087803b15801562000f9b57600080fd5b505af115801562000fb0573d6000803e3d6000fd5b505050506000600160009054906101000a90046001600160a01b03166001600160a01b031663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200100a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001030919062001564565b905060015b8181101562000dc35760015460405163172c48c760e01b81526004810183905260009182916001600160a01b039091169063172c48c7906024016040805180830381865afa1580156200108c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010b291906200152a565b915091508461ffff168161ffff1611156200116457600154604051635385e2a160e11b81526001600160a01b03848116600483015261ffff881660248301529091169063a70bc54290604401600060405180830381600087803b1580156200111957600080fd5b505af11580156200112e573d6000803e3d6000fd5b505060405161ffff881681526001600160a01b038516925060008051602062005f1d833981519152915060200160405180910390a25b505060010162001035565b3b151590565b60015460408051632f7a188160e01b815290516000926001600160a01b031691632f7a18819160048083019260209291908290030181865afa158015620011c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011e691906200147f565b905090565b6001600160a01b03811681146200120157600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b03811182821017156200123f576200123f62001204565b60405290565b604080519081016001600160401b03811182821017156200123f576200123f62001204565b604051601f8201601f191681016001600160401b038111828210171562001295576200129562001204565b604052919050565b80516001600160801b0381168114620012b557600080fd5b919050565b8051620012b581620011eb565b805161ffff81168114620012b557600080fd5b80518015158114620012b557600080fd5b6000806000606084860312156200130157600080fd5b83516200130e81620011eb565b809350506020808501516200132381620011eb565b604086810151919450906001600160401b03808211156200134357600080fd5b9087019060a0828a0312156200135857600080fd5b620013626200121a565b6200136d836200129d565b81526200137c8584016200129d565b8582015283830151828111156200139257600080fd5b8301601f81018b13620013a457600080fd5b805183811115620013b957620013b962001204565b620013c9878260051b016200126a565b818152878101945060069190911b82018701908c821115620013ea57600080fd5b918701915b81831015620014435786838e031215620014095760008081fd5b6200141362001245565b83516200142081620011eb565b81526200142f848a01620012c7565b818a015285529387019391860191620013ef565b838701525062001458905060608401620012ba565b60608201526200146b60808401620012da565b608082015280955050505050509250925092565b6000602082840312156200149257600080fd5b81516200149f81620011eb565b9392505050565b634e487b7160e01b600052601160045260246000fd5b600061ffff83811690831681811015620014da57620014da620014a6565b039392505050565b634e487b7160e01b600052603260045260246000fd5b60006001600160801b0382811684821681151582840482111615620015215762001521620014a6565b02949350505050565b600080604083850312156200153e57600080fd5b82516200154b81620011eb565b91506200155b60208401620012c7565b90509250929050565b6000602082840312156200157757600080fd5b5051919050565b6000806000606084860312156200159457600080fd5b6200159f846200129d565b9250620015af60208501620012da565b9150604084015164ffffffffff81168114620015ca57600080fd5b809150509250925092565b60008060408385031215620015e957600080fd5b620015f4836200129d565b91506200155b602084016200129d565b608051614878620016a56000396000818161033601528181610446015281816107c5015281816108c0015281816109ae01528181610b8301528181610f0a015281816113e1015281816114cf015281816115bb015281816116ab015281816117990152818161187d01528181611ad901528181611bc601528181611cb301528181611da0015281816120090152818161218c015261227901526148786000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80638456cb59116100f9578063dc2b21c111610097578063f0527ac611610071578063f0527ac6146103d7578063f206d32a146103df578063fb1bd8c4146103f2578063ffd9b9071461040557600080fd5b8063dc2b21c11461039e578063e6492d7b146103b1578063eb9606df146103c457600080fd5b8063a50cf2c8116100d3578063a50cf2c814610331578063a70bc54214610358578063b53472ef1461036b578063c12c21c01461037e57600080fd5b80638456cb59146103035780639c55a0541461030b5780639f1c50691461031e57600080fd5b806350e036ff1161016657806354fd4d501161014057806354fd4d50146102b25780635c975abb146102ba5780636f307dc3146102d05780637bccacee146102f057600080fd5b806350e036ff1461027657806352438e541461028c578063526a41e81461029f57600080fd5b80633e7c88d6116101a25780633e7c88d6146102355780633f4ba83a14610248578063456e0742146102505780635094cb4f1461026357600080fd5b806324147708146101c95780632954018c146101de5780632f7a18811461022d575b600080fd5b6101dc6101d7366004614307565b610418565b005b60005461020390610100900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6102036106fe565b6101dc610243366004614334565b610797565b6101dc610892565b6101dc61025e366004614307565b610980565b61020361027136600461436d565b610b36565b61027e610b49565b604051908152602001610224565b6101dc61029a366004614307565b610b55565b6101dc6102ad366004614394565b610edc565b61027e600281565b60005460ff166040519015158152602001610224565b6002546102039073ffffffffffffffffffffffffffffffffffffffff1681565b6101dc6102fe3660046143c2565b6113b3565b6101dc6114a1565b6101dc61031936600461440e565b61158d565b6101dc61032c36600461442b565b61167d565b6102037f000000000000000000000000000000000000000000000000000000000000000081565b6101dc610366366004614334565b61176b565b6101dc610379366004614307565b61184f565b6001546102039073ffffffffffffffffffffffffffffffffffffffff1681565b6101dc6103ac366004614459565b611aab565b6101dc6103bf366004614307565b611b98565b6101dc6103d236600461448f565b611c85565b6101dc611d72565b6101dc6103ed3660046144ac565b611fdb565b6101dc610400366004614307565b61215e565b6101dc61041336600461451d565b61224b565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156104a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c6919061453a565b6104fc576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006105078261233e565b90506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015610578573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059c9190614557565b90508181166106f9576001546040517fa366f496000000000000000000000000000000000000000000000000000000008152918317600483018190529173ffffffffffffffffffffffffffffffffffffffff9091169063a366f49690602401600060405180830381600087803b15801561061557600080fd5b505af1158015610629573d6000803e3d6000fd5b505050506106356106fe565b6040517fffd9b9070000000000000000000000000000000000000000000000000000000081526001600482015273ffffffffffffffffffffffffffffffffffffffff919091169063ffd9b90790602401600060405180830381600087803b15801561069f57600080fd5b505af11580156106b3573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692507ff17b849746e74d7186170c9553d4bbf60b4f8bb1ed81fe50c099b934fb078f059150600090a25b505050565b600154604080517f2f7a1881000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691632f7a18819160048083019260209291908290030181865afa15801561076e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610792919061457b565b905090565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610821573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610845919061453a565b61087b576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108848261241e565b61088e82826127f8565b5050565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa15801561091c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610940919061453a565b610976576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61097e612a15565b565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610a0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2e919061453a565b610a64576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a6d81612af6565b6001546040517f9f5f86ae00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015290911690639f5f86ae90602401600060405180830381600087803b158015610ada57600080fd5b505af1158015610aee573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507f5a0b7d0f9c24b39256e112a0584b4c5ce38d8f1dee2e7c56f15b852604cdc8869150600090a250565b6000610b43600383612cb8565b92915050565b60006107926003612ccb565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610bdf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c03919061453a565b610c39576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610c86576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063fdd5764590602401602060405180830381865afa158015610cf7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1b919061457b565b905073ffffffffffffffffffffffffffffffffffffffff8116610d6a576040517f1170cc2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f6e98e5e400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526000602483015290911690636e98e5e490604401600060405180830381600087803b158015610dde57600080fd5b505af1158015610df2573d6000803e3d6000fd5b50506001546040517f6e98e5e40000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff86811660248301529091169250636e98e5e49150604401600060405180830381600087803b158015610e6a57600080fd5b505af1158015610e7e573d6000803e3d6000fd5b50505050610e96826003612cd590919063ffffffff16565b5060405173ffffffffffffffffffffffffffffffffffffffff8316907fab9f405bf0c19b97f65a7031634db41569cd2f0e0376a610a1e977f9ab22b58f90600090a25050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610f66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8a919061453a565b610fc0576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fc982612af6565b6000806000610fd66106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015611020573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110449190614598565b9250925092506000806110556106fe565b73ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa15801561109e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c291906145e5565b9150915060006110d06106fe565b73ffffffffffffffffffffffffffffffffffffffff16639be0536a6040518163ffffffff1660e01b8152600401600060405180830381865afa15801561111a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526111609190810190614643565b9050600061116c6106fe565b73ffffffffffffffffffffffffffffffffffffffff1663b1836d326040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111da919061453a565b600154604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905192935073ffffffffffffffffffffffffffffffffffffffff909116916311ca4fc2918c918491632630c12f9160048083019260209291908290030181865afa158015611256573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061127a919061457b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156112e757600080fd5b505af11580156112fb573d6000803e3d6000fd5b5050505087156113675761130e87612cf7565b6113188484612f5d565b61132186613152565b60005b82518110156113575761134f83828151811061134257611342614726565b60200260200101516132a3565b600101611324565b50801561136757611367856133c9565b60405173ffffffffffffffffffffffffffffffffffffffff8a16907fa8b21f72cb83bce808df32dc2330217d744a1c22f3e9e44e4b11bbf049d37d9d90600090a2505050505050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561143d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611461919061453a565b611497576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61088e828261357b565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561152b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061154f919061453a565b611585576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61097e6139c3565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611617573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163b919061453a565b611671576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81612cf7565b50565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611707573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172b919061453a565b611761576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61088e8282612f5d565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156117f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611819919061453a565b610884576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156118d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fd919061453a565b611933576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061193e8261233e565b90506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d39190614557565b9050818116156106f9576001546040517fa366f496000000000000000000000000000000000000000000000000000000008152918318600483018190529173ffffffffffffffffffffffffffffffffffffffff9091169063a366f49690602401600060405180830381600087803b158015611a4d57600080fd5b505af1158015611a61573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a2505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611b35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b59919061453a565b611b8f576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81613a83565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611c22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c46919061453a565b611c7c576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81613b3d565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611d0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d33919061453a565b611d69576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a816133c9565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611dfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e20919061453a565b611e56576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ec4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee8919061457b565b60015490915073ffffffffffffffffffffffffffffffffffffffff166311ca4fc2611f116106fe565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff91821660048201529084166024820152604401600060405180830381600087803b158015611f7f57600080fd5b505af1158015611f93573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507f3f82447be465b0b5a4a9e54c74d5f6ae73f2e9537f2cc1590a340524703d09619150600090a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015612065573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612089919061453a565b6120bf576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61271061ffff86161015806120e357506127106120dc8585614784565b61ffff1610155b806120fd57506127106120f68383614784565b61ffff1610155b15612134576040517f0b361d6900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6121578585612145866127106147aa565b85612152866127106147aa565b613c5c565b5050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156121e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061220c919061453a565b612242576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a816132a3565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156122d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122f9919061453a565b61232f576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81613152565b3b151590565b6001546040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063f67c5bd090602401602060405180830381865afa1580156123af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123d39190614557565b90508015806123e25750806001145b15612419576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b73ffffffffffffffffffffffffffffffffffffffff811661246b576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163b6124d6576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024015b60405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8216906370a0823190602401602060405180830381865afa92505050801561257a575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261257791810190614557565b60015b6125b0576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561261e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612642919061457b565b6040517ff9a65030000000000000000000000000000000000000000000000000000000008152670de0b6b3a7640000600482015273ffffffffffffffffffffffffffffffffffffffff8381166024830152919091169063f9a6503090604401602060405180830381865afa9250505080156126f8575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526126f591810190614557565b60015b61272e576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506001546040517fd48bfca700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301529091169063d48bfca790602401600060405180830381600087803b15801561279c57600080fd5b505af11580156127b0573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a250565b60025473ffffffffffffffffffffffffffffffffffffffff8381169116141561284d576040517f3b899cf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f172c48c70000000000000000000000000000000000000000000000000000000081526000600482018190529173ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa1580156128bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128e091906147cd565b91505061ffff821615806128fb57508061ffff168261ffff16115b15612932576040517f33c6608d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015261ffff851660248301529091169063a70bc54290604401600060405180830381600087803b1580156129a957600080fd5b505af11580156129bd573d6000803e3d6000fd5b505060405161ffff8516815273ffffffffffffffffffffffffffffffffffffffff861692507f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650915060200160405180910390a2505050565b60005460ff16612a81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016124cd565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b73ffffffffffffffffffffffffffffffffffffffff8116612b43576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163b612ba9576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024016124cd565b8073ffffffffffffffffffffffffffffffffffffffff1663c12c21c06040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612c2e575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252612c2b9181019061457b565b60015b612c64576040517fe9eddd1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60015473ffffffffffffffffffffffffffffffffffffffff82811691161461088e576040517fe9eddd1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612cc48383613e92565b9392505050565b6000610b43825490565b6000612cc48373ffffffffffffffffffffffffffffffffffffffff8416613ebc565b6000612d016106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015612d4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d6f9190614598565b505090506000612d7d6106fe565b73ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa158015612dc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dea91906145e5565b915050806fffffffffffffffffffffffffffffffff16836fffffffffffffffffffffffffffffffff161015612e4b576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826fffffffffffffffffffffffffffffffff16826fffffffffffffffffffffffffffffffff16146106f957612e7e6106fe565b6040517f9c55a0540000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff8516600482015273ffffffffffffffffffffffffffffffffffffffff9190911690639c55a05490602401600060405180830381600087803b158015612ef957600080fd5b505af1158015612f0d573d6000803e3d6000fd5b50506040516fffffffffffffffffffffffffffffffff861681527fa030eec20ae970821387224ec3bb15b4bd22b89bfb86dc4d2b3827aa3d99e48d925060200190505b60405180910390a1505050565b6000612f676106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015612fb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fd59190614598565b50509050816fffffffffffffffffffffffffffffffff16836fffffffffffffffffffffffffffffffff16118061302e5750806fffffffffffffffffffffffffffffffff16826fffffffffffffffffffffffffffffffff16115b15613065576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61306d6106fe565b6040517f601d66f60000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff80861660048301528416602482015273ffffffffffffffffffffffffffffffffffffffff919091169063601d66f690604401600060405180830381600087803b1580156130f057600080fd5b505af1158015613104573d6000803e3d6000fd5b5050604080516fffffffffffffffffffffffffffffffff8088168252861660208201527f4d4981437d0211f9e6843eb024d9ada1fa3a99514d4343d4aece106dd11524bb9350019050612f50565b600061315c6106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa1580156131a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131ca9190614598565b509150508015158215151461088e576131e16106fe565b6040517fffd9b907000000000000000000000000000000000000000000000000000000008152831515600482015273ffffffffffffffffffffffffffffffffffffffff919091169063ffd9b90790602401600060405180830381600087803b15801561324c57600080fd5b505af1158015613260573d6000803e3d6000fd5b505050507ff97ba903470ff3262b4a68a938fe81def401bac1bd742169d2e8d5c4ed2185d382604051613297911515815260200190565b60405180910390a15050565b73ffffffffffffffffffffffffffffffffffffffff81166132f0576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6132f86106fe565b6040517fb55bb84b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152919091169063b55bb84b90602401600060405180830381600087803b15801561336357600080fd5b505af1158015613377573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841681527fdac9a7995cbc0c0f01d78970fb6fd0b52fe0fe869eb6635e65cc1b5682b8325c925060200190505b60405180910390a150565b60006133d36106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801561341d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134419190614598565b925050508064ffffffffff168264ffffffffff161461088e578164ffffffffff168164ffffffffff16118061347c57508164ffffffffff1642115b156134b3576040517fe4eaca7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134bb6106fe565b6040517feb9606df00000000000000000000000000000000000000000000000000000000815264ffffffffff8416600482015273ffffffffffffffffffffffffffffffffffffffff919091169063eb9606df90602401600060405180830381600087803b15801561352b57600080fd5b505af115801561353f573d6000803e3d6000fd5b505060405164ffffffffff851681527f0b3eb35ba750e7a7e4d26c9eee3d226f4e1f68c5568f4a3d051c94b241b02ac092506020019050613297565b73ffffffffffffffffffffffffffffffffffffffff82166135c8576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82163b61362e576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016124cd565b61363781612af6565b60015473ffffffffffffffffffffffffffffffffffffffff8381169116148061369257506136636106fe565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b806136b7575060015473ffffffffffffffffffffffffffffffffffffffff8281169116145b806136f457506136c56106fe565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b1561372b576040517f727de5c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517fff68754300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063ff68754390602401602060405180830381865afa15801561379c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137c0919061457b565b73ffffffffffffffffffffffffffffffffffffffff1614158061388c57506001546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063fdd5764590602401602060405180830381865afa15801561384f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613873919061457b565b73ffffffffffffffffffffffffffffffffffffffff1614155b156138c3576040517f21ff1e7100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f6e98e5e400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152848116602483015290911690636e98e5e490604401600060405180830381600087803b15801561393857600080fd5b505af115801561394c573d6000803e3d6000fd5b50505050613964826003613faf90919063ffffffff16565b508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4bcbefaef68b99503d502f5a6abe7bca2b183ab8ac55457013c77d084ebd130560405160405180910390a35050565b60005460ff1615613a30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016124cd565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612acc3390565b6001546040517fdc2b21c100000000000000000000000000000000000000000000000000000000815260ff8316600482015273ffffffffffffffffffffffffffffffffffffffff9091169063dc2b21c190602401600060405180830381600087803b158015613af157600080fd5b505af1158015613b05573d6000803e3d6000fd5b505060405160ff841681527f73caacd705657a7d283e48ecf288b73bc517e3aea1bbc9da2fd54a979e8aa950925060200190506133be565b73ffffffffffffffffffffffffffffffffffffffff8116613b8a576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613b926106fe565b6040517fdcf6548200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152919091169063dcf6548290602401600060405180830381600087803b158015613bfd57600080fd5b505af1158015613c11573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841681527f32e53e2e527af8518ae889e5f7e674bc83f7cf68e4cc059aceeaa0e64208b85b925060200190506133be565b6000613c6885856147aa565b6001546040517f172c48c700000000000000000000000000000000000000000000000000000000815260006004820181905292935073ffffffffffffffffffffffffffffffffffffffff9091169063172c48c7906024016040805180830381865afa158015613cdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cff91906147cd565b9150508061ffff168261ffff1614613d6e57613d1a82613fd1565b60025460405161ffff8416815273ffffffffffffffffffffffffffffffffffffffff909116907f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac6509060200160405180910390a25b6001546040517f944ac59f00000000000000000000000000000000000000000000000000000000815261ffff808a1660048301528089166024830152808816604483015280871660648301528516608482015273ffffffffffffffffffffffffffffffffffffffff9091169063944ac59f9060a401600060405180830381600087803b158015613dfd57600080fd5b505af1158015613e11573d6000803e3d6000fd5b505050507f2214a403d5f8d049e52eacca974c6dea01a471e41d6a18903bfaf7dbc709741f878787612710613e4691906147aa565b87613e53886127106147aa565b6040805161ffff96871681529486166020860152928516848401529084166060840152909216608082015290519081900360a00190a150505050505050565b6000826000018281548110613ea957613ea9614726565b9060005260206000200154905092915050565b60008181526001830160205260408120548015613fa5576000613ee06001836147fc565b8554909150600090613ef4906001906147fc565b9050818114613f59576000866000018281548110613f1457613f14614726565b9060005260206000200154905080876000018481548110613f3757613f37614726565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080613f6a57613f6a614813565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610b43565b6000915050610b43565b6000612cc48373ffffffffffffffffffffffffffffffffffffffff8416614296565b6001546002546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015261ffff8416602482015291169063a70bc54290604401600060405180830381600087803b15801561404a57600080fd5b505af115801561405e573d6000803e3d6000fd5b505050506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156140d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140f59190614557565b905060015b818110156106f9576001546040517f172c48c700000000000000000000000000000000000000000000000000000000815260048101839052600091829173ffffffffffffffffffffffffffffffffffffffff9091169063172c48c7906024016040805180830381865afa158015614175573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061419991906147cd565b915091508461ffff168161ffff16111561428c576001546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015261ffff881660248301529091169063a70bc54290604401600060405180830381600087803b15801561422457600080fd5b505af1158015614238573d6000803e3d6000fd5b505060405161ffff8816815273ffffffffffffffffffffffffffffffffffffffff851692507f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650915060200160405180910390a25b50506001016140fa565b60008181526001830160205260408120546142dd57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610b43565b506000610b43565b73ffffffffffffffffffffffffffffffffffffffff8116811461167a57600080fd5b60006020828403121561431957600080fd5b8135612cc4816142e5565b61ffff8116811461167a57600080fd5b6000806040838503121561434757600080fd5b8235614352816142e5565b9150602083013561436281614324565b809150509250929050565b60006020828403121561437f57600080fd5b5035919050565b801515811461167a57600080fd5b600080604083850312156143a757600080fd5b82356143b2816142e5565b9150602083013561436281614386565b600080604083850312156143d557600080fd5b82356143e0816142e5565b91506020830135614362816142e5565b6fffffffffffffffffffffffffffffffff8116811461167a57600080fd5b60006020828403121561442057600080fd5b8135612cc4816143f0565b6000806040838503121561443e57600080fd5b8235614449816143f0565b91506020830135614362816143f0565b60006020828403121561446b57600080fd5b813560ff81168114612cc457600080fd5b64ffffffffff8116811461167a57600080fd5b6000602082840312156144a157600080fd5b8135612cc48161447c565b600080600080600060a086880312156144c457600080fd5b85356144cf81614324565b945060208601356144df81614324565b935060408601356144ef81614324565b925060608601356144ff81614324565b9150608086013561450f81614324565b809150509295509295909350565b60006020828403121561452f57600080fd5b8135612cc481614386565b60006020828403121561454c57600080fd5b8151612cc481614386565b60006020828403121561456957600080fd5b5051919050565b8051612419816142e5565b60006020828403121561458d57600080fd5b8151612cc4816142e5565b6000806000606084860312156145ad57600080fd5b83516145b8816143f0565b60208501519093506145c981614386565b60408501519092506145da8161447c565b809150509250925092565b600080604083850312156145f857600080fd5b8251614603816143f0565b6020840151909250614362816143f0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000602080838503121561465657600080fd5b825167ffffffffffffffff8082111561466e57600080fd5b818501915085601f83011261468257600080fd5b81518181111561469457614694614614565b8060051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f830116810181811085821117156146d7576146d7614614565b6040529182528482019250838101850191888311156146f557600080fd5b938501935b8285101561471a5761470b85614570565b845293850193928501926146fa565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061ffff8083168185168083038211156147a1576147a1614755565b01949350505050565b600061ffff838116908316818110156147c5576147c5614755565b039392505050565b600080604083850312156147e057600080fd5b82516147eb816142e5565b602084015190925061436281614324565b60008282101561480e5761480e614755565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea264697066735822122046c364b67d38a3dd85b57e027716324d90dd1df102f265f0a0e2697babdb3f3b64736f6c634300080a003394525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650a2646970667358221220003b352c5bae3f484adeb5625830766f814568e91b24b1cf441359c6b7c45d8964736f6c634300080a0033"; - -type CurveV1Adapter3AssetsTestConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: CurveV1Adapter3AssetsTestConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class CurveV1Adapter3AssetsTest__factory extends ContractFactory { - constructor(...args: CurveV1Adapter3AssetsTestConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): CurveV1Adapter3AssetsTest { - return super.attach(address) as CurveV1Adapter3AssetsTest; - } - override connect(signer: Signer): CurveV1Adapter3AssetsTest__factory { - return super.connect(signer) as CurveV1Adapter3AssetsTest__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): CurveV1Adapter3AssetsTestInterface { - return new utils.Interface(_abi) as CurveV1Adapter3AssetsTestInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): CurveV1Adapter3AssetsTest { - return new Contract( - address, - _abi, - signerOrProvider - ) as CurveV1Adapter3AssetsTest; - } -} diff --git a/src/types/factories/contracts/test/adapters/CurveV1Adapter_3AssetsTest.t.sol/index.ts b/src/types/factories/contracts/test/adapters/CurveV1Adapter_3AssetsTest.t.sol/index.ts deleted file mode 100644 index fe9f42df..00000000 --- a/src/types/factories/contracts/test/adapters/CurveV1Adapter_3AssetsTest.t.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { CurveV1Adapter3AssetsTest__factory } from "./CurveV1Adapter3AssetsTest__factory"; diff --git a/src/types/factories/contracts/test/adapters/CurveV1Adapter_4AssetsTest.t.sol/CurveV1Adapter4AssetsTest__factory.ts b/src/types/factories/contracts/test/adapters/CurveV1Adapter_4AssetsTest.t.sol/CurveV1Adapter4AssetsTest__factory.ts deleted file mode 100644 index 06a4bb4e..00000000 --- a/src/types/factories/contracts/test/adapters/CurveV1Adapter_4AssetsTest.t.sol/CurveV1Adapter4AssetsTest__factory.ts +++ /dev/null @@ -1,838 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - CurveV1Adapter4AssetsTest, - CurveV1Adapter4AssetsTestInterface, -} from "../../../../../contracts/test/adapters/CurveV1Adapter_4AssetsTest.t.sol/CurveV1Adapter4AssetsTest"; - -const _abi = [ - { - inputs: [], - name: "IncorrectIndexException", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "TokenIsNotInAllowedList", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "onBehalfOf", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "token", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "AddCollateral", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - ], - name: "CloseCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "DecreaseBorrowedAmount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "target", - type: "address", - }, - ], - name: "ExecuteOrder", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "IncreaseBorrowedAmount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "liquidator", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "remainingFunds", - type: "uint256", - }, - ], - name: "LiquidateCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "liquidator", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "remainingFunds", - type: "uint256", - }, - ], - name: "LiquidateExpiredCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [], - name: "MultiCallFinished", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - ], - name: "MultiCallStarted", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newConfigurator", - type: "address", - }, - ], - name: "NewConfigurator", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "onBehalfOf", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "borrowAmount", - type: "uint256", - }, - { - indexed: false, - internalType: "uint16", - name: "referralCode", - type: "uint16", - }, - ], - name: "OpenCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "token", - type: "address", - }, - ], - name: "TokenDisabled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "token", - type: "address", - }, - ], - name: "TokenEnabled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "oldOwner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "TransferAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "bool", - name: "state", - type: "bool", - }, - ], - name: "TransferAccountAllowed", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "", - type: "address", - }, - ], - name: "log_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "log_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - name: "log_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "int256", - name: "", - type: "int256", - }, - ], - name: "log_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "address", - name: "val", - type: "address", - }, - ], - name: "log_named_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes", - name: "val", - type: "bytes", - }, - ], - name: "log_named_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes32", - name: "val", - type: "bytes32", - }, - ], - name: "log_named_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - ], - name: "log_named_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "string", - name: "val", - type: "string", - }, - ], - name: "log_named_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - ], - name: "log_named_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "log_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "logs", - type: "event", - }, - { - inputs: [], - name: "IS_TEST", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "adapter", - outputs: [ - { - internalType: "contract CurveV1Adapter4Assets", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "cft", - outputs: [ - { - internalType: "contract CreditFacadeTestSuite", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditConfigurator", - outputs: [ - { - internalType: "contract CreditConfigurator", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditFacade", - outputs: [ - { - internalType: "contract CreditFacade", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditManager", - outputs: [ - { - internalType: "contract ICreditManagerV2", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "curveV1Mock", - outputs: [ - { - internalType: "contract CurveV1Mock_4Assets", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "failed", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "setUp", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_ACV1_4_01_constructor_sets_correct_values", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_ACV1_4_02A_constructor_reverts_for_unknown_addresses", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_ACV1_4_02_constructor_reverts_for_zero_addresses", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_ACV1_4_03_liquidity_functions_revert_if_user_has_no_account", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_ACV1_4_04A_add_all_liquidity_one_coin_works_as_expected", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_ACV1_4_04_add_liquidity_works_as_expected", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_ACV1_4_05_remove_liquidity_works_as_expected", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_ACV1_4_06_remove_liquidity_imbalance_works_as_expected", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "underlying", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x60806040526000805460ff1916600190811790915580546001600160a01b031916737109709ecfa91a80626ff3989d68f67f5b1dd12d1790553480156200004557600080fd5b506206621f80620000576000396000f3fe60806040523480156200001157600080fd5b50600436106200014f5760003560e01c8063a740b82411620000c0578063d94a15a6116200008b578063f6f1dfbd116200006e578063f6f1dfbd14620002b1578063f9aa028a14620002bb578063fa7626d414620002dc57600080fd5b8063d94a15a61462000286578063df514433146200029057600080fd5b8063a740b8241462000236578063b0dbfcda1462000240578063ba414fa6146200024a578063c12c21c0146200026557600080fd5b80632e9b5037116200011e5780633d4f7f3111620001015780633d4f7f31146200020157806362011a0b146200020b5780636f307dc3146200021557600080fd5b80632e9b503714620001d65780632f7a188114620001e057600080fd5b806303eadcfc14620001545780630a9254e4146200019f5780631fc8a86614620001ab57806329d351d814620001b5575b600080fd5b601054620001759073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b620001a9620002ea565b005b620001a96200034f565b601154620001759073ffffffffffffffffffffffffffffffffffffffff1681565b620001a96200083f565b600354620001759073ffffffffffffffffffffffffffffffffffffffff1681565b620001a962000da6565b620001a962001294565b600654620001759073ffffffffffffffffffffffffffffffffffffffff1681565b620001a962001a43565b620001a962002021565b6200025462002714565b604051901515815260200162000196565b600254620001759073ffffffffffffffffffffffffffffffffffffffff1681565b620001a96200287e565b600554620001759073ffffffffffffffffffffffffffffffffffffffff1681565b620001a962002ee7565b600454620001759073ffffffffffffffffffffffffffffffffffffffff1681565b600054620002549060ff1681565b620002f66004620032ab565b6007546011805473ffffffffffffffffffffffffffffffffffffffff9283167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560085460108054919093169116179055565b60005b60048110156200083c5760006200036a60046200508d565b905060008183815181106200038357620003836200ab6b565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508081604051620003cd906200aa0e565b620003da9291906200abed565b604051809103906000f080158015620003f7573d6000803e3d6000fd5b50601180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169182179055604080517f82c630660000000000000000000000000000000000000000000000000000000081529051600092916382c630669160048083019260209291908290030181865afa15801562000494573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004ba91906200ac42565b6005546040517f9dd55b4500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80841660048301526305f5e1006024830152929350911690639dd55b4590604401600060405180830381600087803b1580156200053457600080fd5b505af115801562000549573d6000803e3d6000fd5b50506001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b158015620005cd57600080fd5b505af1158015620005e2573d6000803e3d6000fd5b5050600480546040517f3e7c88d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811693820193909352612260602482015291169250633e7c88d69150604401600060405180830381600087803b1580156200065e57600080fd5b505af115801562000673573d6000803e3d6000fd5b50506001546040805160048082526024820183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fb2335f2e0000000000000000000000000000000000000000000000000000000017905291517ff28dceb300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909316945063f28dceb3935062000723929091016200ace4565b600060405180830381600087803b1580156200073e57600080fd5b505af115801562000753573d6000803e3d6000fd5b505060025460115460405173ffffffffffffffffffffffffffffffffffffffff92831694509116915083906000906200078c906200aa1c565b73ffffffffffffffffffffffffffffffffffffffff9485168152928416602084015290831660408301529091166060820152608001604051809103906000f080158015620007de573d6000803e3d6000fd5b50601080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169190911790555081905062000833816200ad28565b91505062000352565b50565b60005b60028110156200083c5780151562000859620002ea565b6000620008656200571b565b50601154909150620008a29073ffffffffffffffffffffffffffffffffffffffff166200089c670de0b6b3a764000060646200ad64565b62005b02565b6000604051806080016040528060008152602001600081526020016005670de0b6b3a764000061a410620008d791906200ad64565b620008e391906200ada4565b8152602001600562000900670de0b6b3a7640000612ee06200ad64565b6200090c91906200ada4565b9052905060007f18a7bd76000000000000000000000000000000000000000000000000000000008262000949670de0b6b3a764000060376200ad64565b6040516024016200095c9291906200ae05565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529050620009ff73f39fd6e51aad88f6f4ce6ab8827279cfffb92266826004858862005fb6565b831562000a315760105462000a2b9073ffffffffffffffffffffffffffffffffffffffff168262005fdc565b62000b54565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b15801562000ab157600080fd5b505af115801562000ac6573d6000803e3d6000fd5b505060105473ffffffffffffffffffffffffffffffffffffffff1691506318a7bd7690508362000b00670de0b6b3a764000060376200ad64565b6040518363ffffffff1660e01b815260040162000b1f9291906200ae05565b600060405180830381600087803b15801562000b3a57600080fd5b505af115801562000b4f573d6000803e3d6000fd5b505050505b62000b63600784600062006106565b62000b72600884600062006106565b62000ba3600984600562000b91670de0b6b3a764000061a4106200ad64565b62000b9d91906200ada4565b62006106565b62000bc2600a84600562000b91670de0b6b3a7640000612ee06200ad64565b601154604080517ffc0c546a000000000000000000000000000000000000000000000000000000008152905162000c989273ffffffffffffffffffffffffffffffffffffffff169163fc0c546a9160048083019260209291908290030181865afa15801562000c35573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c5b91906200ac42565b8462000c71670de0b6b3a764000060376200ad64565b62000c86670de0b6b3a764000060646200ad64565b62000c9291906200ae22565b62006128565b601154604080517ffc0c546a000000000000000000000000000000000000000000000000000000008152905162000d549273ffffffffffffffffffffffffffffffffffffffff169163fc0c546a9160048083019260209291908290030181865afa15801562000d0b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000d3191906200ac42565b601154859073ffffffffffffffffffffffffffffffffffffffff16600062006145565b62000d626007600062006169565b62000d706008600062006169565b62000d7e6009600162006169565b62000d8c600a600162006169565b50505050808062000d9d906200ad28565b91505062000842565b60005b60028110156200083c5780151562000dc0620002ea565b600062000dcc6200571b565b5060115490915062000e039073ffffffffffffffffffffffffffffffffffffffff166200089c670de0b6b3a764000060646200ad64565b600060405180608001604052806004670de0b6b3a7640000614e2062000e2a91906200ad64565b62000e3691906200ada4565b815260200162000e4d60036404a817c8006200ada4565b8152602001600562000e6a670de0b6b3a764000061a4106200ad64565b62000e7691906200ada4565b8152602001600562000e93670de0b6b3a7640000612ee06200ad64565b62000e9f91906200ada4565b9052905060007f7d49d8750000000000000000000000000000000000000000000000000000000062000edb670de0b6b3a764000060376200ad64565b8360405160240162000eef9291906200ae3c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152905062000f9173f39fd6e51aad88f6f4ce6ab8827279cfffb922668260048762006189565b831562000fc35760105462000fbd9073ffffffffffffffffffffffffffffffffffffffff168262005fdc565b620010e6565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b1580156200104357600080fd5b505af115801562001058573d6000803e3d6000fd5b505060105473ffffffffffffffffffffffffffffffffffffffff169150637d49d875905062001091670de0b6b3a764000060376200ad64565b846040518363ffffffff1660e01b8152600401620010b19291906200ae3c565b600060405180830381600087803b158015620010cc57600080fd5b505af1158015620010e1573d6000803e3d6000fd5b505050505b62001105600784600462000b91670de0b6b3a7640000614e206200ad64565b6200111e60088462000b9d60036404a817c8006200ada4565b6200113d600984600562000b91670de0b6b3a764000061a4106200ad64565b6200115c600a84600562000b91670de0b6b3a7640000612ee06200ad64565b601154604080517ffc0c546a0000000000000000000000000000000000000000000000000000000081529051620011cf9273ffffffffffffffffffffffffffffffffffffffff169163fc0c546a9160048083019260209291908290030181865afa15801562000c35573d6000803e3d6000fd5b601154604080517ffc0c546a0000000000000000000000000000000000000000000000000000000081529051620012429273ffffffffffffffffffffffffffffffffffffffff169163fc0c546a9160048083019260209291908290030181865afa15801562000d0b573d6000803e3d6000fd5b620012506007600162006169565b6200125e6008600162006169565b6200126c6009600162006169565b6200127a600a600162006169565b5050505080806200128b906200ad28565b91505062000da9565b60005b60028110156200083c57801515620012ae620002ea565b6000620012ba6200571b565b509050620012df6007620012d9670de0b6b3a7640000614e206200ad64565b620061c4565b620012f160086404a817c800620061c4565b6200130d6009620012d9670de0b6b3a764000061a4106200ad64565b62001329600a620012d9670de0b6b3a7640000612ee06200ad64565b6011546200135490600790839073ffffffffffffffffffffffffffffffffffffffff16600062006778565b6011546200137f90600890839073ffffffffffffffffffffffffffffffffffffffff16600062006778565b601154620013aa90600990839073ffffffffffffffffffffffffffffffffffffffff16600062006778565b601154620013d590600a90839073ffffffffffffffffffffffffffffffffffffffff16600062006778565b600060405180608001604052806004670de0b6b3a7640000614e20620013fc91906200ad64565b6200140891906200ada4565b81526020016200141f60036404a817c8006200ada4565b815260200160056200143c670de0b6b3a764000061a4106200ad64565b6200144891906200ada4565b8152602001600562001465670de0b6b3a7640000612ee06200ad64565b6200147191906200ada4565b9052905060007f029b2f340000000000000000000000000000000000000000000000000000000082620014ae670de0b6b3a764000060376200ad64565b604051602401620014c19291906200ae05565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290506200156373f39fd6e51aad88f6f4ce6ab8827279cfffb922668260048762006796565b831562001595576010546200158f9073ffffffffffffffffffffffffffffffffffffffff168262005fdc565b620016b8565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b1580156200161557600080fd5b505af11580156200162a573d6000803e3d6000fd5b505060105473ffffffffffffffffffffffffffffffffffffffff16915063029b2f3490508362001664670de0b6b3a764000060376200ad64565b6040518363ffffffff1660e01b8152600401620016839291906200ae05565b600060405180830381600087803b1580156200169e57600080fd5b505af1158015620016b3573d6000803e3d6000fd5b505050505b620017056007846004620016d7670de0b6b3a7640000614e206200ad64565b620016e391906200ada4565b620016f9670de0b6b3a7640000614e206200ad64565b62000b9d91906200ae22565b6200172f6008846200171e60036404a817c8006200ada4565b62000b9d906404a817c8006200ae22565b6200177060098460056200174e670de0b6b3a764000061a4106200ad64565b6200175a91906200ada4565b620016f9670de0b6b3a764000061a4106200ad64565b620017b1600a8460056200178f670de0b6b3a7640000612ee06200ad64565b6200179b91906200ada4565b620016f9670de0b6b3a7640000612ee06200ad64565b601154604080517ffc0c546a0000000000000000000000000000000000000000000000000000000081529051620018609273ffffffffffffffffffffffffffffffffffffffff169163fc0c546a9160048083019260209291908290030181865afa15801562001824573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200184a91906200ac42565b8462000c92670de0b6b3a764000060376200ad64565b601154604080517ffc0c546a0000000000000000000000000000000000000000000000000000000081529051620019019273ffffffffffffffffffffffffffffffffffffffff169163fc0c546a9160048083019260209291908290030181865afa158015620018d3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620018f991906200ac42565b6001620067d1565b6011546200194b90600790859073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62006778565b6011546200199590600890859073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62006778565b601154620019df90600990859073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62006778565b60115462001a2990600a90859073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62006778565b50505050808062001a3a906200ad28565b91505062001297565b601054604080517f0dfe1681000000000000000000000000000000000000000000000000000000008152905162001bba9273ffffffffffffffffffffffffffffffffffffffff1691630dfe16819160048083019260209291908290030181865afa15801562001ab6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001adc91906200ac42565b6000546040517f67b426450000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff16906367b426459062001b3a906007906004016200aebd565b602060405180830381865afa15801562001b58573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001b7e91906200ac42565b6040518060400160405280601081526020017f496e636f727265637420746f6b656e3000000000000000000000000000000000815250620067ed565b601054604080517fd21220a7000000000000000000000000000000000000000000000000000000008152905162001d319273ffffffffffffffffffffffffffffffffffffffff169163d21220a79160048083019260209291908290030181865afa15801562001c2d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c5391906200ac42565b6000546040517f67b426450000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff16906367b426459062001cb1906008906004016200aebd565b602060405180830381865afa15801562001ccf573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001cf591906200ac42565b6040518060400160405280601081526020017f496e636f727265637420746f6b656e3100000000000000000000000000000000815250620067ed565b601054604080517f25be124e000000000000000000000000000000000000000000000000000000008152905162001ea89273ffffffffffffffffffffffffffffffffffffffff16916325be124e9160048083019260209291908290030181865afa15801562001da4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001dca91906200ac42565b6000546040517f67b426450000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff16906367b426459062001e28906009906004016200aebd565b602060405180830381865afa15801562001e46573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001e6c91906200ac42565b6040518060400160405280601081526020017f496e636f727265637420746f6b656e3200000000000000000000000000000000815250620067ed565b601054604080517fef14101e00000000000000000000000000000000000000000000000000000000815290516200201f9273ffffffffffffffffffffffffffffffffffffffff169163ef14101e9160048083019260209291908290030181865afa15801562001f1b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001f4191906200ac42565b6000546040517f67b426450000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff16906367b426459062001f9f90600a906004016200aebd565b602060405180830381865afa15801562001fbd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001fe391906200ac42565b6040518060400160405280601081526020017f496e636f727265637420746f6b656e3300000000000000000000000000000000815250620067ed565b565b60005b60028110156200083c578015156200203b620002ea565b600080546040517f67b426450000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff16906367b42645906200209a906009906004016200aebd565b602060405180830381865afa158015620020b8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620020de91906200ac42565b600f5490915073ffffffffffffffffffffffffffffffffffffffff166000620021066200571b565b509050620021256009620012d9670de0b6b3a764000061a4106200ad64565b6000604051806080016040528060008152602001600081526020016001670de0b6b3a764000061a4106200215a91906200ad64565b6200216691906200ae22565b8152600060209091018190529091507fec026ca7000000000000000000000000000000000000000000000000000000006002620021b0816b033b2e3c9fd0803ce80000006200ada4565b60405160ff90921660248301526044820152606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152905060007f029b2f3400000000000000000000000000000000000000000000000000000000836002600162002282670de0b6b3a764000061a4106200ad64565b6200228e91906200ae22565b6200229a91906200ada4565b604051602401620022ad9291906200ae05565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526011549091506200235890600990869073ffffffffffffffffffffffffffffffffffffffff16600062006778565b8615620023d157601054601154620023a69173ffffffffffffffffffffffffffffffffffffffff908116911673f39fd6e51aad88f6f4ce6ab8827279cfffb92266848a8a6000600162006866565b601054620023cb9073ffffffffffffffffffffffffffffffffffffffff168362005fdc565b6200255f565b601054601154620024189173ffffffffffffffffffffffffffffffffffffffff908116911673f39fd6e51aad88f6f4ce6ab8827279cfffb92266848a8a6000600162006f57565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b1580156200249857600080fd5b505af1158015620024ad573d6000803e3d6000fd5b505060105473ffffffffffffffffffffffffffffffffffffffff16915063ec026ca790506002620024eb816b033b2e3c9fd0803ce80000006200ada4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168152600f9290920b60048301526024820152604401600060405180830381600087803b1580156200254557600080fd5b505af11580156200255a573d6000803e3d6000fd5b505050505b6200256e600985600162006106565b601154604080517ffc0c546a00000000000000000000000000000000000000000000000000000000815290516200263a9273ffffffffffffffffffffffffffffffffffffffff169163fc0c546a9160048083019260209291908290030181865afa158015620025e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200260791906200ac42565b856002600162002622670de0b6b3a764000061a4106200ad64565b6200262e91906200ae22565b62000c9291906200ada4565b601154604080517ffc0c546a0000000000000000000000000000000000000000000000000000000081529051620026ad9273ffffffffffffffffffffffffffffffffffffffff169163fc0c546a9160048083019260209291908290030181865afa158015620018d3573d6000803e3d6000fd5b601154620026f790600990869073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62006778565b5050505050505080806200270b906200ad28565b91505062002024565b60008054610100900460ff1615620027355750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620028795760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091620027dd917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016200aed3565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905262002817916200af1d565b6000604051808303816000865af19150503d806000811462002856576040519150601f19603f3d011682016040523d82523d6000602084013e6200285b565b606091505b50915050808060200190518101906200287591906200af3b565b9150505b919050565b60005b60048110156200083c5760006200289960046200508d565b6000546040517f67b4264500000000000000000000000000000000000000000000000000000000815291925062010000900473ffffffffffffffffffffffffffffffffffffffff16906367b4264590620028f9906006906004016200aebd565b602060405180830381865afa15801562002917573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200293d91906200ac42565b8183815181106200295257620029526200ab6b565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505080816040516200299c906200aa0e565b620029a99291906200abed565b604051809103906000f080158015620029c6573d6000803e3d6000fd5b50601180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169182179055604080517f82c630660000000000000000000000000000000000000000000000000000000081529051600092916382c630669160048083019260209291908290030181865afa15801562002a63573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002a8991906200ac42565b6005546040517f9dd55b4500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80841660048301526305f5e1006024830152929350911690639dd55b4590604401600060405180830381600087803b15801562002b0357600080fd5b505af115801562002b18573d6000803e3d6000fd5b50506001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b15801562002b9c57600080fd5b505af115801562002bb1573d6000803e3d6000fd5b5050600480546040517f3e7c88d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811693820193909352612260602482015291169250633e7c88d69150604401600060405180830381600087803b15801562002c2d57600080fd5b505af115801562002c42573d6000803e3d6000fd5b50506001546000546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316945063f28dceb393507f98c0f5f2000000000000000000000000000000000000000000000000000000009262010000909204909116906367b426459062002cd5906006906004016200aebd565b602060405180830381865afa15801562002cf3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002d1991906200ac42565b60405173ffffffffffffffffffffffffffffffffffffffff9091166024820152604401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e084901b909216825262002dce916004016200ace4565b600060405180830381600087803b15801562002de957600080fd5b505af115801562002dfe573d6000803e3d6000fd5b505060025460115460405173ffffffffffffffffffffffffffffffffffffffff928316945091169150839060009062002e37906200aa1c565b73ffffffffffffffffffffffffffffffffffffffff9485168152928416602084015290831660408301529091166060820152608001604051809103906000f08015801562002e89573d6000803e3d6000fd5b50601080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169190911790555081905062002ede816200ad28565b91505062002881565b60408051608081018252600180825260026020830152600382840152600460608301819052905492517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb5ba4c4d0000000000000000000000000000000000000000000000000000000091810191909152909173ffffffffffffffffffffffffffffffffffffffff169063c31eb0e090602401600060405180830381600087803b15801562002f9857600080fd5b505af115801562002fad573d6000803e3d6000fd5b50506010546040517f029b2f3400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116925063029b2f3491506200300c9084906000906004016200ae05565b600060405180830381600087803b1580156200302757600080fd5b505af11580156200303c573d6000803e3d6000fd5b50506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb5ba4c4d00000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff909116925063c31eb0e09150602401600060405180830381600087803b158015620030cc57600080fd5b505af1158015620030e1573d6000803e3d6000fd5b50506010546040517f7d49d87500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169250637d49d8759150620031409060009085906004016200ae3c565b600060405180830381600087803b1580156200315b57600080fd5b505af115801562003170573d6000803e3d6000fd5b50506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb5ba4c4d00000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff909116925063c31eb0e09150602401600060405180830381600087803b1580156200320057600080fd5b505af115801562003215573d6000803e3d6000fd5b50506010546040517f18a7bd7600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911692506318a7bd769150620032749084906001906004016200ae05565b600060405180830381600087803b1580156200328f57600080fd5b505af1158015620032a4573d6000803e3d6000fd5b5050505050565b620032b562007445565b604080516080810190915280600781526020016008815260200160098152602001600a9052620032ea90600d9060046200aa2a565b50604080516080810190915280600181526020016002815260200160058152602001600490526200332090600e9060046200aa2a565b5060006200332e826200508d565b905060006200333d8362007451565b905060008360021415620037865782826040516200335b906200aad5565b620033689291906200abed565b604051809103906000f08015801562003385573d6000803e3d6000fd5b50600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600554604080517f2954018c00000000000000000000000000000000000000000000000000000000815290519190921691632954018c9160048083019260209291908290030181865afa15801562003423573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200344991906200ac42565b600754600554604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691632630c12f916004808201926020929091908290030181865afa158015620034c1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620034e791906200ac42565b73ffffffffffffffffffffffffffffffffffffffff16639dcb511a866000815181106200351857620035186200ab6b565b60200260200101516040518263ffffffff1660e01b815260040162003559919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa15801562003577573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200359d91906200ac42565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200360b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200363191906200ac42565b73ffffffffffffffffffffffffffffffffffffffff16639dcb511a876001815181106200366257620036626200ab6b565b60200260200101516040518263ffffffff1660e01b8152600401620036a3919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa158015620036c1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620036e791906200ac42565b604051620036f5906200aae3565b73ffffffffffffffffffffffffffffffffffffffff948516815292841660208401529083166040830152909116606082015260a0608082018190526011908201527f43757276654c503250726963654665656400000000000000000000000000000060c082015260e0015b604051809103906000f0801580156200377d573d6000803e3d6000fd5b50905062004452565b836003141562003cfc578282604051620037a0906200aaf1565b620037ad9291906200abed565b604051809103906000f080158015620037ca573d6000803e3d6000fd5b50600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600554604080517f2954018c00000000000000000000000000000000000000000000000000000000815290519190921691632954018c9160048083019260209291908290030181865afa15801562003868573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200388e91906200ac42565b600754600554604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691632630c12f916004808201926020929091908290030181865afa15801562003906573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200392c91906200ac42565b73ffffffffffffffffffffffffffffffffffffffff16639dcb511a866000815181106200395d576200395d6200ab6b565b60200260200101516040518263ffffffff1660e01b81526004016200399e919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa158015620039bc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620039e291906200ac42565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562003a50573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003a7691906200ac42565b73ffffffffffffffffffffffffffffffffffffffff16639dcb511a8760018151811062003aa75762003aa76200ab6b565b60200260200101516040518263ffffffff1660e01b815260040162003ae8919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa15801562003b06573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003b2c91906200ac42565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562003b9a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003bc091906200ac42565b73ffffffffffffffffffffffffffffffffffffffff16639dcb511a8860028151811062003bf15762003bf16200ab6b565b60200260200101516040518263ffffffff1660e01b815260040162003c32919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa15801562003c50573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003c7691906200ac42565b60405162003c84906200aaff565b73ffffffffffffffffffffffffffffffffffffffff95861681529385166020850152918416604084015283166060830152909116608082015260c060a082018190526011908201527f43757276654c503350726963654665656400000000000000000000000000000060e08201526101000162003760565b8360041415620043c557828260405162003d16906200aa0e565b62003d239291906200abed565b604051809103906000f08015801562003d40573d6000803e3d6000fd5b50600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600554604080517f2954018c00000000000000000000000000000000000000000000000000000000815290519190921691632954018c9160048083019260209291908290030181865afa15801562003dde573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003e0491906200ac42565b600754600554604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691632630c12f916004808201926020929091908290030181865afa15801562003e7c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003ea291906200ac42565b73ffffffffffffffffffffffffffffffffffffffff16639dcb511a8660008151811062003ed35762003ed36200ab6b565b60200260200101516040518263ffffffff1660e01b815260040162003f14919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa15801562003f32573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003f5891906200ac42565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562003fc6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003fec91906200ac42565b73ffffffffffffffffffffffffffffffffffffffff16639dcb511a876001815181106200401d576200401d6200ab6b565b60200260200101516040518263ffffffff1660e01b81526004016200405e919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa1580156200407c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620040a291906200ac42565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562004110573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200413691906200ac42565b73ffffffffffffffffffffffffffffffffffffffff16639dcb511a886002815181106200416757620041676200ab6b565b60200260200101516040518263ffffffff1660e01b8152600401620041a8919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa158015620041c6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620041ec91906200ac42565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200425a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200428091906200ac42565b73ffffffffffffffffffffffffffffffffffffffff16639dcb511a89600381518110620042b157620042b16200ab6b565b60200260200101516040518263ffffffff1660e01b8152600401620042f2919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa15801562004310573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200433691906200ac42565b60405162004344906200ab0d565b73ffffffffffffffffffffffffffffffffffffffff96871681529486166020860152928516604085015290841660608401528316608083015290911660a082015260e060c082018190526011908201527f43757276654c50345072696365466565640000000000000000000000000000006101008201526101200162003760565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f636f7374727563746f723a20496e636f7272656374206e436f696e732070617260448201527f616d65746572000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620044c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620044e691906200ac42565b600f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283161790556001546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201529116906306447d5690602401600060405180830381600087803b1580156200459157600080fd5b505af1158015620045a6573d6000803e3d6000fd5b50505050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562004618573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200463e91906200ac42565b600f546040517fe8a97a3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152838216602482015291169063e8a97a3e90604401600060405180830381600087803b158015620046b357600080fd5b505af1158015620046c8573d6000803e3d6000fd5b505060048054600f546040517f3e7c88d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216938101939093526124546024840152169250633e7c88d69150604401600060405180830381600087803b1580156200474657600080fd5b505af11580156200475b573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620047ca57600080fd5b505af1158015620047df573d6000803e3d6000fd5b505050508360021415620048c657600254600754600f5460405173ffffffffffffffffffffffffffffffffffffffff93841693928316929091169060009062004828906200ab1b565b73ffffffffffffffffffffffffffffffffffffffff9485168152928416602084015290831660408301529091166060820152608001604051809103906000f0801580156200487a573d6000803e3d6000fd5b50600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905562004950565b83600314156200490b57600254600754600f5460405173ffffffffffffffffffffffffffffffffffffffff93841693928316929091169060009062004828906200ab29565b8360041415620043c557600254600754600f5460405173ffffffffffffffffffffffffffffffffffffffff93841693928316929091169060009062004828906200aa1c565b6001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b158015620049d057600080fd5b505af1158015620049e5573d6000803e3d6000fd5b5050600480546007546008546040517f7bccacee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283169481019490945281166024840152169250637bccacee9150604401600060405180830381600087803b15801562004a6557600080fd5b505af115801562004a7a573d6000803e3d6000fd5b505060005462010000900473ffffffffffffffffffffffffffffffffffffffff16915063eebab8ef9050600773f39fd6e51aad88f6f4ce6ab8827279cfffb9226662004ad1670de0b6b3a7640000614e206200ad64565b6040518463ffffffff1660e01b815260040162004af1939291906200af5f565b600060405180830381600087803b15801562004b0c57600080fd5b505af115801562004b21573d6000803e3d6000fd5b505060005462010000900473ffffffffffffffffffffffffffffffffffffffff16915063eebab8ef9050600173f39fd6e51aad88f6f4ce6ab8827279cfffb9226662004b78670de0b6b3a7640000614e206200ad64565b6040518463ffffffff1660e01b815260040162004b98939291906200af5f565b600060405180830381600087803b15801562004bb357600080fd5b505af115801562004bc8573d6000803e3d6000fd5b50506000546007805473ffffffffffffffffffffffffffffffffffffffff620100009093048316945063eebab8ef935090911662004c11670de0b6b3a7640000614e206200ad64565b6040518463ffffffff1660e01b815260040162004c31939291906200af5f565b600060405180830381600087803b15801562004c4c57600080fd5b505af115801562004c61573d6000803e3d6000fd5b50506000546007546040517feebab8ef00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff620100009093048316945063eebab8ef935062004cd09260089216906404a817c800906004016200af5f565b600060405180830381600087803b15801562004ceb57600080fd5b505af115801562004d00573d6000803e3d6000fd5b505050506003841062004da75760005460075473ffffffffffffffffffffffffffffffffffffffff6201000090920482169163eebab8ef916009911662004d52670de0b6b3a764000061a4106200ad64565b6040518463ffffffff1660e01b815260040162004d72939291906200af5f565b600060405180830381600087803b15801562004d8d57600080fd5b505af115801562004da2573d6000803e3d6000fd5b505050505b6004841062004e4a5760005460075473ffffffffffffffffffffffffffffffffffffffff6201000090920482169163eebab8ef91600a911662004df5670de0b6b3a7640000612ee06200ad64565b6040518463ffffffff1660e01b815260040162004e15939291906200af5f565b600060405180830381600087803b15801562004e3057600080fd5b505af115801562004e45573d6000803e3d6000fd5b505050505b600154600854604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152600760448201527f4144415054455200000000000000000000000000000000000000000000000000606482015291169063c657c71890608401600060405180830381600087803b15801562004ef057600080fd5b505af115801562004f05573d6000803e3d6000fd5b5050600154600754604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152600a60448201527f43555256455f4d4f434b0000000000000000000000000000000000000000000060648201529116925063c657c7189150608401600060405180830381600087803b15801562004faf57600080fd5b505af115801562004fc4573d6000803e3d6000fd5b5050600154600f54604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152600e60448201527f43555256455f4c505f544f4b454e00000000000000000000000000000000000060648201529116925063c657c7189150608401600060405180830381600087803b1580156200506e57600080fd5b505af115801562005083573d6000803e3d6000fd5b5050505050505050565b6060600482111562005122576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f676574506f6f6c546f6b656e733a20496e636f7272656374206e436f696e732060448201527f706172616d657465720000000000000000000000000000000000000000000000606482015260840162004449565b8167ffffffffffffffff8111156200513e576200513e6200af96565b60405190808252806020026020018201604052801562005168578160200160208202803683370190505b50905060005b82811015620057155760005462010000900473ffffffffffffffffffffffffffffffffffffffff166367b42645600d8360048110620051b157620051b16200ab6b565b602091828204019190069054906101000a900460ff166040518263ffffffff1660e01b8152600401620051e591906200aebd565b602060405180830381865afa15801562005203573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200522991906200ac42565b8282815181106200523e576200523e6200ab6b565b73ffffffffffffffffffffffffffffffffffffffff9283166020918202929092010152600254835191169063f67c5bd0908490849081106200528457620052846200ab6b565b60200260200101516040518263ffffffff1660e01b8152600401620052c5919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa158015620052e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200530991906200afc5565b62005700576001546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff909116906306447d5690602401600060405180830381600087803b1580156200538e57600080fd5b505af1158015620053a3573d6000803e3d6000fd5b50505050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562005415573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200543b91906200ac42565b73ffffffffffffffffffffffffffffffffffffffff1663e8a97a3e8383815181106200546b576200546b6200ab6b565b602090810291909101015160005462010000900473ffffffffffffffffffffffffffffffffffffffff166398cdaadf600d8660048110620054b057620054b06200ab6b565b602091828204019190069054906101000a900460ff166040518263ffffffff1660e01b8152600401620054e491906200aebd565b602060405180830381865afa15801562005502573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200552891906200ac42565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156200559657600080fd5b505af1158015620055ab573d6000803e3d6000fd5b5050600454845173ffffffffffffffffffffffffffffffffffffffff9091169250633e7c88d69150849084908110620055e857620055e86200ab6b565b60209081029190910101516040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff90911660048201526124546024820152604401600060405180830381600087803b1580156200566257600080fd5b505af115801562005677573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620056e657600080fd5b505af1158015620056fb573d6000803e3d6000fd5b505050505b806200570c816200ad28565b9150506200516e565b50919050565b6000806000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635f7c9bd06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200578e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620057b491906200afc5565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015291925073ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b1580156200583557600080fd5b505af11580156200584a573d6000803e3d6000fd5b50506003546040517f6c8f225d0000000000000000000000000000000000000000000000000000000081526004810185905273f39fd6e51aad88f6f4ce6ab8827279cfffb92266602482015260646044820181905260009082015273ffffffffffffffffffffffffffffffffffffffff9091169250636c8f225d9150608401600060405180830381600087803b158015620058e457600080fd5b505af1158015620058f9573d6000803e3d6000fd5b50506002546040517fe958b70400000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063e958b7049150602401602060405180830381865afa15801562005980573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620059a691906200ac42565b6006546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80841660048301529295509116906370a0823190602401602060405180830381865afa15801562005a19573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005a3f91906200afc5565b600154604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301526024820192909252600d60448201527f6372656469744163636f756e74000000000000000000000000000000000000006064820152929450169063c657c71890608401600060405180830381600087803b15801562005ae457600080fd5b505af115801562005af9573d6000803e3d6000fd5b50505050509091565b60008273ffffffffffffffffffffffffffffffffffffffff1663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562005b50573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005b7691906200ac42565b6040517f1652e9fc00000000000000000000000000000000000000000000000000000000815230600482015290915073ffffffffffffffffffffffffffffffffffffffff821690631652e9fc90602401600060405180830381600087803b15801562005be157600080fd5b505af115801562005bf6573d6000803e3d6000fd5b50506040517f40c10f1900000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660048201526024810185905273ffffffffffffffffffffffffffffffffffffffff841692506340c10f1991506044016020604051808303816000875af115801562005c82573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005ca891906200af3b565b506040517f1652e9fc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152821690631652e9fc90602401600060405180830381600087803b15801562005d1357600080fd5b505af115801562005d28573d6000803e3d6000fd5b50506001546040517f06447d5600000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff90911692506306447d569150602401600060405180830381600087803b15801562005dac57600080fd5b505af115801562005dc1573d6000803e3d6000fd5b50506002546040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6024820152908416925063095ea7b391506044016020604051808303816000875af115801562005e5e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005e8491906200af3b565b506003546040517f5978103400000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff83811660248301526044820185905290911690635978103490606401600060405180830381600087803b15801562005f1457600080fd5b505af115801562005f29573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562005f9857600080fd5b505af115801562005fad573d6000803e3d6000fd5b50505050505050565b600062005fc38362007ad9565b905062005fd4868686848662007ba1565b505050505050565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b1580156200605c57600080fd5b505af115801562006071573d6000803e3d6000fd5b50506003546040805180820190915273ffffffffffffffffffffffffffffffffffffffff868116825260208201869052909116925063caa5c23f9150620060b89062007bde565b6040518263ffffffff1660e01b8152600401620060d691906200afdf565b600060405180830381600087803b158015620060f157600080fd5b505af115801562005fd4573d6000803e3d6000fd5b620061238383836040518060200160405280600081525062007c47565b505050565b620061238383836040518060200160405280600081525062007d77565b62006163848484846040518060200160405280600081525062007f32565b50505050565b6200618582826040518060200160405280600081525062008170565b5050565b600062006196836200508d565b600754909150620032a49086908690859073ffffffffffffffffffffffffffffffffffffffff16856200828f565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663406c8e2f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562006232573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200625891906200ac42565b73ffffffffffffffffffffffffffffffffffffffff1663eebab8ef8373f39fd6e51aad88f6f4ce6ab8827279cfffb92266846040518463ffffffff1660e01b8152600401620062aa939291906200af5f565b600060405180830381600087803b158015620062c557600080fd5b505af1158015620062da573d6000803e3d6000fd5b50506001546040517f06447d5600000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff90911692506306447d569150602401600060405180830381600087803b1580156200635e57600080fd5b505af115801562006373573d6000803e3d6000fd5b50505050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663406c8e2f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620063e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200640b91906200ac42565b73ffffffffffffffffffffffffffffffffffffffff166367b42645836040518263ffffffff1660e01b81526004016200644591906200aebd565b602060405180830381865afa15801562006463573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200648991906200ac42565b6002546040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602482015291169063095ea7b3906044016020604051808303816000875af115801562006521573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200654791906200af3b565b50600354600554604080517f406c8e2f000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169363597810349373f39fd6e51aad88f6f4ce6ab8827279cfffb922669391169163406c8e2f916004808201926020929091908290030181865afa158015620065db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200660191906200ac42565b73ffffffffffffffffffffffffffffffffffffffff166367b42645866040518263ffffffff1660e01b81526004016200663b91906200aebd565b602060405180830381865afa15801562006659573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200667f91906200ac42565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff92831660048201529116602482015260448101849052606401600060405180830381600087803b158015620066f457600080fd5b505af115801562006709573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620060f157600080fd5b620061638484848460405180602001604052806000815250620088fe565b6000620067a3836200508d565b600754909150620032a49086908690859073ffffffffffffffffffffffffffffffffffffffff168562008a34565b6200618582826040518060200160405280600081525062009657565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161462006123577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf3583816040516200685291906200b08b565b60405180910390a1620061238383620099cd565b6002546040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152600092169063e958b70490602401602060405180830381865afa158015620068d8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620068fe91906200ac42565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000918716906370a0823190602401602060405180830381865afa15801562006971573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200699791906200afc5565b600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481019290925260006024830181905260448301819052606483015291925073ffffffffffffffffffffffffffffffffffffffff9091169063491cc7c290608401600060405180830381600087803b15801562006a1e57600080fd5b505af115801562006a33573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff8b1692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a2821562006bb1576001546002546003546040805173ffffffffffffffffffffffffffffffffffffffff92831660248201528d831660448201528a831660648201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6084808301919091528251808303909101815260a490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f46fb371d0000000000000000000000000000000000000000000000000000000017905290517fbd6af4340000000000000000000000000000000000000000000000000000000081529382169363bd6af4349362006b7c931691906004016200b0d4565b600060405180830381600087803b15801562006b9757600080fd5b505af115801562006bac573d6000803e3d6000fd5b505050505b60015460025460035460405173ffffffffffffffffffffffffffffffffffffffff9384169363bd6af434938116927f6ce4074a000000000000000000000000000000000000000000000000000000009262006c1792909116908f908e906024016200b10d565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b909216825262006caa92916004016200b0d4565b600060405180830381600087803b15801562006cc557600080fd5b505af115801562006cda573d6000803e3d6000fd5b5050600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526024810192909252600060448301819052606483015273ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b15801562006d6057600080fd5b505af115801562006d75573d6000803e3d6000fd5b505060035460405173ffffffffffffffffffffffffffffffffffffffff8d8116945090911691507faed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab0390600090a3821562006f4b5760015460025460035473ffffffffffffffffffffffffffffffffffffffff9283169263bd6af434928116917f46fb371d0000000000000000000000000000000000000000000000000000000091168d8b8a62006e46577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62006e49565b60015b60405173ffffffffffffffffffffffffffffffffffffffff9485166024820152928416604484015292166064820152608481019190915260a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b909216825262006f1692916004016200b0d4565b600060405180830381600087803b15801562006f3157600080fd5b505af115801562006f46573d6000803e3d6000fd5b505050505b50505050505050505050565b6002546040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152600092169063e958b70490602401602060405180830381865afa15801562006fc9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062006fef91906200ac42565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000918716906370a0823190602401602060405180830381865afa15801562007062573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200708891906200afc5565b90508215620071c0576001546002546040805173ffffffffffffffffffffffffffffffffffffffff8c811660248301528d811660448301528a811660648301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6084808401919091528351808403909101815260a490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f46fb371d0000000000000000000000000000000000000000000000000000000017905291517fbd6af4340000000000000000000000000000000000000000000000000000000081529382169363bd6af434936200718b931691906004016200b0d4565b600060405180830381600087803b158015620071a657600080fd5b505af1158015620071bb573d6000803e3d6000fd5b505050505b60015460025460405173ffffffffffffffffffffffffffffffffffffffff9283169263bd6af4349216907f6ce4074a000000000000000000000000000000000000000000000000000000009062007220908d908f908e906024016200b10d565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b9092168252620072b392916004016200b0d4565b600060405180830381600087803b158015620072ce57600080fd5b505af1158015620072e3573d6000803e3d6000fd5b5050600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526024810192909252600060448301819052606483015273ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b1580156200736957600080fd5b505af11580156200737e573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff808d1693508b1691507faed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab0390600090a3821562006f4b5760015460025473ffffffffffffffffffffffffffffffffffffffff9182169163bd6af43491167f46fb371d000000000000000000000000000000000000000000000000000000008b8d8b8a62006e46577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62006e49565b6200201f600162009b0b565b60606004821115620074e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f676574556e6465726c79696e67506f6f6c546f6b656e733a20496e636f72726560448201527f6374206e436f696e7320706172616d6574657200000000000000000000000000606482015260840162004449565b8167ffffffffffffffff8111156200750257620075026200af96565b6040519080825280602002602001820160405280156200752c578160200160208202803683370190505b50905060005b82811015620057155760005462010000900473ffffffffffffffffffffffffffffffffffffffff166367b42645600e83600481106200757557620075756200ab6b565b602091828204019190069054906101000a900460ff166040518263ffffffff1660e01b8152600401620075a991906200aebd565b602060405180830381865afa158015620075c7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620075ed91906200ac42565b8282815181106200760257620076026200ab6b565b73ffffffffffffffffffffffffffffffffffffffff9283166020918202929092010152600254835191169063f67c5bd0908490849081106200764857620076486200ab6b565b60200260200101516040518263ffffffff1660e01b815260040162007689919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa158015620076a7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620076cd91906200afc5565b62007ac4576001546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff909116906306447d5690602401600060405180830381600087803b1580156200775257600080fd5b505af115801562007767573d6000803e3d6000fd5b50505050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620077d9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620077ff91906200ac42565b73ffffffffffffffffffffffffffffffffffffffff1663e8a97a3e8383815181106200782f576200782f6200ab6b565b602090810291909101015160005462010000900473ffffffffffffffffffffffffffffffffffffffff166398cdaadf600e86600481106200787457620078746200ab6b565b602091828204019190069054906101000a900460ff166040518263ffffffff1660e01b8152600401620078a891906200aebd565b602060405180830381865afa158015620078c6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620078ec91906200ac42565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156200795a57600080fd5b505af11580156200796f573d6000803e3d6000fd5b5050600454845173ffffffffffffffffffffffffffffffffffffffff9091169250633e7c88d69150849084908110620079ac57620079ac6200ab6b565b60209081029190910101516040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff90911660048201526124546024820152604401600060405180830381600087803b15801562007a2657600080fd5b505af115801562007a3b573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562007aaa57600080fd5b505af115801562007abf573d6000803e3d6000fd5b505050505b8062007ad0816200ad28565b91505062007532565b60408051600480825260a08201909252606091602082016080803683375050835182519293509183915060009062007b155762007b156200ab6b565b602090810291909101015281600160200201518160018151811062007b3e5762007b3e6200ab6b565b602090810291909101015281600260200201518160028151811062007b675762007b676200ab6b565b602090810291909101015281600360200201518160038151811062007b905762007b906200ab6b565b602002602001018181525050919050565b600062007bae846200508d565b60075490915062005fd490879087908690869073ffffffffffffffffffffffffffffffffffffffff16866200a033565b604080516001808252818301909252606091816020015b60408051808201909152600081526060602082015281526020019060019003908162007bf5579050509050818160008151811062007c375762007c376200ab6b565b6020026020010181905250919050565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1662007cce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f74657374546f6b656e5375697465206973206e6f742073657400000000000000604482015260640162004449565b6000546040517f67b42645000000000000000000000000000000000000000000000000000000008152620061639162010000900473ffffffffffffffffffffffffffffffffffffffff16906367b426459062007d2f9088906004016200aebd565b602060405180830381865afa15801562007d4d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062007d7391906200ac42565b8484845b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600091908616906370a0823190602401602060405180830381865afa15801562007de8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062007e0e91906200afc5565b905082811462007f26577f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f828673ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562007e86573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262007ece91908101906200b148565b60405160200162007ee19291906200b21f565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905262007f1d9187906200b2a5565b60405180910390a15b620032a481846200a6c9565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301526000919087169063dd62ed3e90604401602060405180830381865afa15801562007fab573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062007fd191906200afc5565b905082811462008164577f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f828773ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562008049573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200809191908101906200b148565b604051602001620080a49291906200b2df565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052620080e09188906200b2a5565b60405180910390a160408051818152600a818301527f207370656e6465723a2000000000000000000000000000000000000000000000606082015273ffffffffffffffffffffffffffffffffffffffff8616602082015290517f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f9181900360800190a15b62005fd481846200a6c9565b600554604080517f406c8e2f0000000000000000000000000000000000000000000000000000000081529051620061239273ffffffffffffffffffffffffffffffffffffffff169163406c8e2f9160048083019260209291908290030181865afa158015620081e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200820991906200ac42565b73ffffffffffffffffffffffffffffffffffffffff166367b42645856040518263ffffffff1660e01b81526004016200824391906200aebd565b602060405180830381865afa15801562008261573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200828791906200ac42565b838362009657565b80516002546040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152600092169063e958b70490602401602060405180830381865afa15801562008303573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200832991906200ac42565b905084156200840f57600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481019290925260006024830181905260448301819052606483015273ffffffffffffffffffffffffffffffffffffffff169063491cc7c290608401600060405180830381600087803b158015620083b457600080fd5b505af1158015620083c9573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff8a1692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a25b60005b828110156200859657600154600254855173ffffffffffffffffffffffffffffffffffffffff9283169263bd6af4349216907f51e3f160000000000000000000000000000000000000000000000000000000009086908990879081106200847d576200847d6200ab6b565b6020026020010151604051602401620084b992919073ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b90921682526200854c92916004016200b0d4565b600060405180830381600087803b1580156200856757600080fd5b505af11580156200857c573d6000803e3d6000fd5b5050505080806200858d906200ad28565b91505062008412565b5060015460025473ffffffffffffffffffffffffffffffffffffffff9182169163bd6af43491167f6ce4074a0000000000000000000000000000000000000000000000000000000088620085eb578a62008605565b60035473ffffffffffffffffffffffffffffffffffffffff165b888b6040516024016200861b939291906200b10d565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b9092168252620086ae92916004016200b0d4565b600060405180830381600087803b158015620086c957600080fd5b505af1158015620086de573d6000803e3d6000fd5b5050600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526024810192909252600060448301819052606483015273ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b1580156200876457600080fd5b505af115801562008779573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff1685620087a15787620087bb565b60035473ffffffffffffffffffffffffffffffffffffffff165b73ffffffffffffffffffffffffffffffffffffffff167faed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab0360405160405180910390a36001546002546040805173ffffffffffffffffffffffffffffffffffffffff85811660248084019190915283518084039091018152604490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f953730180000000000000000000000000000000000000000000000000000000017905291517fbd6af4340000000000000000000000000000000000000000000000000000000081529382169363bd6af43493620088c1931691906004016200b0d4565b600060405180830381600087803b158015620088dc57600080fd5b505af1158015620088f1573d6000803e3d6000fd5b5050505050505050505050565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1662008985576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f74657374546f6b656e5375697465206973206e6f742073657400000000000000604482015260640162004449565b6000546040517f67b42645000000000000000000000000000000000000000000000000000000008152620032a49162010000900473ffffffffffffffffffffffffffffffffffffffff16906367b4264590620089e69089906004016200aebd565b602060405180830381865afa15801562008a04573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062008a2a91906200ac42565b8585858562007f32565b80516002546040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152600092169063e958b70490602401602060405180830381865afa15801562008aa8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062008ace91906200ac42565b9050841562008bb457600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481019290925260006024830181905260448301819052606483015273ffffffffffffffffffffffffffffffffffffffff169063491cc7c290608401600060405180830381600087803b15801562008b5957600080fd5b505af115801562008b6e573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff8a1692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a25b60005b8281101562008d865760015460025473ffffffffffffffffffffffffffffffffffffffff9182169163bd6af43491167f46fb371d000000000000000000000000000000000000000000000000000000008962008c14578b62008c2e565b60035473ffffffffffffffffffffffffffffffffffffffff165b8989878151811062008c445762008c446200ab6b565b602090810291909101015160405173ffffffffffffffffffffffffffffffffffffffff938416602482015291831660448301529190911660648201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff608482015260a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b909216825262008d3c92916004016200b0d4565b600060405180830381600087803b15801562008d5757600080fd5b505af115801562008d6c573d6000803e3d6000fd5b50505050808062008d7d906200ad28565b91505062008bb7565b50600154600254600f546040805173ffffffffffffffffffffffffffffffffffffffff868116602483015292831660448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f51e3f1600000000000000000000000000000000000000000000000000000000017905290517fbd6af4340000000000000000000000000000000000000000000000000000000081529382169363bd6af4349362008e56931691906004016200b0d4565b600060405180830381600087803b15801562008e7157600080fd5b505af115801562008e86573d6000803e3d6000fd5b505060015460025473ffffffffffffffffffffffffffffffffffffffff918216935063bd6af4349250167f6ce4074a000000000000000000000000000000000000000000000000000000008862008ede578a62008ef8565b60035473ffffffffffffffffffffffffffffffffffffffff165b888b60405160240162008f0e939291906200b10d565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b909216825262008fa192916004016200b0d4565b600060405180830381600087803b15801562008fbc57600080fd5b505af115801562008fd1573d6000803e3d6000fd5b5050600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526024810192909252600060448301819052606483015273ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b1580156200905757600080fd5b505af11580156200906c573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff1685620090945787620090ae565b60035473ffffffffffffffffffffffffffffffffffffffff165b73ffffffffffffffffffffffffffffffffffffffff167faed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab0360405160405180910390a38415620093ad5760005b82811015620092ae57600154600254600354865173ffffffffffffffffffffffffffffffffffffffff9384169363bd6af434938116927f46fb371d00000000000000000000000000000000000000000000000000000000929116908a908a90889081106200916c576200916c6200ab6b565b602090810291909101015160405173ffffffffffffffffffffffffffffffffffffffff938416602482015291831660448301529190911660648201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff608482015260a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b90921682526200926492916004016200b0d4565b600060405180830381600087803b1580156200927f57600080fd5b505af115801562009294573d6000803e3d6000fd5b505050508080620092a5906200ad28565b915050620090fa565b506001546002546040805173ffffffffffffffffffffffffffffffffffffffff85811660248084019190915283518084039091018152604490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f953730180000000000000000000000000000000000000000000000000000000017905291517fbd6af4340000000000000000000000000000000000000000000000000000000081529382169363bd6af4349362009373931691906004016200b0d4565b600060405180830381600087803b1580156200938e57600080fd5b505af1158015620093a3573d6000803e3d6000fd5b5050505062005fad565b6001546002546040805173ffffffffffffffffffffffffffffffffffffffff85811660248084019190915283518084039091018152604490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f953730180000000000000000000000000000000000000000000000000000000017905291517fbd6af4340000000000000000000000000000000000000000000000000000000081529382169363bd6af4349362009471931691906004016200b0d4565b600060405180830381600087803b1580156200948c57600080fd5b505af1158015620094a1573d6000803e3d6000fd5b5050505060005b828110156200508357600154600254855173ffffffffffffffffffffffffffffffffffffffff9283169263bd6af4349216907f46fb371d00000000000000000000000000000000000000000000000000000000908c908a908a90889081106200951557620095156200ab6b565b602090810291909101015160405173ffffffffffffffffffffffffffffffffffffffff938416602482015291831660448301529190911660648201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff608482015260a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b90921682526200960d92916004016200b0d4565b600060405180830381600087803b1580156200962857600080fd5b505af11580156200963d573d6000803e3d6000fd5b5050505080806200964e906200ad28565b915050620094a8565b6002546040517fe958b70400000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015260009173ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015620096db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200970191906200ac42565b6002546040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015292935060009290911690638991b2f190602401602060405180830381865afa15801562009778573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200979e91906200afc5565b6002546040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529091169063f67c5bd090602401602060405180830381865afa1580156200980f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200983591906200afc5565b161515905083151581148015906200984d5750825115155b156200988d577f0b2e13ff20ac7b474198655583edf70dedd2c1dc980e329c4fbb2fc0748b796b836040516200988491906200ace4565b60405180910390a15b620032a4841515821515148673ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015620098e4573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200992c91908101906200b148565b836200996e576040518060400160405280601981526020017f206e6f7420656e61626c65642061732065787065637465642000000000000000815250620099a5565b6040518060400160405280601981526020017f20656e61626c6564206173206e6f7420657870657463746564000000000000008152505b604051602001620099b89291906200b365565b6040516020818303038152906040526200a7c9565b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462006185577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f5060405162009a879060208082526025908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b61646460408201527f726573735d000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f8160405162009ac091906200b3c4565b60405180910390a17f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f8260405162009af991906200b426565b60405180910390a1620061856200a813565b600181600a81111562009b225762009b226200ae52565b148062009b435750600381600a81111562009b415762009b416200ae52565b145b62009bab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f556e737570706f7274656420746f6b656e000000000000000000000000000000604482015260640162004449565b60405162009bb9906200ab37565b604051809103906000f08015801562009bd6573d6000803e3d6000fd5b50600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff166201000073ffffffffffffffffffffffffffffffffffffffff9384168102919091179182905590041663b36ba20862009c40670de0b6b3a764000060646200ad64565b6040518263ffffffff1660e01b81526004016000604051808303818588803b15801562009c6c57600080fd5b505af115801562009c81573d6000803e3d6000fd5b5050505050600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160405162009cb8906200ab45565b62009cc59291906200b464565b604051809103906000f08015801562009ce2573d6000803e3d6000fd5b50600580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169182179055604080517f6f307dc30000000000000000000000000000000000000000000000000000000081529051636f307dc3916004808201926020929091908290030181865afa15801562009d7c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062009da291906200ac42565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600554604080517fc12c21c00000000000000000000000000000000000000000000000000000000081529051919092169163c12c21c09160048083019260209291908290030181865afa15801562009e3f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062009e6591906200ac42565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600554604080517f2f7a188100000000000000000000000000000000000000000000000000000000815290519190921691632f7a18819160048083019260209291908290030181865afa15801562009f02573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062009f2891906200ac42565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600554604080517ff9aa028a0000000000000000000000000000000000000000000000000000000081529051919092169163f9aa028a9160048083019260209291908290030181865afa15801562009fc5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062009feb91906200ac42565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b80516002546040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8981166004830152600092169063e958b70490602401602060405180830381865afa1580156200a0a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200a0cd91906200ac42565b905084156200a1b357600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481019290925260006024830181905260448301819052606483015273ffffffffffffffffffffffffffffffffffffffff169063491cc7c290608401600060405180830381600087803b1580156200a15857600080fd5b505af11580156200a16d573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff8b1692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a25b60005b828110156200a3605760008782815181106200a1d6576200a1d66200ab6b565b602002602001015111156200a34b57600154600254855173ffffffffffffffffffffffffffffffffffffffff9283169263bd6af4349216907f51e3f160000000000000000000000000000000000000000000000000000000009086908990879081106200a247576200a2476200ab6b565b60200260200101516040516024016200a28392919073ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b90921682526200a31692916004016200b0d4565b600060405180830381600087803b1580156200a33157600080fd5b505af11580156200a346573d6000803e3d6000fd5b505050505b806200a357816200ad28565b9150506200a1b6565b5060015460025473ffffffffffffffffffffffffffffffffffffffff9182169163bd6af43491167f6ce4074a00000000000000000000000000000000000000000000000000000000886200a3b5578b6200a3cf565b60035473ffffffffffffffffffffffffffffffffffffffff165b888c6040516024016200a3e5939291906200b10d565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b90921682526200a47892916004016200b0d4565b600060405180830381600087803b1580156200a49357600080fd5b505af11580156200a4a8573d6000803e3d6000fd5b5050600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526024810192909252600060448301819052606483015273ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b1580156200a52e57600080fd5b505af11580156200a543573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff16856200a56b57886200a585565b60035473ffffffffffffffffffffffffffffffffffffffff165b73ffffffffffffffffffffffffffffffffffffffff167faed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab0360405160405180910390a36001546002546040805173ffffffffffffffffffffffffffffffffffffffff85811660248084019190915283518084039091018152604490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f953730180000000000000000000000000000000000000000000000000000000017905291517fbd6af4340000000000000000000000000000000000000000000000000000000081529382169363bd6af434936200a68b931691906004016200b0d4565b600060405180830381600087803b1580156200a6a657600080fd5b505af11580156200a6bb573d6000803e3d6000fd5b505050505050505050505050565b80821462006185577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f506040516200a7579060208082526022908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b75696e60408201527f745d000000000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a8816040516200a79091906200b490565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a88260405162009af991906200b4dc565b8162006185577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf3583816040516200a80091906200b08b565b60405180910390a162006185826200a996565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200a9685760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000009282019290925260016060820152600091907f70ca10bbd0dbfd9020a9f4b13402c16cb120705e0d1c0aeab10fa353ae586fc490608001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526200a8e592916020016200aed3565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526200a91f916200af1d565b6000604051808303816000865af19150503d80600081146200a95e576040519150601f19603f3d011682016040523d82523d6000602084013e6200a963565b606091505b505050505b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055565b806200083c577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f506040516200a9fc9060208082526017908201527f4572726f723a20417373657274696f6e204661696c6564000000000000000000604082015260600190565b60405180910390a16200083c6200a813565b613969806200b51b83390190565b615f9a806200ee8483390190565b6001830191839082156200aac35791602002820160005b838211156200aa9257835183826101000a81548160ff0219169083600a8111156200aa70576200aa706200ae52565b021790555092602001926001016020816000010492830192600103026200aa41565b80156200aac15782816101000a81549060ff02191690556001016020816000010492830192600103026200aa92565b505b506200aad19291506200ab54565b5090565b6139548062014e1e83390190565b611713806201877283390190565b6139608062019e8583390190565b611852806201d7e583390190565b611982806201f03783390190565b615f7e80620209b983390190565b615f8c806202693783390190565b617a51806202c8c383390190565b62031ed6806203431483390190565b5b808211156200aad157600081556001016200ab55565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081518084526020808501945080840160005b838110156200abe257815173ffffffffffffffffffffffffffffffffffffffff16875295820195908201906001016200abae565b509495945050505050565b6040815260006200ac0260408301856200ab9a565b82810360208401526200ac1681856200ab9a565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff811681146200083c57600080fd5b6000602082840312156200ac5557600080fd5b81516200ac62816200ac1f565b9392505050565b60005b838110156200ac865781810151838201526020016200ac6c565b83811115620061635750506000910152565b600081518084526200acb28160208601602086016200ac69565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006200ac6260208301846200ac98565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156200ad5d576200ad5d6200acf9565b5060010190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156200ad9f576200ad9f6200acf9565b500290565b6000826200addb577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b8060005b6004811015620061635781518452602093840193909101906001016200ade4565b60a081016200ae1582856200ade0565b8260808301529392505050565b6000828210156200ae37576200ae376200acf9565b500390565b82815260a081016200ac6260208301846200ade0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600b81106200aeb9577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b602081016200aecd82846200ae81565b92915050565b7fffffffff0000000000000000000000000000000000000000000000000000000083168152600082516200af0f8160048501602087016200ac69565b919091016004019392505050565b600082516200af318184602087016200ac69565b9190910192915050565b6000602082840312156200af4e57600080fd5b815180151581146200ac6257600080fd5b606081016200af6f82866200ae81565b73ffffffffffffffffffffffffffffffffffffffff93909316602082015260400152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000602082840312156200afd857600080fd5b5051919050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b838110156200b07d578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00185528151805173ffffffffffffffffffffffffffffffffffffffff1684528701518784018790526200b069878501826200ac98565b95880195935050908601906001016200b006565b509098975050505050505050565b60408152600560408201527f4572726f7200000000000000000000000000000000000000000000000000000060608201526080602082015260006200ac6260808301846200ac98565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015260006200b10560408301846200ac98565b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff8086168352808516602084015250606060408301526200ac1660608301846200ac98565b6000602082840312156200b15b57600080fd5b815167ffffffffffffffff808211156200b17457600080fd5b818401915084601f8301126200b18957600080fd5b8151818111156200b19e576200b19e6200af96565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156200b1e7576200b1e76200af96565b816040528281528760208487010111156200b20157600080fd5b6200b2148360208301602088016200ac69565b979650505050505050565b600083516200b2338184602088016200ac69565b7f496e636f7272656374200000000000000000000000000000000000000000000090830190815283516200b26f81600a8401602088016200ac69565b7f2062616c616e6365206f6e206163636f756e743a200000000000000000000000600a9290910191820152601f01949350505050565b6040815260006200b2ba60408301856200ac98565b905073ffffffffffffffffffffffffffffffffffffffff831660208301529392505050565b600083516200b2f38184602088016200ac69565b7f496e636f7272656374200000000000000000000000000000000000000000000090830190815283516200b32f81600a8401602088016200ac69565b7f20416c6c6f77616e6365206f6e206163636f756e743a20200000000000000000600a9290910191820152602201949350505050565b7f546f6b656e2000000000000000000000000000000000000000000000000000008152600083516200b39f8160068501602088016200ac69565b8351908301906200b3b88160068401602088016200ac69565b01600601949350505050565b6040815260006200b40260408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b905073ffffffffffffffffffffffffffffffffffffffff8316602083015292915050565b6040815260006200b40260408301600a81527f2020202041637475616c00000000000000000000000000000000000000000000602082015260400190565b73ffffffffffffffffffffffffffffffffffffffff83168152604081016200ac6260208301846200ae81565b6040815260006200b4ce60408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b905082602083015292915050565b6040815260006200b4ce60408301600a81527f2020202041637475616c0000000000000000000000000000000000000000000060208201526040019056fe60806040523480156200001157600080fd5b5060405162003969380380620039698339810160408190526200003491620002a2565b8151829082906200004d90600290602085019062000133565b5080516200006390600390602084019062000133565b506000601260405162000076906200019d565b6060808252600790820152664352564d6f636b60c81b608082015260a0602082018190526015908201527f43525620666f72204375727665506f6f6c4d6f636b000000000000000000000060c082015260ff909116604082015260e001604051809103906000f080158015620000f0573d6000803e3d6000fd5b50600080546001600160a01b039092166001600160a01b03199283168117909155600180549092161790555050670de0b6b3a7640000600755506200030c915050565b8280548282559060005260206000209081019282156200018b579160200282015b828111156200018b57825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019062000154565b5062000199929150620001ab565b5090565b611758806200221183390190565b5b80821115620001995760008155600101620001ac565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b0381168114620001f057600080fd5b919050565b600082601f8301126200020757600080fd5b815160206001600160401b0380831115620002265762000226620001c2565b8260051b604051601f19603f830116810181811084821117156200024e576200024e620001c2565b6040529384528581018301938381019250878511156200026d57600080fd5b83870191505b8482101562000297576200028782620001d8565b8352918301919083019062000273565b979650505050505050565b60008060408385031215620002b657600080fd5b82516001600160401b0380821115620002ce57600080fd5b620002dc86838701620001f5565b93506020850151915080821115620002f357600080fd5b506200030285828601620001f5565b9150509250929050565b611ef5806200031c6000396000f3fe608060405234801561001057600080fd5b506004361061030a5760003560e01c80637b475b681161019c578063bb7b8b80116100ee578063ddca3f4311610097578063f851a44011610071578063f851a44014610597578063fc0c546a1461059e578063fee3f7f91461037757600080fd5b8063ddca3f4314610377578063e2e7d26414610589578063f446c1d01461037757600080fd5b8063cf701ff7116100c8578063cf701ff714610565578063d96c7fce1461037e578063dd62ed3e1461057b57600080fd5b8063bb7b8b8014610537578063c66106571461053f578063cc2b27d71461055257600080fd5b806399bd2ba511610150578063b739953e1161012a578063b739953e146104fe578063b91434d114610511578063b9947eb01461052457600080fd5b806399bd2ba5146104d8578063a6417ed6146104eb578063b4b577ad1461037757600080fd5b806382c630661161018157806382c63066146104af5780638ea875f3146104cf57806395d89b411461034a57600080fd5b80637b475b68146104775780637d49d8751461049c57600080fd5b8063313ce5671161026057806356ac35031161020957806370a08231116101e357806370a0823114610450578063710354181461046457806376a2f0f01461037757600080fd5b806356ac35031461042a5780635e0d443f1461043d57806363543f061461037757600080fd5b80634903b0d11161023a5780634903b0d11461040457806353b546cd146104175780635409491a1461037757600080fd5b8063313ce567146103775780633df02124146103f15780634469e30e1461037e57600080fd5b806314f05979116102c25780631a4d01d21161029c5780631a4d01d2146103a65780632081066c1461037757806323746eb8146103b957600080fd5b806314f059791461037e57806318160ddd1461037757806318a7bd761461039357600080fd5b806306fdde03116102f357806306fdde031461034a57806307211ef714610364578063140522881461037757600080fd5b8063029b2f341461030f578063065a80d814610324575b600080fd5b61032261031d3660046119b2565b6105be565b005b6103376103323660046119f4565b61078f565b6040519081526020015b60405180910390f35b604080516020810182526000815290516103419190611a3b565b610337610372366004611a8c565b610848565b6000610337565b610386610898565b6040516103419190611ac8565b6103226103a1366004611b0a565b6108ca565b6103226103b4366004611b27565b610a4d565b6103cc6103c73660046119f4565b610b3c565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610341565b6103226103ff366004611b4c565b610b7c565b610337610412366004611b8e565b610ca6565b610386610425366004611ba7565b610cbb565b610322610438366004611a8c565b610cf1565b61033761044b366004611a8c565b610d52565b61033761045e366004611c0b565b50600090565b610322610472366004611b8e565b600755565b610322610485366004611c26565b600f9190910b600090815260066020526040902055565b6103226104aa366004611c50565b610d8e565b6001546103cc9073ffffffffffffffffffffffffffffffffffffffff1681565b61033760075481565b6103226104e6366004611c7d565b610f11565b6103226104f9366004611b4c565b610f70565b6103cc61050c3660046119f4565b611330565b61032261051f366004611a8c565b611348565b6103cc610532366004611b8e565b6113a9565b600754610337565b6103cc61054d366004611b8e565b6113be565b610337610560366004611c99565b6113d3565b610337610573366004611ccd565b600092915050565b610337610573366004611d05565b61033761045e366004611b8e565b60006103cc565b6000546103cc9073ffffffffffffffffffffffffffffffffffffffff1681565b60005b60048110156106ed5760008382600481106105de576105de611d2f565b602002015111156106db57600281815481106105fc576105fc611d2f565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff166323b872dd333086856004811061063757610637611d2f565b60200201516040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff938416600482015292909116602483015260448201526064016020604051808303816000875af11580156106b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d99190611d5e565b505b806106e581611daa565b9150506105c1565b506000546040517f40c10f190000000000000000000000000000000000000000000000000000000081523360048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f19906044015b6020604051808303816000875af1158015610766573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078a9190611d5e565b505050565b6000600282600f0b815481106107a7576107a7611d2f565b6000918252602090912001546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa15801561081e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108429190611de3565b92915050565b600f83810b60009081526005602090815260408083209386900b8352929052908120546b033b2e3c9fd0803ce800000090610884908490611dfc565b61088e9190611e39565b90505b9392505050565b6108a06118ff565b60405180608001604052806000815260200160008152602001600081526020016000815250905090565b60005b60048110156109ef5760008382600481106108ea576108ea611d2f565b602002013511156109dd576002818154811061090857610908611d2f565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb3385846004811061094257610942611d2f565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff9093166004840152602002013560248201526044016020604051808303816000875af11580156109b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109db9190611d5e565b505b806109e781611daa565b9150506108cd565b506000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906379cc679090604401610747565b6000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810185905273ffffffffffffffffffffffffffffffffffffffff909116906379cc6790906044016020604051808303816000875af1158015610ac4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae89190611d5e565b5061078a33826002856fffffffffffffffffffffffffffffffff1681548110610b1357610b13611d2f565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169190611409565b6000600282600f0b81548110610b5457610b54611d2f565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1692915050565b6000610b89858585610d52565b905081811015610c20576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f437572766556314d6f636b3a20494e53554646494349454e545f4f555450555460448201527f5f414d4f554e540000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b610c753330856002896fffffffffffffffffffffffffffffffff1681548110610c4b57610c4b611d2f565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169291906114dd565b610c9f33826002876fffffffffffffffffffffffffffffffff1681548110610b1357610b13611d2f565b5050505050565b6000600282815481106107a7576107a7611d2f565b610cc36118ff565b6040805160808181019092529085906004908390839080828437600092019190915250919695505050505050565b600f83810b60009081526005602090815260408083209386900b835292905220819055610d2a6b033b2e3c9fd0803ce800000082611541565b600f92830b60009081526005602090815260408083209690950b825294909452919092205550565b600f83810b60009081526004602090815260408083209386900b8352929052908120546b033b2e3c9fd0803ce800000090610884908490611dfc565b60005b6004811015610eb3576000828260048110610dae57610dae611d2f565b60200201511115610ea15760028181548110610dcc57610dcc611d2f565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33848460048110610e0657610e06611d2f565b60200201516040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af1158015610e7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9f9190611d5e565b505b80610eab81611daa565b915050610d91565b506000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810184905273ffffffffffffffffffffffffffffffffffffffff909116906379cc679090604401610747565b6000546040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052909116906340c10f1990604401610747565b60006002856fffffffffffffffffffffffffffffffff1681548110610f9757610f97611d2f565b60009182526020822001546003805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff8816908110610fe357610fe3611d2f565b60009182526020822001546002805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff881690811061102f5761102f611d2f565b60009182526020822001546003805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff891690811061107b5761107b611d2f565b600091825260208220015473ffffffffffffffffffffffffffffffffffffffff1691506110a9898989610848565b90508581101561113b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f437572766556314d6f636b3a20494e53554646494349454e545f4f555450555460448201527f5f414d4f554e54000000000000000000000000000000000000000000000000006064820152608401610c17565b61115d73ffffffffffffffffffffffffffffffffffffffff851633308a6114dd565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526024820189905285169063095ea7b3906044016020604051808303816000875af11580156111d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f69190611d5e565b506040517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8616906340c10f1990604401600060405180830381600087803b15801561126557600080fd5b505af1158015611279573d6000803e3d6000fd5b50506040517f1e9a69500000000000000000000000000000000000000000000000000000000081523060048201526024810184905273ffffffffffffffffffffffffffffffffffffffff86169250631e9a69509150604401600060405180830381600087803b1580156112eb57600080fd5b505af11580156112ff573d6000803e3d6000fd5b506113259250505073ffffffffffffffffffffffffffffffffffffffff83163383611409565b505050505050505050565b6000600382600f0b81548110610b5457610b54611d2f565b600f83810b60009081526004602090815260408083209386900b8352929052208190556113816b033b2e3c9fd0803ce800000082611541565b600f92830b60009081526004602090815260408083209690950b825294909452919092205550565b600060038281548110610b5457610b54611d2f565b600060028281548110610b5457610b54611d2f565b600f81900b6000908152600660205260408120546b033b2e3c9fd0803ce8000000906113ff9085611dfc565b6108919190611e39565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905261078a9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526116a7565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905261153b9085907f23b872dd000000000000000000000000000000000000000000000000000000009060840161145b565b50505050565b60408051808201909152600281527f4d330000000000000000000000000000000000000000000000000000000000006020820152600090826115b0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c179190611a3b565b5060006115be600284611e39565b90506b033b2e3c9fd0803ce80000006115f7827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611e74565b6116019190611e39565b8411156040518060400160405280600281526020017f4d3100000000000000000000000000000000000000000000000000000000000081525090611672576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c179190611a3b565b50828161168b6b033b2e3c9fd0803ce800000087611dfc565b6116959190611e8b565b61169f9190611e39565b949350505050565b6000611709826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166117b39092919063ffffffff16565b80519091501561078a57808060200190518101906117279190611d5e565b61078a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610c17565b606061088e848460008585843b611826576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610c17565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161184f9190611ea3565b60006040518083038185875af1925050503d806000811461188c576040519150601f19603f3d011682016040523d82523d6000602084013e611891565b606091505b50915091506118a18282866118ac565b979650505050505050565b606083156118bb575081610891565b8251156118cb5782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c179190611a3b565b60405180608001604052806004906020820280368337509192915050565b600082601f83011261192e57600080fd5b6040516080810181811067ffffffffffffffff82111715611978577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405280608084018581111561198d57600080fd5b845b818110156119a757803583526020928301920161198f565b509195945050505050565b60008060a083850312156119c557600080fd5b6119cf848461191d565b946080939093013593505050565b8035600f81900b81146119ef57600080fd5b919050565b600060208284031215611a0657600080fd5b610891826119dd565b60005b83811015611a2a578181015183820152602001611a12565b8381111561153b5750506000910152565b6020815260008251806020840152611a5a816040850160208701611a0f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b600080600060608486031215611aa157600080fd5b611aaa846119dd565b9250611ab8602085016119dd565b9150604084013590509250925092565b60808101818360005b6004811015611af0578151835260209283019290910190600101611ad1565b50505092915050565b806080810183101561084257600080fd5b60008060a08385031215611b1d57600080fd5b6119cf8484611af9565b600080600060608486031215611b3c57600080fd5b83359250611ab8602085016119dd565b60008060008060808587031215611b6257600080fd5b611b6b856119dd565b9350611b79602086016119dd565b93969395505050506040820135916060013590565b600060208284031215611ba057600080fd5b5035919050565b60008060006101208486031215611bbd57600080fd5b611bc78585611af9565b9250611bd68560808601611af9565b915061010084013590509250925092565b803573ffffffffffffffffffffffffffffffffffffffff811681146119ef57600080fd5b600060208284031215611c1d57600080fd5b61089182611be7565b60008060408385031215611c3957600080fd5b611c42836119dd565b946020939093013593505050565b60008060a08385031215611c6357600080fd5b82359150611c74846020850161191d565b90509250929050565b60008060408385031215611c9057600080fd5b611c4283611be7565b60008060408385031215611cac57600080fd5b82359150611c74602084016119dd565b8015158114611cca57600080fd5b50565b60008060a08385031215611ce057600080fd5b611cea8484611af9565b91506080830135611cfa81611cbc565b809150509250929050565b60008060408385031215611d1857600080fd5b611d2183611be7565b9150611c7460208401611be7565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215611d7057600080fd5b815161089181611cbc565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611ddc57611ddc611d7b565b5060010190565b600060208284031215611df557600080fd5b5051919050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611e3457611e34611d7b565b500290565b600082611e6f577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600082821015611e8657611e86611d7b565b500390565b60008219821115611e9e57611e9e611d7b565b500190565b60008251611eb5818460208701611a0f565b919091019291505056fea2646970667358221220f61dc1547f427f062d37b4d652f14b779f56255086161f347804b4d07b32be2064736f6c634300080a003360a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a00336102606040523480156200001257600080fd5b5060405162005f9a38038062005f9a833981016040819052620000359162000ba4565b83838383600484846001600160a01b03821615806200005b57506001600160a01b038116155b156200007a57604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038216608081905260408051632f7a188160e01b81529051632f7a1881916004808201926020929091908290030181865afa158015620000c5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000eb919062000c01565b6001600160a01b0390811660a05290811660c05260016000558416151590506200012857604051635919af9760e11b815260040160405180910390fd5b608051604051630f67c5bd60e41b81526001600160a01b0385811660048301529091169063f67c5bd090602401602060405180830381865afa15801562000173573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000199919062000c26565b620001c757604051634c607af960e11b81526001600160a01b03841660048201526024015b60405180910390fd5b6001600160a01b038084166101e081905261020052821661022052610240819052620001f460006200090a565b6001600160a01b031660e0526200020c60016200090a565b6001600160a01b0316610100526200022560026200090a565b6001600160a01b0316610120526200023e60036200090a565b6001600160a01b031661014052620002576000620009fd565b6001600160a01b031661016052620002706001620009fd565b6001600160a01b031661018052620002896002620009fd565b6001600160a01b03166101a052620002a26003620009fd565b6001600160a01b039081166101c05260e051161580620002cc5750610100516001600160a01b0316155b15620002eb57604051635919af9760e11b815260040160405180910390fd5b600281118015620003065750610120516001600160a01b0316155b156200032557604051635919af9760e11b815260040160405180910390fd5b600381118015620003405750610140516001600160a01b0316155b156200035f57604051635919af9760e11b815260040160405180910390fd5b60805160e051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620003ac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003d2919062000c26565b620004005760e051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b60805161010051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa1580156200044e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000474919062000c26565b620004a35761010051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b60028111801562000525575060805161012051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620004fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000523919062000c26565b155b15620005555761012051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b600381118015620005d7575060805161014051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620005af573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005d5919062000c26565b155b15620006075761014051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b610160516001600160a01b03161580159062000694575060805161016051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa1580156200066c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000692919062000c26565b155b15620006c45761016051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b610180516001600160a01b03161580159062000751575060805161018051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa15801562000729573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200074f919062000c26565b155b15620007815761018051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b6101a0516001600160a01b0316158015906200080e57506080516101a051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620007e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200080c919062000c26565b155b156200083e576101a051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b6101c0516001600160a01b031615801590620008cb57506080516101c051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620008a3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008c9919062000c26565b155b15620008fb576101c051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b50505050505050505062000c66565b60c05160405163c661065760e01b8152600481018390526000916001600160a01b03169063c661065790602401602060405180830381865afa92505050801562000973575060408051601f3d908101601f19168201909252620009709181019062000c01565b60015b6200097e5762000984565b92915050565b60c05160405163046e8dd760e31b8152600f84900b60048201526001600160a01b03909116906323746eb8906024015b602060405180830381865afa925050508015620009f0575060408051601f3d908101601f19168201909252620009ed9181019062000c01565b60015b6200097e57506000919050565b610220516000906001600160a01b03161562000a1e576200097e8262000ac0565b60c051604051630b9947eb60e41b8152600481018490526001600160a01b039091169063b9947eb090602401602060405180830381865afa92505050801562000a86575060408051601f3d908101601f1916820190925262000a839181019062000c01565b60015b6200097e5760c051604051635b9cca9f60e11b8152600f84900b60048201526001600160a01b039091169063b739953e90602401620009b4565b60008162000ad4576200097e600062000b17565b610220516001600160a01b031663c661065762000af360018562000c40565b6040518263ffffffff1660e01b8152600401620009b491815260200190565b919050565b600081600f0b6000141562000b2b575060e0515b81600f0b6001141562000b3e5750610100515b81600f0b6002141562000b515750610120515b81600f0b6003141562000b645750610140515b6001600160a01b03811662000b12576040516334769e6f60e21b815260040160405180910390fd5b80516001600160a01b038116811462000b1257600080fd5b6000806000806080858703121562000bbb57600080fd5b62000bc68562000b8c565b935062000bd66020860162000b8c565b925062000be66040860162000b8c565b915062000bf66060860162000b8c565b905092959194509250565b60006020828403121562000c1457600080fd5b62000c1f8262000b8c565b9392505050565b60006020828403121562000c3957600080fd5b5051919050565b60008282101562000c6157634e487b7160e01b600052601160045260246000fd5b500390565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e051610200516102205161024051614fb762000fe3600039600081816107830152818161395a01528181613a4c01528181613b8c01528181613d430152613e5d015260006105f101526000818161069b01528181611f6f0152818161241d015281816126cd01528181612daf01528181613491015261352f015260006108ad0152600081816105af0152612eb10152600081816103e90152612e820152600081816106180152612e530152600081816106c20152612e2401526000818161087601528181612b1c01528181612c8901528181613ab6015261440c0152600081816104fd01528181612a4c01528181612c5a015281816139c401526142f00152600081816108060152818161297c01528181612c2b015281816138d001526141d401526000818161045d015281816128ac01528181612bfc0152818161380401526140b8015260008181610735015281816109bf01528181610a8c01528181610b1c01528181610c1401528181610ca301528181610d3a01528181610dcb01528181611270015281816112e8015281816114c00152818161155b015281816115e4015281816116620152818161170f01528181611757015281816118080152818161183d01528181611ba001528181611c9701528181611d0f01528181611db401528181611fef01528181612030015281816120e90152818161211e015281816121b901528181612462015281816124cf01528181612560015281816130cf015281816131ee015281816132c801528181614090015281816141ac015281816142c8015281816143e4015261452c01526000818161052401528181612f3a015281816145d301526146ad01526000818161075c015281816110000152818161194801528181611efb015281816122c3015281816125fa015281816126f5015281816127df015281816128d4015281816129a401528181612a7401528181612b4401528181612d2701528181613125015281816131bf0152818161331e015281816133c6015281816136880152818161373f0152818161382f015281816138f8015281816139ec01528181613ade01528181614106015281816142220152818161433e0152818161445a015281816144fd0152818161463d01528181614735015281816147e901526148930152614fb76000f3fe608060405234801561001057600080fd5b50600436106103a45760003560e01c806378aa73a4116101e9578063cc2b27d71161010f578063ddca3f43116100ad578063f446c1d01161007c578063f446c1d014610898578063f851a440146108a0578063fc0c546a146108a8578063fee3f7f9146108cf57600080fd5b8063ddca3f4314610843578063e2e7d2641461084b578063ec026ca71461085e578063ef14101e1461087157600080fd5b8063cf701ff7116100e9578063cf701ff7146107ee578063d21220a714610801578063d96c7fce14610828578063dd62ed3e1461083057600080fd5b8063cc2b27d7146107b3578063ce30bbdb146107c6578063cf023dd0146107db57600080fd5b8063b4b577ad11610187578063bd90df7011610156578063bd90df7014610730578063c12c21c014610757578063c21ee1621461077e578063c6610657146107a557600080fd5b8063b4b577ad146106ff578063b739953e14610707578063b9947eb01461071a578063bb7b8b801461072857600080fd5b806382c63066116101c357806382c63066146106965780638ba51dfc146106bd57806395d89b41146106e4578063a6417ed6146106ec57600080fd5b806378aa73a41461065557806379bea664146106705780637d49d8751461068357600080fd5b80632f7a1881116102ce5780635409491a1161026c57806364a89bca1161023b57806364a89bca146105ec5780636e1d82711461061357806370a082311461063a57806376a2f0f01461064d57600080fd5b80635409491a146105a257806357d78875146105aa5780635e0d443f146105d157806363543f06146105e457600080fd5b80633df02124116102a85780633df02124146105615780634469e30e146105745780634903b0d11461057c57806353b546cd1461058f57600080fd5b80632f7a18811461051f578063313ce5671461054657806333d2ebf21461054e57600080fd5b806314f05979116103465780631af4de83116103155780631af4de83146104ca5780632081066c146104dd57806323746eb8146104e557806325be124e146104f857600080fd5b806314f059791461048757806318160ddd1461049c57806318a7bd76146104a45780631a4d01d2146104b757600080fd5b806306fdde031161038257806306fdde031461043057806307211ef7146104455780630dfe168114610458578063140522881461047f57600080fd5b8063029b2f34146103a9578063065a80d8146103be57806306871163146103e4575b600080fd5b6103bc6103b7366004614926565b6108d7565b005b6103d16103cc366004614963565b61097c565b6040519081526020015b60405180910390f35b61040b7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016103db565b610438610b18565b6040516103db91906149f4565b6103d1610453366004614a07565b610bd0565b61040b7f000000000000000000000000000000000000000000000000000000000000000081565b6103d1610c9f565b61048f610d30565b6040516103db9190614a43565b6103d1610dc7565b6103bc6104b2366004614926565b610e34565b6103bc6104c5366004614a74565b610ecb565b6103bc6104d8366004614a07565b610f5e565b6103d161126c565b61040b6104f3366004614963565b6112d9565b61040b7f000000000000000000000000000000000000000000000000000000000000000081565b61040b7f000000000000000000000000000000000000000000000000000000000000000081565b6103d16112e4565b6103bc61055c366004614a99565b611351565b6103bc61056f366004614ac3565b6113e5565b61048f6114b6565b6103d161058a366004614b05565b611529565b61048f61059d366004614b1e565b61159f565b6103d161165e565b61040b7f000000000000000000000000000000000000000000000000000000000000000081565b6103d16105df366004614a07565b6116cb565b6103d1611753565b61040b7f000000000000000000000000000000000000000000000000000000000000000081565b61040b7f000000000000000000000000000000000000000000000000000000000000000081565b6103d1610648366004614b80565b6117c0565b6103d1611839565b61065d600281565b60405161ffff90911681526020016103db565b6103bc61067e366004614a07565b6118a6565b6103bc610691366004614b9d565b611b22565b61040b7f000000000000000000000000000000000000000000000000000000000000000081565b61040b7f000000000000000000000000000000000000000000000000000000000000000081565b610438611b9c565b6103bc6106fa366004614ac3565b611c09565b6103d1611c93565b61040b610715366004614963565b611d00565b61040b610715366004614b05565b6103d1611d0b565b61040b7f000000000000000000000000000000000000000000000000000000000000000081565b61040b7f000000000000000000000000000000000000000000000000000000000000000081565b6103d17f000000000000000000000000000000000000000000000000000000000000000081565b61040b6104f3366004614b05565b6103d16107c1366004614bca565b611d78565b6107ce600781565b6040516103db9190614bed565b6103bc6107e9366004614a74565b611e35565b6103d16107fc366004614c2e565b611faf565b61040b7f000000000000000000000000000000000000000000000000000000000000000081565b61048f612026565b6103d161083e366004614c6b565b612099565b6103d161211a565b6103d1610859366004614b05565b612187565b6103bc61086c366004614a99565b6121fd565b61040b7f000000000000000000000000000000000000000000000000000000000000000081565b6103d161245e565b61040b6124cb565b61040b7f000000000000000000000000000000000000000000000000000000000000000081565b6103d161255c565b60026000541415610949576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b600260005561097360018335811090602085013581109060408601358110906060870135116125c9565b50506001600055565b6040517f4903b0d10000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff821660048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634903b0d1906024015b602060405180830381865afa925050508015610a56575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610a5391810190614c99565b60015b610b0d576040517f065a80d8000000000000000000000000000000000000000000000000000000008152600f83900b60048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063065a80d8906024015b602060405180830381865afa158015610ae9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0d9190614c99565b92915050565b919050565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015610b85573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610bcb9190810190614d73565b905090565b6040517f07211ef7000000000000000000000000000000000000000000000000000000008152600f84810b600483015283900b6024820152604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906307211ef7906064015b602060405180830381865afa158015610c71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c959190614c99565b90505b9392505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663140522886040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bcb9190614c99565b610d386148f7565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166314f059796040518163ffffffff1660e01b8152600401608060405180830381865afa158015610da3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bcb9190614dc4565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d0c573d6000803e3d6000fd5b60026000541415610ea1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610940565b600260005561097360018335811090602085013581109060408601358110906060870135116127ae565b60026000541415610f38576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610940565b60026000908155610f4883612beb565b9050610f5381612cf6565b505060016000555050565b60026000541415610fcb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610940565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa15801561105c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110809190614e42565b9050600061108d85612e13565b9050600061109a85612e13565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529192506000918416906370a0823190602401602060405180830381865afa15801561110c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111309190614c99565b9050600181111561125e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce80000006111768784614e5f565b6111809190614ec3565b604051600f8a810b602483015289900b6044820152606481018490526084810182905290915061125b908690869086907fa6417ed6000000000000000000000000000000000000000000000000000000009060a4015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152600180612f1d565b50505b505060016000555050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632081066c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d0c573d6000803e3d6000fd5b6000610b0d82612beb565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d0c573d6000803e3d6000fd5b600260005414156113be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610940565b600260009081556113ce83612beb565b90506113db838284613395565b5050600160005550565b60026000541415611452576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610940565b6002600090815561146285612beb565b9050600061146f85612beb565b905061125e82826000368080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525060019350915061363f9050565b6114be6148f7565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16634469e30e6040518163ffffffff1660e01b8152600401608060405180830381865afa158015610da3573d6000803e3d6000fd5b6040517f4903b0d1000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634903b0d1906024016109ff565b6115a76148f7565b6040517f53b546cd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906353b546cd9061161d90879087908790600401614efe565b608060405180830381865afa15801561163a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c959190614dc4565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635409491a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d0c573d6000803e3d6000fd5b6040517f5e0d443f000000000000000000000000000000000000000000000000000000008152600f84810b600483015283900b6024820152604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635e0d443f90606401610c54565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166363543f066040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d0c573d6000803e3d6000fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401610acc565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166376a2f0f06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d0c573d6000803e3d6000fd5b60026000541415611913576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610940565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156119a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c89190614e42565b905060006119d585612beb565b905060006119e285612beb565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529192506000918416906370a0823190602401602060405180830381865afa158015611a54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a789190614c99565b9050600181111561125e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce8000000611abe8784614e5f565b611ac89190614ec3565b604051600f8a810b602483015289900b6044820152606481018490526084810182905290915061125b908690869086907f3df02124000000000000000000000000000000000000000000000000000000009060a4016111d6565b60026000541415611b8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610940565b600260005561097361370e565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610b85573d6000803e3d6000fd5b60026000541415611c76576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610940565b60026000908155611c8685612e13565b9050600061146f85612e13565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b4b577ad6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d0c573d6000803e3d6000fd5b6000610b0d82612e13565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb7b8b806040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d0c573d6000803e3d6000fd5b6040517fcc2b27d700000000000000000000000000000000000000000000000000000000815260048101839052600f82900b60248201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063cc2b27d7906044015b602060405180830381865afa158015611e11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c989190614c99565b60026000541415611ea2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610940565b60026000908155611eb283612beb565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611f42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f669190614e42565b9050611fa281837f0000000000000000000000000000000000000000000000000000000000000000611f99888a89613b88565b60016000612f1d565b5050600160005550505050565b6040517fcf701ff700000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063cf701ff790611df49086908690600401614f27565b61202e6148f7565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d96c7fce6040518163ffffffff1660e01b8152600401608060405180830381865afa158015610da3573d6000803e3d6000fd5b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063dd62ed3e90604401611df4565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d0c573d6000803e3d6000fd5b6040517fe2e7d264000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e2e7d26490602401610acc565b6002600054141561226a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610940565b6002600090815561227a83612beb565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa15801561230a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061232e9190614e42565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000918416906370a0823190602401602060405180830381865afa1580156123a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123c49190614c99565b90506001811115612452577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce800000061240a8684614e5f565b6124149190614ec3565b905061244f83857f00000000000000000000000000000000000000000000000000000000000000006124478a8787613b88565b600180612f1d565b50505b50506001600055505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f446c1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d0c573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa158015612538573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bcb9190614e42565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fee3f7f96040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d0c573d6000803e3d6000fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612656573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061267a9190614e42565b905061268885858585614047565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561273957600080fd5b505af115801561274d573d6000803e3d6000fd5b505050506127916000368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506144bd92505050565b5061279e85858585614047565b6127a7816145bb565b5050505050565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa15801561283b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061285f9190614e42565b90508415612931576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561291857600080fd5b505af115801561292c573d6000803e3d6000fd5b505050505b8315612a01576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156129e857600080fd5b505af11580156129fc573d6000803e3d6000fd5b505050505b8215612ad1576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015612ab857600080fd5b505af1158015612acc573d6000803e3d6000fd5b505050505b8115612ba1576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015612b8857600080fd5b505af1158015612b9c573d6000803e3d6000fd5b505050505b612be16000368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506144bd92505050565b506127a7816145bb565b600081600f0b60001415612c1c57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b60011415612c4b57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b60021415612c7a57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b60031415612ca957507f00000000000000000000000000000000000000000000000000000000000000005b73ffffffffffffffffffffffffffffffffffffffff8116610b13576040517fd1da79bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612d83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612da79190614e42565b9050612e0e817f0000000000000000000000000000000000000000000000000000000000000000846000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509250829150612f1d9050565b505050565b600081600f0b60001415612e4457507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b60011415612e7357507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b60021415612ea257507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b60031415612ca957507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff8116610b13576040517fd1da79bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606000803373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614613086576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301528916906370a0823190602401602060405180830381865afa158015612fcb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fef9190614c99565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152919350908816906370a0823190602401602060405180830381865afa15801561305f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130839190614c99565b90505b8415613182576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561316957600080fd5b505af115801561317d573d6000803e3d6000fd5b505050505b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a906132189033907f0000000000000000000000000000000000000000000000000000000000000000908b90600401614f3f565b6000604051808303816000875af1158015613237573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261327d9190810190614d73565b9250841561337b576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561336257600080fd5b505af1158015613376573d6000803e3d6000fd5b505050505b613389898989858589614695565b50509695505050505050565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015613422573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134469190614e42565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000917f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa1580156134d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134fc9190614c99565b905060018111156127a7577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01613637827f0000000000000000000000000000000000000000000000000000000000000000867f1a4d01d200000000000000000000000000000000000000000000000000000000858a6b033b2e3c9fd0803ce80000006135898b84614e5f565b6135939190614ec3565b6040516024810193909352600f9190910b60448301526064820152608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915260006001612f1d565b505050505050565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015260609060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa1580156136cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136f39190614e42565b9050613703818888888888612f1d565b979650505050505050565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa15801561379b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137bf9190614e42565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301529192507f0000000000000000000000000000000000000000000000000000000000000000909116906351e3f16090604401600060405180830381600087803b15801561387557600080fd5b505af1158015613889573d6000803e3d6000fd5b50506040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f00000000000000000000000000000000000000000000000000000000000000001692506351e3f1609150604401600060405180830381600087803b15801561393e57600080fd5b505af1158015613952573d6000803e3d6000fd5b5050505060027f00000000000000000000000000000000000000000000000000000000000000001115613b3b576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015613a3057600080fd5b505af1158015613a44573d6000803e3d6000fd5b5050505060037f00000000000000000000000000000000000000000000000000000000000000001115613b3b576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015613b2257600080fd5b505af1158015613b36573d6000803e3d6000fd5b505050505b613b7b6000368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506144bd92505050565b50613b85816145bb565b50565b60607f000000000000000000000000000000000000000000000000000000000000000060021415613d415783600f0b600014613c7e576040516000602482015260448101849052606481018390527f0b4c7e4d00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613d3a565b6040516024810184905260006044820152606481018390527f0b4c7e4d00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091525b9050610c98565b7f000000000000000000000000000000000000000000000000000000000000000060031415613e5b5783600f0b600014613e125783600f0b600114613dc957604051600060248201819052604482015260648101849052608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401613bfc565b604051600060248201819052604482018590526064820152608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401613bfc565b604051602481018490526000604482018190526064820152608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401613cbc565b7f000000000000000000000000000000000000000000000000000000000000000060041415613fe55783600f0b600014613f955783600f0b600114613f455783600f0b600214613ef5576040516000602482018190526044820181905260648201526084810184905260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613bfc565b6040516000602482018190526044820181905260648201859052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613bfc565b6040516000602482018190526044820185905260648201819052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613bfc565b6040516024810184905260006044820181905260648201819052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613cbc565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f496e636f7272656374206e436f696e73000000000000000000000000000000006044820152606401610940565b8315614163576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561414a57600080fd5b505af115801561415e573d6000803e3d6000fd5b505050505b821561427f576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561426657600080fd5b505af115801561427a573d6000803e3d6000fd5b505050505b811561439b576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561438257600080fd5b505af1158015614396573d6000803e3d6000fd5b505050505b80156144b7576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561449e57600080fd5b505af11580156144b2573d6000803e3d6000fd5b505050505b50505050565b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815260609073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a906145569033907f0000000000000000000000000000000000000000000000000000000000000000908790600401614f3f565b6000604051808303816000875af1158015614575573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b0d9190810190614d73565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614613b85576040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b15801561468157600080fd5b505af11580156127a7573d6000803e3d6000fd5b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614614796576040517f654a9eda00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528681166024830152858116604483015260648201859052608482018490527f0000000000000000000000000000000000000000000000000000000000000000169063654a9eda9060a401600060405180830381600087803b15801561477957600080fd5b505af115801561478d573d6000803e3d6000fd5b50505050613637565b8015614846576040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015286811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b15801561482d57600080fd5b505af1158015614841573d6000803e3d6000fd5b505050505b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015285811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156148d757600080fd5b505af11580156148eb573d6000803e3d6000fd5b50505050505050505050565b60405180608001604052806004906020820280368337509192915050565b8060808101831015610b0d57600080fd5b60008060a0838503121561493957600080fd5b6149438484614915565b946080939093013593505050565b8035600f81900b8114610b1357600080fd5b60006020828403121561497557600080fd5b610c9882614951565b60005b83811015614999578181015183820152602001614981565b838111156144b75750506000910152565b600081518084526149c281602086016020860161497e565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610c9860208301846149aa565b600080600060608486031215614a1c57600080fd5b614a2584614951565b9250614a3360208501614951565b9150604084013590509250925092565b60808101818360005b6004811015614a6b578151835260209283019290910190600101614a4c565b50505092915050565b600080600060608486031215614a8957600080fd5b83359250614a3360208501614951565b60008060408385031215614aac57600080fd5b614ab583614951565b946020939093013593505050565b60008060008060808587031215614ad957600080fd5b614ae285614951565b9350614af060208601614951565b93969395505050506040820135916060013590565b600060208284031215614b1757600080fd5b5035919050565b60008060006101208486031215614b3457600080fd5b614b3e8585614915565b9250614b4d8560808601614915565b915061010084013590509250925092565b73ffffffffffffffffffffffffffffffffffffffff81168114613b8557600080fd5b600060208284031215614b9257600080fd5b8135610c9881614b5e565b60008060a08385031215614bb057600080fd5b82359150614bc18460208501614915565b90509250929050565b60008060408385031215614bdd57600080fd5b82359150614bc160208401614951565b6020810160118310614c28577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60008060a08385031215614c4157600080fd5b614c4b8484614915565b915060808301358015158114614c6057600080fd5b809150509250929050565b60008060408385031215614c7e57600080fd5b8235614c8981614b5e565b91506020830135614c6081614b5e565b600060208284031215614cab57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff80841115614cfc57614cfc614cb2565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715614d4257614d42614cb2565b81604052809350858152868686011115614d5b57600080fd5b614d6986602083018761497e565b5050509392505050565b600060208284031215614d8557600080fd5b815167ffffffffffffffff811115614d9c57600080fd5b8201601f81018413614dad57600080fd5b614dbc84825160208401614ce1565b949350505050565b600060808284031215614dd657600080fd5b82601f830112614de557600080fd5b6040516080810181811067ffffffffffffffff82111715614e0857614e08614cb2565b604052806080840185811115614e1d57600080fd5b845b81811015614e37578051835260209283019201614e1f565b509195945050505050565b600060208284031215614e5457600080fd5b8151610c9881614b5e565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ebe577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500290565b600082614ef9577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b610120810160808583376080820160008152608085823750610100919091019190915292915050565b60a08101608084833791151560809190910152919050565b600073ffffffffffffffffffffffffffffffffffffffff808616835280851660208401525060606040830152614f7860608301846149aa565b9594505050505056fea26469706673582212202cfa6940592b7cd1b1fb4eed6a97af4919d3bdbe1c8d89c62204ae78f5bc27ba64736f6c634300080a003360806040523480156200001157600080fd5b5060405162003954380380620039548339810160408190526200003491620002a2565b8151829082906200004d90600290602085019062000133565b5080516200006390600390602084019062000133565b506000601260405162000076906200019d565b6060808252600790820152664352564d6f636b60c81b608082015260a0602082018190526015908201527f43525620666f72204375727665506f6f6c4d6f636b000000000000000000000060c082015260ff909116604082015260e001604051809103906000f080158015620000f0573d6000803e3d6000fd5b50600080546001600160a01b039092166001600160a01b03199283168117909155600180549092161790555050670de0b6b3a7640000600755506200030c915050565b8280548282559060005260206000209081019282156200018b579160200282015b828111156200018b57825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019062000154565b5062000199929150620001ab565b5090565b61175880620021fc83390190565b5b80821115620001995760008155600101620001ac565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b0381168114620001f057600080fd5b919050565b600082601f8301126200020757600080fd5b815160206001600160401b0380831115620002265762000226620001c2565b8260051b604051601f19603f830116810181811084821117156200024e576200024e620001c2565b6040529384528581018301938381019250878511156200026d57600080fd5b83870191505b8482101562000297576200028782620001d8565b8352918301919083019062000273565b979650505050505050565b60008060408385031215620002b657600080fd5b82516001600160401b0380821115620002ce57600080fd5b620002dc86838701620001f5565b93506020850151915080821115620002f357600080fd5b506200030285828601620001f5565b9150509250929050565b611ee0806200031c6000396000f3fe608060405234801561001057600080fd5b506004361061030a5760003560e01c80637b475b681161019c578063c6610657116100ee578063e310327311610097578063f851a44011610071578063f851a44014610597578063fc0c546a1461059e578063fee3f7f91461039757600080fd5b8063e310327314610576578063ed8e84f314610589578063f446c1d01461039757600080fd5b8063dd62ed3e116100c8578063dd62ed3e14610552578063ddca3f4314610397578063e2e7d2641461056857600080fd5b8063c66106571461052c578063cc2b27d71461053f578063d96c7fce1461039e57600080fd5b8063a6417ed611610150578063b91434d11161012a578063b91434d1146104fe578063b9947eb014610511578063bb7b8b801461052457600080fd5b8063a6417ed6146104d8578063b4b577ad14610397578063b739953e146104eb57600080fd5b80638ea875f3116101815780638ea875f3146104bc57806395d89b411461033557806399bd2ba5146104c557600080fd5b80637b475b681461047757806382c630661461049c57600080fd5b8063313ce567116102605780635b36389c1161020957806370a08231116101e357806370a0823114610450578063710354181461046457806376a2f0f01461039757600080fd5b80635b36389c1461042a5780635e0d443f1461043d57806363543f061461039757600080fd5b80634903b0d11161023a5780634903b0d1146104045780635409491a1461039757806356ac35031461041757600080fd5b8063313ce567146103975780633df02124146103f15780634469e30e1461039e57600080fd5b806314052288116102c25780631a4d01d21161029c5780631a4d01d2146103a65780632081066c1461039757806323746eb8146103b957600080fd5b8063140522881461039757806314f059791461039e57806318160ddd1461039757600080fd5b806307211ef7116102f357806307211ef71461034f5780630b4c7e4d146103625780630f6ba8e31461037757600080fd5b8063065a80d81461030f57806306fdde0314610335575b600080fd5b61032261031d36600461191f565b6105be565b6040519081526020015b60405180910390f35b6040805160208101825260008152905161032c9190611966565b61032261035d3660046119b7565b610677565b610375610370366004611a8a565b6106c7565b005b61038a610385366004611ac6565b610898565b60405161032c9190611b04565b6000610322565b61038a6108cb565b6103756103b4366004611b35565b6108eb565b6103cc6103c736600461191f565b6109da565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161032c565b6103756103ff366004611b5a565b610a1a565b610322610412366004611b9c565b610b44565b6103756104253660046119b7565b610b59565b610375610438366004611bb5565b610bba565b61032261044b3660046119b7565b610d3d565b61032261045e366004611c06565b50600090565b610375610472366004611b9c565b600755565b610375610485366004611c21565b600f9190910b600090815260066020526040902055565b6001546103cc9073ffffffffffffffffffffffffffffffffffffffff1681565b61032260075481565b6103756104d3366004611c4b565b610d79565b6103756104e6366004611b5a565b610dd8565b6103cc6104f936600461191f565b611198565b61037561050c3660046119b7565b6111b0565b6103cc61051f366004611b9c565b611211565b600754610322565b6103cc61053a366004611b9c565b611226565b61032261054d366004611c67565b61123b565b610322610560366004611c8a565b600092915050565b61032261045e366004611b9c565b610375610584366004611cb4565b611271565b610322610560366004611ce2565b60006103cc565b6000546103cc9073ffffffffffffffffffffffffffffffffffffffff1681565b6000600282600f0b815481106105d6576105d6611d1a565b6000918252602090912001546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa15801561064d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106719190611d49565b92915050565b600f83810b60009081526005602090815260408083209386900b8352929052908120546b033b2e3c9fd0803ce8000000906106b3908490611d91565b6106bd9190611dce565b90505b9392505050565b60005b60028110156107f65760008382600281106106e7576106e7611d1a565b602002015111156107e4576002818154811061070557610705611d1a565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff166323b872dd333086856002811061074057610740611d1a565b60200201516040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff938416600482015292909116602483015260448201526064016020604051808303816000875af11580156107be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e29190611e09565b505b806107ee81611e26565b9150506106ca565b506000546040517f40c10f190000000000000000000000000000000000000000000000000000000081523360048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f19906044015b6020604051808303816000875af115801561086f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108939190611e09565b505050565b6108a06118ea565b6040805180820182529085906002908390839080828437600092019190915250919695505050505050565b6108d36118ea565b50604080518082019091526000808252602082015290565b6000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810185905273ffffffffffffffffffffffffffffffffffffffff909116906379cc6790906044016020604051808303816000875af1158015610962573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109869190611e09565b5061089333826002856fffffffffffffffffffffffffffffffff16815481106109b1576109b1611d1a565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1691906113f4565b6000600282600f0b815481106109f2576109f2611d1a565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1692915050565b6000610a27858585610d3d565b905081811015610abe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f437572766556314d6f636b3a20494e53554646494349454e545f4f555450555460448201527f5f414d4f554e540000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b610b133330856002896fffffffffffffffffffffffffffffffff1681548110610ae957610ae9611d1a565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169291906114c8565b610b3d33826002876fffffffffffffffffffffffffffffffff16815481106109b1576109b1611d1a565b5050505050565b6000600282815481106105d6576105d6611d1a565b600f83810b60009081526005602090815260408083209386900b835292905220819055610b926b033b2e3c9fd0803ce80000008261152c565b600f92830b60009081526005602090815260408083209690950b825294909452919092205550565b60005b6002811015610cdf576000828260028110610bda57610bda611d1a565b60200201511115610ccd5760028181548110610bf857610bf8611d1a565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33848460028110610c3257610c32611d1a565b60200201516040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af1158015610ca7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ccb9190611e09565b505b80610cd781611e26565b915050610bbd565b506000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810184905273ffffffffffffffffffffffffffffffffffffffff909116906379cc679090604401610850565b600f83810b60009081526004602090815260408083209386900b8352929052908120546b033b2e3c9fd0803ce8000000906106b3908490611d91565b6000546040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052909116906340c10f1990604401610850565b60006002856fffffffffffffffffffffffffffffffff1681548110610dff57610dff611d1a565b60009182526020822001546003805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff8816908110610e4b57610e4b611d1a565b60009182526020822001546002805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff8816908110610e9757610e97611d1a565b60009182526020822001546003805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff8916908110610ee357610ee3611d1a565b600091825260208220015473ffffffffffffffffffffffffffffffffffffffff169150610f11898989610677565b905085811015610fa3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f437572766556314d6f636b3a20494e53554646494349454e545f4f555450555460448201527f5f414d4f554e54000000000000000000000000000000000000000000000000006064820152608401610ab5565b610fc573ffffffffffffffffffffffffffffffffffffffff851633308a6114c8565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526024820189905285169063095ea7b3906044016020604051808303816000875af115801561103a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061105e9190611e09565b506040517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8616906340c10f1990604401600060405180830381600087803b1580156110cd57600080fd5b505af11580156110e1573d6000803e3d6000fd5b50506040517f1e9a69500000000000000000000000000000000000000000000000000000000081523060048201526024810184905273ffffffffffffffffffffffffffffffffffffffff86169250631e9a69509150604401600060405180830381600087803b15801561115357600080fd5b505af1158015611167573d6000803e3d6000fd5b5061118d9250505073ffffffffffffffffffffffffffffffffffffffff831633836113f4565b505050505050505050565b6000600382600f0b815481106109f2576109f2611d1a565b600f83810b60009081526004602090815260408083209386900b8352929052208190556111e96b033b2e3c9fd0803ce80000008261152c565b600f92830b60009081526004602090815260408083209690950b825294909452919092205550565b6000600382815481106109f2576109f2611d1a565b6000600282815481106109f2576109f2611d1a565b600f81900b6000908152600660205260408120546b033b2e3c9fd0803ce8000000906112679085611d91565b6106c09190611dce565b60005b600281101561139657600083826002811061129157611291611d1a565b6020020135111561138457600281815481106112af576112af611d1a565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb338584600281106112e9576112e9611d1a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff9093166004840152602002013560248201526044016020604051808303816000875af115801561135e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113829190611e09565b505b8061138e81611e26565b915050611274565b506000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906379cc679090604401610850565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526108939084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611692565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526115269085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611446565b50505050565b60408051808201909152600281527f4d3300000000000000000000000000000000000000000000000000000000000060208201526000908261159b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab59190611966565b5060006115a9600284611dce565b90506b033b2e3c9fd0803ce80000006115e2827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611e5f565b6115ec9190611dce565b8411156040518060400160405280600281526020017f4d310000000000000000000000000000000000000000000000000000000000008152509061165d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab59190611966565b5082816116766b033b2e3c9fd0803ce800000087611d91565b6116809190611e76565b61168a9190611dce565b949350505050565b60006116f4826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661179e9092919063ffffffff16565b80519091501561089357808060200190518101906117129190611e09565b610893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610ab5565b60606106bd848460008585843b611811576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610ab5565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161183a9190611e8e565b60006040518083038185875af1925050503d8060008114611877576040519150601f19603f3d011682016040523d82523d6000602084013e61187c565b606091505b509150915061188c828286611897565b979650505050505050565b606083156118a65750816106c0565b8251156118b65782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab59190611966565b60405180604001604052806002906020820280368337509192915050565b8035600f81900b811461191a57600080fd5b919050565b60006020828403121561193157600080fd5b6106c082611908565b60005b8381101561195557818101518382015260200161193d565b838111156115265750506000910152565b602081526000825180602084015261198581604085016020870161193a565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000606084860312156119cc57600080fd5b6119d584611908565b92506119e360208501611908565b9150604084013590509250925092565b600082601f830112611a0457600080fd5b6040516040810181811067ffffffffffffffff82111715611a4e577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b8060405250806040840185811115611a6557600080fd5b845b81811015611a7f578035835260209283019201611a67565b509195945050505050565b60008060608385031215611a9d57600080fd5b611aa784846119f3565b946040939093013593505050565b806040810183101561067157600080fd5b600080600060a08486031215611adb57600080fd5b611ae58585611ab5565b9250611af48560408601611ab5565b9150608084013590509250925092565b60408101818360005b6002811015611b2c578151835260209283019290910190600101611b0d565b50505092915050565b600080600060608486031215611b4a57600080fd5b833592506119e360208501611908565b60008060008060808587031215611b7057600080fd5b611b7985611908565b9350611b8760208601611908565b93969395505050506040820135916060013590565b600060208284031215611bae57600080fd5b5035919050565b60008060608385031215611bc857600080fd5b82359150611bd984602085016119f3565b90509250929050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461191a57600080fd5b600060208284031215611c1857600080fd5b6106c082611be2565b60008060408385031215611c3457600080fd5b611c3d83611908565b946020939093013593505050565b60008060408385031215611c5e57600080fd5b611c3d83611be2565b60008060408385031215611c7a57600080fd5b82359150611bd960208401611908565b60008060408385031215611c9d57600080fd5b611ca683611be2565b9150611bd960208401611be2565b60008060608385031215611cc757600080fd5b611aa78484611ab5565b8015158114611cdf57600080fd5b50565b60008060608385031215611cf557600080fd5b611cff8484611ab5565b91506040830135611d0f81611cd1565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215611d5b57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611dc957611dc9611d62565b500290565b600082611e04577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600060208284031215611e1b57600080fd5b81516106c081611cd1565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611e5857611e58611d62565b5060010190565b600082821015611e7157611e71611d62565b500390565b60008219821115611e8957611e89611d62565b500190565b60008251611ea081846020870161193a565b919091019291505056fea2646970667358221220adf7625854adc68c76c6173acf1acab253dff9360c8a557d9c3227c5377c0ffb64736f6c634300080a003360a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a00336101406040523480156200001257600080fd5b506040516200171338038062001713833981016040819052620000359162000389565b6000805460ff191690558484828260c882826001600160a01b0381166200006f57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000ae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d49190620004b3565b6001600160a01b0316608052508051620000f6906002906020840190620002b0565b505060a052506001600160a01b0382166200012457604051635919af9760e11b815260040160405180910390fd5b6001600160a01b03821660c0819052670de0b6b3a764000060e05260408051630176f71760e71b815290516000929163bb7b8b809160048083019260209291908290030181865afa1580156200017e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001a49190620004d8565b9050620001b18162000210565b505050506001600160a01b0383161580620001d357506001600160a01b038216155b15620001f257604051635919af9760e11b815260040160405180910390fd5b506001600160a01b0391821661010052166101205250620005a59050565b806200022f576040516309aadd6f60e41b815260040160405180910390fd5b60018190557f82e7ee47180a631312683eeb2a85ad264c9af490d54de5a75bbdb95b968c6de28162000261816200027c565b6040805192835260208301919091520160405180910390a150565b60a0516000906127109062000292908262000508565b6200029e908462000523565b620002aa919062000545565b92915050565b828054620002be9062000568565b90600052602060002090601f016020900481019282620002e257600085556200032d565b82601f10620002fd57805160ff19168380011785556200032d565b828001600101855582156200032d579182015b828111156200032d57825182559160200191906001019062000310565b506200033b9291506200033f565b5090565b5b808211156200033b576000815560010162000340565b80516001600160a01b03811681146200036e57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600080600080600060a08688031215620003a257600080fd5b620003ad8662000356565b94506020620003be81880162000356565b9450620003ce6040880162000356565b9350620003de6060880162000356565b60808801519093506001600160401b0380821115620003fc57600080fd5b818901915089601f8301126200041157600080fd5b81518181111562000426576200042662000373565b604051601f8201601f19908116603f0116810190838211818310171562000451576200045162000373565b816040528281528c868487010111156200046a57600080fd5b600093505b828410156200048e57848401860151818501870152928501926200046f565b82841115620004a05760008684830101525b8096505050505050509295509295909350565b600060208284031215620004c657600080fd5b620004d18262000356565b9392505050565b600060208284031215620004eb57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156200051e576200051e620004f2565b500190565b6000816000190483118215151615620005405762000540620004f2565b500290565b6000826200056357634e487b7160e01b600052601260045260246000fd5b500490565b600181811c908216806200057d57607f821691505b602082108114156200059f57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c05160e05161010051610120516110e66200062d6000396000818161034101526107c80152600081816102f701526107190152600081816102d00152610923015260008181610195015261088701526000818161015b0152610b150152600081816102a90152818161039901528181610515015261064d01526110e66000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c80639a6fc8f5116100cd578063b09ad8a011610081578063d62ada1111610066578063d62ada1114610334578063e5693f411461033c578063feaf968c1461036357600080fd5b8063b09ad8a014610319578063bc489a651461032157600080fd5b8063a50cf2c8116100b2578063a50cf2c8146102a4578063a834559e146102cb578063ab0ca0e1146102f257600080fd5b80639a6fc8f514610251578063a384d6ff1461029b57600080fd5b80633fd0875f116101245780635c975abb116101095780635c975abb1461021d5780637284e416146102345780638456cb591461024957600080fd5b80633fd0875f1461020057806354fd4d501461021557600080fd5b806312b495a814610156578063218751b214610190578063313ce567146101dc5780633f4ba83a146101f6575b600080fd5b61017d7f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b6101b77f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610187565b6101e4600881565b60405160ff9091168152602001610187565b6101fe61036b565b005b610208600281565b6040516101879190610cd5565b61017d600181565b60005460ff165b6040519015158152602001610187565b61023c610459565b6040516101879190610d16565b6101fe6104e7565b61026461025f366004610da1565b6105d3565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610187565b61017d60015481565b6101b77f000000000000000000000000000000000000000000000000000000000000000081565b61017d7f000000000000000000000000000000000000000000000000000000000000000081565b6101b77f000000000000000000000000000000000000000000000000000000000000000081565b61017d61060d565b6101fe61032f366004610dc5565b61061f565b610224600181565b6101b77f000000000000000000000000000000000000000000000000000000000000000081565b61026461070f565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156103f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104199190610dde565b61044f576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610457610965565b565b6002805461046690610e00565b80601f016020809104026020016040519081016040528092919081815260200182805461049290610e00565b80156104df5780601f106104b4576101008083540402835291602001916104df565b820191906000526020600020905b8154815290600101906020018083116104c257829003601f168201915b505050505081565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015610571573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105959190610dde565b6105cb576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610457610a4b565b60008060008060006040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061061a600154610b0b565b905090565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156106a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106cd9190610dde565b610703576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61070c81610b54565b50565b60008060008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610782573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a69190610e54565b9398509196509450925090506107be85858484610bd6565b60008060008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610831573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108559190610e54565b9450945094509450945061086b85858484610bd6565b88841215610883578499508398508297508196508095505b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb7b8b806040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109149190610eac565b905061091f81610c71565b90507f000000000000000000000000000000000000000000000000000000000000000061094c828c610ef4565b6109569190610fdf565b99505050505050509091929394565b60005460ff166109d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff1615610ab8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016109cd565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610a213390565b6000612710610b3a7f000000000000000000000000000000000000000000000000000000000000000082611047565b610b44908461105f565b610b4e919061109c565b92915050565b80610b8b576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190557f82e7ee47180a631312683eeb2a85ad264c9af490d54de5a75bbdb95b968c6de281610bbb81610b0b565b6040805192835260208301919091520160405180910390a150565b60008313610c10576040517f56e05d2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8369ffffffffffffffffffff168169ffffffffffffffffffff161080610c34575081155b15610c6b576040517fb1cf675500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60015460009080831015610cb1576040517fb416da7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610cbc82610b0b565b905080841115610ccd579392505050565b509192915050565b6020810160068310610d10577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b600060208083528351808285015260005b81811015610d4357858101830151858201604001528201610d27565b81811115610d55576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b69ffffffffffffffffffff8116811461070c57600080fd5b600060208284031215610db357600080fd5b8135610dbe81610d89565b9392505050565b600060208284031215610dd757600080fd5b5035919050565b600060208284031215610df057600080fd5b81518015158114610dbe57600080fd5b600181811c90821680610e1457607f821691505b60208210811415610e4e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600080600080600060a08688031215610e6c57600080fd5b8551610e7781610d89565b809550506020860151935060408601519250606086015191506080860151610e9e81610d89565b809150509295509295909350565b600060208284031215610ebe57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615610f3557610f35610ec5565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615610f7057610f70610ec5565b60008712925087820587128484161615610f8c57610f8c610ec5565b87850587128184161615610fa257610fa2610ec5565b505050929093029392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082610fee57610fee610fb0565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f80000000000000000000000000000000000000000000000000000000000000008314161561104257611042610ec5565b500590565b6000821982111561105a5761105a610ec5565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561109757611097610ec5565b500290565b6000826110ab576110ab610fb0565b50049056fea2646970667358221220ca5730f8ac976a41fd1283a55d712276536b576394940abc65027e8592280cc364736f6c634300080a003360806040523480156200001157600080fd5b5060405162003960380380620039608339810160408190526200003491620002a2565b8151829082906200004d90600290602085019062000133565b5080516200006390600390602084019062000133565b506000601260405162000076906200019d565b6060808252600790820152664352564d6f636b60c81b608082015260a0602082018190526015908201527f43525620666f72204375727665506f6f6c4d6f636b000000000000000000000060c082015260ff909116604082015260e001604051809103906000f080158015620000f0573d6000803e3d6000fd5b50600080546001600160a01b039092166001600160a01b03199283168117909155600180549092161790555050670de0b6b3a7640000600755506200030c915050565b8280548282559060005260206000209081019282156200018b579160200282015b828111156200018b57825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019062000154565b5062000199929150620001ab565b5090565b611758806200220883390190565b5b80821115620001995760008155600101620001ac565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b0381168114620001f057600080fd5b919050565b600082601f8301126200020757600080fd5b815160206001600160401b0380831115620002265762000226620001c2565b8260051b604051601f19603f830116810181811084821117156200024e576200024e620001c2565b6040529384528581018301938381019250878511156200026d57600080fd5b83870191505b8482101562000297576200028782620001d8565b8352918301919083019062000273565b979650505050505050565b60008060408385031215620002b657600080fd5b82516001600160401b0380821115620002ce57600080fd5b620002dc86838701620001f5565b93506020850151915080821115620002f357600080fd5b506200030285828601620001f5565b9150509250929050565b611eec806200031c6000396000f3fe608060405234801561001057600080fd5b506004361061030a5760003560e01c806382c630661161019c578063bb7b8b80116100ee578063e2e7d26411610097578063f851a44011610071578063f851a44014610597578063fc0c546a1461059e578063fee3f7f91461036257600080fd5b8063e2e7d26414610576578063ecb586a514610584578063f446c1d01461036257600080fd5b8063d96c7fce116100c8578063d96c7fce14610369578063dd62ed3e14610568578063ddca3f431461036257600080fd5b8063bb7b8b801461053a578063c661065714610542578063cc2b27d71461055557600080fd5b80639fdaea0c11610150578063b739953e1161012a578063b739953e14610501578063b91434d114610514578063b9947eb01461052757600080fd5b80639fdaea0c146104db578063a6417ed6146104ee578063b4b577ad1461036257600080fd5b80638ea875f3116101815780638ea875f3146104bf57806395d89b411461033557806399bd2ba5146104c857600080fd5b806382c630661461048c57806385ca3c6f146104ac57600080fd5b80633df02124116102605780635e0d443f1161020957806371035418116101e3578063710354181461045457806376a2f0f0146103625780637b475b681461046757600080fd5b80635e0d443f1461042d57806363543f061461036257806370a082311461044057600080fd5b80634903b0d11161023a5780634903b0d1146104075780635409491a1461036257806356ac35031461041a57600080fd5b80633df02124146103e15780634469e30e146103695780634515cef3146103f457600080fd5b806318160ddd116102c257806323746eb81161029c57806323746eb814610393578063313ce567146103625780633883e119146103cb57600080fd5b806318160ddd146103625780631a4d01d21461037e5780632081066c1461036257600080fd5b806307211ef7116102f357806307211ef71461034f578063140522881461036257806314f059791461036957600080fd5b8063065a80d81461030f57806306fdde0314610335575b600080fd5b61032261031d36600461192d565b6105be565b6040519081526020015b60405180910390f35b6040805160208101825260008152905161032c9190611974565b61032261035d3660046119c5565b610677565b6000610322565b6103716106c7565b60405161032c9190611a01565b61039161038c366004611a32565b6106f2565b005b6103a66103a136600461192d565b6107e6565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161032c565b6103226103d9366004611a79565b600092915050565b6103916103ef366004611ab1565b610826565b610391610402366004611b88565b610950565b610322610415366004611bb3565b610b1c565b6103916104283660046119c5565b610b31565b61032261043b3660046119c5565b610b92565b61032261044e366004611bf0565b50600090565b610391610462366004611bb3565b600755565b610391610475366004611c0b565b600f9190910b600090815260066020526040902055565b6001546103a69073ffffffffffffffffffffffffffffffffffffffff1681565b6103716104ba366004611c35565b610bce565b61032260075481565b6103916104d6366004611c73565b610c04565b6103916104e9366004611c8f565b610c63565b6103916104fc366004611ab1565b610de6565b6103a661050f36600461192d565b6111a6565b6103916105223660046119c5565b6111be565b6103a6610535366004611bb3565b61121f565b600754610322565b6103a6610550366004611bb3565b611234565b610322610563366004611cac565b611249565b6103226103d9366004611cd8565b61032261044e366004611bb3565b610391610592366004611d02565b61127f565b60006103a6565b6000546103a69073ffffffffffffffffffffffffffffffffffffffff1681565b6000600282600f0b815481106105d6576105d6611d26565b6000918252602090912001546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa15801561064d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106719190611d55565b92915050565b600f83810b60009081526005602090815260408083209386900b8352929052908120546b033b2e3c9fd0803ce8000000906106b3908490611d9d565b6106bd9190611dda565b90505b9392505050565b6106cf6118f8565b604051806060016040528060008152602001600081526020016000815250905090565b6000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810185905273ffffffffffffffffffffffffffffffffffffffff909116906379cc6790906044016020604051808303816000875af1158015610769573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078d9190611e15565b506107e133826002856fffffffffffffffffffffffffffffffff16815481106107b8576107b8611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169190611402565b505050565b6000600282600f0b815481106107fe576107fe611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1692915050565b6000610833858585610b92565b9050818110156108ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f437572766556314d6f636b3a20494e53554646494349454e545f4f555450555460448201527f5f414d4f554e540000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61091f3330856002896fffffffffffffffffffffffffffffffff16815481106108f5576108f5611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169291906114d6565b61094933826002876fffffffffffffffffffffffffffffffff16815481106107b8576107b8611d26565b5050505050565b60005b6003811015610a7f57600083826003811061097057610970611d26565b60200201511115610a6d576002818154811061098e5761098e611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff166323b872dd33308685600381106109c9576109c9611d26565b60200201516040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff938416600482015292909116602483015260448201526064016020604051808303816000875af1158015610a47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6b9190611e15565b505b80610a7781611e32565b915050610953565b506000546040517f40c10f190000000000000000000000000000000000000000000000000000000081523360048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f19906044015b6020604051808303816000875af1158015610af8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e19190611e15565b6000600282815481106105d6576105d6611d26565b600f83810b60009081526005602090815260408083209386900b835292905220819055610b6a6b033b2e3c9fd0803ce80000008261153a565b600f92830b60009081526005602090815260408083209690950b825294909452919092205550565b600f83810b60009081526004602090815260408083209386900b8352929052908120546b033b2e3c9fd0803ce8000000906106b3908490611d9d565b610bd66118f8565b6040805160608181019092529085906003908390839080828437600092019190915250919695505050505050565b6000546040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052909116906340c10f1990604401610ad9565b60005b6003811015610d88576000838260038110610c8357610c83611d26565b60200201351115610d765760028181548110610ca157610ca1611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33858460038110610cdb57610cdb611d26565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff9093166004840152602002013560248201526044016020604051808303816000875af1158015610d50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d749190611e15565b505b80610d8081611e32565b915050610c66565b506000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906379cc679090604401610ad9565b60006002856fffffffffffffffffffffffffffffffff1681548110610e0d57610e0d611d26565b60009182526020822001546003805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff8816908110610e5957610e59611d26565b60009182526020822001546002805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff8816908110610ea557610ea5611d26565b60009182526020822001546003805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff8916908110610ef157610ef1611d26565b600091825260208220015473ffffffffffffffffffffffffffffffffffffffff169150610f1f898989610677565b905085811015610fb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f437572766556314d6f636b3a20494e53554646494349454e545f4f555450555460448201527f5f414d4f554e540000000000000000000000000000000000000000000000000060648201526084016108c1565b610fd373ffffffffffffffffffffffffffffffffffffffff851633308a6114d6565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526024820189905285169063095ea7b3906044016020604051808303816000875af1158015611048573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061106c9190611e15565b506040517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8616906340c10f1990604401600060405180830381600087803b1580156110db57600080fd5b505af11580156110ef573d6000803e3d6000fd5b50506040517f1e9a69500000000000000000000000000000000000000000000000000000000081523060048201526024810184905273ffffffffffffffffffffffffffffffffffffffff86169250631e9a69509150604401600060405180830381600087803b15801561116157600080fd5b505af1158015611175573d6000803e3d6000fd5b5061119b9250505073ffffffffffffffffffffffffffffffffffffffff83163383611402565b505050505050505050565b6000600382600f0b815481106107fe576107fe611d26565b600f83810b60009081526004602090815260408083209386900b8352929052208190556111f76b033b2e3c9fd0803ce80000008261153a565b600f92830b60009081526004602090815260408083209690950b825294909452919092205550565b6000600382815481106107fe576107fe611d26565b6000600282815481106107fe576107fe611d26565b600f81900b6000908152600660205260408120546b033b2e3c9fd0803ce8000000906112759085611d9d565b6106c09190611dda565b60005b60038110156113a457600082826003811061129f5761129f611d26565b6020020151111561139257600281815481106112bd576112bd611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb338484600381106112f7576112f7611d26565b60200201516040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af115801561136c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113909190611e15565b505b8061139c81611e32565b915050611282565b506000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810184905273ffffffffffffffffffffffffffffffffffffffff909116906379cc679090604401610ad9565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526107e19084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526116a0565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526115349085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611454565b50505050565b60408051808201909152600281527f4d330000000000000000000000000000000000000000000000000000000000006020820152600090826115a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c19190611974565b5060006115b7600284611dda565b90506b033b2e3c9fd0803ce80000006115f0827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611e6b565b6115fa9190611dda565b8411156040518060400160405280600281526020017f4d310000000000000000000000000000000000000000000000000000000000008152509061166b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c19190611974565b5082816116846b033b2e3c9fd0803ce800000087611d9d565b61168e9190611e82565b6116989190611dda565b949350505050565b6000611702826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166117ac9092919063ffffffff16565b8051909150156107e157808060200190518101906117209190611e15565b6107e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016108c1565b60606106bd848460008585843b61181f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108c1565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516118489190611e9a565b60006040518083038185875af1925050503d8060008114611885576040519150601f19603f3d011682016040523d82523d6000602084013e61188a565b606091505b509150915061189a8282866118a5565b979650505050505050565b606083156118b45750816106c0565b8251156118c45782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c19190611974565b60405180606001604052806003906020820280368337509192915050565b8035600f81900b811461192857600080fd5b919050565b60006020828403121561193f57600080fd5b6106c082611916565b60005b8381101561196357818101518382015260200161194b565b838111156115345750506000910152565b6020815260008251806020840152611993816040850160208701611948565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000606084860312156119da57600080fd5b6119e384611916565b92506119f160208501611916565b9150604084013590509250925092565b60608101818360005b6003811015611a29578151835260209283019290910190600101611a0a565b50505092915050565b600080600060608486031215611a4757600080fd5b833592506119f160208501611916565b806060810183101561067157600080fd5b8015158114611a7657600080fd5b50565b60008060808385031215611a8c57600080fd5b611a968484611a57565b91506060830135611aa681611a68565b809150509250929050565b60008060008060808587031215611ac757600080fd5b611ad085611916565b9350611ade60208601611916565b93969395505050506040820135916060013590565b600082601f830112611b0457600080fd5b6040516060810181811067ffffffffffffffff82111715611b4e577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604052806060840185811115611b6357600080fd5b845b81811015611b7d578035835260209283019201611b65565b509195945050505050565b60008060808385031215611b9b57600080fd5b611ba58484611af3565b946060939093013593505050565b600060208284031215611bc557600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461192857600080fd5b600060208284031215611c0257600080fd5b6106c082611bcc565b60008060408385031215611c1e57600080fd5b611c2783611916565b946020939093013593505050565b600080600060e08486031215611c4a57600080fd5b611c548585611a57565b9250611c638560608601611a57565b915060c084013590509250925092565b60008060408385031215611c8657600080fd5b611c2783611bcc565b60008060808385031215611ca257600080fd5b611ba58484611a57565b60008060408385031215611cbf57600080fd5b82359150611ccf60208401611916565b90509250929050565b60008060408385031215611ceb57600080fd5b611cf483611bcc565b9150611ccf60208401611bcc565b60008060808385031215611d1557600080fd5b82359150611ccf8460208501611af3565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215611d6757600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611dd557611dd5611d6e565b500290565b600082611e10577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600060208284031215611e2757600080fd5b81516106c081611a68565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611e6457611e64611d6e565b5060010190565b600082821015611e7d57611e7d611d6e565b500390565b60008219821115611e9557611e95611d6e565b500190565b60008251611eac818460208701611948565b919091019291505056fea2646970667358221220a76213374b33de2cb1c5d61e9c1133f6d8163c7b90c32a6142a6f4fd98fe430364736f6c634300080a003360a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a00336101606040523480156200001257600080fd5b5060405162001852380380620018528339810160408190526200003591620003a3565b6000805460ff191690558585828260c882826001600160a01b0381166200006f57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000ae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d49190620004de565b6001600160a01b0316608052508051620000f6906002906020840190620002ca565b505060a052506001600160a01b0382166200012457604051635919af9760e11b815260040160405180910390fd5b6001600160a01b03821660c0819052670de0b6b3a764000060e05260408051630176f71760e71b815290516000929163bb7b8b809160048083019260209291908290030181865afa1580156200017e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001a4919062000503565b9050620001b1816200022a565b505050506001600160a01b0384161580620001d357506001600160a01b038316155b80620001e657506001600160a01b038216155b156200020557604051635919af9760e11b815260040160405180910390fd5b506001600160a01b039283166101005290821661012052166101405250620005d09050565b8062000249576040516309aadd6f60e41b815260040160405180910390fd5b60018190557f82e7ee47180a631312683eeb2a85ad264c9af490d54de5a75bbdb95b968c6de2816200027b8162000296565b6040805192835260208301919091520160405180910390a150565b60a05160009061271090620002ac908262000533565b620002b890846200054e565b620002c4919062000570565b92915050565b828054620002d89062000593565b90600052602060002090601f016020900481019282620002fc576000855562000347565b82601f106200031757805160ff191683800117855562000347565b8280016001018555821562000347579182015b82811115620003475782518255916020019190600101906200032a565b506200035592915062000359565b5090565b5b808211156200035557600081556001016200035a565b80516001600160a01b03811681146200038857600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60008060008060008060c08789031215620003bd57600080fd5b620003c88762000370565b95506020620003d981890162000370565b9550620003e96040890162000370565b9450620003f96060890162000370565b9350620004096080890162000370565b60a08901519093506001600160401b03808211156200042757600080fd5b818a0191508a601f8301126200043c57600080fd5b8151818111156200045157620004516200038d565b604051601f8201601f19908116603f011681019083821181831017156200047c576200047c6200038d565b816040528281528d868487010111156200049557600080fd5b600093505b82841015620004b957848401860151818501870152928501926200049a565b82841115620004cb5760008684830101525b8096505050505050509295509295509295565b600060208284031215620004f157600080fd5b620004fc8262000370565b9392505050565b6000602082840312156200051657600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156200054957620005496200051d565b500190565b60008160001904831182151516156200056b576200056b6200051d565b500290565b6000826200058e57634e487b7160e01b600052601260045260246000fd5b500490565b600181811c90821680620005a857607f821691505b60208210811415620005ca57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c05160e0516101005161012051610140516111e86200066a6000396000818161023501526108c8015260008181610383015261080901526000818161033901526107620152600081816103120152610a250152600081816101b001526109890152600081816101760152610c170152600081816102eb015281816103db01528181610557015261068f01526111e86000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c80639a6fc8f5116100cd578063b09ad8a011610081578063d62ada1111610066578063d62ada1114610376578063e5693f411461037e578063feaf968c146103a557600080fd5b8063b09ad8a01461035b578063bc489a651461036357600080fd5b8063a50cf2c8116100b2578063a50cf2c8146102e6578063a834559e1461030d578063ab0ca0e11461033457600080fd5b80639a6fc8f514610293578063a384d6ff146102dd57600080fd5b8063427cb6fe116101245780635c975abb116101095780635c975abb1461025f5780637284e416146102765780638456cb591461028b57600080fd5b8063427cb6fe1461023057806354fd4d501461025757600080fd5b8063313ce56711610155578063313ce567146101f75780633f4ba83a146102115780633fd0875f1461021b57600080fd5b806312b495a814610171578063218751b2146101ab575b600080fd5b6101987f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101a2565b6101ff600881565b60405160ff90911681526020016101a2565b6102196103ad565b005b610223600381565b6040516101a29190610dd7565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b610198600181565b60005460ff165b60405190151581526020016101a2565b61027e61049b565b6040516101a29190610e18565b610219610529565b6102a66102a1366004610ea3565b610615565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a0016101a2565b61019860015481565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b6101987f000000000000000000000000000000000000000000000000000000000000000081565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b61019861064f565b610219610371366004610ec7565b610661565b610266600181565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b6102a6610751565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa158015610437573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061045b9190610ee0565b610491576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610499610a67565b565b600280546104a890610f02565b80601f01602080910402602001604051908101604052809291908181526020018280546104d490610f02565b80156105215780601f106104f657610100808354040283529160200191610521565b820191906000526020600020905b81548152906001019060200180831161050457829003601f168201915b505050505081565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa1580156105b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105d79190610ee0565b61060d576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610499610b4d565b60008060008060006040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061065c600154610c0d565b905090565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156106eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070f9190610ee0565b610745576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61074e81610c56565b50565b6000806000806000806000806000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156107cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ef9190610f56565b939d50919b509950975095506108078a8a8989610cd8565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610872573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108969190610f56565b9398509196509450925090506108ae85858484610cd8565b888412156108c6578499508398508297508196508095505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610931573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109559190610f56565b93985091965094509250905061096d85858484610cd8565b88841215610985578499508398508297508196508095505b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb7b8b806040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a169190610fae565b9050610a2181610d73565b90507f0000000000000000000000000000000000000000000000000000000000000000610a4e828c610ff6565b610a5891906110e1565b99505050505050509091929394565b60005460ff16610ad8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff1615610bba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610acf565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b233390565b6000612710610c3c7f000000000000000000000000000000000000000000000000000000000000000082611149565b610c469084611161565b610c50919061119e565b92915050565b80610c8d576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190557f82e7ee47180a631312683eeb2a85ad264c9af490d54de5a75bbdb95b968c6de281610cbd81610c0d565b6040805192835260208301919091520160405180910390a150565b60008313610d12576040517f56e05d2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8369ffffffffffffffffffff168169ffffffffffffffffffff161080610d36575081155b15610d6d576040517fb1cf675500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60015460009080831015610db3576040517fb416da7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610dbe82610c0d565b905080841115610dcf579392505050565b509192915050565b6020810160068310610e12577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b600060208083528351808285015260005b81811015610e4557858101830151858201604001528201610e29565b81811115610e57576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b69ffffffffffffffffffff8116811461074e57600080fd5b600060208284031215610eb557600080fd5b8135610ec081610e8b565b9392505050565b600060208284031215610ed957600080fd5b5035919050565b600060208284031215610ef257600080fd5b81518015158114610ec057600080fd5b600181811c90821680610f1657607f821691505b60208210811415610f50577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600080600080600060a08688031215610f6e57600080fd5b8551610f7981610e8b565b809550506020860151935060408601519250606086015191506080860151610fa081610e8b565b809150509295509295909350565b600060208284031215610fc057600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60008413600084138583048511828216161561103757611037610fc7565b7f8000000000000000000000000000000000000000000000000000000000000000600087128682058812818416161561107257611072610fc7565b6000871292508782058712848416161561108e5761108e610fc7565b878505871281841616156110a4576110a4610fc7565b505050929093029392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826110f0576110f06110b2565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f80000000000000000000000000000000000000000000000000000000000000008314161561114457611144610fc7565b500590565b6000821982111561115c5761115c610fc7565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561119957611199610fc7565b500290565b6000826111ad576111ad6110b2565b50049056fea2646970667358221220226b667ed6fc6db7c8ec1377cc84dae524e2dc572320ead4a7092944a6b912de64736f6c634300080a00336101806040523480156200001257600080fd5b5060405162001982380380620019828339810160408190526200003591620003bc565b6000805460ff191690558686828260c882826001600160a01b0381166200006f57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000ae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d491906200050b565b6001600160a01b0316608052508051620000f6906002906020840190620002e3565b505060a052506001600160a01b0382166200012457604051635919af9760e11b815260040160405180910390fd5b6001600160a01b03821660c0819052670de0b6b3a764000060e05260408051630176f71760e71b815290516000929163bb7b8b809160048083019260209291908290030181865afa1580156200017e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001a4919062000530565b9050620001b18162000243565b505050506001600160a01b0385161580620001d357506001600160a01b038416155b80620001e657506001600160a01b038316155b80620001f957506001600160a01b038216155b156200021857604051635919af9760e11b815260040160405180910390fd5b506001600160a01b039384166101005291831661012052821661014052166101605250620005fd9050565b8062000262576040516309aadd6f60e41b815260040160405180910390fd5b60018190557f82e7ee47180a631312683eeb2a85ad264c9af490d54de5a75bbdb95b968c6de2816200029481620002af565b6040805192835260208301919091520160405180910390a150565b60a05160009061271090620002c5908262000560565b620002d190846200057b565b620002dd91906200059d565b92915050565b828054620002f190620005c0565b90600052602060002090601f01602090048101928262000315576000855562000360565b82601f106200033057805160ff191683800117855562000360565b8280016001018555821562000360579182015b828111156200036057825182559160200191906001019062000343565b506200036e92915062000372565b5090565b5b808211156200036e576000815560010162000373565b80516001600160a01b0381168114620003a157600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600080600080600080600060e0888a031215620003d857600080fd5b620003e38862000389565b96506020620003f4818a0162000389565b96506200040460408a0162000389565b95506200041460608a0162000389565b94506200042460808a0162000389565b93506200043460a08a0162000389565b60c08a01519093506001600160401b03808211156200045257600080fd5b818b0191508b601f8301126200046757600080fd5b8151818111156200047c576200047c620003a6565b604051601f8201601f19908116603f01168101908382118183101715620004a757620004a7620003a6565b816040528281528e86848701011115620004c057600080fd5b600093505b82841015620004e45784840186015181850187015292850192620004c5565b82841115620004f65760008684830101525b80965050505050505092959891949750929550565b6000602082840312156200051e57600080fd5b620005298262000389565b9392505050565b6000602082840312156200054357600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156200057657620005766200054a565b500190565b60008160001904831182151516156200059857620005986200054a565b500290565b600082620005bb57634e487b7160e01b600052601260045260246000fd5b500490565b600181811c90821680620005d557607f821691505b60208210811415620005f757634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c05160e051610100516101205161014051610160516112d9620006a96000396000818161029b01526109b901526000818161024001526108fa0152600081816103b5015261083b01526000818161036b01526107940152600081816103440152610b160152600081816101bb0152610a7a0152600081816101810152610d0801526000818161031d0152818161040d0152818161058901526106c101526112d96000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80638456cb59116100d8578063ab0ca0e11161008c578063d62ada1111610066578063d62ada11146103a8578063e5693f41146103b0578063feaf968c146103d757600080fd5b8063ab0ca0e114610366578063b09ad8a01461038d578063bc489a651461039557600080fd5b8063a384d6ff116100bd578063a384d6ff1461030f578063a50cf2c814610318578063a834559e1461033f57600080fd5b80638456cb59146102bd5780639a6fc8f5146102c557600080fd5b8063427cb6fe1161012f5780635c975abb116101145780635c975abb1461026a5780637284e416146102815780637aac1c481461029657600080fd5b8063427cb6fe1461023b57806354fd4d501461026257600080fd5b8063313ce56711610160578063313ce567146102025780633f4ba83a1461021c5780633fd0875f1461022657600080fd5b806312b495a81461017c578063218751b2146101b6575b600080fd5b6101a37f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b6101dd7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101ad565b61020a600881565b60405160ff90911681526020016101ad565b6102246103df565b005b61022e600481565b6040516101ad9190610ec8565b6101dd7f000000000000000000000000000000000000000000000000000000000000000081565b6101a3600181565b60005460ff165b60405190151581526020016101ad565b6102896104cd565b6040516101ad9190610f09565b6101dd7f000000000000000000000000000000000000000000000000000000000000000081565b61022461055b565b6102d86102d3366004610f94565b610647565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a0016101ad565b6101a360015481565b6101dd7f000000000000000000000000000000000000000000000000000000000000000081565b6101a37f000000000000000000000000000000000000000000000000000000000000000081565b6101dd7f000000000000000000000000000000000000000000000000000000000000000081565b6101a3610681565b6102246103a3366004610fb8565b610693565b610271600181565b6101dd7f000000000000000000000000000000000000000000000000000000000000000081565b6102d8610783565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa158015610469573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048d9190610fd1565b6104c3576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104cb610b58565b565b600280546104da90610ff3565b80601f016020809104026020016040519081016040528092919081815260200182805461050690610ff3565b80156105535780601f1061052857610100808354040283529160200191610553565b820191906000526020600020905b81548152906001019060200180831161053657829003601f168201915b505050505081565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa1580156105e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106099190610fd1565b61063f576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104cb610c3e565b60008060008060006040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061068e600154610cfe565b905090565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561071d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107419190610fd1565b610777576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61078081610d47565b50565b6000806000806000806000806000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156107fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108219190611047565b939d50919b509950975095506108398a8a8989610dc9565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156108a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c89190611047565b9398509196509450925090506108e085858484610dc9565b888412156108f8578499508398508297508196508095505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610963573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109879190611047565b93985091965094509250905061099f85858484610dc9565b888412156109b7578499508398508297508196508095505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610a22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a469190611047565b939850919650945092509050610a5e85858484610dc9565b88841215610a76578499508398508297508196508095505b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb7b8b806040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ae3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b07919061109f565b9050610b1281610e64565b90507f0000000000000000000000000000000000000000000000000000000000000000610b3f828c6110e7565b610b4991906111d2565b99505050505050509091929394565b60005460ff16610bc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff1615610cab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bc0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610c143390565b6000612710610d2d7f00000000000000000000000000000000000000000000000000000000000000008261123a565b610d379084611252565b610d41919061128f565b92915050565b80610d7e576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190557f82e7ee47180a631312683eeb2a85ad264c9af490d54de5a75bbdb95b968c6de281610dae81610cfe565b6040805192835260208301919091520160405180910390a150565b60008313610e03576040517f56e05d2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8369ffffffffffffffffffff168169ffffffffffffffffffff161080610e27575081155b15610e5e576040517fb1cf675500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60015460009080831015610ea4576040517fb416da7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610eaf82610cfe565b905080841115610ec0579392505050565b509192915050565b6020810160068310610f03577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b600060208083528351808285015260005b81811015610f3657858101830151858201604001528201610f1a565b81811115610f48576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b69ffffffffffffffffffff8116811461078057600080fd5b600060208284031215610fa657600080fd5b8135610fb181610f7c565b9392505050565b600060208284031215610fca57600080fd5b5035919050565b600060208284031215610fe357600080fd5b81518015158114610fb157600080fd5b600181811c9082168061100757607f821691505b60208210811415611041577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600080600080600060a0868803121561105f57600080fd5b855161106a81610f7c565b80955050602086015193506040860151925060608601519150608086015161109181610f7c565b809150509295509295909350565b6000602082840312156110b157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615611128576111286110b8565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615611163576111636110b8565b6000871292508782058712848416161561117f5761117f6110b8565b87850587128184161615611195576111956110b8565b505050929093029392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826111e1576111e16111a3565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615611235576112356110b8565b500590565b6000821982111561124d5761124d6110b8565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561128a5761128a6110b8565b500290565b60008261129e5761129e6111a3565b50049056fea26469706673582212201ac3e66d7646fe6cc19eeb98703f28a4e57d890bef3635f1ed53ec7a4ea130d864736f6c634300080a00336102606040523480156200001257600080fd5b5060405162005f7e38038062005f7e833981016040819052620000359162000ba4565b83838383600284846001600160a01b03821615806200005b57506001600160a01b038116155b156200007a57604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038216608081905260408051632f7a188160e01b81529051632f7a1881916004808201926020929091908290030181865afa158015620000c5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000eb919062000c01565b6001600160a01b0390811660a05290811660c05260016000558416151590506200012857604051635919af9760e11b815260040160405180910390fd5b608051604051630f67c5bd60e41b81526001600160a01b0385811660048301529091169063f67c5bd090602401602060405180830381865afa15801562000173573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000199919062000c26565b620001c757604051634c607af960e11b81526001600160a01b03841660048201526024015b60405180910390fd5b6001600160a01b038084166101e081905261020052821661022052610240819052620001f460006200090a565b6001600160a01b031660e0526200020c60016200090a565b6001600160a01b0316610100526200022560026200090a565b6001600160a01b0316610120526200023e60036200090a565b6001600160a01b031661014052620002576000620009fd565b6001600160a01b031661016052620002706001620009fd565b6001600160a01b031661018052620002896002620009fd565b6001600160a01b03166101a052620002a26003620009fd565b6001600160a01b039081166101c05260e051161580620002cc5750610100516001600160a01b0316155b15620002eb57604051635919af9760e11b815260040160405180910390fd5b600281118015620003065750610120516001600160a01b0316155b156200032557604051635919af9760e11b815260040160405180910390fd5b600381118015620003405750610140516001600160a01b0316155b156200035f57604051635919af9760e11b815260040160405180910390fd5b60805160e051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620003ac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003d2919062000c26565b620004005760e051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b60805161010051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa1580156200044e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000474919062000c26565b620004a35761010051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b60028111801562000525575060805161012051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620004fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000523919062000c26565b155b15620005555761012051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b600381118015620005d7575060805161014051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620005af573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005d5919062000c26565b155b15620006075761014051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b610160516001600160a01b03161580159062000694575060805161016051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa1580156200066c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000692919062000c26565b155b15620006c45761016051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b610180516001600160a01b03161580159062000751575060805161018051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa15801562000729573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200074f919062000c26565b155b15620007815761018051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b6101a0516001600160a01b0316158015906200080e57506080516101a051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620007e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200080c919062000c26565b155b156200083e576101a051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b6101c0516001600160a01b031615801590620008cb57506080516101c051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620008a3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008c9919062000c26565b155b15620008fb576101c051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b50505050505050505062000c66565b60c05160405163c661065760e01b8152600481018390526000916001600160a01b03169063c661065790602401602060405180830381865afa92505050801562000973575060408051601f3d908101601f19168201909252620009709181019062000c01565b60015b6200097e5762000984565b92915050565b60c05160405163046e8dd760e31b8152600f84900b60048201526001600160a01b03909116906323746eb8906024015b602060405180830381865afa925050508015620009f0575060408051601f3d908101601f19168201909252620009ed9181019062000c01565b60015b6200097e57506000919050565b610220516000906001600160a01b03161562000a1e576200097e8262000ac0565b60c051604051630b9947eb60e41b8152600481018490526001600160a01b039091169063b9947eb090602401602060405180830381865afa92505050801562000a86575060408051601f3d908101601f1916820190925262000a839181019062000c01565b60015b6200097e5760c051604051635b9cca9f60e11b8152600f84900b60048201526001600160a01b039091169063b739953e90602401620009b4565b60008162000ad4576200097e600062000b17565b610220516001600160a01b031663c661065762000af360018562000c40565b6040518263ffffffff1660e01b8152600401620009b491815260200190565b919050565b600081600f0b6000141562000b2b575060e0515b81600f0b6001141562000b3e5750610100515b81600f0b6002141562000b515750610120515b81600f0b6003141562000b645750610140515b6001600160a01b03811662000b12576040516334769e6f60e21b815260040160405180910390fd5b80516001600160a01b038116811462000b1257600080fd5b6000806000806080858703121562000bbb57600080fd5b62000bc68562000b8c565b935062000bd66020860162000b8c565b925062000be66040860162000b8c565b915062000bf66060860162000b8c565b905092959194509250565b60006020828403121562000c1457600080fd5b62000c1f8262000b8c565b9392505050565b60006020828403121562000c3957600080fd5b5051919050565b60008282101562000c6157634e487b7160e01b600052601160045260246000fd5b500390565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e051610200516102205161024051614f9b62000fe36000396000818161077001528181613503015281816135f501528181613735015281816138ec0152613a06015260006105f101526000818161068801528181611ec70152818161238c015281816126b3015281816129580152818161303a01526130d8015260006108a701526000818161059c0152612a5a0152600081816103d40152612a2b01526000818161061801526129fc0152600081816106af01526129cd015260008181610870015281816128320152818161365f01528181613f5e01526143f20152600081816104fd015281816128030152818161356d01528181613e8e01526142d60152600081816107da015281816127d40152818161347901528181613dbe01526141ba01526000818161045d015281816127a5015281816133ad01528181613cee015261409e01526000818161072201528181610914015281816109e101528181610a7101528181610b6901528181610cd601528181610d5301528181610dea01528181610e7a0152818161128801528181611300015281816114d801528181611572015281816115ba015281816116e101528181611729015281816117da0152818161180f01528181611af801528181611bef01528181611c6701528181611d0c01528181611f1101528181611fc901528181611ffe015281816120990152818161240d01528181612448015281816124b50152818161254601528181612c7801528181612d9701528181612e710152818161407601528181614192015281816142ae015281816143ca015261451201526000818161052401528181612ae3015281816145b90152614693015260008181610749015281816110180152818161191a01528181611e5301528181612232015281816125e0015281816126db015281816128d001528181612cce01528181612d6801528181612ec701528181612f6f01528181613231015281816132e8015281816133d8015281816134a1015281816135950152818161368701528181613c2101528181613d1601528181613de601528181613eb601528181613f86015281816140ec015281816142080152818161432401528181614440015281816144e3015281816146230152818161471b015281816147cf01526148790152614f9b6000f3fe608060405234801561001057600080fd5b50600436106103a45760003560e01c806378aa73a4116101e9578063ce30bbdb1161010f578063e3103273116100ad578063f446c1d01161007c578063f446c1d014610892578063f851a4401461089a578063fc0c546a146108a2578063fee3f7f9146108c957600080fd5b8063e310327314610832578063ec026ca714610845578063ed8e84f314610858578063ef14101e1461086b57600080fd5b8063d96c7fce116100e9578063d96c7fce146107fc578063dd62ed3e14610804578063ddca3f4314610817578063e2e7d2641461081f57600080fd5b8063ce30bbdb146107b3578063cf023dd0146107c2578063d21220a7146107d557600080fd5b8063b739953e11610187578063c12c21c011610156578063c12c21c014610744578063c21ee1621461076b578063c661065714610792578063cc2b27d7146107a057600080fd5b8063b739953e146106f4578063b9947eb014610707578063bb7b8b8014610715578063bd90df701461071d57600080fd5b80638ba51dfc116101c35780638ba51dfc146106aa57806395d89b41146106d1578063a6417ed6146106d9578063b4b577ad146106ec57600080fd5b806378aa73a41461065557806379bea6641461067057806382c630661461068357600080fd5b80632f7a1881116102ce57806357d788751161026c57806364a89bca1161023b57806364a89bca146105ec5780636e1d82711461061357806370a082311461063a57806376a2f0f01461064d57600080fd5b806357d78875146105975780635b36389c146105be5780635e0d443f146105d157806363543f06146105e457600080fd5b80633df02124116102a85780633df02124146105615780634469e30e146105745780634903b0d11461057c5780635409491a1461058f57600080fd5b80632f7a18811461051f578063313ce5671461054657806333d2ebf21461054e57600080fd5b806314052288116103465780631af4de83116103155780631af4de83146104ca5780632081066c146104dd57806323746eb8146104e557806325be124e146104f857600080fd5b8063140522881461049f57806314f05979146104a757806318160ddd146104af5780631a4d01d2146104b757600080fd5b806307211ef71161038257806307211ef7146104305780630b4c7e4d146104435780630dfe1681146104585780630f6ba8e31461047f57600080fd5b8063065a80d8146103a957806306871163146103cf57806306fdde031461041b575b600080fd5b6103bc6103b736600461490d565b6108d1565b6040519081526020015b60405180910390f35b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016103c6565b610423610a6d565b6040516103c6919061499e565b6103bc61043e3660046149b1565b610b25565b6104566104513660046149fe565b610bf4565b005b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b61049261048d366004614a29565b610c91565b6040516103c69190614a67565b6103bc610d4f565b610492610de0565b6103bc610e76565b6104566104c5366004614a98565b610ee3565b6104566104d83660046149b1565b610f76565b6103bc611284565b6103f66104f336600461490d565b6112f1565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc6112fc565b61045661055c366004614abd565b611369565b61045661056f366004614ae7565b6113fd565b6104926114ce565b6103bc61058a366004614b29565b611540565b6103bc6115b6565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6104566105cc366004614b42565b611623565b6103bc6105df3660046149b1565b61169d565b6103bc611725565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc610648366004614b91565b611792565b6103bc61180b565b61065d600281565b60405161ffff90911681526020016103c6565b61045661067e3660046149b1565b611878565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b610423611af4565b6104566106e7366004614ae7565b611b61565b6103bc611beb565b6103f661070236600461490d565b611c58565b6103f6610702366004614b29565b6103bc611c63565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc7f000000000000000000000000000000000000000000000000000000000000000081565b6103f66104f3366004614b29565b6103bc6107ae366004614bae565b611cd0565b60056040516103c69190614bd1565b6104566107d0366004614a98565b611d8d565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b610492611f07565b6103bc610812366004614c12565b611f79565b6103bc611ffa565b6103bc61082d366004614b29565b612067565b6104566108403660046149fe565b6120dd565b610456610853366004614abd565b61216c565b6103bc610866366004614c4b565b6123cd565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc612444565b6103f66124b1565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc612542565b6040517f4903b0d10000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff821660048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634903b0d1906024015b602060405180830381865afa9250505080156109ab575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526109a891810190614c7d565b60015b610a62576040517f065a80d8000000000000000000000000000000000000000000000000000000008152600f83900b60048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063065a80d8906024015b602060405180830381865afa158015610a3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a629190614c7d565b92915050565b919050565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015610ada573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b209190810190614d57565b905090565b6040517f07211ef7000000000000000000000000000000000000000000000000000000008152600f84810b600483015283900b6024820152604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906307211ef7906064015b602060405180830381865afa158015610bc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bea9190614c7d565b90505b9392505050565b60026000541415610c66576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b60026000908155610c88906001843581109160208601359190911190806125af565b50506001600055565b610c996148dd565b6040517f0f6ba8e300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690630f6ba8e390610d0f90879087908790600401614da8565b6040805180830381865afa158015610d2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bea9190614dcf565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663140522886040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b209190614c7d565b610de86148dd565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166314f059796040518163ffffffff1660e01b81526004016040805180830381865afa158015610e52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b209190614dcf565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b60026000541415610f50576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b60026000908155610f6083612794565b9050610f6b8161289f565b505060016000555050565b60026000541415610fe3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611074573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110989190614e4f565b905060006110a5856129bc565b905060006110b2856129bc565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529192506000918416906370a0823190602401602060405180830381865afa158015611124573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111489190614c7d565b90506001811115611276577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce800000061118e8784614e6c565b6111989190614ed0565b604051600f8a810b602483015289900b60448201526064810184905260848101829052909150611273908690869086907fa6417ed6000000000000000000000000000000000000000000000000000000009060a4015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152600180612ac6565b50505b505060016000555050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632081066c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b6000610a6282612794565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b600260005414156113d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b600260009081556113e683612794565b90506113f3838284612f3e565b5050600160005550565b6002600054141561146a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b6002600090815561147a85612794565b9050600061148785612794565b905061127682826000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052506001935091506131e89050565b6114d66148dd565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16634469e30e6040518163ffffffff1660e01b81526004016040805180830381865afa158015610e52573d6000803e3d6000fd5b6040517f4903b0d1000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634903b0d190602401610954565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635409491a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b60026000541415611690576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b6002600055610c886132b7565b6040517f5e0d443f000000000000000000000000000000000000000000000000000000008152600f84810b600483015283900b6024820152604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635e0d443f90606401610ba9565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166363543f066040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401610a21565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166376a2f0f06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b600260005414156118e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611976573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061199a9190614e4f565b905060006119a785612794565b905060006119b485612794565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529192506000918416906370a0823190602401602060405180830381865afa158015611a26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a4a9190614c7d565b90506001811115611276577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce8000000611a908784614e6c565b611a9a9190614ed0565b604051600f8a810b602483015289900b60448201526064810184905260848101829052909150611273908690869086907f3df02124000000000000000000000000000000000000000000000000000000009060a4016111ee565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610ada573d6000803e3d6000fd5b60026000541415611bce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b60026000908155611bde856129bc565b90506000611487856129bc565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b4b577ad6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b6000610a62826129bc565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb7b8b806040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b6040517fcc2b27d700000000000000000000000000000000000000000000000000000000815260048101839052600f82900b60248201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063cc2b27d7906044015b602060405180830381865afa158015611d69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bed9190614c7d565b60026000541415611dfa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b60026000908155611e0a83612794565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611e9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ebe9190614e4f565b9050611efa81837f0000000000000000000000000000000000000000000000000000000000000000611ef1888a89613731565b60016000612ac6565b5050600160005550505050565b611f0f6148dd565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d96c7fce6040518163ffffffff1660e01b81526004016040805180830381865afa158015610e52573d6000803e3d6000fd5b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063dd62ed3e90604401611d4c565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b6040517fe2e7d264000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e2e7d26490602401610a21565b6002600054141561214a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b60026000908155610c8890600184358110916020860135919091119080613bf0565b600260005414156121d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b600260009081556121e983612794565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015612279573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061229d9190614e4f565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000918416906370a0823190602401602060405180830381865afa15801561230f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123339190614c7d565b905060018111156123c1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce80000006123798684614e6c565b6123839190614ed0565b90506123be83857f00000000000000000000000000000000000000000000000000000000000000006123b68a8787613731565b600180612ac6565b50505b50506001600055505050565b6040517fed8e84f300000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063ed8e84f390611d4c9086908690600401614f0b565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f446c1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa15801561251e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b209190614e4f565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fee3f7f96040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa15801561263c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126609190614e4f565b905061266e8585858561402d565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561271f57600080fd5b505af1158015612733573d6000803e3d6000fd5b505050506127776000368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506144a392505050565b506127848585858561402d565b61278d816145a1565b5050505050565b600081600f0b600014156127c557507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b600114156127f457507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6002141561282357507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6003141561285257507f00000000000000000000000000000000000000000000000000000000000000005b73ffffffffffffffffffffffffffffffffffffffff8116610a68576040517fd1da79bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa15801561292c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129509190614e4f565b90506129b7817f0000000000000000000000000000000000000000000000000000000000000000846000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509250829150612ac69050565b505050565b600081600f0b600014156129ed57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b60011415612a1c57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b60021415612a4b57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6003141561285257507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff8116610a68576040517fd1da79bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606000803373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614612c2f576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301528916906370a0823190602401602060405180830381865afa158015612b74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b989190614c7d565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152919350908816906370a0823190602401602060405180830381865afa158015612c08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c2c9190614c7d565b90505b8415612d2b576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612d1257600080fd5b505af1158015612d26573d6000803e3d6000fd5b505050505b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a90612dc19033907f0000000000000000000000000000000000000000000000000000000000000000908b90600401614f23565b6000604051808303816000875af1158015612de0573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052612e269190810190614d57565b92508415612f24576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612f0b57600080fd5b505af1158015612f1f573d6000803e3d6000fd5b505050505b612f3289898985858961467b565b50509695505050505050565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612fcb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fef9190614e4f565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000917f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015613081573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130a59190614c7d565b9050600181111561278d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016131e0827f0000000000000000000000000000000000000000000000000000000000000000867f1a4d01d200000000000000000000000000000000000000000000000000000000858a6b033b2e3c9fd0803ce80000006131328b84614e6c565b61313c9190614ed0565b6040516024810193909352600f9190910b60448301526064820152608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915260006001612ac6565b505050505050565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015260609060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015613278573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061329c9190614e4f565b90506132ac818888888888612ac6565b979650505050505050565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015613344573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133689190614e4f565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301529192507f0000000000000000000000000000000000000000000000000000000000000000909116906351e3f16090604401600060405180830381600087803b15801561341e57600080fd5b505af1158015613432573d6000803e3d6000fd5b50506040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f00000000000000000000000000000000000000000000000000000000000000001692506351e3f1609150604401600060405180830381600087803b1580156134e757600080fd5b505af11580156134fb573d6000803e3d6000fd5b5050505060027f000000000000000000000000000000000000000000000000000000000000000011156136e4576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156135d957600080fd5b505af11580156135ed573d6000803e3d6000fd5b5050505060037f000000000000000000000000000000000000000000000000000000000000000011156136e4576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156136cb57600080fd5b505af11580156136df573d6000803e3d6000fd5b505050505b6137246000368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506144a392505050565b5061372e816145a1565b50565b60607f0000000000000000000000000000000000000000000000000000000000000000600214156138ea5783600f0b600014613827576040516000602482015260448101849052606481018390527f0b4c7e4d00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526138e3565b6040516024810184905260006044820152606481018390527f0b4c7e4d00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091525b9050610bed565b7f000000000000000000000000000000000000000000000000000000000000000060031415613a045783600f0b6000146139bb5783600f0b60011461397257604051600060248201819052604482015260648101849052608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a4016137a5565b604051600060248201819052604482018590526064820152608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a4016137a5565b604051602481018490526000604482018190526064820152608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401613865565b7f000000000000000000000000000000000000000000000000000000000000000060041415613b8e5783600f0b600014613b3e5783600f0b600114613aee5783600f0b600214613a9e576040516000602482018190526044820181905260648201526084810184905260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c4016137a5565b6040516000602482018190526044820181905260648201859052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c4016137a5565b6040516000602482018190526044820185905260648201819052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c4016137a5565b6040516024810184905260006044820181905260648201819052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613865565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f496e636f7272656374206e436f696e73000000000000000000000000000000006044820152606401610c5d565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015613c7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ca19190614e4f565b90508415613d73576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015613d5a57600080fd5b505af1158015613d6e573d6000803e3d6000fd5b505050505b8315613e43576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015613e2a57600080fd5b505af1158015613e3e573d6000803e3d6000fd5b505050505b8215613f13576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015613efa57600080fd5b505af1158015613f0e573d6000803e3d6000fd5b505050505b8115613fe3576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015613fca57600080fd5b505af1158015613fde573d6000803e3d6000fd5b505050505b6140236000368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506144a392505050565b5061278d816145a1565b8315614149576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561413057600080fd5b505af1158015614144573d6000803e3d6000fd5b505050505b8215614265576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561424c57600080fd5b505af1158015614260573d6000803e3d6000fd5b505050505b8115614381576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561436857600080fd5b505af115801561437c573d6000803e3d6000fd5b505050505b801561449d576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561448457600080fd5b505af1158015614498573d6000803e3d6000fd5b505050505b50505050565b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815260609073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a9061453c9033907f0000000000000000000000000000000000000000000000000000000000000000908790600401614f23565b6000604051808303816000875af115801561455b573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610a629190810190614d57565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461372e576040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b15801561466757600080fd5b505af115801561278d573d6000803e3d6000fd5b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461477c576040517f654a9eda00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528681166024830152858116604483015260648201859052608482018490527f0000000000000000000000000000000000000000000000000000000000000000169063654a9eda9060a401600060405180830381600087803b15801561475f57600080fd5b505af1158015614773573d6000803e3d6000fd5b505050506131e0565b801561482c576040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015286811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b15801561481357600080fd5b505af1158015614827573d6000803e3d6000fd5b505050505b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015285811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156148bd57600080fd5b505af11580156148d1573d6000803e3d6000fd5b50505050505050505050565b60405180604001604052806002906020820280368337509192915050565b8035600f81900b8114610a6857600080fd5b60006020828403121561491f57600080fd5b610bed826148fb565b60005b8381101561494357818101518382015260200161492b565b8381111561449d5750506000910152565b6000815180845261496c816020860160208601614928565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610bed6020830184614954565b6000806000606084860312156149c657600080fd5b6149cf846148fb565b92506149dd602085016148fb565b9150604084013590509250925092565b8060408101831015610a6257600080fd5b60008060608385031215614a1157600080fd5b614a1b84846149ed565b946040939093013593505050565b600080600060a08486031215614a3e57600080fd5b614a4885856149ed565b9250614a5785604086016149ed565b9150608084013590509250925092565b60408101818360005b6002811015614a8f578151835260209283019290910190600101614a70565b50505092915050565b600080600060608486031215614aad57600080fd5b833592506149dd602085016148fb565b60008060408385031215614ad057600080fd5b614ad9836148fb565b946020939093013593505050565b60008060008060808587031215614afd57600080fd5b614b06856148fb565b9350614b14602086016148fb565b93969395505050506040820135916060013590565b600060208284031215614b3b57600080fd5b5035919050565b60008060608385031215614b5557600080fd5b82359150614b6684602085016149ed565b90509250929050565b73ffffffffffffffffffffffffffffffffffffffff8116811461372e57600080fd5b600060208284031215614ba357600080fd5b8135610bed81614b6f565b60008060408385031215614bc157600080fd5b82359150614b66602084016148fb565b6020810160118310614c0c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60008060408385031215614c2557600080fd5b8235614c3081614b6f565b91506020830135614c4081614b6f565b809150509250929050565b60008060608385031215614c5e57600080fd5b614c6884846149ed565b915060408301358015158114614c4057600080fd5b600060208284031215614c8f57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff80841115614ce057614ce0614c96565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715614d2657614d26614c96565b81604052809350858152868686011115614d3f57600080fd5b614d4d866020830187614928565b5050509392505050565b600060208284031215614d6957600080fd5b815167ffffffffffffffff811115614d8057600080fd5b8201601f81018413614d9157600080fd5b614da084825160208401614cc5565b949350505050565b60a08101604085833760408201600081526040858237506080919091019190915292915050565b600060408284031215614de157600080fd5b82601f830112614df057600080fd5b6040516040810181811067ffffffffffffffff82111715614e1357614e13614c96565b8060405250806040840185811115614e2a57600080fd5b845b81811015614e44578051835260209283019201614e2c565b509195945050505050565b600060208284031215614e6157600080fd5b8151610bed81614b6f565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ecb577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500290565b600082614f06577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60608101604084833791151560409190910152919050565b600073ffffffffffffffffffffffffffffffffffffffff808616835280851660208401525060606040830152614f5c6060830184614954565b9594505050505056fea26469706673582212205dd1b4208756e7993c5cfaf271be99123f9b37ebc97bdd8fd152eac9cd1e945564736f6c634300080a00336102606040523480156200001257600080fd5b5060405162005f8c38038062005f8c833981016040819052620000359162000ba4565b83838383600384846001600160a01b03821615806200005b57506001600160a01b038116155b156200007a57604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038216608081905260408051632f7a188160e01b81529051632f7a1881916004808201926020929091908290030181865afa158015620000c5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000eb919062000c01565b6001600160a01b0390811660a05290811660c05260016000558416151590506200012857604051635919af9760e11b815260040160405180910390fd5b608051604051630f67c5bd60e41b81526001600160a01b0385811660048301529091169063f67c5bd090602401602060405180830381865afa15801562000173573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000199919062000c26565b620001c757604051634c607af960e11b81526001600160a01b03841660048201526024015b60405180910390fd5b6001600160a01b038084166101e081905261020052821661022052610240819052620001f460006200090a565b6001600160a01b031660e0526200020c60016200090a565b6001600160a01b0316610100526200022560026200090a565b6001600160a01b0316610120526200023e60036200090a565b6001600160a01b031661014052620002576000620009fd565b6001600160a01b031661016052620002706001620009fd565b6001600160a01b031661018052620002896002620009fd565b6001600160a01b03166101a052620002a26003620009fd565b6001600160a01b039081166101c05260e051161580620002cc5750610100516001600160a01b0316155b15620002eb57604051635919af9760e11b815260040160405180910390fd5b600281118015620003065750610120516001600160a01b0316155b156200032557604051635919af9760e11b815260040160405180910390fd5b600381118015620003405750610140516001600160a01b0316155b156200035f57604051635919af9760e11b815260040160405180910390fd5b60805160e051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620003ac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003d2919062000c26565b620004005760e051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b60805161010051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa1580156200044e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000474919062000c26565b620004a35761010051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b60028111801562000525575060805161012051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620004fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000523919062000c26565b155b15620005555761012051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b600381118015620005d7575060805161014051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620005af573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005d5919062000c26565b155b15620006075761014051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b610160516001600160a01b03161580159062000694575060805161016051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa1580156200066c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000692919062000c26565b155b15620006c45761016051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b610180516001600160a01b03161580159062000751575060805161018051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa15801562000729573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200074f919062000c26565b155b15620007815761018051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b6101a0516001600160a01b0316158015906200080e57506080516101a051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620007e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200080c919062000c26565b155b156200083e576101a051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b6101c0516001600160a01b031615801590620008cb57506080516101c051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620008a3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008c9919062000c26565b155b15620008fb576101c051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b50505050505050505062000c66565b60c05160405163c661065760e01b8152600481018390526000916001600160a01b03169063c661065790602401602060405180830381865afa92505050801562000973575060408051601f3d908101601f19168201909252620009709181019062000c01565b60015b6200097e5762000984565b92915050565b60c05160405163046e8dd760e31b8152600f84900b60048201526001600160a01b03909116906323746eb8906024015b602060405180830381865afa925050508015620009f0575060408051601f3d908101601f19168201909252620009ed9181019062000c01565b60015b6200097e57506000919050565b610220516000906001600160a01b03161562000a1e576200097e8262000ac0565b60c051604051630b9947eb60e41b8152600481018490526001600160a01b039091169063b9947eb090602401602060405180830381865afa92505050801562000a86575060408051601f3d908101601f1916820190925262000a839181019062000c01565b60015b6200097e5760c051604051635b9cca9f60e11b8152600f84900b60048201526001600160a01b039091169063b739953e90602401620009b4565b60008162000ad4576200097e600062000b17565b610220516001600160a01b031663c661065762000af360018562000c40565b6040518263ffffffff1660e01b8152600401620009b491815260200190565b919050565b600081600f0b6000141562000b2b575060e0515b81600f0b6001141562000b3e5750610100515b81600f0b6002141562000b515750610120515b81600f0b6003141562000b645750610140515b6001600160a01b03811662000b12576040516334769e6f60e21b815260040160405180910390fd5b80516001600160a01b038116811462000b1257600080fd5b6000806000806080858703121562000bbb57600080fd5b62000bc68562000b8c565b935062000bd66020860162000b8c565b925062000be66040860162000b8c565b915062000bf66060860162000b8c565b905092959194509250565b60006020828403121562000c1457600080fd5b62000c1f8262000b8c565b9392505050565b60006020828403121562000c3957600080fd5b5051919050565b60008282101562000c6157634e487b7160e01b600052601160045260246000fd5b500390565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e051610200516102205161024051614fa962000fe36000396000818161078301528181613708015281816138bf015281816139d901528181613e0f0152613f01015260006105de01526000818161067501528181611f680152818161239f0152818161278901528181612e6b01528181612f0901526131ed015260006108ad01526000818161059c015261288b0152600081816103d4015261285c015260008181610605015261282d0152600081816106af01526127fe015260008181610876015281816126630152818161363501528181613f6b01526146640152600081816104d7015281816126340152818161356501528181613e7901526145480152600081816107f3015281816126050152818161349501528181613d85015261442c015260008181610448015281816125d6015281816133c501528181613cb901526143100152600081816107350152818161091a015281816109e701528181610a7701528181610b6f01528181610bfe01528181610c9501528181610d2601528181611139015281816111b1015281816112ee0152818161144101528181611578015281816115c00152818161166d015281816116b5015281816117660152818161179b01528181611ac501528181611b4301528181611ccd01528181611d4501528181611dea01528181611fb20152818161206b015281816120a00152818161213b0152818161245e015281816124cb0152818161255c01528181612aa901528181612bc801528181612ca2015281816142e801528181614404015281816145200152818161463c01526147840152600081816104fe0152818161291401528181614055015261482b01526000818161075c01528181610ec9015281816118a601528181611ef4015281816122450152818161270101528181612aff01528181612b9901528181612cf801528181612da0015281816130630152818161311a01528181613215015281816132f8015281816133ed015281816134bd0152818161358d0152818161365d01528181613bf401528181613ce401528181613dad01528181613ea101528181613f93015281816140dd015281816141910152818161423b0152818161435e0152818161447a01528181614596015281816146b20152818161475501526148950152614fa96000f3fe608060405234801561001057600080fd5b50600436106103a45760003560e01c806379bea664116101e9578063cc2b27d71161010f578063e2e7d264116100ad578063f446c1d01161007c578063f446c1d014610898578063f851a440146108a0578063fc0c546a146108a8578063fee3f7f9146108cf57600080fd5b8063e2e7d26414610838578063ec026ca71461084b578063ecb586a51461085e578063ef14101e1461087157600080fd5b8063d21220a7116100e9578063d21220a7146107ee578063d96c7fce14610815578063dd62ed3e1461081d578063ddca3f431461083057600080fd5b8063cc2b27d7146107b3578063ce30bbdb146107c6578063cf023dd0146107db57600080fd5b8063b4b577ad11610187578063bd90df7011610156578063bd90df7014610730578063c12c21c014610757578063c21ee1621461077e578063c6610657146107a557600080fd5b8063b4b577ad146106ff578063b739953e14610707578063b9947eb01461071a578063bb7b8b801461072857600080fd5b80638ba51dfc116101c35780638ba51dfc146106aa57806395d89b41146106d15780639fdaea0c146106d9578063a6417ed6146106ec57600080fd5b806379bea6641461065d57806382c630661461067057806385ca3c6f1461069757600080fd5b806333d2ebf2116102ce57806357d788751161026c5780636e1d82711161023b5780636e1d82711461060057806370a082311461062757806376a2f0f01461063a57806378aa73a41461064257600080fd5b806357d78875146105975780635e0d443f146105be57806363543f06146105d157806364a89bca146105d957600080fd5b80634469e30e116102a85780634469e30e146105615780634515cef3146105695780634903b0d11461057c5780635409491a1461058f57600080fd5b806333d2ebf2146105285780633883e1191461053b5780633df021241461054e57600080fd5b806318160ddd1161034657806323746eb81161031557806323746eb8146104bf57806325be124e146104d25780632f7a1881146104f9578063313ce5671461052057600080fd5b806318160ddd146104875780631a4d01d21461048f5780631af4de83146104a45780632081066c146104b757600080fd5b806307211ef71161038257806307211ef7146104305780630dfe168114610443578063140522881461046a57806314f059791461047257600080fd5b8063065a80d8146103a957806306871163146103cf57806306fdde031461041b575b600080fd5b6103bc6103b736600461491d565b6108d7565b6040519081526020015b60405180910390f35b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016103c6565b610423610a73565b6040516103c691906149ae565b6103bc61043e3660046149c1565b610b2b565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc610bfa565b61047a610c8b565b6040516103c691906149fd565b6103bc610d22565b6104a261049d366004614a2e565b610d8f565b005b6104a26104b23660046149c1565b610e27565b6103bc611135565b6103f66104cd36600461491d565b6111a2565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc6111ad565b6104a2610536366004614a53565b61121a565b6103bc610549366004614a8e565b6112ae565b6104a261055c366004614acb565b611366565b61047a611437565b6104a2610577366004614b0d565b6114aa565b6103bc61058a366004614b38565b611546565b6103bc6115bc565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc6105cc3660046149c1565b611629565b6103bc6116b1565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc610635366004614b73565b61171e565b6103bc611797565b61064a600281565b60405161ffff90911681526020016103c6565b6104a261066b3660046149c1565b611804565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b61047a6106a5366004614b90565b611a80565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b610423611b3f565b6104a26106e7366004614b0d565b611bac565b6104a26106fa366004614acb565b611c3f565b6103bc611cc9565b6103f661071536600461491d565b611d36565b6103f6610715366004614b38565b6103bc611d41565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc7f000000000000000000000000000000000000000000000000000000000000000081565b6103f66104cd366004614b38565b6103bc6107c1366004614bce565b611dae565b6107ce600681565b6040516103c69190614bfa565b6104a26107e9366004614a2e565b611e2e565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b61047a611fa8565b6103bc61082b366004614c3b565b61201b565b6103bc61209c565b6103bc610846366004614b38565b612109565b6104a2610859366004614a53565b61217f565b6104a261086c366004614c69565b6123e0565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc61245a565b6103f66124c7565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc612558565b6040517f4903b0d10000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff821660048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634903b0d1906024015b602060405180830381865afa9250505080156109b1575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526109ae91810190614c8d565b60015b610a68576040517f065a80d8000000000000000000000000000000000000000000000000000000008152600f83900b60048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063065a80d8906024015b602060405180830381865afa158015610a44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a689190614c8d565b92915050565b919050565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015610ae0573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b269190810190614d67565b905090565b6040517f07211ef7000000000000000000000000000000000000000000000000000000008152600f84810b600483015283900b6024820152604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906307211ef7906064015b602060405180830381865afa158015610bcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf09190614c8d565b90505b9392505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663140522886040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b269190614c8d565b610c936148ed565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166314f059796040518163ffffffff1660e01b8152600401606060405180830381865afa158015610cfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b269190614db8565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b60026000541415610e01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b60026000908155610e11836125c5565b9050610e1c816126d0565b505060016000555050565b60026000541415610e94576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610f25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f499190614e36565b90506000610f56856127ed565b90506000610f63856127ed565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529192506000918416906370a0823190602401602060405180830381865afa158015610fd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff99190614c8d565b90506001811115611127577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce800000061103f8784614e53565b6110499190614eb7565b604051600f8a810b602483015289900b60448201526064810184905260848101829052909150611124908690869086907fa6417ed6000000000000000000000000000000000000000000000000000000009060a4015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526001806128f7565b50505b505060016000555050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632081066c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6000610a68826125c5565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b60026000541415611287576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b60026000908155611297836125c5565b90506112a4838284612d6f565b5050600160005550565b6040517f3883e11900000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690633883e119906113259086908690600401614ef2565b602060405180830381865afa158015611342573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf39190614c8d565b600260005414156113d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b600260009081556113e3856125c5565b905060006113f0856125c5565b905061112782826000368080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525060019350915061301a9050565b61143f6148ed565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16634469e30e6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610cfe573d6000803e3d6000fd5b60026000541415611517576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b6002600090815561153d90600184358110916020860135821091604087013511906130e9565b50506001600055565b6040517f4903b0d1000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634903b0d19060240161095a565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635409491a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6040517f5e0d443f000000000000000000000000000000000000000000000000000000008152600f84810b600483015283900b6024820152604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635e0d443f90606401610baf565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166363543f066040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401610a27565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166376a2f0f06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b60026000541415611871576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611902573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119269190614e36565b90506000611933856125c5565b90506000611940856125c5565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529192506000918416906370a0823190602401602060405180830381865afa1580156119b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d69190614c8d565b90506001811115611127577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce8000000611a1c8784614e53565b611a269190614eb7565b604051600f8a810b602483015289900b60448201526064810184905260848101829052909150611124908690869086907f3df02124000000000000000000000000000000000000000000000000000000009060a40161109f565b611a886148ed565b6040517f85ca3c6f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906385ca3c6f90611afe90879087908790600401614f0a565b606060405180830381865afa158015611b1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf09190614db8565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610ae0573d6000803e3d6000fd5b60026000541415611c19576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b6002600090815561153d90600184358110916020860135821091604087013511906132c7565b60026000541415611cac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b60026000908155611cbc856127ed565b905060006113f0856127ed565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b4b577ad6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6000610a68826127ed565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb7b8b806040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6040517fcc2b27d700000000000000000000000000000000000000000000000000000000815260048101839052600f82900b60248201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063cc2b27d790604401611325565b60026000541415611e9b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b60026000908155611eab836125c5565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611f3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f5f9190614e36565b9050611f9b81837f0000000000000000000000000000000000000000000000000000000000000000611f92888a89613704565b600160006128f7565b5050600160005550505050565b611fb06148ed565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d96c7fce6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610cfe573d6000803e3d6000fd5b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063dd62ed3e90604401611325565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6040517fe2e7d264000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e2e7d26490602401610a27565b600260005414156121ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b600260009081556121fc836125c5565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa15801561228c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b09190614e36565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000918416906370a0823190602401602060405180830381865afa158015612322573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123469190614c8d565b905060018111156123d4577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce800000061238c8684614e53565b6123969190614eb7565b90506123d183857f00000000000000000000000000000000000000000000000000000000000000006123c98a8787613704565b6001806128f7565b50505b50506001600055505050565b6002600054141561244d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b600260005561153d613bc3565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f446c1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa158015612534573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b269190614e36565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fee3f7f96040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b600081600f0b600014156125f657507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6001141561262557507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6002141561265457507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6003141561268357507f00000000000000000000000000000000000000000000000000000000000000005b73ffffffffffffffffffffffffffffffffffffffff8116610a6e576040517fd1da79bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa15801561275d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127819190614e36565b90506127e8817f0000000000000000000000000000000000000000000000000000000000000000846000368080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525092508291506128f79050565b505050565b600081600f0b6000141561281e57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6001141561284d57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6002141561287c57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6003141561268357507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff8116610a6e576040517fd1da79bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606000803373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614612a60576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301528916906370a0823190602401602060405180830381865afa1580156129a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129c99190614c8d565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152919350908816906370a0823190602401602060405180830381865afa158015612a39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a5d9190614c8d565b90505b8415612b5c576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612b4357600080fd5b505af1158015612b57573d6000803e3d6000fd5b505050505b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a90612bf29033907f0000000000000000000000000000000000000000000000000000000000000000908b90600401614f31565b6000604051808303816000875af1158015612c11573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052612c579190810190614d67565b92508415612d55576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612d3c57600080fd5b505af1158015612d50573d6000803e3d6000fd5b505050505b612d6389898985858961403d565b50509695505050505050565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612dfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e209190614e36565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000917f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015612eb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ed69190614c8d565b90506001811115613013577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01613011827f0000000000000000000000000000000000000000000000000000000000000000867f1a4d01d200000000000000000000000000000000000000000000000000000000858a6b033b2e3c9fd0803ce8000000612f638b84614e53565b612f6d9190614eb7565b6040516024810193909352600f9190910b60448301526064820152608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152600060016128f7565b505b5050505050565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015260609060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa1580156130aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130ce9190614e36565b90506130de8188888888886128f7565b979650505050505050565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015613176573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061319a9190614e36565b90506131a88585858561429f565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561325957600080fd5b505af115801561326d573d6000803e3d6000fd5b505050506132b16000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061471592505050565b506132be8585858561429f565b61301381614813565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015613354573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133789190614e36565b9050841561344a576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561343157600080fd5b505af1158015613445573d6000803e3d6000fd5b505050505b831561351a576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561350157600080fd5b505af1158015613515573d6000803e3d6000fd5b505050505b82156135ea576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156135d157600080fd5b505af11580156135e5573d6000803e3d6000fd5b505050505b81156136ba576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156136a157600080fd5b505af11580156136b5573d6000803e3d6000fd5b505050505b6136fa6000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061471592505050565b5061301381614813565b60607f0000000000000000000000000000000000000000000000000000000000000000600214156138bd5783600f0b6000146137fa576040516000602482015260448101849052606481018390527f0b4c7e4d00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526138b6565b6040516024810184905260006044820152606481018390527f0b4c7e4d00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091525b9050610bf3565b7f0000000000000000000000000000000000000000000000000000000000000000600314156139d75783600f0b60001461398e5783600f0b60011461394557604051600060248201819052604482015260648101849052608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401613778565b604051600060248201819052604482018590526064820152608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401613778565b604051602481018490526000604482018190526064820152608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401613838565b7f000000000000000000000000000000000000000000000000000000000000000060041415613b615783600f0b600014613b115783600f0b600114613ac15783600f0b600214613a71576040516000602482018190526044820181905260648201526084810184905260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613778565b6040516000602482018190526044820181905260648201859052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613778565b6040516000602482018190526044820185905260648201819052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613778565b6040516024810184905260006044820181905260648201819052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613838565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f496e636f7272656374206e436f696e73000000000000000000000000000000006044820152606401610df8565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015613c50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c749190614e36565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301529192507f0000000000000000000000000000000000000000000000000000000000000000909116906351e3f16090604401600060405180830381600087803b158015613d2a57600080fd5b505af1158015613d3e573d6000803e3d6000fd5b50506040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f00000000000000000000000000000000000000000000000000000000000000001692506351e3f1609150604401600060405180830381600087803b158015613df357600080fd5b505af1158015613e07573d6000803e3d6000fd5b5050505060027f00000000000000000000000000000000000000000000000000000000000000001115613ff0576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015613ee557600080fd5b505af1158015613ef9573d6000803e3d6000fd5b5050505060037f00000000000000000000000000000000000000000000000000000000000000001115613ff0576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015613fd757600080fd5b505af1158015613feb573d6000803e3d6000fd5b505050505b6140306000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061471592505050565b5061403a81614813565b50565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461413e576040517f654a9eda00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528681166024830152858116604483015260648201859052608482018490527f0000000000000000000000000000000000000000000000000000000000000000169063654a9eda9060a401600060405180830381600087803b15801561412157600080fd5b505af1158015614135573d6000803e3d6000fd5b50505050613011565b80156141ee576040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015286811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b1580156141d557600080fd5b505af11580156141e9573d6000803e3d6000fd5b505050505b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015285811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561427f57600080fd5b505af1158015614293573d6000803e3d6000fd5b50505050505050505050565b83156143bb576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156143a257600080fd5b505af11580156143b6573d6000803e3d6000fd5b505050505b82156144d7576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156144be57600080fd5b505af11580156144d2573d6000803e3d6000fd5b505050505b81156145f3576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156145da57600080fd5b505af11580156145ee573d6000803e3d6000fd5b505050505b801561470f576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156146f657600080fd5b505af115801561470a573d6000803e3d6000fd5b505050505b50505050565b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815260609073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a906147ae9033907f0000000000000000000000000000000000000000000000000000000000000000908790600401614f31565b6000604051808303816000875af11580156147cd573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610a689190810190614d67565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461403a576040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b1580156148d957600080fd5b505af1158015613013573d6000803e3d6000fd5b60405180606001604052806003906020820280368337509192915050565b8035600f81900b8114610a6e57600080fd5b60006020828403121561492f57600080fd5b610bf38261490b565b60005b8381101561495357818101518382015260200161493b565b8381111561470f5750506000910152565b6000815180845261497c816020860160208601614938565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610bf36020830184614964565b6000806000606084860312156149d657600080fd5b6149df8461490b565b92506149ed6020850161490b565b9150604084013590509250925092565b60608101818360005b6003811015614a25578151835260209283019290910190600101614a06565b50505092915050565b600080600060608486031215614a4357600080fd5b833592506149ed6020850161490b565b60008060408385031215614a6657600080fd5b614a6f8361490b565b946020939093013593505050565b8060608101831015610a6857600080fd5b60008060808385031215614aa157600080fd5b614aab8484614a7d565b915060608301358015158114614ac057600080fd5b809150509250929050565b60008060008060808587031215614ae157600080fd5b614aea8561490b565b9350614af86020860161490b565b93969395505050506040820135916060013590565b60008060808385031215614b2057600080fd5b614b2a8484614a7d565b946060939093013593505050565b600060208284031215614b4a57600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461403a57600080fd5b600060208284031215614b8557600080fd5b8135610bf381614b51565b600080600060e08486031215614ba557600080fd5b614baf8585614a7d565b9250614bbe8560608601614a7d565b915060c084013590509250925092565b60008060408385031215614be157600080fd5b82359150614bf16020840161490b565b90509250929050565b6020810160118310614c35577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60008060408385031215614c4e57600080fd5b8235614c5981614b51565b91506020830135614ac081614b51565b60008060808385031215614c7c57600080fd5b82359150614bf18460208501614a7d565b600060208284031215614c9f57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff80841115614cf057614cf0614ca6565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715614d3657614d36614ca6565b81604052809350858152868686011115614d4f57600080fd5b614d5d866020830187614938565b5050509392505050565b600060208284031215614d7957600080fd5b815167ffffffffffffffff811115614d9057600080fd5b8201601f81018413614da157600080fd5b614db084825160208401614cd5565b949350505050565b600060608284031215614dca57600080fd5b82601f830112614dd957600080fd5b6040516060810181811067ffffffffffffffff82111715614dfc57614dfc614ca6565b604052806060840185811115614e1157600080fd5b845b81811015614e2b578051835260209283019201614e13565b509195945050505050565b600060208284031215614e4857600080fd5b8151610bf381614b51565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614eb2577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500290565b600082614eed577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60808101606084833791151560609190910152919050565b60e081016060858337606082016000815260608582375060c0919091019190915292915050565b600073ffffffffffffffffffffffffffffffffffffffff808616835280851660208401525060606040830152614f6a6060830184614964565b9594505050505056fea2646970667358221220efb951725986e76ee157ff0d00cd7b7a6a9b8a581784400c52be5c96516fe15064736f6c634300080a003360806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d00011790553480156200003a57600080fd5b506040805161018081019091526000908060c081018060018152604080518082018252600381526244414960e81b6020828101919091528301526012908201526305f5e100606082015260800160018152602001600081525081526020016040518060c001604052806002600a811115620000b957620000b962000b78565b815260408051808201825260048152635553444360e01b6020828101919091528301526006908201526305f5e100606082015260800160018152602001600081525081526020016040518060c001604052806003600a81111562000121576200012162000b78565b815260408051808201825260048152630ae8aa8960e31b602082810191909152830152601290820152644a817c8000606082015260800160028152602001600081525081526020016040518060c001604052806004600a8111156200018a576200018a62000b78565b815260408051808201825260048152634c494e4b60e01b6020828101919091528301526012908201526359682f00606082015260800160018152602001600081525081526020016040518060c001604052806005600a811115620001f257620001f262000b78565b815260408051808201825260048152631554d11560e21b602082810191909152830152601290820152633b023380606082015260800160018152602001600081525081526020016040518060c001604052806006600a8111156200025a576200025a62000b78565b815260408051808201825260058152640e6e88aa8960db1b602082810191909152830152601290820152644cd588640060608201526080016003815260200160009052905260408051610140810190915290915060009080608081018060078152602001604051806040016040528060048152602001636344414960e01b8152508152602001601260ff1681526020016305f5e100815260200160048081111562000309576200030962000b78565b8152602001600181525081526020016040518060c001604052806008600a81111562000339576200033962000b78565b81526040805180820182526005815264635553444360d81b6020828101919091528301526006908201526305f5e100606082015260800160048152602001600281525081526020016040518060c001604052806009600a811115620003a257620003a262000b78565b8152604080518082018252600581526418d554d11560da1b602082810191909152830152601290820152633b023380606082015260800160048152602001600581525081526020016040518060c00160405280600a808111156200040a576200040a62000b78565b81526040805180820182526005815264634c494e4b60d81b6020828101919091528301526012908201526359682f00606082015260800160048152602001600490529052905060005b600681101562000496576200048183826006811062000476576200047662000b8e565b6020020151620004db565b806200048d8162000ba4565b91505062000453565b5060005b6004811015620004d257620004bd82826004811062000476576200047662000b8e565b80620004c98162000ba4565b9150506200049a565b50505062000d14565b6000600282608001516004811115620004f857620004f862000b78565b14156200054e576040516200050d9062000a8c565b604051809103906000f0801580156200052a573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b03831617905590506200071e565b60038260800151600481111562000569576200056962000b78565b1415620005a4576040516200057e9062000a9a565b604051809103906000f0801580156200059b573d6000803e3d6000fd5b5090506200071e565b600182608001516004811115620005bf57620005bf62000b78565b1415620005f157816020015182602001518360400151604051620005e39062000aa8565b6200057e9392919062000c1e565b6004826080015160048111156200060c576200060c62000b78565b1415620006be576000600260008460a00151600a81111562000632576200063262000b78565b600a81111562000646576200064662000b78565b815260200190815260200160002060009054906101000a90046001600160a01b0316905082602001518360200151846040015183604051620006889062000ab6565b62000697949392919062000c5b565b604051809103906000f080158015620006b4573d6000803e3d6000fd5b509150506200071e565b60405162461bcd60e51b815260206004820152602b60248201527f74657374546f6b656e53756974653a204372656174696e6720756e6b6e6f776e60448201526a20746f6b656e207479706560a81b606482015260840160405180910390fd5b60005460208301516040516318caf8e360e31b8152620100009092046001600160a01b03169163c657c718916200075b9185919060040162000ca9565b600060405180830381600087803b1580156200077657600080fd5b505af11580156200078b573d6000803e3d6000fd5b50505050600082606001516008604051620007a69062000ac4565b91825260ff166020820152604001604051809103906000f080158015620007d1573d6000803e3d6000fd5b50905081600260008560000151600a811115620007f257620007f262000b78565b600a81111562000806576200080662000b78565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055508260600151600560008560000151600a8111156200085a576200085a62000b78565b600a8111156200086e576200086e62000b78565b8152602080820192909252604090810160009081209390935585516001600160a01b03861684526008909252909120805460ff1916600183600a811115620008ba57620008ba62000b78565b02179055508260800151600360008560000151600a811115620008e157620008e162000b78565b600a811115620008f557620008f562000b78565b81526020810191909152604001600020805460ff1916600183600481111562000922576200092262000b78565b0217905550604080518082019091526001600160a01b0380841682528281166020808401918252600780546001810182556000918252945160029095027fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688810180549686166001600160a01b031997881617905592517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c689909301805493909416929094169190911790915584015184519091600491600a811115620009eb57620009eb62000b78565b600a811115620009ff57620009ff62000b78565b8152602001908152602001600020908051906020019062000a2292919062000ad2565b5080600660008560000151600a81111562000a415762000a4162000b78565b600a81111562000a555762000a5562000b78565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550505050565b610ab1806200285183390190565b611224806200330283390190565b611758806200452683390190565b6117098062005c7e83390190565b6106ca806200738783390190565b82805462000ae09062000cd7565b90600052602060002090601f01602090048101928262000b04576000855562000b4f565b82601f1062000b1f57805160ff191683800117855562000b4f565b8280016001018555821562000b4f579182015b8281111562000b4f57825182559160200191906001019062000b32565b5062000b5d92915062000b61565b5090565b5b8082111562000b5d576000815560010162000b62565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600060001982141562000bc757634e487b7160e01b600052601160045260246000fd5b5060010190565b6000815180845260005b8181101562000bf65760208185018101518683018201520162000bd8565b8181111562000c09576000602083870101525b50601f01601f19169290920160200192915050565b60608152600062000c33606083018662000bce565b828103602084015262000c47818662000bce565b91505060ff83166040830152949350505050565b60808152600062000c70608083018762000bce565b828103602084015262000c84818762000bce565b60ff95909516604084015250506001600160a01b039190911660609091015292915050565b6001600160a01b038316815260406020820181905260009062000ccf9083018462000bce565b949350505050565b600181811c9082168062000cec57607f821691505b6020821081141562000d0e57634e487b7160e01b600052602260045260246000fd5b50919050565b611b2d8062000d246000396000f3fe6080604052600436106101635760003560e01c80638eb86e8b116100c0578063c6c3bbe611610074578063d051a62211610059578063d051a62214610490578063eebab8ef146104b0578063fa7626d4146104d057600080fd5b8063c6c3bbe614610433578063c74912d21461045357600080fd5b80639b140a85116100a55780639b140a85146103e6578063b36ba20814610406578063ba414fa61461040e57600080fd5b80638eb86e8b1461038357806398cdaadf146103a357600080fd5b80636a72bde71161011757806388327863116100fc578063883278631461030857806388f776a2146103365780638a3177a31461035657600080fd5b80636a72bde7146102c45780636ca42ae3146102e657600080fd5b8063440864fa11610148578063440864fa146102025780634b57b0be1461022f57806367b426451461028157600080fd5b806304bc3b1c1461016f57806310c7f0b9146101b557600080fd5b3661016a57005b600080fd5b34801561017b57600080fd5b5061019f61018a3660046116f6565b60086020526000908152604090205460ff1681565b6040516101ac9190611742565b60405180910390f35b3480156101c157600080fd5b506101d56101d036600461175c565b6104ea565b6040805173ffffffffffffffffffffffffffffffffffffffff9384168152929091166020830152016101ac565b34801561020e57600080fd5b5061022261021d366004611784565b610530565b6040516101ac91906117cb565b34801561023b57600080fd5b5060015461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101ac565b34801561028d57600080fd5b5061025c61029c366004611784565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156102d057600080fd5b506102e46102df36600461181c565b6105ca565b005b3480156102f257600080fd5b506102fb610730565b6040516101ac919061186b565b34801561031457600080fd5b506103286103233660046118d4565b6107b5565b6040519081526020016101ac565b34801561034257600080fd5b506102e461035136600461190b565b610888565b34801561036257600080fd5b50610328610371366004611784565b60056020526000908152604090205481565b34801561038f57600080fd5b506102e461039e366004611954565b6108b9565b3480156103af57600080fd5b5061025c6103be366004611784565b60066020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156103f257600080fd5b506102e4610401366004611993565b610a73565b6102e4610b22565b34801561041a57600080fd5b50610423610ba0565b60405190151581526020016101ac565b34801561043f57600080fd5b506102e461044e3660046119b3565b610d00565b34801561045f57600080fd5b5061048361046e366004611784565b60036020526000908152604090205460ff1681565b6040516101ac91906119d3565b34801561049c57600080fd5b506103286104ab36600461190b565b610daf565b3480156104bc57600080fd5b506102e46104cb366004611954565b610e8b565b3480156104dc57600080fd5b506000546104239060ff1681565b600781815481106104fa57600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff91821692501682565b60046020526000908152604090208054610549906119e7565b80601f0160208091040260200160405190810160405280929190818152602001828054610575906119e7565b80156105c25780601f10610597576101008083540402835291602001916105c2565b820191906000526020600020905b8154815290600101906020018083116105a557829003601f168201915b505050505081565b6000546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152620100009092049091169063ca669fa790602401600060405180830381600087803b15801561063e57600080fd5b505af1158015610652573d6000803e3d6000fd5b505050506002600085600a81111561066c5761066c611713565b600a81111561067d5761067d611713565b8152602081019190915260409081016000205490517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490529091169063095ea7b3906044016020604051808303816000875af1158015610705573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107299190611a3b565b5050505050565b60606007805480602002602001604051908101604052809291908181526020016000905b828210156107ac5760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff908116835260019182015416828401529083529092019101610754565b50505050905090565b60006002600084600a8111156107cd576107cd611713565b600a8111156107de576107de611713565b8152602081019190915260409081016000205490517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152909116906370a0823190602401602060405180830381865afa15801561085d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108819190611a5d565b9392505050565b6108b48383837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6105ca565b505050565b60016003600085600a8111156108d1576108d1611713565b600a8111156108e2576108e2611713565b815260208101919091526040016000205460ff16600481111561090757610907611713565b14610999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f74657374546f6b656e53756974653a20547279696e6720746f206275726e206160448201527f206e6f6e2d6e6f726d616c20746f6b656e00000000000000000000000000000060648201526084015b60405180910390fd5b6002600084600a8111156109af576109af611713565b600a8111156109c0576109c0611713565b8152602081019190915260409081016000205490517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526024820184905290911690639dc29fac906044015b6020604051808303816000875af1158015610a49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6d9190611a3b565b50505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604081205460ff169081600a811115610aaf57610aaf611713565b1415610b17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f20746f6b656e2077697468207375636820616464726573730000000000006044820152606401610990565b610a6d818484610888565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015610b8c57600080fd5b505af1158015610729573d6000803e3d6000fd5b60008054610100900460ff1615610bc05750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610cfb5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610c65917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc491608001611a76565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052610c9d91611abe565b6000604051808303816000865af19150503d8060008114610cda576040519150601f19603f3d011682016040523d82523d6000602084013e610cdf565b606091505b5091505080806020019051810190610cf79190611a3b565b9150505b919050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604081205460ff169081600a811115610d3c57610d3c611713565b1415610da4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f20746f6b656e2077697468207375636820616464726573730000000000006044820152606401610990565b610a6d818484610e8b565b60006002600085600a811115610dc757610dc7611713565b600a811115610dd857610dd8611713565b8152602081019190915260409081016000205490517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301529091169063dd62ed3e90604401602060405180830381865afa158015610e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e839190611a5d565b949350505050565b60026003600085600a811115610ea357610ea3611713565b600a811115610eb457610eb4611713565b815260208101919091526040016000205460ff166004811115610ed957610ed9611713565b1415610ff6576000546040517fc88a5e6d000000000000000000000000000000000000000000000000000000008152306004820152602481018390526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c88a5e6d90604401600060405180830381600087803b158015610f5657600080fd5b505af1158015610f6a573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015610fd857600080fd5b505af1158015610fec573d6000803e3d6000fd5b505050505061163c565b600380600085600a81111561100d5761100d611713565b600a81111561101e5761101e611713565b815260208101919091526040016000205460ff16600481111561104357611043611713565b14156111aa576000546040517fc88a5e6d000000000000000000000000000000000000000000000000000000008152306004820152602481018390526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c88a5e6d90604401600060405180830381600087803b1580156110c057600080fd5b505af11580156110d4573d6000803e3d6000fd5b505050506002600084600a8111156110ee576110ee611713565b600a8111156110ff576110ff611713565b8152602081019190915260409081016000205490517fa1903eab00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a1903eab90839060240160206040518083038185885af115801561117f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906111a49190611a5d565b5061163c565b60046003600085600a8111156111c2576111c2611713565b600a8111156111d3576111d3611713565b815260208101919091526040016000205460ff1660048111156111f8576111f8611713565b141561148f5760006002600085600a81111561121657611216611713565b600a81111561122757611227611713565b815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c49190611ada565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600860205260409020549091506112fb9060ff163084610e8b565b8073ffffffffffffffffffffffffffffffffffffffff1663095ea7b36002600087600a81111561132d5761132d611713565b600a81111561133e5761133e611713565b81526020810191909152604090810160002054905160e083901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602481018590526044016020604051808303816000875af11580156113c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e69190611a3b565b506002600085600a8111156113fd576113fd611713565b600a81111561140e5761140e611713565b8152602081019190915260409081016000205490517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810184905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f1990604401600060405180830381600087803b158015610fd857600080fd5b60016003600085600a8111156114a7576114a7611713565b600a8111156114b8576114b8611713565b815260208101919091526040016000205460ff1660048111156114dd576114dd611713565b14156115b4576002600084600a8111156114f9576114f9611713565b600a81111561150a5761150a611713565b8152602081019190915260409081016000205490517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f19906044016020604051808303816000875af1158015611590573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a49190611a3b565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f74657374546f6b656e53756974653a20547279696e6720746f207472616e736660448201527f657220756e6b6e6f776e20746f6b656e000000000000000000000000000000006064820152608401610990565b6002600084600a81111561165257611652611713565b600a81111561166357611663611713565b8152602081019190915260409081016000205490517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490529091169063a9059cbb90604401610a2a565b73ffffffffffffffffffffffffffffffffffffffff811681146116f357600080fd5b50565b60006020828403121561170857600080fd5b8135610881816116d1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60208101600b831061175657611756611713565b91905290565b60006020828403121561176e57600080fd5b5035919050565b8035600b8110610cfb57600080fd5b60006020828403121561179657600080fd5b61088182611775565b60005b838110156117ba5781810151838201526020016117a2565b83811115610a6d5750506000910152565b60208152600082518060208401526117ea81604085016020870161179f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000806080858703121561183257600080fd5b61183b85611775565b9350602085013561184b816116d1565b9250604085013561185b816116d1565b9396929550929360600135925050565b602080825282518282018190526000919060409081850190868401855b828110156118c7578151805173ffffffffffffffffffffffffffffffffffffffff90811686529087015116868501529284019290850190600101611888565b5091979650505050505050565b600080604083850312156118e757600080fd5b6118f083611775565b91506020830135611900816116d1565b809150509250929050565b60008060006060848603121561192057600080fd5b61192984611775565b92506020840135611939816116d1565b91506040840135611949816116d1565b809150509250925092565b60008060006060848603121561196957600080fd5b61197284611775565b92506020840135611982816116d1565b929592945050506040919091013590565b6000806000606084860312156119a857600080fd5b8335611929816116d1565b6000806000606084860312156119c857600080fd5b8335611972816116d1565b602081016005831061175657611756611713565b600181811c908216806119fb57607f821691505b60208210811415611a35577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600060208284031215611a4d57600080fd5b8151801515811461088157600080fd5b600060208284031215611a6f57600080fd5b5051919050565b7fffffffff000000000000000000000000000000000000000000000000000000008316815260008251611ab081600485016020870161179f565b919091016004019392505050565b60008251611ad081846020870161179f565b9190910192915050565b600060208284031215611aec57600080fd5b8151610881816116d156fea264697066735822122010fe735ed069aca27931edce4ba2ff14ec7886bf21b0eea685a884f9200fb49e64736f6c634300080a003360c0604052600d60808190526c2bb930b83832b21022ba3432b960991b60a090815261002e916000919061007a565b50604080518082019091526004808252630ae8aa8960e31b602090920191825261005a9160019161007a565b506002805460ff1916601217905534801561007457600080fd5b5061014e565b82805461008690610113565b90600052602060002090601f0160209004810192826100a857600085556100ee565b82601f106100c157805160ff19168380011785556100ee565b828001600101855582156100ee579182015b828111156100ee5782518255916020019190600101906100d3565b506100fa9291506100fe565b5090565b5b808211156100fa57600081556001016100ff565b600181811c9082168061012757607f821691505b6020821081141561014857634e487b7160e01b600052602260045260246000fd5b50919050565b6109548061015d6000396000f3fe6080604052600436106100cb5760003560e01c806340c10f1911610074578063a9059cbb1161004e578063a9059cbb14610225578063d0e30db014610245578063dd62ed3e1461024d57600080fd5b806340c10f19146101c357806370a08231146101e357806395d89b411461021057600080fd5b806323b872dd116100a557806323b872dd146101575780632e1a7d4d14610177578063313ce5671461019757600080fd5b806306fdde03146100df578063095ea7b31461010a57806318160ddd1461013a57600080fd5b366100da576100d8610285565b005b600080fd5b3480156100eb57600080fd5b506100f46102e0565b6040516101019190610703565b60405180910390f35b34801561011657600080fd5b5061012a61012536600461079f565b61036e565b6040519015158152602001610101565b34801561014657600080fd5b50475b604051908152602001610101565b34801561016357600080fd5b5061012a6101723660046107c9565b6103e7565b34801561018357600080fd5b506100d8610192366004610805565b6105fe565b3480156101a357600080fd5b506002546101b19060ff1681565b60405160ff9091168152602001610101565b3480156101cf57600080fd5b506100d86101de36600461079f565b6106a4565b3480156101ef57600080fd5b506101496101fe36600461081e565b60036020526000908152604090205481565b34801561021c57600080fd5b506100f46106e2565b34801561023157600080fd5b5061012a61024036600461079f565b6106ef565b6100d8610285565b34801561025957600080fd5b50610149610268366004610839565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102a490849061089b565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102ed906108b3565b80601f0160208091040260200160405190810160405280929190818152602001828054610319906108b3565b80156103665780601f1061033b57610100808354040283529160200191610366565b820191906000526020600020905b81548152906001019060200180831161034957829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103d69086815260200190565b60405180910390a350600192915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561041957600080fd5b73ffffffffffffffffffffffffffffffffffffffff8416331480159061048f575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105175773ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020548211156104d157600080fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915281208054849290610511908490610907565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061054c908490610907565b909155505073ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260408120805484929061058690849061089b565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516105ec91815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561061a57600080fd5b3360009081526003602052604081208054839290610639908490610907565b9091555050604051339082156108fc029083906000818181858888f1935050505015801561066b573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260036020526040812080548392906106d990849061089b565b90915550505050565b600180546102ed906108b3565b60006106fc3384846103e7565b9392505050565b600060208083528351808285015260005b8181101561073057858101830151858201604001528201610714565b81811115610742576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461079a57600080fd5b919050565b600080604083850312156107b257600080fd5b6107bb83610776565b946020939093013593505050565b6000806000606084860312156107de57600080fd5b6107e784610776565b92506107f560208501610776565b9150604084013590509250925092565b60006020828403121561081757600080fd5b5035919050565b60006020828403121561083057600080fd5b6106fc82610776565b6000806040838503121561084c57600080fd5b61085583610776565b915061086360208401610776565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156108ae576108ae61086c565b500190565b600181811c908216806108c757607f821691505b60208210811415610901577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000828210156109195761091961086c565b50039056fea26469706673582212206ec943fa4e3b70d8fca6c25b6aa26fa18e8f8952ce3bc4d5afcb443bf3097c0564736f6c634300080a003360806040526000600255600060035534801561001a57600080fd5b506111fa8061002a6000396000f3fe60806040526004361061016e5760003560e01c80637a28fb88116100cb578063bdd17e1c1161007f578063dd62ed3e11610059578063dd62ed3e146103ee578063ee7a7c0414610441578063f5eb42dc1461046157600080fd5b8063bdd17e1c146103ad578063cdb9a21c146103c3578063d5002f2e146103d957600080fd5b8063a1903eab116100b0578063a1903eab1461035a578063a457c2d71461036d578063a9059cbb1461038d57600080fd5b80637a28fb88146102f457806395d89b411461031457600080fd5b806323b872dd1161012257806337cfdaca1161010757806337cfdaca1461020d57806339509351146102b457806370a08231146102d457600080fd5b806323b872dd14610278578063313ce5671461029857600080fd5b806318160ddd1161015357806318160ddd1461020d578063192084511461023057806322301f6e1461025057600080fd5b806306fdde0314610185578063095ea7b3146101dd57600080fd5b366101805761017d6000610481565b50005b600080fd5b34801561019157600080fd5b5060408051808201909152601781527f4c6971756964207374616b656420457468657220322e3000000000000000000060208201525b6040516101d49190610f63565b60405180910390f35b3480156101e957600080fd5b506101fd6101f8366004610fff565b610545565b60405190151581526020016101d4565b34801561021957600080fd5b5061022261055b565b6040519081526020016101d4565b34801561023c57600080fd5b5061022261024b366004611029565b61056b565b34801561025c57600080fd5b5061027661026b366004611042565b600391909155600255565b005b34801561028457600080fd5b506101fd610293366004611064565b6105ab565b3480156102a457600080fd5b50604051601281526020016101d4565b3480156102c057600080fd5b506101fd6102cf366004610fff565b610696565b3480156102e057600080fd5b506102226102ef3660046110a0565b6106d9565b34801561030057600080fd5b5061022261030f366004611029565b61070e565b34801561032057600080fd5b5060408051808201909152600581527f737445544800000000000000000000000000000000000000000000000000000060208201526101c7565b6102226103683660046110a0565b61073a565b34801561037957600080fd5b506101fd610388366004610fff565b610745565b34801561039957600080fd5b506101fd6103a8366004610fff565b6107f9565b3480156103b957600080fd5b5061022260035481565b3480156103cf57600080fd5b5061022260025481565b3480156103e557600080fd5b50610222610806565b3480156103fa57600080fd5b506102226104093660046110bb565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b34801561044d57600080fd5b5061027661045c366004610fff565b610811565b34801561046d57600080fd5b5061022261047c3660046110a0565b61081f565b60003334806104f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f5a45524f5f4445504f534954000000000000000000000000000000000000000060448201526064015b60405180910390fd5b60006104fc8261056b565b9050806105065750805b8160036000828254610518919061111d565b909155506105289050838261084a565b61053383838761093b565b61053d8382610992565b949350505050565b60006105523384846109ea565b50600192915050565b600061056660035490565b905090565b60008061057760035490565b9050806105875750600092915050565b6105a48161059e61059760025490565b8690610b52565b90610b5e565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001602090815260408083203384529091528120548281101561066c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f5452414e534645525f414d4f554e545f455843454544535f414c4c4f57414e4360448201527f450000000000000000000000000000000000000000000000000000000000000060648201526084016104e8565b610677858585610b6a565b61068b85336106868487610bef565b6109ea565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916105529185906106869086610bfb565b73ffffffffffffffffffffffffffffffffffffffff81166000908152602081905260408120546107089061070e565b92915050565b60008061071a60025490565b90508061072a5750600092915050565b6105a48161059e61059760035490565b600061070882610481565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156107e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4445435245415345445f414c4c4f57414e43455f42454c4f575f5a45524f000060448201526064016104e8565b6107ef33856106868487610bef565b5060019392505050565b6000610552338484610b6a565b600061056660025490565b61081b8282610c07565b5050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040812054610708565b73ffffffffffffffffffffffffffffffffffffffff82166108c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4d494e545f544f5f5448455f5a45524f5f41444452455353000000000000000060448201526064016104e8565b80600260008282546108d9919061111d565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205461090e9082610bfb565b73ffffffffffffffffffffffffffffffffffffffff90921660009081526020819052604090209190915550565b6040805183815273ffffffffffffffffffffffffffffffffffffffff83811660208301528516917fed8dd430b1e4bba98e943dc5b157cf7b54d9e12916d6c474ff5733a95001d03b910160405180910390a2505050565b73ffffffffffffffffffffffffffffffffffffffff821660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6109d58461070e565b60405190815260200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff8316610a67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f415050524f56455f46524f4d5f5a45524f5f414444524553530000000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff8216610ae4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f415050524f56455f544f5f5a45524f5f4144445245535300000000000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006105a48284611135565b60006105a48284611172565b6000610b758261056b565b9050610b82848483610d64565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610be191815260200190565b60405180910390a350505050565b60006105a482846111ad565b60006105a4828461111d565b73ffffffffffffffffffffffffffffffffffffffff8216610c84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4255524e5f46524f4d5f5448455f5a45524f5f4144445245535300000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205480821115610d14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4255524e5f414d4f554e545f455843454544535f42414c414e4345000000000060448201526064016104e8565b8160026000828254610d2691906111ad565b90915550610d3690508183610bef565b73ffffffffffffffffffffffffffffffffffffffff9093166000908152602081905260409020929092555050565b73ffffffffffffffffffffffffffffffffffffffff8316610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f5452414e534645525f46524f4d5f5448455f5a45524f5f41444452455353000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff8216610e5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f5452414e534645525f544f5f5448455f5a45524f5f414444524553530000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205480821115610eee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5452414e534645525f414d4f554e545f455843454544535f42414c414e43450060448201526064016104e8565b610ef88183610bef565b73ffffffffffffffffffffffffffffffffffffffff8086166000908152602081905260408082209390935590851681522054610f349083610bfb565b73ffffffffffffffffffffffffffffffffffffffff909316600090815260208190526040902092909255505050565b600060208083528351808285015260005b81811015610f9057858101830151858201604001528201610f74565b81811115610fa2576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ffa57600080fd5b919050565b6000806040838503121561101257600080fd5b61101b83610fd6565b946020939093013593505050565b60006020828403121561103b57600080fd5b5035919050565b6000806040838503121561105557600080fd5b50508035926020909101359150565b60008060006060848603121561107957600080fd5b61108284610fd6565b925061109060208501610fd6565b9150604084013590509250925092565b6000602082840312156110b257600080fd5b6105a482610fd6565b600080604083850312156110ce57600080fd5b6110d783610fd6565b91506110e560208401610fd6565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611130576111306110ee565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561116d5761116d6110ee565b500290565b6000826111a8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000828210156111bf576111bf6110ee565b50039056fea2646970667358221220a5b4f31162ba2b8b3424cef84b31ef91d05a825243602b5fdf758ffb49b8246364736f6c634300080a003360a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a003360c06040523480156200001157600080fd5b506040516200170938038062001709833981016040819052620000349162000266565b8351849084906200004d906003906020850190620000f3565b50805162000063906004906020840190620000f3565b505050620000806200007a6200009d60201b60201c565b620000a1565b60ff9091166080526001600160a01b031660a05250620003479050565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b82805462000101906200030a565b90600052602060002090601f01602090048101928262000125576000855562000170565b82601f106200014057805160ff191683800117855562000170565b8280016001018555821562000170579182015b828111156200017057825182559160200191906001019062000153565b506200017e92915062000182565b5090565b5b808211156200017e576000815560010162000183565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c157600080fd5b81516001600160401b0380821115620001de57620001de62000199565b604051601f8301601f19908116603f0116810190828211818310171562000209576200020962000199565b816040528381526020925086838588010111156200022657600080fd5b600091505b838210156200024a57858201830151818301840152908201906200022b565b838211156200025c5760008385830101525b9695505050505050565b600080600080608085870312156200027d57600080fd5b84516001600160401b03808211156200029557600080fd5b620002a388838901620001af565b95506020870151915080821115620002ba57600080fd5b50620002c987828801620001af565b935050604085015160ff81168114620002e157600080fd5b60608601519092506001600160a01b0381168114620002ff57600080fd5b939692955090935050565b600181811c908216806200031f57607f821691505b602082108114156200034157634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05161138e6200037b600039600081816101f70152818161041f0152610600015260006101a2015261138e6000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80636f307dc3116100b257806395d89b4111610081578063a9059cbb11610066578063a9059cbb146102b5578063dd62ed3e146102c8578063f2fde38b1461030e57600080fd5b806395d89b411461029a578063a457c2d7146102a257600080fd5b80636f307dc3146101f257806370a082311461023e578063715018a6146102745780638da5cb5b1461027c57600080fd5b806323b872dd116100ee57806323b872dd14610188578063313ce5671461019b57806339509351146101cc57806340c10f19146101df57600080fd5b806306fdde0314610120578063095ea7b31461013e57806318160ddd146101615780631e9a695014610173575b600080fd5b610128610321565b604051610135919061112d565b60405180910390f35b61015161014c3660046111c9565b6103b3565b6040519015158152602001610135565b6002545b604051908152602001610135565b6101866101813660046111c9565b6103c9565b005b6101516101963660046111f3565b610491565b60405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610135565b6101516101da3660046111c9565b61057c565b6101866101ed3660046111c9565b6105c5565b6102197f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b61016561024c36600461122f565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610186610691565b60055473ffffffffffffffffffffffffffffffffffffffff16610219565b61012861071e565b6101516102b03660046111c9565b61072d565b6101516102c33660046111c9565b610805565b6101656102d6366004611251565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b61018661031c36600461122f565b610812565b60606003805461033090611284565b80601f016020809104026020016040519081016040528092919081815260200182805461035c90611284565b80156103a95780601f1061037e576101008083540402835291602001916103a9565b820191906000526020600020905b81548152906001019060200180831161038c57829003601f168201915b5050505050905090565b60006103c0338484610942565b50600192915050565b6103d33382610af5565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015610468573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048c91906112d8565b505050565b600061049e848484610ce2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6105718533858403610942565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916103c09185906105c0908690611329565b610942565b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906323b872dd906064016020604051808303816000875af115801561065e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068291906112d8565b5061068d8282610f96565b5050565b60055473ffffffffffffffffffffffffffffffffffffffff163314610712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161055b565b61071c60006110b6565b565b60606004805461033090611284565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156107ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161055b565b6107fb3385858403610942565b5060019392505050565b60006103c0338484610ce2565b60055473ffffffffffffffffffffffffffffffffffffffff163314610893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161055b565b73ffffffffffffffffffffffffffffffffffffffff8116610936576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161055b565b61093f816110b6565b50565b73ffffffffffffffffffffffffffffffffffffffff83166109e4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff8216610a87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8216610b98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015610c4e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290610c8a908490611341565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff8216610e28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610ede576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610f22908490611329565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f8891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161055b565b80600260008282546110259190611329565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152602081905260408120805483929061105f908490611329565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208083528351808285015260005b8181101561115a5785810183015185820160400152820161113e565b8181111561116c576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146111c457600080fd5b919050565b600080604083850312156111dc57600080fd5b6111e5836111a0565b946020939093013593505050565b60008060006060848603121561120857600080fd5b611211846111a0565b925061121f602085016111a0565b9150604084013590509250925092565b60006020828403121561124157600080fd5b61124a826111a0565b9392505050565b6000806040838503121561126457600080fd5b61126d836111a0565b915061127b602084016111a0565b90509250929050565b600181811c9082168061129857607f821691505b602082108114156112d2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156112ea57600080fd5b8151801515811461124a57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561133c5761133c6112fa565b500190565b600082821015611353576113536112fa565b50039056fea26469706673582212203a6db30cd3c097921df4156794aa7973eb848711deeb2cffd7c54a9df1fdb0a564736f6c634300080a003360a060405234801561001057600080fd5b506040516106ca3803806106ca83398101604081905261002f9161006c565b60009190915560ff166080526001805460506001600160501b031991821681179092556004805490911690911790554260028190556003556100a2565b6000806040838503121561007f57600080fd5b82519150602083015160ff8116811461009757600080fd5b809150509250929050565b60805161060e6100bc600039600060d3015261060e6000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80639a6fc8f511610081578063d62ada111161005b578063d62ada11146102dc578063f7a30806146102f4578063feaf968c1461030757600080fd5b80639a6fc8f5146101cd578063bd18ad531461023a578063cd653afc1461024d57600080fd5b806354fd4d50116100b257806354fd4d501461012d57806367e8d83d1461013c5780637284e4161461018e57600080fd5b8063313ce567146100ce5780633fd0875f1461010c575b600080fd5b6100f57f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020015b60405180910390f35b6004546a0100000000000000000000900460ff166040516101039190610441565b60405160018152602001610103565b61018c61014a366004610482565b600480549115156c01000000000000000000000000027fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff909216919091179055565b005b604080518082018252600c81527f7072696365206f7261636c6500000000000000000000000000000000000000006020820152905161010391906104ab565b6102036101db36600461053d565b60015460005460025460035460045469ffffffffffffffffffff948516941691939590929450565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610103565b61018c610248366004610558565b61030f565b61018c61025b366004610579565b6001805469ffffffffffffffffffff9586167fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090911617905560029290925560035560048054919092167fffffffffffffffffffffffffffffffffffffffff00ff00000000000000000000909116176b020000000000000000000000179055565b6102e461035f565b6040519015158152602001610103565b61018c6103023660046105bf565b600055565b610203610385565b600480548291907fffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff166b01000000000000000000000083600281111561035757610357610412565b021790555050565b600454600090610380906b010000000000000000000000900460ff166103d6565b905090565b60008060008060006004600c9054906101000a900460ff16156103a757600080fd5b505060015460005460025460035460045469ffffffffffffffffffff9485169893975091955093509190911690565b600060028260028111156103ec576103ec610412565b14156103f757600080fd5b600182600281111561040b5761040b610412565b1492915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016006831061047c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561049457600080fd5b813580151581146104a457600080fd5b9392505050565b600060208083528351808285015260005b818110156104d8578581018301518582016040015282016104bc565b818111156104ea576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803569ffffffffffffffffffff8116811461053857600080fd5b919050565b60006020828403121561054f57600080fd5b6104a48261051e565b60006020828403121561056a57600080fd5b8135600381106104a457600080fd5b6000806000806080858703121561058f57600080fd5b6105988561051e565b935060208501359250604085013591506105b46060860161051e565b905092959194509250565b6000602082840312156105d157600080fd5b503591905056fea264697066735822122014874f7a973b86501c4c1a8be32490fe902c8f088ee234d25f9b2497e19f9e5264736f6c634300080a003360806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d00011790553480156200003a57600080fd5b5060405162031ed638038062031ed68339810160408190526200005d91620015e8565b81816040516200006d9062001595565b604051809103906000f0801580156200008a573d6000803e3d6000fd5b5050600180546001600160a01b0319166001600160a01b038416908117909155604080516325abd85f60e11b81529051634b57b0be916004808201926020929091908290030181865afa158015620000e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200010c91906200162a565b73c4375b7de8af5a38a93548eb8453a498222c4ff26040516200012f90620015a3565b6001600160a01b03928316815291166020820152604001604051809103906000f08015801562000163573d6000803e3d6000fd5b50600380546001600160a01b0319166001600160a01b039290921691821790556040805163de28735960e01b8152905163de287359916004808201926020929091908290030181865afa158015620001bf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e591906200162a565b604051634910832f60e01b81527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526001600160a01b039190911690634910832f90602401600060405180830381600087803b1580156200023d57600080fd5b505af115801562000252573d6000803e3d6000fd5b50505050600360009054906101000a90046001600160a01b03166001600160a01b031663de2873596040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d091906200162a565b60035460405163f2fde38b60e01b81526001600160a01b03918216600482015291169063f2fde38b90602401600060405180830381600087803b1580156200031757600080fd5b505af11580156200032c573d6000803e3d6000fd5b505060035460015460408051636ca42ae360e01b815290516001600160a01b039384169550638874ff1f94509190921691636ca42ae39160048083019260009291908290030181865afa15801562000388573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620003b29190810190620016c5565b6040518263ffffffff1660e01b8152600401620003d09190620017b6565b600060405180830381600087803b158015620003eb57600080fd5b505af115801562000400573d6000803e3d6000fd5b50505050600360009054906101000a90046001600160a01b03166001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000458573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200047e91906200162a565b600280546001600160a01b0319166001600160a01b039290921691821790556040805163120d150d60e31b81529051639068a868916004808201926020929091908290030181865afa158015620004d9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004ff91906200162a565b600480546001600160a01b0319166001600160a01b0392831617815560025460408051631f94a27560e31b81529051919093169263fca513a892818101926020929091908290030181865afa1580156200055d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200058391906200162a565b600880546001600160a01b0319166001600160a01b0392831617905560025460408051630873769560e01b81529051919092169163087376959160048083019260209291908290030181865afa158015620005e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200060891906200162a565b600780546001600160a01b0319166001600160a01b039283161790556002546040805163c513c9bb60e01b81529051919092169163c513c9bb9160048083019260209291908290030181865afa15801562000667573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200068d91906200162a565b600680546001600160a01b0319166001600160a01b039283161790556001546040516367b4264560e01b81529116906367b4264590620006d29084906004016200184d565b602060405180830381865afa158015620006f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200071691906200162a565b600980546001600160a01b0319166001600160a01b0392831617905560035460408051630a55006360e21b815290519190921691632954018c9160048083019260209291908290030181865afa15801562000775573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200079b91906200162a565b6009546040516001600160a01b0390911690620007b890620015b2565b6001600160a01b03928316815291166020820152604001604051809103906000f080158015620007ec573d6000803e3d6000fd5b50600580546001600160a01b0319166001600160a01b039283169081179091556001549091169063eebab8ef90839062000825620011ec565b6200083290600a62001879565b6040518463ffffffff1660e01b815260040162000852939291906200189b565b600060405180830381600087803b1580156200086d57600080fd5b505af115801562000882573d6000803e3d6000fd5b505060065460055460405163d914cd4b60e01b81526001600160a01b0391821660048201529116925063d914cd4b9150602401600060405180830381600087803b158015620008d057600080fd5b505af1158015620008e5573d6000803e3d6000fd5b5050600f80546001600160801b031916670de0b6b3a76400001790555062000911925050620011ec9050565b6200091e90600a62001879565b600f80546001600160801b03908116600160801b9382168402818117938490556040805160a0810182529184169092178152939092041660208301526000919081016200096b84620012ab565b815260006020820181905260409182018190526005549151929350916001600160a01b039091169083908390620009a290620015c0565b620009b093929190620018c5565b604051809103906000f080158015620009cd573d6000803e3d6000fd5b509050806001600160a01b031663c12c21c06040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a0f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a3591906200162a565b600b60006101000a8154816001600160a01b0302191690836001600160a01b03160217905550806001600160a01b0316632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a9a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ac091906200162a565b600c60006101000a8154816001600160a01b0302191690836001600160a01b03160217905550806001600160a01b031663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000b25573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b4b91906200162a565b600d80546001600160a01b0319166001600160a01b03928316179055600654600b5460405163e26b2f6360e01b8152908316600482015291169063e26b2f6390602401600060405180830381600087803b15801562000ba957600080fd5b505af115801562000bbe573d6000803e3d6000fd5b5050600054600554604080516318caf8e360e31b81526001600160a01b039283166004808301919091526024820192909252604481019190915263141bdbdb60e21b60648201526201000090920416925063c657c7189150608401600060405180830381600087803b15801562000c3457600080fd5b505af115801562000c49573d6000803e3d6000fd5b5050600054600c8054604080516318caf8e360e31b81526001600160a01b039283166004820152602481019190915260448101929092526b43726564697446616361646560a01b606483015262010000909204909116925063c657c7189150608401600060405180830381600087803b15801562000cc657600080fd5b505af115801562000cdb573d6000803e3d6000fd5b5050600054600b54604080516318caf8e360e31b81526001600160a01b0392831660048201526024810191909152600d60448201526c21b932b234ba26b0b730b3b2b960991b60648201526201000090920416925063c657c7189150608401600060405180830381600087803b15801562000d5557600080fd5b505af115801562000d6a573d6000803e3d6000fd5b5050600054600d54604080516318caf8e360e31b81526001600160a01b0392831660048201526024810191909152601260448201527121b932b234ba21b7b73334b3bab930ba37b960711b60648201526201000090920416925063c657c7189150608401600060405180830381600087803b15801562000de957600080fd5b505af115801562000dfe573d6000803e3d6000fd5b50506001546001600160a01b0316915063eebab8ef90508473f39fd6e51aad88f6f4ce6ab8827279cfffb9226662000e35620011ec565b6040518463ffffffff1660e01b815260040162000e55939291906200189b565b600060405180830381600087803b15801562000e7057600080fd5b505af115801562000e85573d6000803e3d6000fd5b50506001546001600160a01b0316915063eebab8ef9050847390f79bf6eb2c4f870365e785982e1f101e93b90662000ebc620011ec565b6040518463ffffffff1660e01b815260040162000edc939291906200189b565b600060405180830381600087803b15801562000ef757600080fd5b505af115801562000f0c573d6000803e3d6000fd5b505060005460405163ca669fa760e01b815273f39fd6e51aad88f6f4ce6ab8827279cfffb922666004820152620100009091046001600160a01b0316925063ca669fa79150602401600060405180830381600087803b15801562000f6f57600080fd5b505af115801562000f84573d6000803e3d6000fd5b5050600954600b5460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529116925063095ea7b391506044016020604051808303816000875af115801562000fdf573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001005919062001989565b5060005460405163ca669fa760e01b81527390f79bf6eb2c4f870365e785982e1f101e93b9066004820152620100009091046001600160a01b03169063ca669fa790602401600060405180830381600087803b1580156200106557600080fd5b505af11580156200107a573d6000803e3d6000fd5b5050600954600b5460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529116925063095ea7b391506044016020604051808303816000875af1158015620010d5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010fb919062001989565b5060025460405163f2fde38b60e01b81527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526001600160a01b039091169063f2fde38b90602401600060405180830381600087803b1580156200115657600080fd5b505af11580156200116b573d6000803e3d6000fd5b505060075460405163f2fde38b60e01b81527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b158015620011c957600080fd5b505af1158015620011de573d6000803e3d6000fd5b5050505050505050620019e1565b600180546040516367b4264560e01b81526000926001600160a01b03909216916367b42645916200122191906004016200184d565b602060405180830381865afa1580156200123f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200126591906200162a565b6009546001600160a01b03908116911614620012955762001290670de0b6b3a764000060c862001879565b905090565b62001290670de0b6b3a7640000614e2062001879565b6040805160c08101825260026080820190815261232860a08301528152815180830183526005815261226060208281019190915282015281518083018352606092600092919082019080600387600a8111156200130c576200130c62001814565b146200131a5760036200131d565b60015b600a81111562001331576200133162001814565b815261206c6020918201529082526040805180820190915260048152611c84818301529101529050612454600a6000858281111562001374576200137462001814565b600a81111562001388576200138862001814565b815260208101919091526040908101600020805461ffff9390931661ffff19909316929092179091558051600480825260a0820190925281816020015b6040805180820190915260008082526020820152815260200190600190039081620013c557905050925060005b818110156200158d57828160048110620014105762001410620019ad565b602002015160200151600a6000858460048110620014325762001432620019ad565b602002015151600a8111156200144c576200144c62001814565b600a81111562001460576200146062001814565b815260208101919091526040908101600020805461ffff191661ffff9390931692909217909155805180820190915260015481906001600160a01b03166367b42645868560048110620014b757620014b7620019ad565b6020020151516040516001600160e01b031960e084901b168152620014e091906004016200184d565b602060405180830381865afa158015620014fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200152491906200162a565b6001600160a01b03168152602001848360048110620015475762001547620019ad565b60200201516020015161ffff168152508482815181106200156c576200156c620019ad565b602002602001018190525080806200158490620019c3565b915050620013f2565b505050919050565b6105e6806200bc5283390190565b62011105806200c23883390190565b6110a7806201d33d83390190565b62013af2806201e3e483390190565b6001600160a01b0381168114620015e557600080fd5b50565b60008060408385031215620015fc57600080fd5b82516200160981620015cf565b6020840151909250600b81106200161f57600080fd5b809150509250929050565b6000602082840312156200163d57600080fd5b81516200164a81620015cf565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156200168c576200168c62001651565b60405290565b604051601f8201601f191681016001600160401b0381118282101715620016bd57620016bd62001651565b604052919050565b60006020808385031215620016d957600080fd5b82516001600160401b0380821115620016f157600080fd5b818501915085601f8301126200170657600080fd5b8151818111156200171b576200171b62001651565b6200172b848260051b0162001692565b818152848101925060069190911b8301840190878211156200174c57600080fd5b928401925b81841015620017ab57604084890312156200176c5760008081fd5b6200177662001667565b84516200178381620015cf565b8152848601516200179481620015cf565b818701528352604093909301929184019162001751565b979650505050505050565b602080825282518282018190526000919060409081850190868401855b828110156200180757815180516001600160a01b0390811686529087015116868501529284019290850190600101620017d3565b5091979650505050505050565b634e487b7160e01b600052602160045260246000fd5b600b81106200184957634e487b7160e01b600052602160045260246000fd5b9052565b602081016200185d82846200182a565b92915050565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161562001896576200189662001863565b500290565b60608101620018ab82866200182a565b6001600160a01b0393909316602082015260400152919050565b6001600160a01b0384811682526060602080840182905285516001600160801b039081169285019290925285810151909116608084015260408086015160a085810152805161010086018190526000949392918301919085906101208801905b808310156200195657845180518816835286015161ffff168683015293850193600192909201919083019062001925565b5060608a01516001600160a01b031660c0890152608090990151151560e088015250909401949094525092949350505050565b6000602082840312156200199c57600080fd5b815180151581146200164a57600080fd5b634e487b7160e01b600052603260045260246000fd5b6000600019821415620019da57620019da62001863565b5060010190565b61a26180620019f16000396000f3fe60806040523480156200001157600080fd5b5060043610620001ad5760003560e01c806362eb33e311620000f5578063ba414fa61162000097578063de287359116200006e578063de2873591462000479578063f9aa028a146200049a578063fa7626d414620004bb57600080fd5b8063ba414fa6146200041c578063c12c21c01462000437578063d46b9330146200045857600080fd5b80637785ff5d11620000cc5780637785ff5d14620003da5780639408b63f14620003e45780639dd55b45146200040557600080fd5b806362eb33e314620003775780636b70b04c14620003985780636f307dc314620003b957600080fd5b80632f7a1881116200015f5780635e813a8b11620001365780635e813a8b146200030c5780635f7c9bd0146200032d57806362186905146200034657600080fd5b80632f7a188114620002be578063406c8e2f14620002df57806354cae56e146200030057600080fd5b80630e42bc5d11620001945780630e42bc5d14620002305780632630c12f14620002565780632954018c146200029d57600080fd5b80630bc772da14620001b25780630c75f80614620001f5575b600080fd5b600f54620001cf906fffffffffffffffffffffffffffffffff1681565b6040516fffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6200021c62000206366004620012dd565b600a6020526000908152604090205461ffff1681565b60405161ffff9091168152602001620001ec565b6200024762000241366004620012dd565b620004c9565b604051620001ec919062001307565b600854620002779073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001620001ec565b600254620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600c54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600154620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200030a6200081f565b005b600454620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200033762000b1a565b604051908152602001620001ec565b600f54620001cf9070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681565b600654620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600554620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600954620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200030a62000c0c565b600e54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200030a6200041636600462001398565b62000fd6565b6200042662001149565b6040519015158152602001620001ec565b600b54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600354620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600754620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600d54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600054620004269060ff1681565b6040805160c08101825260026080820190815261232860a08301528152815180830183526005815261226060208281019190915282015281518083018352606092600092919082019080600387600a8111156200052a576200052a620013c7565b14620005385760036200053b565b60015b600a8111156200054f576200054f620013c7565b815261206c6020918201529082526040805180820190915260048152611c84818301529101529050612454600a60008582811115620005925762000592620013c7565b600a811115620005a657620005a6620013c7565b815260208101919091526040908101600020805461ffff939093167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909316929092179091558051600480825260a0820190925281816020015b60408051808201909152600080825260208201528152602001906001900390816200060057905050925060005b8181101562000817578281600481106200064b576200064b620013f6565b602002015160200151600a60008584600481106200066d576200066d620013f6565b602002015151600a811115620006875762000687620013c7565b600a8111156200069b576200069b620013c7565b81526020810191909152604090810160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff93909316929092179091558051808201909152600154819073ffffffffffffffffffffffffffffffffffffffff166367b426458685600481106200071c576200071c620013f6565b6020020151516040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526200075d919060040162001425565b602060405180830381865afa1580156200077b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007a1919062001467565b73ffffffffffffffffffffffffffffffffffffffff168152602001848360048110620007d157620007d1620013f6565b60200201516020015161ffff16815250848281518110620007f657620007f6620013f6565b602002602001018190525080806200080e90620014b6565b9150506200062d565b505050919050565b6000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16906306447d5690602401600060405180830381600087803b158015620008a457600080fd5b505af1158015620008b9573d6000803e3d6000fd5b5050600b5460405173ffffffffffffffffffffffffffffffffffffffff909116925060009150600190620008ed90620012b3565b73ffffffffffffffffffffffffffffffffffffffff938416815292909116602083015215156040820152606001604051809103906000f08015801562000937573d6000803e3d6000fd5b50600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316908117909155600d546040517f526a41e80000000000000000000000000000000000000000000000000000000081526004810192909252600160248301529091169063526a41e890604401600060405180830381600087803b158015620009dc57600080fd5b505af1158015620009f1573d6000803e3d6000fd5b5050600d5473ffffffffffffffffffffffffffffffffffffffff16915063eb9606df905062000a22426001620014f2565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815264ffffffffff90911660048201526024015b600060405180830381600087803b15801562000a7b57600080fd5b505af115801562000a90573d6000803e3d6000fd5b50505050600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562000aff57600080fd5b505af115801562000b14573d6000803e3d6000fd5b50505050565b600180546040517f67b4264500000000000000000000000000000000000000000000000000000000815260009273ffffffffffffffffffffffffffffffffffffffff909216916367b426459162000b75919060040162001425565b602060405180830381865afa15801562000b93573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000bb9919062001467565b60095473ffffffffffffffffffffffffffffffffffffffff90811691161462000bf65762000bf1670de0b6b3a764000060c86200150d565b905090565b62000bf1670de0b6b3a7640000614e206200150d565b60025460405173ffffffffffffffffffffffffffffffffffffffff9091169062000c3690620012c1565b73ffffffffffffffffffffffffffffffffffffffff90911681526060602082018190526008908201527f446567656e4e4654000000000000000000000000000000000000000000000000608082015260a060408201819052600a908201527f476561722d446567656e0000000000000000000000000000000000000000000060c082015260e001604051809103906000f08015801562000cda573d6000803e3d6000fd5b50600e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283161790556000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015262010000909104909116906306447d5690602401600060405180830381600087803b15801562000d8e57600080fd5b505af115801562000da3573d6000803e3d6000fd5b5050600e546040517ffca3b5aa0000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff909116925063fca3b5aa9150602401600060405180830381600087803b15801562000e2757600080fd5b505af115801562000e3c573d6000803e3d6000fd5b5050600b54600e5460405173ffffffffffffffffffffffffffffffffffffffff92831694509116915060009062000e7390620012b3565b73ffffffffffffffffffffffffffffffffffffffff938416815292909116602083015215156040820152606001604051809103906000f08015801562000ebd573d6000803e3d6000fd5b50600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316908117909155600d546040517f526a41e80000000000000000000000000000000000000000000000000000000081526004810192909252600160248301529091169063526a41e890604401600060405180830381600087803b15801562000f6257600080fd5b505af115801562000f77573d6000803e3d6000fd5b5050600e54600c546040517f4610f6ac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015291169250634610f6ac915060240162000a60565b600081600860405162000fe990620012cf565b91825260ff166020820152604001604051809103906000f08015801562001014573d6000803e3d6000fd5b506000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291925062010000900473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b1580156200109c57600080fd5b505af1158015620010b1573d6000803e3d6000fd5b50506008546040517fe8a97a3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528581166024830152909116925063e8a97a3e9150604401600060405180830381600087803b1580156200112b57600080fd5b505af115801562001140573d6000803e3d6000fd5b50505050505050565b60008054610100900460ff16156200116a5750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620012ae5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000008284015282518083038401815260608301909352600092909162001212917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016200158b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526200124c91620015c9565b6000604051808303816000865af19150503d80600081146200128b576040519150601f19603f3d011682016040523d82523d6000602084013e62001290565b606091505b5091505080806020019051810190620012aa9190620015d7565b9150505b919050565b615e9780620015fc83390190565b6126cf806200749383390190565b6106ca8062009b6283390190565b600060208284031215620012f057600080fd5b8135600b81106200130057600080fd5b9392505050565b602080825282518282018190526000919060409081850190868401855b8281101562001365578151805173ffffffffffffffffffffffffffffffffffffffff16855286015161ffff1686850152928401929085019060010162001324565b5091979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff811681146200139557600080fd5b50565b60008060408385031215620013ac57600080fd5b8235620013b98162001372565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60208101600b831062001461577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000602082840312156200147a57600080fd5b8151620013008162001372565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415620014eb57620014eb62001487565b5060010190565b6000821982111562001508576200150862001487565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562001548576200154862001487565b500290565b6000815160005b8181101562001570576020818501810151868301520162001554565b8181111562001580576000828601525b509290920192915050565b7fffffffff00000000000000000000000000000000000000000000000000000000831681526000620015c160048301846200154d565b949350505050565b60006200130082846200154d565b600060208284031215620015ea57600080fd5b815180151581146200130057600080fdfe6101406040523480156200001257600080fd5b5060405162005e9738038062005e97833981016040819052620000359162000198565b60016000556001600160a01b0383166200006257604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038316608081905260408051636f307dc360e01b81529051636f307dc3916004808201926020929091908290030181865afa158015620000ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d39190620001ea565b6001600160a01b031660a0816001600160a01b031681525050826001600160a01b0316634f0e0ef36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200012b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001519190620001ea565b6001600160a01b0390811660c0529190911660e0819052151561010052151561012052506200020f565b80516001600160a01b03811681146200019357600080fd5b919050565b600080600060608486031215620001ae57600080fd5b620001b9846200017b565b9250620001c9602085016200017b565b915060408401518015158114620001df57600080fd5b809150509250925092565b600060208284031215620001fd57600080fd5b62000208826200017b565b9392505050565b60805160a05160c05160e0516101005161012051615a86620004116000396000818161061101528181612fb5015261481f01526000818161031701528181610dde015281816144f901526146e5015260008181610557015281816146a901526147a901526000818161034b0152818161387d015261392d01526000818161047301528181611bfe0152818161274f0152818161280d0152818161366a01526137dd015260008181610665015281816109d801528181610b0301528181610bd501528181610cdd01528181610e6501528181610fe30152818161114e0152818161120e0152818161132e015281816114510152818161162b01528181611708015281816117e0015281816119e501528181611b1201528181611d9501528181611ed5015281816120040152818161216801528181612290015281816123c601528181612568015281816126390152818161266f0152818161293d01528181612a2101528181612a8a01528181612bde01528181612d2601528181612e6801528181612ec2015281816130a10152818161311b015281816131b401528181613341015281816134c10152818161358a0152818161372f01528181613a1a01528181613b2e01528181613dbb015281816142200152818161432801528181614492015281816148e7015281816149e801528181614aae0152614d8f0152615a866000f3fe6080604052600436106102695760003560e01c8063860aefcf11610153578063c7de38a6116100cb578063dfd594651161007f578063eb9606df11610064578063eb9606df1461081e578063f9eaee0d1461083e578063ffd9b9071461085e57600080fd5b8063dfd59465146107de578063e1f21c67146107fe57600080fd5b8063cff0ab96116100b0578063cff0ab96146106ef578063d9ccbec114610783578063dcf65482146107be57600080fd5b8063c7de38a6146106a7578063caa5c23f146106dc57600080fd5b80639c55a05411610122578063b55bb84b11610107578063b55bb84b14610633578063c12c21c014610653578063c690908a1461068757600080fd5b80639c55a054146105df578063b1836d32146105ff57600080fd5b8063860aefcf146104db5780639408b63f146105455780639b67ab30146105795780639be0536a146105bd57600080fd5b80635d91a0e0116101e65780636d19b486116101b55780637071b7c51161019a5780637071b7c51461049557806379c0ef91146104a857806382871ace146104c857600080fd5b80636d19b486146104415780636f307dc31461046157600080fd5b80635d91a0e0146103e85780635f73fbec146103fb578063601d66f61461040e5780636c8f225d1461042e57600080fd5b80633d9287fa1161023d5780635019e20a116102225780635019e20a1461039257806354fd4d50146103b257806359781034146103d557600080fd5b80633d9287fa146103055780634f0e0ef31461033957600080fd5b8062842b571461026e578063256ac915146102905780632a7ba1f7146102c55780632b7c7b11146102e5575b600080fd5b34801561027a57600080fd5b5061028e6102893660046151bf565b61087e565b005b34801561029c57600080fd5b506102b06102ab3660046151f8565b61098e565b60405190151581526020015b60405180910390f35b3480156102d157600080fd5b5061028e6102e0366004615215565b610a61565b3480156102f157600080fd5b5061028e610300366004615215565b610c3b565b34801561031157600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561034557600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102bc565b34801561039e57600080fd5b5061028e6103ad3660046151f8565b610d6a565b3480156103be57600080fd5b506103c7600281565b6040519081526020016102bc565b61028e6103e336600461522e565b61108c565b61028e6103f63660046152bb565b611275565b61028e610409366004615340565b611589565b34801561041a57600080fd5b5061028e6104293660046153d8565b6117de565b61028e61043c36600461541b565b611900565b34801561044d57600080fd5b506102b061045c3660046151f8565b611c31565b34801561046d57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b61028e6104a336600461546e565b611c60565b3480156104b457600080fd5b5061036d6104c3366004615215565b611f3e565b61028e6104d63660046152bb565b611f4b565b3480156104e757600080fd5b5060025461051c906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041682565b604080516fffffffffffffffffffffffffffffffff9384168152929091166020830152016102bc565b34801561055157600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561058557600080fd5b506004546040805167ffffffffffffffff608084901c1681526fffffffffffffffffffffffffffffffff9092166020830152016102bc565b3480156105c957600080fd5b506105d261227d565b6040516102bc91906154e2565b3480156105eb57600080fd5b5061028e6105fa36600461553c565b61228e565b34801561060b57600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561063f57600080fd5b5061028e61064e3660046151f8565b6123c4565b34801561065f57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561069357600080fd5b5061028e6106a23660046151f8565b6124c6565b3480156106b357600080fd5b506106c76106c23660046151f8565b612668565b604080519283526020830191909152016102bc565b61028e6106ea366004615557565b61289b565b3480156106fb57600080fd5b5060015461074e906fffffffffffffffffffffffffffffffff811690700100000000000000000000000000000000810460ff169071010000000000000000000000000000000000900464ffffffffff1683565b604080516fffffffffffffffffffffffffffffffff9094168452911515602084015264ffffffffff16908201526060016102bc565b34801561078f57600080fd5b506102b061079e366004615599565b600360209081526000928352604080842090915290825290205460ff1681565b3480156107ca57600080fd5b5061028e6107d93660046151f8565b612a88565b3480156107ea57600080fd5b506103c76107f93660046151f8565b612b86565b34801561080a57600080fd5b5061028e61081936600461522e565b612c6d565b34801561082a57600080fd5b5061028e6108393660046155c7565b612ec0565b34801561084a57600080fd5b506102b06108593660046151f8565b613057565b34801561086a57600080fd5b5061028e6108793660046155ee565b6131b2565b600260005414156108f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b6002600090815573ffffffffffffffffffffffffffffffffffffffff8316808252600360209081526040808420338086529083529381902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081527f9b3258bc4904fd6426b99843e206c6c7cdb1fd0f040121c25b71dafbb3851ee0910160405180910390a350506001600055565b6040517f055ee9b500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063055ee9b590602401602060405180830381865afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a43919061560b565b73ffffffffffffffffffffffffffffffffffffffff16141592915050565b60026000541415610ace576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610b5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b83919061560b565b9050610b903382846132eb565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906395373018906024015b600060405180830381600087803b158015610c1a57600080fd5b505af1158015610c2e573d6000803e3d6000fd5b5050600160005550505050565b60026000541415610ca8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610d39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5d919061560b565b9050610b90338284613411565b60026000541415610dd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000557f000000000000000000000000000000000000000000000000000000000000000015610e34576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610ec1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee5919061560b565b33600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915290205490915060ff16610f52576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f5d82613583565b5090508015610f98576040517ff713841e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b15801561102757600080fd5b505af115801561103b573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692503391507f93c70cc9715bef0d83edf2095f3595402279d274f402a73ffc17f1bcb19d863d90600090a35050600160005550565b600260005414156110f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611106613875565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063e958b70490602401602060405180830381865afa158015611197573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bb919061560b565b90506111c9848285856139b7565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401600060405180830381600087803b15801561125257600080fd5b505af1158015611266573d6000803e3d6000fd5b50506001600055505050505050565b600260005414156112e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611375573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611399919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166113e8576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806113f483613583565b915091508161142f576040517f1fdd676f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611437613875565b831561144d5761144d85858b8660016000613ae3565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632362a2d88b600185338e8e8e6040518863ffffffff1660e01b81526004016114b59796959493929190615663565b6020604051808303816000875af11580156114d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f891906156bf565b90508873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f7dfecd8419723a9d3954585a30c2a270165d70aafa146c11c1e1b88ae14390648460405161157091815260200190565b60405180910390a4505060016000555050505050505050565b600260005414156115f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ab919061560b565b90506116b5613875565b81156116cb576116cb8383338460016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d89061174a903390600090819083908d908d908d90600401615663565b6020604051808303816000875af1158015611769573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178d91906156bf565b5060405173ffffffffffffffffffffffffffffffffffffffff87169033907f460ad03b1cf79b1d64d3aefa28475f110ab66e84649c52bb41ed796b9b39198190600090a35050600160005550505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611849573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118d1576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff90811670010000000000000000000000000000000002911617600255565b6002600054141561196d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000908155606461198461ffff851687615707565b61198e9190615744565b9050611999816144f7565b6119a2816145e8565b6119ab84614668565b6119b3613875565b6040517f172c48c7000000000000000000000000000000000000000000000000000000008152600060048201819052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a64919061577f565b61ffff169150611a789050816127106157ae565b611a829083615707565b611a8c8288615707565b11611ac3576040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff86811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611b5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b81919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638587604051611bef92919091825261ffff16602082015260400190565b60405180910390a3611c2386827f00000000000000000000000000000000000000000000000000000000000000008a6139b7565b505060016000555050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526006602052604081205415155b92915050565b60026000541415611ccd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611cdb856144f7565b611ce484614668565b611ced856145e8565b600154700100000000000000000000000000000000900460ff1615611d3e576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d46613875565b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff85811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611de0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e04919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638885604051611e7292919091825261ffff16602082015260400190565b60405180910390a38215611e9057611e908484878460006001613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015611f1957600080fd5b505af1158015611f2d573d6000803e3d6000fd5b505060016000555050505050505050565b6000611c5a60058361480f565b60026000541415611fb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa15801561204b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206f919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166120be576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120c661481b565b6120fc576040517f7e52ccb400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061210782612668565b509050612112613875565b82156121285761212884848a8560016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d8906121aa908c90600290879033908f908f908f90600401615663565b6020604051808303816000875af11580156121c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ed91906156bf565b90508773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167ffada13ff2d5e1a1d9da37ad4a4130893b34e3c69c32b17f87ec31fd661b867078460405161226591815260200190565b60405180910390a45050600160005550505050505050565b6060612289600561486b565b905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612381576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561242f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612453919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146124b7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614878565b5050565b60026000541415612533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156125c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e8919061560b565b90506125f4818361489a565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401610c00565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126fc919061560b565b905060008061270b8387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156127a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127c991906156bf565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015291965061271091851690637afb010490604401602060405180830381865afa158015612863573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061288791906156bf565b6128919190615744565b9350505050915091565b60026000541415612908576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129bd919061560b565b90506129c7613875565b8115612a7e576129dc83833384600080613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015612a6557600080fd5b505af1158015612a79573d6000803e3d6000fd5b505050505b5050600160005550565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612af3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b17919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b7b576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614c92565b600080612b9283612668565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152919350600092507f000000000000000000000000000000000000000000000000000000000000000090911690633192195c906024016040805180830381865afa158015612c26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4a91906157c5565b9150819050612c5b61271084615707565b612c659190615744565b949350505050565b60026000541415612cda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063fdd5764590602401602060405180830381865afa158015612d6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d91919061560b565b73ffffffffffffffffffffffffffffffffffffffff161480612dd7575073ffffffffffffffffffffffffffffffffffffffff831660009081526006602052604090205415155b15612e0e576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612eac57600080fd5b505af1158015611c23573d6000803e3d6000fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f4f919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612fb3576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000061300a576040517f50dd11fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805464ffffffffff90921671010000000000000000000000000000000000027fffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffffff909216919091179055565b6040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063f67c5bd090602401602060405180830381865afa1580156130e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061310c91906156bf565b905080158015906131ab5750807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015613184573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a891906156bf565b16155b9392505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561321d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613241919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146132a5576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018054911515700100000000000000000000000000000000027fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff909216919091179055565b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600060448301819052917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561338c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133b091906156bf565b90506133bb816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f98274bf834d179ee08dc0604071b0dc90b54731bd5f725a5a96a39a86bce025a8360405161340391815260200190565b60405180910390a250505050565b61341a816144f7565b600154700100000000000000000000000000000000900460ff161561346b576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600160448301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561350c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061353091906156bf565b905061353b816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f9cac51154cc0d835e2f9c9d1f59a9344588cee107f4203bf58a8c797e3a58c458360405161340391815260200190565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613617919061560b565b90506000806136268387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156136c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136e491906156bf565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529195506000917f00000000000000000000000000000000000000000000000000000000000000001690633192195c906024016040805180830381865afa158015613775573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061379991906157c5565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350600092506127109187169063f9a6503090604401602060405180830381865afa158015613837573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061385b91906156bf565b6138659190615707565b9092109794965093945050505050565b34156139b5577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156138e357600080fd5b505af11580156138f7573d6000803e3d6000fd5b50506040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201523460248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16935063a9059cbb925060440190506020604051808303816000875af115801561398f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139b391906157e9565b505b565b6139c084614cb4565b6040517f830aa74500000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f0000000000000000000000000000000000000000000000000000000000000000169063830aa74590608401600060405180830381600087803b158015613a5e57600080fd5b505af1158015613a72573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fa32435755c235de2976ed44a75a2f85cb01faf0c894f639fe0c32bb9455fea8f83604051613ad591815260200190565b60405180910390a350505050565b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301523060248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b158015613b7257600080fd5b505af1158015613b86573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff871692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a28460005b8181101561441d5736888883818110613bea57613bea615806565b9050602002810190613bfc9190615835565b90506004613c0d6020830183615873565b90501015613c47576040517fe2b0e50600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b30613c5560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16141561421c578415613ca9576040517f5fb9107f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613cb86020830183615873565b613cc1916158d8565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167f59781034000000000000000000000000000000000000000000000000000000001415613e3c5760008080613d1e6020860186615873565b613d2c916004908290615920565b810190613d39919061522e565b925092509250613e34838c73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614613e2b576040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015613e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e26919061560b565b613e2d565b8b5b84846139b7565b505050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2b7c7b11000000000000000000000000000000000000000000000000000000001415613ec757600194506000613e996020840184615873565b613ea7916004908290615920565b810190613eb49190615215565b9050613ec1898983613411565b50614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2a7ba1f7000000000000000000000000000000000000000000000000000000001415613f80578415613f49576040517fc0b0caa800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613f586020840184615873565b613f66916004908290615920565b810190613f739190615215565b9050613ec18989836132eb565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f233a8caa0000000000000000000000000000000000000000000000000000000014156140e457600080613fda6020850185615873565b613fe8916004908290615920565b810190613ff5919061594a565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c8116600483015292945090925082918416906370a0823190602401602060405180830381865afa158015614069573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061408d91906156bf565b10156140dd576040517fa5ac537300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016108e7565b5050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fc690908a00000000000000000000000000000000000000000000000000000000141561416457600061413d6020840184615873565b61414b916004908290615920565b81019061415891906151f8565b9050613ec1888261489a565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f23e27a640000000000000000000000000000000000000000000000000000000014156141e45760006141bd6020840184615873565b6141cb916004908290615920565b8101906141d891906151f8565b9050613ec18882614d42565b6040517f1e9e7e7a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50614414565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff68754361426760208501856151f8565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156142d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142f4919061560b565b73ffffffffffffffffffffffffffffffffffffffff16148061436d575073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001661435560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16145b156143a4576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6144126143b46020830183615873565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506143f69250505060208401846151f8565b73ffffffffffffffffffffffffffffffffffffffff1690614e39565b505b50600101613bcf565b506040517f60c8e8938c9a0c0d88a98d6f1c562ce68077e12bf3edb8047378f2f736cb45b490600090a16040517fe1998cf900000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff86811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b1580156144d657600080fd5b505af11580156144ea573d6000803e3d6000fd5b5050505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006139b3576001546fffffffffffffffffffffffffffffffff9081169081146124c257600454608081901c906fffffffffffffffffffffffffffffffff16600067ffffffffffffffff8316431461456e578461458a565b61458a6fffffffffffffffffffffffffffffffff831686615976565b9050838111156145c6576040517f675f1a5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff81164360801b176004555050505050565b6002546fffffffffffffffffffffffffffffffff16811080614631575060025470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681115b156139b3576040517fce16799400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61467061481b565b156146a7576040517f63fc31c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1615614806577f0000000000000000000000000000000000000000000000000000000000000000801561472657503373ffffffffffffffffffffffffffffffffffffffff821614155b1561475d576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600160248301527f00000000000000000000000000000000000000000000000000000000000000001690639dc29fac90604401600060405180830381600087803b1580156147ed57600080fd5b505af1158015614801573d6000803e3d6000fd5b505050505b6139b381614cb4565b60006131ab8383614e7b565b60007f0000000000000000000000000000000000000000000000000000000000000000801561228957505060015471010000000000000000000000000000000000900464ffffffffff1642101590565b606060006131ab83614ea5565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f01565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561492b57600080fd5b505af115801561493f573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527fdf498aa1c340e992665d6fb4f3be8436d452c45a630cb6d7fab7963da39bac8793500190505b60405180910390a15050565b6040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600091829160019183917f00000000000000000000000000000000000000000000000000000000000000001690638991b2f190602401602060405180830381865afa158015614a2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a5391906156bf565b90505b808211614c895780821615614c7d576040517fe75538c700000000000000000000000000000000000000000000000000000000815260048101839052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e75538c7906024016040805180830381865afa158015614af4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b18919061577f565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529294509092506000918416906370a0823190602401602060405180830381865afa158015614b8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bb191906156bf565b90506001811115614c79576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff8481166024830152600091908b169063f9a6503090604401602060405180830381865afa158015614c33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c5791906156bf565b978801979050614c6b61ffff841682615707565b614c759088615976565b9650505b5050505b600182901b9150614a56565b50509250929050565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f50565b3373ffffffffffffffffffffffffffffffffffffffff821614801590614d0b575033600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16155b156139b3576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b158015614dd357600080fd5b505af1158015614de7573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527f69db9e9764da61b6681b89fb0f5be018506e0342036e56b59c3015a620d60977935001905061498d565b60606131ab83836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250615043565b6000826000018281548110614e9257614e92615806565b9060005260206000200154905092915050565b606081600001805480602002602001604051908101604052809291908181526020018280548015614ef557602002820191906000526020600020905b815481526020019060010190808311614ee1575b50505050509050919050565b6000818152600183016020526040812054614f4857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611c5a565b506000611c5a565b60008181526001830160205260408120548015615039576000614f746001836157ae565b8554909150600090614f88906001906157ae565b9050818114614fed576000866000018281548110614fa857614fa8615806565b9060005260206000200154905080876000018481548110614fcb57614fcb615806565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080614ffe57614ffe61598e565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611c5a565b6000915050611c5a565b6060612c65848460008585843b6150b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108e7565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516150df91906159ed565b60006040518083038185875af1925050503d806000811461511c576040519150601f19603f3d011682016040523d82523d6000602084013e615121565b606091505b509150915061513182828661513c565b979650505050505050565b6060831561514b5750816131ab565b82511561515b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e791906159ff565b73ffffffffffffffffffffffffffffffffffffffff811681146139b357600080fd5b80151581146139b357600080fd5b600080604083850312156151d257600080fd5b82356151dd8161518f565b915060208301356151ed816151b1565b809150509250929050565b60006020828403121561520a57600080fd5b81356131ab8161518f565b60006020828403121561522757600080fd5b5035919050565b60008060006060848603121561524357600080fd5b833561524e8161518f565b9250602084013561525e8161518f565b929592945050506040919091013590565b60008083601f84011261528157600080fd5b50813567ffffffffffffffff81111561529957600080fd5b6020830191508360208260051b85010111156152b457600080fd5b9250929050565b60008060008060008060a087890312156152d457600080fd5b86356152df8161518f565b955060208701356152ef8161518f565b9450604087013593506060870135615306816151b1565b9250608087013567ffffffffffffffff81111561532257600080fd5b61532e89828a0161526f565b979a9699509497509295939492505050565b60008060008060006080868803121561535857600080fd5b85356153638161518f565b945060208601359350604086013561537a816151b1565b9250606086013567ffffffffffffffff81111561539657600080fd5b6153a28882890161526f565b969995985093965092949392505050565b80356fffffffffffffffffffffffffffffffff811681146153d357600080fd5b919050565b600080604083850312156153eb57600080fd5b6153f4836153b3565b9150615402602084016153b3565b90509250929050565b61ffff811681146139b357600080fd5b6000806000806080858703121561543157600080fd5b8435935060208501356154438161518f565b925060408501356154538161540b565b915060608501356154638161540b565b939692955090935050565b60008060008060006080868803121561548657600080fd5b8535945060208601356154988161518f565b9350604086013567ffffffffffffffff8111156154b457600080fd5b6154c08882890161526f565b90945092505060608601356154d48161540b565b809150509295509295909350565b6020808252825182820181905260009190848201906040850190845b8181101561553057835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016154fe565b50909695505050505050565b60006020828403121561554e57600080fd5b6131ab826153b3565b6000806020838503121561556a57600080fd5b823567ffffffffffffffff81111561558157600080fd5b61558d8582860161526f565b90969095509350505050565b600080604083850312156155ac57600080fd5b82356155b78161518f565b915060208301356151ed8161518f565b6000602082840312156155d957600080fd5b813564ffffffffff811681146131ab57600080fd5b60006020828403121561560057600080fd5b81356131ab816151b1565b60006020828403121561561d57600080fd5b81516131ab8161518f565b6003811061565f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b73ffffffffffffffffffffffffffffffffffffffff888116825260e082019061568f602084018a615628565b6040830197909752948616606082015292909416608083015260a082015291151560c09092019190915292915050565b6000602082840312156156d157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561573f5761573f6156d8565b500290565b60008261577a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000806040838503121561579257600080fd5b825161579d8161518f565b60208401519092506151ed8161540b565b6000828210156157c0576157c06156d8565b500390565b600080604083850312156157d857600080fd5b505080516020909101519092909150565b6000602082840312156157fb57600080fd5b81516131ab816151b1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc183360301811261586957600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126158a857600080fd5b83018035915067ffffffffffffffff8211156158c357600080fd5b6020019150368190038213156152b457600080fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156159185780818660040360031b1b83161692505b505092915050565b6000808585111561593057600080fd5b8386111561593d57600080fd5b5050820193919092039150565b6000806040838503121561595d57600080fd5b82356159688161518f565b946020939093013593505050565b60008219821115615989576159896156d8565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60005b838110156159d85781810151838201526020016159c0565b838111156159e7576000848401525b50505050565b600082516158698184602087016159bd565b6020815260008251806020840152615a1e8160408501602087016159bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea2646970667358221220a3f4a705ab580a6ada1e438cd2ee4abc001b62d1d171fce12c41994900fef21664736f6c634300080a003360c06040523480156200001157600080fd5b50604051620026cf380380620026cf833981016040819052620000349162000324565b82828281600090805190602001906200004f92919062000194565b5080516200006590600190602084019062000194565b50506006805460ff19169055506001600160a01b0381166200009a57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000d9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ff9190620003a1565b6001600160a01b03166080816001600160a01b03168152505050826001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000158573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200017e9190620003a1565b6001600160a01b031660a0525062000403915050565b828054620001a290620003c6565b90600052602060002090601f016020900481019282620001c6576000855562000211565b82601f10620001e157805160ff191683800117855562000211565b8280016001018555821562000211579182015b8281111562000211578251825591602001919060010190620001f4565b506200021f92915062000223565b5090565b5b808211156200021f576000815560010162000224565b80516001600160a01b03811681146200025257600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200027f57600080fd5b81516001600160401b03808211156200029c576200029c62000257565b604051601f8301601f19908116603f01168101908282118183101715620002c757620002c762000257565b81604052838152602092508683858801011115620002e457600080fd5b600091505b83821015620003085785820183015181830184015290820190620002e9565b838211156200031a5760008385830101525b9695505050505050565b6000806000606084860312156200033a57600080fd5b62000345846200023a565b60208501519093506001600160401b03808211156200036357600080fd5b62000371878388016200026d565b935060408601519150808211156200038857600080fd5b5062000397868287016200026d565b9150509250925092565b600060208284031215620003b457600080fd5b620003bf826200023a565b9392505050565b600181811c90821680620003db57607f821691505b60208210811415620003fd57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a0516122756200045a6000396000610a9a015260008181610386015281816106db0152818161089101528181610f15015281816110010152818161115b015281816112f401526114f901526122756000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80636352211e116100f9578063a0bcfc7f11610097578063b88d4fde11610071578063b88d4fde146103a8578063c87b56dd146103b6578063e985e9c5146103c9578063fca3b5aa1461041257600080fd5b8063a0bcfc7f14610360578063a22cb46514610373578063a50cf2c81461038157600080fd5b80638456cb59116100d35780638456cb591461032a57806389406ff51461033257806395d89b41146103455780639dc29fac1461034d57600080fd5b80636352211e146102fc5780636c0360eb1461030f57806370a082311461031757600080fd5b80633f4ba83a116101665780634610f6ac116101405780634610f6ac146102b357806354fd4d50146102c6578063576cd2d1146102ce5780635c975abb146102f157600080fd5b80633f4ba83a1461029857806340c10f19146102a057806342842e0e1461028a57600080fd5b8063081812fc116101a2578063081812fc1461024b578063095ea7b31461025e57806318160ddd1461027357806323b872dd1461028a57600080fd5b806301ffc9a7146101c957806306fdde03146101f15780630754617214610206575b600080fd5b6101dc6101d7366004611cc6565b610425565b60405190151581526020015b60405180910390f35b6101f961050a565b6040516101e89190611d38565b6008546102269073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e8565b610226610259366004611d89565b61059c565b61027161026c366004611dc7565b61067b565b005b61027c60075481565b6040519081526020016101e8565b61027161026c366004611df3565b6102716106ad565b6102716102ae366004611dc7565b61079b565b6102716102c1366004611e34565b610863565b61027c600181565b6101dc6102dc366004611e34565b60096020526000908152604090205460ff1681565b60065460ff166101dc565b61022661030a366004611d89565b610cd9565b6101f9610d8b565b61027c610325366004611e34565b610e19565b610271610ee7565b610271610340366004611e34565b610fd3565b6101f9611103565b61027161035b366004611dc7565b611112565b61027161036e366004611e51565b6112c6565b61027161026c366004611ed1565b6102267f000000000000000000000000000000000000000000000000000000000000000081565b61027161026c366004611f39565b6101f96103c4366004611d89565b6113bb565b6101dc6103d7366004612037565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205460ff1690565b610271610420366004611e34565b6114cb565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd0000000000000000000000000000000000000000000000000000000014806104b857507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061050457507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60606000805461051990612065565b80601f016020809104026020016040519081016040528092919081815260200182805461054590612065565b80156105925780601f1061056757610100808354040283529160200191610592565b820191906000526020600020905b81548152906001019060200180831161057557829003601f168201915b5050505050905090565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff16610652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084015b60405180910390fd5b5060009081526004602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b6040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa158015610737573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075b91906120b9565b610791576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107996115f6565b565b60085473ffffffffffffffffffffffffffffffffffffffff1633146107ec576040517f5c2967f500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006107f783610e19565b905060005b82811015610846576000816108278473ffffffffffffffffffffffffffffffffffffffff8816612105565b6108319190612105565b905061083d85826116d7565b506001016107fc565b5081600760008282546108599190612105565b9091555050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156108ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091191906120b9565b610947576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163b610995576040517f9c01f6a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff1663c12c21c06040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610a1c575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610a199181019061211d565b60015b610a52576040517f9c01f6a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f6fbc6f6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192507f000000000000000000000000000000000000000000000000000000000000000090911690636fbc6f6b90602401602060405180830381865afa158015610ae3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0791906120b9565b1580610bad57503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16639408b63f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b94919061211d565b73ffffffffffffffffffffffffffffffffffffffff1614155b80610c5257508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c39919061211d565b73ffffffffffffffffffffffffffffffffffffffff1614155b15610c89576040517f9c01f6a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff16600090815260096020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff1680610504576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e00000000000000000000000000000000000000000000006064820152608401610649565b600a8054610d9890612065565b80601f0160208091040260200160405190810160405280929190818152602001828054610dc490612065565b8015610e115780601f10610de657610100808354040283529160200191610e11565b820191906000526020600020905b815481529060010190602001808311610df457829003601f168201915b505050505081565b600073ffffffffffffffffffffffffffffffffffffffff8216610ebe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152608401610649565b5073ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015610f71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9591906120b9565b610fcb576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610799611899565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561105d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108191906120b9565b6110b7576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff16600090815260096020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b60606001805461051990612065565b3360009081526009602052604090205460ff161580156111dd57506040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156111b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111db91906120b9565b155b15611214576040517f1e0d048500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061121f83610e19565b90508181101561125b576040517f90c9142d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b828110156112b357600060018261128b8573ffffffffffffffffffffffffffffffffffffffff8916612105565b611295919061213a565b61129f919061213a565b90506112aa81611959565b5060010161125e565b508160076000828254610859919061213a565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611350573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137491906120b9565b6113aa576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113b6600a8383611c0f565b505050565b60008181526002602052604090205460609073ffffffffffffffffffffffffffffffffffffffff1661146f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006064820152608401610649565b6000611479611a26565b9050600081511161149957604051806020016040528060008152506114c4565b806114a384611a35565b6040516020016114b4929190612151565b6040516020818303038152906040525b9392505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611555573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157991906120b9565b6115af576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60065460ff16611662576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610649565b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b73ffffffffffffffffffffffffffffffffffffffff8216611754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610649565b60008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff16156117e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610649565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805460019290611816908490612105565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60065460ff1615611906576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610649565b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586116ad3390565b600061196482610cd9565b9050611971600083611b6f565b73ffffffffffffffffffffffffffffffffffffffff811660009081526003602052604081208054600192906119a790849061213a565b909155505060008281526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555183919073ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6060600a805461051990612065565b606081611a7557505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611a9f5780611a8981612180565b9150611a989050600a836121e8565b9150611a79565b60008167ffffffffffffffff811115611aba57611aba611f0a565b6040519080825280601f01601f191660200182016040528015611ae4576020820181803683370190505b5090505b8415611b6757611af960018361213a565b9150611b06600a866121fc565b611b11906030612105565b60f81b818381518110611b2657611b26612210565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611b60600a866121e8565b9450611ae8565b949350505050565b600081815260046020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091558190611bc982610cd9565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b828054611c1b90612065565b90600052602060002090601f016020900481019282611c3d5760008555611ca1565b82601f10611c74578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00823516178555611ca1565b82800160010185558215611ca1579182015b82811115611ca1578235825591602001919060010190611c86565b50611cad929150611cb1565b5090565b5b80821115611cad5760008155600101611cb2565b600060208284031215611cd857600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146114c457600080fd5b60005b83811015611d23578181015183820152602001611d0b565b83811115611d32576000848401525b50505050565b6020815260008251806020840152611d57816040850160208701611d08565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b600060208284031215611d9b57600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff81168114611dc457600080fd5b50565b60008060408385031215611dda57600080fd5b8235611de581611da2565b946020939093013593505050565b600080600060608486031215611e0857600080fd5b8335611e1381611da2565b92506020840135611e2381611da2565b929592945050506040919091013590565b600060208284031215611e4657600080fd5b81356114c481611da2565b60008060208385031215611e6457600080fd5b823567ffffffffffffffff80821115611e7c57600080fd5b818501915085601f830112611e9057600080fd5b813581811115611e9f57600080fd5b866020828501011115611eb157600080fd5b60209290920196919550909350505050565b8015158114611dc457600080fd5b60008060408385031215611ee457600080fd5b8235611eef81611da2565b91506020830135611eff81611ec3565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060008060808587031215611f4f57600080fd5b8435611f5a81611da2565b93506020850135611f6a81611da2565b925060408501359150606085013567ffffffffffffffff80821115611f8e57600080fd5b818701915087601f830112611fa257600080fd5b813581811115611fb457611fb4611f0a565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715611ffa57611ffa611f0a565b816040528281528a602084870101111561201357600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000806040838503121561204a57600080fd5b823561205581611da2565b91506020830135611eff81611da2565b600181811c9082168061207957607f821691505b602082108114156120b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156120cb57600080fd5b81516114c481611ec3565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115612118576121186120d6565b500190565b60006020828403121561212f57600080fd5b81516114c481611da2565b60008282101561214c5761214c6120d6565b500390565b60008351612163818460208801611d08565b835190830190612177818360208801611d08565b01949350505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156121b2576121b26120d6565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826121f7576121f76121b9565b500490565b60008261220b5761220b6121b9565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea2646970667358221220ffdd83a2fc9a158347ca248f021e63fcef3a7985b3deb793f75cd1835b068aab64736f6c634300080a003360a060405234801561001057600080fd5b506040516106ca3803806106ca83398101604081905261002f9161006c565b60009190915560ff166080526001805460506001600160501b031991821681179092556004805490911690911790554260028190556003556100a2565b6000806040838503121561007f57600080fd5b82519150602083015160ff8116811461009757600080fd5b809150509250929050565b60805161060e6100bc600039600060d3015261060e6000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80639a6fc8f511610081578063d62ada111161005b578063d62ada11146102dc578063f7a30806146102f4578063feaf968c1461030757600080fd5b80639a6fc8f5146101cd578063bd18ad531461023a578063cd653afc1461024d57600080fd5b806354fd4d50116100b257806354fd4d501461012d57806367e8d83d1461013c5780637284e4161461018e57600080fd5b8063313ce567146100ce5780633fd0875f1461010c575b600080fd5b6100f57f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020015b60405180910390f35b6004546a0100000000000000000000900460ff166040516101039190610441565b60405160018152602001610103565b61018c61014a366004610482565b600480549115156c01000000000000000000000000027fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff909216919091179055565b005b604080518082018252600c81527f7072696365206f7261636c6500000000000000000000000000000000000000006020820152905161010391906104ab565b6102036101db36600461053d565b60015460005460025460035460045469ffffffffffffffffffff948516941691939590929450565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610103565b61018c610248366004610558565b61030f565b61018c61025b366004610579565b6001805469ffffffffffffffffffff9586167fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090911617905560029290925560035560048054919092167fffffffffffffffffffffffffffffffffffffffff00ff00000000000000000000909116176b020000000000000000000000179055565b6102e461035f565b6040519015158152602001610103565b61018c6103023660046105bf565b600055565b610203610385565b600480548291907fffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff166b01000000000000000000000083600281111561035757610357610412565b021790555050565b600454600090610380906b010000000000000000000000900460ff166103d6565b905090565b60008060008060006004600c9054906101000a900460ff16156103a757600080fd5b505060015460005460025460035460045469ffffffffffffffffffff9485169893975091955093509190911690565b600060028260028111156103ec576103ec610412565b14156103f757600080fd5b600182600281111561040b5761040b610412565b1492915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016006831061047c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561049457600080fd5b813580151581146104a457600080fd5b9392505050565b600060208083528351808285015260005b818110156104d8578581018301518582016040015282016104bc565b818111156104ea576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803569ffffffffffffffffffff8116811461053857600080fd5b919050565b60006020828403121561054f57600080fd5b6104a48261051e565b60006020828403121561056a57600080fd5b8135600381106104a457600080fd5b6000806000806080858703121561058f57600080fd5b6105988561051e565b935060208501359250604085013591506105b46060860161051e565b905092959194509250565b6000602082840312156105d157600080fd5b503591905056fea264697066735822122014874f7a973b86501c4c1a8be32490fe902c8f088ee234d25f9b2497e19f9e5264736f6c634300080a0033a2646970667358221220d8fdaadc825c43ac2783715ebcfe33e7b0ce3a396ac7717d65e4c95e98b6cf7f64736f6c634300080a003360806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d000117905534801561003957600080fd5b50600054604080516318caf8e360e31b815273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660048083019190915260248201929092526044810191909152632aa9a2a960e11b6064820152620100009091046001600160a01b03169063c657c71890608401600060405180830381600087803b1580156100ba57600080fd5b505af11580156100ce573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b81527390f79bf6eb2c4f870365e785982e1f101e93b90660048201526024810191909152600660448201526511949251539160d21b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561014f57600080fd5b505af1158015610163573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b8152733c44cdddb6a900fa2b585dd299e03d12fa4293bc60048201526024810191909152600a6044820152692624a8aaa4a220aa27a960b11b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b1580156101e857600080fd5b505af11580156101fc573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b815273c4375b7de8af5a38a93548eb8453a498222c4ff260048201526024810191909152600c60448201526b44554d425f4144445245535360a01b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561028357600080fd5b505af1158015610297573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b8152739965507d1a55bcc2695c58ba16fb37d819b0a4dc60048201526024810191909152600760448201526620a220a82a22a960c91b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561031957600080fd5b505af115801561032d573d6000803e3d6000fd5b505050506102a6806103406000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063ba414fa61461003b578063fa7626d414610057575b600080fd5b610043610064565b604051901515815260200160405180910390f35b6000546100439060ff1681565b60008054610100900460ff16156100845750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156101bf5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610129917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016101ff565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526101619161023b565b6000604051808303816000865af19150503d806000811461019e576040519150601f19603f3d011682016040523d82523d6000602084013e6101a3565b606091505b50915050808060200190518101906101bb919061024e565b9150505b919050565b6000815160005b818110156101e557602081850181015186830152016101cb565b818111156101f4576000828601525b509290920192915050565b7fffffffff0000000000000000000000000000000000000000000000000000000083168152600061023360048301846101c4565b949350505050565b600061024782846101c4565b9392505050565b60006020828403121561026057600080fd5b8151801515811461024757600080fdfea2646970667358221220293f55a0ef7b60c31a89dbc50e3339c80a8fdb1f9567614b200e97598226671f64736f6c634300080a003360806040523480156200001157600080fd5b506040516201110538038062011105833981016040819052620000349162000811565b6200003f3362000734565b6040516200004d9062000784565b604051809103906000f0801580156200006a573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b039283169081179091556040516310dc138160e31b81529184166004830152906386e09c0890602401600060405180830381600087803b158015620000c457600080fd5b505af1158015620000d9573d6000803e3d6000fd5b50506001546040516301ed651160e41b81526001600160a01b0385811660048301529091169250631ed651109150602401600060405180830381600087803b1580156200012557600080fd5b505af11580156200013a573d6000803e3d6000fd5b505050506040516200014c9062000792565b604051809103906000f08015801562000169573d6000803e3d6000fd5b50600280546001600160a01b0319166001600160a01b039283169081179091556001546040516376aad60560e01b81526004810192909252909116906376aad60590602401600060405180830381600087803b158015620001c957600080fd5b505af1158015620001de573d6000803e3d6000fd5b5050600154604051600093506001600160a01b0390911691506200020290620007a0565b6001600160a01b039091168152602001604051809103906000f0801580156200022f573d6000803e3d6000fd5b5060015460405163338f12b960e21b81526001600160a01b03808416600483015292935091169063ce3c4ae490602401600060405180830381600087803b1580156200027a57600080fd5b505af11580156200028f573d6000803e3d6000fd5b5050600154604051600093506001600160a01b039091169150620002b390620007ae565b6001600160a01b039091168152602001604051809103906000f080158015620002e0573d6000803e3d6000fd5b5060015460405163c5120b3960e01b81526001600160a01b03808416600483015292935091169063c5120b3990602401600060405180830381600087803b1580156200032b57600080fd5b505af115801562000340573d6000803e3d6000fd5b5050600154604051606093506001600160a01b03909116915082906200036690620007bc565b6200037392919062000849565b604051809103906000f08015801562000390573d6000803e3d6000fd5b50600380546001600160a01b0319166001600160a01b0392831690811790915560015460405163530e784f60e01b815260048101929092529091169063530e784f90602401600060405180830381600087803b158015620003f057600080fd5b505af115801562000405573d6000803e3d6000fd5b5050600154604051600093506001600160a01b0390911691506200042990620007ca565b6001600160a01b039091168152602001604051809103906000f08015801562000456573d6000803e3d6000fd5b506001546040516356ee0d3b60e11b81526001600160a01b03808416600483015292935091169063addc1a7690602401600060405180830381600087803b158015620004a157600080fd5b505af1158015620004b6573d6000803e3d6000fd5b5050600154604051600093506001600160a01b039091169150620004da90620007d8565b6001600160a01b039091168152602001604051809103906000f08015801562000507573d6000803e3d6000fd5b506001546040516321da583760e01b81526001600160a01b0380841660048301529293509116906321da583790602401600060405180830381600087803b1580156200055257600080fd5b505af115801562000567573d6000803e3d6000fd5b505050506000306040516200057c90620007e6565b6001600160a01b039091168152602001604051809103906000f080158015620005a9573d6000803e3d6000fd5b50600154604051631795d5b360e31b81526001600160a01b03808416600483015292935091169063bcaead9890602401600060405180830381600087803b158015620005f457600080fd5b505af115801562000609573d6000803e3d6000fd5b505060405163f2fde38b60e01b81523360048201526001600160a01b038416925063f2fde38b9150602401600060405180830381600087803b1580156200064f57600080fd5b505af115801562000664573d6000803e3d6000fd5b505060015460405163f2fde38b60e01b81523360048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b158015620006ae57600080fd5b505af1158015620006c3573d6000803e3d6000fd5b505060025460405163f2fde38b60e01b81523360048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b1580156200070d57600080fd5b505af115801562000722573d6000803e3d6000fd5b505050505050505050505050620008b2565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610fcd80620010dd83390190565b61098c80620020aa83390190565b610f508062002a3683390190565b614da6806200398683390190565b611b45806200872c83390190565b612ced806200a27183390190565b611627806200cf5e83390190565b612b80806200e58583390190565b80516001600160a01b03811681146200080c57600080fd5b919050565b600080604083850312156200082557600080fd5b6200083083620007f4565b91506200084060208401620007f4565b90509250929050565b6001600160a01b0383811682526040602080840182905284518483018190526000938683019290916060870190865b81811015620008a3578551805186168452840151851684840152948301949186019160010162000878565b50909998505050505050505050565b61081b80620008c26000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80638874ff1f1161005b5780638874ff1f146100f55780638da5cb5b14610108578063de28735914610126578063f2fde38b1461014657600080fd5b80632630c12f146100825780632954018c146100cb578063715018a6146100eb575b600080fd5b6003546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6001546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b6100f3610159565b005b6100f3610103366004610658565b6101eb565b60005473ffffffffffffffffffffffffffffffffffffffff166100a2565b6002546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b6100f3610154366004610734565b6103e3565b60005473ffffffffffffffffffffffffffffffffffffffff1633146101df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6101e96000610513565b565b60005473ffffffffffffffffffffffffffffffffffffffff16331461026c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101d6565b60005b815181101561035c57600354825173ffffffffffffffffffffffffffffffffffffffff9091169063e8a97a3e908490849081106102ae576102ae610756565b6020026020010151600001518484815181106102cc576102cc610756565b6020026020010151602001516040518363ffffffff1660e01b815260040161031792919073ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b600060405180830381600087803b15801561033157600080fd5b505af1158015610345573d6000803e3d6000fd5b50505050808061035490610785565b91505061026f565b506002546040517ff2fde38b00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063f2fde38b90602401600060405180830381600087803b1580156103c857600080fd5b505af11580156103dc573d6000803e3d6000fd5b5050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101d6565b73ffffffffffffffffffffffffffffffffffffffff8116610507576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016101d6565b61051081610513565b50565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156105da576105da610588565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561062757610627610588565b604052919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461065357600080fd5b919050565b6000602080838503121561066b57600080fd5b823567ffffffffffffffff8082111561068357600080fd5b818501915085601f83011261069757600080fd5b8135818111156106a9576106a9610588565b6106b7848260051b016105e0565b818152848101925060069190911b8301840190878211156106d757600080fd5b928401925b8184101561072957604084890312156106f55760008081fd5b6106fd6105b7565b6107068561062f565b815261071386860161062f565b81870152835260409390930192918401916106dc565b979650505050505050565b60006020828403121561074657600080fd5b61074f8261062f565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156107de577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea26469706673582212205ee75e57bb635aa49a1758f4ab0b04182a73115bff08f420c56a8ddb433c029364736f6c634300080a0033608060405234801561001057600080fd5b5061001a3361005f565b60405130906f20a2222922a9a9afa82927ab24a222a960811b907fb37614c7d254ea8d16eb81fa11dddaeb266aa8ba4917980859c7740aff30c69190600090a36100af565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610f0f806100be6000396000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c806377532ed9116100e3578063bcaead981161008c578063ce3c4ae411610066578063ce3c4ae414610308578063f2fde38b1461031b578063fca513a81461032e57600080fd5b8063bcaead98146102da578063c5120b39146102ed578063c513c9bb1461030057600080fd5b80639068a868116100bd5780639068a868146102b7578063addc1a76146102bf578063affd9243146102d257600080fd5b806377532ed91461027e57806386e09c08146102865780638da5cb5b1461029957600080fd5b80634c252f9111610145578063699f200f1161011f578063699f200f1461022d578063715018a61461026357806376aad6051461026b57600080fd5b80634c252f91146101fc578063530e784f1461020457806354fd4d501461021757600080fd5b80631ed65110116101765780631ed65110146101cc57806321da5837146101e157806326c74fc3146101f457600080fd5b8063060678c21461019257806308737695146101c4575b600080fd5b61019a610336565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61019a610366565b6101df6101da366004610e10565b610391565b005b6101df6101ef366004610e10565b610444565b61019a6104ef565b61019a61051a565b6101df610212366004610e10565b610545565b61021f600281565b6040519081526020016101bb565b61019a61023b366004610e4d565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6101df6105f0565b6101df610279366004610e10565b61067d565b61019a610728565b6101df610294366004610e10565b610753565b60005473ffffffffffffffffffffffffffffffffffffffff1661019a565b61019a6107fe565b6101df6102cd366004610e10565b610829565b61019a6108d4565b6101df6102e8366004610e10565b6108ff565b6101df6102fb366004610e10565b6109aa565b61019a610a55565b6101df610316366004610e10565b610a80565b6101df610329366004610e10565b610b2b565b61019a610c58565b60006103617f444154415f434f4d50524553534f520000000000000000000000000000000000610c7f565b905090565b60006103617f41434c0000000000000000000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610417576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6104417f54524541535552595f434f4e545241435400000000000000000000000000000082610d1d565b50565b60005473ffffffffffffffffffffffffffffffffffffffff1633146104c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f574554485f47415445574159000000000000000000000000000000000000000082610d1d565b60006103617f54524541535552595f434f4e5452414354000000000000000000000000000000610c7f565b60006103617f574554485f544f4b454e00000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f50524943455f4f5241434c45000000000000000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610671576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b61067b6000610d9b565b565b60005473ffffffffffffffffffffffffffffffffffffffff1633146106fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f41434c000000000000000000000000000000000000000000000000000000000082610d1d565b60006103617f574554485f474154455741590000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146107d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f574554485f544f4b454e0000000000000000000000000000000000000000000082610d1d565b60006103617f4143434f554e545f464143544f52590000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146108aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f4143434f554e545f464143544f5259000000000000000000000000000000000082610d1d565b60006103617f474541525f544f4b454e00000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610980576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f474541525f544f4b454e0000000000000000000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f444154415f434f4d50524553534f52000000000000000000000000000000000082610d1d565b60006103617f434f4e5452414354535f52454749535445520000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610b01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f434f4e5452414354535f5245474953544552000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610bac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b73ffffffffffffffffffffffffffffffffffffffff8116610c4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161040e565b61044181610d9b565b60006103617f50524943455f4f5241434c4500000000000000000000000000000000000000005b6000818152600160209081526040808320548151808301909252600382527f41503100000000000000000000000000000000000000000000000000000000009282019290925273ffffffffffffffffffffffffffffffffffffffff9091169081610d16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040e9190610e66565b5092915050565b60008281526001602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091559051909184917fb37614c7d254ea8d16eb81fa11dddaeb266aa8ba4917980859c7740aff30c6919190a35050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215610e2257600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610e4657600080fd5b9392505050565b600060208284031215610e5f57600080fd5b5035919050565b600060208083528351808285015260005b81811015610e9357858101830151858201604001528201610e77565b81811115610ea5576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea264697066735822122083c228af017c6f5cf8c395cdf7a53276ff56fdd4f4313c39f680ab73bd75417364736f6c634300080a0033608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61090e8061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063732818191161008c578063adce758d11610066578063adce758d14610215578063ba306df114610228578063d4eb5db01461023b578063f2fde38b1461027457600080fd5b806373281819146101b7578063819ad68e146101da5780638da5cb5b146101ed57600080fd5b806354fd4d50116100bd57806354fd4d501461016a5780635f259aba14610180578063715018a6146101af57600080fd5b806335914829146100e45780633a41ec641461011c5780634910832f14610155575b600080fd5b6101076100f236600461089b565b60016020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61010761012a36600461089b565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205460ff1690565b61016861016336600461089b565b610287565b005b610172600181565b604051908152602001610113565b61010761018e36600461089b565b60005473ffffffffffffffffffffffffffffffffffffffff91821691161490565b610168610387565b6101076101c536600461089b565b60026020526000908152604090205460ff1681565b6101686101e836600461089b565b610414565b60005460405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610113565b61016861022336600461089b565b61050c565b61016861023636600461089b565b610601565b61010761024936600461089b565b73ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205460ff1690565b61016861028236600461089b565b6106f6565b60005473ffffffffffffffffffffffffffffffffffffffff16331461030d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909217909155517fae26b1cfe9454ba87274a4e8330b6654684362d0f3d7bbd17f7449a1d38387c69190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610408576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b6104126000610826565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517fd400da6c0c0a894dacc0981730b88af0545d00272ee8fff1437bf560ff245fc49190a250565b60005473ffffffffffffffffffffffffffffffffffffffff16331461058d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f1998397e7203f7baca9d6f41b9e4da6e768daac5caad4234fb9bf5869d2715459190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610682576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526001602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f28b01395b7e25d20552a0c8dc8ecd3b1d4abc986f14dad7885fd45b6fd73c8d99190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811661081a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610304565b61082381610826565b50565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156108ad57600080fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146108d157600080fd5b939250505056fea26469706673582212204712efbfe997070def77285a5b8753bc882b62da2133ce1937ad26cd2b48e49864736f6c634300080a003360a060405234801561001057600080fd5b50604051610f50380380610f5083398101604081905261002f916100d7565b6000805460ff19169055806001600160a01b03811661006157604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa15801561009f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100c391906100d7565b6001600160a01b0316608052506101079050565b6000602082840312156100e957600080fd5b81516001600160a01b038116811461010057600080fd5b9392505050565b608051610e1261013e600039600081816101e2015281816102b20152818161040f0152818161057801526108510152610e126000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80638456cb5911610097578063b4ac686011610066578063b4ac686014610217578063c29277cd1461021f578063d914cd4b14610227578063e26b2f631461023a57600080fd5b80638456cb59146101cd57806394144856146101d5578063a50cf2c8146101dd578063ac4afa381461020457600080fd5b80635b16ebb7116100d35780635b16ebb7146101575780635c975abb1461018a578063673a2a1f146101955780636fbc6f6b146101aa57600080fd5b80631e16e4fc146100fa5780633f4ba83a1461013757806354fd4d5014610141575b600080fd5b61010d610108366004610c97565b61024d565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61013f610284565b005b610149600181565b60405190815260200161012e565b61017a610165366004610cb0565b60026020526000908152604090205460ff1681565b604051901515815260200161012e565b60005460ff1661017a565b61019d610372565b60405161012e9190610ced565b61017a6101b8366004610cb0565b60046020526000908152604090205460ff1681565b61013f6103e1565b61019d6104cd565b61010d7f000000000000000000000000000000000000000000000000000000000000000081565b61010d610212366004610c97565b61053a565b600154610149565b600354610149565b61013f610235366004610cb0565b61054a565b61013f610248366004610cb0565b610823565b6003818154811061025d57600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa15801561030e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103329190610d47565b610368576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610370610af6565b565b606060018054806020026020016040519081016040528092919081815260200182805480156103d757602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116103ac575b5050505050905090565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561046b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048f9190610d47565b6104c5576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610370610bd7565b606060038054806020026020016040519081016040528092919081815260200182805480156103d75760200282019190600052602060002090815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116103ac575050505050905090565b6001818154811061025d57600080fd5b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156105d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f89190610d47565b61062e576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051808201909152600281527f5a30000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff82166106b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b60405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff8116600090815260026020908152604091829020548251808401909352600383527f43523100000000000000000000000000000000000000000000000000000000009183019190915260ff1615610753576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b506001805480820182557fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915560008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909417909355915190917ff816b5143086c89d103a0683286be86c2b741e83ebfa75135aae606e2f5c6e5391a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156108ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d19190610d47565b610907576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051808201909152600281527f5a30000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8216610989576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b5073ffffffffffffffffffffffffffffffffffffffff8116600090815260046020908152604091829020548251808401909352600383527f43523200000000000000000000000000000000000000000000000000000000009183019190915260ff1615610a23576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b506003805460018082019092557fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915560008181526004602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909417909355915190917f58ad3cfc4b6552a53c8c4128ae9b080e14b4378a159280643a62c6f709cee24f91a250565b60005460ff16610b62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016106b0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff1615610c44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016106b0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610bad3390565b600060208284031215610ca957600080fd5b5035919050565b600060208284031215610cc257600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610ce657600080fd5b9392505050565b6020808252825182820181905260009190848201906040850190845b81811015610d3b57835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101610d09565b50909695505050505050565b600060208284031215610d5957600080fd5b81518015158114610ce657600080fd5b600060208083528351808285015260005b81811015610d9657858101830151858201604001528201610d7a565b81811115610da8576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea26469706673582212208f2d91c863db9ab1494a9c5db20e3fddc4b6c779ea3c3621737c105c60d9440a64736f6c634300080a003360e06040523480156200001157600080fd5b5060405162004da638038062004da6833981016040819052620000349162000160565b6001600160a01b0381166200005c57604051635919af9760e11b815260040160405180910390fd5b6001600160a01b03811660808190526040805163c513c9bb60e01b8152905163c513c9bb916004808201926020929091908290030181865afa158015620000a7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cd919062000160565b6001600160a01b031660a0816001600160a01b0316815250506080516001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000127573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200014d919062000160565b6001600160a01b031660c0525062000192565b6000602082840312156200017357600080fd5b81516001600160a01b03811681146200018b57600080fd5b9392505050565b60805160a05160c051614b896200021d6000396000818161018801528181611c4f0152612c5a0152600081816101ed015281816115e201528181611f5f0152818161213f0152818161223f0152818161243801528181612604015281816126bc01528181612788015281816129a501528181613c410152613d000152600061013c0152614b896000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c806354fd4d5011610081578063a80deda31161005b578063a80deda31461020f578063ae093f3f1461022f578063fc9914cb1461024f57600080fd5b806354fd4d50146101bd578063663b8fdb146101d35780637a0c7b21146101e857600080fd5b80632954018c116100b25780632954018c146101375780634b2f336d146101835780634c472fc9146101aa57600080fd5b80630dbd616d146100d957806313d21cdf146101025780631bcd8fc014610122575b600080fd5b6100ec6100e73660046140fc565b610272565b6040516100f9919061430b565b60405180910390f35b61011561011036600461431e565b6114d4565b6040516100f99190614444565b61012a611f59565b6040516100f99190614453565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100f9565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b61015e6101b83660046140fc565b6121f5565b6101c5600281565b6040519081526020016100f9565b6101db612432565b6040516100f991906146ea565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b61022261021d36600461431e565b6126b5565b6040516100f9919061476a565b61024261023d36600461431e565b612a75565b6040516100f991906147dd565b61026261025d3660046140fc565b613bf7565b60405190151581526020016100f9565b61035f604051806102400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160008152602001606081526020016000815260200160008152602001600015158152602001600081526020016000815260200160008152602001600060ff168152602001600081525090565b600080600080600061037088613cf4565b509450945094509450945060008560ff1660011461041d576040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015284169063e958b70490602401602060405180830381865afa1580156103f4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061041891906147f0565b6104ad565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015286169063e958b70490602401602060405180830381865afa158015610489573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ad91906147f0565b60ff8716610200890181905273ffffffffffffffffffffffffffffffffffffffff808b1660208b01528b811660608b015282168952909150600114156109e9578473ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610538573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055c91906147f0565b73ffffffffffffffffffffffffffffffffffffffff90811660808901526040517fc7de38a600000000000000000000000000000000000000000000000000000000815282821660048201529085169063c7de38a690602401602060405180830381865afa1580156105d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f5919061480d565b60c08801526040517fdfd5946500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015285169063dfd5946590602401602060405180830381865afa158015610666573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068a919061480d565b60e08801526040517f3ce0735500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015260006024830152861690633ce0735590604401602060405180830381865afa92505050801561073c575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526107399181019061480d565b60015b6107455761074c565b6101408801525b6040517f3ce0735500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015260016024830152861690633ce0735590604401602060405180830381865afa9250505080156107f9575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526107f69181019061480d565b60015b61080257610809565b6101608801525b60c08701516040517f996329f800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526024820192909252600060448201529086169063996329f89060640160a060405180830381865afa9250505080156108c4575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526108c191810190614826565b60015b6108cd576108da565b505015156101808a015250505b8073ffffffffffffffffffffffffffffffffffffffff16631afbb7a46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610925573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610949919061480d565b6101a08801526040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152851690633192195c90602401602060405180830381865afa1580156109bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109df919061480d565b60a0880152610c26565b8273ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5891906147f0565b73ffffffffffffffffffffffffffffffffffffffff90811660808901526040517fc7de38a600000000000000000000000000000000000000000000000000000000815282821660048201529083169063c7de38a6906024016040805180830381865afa158015610acc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af09190614866565b5060c08801526040517fdfd5946500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015283169063dfd5946590602401602060405180830381865afa158015610b62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b86919061480d565b60e08801526040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152841690633192195c906024016040805180830381865afa158015610bf6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1a9190614866565b60a08901526101a08801525b60008660ff16600114610ca7578373ffffffffffffffffffffffffffffffffffffffff166316f0115b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca291906147f0565b610d16565b8573ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1691906147f0565b90508073ffffffffffffffffffffffffffffffffffffffff166345d31f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d87919061480d565b6101008901526000600160ff891614610e0e578473ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610de5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e09919061480d565b610e7d565b8573ffffffffffffffffffffffffffffffffffffffff166320a05ff76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7d919061480d565b90508760ff16600114610f1f576040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152861690638991b2f190602401602060405180830381865afa158015610ef6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1a919061480d565b610faf565b6040517fb451cecc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015287169063b451cecc90602401602060405180830381865afa158015610f8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610faf919061480d565b6102208a01528067ffffffffffffffff811115610fce57610fce61488a565b60405190808252806020026020018201604052801561103e57816020015b6040805160808101825260008082526020808301829052928201819052606082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181610fec5790505b506101208a015260005b818110156113d657604080516080810182526000808252602082018190529181018290526060810191909152600180831b9060ff8c1614156111c5576040517faf0a650200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018590528a169063af0a650290604401608060405180830381865afa1580156110f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111b91906148b9565b5050602084015273ffffffffffffffffffffffffffffffffffffffff9081168084526040517ff9eaee0d0000000000000000000000000000000000000000000000000000000081526004810191909152908a169063f9eaee0d90602401602060405180830381865afa158015611195573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b9919061490d565b15156040830152611388565b6040517f172c48c70000000000000000000000000000000000000000000000000000000081526004810184905273ffffffffffffffffffffffffffffffffffffffff89169063172c48c7906024016040805180830381865afa15801561122f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112539190614928565b5073ffffffffffffffffffffffffffffffffffffffff9081168084526040517f70a082310000000000000000000000000000000000000000000000000000000081529188166004830152906370a0823190602401602060405180830381865afa1580156112c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e8919061480d565b602083015281516040517ff9eaee0d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529088169063f9eaee0d90602401602060405180830381865afa15801561135c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611380919061490d565b151560408301525b6102208c015181161561139c57600161139f565b60005b151560608301526101208c01518051839190859081106113c1576113c161495e565b60209081029190910101525050600101611048565b508273ffffffffffffffffffffffffffffffffffffffff166317d11a156040518163ffffffff1660e01b8152600401602060405180830381865afa158015611422573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611446919061480d565b896101c00181815250508273ffffffffffffffffffffffffffffffffffffffff16633dc54b406040518163ffffffff1660e01b8152600401602060405180830381865afa15801561149b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bf919061480d565b6101e08a015250969998505050505050505050565b61159b604051806102000160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600060ff1681525090565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015283917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa15801561162b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164f919061490d565b611685576040517fd384b23800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316808352604080517ffe14112d000000000000000000000000000000000000000000000000000000008152905185929163fe14112d9160048083019260209291908290030181865afa1580156116f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611719919061480d565b8360c00181815250508073ffffffffffffffffffffffffffffffffffffffff1663ef8d96036040518163ffffffff1660e01b8152600401602060405180830381865afa15801561176d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611791919061480d565b8360e00181815250508073ffffffffffffffffffffffffffffffffffffffff1663743753596040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611809919061480d565b8360a00181815250508073ffffffffffffffffffffffffffffffffffffffff16634c19386c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561185d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611881919061480d565b836101000181815250508073ffffffffffffffffffffffffffffffffffffffff1663788c6bfe6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fa919061480d565b836101600181815250508073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561194f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611973919061480d565b8360800181815250508073ffffffffffffffffffffffffffffffffffffffff166345d31f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119eb919061480d565b836101400181815250508073ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6491906147f0565b836040019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff166336dda7d56040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0a91906147f0565b836060019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663788c6bfe6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb0919061480d565b836101600181815250508073ffffffffffffffffffffffffffffffffffffffff1663e941fa786040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c29919061480d565b61018084015260408084015173ffffffffffffffffffffffffffffffffffffffff9081167f000000000000000000000000000000000000000000000000000000000000000082161460208087019190915282517f609ae31700000000000000000000000000000000000000000000000000000000815292519184169263609ae31792600480830193928290030181865afa158015611ccb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cef919061480d565b836101c00181815250508073ffffffffffffffffffffffffffffffffffffffff1663dbcb313b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d68919061480d565b836101a00181815250506000836060015173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de7919061480d565b6040517f5427c9380000000000000000000000000000000000000000000000000000000081526004810182905290915060009073ffffffffffffffffffffffffffffffffffffffff841690635427c93890602401602060405180830381865afa158015611e58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7c919061480d565b90508015611ec7576101808501518190611eb890611e9c906127106149bc565b876101000151886101400151611eb291906149d3565b90613fd0565b611ec29190614a3f565b611ece565b8461014001515b856101200181815250508273ffffffffffffffffffffffffffffffffffffffff166354fd4d506040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f47919061480d565b60ff166101e086015250505050919050565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b4ac68606040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fec919061480d565b90508067ffffffffffffffff8111156120075761200761488a565b6040519080825280602002602001820160405280156120ff57816020015b6120ec604051806102000160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600060ff1681525090565b8152602001906001900390816120255790505b50915060005b818110156121f0576040517fac4afa38000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ac4afa3890602401602060405180830381865afa15801561219b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121bf91906147f0565b90506121ca816114d4565b8483815181106121dc576121dc61495e565b602090810291909101015250600101612105565b505090565b6040517f6fbc6f6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015260009184917f00000000000000000000000000000000000000000000000000000000000000001690636fbc6f6b90602401602060405180830381865afa158015612286573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122aa919061490d565b6122e0576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060006122ee87613cf4565b5050935093505092508260ff16600114612397576040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015282169063fdd5764590602401602060405180830381865afa15801561236e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061239291906147f0565b612427565b6040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015283169063fdd5764590602401602060405180830381865afa158015612403573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061242791906147f0565b979650505050505050565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c29277cd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124c5919061480d565b90508067ffffffffffffffff8111156124e0576124e061488a565b6040519080825280602002602001820160405280156125c457816020015b60408051610260810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083018290526101208301819052610140830181905261016083015261018082018190526101a082018190526101c082018190526101e082018190526102008201819052610220820181905261024082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816124fe5790505b50915060005b818110156121f0576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa158015612660573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061268491906147f0565b905061268f81612a75565b8483815181106126a1576126a161495e565b6020908102919091010152506001016125ca565b60606000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c29277cd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612725573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612749919061480d565b905060005b81811015612829576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa1580156127e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061280891906147f0565b90506128148187613bf7565b15612820578360010193505b5060010161274e565b508167ffffffffffffffff8111156128435761284361488a565b60405190808252806020026020018201604052801561296157816020015b61294e604051806102400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160008152602001606081526020016000815260200160008152602001600015158152602001600081526020016000815260200160008152602001600060ff168152602001600081525090565b8152602001906001900390816128615790505b5092506000915060005b81811015612a6d576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa158015612a01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a2591906147f0565b9050612a318187613bf7565b15612a6457612a408187610272565b858581518110612a5257612a5261495e565b60209081029190910101526001909301925b5060010161296b565b505050919050565b604080516102608101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082018390526101208201819052610140820181905261016082015261018081018290526101a081018290526101c081018290526101e08101829052610200810182905261022081018290526102408101829052908080808080612b1b88613cf4565b73ffffffffffffffffffffffffffffffffffffffff8e168d5260ff86166101808e01819052959b50939950919750955093509150600114612bca578273ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ba1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bc591906147f0565b612c39565b8473ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c3991906147f0565b73ffffffffffffffffffffffffffffffffffffffff908116602089018190527f00000000000000000000000000000000000000000000000000000000000000009091161460408801526000600160ff881614612d03578373ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cfe91906147f0565b612d72565b8573ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d7291906147f0565b6040517f2e97ca2100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b8116600483015291925090821690632e97ca2190602401602060405180830381865afa158015612de2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e06919061490d565b15156060890152604080517f45d31f9d000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff8316916345d31f9d9160048083019260209291908290030181865afa158015612e78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e9c919061480d565b8860800181815250508073ffffffffffffffffffffffffffffffffffffffff1663743753596040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ef0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f14919061480d565b610100890152600160ff88161415613017578573ffffffffffffffffffffffffffffffffffffffff16639b2cb5d86040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f95919061480d565b8860a00181815250508573ffffffffffffffffffffffffffffffffffffffff16635f48f3936040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fe9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061300d919061480d565b60c08901526130a5565b8273ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa158015613061573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130859190614a73565b6fffffffffffffffffffffffffffffffff90811660c08b01521660a08901525b60008760ff16600114613126578473ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613121919061480d565b613195565b8573ffffffffffffffffffffffffffffffffffffffff166320a05ff76040518163ffffffff1660e01b8152600401602060405180830381865afa158015613171573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613195919061480d565b90508067ffffffffffffffff8111156131b0576131b061488a565b6040519080825280602002602001820160405280156131d9578160200160208202803683370190505b506101208a01528067ffffffffffffffff8111156131f9576131f961488a565b604051908082528060200260200182016040528015613222578160200160208202803683370190505b506101608a015260005b818110156134c4578860ff16600114156133b4576040517f5e5f2e260000000000000000000000000000000000000000000000000000000081526004810182905260009073ffffffffffffffffffffffffffffffffffffffff891690635e5f2e2690602401602060405180830381865afa1580156132ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132d291906147f0565b9050808b610120015183815181106132ec576132ec61495e565b73ffffffffffffffffffffffffffffffffffffffff92831660209182029290920101526040517f78327438000000000000000000000000000000000000000000000000000000008152828216600482015290891690637832743890602401602060405180830381865afa158015613367573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061338b919061480d565b8b610160015183815181106133a2576133a261495e565b602002602001018181525050506134bc565b6040517f172c48c70000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff87169063172c48c7906024016040805180830381865afa15801561341e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134429190614928565b8061ffff1690508b610120015183815181106134605761346061495e565b602002602001018c6101600151848151811061347e5761347e61495e565b60200260200101828152508273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525050505b60010161322c565b5060008860ff16600114613546578373ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561351d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613541919061480d565b6135b5565b8673ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613591573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135b5919061480d565b90508067ffffffffffffffff8111156135d0576135d061488a565b60405190808252806020026020018201604052801561361557816020015b60408051808201909152600080825260208201528152602001906001900390816135ee5790505b506101408b015260005b818110156139015760408051808201909152600080825260208201528a60ff166001146136da576040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff871690635094cb4f90602401602060405180830381865afa1580156136b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136d591906147f0565b613769565b6040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff8a1690635094cb4f90602401602060405180830381865afa158015613745573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061376991906147f0565b73ffffffffffffffffffffffffffffffffffffffff168152600160ff8c16146138245780516040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529089169063fdd5764590602401602060405180830381865afa1580156137fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061381f91906147f0565b6138b7565b80516040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152908a169063fdd5764590602401602060405180830381865afa158015613893573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138b791906147f0565b73ffffffffffffffffffffffffffffffffffffffff1660208201526101408c01518051829190849081106138ed576138ed61495e565b60209081029190910101525060010161361f565b508860ff166001141561398f578773ffffffffffffffffffffffffffffffffffffffff1663b2c53a6c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613959573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061397d919061480d565b60e08b015260ff6102408b0152613be9565b73ffffffffffffffffffffffffffffffffffffffff85166101a08b01819052604080517f9408b63f0000000000000000000000000000000000000000000000000000000081529051639408b63f916004808201926020929091908290030181865afa158015613a02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a2691906147f0565b8a6101e0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508473ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015613aa9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613acd9190614aa6565b5015156102008c015250604080517f9fd12b77000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff881691639fd12b779160048083019260209291908290030181865afa158015613b42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b66919061480d565b8a6102200181815250508573ffffffffffffffffffffffffffffffffffffffff16638345f26e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bdf9190614af7565b60ff166102408b01525b505050505050505050919050565b6040517f6fbc6f6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015260009184917f00000000000000000000000000000000000000000000000000000000000000001690636fbc6f6b90602401602060405180830381865afa158015613c88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cac919061490d565b613ce2576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613cec8484614023565b949350505050565b600080600080600080867f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636fbc6f6b826040518263ffffffff1660e01b8152600401613d73919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa158015613d90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613db4919061490d565b613dea576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8773ffffffffffffffffffffffffffffffffffffffff166354fd4d506040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e59919061480d565b96508660ff1660011415613ee0578795508573ffffffffffffffffffffffffffffffffffffffff1663f93f515b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613eb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ed991906147f0565b9450613fc6565b8793508373ffffffffffffffffffffffffffffffffffffffff16632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f5291906147f0565b92508373ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fc391906147f0565b91505b5091939550919395565b6000821580613fdd575081155b15613fea5750600061401d565b612710613ff8600282614b1a565b61ffff1661400684866149d3565b6140109190614b3b565b61401a9190614a3f565b90505b92915050565b6040517f055ee9b500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600091829185169063055ee9b590602401602060405180830381865afa158015614094573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140b891906147f0565b73ffffffffffffffffffffffffffffffffffffffff1614159392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146140f957600080fd5b50565b6000806040838503121561410f57600080fd5b823561411a816140d7565b9150602083013561412a816140d7565b809150509250929050565b600081518084526020808501945080840160005b8381101561419f578151805173ffffffffffffffffffffffffffffffffffffffff168852838101518489015260408082015115159089015260609081015115159088015260809096019590820190600101614149565b509495945050505050565b805173ffffffffffffffffffffffffffffffffffffffff168252600061024060208301516141f0602086018273ffffffffffffffffffffffffffffffffffffffff169052565b506040830151614204604086018215159052565b50606083015161422c606086018273ffffffffffffffffffffffffffffffffffffffff169052565b506080830151614254608086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060a083015160a085015260c083015160c085015260e083015160e085015261010080840151818601525061012080840151828287015261429783870182614135565b92505050610140808401518186015250610160808401518186015250610180808401516142c78287018215159052565b50506101a083810151908501526101c080840151908501526101e080840151908501526102008084015160ff16908501526102209283015192909301919091525090565b60208152600061401a60208301846141aa565b60006020828403121561433057600080fd5b813561433b816140d7565b9392505050565b805173ffffffffffffffffffffffffffffffffffffffff168252602081015161436f602084018215159052565b506040810151614397604084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060608101516143bf606084018273ffffffffffffffffffffffffffffffffffffffff169052565b506080818101519083015260a0808201519083015260c0808201519083015260e08082015190830152610100808201519083015261012080820151908301526101408082015190830152610160808201519083015261018080820151908301526101a080820151908301526101c080820151908301526101e09081015160ff16910152565b610200810161401d8284614342565b6020808252825182820181905260009190848201906040850190845b8181101561449657614482838551614342565b92840192610200929092019160010161446f565b50909695505050505050565b600081518084526020808501945080840160005b8381101561419f57815173ffffffffffffffffffffffffffffffffffffffff16875295820195908201906001016144b6565b600081518084526020808501945080840160005b8381101561419f578151805173ffffffffffffffffffffffffffffffffffffffff9081168952908401511683880152604090960195908201906001016144fc565b600081518084526020808501945080840160005b8381101561419f57815187529582019590820190600101614551565b805173ffffffffffffffffffffffffffffffffffffffff168252600061026060208301516145b3602086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060408301516145c7604086018215159052565b5060608301516145db606086018215159052565b506080830151608085015260a083015160a085015260c083015160c085015260e083015160e0850152610100808401518186015250610120808401518282870152614628838701826144a2565b92505050610140808401518583038287015261464483826144e8565b925050506101608084015185830382870152614660838261453d565b92505050610180808401516146798287018260ff169052565b50506101a08381015173ffffffffffffffffffffffffffffffffffffffff908116918601919091526101c0808501511515908601526101e080850151909116908501526102008084015115159085015261022080840151908501526102409283015160ff1692909301919091525090565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561475d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc088860301845261474b85835161456d565b94509285019290850190600101614711565b5092979650505050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561475d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08886030184526147cb8583516141aa565b94509285019290850190600101614791565b60208152600061401a602083018461456d565b60006020828403121561480257600080fd5b815161433b816140d7565b60006020828403121561481f57600080fd5b5051919050565b600080600080600060a0868803121561483e57600080fd5b5050835160208501516040860151606087015160809097015192989197509594509092509050565b6000806040838503121561487957600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080600080608085870312156148cf57600080fd5b84516148da816140d7565b60208601516040870151606090970151919890975090945092505050565b8051801515811461490857600080fd5b919050565b60006020828403121561491f57600080fd5b61401a826148f8565b6000806040838503121561493b57600080fd5b8251614946816140d7565b602084015190925061ffff8116811461412a57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156149ce576149ce61498d565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614a0b57614a0b61498d565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614a4e57614a4e614a10565b500490565b80516fffffffffffffffffffffffffffffffff8116811461490857600080fd5b60008060408385031215614a8657600080fd5b614a8f83614a53565b9150614a9d60208401614a53565b90509250929050565b600080600060608486031215614abb57600080fd5b614ac484614a53565b9250614ad2602085016148f8565b9150604084015164ffffffffff81168114614aec57600080fd5b809150509250925092565b600060208284031215614b0957600080fd5b815160ff8116811461433b57600080fd5b600061ffff80841680614b2f57614b2f614a10565b92169190910492915050565b60008219821115614b4e57614b4e61498d565b50019056fea2646970667358221220d15108d0bec9cc6f3903875dd8412869a3da1b36661bdc780e2e2f0ae3136d2464736f6c634300080a003360a06040523480156200001157600080fd5b5060405162001b4538038062001b45833981016040819052620000349162000608565b6000805460ff19169055816001600160a01b0381166200006757604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cc91906200070a565b6001600160a01b031660805250805160005b818110156200014257620001398382815181106200010057620001006200072f565b6020026020010151600001518483815181106200012157620001216200072f565b6020026020010151602001516200014c60201b60201c565b600101620000de565b5050505062000822565b6001600160a01b03821615806200016a57506001600160a01b038116155b156200018957604051635919af9760e11b815260040160405180910390fd5b620001a8826001600160a01b0316620004ba60201b620006751760201c565b620001d65760405163df4c572d60e01b81526001600160a01b03831660048201526024015b60405180910390fd5b620001f5816001600160a01b0316620004ba60201b620006751760201c565b6200021f5760405163df4c572d60e01b81526001600160a01b0382166004820152602401620001cd565b806001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200027c575060408051601f3d908101601f19168201909252620002799181019062000745565b60015b6200029a576040516367a7cd4360e01b815260040160405180910390fd5b8060ff16600814620002bf576040516367a7cd4360e01b815260040160405180910390fd5b506000816001600160a01b031663d62ada116040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200031f575060408051601f3d908101601f191682019092526200031c918101906200076a565b60015b6200032a576200032d565b90505b6000836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200038c575060408051601f3d908101601f19168201909252620003899181019062000745565b60015b620003aa5760405163528ca31d60e01b815260040160405180910390fd5b60128160ff161115620003d05760405163528ca31d60e01b815260040160405180910390fd5b9050826001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa9250505080156200042f575060408051601f3d908101601f191682019092526200042c91810190620007a6565b60015b6200044d576040516367a7cd4360e01b815260040160405180910390fd5b8662000461576200046185858484620004c0565b5050505050620004748484848462000526565b826001600160a01b0316846001600160a01b03167fe263805b03657ab13064915d0723c5ce14981547e7cba5283f66b9e5d81f6e6e60405160405180910390a350505050565b3b151590565b60008313620004e2576040516356e05d2b60e01b815260040160405180910390fd5b836001600160501b0316816001600160501b0316108062000501575081155b15620005205760405163b1cf675560e01b815260040160405180910390fd5b50505050565b6001600160a01b03831682156200053e57600160a11b175b6200055460ff60a21b60a284901b1682620007fb565b6001600160a01b0390951660009081526001602052604090209490945550505050565b80516001600160a01b03811681146200058f57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715620005cf57620005cf62000594565b60405290565b604051601f8201601f191681016001600160401b038111828210171562000600576200060062000594565b604052919050565b60008060408084860312156200061d57600080fd5b620006288462000577565b602085810151919450906001600160401b03808211156200064857600080fd5b818701915087601f8301126200065d57600080fd5b81518181111562000672576200067262000594565b62000682848260051b01620005d5565b818152848101925060069190911b830184019089821115620006a357600080fd5b928401925b81841015620006fa5785848b031215620006c25760008081fd5b620006cc620005aa565b620006d78562000577565b8152620006e686860162000577565b8187015283529285019291840191620006a8565b8096505050505050509250929050565b6000602082840312156200071d57600080fd5b620007288262000577565b9392505050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156200075857600080fd5b815160ff811681146200072857600080fd5b6000602082840312156200077d57600080fd5b815180151581146200072857600080fd5b80516001600160501b03811681146200058f57600080fd5b600080600080600060a08688031215620007bf57600080fd5b620007ca866200078e565b9450602086015193506040860151925060608601519150620007ef608087016200078e565b90509295509295909350565b600082198211156200081d57634e487b7160e01b600052601160045260246000fd5b500190565b6080516112f262000853600039600081816101b201528181610280015281816103e201526104ff01526112f26000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c80638456cb591161008c578063b66102df11610066578063b66102df146101d4578063e8a97a3e146101e7578063f190e5fa146101fa578063f9a650301461023f57600080fd5b80638456cb591461016d5780639dcb511a14610175578063a50cf2c8146101ad57600080fd5b80635c975abb116100bd5780635c975abb1461011c5780635cecbd0e146101325780637afb01041461015a57600080fd5b80633f4ba83a146100e457806341976e09146100ee57806354fd4d5014610114575b600080fd5b6100ec610252565b005b6101016100fc366004610f28565b610340565b6040519081526020015b60405180910390f35b610101600281565b60005460ff16604051901515815260200161010b565b610145610140366004610f4a565b610352565b6040805192835260208301919091520161010b565b610101610168366004610f90565b610376565b6100ec6103b4565b610188610183366004610f28565b6104a0565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010b565b6101887f000000000000000000000000000000000000000000000000000000000000000081565b6101016101e2366004610fbc565b6104b4565b6100ec6101f5366004610ff8565b6104d1565b61020d610208366004610f28565b6105c3565b6040805173ffffffffffffffffffffffffffffffffffffffff909416845291151560208401529082015260600161010b565b61010161024d366004610f90565b61064d565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156102dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103009190611022565b610336576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033e61067b565b565b600061034b82610761565b5092915050565b60008061035f868661064d565b915061036b848461064d565b905094509492505050565b600080600061038484610761565b90925090508161039582600a611193565b61039f908761119f565b6103a991906111dc565b925050505b92915050565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561043e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104629190611022565b610498576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033e610819565b60006104ab826105c3565b50909392505050565b60006104c96104c3858561064d565b83610376565b949350505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561055b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057f9190611022565b6105b5576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105bf82826108d9565b5050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600160205260408120548190819080610624576040517f4bb8ad8200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b947402000000000000000000000000000000000000000086161515945060a286901c9350915050565b600080600061065b84610761565b909250905061066b81600a611193565b61039f838761119f565b3b151590565b60005460ff166106ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b600080600080610770856105c3565b8095508193508294505050506000806000808573ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156107cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f19190611231565b9450945050935093508461080b5761080b84848484610dd9565b829750505050505050915091565b60005460ff1615610886576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016106e3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586107373390565b73ffffffffffffffffffffffffffffffffffffffff82161580610910575073ffffffffffffffffffffffffffffffffffffffff8116155b15610947576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82163b6109ad576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016106e3565b73ffffffffffffffffffffffffffffffffffffffff81163b610a13576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024016106e3565b8073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610a98575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610a9591810190611281565b60015b610ace576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060ff16600814610b0b576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060008173ffffffffffffffffffffffffffffffffffffffff1663d62ada116040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610b93575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610b9091810190611022565b60015b610b9c57610b9f565b90505b60008373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610c26575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610c2391810190611281565b60015b610c5c576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60128160ff161115610c9a576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b90508273ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa925050508015610d21575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610d1e91810190611231565b60015b610d57576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b86610d6857610d6885858484610dd9565b5050505050610d7984848484610e74565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fe263805b03657ab13064915d0723c5ce14981547e7cba5283f66b9e5d81f6e6e60405160405180910390a350505050565b60008313610e13576040517f56e05d2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8369ffffffffffffffffffff168169ffffffffffffffffffff161080610e37575081155b15610e6e576040517fb1cf675500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b73ffffffffffffffffffffffffffffffffffffffff83168215610ea95774020000000000000000000000000000000000000000175b610ecf7503fc000000000000000000000000000000000000000060a284901b16826112a4565b73ffffffffffffffffffffffffffffffffffffffff90951660009081526001602052604090209490945550505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610f2357600080fd5b919050565b600060208284031215610f3a57600080fd5b610f4382610eff565b9392505050565b60008060008060808587031215610f6057600080fd5b84359350610f7060208601610eff565b925060408501359150610f8560608601610eff565b905092959194509250565b60008060408385031215610fa357600080fd5b82359150610fb360208401610eff565b90509250929050565b600080600060608486031215610fd157600080fd5b83359250610fe160208501610eff565b9150610fef60408501610eff565b90509250925092565b6000806040838503121561100b57600080fd5b61101483610eff565b9150610fb360208401610eff565b60006020828403121561103457600080fd5b81518015158114610f4357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b808511156110cc57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156110b2576110b2611044565b808516156110bf57918102915b93841c9390800290611078565b509250929050565b6000826110e3575060016103ae565b816110f0575060006103ae565b816001811461110657600281146111105761112c565b60019150506103ae565b60ff84111561112157611121611044565b50506001821b6103ae565b5060208310610133831016604e8410600b841016171561114f575081810a6103ae565b6111598383611073565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561118b5761118b611044565b029392505050565b6000610f4383836110d4565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156111d7576111d7611044565b500290565b600082611212577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b805169ffffffffffffffffffff81168114610f2357600080fd5b600080600080600060a0868803121561124957600080fd5b61125286611217565b945060208601519350604086015192506060860151915061127560808701611217565b90509295509295909350565b60006020828403121561129357600080fd5b815160ff81168114610f4357600080fd5b600082198211156112b7576112b7611044565b50019056fea2646970667358221220e7485a2cb5750973f539ca59d2211008b42bb92b6c49605a53f5d9c88c330fb164736f6c634300080a003360e06040523480156200001157600080fd5b5060405162002ced38038062002ced8339810160408190526200003491620004bb565b6000805460ff19169055806001600160a01b0381166200006757604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cc9190620004bb565b6001600160a01b039081166080526001805560408051808201909152600281526105a360f41b602082015291508216620001245760405162461bcd60e51b81526004016200011b9190620004ed565b60405180910390fd5b50806001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000164573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200018a9190620004bb565b6001600160a01b031660c052604051620001a490620004ad565b604051809103906000f080158015620001c1573d6000803e3d6000fd5b506001600160a01b031660a08190526040805163204a7f0760e21b81529051638129fc1c9160048082019260009290919082900301818387803b1580156200020857600080fd5b505af11580156200021d573d6000803e3d6000fd5b50505050620002316200028a60201b60201c565b50600454600380546001600160a01b039092166001600160a01b03199283161790556000805260026020527fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b8054909116905562000545565b6000620002a460a0516200038c60201b6200119b1760201c565b9050806001600160a01b0316638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620002e257600080fd5b505af1158015620002f7573d6000803e3d6000fd5b5050600480546001600160a01b03908116600090815260026020908152604090912080546001600160a01b03199081169388169384179091558354169091179091556200035492506005915083906200043b811b6200127d17901c565b506040516001600160a01b038216907f9f69b6c10f6810213e055b0ba6bc0a4e2603f73c221aad77ea35da819cda7dc390600090a250565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260601b60148201526e5af43d82803e903d91602b57fd5bf360881b60288201526037816000f09150506001600160a01b038116620004365760405162461bcd60e51b815260206004820152601660248201527f455243313136373a20637265617465206661696c65640000000000000000000060448201526064016200011b565b919050565b600062000452836001600160a01b0384166200045b565b90505b92915050565b6000818152600183016020526040812054620004a45750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000455565b50600062000455565b610e788062001e7583390190565b600060208284031215620004ce57600080fd5b81516001600160a01b0381168114620004e657600080fd5b9392505050565b600060208083528351808285015260005b818110156200051c57858101830151858201604001528201620004fe565b818111156200052f576000604083870101525b50601f01601f1916929092016040019392505050565b60805160a05160c0516118cf620005a66000396000818161026a015281816103680152610b7001526000818161020201526110650152600081816102c4015281816105b80152818161099601528181610a840152610e7401526118cf6000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806388f64c54116100cd578063b193976311610081578063d82ecc4811610066578063d82ecc4814610309578063e3ba9ace1461031c578063f23953ab1461032f57600080fd5b8063b1939763146102f9578063b60e85181461030157600080fd5b80638f7dcfa3116100b25780638f7dcfa31461029f578063a50cf2c8146102bf578063a904aab6146102e657600080fd5b806388f64c541461026557806389b77b3e1461028c57600080fd5b806354fd4d50116101245780635da33c5b116101095780635da33c5b146101fd578063765e0159146102245780638456cb591461025d57600080fd5b806354fd4d50146101d05780635c975abb146101e657600080fd5b806313d8c8401461015657806321d18456146101a05780632932472f146101b35780633f4ba83a146101c8575b600080fd5b6004546101769073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6101766101ae366004611651565b610337565b6101c66101c1366004611697565b61058a565b005b6101c6610968565b6101d8600181565b604051908152602001610197565b60005460ff165b6040519015158152602001610197565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101766102323660046116da565b73ffffffffffffffffffffffffffffffffffffffff9081166000908152600260205260409020541690565b6101c6610a56565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101c661029a3660046116da565b610b42565b6003546101769073ffffffffffffffffffffffffffffffffffffffff1681565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101c66102f4366004611697565b610e46565b6101d8610fb8565b6101d8611033565b6101ed6103173660046116da565b611044565b61017661032a3660046116f5565b611051565b6101c661105e565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa1580156103c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103e8919061170e565b6040518060400160405280600281526020017f43500000000000000000000000000000000000000000000000000000000000008152509061045f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b60405180910390fd5b506104686112a6565b6003805473ffffffffffffffffffffffffffffffffffffffff8082166000818152600260205260409081902080549093167fffffffffffffffffffffffff0000000000000000000000000000000000000000948516179094558154909216905590517fc75b5a710000000000000000000000000000000000000000000000000000000081523360048201526024810185905260448101849052819063c75b5a7190606401600060405180830381600087803b15801561052657600080fd5b505af115801561053a573d6000803e3d6000fd5b505060405133925073ffffffffffffffffffffffffffffffffffffffff841691507ff3ede7039176503a8ad1fe7cfaa29475a9dbe0cdcaf04ecf9a5c10570c47b10390600090a390505b92915050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610614573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610638919061170e565b61066e576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106766112a6565b60035473ffffffffffffffffffffffffffffffffffffffff838116911614156106fa576003805473ffffffffffffffffffffffffffffffffffffffff808216600090815260026020526040902080549091167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092558154169055610865565b73ffffffffffffffffffffffffffffffffffffffff838116600090815260026020908152604091829020548251808401909352600383527f4146330000000000000000000000000000000000000000000000000000000000918301919091529091848116911614610798576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b5060045473ffffffffffffffffffffffffffffffffffffffff838116911614156107fd57600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85161790555b73ffffffffffffffffffffffffffffffffffffffff828116600081815260026020526040808220805488861684529183208054929095167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790945591905281541690555b6040517fc75b5a7100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600060248301819052604483015283169063c75b5a7190606401600060405180830381600087803b1580156108dc57600080fd5b505af11580156108f0573d6000803e3d6000fd5b505050506109088260056112dd90919063ffffffff16565b508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f25e267469ba2ae82515be7b3d45df60bf8308343f0809e8cf7319058e2255ce660405160405180910390a3505050565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156109f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a16919061170e565b610a4c576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a546112ff565b565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015610ae0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b04919061170e565b610b3a576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a546113e0565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa158015610bcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf0919061170e565b6040518060400160405280600281526020017f435000000000000000000000000000000000000000000000000000000000000081525090610c5e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b50610c6a6005826114a0565b6040518060400160405280600381526020017f414634000000000000000000000000000000000000000000000000000000000081525090610cd8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b50438173ffffffffffffffffffffffffffffffffffffffff16633dc54b406040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4991906117a3565b14156040518060400160405280600381526020017f414631000000000000000000000000000000000000000000000000000000000081525090610db9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b506004805473ffffffffffffffffffffffffffffffffffffffff90811660009081526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081169487169485179091558454168317909355915190917fced6ab9afc868b3a088366f6631ae20752993b5cce5d5f0534ea5a59fcc57d5691a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610ed0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef4919061170e565b610f2a576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f19a1603900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301528416906319a1603990604401600060405180830381600087803b158015610f9b57600080fd5b505af1158015610faf573d6000803e3d6000fd5b50505050505050565b600354600090819073ffffffffffffffffffffffffffffffffffffffff165b73ffffffffffffffffffffffffffffffffffffffff81161561102d5773ffffffffffffffffffffffffffffffffffffffff9081166000908152600260205260409020541681611025816117eb565b925050610fd7565b50919050565b600061103f60056114cf565b905090565b60006105846005836114a0565b60006105846005836114d9565b60006110897f000000000000000000000000000000000000000000000000000000000000000061119b565b90508073ffffffffffffffffffffffffffffffffffffffff16638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156110d357600080fd5b505af11580156110e7573d6000803e3d6000fd5b50506004805473ffffffffffffffffffffffffffffffffffffffff908116600090815260026020526040902080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811692871692831790915582541617905550611156905060058261127d565b5060405173ffffffffffffffffffffffffffffffffffffffff8216907f9f69b6c10f6810213e055b0ba6bc0a4e2603f73c221aad77ea35da819cda7dc390600090a250565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260601b60148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f091505073ffffffffffffffffffffffffffffffffffffffff8116611278576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f455243313136373a20637265617465206661696c6564000000000000000000006044820152606401610456565b919050565b600061129f8373ffffffffffffffffffffffffffffffffffffffff84166114e5565b9392505050565b60035473ffffffffffffffffffffffffffffffffffffffff90811660009081526002602052604090205416610a5457610a5461105e565b600061129f8373ffffffffffffffffffffffffffffffffffffffff8416611534565b60005460ff1661136b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610456565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff161561144d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610456565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586113b63390565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600183016020526040812054151561129f565b6000610584825490565b600061129f8383611627565b600081815260018301602052604081205461152c57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610584565b506000610584565b6000818152600183016020526040812054801561161d576000611558600183611824565b855490915060009061156c90600190611824565b90508181146115d157600086600001828154811061158c5761158c61183b565b90600052602060002001549050808760000184815481106115af576115af61183b565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806115e2576115e261186a565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610584565b6000915050610584565b600082600001828154811061163e5761163e61183b565b9060005260206000200154905092915050565b6000806040838503121561166457600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff8116811461127857600080fd5b6000806000606084860312156116ac57600080fd5b6116b584611673565b92506116c360208501611673565b91506116d160408501611673565b90509250925092565b6000602082840312156116ec57600080fd5b61129f82611673565b60006020828403121561170757600080fd5b5035919050565b60006020828403121561172057600080fd5b8151801515811461129f57600080fd5b600060208083528351808285015260005b8181101561175d57858101830151858201604001528201611741565b8181111561176f576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b6000602082840312156117b557600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561181d5761181d6117bc565b5060010190565b600082821015611836576118366117bc565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220f1e9c81b8c3af2491c907ee66cf24e1bb76111b821db02df8f98dbb48b5ab5fa64736f6c634300080a0033608060405234801561001057600080fd5b50610e58806100206000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c806354fd4d5011610081578063c45a01551161005b578063c45a0155146101a4578063c75b5a71146101ca578063d1660f99146101dd57600080fd5b806354fd4d501461014f5780638129fc1c14610157578063c12c21c01461015f57600080fd5b80631afbb7a4116100b25780631afbb7a41461011d5780631cff79cd146101265780633dc54b401461014657600080fd5b806316128211146100d957806317d11a15146100ee57806319a160391461010a575b600080fd5b6100ec6100e7366004610b42565b6101f0565b005b6100f760035481565b6040519081526020015b60405180910390f35b6100ec610118366004610b8d565b61024c565b6100f760025481565b610139610134366004610bef565b6102c9565b6040516101019190610d49565b6100f760045481565b6100f7600181565b6100ec610344565b60015461017f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610101565b60005461017f9062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b6100ec6101d8366004610d5c565b610494565b6100ec6101eb366004610d8f565b61053d565b60015473ffffffffffffffffffffffffffffffffffffffff163314610241576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600291909155600355565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1633146102a3576040517fb126b84800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102c573ffffffffffffffffffffffffffffffffffffffff83168260006105b4565b5050565b60015460609073ffffffffffffffffffffffffffffffffffffffff16331461031d576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033d73ffffffffffffffffffffffffffffffffffffffff8416836107b4565b9392505050565b600054610100900460ff1661035f5760005460ff1615610363565b303b155b6103f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600054610100900460ff1615801561043357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000166101011790555b600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16336201000002179055801561049157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b50565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1633146104eb576040517fb126b84800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff949094169390931790925560025560035543600455565b60015473ffffffffffffffffffffffffffffffffffffffff16331461058e576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105af73ffffffffffffffffffffffffffffffffffffffff841683836107f6565b505050565b80158061065457506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015284169063dd62ed3e90604401602060405180830381865afa15801561062e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106529190610dcb565b155b6106e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e63650000000000000000000060648201526084016103eb565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526105af9084907f095ea7b300000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261084c565b606061033d83836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250610958565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526105af9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401610732565b60006108ae826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166109589092919063ffffffff16565b8051909150156105af57808060200190518101906108cc9190610de4565b6105af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016103eb565b6060610967848460008561096f565b949350505050565b606082471015610a01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016103eb565b843b610a69576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016103eb565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051610a929190610e06565b60006040518083038185875af1925050503d8060008114610acf576040519150601f19603f3d011682016040523d82523d6000602084013e610ad4565b606091505b5091509150610ae4828286610aef565b979650505050505050565b60608315610afe57508161033d565b825115610b0e5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103eb9190610d49565b60008060408385031215610b5557600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff81168114610b8857600080fd5b919050565b60008060408385031215610ba057600080fd5b610ba983610b64565b9150610bb760208401610b64565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215610c0257600080fd5b610c0b83610b64565b9150602083013567ffffffffffffffff80821115610c2857600080fd5b818501915085601f830112610c3c57600080fd5b813581811115610c4e57610c4e610bc0565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715610c9457610c94610bc0565b81604052828152886020848701011115610cad57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b83811015610cea578181015183820152602001610cd2565b83811115610cf9576000848401525b50505050565b60008151808452610d17816020860160208601610ccf565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061033d6020830184610cff565b600080600060608486031215610d7157600080fd5b610d7a84610b64565b95602085013595506040909401359392505050565b600080600060608486031215610da457600080fd5b610dad84610b64565b9250610dbb60208501610b64565b9150604084013590509250925092565b600060208284031215610ddd57600080fd5b5051919050565b600060208284031215610df657600080fd5b8151801515811461033d57600080fd5b60008251610e18818460208701610ccf565b919091019291505056fea2646970667358221220448e7046078cd668c09328d857e534e2aab6cdc0e691d3d4f2c8baae8e084b1364736f6c634300080a003360c06040523480156200001157600080fd5b506040516200162738038062001627833981016040819052620000349162000177565b60408051808201909152600281526105a360f41b60208201526001600160a01b038216620000805760405162461bcd60e51b8152600401620000779190620001a9565b60405180910390fd5b50806001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e6919062000177565b6001600160a01b03166080816001600160a01b031681525050806001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200013e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000164919062000177565b6001600160a01b031660a0525062000201565b6000602082840312156200018a57600080fd5b81516001600160a01b0381168114620001a257600080fd5b9392505050565b600060208083528351808285015260005b81811015620001d857858101830151858201604001528201620001ba565b81811115620001eb576000604083870101525b50601f01601f1916929092016040019392505050565b60805160a0516113c2620002656000396000818161021f0152818161036401526106d501526000818160af0152818161012a015281816104420152818161056e015281816107b301528181610aa601528181610b890152610c6701526113c26000f3fe60806040526004361061005e5760003560e01c80635869dba8116100435780635869dba814610199578063deecfbc9146101bb578063e79a4089146101ce57600080fd5b80634f0e0ef31461011857806354fd4d501461017657600080fd5b366101135760408051808201909152600381527f574732000000000000000000000000000000000000000000000000000000000060208201523373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b60405180910390fd5b50005b600080fd5b34801561012457600080fd5b5061014c7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561018257600080fd5b5061018b600181565b60405190815260200161016d565b3480156101a557600080fd5b506101b96101b4366004611263565b6101ee565b005b6101b96101c936600461128f565b61031d565b3480156101da57600080fd5b506101b96101e93660046112e1565b61068e565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201819052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa15801561027b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061029f9190611318565b6040518060400160405280600281526020017f43500000000000000000000000000000000000000000000000000000000000008152509061030d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b506103188383610a77565b505050565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808516600483015284917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa1580156103ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103d19190611318565b6040518060400160405280600281526020017f52500000000000000000000000000000000000000000000000000000000000008152509061043f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e6919061133a565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600381526020017f57473100000000000000000000000000000000000000000000000000000000008152509061056b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156105d457600080fd5b505af11580156105e8573d6000803e3d6000fd5b50505050506105f78434610b3c565b6040517f9aa5d46200000000000000000000000000000000000000000000000000000000815234600482015273ffffffffffffffffffffffffffffffffffffffff848116602483015261ffff84166044830152851690639aa5d46290606401600060405180830381600087803b15801561067057600080fd5b505af1158015610684573d6000803e3d6000fd5b5050505050505050565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808516600483015284917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa15801561071e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107429190611318565b6040518060400160405280600281526020017f5250000000000000000000000000000000000000000000000000000000000000815250906107b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610833573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610857919061133a565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600381526020017f5747310000000000000000000000000000000000000000000000000000000000815250906108dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b506109703330858773ffffffffffffffffffffffffffffffffffffffff166336dda7d56040518163ffffffff1660e01b8152600401602060405180830381865afa15801561092e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610952919061133a565b73ffffffffffffffffffffffffffffffffffffffff16929190610cd4565b6040517f05fe138b0000000000000000000000000000000000000000000000000000000081526004810184905230602482015260009073ffffffffffffffffffffffffffffffffffffffff8616906305fe138b906044016020604051808303816000875af11580156109e6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0a9190611357565b9050610a168382610a77565b8273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f6de63bb986f2779478e384365c03cc2e62f06b453856acca87d5a519ce02664960405160405180910390a35050505050565b6040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632e1a7d4d90602401600060405180830381600087803b158015610aff57600080fd5b505af1158015610b13573d6000803e3d6000fd5b50610b389250505073ffffffffffffffffffffffffffffffffffffffff831682610d6f565b5050565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015282917f00000000000000000000000000000000000000000000000000000000000000009091169063dd62ed3e90604401602060405180830381865afa158015610bd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf69190611357565b1015610b38576040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303816000875af1158015610cb0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103189190611318565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052610d69908590610ec9565b50505050565b80471015610dd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610107565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114610e33576040519150601f19603f3d011682016040523d82523d6000602084013e610e38565b606091505b5050905080610318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610107565b6000610f2b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16610fd59092919063ffffffff16565b8051909150156103185780806020019051810190610f499190611318565b610318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610107565b6060610fe48484600085610fee565b90505b9392505050565b606082471015611080576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610107565b843b6110e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610107565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516111119190611370565b60006040518083038185875af1925050503d806000811461114e576040519150601f19603f3d011682016040523d82523d6000602084013e611153565b606091505b509150915061116382828661116e565b979650505050505050565b6060831561117d575081610fe7565b82511561118d5782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b60005b838110156111dc5781810151838201526020016111c4565b83811115610d695750506000910152565b602081526000825180602084015261120c8160408501602087016111c1565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461126057600080fd5b50565b6000806040838503121561127657600080fd5b82356112818161123e565b946020939093013593505050565b6000806000606084860312156112a457600080fd5b83356112af8161123e565b925060208401356112bf8161123e565b9150604084013561ffff811681146112d657600080fd5b809150509250925092565b6000806000606084860312156112f657600080fd5b83356113018161123e565b92506020840135915060408401356112d68161123e565b60006020828403121561132a57600080fd5b81518015158114610fe757600080fd5b60006020828403121561134c57600080fd5b8151610fe78161123e565b60006020828403121561136957600080fd5b5051919050565b600082516113828184602087016111c1565b919091019291505056fea264697066735822122017fd7fc76e4a1efcf24b78a3417fad7ab9576f0a23aa756ddb211c5e2227aa9564736f6c634300080a003360806040523480156200001157600080fd5b5060405162002b8038038062002b80833981016040819052620000349162000122565b6001600160a01b0381166200008f5760405162461bcd60e51b815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640160405180910390fd5b6001600160a01b03811660008181526001602052604080822080546001600160601b0319166b204fce5e3e2502611000000090811790915590517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91620000f99190815260200190565b60405180910390a350600680546001600160a81b031916336101000260ff191617905562000154565b6000602082840312156200013557600080fd5b81516001600160a01b03811681146200014d57600080fd5b9392505050565b612a1c80620001646000396000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c806370a08231116100f9578063b4b5ea5711610097578063dd62ed3e11610071578063dd62ed3e14610503578063e7a324dc14610555578063f1127ed81461057c578063f2fde38b146105ee57600080fd5b8063b4b5ea57146104ca578063c3cda520146104dd578063d505accf146104f057600080fd5b806395d89b41116100d357806395d89b411461045b5780639742ca4614610497578063a9059cbb146104aa578063b0660c3d146104bd57600080fd5b806370a08231146103c7578063782d6fe11461040b5780637ecebe001461043b57600080fd5b806330adf81f11610166578063481c6a7511610140578063481c6a751461031e578063587cde1e146103435780635c19a95c146103795780636fcfff451461038c57600080fd5b806330adf81f14610298578063313ce567146102bf578063349dc329146102d957600080fd5b806320606b701161019757806320606b70146102545780632185810b1461027b57806323b872dd1461028557600080fd5b806306fdde03146101be578063095ea7b31461021057806318160ddd14610233575b600080fd5b6101fa6040518060400160405280600781526020017f47656172626f780000000000000000000000000000000000000000000000000081525081565b60405161020791906124a3565b60405180910390f35b61022361021e36600461253f565b610601565b6040519015158152602001610207565b6102466b204fce5e3e2502611000000081565b604051908152602001610207565b6102467f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b61028361070d565b005b610223610293366004612569565b6107ee565b6102467f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b6102c7601281565b60405160ff9091168152602001610207565b6007546102f99073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610207565b6006546102f990610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6102f96103513660046125a5565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6102836103873660046125a5565b61098a565b6103b261039a3660046125a5565b60046020526000908152604090205463ffffffff1681565b60405163ffffffff9091168152602001610207565b6102466103d53660046125a5565b73ffffffffffffffffffffffffffffffffffffffff166000908152600160205260409020546bffffffffffffffffffffffff1690565b61041e61041936600461253f565b610997565b6040516bffffffffffffffffffffffff9091168152602001610207565b6102466104493660046125a5565b60056020526000908152604090205481565b6101fa6040518060400160405280600481526020017f474541520000000000000000000000000000000000000000000000000000000081525081565b6102836104a53660046125a5565b610cae565b6102236104b836600461253f565b610e20565b6006546102239060ff1681565b61041e6104d83660046125a5565b610e5c565b6102836104eb3660046125d1565b610efa565b6102836104fe366004612629565b611310565b610246610511366004612693565b73ffffffffffffffffffffffffffffffffffffffff9182166000908152602081815260408083209390941682529190915220546bffffffffffffffffffffffff1690565b6102467fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b6105c561058a3660046126c6565b600360209081526000928352604080842090915290825290205463ffffffff81169064010000000090046bffffffffffffffffffffffff1682565b6040805163ffffffff90931683526bffffffffffffffffffffffff909116602083015201610207565b6102836105fc3660046125a5565b61187a565b6000807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83141561063f57506bffffffffffffffffffffffff610664565b6106618360405180606001604052806025815260200161285260259139611a15565b90505b3360008181526020818152604080832073ffffffffffffffffffffffffffffffffffffffff89168085529083529281902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff871690811790915590519081529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a360019150505b92915050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314610798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e616765720060448201526064015b60405180910390fd5b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f795b0e16c8da9807b0a215f3749bd6dbcc49fc0472183f4e446abb7dcbd9d00790600090a1565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081815260408083203380855290835281842054825160608101909352602580845291936bffffffffffffffffffffffff909116928592610856928892919061285290830139611a15565b90508673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156108a257506bffffffffffffffffffffffff82811614155b156109725760006108cc83836040518060600160405280603d8152602001612974603d9139611a67565b73ffffffffffffffffffffffffffffffffffffffff898116600081815260208181526040808320948a168084529482529182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff87169081179091559151918252939450919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505b61097d878783611ad5565b5060019695505050505050565b6109943382611e9c565b50565b6000438210610a28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f476561723a3a6765745072696f72566f7465733a206e6f74207965742064657460448201527f65726d696e656400000000000000000000000000000000000000000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff831660009081526004602052604090205463ffffffff1680610a63576000915050610707565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604081208491610a95600185612735565b63ffffffff90811682526020820192909252604001600020541611610b1b5773ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812090610ae5600184612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff1691506107079050565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020908152604080832083805290915290205463ffffffff16831015610b63576000915050610707565b600080610b71600184612735565b90505b8163ffffffff168163ffffffff161115610c565760006002610b968484612735565b610ba0919061275a565b610baa9083612735565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260036020908152604080832063ffffffff8581168552908352928190208151808301909252549283168082526401000000009093046bffffffffffffffffffffffff1691810191909152919250871415610c2a576020015194506107079350505050565b805163ffffffff16871115610c4157819350610c4f565b610c4c600183612735565b92505b5050610b74565b5073ffffffffffffffffffffffffffffffffffffffff8516600090815260036020908152604080832063ffffffff909416835292905220546bffffffffffffffffffffffff6401000000009091041691505092915050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314610d34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e6167657200604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff8116610db1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640161078f565b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f2f834d1c8c4b956018fff5faca4d99868ae635487424d9c265c257ccbc698c6a90600090a250565b600080610e45836040518060600160405280602681526020016128a760269139611a15565b9050610e52338583611ad5565b5060019392505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526004602052604081205463ffffffff1680610e94576000610ef3565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812090610ec5600184612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b9392505050565b604080518082018252600781527f47656172626f780000000000000000000000000000000000000000000000000060209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f028ef9f797075f74ac647c65fde04fb0f128c2d59fd40f45732269917642fd4681840152466060820152306080808301919091528351808303909101815260a0820184528051908301207fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60c083015273ffffffffffffffffffffffffffffffffffffffff8a1660e08301526101008201899052610120808301899052845180840390910181526101408301909452835193909201929092207f19010000000000000000000000000000000000000000000000000000000000006101608401526101628301829052610182830181905290916000906101a201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa1580156110d8573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166111a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f476561723a3a64656c656761746542795369673a20696e76616c69642073696760448201527f6e61747572650000000000000000000000000000000000000000000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff811660009081526005602052604081208054916111d7836127a4565b919050558914611269576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f476561723a3a64656c656761746542795369673a20696e76616c6964206e6f6e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161078f565b874211156112f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f476561723a3a64656c656761746542795369673a207369676e6174757265206560448201527f7870697265640000000000000000000000000000000000000000000000000000606482015260840161078f565b611303818b611e9c565b505050505b505050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86141561134d57506bffffffffffffffffffffffff611372565b61136f8660405180606001604052806024815260200161291c60249139611a15565b90505b604080518082018252600781527f47656172626f780000000000000000000000000000000000000000000000000060209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f028ef9f797075f74ac647c65fde04fb0f128c2d59fd40f45732269917642fd4681840152466060820152306080808301919091528351808303909101815260a0909101835280519082012073ffffffffffffffffffffffffffffffffffffffff8b166000908152600590925291812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918c918c918c919086611472836127a4565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810188905260e001604051602081830303815290604052805190602001209050600082826040516020016115199291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff8b169284019290925260608301899052608083018890529092509060019060a0016020604051602081039080840390855afa1580156115a2573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661164a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a7065726d69743a20696e76616c6964207369676e617475726500604482015260640161078f565b8b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146116df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f476561723a3a7065726d69743a20756e617574686f72697a6564000000000000604482015260640161078f565b88421115611749576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a7065726d69743a207369676e6174757265206578706972656400604482015260640161078f565b846000808e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508a73ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258760405161186491906bffffffffffffffffffffffff91909116815260200190565b60405180910390a3505050505050505050505050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314611900576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e6167657200604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff811661197d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640161078f565b60065460405173ffffffffffffffffffffffffffffffffffffffff80841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36006805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b6000816c010000000000000000000000008410611a5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b509192915050565b6000836bffffffffffffffffffffffff16836bffffffffffffffffffffffff1611158290611ac2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b50611acd83856127dd565b949350505050565b60065460ff1680611b025750600654610100900473ffffffffffffffffffffffffffffffffffffffff1633145b80611b24575060075473ffffffffffffffffffffffffffffffffffffffff1633145b611b8a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f476561723a3a7472616e73666572732061726520666f7262696464656e000000604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff8316611c2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603c60248201527f476561723a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260448201527f616e736665722066726f6d20746865207a65726f206164647265737300000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff8216611cd0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f476561723a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260448201527f616e7366657220746f20746865207a65726f2061646472657373000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260016020908152604091829020548251606081019093526036808452611d2d936bffffffffffffffffffffffff90921692859291906129b190830139611a67565b73ffffffffffffffffffffffffffffffffffffffff848116600090815260016020908152604080832080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff968716179055928616825290829020548251606081019093526030808452611dbf949190911692859290919061287790830139611f50565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260409182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff968716179055905193851684529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a373ffffffffffffffffffffffffffffffffffffffff808416600090815260026020526040808220548584168352912054611e9792918216911683611fc1565b505050565b73ffffffffffffffffffffffffffffffffffffffff808316600081815260026020818152604080842080546001845282862054949093528787167fffffffffffffffffffffffff000000000000000000000000000000000000000084168117909155905191909516946bffffffffffffffffffffffff9092169391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4611f4a828483611fc1565b50505050565b600080611f5d8486612802565b9050846bffffffffffffffffffffffff16816bffffffffffffffffffffffff1610158390611fb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b50949350505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561200b57506000816bffffffffffffffffffffffff16115b15611e975773ffffffffffffffffffffffffffffffffffffffff8316156120fd5773ffffffffffffffffffffffffffffffffffffffff831660009081526004602052604081205463ffffffff1690816120655760006120c4565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812090612096600185612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b905060006120eb82856040518060600160405280602881526020016128cd60289139611a67565b90506120f9868484846121e2565b5050505b73ffffffffffffffffffffffffffffffffffffffff821615611e975773ffffffffffffffffffffffffffffffffffffffff821660009081526004602052604081205463ffffffff1690816121525760006121b1565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812090612183600185612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b905060006121d882856040518060600160405280602781526020016128f560279139611f50565b9050611308858484845b60006122064360405180606001604052806034815260200161294060349139612465565b905060008463ffffffff1611801561226d575073ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812063ffffffff831691612251600188612735565b63ffffffff908116825260208201929092526040016000205416145b156123035773ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812083916122a4600188612735565b63ffffffff168152602081019190915260400160002080546bffffffffffffffffffffffff92909216640100000000027fffffffffffffffffffffffffffffffff000000000000000000000000ffffffff9092169190911790556123fe565b60408051808201825263ffffffff80841682526bffffffffffffffffffffffff808616602080850191825273ffffffffffffffffffffffffffffffffffffffff8b166000908152600382528681208b8616825290915294909420925183549451909116640100000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009094169116179190911790556123a5846001612832565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260046020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff929092169190911790555b604080516bffffffffffffffffffffffff80861682528416602082015273ffffffffffffffffffffffffffffffffffffffff8716917fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724910160405180910390a25050505050565b6000816401000000008410611a5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91905b600060208083528351808285015260005b818110156124d0578581018301518582016040015282016124b4565b818111156124e2576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461253a57600080fd5b919050565b6000806040838503121561255257600080fd5b61255b83612516565b946020939093013593505050565b60008060006060848603121561257e57600080fd5b61258784612516565b925061259560208501612516565b9150604084013590509250925092565b6000602082840312156125b757600080fd5b610ef382612516565b803560ff8116811461253a57600080fd5b60008060008060008060c087890312156125ea57600080fd5b6125f387612516565b9550602087013594506040870135935061260f606088016125c0565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a03121561264457600080fd5b61264d88612516565b965061265b60208901612516565b95506040880135945060608801359350612677608089016125c0565b925060a0880135915060c0880135905092959891949750929550565b600080604083850312156126a657600080fd5b6126af83612516565b91506126bd60208401612516565b90509250929050565b600080604083850312156126d957600080fd5b6126e283612516565b9150602083013563ffffffff811681146126fb57600080fd5b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600063ffffffff8381169083168181101561275257612752612706565b039392505050565b600063ffffffff80841680612798577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156127d6576127d6612706565b5060010190565b60006bffffffffffffffffffffffff8381169083168181101561275257612752612706565b60006bffffffffffffffffffffffff80831681851680830382111561282957612829612706565b01949350505050565b600063ffffffff8083168185168083038211156128295761282961270656fe476561723a3a617070726f76653a20616d6f756e7420657863656564732039362062697473476561723a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e74206f766572666c6f7773476561723a3a7472616e736665723a20616d6f756e7420657863656564732039362062697473476561723a3a5f6d6f7665566f7465733a20766f746520616d6f756e7420756e646572666c6f7773476561723a3a5f6d6f7665566f7465733a20766f746520616d6f756e74206f766572666c6f7773476561723a3a7065726d69743a20616d6f756e7420657863656564732039362062697473476561723a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d62657220657863656564732033322062697473476561723a3a7472616e7366657246726f6d3a207472616e7366657220616d6f756e742065786365656473207370656e64657220616c6c6f77616e6365476561723a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e7420657863656564732062616c616e6365a26469706673582212201b84fd7789a35c022f692420863210a30e82d2405659f5a28275d433fa53467f64736f6c634300080a003360806040526016805460ff1916905534801561001a57600080fd5b506040516110a73803806110a7833981016040819052610039916100b6565b600080546001600160a01b038085166001600160a01b0319928316179092556003805492841692909116919091179055610080600a6b033b2e3c9fd0803ce80000006100e9565b60075550506b033b2e3c9fd0803ce800000060155561010b565b80516001600160a01b03811681146100b157600080fd5b919050565b600080604083850312156100c957600080fd5b6100d28361009a565b91506100e06020840161009a565b90509250929050565b60008261010657634e487b7160e01b600052601260045260246000fd5b500490565b610f8d8061011a6000396000f3fe608060405234801561001057600080fd5b50600436106102e95760003560e01c806367c99d5811610191578063c5f956af116100e3578063dbcb313b11610097578063f11a648711610071578063f11a648714610320578063f3fdb15a146105f1578063fe14112d1461061157600080fd5b8063dbcb313b146105d6578063e941fa78146105df578063ef8d9603146105e857600080fd5b8063cb3905e1116100c8578063cb3905e1146105c4578063cf33d95514610320578063d0efe753146105cd57600080fd5b8063c5f956af14610588578063ca9505e4146105a857600080fd5b80639aa5d46211610145578063b6ac642a1161011f578063b6ac642a14610567578063bb04b19314610567578063bf28068b1461057557600080fd5b80639aa5d46214610544578063a4e8273e14610557578063b3554a0a1461055e57600080fd5b8063788c6bfe11610176578063788c6bfe146104ef5780638456cb591461050157806396df5dc01461053157600080fd5b806367c99d58146104de57806374375359146104e757600080fd5b806336dda7d51161024a5780634d778ad1116101fe57806354fd4d50116101d857806354fd4d50146104c05780635c975abb146104c8578063609ae317146104d557600080fd5b80634d778ad114610491578063532fe502146104a45780635427c938146104ad57600080fd5b80633f4ba83a1161022f5780633f4ba83a1461045257806345d31f9d1461047f5780634c19386c1461048857600080fd5b806336dda7d51461040f5780633e163df01461042f57600080fd5b80632495a599116102a157806329f3d3b61161028657806329f3d3b6146103b35780632a3354c9146103bc5780632e97ca21146103dc57600080fd5b80632495a599146103735780632954018c1461039357600080fd5b8063078c4781116102d2578063078c4781146103205780630fce70fb146103335780631e16e4fc1461033b57600080fd5b8063030dbb04146102ee57806305fe138b1461030a575b600080fd5b6102f760105481565b6040519081526020015b60405180910390f35b6102f7610318366004610ce8565b600092915050565b61033161032e366004610d14565b50565b005b6015546102f7565b61034e610349366004610d2f565b610618565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610301565b60035461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b60005461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6102f760095481565b600a5461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103ff6103ea366004610d14565b60066020526000908152604090205460ff1681565b6040519015158152602001610301565b60055461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103ff61043d366004610d14565b60146020526000908152604090205460ff1681565b610331601680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b6102f760075481565b6102f760015481565b6102f761049f366004610d2f565b61064f565b6102f760115481565b6102f76104bb366004610d2f565b61066d565b6102f7600181565b6016546103ff9060ff1681565b6102f760085481565b6102f7600d5481565b6102f7610685565b6b033b2e3c9fd0803ce80000006102f7565b610331601680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b61033161053f366004610d2f565b601555565b610331610552366004610d48565b505050565b60016102f7565b6102f7600e5481565b61033161032e366004610d2f565b610331610583366004610ce8565b61071d565b60135461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103316105b6366004610d7d565b600b92909255600c55600d55565b6102f7600c5481565b6102f7600b5481565b6102f760155481565b6102f7600f5481565b6102f760025481565b60125461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b60006102f7565b6004818154811061062857600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6000610667826b033b2e3c9fd0803ce800000061077a565b92915050565b6000610667826b033b2e3c9fd0803ce80000006108e9565b6003546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156106f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107189190610da9565b905090565b6009829055600a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691909117909155600354610776911682846109fe565b5050565b60408051808201909152600281527f4d330000000000000000000000000000000000000000000000000000000000006020820152600090826107f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b60405180910390fd5b506000610800600284610e72565b90506b033b2e3c9fd0803ce8000000610839827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610ead565b6108439190610e72565b8411156040518060400160405280600281526020017f4d31000000000000000000000000000000000000000000000000000000000000815250906108b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b5082816108cd6b033b2e3c9fd0803ce800000087610ec4565b6108d79190610f01565b6108e19190610e72565b949350505050565b60008215806108f6575081155b1561090357506000610667565b8161091b60026b033b2e3c9fd0803ce8000000610e72565b610945907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610ead565b61094f9190610e72565b8311156040518060400160405280600281526020017f4d31000000000000000000000000000000000000000000000000000000000000815250906109c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b506b033b2e3c9fd0803ce80000006109d9600282610e72565b6109e38486610ec4565b6109ed9190610f01565b6109f79190610e72565b9392505050565b6040805173ffffffffffffffffffffffffffffffffffffffff848116602483015260448083018590528351808403909101815260649092018352602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65649084015261055292869291600091610ac9918516908490610b73565b8051909150156105525780806020019051810190610ae79190610f19565b610552576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016107e9565b60606108e1848460008585843b610be6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107e9565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051610c0f9190610f3b565b60006040518083038185875af1925050503d8060008114610c4c576040519150601f19603f3d011682016040523d82523d6000602084013e610c51565b606091505b5091509150610c61828286610c6c565b979650505050505050565b60608315610c7b5750816109f7565b825115610c8b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ce357600080fd5b919050565b60008060408385031215610cfb57600080fd5b82359150610d0b60208401610cbf565b90509250929050565b600060208284031215610d2657600080fd5b6109f782610cbf565b600060208284031215610d4157600080fd5b5035919050565b600080600060608486031215610d5d57600080fd5b83359250610d6d60208501610cbf565b9150604084013590509250925092565b600080600060608486031215610d9257600080fd5b505081359360208301359350604090920135919050565b600060208284031215610dbb57600080fd5b5051919050565b60005b83811015610ddd578181015183820152602001610dc5565b83811115610dec576000848401525b50505050565b6020815260008251806020840152610e11816040850160208701610dc2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082610ea8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600082821015610ebf57610ebf610e43565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610efc57610efc610e43565b500290565b60008219821115610f1457610f14610e43565b500190565b600060208284031215610f2b57600080fd5b815180151581146109f757600080fd5b60008251610f4d818460208701610dc2565b919091019291505056fea26469706673582212204edb887d94928b3914f60ab48df0182da9eb30ddbb7021b164cc728b60a655d564736f6c634300080a003360e06040523480156200001157600080fd5b5060405162013af238038062013af2833981016040819052620000349162000630565b826001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000073573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000999190620007bf565b620000a433620004ab565b6001600160a01b038116608081905260408051630873769560e01b815290516308737695916004808201926020929091908290030181865afa158015620000ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001159190620007bf565b6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000153573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001799190620007bf565b6001600160a01b0390811660a052841660c0525060405183906200019d9062000519565b6001600160a01b039091168152602001604051809103906000f080158015620001ca573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b0392909216918217905560608301516080840151604051620002029062000527565b6001600160a01b03938416815292909116602083015215156040820152606001604051809103906000f0801580156200023f573d6000803e3d6000fd5b50600280546001600160a01b0319166001600160a01b0392909216919091179055604051600090620002746020820162000535565b601f1982820381018352601f909101166040819052600154600254620002b0926001600160a01b039283169291909116908790602001620007e6565b60408051601f1981840301815290829052620002d09291602001620008e8565b60408051601f19818403018152919052905060006200035982848151602092830120604080517fff00000000000000000000000000000000000000000000000000000000000000818601523060601b6001600160601b03191660218201526035810193909352605580840192909252805180840390920182526075909201909152805191012090565b600154604051634fafc35760e11b81526001600160a01b038084166004830152929350911690639f5f86ae90602401600060405180830381600087803b158015620003a357600080fd5b505af1158015620003b8573d6000803e3d6000fd5b50505050620003ce8284620004fb60201b60201c565b600380546001600160a01b0319166001600160a01b0383811691821790925560015460408051630304b08760e61b81529051919093169263c12c21c09160048083019260209291908290030181865afa15801562000430573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004569190620007bf565b6001600160a01b031614620004a05760405162461bcd60e51b815260206004820152600c60248201526b496e636f727265637420434d60a01b604482015260640160405180910390fd5b505050505062000909565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008183516020850134f59050803b6200051457600080fd5b505050565b6158e8806200243683390190565b615e978062007d1e83390190565b615f3d806200dbb583390190565b6001600160a01b03811681146200055957600080fd5b50565b8051620005698162000543565b919050565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b0381118282101715620005a957620005a96200056e565b60405290565b604080519081016001600160401b0381118282101715620005a957620005a96200056e565b604051601f8201601f191681016001600160401b0381118282101715620005ff57620005ff6200056e565b604052919050565b80516001600160801b03811681146200056957600080fd5b805180151581146200056957600080fd5b6000806000606084860312156200064657600080fd5b8351620006538162000543565b602085810151919450906001600160401b03808211156200067357600080fd5b9086019060a082890312156200068857600080fd5b6200069262000584565b6200069d8362000607565b8152620006ac84840162000607565b8482015260408084015183811115620006c457600080fd5b8401601f81018b13620006d657600080fd5b805184811115620006eb57620006eb6200056e565b620006fb878260051b01620005d4565b818152878101955060069190911b82018701908c8211156200071c57600080fd5b918701915b818310156200077e5783838e0312156200073b5760008081fd5b62000745620005af565b8351620007528162000543565b81528389015161ffff811681146200076a5760008081fd5b818a01528652948701949183019162000721565b8484015250620007939050606085016200055c565b6060830152620007a6608085016200061f565b6080830152979097015195989697509495945050505050565b600060208284031215620007d257600080fd5b8151620007df8162000543565b9392505050565b600060018060a01b0380861683526020818616818501526040606081860152610100850160018060801b038088511660608801528084890151166080880152508187015160a080880152818151808452610120890191508583019350600092505b808310156200087857835180518816835286015161ffff168683015292850192600192909201919084019062000847565b5060608901516001600160a01b031660c0890152608090980151151560e0909701969096525094979650505050505050565b6000815160005b81811015620008cd5760208185018101518683015201620008b1565b81811115620008dd576000828601525b509290920192915050565b600062000901620008fa8386620008aa565b84620008aa565b949350505050565b60805160a05160c051611ad3620009636000396000818161010a0152610ea00152600081816103790152610b170152600081816101680152818161068c01528181610a4d01528181610b860152610c190152611ad36000f3fe6080604052600436106100f35760003560e01c80638da5cb5b1161008a578063ebf0c71711610059578063ebf0c71714610367578063f2fde38b1461039b578063f4747c58146103bb578063f9aa028a146103db57600080fd5b80638da5cb5b1461025a57806394ca2cb5146102855780639c4ae2d014610327578063c12c21c01461033a57600080fd5b80633e0b1a23116100c65780633e0b1a23146101ce5780634ef501ac146101e3578063715018a614610230578063805abe6a1461024557600080fd5b806316f0115b146100f85780632954018c146101565780632f7a18811461018a578063318d0d10146101b7575b600080fd5b34801561010457600080fd5b5061012c7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561016257600080fd5b5061012c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561019657600080fd5b5060025461012c9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156101c357600080fd5b506101cc610408565b005b3480156101da57600080fd5b506101cc610498565b3480156101ef57600080fd5b506102036101fe366004611726565b610521565b6040805173ffffffffffffffffffffffffffffffffffffffff93841681529290911660208301520161014d565b34801561023c57600080fd5b506101cc610567565b34801561025157600080fd5b506101cc6105f2565b34801561026657600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff1661012c565b34801561029157600080fd5b5061012c6102a03660046117e6565b8151602092830120604080517fff00000000000000000000000000000000000000000000000000000000000000818601523060601b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660218201526035810193909352605580840192909252805180840390920182526075909201909152805191012090565b6101cc6103353660046117e6565b6107d8565b34801561034657600080fd5b5060015461012c9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561037357600080fd5b5061012c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103a757600080fd5b506101cc6103b63660046118c0565b6107f5565b3480156103c757600080fd5b506101cc6103d63660046118e4565b610925565b3480156103e757600080fd5b5060035461012c9073ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff16331461048e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b610496610a49565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610519576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b61048e610b82565b6004818154811061053157600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff91821692501682565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b61049660006116b1565b60005473ffffffffffffffffffffffffffffffffffffffff163314610673576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b3073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106f5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071991906119c4565b73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610763573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078791906119c4565b73ffffffffffffffffffffffffffffffffffffffff1614156107d5576040517fbdebb83f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33ff5b60008183516020850134f59050803b6107f057600080fd5b505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b73ffffffffffffffffffffffffffffffffffffffff8116610919576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610485565b610922816116b1565b50565b60005473ffffffffffffffffffffffffffffffffffffffff1633146109a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b805160005b818110156107f05760048382815181106109c7576109c76119e1565b602090810291909101810151825460018082018555600094855293839020825160029092020180547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff938416178255929093015192840180549092169216919091179055016109ab565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ab6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ada91906119c4565b6040517ff2fde38b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301529192509082169063f2fde38b90602401600060405180830381600087803b158015610b6757600080fd5b505af1158015610b7b573d6000803e3d6000fd5b5050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1391906119c4565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca691906119c4565b60045490915060005b81811015610dd4576003546004805473ffffffffffffffffffffffffffffffffffffffff90921691637bccacee919084908110610cee57610cee6119e1565b906000526020600020906002020160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660048481548110610d3357610d336119e1565b600091825260209091206002909102015460405160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b158015610db157600080fd5b505af1158015610dc5573d6000803e3d6000fd5b50505050806001019050610caf565b506001546040517fe26b2f6300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529084169063e26b2f6390602401600060405180830381600087803b158015610e4257600080fd5b505af1158015610e56573d6000803e3d6000fd5b50506001546040517fcf33d95500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201527f0000000000000000000000000000000000000000000000000000000000000000909116925063cf33d9559150602401600060405180830381600087803b158015610ee857600080fd5b505af1158015610efc573d6000803e3d6000fd5b50505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f919190611a10565b905060005b818110156116ab576003546040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810183905260009173ffffffffffffffffffffffffffffffffffffffff1690635094cb4f90602401602060405180830381865afa15801561100e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103291906119c4565b6001546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80841660048301529293506000929091169063fdd5764590602401602060405180830381865afa1580156110a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110cc91906119c4565b905060008173ffffffffffffffffffffffffffffffffffffffff1663ce30bbdb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561111b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113f9190611a29565b9050600c81601081111561115557611155611a4a565b14156116225760008273ffffffffffffffffffffffffffffffffffffffff166320b2c1516040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111cc91906119c4565b905060008373ffffffffffffffffffffffffffffffffffffffff1663927188d96040518163ffffffff1660e01b8152600401602060405180830381865afa15801561121b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123f91906119c4565b905060008473ffffffffffffffffffffffffffffffffffffffff166399253ac06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561128e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b291906119c4565b6040517f9dcb511a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152919250908a169063e8a97a3e9083908390639dcb511a90602401602060405180830381865afa15801561132c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135091906119c4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156113bd57600080fd5b505af11580156113d1573d6000803e3d6000fd5b50506040517f9dcb511a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301528c16925063e8a97a3e915085908390639dcb511a90602401602060405180830381865afa15801561144b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061146f91906119c4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156114dc57600080fd5b505af11580156114f0573d6000803e3d6000fd5b50506003546001546040517f7832743800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301529283169450633e7c88d69350879290911690637832743890602401602060405180830381865afa158015611573573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115979190611a79565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015261ffff166024820152604401600060405180830381600087803b15801561160657600080fd5b505af115801561161a573d6000803e3d6000fd5b505050505050505b600d81601081111561163657611636611a4a565b141561169d578173ffffffffffffffffffffffffffffffffffffffff16639b51ecd36040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561168457600080fd5b505af1158015611698573d6000803e3d6000fd5b505050505b836001019350505050610f96565b50505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561173857600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156117915761179161173f565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156117de576117de61173f565b604052919050565b600080604083850312156117f957600080fd5b823567ffffffffffffffff8082111561181157600080fd5b818501915085601f83011261182557600080fd5b81356020828211156118395761183961173f565b611869817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011601611797565b9250818352878183860101111561187f57600080fd5b8181850182850137600091830181019190915290969401359450505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461092257600080fd5b6000602082840312156118d257600080fd5b81356118dd8161189e565b9392505050565b600060208083850312156118f757600080fd5b823567ffffffffffffffff8082111561190f57600080fd5b818501915085601f83011261192357600080fd5b8135818111156119355761193561173f565b611943848260051b01611797565b818152848101925060069190911b83018401908782111561196357600080fd5b928401925b818410156119b957604084890312156119815760008081fd5b61198961176e565b84356119948161189e565b8152848601356119a38161189e565b8187015283526040939093019291840191611968565b979650505050505050565b6000602082840312156119d657600080fd5b81516118dd8161189e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215611a2257600080fd5b5051919050565b600060208284031215611a3b57600080fd5b8151601181106118dd57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060208284031215611a8b57600080fd5b815161ffff811681146118dd57600080fdfea264697066735822122090f5e4310a8b66bfdd7fdfbe64bc5b98570e7c1a415ffb0ced3c857cf6c5b14064736f6c634300080a00336101606040526000805462ff00001916620c00001790553480156200002357600080fd5b50604051620058e8380380620058e8833981016040819052620000469162000537565b806001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000085573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ab919062000537565b6000805460ff191690556001600160a01b038116620000dd57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200011c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000142919062000537565b6001600160a01b03166080816001600160a01b031681525050506000816001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200019d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c3919062000537565b6001600160a01b03831661010081905260e081905260408051632495a59960e01b81529051929350600092632495a599916004808201926020929091908290030181865afa1580156200021a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000240919062000537565b6001600160a01b03811660c05290506200025a8162000472565b816001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000299573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002bf919062000537565b6001600160a01b0316610120816001600160a01b031681525050816001600160a01b03166377532ed96040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000318573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033e919062000537565b6001600160a01b0316610140816001600160a01b031681525050816001600160a01b031663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000397573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003bd919062000537565b6001600001600a6101000a8154816001600160a01b0302191690836001600160a01b03160217905550816001600160a01b0316639068a8686040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000425573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044b919062000537565b6001600160a01b031660a0525050600380546001600160a01b031916331790555062000588565b6001600160a01b03811660009081526006602052604090205415620004aa57604051632e5a5c7760e01b815260040160405180910390fd5b61010060055410620004cf57604051631cbbe18560e01b815260040160405180910390fd5b600580546001600160a01b0383166000818152600660209081526040808320600190951b948590558483526004909152812091909155825491929062000515836200055e565b91905055505050565b6001600160a01b03811681146200053457600080fd5b50565b6000602082840312156200054a57600080fd5b815162000557816200051e565b9392505050565b60006000198214156200058157634e487b7160e01b600052601160045260246000fd5b5060010190565b60805160a05160c05160e051610100516101205161014051615248620006a0600039600081816107e20152818161371001526137c501526000818161052f01526136780152600081816103d301528181610e5701528181610ebb015281816124ff0152818161265a01528181612aa101528181612b8c01528181612c4e01528181612d0d0152613b8f015260006105a401526000818161062701528181610d2201528181610db301528181610e0001528181610e3601528181610f3f0152818161203a01528181612b6b015281816130ee015281816134dc015281816135a90152613fe601526000818161081c01528181610fe101526124c20152600081816107a80152818161118401526122cb01526152486000f3fe608060405234801561001057600080fd5b50600436106103415760003560e01c8063830aa745116101bd578063a70bc542116100f9578063e75538c7116100a2578063f9aa028a1161007c578063f9aa028a1461089d578063fdd57645146108bd578063fe47cde7146108f3578063ff6875431461091357600080fd5b8063e75538c714610864578063e958b70414610877578063f67c5bd01461088a57600080fd5b8063db7ceb80116100d3578063db7ceb8014610817578063dc2b21c11461083e578063e1998cf91461085157600080fd5b8063a70bc542146107ca578063c5e10eef146107dd578063d48bfca71461080457600080fd5b806394cf073a116101665780639f5f86ae116101405780639f5f86ae146107745780639fd12b7714610787578063a366f49614610790578063a50cf2c8146107a357600080fd5b806394cf073a146106f557806395373018146107085780639af1d35a1461071b57600080fd5b80638991b2f1116101975780638991b2f1146106af5780638fe3f93f146106cf578063944ac59f146106e257600080fd5b8063830aa7451461066f5780638345f26e146106825780638456cb59146106a757600080fd5b8063458936f51161028c578063570a7af2116102355780636ce4074a1161020f5780636ce4074a146105ef5780636e98e5e41461060f5780636f307dc314610622578063783274381461064957600080fd5b8063570a7af21461059f5780635c975abb146105c6578063654a9eda146105dc57600080fd5b80635063524a116102665780635063524a1461055157806351e3f1601461058457806354fd4d501461059757600080fd5b8063458936f51461050e57806346fb371d146105175780634f0e0ef31461052a57600080fd5b80632630c12f116102ee5780633192195c116102c85780633192195c146104be5780633e8297ca146104e65780633f4ba83a1461050657600080fd5b80632630c12f1461045857806329df0b93146104845780632f7a18811461049757600080fd5b806316f0115b1161031f57806316f0115b146103ce578063172c48c7146103f55780632362a2d81461043757600080fd5b8063055ee9b5146103465780630d8f9cee146103a657806311ca4fc2146103bb575b600080fd5b61037c610354366004614a87565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6103b96103b4366004614aa4565b610949565b005b6103b96103c9366004614aa4565b610a76565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b610408610403366004614add565b610b4e565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835261ffff90911660208301520161039d565b61044a610445366004614b13565b610b66565b60405190815260200161039d565b6001546a0100000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1661037c565b6103b9610492366004614a87565b6110be565b60005461037c906301000000900473ffffffffffffffffffffffffffffffffffffffff1681565b6104d16104cc366004614a87565b611122565b6040805192835260208301919091520161039d565b61044a6104f4366004614a87565b60096020526000908152604090205481565b6103b9611156565b61044a60055481565b6103b9610525366004614b95565b611244565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b61056461055f366004614be6565b61149b565b60408051948552602085019390935291830152606082015260800161039d565b6103b9610592366004614aa4565b611602565b61044a600281565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b60005460ff16604051901515815260200161039d565b6103b96105ea366004614c21565b611703565b6106026105fd366004614d40565b611bbb565b60405161039d9190614e5b565b6103b961061d366004614aa4565b611e8e565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b61065c610657366004614a87565b612036565b60405161ffff909116815260200161039d565b6103b961067d366004614b95565b61210f565b6000546106959062010000900460ff1681565b60405160ff909116815260200161039d565b6103b961229d565b61044a6106bd366004614a87565b60086020526000908152604090205481565b61037c6106dd366004614e6e565b612389565b6103b96106f0366004614ea5565b612718565b61044a610703366004614f0a565b612845565b6103b9610716366004614a87565b612e5a565b6001546040805161ffff808416825262010000840481166020830152640100000000840481169282019290925266010000000000008304821660608201526801000000000000000090920416608082015260a00161039d565b6103b9610782366004614a87565b612f85565b61044a60075481565b6103b961079e366004614add565b613045565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b96107d8366004614f4c565b61309b565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b9610812366004614a87565b613221565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b961084c366004614f81565b61327b565b6103b961085f366004614aa4565b613306565b610408610872366004614add565b6134c9565b61037c610885366004614a87565b613541565b61044a610898366004614a87565b6135a5565b60035461037c9073ffffffffffffffffffffffffffffffffffffffff1681565b61037c6108cb366004614a87565b600b6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b600c5461037c9073ffffffffffffffffffffffffffffffffffffffff1681565b61037c610921366004614a87565b600a6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561099b57506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b156109d2576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff1615610a14576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055610a4a828261362e565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b60035473ffffffffffffffffffffffffffffffffffffffff163314610ac7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805473ffffffffffffffffffffffffffffffffffffffff9384166301000000027fffffffffffffffffff0000000000000000000000000000000000000000ffffff90911617905560018054919092166a0100000000000000000000027fffff0000000000000000000000000000000000000000ffffffffffffffffffff909116179055565b600080610b5d6001841b6134c9565b91509150915091565b6000805460ff1615610bd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064015b60405180910390fd5b600054610100900460ff1615610c1b576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff163314610ca0576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610cab89613541565b90506000806000806000610cbe86611122565b9094509050610ccf8c8e868461149b565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152939b5093985090955093506000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015610d6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8f9190614fa4565b9050610d9b8887614fec565b610da6906001614fec565b811115610de657610de1877f00000000000000000000000000000000000000000000000000000000000000008d60018c8b870303038d61366e565b610e30565b610e3073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168d8960018a8d01869003016138c0565b610e7e877f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000089600061366e565b6040517fca9505e40000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604481018490527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ca9505e490606401600060405180830381600087803b158015610f1457600080fd5b505af1158015610f28573d6000803e3d6000fd5b50505050505050506001841115610f6757610f67837f00000000000000000000000000000000000000000000000000000000000000008d87600061366e565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260086020526040902054861916610f9c8489888461395b565b6040517f89b77b3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f000000000000000000000000000000000000000000000000000000000000000016906389b77b3e90602401600060405180830381600087803b15801561102557600080fd5b505af1158015611039573d6000803e3d6000fd5b50505073ffffffffffffffffffffffffffffffffffffffff909c16600090815260026020526040812080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550929a9950505050505050505050565b6000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314611116576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61111f81613a35565b50565b60008060008061113185613aa6565b91955092509050816111438286615004565b61114d9190615041565b92505050915091565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156111e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611204919061507c565b61123a576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611242613c24565b565b60005460ff16156112b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156112f3576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100178155338152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff9081169084161480159061137457506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b80156113985750600c5473ffffffffffffffffffffffffffffffffffffffff163314155b806113b7575073ffffffffffffffffffffffffffffffffffffffff8316155b156113ee576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113f7826135a5565b61142d576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061143885613541565b9050611448838583856000613d05565b61146c5761145b83858360006001613d05565b5061146a838583856001613d05565b505b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b6001546000908190819081906127109061ffff166114b98888615099565b6114c39190615004565b6114cd9190615041565b6114d79086614fec565b935060018760028111156114ed576114ed6150b0565b1415611587576001546000906127109061151390640100000000900461ffff168b615004565b61151d9190615041565b6001549091506127109061153b9062010000900461ffff168b615004565b6115459190615041565b61154f9086614fec565b94508481111561156657600185820303935061156a565b8094505b85811061157b578585039250611581565b84860391505b506115f7565b600287600281111561159b5761159b6150b0565b14156115f157600154600090612710906115c59068010000000000000000900461ffff168b615004565b6115cf9190615041565b6001549091506127109061153b906601000000000000900461ffff168b615004565b84840391505b945094509450949050565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561165457506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b1561168b576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff16156116cd576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055610a4a8282613ea6565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561175557506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b1561178c576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff16156117ce576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790556118048584613ea6565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152600091908616906370a0823190602401602060405180830381865afa158015611874573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118989190614fa4565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529192506000918616906370a0823190602401602060405180830381865afa15801561190a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192e9190614fa4565b60015490915060009081906a0100000000000000000000900473ffffffffffffffffffffffffffffffffffffffff16635cecbd0e61196c8689615099565b8a6119778988615099565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152600481019390935273ffffffffffffffffffffffffffffffffffffffff918216602484015260448301528a1660648201526084016040805180830381865afa1580156119f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1791906150df565b9150915060018411611a2d57611a2d898961362e565b611a3687612036565b611a449061ffff1682615004565b9050611a4f88612036565b611a5d9061ffff1683615004565b9150818110611a7857611a6f89613a35565b5050505061146c565b73ffffffffffffffffffffffffffffffffffffffff891660009081526009602052604081205483611ab56b033b2e3c9fd0803ce800000085615004565b611abf9190615041565b611ad5906b033b2e3c9fd0803ce8000000615099565b611adf9190614fec565b60015490915061271090611b0a906b033b2e3c9fd0803ce80000009062010000900461ffff16615004565b611b149190615041565b8111611b555773ffffffffffffffffffffffffffffffffffffffff8a166000908152600960205260409020819055611b4b8a613a35565b505050505061146c565b611b5e8a613f56565b50505073ffffffffffffffffffffffffffffffffffffffff871660009081526009602052604090206001905550505050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b6060611bc960005460ff1690565b15611c30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff1615611c72576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100178155338152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff908116908416141580611ce7575073ffffffffffffffffffffffffffffffffffffffff8316155b15611d3d57600c5473ffffffffffffffffffffffffffffffffffffffff163314611d3d576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611d4885613541565b90508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167faed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab0360405160405180910390a36040517f1cff79cd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821690631cff79cd90611df89087908790600401615103565b6000604051808303816000875af1158015611e17573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611e5d9190810190615132565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905595945050505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314611edf576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821615611f4f5773ffffffffffffffffffffffffffffffffffffffff8281166000908152600a6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169183169190911790555b73ffffffffffffffffffffffffffffffffffffffff811615611fbf5773ffffffffffffffffffffffffffffffffffffffff8181166000908152600b6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169184169190911790555b73ffffffffffffffffffffffffffffffffffffffff811673cccccccccccccccccccccccccccccccccccccccc141561203257600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790555b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120ba5750506001547e01000000000000000000000000000000000000000000000000000000000000900461ffff1690565b60006120c5836135a5565b9050806120fe576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612107816134c9565b949350505050565b60005460ff161561217c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156121be576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff163314612243576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61224d8383613ea6565b61226f73ffffffffffffffffffffffffffffffffffffffff83168585846138c0565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555050565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015612327573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061234b919061507c565b612381576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112426142d4565b6000805460ff16156123f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff1615612439576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff1633146124be576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166321d18456857f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612568573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061258c9190614fa4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168152600481019290925260248201526044016020604051808303816000875af11580156125e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061260b91906151a0565b6040517fbf28068b0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff80831660248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063bf28068b90604401600060405180830381600087803b1580156126a057600080fd5b505af11580156126b4573d6000803e3d6000fd5b505050506126c28382614394565b73ffffffffffffffffffffffffffffffffffffffff811660009081526008602052604081206001905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690559392505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314612769576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805461ffff92831668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9484166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff96851664010000000002969096167fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff97851662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000090931694909816939093171794909416949094179190911716919091179055565b6000805460ff16156128b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156128f5576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff16331461297a576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080600061298887613aa6565b925092509250846129a25761299d8684615099565b6129ac565b6129ac8684614fec565b935060008515612b045769021e19e0c9bab24000008510612a15576129d583603689901c615004565b6129e3603686901c84615004565b6129ed9190614fec565b603686901c6129fc8585615004565b612a069190615004565b612a109190615041565b612a52565b612a1f8388615004565b612a298584615004565b612a339190614fec565b85612a3e8585615004565b612a489190615004565b612a529190615041565b6040517fbf28068b0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff8a811660248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063bf28068b90604401600060405180830381600087803b158015612ae757600080fd5b505af1158015612afb573d6000803e3d6000fd5b50505050612d9f565b60008484612b128583615004565b612b1c9190615041565b612b269190615099565b60015490915060009061271090612b419061ffff1684615004565b612b4b9190615041565b905073ffffffffffffffffffffffffffffffffffffffff8a1663d1660f997f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000084612bb6878f614fec565b612bc09190614fec565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b158015612c3457600080fd5b505af1158015612c48573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ca9505e4838b612c949190614fec565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815260048101919091526024810184905260006044820152606401600060405180830381600087803b158015612cf357600080fd5b505af1158015612d07573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d9a9190614fa4565b925050505b6040517f16128211000000000000000000000000000000000000000000000000000000008152600481018690526024810182905273ffffffffffffffffffffffffffffffffffffffff891690631612821190604401600060405180830381600087803b158015612e0e57600080fd5b505af1158015612e22573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055509498975050505050505050565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff16158015612eac57506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b15612ee3576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff1615612f25576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055612f5a81613f56565b50600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b60035473ffffffffffffffffffffffffffffffffffffffff163314612fd6576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517ff62005acebe9b616aefb5f248b48f5e89f28437b27d1eebc0b2d911209f297af90600090a250565b60035473ffffffffffffffffffffffffffffffffffffffff163314613096576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600755565b60035473ffffffffffffffffffffffffffffffffffffffff1633146130ec576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613193576001805461ffff83167e01000000000000000000000000000000000000000000000000000000000000027dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790555050565b600061319e836135a5565b9050806131d7576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000908152600460205260409020805473ffffffffffffffffffffffffffffffffffffffff1675ffff000000000000000000000000000000000000000060a084901b161790555050565b60035473ffffffffffffffffffffffffffffffffffffffff163314613272576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61111f81614467565b60035473ffffffffffffffffffffffffffffffffffffffff1633146132cc576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805460ff90921662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff909216919091179055565b60005460ff1615613373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156133b5576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff16331461343a576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061344583613541565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260026020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055905061349c8282614394565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b60008082600114156135275750506001547f0000000000000000000000000000000000000000000000000000000000000000927e0100000000000000000000000000000000000000000000000000000000000090910461ffff169150565b50506000908152600460205260409020549060a082901c90565b73ffffffffffffffffffffffffffffffffffffffff80821660009081526002602052604090205416806135a0576040517fb5ba4c4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146136255773ffffffffffffffffffffffffffffffffffffffff8216600090815260066020526040902054613628565b60015b92915050565b6000613639826135a5565b73ffffffffffffffffffffffffffffffffffffffff909316600090815260086020526040902080549319939093169092555050565b8080156136c657507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b15613828576040517fd1660f9900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301526044820184905286169063d1660f9990606401600060405180830381600087803b15801561376357600080fd5b505af1158015613777573d6000803e3d6000fd5b50506040517f5869dba800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690527f0000000000000000000000000000000000000000000000000000000000000000169250635869dba89150604401600060405180830381600087803b15801561380b57600080fd5b505af115801561381f573d6000803e3d6000fd5b505050506138b9565b6040517fd1660f9900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301526044820184905286169063d1660f9990606401600060405180830381600087803b1580156138a057600080fd5b505af11580156138b4573d6000803e3d6000fd5b505050505b5050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261395590859061455b565b50505050565b60025b8181116138b95781811615613a2d576000613978826134c9565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529192506000918316906370a0823190602401602060405180830381865afa1580156139eb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a0f9190614fa4565b90506002811115613a2a57613a2a878388600185038961366e565b50505b60011b61395e565b73ffffffffffffffffffffffffffffffffffffffff811660009081526008602052604081205490613a6582614667565b60005490915062010000900460ff16811115613aa1576000613a86836146a7565b613a91906001614fec565b905061395584848460008561470b565b505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff16631afbb7a46040518163ffffffff1660e01b8152600401602060405180830381865afa158015613af6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b1a9190614fa4565b92508373ffffffffffffffffffffffffffffffffffffffff166317d11a156040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b8b9190614fa4565b91507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bf8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c1c9190614fa4565b929491935050565b60005460ff16613c90576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610bd0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6040805173ffffffffffffffffffffffffffffffffffffffff8681166024830152604480830186905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b30000000000000000000000000000000000000000000000000000000017905291517f1cff79cd000000000000000000000000000000000000000000000000000000008152600092861691631cff79cd91613dc6918a91600401615103565b6000604051808303816000875af1925050508015613e2457506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052613e219190810190615132565b60015b613e2d57613e61565b80511580613e50575080806020019051810190613e4a919061507c565b15156001145b15613e5f576001915050613e9d565b505b8115613e99576040517f76e3e29c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060005b95945050505050565b6000613eb1826135a5565b9050801580613ec35750600754811615155b15613efa576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83166000908152600860205260409020548116613aa15773ffffffffffffffffffffffffffffffffffffffff83166000908152600860205260409020805482179055505050565b60015473ffffffffffffffffffffffffffffffffffffffff8281166000908152600860205260408120546a010000000000000000000090930490911691908080613f9f86611122565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526127108202600482015273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350908716915063f9a6503090604401602060405180830381865afa15801561403a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061405e9190614fa4565b9250614069846146a7565b6001019150506000806000805b848110156142a157801561408f5760018186031b614092565b60015b935086841615614299576000806140a8866134c9565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8e811660048301529294509092506000918416906370a0823190602401602060405180830381865afa15801561411d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141419190614fa4565b9050600181111561428c576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff848116602483015261ffff841691908d169063f9a6503090604401602060405180830381865afa1580156141c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141ea9190614fa4565b6141f49190615004565b6141fe9087614fec565b95508886106142875760006142128b614667565b60005490915062010000900460ff16811115614249576142448d8c836001891561423e57898e0361470b565b8d61470b565b614278565b85156142785773ffffffffffffffffffffffffffffffffffffffff8d1660009081526008602052604090208b90555b50505050505050505050505050565b614295565b98861898600194505b5050505b600101614076565b506040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005460ff1615614341576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613cdb3390565b73ffffffffffffffffffffffffffffffffffffffff821615806143dd575073ffffffffffffffffffffffffffffffffffffffff8281166000908152600260205260409020541615155b15614414576040517f9e59609e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff918216600090815260026020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001691909216179055565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260066020526040902054156144c4576040517f2e5a5c7700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61010060055410614501576040517f1cbbe18500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005805473ffffffffffffffffffffffffffffffffffffffff83166000818152600660209081526040808320600190951b9485905584835260049091528120919091558254919290614552836151bd565b91905055505050565b60006145bd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166148799092919063ffffffff16565b805190915015613aa157808060200190518101906145db919061507c565b613aa1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610bd0565b60008060005b6101008110156146a0576001811b91508382161561468c578260010192505b838210614698576146a0565b60010161466d565b5050919050565b600081600114156146ba57506000919050565b61010060015b60016146cc8284614fec565b901c92506001831b848116158015906146e75750600185851c145b156146f257506146a0565b84811061470157839250614705565b8391505b506146c0565b815b81811015614846576001811b8581161561483d57600061472c826134c9565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529192506000918316906370a0823190602401602060405180830381865afa15801561479f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147c39190614fa4565b90506001811161483a57600054978318977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9097019660ff6201000090910416871161483a5750505073ffffffffffffffffffffffffffffffffffffffff86166000908152600860205260409020859055506138b9565b50505b5060010161470d565b506040517f53275fcb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606148888484600085614892565b90505b9392505050565b606082471015614924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610bd0565b843b61498c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610bd0565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516149b591906151f6565b60006040518083038185875af1925050503d80600081146149f2576040519150601f19603f3d011682016040523d82523d6000602084013e6149f7565b606091505b5091509150614a07828286614a12565b979650505050505050565b60608315614a2157508161488b565b825115614a315782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd09190614e5b565b73ffffffffffffffffffffffffffffffffffffffff8116811461111f57600080fd5b600060208284031215614a9957600080fd5b813561488b81614a65565b60008060408385031215614ab757600080fd5b8235614ac281614a65565b91506020830135614ad281614a65565b809150509250929050565b600060208284031215614aef57600080fd5b5035919050565b8035600381106135a057600080fd5b801515811461111f57600080fd5b600080600080600080600060e0888a031215614b2e57600080fd5b8735614b3981614a65565b9650614b4760208901614af6565b9550604088013594506060880135614b5e81614a65565b93506080880135614b6e81614a65565b925060a0880135915060c0880135614b8581614b05565b8091505092959891949750929550565b60008060008060808587031215614bab57600080fd5b8435614bb681614a65565b93506020850135614bc681614a65565b92506040850135614bd681614a65565b9396929550929360600135925050565b60008060008060808587031215614bfc57600080fd5b84359350614c0c60208601614af6565b93969395505050506040820135916060013590565b600080600080600060a08688031215614c3957600080fd5b8535614c4481614a65565b94506020860135614c5481614a65565b93506040860135614c6481614a65565b94979396509394606081013594506080013592915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614cf257614cf2614c7c565b604052919050565b600067ffffffffffffffff821115614d1457614d14614c7c565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600080600060608486031215614d5557600080fd5b8335614d6081614a65565b92506020840135614d7081614a65565b9150604084013567ffffffffffffffff811115614d8c57600080fd5b8401601f81018613614d9d57600080fd5b8035614db0614dab82614cfa565b614cab565b818152876020838501011115614dc557600080fd5b816020840160208301376000602083830101528093505050509250925092565b60005b83811015614e00578181015183820152602001614de8565b838111156139555750506000910152565b60008151808452614e29816020860160208601614de5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061488b6020830184614e11565b60008060408385031215614e8157600080fd5b823591506020830135614ad281614a65565b803561ffff811681146135a057600080fd5b600080600080600060a08688031215614ebd57600080fd5b614ec686614e93565b9450614ed460208701614e93565b9350614ee260408701614e93565b9250614ef060608701614e93565b9150614efe60808701614e93565b90509295509295909350565b600080600060608486031215614f1f57600080fd5b8335614f2a81614a65565b9250602084013591506040840135614f4181614b05565b809150509250925092565b60008060408385031215614f5f57600080fd5b8235614f6a81614a65565b9150614f7860208401614e93565b90509250929050565b600060208284031215614f9357600080fd5b813560ff8116811461488b57600080fd5b600060208284031215614fb657600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115614fff57614fff614fbd565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561503c5761503c614fbd565b500290565b600082615077577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60006020828403121561508e57600080fd5b815161488b81614b05565b6000828210156150ab576150ab614fbd565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600080604083850312156150f257600080fd5b505080516020909101519092909150565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015260006148886040830184614e11565b60006020828403121561514457600080fd5b815167ffffffffffffffff81111561515b57600080fd5b8201601f8101841361516c57600080fd5b805161517a614dab82614cfa565b81815285602083850101111561518f57600080fd5b613e9d826020830160208601614de5565b6000602082840312156151b257600080fd5b815161488b81614a65565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156151ef576151ef614fbd565b5060010190565b60008251615208818460208701614de5565b919091019291505056fea26469706673582212209d39bb9d4972b515acdad1ffb757acd15e103ca6ee762f88a6382b36243734ba64736f6c634300080a00336101406040523480156200001257600080fd5b5060405162005e9738038062005e97833981016040819052620000359162000198565b60016000556001600160a01b0383166200006257604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038316608081905260408051636f307dc360e01b81529051636f307dc3916004808201926020929091908290030181865afa158015620000ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d39190620001ea565b6001600160a01b031660a0816001600160a01b031681525050826001600160a01b0316634f0e0ef36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200012b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001519190620001ea565b6001600160a01b0390811660c0529190911660e0819052151561010052151561012052506200020f565b80516001600160a01b03811681146200019357600080fd5b919050565b600080600060608486031215620001ae57600080fd5b620001b9846200017b565b9250620001c9602085016200017b565b915060408401518015158114620001df57600080fd5b809150509250925092565b600060208284031215620001fd57600080fd5b62000208826200017b565b9392505050565b60805160a05160c05160e0516101005161012051615a86620004116000396000818161061101528181612fb5015261481f01526000818161031701528181610dde015281816144f901526146e5015260008181610557015281816146a901526147a901526000818161034b0152818161387d015261392d01526000818161047301528181611bfe0152818161274f0152818161280d0152818161366a01526137dd015260008181610665015281816109d801528181610b0301528181610bd501528181610cdd01528181610e6501528181610fe30152818161114e0152818161120e0152818161132e015281816114510152818161162b01528181611708015281816117e0015281816119e501528181611b1201528181611d9501528181611ed5015281816120040152818161216801528181612290015281816123c601528181612568015281816126390152818161266f0152818161293d01528181612a2101528181612a8a01528181612bde01528181612d2601528181612e6801528181612ec2015281816130a10152818161311b015281816131b401528181613341015281816134c10152818161358a0152818161372f01528181613a1a01528181613b2e01528181613dbb015281816142200152818161432801528181614492015281816148e7015281816149e801528181614aae0152614d8f0152615a866000f3fe6080604052600436106102695760003560e01c8063860aefcf11610153578063c7de38a6116100cb578063dfd594651161007f578063eb9606df11610064578063eb9606df1461081e578063f9eaee0d1461083e578063ffd9b9071461085e57600080fd5b8063dfd59465146107de578063e1f21c67146107fe57600080fd5b8063cff0ab96116100b0578063cff0ab96146106ef578063d9ccbec114610783578063dcf65482146107be57600080fd5b8063c7de38a6146106a7578063caa5c23f146106dc57600080fd5b80639c55a05411610122578063b55bb84b11610107578063b55bb84b14610633578063c12c21c014610653578063c690908a1461068757600080fd5b80639c55a054146105df578063b1836d32146105ff57600080fd5b8063860aefcf146104db5780639408b63f146105455780639b67ab30146105795780639be0536a146105bd57600080fd5b80635d91a0e0116101e65780636d19b486116101b55780637071b7c51161019a5780637071b7c51461049557806379c0ef91146104a857806382871ace146104c857600080fd5b80636d19b486146104415780636f307dc31461046157600080fd5b80635d91a0e0146103e85780635f73fbec146103fb578063601d66f61461040e5780636c8f225d1461042e57600080fd5b80633d9287fa1161023d5780635019e20a116102225780635019e20a1461039257806354fd4d50146103b257806359781034146103d557600080fd5b80633d9287fa146103055780634f0e0ef31461033957600080fd5b8062842b571461026e578063256ac915146102905780632a7ba1f7146102c55780632b7c7b11146102e5575b600080fd5b34801561027a57600080fd5b5061028e6102893660046151bf565b61087e565b005b34801561029c57600080fd5b506102b06102ab3660046151f8565b61098e565b60405190151581526020015b60405180910390f35b3480156102d157600080fd5b5061028e6102e0366004615215565b610a61565b3480156102f157600080fd5b5061028e610300366004615215565b610c3b565b34801561031157600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561034557600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102bc565b34801561039e57600080fd5b5061028e6103ad3660046151f8565b610d6a565b3480156103be57600080fd5b506103c7600281565b6040519081526020016102bc565b61028e6103e336600461522e565b61108c565b61028e6103f63660046152bb565b611275565b61028e610409366004615340565b611589565b34801561041a57600080fd5b5061028e6104293660046153d8565b6117de565b61028e61043c36600461541b565b611900565b34801561044d57600080fd5b506102b061045c3660046151f8565b611c31565b34801561046d57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b61028e6104a336600461546e565b611c60565b3480156104b457600080fd5b5061036d6104c3366004615215565b611f3e565b61028e6104d63660046152bb565b611f4b565b3480156104e757600080fd5b5060025461051c906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041682565b604080516fffffffffffffffffffffffffffffffff9384168152929091166020830152016102bc565b34801561055157600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561058557600080fd5b506004546040805167ffffffffffffffff608084901c1681526fffffffffffffffffffffffffffffffff9092166020830152016102bc565b3480156105c957600080fd5b506105d261227d565b6040516102bc91906154e2565b3480156105eb57600080fd5b5061028e6105fa36600461553c565b61228e565b34801561060b57600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561063f57600080fd5b5061028e61064e3660046151f8565b6123c4565b34801561065f57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561069357600080fd5b5061028e6106a23660046151f8565b6124c6565b3480156106b357600080fd5b506106c76106c23660046151f8565b612668565b604080519283526020830191909152016102bc565b61028e6106ea366004615557565b61289b565b3480156106fb57600080fd5b5060015461074e906fffffffffffffffffffffffffffffffff811690700100000000000000000000000000000000810460ff169071010000000000000000000000000000000000900464ffffffffff1683565b604080516fffffffffffffffffffffffffffffffff9094168452911515602084015264ffffffffff16908201526060016102bc565b34801561078f57600080fd5b506102b061079e366004615599565b600360209081526000928352604080842090915290825290205460ff1681565b3480156107ca57600080fd5b5061028e6107d93660046151f8565b612a88565b3480156107ea57600080fd5b506103c76107f93660046151f8565b612b86565b34801561080a57600080fd5b5061028e61081936600461522e565b612c6d565b34801561082a57600080fd5b5061028e6108393660046155c7565b612ec0565b34801561084a57600080fd5b506102b06108593660046151f8565b613057565b34801561086a57600080fd5b5061028e6108793660046155ee565b6131b2565b600260005414156108f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b6002600090815573ffffffffffffffffffffffffffffffffffffffff8316808252600360209081526040808420338086529083529381902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081527f9b3258bc4904fd6426b99843e206c6c7cdb1fd0f040121c25b71dafbb3851ee0910160405180910390a350506001600055565b6040517f055ee9b500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063055ee9b590602401602060405180830381865afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a43919061560b565b73ffffffffffffffffffffffffffffffffffffffff16141592915050565b60026000541415610ace576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610b5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b83919061560b565b9050610b903382846132eb565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906395373018906024015b600060405180830381600087803b158015610c1a57600080fd5b505af1158015610c2e573d6000803e3d6000fd5b5050600160005550505050565b60026000541415610ca8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610d39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5d919061560b565b9050610b90338284613411565b60026000541415610dd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000557f000000000000000000000000000000000000000000000000000000000000000015610e34576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610ec1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee5919061560b565b33600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915290205490915060ff16610f52576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f5d82613583565b5090508015610f98576040517ff713841e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b15801561102757600080fd5b505af115801561103b573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692503391507f93c70cc9715bef0d83edf2095f3595402279d274f402a73ffc17f1bcb19d863d90600090a35050600160005550565b600260005414156110f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611106613875565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063e958b70490602401602060405180830381865afa158015611197573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bb919061560b565b90506111c9848285856139b7565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401600060405180830381600087803b15801561125257600080fd5b505af1158015611266573d6000803e3d6000fd5b50506001600055505050505050565b600260005414156112e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611375573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611399919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166113e8576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806113f483613583565b915091508161142f576040517f1fdd676f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611437613875565b831561144d5761144d85858b8660016000613ae3565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632362a2d88b600185338e8e8e6040518863ffffffff1660e01b81526004016114b59796959493929190615663565b6020604051808303816000875af11580156114d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f891906156bf565b90508873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f7dfecd8419723a9d3954585a30c2a270165d70aafa146c11c1e1b88ae14390648460405161157091815260200190565b60405180910390a4505060016000555050505050505050565b600260005414156115f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ab919061560b565b90506116b5613875565b81156116cb576116cb8383338460016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d89061174a903390600090819083908d908d908d90600401615663565b6020604051808303816000875af1158015611769573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178d91906156bf565b5060405173ffffffffffffffffffffffffffffffffffffffff87169033907f460ad03b1cf79b1d64d3aefa28475f110ab66e84649c52bb41ed796b9b39198190600090a35050600160005550505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611849573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118d1576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff90811670010000000000000000000000000000000002911617600255565b6002600054141561196d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000908155606461198461ffff851687615707565b61198e9190615744565b9050611999816144f7565b6119a2816145e8565b6119ab84614668565b6119b3613875565b6040517f172c48c7000000000000000000000000000000000000000000000000000000008152600060048201819052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a64919061577f565b61ffff169150611a789050816127106157ae565b611a829083615707565b611a8c8288615707565b11611ac3576040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff86811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611b5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b81919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638587604051611bef92919091825261ffff16602082015260400190565b60405180910390a3611c2386827f00000000000000000000000000000000000000000000000000000000000000008a6139b7565b505060016000555050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526006602052604081205415155b92915050565b60026000541415611ccd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611cdb856144f7565b611ce484614668565b611ced856145e8565b600154700100000000000000000000000000000000900460ff1615611d3e576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d46613875565b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff85811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611de0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e04919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638885604051611e7292919091825261ffff16602082015260400190565b60405180910390a38215611e9057611e908484878460006001613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015611f1957600080fd5b505af1158015611f2d573d6000803e3d6000fd5b505060016000555050505050505050565b6000611c5a60058361480f565b60026000541415611fb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa15801561204b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206f919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166120be576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120c661481b565b6120fc576040517f7e52ccb400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061210782612668565b509050612112613875565b82156121285761212884848a8560016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d8906121aa908c90600290879033908f908f908f90600401615663565b6020604051808303816000875af11580156121c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ed91906156bf565b90508773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167ffada13ff2d5e1a1d9da37ad4a4130893b34e3c69c32b17f87ec31fd661b867078460405161226591815260200190565b60405180910390a45050600160005550505050505050565b6060612289600561486b565b905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612381576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561242f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612453919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146124b7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614878565b5050565b60026000541415612533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156125c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e8919061560b565b90506125f4818361489a565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401610c00565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126fc919061560b565b905060008061270b8387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156127a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127c991906156bf565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015291965061271091851690637afb010490604401602060405180830381865afa158015612863573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061288791906156bf565b6128919190615744565b9350505050915091565b60026000541415612908576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129bd919061560b565b90506129c7613875565b8115612a7e576129dc83833384600080613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015612a6557600080fd5b505af1158015612a79573d6000803e3d6000fd5b505050505b5050600160005550565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612af3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b17919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b7b576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614c92565b600080612b9283612668565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152919350600092507f000000000000000000000000000000000000000000000000000000000000000090911690633192195c906024016040805180830381865afa158015612c26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4a91906157c5565b9150819050612c5b61271084615707565b612c659190615744565b949350505050565b60026000541415612cda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063fdd5764590602401602060405180830381865afa158015612d6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d91919061560b565b73ffffffffffffffffffffffffffffffffffffffff161480612dd7575073ffffffffffffffffffffffffffffffffffffffff831660009081526006602052604090205415155b15612e0e576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612eac57600080fd5b505af1158015611c23573d6000803e3d6000fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f4f919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612fb3576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000061300a576040517f50dd11fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805464ffffffffff90921671010000000000000000000000000000000000027fffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffffff909216919091179055565b6040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063f67c5bd090602401602060405180830381865afa1580156130e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061310c91906156bf565b905080158015906131ab5750807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015613184573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a891906156bf565b16155b9392505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561321d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613241919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146132a5576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018054911515700100000000000000000000000000000000027fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff909216919091179055565b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600060448301819052917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561338c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133b091906156bf565b90506133bb816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f98274bf834d179ee08dc0604071b0dc90b54731bd5f725a5a96a39a86bce025a8360405161340391815260200190565b60405180910390a250505050565b61341a816144f7565b600154700100000000000000000000000000000000900460ff161561346b576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600160448301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561350c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061353091906156bf565b905061353b816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f9cac51154cc0d835e2f9c9d1f59a9344588cee107f4203bf58a8c797e3a58c458360405161340391815260200190565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613617919061560b565b90506000806136268387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156136c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136e491906156bf565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529195506000917f00000000000000000000000000000000000000000000000000000000000000001690633192195c906024016040805180830381865afa158015613775573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061379991906157c5565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350600092506127109187169063f9a6503090604401602060405180830381865afa158015613837573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061385b91906156bf565b6138659190615707565b9092109794965093945050505050565b34156139b5577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156138e357600080fd5b505af11580156138f7573d6000803e3d6000fd5b50506040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201523460248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16935063a9059cbb925060440190506020604051808303816000875af115801561398f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139b391906157e9565b505b565b6139c084614cb4565b6040517f830aa74500000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f0000000000000000000000000000000000000000000000000000000000000000169063830aa74590608401600060405180830381600087803b158015613a5e57600080fd5b505af1158015613a72573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fa32435755c235de2976ed44a75a2f85cb01faf0c894f639fe0c32bb9455fea8f83604051613ad591815260200190565b60405180910390a350505050565b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301523060248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b158015613b7257600080fd5b505af1158015613b86573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff871692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a28460005b8181101561441d5736888883818110613bea57613bea615806565b9050602002810190613bfc9190615835565b90506004613c0d6020830183615873565b90501015613c47576040517fe2b0e50600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b30613c5560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16141561421c578415613ca9576040517f5fb9107f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613cb86020830183615873565b613cc1916158d8565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167f59781034000000000000000000000000000000000000000000000000000000001415613e3c5760008080613d1e6020860186615873565b613d2c916004908290615920565b810190613d39919061522e565b925092509250613e34838c73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614613e2b576040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015613e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e26919061560b565b613e2d565b8b5b84846139b7565b505050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2b7c7b11000000000000000000000000000000000000000000000000000000001415613ec757600194506000613e996020840184615873565b613ea7916004908290615920565b810190613eb49190615215565b9050613ec1898983613411565b50614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2a7ba1f7000000000000000000000000000000000000000000000000000000001415613f80578415613f49576040517fc0b0caa800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613f586020840184615873565b613f66916004908290615920565b810190613f739190615215565b9050613ec18989836132eb565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f233a8caa0000000000000000000000000000000000000000000000000000000014156140e457600080613fda6020850185615873565b613fe8916004908290615920565b810190613ff5919061594a565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c8116600483015292945090925082918416906370a0823190602401602060405180830381865afa158015614069573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061408d91906156bf565b10156140dd576040517fa5ac537300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016108e7565b5050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fc690908a00000000000000000000000000000000000000000000000000000000141561416457600061413d6020840184615873565b61414b916004908290615920565b81019061415891906151f8565b9050613ec1888261489a565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f23e27a640000000000000000000000000000000000000000000000000000000014156141e45760006141bd6020840184615873565b6141cb916004908290615920565b8101906141d891906151f8565b9050613ec18882614d42565b6040517f1e9e7e7a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50614414565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff68754361426760208501856151f8565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156142d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142f4919061560b565b73ffffffffffffffffffffffffffffffffffffffff16148061436d575073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001661435560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16145b156143a4576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6144126143b46020830183615873565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506143f69250505060208401846151f8565b73ffffffffffffffffffffffffffffffffffffffff1690614e39565b505b50600101613bcf565b506040517f60c8e8938c9a0c0d88a98d6f1c562ce68077e12bf3edb8047378f2f736cb45b490600090a16040517fe1998cf900000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff86811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b1580156144d657600080fd5b505af11580156144ea573d6000803e3d6000fd5b5050505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006139b3576001546fffffffffffffffffffffffffffffffff9081169081146124c257600454608081901c906fffffffffffffffffffffffffffffffff16600067ffffffffffffffff8316431461456e578461458a565b61458a6fffffffffffffffffffffffffffffffff831686615976565b9050838111156145c6576040517f675f1a5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff81164360801b176004555050505050565b6002546fffffffffffffffffffffffffffffffff16811080614631575060025470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681115b156139b3576040517fce16799400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61467061481b565b156146a7576040517f63fc31c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1615614806577f0000000000000000000000000000000000000000000000000000000000000000801561472657503373ffffffffffffffffffffffffffffffffffffffff821614155b1561475d576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600160248301527f00000000000000000000000000000000000000000000000000000000000000001690639dc29fac90604401600060405180830381600087803b1580156147ed57600080fd5b505af1158015614801573d6000803e3d6000fd5b505050505b6139b381614cb4565b60006131ab8383614e7b565b60007f0000000000000000000000000000000000000000000000000000000000000000801561228957505060015471010000000000000000000000000000000000900464ffffffffff1642101590565b606060006131ab83614ea5565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f01565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561492b57600080fd5b505af115801561493f573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527fdf498aa1c340e992665d6fb4f3be8436d452c45a630cb6d7fab7963da39bac8793500190505b60405180910390a15050565b6040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600091829160019183917f00000000000000000000000000000000000000000000000000000000000000001690638991b2f190602401602060405180830381865afa158015614a2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a5391906156bf565b90505b808211614c895780821615614c7d576040517fe75538c700000000000000000000000000000000000000000000000000000000815260048101839052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e75538c7906024016040805180830381865afa158015614af4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b18919061577f565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529294509092506000918416906370a0823190602401602060405180830381865afa158015614b8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bb191906156bf565b90506001811115614c79576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff8481166024830152600091908b169063f9a6503090604401602060405180830381865afa158015614c33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c5791906156bf565b978801979050614c6b61ffff841682615707565b614c759088615976565b9650505b5050505b600182901b9150614a56565b50509250929050565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f50565b3373ffffffffffffffffffffffffffffffffffffffff821614801590614d0b575033600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16155b156139b3576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b158015614dd357600080fd5b505af1158015614de7573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527f69db9e9764da61b6681b89fb0f5be018506e0342036e56b59c3015a620d60977935001905061498d565b60606131ab83836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250615043565b6000826000018281548110614e9257614e92615806565b9060005260206000200154905092915050565b606081600001805480602002602001604051908101604052809291908181526020018280548015614ef557602002820191906000526020600020905b815481526020019060010190808311614ee1575b50505050509050919050565b6000818152600183016020526040812054614f4857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611c5a565b506000611c5a565b60008181526001830160205260408120548015615039576000614f746001836157ae565b8554909150600090614f88906001906157ae565b9050818114614fed576000866000018281548110614fa857614fa8615806565b9060005260206000200154905080876000018481548110614fcb57614fcb615806565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080614ffe57614ffe61598e565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611c5a565b6000915050611c5a565b6060612c65848460008585843b6150b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108e7565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516150df91906159ed565b60006040518083038185875af1925050503d806000811461511c576040519150601f19603f3d011682016040523d82523d6000602084013e615121565b606091505b509150915061513182828661513c565b979650505050505050565b6060831561514b5750816131ab565b82511561515b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e791906159ff565b73ffffffffffffffffffffffffffffffffffffffff811681146139b357600080fd5b80151581146139b357600080fd5b600080604083850312156151d257600080fd5b82356151dd8161518f565b915060208301356151ed816151b1565b809150509250929050565b60006020828403121561520a57600080fd5b81356131ab8161518f565b60006020828403121561522757600080fd5b5035919050565b60008060006060848603121561524357600080fd5b833561524e8161518f565b9250602084013561525e8161518f565b929592945050506040919091013590565b60008083601f84011261528157600080fd5b50813567ffffffffffffffff81111561529957600080fd5b6020830191508360208260051b85010111156152b457600080fd5b9250929050565b60008060008060008060a087890312156152d457600080fd5b86356152df8161518f565b955060208701356152ef8161518f565b9450604087013593506060870135615306816151b1565b9250608087013567ffffffffffffffff81111561532257600080fd5b61532e89828a0161526f565b979a9699509497509295939492505050565b60008060008060006080868803121561535857600080fd5b85356153638161518f565b945060208601359350604086013561537a816151b1565b9250606086013567ffffffffffffffff81111561539657600080fd5b6153a28882890161526f565b969995985093965092949392505050565b80356fffffffffffffffffffffffffffffffff811681146153d357600080fd5b919050565b600080604083850312156153eb57600080fd5b6153f4836153b3565b9150615402602084016153b3565b90509250929050565b61ffff811681146139b357600080fd5b6000806000806080858703121561543157600080fd5b8435935060208501356154438161518f565b925060408501356154538161540b565b915060608501356154638161540b565b939692955090935050565b60008060008060006080868803121561548657600080fd5b8535945060208601356154988161518f565b9350604086013567ffffffffffffffff8111156154b457600080fd5b6154c08882890161526f565b90945092505060608601356154d48161540b565b809150509295509295909350565b6020808252825182820181905260009190848201906040850190845b8181101561553057835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016154fe565b50909695505050505050565b60006020828403121561554e57600080fd5b6131ab826153b3565b6000806020838503121561556a57600080fd5b823567ffffffffffffffff81111561558157600080fd5b61558d8582860161526f565b90969095509350505050565b600080604083850312156155ac57600080fd5b82356155b78161518f565b915060208301356151ed8161518f565b6000602082840312156155d957600080fd5b813564ffffffffff811681146131ab57600080fd5b60006020828403121561560057600080fd5b81356131ab816151b1565b60006020828403121561561d57600080fd5b81516131ab8161518f565b6003811061565f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b73ffffffffffffffffffffffffffffffffffffffff888116825260e082019061568f602084018a615628565b6040830197909752948616606082015292909416608083015260a082015291151560c09092019190915292915050565b6000602082840312156156d157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561573f5761573f6156d8565b500290565b60008261577a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000806040838503121561579257600080fd5b825161579d8161518f565b60208401519092506151ed8161540b565b6000828210156157c0576157c06156d8565b500390565b600080604083850312156157d857600080fd5b505080516020909101519092909150565b6000602082840312156157fb57600080fd5b81516131ab816151b1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc183360301811261586957600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126158a857600080fd5b83018035915067ffffffffffffffff8211156158c357600080fd5b6020019150368190038213156152b457600080fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156159185780818660040360031b1b83161692505b505092915050565b6000808585111561593057600080fd5b8386111561593d57600080fd5b5050820193919092039150565b6000806040838503121561595d57600080fd5b82356159688161518f565b946020939093013593505050565b60008219821115615989576159896156d8565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60005b838110156159d85781810151838201526020016159c0565b838111156159e7576000848401525b50505050565b600082516158698184602087016159bd565b6020815260008251806020840152615a1e8160408501602087016159bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea2646970667358221220a3f4a705ab580a6ada1e438cd2ee4abc001b62d1d171fce12c41994900fef21664736f6c634300080a003360a06040523480156200001157600080fd5b5060405162005f3d38038062005f3d8339810160408190526200003491620012eb565b826001600160a01b031663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000073573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200009991906200147f565b6001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000d7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000fd91906200147f565b6000805460ff191690556001600160a01b0381166200012f57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200016e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200019491906200147f565b6001600160a01b03908116608052600180546001600160a01b031916918616918217905560408051636f307dc360e01b81529051919250636f307dc39160048083019260209291908290030181865afa158015620001f6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200021c91906200147f565b600260006101000a8154816001600160a01b0302191690836001600160a01b03160217905550826001600160a01b031663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000281573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a791906200147f565b6001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200030b91906200147f565b600080546001600160a01b039290921661010002610100600160a81b0319909216919091179055620003626103e860c86200034b6101f4612710620014bc565b60646200035c60c8612710620014bc565b620005e8565b60408101515160005b81811015620003ee576000836040015182815181106200038f576200038f620014e2565b6020026020010151600001519050620003ae81620007c260201b60201c565b620003e48185604001518481518110620003cc57620003cc620014e2565b60200260200101516020015162000a5e60201b60201c565b506001016200036b565b5060015460408051632630c12f60e01b815290516001600160a01b03909216916311ca4fc29186918491632630c12f9160048083019260209291908290030181865afa15801562000443573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200046991906200147f565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401600060405180830381600087803b158015620004b257600080fd5b505af1158015620004c7573d6000803e3d6000fd5b50506040516001600160a01b03861692507fa8b21f72cb83bce808df32dc2330217d744a1c22f3e9e44e4b11bbf049d37d9d9150600090a2600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000553573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200057991906200147f565b6001600160a01b03167f3f82447be465b0b5a4a9e54c74d5f6ae73f2e9537f2cc1590a340524703d096160405160405180910390a26020820151620005cb90620005c5906002620014f8565b62000bda565b81516020830151620005de919062000dc8565b5050505062001604565b6000620005f68585620014bc565b60015460405163172c48c760e01b81526000600482018190529293506001600160a01b039091169063172c48c7906024016040805180830381865afa15801562000644573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200066a91906200152a565b9150508061ffff168261ffff1614620006be57620006888262000f47565b60025460405161ffff841681526001600160a01b039091169060008051602062005f1d8339815191529060200160405180910390a25b60015460405163944ac59f60e01b815261ffff808a166004830152808916602483015280881660448301528087166064830152851660848201526001600160a01b039091169063944ac59f9060a401600060405180830381600087803b1580156200072857600080fd5b505af11580156200073d573d6000803e3d6000fd5b505050507f2214a403d5f8d049e52eacca974c6dea01a471e41d6a18903bfaf7dbc709741f878787612710620007749190620014bc565b876200078388612710620014bc565b6040805161ffff96871681529486166020860152928516848401529084166060840152909216608082015290519081900360a00190a150505050505050565b6001600160a01b038116620007ea57604051635919af9760e11b815260040160405180910390fd5b62000809816001600160a01b03166200116f60201b620023381760201c565b620008365760405163df4c572d60e01b81526001600160a01b038216600482015260240160405180910390fd5b6040516370a0823160e01b81523060048201526001600160a01b038216906370a0823190602401602060405180830381865afa92505050801562000899575060408051601f3d908101601f19168201909252620008969181019062001564565b60015b620008b75760405163528ca31d60e01b815260040160405180910390fd5b50600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200090c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200093291906200147f565b604051630f9a650360e41b8152670de0b6b3a764000060048201526001600160a01b038381166024830152919091169063f9a6503090604401602060405180830381865afa925050508015620009a7575060408051601f3d908101601f19168201909252620009a49181019062001564565b60015b620009c5576040516367a7cd4360e01b815260040160405180910390fd5b5060015460405163d48bfca760e01b81526001600160a01b0383811660048301529091169063d48bfca790602401600060405180830381600087803b15801562000a0e57600080fd5b505af115801562000a23573d6000803e3d6000fd5b50506040516001600160a01b03841692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a250565b6002546001600160a01b038381169116141562000a8e57604051633b899cf960e01b815260040160405180910390fd5b60015460405163172c48c760e01b8152600060048201819052916001600160a01b03169063172c48c7906024016040805180830381865afa15801562000ad8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000afe91906200152a565b91505061ffff8216158062000b1a57508061ffff168261ffff16115b1562000b39576040516333c6608d60e01b815260040160405180910390fd5b600154604051635385e2a160e11b81526001600160a01b03858116600483015261ffff851660248301529091169063a70bc54290604401600060405180830381600087803b15801562000b8b57600080fd5b505af115801562000ba0573d6000803e3d6000fd5b505060405161ffff851681526001600160a01b038616925060008051602062005f1d833981519152915060200160405180910390a2505050565b600062000be662001175565b6001600160a01b031663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801562000c24573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c4a91906200157e565b50509050600062000c606200117560201b60201c565b6001600160a01b031663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa15801562000c9d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000cc39190620015d5565b915050806001600160801b0316836001600160801b0316101562000cfa576040516309aadd6f60e41b815260040160405180910390fd5b826001600160801b0316826001600160801b03161462000dc35762000d1e62001175565b604051632715681560e21b81526001600160801b03851660048201526001600160a01b039190911690639c55a05490602401600060405180830381600087803b15801562000d6b57600080fd5b505af115801562000d80573d6000803e3d6000fd5b50506040516001600160801b03861681527fa030eec20ae970821387224ec3bb15b4bd22b89bfb86dc4d2b3827aa3d99e48d925060200190505b60405180910390a15b505050565b600062000dd462001175565b6001600160a01b031663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801562000e12573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e3891906200157e565b50509050816001600160801b0316836001600160801b0316118062000e6e5750806001600160801b0316826001600160801b0316115b1562000e8d576040516309aadd6f60e41b815260040160405180910390fd5b62000e9762001175565b60405163300eb37b60e11b81526001600160801b038086166004830152841660248201526001600160a01b03919091169063601d66f690604401600060405180830381600087803b15801562000eec57600080fd5b505af115801562000f01573d6000803e3d6000fd5b5050604080516001600160801b038088168252861660208201527f4d4981437d0211f9e6843eb024d9ada1fa3a99514d4343d4aece106dd11524bb935001905062000dba565b600154600254604051635385e2a160e11b81526001600160a01b03918216600482015261ffff8416602482015291169063a70bc54290604401600060405180830381600087803b15801562000f9b57600080fd5b505af115801562000fb0573d6000803e3d6000fd5b505050506000600160009054906101000a90046001600160a01b03166001600160a01b031663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200100a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001030919062001564565b905060015b8181101562000dc35760015460405163172c48c760e01b81526004810183905260009182916001600160a01b039091169063172c48c7906024016040805180830381865afa1580156200108c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010b291906200152a565b915091508461ffff168161ffff1611156200116457600154604051635385e2a160e11b81526001600160a01b03848116600483015261ffff881660248301529091169063a70bc54290604401600060405180830381600087803b1580156200111957600080fd5b505af11580156200112e573d6000803e3d6000fd5b505060405161ffff881681526001600160a01b038516925060008051602062005f1d833981519152915060200160405180910390a25b505060010162001035565b3b151590565b60015460408051632f7a188160e01b815290516000926001600160a01b031691632f7a18819160048083019260209291908290030181865afa158015620011c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011e691906200147f565b905090565b6001600160a01b03811681146200120157600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b03811182821017156200123f576200123f62001204565b60405290565b604080519081016001600160401b03811182821017156200123f576200123f62001204565b604051601f8201601f191681016001600160401b038111828210171562001295576200129562001204565b604052919050565b80516001600160801b0381168114620012b557600080fd5b919050565b8051620012b581620011eb565b805161ffff81168114620012b557600080fd5b80518015158114620012b557600080fd5b6000806000606084860312156200130157600080fd5b83516200130e81620011eb565b809350506020808501516200132381620011eb565b604086810151919450906001600160401b03808211156200134357600080fd5b9087019060a0828a0312156200135857600080fd5b620013626200121a565b6200136d836200129d565b81526200137c8584016200129d565b8582015283830151828111156200139257600080fd5b8301601f81018b13620013a457600080fd5b805183811115620013b957620013b962001204565b620013c9878260051b016200126a565b818152878101945060069190911b82018701908c821115620013ea57600080fd5b918701915b81831015620014435786838e031215620014095760008081fd5b6200141362001245565b83516200142081620011eb565b81526200142f848a01620012c7565b818a015285529387019391860191620013ef565b838701525062001458905060608401620012ba565b60608201526200146b60808401620012da565b608082015280955050505050509250925092565b6000602082840312156200149257600080fd5b81516200149f81620011eb565b9392505050565b634e487b7160e01b600052601160045260246000fd5b600061ffff83811690831681811015620014da57620014da620014a6565b039392505050565b634e487b7160e01b600052603260045260246000fd5b60006001600160801b0382811684821681151582840482111615620015215762001521620014a6565b02949350505050565b600080604083850312156200153e57600080fd5b82516200154b81620011eb565b91506200155b60208401620012c7565b90509250929050565b6000602082840312156200157757600080fd5b5051919050565b6000806000606084860312156200159457600080fd5b6200159f846200129d565b9250620015af60208501620012da565b9150604084015164ffffffffff81168114620015ca57600080fd5b809150509250925092565b60008060408385031215620015e957600080fd5b620015f4836200129d565b91506200155b602084016200129d565b608051614878620016a56000396000818161033601528181610446015281816107c5015281816108c0015281816109ae01528181610b8301528181610f0a015281816113e1015281816114cf015281816115bb015281816116ab015281816117990152818161187d01528181611ad901528181611bc601528181611cb301528181611da0015281816120090152818161218c015261227901526148786000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80638456cb59116100f9578063dc2b21c111610097578063f0527ac611610071578063f0527ac6146103d7578063f206d32a146103df578063fb1bd8c4146103f2578063ffd9b9071461040557600080fd5b8063dc2b21c11461039e578063e6492d7b146103b1578063eb9606df146103c457600080fd5b8063a50cf2c8116100d3578063a50cf2c814610331578063a70bc54214610358578063b53472ef1461036b578063c12c21c01461037e57600080fd5b80638456cb59146103035780639c55a0541461030b5780639f1c50691461031e57600080fd5b806350e036ff1161016657806354fd4d501161014057806354fd4d50146102b25780635c975abb146102ba5780636f307dc3146102d05780637bccacee146102f057600080fd5b806350e036ff1461027657806352438e541461028c578063526a41e81461029f57600080fd5b80633e7c88d6116101a25780633e7c88d6146102355780633f4ba83a14610248578063456e0742146102505780635094cb4f1461026357600080fd5b806324147708146101c95780632954018c146101de5780632f7a18811461022d575b600080fd5b6101dc6101d7366004614307565b610418565b005b60005461020390610100900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6102036106fe565b6101dc610243366004614334565b610797565b6101dc610892565b6101dc61025e366004614307565b610980565b61020361027136600461436d565b610b36565b61027e610b49565b604051908152602001610224565b6101dc61029a366004614307565b610b55565b6101dc6102ad366004614394565b610edc565b61027e600281565b60005460ff166040519015158152602001610224565b6002546102039073ffffffffffffffffffffffffffffffffffffffff1681565b6101dc6102fe3660046143c2565b6113b3565b6101dc6114a1565b6101dc61031936600461440e565b61158d565b6101dc61032c36600461442b565b61167d565b6102037f000000000000000000000000000000000000000000000000000000000000000081565b6101dc610366366004614334565b61176b565b6101dc610379366004614307565b61184f565b6001546102039073ffffffffffffffffffffffffffffffffffffffff1681565b6101dc6103ac366004614459565b611aab565b6101dc6103bf366004614307565b611b98565b6101dc6103d236600461448f565b611c85565b6101dc611d72565b6101dc6103ed3660046144ac565b611fdb565b6101dc610400366004614307565b61215e565b6101dc61041336600461451d565b61224b565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156104a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c6919061453a565b6104fc576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006105078261233e565b90506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015610578573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059c9190614557565b90508181166106f9576001546040517fa366f496000000000000000000000000000000000000000000000000000000008152918317600483018190529173ffffffffffffffffffffffffffffffffffffffff9091169063a366f49690602401600060405180830381600087803b15801561061557600080fd5b505af1158015610629573d6000803e3d6000fd5b505050506106356106fe565b6040517fffd9b9070000000000000000000000000000000000000000000000000000000081526001600482015273ffffffffffffffffffffffffffffffffffffffff919091169063ffd9b90790602401600060405180830381600087803b15801561069f57600080fd5b505af11580156106b3573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692507ff17b849746e74d7186170c9553d4bbf60b4f8bb1ed81fe50c099b934fb078f059150600090a25b505050565b600154604080517f2f7a1881000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691632f7a18819160048083019260209291908290030181865afa15801561076e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610792919061457b565b905090565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610821573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610845919061453a565b61087b576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108848261241e565b61088e82826127f8565b5050565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa15801561091c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610940919061453a565b610976576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61097e612a15565b565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610a0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2e919061453a565b610a64576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a6d81612af6565b6001546040517f9f5f86ae00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015290911690639f5f86ae90602401600060405180830381600087803b158015610ada57600080fd5b505af1158015610aee573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507f5a0b7d0f9c24b39256e112a0584b4c5ce38d8f1dee2e7c56f15b852604cdc8869150600090a250565b6000610b43600383612cb8565b92915050565b60006107926003612ccb565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610bdf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c03919061453a565b610c39576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610c86576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063fdd5764590602401602060405180830381865afa158015610cf7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1b919061457b565b905073ffffffffffffffffffffffffffffffffffffffff8116610d6a576040517f1170cc2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f6e98e5e400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526000602483015290911690636e98e5e490604401600060405180830381600087803b158015610dde57600080fd5b505af1158015610df2573d6000803e3d6000fd5b50506001546040517f6e98e5e40000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff86811660248301529091169250636e98e5e49150604401600060405180830381600087803b158015610e6a57600080fd5b505af1158015610e7e573d6000803e3d6000fd5b50505050610e96826003612cd590919063ffffffff16565b5060405173ffffffffffffffffffffffffffffffffffffffff8316907fab9f405bf0c19b97f65a7031634db41569cd2f0e0376a610a1e977f9ab22b58f90600090a25050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610f66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8a919061453a565b610fc0576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fc982612af6565b6000806000610fd66106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015611020573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110449190614598565b9250925092506000806110556106fe565b73ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa15801561109e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c291906145e5565b9150915060006110d06106fe565b73ffffffffffffffffffffffffffffffffffffffff16639be0536a6040518163ffffffff1660e01b8152600401600060405180830381865afa15801561111a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526111609190810190614643565b9050600061116c6106fe565b73ffffffffffffffffffffffffffffffffffffffff1663b1836d326040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111da919061453a565b600154604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905192935073ffffffffffffffffffffffffffffffffffffffff909116916311ca4fc2918c918491632630c12f9160048083019260209291908290030181865afa158015611256573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061127a919061457b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156112e757600080fd5b505af11580156112fb573d6000803e3d6000fd5b5050505087156113675761130e87612cf7565b6113188484612f5d565b61132186613152565b60005b82518110156113575761134f83828151811061134257611342614726565b60200260200101516132a3565b600101611324565b50801561136757611367856133c9565b60405173ffffffffffffffffffffffffffffffffffffffff8a16907fa8b21f72cb83bce808df32dc2330217d744a1c22f3e9e44e4b11bbf049d37d9d90600090a2505050505050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561143d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611461919061453a565b611497576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61088e828261357b565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561152b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061154f919061453a565b611585576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61097e6139c3565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611617573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163b919061453a565b611671576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81612cf7565b50565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611707573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172b919061453a565b611761576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61088e8282612f5d565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156117f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611819919061453a565b610884576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156118d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fd919061453a565b611933576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061193e8261233e565b90506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d39190614557565b9050818116156106f9576001546040517fa366f496000000000000000000000000000000000000000000000000000000008152918318600483018190529173ffffffffffffffffffffffffffffffffffffffff9091169063a366f49690602401600060405180830381600087803b158015611a4d57600080fd5b505af1158015611a61573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a2505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611b35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b59919061453a565b611b8f576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81613a83565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611c22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c46919061453a565b611c7c576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81613b3d565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611d0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d33919061453a565b611d69576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a816133c9565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611dfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e20919061453a565b611e56576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ec4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee8919061457b565b60015490915073ffffffffffffffffffffffffffffffffffffffff166311ca4fc2611f116106fe565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff91821660048201529084166024820152604401600060405180830381600087803b158015611f7f57600080fd5b505af1158015611f93573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507f3f82447be465b0b5a4a9e54c74d5f6ae73f2e9537f2cc1590a340524703d09619150600090a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015612065573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612089919061453a565b6120bf576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61271061ffff86161015806120e357506127106120dc8585614784565b61ffff1610155b806120fd57506127106120f68383614784565b61ffff1610155b15612134576040517f0b361d6900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6121578585612145866127106147aa565b85612152866127106147aa565b613c5c565b5050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156121e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061220c919061453a565b612242576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a816132a3565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156122d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122f9919061453a565b61232f576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81613152565b3b151590565b6001546040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063f67c5bd090602401602060405180830381865afa1580156123af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123d39190614557565b90508015806123e25750806001145b15612419576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b73ffffffffffffffffffffffffffffffffffffffff811661246b576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163b6124d6576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024015b60405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8216906370a0823190602401602060405180830381865afa92505050801561257a575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261257791810190614557565b60015b6125b0576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561261e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612642919061457b565b6040517ff9a65030000000000000000000000000000000000000000000000000000000008152670de0b6b3a7640000600482015273ffffffffffffffffffffffffffffffffffffffff8381166024830152919091169063f9a6503090604401602060405180830381865afa9250505080156126f8575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526126f591810190614557565b60015b61272e576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506001546040517fd48bfca700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301529091169063d48bfca790602401600060405180830381600087803b15801561279c57600080fd5b505af11580156127b0573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a250565b60025473ffffffffffffffffffffffffffffffffffffffff8381169116141561284d576040517f3b899cf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f172c48c70000000000000000000000000000000000000000000000000000000081526000600482018190529173ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa1580156128bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128e091906147cd565b91505061ffff821615806128fb57508061ffff168261ffff16115b15612932576040517f33c6608d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015261ffff851660248301529091169063a70bc54290604401600060405180830381600087803b1580156129a957600080fd5b505af11580156129bd573d6000803e3d6000fd5b505060405161ffff8516815273ffffffffffffffffffffffffffffffffffffffff861692507f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650915060200160405180910390a2505050565b60005460ff16612a81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016124cd565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b73ffffffffffffffffffffffffffffffffffffffff8116612b43576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163b612ba9576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024016124cd565b8073ffffffffffffffffffffffffffffffffffffffff1663c12c21c06040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612c2e575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252612c2b9181019061457b565b60015b612c64576040517fe9eddd1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60015473ffffffffffffffffffffffffffffffffffffffff82811691161461088e576040517fe9eddd1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612cc48383613e92565b9392505050565b6000610b43825490565b6000612cc48373ffffffffffffffffffffffffffffffffffffffff8416613ebc565b6000612d016106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015612d4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d6f9190614598565b505090506000612d7d6106fe565b73ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa158015612dc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dea91906145e5565b915050806fffffffffffffffffffffffffffffffff16836fffffffffffffffffffffffffffffffff161015612e4b576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826fffffffffffffffffffffffffffffffff16826fffffffffffffffffffffffffffffffff16146106f957612e7e6106fe565b6040517f9c55a0540000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff8516600482015273ffffffffffffffffffffffffffffffffffffffff9190911690639c55a05490602401600060405180830381600087803b158015612ef957600080fd5b505af1158015612f0d573d6000803e3d6000fd5b50506040516fffffffffffffffffffffffffffffffff861681527fa030eec20ae970821387224ec3bb15b4bd22b89bfb86dc4d2b3827aa3d99e48d925060200190505b60405180910390a1505050565b6000612f676106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015612fb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fd59190614598565b50509050816fffffffffffffffffffffffffffffffff16836fffffffffffffffffffffffffffffffff16118061302e5750806fffffffffffffffffffffffffffffffff16826fffffffffffffffffffffffffffffffff16115b15613065576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61306d6106fe565b6040517f601d66f60000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff80861660048301528416602482015273ffffffffffffffffffffffffffffffffffffffff919091169063601d66f690604401600060405180830381600087803b1580156130f057600080fd5b505af1158015613104573d6000803e3d6000fd5b5050604080516fffffffffffffffffffffffffffffffff8088168252861660208201527f4d4981437d0211f9e6843eb024d9ada1fa3a99514d4343d4aece106dd11524bb9350019050612f50565b600061315c6106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa1580156131a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131ca9190614598565b509150508015158215151461088e576131e16106fe565b6040517fffd9b907000000000000000000000000000000000000000000000000000000008152831515600482015273ffffffffffffffffffffffffffffffffffffffff919091169063ffd9b90790602401600060405180830381600087803b15801561324c57600080fd5b505af1158015613260573d6000803e3d6000fd5b505050507ff97ba903470ff3262b4a68a938fe81def401bac1bd742169d2e8d5c4ed2185d382604051613297911515815260200190565b60405180910390a15050565b73ffffffffffffffffffffffffffffffffffffffff81166132f0576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6132f86106fe565b6040517fb55bb84b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152919091169063b55bb84b90602401600060405180830381600087803b15801561336357600080fd5b505af1158015613377573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841681527fdac9a7995cbc0c0f01d78970fb6fd0b52fe0fe869eb6635e65cc1b5682b8325c925060200190505b60405180910390a150565b60006133d36106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801561341d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134419190614598565b925050508064ffffffffff168264ffffffffff161461088e578164ffffffffff168164ffffffffff16118061347c57508164ffffffffff1642115b156134b3576040517fe4eaca7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134bb6106fe565b6040517feb9606df00000000000000000000000000000000000000000000000000000000815264ffffffffff8416600482015273ffffffffffffffffffffffffffffffffffffffff919091169063eb9606df90602401600060405180830381600087803b15801561352b57600080fd5b505af115801561353f573d6000803e3d6000fd5b505060405164ffffffffff851681527f0b3eb35ba750e7a7e4d26c9eee3d226f4e1f68c5568f4a3d051c94b241b02ac092506020019050613297565b73ffffffffffffffffffffffffffffffffffffffff82166135c8576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82163b61362e576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016124cd565b61363781612af6565b60015473ffffffffffffffffffffffffffffffffffffffff8381169116148061369257506136636106fe565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b806136b7575060015473ffffffffffffffffffffffffffffffffffffffff8281169116145b806136f457506136c56106fe565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b1561372b576040517f727de5c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517fff68754300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063ff68754390602401602060405180830381865afa15801561379c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137c0919061457b565b73ffffffffffffffffffffffffffffffffffffffff1614158061388c57506001546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063fdd5764590602401602060405180830381865afa15801561384f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613873919061457b565b73ffffffffffffffffffffffffffffffffffffffff1614155b156138c3576040517f21ff1e7100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f6e98e5e400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152848116602483015290911690636e98e5e490604401600060405180830381600087803b15801561393857600080fd5b505af115801561394c573d6000803e3d6000fd5b50505050613964826003613faf90919063ffffffff16565b508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4bcbefaef68b99503d502f5a6abe7bca2b183ab8ac55457013c77d084ebd130560405160405180910390a35050565b60005460ff1615613a30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016124cd565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612acc3390565b6001546040517fdc2b21c100000000000000000000000000000000000000000000000000000000815260ff8316600482015273ffffffffffffffffffffffffffffffffffffffff9091169063dc2b21c190602401600060405180830381600087803b158015613af157600080fd5b505af1158015613b05573d6000803e3d6000fd5b505060405160ff841681527f73caacd705657a7d283e48ecf288b73bc517e3aea1bbc9da2fd54a979e8aa950925060200190506133be565b73ffffffffffffffffffffffffffffffffffffffff8116613b8a576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613b926106fe565b6040517fdcf6548200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152919091169063dcf6548290602401600060405180830381600087803b158015613bfd57600080fd5b505af1158015613c11573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841681527f32e53e2e527af8518ae889e5f7e674bc83f7cf68e4cc059aceeaa0e64208b85b925060200190506133be565b6000613c6885856147aa565b6001546040517f172c48c700000000000000000000000000000000000000000000000000000000815260006004820181905292935073ffffffffffffffffffffffffffffffffffffffff9091169063172c48c7906024016040805180830381865afa158015613cdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cff91906147cd565b9150508061ffff168261ffff1614613d6e57613d1a82613fd1565b60025460405161ffff8416815273ffffffffffffffffffffffffffffffffffffffff909116907f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac6509060200160405180910390a25b6001546040517f944ac59f00000000000000000000000000000000000000000000000000000000815261ffff808a1660048301528089166024830152808816604483015280871660648301528516608482015273ffffffffffffffffffffffffffffffffffffffff9091169063944ac59f9060a401600060405180830381600087803b158015613dfd57600080fd5b505af1158015613e11573d6000803e3d6000fd5b505050507f2214a403d5f8d049e52eacca974c6dea01a471e41d6a18903bfaf7dbc709741f878787612710613e4691906147aa565b87613e53886127106147aa565b6040805161ffff96871681529486166020860152928516848401529084166060840152909216608082015290519081900360a00190a150505050505050565b6000826000018281548110613ea957613ea9614726565b9060005260206000200154905092915050565b60008181526001830160205260408120548015613fa5576000613ee06001836147fc565b8554909150600090613ef4906001906147fc565b9050818114613f59576000866000018281548110613f1457613f14614726565b9060005260206000200154905080876000018481548110613f3757613f37614726565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080613f6a57613f6a614813565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610b43565b6000915050610b43565b6000612cc48373ffffffffffffffffffffffffffffffffffffffff8416614296565b6001546002546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015261ffff8416602482015291169063a70bc54290604401600060405180830381600087803b15801561404a57600080fd5b505af115801561405e573d6000803e3d6000fd5b505050506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156140d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140f59190614557565b905060015b818110156106f9576001546040517f172c48c700000000000000000000000000000000000000000000000000000000815260048101839052600091829173ffffffffffffffffffffffffffffffffffffffff9091169063172c48c7906024016040805180830381865afa158015614175573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061419991906147cd565b915091508461ffff168161ffff16111561428c576001546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015261ffff881660248301529091169063a70bc54290604401600060405180830381600087803b15801561422457600080fd5b505af1158015614238573d6000803e3d6000fd5b505060405161ffff8816815273ffffffffffffffffffffffffffffffffffffffff851692507f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650915060200160405180910390a25b50506001016140fa565b60008181526001830160205260408120546142dd57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610b43565b506000610b43565b73ffffffffffffffffffffffffffffffffffffffff8116811461167a57600080fd5b60006020828403121561431957600080fd5b8135612cc4816142e5565b61ffff8116811461167a57600080fd5b6000806040838503121561434757600080fd5b8235614352816142e5565b9150602083013561436281614324565b809150509250929050565b60006020828403121561437f57600080fd5b5035919050565b801515811461167a57600080fd5b600080604083850312156143a757600080fd5b82356143b2816142e5565b9150602083013561436281614386565b600080604083850312156143d557600080fd5b82356143e0816142e5565b91506020830135614362816142e5565b6fffffffffffffffffffffffffffffffff8116811461167a57600080fd5b60006020828403121561442057600080fd5b8135612cc4816143f0565b6000806040838503121561443e57600080fd5b8235614449816143f0565b91506020830135614362816143f0565b60006020828403121561446b57600080fd5b813560ff81168114612cc457600080fd5b64ffffffffff8116811461167a57600080fd5b6000602082840312156144a157600080fd5b8135612cc48161447c565b600080600080600060a086880312156144c457600080fd5b85356144cf81614324565b945060208601356144df81614324565b935060408601356144ef81614324565b925060608601356144ff81614324565b9150608086013561450f81614324565b809150509295509295909350565b60006020828403121561452f57600080fd5b8135612cc481614386565b60006020828403121561454c57600080fd5b8151612cc481614386565b60006020828403121561456957600080fd5b5051919050565b8051612419816142e5565b60006020828403121561458d57600080fd5b8151612cc4816142e5565b6000806000606084860312156145ad57600080fd5b83516145b8816143f0565b60208501519093506145c981614386565b60408501519092506145da8161447c565b809150509250925092565b600080604083850312156145f857600080fd5b8251614603816143f0565b6020840151909250614362816143f0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000602080838503121561465657600080fd5b825167ffffffffffffffff8082111561466e57600080fd5b818501915085601f83011261468257600080fd5b81518181111561469457614694614614565b8060051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f830116810181811085821117156146d7576146d7614614565b6040529182528482019250838101850191888311156146f557600080fd5b938501935b8285101561471a5761470b85614570565b845293850193928501926146fa565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061ffff8083168185168083038211156147a1576147a1614755565b01949350505050565b600061ffff838116908316818110156147c5576147c5614755565b039392505050565b600080604083850312156147e057600080fd5b82516147eb816142e5565b602084015190925061436281614324565b60008282101561480e5761480e614755565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea264697066735822122046c364b67d38a3dd85b57e027716324d90dd1df102f265f0a0e2697babdb3f3b64736f6c634300080a003394525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650a2646970667358221220fdec6c7e549db7b07aff4657b40401ad8b7f61893e94723f94a0958b01ed842464736f6c634300080a0033"; - -type CurveV1Adapter4AssetsTestConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: CurveV1Adapter4AssetsTestConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class CurveV1Adapter4AssetsTest__factory extends ContractFactory { - constructor(...args: CurveV1Adapter4AssetsTestConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): CurveV1Adapter4AssetsTest { - return super.attach(address) as CurveV1Adapter4AssetsTest; - } - override connect(signer: Signer): CurveV1Adapter4AssetsTest__factory { - return super.connect(signer) as CurveV1Adapter4AssetsTest__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): CurveV1Adapter4AssetsTestInterface { - return new utils.Interface(_abi) as CurveV1Adapter4AssetsTestInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): CurveV1Adapter4AssetsTest { - return new Contract( - address, - _abi, - signerOrProvider - ) as CurveV1Adapter4AssetsTest; - } -} diff --git a/src/types/factories/contracts/test/adapters/CurveV1Adapter_4AssetsTest.t.sol/index.ts b/src/types/factories/contracts/test/adapters/CurveV1Adapter_4AssetsTest.t.sol/index.ts deleted file mode 100644 index f51d3dfc..00000000 --- a/src/types/factories/contracts/test/adapters/CurveV1Adapter_4AssetsTest.t.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { CurveV1Adapter4AssetsTest__factory } from "./CurveV1Adapter4AssetsTest__factory"; diff --git a/src/types/factories/contracts/test/adapters/CurveV1StETHTest.t.sol/CurveV1StEthAdapterTest__factory.ts b/src/types/factories/contracts/test/adapters/CurveV1StETHTest.t.sol/CurveV1StEthAdapterTest__factory.ts deleted file mode 100644 index 58dbaa55..00000000 --- a/src/types/factories/contracts/test/adapters/CurveV1StETHTest.t.sol/CurveV1StEthAdapterTest__factory.ts +++ /dev/null @@ -1,850 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - CurveV1StEthAdapterTest, - CurveV1StEthAdapterTestInterface, -} from "../../../../../contracts/test/adapters/CurveV1StETHTest.t.sol/CurveV1StEthAdapterTest"; - -const _abi = [ - { - inputs: [], - name: "IncorrectIndexException", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "TokenIsNotInAllowedList", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "onBehalfOf", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "token", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "AddCollateral", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - ], - name: "CloseCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "DecreaseBorrowedAmount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "target", - type: "address", - }, - ], - name: "ExecuteOrder", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "IncreaseBorrowedAmount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "liquidator", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "remainingFunds", - type: "uint256", - }, - ], - name: "LiquidateCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "liquidator", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "remainingFunds", - type: "uint256", - }, - ], - name: "LiquidateExpiredCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [], - name: "MultiCallFinished", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - ], - name: "MultiCallStarted", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newConfigurator", - type: "address", - }, - ], - name: "NewConfigurator", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "onBehalfOf", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "borrowAmount", - type: "uint256", - }, - { - indexed: false, - internalType: "uint16", - name: "referralCode", - type: "uint16", - }, - ], - name: "OpenCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "token", - type: "address", - }, - ], - name: "TokenDisabled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "token", - type: "address", - }, - ], - name: "TokenEnabled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "oldOwner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "TransferAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "bool", - name: "state", - type: "bool", - }, - ], - name: "TransferAccountAllowed", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "", - type: "address", - }, - ], - name: "log_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "log_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - name: "log_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "int256", - name: "", - type: "int256", - }, - ], - name: "log_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "address", - name: "val", - type: "address", - }, - ], - name: "log_named_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes", - name: "val", - type: "bytes", - }, - ], - name: "log_named_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes32", - name: "val", - type: "bytes32", - }, - ], - name: "log_named_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - ], - name: "log_named_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "string", - name: "val", - type: "string", - }, - ], - name: "log_named_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - ], - name: "log_named_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "log_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "logs", - type: "event", - }, - { - inputs: [], - name: "IS_TEST", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "adapter", - outputs: [ - { - internalType: "contract CurveV1AdapterStETH", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "cft", - outputs: [ - { - internalType: "contract CreditFacadeTestSuite", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditConfigurator", - outputs: [ - { - internalType: "contract CreditConfigurator", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditFacade", - outputs: [ - { - internalType: "contract CreditFacade", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditManager", - outputs: [ - { - internalType: "contract ICreditManagerV2", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "curveV1Mock", - outputs: [ - { - internalType: "contract CurveV1Mock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "failed", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "lp_token", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "setUp", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_ACV1S_01_add_liquidity_works_correctly", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_ACV1S_02_remove_liquidity_works_correctly", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_ACV1S_03_exchange_works_correctly", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_ACV1S_04_remove_liquidity_one_coin_works_correctly", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_ACV1S_05_remove_all_liquidity_one_coin_works_correctly", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_ACV1S_06_remove_liquidity_imbalance_works_correctly", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "test_ACV1S_07_adapter_returns_correct_view_function_results", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "underlying", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x60806040526000805460ff1916600190811790915580546001600160a01b031916737109709ecfa91a80626ff3989d68f67f5b1dd12d1790553480156200004557600080fd5b50620516b580620000576000396000f3fe60806040523480156200001157600080fd5b50600436106200014f5760003560e01c806382c6306611620000c0578063c12c21c0116200008b578063ed8e21a3116200006e578063ed8e21a314620002d5578063f9aa028a14620002df578063fa7626d4146200030057600080fd5b8063c12c21c01462000293578063df51443314620002b457600080fd5b806382c63066146200023657806397342b381462000257578063a5f6293f1462000261578063ba414fa6146200027857600080fd5b806329d351d8116200011e57806361f49e9c116200010157806361f49e9c14620002015780636f307dc3146200020b578063742f54f4146200022c57600080fd5b806329d351d814620001bf5780632f7a188114620001e057600080fd5b806303eadcfc14620001545780630a9254e4146200019f5780630b80e9ca14620001ab5780630ef2ad9014620001b5575b600080fd5b601054620001759073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b620001a96200030e565b005b620001a962000660565b620001a962000c22565b601154620001759073ffffffffffffffffffffffffffffffffffffffff1681565b600354620001759073ffffffffffffffffffffffffffffffffffffffff1681565b620001a96200121b565b600654620001759073ffffffffffffffffffffffffffffffffffffffff1681565b620001a96200198f565b601254620001759073ffffffffffffffffffffffffffffffffffffffff1681565b620001a962002346565b620001a96200027236600462009892565b620029ec565b6200028262002f61565b604051901515815260200162000196565b600254620001759073ffffffffffffffffffffffffffffffffffffffff1681565b600554620001759073ffffffffffffffffffffffffffffffffffffffff1681565b620001a9620030cb565b600454620001759073ffffffffffffffffffffffffffffffffffffffff1681565b600054620002829060ff1681565b6200031862003627565b600954601180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909216918217905563b91434d160006001620003806b033b2e3c9fd0803ce80000006002620098db565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152600f93840b60048201529190920b60248201526044810191909152606401600060405180830381600087803b158015620003e557600080fd5b505af1158015620003fa573d6000803e3d6000fd5b5050600b54601080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600054601154620100009091048216935063eebab8ef92506006911662000471670de0b6b3a76400006096620098db565b6040518463ffffffff1660e01b8152600401620004919392919062009986565b600060405180830381600087803b158015620004ac57600080fd5b505af1158015620004c1573d6000803e3d6000fd5b505060015460115473ffffffffffffffffffffffffffffffffffffffff918216935063c88a5e6d92501662000500670de0b6b3a764000060c8620098db565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401600060405180830381600087803b1580156200056c57600080fd5b505af115801562000581573d6000803e3d6000fd5b50505050601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166382c630666040518163ffffffff1660e01b8152600401602060405180830381865afa158015620005f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006199190620099e0565b601280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60005b600281101562000c1f578015156200067a6200030e565b600080546040517f67b426450000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff16906367b4264590620006d99060039060040162009a07565b602060405180830381865afa158015620006f7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200071d9190620099e0565b600080546040517f67b4264500000000000000000000000000000000000000000000000000000000815292935090916201000090910473ffffffffffffffffffffffffffffffffffffffff16906367b4264590620007819060069060040162009a07565b602060405180830381865afa1580156200079f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007c59190620099e0565b9050600080620007d46200474e565b601154600a5492945090925073ffffffffffffffffffffffffffffffffffffffff90811631916200080d91600391869116600062004b35565b60007f3df021240000000000000000000000000000000000000000000000000000000081600162000848670de0b6b3a76400006003620098db565b60405160ff938416602482015292909116604483015260648201526000608482015260a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152905086156200096357601054600a54620009389173ffffffffffffffffffffffffffffffffffffffff908116911673f39fd6e51aad88f6f4ce6ab8827279cfffb92266848a8a600062004b59565b6010546200095d9073ffffffffffffffffffffffffffffffffffffffff168262004b75565b62000b00565b601054600a54620009a89173ffffffffffffffffffffffffffffffffffffffff908116911673f39fd6e51aad88f6f4ce6ab8827279cfffb92266848a8a600062004ca7565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b15801562000a2857600080fd5b505af115801562000a3d573d6000803e3d6000fd5b505060105473ffffffffffffffffffffffffffffffffffffffff169150633df0212490506000600162000a7a670de0b6b3a76400006003620098db565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152600f93840b60048201529190920b6024820152604481019190915260006064820152608401600060405180830381600087803b15801562000ae657600080fd5b505af115801562000afb573d6000803e3d6000fd5b505050505b62000b2d60038562000b1b670de0b6b3a764000083620098db565b62000b27908762009a1d565b62004cba565b62000b656006856001600262000b4d670de0b6b3a76400006003620098db565b62000b599190620098db565b62000b27919062009a1d565b60115462000baa9073ffffffffffffffffffffffffffffffffffffffff1662000b98670de0b6b3a76400006003620098db565b62000ba4908562009a37565b62004cdc565b600a5462000bf490600390869073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62004b35565b62000c026006600162004cf8565b50505050505050808062000c169062009a52565b91505062000663565b50565b60005b600281101562000c1f5780151562000c3c6200030e565b601154604080517ffc0c546a000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163fc0c546a9160048083019260209291908290030181865afa15801562000cad573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000cd39190620099e0565b600080546040517f67b4264500000000000000000000000000000000000000000000000000000000815292935090916201000090910473ffffffffffffffffffffffffffffffffffffffff16906367b426459062000d379060039060040162009a07565b602060405180830381865afa15801562000d55573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000d7b9190620099e0565b905060008062000d8a6200474e565b601154919350915073ffffffffffffffffffffffffffffffffffffffff1680319062000dcb9062000dc5670de0b6b3a76400006064620098db565b62004d14565b600a5462000df5908690859073ffffffffffffffffffffffffffffffffffffffff166000620051bf565b60007f1a4d01d20000000000000000000000000000000000000000000000000000000062000e2d670de0b6b3a76400006037620098db565b600062000e44670de0b6b3a76400006003620098db565b604051602481019390935260ff90911660448301526064820152608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529050861562000f5757601054600a5462000f2c9173ffffffffffffffffffffffffffffffffffffffff908116911673f39fd6e51aad88f6f4ce6ab8827279cfffb92266848a8a600062004b59565b60105462000f519073ffffffffffffffffffffffffffffffffffffffff168262004b75565b620010fd565b601054600a5462000f9c9173ffffffffffffffffffffffffffffffffffffffff908116911673f39fd6e51aad88f6f4ce6ab8827279cfffb92266848a8a600062004ca7565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b1580156200101c57600080fd5b505af115801562001031573d6000803e3d6000fd5b505060105473ffffffffffffffffffffffffffffffffffffffff169150631a4d01d290506200106a670de0b6b3a76400006037620098db565b600062001081670de0b6b3a76400006003620098db565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526004810193909352600f9190910b60248301526044820152606401600060405180830381600087803b158015620010e357600080fd5b505af1158015620010f8573d6000803e3d6000fd5b505050505b6200113f868562001118670de0b6b3a76400006037620098db565b6200112d670de0b6b3a76400006064620098db565b62001139919062009a1d565b620051dd565b62001168858560016200115c670de0b6b3a76400006003620098db565b6200112d908862009a37565b601154620011a79073ffffffffffffffffffffffffffffffffffffffff166200119b670de0b6b3a76400006003620098db565b62000ba4908562009a1d565b600a54620011f0908790869073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff620051bf565b620011fe6003600162004cf8565b505050505050508080620012129062009a52565b91505062000c25565b60005b600281101562000c1f57801515620012356200030e565b600080620012426200474e565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015292945090925073ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b158015620012c657600080fd5b505af1158015620012db573d6000803e3d6000fd5b50505050620013026006670de0b6b3a76400006096620012fc9190620098db565b620051fa565b600a546200132d90600390849073ffffffffffffffffffffffffffffffffffffffff16600062004b35565b600a546200135890600690849073ffffffffffffffffffffffffffffffffffffffff16600062004b35565b601154600080546040517f8832786300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9384168031946201000090930490921691638832786391620013c29160069160040162009a8e565b602060405180830381865afa158015620013e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001406919062009ac1565b601254600a5460408051808201909152601881527f73657447617465776179206c705f746f6b656e20213d2030000000000000000060208201529293506200146e9273ffffffffffffffffffffffffffffffffffffffff9283169290911690600090620057ae565b600060405180604001604052806005670de0b6b3a764000060c8620014949190620098db565b620014a0919062009adb565b8152602001600a620014bc670de0b6b3a76400006096620098db565b620014c8919062009adb565b9052905060007f0b4c7e4d000000000000000000000000000000000000000000000000000000008262001505670de0b6b3a76400006037620098db565b6040516024016200151892919062009b3c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529050620015b873f39fd6e51aad88f6f4ce6ab8827279cfffb92266828962005970565b8615620015ea57601054620015e49073ffffffffffffffffffffffffffffffffffffffff168262004b75565b6200170d565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b1580156200166a57600080fd5b505af11580156200167f573d6000803e3d6000fd5b505060105473ffffffffffffffffffffffffffffffffffffffff169150630b4c7e4d905083620016b9670de0b6b3a76400006037620098db565b6040518363ffffffff1660e01b8152600401620016d892919062009b3c565b600060405180830381600087803b158015620016f357600080fd5b505af115801562001708573d6000803e3d6000fd5b505050505b6200174360038760056200172b670de0b6b3a764000060c8620098db565b62001737919062009adb565b62000b27908962009a1d565b62001782600687600a62001761670de0b6b3a76400006096620098db565b6200176d919062009adb565b62000b59670de0b6b3a76400006096620098db565b601254620017b89073ffffffffffffffffffffffffffffffffffffffff168760016200112d670de0b6b3a76400006037620098db565b601254600a5460408051808201909152601881527f73657447617465776179206c705f746f6b656e20213d2031000000000000000060208201526200181b9273ffffffffffffffffffffffffffffffffffffffff908116921690600190620057ae565b601154620018689073ffffffffffffffffffffffffffffffffffffffff16600562001850670de0b6b3a764000060c8620098db565b6200185c919062009adb565b62000ba4908762009a37565b601154620018b89060069073ffffffffffffffffffffffffffffffffffffffff16600a620018a0670de0b6b3a76400006096620098db565b620018ac919062009adb565b62000b27908762009a37565b601254620018de9073ffffffffffffffffffffffffffffffffffffffff16600162005b4a565b600a546200192890600390889073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62004b35565b600a546200197290600690889073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62004b35565b505050505050508080620019869062009a52565b9150506200121e565b60005b600281101562000c1f57801515620019a96200030e565b600080620019b66200474e565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015292945090925073ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b15801562001a3a57600080fd5b505af115801562001a4f573d6000803e3d6000fd5b5050505062001a706006670de0b6b3a76400006096620012fc9190620098db565b6011546040805180820190915273ffffffffffffffffffffffffffffffffffffffff909116319060009080600562001ab2670de0b6b3a764000060c8620098db565b62001abe919062009adb565b8152602001600a62001ada670de0b6b3a76400006096620098db565b62001ae6919062009adb565b9052905060006002600a62001b05670de0b6b3a76400006096620098db565b62001b11919062009adb565b62001b1d919062009adb565b601254600a5460408051808201909152601881527f73657447617465776179206c705f746f6b656e20213d20300000000000000000602082015292935062001b859273ffffffffffffffffffffffffffffffffffffffff9283169290911690600090620057ae565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b15801562001c0557600080fd5b505af115801562001c1a573d6000803e3d6000fd5b505060105473ffffffffffffffffffffffffffffffffffffffff169150630b4c7e4d90508362001c54670de0b6b3a76400006037620098db565b6040518363ffffffff1660e01b815260040162001c7392919062009b3c565b600060405180830381600087803b15801562001c8e57600080fd5b505af115801562001ca3573d6000803e3d6000fd5b5050601254600a5460408051808201909152601881527f73657447617465776179206c705f746f6b656e20213d20310000000000000000602082015262001d0b945073ffffffffffffffffffffffffffffffffffffffff9283169350911690600190620057ae565b601254600a5462001d3a9173ffffffffffffffffffffffffffffffffffffffff908116918891166000620051bf565b60007f5b36389c00000000000000000000000000000000000000000000000000000000600262001d74670de0b6b3a76400006037620098db565b62001d80919062009adb565b60405180604001604052806005670de0b6b3a764000060c862001da49190620098db565b62001db0919062009adb565b815260200185905260405162001dcb92919060240162009b59565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152905062001e6b73f39fd6e51aad88f6f4ce6ab8827279cfffb92266828962005b66565b861562001e9d5760105462001e979073ffffffffffffffffffffffffffffffffffffffff168262004b75565b62002006565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b15801562001f1d57600080fd5b505af115801562001f32573d6000803e3d6000fd5b505060105473ffffffffffffffffffffffffffffffffffffffff169150635b36389c9050600262001f6d670de0b6b3a76400006037620098db565b62001f79919062009adb565b60405180604001604052806005670de0b6b3a764000060c862001f9d9190620098db565b62001fa9919062009adb565b8152602001868152506040518363ffffffff1660e01b815260040162001fd192919062009b59565b600060405180830381600087803b15801562001fec57600080fd5b505af115801562002001573d6000803e3d6000fd5b505050505b6200206d6003876001600562002026670de0b6b3a764000060c8620098db565b62002032919062009adb565b600562002049670de0b6b3a764000060c8620098db565b62002055919062009adb565b62002061908b62009a1d565b62000b59919062009a37565b620020bb600687600185600a6200208e670de0b6b3a76400006096620098db565b6200209a919062009adb565b620020af670de0b6b3a76400006096620098db565b62002061919062009a1d565b601254620021209073ffffffffffffffffffffffffffffffffffffffff16876002620020f1670de0b6b3a76400006037620098db565b620020fd919062009adb565b600162002114670de0b6b3a76400006037620098db565b6200112d919062009a1d565b600a8054604080518082019091529182527f737445544820213d20310000000000000000000000000000000000000000000060208301526200217f9160069173ffffffffffffffffffffffffffffffffffffffff169060019062005d40565b600a5460408051808201909152600981527f5745544820213d203100000000000000000000000000000000000000000000006020820152620021e09160039173ffffffffffffffffffffffffffffffffffffffff9091169060019062005d40565b601254600a5460408051808201909152600b81527f73746543525620213d20310000000000000000000000000000000000000000006020820152620022439273ffffffffffffffffffffffffffffffffffffffff908116921690600190620057ae565b601154620022bf9073ffffffffffffffffffffffffffffffffffffffff16600562002278670de0b6b3a764000060c8620098db565b62002284919062009adb565b60056200229b670de0b6b3a764000060c8620098db565b620022a7919062009adb565b620022b3908862009a37565b62000ba4919062009a1d565b601254600a546200230d9173ffffffffffffffffffffffffffffffffffffffff908116918991167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff620051bf565b6200231b6003600162004cf8565b620023296006600162004cf8565b5050505050505080806200233d9062009a52565b91505062001992565b60005b600281101562000c1f57801515620023606200030e565b601154604080517ffc0c546a000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163fc0c546a9160048083019260209291908290030181865afa158015620023d1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620023f79190620099e0565b600080546040517f67b4264500000000000000000000000000000000000000000000000000000000815292935090916201000090910473ffffffffffffffffffffffffffffffffffffffff16906367b42645906200245b9060039060040162009a07565b602060405180830381865afa15801562002479573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200249f9190620099e0565b9050600080620024ae6200474e565b601154919350915073ffffffffffffffffffffffffffffffffffffffff16316000620024e860026b033b2e3c9fd0803ce800000062009adb565b6011549091506200251e9073ffffffffffffffffffffffffffffffffffffffff1662000dc5670de0b6b3a76400006064620098db565b600a5462002548908790869073ffffffffffffffffffffffffffffffffffffffff166000620051bf565b60007f1a4d01d200000000000000000000000000000000000000000000000000000000600162002582670de0b6b3a76400006064620098db565b6200258e919062009a1d565b600060026001620025a9670de0b6b3a76400006064620098db565b620025b5919062009a1d565b620025c1919062009adb565b604051602481019390935260ff90911660448301526064820152608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152905087156200275e57601054600a54620026a99173ffffffffffffffffffffffffffffffffffffffff908116911673f39fd6e51aad88f6f4ce6ab8827279cfffb92266848b8b600062004b59565b6010546040516000602482015260448101849052620027589173ffffffffffffffffffffffffffffffffffffffff1690606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f33d2ebf20000000000000000000000000000000000000000000000000000000017905262004b75565b620028ca565b601054600a54620027a39173ffffffffffffffffffffffffffffffffffffffff908116911673f39fd6e51aad88f6f4ce6ab8827279cfffb92266848b8b600062004ca7565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b1580156200282357600080fd5b505af115801562002838573d6000803e3d6000fd5b50506010546040517f33d2ebf2000000000000000000000000000000000000000000000000000000008152600060048201526024810186905273ffffffffffffffffffffffffffffffffffffffff90911692506333d2ebf29150604401600060405180830381600087803b158015620028b057600080fd5b505af1158015620028c5573d6000803e3d6000fd5b505050505b620028d887866001620051dd565b6200291c86866001600281620028f8670de0b6b3a76400006064620098db565b62002904919062009a1d565b62002910919062009adb565b6200112d908962009a37565b601154620029779073ffffffffffffffffffffffffffffffffffffffff166002600162002953670de0b6b3a76400006064620098db565b6200295f919062009a1d565b6200296b919062009adb565b62000ba4908662009a1d565b600a54620029c0908890879073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff620051bf565b620029ce6003600162004cf8565b50505050505050508080620029e39062009a52565b91505062002349565b6001546040517f4c63e5620000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff8310600482015273ffffffffffffffffffffffffffffffffffffffff90911690634c63e56290602401600060405180830381600087803b15801562002a6657600080fd5b505af115801562002a7b573d6000803e3d6000fd5b50506010546040517f5e0d443f00000000000000000000000000000000000000000000000000000000815260006004820152600160248201526044810185905262002c08935073ffffffffffffffffffffffffffffffffffffffff9091169150635e0d443f90606401602060405180830381865afa15801562002b02573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002b28919062009ac1565b6011546040517f5e0d443f00000000000000000000000000000000000000000000000000000000815260006004820152600160248201526044810185905273ffffffffffffffffffffffffffffffffffffffff90911690635e0d443f90606401602060405180830381865afa15801562002ba6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002bcc919062009ac1565b6040518060400160405280601681526020017f6765745f647920697320696e636f6e73697374656e740000000000000000000081525062005e79565b6011546040517f710354180000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff90911690637103541890602401600060405180830381600087803b15801562002c7557600080fd5b505af115801562002c8a573d6000803e3d6000fd5b5050505062002dda601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb7b8b806040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002d00573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002d26919062009ac1565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb7b8b806040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002d94573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002dba919062009ac1565b6040518060600160405280602181526020016205165f6021913962005e79565b6001546040805160048082526024820183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f24e46f700000000000000000000000000000000000000000000000000000000017905291517ff28dceb300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9093169263f28dceb39262002e8592910162009bea565b600060405180830381600087803b15801562002ea057600080fd5b505af115801562002eb5573d6000803e3d6000fd5b50506010546040517f07211ef700000000000000000000000000000000000000000000000000000000815260006004820152600160248201819052604482015273ffffffffffffffffffffffffffffffffffffffff90911692506307211ef79150606401602060405180830381865afa15801562002f37573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002f5d919062009ac1565b5050565b60008054610100900460ff161562002f825750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620030c65760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c65640000000000000000000000000000000000000000000000000000828401528251808303840181526060830190935260009290916200302a917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc49160800162009bff565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052620030649162009c49565b6000604051808303816000865af19150503d8060008114620030a3576040519150601f19603f3d011682016040523d82523d6000602084013e620030a8565b606091505b5091505080806020019051810190620030c2919062009c67565b9150505b919050565b60005b600281101562000c1f57801515620030e56200030e565b601154604080517ffc0c546a000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163fc0c546a9160048083019260209291908290030181865afa15801562003156573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200317c9190620099e0565b90506000806200318b6200474e565b6011546040805180820190915292945090925073ffffffffffffffffffffffffffffffffffffffff163190600090806005620031d1670de0b6b3a764000060c8620098db565b620031dd919062009adb565b815260006020909101526011549091506200321d9073ffffffffffffffffffffffffffffffffffffffff1662000dc5670de0b6b3a76400006064620098db565b600a5462003247908690869073ffffffffffffffffffffffffffffffffffffffff166000620051bf565b60007fe3103273000000000000000000000000000000000000000000000000000000008262003280670de0b6b3a76400006037620098db565b6040516024016200329392919062009b3c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290506200333473f39fd6e51aad88f6f4ce6ab8827279cfffb9226682848a62005ec6565b86156200336657601054620033609073ffffffffffffffffffffffffffffffffffffffff168262004b75565b62003489565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b158015620033e657600080fd5b505af1158015620033fb573d6000803e3d6000fd5b505060105473ffffffffffffffffffffffffffffffffffffffff16915063e310327390508362003435670de0b6b3a76400006037620098db565b6040518363ffffffff1660e01b81526004016200345492919062009b3c565b600060405180830381600087803b1580156200346f57600080fd5b505af115801562003484573d6000803e3d6000fd5b505050505b601154604080517ffc0c546a0000000000000000000000000000000000000000000000000000000081529051620035389273ffffffffffffffffffffffffffffffffffffffff169163fc0c546a9160048083019260209291908290030181865afa158015620034fc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620035229190620099e0565b8662001118670de0b6b3a76400006037620098db565b620035706003866001600562003558670de0b6b3a764000060c8620098db565b62003564919062009adb565b62000b59908962009a37565b601154620035a59073ffffffffffffffffffffffffffffffffffffffff1660056200295f670de0b6b3a764000060c8620098db565b600a54620035ee908790879073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff620051bf565b620035fc6003600162004cf8565b6200360a6006600062004cf8565b5050505050505080806200361e9062009a52565b915050620030ce565b620036336003620060d4565b600080546040517f67b4264500000000000000000000000000000000000000000000000000000000815273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee929162010000900473ffffffffffffffffffffffffffffffffffffffff16906367b4264590620036a89060069060040162009a07565b602060405180830381865afa158015620036c6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620036ec9190620099e0565b600080546040517f67b4264500000000000000000000000000000000000000000000000000000000815292935090916201000090910473ffffffffffffffffffffffffffffffffffffffff16906367b4264590620037509060039060040162009a07565b602060405180830381865afa1580156200376e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620037949190620099e0565b9050600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b36ba20869d3c21bcecceda10000006040518263ffffffff1660e01b81526004016000604051808303818588803b1580156200380b57600080fd5b505af115801562003820573d6000803e3d6000fd5b50600093506002925062003832915050565b6040519080825280602002602001820160405280156200385c578160200160208202803683370190505b509050838160008151811062003876576200387662009cba565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508281600181518110620038c757620038c762009cba565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508060405162003910906200983d565b6200391c919062009ce9565b604051809103906000f08015801562003939573d6000803e3d6000fd5b50600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169182179055604080517f82c6306600000000000000000000000000000000000000000000000000000000815290516382c63066916004808201926020929091908290030181865afa158015620039d3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620039f99190620099e0565b600f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92831617905560095460405184928692169062003a51906200984b565b73ffffffffffffffffffffffffffffffffffffffff938416815291831660208301529091166040820152606001604051809103906000f08015801562003a9b573d6000803e3d6000fd5b50600a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600554604080517f2954018c00000000000000000000000000000000000000000000000000000000815290516000939290921691632954018c916004808201926020929091908290030181865afa15801562003b3d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003b639190620099e0565b600954600554604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691632630c12f916004808201926020929091908290030181865afa15801562003bdb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003c019190620099e0565b6000546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831692639dcb511a9262010000900416906367b426459062003c689060039060040162009a07565b602060405180830381865afa15801562003c86573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003cac9190620099e0565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa15801562003d16573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003d3c9190620099e0565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562003daa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003dd09190620099e0565b6000546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831692639dcb511a9262010000900416906367b426459062003e379060069060040162009a07565b602060405180830381865afa15801562003e55573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003e7b9190620099e0565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa15801562003ee5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003f0b9190620099e0565b60405162003f199062009859565b73ffffffffffffffffffffffffffffffffffffffff948516815292841660208401529083166040830152909116606082015260a0608082018190526013908201527f43757276654c504554485072696365466565640000000000000000000000000060c082015260e001604051809103906000f08015801562003fa0573d6000803e3d6000fd5b506001546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291925073ffffffffffffffffffffffffffffffffffffffff16906306447d5690602401600060405180830381600087803b1580156200402257600080fd5b505af115801562004037573d6000803e3d6000fd5b5050600480546040517f3e7c88d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8981169382019390935261206c602482015291169250633e7c88d69150604401600060405180830381600087803b158015620040b357600080fd5b505af1158015620040c8573d6000803e3d6000fd5b50505050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200413a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620041609190620099e0565b600f546040517fe8a97a3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152838216602482015291169063e8a97a3e90604401600060405180830381600087803b158015620041d557600080fd5b505af1158015620041ea573d6000803e3d6000fd5b505060048054600f546040517f3e7c88d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216938101939093526122606024840152169250633e7c88d69150604401600060405180830381600087803b1580156200426857600080fd5b505af11580156200427d573d6000803e3d6000fd5b5050600254600a54600f5460405173ffffffffffffffffffffffffffffffffffffffff9384169550918316935090911690620042b99062009867565b73ffffffffffffffffffffffffffffffffffffffff938416815291831660208301529091166040820152606001604051809103906000f08015801562004303573d6000803e3d6000fd5b50600b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92831690811790915560048054600a546040517f7bccacee000000000000000000000000000000000000000000000000000000008152908516928101929092526024820192909252911690637bccacee90604401600060405180830381600087803b158015620043ae57600080fd5b505af1158015620043c3573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200443257600080fd5b505af115801562004447573d6000803e3d6000fd5b5050600154600b54604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152600d60448201527f414441505445525f53544554480000000000000000000000000000000000000060648201529116925063c657c7189150608401600060405180830381600087803b158015620044f157600080fd5b505af115801562004506573d6000803e3d6000fd5b5050600154600a54604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152601360448201527f43555256455f53544554485f474154455741590000000000000000000000000060648201529116925063c657c7189150608401600060405180830381600087803b158015620045b057600080fd5b505af1158015620045c5573d6000803e3d6000fd5b5050600154600954604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152601560448201527f43555256455f53544554485f504f4f4c5f4d4f434b000000000000000000000060648201529116925063c657c7189150608401600060405180830381600087803b1580156200466f57600080fd5b505af115801562004684573d6000803e3d6000fd5b5050600154600f54604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152601560448201527f43555256455f4c505f5354454352565f544f4b454e000000000000000000000060648201529116925063c657c7189150608401600060405180830381600087803b1580156200472e57600080fd5b505af115801562004743573d6000803e3d6000fd5b505050505050505050565b6000806000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635f7c9bd06040518163ffffffff1660e01b8152600401602060405180830381865afa158015620047c1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620047e7919062009ac1565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015291925073ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b1580156200486857600080fd5b505af11580156200487d573d6000803e3d6000fd5b50506003546040517f6c8f225d0000000000000000000000000000000000000000000000000000000081526004810185905273f39fd6e51aad88f6f4ce6ab8827279cfffb92266602482015260646044820181905260009082015273ffffffffffffffffffffffffffffffffffffffff9091169250636c8f225d9150608401600060405180830381600087803b1580156200491757600080fd5b505af11580156200492c573d6000803e3d6000fd5b50506002546040517fe958b70400000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063e958b7049150602401602060405180830381865afa158015620049b3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620049d99190620099e0565b6006546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80841660048301529295509116906370a0823190602401602060405180830381865afa15801562004a4c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004a72919062009ac1565b600154604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301526024820192909252600d60448201527f6372656469744163636f756e74000000000000000000000000000000000000006064820152929450169063c657c71890608401600060405180830381600087803b15801562004b1757600080fd5b505af115801562004b2c573d6000803e3d6000fd5b50505050509091565b62004b538484848460405180602001604052806000815250620065fc565b50505050565b62004b6c87878787878787600162006732565b50505050505050565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b15801562004bf557600080fd5b505af115801562004c0a573d6000803e3d6000fd5b50506003546040805180820190915273ffffffffffffffffffffffffffffffffffffffff868116825260208201869052909116925063caa5c23f915062004c519062006e23565b6040518263ffffffff1660e01b815260040162004c6f919062009d45565b600060405180830381600087803b15801562004c8a57600080fd5b505af115801562004c9f573d6000803e3d6000fd5b505050505050565b62004b6c87878787878787600162006e8c565b62004cd78383836040518060200160405280600081525062005d40565b505050565b62002f5d8282604051806020016040528060008152506200737a565b62002f5d8282604051806020016040528060008152506200741f565b60008273ffffffffffffffffffffffffffffffffffffffff1663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562004d62573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004d889190620099e0565b6040517f1652e9fc00000000000000000000000000000000000000000000000000000000815230600482015290915073ffffffffffffffffffffffffffffffffffffffff821690631652e9fc90602401600060405180830381600087803b15801562004df357600080fd5b505af115801562004e08573d6000803e3d6000fd5b50506040517f40c10f1900000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660048201526024810185905273ffffffffffffffffffffffffffffffffffffffff841692506340c10f1991506044016020604051808303816000875af115801562004e94573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004eba919062009c67565b506040517f1652e9fc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152821690631652e9fc90602401600060405180830381600087803b15801562004f2557600080fd5b505af115801562004f3a573d6000803e3d6000fd5b50506001546040517f06447d5600000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff90911692506306447d569150602401600060405180830381600087803b15801562004fbe57600080fd5b505af115801562004fd3573d6000803e3d6000fd5b50506002546040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6024820152908416925063095ea7b391506044016020604051808303816000875af115801562005070573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005096919062009c67565b506003546040517f5978103400000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff83811660248301526044820185905290911690635978103490606401600060405180830381600087803b1580156200512657600080fd5b505af11580156200513b573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620051aa57600080fd5b505af115801562004b6c573d6000803e3d6000fd5b62004b5384848484604051806020016040528060008152506200753e565b62004cd783838360405180602001604052806000815250620057ae565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663406c8e2f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562005268573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200528e9190620099e0565b73ffffffffffffffffffffffffffffffffffffffff1663eebab8ef8373f39fd6e51aad88f6f4ce6ab8827279cfffb92266846040518463ffffffff1660e01b8152600401620052e09392919062009986565b600060405180830381600087803b158015620052fb57600080fd5b505af115801562005310573d6000803e3d6000fd5b50506001546040517f06447d5600000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff90911692506306447d569150602401600060405180830381600087803b1580156200539457600080fd5b505af1158015620053a9573d6000803e3d6000fd5b50505050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663406c8e2f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200541b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620054419190620099e0565b73ffffffffffffffffffffffffffffffffffffffff166367b42645836040518263ffffffff1660e01b81526004016200547b919062009a07565b602060405180830381865afa15801562005499573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620054bf9190620099e0565b6002546040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602482015291169063095ea7b3906044016020604051808303816000875af115801562005557573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200557d919062009c67565b50600354600554604080517f406c8e2f000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169363597810349373f39fd6e51aad88f6f4ce6ab8827279cfffb922669391169163406c8e2f916004808201926020929091908290030181865afa15801562005611573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620056379190620099e0565b73ffffffffffffffffffffffffffffffffffffffff166367b42645866040518263ffffffff1660e01b815260040162005671919062009a07565b602060405180830381865afa1580156200568f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620056b59190620099e0565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff92831660048201529116602482015260448101849052606401600060405180830381600087803b1580156200572a57600080fd5b505af11580156200573f573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562004c8a57600080fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600091908616906370a0823190602401602060405180830381865afa1580156200581f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005845919062009ac1565b90508281146200595d577f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f828673ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015620058bd573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262005905919081019062009df1565b6040516020016200591892919062009ec8565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526200595491879062009f4e565b60405180910390a15b62005969818462007777565b5050505050565b604080516002808252606082018352600092602083019080368337019050506000546040517f67b4264500000000000000000000000000000000000000000000000000000000815291925062010000900473ffffffffffffffffffffffffffffffffffffffff16906367b4264590620059ef9060039060040162009a07565b602060405180830381865afa15801562005a0d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005a339190620099e0565b8160008151811062005a495762005a4962009cba565b73ffffffffffffffffffffffffffffffffffffffff92831660209182029290920101526000546040517f67b4264500000000000000000000000000000000000000000000000000000000815262010000909104909116906367b426459062005ab79060069060040162009a07565b602060405180830381865afa15801562005ad5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005afb9190620099e0565b8160018151811062005b115762005b1162009cba565b73ffffffffffffffffffffffffffffffffffffffff9283166020918202929092010152600a5462004b53918691869186911685620078e3565b62002f5d82826040518060200160405280600081525062008510565b604080516002808252606082018352600092602083019080368337019050506000546040517f67b4264500000000000000000000000000000000000000000000000000000000815291925062010000900473ffffffffffffffffffffffffffffffffffffffff16906367b426459062005be59060039060040162009a07565b602060405180830381865afa15801562005c03573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005c299190620099e0565b8160008151811062005c3f5762005c3f62009cba565b73ffffffffffffffffffffffffffffffffffffffff92831660209182029290920101526000546040517f67b4264500000000000000000000000000000000000000000000000000000000815262010000909104909116906367b426459062005cad9060069060040162009a07565b602060405180830381865afa15801562005ccb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005cf19190620099e0565b8160018151811062005d075762005d0762009cba565b73ffffffffffffffffffffffffffffffffffffffff9283166020918202929092010152600a5462004b5391869186918691168562008886565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1662005dcb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f74657374546f6b656e5375697465206973206e6f74207365740000000000000060448201526064015b60405180910390fd5b6000546040517f67b4264500000000000000000000000000000000000000000000000000000000815262004b539162010000900473ffffffffffffffffffffffffffffffffffffffff16906367b426459062005e2c90889060040162009a07565b602060405180830381865afa15801562005e4a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005e709190620099e0565b848484620057ae565b81831462004cd7577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf35838160405162005eb2919062009f88565b60405180910390a162004cd7838362007777565b604080516002808252606082018352600092602083019080368337019050506000546040517f67b4264500000000000000000000000000000000000000000000000000000000815291925062010000900473ffffffffffffffffffffffffffffffffffffffff16906367b426459062005f459060039060040162009a07565b602060405180830381865afa15801562005f63573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005f899190620099e0565b8160008151811062005f9f5762005f9f62009cba565b73ffffffffffffffffffffffffffffffffffffffff92831660209182029290920101526000546040517f67b4264500000000000000000000000000000000000000000000000000000000815262010000909104909116906367b42645906200600d9060069060040162009a07565b602060405180830381865afa1580156200602b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620060519190620099e0565b8160018151811062006067576200606762009cba565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050620059698585620060b28662008ef5565b600a54869073ffffffffffffffffffffffffffffffffffffffff168662008f68565b600181600a811115620060eb57620060eb6200991b565b14806200610c5750600381600a8111156200610a576200610a6200991b565b145b62006174576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f556e737570706f7274656420746f6b656e000000000000000000000000000000604482015260640162005dc2565b604051620061829062009875565b604051809103906000f0801580156200619f573d6000803e3d6000fd5b50600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff166201000073ffffffffffffffffffffffffffffffffffffffff9384168102919091179182905590041663b36ba20862006209670de0b6b3a76400006064620098db565b6040518263ffffffff1660e01b81526004016000604051808303818588803b1580156200623557600080fd5b505af11580156200624a573d6000803e3d6000fd5b5050505050600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681604051620062819062009883565b6200628e92919062009fd1565b604051809103906000f080158015620062ab573d6000803e3d6000fd5b50600580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169182179055604080517f6f307dc30000000000000000000000000000000000000000000000000000000081529051636f307dc3916004808201926020929091908290030181865afa15801562006345573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200636b9190620099e0565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600554604080517fc12c21c00000000000000000000000000000000000000000000000000000000081529051919092169163c12c21c09160048083019260209291908290030181865afa15801562006408573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200642e9190620099e0565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600554604080517f2f7a188100000000000000000000000000000000000000000000000000000000815290519190921691632f7a18819160048083019260209291908290030181865afa158015620064cb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620064f19190620099e0565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600554604080517ff9aa028a0000000000000000000000000000000000000000000000000000000081529051919092169163f9aa028a9160048083019260209291908290030181865afa1580156200658e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620065b49190620099e0565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1662006683576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f74657374546f6b656e5375697465206973206e6f742073657400000000000000604482015260640162005dc2565b6000546040517f67b42645000000000000000000000000000000000000000000000000000000008152620059699162010000900473ffffffffffffffffffffffffffffffffffffffff16906367b4264590620066e490899060040162009a07565b602060405180830381865afa15801562006702573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620067289190620099e0565b858585856200753e565b6002546040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152600092169063e958b70490602401602060405180830381865afa158015620067a4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620067ca9190620099e0565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000918716906370a0823190602401602060405180830381865afa1580156200683d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062006863919062009ac1565b600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481019290925260006024830181905260448301819052606483015291925073ffffffffffffffffffffffffffffffffffffffff9091169063491cc7c290608401600060405180830381600087803b158015620068ea57600080fd5b505af1158015620068ff573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff8b1692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a2821562006a7d576001546002546003546040805173ffffffffffffffffffffffffffffffffffffffff92831660248201528d831660448201528a831660648201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6084808301919091528251808303909101815260a490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f46fb371d0000000000000000000000000000000000000000000000000000000017905290517fbd6af4340000000000000000000000000000000000000000000000000000000081529382169363bd6af4349362006a489316919060040162009ffd565b600060405180830381600087803b15801562006a6357600080fd5b505af115801562006a78573d6000803e3d6000fd5b505050505b60015460025460035460405173ffffffffffffffffffffffffffffffffffffffff9384169363bd6af434938116927f6ce4074a000000000000000000000000000000000000000000000000000000009262006ae392909116908f908e906024016200a036565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b909216825262006b76929160040162009ffd565b600060405180830381600087803b15801562006b9157600080fd5b505af115801562006ba6573d6000803e3d6000fd5b5050600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526024810192909252600060448301819052606483015273ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b15801562006c2c57600080fd5b505af115801562006c41573d6000803e3d6000fd5b505060035460405173ffffffffffffffffffffffffffffffffffffffff8d8116945090911691507faed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab0390600090a3821562006e175760015460025460035473ffffffffffffffffffffffffffffffffffffffff9283169263bd6af434928116917f46fb371d0000000000000000000000000000000000000000000000000000000091168d8b8a62006d12577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62006d15565b60015b60405173ffffffffffffffffffffffffffffffffffffffff9485166024820152928416604484015292166064820152608481019190915260a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b909216825262006de2929160040162009ffd565b600060405180830381600087803b15801562006dfd57600080fd5b505af115801562006e12573d6000803e3d6000fd5b505050505b50505050505050505050565b604080516001808252818301909252606091816020015b60408051808201909152600081526060602082015281526020019060019003908162006e3a579050509050818160008151811062006e7c5762006e7c62009cba565b6020026020010181905250919050565b6002546040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152600092169063e958b70490602401602060405180830381865afa15801562006efe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062006f249190620099e0565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000918716906370a0823190602401602060405180830381865afa15801562006f97573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062006fbd919062009ac1565b90508215620070f5576001546002546040805173ffffffffffffffffffffffffffffffffffffffff8c811660248301528d811660448301528a811660648301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6084808401919091528351808403909101815260a490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f46fb371d0000000000000000000000000000000000000000000000000000000017905291517fbd6af4340000000000000000000000000000000000000000000000000000000081529382169363bd6af43493620070c09316919060040162009ffd565b600060405180830381600087803b158015620070db57600080fd5b505af1158015620070f0573d6000803e3d6000fd5b505050505b60015460025460405173ffffffffffffffffffffffffffffffffffffffff9283169263bd6af4349216907f6ce4074a000000000000000000000000000000000000000000000000000000009062007155908d908f908e906024016200a036565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b9092168252620071e8929160040162009ffd565b600060405180830381600087803b1580156200720357600080fd5b505af115801562007218573d6000803e3d6000fd5b5050600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526024810192909252600060448301819052606483015273ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b1580156200729e57600080fd5b505af1158015620072b3573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff808d1693508b1691507faed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab0390600090a3821562006e175760015460025473ffffffffffffffffffffffffffffffffffffffff9182169163bd6af43491167f46fb371d000000000000000000000000000000000000000000000000000000008b8d8b8a62006d12577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62006d15565b73ffffffffffffffffffffffffffffffffffffffff83163182811462007413577f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f82604051602001620073ce91906200a07a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526200740a91879062009f4e565b60405180910390a15b62004b53818462007777565b600554604080517f406c8e2f000000000000000000000000000000000000000000000000000000008152905162004cd79273ffffffffffffffffffffffffffffffffffffffff169163406c8e2f9160048083019260209291908290030181865afa15801562007492573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620074b89190620099e0565b73ffffffffffffffffffffffffffffffffffffffff166367b42645856040518263ffffffff1660e01b8152600401620074f2919062009a07565b602060405180830381865afa15801562007510573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620075369190620099e0565b838362008510565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301526000919087169063dd62ed3e90604401602060405180830381865afa158015620075b7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620075dd919062009ac1565b905082811462007770577f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f828773ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562007655573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200769d919081019062009df1565b604051602001620076b09291906200a0e3565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052620076ec91889062009f4e565b60405180910390a160408051818152600a818301527f207370656e6465723a2000000000000000000000000000000000000000000000606082015273ffffffffffffffffffffffffffffffffffffffff8616602082015290517f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f9181900360800190a15b62004c9f81845b80821462002f5d577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f50604051620078059060208082526022908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b75696e60408201527f745d000000000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a160408051818152600a818301527f202045787065637465640000000000000000000000000000000000000000000060608201526020810183905290517fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a89181900360800190a160408051818152600a818301527f2020202041637475616c0000000000000000000000000000000000000000000060608201526020810184905290517fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a89181900360800190a162002f5d620095fe565b80516002546040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152600092169063e958b70490602401602060405180830381865afa15801562007957573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200797d9190620099e0565b9050841562007a6357600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481019290925260006024830181905260448301819052606483015273ffffffffffffffffffffffffffffffffffffffff169063491cc7c290608401600060405180830381600087803b15801562007a0857600080fd5b505af115801562007a1d573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff8a1692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a25b60005b8281101562007c355760015460025473ffffffffffffffffffffffffffffffffffffffff9182169163bd6af43491167f46fb371d000000000000000000000000000000000000000000000000000000008962007ac3578b62007add565b60035473ffffffffffffffffffffffffffffffffffffffff165b8989878151811062007af35762007af362009cba565b602090810291909101015160405173ffffffffffffffffffffffffffffffffffffffff938416602482015291831660448301529190911660648201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff608482015260a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b909216825262007beb929160040162009ffd565b600060405180830381600087803b15801562007c0657600080fd5b505af115801562007c1b573d6000803e3d6000fd5b50505050808062007c2c9062009a52565b91505062007a66565b50600154600254600f546040805173ffffffffffffffffffffffffffffffffffffffff868116602483015292831660448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f51e3f1600000000000000000000000000000000000000000000000000000000017905290517fbd6af4340000000000000000000000000000000000000000000000000000000081529382169363bd6af4349362007d059316919060040162009ffd565b600060405180830381600087803b15801562007d2057600080fd5b505af115801562007d35573d6000803e3d6000fd5b505060015460025473ffffffffffffffffffffffffffffffffffffffff918216935063bd6af4349250167f6ce4074a000000000000000000000000000000000000000000000000000000008862007d8d578a62007da7565b60035473ffffffffffffffffffffffffffffffffffffffff165b888b60405160240162007dbd939291906200a036565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b909216825262007e50929160040162009ffd565b600060405180830381600087803b15801562007e6b57600080fd5b505af115801562007e80573d6000803e3d6000fd5b5050600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526024810192909252600060448301819052606483015273ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b15801562007f0657600080fd5b505af115801562007f1b573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff168562007f43578762007f5d565b60035473ffffffffffffffffffffffffffffffffffffffff165b73ffffffffffffffffffffffffffffffffffffffff167faed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab0360405160405180910390a384156200825c5760005b828110156200815d57600154600254600354865173ffffffffffffffffffffffffffffffffffffffff9384169363bd6af434938116927f46fb371d00000000000000000000000000000000000000000000000000000000929116908a908a90889081106200801b576200801b62009cba565b602090810291909101015160405173ffffffffffffffffffffffffffffffffffffffff938416602482015291831660448301529190911660648201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff608482015260a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b909216825262008113929160040162009ffd565b600060405180830381600087803b1580156200812e57600080fd5b505af115801562008143573d6000803e3d6000fd5b505050508080620081549062009a52565b91505062007fa9565b506001546002546040805173ffffffffffffffffffffffffffffffffffffffff85811660248084019190915283518084039091018152604490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f953730180000000000000000000000000000000000000000000000000000000017905291517fbd6af4340000000000000000000000000000000000000000000000000000000081529382169363bd6af43493620082229316919060040162009ffd565b600060405180830381600087803b1580156200823d57600080fd5b505af115801562008252573d6000803e3d6000fd5b5050505062004b6c565b6001546002546040805173ffffffffffffffffffffffffffffffffffffffff85811660248084019190915283518084039091018152604490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f953730180000000000000000000000000000000000000000000000000000000017905291517fbd6af4340000000000000000000000000000000000000000000000000000000081529382169363bd6af43493620083209316919060040162009ffd565b600060405180830381600087803b1580156200833b57600080fd5b505af115801562008350573d6000803e3d6000fd5b5050505060005b828110156200850657600154600254855173ffffffffffffffffffffffffffffffffffffffff9283169263bd6af4349216907f46fb371d00000000000000000000000000000000000000000000000000000000908c908a908a9088908110620083c457620083c462009cba565b602090810291909101015160405173ffffffffffffffffffffffffffffffffffffffff938416602482015291831660448301529190911660648201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff608482015260a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b9092168252620084bc929160040162009ffd565b600060405180830381600087803b158015620084d757600080fd5b505af1158015620084ec573d6000803e3d6000fd5b505050508080620084fd9062009a52565b91505062008357565b5050505050505050565b6002546040517fe958b70400000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015260009173ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa15801562008594573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620085ba9190620099e0565b6002546040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015292935060009290911690638991b2f190602401602060405180830381865afa15801562008631573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062008657919062009ac1565b6002546040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529091169063f67c5bd090602401602060405180830381865afa158015620086c8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620086ee919062009ac1565b16151590508315158114801590620087065750825115155b1562008746577f0b2e13ff20ac7b474198655583edf70dedd2c1dc980e329c4fbb2fc0748b796b836040516200873d919062009bea565b60405180910390a15b62005969841515821515148673ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200879d573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620087e5919081019062009df1565b8362008827576040518060400160405280601981526020017f206e6f7420656e61626c656420617320657870656374656420000000000000008152506200885e565b6040518060400160405280601981526020017f20656e61626c6564206173206e6f7420657870657463746564000000000000008152505b604051602001620088719291906200a169565b60405160208183030381529060405262009781565b80516002546040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152600092169063e958b70490602401602060405180830381865afa158015620088fa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620089209190620099e0565b9050841562008a0657600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481019290925260006024830181905260448301819052606483015273ffffffffffffffffffffffffffffffffffffffff169063491cc7c290608401600060405180830381600087803b158015620089ab57600080fd5b505af1158015620089c0573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff8a1692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a25b60005b8281101562008b8d57600154600254855173ffffffffffffffffffffffffffffffffffffffff9283169263bd6af4349216907f51e3f1600000000000000000000000000000000000000000000000000000000090869089908790811062008a745762008a7462009cba565b602002602001015160405160240162008ab092919073ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b909216825262008b43929160040162009ffd565b600060405180830381600087803b15801562008b5e57600080fd5b505af115801562008b73573d6000803e3d6000fd5b50505050808062008b849062009a52565b91505062008a09565b5060015460025473ffffffffffffffffffffffffffffffffffffffff9182169163bd6af43491167f6ce4074a000000000000000000000000000000000000000000000000000000008862008be2578a62008bfc565b60035473ffffffffffffffffffffffffffffffffffffffff165b888b60405160240162008c12939291906200a036565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b909216825262008ca5929160040162009ffd565b600060405180830381600087803b15801562008cc057600080fd5b505af115801562008cd5573d6000803e3d6000fd5b5050600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526024810192909252600060448301819052606483015273ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b15801562008d5b57600080fd5b505af115801562008d70573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff168562008d98578762008db2565b60035473ffffffffffffffffffffffffffffffffffffffff165b73ffffffffffffffffffffffffffffffffffffffff167faed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab0360405160405180910390a36001546002546040805173ffffffffffffffffffffffffffffffffffffffff85811660248084019190915283518084039091018152604490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f953730180000000000000000000000000000000000000000000000000000000017905291517fbd6af4340000000000000000000000000000000000000000000000000000000081529382169363bd6af4349362008eb89316919060040162009ffd565b600060405180830381600087803b15801562008ed357600080fd5b505af115801562008ee8573d6000803e3d6000fd5b5050505050505050505050565b60408051600280825260608083018452926020830190803683375050835182519293509183915060009062008f2e5762008f2e62009cba565b602090810291909101015281600160200201518160018151811062008f575762008f5762009cba565b602002602001018181525050919050565b80516002546040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8981166004830152600092169063e958b70490602401602060405180830381865afa15801562008fdc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620090029190620099e0565b90508415620090e857600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481019290925260006024830181905260448301819052606483015273ffffffffffffffffffffffffffffffffffffffff169063491cc7c290608401600060405180830381600087803b1580156200908d57600080fd5b505af1158015620090a2573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff8b1692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a25b60005b82811015620092955760008782815181106200910b576200910b62009cba565b602002602001015111156200928057600154600254855173ffffffffffffffffffffffffffffffffffffffff9283169263bd6af4349216907f51e3f160000000000000000000000000000000000000000000000000000000009086908990879081106200917c576200917c62009cba565b6020026020010151604051602401620091b892919073ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b90921682526200924b929160040162009ffd565b600060405180830381600087803b1580156200926657600080fd5b505af11580156200927b573d6000803e3d6000fd5b505050505b806200928c8162009a52565b915050620090eb565b5060015460025473ffffffffffffffffffffffffffffffffffffffff9182169163bd6af43491167f6ce4074a0000000000000000000000000000000000000000000000000000000088620092ea578b62009304565b60035473ffffffffffffffffffffffffffffffffffffffff165b888c6040516024016200931a939291906200a036565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b9092168252620093ad929160040162009ffd565b600060405180830381600087803b158015620093c857600080fd5b505af1158015620093dd573d6000803e3d6000fd5b5050600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526024810192909252600060448301819052606483015273ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b1580156200946357600080fd5b505af115801562009478573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff1685620094a05788620094ba565b60035473ffffffffffffffffffffffffffffffffffffffff165b73ffffffffffffffffffffffffffffffffffffffff167faed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab0360405160405180910390a36001546002546040805173ffffffffffffffffffffffffffffffffffffffff85811660248084019190915283518084039091018152604490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f953730180000000000000000000000000000000000000000000000000000000017905291517fbd6af4340000000000000000000000000000000000000000000000000000000081529382169363bd6af43493620095c09316919060040162009ffd565b600060405180830381600087803b158015620095db57600080fd5b505af1158015620095f0573d6000803e3d6000fd5b505050505050505050505050565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620097535760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000009282019290925260016060820152600091907f70ca10bbd0dbfd9020a9f4b13402c16cb120705e0d1c0aeab10fa353ae586fc490608001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052620096d0929160200162009bff565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526200970a9162009c49565b6000604051808303816000865af19150503d806000811462009749576040519150601f19603f3d011682016040523d82523d6000602084013e6200974e565b606091505b505050505b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055565b8162002f5d577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf358381604051620097b8919062009f88565b60405180910390a162002f5d828062000c1f577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f506040516200982b9060208082526017908201527f4572726f723a20417373657274696f6e204661696c6564000000000000000000604082015260600190565b60405180910390a162000c1f620095fe565b613103806200a1c983390190565b612bef806200d2cc83390190565b611713806200febb83390190565b61676a80620115ce83390190565b617a518062017d3883390190565b62031ed6806201f78983390190565b600060208284031215620098a557600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620099165762009916620098ac565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600b811062009982577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b606081016200999682866200994a565b73ffffffffffffffffffffffffffffffffffffffff93909316602082015260400152919050565b73ffffffffffffffffffffffffffffffffffffffff8116811462000c1f57600080fd5b600060208284031215620099f357600080fd5b815162009a0081620099bd565b9392505050565b6020810162009a1782846200994a565b92915050565b60008282101562009a325762009a32620098ac565b500390565b6000821982111562009a4d5762009a4d620098ac565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141562009a875762009a87620098ac565b5060010190565b6040810162009a9e82856200994a565b73ffffffffffffffffffffffffffffffffffffffff831660208301529392505050565b60006020828403121562009ad457600080fd5b5051919050565b60008262009b12577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b8060005b600281101562004b5357815184526020938401939091019060010162009b1b565b6060810162009b4c828562009b17565b8260408301529392505050565b8281526060810162009a00602083018462009b17565b60005b8381101562009b8c57818101518382015260200162009b72565b8381111562004b535750506000910152565b6000815180845262009bb881602086016020860162009b6f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600062009a00602083018462009b9e565b7fffffffff00000000000000000000000000000000000000000000000000000000831681526000825162009c3b81600485016020870162009b6f565b919091016004019392505050565b6000825162009c5d81846020870162009b6f565b9190910192915050565b60006020828403121562009c7a57600080fd5b8151801515811462009a0057600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020808252825182820181905260009190848201906040850190845b8181101562009d3957835173ffffffffffffffffffffffffffffffffffffffff168352928401929184019160010162009d05565b50909695505050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101562009de3578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00185528151805173ffffffffffffffffffffffffffffffffffffffff16845287015187840187905262009dcf8785018262009b9e565b958801959350509086019060010162009d6c565b509098975050505050505050565b60006020828403121562009e0457600080fd5b815167ffffffffffffffff8082111562009e1d57600080fd5b818401915084601f83011262009e3257600080fd5b81518181111562009e475762009e4762009c8b565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171562009e905762009e9062009c8b565b8160405282815287602084870101111562009eaa57600080fd5b62009ebd83602083016020880162009b6f565b979650505050505050565b6000835162009edc81846020880162009b6f565b7f496e636f72726563742000000000000000000000000000000000000000000000908301908152835162009f1881600a84016020880162009b6f565b7f2062616c616e6365206f6e206163636f756e743a200000000000000000000000600a9290910191820152601f01949350505050565b60408152600062009f63604083018562009b9e565b905073ffffffffffffffffffffffffffffffffffffffff831660208301529392505050565b60408152600560408201527f4572726f72000000000000000000000000000000000000000000000000000000606082015260806020820152600062009a00608083018462009b9e565b73ffffffffffffffffffffffffffffffffffffffff831681526040810162009a0060208301846200994a565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015260006200a02e604083018462009b9e565b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff8086168352808516602084015250606060408301526200a071606083018462009b9e565b95945050505050565b600082516200a08e81846020870162009b6f565b7f496e636f7272656374204554482062616c616e6365206f6e206163636f756e749201918252507f3a200000000000000000000000000000000000000000000000000000000000006020820152602201919050565b600083516200a0f781846020880162009b6f565b7f496e636f7272656374200000000000000000000000000000000000000000000090830190815283516200a13381600a84016020880162009b6f565b7f20416c6c6f77616e6365206f6e206163636f756e743a20200000000000000000600a9290910191820152602201949350505050565b7f546f6b656e2000000000000000000000000000000000000000000000000000008152600083516200a1a381600685016020880162009b6f565b8351908301906200a1bc81600684016020880162009b6f565b0160060194935050505056fe60806040523480156200001157600080fd5b5060405162003103380380620031038339810160408190526200003491620001d5565b80516200004990600290602084019062000113565b5060126040516200005a906200017d565b6060808252600790820152664352564d6f636b60c81b608082015260a0602082018190526015908201527f43525620666f72204375727665506f6f6c4d6f636b000000000000000000000060c082015260ff909116604082015260e001604051809103906000f080158015620000d4573d6000803e3d6000fd5b50600080546001600160a01b03929092166001600160a01b031992831681179091556001805490921617905550670de0b6b3a7640000600455620002a7565b8280548282559060005260206000209081019282156200016b579160200282015b828111156200016b57825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019062000134565b50620001799291506200018b565b5090565b61175880620019ab83390190565b5b808211156200017957600081556001016200018c565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b0381168114620001d057600080fd5b919050565b60006020808385031215620001e957600080fd5b82516001600160401b03808211156200020157600080fd5b818501915085601f8301126200021657600080fd5b8151818111156200022b576200022b620001a2565b8060051b604051601f19603f83011681018181108582111715620002535762000253620001a2565b6040529182528482019250838101850191888311156200027257600080fd5b938501935b828510156200029b576200028b85620001b8565b8452938501939285019262000277565b98975050505050505050565b6116f480620002b76000396000f3fe6080604052600436106101c25760003560e01c80638ea875f3116100f7578063ddca3f4311610095578063f446c1d011610064578063f446c1d01461020f578063f851a44014610432578063fc0c546a14610446578063fee3f7f91461020f57600080fd5b8063ddca3f431461020f578063e2e7d264146103d6578063e3103273146103f7578063ed8e84f31461041757600080fd5b8063b91434d1116100d1578063b91434d11461035e578063bb7b8b801461037e578063c661065714610393578063cc2b27d7146103b357600080fd5b80638ea875f314610328578063a6417ed61461033e578063b4b577ad1461020f57600080fd5b80635409491a1161016457806363543f061161013e57806363543f061461020f57806371035418146102b657806376a2f0f01461020f57806382c63066146102d657600080fd5b80635409491a1461020f5780635b36389c146102765780635e0d443f1461029657600080fd5b80631a4d01d2116101a05780631a4d01d2146102235780632081066c1461020f5780633df02124146102435780634903b0d11461025657600080fd5b806307211ef7146101c75780630b4c7e4d146101fa578063140522881461020f575b600080fd5b3480156101d357600080fd5b506101e76101e23660046112cf565b610473565b6040519081526020015b60405180910390f35b61020d6102083660046113a2565b6104a7565b005b34801561021b57600080fd5b5060006101e7565b34801561022f57600080fd5b5061020d61023e3660046113cd565b61061a565b61020d6102513660046113f2565b6107ad565b34801561026257600080fd5b506101e7610271366004611434565b610957565b34801561028257600080fd5b5061020d61029136600461144d565b610a1f565b3480156102a257600080fd5b506101e76102b13660046112cf565b610b69565b3480156102c257600080fd5b5061020d6102d1366004611434565b600455565b3480156102e257600080fd5b506000546103039073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101f1565b34801561033457600080fd5b506101e760045481565b34801561034a57600080fd5b5061020d6103593660046113f2565b610bb9565b34801561036a57600080fd5b5061020d6103793660046112cf565b610beb565b34801561038a57600080fd5b506004546101e7565b34801561039f57600080fd5b506103036103ae366004611434565b610c4c565b3480156103bf57600080fd5b506101e76103ce36600461147a565b600092915050565b3480156103e257600080fd5b506101e76103f1366004611434565b50600090565b34801561040357600080fd5b5061020d6104123660046113a2565b610c83565b34801561042357600080fd5b506101e76103ce3660046114ae565b34801561043e57600080fd5b506000610303565b34801561045257600080fd5b506001546103039073ffffffffffffffffffffffffffffffffffffffff1681565b60006040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815134146104b457600080fd5b60026001815481106104c8576104c86114ea565b60009182526020918290200154908301516040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481019190915273ffffffffffffffffffffffffffffffffffffffff909116906323b872dd906064016020604051808303816000875af1158015610554573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105789190611519565b506000546040517f40c10f190000000000000000000000000000000000000000000000000000000081523360048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f19906044015b6020604051808303816000875af11580156105f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106159190611519565b505050565b6000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810185905273ffffffffffffffffffffffffffffffffffffffff909116906379cc6790906044016020604051808303816000875af1158015610691573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106b59190611519565b5081600f0b600014156106f557604051339082156108fc029083906000818181858888f193505050501580156106ef573d6000803e3d6000fd5b50505050565b6002600181548110610709576107096114ea565b6000918252602090912001546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201526024810183905273ffffffffffffffffffffffffffffffffffffffff9091169063a9059cbb906044016020604051808303816000875af1158015610789573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ef9190611519565b60006107ba858585610b69565b905081811015610851576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f437572766556314d6f636b3a20494e53554646494349454e545f4f555450555460448201527f5f414d4f554e540000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b84600f0b600014156108c15782341461086957600080fd5b6108bc33826002876fffffffffffffffffffffffffffffffff1681548110610893576108936114ea565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169190610dcd565b610950565b34156108cc57600080fd5b6109213330856002896fffffffffffffffffffffffffffffffff16815481106108f7576108f76114ea565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16929190610ea1565b604051339082156108fc029083906000818181858888f1935050505015801561094e573d6000803e3d6000fd5b505b5050505050565b600081610965575047919050565b6002600181548110610979576109796114ea565b6000918252602090912001546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa1580156109f0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a149190611536565b92915050565b919050565b8051604051339180156108fc02916000818181858888f19350505050158015610a4c573d6000803e3d6000fd5b506002600181548110610a6157610a616114ea565b60009182526020918290200154908201516040517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063a9059cbb906044016020604051808303816000875af1158015610ae7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0b9190611519565b506000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810184905273ffffffffffffffffffffffffffffffffffffffff909116906379cc6790906044016105d2565b600f83810b60009081526003602090815260408083209386900b8352929052908120546b033b2e3c9fd0803ce800000090610ba590849061157e565b610baf91906115bb565b90505b9392505050565b6040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600f83810b60009081526003602090815260408083209386900b835292905220819055610c246b033b2e3c9fd0803ce800000082610eff565b600f92830b60009081526003602090815260408083209690950b825294909452919092205550565b60028181548110610c5c57600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b8151604051339180156108fc02916000818181858888f19350505050158015610cb0573d6000803e3d6000fd5b506002600181548110610cc557610cc56114ea565b60009182526020918290200154908301516040517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063a9059cbb906044016020604051808303816000875af1158015610d4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6f9190611519565b506000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906379cc6790906044016105d2565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526106159084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611065565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526106ef9085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401610e1f565b60408051808201909152600281527f4d33000000000000000000000000000000000000000000000000000000000000602082015260009082610f6e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108489190611622565b506000610f7c6002846115bb565b90506b033b2e3c9fd0803ce8000000610fb5827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611673565b610fbf91906115bb565b8411156040518060400160405280600281526020017f4d3100000000000000000000000000000000000000000000000000000000000081525090611030576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108489190611622565b5082816110496b033b2e3c9fd0803ce80000008761157e565b611053919061168a565b61105d91906115bb565b949350505050565b60006110c7826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166111719092919063ffffffff16565b80519091501561061557808060200190518101906110e59190611519565b610615576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610848565b6060610baf848460008585843b6111e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610848565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161120d91906116a2565b60006040518083038185875af1925050503d806000811461124a576040519150601f19603f3d011682016040523d82523d6000602084013e61124f565b606091505b509150915061125f82828661126a565b979650505050505050565b60608315611279575081610bb2565b8251156112895782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108489190611622565b8035600f81900b8114610a1a57600080fd5b6000806000606084860312156112e457600080fd5b6112ed846112bd565b92506112fb602085016112bd565b9150604084013590509250925092565b600082601f83011261131c57600080fd5b6040516040810181811067ffffffffffffffff82111715611366577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b806040525080604084018581111561137d57600080fd5b845b8181101561139757803583526020928301920161137f565b509195945050505050565b600080606083850312156113b557600080fd5b6113bf848461130b565b946040939093013593505050565b6000806000606084860312156113e257600080fd5b833592506112fb602085016112bd565b6000806000806080858703121561140857600080fd5b611411856112bd565b935061141f602086016112bd565b93969395505050506040820135916060013590565b60006020828403121561144657600080fd5b5035919050565b6000806060838503121561146057600080fd5b82359150611471846020850161130b565b90509250929050565b6000806040838503121561148d57600080fd5b82359150611471602084016112bd565b80151581146114ab57600080fd5b50565b600080606083850312156114c157600080fd5b60408301848111156114d257600080fd5b839250356114df8161149d565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561152b57600080fd5b8151610bb28161149d565b60006020828403121561154857600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156115b6576115b661154f565b500290565b6000826115f1577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b838110156116115781810151838201526020016115f9565b838111156106ef5750506000910152565b60208152600082518060208401526116418160408501602087016115f6565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000828210156116855761168561154f565b500390565b6000821982111561169d5761169d61154f565b500190565b600082516116b48184602087016115f6565b919091019291505056fea2646970667358221220b08d13831afa17fcbabcc6391231128e0bf9b6bc55cff50eb2ad2f57ee46714464736f6c634300080a003360a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a00336101006040523480156200001257600080fd5b5060405162002bef38038062002bef8339810160408190526200003591620001ac565b6001600160a01b03831615806200005357506001600160a01b038216155b806200006657506001600160a01b038116155b156200008557604051635919af9760e11b815260040160405180910390fd5b6001600160a01b0380841660805282811660a052811660c081905260408051634163183360e11b815290516382c63066916004808201926020929091908290030181865afa158015620000dc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001029190620001f6565b6001600160a01b0390811660e05260a05160c05160405163095ea7b360e01b81529083166004820152600019602482015291169063095ea7b3906044016020604051808303816000875af11580156200015f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200018591906200021b565b505050506200023f565b80516001600160a01b0381168114620001a757600080fd5b919050565b600080600060608486031215620001c257600080fd5b620001cd846200018f565b9250620001dd602085016200018f565b9150620001ed604085016200018f565b90509250925092565b6000602082840312156200020957600080fd5b62000214826200018f565b9392505050565b6000602082840312156200022e57600080fd5b815180151581146200021457600080fd5b60805160a05160c05160e051612811620003de600039600081816105bd0152818161079c01528181610af001528181610c0201528181611359015281816119900152611d530152600081816104450152818161081801528181610a6a01528181610b5601528181610c6a01528181610dc301528181610f8c015281816110d40152818161128e015281816112d6015281816113be0152818161153e015281816115cc01528181611639015281816116a601528181611713015281816118120152818161189701528181611932015281816119f501528181611db701528181611df201528181611e5f0152611ef00152600081816106b101528181610a1601528181610d9b0152818161100601528181611064015281816114d6015281816117ad01528181611c5e0152611d03015260008181610395015281816109280152818161098001528181610ce901528181610d6d01528181610e7e01528181610ed501528181611147015281816111cb01528181611429015281816114ad0152818161178601528181611a8001528181611b2e0152611bd501526128116000f3fe6080604052600436106102e05760003560e01c806370a0823111610184578063d21220a7116100d6578063e31032731161008a578063f851a44011610064578063f851a44014610778578063fc0c546a1461078d578063fee3f7f9146107c057600080fd5b8063e310327314610723578063ed8e84f314610743578063f446c1d01461076357600080fd5b8063dd62ed3e116100bb578063dd62ed3e146106d3578063ddca3f43146106ee578063e2e7d2641461070357600080fd5b8063d21220a71461069f578063d96c7fce1461041e57600080fd5b8063b4b577ad11610138578063bb7b8b8011610112578063bb7b8b801461064a578063c66106571461065f578063cc2b27d71461067f57600080fd5b8063b4b577ad146105ff578063b739953e14610614578063b9947eb01461062f57600080fd5b806382c630661161016957806382c63066146105ab57806395d89b411461031f578063a6417ed6146105df57600080fd5b806370a082311461057b57806376a2f0f01461059657600080fd5b80631a4d01d21161023d5780634469e30e116101f15780635b36389c116101cb5780635b36389c146105265780635e0d443f1461054657806363543f061461056657600080fd5b80634469e30e1461041e5780634903b0d1146104f15780635409491a1461051157600080fd5b806323746eb81161022257806323746eb8146104b1578063313ce567146104675780633df02124146104d157600080fd5b80631a4d01d21461047c5780632081066c1461049c57600080fd5b80630f6ba8e31161029457806314f059791161027957806314f059791461041e57806316f0115b1461043357806318160ddd1461046757600080fd5b80630f6ba8e3146103dc578063140522881461040957600080fd5b806307211ef7116102c557806307211ef7146103415780630b4c7e4d146103615780630dfe16811461038357600080fd5b8063065a80d8146102ec57806306fdde031461031f57600080fd5b366102e757005b600080fd5b3480156102f857600080fd5b5061030c6103073660046123ee565b6107d5565b6040519081526020015b60405180910390f35b34801561032b57600080fd5b5061033461089f565b6040516103169190612435565b34801561034d57600080fd5b5061030c61035c366004612486565b6108d3565b34801561036d57600080fd5b5061038161037c3660046124d3565b610907565b005b34801561038f57600080fd5b506103b77f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610316565b3480156103e857600080fd5b506103fc6103f73660046124fe565b610b18565b604051610316919061253c565b34801561041557600080fd5b5061030c610b52565b34801561042a57600080fd5b506103fc610b18565b34801561043f57600080fd5b506103b77f000000000000000000000000000000000000000000000000000000000000000081565b34801561047357600080fd5b5061030c6108d3565b34801561048857600080fd5b5061038161049736600461256d565b610be8565b3480156104a857600080fd5b5061030c610dbf565b3480156104bd57600080fd5b506103b76104cc3660046123ee565b610e2c565b3480156104dd57600080fd5b506103816104ec366004612592565b610e49565b3480156104fd57600080fd5b5061030c61050c3660046125d4565b61125c565b34801561051d57600080fd5b5061030c6112d2565b34801561053257600080fd5b506103816105413660046125ed565b61133f565b34801561055257600080fd5b5061030c610561366004612486565b6114fa565b34801561057257600080fd5b5061030c6115c8565b34801561058757600080fd5b5061030c61035c36600461263f565b3480156105a257600080fd5b5061030c611635565b3480156105b757600080fd5b506103b77f000000000000000000000000000000000000000000000000000000000000000081565b3480156105eb57600080fd5b506103816105fa366004612592565b610b20565b34801561060b57600080fd5b5061030c6116a2565b34801561062057600080fd5b506103b761035c3660046123ee565b34801561063b57600080fd5b506103b761035c3660046125d4565b34801561065657600080fd5b5061030c61170f565b34801561066b57600080fd5b506103b761067a3660046125d4565b61177c565b34801561068b57600080fd5b5061030c61069a36600461265c565b6117d6565b3480156106ab57600080fd5b506103b77f000000000000000000000000000000000000000000000000000000000000000081565b3480156106df57600080fd5b5061030c61035c36600461267f565b3480156106fa57600080fd5b5061030c611893565b34801561070f57600080fd5b5061030c61071e3660046125d4565b611900565b34801561072f57600080fd5b5061038161073e3660046124d3565b611976565b34801561074f57600080fd5b5061030c61075e3660046126c6565b611d77565b34801561076f57600080fd5b5061030c611dee565b34801561078457600080fd5b506103b7611e5b565b34801561079957600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103b7565b3480156107cc57600080fd5b5061030c611eec565b6040517f4903b0d10000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff821660048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634903b0d1906024015b602060405180830381865afa158015610875573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089991906126f3565b92915050565b60606040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8135156109f25761095173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001633308535611f59565b6040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152823560048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632e1a7d4d90602401600060405180830381600087803b1580156109d957600080fd5b505af11580156109ed573d6000803e3d6000fd5b505050505b602082013515610a4257610a4273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001633306020860135611f59565b6040517f0b4c7e4d0000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690630b4c7e4d90843590610ab9908690869060040161273b565b6000604051808303818588803b158015610ad257600080fd5b505af1158015610ae6573d6000803e3d6000fd5b5050505050610b147f0000000000000000000000000000000000000000000000000000000000000000612035565b5050565b610b206123be565b6040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663140522886040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be391906126f3565b905090565b610c2a73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333086611f59565b6040517f1a4d01d200000000000000000000000000000000000000000000000000000000815260048101849052600f83900b6024820152604481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631a4d01d290606401600060405180830381600087803b158015610cc357600080fd5b505af1158015610cd7573d6000803e3d6000fd5b5050505081600f0b60001415610d96577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0476040518263ffffffff1660e01b81526004016000604051808303818588803b158015610d4f57600080fd5b505af1158015610d63573d6000803e3d6000fd5b5050505050610d917f0000000000000000000000000000000000000000000000000000000000000000612035565b505050565b610d917f0000000000000000000000000000000000000000000000000000000000000000612035565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632081066c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bbf573d6000803e3d6000fd5b6000610899826fffffffffffffffffffffffffffffffff1661177c565b83600f0b6000148015610e5f575082600f0b6001145b1561102f57610ea673ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333085611f59565b6040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018390527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632e1a7d4d90602401600060405180830381600087803b158015610f2e57600080fd5b505af1158015610f42573d6000803e3d6000fd5b50506040517f3df02124000000000000000000000000000000000000000000000000000000008152600f87810b600483015286900b602482015260448101859052606481018490527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169250633df02124915084906084016000604051808303818588803b158015610fe857600080fd5b505af1158015610ffc573d6000803e3d6000fd5b505050505061102a7f0000000000000000000000000000000000000000000000000000000000000000612035565b611256565b83600f0b6001148015611045575082600f0b6000145b156111ef5761108c73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333085611f59565b6040517f3df02124000000000000000000000000000000000000000000000000000000008152600f85810b600483015284900b602482015260448101839052606481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633df0212490608401600060405180830381600087803b15801561112d57600080fd5b505af1158015611141573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0476040518263ffffffff1660e01b81526004016000604051808303818588803b1580156111ad57600080fd5b505af11580156111c1573d6000803e3d6000fd5b505050505061102a7f0000000000000000000000000000000000000000000000000000000000000000612035565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f496e636f727265637420692c6a20706172616d6574657273000000000000000060448201526064015b60405180910390fd5b50505050565b6040517f4903b0d1000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634903b0d190602401610858565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635409491a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bbf573d6000803e3d6000fd5b61138173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333085611f59565b6040517f5b36389c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635b36389c906113f59085908590600401612753565b600060405180830381600087803b15801561140f57600080fd5b505af1158015611423573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0476040518263ffffffff1660e01b81526004016000604051808303818588803b15801561148f57600080fd5b505af11580156114a3573d6000803e3d6000fd5b50505050506114d17f0000000000000000000000000000000000000000000000000000000000000000612035565b610b147f0000000000000000000000000000000000000000000000000000000000000000612035565b6040517f5e0d443f000000000000000000000000000000000000000000000000000000008152600f84810b600483015283900b6024820152604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635e0d443f90606401602060405180830381865afa15801561159a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115be91906126f3565b90505b9392505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166363543f066040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bbf573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166376a2f0f06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bbf573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b4b577ad6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bbf573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb7b8b806040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bbf573d6000803e3d6000fd5b6000816117aa57507f0000000000000000000000000000000000000000000000000000000000000000919050565b507f0000000000000000000000000000000000000000000000000000000000000000919050565b919050565b6040517fcc2b27d700000000000000000000000000000000000000000000000000000000815260048101839052600f82900b60248201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063cc2b27d7906044015b602060405180830381865afa15801561186f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115c191906126f3565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bbf573d6000803e3d6000fd5b6040517fe2e7d264000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e2e7d26490602401610858565b6119b873ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333084611f59565b6040517fe310327300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e310327390611a2c908590859060040161273b565b600060405180830381600087803b158015611a4657600080fd5b505af1158015611a5a573d6000803e3d6000fd5b50505050600182600060028110611a7357611a7361270c565b60200201351115611c20577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0476040518263ffffffff1660e01b81526004016000604051808303818588803b158015611ae657600080fd5b505af1158015611afa573d6000803e3d6000fd5b50506040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600093507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1692506370a082319150602401602060405180830381865afa158015611b8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb091906126f3565b90506001811115611c1e57611c1e73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016337fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8401612110565b505b600160208301351115611d4e576040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015611cba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cde91906126f3565b90506001811115611d4c57611d4c73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016337fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8401612110565b505b610b147f0000000000000000000000000000000000000000000000000000000000000000612035565b6040517fed8e84f300000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063ed8e84f390611852908690869060040161276d565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f446c1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bbf573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ec8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be39190612785565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fee3f7f96040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bbf573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526112569085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612166565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa1580156120a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120c691906126f3565b90506001811115610b1457610b1473ffffffffffffffffffffffffffffffffffffffff8316337fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84015b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610d919084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401611fb3565b60006121c8826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166122729092919063ffffffff16565b805190915015610d9157808060200190518101906121e691906127a2565b610d91576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161124d565b60606115be848460008585843b6122e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161124d565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161230e91906127bf565b60006040518083038185875af1925050503d806000811461234b576040519150601f19603f3d011682016040523d82523d6000602084013e612350565b606091505b509150915061236082828661236b565b979650505050505050565b6060831561237a5750816115c1565b82511561238a5782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124d9190612435565b60405180604001604052806002906020820280368337509192915050565b8035600f81900b81146117d157600080fd5b60006020828403121561240057600080fd5b6115c1826123dc565b60005b8381101561242457818101518382015260200161240c565b838111156112565750506000910152565b6020815260008251806020840152612454816040850160208701612409565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b60008060006060848603121561249b57600080fd5b6124a4846123dc565b92506124b2602085016123dc565b9150604084013590509250925092565b806040810183101561089957600080fd5b600080606083850312156124e657600080fd5b6124f084846124c2565b946040939093013593505050565b600080600060a0848603121561251357600080fd5b61251d85856124c2565b925061252c85604086016124c2565b9150608084013590509250925092565b60408101818360005b6002811015612564578151835260209283019290910190600101612545565b50505092915050565b60008060006060848603121561258257600080fd5b833592506124b2602085016123dc565b600080600080608085870312156125a857600080fd5b6125b1856123dc565b93506125bf602086016123dc565b93969395505050506040820135916060013590565b6000602082840312156125e657600080fd5b5035919050565b6000806060838503121561260057600080fd5b8235915061261184602085016124c2565b90509250929050565b73ffffffffffffffffffffffffffffffffffffffff8116811461263c57600080fd5b50565b60006020828403121561265157600080fd5b81356115c18161261a565b6000806040838503121561266f57600080fd5b82359150612611602084016123dc565b6000806040838503121561269257600080fd5b823561269d8161261a565b915060208301356126ad8161261a565b809150509250929050565b801515811461263c57600080fd5b600080606083850312156126d957600080fd5b6126e384846124c2565b915060408301356126ad816126b8565b60006020828403121561270557600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60608101604084833760409190910191909152919050565b828152606081016040836020840137600081529392505050565b60608101604084833791151560409190910152919050565b60006020828403121561279757600080fd5b81516115c18161261a565b6000602082840312156127b457600080fd5b81516115c1816126b8565b600082516127d1818460208701612409565b919091019291505056fea264697066735822122081240fa8050b2fa22575231ebf9e640e9f60a23c0734c9b91c145262e1655b7064736f6c634300080a00336101406040523480156200001257600080fd5b506040516200171338038062001713833981016040819052620000359162000389565b6000805460ff191690558484828260c882826001600160a01b0381166200006f57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000ae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d49190620004b3565b6001600160a01b0316608052508051620000f6906002906020840190620002b0565b505060a052506001600160a01b0382166200012457604051635919af9760e11b815260040160405180910390fd5b6001600160a01b03821660c0819052670de0b6b3a764000060e05260408051630176f71760e71b815290516000929163bb7b8b809160048083019260209291908290030181865afa1580156200017e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001a49190620004d8565b9050620001b18162000210565b505050506001600160a01b0383161580620001d357506001600160a01b038216155b15620001f257604051635919af9760e11b815260040160405180910390fd5b506001600160a01b0391821661010052166101205250620005a59050565b806200022f576040516309aadd6f60e41b815260040160405180910390fd5b60018190557f82e7ee47180a631312683eeb2a85ad264c9af490d54de5a75bbdb95b968c6de28162000261816200027c565b6040805192835260208301919091520160405180910390a150565b60a0516000906127109062000292908262000508565b6200029e908462000523565b620002aa919062000545565b92915050565b828054620002be9062000568565b90600052602060002090601f016020900481019282620002e257600085556200032d565b82601f10620002fd57805160ff19168380011785556200032d565b828001600101855582156200032d579182015b828111156200032d57825182559160200191906001019062000310565b506200033b9291506200033f565b5090565b5b808211156200033b576000815560010162000340565b80516001600160a01b03811681146200036e57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600080600080600060a08688031215620003a257600080fd5b620003ad8662000356565b94506020620003be81880162000356565b9450620003ce6040880162000356565b9350620003de6060880162000356565b60808801519093506001600160401b0380821115620003fc57600080fd5b818901915089601f8301126200041157600080fd5b81518181111562000426576200042662000373565b604051601f8201601f19908116603f0116810190838211818310171562000451576200045162000373565b816040528281528c868487010111156200046a57600080fd5b600093505b828410156200048e57848401860151818501870152928501926200046f565b82841115620004a05760008684830101525b8096505050505050509295509295909350565b600060208284031215620004c657600080fd5b620004d18262000356565b9392505050565b600060208284031215620004eb57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156200051e576200051e620004f2565b500190565b6000816000190483118215151615620005405762000540620004f2565b500290565b6000826200056357634e487b7160e01b600052601260045260246000fd5b500490565b600181811c908216806200057d57607f821691505b602082108114156200059f57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c05160e05161010051610120516110e66200062d6000396000818161034101526107c80152600081816102f701526107190152600081816102d00152610923015260008181610195015261088701526000818161015b0152610b150152600081816102a90152818161039901528181610515015261064d01526110e66000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c80639a6fc8f5116100cd578063b09ad8a011610081578063d62ada1111610066578063d62ada1114610334578063e5693f411461033c578063feaf968c1461036357600080fd5b8063b09ad8a014610319578063bc489a651461032157600080fd5b8063a50cf2c8116100b2578063a50cf2c8146102a4578063a834559e146102cb578063ab0ca0e1146102f257600080fd5b80639a6fc8f514610251578063a384d6ff1461029b57600080fd5b80633fd0875f116101245780635c975abb116101095780635c975abb1461021d5780637284e416146102345780638456cb591461024957600080fd5b80633fd0875f1461020057806354fd4d501461021557600080fd5b806312b495a814610156578063218751b214610190578063313ce567146101dc5780633f4ba83a146101f6575b600080fd5b61017d7f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b6101b77f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610187565b6101e4600881565b60405160ff9091168152602001610187565b6101fe61036b565b005b610208600281565b6040516101879190610cd5565b61017d600181565b60005460ff165b6040519015158152602001610187565b61023c610459565b6040516101879190610d16565b6101fe6104e7565b61026461025f366004610da1565b6105d3565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610187565b61017d60015481565b6101b77f000000000000000000000000000000000000000000000000000000000000000081565b61017d7f000000000000000000000000000000000000000000000000000000000000000081565b6101b77f000000000000000000000000000000000000000000000000000000000000000081565b61017d61060d565b6101fe61032f366004610dc5565b61061f565b610224600181565b6101b77f000000000000000000000000000000000000000000000000000000000000000081565b61026461070f565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156103f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104199190610dde565b61044f576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610457610965565b565b6002805461046690610e00565b80601f016020809104026020016040519081016040528092919081815260200182805461049290610e00565b80156104df5780601f106104b4576101008083540402835291602001916104df565b820191906000526020600020905b8154815290600101906020018083116104c257829003601f168201915b505050505081565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015610571573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105959190610dde565b6105cb576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610457610a4b565b60008060008060006040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061061a600154610b0b565b905090565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156106a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106cd9190610dde565b610703576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61070c81610b54565b50565b60008060008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610782573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a69190610e54565b9398509196509450925090506107be85858484610bd6565b60008060008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610831573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108559190610e54565b9450945094509450945061086b85858484610bd6565b88841215610883578499508398508297508196508095505b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb7b8b806040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109149190610eac565b905061091f81610c71565b90507f000000000000000000000000000000000000000000000000000000000000000061094c828c610ef4565b6109569190610fdf565b99505050505050509091929394565b60005460ff166109d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff1615610ab8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016109cd565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610a213390565b6000612710610b3a7f000000000000000000000000000000000000000000000000000000000000000082611047565b610b44908461105f565b610b4e919061109c565b92915050565b80610b8b576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190557f82e7ee47180a631312683eeb2a85ad264c9af490d54de5a75bbdb95b968c6de281610bbb81610b0b565b6040805192835260208301919091520160405180910390a150565b60008313610c10576040517f56e05d2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8369ffffffffffffffffffff168169ffffffffffffffffffff161080610c34575081155b15610c6b576040517fb1cf675500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60015460009080831015610cb1576040517fb416da7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610cbc82610b0b565b905080841115610ccd579392505050565b509192915050565b6020810160068310610d10577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b600060208083528351808285015260005b81811015610d4357858101830151858201604001528201610d27565b81811115610d55576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b69ffffffffffffffffffff8116811461070c57600080fd5b600060208284031215610db357600080fd5b8135610dbe81610d89565b9392505050565b600060208284031215610dd757600080fd5b5035919050565b600060208284031215610df057600080fd5b81518015158114610dbe57600080fd5b600181811c90821680610e1457607f821691505b60208210811415610e4e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600080600080600060a08688031215610e6c57600080fd5b8551610e7781610d89565b809550506020860151935060408601519250606086015191506080860151610e9e81610d89565b809150509295509295909350565b600060208284031215610ebe57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615610f3557610f35610ec5565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615610f7057610f70610ec5565b60008712925087820587128484161615610f8c57610f8c610ec5565b87850587128184161615610fa257610fa2610ec5565b505050929093029392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082610fee57610fee610fb0565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f80000000000000000000000000000000000000000000000000000000000000008314161561104257611042610ec5565b500590565b6000821982111561105a5761105a610ec5565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561109757611097610ec5565b500290565b6000826110ab576110ab610fb0565b50049056fea2646970667358221220ca5730f8ac976a41fd1283a55d712276536b576394940abc65027e8592280cc364736f6c634300080a00336102606040523480156200001257600080fd5b506040516200676a3803806200676a833981016040819052620000359162000bac565b828282600083838383600284846001600160a01b03821615806200006057506001600160a01b038116155b156200007f57604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038216608081905260408051632f7a188160e01b81529051632f7a1881916004808201926020929091908290030181865afa158015620000ca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000f0919062000bf6565b6001600160a01b0390811660a05290811660c05260016000558416151590506200012d57604051635919af9760e11b815260040160405180910390fd5b608051604051630f67c5bd60e41b81526001600160a01b0385811660048301529091169063f67c5bd090602401602060405180830381865afa15801562000178573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200019e919062000c1b565b620001cc57604051634c607af960e11b81526001600160a01b03841660048201526024015b60405180910390fd5b6001600160a01b038084166101e081905261020052821661022052610240819052620001f9600062000912565b6001600160a01b031660e05262000211600162000912565b6001600160a01b0316610100526200022a600262000912565b6001600160a01b03166101205262000243600362000912565b6001600160a01b0316610140526200025c600062000a05565b6001600160a01b03166101605262000275600162000a05565b6001600160a01b0316610180526200028e600262000a05565b6001600160a01b03166101a052620002a7600362000a05565b6001600160a01b039081166101c05260e051161580620002d15750610100516001600160a01b0316155b15620002f057604051635919af9760e11b815260040160405180910390fd5b6002811180156200030b5750610120516001600160a01b0316155b156200032a57604051635919af9760e11b815260040160405180910390fd5b600381118015620003455750610140516001600160a01b0316155b156200036457604051635919af9760e11b815260040160405180910390fd5b60805160e051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620003b1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003d7919062000c1b565b620004055760e051604051634c607af960e11b81526001600160a01b039091166004820152602401620001c3565b60805161010051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa15801562000453573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000479919062000c1b565b620004a85761010051604051634c607af960e11b81526001600160a01b039091166004820152602401620001c3565b6002811180156200052a575060805161012051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa15801562000502573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000528919062000c1b565b155b156200055a5761012051604051634c607af960e11b81526001600160a01b039091166004820152602401620001c3565b600381118015620005dc575060805161014051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620005b4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005da919062000c1b565b155b156200060c5761014051604051634c607af960e11b81526001600160a01b039091166004820152602401620001c3565b610160516001600160a01b03161580159062000699575060805161016051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa15801562000671573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000697919062000c1b565b155b15620006c95761016051604051634c607af960e11b81526001600160a01b039091166004820152602401620001c3565b610180516001600160a01b03161580159062000756575060805161018051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa1580156200072e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000754919062000c1b565b155b15620007865761018051604051634c607af960e11b81526001600160a01b039091166004820152602401620001c3565b6101a0516001600160a01b0316158015906200081357506080516101a051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620007eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000811919062000c1b565b155b1562000843576101a051604051634c607af960e11b81526001600160a01b039091166004820152602401620001c3565b6101c0516001600160a01b031615801590620008d057506080516101c051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620008a8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008ce919062000c1b565b155b1562000900576101c051604051634c607af960e11b81526001600160a01b039091166004820152602401620001c3565b50505050505050505050505062000c5b565b60c05160405163c661065760e01b8152600481018390526000916001600160a01b03169063c661065790602401602060405180830381865afa9250505080156200097b575060408051601f3d908101601f19168201909252620009789181019062000bf6565b60015b62000986576200098c565b92915050565b60c05160405163046e8dd760e31b8152600f84900b60048201526001600160a01b03909116906323746eb8906024015b602060405180830381865afa925050508015620009f8575060408051601f3d908101601f19168201909252620009f59181019062000bf6565b60015b6200098657506000919050565b610220516000906001600160a01b03161562000a2657620009868262000ac8565b60c051604051630b9947eb60e41b8152600481018490526001600160a01b039091169063b9947eb090602401602060405180830381865afa92505050801562000a8e575060408051601f3d908101601f1916820190925262000a8b9181019062000bf6565b60015b620009865760c051604051635b9cca9f60e11b8152600f84900b60048201526001600160a01b039091169063b739953e90602401620009bc565b60008162000adc5762000986600062000b1f565b610220516001600160a01b031663c661065762000afb60018562000c35565b6040518263ffffffff1660e01b8152600401620009bc91815260200190565b919050565b600081600f0b6000141562000b33575060e0515b81600f0b6001141562000b465750610100515b81600f0b6002141562000b595750610120515b81600f0b6003141562000b6c5750610140515b6001600160a01b03811662000b1a576040516334769e6f60e21b815260040160405180910390fd5b80516001600160a01b038116811462000b1a57600080fd5b60008060006060848603121562000bc257600080fd5b62000bcd8462000b94565b925062000bdd6020850162000b94565b915062000bed6040850162000b94565b90509250925092565b60006020828403121562000c0957600080fd5b62000c148262000b94565b9392505050565b60006020828403121562000c2e57600080fd5b5051919050565b60008282101562000c5657634e487b7160e01b600052601160045260246000fd5b500390565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e0516102005161022051610240516156ff6200106b6000396000818161077001528181613c6701528181613d5901528181613e9901528181614050015261416a015260006105f101526000818161068801528181610f4e015281816110f1015281816115fe015281816117a301528181611ae301528181611c770152818161251e0152818161279f01528181612af801528181612e1f015281816130c4015281816137a60152613844015260006108a701526000818161059c01526131c60152600081816103d4015261319701526000818161061801526131680152600081816106af015261313901526000818161087001528181612f9e01528181613dc3015281816146c20152614b560152600081816104fd01528181612f6f01528181613cd1015281816145f20152614a3a0152600081816107da01528181612f4001528181613bdd01528181614522015261491e01526000818161045d01528181612f1101528181613b1101528181614452015261480201526000818161072201528181610914015281816109e101528181610a7101528181610b6901528181610cd601528181610d5301528181610dea01528181610e7a01528181610f26015281816110c9015281816114b20152818161152a015281816115d60152818161177b0152818161192d015281816119c701528181611a0f01528181611abb01528181611c4f01528181611d3801528181611d8001528181611e3101528181611e660152818161214f01528181612246015281816122be01528181612363015281816125680152818161262001528181612655015281816126f00152818161277701528181612b7901528181612bb401528181612c2101528181612cb2015281816133e401528181613503015281816135dd015281816147da015281816148f601528181614a1201528181614b2e0152614c760152600081816105240152818161324f01528181614d1d0152614df701526000818161074901528181610f9c0152818161113f015281816112420152818161164c015281816117f101528181611b3101528181611cc501528181611f71015281816124aa015281816127ed0152818161299e01528181612d4c01528181612e470152818161303c0152818161343a015281816134d401528181613633015281816136db0152818161399501528181613a4c01528181613b3c01528181613c0501528181613cf901528181613deb015281816143850152818161447a0152818161454a0152818161461a015281816146ea015281816148500152818161496c01528181614a8801528181614ba401528181614c4701528181614d8701528181614e7f01528181614f330152614fdd01526156ff6000f3fe608060405234801561001057600080fd5b50600436106103a45760003560e01c806378aa73a4116101e9578063ce30bbdb1161010f578063e3103273116100ad578063f446c1d01161007c578063f446c1d014610892578063f851a4401461089a578063fc0c546a146108a2578063fee3f7f9146108c957600080fd5b8063e310327314610832578063ec026ca714610845578063ed8e84f314610858578063ef14101e1461086b57600080fd5b8063d96c7fce116100e9578063d96c7fce146107fc578063dd62ed3e14610804578063ddca3f4314610817578063e2e7d2641461081f57600080fd5b8063ce30bbdb146107b3578063cf023dd0146107c2578063d21220a7146107d557600080fd5b8063b739953e11610187578063c12c21c011610156578063c12c21c014610744578063c21ee1621461076b578063c661065714610792578063cc2b27d7146107a057600080fd5b8063b739953e146106f4578063b9947eb014610707578063bb7b8b8014610715578063bd90df701461071d57600080fd5b80638ba51dfc116101c35780638ba51dfc146106aa57806395d89b41146106d1578063a6417ed6146106d9578063b4b577ad146106ec57600080fd5b806378aa73a41461065557806379bea6641461067057806382c630661461068357600080fd5b80632f7a1881116102ce57806357d788751161026c57806364a89bca1161023b57806364a89bca146105ec5780636e1d82711461061357806370a082311461063a57806376a2f0f01461064d57600080fd5b806357d78875146105975780635b36389c146105be5780635e0d443f146105d157806363543f06146105e457600080fd5b80633df02124116102a85780633df02124146105615780634469e30e146105745780634903b0d11461057c5780635409491a1461058f57600080fd5b80632f7a18811461051f578063313ce5671461054657806333d2ebf21461054e57600080fd5b806314052288116103465780631af4de83116103155780631af4de83146104ca5780632081066c146104dd57806323746eb8146104e557806325be124e146104f857600080fd5b8063140522881461049f57806314f05979146104a757806318160ddd146104af5780631a4d01d2146104b757600080fd5b806307211ef71161038257806307211ef7146104305780630b4c7e4d146104435780630dfe1681146104585780630f6ba8e31461047f57600080fd5b8063065a80d8146103a957806306871163146103cf57806306fdde031461041b575b600080fd5b6103bc6103b7366004615071565b6108d1565b6040519081526020015b60405180910390f35b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016103c6565b610423610a6d565b6040516103c69190615102565b6103bc61043e366004615115565b610b25565b610456610451366004615162565b610bf4565b005b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b61049261048d36600461518d565b610c91565b6040516103c691906151cb565b6103bc610d4f565b610492610de0565b6103bc610e76565b6104566104c53660046151fc565b610ee3565b6104566104d8366004615115565b6111a0565b6103bc6114ae565b6103f66104f3366004615071565b61151b565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc611526565b61045661055c366004615221565b611593565b61045661056f36600461524b565b611852565b610492611923565b6103bc61058a36600461528d565b611995565b6103bc611a0b565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6104566105cc3660046152a6565b611a78565b6103bc6105df366004615115565b611cf4565b6103bc611d7c565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc6106483660046152f5565b611de9565b6103bc611e62565b61065d600281565b60405161ffff90911681526020016103c6565b61045661067e366004615115565b611ecf565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b61042361214b565b6104566106e736600461524b565b6121b8565b6103bc612242565b6103f6610702366004615071565b6122af565b6103f661070236600461528d565b6103bc6122ba565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc7f000000000000000000000000000000000000000000000000000000000000000081565b6103f66104f336600461528d565b6103bc6107ae366004615312565b612327565b60086040516103c69190615335565b6104566107d03660046151fc565b6123e4565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b61049261255e565b6103bc610812366004615376565b6125d0565b6103bc612651565b6103bc61082d36600461528d565b6126be565b610456610840366004615162565b612734565b610456610853366004615221565b6128d8565b6103bc6108663660046153af565b612b39565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc612bb0565b6103f6612c1d565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc612cae565b6040517f4903b0d10000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff821660048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634903b0d1906024015b602060405180830381865afa9250505080156109ab575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526109a8918101906153e1565b60015b610a62576040517f065a80d8000000000000000000000000000000000000000000000000000000008152600f83900b60048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063065a80d8906024015b602060405180830381865afa158015610a3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6291906153e1565b92915050565b919050565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015610ada573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b2091908101906154bb565b905090565b6040517f07211ef7000000000000000000000000000000000000000000000000000000008152600f84810b600483015283900b6024820152604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906307211ef7906064015b602060405180830381865afa158015610bc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bea91906153e1565b90505b9392505050565b60026000541415610c66576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b60026000908155610c8890600184358110916020860135919091119080612d1b565b50506001600055565b610c99615041565b6040517f0f6ba8e300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690630f6ba8e390610d0f9087908790879060040161550c565b6040805180830381865afa158015610d2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bea9190615533565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663140522886040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2091906153e1565b610de8615041565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166314f059796040518163ffffffff1660e01b81526004016040805180830381865afa158015610e52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b209190615533565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b6040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015610fe057600080fd5b505af1158015610ff4573d6000803e3d6000fd5b5050505060026000541415611065576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b6002600090815561107583612f00565b90506110808161300b565b5060016000556040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561118357600080fd5b505af1158015611197573d6000803e3d6000fd5b50505050505050565b6002600054141561120d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa15801561129e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c291906155b3565b905060006112cf85613128565b905060006112dc85613128565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529192506000918416906370a0823190602401602060405180830381865afa15801561134e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137291906153e1565b905060018111156114a0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce80000006113b887846155d0565b6113c29190615634565b604051600f8a810b602483015289900b6044820152606481018490526084810182905290915061149d908690869086907fa6417ed6000000000000000000000000000000000000000000000000000000009060a4015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152600180613232565b50505b505060016000555050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632081066c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b6000610a6282612f00565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b6040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561169057600080fd5b505af11580156116a4573d6000803e3d6000fd5b5050505060026000541415611715576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b6002600090815561172583612f00565b90506117328382846136aa565b5060016000556040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d906084015b600060405180830381600087803b15801561183657600080fd5b505af115801561184a573d6000803e3d6000fd5b505050505050565b600260005414156118bf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b600260009081556118cf85612f00565b905060006118dc85612f00565b90506114a082826000368080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525060019350915061394c9050565b61192b615041565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16634469e30e6040518163ffffffff1660e01b81526004016040805180830381865afa158015610e52573d6000803e3d6000fd5b6040517f4903b0d1000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634903b0d190602401610954565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635409491a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b6040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015611b7557600080fd5b505af1158015611b89573d6000803e3d6000fd5b5050505060026000541415611bfa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b6002600055611c07613a1b565b60016000556040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d9060840161181c565b6040517f5e0d443f000000000000000000000000000000000000000000000000000000008152600f84810b600483015283900b6024820152604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635e0d443f90606401610ba9565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166363543f066040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401610a21565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166376a2f0f06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b60026000541415611f3c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611fcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ff191906155b3565b90506000611ffe85612f00565b9050600061200b85612f00565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529192506000918416906370a0823190602401602060405180830381865afa15801561207d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120a191906153e1565b905060018111156114a0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce80000006120e787846155d0565b6120f19190615634565b604051600f8a810b602483015289900b6044820152606481018490526084810182905290915061149d908690869086907f3df02124000000000000000000000000000000000000000000000000000000009060a401611418565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610ada573d6000803e3d6000fd5b60026000541415612225576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b6002600090815561223585613128565b905060006118dc85613128565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b4b577ad6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b6000610a6282613128565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb7b8b806040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b6040517fcc2b27d700000000000000000000000000000000000000000000000000000000815260048101839052600f82900b60248201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063cc2b27d7906044015b602060405180830381865afa1580156123c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bed91906153e1565b60026000541415612451576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b6002600090815561246183612f00565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa1580156124f1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251591906155b3565b905061255181837f0000000000000000000000000000000000000000000000000000000000000000612548888a89613e95565b60016000613232565b5050600160005550505050565b612566615041565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d96c7fce6040518163ffffffff1660e01b81526004016040805180830381865afa158015610e52573d6000803e3d6000fd5b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063dd62ed3e906044016123a3565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b6040517fe2e7d264000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e2e7d26490602401610a21565b6040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561283157600080fd5b505af1158015612845573d6000803e3d6000fd5b50505050600260005414156128b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b60026000908155611c0790600184358110916020860135919091119080614354565b60026000541415612945576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b6002600090815561295583612f00565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa1580156129e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a0991906155b3565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000918416906370a0823190602401602060405180830381865afa158015612a7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a9f91906153e1565b90506001811115612b2d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce8000000612ae586846155d0565b612aef9190615634565b9050612b2a83857f0000000000000000000000000000000000000000000000000000000000000000612b228a8787613e95565b600180613232565b50505b50506001600055505050565b6040517fed8e84f300000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063ed8e84f3906123a3908690869060040161566f565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f446c1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2091906155b3565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fee3f7f96040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612da8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dcc91906155b3565b9050612dda85858585614791565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015612e8b57600080fd5b505af1158015612e9f573d6000803e3d6000fd5b50505050612ee36000368080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250614c0792505050565b50612ef085858585614791565b612ef981614d05565b5050505050565b600081600f0b60001415612f3157507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b60011415612f6057507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b60021415612f8f57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b60031415612fbe57507f00000000000000000000000000000000000000000000000000000000000000005b73ffffffffffffffffffffffffffffffffffffffff8116610a68576040517fd1da79bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015613098573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130bc91906155b3565b9050613123817f0000000000000000000000000000000000000000000000000000000000000000846000368080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525092508291506132329050565b505050565b600081600f0b6000141561315957507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6001141561318857507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b600214156131b757507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b60031415612fbe57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff8116610a68576040517fd1da79bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606000803373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461339b576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301528916906370a0823190602401602060405180830381865afa1580156132e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061330491906153e1565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152919350908816906370a0823190602401602060405180830381865afa158015613374573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061339891906153e1565b90505b8415613497576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561347e57600080fd5b505af1158015613492573d6000803e3d6000fd5b505050505b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a9061352d9033907f0000000000000000000000000000000000000000000000000000000000000000908b90600401615687565b6000604051808303816000875af115801561354c573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261359291908101906154bb565b92508415613690576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561367757600080fd5b505af115801561368b573d6000803e3d6000fd5b505050505b61369e898989858589614ddf565b50509695505050505050565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015613737573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061375b91906155b3565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000917f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa1580156137ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061381191906153e1565b90506001811115612ef9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0161184a827f0000000000000000000000000000000000000000000000000000000000000000867f1a4d01d200000000000000000000000000000000000000000000000000000000858a6b033b2e3c9fd0803ce800000061389e8b846155d0565b6138a89190615634565b6040516024810193909352600f9190910b60448301526064820152608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915260006001613232565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015260609060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa1580156139dc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a0091906155b3565b9050613a10818888888888613232565b979650505050505050565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015613aa8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613acc91906155b3565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301529192507f0000000000000000000000000000000000000000000000000000000000000000909116906351e3f16090604401600060405180830381600087803b158015613b8257600080fd5b505af1158015613b96573d6000803e3d6000fd5b50506040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f00000000000000000000000000000000000000000000000000000000000000001692506351e3f1609150604401600060405180830381600087803b158015613c4b57600080fd5b505af1158015613c5f573d6000803e3d6000fd5b5050505060027f00000000000000000000000000000000000000000000000000000000000000001115613e48576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015613d3d57600080fd5b505af1158015613d51573d6000803e3d6000fd5b5050505060037f00000000000000000000000000000000000000000000000000000000000000001115613e48576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015613e2f57600080fd5b505af1158015613e43573d6000803e3d6000fd5b505050505b613e886000368080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250614c0792505050565b50613e9281614d05565b50565b60607f00000000000000000000000000000000000000000000000000000000000000006002141561404e5783600f0b600014613f8b576040516000602482015260448101849052606481018390527f0b4c7e4d00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152614047565b6040516024810184905260006044820152606481018390527f0b4c7e4d00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091525b9050610bed565b7f0000000000000000000000000000000000000000000000000000000000000000600314156141685783600f0b60001461411f5783600f0b6001146140d657604051600060248201819052604482015260648101849052608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401613f09565b604051600060248201819052604482018590526064820152608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401613f09565b604051602481018490526000604482018190526064820152608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401613fc9565b7f0000000000000000000000000000000000000000000000000000000000000000600414156142f25783600f0b6000146142a25783600f0b6001146142525783600f0b600214614202576040516000602482018190526044820181905260648201526084810184905260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613f09565b6040516000602482018190526044820181905260648201859052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613f09565b6040516000602482018190526044820185905260648201819052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613f09565b6040516024810184905260006044820181905260648201819052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613fc9565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f496e636f7272656374206e436f696e73000000000000000000000000000000006044820152606401610c5d565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156143e1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061440591906155b3565b905084156144d7576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156144be57600080fd5b505af11580156144d2573d6000803e3d6000fd5b505050505b83156145a7576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561458e57600080fd5b505af11580156145a2573d6000803e3d6000fd5b505050505b8215614677576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561465e57600080fd5b505af1158015614672573d6000803e3d6000fd5b505050505b8115614747576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561472e57600080fd5b505af1158015614742573d6000803e3d6000fd5b505050505b6147876000368080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250614c0792505050565b50612ef981614d05565b83156148ad576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561489457600080fd5b505af11580156148a8573d6000803e3d6000fd5b505050505b82156149c9576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156149b057600080fd5b505af11580156149c4573d6000803e3d6000fd5b505050505b8115614ae5576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015614acc57600080fd5b505af1158015614ae0573d6000803e3d6000fd5b505050505b8015614c01576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015614be857600080fd5b505af1158015614bfc573d6000803e3d6000fd5b505050505b50505050565b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815260609073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a90614ca09033907f0000000000000000000000000000000000000000000000000000000000000000908790600401615687565b6000604051808303816000875af1158015614cbf573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610a6291908101906154bb565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614613e92576040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015614dcb57600080fd5b505af1158015612ef9573d6000803e3d6000fd5b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614614ee0576040517f654a9eda00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528681166024830152858116604483015260648201859052608482018490527f0000000000000000000000000000000000000000000000000000000000000000169063654a9eda9060a401600060405180830381600087803b158015614ec357600080fd5b505af1158015614ed7573d6000803e3d6000fd5b5050505061184a565b8015614f90576040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015286811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b158015614f7757600080fd5b505af1158015614f8b573d6000803e3d6000fd5b505050505b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015285811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561502157600080fd5b505af1158015615035573d6000803e3d6000fd5b50505050505050505050565b60405180604001604052806002906020820280368337509192915050565b8035600f81900b8114610a6857600080fd5b60006020828403121561508357600080fd5b610bed8261505f565b60005b838110156150a757818101518382015260200161508f565b83811115614c015750506000910152565b600081518084526150d081602086016020860161508c565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610bed60208301846150b8565b60008060006060848603121561512a57600080fd5b6151338461505f565b92506151416020850161505f565b9150604084013590509250925092565b8060408101831015610a6257600080fd5b6000806060838503121561517557600080fd5b61517f8484615151565b946040939093013593505050565b600080600060a084860312156151a257600080fd5b6151ac8585615151565b92506151bb8560408601615151565b9150608084013590509250925092565b60408101818360005b60028110156151f35781518352602092830192909101906001016151d4565b50505092915050565b60008060006060848603121561521157600080fd5b833592506151416020850161505f565b6000806040838503121561523457600080fd5b61523d8361505f565b946020939093013593505050565b6000806000806080858703121561526157600080fd5b61526a8561505f565b93506152786020860161505f565b93969395505050506040820135916060013590565b60006020828403121561529f57600080fd5b5035919050565b600080606083850312156152b957600080fd5b823591506152ca8460208501615151565b90509250929050565b73ffffffffffffffffffffffffffffffffffffffff81168114613e9257600080fd5b60006020828403121561530757600080fd5b8135610bed816152d3565b6000806040838503121561532557600080fd5b823591506152ca6020840161505f565b6020810160118310615370577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000806040838503121561538957600080fd5b8235615394816152d3565b915060208301356153a4816152d3565b809150509250929050565b600080606083850312156153c257600080fd5b6153cc8484615151565b9150604083013580151581146153a457600080fd5b6000602082840312156153f357600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff80841115615444576154446153fa565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171561548a5761548a6153fa565b816040528093508581528686860111156154a357600080fd5b6154b186602083018761508c565b5050509392505050565b6000602082840312156154cd57600080fd5b815167ffffffffffffffff8111156154e457600080fd5b8201601f810184136154f557600080fd5b61550484825160208401615429565b949350505050565b60a08101604085833760408201600081526040858237506080919091019190915292915050565b60006040828403121561554557600080fd5b82601f83011261555457600080fd5b6040516040810181811067ffffffffffffffff82111715615577576155776153fa565b806040525080604084018581111561558e57600080fd5b845b818110156155a8578051835260209283019201615590565b509195945050505050565b6000602082840312156155c557600080fd5b8151610bed816152d3565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561562f577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500290565b60008261566a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60608101604084833791151560409190910152919050565b600073ffffffffffffffffffffffffffffffffffffffff8086168352808516602084015250606060408301526156c060608301846150b8565b9594505050505056fea26469706673582212207da93df0ea215a9f805ea990de2f12879616c2162f3b99a64c1bf74f48baf1e664736f6c634300080a003360806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d00011790553480156200003a57600080fd5b506040805161018081019091526000908060c081018060018152604080518082018252600381526244414960e81b6020828101919091528301526012908201526305f5e100606082015260800160018152602001600081525081526020016040518060c001604052806002600a811115620000b957620000b962000b78565b815260408051808201825260048152635553444360e01b6020828101919091528301526006908201526305f5e100606082015260800160018152602001600081525081526020016040518060c001604052806003600a81111562000121576200012162000b78565b815260408051808201825260048152630ae8aa8960e31b602082810191909152830152601290820152644a817c8000606082015260800160028152602001600081525081526020016040518060c001604052806004600a8111156200018a576200018a62000b78565b815260408051808201825260048152634c494e4b60e01b6020828101919091528301526012908201526359682f00606082015260800160018152602001600081525081526020016040518060c001604052806005600a811115620001f257620001f262000b78565b815260408051808201825260048152631554d11560e21b602082810191909152830152601290820152633b023380606082015260800160018152602001600081525081526020016040518060c001604052806006600a8111156200025a576200025a62000b78565b815260408051808201825260058152640e6e88aa8960db1b602082810191909152830152601290820152644cd588640060608201526080016003815260200160009052905260408051610140810190915290915060009080608081018060078152602001604051806040016040528060048152602001636344414960e01b8152508152602001601260ff1681526020016305f5e100815260200160048081111562000309576200030962000b78565b8152602001600181525081526020016040518060c001604052806008600a81111562000339576200033962000b78565b81526040805180820182526005815264635553444360d81b6020828101919091528301526006908201526305f5e100606082015260800160048152602001600281525081526020016040518060c001604052806009600a811115620003a257620003a262000b78565b8152604080518082018252600581526418d554d11560da1b602082810191909152830152601290820152633b023380606082015260800160048152602001600581525081526020016040518060c00160405280600a808111156200040a576200040a62000b78565b81526040805180820182526005815264634c494e4b60d81b6020828101919091528301526012908201526359682f00606082015260800160048152602001600490529052905060005b600681101562000496576200048183826006811062000476576200047662000b8e565b6020020151620004db565b806200048d8162000ba4565b91505062000453565b5060005b6004811015620004d257620004bd82826004811062000476576200047662000b8e565b80620004c98162000ba4565b9150506200049a565b50505062000d14565b6000600282608001516004811115620004f857620004f862000b78565b14156200054e576040516200050d9062000a8c565b604051809103906000f0801580156200052a573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b03831617905590506200071e565b60038260800151600481111562000569576200056962000b78565b1415620005a4576040516200057e9062000a9a565b604051809103906000f0801580156200059b573d6000803e3d6000fd5b5090506200071e565b600182608001516004811115620005bf57620005bf62000b78565b1415620005f157816020015182602001518360400151604051620005e39062000aa8565b6200057e9392919062000c1e565b6004826080015160048111156200060c576200060c62000b78565b1415620006be576000600260008460a00151600a81111562000632576200063262000b78565b600a81111562000646576200064662000b78565b815260200190815260200160002060009054906101000a90046001600160a01b0316905082602001518360200151846040015183604051620006889062000ab6565b62000697949392919062000c5b565b604051809103906000f080158015620006b4573d6000803e3d6000fd5b509150506200071e565b60405162461bcd60e51b815260206004820152602b60248201527f74657374546f6b656e53756974653a204372656174696e6720756e6b6e6f776e60448201526a20746f6b656e207479706560a81b606482015260840160405180910390fd5b60005460208301516040516318caf8e360e31b8152620100009092046001600160a01b03169163c657c718916200075b9185919060040162000ca9565b600060405180830381600087803b1580156200077657600080fd5b505af11580156200078b573d6000803e3d6000fd5b50505050600082606001516008604051620007a69062000ac4565b91825260ff166020820152604001604051809103906000f080158015620007d1573d6000803e3d6000fd5b50905081600260008560000151600a811115620007f257620007f262000b78565b600a81111562000806576200080662000b78565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055508260600151600560008560000151600a8111156200085a576200085a62000b78565b600a8111156200086e576200086e62000b78565b8152602080820192909252604090810160009081209390935585516001600160a01b03861684526008909252909120805460ff1916600183600a811115620008ba57620008ba62000b78565b02179055508260800151600360008560000151600a811115620008e157620008e162000b78565b600a811115620008f557620008f562000b78565b81526020810191909152604001600020805460ff1916600183600481111562000922576200092262000b78565b0217905550604080518082019091526001600160a01b0380841682528281166020808401918252600780546001810182556000918252945160029095027fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688810180549686166001600160a01b031997881617905592517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c689909301805493909416929094169190911790915584015184519091600491600a811115620009eb57620009eb62000b78565b600a811115620009ff57620009ff62000b78565b8152602001908152602001600020908051906020019062000a2292919062000ad2565b5080600660008560000151600a81111562000a415762000a4162000b78565b600a81111562000a555762000a5562000b78565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550505050565b610ab1806200285183390190565b611224806200330283390190565b611758806200452683390190565b6117098062005c7e83390190565b6106ca806200738783390190565b82805462000ae09062000cd7565b90600052602060002090601f01602090048101928262000b04576000855562000b4f565b82601f1062000b1f57805160ff191683800117855562000b4f565b8280016001018555821562000b4f579182015b8281111562000b4f57825182559160200191906001019062000b32565b5062000b5d92915062000b61565b5090565b5b8082111562000b5d576000815560010162000b62565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600060001982141562000bc757634e487b7160e01b600052601160045260246000fd5b5060010190565b6000815180845260005b8181101562000bf65760208185018101518683018201520162000bd8565b8181111562000c09576000602083870101525b50601f01601f19169290920160200192915050565b60608152600062000c33606083018662000bce565b828103602084015262000c47818662000bce565b91505060ff83166040830152949350505050565b60808152600062000c70608083018762000bce565b828103602084015262000c84818762000bce565b60ff95909516604084015250506001600160a01b039190911660609091015292915050565b6001600160a01b038316815260406020820181905260009062000ccf9083018462000bce565b949350505050565b600181811c9082168062000cec57607f821691505b6020821081141562000d0e57634e487b7160e01b600052602260045260246000fd5b50919050565b611b2d8062000d246000396000f3fe6080604052600436106101635760003560e01c80638eb86e8b116100c0578063c6c3bbe611610074578063d051a62211610059578063d051a62214610490578063eebab8ef146104b0578063fa7626d4146104d057600080fd5b8063c6c3bbe614610433578063c74912d21461045357600080fd5b80639b140a85116100a55780639b140a85146103e6578063b36ba20814610406578063ba414fa61461040e57600080fd5b80638eb86e8b1461038357806398cdaadf146103a357600080fd5b80636a72bde71161011757806388327863116100fc578063883278631461030857806388f776a2146103365780638a3177a31461035657600080fd5b80636a72bde7146102c45780636ca42ae3146102e657600080fd5b8063440864fa11610148578063440864fa146102025780634b57b0be1461022f57806367b426451461028157600080fd5b806304bc3b1c1461016f57806310c7f0b9146101b557600080fd5b3661016a57005b600080fd5b34801561017b57600080fd5b5061019f61018a3660046116f6565b60086020526000908152604090205460ff1681565b6040516101ac9190611742565b60405180910390f35b3480156101c157600080fd5b506101d56101d036600461175c565b6104ea565b6040805173ffffffffffffffffffffffffffffffffffffffff9384168152929091166020830152016101ac565b34801561020e57600080fd5b5061022261021d366004611784565b610530565b6040516101ac91906117cb565b34801561023b57600080fd5b5060015461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101ac565b34801561028d57600080fd5b5061025c61029c366004611784565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156102d057600080fd5b506102e46102df36600461181c565b6105ca565b005b3480156102f257600080fd5b506102fb610730565b6040516101ac919061186b565b34801561031457600080fd5b506103286103233660046118d4565b6107b5565b6040519081526020016101ac565b34801561034257600080fd5b506102e461035136600461190b565b610888565b34801561036257600080fd5b50610328610371366004611784565b60056020526000908152604090205481565b34801561038f57600080fd5b506102e461039e366004611954565b6108b9565b3480156103af57600080fd5b5061025c6103be366004611784565b60066020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156103f257600080fd5b506102e4610401366004611993565b610a73565b6102e4610b22565b34801561041a57600080fd5b50610423610ba0565b60405190151581526020016101ac565b34801561043f57600080fd5b506102e461044e3660046119b3565b610d00565b34801561045f57600080fd5b5061048361046e366004611784565b60036020526000908152604090205460ff1681565b6040516101ac91906119d3565b34801561049c57600080fd5b506103286104ab36600461190b565b610daf565b3480156104bc57600080fd5b506102e46104cb366004611954565b610e8b565b3480156104dc57600080fd5b506000546104239060ff1681565b600781815481106104fa57600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff91821692501682565b60046020526000908152604090208054610549906119e7565b80601f0160208091040260200160405190810160405280929190818152602001828054610575906119e7565b80156105c25780601f10610597576101008083540402835291602001916105c2565b820191906000526020600020905b8154815290600101906020018083116105a557829003601f168201915b505050505081565b6000546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152620100009092049091169063ca669fa790602401600060405180830381600087803b15801561063e57600080fd5b505af1158015610652573d6000803e3d6000fd5b505050506002600085600a81111561066c5761066c611713565b600a81111561067d5761067d611713565b8152602081019190915260409081016000205490517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490529091169063095ea7b3906044016020604051808303816000875af1158015610705573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107299190611a3b565b5050505050565b60606007805480602002602001604051908101604052809291908181526020016000905b828210156107ac5760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff908116835260019182015416828401529083529092019101610754565b50505050905090565b60006002600084600a8111156107cd576107cd611713565b600a8111156107de576107de611713565b8152602081019190915260409081016000205490517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152909116906370a0823190602401602060405180830381865afa15801561085d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108819190611a5d565b9392505050565b6108b48383837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6105ca565b505050565b60016003600085600a8111156108d1576108d1611713565b600a8111156108e2576108e2611713565b815260208101919091526040016000205460ff16600481111561090757610907611713565b14610999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f74657374546f6b656e53756974653a20547279696e6720746f206275726e206160448201527f206e6f6e2d6e6f726d616c20746f6b656e00000000000000000000000000000060648201526084015b60405180910390fd5b6002600084600a8111156109af576109af611713565b600a8111156109c0576109c0611713565b8152602081019190915260409081016000205490517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526024820184905290911690639dc29fac906044015b6020604051808303816000875af1158015610a49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6d9190611a3b565b50505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604081205460ff169081600a811115610aaf57610aaf611713565b1415610b17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f20746f6b656e2077697468207375636820616464726573730000000000006044820152606401610990565b610a6d818484610888565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015610b8c57600080fd5b505af1158015610729573d6000803e3d6000fd5b60008054610100900460ff1615610bc05750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610cfb5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610c65917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc491608001611a76565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052610c9d91611abe565b6000604051808303816000865af19150503d8060008114610cda576040519150601f19603f3d011682016040523d82523d6000602084013e610cdf565b606091505b5091505080806020019051810190610cf79190611a3b565b9150505b919050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604081205460ff169081600a811115610d3c57610d3c611713565b1415610da4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f20746f6b656e2077697468207375636820616464726573730000000000006044820152606401610990565b610a6d818484610e8b565b60006002600085600a811115610dc757610dc7611713565b600a811115610dd857610dd8611713565b8152602081019190915260409081016000205490517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301529091169063dd62ed3e90604401602060405180830381865afa158015610e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e839190611a5d565b949350505050565b60026003600085600a811115610ea357610ea3611713565b600a811115610eb457610eb4611713565b815260208101919091526040016000205460ff166004811115610ed957610ed9611713565b1415610ff6576000546040517fc88a5e6d000000000000000000000000000000000000000000000000000000008152306004820152602481018390526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c88a5e6d90604401600060405180830381600087803b158015610f5657600080fd5b505af1158015610f6a573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015610fd857600080fd5b505af1158015610fec573d6000803e3d6000fd5b505050505061163c565b600380600085600a81111561100d5761100d611713565b600a81111561101e5761101e611713565b815260208101919091526040016000205460ff16600481111561104357611043611713565b14156111aa576000546040517fc88a5e6d000000000000000000000000000000000000000000000000000000008152306004820152602481018390526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c88a5e6d90604401600060405180830381600087803b1580156110c057600080fd5b505af11580156110d4573d6000803e3d6000fd5b505050506002600084600a8111156110ee576110ee611713565b600a8111156110ff576110ff611713565b8152602081019190915260409081016000205490517fa1903eab00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a1903eab90839060240160206040518083038185885af115801561117f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906111a49190611a5d565b5061163c565b60046003600085600a8111156111c2576111c2611713565b600a8111156111d3576111d3611713565b815260208101919091526040016000205460ff1660048111156111f8576111f8611713565b141561148f5760006002600085600a81111561121657611216611713565b600a81111561122757611227611713565b815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c49190611ada565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600860205260409020549091506112fb9060ff163084610e8b565b8073ffffffffffffffffffffffffffffffffffffffff1663095ea7b36002600087600a81111561132d5761132d611713565b600a81111561133e5761133e611713565b81526020810191909152604090810160002054905160e083901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602481018590526044016020604051808303816000875af11580156113c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e69190611a3b565b506002600085600a8111156113fd576113fd611713565b600a81111561140e5761140e611713565b8152602081019190915260409081016000205490517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810184905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f1990604401600060405180830381600087803b158015610fd857600080fd5b60016003600085600a8111156114a7576114a7611713565b600a8111156114b8576114b8611713565b815260208101919091526040016000205460ff1660048111156114dd576114dd611713565b14156115b4576002600084600a8111156114f9576114f9611713565b600a81111561150a5761150a611713565b8152602081019190915260409081016000205490517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f19906044016020604051808303816000875af1158015611590573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a49190611a3b565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f74657374546f6b656e53756974653a20547279696e6720746f207472616e736660448201527f657220756e6b6e6f776e20746f6b656e000000000000000000000000000000006064820152608401610990565b6002600084600a81111561165257611652611713565b600a81111561166357611663611713565b8152602081019190915260409081016000205490517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490529091169063a9059cbb90604401610a2a565b73ffffffffffffffffffffffffffffffffffffffff811681146116f357600080fd5b50565b60006020828403121561170857600080fd5b8135610881816116d1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60208101600b831061175657611756611713565b91905290565b60006020828403121561176e57600080fd5b5035919050565b8035600b8110610cfb57600080fd5b60006020828403121561179657600080fd5b61088182611775565b60005b838110156117ba5781810151838201526020016117a2565b83811115610a6d5750506000910152565b60208152600082518060208401526117ea81604085016020870161179f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000806080858703121561183257600080fd5b61183b85611775565b9350602085013561184b816116d1565b9250604085013561185b816116d1565b9396929550929360600135925050565b602080825282518282018190526000919060409081850190868401855b828110156118c7578151805173ffffffffffffffffffffffffffffffffffffffff90811686529087015116868501529284019290850190600101611888565b5091979650505050505050565b600080604083850312156118e757600080fd5b6118f083611775565b91506020830135611900816116d1565b809150509250929050565b60008060006060848603121561192057600080fd5b61192984611775565b92506020840135611939816116d1565b91506040840135611949816116d1565b809150509250925092565b60008060006060848603121561196957600080fd5b61197284611775565b92506020840135611982816116d1565b929592945050506040919091013590565b6000806000606084860312156119a857600080fd5b8335611929816116d1565b6000806000606084860312156119c857600080fd5b8335611972816116d1565b602081016005831061175657611756611713565b600181811c908216806119fb57607f821691505b60208210811415611a35577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600060208284031215611a4d57600080fd5b8151801515811461088157600080fd5b600060208284031215611a6f57600080fd5b5051919050565b7fffffffff000000000000000000000000000000000000000000000000000000008316815260008251611ab081600485016020870161179f565b919091016004019392505050565b60008251611ad081846020870161179f565b9190910192915050565b600060208284031215611aec57600080fd5b8151610881816116d156fea264697066735822122010fe735ed069aca27931edce4ba2ff14ec7886bf21b0eea685a884f9200fb49e64736f6c634300080a003360c0604052600d60808190526c2bb930b83832b21022ba3432b960991b60a090815261002e916000919061007a565b50604080518082019091526004808252630ae8aa8960e31b602090920191825261005a9160019161007a565b506002805460ff1916601217905534801561007457600080fd5b5061014e565b82805461008690610113565b90600052602060002090601f0160209004810192826100a857600085556100ee565b82601f106100c157805160ff19168380011785556100ee565b828001600101855582156100ee579182015b828111156100ee5782518255916020019190600101906100d3565b506100fa9291506100fe565b5090565b5b808211156100fa57600081556001016100ff565b600181811c9082168061012757607f821691505b6020821081141561014857634e487b7160e01b600052602260045260246000fd5b50919050565b6109548061015d6000396000f3fe6080604052600436106100cb5760003560e01c806340c10f1911610074578063a9059cbb1161004e578063a9059cbb14610225578063d0e30db014610245578063dd62ed3e1461024d57600080fd5b806340c10f19146101c357806370a08231146101e357806395d89b411461021057600080fd5b806323b872dd116100a557806323b872dd146101575780632e1a7d4d14610177578063313ce5671461019757600080fd5b806306fdde03146100df578063095ea7b31461010a57806318160ddd1461013a57600080fd5b366100da576100d8610285565b005b600080fd5b3480156100eb57600080fd5b506100f46102e0565b6040516101019190610703565b60405180910390f35b34801561011657600080fd5b5061012a61012536600461079f565b61036e565b6040519015158152602001610101565b34801561014657600080fd5b50475b604051908152602001610101565b34801561016357600080fd5b5061012a6101723660046107c9565b6103e7565b34801561018357600080fd5b506100d8610192366004610805565b6105fe565b3480156101a357600080fd5b506002546101b19060ff1681565b60405160ff9091168152602001610101565b3480156101cf57600080fd5b506100d86101de36600461079f565b6106a4565b3480156101ef57600080fd5b506101496101fe36600461081e565b60036020526000908152604090205481565b34801561021c57600080fd5b506100f46106e2565b34801561023157600080fd5b5061012a61024036600461079f565b6106ef565b6100d8610285565b34801561025957600080fd5b50610149610268366004610839565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102a490849061089b565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102ed906108b3565b80601f0160208091040260200160405190810160405280929190818152602001828054610319906108b3565b80156103665780601f1061033b57610100808354040283529160200191610366565b820191906000526020600020905b81548152906001019060200180831161034957829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103d69086815260200190565b60405180910390a350600192915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561041957600080fd5b73ffffffffffffffffffffffffffffffffffffffff8416331480159061048f575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105175773ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020548211156104d157600080fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915281208054849290610511908490610907565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061054c908490610907565b909155505073ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260408120805484929061058690849061089b565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516105ec91815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561061a57600080fd5b3360009081526003602052604081208054839290610639908490610907565b9091555050604051339082156108fc029083906000818181858888f1935050505015801561066b573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260036020526040812080548392906106d990849061089b565b90915550505050565b600180546102ed906108b3565b60006106fc3384846103e7565b9392505050565b600060208083528351808285015260005b8181101561073057858101830151858201604001528201610714565b81811115610742576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461079a57600080fd5b919050565b600080604083850312156107b257600080fd5b6107bb83610776565b946020939093013593505050565b6000806000606084860312156107de57600080fd5b6107e784610776565b92506107f560208501610776565b9150604084013590509250925092565b60006020828403121561081757600080fd5b5035919050565b60006020828403121561083057600080fd5b6106fc82610776565b6000806040838503121561084c57600080fd5b61085583610776565b915061086360208401610776565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156108ae576108ae61086c565b500190565b600181811c908216806108c757607f821691505b60208210811415610901577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000828210156109195761091961086c565b50039056fea26469706673582212206ec943fa4e3b70d8fca6c25b6aa26fa18e8f8952ce3bc4d5afcb443bf3097c0564736f6c634300080a003360806040526000600255600060035534801561001a57600080fd5b506111fa8061002a6000396000f3fe60806040526004361061016e5760003560e01c80637a28fb88116100cb578063bdd17e1c1161007f578063dd62ed3e11610059578063dd62ed3e146103ee578063ee7a7c0414610441578063f5eb42dc1461046157600080fd5b8063bdd17e1c146103ad578063cdb9a21c146103c3578063d5002f2e146103d957600080fd5b8063a1903eab116100b0578063a1903eab1461035a578063a457c2d71461036d578063a9059cbb1461038d57600080fd5b80637a28fb88146102f457806395d89b411461031457600080fd5b806323b872dd1161012257806337cfdaca1161010757806337cfdaca1461020d57806339509351146102b457806370a08231146102d457600080fd5b806323b872dd14610278578063313ce5671461029857600080fd5b806318160ddd1161015357806318160ddd1461020d578063192084511461023057806322301f6e1461025057600080fd5b806306fdde0314610185578063095ea7b3146101dd57600080fd5b366101805761017d6000610481565b50005b600080fd5b34801561019157600080fd5b5060408051808201909152601781527f4c6971756964207374616b656420457468657220322e3000000000000000000060208201525b6040516101d49190610f63565b60405180910390f35b3480156101e957600080fd5b506101fd6101f8366004610fff565b610545565b60405190151581526020016101d4565b34801561021957600080fd5b5061022261055b565b6040519081526020016101d4565b34801561023c57600080fd5b5061022261024b366004611029565b61056b565b34801561025c57600080fd5b5061027661026b366004611042565b600391909155600255565b005b34801561028457600080fd5b506101fd610293366004611064565b6105ab565b3480156102a457600080fd5b50604051601281526020016101d4565b3480156102c057600080fd5b506101fd6102cf366004610fff565b610696565b3480156102e057600080fd5b506102226102ef3660046110a0565b6106d9565b34801561030057600080fd5b5061022261030f366004611029565b61070e565b34801561032057600080fd5b5060408051808201909152600581527f737445544800000000000000000000000000000000000000000000000000000060208201526101c7565b6102226103683660046110a0565b61073a565b34801561037957600080fd5b506101fd610388366004610fff565b610745565b34801561039957600080fd5b506101fd6103a8366004610fff565b6107f9565b3480156103b957600080fd5b5061022260035481565b3480156103cf57600080fd5b5061022260025481565b3480156103e557600080fd5b50610222610806565b3480156103fa57600080fd5b506102226104093660046110bb565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b34801561044d57600080fd5b5061027661045c366004610fff565b610811565b34801561046d57600080fd5b5061022261047c3660046110a0565b61081f565b60003334806104f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f5a45524f5f4445504f534954000000000000000000000000000000000000000060448201526064015b60405180910390fd5b60006104fc8261056b565b9050806105065750805b8160036000828254610518919061111d565b909155506105289050838261084a565b61053383838761093b565b61053d8382610992565b949350505050565b60006105523384846109ea565b50600192915050565b600061056660035490565b905090565b60008061057760035490565b9050806105875750600092915050565b6105a48161059e61059760025490565b8690610b52565b90610b5e565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001602090815260408083203384529091528120548281101561066c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f5452414e534645525f414d4f554e545f455843454544535f414c4c4f57414e4360448201527f450000000000000000000000000000000000000000000000000000000000000060648201526084016104e8565b610677858585610b6a565b61068b85336106868487610bef565b6109ea565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916105529185906106869086610bfb565b73ffffffffffffffffffffffffffffffffffffffff81166000908152602081905260408120546107089061070e565b92915050565b60008061071a60025490565b90508061072a5750600092915050565b6105a48161059e61059760035490565b600061070882610481565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156107e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4445435245415345445f414c4c4f57414e43455f42454c4f575f5a45524f000060448201526064016104e8565b6107ef33856106868487610bef565b5060019392505050565b6000610552338484610b6a565b600061056660025490565b61081b8282610c07565b5050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040812054610708565b73ffffffffffffffffffffffffffffffffffffffff82166108c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4d494e545f544f5f5448455f5a45524f5f41444452455353000000000000000060448201526064016104e8565b80600260008282546108d9919061111d565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205461090e9082610bfb565b73ffffffffffffffffffffffffffffffffffffffff90921660009081526020819052604090209190915550565b6040805183815273ffffffffffffffffffffffffffffffffffffffff83811660208301528516917fed8dd430b1e4bba98e943dc5b157cf7b54d9e12916d6c474ff5733a95001d03b910160405180910390a2505050565b73ffffffffffffffffffffffffffffffffffffffff821660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6109d58461070e565b60405190815260200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff8316610a67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f415050524f56455f46524f4d5f5a45524f5f414444524553530000000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff8216610ae4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f415050524f56455f544f5f5a45524f5f4144445245535300000000000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006105a48284611135565b60006105a48284611172565b6000610b758261056b565b9050610b82848483610d64565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610be191815260200190565b60405180910390a350505050565b60006105a482846111ad565b60006105a4828461111d565b73ffffffffffffffffffffffffffffffffffffffff8216610c84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4255524e5f46524f4d5f5448455f5a45524f5f4144445245535300000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205480821115610d14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4255524e5f414d4f554e545f455843454544535f42414c414e4345000000000060448201526064016104e8565b8160026000828254610d2691906111ad565b90915550610d3690508183610bef565b73ffffffffffffffffffffffffffffffffffffffff9093166000908152602081905260409020929092555050565b73ffffffffffffffffffffffffffffffffffffffff8316610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f5452414e534645525f46524f4d5f5448455f5a45524f5f41444452455353000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff8216610e5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f5452414e534645525f544f5f5448455f5a45524f5f414444524553530000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205480821115610eee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5452414e534645525f414d4f554e545f455843454544535f42414c414e43450060448201526064016104e8565b610ef88183610bef565b73ffffffffffffffffffffffffffffffffffffffff8086166000908152602081905260408082209390935590851681522054610f349083610bfb565b73ffffffffffffffffffffffffffffffffffffffff909316600090815260208190526040902092909255505050565b600060208083528351808285015260005b81811015610f9057858101830151858201604001528201610f74565b81811115610fa2576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ffa57600080fd5b919050565b6000806040838503121561101257600080fd5b61101b83610fd6565b946020939093013593505050565b60006020828403121561103b57600080fd5b5035919050565b6000806040838503121561105557600080fd5b50508035926020909101359150565b60008060006060848603121561107957600080fd5b61108284610fd6565b925061109060208501610fd6565b9150604084013590509250925092565b6000602082840312156110b257600080fd5b6105a482610fd6565b600080604083850312156110ce57600080fd5b6110d783610fd6565b91506110e560208401610fd6565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611130576111306110ee565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561116d5761116d6110ee565b500290565b6000826111a8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000828210156111bf576111bf6110ee565b50039056fea2646970667358221220a5b4f31162ba2b8b3424cef84b31ef91d05a825243602b5fdf758ffb49b8246364736f6c634300080a003360a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a003360c06040523480156200001157600080fd5b506040516200170938038062001709833981016040819052620000349162000266565b8351849084906200004d906003906020850190620000f3565b50805162000063906004906020840190620000f3565b505050620000806200007a6200009d60201b60201c565b620000a1565b60ff9091166080526001600160a01b031660a05250620003479050565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b82805462000101906200030a565b90600052602060002090601f01602090048101928262000125576000855562000170565b82601f106200014057805160ff191683800117855562000170565b8280016001018555821562000170579182015b828111156200017057825182559160200191906001019062000153565b506200017e92915062000182565b5090565b5b808211156200017e576000815560010162000183565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c157600080fd5b81516001600160401b0380821115620001de57620001de62000199565b604051601f8301601f19908116603f0116810190828211818310171562000209576200020962000199565b816040528381526020925086838588010111156200022657600080fd5b600091505b838210156200024a57858201830151818301840152908201906200022b565b838211156200025c5760008385830101525b9695505050505050565b600080600080608085870312156200027d57600080fd5b84516001600160401b03808211156200029557600080fd5b620002a388838901620001af565b95506020870151915080821115620002ba57600080fd5b50620002c987828801620001af565b935050604085015160ff81168114620002e157600080fd5b60608601519092506001600160a01b0381168114620002ff57600080fd5b939692955090935050565b600181811c908216806200031f57607f821691505b602082108114156200034157634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05161138e6200037b600039600081816101f70152818161041f0152610600015260006101a2015261138e6000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80636f307dc3116100b257806395d89b4111610081578063a9059cbb11610066578063a9059cbb146102b5578063dd62ed3e146102c8578063f2fde38b1461030e57600080fd5b806395d89b411461029a578063a457c2d7146102a257600080fd5b80636f307dc3146101f257806370a082311461023e578063715018a6146102745780638da5cb5b1461027c57600080fd5b806323b872dd116100ee57806323b872dd14610188578063313ce5671461019b57806339509351146101cc57806340c10f19146101df57600080fd5b806306fdde0314610120578063095ea7b31461013e57806318160ddd146101615780631e9a695014610173575b600080fd5b610128610321565b604051610135919061112d565b60405180910390f35b61015161014c3660046111c9565b6103b3565b6040519015158152602001610135565b6002545b604051908152602001610135565b6101866101813660046111c9565b6103c9565b005b6101516101963660046111f3565b610491565b60405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610135565b6101516101da3660046111c9565b61057c565b6101866101ed3660046111c9565b6105c5565b6102197f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b61016561024c36600461122f565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610186610691565b60055473ffffffffffffffffffffffffffffffffffffffff16610219565b61012861071e565b6101516102b03660046111c9565b61072d565b6101516102c33660046111c9565b610805565b6101656102d6366004611251565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b61018661031c36600461122f565b610812565b60606003805461033090611284565b80601f016020809104026020016040519081016040528092919081815260200182805461035c90611284565b80156103a95780601f1061037e576101008083540402835291602001916103a9565b820191906000526020600020905b81548152906001019060200180831161038c57829003601f168201915b5050505050905090565b60006103c0338484610942565b50600192915050565b6103d33382610af5565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015610468573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048c91906112d8565b505050565b600061049e848484610ce2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6105718533858403610942565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916103c09185906105c0908690611329565b610942565b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906323b872dd906064016020604051808303816000875af115801561065e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068291906112d8565b5061068d8282610f96565b5050565b60055473ffffffffffffffffffffffffffffffffffffffff163314610712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161055b565b61071c60006110b6565b565b60606004805461033090611284565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156107ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161055b565b6107fb3385858403610942565b5060019392505050565b60006103c0338484610ce2565b60055473ffffffffffffffffffffffffffffffffffffffff163314610893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161055b565b73ffffffffffffffffffffffffffffffffffffffff8116610936576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161055b565b61093f816110b6565b50565b73ffffffffffffffffffffffffffffffffffffffff83166109e4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff8216610a87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8216610b98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015610c4e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290610c8a908490611341565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff8216610e28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610ede576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610f22908490611329565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f8891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161055b565b80600260008282546110259190611329565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152602081905260408120805483929061105f908490611329565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208083528351808285015260005b8181101561115a5785810183015185820160400152820161113e565b8181111561116c576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146111c457600080fd5b919050565b600080604083850312156111dc57600080fd5b6111e5836111a0565b946020939093013593505050565b60008060006060848603121561120857600080fd5b611211846111a0565b925061121f602085016111a0565b9150604084013590509250925092565b60006020828403121561124157600080fd5b61124a826111a0565b9392505050565b6000806040838503121561126457600080fd5b61126d836111a0565b915061127b602084016111a0565b90509250929050565b600181811c9082168061129857607f821691505b602082108114156112d2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156112ea57600080fd5b8151801515811461124a57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561133c5761133c6112fa565b500190565b600082821015611353576113536112fa565b50039056fea26469706673582212203a6db30cd3c097921df4156794aa7973eb848711deeb2cffd7c54a9df1fdb0a564736f6c634300080a003360a060405234801561001057600080fd5b506040516106ca3803806106ca83398101604081905261002f9161006c565b60009190915560ff166080526001805460506001600160501b031991821681179092556004805490911690911790554260028190556003556100a2565b6000806040838503121561007f57600080fd5b82519150602083015160ff8116811461009757600080fd5b809150509250929050565b60805161060e6100bc600039600060d3015261060e6000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80639a6fc8f511610081578063d62ada111161005b578063d62ada11146102dc578063f7a30806146102f4578063feaf968c1461030757600080fd5b80639a6fc8f5146101cd578063bd18ad531461023a578063cd653afc1461024d57600080fd5b806354fd4d50116100b257806354fd4d501461012d57806367e8d83d1461013c5780637284e4161461018e57600080fd5b8063313ce567146100ce5780633fd0875f1461010c575b600080fd5b6100f57f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020015b60405180910390f35b6004546a0100000000000000000000900460ff166040516101039190610441565b60405160018152602001610103565b61018c61014a366004610482565b600480549115156c01000000000000000000000000027fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff909216919091179055565b005b604080518082018252600c81527f7072696365206f7261636c6500000000000000000000000000000000000000006020820152905161010391906104ab565b6102036101db36600461053d565b60015460005460025460035460045469ffffffffffffffffffff948516941691939590929450565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610103565b61018c610248366004610558565b61030f565b61018c61025b366004610579565b6001805469ffffffffffffffffffff9586167fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090911617905560029290925560035560048054919092167fffffffffffffffffffffffffffffffffffffffff00ff00000000000000000000909116176b020000000000000000000000179055565b6102e461035f565b6040519015158152602001610103565b61018c6103023660046105bf565b600055565b610203610385565b600480548291907fffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff166b01000000000000000000000083600281111561035757610357610412565b021790555050565b600454600090610380906b010000000000000000000000900460ff166103d6565b905090565b60008060008060006004600c9054906101000a900460ff16156103a757600080fd5b505060015460005460025460035460045469ffffffffffffffffffff9485169893975091955093509190911690565b600060028260028111156103ec576103ec610412565b14156103f757600080fd5b600182600281111561040b5761040b610412565b1492915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016006831061047c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561049457600080fd5b813580151581146104a457600080fd5b9392505050565b600060208083528351808285015260005b818110156104d8578581018301518582016040015282016104bc565b818111156104ea576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803569ffffffffffffffffffff8116811461053857600080fd5b919050565b60006020828403121561054f57600080fd5b6104a48261051e565b60006020828403121561056a57600080fd5b8135600381106104a457600080fd5b6000806000806080858703121561058f57600080fd5b6105988561051e565b935060208501359250604085013591506105b46060860161051e565b905092959194509250565b6000602082840312156105d157600080fd5b503591905056fea264697066735822122014874f7a973b86501c4c1a8be32490fe902c8f088ee234d25f9b2497e19f9e5264736f6c634300080a003360806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d00011790553480156200003a57600080fd5b5060405162031ed638038062031ed68339810160408190526200005d91620015e8565b81816040516200006d9062001595565b604051809103906000f0801580156200008a573d6000803e3d6000fd5b5050600180546001600160a01b0319166001600160a01b038416908117909155604080516325abd85f60e11b81529051634b57b0be916004808201926020929091908290030181865afa158015620000e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200010c91906200162a565b73c4375b7de8af5a38a93548eb8453a498222c4ff26040516200012f90620015a3565b6001600160a01b03928316815291166020820152604001604051809103906000f08015801562000163573d6000803e3d6000fd5b50600380546001600160a01b0319166001600160a01b039290921691821790556040805163de28735960e01b8152905163de287359916004808201926020929091908290030181865afa158015620001bf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e591906200162a565b604051634910832f60e01b81527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526001600160a01b039190911690634910832f90602401600060405180830381600087803b1580156200023d57600080fd5b505af115801562000252573d6000803e3d6000fd5b50505050600360009054906101000a90046001600160a01b03166001600160a01b031663de2873596040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d091906200162a565b60035460405163f2fde38b60e01b81526001600160a01b03918216600482015291169063f2fde38b90602401600060405180830381600087803b1580156200031757600080fd5b505af11580156200032c573d6000803e3d6000fd5b505060035460015460408051636ca42ae360e01b815290516001600160a01b039384169550638874ff1f94509190921691636ca42ae39160048083019260009291908290030181865afa15801562000388573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620003b29190810190620016c5565b6040518263ffffffff1660e01b8152600401620003d09190620017b6565b600060405180830381600087803b158015620003eb57600080fd5b505af115801562000400573d6000803e3d6000fd5b50505050600360009054906101000a90046001600160a01b03166001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000458573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200047e91906200162a565b600280546001600160a01b0319166001600160a01b039290921691821790556040805163120d150d60e31b81529051639068a868916004808201926020929091908290030181865afa158015620004d9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004ff91906200162a565b600480546001600160a01b0319166001600160a01b0392831617815560025460408051631f94a27560e31b81529051919093169263fca513a892818101926020929091908290030181865afa1580156200055d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200058391906200162a565b600880546001600160a01b0319166001600160a01b0392831617905560025460408051630873769560e01b81529051919092169163087376959160048083019260209291908290030181865afa158015620005e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200060891906200162a565b600780546001600160a01b0319166001600160a01b039283161790556002546040805163c513c9bb60e01b81529051919092169163c513c9bb9160048083019260209291908290030181865afa15801562000667573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200068d91906200162a565b600680546001600160a01b0319166001600160a01b039283161790556001546040516367b4264560e01b81529116906367b4264590620006d29084906004016200184d565b602060405180830381865afa158015620006f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200071691906200162a565b600980546001600160a01b0319166001600160a01b0392831617905560035460408051630a55006360e21b815290519190921691632954018c9160048083019260209291908290030181865afa15801562000775573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200079b91906200162a565b6009546040516001600160a01b0390911690620007b890620015b2565b6001600160a01b03928316815291166020820152604001604051809103906000f080158015620007ec573d6000803e3d6000fd5b50600580546001600160a01b0319166001600160a01b039283169081179091556001549091169063eebab8ef90839062000825620011ec565b6200083290600a62001879565b6040518463ffffffff1660e01b815260040162000852939291906200189b565b600060405180830381600087803b1580156200086d57600080fd5b505af115801562000882573d6000803e3d6000fd5b505060065460055460405163d914cd4b60e01b81526001600160a01b0391821660048201529116925063d914cd4b9150602401600060405180830381600087803b158015620008d057600080fd5b505af1158015620008e5573d6000803e3d6000fd5b5050600f80546001600160801b031916670de0b6b3a76400001790555062000911925050620011ec9050565b6200091e90600a62001879565b600f80546001600160801b03908116600160801b9382168402818117938490556040805160a0810182529184169092178152939092041660208301526000919081016200096b84620012ab565b815260006020820181905260409182018190526005549151929350916001600160a01b039091169083908390620009a290620015c0565b620009b093929190620018c5565b604051809103906000f080158015620009cd573d6000803e3d6000fd5b509050806001600160a01b031663c12c21c06040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a0f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a3591906200162a565b600b60006101000a8154816001600160a01b0302191690836001600160a01b03160217905550806001600160a01b0316632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a9a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ac091906200162a565b600c60006101000a8154816001600160a01b0302191690836001600160a01b03160217905550806001600160a01b031663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000b25573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b4b91906200162a565b600d80546001600160a01b0319166001600160a01b03928316179055600654600b5460405163e26b2f6360e01b8152908316600482015291169063e26b2f6390602401600060405180830381600087803b15801562000ba957600080fd5b505af115801562000bbe573d6000803e3d6000fd5b5050600054600554604080516318caf8e360e31b81526001600160a01b039283166004808301919091526024820192909252604481019190915263141bdbdb60e21b60648201526201000090920416925063c657c7189150608401600060405180830381600087803b15801562000c3457600080fd5b505af115801562000c49573d6000803e3d6000fd5b5050600054600c8054604080516318caf8e360e31b81526001600160a01b039283166004820152602481019190915260448101929092526b43726564697446616361646560a01b606483015262010000909204909116925063c657c7189150608401600060405180830381600087803b15801562000cc657600080fd5b505af115801562000cdb573d6000803e3d6000fd5b5050600054600b54604080516318caf8e360e31b81526001600160a01b0392831660048201526024810191909152600d60448201526c21b932b234ba26b0b730b3b2b960991b60648201526201000090920416925063c657c7189150608401600060405180830381600087803b15801562000d5557600080fd5b505af115801562000d6a573d6000803e3d6000fd5b5050600054600d54604080516318caf8e360e31b81526001600160a01b0392831660048201526024810191909152601260448201527121b932b234ba21b7b73334b3bab930ba37b960711b60648201526201000090920416925063c657c7189150608401600060405180830381600087803b15801562000de957600080fd5b505af115801562000dfe573d6000803e3d6000fd5b50506001546001600160a01b0316915063eebab8ef90508473f39fd6e51aad88f6f4ce6ab8827279cfffb9226662000e35620011ec565b6040518463ffffffff1660e01b815260040162000e55939291906200189b565b600060405180830381600087803b15801562000e7057600080fd5b505af115801562000e85573d6000803e3d6000fd5b50506001546001600160a01b0316915063eebab8ef9050847390f79bf6eb2c4f870365e785982e1f101e93b90662000ebc620011ec565b6040518463ffffffff1660e01b815260040162000edc939291906200189b565b600060405180830381600087803b15801562000ef757600080fd5b505af115801562000f0c573d6000803e3d6000fd5b505060005460405163ca669fa760e01b815273f39fd6e51aad88f6f4ce6ab8827279cfffb922666004820152620100009091046001600160a01b0316925063ca669fa79150602401600060405180830381600087803b15801562000f6f57600080fd5b505af115801562000f84573d6000803e3d6000fd5b5050600954600b5460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529116925063095ea7b391506044016020604051808303816000875af115801562000fdf573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001005919062001989565b5060005460405163ca669fa760e01b81527390f79bf6eb2c4f870365e785982e1f101e93b9066004820152620100009091046001600160a01b03169063ca669fa790602401600060405180830381600087803b1580156200106557600080fd5b505af11580156200107a573d6000803e3d6000fd5b5050600954600b5460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529116925063095ea7b391506044016020604051808303816000875af1158015620010d5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010fb919062001989565b5060025460405163f2fde38b60e01b81527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526001600160a01b039091169063f2fde38b90602401600060405180830381600087803b1580156200115657600080fd5b505af11580156200116b573d6000803e3d6000fd5b505060075460405163f2fde38b60e01b81527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b158015620011c957600080fd5b505af1158015620011de573d6000803e3d6000fd5b5050505050505050620019e1565b600180546040516367b4264560e01b81526000926001600160a01b03909216916367b42645916200122191906004016200184d565b602060405180830381865afa1580156200123f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200126591906200162a565b6009546001600160a01b03908116911614620012955762001290670de0b6b3a764000060c862001879565b905090565b62001290670de0b6b3a7640000614e2062001879565b6040805160c08101825260026080820190815261232860a08301528152815180830183526005815261226060208281019190915282015281518083018352606092600092919082019080600387600a8111156200130c576200130c62001814565b146200131a5760036200131d565b60015b600a81111562001331576200133162001814565b815261206c6020918201529082526040805180820190915260048152611c84818301529101529050612454600a6000858281111562001374576200137462001814565b600a81111562001388576200138862001814565b815260208101919091526040908101600020805461ffff9390931661ffff19909316929092179091558051600480825260a0820190925281816020015b6040805180820190915260008082526020820152815260200190600190039081620013c557905050925060005b818110156200158d57828160048110620014105762001410620019ad565b602002015160200151600a6000858460048110620014325762001432620019ad565b602002015151600a8111156200144c576200144c62001814565b600a81111562001460576200146062001814565b815260208101919091526040908101600020805461ffff191661ffff9390931692909217909155805180820190915260015481906001600160a01b03166367b42645868560048110620014b757620014b7620019ad565b6020020151516040516001600160e01b031960e084901b168152620014e091906004016200184d565b602060405180830381865afa158015620014fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200152491906200162a565b6001600160a01b03168152602001848360048110620015475762001547620019ad565b60200201516020015161ffff168152508482815181106200156c576200156c620019ad565b602002602001018190525080806200158490620019c3565b915050620013f2565b505050919050565b6105e6806200bc5283390190565b62011105806200c23883390190565b6110a7806201d33d83390190565b62013af2806201e3e483390190565b6001600160a01b0381168114620015e557600080fd5b50565b60008060408385031215620015fc57600080fd5b82516200160981620015cf565b6020840151909250600b81106200161f57600080fd5b809150509250929050565b6000602082840312156200163d57600080fd5b81516200164a81620015cf565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156200168c576200168c62001651565b60405290565b604051601f8201601f191681016001600160401b0381118282101715620016bd57620016bd62001651565b604052919050565b60006020808385031215620016d957600080fd5b82516001600160401b0380821115620016f157600080fd5b818501915085601f8301126200170657600080fd5b8151818111156200171b576200171b62001651565b6200172b848260051b0162001692565b818152848101925060069190911b8301840190878211156200174c57600080fd5b928401925b81841015620017ab57604084890312156200176c5760008081fd5b6200177662001667565b84516200178381620015cf565b8152848601516200179481620015cf565b818701528352604093909301929184019162001751565b979650505050505050565b602080825282518282018190526000919060409081850190868401855b828110156200180757815180516001600160a01b0390811686529087015116868501529284019290850190600101620017d3565b5091979650505050505050565b634e487b7160e01b600052602160045260246000fd5b600b81106200184957634e487b7160e01b600052602160045260246000fd5b9052565b602081016200185d82846200182a565b92915050565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161562001896576200189662001863565b500290565b60608101620018ab82866200182a565b6001600160a01b0393909316602082015260400152919050565b6001600160a01b0384811682526060602080840182905285516001600160801b039081169285019290925285810151909116608084015260408086015160a085810152805161010086018190526000949392918301919085906101208801905b808310156200195657845180518816835286015161ffff168683015293850193600192909201919083019062001925565b5060608a01516001600160a01b031660c0890152608090990151151560e088015250909401949094525092949350505050565b6000602082840312156200199c57600080fd5b815180151581146200164a57600080fd5b634e487b7160e01b600052603260045260246000fd5b6000600019821415620019da57620019da62001863565b5060010190565b61a26180620019f16000396000f3fe60806040523480156200001157600080fd5b5060043610620001ad5760003560e01c806362eb33e311620000f5578063ba414fa61162000097578063de287359116200006e578063de2873591462000479578063f9aa028a146200049a578063fa7626d414620004bb57600080fd5b8063ba414fa6146200041c578063c12c21c01462000437578063d46b9330146200045857600080fd5b80637785ff5d11620000cc5780637785ff5d14620003da5780639408b63f14620003e45780639dd55b45146200040557600080fd5b806362eb33e314620003775780636b70b04c14620003985780636f307dc314620003b957600080fd5b80632f7a1881116200015f5780635e813a8b11620001365780635e813a8b146200030c5780635f7c9bd0146200032d57806362186905146200034657600080fd5b80632f7a188114620002be578063406c8e2f14620002df57806354cae56e146200030057600080fd5b80630e42bc5d11620001945780630e42bc5d14620002305780632630c12f14620002565780632954018c146200029d57600080fd5b80630bc772da14620001b25780630c75f80614620001f5575b600080fd5b600f54620001cf906fffffffffffffffffffffffffffffffff1681565b6040516fffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6200021c62000206366004620012dd565b600a6020526000908152604090205461ffff1681565b60405161ffff9091168152602001620001ec565b6200024762000241366004620012dd565b620004c9565b604051620001ec919062001307565b600854620002779073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001620001ec565b600254620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600c54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600154620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200030a6200081f565b005b600454620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200033762000b1a565b604051908152602001620001ec565b600f54620001cf9070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681565b600654620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600554620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600954620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200030a62000c0c565b600e54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200030a6200041636600462001398565b62000fd6565b6200042662001149565b6040519015158152602001620001ec565b600b54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600354620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600754620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600d54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600054620004269060ff1681565b6040805160c08101825260026080820190815261232860a08301528152815180830183526005815261226060208281019190915282015281518083018352606092600092919082019080600387600a8111156200052a576200052a620013c7565b14620005385760036200053b565b60015b600a8111156200054f576200054f620013c7565b815261206c6020918201529082526040805180820190915260048152611c84818301529101529050612454600a60008582811115620005925762000592620013c7565b600a811115620005a657620005a6620013c7565b815260208101919091526040908101600020805461ffff939093167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909316929092179091558051600480825260a0820190925281816020015b60408051808201909152600080825260208201528152602001906001900390816200060057905050925060005b8181101562000817578281600481106200064b576200064b620013f6565b602002015160200151600a60008584600481106200066d576200066d620013f6565b602002015151600a811115620006875762000687620013c7565b600a8111156200069b576200069b620013c7565b81526020810191909152604090810160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff93909316929092179091558051808201909152600154819073ffffffffffffffffffffffffffffffffffffffff166367b426458685600481106200071c576200071c620013f6565b6020020151516040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526200075d919060040162001425565b602060405180830381865afa1580156200077b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007a1919062001467565b73ffffffffffffffffffffffffffffffffffffffff168152602001848360048110620007d157620007d1620013f6565b60200201516020015161ffff16815250848281518110620007f657620007f6620013f6565b602002602001018190525080806200080e90620014b6565b9150506200062d565b505050919050565b6000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16906306447d5690602401600060405180830381600087803b158015620008a457600080fd5b505af1158015620008b9573d6000803e3d6000fd5b5050600b5460405173ffffffffffffffffffffffffffffffffffffffff909116925060009150600190620008ed90620012b3565b73ffffffffffffffffffffffffffffffffffffffff938416815292909116602083015215156040820152606001604051809103906000f08015801562000937573d6000803e3d6000fd5b50600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316908117909155600d546040517f526a41e80000000000000000000000000000000000000000000000000000000081526004810192909252600160248301529091169063526a41e890604401600060405180830381600087803b158015620009dc57600080fd5b505af1158015620009f1573d6000803e3d6000fd5b5050600d5473ffffffffffffffffffffffffffffffffffffffff16915063eb9606df905062000a22426001620014f2565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815264ffffffffff90911660048201526024015b600060405180830381600087803b15801562000a7b57600080fd5b505af115801562000a90573d6000803e3d6000fd5b50505050600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562000aff57600080fd5b505af115801562000b14573d6000803e3d6000fd5b50505050565b600180546040517f67b4264500000000000000000000000000000000000000000000000000000000815260009273ffffffffffffffffffffffffffffffffffffffff909216916367b426459162000b75919060040162001425565b602060405180830381865afa15801562000b93573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000bb9919062001467565b60095473ffffffffffffffffffffffffffffffffffffffff90811691161462000bf65762000bf1670de0b6b3a764000060c86200150d565b905090565b62000bf1670de0b6b3a7640000614e206200150d565b60025460405173ffffffffffffffffffffffffffffffffffffffff9091169062000c3690620012c1565b73ffffffffffffffffffffffffffffffffffffffff90911681526060602082018190526008908201527f446567656e4e4654000000000000000000000000000000000000000000000000608082015260a060408201819052600a908201527f476561722d446567656e0000000000000000000000000000000000000000000060c082015260e001604051809103906000f08015801562000cda573d6000803e3d6000fd5b50600e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283161790556000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015262010000909104909116906306447d5690602401600060405180830381600087803b15801562000d8e57600080fd5b505af115801562000da3573d6000803e3d6000fd5b5050600e546040517ffca3b5aa0000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff909116925063fca3b5aa9150602401600060405180830381600087803b15801562000e2757600080fd5b505af115801562000e3c573d6000803e3d6000fd5b5050600b54600e5460405173ffffffffffffffffffffffffffffffffffffffff92831694509116915060009062000e7390620012b3565b73ffffffffffffffffffffffffffffffffffffffff938416815292909116602083015215156040820152606001604051809103906000f08015801562000ebd573d6000803e3d6000fd5b50600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316908117909155600d546040517f526a41e80000000000000000000000000000000000000000000000000000000081526004810192909252600160248301529091169063526a41e890604401600060405180830381600087803b15801562000f6257600080fd5b505af115801562000f77573d6000803e3d6000fd5b5050600e54600c546040517f4610f6ac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015291169250634610f6ac915060240162000a60565b600081600860405162000fe990620012cf565b91825260ff166020820152604001604051809103906000f08015801562001014573d6000803e3d6000fd5b506000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291925062010000900473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b1580156200109c57600080fd5b505af1158015620010b1573d6000803e3d6000fd5b50506008546040517fe8a97a3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528581166024830152909116925063e8a97a3e9150604401600060405180830381600087803b1580156200112b57600080fd5b505af115801562001140573d6000803e3d6000fd5b50505050505050565b60008054610100900460ff16156200116a5750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620012ae5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000008284015282518083038401815260608301909352600092909162001212917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016200158b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526200124c91620015c9565b6000604051808303816000865af19150503d80600081146200128b576040519150601f19603f3d011682016040523d82523d6000602084013e62001290565b606091505b5091505080806020019051810190620012aa9190620015d7565b9150505b919050565b615e9780620015fc83390190565b6126cf806200749383390190565b6106ca8062009b6283390190565b600060208284031215620012f057600080fd5b8135600b81106200130057600080fd5b9392505050565b602080825282518282018190526000919060409081850190868401855b8281101562001365578151805173ffffffffffffffffffffffffffffffffffffffff16855286015161ffff1686850152928401929085019060010162001324565b5091979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff811681146200139557600080fd5b50565b60008060408385031215620013ac57600080fd5b8235620013b98162001372565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60208101600b831062001461577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000602082840312156200147a57600080fd5b8151620013008162001372565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415620014eb57620014eb62001487565b5060010190565b6000821982111562001508576200150862001487565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562001548576200154862001487565b500290565b6000815160005b8181101562001570576020818501810151868301520162001554565b8181111562001580576000828601525b509290920192915050565b7fffffffff00000000000000000000000000000000000000000000000000000000831681526000620015c160048301846200154d565b949350505050565b60006200130082846200154d565b600060208284031215620015ea57600080fd5b815180151581146200130057600080fdfe6101406040523480156200001257600080fd5b5060405162005e9738038062005e97833981016040819052620000359162000198565b60016000556001600160a01b0383166200006257604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038316608081905260408051636f307dc360e01b81529051636f307dc3916004808201926020929091908290030181865afa158015620000ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d39190620001ea565b6001600160a01b031660a0816001600160a01b031681525050826001600160a01b0316634f0e0ef36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200012b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001519190620001ea565b6001600160a01b0390811660c0529190911660e0819052151561010052151561012052506200020f565b80516001600160a01b03811681146200019357600080fd5b919050565b600080600060608486031215620001ae57600080fd5b620001b9846200017b565b9250620001c9602085016200017b565b915060408401518015158114620001df57600080fd5b809150509250925092565b600060208284031215620001fd57600080fd5b62000208826200017b565b9392505050565b60805160a05160c05160e0516101005161012051615a86620004116000396000818161061101528181612fb5015261481f01526000818161031701528181610dde015281816144f901526146e5015260008181610557015281816146a901526147a901526000818161034b0152818161387d015261392d01526000818161047301528181611bfe0152818161274f0152818161280d0152818161366a01526137dd015260008181610665015281816109d801528181610b0301528181610bd501528181610cdd01528181610e6501528181610fe30152818161114e0152818161120e0152818161132e015281816114510152818161162b01528181611708015281816117e0015281816119e501528181611b1201528181611d9501528181611ed5015281816120040152818161216801528181612290015281816123c601528181612568015281816126390152818161266f0152818161293d01528181612a2101528181612a8a01528181612bde01528181612d2601528181612e6801528181612ec2015281816130a10152818161311b015281816131b401528181613341015281816134c10152818161358a0152818161372f01528181613a1a01528181613b2e01528181613dbb015281816142200152818161432801528181614492015281816148e7015281816149e801528181614aae0152614d8f0152615a866000f3fe6080604052600436106102695760003560e01c8063860aefcf11610153578063c7de38a6116100cb578063dfd594651161007f578063eb9606df11610064578063eb9606df1461081e578063f9eaee0d1461083e578063ffd9b9071461085e57600080fd5b8063dfd59465146107de578063e1f21c67146107fe57600080fd5b8063cff0ab96116100b0578063cff0ab96146106ef578063d9ccbec114610783578063dcf65482146107be57600080fd5b8063c7de38a6146106a7578063caa5c23f146106dc57600080fd5b80639c55a05411610122578063b55bb84b11610107578063b55bb84b14610633578063c12c21c014610653578063c690908a1461068757600080fd5b80639c55a054146105df578063b1836d32146105ff57600080fd5b8063860aefcf146104db5780639408b63f146105455780639b67ab30146105795780639be0536a146105bd57600080fd5b80635d91a0e0116101e65780636d19b486116101b55780637071b7c51161019a5780637071b7c51461049557806379c0ef91146104a857806382871ace146104c857600080fd5b80636d19b486146104415780636f307dc31461046157600080fd5b80635d91a0e0146103e85780635f73fbec146103fb578063601d66f61461040e5780636c8f225d1461042e57600080fd5b80633d9287fa1161023d5780635019e20a116102225780635019e20a1461039257806354fd4d50146103b257806359781034146103d557600080fd5b80633d9287fa146103055780634f0e0ef31461033957600080fd5b8062842b571461026e578063256ac915146102905780632a7ba1f7146102c55780632b7c7b11146102e5575b600080fd5b34801561027a57600080fd5b5061028e6102893660046151bf565b61087e565b005b34801561029c57600080fd5b506102b06102ab3660046151f8565b61098e565b60405190151581526020015b60405180910390f35b3480156102d157600080fd5b5061028e6102e0366004615215565b610a61565b3480156102f157600080fd5b5061028e610300366004615215565b610c3b565b34801561031157600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561034557600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102bc565b34801561039e57600080fd5b5061028e6103ad3660046151f8565b610d6a565b3480156103be57600080fd5b506103c7600281565b6040519081526020016102bc565b61028e6103e336600461522e565b61108c565b61028e6103f63660046152bb565b611275565b61028e610409366004615340565b611589565b34801561041a57600080fd5b5061028e6104293660046153d8565b6117de565b61028e61043c36600461541b565b611900565b34801561044d57600080fd5b506102b061045c3660046151f8565b611c31565b34801561046d57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b61028e6104a336600461546e565b611c60565b3480156104b457600080fd5b5061036d6104c3366004615215565b611f3e565b61028e6104d63660046152bb565b611f4b565b3480156104e757600080fd5b5060025461051c906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041682565b604080516fffffffffffffffffffffffffffffffff9384168152929091166020830152016102bc565b34801561055157600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561058557600080fd5b506004546040805167ffffffffffffffff608084901c1681526fffffffffffffffffffffffffffffffff9092166020830152016102bc565b3480156105c957600080fd5b506105d261227d565b6040516102bc91906154e2565b3480156105eb57600080fd5b5061028e6105fa36600461553c565b61228e565b34801561060b57600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561063f57600080fd5b5061028e61064e3660046151f8565b6123c4565b34801561065f57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561069357600080fd5b5061028e6106a23660046151f8565b6124c6565b3480156106b357600080fd5b506106c76106c23660046151f8565b612668565b604080519283526020830191909152016102bc565b61028e6106ea366004615557565b61289b565b3480156106fb57600080fd5b5060015461074e906fffffffffffffffffffffffffffffffff811690700100000000000000000000000000000000810460ff169071010000000000000000000000000000000000900464ffffffffff1683565b604080516fffffffffffffffffffffffffffffffff9094168452911515602084015264ffffffffff16908201526060016102bc565b34801561078f57600080fd5b506102b061079e366004615599565b600360209081526000928352604080842090915290825290205460ff1681565b3480156107ca57600080fd5b5061028e6107d93660046151f8565b612a88565b3480156107ea57600080fd5b506103c76107f93660046151f8565b612b86565b34801561080a57600080fd5b5061028e61081936600461522e565b612c6d565b34801561082a57600080fd5b5061028e6108393660046155c7565b612ec0565b34801561084a57600080fd5b506102b06108593660046151f8565b613057565b34801561086a57600080fd5b5061028e6108793660046155ee565b6131b2565b600260005414156108f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b6002600090815573ffffffffffffffffffffffffffffffffffffffff8316808252600360209081526040808420338086529083529381902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081527f9b3258bc4904fd6426b99843e206c6c7cdb1fd0f040121c25b71dafbb3851ee0910160405180910390a350506001600055565b6040517f055ee9b500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063055ee9b590602401602060405180830381865afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a43919061560b565b73ffffffffffffffffffffffffffffffffffffffff16141592915050565b60026000541415610ace576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610b5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b83919061560b565b9050610b903382846132eb565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906395373018906024015b600060405180830381600087803b158015610c1a57600080fd5b505af1158015610c2e573d6000803e3d6000fd5b5050600160005550505050565b60026000541415610ca8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610d39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5d919061560b565b9050610b90338284613411565b60026000541415610dd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000557f000000000000000000000000000000000000000000000000000000000000000015610e34576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610ec1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee5919061560b565b33600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915290205490915060ff16610f52576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f5d82613583565b5090508015610f98576040517ff713841e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b15801561102757600080fd5b505af115801561103b573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692503391507f93c70cc9715bef0d83edf2095f3595402279d274f402a73ffc17f1bcb19d863d90600090a35050600160005550565b600260005414156110f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611106613875565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063e958b70490602401602060405180830381865afa158015611197573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bb919061560b565b90506111c9848285856139b7565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401600060405180830381600087803b15801561125257600080fd5b505af1158015611266573d6000803e3d6000fd5b50506001600055505050505050565b600260005414156112e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611375573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611399919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166113e8576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806113f483613583565b915091508161142f576040517f1fdd676f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611437613875565b831561144d5761144d85858b8660016000613ae3565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632362a2d88b600185338e8e8e6040518863ffffffff1660e01b81526004016114b59796959493929190615663565b6020604051808303816000875af11580156114d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f891906156bf565b90508873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f7dfecd8419723a9d3954585a30c2a270165d70aafa146c11c1e1b88ae14390648460405161157091815260200190565b60405180910390a4505060016000555050505050505050565b600260005414156115f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ab919061560b565b90506116b5613875565b81156116cb576116cb8383338460016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d89061174a903390600090819083908d908d908d90600401615663565b6020604051808303816000875af1158015611769573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178d91906156bf565b5060405173ffffffffffffffffffffffffffffffffffffffff87169033907f460ad03b1cf79b1d64d3aefa28475f110ab66e84649c52bb41ed796b9b39198190600090a35050600160005550505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611849573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118d1576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff90811670010000000000000000000000000000000002911617600255565b6002600054141561196d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000908155606461198461ffff851687615707565b61198e9190615744565b9050611999816144f7565b6119a2816145e8565b6119ab84614668565b6119b3613875565b6040517f172c48c7000000000000000000000000000000000000000000000000000000008152600060048201819052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a64919061577f565b61ffff169150611a789050816127106157ae565b611a829083615707565b611a8c8288615707565b11611ac3576040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff86811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611b5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b81919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638587604051611bef92919091825261ffff16602082015260400190565b60405180910390a3611c2386827f00000000000000000000000000000000000000000000000000000000000000008a6139b7565b505060016000555050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526006602052604081205415155b92915050565b60026000541415611ccd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611cdb856144f7565b611ce484614668565b611ced856145e8565b600154700100000000000000000000000000000000900460ff1615611d3e576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d46613875565b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff85811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611de0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e04919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638885604051611e7292919091825261ffff16602082015260400190565b60405180910390a38215611e9057611e908484878460006001613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015611f1957600080fd5b505af1158015611f2d573d6000803e3d6000fd5b505060016000555050505050505050565b6000611c5a60058361480f565b60026000541415611fb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa15801561204b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206f919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166120be576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120c661481b565b6120fc576040517f7e52ccb400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061210782612668565b509050612112613875565b82156121285761212884848a8560016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d8906121aa908c90600290879033908f908f908f90600401615663565b6020604051808303816000875af11580156121c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ed91906156bf565b90508773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167ffada13ff2d5e1a1d9da37ad4a4130893b34e3c69c32b17f87ec31fd661b867078460405161226591815260200190565b60405180910390a45050600160005550505050505050565b6060612289600561486b565b905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612381576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561242f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612453919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146124b7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614878565b5050565b60026000541415612533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156125c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e8919061560b565b90506125f4818361489a565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401610c00565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126fc919061560b565b905060008061270b8387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156127a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127c991906156bf565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015291965061271091851690637afb010490604401602060405180830381865afa158015612863573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061288791906156bf565b6128919190615744565b9350505050915091565b60026000541415612908576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129bd919061560b565b90506129c7613875565b8115612a7e576129dc83833384600080613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015612a6557600080fd5b505af1158015612a79573d6000803e3d6000fd5b505050505b5050600160005550565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612af3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b17919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b7b576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614c92565b600080612b9283612668565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152919350600092507f000000000000000000000000000000000000000000000000000000000000000090911690633192195c906024016040805180830381865afa158015612c26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4a91906157c5565b9150819050612c5b61271084615707565b612c659190615744565b949350505050565b60026000541415612cda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063fdd5764590602401602060405180830381865afa158015612d6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d91919061560b565b73ffffffffffffffffffffffffffffffffffffffff161480612dd7575073ffffffffffffffffffffffffffffffffffffffff831660009081526006602052604090205415155b15612e0e576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612eac57600080fd5b505af1158015611c23573d6000803e3d6000fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f4f919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612fb3576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000061300a576040517f50dd11fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805464ffffffffff90921671010000000000000000000000000000000000027fffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffffff909216919091179055565b6040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063f67c5bd090602401602060405180830381865afa1580156130e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061310c91906156bf565b905080158015906131ab5750807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015613184573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a891906156bf565b16155b9392505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561321d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613241919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146132a5576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018054911515700100000000000000000000000000000000027fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff909216919091179055565b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600060448301819052917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561338c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133b091906156bf565b90506133bb816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f98274bf834d179ee08dc0604071b0dc90b54731bd5f725a5a96a39a86bce025a8360405161340391815260200190565b60405180910390a250505050565b61341a816144f7565b600154700100000000000000000000000000000000900460ff161561346b576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600160448301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561350c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061353091906156bf565b905061353b816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f9cac51154cc0d835e2f9c9d1f59a9344588cee107f4203bf58a8c797e3a58c458360405161340391815260200190565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613617919061560b565b90506000806136268387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156136c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136e491906156bf565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529195506000917f00000000000000000000000000000000000000000000000000000000000000001690633192195c906024016040805180830381865afa158015613775573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061379991906157c5565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350600092506127109187169063f9a6503090604401602060405180830381865afa158015613837573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061385b91906156bf565b6138659190615707565b9092109794965093945050505050565b34156139b5577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156138e357600080fd5b505af11580156138f7573d6000803e3d6000fd5b50506040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201523460248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16935063a9059cbb925060440190506020604051808303816000875af115801561398f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139b391906157e9565b505b565b6139c084614cb4565b6040517f830aa74500000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f0000000000000000000000000000000000000000000000000000000000000000169063830aa74590608401600060405180830381600087803b158015613a5e57600080fd5b505af1158015613a72573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fa32435755c235de2976ed44a75a2f85cb01faf0c894f639fe0c32bb9455fea8f83604051613ad591815260200190565b60405180910390a350505050565b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301523060248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b158015613b7257600080fd5b505af1158015613b86573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff871692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a28460005b8181101561441d5736888883818110613bea57613bea615806565b9050602002810190613bfc9190615835565b90506004613c0d6020830183615873565b90501015613c47576040517fe2b0e50600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b30613c5560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16141561421c578415613ca9576040517f5fb9107f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613cb86020830183615873565b613cc1916158d8565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167f59781034000000000000000000000000000000000000000000000000000000001415613e3c5760008080613d1e6020860186615873565b613d2c916004908290615920565b810190613d39919061522e565b925092509250613e34838c73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614613e2b576040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015613e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e26919061560b565b613e2d565b8b5b84846139b7565b505050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2b7c7b11000000000000000000000000000000000000000000000000000000001415613ec757600194506000613e996020840184615873565b613ea7916004908290615920565b810190613eb49190615215565b9050613ec1898983613411565b50614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2a7ba1f7000000000000000000000000000000000000000000000000000000001415613f80578415613f49576040517fc0b0caa800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613f586020840184615873565b613f66916004908290615920565b810190613f739190615215565b9050613ec18989836132eb565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f233a8caa0000000000000000000000000000000000000000000000000000000014156140e457600080613fda6020850185615873565b613fe8916004908290615920565b810190613ff5919061594a565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c8116600483015292945090925082918416906370a0823190602401602060405180830381865afa158015614069573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061408d91906156bf565b10156140dd576040517fa5ac537300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016108e7565b5050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fc690908a00000000000000000000000000000000000000000000000000000000141561416457600061413d6020840184615873565b61414b916004908290615920565b81019061415891906151f8565b9050613ec1888261489a565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f23e27a640000000000000000000000000000000000000000000000000000000014156141e45760006141bd6020840184615873565b6141cb916004908290615920565b8101906141d891906151f8565b9050613ec18882614d42565b6040517f1e9e7e7a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50614414565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff68754361426760208501856151f8565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156142d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142f4919061560b565b73ffffffffffffffffffffffffffffffffffffffff16148061436d575073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001661435560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16145b156143a4576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6144126143b46020830183615873565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506143f69250505060208401846151f8565b73ffffffffffffffffffffffffffffffffffffffff1690614e39565b505b50600101613bcf565b506040517f60c8e8938c9a0c0d88a98d6f1c562ce68077e12bf3edb8047378f2f736cb45b490600090a16040517fe1998cf900000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff86811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b1580156144d657600080fd5b505af11580156144ea573d6000803e3d6000fd5b5050505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006139b3576001546fffffffffffffffffffffffffffffffff9081169081146124c257600454608081901c906fffffffffffffffffffffffffffffffff16600067ffffffffffffffff8316431461456e578461458a565b61458a6fffffffffffffffffffffffffffffffff831686615976565b9050838111156145c6576040517f675f1a5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff81164360801b176004555050505050565b6002546fffffffffffffffffffffffffffffffff16811080614631575060025470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681115b156139b3576040517fce16799400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61467061481b565b156146a7576040517f63fc31c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1615614806577f0000000000000000000000000000000000000000000000000000000000000000801561472657503373ffffffffffffffffffffffffffffffffffffffff821614155b1561475d576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600160248301527f00000000000000000000000000000000000000000000000000000000000000001690639dc29fac90604401600060405180830381600087803b1580156147ed57600080fd5b505af1158015614801573d6000803e3d6000fd5b505050505b6139b381614cb4565b60006131ab8383614e7b565b60007f0000000000000000000000000000000000000000000000000000000000000000801561228957505060015471010000000000000000000000000000000000900464ffffffffff1642101590565b606060006131ab83614ea5565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f01565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561492b57600080fd5b505af115801561493f573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527fdf498aa1c340e992665d6fb4f3be8436d452c45a630cb6d7fab7963da39bac8793500190505b60405180910390a15050565b6040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600091829160019183917f00000000000000000000000000000000000000000000000000000000000000001690638991b2f190602401602060405180830381865afa158015614a2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a5391906156bf565b90505b808211614c895780821615614c7d576040517fe75538c700000000000000000000000000000000000000000000000000000000815260048101839052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e75538c7906024016040805180830381865afa158015614af4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b18919061577f565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529294509092506000918416906370a0823190602401602060405180830381865afa158015614b8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bb191906156bf565b90506001811115614c79576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff8481166024830152600091908b169063f9a6503090604401602060405180830381865afa158015614c33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c5791906156bf565b978801979050614c6b61ffff841682615707565b614c759088615976565b9650505b5050505b600182901b9150614a56565b50509250929050565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f50565b3373ffffffffffffffffffffffffffffffffffffffff821614801590614d0b575033600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16155b156139b3576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b158015614dd357600080fd5b505af1158015614de7573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527f69db9e9764da61b6681b89fb0f5be018506e0342036e56b59c3015a620d60977935001905061498d565b60606131ab83836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250615043565b6000826000018281548110614e9257614e92615806565b9060005260206000200154905092915050565b606081600001805480602002602001604051908101604052809291908181526020018280548015614ef557602002820191906000526020600020905b815481526020019060010190808311614ee1575b50505050509050919050565b6000818152600183016020526040812054614f4857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611c5a565b506000611c5a565b60008181526001830160205260408120548015615039576000614f746001836157ae565b8554909150600090614f88906001906157ae565b9050818114614fed576000866000018281548110614fa857614fa8615806565b9060005260206000200154905080876000018481548110614fcb57614fcb615806565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080614ffe57614ffe61598e565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611c5a565b6000915050611c5a565b6060612c65848460008585843b6150b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108e7565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516150df91906159ed565b60006040518083038185875af1925050503d806000811461511c576040519150601f19603f3d011682016040523d82523d6000602084013e615121565b606091505b509150915061513182828661513c565b979650505050505050565b6060831561514b5750816131ab565b82511561515b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e791906159ff565b73ffffffffffffffffffffffffffffffffffffffff811681146139b357600080fd5b80151581146139b357600080fd5b600080604083850312156151d257600080fd5b82356151dd8161518f565b915060208301356151ed816151b1565b809150509250929050565b60006020828403121561520a57600080fd5b81356131ab8161518f565b60006020828403121561522757600080fd5b5035919050565b60008060006060848603121561524357600080fd5b833561524e8161518f565b9250602084013561525e8161518f565b929592945050506040919091013590565b60008083601f84011261528157600080fd5b50813567ffffffffffffffff81111561529957600080fd5b6020830191508360208260051b85010111156152b457600080fd5b9250929050565b60008060008060008060a087890312156152d457600080fd5b86356152df8161518f565b955060208701356152ef8161518f565b9450604087013593506060870135615306816151b1565b9250608087013567ffffffffffffffff81111561532257600080fd5b61532e89828a0161526f565b979a9699509497509295939492505050565b60008060008060006080868803121561535857600080fd5b85356153638161518f565b945060208601359350604086013561537a816151b1565b9250606086013567ffffffffffffffff81111561539657600080fd5b6153a28882890161526f565b969995985093965092949392505050565b80356fffffffffffffffffffffffffffffffff811681146153d357600080fd5b919050565b600080604083850312156153eb57600080fd5b6153f4836153b3565b9150615402602084016153b3565b90509250929050565b61ffff811681146139b357600080fd5b6000806000806080858703121561543157600080fd5b8435935060208501356154438161518f565b925060408501356154538161540b565b915060608501356154638161540b565b939692955090935050565b60008060008060006080868803121561548657600080fd5b8535945060208601356154988161518f565b9350604086013567ffffffffffffffff8111156154b457600080fd5b6154c08882890161526f565b90945092505060608601356154d48161540b565b809150509295509295909350565b6020808252825182820181905260009190848201906040850190845b8181101561553057835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016154fe565b50909695505050505050565b60006020828403121561554e57600080fd5b6131ab826153b3565b6000806020838503121561556a57600080fd5b823567ffffffffffffffff81111561558157600080fd5b61558d8582860161526f565b90969095509350505050565b600080604083850312156155ac57600080fd5b82356155b78161518f565b915060208301356151ed8161518f565b6000602082840312156155d957600080fd5b813564ffffffffff811681146131ab57600080fd5b60006020828403121561560057600080fd5b81356131ab816151b1565b60006020828403121561561d57600080fd5b81516131ab8161518f565b6003811061565f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b73ffffffffffffffffffffffffffffffffffffffff888116825260e082019061568f602084018a615628565b6040830197909752948616606082015292909416608083015260a082015291151560c09092019190915292915050565b6000602082840312156156d157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561573f5761573f6156d8565b500290565b60008261577a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000806040838503121561579257600080fd5b825161579d8161518f565b60208401519092506151ed8161540b565b6000828210156157c0576157c06156d8565b500390565b600080604083850312156157d857600080fd5b505080516020909101519092909150565b6000602082840312156157fb57600080fd5b81516131ab816151b1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc183360301811261586957600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126158a857600080fd5b83018035915067ffffffffffffffff8211156158c357600080fd5b6020019150368190038213156152b457600080fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156159185780818660040360031b1b83161692505b505092915050565b6000808585111561593057600080fd5b8386111561593d57600080fd5b5050820193919092039150565b6000806040838503121561595d57600080fd5b82356159688161518f565b946020939093013593505050565b60008219821115615989576159896156d8565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60005b838110156159d85781810151838201526020016159c0565b838111156159e7576000848401525b50505050565b600082516158698184602087016159bd565b6020815260008251806020840152615a1e8160408501602087016159bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea2646970667358221220a3f4a705ab580a6ada1e438cd2ee4abc001b62d1d171fce12c41994900fef21664736f6c634300080a003360c06040523480156200001157600080fd5b50604051620026cf380380620026cf833981016040819052620000349162000324565b82828281600090805190602001906200004f92919062000194565b5080516200006590600190602084019062000194565b50506006805460ff19169055506001600160a01b0381166200009a57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000d9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ff9190620003a1565b6001600160a01b03166080816001600160a01b03168152505050826001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000158573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200017e9190620003a1565b6001600160a01b031660a0525062000403915050565b828054620001a290620003c6565b90600052602060002090601f016020900481019282620001c6576000855562000211565b82601f10620001e157805160ff191683800117855562000211565b8280016001018555821562000211579182015b8281111562000211578251825591602001919060010190620001f4565b506200021f92915062000223565b5090565b5b808211156200021f576000815560010162000224565b80516001600160a01b03811681146200025257600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200027f57600080fd5b81516001600160401b03808211156200029c576200029c62000257565b604051601f8301601f19908116603f01168101908282118183101715620002c757620002c762000257565b81604052838152602092508683858801011115620002e457600080fd5b600091505b83821015620003085785820183015181830184015290820190620002e9565b838211156200031a5760008385830101525b9695505050505050565b6000806000606084860312156200033a57600080fd5b62000345846200023a565b60208501519093506001600160401b03808211156200036357600080fd5b62000371878388016200026d565b935060408601519150808211156200038857600080fd5b5062000397868287016200026d565b9150509250925092565b600060208284031215620003b457600080fd5b620003bf826200023a565b9392505050565b600181811c90821680620003db57607f821691505b60208210811415620003fd57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a0516122756200045a6000396000610a9a015260008181610386015281816106db0152818161089101528181610f15015281816110010152818161115b015281816112f401526114f901526122756000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80636352211e116100f9578063a0bcfc7f11610097578063b88d4fde11610071578063b88d4fde146103a8578063c87b56dd146103b6578063e985e9c5146103c9578063fca3b5aa1461041257600080fd5b8063a0bcfc7f14610360578063a22cb46514610373578063a50cf2c81461038157600080fd5b80638456cb59116100d35780638456cb591461032a57806389406ff51461033257806395d89b41146103455780639dc29fac1461034d57600080fd5b80636352211e146102fc5780636c0360eb1461030f57806370a082311461031757600080fd5b80633f4ba83a116101665780634610f6ac116101405780634610f6ac146102b357806354fd4d50146102c6578063576cd2d1146102ce5780635c975abb146102f157600080fd5b80633f4ba83a1461029857806340c10f19146102a057806342842e0e1461028a57600080fd5b8063081812fc116101a2578063081812fc1461024b578063095ea7b31461025e57806318160ddd1461027357806323b872dd1461028a57600080fd5b806301ffc9a7146101c957806306fdde03146101f15780630754617214610206575b600080fd5b6101dc6101d7366004611cc6565b610425565b60405190151581526020015b60405180910390f35b6101f961050a565b6040516101e89190611d38565b6008546102269073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e8565b610226610259366004611d89565b61059c565b61027161026c366004611dc7565b61067b565b005b61027c60075481565b6040519081526020016101e8565b61027161026c366004611df3565b6102716106ad565b6102716102ae366004611dc7565b61079b565b6102716102c1366004611e34565b610863565b61027c600181565b6101dc6102dc366004611e34565b60096020526000908152604090205460ff1681565b60065460ff166101dc565b61022661030a366004611d89565b610cd9565b6101f9610d8b565b61027c610325366004611e34565b610e19565b610271610ee7565b610271610340366004611e34565b610fd3565b6101f9611103565b61027161035b366004611dc7565b611112565b61027161036e366004611e51565b6112c6565b61027161026c366004611ed1565b6102267f000000000000000000000000000000000000000000000000000000000000000081565b61027161026c366004611f39565b6101f96103c4366004611d89565b6113bb565b6101dc6103d7366004612037565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205460ff1690565b610271610420366004611e34565b6114cb565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd0000000000000000000000000000000000000000000000000000000014806104b857507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061050457507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60606000805461051990612065565b80601f016020809104026020016040519081016040528092919081815260200182805461054590612065565b80156105925780601f1061056757610100808354040283529160200191610592565b820191906000526020600020905b81548152906001019060200180831161057557829003601f168201915b5050505050905090565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff16610652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084015b60405180910390fd5b5060009081526004602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b6040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa158015610737573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075b91906120b9565b610791576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107996115f6565b565b60085473ffffffffffffffffffffffffffffffffffffffff1633146107ec576040517f5c2967f500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006107f783610e19565b905060005b82811015610846576000816108278473ffffffffffffffffffffffffffffffffffffffff8816612105565b6108319190612105565b905061083d85826116d7565b506001016107fc565b5081600760008282546108599190612105565b9091555050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156108ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091191906120b9565b610947576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163b610995576040517f9c01f6a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff1663c12c21c06040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610a1c575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610a199181019061211d565b60015b610a52576040517f9c01f6a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f6fbc6f6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192507f000000000000000000000000000000000000000000000000000000000000000090911690636fbc6f6b90602401602060405180830381865afa158015610ae3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0791906120b9565b1580610bad57503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16639408b63f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b94919061211d565b73ffffffffffffffffffffffffffffffffffffffff1614155b80610c5257508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c39919061211d565b73ffffffffffffffffffffffffffffffffffffffff1614155b15610c89576040517f9c01f6a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff16600090815260096020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff1680610504576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e00000000000000000000000000000000000000000000006064820152608401610649565b600a8054610d9890612065565b80601f0160208091040260200160405190810160405280929190818152602001828054610dc490612065565b8015610e115780601f10610de657610100808354040283529160200191610e11565b820191906000526020600020905b815481529060010190602001808311610df457829003601f168201915b505050505081565b600073ffffffffffffffffffffffffffffffffffffffff8216610ebe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152608401610649565b5073ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015610f71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9591906120b9565b610fcb576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610799611899565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561105d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108191906120b9565b6110b7576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff16600090815260096020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b60606001805461051990612065565b3360009081526009602052604090205460ff161580156111dd57506040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156111b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111db91906120b9565b155b15611214576040517f1e0d048500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061121f83610e19565b90508181101561125b576040517f90c9142d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b828110156112b357600060018261128b8573ffffffffffffffffffffffffffffffffffffffff8916612105565b611295919061213a565b61129f919061213a565b90506112aa81611959565b5060010161125e565b508160076000828254610859919061213a565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611350573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137491906120b9565b6113aa576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113b6600a8383611c0f565b505050565b60008181526002602052604090205460609073ffffffffffffffffffffffffffffffffffffffff1661146f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006064820152608401610649565b6000611479611a26565b9050600081511161149957604051806020016040528060008152506114c4565b806114a384611a35565b6040516020016114b4929190612151565b6040516020818303038152906040525b9392505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611555573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157991906120b9565b6115af576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60065460ff16611662576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610649565b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b73ffffffffffffffffffffffffffffffffffffffff8216611754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610649565b60008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff16156117e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610649565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805460019290611816908490612105565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60065460ff1615611906576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610649565b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586116ad3390565b600061196482610cd9565b9050611971600083611b6f565b73ffffffffffffffffffffffffffffffffffffffff811660009081526003602052604081208054600192906119a790849061213a565b909155505060008281526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555183919073ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6060600a805461051990612065565b606081611a7557505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611a9f5780611a8981612180565b9150611a989050600a836121e8565b9150611a79565b60008167ffffffffffffffff811115611aba57611aba611f0a565b6040519080825280601f01601f191660200182016040528015611ae4576020820181803683370190505b5090505b8415611b6757611af960018361213a565b9150611b06600a866121fc565b611b11906030612105565b60f81b818381518110611b2657611b26612210565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611b60600a866121e8565b9450611ae8565b949350505050565b600081815260046020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091558190611bc982610cd9565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b828054611c1b90612065565b90600052602060002090601f016020900481019282611c3d5760008555611ca1565b82601f10611c74578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00823516178555611ca1565b82800160010185558215611ca1579182015b82811115611ca1578235825591602001919060010190611c86565b50611cad929150611cb1565b5090565b5b80821115611cad5760008155600101611cb2565b600060208284031215611cd857600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146114c457600080fd5b60005b83811015611d23578181015183820152602001611d0b565b83811115611d32576000848401525b50505050565b6020815260008251806020840152611d57816040850160208701611d08565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b600060208284031215611d9b57600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff81168114611dc457600080fd5b50565b60008060408385031215611dda57600080fd5b8235611de581611da2565b946020939093013593505050565b600080600060608486031215611e0857600080fd5b8335611e1381611da2565b92506020840135611e2381611da2565b929592945050506040919091013590565b600060208284031215611e4657600080fd5b81356114c481611da2565b60008060208385031215611e6457600080fd5b823567ffffffffffffffff80821115611e7c57600080fd5b818501915085601f830112611e9057600080fd5b813581811115611e9f57600080fd5b866020828501011115611eb157600080fd5b60209290920196919550909350505050565b8015158114611dc457600080fd5b60008060408385031215611ee457600080fd5b8235611eef81611da2565b91506020830135611eff81611ec3565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060008060808587031215611f4f57600080fd5b8435611f5a81611da2565b93506020850135611f6a81611da2565b925060408501359150606085013567ffffffffffffffff80821115611f8e57600080fd5b818701915087601f830112611fa257600080fd5b813581811115611fb457611fb4611f0a565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715611ffa57611ffa611f0a565b816040528281528a602084870101111561201357600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000806040838503121561204a57600080fd5b823561205581611da2565b91506020830135611eff81611da2565b600181811c9082168061207957607f821691505b602082108114156120b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156120cb57600080fd5b81516114c481611ec3565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115612118576121186120d6565b500190565b60006020828403121561212f57600080fd5b81516114c481611da2565b60008282101561214c5761214c6120d6565b500390565b60008351612163818460208801611d08565b835190830190612177818360208801611d08565b01949350505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156121b2576121b26120d6565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826121f7576121f76121b9565b500490565b60008261220b5761220b6121b9565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea2646970667358221220ffdd83a2fc9a158347ca248f021e63fcef3a7985b3deb793f75cd1835b068aab64736f6c634300080a003360a060405234801561001057600080fd5b506040516106ca3803806106ca83398101604081905261002f9161006c565b60009190915560ff166080526001805460506001600160501b031991821681179092556004805490911690911790554260028190556003556100a2565b6000806040838503121561007f57600080fd5b82519150602083015160ff8116811461009757600080fd5b809150509250929050565b60805161060e6100bc600039600060d3015261060e6000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80639a6fc8f511610081578063d62ada111161005b578063d62ada11146102dc578063f7a30806146102f4578063feaf968c1461030757600080fd5b80639a6fc8f5146101cd578063bd18ad531461023a578063cd653afc1461024d57600080fd5b806354fd4d50116100b257806354fd4d501461012d57806367e8d83d1461013c5780637284e4161461018e57600080fd5b8063313ce567146100ce5780633fd0875f1461010c575b600080fd5b6100f57f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020015b60405180910390f35b6004546a0100000000000000000000900460ff166040516101039190610441565b60405160018152602001610103565b61018c61014a366004610482565b600480549115156c01000000000000000000000000027fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff909216919091179055565b005b604080518082018252600c81527f7072696365206f7261636c6500000000000000000000000000000000000000006020820152905161010391906104ab565b6102036101db36600461053d565b60015460005460025460035460045469ffffffffffffffffffff948516941691939590929450565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610103565b61018c610248366004610558565b61030f565b61018c61025b366004610579565b6001805469ffffffffffffffffffff9586167fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090911617905560029290925560035560048054919092167fffffffffffffffffffffffffffffffffffffffff00ff00000000000000000000909116176b020000000000000000000000179055565b6102e461035f565b6040519015158152602001610103565b61018c6103023660046105bf565b600055565b610203610385565b600480548291907fffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff166b01000000000000000000000083600281111561035757610357610412565b021790555050565b600454600090610380906b010000000000000000000000900460ff166103d6565b905090565b60008060008060006004600c9054906101000a900460ff16156103a757600080fd5b505060015460005460025460035460045469ffffffffffffffffffff9485169893975091955093509190911690565b600060028260028111156103ec576103ec610412565b14156103f757600080fd5b600182600281111561040b5761040b610412565b1492915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016006831061047c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561049457600080fd5b813580151581146104a457600080fd5b9392505050565b600060208083528351808285015260005b818110156104d8578581018301518582016040015282016104bc565b818111156104ea576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803569ffffffffffffffffffff8116811461053857600080fd5b919050565b60006020828403121561054f57600080fd5b6104a48261051e565b60006020828403121561056a57600080fd5b8135600381106104a457600080fd5b6000806000806080858703121561058f57600080fd5b6105988561051e565b935060208501359250604085013591506105b46060860161051e565b905092959194509250565b6000602082840312156105d157600080fd5b503591905056fea264697066735822122014874f7a973b86501c4c1a8be32490fe902c8f088ee234d25f9b2497e19f9e5264736f6c634300080a0033a2646970667358221220d8fdaadc825c43ac2783715ebcfe33e7b0ce3a396ac7717d65e4c95e98b6cf7f64736f6c634300080a003360806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d000117905534801561003957600080fd5b50600054604080516318caf8e360e31b815273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660048083019190915260248201929092526044810191909152632aa9a2a960e11b6064820152620100009091046001600160a01b03169063c657c71890608401600060405180830381600087803b1580156100ba57600080fd5b505af11580156100ce573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b81527390f79bf6eb2c4f870365e785982e1f101e93b90660048201526024810191909152600660448201526511949251539160d21b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561014f57600080fd5b505af1158015610163573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b8152733c44cdddb6a900fa2b585dd299e03d12fa4293bc60048201526024810191909152600a6044820152692624a8aaa4a220aa27a960b11b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b1580156101e857600080fd5b505af11580156101fc573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b815273c4375b7de8af5a38a93548eb8453a498222c4ff260048201526024810191909152600c60448201526b44554d425f4144445245535360a01b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561028357600080fd5b505af1158015610297573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b8152739965507d1a55bcc2695c58ba16fb37d819b0a4dc60048201526024810191909152600760448201526620a220a82a22a960c91b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561031957600080fd5b505af115801561032d573d6000803e3d6000fd5b505050506102a6806103406000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063ba414fa61461003b578063fa7626d414610057575b600080fd5b610043610064565b604051901515815260200160405180910390f35b6000546100439060ff1681565b60008054610100900460ff16156100845750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156101bf5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610129917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016101ff565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526101619161023b565b6000604051808303816000865af19150503d806000811461019e576040519150601f19603f3d011682016040523d82523d6000602084013e6101a3565b606091505b50915050808060200190518101906101bb919061024e565b9150505b919050565b6000815160005b818110156101e557602081850181015186830152016101cb565b818111156101f4576000828601525b509290920192915050565b7fffffffff0000000000000000000000000000000000000000000000000000000083168152600061023360048301846101c4565b949350505050565b600061024782846101c4565b9392505050565b60006020828403121561026057600080fd5b8151801515811461024757600080fdfea2646970667358221220293f55a0ef7b60c31a89dbc50e3339c80a8fdb1f9567614b200e97598226671f64736f6c634300080a003360806040523480156200001157600080fd5b506040516201110538038062011105833981016040819052620000349162000811565b6200003f3362000734565b6040516200004d9062000784565b604051809103906000f0801580156200006a573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b039283169081179091556040516310dc138160e31b81529184166004830152906386e09c0890602401600060405180830381600087803b158015620000c457600080fd5b505af1158015620000d9573d6000803e3d6000fd5b50506001546040516301ed651160e41b81526001600160a01b0385811660048301529091169250631ed651109150602401600060405180830381600087803b1580156200012557600080fd5b505af11580156200013a573d6000803e3d6000fd5b505050506040516200014c9062000792565b604051809103906000f08015801562000169573d6000803e3d6000fd5b50600280546001600160a01b0319166001600160a01b039283169081179091556001546040516376aad60560e01b81526004810192909252909116906376aad60590602401600060405180830381600087803b158015620001c957600080fd5b505af1158015620001de573d6000803e3d6000fd5b5050600154604051600093506001600160a01b0390911691506200020290620007a0565b6001600160a01b039091168152602001604051809103906000f0801580156200022f573d6000803e3d6000fd5b5060015460405163338f12b960e21b81526001600160a01b03808416600483015292935091169063ce3c4ae490602401600060405180830381600087803b1580156200027a57600080fd5b505af11580156200028f573d6000803e3d6000fd5b5050600154604051600093506001600160a01b039091169150620002b390620007ae565b6001600160a01b039091168152602001604051809103906000f080158015620002e0573d6000803e3d6000fd5b5060015460405163c5120b3960e01b81526001600160a01b03808416600483015292935091169063c5120b3990602401600060405180830381600087803b1580156200032b57600080fd5b505af115801562000340573d6000803e3d6000fd5b5050600154604051606093506001600160a01b03909116915082906200036690620007bc565b6200037392919062000849565b604051809103906000f08015801562000390573d6000803e3d6000fd5b50600380546001600160a01b0319166001600160a01b0392831690811790915560015460405163530e784f60e01b815260048101929092529091169063530e784f90602401600060405180830381600087803b158015620003f057600080fd5b505af115801562000405573d6000803e3d6000fd5b5050600154604051600093506001600160a01b0390911691506200042990620007ca565b6001600160a01b039091168152602001604051809103906000f08015801562000456573d6000803e3d6000fd5b506001546040516356ee0d3b60e11b81526001600160a01b03808416600483015292935091169063addc1a7690602401600060405180830381600087803b158015620004a157600080fd5b505af1158015620004b6573d6000803e3d6000fd5b5050600154604051600093506001600160a01b039091169150620004da90620007d8565b6001600160a01b039091168152602001604051809103906000f08015801562000507573d6000803e3d6000fd5b506001546040516321da583760e01b81526001600160a01b0380841660048301529293509116906321da583790602401600060405180830381600087803b1580156200055257600080fd5b505af115801562000567573d6000803e3d6000fd5b505050506000306040516200057c90620007e6565b6001600160a01b039091168152602001604051809103906000f080158015620005a9573d6000803e3d6000fd5b50600154604051631795d5b360e31b81526001600160a01b03808416600483015292935091169063bcaead9890602401600060405180830381600087803b158015620005f457600080fd5b505af115801562000609573d6000803e3d6000fd5b505060405163f2fde38b60e01b81523360048201526001600160a01b038416925063f2fde38b9150602401600060405180830381600087803b1580156200064f57600080fd5b505af115801562000664573d6000803e3d6000fd5b505060015460405163f2fde38b60e01b81523360048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b158015620006ae57600080fd5b505af1158015620006c3573d6000803e3d6000fd5b505060025460405163f2fde38b60e01b81523360048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b1580156200070d57600080fd5b505af115801562000722573d6000803e3d6000fd5b505050505050505050505050620008b2565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610fcd80620010dd83390190565b61098c80620020aa83390190565b610f508062002a3683390190565b614da6806200398683390190565b611b45806200872c83390190565b612ced806200a27183390190565b611627806200cf5e83390190565b612b80806200e58583390190565b80516001600160a01b03811681146200080c57600080fd5b919050565b600080604083850312156200082557600080fd5b6200083083620007f4565b91506200084060208401620007f4565b90509250929050565b6001600160a01b0383811682526040602080840182905284518483018190526000938683019290916060870190865b81811015620008a3578551805186168452840151851684840152948301949186019160010162000878565b50909998505050505050505050565b61081b80620008c26000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80638874ff1f1161005b5780638874ff1f146100f55780638da5cb5b14610108578063de28735914610126578063f2fde38b1461014657600080fd5b80632630c12f146100825780632954018c146100cb578063715018a6146100eb575b600080fd5b6003546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6001546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b6100f3610159565b005b6100f3610103366004610658565b6101eb565b60005473ffffffffffffffffffffffffffffffffffffffff166100a2565b6002546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b6100f3610154366004610734565b6103e3565b60005473ffffffffffffffffffffffffffffffffffffffff1633146101df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6101e96000610513565b565b60005473ffffffffffffffffffffffffffffffffffffffff16331461026c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101d6565b60005b815181101561035c57600354825173ffffffffffffffffffffffffffffffffffffffff9091169063e8a97a3e908490849081106102ae576102ae610756565b6020026020010151600001518484815181106102cc576102cc610756565b6020026020010151602001516040518363ffffffff1660e01b815260040161031792919073ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b600060405180830381600087803b15801561033157600080fd5b505af1158015610345573d6000803e3d6000fd5b50505050808061035490610785565b91505061026f565b506002546040517ff2fde38b00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063f2fde38b90602401600060405180830381600087803b1580156103c857600080fd5b505af11580156103dc573d6000803e3d6000fd5b5050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101d6565b73ffffffffffffffffffffffffffffffffffffffff8116610507576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016101d6565b61051081610513565b50565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156105da576105da610588565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561062757610627610588565b604052919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461065357600080fd5b919050565b6000602080838503121561066b57600080fd5b823567ffffffffffffffff8082111561068357600080fd5b818501915085601f83011261069757600080fd5b8135818111156106a9576106a9610588565b6106b7848260051b016105e0565b818152848101925060069190911b8301840190878211156106d757600080fd5b928401925b8184101561072957604084890312156106f55760008081fd5b6106fd6105b7565b6107068561062f565b815261071386860161062f565b81870152835260409390930192918401916106dc565b979650505050505050565b60006020828403121561074657600080fd5b61074f8261062f565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156107de577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea26469706673582212205ee75e57bb635aa49a1758f4ab0b04182a73115bff08f420c56a8ddb433c029364736f6c634300080a0033608060405234801561001057600080fd5b5061001a3361005f565b60405130906f20a2222922a9a9afa82927ab24a222a960811b907fb37614c7d254ea8d16eb81fa11dddaeb266aa8ba4917980859c7740aff30c69190600090a36100af565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610f0f806100be6000396000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c806377532ed9116100e3578063bcaead981161008c578063ce3c4ae411610066578063ce3c4ae414610308578063f2fde38b1461031b578063fca513a81461032e57600080fd5b8063bcaead98146102da578063c5120b39146102ed578063c513c9bb1461030057600080fd5b80639068a868116100bd5780639068a868146102b7578063addc1a76146102bf578063affd9243146102d257600080fd5b806377532ed91461027e57806386e09c08146102865780638da5cb5b1461029957600080fd5b80634c252f9111610145578063699f200f1161011f578063699f200f1461022d578063715018a61461026357806376aad6051461026b57600080fd5b80634c252f91146101fc578063530e784f1461020457806354fd4d501461021757600080fd5b80631ed65110116101765780631ed65110146101cc57806321da5837146101e157806326c74fc3146101f457600080fd5b8063060678c21461019257806308737695146101c4575b600080fd5b61019a610336565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61019a610366565b6101df6101da366004610e10565b610391565b005b6101df6101ef366004610e10565b610444565b61019a6104ef565b61019a61051a565b6101df610212366004610e10565b610545565b61021f600281565b6040519081526020016101bb565b61019a61023b366004610e4d565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6101df6105f0565b6101df610279366004610e10565b61067d565b61019a610728565b6101df610294366004610e10565b610753565b60005473ffffffffffffffffffffffffffffffffffffffff1661019a565b61019a6107fe565b6101df6102cd366004610e10565b610829565b61019a6108d4565b6101df6102e8366004610e10565b6108ff565b6101df6102fb366004610e10565b6109aa565b61019a610a55565b6101df610316366004610e10565b610a80565b6101df610329366004610e10565b610b2b565b61019a610c58565b60006103617f444154415f434f4d50524553534f520000000000000000000000000000000000610c7f565b905090565b60006103617f41434c0000000000000000000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610417576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6104417f54524541535552595f434f4e545241435400000000000000000000000000000082610d1d565b50565b60005473ffffffffffffffffffffffffffffffffffffffff1633146104c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f574554485f47415445574159000000000000000000000000000000000000000082610d1d565b60006103617f54524541535552595f434f4e5452414354000000000000000000000000000000610c7f565b60006103617f574554485f544f4b454e00000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f50524943455f4f5241434c45000000000000000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610671576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b61067b6000610d9b565b565b60005473ffffffffffffffffffffffffffffffffffffffff1633146106fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f41434c000000000000000000000000000000000000000000000000000000000082610d1d565b60006103617f574554485f474154455741590000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146107d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f574554485f544f4b454e0000000000000000000000000000000000000000000082610d1d565b60006103617f4143434f554e545f464143544f52590000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146108aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f4143434f554e545f464143544f5259000000000000000000000000000000000082610d1d565b60006103617f474541525f544f4b454e00000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610980576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f474541525f544f4b454e0000000000000000000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f444154415f434f4d50524553534f52000000000000000000000000000000000082610d1d565b60006103617f434f4e5452414354535f52454749535445520000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610b01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f434f4e5452414354535f5245474953544552000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610bac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b73ffffffffffffffffffffffffffffffffffffffff8116610c4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161040e565b61044181610d9b565b60006103617f50524943455f4f5241434c4500000000000000000000000000000000000000005b6000818152600160209081526040808320548151808301909252600382527f41503100000000000000000000000000000000000000000000000000000000009282019290925273ffffffffffffffffffffffffffffffffffffffff9091169081610d16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040e9190610e66565b5092915050565b60008281526001602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091559051909184917fb37614c7d254ea8d16eb81fa11dddaeb266aa8ba4917980859c7740aff30c6919190a35050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215610e2257600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610e4657600080fd5b9392505050565b600060208284031215610e5f57600080fd5b5035919050565b600060208083528351808285015260005b81811015610e9357858101830151858201604001528201610e77565b81811115610ea5576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea264697066735822122083c228af017c6f5cf8c395cdf7a53276ff56fdd4f4313c39f680ab73bd75417364736f6c634300080a0033608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61090e8061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063732818191161008c578063adce758d11610066578063adce758d14610215578063ba306df114610228578063d4eb5db01461023b578063f2fde38b1461027457600080fd5b806373281819146101b7578063819ad68e146101da5780638da5cb5b146101ed57600080fd5b806354fd4d50116100bd57806354fd4d501461016a5780635f259aba14610180578063715018a6146101af57600080fd5b806335914829146100e45780633a41ec641461011c5780634910832f14610155575b600080fd5b6101076100f236600461089b565b60016020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61010761012a36600461089b565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205460ff1690565b61016861016336600461089b565b610287565b005b610172600181565b604051908152602001610113565b61010761018e36600461089b565b60005473ffffffffffffffffffffffffffffffffffffffff91821691161490565b610168610387565b6101076101c536600461089b565b60026020526000908152604090205460ff1681565b6101686101e836600461089b565b610414565b60005460405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610113565b61016861022336600461089b565b61050c565b61016861023636600461089b565b610601565b61010761024936600461089b565b73ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205460ff1690565b61016861028236600461089b565b6106f6565b60005473ffffffffffffffffffffffffffffffffffffffff16331461030d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909217909155517fae26b1cfe9454ba87274a4e8330b6654684362d0f3d7bbd17f7449a1d38387c69190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610408576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b6104126000610826565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517fd400da6c0c0a894dacc0981730b88af0545d00272ee8fff1437bf560ff245fc49190a250565b60005473ffffffffffffffffffffffffffffffffffffffff16331461058d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f1998397e7203f7baca9d6f41b9e4da6e768daac5caad4234fb9bf5869d2715459190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610682576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526001602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f28b01395b7e25d20552a0c8dc8ecd3b1d4abc986f14dad7885fd45b6fd73c8d99190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811661081a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610304565b61082381610826565b50565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156108ad57600080fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146108d157600080fd5b939250505056fea26469706673582212204712efbfe997070def77285a5b8753bc882b62da2133ce1937ad26cd2b48e49864736f6c634300080a003360a060405234801561001057600080fd5b50604051610f50380380610f5083398101604081905261002f916100d7565b6000805460ff19169055806001600160a01b03811661006157604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa15801561009f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100c391906100d7565b6001600160a01b0316608052506101079050565b6000602082840312156100e957600080fd5b81516001600160a01b038116811461010057600080fd5b9392505050565b608051610e1261013e600039600081816101e2015281816102b20152818161040f0152818161057801526108510152610e126000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80638456cb5911610097578063b4ac686011610066578063b4ac686014610217578063c29277cd1461021f578063d914cd4b14610227578063e26b2f631461023a57600080fd5b80638456cb59146101cd57806394144856146101d5578063a50cf2c8146101dd578063ac4afa381461020457600080fd5b80635b16ebb7116100d35780635b16ebb7146101575780635c975abb1461018a578063673a2a1f146101955780636fbc6f6b146101aa57600080fd5b80631e16e4fc146100fa5780633f4ba83a1461013757806354fd4d5014610141575b600080fd5b61010d610108366004610c97565b61024d565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61013f610284565b005b610149600181565b60405190815260200161012e565b61017a610165366004610cb0565b60026020526000908152604090205460ff1681565b604051901515815260200161012e565b60005460ff1661017a565b61019d610372565b60405161012e9190610ced565b61017a6101b8366004610cb0565b60046020526000908152604090205460ff1681565b61013f6103e1565b61019d6104cd565b61010d7f000000000000000000000000000000000000000000000000000000000000000081565b61010d610212366004610c97565b61053a565b600154610149565b600354610149565b61013f610235366004610cb0565b61054a565b61013f610248366004610cb0565b610823565b6003818154811061025d57600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa15801561030e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103329190610d47565b610368576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610370610af6565b565b606060018054806020026020016040519081016040528092919081815260200182805480156103d757602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116103ac575b5050505050905090565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561046b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048f9190610d47565b6104c5576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610370610bd7565b606060038054806020026020016040519081016040528092919081815260200182805480156103d75760200282019190600052602060002090815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116103ac575050505050905090565b6001818154811061025d57600080fd5b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156105d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f89190610d47565b61062e576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051808201909152600281527f5a30000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff82166106b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b60405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff8116600090815260026020908152604091829020548251808401909352600383527f43523100000000000000000000000000000000000000000000000000000000009183019190915260ff1615610753576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b506001805480820182557fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915560008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909417909355915190917ff816b5143086c89d103a0683286be86c2b741e83ebfa75135aae606e2f5c6e5391a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156108ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d19190610d47565b610907576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051808201909152600281527f5a30000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8216610989576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b5073ffffffffffffffffffffffffffffffffffffffff8116600090815260046020908152604091829020548251808401909352600383527f43523200000000000000000000000000000000000000000000000000000000009183019190915260ff1615610a23576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b506003805460018082019092557fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915560008181526004602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909417909355915190917f58ad3cfc4b6552a53c8c4128ae9b080e14b4378a159280643a62c6f709cee24f91a250565b60005460ff16610b62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016106b0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff1615610c44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016106b0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610bad3390565b600060208284031215610ca957600080fd5b5035919050565b600060208284031215610cc257600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610ce657600080fd5b9392505050565b6020808252825182820181905260009190848201906040850190845b81811015610d3b57835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101610d09565b50909695505050505050565b600060208284031215610d5957600080fd5b81518015158114610ce657600080fd5b600060208083528351808285015260005b81811015610d9657858101830151858201604001528201610d7a565b81811115610da8576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea26469706673582212208f2d91c863db9ab1494a9c5db20e3fddc4b6c779ea3c3621737c105c60d9440a64736f6c634300080a003360e06040523480156200001157600080fd5b5060405162004da638038062004da6833981016040819052620000349162000160565b6001600160a01b0381166200005c57604051635919af9760e11b815260040160405180910390fd5b6001600160a01b03811660808190526040805163c513c9bb60e01b8152905163c513c9bb916004808201926020929091908290030181865afa158015620000a7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cd919062000160565b6001600160a01b031660a0816001600160a01b0316815250506080516001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000127573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200014d919062000160565b6001600160a01b031660c0525062000192565b6000602082840312156200017357600080fd5b81516001600160a01b03811681146200018b57600080fd5b9392505050565b60805160a05160c051614b896200021d6000396000818161018801528181611c4f0152612c5a0152600081816101ed015281816115e201528181611f5f0152818161213f0152818161223f0152818161243801528181612604015281816126bc01528181612788015281816129a501528181613c410152613d000152600061013c0152614b896000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c806354fd4d5011610081578063a80deda31161005b578063a80deda31461020f578063ae093f3f1461022f578063fc9914cb1461024f57600080fd5b806354fd4d50146101bd578063663b8fdb146101d35780637a0c7b21146101e857600080fd5b80632954018c116100b25780632954018c146101375780634b2f336d146101835780634c472fc9146101aa57600080fd5b80630dbd616d146100d957806313d21cdf146101025780631bcd8fc014610122575b600080fd5b6100ec6100e73660046140fc565b610272565b6040516100f9919061430b565b60405180910390f35b61011561011036600461431e565b6114d4565b6040516100f99190614444565b61012a611f59565b6040516100f99190614453565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100f9565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b61015e6101b83660046140fc565b6121f5565b6101c5600281565b6040519081526020016100f9565b6101db612432565b6040516100f991906146ea565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b61022261021d36600461431e565b6126b5565b6040516100f9919061476a565b61024261023d36600461431e565b612a75565b6040516100f991906147dd565b61026261025d3660046140fc565b613bf7565b60405190151581526020016100f9565b61035f604051806102400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160008152602001606081526020016000815260200160008152602001600015158152602001600081526020016000815260200160008152602001600060ff168152602001600081525090565b600080600080600061037088613cf4565b509450945094509450945060008560ff1660011461041d576040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015284169063e958b70490602401602060405180830381865afa1580156103f4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061041891906147f0565b6104ad565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015286169063e958b70490602401602060405180830381865afa158015610489573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ad91906147f0565b60ff8716610200890181905273ffffffffffffffffffffffffffffffffffffffff808b1660208b01528b811660608b015282168952909150600114156109e9578473ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610538573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055c91906147f0565b73ffffffffffffffffffffffffffffffffffffffff90811660808901526040517fc7de38a600000000000000000000000000000000000000000000000000000000815282821660048201529085169063c7de38a690602401602060405180830381865afa1580156105d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f5919061480d565b60c08801526040517fdfd5946500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015285169063dfd5946590602401602060405180830381865afa158015610666573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068a919061480d565b60e08801526040517f3ce0735500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015260006024830152861690633ce0735590604401602060405180830381865afa92505050801561073c575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526107399181019061480d565b60015b6107455761074c565b6101408801525b6040517f3ce0735500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015260016024830152861690633ce0735590604401602060405180830381865afa9250505080156107f9575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526107f69181019061480d565b60015b61080257610809565b6101608801525b60c08701516040517f996329f800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526024820192909252600060448201529086169063996329f89060640160a060405180830381865afa9250505080156108c4575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526108c191810190614826565b60015b6108cd576108da565b505015156101808a015250505b8073ffffffffffffffffffffffffffffffffffffffff16631afbb7a46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610925573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610949919061480d565b6101a08801526040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152851690633192195c90602401602060405180830381865afa1580156109bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109df919061480d565b60a0880152610c26565b8273ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5891906147f0565b73ffffffffffffffffffffffffffffffffffffffff90811660808901526040517fc7de38a600000000000000000000000000000000000000000000000000000000815282821660048201529083169063c7de38a6906024016040805180830381865afa158015610acc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af09190614866565b5060c08801526040517fdfd5946500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015283169063dfd5946590602401602060405180830381865afa158015610b62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b86919061480d565b60e08801526040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152841690633192195c906024016040805180830381865afa158015610bf6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1a9190614866565b60a08901526101a08801525b60008660ff16600114610ca7578373ffffffffffffffffffffffffffffffffffffffff166316f0115b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca291906147f0565b610d16565b8573ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1691906147f0565b90508073ffffffffffffffffffffffffffffffffffffffff166345d31f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d87919061480d565b6101008901526000600160ff891614610e0e578473ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610de5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e09919061480d565b610e7d565b8573ffffffffffffffffffffffffffffffffffffffff166320a05ff76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7d919061480d565b90508760ff16600114610f1f576040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152861690638991b2f190602401602060405180830381865afa158015610ef6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1a919061480d565b610faf565b6040517fb451cecc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015287169063b451cecc90602401602060405180830381865afa158015610f8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610faf919061480d565b6102208a01528067ffffffffffffffff811115610fce57610fce61488a565b60405190808252806020026020018201604052801561103e57816020015b6040805160808101825260008082526020808301829052928201819052606082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181610fec5790505b506101208a015260005b818110156113d657604080516080810182526000808252602082018190529181018290526060810191909152600180831b9060ff8c1614156111c5576040517faf0a650200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018590528a169063af0a650290604401608060405180830381865afa1580156110f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111b91906148b9565b5050602084015273ffffffffffffffffffffffffffffffffffffffff9081168084526040517ff9eaee0d0000000000000000000000000000000000000000000000000000000081526004810191909152908a169063f9eaee0d90602401602060405180830381865afa158015611195573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b9919061490d565b15156040830152611388565b6040517f172c48c70000000000000000000000000000000000000000000000000000000081526004810184905273ffffffffffffffffffffffffffffffffffffffff89169063172c48c7906024016040805180830381865afa15801561122f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112539190614928565b5073ffffffffffffffffffffffffffffffffffffffff9081168084526040517f70a082310000000000000000000000000000000000000000000000000000000081529188166004830152906370a0823190602401602060405180830381865afa1580156112c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e8919061480d565b602083015281516040517ff9eaee0d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529088169063f9eaee0d90602401602060405180830381865afa15801561135c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611380919061490d565b151560408301525b6102208c015181161561139c57600161139f565b60005b151560608301526101208c01518051839190859081106113c1576113c161495e565b60209081029190910101525050600101611048565b508273ffffffffffffffffffffffffffffffffffffffff166317d11a156040518163ffffffff1660e01b8152600401602060405180830381865afa158015611422573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611446919061480d565b896101c00181815250508273ffffffffffffffffffffffffffffffffffffffff16633dc54b406040518163ffffffff1660e01b8152600401602060405180830381865afa15801561149b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bf919061480d565b6101e08a015250969998505050505050505050565b61159b604051806102000160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600060ff1681525090565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015283917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa15801561162b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164f919061490d565b611685576040517fd384b23800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316808352604080517ffe14112d000000000000000000000000000000000000000000000000000000008152905185929163fe14112d9160048083019260209291908290030181865afa1580156116f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611719919061480d565b8360c00181815250508073ffffffffffffffffffffffffffffffffffffffff1663ef8d96036040518163ffffffff1660e01b8152600401602060405180830381865afa15801561176d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611791919061480d565b8360e00181815250508073ffffffffffffffffffffffffffffffffffffffff1663743753596040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611809919061480d565b8360a00181815250508073ffffffffffffffffffffffffffffffffffffffff16634c19386c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561185d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611881919061480d565b836101000181815250508073ffffffffffffffffffffffffffffffffffffffff1663788c6bfe6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fa919061480d565b836101600181815250508073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561194f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611973919061480d565b8360800181815250508073ffffffffffffffffffffffffffffffffffffffff166345d31f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119eb919061480d565b836101400181815250508073ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6491906147f0565b836040019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff166336dda7d56040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0a91906147f0565b836060019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663788c6bfe6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb0919061480d565b836101600181815250508073ffffffffffffffffffffffffffffffffffffffff1663e941fa786040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c29919061480d565b61018084015260408084015173ffffffffffffffffffffffffffffffffffffffff9081167f000000000000000000000000000000000000000000000000000000000000000082161460208087019190915282517f609ae31700000000000000000000000000000000000000000000000000000000815292519184169263609ae31792600480830193928290030181865afa158015611ccb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cef919061480d565b836101c00181815250508073ffffffffffffffffffffffffffffffffffffffff1663dbcb313b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d68919061480d565b836101a00181815250506000836060015173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de7919061480d565b6040517f5427c9380000000000000000000000000000000000000000000000000000000081526004810182905290915060009073ffffffffffffffffffffffffffffffffffffffff841690635427c93890602401602060405180830381865afa158015611e58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7c919061480d565b90508015611ec7576101808501518190611eb890611e9c906127106149bc565b876101000151886101400151611eb291906149d3565b90613fd0565b611ec29190614a3f565b611ece565b8461014001515b856101200181815250508273ffffffffffffffffffffffffffffffffffffffff166354fd4d506040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f47919061480d565b60ff166101e086015250505050919050565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b4ac68606040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fec919061480d565b90508067ffffffffffffffff8111156120075761200761488a565b6040519080825280602002602001820160405280156120ff57816020015b6120ec604051806102000160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600060ff1681525090565b8152602001906001900390816120255790505b50915060005b818110156121f0576040517fac4afa38000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ac4afa3890602401602060405180830381865afa15801561219b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121bf91906147f0565b90506121ca816114d4565b8483815181106121dc576121dc61495e565b602090810291909101015250600101612105565b505090565b6040517f6fbc6f6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015260009184917f00000000000000000000000000000000000000000000000000000000000000001690636fbc6f6b90602401602060405180830381865afa158015612286573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122aa919061490d565b6122e0576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060006122ee87613cf4565b5050935093505092508260ff16600114612397576040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015282169063fdd5764590602401602060405180830381865afa15801561236e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061239291906147f0565b612427565b6040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015283169063fdd5764590602401602060405180830381865afa158015612403573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061242791906147f0565b979650505050505050565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c29277cd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124c5919061480d565b90508067ffffffffffffffff8111156124e0576124e061488a565b6040519080825280602002602001820160405280156125c457816020015b60408051610260810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083018290526101208301819052610140830181905261016083015261018082018190526101a082018190526101c082018190526101e082018190526102008201819052610220820181905261024082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816124fe5790505b50915060005b818110156121f0576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa158015612660573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061268491906147f0565b905061268f81612a75565b8483815181106126a1576126a161495e565b6020908102919091010152506001016125ca565b60606000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c29277cd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612725573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612749919061480d565b905060005b81811015612829576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa1580156127e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061280891906147f0565b90506128148187613bf7565b15612820578360010193505b5060010161274e565b508167ffffffffffffffff8111156128435761284361488a565b60405190808252806020026020018201604052801561296157816020015b61294e604051806102400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160008152602001606081526020016000815260200160008152602001600015158152602001600081526020016000815260200160008152602001600060ff168152602001600081525090565b8152602001906001900390816128615790505b5092506000915060005b81811015612a6d576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa158015612a01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a2591906147f0565b9050612a318187613bf7565b15612a6457612a408187610272565b858581518110612a5257612a5261495e565b60209081029190910101526001909301925b5060010161296b565b505050919050565b604080516102608101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082018390526101208201819052610140820181905261016082015261018081018290526101a081018290526101c081018290526101e08101829052610200810182905261022081018290526102408101829052908080808080612b1b88613cf4565b73ffffffffffffffffffffffffffffffffffffffff8e168d5260ff86166101808e01819052959b50939950919750955093509150600114612bca578273ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ba1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bc591906147f0565b612c39565b8473ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c3991906147f0565b73ffffffffffffffffffffffffffffffffffffffff908116602089018190527f00000000000000000000000000000000000000000000000000000000000000009091161460408801526000600160ff881614612d03578373ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cfe91906147f0565b612d72565b8573ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d7291906147f0565b6040517f2e97ca2100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b8116600483015291925090821690632e97ca2190602401602060405180830381865afa158015612de2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e06919061490d565b15156060890152604080517f45d31f9d000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff8316916345d31f9d9160048083019260209291908290030181865afa158015612e78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e9c919061480d565b8860800181815250508073ffffffffffffffffffffffffffffffffffffffff1663743753596040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ef0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f14919061480d565b610100890152600160ff88161415613017578573ffffffffffffffffffffffffffffffffffffffff16639b2cb5d86040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f95919061480d565b8860a00181815250508573ffffffffffffffffffffffffffffffffffffffff16635f48f3936040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fe9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061300d919061480d565b60c08901526130a5565b8273ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa158015613061573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130859190614a73565b6fffffffffffffffffffffffffffffffff90811660c08b01521660a08901525b60008760ff16600114613126578473ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613121919061480d565b613195565b8573ffffffffffffffffffffffffffffffffffffffff166320a05ff76040518163ffffffff1660e01b8152600401602060405180830381865afa158015613171573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613195919061480d565b90508067ffffffffffffffff8111156131b0576131b061488a565b6040519080825280602002602001820160405280156131d9578160200160208202803683370190505b506101208a01528067ffffffffffffffff8111156131f9576131f961488a565b604051908082528060200260200182016040528015613222578160200160208202803683370190505b506101608a015260005b818110156134c4578860ff16600114156133b4576040517f5e5f2e260000000000000000000000000000000000000000000000000000000081526004810182905260009073ffffffffffffffffffffffffffffffffffffffff891690635e5f2e2690602401602060405180830381865afa1580156132ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132d291906147f0565b9050808b610120015183815181106132ec576132ec61495e565b73ffffffffffffffffffffffffffffffffffffffff92831660209182029290920101526040517f78327438000000000000000000000000000000000000000000000000000000008152828216600482015290891690637832743890602401602060405180830381865afa158015613367573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061338b919061480d565b8b610160015183815181106133a2576133a261495e565b602002602001018181525050506134bc565b6040517f172c48c70000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff87169063172c48c7906024016040805180830381865afa15801561341e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134429190614928565b8061ffff1690508b610120015183815181106134605761346061495e565b602002602001018c6101600151848151811061347e5761347e61495e565b60200260200101828152508273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525050505b60010161322c565b5060008860ff16600114613546578373ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561351d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613541919061480d565b6135b5565b8673ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613591573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135b5919061480d565b90508067ffffffffffffffff8111156135d0576135d061488a565b60405190808252806020026020018201604052801561361557816020015b60408051808201909152600080825260208201528152602001906001900390816135ee5790505b506101408b015260005b818110156139015760408051808201909152600080825260208201528a60ff166001146136da576040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff871690635094cb4f90602401602060405180830381865afa1580156136b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136d591906147f0565b613769565b6040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff8a1690635094cb4f90602401602060405180830381865afa158015613745573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061376991906147f0565b73ffffffffffffffffffffffffffffffffffffffff168152600160ff8c16146138245780516040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529089169063fdd5764590602401602060405180830381865afa1580156137fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061381f91906147f0565b6138b7565b80516040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152908a169063fdd5764590602401602060405180830381865afa158015613893573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138b791906147f0565b73ffffffffffffffffffffffffffffffffffffffff1660208201526101408c01518051829190849081106138ed576138ed61495e565b60209081029190910101525060010161361f565b508860ff166001141561398f578773ffffffffffffffffffffffffffffffffffffffff1663b2c53a6c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613959573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061397d919061480d565b60e08b015260ff6102408b0152613be9565b73ffffffffffffffffffffffffffffffffffffffff85166101a08b01819052604080517f9408b63f0000000000000000000000000000000000000000000000000000000081529051639408b63f916004808201926020929091908290030181865afa158015613a02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a2691906147f0565b8a6101e0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508473ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015613aa9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613acd9190614aa6565b5015156102008c015250604080517f9fd12b77000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff881691639fd12b779160048083019260209291908290030181865afa158015613b42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b66919061480d565b8a6102200181815250508573ffffffffffffffffffffffffffffffffffffffff16638345f26e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bdf9190614af7565b60ff166102408b01525b505050505050505050919050565b6040517f6fbc6f6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015260009184917f00000000000000000000000000000000000000000000000000000000000000001690636fbc6f6b90602401602060405180830381865afa158015613c88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cac919061490d565b613ce2576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613cec8484614023565b949350505050565b600080600080600080867f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636fbc6f6b826040518263ffffffff1660e01b8152600401613d73919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa158015613d90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613db4919061490d565b613dea576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8773ffffffffffffffffffffffffffffffffffffffff166354fd4d506040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e59919061480d565b96508660ff1660011415613ee0578795508573ffffffffffffffffffffffffffffffffffffffff1663f93f515b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613eb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ed991906147f0565b9450613fc6565b8793508373ffffffffffffffffffffffffffffffffffffffff16632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f5291906147f0565b92508373ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fc391906147f0565b91505b5091939550919395565b6000821580613fdd575081155b15613fea5750600061401d565b612710613ff8600282614b1a565b61ffff1661400684866149d3565b6140109190614b3b565b61401a9190614a3f565b90505b92915050565b6040517f055ee9b500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600091829185169063055ee9b590602401602060405180830381865afa158015614094573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140b891906147f0565b73ffffffffffffffffffffffffffffffffffffffff1614159392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146140f957600080fd5b50565b6000806040838503121561410f57600080fd5b823561411a816140d7565b9150602083013561412a816140d7565b809150509250929050565b600081518084526020808501945080840160005b8381101561419f578151805173ffffffffffffffffffffffffffffffffffffffff168852838101518489015260408082015115159089015260609081015115159088015260809096019590820190600101614149565b509495945050505050565b805173ffffffffffffffffffffffffffffffffffffffff168252600061024060208301516141f0602086018273ffffffffffffffffffffffffffffffffffffffff169052565b506040830151614204604086018215159052565b50606083015161422c606086018273ffffffffffffffffffffffffffffffffffffffff169052565b506080830151614254608086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060a083015160a085015260c083015160c085015260e083015160e085015261010080840151818601525061012080840151828287015261429783870182614135565b92505050610140808401518186015250610160808401518186015250610180808401516142c78287018215159052565b50506101a083810151908501526101c080840151908501526101e080840151908501526102008084015160ff16908501526102209283015192909301919091525090565b60208152600061401a60208301846141aa565b60006020828403121561433057600080fd5b813561433b816140d7565b9392505050565b805173ffffffffffffffffffffffffffffffffffffffff168252602081015161436f602084018215159052565b506040810151614397604084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060608101516143bf606084018273ffffffffffffffffffffffffffffffffffffffff169052565b506080818101519083015260a0808201519083015260c0808201519083015260e08082015190830152610100808201519083015261012080820151908301526101408082015190830152610160808201519083015261018080820151908301526101a080820151908301526101c080820151908301526101e09081015160ff16910152565b610200810161401d8284614342565b6020808252825182820181905260009190848201906040850190845b8181101561449657614482838551614342565b92840192610200929092019160010161446f565b50909695505050505050565b600081518084526020808501945080840160005b8381101561419f57815173ffffffffffffffffffffffffffffffffffffffff16875295820195908201906001016144b6565b600081518084526020808501945080840160005b8381101561419f578151805173ffffffffffffffffffffffffffffffffffffffff9081168952908401511683880152604090960195908201906001016144fc565b600081518084526020808501945080840160005b8381101561419f57815187529582019590820190600101614551565b805173ffffffffffffffffffffffffffffffffffffffff168252600061026060208301516145b3602086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060408301516145c7604086018215159052565b5060608301516145db606086018215159052565b506080830151608085015260a083015160a085015260c083015160c085015260e083015160e0850152610100808401518186015250610120808401518282870152614628838701826144a2565b92505050610140808401518583038287015261464483826144e8565b925050506101608084015185830382870152614660838261453d565b92505050610180808401516146798287018260ff169052565b50506101a08381015173ffffffffffffffffffffffffffffffffffffffff908116918601919091526101c0808501511515908601526101e080850151909116908501526102008084015115159085015261022080840151908501526102409283015160ff1692909301919091525090565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561475d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc088860301845261474b85835161456d565b94509285019290850190600101614711565b5092979650505050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561475d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08886030184526147cb8583516141aa565b94509285019290850190600101614791565b60208152600061401a602083018461456d565b60006020828403121561480257600080fd5b815161433b816140d7565b60006020828403121561481f57600080fd5b5051919050565b600080600080600060a0868803121561483e57600080fd5b5050835160208501516040860151606087015160809097015192989197509594509092509050565b6000806040838503121561487957600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080600080608085870312156148cf57600080fd5b84516148da816140d7565b60208601516040870151606090970151919890975090945092505050565b8051801515811461490857600080fd5b919050565b60006020828403121561491f57600080fd5b61401a826148f8565b6000806040838503121561493b57600080fd5b8251614946816140d7565b602084015190925061ffff8116811461412a57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156149ce576149ce61498d565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614a0b57614a0b61498d565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614a4e57614a4e614a10565b500490565b80516fffffffffffffffffffffffffffffffff8116811461490857600080fd5b60008060408385031215614a8657600080fd5b614a8f83614a53565b9150614a9d60208401614a53565b90509250929050565b600080600060608486031215614abb57600080fd5b614ac484614a53565b9250614ad2602085016148f8565b9150604084015164ffffffffff81168114614aec57600080fd5b809150509250925092565b600060208284031215614b0957600080fd5b815160ff8116811461433b57600080fd5b600061ffff80841680614b2f57614b2f614a10565b92169190910492915050565b60008219821115614b4e57614b4e61498d565b50019056fea2646970667358221220d15108d0bec9cc6f3903875dd8412869a3da1b36661bdc780e2e2f0ae3136d2464736f6c634300080a003360a06040523480156200001157600080fd5b5060405162001b4538038062001b45833981016040819052620000349162000608565b6000805460ff19169055816001600160a01b0381166200006757604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cc91906200070a565b6001600160a01b031660805250805160005b818110156200014257620001398382815181106200010057620001006200072f565b6020026020010151600001518483815181106200012157620001216200072f565b6020026020010151602001516200014c60201b60201c565b600101620000de565b5050505062000822565b6001600160a01b03821615806200016a57506001600160a01b038116155b156200018957604051635919af9760e11b815260040160405180910390fd5b620001a8826001600160a01b0316620004ba60201b620006751760201c565b620001d65760405163df4c572d60e01b81526001600160a01b03831660048201526024015b60405180910390fd5b620001f5816001600160a01b0316620004ba60201b620006751760201c565b6200021f5760405163df4c572d60e01b81526001600160a01b0382166004820152602401620001cd565b806001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200027c575060408051601f3d908101601f19168201909252620002799181019062000745565b60015b6200029a576040516367a7cd4360e01b815260040160405180910390fd5b8060ff16600814620002bf576040516367a7cd4360e01b815260040160405180910390fd5b506000816001600160a01b031663d62ada116040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200031f575060408051601f3d908101601f191682019092526200031c918101906200076a565b60015b6200032a576200032d565b90505b6000836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200038c575060408051601f3d908101601f19168201909252620003899181019062000745565b60015b620003aa5760405163528ca31d60e01b815260040160405180910390fd5b60128160ff161115620003d05760405163528ca31d60e01b815260040160405180910390fd5b9050826001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa9250505080156200042f575060408051601f3d908101601f191682019092526200042c91810190620007a6565b60015b6200044d576040516367a7cd4360e01b815260040160405180910390fd5b8662000461576200046185858484620004c0565b5050505050620004748484848462000526565b826001600160a01b0316846001600160a01b03167fe263805b03657ab13064915d0723c5ce14981547e7cba5283f66b9e5d81f6e6e60405160405180910390a350505050565b3b151590565b60008313620004e2576040516356e05d2b60e01b815260040160405180910390fd5b836001600160501b0316816001600160501b0316108062000501575081155b15620005205760405163b1cf675560e01b815260040160405180910390fd5b50505050565b6001600160a01b03831682156200053e57600160a11b175b6200055460ff60a21b60a284901b1682620007fb565b6001600160a01b0390951660009081526001602052604090209490945550505050565b80516001600160a01b03811681146200058f57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715620005cf57620005cf62000594565b60405290565b604051601f8201601f191681016001600160401b038111828210171562000600576200060062000594565b604052919050565b60008060408084860312156200061d57600080fd5b620006288462000577565b602085810151919450906001600160401b03808211156200064857600080fd5b818701915087601f8301126200065d57600080fd5b81518181111562000672576200067262000594565b62000682848260051b01620005d5565b818152848101925060069190911b830184019089821115620006a357600080fd5b928401925b81841015620006fa5785848b031215620006c25760008081fd5b620006cc620005aa565b620006d78562000577565b8152620006e686860162000577565b8187015283529285019291840191620006a8565b8096505050505050509250929050565b6000602082840312156200071d57600080fd5b620007288262000577565b9392505050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156200075857600080fd5b815160ff811681146200072857600080fd5b6000602082840312156200077d57600080fd5b815180151581146200072857600080fd5b80516001600160501b03811681146200058f57600080fd5b600080600080600060a08688031215620007bf57600080fd5b620007ca866200078e565b9450602086015193506040860151925060608601519150620007ef608087016200078e565b90509295509295909350565b600082198211156200081d57634e487b7160e01b600052601160045260246000fd5b500190565b6080516112f262000853600039600081816101b201528181610280015281816103e201526104ff01526112f26000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c80638456cb591161008c578063b66102df11610066578063b66102df146101d4578063e8a97a3e146101e7578063f190e5fa146101fa578063f9a650301461023f57600080fd5b80638456cb591461016d5780639dcb511a14610175578063a50cf2c8146101ad57600080fd5b80635c975abb116100bd5780635c975abb1461011c5780635cecbd0e146101325780637afb01041461015a57600080fd5b80633f4ba83a146100e457806341976e09146100ee57806354fd4d5014610114575b600080fd5b6100ec610252565b005b6101016100fc366004610f28565b610340565b6040519081526020015b60405180910390f35b610101600281565b60005460ff16604051901515815260200161010b565b610145610140366004610f4a565b610352565b6040805192835260208301919091520161010b565b610101610168366004610f90565b610376565b6100ec6103b4565b610188610183366004610f28565b6104a0565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010b565b6101887f000000000000000000000000000000000000000000000000000000000000000081565b6101016101e2366004610fbc565b6104b4565b6100ec6101f5366004610ff8565b6104d1565b61020d610208366004610f28565b6105c3565b6040805173ffffffffffffffffffffffffffffffffffffffff909416845291151560208401529082015260600161010b565b61010161024d366004610f90565b61064d565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156102dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103009190611022565b610336576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033e61067b565b565b600061034b82610761565b5092915050565b60008061035f868661064d565b915061036b848461064d565b905094509492505050565b600080600061038484610761565b90925090508161039582600a611193565b61039f908761119f565b6103a991906111dc565b925050505b92915050565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561043e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104629190611022565b610498576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033e610819565b60006104ab826105c3565b50909392505050565b60006104c96104c3858561064d565b83610376565b949350505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561055b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057f9190611022565b6105b5576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105bf82826108d9565b5050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600160205260408120548190819080610624576040517f4bb8ad8200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b947402000000000000000000000000000000000000000086161515945060a286901c9350915050565b600080600061065b84610761565b909250905061066b81600a611193565b61039f838761119f565b3b151590565b60005460ff166106ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b600080600080610770856105c3565b8095508193508294505050506000806000808573ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156107cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f19190611231565b9450945050935093508461080b5761080b84848484610dd9565b829750505050505050915091565b60005460ff1615610886576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016106e3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586107373390565b73ffffffffffffffffffffffffffffffffffffffff82161580610910575073ffffffffffffffffffffffffffffffffffffffff8116155b15610947576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82163b6109ad576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016106e3565b73ffffffffffffffffffffffffffffffffffffffff81163b610a13576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024016106e3565b8073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610a98575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610a9591810190611281565b60015b610ace576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060ff16600814610b0b576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060008173ffffffffffffffffffffffffffffffffffffffff1663d62ada116040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610b93575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610b9091810190611022565b60015b610b9c57610b9f565b90505b60008373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610c26575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610c2391810190611281565b60015b610c5c576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60128160ff161115610c9a576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b90508273ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa925050508015610d21575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610d1e91810190611231565b60015b610d57576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b86610d6857610d6885858484610dd9565b5050505050610d7984848484610e74565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fe263805b03657ab13064915d0723c5ce14981547e7cba5283f66b9e5d81f6e6e60405160405180910390a350505050565b60008313610e13576040517f56e05d2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8369ffffffffffffffffffff168169ffffffffffffffffffff161080610e37575081155b15610e6e576040517fb1cf675500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b73ffffffffffffffffffffffffffffffffffffffff83168215610ea95774020000000000000000000000000000000000000000175b610ecf7503fc000000000000000000000000000000000000000060a284901b16826112a4565b73ffffffffffffffffffffffffffffffffffffffff90951660009081526001602052604090209490945550505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610f2357600080fd5b919050565b600060208284031215610f3a57600080fd5b610f4382610eff565b9392505050565b60008060008060808587031215610f6057600080fd5b84359350610f7060208601610eff565b925060408501359150610f8560608601610eff565b905092959194509250565b60008060408385031215610fa357600080fd5b82359150610fb360208401610eff565b90509250929050565b600080600060608486031215610fd157600080fd5b83359250610fe160208501610eff565b9150610fef60408501610eff565b90509250925092565b6000806040838503121561100b57600080fd5b61101483610eff565b9150610fb360208401610eff565b60006020828403121561103457600080fd5b81518015158114610f4357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b808511156110cc57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156110b2576110b2611044565b808516156110bf57918102915b93841c9390800290611078565b509250929050565b6000826110e3575060016103ae565b816110f0575060006103ae565b816001811461110657600281146111105761112c565b60019150506103ae565b60ff84111561112157611121611044565b50506001821b6103ae565b5060208310610133831016604e8410600b841016171561114f575081810a6103ae565b6111598383611073565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561118b5761118b611044565b029392505050565b6000610f4383836110d4565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156111d7576111d7611044565b500290565b600082611212577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b805169ffffffffffffffffffff81168114610f2357600080fd5b600080600080600060a0868803121561124957600080fd5b61125286611217565b945060208601519350604086015192506060860151915061127560808701611217565b90509295509295909350565b60006020828403121561129357600080fd5b815160ff81168114610f4357600080fd5b600082198211156112b7576112b7611044565b50019056fea2646970667358221220e7485a2cb5750973f539ca59d2211008b42bb92b6c49605a53f5d9c88c330fb164736f6c634300080a003360e06040523480156200001157600080fd5b5060405162002ced38038062002ced8339810160408190526200003491620004bb565b6000805460ff19169055806001600160a01b0381166200006757604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cc9190620004bb565b6001600160a01b039081166080526001805560408051808201909152600281526105a360f41b602082015291508216620001245760405162461bcd60e51b81526004016200011b9190620004ed565b60405180910390fd5b50806001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000164573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200018a9190620004bb565b6001600160a01b031660c052604051620001a490620004ad565b604051809103906000f080158015620001c1573d6000803e3d6000fd5b506001600160a01b031660a08190526040805163204a7f0760e21b81529051638129fc1c9160048082019260009290919082900301818387803b1580156200020857600080fd5b505af11580156200021d573d6000803e3d6000fd5b50505050620002316200028a60201b60201c565b50600454600380546001600160a01b039092166001600160a01b03199283161790556000805260026020527fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b8054909116905562000545565b6000620002a460a0516200038c60201b6200119b1760201c565b9050806001600160a01b0316638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620002e257600080fd5b505af1158015620002f7573d6000803e3d6000fd5b5050600480546001600160a01b03908116600090815260026020908152604090912080546001600160a01b03199081169388169384179091558354169091179091556200035492506005915083906200043b811b6200127d17901c565b506040516001600160a01b038216907f9f69b6c10f6810213e055b0ba6bc0a4e2603f73c221aad77ea35da819cda7dc390600090a250565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260601b60148201526e5af43d82803e903d91602b57fd5bf360881b60288201526037816000f09150506001600160a01b038116620004365760405162461bcd60e51b815260206004820152601660248201527f455243313136373a20637265617465206661696c65640000000000000000000060448201526064016200011b565b919050565b600062000452836001600160a01b0384166200045b565b90505b92915050565b6000818152600183016020526040812054620004a45750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000455565b50600062000455565b610e788062001e7583390190565b600060208284031215620004ce57600080fd5b81516001600160a01b0381168114620004e657600080fd5b9392505050565b600060208083528351808285015260005b818110156200051c57858101830151858201604001528201620004fe565b818111156200052f576000604083870101525b50601f01601f1916929092016040019392505050565b60805160a05160c0516118cf620005a66000396000818161026a015281816103680152610b7001526000818161020201526110650152600081816102c4015281816105b80152818161099601528181610a840152610e7401526118cf6000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806388f64c54116100cd578063b193976311610081578063d82ecc4811610066578063d82ecc4814610309578063e3ba9ace1461031c578063f23953ab1461032f57600080fd5b8063b1939763146102f9578063b60e85181461030157600080fd5b80638f7dcfa3116100b25780638f7dcfa31461029f578063a50cf2c8146102bf578063a904aab6146102e657600080fd5b806388f64c541461026557806389b77b3e1461028c57600080fd5b806354fd4d50116101245780635da33c5b116101095780635da33c5b146101fd578063765e0159146102245780638456cb591461025d57600080fd5b806354fd4d50146101d05780635c975abb146101e657600080fd5b806313d8c8401461015657806321d18456146101a05780632932472f146101b35780633f4ba83a146101c8575b600080fd5b6004546101769073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6101766101ae366004611651565b610337565b6101c66101c1366004611697565b61058a565b005b6101c6610968565b6101d8600181565b604051908152602001610197565b60005460ff165b6040519015158152602001610197565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101766102323660046116da565b73ffffffffffffffffffffffffffffffffffffffff9081166000908152600260205260409020541690565b6101c6610a56565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101c661029a3660046116da565b610b42565b6003546101769073ffffffffffffffffffffffffffffffffffffffff1681565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101c66102f4366004611697565b610e46565b6101d8610fb8565b6101d8611033565b6101ed6103173660046116da565b611044565b61017661032a3660046116f5565b611051565b6101c661105e565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa1580156103c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103e8919061170e565b6040518060400160405280600281526020017f43500000000000000000000000000000000000000000000000000000000000008152509061045f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b60405180910390fd5b506104686112a6565b6003805473ffffffffffffffffffffffffffffffffffffffff8082166000818152600260205260409081902080549093167fffffffffffffffffffffffff0000000000000000000000000000000000000000948516179094558154909216905590517fc75b5a710000000000000000000000000000000000000000000000000000000081523360048201526024810185905260448101849052819063c75b5a7190606401600060405180830381600087803b15801561052657600080fd5b505af115801561053a573d6000803e3d6000fd5b505060405133925073ffffffffffffffffffffffffffffffffffffffff841691507ff3ede7039176503a8ad1fe7cfaa29475a9dbe0cdcaf04ecf9a5c10570c47b10390600090a390505b92915050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610614573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610638919061170e565b61066e576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106766112a6565b60035473ffffffffffffffffffffffffffffffffffffffff838116911614156106fa576003805473ffffffffffffffffffffffffffffffffffffffff808216600090815260026020526040902080549091167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092558154169055610865565b73ffffffffffffffffffffffffffffffffffffffff838116600090815260026020908152604091829020548251808401909352600383527f4146330000000000000000000000000000000000000000000000000000000000918301919091529091848116911614610798576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b5060045473ffffffffffffffffffffffffffffffffffffffff838116911614156107fd57600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85161790555b73ffffffffffffffffffffffffffffffffffffffff828116600081815260026020526040808220805488861684529183208054929095167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790945591905281541690555b6040517fc75b5a7100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600060248301819052604483015283169063c75b5a7190606401600060405180830381600087803b1580156108dc57600080fd5b505af11580156108f0573d6000803e3d6000fd5b505050506109088260056112dd90919063ffffffff16565b508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f25e267469ba2ae82515be7b3d45df60bf8308343f0809e8cf7319058e2255ce660405160405180910390a3505050565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156109f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a16919061170e565b610a4c576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a546112ff565b565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015610ae0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b04919061170e565b610b3a576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a546113e0565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa158015610bcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf0919061170e565b6040518060400160405280600281526020017f435000000000000000000000000000000000000000000000000000000000000081525090610c5e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b50610c6a6005826114a0565b6040518060400160405280600381526020017f414634000000000000000000000000000000000000000000000000000000000081525090610cd8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b50438173ffffffffffffffffffffffffffffffffffffffff16633dc54b406040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4991906117a3565b14156040518060400160405280600381526020017f414631000000000000000000000000000000000000000000000000000000000081525090610db9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b506004805473ffffffffffffffffffffffffffffffffffffffff90811660009081526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081169487169485179091558454168317909355915190917fced6ab9afc868b3a088366f6631ae20752993b5cce5d5f0534ea5a59fcc57d5691a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610ed0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef4919061170e565b610f2a576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f19a1603900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301528416906319a1603990604401600060405180830381600087803b158015610f9b57600080fd5b505af1158015610faf573d6000803e3d6000fd5b50505050505050565b600354600090819073ffffffffffffffffffffffffffffffffffffffff165b73ffffffffffffffffffffffffffffffffffffffff81161561102d5773ffffffffffffffffffffffffffffffffffffffff9081166000908152600260205260409020541681611025816117eb565b925050610fd7565b50919050565b600061103f60056114cf565b905090565b60006105846005836114a0565b60006105846005836114d9565b60006110897f000000000000000000000000000000000000000000000000000000000000000061119b565b90508073ffffffffffffffffffffffffffffffffffffffff16638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156110d357600080fd5b505af11580156110e7573d6000803e3d6000fd5b50506004805473ffffffffffffffffffffffffffffffffffffffff908116600090815260026020526040902080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811692871692831790915582541617905550611156905060058261127d565b5060405173ffffffffffffffffffffffffffffffffffffffff8216907f9f69b6c10f6810213e055b0ba6bc0a4e2603f73c221aad77ea35da819cda7dc390600090a250565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260601b60148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f091505073ffffffffffffffffffffffffffffffffffffffff8116611278576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f455243313136373a20637265617465206661696c6564000000000000000000006044820152606401610456565b919050565b600061129f8373ffffffffffffffffffffffffffffffffffffffff84166114e5565b9392505050565b60035473ffffffffffffffffffffffffffffffffffffffff90811660009081526002602052604090205416610a5457610a5461105e565b600061129f8373ffffffffffffffffffffffffffffffffffffffff8416611534565b60005460ff1661136b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610456565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff161561144d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610456565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586113b63390565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600183016020526040812054151561129f565b6000610584825490565b600061129f8383611627565b600081815260018301602052604081205461152c57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610584565b506000610584565b6000818152600183016020526040812054801561161d576000611558600183611824565b855490915060009061156c90600190611824565b90508181146115d157600086600001828154811061158c5761158c61183b565b90600052602060002001549050808760000184815481106115af576115af61183b565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806115e2576115e261186a565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610584565b6000915050610584565b600082600001828154811061163e5761163e61183b565b9060005260206000200154905092915050565b6000806040838503121561166457600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff8116811461127857600080fd5b6000806000606084860312156116ac57600080fd5b6116b584611673565b92506116c360208501611673565b91506116d160408501611673565b90509250925092565b6000602082840312156116ec57600080fd5b61129f82611673565b60006020828403121561170757600080fd5b5035919050565b60006020828403121561172057600080fd5b8151801515811461129f57600080fd5b600060208083528351808285015260005b8181101561175d57858101830151858201604001528201611741565b8181111561176f576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b6000602082840312156117b557600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561181d5761181d6117bc565b5060010190565b600082821015611836576118366117bc565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220f1e9c81b8c3af2491c907ee66cf24e1bb76111b821db02df8f98dbb48b5ab5fa64736f6c634300080a0033608060405234801561001057600080fd5b50610e58806100206000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c806354fd4d5011610081578063c45a01551161005b578063c45a0155146101a4578063c75b5a71146101ca578063d1660f99146101dd57600080fd5b806354fd4d501461014f5780638129fc1c14610157578063c12c21c01461015f57600080fd5b80631afbb7a4116100b25780631afbb7a41461011d5780631cff79cd146101265780633dc54b401461014657600080fd5b806316128211146100d957806317d11a15146100ee57806319a160391461010a575b600080fd5b6100ec6100e7366004610b42565b6101f0565b005b6100f760035481565b6040519081526020015b60405180910390f35b6100ec610118366004610b8d565b61024c565b6100f760025481565b610139610134366004610bef565b6102c9565b6040516101019190610d49565b6100f760045481565b6100f7600181565b6100ec610344565b60015461017f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610101565b60005461017f9062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b6100ec6101d8366004610d5c565b610494565b6100ec6101eb366004610d8f565b61053d565b60015473ffffffffffffffffffffffffffffffffffffffff163314610241576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600291909155600355565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1633146102a3576040517fb126b84800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102c573ffffffffffffffffffffffffffffffffffffffff83168260006105b4565b5050565b60015460609073ffffffffffffffffffffffffffffffffffffffff16331461031d576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033d73ffffffffffffffffffffffffffffffffffffffff8416836107b4565b9392505050565b600054610100900460ff1661035f5760005460ff1615610363565b303b155b6103f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600054610100900460ff1615801561043357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000166101011790555b600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16336201000002179055801561049157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b50565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1633146104eb576040517fb126b84800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff949094169390931790925560025560035543600455565b60015473ffffffffffffffffffffffffffffffffffffffff16331461058e576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105af73ffffffffffffffffffffffffffffffffffffffff841683836107f6565b505050565b80158061065457506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015284169063dd62ed3e90604401602060405180830381865afa15801561062e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106529190610dcb565b155b6106e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e63650000000000000000000060648201526084016103eb565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526105af9084907f095ea7b300000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261084c565b606061033d83836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250610958565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526105af9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401610732565b60006108ae826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166109589092919063ffffffff16565b8051909150156105af57808060200190518101906108cc9190610de4565b6105af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016103eb565b6060610967848460008561096f565b949350505050565b606082471015610a01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016103eb565b843b610a69576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016103eb565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051610a929190610e06565b60006040518083038185875af1925050503d8060008114610acf576040519150601f19603f3d011682016040523d82523d6000602084013e610ad4565b606091505b5091509150610ae4828286610aef565b979650505050505050565b60608315610afe57508161033d565b825115610b0e5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103eb9190610d49565b60008060408385031215610b5557600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff81168114610b8857600080fd5b919050565b60008060408385031215610ba057600080fd5b610ba983610b64565b9150610bb760208401610b64565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215610c0257600080fd5b610c0b83610b64565b9150602083013567ffffffffffffffff80821115610c2857600080fd5b818501915085601f830112610c3c57600080fd5b813581811115610c4e57610c4e610bc0565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715610c9457610c94610bc0565b81604052828152886020848701011115610cad57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b83811015610cea578181015183820152602001610cd2565b83811115610cf9576000848401525b50505050565b60008151808452610d17816020860160208601610ccf565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061033d6020830184610cff565b600080600060608486031215610d7157600080fd5b610d7a84610b64565b95602085013595506040909401359392505050565b600080600060608486031215610da457600080fd5b610dad84610b64565b9250610dbb60208501610b64565b9150604084013590509250925092565b600060208284031215610ddd57600080fd5b5051919050565b600060208284031215610df657600080fd5b8151801515811461033d57600080fd5b60008251610e18818460208701610ccf565b919091019291505056fea2646970667358221220448e7046078cd668c09328d857e534e2aab6cdc0e691d3d4f2c8baae8e084b1364736f6c634300080a003360c06040523480156200001157600080fd5b506040516200162738038062001627833981016040819052620000349162000177565b60408051808201909152600281526105a360f41b60208201526001600160a01b038216620000805760405162461bcd60e51b8152600401620000779190620001a9565b60405180910390fd5b50806001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e6919062000177565b6001600160a01b03166080816001600160a01b031681525050806001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200013e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000164919062000177565b6001600160a01b031660a0525062000201565b6000602082840312156200018a57600080fd5b81516001600160a01b0381168114620001a257600080fd5b9392505050565b600060208083528351808285015260005b81811015620001d857858101830151858201604001528201620001ba565b81811115620001eb576000604083870101525b50601f01601f1916929092016040019392505050565b60805160a0516113c2620002656000396000818161021f0152818161036401526106d501526000818160af0152818161012a015281816104420152818161056e015281816107b301528181610aa601528181610b890152610c6701526113c26000f3fe60806040526004361061005e5760003560e01c80635869dba8116100435780635869dba814610199578063deecfbc9146101bb578063e79a4089146101ce57600080fd5b80634f0e0ef31461011857806354fd4d501461017657600080fd5b366101135760408051808201909152600381527f574732000000000000000000000000000000000000000000000000000000000060208201523373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b60405180910390fd5b50005b600080fd5b34801561012457600080fd5b5061014c7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561018257600080fd5b5061018b600181565b60405190815260200161016d565b3480156101a557600080fd5b506101b96101b4366004611263565b6101ee565b005b6101b96101c936600461128f565b61031d565b3480156101da57600080fd5b506101b96101e93660046112e1565b61068e565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201819052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa15801561027b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061029f9190611318565b6040518060400160405280600281526020017f43500000000000000000000000000000000000000000000000000000000000008152509061030d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b506103188383610a77565b505050565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808516600483015284917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa1580156103ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103d19190611318565b6040518060400160405280600281526020017f52500000000000000000000000000000000000000000000000000000000000008152509061043f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e6919061133a565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600381526020017f57473100000000000000000000000000000000000000000000000000000000008152509061056b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156105d457600080fd5b505af11580156105e8573d6000803e3d6000fd5b50505050506105f78434610b3c565b6040517f9aa5d46200000000000000000000000000000000000000000000000000000000815234600482015273ffffffffffffffffffffffffffffffffffffffff848116602483015261ffff84166044830152851690639aa5d46290606401600060405180830381600087803b15801561067057600080fd5b505af1158015610684573d6000803e3d6000fd5b5050505050505050565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808516600483015284917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa15801561071e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107429190611318565b6040518060400160405280600281526020017f5250000000000000000000000000000000000000000000000000000000000000815250906107b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610833573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610857919061133a565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600381526020017f5747310000000000000000000000000000000000000000000000000000000000815250906108dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b506109703330858773ffffffffffffffffffffffffffffffffffffffff166336dda7d56040518163ffffffff1660e01b8152600401602060405180830381865afa15801561092e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610952919061133a565b73ffffffffffffffffffffffffffffffffffffffff16929190610cd4565b6040517f05fe138b0000000000000000000000000000000000000000000000000000000081526004810184905230602482015260009073ffffffffffffffffffffffffffffffffffffffff8616906305fe138b906044016020604051808303816000875af11580156109e6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0a9190611357565b9050610a168382610a77565b8273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f6de63bb986f2779478e384365c03cc2e62f06b453856acca87d5a519ce02664960405160405180910390a35050505050565b6040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632e1a7d4d90602401600060405180830381600087803b158015610aff57600080fd5b505af1158015610b13573d6000803e3d6000fd5b50610b389250505073ffffffffffffffffffffffffffffffffffffffff831682610d6f565b5050565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015282917f00000000000000000000000000000000000000000000000000000000000000009091169063dd62ed3e90604401602060405180830381865afa158015610bd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf69190611357565b1015610b38576040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303816000875af1158015610cb0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103189190611318565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052610d69908590610ec9565b50505050565b80471015610dd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610107565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114610e33576040519150601f19603f3d011682016040523d82523d6000602084013e610e38565b606091505b5050905080610318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610107565b6000610f2b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16610fd59092919063ffffffff16565b8051909150156103185780806020019051810190610f499190611318565b610318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610107565b6060610fe48484600085610fee565b90505b9392505050565b606082471015611080576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610107565b843b6110e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610107565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516111119190611370565b60006040518083038185875af1925050503d806000811461114e576040519150601f19603f3d011682016040523d82523d6000602084013e611153565b606091505b509150915061116382828661116e565b979650505050505050565b6060831561117d575081610fe7565b82511561118d5782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b60005b838110156111dc5781810151838201526020016111c4565b83811115610d695750506000910152565b602081526000825180602084015261120c8160408501602087016111c1565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461126057600080fd5b50565b6000806040838503121561127657600080fd5b82356112818161123e565b946020939093013593505050565b6000806000606084860312156112a457600080fd5b83356112af8161123e565b925060208401356112bf8161123e565b9150604084013561ffff811681146112d657600080fd5b809150509250925092565b6000806000606084860312156112f657600080fd5b83356113018161123e565b92506020840135915060408401356112d68161123e565b60006020828403121561132a57600080fd5b81518015158114610fe757600080fd5b60006020828403121561134c57600080fd5b8151610fe78161123e565b60006020828403121561136957600080fd5b5051919050565b600082516113828184602087016111c1565b919091019291505056fea264697066735822122017fd7fc76e4a1efcf24b78a3417fad7ab9576f0a23aa756ddb211c5e2227aa9564736f6c634300080a003360806040523480156200001157600080fd5b5060405162002b8038038062002b80833981016040819052620000349162000122565b6001600160a01b0381166200008f5760405162461bcd60e51b815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640160405180910390fd5b6001600160a01b03811660008181526001602052604080822080546001600160601b0319166b204fce5e3e2502611000000090811790915590517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91620000f99190815260200190565b60405180910390a350600680546001600160a81b031916336101000260ff191617905562000154565b6000602082840312156200013557600080fd5b81516001600160a01b03811681146200014d57600080fd5b9392505050565b612a1c80620001646000396000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c806370a08231116100f9578063b4b5ea5711610097578063dd62ed3e11610071578063dd62ed3e14610503578063e7a324dc14610555578063f1127ed81461057c578063f2fde38b146105ee57600080fd5b8063b4b5ea57146104ca578063c3cda520146104dd578063d505accf146104f057600080fd5b806395d89b41116100d357806395d89b411461045b5780639742ca4614610497578063a9059cbb146104aa578063b0660c3d146104bd57600080fd5b806370a08231146103c7578063782d6fe11461040b5780637ecebe001461043b57600080fd5b806330adf81f11610166578063481c6a7511610140578063481c6a751461031e578063587cde1e146103435780635c19a95c146103795780636fcfff451461038c57600080fd5b806330adf81f14610298578063313ce567146102bf578063349dc329146102d957600080fd5b806320606b701161019757806320606b70146102545780632185810b1461027b57806323b872dd1461028557600080fd5b806306fdde03146101be578063095ea7b31461021057806318160ddd14610233575b600080fd5b6101fa6040518060400160405280600781526020017f47656172626f780000000000000000000000000000000000000000000000000081525081565b60405161020791906124a3565b60405180910390f35b61022361021e36600461253f565b610601565b6040519015158152602001610207565b6102466b204fce5e3e2502611000000081565b604051908152602001610207565b6102467f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b61028361070d565b005b610223610293366004612569565b6107ee565b6102467f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b6102c7601281565b60405160ff9091168152602001610207565b6007546102f99073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610207565b6006546102f990610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6102f96103513660046125a5565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6102836103873660046125a5565b61098a565b6103b261039a3660046125a5565b60046020526000908152604090205463ffffffff1681565b60405163ffffffff9091168152602001610207565b6102466103d53660046125a5565b73ffffffffffffffffffffffffffffffffffffffff166000908152600160205260409020546bffffffffffffffffffffffff1690565b61041e61041936600461253f565b610997565b6040516bffffffffffffffffffffffff9091168152602001610207565b6102466104493660046125a5565b60056020526000908152604090205481565b6101fa6040518060400160405280600481526020017f474541520000000000000000000000000000000000000000000000000000000081525081565b6102836104a53660046125a5565b610cae565b6102236104b836600461253f565b610e20565b6006546102239060ff1681565b61041e6104d83660046125a5565b610e5c565b6102836104eb3660046125d1565b610efa565b6102836104fe366004612629565b611310565b610246610511366004612693565b73ffffffffffffffffffffffffffffffffffffffff9182166000908152602081815260408083209390941682529190915220546bffffffffffffffffffffffff1690565b6102467fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b6105c561058a3660046126c6565b600360209081526000928352604080842090915290825290205463ffffffff81169064010000000090046bffffffffffffffffffffffff1682565b6040805163ffffffff90931683526bffffffffffffffffffffffff909116602083015201610207565b6102836105fc3660046125a5565b61187a565b6000807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83141561063f57506bffffffffffffffffffffffff610664565b6106618360405180606001604052806025815260200161285260259139611a15565b90505b3360008181526020818152604080832073ffffffffffffffffffffffffffffffffffffffff89168085529083529281902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff871690811790915590519081529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a360019150505b92915050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314610798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e616765720060448201526064015b60405180910390fd5b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f795b0e16c8da9807b0a215f3749bd6dbcc49fc0472183f4e446abb7dcbd9d00790600090a1565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081815260408083203380855290835281842054825160608101909352602580845291936bffffffffffffffffffffffff909116928592610856928892919061285290830139611a15565b90508673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156108a257506bffffffffffffffffffffffff82811614155b156109725760006108cc83836040518060600160405280603d8152602001612974603d9139611a67565b73ffffffffffffffffffffffffffffffffffffffff898116600081815260208181526040808320948a168084529482529182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff87169081179091559151918252939450919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505b61097d878783611ad5565b5060019695505050505050565b6109943382611e9c565b50565b6000438210610a28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f476561723a3a6765745072696f72566f7465733a206e6f74207965742064657460448201527f65726d696e656400000000000000000000000000000000000000000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff831660009081526004602052604090205463ffffffff1680610a63576000915050610707565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604081208491610a95600185612735565b63ffffffff90811682526020820192909252604001600020541611610b1b5773ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812090610ae5600184612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff1691506107079050565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020908152604080832083805290915290205463ffffffff16831015610b63576000915050610707565b600080610b71600184612735565b90505b8163ffffffff168163ffffffff161115610c565760006002610b968484612735565b610ba0919061275a565b610baa9083612735565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260036020908152604080832063ffffffff8581168552908352928190208151808301909252549283168082526401000000009093046bffffffffffffffffffffffff1691810191909152919250871415610c2a576020015194506107079350505050565b805163ffffffff16871115610c4157819350610c4f565b610c4c600183612735565b92505b5050610b74565b5073ffffffffffffffffffffffffffffffffffffffff8516600090815260036020908152604080832063ffffffff909416835292905220546bffffffffffffffffffffffff6401000000009091041691505092915050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314610d34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e6167657200604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff8116610db1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640161078f565b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f2f834d1c8c4b956018fff5faca4d99868ae635487424d9c265c257ccbc698c6a90600090a250565b600080610e45836040518060600160405280602681526020016128a760269139611a15565b9050610e52338583611ad5565b5060019392505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526004602052604081205463ffffffff1680610e94576000610ef3565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812090610ec5600184612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b9392505050565b604080518082018252600781527f47656172626f780000000000000000000000000000000000000000000000000060209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f028ef9f797075f74ac647c65fde04fb0f128c2d59fd40f45732269917642fd4681840152466060820152306080808301919091528351808303909101815260a0820184528051908301207fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60c083015273ffffffffffffffffffffffffffffffffffffffff8a1660e08301526101008201899052610120808301899052845180840390910181526101408301909452835193909201929092207f19010000000000000000000000000000000000000000000000000000000000006101608401526101628301829052610182830181905290916000906101a201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa1580156110d8573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166111a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f476561723a3a64656c656761746542795369673a20696e76616c69642073696760448201527f6e61747572650000000000000000000000000000000000000000000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff811660009081526005602052604081208054916111d7836127a4565b919050558914611269576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f476561723a3a64656c656761746542795369673a20696e76616c6964206e6f6e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161078f565b874211156112f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f476561723a3a64656c656761746542795369673a207369676e6174757265206560448201527f7870697265640000000000000000000000000000000000000000000000000000606482015260840161078f565b611303818b611e9c565b505050505b505050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86141561134d57506bffffffffffffffffffffffff611372565b61136f8660405180606001604052806024815260200161291c60249139611a15565b90505b604080518082018252600781527f47656172626f780000000000000000000000000000000000000000000000000060209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f028ef9f797075f74ac647c65fde04fb0f128c2d59fd40f45732269917642fd4681840152466060820152306080808301919091528351808303909101815260a0909101835280519082012073ffffffffffffffffffffffffffffffffffffffff8b166000908152600590925291812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918c918c918c919086611472836127a4565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810188905260e001604051602081830303815290604052805190602001209050600082826040516020016115199291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff8b169284019290925260608301899052608083018890529092509060019060a0016020604051602081039080840390855afa1580156115a2573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661164a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a7065726d69743a20696e76616c6964207369676e617475726500604482015260640161078f565b8b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146116df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f476561723a3a7065726d69743a20756e617574686f72697a6564000000000000604482015260640161078f565b88421115611749576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a7065726d69743a207369676e6174757265206578706972656400604482015260640161078f565b846000808e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508a73ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258760405161186491906bffffffffffffffffffffffff91909116815260200190565b60405180910390a3505050505050505050505050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314611900576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e6167657200604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff811661197d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640161078f565b60065460405173ffffffffffffffffffffffffffffffffffffffff80841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36006805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b6000816c010000000000000000000000008410611a5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b509192915050565b6000836bffffffffffffffffffffffff16836bffffffffffffffffffffffff1611158290611ac2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b50611acd83856127dd565b949350505050565b60065460ff1680611b025750600654610100900473ffffffffffffffffffffffffffffffffffffffff1633145b80611b24575060075473ffffffffffffffffffffffffffffffffffffffff1633145b611b8a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f476561723a3a7472616e73666572732061726520666f7262696464656e000000604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff8316611c2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603c60248201527f476561723a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260448201527f616e736665722066726f6d20746865207a65726f206164647265737300000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff8216611cd0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f476561723a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260448201527f616e7366657220746f20746865207a65726f2061646472657373000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260016020908152604091829020548251606081019093526036808452611d2d936bffffffffffffffffffffffff90921692859291906129b190830139611a67565b73ffffffffffffffffffffffffffffffffffffffff848116600090815260016020908152604080832080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff968716179055928616825290829020548251606081019093526030808452611dbf949190911692859290919061287790830139611f50565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260409182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff968716179055905193851684529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a373ffffffffffffffffffffffffffffffffffffffff808416600090815260026020526040808220548584168352912054611e9792918216911683611fc1565b505050565b73ffffffffffffffffffffffffffffffffffffffff808316600081815260026020818152604080842080546001845282862054949093528787167fffffffffffffffffffffffff000000000000000000000000000000000000000084168117909155905191909516946bffffffffffffffffffffffff9092169391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4611f4a828483611fc1565b50505050565b600080611f5d8486612802565b9050846bffffffffffffffffffffffff16816bffffffffffffffffffffffff1610158390611fb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b50949350505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561200b57506000816bffffffffffffffffffffffff16115b15611e975773ffffffffffffffffffffffffffffffffffffffff8316156120fd5773ffffffffffffffffffffffffffffffffffffffff831660009081526004602052604081205463ffffffff1690816120655760006120c4565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812090612096600185612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b905060006120eb82856040518060600160405280602881526020016128cd60289139611a67565b90506120f9868484846121e2565b5050505b73ffffffffffffffffffffffffffffffffffffffff821615611e975773ffffffffffffffffffffffffffffffffffffffff821660009081526004602052604081205463ffffffff1690816121525760006121b1565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812090612183600185612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b905060006121d882856040518060600160405280602781526020016128f560279139611f50565b9050611308858484845b60006122064360405180606001604052806034815260200161294060349139612465565b905060008463ffffffff1611801561226d575073ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812063ffffffff831691612251600188612735565b63ffffffff908116825260208201929092526040016000205416145b156123035773ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812083916122a4600188612735565b63ffffffff168152602081019190915260400160002080546bffffffffffffffffffffffff92909216640100000000027fffffffffffffffffffffffffffffffff000000000000000000000000ffffffff9092169190911790556123fe565b60408051808201825263ffffffff80841682526bffffffffffffffffffffffff808616602080850191825273ffffffffffffffffffffffffffffffffffffffff8b166000908152600382528681208b8616825290915294909420925183549451909116640100000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009094169116179190911790556123a5846001612832565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260046020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff929092169190911790555b604080516bffffffffffffffffffffffff80861682528416602082015273ffffffffffffffffffffffffffffffffffffffff8716917fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724910160405180910390a25050505050565b6000816401000000008410611a5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91905b600060208083528351808285015260005b818110156124d0578581018301518582016040015282016124b4565b818111156124e2576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461253a57600080fd5b919050565b6000806040838503121561255257600080fd5b61255b83612516565b946020939093013593505050565b60008060006060848603121561257e57600080fd5b61258784612516565b925061259560208501612516565b9150604084013590509250925092565b6000602082840312156125b757600080fd5b610ef382612516565b803560ff8116811461253a57600080fd5b60008060008060008060c087890312156125ea57600080fd5b6125f387612516565b9550602087013594506040870135935061260f606088016125c0565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a03121561264457600080fd5b61264d88612516565b965061265b60208901612516565b95506040880135945060608801359350612677608089016125c0565b925060a0880135915060c0880135905092959891949750929550565b600080604083850312156126a657600080fd5b6126af83612516565b91506126bd60208401612516565b90509250929050565b600080604083850312156126d957600080fd5b6126e283612516565b9150602083013563ffffffff811681146126fb57600080fd5b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600063ffffffff8381169083168181101561275257612752612706565b039392505050565b600063ffffffff80841680612798577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156127d6576127d6612706565b5060010190565b60006bffffffffffffffffffffffff8381169083168181101561275257612752612706565b60006bffffffffffffffffffffffff80831681851680830382111561282957612829612706565b01949350505050565b600063ffffffff8083168185168083038211156128295761282961270656fe476561723a3a617070726f76653a20616d6f756e7420657863656564732039362062697473476561723a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e74206f766572666c6f7773476561723a3a7472616e736665723a20616d6f756e7420657863656564732039362062697473476561723a3a5f6d6f7665566f7465733a20766f746520616d6f756e7420756e646572666c6f7773476561723a3a5f6d6f7665566f7465733a20766f746520616d6f756e74206f766572666c6f7773476561723a3a7065726d69743a20616d6f756e7420657863656564732039362062697473476561723a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d62657220657863656564732033322062697473476561723a3a7472616e7366657246726f6d3a207472616e7366657220616d6f756e742065786365656473207370656e64657220616c6c6f77616e6365476561723a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e7420657863656564732062616c616e6365a26469706673582212201b84fd7789a35c022f692420863210a30e82d2405659f5a28275d433fa53467f64736f6c634300080a003360806040526016805460ff1916905534801561001a57600080fd5b506040516110a73803806110a7833981016040819052610039916100b6565b600080546001600160a01b038085166001600160a01b0319928316179092556003805492841692909116919091179055610080600a6b033b2e3c9fd0803ce80000006100e9565b60075550506b033b2e3c9fd0803ce800000060155561010b565b80516001600160a01b03811681146100b157600080fd5b919050565b600080604083850312156100c957600080fd5b6100d28361009a565b91506100e06020840161009a565b90509250929050565b60008261010657634e487b7160e01b600052601260045260246000fd5b500490565b610f8d8061011a6000396000f3fe608060405234801561001057600080fd5b50600436106102e95760003560e01c806367c99d5811610191578063c5f956af116100e3578063dbcb313b11610097578063f11a648711610071578063f11a648714610320578063f3fdb15a146105f1578063fe14112d1461061157600080fd5b8063dbcb313b146105d6578063e941fa78146105df578063ef8d9603146105e857600080fd5b8063cb3905e1116100c8578063cb3905e1146105c4578063cf33d95514610320578063d0efe753146105cd57600080fd5b8063c5f956af14610588578063ca9505e4146105a857600080fd5b80639aa5d46211610145578063b6ac642a1161011f578063b6ac642a14610567578063bb04b19314610567578063bf28068b1461057557600080fd5b80639aa5d46214610544578063a4e8273e14610557578063b3554a0a1461055e57600080fd5b8063788c6bfe11610176578063788c6bfe146104ef5780638456cb591461050157806396df5dc01461053157600080fd5b806367c99d58146104de57806374375359146104e757600080fd5b806336dda7d51161024a5780634d778ad1116101fe57806354fd4d50116101d857806354fd4d50146104c05780635c975abb146104c8578063609ae317146104d557600080fd5b80634d778ad114610491578063532fe502146104a45780635427c938146104ad57600080fd5b80633f4ba83a1161022f5780633f4ba83a1461045257806345d31f9d1461047f5780634c19386c1461048857600080fd5b806336dda7d51461040f5780633e163df01461042f57600080fd5b80632495a599116102a157806329f3d3b61161028657806329f3d3b6146103b35780632a3354c9146103bc5780632e97ca21146103dc57600080fd5b80632495a599146103735780632954018c1461039357600080fd5b8063078c4781116102d2578063078c4781146103205780630fce70fb146103335780631e16e4fc1461033b57600080fd5b8063030dbb04146102ee57806305fe138b1461030a575b600080fd5b6102f760105481565b6040519081526020015b60405180910390f35b6102f7610318366004610ce8565b600092915050565b61033161032e366004610d14565b50565b005b6015546102f7565b61034e610349366004610d2f565b610618565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610301565b60035461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b60005461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6102f760095481565b600a5461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103ff6103ea366004610d14565b60066020526000908152604090205460ff1681565b6040519015158152602001610301565b60055461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103ff61043d366004610d14565b60146020526000908152604090205460ff1681565b610331601680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b6102f760075481565b6102f760015481565b6102f761049f366004610d2f565b61064f565b6102f760115481565b6102f76104bb366004610d2f565b61066d565b6102f7600181565b6016546103ff9060ff1681565b6102f760085481565b6102f7600d5481565b6102f7610685565b6b033b2e3c9fd0803ce80000006102f7565b610331601680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b61033161053f366004610d2f565b601555565b610331610552366004610d48565b505050565b60016102f7565b6102f7600e5481565b61033161032e366004610d2f565b610331610583366004610ce8565b61071d565b60135461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103316105b6366004610d7d565b600b92909255600c55600d55565b6102f7600c5481565b6102f7600b5481565b6102f760155481565b6102f7600f5481565b6102f760025481565b60125461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b60006102f7565b6004818154811061062857600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6000610667826b033b2e3c9fd0803ce800000061077a565b92915050565b6000610667826b033b2e3c9fd0803ce80000006108e9565b6003546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156106f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107189190610da9565b905090565b6009829055600a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691909117909155600354610776911682846109fe565b5050565b60408051808201909152600281527f4d330000000000000000000000000000000000000000000000000000000000006020820152600090826107f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b60405180910390fd5b506000610800600284610e72565b90506b033b2e3c9fd0803ce8000000610839827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610ead565b6108439190610e72565b8411156040518060400160405280600281526020017f4d31000000000000000000000000000000000000000000000000000000000000815250906108b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b5082816108cd6b033b2e3c9fd0803ce800000087610ec4565b6108d79190610f01565b6108e19190610e72565b949350505050565b60008215806108f6575081155b1561090357506000610667565b8161091b60026b033b2e3c9fd0803ce8000000610e72565b610945907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610ead565b61094f9190610e72565b8311156040518060400160405280600281526020017f4d31000000000000000000000000000000000000000000000000000000000000815250906109c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b506b033b2e3c9fd0803ce80000006109d9600282610e72565b6109e38486610ec4565b6109ed9190610f01565b6109f79190610e72565b9392505050565b6040805173ffffffffffffffffffffffffffffffffffffffff848116602483015260448083018590528351808403909101815260649092018352602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65649084015261055292869291600091610ac9918516908490610b73565b8051909150156105525780806020019051810190610ae79190610f19565b610552576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016107e9565b60606108e1848460008585843b610be6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107e9565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051610c0f9190610f3b565b60006040518083038185875af1925050503d8060008114610c4c576040519150601f19603f3d011682016040523d82523d6000602084013e610c51565b606091505b5091509150610c61828286610c6c565b979650505050505050565b60608315610c7b5750816109f7565b825115610c8b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ce357600080fd5b919050565b60008060408385031215610cfb57600080fd5b82359150610d0b60208401610cbf565b90509250929050565b600060208284031215610d2657600080fd5b6109f782610cbf565b600060208284031215610d4157600080fd5b5035919050565b600080600060608486031215610d5d57600080fd5b83359250610d6d60208501610cbf565b9150604084013590509250925092565b600080600060608486031215610d9257600080fd5b505081359360208301359350604090920135919050565b600060208284031215610dbb57600080fd5b5051919050565b60005b83811015610ddd578181015183820152602001610dc5565b83811115610dec576000848401525b50505050565b6020815260008251806020840152610e11816040850160208701610dc2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082610ea8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600082821015610ebf57610ebf610e43565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610efc57610efc610e43565b500290565b60008219821115610f1457610f14610e43565b500190565b600060208284031215610f2b57600080fd5b815180151581146109f757600080fd5b60008251610f4d818460208701610dc2565b919091019291505056fea26469706673582212204edb887d94928b3914f60ab48df0182da9eb30ddbb7021b164cc728b60a655d564736f6c634300080a003360e06040523480156200001157600080fd5b5060405162013af238038062013af2833981016040819052620000349162000630565b826001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000073573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000999190620007bf565b620000a433620004ab565b6001600160a01b038116608081905260408051630873769560e01b815290516308737695916004808201926020929091908290030181865afa158015620000ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001159190620007bf565b6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000153573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001799190620007bf565b6001600160a01b0390811660a052841660c0525060405183906200019d9062000519565b6001600160a01b039091168152602001604051809103906000f080158015620001ca573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b0392909216918217905560608301516080840151604051620002029062000527565b6001600160a01b03938416815292909116602083015215156040820152606001604051809103906000f0801580156200023f573d6000803e3d6000fd5b50600280546001600160a01b0319166001600160a01b0392909216919091179055604051600090620002746020820162000535565b601f1982820381018352601f909101166040819052600154600254620002b0926001600160a01b039283169291909116908790602001620007e6565b60408051601f1981840301815290829052620002d09291602001620008e8565b60408051601f19818403018152919052905060006200035982848151602092830120604080517fff00000000000000000000000000000000000000000000000000000000000000818601523060601b6001600160601b03191660218201526035810193909352605580840192909252805180840390920182526075909201909152805191012090565b600154604051634fafc35760e11b81526001600160a01b038084166004830152929350911690639f5f86ae90602401600060405180830381600087803b158015620003a357600080fd5b505af1158015620003b8573d6000803e3d6000fd5b50505050620003ce8284620004fb60201b60201c565b600380546001600160a01b0319166001600160a01b0383811691821790925560015460408051630304b08760e61b81529051919093169263c12c21c09160048083019260209291908290030181865afa15801562000430573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004569190620007bf565b6001600160a01b031614620004a05760405162461bcd60e51b815260206004820152600c60248201526b496e636f727265637420434d60a01b604482015260640160405180910390fd5b505050505062000909565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008183516020850134f59050803b6200051457600080fd5b505050565b6158e8806200243683390190565b615e978062007d1e83390190565b615f3d806200dbb583390190565b6001600160a01b03811681146200055957600080fd5b50565b8051620005698162000543565b919050565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b0381118282101715620005a957620005a96200056e565b60405290565b604080519081016001600160401b0381118282101715620005a957620005a96200056e565b604051601f8201601f191681016001600160401b0381118282101715620005ff57620005ff6200056e565b604052919050565b80516001600160801b03811681146200056957600080fd5b805180151581146200056957600080fd5b6000806000606084860312156200064657600080fd5b8351620006538162000543565b602085810151919450906001600160401b03808211156200067357600080fd5b9086019060a082890312156200068857600080fd5b6200069262000584565b6200069d8362000607565b8152620006ac84840162000607565b8482015260408084015183811115620006c457600080fd5b8401601f81018b13620006d657600080fd5b805184811115620006eb57620006eb6200056e565b620006fb878260051b01620005d4565b818152878101955060069190911b82018701908c8211156200071c57600080fd5b918701915b818310156200077e5783838e0312156200073b5760008081fd5b62000745620005af565b8351620007528162000543565b81528389015161ffff811681146200076a5760008081fd5b818a01528652948701949183019162000721565b8484015250620007939050606085016200055c565b6060830152620007a6608085016200061f565b6080830152979097015195989697509495945050505050565b600060208284031215620007d257600080fd5b8151620007df8162000543565b9392505050565b600060018060a01b0380861683526020818616818501526040606081860152610100850160018060801b038088511660608801528084890151166080880152508187015160a080880152818151808452610120890191508583019350600092505b808310156200087857835180518816835286015161ffff168683015292850192600192909201919084019062000847565b5060608901516001600160a01b031660c0890152608090980151151560e0909701969096525094979650505050505050565b6000815160005b81811015620008cd5760208185018101518683015201620008b1565b81811115620008dd576000828601525b509290920192915050565b600062000901620008fa8386620008aa565b84620008aa565b949350505050565b60805160a05160c051611ad3620009636000396000818161010a0152610ea00152600081816103790152610b170152600081816101680152818161068c01528181610a4d01528181610b860152610c190152611ad36000f3fe6080604052600436106100f35760003560e01c80638da5cb5b1161008a578063ebf0c71711610059578063ebf0c71714610367578063f2fde38b1461039b578063f4747c58146103bb578063f9aa028a146103db57600080fd5b80638da5cb5b1461025a57806394ca2cb5146102855780639c4ae2d014610327578063c12c21c01461033a57600080fd5b80633e0b1a23116100c65780633e0b1a23146101ce5780634ef501ac146101e3578063715018a614610230578063805abe6a1461024557600080fd5b806316f0115b146100f85780632954018c146101565780632f7a18811461018a578063318d0d10146101b7575b600080fd5b34801561010457600080fd5b5061012c7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561016257600080fd5b5061012c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561019657600080fd5b5060025461012c9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156101c357600080fd5b506101cc610408565b005b3480156101da57600080fd5b506101cc610498565b3480156101ef57600080fd5b506102036101fe366004611726565b610521565b6040805173ffffffffffffffffffffffffffffffffffffffff93841681529290911660208301520161014d565b34801561023c57600080fd5b506101cc610567565b34801561025157600080fd5b506101cc6105f2565b34801561026657600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff1661012c565b34801561029157600080fd5b5061012c6102a03660046117e6565b8151602092830120604080517fff00000000000000000000000000000000000000000000000000000000000000818601523060601b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660218201526035810193909352605580840192909252805180840390920182526075909201909152805191012090565b6101cc6103353660046117e6565b6107d8565b34801561034657600080fd5b5060015461012c9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561037357600080fd5b5061012c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103a757600080fd5b506101cc6103b63660046118c0565b6107f5565b3480156103c757600080fd5b506101cc6103d63660046118e4565b610925565b3480156103e757600080fd5b5060035461012c9073ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff16331461048e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b610496610a49565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610519576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b61048e610b82565b6004818154811061053157600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff91821692501682565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b61049660006116b1565b60005473ffffffffffffffffffffffffffffffffffffffff163314610673576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b3073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106f5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071991906119c4565b73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610763573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078791906119c4565b73ffffffffffffffffffffffffffffffffffffffff1614156107d5576040517fbdebb83f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33ff5b60008183516020850134f59050803b6107f057600080fd5b505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b73ffffffffffffffffffffffffffffffffffffffff8116610919576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610485565b610922816116b1565b50565b60005473ffffffffffffffffffffffffffffffffffffffff1633146109a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b805160005b818110156107f05760048382815181106109c7576109c76119e1565b602090810291909101810151825460018082018555600094855293839020825160029092020180547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff938416178255929093015192840180549092169216919091179055016109ab565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ab6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ada91906119c4565b6040517ff2fde38b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301529192509082169063f2fde38b90602401600060405180830381600087803b158015610b6757600080fd5b505af1158015610b7b573d6000803e3d6000fd5b5050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1391906119c4565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca691906119c4565b60045490915060005b81811015610dd4576003546004805473ffffffffffffffffffffffffffffffffffffffff90921691637bccacee919084908110610cee57610cee6119e1565b906000526020600020906002020160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660048481548110610d3357610d336119e1565b600091825260209091206002909102015460405160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b158015610db157600080fd5b505af1158015610dc5573d6000803e3d6000fd5b50505050806001019050610caf565b506001546040517fe26b2f6300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529084169063e26b2f6390602401600060405180830381600087803b158015610e4257600080fd5b505af1158015610e56573d6000803e3d6000fd5b50506001546040517fcf33d95500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201527f0000000000000000000000000000000000000000000000000000000000000000909116925063cf33d9559150602401600060405180830381600087803b158015610ee857600080fd5b505af1158015610efc573d6000803e3d6000fd5b50505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f919190611a10565b905060005b818110156116ab576003546040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810183905260009173ffffffffffffffffffffffffffffffffffffffff1690635094cb4f90602401602060405180830381865afa15801561100e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103291906119c4565b6001546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80841660048301529293506000929091169063fdd5764590602401602060405180830381865afa1580156110a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110cc91906119c4565b905060008173ffffffffffffffffffffffffffffffffffffffff1663ce30bbdb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561111b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113f9190611a29565b9050600c81601081111561115557611155611a4a565b14156116225760008273ffffffffffffffffffffffffffffffffffffffff166320b2c1516040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111cc91906119c4565b905060008373ffffffffffffffffffffffffffffffffffffffff1663927188d96040518163ffffffff1660e01b8152600401602060405180830381865afa15801561121b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123f91906119c4565b905060008473ffffffffffffffffffffffffffffffffffffffff166399253ac06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561128e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b291906119c4565b6040517f9dcb511a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152919250908a169063e8a97a3e9083908390639dcb511a90602401602060405180830381865afa15801561132c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135091906119c4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156113bd57600080fd5b505af11580156113d1573d6000803e3d6000fd5b50506040517f9dcb511a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301528c16925063e8a97a3e915085908390639dcb511a90602401602060405180830381865afa15801561144b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061146f91906119c4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156114dc57600080fd5b505af11580156114f0573d6000803e3d6000fd5b50506003546001546040517f7832743800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301529283169450633e7c88d69350879290911690637832743890602401602060405180830381865afa158015611573573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115979190611a79565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015261ffff166024820152604401600060405180830381600087803b15801561160657600080fd5b505af115801561161a573d6000803e3d6000fd5b505050505050505b600d81601081111561163657611636611a4a565b141561169d578173ffffffffffffffffffffffffffffffffffffffff16639b51ecd36040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561168457600080fd5b505af1158015611698573d6000803e3d6000fd5b505050505b836001019350505050610f96565b50505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561173857600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156117915761179161173f565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156117de576117de61173f565b604052919050565b600080604083850312156117f957600080fd5b823567ffffffffffffffff8082111561181157600080fd5b818501915085601f83011261182557600080fd5b81356020828211156118395761183961173f565b611869817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011601611797565b9250818352878183860101111561187f57600080fd5b8181850182850137600091830181019190915290969401359450505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461092257600080fd5b6000602082840312156118d257600080fd5b81356118dd8161189e565b9392505050565b600060208083850312156118f757600080fd5b823567ffffffffffffffff8082111561190f57600080fd5b818501915085601f83011261192357600080fd5b8135818111156119355761193561173f565b611943848260051b01611797565b818152848101925060069190911b83018401908782111561196357600080fd5b928401925b818410156119b957604084890312156119815760008081fd5b61198961176e565b84356119948161189e565b8152848601356119a38161189e565b8187015283526040939093019291840191611968565b979650505050505050565b6000602082840312156119d657600080fd5b81516118dd8161189e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215611a2257600080fd5b5051919050565b600060208284031215611a3b57600080fd5b8151601181106118dd57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060208284031215611a8b57600080fd5b815161ffff811681146118dd57600080fdfea264697066735822122090f5e4310a8b66bfdd7fdfbe64bc5b98570e7c1a415ffb0ced3c857cf6c5b14064736f6c634300080a00336101606040526000805462ff00001916620c00001790553480156200002357600080fd5b50604051620058e8380380620058e8833981016040819052620000469162000537565b806001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000085573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ab919062000537565b6000805460ff191690556001600160a01b038116620000dd57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200011c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000142919062000537565b6001600160a01b03166080816001600160a01b031681525050506000816001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200019d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c3919062000537565b6001600160a01b03831661010081905260e081905260408051632495a59960e01b81529051929350600092632495a599916004808201926020929091908290030181865afa1580156200021a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000240919062000537565b6001600160a01b03811660c05290506200025a8162000472565b816001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000299573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002bf919062000537565b6001600160a01b0316610120816001600160a01b031681525050816001600160a01b03166377532ed96040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000318573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033e919062000537565b6001600160a01b0316610140816001600160a01b031681525050816001600160a01b031663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000397573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003bd919062000537565b6001600001600a6101000a8154816001600160a01b0302191690836001600160a01b03160217905550816001600160a01b0316639068a8686040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000425573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044b919062000537565b6001600160a01b031660a0525050600380546001600160a01b031916331790555062000588565b6001600160a01b03811660009081526006602052604090205415620004aa57604051632e5a5c7760e01b815260040160405180910390fd5b61010060055410620004cf57604051631cbbe18560e01b815260040160405180910390fd5b600580546001600160a01b0383166000818152600660209081526040808320600190951b948590558483526004909152812091909155825491929062000515836200055e565b91905055505050565b6001600160a01b03811681146200053457600080fd5b50565b6000602082840312156200054a57600080fd5b815162000557816200051e565b9392505050565b60006000198214156200058157634e487b7160e01b600052601160045260246000fd5b5060010190565b60805160a05160c05160e051610100516101205161014051615248620006a0600039600081816107e20152818161371001526137c501526000818161052f01526136780152600081816103d301528181610e5701528181610ebb015281816124ff0152818161265a01528181612aa101528181612b8c01528181612c4e01528181612d0d0152613b8f015260006105a401526000818161062701528181610d2201528181610db301528181610e0001528181610e3601528181610f3f0152818161203a01528181612b6b015281816130ee015281816134dc015281816135a90152613fe601526000818161081c01528181610fe101526124c20152600081816107a80152818161118401526122cb01526152486000f3fe608060405234801561001057600080fd5b50600436106103415760003560e01c8063830aa745116101bd578063a70bc542116100f9578063e75538c7116100a2578063f9aa028a1161007c578063f9aa028a1461089d578063fdd57645146108bd578063fe47cde7146108f3578063ff6875431461091357600080fd5b8063e75538c714610864578063e958b70414610877578063f67c5bd01461088a57600080fd5b8063db7ceb80116100d3578063db7ceb8014610817578063dc2b21c11461083e578063e1998cf91461085157600080fd5b8063a70bc542146107ca578063c5e10eef146107dd578063d48bfca71461080457600080fd5b806394cf073a116101665780639f5f86ae116101405780639f5f86ae146107745780639fd12b7714610787578063a366f49614610790578063a50cf2c8146107a357600080fd5b806394cf073a146106f557806395373018146107085780639af1d35a1461071b57600080fd5b80638991b2f1116101975780638991b2f1146106af5780638fe3f93f146106cf578063944ac59f146106e257600080fd5b8063830aa7451461066f5780638345f26e146106825780638456cb59146106a757600080fd5b8063458936f51161028c578063570a7af2116102355780636ce4074a1161020f5780636ce4074a146105ef5780636e98e5e41461060f5780636f307dc314610622578063783274381461064957600080fd5b8063570a7af21461059f5780635c975abb146105c6578063654a9eda146105dc57600080fd5b80635063524a116102665780635063524a1461055157806351e3f1601461058457806354fd4d501461059757600080fd5b8063458936f51461050e57806346fb371d146105175780634f0e0ef31461052a57600080fd5b80632630c12f116102ee5780633192195c116102c85780633192195c146104be5780633e8297ca146104e65780633f4ba83a1461050657600080fd5b80632630c12f1461045857806329df0b93146104845780632f7a18811461049757600080fd5b806316f0115b1161031f57806316f0115b146103ce578063172c48c7146103f55780632362a2d81461043757600080fd5b8063055ee9b5146103465780630d8f9cee146103a657806311ca4fc2146103bb575b600080fd5b61037c610354366004614a87565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6103b96103b4366004614aa4565b610949565b005b6103b96103c9366004614aa4565b610a76565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b610408610403366004614add565b610b4e565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835261ffff90911660208301520161039d565b61044a610445366004614b13565b610b66565b60405190815260200161039d565b6001546a0100000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1661037c565b6103b9610492366004614a87565b6110be565b60005461037c906301000000900473ffffffffffffffffffffffffffffffffffffffff1681565b6104d16104cc366004614a87565b611122565b6040805192835260208301919091520161039d565b61044a6104f4366004614a87565b60096020526000908152604090205481565b6103b9611156565b61044a60055481565b6103b9610525366004614b95565b611244565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b61056461055f366004614be6565b61149b565b60408051948552602085019390935291830152606082015260800161039d565b6103b9610592366004614aa4565b611602565b61044a600281565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b60005460ff16604051901515815260200161039d565b6103b96105ea366004614c21565b611703565b6106026105fd366004614d40565b611bbb565b60405161039d9190614e5b565b6103b961061d366004614aa4565b611e8e565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b61065c610657366004614a87565b612036565b60405161ffff909116815260200161039d565b6103b961067d366004614b95565b61210f565b6000546106959062010000900460ff1681565b60405160ff909116815260200161039d565b6103b961229d565b61044a6106bd366004614a87565b60086020526000908152604090205481565b61037c6106dd366004614e6e565b612389565b6103b96106f0366004614ea5565b612718565b61044a610703366004614f0a565b612845565b6103b9610716366004614a87565b612e5a565b6001546040805161ffff808416825262010000840481166020830152640100000000840481169282019290925266010000000000008304821660608201526801000000000000000090920416608082015260a00161039d565b6103b9610782366004614a87565b612f85565b61044a60075481565b6103b961079e366004614add565b613045565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b96107d8366004614f4c565b61309b565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b9610812366004614a87565b613221565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b961084c366004614f81565b61327b565b6103b961085f366004614aa4565b613306565b610408610872366004614add565b6134c9565b61037c610885366004614a87565b613541565b61044a610898366004614a87565b6135a5565b60035461037c9073ffffffffffffffffffffffffffffffffffffffff1681565b61037c6108cb366004614a87565b600b6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b600c5461037c9073ffffffffffffffffffffffffffffffffffffffff1681565b61037c610921366004614a87565b600a6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561099b57506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b156109d2576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff1615610a14576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055610a4a828261362e565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b60035473ffffffffffffffffffffffffffffffffffffffff163314610ac7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805473ffffffffffffffffffffffffffffffffffffffff9384166301000000027fffffffffffffffffff0000000000000000000000000000000000000000ffffff90911617905560018054919092166a0100000000000000000000027fffff0000000000000000000000000000000000000000ffffffffffffffffffff909116179055565b600080610b5d6001841b6134c9565b91509150915091565b6000805460ff1615610bd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064015b60405180910390fd5b600054610100900460ff1615610c1b576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff163314610ca0576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610cab89613541565b90506000806000806000610cbe86611122565b9094509050610ccf8c8e868461149b565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152939b5093985090955093506000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015610d6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8f9190614fa4565b9050610d9b8887614fec565b610da6906001614fec565b811115610de657610de1877f00000000000000000000000000000000000000000000000000000000000000008d60018c8b870303038d61366e565b610e30565b610e3073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168d8960018a8d01869003016138c0565b610e7e877f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000089600061366e565b6040517fca9505e40000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604481018490527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ca9505e490606401600060405180830381600087803b158015610f1457600080fd5b505af1158015610f28573d6000803e3d6000fd5b50505050505050506001841115610f6757610f67837f00000000000000000000000000000000000000000000000000000000000000008d87600061366e565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260086020526040902054861916610f9c8489888461395b565b6040517f89b77b3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f000000000000000000000000000000000000000000000000000000000000000016906389b77b3e90602401600060405180830381600087803b15801561102557600080fd5b505af1158015611039573d6000803e3d6000fd5b50505073ffffffffffffffffffffffffffffffffffffffff909c16600090815260026020526040812080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550929a9950505050505050505050565b6000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314611116576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61111f81613a35565b50565b60008060008061113185613aa6565b91955092509050816111438286615004565b61114d9190615041565b92505050915091565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156111e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611204919061507c565b61123a576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611242613c24565b565b60005460ff16156112b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156112f3576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100178155338152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff9081169084161480159061137457506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b80156113985750600c5473ffffffffffffffffffffffffffffffffffffffff163314155b806113b7575073ffffffffffffffffffffffffffffffffffffffff8316155b156113ee576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113f7826135a5565b61142d576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061143885613541565b9050611448838583856000613d05565b61146c5761145b83858360006001613d05565b5061146a838583856001613d05565b505b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b6001546000908190819081906127109061ffff166114b98888615099565b6114c39190615004565b6114cd9190615041565b6114d79086614fec565b935060018760028111156114ed576114ed6150b0565b1415611587576001546000906127109061151390640100000000900461ffff168b615004565b61151d9190615041565b6001549091506127109061153b9062010000900461ffff168b615004565b6115459190615041565b61154f9086614fec565b94508481111561156657600185820303935061156a565b8094505b85811061157b578585039250611581565b84860391505b506115f7565b600287600281111561159b5761159b6150b0565b14156115f157600154600090612710906115c59068010000000000000000900461ffff168b615004565b6115cf9190615041565b6001549091506127109061153b906601000000000000900461ffff168b615004565b84840391505b945094509450949050565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561165457506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b1561168b576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff16156116cd576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055610a4a8282613ea6565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561175557506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b1561178c576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff16156117ce576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790556118048584613ea6565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152600091908616906370a0823190602401602060405180830381865afa158015611874573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118989190614fa4565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529192506000918616906370a0823190602401602060405180830381865afa15801561190a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192e9190614fa4565b60015490915060009081906a0100000000000000000000900473ffffffffffffffffffffffffffffffffffffffff16635cecbd0e61196c8689615099565b8a6119778988615099565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152600481019390935273ffffffffffffffffffffffffffffffffffffffff918216602484015260448301528a1660648201526084016040805180830381865afa1580156119f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1791906150df565b9150915060018411611a2d57611a2d898961362e565b611a3687612036565b611a449061ffff1682615004565b9050611a4f88612036565b611a5d9061ffff1683615004565b9150818110611a7857611a6f89613a35565b5050505061146c565b73ffffffffffffffffffffffffffffffffffffffff891660009081526009602052604081205483611ab56b033b2e3c9fd0803ce800000085615004565b611abf9190615041565b611ad5906b033b2e3c9fd0803ce8000000615099565b611adf9190614fec565b60015490915061271090611b0a906b033b2e3c9fd0803ce80000009062010000900461ffff16615004565b611b149190615041565b8111611b555773ffffffffffffffffffffffffffffffffffffffff8a166000908152600960205260409020819055611b4b8a613a35565b505050505061146c565b611b5e8a613f56565b50505073ffffffffffffffffffffffffffffffffffffffff871660009081526009602052604090206001905550505050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b6060611bc960005460ff1690565b15611c30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff1615611c72576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100178155338152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff908116908416141580611ce7575073ffffffffffffffffffffffffffffffffffffffff8316155b15611d3d57600c5473ffffffffffffffffffffffffffffffffffffffff163314611d3d576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611d4885613541565b90508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167faed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab0360405160405180910390a36040517f1cff79cd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821690631cff79cd90611df89087908790600401615103565b6000604051808303816000875af1158015611e17573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611e5d9190810190615132565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905595945050505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314611edf576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821615611f4f5773ffffffffffffffffffffffffffffffffffffffff8281166000908152600a6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169183169190911790555b73ffffffffffffffffffffffffffffffffffffffff811615611fbf5773ffffffffffffffffffffffffffffffffffffffff8181166000908152600b6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169184169190911790555b73ffffffffffffffffffffffffffffffffffffffff811673cccccccccccccccccccccccccccccccccccccccc141561203257600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790555b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120ba5750506001547e01000000000000000000000000000000000000000000000000000000000000900461ffff1690565b60006120c5836135a5565b9050806120fe576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612107816134c9565b949350505050565b60005460ff161561217c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156121be576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff163314612243576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61224d8383613ea6565b61226f73ffffffffffffffffffffffffffffffffffffffff83168585846138c0565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555050565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015612327573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061234b919061507c565b612381576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112426142d4565b6000805460ff16156123f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff1615612439576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff1633146124be576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166321d18456857f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612568573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061258c9190614fa4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168152600481019290925260248201526044016020604051808303816000875af11580156125e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061260b91906151a0565b6040517fbf28068b0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff80831660248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063bf28068b90604401600060405180830381600087803b1580156126a057600080fd5b505af11580156126b4573d6000803e3d6000fd5b505050506126c28382614394565b73ffffffffffffffffffffffffffffffffffffffff811660009081526008602052604081206001905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690559392505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314612769576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805461ffff92831668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9484166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff96851664010000000002969096167fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff97851662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000090931694909816939093171794909416949094179190911716919091179055565b6000805460ff16156128b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156128f5576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff16331461297a576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080600061298887613aa6565b925092509250846129a25761299d8684615099565b6129ac565b6129ac8684614fec565b935060008515612b045769021e19e0c9bab24000008510612a15576129d583603689901c615004565b6129e3603686901c84615004565b6129ed9190614fec565b603686901c6129fc8585615004565b612a069190615004565b612a109190615041565b612a52565b612a1f8388615004565b612a298584615004565b612a339190614fec565b85612a3e8585615004565b612a489190615004565b612a529190615041565b6040517fbf28068b0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff8a811660248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063bf28068b90604401600060405180830381600087803b158015612ae757600080fd5b505af1158015612afb573d6000803e3d6000fd5b50505050612d9f565b60008484612b128583615004565b612b1c9190615041565b612b269190615099565b60015490915060009061271090612b419061ffff1684615004565b612b4b9190615041565b905073ffffffffffffffffffffffffffffffffffffffff8a1663d1660f997f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000084612bb6878f614fec565b612bc09190614fec565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b158015612c3457600080fd5b505af1158015612c48573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ca9505e4838b612c949190614fec565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815260048101919091526024810184905260006044820152606401600060405180830381600087803b158015612cf357600080fd5b505af1158015612d07573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d9a9190614fa4565b925050505b6040517f16128211000000000000000000000000000000000000000000000000000000008152600481018690526024810182905273ffffffffffffffffffffffffffffffffffffffff891690631612821190604401600060405180830381600087803b158015612e0e57600080fd5b505af1158015612e22573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055509498975050505050505050565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff16158015612eac57506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b15612ee3576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff1615612f25576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055612f5a81613f56565b50600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b60035473ffffffffffffffffffffffffffffffffffffffff163314612fd6576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517ff62005acebe9b616aefb5f248b48f5e89f28437b27d1eebc0b2d911209f297af90600090a250565b60035473ffffffffffffffffffffffffffffffffffffffff163314613096576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600755565b60035473ffffffffffffffffffffffffffffffffffffffff1633146130ec576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613193576001805461ffff83167e01000000000000000000000000000000000000000000000000000000000000027dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790555050565b600061319e836135a5565b9050806131d7576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000908152600460205260409020805473ffffffffffffffffffffffffffffffffffffffff1675ffff000000000000000000000000000000000000000060a084901b161790555050565b60035473ffffffffffffffffffffffffffffffffffffffff163314613272576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61111f81614467565b60035473ffffffffffffffffffffffffffffffffffffffff1633146132cc576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805460ff90921662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff909216919091179055565b60005460ff1615613373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156133b5576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff16331461343a576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061344583613541565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260026020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055905061349c8282614394565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b60008082600114156135275750506001547f0000000000000000000000000000000000000000000000000000000000000000927e0100000000000000000000000000000000000000000000000000000000000090910461ffff169150565b50506000908152600460205260409020549060a082901c90565b73ffffffffffffffffffffffffffffffffffffffff80821660009081526002602052604090205416806135a0576040517fb5ba4c4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146136255773ffffffffffffffffffffffffffffffffffffffff8216600090815260066020526040902054613628565b60015b92915050565b6000613639826135a5565b73ffffffffffffffffffffffffffffffffffffffff909316600090815260086020526040902080549319939093169092555050565b8080156136c657507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b15613828576040517fd1660f9900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301526044820184905286169063d1660f9990606401600060405180830381600087803b15801561376357600080fd5b505af1158015613777573d6000803e3d6000fd5b50506040517f5869dba800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690527f0000000000000000000000000000000000000000000000000000000000000000169250635869dba89150604401600060405180830381600087803b15801561380b57600080fd5b505af115801561381f573d6000803e3d6000fd5b505050506138b9565b6040517fd1660f9900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301526044820184905286169063d1660f9990606401600060405180830381600087803b1580156138a057600080fd5b505af11580156138b4573d6000803e3d6000fd5b505050505b5050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261395590859061455b565b50505050565b60025b8181116138b95781811615613a2d576000613978826134c9565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529192506000918316906370a0823190602401602060405180830381865afa1580156139eb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a0f9190614fa4565b90506002811115613a2a57613a2a878388600185038961366e565b50505b60011b61395e565b73ffffffffffffffffffffffffffffffffffffffff811660009081526008602052604081205490613a6582614667565b60005490915062010000900460ff16811115613aa1576000613a86836146a7565b613a91906001614fec565b905061395584848460008561470b565b505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff16631afbb7a46040518163ffffffff1660e01b8152600401602060405180830381865afa158015613af6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b1a9190614fa4565b92508373ffffffffffffffffffffffffffffffffffffffff166317d11a156040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b8b9190614fa4565b91507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bf8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c1c9190614fa4565b929491935050565b60005460ff16613c90576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610bd0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6040805173ffffffffffffffffffffffffffffffffffffffff8681166024830152604480830186905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b30000000000000000000000000000000000000000000000000000000017905291517f1cff79cd000000000000000000000000000000000000000000000000000000008152600092861691631cff79cd91613dc6918a91600401615103565b6000604051808303816000875af1925050508015613e2457506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052613e219190810190615132565b60015b613e2d57613e61565b80511580613e50575080806020019051810190613e4a919061507c565b15156001145b15613e5f576001915050613e9d565b505b8115613e99576040517f76e3e29c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060005b95945050505050565b6000613eb1826135a5565b9050801580613ec35750600754811615155b15613efa576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83166000908152600860205260409020548116613aa15773ffffffffffffffffffffffffffffffffffffffff83166000908152600860205260409020805482179055505050565b60015473ffffffffffffffffffffffffffffffffffffffff8281166000908152600860205260408120546a010000000000000000000090930490911691908080613f9f86611122565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526127108202600482015273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350908716915063f9a6503090604401602060405180830381865afa15801561403a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061405e9190614fa4565b9250614069846146a7565b6001019150506000806000805b848110156142a157801561408f5760018186031b614092565b60015b935086841615614299576000806140a8866134c9565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8e811660048301529294509092506000918416906370a0823190602401602060405180830381865afa15801561411d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141419190614fa4565b9050600181111561428c576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff848116602483015261ffff841691908d169063f9a6503090604401602060405180830381865afa1580156141c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141ea9190614fa4565b6141f49190615004565b6141fe9087614fec565b95508886106142875760006142128b614667565b60005490915062010000900460ff16811115614249576142448d8c836001891561423e57898e0361470b565b8d61470b565b614278565b85156142785773ffffffffffffffffffffffffffffffffffffffff8d1660009081526008602052604090208b90555b50505050505050505050505050565b614295565b98861898600194505b5050505b600101614076565b506040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005460ff1615614341576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613cdb3390565b73ffffffffffffffffffffffffffffffffffffffff821615806143dd575073ffffffffffffffffffffffffffffffffffffffff8281166000908152600260205260409020541615155b15614414576040517f9e59609e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff918216600090815260026020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001691909216179055565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260066020526040902054156144c4576040517f2e5a5c7700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61010060055410614501576040517f1cbbe18500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005805473ffffffffffffffffffffffffffffffffffffffff83166000818152600660209081526040808320600190951b9485905584835260049091528120919091558254919290614552836151bd565b91905055505050565b60006145bd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166148799092919063ffffffff16565b805190915015613aa157808060200190518101906145db919061507c565b613aa1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610bd0565b60008060005b6101008110156146a0576001811b91508382161561468c578260010192505b838210614698576146a0565b60010161466d565b5050919050565b600081600114156146ba57506000919050565b61010060015b60016146cc8284614fec565b901c92506001831b848116158015906146e75750600185851c145b156146f257506146a0565b84811061470157839250614705565b8391505b506146c0565b815b81811015614846576001811b8581161561483d57600061472c826134c9565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529192506000918316906370a0823190602401602060405180830381865afa15801561479f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147c39190614fa4565b90506001811161483a57600054978318977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9097019660ff6201000090910416871161483a5750505073ffffffffffffffffffffffffffffffffffffffff86166000908152600860205260409020859055506138b9565b50505b5060010161470d565b506040517f53275fcb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606148888484600085614892565b90505b9392505050565b606082471015614924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610bd0565b843b61498c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610bd0565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516149b591906151f6565b60006040518083038185875af1925050503d80600081146149f2576040519150601f19603f3d011682016040523d82523d6000602084013e6149f7565b606091505b5091509150614a07828286614a12565b979650505050505050565b60608315614a2157508161488b565b825115614a315782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd09190614e5b565b73ffffffffffffffffffffffffffffffffffffffff8116811461111f57600080fd5b600060208284031215614a9957600080fd5b813561488b81614a65565b60008060408385031215614ab757600080fd5b8235614ac281614a65565b91506020830135614ad281614a65565b809150509250929050565b600060208284031215614aef57600080fd5b5035919050565b8035600381106135a057600080fd5b801515811461111f57600080fd5b600080600080600080600060e0888a031215614b2e57600080fd5b8735614b3981614a65565b9650614b4760208901614af6565b9550604088013594506060880135614b5e81614a65565b93506080880135614b6e81614a65565b925060a0880135915060c0880135614b8581614b05565b8091505092959891949750929550565b60008060008060808587031215614bab57600080fd5b8435614bb681614a65565b93506020850135614bc681614a65565b92506040850135614bd681614a65565b9396929550929360600135925050565b60008060008060808587031215614bfc57600080fd5b84359350614c0c60208601614af6565b93969395505050506040820135916060013590565b600080600080600060a08688031215614c3957600080fd5b8535614c4481614a65565b94506020860135614c5481614a65565b93506040860135614c6481614a65565b94979396509394606081013594506080013592915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614cf257614cf2614c7c565b604052919050565b600067ffffffffffffffff821115614d1457614d14614c7c565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600080600060608486031215614d5557600080fd5b8335614d6081614a65565b92506020840135614d7081614a65565b9150604084013567ffffffffffffffff811115614d8c57600080fd5b8401601f81018613614d9d57600080fd5b8035614db0614dab82614cfa565b614cab565b818152876020838501011115614dc557600080fd5b816020840160208301376000602083830101528093505050509250925092565b60005b83811015614e00578181015183820152602001614de8565b838111156139555750506000910152565b60008151808452614e29816020860160208601614de5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061488b6020830184614e11565b60008060408385031215614e8157600080fd5b823591506020830135614ad281614a65565b803561ffff811681146135a057600080fd5b600080600080600060a08688031215614ebd57600080fd5b614ec686614e93565b9450614ed460208701614e93565b9350614ee260408701614e93565b9250614ef060608701614e93565b9150614efe60808701614e93565b90509295509295909350565b600080600060608486031215614f1f57600080fd5b8335614f2a81614a65565b9250602084013591506040840135614f4181614b05565b809150509250925092565b60008060408385031215614f5f57600080fd5b8235614f6a81614a65565b9150614f7860208401614e93565b90509250929050565b600060208284031215614f9357600080fd5b813560ff8116811461488b57600080fd5b600060208284031215614fb657600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115614fff57614fff614fbd565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561503c5761503c614fbd565b500290565b600082615077577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60006020828403121561508e57600080fd5b815161488b81614b05565b6000828210156150ab576150ab614fbd565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600080604083850312156150f257600080fd5b505080516020909101519092909150565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015260006148886040830184614e11565b60006020828403121561514457600080fd5b815167ffffffffffffffff81111561515b57600080fd5b8201601f8101841361516c57600080fd5b805161517a614dab82614cfa565b81815285602083850101111561518f57600080fd5b613e9d826020830160208601614de5565b6000602082840312156151b257600080fd5b815161488b81614a65565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156151ef576151ef614fbd565b5060010190565b60008251615208818460208701614de5565b919091019291505056fea26469706673582212209d39bb9d4972b515acdad1ffb757acd15e103ca6ee762f88a6382b36243734ba64736f6c634300080a00336101406040523480156200001257600080fd5b5060405162005e9738038062005e97833981016040819052620000359162000198565b60016000556001600160a01b0383166200006257604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038316608081905260408051636f307dc360e01b81529051636f307dc3916004808201926020929091908290030181865afa158015620000ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d39190620001ea565b6001600160a01b031660a0816001600160a01b031681525050826001600160a01b0316634f0e0ef36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200012b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001519190620001ea565b6001600160a01b0390811660c0529190911660e0819052151561010052151561012052506200020f565b80516001600160a01b03811681146200019357600080fd5b919050565b600080600060608486031215620001ae57600080fd5b620001b9846200017b565b9250620001c9602085016200017b565b915060408401518015158114620001df57600080fd5b809150509250925092565b600060208284031215620001fd57600080fd5b62000208826200017b565b9392505050565b60805160a05160c05160e0516101005161012051615a86620004116000396000818161061101528181612fb5015261481f01526000818161031701528181610dde015281816144f901526146e5015260008181610557015281816146a901526147a901526000818161034b0152818161387d015261392d01526000818161047301528181611bfe0152818161274f0152818161280d0152818161366a01526137dd015260008181610665015281816109d801528181610b0301528181610bd501528181610cdd01528181610e6501528181610fe30152818161114e0152818161120e0152818161132e015281816114510152818161162b01528181611708015281816117e0015281816119e501528181611b1201528181611d9501528181611ed5015281816120040152818161216801528181612290015281816123c601528181612568015281816126390152818161266f0152818161293d01528181612a2101528181612a8a01528181612bde01528181612d2601528181612e6801528181612ec2015281816130a10152818161311b015281816131b401528181613341015281816134c10152818161358a0152818161372f01528181613a1a01528181613b2e01528181613dbb015281816142200152818161432801528181614492015281816148e7015281816149e801528181614aae0152614d8f0152615a866000f3fe6080604052600436106102695760003560e01c8063860aefcf11610153578063c7de38a6116100cb578063dfd594651161007f578063eb9606df11610064578063eb9606df1461081e578063f9eaee0d1461083e578063ffd9b9071461085e57600080fd5b8063dfd59465146107de578063e1f21c67146107fe57600080fd5b8063cff0ab96116100b0578063cff0ab96146106ef578063d9ccbec114610783578063dcf65482146107be57600080fd5b8063c7de38a6146106a7578063caa5c23f146106dc57600080fd5b80639c55a05411610122578063b55bb84b11610107578063b55bb84b14610633578063c12c21c014610653578063c690908a1461068757600080fd5b80639c55a054146105df578063b1836d32146105ff57600080fd5b8063860aefcf146104db5780639408b63f146105455780639b67ab30146105795780639be0536a146105bd57600080fd5b80635d91a0e0116101e65780636d19b486116101b55780637071b7c51161019a5780637071b7c51461049557806379c0ef91146104a857806382871ace146104c857600080fd5b80636d19b486146104415780636f307dc31461046157600080fd5b80635d91a0e0146103e85780635f73fbec146103fb578063601d66f61461040e5780636c8f225d1461042e57600080fd5b80633d9287fa1161023d5780635019e20a116102225780635019e20a1461039257806354fd4d50146103b257806359781034146103d557600080fd5b80633d9287fa146103055780634f0e0ef31461033957600080fd5b8062842b571461026e578063256ac915146102905780632a7ba1f7146102c55780632b7c7b11146102e5575b600080fd5b34801561027a57600080fd5b5061028e6102893660046151bf565b61087e565b005b34801561029c57600080fd5b506102b06102ab3660046151f8565b61098e565b60405190151581526020015b60405180910390f35b3480156102d157600080fd5b5061028e6102e0366004615215565b610a61565b3480156102f157600080fd5b5061028e610300366004615215565b610c3b565b34801561031157600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561034557600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102bc565b34801561039e57600080fd5b5061028e6103ad3660046151f8565b610d6a565b3480156103be57600080fd5b506103c7600281565b6040519081526020016102bc565b61028e6103e336600461522e565b61108c565b61028e6103f63660046152bb565b611275565b61028e610409366004615340565b611589565b34801561041a57600080fd5b5061028e6104293660046153d8565b6117de565b61028e61043c36600461541b565b611900565b34801561044d57600080fd5b506102b061045c3660046151f8565b611c31565b34801561046d57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b61028e6104a336600461546e565b611c60565b3480156104b457600080fd5b5061036d6104c3366004615215565b611f3e565b61028e6104d63660046152bb565b611f4b565b3480156104e757600080fd5b5060025461051c906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041682565b604080516fffffffffffffffffffffffffffffffff9384168152929091166020830152016102bc565b34801561055157600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561058557600080fd5b506004546040805167ffffffffffffffff608084901c1681526fffffffffffffffffffffffffffffffff9092166020830152016102bc565b3480156105c957600080fd5b506105d261227d565b6040516102bc91906154e2565b3480156105eb57600080fd5b5061028e6105fa36600461553c565b61228e565b34801561060b57600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561063f57600080fd5b5061028e61064e3660046151f8565b6123c4565b34801561065f57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561069357600080fd5b5061028e6106a23660046151f8565b6124c6565b3480156106b357600080fd5b506106c76106c23660046151f8565b612668565b604080519283526020830191909152016102bc565b61028e6106ea366004615557565b61289b565b3480156106fb57600080fd5b5060015461074e906fffffffffffffffffffffffffffffffff811690700100000000000000000000000000000000810460ff169071010000000000000000000000000000000000900464ffffffffff1683565b604080516fffffffffffffffffffffffffffffffff9094168452911515602084015264ffffffffff16908201526060016102bc565b34801561078f57600080fd5b506102b061079e366004615599565b600360209081526000928352604080842090915290825290205460ff1681565b3480156107ca57600080fd5b5061028e6107d93660046151f8565b612a88565b3480156107ea57600080fd5b506103c76107f93660046151f8565b612b86565b34801561080a57600080fd5b5061028e61081936600461522e565b612c6d565b34801561082a57600080fd5b5061028e6108393660046155c7565b612ec0565b34801561084a57600080fd5b506102b06108593660046151f8565b613057565b34801561086a57600080fd5b5061028e6108793660046155ee565b6131b2565b600260005414156108f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b6002600090815573ffffffffffffffffffffffffffffffffffffffff8316808252600360209081526040808420338086529083529381902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081527f9b3258bc4904fd6426b99843e206c6c7cdb1fd0f040121c25b71dafbb3851ee0910160405180910390a350506001600055565b6040517f055ee9b500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063055ee9b590602401602060405180830381865afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a43919061560b565b73ffffffffffffffffffffffffffffffffffffffff16141592915050565b60026000541415610ace576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610b5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b83919061560b565b9050610b903382846132eb565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906395373018906024015b600060405180830381600087803b158015610c1a57600080fd5b505af1158015610c2e573d6000803e3d6000fd5b5050600160005550505050565b60026000541415610ca8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610d39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5d919061560b565b9050610b90338284613411565b60026000541415610dd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000557f000000000000000000000000000000000000000000000000000000000000000015610e34576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610ec1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee5919061560b565b33600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915290205490915060ff16610f52576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f5d82613583565b5090508015610f98576040517ff713841e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b15801561102757600080fd5b505af115801561103b573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692503391507f93c70cc9715bef0d83edf2095f3595402279d274f402a73ffc17f1bcb19d863d90600090a35050600160005550565b600260005414156110f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611106613875565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063e958b70490602401602060405180830381865afa158015611197573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bb919061560b565b90506111c9848285856139b7565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401600060405180830381600087803b15801561125257600080fd5b505af1158015611266573d6000803e3d6000fd5b50506001600055505050505050565b600260005414156112e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611375573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611399919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166113e8576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806113f483613583565b915091508161142f576040517f1fdd676f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611437613875565b831561144d5761144d85858b8660016000613ae3565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632362a2d88b600185338e8e8e6040518863ffffffff1660e01b81526004016114b59796959493929190615663565b6020604051808303816000875af11580156114d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f891906156bf565b90508873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f7dfecd8419723a9d3954585a30c2a270165d70aafa146c11c1e1b88ae14390648460405161157091815260200190565b60405180910390a4505060016000555050505050505050565b600260005414156115f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ab919061560b565b90506116b5613875565b81156116cb576116cb8383338460016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d89061174a903390600090819083908d908d908d90600401615663565b6020604051808303816000875af1158015611769573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178d91906156bf565b5060405173ffffffffffffffffffffffffffffffffffffffff87169033907f460ad03b1cf79b1d64d3aefa28475f110ab66e84649c52bb41ed796b9b39198190600090a35050600160005550505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611849573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118d1576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff90811670010000000000000000000000000000000002911617600255565b6002600054141561196d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000908155606461198461ffff851687615707565b61198e9190615744565b9050611999816144f7565b6119a2816145e8565b6119ab84614668565b6119b3613875565b6040517f172c48c7000000000000000000000000000000000000000000000000000000008152600060048201819052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a64919061577f565b61ffff169150611a789050816127106157ae565b611a829083615707565b611a8c8288615707565b11611ac3576040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff86811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611b5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b81919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638587604051611bef92919091825261ffff16602082015260400190565b60405180910390a3611c2386827f00000000000000000000000000000000000000000000000000000000000000008a6139b7565b505060016000555050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526006602052604081205415155b92915050565b60026000541415611ccd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611cdb856144f7565b611ce484614668565b611ced856145e8565b600154700100000000000000000000000000000000900460ff1615611d3e576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d46613875565b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff85811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611de0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e04919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638885604051611e7292919091825261ffff16602082015260400190565b60405180910390a38215611e9057611e908484878460006001613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015611f1957600080fd5b505af1158015611f2d573d6000803e3d6000fd5b505060016000555050505050505050565b6000611c5a60058361480f565b60026000541415611fb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa15801561204b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206f919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166120be576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120c661481b565b6120fc576040517f7e52ccb400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061210782612668565b509050612112613875565b82156121285761212884848a8560016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d8906121aa908c90600290879033908f908f908f90600401615663565b6020604051808303816000875af11580156121c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ed91906156bf565b90508773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167ffada13ff2d5e1a1d9da37ad4a4130893b34e3c69c32b17f87ec31fd661b867078460405161226591815260200190565b60405180910390a45050600160005550505050505050565b6060612289600561486b565b905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612381576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561242f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612453919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146124b7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614878565b5050565b60026000541415612533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156125c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e8919061560b565b90506125f4818361489a565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401610c00565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126fc919061560b565b905060008061270b8387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156127a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127c991906156bf565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015291965061271091851690637afb010490604401602060405180830381865afa158015612863573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061288791906156bf565b6128919190615744565b9350505050915091565b60026000541415612908576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129bd919061560b565b90506129c7613875565b8115612a7e576129dc83833384600080613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015612a6557600080fd5b505af1158015612a79573d6000803e3d6000fd5b505050505b5050600160005550565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612af3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b17919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b7b576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614c92565b600080612b9283612668565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152919350600092507f000000000000000000000000000000000000000000000000000000000000000090911690633192195c906024016040805180830381865afa158015612c26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4a91906157c5565b9150819050612c5b61271084615707565b612c659190615744565b949350505050565b60026000541415612cda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063fdd5764590602401602060405180830381865afa158015612d6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d91919061560b565b73ffffffffffffffffffffffffffffffffffffffff161480612dd7575073ffffffffffffffffffffffffffffffffffffffff831660009081526006602052604090205415155b15612e0e576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612eac57600080fd5b505af1158015611c23573d6000803e3d6000fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f4f919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612fb3576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000061300a576040517f50dd11fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805464ffffffffff90921671010000000000000000000000000000000000027fffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffffff909216919091179055565b6040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063f67c5bd090602401602060405180830381865afa1580156130e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061310c91906156bf565b905080158015906131ab5750807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015613184573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a891906156bf565b16155b9392505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561321d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613241919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146132a5576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018054911515700100000000000000000000000000000000027fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff909216919091179055565b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600060448301819052917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561338c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133b091906156bf565b90506133bb816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f98274bf834d179ee08dc0604071b0dc90b54731bd5f725a5a96a39a86bce025a8360405161340391815260200190565b60405180910390a250505050565b61341a816144f7565b600154700100000000000000000000000000000000900460ff161561346b576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600160448301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561350c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061353091906156bf565b905061353b816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f9cac51154cc0d835e2f9c9d1f59a9344588cee107f4203bf58a8c797e3a58c458360405161340391815260200190565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613617919061560b565b90506000806136268387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156136c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136e491906156bf565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529195506000917f00000000000000000000000000000000000000000000000000000000000000001690633192195c906024016040805180830381865afa158015613775573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061379991906157c5565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350600092506127109187169063f9a6503090604401602060405180830381865afa158015613837573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061385b91906156bf565b6138659190615707565b9092109794965093945050505050565b34156139b5577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156138e357600080fd5b505af11580156138f7573d6000803e3d6000fd5b50506040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201523460248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16935063a9059cbb925060440190506020604051808303816000875af115801561398f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139b391906157e9565b505b565b6139c084614cb4565b6040517f830aa74500000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f0000000000000000000000000000000000000000000000000000000000000000169063830aa74590608401600060405180830381600087803b158015613a5e57600080fd5b505af1158015613a72573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fa32435755c235de2976ed44a75a2f85cb01faf0c894f639fe0c32bb9455fea8f83604051613ad591815260200190565b60405180910390a350505050565b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301523060248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b158015613b7257600080fd5b505af1158015613b86573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff871692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a28460005b8181101561441d5736888883818110613bea57613bea615806565b9050602002810190613bfc9190615835565b90506004613c0d6020830183615873565b90501015613c47576040517fe2b0e50600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b30613c5560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16141561421c578415613ca9576040517f5fb9107f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613cb86020830183615873565b613cc1916158d8565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167f59781034000000000000000000000000000000000000000000000000000000001415613e3c5760008080613d1e6020860186615873565b613d2c916004908290615920565b810190613d39919061522e565b925092509250613e34838c73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614613e2b576040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015613e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e26919061560b565b613e2d565b8b5b84846139b7565b505050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2b7c7b11000000000000000000000000000000000000000000000000000000001415613ec757600194506000613e996020840184615873565b613ea7916004908290615920565b810190613eb49190615215565b9050613ec1898983613411565b50614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2a7ba1f7000000000000000000000000000000000000000000000000000000001415613f80578415613f49576040517fc0b0caa800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613f586020840184615873565b613f66916004908290615920565b810190613f739190615215565b9050613ec18989836132eb565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f233a8caa0000000000000000000000000000000000000000000000000000000014156140e457600080613fda6020850185615873565b613fe8916004908290615920565b810190613ff5919061594a565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c8116600483015292945090925082918416906370a0823190602401602060405180830381865afa158015614069573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061408d91906156bf565b10156140dd576040517fa5ac537300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016108e7565b5050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fc690908a00000000000000000000000000000000000000000000000000000000141561416457600061413d6020840184615873565b61414b916004908290615920565b81019061415891906151f8565b9050613ec1888261489a565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f23e27a640000000000000000000000000000000000000000000000000000000014156141e45760006141bd6020840184615873565b6141cb916004908290615920565b8101906141d891906151f8565b9050613ec18882614d42565b6040517f1e9e7e7a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50614414565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff68754361426760208501856151f8565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156142d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142f4919061560b565b73ffffffffffffffffffffffffffffffffffffffff16148061436d575073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001661435560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16145b156143a4576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6144126143b46020830183615873565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506143f69250505060208401846151f8565b73ffffffffffffffffffffffffffffffffffffffff1690614e39565b505b50600101613bcf565b506040517f60c8e8938c9a0c0d88a98d6f1c562ce68077e12bf3edb8047378f2f736cb45b490600090a16040517fe1998cf900000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff86811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b1580156144d657600080fd5b505af11580156144ea573d6000803e3d6000fd5b5050505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006139b3576001546fffffffffffffffffffffffffffffffff9081169081146124c257600454608081901c906fffffffffffffffffffffffffffffffff16600067ffffffffffffffff8316431461456e578461458a565b61458a6fffffffffffffffffffffffffffffffff831686615976565b9050838111156145c6576040517f675f1a5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff81164360801b176004555050505050565b6002546fffffffffffffffffffffffffffffffff16811080614631575060025470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681115b156139b3576040517fce16799400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61467061481b565b156146a7576040517f63fc31c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1615614806577f0000000000000000000000000000000000000000000000000000000000000000801561472657503373ffffffffffffffffffffffffffffffffffffffff821614155b1561475d576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600160248301527f00000000000000000000000000000000000000000000000000000000000000001690639dc29fac90604401600060405180830381600087803b1580156147ed57600080fd5b505af1158015614801573d6000803e3d6000fd5b505050505b6139b381614cb4565b60006131ab8383614e7b565b60007f0000000000000000000000000000000000000000000000000000000000000000801561228957505060015471010000000000000000000000000000000000900464ffffffffff1642101590565b606060006131ab83614ea5565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f01565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561492b57600080fd5b505af115801561493f573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527fdf498aa1c340e992665d6fb4f3be8436d452c45a630cb6d7fab7963da39bac8793500190505b60405180910390a15050565b6040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600091829160019183917f00000000000000000000000000000000000000000000000000000000000000001690638991b2f190602401602060405180830381865afa158015614a2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a5391906156bf565b90505b808211614c895780821615614c7d576040517fe75538c700000000000000000000000000000000000000000000000000000000815260048101839052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e75538c7906024016040805180830381865afa158015614af4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b18919061577f565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529294509092506000918416906370a0823190602401602060405180830381865afa158015614b8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bb191906156bf565b90506001811115614c79576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff8481166024830152600091908b169063f9a6503090604401602060405180830381865afa158015614c33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c5791906156bf565b978801979050614c6b61ffff841682615707565b614c759088615976565b9650505b5050505b600182901b9150614a56565b50509250929050565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f50565b3373ffffffffffffffffffffffffffffffffffffffff821614801590614d0b575033600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16155b156139b3576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b158015614dd357600080fd5b505af1158015614de7573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527f69db9e9764da61b6681b89fb0f5be018506e0342036e56b59c3015a620d60977935001905061498d565b60606131ab83836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250615043565b6000826000018281548110614e9257614e92615806565b9060005260206000200154905092915050565b606081600001805480602002602001604051908101604052809291908181526020018280548015614ef557602002820191906000526020600020905b815481526020019060010190808311614ee1575b50505050509050919050565b6000818152600183016020526040812054614f4857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611c5a565b506000611c5a565b60008181526001830160205260408120548015615039576000614f746001836157ae565b8554909150600090614f88906001906157ae565b9050818114614fed576000866000018281548110614fa857614fa8615806565b9060005260206000200154905080876000018481548110614fcb57614fcb615806565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080614ffe57614ffe61598e565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611c5a565b6000915050611c5a565b6060612c65848460008585843b6150b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108e7565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516150df91906159ed565b60006040518083038185875af1925050503d806000811461511c576040519150601f19603f3d011682016040523d82523d6000602084013e615121565b606091505b509150915061513182828661513c565b979650505050505050565b6060831561514b5750816131ab565b82511561515b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e791906159ff565b73ffffffffffffffffffffffffffffffffffffffff811681146139b357600080fd5b80151581146139b357600080fd5b600080604083850312156151d257600080fd5b82356151dd8161518f565b915060208301356151ed816151b1565b809150509250929050565b60006020828403121561520a57600080fd5b81356131ab8161518f565b60006020828403121561522757600080fd5b5035919050565b60008060006060848603121561524357600080fd5b833561524e8161518f565b9250602084013561525e8161518f565b929592945050506040919091013590565b60008083601f84011261528157600080fd5b50813567ffffffffffffffff81111561529957600080fd5b6020830191508360208260051b85010111156152b457600080fd5b9250929050565b60008060008060008060a087890312156152d457600080fd5b86356152df8161518f565b955060208701356152ef8161518f565b9450604087013593506060870135615306816151b1565b9250608087013567ffffffffffffffff81111561532257600080fd5b61532e89828a0161526f565b979a9699509497509295939492505050565b60008060008060006080868803121561535857600080fd5b85356153638161518f565b945060208601359350604086013561537a816151b1565b9250606086013567ffffffffffffffff81111561539657600080fd5b6153a28882890161526f565b969995985093965092949392505050565b80356fffffffffffffffffffffffffffffffff811681146153d357600080fd5b919050565b600080604083850312156153eb57600080fd5b6153f4836153b3565b9150615402602084016153b3565b90509250929050565b61ffff811681146139b357600080fd5b6000806000806080858703121561543157600080fd5b8435935060208501356154438161518f565b925060408501356154538161540b565b915060608501356154638161540b565b939692955090935050565b60008060008060006080868803121561548657600080fd5b8535945060208601356154988161518f565b9350604086013567ffffffffffffffff8111156154b457600080fd5b6154c08882890161526f565b90945092505060608601356154d48161540b565b809150509295509295909350565b6020808252825182820181905260009190848201906040850190845b8181101561553057835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016154fe565b50909695505050505050565b60006020828403121561554e57600080fd5b6131ab826153b3565b6000806020838503121561556a57600080fd5b823567ffffffffffffffff81111561558157600080fd5b61558d8582860161526f565b90969095509350505050565b600080604083850312156155ac57600080fd5b82356155b78161518f565b915060208301356151ed8161518f565b6000602082840312156155d957600080fd5b813564ffffffffff811681146131ab57600080fd5b60006020828403121561560057600080fd5b81356131ab816151b1565b60006020828403121561561d57600080fd5b81516131ab8161518f565b6003811061565f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b73ffffffffffffffffffffffffffffffffffffffff888116825260e082019061568f602084018a615628565b6040830197909752948616606082015292909416608083015260a082015291151560c09092019190915292915050565b6000602082840312156156d157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561573f5761573f6156d8565b500290565b60008261577a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000806040838503121561579257600080fd5b825161579d8161518f565b60208401519092506151ed8161540b565b6000828210156157c0576157c06156d8565b500390565b600080604083850312156157d857600080fd5b505080516020909101519092909150565b6000602082840312156157fb57600080fd5b81516131ab816151b1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc183360301811261586957600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126158a857600080fd5b83018035915067ffffffffffffffff8211156158c357600080fd5b6020019150368190038213156152b457600080fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156159185780818660040360031b1b83161692505b505092915050565b6000808585111561593057600080fd5b8386111561593d57600080fd5b5050820193919092039150565b6000806040838503121561595d57600080fd5b82356159688161518f565b946020939093013593505050565b60008219821115615989576159896156d8565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60005b838110156159d85781810151838201526020016159c0565b838111156159e7576000848401525b50505050565b600082516158698184602087016159bd565b6020815260008251806020840152615a1e8160408501602087016159bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea2646970667358221220a3f4a705ab580a6ada1e438cd2ee4abc001b62d1d171fce12c41994900fef21664736f6c634300080a003360a06040523480156200001157600080fd5b5060405162005f3d38038062005f3d8339810160408190526200003491620012eb565b826001600160a01b031663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000073573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200009991906200147f565b6001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000d7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000fd91906200147f565b6000805460ff191690556001600160a01b0381166200012f57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200016e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200019491906200147f565b6001600160a01b03908116608052600180546001600160a01b031916918616918217905560408051636f307dc360e01b81529051919250636f307dc39160048083019260209291908290030181865afa158015620001f6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200021c91906200147f565b600260006101000a8154816001600160a01b0302191690836001600160a01b03160217905550826001600160a01b031663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000281573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a791906200147f565b6001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200030b91906200147f565b600080546001600160a01b039290921661010002610100600160a81b0319909216919091179055620003626103e860c86200034b6101f4612710620014bc565b60646200035c60c8612710620014bc565b620005e8565b60408101515160005b81811015620003ee576000836040015182815181106200038f576200038f620014e2565b6020026020010151600001519050620003ae81620007c260201b60201c565b620003e48185604001518481518110620003cc57620003cc620014e2565b60200260200101516020015162000a5e60201b60201c565b506001016200036b565b5060015460408051632630c12f60e01b815290516001600160a01b03909216916311ca4fc29186918491632630c12f9160048083019260209291908290030181865afa15801562000443573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200046991906200147f565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401600060405180830381600087803b158015620004b257600080fd5b505af1158015620004c7573d6000803e3d6000fd5b50506040516001600160a01b03861692507fa8b21f72cb83bce808df32dc2330217d744a1c22f3e9e44e4b11bbf049d37d9d9150600090a2600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000553573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200057991906200147f565b6001600160a01b03167f3f82447be465b0b5a4a9e54c74d5f6ae73f2e9537f2cc1590a340524703d096160405160405180910390a26020820151620005cb90620005c5906002620014f8565b62000bda565b81516020830151620005de919062000dc8565b5050505062001604565b6000620005f68585620014bc565b60015460405163172c48c760e01b81526000600482018190529293506001600160a01b039091169063172c48c7906024016040805180830381865afa15801562000644573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200066a91906200152a565b9150508061ffff168261ffff1614620006be57620006888262000f47565b60025460405161ffff841681526001600160a01b039091169060008051602062005f1d8339815191529060200160405180910390a25b60015460405163944ac59f60e01b815261ffff808a166004830152808916602483015280881660448301528087166064830152851660848201526001600160a01b039091169063944ac59f9060a401600060405180830381600087803b1580156200072857600080fd5b505af11580156200073d573d6000803e3d6000fd5b505050507f2214a403d5f8d049e52eacca974c6dea01a471e41d6a18903bfaf7dbc709741f878787612710620007749190620014bc565b876200078388612710620014bc565b6040805161ffff96871681529486166020860152928516848401529084166060840152909216608082015290519081900360a00190a150505050505050565b6001600160a01b038116620007ea57604051635919af9760e11b815260040160405180910390fd5b62000809816001600160a01b03166200116f60201b620023381760201c565b620008365760405163df4c572d60e01b81526001600160a01b038216600482015260240160405180910390fd5b6040516370a0823160e01b81523060048201526001600160a01b038216906370a0823190602401602060405180830381865afa92505050801562000899575060408051601f3d908101601f19168201909252620008969181019062001564565b60015b620008b75760405163528ca31d60e01b815260040160405180910390fd5b50600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200090c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200093291906200147f565b604051630f9a650360e41b8152670de0b6b3a764000060048201526001600160a01b038381166024830152919091169063f9a6503090604401602060405180830381865afa925050508015620009a7575060408051601f3d908101601f19168201909252620009a49181019062001564565b60015b620009c5576040516367a7cd4360e01b815260040160405180910390fd5b5060015460405163d48bfca760e01b81526001600160a01b0383811660048301529091169063d48bfca790602401600060405180830381600087803b15801562000a0e57600080fd5b505af115801562000a23573d6000803e3d6000fd5b50506040516001600160a01b03841692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a250565b6002546001600160a01b038381169116141562000a8e57604051633b899cf960e01b815260040160405180910390fd5b60015460405163172c48c760e01b8152600060048201819052916001600160a01b03169063172c48c7906024016040805180830381865afa15801562000ad8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000afe91906200152a565b91505061ffff8216158062000b1a57508061ffff168261ffff16115b1562000b39576040516333c6608d60e01b815260040160405180910390fd5b600154604051635385e2a160e11b81526001600160a01b03858116600483015261ffff851660248301529091169063a70bc54290604401600060405180830381600087803b15801562000b8b57600080fd5b505af115801562000ba0573d6000803e3d6000fd5b505060405161ffff851681526001600160a01b038616925060008051602062005f1d833981519152915060200160405180910390a2505050565b600062000be662001175565b6001600160a01b031663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801562000c24573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c4a91906200157e565b50509050600062000c606200117560201b60201c565b6001600160a01b031663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa15801562000c9d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000cc39190620015d5565b915050806001600160801b0316836001600160801b0316101562000cfa576040516309aadd6f60e41b815260040160405180910390fd5b826001600160801b0316826001600160801b03161462000dc35762000d1e62001175565b604051632715681560e21b81526001600160801b03851660048201526001600160a01b039190911690639c55a05490602401600060405180830381600087803b15801562000d6b57600080fd5b505af115801562000d80573d6000803e3d6000fd5b50506040516001600160801b03861681527fa030eec20ae970821387224ec3bb15b4bd22b89bfb86dc4d2b3827aa3d99e48d925060200190505b60405180910390a15b505050565b600062000dd462001175565b6001600160a01b031663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801562000e12573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e3891906200157e565b50509050816001600160801b0316836001600160801b0316118062000e6e5750806001600160801b0316826001600160801b0316115b1562000e8d576040516309aadd6f60e41b815260040160405180910390fd5b62000e9762001175565b60405163300eb37b60e11b81526001600160801b038086166004830152841660248201526001600160a01b03919091169063601d66f690604401600060405180830381600087803b15801562000eec57600080fd5b505af115801562000f01573d6000803e3d6000fd5b5050604080516001600160801b038088168252861660208201527f4d4981437d0211f9e6843eb024d9ada1fa3a99514d4343d4aece106dd11524bb935001905062000dba565b600154600254604051635385e2a160e11b81526001600160a01b03918216600482015261ffff8416602482015291169063a70bc54290604401600060405180830381600087803b15801562000f9b57600080fd5b505af115801562000fb0573d6000803e3d6000fd5b505050506000600160009054906101000a90046001600160a01b03166001600160a01b031663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200100a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001030919062001564565b905060015b8181101562000dc35760015460405163172c48c760e01b81526004810183905260009182916001600160a01b039091169063172c48c7906024016040805180830381865afa1580156200108c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010b291906200152a565b915091508461ffff168161ffff1611156200116457600154604051635385e2a160e11b81526001600160a01b03848116600483015261ffff881660248301529091169063a70bc54290604401600060405180830381600087803b1580156200111957600080fd5b505af11580156200112e573d6000803e3d6000fd5b505060405161ffff881681526001600160a01b038516925060008051602062005f1d833981519152915060200160405180910390a25b505060010162001035565b3b151590565b60015460408051632f7a188160e01b815290516000926001600160a01b031691632f7a18819160048083019260209291908290030181865afa158015620011c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011e691906200147f565b905090565b6001600160a01b03811681146200120157600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b03811182821017156200123f576200123f62001204565b60405290565b604080519081016001600160401b03811182821017156200123f576200123f62001204565b604051601f8201601f191681016001600160401b038111828210171562001295576200129562001204565b604052919050565b80516001600160801b0381168114620012b557600080fd5b919050565b8051620012b581620011eb565b805161ffff81168114620012b557600080fd5b80518015158114620012b557600080fd5b6000806000606084860312156200130157600080fd5b83516200130e81620011eb565b809350506020808501516200132381620011eb565b604086810151919450906001600160401b03808211156200134357600080fd5b9087019060a0828a0312156200135857600080fd5b620013626200121a565b6200136d836200129d565b81526200137c8584016200129d565b8582015283830151828111156200139257600080fd5b8301601f81018b13620013a457600080fd5b805183811115620013b957620013b962001204565b620013c9878260051b016200126a565b818152878101945060069190911b82018701908c821115620013ea57600080fd5b918701915b81831015620014435786838e031215620014095760008081fd5b6200141362001245565b83516200142081620011eb565b81526200142f848a01620012c7565b818a015285529387019391860191620013ef565b838701525062001458905060608401620012ba565b60608201526200146b60808401620012da565b608082015280955050505050509250925092565b6000602082840312156200149257600080fd5b81516200149f81620011eb565b9392505050565b634e487b7160e01b600052601160045260246000fd5b600061ffff83811690831681811015620014da57620014da620014a6565b039392505050565b634e487b7160e01b600052603260045260246000fd5b60006001600160801b0382811684821681151582840482111615620015215762001521620014a6565b02949350505050565b600080604083850312156200153e57600080fd5b82516200154b81620011eb565b91506200155b60208401620012c7565b90509250929050565b6000602082840312156200157757600080fd5b5051919050565b6000806000606084860312156200159457600080fd5b6200159f846200129d565b9250620015af60208501620012da565b9150604084015164ffffffffff81168114620015ca57600080fd5b809150509250925092565b60008060408385031215620015e957600080fd5b620015f4836200129d565b91506200155b602084016200129d565b608051614878620016a56000396000818161033601528181610446015281816107c5015281816108c0015281816109ae01528181610b8301528181610f0a015281816113e1015281816114cf015281816115bb015281816116ab015281816117990152818161187d01528181611ad901528181611bc601528181611cb301528181611da0015281816120090152818161218c015261227901526148786000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80638456cb59116100f9578063dc2b21c111610097578063f0527ac611610071578063f0527ac6146103d7578063f206d32a146103df578063fb1bd8c4146103f2578063ffd9b9071461040557600080fd5b8063dc2b21c11461039e578063e6492d7b146103b1578063eb9606df146103c457600080fd5b8063a50cf2c8116100d3578063a50cf2c814610331578063a70bc54214610358578063b53472ef1461036b578063c12c21c01461037e57600080fd5b80638456cb59146103035780639c55a0541461030b5780639f1c50691461031e57600080fd5b806350e036ff1161016657806354fd4d501161014057806354fd4d50146102b25780635c975abb146102ba5780636f307dc3146102d05780637bccacee146102f057600080fd5b806350e036ff1461027657806352438e541461028c578063526a41e81461029f57600080fd5b80633e7c88d6116101a25780633e7c88d6146102355780633f4ba83a14610248578063456e0742146102505780635094cb4f1461026357600080fd5b806324147708146101c95780632954018c146101de5780632f7a18811461022d575b600080fd5b6101dc6101d7366004614307565b610418565b005b60005461020390610100900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6102036106fe565b6101dc610243366004614334565b610797565b6101dc610892565b6101dc61025e366004614307565b610980565b61020361027136600461436d565b610b36565b61027e610b49565b604051908152602001610224565b6101dc61029a366004614307565b610b55565b6101dc6102ad366004614394565b610edc565b61027e600281565b60005460ff166040519015158152602001610224565b6002546102039073ffffffffffffffffffffffffffffffffffffffff1681565b6101dc6102fe3660046143c2565b6113b3565b6101dc6114a1565b6101dc61031936600461440e565b61158d565b6101dc61032c36600461442b565b61167d565b6102037f000000000000000000000000000000000000000000000000000000000000000081565b6101dc610366366004614334565b61176b565b6101dc610379366004614307565b61184f565b6001546102039073ffffffffffffffffffffffffffffffffffffffff1681565b6101dc6103ac366004614459565b611aab565b6101dc6103bf366004614307565b611b98565b6101dc6103d236600461448f565b611c85565b6101dc611d72565b6101dc6103ed3660046144ac565b611fdb565b6101dc610400366004614307565b61215e565b6101dc61041336600461451d565b61224b565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156104a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c6919061453a565b6104fc576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006105078261233e565b90506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015610578573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059c9190614557565b90508181166106f9576001546040517fa366f496000000000000000000000000000000000000000000000000000000008152918317600483018190529173ffffffffffffffffffffffffffffffffffffffff9091169063a366f49690602401600060405180830381600087803b15801561061557600080fd5b505af1158015610629573d6000803e3d6000fd5b505050506106356106fe565b6040517fffd9b9070000000000000000000000000000000000000000000000000000000081526001600482015273ffffffffffffffffffffffffffffffffffffffff919091169063ffd9b90790602401600060405180830381600087803b15801561069f57600080fd5b505af11580156106b3573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692507ff17b849746e74d7186170c9553d4bbf60b4f8bb1ed81fe50c099b934fb078f059150600090a25b505050565b600154604080517f2f7a1881000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691632f7a18819160048083019260209291908290030181865afa15801561076e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610792919061457b565b905090565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610821573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610845919061453a565b61087b576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108848261241e565b61088e82826127f8565b5050565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa15801561091c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610940919061453a565b610976576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61097e612a15565b565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610a0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2e919061453a565b610a64576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a6d81612af6565b6001546040517f9f5f86ae00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015290911690639f5f86ae90602401600060405180830381600087803b158015610ada57600080fd5b505af1158015610aee573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507f5a0b7d0f9c24b39256e112a0584b4c5ce38d8f1dee2e7c56f15b852604cdc8869150600090a250565b6000610b43600383612cb8565b92915050565b60006107926003612ccb565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610bdf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c03919061453a565b610c39576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610c86576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063fdd5764590602401602060405180830381865afa158015610cf7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1b919061457b565b905073ffffffffffffffffffffffffffffffffffffffff8116610d6a576040517f1170cc2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f6e98e5e400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526000602483015290911690636e98e5e490604401600060405180830381600087803b158015610dde57600080fd5b505af1158015610df2573d6000803e3d6000fd5b50506001546040517f6e98e5e40000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff86811660248301529091169250636e98e5e49150604401600060405180830381600087803b158015610e6a57600080fd5b505af1158015610e7e573d6000803e3d6000fd5b50505050610e96826003612cd590919063ffffffff16565b5060405173ffffffffffffffffffffffffffffffffffffffff8316907fab9f405bf0c19b97f65a7031634db41569cd2f0e0376a610a1e977f9ab22b58f90600090a25050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610f66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8a919061453a565b610fc0576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fc982612af6565b6000806000610fd66106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015611020573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110449190614598565b9250925092506000806110556106fe565b73ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa15801561109e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c291906145e5565b9150915060006110d06106fe565b73ffffffffffffffffffffffffffffffffffffffff16639be0536a6040518163ffffffff1660e01b8152600401600060405180830381865afa15801561111a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526111609190810190614643565b9050600061116c6106fe565b73ffffffffffffffffffffffffffffffffffffffff1663b1836d326040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111da919061453a565b600154604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905192935073ffffffffffffffffffffffffffffffffffffffff909116916311ca4fc2918c918491632630c12f9160048083019260209291908290030181865afa158015611256573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061127a919061457b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156112e757600080fd5b505af11580156112fb573d6000803e3d6000fd5b5050505087156113675761130e87612cf7565b6113188484612f5d565b61132186613152565b60005b82518110156113575761134f83828151811061134257611342614726565b60200260200101516132a3565b600101611324565b50801561136757611367856133c9565b60405173ffffffffffffffffffffffffffffffffffffffff8a16907fa8b21f72cb83bce808df32dc2330217d744a1c22f3e9e44e4b11bbf049d37d9d90600090a2505050505050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561143d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611461919061453a565b611497576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61088e828261357b565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561152b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061154f919061453a565b611585576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61097e6139c3565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611617573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163b919061453a565b611671576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81612cf7565b50565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611707573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172b919061453a565b611761576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61088e8282612f5d565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156117f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611819919061453a565b610884576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156118d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fd919061453a565b611933576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061193e8261233e565b90506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d39190614557565b9050818116156106f9576001546040517fa366f496000000000000000000000000000000000000000000000000000000008152918318600483018190529173ffffffffffffffffffffffffffffffffffffffff9091169063a366f49690602401600060405180830381600087803b158015611a4d57600080fd5b505af1158015611a61573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a2505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611b35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b59919061453a565b611b8f576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81613a83565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611c22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c46919061453a565b611c7c576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81613b3d565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611d0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d33919061453a565b611d69576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a816133c9565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611dfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e20919061453a565b611e56576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ec4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee8919061457b565b60015490915073ffffffffffffffffffffffffffffffffffffffff166311ca4fc2611f116106fe565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff91821660048201529084166024820152604401600060405180830381600087803b158015611f7f57600080fd5b505af1158015611f93573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507f3f82447be465b0b5a4a9e54c74d5f6ae73f2e9537f2cc1590a340524703d09619150600090a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015612065573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612089919061453a565b6120bf576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61271061ffff86161015806120e357506127106120dc8585614784565b61ffff1610155b806120fd57506127106120f68383614784565b61ffff1610155b15612134576040517f0b361d6900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6121578585612145866127106147aa565b85612152866127106147aa565b613c5c565b5050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156121e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061220c919061453a565b612242576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a816132a3565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156122d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122f9919061453a565b61232f576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81613152565b3b151590565b6001546040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063f67c5bd090602401602060405180830381865afa1580156123af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123d39190614557565b90508015806123e25750806001145b15612419576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b73ffffffffffffffffffffffffffffffffffffffff811661246b576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163b6124d6576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024015b60405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8216906370a0823190602401602060405180830381865afa92505050801561257a575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261257791810190614557565b60015b6125b0576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561261e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612642919061457b565b6040517ff9a65030000000000000000000000000000000000000000000000000000000008152670de0b6b3a7640000600482015273ffffffffffffffffffffffffffffffffffffffff8381166024830152919091169063f9a6503090604401602060405180830381865afa9250505080156126f8575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526126f591810190614557565b60015b61272e576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506001546040517fd48bfca700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301529091169063d48bfca790602401600060405180830381600087803b15801561279c57600080fd5b505af11580156127b0573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a250565b60025473ffffffffffffffffffffffffffffffffffffffff8381169116141561284d576040517f3b899cf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f172c48c70000000000000000000000000000000000000000000000000000000081526000600482018190529173ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa1580156128bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128e091906147cd565b91505061ffff821615806128fb57508061ffff168261ffff16115b15612932576040517f33c6608d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015261ffff851660248301529091169063a70bc54290604401600060405180830381600087803b1580156129a957600080fd5b505af11580156129bd573d6000803e3d6000fd5b505060405161ffff8516815273ffffffffffffffffffffffffffffffffffffffff861692507f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650915060200160405180910390a2505050565b60005460ff16612a81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016124cd565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b73ffffffffffffffffffffffffffffffffffffffff8116612b43576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163b612ba9576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024016124cd565b8073ffffffffffffffffffffffffffffffffffffffff1663c12c21c06040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612c2e575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252612c2b9181019061457b565b60015b612c64576040517fe9eddd1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60015473ffffffffffffffffffffffffffffffffffffffff82811691161461088e576040517fe9eddd1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612cc48383613e92565b9392505050565b6000610b43825490565b6000612cc48373ffffffffffffffffffffffffffffffffffffffff8416613ebc565b6000612d016106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015612d4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d6f9190614598565b505090506000612d7d6106fe565b73ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa158015612dc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dea91906145e5565b915050806fffffffffffffffffffffffffffffffff16836fffffffffffffffffffffffffffffffff161015612e4b576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826fffffffffffffffffffffffffffffffff16826fffffffffffffffffffffffffffffffff16146106f957612e7e6106fe565b6040517f9c55a0540000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff8516600482015273ffffffffffffffffffffffffffffffffffffffff9190911690639c55a05490602401600060405180830381600087803b158015612ef957600080fd5b505af1158015612f0d573d6000803e3d6000fd5b50506040516fffffffffffffffffffffffffffffffff861681527fa030eec20ae970821387224ec3bb15b4bd22b89bfb86dc4d2b3827aa3d99e48d925060200190505b60405180910390a1505050565b6000612f676106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015612fb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fd59190614598565b50509050816fffffffffffffffffffffffffffffffff16836fffffffffffffffffffffffffffffffff16118061302e5750806fffffffffffffffffffffffffffffffff16826fffffffffffffffffffffffffffffffff16115b15613065576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61306d6106fe565b6040517f601d66f60000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff80861660048301528416602482015273ffffffffffffffffffffffffffffffffffffffff919091169063601d66f690604401600060405180830381600087803b1580156130f057600080fd5b505af1158015613104573d6000803e3d6000fd5b5050604080516fffffffffffffffffffffffffffffffff8088168252861660208201527f4d4981437d0211f9e6843eb024d9ada1fa3a99514d4343d4aece106dd11524bb9350019050612f50565b600061315c6106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa1580156131a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131ca9190614598565b509150508015158215151461088e576131e16106fe565b6040517fffd9b907000000000000000000000000000000000000000000000000000000008152831515600482015273ffffffffffffffffffffffffffffffffffffffff919091169063ffd9b90790602401600060405180830381600087803b15801561324c57600080fd5b505af1158015613260573d6000803e3d6000fd5b505050507ff97ba903470ff3262b4a68a938fe81def401bac1bd742169d2e8d5c4ed2185d382604051613297911515815260200190565b60405180910390a15050565b73ffffffffffffffffffffffffffffffffffffffff81166132f0576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6132f86106fe565b6040517fb55bb84b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152919091169063b55bb84b90602401600060405180830381600087803b15801561336357600080fd5b505af1158015613377573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841681527fdac9a7995cbc0c0f01d78970fb6fd0b52fe0fe869eb6635e65cc1b5682b8325c925060200190505b60405180910390a150565b60006133d36106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801561341d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134419190614598565b925050508064ffffffffff168264ffffffffff161461088e578164ffffffffff168164ffffffffff16118061347c57508164ffffffffff1642115b156134b3576040517fe4eaca7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134bb6106fe565b6040517feb9606df00000000000000000000000000000000000000000000000000000000815264ffffffffff8416600482015273ffffffffffffffffffffffffffffffffffffffff919091169063eb9606df90602401600060405180830381600087803b15801561352b57600080fd5b505af115801561353f573d6000803e3d6000fd5b505060405164ffffffffff851681527f0b3eb35ba750e7a7e4d26c9eee3d226f4e1f68c5568f4a3d051c94b241b02ac092506020019050613297565b73ffffffffffffffffffffffffffffffffffffffff82166135c8576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82163b61362e576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016124cd565b61363781612af6565b60015473ffffffffffffffffffffffffffffffffffffffff8381169116148061369257506136636106fe565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b806136b7575060015473ffffffffffffffffffffffffffffffffffffffff8281169116145b806136f457506136c56106fe565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b1561372b576040517f727de5c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517fff68754300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063ff68754390602401602060405180830381865afa15801561379c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137c0919061457b565b73ffffffffffffffffffffffffffffffffffffffff1614158061388c57506001546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063fdd5764590602401602060405180830381865afa15801561384f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613873919061457b565b73ffffffffffffffffffffffffffffffffffffffff1614155b156138c3576040517f21ff1e7100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f6e98e5e400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152848116602483015290911690636e98e5e490604401600060405180830381600087803b15801561393857600080fd5b505af115801561394c573d6000803e3d6000fd5b50505050613964826003613faf90919063ffffffff16565b508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4bcbefaef68b99503d502f5a6abe7bca2b183ab8ac55457013c77d084ebd130560405160405180910390a35050565b60005460ff1615613a30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016124cd565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612acc3390565b6001546040517fdc2b21c100000000000000000000000000000000000000000000000000000000815260ff8316600482015273ffffffffffffffffffffffffffffffffffffffff9091169063dc2b21c190602401600060405180830381600087803b158015613af157600080fd5b505af1158015613b05573d6000803e3d6000fd5b505060405160ff841681527f73caacd705657a7d283e48ecf288b73bc517e3aea1bbc9da2fd54a979e8aa950925060200190506133be565b73ffffffffffffffffffffffffffffffffffffffff8116613b8a576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613b926106fe565b6040517fdcf6548200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152919091169063dcf6548290602401600060405180830381600087803b158015613bfd57600080fd5b505af1158015613c11573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841681527f32e53e2e527af8518ae889e5f7e674bc83f7cf68e4cc059aceeaa0e64208b85b925060200190506133be565b6000613c6885856147aa565b6001546040517f172c48c700000000000000000000000000000000000000000000000000000000815260006004820181905292935073ffffffffffffffffffffffffffffffffffffffff9091169063172c48c7906024016040805180830381865afa158015613cdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cff91906147cd565b9150508061ffff168261ffff1614613d6e57613d1a82613fd1565b60025460405161ffff8416815273ffffffffffffffffffffffffffffffffffffffff909116907f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac6509060200160405180910390a25b6001546040517f944ac59f00000000000000000000000000000000000000000000000000000000815261ffff808a1660048301528089166024830152808816604483015280871660648301528516608482015273ffffffffffffffffffffffffffffffffffffffff9091169063944ac59f9060a401600060405180830381600087803b158015613dfd57600080fd5b505af1158015613e11573d6000803e3d6000fd5b505050507f2214a403d5f8d049e52eacca974c6dea01a471e41d6a18903bfaf7dbc709741f878787612710613e4691906147aa565b87613e53886127106147aa565b6040805161ffff96871681529486166020860152928516848401529084166060840152909216608082015290519081900360a00190a150505050505050565b6000826000018281548110613ea957613ea9614726565b9060005260206000200154905092915050565b60008181526001830160205260408120548015613fa5576000613ee06001836147fc565b8554909150600090613ef4906001906147fc565b9050818114613f59576000866000018281548110613f1457613f14614726565b9060005260206000200154905080876000018481548110613f3757613f37614726565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080613f6a57613f6a614813565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610b43565b6000915050610b43565b6000612cc48373ffffffffffffffffffffffffffffffffffffffff8416614296565b6001546002546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015261ffff8416602482015291169063a70bc54290604401600060405180830381600087803b15801561404a57600080fd5b505af115801561405e573d6000803e3d6000fd5b505050506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156140d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140f59190614557565b905060015b818110156106f9576001546040517f172c48c700000000000000000000000000000000000000000000000000000000815260048101839052600091829173ffffffffffffffffffffffffffffffffffffffff9091169063172c48c7906024016040805180830381865afa158015614175573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061419991906147cd565b915091508461ffff168161ffff16111561428c576001546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015261ffff881660248301529091169063a70bc54290604401600060405180830381600087803b15801561422457600080fd5b505af1158015614238573d6000803e3d6000fd5b505060405161ffff8816815273ffffffffffffffffffffffffffffffffffffffff851692507f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650915060200160405180910390a25b50506001016140fa565b60008181526001830160205260408120546142dd57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610b43565b506000610b43565b73ffffffffffffffffffffffffffffffffffffffff8116811461167a57600080fd5b60006020828403121561431957600080fd5b8135612cc4816142e5565b61ffff8116811461167a57600080fd5b6000806040838503121561434757600080fd5b8235614352816142e5565b9150602083013561436281614324565b809150509250929050565b60006020828403121561437f57600080fd5b5035919050565b801515811461167a57600080fd5b600080604083850312156143a757600080fd5b82356143b2816142e5565b9150602083013561436281614386565b600080604083850312156143d557600080fd5b82356143e0816142e5565b91506020830135614362816142e5565b6fffffffffffffffffffffffffffffffff8116811461167a57600080fd5b60006020828403121561442057600080fd5b8135612cc4816143f0565b6000806040838503121561443e57600080fd5b8235614449816143f0565b91506020830135614362816143f0565b60006020828403121561446b57600080fd5b813560ff81168114612cc457600080fd5b64ffffffffff8116811461167a57600080fd5b6000602082840312156144a157600080fd5b8135612cc48161447c565b600080600080600060a086880312156144c457600080fd5b85356144cf81614324565b945060208601356144df81614324565b935060408601356144ef81614324565b925060608601356144ff81614324565b9150608086013561450f81614324565b809150509295509295909350565b60006020828403121561452f57600080fd5b8135612cc481614386565b60006020828403121561454c57600080fd5b8151612cc481614386565b60006020828403121561456957600080fd5b5051919050565b8051612419816142e5565b60006020828403121561458d57600080fd5b8151612cc4816142e5565b6000806000606084860312156145ad57600080fd5b83516145b8816143f0565b60208501519093506145c981614386565b60408501519092506145da8161447c565b809150509250925092565b600080604083850312156145f857600080fd5b8251614603816143f0565b6020840151909250614362816143f0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000602080838503121561465657600080fd5b825167ffffffffffffffff8082111561466e57600080fd5b818501915085601f83011261468257600080fd5b81518181111561469457614694614614565b8060051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f830116810181811085821117156146d7576146d7614614565b6040529182528482019250838101850191888311156146f557600080fd5b938501935b8285101561471a5761470b85614570565b845293850193928501926146fa565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061ffff8083168185168083038211156147a1576147a1614755565b01949350505050565b600061ffff838116908316818110156147c5576147c5614755565b039392505050565b600080604083850312156147e057600080fd5b82516147eb816142e5565b602084015190925061436281614324565b60008282101561480e5761480e614755565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea264697066735822122046c364b67d38a3dd85b57e027716324d90dd1df102f265f0a0e2697babdb3f3b64736f6c634300080a003394525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac6506765745f7669727475616c5f707269636520697320696e636f6e73697374656e74a264697066735822122065f3b04c95ea2ab89846cec3dee695eab8135c091c5e039d8b6ad30d0cb92eb264736f6c634300080a0033"; - -type CurveV1StEthAdapterTestConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: CurveV1StEthAdapterTestConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class CurveV1StEthAdapterTest__factory extends ContractFactory { - constructor(...args: CurveV1StEthAdapterTestConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): CurveV1StEthAdapterTest { - return super.attach(address) as CurveV1StEthAdapterTest; - } - override connect(signer: Signer): CurveV1StEthAdapterTest__factory { - return super.connect(signer) as CurveV1StEthAdapterTest__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): CurveV1StEthAdapterTestInterface { - return new utils.Interface(_abi) as CurveV1StEthAdapterTestInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): CurveV1StEthAdapterTest { - return new Contract( - address, - _abi, - signerOrProvider - ) as CurveV1StEthAdapterTest; - } -} diff --git a/src/types/factories/contracts/test/adapters/CurveV1StETHTest.t.sol/index.ts b/src/types/factories/contracts/test/adapters/CurveV1StETHTest.t.sol/index.ts deleted file mode 100644 index 5bec22be..00000000 --- a/src/types/factories/contracts/test/adapters/CurveV1StETHTest.t.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { CurveV1StEthAdapterTest__factory } from "./CurveV1StEthAdapterTest__factory"; diff --git a/src/types/factories/contracts/test/adapters/LidoV1Adapter.t.sol/LidoV1AdapterTest__factory.ts b/src/types/factories/contracts/test/adapters/LidoV1Adapter.t.sol/LidoV1AdapterTest__factory.ts deleted file mode 100644 index d8cf121e..00000000 --- a/src/types/factories/contracts/test/adapters/LidoV1Adapter.t.sol/LidoV1AdapterTest__factory.ts +++ /dev/null @@ -1,884 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - LidoV1AdapterTest, - LidoV1AdapterTestInterface, -} from "../../../../../contracts/test/adapters/LidoV1Adapter.t.sol/LidoV1AdapterTest"; - -const _abi = [ - { - inputs: [], - name: "LimitIsOverException", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "TokenIsNotInAllowedList", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "onBehalfOf", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "token", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "AddCollateral", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - ], - name: "CloseCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "DecreaseBorrowedAmount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "target", - type: "address", - }, - ], - name: "ExecuteOrder", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "IncreaseBorrowedAmount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "liquidator", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "remainingFunds", - type: "uint256", - }, - ], - name: "LiquidateCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "liquidator", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "remainingFunds", - type: "uint256", - }, - ], - name: "LiquidateExpiredCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "sender", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - indexed: false, - internalType: "address", - name: "referral", - type: "address", - }, - ], - name: "Mock_Submitted", - type: "event", - }, - { - anonymous: false, - inputs: [], - name: "MultiCallFinished", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - ], - name: "MultiCallStarted", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newConfigurator", - type: "address", - }, - ], - name: "NewConfigurator", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "_limit", - type: "uint256", - }, - ], - name: "NewLimit", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "onBehalfOf", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "borrowAmount", - type: "uint256", - }, - { - indexed: false, - internalType: "uint16", - name: "referralCode", - type: "uint16", - }, - ], - name: "OpenCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "token", - type: "address", - }, - ], - name: "TokenDisabled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "token", - type: "address", - }, - ], - name: "TokenEnabled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "oldOwner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "TransferAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "bool", - name: "state", - type: "bool", - }, - ], - name: "TransferAccountAllowed", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "", - type: "address", - }, - ], - name: "log_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "log_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - name: "log_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "int256", - name: "", - type: "int256", - }, - ], - name: "log_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "address", - name: "val", - type: "address", - }, - ], - name: "log_named_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes", - name: "val", - type: "bytes", - }, - ], - name: "log_named_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes32", - name: "val", - type: "bytes32", - }, - ], - name: "log_named_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - ], - name: "log_named_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "string", - name: "val", - type: "string", - }, - ], - name: "log_named_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - ], - name: "log_named_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "log_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "logs", - type: "event", - }, - { - inputs: [], - name: "IS_TEST", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "cft", - outputs: [ - { - internalType: "contract CreditFacadeTestSuite", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditConfigurator", - outputs: [ - { - internalType: "contract CreditConfigurator", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditFacade", - outputs: [ - { - internalType: "contract CreditFacade", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditManager", - outputs: [ - { - internalType: "contract ICreditManagerV2", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "failed", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "lidoV1Adapter", - outputs: [ - { - internalType: "contract LidoV1Adapter", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "lidoV1Gateway", - outputs: [ - { - internalType: "contract LidoV1Gateway", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "lidoV1Mock", - outputs: [ - { - internalType: "contract LidoMock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "setUp", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_LDOV1_01_constructor_sets_correct_params", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_LDOV1_02_submit_and_submitAll_reverts_if_user_has_no_account", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_LDOV1_03_submit_works_correctly", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_LDOV1_04_submitAll_works_correctly", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_LDOV1_05_submit_updates_limit_and_reverts_on_limit_exceeded", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_LDOV1_06_submit_updates_limit_and_reverts_on_limit_exceeded", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "test_LDOV1_07_submit_updates_limit_properly", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "underlying", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x60806040526000805460ff1916600190811790915580546001600160a01b031916737109709ecfa91a80626ff3989d68f67f5b1dd12d17905534801561004457600080fd5b50620430a180620000566000396000f3fe60806040523480156200001157600080fd5b50600436106200014f5760003560e01c8063ba414fa611620000c0578063d9ac9d30116200008b578063f253c55c116200006e578063f253c55c14620002d5578063f9aa028a14620002df578063fa7626d4146200030057600080fd5b8063d9ac9d301462000293578063df51443314620002b457600080fd5b8063ba414fa61462000236578063c12c21c01462000251578063d38122a91462000272578063d8c9e43b146200027c57600080fd5b80635aae774e116200011e5780636f307dc311620001015780636f307dc3146200020157806392540c581462000222578063a8044c5b146200022c57600080fd5b80635aae774e14620001d65780635c09648114620001f757600080fd5b80630913a71f14620001545780630a9254e4146200019f5780632f7a188114620001ab57806338516e0114620001cc575b600080fd5b600954620001759073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b620001a96200030e565b005b600354620001759073ffffffffffffffffffffffffffffffffffffffff1681565b620001a962000d9f565b600754620001759073ffffffffffffffffffffffffffffffffffffffff1681565b620001a9620016db565b600654620001759073ffffffffffffffffffffffffffffffffffffffff1681565b620001a962001dcd565b620001a962001eca565b62000240620023eb565b604051901515815260200162000196565b600254620001759073ffffffffffffffffffffffffffffffffffffffff1681565b620001a962002555565b620001a96200028d36600462005a1c565b62002d43565b600854620001759073ffffffffffffffffffffffffffffffffffffffff1681565b600554620001759073ffffffffffffffffffffffffffffffffffffffff1681565b620001a96200300c565b600454620001759073ffffffffffffffffffffffffffffffffffffffff1681565b600054620002409060ff1681565b6200031a6003620031c3565b6000546040517f67b426450000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff16906367b4264590620003789060069060040162005aa1565b602060405180830381865afa15801562000396573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003bc919062005ada565b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283161790556001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291169063ca669fa790602401600060405180830381600087803b1580156200046757600080fd5b505af11580156200047c573d6000803e3d6000fd5b5050600480546007546040517f3e7c88d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182169381019390935261206c6024840152169250633e7c88d69150604401600060405180830381600087803b158015620004fa57600080fd5b505af11580156200050f573d6000803e3d6000fd5b50506000546040517f67b426450000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff1692506367b426459150620005719060039060040162005aa1565b602060405180830381865afa1580156200058f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005b5919062005ada565b60075460405173ffffffffffffffffffffffffffffffffffffffff90911690620005df90620059e3565b73ffffffffffffffffffffffffffffffffffffffff928316815291166020820152604001604051809103906000f08015801562000620573d6000803e3d6000fd5b50600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283169081179091556002546040519216916200067990620059f1565b73ffffffffffffffffffffffffffffffffffffffff928316815291166020820152604001604051809103906000f080158015620006ba573d6000803e3d6000fd5b50600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169182179055604080517f61d027b300000000000000000000000000000000000000000000000000000000815290516361d027b3916004808201926020929091908290030181865afa15801562000754573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200077a919062005ada565b600a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283161790556001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291169063ca669fa790602401600060405180830381600087803b1580156200082557600080fd5b505af11580156200083a573d6000803e3d6000fd5b5050600480546008546009546040517f7bccacee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283169481019490945281166024840152169250637bccacee9150604401600060405180830381600087803b158015620008ba57600080fd5b505af1158015620008cf573d6000803e3d6000fd5b50505050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000941573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000967919062005ada565b73ffffffffffffffffffffffffffffffffffffffff166326c74fc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015620009b2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620009d8919062005ada565b600a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600754166322301f6e62000a37670de0b6b3a7640000600262005b30565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526004810191909152670de0b6b3a76400006024820152604401600060405180830381600087803b15801562000a9757600080fd5b505af115801562000aac573d6000803e3d6000fd5b50506000546002546040517f88f776a200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff62010000909304831694506388f776a2935062000b2b9260039273f39fd6e51aad88f6f4ce6ab8827279cfffb922669291169060040162005b70565b600060405180830381600087803b15801562000b4657600080fd5b505af115801562000b5b573d6000803e3d6000fd5b5050600154600954604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152600c60448201527f414441505445525f4c49444f000000000000000000000000000000000000000060648201529116925063c657c7189150608401600060405180830381600087803b15801562000c0557600080fd5b505af115801562000c1a573d6000803e3d6000fd5b5050600154600854604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152600c60448201527f474154455741595f4c49444f000000000000000000000000000000000000000060648201529116925063c657c7189150608401600060405180830381600087803b15801562000cc457600080fd5b505af115801562000cd9573d6000803e3d6000fd5b5050600154600754604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152600960448201527f4c49444f5f4d4f434b000000000000000000000000000000000000000000000060648201529116925063c657c71891506084015b600060405180830381600087803b15801562000d8457600080fd5b505af115801562000d99573d6000803e3d6000fd5b50505050565b60005b6002811015620016d85780151562000db96200030e565b60008062000dc6620036ef565b600854919350915062000df690600390849073ffffffffffffffffffffffffffffffffffffffff16600062003ad6565b60007ff532e86a0000000000000000000000000000000000000000000000000000000062000e2e670de0b6b3a7640000600262005b30565b604051602481019190915273c4375b7de8af5a38a93548eb8453a498222c4ff26044820152606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529050831562001144576009546008546000546040517f67b42645000000000000000000000000000000000000000000000000000000008152620010549373ffffffffffffffffffffffffffffffffffffffff9081169381169273f39fd6e51aad88f6f4ce6ab8827279cfffb9226692879262010000909204909116906367b426459062000f669060039060040162005aa1565b602060405180830381865afa15801562000f84573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000faa919062005ada565b6000546040517f67b426450000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff16906367b4264590620010089060069060040162005aa1565b602060405180830381865afa15801562001026573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200104c919062005ada565b600162003af4565b6009546200113e9073ffffffffffffffffffffffffffffffffffffffff167fea99c2a600000000000000000000000000000000000000000000000000000000620010a8670de0b6b3a7640000600262005b30565b604051602401620010bb91815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262003b10565b620013f1565b6009546008546000546040517f67b42645000000000000000000000000000000000000000000000000000000008152620012bc9373ffffffffffffffffffffffffffffffffffffffff9081169381169273f39fd6e51aad88f6f4ce6ab8827279cfffb9226692879262010000909204909116906367b4264590620011ce9060039060040162005aa1565b602060405180830381865afa158015620011ec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001212919062005ada565b6000546040517f67b426450000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff16906367b4264590620012709060069060040162005aa1565b602060405180830381865afa1580156200128e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620012b4919062005ada565b600162003c42565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b1580156200133c57600080fd5b505af115801562001351573d6000803e3d6000fd5b505060095473ffffffffffffffffffffffffffffffffffffffff16915063ea99c2a690506200138a670de0b6b3a7640000600262005b30565b6040518263ffffffff1660e01b8152600401620013a991815260200190565b6020604051808303816000875af1158015620013c9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013ef919062005bae565b505b6200141f6003846200140d670de0b6b3a7640000600262005b30565b62001419908662005bc8565b62003c55565b600062001436670de0b6b3a7640000600262005b30565b670de0b6b3a76400006200144c81600262005b30565b62001458919062005b30565b62001464919062005be2565b6007546040517f7a28fb880000000000000000000000000000000000000000000000000000000081526004810183905291925060009173ffffffffffffffffffffffffffffffffffffffff90911690637a28fb8890602401602060405180830381865afa158015620014da573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001500919062005bae565b6007546040517f192084510000000000000000000000000000000000000000000000000000000081526004810183905291925060009173ffffffffffffffffffffffffffffffffffffffff90911690631920845190602401602060405180830381865afa15801562001576573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200159c919062005bae565b6007546040517f7a28fb880000000000000000000000000000000000000000000000000000000081526004810183905291925060009173ffffffffffffffffffffffffffffffffffffffff90911690637a28fb8890602401602060405180830381865afa15801562001612573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001638919062005bae565b9050620016486006888362003c55565b600754620016819073ffffffffffffffffffffffffffffffffffffffff166200167b670de0b6b3a7640000600262005b30565b62003c77565b600854620016ac90600390899073ffffffffffffffffffffffffffffffffffffffff16600162003ad6565b620016ba6006600162003c97565b50505050505050508080620016cf9062005c1e565b91505062000da2565b50565b620016e5620036ef565b50506001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b1580156200176757600080fd5b505af11580156200177c573d6000803e3d6000fd5b505060095473ffffffffffffffffffffffffffffffffffffffff1691506327ea6f2b9050620017b5670de0b6b3a7640000600262005b30565b6040518263ffffffff1660e01b8152600401620017d491815260200190565b600060405180830381600087803b158015620017ef57600080fd5b505af115801562001804573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b1580156200188857600080fd5b505af11580156200189d573d6000803e3d6000fd5b50506009546040517fea99c2a6000000000000000000000000000000000000000000000000000000008152670de0b6b3a7640000600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ea99c2a691506024016020604051808303816000875af11580156200191a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001940919062005bae565b50600954604080517fa4d66daf000000000000000000000000000000000000000000000000000000008152905162001a1f9273ffffffffffffffffffffffffffffffffffffffff169163a4d66daf9160048083019260209291908290030181865afa158015620019b4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620019da919062005bae565b670de0b6b3a76400006040518060400160405280601d81526020017f4e6577206c696d6974207761732073657420696e636f72726563746c7900000081525062003cb3565b6001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f2bfcdce800000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063c31eb0e090602401600060405180830381600087803b15801562001aab57600080fd5b505af115801562001ac0573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b15801562001b4457600080fd5b505af115801562001b59573d6000803e3d6000fd5b505060095473ffffffffffffffffffffffffffffffffffffffff16915063ea99c2a6905062001b92670de0b6b3a7640000600162005c5a565b6040518263ffffffff1660e01b815260040162001bb191815260200190565b6020604051808303816000875af115801562001bd1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001bf7919062005bae565b506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f2bfcdce800000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063c31eb0e090602401600060405180830381600087803b15801562001c8457600080fd5b505af115801562001c99573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa791506024015b600060405180830381600087803b15801562001d1e57600080fd5b505af115801562001d33573d6000803e3d6000fd5b50505050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166330bebac96040518163ffffffff1660e01b81526004016020604051808303816000875af115801562001da7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620016d8919062005bae565b6001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f61081c1500000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063c31eb0e090602401600060405180830381600087803b15801562001e5957600080fd5b505af115801562001e6e573d6000803e3d6000fd5b50506009546040517f27ea6f2b0000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff90911692506327ea6f2b915060240162000d69565b600954604080517fc1fe3e48000000000000000000000000000000000000000000000000000000008152905162001fb99273ffffffffffffffffffffffffffffffffffffffff169163c1fe3e489160048083019260209291908290030181865afa15801562001f3d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001f63919062005ada565b60075460408051808201909152601781527f7374455448206164647265737320696e636f7272656374000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff9091169062003d00565b600954604080517f3fc8cef30000000000000000000000000000000000000000000000000000000081529051620021309273ffffffffffffffffffffffffffffffffffffffff1691633fc8cef39160048083019260209291908290030181865afa1580156200202c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002052919062005ada565b6000546040517f67b426450000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff16906367b4264590620020b09060039060040162005aa1565b602060405180830381865afa158015620020ce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620020f4919062005ada565b6040518060400160405280601681526020017f57455448206164647265737320696e636f72726563740000000000000000000081525062003d00565b600954604080517f61d027b300000000000000000000000000000000000000000000000000000000815290516200230a9273ffffffffffffffffffffffffffffffffffffffff16916361d027b39160048083019260209291908290030181865afa158015620021a3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620021c9919062005ada565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002237573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200225d919062005ada565b73ffffffffffffffffffffffffffffffffffffffff166326c74fc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015620022a8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620022ce919062005ada565b6040518060400160405280601a81526020017f5472656173757279206164647265737320696e636f727265637400000000000081525062003d00565b600954604080517fa4d66daf0000000000000000000000000000000000000000000000000000000081529051620023e99273ffffffffffffffffffffffffffffffffffffffff169163a4d66daf9160048083019260209291908290030181865afa1580156200237d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620023a3919062005bae565b680ad78ebc5ac62000006040518060400160405280601681526020017f4c696d69742069732073657420696e636f72726563740000000000000000000081525062003cb3565b565b60008054610100900460ff16156200240c5750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620025505760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091620024b4917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc49160800162005ca4565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052620024ee9162005cee565b6000604051808303816000865af19150503d80600081146200252d576040519150601f19603f3d011682016040523d82523d6000602084013e62002532565b606091505b50915050808060200190518101906200254c919062005d0c565b9150505b919050565b60005b6002811015620016d8578015156200256f6200030e565b6001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b158015620025ef57600080fd5b505af115801562002604573d6000803e3d6000fd5b50506009546040517f27ea6f2b0000000000000000000000000000000000000000000000000000000081526b033b2e3c9fd0803ce8000000600482015273ffffffffffffffffffffffffffffffffffffffff90911692506327ea6f2b9150602401600060405180830381600087803b1580156200268057600080fd5b505af115801562002695573d6000803e3d6000fd5b50505050600080620026a6620036ef565b6008549193509150620026d690600390849073ffffffffffffffffffffffffffffffffffffffff16600062003ad6565b60007ff532e86a000000000000000000000000000000000000000000000000000000006200270660018462005bc8565b604051602481019190915273c4375b7de8af5a38a93548eb8453a498222c4ff26044820152606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290508315620028c0576009546008546000546040517f67b426450000000000000000000000000000000000000000000000000000000081526200283e9373ffffffffffffffffffffffffffffffffffffffff9081169381169273f39fd6e51aad88f6f4ce6ab8827279cfffb9226692879262010000909204909116906367b426459062000f669060039060040162005aa1565b6009546040805160048152602481019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f30bebac900000000000000000000000000000000000000000000000000000000179052620028ba9173ffffffffffffffffffffffffffffffffffffffff169062003b10565b62002a7b565b6009546008546000546040517f67b426450000000000000000000000000000000000000000000000000000000081526200294a9373ffffffffffffffffffffffffffffffffffffffff9081169381169273f39fd6e51aad88f6f4ce6ab8827279cfffb9226692879262010000909204909116906367b4264590620011ce9060039060040162005aa1565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b158015620029ca57600080fd5b505af1158015620029df573d6000803e3d6000fd5b50505050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166330bebac96040518163ffffffff1660e01b81526004016020604051808303816000875af115801562002a53573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002a79919062005bae565b505b62002a8a600384600162003c55565b600062002aa1670de0b6b3a7640000600262005b30565b670de0b6b3a764000062002ab760018662005bc8565b62002ac3919062005b30565b62002acf919062005be2565b6007546040517f7a28fb880000000000000000000000000000000000000000000000000000000081526004810183905291925060009173ffffffffffffffffffffffffffffffffffffffff90911690637a28fb8890602401602060405180830381865afa15801562002b45573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002b6b919062005bae565b6007546040517f192084510000000000000000000000000000000000000000000000000000000081526004810183905291925060009173ffffffffffffffffffffffffffffffffffffffff90911690631920845190602401602060405180830381865afa15801562002be1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002c07919062005bae565b6007546040517f7a28fb880000000000000000000000000000000000000000000000000000000081526004810183905291925060009173ffffffffffffffffffffffffffffffffffffffff90911690637a28fb8890602401602060405180830381865afa15801562002c7d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002ca3919062005bae565b905062002cb36006888362003c55565b60075462002cde9073ffffffffffffffffffffffffffffffffffffffff166200167b60018962005bc8565b60085462002d0990600390899073ffffffffffffffffffffffffffffffffffffffff16600162003ad6565b62002d176003600062003c97565b62002d256006600162003c97565b5050505050505050808062002d3a9062005c1e565b91505062002558565b600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600060048201819052602482018190526044820152606481019290925273ffffffffffffffffffffffffffffffffffffffff169063491cc7c290608401600060405180830381600087803b15801562002dc557600080fd5b505af115801562002dda573d6000803e3d6000fd5b505050507fe1e1c8251499b303aefb01cf84a5ce22a95911c20ce2f3f5ae670441a6353d828160405162002e1091815260200190565b60405180910390a16001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b15801562002e9857600080fd5b505af115801562002ead573d6000803e3d6000fd5b50506009546040517f27ea6f2b0000000000000000000000000000000000000000000000000000000081526004810185905273ffffffffffffffffffffffffffffffffffffffff90911692506327ea6f2b9150602401600060405180830381600087803b15801562002f1e57600080fd5b505af115801562002f33573d6000803e3d6000fd5b50505050620016d8600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a4d66daf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002fa9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002fcf919062005bae565b826040518060400160405280601381526020017f496e636f7272656374206c696d6974207365740000000000000000000000000081525062003cb3565b6001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb5ba4c4d00000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063c31eb0e090602401600060405180830381600087803b1580156200309857600080fd5b505af1158015620030ad573d6000803e3d6000fd5b505060095473ffffffffffffffffffffffffffffffffffffffff16915063ea99c2a69050620030e6670de0b6b3a7640000600262005b30565b6040518263ffffffff1660e01b81526004016200310591815260200190565b6020604051808303816000875af115801562003125573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200314b919062005bae565b506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb5ba4c4d00000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063c31eb0e09060240162001d03565b600181600a811115620031da57620031da62005a36565b1480620031fb5750600381600a811115620031f957620031f962005a36565b145b62003267576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f556e737570706f7274656420746f6b656e00000000000000000000000000000060448201526064015b60405180910390fd5b6040516200327590620059ff565b604051809103906000f08015801562003292573d6000803e3d6000fd5b50600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff166201000073ffffffffffffffffffffffffffffffffffffffff9384168102919091179182905590041663b36ba208620032fc670de0b6b3a7640000606462005b30565b6040518263ffffffff1660e01b81526004016000604051808303818588803b1580156200332857600080fd5b505af11580156200333d573d6000803e3d6000fd5b5050505050600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681604051620033749062005a0d565b6200338192919062005d30565b604051809103906000f0801580156200339e573d6000803e3d6000fd5b50600580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169182179055604080517f6f307dc30000000000000000000000000000000000000000000000000000000081529051636f307dc3916004808201926020929091908290030181865afa15801562003438573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200345e919062005ada565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600554604080517fc12c21c00000000000000000000000000000000000000000000000000000000081529051919092169163c12c21c09160048083019260209291908290030181865afa158015620034fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003521919062005ada565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600554604080517f2f7a188100000000000000000000000000000000000000000000000000000000815290519190921691632f7a18819160048083019260209291908290030181865afa158015620035be573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620035e4919062005ada565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600554604080517ff9aa028a0000000000000000000000000000000000000000000000000000000081529051919092169163f9aa028a9160048083019260209291908290030181865afa15801562003681573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620036a7919062005ada565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b6000806000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635f7c9bd06040518163ffffffff1660e01b8152600401602060405180830381865afa15801562003762573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003788919062005bae565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015291925073ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b1580156200380957600080fd5b505af11580156200381e573d6000803e3d6000fd5b50506003546040517f6c8f225d0000000000000000000000000000000000000000000000000000000081526004810185905273f39fd6e51aad88f6f4ce6ab8827279cfffb92266602482015260646044820181905260009082015273ffffffffffffffffffffffffffffffffffffffff9091169250636c8f225d9150608401600060405180830381600087803b158015620038b857600080fd5b505af1158015620038cd573d6000803e3d6000fd5b50506002546040517fe958b70400000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063e958b7049150602401602060405180830381865afa15801562003954573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200397a919062005ada565b6006546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80841660048301529295509116906370a0823190602401602060405180830381865afa158015620039ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003a13919062005bae565b600154604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301526024820192909252600d60448201527f6372656469744163636f756e74000000000000000000000000000000000000006064820152929450169063c657c71890608401600060405180830381600087803b15801562003ab857600080fd5b505af115801562003acd573d6000803e3d6000fd5b50505050509091565b62000d99848484846040518060200160405280600081525062003d79565b62003b0787878787878787600162003eb6565b50505050505050565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b15801562003b9057600080fd5b505af115801562003ba5573d6000803e3d6000fd5b50506003546040805180820190915273ffffffffffffffffffffffffffffffffffffffff868116825260208201869052909116925063caa5c23f915062003bec90620045a7565b6040518263ffffffff1660e01b815260040162003c0a919062005da8565b600060405180830381600087803b15801562003c2557600080fd5b505af115801562003c3a573d6000803e3d6000fd5b505050505050565b62003b0787878787878787600162004610565b62003c728383836040518060200160405280600081525062004afe565b505050565b62003c9382826040518060200160405280600081525062004c33565b5050565b62003c9382826040518060200160405280600081525062004cd8565b81831462003c72577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf35838160405162003cec919062005e54565b60405180910390a162003c72838362004df7565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161462003c72577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf35838160405162003d65919062005e54565b60405180910390a162003c72838362004f09565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1662003e00576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f74657374546f6b656e5375697465206973206e6f74207365740000000000000060448201526064016200325e565b6000546040517f67b4264500000000000000000000000000000000000000000000000000000000815262003eaf9162010000900473ffffffffffffffffffffffffffffffffffffffff16906367b426459062003e6190899060040162005aa1565b602060405180830381865afa15801562003e7f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003ea5919062005ada565b8585858562005035565b5050505050565b6002546040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152600092169063e958b70490602401602060405180830381865afa15801562003f28573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003f4e919062005ada565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000918716906370a0823190602401602060405180830381865afa15801562003fc1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003fe7919062005bae565b600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481019290925260006024830181905260448301819052606483015291925073ffffffffffffffffffffffffffffffffffffffff9091169063491cc7c290608401600060405180830381600087803b1580156200406e57600080fd5b505af115801562004083573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff8b1692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a2821562004201576001546002546003546040805173ffffffffffffffffffffffffffffffffffffffff92831660248201528d831660448201528a831660648201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6084808301919091528251808303909101815260a490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f46fb371d0000000000000000000000000000000000000000000000000000000017905290517fbd6af4340000000000000000000000000000000000000000000000000000000081529382169363bd6af43493620041cc9316919060040162005e9d565b600060405180830381600087803b158015620041e757600080fd5b505af1158015620041fc573d6000803e3d6000fd5b505050505b60015460025460035460405173ffffffffffffffffffffffffffffffffffffffff9384169363bd6af434938116927f6ce4074a00000000000000000000000000000000000000000000000000000000926200426792909116908f908e9060240162005ed6565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b9092168252620042fa929160040162005e9d565b600060405180830381600087803b1580156200431557600080fd5b505af11580156200432a573d6000803e3d6000fd5b5050600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526024810192909252600060448301819052606483015273ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b158015620043b057600080fd5b505af1158015620043c5573d6000803e3d6000fd5b505060035460405173ffffffffffffffffffffffffffffffffffffffff8d8116945090911691507faed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab0390600090a382156200459b5760015460025460035473ffffffffffffffffffffffffffffffffffffffff9283169263bd6af434928116917f46fb371d0000000000000000000000000000000000000000000000000000000091168d8b8a62004496577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62004499565b60015b60405173ffffffffffffffffffffffffffffffffffffffff9485166024820152928416604484015292166064820152608481019190915260a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b909216825262004566929160040162005e9d565b600060405180830381600087803b1580156200458157600080fd5b505af115801562004596573d6000803e3d6000fd5b505050505b50505050505050505050565b604080516001808252818301909252606091816020015b604080518082019091526000815260606020820152815260200190600190039081620045be579050509050818160008151811062004600576200460062005f49565b6020026020010181905250919050565b6002546040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152600092169063e958b70490602401602060405180830381865afa15801562004682573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620046a8919062005ada565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000918716906370a0823190602401602060405180830381865afa1580156200471b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004741919062005bae565b9050821562004879576001546002546040805173ffffffffffffffffffffffffffffffffffffffff8c811660248301528d811660448301528a811660648301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6084808401919091528351808403909101815260a490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f46fb371d0000000000000000000000000000000000000000000000000000000017905291517fbd6af4340000000000000000000000000000000000000000000000000000000081529382169363bd6af43493620048449316919060040162005e9d565b600060405180830381600087803b1580156200485f57600080fd5b505af115801562004874573d6000803e3d6000fd5b505050505b60015460025460405173ffffffffffffffffffffffffffffffffffffffff9283169263bd6af4349216907f6ce4074a0000000000000000000000000000000000000000000000000000000090620048d9908d908f908e9060240162005ed6565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b90921682526200496c929160040162005e9d565b600060405180830381600087803b1580156200498757600080fd5b505af11580156200499c573d6000803e3d6000fd5b5050600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526024810192909252600060448301819052606483015273ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b15801562004a2257600080fd5b505af115801562004a37573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff808d1693508b1691507faed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab0390600090a382156200459b5760015460025473ffffffffffffffffffffffffffffffffffffffff9182169163bd6af43491167f46fb371d000000000000000000000000000000000000000000000000000000008b8d8b8a62004496577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62004499565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1662004b85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f74657374546f6b656e5375697465206973206e6f74207365740000000000000060448201526064016200325e565b6000546040517f67b4264500000000000000000000000000000000000000000000000000000000815262000d999162010000900473ffffffffffffffffffffffffffffffffffffffff16906367b426459062004be690889060040162005aa1565b602060405180830381865afa15801562004c04573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004c2a919062005ada565b84848462005273565b73ffffffffffffffffffffffffffffffffffffffff83163182811462004ccc577f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f8260405160200162004c87919062005f78565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905262004cc391879062005fe1565b60405180910390a15b62000d99818462004df7565b600554604080517f406c8e2f000000000000000000000000000000000000000000000000000000008152905162003c729273ffffffffffffffffffffffffffffffffffffffff169163406c8e2f9160048083019260209291908290030181865afa15801562004d4b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004d71919062005ada565b73ffffffffffffffffffffffffffffffffffffffff166367b42645856040518263ffffffff1660e01b815260040162004dab919062005aa1565b602060405180830381865afa15801562004dc9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004def919062005ada565b83836200542e565b80821462003c93577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f5060405162004e859060208082526022908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b75696e60408201527f745d000000000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a88160405162004ebe91906200601b565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a88260405162004ef7919062006067565b60405180910390a162003c93620057a4565b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462003c93577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f5060405162004fc39060208082526025908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b61646460408201527f726573735d000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f8160405162004ffc9190620060a5565b60405180910390a17f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f8260405162004ef7919062006107565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301526000919087169063dd62ed3e90604401602060405180830381865afa158015620050ae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620050d4919062005bae565b905082811462005267577f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f828773ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200514c573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262005194919081019062006145565b604051602001620051a79291906200621c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052620051e391889062005fe1565b60405180910390a160408051818152600a818301527f207370656e6465723a2000000000000000000000000000000000000000000000606082015273ffffffffffffffffffffffffffffffffffffffff8616602082015290517f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f9181900360800190a15b62003c3a818462004df7565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600091908616906370a0823190602401602060405180830381865afa158015620052e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200530a919062005bae565b905082811462005422577f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f828673ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562005382573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620053ca919081019062006145565b604051602001620053dd929190620062a2565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526200541991879062005fe1565b60405180910390a15b62003eaf818462004df7565b6002546040517fe958b70400000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015260009173ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015620054b2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620054d8919062005ada565b6002546040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015292935060009290911690638991b2f190602401602060405180830381865afa1580156200554f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005575919062005bae565b6002546040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529091169063f67c5bd090602401602060405180830381865afa158015620055e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200560c919062005bae565b16151590508315158114801590620056245750825115155b1562005664577f0b2e13ff20ac7b474198655583edf70dedd2c1dc980e329c4fbb2fc0748b796b836040516200565b919062006328565b60405180910390a15b62003eaf841515821515148673ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015620056bb573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262005703919081019062006145565b8362005745576040518060400160405280601981526020017f206e6f7420656e61626c656420617320657870656374656420000000000000008152506200577c565b6040518060400160405280601981526020017f20656e61626c6564206173206e6f7420657870657463746564000000000000008152505b6040516020016200578f9291906200633d565b60405160208183030381529060405262005927565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620058f95760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000009282019290925260016060820152600091907f70ca10bbd0dbfd9020a9f4b13402c16cb120705e0d1c0aeab10fa353ae586fc490608001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905262005876929160200162005ca4565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052620058b09162005cee565b6000604051808303816000865af19150503d8060008114620058ef576040519150601f19603f3d011682016040523d82523d6000602084013e620058f4565b606091505b505050505b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055565b8162003c93577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf3583816040516200595e919062005e54565b60405180910390a162003c938280620016d8577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f50604051620059d19060208082526017908201527f4572726f723a20417373657274696f6e204661696c6564000000000000000000604082015260600190565b60405180910390a1620016d8620057a4565b610fe5806200639d83390190565b6123c3806200738283390190565b617a51806200974583390190565b62031ed6806201119683390190565b60006020828403121562005a2f57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600b811062005a9d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b6020810162005ab1828462005a65565b92915050565b73ffffffffffffffffffffffffffffffffffffffff81168114620016d857600080fd5b60006020828403121562005aed57600080fd5b815162005afa8162005ab7565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562005b6b5762005b6b62005b01565b500290565b6060810162005b80828662005a65565b73ffffffffffffffffffffffffffffffffffffffff8085166020840152808416604084015250949350505050565b60006020828403121562005bc157600080fd5b5051919050565b60008282101562005bdd5762005bdd62005b01565b500390565b60008262005c19577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141562005c535762005c5362005b01565b5060010190565b6000821982111562005c705762005c7062005b01565b500190565b60005b8381101562005c9257818101518382015260200162005c78565b8381111562000d995750506000910152565b7fffffffff00000000000000000000000000000000000000000000000000000000831681526000825162005ce081600485016020870162005c75565b919091016004019392505050565b6000825162005d0281846020870162005c75565b9190910192915050565b60006020828403121562005d1f57600080fd5b8151801515811462005afa57600080fd5b73ffffffffffffffffffffffffffffffffffffffff831681526040810162005afa602083018462005a65565b6000815180845262005d7681602086016020860162005c75565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101562005e46578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00185528151805173ffffffffffffffffffffffffffffffffffffffff16845287015187840187905262005e328785018262005d5c565b958801959350509086019060010162005dcf565b509098975050505050505050565b60408152600560408201527f4572726f72000000000000000000000000000000000000000000000000000000606082015260806020820152600062005afa608083018462005d5c565b73ffffffffffffffffffffffffffffffffffffffff8316815260406020820152600062005ece604083018462005d5c565b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff80861683528085166020840152506060604083015262005f11606083018462005d5c565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000825162005f8c81846020870162005c75565b7f496e636f7272656374204554482062616c616e6365206f6e206163636f756e749201918252507f3a200000000000000000000000000000000000000000000000000000000000006020820152602201919050565b60408152600062005ff6604083018562005d5c565b905073ffffffffffffffffffffffffffffffffffffffff831660208301529392505050565b6040815260006200605960408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b905082602083015292915050565b6040815260006200605960408301600a81527f2020202041637475616c00000000000000000000000000000000000000000000602082015260400190565b604081526000620060e360408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b905073ffffffffffffffffffffffffffffffffffffffff8316602083015292915050565b604081526000620060e360408301600a81527f2020202041637475616c00000000000000000000000000000000000000000000602082015260400190565b6000602082840312156200615857600080fd5b815167ffffffffffffffff808211156200617157600080fd5b818401915084601f8301126200618657600080fd5b8151818111156200619b576200619b62005f1a565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715620061e457620061e462005f1a565b81604052828152876020848701011115620061fe57600080fd5b6200621183602083016020880162005c75565b979650505050505050565b600083516200623081846020880162005c75565b7f496e636f7272656374200000000000000000000000000000000000000000000090830190815283516200626c81600a84016020880162005c75565b7f20416c6c6f77616e6365206f6e206163636f756e743a20200000000000000000600a9290910191820152602201949350505050565b60008351620062b681846020880162005c75565b7f496e636f727265637420000000000000000000000000000000000000000000009083019081528351620062f281600a84016020880162005c75565b7f2062616c616e6365206f6e206163636f756e743a200000000000000000000000600a9290910191820152601f01949350505050565b60208152600062005afa602083018462005d5c565b7f546f6b656e2000000000000000000000000000000000000000000000000000008152600083516200637781600685016020880162005c75565b8351908301906200639081600684016020880162005c75565b0160060194935050505056fe60c060405234801561001057600080fd5b50604051610fe5380380610fe58339818101604052604081101561003357600080fd5b5080516020909101516001600160a01b038216158061005957506001600160a01b038116155b1561007757604051635919af9760e11b815260040160405180910390fd5b6001600160a01b039081166080521660a05260805160a051610ec761011e6000396000818161022501528181610b030152610baf015260008181610301015281816104360152818161059f01528181610629015281816106bf0152818161072c01528181610799015281816108270152818161089f0152818161090c01528181610979015281816109e601528181610c1001528181610cfe0152610e070152610ec76000f3fe6080604052600436106100ec5760003560e01c80637a28fb881161008a578063d5002f2e11610059578063d5002f2e1461034f578063dd62ed3e14610364578063f532e86a146103ac578063f5eb42dc146103f257600080fd5b80637a28fb88146102b057806395d89b41146102da578063c1fe3e48146102ef578063ced72f871461032357600080fd5b8063313ce567116100c6578063313ce567146101d357806337cfdaca146101fe5780633fc8cef31461021357806370a082311461027057600080fd5b806306fdde03146100f857806318160ddd1461018257806319208451146101a957600080fd5b366100f357005b600080fd5b34801561010457600080fd5b5061010d610432565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561014757818101518382015260200161012f565b50505050905090810190601f1680156101745780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561018e57600080fd5b5061019761059b565b60408051918252519081900360200190f35b3480156101b557600080fd5b50610197600480360360208110156101cc57600080fd5b5035610625565b3480156101df57600080fd5b506101e86106bb565b6040805160ff9092168252519081900360200190f35b34801561020a57600080fd5b50610197610728565b34801561021f57600080fd5b506102477f000000000000000000000000000000000000000000000000000000000000000081565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561027c57600080fd5b506101976004803603602081101561029357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610795565b3480156102bc57600080fd5b50610197600480360360208110156102d357600080fd5b5035610823565b3480156102e657600080fd5b5061010d61089b565b3480156102fb57600080fd5b506102477f000000000000000000000000000000000000000000000000000000000000000081565b34801561032f57600080fd5b50610338610908565b6040805161ffff9092168252519081900360200190f35b34801561035b57600080fd5b50610197610975565b34801561037057600080fd5b506101976004803603604081101561038757600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166109e2565b3480156103b857600080fd5b50610197600480360360408110156103cf57600080fd5b508035906020013573ffffffffffffffffffffffffffffffffffffffff16610aad565b3480156103fe57600080fd5b506101976004803603602081101561041557600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610e03565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801561049f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405260208110156104e657600080fd5b810190808051604051939291908464010000000082111561050657600080fd5b90830190602082018581111561051b57600080fd5b825164010000000081118282018810171561053557600080fd5b82525081516020918201929091019080838360005b8381101561056257818101518382015260200161054a565b50505050905090810190601f16801561058f5780820380516001836020036101000a031916815260200191505b50604052505050905090565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610608573d6000803e3d6000fd5b505050506040513d602081101561061e57600080fd5b5051919050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166319208451836040518263ffffffff1660e01b815260040180828152602001915050602060405180830381865afa15801561069d573d6000803e3d6000fd5b505050506040513d60208110156106b357600080fd5b505192915050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610608573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166337cfdaca6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610608573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381865afa15801561069d573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637a28fb88836040518263ffffffff1660e01b815260040180828152602001915050602060405180830381865afa15801561069d573d6000803e3d6000fd5b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801561049f573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ced72f876040518163ffffffff1660e01b8152600401602060405180830381865afa158015610608573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d5002f2e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610608573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e84846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381865afa158015610a8e573d6000803e3d6000fd5b505050506040513d6020811015610aa457600080fd5b50519392505050565b604080517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101849052905160009173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016916323b872dd91606480820192602092909190829003018187875af1158015610b50573d6000803e3d6000fd5b505050506040513d6020811015610b6657600080fd5b5050604080517f2e1a7d4d00000000000000000000000000000000000000000000000000000000815260048101859052905173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001691632e1a7d4d91602480830192600092919082900301818387803b158015610bf657600080fd5b505af1158015610c0a573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a1903eab84846040518363ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038185885af1158015610c9c573d6000803e3d6000fd5b50505050506040513d6020811015610cb357600080fd5b5051604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905191925073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169163a9059cbb91339184916370a082319160248083019260209291908290030181865afa158015610d53573d6000803e3d6000fd5b505050506040513d6020811015610d6957600080fd5b5051604080517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff9093166004840152602483019190915251604480830192602092919082900301816000875af1158015610de4573d6000803e3d6000fd5b505050506040513d6020811015610dfa57600080fd5b50909392505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f5eb42dc836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381865afa15801561069d573d6000803e3d6000fdfea2646970667358221220eb57e94748a3f053784cffe3296608e83b097fea3cb3a1bfde402824bad506bd64736f6c634300080a00336101606040523480156200001257600080fd5b50604051620023c3380380620023c3833981810160405260408110156200003857600080fd5b50805160209182015160408051632b853d7960e11b81529051929391926001600160a01b0385169263570a7af292600480820193918290030181865afa15801562000087573d6000803e3d6000fd5b505050506040513d60208110156200009e57600080fd5b505160408051630a55006360e21b815290516001600160a01b0390921691632954018c916004808201926020929091908290030181865afa158015620000e8573d6000803e3d6000fd5b505050506040513d6020811015620000ff57600080fd5b505182826001600160a01b03821615806200012157506001600160a01b038116155b156200014057604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038216608081905260408051632f7a188160e01b81529051632f7a1881916004808201926020929091908290030181865afa1580156200018b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001b191906200048a565b6001600160a01b0390811660a05290811660c0526000805460ff19169055821615159050620001f357604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000232573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025891906200048a565b6001600160a01b031660e0816001600160a01b03168152505050600180819055506000826001600160a01b031663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002ba573d6000803e3d6000fd5b505050506040513d6020811015620002d157600080fd5b505160408051630a55006360e21b815290516001600160a01b0390921691632954018c916004808201926020929091908290030181865afa1580156200031b573d6000803e3d6000fd5b505050506040513d60208110156200033257600080fd5b50516040805163183fc7c960e31b815290519192506001600160a01b0384169163c1fe3e48916004808201926020929091908290030181865afa1580156200037e573d6000803e3d6000fd5b505050506040513d60208110156200039557600080fd5b50516001600160a01b039081166101005260408051634c252f9160e01b8152905191831691634c252f91916004808201926020929091908290030181865afa158015620003e6573d6000803e3d6000fd5b505050506040513d6020811015620003fd57600080fd5b50516001600160a01b0390811661012052604080516326c74fc360e01b81529051918316916326c74fc3916004808201926020929091908290030181865afa1580156200044e573d6000803e3d6000fd5b505050506040513d60208110156200046557600080fd5b50516001600160a01b0316610140525050680ad78ebc5ac620000060025550620004bc565b6000602082840312156200049d57600080fd5b81516001600160a01b0381168114620004b557600080fd5b9392505050565b60805160a05160c05160e051610100516101205161014051611dcc620005f760003960008181610368015261123b01526000818161032701528181610a1501526112c601526000818161048c01526112e80152600081816104170152818161082f01528181610bc40152610db801526000818161043e0152818161057c015281816106e50152818161076f01528181610ac001528181610b2d01528181610c8801528181610d1601528181610e7a01528181610ee701528181610f5401528181610fc10152818161114801528181611686015281816117a5015261187f0152600081816102a1015281816114f10152611945015260008181610465015281816109250152818161108d015281816116dc01528181611776015281816118b6015281816119cd01528181611a810152611b2b0152611dcc6000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80637a28fb88116100f9578063c1fe3e4811610097578063d5002f2e11610071578063d5002f2e146104e5578063dd62ed3e146104ed578063ea99c2a614610528578063f5eb42dc1461054557600080fd5b8063c1fe3e4814610487578063ce30bbdb146104ae578063ced72f87146104dd57600080fd5b8063a4d66daf116100d3578063a4d66daf14610409578063a50cf2c814610412578063bd90df7014610439578063c12c21c01461046057600080fd5b80637a28fb88146103dc5780638456cb59146103f957806395d89b411461040157600080fd5b806337cfdaca116101665780635c975abb116101405780635c975abb1461034957806361d027b31461036357806370a082311461038a57806378aa73a4146103bd57600080fd5b806337cfdaca146103125780633f4ba83a1461031a5780633fc8cef31461032257600080fd5b806327ea6f2b116101a257806327ea6f2b1461027d5780632f7a18811461029c57806330bebac9146102ec578063313ce567146102f457600080fd5b806306fdde03146101c957806318160ddd146102465780631920845114610260575b600080fd5b6101d1610578565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561020b5781810151838201526020016101f3565b50505050905090810190601f1680156102385780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61024e6106e1565b60408051918252519081900360200190f35b61024e6004803603602081101561027657600080fd5b503561076b565b61029a6004803603602081101561029357600080fd5b5035610801565b005b6102c37f000000000000000000000000000000000000000000000000000000000000000081565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b61024e610920565b6102fc610abc565b6040805160ff9092168252519081900360200190f35b61024e610b29565b61029a610b96565b6102c37f000000000000000000000000000000000000000000000000000000000000000081565b60005460ff16604080519115158252519081900360200190f35b6102c37f000000000000000000000000000000000000000000000000000000000000000081565b61024e600480360360208110156103a057600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610c84565b6103c5600181565b6040805161ffff9092168252519081900360200190f35b61024e600480360360208110156103f257600080fd5b5035610d12565b61029a610d8a565b6101d1610e76565b61024e60025481565b6102c37f000000000000000000000000000000000000000000000000000000000000000081565b6102c37f000000000000000000000000000000000000000000000000000000000000000081565b6102c37f000000000000000000000000000000000000000000000000000000000000000081565b6102c37f000000000000000000000000000000000000000000000000000000000000000081565b6104b6600f81565b604051808260108111156104cc576104cc611b90565b815260200191505060405180910390f35b6103c5610ee3565b61024e610f50565b61024e6004803603604081101561050357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610fbd565b61024e6004803603602081101561053e57600080fd5b5035611088565b61024e6004803603602081101561055b57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611144565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156105e5573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052602081101561062c57600080fd5b810190808051604051939291908464010000000082111561064c57600080fd5b90830190602082018581111561066157600080fd5b825164010000000081118282018810171561067b57600080fd5b82525081516020918201929091019080838360005b838110156106a8578181015183820152602001610690565b50505050905090810190601f1680156106d55780820380516001836020036101000a031916815260200191505b50604052505050905090565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561074e573d6000803e3d6000fd5b505050506040513d602081101561076457600080fd5b5051919050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166319208451836040518263ffffffff1660e01b815260040180828152602001915050602060405180830381865afa1580156107e3573d6000803e3d6000fd5b505050506040513d60208110156107f957600080fd5b505192915050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561088b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108af9190611bbf565b6108e5576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040805182815290517fe1e1c8251499b303aefb01cf84a5ce22a95911c20ce2f3f5ae670441a6353d829181900360200190a150565b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e958b704336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381865afa1580156109af573d6000803e3d6000fd5b505050506040513d60208110156109c557600080fd5b5051604080517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015291519293506000927f0000000000000000000000000000000000000000000000000000000000000000909216916370a08231916024808201926020929091908290030181865afa158015610a63573d6000803e3d6000fd5b505050506040513d6020811015610a7957600080fd5b505190506001811115610ab7577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01610ab4818360016111d2565b92505b505090565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561074e573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166337cfdaca6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561074e573d6000803e3d6000fd5b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa158015610c20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c449190611bbf565b610c7a576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c8261132e565b565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381865afa1580156107e3573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637a28fb88836040518263ffffffff1660e01b815260040180828152602001915050602060405180830381865afa1580156107e3573d6000803e3d6000fd5b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015610e14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e389190611bbf565b610e6e576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c82611414565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156105e5573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ced72f876040518163ffffffff1660e01b8152600401602060405180830381865afa15801561074e573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d5002f2e6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561074e573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e84846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381865afa158015611069573d6000803e3d6000fd5b505050506040513d602081101561107f57600080fd5b50519392505050565b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e958b704336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381865afa158015611117573d6000803e3d6000fd5b505050506040513d602081101561112d57600080fd5b5051905061113d838260006111d2565b9392505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f5eb42dc836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381865afa1580156107e3573d6000803e3d6000fd5b6000600254841115611210576040517f2bfcdce800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280548590039055604080516024810186905273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166044808301919091528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff532e86a000000000000000000000000000000000000000000000000000000001790526113109084907f0000000000000000000000000000000000000000000000000000000000000000907f0000000000000000000000000000000000000000000000000000000000000000906001876114d4565b806020019051602081101561132457600080fd5b5051949350505050565b60005460ff1661139f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff1615611481576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401611396565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586113ea3390565b60606000803373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461163d576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301528916906370a0823190602401602060405180830381865afa158015611582573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a69190611be1565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152919350908816906370a0823190602401602060405180830381865afa158015611616573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163a9190611be1565b90505b8415611739576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561172057600080fd5b505af1158015611734573d6000803e3d6000fd5b505050505b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a906117cf9033907f0000000000000000000000000000000000000000000000000000000000000000908b90600401611c23565b6000604051808303816000875af11580156117ee573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526118349190810190611ccb565b92508415611913576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301528981166044830152600160648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156118fa57600080fd5b505af115801561190e573d6000803e3d6000fd5b505050505b61192189898985858961192d565b50509695505050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614611a2e576040517f654a9eda00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528681166024830152858116604483015260648201859052608482018490527f0000000000000000000000000000000000000000000000000000000000000000169063654a9eda9060a401600060405180830381600087803b158015611a1157600080fd5b505af1158015611a25573d6000803e3d6000fd5b50505050611b88565b8015611ade576040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015286811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b158015611ac557600080fd5b505af1158015611ad9573d6000803e3d6000fd5b505050505b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015285811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015611b6f57600080fd5b505af1158015611b83573d6000803e3d6000fd5b505050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060208284031215611bd157600080fd5b8151801515811461113d57600080fd5b60006020828403121561076457600080fd5b60005b83811015611c0e578181015183820152602001611bf6565b83811115611c1d576000848401525b50505050565b600073ffffffffffffffffffffffffffffffffffffffff8086168352808516602084015250606060408301528251806060840152611c68816080850160208701611bf3565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01691909101608001949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060208284031215611cdd57600080fd5b815167ffffffffffffffff80821115611cf557600080fd5b818401915084601f830112611d0957600080fd5b815181811115611d1b57611d1b611c9c565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715611d6157611d61611c9c565b81604052828152876020848701011115611d7a57600080fd5b611d8b836020830160208801611bf3565b97965050505050505056fea264697066735822122079bac7f44887eaec4590e7806d653fc9efee2d669150a5d8913350e0b70db90e64736f6c634300080a003360806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d00011790553480156200003a57600080fd5b506040805161018081019091526000908060c081018060018152604080518082018252600381526244414960e81b6020828101919091528301526012908201526305f5e100606082015260800160018152602001600081525081526020016040518060c001604052806002600a811115620000b957620000b962000b78565b815260408051808201825260048152635553444360e01b6020828101919091528301526006908201526305f5e100606082015260800160018152602001600081525081526020016040518060c001604052806003600a81111562000121576200012162000b78565b815260408051808201825260048152630ae8aa8960e31b602082810191909152830152601290820152644a817c8000606082015260800160028152602001600081525081526020016040518060c001604052806004600a8111156200018a576200018a62000b78565b815260408051808201825260048152634c494e4b60e01b6020828101919091528301526012908201526359682f00606082015260800160018152602001600081525081526020016040518060c001604052806005600a811115620001f257620001f262000b78565b815260408051808201825260048152631554d11560e21b602082810191909152830152601290820152633b023380606082015260800160018152602001600081525081526020016040518060c001604052806006600a8111156200025a576200025a62000b78565b815260408051808201825260058152640e6e88aa8960db1b602082810191909152830152601290820152644cd588640060608201526080016003815260200160009052905260408051610140810190915290915060009080608081018060078152602001604051806040016040528060048152602001636344414960e01b8152508152602001601260ff1681526020016305f5e100815260200160048081111562000309576200030962000b78565b8152602001600181525081526020016040518060c001604052806008600a81111562000339576200033962000b78565b81526040805180820182526005815264635553444360d81b6020828101919091528301526006908201526305f5e100606082015260800160048152602001600281525081526020016040518060c001604052806009600a811115620003a257620003a262000b78565b8152604080518082018252600581526418d554d11560da1b602082810191909152830152601290820152633b023380606082015260800160048152602001600581525081526020016040518060c00160405280600a808111156200040a576200040a62000b78565b81526040805180820182526005815264634c494e4b60d81b6020828101919091528301526012908201526359682f00606082015260800160048152602001600490529052905060005b600681101562000496576200048183826006811062000476576200047662000b8e565b6020020151620004db565b806200048d8162000ba4565b91505062000453565b5060005b6004811015620004d257620004bd82826004811062000476576200047662000b8e565b80620004c98162000ba4565b9150506200049a565b50505062000d14565b6000600282608001516004811115620004f857620004f862000b78565b14156200054e576040516200050d9062000a8c565b604051809103906000f0801580156200052a573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b03831617905590506200071e565b60038260800151600481111562000569576200056962000b78565b1415620005a4576040516200057e9062000a9a565b604051809103906000f0801580156200059b573d6000803e3d6000fd5b5090506200071e565b600182608001516004811115620005bf57620005bf62000b78565b1415620005f157816020015182602001518360400151604051620005e39062000aa8565b6200057e9392919062000c1e565b6004826080015160048111156200060c576200060c62000b78565b1415620006be576000600260008460a00151600a81111562000632576200063262000b78565b600a81111562000646576200064662000b78565b815260200190815260200160002060009054906101000a90046001600160a01b0316905082602001518360200151846040015183604051620006889062000ab6565b62000697949392919062000c5b565b604051809103906000f080158015620006b4573d6000803e3d6000fd5b509150506200071e565b60405162461bcd60e51b815260206004820152602b60248201527f74657374546f6b656e53756974653a204372656174696e6720756e6b6e6f776e60448201526a20746f6b656e207479706560a81b606482015260840160405180910390fd5b60005460208301516040516318caf8e360e31b8152620100009092046001600160a01b03169163c657c718916200075b9185919060040162000ca9565b600060405180830381600087803b1580156200077657600080fd5b505af11580156200078b573d6000803e3d6000fd5b50505050600082606001516008604051620007a69062000ac4565b91825260ff166020820152604001604051809103906000f080158015620007d1573d6000803e3d6000fd5b50905081600260008560000151600a811115620007f257620007f262000b78565b600a81111562000806576200080662000b78565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055508260600151600560008560000151600a8111156200085a576200085a62000b78565b600a8111156200086e576200086e62000b78565b8152602080820192909252604090810160009081209390935585516001600160a01b03861684526008909252909120805460ff1916600183600a811115620008ba57620008ba62000b78565b02179055508260800151600360008560000151600a811115620008e157620008e162000b78565b600a811115620008f557620008f562000b78565b81526020810191909152604001600020805460ff1916600183600481111562000922576200092262000b78565b0217905550604080518082019091526001600160a01b0380841682528281166020808401918252600780546001810182556000918252945160029095027fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688810180549686166001600160a01b031997881617905592517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c689909301805493909416929094169190911790915584015184519091600491600a811115620009eb57620009eb62000b78565b600a811115620009ff57620009ff62000b78565b8152602001908152602001600020908051906020019062000a2292919062000ad2565b5080600660008560000151600a81111562000a415762000a4162000b78565b600a81111562000a555762000a5562000b78565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550505050565b610ab1806200285183390190565b611224806200330283390190565b611758806200452683390190565b6117098062005c7e83390190565b6106ca806200738783390190565b82805462000ae09062000cd7565b90600052602060002090601f01602090048101928262000b04576000855562000b4f565b82601f1062000b1f57805160ff191683800117855562000b4f565b8280016001018555821562000b4f579182015b8281111562000b4f57825182559160200191906001019062000b32565b5062000b5d92915062000b61565b5090565b5b8082111562000b5d576000815560010162000b62565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600060001982141562000bc757634e487b7160e01b600052601160045260246000fd5b5060010190565b6000815180845260005b8181101562000bf65760208185018101518683018201520162000bd8565b8181111562000c09576000602083870101525b50601f01601f19169290920160200192915050565b60608152600062000c33606083018662000bce565b828103602084015262000c47818662000bce565b91505060ff83166040830152949350505050565b60808152600062000c70608083018762000bce565b828103602084015262000c84818762000bce565b60ff95909516604084015250506001600160a01b039190911660609091015292915050565b6001600160a01b038316815260406020820181905260009062000ccf9083018462000bce565b949350505050565b600181811c9082168062000cec57607f821691505b6020821081141562000d0e57634e487b7160e01b600052602260045260246000fd5b50919050565b611b2d8062000d246000396000f3fe6080604052600436106101635760003560e01c80638eb86e8b116100c0578063c6c3bbe611610074578063d051a62211610059578063d051a62214610490578063eebab8ef146104b0578063fa7626d4146104d057600080fd5b8063c6c3bbe614610433578063c74912d21461045357600080fd5b80639b140a85116100a55780639b140a85146103e6578063b36ba20814610406578063ba414fa61461040e57600080fd5b80638eb86e8b1461038357806398cdaadf146103a357600080fd5b80636a72bde71161011757806388327863116100fc578063883278631461030857806388f776a2146103365780638a3177a31461035657600080fd5b80636a72bde7146102c45780636ca42ae3146102e657600080fd5b8063440864fa11610148578063440864fa146102025780634b57b0be1461022f57806367b426451461028157600080fd5b806304bc3b1c1461016f57806310c7f0b9146101b557600080fd5b3661016a57005b600080fd5b34801561017b57600080fd5b5061019f61018a3660046116f6565b60086020526000908152604090205460ff1681565b6040516101ac9190611742565b60405180910390f35b3480156101c157600080fd5b506101d56101d036600461175c565b6104ea565b6040805173ffffffffffffffffffffffffffffffffffffffff9384168152929091166020830152016101ac565b34801561020e57600080fd5b5061022261021d366004611784565b610530565b6040516101ac91906117cb565b34801561023b57600080fd5b5060015461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101ac565b34801561028d57600080fd5b5061025c61029c366004611784565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156102d057600080fd5b506102e46102df36600461181c565b6105ca565b005b3480156102f257600080fd5b506102fb610730565b6040516101ac919061186b565b34801561031457600080fd5b506103286103233660046118d4565b6107b5565b6040519081526020016101ac565b34801561034257600080fd5b506102e461035136600461190b565b610888565b34801561036257600080fd5b50610328610371366004611784565b60056020526000908152604090205481565b34801561038f57600080fd5b506102e461039e366004611954565b6108b9565b3480156103af57600080fd5b5061025c6103be366004611784565b60066020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156103f257600080fd5b506102e4610401366004611993565b610a73565b6102e4610b22565b34801561041a57600080fd5b50610423610ba0565b60405190151581526020016101ac565b34801561043f57600080fd5b506102e461044e3660046119b3565b610d00565b34801561045f57600080fd5b5061048361046e366004611784565b60036020526000908152604090205460ff1681565b6040516101ac91906119d3565b34801561049c57600080fd5b506103286104ab36600461190b565b610daf565b3480156104bc57600080fd5b506102e46104cb366004611954565b610e8b565b3480156104dc57600080fd5b506000546104239060ff1681565b600781815481106104fa57600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff91821692501682565b60046020526000908152604090208054610549906119e7565b80601f0160208091040260200160405190810160405280929190818152602001828054610575906119e7565b80156105c25780601f10610597576101008083540402835291602001916105c2565b820191906000526020600020905b8154815290600101906020018083116105a557829003601f168201915b505050505081565b6000546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152620100009092049091169063ca669fa790602401600060405180830381600087803b15801561063e57600080fd5b505af1158015610652573d6000803e3d6000fd5b505050506002600085600a81111561066c5761066c611713565b600a81111561067d5761067d611713565b8152602081019190915260409081016000205490517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490529091169063095ea7b3906044016020604051808303816000875af1158015610705573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107299190611a3b565b5050505050565b60606007805480602002602001604051908101604052809291908181526020016000905b828210156107ac5760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff908116835260019182015416828401529083529092019101610754565b50505050905090565b60006002600084600a8111156107cd576107cd611713565b600a8111156107de576107de611713565b8152602081019190915260409081016000205490517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152909116906370a0823190602401602060405180830381865afa15801561085d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108819190611a5d565b9392505050565b6108b48383837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6105ca565b505050565b60016003600085600a8111156108d1576108d1611713565b600a8111156108e2576108e2611713565b815260208101919091526040016000205460ff16600481111561090757610907611713565b14610999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f74657374546f6b656e53756974653a20547279696e6720746f206275726e206160448201527f206e6f6e2d6e6f726d616c20746f6b656e00000000000000000000000000000060648201526084015b60405180910390fd5b6002600084600a8111156109af576109af611713565b600a8111156109c0576109c0611713565b8152602081019190915260409081016000205490517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526024820184905290911690639dc29fac906044015b6020604051808303816000875af1158015610a49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6d9190611a3b565b50505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604081205460ff169081600a811115610aaf57610aaf611713565b1415610b17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f20746f6b656e2077697468207375636820616464726573730000000000006044820152606401610990565b610a6d818484610888565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015610b8c57600080fd5b505af1158015610729573d6000803e3d6000fd5b60008054610100900460ff1615610bc05750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610cfb5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610c65917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc491608001611a76565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052610c9d91611abe565b6000604051808303816000865af19150503d8060008114610cda576040519150601f19603f3d011682016040523d82523d6000602084013e610cdf565b606091505b5091505080806020019051810190610cf79190611a3b565b9150505b919050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604081205460ff169081600a811115610d3c57610d3c611713565b1415610da4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f20746f6b656e2077697468207375636820616464726573730000000000006044820152606401610990565b610a6d818484610e8b565b60006002600085600a811115610dc757610dc7611713565b600a811115610dd857610dd8611713565b8152602081019190915260409081016000205490517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301529091169063dd62ed3e90604401602060405180830381865afa158015610e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e839190611a5d565b949350505050565b60026003600085600a811115610ea357610ea3611713565b600a811115610eb457610eb4611713565b815260208101919091526040016000205460ff166004811115610ed957610ed9611713565b1415610ff6576000546040517fc88a5e6d000000000000000000000000000000000000000000000000000000008152306004820152602481018390526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c88a5e6d90604401600060405180830381600087803b158015610f5657600080fd5b505af1158015610f6a573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015610fd857600080fd5b505af1158015610fec573d6000803e3d6000fd5b505050505061163c565b600380600085600a81111561100d5761100d611713565b600a81111561101e5761101e611713565b815260208101919091526040016000205460ff16600481111561104357611043611713565b14156111aa576000546040517fc88a5e6d000000000000000000000000000000000000000000000000000000008152306004820152602481018390526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c88a5e6d90604401600060405180830381600087803b1580156110c057600080fd5b505af11580156110d4573d6000803e3d6000fd5b505050506002600084600a8111156110ee576110ee611713565b600a8111156110ff576110ff611713565b8152602081019190915260409081016000205490517fa1903eab00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a1903eab90839060240160206040518083038185885af115801561117f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906111a49190611a5d565b5061163c565b60046003600085600a8111156111c2576111c2611713565b600a8111156111d3576111d3611713565b815260208101919091526040016000205460ff1660048111156111f8576111f8611713565b141561148f5760006002600085600a81111561121657611216611713565b600a81111561122757611227611713565b815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c49190611ada565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600860205260409020549091506112fb9060ff163084610e8b565b8073ffffffffffffffffffffffffffffffffffffffff1663095ea7b36002600087600a81111561132d5761132d611713565b600a81111561133e5761133e611713565b81526020810191909152604090810160002054905160e083901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602481018590526044016020604051808303816000875af11580156113c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e69190611a3b565b506002600085600a8111156113fd576113fd611713565b600a81111561140e5761140e611713565b8152602081019190915260409081016000205490517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810184905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f1990604401600060405180830381600087803b158015610fd857600080fd5b60016003600085600a8111156114a7576114a7611713565b600a8111156114b8576114b8611713565b815260208101919091526040016000205460ff1660048111156114dd576114dd611713565b14156115b4576002600084600a8111156114f9576114f9611713565b600a81111561150a5761150a611713565b8152602081019190915260409081016000205490517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f19906044016020604051808303816000875af1158015611590573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a49190611a3b565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f74657374546f6b656e53756974653a20547279696e6720746f207472616e736660448201527f657220756e6b6e6f776e20746f6b656e000000000000000000000000000000006064820152608401610990565b6002600084600a81111561165257611652611713565b600a81111561166357611663611713565b8152602081019190915260409081016000205490517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490529091169063a9059cbb90604401610a2a565b73ffffffffffffffffffffffffffffffffffffffff811681146116f357600080fd5b50565b60006020828403121561170857600080fd5b8135610881816116d1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60208101600b831061175657611756611713565b91905290565b60006020828403121561176e57600080fd5b5035919050565b8035600b8110610cfb57600080fd5b60006020828403121561179657600080fd5b61088182611775565b60005b838110156117ba5781810151838201526020016117a2565b83811115610a6d5750506000910152565b60208152600082518060208401526117ea81604085016020870161179f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000806080858703121561183257600080fd5b61183b85611775565b9350602085013561184b816116d1565b9250604085013561185b816116d1565b9396929550929360600135925050565b602080825282518282018190526000919060409081850190868401855b828110156118c7578151805173ffffffffffffffffffffffffffffffffffffffff90811686529087015116868501529284019290850190600101611888565b5091979650505050505050565b600080604083850312156118e757600080fd5b6118f083611775565b91506020830135611900816116d1565b809150509250929050565b60008060006060848603121561192057600080fd5b61192984611775565b92506020840135611939816116d1565b91506040840135611949816116d1565b809150509250925092565b60008060006060848603121561196957600080fd5b61197284611775565b92506020840135611982816116d1565b929592945050506040919091013590565b6000806000606084860312156119a857600080fd5b8335611929816116d1565b6000806000606084860312156119c857600080fd5b8335611972816116d1565b602081016005831061175657611756611713565b600181811c908216806119fb57607f821691505b60208210811415611a35577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600060208284031215611a4d57600080fd5b8151801515811461088157600080fd5b600060208284031215611a6f57600080fd5b5051919050565b7fffffffff000000000000000000000000000000000000000000000000000000008316815260008251611ab081600485016020870161179f565b919091016004019392505050565b60008251611ad081846020870161179f565b9190910192915050565b600060208284031215611aec57600080fd5b8151610881816116d156fea264697066735822122010fe735ed069aca27931edce4ba2ff14ec7886bf21b0eea685a884f9200fb49e64736f6c634300080a003360c0604052600d60808190526c2bb930b83832b21022ba3432b960991b60a090815261002e916000919061007a565b50604080518082019091526004808252630ae8aa8960e31b602090920191825261005a9160019161007a565b506002805460ff1916601217905534801561007457600080fd5b5061014e565b82805461008690610113565b90600052602060002090601f0160209004810192826100a857600085556100ee565b82601f106100c157805160ff19168380011785556100ee565b828001600101855582156100ee579182015b828111156100ee5782518255916020019190600101906100d3565b506100fa9291506100fe565b5090565b5b808211156100fa57600081556001016100ff565b600181811c9082168061012757607f821691505b6020821081141561014857634e487b7160e01b600052602260045260246000fd5b50919050565b6109548061015d6000396000f3fe6080604052600436106100cb5760003560e01c806340c10f1911610074578063a9059cbb1161004e578063a9059cbb14610225578063d0e30db014610245578063dd62ed3e1461024d57600080fd5b806340c10f19146101c357806370a08231146101e357806395d89b411461021057600080fd5b806323b872dd116100a557806323b872dd146101575780632e1a7d4d14610177578063313ce5671461019757600080fd5b806306fdde03146100df578063095ea7b31461010a57806318160ddd1461013a57600080fd5b366100da576100d8610285565b005b600080fd5b3480156100eb57600080fd5b506100f46102e0565b6040516101019190610703565b60405180910390f35b34801561011657600080fd5b5061012a61012536600461079f565b61036e565b6040519015158152602001610101565b34801561014657600080fd5b50475b604051908152602001610101565b34801561016357600080fd5b5061012a6101723660046107c9565b6103e7565b34801561018357600080fd5b506100d8610192366004610805565b6105fe565b3480156101a357600080fd5b506002546101b19060ff1681565b60405160ff9091168152602001610101565b3480156101cf57600080fd5b506100d86101de36600461079f565b6106a4565b3480156101ef57600080fd5b506101496101fe36600461081e565b60036020526000908152604090205481565b34801561021c57600080fd5b506100f46106e2565b34801561023157600080fd5b5061012a61024036600461079f565b6106ef565b6100d8610285565b34801561025957600080fd5b50610149610268366004610839565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102a490849061089b565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102ed906108b3565b80601f0160208091040260200160405190810160405280929190818152602001828054610319906108b3565b80156103665780601f1061033b57610100808354040283529160200191610366565b820191906000526020600020905b81548152906001019060200180831161034957829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103d69086815260200190565b60405180910390a350600192915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561041957600080fd5b73ffffffffffffffffffffffffffffffffffffffff8416331480159061048f575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105175773ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020548211156104d157600080fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915281208054849290610511908490610907565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061054c908490610907565b909155505073ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260408120805484929061058690849061089b565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516105ec91815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561061a57600080fd5b3360009081526003602052604081208054839290610639908490610907565b9091555050604051339082156108fc029083906000818181858888f1935050505015801561066b573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260036020526040812080548392906106d990849061089b565b90915550505050565b600180546102ed906108b3565b60006106fc3384846103e7565b9392505050565b600060208083528351808285015260005b8181101561073057858101830151858201604001528201610714565b81811115610742576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461079a57600080fd5b919050565b600080604083850312156107b257600080fd5b6107bb83610776565b946020939093013593505050565b6000806000606084860312156107de57600080fd5b6107e784610776565b92506107f560208501610776565b9150604084013590509250925092565b60006020828403121561081757600080fd5b5035919050565b60006020828403121561083057600080fd5b6106fc82610776565b6000806040838503121561084c57600080fd5b61085583610776565b915061086360208401610776565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156108ae576108ae61086c565b500190565b600181811c908216806108c757607f821691505b60208210811415610901577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000828210156109195761091961086c565b50039056fea26469706673582212206ec943fa4e3b70d8fca6c25b6aa26fa18e8f8952ce3bc4d5afcb443bf3097c0564736f6c634300080a003360806040526000600255600060035534801561001a57600080fd5b506111fa8061002a6000396000f3fe60806040526004361061016e5760003560e01c80637a28fb88116100cb578063bdd17e1c1161007f578063dd62ed3e11610059578063dd62ed3e146103ee578063ee7a7c0414610441578063f5eb42dc1461046157600080fd5b8063bdd17e1c146103ad578063cdb9a21c146103c3578063d5002f2e146103d957600080fd5b8063a1903eab116100b0578063a1903eab1461035a578063a457c2d71461036d578063a9059cbb1461038d57600080fd5b80637a28fb88146102f457806395d89b411461031457600080fd5b806323b872dd1161012257806337cfdaca1161010757806337cfdaca1461020d57806339509351146102b457806370a08231146102d457600080fd5b806323b872dd14610278578063313ce5671461029857600080fd5b806318160ddd1161015357806318160ddd1461020d578063192084511461023057806322301f6e1461025057600080fd5b806306fdde0314610185578063095ea7b3146101dd57600080fd5b366101805761017d6000610481565b50005b600080fd5b34801561019157600080fd5b5060408051808201909152601781527f4c6971756964207374616b656420457468657220322e3000000000000000000060208201525b6040516101d49190610f63565b60405180910390f35b3480156101e957600080fd5b506101fd6101f8366004610fff565b610545565b60405190151581526020016101d4565b34801561021957600080fd5b5061022261055b565b6040519081526020016101d4565b34801561023c57600080fd5b5061022261024b366004611029565b61056b565b34801561025c57600080fd5b5061027661026b366004611042565b600391909155600255565b005b34801561028457600080fd5b506101fd610293366004611064565b6105ab565b3480156102a457600080fd5b50604051601281526020016101d4565b3480156102c057600080fd5b506101fd6102cf366004610fff565b610696565b3480156102e057600080fd5b506102226102ef3660046110a0565b6106d9565b34801561030057600080fd5b5061022261030f366004611029565b61070e565b34801561032057600080fd5b5060408051808201909152600581527f737445544800000000000000000000000000000000000000000000000000000060208201526101c7565b6102226103683660046110a0565b61073a565b34801561037957600080fd5b506101fd610388366004610fff565b610745565b34801561039957600080fd5b506101fd6103a8366004610fff565b6107f9565b3480156103b957600080fd5b5061022260035481565b3480156103cf57600080fd5b5061022260025481565b3480156103e557600080fd5b50610222610806565b3480156103fa57600080fd5b506102226104093660046110bb565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b34801561044d57600080fd5b5061027661045c366004610fff565b610811565b34801561046d57600080fd5b5061022261047c3660046110a0565b61081f565b60003334806104f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f5a45524f5f4445504f534954000000000000000000000000000000000000000060448201526064015b60405180910390fd5b60006104fc8261056b565b9050806105065750805b8160036000828254610518919061111d565b909155506105289050838261084a565b61053383838761093b565b61053d8382610992565b949350505050565b60006105523384846109ea565b50600192915050565b600061056660035490565b905090565b60008061057760035490565b9050806105875750600092915050565b6105a48161059e61059760025490565b8690610b52565b90610b5e565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001602090815260408083203384529091528120548281101561066c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f5452414e534645525f414d4f554e545f455843454544535f414c4c4f57414e4360448201527f450000000000000000000000000000000000000000000000000000000000000060648201526084016104e8565b610677858585610b6a565b61068b85336106868487610bef565b6109ea565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916105529185906106869086610bfb565b73ffffffffffffffffffffffffffffffffffffffff81166000908152602081905260408120546107089061070e565b92915050565b60008061071a60025490565b90508061072a5750600092915050565b6105a48161059e61059760035490565b600061070882610481565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156107e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4445435245415345445f414c4c4f57414e43455f42454c4f575f5a45524f000060448201526064016104e8565b6107ef33856106868487610bef565b5060019392505050565b6000610552338484610b6a565b600061056660025490565b61081b8282610c07565b5050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040812054610708565b73ffffffffffffffffffffffffffffffffffffffff82166108c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4d494e545f544f5f5448455f5a45524f5f41444452455353000000000000000060448201526064016104e8565b80600260008282546108d9919061111d565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205461090e9082610bfb565b73ffffffffffffffffffffffffffffffffffffffff90921660009081526020819052604090209190915550565b6040805183815273ffffffffffffffffffffffffffffffffffffffff83811660208301528516917fed8dd430b1e4bba98e943dc5b157cf7b54d9e12916d6c474ff5733a95001d03b910160405180910390a2505050565b73ffffffffffffffffffffffffffffffffffffffff821660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6109d58461070e565b60405190815260200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff8316610a67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f415050524f56455f46524f4d5f5a45524f5f414444524553530000000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff8216610ae4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f415050524f56455f544f5f5a45524f5f4144445245535300000000000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006105a48284611135565b60006105a48284611172565b6000610b758261056b565b9050610b82848483610d64565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610be191815260200190565b60405180910390a350505050565b60006105a482846111ad565b60006105a4828461111d565b73ffffffffffffffffffffffffffffffffffffffff8216610c84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4255524e5f46524f4d5f5448455f5a45524f5f4144445245535300000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205480821115610d14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4255524e5f414d4f554e545f455843454544535f42414c414e4345000000000060448201526064016104e8565b8160026000828254610d2691906111ad565b90915550610d3690508183610bef565b73ffffffffffffffffffffffffffffffffffffffff9093166000908152602081905260409020929092555050565b73ffffffffffffffffffffffffffffffffffffffff8316610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f5452414e534645525f46524f4d5f5448455f5a45524f5f41444452455353000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff8216610e5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f5452414e534645525f544f5f5448455f5a45524f5f414444524553530000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205480821115610eee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5452414e534645525f414d4f554e545f455843454544535f42414c414e43450060448201526064016104e8565b610ef88183610bef565b73ffffffffffffffffffffffffffffffffffffffff8086166000908152602081905260408082209390935590851681522054610f349083610bfb565b73ffffffffffffffffffffffffffffffffffffffff909316600090815260208190526040902092909255505050565b600060208083528351808285015260005b81811015610f9057858101830151858201604001528201610f74565b81811115610fa2576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ffa57600080fd5b919050565b6000806040838503121561101257600080fd5b61101b83610fd6565b946020939093013593505050565b60006020828403121561103b57600080fd5b5035919050565b6000806040838503121561105557600080fd5b50508035926020909101359150565b60008060006060848603121561107957600080fd5b61108284610fd6565b925061109060208501610fd6565b9150604084013590509250925092565b6000602082840312156110b257600080fd5b6105a482610fd6565b600080604083850312156110ce57600080fd5b6110d783610fd6565b91506110e560208401610fd6565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611130576111306110ee565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561116d5761116d6110ee565b500290565b6000826111a8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000828210156111bf576111bf6110ee565b50039056fea2646970667358221220a5b4f31162ba2b8b3424cef84b31ef91d05a825243602b5fdf758ffb49b8246364736f6c634300080a003360a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a003360c06040523480156200001157600080fd5b506040516200170938038062001709833981016040819052620000349162000266565b8351849084906200004d906003906020850190620000f3565b50805162000063906004906020840190620000f3565b505050620000806200007a6200009d60201b60201c565b620000a1565b60ff9091166080526001600160a01b031660a05250620003479050565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b82805462000101906200030a565b90600052602060002090601f01602090048101928262000125576000855562000170565b82601f106200014057805160ff191683800117855562000170565b8280016001018555821562000170579182015b828111156200017057825182559160200191906001019062000153565b506200017e92915062000182565b5090565b5b808211156200017e576000815560010162000183565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c157600080fd5b81516001600160401b0380821115620001de57620001de62000199565b604051601f8301601f19908116603f0116810190828211818310171562000209576200020962000199565b816040528381526020925086838588010111156200022657600080fd5b600091505b838210156200024a57858201830151818301840152908201906200022b565b838211156200025c5760008385830101525b9695505050505050565b600080600080608085870312156200027d57600080fd5b84516001600160401b03808211156200029557600080fd5b620002a388838901620001af565b95506020870151915080821115620002ba57600080fd5b50620002c987828801620001af565b935050604085015160ff81168114620002e157600080fd5b60608601519092506001600160a01b0381168114620002ff57600080fd5b939692955090935050565b600181811c908216806200031f57607f821691505b602082108114156200034157634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05161138e6200037b600039600081816101f70152818161041f0152610600015260006101a2015261138e6000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80636f307dc3116100b257806395d89b4111610081578063a9059cbb11610066578063a9059cbb146102b5578063dd62ed3e146102c8578063f2fde38b1461030e57600080fd5b806395d89b411461029a578063a457c2d7146102a257600080fd5b80636f307dc3146101f257806370a082311461023e578063715018a6146102745780638da5cb5b1461027c57600080fd5b806323b872dd116100ee57806323b872dd14610188578063313ce5671461019b57806339509351146101cc57806340c10f19146101df57600080fd5b806306fdde0314610120578063095ea7b31461013e57806318160ddd146101615780631e9a695014610173575b600080fd5b610128610321565b604051610135919061112d565b60405180910390f35b61015161014c3660046111c9565b6103b3565b6040519015158152602001610135565b6002545b604051908152602001610135565b6101866101813660046111c9565b6103c9565b005b6101516101963660046111f3565b610491565b60405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610135565b6101516101da3660046111c9565b61057c565b6101866101ed3660046111c9565b6105c5565b6102197f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b61016561024c36600461122f565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610186610691565b60055473ffffffffffffffffffffffffffffffffffffffff16610219565b61012861071e565b6101516102b03660046111c9565b61072d565b6101516102c33660046111c9565b610805565b6101656102d6366004611251565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b61018661031c36600461122f565b610812565b60606003805461033090611284565b80601f016020809104026020016040519081016040528092919081815260200182805461035c90611284565b80156103a95780601f1061037e576101008083540402835291602001916103a9565b820191906000526020600020905b81548152906001019060200180831161038c57829003601f168201915b5050505050905090565b60006103c0338484610942565b50600192915050565b6103d33382610af5565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015610468573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048c91906112d8565b505050565b600061049e848484610ce2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6105718533858403610942565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916103c09185906105c0908690611329565b610942565b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906323b872dd906064016020604051808303816000875af115801561065e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068291906112d8565b5061068d8282610f96565b5050565b60055473ffffffffffffffffffffffffffffffffffffffff163314610712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161055b565b61071c60006110b6565b565b60606004805461033090611284565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156107ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161055b565b6107fb3385858403610942565b5060019392505050565b60006103c0338484610ce2565b60055473ffffffffffffffffffffffffffffffffffffffff163314610893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161055b565b73ffffffffffffffffffffffffffffffffffffffff8116610936576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161055b565b61093f816110b6565b50565b73ffffffffffffffffffffffffffffffffffffffff83166109e4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff8216610a87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8216610b98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015610c4e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290610c8a908490611341565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff8216610e28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610ede576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610f22908490611329565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f8891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161055b565b80600260008282546110259190611329565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152602081905260408120805483929061105f908490611329565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208083528351808285015260005b8181101561115a5785810183015185820160400152820161113e565b8181111561116c576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146111c457600080fd5b919050565b600080604083850312156111dc57600080fd5b6111e5836111a0565b946020939093013593505050565b60008060006060848603121561120857600080fd5b611211846111a0565b925061121f602085016111a0565b9150604084013590509250925092565b60006020828403121561124157600080fd5b61124a826111a0565b9392505050565b6000806040838503121561126457600080fd5b61126d836111a0565b915061127b602084016111a0565b90509250929050565b600181811c9082168061129857607f821691505b602082108114156112d2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156112ea57600080fd5b8151801515811461124a57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561133c5761133c6112fa565b500190565b600082821015611353576113536112fa565b50039056fea26469706673582212203a6db30cd3c097921df4156794aa7973eb848711deeb2cffd7c54a9df1fdb0a564736f6c634300080a003360a060405234801561001057600080fd5b506040516106ca3803806106ca83398101604081905261002f9161006c565b60009190915560ff166080526001805460506001600160501b031991821681179092556004805490911690911790554260028190556003556100a2565b6000806040838503121561007f57600080fd5b82519150602083015160ff8116811461009757600080fd5b809150509250929050565b60805161060e6100bc600039600060d3015261060e6000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80639a6fc8f511610081578063d62ada111161005b578063d62ada11146102dc578063f7a30806146102f4578063feaf968c1461030757600080fd5b80639a6fc8f5146101cd578063bd18ad531461023a578063cd653afc1461024d57600080fd5b806354fd4d50116100b257806354fd4d501461012d57806367e8d83d1461013c5780637284e4161461018e57600080fd5b8063313ce567146100ce5780633fd0875f1461010c575b600080fd5b6100f57f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020015b60405180910390f35b6004546a0100000000000000000000900460ff166040516101039190610441565b60405160018152602001610103565b61018c61014a366004610482565b600480549115156c01000000000000000000000000027fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff909216919091179055565b005b604080518082018252600c81527f7072696365206f7261636c6500000000000000000000000000000000000000006020820152905161010391906104ab565b6102036101db36600461053d565b60015460005460025460035460045469ffffffffffffffffffff948516941691939590929450565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610103565b61018c610248366004610558565b61030f565b61018c61025b366004610579565b6001805469ffffffffffffffffffff9586167fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090911617905560029290925560035560048054919092167fffffffffffffffffffffffffffffffffffffffff00ff00000000000000000000909116176b020000000000000000000000179055565b6102e461035f565b6040519015158152602001610103565b61018c6103023660046105bf565b600055565b610203610385565b600480548291907fffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff166b01000000000000000000000083600281111561035757610357610412565b021790555050565b600454600090610380906b010000000000000000000000900460ff166103d6565b905090565b60008060008060006004600c9054906101000a900460ff16156103a757600080fd5b505060015460005460025460035460045469ffffffffffffffffffff9485169893975091955093509190911690565b600060028260028111156103ec576103ec610412565b14156103f757600080fd5b600182600281111561040b5761040b610412565b1492915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016006831061047c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561049457600080fd5b813580151581146104a457600080fd5b9392505050565b600060208083528351808285015260005b818110156104d8578581018301518582016040015282016104bc565b818111156104ea576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803569ffffffffffffffffffff8116811461053857600080fd5b919050565b60006020828403121561054f57600080fd5b6104a48261051e565b60006020828403121561056a57600080fd5b8135600381106104a457600080fd5b6000806000806080858703121561058f57600080fd5b6105988561051e565b935060208501359250604085013591506105b46060860161051e565b905092959194509250565b6000602082840312156105d157600080fd5b503591905056fea264697066735822122014874f7a973b86501c4c1a8be32490fe902c8f088ee234d25f9b2497e19f9e5264736f6c634300080a003360806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d00011790553480156200003a57600080fd5b5060405162031ed638038062031ed68339810160408190526200005d91620015e8565b81816040516200006d9062001595565b604051809103906000f0801580156200008a573d6000803e3d6000fd5b5050600180546001600160a01b0319166001600160a01b038416908117909155604080516325abd85f60e11b81529051634b57b0be916004808201926020929091908290030181865afa158015620000e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200010c91906200162a565b73c4375b7de8af5a38a93548eb8453a498222c4ff26040516200012f90620015a3565b6001600160a01b03928316815291166020820152604001604051809103906000f08015801562000163573d6000803e3d6000fd5b50600380546001600160a01b0319166001600160a01b039290921691821790556040805163de28735960e01b8152905163de287359916004808201926020929091908290030181865afa158015620001bf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e591906200162a565b604051634910832f60e01b81527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526001600160a01b039190911690634910832f90602401600060405180830381600087803b1580156200023d57600080fd5b505af115801562000252573d6000803e3d6000fd5b50505050600360009054906101000a90046001600160a01b03166001600160a01b031663de2873596040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d091906200162a565b60035460405163f2fde38b60e01b81526001600160a01b03918216600482015291169063f2fde38b90602401600060405180830381600087803b1580156200031757600080fd5b505af11580156200032c573d6000803e3d6000fd5b505060035460015460408051636ca42ae360e01b815290516001600160a01b039384169550638874ff1f94509190921691636ca42ae39160048083019260009291908290030181865afa15801562000388573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620003b29190810190620016c5565b6040518263ffffffff1660e01b8152600401620003d09190620017b6565b600060405180830381600087803b158015620003eb57600080fd5b505af115801562000400573d6000803e3d6000fd5b50505050600360009054906101000a90046001600160a01b03166001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000458573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200047e91906200162a565b600280546001600160a01b0319166001600160a01b039290921691821790556040805163120d150d60e31b81529051639068a868916004808201926020929091908290030181865afa158015620004d9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004ff91906200162a565b600480546001600160a01b0319166001600160a01b0392831617815560025460408051631f94a27560e31b81529051919093169263fca513a892818101926020929091908290030181865afa1580156200055d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200058391906200162a565b600880546001600160a01b0319166001600160a01b0392831617905560025460408051630873769560e01b81529051919092169163087376959160048083019260209291908290030181865afa158015620005e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200060891906200162a565b600780546001600160a01b0319166001600160a01b039283161790556002546040805163c513c9bb60e01b81529051919092169163c513c9bb9160048083019260209291908290030181865afa15801562000667573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200068d91906200162a565b600680546001600160a01b0319166001600160a01b039283161790556001546040516367b4264560e01b81529116906367b4264590620006d29084906004016200184d565b602060405180830381865afa158015620006f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200071691906200162a565b600980546001600160a01b0319166001600160a01b0392831617905560035460408051630a55006360e21b815290519190921691632954018c9160048083019260209291908290030181865afa15801562000775573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200079b91906200162a565b6009546040516001600160a01b0390911690620007b890620015b2565b6001600160a01b03928316815291166020820152604001604051809103906000f080158015620007ec573d6000803e3d6000fd5b50600580546001600160a01b0319166001600160a01b039283169081179091556001549091169063eebab8ef90839062000825620011ec565b6200083290600a62001879565b6040518463ffffffff1660e01b815260040162000852939291906200189b565b600060405180830381600087803b1580156200086d57600080fd5b505af115801562000882573d6000803e3d6000fd5b505060065460055460405163d914cd4b60e01b81526001600160a01b0391821660048201529116925063d914cd4b9150602401600060405180830381600087803b158015620008d057600080fd5b505af1158015620008e5573d6000803e3d6000fd5b5050600f80546001600160801b031916670de0b6b3a76400001790555062000911925050620011ec9050565b6200091e90600a62001879565b600f80546001600160801b03908116600160801b9382168402818117938490556040805160a0810182529184169092178152939092041660208301526000919081016200096b84620012ab565b815260006020820181905260409182018190526005549151929350916001600160a01b039091169083908390620009a290620015c0565b620009b093929190620018c5565b604051809103906000f080158015620009cd573d6000803e3d6000fd5b509050806001600160a01b031663c12c21c06040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a0f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a3591906200162a565b600b60006101000a8154816001600160a01b0302191690836001600160a01b03160217905550806001600160a01b0316632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a9a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ac091906200162a565b600c60006101000a8154816001600160a01b0302191690836001600160a01b03160217905550806001600160a01b031663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000b25573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b4b91906200162a565b600d80546001600160a01b0319166001600160a01b03928316179055600654600b5460405163e26b2f6360e01b8152908316600482015291169063e26b2f6390602401600060405180830381600087803b15801562000ba957600080fd5b505af115801562000bbe573d6000803e3d6000fd5b5050600054600554604080516318caf8e360e31b81526001600160a01b039283166004808301919091526024820192909252604481019190915263141bdbdb60e21b60648201526201000090920416925063c657c7189150608401600060405180830381600087803b15801562000c3457600080fd5b505af115801562000c49573d6000803e3d6000fd5b5050600054600c8054604080516318caf8e360e31b81526001600160a01b039283166004820152602481019190915260448101929092526b43726564697446616361646560a01b606483015262010000909204909116925063c657c7189150608401600060405180830381600087803b15801562000cc657600080fd5b505af115801562000cdb573d6000803e3d6000fd5b5050600054600b54604080516318caf8e360e31b81526001600160a01b0392831660048201526024810191909152600d60448201526c21b932b234ba26b0b730b3b2b960991b60648201526201000090920416925063c657c7189150608401600060405180830381600087803b15801562000d5557600080fd5b505af115801562000d6a573d6000803e3d6000fd5b5050600054600d54604080516318caf8e360e31b81526001600160a01b0392831660048201526024810191909152601260448201527121b932b234ba21b7b73334b3bab930ba37b960711b60648201526201000090920416925063c657c7189150608401600060405180830381600087803b15801562000de957600080fd5b505af115801562000dfe573d6000803e3d6000fd5b50506001546001600160a01b0316915063eebab8ef90508473f39fd6e51aad88f6f4ce6ab8827279cfffb9226662000e35620011ec565b6040518463ffffffff1660e01b815260040162000e55939291906200189b565b600060405180830381600087803b15801562000e7057600080fd5b505af115801562000e85573d6000803e3d6000fd5b50506001546001600160a01b0316915063eebab8ef9050847390f79bf6eb2c4f870365e785982e1f101e93b90662000ebc620011ec565b6040518463ffffffff1660e01b815260040162000edc939291906200189b565b600060405180830381600087803b15801562000ef757600080fd5b505af115801562000f0c573d6000803e3d6000fd5b505060005460405163ca669fa760e01b815273f39fd6e51aad88f6f4ce6ab8827279cfffb922666004820152620100009091046001600160a01b0316925063ca669fa79150602401600060405180830381600087803b15801562000f6f57600080fd5b505af115801562000f84573d6000803e3d6000fd5b5050600954600b5460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529116925063095ea7b391506044016020604051808303816000875af115801562000fdf573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001005919062001989565b5060005460405163ca669fa760e01b81527390f79bf6eb2c4f870365e785982e1f101e93b9066004820152620100009091046001600160a01b03169063ca669fa790602401600060405180830381600087803b1580156200106557600080fd5b505af11580156200107a573d6000803e3d6000fd5b5050600954600b5460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529116925063095ea7b391506044016020604051808303816000875af1158015620010d5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010fb919062001989565b5060025460405163f2fde38b60e01b81527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526001600160a01b039091169063f2fde38b90602401600060405180830381600087803b1580156200115657600080fd5b505af11580156200116b573d6000803e3d6000fd5b505060075460405163f2fde38b60e01b81527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b158015620011c957600080fd5b505af1158015620011de573d6000803e3d6000fd5b5050505050505050620019e1565b600180546040516367b4264560e01b81526000926001600160a01b03909216916367b42645916200122191906004016200184d565b602060405180830381865afa1580156200123f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200126591906200162a565b6009546001600160a01b03908116911614620012955762001290670de0b6b3a764000060c862001879565b905090565b62001290670de0b6b3a7640000614e2062001879565b6040805160c08101825260026080820190815261232860a08301528152815180830183526005815261226060208281019190915282015281518083018352606092600092919082019080600387600a8111156200130c576200130c62001814565b146200131a5760036200131d565b60015b600a81111562001331576200133162001814565b815261206c6020918201529082526040805180820190915260048152611c84818301529101529050612454600a6000858281111562001374576200137462001814565b600a81111562001388576200138862001814565b815260208101919091526040908101600020805461ffff9390931661ffff19909316929092179091558051600480825260a0820190925281816020015b6040805180820190915260008082526020820152815260200190600190039081620013c557905050925060005b818110156200158d57828160048110620014105762001410620019ad565b602002015160200151600a6000858460048110620014325762001432620019ad565b602002015151600a8111156200144c576200144c62001814565b600a81111562001460576200146062001814565b815260208101919091526040908101600020805461ffff191661ffff9390931692909217909155805180820190915260015481906001600160a01b03166367b42645868560048110620014b757620014b7620019ad565b6020020151516040516001600160e01b031960e084901b168152620014e091906004016200184d565b602060405180830381865afa158015620014fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200152491906200162a565b6001600160a01b03168152602001848360048110620015475762001547620019ad565b60200201516020015161ffff168152508482815181106200156c576200156c620019ad565b602002602001018190525080806200158490620019c3565b915050620013f2565b505050919050565b6105e6806200bc5283390190565b62011105806200c23883390190565b6110a7806201d33d83390190565b62013af2806201e3e483390190565b6001600160a01b0381168114620015e557600080fd5b50565b60008060408385031215620015fc57600080fd5b82516200160981620015cf565b6020840151909250600b81106200161f57600080fd5b809150509250929050565b6000602082840312156200163d57600080fd5b81516200164a81620015cf565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156200168c576200168c62001651565b60405290565b604051601f8201601f191681016001600160401b0381118282101715620016bd57620016bd62001651565b604052919050565b60006020808385031215620016d957600080fd5b82516001600160401b0380821115620016f157600080fd5b818501915085601f8301126200170657600080fd5b8151818111156200171b576200171b62001651565b6200172b848260051b0162001692565b818152848101925060069190911b8301840190878211156200174c57600080fd5b928401925b81841015620017ab57604084890312156200176c5760008081fd5b6200177662001667565b84516200178381620015cf565b8152848601516200179481620015cf565b818701528352604093909301929184019162001751565b979650505050505050565b602080825282518282018190526000919060409081850190868401855b828110156200180757815180516001600160a01b0390811686529087015116868501529284019290850190600101620017d3565b5091979650505050505050565b634e487b7160e01b600052602160045260246000fd5b600b81106200184957634e487b7160e01b600052602160045260246000fd5b9052565b602081016200185d82846200182a565b92915050565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161562001896576200189662001863565b500290565b60608101620018ab82866200182a565b6001600160a01b0393909316602082015260400152919050565b6001600160a01b0384811682526060602080840182905285516001600160801b039081169285019290925285810151909116608084015260408086015160a085810152805161010086018190526000949392918301919085906101208801905b808310156200195657845180518816835286015161ffff168683015293850193600192909201919083019062001925565b5060608a01516001600160a01b031660c0890152608090990151151560e088015250909401949094525092949350505050565b6000602082840312156200199c57600080fd5b815180151581146200164a57600080fd5b634e487b7160e01b600052603260045260246000fd5b6000600019821415620019da57620019da62001863565b5060010190565b61a26180620019f16000396000f3fe60806040523480156200001157600080fd5b5060043610620001ad5760003560e01c806362eb33e311620000f5578063ba414fa61162000097578063de287359116200006e578063de2873591462000479578063f9aa028a146200049a578063fa7626d414620004bb57600080fd5b8063ba414fa6146200041c578063c12c21c01462000437578063d46b9330146200045857600080fd5b80637785ff5d11620000cc5780637785ff5d14620003da5780639408b63f14620003e45780639dd55b45146200040557600080fd5b806362eb33e314620003775780636b70b04c14620003985780636f307dc314620003b957600080fd5b80632f7a1881116200015f5780635e813a8b11620001365780635e813a8b146200030c5780635f7c9bd0146200032d57806362186905146200034657600080fd5b80632f7a188114620002be578063406c8e2f14620002df57806354cae56e146200030057600080fd5b80630e42bc5d11620001945780630e42bc5d14620002305780632630c12f14620002565780632954018c146200029d57600080fd5b80630bc772da14620001b25780630c75f80614620001f5575b600080fd5b600f54620001cf906fffffffffffffffffffffffffffffffff1681565b6040516fffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6200021c62000206366004620012dd565b600a6020526000908152604090205461ffff1681565b60405161ffff9091168152602001620001ec565b6200024762000241366004620012dd565b620004c9565b604051620001ec919062001307565b600854620002779073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001620001ec565b600254620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600c54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600154620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200030a6200081f565b005b600454620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200033762000b1a565b604051908152602001620001ec565b600f54620001cf9070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681565b600654620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600554620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600954620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200030a62000c0c565b600e54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200030a6200041636600462001398565b62000fd6565b6200042662001149565b6040519015158152602001620001ec565b600b54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600354620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600754620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600d54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600054620004269060ff1681565b6040805160c08101825260026080820190815261232860a08301528152815180830183526005815261226060208281019190915282015281518083018352606092600092919082019080600387600a8111156200052a576200052a620013c7565b14620005385760036200053b565b60015b600a8111156200054f576200054f620013c7565b815261206c6020918201529082526040805180820190915260048152611c84818301529101529050612454600a60008582811115620005925762000592620013c7565b600a811115620005a657620005a6620013c7565b815260208101919091526040908101600020805461ffff939093167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909316929092179091558051600480825260a0820190925281816020015b60408051808201909152600080825260208201528152602001906001900390816200060057905050925060005b8181101562000817578281600481106200064b576200064b620013f6565b602002015160200151600a60008584600481106200066d576200066d620013f6565b602002015151600a811115620006875762000687620013c7565b600a8111156200069b576200069b620013c7565b81526020810191909152604090810160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff93909316929092179091558051808201909152600154819073ffffffffffffffffffffffffffffffffffffffff166367b426458685600481106200071c576200071c620013f6565b6020020151516040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526200075d919060040162001425565b602060405180830381865afa1580156200077b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007a1919062001467565b73ffffffffffffffffffffffffffffffffffffffff168152602001848360048110620007d157620007d1620013f6565b60200201516020015161ffff16815250848281518110620007f657620007f6620013f6565b602002602001018190525080806200080e90620014b6565b9150506200062d565b505050919050565b6000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16906306447d5690602401600060405180830381600087803b158015620008a457600080fd5b505af1158015620008b9573d6000803e3d6000fd5b5050600b5460405173ffffffffffffffffffffffffffffffffffffffff909116925060009150600190620008ed90620012b3565b73ffffffffffffffffffffffffffffffffffffffff938416815292909116602083015215156040820152606001604051809103906000f08015801562000937573d6000803e3d6000fd5b50600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316908117909155600d546040517f526a41e80000000000000000000000000000000000000000000000000000000081526004810192909252600160248301529091169063526a41e890604401600060405180830381600087803b158015620009dc57600080fd5b505af1158015620009f1573d6000803e3d6000fd5b5050600d5473ffffffffffffffffffffffffffffffffffffffff16915063eb9606df905062000a22426001620014f2565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815264ffffffffff90911660048201526024015b600060405180830381600087803b15801562000a7b57600080fd5b505af115801562000a90573d6000803e3d6000fd5b50505050600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562000aff57600080fd5b505af115801562000b14573d6000803e3d6000fd5b50505050565b600180546040517f67b4264500000000000000000000000000000000000000000000000000000000815260009273ffffffffffffffffffffffffffffffffffffffff909216916367b426459162000b75919060040162001425565b602060405180830381865afa15801562000b93573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000bb9919062001467565b60095473ffffffffffffffffffffffffffffffffffffffff90811691161462000bf65762000bf1670de0b6b3a764000060c86200150d565b905090565b62000bf1670de0b6b3a7640000614e206200150d565b60025460405173ffffffffffffffffffffffffffffffffffffffff9091169062000c3690620012c1565b73ffffffffffffffffffffffffffffffffffffffff90911681526060602082018190526008908201527f446567656e4e4654000000000000000000000000000000000000000000000000608082015260a060408201819052600a908201527f476561722d446567656e0000000000000000000000000000000000000000000060c082015260e001604051809103906000f08015801562000cda573d6000803e3d6000fd5b50600e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283161790556000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015262010000909104909116906306447d5690602401600060405180830381600087803b15801562000d8e57600080fd5b505af115801562000da3573d6000803e3d6000fd5b5050600e546040517ffca3b5aa0000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff909116925063fca3b5aa9150602401600060405180830381600087803b15801562000e2757600080fd5b505af115801562000e3c573d6000803e3d6000fd5b5050600b54600e5460405173ffffffffffffffffffffffffffffffffffffffff92831694509116915060009062000e7390620012b3565b73ffffffffffffffffffffffffffffffffffffffff938416815292909116602083015215156040820152606001604051809103906000f08015801562000ebd573d6000803e3d6000fd5b50600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316908117909155600d546040517f526a41e80000000000000000000000000000000000000000000000000000000081526004810192909252600160248301529091169063526a41e890604401600060405180830381600087803b15801562000f6257600080fd5b505af115801562000f77573d6000803e3d6000fd5b5050600e54600c546040517f4610f6ac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015291169250634610f6ac915060240162000a60565b600081600860405162000fe990620012cf565b91825260ff166020820152604001604051809103906000f08015801562001014573d6000803e3d6000fd5b506000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291925062010000900473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b1580156200109c57600080fd5b505af1158015620010b1573d6000803e3d6000fd5b50506008546040517fe8a97a3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528581166024830152909116925063e8a97a3e9150604401600060405180830381600087803b1580156200112b57600080fd5b505af115801562001140573d6000803e3d6000fd5b50505050505050565b60008054610100900460ff16156200116a5750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620012ae5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000008284015282518083038401815260608301909352600092909162001212917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016200158b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526200124c91620015c9565b6000604051808303816000865af19150503d80600081146200128b576040519150601f19603f3d011682016040523d82523d6000602084013e62001290565b606091505b5091505080806020019051810190620012aa9190620015d7565b9150505b919050565b615e9780620015fc83390190565b6126cf806200749383390190565b6106ca8062009b6283390190565b600060208284031215620012f057600080fd5b8135600b81106200130057600080fd5b9392505050565b602080825282518282018190526000919060409081850190868401855b8281101562001365578151805173ffffffffffffffffffffffffffffffffffffffff16855286015161ffff1686850152928401929085019060010162001324565b5091979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff811681146200139557600080fd5b50565b60008060408385031215620013ac57600080fd5b8235620013b98162001372565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60208101600b831062001461577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000602082840312156200147a57600080fd5b8151620013008162001372565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415620014eb57620014eb62001487565b5060010190565b6000821982111562001508576200150862001487565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562001548576200154862001487565b500290565b6000815160005b8181101562001570576020818501810151868301520162001554565b8181111562001580576000828601525b509290920192915050565b7fffffffff00000000000000000000000000000000000000000000000000000000831681526000620015c160048301846200154d565b949350505050565b60006200130082846200154d565b600060208284031215620015ea57600080fd5b815180151581146200130057600080fdfe6101406040523480156200001257600080fd5b5060405162005e9738038062005e97833981016040819052620000359162000198565b60016000556001600160a01b0383166200006257604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038316608081905260408051636f307dc360e01b81529051636f307dc3916004808201926020929091908290030181865afa158015620000ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d39190620001ea565b6001600160a01b031660a0816001600160a01b031681525050826001600160a01b0316634f0e0ef36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200012b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001519190620001ea565b6001600160a01b0390811660c0529190911660e0819052151561010052151561012052506200020f565b80516001600160a01b03811681146200019357600080fd5b919050565b600080600060608486031215620001ae57600080fd5b620001b9846200017b565b9250620001c9602085016200017b565b915060408401518015158114620001df57600080fd5b809150509250925092565b600060208284031215620001fd57600080fd5b62000208826200017b565b9392505050565b60805160a05160c05160e0516101005161012051615a86620004116000396000818161061101528181612fb5015261481f01526000818161031701528181610dde015281816144f901526146e5015260008181610557015281816146a901526147a901526000818161034b0152818161387d015261392d01526000818161047301528181611bfe0152818161274f0152818161280d0152818161366a01526137dd015260008181610665015281816109d801528181610b0301528181610bd501528181610cdd01528181610e6501528181610fe30152818161114e0152818161120e0152818161132e015281816114510152818161162b01528181611708015281816117e0015281816119e501528181611b1201528181611d9501528181611ed5015281816120040152818161216801528181612290015281816123c601528181612568015281816126390152818161266f0152818161293d01528181612a2101528181612a8a01528181612bde01528181612d2601528181612e6801528181612ec2015281816130a10152818161311b015281816131b401528181613341015281816134c10152818161358a0152818161372f01528181613a1a01528181613b2e01528181613dbb015281816142200152818161432801528181614492015281816148e7015281816149e801528181614aae0152614d8f0152615a866000f3fe6080604052600436106102695760003560e01c8063860aefcf11610153578063c7de38a6116100cb578063dfd594651161007f578063eb9606df11610064578063eb9606df1461081e578063f9eaee0d1461083e578063ffd9b9071461085e57600080fd5b8063dfd59465146107de578063e1f21c67146107fe57600080fd5b8063cff0ab96116100b0578063cff0ab96146106ef578063d9ccbec114610783578063dcf65482146107be57600080fd5b8063c7de38a6146106a7578063caa5c23f146106dc57600080fd5b80639c55a05411610122578063b55bb84b11610107578063b55bb84b14610633578063c12c21c014610653578063c690908a1461068757600080fd5b80639c55a054146105df578063b1836d32146105ff57600080fd5b8063860aefcf146104db5780639408b63f146105455780639b67ab30146105795780639be0536a146105bd57600080fd5b80635d91a0e0116101e65780636d19b486116101b55780637071b7c51161019a5780637071b7c51461049557806379c0ef91146104a857806382871ace146104c857600080fd5b80636d19b486146104415780636f307dc31461046157600080fd5b80635d91a0e0146103e85780635f73fbec146103fb578063601d66f61461040e5780636c8f225d1461042e57600080fd5b80633d9287fa1161023d5780635019e20a116102225780635019e20a1461039257806354fd4d50146103b257806359781034146103d557600080fd5b80633d9287fa146103055780634f0e0ef31461033957600080fd5b8062842b571461026e578063256ac915146102905780632a7ba1f7146102c55780632b7c7b11146102e5575b600080fd5b34801561027a57600080fd5b5061028e6102893660046151bf565b61087e565b005b34801561029c57600080fd5b506102b06102ab3660046151f8565b61098e565b60405190151581526020015b60405180910390f35b3480156102d157600080fd5b5061028e6102e0366004615215565b610a61565b3480156102f157600080fd5b5061028e610300366004615215565b610c3b565b34801561031157600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561034557600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102bc565b34801561039e57600080fd5b5061028e6103ad3660046151f8565b610d6a565b3480156103be57600080fd5b506103c7600281565b6040519081526020016102bc565b61028e6103e336600461522e565b61108c565b61028e6103f63660046152bb565b611275565b61028e610409366004615340565b611589565b34801561041a57600080fd5b5061028e6104293660046153d8565b6117de565b61028e61043c36600461541b565b611900565b34801561044d57600080fd5b506102b061045c3660046151f8565b611c31565b34801561046d57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b61028e6104a336600461546e565b611c60565b3480156104b457600080fd5b5061036d6104c3366004615215565b611f3e565b61028e6104d63660046152bb565b611f4b565b3480156104e757600080fd5b5060025461051c906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041682565b604080516fffffffffffffffffffffffffffffffff9384168152929091166020830152016102bc565b34801561055157600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561058557600080fd5b506004546040805167ffffffffffffffff608084901c1681526fffffffffffffffffffffffffffffffff9092166020830152016102bc565b3480156105c957600080fd5b506105d261227d565b6040516102bc91906154e2565b3480156105eb57600080fd5b5061028e6105fa36600461553c565b61228e565b34801561060b57600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561063f57600080fd5b5061028e61064e3660046151f8565b6123c4565b34801561065f57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561069357600080fd5b5061028e6106a23660046151f8565b6124c6565b3480156106b357600080fd5b506106c76106c23660046151f8565b612668565b604080519283526020830191909152016102bc565b61028e6106ea366004615557565b61289b565b3480156106fb57600080fd5b5060015461074e906fffffffffffffffffffffffffffffffff811690700100000000000000000000000000000000810460ff169071010000000000000000000000000000000000900464ffffffffff1683565b604080516fffffffffffffffffffffffffffffffff9094168452911515602084015264ffffffffff16908201526060016102bc565b34801561078f57600080fd5b506102b061079e366004615599565b600360209081526000928352604080842090915290825290205460ff1681565b3480156107ca57600080fd5b5061028e6107d93660046151f8565b612a88565b3480156107ea57600080fd5b506103c76107f93660046151f8565b612b86565b34801561080a57600080fd5b5061028e61081936600461522e565b612c6d565b34801561082a57600080fd5b5061028e6108393660046155c7565b612ec0565b34801561084a57600080fd5b506102b06108593660046151f8565b613057565b34801561086a57600080fd5b5061028e6108793660046155ee565b6131b2565b600260005414156108f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b6002600090815573ffffffffffffffffffffffffffffffffffffffff8316808252600360209081526040808420338086529083529381902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081527f9b3258bc4904fd6426b99843e206c6c7cdb1fd0f040121c25b71dafbb3851ee0910160405180910390a350506001600055565b6040517f055ee9b500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063055ee9b590602401602060405180830381865afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a43919061560b565b73ffffffffffffffffffffffffffffffffffffffff16141592915050565b60026000541415610ace576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610b5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b83919061560b565b9050610b903382846132eb565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906395373018906024015b600060405180830381600087803b158015610c1a57600080fd5b505af1158015610c2e573d6000803e3d6000fd5b5050600160005550505050565b60026000541415610ca8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610d39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5d919061560b565b9050610b90338284613411565b60026000541415610dd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000557f000000000000000000000000000000000000000000000000000000000000000015610e34576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610ec1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee5919061560b565b33600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915290205490915060ff16610f52576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f5d82613583565b5090508015610f98576040517ff713841e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b15801561102757600080fd5b505af115801561103b573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692503391507f93c70cc9715bef0d83edf2095f3595402279d274f402a73ffc17f1bcb19d863d90600090a35050600160005550565b600260005414156110f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611106613875565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063e958b70490602401602060405180830381865afa158015611197573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bb919061560b565b90506111c9848285856139b7565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401600060405180830381600087803b15801561125257600080fd5b505af1158015611266573d6000803e3d6000fd5b50506001600055505050505050565b600260005414156112e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611375573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611399919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166113e8576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806113f483613583565b915091508161142f576040517f1fdd676f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611437613875565b831561144d5761144d85858b8660016000613ae3565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632362a2d88b600185338e8e8e6040518863ffffffff1660e01b81526004016114b59796959493929190615663565b6020604051808303816000875af11580156114d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f891906156bf565b90508873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f7dfecd8419723a9d3954585a30c2a270165d70aafa146c11c1e1b88ae14390648460405161157091815260200190565b60405180910390a4505060016000555050505050505050565b600260005414156115f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ab919061560b565b90506116b5613875565b81156116cb576116cb8383338460016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d89061174a903390600090819083908d908d908d90600401615663565b6020604051808303816000875af1158015611769573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178d91906156bf565b5060405173ffffffffffffffffffffffffffffffffffffffff87169033907f460ad03b1cf79b1d64d3aefa28475f110ab66e84649c52bb41ed796b9b39198190600090a35050600160005550505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611849573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118d1576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff90811670010000000000000000000000000000000002911617600255565b6002600054141561196d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000908155606461198461ffff851687615707565b61198e9190615744565b9050611999816144f7565b6119a2816145e8565b6119ab84614668565b6119b3613875565b6040517f172c48c7000000000000000000000000000000000000000000000000000000008152600060048201819052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a64919061577f565b61ffff169150611a789050816127106157ae565b611a829083615707565b611a8c8288615707565b11611ac3576040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff86811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611b5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b81919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638587604051611bef92919091825261ffff16602082015260400190565b60405180910390a3611c2386827f00000000000000000000000000000000000000000000000000000000000000008a6139b7565b505060016000555050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526006602052604081205415155b92915050565b60026000541415611ccd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611cdb856144f7565b611ce484614668565b611ced856145e8565b600154700100000000000000000000000000000000900460ff1615611d3e576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d46613875565b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff85811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611de0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e04919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638885604051611e7292919091825261ffff16602082015260400190565b60405180910390a38215611e9057611e908484878460006001613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015611f1957600080fd5b505af1158015611f2d573d6000803e3d6000fd5b505060016000555050505050505050565b6000611c5a60058361480f565b60026000541415611fb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa15801561204b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206f919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166120be576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120c661481b565b6120fc576040517f7e52ccb400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061210782612668565b509050612112613875565b82156121285761212884848a8560016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d8906121aa908c90600290879033908f908f908f90600401615663565b6020604051808303816000875af11580156121c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ed91906156bf565b90508773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167ffada13ff2d5e1a1d9da37ad4a4130893b34e3c69c32b17f87ec31fd661b867078460405161226591815260200190565b60405180910390a45050600160005550505050505050565b6060612289600561486b565b905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612381576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561242f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612453919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146124b7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614878565b5050565b60026000541415612533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156125c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e8919061560b565b90506125f4818361489a565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401610c00565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126fc919061560b565b905060008061270b8387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156127a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127c991906156bf565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015291965061271091851690637afb010490604401602060405180830381865afa158015612863573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061288791906156bf565b6128919190615744565b9350505050915091565b60026000541415612908576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129bd919061560b565b90506129c7613875565b8115612a7e576129dc83833384600080613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015612a6557600080fd5b505af1158015612a79573d6000803e3d6000fd5b505050505b5050600160005550565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612af3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b17919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b7b576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614c92565b600080612b9283612668565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152919350600092507f000000000000000000000000000000000000000000000000000000000000000090911690633192195c906024016040805180830381865afa158015612c26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4a91906157c5565b9150819050612c5b61271084615707565b612c659190615744565b949350505050565b60026000541415612cda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063fdd5764590602401602060405180830381865afa158015612d6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d91919061560b565b73ffffffffffffffffffffffffffffffffffffffff161480612dd7575073ffffffffffffffffffffffffffffffffffffffff831660009081526006602052604090205415155b15612e0e576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612eac57600080fd5b505af1158015611c23573d6000803e3d6000fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f4f919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612fb3576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000061300a576040517f50dd11fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805464ffffffffff90921671010000000000000000000000000000000000027fffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffffff909216919091179055565b6040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063f67c5bd090602401602060405180830381865afa1580156130e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061310c91906156bf565b905080158015906131ab5750807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015613184573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a891906156bf565b16155b9392505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561321d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613241919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146132a5576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018054911515700100000000000000000000000000000000027fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff909216919091179055565b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600060448301819052917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561338c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133b091906156bf565b90506133bb816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f98274bf834d179ee08dc0604071b0dc90b54731bd5f725a5a96a39a86bce025a8360405161340391815260200190565b60405180910390a250505050565b61341a816144f7565b600154700100000000000000000000000000000000900460ff161561346b576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600160448301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561350c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061353091906156bf565b905061353b816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f9cac51154cc0d835e2f9c9d1f59a9344588cee107f4203bf58a8c797e3a58c458360405161340391815260200190565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613617919061560b565b90506000806136268387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156136c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136e491906156bf565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529195506000917f00000000000000000000000000000000000000000000000000000000000000001690633192195c906024016040805180830381865afa158015613775573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061379991906157c5565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350600092506127109187169063f9a6503090604401602060405180830381865afa158015613837573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061385b91906156bf565b6138659190615707565b9092109794965093945050505050565b34156139b5577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156138e357600080fd5b505af11580156138f7573d6000803e3d6000fd5b50506040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201523460248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16935063a9059cbb925060440190506020604051808303816000875af115801561398f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139b391906157e9565b505b565b6139c084614cb4565b6040517f830aa74500000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f0000000000000000000000000000000000000000000000000000000000000000169063830aa74590608401600060405180830381600087803b158015613a5e57600080fd5b505af1158015613a72573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fa32435755c235de2976ed44a75a2f85cb01faf0c894f639fe0c32bb9455fea8f83604051613ad591815260200190565b60405180910390a350505050565b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301523060248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b158015613b7257600080fd5b505af1158015613b86573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff871692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a28460005b8181101561441d5736888883818110613bea57613bea615806565b9050602002810190613bfc9190615835565b90506004613c0d6020830183615873565b90501015613c47576040517fe2b0e50600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b30613c5560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16141561421c578415613ca9576040517f5fb9107f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613cb86020830183615873565b613cc1916158d8565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167f59781034000000000000000000000000000000000000000000000000000000001415613e3c5760008080613d1e6020860186615873565b613d2c916004908290615920565b810190613d39919061522e565b925092509250613e34838c73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614613e2b576040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015613e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e26919061560b565b613e2d565b8b5b84846139b7565b505050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2b7c7b11000000000000000000000000000000000000000000000000000000001415613ec757600194506000613e996020840184615873565b613ea7916004908290615920565b810190613eb49190615215565b9050613ec1898983613411565b50614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2a7ba1f7000000000000000000000000000000000000000000000000000000001415613f80578415613f49576040517fc0b0caa800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613f586020840184615873565b613f66916004908290615920565b810190613f739190615215565b9050613ec18989836132eb565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f233a8caa0000000000000000000000000000000000000000000000000000000014156140e457600080613fda6020850185615873565b613fe8916004908290615920565b810190613ff5919061594a565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c8116600483015292945090925082918416906370a0823190602401602060405180830381865afa158015614069573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061408d91906156bf565b10156140dd576040517fa5ac537300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016108e7565b5050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fc690908a00000000000000000000000000000000000000000000000000000000141561416457600061413d6020840184615873565b61414b916004908290615920565b81019061415891906151f8565b9050613ec1888261489a565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f23e27a640000000000000000000000000000000000000000000000000000000014156141e45760006141bd6020840184615873565b6141cb916004908290615920565b8101906141d891906151f8565b9050613ec18882614d42565b6040517f1e9e7e7a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50614414565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff68754361426760208501856151f8565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156142d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142f4919061560b565b73ffffffffffffffffffffffffffffffffffffffff16148061436d575073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001661435560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16145b156143a4576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6144126143b46020830183615873565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506143f69250505060208401846151f8565b73ffffffffffffffffffffffffffffffffffffffff1690614e39565b505b50600101613bcf565b506040517f60c8e8938c9a0c0d88a98d6f1c562ce68077e12bf3edb8047378f2f736cb45b490600090a16040517fe1998cf900000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff86811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b1580156144d657600080fd5b505af11580156144ea573d6000803e3d6000fd5b5050505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006139b3576001546fffffffffffffffffffffffffffffffff9081169081146124c257600454608081901c906fffffffffffffffffffffffffffffffff16600067ffffffffffffffff8316431461456e578461458a565b61458a6fffffffffffffffffffffffffffffffff831686615976565b9050838111156145c6576040517f675f1a5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff81164360801b176004555050505050565b6002546fffffffffffffffffffffffffffffffff16811080614631575060025470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681115b156139b3576040517fce16799400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61467061481b565b156146a7576040517f63fc31c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1615614806577f0000000000000000000000000000000000000000000000000000000000000000801561472657503373ffffffffffffffffffffffffffffffffffffffff821614155b1561475d576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600160248301527f00000000000000000000000000000000000000000000000000000000000000001690639dc29fac90604401600060405180830381600087803b1580156147ed57600080fd5b505af1158015614801573d6000803e3d6000fd5b505050505b6139b381614cb4565b60006131ab8383614e7b565b60007f0000000000000000000000000000000000000000000000000000000000000000801561228957505060015471010000000000000000000000000000000000900464ffffffffff1642101590565b606060006131ab83614ea5565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f01565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561492b57600080fd5b505af115801561493f573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527fdf498aa1c340e992665d6fb4f3be8436d452c45a630cb6d7fab7963da39bac8793500190505b60405180910390a15050565b6040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600091829160019183917f00000000000000000000000000000000000000000000000000000000000000001690638991b2f190602401602060405180830381865afa158015614a2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a5391906156bf565b90505b808211614c895780821615614c7d576040517fe75538c700000000000000000000000000000000000000000000000000000000815260048101839052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e75538c7906024016040805180830381865afa158015614af4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b18919061577f565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529294509092506000918416906370a0823190602401602060405180830381865afa158015614b8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bb191906156bf565b90506001811115614c79576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff8481166024830152600091908b169063f9a6503090604401602060405180830381865afa158015614c33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c5791906156bf565b978801979050614c6b61ffff841682615707565b614c759088615976565b9650505b5050505b600182901b9150614a56565b50509250929050565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f50565b3373ffffffffffffffffffffffffffffffffffffffff821614801590614d0b575033600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16155b156139b3576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b158015614dd357600080fd5b505af1158015614de7573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527f69db9e9764da61b6681b89fb0f5be018506e0342036e56b59c3015a620d60977935001905061498d565b60606131ab83836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250615043565b6000826000018281548110614e9257614e92615806565b9060005260206000200154905092915050565b606081600001805480602002602001604051908101604052809291908181526020018280548015614ef557602002820191906000526020600020905b815481526020019060010190808311614ee1575b50505050509050919050565b6000818152600183016020526040812054614f4857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611c5a565b506000611c5a565b60008181526001830160205260408120548015615039576000614f746001836157ae565b8554909150600090614f88906001906157ae565b9050818114614fed576000866000018281548110614fa857614fa8615806565b9060005260206000200154905080876000018481548110614fcb57614fcb615806565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080614ffe57614ffe61598e565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611c5a565b6000915050611c5a565b6060612c65848460008585843b6150b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108e7565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516150df91906159ed565b60006040518083038185875af1925050503d806000811461511c576040519150601f19603f3d011682016040523d82523d6000602084013e615121565b606091505b509150915061513182828661513c565b979650505050505050565b6060831561514b5750816131ab565b82511561515b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e791906159ff565b73ffffffffffffffffffffffffffffffffffffffff811681146139b357600080fd5b80151581146139b357600080fd5b600080604083850312156151d257600080fd5b82356151dd8161518f565b915060208301356151ed816151b1565b809150509250929050565b60006020828403121561520a57600080fd5b81356131ab8161518f565b60006020828403121561522757600080fd5b5035919050565b60008060006060848603121561524357600080fd5b833561524e8161518f565b9250602084013561525e8161518f565b929592945050506040919091013590565b60008083601f84011261528157600080fd5b50813567ffffffffffffffff81111561529957600080fd5b6020830191508360208260051b85010111156152b457600080fd5b9250929050565b60008060008060008060a087890312156152d457600080fd5b86356152df8161518f565b955060208701356152ef8161518f565b9450604087013593506060870135615306816151b1565b9250608087013567ffffffffffffffff81111561532257600080fd5b61532e89828a0161526f565b979a9699509497509295939492505050565b60008060008060006080868803121561535857600080fd5b85356153638161518f565b945060208601359350604086013561537a816151b1565b9250606086013567ffffffffffffffff81111561539657600080fd5b6153a28882890161526f565b969995985093965092949392505050565b80356fffffffffffffffffffffffffffffffff811681146153d357600080fd5b919050565b600080604083850312156153eb57600080fd5b6153f4836153b3565b9150615402602084016153b3565b90509250929050565b61ffff811681146139b357600080fd5b6000806000806080858703121561543157600080fd5b8435935060208501356154438161518f565b925060408501356154538161540b565b915060608501356154638161540b565b939692955090935050565b60008060008060006080868803121561548657600080fd5b8535945060208601356154988161518f565b9350604086013567ffffffffffffffff8111156154b457600080fd5b6154c08882890161526f565b90945092505060608601356154d48161540b565b809150509295509295909350565b6020808252825182820181905260009190848201906040850190845b8181101561553057835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016154fe565b50909695505050505050565b60006020828403121561554e57600080fd5b6131ab826153b3565b6000806020838503121561556a57600080fd5b823567ffffffffffffffff81111561558157600080fd5b61558d8582860161526f565b90969095509350505050565b600080604083850312156155ac57600080fd5b82356155b78161518f565b915060208301356151ed8161518f565b6000602082840312156155d957600080fd5b813564ffffffffff811681146131ab57600080fd5b60006020828403121561560057600080fd5b81356131ab816151b1565b60006020828403121561561d57600080fd5b81516131ab8161518f565b6003811061565f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b73ffffffffffffffffffffffffffffffffffffffff888116825260e082019061568f602084018a615628565b6040830197909752948616606082015292909416608083015260a082015291151560c09092019190915292915050565b6000602082840312156156d157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561573f5761573f6156d8565b500290565b60008261577a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000806040838503121561579257600080fd5b825161579d8161518f565b60208401519092506151ed8161540b565b6000828210156157c0576157c06156d8565b500390565b600080604083850312156157d857600080fd5b505080516020909101519092909150565b6000602082840312156157fb57600080fd5b81516131ab816151b1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc183360301811261586957600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126158a857600080fd5b83018035915067ffffffffffffffff8211156158c357600080fd5b6020019150368190038213156152b457600080fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156159185780818660040360031b1b83161692505b505092915050565b6000808585111561593057600080fd5b8386111561593d57600080fd5b5050820193919092039150565b6000806040838503121561595d57600080fd5b82356159688161518f565b946020939093013593505050565b60008219821115615989576159896156d8565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60005b838110156159d85781810151838201526020016159c0565b838111156159e7576000848401525b50505050565b600082516158698184602087016159bd565b6020815260008251806020840152615a1e8160408501602087016159bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea2646970667358221220a3f4a705ab580a6ada1e438cd2ee4abc001b62d1d171fce12c41994900fef21664736f6c634300080a003360c06040523480156200001157600080fd5b50604051620026cf380380620026cf833981016040819052620000349162000324565b82828281600090805190602001906200004f92919062000194565b5080516200006590600190602084019062000194565b50506006805460ff19169055506001600160a01b0381166200009a57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000d9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ff9190620003a1565b6001600160a01b03166080816001600160a01b03168152505050826001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000158573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200017e9190620003a1565b6001600160a01b031660a0525062000403915050565b828054620001a290620003c6565b90600052602060002090601f016020900481019282620001c6576000855562000211565b82601f10620001e157805160ff191683800117855562000211565b8280016001018555821562000211579182015b8281111562000211578251825591602001919060010190620001f4565b506200021f92915062000223565b5090565b5b808211156200021f576000815560010162000224565b80516001600160a01b03811681146200025257600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200027f57600080fd5b81516001600160401b03808211156200029c576200029c62000257565b604051601f8301601f19908116603f01168101908282118183101715620002c757620002c762000257565b81604052838152602092508683858801011115620002e457600080fd5b600091505b83821015620003085785820183015181830184015290820190620002e9565b838211156200031a5760008385830101525b9695505050505050565b6000806000606084860312156200033a57600080fd5b62000345846200023a565b60208501519093506001600160401b03808211156200036357600080fd5b62000371878388016200026d565b935060408601519150808211156200038857600080fd5b5062000397868287016200026d565b9150509250925092565b600060208284031215620003b457600080fd5b620003bf826200023a565b9392505050565b600181811c90821680620003db57607f821691505b60208210811415620003fd57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a0516122756200045a6000396000610a9a015260008181610386015281816106db0152818161089101528181610f15015281816110010152818161115b015281816112f401526114f901526122756000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80636352211e116100f9578063a0bcfc7f11610097578063b88d4fde11610071578063b88d4fde146103a8578063c87b56dd146103b6578063e985e9c5146103c9578063fca3b5aa1461041257600080fd5b8063a0bcfc7f14610360578063a22cb46514610373578063a50cf2c81461038157600080fd5b80638456cb59116100d35780638456cb591461032a57806389406ff51461033257806395d89b41146103455780639dc29fac1461034d57600080fd5b80636352211e146102fc5780636c0360eb1461030f57806370a082311461031757600080fd5b80633f4ba83a116101665780634610f6ac116101405780634610f6ac146102b357806354fd4d50146102c6578063576cd2d1146102ce5780635c975abb146102f157600080fd5b80633f4ba83a1461029857806340c10f19146102a057806342842e0e1461028a57600080fd5b8063081812fc116101a2578063081812fc1461024b578063095ea7b31461025e57806318160ddd1461027357806323b872dd1461028a57600080fd5b806301ffc9a7146101c957806306fdde03146101f15780630754617214610206575b600080fd5b6101dc6101d7366004611cc6565b610425565b60405190151581526020015b60405180910390f35b6101f961050a565b6040516101e89190611d38565b6008546102269073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e8565b610226610259366004611d89565b61059c565b61027161026c366004611dc7565b61067b565b005b61027c60075481565b6040519081526020016101e8565b61027161026c366004611df3565b6102716106ad565b6102716102ae366004611dc7565b61079b565b6102716102c1366004611e34565b610863565b61027c600181565b6101dc6102dc366004611e34565b60096020526000908152604090205460ff1681565b60065460ff166101dc565b61022661030a366004611d89565b610cd9565b6101f9610d8b565b61027c610325366004611e34565b610e19565b610271610ee7565b610271610340366004611e34565b610fd3565b6101f9611103565b61027161035b366004611dc7565b611112565b61027161036e366004611e51565b6112c6565b61027161026c366004611ed1565b6102267f000000000000000000000000000000000000000000000000000000000000000081565b61027161026c366004611f39565b6101f96103c4366004611d89565b6113bb565b6101dc6103d7366004612037565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205460ff1690565b610271610420366004611e34565b6114cb565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd0000000000000000000000000000000000000000000000000000000014806104b857507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061050457507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60606000805461051990612065565b80601f016020809104026020016040519081016040528092919081815260200182805461054590612065565b80156105925780601f1061056757610100808354040283529160200191610592565b820191906000526020600020905b81548152906001019060200180831161057557829003601f168201915b5050505050905090565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff16610652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084015b60405180910390fd5b5060009081526004602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b6040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa158015610737573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075b91906120b9565b610791576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107996115f6565b565b60085473ffffffffffffffffffffffffffffffffffffffff1633146107ec576040517f5c2967f500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006107f783610e19565b905060005b82811015610846576000816108278473ffffffffffffffffffffffffffffffffffffffff8816612105565b6108319190612105565b905061083d85826116d7565b506001016107fc565b5081600760008282546108599190612105565b9091555050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156108ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091191906120b9565b610947576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163b610995576040517f9c01f6a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff1663c12c21c06040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610a1c575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610a199181019061211d565b60015b610a52576040517f9c01f6a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f6fbc6f6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192507f000000000000000000000000000000000000000000000000000000000000000090911690636fbc6f6b90602401602060405180830381865afa158015610ae3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0791906120b9565b1580610bad57503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16639408b63f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b94919061211d565b73ffffffffffffffffffffffffffffffffffffffff1614155b80610c5257508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c39919061211d565b73ffffffffffffffffffffffffffffffffffffffff1614155b15610c89576040517f9c01f6a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff16600090815260096020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff1680610504576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e00000000000000000000000000000000000000000000006064820152608401610649565b600a8054610d9890612065565b80601f0160208091040260200160405190810160405280929190818152602001828054610dc490612065565b8015610e115780601f10610de657610100808354040283529160200191610e11565b820191906000526020600020905b815481529060010190602001808311610df457829003601f168201915b505050505081565b600073ffffffffffffffffffffffffffffffffffffffff8216610ebe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152608401610649565b5073ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015610f71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9591906120b9565b610fcb576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610799611899565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561105d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108191906120b9565b6110b7576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff16600090815260096020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b60606001805461051990612065565b3360009081526009602052604090205460ff161580156111dd57506040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156111b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111db91906120b9565b155b15611214576040517f1e0d048500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061121f83610e19565b90508181101561125b576040517f90c9142d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b828110156112b357600060018261128b8573ffffffffffffffffffffffffffffffffffffffff8916612105565b611295919061213a565b61129f919061213a565b90506112aa81611959565b5060010161125e565b508160076000828254610859919061213a565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611350573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137491906120b9565b6113aa576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113b6600a8383611c0f565b505050565b60008181526002602052604090205460609073ffffffffffffffffffffffffffffffffffffffff1661146f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006064820152608401610649565b6000611479611a26565b9050600081511161149957604051806020016040528060008152506114c4565b806114a384611a35565b6040516020016114b4929190612151565b6040516020818303038152906040525b9392505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611555573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157991906120b9565b6115af576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60065460ff16611662576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610649565b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b73ffffffffffffffffffffffffffffffffffffffff8216611754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610649565b60008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff16156117e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610649565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805460019290611816908490612105565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60065460ff1615611906576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610649565b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586116ad3390565b600061196482610cd9565b9050611971600083611b6f565b73ffffffffffffffffffffffffffffffffffffffff811660009081526003602052604081208054600192906119a790849061213a565b909155505060008281526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555183919073ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6060600a805461051990612065565b606081611a7557505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611a9f5780611a8981612180565b9150611a989050600a836121e8565b9150611a79565b60008167ffffffffffffffff811115611aba57611aba611f0a565b6040519080825280601f01601f191660200182016040528015611ae4576020820181803683370190505b5090505b8415611b6757611af960018361213a565b9150611b06600a866121fc565b611b11906030612105565b60f81b818381518110611b2657611b26612210565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611b60600a866121e8565b9450611ae8565b949350505050565b600081815260046020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091558190611bc982610cd9565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b828054611c1b90612065565b90600052602060002090601f016020900481019282611c3d5760008555611ca1565b82601f10611c74578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00823516178555611ca1565b82800160010185558215611ca1579182015b82811115611ca1578235825591602001919060010190611c86565b50611cad929150611cb1565b5090565b5b80821115611cad5760008155600101611cb2565b600060208284031215611cd857600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146114c457600080fd5b60005b83811015611d23578181015183820152602001611d0b565b83811115611d32576000848401525b50505050565b6020815260008251806020840152611d57816040850160208701611d08565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b600060208284031215611d9b57600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff81168114611dc457600080fd5b50565b60008060408385031215611dda57600080fd5b8235611de581611da2565b946020939093013593505050565b600080600060608486031215611e0857600080fd5b8335611e1381611da2565b92506020840135611e2381611da2565b929592945050506040919091013590565b600060208284031215611e4657600080fd5b81356114c481611da2565b60008060208385031215611e6457600080fd5b823567ffffffffffffffff80821115611e7c57600080fd5b818501915085601f830112611e9057600080fd5b813581811115611e9f57600080fd5b866020828501011115611eb157600080fd5b60209290920196919550909350505050565b8015158114611dc457600080fd5b60008060408385031215611ee457600080fd5b8235611eef81611da2565b91506020830135611eff81611ec3565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060008060808587031215611f4f57600080fd5b8435611f5a81611da2565b93506020850135611f6a81611da2565b925060408501359150606085013567ffffffffffffffff80821115611f8e57600080fd5b818701915087601f830112611fa257600080fd5b813581811115611fb457611fb4611f0a565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715611ffa57611ffa611f0a565b816040528281528a602084870101111561201357600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000806040838503121561204a57600080fd5b823561205581611da2565b91506020830135611eff81611da2565b600181811c9082168061207957607f821691505b602082108114156120b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156120cb57600080fd5b81516114c481611ec3565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115612118576121186120d6565b500190565b60006020828403121561212f57600080fd5b81516114c481611da2565b60008282101561214c5761214c6120d6565b500390565b60008351612163818460208801611d08565b835190830190612177818360208801611d08565b01949350505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156121b2576121b26120d6565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826121f7576121f76121b9565b500490565b60008261220b5761220b6121b9565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea2646970667358221220ffdd83a2fc9a158347ca248f021e63fcef3a7985b3deb793f75cd1835b068aab64736f6c634300080a003360a060405234801561001057600080fd5b506040516106ca3803806106ca83398101604081905261002f9161006c565b60009190915560ff166080526001805460506001600160501b031991821681179092556004805490911690911790554260028190556003556100a2565b6000806040838503121561007f57600080fd5b82519150602083015160ff8116811461009757600080fd5b809150509250929050565b60805161060e6100bc600039600060d3015261060e6000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80639a6fc8f511610081578063d62ada111161005b578063d62ada11146102dc578063f7a30806146102f4578063feaf968c1461030757600080fd5b80639a6fc8f5146101cd578063bd18ad531461023a578063cd653afc1461024d57600080fd5b806354fd4d50116100b257806354fd4d501461012d57806367e8d83d1461013c5780637284e4161461018e57600080fd5b8063313ce567146100ce5780633fd0875f1461010c575b600080fd5b6100f57f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020015b60405180910390f35b6004546a0100000000000000000000900460ff166040516101039190610441565b60405160018152602001610103565b61018c61014a366004610482565b600480549115156c01000000000000000000000000027fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff909216919091179055565b005b604080518082018252600c81527f7072696365206f7261636c6500000000000000000000000000000000000000006020820152905161010391906104ab565b6102036101db36600461053d565b60015460005460025460035460045469ffffffffffffffffffff948516941691939590929450565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610103565b61018c610248366004610558565b61030f565b61018c61025b366004610579565b6001805469ffffffffffffffffffff9586167fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090911617905560029290925560035560048054919092167fffffffffffffffffffffffffffffffffffffffff00ff00000000000000000000909116176b020000000000000000000000179055565b6102e461035f565b6040519015158152602001610103565b61018c6103023660046105bf565b600055565b610203610385565b600480548291907fffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff166b01000000000000000000000083600281111561035757610357610412565b021790555050565b600454600090610380906b010000000000000000000000900460ff166103d6565b905090565b60008060008060006004600c9054906101000a900460ff16156103a757600080fd5b505060015460005460025460035460045469ffffffffffffffffffff9485169893975091955093509190911690565b600060028260028111156103ec576103ec610412565b14156103f757600080fd5b600182600281111561040b5761040b610412565b1492915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016006831061047c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561049457600080fd5b813580151581146104a457600080fd5b9392505050565b600060208083528351808285015260005b818110156104d8578581018301518582016040015282016104bc565b818111156104ea576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803569ffffffffffffffffffff8116811461053857600080fd5b919050565b60006020828403121561054f57600080fd5b6104a48261051e565b60006020828403121561056a57600080fd5b8135600381106104a457600080fd5b6000806000806080858703121561058f57600080fd5b6105988561051e565b935060208501359250604085013591506105b46060860161051e565b905092959194509250565b6000602082840312156105d157600080fd5b503591905056fea264697066735822122014874f7a973b86501c4c1a8be32490fe902c8f088ee234d25f9b2497e19f9e5264736f6c634300080a0033a2646970667358221220d8fdaadc825c43ac2783715ebcfe33e7b0ce3a396ac7717d65e4c95e98b6cf7f64736f6c634300080a003360806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d000117905534801561003957600080fd5b50600054604080516318caf8e360e31b815273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660048083019190915260248201929092526044810191909152632aa9a2a960e11b6064820152620100009091046001600160a01b03169063c657c71890608401600060405180830381600087803b1580156100ba57600080fd5b505af11580156100ce573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b81527390f79bf6eb2c4f870365e785982e1f101e93b90660048201526024810191909152600660448201526511949251539160d21b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561014f57600080fd5b505af1158015610163573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b8152733c44cdddb6a900fa2b585dd299e03d12fa4293bc60048201526024810191909152600a6044820152692624a8aaa4a220aa27a960b11b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b1580156101e857600080fd5b505af11580156101fc573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b815273c4375b7de8af5a38a93548eb8453a498222c4ff260048201526024810191909152600c60448201526b44554d425f4144445245535360a01b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561028357600080fd5b505af1158015610297573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b8152739965507d1a55bcc2695c58ba16fb37d819b0a4dc60048201526024810191909152600760448201526620a220a82a22a960c91b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561031957600080fd5b505af115801561032d573d6000803e3d6000fd5b505050506102a6806103406000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063ba414fa61461003b578063fa7626d414610057575b600080fd5b610043610064565b604051901515815260200160405180910390f35b6000546100439060ff1681565b60008054610100900460ff16156100845750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156101bf5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610129917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016101ff565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526101619161023b565b6000604051808303816000865af19150503d806000811461019e576040519150601f19603f3d011682016040523d82523d6000602084013e6101a3565b606091505b50915050808060200190518101906101bb919061024e565b9150505b919050565b6000815160005b818110156101e557602081850181015186830152016101cb565b818111156101f4576000828601525b509290920192915050565b7fffffffff0000000000000000000000000000000000000000000000000000000083168152600061023360048301846101c4565b949350505050565b600061024782846101c4565b9392505050565b60006020828403121561026057600080fd5b8151801515811461024757600080fdfea2646970667358221220293f55a0ef7b60c31a89dbc50e3339c80a8fdb1f9567614b200e97598226671f64736f6c634300080a003360806040523480156200001157600080fd5b506040516201110538038062011105833981016040819052620000349162000811565b6200003f3362000734565b6040516200004d9062000784565b604051809103906000f0801580156200006a573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b039283169081179091556040516310dc138160e31b81529184166004830152906386e09c0890602401600060405180830381600087803b158015620000c457600080fd5b505af1158015620000d9573d6000803e3d6000fd5b50506001546040516301ed651160e41b81526001600160a01b0385811660048301529091169250631ed651109150602401600060405180830381600087803b1580156200012557600080fd5b505af11580156200013a573d6000803e3d6000fd5b505050506040516200014c9062000792565b604051809103906000f08015801562000169573d6000803e3d6000fd5b50600280546001600160a01b0319166001600160a01b039283169081179091556001546040516376aad60560e01b81526004810192909252909116906376aad60590602401600060405180830381600087803b158015620001c957600080fd5b505af1158015620001de573d6000803e3d6000fd5b5050600154604051600093506001600160a01b0390911691506200020290620007a0565b6001600160a01b039091168152602001604051809103906000f0801580156200022f573d6000803e3d6000fd5b5060015460405163338f12b960e21b81526001600160a01b03808416600483015292935091169063ce3c4ae490602401600060405180830381600087803b1580156200027a57600080fd5b505af11580156200028f573d6000803e3d6000fd5b5050600154604051600093506001600160a01b039091169150620002b390620007ae565b6001600160a01b039091168152602001604051809103906000f080158015620002e0573d6000803e3d6000fd5b5060015460405163c5120b3960e01b81526001600160a01b03808416600483015292935091169063c5120b3990602401600060405180830381600087803b1580156200032b57600080fd5b505af115801562000340573d6000803e3d6000fd5b5050600154604051606093506001600160a01b03909116915082906200036690620007bc565b6200037392919062000849565b604051809103906000f08015801562000390573d6000803e3d6000fd5b50600380546001600160a01b0319166001600160a01b0392831690811790915560015460405163530e784f60e01b815260048101929092529091169063530e784f90602401600060405180830381600087803b158015620003f057600080fd5b505af115801562000405573d6000803e3d6000fd5b5050600154604051600093506001600160a01b0390911691506200042990620007ca565b6001600160a01b039091168152602001604051809103906000f08015801562000456573d6000803e3d6000fd5b506001546040516356ee0d3b60e11b81526001600160a01b03808416600483015292935091169063addc1a7690602401600060405180830381600087803b158015620004a157600080fd5b505af1158015620004b6573d6000803e3d6000fd5b5050600154604051600093506001600160a01b039091169150620004da90620007d8565b6001600160a01b039091168152602001604051809103906000f08015801562000507573d6000803e3d6000fd5b506001546040516321da583760e01b81526001600160a01b0380841660048301529293509116906321da583790602401600060405180830381600087803b1580156200055257600080fd5b505af115801562000567573d6000803e3d6000fd5b505050506000306040516200057c90620007e6565b6001600160a01b039091168152602001604051809103906000f080158015620005a9573d6000803e3d6000fd5b50600154604051631795d5b360e31b81526001600160a01b03808416600483015292935091169063bcaead9890602401600060405180830381600087803b158015620005f457600080fd5b505af115801562000609573d6000803e3d6000fd5b505060405163f2fde38b60e01b81523360048201526001600160a01b038416925063f2fde38b9150602401600060405180830381600087803b1580156200064f57600080fd5b505af115801562000664573d6000803e3d6000fd5b505060015460405163f2fde38b60e01b81523360048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b158015620006ae57600080fd5b505af1158015620006c3573d6000803e3d6000fd5b505060025460405163f2fde38b60e01b81523360048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b1580156200070d57600080fd5b505af115801562000722573d6000803e3d6000fd5b505050505050505050505050620008b2565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610fcd80620010dd83390190565b61098c80620020aa83390190565b610f508062002a3683390190565b614da6806200398683390190565b611b45806200872c83390190565b612ced806200a27183390190565b611627806200cf5e83390190565b612b80806200e58583390190565b80516001600160a01b03811681146200080c57600080fd5b919050565b600080604083850312156200082557600080fd5b6200083083620007f4565b91506200084060208401620007f4565b90509250929050565b6001600160a01b0383811682526040602080840182905284518483018190526000938683019290916060870190865b81811015620008a3578551805186168452840151851684840152948301949186019160010162000878565b50909998505050505050505050565b61081b80620008c26000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80638874ff1f1161005b5780638874ff1f146100f55780638da5cb5b14610108578063de28735914610126578063f2fde38b1461014657600080fd5b80632630c12f146100825780632954018c146100cb578063715018a6146100eb575b600080fd5b6003546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6001546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b6100f3610159565b005b6100f3610103366004610658565b6101eb565b60005473ffffffffffffffffffffffffffffffffffffffff166100a2565b6002546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b6100f3610154366004610734565b6103e3565b60005473ffffffffffffffffffffffffffffffffffffffff1633146101df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6101e96000610513565b565b60005473ffffffffffffffffffffffffffffffffffffffff16331461026c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101d6565b60005b815181101561035c57600354825173ffffffffffffffffffffffffffffffffffffffff9091169063e8a97a3e908490849081106102ae576102ae610756565b6020026020010151600001518484815181106102cc576102cc610756565b6020026020010151602001516040518363ffffffff1660e01b815260040161031792919073ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b600060405180830381600087803b15801561033157600080fd5b505af1158015610345573d6000803e3d6000fd5b50505050808061035490610785565b91505061026f565b506002546040517ff2fde38b00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063f2fde38b90602401600060405180830381600087803b1580156103c857600080fd5b505af11580156103dc573d6000803e3d6000fd5b5050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101d6565b73ffffffffffffffffffffffffffffffffffffffff8116610507576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016101d6565b61051081610513565b50565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156105da576105da610588565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561062757610627610588565b604052919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461065357600080fd5b919050565b6000602080838503121561066b57600080fd5b823567ffffffffffffffff8082111561068357600080fd5b818501915085601f83011261069757600080fd5b8135818111156106a9576106a9610588565b6106b7848260051b016105e0565b818152848101925060069190911b8301840190878211156106d757600080fd5b928401925b8184101561072957604084890312156106f55760008081fd5b6106fd6105b7565b6107068561062f565b815261071386860161062f565b81870152835260409390930192918401916106dc565b979650505050505050565b60006020828403121561074657600080fd5b61074f8261062f565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156107de577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea26469706673582212205ee75e57bb635aa49a1758f4ab0b04182a73115bff08f420c56a8ddb433c029364736f6c634300080a0033608060405234801561001057600080fd5b5061001a3361005f565b60405130906f20a2222922a9a9afa82927ab24a222a960811b907fb37614c7d254ea8d16eb81fa11dddaeb266aa8ba4917980859c7740aff30c69190600090a36100af565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610f0f806100be6000396000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c806377532ed9116100e3578063bcaead981161008c578063ce3c4ae411610066578063ce3c4ae414610308578063f2fde38b1461031b578063fca513a81461032e57600080fd5b8063bcaead98146102da578063c5120b39146102ed578063c513c9bb1461030057600080fd5b80639068a868116100bd5780639068a868146102b7578063addc1a76146102bf578063affd9243146102d257600080fd5b806377532ed91461027e57806386e09c08146102865780638da5cb5b1461029957600080fd5b80634c252f9111610145578063699f200f1161011f578063699f200f1461022d578063715018a61461026357806376aad6051461026b57600080fd5b80634c252f91146101fc578063530e784f1461020457806354fd4d501461021757600080fd5b80631ed65110116101765780631ed65110146101cc57806321da5837146101e157806326c74fc3146101f457600080fd5b8063060678c21461019257806308737695146101c4575b600080fd5b61019a610336565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61019a610366565b6101df6101da366004610e10565b610391565b005b6101df6101ef366004610e10565b610444565b61019a6104ef565b61019a61051a565b6101df610212366004610e10565b610545565b61021f600281565b6040519081526020016101bb565b61019a61023b366004610e4d565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6101df6105f0565b6101df610279366004610e10565b61067d565b61019a610728565b6101df610294366004610e10565b610753565b60005473ffffffffffffffffffffffffffffffffffffffff1661019a565b61019a6107fe565b6101df6102cd366004610e10565b610829565b61019a6108d4565b6101df6102e8366004610e10565b6108ff565b6101df6102fb366004610e10565b6109aa565b61019a610a55565b6101df610316366004610e10565b610a80565b6101df610329366004610e10565b610b2b565b61019a610c58565b60006103617f444154415f434f4d50524553534f520000000000000000000000000000000000610c7f565b905090565b60006103617f41434c0000000000000000000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610417576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6104417f54524541535552595f434f4e545241435400000000000000000000000000000082610d1d565b50565b60005473ffffffffffffffffffffffffffffffffffffffff1633146104c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f574554485f47415445574159000000000000000000000000000000000000000082610d1d565b60006103617f54524541535552595f434f4e5452414354000000000000000000000000000000610c7f565b60006103617f574554485f544f4b454e00000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f50524943455f4f5241434c45000000000000000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610671576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b61067b6000610d9b565b565b60005473ffffffffffffffffffffffffffffffffffffffff1633146106fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f41434c000000000000000000000000000000000000000000000000000000000082610d1d565b60006103617f574554485f474154455741590000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146107d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f574554485f544f4b454e0000000000000000000000000000000000000000000082610d1d565b60006103617f4143434f554e545f464143544f52590000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146108aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f4143434f554e545f464143544f5259000000000000000000000000000000000082610d1d565b60006103617f474541525f544f4b454e00000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610980576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f474541525f544f4b454e0000000000000000000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f444154415f434f4d50524553534f52000000000000000000000000000000000082610d1d565b60006103617f434f4e5452414354535f52454749535445520000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610b01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f434f4e5452414354535f5245474953544552000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610bac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b73ffffffffffffffffffffffffffffffffffffffff8116610c4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161040e565b61044181610d9b565b60006103617f50524943455f4f5241434c4500000000000000000000000000000000000000005b6000818152600160209081526040808320548151808301909252600382527f41503100000000000000000000000000000000000000000000000000000000009282019290925273ffffffffffffffffffffffffffffffffffffffff9091169081610d16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040e9190610e66565b5092915050565b60008281526001602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091559051909184917fb37614c7d254ea8d16eb81fa11dddaeb266aa8ba4917980859c7740aff30c6919190a35050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215610e2257600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610e4657600080fd5b9392505050565b600060208284031215610e5f57600080fd5b5035919050565b600060208083528351808285015260005b81811015610e9357858101830151858201604001528201610e77565b81811115610ea5576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea264697066735822122083c228af017c6f5cf8c395cdf7a53276ff56fdd4f4313c39f680ab73bd75417364736f6c634300080a0033608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61090e8061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063732818191161008c578063adce758d11610066578063adce758d14610215578063ba306df114610228578063d4eb5db01461023b578063f2fde38b1461027457600080fd5b806373281819146101b7578063819ad68e146101da5780638da5cb5b146101ed57600080fd5b806354fd4d50116100bd57806354fd4d501461016a5780635f259aba14610180578063715018a6146101af57600080fd5b806335914829146100e45780633a41ec641461011c5780634910832f14610155575b600080fd5b6101076100f236600461089b565b60016020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61010761012a36600461089b565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205460ff1690565b61016861016336600461089b565b610287565b005b610172600181565b604051908152602001610113565b61010761018e36600461089b565b60005473ffffffffffffffffffffffffffffffffffffffff91821691161490565b610168610387565b6101076101c536600461089b565b60026020526000908152604090205460ff1681565b6101686101e836600461089b565b610414565b60005460405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610113565b61016861022336600461089b565b61050c565b61016861023636600461089b565b610601565b61010761024936600461089b565b73ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205460ff1690565b61016861028236600461089b565b6106f6565b60005473ffffffffffffffffffffffffffffffffffffffff16331461030d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909217909155517fae26b1cfe9454ba87274a4e8330b6654684362d0f3d7bbd17f7449a1d38387c69190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610408576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b6104126000610826565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517fd400da6c0c0a894dacc0981730b88af0545d00272ee8fff1437bf560ff245fc49190a250565b60005473ffffffffffffffffffffffffffffffffffffffff16331461058d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f1998397e7203f7baca9d6f41b9e4da6e768daac5caad4234fb9bf5869d2715459190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610682576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526001602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f28b01395b7e25d20552a0c8dc8ecd3b1d4abc986f14dad7885fd45b6fd73c8d99190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811661081a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610304565b61082381610826565b50565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156108ad57600080fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146108d157600080fd5b939250505056fea26469706673582212204712efbfe997070def77285a5b8753bc882b62da2133ce1937ad26cd2b48e49864736f6c634300080a003360a060405234801561001057600080fd5b50604051610f50380380610f5083398101604081905261002f916100d7565b6000805460ff19169055806001600160a01b03811661006157604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa15801561009f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100c391906100d7565b6001600160a01b0316608052506101079050565b6000602082840312156100e957600080fd5b81516001600160a01b038116811461010057600080fd5b9392505050565b608051610e1261013e600039600081816101e2015281816102b20152818161040f0152818161057801526108510152610e126000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80638456cb5911610097578063b4ac686011610066578063b4ac686014610217578063c29277cd1461021f578063d914cd4b14610227578063e26b2f631461023a57600080fd5b80638456cb59146101cd57806394144856146101d5578063a50cf2c8146101dd578063ac4afa381461020457600080fd5b80635b16ebb7116100d35780635b16ebb7146101575780635c975abb1461018a578063673a2a1f146101955780636fbc6f6b146101aa57600080fd5b80631e16e4fc146100fa5780633f4ba83a1461013757806354fd4d5014610141575b600080fd5b61010d610108366004610c97565b61024d565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61013f610284565b005b610149600181565b60405190815260200161012e565b61017a610165366004610cb0565b60026020526000908152604090205460ff1681565b604051901515815260200161012e565b60005460ff1661017a565b61019d610372565b60405161012e9190610ced565b61017a6101b8366004610cb0565b60046020526000908152604090205460ff1681565b61013f6103e1565b61019d6104cd565b61010d7f000000000000000000000000000000000000000000000000000000000000000081565b61010d610212366004610c97565b61053a565b600154610149565b600354610149565b61013f610235366004610cb0565b61054a565b61013f610248366004610cb0565b610823565b6003818154811061025d57600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa15801561030e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103329190610d47565b610368576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610370610af6565b565b606060018054806020026020016040519081016040528092919081815260200182805480156103d757602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116103ac575b5050505050905090565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561046b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048f9190610d47565b6104c5576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610370610bd7565b606060038054806020026020016040519081016040528092919081815260200182805480156103d75760200282019190600052602060002090815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116103ac575050505050905090565b6001818154811061025d57600080fd5b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156105d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f89190610d47565b61062e576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051808201909152600281527f5a30000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff82166106b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b60405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff8116600090815260026020908152604091829020548251808401909352600383527f43523100000000000000000000000000000000000000000000000000000000009183019190915260ff1615610753576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b506001805480820182557fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915560008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909417909355915190917ff816b5143086c89d103a0683286be86c2b741e83ebfa75135aae606e2f5c6e5391a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156108ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d19190610d47565b610907576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051808201909152600281527f5a30000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8216610989576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b5073ffffffffffffffffffffffffffffffffffffffff8116600090815260046020908152604091829020548251808401909352600383527f43523200000000000000000000000000000000000000000000000000000000009183019190915260ff1615610a23576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b506003805460018082019092557fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915560008181526004602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909417909355915190917f58ad3cfc4b6552a53c8c4128ae9b080e14b4378a159280643a62c6f709cee24f91a250565b60005460ff16610b62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016106b0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff1615610c44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016106b0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610bad3390565b600060208284031215610ca957600080fd5b5035919050565b600060208284031215610cc257600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610ce657600080fd5b9392505050565b6020808252825182820181905260009190848201906040850190845b81811015610d3b57835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101610d09565b50909695505050505050565b600060208284031215610d5957600080fd5b81518015158114610ce657600080fd5b600060208083528351808285015260005b81811015610d9657858101830151858201604001528201610d7a565b81811115610da8576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea26469706673582212208f2d91c863db9ab1494a9c5db20e3fddc4b6c779ea3c3621737c105c60d9440a64736f6c634300080a003360e06040523480156200001157600080fd5b5060405162004da638038062004da6833981016040819052620000349162000160565b6001600160a01b0381166200005c57604051635919af9760e11b815260040160405180910390fd5b6001600160a01b03811660808190526040805163c513c9bb60e01b8152905163c513c9bb916004808201926020929091908290030181865afa158015620000a7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cd919062000160565b6001600160a01b031660a0816001600160a01b0316815250506080516001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000127573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200014d919062000160565b6001600160a01b031660c0525062000192565b6000602082840312156200017357600080fd5b81516001600160a01b03811681146200018b57600080fd5b9392505050565b60805160a05160c051614b896200021d6000396000818161018801528181611c4f0152612c5a0152600081816101ed015281816115e201528181611f5f0152818161213f0152818161223f0152818161243801528181612604015281816126bc01528181612788015281816129a501528181613c410152613d000152600061013c0152614b896000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c806354fd4d5011610081578063a80deda31161005b578063a80deda31461020f578063ae093f3f1461022f578063fc9914cb1461024f57600080fd5b806354fd4d50146101bd578063663b8fdb146101d35780637a0c7b21146101e857600080fd5b80632954018c116100b25780632954018c146101375780634b2f336d146101835780634c472fc9146101aa57600080fd5b80630dbd616d146100d957806313d21cdf146101025780631bcd8fc014610122575b600080fd5b6100ec6100e73660046140fc565b610272565b6040516100f9919061430b565b60405180910390f35b61011561011036600461431e565b6114d4565b6040516100f99190614444565b61012a611f59565b6040516100f99190614453565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100f9565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b61015e6101b83660046140fc565b6121f5565b6101c5600281565b6040519081526020016100f9565b6101db612432565b6040516100f991906146ea565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b61022261021d36600461431e565b6126b5565b6040516100f9919061476a565b61024261023d36600461431e565b612a75565b6040516100f991906147dd565b61026261025d3660046140fc565b613bf7565b60405190151581526020016100f9565b61035f604051806102400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160008152602001606081526020016000815260200160008152602001600015158152602001600081526020016000815260200160008152602001600060ff168152602001600081525090565b600080600080600061037088613cf4565b509450945094509450945060008560ff1660011461041d576040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015284169063e958b70490602401602060405180830381865afa1580156103f4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061041891906147f0565b6104ad565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015286169063e958b70490602401602060405180830381865afa158015610489573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ad91906147f0565b60ff8716610200890181905273ffffffffffffffffffffffffffffffffffffffff808b1660208b01528b811660608b015282168952909150600114156109e9578473ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610538573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055c91906147f0565b73ffffffffffffffffffffffffffffffffffffffff90811660808901526040517fc7de38a600000000000000000000000000000000000000000000000000000000815282821660048201529085169063c7de38a690602401602060405180830381865afa1580156105d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f5919061480d565b60c08801526040517fdfd5946500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015285169063dfd5946590602401602060405180830381865afa158015610666573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068a919061480d565b60e08801526040517f3ce0735500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015260006024830152861690633ce0735590604401602060405180830381865afa92505050801561073c575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526107399181019061480d565b60015b6107455761074c565b6101408801525b6040517f3ce0735500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015260016024830152861690633ce0735590604401602060405180830381865afa9250505080156107f9575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526107f69181019061480d565b60015b61080257610809565b6101608801525b60c08701516040517f996329f800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526024820192909252600060448201529086169063996329f89060640160a060405180830381865afa9250505080156108c4575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526108c191810190614826565b60015b6108cd576108da565b505015156101808a015250505b8073ffffffffffffffffffffffffffffffffffffffff16631afbb7a46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610925573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610949919061480d565b6101a08801526040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152851690633192195c90602401602060405180830381865afa1580156109bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109df919061480d565b60a0880152610c26565b8273ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5891906147f0565b73ffffffffffffffffffffffffffffffffffffffff90811660808901526040517fc7de38a600000000000000000000000000000000000000000000000000000000815282821660048201529083169063c7de38a6906024016040805180830381865afa158015610acc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af09190614866565b5060c08801526040517fdfd5946500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015283169063dfd5946590602401602060405180830381865afa158015610b62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b86919061480d565b60e08801526040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152841690633192195c906024016040805180830381865afa158015610bf6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1a9190614866565b60a08901526101a08801525b60008660ff16600114610ca7578373ffffffffffffffffffffffffffffffffffffffff166316f0115b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca291906147f0565b610d16565b8573ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1691906147f0565b90508073ffffffffffffffffffffffffffffffffffffffff166345d31f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d87919061480d565b6101008901526000600160ff891614610e0e578473ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610de5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e09919061480d565b610e7d565b8573ffffffffffffffffffffffffffffffffffffffff166320a05ff76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7d919061480d565b90508760ff16600114610f1f576040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152861690638991b2f190602401602060405180830381865afa158015610ef6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1a919061480d565b610faf565b6040517fb451cecc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015287169063b451cecc90602401602060405180830381865afa158015610f8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610faf919061480d565b6102208a01528067ffffffffffffffff811115610fce57610fce61488a565b60405190808252806020026020018201604052801561103e57816020015b6040805160808101825260008082526020808301829052928201819052606082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181610fec5790505b506101208a015260005b818110156113d657604080516080810182526000808252602082018190529181018290526060810191909152600180831b9060ff8c1614156111c5576040517faf0a650200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018590528a169063af0a650290604401608060405180830381865afa1580156110f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111b91906148b9565b5050602084015273ffffffffffffffffffffffffffffffffffffffff9081168084526040517ff9eaee0d0000000000000000000000000000000000000000000000000000000081526004810191909152908a169063f9eaee0d90602401602060405180830381865afa158015611195573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b9919061490d565b15156040830152611388565b6040517f172c48c70000000000000000000000000000000000000000000000000000000081526004810184905273ffffffffffffffffffffffffffffffffffffffff89169063172c48c7906024016040805180830381865afa15801561122f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112539190614928565b5073ffffffffffffffffffffffffffffffffffffffff9081168084526040517f70a082310000000000000000000000000000000000000000000000000000000081529188166004830152906370a0823190602401602060405180830381865afa1580156112c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e8919061480d565b602083015281516040517ff9eaee0d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529088169063f9eaee0d90602401602060405180830381865afa15801561135c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611380919061490d565b151560408301525b6102208c015181161561139c57600161139f565b60005b151560608301526101208c01518051839190859081106113c1576113c161495e565b60209081029190910101525050600101611048565b508273ffffffffffffffffffffffffffffffffffffffff166317d11a156040518163ffffffff1660e01b8152600401602060405180830381865afa158015611422573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611446919061480d565b896101c00181815250508273ffffffffffffffffffffffffffffffffffffffff16633dc54b406040518163ffffffff1660e01b8152600401602060405180830381865afa15801561149b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bf919061480d565b6101e08a015250969998505050505050505050565b61159b604051806102000160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600060ff1681525090565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015283917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa15801561162b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164f919061490d565b611685576040517fd384b23800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316808352604080517ffe14112d000000000000000000000000000000000000000000000000000000008152905185929163fe14112d9160048083019260209291908290030181865afa1580156116f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611719919061480d565b8360c00181815250508073ffffffffffffffffffffffffffffffffffffffff1663ef8d96036040518163ffffffff1660e01b8152600401602060405180830381865afa15801561176d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611791919061480d565b8360e00181815250508073ffffffffffffffffffffffffffffffffffffffff1663743753596040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611809919061480d565b8360a00181815250508073ffffffffffffffffffffffffffffffffffffffff16634c19386c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561185d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611881919061480d565b836101000181815250508073ffffffffffffffffffffffffffffffffffffffff1663788c6bfe6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fa919061480d565b836101600181815250508073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561194f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611973919061480d565b8360800181815250508073ffffffffffffffffffffffffffffffffffffffff166345d31f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119eb919061480d565b836101400181815250508073ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6491906147f0565b836040019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff166336dda7d56040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0a91906147f0565b836060019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663788c6bfe6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb0919061480d565b836101600181815250508073ffffffffffffffffffffffffffffffffffffffff1663e941fa786040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c29919061480d565b61018084015260408084015173ffffffffffffffffffffffffffffffffffffffff9081167f000000000000000000000000000000000000000000000000000000000000000082161460208087019190915282517f609ae31700000000000000000000000000000000000000000000000000000000815292519184169263609ae31792600480830193928290030181865afa158015611ccb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cef919061480d565b836101c00181815250508073ffffffffffffffffffffffffffffffffffffffff1663dbcb313b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d68919061480d565b836101a00181815250506000836060015173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de7919061480d565b6040517f5427c9380000000000000000000000000000000000000000000000000000000081526004810182905290915060009073ffffffffffffffffffffffffffffffffffffffff841690635427c93890602401602060405180830381865afa158015611e58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7c919061480d565b90508015611ec7576101808501518190611eb890611e9c906127106149bc565b876101000151886101400151611eb291906149d3565b90613fd0565b611ec29190614a3f565b611ece565b8461014001515b856101200181815250508273ffffffffffffffffffffffffffffffffffffffff166354fd4d506040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f47919061480d565b60ff166101e086015250505050919050565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b4ac68606040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fec919061480d565b90508067ffffffffffffffff8111156120075761200761488a565b6040519080825280602002602001820160405280156120ff57816020015b6120ec604051806102000160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600060ff1681525090565b8152602001906001900390816120255790505b50915060005b818110156121f0576040517fac4afa38000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ac4afa3890602401602060405180830381865afa15801561219b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121bf91906147f0565b90506121ca816114d4565b8483815181106121dc576121dc61495e565b602090810291909101015250600101612105565b505090565b6040517f6fbc6f6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015260009184917f00000000000000000000000000000000000000000000000000000000000000001690636fbc6f6b90602401602060405180830381865afa158015612286573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122aa919061490d565b6122e0576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060006122ee87613cf4565b5050935093505092508260ff16600114612397576040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015282169063fdd5764590602401602060405180830381865afa15801561236e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061239291906147f0565b612427565b6040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015283169063fdd5764590602401602060405180830381865afa158015612403573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061242791906147f0565b979650505050505050565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c29277cd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124c5919061480d565b90508067ffffffffffffffff8111156124e0576124e061488a565b6040519080825280602002602001820160405280156125c457816020015b60408051610260810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083018290526101208301819052610140830181905261016083015261018082018190526101a082018190526101c082018190526101e082018190526102008201819052610220820181905261024082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816124fe5790505b50915060005b818110156121f0576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa158015612660573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061268491906147f0565b905061268f81612a75565b8483815181106126a1576126a161495e565b6020908102919091010152506001016125ca565b60606000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c29277cd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612725573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612749919061480d565b905060005b81811015612829576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa1580156127e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061280891906147f0565b90506128148187613bf7565b15612820578360010193505b5060010161274e565b508167ffffffffffffffff8111156128435761284361488a565b60405190808252806020026020018201604052801561296157816020015b61294e604051806102400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160008152602001606081526020016000815260200160008152602001600015158152602001600081526020016000815260200160008152602001600060ff168152602001600081525090565b8152602001906001900390816128615790505b5092506000915060005b81811015612a6d576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa158015612a01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a2591906147f0565b9050612a318187613bf7565b15612a6457612a408187610272565b858581518110612a5257612a5261495e565b60209081029190910101526001909301925b5060010161296b565b505050919050565b604080516102608101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082018390526101208201819052610140820181905261016082015261018081018290526101a081018290526101c081018290526101e08101829052610200810182905261022081018290526102408101829052908080808080612b1b88613cf4565b73ffffffffffffffffffffffffffffffffffffffff8e168d5260ff86166101808e01819052959b50939950919750955093509150600114612bca578273ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ba1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bc591906147f0565b612c39565b8473ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c3991906147f0565b73ffffffffffffffffffffffffffffffffffffffff908116602089018190527f00000000000000000000000000000000000000000000000000000000000000009091161460408801526000600160ff881614612d03578373ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cfe91906147f0565b612d72565b8573ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d7291906147f0565b6040517f2e97ca2100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b8116600483015291925090821690632e97ca2190602401602060405180830381865afa158015612de2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e06919061490d565b15156060890152604080517f45d31f9d000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff8316916345d31f9d9160048083019260209291908290030181865afa158015612e78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e9c919061480d565b8860800181815250508073ffffffffffffffffffffffffffffffffffffffff1663743753596040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ef0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f14919061480d565b610100890152600160ff88161415613017578573ffffffffffffffffffffffffffffffffffffffff16639b2cb5d86040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f95919061480d565b8860a00181815250508573ffffffffffffffffffffffffffffffffffffffff16635f48f3936040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fe9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061300d919061480d565b60c08901526130a5565b8273ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa158015613061573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130859190614a73565b6fffffffffffffffffffffffffffffffff90811660c08b01521660a08901525b60008760ff16600114613126578473ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613121919061480d565b613195565b8573ffffffffffffffffffffffffffffffffffffffff166320a05ff76040518163ffffffff1660e01b8152600401602060405180830381865afa158015613171573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613195919061480d565b90508067ffffffffffffffff8111156131b0576131b061488a565b6040519080825280602002602001820160405280156131d9578160200160208202803683370190505b506101208a01528067ffffffffffffffff8111156131f9576131f961488a565b604051908082528060200260200182016040528015613222578160200160208202803683370190505b506101608a015260005b818110156134c4578860ff16600114156133b4576040517f5e5f2e260000000000000000000000000000000000000000000000000000000081526004810182905260009073ffffffffffffffffffffffffffffffffffffffff891690635e5f2e2690602401602060405180830381865afa1580156132ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132d291906147f0565b9050808b610120015183815181106132ec576132ec61495e565b73ffffffffffffffffffffffffffffffffffffffff92831660209182029290920101526040517f78327438000000000000000000000000000000000000000000000000000000008152828216600482015290891690637832743890602401602060405180830381865afa158015613367573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061338b919061480d565b8b610160015183815181106133a2576133a261495e565b602002602001018181525050506134bc565b6040517f172c48c70000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff87169063172c48c7906024016040805180830381865afa15801561341e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134429190614928565b8061ffff1690508b610120015183815181106134605761346061495e565b602002602001018c6101600151848151811061347e5761347e61495e565b60200260200101828152508273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525050505b60010161322c565b5060008860ff16600114613546578373ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561351d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613541919061480d565b6135b5565b8673ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613591573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135b5919061480d565b90508067ffffffffffffffff8111156135d0576135d061488a565b60405190808252806020026020018201604052801561361557816020015b60408051808201909152600080825260208201528152602001906001900390816135ee5790505b506101408b015260005b818110156139015760408051808201909152600080825260208201528a60ff166001146136da576040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff871690635094cb4f90602401602060405180830381865afa1580156136b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136d591906147f0565b613769565b6040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff8a1690635094cb4f90602401602060405180830381865afa158015613745573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061376991906147f0565b73ffffffffffffffffffffffffffffffffffffffff168152600160ff8c16146138245780516040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529089169063fdd5764590602401602060405180830381865afa1580156137fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061381f91906147f0565b6138b7565b80516040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152908a169063fdd5764590602401602060405180830381865afa158015613893573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138b791906147f0565b73ffffffffffffffffffffffffffffffffffffffff1660208201526101408c01518051829190849081106138ed576138ed61495e565b60209081029190910101525060010161361f565b508860ff166001141561398f578773ffffffffffffffffffffffffffffffffffffffff1663b2c53a6c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613959573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061397d919061480d565b60e08b015260ff6102408b0152613be9565b73ffffffffffffffffffffffffffffffffffffffff85166101a08b01819052604080517f9408b63f0000000000000000000000000000000000000000000000000000000081529051639408b63f916004808201926020929091908290030181865afa158015613a02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a2691906147f0565b8a6101e0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508473ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015613aa9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613acd9190614aa6565b5015156102008c015250604080517f9fd12b77000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff881691639fd12b779160048083019260209291908290030181865afa158015613b42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b66919061480d565b8a6102200181815250508573ffffffffffffffffffffffffffffffffffffffff16638345f26e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bdf9190614af7565b60ff166102408b01525b505050505050505050919050565b6040517f6fbc6f6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015260009184917f00000000000000000000000000000000000000000000000000000000000000001690636fbc6f6b90602401602060405180830381865afa158015613c88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cac919061490d565b613ce2576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613cec8484614023565b949350505050565b600080600080600080867f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636fbc6f6b826040518263ffffffff1660e01b8152600401613d73919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa158015613d90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613db4919061490d565b613dea576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8773ffffffffffffffffffffffffffffffffffffffff166354fd4d506040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e59919061480d565b96508660ff1660011415613ee0578795508573ffffffffffffffffffffffffffffffffffffffff1663f93f515b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613eb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ed991906147f0565b9450613fc6565b8793508373ffffffffffffffffffffffffffffffffffffffff16632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f5291906147f0565b92508373ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fc391906147f0565b91505b5091939550919395565b6000821580613fdd575081155b15613fea5750600061401d565b612710613ff8600282614b1a565b61ffff1661400684866149d3565b6140109190614b3b565b61401a9190614a3f565b90505b92915050565b6040517f055ee9b500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600091829185169063055ee9b590602401602060405180830381865afa158015614094573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140b891906147f0565b73ffffffffffffffffffffffffffffffffffffffff1614159392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146140f957600080fd5b50565b6000806040838503121561410f57600080fd5b823561411a816140d7565b9150602083013561412a816140d7565b809150509250929050565b600081518084526020808501945080840160005b8381101561419f578151805173ffffffffffffffffffffffffffffffffffffffff168852838101518489015260408082015115159089015260609081015115159088015260809096019590820190600101614149565b509495945050505050565b805173ffffffffffffffffffffffffffffffffffffffff168252600061024060208301516141f0602086018273ffffffffffffffffffffffffffffffffffffffff169052565b506040830151614204604086018215159052565b50606083015161422c606086018273ffffffffffffffffffffffffffffffffffffffff169052565b506080830151614254608086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060a083015160a085015260c083015160c085015260e083015160e085015261010080840151818601525061012080840151828287015261429783870182614135565b92505050610140808401518186015250610160808401518186015250610180808401516142c78287018215159052565b50506101a083810151908501526101c080840151908501526101e080840151908501526102008084015160ff16908501526102209283015192909301919091525090565b60208152600061401a60208301846141aa565b60006020828403121561433057600080fd5b813561433b816140d7565b9392505050565b805173ffffffffffffffffffffffffffffffffffffffff168252602081015161436f602084018215159052565b506040810151614397604084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060608101516143bf606084018273ffffffffffffffffffffffffffffffffffffffff169052565b506080818101519083015260a0808201519083015260c0808201519083015260e08082015190830152610100808201519083015261012080820151908301526101408082015190830152610160808201519083015261018080820151908301526101a080820151908301526101c080820151908301526101e09081015160ff16910152565b610200810161401d8284614342565b6020808252825182820181905260009190848201906040850190845b8181101561449657614482838551614342565b92840192610200929092019160010161446f565b50909695505050505050565b600081518084526020808501945080840160005b8381101561419f57815173ffffffffffffffffffffffffffffffffffffffff16875295820195908201906001016144b6565b600081518084526020808501945080840160005b8381101561419f578151805173ffffffffffffffffffffffffffffffffffffffff9081168952908401511683880152604090960195908201906001016144fc565b600081518084526020808501945080840160005b8381101561419f57815187529582019590820190600101614551565b805173ffffffffffffffffffffffffffffffffffffffff168252600061026060208301516145b3602086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060408301516145c7604086018215159052565b5060608301516145db606086018215159052565b506080830151608085015260a083015160a085015260c083015160c085015260e083015160e0850152610100808401518186015250610120808401518282870152614628838701826144a2565b92505050610140808401518583038287015261464483826144e8565b925050506101608084015185830382870152614660838261453d565b92505050610180808401516146798287018260ff169052565b50506101a08381015173ffffffffffffffffffffffffffffffffffffffff908116918601919091526101c0808501511515908601526101e080850151909116908501526102008084015115159085015261022080840151908501526102409283015160ff1692909301919091525090565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561475d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc088860301845261474b85835161456d565b94509285019290850190600101614711565b5092979650505050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561475d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08886030184526147cb8583516141aa565b94509285019290850190600101614791565b60208152600061401a602083018461456d565b60006020828403121561480257600080fd5b815161433b816140d7565b60006020828403121561481f57600080fd5b5051919050565b600080600080600060a0868803121561483e57600080fd5b5050835160208501516040860151606087015160809097015192989197509594509092509050565b6000806040838503121561487957600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080600080608085870312156148cf57600080fd5b84516148da816140d7565b60208601516040870151606090970151919890975090945092505050565b8051801515811461490857600080fd5b919050565b60006020828403121561491f57600080fd5b61401a826148f8565b6000806040838503121561493b57600080fd5b8251614946816140d7565b602084015190925061ffff8116811461412a57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156149ce576149ce61498d565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614a0b57614a0b61498d565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614a4e57614a4e614a10565b500490565b80516fffffffffffffffffffffffffffffffff8116811461490857600080fd5b60008060408385031215614a8657600080fd5b614a8f83614a53565b9150614a9d60208401614a53565b90509250929050565b600080600060608486031215614abb57600080fd5b614ac484614a53565b9250614ad2602085016148f8565b9150604084015164ffffffffff81168114614aec57600080fd5b809150509250925092565b600060208284031215614b0957600080fd5b815160ff8116811461433b57600080fd5b600061ffff80841680614b2f57614b2f614a10565b92169190910492915050565b60008219821115614b4e57614b4e61498d565b50019056fea2646970667358221220d15108d0bec9cc6f3903875dd8412869a3da1b36661bdc780e2e2f0ae3136d2464736f6c634300080a003360a06040523480156200001157600080fd5b5060405162001b4538038062001b45833981016040819052620000349162000608565b6000805460ff19169055816001600160a01b0381166200006757604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cc91906200070a565b6001600160a01b031660805250805160005b818110156200014257620001398382815181106200010057620001006200072f565b6020026020010151600001518483815181106200012157620001216200072f565b6020026020010151602001516200014c60201b60201c565b600101620000de565b5050505062000822565b6001600160a01b03821615806200016a57506001600160a01b038116155b156200018957604051635919af9760e11b815260040160405180910390fd5b620001a8826001600160a01b0316620004ba60201b620006751760201c565b620001d65760405163df4c572d60e01b81526001600160a01b03831660048201526024015b60405180910390fd5b620001f5816001600160a01b0316620004ba60201b620006751760201c565b6200021f5760405163df4c572d60e01b81526001600160a01b0382166004820152602401620001cd565b806001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200027c575060408051601f3d908101601f19168201909252620002799181019062000745565b60015b6200029a576040516367a7cd4360e01b815260040160405180910390fd5b8060ff16600814620002bf576040516367a7cd4360e01b815260040160405180910390fd5b506000816001600160a01b031663d62ada116040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200031f575060408051601f3d908101601f191682019092526200031c918101906200076a565b60015b6200032a576200032d565b90505b6000836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200038c575060408051601f3d908101601f19168201909252620003899181019062000745565b60015b620003aa5760405163528ca31d60e01b815260040160405180910390fd5b60128160ff161115620003d05760405163528ca31d60e01b815260040160405180910390fd5b9050826001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa9250505080156200042f575060408051601f3d908101601f191682019092526200042c91810190620007a6565b60015b6200044d576040516367a7cd4360e01b815260040160405180910390fd5b8662000461576200046185858484620004c0565b5050505050620004748484848462000526565b826001600160a01b0316846001600160a01b03167fe263805b03657ab13064915d0723c5ce14981547e7cba5283f66b9e5d81f6e6e60405160405180910390a350505050565b3b151590565b60008313620004e2576040516356e05d2b60e01b815260040160405180910390fd5b836001600160501b0316816001600160501b0316108062000501575081155b15620005205760405163b1cf675560e01b815260040160405180910390fd5b50505050565b6001600160a01b03831682156200053e57600160a11b175b6200055460ff60a21b60a284901b1682620007fb565b6001600160a01b0390951660009081526001602052604090209490945550505050565b80516001600160a01b03811681146200058f57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715620005cf57620005cf62000594565b60405290565b604051601f8201601f191681016001600160401b038111828210171562000600576200060062000594565b604052919050565b60008060408084860312156200061d57600080fd5b620006288462000577565b602085810151919450906001600160401b03808211156200064857600080fd5b818701915087601f8301126200065d57600080fd5b81518181111562000672576200067262000594565b62000682848260051b01620005d5565b818152848101925060069190911b830184019089821115620006a357600080fd5b928401925b81841015620006fa5785848b031215620006c25760008081fd5b620006cc620005aa565b620006d78562000577565b8152620006e686860162000577565b8187015283529285019291840191620006a8565b8096505050505050509250929050565b6000602082840312156200071d57600080fd5b620007288262000577565b9392505050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156200075857600080fd5b815160ff811681146200072857600080fd5b6000602082840312156200077d57600080fd5b815180151581146200072857600080fd5b80516001600160501b03811681146200058f57600080fd5b600080600080600060a08688031215620007bf57600080fd5b620007ca866200078e565b9450602086015193506040860151925060608601519150620007ef608087016200078e565b90509295509295909350565b600082198211156200081d57634e487b7160e01b600052601160045260246000fd5b500190565b6080516112f262000853600039600081816101b201528181610280015281816103e201526104ff01526112f26000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c80638456cb591161008c578063b66102df11610066578063b66102df146101d4578063e8a97a3e146101e7578063f190e5fa146101fa578063f9a650301461023f57600080fd5b80638456cb591461016d5780639dcb511a14610175578063a50cf2c8146101ad57600080fd5b80635c975abb116100bd5780635c975abb1461011c5780635cecbd0e146101325780637afb01041461015a57600080fd5b80633f4ba83a146100e457806341976e09146100ee57806354fd4d5014610114575b600080fd5b6100ec610252565b005b6101016100fc366004610f28565b610340565b6040519081526020015b60405180910390f35b610101600281565b60005460ff16604051901515815260200161010b565b610145610140366004610f4a565b610352565b6040805192835260208301919091520161010b565b610101610168366004610f90565b610376565b6100ec6103b4565b610188610183366004610f28565b6104a0565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010b565b6101887f000000000000000000000000000000000000000000000000000000000000000081565b6101016101e2366004610fbc565b6104b4565b6100ec6101f5366004610ff8565b6104d1565b61020d610208366004610f28565b6105c3565b6040805173ffffffffffffffffffffffffffffffffffffffff909416845291151560208401529082015260600161010b565b61010161024d366004610f90565b61064d565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156102dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103009190611022565b610336576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033e61067b565b565b600061034b82610761565b5092915050565b60008061035f868661064d565b915061036b848461064d565b905094509492505050565b600080600061038484610761565b90925090508161039582600a611193565b61039f908761119f565b6103a991906111dc565b925050505b92915050565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561043e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104629190611022565b610498576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033e610819565b60006104ab826105c3565b50909392505050565b60006104c96104c3858561064d565b83610376565b949350505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561055b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057f9190611022565b6105b5576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105bf82826108d9565b5050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600160205260408120548190819080610624576040517f4bb8ad8200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b947402000000000000000000000000000000000000000086161515945060a286901c9350915050565b600080600061065b84610761565b909250905061066b81600a611193565b61039f838761119f565b3b151590565b60005460ff166106ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b600080600080610770856105c3565b8095508193508294505050506000806000808573ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156107cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f19190611231565b9450945050935093508461080b5761080b84848484610dd9565b829750505050505050915091565b60005460ff1615610886576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016106e3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586107373390565b73ffffffffffffffffffffffffffffffffffffffff82161580610910575073ffffffffffffffffffffffffffffffffffffffff8116155b15610947576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82163b6109ad576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016106e3565b73ffffffffffffffffffffffffffffffffffffffff81163b610a13576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024016106e3565b8073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610a98575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610a9591810190611281565b60015b610ace576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060ff16600814610b0b576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060008173ffffffffffffffffffffffffffffffffffffffff1663d62ada116040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610b93575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610b9091810190611022565b60015b610b9c57610b9f565b90505b60008373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610c26575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610c2391810190611281565b60015b610c5c576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60128160ff161115610c9a576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b90508273ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa925050508015610d21575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610d1e91810190611231565b60015b610d57576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b86610d6857610d6885858484610dd9565b5050505050610d7984848484610e74565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fe263805b03657ab13064915d0723c5ce14981547e7cba5283f66b9e5d81f6e6e60405160405180910390a350505050565b60008313610e13576040517f56e05d2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8369ffffffffffffffffffff168169ffffffffffffffffffff161080610e37575081155b15610e6e576040517fb1cf675500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b73ffffffffffffffffffffffffffffffffffffffff83168215610ea95774020000000000000000000000000000000000000000175b610ecf7503fc000000000000000000000000000000000000000060a284901b16826112a4565b73ffffffffffffffffffffffffffffffffffffffff90951660009081526001602052604090209490945550505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610f2357600080fd5b919050565b600060208284031215610f3a57600080fd5b610f4382610eff565b9392505050565b60008060008060808587031215610f6057600080fd5b84359350610f7060208601610eff565b925060408501359150610f8560608601610eff565b905092959194509250565b60008060408385031215610fa357600080fd5b82359150610fb360208401610eff565b90509250929050565b600080600060608486031215610fd157600080fd5b83359250610fe160208501610eff565b9150610fef60408501610eff565b90509250925092565b6000806040838503121561100b57600080fd5b61101483610eff565b9150610fb360208401610eff565b60006020828403121561103457600080fd5b81518015158114610f4357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b808511156110cc57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156110b2576110b2611044565b808516156110bf57918102915b93841c9390800290611078565b509250929050565b6000826110e3575060016103ae565b816110f0575060006103ae565b816001811461110657600281146111105761112c565b60019150506103ae565b60ff84111561112157611121611044565b50506001821b6103ae565b5060208310610133831016604e8410600b841016171561114f575081810a6103ae565b6111598383611073565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561118b5761118b611044565b029392505050565b6000610f4383836110d4565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156111d7576111d7611044565b500290565b600082611212577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b805169ffffffffffffffffffff81168114610f2357600080fd5b600080600080600060a0868803121561124957600080fd5b61125286611217565b945060208601519350604086015192506060860151915061127560808701611217565b90509295509295909350565b60006020828403121561129357600080fd5b815160ff81168114610f4357600080fd5b600082198211156112b7576112b7611044565b50019056fea2646970667358221220e7485a2cb5750973f539ca59d2211008b42bb92b6c49605a53f5d9c88c330fb164736f6c634300080a003360e06040523480156200001157600080fd5b5060405162002ced38038062002ced8339810160408190526200003491620004bb565b6000805460ff19169055806001600160a01b0381166200006757604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cc9190620004bb565b6001600160a01b039081166080526001805560408051808201909152600281526105a360f41b602082015291508216620001245760405162461bcd60e51b81526004016200011b9190620004ed565b60405180910390fd5b50806001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000164573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200018a9190620004bb565b6001600160a01b031660c052604051620001a490620004ad565b604051809103906000f080158015620001c1573d6000803e3d6000fd5b506001600160a01b031660a08190526040805163204a7f0760e21b81529051638129fc1c9160048082019260009290919082900301818387803b1580156200020857600080fd5b505af11580156200021d573d6000803e3d6000fd5b50505050620002316200028a60201b60201c565b50600454600380546001600160a01b039092166001600160a01b03199283161790556000805260026020527fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b8054909116905562000545565b6000620002a460a0516200038c60201b6200119b1760201c565b9050806001600160a01b0316638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620002e257600080fd5b505af1158015620002f7573d6000803e3d6000fd5b5050600480546001600160a01b03908116600090815260026020908152604090912080546001600160a01b03199081169388169384179091558354169091179091556200035492506005915083906200043b811b6200127d17901c565b506040516001600160a01b038216907f9f69b6c10f6810213e055b0ba6bc0a4e2603f73c221aad77ea35da819cda7dc390600090a250565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260601b60148201526e5af43d82803e903d91602b57fd5bf360881b60288201526037816000f09150506001600160a01b038116620004365760405162461bcd60e51b815260206004820152601660248201527f455243313136373a20637265617465206661696c65640000000000000000000060448201526064016200011b565b919050565b600062000452836001600160a01b0384166200045b565b90505b92915050565b6000818152600183016020526040812054620004a45750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000455565b50600062000455565b610e788062001e7583390190565b600060208284031215620004ce57600080fd5b81516001600160a01b0381168114620004e657600080fd5b9392505050565b600060208083528351808285015260005b818110156200051c57858101830151858201604001528201620004fe565b818111156200052f576000604083870101525b50601f01601f1916929092016040019392505050565b60805160a05160c0516118cf620005a66000396000818161026a015281816103680152610b7001526000818161020201526110650152600081816102c4015281816105b80152818161099601528181610a840152610e7401526118cf6000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806388f64c54116100cd578063b193976311610081578063d82ecc4811610066578063d82ecc4814610309578063e3ba9ace1461031c578063f23953ab1461032f57600080fd5b8063b1939763146102f9578063b60e85181461030157600080fd5b80638f7dcfa3116100b25780638f7dcfa31461029f578063a50cf2c8146102bf578063a904aab6146102e657600080fd5b806388f64c541461026557806389b77b3e1461028c57600080fd5b806354fd4d50116101245780635da33c5b116101095780635da33c5b146101fd578063765e0159146102245780638456cb591461025d57600080fd5b806354fd4d50146101d05780635c975abb146101e657600080fd5b806313d8c8401461015657806321d18456146101a05780632932472f146101b35780633f4ba83a146101c8575b600080fd5b6004546101769073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6101766101ae366004611651565b610337565b6101c66101c1366004611697565b61058a565b005b6101c6610968565b6101d8600181565b604051908152602001610197565b60005460ff165b6040519015158152602001610197565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101766102323660046116da565b73ffffffffffffffffffffffffffffffffffffffff9081166000908152600260205260409020541690565b6101c6610a56565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101c661029a3660046116da565b610b42565b6003546101769073ffffffffffffffffffffffffffffffffffffffff1681565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101c66102f4366004611697565b610e46565b6101d8610fb8565b6101d8611033565b6101ed6103173660046116da565b611044565b61017661032a3660046116f5565b611051565b6101c661105e565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa1580156103c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103e8919061170e565b6040518060400160405280600281526020017f43500000000000000000000000000000000000000000000000000000000000008152509061045f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b60405180910390fd5b506104686112a6565b6003805473ffffffffffffffffffffffffffffffffffffffff8082166000818152600260205260409081902080549093167fffffffffffffffffffffffff0000000000000000000000000000000000000000948516179094558154909216905590517fc75b5a710000000000000000000000000000000000000000000000000000000081523360048201526024810185905260448101849052819063c75b5a7190606401600060405180830381600087803b15801561052657600080fd5b505af115801561053a573d6000803e3d6000fd5b505060405133925073ffffffffffffffffffffffffffffffffffffffff841691507ff3ede7039176503a8ad1fe7cfaa29475a9dbe0cdcaf04ecf9a5c10570c47b10390600090a390505b92915050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610614573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610638919061170e565b61066e576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106766112a6565b60035473ffffffffffffffffffffffffffffffffffffffff838116911614156106fa576003805473ffffffffffffffffffffffffffffffffffffffff808216600090815260026020526040902080549091167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092558154169055610865565b73ffffffffffffffffffffffffffffffffffffffff838116600090815260026020908152604091829020548251808401909352600383527f4146330000000000000000000000000000000000000000000000000000000000918301919091529091848116911614610798576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b5060045473ffffffffffffffffffffffffffffffffffffffff838116911614156107fd57600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85161790555b73ffffffffffffffffffffffffffffffffffffffff828116600081815260026020526040808220805488861684529183208054929095167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790945591905281541690555b6040517fc75b5a7100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600060248301819052604483015283169063c75b5a7190606401600060405180830381600087803b1580156108dc57600080fd5b505af11580156108f0573d6000803e3d6000fd5b505050506109088260056112dd90919063ffffffff16565b508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f25e267469ba2ae82515be7b3d45df60bf8308343f0809e8cf7319058e2255ce660405160405180910390a3505050565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156109f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a16919061170e565b610a4c576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a546112ff565b565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015610ae0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b04919061170e565b610b3a576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a546113e0565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa158015610bcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf0919061170e565b6040518060400160405280600281526020017f435000000000000000000000000000000000000000000000000000000000000081525090610c5e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b50610c6a6005826114a0565b6040518060400160405280600381526020017f414634000000000000000000000000000000000000000000000000000000000081525090610cd8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b50438173ffffffffffffffffffffffffffffffffffffffff16633dc54b406040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4991906117a3565b14156040518060400160405280600381526020017f414631000000000000000000000000000000000000000000000000000000000081525090610db9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b506004805473ffffffffffffffffffffffffffffffffffffffff90811660009081526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081169487169485179091558454168317909355915190917fced6ab9afc868b3a088366f6631ae20752993b5cce5d5f0534ea5a59fcc57d5691a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610ed0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef4919061170e565b610f2a576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f19a1603900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301528416906319a1603990604401600060405180830381600087803b158015610f9b57600080fd5b505af1158015610faf573d6000803e3d6000fd5b50505050505050565b600354600090819073ffffffffffffffffffffffffffffffffffffffff165b73ffffffffffffffffffffffffffffffffffffffff81161561102d5773ffffffffffffffffffffffffffffffffffffffff9081166000908152600260205260409020541681611025816117eb565b925050610fd7565b50919050565b600061103f60056114cf565b905090565b60006105846005836114a0565b60006105846005836114d9565b60006110897f000000000000000000000000000000000000000000000000000000000000000061119b565b90508073ffffffffffffffffffffffffffffffffffffffff16638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156110d357600080fd5b505af11580156110e7573d6000803e3d6000fd5b50506004805473ffffffffffffffffffffffffffffffffffffffff908116600090815260026020526040902080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811692871692831790915582541617905550611156905060058261127d565b5060405173ffffffffffffffffffffffffffffffffffffffff8216907f9f69b6c10f6810213e055b0ba6bc0a4e2603f73c221aad77ea35da819cda7dc390600090a250565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260601b60148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f091505073ffffffffffffffffffffffffffffffffffffffff8116611278576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f455243313136373a20637265617465206661696c6564000000000000000000006044820152606401610456565b919050565b600061129f8373ffffffffffffffffffffffffffffffffffffffff84166114e5565b9392505050565b60035473ffffffffffffffffffffffffffffffffffffffff90811660009081526002602052604090205416610a5457610a5461105e565b600061129f8373ffffffffffffffffffffffffffffffffffffffff8416611534565b60005460ff1661136b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610456565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff161561144d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610456565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586113b63390565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600183016020526040812054151561129f565b6000610584825490565b600061129f8383611627565b600081815260018301602052604081205461152c57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610584565b506000610584565b6000818152600183016020526040812054801561161d576000611558600183611824565b855490915060009061156c90600190611824565b90508181146115d157600086600001828154811061158c5761158c61183b565b90600052602060002001549050808760000184815481106115af576115af61183b565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806115e2576115e261186a565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610584565b6000915050610584565b600082600001828154811061163e5761163e61183b565b9060005260206000200154905092915050565b6000806040838503121561166457600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff8116811461127857600080fd5b6000806000606084860312156116ac57600080fd5b6116b584611673565b92506116c360208501611673565b91506116d160408501611673565b90509250925092565b6000602082840312156116ec57600080fd5b61129f82611673565b60006020828403121561170757600080fd5b5035919050565b60006020828403121561172057600080fd5b8151801515811461129f57600080fd5b600060208083528351808285015260005b8181101561175d57858101830151858201604001528201611741565b8181111561176f576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b6000602082840312156117b557600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561181d5761181d6117bc565b5060010190565b600082821015611836576118366117bc565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220f1e9c81b8c3af2491c907ee66cf24e1bb76111b821db02df8f98dbb48b5ab5fa64736f6c634300080a0033608060405234801561001057600080fd5b50610e58806100206000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c806354fd4d5011610081578063c45a01551161005b578063c45a0155146101a4578063c75b5a71146101ca578063d1660f99146101dd57600080fd5b806354fd4d501461014f5780638129fc1c14610157578063c12c21c01461015f57600080fd5b80631afbb7a4116100b25780631afbb7a41461011d5780631cff79cd146101265780633dc54b401461014657600080fd5b806316128211146100d957806317d11a15146100ee57806319a160391461010a575b600080fd5b6100ec6100e7366004610b42565b6101f0565b005b6100f760035481565b6040519081526020015b60405180910390f35b6100ec610118366004610b8d565b61024c565b6100f760025481565b610139610134366004610bef565b6102c9565b6040516101019190610d49565b6100f760045481565b6100f7600181565b6100ec610344565b60015461017f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610101565b60005461017f9062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b6100ec6101d8366004610d5c565b610494565b6100ec6101eb366004610d8f565b61053d565b60015473ffffffffffffffffffffffffffffffffffffffff163314610241576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600291909155600355565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1633146102a3576040517fb126b84800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102c573ffffffffffffffffffffffffffffffffffffffff83168260006105b4565b5050565b60015460609073ffffffffffffffffffffffffffffffffffffffff16331461031d576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033d73ffffffffffffffffffffffffffffffffffffffff8416836107b4565b9392505050565b600054610100900460ff1661035f5760005460ff1615610363565b303b155b6103f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600054610100900460ff1615801561043357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000166101011790555b600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16336201000002179055801561049157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b50565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1633146104eb576040517fb126b84800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff949094169390931790925560025560035543600455565b60015473ffffffffffffffffffffffffffffffffffffffff16331461058e576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105af73ffffffffffffffffffffffffffffffffffffffff841683836107f6565b505050565b80158061065457506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015284169063dd62ed3e90604401602060405180830381865afa15801561062e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106529190610dcb565b155b6106e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e63650000000000000000000060648201526084016103eb565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526105af9084907f095ea7b300000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261084c565b606061033d83836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250610958565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526105af9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401610732565b60006108ae826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166109589092919063ffffffff16565b8051909150156105af57808060200190518101906108cc9190610de4565b6105af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016103eb565b6060610967848460008561096f565b949350505050565b606082471015610a01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016103eb565b843b610a69576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016103eb565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051610a929190610e06565b60006040518083038185875af1925050503d8060008114610acf576040519150601f19603f3d011682016040523d82523d6000602084013e610ad4565b606091505b5091509150610ae4828286610aef565b979650505050505050565b60608315610afe57508161033d565b825115610b0e5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103eb9190610d49565b60008060408385031215610b5557600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff81168114610b8857600080fd5b919050565b60008060408385031215610ba057600080fd5b610ba983610b64565b9150610bb760208401610b64565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215610c0257600080fd5b610c0b83610b64565b9150602083013567ffffffffffffffff80821115610c2857600080fd5b818501915085601f830112610c3c57600080fd5b813581811115610c4e57610c4e610bc0565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715610c9457610c94610bc0565b81604052828152886020848701011115610cad57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b83811015610cea578181015183820152602001610cd2565b83811115610cf9576000848401525b50505050565b60008151808452610d17816020860160208601610ccf565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061033d6020830184610cff565b600080600060608486031215610d7157600080fd5b610d7a84610b64565b95602085013595506040909401359392505050565b600080600060608486031215610da457600080fd5b610dad84610b64565b9250610dbb60208501610b64565b9150604084013590509250925092565b600060208284031215610ddd57600080fd5b5051919050565b600060208284031215610df657600080fd5b8151801515811461033d57600080fd5b60008251610e18818460208701610ccf565b919091019291505056fea2646970667358221220448e7046078cd668c09328d857e534e2aab6cdc0e691d3d4f2c8baae8e084b1364736f6c634300080a003360c06040523480156200001157600080fd5b506040516200162738038062001627833981016040819052620000349162000177565b60408051808201909152600281526105a360f41b60208201526001600160a01b038216620000805760405162461bcd60e51b8152600401620000779190620001a9565b60405180910390fd5b50806001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e6919062000177565b6001600160a01b03166080816001600160a01b031681525050806001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200013e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000164919062000177565b6001600160a01b031660a0525062000201565b6000602082840312156200018a57600080fd5b81516001600160a01b0381168114620001a257600080fd5b9392505050565b600060208083528351808285015260005b81811015620001d857858101830151858201604001528201620001ba565b81811115620001eb576000604083870101525b50601f01601f1916929092016040019392505050565b60805160a0516113c2620002656000396000818161021f0152818161036401526106d501526000818160af0152818161012a015281816104420152818161056e015281816107b301528181610aa601528181610b890152610c6701526113c26000f3fe60806040526004361061005e5760003560e01c80635869dba8116100435780635869dba814610199578063deecfbc9146101bb578063e79a4089146101ce57600080fd5b80634f0e0ef31461011857806354fd4d501461017657600080fd5b366101135760408051808201909152600381527f574732000000000000000000000000000000000000000000000000000000000060208201523373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b60405180910390fd5b50005b600080fd5b34801561012457600080fd5b5061014c7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561018257600080fd5b5061018b600181565b60405190815260200161016d565b3480156101a557600080fd5b506101b96101b4366004611263565b6101ee565b005b6101b96101c936600461128f565b61031d565b3480156101da57600080fd5b506101b96101e93660046112e1565b61068e565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201819052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa15801561027b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061029f9190611318565b6040518060400160405280600281526020017f43500000000000000000000000000000000000000000000000000000000000008152509061030d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b506103188383610a77565b505050565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808516600483015284917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa1580156103ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103d19190611318565b6040518060400160405280600281526020017f52500000000000000000000000000000000000000000000000000000000000008152509061043f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e6919061133a565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600381526020017f57473100000000000000000000000000000000000000000000000000000000008152509061056b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156105d457600080fd5b505af11580156105e8573d6000803e3d6000fd5b50505050506105f78434610b3c565b6040517f9aa5d46200000000000000000000000000000000000000000000000000000000815234600482015273ffffffffffffffffffffffffffffffffffffffff848116602483015261ffff84166044830152851690639aa5d46290606401600060405180830381600087803b15801561067057600080fd5b505af1158015610684573d6000803e3d6000fd5b5050505050505050565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808516600483015284917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa15801561071e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107429190611318565b6040518060400160405280600281526020017f5250000000000000000000000000000000000000000000000000000000000000815250906107b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610833573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610857919061133a565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600381526020017f5747310000000000000000000000000000000000000000000000000000000000815250906108dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b506109703330858773ffffffffffffffffffffffffffffffffffffffff166336dda7d56040518163ffffffff1660e01b8152600401602060405180830381865afa15801561092e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610952919061133a565b73ffffffffffffffffffffffffffffffffffffffff16929190610cd4565b6040517f05fe138b0000000000000000000000000000000000000000000000000000000081526004810184905230602482015260009073ffffffffffffffffffffffffffffffffffffffff8616906305fe138b906044016020604051808303816000875af11580156109e6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0a9190611357565b9050610a168382610a77565b8273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f6de63bb986f2779478e384365c03cc2e62f06b453856acca87d5a519ce02664960405160405180910390a35050505050565b6040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632e1a7d4d90602401600060405180830381600087803b158015610aff57600080fd5b505af1158015610b13573d6000803e3d6000fd5b50610b389250505073ffffffffffffffffffffffffffffffffffffffff831682610d6f565b5050565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015282917f00000000000000000000000000000000000000000000000000000000000000009091169063dd62ed3e90604401602060405180830381865afa158015610bd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf69190611357565b1015610b38576040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303816000875af1158015610cb0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103189190611318565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052610d69908590610ec9565b50505050565b80471015610dd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610107565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114610e33576040519150601f19603f3d011682016040523d82523d6000602084013e610e38565b606091505b5050905080610318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610107565b6000610f2b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16610fd59092919063ffffffff16565b8051909150156103185780806020019051810190610f499190611318565b610318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610107565b6060610fe48484600085610fee565b90505b9392505050565b606082471015611080576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610107565b843b6110e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610107565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516111119190611370565b60006040518083038185875af1925050503d806000811461114e576040519150601f19603f3d011682016040523d82523d6000602084013e611153565b606091505b509150915061116382828661116e565b979650505050505050565b6060831561117d575081610fe7565b82511561118d5782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b60005b838110156111dc5781810151838201526020016111c4565b83811115610d695750506000910152565b602081526000825180602084015261120c8160408501602087016111c1565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461126057600080fd5b50565b6000806040838503121561127657600080fd5b82356112818161123e565b946020939093013593505050565b6000806000606084860312156112a457600080fd5b83356112af8161123e565b925060208401356112bf8161123e565b9150604084013561ffff811681146112d657600080fd5b809150509250925092565b6000806000606084860312156112f657600080fd5b83356113018161123e565b92506020840135915060408401356112d68161123e565b60006020828403121561132a57600080fd5b81518015158114610fe757600080fd5b60006020828403121561134c57600080fd5b8151610fe78161123e565b60006020828403121561136957600080fd5b5051919050565b600082516113828184602087016111c1565b919091019291505056fea264697066735822122017fd7fc76e4a1efcf24b78a3417fad7ab9576f0a23aa756ddb211c5e2227aa9564736f6c634300080a003360806040523480156200001157600080fd5b5060405162002b8038038062002b80833981016040819052620000349162000122565b6001600160a01b0381166200008f5760405162461bcd60e51b815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640160405180910390fd5b6001600160a01b03811660008181526001602052604080822080546001600160601b0319166b204fce5e3e2502611000000090811790915590517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91620000f99190815260200190565b60405180910390a350600680546001600160a81b031916336101000260ff191617905562000154565b6000602082840312156200013557600080fd5b81516001600160a01b03811681146200014d57600080fd5b9392505050565b612a1c80620001646000396000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c806370a08231116100f9578063b4b5ea5711610097578063dd62ed3e11610071578063dd62ed3e14610503578063e7a324dc14610555578063f1127ed81461057c578063f2fde38b146105ee57600080fd5b8063b4b5ea57146104ca578063c3cda520146104dd578063d505accf146104f057600080fd5b806395d89b41116100d357806395d89b411461045b5780639742ca4614610497578063a9059cbb146104aa578063b0660c3d146104bd57600080fd5b806370a08231146103c7578063782d6fe11461040b5780637ecebe001461043b57600080fd5b806330adf81f11610166578063481c6a7511610140578063481c6a751461031e578063587cde1e146103435780635c19a95c146103795780636fcfff451461038c57600080fd5b806330adf81f14610298578063313ce567146102bf578063349dc329146102d957600080fd5b806320606b701161019757806320606b70146102545780632185810b1461027b57806323b872dd1461028557600080fd5b806306fdde03146101be578063095ea7b31461021057806318160ddd14610233575b600080fd5b6101fa6040518060400160405280600781526020017f47656172626f780000000000000000000000000000000000000000000000000081525081565b60405161020791906124a3565b60405180910390f35b61022361021e36600461253f565b610601565b6040519015158152602001610207565b6102466b204fce5e3e2502611000000081565b604051908152602001610207565b6102467f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b61028361070d565b005b610223610293366004612569565b6107ee565b6102467f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b6102c7601281565b60405160ff9091168152602001610207565b6007546102f99073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610207565b6006546102f990610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6102f96103513660046125a5565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6102836103873660046125a5565b61098a565b6103b261039a3660046125a5565b60046020526000908152604090205463ffffffff1681565b60405163ffffffff9091168152602001610207565b6102466103d53660046125a5565b73ffffffffffffffffffffffffffffffffffffffff166000908152600160205260409020546bffffffffffffffffffffffff1690565b61041e61041936600461253f565b610997565b6040516bffffffffffffffffffffffff9091168152602001610207565b6102466104493660046125a5565b60056020526000908152604090205481565b6101fa6040518060400160405280600481526020017f474541520000000000000000000000000000000000000000000000000000000081525081565b6102836104a53660046125a5565b610cae565b6102236104b836600461253f565b610e20565b6006546102239060ff1681565b61041e6104d83660046125a5565b610e5c565b6102836104eb3660046125d1565b610efa565b6102836104fe366004612629565b611310565b610246610511366004612693565b73ffffffffffffffffffffffffffffffffffffffff9182166000908152602081815260408083209390941682529190915220546bffffffffffffffffffffffff1690565b6102467fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b6105c561058a3660046126c6565b600360209081526000928352604080842090915290825290205463ffffffff81169064010000000090046bffffffffffffffffffffffff1682565b6040805163ffffffff90931683526bffffffffffffffffffffffff909116602083015201610207565b6102836105fc3660046125a5565b61187a565b6000807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83141561063f57506bffffffffffffffffffffffff610664565b6106618360405180606001604052806025815260200161285260259139611a15565b90505b3360008181526020818152604080832073ffffffffffffffffffffffffffffffffffffffff89168085529083529281902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff871690811790915590519081529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a360019150505b92915050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314610798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e616765720060448201526064015b60405180910390fd5b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f795b0e16c8da9807b0a215f3749bd6dbcc49fc0472183f4e446abb7dcbd9d00790600090a1565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081815260408083203380855290835281842054825160608101909352602580845291936bffffffffffffffffffffffff909116928592610856928892919061285290830139611a15565b90508673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156108a257506bffffffffffffffffffffffff82811614155b156109725760006108cc83836040518060600160405280603d8152602001612974603d9139611a67565b73ffffffffffffffffffffffffffffffffffffffff898116600081815260208181526040808320948a168084529482529182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff87169081179091559151918252939450919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505b61097d878783611ad5565b5060019695505050505050565b6109943382611e9c565b50565b6000438210610a28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f476561723a3a6765745072696f72566f7465733a206e6f74207965742064657460448201527f65726d696e656400000000000000000000000000000000000000000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff831660009081526004602052604090205463ffffffff1680610a63576000915050610707565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604081208491610a95600185612735565b63ffffffff90811682526020820192909252604001600020541611610b1b5773ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812090610ae5600184612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff1691506107079050565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020908152604080832083805290915290205463ffffffff16831015610b63576000915050610707565b600080610b71600184612735565b90505b8163ffffffff168163ffffffff161115610c565760006002610b968484612735565b610ba0919061275a565b610baa9083612735565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260036020908152604080832063ffffffff8581168552908352928190208151808301909252549283168082526401000000009093046bffffffffffffffffffffffff1691810191909152919250871415610c2a576020015194506107079350505050565b805163ffffffff16871115610c4157819350610c4f565b610c4c600183612735565b92505b5050610b74565b5073ffffffffffffffffffffffffffffffffffffffff8516600090815260036020908152604080832063ffffffff909416835292905220546bffffffffffffffffffffffff6401000000009091041691505092915050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314610d34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e6167657200604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff8116610db1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640161078f565b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f2f834d1c8c4b956018fff5faca4d99868ae635487424d9c265c257ccbc698c6a90600090a250565b600080610e45836040518060600160405280602681526020016128a760269139611a15565b9050610e52338583611ad5565b5060019392505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526004602052604081205463ffffffff1680610e94576000610ef3565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812090610ec5600184612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b9392505050565b604080518082018252600781527f47656172626f780000000000000000000000000000000000000000000000000060209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f028ef9f797075f74ac647c65fde04fb0f128c2d59fd40f45732269917642fd4681840152466060820152306080808301919091528351808303909101815260a0820184528051908301207fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60c083015273ffffffffffffffffffffffffffffffffffffffff8a1660e08301526101008201899052610120808301899052845180840390910181526101408301909452835193909201929092207f19010000000000000000000000000000000000000000000000000000000000006101608401526101628301829052610182830181905290916000906101a201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa1580156110d8573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166111a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f476561723a3a64656c656761746542795369673a20696e76616c69642073696760448201527f6e61747572650000000000000000000000000000000000000000000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff811660009081526005602052604081208054916111d7836127a4565b919050558914611269576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f476561723a3a64656c656761746542795369673a20696e76616c6964206e6f6e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161078f565b874211156112f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f476561723a3a64656c656761746542795369673a207369676e6174757265206560448201527f7870697265640000000000000000000000000000000000000000000000000000606482015260840161078f565b611303818b611e9c565b505050505b505050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86141561134d57506bffffffffffffffffffffffff611372565b61136f8660405180606001604052806024815260200161291c60249139611a15565b90505b604080518082018252600781527f47656172626f780000000000000000000000000000000000000000000000000060209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f028ef9f797075f74ac647c65fde04fb0f128c2d59fd40f45732269917642fd4681840152466060820152306080808301919091528351808303909101815260a0909101835280519082012073ffffffffffffffffffffffffffffffffffffffff8b166000908152600590925291812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918c918c918c919086611472836127a4565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810188905260e001604051602081830303815290604052805190602001209050600082826040516020016115199291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff8b169284019290925260608301899052608083018890529092509060019060a0016020604051602081039080840390855afa1580156115a2573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661164a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a7065726d69743a20696e76616c6964207369676e617475726500604482015260640161078f565b8b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146116df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f476561723a3a7065726d69743a20756e617574686f72697a6564000000000000604482015260640161078f565b88421115611749576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a7065726d69743a207369676e6174757265206578706972656400604482015260640161078f565b846000808e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508a73ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258760405161186491906bffffffffffffffffffffffff91909116815260200190565b60405180910390a3505050505050505050505050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314611900576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e6167657200604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff811661197d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640161078f565b60065460405173ffffffffffffffffffffffffffffffffffffffff80841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36006805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b6000816c010000000000000000000000008410611a5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b509192915050565b6000836bffffffffffffffffffffffff16836bffffffffffffffffffffffff1611158290611ac2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b50611acd83856127dd565b949350505050565b60065460ff1680611b025750600654610100900473ffffffffffffffffffffffffffffffffffffffff1633145b80611b24575060075473ffffffffffffffffffffffffffffffffffffffff1633145b611b8a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f476561723a3a7472616e73666572732061726520666f7262696464656e000000604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff8316611c2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603c60248201527f476561723a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260448201527f616e736665722066726f6d20746865207a65726f206164647265737300000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff8216611cd0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f476561723a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260448201527f616e7366657220746f20746865207a65726f2061646472657373000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260016020908152604091829020548251606081019093526036808452611d2d936bffffffffffffffffffffffff90921692859291906129b190830139611a67565b73ffffffffffffffffffffffffffffffffffffffff848116600090815260016020908152604080832080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff968716179055928616825290829020548251606081019093526030808452611dbf949190911692859290919061287790830139611f50565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260409182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff968716179055905193851684529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a373ffffffffffffffffffffffffffffffffffffffff808416600090815260026020526040808220548584168352912054611e9792918216911683611fc1565b505050565b73ffffffffffffffffffffffffffffffffffffffff808316600081815260026020818152604080842080546001845282862054949093528787167fffffffffffffffffffffffff000000000000000000000000000000000000000084168117909155905191909516946bffffffffffffffffffffffff9092169391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4611f4a828483611fc1565b50505050565b600080611f5d8486612802565b9050846bffffffffffffffffffffffff16816bffffffffffffffffffffffff1610158390611fb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b50949350505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561200b57506000816bffffffffffffffffffffffff16115b15611e975773ffffffffffffffffffffffffffffffffffffffff8316156120fd5773ffffffffffffffffffffffffffffffffffffffff831660009081526004602052604081205463ffffffff1690816120655760006120c4565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812090612096600185612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b905060006120eb82856040518060600160405280602881526020016128cd60289139611a67565b90506120f9868484846121e2565b5050505b73ffffffffffffffffffffffffffffffffffffffff821615611e975773ffffffffffffffffffffffffffffffffffffffff821660009081526004602052604081205463ffffffff1690816121525760006121b1565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812090612183600185612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b905060006121d882856040518060600160405280602781526020016128f560279139611f50565b9050611308858484845b60006122064360405180606001604052806034815260200161294060349139612465565b905060008463ffffffff1611801561226d575073ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812063ffffffff831691612251600188612735565b63ffffffff908116825260208201929092526040016000205416145b156123035773ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812083916122a4600188612735565b63ffffffff168152602081019190915260400160002080546bffffffffffffffffffffffff92909216640100000000027fffffffffffffffffffffffffffffffff000000000000000000000000ffffffff9092169190911790556123fe565b60408051808201825263ffffffff80841682526bffffffffffffffffffffffff808616602080850191825273ffffffffffffffffffffffffffffffffffffffff8b166000908152600382528681208b8616825290915294909420925183549451909116640100000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009094169116179190911790556123a5846001612832565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260046020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff929092169190911790555b604080516bffffffffffffffffffffffff80861682528416602082015273ffffffffffffffffffffffffffffffffffffffff8716917fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724910160405180910390a25050505050565b6000816401000000008410611a5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91905b600060208083528351808285015260005b818110156124d0578581018301518582016040015282016124b4565b818111156124e2576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461253a57600080fd5b919050565b6000806040838503121561255257600080fd5b61255b83612516565b946020939093013593505050565b60008060006060848603121561257e57600080fd5b61258784612516565b925061259560208501612516565b9150604084013590509250925092565b6000602082840312156125b757600080fd5b610ef382612516565b803560ff8116811461253a57600080fd5b60008060008060008060c087890312156125ea57600080fd5b6125f387612516565b9550602087013594506040870135935061260f606088016125c0565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a03121561264457600080fd5b61264d88612516565b965061265b60208901612516565b95506040880135945060608801359350612677608089016125c0565b925060a0880135915060c0880135905092959891949750929550565b600080604083850312156126a657600080fd5b6126af83612516565b91506126bd60208401612516565b90509250929050565b600080604083850312156126d957600080fd5b6126e283612516565b9150602083013563ffffffff811681146126fb57600080fd5b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600063ffffffff8381169083168181101561275257612752612706565b039392505050565b600063ffffffff80841680612798577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156127d6576127d6612706565b5060010190565b60006bffffffffffffffffffffffff8381169083168181101561275257612752612706565b60006bffffffffffffffffffffffff80831681851680830382111561282957612829612706565b01949350505050565b600063ffffffff8083168185168083038211156128295761282961270656fe476561723a3a617070726f76653a20616d6f756e7420657863656564732039362062697473476561723a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e74206f766572666c6f7773476561723a3a7472616e736665723a20616d6f756e7420657863656564732039362062697473476561723a3a5f6d6f7665566f7465733a20766f746520616d6f756e7420756e646572666c6f7773476561723a3a5f6d6f7665566f7465733a20766f746520616d6f756e74206f766572666c6f7773476561723a3a7065726d69743a20616d6f756e7420657863656564732039362062697473476561723a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d62657220657863656564732033322062697473476561723a3a7472616e7366657246726f6d3a207472616e7366657220616d6f756e742065786365656473207370656e64657220616c6c6f77616e6365476561723a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e7420657863656564732062616c616e6365a26469706673582212201b84fd7789a35c022f692420863210a30e82d2405659f5a28275d433fa53467f64736f6c634300080a003360806040526016805460ff1916905534801561001a57600080fd5b506040516110a73803806110a7833981016040819052610039916100b6565b600080546001600160a01b038085166001600160a01b0319928316179092556003805492841692909116919091179055610080600a6b033b2e3c9fd0803ce80000006100e9565b60075550506b033b2e3c9fd0803ce800000060155561010b565b80516001600160a01b03811681146100b157600080fd5b919050565b600080604083850312156100c957600080fd5b6100d28361009a565b91506100e06020840161009a565b90509250929050565b60008261010657634e487b7160e01b600052601260045260246000fd5b500490565b610f8d8061011a6000396000f3fe608060405234801561001057600080fd5b50600436106102e95760003560e01c806367c99d5811610191578063c5f956af116100e3578063dbcb313b11610097578063f11a648711610071578063f11a648714610320578063f3fdb15a146105f1578063fe14112d1461061157600080fd5b8063dbcb313b146105d6578063e941fa78146105df578063ef8d9603146105e857600080fd5b8063cb3905e1116100c8578063cb3905e1146105c4578063cf33d95514610320578063d0efe753146105cd57600080fd5b8063c5f956af14610588578063ca9505e4146105a857600080fd5b80639aa5d46211610145578063b6ac642a1161011f578063b6ac642a14610567578063bb04b19314610567578063bf28068b1461057557600080fd5b80639aa5d46214610544578063a4e8273e14610557578063b3554a0a1461055e57600080fd5b8063788c6bfe11610176578063788c6bfe146104ef5780638456cb591461050157806396df5dc01461053157600080fd5b806367c99d58146104de57806374375359146104e757600080fd5b806336dda7d51161024a5780634d778ad1116101fe57806354fd4d50116101d857806354fd4d50146104c05780635c975abb146104c8578063609ae317146104d557600080fd5b80634d778ad114610491578063532fe502146104a45780635427c938146104ad57600080fd5b80633f4ba83a1161022f5780633f4ba83a1461045257806345d31f9d1461047f5780634c19386c1461048857600080fd5b806336dda7d51461040f5780633e163df01461042f57600080fd5b80632495a599116102a157806329f3d3b61161028657806329f3d3b6146103b35780632a3354c9146103bc5780632e97ca21146103dc57600080fd5b80632495a599146103735780632954018c1461039357600080fd5b8063078c4781116102d2578063078c4781146103205780630fce70fb146103335780631e16e4fc1461033b57600080fd5b8063030dbb04146102ee57806305fe138b1461030a575b600080fd5b6102f760105481565b6040519081526020015b60405180910390f35b6102f7610318366004610ce8565b600092915050565b61033161032e366004610d14565b50565b005b6015546102f7565b61034e610349366004610d2f565b610618565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610301565b60035461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b60005461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6102f760095481565b600a5461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103ff6103ea366004610d14565b60066020526000908152604090205460ff1681565b6040519015158152602001610301565b60055461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103ff61043d366004610d14565b60146020526000908152604090205460ff1681565b610331601680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b6102f760075481565b6102f760015481565b6102f761049f366004610d2f565b61064f565b6102f760115481565b6102f76104bb366004610d2f565b61066d565b6102f7600181565b6016546103ff9060ff1681565b6102f760085481565b6102f7600d5481565b6102f7610685565b6b033b2e3c9fd0803ce80000006102f7565b610331601680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b61033161053f366004610d2f565b601555565b610331610552366004610d48565b505050565b60016102f7565b6102f7600e5481565b61033161032e366004610d2f565b610331610583366004610ce8565b61071d565b60135461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103316105b6366004610d7d565b600b92909255600c55600d55565b6102f7600c5481565b6102f7600b5481565b6102f760155481565b6102f7600f5481565b6102f760025481565b60125461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b60006102f7565b6004818154811061062857600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6000610667826b033b2e3c9fd0803ce800000061077a565b92915050565b6000610667826b033b2e3c9fd0803ce80000006108e9565b6003546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156106f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107189190610da9565b905090565b6009829055600a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691909117909155600354610776911682846109fe565b5050565b60408051808201909152600281527f4d330000000000000000000000000000000000000000000000000000000000006020820152600090826107f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b60405180910390fd5b506000610800600284610e72565b90506b033b2e3c9fd0803ce8000000610839827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610ead565b6108439190610e72565b8411156040518060400160405280600281526020017f4d31000000000000000000000000000000000000000000000000000000000000815250906108b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b5082816108cd6b033b2e3c9fd0803ce800000087610ec4565b6108d79190610f01565b6108e19190610e72565b949350505050565b60008215806108f6575081155b1561090357506000610667565b8161091b60026b033b2e3c9fd0803ce8000000610e72565b610945907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610ead565b61094f9190610e72565b8311156040518060400160405280600281526020017f4d31000000000000000000000000000000000000000000000000000000000000815250906109c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b506b033b2e3c9fd0803ce80000006109d9600282610e72565b6109e38486610ec4565b6109ed9190610f01565b6109f79190610e72565b9392505050565b6040805173ffffffffffffffffffffffffffffffffffffffff848116602483015260448083018590528351808403909101815260649092018352602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65649084015261055292869291600091610ac9918516908490610b73565b8051909150156105525780806020019051810190610ae79190610f19565b610552576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016107e9565b60606108e1848460008585843b610be6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107e9565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051610c0f9190610f3b565b60006040518083038185875af1925050503d8060008114610c4c576040519150601f19603f3d011682016040523d82523d6000602084013e610c51565b606091505b5091509150610c61828286610c6c565b979650505050505050565b60608315610c7b5750816109f7565b825115610c8b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ce357600080fd5b919050565b60008060408385031215610cfb57600080fd5b82359150610d0b60208401610cbf565b90509250929050565b600060208284031215610d2657600080fd5b6109f782610cbf565b600060208284031215610d4157600080fd5b5035919050565b600080600060608486031215610d5d57600080fd5b83359250610d6d60208501610cbf565b9150604084013590509250925092565b600080600060608486031215610d9257600080fd5b505081359360208301359350604090920135919050565b600060208284031215610dbb57600080fd5b5051919050565b60005b83811015610ddd578181015183820152602001610dc5565b83811115610dec576000848401525b50505050565b6020815260008251806020840152610e11816040850160208701610dc2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082610ea8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600082821015610ebf57610ebf610e43565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610efc57610efc610e43565b500290565b60008219821115610f1457610f14610e43565b500190565b600060208284031215610f2b57600080fd5b815180151581146109f757600080fd5b60008251610f4d818460208701610dc2565b919091019291505056fea26469706673582212204edb887d94928b3914f60ab48df0182da9eb30ddbb7021b164cc728b60a655d564736f6c634300080a003360e06040523480156200001157600080fd5b5060405162013af238038062013af2833981016040819052620000349162000630565b826001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000073573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000999190620007bf565b620000a433620004ab565b6001600160a01b038116608081905260408051630873769560e01b815290516308737695916004808201926020929091908290030181865afa158015620000ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001159190620007bf565b6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000153573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001799190620007bf565b6001600160a01b0390811660a052841660c0525060405183906200019d9062000519565b6001600160a01b039091168152602001604051809103906000f080158015620001ca573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b0392909216918217905560608301516080840151604051620002029062000527565b6001600160a01b03938416815292909116602083015215156040820152606001604051809103906000f0801580156200023f573d6000803e3d6000fd5b50600280546001600160a01b0319166001600160a01b0392909216919091179055604051600090620002746020820162000535565b601f1982820381018352601f909101166040819052600154600254620002b0926001600160a01b039283169291909116908790602001620007e6565b60408051601f1981840301815290829052620002d09291602001620008e8565b60408051601f19818403018152919052905060006200035982848151602092830120604080517fff00000000000000000000000000000000000000000000000000000000000000818601523060601b6001600160601b03191660218201526035810193909352605580840192909252805180840390920182526075909201909152805191012090565b600154604051634fafc35760e11b81526001600160a01b038084166004830152929350911690639f5f86ae90602401600060405180830381600087803b158015620003a357600080fd5b505af1158015620003b8573d6000803e3d6000fd5b50505050620003ce8284620004fb60201b60201c565b600380546001600160a01b0319166001600160a01b0383811691821790925560015460408051630304b08760e61b81529051919093169263c12c21c09160048083019260209291908290030181865afa15801562000430573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004569190620007bf565b6001600160a01b031614620004a05760405162461bcd60e51b815260206004820152600c60248201526b496e636f727265637420434d60a01b604482015260640160405180910390fd5b505050505062000909565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008183516020850134f59050803b6200051457600080fd5b505050565b6158e8806200243683390190565b615e978062007d1e83390190565b615f3d806200dbb583390190565b6001600160a01b03811681146200055957600080fd5b50565b8051620005698162000543565b919050565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b0381118282101715620005a957620005a96200056e565b60405290565b604080519081016001600160401b0381118282101715620005a957620005a96200056e565b604051601f8201601f191681016001600160401b0381118282101715620005ff57620005ff6200056e565b604052919050565b80516001600160801b03811681146200056957600080fd5b805180151581146200056957600080fd5b6000806000606084860312156200064657600080fd5b8351620006538162000543565b602085810151919450906001600160401b03808211156200067357600080fd5b9086019060a082890312156200068857600080fd5b6200069262000584565b6200069d8362000607565b8152620006ac84840162000607565b8482015260408084015183811115620006c457600080fd5b8401601f81018b13620006d657600080fd5b805184811115620006eb57620006eb6200056e565b620006fb878260051b01620005d4565b818152878101955060069190911b82018701908c8211156200071c57600080fd5b918701915b818310156200077e5783838e0312156200073b5760008081fd5b62000745620005af565b8351620007528162000543565b81528389015161ffff811681146200076a5760008081fd5b818a01528652948701949183019162000721565b8484015250620007939050606085016200055c565b6060830152620007a6608085016200061f565b6080830152979097015195989697509495945050505050565b600060208284031215620007d257600080fd5b8151620007df8162000543565b9392505050565b600060018060a01b0380861683526020818616818501526040606081860152610100850160018060801b038088511660608801528084890151166080880152508187015160a080880152818151808452610120890191508583019350600092505b808310156200087857835180518816835286015161ffff168683015292850192600192909201919084019062000847565b5060608901516001600160a01b031660c0890152608090980151151560e0909701969096525094979650505050505050565b6000815160005b81811015620008cd5760208185018101518683015201620008b1565b81811115620008dd576000828601525b509290920192915050565b600062000901620008fa8386620008aa565b84620008aa565b949350505050565b60805160a05160c051611ad3620009636000396000818161010a0152610ea00152600081816103790152610b170152600081816101680152818161068c01528181610a4d01528181610b860152610c190152611ad36000f3fe6080604052600436106100f35760003560e01c80638da5cb5b1161008a578063ebf0c71711610059578063ebf0c71714610367578063f2fde38b1461039b578063f4747c58146103bb578063f9aa028a146103db57600080fd5b80638da5cb5b1461025a57806394ca2cb5146102855780639c4ae2d014610327578063c12c21c01461033a57600080fd5b80633e0b1a23116100c65780633e0b1a23146101ce5780634ef501ac146101e3578063715018a614610230578063805abe6a1461024557600080fd5b806316f0115b146100f85780632954018c146101565780632f7a18811461018a578063318d0d10146101b7575b600080fd5b34801561010457600080fd5b5061012c7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561016257600080fd5b5061012c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561019657600080fd5b5060025461012c9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156101c357600080fd5b506101cc610408565b005b3480156101da57600080fd5b506101cc610498565b3480156101ef57600080fd5b506102036101fe366004611726565b610521565b6040805173ffffffffffffffffffffffffffffffffffffffff93841681529290911660208301520161014d565b34801561023c57600080fd5b506101cc610567565b34801561025157600080fd5b506101cc6105f2565b34801561026657600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff1661012c565b34801561029157600080fd5b5061012c6102a03660046117e6565b8151602092830120604080517fff00000000000000000000000000000000000000000000000000000000000000818601523060601b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660218201526035810193909352605580840192909252805180840390920182526075909201909152805191012090565b6101cc6103353660046117e6565b6107d8565b34801561034657600080fd5b5060015461012c9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561037357600080fd5b5061012c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103a757600080fd5b506101cc6103b63660046118c0565b6107f5565b3480156103c757600080fd5b506101cc6103d63660046118e4565b610925565b3480156103e757600080fd5b5060035461012c9073ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff16331461048e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b610496610a49565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610519576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b61048e610b82565b6004818154811061053157600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff91821692501682565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b61049660006116b1565b60005473ffffffffffffffffffffffffffffffffffffffff163314610673576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b3073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106f5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071991906119c4565b73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610763573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078791906119c4565b73ffffffffffffffffffffffffffffffffffffffff1614156107d5576040517fbdebb83f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33ff5b60008183516020850134f59050803b6107f057600080fd5b505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b73ffffffffffffffffffffffffffffffffffffffff8116610919576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610485565b610922816116b1565b50565b60005473ffffffffffffffffffffffffffffffffffffffff1633146109a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b805160005b818110156107f05760048382815181106109c7576109c76119e1565b602090810291909101810151825460018082018555600094855293839020825160029092020180547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff938416178255929093015192840180549092169216919091179055016109ab565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ab6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ada91906119c4565b6040517ff2fde38b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301529192509082169063f2fde38b90602401600060405180830381600087803b158015610b6757600080fd5b505af1158015610b7b573d6000803e3d6000fd5b5050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1391906119c4565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca691906119c4565b60045490915060005b81811015610dd4576003546004805473ffffffffffffffffffffffffffffffffffffffff90921691637bccacee919084908110610cee57610cee6119e1565b906000526020600020906002020160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660048481548110610d3357610d336119e1565b600091825260209091206002909102015460405160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b158015610db157600080fd5b505af1158015610dc5573d6000803e3d6000fd5b50505050806001019050610caf565b506001546040517fe26b2f6300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529084169063e26b2f6390602401600060405180830381600087803b158015610e4257600080fd5b505af1158015610e56573d6000803e3d6000fd5b50506001546040517fcf33d95500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201527f0000000000000000000000000000000000000000000000000000000000000000909116925063cf33d9559150602401600060405180830381600087803b158015610ee857600080fd5b505af1158015610efc573d6000803e3d6000fd5b50505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f919190611a10565b905060005b818110156116ab576003546040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810183905260009173ffffffffffffffffffffffffffffffffffffffff1690635094cb4f90602401602060405180830381865afa15801561100e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103291906119c4565b6001546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80841660048301529293506000929091169063fdd5764590602401602060405180830381865afa1580156110a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110cc91906119c4565b905060008173ffffffffffffffffffffffffffffffffffffffff1663ce30bbdb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561111b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113f9190611a29565b9050600c81601081111561115557611155611a4a565b14156116225760008273ffffffffffffffffffffffffffffffffffffffff166320b2c1516040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111cc91906119c4565b905060008373ffffffffffffffffffffffffffffffffffffffff1663927188d96040518163ffffffff1660e01b8152600401602060405180830381865afa15801561121b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123f91906119c4565b905060008473ffffffffffffffffffffffffffffffffffffffff166399253ac06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561128e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b291906119c4565b6040517f9dcb511a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152919250908a169063e8a97a3e9083908390639dcb511a90602401602060405180830381865afa15801561132c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135091906119c4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156113bd57600080fd5b505af11580156113d1573d6000803e3d6000fd5b50506040517f9dcb511a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301528c16925063e8a97a3e915085908390639dcb511a90602401602060405180830381865afa15801561144b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061146f91906119c4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156114dc57600080fd5b505af11580156114f0573d6000803e3d6000fd5b50506003546001546040517f7832743800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301529283169450633e7c88d69350879290911690637832743890602401602060405180830381865afa158015611573573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115979190611a79565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015261ffff166024820152604401600060405180830381600087803b15801561160657600080fd5b505af115801561161a573d6000803e3d6000fd5b505050505050505b600d81601081111561163657611636611a4a565b141561169d578173ffffffffffffffffffffffffffffffffffffffff16639b51ecd36040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561168457600080fd5b505af1158015611698573d6000803e3d6000fd5b505050505b836001019350505050610f96565b50505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561173857600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156117915761179161173f565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156117de576117de61173f565b604052919050565b600080604083850312156117f957600080fd5b823567ffffffffffffffff8082111561181157600080fd5b818501915085601f83011261182557600080fd5b81356020828211156118395761183961173f565b611869817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011601611797565b9250818352878183860101111561187f57600080fd5b8181850182850137600091830181019190915290969401359450505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461092257600080fd5b6000602082840312156118d257600080fd5b81356118dd8161189e565b9392505050565b600060208083850312156118f757600080fd5b823567ffffffffffffffff8082111561190f57600080fd5b818501915085601f83011261192357600080fd5b8135818111156119355761193561173f565b611943848260051b01611797565b818152848101925060069190911b83018401908782111561196357600080fd5b928401925b818410156119b957604084890312156119815760008081fd5b61198961176e565b84356119948161189e565b8152848601356119a38161189e565b8187015283526040939093019291840191611968565b979650505050505050565b6000602082840312156119d657600080fd5b81516118dd8161189e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215611a2257600080fd5b5051919050565b600060208284031215611a3b57600080fd5b8151601181106118dd57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060208284031215611a8b57600080fd5b815161ffff811681146118dd57600080fdfea264697066735822122090f5e4310a8b66bfdd7fdfbe64bc5b98570e7c1a415ffb0ced3c857cf6c5b14064736f6c634300080a00336101606040526000805462ff00001916620c00001790553480156200002357600080fd5b50604051620058e8380380620058e8833981016040819052620000469162000537565b806001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000085573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ab919062000537565b6000805460ff191690556001600160a01b038116620000dd57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200011c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000142919062000537565b6001600160a01b03166080816001600160a01b031681525050506000816001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200019d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c3919062000537565b6001600160a01b03831661010081905260e081905260408051632495a59960e01b81529051929350600092632495a599916004808201926020929091908290030181865afa1580156200021a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000240919062000537565b6001600160a01b03811660c05290506200025a8162000472565b816001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000299573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002bf919062000537565b6001600160a01b0316610120816001600160a01b031681525050816001600160a01b03166377532ed96040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000318573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033e919062000537565b6001600160a01b0316610140816001600160a01b031681525050816001600160a01b031663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000397573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003bd919062000537565b6001600001600a6101000a8154816001600160a01b0302191690836001600160a01b03160217905550816001600160a01b0316639068a8686040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000425573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044b919062000537565b6001600160a01b031660a0525050600380546001600160a01b031916331790555062000588565b6001600160a01b03811660009081526006602052604090205415620004aa57604051632e5a5c7760e01b815260040160405180910390fd5b61010060055410620004cf57604051631cbbe18560e01b815260040160405180910390fd5b600580546001600160a01b0383166000818152600660209081526040808320600190951b948590558483526004909152812091909155825491929062000515836200055e565b91905055505050565b6001600160a01b03811681146200053457600080fd5b50565b6000602082840312156200054a57600080fd5b815162000557816200051e565b9392505050565b60006000198214156200058157634e487b7160e01b600052601160045260246000fd5b5060010190565b60805160a05160c05160e051610100516101205161014051615248620006a0600039600081816107e20152818161371001526137c501526000818161052f01526136780152600081816103d301528181610e5701528181610ebb015281816124ff0152818161265a01528181612aa101528181612b8c01528181612c4e01528181612d0d0152613b8f015260006105a401526000818161062701528181610d2201528181610db301528181610e0001528181610e3601528181610f3f0152818161203a01528181612b6b015281816130ee015281816134dc015281816135a90152613fe601526000818161081c01528181610fe101526124c20152600081816107a80152818161118401526122cb01526152486000f3fe608060405234801561001057600080fd5b50600436106103415760003560e01c8063830aa745116101bd578063a70bc542116100f9578063e75538c7116100a2578063f9aa028a1161007c578063f9aa028a1461089d578063fdd57645146108bd578063fe47cde7146108f3578063ff6875431461091357600080fd5b8063e75538c714610864578063e958b70414610877578063f67c5bd01461088a57600080fd5b8063db7ceb80116100d3578063db7ceb8014610817578063dc2b21c11461083e578063e1998cf91461085157600080fd5b8063a70bc542146107ca578063c5e10eef146107dd578063d48bfca71461080457600080fd5b806394cf073a116101665780639f5f86ae116101405780639f5f86ae146107745780639fd12b7714610787578063a366f49614610790578063a50cf2c8146107a357600080fd5b806394cf073a146106f557806395373018146107085780639af1d35a1461071b57600080fd5b80638991b2f1116101975780638991b2f1146106af5780638fe3f93f146106cf578063944ac59f146106e257600080fd5b8063830aa7451461066f5780638345f26e146106825780638456cb59146106a757600080fd5b8063458936f51161028c578063570a7af2116102355780636ce4074a1161020f5780636ce4074a146105ef5780636e98e5e41461060f5780636f307dc314610622578063783274381461064957600080fd5b8063570a7af21461059f5780635c975abb146105c6578063654a9eda146105dc57600080fd5b80635063524a116102665780635063524a1461055157806351e3f1601461058457806354fd4d501461059757600080fd5b8063458936f51461050e57806346fb371d146105175780634f0e0ef31461052a57600080fd5b80632630c12f116102ee5780633192195c116102c85780633192195c146104be5780633e8297ca146104e65780633f4ba83a1461050657600080fd5b80632630c12f1461045857806329df0b93146104845780632f7a18811461049757600080fd5b806316f0115b1161031f57806316f0115b146103ce578063172c48c7146103f55780632362a2d81461043757600080fd5b8063055ee9b5146103465780630d8f9cee146103a657806311ca4fc2146103bb575b600080fd5b61037c610354366004614a87565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6103b96103b4366004614aa4565b610949565b005b6103b96103c9366004614aa4565b610a76565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b610408610403366004614add565b610b4e565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835261ffff90911660208301520161039d565b61044a610445366004614b13565b610b66565b60405190815260200161039d565b6001546a0100000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1661037c565b6103b9610492366004614a87565b6110be565b60005461037c906301000000900473ffffffffffffffffffffffffffffffffffffffff1681565b6104d16104cc366004614a87565b611122565b6040805192835260208301919091520161039d565b61044a6104f4366004614a87565b60096020526000908152604090205481565b6103b9611156565b61044a60055481565b6103b9610525366004614b95565b611244565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b61056461055f366004614be6565b61149b565b60408051948552602085019390935291830152606082015260800161039d565b6103b9610592366004614aa4565b611602565b61044a600281565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b60005460ff16604051901515815260200161039d565b6103b96105ea366004614c21565b611703565b6106026105fd366004614d40565b611bbb565b60405161039d9190614e5b565b6103b961061d366004614aa4565b611e8e565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b61065c610657366004614a87565b612036565b60405161ffff909116815260200161039d565b6103b961067d366004614b95565b61210f565b6000546106959062010000900460ff1681565b60405160ff909116815260200161039d565b6103b961229d565b61044a6106bd366004614a87565b60086020526000908152604090205481565b61037c6106dd366004614e6e565b612389565b6103b96106f0366004614ea5565b612718565b61044a610703366004614f0a565b612845565b6103b9610716366004614a87565b612e5a565b6001546040805161ffff808416825262010000840481166020830152640100000000840481169282019290925266010000000000008304821660608201526801000000000000000090920416608082015260a00161039d565b6103b9610782366004614a87565b612f85565b61044a60075481565b6103b961079e366004614add565b613045565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b96107d8366004614f4c565b61309b565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b9610812366004614a87565b613221565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b961084c366004614f81565b61327b565b6103b961085f366004614aa4565b613306565b610408610872366004614add565b6134c9565b61037c610885366004614a87565b613541565b61044a610898366004614a87565b6135a5565b60035461037c9073ffffffffffffffffffffffffffffffffffffffff1681565b61037c6108cb366004614a87565b600b6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b600c5461037c9073ffffffffffffffffffffffffffffffffffffffff1681565b61037c610921366004614a87565b600a6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561099b57506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b156109d2576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff1615610a14576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055610a4a828261362e565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b60035473ffffffffffffffffffffffffffffffffffffffff163314610ac7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805473ffffffffffffffffffffffffffffffffffffffff9384166301000000027fffffffffffffffffff0000000000000000000000000000000000000000ffffff90911617905560018054919092166a0100000000000000000000027fffff0000000000000000000000000000000000000000ffffffffffffffffffff909116179055565b600080610b5d6001841b6134c9565b91509150915091565b6000805460ff1615610bd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064015b60405180910390fd5b600054610100900460ff1615610c1b576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff163314610ca0576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610cab89613541565b90506000806000806000610cbe86611122565b9094509050610ccf8c8e868461149b565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152939b5093985090955093506000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015610d6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8f9190614fa4565b9050610d9b8887614fec565b610da6906001614fec565b811115610de657610de1877f00000000000000000000000000000000000000000000000000000000000000008d60018c8b870303038d61366e565b610e30565b610e3073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168d8960018a8d01869003016138c0565b610e7e877f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000089600061366e565b6040517fca9505e40000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604481018490527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ca9505e490606401600060405180830381600087803b158015610f1457600080fd5b505af1158015610f28573d6000803e3d6000fd5b50505050505050506001841115610f6757610f67837f00000000000000000000000000000000000000000000000000000000000000008d87600061366e565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260086020526040902054861916610f9c8489888461395b565b6040517f89b77b3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f000000000000000000000000000000000000000000000000000000000000000016906389b77b3e90602401600060405180830381600087803b15801561102557600080fd5b505af1158015611039573d6000803e3d6000fd5b50505073ffffffffffffffffffffffffffffffffffffffff909c16600090815260026020526040812080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550929a9950505050505050505050565b6000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314611116576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61111f81613a35565b50565b60008060008061113185613aa6565b91955092509050816111438286615004565b61114d9190615041565b92505050915091565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156111e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611204919061507c565b61123a576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611242613c24565b565b60005460ff16156112b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156112f3576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100178155338152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff9081169084161480159061137457506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b80156113985750600c5473ffffffffffffffffffffffffffffffffffffffff163314155b806113b7575073ffffffffffffffffffffffffffffffffffffffff8316155b156113ee576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113f7826135a5565b61142d576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061143885613541565b9050611448838583856000613d05565b61146c5761145b83858360006001613d05565b5061146a838583856001613d05565b505b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b6001546000908190819081906127109061ffff166114b98888615099565b6114c39190615004565b6114cd9190615041565b6114d79086614fec565b935060018760028111156114ed576114ed6150b0565b1415611587576001546000906127109061151390640100000000900461ffff168b615004565b61151d9190615041565b6001549091506127109061153b9062010000900461ffff168b615004565b6115459190615041565b61154f9086614fec565b94508481111561156657600185820303935061156a565b8094505b85811061157b578585039250611581565b84860391505b506115f7565b600287600281111561159b5761159b6150b0565b14156115f157600154600090612710906115c59068010000000000000000900461ffff168b615004565b6115cf9190615041565b6001549091506127109061153b906601000000000000900461ffff168b615004565b84840391505b945094509450949050565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561165457506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b1561168b576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff16156116cd576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055610a4a8282613ea6565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561175557506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b1561178c576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff16156117ce576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790556118048584613ea6565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152600091908616906370a0823190602401602060405180830381865afa158015611874573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118989190614fa4565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529192506000918616906370a0823190602401602060405180830381865afa15801561190a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192e9190614fa4565b60015490915060009081906a0100000000000000000000900473ffffffffffffffffffffffffffffffffffffffff16635cecbd0e61196c8689615099565b8a6119778988615099565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152600481019390935273ffffffffffffffffffffffffffffffffffffffff918216602484015260448301528a1660648201526084016040805180830381865afa1580156119f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1791906150df565b9150915060018411611a2d57611a2d898961362e565b611a3687612036565b611a449061ffff1682615004565b9050611a4f88612036565b611a5d9061ffff1683615004565b9150818110611a7857611a6f89613a35565b5050505061146c565b73ffffffffffffffffffffffffffffffffffffffff891660009081526009602052604081205483611ab56b033b2e3c9fd0803ce800000085615004565b611abf9190615041565b611ad5906b033b2e3c9fd0803ce8000000615099565b611adf9190614fec565b60015490915061271090611b0a906b033b2e3c9fd0803ce80000009062010000900461ffff16615004565b611b149190615041565b8111611b555773ffffffffffffffffffffffffffffffffffffffff8a166000908152600960205260409020819055611b4b8a613a35565b505050505061146c565b611b5e8a613f56565b50505073ffffffffffffffffffffffffffffffffffffffff871660009081526009602052604090206001905550505050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b6060611bc960005460ff1690565b15611c30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff1615611c72576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100178155338152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff908116908416141580611ce7575073ffffffffffffffffffffffffffffffffffffffff8316155b15611d3d57600c5473ffffffffffffffffffffffffffffffffffffffff163314611d3d576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611d4885613541565b90508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167faed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab0360405160405180910390a36040517f1cff79cd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821690631cff79cd90611df89087908790600401615103565b6000604051808303816000875af1158015611e17573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611e5d9190810190615132565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905595945050505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314611edf576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821615611f4f5773ffffffffffffffffffffffffffffffffffffffff8281166000908152600a6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169183169190911790555b73ffffffffffffffffffffffffffffffffffffffff811615611fbf5773ffffffffffffffffffffffffffffffffffffffff8181166000908152600b6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169184169190911790555b73ffffffffffffffffffffffffffffffffffffffff811673cccccccccccccccccccccccccccccccccccccccc141561203257600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790555b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120ba5750506001547e01000000000000000000000000000000000000000000000000000000000000900461ffff1690565b60006120c5836135a5565b9050806120fe576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612107816134c9565b949350505050565b60005460ff161561217c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156121be576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff163314612243576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61224d8383613ea6565b61226f73ffffffffffffffffffffffffffffffffffffffff83168585846138c0565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555050565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015612327573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061234b919061507c565b612381576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112426142d4565b6000805460ff16156123f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff1615612439576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff1633146124be576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166321d18456857f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612568573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061258c9190614fa4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168152600481019290925260248201526044016020604051808303816000875af11580156125e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061260b91906151a0565b6040517fbf28068b0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff80831660248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063bf28068b90604401600060405180830381600087803b1580156126a057600080fd5b505af11580156126b4573d6000803e3d6000fd5b505050506126c28382614394565b73ffffffffffffffffffffffffffffffffffffffff811660009081526008602052604081206001905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690559392505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314612769576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805461ffff92831668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9484166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff96851664010000000002969096167fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff97851662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000090931694909816939093171794909416949094179190911716919091179055565b6000805460ff16156128b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156128f5576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff16331461297a576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080600061298887613aa6565b925092509250846129a25761299d8684615099565b6129ac565b6129ac8684614fec565b935060008515612b045769021e19e0c9bab24000008510612a15576129d583603689901c615004565b6129e3603686901c84615004565b6129ed9190614fec565b603686901c6129fc8585615004565b612a069190615004565b612a109190615041565b612a52565b612a1f8388615004565b612a298584615004565b612a339190614fec565b85612a3e8585615004565b612a489190615004565b612a529190615041565b6040517fbf28068b0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff8a811660248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063bf28068b90604401600060405180830381600087803b158015612ae757600080fd5b505af1158015612afb573d6000803e3d6000fd5b50505050612d9f565b60008484612b128583615004565b612b1c9190615041565b612b269190615099565b60015490915060009061271090612b419061ffff1684615004565b612b4b9190615041565b905073ffffffffffffffffffffffffffffffffffffffff8a1663d1660f997f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000084612bb6878f614fec565b612bc09190614fec565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b158015612c3457600080fd5b505af1158015612c48573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ca9505e4838b612c949190614fec565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815260048101919091526024810184905260006044820152606401600060405180830381600087803b158015612cf357600080fd5b505af1158015612d07573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d9a9190614fa4565b925050505b6040517f16128211000000000000000000000000000000000000000000000000000000008152600481018690526024810182905273ffffffffffffffffffffffffffffffffffffffff891690631612821190604401600060405180830381600087803b158015612e0e57600080fd5b505af1158015612e22573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055509498975050505050505050565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff16158015612eac57506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b15612ee3576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff1615612f25576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055612f5a81613f56565b50600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b60035473ffffffffffffffffffffffffffffffffffffffff163314612fd6576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517ff62005acebe9b616aefb5f248b48f5e89f28437b27d1eebc0b2d911209f297af90600090a250565b60035473ffffffffffffffffffffffffffffffffffffffff163314613096576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600755565b60035473ffffffffffffffffffffffffffffffffffffffff1633146130ec576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613193576001805461ffff83167e01000000000000000000000000000000000000000000000000000000000000027dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790555050565b600061319e836135a5565b9050806131d7576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000908152600460205260409020805473ffffffffffffffffffffffffffffffffffffffff1675ffff000000000000000000000000000000000000000060a084901b161790555050565b60035473ffffffffffffffffffffffffffffffffffffffff163314613272576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61111f81614467565b60035473ffffffffffffffffffffffffffffffffffffffff1633146132cc576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805460ff90921662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff909216919091179055565b60005460ff1615613373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156133b5576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff16331461343a576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061344583613541565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260026020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055905061349c8282614394565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b60008082600114156135275750506001547f0000000000000000000000000000000000000000000000000000000000000000927e0100000000000000000000000000000000000000000000000000000000000090910461ffff169150565b50506000908152600460205260409020549060a082901c90565b73ffffffffffffffffffffffffffffffffffffffff80821660009081526002602052604090205416806135a0576040517fb5ba4c4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146136255773ffffffffffffffffffffffffffffffffffffffff8216600090815260066020526040902054613628565b60015b92915050565b6000613639826135a5565b73ffffffffffffffffffffffffffffffffffffffff909316600090815260086020526040902080549319939093169092555050565b8080156136c657507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b15613828576040517fd1660f9900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301526044820184905286169063d1660f9990606401600060405180830381600087803b15801561376357600080fd5b505af1158015613777573d6000803e3d6000fd5b50506040517f5869dba800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690527f0000000000000000000000000000000000000000000000000000000000000000169250635869dba89150604401600060405180830381600087803b15801561380b57600080fd5b505af115801561381f573d6000803e3d6000fd5b505050506138b9565b6040517fd1660f9900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301526044820184905286169063d1660f9990606401600060405180830381600087803b1580156138a057600080fd5b505af11580156138b4573d6000803e3d6000fd5b505050505b5050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261395590859061455b565b50505050565b60025b8181116138b95781811615613a2d576000613978826134c9565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529192506000918316906370a0823190602401602060405180830381865afa1580156139eb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a0f9190614fa4565b90506002811115613a2a57613a2a878388600185038961366e565b50505b60011b61395e565b73ffffffffffffffffffffffffffffffffffffffff811660009081526008602052604081205490613a6582614667565b60005490915062010000900460ff16811115613aa1576000613a86836146a7565b613a91906001614fec565b905061395584848460008561470b565b505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff16631afbb7a46040518163ffffffff1660e01b8152600401602060405180830381865afa158015613af6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b1a9190614fa4565b92508373ffffffffffffffffffffffffffffffffffffffff166317d11a156040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b8b9190614fa4565b91507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bf8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c1c9190614fa4565b929491935050565b60005460ff16613c90576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610bd0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6040805173ffffffffffffffffffffffffffffffffffffffff8681166024830152604480830186905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b30000000000000000000000000000000000000000000000000000000017905291517f1cff79cd000000000000000000000000000000000000000000000000000000008152600092861691631cff79cd91613dc6918a91600401615103565b6000604051808303816000875af1925050508015613e2457506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052613e219190810190615132565b60015b613e2d57613e61565b80511580613e50575080806020019051810190613e4a919061507c565b15156001145b15613e5f576001915050613e9d565b505b8115613e99576040517f76e3e29c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060005b95945050505050565b6000613eb1826135a5565b9050801580613ec35750600754811615155b15613efa576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83166000908152600860205260409020548116613aa15773ffffffffffffffffffffffffffffffffffffffff83166000908152600860205260409020805482179055505050565b60015473ffffffffffffffffffffffffffffffffffffffff8281166000908152600860205260408120546a010000000000000000000090930490911691908080613f9f86611122565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526127108202600482015273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350908716915063f9a6503090604401602060405180830381865afa15801561403a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061405e9190614fa4565b9250614069846146a7565b6001019150506000806000805b848110156142a157801561408f5760018186031b614092565b60015b935086841615614299576000806140a8866134c9565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8e811660048301529294509092506000918416906370a0823190602401602060405180830381865afa15801561411d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141419190614fa4565b9050600181111561428c576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff848116602483015261ffff841691908d169063f9a6503090604401602060405180830381865afa1580156141c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141ea9190614fa4565b6141f49190615004565b6141fe9087614fec565b95508886106142875760006142128b614667565b60005490915062010000900460ff16811115614249576142448d8c836001891561423e57898e0361470b565b8d61470b565b614278565b85156142785773ffffffffffffffffffffffffffffffffffffffff8d1660009081526008602052604090208b90555b50505050505050505050505050565b614295565b98861898600194505b5050505b600101614076565b506040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005460ff1615614341576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613cdb3390565b73ffffffffffffffffffffffffffffffffffffffff821615806143dd575073ffffffffffffffffffffffffffffffffffffffff8281166000908152600260205260409020541615155b15614414576040517f9e59609e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff918216600090815260026020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001691909216179055565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260066020526040902054156144c4576040517f2e5a5c7700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61010060055410614501576040517f1cbbe18500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005805473ffffffffffffffffffffffffffffffffffffffff83166000818152600660209081526040808320600190951b9485905584835260049091528120919091558254919290614552836151bd565b91905055505050565b60006145bd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166148799092919063ffffffff16565b805190915015613aa157808060200190518101906145db919061507c565b613aa1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610bd0565b60008060005b6101008110156146a0576001811b91508382161561468c578260010192505b838210614698576146a0565b60010161466d565b5050919050565b600081600114156146ba57506000919050565b61010060015b60016146cc8284614fec565b901c92506001831b848116158015906146e75750600185851c145b156146f257506146a0565b84811061470157839250614705565b8391505b506146c0565b815b81811015614846576001811b8581161561483d57600061472c826134c9565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529192506000918316906370a0823190602401602060405180830381865afa15801561479f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147c39190614fa4565b90506001811161483a57600054978318977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9097019660ff6201000090910416871161483a5750505073ffffffffffffffffffffffffffffffffffffffff86166000908152600860205260409020859055506138b9565b50505b5060010161470d565b506040517f53275fcb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606148888484600085614892565b90505b9392505050565b606082471015614924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610bd0565b843b61498c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610bd0565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516149b591906151f6565b60006040518083038185875af1925050503d80600081146149f2576040519150601f19603f3d011682016040523d82523d6000602084013e6149f7565b606091505b5091509150614a07828286614a12565b979650505050505050565b60608315614a2157508161488b565b825115614a315782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd09190614e5b565b73ffffffffffffffffffffffffffffffffffffffff8116811461111f57600080fd5b600060208284031215614a9957600080fd5b813561488b81614a65565b60008060408385031215614ab757600080fd5b8235614ac281614a65565b91506020830135614ad281614a65565b809150509250929050565b600060208284031215614aef57600080fd5b5035919050565b8035600381106135a057600080fd5b801515811461111f57600080fd5b600080600080600080600060e0888a031215614b2e57600080fd5b8735614b3981614a65565b9650614b4760208901614af6565b9550604088013594506060880135614b5e81614a65565b93506080880135614b6e81614a65565b925060a0880135915060c0880135614b8581614b05565b8091505092959891949750929550565b60008060008060808587031215614bab57600080fd5b8435614bb681614a65565b93506020850135614bc681614a65565b92506040850135614bd681614a65565b9396929550929360600135925050565b60008060008060808587031215614bfc57600080fd5b84359350614c0c60208601614af6565b93969395505050506040820135916060013590565b600080600080600060a08688031215614c3957600080fd5b8535614c4481614a65565b94506020860135614c5481614a65565b93506040860135614c6481614a65565b94979396509394606081013594506080013592915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614cf257614cf2614c7c565b604052919050565b600067ffffffffffffffff821115614d1457614d14614c7c565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600080600060608486031215614d5557600080fd5b8335614d6081614a65565b92506020840135614d7081614a65565b9150604084013567ffffffffffffffff811115614d8c57600080fd5b8401601f81018613614d9d57600080fd5b8035614db0614dab82614cfa565b614cab565b818152876020838501011115614dc557600080fd5b816020840160208301376000602083830101528093505050509250925092565b60005b83811015614e00578181015183820152602001614de8565b838111156139555750506000910152565b60008151808452614e29816020860160208601614de5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061488b6020830184614e11565b60008060408385031215614e8157600080fd5b823591506020830135614ad281614a65565b803561ffff811681146135a057600080fd5b600080600080600060a08688031215614ebd57600080fd5b614ec686614e93565b9450614ed460208701614e93565b9350614ee260408701614e93565b9250614ef060608701614e93565b9150614efe60808701614e93565b90509295509295909350565b600080600060608486031215614f1f57600080fd5b8335614f2a81614a65565b9250602084013591506040840135614f4181614b05565b809150509250925092565b60008060408385031215614f5f57600080fd5b8235614f6a81614a65565b9150614f7860208401614e93565b90509250929050565b600060208284031215614f9357600080fd5b813560ff8116811461488b57600080fd5b600060208284031215614fb657600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115614fff57614fff614fbd565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561503c5761503c614fbd565b500290565b600082615077577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60006020828403121561508e57600080fd5b815161488b81614b05565b6000828210156150ab576150ab614fbd565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600080604083850312156150f257600080fd5b505080516020909101519092909150565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015260006148886040830184614e11565b60006020828403121561514457600080fd5b815167ffffffffffffffff81111561515b57600080fd5b8201601f8101841361516c57600080fd5b805161517a614dab82614cfa565b81815285602083850101111561518f57600080fd5b613e9d826020830160208601614de5565b6000602082840312156151b257600080fd5b815161488b81614a65565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156151ef576151ef614fbd565b5060010190565b60008251615208818460208701614de5565b919091019291505056fea26469706673582212209d39bb9d4972b515acdad1ffb757acd15e103ca6ee762f88a6382b36243734ba64736f6c634300080a00336101406040523480156200001257600080fd5b5060405162005e9738038062005e97833981016040819052620000359162000198565b60016000556001600160a01b0383166200006257604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038316608081905260408051636f307dc360e01b81529051636f307dc3916004808201926020929091908290030181865afa158015620000ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d39190620001ea565b6001600160a01b031660a0816001600160a01b031681525050826001600160a01b0316634f0e0ef36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200012b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001519190620001ea565b6001600160a01b0390811660c0529190911660e0819052151561010052151561012052506200020f565b80516001600160a01b03811681146200019357600080fd5b919050565b600080600060608486031215620001ae57600080fd5b620001b9846200017b565b9250620001c9602085016200017b565b915060408401518015158114620001df57600080fd5b809150509250925092565b600060208284031215620001fd57600080fd5b62000208826200017b565b9392505050565b60805160a05160c05160e0516101005161012051615a86620004116000396000818161061101528181612fb5015261481f01526000818161031701528181610dde015281816144f901526146e5015260008181610557015281816146a901526147a901526000818161034b0152818161387d015261392d01526000818161047301528181611bfe0152818161274f0152818161280d0152818161366a01526137dd015260008181610665015281816109d801528181610b0301528181610bd501528181610cdd01528181610e6501528181610fe30152818161114e0152818161120e0152818161132e015281816114510152818161162b01528181611708015281816117e0015281816119e501528181611b1201528181611d9501528181611ed5015281816120040152818161216801528181612290015281816123c601528181612568015281816126390152818161266f0152818161293d01528181612a2101528181612a8a01528181612bde01528181612d2601528181612e6801528181612ec2015281816130a10152818161311b015281816131b401528181613341015281816134c10152818161358a0152818161372f01528181613a1a01528181613b2e01528181613dbb015281816142200152818161432801528181614492015281816148e7015281816149e801528181614aae0152614d8f0152615a866000f3fe6080604052600436106102695760003560e01c8063860aefcf11610153578063c7de38a6116100cb578063dfd594651161007f578063eb9606df11610064578063eb9606df1461081e578063f9eaee0d1461083e578063ffd9b9071461085e57600080fd5b8063dfd59465146107de578063e1f21c67146107fe57600080fd5b8063cff0ab96116100b0578063cff0ab96146106ef578063d9ccbec114610783578063dcf65482146107be57600080fd5b8063c7de38a6146106a7578063caa5c23f146106dc57600080fd5b80639c55a05411610122578063b55bb84b11610107578063b55bb84b14610633578063c12c21c014610653578063c690908a1461068757600080fd5b80639c55a054146105df578063b1836d32146105ff57600080fd5b8063860aefcf146104db5780639408b63f146105455780639b67ab30146105795780639be0536a146105bd57600080fd5b80635d91a0e0116101e65780636d19b486116101b55780637071b7c51161019a5780637071b7c51461049557806379c0ef91146104a857806382871ace146104c857600080fd5b80636d19b486146104415780636f307dc31461046157600080fd5b80635d91a0e0146103e85780635f73fbec146103fb578063601d66f61461040e5780636c8f225d1461042e57600080fd5b80633d9287fa1161023d5780635019e20a116102225780635019e20a1461039257806354fd4d50146103b257806359781034146103d557600080fd5b80633d9287fa146103055780634f0e0ef31461033957600080fd5b8062842b571461026e578063256ac915146102905780632a7ba1f7146102c55780632b7c7b11146102e5575b600080fd5b34801561027a57600080fd5b5061028e6102893660046151bf565b61087e565b005b34801561029c57600080fd5b506102b06102ab3660046151f8565b61098e565b60405190151581526020015b60405180910390f35b3480156102d157600080fd5b5061028e6102e0366004615215565b610a61565b3480156102f157600080fd5b5061028e610300366004615215565b610c3b565b34801561031157600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561034557600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102bc565b34801561039e57600080fd5b5061028e6103ad3660046151f8565b610d6a565b3480156103be57600080fd5b506103c7600281565b6040519081526020016102bc565b61028e6103e336600461522e565b61108c565b61028e6103f63660046152bb565b611275565b61028e610409366004615340565b611589565b34801561041a57600080fd5b5061028e6104293660046153d8565b6117de565b61028e61043c36600461541b565b611900565b34801561044d57600080fd5b506102b061045c3660046151f8565b611c31565b34801561046d57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b61028e6104a336600461546e565b611c60565b3480156104b457600080fd5b5061036d6104c3366004615215565b611f3e565b61028e6104d63660046152bb565b611f4b565b3480156104e757600080fd5b5060025461051c906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041682565b604080516fffffffffffffffffffffffffffffffff9384168152929091166020830152016102bc565b34801561055157600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561058557600080fd5b506004546040805167ffffffffffffffff608084901c1681526fffffffffffffffffffffffffffffffff9092166020830152016102bc565b3480156105c957600080fd5b506105d261227d565b6040516102bc91906154e2565b3480156105eb57600080fd5b5061028e6105fa36600461553c565b61228e565b34801561060b57600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561063f57600080fd5b5061028e61064e3660046151f8565b6123c4565b34801561065f57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561069357600080fd5b5061028e6106a23660046151f8565b6124c6565b3480156106b357600080fd5b506106c76106c23660046151f8565b612668565b604080519283526020830191909152016102bc565b61028e6106ea366004615557565b61289b565b3480156106fb57600080fd5b5060015461074e906fffffffffffffffffffffffffffffffff811690700100000000000000000000000000000000810460ff169071010000000000000000000000000000000000900464ffffffffff1683565b604080516fffffffffffffffffffffffffffffffff9094168452911515602084015264ffffffffff16908201526060016102bc565b34801561078f57600080fd5b506102b061079e366004615599565b600360209081526000928352604080842090915290825290205460ff1681565b3480156107ca57600080fd5b5061028e6107d93660046151f8565b612a88565b3480156107ea57600080fd5b506103c76107f93660046151f8565b612b86565b34801561080a57600080fd5b5061028e61081936600461522e565b612c6d565b34801561082a57600080fd5b5061028e6108393660046155c7565b612ec0565b34801561084a57600080fd5b506102b06108593660046151f8565b613057565b34801561086a57600080fd5b5061028e6108793660046155ee565b6131b2565b600260005414156108f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b6002600090815573ffffffffffffffffffffffffffffffffffffffff8316808252600360209081526040808420338086529083529381902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081527f9b3258bc4904fd6426b99843e206c6c7cdb1fd0f040121c25b71dafbb3851ee0910160405180910390a350506001600055565b6040517f055ee9b500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063055ee9b590602401602060405180830381865afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a43919061560b565b73ffffffffffffffffffffffffffffffffffffffff16141592915050565b60026000541415610ace576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610b5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b83919061560b565b9050610b903382846132eb565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906395373018906024015b600060405180830381600087803b158015610c1a57600080fd5b505af1158015610c2e573d6000803e3d6000fd5b5050600160005550505050565b60026000541415610ca8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610d39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5d919061560b565b9050610b90338284613411565b60026000541415610dd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000557f000000000000000000000000000000000000000000000000000000000000000015610e34576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610ec1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee5919061560b565b33600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915290205490915060ff16610f52576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f5d82613583565b5090508015610f98576040517ff713841e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b15801561102757600080fd5b505af115801561103b573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692503391507f93c70cc9715bef0d83edf2095f3595402279d274f402a73ffc17f1bcb19d863d90600090a35050600160005550565b600260005414156110f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611106613875565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063e958b70490602401602060405180830381865afa158015611197573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bb919061560b565b90506111c9848285856139b7565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401600060405180830381600087803b15801561125257600080fd5b505af1158015611266573d6000803e3d6000fd5b50506001600055505050505050565b600260005414156112e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611375573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611399919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166113e8576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806113f483613583565b915091508161142f576040517f1fdd676f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611437613875565b831561144d5761144d85858b8660016000613ae3565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632362a2d88b600185338e8e8e6040518863ffffffff1660e01b81526004016114b59796959493929190615663565b6020604051808303816000875af11580156114d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f891906156bf565b90508873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f7dfecd8419723a9d3954585a30c2a270165d70aafa146c11c1e1b88ae14390648460405161157091815260200190565b60405180910390a4505060016000555050505050505050565b600260005414156115f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ab919061560b565b90506116b5613875565b81156116cb576116cb8383338460016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d89061174a903390600090819083908d908d908d90600401615663565b6020604051808303816000875af1158015611769573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178d91906156bf565b5060405173ffffffffffffffffffffffffffffffffffffffff87169033907f460ad03b1cf79b1d64d3aefa28475f110ab66e84649c52bb41ed796b9b39198190600090a35050600160005550505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611849573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118d1576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff90811670010000000000000000000000000000000002911617600255565b6002600054141561196d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000908155606461198461ffff851687615707565b61198e9190615744565b9050611999816144f7565b6119a2816145e8565b6119ab84614668565b6119b3613875565b6040517f172c48c7000000000000000000000000000000000000000000000000000000008152600060048201819052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a64919061577f565b61ffff169150611a789050816127106157ae565b611a829083615707565b611a8c8288615707565b11611ac3576040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff86811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611b5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b81919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638587604051611bef92919091825261ffff16602082015260400190565b60405180910390a3611c2386827f00000000000000000000000000000000000000000000000000000000000000008a6139b7565b505060016000555050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526006602052604081205415155b92915050565b60026000541415611ccd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611cdb856144f7565b611ce484614668565b611ced856145e8565b600154700100000000000000000000000000000000900460ff1615611d3e576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d46613875565b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff85811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611de0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e04919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638885604051611e7292919091825261ffff16602082015260400190565b60405180910390a38215611e9057611e908484878460006001613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015611f1957600080fd5b505af1158015611f2d573d6000803e3d6000fd5b505060016000555050505050505050565b6000611c5a60058361480f565b60026000541415611fb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa15801561204b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206f919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166120be576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120c661481b565b6120fc576040517f7e52ccb400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061210782612668565b509050612112613875565b82156121285761212884848a8560016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d8906121aa908c90600290879033908f908f908f90600401615663565b6020604051808303816000875af11580156121c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ed91906156bf565b90508773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167ffada13ff2d5e1a1d9da37ad4a4130893b34e3c69c32b17f87ec31fd661b867078460405161226591815260200190565b60405180910390a45050600160005550505050505050565b6060612289600561486b565b905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612381576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561242f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612453919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146124b7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614878565b5050565b60026000541415612533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156125c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e8919061560b565b90506125f4818361489a565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401610c00565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126fc919061560b565b905060008061270b8387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156127a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127c991906156bf565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015291965061271091851690637afb010490604401602060405180830381865afa158015612863573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061288791906156bf565b6128919190615744565b9350505050915091565b60026000541415612908576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129bd919061560b565b90506129c7613875565b8115612a7e576129dc83833384600080613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015612a6557600080fd5b505af1158015612a79573d6000803e3d6000fd5b505050505b5050600160005550565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612af3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b17919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b7b576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614c92565b600080612b9283612668565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152919350600092507f000000000000000000000000000000000000000000000000000000000000000090911690633192195c906024016040805180830381865afa158015612c26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4a91906157c5565b9150819050612c5b61271084615707565b612c659190615744565b949350505050565b60026000541415612cda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063fdd5764590602401602060405180830381865afa158015612d6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d91919061560b565b73ffffffffffffffffffffffffffffffffffffffff161480612dd7575073ffffffffffffffffffffffffffffffffffffffff831660009081526006602052604090205415155b15612e0e576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612eac57600080fd5b505af1158015611c23573d6000803e3d6000fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f4f919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612fb3576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000061300a576040517f50dd11fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805464ffffffffff90921671010000000000000000000000000000000000027fffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffffff909216919091179055565b6040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063f67c5bd090602401602060405180830381865afa1580156130e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061310c91906156bf565b905080158015906131ab5750807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015613184573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a891906156bf565b16155b9392505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561321d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613241919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146132a5576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018054911515700100000000000000000000000000000000027fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff909216919091179055565b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600060448301819052917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561338c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133b091906156bf565b90506133bb816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f98274bf834d179ee08dc0604071b0dc90b54731bd5f725a5a96a39a86bce025a8360405161340391815260200190565b60405180910390a250505050565b61341a816144f7565b600154700100000000000000000000000000000000900460ff161561346b576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600160448301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561350c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061353091906156bf565b905061353b816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f9cac51154cc0d835e2f9c9d1f59a9344588cee107f4203bf58a8c797e3a58c458360405161340391815260200190565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613617919061560b565b90506000806136268387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156136c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136e491906156bf565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529195506000917f00000000000000000000000000000000000000000000000000000000000000001690633192195c906024016040805180830381865afa158015613775573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061379991906157c5565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350600092506127109187169063f9a6503090604401602060405180830381865afa158015613837573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061385b91906156bf565b6138659190615707565b9092109794965093945050505050565b34156139b5577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156138e357600080fd5b505af11580156138f7573d6000803e3d6000fd5b50506040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201523460248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16935063a9059cbb925060440190506020604051808303816000875af115801561398f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139b391906157e9565b505b565b6139c084614cb4565b6040517f830aa74500000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f0000000000000000000000000000000000000000000000000000000000000000169063830aa74590608401600060405180830381600087803b158015613a5e57600080fd5b505af1158015613a72573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fa32435755c235de2976ed44a75a2f85cb01faf0c894f639fe0c32bb9455fea8f83604051613ad591815260200190565b60405180910390a350505050565b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301523060248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b158015613b7257600080fd5b505af1158015613b86573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff871692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a28460005b8181101561441d5736888883818110613bea57613bea615806565b9050602002810190613bfc9190615835565b90506004613c0d6020830183615873565b90501015613c47576040517fe2b0e50600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b30613c5560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16141561421c578415613ca9576040517f5fb9107f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613cb86020830183615873565b613cc1916158d8565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167f59781034000000000000000000000000000000000000000000000000000000001415613e3c5760008080613d1e6020860186615873565b613d2c916004908290615920565b810190613d39919061522e565b925092509250613e34838c73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614613e2b576040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015613e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e26919061560b565b613e2d565b8b5b84846139b7565b505050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2b7c7b11000000000000000000000000000000000000000000000000000000001415613ec757600194506000613e996020840184615873565b613ea7916004908290615920565b810190613eb49190615215565b9050613ec1898983613411565b50614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2a7ba1f7000000000000000000000000000000000000000000000000000000001415613f80578415613f49576040517fc0b0caa800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613f586020840184615873565b613f66916004908290615920565b810190613f739190615215565b9050613ec18989836132eb565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f233a8caa0000000000000000000000000000000000000000000000000000000014156140e457600080613fda6020850185615873565b613fe8916004908290615920565b810190613ff5919061594a565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c8116600483015292945090925082918416906370a0823190602401602060405180830381865afa158015614069573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061408d91906156bf565b10156140dd576040517fa5ac537300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016108e7565b5050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fc690908a00000000000000000000000000000000000000000000000000000000141561416457600061413d6020840184615873565b61414b916004908290615920565b81019061415891906151f8565b9050613ec1888261489a565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f23e27a640000000000000000000000000000000000000000000000000000000014156141e45760006141bd6020840184615873565b6141cb916004908290615920565b8101906141d891906151f8565b9050613ec18882614d42565b6040517f1e9e7e7a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50614414565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff68754361426760208501856151f8565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156142d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142f4919061560b565b73ffffffffffffffffffffffffffffffffffffffff16148061436d575073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001661435560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16145b156143a4576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6144126143b46020830183615873565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506143f69250505060208401846151f8565b73ffffffffffffffffffffffffffffffffffffffff1690614e39565b505b50600101613bcf565b506040517f60c8e8938c9a0c0d88a98d6f1c562ce68077e12bf3edb8047378f2f736cb45b490600090a16040517fe1998cf900000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff86811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b1580156144d657600080fd5b505af11580156144ea573d6000803e3d6000fd5b5050505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006139b3576001546fffffffffffffffffffffffffffffffff9081169081146124c257600454608081901c906fffffffffffffffffffffffffffffffff16600067ffffffffffffffff8316431461456e578461458a565b61458a6fffffffffffffffffffffffffffffffff831686615976565b9050838111156145c6576040517f675f1a5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff81164360801b176004555050505050565b6002546fffffffffffffffffffffffffffffffff16811080614631575060025470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681115b156139b3576040517fce16799400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61467061481b565b156146a7576040517f63fc31c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1615614806577f0000000000000000000000000000000000000000000000000000000000000000801561472657503373ffffffffffffffffffffffffffffffffffffffff821614155b1561475d576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600160248301527f00000000000000000000000000000000000000000000000000000000000000001690639dc29fac90604401600060405180830381600087803b1580156147ed57600080fd5b505af1158015614801573d6000803e3d6000fd5b505050505b6139b381614cb4565b60006131ab8383614e7b565b60007f0000000000000000000000000000000000000000000000000000000000000000801561228957505060015471010000000000000000000000000000000000900464ffffffffff1642101590565b606060006131ab83614ea5565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f01565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561492b57600080fd5b505af115801561493f573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527fdf498aa1c340e992665d6fb4f3be8436d452c45a630cb6d7fab7963da39bac8793500190505b60405180910390a15050565b6040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600091829160019183917f00000000000000000000000000000000000000000000000000000000000000001690638991b2f190602401602060405180830381865afa158015614a2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a5391906156bf565b90505b808211614c895780821615614c7d576040517fe75538c700000000000000000000000000000000000000000000000000000000815260048101839052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e75538c7906024016040805180830381865afa158015614af4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b18919061577f565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529294509092506000918416906370a0823190602401602060405180830381865afa158015614b8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bb191906156bf565b90506001811115614c79576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff8481166024830152600091908b169063f9a6503090604401602060405180830381865afa158015614c33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c5791906156bf565b978801979050614c6b61ffff841682615707565b614c759088615976565b9650505b5050505b600182901b9150614a56565b50509250929050565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f50565b3373ffffffffffffffffffffffffffffffffffffffff821614801590614d0b575033600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16155b156139b3576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b158015614dd357600080fd5b505af1158015614de7573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527f69db9e9764da61b6681b89fb0f5be018506e0342036e56b59c3015a620d60977935001905061498d565b60606131ab83836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250615043565b6000826000018281548110614e9257614e92615806565b9060005260206000200154905092915050565b606081600001805480602002602001604051908101604052809291908181526020018280548015614ef557602002820191906000526020600020905b815481526020019060010190808311614ee1575b50505050509050919050565b6000818152600183016020526040812054614f4857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611c5a565b506000611c5a565b60008181526001830160205260408120548015615039576000614f746001836157ae565b8554909150600090614f88906001906157ae565b9050818114614fed576000866000018281548110614fa857614fa8615806565b9060005260206000200154905080876000018481548110614fcb57614fcb615806565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080614ffe57614ffe61598e565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611c5a565b6000915050611c5a565b6060612c65848460008585843b6150b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108e7565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516150df91906159ed565b60006040518083038185875af1925050503d806000811461511c576040519150601f19603f3d011682016040523d82523d6000602084013e615121565b606091505b509150915061513182828661513c565b979650505050505050565b6060831561514b5750816131ab565b82511561515b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e791906159ff565b73ffffffffffffffffffffffffffffffffffffffff811681146139b357600080fd5b80151581146139b357600080fd5b600080604083850312156151d257600080fd5b82356151dd8161518f565b915060208301356151ed816151b1565b809150509250929050565b60006020828403121561520a57600080fd5b81356131ab8161518f565b60006020828403121561522757600080fd5b5035919050565b60008060006060848603121561524357600080fd5b833561524e8161518f565b9250602084013561525e8161518f565b929592945050506040919091013590565b60008083601f84011261528157600080fd5b50813567ffffffffffffffff81111561529957600080fd5b6020830191508360208260051b85010111156152b457600080fd5b9250929050565b60008060008060008060a087890312156152d457600080fd5b86356152df8161518f565b955060208701356152ef8161518f565b9450604087013593506060870135615306816151b1565b9250608087013567ffffffffffffffff81111561532257600080fd5b61532e89828a0161526f565b979a9699509497509295939492505050565b60008060008060006080868803121561535857600080fd5b85356153638161518f565b945060208601359350604086013561537a816151b1565b9250606086013567ffffffffffffffff81111561539657600080fd5b6153a28882890161526f565b969995985093965092949392505050565b80356fffffffffffffffffffffffffffffffff811681146153d357600080fd5b919050565b600080604083850312156153eb57600080fd5b6153f4836153b3565b9150615402602084016153b3565b90509250929050565b61ffff811681146139b357600080fd5b6000806000806080858703121561543157600080fd5b8435935060208501356154438161518f565b925060408501356154538161540b565b915060608501356154638161540b565b939692955090935050565b60008060008060006080868803121561548657600080fd5b8535945060208601356154988161518f565b9350604086013567ffffffffffffffff8111156154b457600080fd5b6154c08882890161526f565b90945092505060608601356154d48161540b565b809150509295509295909350565b6020808252825182820181905260009190848201906040850190845b8181101561553057835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016154fe565b50909695505050505050565b60006020828403121561554e57600080fd5b6131ab826153b3565b6000806020838503121561556a57600080fd5b823567ffffffffffffffff81111561558157600080fd5b61558d8582860161526f565b90969095509350505050565b600080604083850312156155ac57600080fd5b82356155b78161518f565b915060208301356151ed8161518f565b6000602082840312156155d957600080fd5b813564ffffffffff811681146131ab57600080fd5b60006020828403121561560057600080fd5b81356131ab816151b1565b60006020828403121561561d57600080fd5b81516131ab8161518f565b6003811061565f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b73ffffffffffffffffffffffffffffffffffffffff888116825260e082019061568f602084018a615628565b6040830197909752948616606082015292909416608083015260a082015291151560c09092019190915292915050565b6000602082840312156156d157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561573f5761573f6156d8565b500290565b60008261577a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000806040838503121561579257600080fd5b825161579d8161518f565b60208401519092506151ed8161540b565b6000828210156157c0576157c06156d8565b500390565b600080604083850312156157d857600080fd5b505080516020909101519092909150565b6000602082840312156157fb57600080fd5b81516131ab816151b1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc183360301811261586957600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126158a857600080fd5b83018035915067ffffffffffffffff8211156158c357600080fd5b6020019150368190038213156152b457600080fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156159185780818660040360031b1b83161692505b505092915050565b6000808585111561593057600080fd5b8386111561593d57600080fd5b5050820193919092039150565b6000806040838503121561595d57600080fd5b82356159688161518f565b946020939093013593505050565b60008219821115615989576159896156d8565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60005b838110156159d85781810151838201526020016159c0565b838111156159e7576000848401525b50505050565b600082516158698184602087016159bd565b6020815260008251806020840152615a1e8160408501602087016159bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea2646970667358221220a3f4a705ab580a6ada1e438cd2ee4abc001b62d1d171fce12c41994900fef21664736f6c634300080a003360a06040523480156200001157600080fd5b5060405162005f3d38038062005f3d8339810160408190526200003491620012eb565b826001600160a01b031663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000073573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200009991906200147f565b6001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000d7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000fd91906200147f565b6000805460ff191690556001600160a01b0381166200012f57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200016e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200019491906200147f565b6001600160a01b03908116608052600180546001600160a01b031916918616918217905560408051636f307dc360e01b81529051919250636f307dc39160048083019260209291908290030181865afa158015620001f6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200021c91906200147f565b600260006101000a8154816001600160a01b0302191690836001600160a01b03160217905550826001600160a01b031663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000281573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a791906200147f565b6001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200030b91906200147f565b600080546001600160a01b039290921661010002610100600160a81b0319909216919091179055620003626103e860c86200034b6101f4612710620014bc565b60646200035c60c8612710620014bc565b620005e8565b60408101515160005b81811015620003ee576000836040015182815181106200038f576200038f620014e2565b6020026020010151600001519050620003ae81620007c260201b60201c565b620003e48185604001518481518110620003cc57620003cc620014e2565b60200260200101516020015162000a5e60201b60201c565b506001016200036b565b5060015460408051632630c12f60e01b815290516001600160a01b03909216916311ca4fc29186918491632630c12f9160048083019260209291908290030181865afa15801562000443573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200046991906200147f565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401600060405180830381600087803b158015620004b257600080fd5b505af1158015620004c7573d6000803e3d6000fd5b50506040516001600160a01b03861692507fa8b21f72cb83bce808df32dc2330217d744a1c22f3e9e44e4b11bbf049d37d9d9150600090a2600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000553573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200057991906200147f565b6001600160a01b03167f3f82447be465b0b5a4a9e54c74d5f6ae73f2e9537f2cc1590a340524703d096160405160405180910390a26020820151620005cb90620005c5906002620014f8565b62000bda565b81516020830151620005de919062000dc8565b5050505062001604565b6000620005f68585620014bc565b60015460405163172c48c760e01b81526000600482018190529293506001600160a01b039091169063172c48c7906024016040805180830381865afa15801562000644573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200066a91906200152a565b9150508061ffff168261ffff1614620006be57620006888262000f47565b60025460405161ffff841681526001600160a01b039091169060008051602062005f1d8339815191529060200160405180910390a25b60015460405163944ac59f60e01b815261ffff808a166004830152808916602483015280881660448301528087166064830152851660848201526001600160a01b039091169063944ac59f9060a401600060405180830381600087803b1580156200072857600080fd5b505af11580156200073d573d6000803e3d6000fd5b505050507f2214a403d5f8d049e52eacca974c6dea01a471e41d6a18903bfaf7dbc709741f878787612710620007749190620014bc565b876200078388612710620014bc565b6040805161ffff96871681529486166020860152928516848401529084166060840152909216608082015290519081900360a00190a150505050505050565b6001600160a01b038116620007ea57604051635919af9760e11b815260040160405180910390fd5b62000809816001600160a01b03166200116f60201b620023381760201c565b620008365760405163df4c572d60e01b81526001600160a01b038216600482015260240160405180910390fd5b6040516370a0823160e01b81523060048201526001600160a01b038216906370a0823190602401602060405180830381865afa92505050801562000899575060408051601f3d908101601f19168201909252620008969181019062001564565b60015b620008b75760405163528ca31d60e01b815260040160405180910390fd5b50600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200090c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200093291906200147f565b604051630f9a650360e41b8152670de0b6b3a764000060048201526001600160a01b038381166024830152919091169063f9a6503090604401602060405180830381865afa925050508015620009a7575060408051601f3d908101601f19168201909252620009a49181019062001564565b60015b620009c5576040516367a7cd4360e01b815260040160405180910390fd5b5060015460405163d48bfca760e01b81526001600160a01b0383811660048301529091169063d48bfca790602401600060405180830381600087803b15801562000a0e57600080fd5b505af115801562000a23573d6000803e3d6000fd5b50506040516001600160a01b03841692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a250565b6002546001600160a01b038381169116141562000a8e57604051633b899cf960e01b815260040160405180910390fd5b60015460405163172c48c760e01b8152600060048201819052916001600160a01b03169063172c48c7906024016040805180830381865afa15801562000ad8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000afe91906200152a565b91505061ffff8216158062000b1a57508061ffff168261ffff16115b1562000b39576040516333c6608d60e01b815260040160405180910390fd5b600154604051635385e2a160e11b81526001600160a01b03858116600483015261ffff851660248301529091169063a70bc54290604401600060405180830381600087803b15801562000b8b57600080fd5b505af115801562000ba0573d6000803e3d6000fd5b505060405161ffff851681526001600160a01b038616925060008051602062005f1d833981519152915060200160405180910390a2505050565b600062000be662001175565b6001600160a01b031663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801562000c24573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c4a91906200157e565b50509050600062000c606200117560201b60201c565b6001600160a01b031663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa15801562000c9d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000cc39190620015d5565b915050806001600160801b0316836001600160801b0316101562000cfa576040516309aadd6f60e41b815260040160405180910390fd5b826001600160801b0316826001600160801b03161462000dc35762000d1e62001175565b604051632715681560e21b81526001600160801b03851660048201526001600160a01b039190911690639c55a05490602401600060405180830381600087803b15801562000d6b57600080fd5b505af115801562000d80573d6000803e3d6000fd5b50506040516001600160801b03861681527fa030eec20ae970821387224ec3bb15b4bd22b89bfb86dc4d2b3827aa3d99e48d925060200190505b60405180910390a15b505050565b600062000dd462001175565b6001600160a01b031663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801562000e12573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e3891906200157e565b50509050816001600160801b0316836001600160801b0316118062000e6e5750806001600160801b0316826001600160801b0316115b1562000e8d576040516309aadd6f60e41b815260040160405180910390fd5b62000e9762001175565b60405163300eb37b60e11b81526001600160801b038086166004830152841660248201526001600160a01b03919091169063601d66f690604401600060405180830381600087803b15801562000eec57600080fd5b505af115801562000f01573d6000803e3d6000fd5b5050604080516001600160801b038088168252861660208201527f4d4981437d0211f9e6843eb024d9ada1fa3a99514d4343d4aece106dd11524bb935001905062000dba565b600154600254604051635385e2a160e11b81526001600160a01b03918216600482015261ffff8416602482015291169063a70bc54290604401600060405180830381600087803b15801562000f9b57600080fd5b505af115801562000fb0573d6000803e3d6000fd5b505050506000600160009054906101000a90046001600160a01b03166001600160a01b031663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200100a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001030919062001564565b905060015b8181101562000dc35760015460405163172c48c760e01b81526004810183905260009182916001600160a01b039091169063172c48c7906024016040805180830381865afa1580156200108c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010b291906200152a565b915091508461ffff168161ffff1611156200116457600154604051635385e2a160e11b81526001600160a01b03848116600483015261ffff881660248301529091169063a70bc54290604401600060405180830381600087803b1580156200111957600080fd5b505af11580156200112e573d6000803e3d6000fd5b505060405161ffff881681526001600160a01b038516925060008051602062005f1d833981519152915060200160405180910390a25b505060010162001035565b3b151590565b60015460408051632f7a188160e01b815290516000926001600160a01b031691632f7a18819160048083019260209291908290030181865afa158015620011c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011e691906200147f565b905090565b6001600160a01b03811681146200120157600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b03811182821017156200123f576200123f62001204565b60405290565b604080519081016001600160401b03811182821017156200123f576200123f62001204565b604051601f8201601f191681016001600160401b038111828210171562001295576200129562001204565b604052919050565b80516001600160801b0381168114620012b557600080fd5b919050565b8051620012b581620011eb565b805161ffff81168114620012b557600080fd5b80518015158114620012b557600080fd5b6000806000606084860312156200130157600080fd5b83516200130e81620011eb565b809350506020808501516200132381620011eb565b604086810151919450906001600160401b03808211156200134357600080fd5b9087019060a0828a0312156200135857600080fd5b620013626200121a565b6200136d836200129d565b81526200137c8584016200129d565b8582015283830151828111156200139257600080fd5b8301601f81018b13620013a457600080fd5b805183811115620013b957620013b962001204565b620013c9878260051b016200126a565b818152878101945060069190911b82018701908c821115620013ea57600080fd5b918701915b81831015620014435786838e031215620014095760008081fd5b6200141362001245565b83516200142081620011eb565b81526200142f848a01620012c7565b818a015285529387019391860191620013ef565b838701525062001458905060608401620012ba565b60608201526200146b60808401620012da565b608082015280955050505050509250925092565b6000602082840312156200149257600080fd5b81516200149f81620011eb565b9392505050565b634e487b7160e01b600052601160045260246000fd5b600061ffff83811690831681811015620014da57620014da620014a6565b039392505050565b634e487b7160e01b600052603260045260246000fd5b60006001600160801b0382811684821681151582840482111615620015215762001521620014a6565b02949350505050565b600080604083850312156200153e57600080fd5b82516200154b81620011eb565b91506200155b60208401620012c7565b90509250929050565b6000602082840312156200157757600080fd5b5051919050565b6000806000606084860312156200159457600080fd5b6200159f846200129d565b9250620015af60208501620012da565b9150604084015164ffffffffff81168114620015ca57600080fd5b809150509250925092565b60008060408385031215620015e957600080fd5b620015f4836200129d565b91506200155b602084016200129d565b608051614878620016a56000396000818161033601528181610446015281816107c5015281816108c0015281816109ae01528181610b8301528181610f0a015281816113e1015281816114cf015281816115bb015281816116ab015281816117990152818161187d01528181611ad901528181611bc601528181611cb301528181611da0015281816120090152818161218c015261227901526148786000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80638456cb59116100f9578063dc2b21c111610097578063f0527ac611610071578063f0527ac6146103d7578063f206d32a146103df578063fb1bd8c4146103f2578063ffd9b9071461040557600080fd5b8063dc2b21c11461039e578063e6492d7b146103b1578063eb9606df146103c457600080fd5b8063a50cf2c8116100d3578063a50cf2c814610331578063a70bc54214610358578063b53472ef1461036b578063c12c21c01461037e57600080fd5b80638456cb59146103035780639c55a0541461030b5780639f1c50691461031e57600080fd5b806350e036ff1161016657806354fd4d501161014057806354fd4d50146102b25780635c975abb146102ba5780636f307dc3146102d05780637bccacee146102f057600080fd5b806350e036ff1461027657806352438e541461028c578063526a41e81461029f57600080fd5b80633e7c88d6116101a25780633e7c88d6146102355780633f4ba83a14610248578063456e0742146102505780635094cb4f1461026357600080fd5b806324147708146101c95780632954018c146101de5780632f7a18811461022d575b600080fd5b6101dc6101d7366004614307565b610418565b005b60005461020390610100900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6102036106fe565b6101dc610243366004614334565b610797565b6101dc610892565b6101dc61025e366004614307565b610980565b61020361027136600461436d565b610b36565b61027e610b49565b604051908152602001610224565b6101dc61029a366004614307565b610b55565b6101dc6102ad366004614394565b610edc565b61027e600281565b60005460ff166040519015158152602001610224565b6002546102039073ffffffffffffffffffffffffffffffffffffffff1681565b6101dc6102fe3660046143c2565b6113b3565b6101dc6114a1565b6101dc61031936600461440e565b61158d565b6101dc61032c36600461442b565b61167d565b6102037f000000000000000000000000000000000000000000000000000000000000000081565b6101dc610366366004614334565b61176b565b6101dc610379366004614307565b61184f565b6001546102039073ffffffffffffffffffffffffffffffffffffffff1681565b6101dc6103ac366004614459565b611aab565b6101dc6103bf366004614307565b611b98565b6101dc6103d236600461448f565b611c85565b6101dc611d72565b6101dc6103ed3660046144ac565b611fdb565b6101dc610400366004614307565b61215e565b6101dc61041336600461451d565b61224b565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156104a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c6919061453a565b6104fc576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006105078261233e565b90506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015610578573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059c9190614557565b90508181166106f9576001546040517fa366f496000000000000000000000000000000000000000000000000000000008152918317600483018190529173ffffffffffffffffffffffffffffffffffffffff9091169063a366f49690602401600060405180830381600087803b15801561061557600080fd5b505af1158015610629573d6000803e3d6000fd5b505050506106356106fe565b6040517fffd9b9070000000000000000000000000000000000000000000000000000000081526001600482015273ffffffffffffffffffffffffffffffffffffffff919091169063ffd9b90790602401600060405180830381600087803b15801561069f57600080fd5b505af11580156106b3573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692507ff17b849746e74d7186170c9553d4bbf60b4f8bb1ed81fe50c099b934fb078f059150600090a25b505050565b600154604080517f2f7a1881000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691632f7a18819160048083019260209291908290030181865afa15801561076e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610792919061457b565b905090565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610821573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610845919061453a565b61087b576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108848261241e565b61088e82826127f8565b5050565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa15801561091c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610940919061453a565b610976576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61097e612a15565b565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610a0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2e919061453a565b610a64576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a6d81612af6565b6001546040517f9f5f86ae00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015290911690639f5f86ae90602401600060405180830381600087803b158015610ada57600080fd5b505af1158015610aee573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507f5a0b7d0f9c24b39256e112a0584b4c5ce38d8f1dee2e7c56f15b852604cdc8869150600090a250565b6000610b43600383612cb8565b92915050565b60006107926003612ccb565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610bdf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c03919061453a565b610c39576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610c86576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063fdd5764590602401602060405180830381865afa158015610cf7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1b919061457b565b905073ffffffffffffffffffffffffffffffffffffffff8116610d6a576040517f1170cc2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f6e98e5e400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526000602483015290911690636e98e5e490604401600060405180830381600087803b158015610dde57600080fd5b505af1158015610df2573d6000803e3d6000fd5b50506001546040517f6e98e5e40000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff86811660248301529091169250636e98e5e49150604401600060405180830381600087803b158015610e6a57600080fd5b505af1158015610e7e573d6000803e3d6000fd5b50505050610e96826003612cd590919063ffffffff16565b5060405173ffffffffffffffffffffffffffffffffffffffff8316907fab9f405bf0c19b97f65a7031634db41569cd2f0e0376a610a1e977f9ab22b58f90600090a25050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610f66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8a919061453a565b610fc0576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fc982612af6565b6000806000610fd66106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015611020573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110449190614598565b9250925092506000806110556106fe565b73ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa15801561109e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c291906145e5565b9150915060006110d06106fe565b73ffffffffffffffffffffffffffffffffffffffff16639be0536a6040518163ffffffff1660e01b8152600401600060405180830381865afa15801561111a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526111609190810190614643565b9050600061116c6106fe565b73ffffffffffffffffffffffffffffffffffffffff1663b1836d326040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111da919061453a565b600154604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905192935073ffffffffffffffffffffffffffffffffffffffff909116916311ca4fc2918c918491632630c12f9160048083019260209291908290030181865afa158015611256573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061127a919061457b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156112e757600080fd5b505af11580156112fb573d6000803e3d6000fd5b5050505087156113675761130e87612cf7565b6113188484612f5d565b61132186613152565b60005b82518110156113575761134f83828151811061134257611342614726565b60200260200101516132a3565b600101611324565b50801561136757611367856133c9565b60405173ffffffffffffffffffffffffffffffffffffffff8a16907fa8b21f72cb83bce808df32dc2330217d744a1c22f3e9e44e4b11bbf049d37d9d90600090a2505050505050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561143d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611461919061453a565b611497576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61088e828261357b565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561152b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061154f919061453a565b611585576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61097e6139c3565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611617573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163b919061453a565b611671576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81612cf7565b50565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611707573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172b919061453a565b611761576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61088e8282612f5d565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156117f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611819919061453a565b610884576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156118d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fd919061453a565b611933576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061193e8261233e565b90506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d39190614557565b9050818116156106f9576001546040517fa366f496000000000000000000000000000000000000000000000000000000008152918318600483018190529173ffffffffffffffffffffffffffffffffffffffff9091169063a366f49690602401600060405180830381600087803b158015611a4d57600080fd5b505af1158015611a61573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a2505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611b35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b59919061453a565b611b8f576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81613a83565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611c22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c46919061453a565b611c7c576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81613b3d565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611d0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d33919061453a565b611d69576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a816133c9565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611dfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e20919061453a565b611e56576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ec4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee8919061457b565b60015490915073ffffffffffffffffffffffffffffffffffffffff166311ca4fc2611f116106fe565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff91821660048201529084166024820152604401600060405180830381600087803b158015611f7f57600080fd5b505af1158015611f93573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507f3f82447be465b0b5a4a9e54c74d5f6ae73f2e9537f2cc1590a340524703d09619150600090a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015612065573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612089919061453a565b6120bf576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61271061ffff86161015806120e357506127106120dc8585614784565b61ffff1610155b806120fd57506127106120f68383614784565b61ffff1610155b15612134576040517f0b361d6900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6121578585612145866127106147aa565b85612152866127106147aa565b613c5c565b5050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156121e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061220c919061453a565b612242576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a816132a3565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156122d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122f9919061453a565b61232f576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81613152565b3b151590565b6001546040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063f67c5bd090602401602060405180830381865afa1580156123af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123d39190614557565b90508015806123e25750806001145b15612419576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b73ffffffffffffffffffffffffffffffffffffffff811661246b576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163b6124d6576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024015b60405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8216906370a0823190602401602060405180830381865afa92505050801561257a575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261257791810190614557565b60015b6125b0576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561261e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612642919061457b565b6040517ff9a65030000000000000000000000000000000000000000000000000000000008152670de0b6b3a7640000600482015273ffffffffffffffffffffffffffffffffffffffff8381166024830152919091169063f9a6503090604401602060405180830381865afa9250505080156126f8575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526126f591810190614557565b60015b61272e576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506001546040517fd48bfca700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301529091169063d48bfca790602401600060405180830381600087803b15801561279c57600080fd5b505af11580156127b0573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a250565b60025473ffffffffffffffffffffffffffffffffffffffff8381169116141561284d576040517f3b899cf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f172c48c70000000000000000000000000000000000000000000000000000000081526000600482018190529173ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa1580156128bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128e091906147cd565b91505061ffff821615806128fb57508061ffff168261ffff16115b15612932576040517f33c6608d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015261ffff851660248301529091169063a70bc54290604401600060405180830381600087803b1580156129a957600080fd5b505af11580156129bd573d6000803e3d6000fd5b505060405161ffff8516815273ffffffffffffffffffffffffffffffffffffffff861692507f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650915060200160405180910390a2505050565b60005460ff16612a81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016124cd565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b73ffffffffffffffffffffffffffffffffffffffff8116612b43576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163b612ba9576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024016124cd565b8073ffffffffffffffffffffffffffffffffffffffff1663c12c21c06040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612c2e575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252612c2b9181019061457b565b60015b612c64576040517fe9eddd1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60015473ffffffffffffffffffffffffffffffffffffffff82811691161461088e576040517fe9eddd1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612cc48383613e92565b9392505050565b6000610b43825490565b6000612cc48373ffffffffffffffffffffffffffffffffffffffff8416613ebc565b6000612d016106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015612d4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d6f9190614598565b505090506000612d7d6106fe565b73ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa158015612dc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dea91906145e5565b915050806fffffffffffffffffffffffffffffffff16836fffffffffffffffffffffffffffffffff161015612e4b576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826fffffffffffffffffffffffffffffffff16826fffffffffffffffffffffffffffffffff16146106f957612e7e6106fe565b6040517f9c55a0540000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff8516600482015273ffffffffffffffffffffffffffffffffffffffff9190911690639c55a05490602401600060405180830381600087803b158015612ef957600080fd5b505af1158015612f0d573d6000803e3d6000fd5b50506040516fffffffffffffffffffffffffffffffff861681527fa030eec20ae970821387224ec3bb15b4bd22b89bfb86dc4d2b3827aa3d99e48d925060200190505b60405180910390a1505050565b6000612f676106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015612fb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fd59190614598565b50509050816fffffffffffffffffffffffffffffffff16836fffffffffffffffffffffffffffffffff16118061302e5750806fffffffffffffffffffffffffffffffff16826fffffffffffffffffffffffffffffffff16115b15613065576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61306d6106fe565b6040517f601d66f60000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff80861660048301528416602482015273ffffffffffffffffffffffffffffffffffffffff919091169063601d66f690604401600060405180830381600087803b1580156130f057600080fd5b505af1158015613104573d6000803e3d6000fd5b5050604080516fffffffffffffffffffffffffffffffff8088168252861660208201527f4d4981437d0211f9e6843eb024d9ada1fa3a99514d4343d4aece106dd11524bb9350019050612f50565b600061315c6106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa1580156131a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131ca9190614598565b509150508015158215151461088e576131e16106fe565b6040517fffd9b907000000000000000000000000000000000000000000000000000000008152831515600482015273ffffffffffffffffffffffffffffffffffffffff919091169063ffd9b90790602401600060405180830381600087803b15801561324c57600080fd5b505af1158015613260573d6000803e3d6000fd5b505050507ff97ba903470ff3262b4a68a938fe81def401bac1bd742169d2e8d5c4ed2185d382604051613297911515815260200190565b60405180910390a15050565b73ffffffffffffffffffffffffffffffffffffffff81166132f0576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6132f86106fe565b6040517fb55bb84b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152919091169063b55bb84b90602401600060405180830381600087803b15801561336357600080fd5b505af1158015613377573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841681527fdac9a7995cbc0c0f01d78970fb6fd0b52fe0fe869eb6635e65cc1b5682b8325c925060200190505b60405180910390a150565b60006133d36106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801561341d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134419190614598565b925050508064ffffffffff168264ffffffffff161461088e578164ffffffffff168164ffffffffff16118061347c57508164ffffffffff1642115b156134b3576040517fe4eaca7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134bb6106fe565b6040517feb9606df00000000000000000000000000000000000000000000000000000000815264ffffffffff8416600482015273ffffffffffffffffffffffffffffffffffffffff919091169063eb9606df90602401600060405180830381600087803b15801561352b57600080fd5b505af115801561353f573d6000803e3d6000fd5b505060405164ffffffffff851681527f0b3eb35ba750e7a7e4d26c9eee3d226f4e1f68c5568f4a3d051c94b241b02ac092506020019050613297565b73ffffffffffffffffffffffffffffffffffffffff82166135c8576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82163b61362e576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016124cd565b61363781612af6565b60015473ffffffffffffffffffffffffffffffffffffffff8381169116148061369257506136636106fe565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b806136b7575060015473ffffffffffffffffffffffffffffffffffffffff8281169116145b806136f457506136c56106fe565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b1561372b576040517f727de5c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517fff68754300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063ff68754390602401602060405180830381865afa15801561379c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137c0919061457b565b73ffffffffffffffffffffffffffffffffffffffff1614158061388c57506001546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063fdd5764590602401602060405180830381865afa15801561384f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613873919061457b565b73ffffffffffffffffffffffffffffffffffffffff1614155b156138c3576040517f21ff1e7100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f6e98e5e400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152848116602483015290911690636e98e5e490604401600060405180830381600087803b15801561393857600080fd5b505af115801561394c573d6000803e3d6000fd5b50505050613964826003613faf90919063ffffffff16565b508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4bcbefaef68b99503d502f5a6abe7bca2b183ab8ac55457013c77d084ebd130560405160405180910390a35050565b60005460ff1615613a30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016124cd565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612acc3390565b6001546040517fdc2b21c100000000000000000000000000000000000000000000000000000000815260ff8316600482015273ffffffffffffffffffffffffffffffffffffffff9091169063dc2b21c190602401600060405180830381600087803b158015613af157600080fd5b505af1158015613b05573d6000803e3d6000fd5b505060405160ff841681527f73caacd705657a7d283e48ecf288b73bc517e3aea1bbc9da2fd54a979e8aa950925060200190506133be565b73ffffffffffffffffffffffffffffffffffffffff8116613b8a576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613b926106fe565b6040517fdcf6548200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152919091169063dcf6548290602401600060405180830381600087803b158015613bfd57600080fd5b505af1158015613c11573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841681527f32e53e2e527af8518ae889e5f7e674bc83f7cf68e4cc059aceeaa0e64208b85b925060200190506133be565b6000613c6885856147aa565b6001546040517f172c48c700000000000000000000000000000000000000000000000000000000815260006004820181905292935073ffffffffffffffffffffffffffffffffffffffff9091169063172c48c7906024016040805180830381865afa158015613cdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cff91906147cd565b9150508061ffff168261ffff1614613d6e57613d1a82613fd1565b60025460405161ffff8416815273ffffffffffffffffffffffffffffffffffffffff909116907f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac6509060200160405180910390a25b6001546040517f944ac59f00000000000000000000000000000000000000000000000000000000815261ffff808a1660048301528089166024830152808816604483015280871660648301528516608482015273ffffffffffffffffffffffffffffffffffffffff9091169063944ac59f9060a401600060405180830381600087803b158015613dfd57600080fd5b505af1158015613e11573d6000803e3d6000fd5b505050507f2214a403d5f8d049e52eacca974c6dea01a471e41d6a18903bfaf7dbc709741f878787612710613e4691906147aa565b87613e53886127106147aa565b6040805161ffff96871681529486166020860152928516848401529084166060840152909216608082015290519081900360a00190a150505050505050565b6000826000018281548110613ea957613ea9614726565b9060005260206000200154905092915050565b60008181526001830160205260408120548015613fa5576000613ee06001836147fc565b8554909150600090613ef4906001906147fc565b9050818114613f59576000866000018281548110613f1457613f14614726565b9060005260206000200154905080876000018481548110613f3757613f37614726565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080613f6a57613f6a614813565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610b43565b6000915050610b43565b6000612cc48373ffffffffffffffffffffffffffffffffffffffff8416614296565b6001546002546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015261ffff8416602482015291169063a70bc54290604401600060405180830381600087803b15801561404a57600080fd5b505af115801561405e573d6000803e3d6000fd5b505050506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156140d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140f59190614557565b905060015b818110156106f9576001546040517f172c48c700000000000000000000000000000000000000000000000000000000815260048101839052600091829173ffffffffffffffffffffffffffffffffffffffff9091169063172c48c7906024016040805180830381865afa158015614175573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061419991906147cd565b915091508461ffff168161ffff16111561428c576001546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015261ffff881660248301529091169063a70bc54290604401600060405180830381600087803b15801561422457600080fd5b505af1158015614238573d6000803e3d6000fd5b505060405161ffff8816815273ffffffffffffffffffffffffffffffffffffffff851692507f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650915060200160405180910390a25b50506001016140fa565b60008181526001830160205260408120546142dd57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610b43565b506000610b43565b73ffffffffffffffffffffffffffffffffffffffff8116811461167a57600080fd5b60006020828403121561431957600080fd5b8135612cc4816142e5565b61ffff8116811461167a57600080fd5b6000806040838503121561434757600080fd5b8235614352816142e5565b9150602083013561436281614324565b809150509250929050565b60006020828403121561437f57600080fd5b5035919050565b801515811461167a57600080fd5b600080604083850312156143a757600080fd5b82356143b2816142e5565b9150602083013561436281614386565b600080604083850312156143d557600080fd5b82356143e0816142e5565b91506020830135614362816142e5565b6fffffffffffffffffffffffffffffffff8116811461167a57600080fd5b60006020828403121561442057600080fd5b8135612cc4816143f0565b6000806040838503121561443e57600080fd5b8235614449816143f0565b91506020830135614362816143f0565b60006020828403121561446b57600080fd5b813560ff81168114612cc457600080fd5b64ffffffffff8116811461167a57600080fd5b6000602082840312156144a157600080fd5b8135612cc48161447c565b600080600080600060a086880312156144c457600080fd5b85356144cf81614324565b945060208601356144df81614324565b935060408601356144ef81614324565b925060608601356144ff81614324565b9150608086013561450f81614324565b809150509295509295909350565b60006020828403121561452f57600080fd5b8135612cc481614386565b60006020828403121561454c57600080fd5b8151612cc481614386565b60006020828403121561456957600080fd5b5051919050565b8051612419816142e5565b60006020828403121561458d57600080fd5b8151612cc4816142e5565b6000806000606084860312156145ad57600080fd5b83516145b8816143f0565b60208501519093506145c981614386565b60408501519092506145da8161447c565b809150509250925092565b600080604083850312156145f857600080fd5b8251614603816143f0565b6020840151909250614362816143f0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000602080838503121561465657600080fd5b825167ffffffffffffffff8082111561466e57600080fd5b818501915085601f83011261468257600080fd5b81518181111561469457614694614614565b8060051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f830116810181811085821117156146d7576146d7614614565b6040529182528482019250838101850191888311156146f557600080fd5b938501935b8285101561471a5761470b85614570565b845293850193928501926146fa565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061ffff8083168185168083038211156147a1576147a1614755565b01949350505050565b600061ffff838116908316818110156147c5576147c5614755565b039392505050565b600080604083850312156147e057600080fd5b82516147eb816142e5565b602084015190925061436281614324565b60008282101561480e5761480e614755565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea264697066735822122046c364b67d38a3dd85b57e027716324d90dd1df102f265f0a0e2697babdb3f3b64736f6c634300080a003394525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650a26469706673582212208e8a8b5748354a9050b2c604150b1dd4f4e7c44838ab926b9c09404ae60700be64736f6c634300080a0033"; - -type LidoV1AdapterTestConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: LidoV1AdapterTestConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class LidoV1AdapterTest__factory extends ContractFactory { - constructor(...args: LidoV1AdapterTestConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): LidoV1AdapterTest { - return super.attach(address) as LidoV1AdapterTest; - } - override connect(signer: Signer): LidoV1AdapterTest__factory { - return super.connect(signer) as LidoV1AdapterTest__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): LidoV1AdapterTestInterface { - return new utils.Interface(_abi) as LidoV1AdapterTestInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): LidoV1AdapterTest { - return new Contract(address, _abi, signerOrProvider) as LidoV1AdapterTest; - } -} diff --git a/src/types/factories/contracts/test/adapters/LidoV1Adapter.t.sol/index.ts b/src/types/factories/contracts/test/adapters/LidoV1Adapter.t.sol/index.ts deleted file mode 100644 index 277ed35a..00000000 --- a/src/types/factories/contracts/test/adapters/LidoV1Adapter.t.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { LidoV1AdapterTest__factory } from "./LidoV1AdapterTest__factory"; diff --git a/src/types/factories/contracts/test/adapters/UniswapV2Adapter.t.sol/UniswapV2AdapterTest__factory.ts b/src/types/factories/contracts/test/adapters/UniswapV2Adapter.t.sol/UniswapV2AdapterTest__factory.ts deleted file mode 100644 index 01581d50..00000000 --- a/src/types/factories/contracts/test/adapters/UniswapV2Adapter.t.sol/UniswapV2AdapterTest__factory.ts +++ /dev/null @@ -1,913 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - UniswapV2AdapterTest, - UniswapV2AdapterTestInterface, -} from "../../../../../contracts/test/adapters/UniswapV2Adapter.t.sol/UniswapV2AdapterTest"; - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "TokenIsNotInAllowedList", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "onBehalfOf", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "token", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "AddCollateral", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - ], - name: "CloseCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "DecreaseBorrowedAmount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "target", - type: "address", - }, - ], - name: "ExecuteOrder", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "IncreaseBorrowedAmount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "liquidator", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "remainingFunds", - type: "uint256", - }, - ], - name: "LiquidateCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "liquidator", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "remainingFunds", - type: "uint256", - }, - ], - name: "LiquidateExpiredCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [], - name: "MultiCallFinished", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - ], - name: "MultiCallStarted", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newConfigurator", - type: "address", - }, - ], - name: "NewConfigurator", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "onBehalfOf", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "borrowAmount", - type: "uint256", - }, - { - indexed: false, - internalType: "uint16", - name: "referralCode", - type: "uint16", - }, - ], - name: "OpenCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "token", - type: "address", - }, - ], - name: "TokenDisabled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "token", - type: "address", - }, - ], - name: "TokenEnabled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "oldOwner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "TransferAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "bool", - name: "state", - type: "bool", - }, - ], - name: "TransferAccountAllowed", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "", - type: "address", - }, - ], - name: "log_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "log_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - name: "log_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "int256", - name: "", - type: "int256", - }, - ], - name: "log_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "address", - name: "val", - type: "address", - }, - ], - name: "log_named_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes", - name: "val", - type: "bytes", - }, - ], - name: "log_named_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes32", - name: "val", - type: "bytes32", - }, - ], - name: "log_named_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - ], - name: "log_named_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "string", - name: "val", - type: "string", - }, - ], - name: "log_named_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - ], - name: "log_named_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "log_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "logs", - type: "event", - }, - { - inputs: [], - name: "IS_TEST", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "adapter", - outputs: [ - { - internalType: "contract IUniswapV2Adapter", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "cft", - outputs: [ - { - internalType: "contract CreditFacadeTestSuite", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditConfigurator", - outputs: [ - { - internalType: "contract CreditConfigurator", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditFacade", - outputs: [ - { - internalType: "contract CreditFacade", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditManager", - outputs: [ - { - internalType: "contract ICreditManagerV2", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "deadline", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "failed", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "setUp", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_AUV2_01_swap_reverts_if_uses_has_no_account", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_AUV2_02_swapTokensForExactTokens_works_for_user_as_expected", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_AUV2_03_swapExactTokensForTokens_works_for_user_as_expected", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_AUV2_04_swapAllTokensForTokens_works_for_user_as_expected", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountA", - type: "uint256", - }, - { - internalType: "uint256", - name: "reserveA", - type: "uint256", - }, - { - internalType: "uint256", - name: "reserveB", - type: "uint256", - }, - ], - name: "test_AUV2_05_adapter_quote_same_as_router", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountIn", - type: "uint256", - }, - { - internalType: "uint256", - name: "reserveIn", - type: "uint256", - }, - { - internalType: "uint256", - name: "reserveOut", - type: "uint256", - }, - ], - name: "test_AUV2_06_adapter_getAmountOut_same_as_router", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountOut", - type: "uint256", - }, - { - internalType: "uint256", - name: "reserveIn", - type: "uint256", - }, - { - internalType: "uint256", - name: "reserveOut", - type: "uint256", - }, - ], - name: "test_AUV2_07_adapter_getAmountIn_same_as_router", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountIn", - type: "uint256", - }, - ], - name: "test_AUV2_08_adapter_getAmountsOut_same_as_router", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountOut", - type: "uint256", - }, - ], - name: "test_AUV2_09_adapter_getAmountsIn_same_as_router", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "underlying", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "uniswapMock", - outputs: [ - { - internalType: "contract UniswapV2Mock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x60806040526000805460ff1916600190811790915580546001600160a01b031916737109709ecfa91a80626ff3989d68f67f5b1dd12d17905534801561004457600080fd5b5062043c6d80620000566000396000f3fe60806040523480156200001157600080fd5b5060043610620001895760003560e01c8063ba414fa611620000dd578063df514433116200008b578063f6a83715116200006e578063f6a837151462000338578063f9aa028a1462000359578063fa7626d4146200037a57600080fd5b8063df514433146200030d578063f438ae3e146200032e57600080fd5b8063d1889ef411620000c0578063d1889ef414620002d5578063d383328f14620002df578063dd07e40e14620002f657600080fd5b8063ba414fa61462000299578063c12c21c014620002b457600080fd5b80632f7a1881116200013b578063ae296015116200011e578063ae2960151462000254578063b4de946e146200026b578063b6950e5e146200028257600080fd5b80632f7a188114620002125780636f307dc3146200023357600080fd5b80630b1a1bec11620001705780630b1a1bec14620001e55780630c5b30a414620001ef57806329dcb0cf14620001f957600080fd5b806303eadcfc146200018e5780630a9254e414620001d9575b600080fd5b600754620001af9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b620001e362000388565b005b620001e3620009f1565b620001e36200120a565b6200020360095481565b604051908152602001620001d0565b600354620001af9073ffffffffffffffffffffffffffffffffffffffff1681565b600654620001af9073ffffffffffffffffffffffffffffffffffffffff1681565b620001e36200026536600462005995565b62001657565b620001e36200027c366004620059c2565b62001847565b620001e36200029336600462005995565b62001d18565b620002a362001ebd565b6040519015158152602001620001d0565b600254620001af9073ffffffffffffffffffffffffffffffffffffffff1681565b620001e362002027565b620001e3620002f0366004620059c2565b62002677565b620001e36200030736600462005995565b62002b15565b600554620001af9073ffffffffffffffffffffffffffffffffffffffff1681565b620001e362002cba565b600854620001af9073ffffffffffffffffffffffffffffffffffffffff1681565b600454620001af9073ffffffffffffffffffffffffffffffffffffffff1681565b600054620002a39060ff1681565b6200039262003499565b604051620003a0906200595c565b604051809103906000f080158015620003bd573d6000803e3d6000fd5b50600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283169081179091556000546040517f67b426450000000000000000000000000000000000000000000000000000000081529192635911fb9a926201000090920416906367b4264590620004539060019060040162005a47565b602060405180830381865afa15801562000471573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000497919062005a80565b6000546040517f67b426450000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff16906367b4264590620004f59060039060040162005a47565b602060405180830381865afa15801562000513573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000539919062005a80565b620005536103e86b033b2e3c9fd0803ce800000062005ad6565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b158015620005c857600080fd5b505af1158015620005dd573d6000803e3d6000fd5b505060005460085473ffffffffffffffffffffffffffffffffffffffff620100009092048216935063eebab8ef9250600391166103e862000629670de0b6b3a7640000614e2062005b12565b6200063690600262005b12565b62000642919062005ad6565b6040518463ffffffff1660e01b8152600401620006629392919062005b52565b600060405180830381600087803b1580156200067d57600080fd5b505af115801562000692573d6000803e3d6000fd5b505060025460085460405173ffffffffffffffffffffffffffffffffffffffff928316945091169150620006c6906200596a565b73ffffffffffffffffffffffffffffffffffffffff928316815291166020820152604001604051809103906000f08015801562000707573d6000803e3d6000fd5b50600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283161790556001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291169063ca669fa790602401600060405180830381600087803b158015620007b357600080fd5b505af1158015620007c8573d6000803e3d6000fd5b5050600480546008546007546040517f7bccacee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283169481019490945281166024840152169250637bccacee9150604401600060405180830381600087803b1580156200084857600080fd5b505af11580156200085d573d6000803e3d6000fd5b505060015460078054604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283166004820152602481019190915260448101929092527f41444150544552000000000000000000000000000000000000000000000000006064830152909116925063c657c7189150608401600060405180830381600087803b1580156200090a57600080fd5b505af11580156200091f573d6000803e3d6000fd5b5050600154600854604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152600c60448201527f554e49535741505f4d4f434b000000000000000000000000000000000000000060648201529116925063c657c7189150608401600060405180830381600087803b158015620009c957600080fd5b505af1158015620009de573d6000803e3d6000fd5b50505050620009ec620034a7565b600955565b60005b6002811015620012075780151562000a0b62000388565b6040805160028082526060820183526000926020830190803683375050600254604080517f6f307dc3000000000000000000000000000000000000000000000000000000008152905193945073ffffffffffffffffffffffffffffffffffffffff90911692636f307dc3925060048083019260209291908290030181865afa15801562000a9c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ac2919062005a80565b8160008151811062000ad85762000ad862005bb8565b73ffffffffffffffffffffffffffffffffffffffff92831660209182029290920101526000546040517f67b4264500000000000000000000000000000000000000000000000000000000815262010000909104909116906367b426459062000b469060039060040162005a47565b602060405180830381865afa15801562000b64573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b8a919062005a80565b8160018151811062000ba05762000ba062005bb8565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060008062000be7620034bb565b9150915062000c338360008151811062000c055762000c0562005bb8565b6020908102919091010151600854849073ffffffffffffffffffffffffffffffffffffffff166000620038a2565b60007f38ed17390000000000000000000000000000000000000000000000000000000062000c6360018462005be7565b6103e88062000c7460018762005be7565b62000c80919062005ad6565b62000c8e906103e562005b12565b62000c9a919062005ad6565b868660095460405160240162000cb595949392919062005c54565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529050841562000ed957600754600854855162000dbd9273ffffffffffffffffffffffffffffffffffffffff90811692169073f39fd6e51aad88f6f4ce6ab8827279cfffb92266908590899060009062000d8f5762000d8f62005bb8565b60200260200101518960018151811062000dad5762000dad62005bb8565b60200260200101516000620038c0565b60075462000ed39073ffffffffffffffffffffffffffffffffffffffff167fbdbeaa31000000000000000000000000000000000000000000000000000000006103e862000e17816b033b2e3c9fd0803ce800000062005ad6565b62000e25906103e562005b12565b62000e31919062005ad6565b8762000e3c620034a7565b60405160240162000e509392919062005c9f565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152620038dc565b620010de565b600754600854855162000f5b9273ffffffffffffffffffffffffffffffffffffffff90811692169073f39fd6e51aad88f6f4ce6ab8827279cfffb92266908590899060009062000f2d5762000f2d62005bb8565b60200260200101518960018151811062000f4b5762000f4b62005bb8565b6020026020010151600062003a06565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b15801562000fdb57600080fd5b505af115801562000ff0573d6000803e3d6000fd5b505060075473ffffffffffffffffffffffffffffffffffffffff16915063bdbeaa3190506103e86200102f816b033b2e3c9fd0803ce800000062005ad6565b6200103d906103e562005b12565b62001049919062005ad6565b8662001054620034a7565b6040518463ffffffff1660e01b8152600401620010749392919062005c9f565b6000604051808303816000875af115801562001094573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620010dc919081019062005d1c565b505b620010ed600184600162003a19565b620011316003846103e8806200110560018862005be7565b62001111919062005ad6565b6200111f906103e562005b12565b6200112b919062005ad6565b62003a19565b62001198846000815181106200114b576200114b62005bb8565b6020908102919091010151600854859073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff620038a2565b620011c284600081518110620011b257620011b262005bb8565b6020026020010151600062003a3b565b620011ec84600181518110620011dc57620011dc62005bb8565b6020026020010151600162003a3b565b50505050508080620011fe9062005dcd565b915050620009f4565b50565b6001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb5ba4c4d00000000000000000000000000000000000000000000000000000000600482015260609173ffffffffffffffffffffffffffffffffffffffff169063c31eb0e090602401600060405180830381600087803b1580156200129757600080fd5b505af1158015620012ac573d6000803e3d6000fd5b50506007546040517f8803dbee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169250638803dbee91506200131190600090819086908290819060040162005c54565b6000604051808303816000875af115801562001331573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262001379919081019062005d1c565b506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb5ba4c4d00000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063c31eb0e090602401600060405180830381600087803b1580156200140657600080fd5b505af11580156200141b573d6000803e3d6000fd5b50506007546040517f38ed173900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911692506338ed173991506200148090600090819086908290819060040162005c54565b6000604051808303816000875af1158015620014a0573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620014e8919081019062005d1c565b506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb5ba4c4d00000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063c31eb0e090602401600060405180830381600087803b1580156200157557600080fd5b505af11580156200158a573d6000803e3d6000fd5b50506007546040517fbdbeaa3100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116925063bdbeaa319150620015eb906000908590829060040162005c9f565b6000604051808303816000875af11580156200160b573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262001653919081019062005d1c565b5050565b600754604080517fbd90df70000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163bd90df709160048083019260209291908290030181865afa158015620016c8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620016ee919062005a80565b6007546040517f85f8c259000000000000000000000000000000000000000000000000000000008152600481018790526024810186905260448101859052919250620018419173ffffffffffffffffffffffffffffffffffffffff909116906385f8c25990606401602060405180830381865afa15801562001774573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200179a919062005e09565b6040517f85f8c25900000000000000000000000000000000000000000000000000000000815260048101879052602481018690526044810185905273ffffffffffffffffffffffffffffffffffffffff8416906385f8c259906064015b602060405180830381865afa15801562001815573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200183b919062005e09565b62003a57565b50505050565b6001546040517f4c63e5620000000000000000000000000000000000000000000000000000000081526b204fce5e3e250261100000008310600482015273ffffffffffffffffffffffffffffffffffffffff90911690634c63e56290602401600060405180830381600087803b158015620018c157600080fd5b505af1158015620018d6573d6000803e3d6000fd5b506000925060029150620018e79050565b60405190808252806020026020018201604052801562001911578160200160208202803683370190505b509050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001982573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620019a8919062005a80565b81600081518110620019be57620019be62005bb8565b73ffffffffffffffffffffffffffffffffffffffff92831660209182029290920101526000546040517f67b4264500000000000000000000000000000000000000000000000000000000815262010000909104909116906367b426459062001a2c9060039060040162005a47565b602060405180830381865afa15801562001a4a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001a70919062005a80565b8160018151811062001a865762001a8662005bb8565b73ffffffffffffffffffffffffffffffffffffffff928316602091820292909201810191909152600754604080517fbd90df700000000000000000000000000000000000000000000000000000000081529051600094929092169263bd90df70926004808401938290030181865afa15801562001b07573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001b2d919062005a80565b6007546040517f1f00ca7400000000000000000000000000000000000000000000000000000000815291925060009173ffffffffffffffffffffffffffffffffffffffff90911690631f00ca749062001b8d908790879060040162005e23565b600060405180830381865afa15801562001bab573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262001bf3919081019062005d1c565b905060008273ffffffffffffffffffffffffffffffffffffffff16631f00ca7486866040518363ffffffff1660e01b815260040162001c3492919062005e23565b600060405180830381865afa15801562001c52573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262001c9a919081019062005d1c565b905062001caa8251825162003a57565b60005b825181101562001d105762001cfb83828151811062001cd05762001cd062005bb8565b602002602001015183838151811062001ced5762001ced62005bb8565b602002602001015162003a57565b8062001d078162005dcd565b91505062001cad565b505050505050565b600754604080517fbd90df70000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163bd90df709160048083019260209291908290030181865afa15801562001d89573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001daf919062005a80565b6007546040517fad615dec000000000000000000000000000000000000000000000000000000008152600481018790526024810186905260448101859052919250620018419173ffffffffffffffffffffffffffffffffffffffff9091169063ad615dec90606401602060405180830381865afa15801562001e35573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001e5b919062005e09565b6040517fad615dec00000000000000000000000000000000000000000000000000000000815260048101879052602481018690526044810185905273ffffffffffffffffffffffffffffffffffffffff84169063ad615dec90606401620017f7565b60008054610100900460ff161562001ede5750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620020225760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000008284015282518083038401815260608301909352600092909162001f86917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc49160800162005e75565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905262001fc09162005ebf565b6000604051808303816000865af19150503d806000811462001fff576040519150601f19603f3d011682016040523d82523d6000602084013e62002004565b606091505b50915050808060200190518101906200201e919062005edd565b9150505b919050565b60005b600281101562001207578015156200204162000388565b6040805160028082526060820183526000926020830190803683375050600254604080517f6f307dc3000000000000000000000000000000000000000000000000000000008152905193945073ffffffffffffffffffffffffffffffffffffffff90911692636f307dc3925060048083019260209291908290030181865afa158015620020d2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620020f8919062005a80565b816000815181106200210e576200210e62005bb8565b73ffffffffffffffffffffffffffffffffffffffff92831660209182029290920101526000546040517f67b4264500000000000000000000000000000000000000000000000000000000815262010000909104909116906367b42645906200217c9060039060040162005a47565b602060405180830381865afa1580156200219a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620021c0919062005a80565b81600181518110620021d657620021d662005bb8565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000806200221d620034bb565b915091506200223b8360008151811062000c055762000c0562005bb8565b60007f38ed173900000000000000000000000000000000000000000000000000000000600262002276670de0b6b3a7640000614e2062005b12565b62002282919062005ad6565b6009546040516200229e92916000918991899160240162005f01565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290508415620023fd576007546008548551620023789273ffffffffffffffffffffffffffffffffffffffff90811692169073f39fd6e51aad88f6f4ce6ab8827279cfffb92266908590899060009062000d8f5762000d8f62005bb8565b600754620023f79073ffffffffffffffffffffffffffffffffffffffff167f38ed1739000000000000000000000000000000000000000000000000000000006002620023cf670de0b6b3a7640000614e2062005b12565b620023db919062005ad6565b60095460405162000e5092916000918b91839160240162005f01565b620025c2565b6007546008548551620024519273ffffffffffffffffffffffffffffffffffffffff90811692169073f39fd6e51aad88f6f4ce6ab8827279cfffb92266908590899060009062000f2d5762000f2d62005bb8565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b158015620024d157600080fd5b505af1158015620024e6573d6000803e3d6000fd5b505060075473ffffffffffffffffffffffffffffffffffffffff1691506338ed17399050600262002522670de0b6b3a7640000614e2062005b12565b6200252e919062005ad6565b60008760006009546040518663ffffffff1660e01b81526004016200255895949392919062005c54565b6000604051808303816000875af115801562002578573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620025c0919081019062005d1c565b505b620025f96001846002620025e1670de0b6b3a7640000614e2062005b12565b620025ed919062005ad6565b6200112b908662005be7565b620026286003846103e88060026200261c670de0b6b3a7640000614e2062005b12565b62001105919062005ad6565b62002642846000815181106200114b576200114b62005bb8565b6200265c84600181518110620011dc57620011dc62005bb8565b505050505080806200266e9062005dcd565b9150506200202a565b6001546040517f4c63e5620000000000000000000000000000000000000000000000000000000081526b204fce5e3e250261100000008310600482015273ffffffffffffffffffffffffffffffffffffffff90911690634c63e56290602401600060405180830381600087803b158015620026f157600080fd5b505af115801562002706573d6000803e3d6000fd5b506000925060029150620027179050565b60405190808252806020026020018201604052801562002741578160200160208202803683370190505b509050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015620027b2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620027d8919062005a80565b81600081518110620027ee57620027ee62005bb8565b73ffffffffffffffffffffffffffffffffffffffff92831660209182029290920101526000546040517f67b4264500000000000000000000000000000000000000000000000000000000815262010000909104909116906367b42645906200285c9060039060040162005a47565b602060405180830381865afa1580156200287a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620028a0919062005a80565b81600181518110620028b657620028b662005bb8565b73ffffffffffffffffffffffffffffffffffffffff928316602091820292909201810191909152600754604080517fbd90df700000000000000000000000000000000000000000000000000000000081529051600094929092169263bd90df70926004808401938290030181865afa15801562002937573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200295d919062005a80565b6007546040517fd06ca61f00000000000000000000000000000000000000000000000000000000815291925060009173ffffffffffffffffffffffffffffffffffffffff9091169063d06ca61f90620029bd908790879060040162005e23565b600060405180830381865afa158015620029db573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262002a23919081019062005d1c565b905060008273ffffffffffffffffffffffffffffffffffffffff1663d06ca61f86866040518363ffffffff1660e01b815260040162002a6492919062005e23565b600060405180830381865afa15801562002a82573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262002aca919081019062005d1c565b905062002ada8251825162003a57565b60005b825181101562001d105762002b0083828151811062001cd05762001cd062005bb8565b8062002b0c8162005dcd565b91505062002add565b600754604080517fbd90df70000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163bd90df709160048083019260209291908290030181865afa15801562002b86573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002bac919062005a80565b6007546040517f054d50d4000000000000000000000000000000000000000000000000000000008152600481018790526024810186905260448101859052919250620018419173ffffffffffffffffffffffffffffffffffffffff9091169063054d50d490606401602060405180830381865afa15801562002c32573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002c58919062005e09565b6040517f054d50d400000000000000000000000000000000000000000000000000000000815260048101879052602481018690526044810185905273ffffffffffffffffffffffffffffffffffffffff84169063054d50d490606401620017f7565b60005b6002811015620012075780151562002cd462000388565b6040805160028082526060820183526000926020830190803683375050600254604080517f6f307dc3000000000000000000000000000000000000000000000000000000008152905193945073ffffffffffffffffffffffffffffffffffffffff90911692636f307dc3925060048083019260209291908290030181865afa15801562002d65573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002d8b919062005a80565b8160008151811062002da15762002da162005bb8565b73ffffffffffffffffffffffffffffffffffffffff92831660209182029290920101526000546040517f67b4264500000000000000000000000000000000000000000000000000000000815262010000909104909116906367b426459062002e0f9060039060040162005a47565b602060405180830381865afa15801562002e2d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002e53919062005a80565b8160018151811062002e695762002e6962005bb8565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060008062002eb0620034bb565b9150915062002ece8360008151811062000c055762000c0562005bb8565b60007f8803dbee0000000000000000000000000000000000000000000000000000000060026103e88162002f0d670de0b6b3a7640000614e2062005b12565b62002f19919062005ad6565b62002f25919062005ad6565b62002f31919062005ad6565b600262002f49670de0b6b3a7640000614e2062005b12565b62002f55919062005ad6565b868660095460405160240162002f7095949392919062005c54565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152905084156200310e5760075460085485516200304a9273ffffffffffffffffffffffffffffffffffffffff90811692169073f39fd6e51aad88f6f4ce6ab8827279cfffb92266908590899060009062000d8f5762000d8f62005bb8565b600754620031089073ffffffffffffffffffffffffffffffffffffffff167f8803dbee0000000000000000000000000000000000000000000000000000000060026103e881620030a5670de0b6b3a7640000614e2062005b12565b620030b1919062005ad6565b620030bd919062005ad6565b620030c9919062005ad6565b6002620030e1670de0b6b3a7640000614e2062005b12565b620030ed919062005ad6565b888860095460405160240162000e5095949392919062005c54565b62003311565b6007546008548551620031629273ffffffffffffffffffffffffffffffffffffffff90811692169073f39fd6e51aad88f6f4ce6ab8827279cfffb92266908590899060009062000f2d5762000f2d62005bb8565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b158015620031e257600080fd5b505af1158015620031f7573d6000803e3d6000fd5b505060075473ffffffffffffffffffffffffffffffffffffffff169150638803dbee905060026103e88162003237670de0b6b3a7640000614e2062005b12565b62003243919062005ad6565b6200324f919062005ad6565b6200325b919062005ad6565b600262003273670de0b6b3a7640000614e2062005b12565b6200327f919062005ad6565b8760006009546040518663ffffffff1660e01b8152600401620032a795949392919062005c54565b6000604051808303816000875af1158015620032c7573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200330f919081019062005d1c565b505b6200335a6001846103e560028062003334670de0b6b3a7640000614e2062005b12565b62003340919062005ad6565b6200334c919062005ad6565b620025e1906103e862005b12565b6200339560038460026103e8816200337d670de0b6b3a7640000614e2062005b12565b62003389919062005ad6565b6200111f919062005ad6565b600254604080517f6f307dc30000000000000000000000000000000000000000000000000000000081529051620034709273ffffffffffffffffffffffffffffffffffffffff1691636f307dc39160048083019260209291908290030181865afa15801562003408573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200342e919062005a80565b600854859073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff620038a2565b6200347e6003600162003bc3565b50505050508080620034909062005dcd565b91505062002cbd565b620034a5600162003bdf565b565b6000620034b642600162005f25565b905090565b6000806000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635f7c9bd06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200352e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003554919062005e09565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015291925073ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b158015620035d557600080fd5b505af1158015620035ea573d6000803e3d6000fd5b50506003546040517f6c8f225d0000000000000000000000000000000000000000000000000000000081526004810185905273f39fd6e51aad88f6f4ce6ab8827279cfffb92266602482015260646044820181905260009082015273ffffffffffffffffffffffffffffffffffffffff9091169250636c8f225d9150608401600060405180830381600087803b1580156200368457600080fd5b505af115801562003699573d6000803e3d6000fd5b50506002546040517fe958b70400000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063e958b7049150602401602060405180830381865afa15801562003720573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003746919062005a80565b6006546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80841660048301529295509116906370a0823190602401602060405180830381865afa158015620037b9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620037df919062005e09565b600154604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301526024820192909252600d60448201527f6372656469744163636f756e74000000000000000000000000000000000000006064820152929450169063c657c71890608401600060405180830381600087803b1580156200388457600080fd5b505af115801562003899573d6000803e3d6000fd5b50505050509091565b6200184184848484604051806020016040528060008152506200410b565b620038d387878787878787600162004349565b50505050505050565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b1580156200395c57600080fd5b505af115801562003971573d6000803e3d6000fd5b50506003546040805180820190915273ffffffffffffffffffffffffffffffffffffffff868116825260208201869052909116925063caa5c23f9150620039b89062004a3a565b6040518263ffffffff1660e01b8152600401620039d6919062005f8c565b600060405180830381600087803b158015620039f157600080fd5b505af115801562001d10573d6000803e3d6000fd5b620038d387878787878787600162004aa3565b62003a368383836040518060200160405280600081525062004f91565b505050565b62001653828260405180602001604052806000815250620050c6565b80821462001653577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f5060405162003ae59060208082526022908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b75696e60408201527f745d000000000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a160408051818152600a818301527f202045787065637465640000000000000000000000000000000000000000000060608201526020810183905290517fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a89181900360800190a160408051818152600a818301527f2020202041637475616c0000000000000000000000000000000000000000000060608201526020810184905290517fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a89181900360800190a16200165362005443565b62001653828260405180602001604052806000815250620055c6565b600181600a81111562003bf65762003bf6620059dc565b148062003c175750600381600a81111562003c155762003c15620059dc565b145b62003c83576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f556e737570706f7274656420746f6b656e00000000000000000000000000000060448201526064015b60405180910390fd5b60405162003c919062005978565b604051809103906000f08015801562003cae573d6000803e3d6000fd5b50600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff166201000073ffffffffffffffffffffffffffffffffffffffff9384168102919091179182905590041663b36ba20862003d18670de0b6b3a7640000606462005b12565b6040518263ffffffff1660e01b81526004016000604051808303818588803b15801562003d4457600080fd5b505af115801562003d59573d6000803e3d6000fd5b5050505050600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160405162003d909062005986565b62003d9d92919062006038565b604051809103906000f08015801562003dba573d6000803e3d6000fd5b50600580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169182179055604080517f6f307dc30000000000000000000000000000000000000000000000000000000081529051636f307dc3916004808201926020929091908290030181865afa15801562003e54573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003e7a919062005a80565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600554604080517fc12c21c00000000000000000000000000000000000000000000000000000000081529051919092169163c12c21c09160048083019260209291908290030181865afa15801562003f17573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003f3d919062005a80565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600554604080517f2f7a188100000000000000000000000000000000000000000000000000000000815290519190921691632f7a18819160048083019260209291908290030181865afa15801562003fda573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004000919062005a80565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600554604080517ff9aa028a0000000000000000000000000000000000000000000000000000000081529051919092169163f9aa028a9160048083019260209291908290030181865afa1580156200409d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620040c3919062005a80565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301526000919087169063dd62ed3e90604401602060405180830381865afa15801562004184573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620041aa919062005e09565b90508281146200433d577f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f828773ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562004222573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200426a919081019062006064565b6040516020016200427d92919062006121565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052620042b9918890620061a7565b60405180910390a160408051818152600a818301527f207370656e6465723a2000000000000000000000000000000000000000000000606082015273ffffffffffffffffffffffffffffffffffffffff8616602082015290517f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f9181900360800190a15b62001d10818462003a57565b6002546040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152600092169063e958b70490602401602060405180830381865afa158015620043bb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620043e1919062005a80565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000918716906370a0823190602401602060405180830381865afa15801562004454573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200447a919062005e09565b600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481019290925260006024830181905260448301819052606483015291925073ffffffffffffffffffffffffffffffffffffffff9091169063491cc7c290608401600060405180830381600087803b1580156200450157600080fd5b505af115801562004516573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff8b1692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a2821562004694576001546002546003546040805173ffffffffffffffffffffffffffffffffffffffff92831660248201528d831660448201528a831660648201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6084808301919091528251808303909101815260a490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f46fb371d0000000000000000000000000000000000000000000000000000000017905290517fbd6af4340000000000000000000000000000000000000000000000000000000081529382169363bd6af434936200465f93169190600401620061e1565b600060405180830381600087803b1580156200467a57600080fd5b505af11580156200468f573d6000803e3d6000fd5b505050505b60015460025460035460405173ffffffffffffffffffffffffffffffffffffffff9384169363bd6af434938116927f6ce4074a0000000000000000000000000000000000000000000000000000000092620046fa92909116908f908e9060240162006212565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b90921682526200478d9291600401620061e1565b600060405180830381600087803b158015620047a857600080fd5b505af1158015620047bd573d6000803e3d6000fd5b5050600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526024810192909252600060448301819052606483015273ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b1580156200484357600080fd5b505af115801562004858573d6000803e3d6000fd5b505060035460405173ffffffffffffffffffffffffffffffffffffffff8d8116945090911691507faed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab0390600090a3821562004a2e5760015460025460035473ffffffffffffffffffffffffffffffffffffffff9283169263bd6af434928116917f46fb371d0000000000000000000000000000000000000000000000000000000091168d8b8a62004929577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6200492c565b60015b60405173ffffffffffffffffffffffffffffffffffffffff9485166024820152928416604484015292166064820152608481019190915260a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b9092168252620049f99291600401620061e1565b600060405180830381600087803b15801562004a1457600080fd5b505af115801562004a29573d6000803e3d6000fd5b505050505b50505050505050505050565b604080516001808252818301909252606091816020015b60408051808201909152600081526060602082015281526020019060019003908162004a51579050509050818160008151811062004a935762004a9362005bb8565b6020026020010181905250919050565b6002546040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152600092169063e958b70490602401602060405180830381865afa15801562004b15573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004b3b919062005a80565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000918716906370a0823190602401602060405180830381865afa15801562004bae573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004bd4919062005e09565b9050821562004d0c576001546002546040805173ffffffffffffffffffffffffffffffffffffffff8c811660248301528d811660448301528a811660648301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6084808401919091528351808403909101815260a490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f46fb371d0000000000000000000000000000000000000000000000000000000017905291517fbd6af4340000000000000000000000000000000000000000000000000000000081529382169363bd6af4349362004cd793169190600401620061e1565b600060405180830381600087803b15801562004cf257600080fd5b505af115801562004d07573d6000803e3d6000fd5b505050505b60015460025460405173ffffffffffffffffffffffffffffffffffffffff9283169263bd6af4349216907f6ce4074a000000000000000000000000000000000000000000000000000000009062004d6c908d908f908e9060240162006212565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b909216825262004dff9291600401620061e1565b600060405180830381600087803b15801562004e1a57600080fd5b505af115801562004e2f573d6000803e3d6000fd5b5050600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526024810192909252600060448301819052606483015273ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b15801562004eb557600080fd5b505af115801562004eca573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff808d1693508b1691507faed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab0390600090a3821562004a2e5760015460025473ffffffffffffffffffffffffffffffffffffffff9182169163bd6af43491167f46fb371d000000000000000000000000000000000000000000000000000000008b8d8b8a62004929577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6200492c565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1662005018576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f74657374546f6b656e5375697465206973206e6f742073657400000000000000604482015260640162003c7a565b6000546040517f67b42645000000000000000000000000000000000000000000000000000000008152620018419162010000900473ffffffffffffffffffffffffffffffffffffffff16906367b42645906200507990889060040162005a47565b602060405180830381865afa15801562005097573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620050bd919062005a80565b848484620056e5565b6002546040517fe958b70400000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015260009173ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156200514a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005170919062005a80565b6002546040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015292935060009290911690638991b2f190602401602060405180830381865afa158015620051e7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200520d919062005e09565b6002546040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529091169063f67c5bd090602401602060405180830381865afa1580156200527e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620052a4919062005e09565b16151590508315158114801590620052bc5750825115155b15620052fc577f0b2e13ff20ac7b474198655583edf70dedd2c1dc980e329c4fbb2fc0748b796b83604051620052f3919062006256565b60405180910390a15b6200543c841515821515148673ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562005353573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200539b919081019062006064565b83620053dd576040518060400160405280601981526020017f206e6f7420656e61626c6564206173206578706563746564200000000000000081525062005414565b6040518060400160405280601981526020017f20656e61626c6564206173206e6f7420657870657463746564000000000000008152505b604051602001620054279291906200626b565b604051602081830303815290604052620058a0565b5050505050565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620055985760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000009282019290925260016060820152600091907f70ca10bbd0dbfd9020a9f4b13402c16cb120705e0d1c0aeab10fa353ae586fc490608001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905262005515929160200162005e75565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526200554f9162005ebf565b6000604051808303816000865af19150503d80600081146200558e576040519150601f19603f3d011682016040523d82523d6000602084013e62005593565b606091505b505050505b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055565b600554604080517f406c8e2f000000000000000000000000000000000000000000000000000000008152905162003a369273ffffffffffffffffffffffffffffffffffffffff169163406c8e2f9160048083019260209291908290030181865afa15801562005639573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200565f919062005a80565b73ffffffffffffffffffffffffffffffffffffffff166367b42645856040518263ffffffff1660e01b815260040162005699919062005a47565b602060405180830381865afa158015620056b7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620056dd919062005a80565b8383620050c6565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600091908616906370a0823190602401602060405180830381865afa15801562005756573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200577c919062005e09565b905082811462005894577f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f828673ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015620057f4573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200583c919081019062006064565b6040516020016200584f929190620062ca565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526200588b918790620061a7565b60405180910390a15b6200543c818462003a57565b8162001653577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf358381604051620058d7919062006350565b60405180910390a162001653828062001207577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f506040516200594a9060208082526017908201527f4572726f723a20417373657274696f6e204661696c6564000000000000000000604082015260600190565b60405180910390a16200120762005443565b611a5c806200639a83390190565b61251b8062007df683390190565b617a51806200a31183390190565b62031ed68062011d6283390190565b600080600060608486031215620059ab57600080fd5b505081359360208301359350604090920135919050565b600060208284031215620059d557600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600b811062005a43577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b6020810162005a57828462005a0b565b92915050565b73ffffffffffffffffffffffffffffffffffffffff811681146200120757600080fd5b60006020828403121562005a9357600080fd5b815162005aa08162005a5d565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262005b0d577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562005b4d5762005b4d62005aa7565b500290565b6060810162005b62828662005a0b565b73ffffffffffffffffffffffffffffffffffffffff93909316602082015260400152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008282101562005bfc5762005bfc62005aa7565b500390565b600081518084526020808501945080840160005b8381101562005c4957815173ffffffffffffffffffffffffffffffffffffffff168752958201959082019060010162005c15565b509495945050505050565b85815284602082015260a06040820152600062005c7560a083018662005c01565b73ffffffffffffffffffffffffffffffffffffffff94909416606083015250608001529392505050565b83815260606020820152600062005cba606083018562005c01565b9050826040830152949350505050565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171562005d145762005d1462005b89565b604052919050565b6000602080838503121562005d3057600080fd5b825167ffffffffffffffff8082111562005d4957600080fd5b818501915085601f83011262005d5e57600080fd5b81518181111562005d735762005d7362005b89565b8060051b915062005d8684830162005cca565b818152918301840191848101908884111562005da157600080fd5b938501935b8385101562005dc15784518252938501939085019062005da6565b98975050505050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141562005e025762005e0262005aa7565b5060010190565b60006020828403121562005e1c57600080fd5b5051919050565b82815260406020820152600062005e3e604083018462005c01565b949350505050565b60005b8381101562005e6357818101518382015260200162005e49565b83811115620018415750506000910152565b7fffffffff00000000000000000000000000000000000000000000000000000000831681526000825162005eb181600485016020870162005e46565b919091016004019392505050565b6000825162005ed381846020870162005e46565b9190910192915050565b60006020828403121562005ef057600080fd5b8151801515811462005aa057600080fd5b85815260ff8516602082015260a06040820152600062005c7560a083018662005c01565b6000821982111562005f3b5762005f3b62005aa7565b500190565b6000815180845262005f5a81602086016020860162005e46565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b838110156200602a578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00185528151805173ffffffffffffffffffffffffffffffffffffffff168452870151878401879052620060168785018262005f40565b958801959350509086019060010162005fb3565b509098975050505050505050565b73ffffffffffffffffffffffffffffffffffffffff831681526040810162005aa0602083018462005a0b565b6000602082840312156200607757600080fd5b815167ffffffffffffffff808211156200609057600080fd5b818401915084601f830112620060a557600080fd5b815181811115620060ba57620060ba62005b89565b620060ed60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160162005cca565b91508082528560208285010111156200610557600080fd5b6200611881602084016020860162005e46565b50949350505050565b600083516200613581846020880162005e46565b7f496e636f7272656374200000000000000000000000000000000000000000000090830190815283516200617181600a84016020880162005e46565b7f20416c6c6f77616e6365206f6e206163636f756e743a20200000000000000000600a9290910191820152602201949350505050565b604081526000620061bc604083018562005f40565b905073ffffffffffffffffffffffffffffffffffffffff831660208301529392505050565b73ffffffffffffffffffffffffffffffffffffffff8316815260406020820152600062005e3e604083018462005f40565b600073ffffffffffffffffffffffffffffffffffffffff8086168352808516602084015250606060408301526200624d606083018462005f40565b95945050505050565b60208152600062005aa0602083018462005f40565b7f546f6b656e200000000000000000000000000000000000000000000000000000815260008351620062a581600685016020880162005e46565b835190830190620062be81600684016020880162005e46565b01600601949350505050565b60008351620062de81846020880162005e46565b7f496e636f7272656374200000000000000000000000000000000000000000000090830190815283516200631a81600a84016020880162005e46565b7f2062616c616e6365206f6e206163636f756e743a200000000000000000000000600a9290910191820152601f01949350505050565b60408152600560408201527f4572726f72000000000000000000000000000000000000000000000000000000606082015260806020820152600062005aa0608083018462005f4056fe608060405234801561001057600080fd5b50611a3c806100206000396000f3fe6080604052600436106101a15760003560e01c806385f8c259116100e1578063baa2abde1161008a578063ded9382a11610064578063ded9382a14610424578063e8e3370014610451578063f305d7191461049a578063fb3bdb41146104b957600080fd5b8063baa2abde146103da578063c45a015514610382578063d06ca61f1461040457600080fd5b8063ad615dec116100bb578063ad615dec146101e9578063af2979eb1461039e578063b6f9de95146103c557600080fd5b806385f8c259146101e95780638803dbee14610362578063ad5c46481461038257600080fd5b806338ed17391161014e5780635b0d5984116101285780635b0d5984146102fb5780635c11d79514610326578063791ac947146103265780637ff36ab51461034957600080fd5b806338ed1739146102b95780634a25d94a146102175780635911fb9a146102d957600080fd5b80631f00ca741161017f5780631f00ca741461024b5780632195995c1461026b578063379b87ea1461029957600080fd5b806302751cec146101a6578063054d50d4146101e957806318cbafe514610217575b600080fd5b3480156101b257600080fd5b506101cf6101c13660046112b8565b600080965096945050505050565b604080519283526020830191909152015b60405180910390f35b3480156101f557600080fd5b50610209610204366004611310565b6104cc565b6040519081526020016101e0565b34801561022357600080fd5b5061023e610232366004611388565b60609695505050505050565b6040516101e091906113f8565b34801561025757600080fd5b5061023e61026636600461143c565b6104d6565b34801561027757600080fd5b506101cf6102863660046114aa565b6000809b509b9950505050505050505050565b3480156102a557600080fd5b506102096102b436600461154e565b610728565b3480156102c557600080fd5b5061023e6102d4366004611388565b6107c6565b3480156102e557600080fd5b506102f96102f4366004611581565b6109a6565b005b34801561030757600080fd5b506102096103163660046115bd565b60009a9950505050505050505050565b34801561033257600080fd5b506102f9610341366004611388565b505050505050565b61023e61035736600461164f565b606095945050505050565b34801561036e57600080fd5b5061023e61037d366004611388565b610a28565b34801561038e57600080fd5b50604051600081526020016101e0565b3480156103aa57600080fd5b506102096103b93660046112b8565b60009695505050505050565b6102f96103d336600461164f565b5050505050565b3480156103e657600080fd5b506101cf6103f53660046116b5565b60008097509795505050505050565b34801561041057600080fd5b5061023e61041f36600461143c565b610b7e565b34801561043057600080fd5b506101cf61043f3660046115bd565b6000809a509a98505050505050505050565b34801561045d57600080fd5b5061047f61046c36600461171f565b6000806000985098509895505050505050565b604080519384526020840192909252908201526060016101e0565b61047f6104a83660046112b8565b600080600096509650969350505050565b61023e6104c736600461164f565b610d65565b60005b9392505050565b60606002821015610548576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f496e636f72726563742070617468206c656e677468000000000000000000000060448201526064015b60405180910390fd5b8167ffffffffffffffff81111561056157610561611793565b60405190808252806020026020018201604052801561058a578160200160208202803683370190505b509050838161059a6001856117f1565b815181106105aa576105aa611808565b602090810291909101015260006105c26001846117f1565b90505b801561072057600061062885856105dd6001866117f1565b8181106105ec576105ec611808565b90506020020160208101906106019190611837565b86868581811061061357610613611808565b90506020020160208101906102b49190611837565b905080610691576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f556e69737761704d6f636b3a2052617465206973206e6f742073657475700000604482015260640161053f565b6103e5816b033b2e3c9fd0803ce80000008585815181106106b4576106b4611808565b60200260200101516106c69190611852565b6106d0919061188f565b6106dc906103e8611852565b6106e6919061188f565b836106f26001856117f1565b8151811061070257610702611808565b60209081029190910101525080610718816118ca565b9150506105c5565b509392505050565b73ffffffffffffffffffffffffffffffffffffffff80831660009081526020818152604080832093851683529290522054806107c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f546f6b656e2070616972206e6f7420666f756e64000000000000000000000000604482015260640161053f565b92915050565b60608142811015610833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015260640161053f565b6000610840898888610b7e565b90506000816108506001896117f1565b8151811061086057610860611808565b60200260200101519050888110156108fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f556e69737761705632526f757465723a20494e53554646494349454e545f4f5560448201527f545055545f414d4f554e54000000000000000000000000000000000000000000606482015260840161053f565b61094633308c8b8b600081811061091357610913611808565b90506020020160208101906109289190611837565b73ffffffffffffffffffffffffffffffffffffffff16929190610d94565b61099986828a8a6109586001826117f1565b81811061096757610967611808565b905060200201602081019061097c9190611837565b73ffffffffffffffffffffffffffffffffffffffff169190610e76565b5098975050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152602081815260408083209386168352929052208190556109ef6b033b2e3c9fd0803ce800000082610ed1565b73ffffffffffffffffffffffffffffffffffffffff92831660009081526020818152604080832096909516825294909452919092205550565b60608142811015610a95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015260640161053f565b6000610aa28988886104d6565b9050600081600081518110610ab957610ab9611808565b6020026020010151905088811115610b53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f556e69737761705632526f757465723a204558434553534956455f494e50555460448201527f5f414d4f554e5400000000000000000000000000000000000000000000000000606482015260840161053f565b610b6c3330838b8b600081811061091357610913611808565b610999868b8a8a6109586001826117f1565b60606002821015610beb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f496e636f72726563742070617468206c656e6774680000000000000000000000604482015260640161053f565b8167ffffffffffffffff811115610c0457610c04611793565b604051908082528060200260200182016040528015610c2d578160200160208202803683370190505b5090508381600081518110610c4457610c44611808565b602090810291909101015260015b82811015610720576000610c6c85856105dd6001866117f1565b905080610cd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f556e69737761704d6f636b3a2052617465206973206e6f742073657475700000604482015260640161053f565b6103e86103e56b033b2e3c9fd0803ce80000008386610cf56001886117f1565b81518110610d0557610d05611808565b6020026020010151610d179190611852565b610d21919061188f565b610d2b9190611852565b610d35919061188f565b838381518110610d4757610d47611808565b60209081029190910101525080610d5d816118ff565b915050610c52565b604080516001808252818301909252606091600091906020808301908036833701905050979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052610e709085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611037565b50505050565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610ecc9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401610dee565b505050565b60408051808201909152600281527f4d33000000000000000000000000000000000000000000000000000000000000602082015260009082610f40576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053f9190611964565b506000610f4e60028461188f565b90506b033b2e3c9fd0803ce8000000610f87827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6117f1565b610f91919061188f565b8411156040518060400160405280600281526020017f4d3100000000000000000000000000000000000000000000000000000000000081525090611002576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053f9190611964565b50828161101b6b033b2e3c9fd0803ce800000087611852565b61102591906119b5565b61102f919061188f565b949350505050565b6000611099826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166111439092919063ffffffff16565b805190915015610ecc57808060200190518101906110b791906119cd565b610ecc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161053f565b606061102f848460008585843b6111b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161053f565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516111df91906119ea565b60006040518083038185875af1925050503d806000811461121c576040519150601f19603f3d011682016040523d82523d6000602084013e611221565b606091505b509150915061123182828661123c565b979650505050505050565b6060831561124b5750816104cf565b82511561125b5782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053f9190611964565b803573ffffffffffffffffffffffffffffffffffffffff811681146112b357600080fd5b919050565b60008060008060008060c087890312156112d157600080fd5b6112da8761128f565b95506020870135945060408701359350606087013592506112fd6080880161128f565b915060a087013590509295509295509295565b60008060006060848603121561132557600080fd5b505081359360208301359350604090920135919050565b60008083601f84011261134e57600080fd5b50813567ffffffffffffffff81111561136657600080fd5b6020830191508360208260051b850101111561138157600080fd5b9250929050565b60008060008060008060a087890312156113a157600080fd5b8635955060208701359450604087013567ffffffffffffffff8111156113c657600080fd5b6113d289828a0161133c565b90955093506113e590506060880161128f565b9150608087013590509295509295509295565b6020808252825182820181905260009190848201906040850190845b8181101561143057835183529284019291840191600101611414565b50909695505050505050565b60008060006040848603121561145157600080fd5b83359250602084013567ffffffffffffffff81111561146f57600080fd5b61147b8682870161133c565b9497909650939450505050565b801515811461149657600080fd5b50565b803560ff811681146112b357600080fd5b60008060008060008060008060008060006101608c8e0312156114cc57600080fd5b6114d58c61128f565b9a506114e360208d0161128f565b995060408c0135985060608c0135975060808c0135965061150660a08d0161128f565b955060c08c0135945060e08c013561151d81611488565b935061152c6101008d01611499565b92506101208c013591506101408c013590509295989b509295989b9093969950565b6000806040838503121561156157600080fd5b61156a8361128f565b91506115786020840161128f565b90509250929050565b60008060006060848603121561159657600080fd5b61159f8461128f565b92506115ad6020850161128f565b9150604084013590509250925092565b6000806000806000806000806000806101408b8d0312156115dd57600080fd5b6115e68b61128f565b995060208b0135985060408b0135975060608b0135965061160960808c0161128f565b955060a08b0135945060c08b013561162081611488565b935061162e60e08c01611499565b92506101008b013591506101208b013590509295989b9194979a5092959850565b60008060008060006080868803121561166757600080fd5b85359450602086013567ffffffffffffffff81111561168557600080fd5b6116918882890161133c565b90955093506116a490506040870161128f565b949793965091946060013592915050565b600080600080600080600060e0888a0312156116d057600080fd5b6116d98861128f565b96506116e76020890161128f565b955060408801359450606088013593506080880135925061170a60a0890161128f565b915060c0880135905092959891949750929550565b600080600080600080600080610100898b03121561173c57600080fd5b6117458961128f565b975061175360208a0161128f565b965060408901359550606089013594506080890135935060a0890135925061177d60c08a0161128f565b915060e089013590509295985092959890939650565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015611803576118036117c2565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561184957600080fd5b6104cf8261128f565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561188a5761188a6117c2565b500290565b6000826118c5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000816118d9576118d96117c2565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611931576119316117c2565b5060010190565b60005b8381101561195357818101518382015260200161193b565b83811115610e705750506000910152565b6020815260008251806020840152611983816040850160208701611938565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b600082198211156119c8576119c86117c2565b500190565b6000602082840312156119df57600080fd5b81516104cf81611488565b600082516119fc818460208701611938565b919091019291505056fea2646970667358221220c83ba4b7a780d6bcd42d58ce63ee43d73cb764a70cd33e8cc91609b9554a872e64736f6c634300080a003360e06040523480156200001157600080fd5b506040516200251b3803806200251b833981016040819052620000349162000121565b81816001600160a01b03821615806200005457506001600160a01b038116155b156200007357604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038216608081905260408051632f7a188160e01b81529051632f7a1881916004808201926020929091908290030181865afa158015620000be573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e4919062000159565b6001600160a01b0390811660a0521660c05250506001600055506200017e565b80516001600160a01b03811681146200011c57600080fd5b919050565b600080604083850312156200013557600080fd5b620001408362000104565b9150620001506020840162000104565b90509250929050565b6000602082840312156200016c57600080fd5b620001778262000104565b9392505050565b60805160a05160c0516122da620002416000396000818161045e015281816106040152818161070101528181610aa401528181610c9c01528181610d6e015281816110dd01528181611186015281816113a8015281816114c701526115a10152600081816102b40152818161121301526116860152600081816104b20152818161084601528181610b8c01528181610e56015281816113fe01528181611498015281816115f70152818161170e015281816117c2015261186c01526122da6000f3fe6080604052600436106101cd5760003560e01c8063ad5c4648116100f7578063c12c21c011610095578063ded9382a11610064578063ded9382a1461052b578063e8e3370014610546578063f305d71914610581578063fb3bdb411461038557600080fd5b8063c12c21c0146104a0578063c45a0155146104d4578063ce30bbdb146104e9578063d06ca61f1461050b57600080fd5b8063b6f9de95116100d1578063b6f9de9514610423578063baa2abde14610431578063bd90df701461044c578063bdbeaa311461048057600080fd5b8063ad5c4648146103d3578063ad615dec146103e8578063af2979eb1461040857600080fd5b80634a25d94a1161016f578063791ac9471161013e578063791ac9471461033b5780637ff36ab51461038557806385f8c259146103935780638803dbee146103b357600080fd5b80634a25d94a1461023a5780635b0d59841461031b5780635c11d7951461033b57806378aa73a41461035d57600080fd5b80631f00ca74116101ab5780631f00ca74146102675780632195995c146102875780632f7a1881146102a257806338ed1739146102fb57600080fd5b806302751cec146101d2578063054d50d41461020c57806318cbafe51461023a575b600080fd5b3480156101de57600080fd5b506101f26101ed3660046118f6565b61058f565b604080519283526020830191909152015b60405180910390f35b34801561021857600080fd5b5061022c610227366004611954565b6105c4565b604051908152602001610203565b34801561024657600080fd5b5061025a6102553660046119cc565b61068d565b6040516102039190611a3f565b34801561027357600080fd5b5061025a610282366004611a83565b6106c1565b34801561029357600080fd5b506101f26101ed366004611af5565b3480156102ae57600080fd5b506102d67f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610203565b34801561030757600080fd5b5061025a6103163660046119cc565b61079d565b34801561032757600080fd5b5061022c610336366004611b9d565b6109fe565b34801561034757600080fd5b5061035b6103563660046119cc565b610a32565b005b34801561036957600080fd5b50610372600281565b60405161ffff9091168152602001610203565b61025a610255366004611c31565b34801561039f57600080fd5b5061022c6103ae366004611954565b610a64565b3480156103bf57600080fd5b5061025a6103ce3660046119cc565b610ae8565b3480156103df57600080fd5b506102d6610c98565b3480156103f457600080fd5b5061022c610403366004611954565b610d2e565b34801561041457600080fd5b5061022c6103363660046118f6565b61035b610356366004611c31565b34801561043d57600080fd5b506101f26101ed366004611c98565b34801561045857600080fd5b506102d67f000000000000000000000000000000000000000000000000000000000000000081565b34801561048c57600080fd5b5061025a61049b366004611d0a565b610db2565b3480156104ac57600080fd5b506102d67f000000000000000000000000000000000000000000000000000000000000000081565b3480156104e057600080fd5b506102d66110d9565b3480156104f557600080fd5b506104fe600181565b6040516102039190611d5d565b34801561051757600080fd5b5061025a610526366004611a83565b611146565b34801561053757600080fd5b506101f26101ed366004611b9d565b34801561055257600080fd5b50610566610561366004611d9e565b6111bf565b60408051938452602084019290925290820152606001610203565b6105666105613660046118f6565b6000806040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f054d50d40000000000000000000000000000000000000000000000000000000081526004810184905260248101839052604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063054d50d4906064015b602060405180830381865afa158015610661573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106859190611e1a565b949350505050565b60606040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1f00ca7400000000000000000000000000000000000000000000000000000000815260609073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690631f00ca749061073a90879087908790600401611e89565b600060405180830381865afa158015610757573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526106859190810190611f2a565b606060026000541415610811576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156108a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c69190611fd0565b90506000868660008181106108dd576108dd611ff4565b90506020020160208101906108f29190612023565b90506000878761090360018261206f565b81811061091257610912611ff4565b90506020020160208101906109279190612023565b90506109d88383836338ed173960e01b8e8e8e8e8b8e60405160240161095296959493929190612086565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152600160006111f6565b8060200190518101906109eb9190611f2a565b60016000559a9950505050505050505050565b60006040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f85f8c2590000000000000000000000000000000000000000000000000000000081526004810184905260248101839052604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906385f8c25990606401610644565b606060026000541415610b57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610808565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610be8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0c9190611fd0565b9050600086866000818110610c2357610c23611ff4565b9050602002016020810190610c389190612023565b905060008787610c4960018261206f565b818110610c5857610c58611ff4565b9050602002016020810190610c6d9190612023565b90506109d8838383638803dbee60e01b8e8e8e8e8b8e60405160240161095296959493929190612086565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d299190611fd0565b905090565b6040517fad615dec0000000000000000000000000000000000000000000000000000000081526004810184905260248101839052604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ad615dec90606401610644565b606060026000541415610e21576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610808565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610eb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed69190611fd0565b9050600085856000818110610eed57610eed611ff4565b9050602002016020810190610f029190612023565b905060008686610f1360018261206f565b818110610f2257610f22611ff4565b9050602002016020810190610f379190612023565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529192506000918416906370a0823190602401602060405180830381865afa158015610fa9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fcd9190611e1a565b905060018111156110c7578080600190039150506110b18484846338ed173960e01b856b033b2e3c9fd0803ce80000008f8861100991906120d1565b611013919061210e565b8e8e8c8f60405160240161102c96959493929190612086565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526001806111f6565b8060200190518101906110c49190611f2a565b94505b50506001600055509095945050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d05573d6000803e3d6000fd5b6040517fd06ca61f00000000000000000000000000000000000000000000000000000000815260609073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063d06ca61f9061073a90879087908790600401611e89565b60008060006040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606000803373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461135f576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301528916906370a0823190602401602060405180830381865afa1580156112a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c89190611e1a565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152919350908816906370a0823190602401602060405180830381865afa158015611338573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135c9190611e1a565b90505b841561145b576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561144257600080fd5b505af1158015611456573d6000803e3d6000fd5b505050505b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a906114f19033907f0000000000000000000000000000000000000000000000000000000000000000908b90600401612179565b6000604051808303816000875af1158015611510573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261155691908101906121f2565b92508415611654576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561163b57600080fd5b505af115801561164f573d6000803e3d6000fd5b505050505b61166289898985858961166e565b50509695505050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461176f576040517f654a9eda00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528681166024830152858116604483015260648201859052608482018490527f0000000000000000000000000000000000000000000000000000000000000000169063654a9eda9060a401600060405180830381600087803b15801561175257600080fd5b505af1158015611766573d6000803e3d6000fd5b505050506118c9565b801561181f576040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015286811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b15801561180657600080fd5b505af115801561181a573d6000803e3d6000fd5b505050505b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015285811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156118b057600080fd5b505af11580156118c4573d6000803e3d6000fd5b505050505b505050505050565b73ffffffffffffffffffffffffffffffffffffffff811681146118f357600080fd5b50565b60008060008060008060c0878903121561190f57600080fd5b863561191a816118d1565b9550602087013594506040870135935060608701359250608087013561193f816118d1565b8092505060a087013590509295509295509295565b60008060006060848603121561196957600080fd5b505081359360208301359350604090920135919050565b60008083601f84011261199257600080fd5b50813567ffffffffffffffff8111156119aa57600080fd5b6020830191508360208260051b85010111156119c557600080fd5b9250929050565b60008060008060008060a087890312156119e557600080fd5b8635955060208701359450604087013567ffffffffffffffff811115611a0a57600080fd5b611a1689828a01611980565b9095509350506060870135611a2a816118d1565b80925050608087013590509295509295509295565b6020808252825182820181905260009190848201906040850190845b81811015611a7757835183529284019291840191600101611a5b565b50909695505050505050565b600080600060408486031215611a9857600080fd5b83359250602084013567ffffffffffffffff811115611ab657600080fd5b611ac286828701611980565b9497909650939450505050565b80358015158114611adf57600080fd5b919050565b803560ff81168114611adf57600080fd5b60008060008060008060008060008060006101608c8e031215611b1757600080fd5b8b35611b22816118d1565b9a5060208c0135611b32816118d1565b995060408c0135985060608c0135975060808c0135965060a08c0135611b57816118d1565b955060c08c01359450611b6c60e08d01611acf565b9350611b7b6101008d01611ae4565b92506101208c013591506101408c013590509295989b509295989b9093969950565b6000806000806000806000806000806101408b8d031215611bbd57600080fd5b8a35611bc8816118d1565b995060208b0135985060408b0135975060608b0135965060808b0135611bed816118d1565b955060a08b01359450611c0260c08c01611acf565b9350611c1060e08c01611ae4565b92506101008b013591506101208b013590509295989b9194979a5092959850565b600080600080600060808688031215611c4957600080fd5b85359450602086013567ffffffffffffffff811115611c6757600080fd5b611c7388828901611980565b9095509350506040860135611c87816118d1565b949793965091946060013592915050565b600080600080600080600060e0888a031215611cb357600080fd5b8735611cbe816118d1565b96506020880135611cce816118d1565b955060408801359450606088013593506080880135925060a0880135611cf3816118d1565b8092505060c0880135905092959891949750929550565b60008060008060608587031215611d2057600080fd5b84359350602085013567ffffffffffffffff811115611d3e57600080fd5b611d4a87828801611980565b9598909750949560400135949350505050565b6020810160118310611d98577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b600080600080600080600080610100898b031215611dbb57600080fd5b8835611dc6816118d1565b97506020890135611dd6816118d1565b965060408901359550606089013594506080890135935060a0890135925060c0890135611e02816118d1565b8092505060e089013590509295985092959890939650565b600060208284031215611e2c57600080fd5b5051919050565b8183526000602080850194508260005b85811015611e7e578135611e56816118d1565b73ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101611e43565b509495945050505050565b838152604060208201526000611ea3604083018486611e33565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611f2257611f22611eac565b604052919050565b60006020808385031215611f3d57600080fd5b825167ffffffffffffffff80821115611f5557600080fd5b818501915085601f830112611f6957600080fd5b815181811115611f7b57611f7b611eac565b8060051b9150611f8c848301611edb565b8181529183018401918481019088841115611fa657600080fd5b938501935b83851015611fc457845182529385019390850190611fab565b98975050505050505050565b600060208284031215611fe257600080fd5b8151611fed816118d1565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561203557600080fd5b8135611fed816118d1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561208157612081612040565b500390565b86815285602082015260a0604082015260006120a660a083018688611e33565b73ffffffffffffffffffffffffffffffffffffffff9490941660608301525060800152949350505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561210957612109612040565b500290565b600082612144577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b8381101561216457818101518382015260200161214c565b83811115612173576000848401525b50505050565b600073ffffffffffffffffffffffffffffffffffffffff80861683528085166020840152506060604083015282518060608401526121be816080850160208701612149565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01691909101608001949350505050565b60006020828403121561220457600080fd5b815167ffffffffffffffff8082111561221c57600080fd5b818401915084601f83011261223057600080fd5b81518181111561224257612242611eac565b61227360207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611edb565b915080825285602082850101111561228a57600080fd5b61229b816020840160208601612149565b5094935050505056fea2646970667358221220eb17abe05eeba3a20acf423d9c0b916f7c22eba6424cd918d18ad2a760eea1ba64736f6c634300080a003360806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d00011790553480156200003a57600080fd5b506040805161018081019091526000908060c081018060018152604080518082018252600381526244414960e81b6020828101919091528301526012908201526305f5e100606082015260800160018152602001600081525081526020016040518060c001604052806002600a811115620000b957620000b962000b78565b815260408051808201825260048152635553444360e01b6020828101919091528301526006908201526305f5e100606082015260800160018152602001600081525081526020016040518060c001604052806003600a81111562000121576200012162000b78565b815260408051808201825260048152630ae8aa8960e31b602082810191909152830152601290820152644a817c8000606082015260800160028152602001600081525081526020016040518060c001604052806004600a8111156200018a576200018a62000b78565b815260408051808201825260048152634c494e4b60e01b6020828101919091528301526012908201526359682f00606082015260800160018152602001600081525081526020016040518060c001604052806005600a811115620001f257620001f262000b78565b815260408051808201825260048152631554d11560e21b602082810191909152830152601290820152633b023380606082015260800160018152602001600081525081526020016040518060c001604052806006600a8111156200025a576200025a62000b78565b815260408051808201825260058152640e6e88aa8960db1b602082810191909152830152601290820152644cd588640060608201526080016003815260200160009052905260408051610140810190915290915060009080608081018060078152602001604051806040016040528060048152602001636344414960e01b8152508152602001601260ff1681526020016305f5e100815260200160048081111562000309576200030962000b78565b8152602001600181525081526020016040518060c001604052806008600a81111562000339576200033962000b78565b81526040805180820182526005815264635553444360d81b6020828101919091528301526006908201526305f5e100606082015260800160048152602001600281525081526020016040518060c001604052806009600a811115620003a257620003a262000b78565b8152604080518082018252600581526418d554d11560da1b602082810191909152830152601290820152633b023380606082015260800160048152602001600581525081526020016040518060c00160405280600a808111156200040a576200040a62000b78565b81526040805180820182526005815264634c494e4b60d81b6020828101919091528301526012908201526359682f00606082015260800160048152602001600490529052905060005b600681101562000496576200048183826006811062000476576200047662000b8e565b6020020151620004db565b806200048d8162000ba4565b91505062000453565b5060005b6004811015620004d257620004bd82826004811062000476576200047662000b8e565b80620004c98162000ba4565b9150506200049a565b50505062000d14565b6000600282608001516004811115620004f857620004f862000b78565b14156200054e576040516200050d9062000a8c565b604051809103906000f0801580156200052a573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b03831617905590506200071e565b60038260800151600481111562000569576200056962000b78565b1415620005a4576040516200057e9062000a9a565b604051809103906000f0801580156200059b573d6000803e3d6000fd5b5090506200071e565b600182608001516004811115620005bf57620005bf62000b78565b1415620005f157816020015182602001518360400151604051620005e39062000aa8565b6200057e9392919062000c1e565b6004826080015160048111156200060c576200060c62000b78565b1415620006be576000600260008460a00151600a81111562000632576200063262000b78565b600a81111562000646576200064662000b78565b815260200190815260200160002060009054906101000a90046001600160a01b0316905082602001518360200151846040015183604051620006889062000ab6565b62000697949392919062000c5b565b604051809103906000f080158015620006b4573d6000803e3d6000fd5b509150506200071e565b60405162461bcd60e51b815260206004820152602b60248201527f74657374546f6b656e53756974653a204372656174696e6720756e6b6e6f776e60448201526a20746f6b656e207479706560a81b606482015260840160405180910390fd5b60005460208301516040516318caf8e360e31b8152620100009092046001600160a01b03169163c657c718916200075b9185919060040162000ca9565b600060405180830381600087803b1580156200077657600080fd5b505af11580156200078b573d6000803e3d6000fd5b50505050600082606001516008604051620007a69062000ac4565b91825260ff166020820152604001604051809103906000f080158015620007d1573d6000803e3d6000fd5b50905081600260008560000151600a811115620007f257620007f262000b78565b600a81111562000806576200080662000b78565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055508260600151600560008560000151600a8111156200085a576200085a62000b78565b600a8111156200086e576200086e62000b78565b8152602080820192909252604090810160009081209390935585516001600160a01b03861684526008909252909120805460ff1916600183600a811115620008ba57620008ba62000b78565b02179055508260800151600360008560000151600a811115620008e157620008e162000b78565b600a811115620008f557620008f562000b78565b81526020810191909152604001600020805460ff1916600183600481111562000922576200092262000b78565b0217905550604080518082019091526001600160a01b0380841682528281166020808401918252600780546001810182556000918252945160029095027fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688810180549686166001600160a01b031997881617905592517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c689909301805493909416929094169190911790915584015184519091600491600a811115620009eb57620009eb62000b78565b600a811115620009ff57620009ff62000b78565b8152602001908152602001600020908051906020019062000a2292919062000ad2565b5080600660008560000151600a81111562000a415762000a4162000b78565b600a81111562000a555762000a5562000b78565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550505050565b610ab1806200285183390190565b611224806200330283390190565b611758806200452683390190565b6117098062005c7e83390190565b6106ca806200738783390190565b82805462000ae09062000cd7565b90600052602060002090601f01602090048101928262000b04576000855562000b4f565b82601f1062000b1f57805160ff191683800117855562000b4f565b8280016001018555821562000b4f579182015b8281111562000b4f57825182559160200191906001019062000b32565b5062000b5d92915062000b61565b5090565b5b8082111562000b5d576000815560010162000b62565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600060001982141562000bc757634e487b7160e01b600052601160045260246000fd5b5060010190565b6000815180845260005b8181101562000bf65760208185018101518683018201520162000bd8565b8181111562000c09576000602083870101525b50601f01601f19169290920160200192915050565b60608152600062000c33606083018662000bce565b828103602084015262000c47818662000bce565b91505060ff83166040830152949350505050565b60808152600062000c70608083018762000bce565b828103602084015262000c84818762000bce565b60ff95909516604084015250506001600160a01b039190911660609091015292915050565b6001600160a01b038316815260406020820181905260009062000ccf9083018462000bce565b949350505050565b600181811c9082168062000cec57607f821691505b6020821081141562000d0e57634e487b7160e01b600052602260045260246000fd5b50919050565b611b2d8062000d246000396000f3fe6080604052600436106101635760003560e01c80638eb86e8b116100c0578063c6c3bbe611610074578063d051a62211610059578063d051a62214610490578063eebab8ef146104b0578063fa7626d4146104d057600080fd5b8063c6c3bbe614610433578063c74912d21461045357600080fd5b80639b140a85116100a55780639b140a85146103e6578063b36ba20814610406578063ba414fa61461040e57600080fd5b80638eb86e8b1461038357806398cdaadf146103a357600080fd5b80636a72bde71161011757806388327863116100fc578063883278631461030857806388f776a2146103365780638a3177a31461035657600080fd5b80636a72bde7146102c45780636ca42ae3146102e657600080fd5b8063440864fa11610148578063440864fa146102025780634b57b0be1461022f57806367b426451461028157600080fd5b806304bc3b1c1461016f57806310c7f0b9146101b557600080fd5b3661016a57005b600080fd5b34801561017b57600080fd5b5061019f61018a3660046116f6565b60086020526000908152604090205460ff1681565b6040516101ac9190611742565b60405180910390f35b3480156101c157600080fd5b506101d56101d036600461175c565b6104ea565b6040805173ffffffffffffffffffffffffffffffffffffffff9384168152929091166020830152016101ac565b34801561020e57600080fd5b5061022261021d366004611784565b610530565b6040516101ac91906117cb565b34801561023b57600080fd5b5060015461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101ac565b34801561028d57600080fd5b5061025c61029c366004611784565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156102d057600080fd5b506102e46102df36600461181c565b6105ca565b005b3480156102f257600080fd5b506102fb610730565b6040516101ac919061186b565b34801561031457600080fd5b506103286103233660046118d4565b6107b5565b6040519081526020016101ac565b34801561034257600080fd5b506102e461035136600461190b565b610888565b34801561036257600080fd5b50610328610371366004611784565b60056020526000908152604090205481565b34801561038f57600080fd5b506102e461039e366004611954565b6108b9565b3480156103af57600080fd5b5061025c6103be366004611784565b60066020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156103f257600080fd5b506102e4610401366004611993565b610a73565b6102e4610b22565b34801561041a57600080fd5b50610423610ba0565b60405190151581526020016101ac565b34801561043f57600080fd5b506102e461044e3660046119b3565b610d00565b34801561045f57600080fd5b5061048361046e366004611784565b60036020526000908152604090205460ff1681565b6040516101ac91906119d3565b34801561049c57600080fd5b506103286104ab36600461190b565b610daf565b3480156104bc57600080fd5b506102e46104cb366004611954565b610e8b565b3480156104dc57600080fd5b506000546104239060ff1681565b600781815481106104fa57600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff91821692501682565b60046020526000908152604090208054610549906119e7565b80601f0160208091040260200160405190810160405280929190818152602001828054610575906119e7565b80156105c25780601f10610597576101008083540402835291602001916105c2565b820191906000526020600020905b8154815290600101906020018083116105a557829003601f168201915b505050505081565b6000546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152620100009092049091169063ca669fa790602401600060405180830381600087803b15801561063e57600080fd5b505af1158015610652573d6000803e3d6000fd5b505050506002600085600a81111561066c5761066c611713565b600a81111561067d5761067d611713565b8152602081019190915260409081016000205490517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490529091169063095ea7b3906044016020604051808303816000875af1158015610705573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107299190611a3b565b5050505050565b60606007805480602002602001604051908101604052809291908181526020016000905b828210156107ac5760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff908116835260019182015416828401529083529092019101610754565b50505050905090565b60006002600084600a8111156107cd576107cd611713565b600a8111156107de576107de611713565b8152602081019190915260409081016000205490517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152909116906370a0823190602401602060405180830381865afa15801561085d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108819190611a5d565b9392505050565b6108b48383837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6105ca565b505050565b60016003600085600a8111156108d1576108d1611713565b600a8111156108e2576108e2611713565b815260208101919091526040016000205460ff16600481111561090757610907611713565b14610999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f74657374546f6b656e53756974653a20547279696e6720746f206275726e206160448201527f206e6f6e2d6e6f726d616c20746f6b656e00000000000000000000000000000060648201526084015b60405180910390fd5b6002600084600a8111156109af576109af611713565b600a8111156109c0576109c0611713565b8152602081019190915260409081016000205490517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526024820184905290911690639dc29fac906044015b6020604051808303816000875af1158015610a49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6d9190611a3b565b50505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604081205460ff169081600a811115610aaf57610aaf611713565b1415610b17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f20746f6b656e2077697468207375636820616464726573730000000000006044820152606401610990565b610a6d818484610888565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015610b8c57600080fd5b505af1158015610729573d6000803e3d6000fd5b60008054610100900460ff1615610bc05750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610cfb5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610c65917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc491608001611a76565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052610c9d91611abe565b6000604051808303816000865af19150503d8060008114610cda576040519150601f19603f3d011682016040523d82523d6000602084013e610cdf565b606091505b5091505080806020019051810190610cf79190611a3b565b9150505b919050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604081205460ff169081600a811115610d3c57610d3c611713565b1415610da4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f20746f6b656e2077697468207375636820616464726573730000000000006044820152606401610990565b610a6d818484610e8b565b60006002600085600a811115610dc757610dc7611713565b600a811115610dd857610dd8611713565b8152602081019190915260409081016000205490517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301529091169063dd62ed3e90604401602060405180830381865afa158015610e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e839190611a5d565b949350505050565b60026003600085600a811115610ea357610ea3611713565b600a811115610eb457610eb4611713565b815260208101919091526040016000205460ff166004811115610ed957610ed9611713565b1415610ff6576000546040517fc88a5e6d000000000000000000000000000000000000000000000000000000008152306004820152602481018390526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c88a5e6d90604401600060405180830381600087803b158015610f5657600080fd5b505af1158015610f6a573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015610fd857600080fd5b505af1158015610fec573d6000803e3d6000fd5b505050505061163c565b600380600085600a81111561100d5761100d611713565b600a81111561101e5761101e611713565b815260208101919091526040016000205460ff16600481111561104357611043611713565b14156111aa576000546040517fc88a5e6d000000000000000000000000000000000000000000000000000000008152306004820152602481018390526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c88a5e6d90604401600060405180830381600087803b1580156110c057600080fd5b505af11580156110d4573d6000803e3d6000fd5b505050506002600084600a8111156110ee576110ee611713565b600a8111156110ff576110ff611713565b8152602081019190915260409081016000205490517fa1903eab00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a1903eab90839060240160206040518083038185885af115801561117f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906111a49190611a5d565b5061163c565b60046003600085600a8111156111c2576111c2611713565b600a8111156111d3576111d3611713565b815260208101919091526040016000205460ff1660048111156111f8576111f8611713565b141561148f5760006002600085600a81111561121657611216611713565b600a81111561122757611227611713565b815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c49190611ada565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600860205260409020549091506112fb9060ff163084610e8b565b8073ffffffffffffffffffffffffffffffffffffffff1663095ea7b36002600087600a81111561132d5761132d611713565b600a81111561133e5761133e611713565b81526020810191909152604090810160002054905160e083901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602481018590526044016020604051808303816000875af11580156113c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e69190611a3b565b506002600085600a8111156113fd576113fd611713565b600a81111561140e5761140e611713565b8152602081019190915260409081016000205490517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810184905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f1990604401600060405180830381600087803b158015610fd857600080fd5b60016003600085600a8111156114a7576114a7611713565b600a8111156114b8576114b8611713565b815260208101919091526040016000205460ff1660048111156114dd576114dd611713565b14156115b4576002600084600a8111156114f9576114f9611713565b600a81111561150a5761150a611713565b8152602081019190915260409081016000205490517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f19906044016020604051808303816000875af1158015611590573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a49190611a3b565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f74657374546f6b656e53756974653a20547279696e6720746f207472616e736660448201527f657220756e6b6e6f776e20746f6b656e000000000000000000000000000000006064820152608401610990565b6002600084600a81111561165257611652611713565b600a81111561166357611663611713565b8152602081019190915260409081016000205490517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490529091169063a9059cbb90604401610a2a565b73ffffffffffffffffffffffffffffffffffffffff811681146116f357600080fd5b50565b60006020828403121561170857600080fd5b8135610881816116d1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60208101600b831061175657611756611713565b91905290565b60006020828403121561176e57600080fd5b5035919050565b8035600b8110610cfb57600080fd5b60006020828403121561179657600080fd5b61088182611775565b60005b838110156117ba5781810151838201526020016117a2565b83811115610a6d5750506000910152565b60208152600082518060208401526117ea81604085016020870161179f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000806080858703121561183257600080fd5b61183b85611775565b9350602085013561184b816116d1565b9250604085013561185b816116d1565b9396929550929360600135925050565b602080825282518282018190526000919060409081850190868401855b828110156118c7578151805173ffffffffffffffffffffffffffffffffffffffff90811686529087015116868501529284019290850190600101611888565b5091979650505050505050565b600080604083850312156118e757600080fd5b6118f083611775565b91506020830135611900816116d1565b809150509250929050565b60008060006060848603121561192057600080fd5b61192984611775565b92506020840135611939816116d1565b91506040840135611949816116d1565b809150509250925092565b60008060006060848603121561196957600080fd5b61197284611775565b92506020840135611982816116d1565b929592945050506040919091013590565b6000806000606084860312156119a857600080fd5b8335611929816116d1565b6000806000606084860312156119c857600080fd5b8335611972816116d1565b602081016005831061175657611756611713565b600181811c908216806119fb57607f821691505b60208210811415611a35577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600060208284031215611a4d57600080fd5b8151801515811461088157600080fd5b600060208284031215611a6f57600080fd5b5051919050565b7fffffffff000000000000000000000000000000000000000000000000000000008316815260008251611ab081600485016020870161179f565b919091016004019392505050565b60008251611ad081846020870161179f565b9190910192915050565b600060208284031215611aec57600080fd5b8151610881816116d156fea264697066735822122010fe735ed069aca27931edce4ba2ff14ec7886bf21b0eea685a884f9200fb49e64736f6c634300080a003360c0604052600d60808190526c2bb930b83832b21022ba3432b960991b60a090815261002e916000919061007a565b50604080518082019091526004808252630ae8aa8960e31b602090920191825261005a9160019161007a565b506002805460ff1916601217905534801561007457600080fd5b5061014e565b82805461008690610113565b90600052602060002090601f0160209004810192826100a857600085556100ee565b82601f106100c157805160ff19168380011785556100ee565b828001600101855582156100ee579182015b828111156100ee5782518255916020019190600101906100d3565b506100fa9291506100fe565b5090565b5b808211156100fa57600081556001016100ff565b600181811c9082168061012757607f821691505b6020821081141561014857634e487b7160e01b600052602260045260246000fd5b50919050565b6109548061015d6000396000f3fe6080604052600436106100cb5760003560e01c806340c10f1911610074578063a9059cbb1161004e578063a9059cbb14610225578063d0e30db014610245578063dd62ed3e1461024d57600080fd5b806340c10f19146101c357806370a08231146101e357806395d89b411461021057600080fd5b806323b872dd116100a557806323b872dd146101575780632e1a7d4d14610177578063313ce5671461019757600080fd5b806306fdde03146100df578063095ea7b31461010a57806318160ddd1461013a57600080fd5b366100da576100d8610285565b005b600080fd5b3480156100eb57600080fd5b506100f46102e0565b6040516101019190610703565b60405180910390f35b34801561011657600080fd5b5061012a61012536600461079f565b61036e565b6040519015158152602001610101565b34801561014657600080fd5b50475b604051908152602001610101565b34801561016357600080fd5b5061012a6101723660046107c9565b6103e7565b34801561018357600080fd5b506100d8610192366004610805565b6105fe565b3480156101a357600080fd5b506002546101b19060ff1681565b60405160ff9091168152602001610101565b3480156101cf57600080fd5b506100d86101de36600461079f565b6106a4565b3480156101ef57600080fd5b506101496101fe36600461081e565b60036020526000908152604090205481565b34801561021c57600080fd5b506100f46106e2565b34801561023157600080fd5b5061012a61024036600461079f565b6106ef565b6100d8610285565b34801561025957600080fd5b50610149610268366004610839565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102a490849061089b565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102ed906108b3565b80601f0160208091040260200160405190810160405280929190818152602001828054610319906108b3565b80156103665780601f1061033b57610100808354040283529160200191610366565b820191906000526020600020905b81548152906001019060200180831161034957829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103d69086815260200190565b60405180910390a350600192915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561041957600080fd5b73ffffffffffffffffffffffffffffffffffffffff8416331480159061048f575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105175773ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020548211156104d157600080fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915281208054849290610511908490610907565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061054c908490610907565b909155505073ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260408120805484929061058690849061089b565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516105ec91815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561061a57600080fd5b3360009081526003602052604081208054839290610639908490610907565b9091555050604051339082156108fc029083906000818181858888f1935050505015801561066b573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260036020526040812080548392906106d990849061089b565b90915550505050565b600180546102ed906108b3565b60006106fc3384846103e7565b9392505050565b600060208083528351808285015260005b8181101561073057858101830151858201604001528201610714565b81811115610742576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461079a57600080fd5b919050565b600080604083850312156107b257600080fd5b6107bb83610776565b946020939093013593505050565b6000806000606084860312156107de57600080fd5b6107e784610776565b92506107f560208501610776565b9150604084013590509250925092565b60006020828403121561081757600080fd5b5035919050565b60006020828403121561083057600080fd5b6106fc82610776565b6000806040838503121561084c57600080fd5b61085583610776565b915061086360208401610776565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156108ae576108ae61086c565b500190565b600181811c908216806108c757607f821691505b60208210811415610901577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000828210156109195761091961086c565b50039056fea26469706673582212206ec943fa4e3b70d8fca6c25b6aa26fa18e8f8952ce3bc4d5afcb443bf3097c0564736f6c634300080a003360806040526000600255600060035534801561001a57600080fd5b506111fa8061002a6000396000f3fe60806040526004361061016e5760003560e01c80637a28fb88116100cb578063bdd17e1c1161007f578063dd62ed3e11610059578063dd62ed3e146103ee578063ee7a7c0414610441578063f5eb42dc1461046157600080fd5b8063bdd17e1c146103ad578063cdb9a21c146103c3578063d5002f2e146103d957600080fd5b8063a1903eab116100b0578063a1903eab1461035a578063a457c2d71461036d578063a9059cbb1461038d57600080fd5b80637a28fb88146102f457806395d89b411461031457600080fd5b806323b872dd1161012257806337cfdaca1161010757806337cfdaca1461020d57806339509351146102b457806370a08231146102d457600080fd5b806323b872dd14610278578063313ce5671461029857600080fd5b806318160ddd1161015357806318160ddd1461020d578063192084511461023057806322301f6e1461025057600080fd5b806306fdde0314610185578063095ea7b3146101dd57600080fd5b366101805761017d6000610481565b50005b600080fd5b34801561019157600080fd5b5060408051808201909152601781527f4c6971756964207374616b656420457468657220322e3000000000000000000060208201525b6040516101d49190610f63565b60405180910390f35b3480156101e957600080fd5b506101fd6101f8366004610fff565b610545565b60405190151581526020016101d4565b34801561021957600080fd5b5061022261055b565b6040519081526020016101d4565b34801561023c57600080fd5b5061022261024b366004611029565b61056b565b34801561025c57600080fd5b5061027661026b366004611042565b600391909155600255565b005b34801561028457600080fd5b506101fd610293366004611064565b6105ab565b3480156102a457600080fd5b50604051601281526020016101d4565b3480156102c057600080fd5b506101fd6102cf366004610fff565b610696565b3480156102e057600080fd5b506102226102ef3660046110a0565b6106d9565b34801561030057600080fd5b5061022261030f366004611029565b61070e565b34801561032057600080fd5b5060408051808201909152600581527f737445544800000000000000000000000000000000000000000000000000000060208201526101c7565b6102226103683660046110a0565b61073a565b34801561037957600080fd5b506101fd610388366004610fff565b610745565b34801561039957600080fd5b506101fd6103a8366004610fff565b6107f9565b3480156103b957600080fd5b5061022260035481565b3480156103cf57600080fd5b5061022260025481565b3480156103e557600080fd5b50610222610806565b3480156103fa57600080fd5b506102226104093660046110bb565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b34801561044d57600080fd5b5061027661045c366004610fff565b610811565b34801561046d57600080fd5b5061022261047c3660046110a0565b61081f565b60003334806104f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f5a45524f5f4445504f534954000000000000000000000000000000000000000060448201526064015b60405180910390fd5b60006104fc8261056b565b9050806105065750805b8160036000828254610518919061111d565b909155506105289050838261084a565b61053383838761093b565b61053d8382610992565b949350505050565b60006105523384846109ea565b50600192915050565b600061056660035490565b905090565b60008061057760035490565b9050806105875750600092915050565b6105a48161059e61059760025490565b8690610b52565b90610b5e565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001602090815260408083203384529091528120548281101561066c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f5452414e534645525f414d4f554e545f455843454544535f414c4c4f57414e4360448201527f450000000000000000000000000000000000000000000000000000000000000060648201526084016104e8565b610677858585610b6a565b61068b85336106868487610bef565b6109ea565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916105529185906106869086610bfb565b73ffffffffffffffffffffffffffffffffffffffff81166000908152602081905260408120546107089061070e565b92915050565b60008061071a60025490565b90508061072a5750600092915050565b6105a48161059e61059760035490565b600061070882610481565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156107e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4445435245415345445f414c4c4f57414e43455f42454c4f575f5a45524f000060448201526064016104e8565b6107ef33856106868487610bef565b5060019392505050565b6000610552338484610b6a565b600061056660025490565b61081b8282610c07565b5050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040812054610708565b73ffffffffffffffffffffffffffffffffffffffff82166108c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4d494e545f544f5f5448455f5a45524f5f41444452455353000000000000000060448201526064016104e8565b80600260008282546108d9919061111d565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205461090e9082610bfb565b73ffffffffffffffffffffffffffffffffffffffff90921660009081526020819052604090209190915550565b6040805183815273ffffffffffffffffffffffffffffffffffffffff83811660208301528516917fed8dd430b1e4bba98e943dc5b157cf7b54d9e12916d6c474ff5733a95001d03b910160405180910390a2505050565b73ffffffffffffffffffffffffffffffffffffffff821660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6109d58461070e565b60405190815260200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff8316610a67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f415050524f56455f46524f4d5f5a45524f5f414444524553530000000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff8216610ae4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f415050524f56455f544f5f5a45524f5f4144445245535300000000000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006105a48284611135565b60006105a48284611172565b6000610b758261056b565b9050610b82848483610d64565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610be191815260200190565b60405180910390a350505050565b60006105a482846111ad565b60006105a4828461111d565b73ffffffffffffffffffffffffffffffffffffffff8216610c84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4255524e5f46524f4d5f5448455f5a45524f5f4144445245535300000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205480821115610d14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4255524e5f414d4f554e545f455843454544535f42414c414e4345000000000060448201526064016104e8565b8160026000828254610d2691906111ad565b90915550610d3690508183610bef565b73ffffffffffffffffffffffffffffffffffffffff9093166000908152602081905260409020929092555050565b73ffffffffffffffffffffffffffffffffffffffff8316610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f5452414e534645525f46524f4d5f5448455f5a45524f5f41444452455353000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff8216610e5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f5452414e534645525f544f5f5448455f5a45524f5f414444524553530000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205480821115610eee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5452414e534645525f414d4f554e545f455843454544535f42414c414e43450060448201526064016104e8565b610ef88183610bef565b73ffffffffffffffffffffffffffffffffffffffff8086166000908152602081905260408082209390935590851681522054610f349083610bfb565b73ffffffffffffffffffffffffffffffffffffffff909316600090815260208190526040902092909255505050565b600060208083528351808285015260005b81811015610f9057858101830151858201604001528201610f74565b81811115610fa2576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ffa57600080fd5b919050565b6000806040838503121561101257600080fd5b61101b83610fd6565b946020939093013593505050565b60006020828403121561103b57600080fd5b5035919050565b6000806040838503121561105557600080fd5b50508035926020909101359150565b60008060006060848603121561107957600080fd5b61108284610fd6565b925061109060208501610fd6565b9150604084013590509250925092565b6000602082840312156110b257600080fd5b6105a482610fd6565b600080604083850312156110ce57600080fd5b6110d783610fd6565b91506110e560208401610fd6565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611130576111306110ee565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561116d5761116d6110ee565b500290565b6000826111a8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000828210156111bf576111bf6110ee565b50039056fea2646970667358221220a5b4f31162ba2b8b3424cef84b31ef91d05a825243602b5fdf758ffb49b8246364736f6c634300080a003360a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a003360c06040523480156200001157600080fd5b506040516200170938038062001709833981016040819052620000349162000266565b8351849084906200004d906003906020850190620000f3565b50805162000063906004906020840190620000f3565b505050620000806200007a6200009d60201b60201c565b620000a1565b60ff9091166080526001600160a01b031660a05250620003479050565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b82805462000101906200030a565b90600052602060002090601f01602090048101928262000125576000855562000170565b82601f106200014057805160ff191683800117855562000170565b8280016001018555821562000170579182015b828111156200017057825182559160200191906001019062000153565b506200017e92915062000182565b5090565b5b808211156200017e576000815560010162000183565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c157600080fd5b81516001600160401b0380821115620001de57620001de62000199565b604051601f8301601f19908116603f0116810190828211818310171562000209576200020962000199565b816040528381526020925086838588010111156200022657600080fd5b600091505b838210156200024a57858201830151818301840152908201906200022b565b838211156200025c5760008385830101525b9695505050505050565b600080600080608085870312156200027d57600080fd5b84516001600160401b03808211156200029557600080fd5b620002a388838901620001af565b95506020870151915080821115620002ba57600080fd5b50620002c987828801620001af565b935050604085015160ff81168114620002e157600080fd5b60608601519092506001600160a01b0381168114620002ff57600080fd5b939692955090935050565b600181811c908216806200031f57607f821691505b602082108114156200034157634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05161138e6200037b600039600081816101f70152818161041f0152610600015260006101a2015261138e6000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80636f307dc3116100b257806395d89b4111610081578063a9059cbb11610066578063a9059cbb146102b5578063dd62ed3e146102c8578063f2fde38b1461030e57600080fd5b806395d89b411461029a578063a457c2d7146102a257600080fd5b80636f307dc3146101f257806370a082311461023e578063715018a6146102745780638da5cb5b1461027c57600080fd5b806323b872dd116100ee57806323b872dd14610188578063313ce5671461019b57806339509351146101cc57806340c10f19146101df57600080fd5b806306fdde0314610120578063095ea7b31461013e57806318160ddd146101615780631e9a695014610173575b600080fd5b610128610321565b604051610135919061112d565b60405180910390f35b61015161014c3660046111c9565b6103b3565b6040519015158152602001610135565b6002545b604051908152602001610135565b6101866101813660046111c9565b6103c9565b005b6101516101963660046111f3565b610491565b60405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610135565b6101516101da3660046111c9565b61057c565b6101866101ed3660046111c9565b6105c5565b6102197f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b61016561024c36600461122f565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610186610691565b60055473ffffffffffffffffffffffffffffffffffffffff16610219565b61012861071e565b6101516102b03660046111c9565b61072d565b6101516102c33660046111c9565b610805565b6101656102d6366004611251565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b61018661031c36600461122f565b610812565b60606003805461033090611284565b80601f016020809104026020016040519081016040528092919081815260200182805461035c90611284565b80156103a95780601f1061037e576101008083540402835291602001916103a9565b820191906000526020600020905b81548152906001019060200180831161038c57829003601f168201915b5050505050905090565b60006103c0338484610942565b50600192915050565b6103d33382610af5565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015610468573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048c91906112d8565b505050565b600061049e848484610ce2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6105718533858403610942565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916103c09185906105c0908690611329565b610942565b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906323b872dd906064016020604051808303816000875af115801561065e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068291906112d8565b5061068d8282610f96565b5050565b60055473ffffffffffffffffffffffffffffffffffffffff163314610712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161055b565b61071c60006110b6565b565b60606004805461033090611284565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156107ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161055b565b6107fb3385858403610942565b5060019392505050565b60006103c0338484610ce2565b60055473ffffffffffffffffffffffffffffffffffffffff163314610893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161055b565b73ffffffffffffffffffffffffffffffffffffffff8116610936576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161055b565b61093f816110b6565b50565b73ffffffffffffffffffffffffffffffffffffffff83166109e4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff8216610a87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8216610b98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015610c4e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290610c8a908490611341565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff8216610e28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610ede576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610f22908490611329565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f8891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161055b565b80600260008282546110259190611329565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152602081905260408120805483929061105f908490611329565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208083528351808285015260005b8181101561115a5785810183015185820160400152820161113e565b8181111561116c576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146111c457600080fd5b919050565b600080604083850312156111dc57600080fd5b6111e5836111a0565b946020939093013593505050565b60008060006060848603121561120857600080fd5b611211846111a0565b925061121f602085016111a0565b9150604084013590509250925092565b60006020828403121561124157600080fd5b61124a826111a0565b9392505050565b6000806040838503121561126457600080fd5b61126d836111a0565b915061127b602084016111a0565b90509250929050565b600181811c9082168061129857607f821691505b602082108114156112d2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156112ea57600080fd5b8151801515811461124a57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561133c5761133c6112fa565b500190565b600082821015611353576113536112fa565b50039056fea26469706673582212203a6db30cd3c097921df4156794aa7973eb848711deeb2cffd7c54a9df1fdb0a564736f6c634300080a003360a060405234801561001057600080fd5b506040516106ca3803806106ca83398101604081905261002f9161006c565b60009190915560ff166080526001805460506001600160501b031991821681179092556004805490911690911790554260028190556003556100a2565b6000806040838503121561007f57600080fd5b82519150602083015160ff8116811461009757600080fd5b809150509250929050565b60805161060e6100bc600039600060d3015261060e6000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80639a6fc8f511610081578063d62ada111161005b578063d62ada11146102dc578063f7a30806146102f4578063feaf968c1461030757600080fd5b80639a6fc8f5146101cd578063bd18ad531461023a578063cd653afc1461024d57600080fd5b806354fd4d50116100b257806354fd4d501461012d57806367e8d83d1461013c5780637284e4161461018e57600080fd5b8063313ce567146100ce5780633fd0875f1461010c575b600080fd5b6100f57f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020015b60405180910390f35b6004546a0100000000000000000000900460ff166040516101039190610441565b60405160018152602001610103565b61018c61014a366004610482565b600480549115156c01000000000000000000000000027fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff909216919091179055565b005b604080518082018252600c81527f7072696365206f7261636c6500000000000000000000000000000000000000006020820152905161010391906104ab565b6102036101db36600461053d565b60015460005460025460035460045469ffffffffffffffffffff948516941691939590929450565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610103565b61018c610248366004610558565b61030f565b61018c61025b366004610579565b6001805469ffffffffffffffffffff9586167fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090911617905560029290925560035560048054919092167fffffffffffffffffffffffffffffffffffffffff00ff00000000000000000000909116176b020000000000000000000000179055565b6102e461035f565b6040519015158152602001610103565b61018c6103023660046105bf565b600055565b610203610385565b600480548291907fffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff166b01000000000000000000000083600281111561035757610357610412565b021790555050565b600454600090610380906b010000000000000000000000900460ff166103d6565b905090565b60008060008060006004600c9054906101000a900460ff16156103a757600080fd5b505060015460005460025460035460045469ffffffffffffffffffff9485169893975091955093509190911690565b600060028260028111156103ec576103ec610412565b14156103f757600080fd5b600182600281111561040b5761040b610412565b1492915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016006831061047c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561049457600080fd5b813580151581146104a457600080fd5b9392505050565b600060208083528351808285015260005b818110156104d8578581018301518582016040015282016104bc565b818111156104ea576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803569ffffffffffffffffffff8116811461053857600080fd5b919050565b60006020828403121561054f57600080fd5b6104a48261051e565b60006020828403121561056a57600080fd5b8135600381106104a457600080fd5b6000806000806080858703121561058f57600080fd5b6105988561051e565b935060208501359250604085013591506105b46060860161051e565b905092959194509250565b6000602082840312156105d157600080fd5b503591905056fea264697066735822122014874f7a973b86501c4c1a8be32490fe902c8f088ee234d25f9b2497e19f9e5264736f6c634300080a003360806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d00011790553480156200003a57600080fd5b5060405162031ed638038062031ed68339810160408190526200005d91620015e8565b81816040516200006d9062001595565b604051809103906000f0801580156200008a573d6000803e3d6000fd5b5050600180546001600160a01b0319166001600160a01b038416908117909155604080516325abd85f60e11b81529051634b57b0be916004808201926020929091908290030181865afa158015620000e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200010c91906200162a565b73c4375b7de8af5a38a93548eb8453a498222c4ff26040516200012f90620015a3565b6001600160a01b03928316815291166020820152604001604051809103906000f08015801562000163573d6000803e3d6000fd5b50600380546001600160a01b0319166001600160a01b039290921691821790556040805163de28735960e01b8152905163de287359916004808201926020929091908290030181865afa158015620001bf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e591906200162a565b604051634910832f60e01b81527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526001600160a01b039190911690634910832f90602401600060405180830381600087803b1580156200023d57600080fd5b505af115801562000252573d6000803e3d6000fd5b50505050600360009054906101000a90046001600160a01b03166001600160a01b031663de2873596040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d091906200162a565b60035460405163f2fde38b60e01b81526001600160a01b03918216600482015291169063f2fde38b90602401600060405180830381600087803b1580156200031757600080fd5b505af11580156200032c573d6000803e3d6000fd5b505060035460015460408051636ca42ae360e01b815290516001600160a01b039384169550638874ff1f94509190921691636ca42ae39160048083019260009291908290030181865afa15801562000388573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620003b29190810190620016c5565b6040518263ffffffff1660e01b8152600401620003d09190620017b6565b600060405180830381600087803b158015620003eb57600080fd5b505af115801562000400573d6000803e3d6000fd5b50505050600360009054906101000a90046001600160a01b03166001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000458573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200047e91906200162a565b600280546001600160a01b0319166001600160a01b039290921691821790556040805163120d150d60e31b81529051639068a868916004808201926020929091908290030181865afa158015620004d9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004ff91906200162a565b600480546001600160a01b0319166001600160a01b0392831617815560025460408051631f94a27560e31b81529051919093169263fca513a892818101926020929091908290030181865afa1580156200055d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200058391906200162a565b600880546001600160a01b0319166001600160a01b0392831617905560025460408051630873769560e01b81529051919092169163087376959160048083019260209291908290030181865afa158015620005e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200060891906200162a565b600780546001600160a01b0319166001600160a01b039283161790556002546040805163c513c9bb60e01b81529051919092169163c513c9bb9160048083019260209291908290030181865afa15801562000667573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200068d91906200162a565b600680546001600160a01b0319166001600160a01b039283161790556001546040516367b4264560e01b81529116906367b4264590620006d29084906004016200184d565b602060405180830381865afa158015620006f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200071691906200162a565b600980546001600160a01b0319166001600160a01b0392831617905560035460408051630a55006360e21b815290519190921691632954018c9160048083019260209291908290030181865afa15801562000775573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200079b91906200162a565b6009546040516001600160a01b0390911690620007b890620015b2565b6001600160a01b03928316815291166020820152604001604051809103906000f080158015620007ec573d6000803e3d6000fd5b50600580546001600160a01b0319166001600160a01b039283169081179091556001549091169063eebab8ef90839062000825620011ec565b6200083290600a62001879565b6040518463ffffffff1660e01b815260040162000852939291906200189b565b600060405180830381600087803b1580156200086d57600080fd5b505af115801562000882573d6000803e3d6000fd5b505060065460055460405163d914cd4b60e01b81526001600160a01b0391821660048201529116925063d914cd4b9150602401600060405180830381600087803b158015620008d057600080fd5b505af1158015620008e5573d6000803e3d6000fd5b5050600f80546001600160801b031916670de0b6b3a76400001790555062000911925050620011ec9050565b6200091e90600a62001879565b600f80546001600160801b03908116600160801b9382168402818117938490556040805160a0810182529184169092178152939092041660208301526000919081016200096b84620012ab565b815260006020820181905260409182018190526005549151929350916001600160a01b039091169083908390620009a290620015c0565b620009b093929190620018c5565b604051809103906000f080158015620009cd573d6000803e3d6000fd5b509050806001600160a01b031663c12c21c06040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a0f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a3591906200162a565b600b60006101000a8154816001600160a01b0302191690836001600160a01b03160217905550806001600160a01b0316632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a9a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ac091906200162a565b600c60006101000a8154816001600160a01b0302191690836001600160a01b03160217905550806001600160a01b031663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000b25573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b4b91906200162a565b600d80546001600160a01b0319166001600160a01b03928316179055600654600b5460405163e26b2f6360e01b8152908316600482015291169063e26b2f6390602401600060405180830381600087803b15801562000ba957600080fd5b505af115801562000bbe573d6000803e3d6000fd5b5050600054600554604080516318caf8e360e31b81526001600160a01b039283166004808301919091526024820192909252604481019190915263141bdbdb60e21b60648201526201000090920416925063c657c7189150608401600060405180830381600087803b15801562000c3457600080fd5b505af115801562000c49573d6000803e3d6000fd5b5050600054600c8054604080516318caf8e360e31b81526001600160a01b039283166004820152602481019190915260448101929092526b43726564697446616361646560a01b606483015262010000909204909116925063c657c7189150608401600060405180830381600087803b15801562000cc657600080fd5b505af115801562000cdb573d6000803e3d6000fd5b5050600054600b54604080516318caf8e360e31b81526001600160a01b0392831660048201526024810191909152600d60448201526c21b932b234ba26b0b730b3b2b960991b60648201526201000090920416925063c657c7189150608401600060405180830381600087803b15801562000d5557600080fd5b505af115801562000d6a573d6000803e3d6000fd5b5050600054600d54604080516318caf8e360e31b81526001600160a01b0392831660048201526024810191909152601260448201527121b932b234ba21b7b73334b3bab930ba37b960711b60648201526201000090920416925063c657c7189150608401600060405180830381600087803b15801562000de957600080fd5b505af115801562000dfe573d6000803e3d6000fd5b50506001546001600160a01b0316915063eebab8ef90508473f39fd6e51aad88f6f4ce6ab8827279cfffb9226662000e35620011ec565b6040518463ffffffff1660e01b815260040162000e55939291906200189b565b600060405180830381600087803b15801562000e7057600080fd5b505af115801562000e85573d6000803e3d6000fd5b50506001546001600160a01b0316915063eebab8ef9050847390f79bf6eb2c4f870365e785982e1f101e93b90662000ebc620011ec565b6040518463ffffffff1660e01b815260040162000edc939291906200189b565b600060405180830381600087803b15801562000ef757600080fd5b505af115801562000f0c573d6000803e3d6000fd5b505060005460405163ca669fa760e01b815273f39fd6e51aad88f6f4ce6ab8827279cfffb922666004820152620100009091046001600160a01b0316925063ca669fa79150602401600060405180830381600087803b15801562000f6f57600080fd5b505af115801562000f84573d6000803e3d6000fd5b5050600954600b5460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529116925063095ea7b391506044016020604051808303816000875af115801562000fdf573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001005919062001989565b5060005460405163ca669fa760e01b81527390f79bf6eb2c4f870365e785982e1f101e93b9066004820152620100009091046001600160a01b03169063ca669fa790602401600060405180830381600087803b1580156200106557600080fd5b505af11580156200107a573d6000803e3d6000fd5b5050600954600b5460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529116925063095ea7b391506044016020604051808303816000875af1158015620010d5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010fb919062001989565b5060025460405163f2fde38b60e01b81527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526001600160a01b039091169063f2fde38b90602401600060405180830381600087803b1580156200115657600080fd5b505af11580156200116b573d6000803e3d6000fd5b505060075460405163f2fde38b60e01b81527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b158015620011c957600080fd5b505af1158015620011de573d6000803e3d6000fd5b5050505050505050620019e1565b600180546040516367b4264560e01b81526000926001600160a01b03909216916367b42645916200122191906004016200184d565b602060405180830381865afa1580156200123f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200126591906200162a565b6009546001600160a01b03908116911614620012955762001290670de0b6b3a764000060c862001879565b905090565b62001290670de0b6b3a7640000614e2062001879565b6040805160c08101825260026080820190815261232860a08301528152815180830183526005815261226060208281019190915282015281518083018352606092600092919082019080600387600a8111156200130c576200130c62001814565b146200131a5760036200131d565b60015b600a81111562001331576200133162001814565b815261206c6020918201529082526040805180820190915260048152611c84818301529101529050612454600a6000858281111562001374576200137462001814565b600a81111562001388576200138862001814565b815260208101919091526040908101600020805461ffff9390931661ffff19909316929092179091558051600480825260a0820190925281816020015b6040805180820190915260008082526020820152815260200190600190039081620013c557905050925060005b818110156200158d57828160048110620014105762001410620019ad565b602002015160200151600a6000858460048110620014325762001432620019ad565b602002015151600a8111156200144c576200144c62001814565b600a81111562001460576200146062001814565b815260208101919091526040908101600020805461ffff191661ffff9390931692909217909155805180820190915260015481906001600160a01b03166367b42645868560048110620014b757620014b7620019ad565b6020020151516040516001600160e01b031960e084901b168152620014e091906004016200184d565b602060405180830381865afa158015620014fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200152491906200162a565b6001600160a01b03168152602001848360048110620015475762001547620019ad565b60200201516020015161ffff168152508482815181106200156c576200156c620019ad565b602002602001018190525080806200158490620019c3565b915050620013f2565b505050919050565b6105e6806200bc5283390190565b62011105806200c23883390190565b6110a7806201d33d83390190565b62013af2806201e3e483390190565b6001600160a01b0381168114620015e557600080fd5b50565b60008060408385031215620015fc57600080fd5b82516200160981620015cf565b6020840151909250600b81106200161f57600080fd5b809150509250929050565b6000602082840312156200163d57600080fd5b81516200164a81620015cf565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156200168c576200168c62001651565b60405290565b604051601f8201601f191681016001600160401b0381118282101715620016bd57620016bd62001651565b604052919050565b60006020808385031215620016d957600080fd5b82516001600160401b0380821115620016f157600080fd5b818501915085601f8301126200170657600080fd5b8151818111156200171b576200171b62001651565b6200172b848260051b0162001692565b818152848101925060069190911b8301840190878211156200174c57600080fd5b928401925b81841015620017ab57604084890312156200176c5760008081fd5b6200177662001667565b84516200178381620015cf565b8152848601516200179481620015cf565b818701528352604093909301929184019162001751565b979650505050505050565b602080825282518282018190526000919060409081850190868401855b828110156200180757815180516001600160a01b0390811686529087015116868501529284019290850190600101620017d3565b5091979650505050505050565b634e487b7160e01b600052602160045260246000fd5b600b81106200184957634e487b7160e01b600052602160045260246000fd5b9052565b602081016200185d82846200182a565b92915050565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161562001896576200189662001863565b500290565b60608101620018ab82866200182a565b6001600160a01b0393909316602082015260400152919050565b6001600160a01b0384811682526060602080840182905285516001600160801b039081169285019290925285810151909116608084015260408086015160a085810152805161010086018190526000949392918301919085906101208801905b808310156200195657845180518816835286015161ffff168683015293850193600192909201919083019062001925565b5060608a01516001600160a01b031660c0890152608090990151151560e088015250909401949094525092949350505050565b6000602082840312156200199c57600080fd5b815180151581146200164a57600080fd5b634e487b7160e01b600052603260045260246000fd5b6000600019821415620019da57620019da62001863565b5060010190565b61a26180620019f16000396000f3fe60806040523480156200001157600080fd5b5060043610620001ad5760003560e01c806362eb33e311620000f5578063ba414fa61162000097578063de287359116200006e578063de2873591462000479578063f9aa028a146200049a578063fa7626d414620004bb57600080fd5b8063ba414fa6146200041c578063c12c21c01462000437578063d46b9330146200045857600080fd5b80637785ff5d11620000cc5780637785ff5d14620003da5780639408b63f14620003e45780639dd55b45146200040557600080fd5b806362eb33e314620003775780636b70b04c14620003985780636f307dc314620003b957600080fd5b80632f7a1881116200015f5780635e813a8b11620001365780635e813a8b146200030c5780635f7c9bd0146200032d57806362186905146200034657600080fd5b80632f7a188114620002be578063406c8e2f14620002df57806354cae56e146200030057600080fd5b80630e42bc5d11620001945780630e42bc5d14620002305780632630c12f14620002565780632954018c146200029d57600080fd5b80630bc772da14620001b25780630c75f80614620001f5575b600080fd5b600f54620001cf906fffffffffffffffffffffffffffffffff1681565b6040516fffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6200021c62000206366004620012dd565b600a6020526000908152604090205461ffff1681565b60405161ffff9091168152602001620001ec565b6200024762000241366004620012dd565b620004c9565b604051620001ec919062001307565b600854620002779073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001620001ec565b600254620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600c54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600154620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200030a6200081f565b005b600454620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200033762000b1a565b604051908152602001620001ec565b600f54620001cf9070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681565b600654620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600554620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600954620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200030a62000c0c565b600e54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200030a6200041636600462001398565b62000fd6565b6200042662001149565b6040519015158152602001620001ec565b600b54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600354620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600754620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600d54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600054620004269060ff1681565b6040805160c08101825260026080820190815261232860a08301528152815180830183526005815261226060208281019190915282015281518083018352606092600092919082019080600387600a8111156200052a576200052a620013c7565b14620005385760036200053b565b60015b600a8111156200054f576200054f620013c7565b815261206c6020918201529082526040805180820190915260048152611c84818301529101529050612454600a60008582811115620005925762000592620013c7565b600a811115620005a657620005a6620013c7565b815260208101919091526040908101600020805461ffff939093167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909316929092179091558051600480825260a0820190925281816020015b60408051808201909152600080825260208201528152602001906001900390816200060057905050925060005b8181101562000817578281600481106200064b576200064b620013f6565b602002015160200151600a60008584600481106200066d576200066d620013f6565b602002015151600a811115620006875762000687620013c7565b600a8111156200069b576200069b620013c7565b81526020810191909152604090810160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff93909316929092179091558051808201909152600154819073ffffffffffffffffffffffffffffffffffffffff166367b426458685600481106200071c576200071c620013f6565b6020020151516040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526200075d919060040162001425565b602060405180830381865afa1580156200077b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007a1919062001467565b73ffffffffffffffffffffffffffffffffffffffff168152602001848360048110620007d157620007d1620013f6565b60200201516020015161ffff16815250848281518110620007f657620007f6620013f6565b602002602001018190525080806200080e90620014b6565b9150506200062d565b505050919050565b6000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16906306447d5690602401600060405180830381600087803b158015620008a457600080fd5b505af1158015620008b9573d6000803e3d6000fd5b5050600b5460405173ffffffffffffffffffffffffffffffffffffffff909116925060009150600190620008ed90620012b3565b73ffffffffffffffffffffffffffffffffffffffff938416815292909116602083015215156040820152606001604051809103906000f08015801562000937573d6000803e3d6000fd5b50600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316908117909155600d546040517f526a41e80000000000000000000000000000000000000000000000000000000081526004810192909252600160248301529091169063526a41e890604401600060405180830381600087803b158015620009dc57600080fd5b505af1158015620009f1573d6000803e3d6000fd5b5050600d5473ffffffffffffffffffffffffffffffffffffffff16915063eb9606df905062000a22426001620014f2565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815264ffffffffff90911660048201526024015b600060405180830381600087803b15801562000a7b57600080fd5b505af115801562000a90573d6000803e3d6000fd5b50505050600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562000aff57600080fd5b505af115801562000b14573d6000803e3d6000fd5b50505050565b600180546040517f67b4264500000000000000000000000000000000000000000000000000000000815260009273ffffffffffffffffffffffffffffffffffffffff909216916367b426459162000b75919060040162001425565b602060405180830381865afa15801562000b93573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000bb9919062001467565b60095473ffffffffffffffffffffffffffffffffffffffff90811691161462000bf65762000bf1670de0b6b3a764000060c86200150d565b905090565b62000bf1670de0b6b3a7640000614e206200150d565b60025460405173ffffffffffffffffffffffffffffffffffffffff9091169062000c3690620012c1565b73ffffffffffffffffffffffffffffffffffffffff90911681526060602082018190526008908201527f446567656e4e4654000000000000000000000000000000000000000000000000608082015260a060408201819052600a908201527f476561722d446567656e0000000000000000000000000000000000000000000060c082015260e001604051809103906000f08015801562000cda573d6000803e3d6000fd5b50600e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283161790556000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015262010000909104909116906306447d5690602401600060405180830381600087803b15801562000d8e57600080fd5b505af115801562000da3573d6000803e3d6000fd5b5050600e546040517ffca3b5aa0000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff909116925063fca3b5aa9150602401600060405180830381600087803b15801562000e2757600080fd5b505af115801562000e3c573d6000803e3d6000fd5b5050600b54600e5460405173ffffffffffffffffffffffffffffffffffffffff92831694509116915060009062000e7390620012b3565b73ffffffffffffffffffffffffffffffffffffffff938416815292909116602083015215156040820152606001604051809103906000f08015801562000ebd573d6000803e3d6000fd5b50600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316908117909155600d546040517f526a41e80000000000000000000000000000000000000000000000000000000081526004810192909252600160248301529091169063526a41e890604401600060405180830381600087803b15801562000f6257600080fd5b505af115801562000f77573d6000803e3d6000fd5b5050600e54600c546040517f4610f6ac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015291169250634610f6ac915060240162000a60565b600081600860405162000fe990620012cf565b91825260ff166020820152604001604051809103906000f08015801562001014573d6000803e3d6000fd5b506000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291925062010000900473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b1580156200109c57600080fd5b505af1158015620010b1573d6000803e3d6000fd5b50506008546040517fe8a97a3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528581166024830152909116925063e8a97a3e9150604401600060405180830381600087803b1580156200112b57600080fd5b505af115801562001140573d6000803e3d6000fd5b50505050505050565b60008054610100900460ff16156200116a5750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620012ae5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000008284015282518083038401815260608301909352600092909162001212917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016200158b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526200124c91620015c9565b6000604051808303816000865af19150503d80600081146200128b576040519150601f19603f3d011682016040523d82523d6000602084013e62001290565b606091505b5091505080806020019051810190620012aa9190620015d7565b9150505b919050565b615e9780620015fc83390190565b6126cf806200749383390190565b6106ca8062009b6283390190565b600060208284031215620012f057600080fd5b8135600b81106200130057600080fd5b9392505050565b602080825282518282018190526000919060409081850190868401855b8281101562001365578151805173ffffffffffffffffffffffffffffffffffffffff16855286015161ffff1686850152928401929085019060010162001324565b5091979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff811681146200139557600080fd5b50565b60008060408385031215620013ac57600080fd5b8235620013b98162001372565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60208101600b831062001461577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000602082840312156200147a57600080fd5b8151620013008162001372565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415620014eb57620014eb62001487565b5060010190565b6000821982111562001508576200150862001487565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562001548576200154862001487565b500290565b6000815160005b8181101562001570576020818501810151868301520162001554565b8181111562001580576000828601525b509290920192915050565b7fffffffff00000000000000000000000000000000000000000000000000000000831681526000620015c160048301846200154d565b949350505050565b60006200130082846200154d565b600060208284031215620015ea57600080fd5b815180151581146200130057600080fdfe6101406040523480156200001257600080fd5b5060405162005e9738038062005e97833981016040819052620000359162000198565b60016000556001600160a01b0383166200006257604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038316608081905260408051636f307dc360e01b81529051636f307dc3916004808201926020929091908290030181865afa158015620000ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d39190620001ea565b6001600160a01b031660a0816001600160a01b031681525050826001600160a01b0316634f0e0ef36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200012b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001519190620001ea565b6001600160a01b0390811660c0529190911660e0819052151561010052151561012052506200020f565b80516001600160a01b03811681146200019357600080fd5b919050565b600080600060608486031215620001ae57600080fd5b620001b9846200017b565b9250620001c9602085016200017b565b915060408401518015158114620001df57600080fd5b809150509250925092565b600060208284031215620001fd57600080fd5b62000208826200017b565b9392505050565b60805160a05160c05160e0516101005161012051615a86620004116000396000818161061101528181612fb5015261481f01526000818161031701528181610dde015281816144f901526146e5015260008181610557015281816146a901526147a901526000818161034b0152818161387d015261392d01526000818161047301528181611bfe0152818161274f0152818161280d0152818161366a01526137dd015260008181610665015281816109d801528181610b0301528181610bd501528181610cdd01528181610e6501528181610fe30152818161114e0152818161120e0152818161132e015281816114510152818161162b01528181611708015281816117e0015281816119e501528181611b1201528181611d9501528181611ed5015281816120040152818161216801528181612290015281816123c601528181612568015281816126390152818161266f0152818161293d01528181612a2101528181612a8a01528181612bde01528181612d2601528181612e6801528181612ec2015281816130a10152818161311b015281816131b401528181613341015281816134c10152818161358a0152818161372f01528181613a1a01528181613b2e01528181613dbb015281816142200152818161432801528181614492015281816148e7015281816149e801528181614aae0152614d8f0152615a866000f3fe6080604052600436106102695760003560e01c8063860aefcf11610153578063c7de38a6116100cb578063dfd594651161007f578063eb9606df11610064578063eb9606df1461081e578063f9eaee0d1461083e578063ffd9b9071461085e57600080fd5b8063dfd59465146107de578063e1f21c67146107fe57600080fd5b8063cff0ab96116100b0578063cff0ab96146106ef578063d9ccbec114610783578063dcf65482146107be57600080fd5b8063c7de38a6146106a7578063caa5c23f146106dc57600080fd5b80639c55a05411610122578063b55bb84b11610107578063b55bb84b14610633578063c12c21c014610653578063c690908a1461068757600080fd5b80639c55a054146105df578063b1836d32146105ff57600080fd5b8063860aefcf146104db5780639408b63f146105455780639b67ab30146105795780639be0536a146105bd57600080fd5b80635d91a0e0116101e65780636d19b486116101b55780637071b7c51161019a5780637071b7c51461049557806379c0ef91146104a857806382871ace146104c857600080fd5b80636d19b486146104415780636f307dc31461046157600080fd5b80635d91a0e0146103e85780635f73fbec146103fb578063601d66f61461040e5780636c8f225d1461042e57600080fd5b80633d9287fa1161023d5780635019e20a116102225780635019e20a1461039257806354fd4d50146103b257806359781034146103d557600080fd5b80633d9287fa146103055780634f0e0ef31461033957600080fd5b8062842b571461026e578063256ac915146102905780632a7ba1f7146102c55780632b7c7b11146102e5575b600080fd5b34801561027a57600080fd5b5061028e6102893660046151bf565b61087e565b005b34801561029c57600080fd5b506102b06102ab3660046151f8565b61098e565b60405190151581526020015b60405180910390f35b3480156102d157600080fd5b5061028e6102e0366004615215565b610a61565b3480156102f157600080fd5b5061028e610300366004615215565b610c3b565b34801561031157600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561034557600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102bc565b34801561039e57600080fd5b5061028e6103ad3660046151f8565b610d6a565b3480156103be57600080fd5b506103c7600281565b6040519081526020016102bc565b61028e6103e336600461522e565b61108c565b61028e6103f63660046152bb565b611275565b61028e610409366004615340565b611589565b34801561041a57600080fd5b5061028e6104293660046153d8565b6117de565b61028e61043c36600461541b565b611900565b34801561044d57600080fd5b506102b061045c3660046151f8565b611c31565b34801561046d57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b61028e6104a336600461546e565b611c60565b3480156104b457600080fd5b5061036d6104c3366004615215565b611f3e565b61028e6104d63660046152bb565b611f4b565b3480156104e757600080fd5b5060025461051c906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041682565b604080516fffffffffffffffffffffffffffffffff9384168152929091166020830152016102bc565b34801561055157600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561058557600080fd5b506004546040805167ffffffffffffffff608084901c1681526fffffffffffffffffffffffffffffffff9092166020830152016102bc565b3480156105c957600080fd5b506105d261227d565b6040516102bc91906154e2565b3480156105eb57600080fd5b5061028e6105fa36600461553c565b61228e565b34801561060b57600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561063f57600080fd5b5061028e61064e3660046151f8565b6123c4565b34801561065f57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561069357600080fd5b5061028e6106a23660046151f8565b6124c6565b3480156106b357600080fd5b506106c76106c23660046151f8565b612668565b604080519283526020830191909152016102bc565b61028e6106ea366004615557565b61289b565b3480156106fb57600080fd5b5060015461074e906fffffffffffffffffffffffffffffffff811690700100000000000000000000000000000000810460ff169071010000000000000000000000000000000000900464ffffffffff1683565b604080516fffffffffffffffffffffffffffffffff9094168452911515602084015264ffffffffff16908201526060016102bc565b34801561078f57600080fd5b506102b061079e366004615599565b600360209081526000928352604080842090915290825290205460ff1681565b3480156107ca57600080fd5b5061028e6107d93660046151f8565b612a88565b3480156107ea57600080fd5b506103c76107f93660046151f8565b612b86565b34801561080a57600080fd5b5061028e61081936600461522e565b612c6d565b34801561082a57600080fd5b5061028e6108393660046155c7565b612ec0565b34801561084a57600080fd5b506102b06108593660046151f8565b613057565b34801561086a57600080fd5b5061028e6108793660046155ee565b6131b2565b600260005414156108f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b6002600090815573ffffffffffffffffffffffffffffffffffffffff8316808252600360209081526040808420338086529083529381902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081527f9b3258bc4904fd6426b99843e206c6c7cdb1fd0f040121c25b71dafbb3851ee0910160405180910390a350506001600055565b6040517f055ee9b500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063055ee9b590602401602060405180830381865afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a43919061560b565b73ffffffffffffffffffffffffffffffffffffffff16141592915050565b60026000541415610ace576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610b5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b83919061560b565b9050610b903382846132eb565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906395373018906024015b600060405180830381600087803b158015610c1a57600080fd5b505af1158015610c2e573d6000803e3d6000fd5b5050600160005550505050565b60026000541415610ca8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610d39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5d919061560b565b9050610b90338284613411565b60026000541415610dd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000557f000000000000000000000000000000000000000000000000000000000000000015610e34576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610ec1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee5919061560b565b33600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915290205490915060ff16610f52576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f5d82613583565b5090508015610f98576040517ff713841e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b15801561102757600080fd5b505af115801561103b573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692503391507f93c70cc9715bef0d83edf2095f3595402279d274f402a73ffc17f1bcb19d863d90600090a35050600160005550565b600260005414156110f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611106613875565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063e958b70490602401602060405180830381865afa158015611197573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bb919061560b565b90506111c9848285856139b7565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401600060405180830381600087803b15801561125257600080fd5b505af1158015611266573d6000803e3d6000fd5b50506001600055505050505050565b600260005414156112e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611375573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611399919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166113e8576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806113f483613583565b915091508161142f576040517f1fdd676f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611437613875565b831561144d5761144d85858b8660016000613ae3565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632362a2d88b600185338e8e8e6040518863ffffffff1660e01b81526004016114b59796959493929190615663565b6020604051808303816000875af11580156114d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f891906156bf565b90508873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f7dfecd8419723a9d3954585a30c2a270165d70aafa146c11c1e1b88ae14390648460405161157091815260200190565b60405180910390a4505060016000555050505050505050565b600260005414156115f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ab919061560b565b90506116b5613875565b81156116cb576116cb8383338460016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d89061174a903390600090819083908d908d908d90600401615663565b6020604051808303816000875af1158015611769573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178d91906156bf565b5060405173ffffffffffffffffffffffffffffffffffffffff87169033907f460ad03b1cf79b1d64d3aefa28475f110ab66e84649c52bb41ed796b9b39198190600090a35050600160005550505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611849573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118d1576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff90811670010000000000000000000000000000000002911617600255565b6002600054141561196d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000908155606461198461ffff851687615707565b61198e9190615744565b9050611999816144f7565b6119a2816145e8565b6119ab84614668565b6119b3613875565b6040517f172c48c7000000000000000000000000000000000000000000000000000000008152600060048201819052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a64919061577f565b61ffff169150611a789050816127106157ae565b611a829083615707565b611a8c8288615707565b11611ac3576040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff86811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611b5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b81919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638587604051611bef92919091825261ffff16602082015260400190565b60405180910390a3611c2386827f00000000000000000000000000000000000000000000000000000000000000008a6139b7565b505060016000555050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526006602052604081205415155b92915050565b60026000541415611ccd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611cdb856144f7565b611ce484614668565b611ced856145e8565b600154700100000000000000000000000000000000900460ff1615611d3e576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d46613875565b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff85811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611de0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e04919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638885604051611e7292919091825261ffff16602082015260400190565b60405180910390a38215611e9057611e908484878460006001613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015611f1957600080fd5b505af1158015611f2d573d6000803e3d6000fd5b505060016000555050505050505050565b6000611c5a60058361480f565b60026000541415611fb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa15801561204b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206f919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166120be576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120c661481b565b6120fc576040517f7e52ccb400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061210782612668565b509050612112613875565b82156121285761212884848a8560016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d8906121aa908c90600290879033908f908f908f90600401615663565b6020604051808303816000875af11580156121c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ed91906156bf565b90508773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167ffada13ff2d5e1a1d9da37ad4a4130893b34e3c69c32b17f87ec31fd661b867078460405161226591815260200190565b60405180910390a45050600160005550505050505050565b6060612289600561486b565b905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612381576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561242f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612453919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146124b7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614878565b5050565b60026000541415612533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156125c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e8919061560b565b90506125f4818361489a565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401610c00565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126fc919061560b565b905060008061270b8387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156127a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127c991906156bf565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015291965061271091851690637afb010490604401602060405180830381865afa158015612863573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061288791906156bf565b6128919190615744565b9350505050915091565b60026000541415612908576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129bd919061560b565b90506129c7613875565b8115612a7e576129dc83833384600080613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015612a6557600080fd5b505af1158015612a79573d6000803e3d6000fd5b505050505b5050600160005550565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612af3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b17919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b7b576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614c92565b600080612b9283612668565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152919350600092507f000000000000000000000000000000000000000000000000000000000000000090911690633192195c906024016040805180830381865afa158015612c26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4a91906157c5565b9150819050612c5b61271084615707565b612c659190615744565b949350505050565b60026000541415612cda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063fdd5764590602401602060405180830381865afa158015612d6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d91919061560b565b73ffffffffffffffffffffffffffffffffffffffff161480612dd7575073ffffffffffffffffffffffffffffffffffffffff831660009081526006602052604090205415155b15612e0e576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612eac57600080fd5b505af1158015611c23573d6000803e3d6000fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f4f919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612fb3576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000061300a576040517f50dd11fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805464ffffffffff90921671010000000000000000000000000000000000027fffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffffff909216919091179055565b6040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063f67c5bd090602401602060405180830381865afa1580156130e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061310c91906156bf565b905080158015906131ab5750807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015613184573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a891906156bf565b16155b9392505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561321d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613241919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146132a5576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018054911515700100000000000000000000000000000000027fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff909216919091179055565b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600060448301819052917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561338c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133b091906156bf565b90506133bb816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f98274bf834d179ee08dc0604071b0dc90b54731bd5f725a5a96a39a86bce025a8360405161340391815260200190565b60405180910390a250505050565b61341a816144f7565b600154700100000000000000000000000000000000900460ff161561346b576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600160448301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561350c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061353091906156bf565b905061353b816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f9cac51154cc0d835e2f9c9d1f59a9344588cee107f4203bf58a8c797e3a58c458360405161340391815260200190565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613617919061560b565b90506000806136268387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156136c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136e491906156bf565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529195506000917f00000000000000000000000000000000000000000000000000000000000000001690633192195c906024016040805180830381865afa158015613775573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061379991906157c5565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350600092506127109187169063f9a6503090604401602060405180830381865afa158015613837573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061385b91906156bf565b6138659190615707565b9092109794965093945050505050565b34156139b5577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156138e357600080fd5b505af11580156138f7573d6000803e3d6000fd5b50506040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201523460248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16935063a9059cbb925060440190506020604051808303816000875af115801561398f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139b391906157e9565b505b565b6139c084614cb4565b6040517f830aa74500000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f0000000000000000000000000000000000000000000000000000000000000000169063830aa74590608401600060405180830381600087803b158015613a5e57600080fd5b505af1158015613a72573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fa32435755c235de2976ed44a75a2f85cb01faf0c894f639fe0c32bb9455fea8f83604051613ad591815260200190565b60405180910390a350505050565b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301523060248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b158015613b7257600080fd5b505af1158015613b86573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff871692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a28460005b8181101561441d5736888883818110613bea57613bea615806565b9050602002810190613bfc9190615835565b90506004613c0d6020830183615873565b90501015613c47576040517fe2b0e50600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b30613c5560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16141561421c578415613ca9576040517f5fb9107f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613cb86020830183615873565b613cc1916158d8565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167f59781034000000000000000000000000000000000000000000000000000000001415613e3c5760008080613d1e6020860186615873565b613d2c916004908290615920565b810190613d39919061522e565b925092509250613e34838c73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614613e2b576040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015613e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e26919061560b565b613e2d565b8b5b84846139b7565b505050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2b7c7b11000000000000000000000000000000000000000000000000000000001415613ec757600194506000613e996020840184615873565b613ea7916004908290615920565b810190613eb49190615215565b9050613ec1898983613411565b50614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2a7ba1f7000000000000000000000000000000000000000000000000000000001415613f80578415613f49576040517fc0b0caa800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613f586020840184615873565b613f66916004908290615920565b810190613f739190615215565b9050613ec18989836132eb565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f233a8caa0000000000000000000000000000000000000000000000000000000014156140e457600080613fda6020850185615873565b613fe8916004908290615920565b810190613ff5919061594a565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c8116600483015292945090925082918416906370a0823190602401602060405180830381865afa158015614069573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061408d91906156bf565b10156140dd576040517fa5ac537300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016108e7565b5050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fc690908a00000000000000000000000000000000000000000000000000000000141561416457600061413d6020840184615873565b61414b916004908290615920565b81019061415891906151f8565b9050613ec1888261489a565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f23e27a640000000000000000000000000000000000000000000000000000000014156141e45760006141bd6020840184615873565b6141cb916004908290615920565b8101906141d891906151f8565b9050613ec18882614d42565b6040517f1e9e7e7a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50614414565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff68754361426760208501856151f8565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156142d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142f4919061560b565b73ffffffffffffffffffffffffffffffffffffffff16148061436d575073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001661435560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16145b156143a4576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6144126143b46020830183615873565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506143f69250505060208401846151f8565b73ffffffffffffffffffffffffffffffffffffffff1690614e39565b505b50600101613bcf565b506040517f60c8e8938c9a0c0d88a98d6f1c562ce68077e12bf3edb8047378f2f736cb45b490600090a16040517fe1998cf900000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff86811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b1580156144d657600080fd5b505af11580156144ea573d6000803e3d6000fd5b5050505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006139b3576001546fffffffffffffffffffffffffffffffff9081169081146124c257600454608081901c906fffffffffffffffffffffffffffffffff16600067ffffffffffffffff8316431461456e578461458a565b61458a6fffffffffffffffffffffffffffffffff831686615976565b9050838111156145c6576040517f675f1a5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff81164360801b176004555050505050565b6002546fffffffffffffffffffffffffffffffff16811080614631575060025470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681115b156139b3576040517fce16799400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61467061481b565b156146a7576040517f63fc31c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1615614806577f0000000000000000000000000000000000000000000000000000000000000000801561472657503373ffffffffffffffffffffffffffffffffffffffff821614155b1561475d576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600160248301527f00000000000000000000000000000000000000000000000000000000000000001690639dc29fac90604401600060405180830381600087803b1580156147ed57600080fd5b505af1158015614801573d6000803e3d6000fd5b505050505b6139b381614cb4565b60006131ab8383614e7b565b60007f0000000000000000000000000000000000000000000000000000000000000000801561228957505060015471010000000000000000000000000000000000900464ffffffffff1642101590565b606060006131ab83614ea5565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f01565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561492b57600080fd5b505af115801561493f573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527fdf498aa1c340e992665d6fb4f3be8436d452c45a630cb6d7fab7963da39bac8793500190505b60405180910390a15050565b6040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600091829160019183917f00000000000000000000000000000000000000000000000000000000000000001690638991b2f190602401602060405180830381865afa158015614a2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a5391906156bf565b90505b808211614c895780821615614c7d576040517fe75538c700000000000000000000000000000000000000000000000000000000815260048101839052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e75538c7906024016040805180830381865afa158015614af4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b18919061577f565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529294509092506000918416906370a0823190602401602060405180830381865afa158015614b8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bb191906156bf565b90506001811115614c79576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff8481166024830152600091908b169063f9a6503090604401602060405180830381865afa158015614c33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c5791906156bf565b978801979050614c6b61ffff841682615707565b614c759088615976565b9650505b5050505b600182901b9150614a56565b50509250929050565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f50565b3373ffffffffffffffffffffffffffffffffffffffff821614801590614d0b575033600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16155b156139b3576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b158015614dd357600080fd5b505af1158015614de7573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527f69db9e9764da61b6681b89fb0f5be018506e0342036e56b59c3015a620d60977935001905061498d565b60606131ab83836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250615043565b6000826000018281548110614e9257614e92615806565b9060005260206000200154905092915050565b606081600001805480602002602001604051908101604052809291908181526020018280548015614ef557602002820191906000526020600020905b815481526020019060010190808311614ee1575b50505050509050919050565b6000818152600183016020526040812054614f4857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611c5a565b506000611c5a565b60008181526001830160205260408120548015615039576000614f746001836157ae565b8554909150600090614f88906001906157ae565b9050818114614fed576000866000018281548110614fa857614fa8615806565b9060005260206000200154905080876000018481548110614fcb57614fcb615806565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080614ffe57614ffe61598e565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611c5a565b6000915050611c5a565b6060612c65848460008585843b6150b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108e7565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516150df91906159ed565b60006040518083038185875af1925050503d806000811461511c576040519150601f19603f3d011682016040523d82523d6000602084013e615121565b606091505b509150915061513182828661513c565b979650505050505050565b6060831561514b5750816131ab565b82511561515b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e791906159ff565b73ffffffffffffffffffffffffffffffffffffffff811681146139b357600080fd5b80151581146139b357600080fd5b600080604083850312156151d257600080fd5b82356151dd8161518f565b915060208301356151ed816151b1565b809150509250929050565b60006020828403121561520a57600080fd5b81356131ab8161518f565b60006020828403121561522757600080fd5b5035919050565b60008060006060848603121561524357600080fd5b833561524e8161518f565b9250602084013561525e8161518f565b929592945050506040919091013590565b60008083601f84011261528157600080fd5b50813567ffffffffffffffff81111561529957600080fd5b6020830191508360208260051b85010111156152b457600080fd5b9250929050565b60008060008060008060a087890312156152d457600080fd5b86356152df8161518f565b955060208701356152ef8161518f565b9450604087013593506060870135615306816151b1565b9250608087013567ffffffffffffffff81111561532257600080fd5b61532e89828a0161526f565b979a9699509497509295939492505050565b60008060008060006080868803121561535857600080fd5b85356153638161518f565b945060208601359350604086013561537a816151b1565b9250606086013567ffffffffffffffff81111561539657600080fd5b6153a28882890161526f565b969995985093965092949392505050565b80356fffffffffffffffffffffffffffffffff811681146153d357600080fd5b919050565b600080604083850312156153eb57600080fd5b6153f4836153b3565b9150615402602084016153b3565b90509250929050565b61ffff811681146139b357600080fd5b6000806000806080858703121561543157600080fd5b8435935060208501356154438161518f565b925060408501356154538161540b565b915060608501356154638161540b565b939692955090935050565b60008060008060006080868803121561548657600080fd5b8535945060208601356154988161518f565b9350604086013567ffffffffffffffff8111156154b457600080fd5b6154c08882890161526f565b90945092505060608601356154d48161540b565b809150509295509295909350565b6020808252825182820181905260009190848201906040850190845b8181101561553057835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016154fe565b50909695505050505050565b60006020828403121561554e57600080fd5b6131ab826153b3565b6000806020838503121561556a57600080fd5b823567ffffffffffffffff81111561558157600080fd5b61558d8582860161526f565b90969095509350505050565b600080604083850312156155ac57600080fd5b82356155b78161518f565b915060208301356151ed8161518f565b6000602082840312156155d957600080fd5b813564ffffffffff811681146131ab57600080fd5b60006020828403121561560057600080fd5b81356131ab816151b1565b60006020828403121561561d57600080fd5b81516131ab8161518f565b6003811061565f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b73ffffffffffffffffffffffffffffffffffffffff888116825260e082019061568f602084018a615628565b6040830197909752948616606082015292909416608083015260a082015291151560c09092019190915292915050565b6000602082840312156156d157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561573f5761573f6156d8565b500290565b60008261577a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000806040838503121561579257600080fd5b825161579d8161518f565b60208401519092506151ed8161540b565b6000828210156157c0576157c06156d8565b500390565b600080604083850312156157d857600080fd5b505080516020909101519092909150565b6000602082840312156157fb57600080fd5b81516131ab816151b1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc183360301811261586957600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126158a857600080fd5b83018035915067ffffffffffffffff8211156158c357600080fd5b6020019150368190038213156152b457600080fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156159185780818660040360031b1b83161692505b505092915050565b6000808585111561593057600080fd5b8386111561593d57600080fd5b5050820193919092039150565b6000806040838503121561595d57600080fd5b82356159688161518f565b946020939093013593505050565b60008219821115615989576159896156d8565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60005b838110156159d85781810151838201526020016159c0565b838111156159e7576000848401525b50505050565b600082516158698184602087016159bd565b6020815260008251806020840152615a1e8160408501602087016159bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea2646970667358221220a3f4a705ab580a6ada1e438cd2ee4abc001b62d1d171fce12c41994900fef21664736f6c634300080a003360c06040523480156200001157600080fd5b50604051620026cf380380620026cf833981016040819052620000349162000324565b82828281600090805190602001906200004f92919062000194565b5080516200006590600190602084019062000194565b50506006805460ff19169055506001600160a01b0381166200009a57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000d9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ff9190620003a1565b6001600160a01b03166080816001600160a01b03168152505050826001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000158573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200017e9190620003a1565b6001600160a01b031660a0525062000403915050565b828054620001a290620003c6565b90600052602060002090601f016020900481019282620001c6576000855562000211565b82601f10620001e157805160ff191683800117855562000211565b8280016001018555821562000211579182015b8281111562000211578251825591602001919060010190620001f4565b506200021f92915062000223565b5090565b5b808211156200021f576000815560010162000224565b80516001600160a01b03811681146200025257600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200027f57600080fd5b81516001600160401b03808211156200029c576200029c62000257565b604051601f8301601f19908116603f01168101908282118183101715620002c757620002c762000257565b81604052838152602092508683858801011115620002e457600080fd5b600091505b83821015620003085785820183015181830184015290820190620002e9565b838211156200031a5760008385830101525b9695505050505050565b6000806000606084860312156200033a57600080fd5b62000345846200023a565b60208501519093506001600160401b03808211156200036357600080fd5b62000371878388016200026d565b935060408601519150808211156200038857600080fd5b5062000397868287016200026d565b9150509250925092565b600060208284031215620003b457600080fd5b620003bf826200023a565b9392505050565b600181811c90821680620003db57607f821691505b60208210811415620003fd57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a0516122756200045a6000396000610a9a015260008181610386015281816106db0152818161089101528181610f15015281816110010152818161115b015281816112f401526114f901526122756000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80636352211e116100f9578063a0bcfc7f11610097578063b88d4fde11610071578063b88d4fde146103a8578063c87b56dd146103b6578063e985e9c5146103c9578063fca3b5aa1461041257600080fd5b8063a0bcfc7f14610360578063a22cb46514610373578063a50cf2c81461038157600080fd5b80638456cb59116100d35780638456cb591461032a57806389406ff51461033257806395d89b41146103455780639dc29fac1461034d57600080fd5b80636352211e146102fc5780636c0360eb1461030f57806370a082311461031757600080fd5b80633f4ba83a116101665780634610f6ac116101405780634610f6ac146102b357806354fd4d50146102c6578063576cd2d1146102ce5780635c975abb146102f157600080fd5b80633f4ba83a1461029857806340c10f19146102a057806342842e0e1461028a57600080fd5b8063081812fc116101a2578063081812fc1461024b578063095ea7b31461025e57806318160ddd1461027357806323b872dd1461028a57600080fd5b806301ffc9a7146101c957806306fdde03146101f15780630754617214610206575b600080fd5b6101dc6101d7366004611cc6565b610425565b60405190151581526020015b60405180910390f35b6101f961050a565b6040516101e89190611d38565b6008546102269073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e8565b610226610259366004611d89565b61059c565b61027161026c366004611dc7565b61067b565b005b61027c60075481565b6040519081526020016101e8565b61027161026c366004611df3565b6102716106ad565b6102716102ae366004611dc7565b61079b565b6102716102c1366004611e34565b610863565b61027c600181565b6101dc6102dc366004611e34565b60096020526000908152604090205460ff1681565b60065460ff166101dc565b61022661030a366004611d89565b610cd9565b6101f9610d8b565b61027c610325366004611e34565b610e19565b610271610ee7565b610271610340366004611e34565b610fd3565b6101f9611103565b61027161035b366004611dc7565b611112565b61027161036e366004611e51565b6112c6565b61027161026c366004611ed1565b6102267f000000000000000000000000000000000000000000000000000000000000000081565b61027161026c366004611f39565b6101f96103c4366004611d89565b6113bb565b6101dc6103d7366004612037565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205460ff1690565b610271610420366004611e34565b6114cb565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd0000000000000000000000000000000000000000000000000000000014806104b857507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061050457507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60606000805461051990612065565b80601f016020809104026020016040519081016040528092919081815260200182805461054590612065565b80156105925780601f1061056757610100808354040283529160200191610592565b820191906000526020600020905b81548152906001019060200180831161057557829003601f168201915b5050505050905090565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff16610652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084015b60405180910390fd5b5060009081526004602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b6040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa158015610737573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075b91906120b9565b610791576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107996115f6565b565b60085473ffffffffffffffffffffffffffffffffffffffff1633146107ec576040517f5c2967f500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006107f783610e19565b905060005b82811015610846576000816108278473ffffffffffffffffffffffffffffffffffffffff8816612105565b6108319190612105565b905061083d85826116d7565b506001016107fc565b5081600760008282546108599190612105565b9091555050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156108ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091191906120b9565b610947576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163b610995576040517f9c01f6a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff1663c12c21c06040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610a1c575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610a199181019061211d565b60015b610a52576040517f9c01f6a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f6fbc6f6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192507f000000000000000000000000000000000000000000000000000000000000000090911690636fbc6f6b90602401602060405180830381865afa158015610ae3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0791906120b9565b1580610bad57503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16639408b63f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b94919061211d565b73ffffffffffffffffffffffffffffffffffffffff1614155b80610c5257508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c39919061211d565b73ffffffffffffffffffffffffffffffffffffffff1614155b15610c89576040517f9c01f6a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff16600090815260096020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff1680610504576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e00000000000000000000000000000000000000000000006064820152608401610649565b600a8054610d9890612065565b80601f0160208091040260200160405190810160405280929190818152602001828054610dc490612065565b8015610e115780601f10610de657610100808354040283529160200191610e11565b820191906000526020600020905b815481529060010190602001808311610df457829003601f168201915b505050505081565b600073ffffffffffffffffffffffffffffffffffffffff8216610ebe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152608401610649565b5073ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015610f71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9591906120b9565b610fcb576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610799611899565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561105d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108191906120b9565b6110b7576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff16600090815260096020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b60606001805461051990612065565b3360009081526009602052604090205460ff161580156111dd57506040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156111b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111db91906120b9565b155b15611214576040517f1e0d048500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061121f83610e19565b90508181101561125b576040517f90c9142d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b828110156112b357600060018261128b8573ffffffffffffffffffffffffffffffffffffffff8916612105565b611295919061213a565b61129f919061213a565b90506112aa81611959565b5060010161125e565b508160076000828254610859919061213a565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611350573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137491906120b9565b6113aa576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113b6600a8383611c0f565b505050565b60008181526002602052604090205460609073ffffffffffffffffffffffffffffffffffffffff1661146f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006064820152608401610649565b6000611479611a26565b9050600081511161149957604051806020016040528060008152506114c4565b806114a384611a35565b6040516020016114b4929190612151565b6040516020818303038152906040525b9392505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611555573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157991906120b9565b6115af576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60065460ff16611662576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610649565b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b73ffffffffffffffffffffffffffffffffffffffff8216611754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610649565b60008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff16156117e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610649565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805460019290611816908490612105565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60065460ff1615611906576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610649565b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586116ad3390565b600061196482610cd9565b9050611971600083611b6f565b73ffffffffffffffffffffffffffffffffffffffff811660009081526003602052604081208054600192906119a790849061213a565b909155505060008281526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555183919073ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6060600a805461051990612065565b606081611a7557505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611a9f5780611a8981612180565b9150611a989050600a836121e8565b9150611a79565b60008167ffffffffffffffff811115611aba57611aba611f0a565b6040519080825280601f01601f191660200182016040528015611ae4576020820181803683370190505b5090505b8415611b6757611af960018361213a565b9150611b06600a866121fc565b611b11906030612105565b60f81b818381518110611b2657611b26612210565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611b60600a866121e8565b9450611ae8565b949350505050565b600081815260046020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091558190611bc982610cd9565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b828054611c1b90612065565b90600052602060002090601f016020900481019282611c3d5760008555611ca1565b82601f10611c74578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00823516178555611ca1565b82800160010185558215611ca1579182015b82811115611ca1578235825591602001919060010190611c86565b50611cad929150611cb1565b5090565b5b80821115611cad5760008155600101611cb2565b600060208284031215611cd857600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146114c457600080fd5b60005b83811015611d23578181015183820152602001611d0b565b83811115611d32576000848401525b50505050565b6020815260008251806020840152611d57816040850160208701611d08565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b600060208284031215611d9b57600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff81168114611dc457600080fd5b50565b60008060408385031215611dda57600080fd5b8235611de581611da2565b946020939093013593505050565b600080600060608486031215611e0857600080fd5b8335611e1381611da2565b92506020840135611e2381611da2565b929592945050506040919091013590565b600060208284031215611e4657600080fd5b81356114c481611da2565b60008060208385031215611e6457600080fd5b823567ffffffffffffffff80821115611e7c57600080fd5b818501915085601f830112611e9057600080fd5b813581811115611e9f57600080fd5b866020828501011115611eb157600080fd5b60209290920196919550909350505050565b8015158114611dc457600080fd5b60008060408385031215611ee457600080fd5b8235611eef81611da2565b91506020830135611eff81611ec3565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060008060808587031215611f4f57600080fd5b8435611f5a81611da2565b93506020850135611f6a81611da2565b925060408501359150606085013567ffffffffffffffff80821115611f8e57600080fd5b818701915087601f830112611fa257600080fd5b813581811115611fb457611fb4611f0a565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715611ffa57611ffa611f0a565b816040528281528a602084870101111561201357600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000806040838503121561204a57600080fd5b823561205581611da2565b91506020830135611eff81611da2565b600181811c9082168061207957607f821691505b602082108114156120b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156120cb57600080fd5b81516114c481611ec3565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115612118576121186120d6565b500190565b60006020828403121561212f57600080fd5b81516114c481611da2565b60008282101561214c5761214c6120d6565b500390565b60008351612163818460208801611d08565b835190830190612177818360208801611d08565b01949350505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156121b2576121b26120d6565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826121f7576121f76121b9565b500490565b60008261220b5761220b6121b9565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea2646970667358221220ffdd83a2fc9a158347ca248f021e63fcef3a7985b3deb793f75cd1835b068aab64736f6c634300080a003360a060405234801561001057600080fd5b506040516106ca3803806106ca83398101604081905261002f9161006c565b60009190915560ff166080526001805460506001600160501b031991821681179092556004805490911690911790554260028190556003556100a2565b6000806040838503121561007f57600080fd5b82519150602083015160ff8116811461009757600080fd5b809150509250929050565b60805161060e6100bc600039600060d3015261060e6000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80639a6fc8f511610081578063d62ada111161005b578063d62ada11146102dc578063f7a30806146102f4578063feaf968c1461030757600080fd5b80639a6fc8f5146101cd578063bd18ad531461023a578063cd653afc1461024d57600080fd5b806354fd4d50116100b257806354fd4d501461012d57806367e8d83d1461013c5780637284e4161461018e57600080fd5b8063313ce567146100ce5780633fd0875f1461010c575b600080fd5b6100f57f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020015b60405180910390f35b6004546a0100000000000000000000900460ff166040516101039190610441565b60405160018152602001610103565b61018c61014a366004610482565b600480549115156c01000000000000000000000000027fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff909216919091179055565b005b604080518082018252600c81527f7072696365206f7261636c6500000000000000000000000000000000000000006020820152905161010391906104ab565b6102036101db36600461053d565b60015460005460025460035460045469ffffffffffffffffffff948516941691939590929450565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610103565b61018c610248366004610558565b61030f565b61018c61025b366004610579565b6001805469ffffffffffffffffffff9586167fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090911617905560029290925560035560048054919092167fffffffffffffffffffffffffffffffffffffffff00ff00000000000000000000909116176b020000000000000000000000179055565b6102e461035f565b6040519015158152602001610103565b61018c6103023660046105bf565b600055565b610203610385565b600480548291907fffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff166b01000000000000000000000083600281111561035757610357610412565b021790555050565b600454600090610380906b010000000000000000000000900460ff166103d6565b905090565b60008060008060006004600c9054906101000a900460ff16156103a757600080fd5b505060015460005460025460035460045469ffffffffffffffffffff9485169893975091955093509190911690565b600060028260028111156103ec576103ec610412565b14156103f757600080fd5b600182600281111561040b5761040b610412565b1492915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016006831061047c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561049457600080fd5b813580151581146104a457600080fd5b9392505050565b600060208083528351808285015260005b818110156104d8578581018301518582016040015282016104bc565b818111156104ea576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803569ffffffffffffffffffff8116811461053857600080fd5b919050565b60006020828403121561054f57600080fd5b6104a48261051e565b60006020828403121561056a57600080fd5b8135600381106104a457600080fd5b6000806000806080858703121561058f57600080fd5b6105988561051e565b935060208501359250604085013591506105b46060860161051e565b905092959194509250565b6000602082840312156105d157600080fd5b503591905056fea264697066735822122014874f7a973b86501c4c1a8be32490fe902c8f088ee234d25f9b2497e19f9e5264736f6c634300080a0033a2646970667358221220d8fdaadc825c43ac2783715ebcfe33e7b0ce3a396ac7717d65e4c95e98b6cf7f64736f6c634300080a003360806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d000117905534801561003957600080fd5b50600054604080516318caf8e360e31b815273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660048083019190915260248201929092526044810191909152632aa9a2a960e11b6064820152620100009091046001600160a01b03169063c657c71890608401600060405180830381600087803b1580156100ba57600080fd5b505af11580156100ce573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b81527390f79bf6eb2c4f870365e785982e1f101e93b90660048201526024810191909152600660448201526511949251539160d21b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561014f57600080fd5b505af1158015610163573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b8152733c44cdddb6a900fa2b585dd299e03d12fa4293bc60048201526024810191909152600a6044820152692624a8aaa4a220aa27a960b11b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b1580156101e857600080fd5b505af11580156101fc573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b815273c4375b7de8af5a38a93548eb8453a498222c4ff260048201526024810191909152600c60448201526b44554d425f4144445245535360a01b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561028357600080fd5b505af1158015610297573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b8152739965507d1a55bcc2695c58ba16fb37d819b0a4dc60048201526024810191909152600760448201526620a220a82a22a960c91b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561031957600080fd5b505af115801561032d573d6000803e3d6000fd5b505050506102a6806103406000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063ba414fa61461003b578063fa7626d414610057575b600080fd5b610043610064565b604051901515815260200160405180910390f35b6000546100439060ff1681565b60008054610100900460ff16156100845750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156101bf5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610129917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016101ff565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526101619161023b565b6000604051808303816000865af19150503d806000811461019e576040519150601f19603f3d011682016040523d82523d6000602084013e6101a3565b606091505b50915050808060200190518101906101bb919061024e565b9150505b919050565b6000815160005b818110156101e557602081850181015186830152016101cb565b818111156101f4576000828601525b509290920192915050565b7fffffffff0000000000000000000000000000000000000000000000000000000083168152600061023360048301846101c4565b949350505050565b600061024782846101c4565b9392505050565b60006020828403121561026057600080fd5b8151801515811461024757600080fdfea2646970667358221220293f55a0ef7b60c31a89dbc50e3339c80a8fdb1f9567614b200e97598226671f64736f6c634300080a003360806040523480156200001157600080fd5b506040516201110538038062011105833981016040819052620000349162000811565b6200003f3362000734565b6040516200004d9062000784565b604051809103906000f0801580156200006a573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b039283169081179091556040516310dc138160e31b81529184166004830152906386e09c0890602401600060405180830381600087803b158015620000c457600080fd5b505af1158015620000d9573d6000803e3d6000fd5b50506001546040516301ed651160e41b81526001600160a01b0385811660048301529091169250631ed651109150602401600060405180830381600087803b1580156200012557600080fd5b505af11580156200013a573d6000803e3d6000fd5b505050506040516200014c9062000792565b604051809103906000f08015801562000169573d6000803e3d6000fd5b50600280546001600160a01b0319166001600160a01b039283169081179091556001546040516376aad60560e01b81526004810192909252909116906376aad60590602401600060405180830381600087803b158015620001c957600080fd5b505af1158015620001de573d6000803e3d6000fd5b5050600154604051600093506001600160a01b0390911691506200020290620007a0565b6001600160a01b039091168152602001604051809103906000f0801580156200022f573d6000803e3d6000fd5b5060015460405163338f12b960e21b81526001600160a01b03808416600483015292935091169063ce3c4ae490602401600060405180830381600087803b1580156200027a57600080fd5b505af11580156200028f573d6000803e3d6000fd5b5050600154604051600093506001600160a01b039091169150620002b390620007ae565b6001600160a01b039091168152602001604051809103906000f080158015620002e0573d6000803e3d6000fd5b5060015460405163c5120b3960e01b81526001600160a01b03808416600483015292935091169063c5120b3990602401600060405180830381600087803b1580156200032b57600080fd5b505af115801562000340573d6000803e3d6000fd5b5050600154604051606093506001600160a01b03909116915082906200036690620007bc565b6200037392919062000849565b604051809103906000f08015801562000390573d6000803e3d6000fd5b50600380546001600160a01b0319166001600160a01b0392831690811790915560015460405163530e784f60e01b815260048101929092529091169063530e784f90602401600060405180830381600087803b158015620003f057600080fd5b505af115801562000405573d6000803e3d6000fd5b5050600154604051600093506001600160a01b0390911691506200042990620007ca565b6001600160a01b039091168152602001604051809103906000f08015801562000456573d6000803e3d6000fd5b506001546040516356ee0d3b60e11b81526001600160a01b03808416600483015292935091169063addc1a7690602401600060405180830381600087803b158015620004a157600080fd5b505af1158015620004b6573d6000803e3d6000fd5b5050600154604051600093506001600160a01b039091169150620004da90620007d8565b6001600160a01b039091168152602001604051809103906000f08015801562000507573d6000803e3d6000fd5b506001546040516321da583760e01b81526001600160a01b0380841660048301529293509116906321da583790602401600060405180830381600087803b1580156200055257600080fd5b505af115801562000567573d6000803e3d6000fd5b505050506000306040516200057c90620007e6565b6001600160a01b039091168152602001604051809103906000f080158015620005a9573d6000803e3d6000fd5b50600154604051631795d5b360e31b81526001600160a01b03808416600483015292935091169063bcaead9890602401600060405180830381600087803b158015620005f457600080fd5b505af115801562000609573d6000803e3d6000fd5b505060405163f2fde38b60e01b81523360048201526001600160a01b038416925063f2fde38b9150602401600060405180830381600087803b1580156200064f57600080fd5b505af115801562000664573d6000803e3d6000fd5b505060015460405163f2fde38b60e01b81523360048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b158015620006ae57600080fd5b505af1158015620006c3573d6000803e3d6000fd5b505060025460405163f2fde38b60e01b81523360048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b1580156200070d57600080fd5b505af115801562000722573d6000803e3d6000fd5b505050505050505050505050620008b2565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610fcd80620010dd83390190565b61098c80620020aa83390190565b610f508062002a3683390190565b614da6806200398683390190565b611b45806200872c83390190565b612ced806200a27183390190565b611627806200cf5e83390190565b612b80806200e58583390190565b80516001600160a01b03811681146200080c57600080fd5b919050565b600080604083850312156200082557600080fd5b6200083083620007f4565b91506200084060208401620007f4565b90509250929050565b6001600160a01b0383811682526040602080840182905284518483018190526000938683019290916060870190865b81811015620008a3578551805186168452840151851684840152948301949186019160010162000878565b50909998505050505050505050565b61081b80620008c26000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80638874ff1f1161005b5780638874ff1f146100f55780638da5cb5b14610108578063de28735914610126578063f2fde38b1461014657600080fd5b80632630c12f146100825780632954018c146100cb578063715018a6146100eb575b600080fd5b6003546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6001546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b6100f3610159565b005b6100f3610103366004610658565b6101eb565b60005473ffffffffffffffffffffffffffffffffffffffff166100a2565b6002546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b6100f3610154366004610734565b6103e3565b60005473ffffffffffffffffffffffffffffffffffffffff1633146101df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6101e96000610513565b565b60005473ffffffffffffffffffffffffffffffffffffffff16331461026c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101d6565b60005b815181101561035c57600354825173ffffffffffffffffffffffffffffffffffffffff9091169063e8a97a3e908490849081106102ae576102ae610756565b6020026020010151600001518484815181106102cc576102cc610756565b6020026020010151602001516040518363ffffffff1660e01b815260040161031792919073ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b600060405180830381600087803b15801561033157600080fd5b505af1158015610345573d6000803e3d6000fd5b50505050808061035490610785565b91505061026f565b506002546040517ff2fde38b00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063f2fde38b90602401600060405180830381600087803b1580156103c857600080fd5b505af11580156103dc573d6000803e3d6000fd5b5050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101d6565b73ffffffffffffffffffffffffffffffffffffffff8116610507576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016101d6565b61051081610513565b50565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156105da576105da610588565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561062757610627610588565b604052919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461065357600080fd5b919050565b6000602080838503121561066b57600080fd5b823567ffffffffffffffff8082111561068357600080fd5b818501915085601f83011261069757600080fd5b8135818111156106a9576106a9610588565b6106b7848260051b016105e0565b818152848101925060069190911b8301840190878211156106d757600080fd5b928401925b8184101561072957604084890312156106f55760008081fd5b6106fd6105b7565b6107068561062f565b815261071386860161062f565b81870152835260409390930192918401916106dc565b979650505050505050565b60006020828403121561074657600080fd5b61074f8261062f565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156107de577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea26469706673582212205ee75e57bb635aa49a1758f4ab0b04182a73115bff08f420c56a8ddb433c029364736f6c634300080a0033608060405234801561001057600080fd5b5061001a3361005f565b60405130906f20a2222922a9a9afa82927ab24a222a960811b907fb37614c7d254ea8d16eb81fa11dddaeb266aa8ba4917980859c7740aff30c69190600090a36100af565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610f0f806100be6000396000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c806377532ed9116100e3578063bcaead981161008c578063ce3c4ae411610066578063ce3c4ae414610308578063f2fde38b1461031b578063fca513a81461032e57600080fd5b8063bcaead98146102da578063c5120b39146102ed578063c513c9bb1461030057600080fd5b80639068a868116100bd5780639068a868146102b7578063addc1a76146102bf578063affd9243146102d257600080fd5b806377532ed91461027e57806386e09c08146102865780638da5cb5b1461029957600080fd5b80634c252f9111610145578063699f200f1161011f578063699f200f1461022d578063715018a61461026357806376aad6051461026b57600080fd5b80634c252f91146101fc578063530e784f1461020457806354fd4d501461021757600080fd5b80631ed65110116101765780631ed65110146101cc57806321da5837146101e157806326c74fc3146101f457600080fd5b8063060678c21461019257806308737695146101c4575b600080fd5b61019a610336565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61019a610366565b6101df6101da366004610e10565b610391565b005b6101df6101ef366004610e10565b610444565b61019a6104ef565b61019a61051a565b6101df610212366004610e10565b610545565b61021f600281565b6040519081526020016101bb565b61019a61023b366004610e4d565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6101df6105f0565b6101df610279366004610e10565b61067d565b61019a610728565b6101df610294366004610e10565b610753565b60005473ffffffffffffffffffffffffffffffffffffffff1661019a565b61019a6107fe565b6101df6102cd366004610e10565b610829565b61019a6108d4565b6101df6102e8366004610e10565b6108ff565b6101df6102fb366004610e10565b6109aa565b61019a610a55565b6101df610316366004610e10565b610a80565b6101df610329366004610e10565b610b2b565b61019a610c58565b60006103617f444154415f434f4d50524553534f520000000000000000000000000000000000610c7f565b905090565b60006103617f41434c0000000000000000000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610417576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6104417f54524541535552595f434f4e545241435400000000000000000000000000000082610d1d565b50565b60005473ffffffffffffffffffffffffffffffffffffffff1633146104c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f574554485f47415445574159000000000000000000000000000000000000000082610d1d565b60006103617f54524541535552595f434f4e5452414354000000000000000000000000000000610c7f565b60006103617f574554485f544f4b454e00000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f50524943455f4f5241434c45000000000000000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610671576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b61067b6000610d9b565b565b60005473ffffffffffffffffffffffffffffffffffffffff1633146106fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f41434c000000000000000000000000000000000000000000000000000000000082610d1d565b60006103617f574554485f474154455741590000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146107d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f574554485f544f4b454e0000000000000000000000000000000000000000000082610d1d565b60006103617f4143434f554e545f464143544f52590000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146108aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f4143434f554e545f464143544f5259000000000000000000000000000000000082610d1d565b60006103617f474541525f544f4b454e00000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610980576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f474541525f544f4b454e0000000000000000000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f444154415f434f4d50524553534f52000000000000000000000000000000000082610d1d565b60006103617f434f4e5452414354535f52454749535445520000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610b01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f434f4e5452414354535f5245474953544552000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610bac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b73ffffffffffffffffffffffffffffffffffffffff8116610c4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161040e565b61044181610d9b565b60006103617f50524943455f4f5241434c4500000000000000000000000000000000000000005b6000818152600160209081526040808320548151808301909252600382527f41503100000000000000000000000000000000000000000000000000000000009282019290925273ffffffffffffffffffffffffffffffffffffffff9091169081610d16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040e9190610e66565b5092915050565b60008281526001602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091559051909184917fb37614c7d254ea8d16eb81fa11dddaeb266aa8ba4917980859c7740aff30c6919190a35050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215610e2257600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610e4657600080fd5b9392505050565b600060208284031215610e5f57600080fd5b5035919050565b600060208083528351808285015260005b81811015610e9357858101830151858201604001528201610e77565b81811115610ea5576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea264697066735822122083c228af017c6f5cf8c395cdf7a53276ff56fdd4f4313c39f680ab73bd75417364736f6c634300080a0033608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61090e8061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063732818191161008c578063adce758d11610066578063adce758d14610215578063ba306df114610228578063d4eb5db01461023b578063f2fde38b1461027457600080fd5b806373281819146101b7578063819ad68e146101da5780638da5cb5b146101ed57600080fd5b806354fd4d50116100bd57806354fd4d501461016a5780635f259aba14610180578063715018a6146101af57600080fd5b806335914829146100e45780633a41ec641461011c5780634910832f14610155575b600080fd5b6101076100f236600461089b565b60016020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61010761012a36600461089b565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205460ff1690565b61016861016336600461089b565b610287565b005b610172600181565b604051908152602001610113565b61010761018e36600461089b565b60005473ffffffffffffffffffffffffffffffffffffffff91821691161490565b610168610387565b6101076101c536600461089b565b60026020526000908152604090205460ff1681565b6101686101e836600461089b565b610414565b60005460405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610113565b61016861022336600461089b565b61050c565b61016861023636600461089b565b610601565b61010761024936600461089b565b73ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205460ff1690565b61016861028236600461089b565b6106f6565b60005473ffffffffffffffffffffffffffffffffffffffff16331461030d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909217909155517fae26b1cfe9454ba87274a4e8330b6654684362d0f3d7bbd17f7449a1d38387c69190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610408576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b6104126000610826565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517fd400da6c0c0a894dacc0981730b88af0545d00272ee8fff1437bf560ff245fc49190a250565b60005473ffffffffffffffffffffffffffffffffffffffff16331461058d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f1998397e7203f7baca9d6f41b9e4da6e768daac5caad4234fb9bf5869d2715459190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610682576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526001602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f28b01395b7e25d20552a0c8dc8ecd3b1d4abc986f14dad7885fd45b6fd73c8d99190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811661081a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610304565b61082381610826565b50565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156108ad57600080fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146108d157600080fd5b939250505056fea26469706673582212204712efbfe997070def77285a5b8753bc882b62da2133ce1937ad26cd2b48e49864736f6c634300080a003360a060405234801561001057600080fd5b50604051610f50380380610f5083398101604081905261002f916100d7565b6000805460ff19169055806001600160a01b03811661006157604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa15801561009f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100c391906100d7565b6001600160a01b0316608052506101079050565b6000602082840312156100e957600080fd5b81516001600160a01b038116811461010057600080fd5b9392505050565b608051610e1261013e600039600081816101e2015281816102b20152818161040f0152818161057801526108510152610e126000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80638456cb5911610097578063b4ac686011610066578063b4ac686014610217578063c29277cd1461021f578063d914cd4b14610227578063e26b2f631461023a57600080fd5b80638456cb59146101cd57806394144856146101d5578063a50cf2c8146101dd578063ac4afa381461020457600080fd5b80635b16ebb7116100d35780635b16ebb7146101575780635c975abb1461018a578063673a2a1f146101955780636fbc6f6b146101aa57600080fd5b80631e16e4fc146100fa5780633f4ba83a1461013757806354fd4d5014610141575b600080fd5b61010d610108366004610c97565b61024d565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61013f610284565b005b610149600181565b60405190815260200161012e565b61017a610165366004610cb0565b60026020526000908152604090205460ff1681565b604051901515815260200161012e565b60005460ff1661017a565b61019d610372565b60405161012e9190610ced565b61017a6101b8366004610cb0565b60046020526000908152604090205460ff1681565b61013f6103e1565b61019d6104cd565b61010d7f000000000000000000000000000000000000000000000000000000000000000081565b61010d610212366004610c97565b61053a565b600154610149565b600354610149565b61013f610235366004610cb0565b61054a565b61013f610248366004610cb0565b610823565b6003818154811061025d57600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa15801561030e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103329190610d47565b610368576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610370610af6565b565b606060018054806020026020016040519081016040528092919081815260200182805480156103d757602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116103ac575b5050505050905090565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561046b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048f9190610d47565b6104c5576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610370610bd7565b606060038054806020026020016040519081016040528092919081815260200182805480156103d75760200282019190600052602060002090815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116103ac575050505050905090565b6001818154811061025d57600080fd5b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156105d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f89190610d47565b61062e576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051808201909152600281527f5a30000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff82166106b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b60405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff8116600090815260026020908152604091829020548251808401909352600383527f43523100000000000000000000000000000000000000000000000000000000009183019190915260ff1615610753576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b506001805480820182557fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915560008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909417909355915190917ff816b5143086c89d103a0683286be86c2b741e83ebfa75135aae606e2f5c6e5391a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156108ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d19190610d47565b610907576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051808201909152600281527f5a30000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8216610989576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b5073ffffffffffffffffffffffffffffffffffffffff8116600090815260046020908152604091829020548251808401909352600383527f43523200000000000000000000000000000000000000000000000000000000009183019190915260ff1615610a23576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b506003805460018082019092557fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915560008181526004602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909417909355915190917f58ad3cfc4b6552a53c8c4128ae9b080e14b4378a159280643a62c6f709cee24f91a250565b60005460ff16610b62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016106b0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff1615610c44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016106b0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610bad3390565b600060208284031215610ca957600080fd5b5035919050565b600060208284031215610cc257600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610ce657600080fd5b9392505050565b6020808252825182820181905260009190848201906040850190845b81811015610d3b57835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101610d09565b50909695505050505050565b600060208284031215610d5957600080fd5b81518015158114610ce657600080fd5b600060208083528351808285015260005b81811015610d9657858101830151858201604001528201610d7a565b81811115610da8576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea26469706673582212208f2d91c863db9ab1494a9c5db20e3fddc4b6c779ea3c3621737c105c60d9440a64736f6c634300080a003360e06040523480156200001157600080fd5b5060405162004da638038062004da6833981016040819052620000349162000160565b6001600160a01b0381166200005c57604051635919af9760e11b815260040160405180910390fd5b6001600160a01b03811660808190526040805163c513c9bb60e01b8152905163c513c9bb916004808201926020929091908290030181865afa158015620000a7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cd919062000160565b6001600160a01b031660a0816001600160a01b0316815250506080516001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000127573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200014d919062000160565b6001600160a01b031660c0525062000192565b6000602082840312156200017357600080fd5b81516001600160a01b03811681146200018b57600080fd5b9392505050565b60805160a05160c051614b896200021d6000396000818161018801528181611c4f0152612c5a0152600081816101ed015281816115e201528181611f5f0152818161213f0152818161223f0152818161243801528181612604015281816126bc01528181612788015281816129a501528181613c410152613d000152600061013c0152614b896000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c806354fd4d5011610081578063a80deda31161005b578063a80deda31461020f578063ae093f3f1461022f578063fc9914cb1461024f57600080fd5b806354fd4d50146101bd578063663b8fdb146101d35780637a0c7b21146101e857600080fd5b80632954018c116100b25780632954018c146101375780634b2f336d146101835780634c472fc9146101aa57600080fd5b80630dbd616d146100d957806313d21cdf146101025780631bcd8fc014610122575b600080fd5b6100ec6100e73660046140fc565b610272565b6040516100f9919061430b565b60405180910390f35b61011561011036600461431e565b6114d4565b6040516100f99190614444565b61012a611f59565b6040516100f99190614453565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100f9565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b61015e6101b83660046140fc565b6121f5565b6101c5600281565b6040519081526020016100f9565b6101db612432565b6040516100f991906146ea565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b61022261021d36600461431e565b6126b5565b6040516100f9919061476a565b61024261023d36600461431e565b612a75565b6040516100f991906147dd565b61026261025d3660046140fc565b613bf7565b60405190151581526020016100f9565b61035f604051806102400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160008152602001606081526020016000815260200160008152602001600015158152602001600081526020016000815260200160008152602001600060ff168152602001600081525090565b600080600080600061037088613cf4565b509450945094509450945060008560ff1660011461041d576040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015284169063e958b70490602401602060405180830381865afa1580156103f4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061041891906147f0565b6104ad565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015286169063e958b70490602401602060405180830381865afa158015610489573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ad91906147f0565b60ff8716610200890181905273ffffffffffffffffffffffffffffffffffffffff808b1660208b01528b811660608b015282168952909150600114156109e9578473ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610538573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055c91906147f0565b73ffffffffffffffffffffffffffffffffffffffff90811660808901526040517fc7de38a600000000000000000000000000000000000000000000000000000000815282821660048201529085169063c7de38a690602401602060405180830381865afa1580156105d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f5919061480d565b60c08801526040517fdfd5946500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015285169063dfd5946590602401602060405180830381865afa158015610666573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068a919061480d565b60e08801526040517f3ce0735500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015260006024830152861690633ce0735590604401602060405180830381865afa92505050801561073c575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526107399181019061480d565b60015b6107455761074c565b6101408801525b6040517f3ce0735500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015260016024830152861690633ce0735590604401602060405180830381865afa9250505080156107f9575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526107f69181019061480d565b60015b61080257610809565b6101608801525b60c08701516040517f996329f800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526024820192909252600060448201529086169063996329f89060640160a060405180830381865afa9250505080156108c4575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526108c191810190614826565b60015b6108cd576108da565b505015156101808a015250505b8073ffffffffffffffffffffffffffffffffffffffff16631afbb7a46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610925573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610949919061480d565b6101a08801526040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152851690633192195c90602401602060405180830381865afa1580156109bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109df919061480d565b60a0880152610c26565b8273ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5891906147f0565b73ffffffffffffffffffffffffffffffffffffffff90811660808901526040517fc7de38a600000000000000000000000000000000000000000000000000000000815282821660048201529083169063c7de38a6906024016040805180830381865afa158015610acc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af09190614866565b5060c08801526040517fdfd5946500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015283169063dfd5946590602401602060405180830381865afa158015610b62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b86919061480d565b60e08801526040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152841690633192195c906024016040805180830381865afa158015610bf6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1a9190614866565b60a08901526101a08801525b60008660ff16600114610ca7578373ffffffffffffffffffffffffffffffffffffffff166316f0115b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca291906147f0565b610d16565b8573ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1691906147f0565b90508073ffffffffffffffffffffffffffffffffffffffff166345d31f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d87919061480d565b6101008901526000600160ff891614610e0e578473ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610de5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e09919061480d565b610e7d565b8573ffffffffffffffffffffffffffffffffffffffff166320a05ff76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7d919061480d565b90508760ff16600114610f1f576040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152861690638991b2f190602401602060405180830381865afa158015610ef6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1a919061480d565b610faf565b6040517fb451cecc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015287169063b451cecc90602401602060405180830381865afa158015610f8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610faf919061480d565b6102208a01528067ffffffffffffffff811115610fce57610fce61488a565b60405190808252806020026020018201604052801561103e57816020015b6040805160808101825260008082526020808301829052928201819052606082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181610fec5790505b506101208a015260005b818110156113d657604080516080810182526000808252602082018190529181018290526060810191909152600180831b9060ff8c1614156111c5576040517faf0a650200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018590528a169063af0a650290604401608060405180830381865afa1580156110f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111b91906148b9565b5050602084015273ffffffffffffffffffffffffffffffffffffffff9081168084526040517ff9eaee0d0000000000000000000000000000000000000000000000000000000081526004810191909152908a169063f9eaee0d90602401602060405180830381865afa158015611195573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b9919061490d565b15156040830152611388565b6040517f172c48c70000000000000000000000000000000000000000000000000000000081526004810184905273ffffffffffffffffffffffffffffffffffffffff89169063172c48c7906024016040805180830381865afa15801561122f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112539190614928565b5073ffffffffffffffffffffffffffffffffffffffff9081168084526040517f70a082310000000000000000000000000000000000000000000000000000000081529188166004830152906370a0823190602401602060405180830381865afa1580156112c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e8919061480d565b602083015281516040517ff9eaee0d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529088169063f9eaee0d90602401602060405180830381865afa15801561135c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611380919061490d565b151560408301525b6102208c015181161561139c57600161139f565b60005b151560608301526101208c01518051839190859081106113c1576113c161495e565b60209081029190910101525050600101611048565b508273ffffffffffffffffffffffffffffffffffffffff166317d11a156040518163ffffffff1660e01b8152600401602060405180830381865afa158015611422573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611446919061480d565b896101c00181815250508273ffffffffffffffffffffffffffffffffffffffff16633dc54b406040518163ffffffff1660e01b8152600401602060405180830381865afa15801561149b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bf919061480d565b6101e08a015250969998505050505050505050565b61159b604051806102000160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600060ff1681525090565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015283917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa15801561162b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164f919061490d565b611685576040517fd384b23800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316808352604080517ffe14112d000000000000000000000000000000000000000000000000000000008152905185929163fe14112d9160048083019260209291908290030181865afa1580156116f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611719919061480d565b8360c00181815250508073ffffffffffffffffffffffffffffffffffffffff1663ef8d96036040518163ffffffff1660e01b8152600401602060405180830381865afa15801561176d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611791919061480d565b8360e00181815250508073ffffffffffffffffffffffffffffffffffffffff1663743753596040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611809919061480d565b8360a00181815250508073ffffffffffffffffffffffffffffffffffffffff16634c19386c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561185d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611881919061480d565b836101000181815250508073ffffffffffffffffffffffffffffffffffffffff1663788c6bfe6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fa919061480d565b836101600181815250508073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561194f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611973919061480d565b8360800181815250508073ffffffffffffffffffffffffffffffffffffffff166345d31f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119eb919061480d565b836101400181815250508073ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6491906147f0565b836040019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff166336dda7d56040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0a91906147f0565b836060019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663788c6bfe6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb0919061480d565b836101600181815250508073ffffffffffffffffffffffffffffffffffffffff1663e941fa786040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c29919061480d565b61018084015260408084015173ffffffffffffffffffffffffffffffffffffffff9081167f000000000000000000000000000000000000000000000000000000000000000082161460208087019190915282517f609ae31700000000000000000000000000000000000000000000000000000000815292519184169263609ae31792600480830193928290030181865afa158015611ccb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cef919061480d565b836101c00181815250508073ffffffffffffffffffffffffffffffffffffffff1663dbcb313b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d68919061480d565b836101a00181815250506000836060015173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de7919061480d565b6040517f5427c9380000000000000000000000000000000000000000000000000000000081526004810182905290915060009073ffffffffffffffffffffffffffffffffffffffff841690635427c93890602401602060405180830381865afa158015611e58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7c919061480d565b90508015611ec7576101808501518190611eb890611e9c906127106149bc565b876101000151886101400151611eb291906149d3565b90613fd0565b611ec29190614a3f565b611ece565b8461014001515b856101200181815250508273ffffffffffffffffffffffffffffffffffffffff166354fd4d506040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f47919061480d565b60ff166101e086015250505050919050565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b4ac68606040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fec919061480d565b90508067ffffffffffffffff8111156120075761200761488a565b6040519080825280602002602001820160405280156120ff57816020015b6120ec604051806102000160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600060ff1681525090565b8152602001906001900390816120255790505b50915060005b818110156121f0576040517fac4afa38000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ac4afa3890602401602060405180830381865afa15801561219b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121bf91906147f0565b90506121ca816114d4565b8483815181106121dc576121dc61495e565b602090810291909101015250600101612105565b505090565b6040517f6fbc6f6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015260009184917f00000000000000000000000000000000000000000000000000000000000000001690636fbc6f6b90602401602060405180830381865afa158015612286573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122aa919061490d565b6122e0576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060006122ee87613cf4565b5050935093505092508260ff16600114612397576040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015282169063fdd5764590602401602060405180830381865afa15801561236e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061239291906147f0565b612427565b6040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015283169063fdd5764590602401602060405180830381865afa158015612403573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061242791906147f0565b979650505050505050565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c29277cd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124c5919061480d565b90508067ffffffffffffffff8111156124e0576124e061488a565b6040519080825280602002602001820160405280156125c457816020015b60408051610260810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083018290526101208301819052610140830181905261016083015261018082018190526101a082018190526101c082018190526101e082018190526102008201819052610220820181905261024082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816124fe5790505b50915060005b818110156121f0576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa158015612660573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061268491906147f0565b905061268f81612a75565b8483815181106126a1576126a161495e565b6020908102919091010152506001016125ca565b60606000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c29277cd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612725573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612749919061480d565b905060005b81811015612829576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa1580156127e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061280891906147f0565b90506128148187613bf7565b15612820578360010193505b5060010161274e565b508167ffffffffffffffff8111156128435761284361488a565b60405190808252806020026020018201604052801561296157816020015b61294e604051806102400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160008152602001606081526020016000815260200160008152602001600015158152602001600081526020016000815260200160008152602001600060ff168152602001600081525090565b8152602001906001900390816128615790505b5092506000915060005b81811015612a6d576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa158015612a01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a2591906147f0565b9050612a318187613bf7565b15612a6457612a408187610272565b858581518110612a5257612a5261495e565b60209081029190910101526001909301925b5060010161296b565b505050919050565b604080516102608101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082018390526101208201819052610140820181905261016082015261018081018290526101a081018290526101c081018290526101e08101829052610200810182905261022081018290526102408101829052908080808080612b1b88613cf4565b73ffffffffffffffffffffffffffffffffffffffff8e168d5260ff86166101808e01819052959b50939950919750955093509150600114612bca578273ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ba1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bc591906147f0565b612c39565b8473ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c3991906147f0565b73ffffffffffffffffffffffffffffffffffffffff908116602089018190527f00000000000000000000000000000000000000000000000000000000000000009091161460408801526000600160ff881614612d03578373ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cfe91906147f0565b612d72565b8573ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d7291906147f0565b6040517f2e97ca2100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b8116600483015291925090821690632e97ca2190602401602060405180830381865afa158015612de2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e06919061490d565b15156060890152604080517f45d31f9d000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff8316916345d31f9d9160048083019260209291908290030181865afa158015612e78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e9c919061480d565b8860800181815250508073ffffffffffffffffffffffffffffffffffffffff1663743753596040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ef0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f14919061480d565b610100890152600160ff88161415613017578573ffffffffffffffffffffffffffffffffffffffff16639b2cb5d86040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f95919061480d565b8860a00181815250508573ffffffffffffffffffffffffffffffffffffffff16635f48f3936040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fe9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061300d919061480d565b60c08901526130a5565b8273ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa158015613061573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130859190614a73565b6fffffffffffffffffffffffffffffffff90811660c08b01521660a08901525b60008760ff16600114613126578473ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613121919061480d565b613195565b8573ffffffffffffffffffffffffffffffffffffffff166320a05ff76040518163ffffffff1660e01b8152600401602060405180830381865afa158015613171573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613195919061480d565b90508067ffffffffffffffff8111156131b0576131b061488a565b6040519080825280602002602001820160405280156131d9578160200160208202803683370190505b506101208a01528067ffffffffffffffff8111156131f9576131f961488a565b604051908082528060200260200182016040528015613222578160200160208202803683370190505b506101608a015260005b818110156134c4578860ff16600114156133b4576040517f5e5f2e260000000000000000000000000000000000000000000000000000000081526004810182905260009073ffffffffffffffffffffffffffffffffffffffff891690635e5f2e2690602401602060405180830381865afa1580156132ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132d291906147f0565b9050808b610120015183815181106132ec576132ec61495e565b73ffffffffffffffffffffffffffffffffffffffff92831660209182029290920101526040517f78327438000000000000000000000000000000000000000000000000000000008152828216600482015290891690637832743890602401602060405180830381865afa158015613367573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061338b919061480d565b8b610160015183815181106133a2576133a261495e565b602002602001018181525050506134bc565b6040517f172c48c70000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff87169063172c48c7906024016040805180830381865afa15801561341e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134429190614928565b8061ffff1690508b610120015183815181106134605761346061495e565b602002602001018c6101600151848151811061347e5761347e61495e565b60200260200101828152508273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525050505b60010161322c565b5060008860ff16600114613546578373ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561351d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613541919061480d565b6135b5565b8673ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613591573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135b5919061480d565b90508067ffffffffffffffff8111156135d0576135d061488a565b60405190808252806020026020018201604052801561361557816020015b60408051808201909152600080825260208201528152602001906001900390816135ee5790505b506101408b015260005b818110156139015760408051808201909152600080825260208201528a60ff166001146136da576040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff871690635094cb4f90602401602060405180830381865afa1580156136b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136d591906147f0565b613769565b6040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff8a1690635094cb4f90602401602060405180830381865afa158015613745573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061376991906147f0565b73ffffffffffffffffffffffffffffffffffffffff168152600160ff8c16146138245780516040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529089169063fdd5764590602401602060405180830381865afa1580156137fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061381f91906147f0565b6138b7565b80516040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152908a169063fdd5764590602401602060405180830381865afa158015613893573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138b791906147f0565b73ffffffffffffffffffffffffffffffffffffffff1660208201526101408c01518051829190849081106138ed576138ed61495e565b60209081029190910101525060010161361f565b508860ff166001141561398f578773ffffffffffffffffffffffffffffffffffffffff1663b2c53a6c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613959573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061397d919061480d565b60e08b015260ff6102408b0152613be9565b73ffffffffffffffffffffffffffffffffffffffff85166101a08b01819052604080517f9408b63f0000000000000000000000000000000000000000000000000000000081529051639408b63f916004808201926020929091908290030181865afa158015613a02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a2691906147f0565b8a6101e0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508473ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015613aa9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613acd9190614aa6565b5015156102008c015250604080517f9fd12b77000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff881691639fd12b779160048083019260209291908290030181865afa158015613b42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b66919061480d565b8a6102200181815250508573ffffffffffffffffffffffffffffffffffffffff16638345f26e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bdf9190614af7565b60ff166102408b01525b505050505050505050919050565b6040517f6fbc6f6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015260009184917f00000000000000000000000000000000000000000000000000000000000000001690636fbc6f6b90602401602060405180830381865afa158015613c88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cac919061490d565b613ce2576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613cec8484614023565b949350505050565b600080600080600080867f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636fbc6f6b826040518263ffffffff1660e01b8152600401613d73919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa158015613d90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613db4919061490d565b613dea576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8773ffffffffffffffffffffffffffffffffffffffff166354fd4d506040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e59919061480d565b96508660ff1660011415613ee0578795508573ffffffffffffffffffffffffffffffffffffffff1663f93f515b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613eb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ed991906147f0565b9450613fc6565b8793508373ffffffffffffffffffffffffffffffffffffffff16632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f5291906147f0565b92508373ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fc391906147f0565b91505b5091939550919395565b6000821580613fdd575081155b15613fea5750600061401d565b612710613ff8600282614b1a565b61ffff1661400684866149d3565b6140109190614b3b565b61401a9190614a3f565b90505b92915050565b6040517f055ee9b500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600091829185169063055ee9b590602401602060405180830381865afa158015614094573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140b891906147f0565b73ffffffffffffffffffffffffffffffffffffffff1614159392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146140f957600080fd5b50565b6000806040838503121561410f57600080fd5b823561411a816140d7565b9150602083013561412a816140d7565b809150509250929050565b600081518084526020808501945080840160005b8381101561419f578151805173ffffffffffffffffffffffffffffffffffffffff168852838101518489015260408082015115159089015260609081015115159088015260809096019590820190600101614149565b509495945050505050565b805173ffffffffffffffffffffffffffffffffffffffff168252600061024060208301516141f0602086018273ffffffffffffffffffffffffffffffffffffffff169052565b506040830151614204604086018215159052565b50606083015161422c606086018273ffffffffffffffffffffffffffffffffffffffff169052565b506080830151614254608086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060a083015160a085015260c083015160c085015260e083015160e085015261010080840151818601525061012080840151828287015261429783870182614135565b92505050610140808401518186015250610160808401518186015250610180808401516142c78287018215159052565b50506101a083810151908501526101c080840151908501526101e080840151908501526102008084015160ff16908501526102209283015192909301919091525090565b60208152600061401a60208301846141aa565b60006020828403121561433057600080fd5b813561433b816140d7565b9392505050565b805173ffffffffffffffffffffffffffffffffffffffff168252602081015161436f602084018215159052565b506040810151614397604084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060608101516143bf606084018273ffffffffffffffffffffffffffffffffffffffff169052565b506080818101519083015260a0808201519083015260c0808201519083015260e08082015190830152610100808201519083015261012080820151908301526101408082015190830152610160808201519083015261018080820151908301526101a080820151908301526101c080820151908301526101e09081015160ff16910152565b610200810161401d8284614342565b6020808252825182820181905260009190848201906040850190845b8181101561449657614482838551614342565b92840192610200929092019160010161446f565b50909695505050505050565b600081518084526020808501945080840160005b8381101561419f57815173ffffffffffffffffffffffffffffffffffffffff16875295820195908201906001016144b6565b600081518084526020808501945080840160005b8381101561419f578151805173ffffffffffffffffffffffffffffffffffffffff9081168952908401511683880152604090960195908201906001016144fc565b600081518084526020808501945080840160005b8381101561419f57815187529582019590820190600101614551565b805173ffffffffffffffffffffffffffffffffffffffff168252600061026060208301516145b3602086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060408301516145c7604086018215159052565b5060608301516145db606086018215159052565b506080830151608085015260a083015160a085015260c083015160c085015260e083015160e0850152610100808401518186015250610120808401518282870152614628838701826144a2565b92505050610140808401518583038287015261464483826144e8565b925050506101608084015185830382870152614660838261453d565b92505050610180808401516146798287018260ff169052565b50506101a08381015173ffffffffffffffffffffffffffffffffffffffff908116918601919091526101c0808501511515908601526101e080850151909116908501526102008084015115159085015261022080840151908501526102409283015160ff1692909301919091525090565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561475d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc088860301845261474b85835161456d565b94509285019290850190600101614711565b5092979650505050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561475d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08886030184526147cb8583516141aa565b94509285019290850190600101614791565b60208152600061401a602083018461456d565b60006020828403121561480257600080fd5b815161433b816140d7565b60006020828403121561481f57600080fd5b5051919050565b600080600080600060a0868803121561483e57600080fd5b5050835160208501516040860151606087015160809097015192989197509594509092509050565b6000806040838503121561487957600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080600080608085870312156148cf57600080fd5b84516148da816140d7565b60208601516040870151606090970151919890975090945092505050565b8051801515811461490857600080fd5b919050565b60006020828403121561491f57600080fd5b61401a826148f8565b6000806040838503121561493b57600080fd5b8251614946816140d7565b602084015190925061ffff8116811461412a57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156149ce576149ce61498d565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614a0b57614a0b61498d565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614a4e57614a4e614a10565b500490565b80516fffffffffffffffffffffffffffffffff8116811461490857600080fd5b60008060408385031215614a8657600080fd5b614a8f83614a53565b9150614a9d60208401614a53565b90509250929050565b600080600060608486031215614abb57600080fd5b614ac484614a53565b9250614ad2602085016148f8565b9150604084015164ffffffffff81168114614aec57600080fd5b809150509250925092565b600060208284031215614b0957600080fd5b815160ff8116811461433b57600080fd5b600061ffff80841680614b2f57614b2f614a10565b92169190910492915050565b60008219821115614b4e57614b4e61498d565b50019056fea2646970667358221220d15108d0bec9cc6f3903875dd8412869a3da1b36661bdc780e2e2f0ae3136d2464736f6c634300080a003360a06040523480156200001157600080fd5b5060405162001b4538038062001b45833981016040819052620000349162000608565b6000805460ff19169055816001600160a01b0381166200006757604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cc91906200070a565b6001600160a01b031660805250805160005b818110156200014257620001398382815181106200010057620001006200072f565b6020026020010151600001518483815181106200012157620001216200072f565b6020026020010151602001516200014c60201b60201c565b600101620000de565b5050505062000822565b6001600160a01b03821615806200016a57506001600160a01b038116155b156200018957604051635919af9760e11b815260040160405180910390fd5b620001a8826001600160a01b0316620004ba60201b620006751760201c565b620001d65760405163df4c572d60e01b81526001600160a01b03831660048201526024015b60405180910390fd5b620001f5816001600160a01b0316620004ba60201b620006751760201c565b6200021f5760405163df4c572d60e01b81526001600160a01b0382166004820152602401620001cd565b806001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200027c575060408051601f3d908101601f19168201909252620002799181019062000745565b60015b6200029a576040516367a7cd4360e01b815260040160405180910390fd5b8060ff16600814620002bf576040516367a7cd4360e01b815260040160405180910390fd5b506000816001600160a01b031663d62ada116040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200031f575060408051601f3d908101601f191682019092526200031c918101906200076a565b60015b6200032a576200032d565b90505b6000836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200038c575060408051601f3d908101601f19168201909252620003899181019062000745565b60015b620003aa5760405163528ca31d60e01b815260040160405180910390fd5b60128160ff161115620003d05760405163528ca31d60e01b815260040160405180910390fd5b9050826001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa9250505080156200042f575060408051601f3d908101601f191682019092526200042c91810190620007a6565b60015b6200044d576040516367a7cd4360e01b815260040160405180910390fd5b8662000461576200046185858484620004c0565b5050505050620004748484848462000526565b826001600160a01b0316846001600160a01b03167fe263805b03657ab13064915d0723c5ce14981547e7cba5283f66b9e5d81f6e6e60405160405180910390a350505050565b3b151590565b60008313620004e2576040516356e05d2b60e01b815260040160405180910390fd5b836001600160501b0316816001600160501b0316108062000501575081155b15620005205760405163b1cf675560e01b815260040160405180910390fd5b50505050565b6001600160a01b03831682156200053e57600160a11b175b6200055460ff60a21b60a284901b1682620007fb565b6001600160a01b0390951660009081526001602052604090209490945550505050565b80516001600160a01b03811681146200058f57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715620005cf57620005cf62000594565b60405290565b604051601f8201601f191681016001600160401b038111828210171562000600576200060062000594565b604052919050565b60008060408084860312156200061d57600080fd5b620006288462000577565b602085810151919450906001600160401b03808211156200064857600080fd5b818701915087601f8301126200065d57600080fd5b81518181111562000672576200067262000594565b62000682848260051b01620005d5565b818152848101925060069190911b830184019089821115620006a357600080fd5b928401925b81841015620006fa5785848b031215620006c25760008081fd5b620006cc620005aa565b620006d78562000577565b8152620006e686860162000577565b8187015283529285019291840191620006a8565b8096505050505050509250929050565b6000602082840312156200071d57600080fd5b620007288262000577565b9392505050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156200075857600080fd5b815160ff811681146200072857600080fd5b6000602082840312156200077d57600080fd5b815180151581146200072857600080fd5b80516001600160501b03811681146200058f57600080fd5b600080600080600060a08688031215620007bf57600080fd5b620007ca866200078e565b9450602086015193506040860151925060608601519150620007ef608087016200078e565b90509295509295909350565b600082198211156200081d57634e487b7160e01b600052601160045260246000fd5b500190565b6080516112f262000853600039600081816101b201528181610280015281816103e201526104ff01526112f26000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c80638456cb591161008c578063b66102df11610066578063b66102df146101d4578063e8a97a3e146101e7578063f190e5fa146101fa578063f9a650301461023f57600080fd5b80638456cb591461016d5780639dcb511a14610175578063a50cf2c8146101ad57600080fd5b80635c975abb116100bd5780635c975abb1461011c5780635cecbd0e146101325780637afb01041461015a57600080fd5b80633f4ba83a146100e457806341976e09146100ee57806354fd4d5014610114575b600080fd5b6100ec610252565b005b6101016100fc366004610f28565b610340565b6040519081526020015b60405180910390f35b610101600281565b60005460ff16604051901515815260200161010b565b610145610140366004610f4a565b610352565b6040805192835260208301919091520161010b565b610101610168366004610f90565b610376565b6100ec6103b4565b610188610183366004610f28565b6104a0565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010b565b6101887f000000000000000000000000000000000000000000000000000000000000000081565b6101016101e2366004610fbc565b6104b4565b6100ec6101f5366004610ff8565b6104d1565b61020d610208366004610f28565b6105c3565b6040805173ffffffffffffffffffffffffffffffffffffffff909416845291151560208401529082015260600161010b565b61010161024d366004610f90565b61064d565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156102dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103009190611022565b610336576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033e61067b565b565b600061034b82610761565b5092915050565b60008061035f868661064d565b915061036b848461064d565b905094509492505050565b600080600061038484610761565b90925090508161039582600a611193565b61039f908761119f565b6103a991906111dc565b925050505b92915050565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561043e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104629190611022565b610498576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033e610819565b60006104ab826105c3565b50909392505050565b60006104c96104c3858561064d565b83610376565b949350505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561055b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057f9190611022565b6105b5576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105bf82826108d9565b5050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600160205260408120548190819080610624576040517f4bb8ad8200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b947402000000000000000000000000000000000000000086161515945060a286901c9350915050565b600080600061065b84610761565b909250905061066b81600a611193565b61039f838761119f565b3b151590565b60005460ff166106ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b600080600080610770856105c3565b8095508193508294505050506000806000808573ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156107cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f19190611231565b9450945050935093508461080b5761080b84848484610dd9565b829750505050505050915091565b60005460ff1615610886576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016106e3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586107373390565b73ffffffffffffffffffffffffffffffffffffffff82161580610910575073ffffffffffffffffffffffffffffffffffffffff8116155b15610947576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82163b6109ad576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016106e3565b73ffffffffffffffffffffffffffffffffffffffff81163b610a13576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024016106e3565b8073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610a98575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610a9591810190611281565b60015b610ace576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060ff16600814610b0b576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060008173ffffffffffffffffffffffffffffffffffffffff1663d62ada116040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610b93575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610b9091810190611022565b60015b610b9c57610b9f565b90505b60008373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610c26575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610c2391810190611281565b60015b610c5c576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60128160ff161115610c9a576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b90508273ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa925050508015610d21575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610d1e91810190611231565b60015b610d57576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b86610d6857610d6885858484610dd9565b5050505050610d7984848484610e74565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fe263805b03657ab13064915d0723c5ce14981547e7cba5283f66b9e5d81f6e6e60405160405180910390a350505050565b60008313610e13576040517f56e05d2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8369ffffffffffffffffffff168169ffffffffffffffffffff161080610e37575081155b15610e6e576040517fb1cf675500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b73ffffffffffffffffffffffffffffffffffffffff83168215610ea95774020000000000000000000000000000000000000000175b610ecf7503fc000000000000000000000000000000000000000060a284901b16826112a4565b73ffffffffffffffffffffffffffffffffffffffff90951660009081526001602052604090209490945550505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610f2357600080fd5b919050565b600060208284031215610f3a57600080fd5b610f4382610eff565b9392505050565b60008060008060808587031215610f6057600080fd5b84359350610f7060208601610eff565b925060408501359150610f8560608601610eff565b905092959194509250565b60008060408385031215610fa357600080fd5b82359150610fb360208401610eff565b90509250929050565b600080600060608486031215610fd157600080fd5b83359250610fe160208501610eff565b9150610fef60408501610eff565b90509250925092565b6000806040838503121561100b57600080fd5b61101483610eff565b9150610fb360208401610eff565b60006020828403121561103457600080fd5b81518015158114610f4357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b808511156110cc57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156110b2576110b2611044565b808516156110bf57918102915b93841c9390800290611078565b509250929050565b6000826110e3575060016103ae565b816110f0575060006103ae565b816001811461110657600281146111105761112c565b60019150506103ae565b60ff84111561112157611121611044565b50506001821b6103ae565b5060208310610133831016604e8410600b841016171561114f575081810a6103ae565b6111598383611073565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561118b5761118b611044565b029392505050565b6000610f4383836110d4565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156111d7576111d7611044565b500290565b600082611212577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b805169ffffffffffffffffffff81168114610f2357600080fd5b600080600080600060a0868803121561124957600080fd5b61125286611217565b945060208601519350604086015192506060860151915061127560808701611217565b90509295509295909350565b60006020828403121561129357600080fd5b815160ff81168114610f4357600080fd5b600082198211156112b7576112b7611044565b50019056fea2646970667358221220e7485a2cb5750973f539ca59d2211008b42bb92b6c49605a53f5d9c88c330fb164736f6c634300080a003360e06040523480156200001157600080fd5b5060405162002ced38038062002ced8339810160408190526200003491620004bb565b6000805460ff19169055806001600160a01b0381166200006757604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cc9190620004bb565b6001600160a01b039081166080526001805560408051808201909152600281526105a360f41b602082015291508216620001245760405162461bcd60e51b81526004016200011b9190620004ed565b60405180910390fd5b50806001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000164573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200018a9190620004bb565b6001600160a01b031660c052604051620001a490620004ad565b604051809103906000f080158015620001c1573d6000803e3d6000fd5b506001600160a01b031660a08190526040805163204a7f0760e21b81529051638129fc1c9160048082019260009290919082900301818387803b1580156200020857600080fd5b505af11580156200021d573d6000803e3d6000fd5b50505050620002316200028a60201b60201c565b50600454600380546001600160a01b039092166001600160a01b03199283161790556000805260026020527fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b8054909116905562000545565b6000620002a460a0516200038c60201b6200119b1760201c565b9050806001600160a01b0316638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620002e257600080fd5b505af1158015620002f7573d6000803e3d6000fd5b5050600480546001600160a01b03908116600090815260026020908152604090912080546001600160a01b03199081169388169384179091558354169091179091556200035492506005915083906200043b811b6200127d17901c565b506040516001600160a01b038216907f9f69b6c10f6810213e055b0ba6bc0a4e2603f73c221aad77ea35da819cda7dc390600090a250565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260601b60148201526e5af43d82803e903d91602b57fd5bf360881b60288201526037816000f09150506001600160a01b038116620004365760405162461bcd60e51b815260206004820152601660248201527f455243313136373a20637265617465206661696c65640000000000000000000060448201526064016200011b565b919050565b600062000452836001600160a01b0384166200045b565b90505b92915050565b6000818152600183016020526040812054620004a45750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000455565b50600062000455565b610e788062001e7583390190565b600060208284031215620004ce57600080fd5b81516001600160a01b0381168114620004e657600080fd5b9392505050565b600060208083528351808285015260005b818110156200051c57858101830151858201604001528201620004fe565b818111156200052f576000604083870101525b50601f01601f1916929092016040019392505050565b60805160a05160c0516118cf620005a66000396000818161026a015281816103680152610b7001526000818161020201526110650152600081816102c4015281816105b80152818161099601528181610a840152610e7401526118cf6000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806388f64c54116100cd578063b193976311610081578063d82ecc4811610066578063d82ecc4814610309578063e3ba9ace1461031c578063f23953ab1461032f57600080fd5b8063b1939763146102f9578063b60e85181461030157600080fd5b80638f7dcfa3116100b25780638f7dcfa31461029f578063a50cf2c8146102bf578063a904aab6146102e657600080fd5b806388f64c541461026557806389b77b3e1461028c57600080fd5b806354fd4d50116101245780635da33c5b116101095780635da33c5b146101fd578063765e0159146102245780638456cb591461025d57600080fd5b806354fd4d50146101d05780635c975abb146101e657600080fd5b806313d8c8401461015657806321d18456146101a05780632932472f146101b35780633f4ba83a146101c8575b600080fd5b6004546101769073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6101766101ae366004611651565b610337565b6101c66101c1366004611697565b61058a565b005b6101c6610968565b6101d8600181565b604051908152602001610197565b60005460ff165b6040519015158152602001610197565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101766102323660046116da565b73ffffffffffffffffffffffffffffffffffffffff9081166000908152600260205260409020541690565b6101c6610a56565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101c661029a3660046116da565b610b42565b6003546101769073ffffffffffffffffffffffffffffffffffffffff1681565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101c66102f4366004611697565b610e46565b6101d8610fb8565b6101d8611033565b6101ed6103173660046116da565b611044565b61017661032a3660046116f5565b611051565b6101c661105e565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa1580156103c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103e8919061170e565b6040518060400160405280600281526020017f43500000000000000000000000000000000000000000000000000000000000008152509061045f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b60405180910390fd5b506104686112a6565b6003805473ffffffffffffffffffffffffffffffffffffffff8082166000818152600260205260409081902080549093167fffffffffffffffffffffffff0000000000000000000000000000000000000000948516179094558154909216905590517fc75b5a710000000000000000000000000000000000000000000000000000000081523360048201526024810185905260448101849052819063c75b5a7190606401600060405180830381600087803b15801561052657600080fd5b505af115801561053a573d6000803e3d6000fd5b505060405133925073ffffffffffffffffffffffffffffffffffffffff841691507ff3ede7039176503a8ad1fe7cfaa29475a9dbe0cdcaf04ecf9a5c10570c47b10390600090a390505b92915050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610614573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610638919061170e565b61066e576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106766112a6565b60035473ffffffffffffffffffffffffffffffffffffffff838116911614156106fa576003805473ffffffffffffffffffffffffffffffffffffffff808216600090815260026020526040902080549091167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092558154169055610865565b73ffffffffffffffffffffffffffffffffffffffff838116600090815260026020908152604091829020548251808401909352600383527f4146330000000000000000000000000000000000000000000000000000000000918301919091529091848116911614610798576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b5060045473ffffffffffffffffffffffffffffffffffffffff838116911614156107fd57600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85161790555b73ffffffffffffffffffffffffffffffffffffffff828116600081815260026020526040808220805488861684529183208054929095167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790945591905281541690555b6040517fc75b5a7100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600060248301819052604483015283169063c75b5a7190606401600060405180830381600087803b1580156108dc57600080fd5b505af11580156108f0573d6000803e3d6000fd5b505050506109088260056112dd90919063ffffffff16565b508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f25e267469ba2ae82515be7b3d45df60bf8308343f0809e8cf7319058e2255ce660405160405180910390a3505050565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156109f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a16919061170e565b610a4c576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a546112ff565b565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015610ae0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b04919061170e565b610b3a576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a546113e0565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa158015610bcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf0919061170e565b6040518060400160405280600281526020017f435000000000000000000000000000000000000000000000000000000000000081525090610c5e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b50610c6a6005826114a0565b6040518060400160405280600381526020017f414634000000000000000000000000000000000000000000000000000000000081525090610cd8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b50438173ffffffffffffffffffffffffffffffffffffffff16633dc54b406040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4991906117a3565b14156040518060400160405280600381526020017f414631000000000000000000000000000000000000000000000000000000000081525090610db9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b506004805473ffffffffffffffffffffffffffffffffffffffff90811660009081526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081169487169485179091558454168317909355915190917fced6ab9afc868b3a088366f6631ae20752993b5cce5d5f0534ea5a59fcc57d5691a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610ed0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef4919061170e565b610f2a576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f19a1603900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301528416906319a1603990604401600060405180830381600087803b158015610f9b57600080fd5b505af1158015610faf573d6000803e3d6000fd5b50505050505050565b600354600090819073ffffffffffffffffffffffffffffffffffffffff165b73ffffffffffffffffffffffffffffffffffffffff81161561102d5773ffffffffffffffffffffffffffffffffffffffff9081166000908152600260205260409020541681611025816117eb565b925050610fd7565b50919050565b600061103f60056114cf565b905090565b60006105846005836114a0565b60006105846005836114d9565b60006110897f000000000000000000000000000000000000000000000000000000000000000061119b565b90508073ffffffffffffffffffffffffffffffffffffffff16638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156110d357600080fd5b505af11580156110e7573d6000803e3d6000fd5b50506004805473ffffffffffffffffffffffffffffffffffffffff908116600090815260026020526040902080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811692871692831790915582541617905550611156905060058261127d565b5060405173ffffffffffffffffffffffffffffffffffffffff8216907f9f69b6c10f6810213e055b0ba6bc0a4e2603f73c221aad77ea35da819cda7dc390600090a250565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260601b60148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f091505073ffffffffffffffffffffffffffffffffffffffff8116611278576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f455243313136373a20637265617465206661696c6564000000000000000000006044820152606401610456565b919050565b600061129f8373ffffffffffffffffffffffffffffffffffffffff84166114e5565b9392505050565b60035473ffffffffffffffffffffffffffffffffffffffff90811660009081526002602052604090205416610a5457610a5461105e565b600061129f8373ffffffffffffffffffffffffffffffffffffffff8416611534565b60005460ff1661136b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610456565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff161561144d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610456565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586113b63390565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600183016020526040812054151561129f565b6000610584825490565b600061129f8383611627565b600081815260018301602052604081205461152c57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610584565b506000610584565b6000818152600183016020526040812054801561161d576000611558600183611824565b855490915060009061156c90600190611824565b90508181146115d157600086600001828154811061158c5761158c61183b565b90600052602060002001549050808760000184815481106115af576115af61183b565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806115e2576115e261186a565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610584565b6000915050610584565b600082600001828154811061163e5761163e61183b565b9060005260206000200154905092915050565b6000806040838503121561166457600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff8116811461127857600080fd5b6000806000606084860312156116ac57600080fd5b6116b584611673565b92506116c360208501611673565b91506116d160408501611673565b90509250925092565b6000602082840312156116ec57600080fd5b61129f82611673565b60006020828403121561170757600080fd5b5035919050565b60006020828403121561172057600080fd5b8151801515811461129f57600080fd5b600060208083528351808285015260005b8181101561175d57858101830151858201604001528201611741565b8181111561176f576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b6000602082840312156117b557600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561181d5761181d6117bc565b5060010190565b600082821015611836576118366117bc565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220f1e9c81b8c3af2491c907ee66cf24e1bb76111b821db02df8f98dbb48b5ab5fa64736f6c634300080a0033608060405234801561001057600080fd5b50610e58806100206000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c806354fd4d5011610081578063c45a01551161005b578063c45a0155146101a4578063c75b5a71146101ca578063d1660f99146101dd57600080fd5b806354fd4d501461014f5780638129fc1c14610157578063c12c21c01461015f57600080fd5b80631afbb7a4116100b25780631afbb7a41461011d5780631cff79cd146101265780633dc54b401461014657600080fd5b806316128211146100d957806317d11a15146100ee57806319a160391461010a575b600080fd5b6100ec6100e7366004610b42565b6101f0565b005b6100f760035481565b6040519081526020015b60405180910390f35b6100ec610118366004610b8d565b61024c565b6100f760025481565b610139610134366004610bef565b6102c9565b6040516101019190610d49565b6100f760045481565b6100f7600181565b6100ec610344565b60015461017f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610101565b60005461017f9062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b6100ec6101d8366004610d5c565b610494565b6100ec6101eb366004610d8f565b61053d565b60015473ffffffffffffffffffffffffffffffffffffffff163314610241576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600291909155600355565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1633146102a3576040517fb126b84800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102c573ffffffffffffffffffffffffffffffffffffffff83168260006105b4565b5050565b60015460609073ffffffffffffffffffffffffffffffffffffffff16331461031d576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033d73ffffffffffffffffffffffffffffffffffffffff8416836107b4565b9392505050565b600054610100900460ff1661035f5760005460ff1615610363565b303b155b6103f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600054610100900460ff1615801561043357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000166101011790555b600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16336201000002179055801561049157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b50565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1633146104eb576040517fb126b84800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff949094169390931790925560025560035543600455565b60015473ffffffffffffffffffffffffffffffffffffffff16331461058e576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105af73ffffffffffffffffffffffffffffffffffffffff841683836107f6565b505050565b80158061065457506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015284169063dd62ed3e90604401602060405180830381865afa15801561062e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106529190610dcb565b155b6106e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e63650000000000000000000060648201526084016103eb565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526105af9084907f095ea7b300000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261084c565b606061033d83836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250610958565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526105af9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401610732565b60006108ae826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166109589092919063ffffffff16565b8051909150156105af57808060200190518101906108cc9190610de4565b6105af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016103eb565b6060610967848460008561096f565b949350505050565b606082471015610a01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016103eb565b843b610a69576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016103eb565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051610a929190610e06565b60006040518083038185875af1925050503d8060008114610acf576040519150601f19603f3d011682016040523d82523d6000602084013e610ad4565b606091505b5091509150610ae4828286610aef565b979650505050505050565b60608315610afe57508161033d565b825115610b0e5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103eb9190610d49565b60008060408385031215610b5557600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff81168114610b8857600080fd5b919050565b60008060408385031215610ba057600080fd5b610ba983610b64565b9150610bb760208401610b64565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215610c0257600080fd5b610c0b83610b64565b9150602083013567ffffffffffffffff80821115610c2857600080fd5b818501915085601f830112610c3c57600080fd5b813581811115610c4e57610c4e610bc0565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715610c9457610c94610bc0565b81604052828152886020848701011115610cad57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b83811015610cea578181015183820152602001610cd2565b83811115610cf9576000848401525b50505050565b60008151808452610d17816020860160208601610ccf565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061033d6020830184610cff565b600080600060608486031215610d7157600080fd5b610d7a84610b64565b95602085013595506040909401359392505050565b600080600060608486031215610da457600080fd5b610dad84610b64565b9250610dbb60208501610b64565b9150604084013590509250925092565b600060208284031215610ddd57600080fd5b5051919050565b600060208284031215610df657600080fd5b8151801515811461033d57600080fd5b60008251610e18818460208701610ccf565b919091019291505056fea2646970667358221220448e7046078cd668c09328d857e534e2aab6cdc0e691d3d4f2c8baae8e084b1364736f6c634300080a003360c06040523480156200001157600080fd5b506040516200162738038062001627833981016040819052620000349162000177565b60408051808201909152600281526105a360f41b60208201526001600160a01b038216620000805760405162461bcd60e51b8152600401620000779190620001a9565b60405180910390fd5b50806001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e6919062000177565b6001600160a01b03166080816001600160a01b031681525050806001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200013e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000164919062000177565b6001600160a01b031660a0525062000201565b6000602082840312156200018a57600080fd5b81516001600160a01b0381168114620001a257600080fd5b9392505050565b600060208083528351808285015260005b81811015620001d857858101830151858201604001528201620001ba565b81811115620001eb576000604083870101525b50601f01601f1916929092016040019392505050565b60805160a0516113c2620002656000396000818161021f0152818161036401526106d501526000818160af0152818161012a015281816104420152818161056e015281816107b301528181610aa601528181610b890152610c6701526113c26000f3fe60806040526004361061005e5760003560e01c80635869dba8116100435780635869dba814610199578063deecfbc9146101bb578063e79a4089146101ce57600080fd5b80634f0e0ef31461011857806354fd4d501461017657600080fd5b366101135760408051808201909152600381527f574732000000000000000000000000000000000000000000000000000000000060208201523373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b60405180910390fd5b50005b600080fd5b34801561012457600080fd5b5061014c7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561018257600080fd5b5061018b600181565b60405190815260200161016d565b3480156101a557600080fd5b506101b96101b4366004611263565b6101ee565b005b6101b96101c936600461128f565b61031d565b3480156101da57600080fd5b506101b96101e93660046112e1565b61068e565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201819052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa15801561027b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061029f9190611318565b6040518060400160405280600281526020017f43500000000000000000000000000000000000000000000000000000000000008152509061030d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b506103188383610a77565b505050565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808516600483015284917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa1580156103ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103d19190611318565b6040518060400160405280600281526020017f52500000000000000000000000000000000000000000000000000000000000008152509061043f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e6919061133a565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600381526020017f57473100000000000000000000000000000000000000000000000000000000008152509061056b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156105d457600080fd5b505af11580156105e8573d6000803e3d6000fd5b50505050506105f78434610b3c565b6040517f9aa5d46200000000000000000000000000000000000000000000000000000000815234600482015273ffffffffffffffffffffffffffffffffffffffff848116602483015261ffff84166044830152851690639aa5d46290606401600060405180830381600087803b15801561067057600080fd5b505af1158015610684573d6000803e3d6000fd5b5050505050505050565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808516600483015284917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa15801561071e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107429190611318565b6040518060400160405280600281526020017f5250000000000000000000000000000000000000000000000000000000000000815250906107b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610833573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610857919061133a565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600381526020017f5747310000000000000000000000000000000000000000000000000000000000815250906108dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b506109703330858773ffffffffffffffffffffffffffffffffffffffff166336dda7d56040518163ffffffff1660e01b8152600401602060405180830381865afa15801561092e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610952919061133a565b73ffffffffffffffffffffffffffffffffffffffff16929190610cd4565b6040517f05fe138b0000000000000000000000000000000000000000000000000000000081526004810184905230602482015260009073ffffffffffffffffffffffffffffffffffffffff8616906305fe138b906044016020604051808303816000875af11580156109e6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0a9190611357565b9050610a168382610a77565b8273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f6de63bb986f2779478e384365c03cc2e62f06b453856acca87d5a519ce02664960405160405180910390a35050505050565b6040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632e1a7d4d90602401600060405180830381600087803b158015610aff57600080fd5b505af1158015610b13573d6000803e3d6000fd5b50610b389250505073ffffffffffffffffffffffffffffffffffffffff831682610d6f565b5050565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015282917f00000000000000000000000000000000000000000000000000000000000000009091169063dd62ed3e90604401602060405180830381865afa158015610bd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf69190611357565b1015610b38576040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303816000875af1158015610cb0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103189190611318565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052610d69908590610ec9565b50505050565b80471015610dd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610107565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114610e33576040519150601f19603f3d011682016040523d82523d6000602084013e610e38565b606091505b5050905080610318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610107565b6000610f2b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16610fd59092919063ffffffff16565b8051909150156103185780806020019051810190610f499190611318565b610318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610107565b6060610fe48484600085610fee565b90505b9392505050565b606082471015611080576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610107565b843b6110e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610107565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516111119190611370565b60006040518083038185875af1925050503d806000811461114e576040519150601f19603f3d011682016040523d82523d6000602084013e611153565b606091505b509150915061116382828661116e565b979650505050505050565b6060831561117d575081610fe7565b82511561118d5782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b60005b838110156111dc5781810151838201526020016111c4565b83811115610d695750506000910152565b602081526000825180602084015261120c8160408501602087016111c1565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461126057600080fd5b50565b6000806040838503121561127657600080fd5b82356112818161123e565b946020939093013593505050565b6000806000606084860312156112a457600080fd5b83356112af8161123e565b925060208401356112bf8161123e565b9150604084013561ffff811681146112d657600080fd5b809150509250925092565b6000806000606084860312156112f657600080fd5b83356113018161123e565b92506020840135915060408401356112d68161123e565b60006020828403121561132a57600080fd5b81518015158114610fe757600080fd5b60006020828403121561134c57600080fd5b8151610fe78161123e565b60006020828403121561136957600080fd5b5051919050565b600082516113828184602087016111c1565b919091019291505056fea264697066735822122017fd7fc76e4a1efcf24b78a3417fad7ab9576f0a23aa756ddb211c5e2227aa9564736f6c634300080a003360806040523480156200001157600080fd5b5060405162002b8038038062002b80833981016040819052620000349162000122565b6001600160a01b0381166200008f5760405162461bcd60e51b815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640160405180910390fd5b6001600160a01b03811660008181526001602052604080822080546001600160601b0319166b204fce5e3e2502611000000090811790915590517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91620000f99190815260200190565b60405180910390a350600680546001600160a81b031916336101000260ff191617905562000154565b6000602082840312156200013557600080fd5b81516001600160a01b03811681146200014d57600080fd5b9392505050565b612a1c80620001646000396000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c806370a08231116100f9578063b4b5ea5711610097578063dd62ed3e11610071578063dd62ed3e14610503578063e7a324dc14610555578063f1127ed81461057c578063f2fde38b146105ee57600080fd5b8063b4b5ea57146104ca578063c3cda520146104dd578063d505accf146104f057600080fd5b806395d89b41116100d357806395d89b411461045b5780639742ca4614610497578063a9059cbb146104aa578063b0660c3d146104bd57600080fd5b806370a08231146103c7578063782d6fe11461040b5780637ecebe001461043b57600080fd5b806330adf81f11610166578063481c6a7511610140578063481c6a751461031e578063587cde1e146103435780635c19a95c146103795780636fcfff451461038c57600080fd5b806330adf81f14610298578063313ce567146102bf578063349dc329146102d957600080fd5b806320606b701161019757806320606b70146102545780632185810b1461027b57806323b872dd1461028557600080fd5b806306fdde03146101be578063095ea7b31461021057806318160ddd14610233575b600080fd5b6101fa6040518060400160405280600781526020017f47656172626f780000000000000000000000000000000000000000000000000081525081565b60405161020791906124a3565b60405180910390f35b61022361021e36600461253f565b610601565b6040519015158152602001610207565b6102466b204fce5e3e2502611000000081565b604051908152602001610207565b6102467f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b61028361070d565b005b610223610293366004612569565b6107ee565b6102467f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b6102c7601281565b60405160ff9091168152602001610207565b6007546102f99073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610207565b6006546102f990610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6102f96103513660046125a5565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6102836103873660046125a5565b61098a565b6103b261039a3660046125a5565b60046020526000908152604090205463ffffffff1681565b60405163ffffffff9091168152602001610207565b6102466103d53660046125a5565b73ffffffffffffffffffffffffffffffffffffffff166000908152600160205260409020546bffffffffffffffffffffffff1690565b61041e61041936600461253f565b610997565b6040516bffffffffffffffffffffffff9091168152602001610207565b6102466104493660046125a5565b60056020526000908152604090205481565b6101fa6040518060400160405280600481526020017f474541520000000000000000000000000000000000000000000000000000000081525081565b6102836104a53660046125a5565b610cae565b6102236104b836600461253f565b610e20565b6006546102239060ff1681565b61041e6104d83660046125a5565b610e5c565b6102836104eb3660046125d1565b610efa565b6102836104fe366004612629565b611310565b610246610511366004612693565b73ffffffffffffffffffffffffffffffffffffffff9182166000908152602081815260408083209390941682529190915220546bffffffffffffffffffffffff1690565b6102467fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b6105c561058a3660046126c6565b600360209081526000928352604080842090915290825290205463ffffffff81169064010000000090046bffffffffffffffffffffffff1682565b6040805163ffffffff90931683526bffffffffffffffffffffffff909116602083015201610207565b6102836105fc3660046125a5565b61187a565b6000807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83141561063f57506bffffffffffffffffffffffff610664565b6106618360405180606001604052806025815260200161285260259139611a15565b90505b3360008181526020818152604080832073ffffffffffffffffffffffffffffffffffffffff89168085529083529281902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff871690811790915590519081529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a360019150505b92915050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314610798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e616765720060448201526064015b60405180910390fd5b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f795b0e16c8da9807b0a215f3749bd6dbcc49fc0472183f4e446abb7dcbd9d00790600090a1565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081815260408083203380855290835281842054825160608101909352602580845291936bffffffffffffffffffffffff909116928592610856928892919061285290830139611a15565b90508673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156108a257506bffffffffffffffffffffffff82811614155b156109725760006108cc83836040518060600160405280603d8152602001612974603d9139611a67565b73ffffffffffffffffffffffffffffffffffffffff898116600081815260208181526040808320948a168084529482529182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff87169081179091559151918252939450919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505b61097d878783611ad5565b5060019695505050505050565b6109943382611e9c565b50565b6000438210610a28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f476561723a3a6765745072696f72566f7465733a206e6f74207965742064657460448201527f65726d696e656400000000000000000000000000000000000000000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff831660009081526004602052604090205463ffffffff1680610a63576000915050610707565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604081208491610a95600185612735565b63ffffffff90811682526020820192909252604001600020541611610b1b5773ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812090610ae5600184612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff1691506107079050565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020908152604080832083805290915290205463ffffffff16831015610b63576000915050610707565b600080610b71600184612735565b90505b8163ffffffff168163ffffffff161115610c565760006002610b968484612735565b610ba0919061275a565b610baa9083612735565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260036020908152604080832063ffffffff8581168552908352928190208151808301909252549283168082526401000000009093046bffffffffffffffffffffffff1691810191909152919250871415610c2a576020015194506107079350505050565b805163ffffffff16871115610c4157819350610c4f565b610c4c600183612735565b92505b5050610b74565b5073ffffffffffffffffffffffffffffffffffffffff8516600090815260036020908152604080832063ffffffff909416835292905220546bffffffffffffffffffffffff6401000000009091041691505092915050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314610d34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e6167657200604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff8116610db1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640161078f565b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f2f834d1c8c4b956018fff5faca4d99868ae635487424d9c265c257ccbc698c6a90600090a250565b600080610e45836040518060600160405280602681526020016128a760269139611a15565b9050610e52338583611ad5565b5060019392505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526004602052604081205463ffffffff1680610e94576000610ef3565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812090610ec5600184612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b9392505050565b604080518082018252600781527f47656172626f780000000000000000000000000000000000000000000000000060209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f028ef9f797075f74ac647c65fde04fb0f128c2d59fd40f45732269917642fd4681840152466060820152306080808301919091528351808303909101815260a0820184528051908301207fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60c083015273ffffffffffffffffffffffffffffffffffffffff8a1660e08301526101008201899052610120808301899052845180840390910181526101408301909452835193909201929092207f19010000000000000000000000000000000000000000000000000000000000006101608401526101628301829052610182830181905290916000906101a201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa1580156110d8573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166111a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f476561723a3a64656c656761746542795369673a20696e76616c69642073696760448201527f6e61747572650000000000000000000000000000000000000000000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff811660009081526005602052604081208054916111d7836127a4565b919050558914611269576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f476561723a3a64656c656761746542795369673a20696e76616c6964206e6f6e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161078f565b874211156112f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f476561723a3a64656c656761746542795369673a207369676e6174757265206560448201527f7870697265640000000000000000000000000000000000000000000000000000606482015260840161078f565b611303818b611e9c565b505050505b505050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86141561134d57506bffffffffffffffffffffffff611372565b61136f8660405180606001604052806024815260200161291c60249139611a15565b90505b604080518082018252600781527f47656172626f780000000000000000000000000000000000000000000000000060209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f028ef9f797075f74ac647c65fde04fb0f128c2d59fd40f45732269917642fd4681840152466060820152306080808301919091528351808303909101815260a0909101835280519082012073ffffffffffffffffffffffffffffffffffffffff8b166000908152600590925291812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918c918c918c919086611472836127a4565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810188905260e001604051602081830303815290604052805190602001209050600082826040516020016115199291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff8b169284019290925260608301899052608083018890529092509060019060a0016020604051602081039080840390855afa1580156115a2573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661164a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a7065726d69743a20696e76616c6964207369676e617475726500604482015260640161078f565b8b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146116df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f476561723a3a7065726d69743a20756e617574686f72697a6564000000000000604482015260640161078f565b88421115611749576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a7065726d69743a207369676e6174757265206578706972656400604482015260640161078f565b846000808e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508a73ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258760405161186491906bffffffffffffffffffffffff91909116815260200190565b60405180910390a3505050505050505050505050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314611900576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e6167657200604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff811661197d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640161078f565b60065460405173ffffffffffffffffffffffffffffffffffffffff80841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36006805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b6000816c010000000000000000000000008410611a5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b509192915050565b6000836bffffffffffffffffffffffff16836bffffffffffffffffffffffff1611158290611ac2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b50611acd83856127dd565b949350505050565b60065460ff1680611b025750600654610100900473ffffffffffffffffffffffffffffffffffffffff1633145b80611b24575060075473ffffffffffffffffffffffffffffffffffffffff1633145b611b8a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f476561723a3a7472616e73666572732061726520666f7262696464656e000000604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff8316611c2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603c60248201527f476561723a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260448201527f616e736665722066726f6d20746865207a65726f206164647265737300000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff8216611cd0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f476561723a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260448201527f616e7366657220746f20746865207a65726f2061646472657373000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260016020908152604091829020548251606081019093526036808452611d2d936bffffffffffffffffffffffff90921692859291906129b190830139611a67565b73ffffffffffffffffffffffffffffffffffffffff848116600090815260016020908152604080832080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff968716179055928616825290829020548251606081019093526030808452611dbf949190911692859290919061287790830139611f50565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260409182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff968716179055905193851684529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a373ffffffffffffffffffffffffffffffffffffffff808416600090815260026020526040808220548584168352912054611e9792918216911683611fc1565b505050565b73ffffffffffffffffffffffffffffffffffffffff808316600081815260026020818152604080842080546001845282862054949093528787167fffffffffffffffffffffffff000000000000000000000000000000000000000084168117909155905191909516946bffffffffffffffffffffffff9092169391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4611f4a828483611fc1565b50505050565b600080611f5d8486612802565b9050846bffffffffffffffffffffffff16816bffffffffffffffffffffffff1610158390611fb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b50949350505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561200b57506000816bffffffffffffffffffffffff16115b15611e975773ffffffffffffffffffffffffffffffffffffffff8316156120fd5773ffffffffffffffffffffffffffffffffffffffff831660009081526004602052604081205463ffffffff1690816120655760006120c4565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812090612096600185612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b905060006120eb82856040518060600160405280602881526020016128cd60289139611a67565b90506120f9868484846121e2565b5050505b73ffffffffffffffffffffffffffffffffffffffff821615611e975773ffffffffffffffffffffffffffffffffffffffff821660009081526004602052604081205463ffffffff1690816121525760006121b1565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812090612183600185612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b905060006121d882856040518060600160405280602781526020016128f560279139611f50565b9050611308858484845b60006122064360405180606001604052806034815260200161294060349139612465565b905060008463ffffffff1611801561226d575073ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812063ffffffff831691612251600188612735565b63ffffffff908116825260208201929092526040016000205416145b156123035773ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812083916122a4600188612735565b63ffffffff168152602081019190915260400160002080546bffffffffffffffffffffffff92909216640100000000027fffffffffffffffffffffffffffffffff000000000000000000000000ffffffff9092169190911790556123fe565b60408051808201825263ffffffff80841682526bffffffffffffffffffffffff808616602080850191825273ffffffffffffffffffffffffffffffffffffffff8b166000908152600382528681208b8616825290915294909420925183549451909116640100000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009094169116179190911790556123a5846001612832565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260046020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff929092169190911790555b604080516bffffffffffffffffffffffff80861682528416602082015273ffffffffffffffffffffffffffffffffffffffff8716917fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724910160405180910390a25050505050565b6000816401000000008410611a5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91905b600060208083528351808285015260005b818110156124d0578581018301518582016040015282016124b4565b818111156124e2576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461253a57600080fd5b919050565b6000806040838503121561255257600080fd5b61255b83612516565b946020939093013593505050565b60008060006060848603121561257e57600080fd5b61258784612516565b925061259560208501612516565b9150604084013590509250925092565b6000602082840312156125b757600080fd5b610ef382612516565b803560ff8116811461253a57600080fd5b60008060008060008060c087890312156125ea57600080fd5b6125f387612516565b9550602087013594506040870135935061260f606088016125c0565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a03121561264457600080fd5b61264d88612516565b965061265b60208901612516565b95506040880135945060608801359350612677608089016125c0565b925060a0880135915060c0880135905092959891949750929550565b600080604083850312156126a657600080fd5b6126af83612516565b91506126bd60208401612516565b90509250929050565b600080604083850312156126d957600080fd5b6126e283612516565b9150602083013563ffffffff811681146126fb57600080fd5b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600063ffffffff8381169083168181101561275257612752612706565b039392505050565b600063ffffffff80841680612798577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156127d6576127d6612706565b5060010190565b60006bffffffffffffffffffffffff8381169083168181101561275257612752612706565b60006bffffffffffffffffffffffff80831681851680830382111561282957612829612706565b01949350505050565b600063ffffffff8083168185168083038211156128295761282961270656fe476561723a3a617070726f76653a20616d6f756e7420657863656564732039362062697473476561723a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e74206f766572666c6f7773476561723a3a7472616e736665723a20616d6f756e7420657863656564732039362062697473476561723a3a5f6d6f7665566f7465733a20766f746520616d6f756e7420756e646572666c6f7773476561723a3a5f6d6f7665566f7465733a20766f746520616d6f756e74206f766572666c6f7773476561723a3a7065726d69743a20616d6f756e7420657863656564732039362062697473476561723a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d62657220657863656564732033322062697473476561723a3a7472616e7366657246726f6d3a207472616e7366657220616d6f756e742065786365656473207370656e64657220616c6c6f77616e6365476561723a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e7420657863656564732062616c616e6365a26469706673582212201b84fd7789a35c022f692420863210a30e82d2405659f5a28275d433fa53467f64736f6c634300080a003360806040526016805460ff1916905534801561001a57600080fd5b506040516110a73803806110a7833981016040819052610039916100b6565b600080546001600160a01b038085166001600160a01b0319928316179092556003805492841692909116919091179055610080600a6b033b2e3c9fd0803ce80000006100e9565b60075550506b033b2e3c9fd0803ce800000060155561010b565b80516001600160a01b03811681146100b157600080fd5b919050565b600080604083850312156100c957600080fd5b6100d28361009a565b91506100e06020840161009a565b90509250929050565b60008261010657634e487b7160e01b600052601260045260246000fd5b500490565b610f8d8061011a6000396000f3fe608060405234801561001057600080fd5b50600436106102e95760003560e01c806367c99d5811610191578063c5f956af116100e3578063dbcb313b11610097578063f11a648711610071578063f11a648714610320578063f3fdb15a146105f1578063fe14112d1461061157600080fd5b8063dbcb313b146105d6578063e941fa78146105df578063ef8d9603146105e857600080fd5b8063cb3905e1116100c8578063cb3905e1146105c4578063cf33d95514610320578063d0efe753146105cd57600080fd5b8063c5f956af14610588578063ca9505e4146105a857600080fd5b80639aa5d46211610145578063b6ac642a1161011f578063b6ac642a14610567578063bb04b19314610567578063bf28068b1461057557600080fd5b80639aa5d46214610544578063a4e8273e14610557578063b3554a0a1461055e57600080fd5b8063788c6bfe11610176578063788c6bfe146104ef5780638456cb591461050157806396df5dc01461053157600080fd5b806367c99d58146104de57806374375359146104e757600080fd5b806336dda7d51161024a5780634d778ad1116101fe57806354fd4d50116101d857806354fd4d50146104c05780635c975abb146104c8578063609ae317146104d557600080fd5b80634d778ad114610491578063532fe502146104a45780635427c938146104ad57600080fd5b80633f4ba83a1161022f5780633f4ba83a1461045257806345d31f9d1461047f5780634c19386c1461048857600080fd5b806336dda7d51461040f5780633e163df01461042f57600080fd5b80632495a599116102a157806329f3d3b61161028657806329f3d3b6146103b35780632a3354c9146103bc5780632e97ca21146103dc57600080fd5b80632495a599146103735780632954018c1461039357600080fd5b8063078c4781116102d2578063078c4781146103205780630fce70fb146103335780631e16e4fc1461033b57600080fd5b8063030dbb04146102ee57806305fe138b1461030a575b600080fd5b6102f760105481565b6040519081526020015b60405180910390f35b6102f7610318366004610ce8565b600092915050565b61033161032e366004610d14565b50565b005b6015546102f7565b61034e610349366004610d2f565b610618565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610301565b60035461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b60005461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6102f760095481565b600a5461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103ff6103ea366004610d14565b60066020526000908152604090205460ff1681565b6040519015158152602001610301565b60055461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103ff61043d366004610d14565b60146020526000908152604090205460ff1681565b610331601680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b6102f760075481565b6102f760015481565b6102f761049f366004610d2f565b61064f565b6102f760115481565b6102f76104bb366004610d2f565b61066d565b6102f7600181565b6016546103ff9060ff1681565b6102f760085481565b6102f7600d5481565b6102f7610685565b6b033b2e3c9fd0803ce80000006102f7565b610331601680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b61033161053f366004610d2f565b601555565b610331610552366004610d48565b505050565b60016102f7565b6102f7600e5481565b61033161032e366004610d2f565b610331610583366004610ce8565b61071d565b60135461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103316105b6366004610d7d565b600b92909255600c55600d55565b6102f7600c5481565b6102f7600b5481565b6102f760155481565b6102f7600f5481565b6102f760025481565b60125461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b60006102f7565b6004818154811061062857600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6000610667826b033b2e3c9fd0803ce800000061077a565b92915050565b6000610667826b033b2e3c9fd0803ce80000006108e9565b6003546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156106f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107189190610da9565b905090565b6009829055600a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691909117909155600354610776911682846109fe565b5050565b60408051808201909152600281527f4d330000000000000000000000000000000000000000000000000000000000006020820152600090826107f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b60405180910390fd5b506000610800600284610e72565b90506b033b2e3c9fd0803ce8000000610839827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610ead565b6108439190610e72565b8411156040518060400160405280600281526020017f4d31000000000000000000000000000000000000000000000000000000000000815250906108b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b5082816108cd6b033b2e3c9fd0803ce800000087610ec4565b6108d79190610f01565b6108e19190610e72565b949350505050565b60008215806108f6575081155b1561090357506000610667565b8161091b60026b033b2e3c9fd0803ce8000000610e72565b610945907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610ead565b61094f9190610e72565b8311156040518060400160405280600281526020017f4d31000000000000000000000000000000000000000000000000000000000000815250906109c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b506b033b2e3c9fd0803ce80000006109d9600282610e72565b6109e38486610ec4565b6109ed9190610f01565b6109f79190610e72565b9392505050565b6040805173ffffffffffffffffffffffffffffffffffffffff848116602483015260448083018590528351808403909101815260649092018352602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65649084015261055292869291600091610ac9918516908490610b73565b8051909150156105525780806020019051810190610ae79190610f19565b610552576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016107e9565b60606108e1848460008585843b610be6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107e9565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051610c0f9190610f3b565b60006040518083038185875af1925050503d8060008114610c4c576040519150601f19603f3d011682016040523d82523d6000602084013e610c51565b606091505b5091509150610c61828286610c6c565b979650505050505050565b60608315610c7b5750816109f7565b825115610c8b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ce357600080fd5b919050565b60008060408385031215610cfb57600080fd5b82359150610d0b60208401610cbf565b90509250929050565b600060208284031215610d2657600080fd5b6109f782610cbf565b600060208284031215610d4157600080fd5b5035919050565b600080600060608486031215610d5d57600080fd5b83359250610d6d60208501610cbf565b9150604084013590509250925092565b600080600060608486031215610d9257600080fd5b505081359360208301359350604090920135919050565b600060208284031215610dbb57600080fd5b5051919050565b60005b83811015610ddd578181015183820152602001610dc5565b83811115610dec576000848401525b50505050565b6020815260008251806020840152610e11816040850160208701610dc2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082610ea8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600082821015610ebf57610ebf610e43565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610efc57610efc610e43565b500290565b60008219821115610f1457610f14610e43565b500190565b600060208284031215610f2b57600080fd5b815180151581146109f757600080fd5b60008251610f4d818460208701610dc2565b919091019291505056fea26469706673582212204edb887d94928b3914f60ab48df0182da9eb30ddbb7021b164cc728b60a655d564736f6c634300080a003360e06040523480156200001157600080fd5b5060405162013af238038062013af2833981016040819052620000349162000630565b826001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000073573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000999190620007bf565b620000a433620004ab565b6001600160a01b038116608081905260408051630873769560e01b815290516308737695916004808201926020929091908290030181865afa158015620000ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001159190620007bf565b6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000153573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001799190620007bf565b6001600160a01b0390811660a052841660c0525060405183906200019d9062000519565b6001600160a01b039091168152602001604051809103906000f080158015620001ca573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b0392909216918217905560608301516080840151604051620002029062000527565b6001600160a01b03938416815292909116602083015215156040820152606001604051809103906000f0801580156200023f573d6000803e3d6000fd5b50600280546001600160a01b0319166001600160a01b0392909216919091179055604051600090620002746020820162000535565b601f1982820381018352601f909101166040819052600154600254620002b0926001600160a01b039283169291909116908790602001620007e6565b60408051601f1981840301815290829052620002d09291602001620008e8565b60408051601f19818403018152919052905060006200035982848151602092830120604080517fff00000000000000000000000000000000000000000000000000000000000000818601523060601b6001600160601b03191660218201526035810193909352605580840192909252805180840390920182526075909201909152805191012090565b600154604051634fafc35760e11b81526001600160a01b038084166004830152929350911690639f5f86ae90602401600060405180830381600087803b158015620003a357600080fd5b505af1158015620003b8573d6000803e3d6000fd5b50505050620003ce8284620004fb60201b60201c565b600380546001600160a01b0319166001600160a01b0383811691821790925560015460408051630304b08760e61b81529051919093169263c12c21c09160048083019260209291908290030181865afa15801562000430573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004569190620007bf565b6001600160a01b031614620004a05760405162461bcd60e51b815260206004820152600c60248201526b496e636f727265637420434d60a01b604482015260640160405180910390fd5b505050505062000909565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008183516020850134f59050803b6200051457600080fd5b505050565b6158e8806200243683390190565b615e978062007d1e83390190565b615f3d806200dbb583390190565b6001600160a01b03811681146200055957600080fd5b50565b8051620005698162000543565b919050565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b0381118282101715620005a957620005a96200056e565b60405290565b604080519081016001600160401b0381118282101715620005a957620005a96200056e565b604051601f8201601f191681016001600160401b0381118282101715620005ff57620005ff6200056e565b604052919050565b80516001600160801b03811681146200056957600080fd5b805180151581146200056957600080fd5b6000806000606084860312156200064657600080fd5b8351620006538162000543565b602085810151919450906001600160401b03808211156200067357600080fd5b9086019060a082890312156200068857600080fd5b6200069262000584565b6200069d8362000607565b8152620006ac84840162000607565b8482015260408084015183811115620006c457600080fd5b8401601f81018b13620006d657600080fd5b805184811115620006eb57620006eb6200056e565b620006fb878260051b01620005d4565b818152878101955060069190911b82018701908c8211156200071c57600080fd5b918701915b818310156200077e5783838e0312156200073b5760008081fd5b62000745620005af565b8351620007528162000543565b81528389015161ffff811681146200076a5760008081fd5b818a01528652948701949183019162000721565b8484015250620007939050606085016200055c565b6060830152620007a6608085016200061f565b6080830152979097015195989697509495945050505050565b600060208284031215620007d257600080fd5b8151620007df8162000543565b9392505050565b600060018060a01b0380861683526020818616818501526040606081860152610100850160018060801b038088511660608801528084890151166080880152508187015160a080880152818151808452610120890191508583019350600092505b808310156200087857835180518816835286015161ffff168683015292850192600192909201919084019062000847565b5060608901516001600160a01b031660c0890152608090980151151560e0909701969096525094979650505050505050565b6000815160005b81811015620008cd5760208185018101518683015201620008b1565b81811115620008dd576000828601525b509290920192915050565b600062000901620008fa8386620008aa565b84620008aa565b949350505050565b60805160a05160c051611ad3620009636000396000818161010a0152610ea00152600081816103790152610b170152600081816101680152818161068c01528181610a4d01528181610b860152610c190152611ad36000f3fe6080604052600436106100f35760003560e01c80638da5cb5b1161008a578063ebf0c71711610059578063ebf0c71714610367578063f2fde38b1461039b578063f4747c58146103bb578063f9aa028a146103db57600080fd5b80638da5cb5b1461025a57806394ca2cb5146102855780639c4ae2d014610327578063c12c21c01461033a57600080fd5b80633e0b1a23116100c65780633e0b1a23146101ce5780634ef501ac146101e3578063715018a614610230578063805abe6a1461024557600080fd5b806316f0115b146100f85780632954018c146101565780632f7a18811461018a578063318d0d10146101b7575b600080fd5b34801561010457600080fd5b5061012c7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561016257600080fd5b5061012c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561019657600080fd5b5060025461012c9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156101c357600080fd5b506101cc610408565b005b3480156101da57600080fd5b506101cc610498565b3480156101ef57600080fd5b506102036101fe366004611726565b610521565b6040805173ffffffffffffffffffffffffffffffffffffffff93841681529290911660208301520161014d565b34801561023c57600080fd5b506101cc610567565b34801561025157600080fd5b506101cc6105f2565b34801561026657600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff1661012c565b34801561029157600080fd5b5061012c6102a03660046117e6565b8151602092830120604080517fff00000000000000000000000000000000000000000000000000000000000000818601523060601b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660218201526035810193909352605580840192909252805180840390920182526075909201909152805191012090565b6101cc6103353660046117e6565b6107d8565b34801561034657600080fd5b5060015461012c9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561037357600080fd5b5061012c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103a757600080fd5b506101cc6103b63660046118c0565b6107f5565b3480156103c757600080fd5b506101cc6103d63660046118e4565b610925565b3480156103e757600080fd5b5060035461012c9073ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff16331461048e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b610496610a49565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610519576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b61048e610b82565b6004818154811061053157600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff91821692501682565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b61049660006116b1565b60005473ffffffffffffffffffffffffffffffffffffffff163314610673576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b3073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106f5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071991906119c4565b73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610763573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078791906119c4565b73ffffffffffffffffffffffffffffffffffffffff1614156107d5576040517fbdebb83f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33ff5b60008183516020850134f59050803b6107f057600080fd5b505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b73ffffffffffffffffffffffffffffffffffffffff8116610919576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610485565b610922816116b1565b50565b60005473ffffffffffffffffffffffffffffffffffffffff1633146109a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b805160005b818110156107f05760048382815181106109c7576109c76119e1565b602090810291909101810151825460018082018555600094855293839020825160029092020180547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff938416178255929093015192840180549092169216919091179055016109ab565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ab6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ada91906119c4565b6040517ff2fde38b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301529192509082169063f2fde38b90602401600060405180830381600087803b158015610b6757600080fd5b505af1158015610b7b573d6000803e3d6000fd5b5050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1391906119c4565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca691906119c4565b60045490915060005b81811015610dd4576003546004805473ffffffffffffffffffffffffffffffffffffffff90921691637bccacee919084908110610cee57610cee6119e1565b906000526020600020906002020160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660048481548110610d3357610d336119e1565b600091825260209091206002909102015460405160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b158015610db157600080fd5b505af1158015610dc5573d6000803e3d6000fd5b50505050806001019050610caf565b506001546040517fe26b2f6300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529084169063e26b2f6390602401600060405180830381600087803b158015610e4257600080fd5b505af1158015610e56573d6000803e3d6000fd5b50506001546040517fcf33d95500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201527f0000000000000000000000000000000000000000000000000000000000000000909116925063cf33d9559150602401600060405180830381600087803b158015610ee857600080fd5b505af1158015610efc573d6000803e3d6000fd5b50505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f919190611a10565b905060005b818110156116ab576003546040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810183905260009173ffffffffffffffffffffffffffffffffffffffff1690635094cb4f90602401602060405180830381865afa15801561100e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103291906119c4565b6001546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80841660048301529293506000929091169063fdd5764590602401602060405180830381865afa1580156110a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110cc91906119c4565b905060008173ffffffffffffffffffffffffffffffffffffffff1663ce30bbdb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561111b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113f9190611a29565b9050600c81601081111561115557611155611a4a565b14156116225760008273ffffffffffffffffffffffffffffffffffffffff166320b2c1516040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111cc91906119c4565b905060008373ffffffffffffffffffffffffffffffffffffffff1663927188d96040518163ffffffff1660e01b8152600401602060405180830381865afa15801561121b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123f91906119c4565b905060008473ffffffffffffffffffffffffffffffffffffffff166399253ac06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561128e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b291906119c4565b6040517f9dcb511a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152919250908a169063e8a97a3e9083908390639dcb511a90602401602060405180830381865afa15801561132c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135091906119c4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156113bd57600080fd5b505af11580156113d1573d6000803e3d6000fd5b50506040517f9dcb511a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301528c16925063e8a97a3e915085908390639dcb511a90602401602060405180830381865afa15801561144b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061146f91906119c4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156114dc57600080fd5b505af11580156114f0573d6000803e3d6000fd5b50506003546001546040517f7832743800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301529283169450633e7c88d69350879290911690637832743890602401602060405180830381865afa158015611573573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115979190611a79565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015261ffff166024820152604401600060405180830381600087803b15801561160657600080fd5b505af115801561161a573d6000803e3d6000fd5b505050505050505b600d81601081111561163657611636611a4a565b141561169d578173ffffffffffffffffffffffffffffffffffffffff16639b51ecd36040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561168457600080fd5b505af1158015611698573d6000803e3d6000fd5b505050505b836001019350505050610f96565b50505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561173857600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156117915761179161173f565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156117de576117de61173f565b604052919050565b600080604083850312156117f957600080fd5b823567ffffffffffffffff8082111561181157600080fd5b818501915085601f83011261182557600080fd5b81356020828211156118395761183961173f565b611869817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011601611797565b9250818352878183860101111561187f57600080fd5b8181850182850137600091830181019190915290969401359450505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461092257600080fd5b6000602082840312156118d257600080fd5b81356118dd8161189e565b9392505050565b600060208083850312156118f757600080fd5b823567ffffffffffffffff8082111561190f57600080fd5b818501915085601f83011261192357600080fd5b8135818111156119355761193561173f565b611943848260051b01611797565b818152848101925060069190911b83018401908782111561196357600080fd5b928401925b818410156119b957604084890312156119815760008081fd5b61198961176e565b84356119948161189e565b8152848601356119a38161189e565b8187015283526040939093019291840191611968565b979650505050505050565b6000602082840312156119d657600080fd5b81516118dd8161189e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215611a2257600080fd5b5051919050565b600060208284031215611a3b57600080fd5b8151601181106118dd57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060208284031215611a8b57600080fd5b815161ffff811681146118dd57600080fdfea264697066735822122090f5e4310a8b66bfdd7fdfbe64bc5b98570e7c1a415ffb0ced3c857cf6c5b14064736f6c634300080a00336101606040526000805462ff00001916620c00001790553480156200002357600080fd5b50604051620058e8380380620058e8833981016040819052620000469162000537565b806001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000085573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ab919062000537565b6000805460ff191690556001600160a01b038116620000dd57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200011c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000142919062000537565b6001600160a01b03166080816001600160a01b031681525050506000816001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200019d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c3919062000537565b6001600160a01b03831661010081905260e081905260408051632495a59960e01b81529051929350600092632495a599916004808201926020929091908290030181865afa1580156200021a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000240919062000537565b6001600160a01b03811660c05290506200025a8162000472565b816001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000299573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002bf919062000537565b6001600160a01b0316610120816001600160a01b031681525050816001600160a01b03166377532ed96040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000318573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033e919062000537565b6001600160a01b0316610140816001600160a01b031681525050816001600160a01b031663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000397573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003bd919062000537565b6001600001600a6101000a8154816001600160a01b0302191690836001600160a01b03160217905550816001600160a01b0316639068a8686040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000425573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044b919062000537565b6001600160a01b031660a0525050600380546001600160a01b031916331790555062000588565b6001600160a01b03811660009081526006602052604090205415620004aa57604051632e5a5c7760e01b815260040160405180910390fd5b61010060055410620004cf57604051631cbbe18560e01b815260040160405180910390fd5b600580546001600160a01b0383166000818152600660209081526040808320600190951b948590558483526004909152812091909155825491929062000515836200055e565b91905055505050565b6001600160a01b03811681146200053457600080fd5b50565b6000602082840312156200054a57600080fd5b815162000557816200051e565b9392505050565b60006000198214156200058157634e487b7160e01b600052601160045260246000fd5b5060010190565b60805160a05160c05160e051610100516101205161014051615248620006a0600039600081816107e20152818161371001526137c501526000818161052f01526136780152600081816103d301528181610e5701528181610ebb015281816124ff0152818161265a01528181612aa101528181612b8c01528181612c4e01528181612d0d0152613b8f015260006105a401526000818161062701528181610d2201528181610db301528181610e0001528181610e3601528181610f3f0152818161203a01528181612b6b015281816130ee015281816134dc015281816135a90152613fe601526000818161081c01528181610fe101526124c20152600081816107a80152818161118401526122cb01526152486000f3fe608060405234801561001057600080fd5b50600436106103415760003560e01c8063830aa745116101bd578063a70bc542116100f9578063e75538c7116100a2578063f9aa028a1161007c578063f9aa028a1461089d578063fdd57645146108bd578063fe47cde7146108f3578063ff6875431461091357600080fd5b8063e75538c714610864578063e958b70414610877578063f67c5bd01461088a57600080fd5b8063db7ceb80116100d3578063db7ceb8014610817578063dc2b21c11461083e578063e1998cf91461085157600080fd5b8063a70bc542146107ca578063c5e10eef146107dd578063d48bfca71461080457600080fd5b806394cf073a116101665780639f5f86ae116101405780639f5f86ae146107745780639fd12b7714610787578063a366f49614610790578063a50cf2c8146107a357600080fd5b806394cf073a146106f557806395373018146107085780639af1d35a1461071b57600080fd5b80638991b2f1116101975780638991b2f1146106af5780638fe3f93f146106cf578063944ac59f146106e257600080fd5b8063830aa7451461066f5780638345f26e146106825780638456cb59146106a757600080fd5b8063458936f51161028c578063570a7af2116102355780636ce4074a1161020f5780636ce4074a146105ef5780636e98e5e41461060f5780636f307dc314610622578063783274381461064957600080fd5b8063570a7af21461059f5780635c975abb146105c6578063654a9eda146105dc57600080fd5b80635063524a116102665780635063524a1461055157806351e3f1601461058457806354fd4d501461059757600080fd5b8063458936f51461050e57806346fb371d146105175780634f0e0ef31461052a57600080fd5b80632630c12f116102ee5780633192195c116102c85780633192195c146104be5780633e8297ca146104e65780633f4ba83a1461050657600080fd5b80632630c12f1461045857806329df0b93146104845780632f7a18811461049757600080fd5b806316f0115b1161031f57806316f0115b146103ce578063172c48c7146103f55780632362a2d81461043757600080fd5b8063055ee9b5146103465780630d8f9cee146103a657806311ca4fc2146103bb575b600080fd5b61037c610354366004614a87565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6103b96103b4366004614aa4565b610949565b005b6103b96103c9366004614aa4565b610a76565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b610408610403366004614add565b610b4e565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835261ffff90911660208301520161039d565b61044a610445366004614b13565b610b66565b60405190815260200161039d565b6001546a0100000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1661037c565b6103b9610492366004614a87565b6110be565b60005461037c906301000000900473ffffffffffffffffffffffffffffffffffffffff1681565b6104d16104cc366004614a87565b611122565b6040805192835260208301919091520161039d565b61044a6104f4366004614a87565b60096020526000908152604090205481565b6103b9611156565b61044a60055481565b6103b9610525366004614b95565b611244565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b61056461055f366004614be6565b61149b565b60408051948552602085019390935291830152606082015260800161039d565b6103b9610592366004614aa4565b611602565b61044a600281565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b60005460ff16604051901515815260200161039d565b6103b96105ea366004614c21565b611703565b6106026105fd366004614d40565b611bbb565b60405161039d9190614e5b565b6103b961061d366004614aa4565b611e8e565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b61065c610657366004614a87565b612036565b60405161ffff909116815260200161039d565b6103b961067d366004614b95565b61210f565b6000546106959062010000900460ff1681565b60405160ff909116815260200161039d565b6103b961229d565b61044a6106bd366004614a87565b60086020526000908152604090205481565b61037c6106dd366004614e6e565b612389565b6103b96106f0366004614ea5565b612718565b61044a610703366004614f0a565b612845565b6103b9610716366004614a87565b612e5a565b6001546040805161ffff808416825262010000840481166020830152640100000000840481169282019290925266010000000000008304821660608201526801000000000000000090920416608082015260a00161039d565b6103b9610782366004614a87565b612f85565b61044a60075481565b6103b961079e366004614add565b613045565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b96107d8366004614f4c565b61309b565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b9610812366004614a87565b613221565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b961084c366004614f81565b61327b565b6103b961085f366004614aa4565b613306565b610408610872366004614add565b6134c9565b61037c610885366004614a87565b613541565b61044a610898366004614a87565b6135a5565b60035461037c9073ffffffffffffffffffffffffffffffffffffffff1681565b61037c6108cb366004614a87565b600b6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b600c5461037c9073ffffffffffffffffffffffffffffffffffffffff1681565b61037c610921366004614a87565b600a6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561099b57506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b156109d2576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff1615610a14576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055610a4a828261362e565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b60035473ffffffffffffffffffffffffffffffffffffffff163314610ac7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805473ffffffffffffffffffffffffffffffffffffffff9384166301000000027fffffffffffffffffff0000000000000000000000000000000000000000ffffff90911617905560018054919092166a0100000000000000000000027fffff0000000000000000000000000000000000000000ffffffffffffffffffff909116179055565b600080610b5d6001841b6134c9565b91509150915091565b6000805460ff1615610bd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064015b60405180910390fd5b600054610100900460ff1615610c1b576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff163314610ca0576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610cab89613541565b90506000806000806000610cbe86611122565b9094509050610ccf8c8e868461149b565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152939b5093985090955093506000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015610d6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8f9190614fa4565b9050610d9b8887614fec565b610da6906001614fec565b811115610de657610de1877f00000000000000000000000000000000000000000000000000000000000000008d60018c8b870303038d61366e565b610e30565b610e3073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168d8960018a8d01869003016138c0565b610e7e877f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000089600061366e565b6040517fca9505e40000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604481018490527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ca9505e490606401600060405180830381600087803b158015610f1457600080fd5b505af1158015610f28573d6000803e3d6000fd5b50505050505050506001841115610f6757610f67837f00000000000000000000000000000000000000000000000000000000000000008d87600061366e565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260086020526040902054861916610f9c8489888461395b565b6040517f89b77b3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f000000000000000000000000000000000000000000000000000000000000000016906389b77b3e90602401600060405180830381600087803b15801561102557600080fd5b505af1158015611039573d6000803e3d6000fd5b50505073ffffffffffffffffffffffffffffffffffffffff909c16600090815260026020526040812080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550929a9950505050505050505050565b6000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314611116576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61111f81613a35565b50565b60008060008061113185613aa6565b91955092509050816111438286615004565b61114d9190615041565b92505050915091565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156111e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611204919061507c565b61123a576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611242613c24565b565b60005460ff16156112b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156112f3576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100178155338152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff9081169084161480159061137457506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b80156113985750600c5473ffffffffffffffffffffffffffffffffffffffff163314155b806113b7575073ffffffffffffffffffffffffffffffffffffffff8316155b156113ee576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113f7826135a5565b61142d576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061143885613541565b9050611448838583856000613d05565b61146c5761145b83858360006001613d05565b5061146a838583856001613d05565b505b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b6001546000908190819081906127109061ffff166114b98888615099565b6114c39190615004565b6114cd9190615041565b6114d79086614fec565b935060018760028111156114ed576114ed6150b0565b1415611587576001546000906127109061151390640100000000900461ffff168b615004565b61151d9190615041565b6001549091506127109061153b9062010000900461ffff168b615004565b6115459190615041565b61154f9086614fec565b94508481111561156657600185820303935061156a565b8094505b85811061157b578585039250611581565b84860391505b506115f7565b600287600281111561159b5761159b6150b0565b14156115f157600154600090612710906115c59068010000000000000000900461ffff168b615004565b6115cf9190615041565b6001549091506127109061153b906601000000000000900461ffff168b615004565b84840391505b945094509450949050565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561165457506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b1561168b576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff16156116cd576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055610a4a8282613ea6565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561175557506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b1561178c576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff16156117ce576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790556118048584613ea6565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152600091908616906370a0823190602401602060405180830381865afa158015611874573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118989190614fa4565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529192506000918616906370a0823190602401602060405180830381865afa15801561190a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192e9190614fa4565b60015490915060009081906a0100000000000000000000900473ffffffffffffffffffffffffffffffffffffffff16635cecbd0e61196c8689615099565b8a6119778988615099565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152600481019390935273ffffffffffffffffffffffffffffffffffffffff918216602484015260448301528a1660648201526084016040805180830381865afa1580156119f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1791906150df565b9150915060018411611a2d57611a2d898961362e565b611a3687612036565b611a449061ffff1682615004565b9050611a4f88612036565b611a5d9061ffff1683615004565b9150818110611a7857611a6f89613a35565b5050505061146c565b73ffffffffffffffffffffffffffffffffffffffff891660009081526009602052604081205483611ab56b033b2e3c9fd0803ce800000085615004565b611abf9190615041565b611ad5906b033b2e3c9fd0803ce8000000615099565b611adf9190614fec565b60015490915061271090611b0a906b033b2e3c9fd0803ce80000009062010000900461ffff16615004565b611b149190615041565b8111611b555773ffffffffffffffffffffffffffffffffffffffff8a166000908152600960205260409020819055611b4b8a613a35565b505050505061146c565b611b5e8a613f56565b50505073ffffffffffffffffffffffffffffffffffffffff871660009081526009602052604090206001905550505050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b6060611bc960005460ff1690565b15611c30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff1615611c72576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100178155338152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff908116908416141580611ce7575073ffffffffffffffffffffffffffffffffffffffff8316155b15611d3d57600c5473ffffffffffffffffffffffffffffffffffffffff163314611d3d576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611d4885613541565b90508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167faed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab0360405160405180910390a36040517f1cff79cd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821690631cff79cd90611df89087908790600401615103565b6000604051808303816000875af1158015611e17573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611e5d9190810190615132565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905595945050505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314611edf576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821615611f4f5773ffffffffffffffffffffffffffffffffffffffff8281166000908152600a6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169183169190911790555b73ffffffffffffffffffffffffffffffffffffffff811615611fbf5773ffffffffffffffffffffffffffffffffffffffff8181166000908152600b6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169184169190911790555b73ffffffffffffffffffffffffffffffffffffffff811673cccccccccccccccccccccccccccccccccccccccc141561203257600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790555b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120ba5750506001547e01000000000000000000000000000000000000000000000000000000000000900461ffff1690565b60006120c5836135a5565b9050806120fe576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612107816134c9565b949350505050565b60005460ff161561217c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156121be576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff163314612243576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61224d8383613ea6565b61226f73ffffffffffffffffffffffffffffffffffffffff83168585846138c0565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555050565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015612327573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061234b919061507c565b612381576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112426142d4565b6000805460ff16156123f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff1615612439576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff1633146124be576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166321d18456857f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612568573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061258c9190614fa4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168152600481019290925260248201526044016020604051808303816000875af11580156125e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061260b91906151a0565b6040517fbf28068b0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff80831660248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063bf28068b90604401600060405180830381600087803b1580156126a057600080fd5b505af11580156126b4573d6000803e3d6000fd5b505050506126c28382614394565b73ffffffffffffffffffffffffffffffffffffffff811660009081526008602052604081206001905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690559392505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314612769576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805461ffff92831668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9484166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff96851664010000000002969096167fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff97851662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000090931694909816939093171794909416949094179190911716919091179055565b6000805460ff16156128b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156128f5576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff16331461297a576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080600061298887613aa6565b925092509250846129a25761299d8684615099565b6129ac565b6129ac8684614fec565b935060008515612b045769021e19e0c9bab24000008510612a15576129d583603689901c615004565b6129e3603686901c84615004565b6129ed9190614fec565b603686901c6129fc8585615004565b612a069190615004565b612a109190615041565b612a52565b612a1f8388615004565b612a298584615004565b612a339190614fec565b85612a3e8585615004565b612a489190615004565b612a529190615041565b6040517fbf28068b0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff8a811660248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063bf28068b90604401600060405180830381600087803b158015612ae757600080fd5b505af1158015612afb573d6000803e3d6000fd5b50505050612d9f565b60008484612b128583615004565b612b1c9190615041565b612b269190615099565b60015490915060009061271090612b419061ffff1684615004565b612b4b9190615041565b905073ffffffffffffffffffffffffffffffffffffffff8a1663d1660f997f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000084612bb6878f614fec565b612bc09190614fec565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b158015612c3457600080fd5b505af1158015612c48573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ca9505e4838b612c949190614fec565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815260048101919091526024810184905260006044820152606401600060405180830381600087803b158015612cf357600080fd5b505af1158015612d07573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d9a9190614fa4565b925050505b6040517f16128211000000000000000000000000000000000000000000000000000000008152600481018690526024810182905273ffffffffffffffffffffffffffffffffffffffff891690631612821190604401600060405180830381600087803b158015612e0e57600080fd5b505af1158015612e22573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055509498975050505050505050565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff16158015612eac57506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b15612ee3576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff1615612f25576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055612f5a81613f56565b50600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b60035473ffffffffffffffffffffffffffffffffffffffff163314612fd6576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517ff62005acebe9b616aefb5f248b48f5e89f28437b27d1eebc0b2d911209f297af90600090a250565b60035473ffffffffffffffffffffffffffffffffffffffff163314613096576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600755565b60035473ffffffffffffffffffffffffffffffffffffffff1633146130ec576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613193576001805461ffff83167e01000000000000000000000000000000000000000000000000000000000000027dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790555050565b600061319e836135a5565b9050806131d7576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000908152600460205260409020805473ffffffffffffffffffffffffffffffffffffffff1675ffff000000000000000000000000000000000000000060a084901b161790555050565b60035473ffffffffffffffffffffffffffffffffffffffff163314613272576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61111f81614467565b60035473ffffffffffffffffffffffffffffffffffffffff1633146132cc576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805460ff90921662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff909216919091179055565b60005460ff1615613373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156133b5576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff16331461343a576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061344583613541565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260026020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055905061349c8282614394565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b60008082600114156135275750506001547f0000000000000000000000000000000000000000000000000000000000000000927e0100000000000000000000000000000000000000000000000000000000000090910461ffff169150565b50506000908152600460205260409020549060a082901c90565b73ffffffffffffffffffffffffffffffffffffffff80821660009081526002602052604090205416806135a0576040517fb5ba4c4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146136255773ffffffffffffffffffffffffffffffffffffffff8216600090815260066020526040902054613628565b60015b92915050565b6000613639826135a5565b73ffffffffffffffffffffffffffffffffffffffff909316600090815260086020526040902080549319939093169092555050565b8080156136c657507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b15613828576040517fd1660f9900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301526044820184905286169063d1660f9990606401600060405180830381600087803b15801561376357600080fd5b505af1158015613777573d6000803e3d6000fd5b50506040517f5869dba800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690527f0000000000000000000000000000000000000000000000000000000000000000169250635869dba89150604401600060405180830381600087803b15801561380b57600080fd5b505af115801561381f573d6000803e3d6000fd5b505050506138b9565b6040517fd1660f9900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301526044820184905286169063d1660f9990606401600060405180830381600087803b1580156138a057600080fd5b505af11580156138b4573d6000803e3d6000fd5b505050505b5050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261395590859061455b565b50505050565b60025b8181116138b95781811615613a2d576000613978826134c9565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529192506000918316906370a0823190602401602060405180830381865afa1580156139eb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a0f9190614fa4565b90506002811115613a2a57613a2a878388600185038961366e565b50505b60011b61395e565b73ffffffffffffffffffffffffffffffffffffffff811660009081526008602052604081205490613a6582614667565b60005490915062010000900460ff16811115613aa1576000613a86836146a7565b613a91906001614fec565b905061395584848460008561470b565b505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff16631afbb7a46040518163ffffffff1660e01b8152600401602060405180830381865afa158015613af6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b1a9190614fa4565b92508373ffffffffffffffffffffffffffffffffffffffff166317d11a156040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b8b9190614fa4565b91507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bf8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c1c9190614fa4565b929491935050565b60005460ff16613c90576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610bd0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6040805173ffffffffffffffffffffffffffffffffffffffff8681166024830152604480830186905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b30000000000000000000000000000000000000000000000000000000017905291517f1cff79cd000000000000000000000000000000000000000000000000000000008152600092861691631cff79cd91613dc6918a91600401615103565b6000604051808303816000875af1925050508015613e2457506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052613e219190810190615132565b60015b613e2d57613e61565b80511580613e50575080806020019051810190613e4a919061507c565b15156001145b15613e5f576001915050613e9d565b505b8115613e99576040517f76e3e29c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060005b95945050505050565b6000613eb1826135a5565b9050801580613ec35750600754811615155b15613efa576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83166000908152600860205260409020548116613aa15773ffffffffffffffffffffffffffffffffffffffff83166000908152600860205260409020805482179055505050565b60015473ffffffffffffffffffffffffffffffffffffffff8281166000908152600860205260408120546a010000000000000000000090930490911691908080613f9f86611122565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526127108202600482015273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350908716915063f9a6503090604401602060405180830381865afa15801561403a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061405e9190614fa4565b9250614069846146a7565b6001019150506000806000805b848110156142a157801561408f5760018186031b614092565b60015b935086841615614299576000806140a8866134c9565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8e811660048301529294509092506000918416906370a0823190602401602060405180830381865afa15801561411d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141419190614fa4565b9050600181111561428c576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff848116602483015261ffff841691908d169063f9a6503090604401602060405180830381865afa1580156141c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141ea9190614fa4565b6141f49190615004565b6141fe9087614fec565b95508886106142875760006142128b614667565b60005490915062010000900460ff16811115614249576142448d8c836001891561423e57898e0361470b565b8d61470b565b614278565b85156142785773ffffffffffffffffffffffffffffffffffffffff8d1660009081526008602052604090208b90555b50505050505050505050505050565b614295565b98861898600194505b5050505b600101614076565b506040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005460ff1615614341576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613cdb3390565b73ffffffffffffffffffffffffffffffffffffffff821615806143dd575073ffffffffffffffffffffffffffffffffffffffff8281166000908152600260205260409020541615155b15614414576040517f9e59609e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff918216600090815260026020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001691909216179055565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260066020526040902054156144c4576040517f2e5a5c7700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61010060055410614501576040517f1cbbe18500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005805473ffffffffffffffffffffffffffffffffffffffff83166000818152600660209081526040808320600190951b9485905584835260049091528120919091558254919290614552836151bd565b91905055505050565b60006145bd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166148799092919063ffffffff16565b805190915015613aa157808060200190518101906145db919061507c565b613aa1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610bd0565b60008060005b6101008110156146a0576001811b91508382161561468c578260010192505b838210614698576146a0565b60010161466d565b5050919050565b600081600114156146ba57506000919050565b61010060015b60016146cc8284614fec565b901c92506001831b848116158015906146e75750600185851c145b156146f257506146a0565b84811061470157839250614705565b8391505b506146c0565b815b81811015614846576001811b8581161561483d57600061472c826134c9565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529192506000918316906370a0823190602401602060405180830381865afa15801561479f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147c39190614fa4565b90506001811161483a57600054978318977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9097019660ff6201000090910416871161483a5750505073ffffffffffffffffffffffffffffffffffffffff86166000908152600860205260409020859055506138b9565b50505b5060010161470d565b506040517f53275fcb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606148888484600085614892565b90505b9392505050565b606082471015614924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610bd0565b843b61498c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610bd0565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516149b591906151f6565b60006040518083038185875af1925050503d80600081146149f2576040519150601f19603f3d011682016040523d82523d6000602084013e6149f7565b606091505b5091509150614a07828286614a12565b979650505050505050565b60608315614a2157508161488b565b825115614a315782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd09190614e5b565b73ffffffffffffffffffffffffffffffffffffffff8116811461111f57600080fd5b600060208284031215614a9957600080fd5b813561488b81614a65565b60008060408385031215614ab757600080fd5b8235614ac281614a65565b91506020830135614ad281614a65565b809150509250929050565b600060208284031215614aef57600080fd5b5035919050565b8035600381106135a057600080fd5b801515811461111f57600080fd5b600080600080600080600060e0888a031215614b2e57600080fd5b8735614b3981614a65565b9650614b4760208901614af6565b9550604088013594506060880135614b5e81614a65565b93506080880135614b6e81614a65565b925060a0880135915060c0880135614b8581614b05565b8091505092959891949750929550565b60008060008060808587031215614bab57600080fd5b8435614bb681614a65565b93506020850135614bc681614a65565b92506040850135614bd681614a65565b9396929550929360600135925050565b60008060008060808587031215614bfc57600080fd5b84359350614c0c60208601614af6565b93969395505050506040820135916060013590565b600080600080600060a08688031215614c3957600080fd5b8535614c4481614a65565b94506020860135614c5481614a65565b93506040860135614c6481614a65565b94979396509394606081013594506080013592915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614cf257614cf2614c7c565b604052919050565b600067ffffffffffffffff821115614d1457614d14614c7c565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600080600060608486031215614d5557600080fd5b8335614d6081614a65565b92506020840135614d7081614a65565b9150604084013567ffffffffffffffff811115614d8c57600080fd5b8401601f81018613614d9d57600080fd5b8035614db0614dab82614cfa565b614cab565b818152876020838501011115614dc557600080fd5b816020840160208301376000602083830101528093505050509250925092565b60005b83811015614e00578181015183820152602001614de8565b838111156139555750506000910152565b60008151808452614e29816020860160208601614de5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061488b6020830184614e11565b60008060408385031215614e8157600080fd5b823591506020830135614ad281614a65565b803561ffff811681146135a057600080fd5b600080600080600060a08688031215614ebd57600080fd5b614ec686614e93565b9450614ed460208701614e93565b9350614ee260408701614e93565b9250614ef060608701614e93565b9150614efe60808701614e93565b90509295509295909350565b600080600060608486031215614f1f57600080fd5b8335614f2a81614a65565b9250602084013591506040840135614f4181614b05565b809150509250925092565b60008060408385031215614f5f57600080fd5b8235614f6a81614a65565b9150614f7860208401614e93565b90509250929050565b600060208284031215614f9357600080fd5b813560ff8116811461488b57600080fd5b600060208284031215614fb657600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115614fff57614fff614fbd565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561503c5761503c614fbd565b500290565b600082615077577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60006020828403121561508e57600080fd5b815161488b81614b05565b6000828210156150ab576150ab614fbd565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600080604083850312156150f257600080fd5b505080516020909101519092909150565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015260006148886040830184614e11565b60006020828403121561514457600080fd5b815167ffffffffffffffff81111561515b57600080fd5b8201601f8101841361516c57600080fd5b805161517a614dab82614cfa565b81815285602083850101111561518f57600080fd5b613e9d826020830160208601614de5565b6000602082840312156151b257600080fd5b815161488b81614a65565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156151ef576151ef614fbd565b5060010190565b60008251615208818460208701614de5565b919091019291505056fea26469706673582212209d39bb9d4972b515acdad1ffb757acd15e103ca6ee762f88a6382b36243734ba64736f6c634300080a00336101406040523480156200001257600080fd5b5060405162005e9738038062005e97833981016040819052620000359162000198565b60016000556001600160a01b0383166200006257604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038316608081905260408051636f307dc360e01b81529051636f307dc3916004808201926020929091908290030181865afa158015620000ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d39190620001ea565b6001600160a01b031660a0816001600160a01b031681525050826001600160a01b0316634f0e0ef36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200012b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001519190620001ea565b6001600160a01b0390811660c0529190911660e0819052151561010052151561012052506200020f565b80516001600160a01b03811681146200019357600080fd5b919050565b600080600060608486031215620001ae57600080fd5b620001b9846200017b565b9250620001c9602085016200017b565b915060408401518015158114620001df57600080fd5b809150509250925092565b600060208284031215620001fd57600080fd5b62000208826200017b565b9392505050565b60805160a05160c05160e0516101005161012051615a86620004116000396000818161061101528181612fb5015261481f01526000818161031701528181610dde015281816144f901526146e5015260008181610557015281816146a901526147a901526000818161034b0152818161387d015261392d01526000818161047301528181611bfe0152818161274f0152818161280d0152818161366a01526137dd015260008181610665015281816109d801528181610b0301528181610bd501528181610cdd01528181610e6501528181610fe30152818161114e0152818161120e0152818161132e015281816114510152818161162b01528181611708015281816117e0015281816119e501528181611b1201528181611d9501528181611ed5015281816120040152818161216801528181612290015281816123c601528181612568015281816126390152818161266f0152818161293d01528181612a2101528181612a8a01528181612bde01528181612d2601528181612e6801528181612ec2015281816130a10152818161311b015281816131b401528181613341015281816134c10152818161358a0152818161372f01528181613a1a01528181613b2e01528181613dbb015281816142200152818161432801528181614492015281816148e7015281816149e801528181614aae0152614d8f0152615a866000f3fe6080604052600436106102695760003560e01c8063860aefcf11610153578063c7de38a6116100cb578063dfd594651161007f578063eb9606df11610064578063eb9606df1461081e578063f9eaee0d1461083e578063ffd9b9071461085e57600080fd5b8063dfd59465146107de578063e1f21c67146107fe57600080fd5b8063cff0ab96116100b0578063cff0ab96146106ef578063d9ccbec114610783578063dcf65482146107be57600080fd5b8063c7de38a6146106a7578063caa5c23f146106dc57600080fd5b80639c55a05411610122578063b55bb84b11610107578063b55bb84b14610633578063c12c21c014610653578063c690908a1461068757600080fd5b80639c55a054146105df578063b1836d32146105ff57600080fd5b8063860aefcf146104db5780639408b63f146105455780639b67ab30146105795780639be0536a146105bd57600080fd5b80635d91a0e0116101e65780636d19b486116101b55780637071b7c51161019a5780637071b7c51461049557806379c0ef91146104a857806382871ace146104c857600080fd5b80636d19b486146104415780636f307dc31461046157600080fd5b80635d91a0e0146103e85780635f73fbec146103fb578063601d66f61461040e5780636c8f225d1461042e57600080fd5b80633d9287fa1161023d5780635019e20a116102225780635019e20a1461039257806354fd4d50146103b257806359781034146103d557600080fd5b80633d9287fa146103055780634f0e0ef31461033957600080fd5b8062842b571461026e578063256ac915146102905780632a7ba1f7146102c55780632b7c7b11146102e5575b600080fd5b34801561027a57600080fd5b5061028e6102893660046151bf565b61087e565b005b34801561029c57600080fd5b506102b06102ab3660046151f8565b61098e565b60405190151581526020015b60405180910390f35b3480156102d157600080fd5b5061028e6102e0366004615215565b610a61565b3480156102f157600080fd5b5061028e610300366004615215565b610c3b565b34801561031157600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561034557600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102bc565b34801561039e57600080fd5b5061028e6103ad3660046151f8565b610d6a565b3480156103be57600080fd5b506103c7600281565b6040519081526020016102bc565b61028e6103e336600461522e565b61108c565b61028e6103f63660046152bb565b611275565b61028e610409366004615340565b611589565b34801561041a57600080fd5b5061028e6104293660046153d8565b6117de565b61028e61043c36600461541b565b611900565b34801561044d57600080fd5b506102b061045c3660046151f8565b611c31565b34801561046d57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b61028e6104a336600461546e565b611c60565b3480156104b457600080fd5b5061036d6104c3366004615215565b611f3e565b61028e6104d63660046152bb565b611f4b565b3480156104e757600080fd5b5060025461051c906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041682565b604080516fffffffffffffffffffffffffffffffff9384168152929091166020830152016102bc565b34801561055157600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561058557600080fd5b506004546040805167ffffffffffffffff608084901c1681526fffffffffffffffffffffffffffffffff9092166020830152016102bc565b3480156105c957600080fd5b506105d261227d565b6040516102bc91906154e2565b3480156105eb57600080fd5b5061028e6105fa36600461553c565b61228e565b34801561060b57600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561063f57600080fd5b5061028e61064e3660046151f8565b6123c4565b34801561065f57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561069357600080fd5b5061028e6106a23660046151f8565b6124c6565b3480156106b357600080fd5b506106c76106c23660046151f8565b612668565b604080519283526020830191909152016102bc565b61028e6106ea366004615557565b61289b565b3480156106fb57600080fd5b5060015461074e906fffffffffffffffffffffffffffffffff811690700100000000000000000000000000000000810460ff169071010000000000000000000000000000000000900464ffffffffff1683565b604080516fffffffffffffffffffffffffffffffff9094168452911515602084015264ffffffffff16908201526060016102bc565b34801561078f57600080fd5b506102b061079e366004615599565b600360209081526000928352604080842090915290825290205460ff1681565b3480156107ca57600080fd5b5061028e6107d93660046151f8565b612a88565b3480156107ea57600080fd5b506103c76107f93660046151f8565b612b86565b34801561080a57600080fd5b5061028e61081936600461522e565b612c6d565b34801561082a57600080fd5b5061028e6108393660046155c7565b612ec0565b34801561084a57600080fd5b506102b06108593660046151f8565b613057565b34801561086a57600080fd5b5061028e6108793660046155ee565b6131b2565b600260005414156108f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b6002600090815573ffffffffffffffffffffffffffffffffffffffff8316808252600360209081526040808420338086529083529381902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081527f9b3258bc4904fd6426b99843e206c6c7cdb1fd0f040121c25b71dafbb3851ee0910160405180910390a350506001600055565b6040517f055ee9b500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063055ee9b590602401602060405180830381865afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a43919061560b565b73ffffffffffffffffffffffffffffffffffffffff16141592915050565b60026000541415610ace576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610b5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b83919061560b565b9050610b903382846132eb565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906395373018906024015b600060405180830381600087803b158015610c1a57600080fd5b505af1158015610c2e573d6000803e3d6000fd5b5050600160005550505050565b60026000541415610ca8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610d39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5d919061560b565b9050610b90338284613411565b60026000541415610dd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000557f000000000000000000000000000000000000000000000000000000000000000015610e34576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610ec1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee5919061560b565b33600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915290205490915060ff16610f52576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f5d82613583565b5090508015610f98576040517ff713841e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b15801561102757600080fd5b505af115801561103b573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692503391507f93c70cc9715bef0d83edf2095f3595402279d274f402a73ffc17f1bcb19d863d90600090a35050600160005550565b600260005414156110f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611106613875565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063e958b70490602401602060405180830381865afa158015611197573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bb919061560b565b90506111c9848285856139b7565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401600060405180830381600087803b15801561125257600080fd5b505af1158015611266573d6000803e3d6000fd5b50506001600055505050505050565b600260005414156112e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611375573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611399919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166113e8576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806113f483613583565b915091508161142f576040517f1fdd676f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611437613875565b831561144d5761144d85858b8660016000613ae3565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632362a2d88b600185338e8e8e6040518863ffffffff1660e01b81526004016114b59796959493929190615663565b6020604051808303816000875af11580156114d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f891906156bf565b90508873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f7dfecd8419723a9d3954585a30c2a270165d70aafa146c11c1e1b88ae14390648460405161157091815260200190565b60405180910390a4505060016000555050505050505050565b600260005414156115f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ab919061560b565b90506116b5613875565b81156116cb576116cb8383338460016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d89061174a903390600090819083908d908d908d90600401615663565b6020604051808303816000875af1158015611769573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178d91906156bf565b5060405173ffffffffffffffffffffffffffffffffffffffff87169033907f460ad03b1cf79b1d64d3aefa28475f110ab66e84649c52bb41ed796b9b39198190600090a35050600160005550505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611849573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118d1576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff90811670010000000000000000000000000000000002911617600255565b6002600054141561196d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000908155606461198461ffff851687615707565b61198e9190615744565b9050611999816144f7565b6119a2816145e8565b6119ab84614668565b6119b3613875565b6040517f172c48c7000000000000000000000000000000000000000000000000000000008152600060048201819052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a64919061577f565b61ffff169150611a789050816127106157ae565b611a829083615707565b611a8c8288615707565b11611ac3576040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff86811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611b5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b81919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638587604051611bef92919091825261ffff16602082015260400190565b60405180910390a3611c2386827f00000000000000000000000000000000000000000000000000000000000000008a6139b7565b505060016000555050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526006602052604081205415155b92915050565b60026000541415611ccd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611cdb856144f7565b611ce484614668565b611ced856145e8565b600154700100000000000000000000000000000000900460ff1615611d3e576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d46613875565b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff85811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611de0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e04919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638885604051611e7292919091825261ffff16602082015260400190565b60405180910390a38215611e9057611e908484878460006001613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015611f1957600080fd5b505af1158015611f2d573d6000803e3d6000fd5b505060016000555050505050505050565b6000611c5a60058361480f565b60026000541415611fb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa15801561204b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206f919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166120be576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120c661481b565b6120fc576040517f7e52ccb400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061210782612668565b509050612112613875565b82156121285761212884848a8560016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d8906121aa908c90600290879033908f908f908f90600401615663565b6020604051808303816000875af11580156121c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ed91906156bf565b90508773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167ffada13ff2d5e1a1d9da37ad4a4130893b34e3c69c32b17f87ec31fd661b867078460405161226591815260200190565b60405180910390a45050600160005550505050505050565b6060612289600561486b565b905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612381576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561242f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612453919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146124b7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614878565b5050565b60026000541415612533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156125c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e8919061560b565b90506125f4818361489a565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401610c00565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126fc919061560b565b905060008061270b8387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156127a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127c991906156bf565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015291965061271091851690637afb010490604401602060405180830381865afa158015612863573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061288791906156bf565b6128919190615744565b9350505050915091565b60026000541415612908576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129bd919061560b565b90506129c7613875565b8115612a7e576129dc83833384600080613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015612a6557600080fd5b505af1158015612a79573d6000803e3d6000fd5b505050505b5050600160005550565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612af3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b17919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b7b576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614c92565b600080612b9283612668565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152919350600092507f000000000000000000000000000000000000000000000000000000000000000090911690633192195c906024016040805180830381865afa158015612c26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4a91906157c5565b9150819050612c5b61271084615707565b612c659190615744565b949350505050565b60026000541415612cda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063fdd5764590602401602060405180830381865afa158015612d6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d91919061560b565b73ffffffffffffffffffffffffffffffffffffffff161480612dd7575073ffffffffffffffffffffffffffffffffffffffff831660009081526006602052604090205415155b15612e0e576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612eac57600080fd5b505af1158015611c23573d6000803e3d6000fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f4f919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612fb3576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000061300a576040517f50dd11fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805464ffffffffff90921671010000000000000000000000000000000000027fffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffffff909216919091179055565b6040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063f67c5bd090602401602060405180830381865afa1580156130e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061310c91906156bf565b905080158015906131ab5750807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015613184573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a891906156bf565b16155b9392505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561321d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613241919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146132a5576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018054911515700100000000000000000000000000000000027fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff909216919091179055565b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600060448301819052917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561338c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133b091906156bf565b90506133bb816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f98274bf834d179ee08dc0604071b0dc90b54731bd5f725a5a96a39a86bce025a8360405161340391815260200190565b60405180910390a250505050565b61341a816144f7565b600154700100000000000000000000000000000000900460ff161561346b576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600160448301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561350c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061353091906156bf565b905061353b816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f9cac51154cc0d835e2f9c9d1f59a9344588cee107f4203bf58a8c797e3a58c458360405161340391815260200190565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613617919061560b565b90506000806136268387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156136c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136e491906156bf565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529195506000917f00000000000000000000000000000000000000000000000000000000000000001690633192195c906024016040805180830381865afa158015613775573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061379991906157c5565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350600092506127109187169063f9a6503090604401602060405180830381865afa158015613837573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061385b91906156bf565b6138659190615707565b9092109794965093945050505050565b34156139b5577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156138e357600080fd5b505af11580156138f7573d6000803e3d6000fd5b50506040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201523460248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16935063a9059cbb925060440190506020604051808303816000875af115801561398f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139b391906157e9565b505b565b6139c084614cb4565b6040517f830aa74500000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f0000000000000000000000000000000000000000000000000000000000000000169063830aa74590608401600060405180830381600087803b158015613a5e57600080fd5b505af1158015613a72573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fa32435755c235de2976ed44a75a2f85cb01faf0c894f639fe0c32bb9455fea8f83604051613ad591815260200190565b60405180910390a350505050565b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301523060248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b158015613b7257600080fd5b505af1158015613b86573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff871692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a28460005b8181101561441d5736888883818110613bea57613bea615806565b9050602002810190613bfc9190615835565b90506004613c0d6020830183615873565b90501015613c47576040517fe2b0e50600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b30613c5560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16141561421c578415613ca9576040517f5fb9107f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613cb86020830183615873565b613cc1916158d8565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167f59781034000000000000000000000000000000000000000000000000000000001415613e3c5760008080613d1e6020860186615873565b613d2c916004908290615920565b810190613d39919061522e565b925092509250613e34838c73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614613e2b576040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015613e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e26919061560b565b613e2d565b8b5b84846139b7565b505050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2b7c7b11000000000000000000000000000000000000000000000000000000001415613ec757600194506000613e996020840184615873565b613ea7916004908290615920565b810190613eb49190615215565b9050613ec1898983613411565b50614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2a7ba1f7000000000000000000000000000000000000000000000000000000001415613f80578415613f49576040517fc0b0caa800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613f586020840184615873565b613f66916004908290615920565b810190613f739190615215565b9050613ec18989836132eb565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f233a8caa0000000000000000000000000000000000000000000000000000000014156140e457600080613fda6020850185615873565b613fe8916004908290615920565b810190613ff5919061594a565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c8116600483015292945090925082918416906370a0823190602401602060405180830381865afa158015614069573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061408d91906156bf565b10156140dd576040517fa5ac537300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016108e7565b5050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fc690908a00000000000000000000000000000000000000000000000000000000141561416457600061413d6020840184615873565b61414b916004908290615920565b81019061415891906151f8565b9050613ec1888261489a565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f23e27a640000000000000000000000000000000000000000000000000000000014156141e45760006141bd6020840184615873565b6141cb916004908290615920565b8101906141d891906151f8565b9050613ec18882614d42565b6040517f1e9e7e7a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50614414565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff68754361426760208501856151f8565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156142d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142f4919061560b565b73ffffffffffffffffffffffffffffffffffffffff16148061436d575073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001661435560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16145b156143a4576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6144126143b46020830183615873565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506143f69250505060208401846151f8565b73ffffffffffffffffffffffffffffffffffffffff1690614e39565b505b50600101613bcf565b506040517f60c8e8938c9a0c0d88a98d6f1c562ce68077e12bf3edb8047378f2f736cb45b490600090a16040517fe1998cf900000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff86811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b1580156144d657600080fd5b505af11580156144ea573d6000803e3d6000fd5b5050505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006139b3576001546fffffffffffffffffffffffffffffffff9081169081146124c257600454608081901c906fffffffffffffffffffffffffffffffff16600067ffffffffffffffff8316431461456e578461458a565b61458a6fffffffffffffffffffffffffffffffff831686615976565b9050838111156145c6576040517f675f1a5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff81164360801b176004555050505050565b6002546fffffffffffffffffffffffffffffffff16811080614631575060025470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681115b156139b3576040517fce16799400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61467061481b565b156146a7576040517f63fc31c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1615614806577f0000000000000000000000000000000000000000000000000000000000000000801561472657503373ffffffffffffffffffffffffffffffffffffffff821614155b1561475d576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600160248301527f00000000000000000000000000000000000000000000000000000000000000001690639dc29fac90604401600060405180830381600087803b1580156147ed57600080fd5b505af1158015614801573d6000803e3d6000fd5b505050505b6139b381614cb4565b60006131ab8383614e7b565b60007f0000000000000000000000000000000000000000000000000000000000000000801561228957505060015471010000000000000000000000000000000000900464ffffffffff1642101590565b606060006131ab83614ea5565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f01565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561492b57600080fd5b505af115801561493f573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527fdf498aa1c340e992665d6fb4f3be8436d452c45a630cb6d7fab7963da39bac8793500190505b60405180910390a15050565b6040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600091829160019183917f00000000000000000000000000000000000000000000000000000000000000001690638991b2f190602401602060405180830381865afa158015614a2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a5391906156bf565b90505b808211614c895780821615614c7d576040517fe75538c700000000000000000000000000000000000000000000000000000000815260048101839052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e75538c7906024016040805180830381865afa158015614af4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b18919061577f565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529294509092506000918416906370a0823190602401602060405180830381865afa158015614b8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bb191906156bf565b90506001811115614c79576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff8481166024830152600091908b169063f9a6503090604401602060405180830381865afa158015614c33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c5791906156bf565b978801979050614c6b61ffff841682615707565b614c759088615976565b9650505b5050505b600182901b9150614a56565b50509250929050565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f50565b3373ffffffffffffffffffffffffffffffffffffffff821614801590614d0b575033600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16155b156139b3576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b158015614dd357600080fd5b505af1158015614de7573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527f69db9e9764da61b6681b89fb0f5be018506e0342036e56b59c3015a620d60977935001905061498d565b60606131ab83836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250615043565b6000826000018281548110614e9257614e92615806565b9060005260206000200154905092915050565b606081600001805480602002602001604051908101604052809291908181526020018280548015614ef557602002820191906000526020600020905b815481526020019060010190808311614ee1575b50505050509050919050565b6000818152600183016020526040812054614f4857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611c5a565b506000611c5a565b60008181526001830160205260408120548015615039576000614f746001836157ae565b8554909150600090614f88906001906157ae565b9050818114614fed576000866000018281548110614fa857614fa8615806565b9060005260206000200154905080876000018481548110614fcb57614fcb615806565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080614ffe57614ffe61598e565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611c5a565b6000915050611c5a565b6060612c65848460008585843b6150b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108e7565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516150df91906159ed565b60006040518083038185875af1925050503d806000811461511c576040519150601f19603f3d011682016040523d82523d6000602084013e615121565b606091505b509150915061513182828661513c565b979650505050505050565b6060831561514b5750816131ab565b82511561515b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e791906159ff565b73ffffffffffffffffffffffffffffffffffffffff811681146139b357600080fd5b80151581146139b357600080fd5b600080604083850312156151d257600080fd5b82356151dd8161518f565b915060208301356151ed816151b1565b809150509250929050565b60006020828403121561520a57600080fd5b81356131ab8161518f565b60006020828403121561522757600080fd5b5035919050565b60008060006060848603121561524357600080fd5b833561524e8161518f565b9250602084013561525e8161518f565b929592945050506040919091013590565b60008083601f84011261528157600080fd5b50813567ffffffffffffffff81111561529957600080fd5b6020830191508360208260051b85010111156152b457600080fd5b9250929050565b60008060008060008060a087890312156152d457600080fd5b86356152df8161518f565b955060208701356152ef8161518f565b9450604087013593506060870135615306816151b1565b9250608087013567ffffffffffffffff81111561532257600080fd5b61532e89828a0161526f565b979a9699509497509295939492505050565b60008060008060006080868803121561535857600080fd5b85356153638161518f565b945060208601359350604086013561537a816151b1565b9250606086013567ffffffffffffffff81111561539657600080fd5b6153a28882890161526f565b969995985093965092949392505050565b80356fffffffffffffffffffffffffffffffff811681146153d357600080fd5b919050565b600080604083850312156153eb57600080fd5b6153f4836153b3565b9150615402602084016153b3565b90509250929050565b61ffff811681146139b357600080fd5b6000806000806080858703121561543157600080fd5b8435935060208501356154438161518f565b925060408501356154538161540b565b915060608501356154638161540b565b939692955090935050565b60008060008060006080868803121561548657600080fd5b8535945060208601356154988161518f565b9350604086013567ffffffffffffffff8111156154b457600080fd5b6154c08882890161526f565b90945092505060608601356154d48161540b565b809150509295509295909350565b6020808252825182820181905260009190848201906040850190845b8181101561553057835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016154fe565b50909695505050505050565b60006020828403121561554e57600080fd5b6131ab826153b3565b6000806020838503121561556a57600080fd5b823567ffffffffffffffff81111561558157600080fd5b61558d8582860161526f565b90969095509350505050565b600080604083850312156155ac57600080fd5b82356155b78161518f565b915060208301356151ed8161518f565b6000602082840312156155d957600080fd5b813564ffffffffff811681146131ab57600080fd5b60006020828403121561560057600080fd5b81356131ab816151b1565b60006020828403121561561d57600080fd5b81516131ab8161518f565b6003811061565f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b73ffffffffffffffffffffffffffffffffffffffff888116825260e082019061568f602084018a615628565b6040830197909752948616606082015292909416608083015260a082015291151560c09092019190915292915050565b6000602082840312156156d157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561573f5761573f6156d8565b500290565b60008261577a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000806040838503121561579257600080fd5b825161579d8161518f565b60208401519092506151ed8161540b565b6000828210156157c0576157c06156d8565b500390565b600080604083850312156157d857600080fd5b505080516020909101519092909150565b6000602082840312156157fb57600080fd5b81516131ab816151b1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc183360301811261586957600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126158a857600080fd5b83018035915067ffffffffffffffff8211156158c357600080fd5b6020019150368190038213156152b457600080fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156159185780818660040360031b1b83161692505b505092915050565b6000808585111561593057600080fd5b8386111561593d57600080fd5b5050820193919092039150565b6000806040838503121561595d57600080fd5b82356159688161518f565b946020939093013593505050565b60008219821115615989576159896156d8565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60005b838110156159d85781810151838201526020016159c0565b838111156159e7576000848401525b50505050565b600082516158698184602087016159bd565b6020815260008251806020840152615a1e8160408501602087016159bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea2646970667358221220a3f4a705ab580a6ada1e438cd2ee4abc001b62d1d171fce12c41994900fef21664736f6c634300080a003360a06040523480156200001157600080fd5b5060405162005f3d38038062005f3d8339810160408190526200003491620012eb565b826001600160a01b031663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000073573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200009991906200147f565b6001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000d7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000fd91906200147f565b6000805460ff191690556001600160a01b0381166200012f57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200016e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200019491906200147f565b6001600160a01b03908116608052600180546001600160a01b031916918616918217905560408051636f307dc360e01b81529051919250636f307dc39160048083019260209291908290030181865afa158015620001f6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200021c91906200147f565b600260006101000a8154816001600160a01b0302191690836001600160a01b03160217905550826001600160a01b031663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000281573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a791906200147f565b6001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200030b91906200147f565b600080546001600160a01b039290921661010002610100600160a81b0319909216919091179055620003626103e860c86200034b6101f4612710620014bc565b60646200035c60c8612710620014bc565b620005e8565b60408101515160005b81811015620003ee576000836040015182815181106200038f576200038f620014e2565b6020026020010151600001519050620003ae81620007c260201b60201c565b620003e48185604001518481518110620003cc57620003cc620014e2565b60200260200101516020015162000a5e60201b60201c565b506001016200036b565b5060015460408051632630c12f60e01b815290516001600160a01b03909216916311ca4fc29186918491632630c12f9160048083019260209291908290030181865afa15801562000443573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200046991906200147f565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401600060405180830381600087803b158015620004b257600080fd5b505af1158015620004c7573d6000803e3d6000fd5b50506040516001600160a01b03861692507fa8b21f72cb83bce808df32dc2330217d744a1c22f3e9e44e4b11bbf049d37d9d9150600090a2600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000553573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200057991906200147f565b6001600160a01b03167f3f82447be465b0b5a4a9e54c74d5f6ae73f2e9537f2cc1590a340524703d096160405160405180910390a26020820151620005cb90620005c5906002620014f8565b62000bda565b81516020830151620005de919062000dc8565b5050505062001604565b6000620005f68585620014bc565b60015460405163172c48c760e01b81526000600482018190529293506001600160a01b039091169063172c48c7906024016040805180830381865afa15801562000644573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200066a91906200152a565b9150508061ffff168261ffff1614620006be57620006888262000f47565b60025460405161ffff841681526001600160a01b039091169060008051602062005f1d8339815191529060200160405180910390a25b60015460405163944ac59f60e01b815261ffff808a166004830152808916602483015280881660448301528087166064830152851660848201526001600160a01b039091169063944ac59f9060a401600060405180830381600087803b1580156200072857600080fd5b505af11580156200073d573d6000803e3d6000fd5b505050507f2214a403d5f8d049e52eacca974c6dea01a471e41d6a18903bfaf7dbc709741f878787612710620007749190620014bc565b876200078388612710620014bc565b6040805161ffff96871681529486166020860152928516848401529084166060840152909216608082015290519081900360a00190a150505050505050565b6001600160a01b038116620007ea57604051635919af9760e11b815260040160405180910390fd5b62000809816001600160a01b03166200116f60201b620023381760201c565b620008365760405163df4c572d60e01b81526001600160a01b038216600482015260240160405180910390fd5b6040516370a0823160e01b81523060048201526001600160a01b038216906370a0823190602401602060405180830381865afa92505050801562000899575060408051601f3d908101601f19168201909252620008969181019062001564565b60015b620008b75760405163528ca31d60e01b815260040160405180910390fd5b50600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200090c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200093291906200147f565b604051630f9a650360e41b8152670de0b6b3a764000060048201526001600160a01b038381166024830152919091169063f9a6503090604401602060405180830381865afa925050508015620009a7575060408051601f3d908101601f19168201909252620009a49181019062001564565b60015b620009c5576040516367a7cd4360e01b815260040160405180910390fd5b5060015460405163d48bfca760e01b81526001600160a01b0383811660048301529091169063d48bfca790602401600060405180830381600087803b15801562000a0e57600080fd5b505af115801562000a23573d6000803e3d6000fd5b50506040516001600160a01b03841692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a250565b6002546001600160a01b038381169116141562000a8e57604051633b899cf960e01b815260040160405180910390fd5b60015460405163172c48c760e01b8152600060048201819052916001600160a01b03169063172c48c7906024016040805180830381865afa15801562000ad8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000afe91906200152a565b91505061ffff8216158062000b1a57508061ffff168261ffff16115b1562000b39576040516333c6608d60e01b815260040160405180910390fd5b600154604051635385e2a160e11b81526001600160a01b03858116600483015261ffff851660248301529091169063a70bc54290604401600060405180830381600087803b15801562000b8b57600080fd5b505af115801562000ba0573d6000803e3d6000fd5b505060405161ffff851681526001600160a01b038616925060008051602062005f1d833981519152915060200160405180910390a2505050565b600062000be662001175565b6001600160a01b031663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801562000c24573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c4a91906200157e565b50509050600062000c606200117560201b60201c565b6001600160a01b031663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa15801562000c9d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000cc39190620015d5565b915050806001600160801b0316836001600160801b0316101562000cfa576040516309aadd6f60e41b815260040160405180910390fd5b826001600160801b0316826001600160801b03161462000dc35762000d1e62001175565b604051632715681560e21b81526001600160801b03851660048201526001600160a01b039190911690639c55a05490602401600060405180830381600087803b15801562000d6b57600080fd5b505af115801562000d80573d6000803e3d6000fd5b50506040516001600160801b03861681527fa030eec20ae970821387224ec3bb15b4bd22b89bfb86dc4d2b3827aa3d99e48d925060200190505b60405180910390a15b505050565b600062000dd462001175565b6001600160a01b031663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801562000e12573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e3891906200157e565b50509050816001600160801b0316836001600160801b0316118062000e6e5750806001600160801b0316826001600160801b0316115b1562000e8d576040516309aadd6f60e41b815260040160405180910390fd5b62000e9762001175565b60405163300eb37b60e11b81526001600160801b038086166004830152841660248201526001600160a01b03919091169063601d66f690604401600060405180830381600087803b15801562000eec57600080fd5b505af115801562000f01573d6000803e3d6000fd5b5050604080516001600160801b038088168252861660208201527f4d4981437d0211f9e6843eb024d9ada1fa3a99514d4343d4aece106dd11524bb935001905062000dba565b600154600254604051635385e2a160e11b81526001600160a01b03918216600482015261ffff8416602482015291169063a70bc54290604401600060405180830381600087803b15801562000f9b57600080fd5b505af115801562000fb0573d6000803e3d6000fd5b505050506000600160009054906101000a90046001600160a01b03166001600160a01b031663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200100a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001030919062001564565b905060015b8181101562000dc35760015460405163172c48c760e01b81526004810183905260009182916001600160a01b039091169063172c48c7906024016040805180830381865afa1580156200108c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010b291906200152a565b915091508461ffff168161ffff1611156200116457600154604051635385e2a160e11b81526001600160a01b03848116600483015261ffff881660248301529091169063a70bc54290604401600060405180830381600087803b1580156200111957600080fd5b505af11580156200112e573d6000803e3d6000fd5b505060405161ffff881681526001600160a01b038516925060008051602062005f1d833981519152915060200160405180910390a25b505060010162001035565b3b151590565b60015460408051632f7a188160e01b815290516000926001600160a01b031691632f7a18819160048083019260209291908290030181865afa158015620011c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011e691906200147f565b905090565b6001600160a01b03811681146200120157600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b03811182821017156200123f576200123f62001204565b60405290565b604080519081016001600160401b03811182821017156200123f576200123f62001204565b604051601f8201601f191681016001600160401b038111828210171562001295576200129562001204565b604052919050565b80516001600160801b0381168114620012b557600080fd5b919050565b8051620012b581620011eb565b805161ffff81168114620012b557600080fd5b80518015158114620012b557600080fd5b6000806000606084860312156200130157600080fd5b83516200130e81620011eb565b809350506020808501516200132381620011eb565b604086810151919450906001600160401b03808211156200134357600080fd5b9087019060a0828a0312156200135857600080fd5b620013626200121a565b6200136d836200129d565b81526200137c8584016200129d565b8582015283830151828111156200139257600080fd5b8301601f81018b13620013a457600080fd5b805183811115620013b957620013b962001204565b620013c9878260051b016200126a565b818152878101945060069190911b82018701908c821115620013ea57600080fd5b918701915b81831015620014435786838e031215620014095760008081fd5b6200141362001245565b83516200142081620011eb565b81526200142f848a01620012c7565b818a015285529387019391860191620013ef565b838701525062001458905060608401620012ba565b60608201526200146b60808401620012da565b608082015280955050505050509250925092565b6000602082840312156200149257600080fd5b81516200149f81620011eb565b9392505050565b634e487b7160e01b600052601160045260246000fd5b600061ffff83811690831681811015620014da57620014da620014a6565b039392505050565b634e487b7160e01b600052603260045260246000fd5b60006001600160801b0382811684821681151582840482111615620015215762001521620014a6565b02949350505050565b600080604083850312156200153e57600080fd5b82516200154b81620011eb565b91506200155b60208401620012c7565b90509250929050565b6000602082840312156200157757600080fd5b5051919050565b6000806000606084860312156200159457600080fd5b6200159f846200129d565b9250620015af60208501620012da565b9150604084015164ffffffffff81168114620015ca57600080fd5b809150509250925092565b60008060408385031215620015e957600080fd5b620015f4836200129d565b91506200155b602084016200129d565b608051614878620016a56000396000818161033601528181610446015281816107c5015281816108c0015281816109ae01528181610b8301528181610f0a015281816113e1015281816114cf015281816115bb015281816116ab015281816117990152818161187d01528181611ad901528181611bc601528181611cb301528181611da0015281816120090152818161218c015261227901526148786000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80638456cb59116100f9578063dc2b21c111610097578063f0527ac611610071578063f0527ac6146103d7578063f206d32a146103df578063fb1bd8c4146103f2578063ffd9b9071461040557600080fd5b8063dc2b21c11461039e578063e6492d7b146103b1578063eb9606df146103c457600080fd5b8063a50cf2c8116100d3578063a50cf2c814610331578063a70bc54214610358578063b53472ef1461036b578063c12c21c01461037e57600080fd5b80638456cb59146103035780639c55a0541461030b5780639f1c50691461031e57600080fd5b806350e036ff1161016657806354fd4d501161014057806354fd4d50146102b25780635c975abb146102ba5780636f307dc3146102d05780637bccacee146102f057600080fd5b806350e036ff1461027657806352438e541461028c578063526a41e81461029f57600080fd5b80633e7c88d6116101a25780633e7c88d6146102355780633f4ba83a14610248578063456e0742146102505780635094cb4f1461026357600080fd5b806324147708146101c95780632954018c146101de5780632f7a18811461022d575b600080fd5b6101dc6101d7366004614307565b610418565b005b60005461020390610100900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6102036106fe565b6101dc610243366004614334565b610797565b6101dc610892565b6101dc61025e366004614307565b610980565b61020361027136600461436d565b610b36565b61027e610b49565b604051908152602001610224565b6101dc61029a366004614307565b610b55565b6101dc6102ad366004614394565b610edc565b61027e600281565b60005460ff166040519015158152602001610224565b6002546102039073ffffffffffffffffffffffffffffffffffffffff1681565b6101dc6102fe3660046143c2565b6113b3565b6101dc6114a1565b6101dc61031936600461440e565b61158d565b6101dc61032c36600461442b565b61167d565b6102037f000000000000000000000000000000000000000000000000000000000000000081565b6101dc610366366004614334565b61176b565b6101dc610379366004614307565b61184f565b6001546102039073ffffffffffffffffffffffffffffffffffffffff1681565b6101dc6103ac366004614459565b611aab565b6101dc6103bf366004614307565b611b98565b6101dc6103d236600461448f565b611c85565b6101dc611d72565b6101dc6103ed3660046144ac565b611fdb565b6101dc610400366004614307565b61215e565b6101dc61041336600461451d565b61224b565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156104a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c6919061453a565b6104fc576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006105078261233e565b90506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015610578573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059c9190614557565b90508181166106f9576001546040517fa366f496000000000000000000000000000000000000000000000000000000008152918317600483018190529173ffffffffffffffffffffffffffffffffffffffff9091169063a366f49690602401600060405180830381600087803b15801561061557600080fd5b505af1158015610629573d6000803e3d6000fd5b505050506106356106fe565b6040517fffd9b9070000000000000000000000000000000000000000000000000000000081526001600482015273ffffffffffffffffffffffffffffffffffffffff919091169063ffd9b90790602401600060405180830381600087803b15801561069f57600080fd5b505af11580156106b3573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692507ff17b849746e74d7186170c9553d4bbf60b4f8bb1ed81fe50c099b934fb078f059150600090a25b505050565b600154604080517f2f7a1881000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691632f7a18819160048083019260209291908290030181865afa15801561076e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610792919061457b565b905090565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610821573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610845919061453a565b61087b576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108848261241e565b61088e82826127f8565b5050565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa15801561091c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610940919061453a565b610976576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61097e612a15565b565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610a0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2e919061453a565b610a64576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a6d81612af6565b6001546040517f9f5f86ae00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015290911690639f5f86ae90602401600060405180830381600087803b158015610ada57600080fd5b505af1158015610aee573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507f5a0b7d0f9c24b39256e112a0584b4c5ce38d8f1dee2e7c56f15b852604cdc8869150600090a250565b6000610b43600383612cb8565b92915050565b60006107926003612ccb565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610bdf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c03919061453a565b610c39576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610c86576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063fdd5764590602401602060405180830381865afa158015610cf7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1b919061457b565b905073ffffffffffffffffffffffffffffffffffffffff8116610d6a576040517f1170cc2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f6e98e5e400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526000602483015290911690636e98e5e490604401600060405180830381600087803b158015610dde57600080fd5b505af1158015610df2573d6000803e3d6000fd5b50506001546040517f6e98e5e40000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff86811660248301529091169250636e98e5e49150604401600060405180830381600087803b158015610e6a57600080fd5b505af1158015610e7e573d6000803e3d6000fd5b50505050610e96826003612cd590919063ffffffff16565b5060405173ffffffffffffffffffffffffffffffffffffffff8316907fab9f405bf0c19b97f65a7031634db41569cd2f0e0376a610a1e977f9ab22b58f90600090a25050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610f66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8a919061453a565b610fc0576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fc982612af6565b6000806000610fd66106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015611020573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110449190614598565b9250925092506000806110556106fe565b73ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa15801561109e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c291906145e5565b9150915060006110d06106fe565b73ffffffffffffffffffffffffffffffffffffffff16639be0536a6040518163ffffffff1660e01b8152600401600060405180830381865afa15801561111a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526111609190810190614643565b9050600061116c6106fe565b73ffffffffffffffffffffffffffffffffffffffff1663b1836d326040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111da919061453a565b600154604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905192935073ffffffffffffffffffffffffffffffffffffffff909116916311ca4fc2918c918491632630c12f9160048083019260209291908290030181865afa158015611256573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061127a919061457b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156112e757600080fd5b505af11580156112fb573d6000803e3d6000fd5b5050505087156113675761130e87612cf7565b6113188484612f5d565b61132186613152565b60005b82518110156113575761134f83828151811061134257611342614726565b60200260200101516132a3565b600101611324565b50801561136757611367856133c9565b60405173ffffffffffffffffffffffffffffffffffffffff8a16907fa8b21f72cb83bce808df32dc2330217d744a1c22f3e9e44e4b11bbf049d37d9d90600090a2505050505050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561143d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611461919061453a565b611497576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61088e828261357b565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561152b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061154f919061453a565b611585576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61097e6139c3565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611617573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163b919061453a565b611671576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81612cf7565b50565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611707573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172b919061453a565b611761576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61088e8282612f5d565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156117f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611819919061453a565b610884576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156118d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fd919061453a565b611933576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061193e8261233e565b90506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d39190614557565b9050818116156106f9576001546040517fa366f496000000000000000000000000000000000000000000000000000000008152918318600483018190529173ffffffffffffffffffffffffffffffffffffffff9091169063a366f49690602401600060405180830381600087803b158015611a4d57600080fd5b505af1158015611a61573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a2505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611b35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b59919061453a565b611b8f576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81613a83565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611c22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c46919061453a565b611c7c576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81613b3d565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611d0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d33919061453a565b611d69576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a816133c9565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611dfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e20919061453a565b611e56576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ec4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee8919061457b565b60015490915073ffffffffffffffffffffffffffffffffffffffff166311ca4fc2611f116106fe565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff91821660048201529084166024820152604401600060405180830381600087803b158015611f7f57600080fd5b505af1158015611f93573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507f3f82447be465b0b5a4a9e54c74d5f6ae73f2e9537f2cc1590a340524703d09619150600090a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015612065573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612089919061453a565b6120bf576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61271061ffff86161015806120e357506127106120dc8585614784565b61ffff1610155b806120fd57506127106120f68383614784565b61ffff1610155b15612134576040517f0b361d6900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6121578585612145866127106147aa565b85612152866127106147aa565b613c5c565b5050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156121e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061220c919061453a565b612242576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a816132a3565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156122d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122f9919061453a565b61232f576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81613152565b3b151590565b6001546040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063f67c5bd090602401602060405180830381865afa1580156123af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123d39190614557565b90508015806123e25750806001145b15612419576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b73ffffffffffffffffffffffffffffffffffffffff811661246b576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163b6124d6576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024015b60405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8216906370a0823190602401602060405180830381865afa92505050801561257a575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261257791810190614557565b60015b6125b0576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561261e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612642919061457b565b6040517ff9a65030000000000000000000000000000000000000000000000000000000008152670de0b6b3a7640000600482015273ffffffffffffffffffffffffffffffffffffffff8381166024830152919091169063f9a6503090604401602060405180830381865afa9250505080156126f8575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526126f591810190614557565b60015b61272e576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506001546040517fd48bfca700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301529091169063d48bfca790602401600060405180830381600087803b15801561279c57600080fd5b505af11580156127b0573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a250565b60025473ffffffffffffffffffffffffffffffffffffffff8381169116141561284d576040517f3b899cf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f172c48c70000000000000000000000000000000000000000000000000000000081526000600482018190529173ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa1580156128bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128e091906147cd565b91505061ffff821615806128fb57508061ffff168261ffff16115b15612932576040517f33c6608d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015261ffff851660248301529091169063a70bc54290604401600060405180830381600087803b1580156129a957600080fd5b505af11580156129bd573d6000803e3d6000fd5b505060405161ffff8516815273ffffffffffffffffffffffffffffffffffffffff861692507f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650915060200160405180910390a2505050565b60005460ff16612a81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016124cd565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b73ffffffffffffffffffffffffffffffffffffffff8116612b43576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163b612ba9576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024016124cd565b8073ffffffffffffffffffffffffffffffffffffffff1663c12c21c06040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612c2e575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252612c2b9181019061457b565b60015b612c64576040517fe9eddd1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60015473ffffffffffffffffffffffffffffffffffffffff82811691161461088e576040517fe9eddd1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612cc48383613e92565b9392505050565b6000610b43825490565b6000612cc48373ffffffffffffffffffffffffffffffffffffffff8416613ebc565b6000612d016106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015612d4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d6f9190614598565b505090506000612d7d6106fe565b73ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa158015612dc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dea91906145e5565b915050806fffffffffffffffffffffffffffffffff16836fffffffffffffffffffffffffffffffff161015612e4b576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826fffffffffffffffffffffffffffffffff16826fffffffffffffffffffffffffffffffff16146106f957612e7e6106fe565b6040517f9c55a0540000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff8516600482015273ffffffffffffffffffffffffffffffffffffffff9190911690639c55a05490602401600060405180830381600087803b158015612ef957600080fd5b505af1158015612f0d573d6000803e3d6000fd5b50506040516fffffffffffffffffffffffffffffffff861681527fa030eec20ae970821387224ec3bb15b4bd22b89bfb86dc4d2b3827aa3d99e48d925060200190505b60405180910390a1505050565b6000612f676106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015612fb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fd59190614598565b50509050816fffffffffffffffffffffffffffffffff16836fffffffffffffffffffffffffffffffff16118061302e5750806fffffffffffffffffffffffffffffffff16826fffffffffffffffffffffffffffffffff16115b15613065576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61306d6106fe565b6040517f601d66f60000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff80861660048301528416602482015273ffffffffffffffffffffffffffffffffffffffff919091169063601d66f690604401600060405180830381600087803b1580156130f057600080fd5b505af1158015613104573d6000803e3d6000fd5b5050604080516fffffffffffffffffffffffffffffffff8088168252861660208201527f4d4981437d0211f9e6843eb024d9ada1fa3a99514d4343d4aece106dd11524bb9350019050612f50565b600061315c6106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa1580156131a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131ca9190614598565b509150508015158215151461088e576131e16106fe565b6040517fffd9b907000000000000000000000000000000000000000000000000000000008152831515600482015273ffffffffffffffffffffffffffffffffffffffff919091169063ffd9b90790602401600060405180830381600087803b15801561324c57600080fd5b505af1158015613260573d6000803e3d6000fd5b505050507ff97ba903470ff3262b4a68a938fe81def401bac1bd742169d2e8d5c4ed2185d382604051613297911515815260200190565b60405180910390a15050565b73ffffffffffffffffffffffffffffffffffffffff81166132f0576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6132f86106fe565b6040517fb55bb84b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152919091169063b55bb84b90602401600060405180830381600087803b15801561336357600080fd5b505af1158015613377573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841681527fdac9a7995cbc0c0f01d78970fb6fd0b52fe0fe869eb6635e65cc1b5682b8325c925060200190505b60405180910390a150565b60006133d36106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801561341d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134419190614598565b925050508064ffffffffff168264ffffffffff161461088e578164ffffffffff168164ffffffffff16118061347c57508164ffffffffff1642115b156134b3576040517fe4eaca7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134bb6106fe565b6040517feb9606df00000000000000000000000000000000000000000000000000000000815264ffffffffff8416600482015273ffffffffffffffffffffffffffffffffffffffff919091169063eb9606df90602401600060405180830381600087803b15801561352b57600080fd5b505af115801561353f573d6000803e3d6000fd5b505060405164ffffffffff851681527f0b3eb35ba750e7a7e4d26c9eee3d226f4e1f68c5568f4a3d051c94b241b02ac092506020019050613297565b73ffffffffffffffffffffffffffffffffffffffff82166135c8576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82163b61362e576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016124cd565b61363781612af6565b60015473ffffffffffffffffffffffffffffffffffffffff8381169116148061369257506136636106fe565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b806136b7575060015473ffffffffffffffffffffffffffffffffffffffff8281169116145b806136f457506136c56106fe565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b1561372b576040517f727de5c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517fff68754300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063ff68754390602401602060405180830381865afa15801561379c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137c0919061457b565b73ffffffffffffffffffffffffffffffffffffffff1614158061388c57506001546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063fdd5764590602401602060405180830381865afa15801561384f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613873919061457b565b73ffffffffffffffffffffffffffffffffffffffff1614155b156138c3576040517f21ff1e7100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f6e98e5e400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152848116602483015290911690636e98e5e490604401600060405180830381600087803b15801561393857600080fd5b505af115801561394c573d6000803e3d6000fd5b50505050613964826003613faf90919063ffffffff16565b508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4bcbefaef68b99503d502f5a6abe7bca2b183ab8ac55457013c77d084ebd130560405160405180910390a35050565b60005460ff1615613a30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016124cd565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612acc3390565b6001546040517fdc2b21c100000000000000000000000000000000000000000000000000000000815260ff8316600482015273ffffffffffffffffffffffffffffffffffffffff9091169063dc2b21c190602401600060405180830381600087803b158015613af157600080fd5b505af1158015613b05573d6000803e3d6000fd5b505060405160ff841681527f73caacd705657a7d283e48ecf288b73bc517e3aea1bbc9da2fd54a979e8aa950925060200190506133be565b73ffffffffffffffffffffffffffffffffffffffff8116613b8a576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613b926106fe565b6040517fdcf6548200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152919091169063dcf6548290602401600060405180830381600087803b158015613bfd57600080fd5b505af1158015613c11573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841681527f32e53e2e527af8518ae889e5f7e674bc83f7cf68e4cc059aceeaa0e64208b85b925060200190506133be565b6000613c6885856147aa565b6001546040517f172c48c700000000000000000000000000000000000000000000000000000000815260006004820181905292935073ffffffffffffffffffffffffffffffffffffffff9091169063172c48c7906024016040805180830381865afa158015613cdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cff91906147cd565b9150508061ffff168261ffff1614613d6e57613d1a82613fd1565b60025460405161ffff8416815273ffffffffffffffffffffffffffffffffffffffff909116907f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac6509060200160405180910390a25b6001546040517f944ac59f00000000000000000000000000000000000000000000000000000000815261ffff808a1660048301528089166024830152808816604483015280871660648301528516608482015273ffffffffffffffffffffffffffffffffffffffff9091169063944ac59f9060a401600060405180830381600087803b158015613dfd57600080fd5b505af1158015613e11573d6000803e3d6000fd5b505050507f2214a403d5f8d049e52eacca974c6dea01a471e41d6a18903bfaf7dbc709741f878787612710613e4691906147aa565b87613e53886127106147aa565b6040805161ffff96871681529486166020860152928516848401529084166060840152909216608082015290519081900360a00190a150505050505050565b6000826000018281548110613ea957613ea9614726565b9060005260206000200154905092915050565b60008181526001830160205260408120548015613fa5576000613ee06001836147fc565b8554909150600090613ef4906001906147fc565b9050818114613f59576000866000018281548110613f1457613f14614726565b9060005260206000200154905080876000018481548110613f3757613f37614726565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080613f6a57613f6a614813565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610b43565b6000915050610b43565b6000612cc48373ffffffffffffffffffffffffffffffffffffffff8416614296565b6001546002546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015261ffff8416602482015291169063a70bc54290604401600060405180830381600087803b15801561404a57600080fd5b505af115801561405e573d6000803e3d6000fd5b505050506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156140d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140f59190614557565b905060015b818110156106f9576001546040517f172c48c700000000000000000000000000000000000000000000000000000000815260048101839052600091829173ffffffffffffffffffffffffffffffffffffffff9091169063172c48c7906024016040805180830381865afa158015614175573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061419991906147cd565b915091508461ffff168161ffff16111561428c576001546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015261ffff881660248301529091169063a70bc54290604401600060405180830381600087803b15801561422457600080fd5b505af1158015614238573d6000803e3d6000fd5b505060405161ffff8816815273ffffffffffffffffffffffffffffffffffffffff851692507f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650915060200160405180910390a25b50506001016140fa565b60008181526001830160205260408120546142dd57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610b43565b506000610b43565b73ffffffffffffffffffffffffffffffffffffffff8116811461167a57600080fd5b60006020828403121561431957600080fd5b8135612cc4816142e5565b61ffff8116811461167a57600080fd5b6000806040838503121561434757600080fd5b8235614352816142e5565b9150602083013561436281614324565b809150509250929050565b60006020828403121561437f57600080fd5b5035919050565b801515811461167a57600080fd5b600080604083850312156143a757600080fd5b82356143b2816142e5565b9150602083013561436281614386565b600080604083850312156143d557600080fd5b82356143e0816142e5565b91506020830135614362816142e5565b6fffffffffffffffffffffffffffffffff8116811461167a57600080fd5b60006020828403121561442057600080fd5b8135612cc4816143f0565b6000806040838503121561443e57600080fd5b8235614449816143f0565b91506020830135614362816143f0565b60006020828403121561446b57600080fd5b813560ff81168114612cc457600080fd5b64ffffffffff8116811461167a57600080fd5b6000602082840312156144a157600080fd5b8135612cc48161447c565b600080600080600060a086880312156144c457600080fd5b85356144cf81614324565b945060208601356144df81614324565b935060408601356144ef81614324565b925060608601356144ff81614324565b9150608086013561450f81614324565b809150509295509295909350565b60006020828403121561452f57600080fd5b8135612cc481614386565b60006020828403121561454c57600080fd5b8151612cc481614386565b60006020828403121561456957600080fd5b5051919050565b8051612419816142e5565b60006020828403121561458d57600080fd5b8151612cc4816142e5565b6000806000606084860312156145ad57600080fd5b83516145b8816143f0565b60208501519093506145c981614386565b60408501519092506145da8161447c565b809150509250925092565b600080604083850312156145f857600080fd5b8251614603816143f0565b6020840151909250614362816143f0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000602080838503121561465657600080fd5b825167ffffffffffffffff8082111561466e57600080fd5b818501915085601f83011261468257600080fd5b81518181111561469457614694614614565b8060051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f830116810181811085821117156146d7576146d7614614565b6040529182528482019250838101850191888311156146f557600080fd5b938501935b8285101561471a5761470b85614570565b845293850193928501926146fa565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061ffff8083168185168083038211156147a1576147a1614755565b01949350505050565b600061ffff838116908316818110156147c5576147c5614755565b039392505050565b600080604083850312156147e057600080fd5b82516147eb816142e5565b602084015190925061436281614324565b60008282101561480e5761480e614755565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea264697066735822122046c364b67d38a3dd85b57e027716324d90dd1df102f265f0a0e2697babdb3f3b64736f6c634300080a003394525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650a2646970667358221220a1abc82cc55fbb4bfcadb98e0a6b0005821a999b364f3e305827b82c0348a9a764736f6c634300080a0033"; - -type UniswapV2AdapterTestConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: UniswapV2AdapterTestConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class UniswapV2AdapterTest__factory extends ContractFactory { - constructor(...args: UniswapV2AdapterTestConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): UniswapV2AdapterTest { - return super.attach(address) as UniswapV2AdapterTest; - } - override connect(signer: Signer): UniswapV2AdapterTest__factory { - return super.connect(signer) as UniswapV2AdapterTest__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): UniswapV2AdapterTestInterface { - return new utils.Interface(_abi) as UniswapV2AdapterTestInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): UniswapV2AdapterTest { - return new Contract( - address, - _abi, - signerOrProvider - ) as UniswapV2AdapterTest; - } -} diff --git a/src/types/factories/contracts/test/adapters/UniswapV2Adapter.t.sol/index.ts b/src/types/factories/contracts/test/adapters/UniswapV2Adapter.t.sol/index.ts deleted file mode 100644 index e679c3e1..00000000 --- a/src/types/factories/contracts/test/adapters/UniswapV2Adapter.t.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { UniswapV2AdapterTest__factory } from "./UniswapV2AdapterTest__factory"; diff --git a/src/types/factories/contracts/test/adapters/UniswapV3Adapter.t.sol/UniswapV3AdapterTest__factory.ts b/src/types/factories/contracts/test/adapters/UniswapV3Adapter.t.sol/UniswapV3AdapterTest__factory.ts deleted file mode 100644 index 2c861cbb..00000000 --- a/src/types/factories/contracts/test/adapters/UniswapV3Adapter.t.sol/UniswapV3AdapterTest__factory.ts +++ /dev/null @@ -1,846 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - UniswapV3AdapterTest, - UniswapV3AdapterTestInterface, -} from "../../../../../contracts/test/adapters/UniswapV3Adapter.t.sol/UniswapV3AdapterTest"; - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "TokenIsNotInAllowedList", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "onBehalfOf", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "token", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "AddCollateral", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - ], - name: "CloseCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "DecreaseBorrowedAmount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "target", - type: "address", - }, - ], - name: "ExecuteOrder", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "IncreaseBorrowedAmount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "liquidator", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "remainingFunds", - type: "uint256", - }, - ], - name: "LiquidateCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "liquidator", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "remainingFunds", - type: "uint256", - }, - ], - name: "LiquidateExpiredCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [], - name: "MultiCallFinished", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - ], - name: "MultiCallStarted", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newConfigurator", - type: "address", - }, - ], - name: "NewConfigurator", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "onBehalfOf", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "borrowAmount", - type: "uint256", - }, - { - indexed: false, - internalType: "uint16", - name: "referralCode", - type: "uint16", - }, - ], - name: "OpenCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "token", - type: "address", - }, - ], - name: "TokenDisabled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "token", - type: "address", - }, - ], - name: "TokenEnabled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "oldOwner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "TransferAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "bool", - name: "state", - type: "bool", - }, - ], - name: "TransferAccountAllowed", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "", - type: "address", - }, - ], - name: "log_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "log_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - name: "log_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "int256", - name: "", - type: "int256", - }, - ], - name: "log_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "address", - name: "val", - type: "address", - }, - ], - name: "log_named_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes", - name: "val", - type: "bytes", - }, - ], - name: "log_named_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes32", - name: "val", - type: "bytes32", - }, - ], - name: "log_named_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - ], - name: "log_named_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "string", - name: "val", - type: "string", - }, - ], - name: "log_named_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - ], - name: "log_named_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "log_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "logs", - type: "event", - }, - { - inputs: [], - name: "IS_TEST", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "adapter", - outputs: [ - { - internalType: "contract IUniswapV3Adapter", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "cft", - outputs: [ - { - internalType: "contract CreditFacadeTestSuite", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditConfigurator", - outputs: [ - { - internalType: "contract CreditConfigurator", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditFacade", - outputs: [ - { - internalType: "contract CreditFacade", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditManager", - outputs: [ - { - internalType: "contract ICreditManagerV2", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "deadline", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "failed", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "setUp", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_AUV3_01_swap_reverts_if_uses_has_no_account", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_AUV3_02_exactInputSingle_works_for_user_as_expected", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_AUV3_03_exactAllInputSingle_works_for_user_as_expected", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_AUV3_04_exactInput_works_for_user_as_expected", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_AUV3_05_exactAllInput_works_for_user_as_expected", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_AUV3_06_exactOutputSingle_works_for_user_as_expected", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_AUV3_07_exactOutput_works_for_user_as_expected", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_AUV3_08_exactOutput_cannot_be_exploited_with_tailored_path_parameter", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "underlying", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "uniswapMock", - outputs: [ - { - internalType: "contract UniswapV3Mock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x60806040526000805460ff1916600190811790915580546001600160a01b031916737109709ecfa91a80626ff3989d68f67f5b1dd12d17905534801561004457600080fd5b506204521b80620000566000396000f3fe60806040523480156200001157600080fd5b50600436106200016c5760003560e01c80636f307dc311620000dd578063df514433116200008b578063f9aa028a116200006e578063f9aa028a14620002e7578063fa7626d41462000308578063fee7ed95146200031657600080fd5b8063df51443314620002a5578063f6a8371514620002c657600080fd5b8063be9418d311620000c0578063be9418d31462000270578063c12c21c0146200027a578063c4303c5c146200029b57600080fd5b80636f307dc31462000234578063ba414fa6146200025557600080fd5b80632051c27e116200013b57806329dcb0cf116200011e57806329dcb0cf14620001f05780632f7a1881146200020957806349370999146200022a57600080fd5b80632051c27e14620001dc57806327397d1f14620001e657600080fd5b806303eadcfc14620001715780630a9254e414620001bc578063140fedeb14620001c857806314ae4de614620001d2575b600080fd5b600754620001929073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b620001c662000320565b005b620001c662000989565b620001c662000fdd565b620001c662001683565b620001c662001c9e565b620001fa60095481565b604051908152602001620001b3565b600354620001929073ffffffffffffffffffffffffffffffffffffffff1681565b620001c66200229d565b600654620001929073ffffffffffffffffffffffffffffffffffffffff1681565b6200025f62002ac2565b6040519015158152602001620001b3565b620001c662002c2c565b600254620001929073ffffffffffffffffffffffffffffffffffffffff1681565b620001c662003106565b600554620001929073ffffffffffffffffffffffffffffffffffffffff1681565b600854620001929073ffffffffffffffffffffffffffffffffffffffff1681565b600454620001929073ffffffffffffffffffffffffffffffffffffffff1681565b6000546200025f9060ff1681565b620001c6620037f6565b6200032a62003ca8565b604051620003389062007167565b604051809103906000f08015801562000355573d6000803e3d6000fd5b50600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283169081179091556000546040517f67b426450000000000000000000000000000000000000000000000000000000081529192635911fb9a926201000090920416906367b4264590620003eb906003906004016200720b565b602060405180830381865afa15801562000409573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200042f91906200723e565b6000546040517f67b426450000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff16906367b42645906200048d906001906004016200720b565b602060405180830381865afa158015620004ab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004d191906200723e565b620004eb6b033b2e3c9fd0803ce80000006103e862007294565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b1580156200056057600080fd5b505af115801562000575573d6000803e3d6000fd5b505060005460085473ffffffffffffffffffffffffffffffffffffffff620100009092048216935063eebab8ef9250600391166103e8620005c1670de0b6b3a7640000614e2062007294565b620005ce90600262007294565b620005da9190620072d4565b6040518463ffffffff1660e01b8152600401620005fa9392919062007310565b600060405180830381600087803b1580156200061557600080fd5b505af11580156200062a573d6000803e3d6000fd5b505060025460085460405173ffffffffffffffffffffffffffffffffffffffff9283169450911691506200065e9062007175565b73ffffffffffffffffffffffffffffffffffffffff928316815291166020820152604001604051809103906000f0801580156200069f573d6000803e3d6000fd5b50600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283161790556001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291169063ca669fa790602401600060405180830381600087803b1580156200074b57600080fd5b505af115801562000760573d6000803e3d6000fd5b5050600480546008546007546040517f7bccacee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283169481019490945281166024840152169250637bccacee9150604401600060405180830381600087803b158015620007e057600080fd5b505af1158015620007f5573d6000803e3d6000fd5b505060015460078054604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283166004820152602481019190915260448101929092527f41444150544552000000000000000000000000000000000000000000000000006064830152909116925063c657c7189150608401600060405180830381600087803b158015620008a257600080fd5b505af1158015620008b7573d6000803e3d6000fd5b5050600154600854604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152600f60448201527f554e49535741505f56335f4d4f434b000000000000000000000000000000000060648201529116925063c657c7189150608401600060405180830381600087803b1580156200096157600080fd5b505af115801562000976573d6000803e3d6000fd5b505050506200098462003cb6565b600955565b600080546040517f67b426450000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff16906367b4264590620009e8906001906004016200720b565b602060405180830381865afa15801562000a06573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a2c91906200723e565b600080546040517f67b4264500000000000000000000000000000000000000000000000000000000815292935090916201000090910473ffffffffffffffffffffffffffffffffffffffff16906367b426459062000a90906003906004016200720b565b602060405180830381865afa15801562000aae573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ad491906200723e565b9050600062000ae262003cca565b6000546040517f67b4264500000000000000000000000000000000000000000000000000000000815291925062000bff916201000090910473ffffffffffffffffffffffffffffffffffffffff16906367b426459062000b48906002906004016200720b565b602060405180830381865afa15801562000b66573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b8c91906200723e565b60405160200162000bc8919060609190911b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016815260140190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905282519062003f9c565b815260008062000c0e6200403c565b600854919350915062000c3e90600190849073ffffffffffffffffffffffffffffffffffffffff16600062004423565b73ffffffffffffffffffffffffffffffffffffffff821660208401526040516000907ff28c0498000000000000000000000000000000000000000000000000000000009062000c9290869060240162007423565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915260075460085491925062000d579173ffffffffffffffffffffffffffffffffffffffff918216911673f39fd6e51aad88f6f4ce6ab8827279cfffb92266848a8a600062004447565b600060208501526001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b15801562000dde57600080fd5b505af115801562000df3573d6000803e3d6000fd5b50506007546040517ff28c049800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116925063f28c0498915062000e4f90879060040162007423565b6020604051808303816000875af115801562000e6f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e95919062007438565b5062000efd6001846103e560028062000eb9670de0b6b3a7640000614e2062007294565b62000ec59190620072d4565b62000ed19190620072d4565b62000edf906103e862007294565b62000eeb9190620072d4565b62000ef7908662007452565b6200445a565b62000f4460038460026103e88162000f20670de0b6b3a7640000614e2062007294565b62000f2c9190620072d4565b62000f389190620072d4565b62000ef79190620072d4565b60085462000f8e90600190859073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62004423565b60085462000fb990600290859073ffffffffffffffffffffffffffffffffffffffff16600062004423565b62000fc7600360016200447c565b62000fd5600260006200447c565b505050505050565b60005b6002811015620016805780151562000ff762000320565b6000620010036200449c565b9050600080620010126200403c565b60085491935091506200104290600190849073ffffffffffffffffffffffffffffffffffffffff16600062004423565b60006200105160018362007452565b60408051610100810191829052600080547f67b42645000000000000000000000000000000000000000000000000000000009093529293507f414bf3890000000000000000000000000000000000000000000000000000000091819062010000900473ffffffffffffffffffffffffffffffffffffffff166367b42645620010df600161010485016200720b565b602060405180830381865afa158015620010fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200112391906200723e565b73ffffffffffffffffffffffffffffffffffffffff90811682526000546040517f67b4264500000000000000000000000000000000000000000000000000000000815260209093019262010000909104909116906367b42645906200118e906003906004016200720b565b602060405180830381865afa158015620011ac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011d291906200723e565b73ffffffffffffffffffffffffffffffffffffffff9081168252610bb8602083015287166040820152606088810151908201526080810185905260a0016103e86200121e8187620072d4565b6200122c906103e562007294565b620012389190620072d4565b815260006020909101526040516200125491906024016200746c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290508515620013fb5760408051865173ffffffffffffffffffffffffffffffffffffffff908116602483015260208089018051831660448501528985015162ffffff16606485015260608a0151608485015260808a015160a485015260a08a0151831660c4808601919091528551808603909101815260e4909401909452820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc7fbf4de00000000000000000000000000000000000000000000000000000000179052600754600854895194519394620013cf9492841693919091169173f39fd6e51aad88f6f4ce6ab8827279cfffb92266918791600062004697565b600754620013f49073ffffffffffffffffffffffffffffffffffffffff1682620046aa565b50620015b9565b60075460085486516020880151620014499373ffffffffffffffffffffffffffffffffffffffff90811693169173f39fd6e51aad88f6f4ce6ab8827279cfffb9226691869190600062004447565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b158015620014c957600080fd5b505af1158015620014de573d6000803e3d6000fd5b5050600754604080517fc7fbf4de000000000000000000000000000000000000000000000000000000008152895173ffffffffffffffffffffffffffffffffffffffff908116600483015260208b015181166024830152918a015162ffffff16604482015260608a0151606482015260808a0151608482015260a08a0151821660a48201529116925063c7fbf4de915060c4016020604051808303816000875af115801562001591573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620015b7919062007438565b505b620015c860018560016200445a565b620015fe600385620f42406103e8620015e360018962007452565b620015ef9190620072d4565b62000f3890620f368862007294565b6008546200164890600190869073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62004423565b62001656600160006200447c565b62001664600360016200447c565b50505050505080806200167790620074e8565b91505062000fe0565b50565b60005b600281101562001680578015156200169d62000320565b6000620016a962003cca565b9050600080620016b86200403c565b6008549193509150620016e890600190849073ffffffffffffffffffffffffffffffffffffffff16600062004423565b600063f28c049860e01b8460405160240162001705919062007423565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009095169490941790935273ffffffffffffffffffffffffffffffffffffffff86169287019290925290519091506000907ff28c04980000000000000000000000000000000000000000000000000000000090620017db90879060240162007423565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909416939093179092526000805492517f67b426450000000000000000000000000000000000000000000000000000000081529193509173ffffffffffffffffffffffffffffffffffffffff6201000090910416906367b4264590620018ba906001906004016200720b565b602060405180830381865afa158015620018d8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620018fe91906200723e565b600080546040517f67b4264500000000000000000000000000000000000000000000000000000000815292935090916201000090910473ffffffffffffffffffffffffffffffffffffffff16906367b426459062001962906003906004016200720b565b602060405180830381865afa15801562001980573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620019a691906200723e565b9050871562001a1f57600754600854620019f49173ffffffffffffffffffffffffffffffffffffffff908116911673f39fd6e51aad88f6f4ce6ab8827279cfffb92266868686600062004697565b60075462001a199073ffffffffffffffffffffffffffffffffffffffff1685620046aa565b62001ba4565b60075460085462001a649173ffffffffffffffffffffffffffffffffffffffff908116911673f39fd6e51aad88f6f4ce6ab8827279cfffb92266868686600062004447565b600060208801526001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b15801562001aeb57600080fd5b505af115801562001b00573d6000803e3d6000fd5b50506007546040517ff28c049800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116925063f28c0498915062001b5c908a9060040162007423565b6020604051808303816000875af115801562001b7c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001ba2919062007438565b505b62001c056001876103e560028062001bc7670de0b6b3a7640000614e2062007294565b62001bd39190620072d4565b62001bdf9190620072d4565b62001bed906103e862007294565b62001bf99190620072d4565b62000ef7908962007452565b62001c2860038760026103e88162000f20670de0b6b3a7640000614e2062007294565b60085462001c7290600190889073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62004423565b62001c80600360016200447c565b5050505050505050808062001c9590620074e8565b91505062001686565b60005b6002811015620016805780151562001cb862000320565b600062001cc4620047d4565b905060008062001cd36200403c565b600854919350915062001d0390600190849073ffffffffffffffffffffffffffffffffffffffff16600062004423565b600063c04b8d5960e01b8460405160240162001d20919062007423565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009095169490941790935273ffffffffffffffffffffffffffffffffffffffff86169287019290925290519091506000907fc04b8d59000000000000000000000000000000000000000000000000000000009062001df690879060240162007423565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909416939093179092526000805492517f67b426450000000000000000000000000000000000000000000000000000000081529193509173ffffffffffffffffffffffffffffffffffffffff6201000090910416906367b426459062001ed5906001906004016200720b565b602060405180830381865afa15801562001ef3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001f1991906200723e565b600080546040517f67b4264500000000000000000000000000000000000000000000000000000000815292935090916201000090910473ffffffffffffffffffffffffffffffffffffffff16906367b426459062001f7d906003906004016200720b565b602060405180830381865afa15801562001f9b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001fc191906200723e565b905087156200203a576007546008546200200f9173ffffffffffffffffffffffffffffffffffffffff908116911673f39fd6e51aad88f6f4ce6ab8827279cfffb92266868686600062004697565b600754620020349073ffffffffffffffffffffffffffffffffffffffff1685620046aa565b620021bf565b6007546008546200207f9173ffffffffffffffffffffffffffffffffffffffff908116911673f39fd6e51aad88f6f4ce6ab8827279cfffb92266868686600062004447565b600060208801526001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b1580156200210657600080fd5b505af11580156200211b573d6000803e3d6000fd5b50506007546040517fc04b8d5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116925063c04b8d59915062002177908a9060040162007423565b6020604051808303816000875af115801562002197573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620021bd919062007438565b505b620021de600187600262001bed670de0b6b3a7640000614e2062007294565b620022276003876103e880600262002201670de0b6b3a7640000614e2062007294565b6200220d9190620072d4565b620022199190620072d4565b62000f38906103e562007294565b6008546200227190600190889073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62004423565b6200227f600360016200447c565b505050505050505080806200229490620074e8565b91505062001ca1565b6000620022a962004ade565b6001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb5ba4c4d00000000000000000000000000000000000000000000000000000000600482015291925073ffffffffffffffffffffffffffffffffffffffff169063c31eb0e090602401600060405180830381600087803b1580156200233657600080fd5b505af11580156200234b573d6000803e3d6000fd5b50506007546040517f414bf38900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116925063414bf3899150620023a79084906004016200746c565b6020604051808303816000875af1158015620023c7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620023ed919062007438565b506000620023fa620047d4565b6001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb5ba4c4d00000000000000000000000000000000000000000000000000000000600482015291925073ffffffffffffffffffffffffffffffffffffffff169063c31eb0e090602401600060405180830381600087803b1580156200248757600080fd5b505af11580156200249c573d6000803e3d6000fd5b50506007546040517fc04b8d5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116925063c04b8d599150620024f890849060040162007423565b6020604051808303816000875af115801562002518573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200253e919062007438565b5060006200254b6200449c565b6001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb5ba4c4d00000000000000000000000000000000000000000000000000000000600482015291925073ffffffffffffffffffffffffffffffffffffffff169063c31eb0e090602401600060405180830381600087803b158015620025d857600080fd5b505af1158015620025ed573d6000803e3d6000fd5b5050600754604080517fc7fbf4de000000000000000000000000000000000000000000000000000000008152855173ffffffffffffffffffffffffffffffffffffffff90811660048301526020870151811660248301529186015162ffffff166044820152606086015160648201526080860151608482015260a0860151821660a48201529116925063c7fbf4de915060c4016020604051808303816000875af1158015620026a0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620026c6919062007438565b506000620026d362004d1d565b6001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb5ba4c4d00000000000000000000000000000000000000000000000000000000600482015291925073ffffffffffffffffffffffffffffffffffffffff169063c31eb0e090602401600060405180830381600087803b1580156200276057600080fd5b505af115801562002775573d6000803e3d6000fd5b50506007546040517ff4f18d9000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116925063f4f18d909150620027d190849060040162007524565b6020604051808303816000875af1158015620027f1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002817919062007438565b5060006200282462004f03565b6001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb5ba4c4d00000000000000000000000000000000000000000000000000000000600482015291925073ffffffffffffffffffffffffffffffffffffffff169063c31eb0e090602401600060405180830381600087803b158015620028b157600080fd5b505af1158015620028c6573d6000803e3d6000fd5b50506007546040517fdb3e219800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116925063db3e21989150620029229084906004016200746c565b6020604051808303816000875af115801562002942573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002968919062007438565b5060006200297562003cca565b6001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb5ba4c4d00000000000000000000000000000000000000000000000000000000600482015291925073ffffffffffffffffffffffffffffffffffffffff169063c31eb0e090602401600060405180830381600087803b15801562002a0257600080fd5b505af115801562002a17573d6000803e3d6000fd5b50506007546040517ff28c049800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116925063f28c0498915062002a7390849060040162007423565b6020604051808303816000875af115801562002a93573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002ab9919062007438565b50505050505050565b60008054610100900460ff161562002ae35750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1562002c275760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000008284015282518083038401815260608301909352600092909162002b8b917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc49160800162007562565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905262002bc591620075ac565b6000604051808303816000865af19150503d806000811462002c04576040519150601f19603f3d011682016040523d82523d6000602084013e62002c09565b606091505b509150508080602001905181019062002c239190620075ca565b9150505b919050565b60005b6002811015620016805780151562002c4662000320565b600062002c5262004f03565b905060008062002c616200403c565b600854919350915062002c9190600190849073ffffffffffffffffffffffffffffffffffffffff16600062004423565b600063db3e219860e01b8460405160240162002cae91906200746c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925273ffffffffffffffffffffffffffffffffffffffff8516606087015290519091506000907fdb3e2198000000000000000000000000000000000000000000000000000000009062002d819087906024016200746c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529050851562002e80576007546008548651602088015162002e559373ffffffffffffffffffffffffffffffffffffffff90811693169173f39fd6e51aad88f6f4ce6ab8827279cfffb9226691869190600062004697565b60075462002e7a9073ffffffffffffffffffffffffffffffffffffffff1683620046aa565b6200300e565b6007546008548651602088015162002ece9373ffffffffffffffffffffffffffffffffffffffff90811693169173f39fd6e51aad88f6f4ce6ab8827279cfffb9226691869190600062004447565b600060608601526001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b15801562002f5557600080fd5b505af115801562002f6a573d6000803e3d6000fd5b50506007546040517fdb3e219800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116925063db3e2198915062002fc69088906004016200746c565b6020604051808303816000875af115801562002fe6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200300c919062007438565b505b6200306f6001856103e560028062003031670de0b6b3a7640000614e2062007294565b6200303d9190620072d4565b620030499190620072d4565b62003057906103e862007294565b620030639190620072d4565b62000ef7908762007452565b6200309260038560026103e88162000f20670de0b6b3a7640000614e2062007294565b600854620030dc90600190869073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62004423565b620030ea600360016200447c565b5050505050508080620030fd90620074e8565b91505062002c2f565b60005b600281101562001680578015156200312062000320565b60006200312c62004d1d565b90506000806200313b6200403c565b60085491935091506200316b90600190849073ffffffffffffffffffffffffffffffffffffffff16600062004423565b600080546040517f67b426450000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff16906367b4264590620031ca906001906004016200720b565b602060405180830381865afa158015620031e8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200320e91906200723e565b600080546040517f67b4264500000000000000000000000000000000000000000000000000000000815292935090916201000090910473ffffffffffffffffffffffffffffffffffffffff16906367b426459062003272906003906004016200720b565b602060405180830381865afa15801562003290573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620032b691906200723e565b90506000620032c760018562007452565b6040805160a081018252606085811b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000090811660c0840152835160b481850301815260d4840185527e0bb8000000000000000000000000000000000000000000000000000000000060f4850152845160d781860301815260f785019095529188901b166101178301529293506000927fc04b8d5900000000000000000000000000000000000000000000000000000000928291620033c691620033bf9061012b85015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529062003f9c565b9062003f9c565b81526020018873ffffffffffffffffffffffffffffffffffffffff168152602001896020015181526020018481526020016103e88086620034089190620072d4565b62003416906103e562007294565b620034229190620072d4565b905260405162003436919060240162007423565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290508715620035ca57600063f4f18d9060e01b88604051602401620034d9919062007524565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526007546008549192506200359e9173ffffffffffffffffffffffffffffffffffffffff918216911673f39fd6e51aad88f6f4ce6ab8827279cfffb92266858989600062004697565b600754620035c39073ffffffffffffffffffffffffffffffffffffffff1682620046aa565b5062003748565b6007546008546200360f9173ffffffffffffffffffffffffffffffffffffffff908116911673f39fd6e51aad88f6f4ce6ab8827279cfffb92266848888600062004447565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b1580156200368f57600080fd5b505af1158015620036a4573d6000803e3d6000fd5b50506007546040517ff4f18d9000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116925063f4f18d90915062003700908a9060040162007524565b6020604051808303816000875af115801562003720573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003746919062007438565b505b6200375760018760016200445a565b62003772600387620f42406103e8620015e360018b62007452565b600854620037bc90600190889073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62004423565b620037ca600160006200447c565b620037d8600360016200447c565b50505050505050508080620037ed90620074e8565b91505062003109565b60005b600281101562001680578015156200381062000320565b60006200381c62004ade565b90506000806200382b6200403c565b60085491935091506200385b90600190849073ffffffffffffffffffffffffffffffffffffffff16600062004423565b73ffffffffffffffffffffffffffffffffffffffff821660608401526040516000907f414bf3890000000000000000000000000000000000000000000000000000000090620038af9086906024016200746c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925260006060870181905291519092507f414bf38900000000000000000000000000000000000000000000000000000000906200396c9087906024016200746c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529050851562003a6b576007546008548651602088015162003a409373ffffffffffffffffffffffffffffffffffffffff90811693169173f39fd6e51aad88f6f4ce6ab8827279cfffb9226691879190600062004697565b60075462003a659073ffffffffffffffffffffffffffffffffffffffff1682620046aa565b62003bf2565b6007546008548651602088015162003ab99373ffffffffffffffffffffffffffffffffffffffff90811693169173f39fd6e51aad88f6f4ce6ab8827279cfffb9226691879190600062004447565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b15801562003b3957600080fd5b505af115801562003b4e573d6000803e3d6000fd5b50506007546040517f414bf38900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116925063414bf389915062003baa9088906004016200746c565b6020604051808303816000875af115801562003bca573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003bf0919062007438565b505b62003c11600185600262003057670de0b6b3a7640000614e2062007294565b62003c346003856103e880600262002201670de0b6b3a7640000614e2062007294565b60085462003c7e90600190869073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62004423565b62003c8c600360016200447c565b505050505050808062003c9f90620074e8565b915050620037f9565b62003cb4600162005142565b565b600062003cc5426001620075ee565b905090565b62003d136040518060a0016040528060608152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081525090565b600080546040517f67b426450000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff16906367b426459062003d72906001906004016200720b565b602060405180830381865afa15801562003d90573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003db691906200723e565b600080546040517f67b4264500000000000000000000000000000000000000000000000000000000815292935090916201000090910473ffffffffffffffffffffffffffffffffffffffff16906367b426459062003e1a906003906004016200720b565b602060405180830381865afa15801562003e38573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003e5e91906200723e565b6040805160a081018252606085811b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000090811660c0840152835160b481850301815260d4840185527e0bb8000000000000000000000000000000000000000000000000000000000060f4850152845160d781860301815260f785019095529185901b1661011783015292935091829162003f039190620033bf9061012b85016200338a565b815273f39fd6e51aad88f6f4ce6ab8827279cfffb922666020820152600954604082015260600160026103e88162003f46670de0b6b3a7640000614e2062007294565b62003f529190620072d4565b62003f5e9190620072d4565b62003f6a9190620072d4565b8152602001600262003f87670de0b6b3a7640000614e2062007294565b62003f939190620072d4565b90529392505050565b6060806040519050835180825260208201818101602087015b8183101562003fcf57805183526020928301920162003fb5565b50855184518101855292509050808201602086015b8183101562003ffe57805183526020928301920162003fe4565b508651929092011591909101601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0166040525090505b92915050565b6000806000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635f7c9bd06040518163ffffffff1660e01b8152600401602060405180830381865afa158015620040af573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620040d5919062007438565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015291925073ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b1580156200415657600080fd5b505af11580156200416b573d6000803e3d6000fd5b50506003546040517f6c8f225d0000000000000000000000000000000000000000000000000000000081526004810185905273f39fd6e51aad88f6f4ce6ab8827279cfffb92266602482015260646044820181905260009082015273ffffffffffffffffffffffffffffffffffffffff9091169250636c8f225d9150608401600060405180830381600087803b1580156200420557600080fd5b505af11580156200421a573d6000803e3d6000fd5b50506002546040517fe958b70400000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063e958b7049150602401602060405180830381865afa158015620042a1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620042c791906200723e565b6006546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80841660048301529295509116906370a0823190602401602060405180830381865afa1580156200433a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004360919062007438565b600154604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301526024820192909252600d60448201527f6372656469744163636f756e74000000000000000000000000000000000000006064820152929450169063c657c71890608401600060405180830381600087803b1580156200440557600080fd5b505af11580156200441a573d6000803e3d6000fd5b50505050509091565b6200444184848484604051806020016040528060008152506200566e565b50505050565b62002ab9878787878787876001620057ab565b620044778383836040518060200160405280600081525062005daa565b505050565b6200449882826040518060200160405280600081525062005edf565b5050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091526040805160c08101918290526000547f67b426450000000000000000000000000000000000000000000000000000000090925290819062010000900473ffffffffffffffffffffffffffffffffffffffff166367b4264562004535600160c485016200720b565b602060405180830381865afa15801562004553573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200457991906200723e565b73ffffffffffffffffffffffffffffffffffffffff90811682526000546040517f67b4264500000000000000000000000000000000000000000000000000000000815260209093019262010000909104909116906367b4264590620045e4906003906004016200720b565b602060405180830381865afa15801562004602573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200462891906200723e565b73ffffffffffffffffffffffffffffffffffffffff168152610bb8602082015260095460408201526060016103e86200466e816b033b2e3c9fd0803ce8000000620072d4565b6200467c906103e562007294565b620046889190620072d4565b81526000602090910152919050565b62002ab987878787878787600162005ffe565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b1580156200472a57600080fd5b505af11580156200473f573d6000803e3d6000fd5b50506003546040805180820190915273ffffffffffffffffffffffffffffffffffffffff868116825260208201869052909116925063caa5c23f91506200478690620065de565b6040518263ffffffff1660e01b8152600401620047a4919062007609565b600060405180830381600087803b158015620047bf57600080fd5b505af115801562000fd5573d6000803e3d6000fd5b6200481d6040518060a0016040528060608152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081525090565b600080546040517f67b426450000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff16906367b42645906200487c906001906004016200720b565b602060405180830381865afa1580156200489a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620048c091906200723e565b600080546040517f67b4264500000000000000000000000000000000000000000000000000000000815292935090916201000090910473ffffffffffffffffffffffffffffffffffffffff16906367b426459062004924906003906004016200720b565b602060405180830381865afa15801562004942573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200496891906200723e565b6040805160a081019091527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660c08201529091508062004a4c60d482015b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00181528282527e0bb8000000000000000000000000000000000000000000000000000000000060208401528151600381850301815260238401909252606088901b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016604384015291620033bf91906057016200338a565b815273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660208201526009546040820152606001600262004a8b670de0b6b3a7640000614e2062007294565b62004a979190620072d4565b81526020016103e880600262004ab8670de0b6b3a7640000614e2062007294565b62004ac49190620072d4565b62004ad09190620072d4565b62003f87906103e562007294565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810191909152604080516101008101918290526000547f67b426450000000000000000000000000000000000000000000000000000000090925290819062010000900473ffffffffffffffffffffffffffffffffffffffff166367b4264562004b88600161010485016200720b565b602060405180830381865afa15801562004ba6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004bcc91906200723e565b73ffffffffffffffffffffffffffffffffffffffff90811682526000546040517f67b4264500000000000000000000000000000000000000000000000000000000815260209093019262010000909104909116906367b426459062004c37906003906004016200720b565b602060405180830381865afa15801562004c55573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004c7b91906200723e565b73ffffffffffffffffffffffffffffffffffffffff168152610bb8602082015273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660408201526009546060820152608001600262004cd8670de0b6b3a7640000614e2062007294565b62004ce49190620072d4565b81526020016103e880600262004d05670de0b6b3a7640000614e2062007294565b62004d119190620072d4565b6200466e9190620072d4565b62004d4260405180606001604052806060815260200160008152602001600081525090565b600080546040517f67b426450000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff16906367b426459062004da1906001906004016200720b565b602060405180830381865afa15801562004dbf573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004de591906200723e565b600080546040517f67b4264500000000000000000000000000000000000000000000000000000000815292935090916201000090910473ffffffffffffffffffffffffffffffffffffffff16906367b426459062004e49906003906004016200720b565b602060405180830381865afa15801562004e67573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004e8d91906200723e565b9050604051806060016040528062004edb83604051602001620049ac919060609190911b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016815260140190565b815260095460208201526040016103e862004ad0816b033b2e3c9fd0803ce8000000620072d4565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810191909152604080516101008101918290526000547f67b426450000000000000000000000000000000000000000000000000000000090925290819062010000900473ffffffffffffffffffffffffffffffffffffffff166367b4264562004fad600161010485016200720b565b602060405180830381865afa15801562004fcb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004ff191906200723e565b73ffffffffffffffffffffffffffffffffffffffff90811682526000546040517f67b4264500000000000000000000000000000000000000000000000000000000815260209093019262010000909104909116906367b42645906200505c906003906004016200720b565b602060405180830381865afa1580156200507a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620050a091906200723e565b73ffffffffffffffffffffffffffffffffffffffff168152610bb8602082015273f39fd6e51aad88f6f4ce6ab8827279cfffb922666040820152600954606082015260800160026103e88162005101670de0b6b3a7640000614e2062007294565b6200510d9190620072d4565b620051199190620072d4565b620051259190620072d4565b815260200160026200467c670de0b6b3a7640000614e2062007294565b600181600a811115620051595762005159620071a0565b14806200517a5750600381600a811115620051785762005178620071a0565b145b620051e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f556e737570706f7274656420746f6b656e00000000000000000000000000000060448201526064015b60405180910390fd5b604051620051f49062007183565b604051809103906000f08015801562005211573d6000803e3d6000fd5b50600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff166201000073ffffffffffffffffffffffffffffffffffffffff9384168102919091179182905590041663b36ba2086200527b670de0b6b3a7640000606462007294565b6040518263ffffffff1660e01b81526004016000604051808303818588803b158015620052a757600080fd5b505af1158015620052bc573d6000803e3d6000fd5b5050505050600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681604051620052f39062007191565b62005300929190620076b5565b604051809103906000f0801580156200531d573d6000803e3d6000fd5b50600580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169182179055604080517f6f307dc30000000000000000000000000000000000000000000000000000000081529051636f307dc3916004808201926020929091908290030181865afa158015620053b7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620053dd91906200723e565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600554604080517fc12c21c00000000000000000000000000000000000000000000000000000000081529051919092169163c12c21c09160048083019260209291908290030181865afa1580156200547a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620054a091906200723e565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600554604080517f2f7a188100000000000000000000000000000000000000000000000000000000815290519190921691632f7a18819160048083019260209291908290030181865afa1580156200553d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200556391906200723e565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600554604080517ff9aa028a0000000000000000000000000000000000000000000000000000000081529051919092169163f9aa028a9160048083019260209291908290030181865afa15801562005600573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200562691906200723e565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff16620056f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f74657374546f6b656e5375697465206973206e6f7420736574000000000000006044820152606401620051dd565b6000546040517f67b42645000000000000000000000000000000000000000000000000000000008152620057a49162010000900473ffffffffffffffffffffffffffffffffffffffff16906367b4264590620057569089906004016200720b565b602060405180830381865afa15801562005774573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200579a91906200723e565b8585858562006647565b5050505050565b6002546040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152600092169063e958b70490602401602060405180830381865afa1580156200581d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200584391906200723e565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000918716906370a0823190602401602060405180830381865afa158015620058b6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620058dc919062007438565b9050821562005a14576001546002546040805173ffffffffffffffffffffffffffffffffffffffff8c811660248301528d811660448301528a811660648301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6084808401919091528351808403909101815260a490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f46fb371d0000000000000000000000000000000000000000000000000000000017905291517fbd6af4340000000000000000000000000000000000000000000000000000000081529382169363bd6af43493620059df93169190600401620076e1565b600060405180830381600087803b158015620059fa57600080fd5b505af115801562005a0f573d6000803e3d6000fd5b505050505b60015460025460405173ffffffffffffffffffffffffffffffffffffffff9283169263bd6af4349216907f6ce4074a000000000000000000000000000000000000000000000000000000009062005a74908d908f908e906024016200771a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b909216825262005b079291600401620076e1565b600060405180830381600087803b15801562005b2257600080fd5b505af115801562005b37573d6000803e3d6000fd5b5050600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526024810192909252600060448301819052606483015273ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b15801562005bbd57600080fd5b505af115801562005bd2573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff808d1693508b1691507faed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab0390600090a3821562005d9e5760015460025473ffffffffffffffffffffffffffffffffffffffff9182169163bd6af43491167f46fb371d000000000000000000000000000000000000000000000000000000008b8d8b8a62005c99577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62005c9c565b60015b60405173ffffffffffffffffffffffffffffffffffffffff9485166024820152928416604484015292166064820152608481019190915260a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b909216825262005d699291600401620076e1565b600060405180830381600087803b15801562005d8457600080fd5b505af115801562005d99573d6000803e3d6000fd5b505050505b50505050505050505050565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1662005e31576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f74657374546f6b656e5375697465206973206e6f7420736574000000000000006044820152606401620051dd565b6000546040517f67b42645000000000000000000000000000000000000000000000000000000008152620044419162010000900473ffffffffffffffffffffffffffffffffffffffff16906367b426459062005e929088906004016200720b565b602060405180830381865afa15801562005eb0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005ed691906200723e565b84848462006885565b600554604080517f406c8e2f0000000000000000000000000000000000000000000000000000000081529051620044779273ffffffffffffffffffffffffffffffffffffffff169163406c8e2f9160048083019260209291908290030181865afa15801562005f52573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005f7891906200723e565b73ffffffffffffffffffffffffffffffffffffffff166367b42645856040518263ffffffff1660e01b815260040162005fb291906200720b565b602060405180830381865afa15801562005fd0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005ff691906200723e565b838362006a40565b6002546040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152600092169063e958b70490602401602060405180830381865afa15801562006070573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200609691906200723e565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000918716906370a0823190602401602060405180830381865afa15801562006109573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200612f919062007438565b600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481019290925260006024830181905260448301819052606483015291925073ffffffffffffffffffffffffffffffffffffffff9091169063491cc7c290608401600060405180830381600087803b158015620061b657600080fd5b505af1158015620061cb573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff8b1692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a2821562006349576001546002546003546040805173ffffffffffffffffffffffffffffffffffffffff92831660248201528d831660448201528a831660648201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6084808301919091528251808303909101815260a490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f46fb371d0000000000000000000000000000000000000000000000000000000017905290517fbd6af4340000000000000000000000000000000000000000000000000000000081529382169363bd6af434936200631493169190600401620076e1565b600060405180830381600087803b1580156200632f57600080fd5b505af115801562006344573d6000803e3d6000fd5b505050505b60015460025460035460405173ffffffffffffffffffffffffffffffffffffffff9384169363bd6af434938116927f6ce4074a0000000000000000000000000000000000000000000000000000000092620063af92909116908f908e906024016200771a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b9092168252620064429291600401620076e1565b600060405180830381600087803b1580156200645d57600080fd5b505af115801562006472573d6000803e3d6000fd5b5050600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526024810192909252600060448301819052606483015273ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b158015620064f857600080fd5b505af11580156200650d573d6000803e3d6000fd5b505060035460405173ffffffffffffffffffffffffffffffffffffffff8d8116945090911691507faed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab0390600090a3821562005d9e5760015460025460035473ffffffffffffffffffffffffffffffffffffffff9283169263bd6af434928116917f46fb371d0000000000000000000000000000000000000000000000000000000091168d8b8a62005c99577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62005c9c565b604080516001808252818301909252606091816020015b604080518082019091526000815260606020820152815260200190600190039081620065f557905050905081816000815181106200663757620066376200778d565b6020026020010181905250919050565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301526000919087169063dd62ed3e90604401602060405180830381865afa158015620066c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620066e6919062007438565b905082811462006879577f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f828773ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200675e573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620067a69190810190620077bc565b604051602001620067b992919062007893565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052620067f591889062007919565b60405180910390a160408051818152600a818301527f207370656e6465723a2000000000000000000000000000000000000000000000606082015273ffffffffffffffffffffffffffffffffffffffff8616602082015290517f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f9181900360800190a15b62000fd5818462006db6565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600091908616906370a0823190602401602060405180830381865afa158015620068f6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200691c919062007438565b905082811462006a34577f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f828673ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562006994573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620069dc9190810190620077bc565b604051602001620069ef92919062007953565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905262006a2b91879062007919565b60405180910390a15b620057a4818462006db6565b6002546040517fe958b70400000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015260009173ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa15801562006ac4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062006aea91906200723e565b6002546040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015292935060009290911690638991b2f190602401602060405180830381865afa15801562006b61573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062006b87919062007438565b6002546040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529091169063f67c5bd090602401602060405180830381865afa15801562006bf8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062006c1e919062007438565b1615159050831515811480159062006c365750825115155b1562006c76577f0b2e13ff20ac7b474198655583edf70dedd2c1dc980e329c4fbb2fc0748b796b8360405162006c6d9190620079d9565b60405180910390a15b620057a4841515821515148673ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562006ccd573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262006d159190810190620077bc565b8362006d57576040518060400160405280601981526020017f206e6f7420656e61626c6564206173206578706563746564200000000000000081525062006d8e565b6040518060400160405280601981526020017f20656e61626c6564206173206e6f7420657870657463746564000000000000008152505b60405160200162006da1929190620079ee565b60405160208183030381529060405262006f22565b80821462004498577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f5060405162006e449060208082526022908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b75696e60408201527f745d000000000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a160408051818152600a818301527f202045787065637465640000000000000000000000000000000000000000000060608201526020810183905290517fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a89181900360800190a160408051818152600a818301527f2020202041637475616c0000000000000000000000000000000000000000000060608201526020810184905290517fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a89181900360800190a16200449862006f6c565b8162004498577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf35838160405162006f59919062007a4d565b60405180910390a16200449882620070ef565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620070c15760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000009282019290925260016060820152600091907f70ca10bbd0dbfd9020a9f4b13402c16cb120705e0d1c0aeab10fa353ae586fc490608001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526200703e929160200162007562565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526200707891620075ac565b6000604051808303816000865af19150503d8060008114620070b7576040519150601f19603f3d011682016040523d82523d6000602084013e620070bc565b606091505b505050505b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055565b8062001680577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f50604051620071559060208082526017908201527f4572726f723a20417373657274696f6e204661696c6564000000000000000000604082015260600190565b60405180910390a16200168062006f6c565b611c0e8062007a9783390190565b61221a80620096a583390190565b617a51806200b8bf83390190565b62031ed6806201331083390190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600b811062007207577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b60208101620040368284620071cf565b73ffffffffffffffffffffffffffffffffffffffff811681146200168057600080fd5b6000602082840312156200725157600080fd5b81516200725e816200721b565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620072cf57620072cf62007265565b500290565b6000826200730b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60608101620073208286620071cf565b73ffffffffffffffffffffffffffffffffffffffff93909316602082015260400152919050565b60005b83811015620073645781810151838201526020016200734a565b83811115620044415750506000910152565b600081518084526200739081602086016020860162007347565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6000815160a08452620073d960a085018262007376565b905073ffffffffffffffffffffffffffffffffffffffff60208401511660208501526040830151604085015260608301516060850152608083015160808501528091505092915050565b6020815260006200725e6020830184620073c2565b6000602082840312156200744b57600080fd5b5051919050565b60008282101562007467576200746762007265565b500390565b610100810162004036828473ffffffffffffffffffffffffffffffffffffffff80825116835280602083015116602084015262ffffff60408301511660408401528060608301511660608401526080820151608084015260a082015160a084015260c082015160c08401528060e08301511660e0840152505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156200751d576200751d62007265565b5060010190565b60208152600082516060602084015262007542608084018262007376565b905060208401516040840152604084015160608401528091505092915050565b7fffffffff0000000000000000000000000000000000000000000000000000000083168152600082516200759e81600485016020870162007347565b919091016004019392505050565b60008251620075c081846020870162007347565b9190910192915050565b600060208284031215620075dd57600080fd5b815180151581146200725e57600080fd5b6000821982111562007604576200760462007265565b500190565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015620076a7578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00185528151805173ffffffffffffffffffffffffffffffffffffffff168452870151878401879052620076938785018262007376565b958801959350509086019060010162007630565b509098975050505050505050565b73ffffffffffffffffffffffffffffffffffffffff83168152604081016200725e6020830184620071cf565b73ffffffffffffffffffffffffffffffffffffffff8316815260406020820152600062007712604083018462007376565b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff80861683528085166020840152506060604083015262007755606083018462007376565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215620077cf57600080fd5b815167ffffffffffffffff80821115620077e857600080fd5b818401915084601f830112620077fd57600080fd5b8151818111156200781257620078126200775e565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156200785b576200785b6200775e565b816040528281528760208487010111156200787557600080fd5b6200788883602083016020880162007347565b979650505050505050565b60008351620078a781846020880162007347565b7f496e636f727265637420000000000000000000000000000000000000000000009083019081528351620078e381600a84016020880162007347565b7f20416c6c6f77616e6365206f6e206163636f756e743a20200000000000000000600a9290910191820152602201949350505050565b6040815260006200792e604083018562007376565b905073ffffffffffffffffffffffffffffffffffffffff831660208301529392505050565b600083516200796781846020880162007347565b7f496e636f727265637420000000000000000000000000000000000000000000009083019081528351620079a381600a84016020880162007347565b7f2062616c616e6365206f6e206163636f756e743a200000000000000000000000600a9290910191820152601f01949350505050565b6020815260006200725e602083018462007376565b7f546f6b656e20000000000000000000000000000000000000000000000000000081526000835162007a2881600685016020880162007347565b83519083019062007a4181600684016020880162007347565b01600601949350505050565b60408152600560408201527f4572726f7200000000000000000000000000000000000000000000000000000060608201526080602082015260006200725e60808301846200737656fe60806040526000805460ff1916600117905534801561001d57600080fd5b50611be18061002d6000396000f3fe6080604052600436106100d25760003560e01c8063ba414fa61161007f578063db3e219811610059578063db3e219814610215578063f28c049814610228578063f7729d431461023b578063fa7626d41461025b57600080fd5b8063ba414fa6146101bd578063c04b8d59146101e2578063cdca1753146101f557600080fd5b8063414bf389116100b0578063414bf3891461014c57806347485d2a1461015f5780635911fb9a1461019d57600080fd5b80632ccbc99b146100d75780632f80bb1d146100f957806330d07f211461012c575b600080fd5b3480156100e357600080fd5b506100f76100f2366004611672565b610275565b005b34801561010557600080fd5b506101196101143660046116f0565b61031f565b6040519081526020015b60405180910390f35b34801561013857600080fd5b506101196101473660046117c3565b610468565b61011961015a366004611842565b610566565b34801561016b57600080fd5b5061011961017a36600461185f565b600160209081526000938452604080852082529284528284209052825290205481565b3480156101a957600080fd5b506100f76101b83660046118a6565b6106b5565b3480156101c957600080fd5b506101d26106c8565b6040519015158152602001610123565b6101196101f03660046118f9565b610826565b34801561020157600080fd5b506101196102103660046116f0565b6109b5565b610119610223366004611842565b610af1565b6101196102363660046118f9565b610c00565b34801561024757600080fd5b506101196102563660046117c3565b610d4e565b34801561026757600080fd5b506000546101d29060ff1681565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160209081526040808320938716835292815282822062ffffff86168352905220819055806102ce6b033b2e3c9fd0803ce80000008061195d565b6102d8919061199a565b73ffffffffffffffffffffffffffffffffffffffff938416600090815260016020908152604080832097909616825295865284812062ffffff909416815292909452502055565b805b600361032f6014600261195d565b61033991906119d5565b83511061046257600080600061034e86610e35565b73ffffffffffffffffffffffffffffffffffffffff8083166000908152600160209081526040808320938716835292815282822062ffffff8516835290522054929550909350915080610402576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f556e697377617056334d6f636b3a2052617465206973206e6f7420736574757060448201526064015b60405180910390fd5b61041462ffffff8316620f42406119ed565b8161042b6b033b2e3c9fd0803ce80000008861195d565b610435919061199a565b61044290620f424061195d565b61044c919061199a565b945061045787610e71565b965050505050610321565b92915050565b73ffffffffffffffffffffffffffffffffffffffff8086166000908152600160209081526040808320938816835292815282822062ffffff8716835290529081205480610511576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f556e697377617056334d6f636b3a2052617465206973206e6f7420736574757060448201526064016103f9565b61052362ffffff8616620f42406119ed565b8161053a6b033b2e3c9fd0803ce80000008761195d565b610544919061199a565b61055190620f424061195d565b61055b919061199a565b979650505050505050565b60006105a46105786020840184611a04565b6105886040850160208601611a04565b6105986060860160408701611a21565b8560a001356000610d4e565b90508160c0013581101561063a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f556e69737761705632526f757465723a20494e53554646494349454e545f4f5560448201527f545055545f414d4f554e5400000000000000000000000000000000000000000060648201526084016103f9565b61066f333060a08501356106516020870187611a04565b73ffffffffffffffffffffffffffffffffffffffff16929190610ea2565b6106b06106826080840160608501611a04565b826106936040860160208701611a04565b73ffffffffffffffffffffffffffffffffffffffff169190610f84565b919050565b6106c38383610bb884610275565b505050565b60008054610100900460ff16156106e85750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106b05760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000008284015282518083038401815260608301909352600092909161078d917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc491608001611a68565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526107c591611ab0565b6000604051808303816000865af19150503d8060008114610802576040519150601f19603f3d011682016040523d82523d6000602084013e610807565b606091505b509150508080602001905181019061081f9190611acc565b9392505050565b600080806108716108378580611aee565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610fda92505050565b90925090506108c16108838580611aee565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505060608601356109b5565b92508360800135831015610957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f556e69737761705632526f757465723a20494e53554646494349454e545f4f5560448201527f545055545f414d4f554e5400000000000000000000000000000000000000000060648201526084016103f9565b61097d73ffffffffffffffffffffffffffffffffffffffff831633306060880135610ea2565b6109ae6109906040860160208701611a04565b73ffffffffffffffffffffffffffffffffffffffff83169085610f84565b5050919050565b805b60036109c56014600261195d565b6109cf91906119d5565b8351106104625760008060006109e486610e35565b73ffffffffffffffffffffffffffffffffffffffff8084166000908152600160209081526040808320938616835292815282822062ffffff8516835290522054929550909350915080610a93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f556e697377617056334d6f636b3a2052617465206973206e6f7420736574757060448201526064016103f9565b620f4240610aa662ffffff8416826119ed565b6b033b2e3c9fd0803ce8000000610abd848961195d565b610ac7919061199a565b610ad1919061195d565b610adb919061199a565b9450610ae687610e71565b9650505050506109b7565b6000610b2f610b036020840184611a04565b610b136040850160208601611a04565b610b236060860160408701611a21565b8560a001356000610468565b90508160c00135811115610bc5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f556e69737761705632526f757465723a20494e53554646494349454e545f4f5560448201527f545055545f414d4f554e5400000000000000000000000000000000000000000060648201526084016103f9565b610bd83330836106516020870187611a04565b6106b0610beb6080840160608501611a04565b60a08401356106936040860160208701611a04565b60008080610c116108378580611aee565b9092509050610c61610c238580611aee565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050606086013561031f565b92508360800135831115610cf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f556e69737761705632526f757465723a20494e53554646494349454e545f4f5560448201527f545055545f414d4f554e5400000000000000000000000000000000000000000060648201526084016103f9565b610d1973ffffffffffffffffffffffffffffffffffffffff8216333086610ea2565b6109ae610d2c6040860160208701611a04565b73ffffffffffffffffffffffffffffffffffffffff8416906060870135610f84565b73ffffffffffffffffffffffffffffffffffffffff8086166000908152600160209081526040808320938816835292815282822062ffffff8716835290529081205480610df7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f556e697377617056334d6f636b3a2052617465206973206e6f7420736574757060448201526064016103f9565b620f4240610e0a62ffffff8716826119ed565b6b033b2e3c9fd0803ce8000000610e21848861195d565b610e2b919061199a565b610551919061195d565b60008080610e43848261101c565b9250610e508460146110ac565b9050610e68610e61600360146119d5565b859061101c565b91509193909250565b6060610462610e82600360146119d5565b610e8e600360146119d5565b8451610e9a91906119ed565b8491906111a0565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052610f7e9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261131a565b50505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526106c39084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401610efc565b600080610fe683610e35565b50909250610ff5905083611426565b1561100a5761100383610e71565b9250915091565b61101383610e35565b50915050915091565b60006110298260146119d5565b83511015611093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f746f416464726573735f6f75744f66426f756e6473000000000000000000000060448201526064016103f9565b5001602001516c01000000000000000000000000900490565b6000816110ba8160036119d5565b1015611122576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f746f55696e7432345f6f766572666c6f7700000000000000000000000000000060448201526064016103f9565b61112d8260036119d5565b83511015611197576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f746f55696e7432345f6f75744f66426f756e647300000000000000000000000060448201526064016103f9565b50016003015190565b6060816111ae81601f6119d5565b1015611216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016103f9565b61122082846119d5565b8451101561128a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e647300000000000000000000000000000060448201526064016103f9565b6060821580156112a95760405191506000825260208201604052611311565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156112e25780518352602092830192016112ca565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b600061137c826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166114609092919063ffffffff16565b8051909150156106c3578080602001905181019061139a9190611acc565b6106c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016103f9565b6000611434600360146119d5565b60146114416003826119d5565b61144b91906119d5565b61145591906119d5565b825110159050919050565b606061146f8484600085611477565b949350505050565b606082471015611509576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016103f9565b843b611571576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016103f9565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161159a9190611ab0565b60006040518083038185875af1925050503d80600081146115d7576040519150601f19603f3d011682016040523d82523d6000602084013e6115dc565b606091505b509150915061055b828286606083156115f657508161081f565b8251156116065782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103f99190611b5a565b73ffffffffffffffffffffffffffffffffffffffff8116811461165c57600080fd5b50565b803562ffffff811681146106b057600080fd5b6000806000806080858703121561168857600080fd5b84356116938161163a565b935060208501356116a38161163a565b92506116b16040860161165f565b9396929550929360600135925050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561170357600080fd5b823567ffffffffffffffff8082111561171b57600080fd5b818501915085601f83011261172f57600080fd5b813581811115611741576117416116c1565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715611787576117876116c1565b816040528281528860208487010111156117a057600080fd5b826020860160208301376000602093820184015298969091013596505050505050565b600080600080600060a086880312156117db57600080fd5b85356117e68161163a565b945060208601356117f68161163a565b93506118046040870161165f565b925060608601359150608086013561181b8161163a565b809150509295509295909350565b6000610100828403121561183c57600080fd5b50919050565b6000610100828403121561185557600080fd5b61081f8383611829565b60008060006060848603121561187457600080fd5b833561187f8161163a565b9250602084013561188f8161163a565b915061189d6040850161165f565b90509250925092565b6000806000606084860312156118bb57600080fd5b83356118c68161163a565b925060208401356118d68161163a565b929592945050506040919091013590565b600060a0828403121561183c57600080fd5b60006020828403121561190b57600080fd5b813567ffffffffffffffff81111561192257600080fd5b61146f848285016118e7565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156119955761199561192e565b500290565b6000826119d0577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600082198211156119e8576119e861192e565b500190565b6000828210156119ff576119ff61192e565b500390565b600060208284031215611a1657600080fd5b813561081f8161163a565b600060208284031215611a3357600080fd5b61081f8261165f565b60005b83811015611a57578181015183820152602001611a3f565b83811115610f7e5750506000910152565b7fffffffff000000000000000000000000000000000000000000000000000000008316815260008251611aa2816004850160208701611a3c565b919091016004019392505050565b60008251611ac2818460208701611a3c565b9190910192915050565b600060208284031215611ade57600080fd5b8151801515811461081f57600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112611b2357600080fd5b83018035915067ffffffffffffffff821115611b3e57600080fd5b602001915036819003821315611b5357600080fd5b9250929050565b6020815260008251806020840152611b79816040850160208701611a3c565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea26469706673582212204cf30f1ca2431e63304f0a45d5cefa0164fe6393b35a339d16bca5512d511dd064736f6c634300080a003360e06040523480156200001157600080fd5b506040516200221a3803806200221a833981016040819052620000349162000121565b81816001600160a01b03821615806200005457506001600160a01b038116155b156200007357604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038216608081905260408051632f7a188160e01b81529051632f7a1881916004808201926020929091908290030181865afa158015620000be573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e4919062000159565b6001600160a01b0390811660a0521660c05250506001600055506200017e565b80516001600160a01b03811681146200011c57600080fd5b919050565b600080604083850312156200013557600080fd5b620001408362000104565b9150620001506020840162000104565b90509250929050565b6000602082840312156200016c57600080fd5b620001778262000104565b9392505050565b60805160a05160c051611ff6620002246000396000818161017a015281816111a8015281816112c701526113a101526000818160d30152818161101301526115330152600081816101c101528181610314015281816105630152818161070501528181610ae001528181610c7801528181610dbe015281816111fe01528181611298015281816113f7015281816115bb0152818161166f01526117190152611ff66000f3fe6080604052600436106100bc5760003560e01c8063c12c21c011610074578063db3e21981161004e578063db3e219814610225578063f28c049814610238578063f4f18d901461024b57600080fd5b8063c12c21c0146101af578063c7fbf4de146101e3578063ce30bbdb1461020357600080fd5b806378aa73a4116100a557806378aa73a414610140578063bd90df7014610168578063c04b8d591461019c57600080fd5b80632f7a1881146100c1578063414bf3891461011f575b600080fd5b3480156100cd57600080fd5b506100f57f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61013261012d36600461182d565b61026b565b604051908152602001610116565b34801561014c57600080fd5b50610155600281565b60405161ffff9091168152602001610116565b34801561017457600080fd5b506100f57f000000000000000000000000000000000000000000000000000000000000000081565b6101326101aa366004611863565b6104bf565b3480156101bb57600080fd5b506100f57f000000000000000000000000000000000000000000000000000000000000000081565b3480156101ef57600080fd5b506101326101fe3660046118a0565b6106bd565b34801561020f57600080fd5b50610218600281565b60405161011691906118b2565b61013261023336600461182d565b610a3c565b610132610246366004611863565b610bd4565b34801561025757600080fd5b506101326102663660046118f3565b610d76565b6000600260005414156102df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610370573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103949190611953565b905060006103a736859003850185611af2565b73ffffffffffffffffffffffffffffffffffffffff83166060820152905061049f826103d66020870187611b0f565b6103e66040880160208901611b0f565b6040517f414bf3890000000000000000000000000000000000000000000000000000000090610419908790602401611b2c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915260016000610ff6565b8060200190518101906104b29190611ba7565b6001600055949350505050565b60006002600054141561052e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016102d6565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156105bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105e39190611953565b905060008061062f6105f58680611bc0565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061146e92505050565b9150915060008561063f90611d27565b73ffffffffffffffffffffffffffffffffffffffff8516602082015260405190915061069b908590859085907fc04b8d590000000000000000000000000000000000000000000000000000000090610419908790602401611e0c565b8060200190518101906106ae9190611ba7565b60016000559695505050505050565b6040517fe958b704000000000000000000000000000000000000000000000000000000008152336004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa15801561074c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107709190611953565b905060006107816020850185611b0f565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015291909116906370a0823190602401602060405180830381865afa1580156107ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108139190611ba7565b90506001811115610a35576040805161010081019091527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90910190600090806108606020880188611b0f565b73ffffffffffffffffffffffffffffffffffffffff16815260200186602001602081019061088e9190611b0f565b73ffffffffffffffffffffffffffffffffffffffff1681526020016108b96060880160408901611e1f565b62ffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff168152602001866060013581526020018381526020016b033b2e3c9fd0803ce800000087608001358561090c9190611e69565b6109169190611ea6565b815260200161092b60c0880160a08901611b0f565b73ffffffffffffffffffffffffffffffffffffffff1690529050610a1e836109566020880188611b0f565b6109666040890160208a01611b0f565b6040517f414bf3890000000000000000000000000000000000000000000000000000000090610999908790602401611b2c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152600180610ff6565b806020019051810190610a319190611ba7565b9350505b5050919050565b600060026000541415610aab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016102d6565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610b3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b609190611953565b90506000610b7336859003850185611af2565b73ffffffffffffffffffffffffffffffffffffffff831660608201528051602082015160405192935061049f92859291907fdb3e21980000000000000000000000000000000000000000000000000000000090610419908790602401611b2c565b600060026000541415610c43576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016102d6565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610cd4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf89190611953565b9050600080610d0a6105f58680611bc0565b91509150600085610d1a90611d27565b73ffffffffffffffffffffffffffffffffffffffff8516602082015260405190915061069b908590849086907ff28c04980000000000000000000000000000000000000000000000000000000090610419908790602401611e0c565b6040517fe958b704000000000000000000000000000000000000000000000000000000008152336004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015610e05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e299190611953565b9050600080610e3b6105f58680611bc0565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301529294509092506000918416906370a0823190602401602060405180830381865afa158015610eb0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed49190611ba7565b90506001811115610fed576040805160a081019091527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091019060009080610f1d8980611bc0565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509082525073ffffffffffffffffffffffffffffffffffffffff8716602080830191909152890135604080830191909152606082018590526080909101906b033b2e3c9fd0803ce800000090610fa8908b013586611e69565b610fb29190611ea6565b8152509050610fd685858563c04b8d5960e01b856040516024016109999190611e0c565b806020019051810190610fe99190611ba7565b9550505b50505050919050565b60606000803373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461115f576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301528916906370a0823190602401602060405180830381865afa1580156110a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c89190611ba7565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152919350908816906370a0823190602401602060405180830381865afa158015611138573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115c9190611ba7565b90505b841561125b576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561124257600080fd5b505af1158015611256573d6000803e3d6000fd5b505050505b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a906112f19033907f0000000000000000000000000000000000000000000000000000000000000000908b90600401611ee1565b6000604051808303816000875af1158015611310573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526113569190810190611f23565b92508415611454576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561143b57600080fd5b505af115801561144f573d6000803e3d6000fd5b505050505b61146289898985858961151b565b50509695505050505050565b600080600361147f60146002611e69565b6114899190611f91565b835110156114c3576040517f8287466d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114ce83600061177e565b91506115146114df60036014611f91565b6114eb60036014611f91565b601486516114f99190611fa9565b6115039190611ea6565b61150d9190611e69565b849061177e565b9050915091565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461161c576040517f654a9eda00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528681166024830152858116604483015260648201859052608482018490527f0000000000000000000000000000000000000000000000000000000000000000169063654a9eda9060a401600060405180830381600087803b1580156115ff57600080fd5b505af1158015611613573d6000803e3d6000fd5b50505050611776565b80156116cc576040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015286811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b1580156116b357600080fd5b505af11580156116c7573d6000803e3d6000fd5b505050505b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015285811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561175d57600080fd5b505af1158015611771573d6000803e3d6000fd5b505050505b505050505050565b600061178b826014611f91565b835110156117f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f746f416464726573735f6f75744f66426f756e6473000000000000000000000060448201526064016102d6565b50818101602001516c0100000000000000000000000090045b92915050565b6000610100828403121561182757600080fd5b50919050565b6000610100828403121561184057600080fd5b61184a8383611814565b9392505050565b600060a0828403121561182757600080fd5b60006020828403121561187557600080fd5b813567ffffffffffffffff81111561188c57600080fd5b61189884828501611851565b949350505050565b600060c0828403121561182757600080fd5b60208101601183106118ed577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561190557600080fd5b813567ffffffffffffffff81111561191c57600080fd5b82016060818503121561184a57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8116811461195057600080fd5b50565b60006020828403121561196557600080fd5b815161184a8161192e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff811182821017156119c2576119c2611970565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611a0f57611a0f611970565b604052919050565b8035611a228161192e565b919050565b803562ffffff81168114611a2257600080fd5b6000610100808385031215611a4e57600080fd5b6040519081019067ffffffffffffffff82118183101715611a7157611a71611970565b8160405280925083359150611a858261192e565b818152611a9460208501611a17565b6020820152611aa560408501611a27565b6040820152611ab660608501611a17565b60608201526080840135608082015260a084013560a082015260c084013560c0820152611ae560e08501611a17565b60e0820152505092915050565b60006101008284031215611b0557600080fd5b61184a8383611a3a565b600060208284031215611b2157600080fd5b813561184a8161192e565b610100810161180e828473ffffffffffffffffffffffffffffffffffffffff80825116835280602083015116602084015262ffffff60408301511660408401528060608301511660608401526080820151608084015260a082015160a084015260c082015160c08401528060e08301511660e0840152505050565b600060208284031215611bb957600080fd5b5051919050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112611bf557600080fd5b83018035915067ffffffffffffffff821115611c1057600080fd5b602001915036819003821315611c2557600080fd5b9250929050565b600067ffffffffffffffff821115611c4657611c46611970565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600060a08284031215611c8457600080fd5b611c8c61199f565b9050813567ffffffffffffffff811115611ca557600080fd5b8201601f81018413611cb657600080fd5b80356020611ccb611cc683611c2c565b6119c8565b8281528682848601011115611cdf57600080fd5b828285018383013760008184018301528452611cfc858201611a17565b8185015250505060408201356040820152606082013560608201526080820135608082015292915050565b600061180e3683611c72565b60005b83811015611d4e578181015183820152602001611d36565b83811115611d5d576000848401525b50505050565b60008151808452611d7b816020860160208601611d33565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6000815160a08452611dc260a0850182611d63565b905073ffffffffffffffffffffffffffffffffffffffff60208401511660208501526040830151604085015260608301516060850152608083015160808501528091505092915050565b60208152600061184a6020830184611dad565b600060208284031215611e3157600080fd5b61184a82611a27565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611ea157611ea1611e3a565b500290565b600082611edc577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600073ffffffffffffffffffffffffffffffffffffffff808616835280851660208401525060606040830152611f1a6060830184611d63565b95945050505050565b600060208284031215611f3557600080fd5b815167ffffffffffffffff811115611f4c57600080fd5b8201601f81018413611f5d57600080fd5b8051611f6b611cc682611c2c565b818152856020838501011115611f8057600080fd5b611f1a826020830160208601611d33565b60008219821115611fa457611fa4611e3a565b500190565b600082821015611fbb57611fbb611e3a565b50039056fea26469706673582212205e5422ac5bcae72b08548a48e40a231ab28c72dbc2d7f2b1b2c453222770f56564736f6c634300080a003360806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d00011790553480156200003a57600080fd5b506040805161018081019091526000908060c081018060018152604080518082018252600381526244414960e81b6020828101919091528301526012908201526305f5e100606082015260800160018152602001600081525081526020016040518060c001604052806002600a811115620000b957620000b962000b78565b815260408051808201825260048152635553444360e01b6020828101919091528301526006908201526305f5e100606082015260800160018152602001600081525081526020016040518060c001604052806003600a81111562000121576200012162000b78565b815260408051808201825260048152630ae8aa8960e31b602082810191909152830152601290820152644a817c8000606082015260800160028152602001600081525081526020016040518060c001604052806004600a8111156200018a576200018a62000b78565b815260408051808201825260048152634c494e4b60e01b6020828101919091528301526012908201526359682f00606082015260800160018152602001600081525081526020016040518060c001604052806005600a811115620001f257620001f262000b78565b815260408051808201825260048152631554d11560e21b602082810191909152830152601290820152633b023380606082015260800160018152602001600081525081526020016040518060c001604052806006600a8111156200025a576200025a62000b78565b815260408051808201825260058152640e6e88aa8960db1b602082810191909152830152601290820152644cd588640060608201526080016003815260200160009052905260408051610140810190915290915060009080608081018060078152602001604051806040016040528060048152602001636344414960e01b8152508152602001601260ff1681526020016305f5e100815260200160048081111562000309576200030962000b78565b8152602001600181525081526020016040518060c001604052806008600a81111562000339576200033962000b78565b81526040805180820182526005815264635553444360d81b6020828101919091528301526006908201526305f5e100606082015260800160048152602001600281525081526020016040518060c001604052806009600a811115620003a257620003a262000b78565b8152604080518082018252600581526418d554d11560da1b602082810191909152830152601290820152633b023380606082015260800160048152602001600581525081526020016040518060c00160405280600a808111156200040a576200040a62000b78565b81526040805180820182526005815264634c494e4b60d81b6020828101919091528301526012908201526359682f00606082015260800160048152602001600490529052905060005b600681101562000496576200048183826006811062000476576200047662000b8e565b6020020151620004db565b806200048d8162000ba4565b91505062000453565b5060005b6004811015620004d257620004bd82826004811062000476576200047662000b8e565b80620004c98162000ba4565b9150506200049a565b50505062000d14565b6000600282608001516004811115620004f857620004f862000b78565b14156200054e576040516200050d9062000a8c565b604051809103906000f0801580156200052a573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b03831617905590506200071e565b60038260800151600481111562000569576200056962000b78565b1415620005a4576040516200057e9062000a9a565b604051809103906000f0801580156200059b573d6000803e3d6000fd5b5090506200071e565b600182608001516004811115620005bf57620005bf62000b78565b1415620005f157816020015182602001518360400151604051620005e39062000aa8565b6200057e9392919062000c1e565b6004826080015160048111156200060c576200060c62000b78565b1415620006be576000600260008460a00151600a81111562000632576200063262000b78565b600a81111562000646576200064662000b78565b815260200190815260200160002060009054906101000a90046001600160a01b0316905082602001518360200151846040015183604051620006889062000ab6565b62000697949392919062000c5b565b604051809103906000f080158015620006b4573d6000803e3d6000fd5b509150506200071e565b60405162461bcd60e51b815260206004820152602b60248201527f74657374546f6b656e53756974653a204372656174696e6720756e6b6e6f776e60448201526a20746f6b656e207479706560a81b606482015260840160405180910390fd5b60005460208301516040516318caf8e360e31b8152620100009092046001600160a01b03169163c657c718916200075b9185919060040162000ca9565b600060405180830381600087803b1580156200077657600080fd5b505af11580156200078b573d6000803e3d6000fd5b50505050600082606001516008604051620007a69062000ac4565b91825260ff166020820152604001604051809103906000f080158015620007d1573d6000803e3d6000fd5b50905081600260008560000151600a811115620007f257620007f262000b78565b600a81111562000806576200080662000b78565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055508260600151600560008560000151600a8111156200085a576200085a62000b78565b600a8111156200086e576200086e62000b78565b8152602080820192909252604090810160009081209390935585516001600160a01b03861684526008909252909120805460ff1916600183600a811115620008ba57620008ba62000b78565b02179055508260800151600360008560000151600a811115620008e157620008e162000b78565b600a811115620008f557620008f562000b78565b81526020810191909152604001600020805460ff1916600183600481111562000922576200092262000b78565b0217905550604080518082019091526001600160a01b0380841682528281166020808401918252600780546001810182556000918252945160029095027fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688810180549686166001600160a01b031997881617905592517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c689909301805493909416929094169190911790915584015184519091600491600a811115620009eb57620009eb62000b78565b600a811115620009ff57620009ff62000b78565b8152602001908152602001600020908051906020019062000a2292919062000ad2565b5080600660008560000151600a81111562000a415762000a4162000b78565b600a81111562000a555762000a5562000b78565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550505050565b610ab1806200285183390190565b611224806200330283390190565b611758806200452683390190565b6117098062005c7e83390190565b6106ca806200738783390190565b82805462000ae09062000cd7565b90600052602060002090601f01602090048101928262000b04576000855562000b4f565b82601f1062000b1f57805160ff191683800117855562000b4f565b8280016001018555821562000b4f579182015b8281111562000b4f57825182559160200191906001019062000b32565b5062000b5d92915062000b61565b5090565b5b8082111562000b5d576000815560010162000b62565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600060001982141562000bc757634e487b7160e01b600052601160045260246000fd5b5060010190565b6000815180845260005b8181101562000bf65760208185018101518683018201520162000bd8565b8181111562000c09576000602083870101525b50601f01601f19169290920160200192915050565b60608152600062000c33606083018662000bce565b828103602084015262000c47818662000bce565b91505060ff83166040830152949350505050565b60808152600062000c70608083018762000bce565b828103602084015262000c84818762000bce565b60ff95909516604084015250506001600160a01b039190911660609091015292915050565b6001600160a01b038316815260406020820181905260009062000ccf9083018462000bce565b949350505050565b600181811c9082168062000cec57607f821691505b6020821081141562000d0e57634e487b7160e01b600052602260045260246000fd5b50919050565b611b2d8062000d246000396000f3fe6080604052600436106101635760003560e01c80638eb86e8b116100c0578063c6c3bbe611610074578063d051a62211610059578063d051a62214610490578063eebab8ef146104b0578063fa7626d4146104d057600080fd5b8063c6c3bbe614610433578063c74912d21461045357600080fd5b80639b140a85116100a55780639b140a85146103e6578063b36ba20814610406578063ba414fa61461040e57600080fd5b80638eb86e8b1461038357806398cdaadf146103a357600080fd5b80636a72bde71161011757806388327863116100fc578063883278631461030857806388f776a2146103365780638a3177a31461035657600080fd5b80636a72bde7146102c45780636ca42ae3146102e657600080fd5b8063440864fa11610148578063440864fa146102025780634b57b0be1461022f57806367b426451461028157600080fd5b806304bc3b1c1461016f57806310c7f0b9146101b557600080fd5b3661016a57005b600080fd5b34801561017b57600080fd5b5061019f61018a3660046116f6565b60086020526000908152604090205460ff1681565b6040516101ac9190611742565b60405180910390f35b3480156101c157600080fd5b506101d56101d036600461175c565b6104ea565b6040805173ffffffffffffffffffffffffffffffffffffffff9384168152929091166020830152016101ac565b34801561020e57600080fd5b5061022261021d366004611784565b610530565b6040516101ac91906117cb565b34801561023b57600080fd5b5060015461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101ac565b34801561028d57600080fd5b5061025c61029c366004611784565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156102d057600080fd5b506102e46102df36600461181c565b6105ca565b005b3480156102f257600080fd5b506102fb610730565b6040516101ac919061186b565b34801561031457600080fd5b506103286103233660046118d4565b6107b5565b6040519081526020016101ac565b34801561034257600080fd5b506102e461035136600461190b565b610888565b34801561036257600080fd5b50610328610371366004611784565b60056020526000908152604090205481565b34801561038f57600080fd5b506102e461039e366004611954565b6108b9565b3480156103af57600080fd5b5061025c6103be366004611784565b60066020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156103f257600080fd5b506102e4610401366004611993565b610a73565b6102e4610b22565b34801561041a57600080fd5b50610423610ba0565b60405190151581526020016101ac565b34801561043f57600080fd5b506102e461044e3660046119b3565b610d00565b34801561045f57600080fd5b5061048361046e366004611784565b60036020526000908152604090205460ff1681565b6040516101ac91906119d3565b34801561049c57600080fd5b506103286104ab36600461190b565b610daf565b3480156104bc57600080fd5b506102e46104cb366004611954565b610e8b565b3480156104dc57600080fd5b506000546104239060ff1681565b600781815481106104fa57600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff91821692501682565b60046020526000908152604090208054610549906119e7565b80601f0160208091040260200160405190810160405280929190818152602001828054610575906119e7565b80156105c25780601f10610597576101008083540402835291602001916105c2565b820191906000526020600020905b8154815290600101906020018083116105a557829003601f168201915b505050505081565b6000546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152620100009092049091169063ca669fa790602401600060405180830381600087803b15801561063e57600080fd5b505af1158015610652573d6000803e3d6000fd5b505050506002600085600a81111561066c5761066c611713565b600a81111561067d5761067d611713565b8152602081019190915260409081016000205490517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490529091169063095ea7b3906044016020604051808303816000875af1158015610705573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107299190611a3b565b5050505050565b60606007805480602002602001604051908101604052809291908181526020016000905b828210156107ac5760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff908116835260019182015416828401529083529092019101610754565b50505050905090565b60006002600084600a8111156107cd576107cd611713565b600a8111156107de576107de611713565b8152602081019190915260409081016000205490517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152909116906370a0823190602401602060405180830381865afa15801561085d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108819190611a5d565b9392505050565b6108b48383837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6105ca565b505050565b60016003600085600a8111156108d1576108d1611713565b600a8111156108e2576108e2611713565b815260208101919091526040016000205460ff16600481111561090757610907611713565b14610999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f74657374546f6b656e53756974653a20547279696e6720746f206275726e206160448201527f206e6f6e2d6e6f726d616c20746f6b656e00000000000000000000000000000060648201526084015b60405180910390fd5b6002600084600a8111156109af576109af611713565b600a8111156109c0576109c0611713565b8152602081019190915260409081016000205490517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526024820184905290911690639dc29fac906044015b6020604051808303816000875af1158015610a49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6d9190611a3b565b50505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604081205460ff169081600a811115610aaf57610aaf611713565b1415610b17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f20746f6b656e2077697468207375636820616464726573730000000000006044820152606401610990565b610a6d818484610888565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015610b8c57600080fd5b505af1158015610729573d6000803e3d6000fd5b60008054610100900460ff1615610bc05750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610cfb5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610c65917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc491608001611a76565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052610c9d91611abe565b6000604051808303816000865af19150503d8060008114610cda576040519150601f19603f3d011682016040523d82523d6000602084013e610cdf565b606091505b5091505080806020019051810190610cf79190611a3b565b9150505b919050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604081205460ff169081600a811115610d3c57610d3c611713565b1415610da4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f20746f6b656e2077697468207375636820616464726573730000000000006044820152606401610990565b610a6d818484610e8b565b60006002600085600a811115610dc757610dc7611713565b600a811115610dd857610dd8611713565b8152602081019190915260409081016000205490517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301529091169063dd62ed3e90604401602060405180830381865afa158015610e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e839190611a5d565b949350505050565b60026003600085600a811115610ea357610ea3611713565b600a811115610eb457610eb4611713565b815260208101919091526040016000205460ff166004811115610ed957610ed9611713565b1415610ff6576000546040517fc88a5e6d000000000000000000000000000000000000000000000000000000008152306004820152602481018390526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c88a5e6d90604401600060405180830381600087803b158015610f5657600080fd5b505af1158015610f6a573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015610fd857600080fd5b505af1158015610fec573d6000803e3d6000fd5b505050505061163c565b600380600085600a81111561100d5761100d611713565b600a81111561101e5761101e611713565b815260208101919091526040016000205460ff16600481111561104357611043611713565b14156111aa576000546040517fc88a5e6d000000000000000000000000000000000000000000000000000000008152306004820152602481018390526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c88a5e6d90604401600060405180830381600087803b1580156110c057600080fd5b505af11580156110d4573d6000803e3d6000fd5b505050506002600084600a8111156110ee576110ee611713565b600a8111156110ff576110ff611713565b8152602081019190915260409081016000205490517fa1903eab00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a1903eab90839060240160206040518083038185885af115801561117f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906111a49190611a5d565b5061163c565b60046003600085600a8111156111c2576111c2611713565b600a8111156111d3576111d3611713565b815260208101919091526040016000205460ff1660048111156111f8576111f8611713565b141561148f5760006002600085600a81111561121657611216611713565b600a81111561122757611227611713565b815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c49190611ada565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600860205260409020549091506112fb9060ff163084610e8b565b8073ffffffffffffffffffffffffffffffffffffffff1663095ea7b36002600087600a81111561132d5761132d611713565b600a81111561133e5761133e611713565b81526020810191909152604090810160002054905160e083901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602481018590526044016020604051808303816000875af11580156113c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e69190611a3b565b506002600085600a8111156113fd576113fd611713565b600a81111561140e5761140e611713565b8152602081019190915260409081016000205490517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810184905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f1990604401600060405180830381600087803b158015610fd857600080fd5b60016003600085600a8111156114a7576114a7611713565b600a8111156114b8576114b8611713565b815260208101919091526040016000205460ff1660048111156114dd576114dd611713565b14156115b4576002600084600a8111156114f9576114f9611713565b600a81111561150a5761150a611713565b8152602081019190915260409081016000205490517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f19906044016020604051808303816000875af1158015611590573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a49190611a3b565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f74657374546f6b656e53756974653a20547279696e6720746f207472616e736660448201527f657220756e6b6e6f776e20746f6b656e000000000000000000000000000000006064820152608401610990565b6002600084600a81111561165257611652611713565b600a81111561166357611663611713565b8152602081019190915260409081016000205490517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490529091169063a9059cbb90604401610a2a565b73ffffffffffffffffffffffffffffffffffffffff811681146116f357600080fd5b50565b60006020828403121561170857600080fd5b8135610881816116d1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60208101600b831061175657611756611713565b91905290565b60006020828403121561176e57600080fd5b5035919050565b8035600b8110610cfb57600080fd5b60006020828403121561179657600080fd5b61088182611775565b60005b838110156117ba5781810151838201526020016117a2565b83811115610a6d5750506000910152565b60208152600082518060208401526117ea81604085016020870161179f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000806080858703121561183257600080fd5b61183b85611775565b9350602085013561184b816116d1565b9250604085013561185b816116d1565b9396929550929360600135925050565b602080825282518282018190526000919060409081850190868401855b828110156118c7578151805173ffffffffffffffffffffffffffffffffffffffff90811686529087015116868501529284019290850190600101611888565b5091979650505050505050565b600080604083850312156118e757600080fd5b6118f083611775565b91506020830135611900816116d1565b809150509250929050565b60008060006060848603121561192057600080fd5b61192984611775565b92506020840135611939816116d1565b91506040840135611949816116d1565b809150509250925092565b60008060006060848603121561196957600080fd5b61197284611775565b92506020840135611982816116d1565b929592945050506040919091013590565b6000806000606084860312156119a857600080fd5b8335611929816116d1565b6000806000606084860312156119c857600080fd5b8335611972816116d1565b602081016005831061175657611756611713565b600181811c908216806119fb57607f821691505b60208210811415611a35577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600060208284031215611a4d57600080fd5b8151801515811461088157600080fd5b600060208284031215611a6f57600080fd5b5051919050565b7fffffffff000000000000000000000000000000000000000000000000000000008316815260008251611ab081600485016020870161179f565b919091016004019392505050565b60008251611ad081846020870161179f565b9190910192915050565b600060208284031215611aec57600080fd5b8151610881816116d156fea264697066735822122010fe735ed069aca27931edce4ba2ff14ec7886bf21b0eea685a884f9200fb49e64736f6c634300080a003360c0604052600d60808190526c2bb930b83832b21022ba3432b960991b60a090815261002e916000919061007a565b50604080518082019091526004808252630ae8aa8960e31b602090920191825261005a9160019161007a565b506002805460ff1916601217905534801561007457600080fd5b5061014e565b82805461008690610113565b90600052602060002090601f0160209004810192826100a857600085556100ee565b82601f106100c157805160ff19168380011785556100ee565b828001600101855582156100ee579182015b828111156100ee5782518255916020019190600101906100d3565b506100fa9291506100fe565b5090565b5b808211156100fa57600081556001016100ff565b600181811c9082168061012757607f821691505b6020821081141561014857634e487b7160e01b600052602260045260246000fd5b50919050565b6109548061015d6000396000f3fe6080604052600436106100cb5760003560e01c806340c10f1911610074578063a9059cbb1161004e578063a9059cbb14610225578063d0e30db014610245578063dd62ed3e1461024d57600080fd5b806340c10f19146101c357806370a08231146101e357806395d89b411461021057600080fd5b806323b872dd116100a557806323b872dd146101575780632e1a7d4d14610177578063313ce5671461019757600080fd5b806306fdde03146100df578063095ea7b31461010a57806318160ddd1461013a57600080fd5b366100da576100d8610285565b005b600080fd5b3480156100eb57600080fd5b506100f46102e0565b6040516101019190610703565b60405180910390f35b34801561011657600080fd5b5061012a61012536600461079f565b61036e565b6040519015158152602001610101565b34801561014657600080fd5b50475b604051908152602001610101565b34801561016357600080fd5b5061012a6101723660046107c9565b6103e7565b34801561018357600080fd5b506100d8610192366004610805565b6105fe565b3480156101a357600080fd5b506002546101b19060ff1681565b60405160ff9091168152602001610101565b3480156101cf57600080fd5b506100d86101de36600461079f565b6106a4565b3480156101ef57600080fd5b506101496101fe36600461081e565b60036020526000908152604090205481565b34801561021c57600080fd5b506100f46106e2565b34801561023157600080fd5b5061012a61024036600461079f565b6106ef565b6100d8610285565b34801561025957600080fd5b50610149610268366004610839565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102a490849061089b565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102ed906108b3565b80601f0160208091040260200160405190810160405280929190818152602001828054610319906108b3565b80156103665780601f1061033b57610100808354040283529160200191610366565b820191906000526020600020905b81548152906001019060200180831161034957829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103d69086815260200190565b60405180910390a350600192915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561041957600080fd5b73ffffffffffffffffffffffffffffffffffffffff8416331480159061048f575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105175773ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020548211156104d157600080fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915281208054849290610511908490610907565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061054c908490610907565b909155505073ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260408120805484929061058690849061089b565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516105ec91815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561061a57600080fd5b3360009081526003602052604081208054839290610639908490610907565b9091555050604051339082156108fc029083906000818181858888f1935050505015801561066b573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260036020526040812080548392906106d990849061089b565b90915550505050565b600180546102ed906108b3565b60006106fc3384846103e7565b9392505050565b600060208083528351808285015260005b8181101561073057858101830151858201604001528201610714565b81811115610742576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461079a57600080fd5b919050565b600080604083850312156107b257600080fd5b6107bb83610776565b946020939093013593505050565b6000806000606084860312156107de57600080fd5b6107e784610776565b92506107f560208501610776565b9150604084013590509250925092565b60006020828403121561081757600080fd5b5035919050565b60006020828403121561083057600080fd5b6106fc82610776565b6000806040838503121561084c57600080fd5b61085583610776565b915061086360208401610776565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156108ae576108ae61086c565b500190565b600181811c908216806108c757607f821691505b60208210811415610901577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000828210156109195761091961086c565b50039056fea26469706673582212206ec943fa4e3b70d8fca6c25b6aa26fa18e8f8952ce3bc4d5afcb443bf3097c0564736f6c634300080a003360806040526000600255600060035534801561001a57600080fd5b506111fa8061002a6000396000f3fe60806040526004361061016e5760003560e01c80637a28fb88116100cb578063bdd17e1c1161007f578063dd62ed3e11610059578063dd62ed3e146103ee578063ee7a7c0414610441578063f5eb42dc1461046157600080fd5b8063bdd17e1c146103ad578063cdb9a21c146103c3578063d5002f2e146103d957600080fd5b8063a1903eab116100b0578063a1903eab1461035a578063a457c2d71461036d578063a9059cbb1461038d57600080fd5b80637a28fb88146102f457806395d89b411461031457600080fd5b806323b872dd1161012257806337cfdaca1161010757806337cfdaca1461020d57806339509351146102b457806370a08231146102d457600080fd5b806323b872dd14610278578063313ce5671461029857600080fd5b806318160ddd1161015357806318160ddd1461020d578063192084511461023057806322301f6e1461025057600080fd5b806306fdde0314610185578063095ea7b3146101dd57600080fd5b366101805761017d6000610481565b50005b600080fd5b34801561019157600080fd5b5060408051808201909152601781527f4c6971756964207374616b656420457468657220322e3000000000000000000060208201525b6040516101d49190610f63565b60405180910390f35b3480156101e957600080fd5b506101fd6101f8366004610fff565b610545565b60405190151581526020016101d4565b34801561021957600080fd5b5061022261055b565b6040519081526020016101d4565b34801561023c57600080fd5b5061022261024b366004611029565b61056b565b34801561025c57600080fd5b5061027661026b366004611042565b600391909155600255565b005b34801561028457600080fd5b506101fd610293366004611064565b6105ab565b3480156102a457600080fd5b50604051601281526020016101d4565b3480156102c057600080fd5b506101fd6102cf366004610fff565b610696565b3480156102e057600080fd5b506102226102ef3660046110a0565b6106d9565b34801561030057600080fd5b5061022261030f366004611029565b61070e565b34801561032057600080fd5b5060408051808201909152600581527f737445544800000000000000000000000000000000000000000000000000000060208201526101c7565b6102226103683660046110a0565b61073a565b34801561037957600080fd5b506101fd610388366004610fff565b610745565b34801561039957600080fd5b506101fd6103a8366004610fff565b6107f9565b3480156103b957600080fd5b5061022260035481565b3480156103cf57600080fd5b5061022260025481565b3480156103e557600080fd5b50610222610806565b3480156103fa57600080fd5b506102226104093660046110bb565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b34801561044d57600080fd5b5061027661045c366004610fff565b610811565b34801561046d57600080fd5b5061022261047c3660046110a0565b61081f565b60003334806104f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f5a45524f5f4445504f534954000000000000000000000000000000000000000060448201526064015b60405180910390fd5b60006104fc8261056b565b9050806105065750805b8160036000828254610518919061111d565b909155506105289050838261084a565b61053383838761093b565b61053d8382610992565b949350505050565b60006105523384846109ea565b50600192915050565b600061056660035490565b905090565b60008061057760035490565b9050806105875750600092915050565b6105a48161059e61059760025490565b8690610b52565b90610b5e565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001602090815260408083203384529091528120548281101561066c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f5452414e534645525f414d4f554e545f455843454544535f414c4c4f57414e4360448201527f450000000000000000000000000000000000000000000000000000000000000060648201526084016104e8565b610677858585610b6a565b61068b85336106868487610bef565b6109ea565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916105529185906106869086610bfb565b73ffffffffffffffffffffffffffffffffffffffff81166000908152602081905260408120546107089061070e565b92915050565b60008061071a60025490565b90508061072a5750600092915050565b6105a48161059e61059760035490565b600061070882610481565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156107e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4445435245415345445f414c4c4f57414e43455f42454c4f575f5a45524f000060448201526064016104e8565b6107ef33856106868487610bef565b5060019392505050565b6000610552338484610b6a565b600061056660025490565b61081b8282610c07565b5050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040812054610708565b73ffffffffffffffffffffffffffffffffffffffff82166108c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4d494e545f544f5f5448455f5a45524f5f41444452455353000000000000000060448201526064016104e8565b80600260008282546108d9919061111d565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205461090e9082610bfb565b73ffffffffffffffffffffffffffffffffffffffff90921660009081526020819052604090209190915550565b6040805183815273ffffffffffffffffffffffffffffffffffffffff83811660208301528516917fed8dd430b1e4bba98e943dc5b157cf7b54d9e12916d6c474ff5733a95001d03b910160405180910390a2505050565b73ffffffffffffffffffffffffffffffffffffffff821660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6109d58461070e565b60405190815260200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff8316610a67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f415050524f56455f46524f4d5f5a45524f5f414444524553530000000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff8216610ae4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f415050524f56455f544f5f5a45524f5f4144445245535300000000000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006105a48284611135565b60006105a48284611172565b6000610b758261056b565b9050610b82848483610d64565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610be191815260200190565b60405180910390a350505050565b60006105a482846111ad565b60006105a4828461111d565b73ffffffffffffffffffffffffffffffffffffffff8216610c84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4255524e5f46524f4d5f5448455f5a45524f5f4144445245535300000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205480821115610d14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4255524e5f414d4f554e545f455843454544535f42414c414e4345000000000060448201526064016104e8565b8160026000828254610d2691906111ad565b90915550610d3690508183610bef565b73ffffffffffffffffffffffffffffffffffffffff9093166000908152602081905260409020929092555050565b73ffffffffffffffffffffffffffffffffffffffff8316610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f5452414e534645525f46524f4d5f5448455f5a45524f5f41444452455353000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff8216610e5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f5452414e534645525f544f5f5448455f5a45524f5f414444524553530000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205480821115610eee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5452414e534645525f414d4f554e545f455843454544535f42414c414e43450060448201526064016104e8565b610ef88183610bef565b73ffffffffffffffffffffffffffffffffffffffff8086166000908152602081905260408082209390935590851681522054610f349083610bfb565b73ffffffffffffffffffffffffffffffffffffffff909316600090815260208190526040902092909255505050565b600060208083528351808285015260005b81811015610f9057858101830151858201604001528201610f74565b81811115610fa2576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ffa57600080fd5b919050565b6000806040838503121561101257600080fd5b61101b83610fd6565b946020939093013593505050565b60006020828403121561103b57600080fd5b5035919050565b6000806040838503121561105557600080fd5b50508035926020909101359150565b60008060006060848603121561107957600080fd5b61108284610fd6565b925061109060208501610fd6565b9150604084013590509250925092565b6000602082840312156110b257600080fd5b6105a482610fd6565b600080604083850312156110ce57600080fd5b6110d783610fd6565b91506110e560208401610fd6565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611130576111306110ee565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561116d5761116d6110ee565b500290565b6000826111a8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000828210156111bf576111bf6110ee565b50039056fea2646970667358221220a5b4f31162ba2b8b3424cef84b31ef91d05a825243602b5fdf758ffb49b8246364736f6c634300080a003360a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a003360c06040523480156200001157600080fd5b506040516200170938038062001709833981016040819052620000349162000266565b8351849084906200004d906003906020850190620000f3565b50805162000063906004906020840190620000f3565b505050620000806200007a6200009d60201b60201c565b620000a1565b60ff9091166080526001600160a01b031660a05250620003479050565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b82805462000101906200030a565b90600052602060002090601f01602090048101928262000125576000855562000170565b82601f106200014057805160ff191683800117855562000170565b8280016001018555821562000170579182015b828111156200017057825182559160200191906001019062000153565b506200017e92915062000182565b5090565b5b808211156200017e576000815560010162000183565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c157600080fd5b81516001600160401b0380821115620001de57620001de62000199565b604051601f8301601f19908116603f0116810190828211818310171562000209576200020962000199565b816040528381526020925086838588010111156200022657600080fd5b600091505b838210156200024a57858201830151818301840152908201906200022b565b838211156200025c5760008385830101525b9695505050505050565b600080600080608085870312156200027d57600080fd5b84516001600160401b03808211156200029557600080fd5b620002a388838901620001af565b95506020870151915080821115620002ba57600080fd5b50620002c987828801620001af565b935050604085015160ff81168114620002e157600080fd5b60608601519092506001600160a01b0381168114620002ff57600080fd5b939692955090935050565b600181811c908216806200031f57607f821691505b602082108114156200034157634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05161138e6200037b600039600081816101f70152818161041f0152610600015260006101a2015261138e6000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80636f307dc3116100b257806395d89b4111610081578063a9059cbb11610066578063a9059cbb146102b5578063dd62ed3e146102c8578063f2fde38b1461030e57600080fd5b806395d89b411461029a578063a457c2d7146102a257600080fd5b80636f307dc3146101f257806370a082311461023e578063715018a6146102745780638da5cb5b1461027c57600080fd5b806323b872dd116100ee57806323b872dd14610188578063313ce5671461019b57806339509351146101cc57806340c10f19146101df57600080fd5b806306fdde0314610120578063095ea7b31461013e57806318160ddd146101615780631e9a695014610173575b600080fd5b610128610321565b604051610135919061112d565b60405180910390f35b61015161014c3660046111c9565b6103b3565b6040519015158152602001610135565b6002545b604051908152602001610135565b6101866101813660046111c9565b6103c9565b005b6101516101963660046111f3565b610491565b60405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610135565b6101516101da3660046111c9565b61057c565b6101866101ed3660046111c9565b6105c5565b6102197f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b61016561024c36600461122f565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610186610691565b60055473ffffffffffffffffffffffffffffffffffffffff16610219565b61012861071e565b6101516102b03660046111c9565b61072d565b6101516102c33660046111c9565b610805565b6101656102d6366004611251565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b61018661031c36600461122f565b610812565b60606003805461033090611284565b80601f016020809104026020016040519081016040528092919081815260200182805461035c90611284565b80156103a95780601f1061037e576101008083540402835291602001916103a9565b820191906000526020600020905b81548152906001019060200180831161038c57829003601f168201915b5050505050905090565b60006103c0338484610942565b50600192915050565b6103d33382610af5565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015610468573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048c91906112d8565b505050565b600061049e848484610ce2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6105718533858403610942565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916103c09185906105c0908690611329565b610942565b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906323b872dd906064016020604051808303816000875af115801561065e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068291906112d8565b5061068d8282610f96565b5050565b60055473ffffffffffffffffffffffffffffffffffffffff163314610712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161055b565b61071c60006110b6565b565b60606004805461033090611284565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156107ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161055b565b6107fb3385858403610942565b5060019392505050565b60006103c0338484610ce2565b60055473ffffffffffffffffffffffffffffffffffffffff163314610893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161055b565b73ffffffffffffffffffffffffffffffffffffffff8116610936576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161055b565b61093f816110b6565b50565b73ffffffffffffffffffffffffffffffffffffffff83166109e4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff8216610a87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8216610b98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015610c4e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290610c8a908490611341565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff8216610e28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610ede576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610f22908490611329565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f8891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161055b565b80600260008282546110259190611329565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152602081905260408120805483929061105f908490611329565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208083528351808285015260005b8181101561115a5785810183015185820160400152820161113e565b8181111561116c576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146111c457600080fd5b919050565b600080604083850312156111dc57600080fd5b6111e5836111a0565b946020939093013593505050565b60008060006060848603121561120857600080fd5b611211846111a0565b925061121f602085016111a0565b9150604084013590509250925092565b60006020828403121561124157600080fd5b61124a826111a0565b9392505050565b6000806040838503121561126457600080fd5b61126d836111a0565b915061127b602084016111a0565b90509250929050565b600181811c9082168061129857607f821691505b602082108114156112d2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156112ea57600080fd5b8151801515811461124a57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561133c5761133c6112fa565b500190565b600082821015611353576113536112fa565b50039056fea26469706673582212203a6db30cd3c097921df4156794aa7973eb848711deeb2cffd7c54a9df1fdb0a564736f6c634300080a003360a060405234801561001057600080fd5b506040516106ca3803806106ca83398101604081905261002f9161006c565b60009190915560ff166080526001805460506001600160501b031991821681179092556004805490911690911790554260028190556003556100a2565b6000806040838503121561007f57600080fd5b82519150602083015160ff8116811461009757600080fd5b809150509250929050565b60805161060e6100bc600039600060d3015261060e6000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80639a6fc8f511610081578063d62ada111161005b578063d62ada11146102dc578063f7a30806146102f4578063feaf968c1461030757600080fd5b80639a6fc8f5146101cd578063bd18ad531461023a578063cd653afc1461024d57600080fd5b806354fd4d50116100b257806354fd4d501461012d57806367e8d83d1461013c5780637284e4161461018e57600080fd5b8063313ce567146100ce5780633fd0875f1461010c575b600080fd5b6100f57f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020015b60405180910390f35b6004546a0100000000000000000000900460ff166040516101039190610441565b60405160018152602001610103565b61018c61014a366004610482565b600480549115156c01000000000000000000000000027fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff909216919091179055565b005b604080518082018252600c81527f7072696365206f7261636c6500000000000000000000000000000000000000006020820152905161010391906104ab565b6102036101db36600461053d565b60015460005460025460035460045469ffffffffffffffffffff948516941691939590929450565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610103565b61018c610248366004610558565b61030f565b61018c61025b366004610579565b6001805469ffffffffffffffffffff9586167fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090911617905560029290925560035560048054919092167fffffffffffffffffffffffffffffffffffffffff00ff00000000000000000000909116176b020000000000000000000000179055565b6102e461035f565b6040519015158152602001610103565b61018c6103023660046105bf565b600055565b610203610385565b600480548291907fffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff166b01000000000000000000000083600281111561035757610357610412565b021790555050565b600454600090610380906b010000000000000000000000900460ff166103d6565b905090565b60008060008060006004600c9054906101000a900460ff16156103a757600080fd5b505060015460005460025460035460045469ffffffffffffffffffff9485169893975091955093509190911690565b600060028260028111156103ec576103ec610412565b14156103f757600080fd5b600182600281111561040b5761040b610412565b1492915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016006831061047c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561049457600080fd5b813580151581146104a457600080fd5b9392505050565b600060208083528351808285015260005b818110156104d8578581018301518582016040015282016104bc565b818111156104ea576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803569ffffffffffffffffffff8116811461053857600080fd5b919050565b60006020828403121561054f57600080fd5b6104a48261051e565b60006020828403121561056a57600080fd5b8135600381106104a457600080fd5b6000806000806080858703121561058f57600080fd5b6105988561051e565b935060208501359250604085013591506105b46060860161051e565b905092959194509250565b6000602082840312156105d157600080fd5b503591905056fea264697066735822122014874f7a973b86501c4c1a8be32490fe902c8f088ee234d25f9b2497e19f9e5264736f6c634300080a003360806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d00011790553480156200003a57600080fd5b5060405162031ed638038062031ed68339810160408190526200005d91620015e8565b81816040516200006d9062001595565b604051809103906000f0801580156200008a573d6000803e3d6000fd5b5050600180546001600160a01b0319166001600160a01b038416908117909155604080516325abd85f60e11b81529051634b57b0be916004808201926020929091908290030181865afa158015620000e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200010c91906200162a565b73c4375b7de8af5a38a93548eb8453a498222c4ff26040516200012f90620015a3565b6001600160a01b03928316815291166020820152604001604051809103906000f08015801562000163573d6000803e3d6000fd5b50600380546001600160a01b0319166001600160a01b039290921691821790556040805163de28735960e01b8152905163de287359916004808201926020929091908290030181865afa158015620001bf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e591906200162a565b604051634910832f60e01b81527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526001600160a01b039190911690634910832f90602401600060405180830381600087803b1580156200023d57600080fd5b505af115801562000252573d6000803e3d6000fd5b50505050600360009054906101000a90046001600160a01b03166001600160a01b031663de2873596040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d091906200162a565b60035460405163f2fde38b60e01b81526001600160a01b03918216600482015291169063f2fde38b90602401600060405180830381600087803b1580156200031757600080fd5b505af11580156200032c573d6000803e3d6000fd5b505060035460015460408051636ca42ae360e01b815290516001600160a01b039384169550638874ff1f94509190921691636ca42ae39160048083019260009291908290030181865afa15801562000388573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620003b29190810190620016c5565b6040518263ffffffff1660e01b8152600401620003d09190620017b6565b600060405180830381600087803b158015620003eb57600080fd5b505af115801562000400573d6000803e3d6000fd5b50505050600360009054906101000a90046001600160a01b03166001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000458573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200047e91906200162a565b600280546001600160a01b0319166001600160a01b039290921691821790556040805163120d150d60e31b81529051639068a868916004808201926020929091908290030181865afa158015620004d9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004ff91906200162a565b600480546001600160a01b0319166001600160a01b0392831617815560025460408051631f94a27560e31b81529051919093169263fca513a892818101926020929091908290030181865afa1580156200055d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200058391906200162a565b600880546001600160a01b0319166001600160a01b0392831617905560025460408051630873769560e01b81529051919092169163087376959160048083019260209291908290030181865afa158015620005e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200060891906200162a565b600780546001600160a01b0319166001600160a01b039283161790556002546040805163c513c9bb60e01b81529051919092169163c513c9bb9160048083019260209291908290030181865afa15801562000667573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200068d91906200162a565b600680546001600160a01b0319166001600160a01b039283161790556001546040516367b4264560e01b81529116906367b4264590620006d29084906004016200184d565b602060405180830381865afa158015620006f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200071691906200162a565b600980546001600160a01b0319166001600160a01b0392831617905560035460408051630a55006360e21b815290519190921691632954018c9160048083019260209291908290030181865afa15801562000775573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200079b91906200162a565b6009546040516001600160a01b0390911690620007b890620015b2565b6001600160a01b03928316815291166020820152604001604051809103906000f080158015620007ec573d6000803e3d6000fd5b50600580546001600160a01b0319166001600160a01b039283169081179091556001549091169063eebab8ef90839062000825620011ec565b6200083290600a62001879565b6040518463ffffffff1660e01b815260040162000852939291906200189b565b600060405180830381600087803b1580156200086d57600080fd5b505af115801562000882573d6000803e3d6000fd5b505060065460055460405163d914cd4b60e01b81526001600160a01b0391821660048201529116925063d914cd4b9150602401600060405180830381600087803b158015620008d057600080fd5b505af1158015620008e5573d6000803e3d6000fd5b5050600f80546001600160801b031916670de0b6b3a76400001790555062000911925050620011ec9050565b6200091e90600a62001879565b600f80546001600160801b03908116600160801b9382168402818117938490556040805160a0810182529184169092178152939092041660208301526000919081016200096b84620012ab565b815260006020820181905260409182018190526005549151929350916001600160a01b039091169083908390620009a290620015c0565b620009b093929190620018c5565b604051809103906000f080158015620009cd573d6000803e3d6000fd5b509050806001600160a01b031663c12c21c06040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a0f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a3591906200162a565b600b60006101000a8154816001600160a01b0302191690836001600160a01b03160217905550806001600160a01b0316632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a9a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ac091906200162a565b600c60006101000a8154816001600160a01b0302191690836001600160a01b03160217905550806001600160a01b031663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000b25573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b4b91906200162a565b600d80546001600160a01b0319166001600160a01b03928316179055600654600b5460405163e26b2f6360e01b8152908316600482015291169063e26b2f6390602401600060405180830381600087803b15801562000ba957600080fd5b505af115801562000bbe573d6000803e3d6000fd5b5050600054600554604080516318caf8e360e31b81526001600160a01b039283166004808301919091526024820192909252604481019190915263141bdbdb60e21b60648201526201000090920416925063c657c7189150608401600060405180830381600087803b15801562000c3457600080fd5b505af115801562000c49573d6000803e3d6000fd5b5050600054600c8054604080516318caf8e360e31b81526001600160a01b039283166004820152602481019190915260448101929092526b43726564697446616361646560a01b606483015262010000909204909116925063c657c7189150608401600060405180830381600087803b15801562000cc657600080fd5b505af115801562000cdb573d6000803e3d6000fd5b5050600054600b54604080516318caf8e360e31b81526001600160a01b0392831660048201526024810191909152600d60448201526c21b932b234ba26b0b730b3b2b960991b60648201526201000090920416925063c657c7189150608401600060405180830381600087803b15801562000d5557600080fd5b505af115801562000d6a573d6000803e3d6000fd5b5050600054600d54604080516318caf8e360e31b81526001600160a01b0392831660048201526024810191909152601260448201527121b932b234ba21b7b73334b3bab930ba37b960711b60648201526201000090920416925063c657c7189150608401600060405180830381600087803b15801562000de957600080fd5b505af115801562000dfe573d6000803e3d6000fd5b50506001546001600160a01b0316915063eebab8ef90508473f39fd6e51aad88f6f4ce6ab8827279cfffb9226662000e35620011ec565b6040518463ffffffff1660e01b815260040162000e55939291906200189b565b600060405180830381600087803b15801562000e7057600080fd5b505af115801562000e85573d6000803e3d6000fd5b50506001546001600160a01b0316915063eebab8ef9050847390f79bf6eb2c4f870365e785982e1f101e93b90662000ebc620011ec565b6040518463ffffffff1660e01b815260040162000edc939291906200189b565b600060405180830381600087803b15801562000ef757600080fd5b505af115801562000f0c573d6000803e3d6000fd5b505060005460405163ca669fa760e01b815273f39fd6e51aad88f6f4ce6ab8827279cfffb922666004820152620100009091046001600160a01b0316925063ca669fa79150602401600060405180830381600087803b15801562000f6f57600080fd5b505af115801562000f84573d6000803e3d6000fd5b5050600954600b5460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529116925063095ea7b391506044016020604051808303816000875af115801562000fdf573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001005919062001989565b5060005460405163ca669fa760e01b81527390f79bf6eb2c4f870365e785982e1f101e93b9066004820152620100009091046001600160a01b03169063ca669fa790602401600060405180830381600087803b1580156200106557600080fd5b505af11580156200107a573d6000803e3d6000fd5b5050600954600b5460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529116925063095ea7b391506044016020604051808303816000875af1158015620010d5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010fb919062001989565b5060025460405163f2fde38b60e01b81527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526001600160a01b039091169063f2fde38b90602401600060405180830381600087803b1580156200115657600080fd5b505af11580156200116b573d6000803e3d6000fd5b505060075460405163f2fde38b60e01b81527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b158015620011c957600080fd5b505af1158015620011de573d6000803e3d6000fd5b5050505050505050620019e1565b600180546040516367b4264560e01b81526000926001600160a01b03909216916367b42645916200122191906004016200184d565b602060405180830381865afa1580156200123f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200126591906200162a565b6009546001600160a01b03908116911614620012955762001290670de0b6b3a764000060c862001879565b905090565b62001290670de0b6b3a7640000614e2062001879565b6040805160c08101825260026080820190815261232860a08301528152815180830183526005815261226060208281019190915282015281518083018352606092600092919082019080600387600a8111156200130c576200130c62001814565b146200131a5760036200131d565b60015b600a81111562001331576200133162001814565b815261206c6020918201529082526040805180820190915260048152611c84818301529101529050612454600a6000858281111562001374576200137462001814565b600a81111562001388576200138862001814565b815260208101919091526040908101600020805461ffff9390931661ffff19909316929092179091558051600480825260a0820190925281816020015b6040805180820190915260008082526020820152815260200190600190039081620013c557905050925060005b818110156200158d57828160048110620014105762001410620019ad565b602002015160200151600a6000858460048110620014325762001432620019ad565b602002015151600a8111156200144c576200144c62001814565b600a81111562001460576200146062001814565b815260208101919091526040908101600020805461ffff191661ffff9390931692909217909155805180820190915260015481906001600160a01b03166367b42645868560048110620014b757620014b7620019ad565b6020020151516040516001600160e01b031960e084901b168152620014e091906004016200184d565b602060405180830381865afa158015620014fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200152491906200162a565b6001600160a01b03168152602001848360048110620015475762001547620019ad565b60200201516020015161ffff168152508482815181106200156c576200156c620019ad565b602002602001018190525080806200158490620019c3565b915050620013f2565b505050919050565b6105e6806200bc5283390190565b62011105806200c23883390190565b6110a7806201d33d83390190565b62013af2806201e3e483390190565b6001600160a01b0381168114620015e557600080fd5b50565b60008060408385031215620015fc57600080fd5b82516200160981620015cf565b6020840151909250600b81106200161f57600080fd5b809150509250929050565b6000602082840312156200163d57600080fd5b81516200164a81620015cf565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156200168c576200168c62001651565b60405290565b604051601f8201601f191681016001600160401b0381118282101715620016bd57620016bd62001651565b604052919050565b60006020808385031215620016d957600080fd5b82516001600160401b0380821115620016f157600080fd5b818501915085601f8301126200170657600080fd5b8151818111156200171b576200171b62001651565b6200172b848260051b0162001692565b818152848101925060069190911b8301840190878211156200174c57600080fd5b928401925b81841015620017ab57604084890312156200176c5760008081fd5b6200177662001667565b84516200178381620015cf565b8152848601516200179481620015cf565b818701528352604093909301929184019162001751565b979650505050505050565b602080825282518282018190526000919060409081850190868401855b828110156200180757815180516001600160a01b0390811686529087015116868501529284019290850190600101620017d3565b5091979650505050505050565b634e487b7160e01b600052602160045260246000fd5b600b81106200184957634e487b7160e01b600052602160045260246000fd5b9052565b602081016200185d82846200182a565b92915050565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161562001896576200189662001863565b500290565b60608101620018ab82866200182a565b6001600160a01b0393909316602082015260400152919050565b6001600160a01b0384811682526060602080840182905285516001600160801b039081169285019290925285810151909116608084015260408086015160a085810152805161010086018190526000949392918301919085906101208801905b808310156200195657845180518816835286015161ffff168683015293850193600192909201919083019062001925565b5060608a01516001600160a01b031660c0890152608090990151151560e088015250909401949094525092949350505050565b6000602082840312156200199c57600080fd5b815180151581146200164a57600080fd5b634e487b7160e01b600052603260045260246000fd5b6000600019821415620019da57620019da62001863565b5060010190565b61a26180620019f16000396000f3fe60806040523480156200001157600080fd5b5060043610620001ad5760003560e01c806362eb33e311620000f5578063ba414fa61162000097578063de287359116200006e578063de2873591462000479578063f9aa028a146200049a578063fa7626d414620004bb57600080fd5b8063ba414fa6146200041c578063c12c21c01462000437578063d46b9330146200045857600080fd5b80637785ff5d11620000cc5780637785ff5d14620003da5780639408b63f14620003e45780639dd55b45146200040557600080fd5b806362eb33e314620003775780636b70b04c14620003985780636f307dc314620003b957600080fd5b80632f7a1881116200015f5780635e813a8b11620001365780635e813a8b146200030c5780635f7c9bd0146200032d57806362186905146200034657600080fd5b80632f7a188114620002be578063406c8e2f14620002df57806354cae56e146200030057600080fd5b80630e42bc5d11620001945780630e42bc5d14620002305780632630c12f14620002565780632954018c146200029d57600080fd5b80630bc772da14620001b25780630c75f80614620001f5575b600080fd5b600f54620001cf906fffffffffffffffffffffffffffffffff1681565b6040516fffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6200021c62000206366004620012dd565b600a6020526000908152604090205461ffff1681565b60405161ffff9091168152602001620001ec565b6200024762000241366004620012dd565b620004c9565b604051620001ec919062001307565b600854620002779073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001620001ec565b600254620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600c54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600154620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200030a6200081f565b005b600454620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200033762000b1a565b604051908152602001620001ec565b600f54620001cf9070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681565b600654620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600554620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600954620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200030a62000c0c565b600e54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200030a6200041636600462001398565b62000fd6565b6200042662001149565b6040519015158152602001620001ec565b600b54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600354620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600754620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600d54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600054620004269060ff1681565b6040805160c08101825260026080820190815261232860a08301528152815180830183526005815261226060208281019190915282015281518083018352606092600092919082019080600387600a8111156200052a576200052a620013c7565b14620005385760036200053b565b60015b600a8111156200054f576200054f620013c7565b815261206c6020918201529082526040805180820190915260048152611c84818301529101529050612454600a60008582811115620005925762000592620013c7565b600a811115620005a657620005a6620013c7565b815260208101919091526040908101600020805461ffff939093167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909316929092179091558051600480825260a0820190925281816020015b60408051808201909152600080825260208201528152602001906001900390816200060057905050925060005b8181101562000817578281600481106200064b576200064b620013f6565b602002015160200151600a60008584600481106200066d576200066d620013f6565b602002015151600a811115620006875762000687620013c7565b600a8111156200069b576200069b620013c7565b81526020810191909152604090810160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff93909316929092179091558051808201909152600154819073ffffffffffffffffffffffffffffffffffffffff166367b426458685600481106200071c576200071c620013f6565b6020020151516040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526200075d919060040162001425565b602060405180830381865afa1580156200077b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007a1919062001467565b73ffffffffffffffffffffffffffffffffffffffff168152602001848360048110620007d157620007d1620013f6565b60200201516020015161ffff16815250848281518110620007f657620007f6620013f6565b602002602001018190525080806200080e90620014b6565b9150506200062d565b505050919050565b6000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16906306447d5690602401600060405180830381600087803b158015620008a457600080fd5b505af1158015620008b9573d6000803e3d6000fd5b5050600b5460405173ffffffffffffffffffffffffffffffffffffffff909116925060009150600190620008ed90620012b3565b73ffffffffffffffffffffffffffffffffffffffff938416815292909116602083015215156040820152606001604051809103906000f08015801562000937573d6000803e3d6000fd5b50600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316908117909155600d546040517f526a41e80000000000000000000000000000000000000000000000000000000081526004810192909252600160248301529091169063526a41e890604401600060405180830381600087803b158015620009dc57600080fd5b505af1158015620009f1573d6000803e3d6000fd5b5050600d5473ffffffffffffffffffffffffffffffffffffffff16915063eb9606df905062000a22426001620014f2565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815264ffffffffff90911660048201526024015b600060405180830381600087803b15801562000a7b57600080fd5b505af115801562000a90573d6000803e3d6000fd5b50505050600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562000aff57600080fd5b505af115801562000b14573d6000803e3d6000fd5b50505050565b600180546040517f67b4264500000000000000000000000000000000000000000000000000000000815260009273ffffffffffffffffffffffffffffffffffffffff909216916367b426459162000b75919060040162001425565b602060405180830381865afa15801562000b93573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000bb9919062001467565b60095473ffffffffffffffffffffffffffffffffffffffff90811691161462000bf65762000bf1670de0b6b3a764000060c86200150d565b905090565b62000bf1670de0b6b3a7640000614e206200150d565b60025460405173ffffffffffffffffffffffffffffffffffffffff9091169062000c3690620012c1565b73ffffffffffffffffffffffffffffffffffffffff90911681526060602082018190526008908201527f446567656e4e4654000000000000000000000000000000000000000000000000608082015260a060408201819052600a908201527f476561722d446567656e0000000000000000000000000000000000000000000060c082015260e001604051809103906000f08015801562000cda573d6000803e3d6000fd5b50600e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283161790556000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015262010000909104909116906306447d5690602401600060405180830381600087803b15801562000d8e57600080fd5b505af115801562000da3573d6000803e3d6000fd5b5050600e546040517ffca3b5aa0000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff909116925063fca3b5aa9150602401600060405180830381600087803b15801562000e2757600080fd5b505af115801562000e3c573d6000803e3d6000fd5b5050600b54600e5460405173ffffffffffffffffffffffffffffffffffffffff92831694509116915060009062000e7390620012b3565b73ffffffffffffffffffffffffffffffffffffffff938416815292909116602083015215156040820152606001604051809103906000f08015801562000ebd573d6000803e3d6000fd5b50600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316908117909155600d546040517f526a41e80000000000000000000000000000000000000000000000000000000081526004810192909252600160248301529091169063526a41e890604401600060405180830381600087803b15801562000f6257600080fd5b505af115801562000f77573d6000803e3d6000fd5b5050600e54600c546040517f4610f6ac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015291169250634610f6ac915060240162000a60565b600081600860405162000fe990620012cf565b91825260ff166020820152604001604051809103906000f08015801562001014573d6000803e3d6000fd5b506000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291925062010000900473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b1580156200109c57600080fd5b505af1158015620010b1573d6000803e3d6000fd5b50506008546040517fe8a97a3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528581166024830152909116925063e8a97a3e9150604401600060405180830381600087803b1580156200112b57600080fd5b505af115801562001140573d6000803e3d6000fd5b50505050505050565b60008054610100900460ff16156200116a5750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620012ae5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000008284015282518083038401815260608301909352600092909162001212917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016200158b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526200124c91620015c9565b6000604051808303816000865af19150503d80600081146200128b576040519150601f19603f3d011682016040523d82523d6000602084013e62001290565b606091505b5091505080806020019051810190620012aa9190620015d7565b9150505b919050565b615e9780620015fc83390190565b6126cf806200749383390190565b6106ca8062009b6283390190565b600060208284031215620012f057600080fd5b8135600b81106200130057600080fd5b9392505050565b602080825282518282018190526000919060409081850190868401855b8281101562001365578151805173ffffffffffffffffffffffffffffffffffffffff16855286015161ffff1686850152928401929085019060010162001324565b5091979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff811681146200139557600080fd5b50565b60008060408385031215620013ac57600080fd5b8235620013b98162001372565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60208101600b831062001461577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000602082840312156200147a57600080fd5b8151620013008162001372565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415620014eb57620014eb62001487565b5060010190565b6000821982111562001508576200150862001487565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562001548576200154862001487565b500290565b6000815160005b8181101562001570576020818501810151868301520162001554565b8181111562001580576000828601525b509290920192915050565b7fffffffff00000000000000000000000000000000000000000000000000000000831681526000620015c160048301846200154d565b949350505050565b60006200130082846200154d565b600060208284031215620015ea57600080fd5b815180151581146200130057600080fdfe6101406040523480156200001257600080fd5b5060405162005e9738038062005e97833981016040819052620000359162000198565b60016000556001600160a01b0383166200006257604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038316608081905260408051636f307dc360e01b81529051636f307dc3916004808201926020929091908290030181865afa158015620000ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d39190620001ea565b6001600160a01b031660a0816001600160a01b031681525050826001600160a01b0316634f0e0ef36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200012b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001519190620001ea565b6001600160a01b0390811660c0529190911660e0819052151561010052151561012052506200020f565b80516001600160a01b03811681146200019357600080fd5b919050565b600080600060608486031215620001ae57600080fd5b620001b9846200017b565b9250620001c9602085016200017b565b915060408401518015158114620001df57600080fd5b809150509250925092565b600060208284031215620001fd57600080fd5b62000208826200017b565b9392505050565b60805160a05160c05160e0516101005161012051615a86620004116000396000818161061101528181612fb5015261481f01526000818161031701528181610dde015281816144f901526146e5015260008181610557015281816146a901526147a901526000818161034b0152818161387d015261392d01526000818161047301528181611bfe0152818161274f0152818161280d0152818161366a01526137dd015260008181610665015281816109d801528181610b0301528181610bd501528181610cdd01528181610e6501528181610fe30152818161114e0152818161120e0152818161132e015281816114510152818161162b01528181611708015281816117e0015281816119e501528181611b1201528181611d9501528181611ed5015281816120040152818161216801528181612290015281816123c601528181612568015281816126390152818161266f0152818161293d01528181612a2101528181612a8a01528181612bde01528181612d2601528181612e6801528181612ec2015281816130a10152818161311b015281816131b401528181613341015281816134c10152818161358a0152818161372f01528181613a1a01528181613b2e01528181613dbb015281816142200152818161432801528181614492015281816148e7015281816149e801528181614aae0152614d8f0152615a866000f3fe6080604052600436106102695760003560e01c8063860aefcf11610153578063c7de38a6116100cb578063dfd594651161007f578063eb9606df11610064578063eb9606df1461081e578063f9eaee0d1461083e578063ffd9b9071461085e57600080fd5b8063dfd59465146107de578063e1f21c67146107fe57600080fd5b8063cff0ab96116100b0578063cff0ab96146106ef578063d9ccbec114610783578063dcf65482146107be57600080fd5b8063c7de38a6146106a7578063caa5c23f146106dc57600080fd5b80639c55a05411610122578063b55bb84b11610107578063b55bb84b14610633578063c12c21c014610653578063c690908a1461068757600080fd5b80639c55a054146105df578063b1836d32146105ff57600080fd5b8063860aefcf146104db5780639408b63f146105455780639b67ab30146105795780639be0536a146105bd57600080fd5b80635d91a0e0116101e65780636d19b486116101b55780637071b7c51161019a5780637071b7c51461049557806379c0ef91146104a857806382871ace146104c857600080fd5b80636d19b486146104415780636f307dc31461046157600080fd5b80635d91a0e0146103e85780635f73fbec146103fb578063601d66f61461040e5780636c8f225d1461042e57600080fd5b80633d9287fa1161023d5780635019e20a116102225780635019e20a1461039257806354fd4d50146103b257806359781034146103d557600080fd5b80633d9287fa146103055780634f0e0ef31461033957600080fd5b8062842b571461026e578063256ac915146102905780632a7ba1f7146102c55780632b7c7b11146102e5575b600080fd5b34801561027a57600080fd5b5061028e6102893660046151bf565b61087e565b005b34801561029c57600080fd5b506102b06102ab3660046151f8565b61098e565b60405190151581526020015b60405180910390f35b3480156102d157600080fd5b5061028e6102e0366004615215565b610a61565b3480156102f157600080fd5b5061028e610300366004615215565b610c3b565b34801561031157600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561034557600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102bc565b34801561039e57600080fd5b5061028e6103ad3660046151f8565b610d6a565b3480156103be57600080fd5b506103c7600281565b6040519081526020016102bc565b61028e6103e336600461522e565b61108c565b61028e6103f63660046152bb565b611275565b61028e610409366004615340565b611589565b34801561041a57600080fd5b5061028e6104293660046153d8565b6117de565b61028e61043c36600461541b565b611900565b34801561044d57600080fd5b506102b061045c3660046151f8565b611c31565b34801561046d57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b61028e6104a336600461546e565b611c60565b3480156104b457600080fd5b5061036d6104c3366004615215565b611f3e565b61028e6104d63660046152bb565b611f4b565b3480156104e757600080fd5b5060025461051c906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041682565b604080516fffffffffffffffffffffffffffffffff9384168152929091166020830152016102bc565b34801561055157600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561058557600080fd5b506004546040805167ffffffffffffffff608084901c1681526fffffffffffffffffffffffffffffffff9092166020830152016102bc565b3480156105c957600080fd5b506105d261227d565b6040516102bc91906154e2565b3480156105eb57600080fd5b5061028e6105fa36600461553c565b61228e565b34801561060b57600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561063f57600080fd5b5061028e61064e3660046151f8565b6123c4565b34801561065f57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561069357600080fd5b5061028e6106a23660046151f8565b6124c6565b3480156106b357600080fd5b506106c76106c23660046151f8565b612668565b604080519283526020830191909152016102bc565b61028e6106ea366004615557565b61289b565b3480156106fb57600080fd5b5060015461074e906fffffffffffffffffffffffffffffffff811690700100000000000000000000000000000000810460ff169071010000000000000000000000000000000000900464ffffffffff1683565b604080516fffffffffffffffffffffffffffffffff9094168452911515602084015264ffffffffff16908201526060016102bc565b34801561078f57600080fd5b506102b061079e366004615599565b600360209081526000928352604080842090915290825290205460ff1681565b3480156107ca57600080fd5b5061028e6107d93660046151f8565b612a88565b3480156107ea57600080fd5b506103c76107f93660046151f8565b612b86565b34801561080a57600080fd5b5061028e61081936600461522e565b612c6d565b34801561082a57600080fd5b5061028e6108393660046155c7565b612ec0565b34801561084a57600080fd5b506102b06108593660046151f8565b613057565b34801561086a57600080fd5b5061028e6108793660046155ee565b6131b2565b600260005414156108f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b6002600090815573ffffffffffffffffffffffffffffffffffffffff8316808252600360209081526040808420338086529083529381902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081527f9b3258bc4904fd6426b99843e206c6c7cdb1fd0f040121c25b71dafbb3851ee0910160405180910390a350506001600055565b6040517f055ee9b500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063055ee9b590602401602060405180830381865afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a43919061560b565b73ffffffffffffffffffffffffffffffffffffffff16141592915050565b60026000541415610ace576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610b5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b83919061560b565b9050610b903382846132eb565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906395373018906024015b600060405180830381600087803b158015610c1a57600080fd5b505af1158015610c2e573d6000803e3d6000fd5b5050600160005550505050565b60026000541415610ca8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610d39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5d919061560b565b9050610b90338284613411565b60026000541415610dd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000557f000000000000000000000000000000000000000000000000000000000000000015610e34576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610ec1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee5919061560b565b33600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915290205490915060ff16610f52576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f5d82613583565b5090508015610f98576040517ff713841e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b15801561102757600080fd5b505af115801561103b573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692503391507f93c70cc9715bef0d83edf2095f3595402279d274f402a73ffc17f1bcb19d863d90600090a35050600160005550565b600260005414156110f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611106613875565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063e958b70490602401602060405180830381865afa158015611197573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bb919061560b565b90506111c9848285856139b7565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401600060405180830381600087803b15801561125257600080fd5b505af1158015611266573d6000803e3d6000fd5b50506001600055505050505050565b600260005414156112e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611375573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611399919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166113e8576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806113f483613583565b915091508161142f576040517f1fdd676f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611437613875565b831561144d5761144d85858b8660016000613ae3565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632362a2d88b600185338e8e8e6040518863ffffffff1660e01b81526004016114b59796959493929190615663565b6020604051808303816000875af11580156114d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f891906156bf565b90508873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f7dfecd8419723a9d3954585a30c2a270165d70aafa146c11c1e1b88ae14390648460405161157091815260200190565b60405180910390a4505060016000555050505050505050565b600260005414156115f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ab919061560b565b90506116b5613875565b81156116cb576116cb8383338460016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d89061174a903390600090819083908d908d908d90600401615663565b6020604051808303816000875af1158015611769573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178d91906156bf565b5060405173ffffffffffffffffffffffffffffffffffffffff87169033907f460ad03b1cf79b1d64d3aefa28475f110ab66e84649c52bb41ed796b9b39198190600090a35050600160005550505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611849573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118d1576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff90811670010000000000000000000000000000000002911617600255565b6002600054141561196d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000908155606461198461ffff851687615707565b61198e9190615744565b9050611999816144f7565b6119a2816145e8565b6119ab84614668565b6119b3613875565b6040517f172c48c7000000000000000000000000000000000000000000000000000000008152600060048201819052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a64919061577f565b61ffff169150611a789050816127106157ae565b611a829083615707565b611a8c8288615707565b11611ac3576040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff86811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611b5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b81919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638587604051611bef92919091825261ffff16602082015260400190565b60405180910390a3611c2386827f00000000000000000000000000000000000000000000000000000000000000008a6139b7565b505060016000555050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526006602052604081205415155b92915050565b60026000541415611ccd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611cdb856144f7565b611ce484614668565b611ced856145e8565b600154700100000000000000000000000000000000900460ff1615611d3e576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d46613875565b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff85811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611de0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e04919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638885604051611e7292919091825261ffff16602082015260400190565b60405180910390a38215611e9057611e908484878460006001613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015611f1957600080fd5b505af1158015611f2d573d6000803e3d6000fd5b505060016000555050505050505050565b6000611c5a60058361480f565b60026000541415611fb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa15801561204b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206f919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166120be576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120c661481b565b6120fc576040517f7e52ccb400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061210782612668565b509050612112613875565b82156121285761212884848a8560016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d8906121aa908c90600290879033908f908f908f90600401615663565b6020604051808303816000875af11580156121c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ed91906156bf565b90508773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167ffada13ff2d5e1a1d9da37ad4a4130893b34e3c69c32b17f87ec31fd661b867078460405161226591815260200190565b60405180910390a45050600160005550505050505050565b6060612289600561486b565b905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612381576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561242f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612453919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146124b7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614878565b5050565b60026000541415612533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156125c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e8919061560b565b90506125f4818361489a565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401610c00565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126fc919061560b565b905060008061270b8387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156127a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127c991906156bf565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015291965061271091851690637afb010490604401602060405180830381865afa158015612863573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061288791906156bf565b6128919190615744565b9350505050915091565b60026000541415612908576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129bd919061560b565b90506129c7613875565b8115612a7e576129dc83833384600080613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015612a6557600080fd5b505af1158015612a79573d6000803e3d6000fd5b505050505b5050600160005550565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612af3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b17919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b7b576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614c92565b600080612b9283612668565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152919350600092507f000000000000000000000000000000000000000000000000000000000000000090911690633192195c906024016040805180830381865afa158015612c26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4a91906157c5565b9150819050612c5b61271084615707565b612c659190615744565b949350505050565b60026000541415612cda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063fdd5764590602401602060405180830381865afa158015612d6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d91919061560b565b73ffffffffffffffffffffffffffffffffffffffff161480612dd7575073ffffffffffffffffffffffffffffffffffffffff831660009081526006602052604090205415155b15612e0e576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612eac57600080fd5b505af1158015611c23573d6000803e3d6000fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f4f919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612fb3576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000061300a576040517f50dd11fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805464ffffffffff90921671010000000000000000000000000000000000027fffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffffff909216919091179055565b6040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063f67c5bd090602401602060405180830381865afa1580156130e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061310c91906156bf565b905080158015906131ab5750807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015613184573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a891906156bf565b16155b9392505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561321d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613241919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146132a5576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018054911515700100000000000000000000000000000000027fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff909216919091179055565b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600060448301819052917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561338c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133b091906156bf565b90506133bb816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f98274bf834d179ee08dc0604071b0dc90b54731bd5f725a5a96a39a86bce025a8360405161340391815260200190565b60405180910390a250505050565b61341a816144f7565b600154700100000000000000000000000000000000900460ff161561346b576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600160448301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561350c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061353091906156bf565b905061353b816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f9cac51154cc0d835e2f9c9d1f59a9344588cee107f4203bf58a8c797e3a58c458360405161340391815260200190565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613617919061560b565b90506000806136268387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156136c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136e491906156bf565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529195506000917f00000000000000000000000000000000000000000000000000000000000000001690633192195c906024016040805180830381865afa158015613775573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061379991906157c5565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350600092506127109187169063f9a6503090604401602060405180830381865afa158015613837573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061385b91906156bf565b6138659190615707565b9092109794965093945050505050565b34156139b5577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156138e357600080fd5b505af11580156138f7573d6000803e3d6000fd5b50506040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201523460248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16935063a9059cbb925060440190506020604051808303816000875af115801561398f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139b391906157e9565b505b565b6139c084614cb4565b6040517f830aa74500000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f0000000000000000000000000000000000000000000000000000000000000000169063830aa74590608401600060405180830381600087803b158015613a5e57600080fd5b505af1158015613a72573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fa32435755c235de2976ed44a75a2f85cb01faf0c894f639fe0c32bb9455fea8f83604051613ad591815260200190565b60405180910390a350505050565b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301523060248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b158015613b7257600080fd5b505af1158015613b86573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff871692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a28460005b8181101561441d5736888883818110613bea57613bea615806565b9050602002810190613bfc9190615835565b90506004613c0d6020830183615873565b90501015613c47576040517fe2b0e50600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b30613c5560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16141561421c578415613ca9576040517f5fb9107f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613cb86020830183615873565b613cc1916158d8565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167f59781034000000000000000000000000000000000000000000000000000000001415613e3c5760008080613d1e6020860186615873565b613d2c916004908290615920565b810190613d39919061522e565b925092509250613e34838c73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614613e2b576040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015613e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e26919061560b565b613e2d565b8b5b84846139b7565b505050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2b7c7b11000000000000000000000000000000000000000000000000000000001415613ec757600194506000613e996020840184615873565b613ea7916004908290615920565b810190613eb49190615215565b9050613ec1898983613411565b50614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2a7ba1f7000000000000000000000000000000000000000000000000000000001415613f80578415613f49576040517fc0b0caa800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613f586020840184615873565b613f66916004908290615920565b810190613f739190615215565b9050613ec18989836132eb565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f233a8caa0000000000000000000000000000000000000000000000000000000014156140e457600080613fda6020850185615873565b613fe8916004908290615920565b810190613ff5919061594a565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c8116600483015292945090925082918416906370a0823190602401602060405180830381865afa158015614069573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061408d91906156bf565b10156140dd576040517fa5ac537300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016108e7565b5050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fc690908a00000000000000000000000000000000000000000000000000000000141561416457600061413d6020840184615873565b61414b916004908290615920565b81019061415891906151f8565b9050613ec1888261489a565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f23e27a640000000000000000000000000000000000000000000000000000000014156141e45760006141bd6020840184615873565b6141cb916004908290615920565b8101906141d891906151f8565b9050613ec18882614d42565b6040517f1e9e7e7a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50614414565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff68754361426760208501856151f8565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156142d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142f4919061560b565b73ffffffffffffffffffffffffffffffffffffffff16148061436d575073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001661435560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16145b156143a4576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6144126143b46020830183615873565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506143f69250505060208401846151f8565b73ffffffffffffffffffffffffffffffffffffffff1690614e39565b505b50600101613bcf565b506040517f60c8e8938c9a0c0d88a98d6f1c562ce68077e12bf3edb8047378f2f736cb45b490600090a16040517fe1998cf900000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff86811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b1580156144d657600080fd5b505af11580156144ea573d6000803e3d6000fd5b5050505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006139b3576001546fffffffffffffffffffffffffffffffff9081169081146124c257600454608081901c906fffffffffffffffffffffffffffffffff16600067ffffffffffffffff8316431461456e578461458a565b61458a6fffffffffffffffffffffffffffffffff831686615976565b9050838111156145c6576040517f675f1a5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff81164360801b176004555050505050565b6002546fffffffffffffffffffffffffffffffff16811080614631575060025470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681115b156139b3576040517fce16799400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61467061481b565b156146a7576040517f63fc31c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1615614806577f0000000000000000000000000000000000000000000000000000000000000000801561472657503373ffffffffffffffffffffffffffffffffffffffff821614155b1561475d576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600160248301527f00000000000000000000000000000000000000000000000000000000000000001690639dc29fac90604401600060405180830381600087803b1580156147ed57600080fd5b505af1158015614801573d6000803e3d6000fd5b505050505b6139b381614cb4565b60006131ab8383614e7b565b60007f0000000000000000000000000000000000000000000000000000000000000000801561228957505060015471010000000000000000000000000000000000900464ffffffffff1642101590565b606060006131ab83614ea5565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f01565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561492b57600080fd5b505af115801561493f573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527fdf498aa1c340e992665d6fb4f3be8436d452c45a630cb6d7fab7963da39bac8793500190505b60405180910390a15050565b6040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600091829160019183917f00000000000000000000000000000000000000000000000000000000000000001690638991b2f190602401602060405180830381865afa158015614a2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a5391906156bf565b90505b808211614c895780821615614c7d576040517fe75538c700000000000000000000000000000000000000000000000000000000815260048101839052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e75538c7906024016040805180830381865afa158015614af4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b18919061577f565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529294509092506000918416906370a0823190602401602060405180830381865afa158015614b8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bb191906156bf565b90506001811115614c79576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff8481166024830152600091908b169063f9a6503090604401602060405180830381865afa158015614c33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c5791906156bf565b978801979050614c6b61ffff841682615707565b614c759088615976565b9650505b5050505b600182901b9150614a56565b50509250929050565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f50565b3373ffffffffffffffffffffffffffffffffffffffff821614801590614d0b575033600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16155b156139b3576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b158015614dd357600080fd5b505af1158015614de7573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527f69db9e9764da61b6681b89fb0f5be018506e0342036e56b59c3015a620d60977935001905061498d565b60606131ab83836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250615043565b6000826000018281548110614e9257614e92615806565b9060005260206000200154905092915050565b606081600001805480602002602001604051908101604052809291908181526020018280548015614ef557602002820191906000526020600020905b815481526020019060010190808311614ee1575b50505050509050919050565b6000818152600183016020526040812054614f4857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611c5a565b506000611c5a565b60008181526001830160205260408120548015615039576000614f746001836157ae565b8554909150600090614f88906001906157ae565b9050818114614fed576000866000018281548110614fa857614fa8615806565b9060005260206000200154905080876000018481548110614fcb57614fcb615806565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080614ffe57614ffe61598e565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611c5a565b6000915050611c5a565b6060612c65848460008585843b6150b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108e7565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516150df91906159ed565b60006040518083038185875af1925050503d806000811461511c576040519150601f19603f3d011682016040523d82523d6000602084013e615121565b606091505b509150915061513182828661513c565b979650505050505050565b6060831561514b5750816131ab565b82511561515b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e791906159ff565b73ffffffffffffffffffffffffffffffffffffffff811681146139b357600080fd5b80151581146139b357600080fd5b600080604083850312156151d257600080fd5b82356151dd8161518f565b915060208301356151ed816151b1565b809150509250929050565b60006020828403121561520a57600080fd5b81356131ab8161518f565b60006020828403121561522757600080fd5b5035919050565b60008060006060848603121561524357600080fd5b833561524e8161518f565b9250602084013561525e8161518f565b929592945050506040919091013590565b60008083601f84011261528157600080fd5b50813567ffffffffffffffff81111561529957600080fd5b6020830191508360208260051b85010111156152b457600080fd5b9250929050565b60008060008060008060a087890312156152d457600080fd5b86356152df8161518f565b955060208701356152ef8161518f565b9450604087013593506060870135615306816151b1565b9250608087013567ffffffffffffffff81111561532257600080fd5b61532e89828a0161526f565b979a9699509497509295939492505050565b60008060008060006080868803121561535857600080fd5b85356153638161518f565b945060208601359350604086013561537a816151b1565b9250606086013567ffffffffffffffff81111561539657600080fd5b6153a28882890161526f565b969995985093965092949392505050565b80356fffffffffffffffffffffffffffffffff811681146153d357600080fd5b919050565b600080604083850312156153eb57600080fd5b6153f4836153b3565b9150615402602084016153b3565b90509250929050565b61ffff811681146139b357600080fd5b6000806000806080858703121561543157600080fd5b8435935060208501356154438161518f565b925060408501356154538161540b565b915060608501356154638161540b565b939692955090935050565b60008060008060006080868803121561548657600080fd5b8535945060208601356154988161518f565b9350604086013567ffffffffffffffff8111156154b457600080fd5b6154c08882890161526f565b90945092505060608601356154d48161540b565b809150509295509295909350565b6020808252825182820181905260009190848201906040850190845b8181101561553057835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016154fe565b50909695505050505050565b60006020828403121561554e57600080fd5b6131ab826153b3565b6000806020838503121561556a57600080fd5b823567ffffffffffffffff81111561558157600080fd5b61558d8582860161526f565b90969095509350505050565b600080604083850312156155ac57600080fd5b82356155b78161518f565b915060208301356151ed8161518f565b6000602082840312156155d957600080fd5b813564ffffffffff811681146131ab57600080fd5b60006020828403121561560057600080fd5b81356131ab816151b1565b60006020828403121561561d57600080fd5b81516131ab8161518f565b6003811061565f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b73ffffffffffffffffffffffffffffffffffffffff888116825260e082019061568f602084018a615628565b6040830197909752948616606082015292909416608083015260a082015291151560c09092019190915292915050565b6000602082840312156156d157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561573f5761573f6156d8565b500290565b60008261577a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000806040838503121561579257600080fd5b825161579d8161518f565b60208401519092506151ed8161540b565b6000828210156157c0576157c06156d8565b500390565b600080604083850312156157d857600080fd5b505080516020909101519092909150565b6000602082840312156157fb57600080fd5b81516131ab816151b1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc183360301811261586957600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126158a857600080fd5b83018035915067ffffffffffffffff8211156158c357600080fd5b6020019150368190038213156152b457600080fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156159185780818660040360031b1b83161692505b505092915050565b6000808585111561593057600080fd5b8386111561593d57600080fd5b5050820193919092039150565b6000806040838503121561595d57600080fd5b82356159688161518f565b946020939093013593505050565b60008219821115615989576159896156d8565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60005b838110156159d85781810151838201526020016159c0565b838111156159e7576000848401525b50505050565b600082516158698184602087016159bd565b6020815260008251806020840152615a1e8160408501602087016159bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea2646970667358221220a3f4a705ab580a6ada1e438cd2ee4abc001b62d1d171fce12c41994900fef21664736f6c634300080a003360c06040523480156200001157600080fd5b50604051620026cf380380620026cf833981016040819052620000349162000324565b82828281600090805190602001906200004f92919062000194565b5080516200006590600190602084019062000194565b50506006805460ff19169055506001600160a01b0381166200009a57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000d9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ff9190620003a1565b6001600160a01b03166080816001600160a01b03168152505050826001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000158573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200017e9190620003a1565b6001600160a01b031660a0525062000403915050565b828054620001a290620003c6565b90600052602060002090601f016020900481019282620001c6576000855562000211565b82601f10620001e157805160ff191683800117855562000211565b8280016001018555821562000211579182015b8281111562000211578251825591602001919060010190620001f4565b506200021f92915062000223565b5090565b5b808211156200021f576000815560010162000224565b80516001600160a01b03811681146200025257600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200027f57600080fd5b81516001600160401b03808211156200029c576200029c62000257565b604051601f8301601f19908116603f01168101908282118183101715620002c757620002c762000257565b81604052838152602092508683858801011115620002e457600080fd5b600091505b83821015620003085785820183015181830184015290820190620002e9565b838211156200031a5760008385830101525b9695505050505050565b6000806000606084860312156200033a57600080fd5b62000345846200023a565b60208501519093506001600160401b03808211156200036357600080fd5b62000371878388016200026d565b935060408601519150808211156200038857600080fd5b5062000397868287016200026d565b9150509250925092565b600060208284031215620003b457600080fd5b620003bf826200023a565b9392505050565b600181811c90821680620003db57607f821691505b60208210811415620003fd57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a0516122756200045a6000396000610a9a015260008181610386015281816106db0152818161089101528181610f15015281816110010152818161115b015281816112f401526114f901526122756000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80636352211e116100f9578063a0bcfc7f11610097578063b88d4fde11610071578063b88d4fde146103a8578063c87b56dd146103b6578063e985e9c5146103c9578063fca3b5aa1461041257600080fd5b8063a0bcfc7f14610360578063a22cb46514610373578063a50cf2c81461038157600080fd5b80638456cb59116100d35780638456cb591461032a57806389406ff51461033257806395d89b41146103455780639dc29fac1461034d57600080fd5b80636352211e146102fc5780636c0360eb1461030f57806370a082311461031757600080fd5b80633f4ba83a116101665780634610f6ac116101405780634610f6ac146102b357806354fd4d50146102c6578063576cd2d1146102ce5780635c975abb146102f157600080fd5b80633f4ba83a1461029857806340c10f19146102a057806342842e0e1461028a57600080fd5b8063081812fc116101a2578063081812fc1461024b578063095ea7b31461025e57806318160ddd1461027357806323b872dd1461028a57600080fd5b806301ffc9a7146101c957806306fdde03146101f15780630754617214610206575b600080fd5b6101dc6101d7366004611cc6565b610425565b60405190151581526020015b60405180910390f35b6101f961050a565b6040516101e89190611d38565b6008546102269073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e8565b610226610259366004611d89565b61059c565b61027161026c366004611dc7565b61067b565b005b61027c60075481565b6040519081526020016101e8565b61027161026c366004611df3565b6102716106ad565b6102716102ae366004611dc7565b61079b565b6102716102c1366004611e34565b610863565b61027c600181565b6101dc6102dc366004611e34565b60096020526000908152604090205460ff1681565b60065460ff166101dc565b61022661030a366004611d89565b610cd9565b6101f9610d8b565b61027c610325366004611e34565b610e19565b610271610ee7565b610271610340366004611e34565b610fd3565b6101f9611103565b61027161035b366004611dc7565b611112565b61027161036e366004611e51565b6112c6565b61027161026c366004611ed1565b6102267f000000000000000000000000000000000000000000000000000000000000000081565b61027161026c366004611f39565b6101f96103c4366004611d89565b6113bb565b6101dc6103d7366004612037565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205460ff1690565b610271610420366004611e34565b6114cb565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd0000000000000000000000000000000000000000000000000000000014806104b857507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061050457507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60606000805461051990612065565b80601f016020809104026020016040519081016040528092919081815260200182805461054590612065565b80156105925780601f1061056757610100808354040283529160200191610592565b820191906000526020600020905b81548152906001019060200180831161057557829003601f168201915b5050505050905090565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff16610652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084015b60405180910390fd5b5060009081526004602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b6040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa158015610737573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075b91906120b9565b610791576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107996115f6565b565b60085473ffffffffffffffffffffffffffffffffffffffff1633146107ec576040517f5c2967f500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006107f783610e19565b905060005b82811015610846576000816108278473ffffffffffffffffffffffffffffffffffffffff8816612105565b6108319190612105565b905061083d85826116d7565b506001016107fc565b5081600760008282546108599190612105565b9091555050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156108ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091191906120b9565b610947576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163b610995576040517f9c01f6a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff1663c12c21c06040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610a1c575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610a199181019061211d565b60015b610a52576040517f9c01f6a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f6fbc6f6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192507f000000000000000000000000000000000000000000000000000000000000000090911690636fbc6f6b90602401602060405180830381865afa158015610ae3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0791906120b9565b1580610bad57503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16639408b63f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b94919061211d565b73ffffffffffffffffffffffffffffffffffffffff1614155b80610c5257508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c39919061211d565b73ffffffffffffffffffffffffffffffffffffffff1614155b15610c89576040517f9c01f6a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff16600090815260096020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff1680610504576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e00000000000000000000000000000000000000000000006064820152608401610649565b600a8054610d9890612065565b80601f0160208091040260200160405190810160405280929190818152602001828054610dc490612065565b8015610e115780601f10610de657610100808354040283529160200191610e11565b820191906000526020600020905b815481529060010190602001808311610df457829003601f168201915b505050505081565b600073ffffffffffffffffffffffffffffffffffffffff8216610ebe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152608401610649565b5073ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015610f71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9591906120b9565b610fcb576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610799611899565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561105d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108191906120b9565b6110b7576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff16600090815260096020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b60606001805461051990612065565b3360009081526009602052604090205460ff161580156111dd57506040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156111b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111db91906120b9565b155b15611214576040517f1e0d048500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061121f83610e19565b90508181101561125b576040517f90c9142d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b828110156112b357600060018261128b8573ffffffffffffffffffffffffffffffffffffffff8916612105565b611295919061213a565b61129f919061213a565b90506112aa81611959565b5060010161125e565b508160076000828254610859919061213a565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611350573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137491906120b9565b6113aa576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113b6600a8383611c0f565b505050565b60008181526002602052604090205460609073ffffffffffffffffffffffffffffffffffffffff1661146f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006064820152608401610649565b6000611479611a26565b9050600081511161149957604051806020016040528060008152506114c4565b806114a384611a35565b6040516020016114b4929190612151565b6040516020818303038152906040525b9392505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611555573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157991906120b9565b6115af576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60065460ff16611662576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610649565b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b73ffffffffffffffffffffffffffffffffffffffff8216611754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610649565b60008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff16156117e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610649565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805460019290611816908490612105565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60065460ff1615611906576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610649565b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586116ad3390565b600061196482610cd9565b9050611971600083611b6f565b73ffffffffffffffffffffffffffffffffffffffff811660009081526003602052604081208054600192906119a790849061213a565b909155505060008281526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555183919073ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6060600a805461051990612065565b606081611a7557505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611a9f5780611a8981612180565b9150611a989050600a836121e8565b9150611a79565b60008167ffffffffffffffff811115611aba57611aba611f0a565b6040519080825280601f01601f191660200182016040528015611ae4576020820181803683370190505b5090505b8415611b6757611af960018361213a565b9150611b06600a866121fc565b611b11906030612105565b60f81b818381518110611b2657611b26612210565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611b60600a866121e8565b9450611ae8565b949350505050565b600081815260046020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091558190611bc982610cd9565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b828054611c1b90612065565b90600052602060002090601f016020900481019282611c3d5760008555611ca1565b82601f10611c74578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00823516178555611ca1565b82800160010185558215611ca1579182015b82811115611ca1578235825591602001919060010190611c86565b50611cad929150611cb1565b5090565b5b80821115611cad5760008155600101611cb2565b600060208284031215611cd857600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146114c457600080fd5b60005b83811015611d23578181015183820152602001611d0b565b83811115611d32576000848401525b50505050565b6020815260008251806020840152611d57816040850160208701611d08565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b600060208284031215611d9b57600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff81168114611dc457600080fd5b50565b60008060408385031215611dda57600080fd5b8235611de581611da2565b946020939093013593505050565b600080600060608486031215611e0857600080fd5b8335611e1381611da2565b92506020840135611e2381611da2565b929592945050506040919091013590565b600060208284031215611e4657600080fd5b81356114c481611da2565b60008060208385031215611e6457600080fd5b823567ffffffffffffffff80821115611e7c57600080fd5b818501915085601f830112611e9057600080fd5b813581811115611e9f57600080fd5b866020828501011115611eb157600080fd5b60209290920196919550909350505050565b8015158114611dc457600080fd5b60008060408385031215611ee457600080fd5b8235611eef81611da2565b91506020830135611eff81611ec3565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060008060808587031215611f4f57600080fd5b8435611f5a81611da2565b93506020850135611f6a81611da2565b925060408501359150606085013567ffffffffffffffff80821115611f8e57600080fd5b818701915087601f830112611fa257600080fd5b813581811115611fb457611fb4611f0a565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715611ffa57611ffa611f0a565b816040528281528a602084870101111561201357600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000806040838503121561204a57600080fd5b823561205581611da2565b91506020830135611eff81611da2565b600181811c9082168061207957607f821691505b602082108114156120b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156120cb57600080fd5b81516114c481611ec3565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115612118576121186120d6565b500190565b60006020828403121561212f57600080fd5b81516114c481611da2565b60008282101561214c5761214c6120d6565b500390565b60008351612163818460208801611d08565b835190830190612177818360208801611d08565b01949350505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156121b2576121b26120d6565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826121f7576121f76121b9565b500490565b60008261220b5761220b6121b9565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea2646970667358221220ffdd83a2fc9a158347ca248f021e63fcef3a7985b3deb793f75cd1835b068aab64736f6c634300080a003360a060405234801561001057600080fd5b506040516106ca3803806106ca83398101604081905261002f9161006c565b60009190915560ff166080526001805460506001600160501b031991821681179092556004805490911690911790554260028190556003556100a2565b6000806040838503121561007f57600080fd5b82519150602083015160ff8116811461009757600080fd5b809150509250929050565b60805161060e6100bc600039600060d3015261060e6000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80639a6fc8f511610081578063d62ada111161005b578063d62ada11146102dc578063f7a30806146102f4578063feaf968c1461030757600080fd5b80639a6fc8f5146101cd578063bd18ad531461023a578063cd653afc1461024d57600080fd5b806354fd4d50116100b257806354fd4d501461012d57806367e8d83d1461013c5780637284e4161461018e57600080fd5b8063313ce567146100ce5780633fd0875f1461010c575b600080fd5b6100f57f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020015b60405180910390f35b6004546a0100000000000000000000900460ff166040516101039190610441565b60405160018152602001610103565b61018c61014a366004610482565b600480549115156c01000000000000000000000000027fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff909216919091179055565b005b604080518082018252600c81527f7072696365206f7261636c6500000000000000000000000000000000000000006020820152905161010391906104ab565b6102036101db36600461053d565b60015460005460025460035460045469ffffffffffffffffffff948516941691939590929450565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610103565b61018c610248366004610558565b61030f565b61018c61025b366004610579565b6001805469ffffffffffffffffffff9586167fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090911617905560029290925560035560048054919092167fffffffffffffffffffffffffffffffffffffffff00ff00000000000000000000909116176b020000000000000000000000179055565b6102e461035f565b6040519015158152602001610103565b61018c6103023660046105bf565b600055565b610203610385565b600480548291907fffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff166b01000000000000000000000083600281111561035757610357610412565b021790555050565b600454600090610380906b010000000000000000000000900460ff166103d6565b905090565b60008060008060006004600c9054906101000a900460ff16156103a757600080fd5b505060015460005460025460035460045469ffffffffffffffffffff9485169893975091955093509190911690565b600060028260028111156103ec576103ec610412565b14156103f757600080fd5b600182600281111561040b5761040b610412565b1492915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016006831061047c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561049457600080fd5b813580151581146104a457600080fd5b9392505050565b600060208083528351808285015260005b818110156104d8578581018301518582016040015282016104bc565b818111156104ea576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803569ffffffffffffffffffff8116811461053857600080fd5b919050565b60006020828403121561054f57600080fd5b6104a48261051e565b60006020828403121561056a57600080fd5b8135600381106104a457600080fd5b6000806000806080858703121561058f57600080fd5b6105988561051e565b935060208501359250604085013591506105b46060860161051e565b905092959194509250565b6000602082840312156105d157600080fd5b503591905056fea264697066735822122014874f7a973b86501c4c1a8be32490fe902c8f088ee234d25f9b2497e19f9e5264736f6c634300080a0033a2646970667358221220d8fdaadc825c43ac2783715ebcfe33e7b0ce3a396ac7717d65e4c95e98b6cf7f64736f6c634300080a003360806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d000117905534801561003957600080fd5b50600054604080516318caf8e360e31b815273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660048083019190915260248201929092526044810191909152632aa9a2a960e11b6064820152620100009091046001600160a01b03169063c657c71890608401600060405180830381600087803b1580156100ba57600080fd5b505af11580156100ce573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b81527390f79bf6eb2c4f870365e785982e1f101e93b90660048201526024810191909152600660448201526511949251539160d21b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561014f57600080fd5b505af1158015610163573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b8152733c44cdddb6a900fa2b585dd299e03d12fa4293bc60048201526024810191909152600a6044820152692624a8aaa4a220aa27a960b11b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b1580156101e857600080fd5b505af11580156101fc573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b815273c4375b7de8af5a38a93548eb8453a498222c4ff260048201526024810191909152600c60448201526b44554d425f4144445245535360a01b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561028357600080fd5b505af1158015610297573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b8152739965507d1a55bcc2695c58ba16fb37d819b0a4dc60048201526024810191909152600760448201526620a220a82a22a960c91b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561031957600080fd5b505af115801561032d573d6000803e3d6000fd5b505050506102a6806103406000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063ba414fa61461003b578063fa7626d414610057575b600080fd5b610043610064565b604051901515815260200160405180910390f35b6000546100439060ff1681565b60008054610100900460ff16156100845750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156101bf5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610129917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016101ff565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526101619161023b565b6000604051808303816000865af19150503d806000811461019e576040519150601f19603f3d011682016040523d82523d6000602084013e6101a3565b606091505b50915050808060200190518101906101bb919061024e565b9150505b919050565b6000815160005b818110156101e557602081850181015186830152016101cb565b818111156101f4576000828601525b509290920192915050565b7fffffffff0000000000000000000000000000000000000000000000000000000083168152600061023360048301846101c4565b949350505050565b600061024782846101c4565b9392505050565b60006020828403121561026057600080fd5b8151801515811461024757600080fdfea2646970667358221220293f55a0ef7b60c31a89dbc50e3339c80a8fdb1f9567614b200e97598226671f64736f6c634300080a003360806040523480156200001157600080fd5b506040516201110538038062011105833981016040819052620000349162000811565b6200003f3362000734565b6040516200004d9062000784565b604051809103906000f0801580156200006a573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b039283169081179091556040516310dc138160e31b81529184166004830152906386e09c0890602401600060405180830381600087803b158015620000c457600080fd5b505af1158015620000d9573d6000803e3d6000fd5b50506001546040516301ed651160e41b81526001600160a01b0385811660048301529091169250631ed651109150602401600060405180830381600087803b1580156200012557600080fd5b505af11580156200013a573d6000803e3d6000fd5b505050506040516200014c9062000792565b604051809103906000f08015801562000169573d6000803e3d6000fd5b50600280546001600160a01b0319166001600160a01b039283169081179091556001546040516376aad60560e01b81526004810192909252909116906376aad60590602401600060405180830381600087803b158015620001c957600080fd5b505af1158015620001de573d6000803e3d6000fd5b5050600154604051600093506001600160a01b0390911691506200020290620007a0565b6001600160a01b039091168152602001604051809103906000f0801580156200022f573d6000803e3d6000fd5b5060015460405163338f12b960e21b81526001600160a01b03808416600483015292935091169063ce3c4ae490602401600060405180830381600087803b1580156200027a57600080fd5b505af11580156200028f573d6000803e3d6000fd5b5050600154604051600093506001600160a01b039091169150620002b390620007ae565b6001600160a01b039091168152602001604051809103906000f080158015620002e0573d6000803e3d6000fd5b5060015460405163c5120b3960e01b81526001600160a01b03808416600483015292935091169063c5120b3990602401600060405180830381600087803b1580156200032b57600080fd5b505af115801562000340573d6000803e3d6000fd5b5050600154604051606093506001600160a01b03909116915082906200036690620007bc565b6200037392919062000849565b604051809103906000f08015801562000390573d6000803e3d6000fd5b50600380546001600160a01b0319166001600160a01b0392831690811790915560015460405163530e784f60e01b815260048101929092529091169063530e784f90602401600060405180830381600087803b158015620003f057600080fd5b505af115801562000405573d6000803e3d6000fd5b5050600154604051600093506001600160a01b0390911691506200042990620007ca565b6001600160a01b039091168152602001604051809103906000f08015801562000456573d6000803e3d6000fd5b506001546040516356ee0d3b60e11b81526001600160a01b03808416600483015292935091169063addc1a7690602401600060405180830381600087803b158015620004a157600080fd5b505af1158015620004b6573d6000803e3d6000fd5b5050600154604051600093506001600160a01b039091169150620004da90620007d8565b6001600160a01b039091168152602001604051809103906000f08015801562000507573d6000803e3d6000fd5b506001546040516321da583760e01b81526001600160a01b0380841660048301529293509116906321da583790602401600060405180830381600087803b1580156200055257600080fd5b505af115801562000567573d6000803e3d6000fd5b505050506000306040516200057c90620007e6565b6001600160a01b039091168152602001604051809103906000f080158015620005a9573d6000803e3d6000fd5b50600154604051631795d5b360e31b81526001600160a01b03808416600483015292935091169063bcaead9890602401600060405180830381600087803b158015620005f457600080fd5b505af115801562000609573d6000803e3d6000fd5b505060405163f2fde38b60e01b81523360048201526001600160a01b038416925063f2fde38b9150602401600060405180830381600087803b1580156200064f57600080fd5b505af115801562000664573d6000803e3d6000fd5b505060015460405163f2fde38b60e01b81523360048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b158015620006ae57600080fd5b505af1158015620006c3573d6000803e3d6000fd5b505060025460405163f2fde38b60e01b81523360048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b1580156200070d57600080fd5b505af115801562000722573d6000803e3d6000fd5b505050505050505050505050620008b2565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610fcd80620010dd83390190565b61098c80620020aa83390190565b610f508062002a3683390190565b614da6806200398683390190565b611b45806200872c83390190565b612ced806200a27183390190565b611627806200cf5e83390190565b612b80806200e58583390190565b80516001600160a01b03811681146200080c57600080fd5b919050565b600080604083850312156200082557600080fd5b6200083083620007f4565b91506200084060208401620007f4565b90509250929050565b6001600160a01b0383811682526040602080840182905284518483018190526000938683019290916060870190865b81811015620008a3578551805186168452840151851684840152948301949186019160010162000878565b50909998505050505050505050565b61081b80620008c26000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80638874ff1f1161005b5780638874ff1f146100f55780638da5cb5b14610108578063de28735914610126578063f2fde38b1461014657600080fd5b80632630c12f146100825780632954018c146100cb578063715018a6146100eb575b600080fd5b6003546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6001546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b6100f3610159565b005b6100f3610103366004610658565b6101eb565b60005473ffffffffffffffffffffffffffffffffffffffff166100a2565b6002546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b6100f3610154366004610734565b6103e3565b60005473ffffffffffffffffffffffffffffffffffffffff1633146101df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6101e96000610513565b565b60005473ffffffffffffffffffffffffffffffffffffffff16331461026c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101d6565b60005b815181101561035c57600354825173ffffffffffffffffffffffffffffffffffffffff9091169063e8a97a3e908490849081106102ae576102ae610756565b6020026020010151600001518484815181106102cc576102cc610756565b6020026020010151602001516040518363ffffffff1660e01b815260040161031792919073ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b600060405180830381600087803b15801561033157600080fd5b505af1158015610345573d6000803e3d6000fd5b50505050808061035490610785565b91505061026f565b506002546040517ff2fde38b00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063f2fde38b90602401600060405180830381600087803b1580156103c857600080fd5b505af11580156103dc573d6000803e3d6000fd5b5050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101d6565b73ffffffffffffffffffffffffffffffffffffffff8116610507576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016101d6565b61051081610513565b50565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156105da576105da610588565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561062757610627610588565b604052919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461065357600080fd5b919050565b6000602080838503121561066b57600080fd5b823567ffffffffffffffff8082111561068357600080fd5b818501915085601f83011261069757600080fd5b8135818111156106a9576106a9610588565b6106b7848260051b016105e0565b818152848101925060069190911b8301840190878211156106d757600080fd5b928401925b8184101561072957604084890312156106f55760008081fd5b6106fd6105b7565b6107068561062f565b815261071386860161062f565b81870152835260409390930192918401916106dc565b979650505050505050565b60006020828403121561074657600080fd5b61074f8261062f565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156107de577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea26469706673582212205ee75e57bb635aa49a1758f4ab0b04182a73115bff08f420c56a8ddb433c029364736f6c634300080a0033608060405234801561001057600080fd5b5061001a3361005f565b60405130906f20a2222922a9a9afa82927ab24a222a960811b907fb37614c7d254ea8d16eb81fa11dddaeb266aa8ba4917980859c7740aff30c69190600090a36100af565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610f0f806100be6000396000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c806377532ed9116100e3578063bcaead981161008c578063ce3c4ae411610066578063ce3c4ae414610308578063f2fde38b1461031b578063fca513a81461032e57600080fd5b8063bcaead98146102da578063c5120b39146102ed578063c513c9bb1461030057600080fd5b80639068a868116100bd5780639068a868146102b7578063addc1a76146102bf578063affd9243146102d257600080fd5b806377532ed91461027e57806386e09c08146102865780638da5cb5b1461029957600080fd5b80634c252f9111610145578063699f200f1161011f578063699f200f1461022d578063715018a61461026357806376aad6051461026b57600080fd5b80634c252f91146101fc578063530e784f1461020457806354fd4d501461021757600080fd5b80631ed65110116101765780631ed65110146101cc57806321da5837146101e157806326c74fc3146101f457600080fd5b8063060678c21461019257806308737695146101c4575b600080fd5b61019a610336565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61019a610366565b6101df6101da366004610e10565b610391565b005b6101df6101ef366004610e10565b610444565b61019a6104ef565b61019a61051a565b6101df610212366004610e10565b610545565b61021f600281565b6040519081526020016101bb565b61019a61023b366004610e4d565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6101df6105f0565b6101df610279366004610e10565b61067d565b61019a610728565b6101df610294366004610e10565b610753565b60005473ffffffffffffffffffffffffffffffffffffffff1661019a565b61019a6107fe565b6101df6102cd366004610e10565b610829565b61019a6108d4565b6101df6102e8366004610e10565b6108ff565b6101df6102fb366004610e10565b6109aa565b61019a610a55565b6101df610316366004610e10565b610a80565b6101df610329366004610e10565b610b2b565b61019a610c58565b60006103617f444154415f434f4d50524553534f520000000000000000000000000000000000610c7f565b905090565b60006103617f41434c0000000000000000000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610417576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6104417f54524541535552595f434f4e545241435400000000000000000000000000000082610d1d565b50565b60005473ffffffffffffffffffffffffffffffffffffffff1633146104c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f574554485f47415445574159000000000000000000000000000000000000000082610d1d565b60006103617f54524541535552595f434f4e5452414354000000000000000000000000000000610c7f565b60006103617f574554485f544f4b454e00000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f50524943455f4f5241434c45000000000000000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610671576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b61067b6000610d9b565b565b60005473ffffffffffffffffffffffffffffffffffffffff1633146106fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f41434c000000000000000000000000000000000000000000000000000000000082610d1d565b60006103617f574554485f474154455741590000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146107d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f574554485f544f4b454e0000000000000000000000000000000000000000000082610d1d565b60006103617f4143434f554e545f464143544f52590000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146108aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f4143434f554e545f464143544f5259000000000000000000000000000000000082610d1d565b60006103617f474541525f544f4b454e00000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610980576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f474541525f544f4b454e0000000000000000000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f444154415f434f4d50524553534f52000000000000000000000000000000000082610d1d565b60006103617f434f4e5452414354535f52454749535445520000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610b01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f434f4e5452414354535f5245474953544552000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610bac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b73ffffffffffffffffffffffffffffffffffffffff8116610c4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161040e565b61044181610d9b565b60006103617f50524943455f4f5241434c4500000000000000000000000000000000000000005b6000818152600160209081526040808320548151808301909252600382527f41503100000000000000000000000000000000000000000000000000000000009282019290925273ffffffffffffffffffffffffffffffffffffffff9091169081610d16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040e9190610e66565b5092915050565b60008281526001602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091559051909184917fb37614c7d254ea8d16eb81fa11dddaeb266aa8ba4917980859c7740aff30c6919190a35050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215610e2257600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610e4657600080fd5b9392505050565b600060208284031215610e5f57600080fd5b5035919050565b600060208083528351808285015260005b81811015610e9357858101830151858201604001528201610e77565b81811115610ea5576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea264697066735822122083c228af017c6f5cf8c395cdf7a53276ff56fdd4f4313c39f680ab73bd75417364736f6c634300080a0033608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61090e8061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063732818191161008c578063adce758d11610066578063adce758d14610215578063ba306df114610228578063d4eb5db01461023b578063f2fde38b1461027457600080fd5b806373281819146101b7578063819ad68e146101da5780638da5cb5b146101ed57600080fd5b806354fd4d50116100bd57806354fd4d501461016a5780635f259aba14610180578063715018a6146101af57600080fd5b806335914829146100e45780633a41ec641461011c5780634910832f14610155575b600080fd5b6101076100f236600461089b565b60016020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61010761012a36600461089b565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205460ff1690565b61016861016336600461089b565b610287565b005b610172600181565b604051908152602001610113565b61010761018e36600461089b565b60005473ffffffffffffffffffffffffffffffffffffffff91821691161490565b610168610387565b6101076101c536600461089b565b60026020526000908152604090205460ff1681565b6101686101e836600461089b565b610414565b60005460405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610113565b61016861022336600461089b565b61050c565b61016861023636600461089b565b610601565b61010761024936600461089b565b73ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205460ff1690565b61016861028236600461089b565b6106f6565b60005473ffffffffffffffffffffffffffffffffffffffff16331461030d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909217909155517fae26b1cfe9454ba87274a4e8330b6654684362d0f3d7bbd17f7449a1d38387c69190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610408576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b6104126000610826565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517fd400da6c0c0a894dacc0981730b88af0545d00272ee8fff1437bf560ff245fc49190a250565b60005473ffffffffffffffffffffffffffffffffffffffff16331461058d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f1998397e7203f7baca9d6f41b9e4da6e768daac5caad4234fb9bf5869d2715459190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610682576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526001602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f28b01395b7e25d20552a0c8dc8ecd3b1d4abc986f14dad7885fd45b6fd73c8d99190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811661081a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610304565b61082381610826565b50565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156108ad57600080fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146108d157600080fd5b939250505056fea26469706673582212204712efbfe997070def77285a5b8753bc882b62da2133ce1937ad26cd2b48e49864736f6c634300080a003360a060405234801561001057600080fd5b50604051610f50380380610f5083398101604081905261002f916100d7565b6000805460ff19169055806001600160a01b03811661006157604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa15801561009f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100c391906100d7565b6001600160a01b0316608052506101079050565b6000602082840312156100e957600080fd5b81516001600160a01b038116811461010057600080fd5b9392505050565b608051610e1261013e600039600081816101e2015281816102b20152818161040f0152818161057801526108510152610e126000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80638456cb5911610097578063b4ac686011610066578063b4ac686014610217578063c29277cd1461021f578063d914cd4b14610227578063e26b2f631461023a57600080fd5b80638456cb59146101cd57806394144856146101d5578063a50cf2c8146101dd578063ac4afa381461020457600080fd5b80635b16ebb7116100d35780635b16ebb7146101575780635c975abb1461018a578063673a2a1f146101955780636fbc6f6b146101aa57600080fd5b80631e16e4fc146100fa5780633f4ba83a1461013757806354fd4d5014610141575b600080fd5b61010d610108366004610c97565b61024d565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61013f610284565b005b610149600181565b60405190815260200161012e565b61017a610165366004610cb0565b60026020526000908152604090205460ff1681565b604051901515815260200161012e565b60005460ff1661017a565b61019d610372565b60405161012e9190610ced565b61017a6101b8366004610cb0565b60046020526000908152604090205460ff1681565b61013f6103e1565b61019d6104cd565b61010d7f000000000000000000000000000000000000000000000000000000000000000081565b61010d610212366004610c97565b61053a565b600154610149565b600354610149565b61013f610235366004610cb0565b61054a565b61013f610248366004610cb0565b610823565b6003818154811061025d57600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa15801561030e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103329190610d47565b610368576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610370610af6565b565b606060018054806020026020016040519081016040528092919081815260200182805480156103d757602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116103ac575b5050505050905090565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561046b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048f9190610d47565b6104c5576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610370610bd7565b606060038054806020026020016040519081016040528092919081815260200182805480156103d75760200282019190600052602060002090815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116103ac575050505050905090565b6001818154811061025d57600080fd5b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156105d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f89190610d47565b61062e576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051808201909152600281527f5a30000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff82166106b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b60405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff8116600090815260026020908152604091829020548251808401909352600383527f43523100000000000000000000000000000000000000000000000000000000009183019190915260ff1615610753576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b506001805480820182557fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915560008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909417909355915190917ff816b5143086c89d103a0683286be86c2b741e83ebfa75135aae606e2f5c6e5391a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156108ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d19190610d47565b610907576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051808201909152600281527f5a30000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8216610989576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b5073ffffffffffffffffffffffffffffffffffffffff8116600090815260046020908152604091829020548251808401909352600383527f43523200000000000000000000000000000000000000000000000000000000009183019190915260ff1615610a23576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b506003805460018082019092557fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915560008181526004602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909417909355915190917f58ad3cfc4b6552a53c8c4128ae9b080e14b4378a159280643a62c6f709cee24f91a250565b60005460ff16610b62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016106b0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff1615610c44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016106b0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610bad3390565b600060208284031215610ca957600080fd5b5035919050565b600060208284031215610cc257600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610ce657600080fd5b9392505050565b6020808252825182820181905260009190848201906040850190845b81811015610d3b57835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101610d09565b50909695505050505050565b600060208284031215610d5957600080fd5b81518015158114610ce657600080fd5b600060208083528351808285015260005b81811015610d9657858101830151858201604001528201610d7a565b81811115610da8576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea26469706673582212208f2d91c863db9ab1494a9c5db20e3fddc4b6c779ea3c3621737c105c60d9440a64736f6c634300080a003360e06040523480156200001157600080fd5b5060405162004da638038062004da6833981016040819052620000349162000160565b6001600160a01b0381166200005c57604051635919af9760e11b815260040160405180910390fd5b6001600160a01b03811660808190526040805163c513c9bb60e01b8152905163c513c9bb916004808201926020929091908290030181865afa158015620000a7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cd919062000160565b6001600160a01b031660a0816001600160a01b0316815250506080516001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000127573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200014d919062000160565b6001600160a01b031660c0525062000192565b6000602082840312156200017357600080fd5b81516001600160a01b03811681146200018b57600080fd5b9392505050565b60805160a05160c051614b896200021d6000396000818161018801528181611c4f0152612c5a0152600081816101ed015281816115e201528181611f5f0152818161213f0152818161223f0152818161243801528181612604015281816126bc01528181612788015281816129a501528181613c410152613d000152600061013c0152614b896000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c806354fd4d5011610081578063a80deda31161005b578063a80deda31461020f578063ae093f3f1461022f578063fc9914cb1461024f57600080fd5b806354fd4d50146101bd578063663b8fdb146101d35780637a0c7b21146101e857600080fd5b80632954018c116100b25780632954018c146101375780634b2f336d146101835780634c472fc9146101aa57600080fd5b80630dbd616d146100d957806313d21cdf146101025780631bcd8fc014610122575b600080fd5b6100ec6100e73660046140fc565b610272565b6040516100f9919061430b565b60405180910390f35b61011561011036600461431e565b6114d4565b6040516100f99190614444565b61012a611f59565b6040516100f99190614453565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100f9565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b61015e6101b83660046140fc565b6121f5565b6101c5600281565b6040519081526020016100f9565b6101db612432565b6040516100f991906146ea565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b61022261021d36600461431e565b6126b5565b6040516100f9919061476a565b61024261023d36600461431e565b612a75565b6040516100f991906147dd565b61026261025d3660046140fc565b613bf7565b60405190151581526020016100f9565b61035f604051806102400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160008152602001606081526020016000815260200160008152602001600015158152602001600081526020016000815260200160008152602001600060ff168152602001600081525090565b600080600080600061037088613cf4565b509450945094509450945060008560ff1660011461041d576040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015284169063e958b70490602401602060405180830381865afa1580156103f4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061041891906147f0565b6104ad565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015286169063e958b70490602401602060405180830381865afa158015610489573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ad91906147f0565b60ff8716610200890181905273ffffffffffffffffffffffffffffffffffffffff808b1660208b01528b811660608b015282168952909150600114156109e9578473ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610538573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055c91906147f0565b73ffffffffffffffffffffffffffffffffffffffff90811660808901526040517fc7de38a600000000000000000000000000000000000000000000000000000000815282821660048201529085169063c7de38a690602401602060405180830381865afa1580156105d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f5919061480d565b60c08801526040517fdfd5946500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015285169063dfd5946590602401602060405180830381865afa158015610666573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068a919061480d565b60e08801526040517f3ce0735500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015260006024830152861690633ce0735590604401602060405180830381865afa92505050801561073c575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526107399181019061480d565b60015b6107455761074c565b6101408801525b6040517f3ce0735500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015260016024830152861690633ce0735590604401602060405180830381865afa9250505080156107f9575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526107f69181019061480d565b60015b61080257610809565b6101608801525b60c08701516040517f996329f800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526024820192909252600060448201529086169063996329f89060640160a060405180830381865afa9250505080156108c4575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526108c191810190614826565b60015b6108cd576108da565b505015156101808a015250505b8073ffffffffffffffffffffffffffffffffffffffff16631afbb7a46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610925573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610949919061480d565b6101a08801526040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152851690633192195c90602401602060405180830381865afa1580156109bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109df919061480d565b60a0880152610c26565b8273ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5891906147f0565b73ffffffffffffffffffffffffffffffffffffffff90811660808901526040517fc7de38a600000000000000000000000000000000000000000000000000000000815282821660048201529083169063c7de38a6906024016040805180830381865afa158015610acc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af09190614866565b5060c08801526040517fdfd5946500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015283169063dfd5946590602401602060405180830381865afa158015610b62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b86919061480d565b60e08801526040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152841690633192195c906024016040805180830381865afa158015610bf6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1a9190614866565b60a08901526101a08801525b60008660ff16600114610ca7578373ffffffffffffffffffffffffffffffffffffffff166316f0115b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca291906147f0565b610d16565b8573ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1691906147f0565b90508073ffffffffffffffffffffffffffffffffffffffff166345d31f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d87919061480d565b6101008901526000600160ff891614610e0e578473ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610de5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e09919061480d565b610e7d565b8573ffffffffffffffffffffffffffffffffffffffff166320a05ff76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7d919061480d565b90508760ff16600114610f1f576040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152861690638991b2f190602401602060405180830381865afa158015610ef6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1a919061480d565b610faf565b6040517fb451cecc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015287169063b451cecc90602401602060405180830381865afa158015610f8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610faf919061480d565b6102208a01528067ffffffffffffffff811115610fce57610fce61488a565b60405190808252806020026020018201604052801561103e57816020015b6040805160808101825260008082526020808301829052928201819052606082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181610fec5790505b506101208a015260005b818110156113d657604080516080810182526000808252602082018190529181018290526060810191909152600180831b9060ff8c1614156111c5576040517faf0a650200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018590528a169063af0a650290604401608060405180830381865afa1580156110f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111b91906148b9565b5050602084015273ffffffffffffffffffffffffffffffffffffffff9081168084526040517ff9eaee0d0000000000000000000000000000000000000000000000000000000081526004810191909152908a169063f9eaee0d90602401602060405180830381865afa158015611195573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b9919061490d565b15156040830152611388565b6040517f172c48c70000000000000000000000000000000000000000000000000000000081526004810184905273ffffffffffffffffffffffffffffffffffffffff89169063172c48c7906024016040805180830381865afa15801561122f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112539190614928565b5073ffffffffffffffffffffffffffffffffffffffff9081168084526040517f70a082310000000000000000000000000000000000000000000000000000000081529188166004830152906370a0823190602401602060405180830381865afa1580156112c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e8919061480d565b602083015281516040517ff9eaee0d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529088169063f9eaee0d90602401602060405180830381865afa15801561135c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611380919061490d565b151560408301525b6102208c015181161561139c57600161139f565b60005b151560608301526101208c01518051839190859081106113c1576113c161495e565b60209081029190910101525050600101611048565b508273ffffffffffffffffffffffffffffffffffffffff166317d11a156040518163ffffffff1660e01b8152600401602060405180830381865afa158015611422573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611446919061480d565b896101c00181815250508273ffffffffffffffffffffffffffffffffffffffff16633dc54b406040518163ffffffff1660e01b8152600401602060405180830381865afa15801561149b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bf919061480d565b6101e08a015250969998505050505050505050565b61159b604051806102000160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600060ff1681525090565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015283917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa15801561162b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164f919061490d565b611685576040517fd384b23800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316808352604080517ffe14112d000000000000000000000000000000000000000000000000000000008152905185929163fe14112d9160048083019260209291908290030181865afa1580156116f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611719919061480d565b8360c00181815250508073ffffffffffffffffffffffffffffffffffffffff1663ef8d96036040518163ffffffff1660e01b8152600401602060405180830381865afa15801561176d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611791919061480d565b8360e00181815250508073ffffffffffffffffffffffffffffffffffffffff1663743753596040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611809919061480d565b8360a00181815250508073ffffffffffffffffffffffffffffffffffffffff16634c19386c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561185d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611881919061480d565b836101000181815250508073ffffffffffffffffffffffffffffffffffffffff1663788c6bfe6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fa919061480d565b836101600181815250508073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561194f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611973919061480d565b8360800181815250508073ffffffffffffffffffffffffffffffffffffffff166345d31f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119eb919061480d565b836101400181815250508073ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6491906147f0565b836040019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff166336dda7d56040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0a91906147f0565b836060019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663788c6bfe6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb0919061480d565b836101600181815250508073ffffffffffffffffffffffffffffffffffffffff1663e941fa786040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c29919061480d565b61018084015260408084015173ffffffffffffffffffffffffffffffffffffffff9081167f000000000000000000000000000000000000000000000000000000000000000082161460208087019190915282517f609ae31700000000000000000000000000000000000000000000000000000000815292519184169263609ae31792600480830193928290030181865afa158015611ccb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cef919061480d565b836101c00181815250508073ffffffffffffffffffffffffffffffffffffffff1663dbcb313b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d68919061480d565b836101a00181815250506000836060015173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de7919061480d565b6040517f5427c9380000000000000000000000000000000000000000000000000000000081526004810182905290915060009073ffffffffffffffffffffffffffffffffffffffff841690635427c93890602401602060405180830381865afa158015611e58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7c919061480d565b90508015611ec7576101808501518190611eb890611e9c906127106149bc565b876101000151886101400151611eb291906149d3565b90613fd0565b611ec29190614a3f565b611ece565b8461014001515b856101200181815250508273ffffffffffffffffffffffffffffffffffffffff166354fd4d506040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f47919061480d565b60ff166101e086015250505050919050565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b4ac68606040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fec919061480d565b90508067ffffffffffffffff8111156120075761200761488a565b6040519080825280602002602001820160405280156120ff57816020015b6120ec604051806102000160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600060ff1681525090565b8152602001906001900390816120255790505b50915060005b818110156121f0576040517fac4afa38000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ac4afa3890602401602060405180830381865afa15801561219b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121bf91906147f0565b90506121ca816114d4565b8483815181106121dc576121dc61495e565b602090810291909101015250600101612105565b505090565b6040517f6fbc6f6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015260009184917f00000000000000000000000000000000000000000000000000000000000000001690636fbc6f6b90602401602060405180830381865afa158015612286573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122aa919061490d565b6122e0576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060006122ee87613cf4565b5050935093505092508260ff16600114612397576040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015282169063fdd5764590602401602060405180830381865afa15801561236e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061239291906147f0565b612427565b6040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015283169063fdd5764590602401602060405180830381865afa158015612403573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061242791906147f0565b979650505050505050565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c29277cd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124c5919061480d565b90508067ffffffffffffffff8111156124e0576124e061488a565b6040519080825280602002602001820160405280156125c457816020015b60408051610260810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083018290526101208301819052610140830181905261016083015261018082018190526101a082018190526101c082018190526101e082018190526102008201819052610220820181905261024082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816124fe5790505b50915060005b818110156121f0576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa158015612660573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061268491906147f0565b905061268f81612a75565b8483815181106126a1576126a161495e565b6020908102919091010152506001016125ca565b60606000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c29277cd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612725573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612749919061480d565b905060005b81811015612829576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa1580156127e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061280891906147f0565b90506128148187613bf7565b15612820578360010193505b5060010161274e565b508167ffffffffffffffff8111156128435761284361488a565b60405190808252806020026020018201604052801561296157816020015b61294e604051806102400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160008152602001606081526020016000815260200160008152602001600015158152602001600081526020016000815260200160008152602001600060ff168152602001600081525090565b8152602001906001900390816128615790505b5092506000915060005b81811015612a6d576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa158015612a01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a2591906147f0565b9050612a318187613bf7565b15612a6457612a408187610272565b858581518110612a5257612a5261495e565b60209081029190910101526001909301925b5060010161296b565b505050919050565b604080516102608101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082018390526101208201819052610140820181905261016082015261018081018290526101a081018290526101c081018290526101e08101829052610200810182905261022081018290526102408101829052908080808080612b1b88613cf4565b73ffffffffffffffffffffffffffffffffffffffff8e168d5260ff86166101808e01819052959b50939950919750955093509150600114612bca578273ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ba1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bc591906147f0565b612c39565b8473ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c3991906147f0565b73ffffffffffffffffffffffffffffffffffffffff908116602089018190527f00000000000000000000000000000000000000000000000000000000000000009091161460408801526000600160ff881614612d03578373ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cfe91906147f0565b612d72565b8573ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d7291906147f0565b6040517f2e97ca2100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b8116600483015291925090821690632e97ca2190602401602060405180830381865afa158015612de2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e06919061490d565b15156060890152604080517f45d31f9d000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff8316916345d31f9d9160048083019260209291908290030181865afa158015612e78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e9c919061480d565b8860800181815250508073ffffffffffffffffffffffffffffffffffffffff1663743753596040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ef0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f14919061480d565b610100890152600160ff88161415613017578573ffffffffffffffffffffffffffffffffffffffff16639b2cb5d86040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f95919061480d565b8860a00181815250508573ffffffffffffffffffffffffffffffffffffffff16635f48f3936040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fe9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061300d919061480d565b60c08901526130a5565b8273ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa158015613061573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130859190614a73565b6fffffffffffffffffffffffffffffffff90811660c08b01521660a08901525b60008760ff16600114613126578473ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613121919061480d565b613195565b8573ffffffffffffffffffffffffffffffffffffffff166320a05ff76040518163ffffffff1660e01b8152600401602060405180830381865afa158015613171573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613195919061480d565b90508067ffffffffffffffff8111156131b0576131b061488a565b6040519080825280602002602001820160405280156131d9578160200160208202803683370190505b506101208a01528067ffffffffffffffff8111156131f9576131f961488a565b604051908082528060200260200182016040528015613222578160200160208202803683370190505b506101608a015260005b818110156134c4578860ff16600114156133b4576040517f5e5f2e260000000000000000000000000000000000000000000000000000000081526004810182905260009073ffffffffffffffffffffffffffffffffffffffff891690635e5f2e2690602401602060405180830381865afa1580156132ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132d291906147f0565b9050808b610120015183815181106132ec576132ec61495e565b73ffffffffffffffffffffffffffffffffffffffff92831660209182029290920101526040517f78327438000000000000000000000000000000000000000000000000000000008152828216600482015290891690637832743890602401602060405180830381865afa158015613367573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061338b919061480d565b8b610160015183815181106133a2576133a261495e565b602002602001018181525050506134bc565b6040517f172c48c70000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff87169063172c48c7906024016040805180830381865afa15801561341e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134429190614928565b8061ffff1690508b610120015183815181106134605761346061495e565b602002602001018c6101600151848151811061347e5761347e61495e565b60200260200101828152508273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525050505b60010161322c565b5060008860ff16600114613546578373ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561351d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613541919061480d565b6135b5565b8673ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613591573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135b5919061480d565b90508067ffffffffffffffff8111156135d0576135d061488a565b60405190808252806020026020018201604052801561361557816020015b60408051808201909152600080825260208201528152602001906001900390816135ee5790505b506101408b015260005b818110156139015760408051808201909152600080825260208201528a60ff166001146136da576040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff871690635094cb4f90602401602060405180830381865afa1580156136b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136d591906147f0565b613769565b6040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff8a1690635094cb4f90602401602060405180830381865afa158015613745573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061376991906147f0565b73ffffffffffffffffffffffffffffffffffffffff168152600160ff8c16146138245780516040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529089169063fdd5764590602401602060405180830381865afa1580156137fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061381f91906147f0565b6138b7565b80516040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152908a169063fdd5764590602401602060405180830381865afa158015613893573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138b791906147f0565b73ffffffffffffffffffffffffffffffffffffffff1660208201526101408c01518051829190849081106138ed576138ed61495e565b60209081029190910101525060010161361f565b508860ff166001141561398f578773ffffffffffffffffffffffffffffffffffffffff1663b2c53a6c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613959573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061397d919061480d565b60e08b015260ff6102408b0152613be9565b73ffffffffffffffffffffffffffffffffffffffff85166101a08b01819052604080517f9408b63f0000000000000000000000000000000000000000000000000000000081529051639408b63f916004808201926020929091908290030181865afa158015613a02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a2691906147f0565b8a6101e0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508473ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015613aa9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613acd9190614aa6565b5015156102008c015250604080517f9fd12b77000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff881691639fd12b779160048083019260209291908290030181865afa158015613b42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b66919061480d565b8a6102200181815250508573ffffffffffffffffffffffffffffffffffffffff16638345f26e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bdf9190614af7565b60ff166102408b01525b505050505050505050919050565b6040517f6fbc6f6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015260009184917f00000000000000000000000000000000000000000000000000000000000000001690636fbc6f6b90602401602060405180830381865afa158015613c88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cac919061490d565b613ce2576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613cec8484614023565b949350505050565b600080600080600080867f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636fbc6f6b826040518263ffffffff1660e01b8152600401613d73919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa158015613d90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613db4919061490d565b613dea576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8773ffffffffffffffffffffffffffffffffffffffff166354fd4d506040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e59919061480d565b96508660ff1660011415613ee0578795508573ffffffffffffffffffffffffffffffffffffffff1663f93f515b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613eb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ed991906147f0565b9450613fc6565b8793508373ffffffffffffffffffffffffffffffffffffffff16632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f5291906147f0565b92508373ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fc391906147f0565b91505b5091939550919395565b6000821580613fdd575081155b15613fea5750600061401d565b612710613ff8600282614b1a565b61ffff1661400684866149d3565b6140109190614b3b565b61401a9190614a3f565b90505b92915050565b6040517f055ee9b500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600091829185169063055ee9b590602401602060405180830381865afa158015614094573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140b891906147f0565b73ffffffffffffffffffffffffffffffffffffffff1614159392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146140f957600080fd5b50565b6000806040838503121561410f57600080fd5b823561411a816140d7565b9150602083013561412a816140d7565b809150509250929050565b600081518084526020808501945080840160005b8381101561419f578151805173ffffffffffffffffffffffffffffffffffffffff168852838101518489015260408082015115159089015260609081015115159088015260809096019590820190600101614149565b509495945050505050565b805173ffffffffffffffffffffffffffffffffffffffff168252600061024060208301516141f0602086018273ffffffffffffffffffffffffffffffffffffffff169052565b506040830151614204604086018215159052565b50606083015161422c606086018273ffffffffffffffffffffffffffffffffffffffff169052565b506080830151614254608086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060a083015160a085015260c083015160c085015260e083015160e085015261010080840151818601525061012080840151828287015261429783870182614135565b92505050610140808401518186015250610160808401518186015250610180808401516142c78287018215159052565b50506101a083810151908501526101c080840151908501526101e080840151908501526102008084015160ff16908501526102209283015192909301919091525090565b60208152600061401a60208301846141aa565b60006020828403121561433057600080fd5b813561433b816140d7565b9392505050565b805173ffffffffffffffffffffffffffffffffffffffff168252602081015161436f602084018215159052565b506040810151614397604084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060608101516143bf606084018273ffffffffffffffffffffffffffffffffffffffff169052565b506080818101519083015260a0808201519083015260c0808201519083015260e08082015190830152610100808201519083015261012080820151908301526101408082015190830152610160808201519083015261018080820151908301526101a080820151908301526101c080820151908301526101e09081015160ff16910152565b610200810161401d8284614342565b6020808252825182820181905260009190848201906040850190845b8181101561449657614482838551614342565b92840192610200929092019160010161446f565b50909695505050505050565b600081518084526020808501945080840160005b8381101561419f57815173ffffffffffffffffffffffffffffffffffffffff16875295820195908201906001016144b6565b600081518084526020808501945080840160005b8381101561419f578151805173ffffffffffffffffffffffffffffffffffffffff9081168952908401511683880152604090960195908201906001016144fc565b600081518084526020808501945080840160005b8381101561419f57815187529582019590820190600101614551565b805173ffffffffffffffffffffffffffffffffffffffff168252600061026060208301516145b3602086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060408301516145c7604086018215159052565b5060608301516145db606086018215159052565b506080830151608085015260a083015160a085015260c083015160c085015260e083015160e0850152610100808401518186015250610120808401518282870152614628838701826144a2565b92505050610140808401518583038287015261464483826144e8565b925050506101608084015185830382870152614660838261453d565b92505050610180808401516146798287018260ff169052565b50506101a08381015173ffffffffffffffffffffffffffffffffffffffff908116918601919091526101c0808501511515908601526101e080850151909116908501526102008084015115159085015261022080840151908501526102409283015160ff1692909301919091525090565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561475d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc088860301845261474b85835161456d565b94509285019290850190600101614711565b5092979650505050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561475d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08886030184526147cb8583516141aa565b94509285019290850190600101614791565b60208152600061401a602083018461456d565b60006020828403121561480257600080fd5b815161433b816140d7565b60006020828403121561481f57600080fd5b5051919050565b600080600080600060a0868803121561483e57600080fd5b5050835160208501516040860151606087015160809097015192989197509594509092509050565b6000806040838503121561487957600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080600080608085870312156148cf57600080fd5b84516148da816140d7565b60208601516040870151606090970151919890975090945092505050565b8051801515811461490857600080fd5b919050565b60006020828403121561491f57600080fd5b61401a826148f8565b6000806040838503121561493b57600080fd5b8251614946816140d7565b602084015190925061ffff8116811461412a57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156149ce576149ce61498d565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614a0b57614a0b61498d565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614a4e57614a4e614a10565b500490565b80516fffffffffffffffffffffffffffffffff8116811461490857600080fd5b60008060408385031215614a8657600080fd5b614a8f83614a53565b9150614a9d60208401614a53565b90509250929050565b600080600060608486031215614abb57600080fd5b614ac484614a53565b9250614ad2602085016148f8565b9150604084015164ffffffffff81168114614aec57600080fd5b809150509250925092565b600060208284031215614b0957600080fd5b815160ff8116811461433b57600080fd5b600061ffff80841680614b2f57614b2f614a10565b92169190910492915050565b60008219821115614b4e57614b4e61498d565b50019056fea2646970667358221220d15108d0bec9cc6f3903875dd8412869a3da1b36661bdc780e2e2f0ae3136d2464736f6c634300080a003360a06040523480156200001157600080fd5b5060405162001b4538038062001b45833981016040819052620000349162000608565b6000805460ff19169055816001600160a01b0381166200006757604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cc91906200070a565b6001600160a01b031660805250805160005b818110156200014257620001398382815181106200010057620001006200072f565b6020026020010151600001518483815181106200012157620001216200072f565b6020026020010151602001516200014c60201b60201c565b600101620000de565b5050505062000822565b6001600160a01b03821615806200016a57506001600160a01b038116155b156200018957604051635919af9760e11b815260040160405180910390fd5b620001a8826001600160a01b0316620004ba60201b620006751760201c565b620001d65760405163df4c572d60e01b81526001600160a01b03831660048201526024015b60405180910390fd5b620001f5816001600160a01b0316620004ba60201b620006751760201c565b6200021f5760405163df4c572d60e01b81526001600160a01b0382166004820152602401620001cd565b806001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200027c575060408051601f3d908101601f19168201909252620002799181019062000745565b60015b6200029a576040516367a7cd4360e01b815260040160405180910390fd5b8060ff16600814620002bf576040516367a7cd4360e01b815260040160405180910390fd5b506000816001600160a01b031663d62ada116040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200031f575060408051601f3d908101601f191682019092526200031c918101906200076a565b60015b6200032a576200032d565b90505b6000836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200038c575060408051601f3d908101601f19168201909252620003899181019062000745565b60015b620003aa5760405163528ca31d60e01b815260040160405180910390fd5b60128160ff161115620003d05760405163528ca31d60e01b815260040160405180910390fd5b9050826001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa9250505080156200042f575060408051601f3d908101601f191682019092526200042c91810190620007a6565b60015b6200044d576040516367a7cd4360e01b815260040160405180910390fd5b8662000461576200046185858484620004c0565b5050505050620004748484848462000526565b826001600160a01b0316846001600160a01b03167fe263805b03657ab13064915d0723c5ce14981547e7cba5283f66b9e5d81f6e6e60405160405180910390a350505050565b3b151590565b60008313620004e2576040516356e05d2b60e01b815260040160405180910390fd5b836001600160501b0316816001600160501b0316108062000501575081155b15620005205760405163b1cf675560e01b815260040160405180910390fd5b50505050565b6001600160a01b03831682156200053e57600160a11b175b6200055460ff60a21b60a284901b1682620007fb565b6001600160a01b0390951660009081526001602052604090209490945550505050565b80516001600160a01b03811681146200058f57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715620005cf57620005cf62000594565b60405290565b604051601f8201601f191681016001600160401b038111828210171562000600576200060062000594565b604052919050565b60008060408084860312156200061d57600080fd5b620006288462000577565b602085810151919450906001600160401b03808211156200064857600080fd5b818701915087601f8301126200065d57600080fd5b81518181111562000672576200067262000594565b62000682848260051b01620005d5565b818152848101925060069190911b830184019089821115620006a357600080fd5b928401925b81841015620006fa5785848b031215620006c25760008081fd5b620006cc620005aa565b620006d78562000577565b8152620006e686860162000577565b8187015283529285019291840191620006a8565b8096505050505050509250929050565b6000602082840312156200071d57600080fd5b620007288262000577565b9392505050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156200075857600080fd5b815160ff811681146200072857600080fd5b6000602082840312156200077d57600080fd5b815180151581146200072857600080fd5b80516001600160501b03811681146200058f57600080fd5b600080600080600060a08688031215620007bf57600080fd5b620007ca866200078e565b9450602086015193506040860151925060608601519150620007ef608087016200078e565b90509295509295909350565b600082198211156200081d57634e487b7160e01b600052601160045260246000fd5b500190565b6080516112f262000853600039600081816101b201528181610280015281816103e201526104ff01526112f26000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c80638456cb591161008c578063b66102df11610066578063b66102df146101d4578063e8a97a3e146101e7578063f190e5fa146101fa578063f9a650301461023f57600080fd5b80638456cb591461016d5780639dcb511a14610175578063a50cf2c8146101ad57600080fd5b80635c975abb116100bd5780635c975abb1461011c5780635cecbd0e146101325780637afb01041461015a57600080fd5b80633f4ba83a146100e457806341976e09146100ee57806354fd4d5014610114575b600080fd5b6100ec610252565b005b6101016100fc366004610f28565b610340565b6040519081526020015b60405180910390f35b610101600281565b60005460ff16604051901515815260200161010b565b610145610140366004610f4a565b610352565b6040805192835260208301919091520161010b565b610101610168366004610f90565b610376565b6100ec6103b4565b610188610183366004610f28565b6104a0565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010b565b6101887f000000000000000000000000000000000000000000000000000000000000000081565b6101016101e2366004610fbc565b6104b4565b6100ec6101f5366004610ff8565b6104d1565b61020d610208366004610f28565b6105c3565b6040805173ffffffffffffffffffffffffffffffffffffffff909416845291151560208401529082015260600161010b565b61010161024d366004610f90565b61064d565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156102dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103009190611022565b610336576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033e61067b565b565b600061034b82610761565b5092915050565b60008061035f868661064d565b915061036b848461064d565b905094509492505050565b600080600061038484610761565b90925090508161039582600a611193565b61039f908761119f565b6103a991906111dc565b925050505b92915050565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561043e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104629190611022565b610498576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033e610819565b60006104ab826105c3565b50909392505050565b60006104c96104c3858561064d565b83610376565b949350505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561055b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057f9190611022565b6105b5576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105bf82826108d9565b5050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600160205260408120548190819080610624576040517f4bb8ad8200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b947402000000000000000000000000000000000000000086161515945060a286901c9350915050565b600080600061065b84610761565b909250905061066b81600a611193565b61039f838761119f565b3b151590565b60005460ff166106ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b600080600080610770856105c3565b8095508193508294505050506000806000808573ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156107cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f19190611231565b9450945050935093508461080b5761080b84848484610dd9565b829750505050505050915091565b60005460ff1615610886576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016106e3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586107373390565b73ffffffffffffffffffffffffffffffffffffffff82161580610910575073ffffffffffffffffffffffffffffffffffffffff8116155b15610947576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82163b6109ad576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016106e3565b73ffffffffffffffffffffffffffffffffffffffff81163b610a13576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024016106e3565b8073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610a98575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610a9591810190611281565b60015b610ace576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060ff16600814610b0b576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060008173ffffffffffffffffffffffffffffffffffffffff1663d62ada116040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610b93575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610b9091810190611022565b60015b610b9c57610b9f565b90505b60008373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610c26575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610c2391810190611281565b60015b610c5c576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60128160ff161115610c9a576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b90508273ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa925050508015610d21575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610d1e91810190611231565b60015b610d57576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b86610d6857610d6885858484610dd9565b5050505050610d7984848484610e74565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fe263805b03657ab13064915d0723c5ce14981547e7cba5283f66b9e5d81f6e6e60405160405180910390a350505050565b60008313610e13576040517f56e05d2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8369ffffffffffffffffffff168169ffffffffffffffffffff161080610e37575081155b15610e6e576040517fb1cf675500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b73ffffffffffffffffffffffffffffffffffffffff83168215610ea95774020000000000000000000000000000000000000000175b610ecf7503fc000000000000000000000000000000000000000060a284901b16826112a4565b73ffffffffffffffffffffffffffffffffffffffff90951660009081526001602052604090209490945550505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610f2357600080fd5b919050565b600060208284031215610f3a57600080fd5b610f4382610eff565b9392505050565b60008060008060808587031215610f6057600080fd5b84359350610f7060208601610eff565b925060408501359150610f8560608601610eff565b905092959194509250565b60008060408385031215610fa357600080fd5b82359150610fb360208401610eff565b90509250929050565b600080600060608486031215610fd157600080fd5b83359250610fe160208501610eff565b9150610fef60408501610eff565b90509250925092565b6000806040838503121561100b57600080fd5b61101483610eff565b9150610fb360208401610eff565b60006020828403121561103457600080fd5b81518015158114610f4357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b808511156110cc57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156110b2576110b2611044565b808516156110bf57918102915b93841c9390800290611078565b509250929050565b6000826110e3575060016103ae565b816110f0575060006103ae565b816001811461110657600281146111105761112c565b60019150506103ae565b60ff84111561112157611121611044565b50506001821b6103ae565b5060208310610133831016604e8410600b841016171561114f575081810a6103ae565b6111598383611073565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561118b5761118b611044565b029392505050565b6000610f4383836110d4565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156111d7576111d7611044565b500290565b600082611212577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b805169ffffffffffffffffffff81168114610f2357600080fd5b600080600080600060a0868803121561124957600080fd5b61125286611217565b945060208601519350604086015192506060860151915061127560808701611217565b90509295509295909350565b60006020828403121561129357600080fd5b815160ff81168114610f4357600080fd5b600082198211156112b7576112b7611044565b50019056fea2646970667358221220e7485a2cb5750973f539ca59d2211008b42bb92b6c49605a53f5d9c88c330fb164736f6c634300080a003360e06040523480156200001157600080fd5b5060405162002ced38038062002ced8339810160408190526200003491620004bb565b6000805460ff19169055806001600160a01b0381166200006757604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cc9190620004bb565b6001600160a01b039081166080526001805560408051808201909152600281526105a360f41b602082015291508216620001245760405162461bcd60e51b81526004016200011b9190620004ed565b60405180910390fd5b50806001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000164573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200018a9190620004bb565b6001600160a01b031660c052604051620001a490620004ad565b604051809103906000f080158015620001c1573d6000803e3d6000fd5b506001600160a01b031660a08190526040805163204a7f0760e21b81529051638129fc1c9160048082019260009290919082900301818387803b1580156200020857600080fd5b505af11580156200021d573d6000803e3d6000fd5b50505050620002316200028a60201b60201c565b50600454600380546001600160a01b039092166001600160a01b03199283161790556000805260026020527fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b8054909116905562000545565b6000620002a460a0516200038c60201b6200119b1760201c565b9050806001600160a01b0316638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620002e257600080fd5b505af1158015620002f7573d6000803e3d6000fd5b5050600480546001600160a01b03908116600090815260026020908152604090912080546001600160a01b03199081169388169384179091558354169091179091556200035492506005915083906200043b811b6200127d17901c565b506040516001600160a01b038216907f9f69b6c10f6810213e055b0ba6bc0a4e2603f73c221aad77ea35da819cda7dc390600090a250565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260601b60148201526e5af43d82803e903d91602b57fd5bf360881b60288201526037816000f09150506001600160a01b038116620004365760405162461bcd60e51b815260206004820152601660248201527f455243313136373a20637265617465206661696c65640000000000000000000060448201526064016200011b565b919050565b600062000452836001600160a01b0384166200045b565b90505b92915050565b6000818152600183016020526040812054620004a45750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000455565b50600062000455565b610e788062001e7583390190565b600060208284031215620004ce57600080fd5b81516001600160a01b0381168114620004e657600080fd5b9392505050565b600060208083528351808285015260005b818110156200051c57858101830151858201604001528201620004fe565b818111156200052f576000604083870101525b50601f01601f1916929092016040019392505050565b60805160a05160c0516118cf620005a66000396000818161026a015281816103680152610b7001526000818161020201526110650152600081816102c4015281816105b80152818161099601528181610a840152610e7401526118cf6000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806388f64c54116100cd578063b193976311610081578063d82ecc4811610066578063d82ecc4814610309578063e3ba9ace1461031c578063f23953ab1461032f57600080fd5b8063b1939763146102f9578063b60e85181461030157600080fd5b80638f7dcfa3116100b25780638f7dcfa31461029f578063a50cf2c8146102bf578063a904aab6146102e657600080fd5b806388f64c541461026557806389b77b3e1461028c57600080fd5b806354fd4d50116101245780635da33c5b116101095780635da33c5b146101fd578063765e0159146102245780638456cb591461025d57600080fd5b806354fd4d50146101d05780635c975abb146101e657600080fd5b806313d8c8401461015657806321d18456146101a05780632932472f146101b35780633f4ba83a146101c8575b600080fd5b6004546101769073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6101766101ae366004611651565b610337565b6101c66101c1366004611697565b61058a565b005b6101c6610968565b6101d8600181565b604051908152602001610197565b60005460ff165b6040519015158152602001610197565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101766102323660046116da565b73ffffffffffffffffffffffffffffffffffffffff9081166000908152600260205260409020541690565b6101c6610a56565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101c661029a3660046116da565b610b42565b6003546101769073ffffffffffffffffffffffffffffffffffffffff1681565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101c66102f4366004611697565b610e46565b6101d8610fb8565b6101d8611033565b6101ed6103173660046116da565b611044565b61017661032a3660046116f5565b611051565b6101c661105e565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa1580156103c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103e8919061170e565b6040518060400160405280600281526020017f43500000000000000000000000000000000000000000000000000000000000008152509061045f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b60405180910390fd5b506104686112a6565b6003805473ffffffffffffffffffffffffffffffffffffffff8082166000818152600260205260409081902080549093167fffffffffffffffffffffffff0000000000000000000000000000000000000000948516179094558154909216905590517fc75b5a710000000000000000000000000000000000000000000000000000000081523360048201526024810185905260448101849052819063c75b5a7190606401600060405180830381600087803b15801561052657600080fd5b505af115801561053a573d6000803e3d6000fd5b505060405133925073ffffffffffffffffffffffffffffffffffffffff841691507ff3ede7039176503a8ad1fe7cfaa29475a9dbe0cdcaf04ecf9a5c10570c47b10390600090a390505b92915050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610614573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610638919061170e565b61066e576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106766112a6565b60035473ffffffffffffffffffffffffffffffffffffffff838116911614156106fa576003805473ffffffffffffffffffffffffffffffffffffffff808216600090815260026020526040902080549091167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092558154169055610865565b73ffffffffffffffffffffffffffffffffffffffff838116600090815260026020908152604091829020548251808401909352600383527f4146330000000000000000000000000000000000000000000000000000000000918301919091529091848116911614610798576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b5060045473ffffffffffffffffffffffffffffffffffffffff838116911614156107fd57600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85161790555b73ffffffffffffffffffffffffffffffffffffffff828116600081815260026020526040808220805488861684529183208054929095167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790945591905281541690555b6040517fc75b5a7100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600060248301819052604483015283169063c75b5a7190606401600060405180830381600087803b1580156108dc57600080fd5b505af11580156108f0573d6000803e3d6000fd5b505050506109088260056112dd90919063ffffffff16565b508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f25e267469ba2ae82515be7b3d45df60bf8308343f0809e8cf7319058e2255ce660405160405180910390a3505050565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156109f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a16919061170e565b610a4c576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a546112ff565b565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015610ae0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b04919061170e565b610b3a576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a546113e0565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa158015610bcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf0919061170e565b6040518060400160405280600281526020017f435000000000000000000000000000000000000000000000000000000000000081525090610c5e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b50610c6a6005826114a0565b6040518060400160405280600381526020017f414634000000000000000000000000000000000000000000000000000000000081525090610cd8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b50438173ffffffffffffffffffffffffffffffffffffffff16633dc54b406040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4991906117a3565b14156040518060400160405280600381526020017f414631000000000000000000000000000000000000000000000000000000000081525090610db9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b506004805473ffffffffffffffffffffffffffffffffffffffff90811660009081526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081169487169485179091558454168317909355915190917fced6ab9afc868b3a088366f6631ae20752993b5cce5d5f0534ea5a59fcc57d5691a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610ed0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef4919061170e565b610f2a576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f19a1603900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301528416906319a1603990604401600060405180830381600087803b158015610f9b57600080fd5b505af1158015610faf573d6000803e3d6000fd5b50505050505050565b600354600090819073ffffffffffffffffffffffffffffffffffffffff165b73ffffffffffffffffffffffffffffffffffffffff81161561102d5773ffffffffffffffffffffffffffffffffffffffff9081166000908152600260205260409020541681611025816117eb565b925050610fd7565b50919050565b600061103f60056114cf565b905090565b60006105846005836114a0565b60006105846005836114d9565b60006110897f000000000000000000000000000000000000000000000000000000000000000061119b565b90508073ffffffffffffffffffffffffffffffffffffffff16638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156110d357600080fd5b505af11580156110e7573d6000803e3d6000fd5b50506004805473ffffffffffffffffffffffffffffffffffffffff908116600090815260026020526040902080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811692871692831790915582541617905550611156905060058261127d565b5060405173ffffffffffffffffffffffffffffffffffffffff8216907f9f69b6c10f6810213e055b0ba6bc0a4e2603f73c221aad77ea35da819cda7dc390600090a250565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260601b60148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f091505073ffffffffffffffffffffffffffffffffffffffff8116611278576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f455243313136373a20637265617465206661696c6564000000000000000000006044820152606401610456565b919050565b600061129f8373ffffffffffffffffffffffffffffffffffffffff84166114e5565b9392505050565b60035473ffffffffffffffffffffffffffffffffffffffff90811660009081526002602052604090205416610a5457610a5461105e565b600061129f8373ffffffffffffffffffffffffffffffffffffffff8416611534565b60005460ff1661136b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610456565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff161561144d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610456565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586113b63390565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600183016020526040812054151561129f565b6000610584825490565b600061129f8383611627565b600081815260018301602052604081205461152c57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610584565b506000610584565b6000818152600183016020526040812054801561161d576000611558600183611824565b855490915060009061156c90600190611824565b90508181146115d157600086600001828154811061158c5761158c61183b565b90600052602060002001549050808760000184815481106115af576115af61183b565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806115e2576115e261186a565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610584565b6000915050610584565b600082600001828154811061163e5761163e61183b565b9060005260206000200154905092915050565b6000806040838503121561166457600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff8116811461127857600080fd5b6000806000606084860312156116ac57600080fd5b6116b584611673565b92506116c360208501611673565b91506116d160408501611673565b90509250925092565b6000602082840312156116ec57600080fd5b61129f82611673565b60006020828403121561170757600080fd5b5035919050565b60006020828403121561172057600080fd5b8151801515811461129f57600080fd5b600060208083528351808285015260005b8181101561175d57858101830151858201604001528201611741565b8181111561176f576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b6000602082840312156117b557600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561181d5761181d6117bc565b5060010190565b600082821015611836576118366117bc565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220f1e9c81b8c3af2491c907ee66cf24e1bb76111b821db02df8f98dbb48b5ab5fa64736f6c634300080a0033608060405234801561001057600080fd5b50610e58806100206000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c806354fd4d5011610081578063c45a01551161005b578063c45a0155146101a4578063c75b5a71146101ca578063d1660f99146101dd57600080fd5b806354fd4d501461014f5780638129fc1c14610157578063c12c21c01461015f57600080fd5b80631afbb7a4116100b25780631afbb7a41461011d5780631cff79cd146101265780633dc54b401461014657600080fd5b806316128211146100d957806317d11a15146100ee57806319a160391461010a575b600080fd5b6100ec6100e7366004610b42565b6101f0565b005b6100f760035481565b6040519081526020015b60405180910390f35b6100ec610118366004610b8d565b61024c565b6100f760025481565b610139610134366004610bef565b6102c9565b6040516101019190610d49565b6100f760045481565b6100f7600181565b6100ec610344565b60015461017f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610101565b60005461017f9062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b6100ec6101d8366004610d5c565b610494565b6100ec6101eb366004610d8f565b61053d565b60015473ffffffffffffffffffffffffffffffffffffffff163314610241576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600291909155600355565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1633146102a3576040517fb126b84800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102c573ffffffffffffffffffffffffffffffffffffffff83168260006105b4565b5050565b60015460609073ffffffffffffffffffffffffffffffffffffffff16331461031d576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033d73ffffffffffffffffffffffffffffffffffffffff8416836107b4565b9392505050565b600054610100900460ff1661035f5760005460ff1615610363565b303b155b6103f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600054610100900460ff1615801561043357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000166101011790555b600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16336201000002179055801561049157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b50565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1633146104eb576040517fb126b84800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff949094169390931790925560025560035543600455565b60015473ffffffffffffffffffffffffffffffffffffffff16331461058e576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105af73ffffffffffffffffffffffffffffffffffffffff841683836107f6565b505050565b80158061065457506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015284169063dd62ed3e90604401602060405180830381865afa15801561062e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106529190610dcb565b155b6106e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e63650000000000000000000060648201526084016103eb565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526105af9084907f095ea7b300000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261084c565b606061033d83836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250610958565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526105af9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401610732565b60006108ae826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166109589092919063ffffffff16565b8051909150156105af57808060200190518101906108cc9190610de4565b6105af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016103eb565b6060610967848460008561096f565b949350505050565b606082471015610a01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016103eb565b843b610a69576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016103eb565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051610a929190610e06565b60006040518083038185875af1925050503d8060008114610acf576040519150601f19603f3d011682016040523d82523d6000602084013e610ad4565b606091505b5091509150610ae4828286610aef565b979650505050505050565b60608315610afe57508161033d565b825115610b0e5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103eb9190610d49565b60008060408385031215610b5557600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff81168114610b8857600080fd5b919050565b60008060408385031215610ba057600080fd5b610ba983610b64565b9150610bb760208401610b64565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215610c0257600080fd5b610c0b83610b64565b9150602083013567ffffffffffffffff80821115610c2857600080fd5b818501915085601f830112610c3c57600080fd5b813581811115610c4e57610c4e610bc0565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715610c9457610c94610bc0565b81604052828152886020848701011115610cad57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b83811015610cea578181015183820152602001610cd2565b83811115610cf9576000848401525b50505050565b60008151808452610d17816020860160208601610ccf565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061033d6020830184610cff565b600080600060608486031215610d7157600080fd5b610d7a84610b64565b95602085013595506040909401359392505050565b600080600060608486031215610da457600080fd5b610dad84610b64565b9250610dbb60208501610b64565b9150604084013590509250925092565b600060208284031215610ddd57600080fd5b5051919050565b600060208284031215610df657600080fd5b8151801515811461033d57600080fd5b60008251610e18818460208701610ccf565b919091019291505056fea2646970667358221220448e7046078cd668c09328d857e534e2aab6cdc0e691d3d4f2c8baae8e084b1364736f6c634300080a003360c06040523480156200001157600080fd5b506040516200162738038062001627833981016040819052620000349162000177565b60408051808201909152600281526105a360f41b60208201526001600160a01b038216620000805760405162461bcd60e51b8152600401620000779190620001a9565b60405180910390fd5b50806001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e6919062000177565b6001600160a01b03166080816001600160a01b031681525050806001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200013e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000164919062000177565b6001600160a01b031660a0525062000201565b6000602082840312156200018a57600080fd5b81516001600160a01b0381168114620001a257600080fd5b9392505050565b600060208083528351808285015260005b81811015620001d857858101830151858201604001528201620001ba565b81811115620001eb576000604083870101525b50601f01601f1916929092016040019392505050565b60805160a0516113c2620002656000396000818161021f0152818161036401526106d501526000818160af0152818161012a015281816104420152818161056e015281816107b301528181610aa601528181610b890152610c6701526113c26000f3fe60806040526004361061005e5760003560e01c80635869dba8116100435780635869dba814610199578063deecfbc9146101bb578063e79a4089146101ce57600080fd5b80634f0e0ef31461011857806354fd4d501461017657600080fd5b366101135760408051808201909152600381527f574732000000000000000000000000000000000000000000000000000000000060208201523373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b60405180910390fd5b50005b600080fd5b34801561012457600080fd5b5061014c7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561018257600080fd5b5061018b600181565b60405190815260200161016d565b3480156101a557600080fd5b506101b96101b4366004611263565b6101ee565b005b6101b96101c936600461128f565b61031d565b3480156101da57600080fd5b506101b96101e93660046112e1565b61068e565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201819052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa15801561027b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061029f9190611318565b6040518060400160405280600281526020017f43500000000000000000000000000000000000000000000000000000000000008152509061030d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b506103188383610a77565b505050565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808516600483015284917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa1580156103ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103d19190611318565b6040518060400160405280600281526020017f52500000000000000000000000000000000000000000000000000000000000008152509061043f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e6919061133a565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600381526020017f57473100000000000000000000000000000000000000000000000000000000008152509061056b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156105d457600080fd5b505af11580156105e8573d6000803e3d6000fd5b50505050506105f78434610b3c565b6040517f9aa5d46200000000000000000000000000000000000000000000000000000000815234600482015273ffffffffffffffffffffffffffffffffffffffff848116602483015261ffff84166044830152851690639aa5d46290606401600060405180830381600087803b15801561067057600080fd5b505af1158015610684573d6000803e3d6000fd5b5050505050505050565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808516600483015284917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa15801561071e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107429190611318565b6040518060400160405280600281526020017f5250000000000000000000000000000000000000000000000000000000000000815250906107b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610833573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610857919061133a565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600381526020017f5747310000000000000000000000000000000000000000000000000000000000815250906108dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b506109703330858773ffffffffffffffffffffffffffffffffffffffff166336dda7d56040518163ffffffff1660e01b8152600401602060405180830381865afa15801561092e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610952919061133a565b73ffffffffffffffffffffffffffffffffffffffff16929190610cd4565b6040517f05fe138b0000000000000000000000000000000000000000000000000000000081526004810184905230602482015260009073ffffffffffffffffffffffffffffffffffffffff8616906305fe138b906044016020604051808303816000875af11580156109e6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0a9190611357565b9050610a168382610a77565b8273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f6de63bb986f2779478e384365c03cc2e62f06b453856acca87d5a519ce02664960405160405180910390a35050505050565b6040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632e1a7d4d90602401600060405180830381600087803b158015610aff57600080fd5b505af1158015610b13573d6000803e3d6000fd5b50610b389250505073ffffffffffffffffffffffffffffffffffffffff831682610d6f565b5050565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015282917f00000000000000000000000000000000000000000000000000000000000000009091169063dd62ed3e90604401602060405180830381865afa158015610bd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf69190611357565b1015610b38576040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303816000875af1158015610cb0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103189190611318565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052610d69908590610ec9565b50505050565b80471015610dd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610107565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114610e33576040519150601f19603f3d011682016040523d82523d6000602084013e610e38565b606091505b5050905080610318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610107565b6000610f2b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16610fd59092919063ffffffff16565b8051909150156103185780806020019051810190610f499190611318565b610318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610107565b6060610fe48484600085610fee565b90505b9392505050565b606082471015611080576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610107565b843b6110e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610107565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516111119190611370565b60006040518083038185875af1925050503d806000811461114e576040519150601f19603f3d011682016040523d82523d6000602084013e611153565b606091505b509150915061116382828661116e565b979650505050505050565b6060831561117d575081610fe7565b82511561118d5782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b60005b838110156111dc5781810151838201526020016111c4565b83811115610d695750506000910152565b602081526000825180602084015261120c8160408501602087016111c1565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461126057600080fd5b50565b6000806040838503121561127657600080fd5b82356112818161123e565b946020939093013593505050565b6000806000606084860312156112a457600080fd5b83356112af8161123e565b925060208401356112bf8161123e565b9150604084013561ffff811681146112d657600080fd5b809150509250925092565b6000806000606084860312156112f657600080fd5b83356113018161123e565b92506020840135915060408401356112d68161123e565b60006020828403121561132a57600080fd5b81518015158114610fe757600080fd5b60006020828403121561134c57600080fd5b8151610fe78161123e565b60006020828403121561136957600080fd5b5051919050565b600082516113828184602087016111c1565b919091019291505056fea264697066735822122017fd7fc76e4a1efcf24b78a3417fad7ab9576f0a23aa756ddb211c5e2227aa9564736f6c634300080a003360806040523480156200001157600080fd5b5060405162002b8038038062002b80833981016040819052620000349162000122565b6001600160a01b0381166200008f5760405162461bcd60e51b815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640160405180910390fd5b6001600160a01b03811660008181526001602052604080822080546001600160601b0319166b204fce5e3e2502611000000090811790915590517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91620000f99190815260200190565b60405180910390a350600680546001600160a81b031916336101000260ff191617905562000154565b6000602082840312156200013557600080fd5b81516001600160a01b03811681146200014d57600080fd5b9392505050565b612a1c80620001646000396000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c806370a08231116100f9578063b4b5ea5711610097578063dd62ed3e11610071578063dd62ed3e14610503578063e7a324dc14610555578063f1127ed81461057c578063f2fde38b146105ee57600080fd5b8063b4b5ea57146104ca578063c3cda520146104dd578063d505accf146104f057600080fd5b806395d89b41116100d357806395d89b411461045b5780639742ca4614610497578063a9059cbb146104aa578063b0660c3d146104bd57600080fd5b806370a08231146103c7578063782d6fe11461040b5780637ecebe001461043b57600080fd5b806330adf81f11610166578063481c6a7511610140578063481c6a751461031e578063587cde1e146103435780635c19a95c146103795780636fcfff451461038c57600080fd5b806330adf81f14610298578063313ce567146102bf578063349dc329146102d957600080fd5b806320606b701161019757806320606b70146102545780632185810b1461027b57806323b872dd1461028557600080fd5b806306fdde03146101be578063095ea7b31461021057806318160ddd14610233575b600080fd5b6101fa6040518060400160405280600781526020017f47656172626f780000000000000000000000000000000000000000000000000081525081565b60405161020791906124a3565b60405180910390f35b61022361021e36600461253f565b610601565b6040519015158152602001610207565b6102466b204fce5e3e2502611000000081565b604051908152602001610207565b6102467f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b61028361070d565b005b610223610293366004612569565b6107ee565b6102467f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b6102c7601281565b60405160ff9091168152602001610207565b6007546102f99073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610207565b6006546102f990610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6102f96103513660046125a5565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6102836103873660046125a5565b61098a565b6103b261039a3660046125a5565b60046020526000908152604090205463ffffffff1681565b60405163ffffffff9091168152602001610207565b6102466103d53660046125a5565b73ffffffffffffffffffffffffffffffffffffffff166000908152600160205260409020546bffffffffffffffffffffffff1690565b61041e61041936600461253f565b610997565b6040516bffffffffffffffffffffffff9091168152602001610207565b6102466104493660046125a5565b60056020526000908152604090205481565b6101fa6040518060400160405280600481526020017f474541520000000000000000000000000000000000000000000000000000000081525081565b6102836104a53660046125a5565b610cae565b6102236104b836600461253f565b610e20565b6006546102239060ff1681565b61041e6104d83660046125a5565b610e5c565b6102836104eb3660046125d1565b610efa565b6102836104fe366004612629565b611310565b610246610511366004612693565b73ffffffffffffffffffffffffffffffffffffffff9182166000908152602081815260408083209390941682529190915220546bffffffffffffffffffffffff1690565b6102467fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b6105c561058a3660046126c6565b600360209081526000928352604080842090915290825290205463ffffffff81169064010000000090046bffffffffffffffffffffffff1682565b6040805163ffffffff90931683526bffffffffffffffffffffffff909116602083015201610207565b6102836105fc3660046125a5565b61187a565b6000807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83141561063f57506bffffffffffffffffffffffff610664565b6106618360405180606001604052806025815260200161285260259139611a15565b90505b3360008181526020818152604080832073ffffffffffffffffffffffffffffffffffffffff89168085529083529281902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff871690811790915590519081529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a360019150505b92915050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314610798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e616765720060448201526064015b60405180910390fd5b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f795b0e16c8da9807b0a215f3749bd6dbcc49fc0472183f4e446abb7dcbd9d00790600090a1565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081815260408083203380855290835281842054825160608101909352602580845291936bffffffffffffffffffffffff909116928592610856928892919061285290830139611a15565b90508673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156108a257506bffffffffffffffffffffffff82811614155b156109725760006108cc83836040518060600160405280603d8152602001612974603d9139611a67565b73ffffffffffffffffffffffffffffffffffffffff898116600081815260208181526040808320948a168084529482529182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff87169081179091559151918252939450919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505b61097d878783611ad5565b5060019695505050505050565b6109943382611e9c565b50565b6000438210610a28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f476561723a3a6765745072696f72566f7465733a206e6f74207965742064657460448201527f65726d696e656400000000000000000000000000000000000000000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff831660009081526004602052604090205463ffffffff1680610a63576000915050610707565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604081208491610a95600185612735565b63ffffffff90811682526020820192909252604001600020541611610b1b5773ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812090610ae5600184612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff1691506107079050565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020908152604080832083805290915290205463ffffffff16831015610b63576000915050610707565b600080610b71600184612735565b90505b8163ffffffff168163ffffffff161115610c565760006002610b968484612735565b610ba0919061275a565b610baa9083612735565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260036020908152604080832063ffffffff8581168552908352928190208151808301909252549283168082526401000000009093046bffffffffffffffffffffffff1691810191909152919250871415610c2a576020015194506107079350505050565b805163ffffffff16871115610c4157819350610c4f565b610c4c600183612735565b92505b5050610b74565b5073ffffffffffffffffffffffffffffffffffffffff8516600090815260036020908152604080832063ffffffff909416835292905220546bffffffffffffffffffffffff6401000000009091041691505092915050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314610d34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e6167657200604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff8116610db1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640161078f565b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f2f834d1c8c4b956018fff5faca4d99868ae635487424d9c265c257ccbc698c6a90600090a250565b600080610e45836040518060600160405280602681526020016128a760269139611a15565b9050610e52338583611ad5565b5060019392505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526004602052604081205463ffffffff1680610e94576000610ef3565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812090610ec5600184612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b9392505050565b604080518082018252600781527f47656172626f780000000000000000000000000000000000000000000000000060209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f028ef9f797075f74ac647c65fde04fb0f128c2d59fd40f45732269917642fd4681840152466060820152306080808301919091528351808303909101815260a0820184528051908301207fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60c083015273ffffffffffffffffffffffffffffffffffffffff8a1660e08301526101008201899052610120808301899052845180840390910181526101408301909452835193909201929092207f19010000000000000000000000000000000000000000000000000000000000006101608401526101628301829052610182830181905290916000906101a201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa1580156110d8573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166111a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f476561723a3a64656c656761746542795369673a20696e76616c69642073696760448201527f6e61747572650000000000000000000000000000000000000000000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff811660009081526005602052604081208054916111d7836127a4565b919050558914611269576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f476561723a3a64656c656761746542795369673a20696e76616c6964206e6f6e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161078f565b874211156112f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f476561723a3a64656c656761746542795369673a207369676e6174757265206560448201527f7870697265640000000000000000000000000000000000000000000000000000606482015260840161078f565b611303818b611e9c565b505050505b505050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86141561134d57506bffffffffffffffffffffffff611372565b61136f8660405180606001604052806024815260200161291c60249139611a15565b90505b604080518082018252600781527f47656172626f780000000000000000000000000000000000000000000000000060209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f028ef9f797075f74ac647c65fde04fb0f128c2d59fd40f45732269917642fd4681840152466060820152306080808301919091528351808303909101815260a0909101835280519082012073ffffffffffffffffffffffffffffffffffffffff8b166000908152600590925291812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918c918c918c919086611472836127a4565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810188905260e001604051602081830303815290604052805190602001209050600082826040516020016115199291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff8b169284019290925260608301899052608083018890529092509060019060a0016020604051602081039080840390855afa1580156115a2573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661164a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a7065726d69743a20696e76616c6964207369676e617475726500604482015260640161078f565b8b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146116df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f476561723a3a7065726d69743a20756e617574686f72697a6564000000000000604482015260640161078f565b88421115611749576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a7065726d69743a207369676e6174757265206578706972656400604482015260640161078f565b846000808e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508a73ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258760405161186491906bffffffffffffffffffffffff91909116815260200190565b60405180910390a3505050505050505050505050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314611900576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e6167657200604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff811661197d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640161078f565b60065460405173ffffffffffffffffffffffffffffffffffffffff80841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36006805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b6000816c010000000000000000000000008410611a5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b509192915050565b6000836bffffffffffffffffffffffff16836bffffffffffffffffffffffff1611158290611ac2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b50611acd83856127dd565b949350505050565b60065460ff1680611b025750600654610100900473ffffffffffffffffffffffffffffffffffffffff1633145b80611b24575060075473ffffffffffffffffffffffffffffffffffffffff1633145b611b8a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f476561723a3a7472616e73666572732061726520666f7262696464656e000000604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff8316611c2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603c60248201527f476561723a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260448201527f616e736665722066726f6d20746865207a65726f206164647265737300000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff8216611cd0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f476561723a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260448201527f616e7366657220746f20746865207a65726f2061646472657373000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260016020908152604091829020548251606081019093526036808452611d2d936bffffffffffffffffffffffff90921692859291906129b190830139611a67565b73ffffffffffffffffffffffffffffffffffffffff848116600090815260016020908152604080832080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff968716179055928616825290829020548251606081019093526030808452611dbf949190911692859290919061287790830139611f50565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260409182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff968716179055905193851684529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a373ffffffffffffffffffffffffffffffffffffffff808416600090815260026020526040808220548584168352912054611e9792918216911683611fc1565b505050565b73ffffffffffffffffffffffffffffffffffffffff808316600081815260026020818152604080842080546001845282862054949093528787167fffffffffffffffffffffffff000000000000000000000000000000000000000084168117909155905191909516946bffffffffffffffffffffffff9092169391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4611f4a828483611fc1565b50505050565b600080611f5d8486612802565b9050846bffffffffffffffffffffffff16816bffffffffffffffffffffffff1610158390611fb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b50949350505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561200b57506000816bffffffffffffffffffffffff16115b15611e975773ffffffffffffffffffffffffffffffffffffffff8316156120fd5773ffffffffffffffffffffffffffffffffffffffff831660009081526004602052604081205463ffffffff1690816120655760006120c4565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812090612096600185612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b905060006120eb82856040518060600160405280602881526020016128cd60289139611a67565b90506120f9868484846121e2565b5050505b73ffffffffffffffffffffffffffffffffffffffff821615611e975773ffffffffffffffffffffffffffffffffffffffff821660009081526004602052604081205463ffffffff1690816121525760006121b1565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812090612183600185612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b905060006121d882856040518060600160405280602781526020016128f560279139611f50565b9050611308858484845b60006122064360405180606001604052806034815260200161294060349139612465565b905060008463ffffffff1611801561226d575073ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812063ffffffff831691612251600188612735565b63ffffffff908116825260208201929092526040016000205416145b156123035773ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812083916122a4600188612735565b63ffffffff168152602081019190915260400160002080546bffffffffffffffffffffffff92909216640100000000027fffffffffffffffffffffffffffffffff000000000000000000000000ffffffff9092169190911790556123fe565b60408051808201825263ffffffff80841682526bffffffffffffffffffffffff808616602080850191825273ffffffffffffffffffffffffffffffffffffffff8b166000908152600382528681208b8616825290915294909420925183549451909116640100000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009094169116179190911790556123a5846001612832565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260046020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff929092169190911790555b604080516bffffffffffffffffffffffff80861682528416602082015273ffffffffffffffffffffffffffffffffffffffff8716917fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724910160405180910390a25050505050565b6000816401000000008410611a5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91905b600060208083528351808285015260005b818110156124d0578581018301518582016040015282016124b4565b818111156124e2576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461253a57600080fd5b919050565b6000806040838503121561255257600080fd5b61255b83612516565b946020939093013593505050565b60008060006060848603121561257e57600080fd5b61258784612516565b925061259560208501612516565b9150604084013590509250925092565b6000602082840312156125b757600080fd5b610ef382612516565b803560ff8116811461253a57600080fd5b60008060008060008060c087890312156125ea57600080fd5b6125f387612516565b9550602087013594506040870135935061260f606088016125c0565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a03121561264457600080fd5b61264d88612516565b965061265b60208901612516565b95506040880135945060608801359350612677608089016125c0565b925060a0880135915060c0880135905092959891949750929550565b600080604083850312156126a657600080fd5b6126af83612516565b91506126bd60208401612516565b90509250929050565b600080604083850312156126d957600080fd5b6126e283612516565b9150602083013563ffffffff811681146126fb57600080fd5b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600063ffffffff8381169083168181101561275257612752612706565b039392505050565b600063ffffffff80841680612798577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156127d6576127d6612706565b5060010190565b60006bffffffffffffffffffffffff8381169083168181101561275257612752612706565b60006bffffffffffffffffffffffff80831681851680830382111561282957612829612706565b01949350505050565b600063ffffffff8083168185168083038211156128295761282961270656fe476561723a3a617070726f76653a20616d6f756e7420657863656564732039362062697473476561723a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e74206f766572666c6f7773476561723a3a7472616e736665723a20616d6f756e7420657863656564732039362062697473476561723a3a5f6d6f7665566f7465733a20766f746520616d6f756e7420756e646572666c6f7773476561723a3a5f6d6f7665566f7465733a20766f746520616d6f756e74206f766572666c6f7773476561723a3a7065726d69743a20616d6f756e7420657863656564732039362062697473476561723a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d62657220657863656564732033322062697473476561723a3a7472616e7366657246726f6d3a207472616e7366657220616d6f756e742065786365656473207370656e64657220616c6c6f77616e6365476561723a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e7420657863656564732062616c616e6365a26469706673582212201b84fd7789a35c022f692420863210a30e82d2405659f5a28275d433fa53467f64736f6c634300080a003360806040526016805460ff1916905534801561001a57600080fd5b506040516110a73803806110a7833981016040819052610039916100b6565b600080546001600160a01b038085166001600160a01b0319928316179092556003805492841692909116919091179055610080600a6b033b2e3c9fd0803ce80000006100e9565b60075550506b033b2e3c9fd0803ce800000060155561010b565b80516001600160a01b03811681146100b157600080fd5b919050565b600080604083850312156100c957600080fd5b6100d28361009a565b91506100e06020840161009a565b90509250929050565b60008261010657634e487b7160e01b600052601260045260246000fd5b500490565b610f8d8061011a6000396000f3fe608060405234801561001057600080fd5b50600436106102e95760003560e01c806367c99d5811610191578063c5f956af116100e3578063dbcb313b11610097578063f11a648711610071578063f11a648714610320578063f3fdb15a146105f1578063fe14112d1461061157600080fd5b8063dbcb313b146105d6578063e941fa78146105df578063ef8d9603146105e857600080fd5b8063cb3905e1116100c8578063cb3905e1146105c4578063cf33d95514610320578063d0efe753146105cd57600080fd5b8063c5f956af14610588578063ca9505e4146105a857600080fd5b80639aa5d46211610145578063b6ac642a1161011f578063b6ac642a14610567578063bb04b19314610567578063bf28068b1461057557600080fd5b80639aa5d46214610544578063a4e8273e14610557578063b3554a0a1461055e57600080fd5b8063788c6bfe11610176578063788c6bfe146104ef5780638456cb591461050157806396df5dc01461053157600080fd5b806367c99d58146104de57806374375359146104e757600080fd5b806336dda7d51161024a5780634d778ad1116101fe57806354fd4d50116101d857806354fd4d50146104c05780635c975abb146104c8578063609ae317146104d557600080fd5b80634d778ad114610491578063532fe502146104a45780635427c938146104ad57600080fd5b80633f4ba83a1161022f5780633f4ba83a1461045257806345d31f9d1461047f5780634c19386c1461048857600080fd5b806336dda7d51461040f5780633e163df01461042f57600080fd5b80632495a599116102a157806329f3d3b61161028657806329f3d3b6146103b35780632a3354c9146103bc5780632e97ca21146103dc57600080fd5b80632495a599146103735780632954018c1461039357600080fd5b8063078c4781116102d2578063078c4781146103205780630fce70fb146103335780631e16e4fc1461033b57600080fd5b8063030dbb04146102ee57806305fe138b1461030a575b600080fd5b6102f760105481565b6040519081526020015b60405180910390f35b6102f7610318366004610ce8565b600092915050565b61033161032e366004610d14565b50565b005b6015546102f7565b61034e610349366004610d2f565b610618565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610301565b60035461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b60005461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6102f760095481565b600a5461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103ff6103ea366004610d14565b60066020526000908152604090205460ff1681565b6040519015158152602001610301565b60055461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103ff61043d366004610d14565b60146020526000908152604090205460ff1681565b610331601680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b6102f760075481565b6102f760015481565b6102f761049f366004610d2f565b61064f565b6102f760115481565b6102f76104bb366004610d2f565b61066d565b6102f7600181565b6016546103ff9060ff1681565b6102f760085481565b6102f7600d5481565b6102f7610685565b6b033b2e3c9fd0803ce80000006102f7565b610331601680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b61033161053f366004610d2f565b601555565b610331610552366004610d48565b505050565b60016102f7565b6102f7600e5481565b61033161032e366004610d2f565b610331610583366004610ce8565b61071d565b60135461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103316105b6366004610d7d565b600b92909255600c55600d55565b6102f7600c5481565b6102f7600b5481565b6102f760155481565b6102f7600f5481565b6102f760025481565b60125461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b60006102f7565b6004818154811061062857600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6000610667826b033b2e3c9fd0803ce800000061077a565b92915050565b6000610667826b033b2e3c9fd0803ce80000006108e9565b6003546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156106f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107189190610da9565b905090565b6009829055600a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691909117909155600354610776911682846109fe565b5050565b60408051808201909152600281527f4d330000000000000000000000000000000000000000000000000000000000006020820152600090826107f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b60405180910390fd5b506000610800600284610e72565b90506b033b2e3c9fd0803ce8000000610839827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610ead565b6108439190610e72565b8411156040518060400160405280600281526020017f4d31000000000000000000000000000000000000000000000000000000000000815250906108b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b5082816108cd6b033b2e3c9fd0803ce800000087610ec4565b6108d79190610f01565b6108e19190610e72565b949350505050565b60008215806108f6575081155b1561090357506000610667565b8161091b60026b033b2e3c9fd0803ce8000000610e72565b610945907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610ead565b61094f9190610e72565b8311156040518060400160405280600281526020017f4d31000000000000000000000000000000000000000000000000000000000000815250906109c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b506b033b2e3c9fd0803ce80000006109d9600282610e72565b6109e38486610ec4565b6109ed9190610f01565b6109f79190610e72565b9392505050565b6040805173ffffffffffffffffffffffffffffffffffffffff848116602483015260448083018590528351808403909101815260649092018352602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65649084015261055292869291600091610ac9918516908490610b73565b8051909150156105525780806020019051810190610ae79190610f19565b610552576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016107e9565b60606108e1848460008585843b610be6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107e9565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051610c0f9190610f3b565b60006040518083038185875af1925050503d8060008114610c4c576040519150601f19603f3d011682016040523d82523d6000602084013e610c51565b606091505b5091509150610c61828286610c6c565b979650505050505050565b60608315610c7b5750816109f7565b825115610c8b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ce357600080fd5b919050565b60008060408385031215610cfb57600080fd5b82359150610d0b60208401610cbf565b90509250929050565b600060208284031215610d2657600080fd5b6109f782610cbf565b600060208284031215610d4157600080fd5b5035919050565b600080600060608486031215610d5d57600080fd5b83359250610d6d60208501610cbf565b9150604084013590509250925092565b600080600060608486031215610d9257600080fd5b505081359360208301359350604090920135919050565b600060208284031215610dbb57600080fd5b5051919050565b60005b83811015610ddd578181015183820152602001610dc5565b83811115610dec576000848401525b50505050565b6020815260008251806020840152610e11816040850160208701610dc2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082610ea8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600082821015610ebf57610ebf610e43565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610efc57610efc610e43565b500290565b60008219821115610f1457610f14610e43565b500190565b600060208284031215610f2b57600080fd5b815180151581146109f757600080fd5b60008251610f4d818460208701610dc2565b919091019291505056fea26469706673582212204edb887d94928b3914f60ab48df0182da9eb30ddbb7021b164cc728b60a655d564736f6c634300080a003360e06040523480156200001157600080fd5b5060405162013af238038062013af2833981016040819052620000349162000630565b826001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000073573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000999190620007bf565b620000a433620004ab565b6001600160a01b038116608081905260408051630873769560e01b815290516308737695916004808201926020929091908290030181865afa158015620000ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001159190620007bf565b6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000153573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001799190620007bf565b6001600160a01b0390811660a052841660c0525060405183906200019d9062000519565b6001600160a01b039091168152602001604051809103906000f080158015620001ca573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b0392909216918217905560608301516080840151604051620002029062000527565b6001600160a01b03938416815292909116602083015215156040820152606001604051809103906000f0801580156200023f573d6000803e3d6000fd5b50600280546001600160a01b0319166001600160a01b0392909216919091179055604051600090620002746020820162000535565b601f1982820381018352601f909101166040819052600154600254620002b0926001600160a01b039283169291909116908790602001620007e6565b60408051601f1981840301815290829052620002d09291602001620008e8565b60408051601f19818403018152919052905060006200035982848151602092830120604080517fff00000000000000000000000000000000000000000000000000000000000000818601523060601b6001600160601b03191660218201526035810193909352605580840192909252805180840390920182526075909201909152805191012090565b600154604051634fafc35760e11b81526001600160a01b038084166004830152929350911690639f5f86ae90602401600060405180830381600087803b158015620003a357600080fd5b505af1158015620003b8573d6000803e3d6000fd5b50505050620003ce8284620004fb60201b60201c565b600380546001600160a01b0319166001600160a01b0383811691821790925560015460408051630304b08760e61b81529051919093169263c12c21c09160048083019260209291908290030181865afa15801562000430573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004569190620007bf565b6001600160a01b031614620004a05760405162461bcd60e51b815260206004820152600c60248201526b496e636f727265637420434d60a01b604482015260640160405180910390fd5b505050505062000909565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008183516020850134f59050803b6200051457600080fd5b505050565b6158e8806200243683390190565b615e978062007d1e83390190565b615f3d806200dbb583390190565b6001600160a01b03811681146200055957600080fd5b50565b8051620005698162000543565b919050565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b0381118282101715620005a957620005a96200056e565b60405290565b604080519081016001600160401b0381118282101715620005a957620005a96200056e565b604051601f8201601f191681016001600160401b0381118282101715620005ff57620005ff6200056e565b604052919050565b80516001600160801b03811681146200056957600080fd5b805180151581146200056957600080fd5b6000806000606084860312156200064657600080fd5b8351620006538162000543565b602085810151919450906001600160401b03808211156200067357600080fd5b9086019060a082890312156200068857600080fd5b6200069262000584565b6200069d8362000607565b8152620006ac84840162000607565b8482015260408084015183811115620006c457600080fd5b8401601f81018b13620006d657600080fd5b805184811115620006eb57620006eb6200056e565b620006fb878260051b01620005d4565b818152878101955060069190911b82018701908c8211156200071c57600080fd5b918701915b818310156200077e5783838e0312156200073b5760008081fd5b62000745620005af565b8351620007528162000543565b81528389015161ffff811681146200076a5760008081fd5b818a01528652948701949183019162000721565b8484015250620007939050606085016200055c565b6060830152620007a6608085016200061f565b6080830152979097015195989697509495945050505050565b600060208284031215620007d257600080fd5b8151620007df8162000543565b9392505050565b600060018060a01b0380861683526020818616818501526040606081860152610100850160018060801b038088511660608801528084890151166080880152508187015160a080880152818151808452610120890191508583019350600092505b808310156200087857835180518816835286015161ffff168683015292850192600192909201919084019062000847565b5060608901516001600160a01b031660c0890152608090980151151560e0909701969096525094979650505050505050565b6000815160005b81811015620008cd5760208185018101518683015201620008b1565b81811115620008dd576000828601525b509290920192915050565b600062000901620008fa8386620008aa565b84620008aa565b949350505050565b60805160a05160c051611ad3620009636000396000818161010a0152610ea00152600081816103790152610b170152600081816101680152818161068c01528181610a4d01528181610b860152610c190152611ad36000f3fe6080604052600436106100f35760003560e01c80638da5cb5b1161008a578063ebf0c71711610059578063ebf0c71714610367578063f2fde38b1461039b578063f4747c58146103bb578063f9aa028a146103db57600080fd5b80638da5cb5b1461025a57806394ca2cb5146102855780639c4ae2d014610327578063c12c21c01461033a57600080fd5b80633e0b1a23116100c65780633e0b1a23146101ce5780634ef501ac146101e3578063715018a614610230578063805abe6a1461024557600080fd5b806316f0115b146100f85780632954018c146101565780632f7a18811461018a578063318d0d10146101b7575b600080fd5b34801561010457600080fd5b5061012c7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561016257600080fd5b5061012c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561019657600080fd5b5060025461012c9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156101c357600080fd5b506101cc610408565b005b3480156101da57600080fd5b506101cc610498565b3480156101ef57600080fd5b506102036101fe366004611726565b610521565b6040805173ffffffffffffffffffffffffffffffffffffffff93841681529290911660208301520161014d565b34801561023c57600080fd5b506101cc610567565b34801561025157600080fd5b506101cc6105f2565b34801561026657600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff1661012c565b34801561029157600080fd5b5061012c6102a03660046117e6565b8151602092830120604080517fff00000000000000000000000000000000000000000000000000000000000000818601523060601b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660218201526035810193909352605580840192909252805180840390920182526075909201909152805191012090565b6101cc6103353660046117e6565b6107d8565b34801561034657600080fd5b5060015461012c9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561037357600080fd5b5061012c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103a757600080fd5b506101cc6103b63660046118c0565b6107f5565b3480156103c757600080fd5b506101cc6103d63660046118e4565b610925565b3480156103e757600080fd5b5060035461012c9073ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff16331461048e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b610496610a49565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610519576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b61048e610b82565b6004818154811061053157600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff91821692501682565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b61049660006116b1565b60005473ffffffffffffffffffffffffffffffffffffffff163314610673576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b3073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106f5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071991906119c4565b73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610763573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078791906119c4565b73ffffffffffffffffffffffffffffffffffffffff1614156107d5576040517fbdebb83f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33ff5b60008183516020850134f59050803b6107f057600080fd5b505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b73ffffffffffffffffffffffffffffffffffffffff8116610919576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610485565b610922816116b1565b50565b60005473ffffffffffffffffffffffffffffffffffffffff1633146109a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b805160005b818110156107f05760048382815181106109c7576109c76119e1565b602090810291909101810151825460018082018555600094855293839020825160029092020180547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff938416178255929093015192840180549092169216919091179055016109ab565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ab6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ada91906119c4565b6040517ff2fde38b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301529192509082169063f2fde38b90602401600060405180830381600087803b158015610b6757600080fd5b505af1158015610b7b573d6000803e3d6000fd5b5050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1391906119c4565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca691906119c4565b60045490915060005b81811015610dd4576003546004805473ffffffffffffffffffffffffffffffffffffffff90921691637bccacee919084908110610cee57610cee6119e1565b906000526020600020906002020160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660048481548110610d3357610d336119e1565b600091825260209091206002909102015460405160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b158015610db157600080fd5b505af1158015610dc5573d6000803e3d6000fd5b50505050806001019050610caf565b506001546040517fe26b2f6300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529084169063e26b2f6390602401600060405180830381600087803b158015610e4257600080fd5b505af1158015610e56573d6000803e3d6000fd5b50506001546040517fcf33d95500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201527f0000000000000000000000000000000000000000000000000000000000000000909116925063cf33d9559150602401600060405180830381600087803b158015610ee857600080fd5b505af1158015610efc573d6000803e3d6000fd5b50505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f919190611a10565b905060005b818110156116ab576003546040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810183905260009173ffffffffffffffffffffffffffffffffffffffff1690635094cb4f90602401602060405180830381865afa15801561100e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103291906119c4565b6001546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80841660048301529293506000929091169063fdd5764590602401602060405180830381865afa1580156110a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110cc91906119c4565b905060008173ffffffffffffffffffffffffffffffffffffffff1663ce30bbdb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561111b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113f9190611a29565b9050600c81601081111561115557611155611a4a565b14156116225760008273ffffffffffffffffffffffffffffffffffffffff166320b2c1516040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111cc91906119c4565b905060008373ffffffffffffffffffffffffffffffffffffffff1663927188d96040518163ffffffff1660e01b8152600401602060405180830381865afa15801561121b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123f91906119c4565b905060008473ffffffffffffffffffffffffffffffffffffffff166399253ac06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561128e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b291906119c4565b6040517f9dcb511a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152919250908a169063e8a97a3e9083908390639dcb511a90602401602060405180830381865afa15801561132c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135091906119c4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156113bd57600080fd5b505af11580156113d1573d6000803e3d6000fd5b50506040517f9dcb511a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301528c16925063e8a97a3e915085908390639dcb511a90602401602060405180830381865afa15801561144b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061146f91906119c4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156114dc57600080fd5b505af11580156114f0573d6000803e3d6000fd5b50506003546001546040517f7832743800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301529283169450633e7c88d69350879290911690637832743890602401602060405180830381865afa158015611573573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115979190611a79565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015261ffff166024820152604401600060405180830381600087803b15801561160657600080fd5b505af115801561161a573d6000803e3d6000fd5b505050505050505b600d81601081111561163657611636611a4a565b141561169d578173ffffffffffffffffffffffffffffffffffffffff16639b51ecd36040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561168457600080fd5b505af1158015611698573d6000803e3d6000fd5b505050505b836001019350505050610f96565b50505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561173857600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156117915761179161173f565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156117de576117de61173f565b604052919050565b600080604083850312156117f957600080fd5b823567ffffffffffffffff8082111561181157600080fd5b818501915085601f83011261182557600080fd5b81356020828211156118395761183961173f565b611869817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011601611797565b9250818352878183860101111561187f57600080fd5b8181850182850137600091830181019190915290969401359450505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461092257600080fd5b6000602082840312156118d257600080fd5b81356118dd8161189e565b9392505050565b600060208083850312156118f757600080fd5b823567ffffffffffffffff8082111561190f57600080fd5b818501915085601f83011261192357600080fd5b8135818111156119355761193561173f565b611943848260051b01611797565b818152848101925060069190911b83018401908782111561196357600080fd5b928401925b818410156119b957604084890312156119815760008081fd5b61198961176e565b84356119948161189e565b8152848601356119a38161189e565b8187015283526040939093019291840191611968565b979650505050505050565b6000602082840312156119d657600080fd5b81516118dd8161189e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215611a2257600080fd5b5051919050565b600060208284031215611a3b57600080fd5b8151601181106118dd57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060208284031215611a8b57600080fd5b815161ffff811681146118dd57600080fdfea264697066735822122090f5e4310a8b66bfdd7fdfbe64bc5b98570e7c1a415ffb0ced3c857cf6c5b14064736f6c634300080a00336101606040526000805462ff00001916620c00001790553480156200002357600080fd5b50604051620058e8380380620058e8833981016040819052620000469162000537565b806001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000085573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ab919062000537565b6000805460ff191690556001600160a01b038116620000dd57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200011c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000142919062000537565b6001600160a01b03166080816001600160a01b031681525050506000816001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200019d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c3919062000537565b6001600160a01b03831661010081905260e081905260408051632495a59960e01b81529051929350600092632495a599916004808201926020929091908290030181865afa1580156200021a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000240919062000537565b6001600160a01b03811660c05290506200025a8162000472565b816001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000299573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002bf919062000537565b6001600160a01b0316610120816001600160a01b031681525050816001600160a01b03166377532ed96040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000318573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033e919062000537565b6001600160a01b0316610140816001600160a01b031681525050816001600160a01b031663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000397573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003bd919062000537565b6001600001600a6101000a8154816001600160a01b0302191690836001600160a01b03160217905550816001600160a01b0316639068a8686040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000425573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044b919062000537565b6001600160a01b031660a0525050600380546001600160a01b031916331790555062000588565b6001600160a01b03811660009081526006602052604090205415620004aa57604051632e5a5c7760e01b815260040160405180910390fd5b61010060055410620004cf57604051631cbbe18560e01b815260040160405180910390fd5b600580546001600160a01b0383166000818152600660209081526040808320600190951b948590558483526004909152812091909155825491929062000515836200055e565b91905055505050565b6001600160a01b03811681146200053457600080fd5b50565b6000602082840312156200054a57600080fd5b815162000557816200051e565b9392505050565b60006000198214156200058157634e487b7160e01b600052601160045260246000fd5b5060010190565b60805160a05160c05160e051610100516101205161014051615248620006a0600039600081816107e20152818161371001526137c501526000818161052f01526136780152600081816103d301528181610e5701528181610ebb015281816124ff0152818161265a01528181612aa101528181612b8c01528181612c4e01528181612d0d0152613b8f015260006105a401526000818161062701528181610d2201528181610db301528181610e0001528181610e3601528181610f3f0152818161203a01528181612b6b015281816130ee015281816134dc015281816135a90152613fe601526000818161081c01528181610fe101526124c20152600081816107a80152818161118401526122cb01526152486000f3fe608060405234801561001057600080fd5b50600436106103415760003560e01c8063830aa745116101bd578063a70bc542116100f9578063e75538c7116100a2578063f9aa028a1161007c578063f9aa028a1461089d578063fdd57645146108bd578063fe47cde7146108f3578063ff6875431461091357600080fd5b8063e75538c714610864578063e958b70414610877578063f67c5bd01461088a57600080fd5b8063db7ceb80116100d3578063db7ceb8014610817578063dc2b21c11461083e578063e1998cf91461085157600080fd5b8063a70bc542146107ca578063c5e10eef146107dd578063d48bfca71461080457600080fd5b806394cf073a116101665780639f5f86ae116101405780639f5f86ae146107745780639fd12b7714610787578063a366f49614610790578063a50cf2c8146107a357600080fd5b806394cf073a146106f557806395373018146107085780639af1d35a1461071b57600080fd5b80638991b2f1116101975780638991b2f1146106af5780638fe3f93f146106cf578063944ac59f146106e257600080fd5b8063830aa7451461066f5780638345f26e146106825780638456cb59146106a757600080fd5b8063458936f51161028c578063570a7af2116102355780636ce4074a1161020f5780636ce4074a146105ef5780636e98e5e41461060f5780636f307dc314610622578063783274381461064957600080fd5b8063570a7af21461059f5780635c975abb146105c6578063654a9eda146105dc57600080fd5b80635063524a116102665780635063524a1461055157806351e3f1601461058457806354fd4d501461059757600080fd5b8063458936f51461050e57806346fb371d146105175780634f0e0ef31461052a57600080fd5b80632630c12f116102ee5780633192195c116102c85780633192195c146104be5780633e8297ca146104e65780633f4ba83a1461050657600080fd5b80632630c12f1461045857806329df0b93146104845780632f7a18811461049757600080fd5b806316f0115b1161031f57806316f0115b146103ce578063172c48c7146103f55780632362a2d81461043757600080fd5b8063055ee9b5146103465780630d8f9cee146103a657806311ca4fc2146103bb575b600080fd5b61037c610354366004614a87565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6103b96103b4366004614aa4565b610949565b005b6103b96103c9366004614aa4565b610a76565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b610408610403366004614add565b610b4e565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835261ffff90911660208301520161039d565b61044a610445366004614b13565b610b66565b60405190815260200161039d565b6001546a0100000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1661037c565b6103b9610492366004614a87565b6110be565b60005461037c906301000000900473ffffffffffffffffffffffffffffffffffffffff1681565b6104d16104cc366004614a87565b611122565b6040805192835260208301919091520161039d565b61044a6104f4366004614a87565b60096020526000908152604090205481565b6103b9611156565b61044a60055481565b6103b9610525366004614b95565b611244565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b61056461055f366004614be6565b61149b565b60408051948552602085019390935291830152606082015260800161039d565b6103b9610592366004614aa4565b611602565b61044a600281565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b60005460ff16604051901515815260200161039d565b6103b96105ea366004614c21565b611703565b6106026105fd366004614d40565b611bbb565b60405161039d9190614e5b565b6103b961061d366004614aa4565b611e8e565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b61065c610657366004614a87565b612036565b60405161ffff909116815260200161039d565b6103b961067d366004614b95565b61210f565b6000546106959062010000900460ff1681565b60405160ff909116815260200161039d565b6103b961229d565b61044a6106bd366004614a87565b60086020526000908152604090205481565b61037c6106dd366004614e6e565b612389565b6103b96106f0366004614ea5565b612718565b61044a610703366004614f0a565b612845565b6103b9610716366004614a87565b612e5a565b6001546040805161ffff808416825262010000840481166020830152640100000000840481169282019290925266010000000000008304821660608201526801000000000000000090920416608082015260a00161039d565b6103b9610782366004614a87565b612f85565b61044a60075481565b6103b961079e366004614add565b613045565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b96107d8366004614f4c565b61309b565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b9610812366004614a87565b613221565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b961084c366004614f81565b61327b565b6103b961085f366004614aa4565b613306565b610408610872366004614add565b6134c9565b61037c610885366004614a87565b613541565b61044a610898366004614a87565b6135a5565b60035461037c9073ffffffffffffffffffffffffffffffffffffffff1681565b61037c6108cb366004614a87565b600b6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b600c5461037c9073ffffffffffffffffffffffffffffffffffffffff1681565b61037c610921366004614a87565b600a6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561099b57506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b156109d2576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff1615610a14576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055610a4a828261362e565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b60035473ffffffffffffffffffffffffffffffffffffffff163314610ac7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805473ffffffffffffffffffffffffffffffffffffffff9384166301000000027fffffffffffffffffff0000000000000000000000000000000000000000ffffff90911617905560018054919092166a0100000000000000000000027fffff0000000000000000000000000000000000000000ffffffffffffffffffff909116179055565b600080610b5d6001841b6134c9565b91509150915091565b6000805460ff1615610bd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064015b60405180910390fd5b600054610100900460ff1615610c1b576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff163314610ca0576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610cab89613541565b90506000806000806000610cbe86611122565b9094509050610ccf8c8e868461149b565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152939b5093985090955093506000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015610d6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8f9190614fa4565b9050610d9b8887614fec565b610da6906001614fec565b811115610de657610de1877f00000000000000000000000000000000000000000000000000000000000000008d60018c8b870303038d61366e565b610e30565b610e3073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168d8960018a8d01869003016138c0565b610e7e877f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000089600061366e565b6040517fca9505e40000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604481018490527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ca9505e490606401600060405180830381600087803b158015610f1457600080fd5b505af1158015610f28573d6000803e3d6000fd5b50505050505050506001841115610f6757610f67837f00000000000000000000000000000000000000000000000000000000000000008d87600061366e565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260086020526040902054861916610f9c8489888461395b565b6040517f89b77b3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f000000000000000000000000000000000000000000000000000000000000000016906389b77b3e90602401600060405180830381600087803b15801561102557600080fd5b505af1158015611039573d6000803e3d6000fd5b50505073ffffffffffffffffffffffffffffffffffffffff909c16600090815260026020526040812080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550929a9950505050505050505050565b6000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314611116576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61111f81613a35565b50565b60008060008061113185613aa6565b91955092509050816111438286615004565b61114d9190615041565b92505050915091565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156111e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611204919061507c565b61123a576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611242613c24565b565b60005460ff16156112b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156112f3576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100178155338152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff9081169084161480159061137457506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b80156113985750600c5473ffffffffffffffffffffffffffffffffffffffff163314155b806113b7575073ffffffffffffffffffffffffffffffffffffffff8316155b156113ee576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113f7826135a5565b61142d576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061143885613541565b9050611448838583856000613d05565b61146c5761145b83858360006001613d05565b5061146a838583856001613d05565b505b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b6001546000908190819081906127109061ffff166114b98888615099565b6114c39190615004565b6114cd9190615041565b6114d79086614fec565b935060018760028111156114ed576114ed6150b0565b1415611587576001546000906127109061151390640100000000900461ffff168b615004565b61151d9190615041565b6001549091506127109061153b9062010000900461ffff168b615004565b6115459190615041565b61154f9086614fec565b94508481111561156657600185820303935061156a565b8094505b85811061157b578585039250611581565b84860391505b506115f7565b600287600281111561159b5761159b6150b0565b14156115f157600154600090612710906115c59068010000000000000000900461ffff168b615004565b6115cf9190615041565b6001549091506127109061153b906601000000000000900461ffff168b615004565b84840391505b945094509450949050565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561165457506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b1561168b576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff16156116cd576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055610a4a8282613ea6565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561175557506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b1561178c576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff16156117ce576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790556118048584613ea6565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152600091908616906370a0823190602401602060405180830381865afa158015611874573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118989190614fa4565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529192506000918616906370a0823190602401602060405180830381865afa15801561190a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192e9190614fa4565b60015490915060009081906a0100000000000000000000900473ffffffffffffffffffffffffffffffffffffffff16635cecbd0e61196c8689615099565b8a6119778988615099565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152600481019390935273ffffffffffffffffffffffffffffffffffffffff918216602484015260448301528a1660648201526084016040805180830381865afa1580156119f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1791906150df565b9150915060018411611a2d57611a2d898961362e565b611a3687612036565b611a449061ffff1682615004565b9050611a4f88612036565b611a5d9061ffff1683615004565b9150818110611a7857611a6f89613a35565b5050505061146c565b73ffffffffffffffffffffffffffffffffffffffff891660009081526009602052604081205483611ab56b033b2e3c9fd0803ce800000085615004565b611abf9190615041565b611ad5906b033b2e3c9fd0803ce8000000615099565b611adf9190614fec565b60015490915061271090611b0a906b033b2e3c9fd0803ce80000009062010000900461ffff16615004565b611b149190615041565b8111611b555773ffffffffffffffffffffffffffffffffffffffff8a166000908152600960205260409020819055611b4b8a613a35565b505050505061146c565b611b5e8a613f56565b50505073ffffffffffffffffffffffffffffffffffffffff871660009081526009602052604090206001905550505050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b6060611bc960005460ff1690565b15611c30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff1615611c72576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100178155338152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff908116908416141580611ce7575073ffffffffffffffffffffffffffffffffffffffff8316155b15611d3d57600c5473ffffffffffffffffffffffffffffffffffffffff163314611d3d576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611d4885613541565b90508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167faed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab0360405160405180910390a36040517f1cff79cd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821690631cff79cd90611df89087908790600401615103565b6000604051808303816000875af1158015611e17573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611e5d9190810190615132565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905595945050505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314611edf576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821615611f4f5773ffffffffffffffffffffffffffffffffffffffff8281166000908152600a6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169183169190911790555b73ffffffffffffffffffffffffffffffffffffffff811615611fbf5773ffffffffffffffffffffffffffffffffffffffff8181166000908152600b6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169184169190911790555b73ffffffffffffffffffffffffffffffffffffffff811673cccccccccccccccccccccccccccccccccccccccc141561203257600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790555b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120ba5750506001547e01000000000000000000000000000000000000000000000000000000000000900461ffff1690565b60006120c5836135a5565b9050806120fe576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612107816134c9565b949350505050565b60005460ff161561217c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156121be576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff163314612243576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61224d8383613ea6565b61226f73ffffffffffffffffffffffffffffffffffffffff83168585846138c0565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555050565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015612327573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061234b919061507c565b612381576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112426142d4565b6000805460ff16156123f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff1615612439576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff1633146124be576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166321d18456857f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612568573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061258c9190614fa4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168152600481019290925260248201526044016020604051808303816000875af11580156125e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061260b91906151a0565b6040517fbf28068b0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff80831660248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063bf28068b90604401600060405180830381600087803b1580156126a057600080fd5b505af11580156126b4573d6000803e3d6000fd5b505050506126c28382614394565b73ffffffffffffffffffffffffffffffffffffffff811660009081526008602052604081206001905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690559392505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314612769576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805461ffff92831668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9484166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff96851664010000000002969096167fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff97851662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000090931694909816939093171794909416949094179190911716919091179055565b6000805460ff16156128b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156128f5576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff16331461297a576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080600061298887613aa6565b925092509250846129a25761299d8684615099565b6129ac565b6129ac8684614fec565b935060008515612b045769021e19e0c9bab24000008510612a15576129d583603689901c615004565b6129e3603686901c84615004565b6129ed9190614fec565b603686901c6129fc8585615004565b612a069190615004565b612a109190615041565b612a52565b612a1f8388615004565b612a298584615004565b612a339190614fec565b85612a3e8585615004565b612a489190615004565b612a529190615041565b6040517fbf28068b0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff8a811660248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063bf28068b90604401600060405180830381600087803b158015612ae757600080fd5b505af1158015612afb573d6000803e3d6000fd5b50505050612d9f565b60008484612b128583615004565b612b1c9190615041565b612b269190615099565b60015490915060009061271090612b419061ffff1684615004565b612b4b9190615041565b905073ffffffffffffffffffffffffffffffffffffffff8a1663d1660f997f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000084612bb6878f614fec565b612bc09190614fec565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b158015612c3457600080fd5b505af1158015612c48573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ca9505e4838b612c949190614fec565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815260048101919091526024810184905260006044820152606401600060405180830381600087803b158015612cf357600080fd5b505af1158015612d07573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d9a9190614fa4565b925050505b6040517f16128211000000000000000000000000000000000000000000000000000000008152600481018690526024810182905273ffffffffffffffffffffffffffffffffffffffff891690631612821190604401600060405180830381600087803b158015612e0e57600080fd5b505af1158015612e22573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055509498975050505050505050565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff16158015612eac57506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b15612ee3576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff1615612f25576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055612f5a81613f56565b50600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b60035473ffffffffffffffffffffffffffffffffffffffff163314612fd6576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517ff62005acebe9b616aefb5f248b48f5e89f28437b27d1eebc0b2d911209f297af90600090a250565b60035473ffffffffffffffffffffffffffffffffffffffff163314613096576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600755565b60035473ffffffffffffffffffffffffffffffffffffffff1633146130ec576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613193576001805461ffff83167e01000000000000000000000000000000000000000000000000000000000000027dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790555050565b600061319e836135a5565b9050806131d7576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000908152600460205260409020805473ffffffffffffffffffffffffffffffffffffffff1675ffff000000000000000000000000000000000000000060a084901b161790555050565b60035473ffffffffffffffffffffffffffffffffffffffff163314613272576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61111f81614467565b60035473ffffffffffffffffffffffffffffffffffffffff1633146132cc576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805460ff90921662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff909216919091179055565b60005460ff1615613373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156133b5576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff16331461343a576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061344583613541565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260026020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055905061349c8282614394565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b60008082600114156135275750506001547f0000000000000000000000000000000000000000000000000000000000000000927e0100000000000000000000000000000000000000000000000000000000000090910461ffff169150565b50506000908152600460205260409020549060a082901c90565b73ffffffffffffffffffffffffffffffffffffffff80821660009081526002602052604090205416806135a0576040517fb5ba4c4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146136255773ffffffffffffffffffffffffffffffffffffffff8216600090815260066020526040902054613628565b60015b92915050565b6000613639826135a5565b73ffffffffffffffffffffffffffffffffffffffff909316600090815260086020526040902080549319939093169092555050565b8080156136c657507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b15613828576040517fd1660f9900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301526044820184905286169063d1660f9990606401600060405180830381600087803b15801561376357600080fd5b505af1158015613777573d6000803e3d6000fd5b50506040517f5869dba800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690527f0000000000000000000000000000000000000000000000000000000000000000169250635869dba89150604401600060405180830381600087803b15801561380b57600080fd5b505af115801561381f573d6000803e3d6000fd5b505050506138b9565b6040517fd1660f9900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301526044820184905286169063d1660f9990606401600060405180830381600087803b1580156138a057600080fd5b505af11580156138b4573d6000803e3d6000fd5b505050505b5050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261395590859061455b565b50505050565b60025b8181116138b95781811615613a2d576000613978826134c9565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529192506000918316906370a0823190602401602060405180830381865afa1580156139eb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a0f9190614fa4565b90506002811115613a2a57613a2a878388600185038961366e565b50505b60011b61395e565b73ffffffffffffffffffffffffffffffffffffffff811660009081526008602052604081205490613a6582614667565b60005490915062010000900460ff16811115613aa1576000613a86836146a7565b613a91906001614fec565b905061395584848460008561470b565b505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff16631afbb7a46040518163ffffffff1660e01b8152600401602060405180830381865afa158015613af6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b1a9190614fa4565b92508373ffffffffffffffffffffffffffffffffffffffff166317d11a156040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b8b9190614fa4565b91507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bf8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c1c9190614fa4565b929491935050565b60005460ff16613c90576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610bd0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6040805173ffffffffffffffffffffffffffffffffffffffff8681166024830152604480830186905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b30000000000000000000000000000000000000000000000000000000017905291517f1cff79cd000000000000000000000000000000000000000000000000000000008152600092861691631cff79cd91613dc6918a91600401615103565b6000604051808303816000875af1925050508015613e2457506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052613e219190810190615132565b60015b613e2d57613e61565b80511580613e50575080806020019051810190613e4a919061507c565b15156001145b15613e5f576001915050613e9d565b505b8115613e99576040517f76e3e29c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060005b95945050505050565b6000613eb1826135a5565b9050801580613ec35750600754811615155b15613efa576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83166000908152600860205260409020548116613aa15773ffffffffffffffffffffffffffffffffffffffff83166000908152600860205260409020805482179055505050565b60015473ffffffffffffffffffffffffffffffffffffffff8281166000908152600860205260408120546a010000000000000000000090930490911691908080613f9f86611122565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526127108202600482015273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350908716915063f9a6503090604401602060405180830381865afa15801561403a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061405e9190614fa4565b9250614069846146a7565b6001019150506000806000805b848110156142a157801561408f5760018186031b614092565b60015b935086841615614299576000806140a8866134c9565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8e811660048301529294509092506000918416906370a0823190602401602060405180830381865afa15801561411d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141419190614fa4565b9050600181111561428c576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff848116602483015261ffff841691908d169063f9a6503090604401602060405180830381865afa1580156141c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141ea9190614fa4565b6141f49190615004565b6141fe9087614fec565b95508886106142875760006142128b614667565b60005490915062010000900460ff16811115614249576142448d8c836001891561423e57898e0361470b565b8d61470b565b614278565b85156142785773ffffffffffffffffffffffffffffffffffffffff8d1660009081526008602052604090208b90555b50505050505050505050505050565b614295565b98861898600194505b5050505b600101614076565b506040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005460ff1615614341576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613cdb3390565b73ffffffffffffffffffffffffffffffffffffffff821615806143dd575073ffffffffffffffffffffffffffffffffffffffff8281166000908152600260205260409020541615155b15614414576040517f9e59609e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff918216600090815260026020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001691909216179055565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260066020526040902054156144c4576040517f2e5a5c7700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61010060055410614501576040517f1cbbe18500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005805473ffffffffffffffffffffffffffffffffffffffff83166000818152600660209081526040808320600190951b9485905584835260049091528120919091558254919290614552836151bd565b91905055505050565b60006145bd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166148799092919063ffffffff16565b805190915015613aa157808060200190518101906145db919061507c565b613aa1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610bd0565b60008060005b6101008110156146a0576001811b91508382161561468c578260010192505b838210614698576146a0565b60010161466d565b5050919050565b600081600114156146ba57506000919050565b61010060015b60016146cc8284614fec565b901c92506001831b848116158015906146e75750600185851c145b156146f257506146a0565b84811061470157839250614705565b8391505b506146c0565b815b81811015614846576001811b8581161561483d57600061472c826134c9565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529192506000918316906370a0823190602401602060405180830381865afa15801561479f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147c39190614fa4565b90506001811161483a57600054978318977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9097019660ff6201000090910416871161483a5750505073ffffffffffffffffffffffffffffffffffffffff86166000908152600860205260409020859055506138b9565b50505b5060010161470d565b506040517f53275fcb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606148888484600085614892565b90505b9392505050565b606082471015614924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610bd0565b843b61498c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610bd0565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516149b591906151f6565b60006040518083038185875af1925050503d80600081146149f2576040519150601f19603f3d011682016040523d82523d6000602084013e6149f7565b606091505b5091509150614a07828286614a12565b979650505050505050565b60608315614a2157508161488b565b825115614a315782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd09190614e5b565b73ffffffffffffffffffffffffffffffffffffffff8116811461111f57600080fd5b600060208284031215614a9957600080fd5b813561488b81614a65565b60008060408385031215614ab757600080fd5b8235614ac281614a65565b91506020830135614ad281614a65565b809150509250929050565b600060208284031215614aef57600080fd5b5035919050565b8035600381106135a057600080fd5b801515811461111f57600080fd5b600080600080600080600060e0888a031215614b2e57600080fd5b8735614b3981614a65565b9650614b4760208901614af6565b9550604088013594506060880135614b5e81614a65565b93506080880135614b6e81614a65565b925060a0880135915060c0880135614b8581614b05565b8091505092959891949750929550565b60008060008060808587031215614bab57600080fd5b8435614bb681614a65565b93506020850135614bc681614a65565b92506040850135614bd681614a65565b9396929550929360600135925050565b60008060008060808587031215614bfc57600080fd5b84359350614c0c60208601614af6565b93969395505050506040820135916060013590565b600080600080600060a08688031215614c3957600080fd5b8535614c4481614a65565b94506020860135614c5481614a65565b93506040860135614c6481614a65565b94979396509394606081013594506080013592915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614cf257614cf2614c7c565b604052919050565b600067ffffffffffffffff821115614d1457614d14614c7c565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600080600060608486031215614d5557600080fd5b8335614d6081614a65565b92506020840135614d7081614a65565b9150604084013567ffffffffffffffff811115614d8c57600080fd5b8401601f81018613614d9d57600080fd5b8035614db0614dab82614cfa565b614cab565b818152876020838501011115614dc557600080fd5b816020840160208301376000602083830101528093505050509250925092565b60005b83811015614e00578181015183820152602001614de8565b838111156139555750506000910152565b60008151808452614e29816020860160208601614de5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061488b6020830184614e11565b60008060408385031215614e8157600080fd5b823591506020830135614ad281614a65565b803561ffff811681146135a057600080fd5b600080600080600060a08688031215614ebd57600080fd5b614ec686614e93565b9450614ed460208701614e93565b9350614ee260408701614e93565b9250614ef060608701614e93565b9150614efe60808701614e93565b90509295509295909350565b600080600060608486031215614f1f57600080fd5b8335614f2a81614a65565b9250602084013591506040840135614f4181614b05565b809150509250925092565b60008060408385031215614f5f57600080fd5b8235614f6a81614a65565b9150614f7860208401614e93565b90509250929050565b600060208284031215614f9357600080fd5b813560ff8116811461488b57600080fd5b600060208284031215614fb657600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115614fff57614fff614fbd565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561503c5761503c614fbd565b500290565b600082615077577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60006020828403121561508e57600080fd5b815161488b81614b05565b6000828210156150ab576150ab614fbd565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600080604083850312156150f257600080fd5b505080516020909101519092909150565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015260006148886040830184614e11565b60006020828403121561514457600080fd5b815167ffffffffffffffff81111561515b57600080fd5b8201601f8101841361516c57600080fd5b805161517a614dab82614cfa565b81815285602083850101111561518f57600080fd5b613e9d826020830160208601614de5565b6000602082840312156151b257600080fd5b815161488b81614a65565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156151ef576151ef614fbd565b5060010190565b60008251615208818460208701614de5565b919091019291505056fea26469706673582212209d39bb9d4972b515acdad1ffb757acd15e103ca6ee762f88a6382b36243734ba64736f6c634300080a00336101406040523480156200001257600080fd5b5060405162005e9738038062005e97833981016040819052620000359162000198565b60016000556001600160a01b0383166200006257604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038316608081905260408051636f307dc360e01b81529051636f307dc3916004808201926020929091908290030181865afa158015620000ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d39190620001ea565b6001600160a01b031660a0816001600160a01b031681525050826001600160a01b0316634f0e0ef36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200012b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001519190620001ea565b6001600160a01b0390811660c0529190911660e0819052151561010052151561012052506200020f565b80516001600160a01b03811681146200019357600080fd5b919050565b600080600060608486031215620001ae57600080fd5b620001b9846200017b565b9250620001c9602085016200017b565b915060408401518015158114620001df57600080fd5b809150509250925092565b600060208284031215620001fd57600080fd5b62000208826200017b565b9392505050565b60805160a05160c05160e0516101005161012051615a86620004116000396000818161061101528181612fb5015261481f01526000818161031701528181610dde015281816144f901526146e5015260008181610557015281816146a901526147a901526000818161034b0152818161387d015261392d01526000818161047301528181611bfe0152818161274f0152818161280d0152818161366a01526137dd015260008181610665015281816109d801528181610b0301528181610bd501528181610cdd01528181610e6501528181610fe30152818161114e0152818161120e0152818161132e015281816114510152818161162b01528181611708015281816117e0015281816119e501528181611b1201528181611d9501528181611ed5015281816120040152818161216801528181612290015281816123c601528181612568015281816126390152818161266f0152818161293d01528181612a2101528181612a8a01528181612bde01528181612d2601528181612e6801528181612ec2015281816130a10152818161311b015281816131b401528181613341015281816134c10152818161358a0152818161372f01528181613a1a01528181613b2e01528181613dbb015281816142200152818161432801528181614492015281816148e7015281816149e801528181614aae0152614d8f0152615a866000f3fe6080604052600436106102695760003560e01c8063860aefcf11610153578063c7de38a6116100cb578063dfd594651161007f578063eb9606df11610064578063eb9606df1461081e578063f9eaee0d1461083e578063ffd9b9071461085e57600080fd5b8063dfd59465146107de578063e1f21c67146107fe57600080fd5b8063cff0ab96116100b0578063cff0ab96146106ef578063d9ccbec114610783578063dcf65482146107be57600080fd5b8063c7de38a6146106a7578063caa5c23f146106dc57600080fd5b80639c55a05411610122578063b55bb84b11610107578063b55bb84b14610633578063c12c21c014610653578063c690908a1461068757600080fd5b80639c55a054146105df578063b1836d32146105ff57600080fd5b8063860aefcf146104db5780639408b63f146105455780639b67ab30146105795780639be0536a146105bd57600080fd5b80635d91a0e0116101e65780636d19b486116101b55780637071b7c51161019a5780637071b7c51461049557806379c0ef91146104a857806382871ace146104c857600080fd5b80636d19b486146104415780636f307dc31461046157600080fd5b80635d91a0e0146103e85780635f73fbec146103fb578063601d66f61461040e5780636c8f225d1461042e57600080fd5b80633d9287fa1161023d5780635019e20a116102225780635019e20a1461039257806354fd4d50146103b257806359781034146103d557600080fd5b80633d9287fa146103055780634f0e0ef31461033957600080fd5b8062842b571461026e578063256ac915146102905780632a7ba1f7146102c55780632b7c7b11146102e5575b600080fd5b34801561027a57600080fd5b5061028e6102893660046151bf565b61087e565b005b34801561029c57600080fd5b506102b06102ab3660046151f8565b61098e565b60405190151581526020015b60405180910390f35b3480156102d157600080fd5b5061028e6102e0366004615215565b610a61565b3480156102f157600080fd5b5061028e610300366004615215565b610c3b565b34801561031157600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561034557600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102bc565b34801561039e57600080fd5b5061028e6103ad3660046151f8565b610d6a565b3480156103be57600080fd5b506103c7600281565b6040519081526020016102bc565b61028e6103e336600461522e565b61108c565b61028e6103f63660046152bb565b611275565b61028e610409366004615340565b611589565b34801561041a57600080fd5b5061028e6104293660046153d8565b6117de565b61028e61043c36600461541b565b611900565b34801561044d57600080fd5b506102b061045c3660046151f8565b611c31565b34801561046d57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b61028e6104a336600461546e565b611c60565b3480156104b457600080fd5b5061036d6104c3366004615215565b611f3e565b61028e6104d63660046152bb565b611f4b565b3480156104e757600080fd5b5060025461051c906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041682565b604080516fffffffffffffffffffffffffffffffff9384168152929091166020830152016102bc565b34801561055157600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561058557600080fd5b506004546040805167ffffffffffffffff608084901c1681526fffffffffffffffffffffffffffffffff9092166020830152016102bc565b3480156105c957600080fd5b506105d261227d565b6040516102bc91906154e2565b3480156105eb57600080fd5b5061028e6105fa36600461553c565b61228e565b34801561060b57600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561063f57600080fd5b5061028e61064e3660046151f8565b6123c4565b34801561065f57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561069357600080fd5b5061028e6106a23660046151f8565b6124c6565b3480156106b357600080fd5b506106c76106c23660046151f8565b612668565b604080519283526020830191909152016102bc565b61028e6106ea366004615557565b61289b565b3480156106fb57600080fd5b5060015461074e906fffffffffffffffffffffffffffffffff811690700100000000000000000000000000000000810460ff169071010000000000000000000000000000000000900464ffffffffff1683565b604080516fffffffffffffffffffffffffffffffff9094168452911515602084015264ffffffffff16908201526060016102bc565b34801561078f57600080fd5b506102b061079e366004615599565b600360209081526000928352604080842090915290825290205460ff1681565b3480156107ca57600080fd5b5061028e6107d93660046151f8565b612a88565b3480156107ea57600080fd5b506103c76107f93660046151f8565b612b86565b34801561080a57600080fd5b5061028e61081936600461522e565b612c6d565b34801561082a57600080fd5b5061028e6108393660046155c7565b612ec0565b34801561084a57600080fd5b506102b06108593660046151f8565b613057565b34801561086a57600080fd5b5061028e6108793660046155ee565b6131b2565b600260005414156108f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b6002600090815573ffffffffffffffffffffffffffffffffffffffff8316808252600360209081526040808420338086529083529381902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081527f9b3258bc4904fd6426b99843e206c6c7cdb1fd0f040121c25b71dafbb3851ee0910160405180910390a350506001600055565b6040517f055ee9b500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063055ee9b590602401602060405180830381865afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a43919061560b565b73ffffffffffffffffffffffffffffffffffffffff16141592915050565b60026000541415610ace576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610b5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b83919061560b565b9050610b903382846132eb565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906395373018906024015b600060405180830381600087803b158015610c1a57600080fd5b505af1158015610c2e573d6000803e3d6000fd5b5050600160005550505050565b60026000541415610ca8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610d39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5d919061560b565b9050610b90338284613411565b60026000541415610dd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000557f000000000000000000000000000000000000000000000000000000000000000015610e34576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610ec1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee5919061560b565b33600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915290205490915060ff16610f52576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f5d82613583565b5090508015610f98576040517ff713841e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b15801561102757600080fd5b505af115801561103b573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692503391507f93c70cc9715bef0d83edf2095f3595402279d274f402a73ffc17f1bcb19d863d90600090a35050600160005550565b600260005414156110f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611106613875565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063e958b70490602401602060405180830381865afa158015611197573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bb919061560b565b90506111c9848285856139b7565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401600060405180830381600087803b15801561125257600080fd5b505af1158015611266573d6000803e3d6000fd5b50506001600055505050505050565b600260005414156112e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611375573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611399919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166113e8576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806113f483613583565b915091508161142f576040517f1fdd676f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611437613875565b831561144d5761144d85858b8660016000613ae3565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632362a2d88b600185338e8e8e6040518863ffffffff1660e01b81526004016114b59796959493929190615663565b6020604051808303816000875af11580156114d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f891906156bf565b90508873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f7dfecd8419723a9d3954585a30c2a270165d70aafa146c11c1e1b88ae14390648460405161157091815260200190565b60405180910390a4505060016000555050505050505050565b600260005414156115f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ab919061560b565b90506116b5613875565b81156116cb576116cb8383338460016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d89061174a903390600090819083908d908d908d90600401615663565b6020604051808303816000875af1158015611769573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178d91906156bf565b5060405173ffffffffffffffffffffffffffffffffffffffff87169033907f460ad03b1cf79b1d64d3aefa28475f110ab66e84649c52bb41ed796b9b39198190600090a35050600160005550505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611849573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118d1576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff90811670010000000000000000000000000000000002911617600255565b6002600054141561196d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000908155606461198461ffff851687615707565b61198e9190615744565b9050611999816144f7565b6119a2816145e8565b6119ab84614668565b6119b3613875565b6040517f172c48c7000000000000000000000000000000000000000000000000000000008152600060048201819052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a64919061577f565b61ffff169150611a789050816127106157ae565b611a829083615707565b611a8c8288615707565b11611ac3576040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff86811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611b5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b81919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638587604051611bef92919091825261ffff16602082015260400190565b60405180910390a3611c2386827f00000000000000000000000000000000000000000000000000000000000000008a6139b7565b505060016000555050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526006602052604081205415155b92915050565b60026000541415611ccd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611cdb856144f7565b611ce484614668565b611ced856145e8565b600154700100000000000000000000000000000000900460ff1615611d3e576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d46613875565b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff85811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611de0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e04919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638885604051611e7292919091825261ffff16602082015260400190565b60405180910390a38215611e9057611e908484878460006001613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015611f1957600080fd5b505af1158015611f2d573d6000803e3d6000fd5b505060016000555050505050505050565b6000611c5a60058361480f565b60026000541415611fb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa15801561204b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206f919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166120be576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120c661481b565b6120fc576040517f7e52ccb400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061210782612668565b509050612112613875565b82156121285761212884848a8560016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d8906121aa908c90600290879033908f908f908f90600401615663565b6020604051808303816000875af11580156121c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ed91906156bf565b90508773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167ffada13ff2d5e1a1d9da37ad4a4130893b34e3c69c32b17f87ec31fd661b867078460405161226591815260200190565b60405180910390a45050600160005550505050505050565b6060612289600561486b565b905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612381576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561242f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612453919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146124b7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614878565b5050565b60026000541415612533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156125c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e8919061560b565b90506125f4818361489a565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401610c00565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126fc919061560b565b905060008061270b8387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156127a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127c991906156bf565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015291965061271091851690637afb010490604401602060405180830381865afa158015612863573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061288791906156bf565b6128919190615744565b9350505050915091565b60026000541415612908576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129bd919061560b565b90506129c7613875565b8115612a7e576129dc83833384600080613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015612a6557600080fd5b505af1158015612a79573d6000803e3d6000fd5b505050505b5050600160005550565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612af3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b17919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b7b576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614c92565b600080612b9283612668565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152919350600092507f000000000000000000000000000000000000000000000000000000000000000090911690633192195c906024016040805180830381865afa158015612c26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4a91906157c5565b9150819050612c5b61271084615707565b612c659190615744565b949350505050565b60026000541415612cda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063fdd5764590602401602060405180830381865afa158015612d6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d91919061560b565b73ffffffffffffffffffffffffffffffffffffffff161480612dd7575073ffffffffffffffffffffffffffffffffffffffff831660009081526006602052604090205415155b15612e0e576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612eac57600080fd5b505af1158015611c23573d6000803e3d6000fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f4f919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612fb3576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000061300a576040517f50dd11fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805464ffffffffff90921671010000000000000000000000000000000000027fffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffffff909216919091179055565b6040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063f67c5bd090602401602060405180830381865afa1580156130e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061310c91906156bf565b905080158015906131ab5750807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015613184573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a891906156bf565b16155b9392505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561321d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613241919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146132a5576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018054911515700100000000000000000000000000000000027fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff909216919091179055565b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600060448301819052917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561338c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133b091906156bf565b90506133bb816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f98274bf834d179ee08dc0604071b0dc90b54731bd5f725a5a96a39a86bce025a8360405161340391815260200190565b60405180910390a250505050565b61341a816144f7565b600154700100000000000000000000000000000000900460ff161561346b576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600160448301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561350c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061353091906156bf565b905061353b816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f9cac51154cc0d835e2f9c9d1f59a9344588cee107f4203bf58a8c797e3a58c458360405161340391815260200190565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613617919061560b565b90506000806136268387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156136c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136e491906156bf565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529195506000917f00000000000000000000000000000000000000000000000000000000000000001690633192195c906024016040805180830381865afa158015613775573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061379991906157c5565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350600092506127109187169063f9a6503090604401602060405180830381865afa158015613837573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061385b91906156bf565b6138659190615707565b9092109794965093945050505050565b34156139b5577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156138e357600080fd5b505af11580156138f7573d6000803e3d6000fd5b50506040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201523460248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16935063a9059cbb925060440190506020604051808303816000875af115801561398f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139b391906157e9565b505b565b6139c084614cb4565b6040517f830aa74500000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f0000000000000000000000000000000000000000000000000000000000000000169063830aa74590608401600060405180830381600087803b158015613a5e57600080fd5b505af1158015613a72573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fa32435755c235de2976ed44a75a2f85cb01faf0c894f639fe0c32bb9455fea8f83604051613ad591815260200190565b60405180910390a350505050565b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301523060248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b158015613b7257600080fd5b505af1158015613b86573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff871692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a28460005b8181101561441d5736888883818110613bea57613bea615806565b9050602002810190613bfc9190615835565b90506004613c0d6020830183615873565b90501015613c47576040517fe2b0e50600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b30613c5560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16141561421c578415613ca9576040517f5fb9107f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613cb86020830183615873565b613cc1916158d8565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167f59781034000000000000000000000000000000000000000000000000000000001415613e3c5760008080613d1e6020860186615873565b613d2c916004908290615920565b810190613d39919061522e565b925092509250613e34838c73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614613e2b576040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015613e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e26919061560b565b613e2d565b8b5b84846139b7565b505050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2b7c7b11000000000000000000000000000000000000000000000000000000001415613ec757600194506000613e996020840184615873565b613ea7916004908290615920565b810190613eb49190615215565b9050613ec1898983613411565b50614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2a7ba1f7000000000000000000000000000000000000000000000000000000001415613f80578415613f49576040517fc0b0caa800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613f586020840184615873565b613f66916004908290615920565b810190613f739190615215565b9050613ec18989836132eb565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f233a8caa0000000000000000000000000000000000000000000000000000000014156140e457600080613fda6020850185615873565b613fe8916004908290615920565b810190613ff5919061594a565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c8116600483015292945090925082918416906370a0823190602401602060405180830381865afa158015614069573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061408d91906156bf565b10156140dd576040517fa5ac537300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016108e7565b5050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fc690908a00000000000000000000000000000000000000000000000000000000141561416457600061413d6020840184615873565b61414b916004908290615920565b81019061415891906151f8565b9050613ec1888261489a565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f23e27a640000000000000000000000000000000000000000000000000000000014156141e45760006141bd6020840184615873565b6141cb916004908290615920565b8101906141d891906151f8565b9050613ec18882614d42565b6040517f1e9e7e7a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50614414565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff68754361426760208501856151f8565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156142d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142f4919061560b565b73ffffffffffffffffffffffffffffffffffffffff16148061436d575073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001661435560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16145b156143a4576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6144126143b46020830183615873565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506143f69250505060208401846151f8565b73ffffffffffffffffffffffffffffffffffffffff1690614e39565b505b50600101613bcf565b506040517f60c8e8938c9a0c0d88a98d6f1c562ce68077e12bf3edb8047378f2f736cb45b490600090a16040517fe1998cf900000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff86811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b1580156144d657600080fd5b505af11580156144ea573d6000803e3d6000fd5b5050505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006139b3576001546fffffffffffffffffffffffffffffffff9081169081146124c257600454608081901c906fffffffffffffffffffffffffffffffff16600067ffffffffffffffff8316431461456e578461458a565b61458a6fffffffffffffffffffffffffffffffff831686615976565b9050838111156145c6576040517f675f1a5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff81164360801b176004555050505050565b6002546fffffffffffffffffffffffffffffffff16811080614631575060025470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681115b156139b3576040517fce16799400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61467061481b565b156146a7576040517f63fc31c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1615614806577f0000000000000000000000000000000000000000000000000000000000000000801561472657503373ffffffffffffffffffffffffffffffffffffffff821614155b1561475d576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600160248301527f00000000000000000000000000000000000000000000000000000000000000001690639dc29fac90604401600060405180830381600087803b1580156147ed57600080fd5b505af1158015614801573d6000803e3d6000fd5b505050505b6139b381614cb4565b60006131ab8383614e7b565b60007f0000000000000000000000000000000000000000000000000000000000000000801561228957505060015471010000000000000000000000000000000000900464ffffffffff1642101590565b606060006131ab83614ea5565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f01565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561492b57600080fd5b505af115801561493f573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527fdf498aa1c340e992665d6fb4f3be8436d452c45a630cb6d7fab7963da39bac8793500190505b60405180910390a15050565b6040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600091829160019183917f00000000000000000000000000000000000000000000000000000000000000001690638991b2f190602401602060405180830381865afa158015614a2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a5391906156bf565b90505b808211614c895780821615614c7d576040517fe75538c700000000000000000000000000000000000000000000000000000000815260048101839052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e75538c7906024016040805180830381865afa158015614af4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b18919061577f565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529294509092506000918416906370a0823190602401602060405180830381865afa158015614b8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bb191906156bf565b90506001811115614c79576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff8481166024830152600091908b169063f9a6503090604401602060405180830381865afa158015614c33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c5791906156bf565b978801979050614c6b61ffff841682615707565b614c759088615976565b9650505b5050505b600182901b9150614a56565b50509250929050565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f50565b3373ffffffffffffffffffffffffffffffffffffffff821614801590614d0b575033600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16155b156139b3576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b158015614dd357600080fd5b505af1158015614de7573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527f69db9e9764da61b6681b89fb0f5be018506e0342036e56b59c3015a620d60977935001905061498d565b60606131ab83836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250615043565b6000826000018281548110614e9257614e92615806565b9060005260206000200154905092915050565b606081600001805480602002602001604051908101604052809291908181526020018280548015614ef557602002820191906000526020600020905b815481526020019060010190808311614ee1575b50505050509050919050565b6000818152600183016020526040812054614f4857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611c5a565b506000611c5a565b60008181526001830160205260408120548015615039576000614f746001836157ae565b8554909150600090614f88906001906157ae565b9050818114614fed576000866000018281548110614fa857614fa8615806565b9060005260206000200154905080876000018481548110614fcb57614fcb615806565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080614ffe57614ffe61598e565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611c5a565b6000915050611c5a565b6060612c65848460008585843b6150b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108e7565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516150df91906159ed565b60006040518083038185875af1925050503d806000811461511c576040519150601f19603f3d011682016040523d82523d6000602084013e615121565b606091505b509150915061513182828661513c565b979650505050505050565b6060831561514b5750816131ab565b82511561515b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e791906159ff565b73ffffffffffffffffffffffffffffffffffffffff811681146139b357600080fd5b80151581146139b357600080fd5b600080604083850312156151d257600080fd5b82356151dd8161518f565b915060208301356151ed816151b1565b809150509250929050565b60006020828403121561520a57600080fd5b81356131ab8161518f565b60006020828403121561522757600080fd5b5035919050565b60008060006060848603121561524357600080fd5b833561524e8161518f565b9250602084013561525e8161518f565b929592945050506040919091013590565b60008083601f84011261528157600080fd5b50813567ffffffffffffffff81111561529957600080fd5b6020830191508360208260051b85010111156152b457600080fd5b9250929050565b60008060008060008060a087890312156152d457600080fd5b86356152df8161518f565b955060208701356152ef8161518f565b9450604087013593506060870135615306816151b1565b9250608087013567ffffffffffffffff81111561532257600080fd5b61532e89828a0161526f565b979a9699509497509295939492505050565b60008060008060006080868803121561535857600080fd5b85356153638161518f565b945060208601359350604086013561537a816151b1565b9250606086013567ffffffffffffffff81111561539657600080fd5b6153a28882890161526f565b969995985093965092949392505050565b80356fffffffffffffffffffffffffffffffff811681146153d357600080fd5b919050565b600080604083850312156153eb57600080fd5b6153f4836153b3565b9150615402602084016153b3565b90509250929050565b61ffff811681146139b357600080fd5b6000806000806080858703121561543157600080fd5b8435935060208501356154438161518f565b925060408501356154538161540b565b915060608501356154638161540b565b939692955090935050565b60008060008060006080868803121561548657600080fd5b8535945060208601356154988161518f565b9350604086013567ffffffffffffffff8111156154b457600080fd5b6154c08882890161526f565b90945092505060608601356154d48161540b565b809150509295509295909350565b6020808252825182820181905260009190848201906040850190845b8181101561553057835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016154fe565b50909695505050505050565b60006020828403121561554e57600080fd5b6131ab826153b3565b6000806020838503121561556a57600080fd5b823567ffffffffffffffff81111561558157600080fd5b61558d8582860161526f565b90969095509350505050565b600080604083850312156155ac57600080fd5b82356155b78161518f565b915060208301356151ed8161518f565b6000602082840312156155d957600080fd5b813564ffffffffff811681146131ab57600080fd5b60006020828403121561560057600080fd5b81356131ab816151b1565b60006020828403121561561d57600080fd5b81516131ab8161518f565b6003811061565f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b73ffffffffffffffffffffffffffffffffffffffff888116825260e082019061568f602084018a615628565b6040830197909752948616606082015292909416608083015260a082015291151560c09092019190915292915050565b6000602082840312156156d157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561573f5761573f6156d8565b500290565b60008261577a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000806040838503121561579257600080fd5b825161579d8161518f565b60208401519092506151ed8161540b565b6000828210156157c0576157c06156d8565b500390565b600080604083850312156157d857600080fd5b505080516020909101519092909150565b6000602082840312156157fb57600080fd5b81516131ab816151b1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc183360301811261586957600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126158a857600080fd5b83018035915067ffffffffffffffff8211156158c357600080fd5b6020019150368190038213156152b457600080fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156159185780818660040360031b1b83161692505b505092915050565b6000808585111561593057600080fd5b8386111561593d57600080fd5b5050820193919092039150565b6000806040838503121561595d57600080fd5b82356159688161518f565b946020939093013593505050565b60008219821115615989576159896156d8565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60005b838110156159d85781810151838201526020016159c0565b838111156159e7576000848401525b50505050565b600082516158698184602087016159bd565b6020815260008251806020840152615a1e8160408501602087016159bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea2646970667358221220a3f4a705ab580a6ada1e438cd2ee4abc001b62d1d171fce12c41994900fef21664736f6c634300080a003360a06040523480156200001157600080fd5b5060405162005f3d38038062005f3d8339810160408190526200003491620012eb565b826001600160a01b031663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000073573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200009991906200147f565b6001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000d7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000fd91906200147f565b6000805460ff191690556001600160a01b0381166200012f57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200016e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200019491906200147f565b6001600160a01b03908116608052600180546001600160a01b031916918616918217905560408051636f307dc360e01b81529051919250636f307dc39160048083019260209291908290030181865afa158015620001f6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200021c91906200147f565b600260006101000a8154816001600160a01b0302191690836001600160a01b03160217905550826001600160a01b031663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000281573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a791906200147f565b6001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200030b91906200147f565b600080546001600160a01b039290921661010002610100600160a81b0319909216919091179055620003626103e860c86200034b6101f4612710620014bc565b60646200035c60c8612710620014bc565b620005e8565b60408101515160005b81811015620003ee576000836040015182815181106200038f576200038f620014e2565b6020026020010151600001519050620003ae81620007c260201b60201c565b620003e48185604001518481518110620003cc57620003cc620014e2565b60200260200101516020015162000a5e60201b60201c565b506001016200036b565b5060015460408051632630c12f60e01b815290516001600160a01b03909216916311ca4fc29186918491632630c12f9160048083019260209291908290030181865afa15801562000443573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200046991906200147f565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401600060405180830381600087803b158015620004b257600080fd5b505af1158015620004c7573d6000803e3d6000fd5b50506040516001600160a01b03861692507fa8b21f72cb83bce808df32dc2330217d744a1c22f3e9e44e4b11bbf049d37d9d9150600090a2600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000553573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200057991906200147f565b6001600160a01b03167f3f82447be465b0b5a4a9e54c74d5f6ae73f2e9537f2cc1590a340524703d096160405160405180910390a26020820151620005cb90620005c5906002620014f8565b62000bda565b81516020830151620005de919062000dc8565b5050505062001604565b6000620005f68585620014bc565b60015460405163172c48c760e01b81526000600482018190529293506001600160a01b039091169063172c48c7906024016040805180830381865afa15801562000644573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200066a91906200152a565b9150508061ffff168261ffff1614620006be57620006888262000f47565b60025460405161ffff841681526001600160a01b039091169060008051602062005f1d8339815191529060200160405180910390a25b60015460405163944ac59f60e01b815261ffff808a166004830152808916602483015280881660448301528087166064830152851660848201526001600160a01b039091169063944ac59f9060a401600060405180830381600087803b1580156200072857600080fd5b505af11580156200073d573d6000803e3d6000fd5b505050507f2214a403d5f8d049e52eacca974c6dea01a471e41d6a18903bfaf7dbc709741f878787612710620007749190620014bc565b876200078388612710620014bc565b6040805161ffff96871681529486166020860152928516848401529084166060840152909216608082015290519081900360a00190a150505050505050565b6001600160a01b038116620007ea57604051635919af9760e11b815260040160405180910390fd5b62000809816001600160a01b03166200116f60201b620023381760201c565b620008365760405163df4c572d60e01b81526001600160a01b038216600482015260240160405180910390fd5b6040516370a0823160e01b81523060048201526001600160a01b038216906370a0823190602401602060405180830381865afa92505050801562000899575060408051601f3d908101601f19168201909252620008969181019062001564565b60015b620008b75760405163528ca31d60e01b815260040160405180910390fd5b50600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200090c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200093291906200147f565b604051630f9a650360e41b8152670de0b6b3a764000060048201526001600160a01b038381166024830152919091169063f9a6503090604401602060405180830381865afa925050508015620009a7575060408051601f3d908101601f19168201909252620009a49181019062001564565b60015b620009c5576040516367a7cd4360e01b815260040160405180910390fd5b5060015460405163d48bfca760e01b81526001600160a01b0383811660048301529091169063d48bfca790602401600060405180830381600087803b15801562000a0e57600080fd5b505af115801562000a23573d6000803e3d6000fd5b50506040516001600160a01b03841692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a250565b6002546001600160a01b038381169116141562000a8e57604051633b899cf960e01b815260040160405180910390fd5b60015460405163172c48c760e01b8152600060048201819052916001600160a01b03169063172c48c7906024016040805180830381865afa15801562000ad8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000afe91906200152a565b91505061ffff8216158062000b1a57508061ffff168261ffff16115b1562000b39576040516333c6608d60e01b815260040160405180910390fd5b600154604051635385e2a160e11b81526001600160a01b03858116600483015261ffff851660248301529091169063a70bc54290604401600060405180830381600087803b15801562000b8b57600080fd5b505af115801562000ba0573d6000803e3d6000fd5b505060405161ffff851681526001600160a01b038616925060008051602062005f1d833981519152915060200160405180910390a2505050565b600062000be662001175565b6001600160a01b031663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801562000c24573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c4a91906200157e565b50509050600062000c606200117560201b60201c565b6001600160a01b031663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa15801562000c9d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000cc39190620015d5565b915050806001600160801b0316836001600160801b0316101562000cfa576040516309aadd6f60e41b815260040160405180910390fd5b826001600160801b0316826001600160801b03161462000dc35762000d1e62001175565b604051632715681560e21b81526001600160801b03851660048201526001600160a01b039190911690639c55a05490602401600060405180830381600087803b15801562000d6b57600080fd5b505af115801562000d80573d6000803e3d6000fd5b50506040516001600160801b03861681527fa030eec20ae970821387224ec3bb15b4bd22b89bfb86dc4d2b3827aa3d99e48d925060200190505b60405180910390a15b505050565b600062000dd462001175565b6001600160a01b031663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801562000e12573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e3891906200157e565b50509050816001600160801b0316836001600160801b0316118062000e6e5750806001600160801b0316826001600160801b0316115b1562000e8d576040516309aadd6f60e41b815260040160405180910390fd5b62000e9762001175565b60405163300eb37b60e11b81526001600160801b038086166004830152841660248201526001600160a01b03919091169063601d66f690604401600060405180830381600087803b15801562000eec57600080fd5b505af115801562000f01573d6000803e3d6000fd5b5050604080516001600160801b038088168252861660208201527f4d4981437d0211f9e6843eb024d9ada1fa3a99514d4343d4aece106dd11524bb935001905062000dba565b600154600254604051635385e2a160e11b81526001600160a01b03918216600482015261ffff8416602482015291169063a70bc54290604401600060405180830381600087803b15801562000f9b57600080fd5b505af115801562000fb0573d6000803e3d6000fd5b505050506000600160009054906101000a90046001600160a01b03166001600160a01b031663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200100a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001030919062001564565b905060015b8181101562000dc35760015460405163172c48c760e01b81526004810183905260009182916001600160a01b039091169063172c48c7906024016040805180830381865afa1580156200108c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010b291906200152a565b915091508461ffff168161ffff1611156200116457600154604051635385e2a160e11b81526001600160a01b03848116600483015261ffff881660248301529091169063a70bc54290604401600060405180830381600087803b1580156200111957600080fd5b505af11580156200112e573d6000803e3d6000fd5b505060405161ffff881681526001600160a01b038516925060008051602062005f1d833981519152915060200160405180910390a25b505060010162001035565b3b151590565b60015460408051632f7a188160e01b815290516000926001600160a01b031691632f7a18819160048083019260209291908290030181865afa158015620011c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011e691906200147f565b905090565b6001600160a01b03811681146200120157600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b03811182821017156200123f576200123f62001204565b60405290565b604080519081016001600160401b03811182821017156200123f576200123f62001204565b604051601f8201601f191681016001600160401b038111828210171562001295576200129562001204565b604052919050565b80516001600160801b0381168114620012b557600080fd5b919050565b8051620012b581620011eb565b805161ffff81168114620012b557600080fd5b80518015158114620012b557600080fd5b6000806000606084860312156200130157600080fd5b83516200130e81620011eb565b809350506020808501516200132381620011eb565b604086810151919450906001600160401b03808211156200134357600080fd5b9087019060a0828a0312156200135857600080fd5b620013626200121a565b6200136d836200129d565b81526200137c8584016200129d565b8582015283830151828111156200139257600080fd5b8301601f81018b13620013a457600080fd5b805183811115620013b957620013b962001204565b620013c9878260051b016200126a565b818152878101945060069190911b82018701908c821115620013ea57600080fd5b918701915b81831015620014435786838e031215620014095760008081fd5b6200141362001245565b83516200142081620011eb565b81526200142f848a01620012c7565b818a015285529387019391860191620013ef565b838701525062001458905060608401620012ba565b60608201526200146b60808401620012da565b608082015280955050505050509250925092565b6000602082840312156200149257600080fd5b81516200149f81620011eb565b9392505050565b634e487b7160e01b600052601160045260246000fd5b600061ffff83811690831681811015620014da57620014da620014a6565b039392505050565b634e487b7160e01b600052603260045260246000fd5b60006001600160801b0382811684821681151582840482111615620015215762001521620014a6565b02949350505050565b600080604083850312156200153e57600080fd5b82516200154b81620011eb565b91506200155b60208401620012c7565b90509250929050565b6000602082840312156200157757600080fd5b5051919050565b6000806000606084860312156200159457600080fd5b6200159f846200129d565b9250620015af60208501620012da565b9150604084015164ffffffffff81168114620015ca57600080fd5b809150509250925092565b60008060408385031215620015e957600080fd5b620015f4836200129d565b91506200155b602084016200129d565b608051614878620016a56000396000818161033601528181610446015281816107c5015281816108c0015281816109ae01528181610b8301528181610f0a015281816113e1015281816114cf015281816115bb015281816116ab015281816117990152818161187d01528181611ad901528181611bc601528181611cb301528181611da0015281816120090152818161218c015261227901526148786000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80638456cb59116100f9578063dc2b21c111610097578063f0527ac611610071578063f0527ac6146103d7578063f206d32a146103df578063fb1bd8c4146103f2578063ffd9b9071461040557600080fd5b8063dc2b21c11461039e578063e6492d7b146103b1578063eb9606df146103c457600080fd5b8063a50cf2c8116100d3578063a50cf2c814610331578063a70bc54214610358578063b53472ef1461036b578063c12c21c01461037e57600080fd5b80638456cb59146103035780639c55a0541461030b5780639f1c50691461031e57600080fd5b806350e036ff1161016657806354fd4d501161014057806354fd4d50146102b25780635c975abb146102ba5780636f307dc3146102d05780637bccacee146102f057600080fd5b806350e036ff1461027657806352438e541461028c578063526a41e81461029f57600080fd5b80633e7c88d6116101a25780633e7c88d6146102355780633f4ba83a14610248578063456e0742146102505780635094cb4f1461026357600080fd5b806324147708146101c95780632954018c146101de5780632f7a18811461022d575b600080fd5b6101dc6101d7366004614307565b610418565b005b60005461020390610100900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6102036106fe565b6101dc610243366004614334565b610797565b6101dc610892565b6101dc61025e366004614307565b610980565b61020361027136600461436d565b610b36565b61027e610b49565b604051908152602001610224565b6101dc61029a366004614307565b610b55565b6101dc6102ad366004614394565b610edc565b61027e600281565b60005460ff166040519015158152602001610224565b6002546102039073ffffffffffffffffffffffffffffffffffffffff1681565b6101dc6102fe3660046143c2565b6113b3565b6101dc6114a1565b6101dc61031936600461440e565b61158d565b6101dc61032c36600461442b565b61167d565b6102037f000000000000000000000000000000000000000000000000000000000000000081565b6101dc610366366004614334565b61176b565b6101dc610379366004614307565b61184f565b6001546102039073ffffffffffffffffffffffffffffffffffffffff1681565b6101dc6103ac366004614459565b611aab565b6101dc6103bf366004614307565b611b98565b6101dc6103d236600461448f565b611c85565b6101dc611d72565b6101dc6103ed3660046144ac565b611fdb565b6101dc610400366004614307565b61215e565b6101dc61041336600461451d565b61224b565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156104a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c6919061453a565b6104fc576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006105078261233e565b90506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015610578573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059c9190614557565b90508181166106f9576001546040517fa366f496000000000000000000000000000000000000000000000000000000008152918317600483018190529173ffffffffffffffffffffffffffffffffffffffff9091169063a366f49690602401600060405180830381600087803b15801561061557600080fd5b505af1158015610629573d6000803e3d6000fd5b505050506106356106fe565b6040517fffd9b9070000000000000000000000000000000000000000000000000000000081526001600482015273ffffffffffffffffffffffffffffffffffffffff919091169063ffd9b90790602401600060405180830381600087803b15801561069f57600080fd5b505af11580156106b3573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692507ff17b849746e74d7186170c9553d4bbf60b4f8bb1ed81fe50c099b934fb078f059150600090a25b505050565b600154604080517f2f7a1881000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691632f7a18819160048083019260209291908290030181865afa15801561076e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610792919061457b565b905090565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610821573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610845919061453a565b61087b576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108848261241e565b61088e82826127f8565b5050565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa15801561091c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610940919061453a565b610976576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61097e612a15565b565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610a0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2e919061453a565b610a64576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a6d81612af6565b6001546040517f9f5f86ae00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015290911690639f5f86ae90602401600060405180830381600087803b158015610ada57600080fd5b505af1158015610aee573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507f5a0b7d0f9c24b39256e112a0584b4c5ce38d8f1dee2e7c56f15b852604cdc8869150600090a250565b6000610b43600383612cb8565b92915050565b60006107926003612ccb565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610bdf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c03919061453a565b610c39576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610c86576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063fdd5764590602401602060405180830381865afa158015610cf7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1b919061457b565b905073ffffffffffffffffffffffffffffffffffffffff8116610d6a576040517f1170cc2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f6e98e5e400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526000602483015290911690636e98e5e490604401600060405180830381600087803b158015610dde57600080fd5b505af1158015610df2573d6000803e3d6000fd5b50506001546040517f6e98e5e40000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff86811660248301529091169250636e98e5e49150604401600060405180830381600087803b158015610e6a57600080fd5b505af1158015610e7e573d6000803e3d6000fd5b50505050610e96826003612cd590919063ffffffff16565b5060405173ffffffffffffffffffffffffffffffffffffffff8316907fab9f405bf0c19b97f65a7031634db41569cd2f0e0376a610a1e977f9ab22b58f90600090a25050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610f66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8a919061453a565b610fc0576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fc982612af6565b6000806000610fd66106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015611020573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110449190614598565b9250925092506000806110556106fe565b73ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa15801561109e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c291906145e5565b9150915060006110d06106fe565b73ffffffffffffffffffffffffffffffffffffffff16639be0536a6040518163ffffffff1660e01b8152600401600060405180830381865afa15801561111a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526111609190810190614643565b9050600061116c6106fe565b73ffffffffffffffffffffffffffffffffffffffff1663b1836d326040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111da919061453a565b600154604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905192935073ffffffffffffffffffffffffffffffffffffffff909116916311ca4fc2918c918491632630c12f9160048083019260209291908290030181865afa158015611256573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061127a919061457b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156112e757600080fd5b505af11580156112fb573d6000803e3d6000fd5b5050505087156113675761130e87612cf7565b6113188484612f5d565b61132186613152565b60005b82518110156113575761134f83828151811061134257611342614726565b60200260200101516132a3565b600101611324565b50801561136757611367856133c9565b60405173ffffffffffffffffffffffffffffffffffffffff8a16907fa8b21f72cb83bce808df32dc2330217d744a1c22f3e9e44e4b11bbf049d37d9d90600090a2505050505050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561143d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611461919061453a565b611497576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61088e828261357b565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561152b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061154f919061453a565b611585576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61097e6139c3565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611617573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163b919061453a565b611671576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81612cf7565b50565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611707573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172b919061453a565b611761576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61088e8282612f5d565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156117f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611819919061453a565b610884576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156118d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fd919061453a565b611933576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061193e8261233e565b90506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d39190614557565b9050818116156106f9576001546040517fa366f496000000000000000000000000000000000000000000000000000000008152918318600483018190529173ffffffffffffffffffffffffffffffffffffffff9091169063a366f49690602401600060405180830381600087803b158015611a4d57600080fd5b505af1158015611a61573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a2505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611b35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b59919061453a565b611b8f576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81613a83565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611c22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c46919061453a565b611c7c576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81613b3d565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611d0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d33919061453a565b611d69576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a816133c9565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611dfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e20919061453a565b611e56576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ec4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee8919061457b565b60015490915073ffffffffffffffffffffffffffffffffffffffff166311ca4fc2611f116106fe565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff91821660048201529084166024820152604401600060405180830381600087803b158015611f7f57600080fd5b505af1158015611f93573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507f3f82447be465b0b5a4a9e54c74d5f6ae73f2e9537f2cc1590a340524703d09619150600090a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015612065573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612089919061453a565b6120bf576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61271061ffff86161015806120e357506127106120dc8585614784565b61ffff1610155b806120fd57506127106120f68383614784565b61ffff1610155b15612134576040517f0b361d6900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6121578585612145866127106147aa565b85612152866127106147aa565b613c5c565b5050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156121e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061220c919061453a565b612242576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a816132a3565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156122d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122f9919061453a565b61232f576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81613152565b3b151590565b6001546040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063f67c5bd090602401602060405180830381865afa1580156123af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123d39190614557565b90508015806123e25750806001145b15612419576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b73ffffffffffffffffffffffffffffffffffffffff811661246b576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163b6124d6576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024015b60405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8216906370a0823190602401602060405180830381865afa92505050801561257a575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261257791810190614557565b60015b6125b0576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561261e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612642919061457b565b6040517ff9a65030000000000000000000000000000000000000000000000000000000008152670de0b6b3a7640000600482015273ffffffffffffffffffffffffffffffffffffffff8381166024830152919091169063f9a6503090604401602060405180830381865afa9250505080156126f8575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526126f591810190614557565b60015b61272e576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506001546040517fd48bfca700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301529091169063d48bfca790602401600060405180830381600087803b15801561279c57600080fd5b505af11580156127b0573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a250565b60025473ffffffffffffffffffffffffffffffffffffffff8381169116141561284d576040517f3b899cf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f172c48c70000000000000000000000000000000000000000000000000000000081526000600482018190529173ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa1580156128bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128e091906147cd565b91505061ffff821615806128fb57508061ffff168261ffff16115b15612932576040517f33c6608d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015261ffff851660248301529091169063a70bc54290604401600060405180830381600087803b1580156129a957600080fd5b505af11580156129bd573d6000803e3d6000fd5b505060405161ffff8516815273ffffffffffffffffffffffffffffffffffffffff861692507f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650915060200160405180910390a2505050565b60005460ff16612a81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016124cd565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b73ffffffffffffffffffffffffffffffffffffffff8116612b43576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163b612ba9576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024016124cd565b8073ffffffffffffffffffffffffffffffffffffffff1663c12c21c06040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612c2e575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252612c2b9181019061457b565b60015b612c64576040517fe9eddd1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60015473ffffffffffffffffffffffffffffffffffffffff82811691161461088e576040517fe9eddd1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612cc48383613e92565b9392505050565b6000610b43825490565b6000612cc48373ffffffffffffffffffffffffffffffffffffffff8416613ebc565b6000612d016106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015612d4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d6f9190614598565b505090506000612d7d6106fe565b73ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa158015612dc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dea91906145e5565b915050806fffffffffffffffffffffffffffffffff16836fffffffffffffffffffffffffffffffff161015612e4b576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826fffffffffffffffffffffffffffffffff16826fffffffffffffffffffffffffffffffff16146106f957612e7e6106fe565b6040517f9c55a0540000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff8516600482015273ffffffffffffffffffffffffffffffffffffffff9190911690639c55a05490602401600060405180830381600087803b158015612ef957600080fd5b505af1158015612f0d573d6000803e3d6000fd5b50506040516fffffffffffffffffffffffffffffffff861681527fa030eec20ae970821387224ec3bb15b4bd22b89bfb86dc4d2b3827aa3d99e48d925060200190505b60405180910390a1505050565b6000612f676106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015612fb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fd59190614598565b50509050816fffffffffffffffffffffffffffffffff16836fffffffffffffffffffffffffffffffff16118061302e5750806fffffffffffffffffffffffffffffffff16826fffffffffffffffffffffffffffffffff16115b15613065576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61306d6106fe565b6040517f601d66f60000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff80861660048301528416602482015273ffffffffffffffffffffffffffffffffffffffff919091169063601d66f690604401600060405180830381600087803b1580156130f057600080fd5b505af1158015613104573d6000803e3d6000fd5b5050604080516fffffffffffffffffffffffffffffffff8088168252861660208201527f4d4981437d0211f9e6843eb024d9ada1fa3a99514d4343d4aece106dd11524bb9350019050612f50565b600061315c6106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa1580156131a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131ca9190614598565b509150508015158215151461088e576131e16106fe565b6040517fffd9b907000000000000000000000000000000000000000000000000000000008152831515600482015273ffffffffffffffffffffffffffffffffffffffff919091169063ffd9b90790602401600060405180830381600087803b15801561324c57600080fd5b505af1158015613260573d6000803e3d6000fd5b505050507ff97ba903470ff3262b4a68a938fe81def401bac1bd742169d2e8d5c4ed2185d382604051613297911515815260200190565b60405180910390a15050565b73ffffffffffffffffffffffffffffffffffffffff81166132f0576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6132f86106fe565b6040517fb55bb84b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152919091169063b55bb84b90602401600060405180830381600087803b15801561336357600080fd5b505af1158015613377573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841681527fdac9a7995cbc0c0f01d78970fb6fd0b52fe0fe869eb6635e65cc1b5682b8325c925060200190505b60405180910390a150565b60006133d36106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801561341d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134419190614598565b925050508064ffffffffff168264ffffffffff161461088e578164ffffffffff168164ffffffffff16118061347c57508164ffffffffff1642115b156134b3576040517fe4eaca7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134bb6106fe565b6040517feb9606df00000000000000000000000000000000000000000000000000000000815264ffffffffff8416600482015273ffffffffffffffffffffffffffffffffffffffff919091169063eb9606df90602401600060405180830381600087803b15801561352b57600080fd5b505af115801561353f573d6000803e3d6000fd5b505060405164ffffffffff851681527f0b3eb35ba750e7a7e4d26c9eee3d226f4e1f68c5568f4a3d051c94b241b02ac092506020019050613297565b73ffffffffffffffffffffffffffffffffffffffff82166135c8576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82163b61362e576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016124cd565b61363781612af6565b60015473ffffffffffffffffffffffffffffffffffffffff8381169116148061369257506136636106fe565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b806136b7575060015473ffffffffffffffffffffffffffffffffffffffff8281169116145b806136f457506136c56106fe565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b1561372b576040517f727de5c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517fff68754300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063ff68754390602401602060405180830381865afa15801561379c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137c0919061457b565b73ffffffffffffffffffffffffffffffffffffffff1614158061388c57506001546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063fdd5764590602401602060405180830381865afa15801561384f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613873919061457b565b73ffffffffffffffffffffffffffffffffffffffff1614155b156138c3576040517f21ff1e7100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f6e98e5e400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152848116602483015290911690636e98e5e490604401600060405180830381600087803b15801561393857600080fd5b505af115801561394c573d6000803e3d6000fd5b50505050613964826003613faf90919063ffffffff16565b508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4bcbefaef68b99503d502f5a6abe7bca2b183ab8ac55457013c77d084ebd130560405160405180910390a35050565b60005460ff1615613a30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016124cd565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612acc3390565b6001546040517fdc2b21c100000000000000000000000000000000000000000000000000000000815260ff8316600482015273ffffffffffffffffffffffffffffffffffffffff9091169063dc2b21c190602401600060405180830381600087803b158015613af157600080fd5b505af1158015613b05573d6000803e3d6000fd5b505060405160ff841681527f73caacd705657a7d283e48ecf288b73bc517e3aea1bbc9da2fd54a979e8aa950925060200190506133be565b73ffffffffffffffffffffffffffffffffffffffff8116613b8a576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613b926106fe565b6040517fdcf6548200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152919091169063dcf6548290602401600060405180830381600087803b158015613bfd57600080fd5b505af1158015613c11573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841681527f32e53e2e527af8518ae889e5f7e674bc83f7cf68e4cc059aceeaa0e64208b85b925060200190506133be565b6000613c6885856147aa565b6001546040517f172c48c700000000000000000000000000000000000000000000000000000000815260006004820181905292935073ffffffffffffffffffffffffffffffffffffffff9091169063172c48c7906024016040805180830381865afa158015613cdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cff91906147cd565b9150508061ffff168261ffff1614613d6e57613d1a82613fd1565b60025460405161ffff8416815273ffffffffffffffffffffffffffffffffffffffff909116907f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac6509060200160405180910390a25b6001546040517f944ac59f00000000000000000000000000000000000000000000000000000000815261ffff808a1660048301528089166024830152808816604483015280871660648301528516608482015273ffffffffffffffffffffffffffffffffffffffff9091169063944ac59f9060a401600060405180830381600087803b158015613dfd57600080fd5b505af1158015613e11573d6000803e3d6000fd5b505050507f2214a403d5f8d049e52eacca974c6dea01a471e41d6a18903bfaf7dbc709741f878787612710613e4691906147aa565b87613e53886127106147aa565b6040805161ffff96871681529486166020860152928516848401529084166060840152909216608082015290519081900360a00190a150505050505050565b6000826000018281548110613ea957613ea9614726565b9060005260206000200154905092915050565b60008181526001830160205260408120548015613fa5576000613ee06001836147fc565b8554909150600090613ef4906001906147fc565b9050818114613f59576000866000018281548110613f1457613f14614726565b9060005260206000200154905080876000018481548110613f3757613f37614726565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080613f6a57613f6a614813565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610b43565b6000915050610b43565b6000612cc48373ffffffffffffffffffffffffffffffffffffffff8416614296565b6001546002546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015261ffff8416602482015291169063a70bc54290604401600060405180830381600087803b15801561404a57600080fd5b505af115801561405e573d6000803e3d6000fd5b505050506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156140d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140f59190614557565b905060015b818110156106f9576001546040517f172c48c700000000000000000000000000000000000000000000000000000000815260048101839052600091829173ffffffffffffffffffffffffffffffffffffffff9091169063172c48c7906024016040805180830381865afa158015614175573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061419991906147cd565b915091508461ffff168161ffff16111561428c576001546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015261ffff881660248301529091169063a70bc54290604401600060405180830381600087803b15801561422457600080fd5b505af1158015614238573d6000803e3d6000fd5b505060405161ffff8816815273ffffffffffffffffffffffffffffffffffffffff851692507f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650915060200160405180910390a25b50506001016140fa565b60008181526001830160205260408120546142dd57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610b43565b506000610b43565b73ffffffffffffffffffffffffffffffffffffffff8116811461167a57600080fd5b60006020828403121561431957600080fd5b8135612cc4816142e5565b61ffff8116811461167a57600080fd5b6000806040838503121561434757600080fd5b8235614352816142e5565b9150602083013561436281614324565b809150509250929050565b60006020828403121561437f57600080fd5b5035919050565b801515811461167a57600080fd5b600080604083850312156143a757600080fd5b82356143b2816142e5565b9150602083013561436281614386565b600080604083850312156143d557600080fd5b82356143e0816142e5565b91506020830135614362816142e5565b6fffffffffffffffffffffffffffffffff8116811461167a57600080fd5b60006020828403121561442057600080fd5b8135612cc4816143f0565b6000806040838503121561443e57600080fd5b8235614449816143f0565b91506020830135614362816143f0565b60006020828403121561446b57600080fd5b813560ff81168114612cc457600080fd5b64ffffffffff8116811461167a57600080fd5b6000602082840312156144a157600080fd5b8135612cc48161447c565b600080600080600060a086880312156144c457600080fd5b85356144cf81614324565b945060208601356144df81614324565b935060408601356144ef81614324565b925060608601356144ff81614324565b9150608086013561450f81614324565b809150509295509295909350565b60006020828403121561452f57600080fd5b8135612cc481614386565b60006020828403121561454c57600080fd5b8151612cc481614386565b60006020828403121561456957600080fd5b5051919050565b8051612419816142e5565b60006020828403121561458d57600080fd5b8151612cc4816142e5565b6000806000606084860312156145ad57600080fd5b83516145b8816143f0565b60208501519093506145c981614386565b60408501519092506145da8161447c565b809150509250925092565b600080604083850312156145f857600080fd5b8251614603816143f0565b6020840151909250614362816143f0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000602080838503121561465657600080fd5b825167ffffffffffffffff8082111561466e57600080fd5b818501915085601f83011261468257600080fd5b81518181111561469457614694614614565b8060051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f830116810181811085821117156146d7576146d7614614565b6040529182528482019250838101850191888311156146f557600080fd5b938501935b8285101561471a5761470b85614570565b845293850193928501926146fa565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061ffff8083168185168083038211156147a1576147a1614755565b01949350505050565b600061ffff838116908316818110156147c5576147c5614755565b039392505050565b600080604083850312156147e057600080fd5b82516147eb816142e5565b602084015190925061436281614324565b60008282101561480e5761480e614755565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea264697066735822122046c364b67d38a3dd85b57e027716324d90dd1df102f265f0a0e2697babdb3f3b64736f6c634300080a003394525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650a26469706673582212208fbd153d74dec3be764c97a04f02b47f10798665f51eb0369de766778b7884bd64736f6c634300080a0033"; - -type UniswapV3AdapterTestConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: UniswapV3AdapterTestConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class UniswapV3AdapterTest__factory extends ContractFactory { - constructor(...args: UniswapV3AdapterTestConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): UniswapV3AdapterTest { - return super.attach(address) as UniswapV3AdapterTest; - } - override connect(signer: Signer): UniswapV3AdapterTest__factory { - return super.connect(signer) as UniswapV3AdapterTest__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): UniswapV3AdapterTestInterface { - return new utils.Interface(_abi) as UniswapV3AdapterTestInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): UniswapV3AdapterTest { - return new Contract( - address, - _abi, - signerOrProvider - ) as UniswapV3AdapterTest; - } -} diff --git a/src/types/factories/contracts/test/adapters/UniswapV3Adapter.t.sol/index.ts b/src/types/factories/contracts/test/adapters/UniswapV3Adapter.t.sol/index.ts deleted file mode 100644 index abb1fe77..00000000 --- a/src/types/factories/contracts/test/adapters/UniswapV3Adapter.t.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { UniswapV3AdapterTest__factory } from "./UniswapV3AdapterTest__factory"; diff --git a/src/types/factories/contracts/test/adapters/YearnV2Adapter.t.sol/YearnV2AdapterTest__factory.ts b/src/types/factories/contracts/test/adapters/YearnV2Adapter.t.sol/YearnV2AdapterTest__factory.ts deleted file mode 100644 index 6c9c2e46..00000000 --- a/src/types/factories/contracts/test/adapters/YearnV2Adapter.t.sol/YearnV2AdapterTest__factory.ts +++ /dev/null @@ -1,918 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - YearnV2AdapterTest, - YearnV2AdapterTestInterface, -} from "../../../../../contracts/test/adapters/YearnV2Adapter.t.sol/YearnV2AdapterTest"; - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "TokenIsNotInAllowedList", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "onBehalfOf", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "token", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "AddCollateral", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - ], - name: "CloseCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "DecreaseBorrowedAmount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "target", - type: "address", - }, - ], - name: "ExecuteOrder", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "IncreaseBorrowedAmount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "liquidator", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "remainingFunds", - type: "uint256", - }, - ], - name: "LiquidateCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "liquidator", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "remainingFunds", - type: "uint256", - }, - ], - name: "LiquidateExpiredCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [], - name: "MultiCallFinished", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - ], - name: "MultiCallStarted", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newConfigurator", - type: "address", - }, - ], - name: "NewConfigurator", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "onBehalfOf", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "borrowAmount", - type: "uint256", - }, - { - indexed: false, - internalType: "uint16", - name: "referralCode", - type: "uint16", - }, - ], - name: "OpenCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "token", - type: "address", - }, - ], - name: "TokenDisabled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "token", - type: "address", - }, - ], - name: "TokenEnabled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "oldOwner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "TransferAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "bool", - name: "state", - type: "bool", - }, - ], - name: "TransferAccountAllowed", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "", - type: "address", - }, - ], - name: "log_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "log_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - name: "log_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "int256", - name: "", - type: "int256", - }, - ], - name: "log_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "address", - name: "val", - type: "address", - }, - ], - name: "log_named_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes", - name: "val", - type: "bytes", - }, - ], - name: "log_named_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes32", - name: "val", - type: "bytes32", - }, - ], - name: "log_named_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - ], - name: "log_named_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "string", - name: "val", - type: "string", - }, - ], - name: "log_named_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - ], - name: "log_named_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "log_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "logs", - type: "event", - }, - { - inputs: [], - name: "IS_TEST", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "adapter", - outputs: [ - { - internalType: "contract YearnV2Adapter", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "cft", - outputs: [ - { - internalType: "contract CreditFacadeTestSuite", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditConfigurator", - outputs: [ - { - internalType: "contract CreditConfigurator", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditFacade", - outputs: [ - { - internalType: "contract CreditFacade", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditManager", - outputs: [ - { - internalType: "contract ICreditManagerV2", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "failed", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "setUp", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_AYV2_01_constructor_sets_correct_values", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_AYV2_02_constructor_reverts_if_token_is_not_allowed", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_AYV2_03_deposit_and_withdraw_if_uses_has_no_account", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_AYV2_04_deposit_works_for_user_as_expected", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_AYV2_05_deposit_uint256_works_for_user_as_expected", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_AYV2_06_deposit_uint256_address_works_for_user_as_expected", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_AYV2_07_withdraw_works_for_user_as_expected", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_AYV2_08_withdraw_uint256_works_for_user_as_expected", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_AYV2_09_withdraw_uint256_address_works_for_user_as_expected", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_AYV2_10_withdraw_uint256_address_uint256_works_for_user_as_expected", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_AYV2_11_withdraw_correctly_passes_maxLoss", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_AYV2_12_adapter_pricePerShare_consistent", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_AYV2_13_adapter_name_consistent", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_AYV2_14_adapter_symbol_consistent", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_AYV2_15_adapter_decimals_consistent", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_AYV2_16_adapter_allowance_consistent", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_AYV2_17_adapter_balanceOf_totalSupply_consistent", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "token", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "underlying", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "yearnV2Mock", - outputs: [ - { - internalType: "contract YearnV2Mock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "yvDAI", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x60806040526000805460ff1916600190811790915580546001600160a01b031916737109709ecfa91a80626ff3989d68f67f5b1dd12d1790553480156200004557600080fd5b5062049a0b80620000576000396000f3fe60806040523480156200001157600080fd5b5060043610620001f45760003560e01c806369bfb69f1162000119578063c12c21c011620000af578063ea5f0917116200007a578063ea5f091714620003d1578063f9aa028a14620003db578063fa7626d414620003fc578063fc0c546a146200040a57600080fd5b8063c12c21c01462000364578063d0ae2e871462000385578063dd4d78a114620003a6578063df51443314620003b057600080fd5b806384f6c10d11620000f057806384f6c10d146200032b578063a564234c1462000335578063ab1a5506146200033f578063ba414fa6146200034957600080fd5b806369bfb69f14620002df5780636f307dc314620002e95780637458bb58146200030a57600080fd5b80632f7a1881116200018f57806345daeb8d116200016657806345daeb8d14620002b757806361461b0d14620002c15780636584c46a14620002cb5780636798204e14620002d557600080fd5b80632f7a18811462000282578063303cd98d14620002a357806336850fc214620002ad57600080fd5b80630d00136111620001d05780630d001361146200025a5780631603329414620002645780631fe25d7e146200026e57806321a255da146200027857600080fd5b80622b7bca14620001f957806303eadcfc14620002055780630a9254e41462000250575b600080fd5b620002036200042b565b005b600754620002269073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b620002036200064d565b620002036200115f565b6200020362001294565b62000203620017ab565b6200020362001922565b600354620002269073ffffffffffffffffffffffffffffffffffffffff1681565b6200020362001f18565b6200020362002360565b62000203620027e1565b6200020362002c63565b620002036200308b565b6200020362003202565b6200020362003647565b600654620002269073ffffffffffffffffffffffffffffffffffffffff1681565b600a54620002269073ffffffffffffffffffffffffffffffffffffffff1681565b6200020362003770565b62000203620038a9565b6200020362004175565b620003536200461d565b604051901515815260200162000247565b600254620002269073ffffffffffffffffffffffffffffffffffffffff1681565b600854620002269073ffffffffffffffffffffffffffffffffffffffff1681565b6200020362004787565b600554620002269073ffffffffffffffffffffffffffffffffffffffff1681565b6200020362004e00565b600454620002269073ffffffffffffffffffffffffffffffffffffffff1681565b600054620003539060ff1681565b600954620002269073ffffffffffffffffffffffffffffffffffffffff1681565b6000620004376200527f565b9150600090506200044a600283620082d8565b600154604080518082018252600c81527f4c6f737320746f6f206269670000000000000000000000000000000000000000602082015290517ff28dceb300000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff9091169163f28dceb391620004d5916004016200838f565b600060405180830381600087803b158015620004f057600080fd5b505af115801562000505573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b1580156200058957600080fd5b505af11580156200059e573d6000803e3d6000fd5b50506007546040517fe63697c800000000000000000000000000000000000000000000000000000000815260048101859052600060248201526002604482015273ffffffffffffffffffffffffffffffffffffffff909116925063e63697c891506064016020604051808303816000875af115801562000622573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006489190620083ab565b505050565b620006576200545d565b6000546040517f67b426450000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff16906367b4264590620006b59060019060040162008430565b602060405180830381865afa158015620006d3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006f9919062008469565b600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691821790556040516200074b9062008254565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103906000f08015801562000785573d6000803e3d6000fd5b50600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691821790556040517f43d24a5e0000000000000000000000000000000000000000000000000000000081523060048201526343d24a5e90602401600060405180830381600087803b1580156200081a57600080fd5b505af11580156200082f573d6000803e3d6000fd5b505060085473ffffffffffffffffffffffffffffffffffffffff16915063118c9a07905060646200086a670de0b6b3a7640000606e62008489565b620008769190620082d8565b6040518263ffffffff1660e01b81526004016200089591815260200190565b600060405180830381600087803b158015620008b057600080fd5b505af1158015620008c5573d6000803e3d6000fd5b5050600854600a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283161790556001546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c86004820152911692506306447d569150602401600060405180830381600087803b1580156200097757600080fd5b505af11580156200098c573d6000803e3d6000fd5b50505050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620009fe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a24919062008469565b600a54600554604080517f2954018c000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9485169463e8a97a3e948116931691632954018c9160048083019260209291908290030181865afa15801562000aa2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ac8919062008469565b600a54600554604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691632630c12f916004808201926020929091908290030181865afa15801562000b40573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b66919062008469565b6009546040517f9dcb511a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152911690639dcb511a90602401602060405180830381865afa15801562000bd6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000bfc919062008469565b60405162000c0a9062008262565b73ffffffffffffffffffffffffffffffffffffffff938416815291831660208301529091166040820152606001604051809103906000f08015801562000c54573d6000803e3d6000fd5b506040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b15801562000cc357600080fd5b505af115801562000cd8573d6000803e3d6000fd5b505060048054600a546040517f3e7c88d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182169381019390935261206c6024840152169250633e7c88d69150604401600060405180830381600087803b15801562000d5657600080fd5b505af115801562000d6b573d6000803e3d6000fd5b505060025460085460405173ffffffffffffffffffffffffffffffffffffffff92831694509116915062000d9f9062008270565b73ffffffffffffffffffffffffffffffffffffffff928316815291166020820152604001604051809103906000f08015801562000de0573d6000803e3d6000fd5b50600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316908117909155600480546008546040517f7bccacee000000000000000000000000000000000000000000000000000000008152908516928101929092526024820192909252911690637bccacee90604401600060405180830381600087803b15801562000e8b57600080fd5b505af115801562000ea0573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562000f0f57600080fd5b505af115801562000f24573d6000803e3d6000fd5b505060005462010000900473ffffffffffffffffffffffffffffffffffffffff16915063eebab8ef9050600173f39fd6e51aad88f6f4ce6ab8827279cfffb9226662000f7b670de0b6b3a7640000614e2062008489565b62000f8890600a62008489565b6040518463ffffffff1660e01b815260040162000fa893929190620084c9565b600060405180830381600087803b15801562000fc357600080fd5b505af115801562000fd8573d6000803e3d6000fd5b505060015460078054604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283166004820152602481019190915260448101929092527f41444150544552000000000000000000000000000000000000000000000000006064830152909116925063c657c7189150608401600060405180830381600087803b1580156200108557600080fd5b505af11580156200109a573d6000803e3d6000fd5b5050600154600854604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152600a60448201527f594541524e5f4d4f434b0000000000000000000000000000000000000000000060648201529116925063c657c7189150608401600060405180830381600087803b1580156200114457600080fd5b505af115801562001159573d6000803e3d6000fd5b50505050565b600754604080517f99530b060000000000000000000000000000000000000000000000000000000081529051620012929273ffffffffffffffffffffffffffffffffffffffff16916399530b069160048083019260209291908290030181865afa158015620011d2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011f89190620083ab565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166399530b066040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001266573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200128c9190620083ab565b62005469565b565b60005b6002811015620017a857801515620012ae6200064d565b600080620012bb6200557f565b6008549193509150620012eb90600190849073ffffffffffffffffffffffffffffffffffffffff16600062005966565b6000600262001305670de0b6b3a7640000614e2062008489565b620013119190620082d8565b6040516024016200132491815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fb6b55f250000000000000000000000000000000000000000000000000000000017905290508315620014c757600754600854600954620013f09273ffffffffffffffffffffffffffffffffffffffff9081169281169173f39fd6e51aad88f6f4ce6ab8827279cfffb92266918691168360018062005984565b600754620014c19073ffffffffffffffffffffffffffffffffffffffff16600262001426670de0b6b3a7640000614e2062008489565b620014329190620082d8565b6040516024016200144591815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fb6b55f250000000000000000000000000000000000000000000000000000000017905262006075565b62001658565b600754600854600954620015149273ffffffffffffffffffffffffffffffffffffffff9081169281169173f39fd6e51aad88f6f4ce6ab8827279cfffb922669186911683600180620061a7565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b1580156200159457600080fd5b505af1158015620015a9573d6000803e3d6000fd5b505060075473ffffffffffffffffffffffffffffffffffffffff16915063b6b55f2590506002620015e5670de0b6b3a7640000614e2062008489565b620015f19190620082d8565b6040518263ffffffff1660e01b81526004016200161091815260200190565b6020604051808303816000875af115801562001630573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620016569190620083ab565b505b62001695600184600262001677670de0b6b3a7640000614e2062008489565b620016839190620082d8565b6200168f908662008500565b62006695565b600a546200171a9073ffffffffffffffffffffffffffffffffffffffff16846064620016cb670de0b6b3a7640000606e62008489565b620016d79190620082d8565b670de0b6b3a76400006002620016f082614e2062008489565b620016fc9190620082d8565b62001708919062008489565b620017149190620082d8565b620066b2565b6008546200174490600190859073ffffffffffffffffffffffffffffffffffffffff168262005966565b600a546200176a9073ffffffffffffffffffffffffffffffffffffffff166001620066cf565b6008546200178e9073ffffffffffffffffffffffffffffffffffffffff16620066eb565b5050505080806200179f906200851a565b91505062001297565b50565b600754604080517ffc0c546a0000000000000000000000000000000000000000000000000000000081529051620012929273ffffffffffffffffffffffffffffffffffffffff169163fc0c546a9160048083019260209291908290030181865afa1580156200181e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001844919062008469565b6000546040517f67b426450000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff16906367b4264590620018a29060019060040162008430565b602060405180830381865afa158015620018c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620018e6919062008469565b6040518060400160405280600f81526020017f496e636f727265637420746f6b656e0000000000000000000000000000000000815250620069c9565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b158015620019a257600080fd5b505af1158015620019b7573d6000803e3d6000fd5b505060035473ffffffffffffffffffffffffffffffffffffffff169150636c8f225d9050620019f1670de0b6b3a7640000614e2062008489565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b168152600481019190915273f39fd6e51aad88f6f4ce6ab8827279cfffb922666024820152606460448201819052600090820152608401600060405180830381600087803b15801562001a6c57600080fd5b505af115801562001a81573d6000803e3d6000fd5b50506001546003546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529116925063ca669fa79150602401600060405180830381600087803b15801562001af557600080fd5b505af115801562001b0a573d6000803e3d6000fd5b50506002546008546040517f46fb371d00000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273c4375b7de8af5a38a93548eb8453a498222c4ff2602482015273ffffffffffffffffffffffffffffffffffffffff91821660448201526107d06064820152911692506346fb371d9150608401600060405180830381600087803b15801562001bba57600080fd5b505af115801562001bcf573d6000803e3d6000fd5b50506002546040517fe958b70400000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660048201526000935073ffffffffffffffffffffffffffffffffffffffff909116915063e958b70490602401602060405180830381865afa15801562001c59573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c7f919062008469565b6007546040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015273c4375b7de8af5a38a93548eb8453a498222c4ff2602483015292935062001d77929091169063dd62ed3e90604401602060405180830381865afa15801562001d12573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001d389190620083ab565b6107d06040518060400160405280601b81526020017f446966666572656e74206164617074657220616c6c6f77616e6365000000000081525062006a42565b6007546040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015273c4375b7de8af5a38a93548eb8453a498222c4ff26024830152620017a892169063dd62ed3e90604401602060405180830381865afa15801562001e05573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001e2b9190620083ab565b6008546040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015273c4375b7de8af5a38a93548eb8453a498222c4ff260248301529091169063dd62ed3e90604401602060405180830381865afa15801562001eb6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001edc9190620083ab565b6040518060400160405280601681526020017f496e636f6e73697374656e7420616c6c6f77616e63650000000000000000000081525062006a42565b60005b6002811015620017a85780151562001f326200064d565b60008062001f3f6200557f565b600854919350915062001f6f90600190849073ffffffffffffffffffffffffffffffffffffffff16600062005966565b600062001f7e60018362008500565b60405160240162001f9191815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fb6b55f250000000000000000000000000000000000000000000000000000000017905290508315620020df576007546008546009546200205d9273ffffffffffffffffffffffffffffffffffffffff9081169281169173f39fd6e51aad88f6f4ce6ab8827279cfffb92266918691168360018062005984565b6007546040805160048152602481019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd0e30db000000000000000000000000000000000000000000000000000000000179052620020d99173ffffffffffffffffffffffffffffffffffffffff169062006075565b6200225d565b6007546008546009546200212c9273ffffffffffffffffffffffffffffffffffffffff9081169281169173f39fd6e51aad88f6f4ce6ab8827279cfffb922669186911683600180620061a7565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b158015620021ac57600080fd5b505af1158015620021c1573d6000803e3d6000fd5b50505050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db06040518163ffffffff1660e01b81526004016020604051808303816000875af115801562002235573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200225b9190620083ab565b505b6200226c600184600162006695565b600a54620022c49073ffffffffffffffffffffffffffffffffffffffff16846064620022a2670de0b6b3a7640000606e62008489565b620022ae9190620082d8565b670de0b6b3a7640000620016fc60018862008500565b600854620022ee90600190859073ffffffffffffffffffffffffffffffffffffffff168262005966565b620022fc6001600062006a8f565b600a54620023229073ffffffffffffffffffffffffffffffffffffffff166001620066cf565b600854620023469073ffffffffffffffffffffffffffffffffffffffff16620066eb565b50505050808062002357906200851a565b91505062001f1b565b60005b6002811015620017a8578015156200237a6200064d565b600080620023876200527f565b600a54600854929450909250620023bc9173ffffffffffffffffffffffffffffffffffffffff91821691859116600062006aab565b6000620023cb600283620082d8565b9050600081604051602401620023e391815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f2e1a7d4d00000000000000000000000000000000000000000000000000000000179052905084156200256457600754600854600954620024b09273ffffffffffffffffffffffffffffffffffffffff9081169281169173f39fd6e51aad88f6f4ce6ab8827279cfffb9226691869116836001600062005984565b60075460405160248101849052600060448201526200255e9173ffffffffffffffffffffffffffffffffffffffff1690606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ef714ce0000000000000000000000000000000000000000000000000000000017905262006075565b620026eb565b600754600854600954620025b39273ffffffffffffffffffffffffffffffffffffffff9081169281169173f39fd6e51aad88f6f4ce6ab8827279cfffb9226691869184911660016000620061a7565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b1580156200263357600080fd5b505af115801562002648573d6000803e3d6000fd5b50506007546040517ef714ce000000000000000000000000000000000000000000000000000000008152600481018690526000602482015273ffffffffffffffffffffffffffffffffffffffff909116925062f714ce91506044016020604051808303816000875af1158015620026c3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620026e99190620083ab565b505b6200273b600185670de0b6b3a764000060646200270a82606e62008489565b620027169190620082d8565b62002722908762008489565b6200272e9190620082d8565b6200168f90600162008556565b600a54620027669073ffffffffffffffffffffffffffffffffffffffff168562001714858762008500565b600a54600854620027959173ffffffffffffffffffffffffffffffffffffffff90811691879116600062006aab565b620027a260018062006a8f565b600854620027c69073ffffffffffffffffffffffffffffffffffffffff16620066eb565b50505050508080620027d8906200851a565b91505062002363565b60005b6002811015620017a857801515620027fb6200064d565b600080620028086200557f565b60085491935091506200283890600190849073ffffffffffffffffffffffffffffffffffffffff16600062005966565b6000600262002852670de0b6b3a7640000614e2062008489565b6200285e9190620082d8565b6040516024016200287191815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fb6b55f250000000000000000000000000000000000000000000000000000000017905290508315620029d057600060026200290a670de0b6b3a7640000614e2062008489565b620029169190620082d8565b604051602481019190915260006044820152606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6e553f6500000000000000000000000000000000000000000000000000000000179052600754909150620029c99073ffffffffffffffffffffffffffffffffffffffff168262006075565b5062002b80565b60075460085460095462002a1d9273ffffffffffffffffffffffffffffffffffffffff9081169281169173f39fd6e51aad88f6f4ce6ab8827279cfffb922669186911683600180620061a7565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b15801562002a9d57600080fd5b505af115801562002ab2573d6000803e3d6000fd5b505060075473ffffffffffffffffffffffffffffffffffffffff169150636e553f659050600262002aee670de0b6b3a7640000614e2062008489565b62002afa9190620082d8565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526004810191909152600060248201526044016020604051808303816000875af115801562002b58573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002b7e9190620083ab565b505b62002b9f600184600262001677670de0b6b3a7640000614e2062008489565b600a5462002bd59073ffffffffffffffffffffffffffffffffffffffff16846064620016cb670de0b6b3a7640000606e62008489565b60085462002bff90600190859073ffffffffffffffffffffffffffffffffffffffff168262005966565b600a5462002c259073ffffffffffffffffffffffffffffffffffffffff166001620066cf565b60085462002c499073ffffffffffffffffffffffffffffffffffffffff16620066eb565b50505050808062002c5a906200851a565b915050620027e4565b60005b6002811015620017a85780151562002c7d6200064d565b60008062002c8a6200527f565b9092509050600062002c9e60018362008500565b60405160240162002cb191815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f2e1a7d4d000000000000000000000000000000000000000000000000000000001790529050831562002e005760075460085460095462002d7e9273ffffffffffffffffffffffffffffffffffffffff9081169281169173f39fd6e51aad88f6f4ce6ab8827279cfffb9226691869116836001600062005984565b6007546040805160048152602481019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f3ccfd60b0000000000000000000000000000000000000000000000000000000017905262002dfa9173ffffffffffffffffffffffffffffffffffffffff169062006075565b62002f80565b60075460085460095462002e4f9273ffffffffffffffffffffffffffffffffffffffff9081169281169173f39fd6e51aad88f6f4ce6ab8827279cfffb9226691869184911660016000620061a7565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b15801562002ecf57600080fd5b505af115801562002ee4573d6000803e3d6000fd5b50505050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633ccfd60b6040518163ffffffff1660e01b81526004016020604051808303816000875af115801562002f58573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002f7e9190620083ab565b505b62002fc4600184670de0b6b3a7640000606462002f9f82606e62008489565b62002fab9190620082d8565b62002fb860018862008500565b62002722919062008489565b600a5462002feb9073ffffffffffffffffffffffffffffffffffffffff16846001620066b2565b600a546008546200301a9173ffffffffffffffffffffffffffffffffffffffff90811691869116600062006aab565b600a54620030409073ffffffffffffffffffffffffffffffffffffffff166000620066cf565b6200304d60018062006a8f565b600854620030719073ffffffffffffffffffffffffffffffffffffffff16620066eb565b50505050808062003082906200851a565b91505062002c66565b600754604080517f95d89b410000000000000000000000000000000000000000000000000000000081529051620012929273ffffffffffffffffffffffffffffffffffffffff16916395d89b419160048083019260009291908290030181865afa158015620030fe573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620031469190810190620085a0565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015620031b4573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620031fc9190810190620085a0565b62006ac9565b60005b6002811015620017a8578015156200321c6200064d565b600080620032296200527f565b600a546008549294509092506200325e9173ffffffffffffffffffffffffffffffffffffffff91821691859116600062006aab565b60006200326d600283620082d8565b90506000816040516024016200328591815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f2e1a7d4d00000000000000000000000000000000000000000000000000000000179052905084156200340057600754600854600954620033529273ffffffffffffffffffffffffffffffffffffffff9081169281169173f39fd6e51aad88f6f4ce6ab8827279cfffb9226691869116836001600062005984565b60075460405160248101849052620033fa9173ffffffffffffffffffffffffffffffffffffffff1690604401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f2e1a7d4d0000000000000000000000000000000000000000000000000000000017905262006075565b62003582565b6007546008546009546200344f9273ffffffffffffffffffffffffffffffffffffffff9081169281169173f39fd6e51aad88f6f4ce6ab8827279cfffb9226691869184911660016000620061a7565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b158015620034cf57600080fd5b505af1158015620034e4573d6000803e3d6000fd5b50506007546040517f2e1a7d4d0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff9091169250632e1a7d4d91506024016020604051808303816000875af11580156200355a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620035809190620083ab565b505b620035a1600185670de0b6b3a764000060646200270a82606e62008489565b600a54620035cc9073ffffffffffffffffffffffffffffffffffffffff168562001714858762008500565b600a54600854620035fb9173ffffffffffffffffffffffffffffffffffffffff90811691879116600062006aab565b6200360860018062006a8f565b6008546200362c9073ffffffffffffffffffffffffffffffffffffffff16620066eb565b505050505080806200363e906200851a565b91505062003205565b600754604080517f06fdde030000000000000000000000000000000000000000000000000000000081529051620012929273ffffffffffffffffffffffffffffffffffffffff16916306fdde039160048083019260009291908290030181865afa158015620036ba573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620037029190810190620085a0565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620031b4573d6000803e3d6000fd5b600754604080517f313ce5670000000000000000000000000000000000000000000000000000000081529051620012929273ffffffffffffffffffffffffffffffffffffffff169163313ce5679160048083019260209291908290030181865afa158015620037e3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003809919062008677565b60ff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200387a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620038a0919062008677565b60ff1662005469565b6001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb5ba4c4d00000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063c31eb0e090602401600060405180830381600087803b1580156200393557600080fd5b505af11580156200394a573d6000803e3d6000fd5b50505050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db06040518163ffffffff1660e01b81526004016020604051808303816000875af1158015620039be573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620039e49190620083ab565b506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb5ba4c4d00000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063c31eb0e090602401600060405180830381600087803b15801562003a7157600080fd5b505af115801562003a86573d6000803e3d6000fd5b50506007546040517fb6b55f250000000000000000000000000000000000000000000000000000000081526103e8600482015273ffffffffffffffffffffffffffffffffffffffff909116925063b6b55f2591506024016020604051808303816000875af115801562003afd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003b239190620083ab565b506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb5ba4c4d00000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063c31eb0e090602401600060405180830381600087803b15801562003bb057600080fd5b505af115801562003bc5573d6000803e3d6000fd5b50506007546040517f6e553f650000000000000000000000000000000000000000000000000000000081526103e860048201526000602482015273ffffffffffffffffffffffffffffffffffffffff9091169250636e553f6591506044016020604051808303816000875af115801562003c43573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003c699190620083ab565b506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb5ba4c4d00000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063c31eb0e090602401600060405180830381600087803b15801562003cf657600080fd5b505af115801562003d0b573d6000803e3d6000fd5b50505050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633ccfd60b6040518163ffffffff1660e01b81526004016020604051808303816000875af115801562003d7f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003da59190620083ab565b506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb5ba4c4d00000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063c31eb0e090602401600060405180830381600087803b15801562003e3257600080fd5b505af115801562003e47573d6000803e3d6000fd5b50506007546040517f2e1a7d4d0000000000000000000000000000000000000000000000000000000081526103e8600482015273ffffffffffffffffffffffffffffffffffffffff9091169250632e1a7d4d91506024016020604051808303816000875af115801562003ebe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003ee49190620083ab565b506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb5ba4c4d00000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063c31eb0e090602401600060405180830381600087803b15801562003f7157600080fd5b505af115801562003f86573d6000803e3d6000fd5b50506007546040517ef714ce0000000000000000000000000000000000000000000000000000000081526103e860048201526000602482015273ffffffffffffffffffffffffffffffffffffffff909116925062f714ce91506044016020604051808303816000875af115801562004002573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620040289190620083ab565b506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb5ba4c4d00000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063c31eb0e090602401600060405180830381600087803b158015620040b557600080fd5b505af1158015620040ca573d6000803e3d6000fd5b50506007546040517fe63697c80000000000000000000000000000000000000000000000000000000081526103e86004820152600060248201526002604482015273ffffffffffffffffffffffffffffffffffffffff909116925063e63697c891506064016020604051808303816000875af11580156200414f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017a89190620083ab565b6000601260405162004187906200827e565b60608082526006908201527f466f726269640000000000000000000000000000000000000000000000000000608082015260a0602082018190526003908201527f464244000000000000000000000000000000000000000000000000000000000060c082015260ff909116604082015260e001604051809103906000f08015801562004217573d6000803e3d6000fd5b5090506000816040516200422b9062008254565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103906000f08015801562004265573d6000803e3d6000fd5b506001546040805173ffffffffffffffffffffffffffffffffffffffff86811660248084019190915283518084039091018152604490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f98c0f5f20000000000000000000000000000000000000000000000000000000017905291517ff28dceb300000000000000000000000000000000000000000000000000000000815293945091169163f28dceb39162004326916004016200838f565b600060405180830381600087803b1580156200434157600080fd5b505af115801562004356573d6000803e3d6000fd5b505060025460405173ffffffffffffffffffffffffffffffffffffffff9091169250839150620043869062008270565b73ffffffffffffffffffffffffffffffffffffffff928316815291166020820152604001604051809103906000f080158015620043c7573d6000803e3d6000fd5b5050600080546040517f67b426450000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff16906367b4264590620044289060019060040162008430565b602060405180830381865afa15801562004446573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200446c919062008469565b6040516200447a9062008254565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103906000f080158015620044b4573d6000803e3d6000fd5b506001546040805173ffffffffffffffffffffffffffffffffffffffff84811660248084019190915283518084039091018152604490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f98c0f5f20000000000000000000000000000000000000000000000000000000017905291517ff28dceb300000000000000000000000000000000000000000000000000000000815293945091169163f28dceb39162004575916004016200838f565b600060405180830381600087803b1580156200459057600080fd5b505af1158015620045a5573d6000803e3d6000fd5b505060025460405173ffffffffffffffffffffffffffffffffffffffff9091169250839150620045d59062008270565b73ffffffffffffffffffffffffffffffffffffffff928316815291166020820152604001604051809103906000f08015801562004616573d6000803e3d6000fd5b5050505050565b60008054610100900460ff16156200463e5750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620047825760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091620046e6917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016200869c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526200472091620086e6565b6000604051808303816000865af19150503d80600081146200475f576040519150601f19603f3d011682016040523d82523d6000602084013e62004764565b606091505b50915050808060200190518101906200477e919062008704565b9150505b919050565b6001546040517f06447d5600000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116906306447d5690602401600060405180830381600087803b1580156200480757600080fd5b505af11580156200481c573d6000803e3d6000fd5b505060035473ffffffffffffffffffffffffffffffffffffffff169150636c8f225d905062004856670de0b6b3a7640000614e2062008489565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b168152600481019190915273f39fd6e51aad88f6f4ce6ab8827279cfffb922666024820152606460448201819052600090820152608401600060405180830381600087803b158015620048d157600080fd5b505af1158015620048e6573d6000803e3d6000fd5b50506002546040517fe958b70400000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660048201526000935073ffffffffffffffffffffffffffffffffffffffff909116915063e958b70490602401602060405180830381865afa15801562004970573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004996919062008469565b60005490915062010000900473ffffffffffffffffffffffffffffffffffffffff1663eebab8ef600183620049d6670de0b6b3a7640000614e2062008489565b6040518463ffffffff1660e01b8152600401620049f693929190620084c9565b600060405180830381600087803b15801562004a1157600080fd5b505af115801562004a26573d6000803e3d6000fd5b505060075473ffffffffffffffffffffffffffffffffffffffff16915063b6b55f25905062004a60670de0b6b3a7640000614e2062008489565b6040518263ffffffff1660e01b815260040162004a7f91815260200190565b6020604051808303816000875af115801562004a9f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004ac59190620083ab565b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562004b3157600080fd5b505af115801562004b46573d6000803e3d6000fd5b50506007546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015262004bee945090911691506370a0823190602401602060405180830381865afa15801562004bc0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004be69190620083ab565b600062006c19565b6007546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015262004cf99216906370a0823190602401602060405180830381865afa15801562004c62573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004c889190620083ab565b6008546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152909116906370a0823190602401602060405180830381865afa15801562001266573d6000803e3d6000fd5b600754604080517f18160ddd0000000000000000000000000000000000000000000000000000000081529051620017a89273ffffffffffffffffffffffffffffffffffffffff16916318160ddd9160048083019260209291908290030181865afa15801562004d6c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004d929190620083ab565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001266573d6000803e3d6000fd5b60005b6002811015620017a85780151562004e1a6200064d565b60008062004e276200527f565b600a5460085492945090925062004e5c9173ffffffffffffffffffffffffffffffffffffffff91821691859116600062006aab565b600062004e6b600283620082d8565b6040516024810182905273ffffffffffffffffffffffffffffffffffffffff8516604482015260016064820152909150600090608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe63697c800000000000000000000000000000000000000000000000000000000179052905084156200502a5760075460085460095462004f6e9273ffffffffffffffffffffffffffffffffffffffff9081169281169173f39fd6e51aad88f6f4ce6ab8827279cfffb9226691869116836001600062005984565b600754604051602481018490526000604482015260016064820152620050249173ffffffffffffffffffffffffffffffffffffffff1690608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe63697c80000000000000000000000000000000000000000000000000000000017905262006075565b620051ba565b600754600854600954620050799273ffffffffffffffffffffffffffffffffffffffff9081169281169173f39fd6e51aad88f6f4ce6ab8827279cfffb9226691869184911660016000620061a7565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b158015620050f957600080fd5b505af11580156200510e573d6000803e3d6000fd5b50506007546040517fe63697c800000000000000000000000000000000000000000000000000000000815260048101869052600060248201526001604482015273ffffffffffffffffffffffffffffffffffffffff909116925063e63697c891506064016020604051808303816000875af115801562005192573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620051b89190620083ab565b505b620051d9600185670de0b6b3a764000060646200270a82606e62008489565b600a54620052049073ffffffffffffffffffffffffffffffffffffffff168562001714858762008500565b600a54600854620052339173ffffffffffffffffffffffffffffffffffffffff90811691879116600062006aab565b6200524060018062006a8f565b600854620052649073ffffffffffffffffffffffffffffffffffffffff16620066eb565b5050505050808062005276906200851a565b91505062004e03565b60008060006200528e6200557f565b90935090506064620052aa670de0b6b3a7640000606e62008489565b620052b69190620082d8565b670de0b6b3a7640000620052cc60018462008500565b620052d8919062008489565b620052e49190620082d8565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015291935073ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b1580156200536557600080fd5b505af11580156200537a573d6000803e3d6000fd5b50505050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db06040518163ffffffff1660e01b81526004016020604051808303816000875af1158015620053ee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620054149190620083ab565b5062005424600184600162006695565b600a546200544a9073ffffffffffffffffffffffffffffffffffffffff168484620066b2565b620054586001600062006a8f565b509091565b62001292600162006d7d565b8082146200557b577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f50604051620054f79060208082526022908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b75696e60408201527f745d000000000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a88160405162005530919062008728565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a88260405162005569919062008774565b60405180910390a16200557b620072a9565b5050565b6000806000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635f7c9bd06040518163ffffffff1660e01b8152600401602060405180830381865afa158015620055f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620056189190620083ab565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015291925073ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b1580156200569957600080fd5b505af1158015620056ae573d6000803e3d6000fd5b50506003546040517f6c8f225d0000000000000000000000000000000000000000000000000000000081526004810185905273f39fd6e51aad88f6f4ce6ab8827279cfffb92266602482015260646044820181905260009082015273ffffffffffffffffffffffffffffffffffffffff9091169250636c8f225d9150608401600060405180830381600087803b1580156200574857600080fd5b505af11580156200575d573d6000803e3d6000fd5b50506002546040517fe958b70400000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063e958b7049150602401602060405180830381865afa158015620057e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200580a919062008469565b6006546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80841660048301529295509116906370a0823190602401602060405180830381865afa1580156200587d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620058a39190620083ab565b600154604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301526024820192909252600d60448201527f6372656469744163636f756e74000000000000000000000000000000000000006064820152929450169063c657c71890608401600060405180830381600087803b1580156200594857600080fd5b505af11580156200595d573d6000803e3d6000fd5b50505050509091565b6200115984848484604051806020016040528060008152506200742c565b6002546040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152600092169063e958b70490602401602060405180830381865afa158015620059f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005a1c919062008469565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000918716906370a0823190602401602060405180830381865afa15801562005a8f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005ab59190620083ab565b600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481019290925260006024830181905260448301819052606483015291925073ffffffffffffffffffffffffffffffffffffffff9091169063491cc7c290608401600060405180830381600087803b15801562005b3c57600080fd5b505af115801562005b51573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff8b1692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a2821562005ccf576001546002546003546040805173ffffffffffffffffffffffffffffffffffffffff92831660248201528d831660448201528a831660648201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6084808301919091528251808303909101815260a490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f46fb371d0000000000000000000000000000000000000000000000000000000017905290517fbd6af4340000000000000000000000000000000000000000000000000000000081529382169363bd6af4349362005c9a93169190600401620087b2565b600060405180830381600087803b15801562005cb557600080fd5b505af115801562005cca573d6000803e3d6000fd5b505050505b60015460025460035460405173ffffffffffffffffffffffffffffffffffffffff9384169363bd6af434938116927f6ce4074a000000000000000000000000000000000000000000000000000000009262005d3592909116908f908e90602401620087eb565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b909216825262005dc89291600401620087b2565b600060405180830381600087803b15801562005de357600080fd5b505af115801562005df8573d6000803e3d6000fd5b5050600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526024810192909252600060448301819052606483015273ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b15801562005e7e57600080fd5b505af115801562005e93573d6000803e3d6000fd5b505060035460405173ffffffffffffffffffffffffffffffffffffffff8d8116945090911691507faed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab0390600090a38215620060695760015460025460035473ffffffffffffffffffffffffffffffffffffffff9283169263bd6af434928116917f46fb371d0000000000000000000000000000000000000000000000000000000091168d8b8a62005f64577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62005f67565b60015b60405173ffffffffffffffffffffffffffffffffffffffff9485166024820152928416604484015292166064820152608481019190915260a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b9092168252620060349291600401620087b2565b600060405180830381600087803b1580156200604f57600080fd5b505af115801562006064573d6000803e3d6000fd5b505050505b50505050505050505050565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b158015620060f557600080fd5b505af11580156200610a573d6000803e3d6000fd5b50506003546040805180820190915273ffffffffffffffffffffffffffffffffffffffff868116825260208201869052909116925063caa5c23f9150620061519062007562565b6040518263ffffffff1660e01b81526004016200616f91906200882f565b600060405180830381600087803b1580156200618a57600080fd5b505af11580156200619f573d6000803e3d6000fd5b505050505050565b6002546040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152600092169063e958b70490602401602060405180830381865afa15801562006219573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200623f919062008469565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000918716906370a0823190602401602060405180830381865afa158015620062b2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620062d89190620083ab565b9050821562006410576001546002546040805173ffffffffffffffffffffffffffffffffffffffff8c811660248301528d811660448301528a811660648301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6084808401919091528351808403909101815260a490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f46fb371d0000000000000000000000000000000000000000000000000000000017905291517fbd6af4340000000000000000000000000000000000000000000000000000000081529382169363bd6af43493620063db93169190600401620087b2565b600060405180830381600087803b158015620063f657600080fd5b505af11580156200640b573d6000803e3d6000fd5b505050505b60015460025460405173ffffffffffffffffffffffffffffffffffffffff9283169263bd6af4349216907f6ce4074a000000000000000000000000000000000000000000000000000000009062006470908d908f908e90602401620087eb565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b9092168252620065039291600401620087b2565b600060405180830381600087803b1580156200651e57600080fd5b505af115801562006533573d6000803e3d6000fd5b5050600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526024810192909252600060448301819052606483015273ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b158015620065b957600080fd5b505af1158015620065ce573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff808d1693508b1691507faed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab0390600090a38215620060695760015460025473ffffffffffffffffffffffffffffffffffffffff9182169163bd6af43491167f46fb371d000000000000000000000000000000000000000000000000000000008b8d8b8a62005f64577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62005f67565b6200064883838360405180602001604052806000815250620075cb565b6200064883838360405180602001604052806000815250620076fb565b6200557b828260405180602001604052806000815250620078b6565b6002546040517fe958b70400000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015260009173ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156200676f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062006795919062008469565b90506000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa15801562006807573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200682d9190620083ab565b905060005b8181101562001159576002546040517f172c48c70000000000000000000000000000000000000000000000000000000081526004810183905260009173ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa158015620068ab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620068d19190620088db565b506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301528781166024830152919250620069b39183169063dd62ed3e90604401602060405180830381865afa1580156200694f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620069759190620083ab565b60016040518060400160405280601581526020017f616c6c6f77616e636520697320746f6f2068696768000000000000000000000081525062007c2c565b5080620069c0816200851a565b91505062006832565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161462000648577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf35838160405162006a2e919062008920565b60405180910390a162000648838362007c7a565b81831462000648577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf35838160405162006a7b919062008920565b60405180910390a162000648838362005469565b6200557b82826040518060200160405280600081525062007da6565b62001159848484846040518060200160405280600081525062007ec5565b8060405160200162006adc9190620086e6565b604051602081830303815290604052805190602001208260405160200162006b059190620086e6565b60405160208183030381529060405280519060200120146200557b577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f5060405162006ba79060208082526024908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b73747260408201527f696e675d00000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf35838160405162006be0919062008969565b60405180910390a17f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf358382604051620055699190620089bb565b8082116200557b577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f5060405162006ca79060208082526021908201527f4572726f723a2061203e2062206e6f7420736174697366696564205b75696e7460408201527f5d00000000000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a1604080518181526009818301527f202056616c75652061000000000000000000000000000000000000000000000060608201526020810184905290517fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a89181900360800190a1604080518181526009918101919091527f202056616c7565206200000000000000000000000000000000000000000000006060820152602081018290527fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a89060800162005569565b600181600a81111562006d945762006d94620083c5565b148062006db55750600381600a81111562006db35762006db3620083c5565b145b62006e21576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f556e737570706f7274656420746f6b656e00000000000000000000000000000060448201526064015b60405180910390fd5b60405162006e2f906200828c565b604051809103906000f08015801562006e4c573d6000803e3d6000fd5b50600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff166201000073ffffffffffffffffffffffffffffffffffffffff9384168102919091179182905590041663b36ba20862006eb6670de0b6b3a7640000606462008489565b6040518263ffffffff1660e01b81526004016000604051808303818588803b15801562006ee257600080fd5b505af115801562006ef7573d6000803e3d6000fd5b5050505050600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160405162006f2e906200829a565b62006f3b929190620089f9565b604051809103906000f08015801562006f58573d6000803e3d6000fd5b50600580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169182179055604080517f6f307dc30000000000000000000000000000000000000000000000000000000081529051636f307dc3916004808201926020929091908290030181865afa15801562006ff2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062007018919062008469565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600554604080517fc12c21c00000000000000000000000000000000000000000000000000000000081529051919092169163c12c21c09160048083019260209291908290030181865afa158015620070b5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620070db919062008469565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600554604080517f2f7a188100000000000000000000000000000000000000000000000000000000815290519190921691632f7a18819160048083019260209291908290030181865afa15801562007178573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200719e919062008469565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600554604080517ff9aa028a0000000000000000000000000000000000000000000000000000000081529051919092169163f9aa028a9160048083019260209291908290030181865afa1580156200723b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062007261919062008469565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620073fe5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000009282019290925260016060820152600091907f70ca10bbd0dbfd9020a9f4b13402c16cb120705e0d1c0aeab10fa353ae586fc490608001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526200737b92916020016200869c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052620073b591620086e6565b6000604051808303816000865af19150503d8060008114620073f4576040519150601f19603f3d011682016040523d82523d6000602084013e620073f9565b606091505b505050505b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff16620074b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f74657374546f6b656e5375697465206973206e6f742073657400000000000000604482015260640162006e18565b6000546040517f67b42645000000000000000000000000000000000000000000000000000000008152620046169162010000900473ffffffffffffffffffffffffffffffffffffffff16906367b42645906200751490899060040162008430565b602060405180830381865afa15801562007532573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062007558919062008469565b8585858562007ec5565b604080516001808252818301909252606091816020015b604080518082019091526000815260606020820152815260200190600190039081620075795790505090508181600081518110620075bb57620075bb62008a25565b6020026020010181905250919050565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1662007652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f74657374546f6b656e5375697465206973206e6f742073657400000000000000604482015260640162006e18565b6000546040517f67b42645000000000000000000000000000000000000000000000000000000008152620011599162010000900473ffffffffffffffffffffffffffffffffffffffff16906367b4264590620076b390889060040162008430565b602060405180830381865afa158015620076d1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620076f7919062008469565b8484845b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600091908616906370a0823190602401602060405180830381865afa1580156200776c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620077929190620083ab565b9050828114620078aa577f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f828673ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200780a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620078529190810190620085a0565b6040516020016200786592919062008a54565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052620078a191879062008ada565b60405180910390a15b62004616818462005469565b6002546040517fe958b70400000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015260009173ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156200793a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062007960919062008469565b6002546040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015292935060009290911690638991b2f190602401602060405180830381865afa158015620079d7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620079fd9190620083ab565b6002546040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529091169063f67c5bd090602401602060405180830381865afa15801562007a6e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062007a949190620083ab565b1615159050831515811480159062007aac5750825115155b1562007aec577f0b2e13ff20ac7b474198655583edf70dedd2c1dc980e329c4fbb2fc0748b796b8360405162007ae391906200838f565b60405180910390a15b62004616841515821515148673ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562007b43573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262007b8b9190810190620085a0565b8362007bcd576040518060400160405280601981526020017f206e6f7420656e61626c6564206173206578706563746564200000000000000081525062007c04565b6040518060400160405280601981526020017f20656e61626c6564206173206e6f7420657870657463746564000000000000008152505b60405160200162007c1792919062008b14565b60405160208183030381529060405262008103565b8183111562000648577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf35838160405162007c66919062008920565b60405180910390a16200064883836200814d565b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146200557b577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f5060405162007d349060208082526025908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b61646460408201527f726573735d000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f8160405162007d6d919062008b73565b60405180910390a17f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f8260405162005569919062008bd5565b600554604080517f406c8e2f0000000000000000000000000000000000000000000000000000000081529051620006489273ffffffffffffffffffffffffffffffffffffffff169163406c8e2f9160048083019260209291908290030181865afa15801562007e19573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062007e3f919062008469565b73ffffffffffffffffffffffffffffffffffffffff166367b42645856040518263ffffffff1660e01b815260040162007e79919062008430565b602060405180830381865afa15801562007e97573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062007ebd919062008469565b8383620078b6565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301526000919087169063dd62ed3e90604401602060405180830381865afa15801562007f3e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062007f649190620083ab565b9050828114620080f7577f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f828773ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562007fdc573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620080249190810190620085a0565b6040516020016200803792919062008c13565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526200807391889062008ada565b60405180910390a160408051818152600a818301527f207370656e6465723a2000000000000000000000000000000000000000000000606082015273ffffffffffffffffffffffffffffffffffffffff8616602082015290517f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f9181900360800190a15b6200619f818462005469565b816200557b577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf3583816040516200813a919062008920565b60405180910390a16200557b82620081dc565b808211156200557b577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f5060405162006ca79060208082526022908201527f4572726f723a2061203c3d2062206e6f7420736174697366696564205b75696e60408201527f745d000000000000000000000000000000000000000000000000000000000000606082015260800190565b80620017a8577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f50604051620082429060208082526017908201527f4572726f723a20417373657274696f6e204661696c6564000000000000000000604082015260600190565b60405180910390a1620017a8620072a9565b6121d08062008c9a83390190565b611717806200ae6a83390190565b6123d6806200c58183390190565b611758806200e95783390190565b617a5180620100af83390190565b62031ed68062017b0083390190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000826200830f577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b838110156200833157818101518382015260200162008317565b83811115620011595750506000910152565b600081518084526200835d81602086016020860162008314565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000620083a4602083018462008343565b9392505050565b600060208284031215620083be57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600b81106200842c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b60208101620084408284620083f4565b92915050565b73ffffffffffffffffffffffffffffffffffffffff81168114620017a857600080fd5b6000602082840312156200847c57600080fd5b8151620083a48162008446565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620084c457620084c4620082a9565b500290565b60608101620084d98286620083f4565b73ffffffffffffffffffffffffffffffffffffffff93909316602082015260400152919050565b600082821015620085155762008515620082a9565b500390565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156200854f576200854f620082a9565b5060010190565b600082198211156200856c576200856c620082a9565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060208284031215620085b357600080fd5b815167ffffffffffffffff80821115620085cc57600080fd5b818401915084601f830112620085e157600080fd5b815181811115620085f657620085f662008571565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156200863f576200863f62008571565b816040528281528760208487010111156200865957600080fd5b6200866c83602083016020880162008314565b979650505050505050565b6000602082840312156200868a57600080fd5b815160ff81168114620083a457600080fd5b7fffffffff000000000000000000000000000000000000000000000000000000008316815260008251620086d881600485016020870162008314565b919091016004019392505050565b60008251620086fa81846020870162008314565b9190910192915050565b6000602082840312156200871757600080fd5b81518015158114620083a457600080fd5b6040815260006200876660408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b905082602083015292915050565b6040815260006200876660408301600a81527f2020202041637475616c00000000000000000000000000000000000000000000602082015260400190565b73ffffffffffffffffffffffffffffffffffffffff83168152604060208201526000620087e3604083018462008343565b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff80861683528085166020840152506060604083015262008826606083018462008343565b95945050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015620088cd578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00185528151805173ffffffffffffffffffffffffffffffffffffffff168452870151878401879052620088b98785018262008343565b958801959350509086019060010162008856565b509098975050505050505050565b60008060408385031215620088ef57600080fd5b8251620088fc8162008446565b602084015190925061ffff811681146200891557600080fd5b809150509250929050565b60408152600560408201527f4572726f720000000000000000000000000000000000000000000000000000006060820152608060208201526000620083a4608083018462008343565b604081526000620089a760408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b8281036020840152620087e3818562008343565b604081526000620089a760408301600a81527f2020202041637475616c00000000000000000000000000000000000000000000602082015260400190565b73ffffffffffffffffffffffffffffffffffffffff8316815260408101620083a46020830184620083f4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000835162008a6881846020880162008314565b7f496e636f72726563742000000000000000000000000000000000000000000000908301908152835162008aa481600a84016020880162008314565b7f2062616c616e6365206f6e206163636f756e743a200000000000000000000000600a9290910191820152601f01949350505050565b60408152600062008aef604083018562008343565b905073ffffffffffffffffffffffffffffffffffffffff831660208301529392505050565b7f546f6b656e20000000000000000000000000000000000000000000000000000081526000835162008b4e81600685016020880162008314565b83519083019062008b6781600684016020880162008314565b01600601949350505050565b60408152600062008bb160408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b905073ffffffffffffffffffffffffffffffffffffffff8316602083015292915050565b60408152600062008bb160408301600a81527f2020202041637475616c00000000000000000000000000000000000000000000602082015260400190565b6000835162008c2781846020880162008314565b7f496e636f72726563742000000000000000000000000000000000000000000000908301908152835162008c6381600a84016020880162008314565b7f20416c6c6f77616e6365206f6e206163636f756e743a20200000000000000000600a929091019182015260220194935050505056fe60a06040523480156200001157600080fd5b50604051620021d0380380620021d08339810160408190526200003491620002f9565b806001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000073573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200009d919081019062000374565b604051602001620000af91906200042c565b604051602081830303815290604052816001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015620000fd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000127919081019062000374565b6040516020016200013991906200045c565b60408051601f1981840301815291905281516200015e90600390602085019062000253565b5080516200017490600490602084019062000253565b505050620001916200018b620001f860201b60201c565b620001fc565b600680546001600160a01b0319166001600160a01b038316179055620001c26200024e602090811b62000b9817901c565b620001cf90600a6200059d565b608081905260075550336000908152600860205260409020805460ff19166001179055620005eb565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b601290565b8280546200026190620005ae565b90600052602060002090601f016020900481019282620002855760008555620002d0565b82601f10620002a057805160ff1916838001178555620002d0565b82800160010185558215620002d0579182015b82811115620002d0578251825591602001919060010190620002b3565b50620002de929150620002e2565b5090565b5b80821115620002de5760008155600101620002e3565b6000602082840312156200030c57600080fd5b81516001600160a01b03811681146200032457600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200035e57818101518382015260200162000344565b838111156200036e576000848401525b50505050565b6000602082840312156200038757600080fd5b81516001600160401b03808211156200039f57600080fd5b818401915084601f830112620003b457600080fd5b815181811115620003c957620003c96200032b565b604051601f8201601f19908116603f01168101908382118183101715620003f457620003f46200032b565b816040528281528760208487010111156200040e57600080fd5b6200042183602083016020880162000341565b979650505050505050565b6503cb2b0b937160d51b8152600082516200044f81600685016020870162000341565b9190910160060192915050565b613cbb60f11b8152600082516200047b81600285016020870162000341565b9190910160020192915050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620004df578160001904821115620004c357620004c362000488565b80851615620004d157918102915b93841c9390800290620004a3565b509250929050565b600082620004f85750600162000597565b81620005075750600062000597565b81600181146200052057600281146200052b576200054b565b600191505062000597565b60ff8411156200053f576200053f62000488565b50506001821b62000597565b5060208310610133831016604e8410600b841016171562000570575081810a62000597565b6200057c83836200049e565b806000190482111562000593576200059362000488565b0290505b92915050565b60006200032460ff841683620004e7565b600181811c90821680620005c357607f821691505b60208210811415620005e557634e487b7160e01b600052602260045260246000fd5b50919050565b608051611bc26200060e6000396000818161073601526109a00152611bc26000f3fe608060405234801561001057600080fd5b50600436106101ad5760003560e01c806370a08231116100ee578063a9059cbb11610097578063dd62ed3e11610071578063dd62ed3e14610395578063e63697c8146103db578063f2fde38b146103ee578063fc0c546a1461040157600080fd5b8063a9059cbb14610367578063b6b55f251461037a578063d0e30db01461038d57600080fd5b806395d89b41116100c857806395d89b411461034357806399530b061461034b578063a457c2d71461035457600080fd5b806370a08231146102c6578063715018a6146102fc5780638da5cb5b1461030457600080fd5b80632e1a7d4d1161015b5780633ccfd60b116101355780633ccfd60b1461027557806343d24a5e1461027d57806354a055c1146102905780636e553f65146102b357600080fd5b80632e1a7d4d14610240578063313ce56714610253578063395093511461026257600080fd5b8063118c9a071161018c578063118c9a071461021057806318160ddd1461022557806323b872dd1461022d57600080fd5b8062f714ce146101b257806306fdde03146101d8578063095ea7b3146101ed575b600080fd5b6101c56101c0366004611879565b610421565b6040519081526020015b60405180910390f35b6101e0610438565b6040516101cf91906118d1565b6102006101fb366004611922565b610447565b60405190151581526020016101cf565b61022361021e36600461194c565b61045d565b005b6002546101c5565b61020061023b366004611965565b6104e0565b6101c561024e36600461194c565b6105c8565b604051601281526020016101cf565b610200610270366004611922565b6105d4565b6101c561061d565b61022361028b3660046119a1565b610636565b61020061029e3660046119a1565b60086020526000908152604090205460ff1681565b6101c56102c1366004611879565b610706565b6101c56102d43660046119a1565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610223610771565b60055473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101cf565b6101e06107fe565b6101c560075481565b610200610362366004611922565b610808565b610200610375366004611922565b6108e0565b6101c561038836600461194c565b6108ed565b6101c56108f9565b6101c56103a33660046119bc565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101c56103e93660046119e6565b610992565b6102236103fc3660046119a1565b610a68565b60065461031e9073ffffffffffffffffffffffffffffffffffffffff1681565b600061042f83836001610992565b90505b92915050565b6060610442610b9d565b905090565b6000610454338484610c2f565b50600192915050565b3360009081526008602052604090205460ff166104db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f666f72207570646174657273206f6e6c7900000000000000000000000000000060448201526064015b60405180910390fd5b600755565b60006104ed848484610de3565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600160209081526040808320338452909152902054828110156105ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084016104d2565b6105bb8533858403610c2f565b60019150505b9392505050565b60006104328233610421565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091610454918590610618908690611a3a565b610c2f565b33600090815260208190526040812054610442906105c8565b60055473ffffffffffffffffffffffffffffffffffffffff1633146106b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104d2565b73ffffffffffffffffffffffffffffffffffffffff16600090815260086020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b60065460009061072e9073ffffffffffffffffffffffffffffffffffffffff16333086611098565b60075461075b7f000000000000000000000000000000000000000000000000000000000000000085611a52565b6107659190611a8f565b90506104328282611174565b60055473ffffffffffffffffffffffffffffffffffffffff1633146107f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104d2565b6107fc6000611294565b565b606061044261130b565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156108c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084016104d2565b6108d63385858403610c2f565b5060019392505050565b6000610454338484610de3565b60006104328233610706565b6006546040517f70a082310000000000000000000000000000000000000000000000000000000081523360048201526000916104429173ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa15801561096e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103889190611aca565b600061099e338561131a565b7f0000000000000000000000000000000000000000000000000000000000000000600754856109cd9190611a52565b6109d79190611a8f565b90506001821115610a44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4c6f737320746f6f20626967000000000000000000000000000000000000000060448201526064016104d2565b6006546105c19073ffffffffffffffffffffffffffffffffffffffff163383611504565b60055473ffffffffffffffffffffffffffffffffffffffff163314610ae9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104d2565b73ffffffffffffffffffffffffffffffffffffffff8116610b8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016104d2565b610b9581611294565b50565b601290565b606060038054610bac90611ae3565b80601f0160208091040260200160405190810160405280929190818152602001828054610bd890611ae3565b8015610c255780601f10610bfa57610100808354040283529160200191610c25565b820191906000526020600020905b815481529060010190602001808311610c0857829003601f168201915b5050505050905090565b73ffffffffffffffffffffffffffffffffffffffff8316610cd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016104d2565b73ffffffffffffffffffffffffffffffffffffffff8216610d74576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f737300000000000000000000000000000000000000000000000000000000000060648201526084016104d2565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610e86576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016104d2565b73ffffffffffffffffffffffffffffffffffffffff8216610f29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016104d2565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610fdf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e6365000000000000000000000000000000000000000000000000000060648201526084016104d2565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290611023908490611a3a565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161108991815260200190565b60405180910390a35b50505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526110929085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261155a565b73ffffffffffffffffffffffffffffffffffffffff82166111f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104d2565b80600260008282546112039190611a3a565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152602081905260408120805483929061123d908490611a3a565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b606060048054610bac90611ae3565b73ffffffffffffffffffffffffffffffffffffffff82166113bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f730000000000000000000000000000000000000000000000000000000000000060648201526084016104d2565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611473576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f636500000000000000000000000000000000000000000000000000000000000060648201526084016104d2565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906114af908490611b37565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610dd6565b505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526114ff9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016110f2565b60006115bc826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166116669092919063ffffffff16565b8051909150156114ff57808060200190518101906115da9190611b4e565b6114ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016104d2565b6060611675848460008561167d565b949350505050565b60608247101561170f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016104d2565b843b611777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016104d2565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516117a09190611b70565b60006040518083038185875af1925050503d80600081146117dd576040519150601f19603f3d011682016040523d82523d6000602084013e6117e2565b606091505b50915091506117f28282866117fd565b979650505050505050565b6060831561180c5750816105c1565b82511561181c5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d291906118d1565b803573ffffffffffffffffffffffffffffffffffffffff8116811461187457600080fd5b919050565b6000806040838503121561188c57600080fd5b8235915061189c60208401611850565b90509250929050565b60005b838110156118c05781810151838201526020016118a8565b838111156110925750506000910152565b60208152600082518060208401526118f08160408501602087016118a5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806040838503121561193557600080fd5b61193e83611850565b946020939093013593505050565b60006020828403121561195e57600080fd5b5035919050565b60008060006060848603121561197a57600080fd5b61198384611850565b925061199160208501611850565b9150604084013590509250925092565b6000602082840312156119b357600080fd5b61042f82611850565b600080604083850312156119cf57600080fd5b6119d883611850565b915061189c60208401611850565b6000806000606084860312156119fb57600080fd5b8335925061199160208501611850565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611a4d57611a4d611a0b565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611a8a57611a8a611a0b565b500290565b600082611ac5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600060208284031215611adc57600080fd5b5051919050565b600181811c90821680611af757607f821691505b60208210811415611b31577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600082821015611b4957611b49611a0b565b500390565b600060208284031215611b6057600080fd5b815180151581146105c157600080fd5b60008251611b828184602087016118a5565b919091019291505056fea2646970667358221220dd6ab68a357bcb22f83ca9169f71d50eab420f577d6615614a08c2ea63f4ce2f64736f6c634300080a00336101206040523480156200001257600080fd5b506040516200171738038062001717833981016040819052620000359162000453565b8260c86001600160a01b0384166200005d5760405180602001604052806000815250620000e8565b836001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200009c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620000c69190810190620004e6565b604051602001620000d891906200059e565b6040516020818303038152906040525b6000805460ff19169055826001600160a01b0381166200011b57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200015a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001809190620005ce565b6001600160a01b0316608052508051620001a290600290602084019062000390565b505060a052506001600160a01b0382161580620001c657506001600160a01b038116155b15620001e557604051635919af9760e11b815260040160405180910390fd5b6001600160a01b0380831660e081905290821660c0526040805163313ce56760e01b8152905163313ce567916004808201926020929091908290030181865afa15801562000237573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025d9190620005f3565b6200026a90600a6200072b565b61010081815250506000826001600160a01b03166399530b066040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002b3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d991906200073c565b9050620002e681620002f0565b50505050620007f3565b806200030f576040516309aadd6f60e41b815260040160405180910390fd5b60018190557f82e7ee47180a631312683eeb2a85ad264c9af490d54de5a75bbdb95b968c6de28162000341816200035c565b6040805192835260208301919091520160405180910390a150565b60a0516000906127109062000372908262000756565b6200037e908462000771565b6200038a919062000793565b92915050565b8280546200039e90620007b6565b90600052602060002090601f016020900481019282620003c257600085556200040d565b82601f10620003dd57805160ff19168380011785556200040d565b828001600101855582156200040d579182015b828111156200040d578251825591602001919060010190620003f0565b506200041b9291506200041f565b5090565b5b808211156200041b576000815560010162000420565b80516001600160a01b03811681146200044e57600080fd5b919050565b6000806000606084860312156200046957600080fd5b620004748462000436565b9250620004846020850162000436565b9150620004946040850162000436565b90509250925092565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620004d0578181015183820152602001620004b6565b83811115620004e0576000848401525b50505050565b600060208284031215620004f957600080fd5b81516001600160401b03808211156200051157600080fd5b818401915084601f8301126200052657600080fd5b8151818111156200053b576200053b6200049d565b604051601f8201601f19908116603f011681019083821181831017156200056657620005666200049d565b816040528281528760208487010111156200058057600080fd5b62000593836020830160208801620004b3565b979650505050505050565b60008251620005b2818460208701620004b3565b69081c1c9a58d95199595960b21b920191825250600a01919050565b600060208284031215620005e157600080fd5b620005ec8262000436565b9392505050565b6000602082840312156200060657600080fd5b815160ff81168114620005ec57600080fd5b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200066f57816000190482111562000653576200065362000618565b808516156200066157918102915b93841c939080029062000633565b509250929050565b60008262000688575060016200038a565b8162000697575060006200038a565b8160018114620006b05760028114620006bb57620006db565b60019150506200038a565b60ff841115620006cf57620006cf62000618565b50506001821b6200038a565b5060208310610133831016604e8410600b841016171562000700575081810a6200038a565b6200070c83836200062e565b806000190482111562000723576200072362000618565b029392505050565b6000620005ec60ff84168362000677565b6000602082840312156200074f57600080fd5b5051919050565b600082198211156200076c576200076c62000618565b500190565b60008160001904831182151516156200078e576200078e62000618565b500290565b600082620007b157634e487b7160e01b600052601260045260246000fd5b500490565b600181811c90821680620007cb57607f821691505b60208210811415620007ed57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c05160e05161010051610eae62000869600039600081816102dc015261081c015260008181610194015261078001526000818161023301526106d70152600081816101400152610a090152600081816102b501528181610357015281816104d3015261060b0152610eae6000f3fe608060405234801561001057600080fd5b50600436106101365760003560e01c80638456cb59116100b2578063a834559e11610081578063bc489a6511610066578063bc489a6514610306578063d62ada1114610319578063feaf968c1461032157600080fd5b8063a834559e146102d7578063b09ad8a0146102fe57600080fd5b80638456cb59146102555780639a6fc8f51461025d578063a384d6ff146102a7578063a50cf2c8146102b057600080fd5b80633fd0875f116101095780635c975abb116100ee5780635c975abb146102025780637284e41614610219578063741bef1a1461022e57600080fd5b80633fd0875f146101e557806354fd4d50146101fa57600080fd5b806312b495a81461013b578063313ce5671461017557806333303f8e1461018f5780633f4ba83a146101db575b600080fd5b6101627f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b61017d600881565b60405160ff909116815260200161016c565b6101b67f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016c565b6101e3610329565b005b6101ed600181565b60405161016c9190610bc9565b610162600281565b60005460ff165b604051901515815260200161016c565b610221610417565b60405161016c9190610c0a565b6101b67f000000000000000000000000000000000000000000000000000000000000000081565b6101e36104a5565b61027061026b366004610c95565b610591565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a00161016c565b61016260015481565b6101b67f000000000000000000000000000000000000000000000000000000000000000081565b6101627f000000000000000000000000000000000000000000000000000000000000000081565b6101626105cb565b6101e3610314366004610cb9565b6105dd565b610209600181565b6102706106cd565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156103b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103d79190610cd2565b61040d576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610415610859565b565b6002805461042490610cf4565b80601f016020809104026020016040519081016040528092919081815260200182805461045090610cf4565b801561049d5780601f106104725761010080835404028352916020019161049d565b820191906000526020600020905b81548152906001019060200180831161048057829003601f168201915b505050505081565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561052f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105539190610cd2565b610589576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61041561093f565b60008060008060006040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006105d86001546109ff565b905090565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610667573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068b9190610cd2565b6106c1576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106ca81610a48565b50565b60008060008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610740573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107649190610d48565b93985091965094509250905061077c85858484610aca565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166399530b066040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080d9190610da0565b905061081881610b65565b90507f00000000000000000000000000000000000000000000000000000000000000006108458683610de8565b61084f9190610e25565b9450509091929394565b60005460ff166108ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff16156109ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016108c1565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586109153390565b6000612710610a2e7f000000000000000000000000000000000000000000000000000000000000000082610e60565b610a389084610de8565b610a429190610e25565b92915050565b80610a7f576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190557f82e7ee47180a631312683eeb2a85ad264c9af490d54de5a75bbdb95b968c6de281610aaf816109ff565b6040805192835260208301919091520160405180910390a150565b60008313610b04576040517f56e05d2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8369ffffffffffffffffffff168169ffffffffffffffffffff161080610b28575081155b15610b5f576040517fb1cf675500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60015460009080831015610ba5576040517fb416da7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610bb0826109ff565b905080841115610bc1579392505050565b509192915050565b6020810160068310610c04577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b600060208083528351808285015260005b81811015610c3757858101830151858201604001528201610c1b565b81811115610c49576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b69ffffffffffffffffffff811681146106ca57600080fd5b600060208284031215610ca757600080fd5b8135610cb281610c7d565b9392505050565b600060208284031215610ccb57600080fd5b5035919050565b600060208284031215610ce457600080fd5b81518015158114610cb257600080fd5b600181811c90821680610d0857607f821691505b60208210811415610d42577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600080600080600060a08688031215610d6057600080fd5b8551610d6b81610c7d565b809550506020860151935060408601519250606086015191506080860151610d9281610c7d565b809150509295509295909350565b600060208284031215610db257600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610e2057610e20610db9565b500290565b600082610e5b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60008219821115610e7357610e73610db9565b50019056fea264697066735822122033f071fae3fea6aa014d596b65f986292bf0f88262db5a9aebc2674ec8efeeea64736f6c634300080a00336101006040523480156200001257600080fd5b50604051620023d6380380620023d68339810160408190526200003591620002cd565b81816001600160a01b03821615806200005557506001600160a01b038116155b156200007457604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038216608081905260408051632f7a188160e01b81529051632f7a1881916004808201926020929091908290030181865afa158015620000bf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e5919062000305565b6001600160a01b0390811660a0521660c0819052600160005560408051637e062a3560e11b8152905191925063fc0c546a9160048083019260209291908290030181865afa1580156200013c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000162919062000305565b6001600160a01b0390811660e0819052608051604051630f67c5bd60e41b815260048101929092529091169063f67c5bd090602401602060405180830381865afa158015620001b5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001db91906200032a565b6200020d5760e051604051634c607af960e11b81526001600160a01b0390911660048201526024015b60405180910390fd5b608051604051630f67c5bd60e41b81526001600160a01b0383811660048301529091169063f67c5bd090602401602060405180830381865afa15801562000258573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200027e91906200032a565b620002a857604051634c607af960e11b81526001600160a01b038216600482015260240162000204565b505062000344565b80516001600160a01b0381168114620002c857600080fd5b919050565b60008060408385031215620002e157600080fd5b620002ec83620002b0565b9150620002fc60208401620002b0565b90509250929050565b6000602082840312156200031857600080fd5b6200032382620002b0565b9392505050565b6000602082840312156200033d57600080fd5b5051919050565b60805160a05160c05160e051611f71620004656000396000818161038c01528181610f7301528181611224015281816112f701526114220152600081816102fb015281816104f6015281816105ae0152818161077d0152818161097901528181610b8501528181610bfc01528181610c69015281816110480152818161120301528181611318015281816114000152818161167101528181611790015261186a015260008181610229015281816114dc015261193001526000818161032201528181610457015281816106df015281816108ae01528181610aaf01528181610d7601528181610ea801528181611160015281816116c701528181611761015281816118a1015281816119b801528181611a6c0152611b160152611f716000f3fe608060405234801561001057600080fd5b506004361061018c5760003560e01c806378aa73a4116100e3578063c12c21c01161008c578063dd62ed3e11610066578063dd62ed3e14610361578063e63697c814610374578063fc0c546a1461038757600080fd5b8063c12c21c01461031d578063ce30bbdb14610344578063d0e30db01461035957600080fd5b8063a9059cbb116100bd578063a9059cbb146101cc578063b6b55f25146102e3578063bd90df70146102f657600080fd5b806378aa73a4146102b857806395d89b41146102d357806399530b06146102db57600080fd5b80632e1a7d4d116101455780633ccfd60b1161011f5780633ccfd60b1461028a5780636e553f651461029257806370a08231146102a557600080fd5b80632e1a7d4d146102115780632f7a188114610224578063313ce5671461027057600080fd5b8063095ea7b311610176578063095ea7b3146101cc57806318160ddd146101f257806323b872dd146101fa57600080fd5b8062f714ce1461019157806306fdde03146101b7575b600080fd5b6101a461019f366004611ba0565b6103ae565b6040519081526020015b60405180910390f35b6101bf6104f2565b6040516101ae9190611c4a565b6101e26101da366004611c5d565b600092915050565b60405190151581526020016101ae565b6101a46105aa565b6101e2610208366004611c89565b60009392505050565b6101a461021f366004611cca565b61063b565b61024b7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101ae565b610278610779565b60405160ff90911681526020016101ae565b6101a461080a565b6101a46102a0366004611ba0565b610a0b565b6101a46102b3366004611ce3565b610b3d565b6102c0600281565b60405161ffff90911681526020016101ae565b6101bf610bf8565b6101a4610c65565b6101a46102f1366004611cca565b610cd2565b61024b7f000000000000000000000000000000000000000000000000000000000000000081565b61024b7f000000000000000000000000000000000000000000000000000000000000000081565b61034c600481565b6040516101ae9190611d00565b6101a4610e04565b6101a461036f366004611d41565b610ff8565b6101a4610382366004611d6f565b6110bc565b61024b7f000000000000000000000000000000000000000000000000000000000000000081565b600060026000541415610422576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156104b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104d79190611d96565b90506104e5818560006111fb565b6001600055949350505050565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801561055f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526105a59190810190611e74565b905090565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610617573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a59190611ebd565b6000600260005414156106aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610419565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa15801561073b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075f9190611d96565b905061076d818460006111fb565b60016000559392505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a59190611ed6565b600060026000541415610879576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610419565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa15801561090a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092e9190611d96565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000917f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa1580156109c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e49190611ebd565b90506001811115610a01576109fe826001830360016111fb565b92505b5050600160005590565b600060026000541415610a7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610419565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610b0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2f9190611d96565b90506104e5818560006112ef565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015610bce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf29190611ebd565b92915050565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801561055f573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166399530b066040518163ffffffff1660e01b8152600401602060405180830381865afa158015610617573d6000803e3d6000fd5b600060026000541415610d41576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610419565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610dd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df69190611d96565b905061076d818460006112ef565b600060026000541415610e73576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610419565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610f04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f289190611d96565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000917f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015610fba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fde9190611ebd565b90506001811115610a01576109fe826001830360016112ef565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063dd62ed3e90604401602060405180830381865afa158015611091573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b59190611ebd565b9392505050565b60006002600054141561112b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610419565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156111bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e09190611d96565b90506111ed8186856113c8565b600160005595945050505050565b60006112d4847f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008660405160240161125691815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f2e1a7d4d000000000000000000000000000000000000000000000000000000001790526000876114bf565b8060200190518101906112e79190611ebd565b949350505050565b60006112d4847f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008660405160240161134a91815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fb6b55f25000000000000000000000000000000000000000000000000000000001790526001876114bf565b6040516024810183905273ffffffffffffffffffffffffffffffffffffffff84166044820152606481018290526000906112d49085907f0000000000000000000000000000000000000000000000000000000000000000907f000000000000000000000000000000000000000000000000000000000000000090608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe63697c8000000000000000000000000000000000000000000000000000000001790526000805b60606000803373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614611628576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301528916906370a0823190602401602060405180830381865afa15801561156d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115919190611ebd565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152919350908816906370a0823190602401602060405180830381865afa158015611601573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116259190611ebd565b90505b8415611724576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561170b57600080fd5b505af115801561171f573d6000803e3d6000fd5b505050505b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a906117ba9033907f0000000000000000000000000000000000000000000000000000000000000000908b90600401611ef9565b6000604051808303816000875af11580156117d9573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261181f9190810190611e74565b925084156118fe576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301528981166044830152600160648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156118e557600080fd5b505af11580156118f9573d6000803e3d6000fd5b505050505b61190c898989858589611918565b50509695505050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614611a19576040517f654a9eda00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528681166024830152858116604483015260648201859052608482018490527f0000000000000000000000000000000000000000000000000000000000000000169063654a9eda9060a401600060405180830381600087803b1580156119fc57600080fd5b505af1158015611a10573d6000803e3d6000fd5b50505050611b73565b8015611ac9576040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015286811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b158015611ab057600080fd5b505af1158015611ac4573d6000803e3d6000fd5b505050505b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015285811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015611b5a57600080fd5b505af1158015611b6e573d6000803e3d6000fd5b505050505b505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114611b9d57600080fd5b50565b60008060408385031215611bb357600080fd5b823591506020830135611bc581611b7b565b809150509250929050565b60005b83811015611beb578181015183820152602001611bd3565b83811115611bfa576000848401525b50505050565b60008151808452611c18816020860160208601611bd0565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006110b56020830184611c00565b60008060408385031215611c7057600080fd5b8235611c7b81611b7b565b946020939093013593505050565b600080600060608486031215611c9e57600080fd5b8335611ca981611b7b565b92506020840135611cb981611b7b565b929592945050506040919091013590565b600060208284031215611cdc57600080fd5b5035919050565b600060208284031215611cf557600080fd5b81356110b581611b7b565b6020810160118310611d3b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60008060408385031215611d5457600080fd5b8235611d5f81611b7b565b91506020830135611bc581611b7b565b600080600060608486031215611d8457600080fd5b833592506020840135611cb981611b7b565b600060208284031215611da857600080fd5b81516110b581611b7b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff80841115611dfd57611dfd611db3565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611e4357611e43611db3565b81604052809350858152868686011115611e5c57600080fd5b611e6a866020830187611bd0565b5050509392505050565b600060208284031215611e8657600080fd5b815167ffffffffffffffff811115611e9d57600080fd5b8201601f81018413611eae57600080fd5b6112e784825160208401611de2565b600060208284031215611ecf57600080fd5b5051919050565b600060208284031215611ee857600080fd5b815160ff811681146110b557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff808616835280851660208401525060606040830152611f326060830184611c00565b9594505050505056fea2646970667358221220aecb71ead328fdb83f4bc503b07a4f5985eda47bcbdf6a22bcbbd3dee47273b064736f6c634300080a003360a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a003360806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d00011790553480156200003a57600080fd5b506040805161018081019091526000908060c081018060018152604080518082018252600381526244414960e81b6020828101919091528301526012908201526305f5e100606082015260800160018152602001600081525081526020016040518060c001604052806002600a811115620000b957620000b962000b78565b815260408051808201825260048152635553444360e01b6020828101919091528301526006908201526305f5e100606082015260800160018152602001600081525081526020016040518060c001604052806003600a81111562000121576200012162000b78565b815260408051808201825260048152630ae8aa8960e31b602082810191909152830152601290820152644a817c8000606082015260800160028152602001600081525081526020016040518060c001604052806004600a8111156200018a576200018a62000b78565b815260408051808201825260048152634c494e4b60e01b6020828101919091528301526012908201526359682f00606082015260800160018152602001600081525081526020016040518060c001604052806005600a811115620001f257620001f262000b78565b815260408051808201825260048152631554d11560e21b602082810191909152830152601290820152633b023380606082015260800160018152602001600081525081526020016040518060c001604052806006600a8111156200025a576200025a62000b78565b815260408051808201825260058152640e6e88aa8960db1b602082810191909152830152601290820152644cd588640060608201526080016003815260200160009052905260408051610140810190915290915060009080608081018060078152602001604051806040016040528060048152602001636344414960e01b8152508152602001601260ff1681526020016305f5e100815260200160048081111562000309576200030962000b78565b8152602001600181525081526020016040518060c001604052806008600a81111562000339576200033962000b78565b81526040805180820182526005815264635553444360d81b6020828101919091528301526006908201526305f5e100606082015260800160048152602001600281525081526020016040518060c001604052806009600a811115620003a257620003a262000b78565b8152604080518082018252600581526418d554d11560da1b602082810191909152830152601290820152633b023380606082015260800160048152602001600581525081526020016040518060c00160405280600a808111156200040a576200040a62000b78565b81526040805180820182526005815264634c494e4b60d81b6020828101919091528301526012908201526359682f00606082015260800160048152602001600490529052905060005b600681101562000496576200048183826006811062000476576200047662000b8e565b6020020151620004db565b806200048d8162000ba4565b91505062000453565b5060005b6004811015620004d257620004bd82826004811062000476576200047662000b8e565b80620004c98162000ba4565b9150506200049a565b50505062000d14565b6000600282608001516004811115620004f857620004f862000b78565b14156200054e576040516200050d9062000a8c565b604051809103906000f0801580156200052a573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b03831617905590506200071e565b60038260800151600481111562000569576200056962000b78565b1415620005a4576040516200057e9062000a9a565b604051809103906000f0801580156200059b573d6000803e3d6000fd5b5090506200071e565b600182608001516004811115620005bf57620005bf62000b78565b1415620005f157816020015182602001518360400151604051620005e39062000aa8565b6200057e9392919062000c1e565b6004826080015160048111156200060c576200060c62000b78565b1415620006be576000600260008460a00151600a81111562000632576200063262000b78565b600a81111562000646576200064662000b78565b815260200190815260200160002060009054906101000a90046001600160a01b0316905082602001518360200151846040015183604051620006889062000ab6565b62000697949392919062000c5b565b604051809103906000f080158015620006b4573d6000803e3d6000fd5b509150506200071e565b60405162461bcd60e51b815260206004820152602b60248201527f74657374546f6b656e53756974653a204372656174696e6720756e6b6e6f776e60448201526a20746f6b656e207479706560a81b606482015260840160405180910390fd5b60005460208301516040516318caf8e360e31b8152620100009092046001600160a01b03169163c657c718916200075b9185919060040162000ca9565b600060405180830381600087803b1580156200077657600080fd5b505af11580156200078b573d6000803e3d6000fd5b50505050600082606001516008604051620007a69062000ac4565b91825260ff166020820152604001604051809103906000f080158015620007d1573d6000803e3d6000fd5b50905081600260008560000151600a811115620007f257620007f262000b78565b600a81111562000806576200080662000b78565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055508260600151600560008560000151600a8111156200085a576200085a62000b78565b600a8111156200086e576200086e62000b78565b8152602080820192909252604090810160009081209390935585516001600160a01b03861684526008909252909120805460ff1916600183600a811115620008ba57620008ba62000b78565b02179055508260800151600360008560000151600a811115620008e157620008e162000b78565b600a811115620008f557620008f562000b78565b81526020810191909152604001600020805460ff1916600183600481111562000922576200092262000b78565b0217905550604080518082019091526001600160a01b0380841682528281166020808401918252600780546001810182556000918252945160029095027fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688810180549686166001600160a01b031997881617905592517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c689909301805493909416929094169190911790915584015184519091600491600a811115620009eb57620009eb62000b78565b600a811115620009ff57620009ff62000b78565b8152602001908152602001600020908051906020019062000a2292919062000ad2565b5080600660008560000151600a81111562000a415762000a4162000b78565b600a81111562000a555762000a5562000b78565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550505050565b610ab1806200285183390190565b611224806200330283390190565b611758806200452683390190565b6117098062005c7e83390190565b6106ca806200738783390190565b82805462000ae09062000cd7565b90600052602060002090601f01602090048101928262000b04576000855562000b4f565b82601f1062000b1f57805160ff191683800117855562000b4f565b8280016001018555821562000b4f579182015b8281111562000b4f57825182559160200191906001019062000b32565b5062000b5d92915062000b61565b5090565b5b8082111562000b5d576000815560010162000b62565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600060001982141562000bc757634e487b7160e01b600052601160045260246000fd5b5060010190565b6000815180845260005b8181101562000bf65760208185018101518683018201520162000bd8565b8181111562000c09576000602083870101525b50601f01601f19169290920160200192915050565b60608152600062000c33606083018662000bce565b828103602084015262000c47818662000bce565b91505060ff83166040830152949350505050565b60808152600062000c70608083018762000bce565b828103602084015262000c84818762000bce565b60ff95909516604084015250506001600160a01b039190911660609091015292915050565b6001600160a01b038316815260406020820181905260009062000ccf9083018462000bce565b949350505050565b600181811c9082168062000cec57607f821691505b6020821081141562000d0e57634e487b7160e01b600052602260045260246000fd5b50919050565b611b2d8062000d246000396000f3fe6080604052600436106101635760003560e01c80638eb86e8b116100c0578063c6c3bbe611610074578063d051a62211610059578063d051a62214610490578063eebab8ef146104b0578063fa7626d4146104d057600080fd5b8063c6c3bbe614610433578063c74912d21461045357600080fd5b80639b140a85116100a55780639b140a85146103e6578063b36ba20814610406578063ba414fa61461040e57600080fd5b80638eb86e8b1461038357806398cdaadf146103a357600080fd5b80636a72bde71161011757806388327863116100fc578063883278631461030857806388f776a2146103365780638a3177a31461035657600080fd5b80636a72bde7146102c45780636ca42ae3146102e657600080fd5b8063440864fa11610148578063440864fa146102025780634b57b0be1461022f57806367b426451461028157600080fd5b806304bc3b1c1461016f57806310c7f0b9146101b557600080fd5b3661016a57005b600080fd5b34801561017b57600080fd5b5061019f61018a3660046116f6565b60086020526000908152604090205460ff1681565b6040516101ac9190611742565b60405180910390f35b3480156101c157600080fd5b506101d56101d036600461175c565b6104ea565b6040805173ffffffffffffffffffffffffffffffffffffffff9384168152929091166020830152016101ac565b34801561020e57600080fd5b5061022261021d366004611784565b610530565b6040516101ac91906117cb565b34801561023b57600080fd5b5060015461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101ac565b34801561028d57600080fd5b5061025c61029c366004611784565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156102d057600080fd5b506102e46102df36600461181c565b6105ca565b005b3480156102f257600080fd5b506102fb610730565b6040516101ac919061186b565b34801561031457600080fd5b506103286103233660046118d4565b6107b5565b6040519081526020016101ac565b34801561034257600080fd5b506102e461035136600461190b565b610888565b34801561036257600080fd5b50610328610371366004611784565b60056020526000908152604090205481565b34801561038f57600080fd5b506102e461039e366004611954565b6108b9565b3480156103af57600080fd5b5061025c6103be366004611784565b60066020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156103f257600080fd5b506102e4610401366004611993565b610a73565b6102e4610b22565b34801561041a57600080fd5b50610423610ba0565b60405190151581526020016101ac565b34801561043f57600080fd5b506102e461044e3660046119b3565b610d00565b34801561045f57600080fd5b5061048361046e366004611784565b60036020526000908152604090205460ff1681565b6040516101ac91906119d3565b34801561049c57600080fd5b506103286104ab36600461190b565b610daf565b3480156104bc57600080fd5b506102e46104cb366004611954565b610e8b565b3480156104dc57600080fd5b506000546104239060ff1681565b600781815481106104fa57600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff91821692501682565b60046020526000908152604090208054610549906119e7565b80601f0160208091040260200160405190810160405280929190818152602001828054610575906119e7565b80156105c25780601f10610597576101008083540402835291602001916105c2565b820191906000526020600020905b8154815290600101906020018083116105a557829003601f168201915b505050505081565b6000546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152620100009092049091169063ca669fa790602401600060405180830381600087803b15801561063e57600080fd5b505af1158015610652573d6000803e3d6000fd5b505050506002600085600a81111561066c5761066c611713565b600a81111561067d5761067d611713565b8152602081019190915260409081016000205490517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490529091169063095ea7b3906044016020604051808303816000875af1158015610705573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107299190611a3b565b5050505050565b60606007805480602002602001604051908101604052809291908181526020016000905b828210156107ac5760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff908116835260019182015416828401529083529092019101610754565b50505050905090565b60006002600084600a8111156107cd576107cd611713565b600a8111156107de576107de611713565b8152602081019190915260409081016000205490517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152909116906370a0823190602401602060405180830381865afa15801561085d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108819190611a5d565b9392505050565b6108b48383837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6105ca565b505050565b60016003600085600a8111156108d1576108d1611713565b600a8111156108e2576108e2611713565b815260208101919091526040016000205460ff16600481111561090757610907611713565b14610999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f74657374546f6b656e53756974653a20547279696e6720746f206275726e206160448201527f206e6f6e2d6e6f726d616c20746f6b656e00000000000000000000000000000060648201526084015b60405180910390fd5b6002600084600a8111156109af576109af611713565b600a8111156109c0576109c0611713565b8152602081019190915260409081016000205490517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526024820184905290911690639dc29fac906044015b6020604051808303816000875af1158015610a49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6d9190611a3b565b50505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604081205460ff169081600a811115610aaf57610aaf611713565b1415610b17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f20746f6b656e2077697468207375636820616464726573730000000000006044820152606401610990565b610a6d818484610888565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015610b8c57600080fd5b505af1158015610729573d6000803e3d6000fd5b60008054610100900460ff1615610bc05750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610cfb5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610c65917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc491608001611a76565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052610c9d91611abe565b6000604051808303816000865af19150503d8060008114610cda576040519150601f19603f3d011682016040523d82523d6000602084013e610cdf565b606091505b5091505080806020019051810190610cf79190611a3b565b9150505b919050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604081205460ff169081600a811115610d3c57610d3c611713565b1415610da4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f20746f6b656e2077697468207375636820616464726573730000000000006044820152606401610990565b610a6d818484610e8b565b60006002600085600a811115610dc757610dc7611713565b600a811115610dd857610dd8611713565b8152602081019190915260409081016000205490517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301529091169063dd62ed3e90604401602060405180830381865afa158015610e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e839190611a5d565b949350505050565b60026003600085600a811115610ea357610ea3611713565b600a811115610eb457610eb4611713565b815260208101919091526040016000205460ff166004811115610ed957610ed9611713565b1415610ff6576000546040517fc88a5e6d000000000000000000000000000000000000000000000000000000008152306004820152602481018390526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c88a5e6d90604401600060405180830381600087803b158015610f5657600080fd5b505af1158015610f6a573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015610fd857600080fd5b505af1158015610fec573d6000803e3d6000fd5b505050505061163c565b600380600085600a81111561100d5761100d611713565b600a81111561101e5761101e611713565b815260208101919091526040016000205460ff16600481111561104357611043611713565b14156111aa576000546040517fc88a5e6d000000000000000000000000000000000000000000000000000000008152306004820152602481018390526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c88a5e6d90604401600060405180830381600087803b1580156110c057600080fd5b505af11580156110d4573d6000803e3d6000fd5b505050506002600084600a8111156110ee576110ee611713565b600a8111156110ff576110ff611713565b8152602081019190915260409081016000205490517fa1903eab00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a1903eab90839060240160206040518083038185885af115801561117f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906111a49190611a5d565b5061163c565b60046003600085600a8111156111c2576111c2611713565b600a8111156111d3576111d3611713565b815260208101919091526040016000205460ff1660048111156111f8576111f8611713565b141561148f5760006002600085600a81111561121657611216611713565b600a81111561122757611227611713565b815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c49190611ada565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600860205260409020549091506112fb9060ff163084610e8b565b8073ffffffffffffffffffffffffffffffffffffffff1663095ea7b36002600087600a81111561132d5761132d611713565b600a81111561133e5761133e611713565b81526020810191909152604090810160002054905160e083901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602481018590526044016020604051808303816000875af11580156113c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e69190611a3b565b506002600085600a8111156113fd576113fd611713565b600a81111561140e5761140e611713565b8152602081019190915260409081016000205490517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810184905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f1990604401600060405180830381600087803b158015610fd857600080fd5b60016003600085600a8111156114a7576114a7611713565b600a8111156114b8576114b8611713565b815260208101919091526040016000205460ff1660048111156114dd576114dd611713565b14156115b4576002600084600a8111156114f9576114f9611713565b600a81111561150a5761150a611713565b8152602081019190915260409081016000205490517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f19906044016020604051808303816000875af1158015611590573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a49190611a3b565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f74657374546f6b656e53756974653a20547279696e6720746f207472616e736660448201527f657220756e6b6e6f776e20746f6b656e000000000000000000000000000000006064820152608401610990565b6002600084600a81111561165257611652611713565b600a81111561166357611663611713565b8152602081019190915260409081016000205490517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490529091169063a9059cbb90604401610a2a565b73ffffffffffffffffffffffffffffffffffffffff811681146116f357600080fd5b50565b60006020828403121561170857600080fd5b8135610881816116d1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60208101600b831061175657611756611713565b91905290565b60006020828403121561176e57600080fd5b5035919050565b8035600b8110610cfb57600080fd5b60006020828403121561179657600080fd5b61088182611775565b60005b838110156117ba5781810151838201526020016117a2565b83811115610a6d5750506000910152565b60208152600082518060208401526117ea81604085016020870161179f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000806080858703121561183257600080fd5b61183b85611775565b9350602085013561184b816116d1565b9250604085013561185b816116d1565b9396929550929360600135925050565b602080825282518282018190526000919060409081850190868401855b828110156118c7578151805173ffffffffffffffffffffffffffffffffffffffff90811686529087015116868501529284019290850190600101611888565b5091979650505050505050565b600080604083850312156118e757600080fd5b6118f083611775565b91506020830135611900816116d1565b809150509250929050565b60008060006060848603121561192057600080fd5b61192984611775565b92506020840135611939816116d1565b91506040840135611949816116d1565b809150509250925092565b60008060006060848603121561196957600080fd5b61197284611775565b92506020840135611982816116d1565b929592945050506040919091013590565b6000806000606084860312156119a857600080fd5b8335611929816116d1565b6000806000606084860312156119c857600080fd5b8335611972816116d1565b602081016005831061175657611756611713565b600181811c908216806119fb57607f821691505b60208210811415611a35577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600060208284031215611a4d57600080fd5b8151801515811461088157600080fd5b600060208284031215611a6f57600080fd5b5051919050565b7fffffffff000000000000000000000000000000000000000000000000000000008316815260008251611ab081600485016020870161179f565b919091016004019392505050565b60008251611ad081846020870161179f565b9190910192915050565b600060208284031215611aec57600080fd5b8151610881816116d156fea264697066735822122010fe735ed069aca27931edce4ba2ff14ec7886bf21b0eea685a884f9200fb49e64736f6c634300080a003360c0604052600d60808190526c2bb930b83832b21022ba3432b960991b60a090815261002e916000919061007a565b50604080518082019091526004808252630ae8aa8960e31b602090920191825261005a9160019161007a565b506002805460ff1916601217905534801561007457600080fd5b5061014e565b82805461008690610113565b90600052602060002090601f0160209004810192826100a857600085556100ee565b82601f106100c157805160ff19168380011785556100ee565b828001600101855582156100ee579182015b828111156100ee5782518255916020019190600101906100d3565b506100fa9291506100fe565b5090565b5b808211156100fa57600081556001016100ff565b600181811c9082168061012757607f821691505b6020821081141561014857634e487b7160e01b600052602260045260246000fd5b50919050565b6109548061015d6000396000f3fe6080604052600436106100cb5760003560e01c806340c10f1911610074578063a9059cbb1161004e578063a9059cbb14610225578063d0e30db014610245578063dd62ed3e1461024d57600080fd5b806340c10f19146101c357806370a08231146101e357806395d89b411461021057600080fd5b806323b872dd116100a557806323b872dd146101575780632e1a7d4d14610177578063313ce5671461019757600080fd5b806306fdde03146100df578063095ea7b31461010a57806318160ddd1461013a57600080fd5b366100da576100d8610285565b005b600080fd5b3480156100eb57600080fd5b506100f46102e0565b6040516101019190610703565b60405180910390f35b34801561011657600080fd5b5061012a61012536600461079f565b61036e565b6040519015158152602001610101565b34801561014657600080fd5b50475b604051908152602001610101565b34801561016357600080fd5b5061012a6101723660046107c9565b6103e7565b34801561018357600080fd5b506100d8610192366004610805565b6105fe565b3480156101a357600080fd5b506002546101b19060ff1681565b60405160ff9091168152602001610101565b3480156101cf57600080fd5b506100d86101de36600461079f565b6106a4565b3480156101ef57600080fd5b506101496101fe36600461081e565b60036020526000908152604090205481565b34801561021c57600080fd5b506100f46106e2565b34801561023157600080fd5b5061012a61024036600461079f565b6106ef565b6100d8610285565b34801561025957600080fd5b50610149610268366004610839565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102a490849061089b565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102ed906108b3565b80601f0160208091040260200160405190810160405280929190818152602001828054610319906108b3565b80156103665780601f1061033b57610100808354040283529160200191610366565b820191906000526020600020905b81548152906001019060200180831161034957829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103d69086815260200190565b60405180910390a350600192915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561041957600080fd5b73ffffffffffffffffffffffffffffffffffffffff8416331480159061048f575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105175773ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020548211156104d157600080fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915281208054849290610511908490610907565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061054c908490610907565b909155505073ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260408120805484929061058690849061089b565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516105ec91815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561061a57600080fd5b3360009081526003602052604081208054839290610639908490610907565b9091555050604051339082156108fc029083906000818181858888f1935050505015801561066b573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260036020526040812080548392906106d990849061089b565b90915550505050565b600180546102ed906108b3565b60006106fc3384846103e7565b9392505050565b600060208083528351808285015260005b8181101561073057858101830151858201604001528201610714565b81811115610742576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461079a57600080fd5b919050565b600080604083850312156107b257600080fd5b6107bb83610776565b946020939093013593505050565b6000806000606084860312156107de57600080fd5b6107e784610776565b92506107f560208501610776565b9150604084013590509250925092565b60006020828403121561081757600080fd5b5035919050565b60006020828403121561083057600080fd5b6106fc82610776565b6000806040838503121561084c57600080fd5b61085583610776565b915061086360208401610776565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156108ae576108ae61086c565b500190565b600181811c908216806108c757607f821691505b60208210811415610901577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000828210156109195761091961086c565b50039056fea26469706673582212206ec943fa4e3b70d8fca6c25b6aa26fa18e8f8952ce3bc4d5afcb443bf3097c0564736f6c634300080a003360806040526000600255600060035534801561001a57600080fd5b506111fa8061002a6000396000f3fe60806040526004361061016e5760003560e01c80637a28fb88116100cb578063bdd17e1c1161007f578063dd62ed3e11610059578063dd62ed3e146103ee578063ee7a7c0414610441578063f5eb42dc1461046157600080fd5b8063bdd17e1c146103ad578063cdb9a21c146103c3578063d5002f2e146103d957600080fd5b8063a1903eab116100b0578063a1903eab1461035a578063a457c2d71461036d578063a9059cbb1461038d57600080fd5b80637a28fb88146102f457806395d89b411461031457600080fd5b806323b872dd1161012257806337cfdaca1161010757806337cfdaca1461020d57806339509351146102b457806370a08231146102d457600080fd5b806323b872dd14610278578063313ce5671461029857600080fd5b806318160ddd1161015357806318160ddd1461020d578063192084511461023057806322301f6e1461025057600080fd5b806306fdde0314610185578063095ea7b3146101dd57600080fd5b366101805761017d6000610481565b50005b600080fd5b34801561019157600080fd5b5060408051808201909152601781527f4c6971756964207374616b656420457468657220322e3000000000000000000060208201525b6040516101d49190610f63565b60405180910390f35b3480156101e957600080fd5b506101fd6101f8366004610fff565b610545565b60405190151581526020016101d4565b34801561021957600080fd5b5061022261055b565b6040519081526020016101d4565b34801561023c57600080fd5b5061022261024b366004611029565b61056b565b34801561025c57600080fd5b5061027661026b366004611042565b600391909155600255565b005b34801561028457600080fd5b506101fd610293366004611064565b6105ab565b3480156102a457600080fd5b50604051601281526020016101d4565b3480156102c057600080fd5b506101fd6102cf366004610fff565b610696565b3480156102e057600080fd5b506102226102ef3660046110a0565b6106d9565b34801561030057600080fd5b5061022261030f366004611029565b61070e565b34801561032057600080fd5b5060408051808201909152600581527f737445544800000000000000000000000000000000000000000000000000000060208201526101c7565b6102226103683660046110a0565b61073a565b34801561037957600080fd5b506101fd610388366004610fff565b610745565b34801561039957600080fd5b506101fd6103a8366004610fff565b6107f9565b3480156103b957600080fd5b5061022260035481565b3480156103cf57600080fd5b5061022260025481565b3480156103e557600080fd5b50610222610806565b3480156103fa57600080fd5b506102226104093660046110bb565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b34801561044d57600080fd5b5061027661045c366004610fff565b610811565b34801561046d57600080fd5b5061022261047c3660046110a0565b61081f565b60003334806104f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f5a45524f5f4445504f534954000000000000000000000000000000000000000060448201526064015b60405180910390fd5b60006104fc8261056b565b9050806105065750805b8160036000828254610518919061111d565b909155506105289050838261084a565b61053383838761093b565b61053d8382610992565b949350505050565b60006105523384846109ea565b50600192915050565b600061056660035490565b905090565b60008061057760035490565b9050806105875750600092915050565b6105a48161059e61059760025490565b8690610b52565b90610b5e565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001602090815260408083203384529091528120548281101561066c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f5452414e534645525f414d4f554e545f455843454544535f414c4c4f57414e4360448201527f450000000000000000000000000000000000000000000000000000000000000060648201526084016104e8565b610677858585610b6a565b61068b85336106868487610bef565b6109ea565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916105529185906106869086610bfb565b73ffffffffffffffffffffffffffffffffffffffff81166000908152602081905260408120546107089061070e565b92915050565b60008061071a60025490565b90508061072a5750600092915050565b6105a48161059e61059760035490565b600061070882610481565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156107e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4445435245415345445f414c4c4f57414e43455f42454c4f575f5a45524f000060448201526064016104e8565b6107ef33856106868487610bef565b5060019392505050565b6000610552338484610b6a565b600061056660025490565b61081b8282610c07565b5050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040812054610708565b73ffffffffffffffffffffffffffffffffffffffff82166108c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4d494e545f544f5f5448455f5a45524f5f41444452455353000000000000000060448201526064016104e8565b80600260008282546108d9919061111d565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205461090e9082610bfb565b73ffffffffffffffffffffffffffffffffffffffff90921660009081526020819052604090209190915550565b6040805183815273ffffffffffffffffffffffffffffffffffffffff83811660208301528516917fed8dd430b1e4bba98e943dc5b157cf7b54d9e12916d6c474ff5733a95001d03b910160405180910390a2505050565b73ffffffffffffffffffffffffffffffffffffffff821660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6109d58461070e565b60405190815260200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff8316610a67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f415050524f56455f46524f4d5f5a45524f5f414444524553530000000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff8216610ae4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f415050524f56455f544f5f5a45524f5f4144445245535300000000000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006105a48284611135565b60006105a48284611172565b6000610b758261056b565b9050610b82848483610d64565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610be191815260200190565b60405180910390a350505050565b60006105a482846111ad565b60006105a4828461111d565b73ffffffffffffffffffffffffffffffffffffffff8216610c84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4255524e5f46524f4d5f5448455f5a45524f5f4144445245535300000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205480821115610d14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4255524e5f414d4f554e545f455843454544535f42414c414e4345000000000060448201526064016104e8565b8160026000828254610d2691906111ad565b90915550610d3690508183610bef565b73ffffffffffffffffffffffffffffffffffffffff9093166000908152602081905260409020929092555050565b73ffffffffffffffffffffffffffffffffffffffff8316610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f5452414e534645525f46524f4d5f5448455f5a45524f5f41444452455353000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff8216610e5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f5452414e534645525f544f5f5448455f5a45524f5f414444524553530000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205480821115610eee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5452414e534645525f414d4f554e545f455843454544535f42414c414e43450060448201526064016104e8565b610ef88183610bef565b73ffffffffffffffffffffffffffffffffffffffff8086166000908152602081905260408082209390935590851681522054610f349083610bfb565b73ffffffffffffffffffffffffffffffffffffffff909316600090815260208190526040902092909255505050565b600060208083528351808285015260005b81811015610f9057858101830151858201604001528201610f74565b81811115610fa2576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ffa57600080fd5b919050565b6000806040838503121561101257600080fd5b61101b83610fd6565b946020939093013593505050565b60006020828403121561103b57600080fd5b5035919050565b6000806040838503121561105557600080fd5b50508035926020909101359150565b60008060006060848603121561107957600080fd5b61108284610fd6565b925061109060208501610fd6565b9150604084013590509250925092565b6000602082840312156110b257600080fd5b6105a482610fd6565b600080604083850312156110ce57600080fd5b6110d783610fd6565b91506110e560208401610fd6565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611130576111306110ee565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561116d5761116d6110ee565b500290565b6000826111a8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000828210156111bf576111bf6110ee565b50039056fea2646970667358221220a5b4f31162ba2b8b3424cef84b31ef91d05a825243602b5fdf758ffb49b8246364736f6c634300080a003360a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a003360c06040523480156200001157600080fd5b506040516200170938038062001709833981016040819052620000349162000266565b8351849084906200004d906003906020850190620000f3565b50805162000063906004906020840190620000f3565b505050620000806200007a6200009d60201b60201c565b620000a1565b60ff9091166080526001600160a01b031660a05250620003479050565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b82805462000101906200030a565b90600052602060002090601f01602090048101928262000125576000855562000170565b82601f106200014057805160ff191683800117855562000170565b8280016001018555821562000170579182015b828111156200017057825182559160200191906001019062000153565b506200017e92915062000182565b5090565b5b808211156200017e576000815560010162000183565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c157600080fd5b81516001600160401b0380821115620001de57620001de62000199565b604051601f8301601f19908116603f0116810190828211818310171562000209576200020962000199565b816040528381526020925086838588010111156200022657600080fd5b600091505b838210156200024a57858201830151818301840152908201906200022b565b838211156200025c5760008385830101525b9695505050505050565b600080600080608085870312156200027d57600080fd5b84516001600160401b03808211156200029557600080fd5b620002a388838901620001af565b95506020870151915080821115620002ba57600080fd5b50620002c987828801620001af565b935050604085015160ff81168114620002e157600080fd5b60608601519092506001600160a01b0381168114620002ff57600080fd5b939692955090935050565b600181811c908216806200031f57607f821691505b602082108114156200034157634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05161138e6200037b600039600081816101f70152818161041f0152610600015260006101a2015261138e6000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80636f307dc3116100b257806395d89b4111610081578063a9059cbb11610066578063a9059cbb146102b5578063dd62ed3e146102c8578063f2fde38b1461030e57600080fd5b806395d89b411461029a578063a457c2d7146102a257600080fd5b80636f307dc3146101f257806370a082311461023e578063715018a6146102745780638da5cb5b1461027c57600080fd5b806323b872dd116100ee57806323b872dd14610188578063313ce5671461019b57806339509351146101cc57806340c10f19146101df57600080fd5b806306fdde0314610120578063095ea7b31461013e57806318160ddd146101615780631e9a695014610173575b600080fd5b610128610321565b604051610135919061112d565b60405180910390f35b61015161014c3660046111c9565b6103b3565b6040519015158152602001610135565b6002545b604051908152602001610135565b6101866101813660046111c9565b6103c9565b005b6101516101963660046111f3565b610491565b60405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610135565b6101516101da3660046111c9565b61057c565b6101866101ed3660046111c9565b6105c5565b6102197f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b61016561024c36600461122f565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610186610691565b60055473ffffffffffffffffffffffffffffffffffffffff16610219565b61012861071e565b6101516102b03660046111c9565b61072d565b6101516102c33660046111c9565b610805565b6101656102d6366004611251565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b61018661031c36600461122f565b610812565b60606003805461033090611284565b80601f016020809104026020016040519081016040528092919081815260200182805461035c90611284565b80156103a95780601f1061037e576101008083540402835291602001916103a9565b820191906000526020600020905b81548152906001019060200180831161038c57829003601f168201915b5050505050905090565b60006103c0338484610942565b50600192915050565b6103d33382610af5565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015610468573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048c91906112d8565b505050565b600061049e848484610ce2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6105718533858403610942565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916103c09185906105c0908690611329565b610942565b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906323b872dd906064016020604051808303816000875af115801561065e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068291906112d8565b5061068d8282610f96565b5050565b60055473ffffffffffffffffffffffffffffffffffffffff163314610712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161055b565b61071c60006110b6565b565b60606004805461033090611284565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156107ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161055b565b6107fb3385858403610942565b5060019392505050565b60006103c0338484610ce2565b60055473ffffffffffffffffffffffffffffffffffffffff163314610893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161055b565b73ffffffffffffffffffffffffffffffffffffffff8116610936576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161055b565b61093f816110b6565b50565b73ffffffffffffffffffffffffffffffffffffffff83166109e4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff8216610a87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8216610b98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015610c4e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290610c8a908490611341565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff8216610e28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610ede576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610f22908490611329565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f8891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161055b565b80600260008282546110259190611329565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152602081905260408120805483929061105f908490611329565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208083528351808285015260005b8181101561115a5785810183015185820160400152820161113e565b8181111561116c576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146111c457600080fd5b919050565b600080604083850312156111dc57600080fd5b6111e5836111a0565b946020939093013593505050565b60008060006060848603121561120857600080fd5b611211846111a0565b925061121f602085016111a0565b9150604084013590509250925092565b60006020828403121561124157600080fd5b61124a826111a0565b9392505050565b6000806040838503121561126457600080fd5b61126d836111a0565b915061127b602084016111a0565b90509250929050565b600181811c9082168061129857607f821691505b602082108114156112d2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156112ea57600080fd5b8151801515811461124a57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561133c5761133c6112fa565b500190565b600082821015611353576113536112fa565b50039056fea26469706673582212203a6db30cd3c097921df4156794aa7973eb848711deeb2cffd7c54a9df1fdb0a564736f6c634300080a003360a060405234801561001057600080fd5b506040516106ca3803806106ca83398101604081905261002f9161006c565b60009190915560ff166080526001805460506001600160501b031991821681179092556004805490911690911790554260028190556003556100a2565b6000806040838503121561007f57600080fd5b82519150602083015160ff8116811461009757600080fd5b809150509250929050565b60805161060e6100bc600039600060d3015261060e6000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80639a6fc8f511610081578063d62ada111161005b578063d62ada11146102dc578063f7a30806146102f4578063feaf968c1461030757600080fd5b80639a6fc8f5146101cd578063bd18ad531461023a578063cd653afc1461024d57600080fd5b806354fd4d50116100b257806354fd4d501461012d57806367e8d83d1461013c5780637284e4161461018e57600080fd5b8063313ce567146100ce5780633fd0875f1461010c575b600080fd5b6100f57f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020015b60405180910390f35b6004546a0100000000000000000000900460ff166040516101039190610441565b60405160018152602001610103565b61018c61014a366004610482565b600480549115156c01000000000000000000000000027fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff909216919091179055565b005b604080518082018252600c81527f7072696365206f7261636c6500000000000000000000000000000000000000006020820152905161010391906104ab565b6102036101db36600461053d565b60015460005460025460035460045469ffffffffffffffffffff948516941691939590929450565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610103565b61018c610248366004610558565b61030f565b61018c61025b366004610579565b6001805469ffffffffffffffffffff9586167fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090911617905560029290925560035560048054919092167fffffffffffffffffffffffffffffffffffffffff00ff00000000000000000000909116176b020000000000000000000000179055565b6102e461035f565b6040519015158152602001610103565b61018c6103023660046105bf565b600055565b610203610385565b600480548291907fffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff166b01000000000000000000000083600281111561035757610357610412565b021790555050565b600454600090610380906b010000000000000000000000900460ff166103d6565b905090565b60008060008060006004600c9054906101000a900460ff16156103a757600080fd5b505060015460005460025460035460045469ffffffffffffffffffff9485169893975091955093509190911690565b600060028260028111156103ec576103ec610412565b14156103f757600080fd5b600182600281111561040b5761040b610412565b1492915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016006831061047c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561049457600080fd5b813580151581146104a457600080fd5b9392505050565b600060208083528351808285015260005b818110156104d8578581018301518582016040015282016104bc565b818111156104ea576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803569ffffffffffffffffffff8116811461053857600080fd5b919050565b60006020828403121561054f57600080fd5b6104a48261051e565b60006020828403121561056a57600080fd5b8135600381106104a457600080fd5b6000806000806080858703121561058f57600080fd5b6105988561051e565b935060208501359250604085013591506105b46060860161051e565b905092959194509250565b6000602082840312156105d157600080fd5b503591905056fea264697066735822122014874f7a973b86501c4c1a8be32490fe902c8f088ee234d25f9b2497e19f9e5264736f6c634300080a003360806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d00011790553480156200003a57600080fd5b5060405162031ed638038062031ed68339810160408190526200005d91620015e8565b81816040516200006d9062001595565b604051809103906000f0801580156200008a573d6000803e3d6000fd5b5050600180546001600160a01b0319166001600160a01b038416908117909155604080516325abd85f60e11b81529051634b57b0be916004808201926020929091908290030181865afa158015620000e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200010c91906200162a565b73c4375b7de8af5a38a93548eb8453a498222c4ff26040516200012f90620015a3565b6001600160a01b03928316815291166020820152604001604051809103906000f08015801562000163573d6000803e3d6000fd5b50600380546001600160a01b0319166001600160a01b039290921691821790556040805163de28735960e01b8152905163de287359916004808201926020929091908290030181865afa158015620001bf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e591906200162a565b604051634910832f60e01b81527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526001600160a01b039190911690634910832f90602401600060405180830381600087803b1580156200023d57600080fd5b505af115801562000252573d6000803e3d6000fd5b50505050600360009054906101000a90046001600160a01b03166001600160a01b031663de2873596040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d091906200162a565b60035460405163f2fde38b60e01b81526001600160a01b03918216600482015291169063f2fde38b90602401600060405180830381600087803b1580156200031757600080fd5b505af11580156200032c573d6000803e3d6000fd5b505060035460015460408051636ca42ae360e01b815290516001600160a01b039384169550638874ff1f94509190921691636ca42ae39160048083019260009291908290030181865afa15801562000388573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620003b29190810190620016c5565b6040518263ffffffff1660e01b8152600401620003d09190620017b6565b600060405180830381600087803b158015620003eb57600080fd5b505af115801562000400573d6000803e3d6000fd5b50505050600360009054906101000a90046001600160a01b03166001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000458573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200047e91906200162a565b600280546001600160a01b0319166001600160a01b039290921691821790556040805163120d150d60e31b81529051639068a868916004808201926020929091908290030181865afa158015620004d9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004ff91906200162a565b600480546001600160a01b0319166001600160a01b0392831617815560025460408051631f94a27560e31b81529051919093169263fca513a892818101926020929091908290030181865afa1580156200055d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200058391906200162a565b600880546001600160a01b0319166001600160a01b0392831617905560025460408051630873769560e01b81529051919092169163087376959160048083019260209291908290030181865afa158015620005e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200060891906200162a565b600780546001600160a01b0319166001600160a01b039283161790556002546040805163c513c9bb60e01b81529051919092169163c513c9bb9160048083019260209291908290030181865afa15801562000667573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200068d91906200162a565b600680546001600160a01b0319166001600160a01b039283161790556001546040516367b4264560e01b81529116906367b4264590620006d29084906004016200184d565b602060405180830381865afa158015620006f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200071691906200162a565b600980546001600160a01b0319166001600160a01b0392831617905560035460408051630a55006360e21b815290519190921691632954018c9160048083019260209291908290030181865afa15801562000775573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200079b91906200162a565b6009546040516001600160a01b0390911690620007b890620015b2565b6001600160a01b03928316815291166020820152604001604051809103906000f080158015620007ec573d6000803e3d6000fd5b50600580546001600160a01b0319166001600160a01b039283169081179091556001549091169063eebab8ef90839062000825620011ec565b6200083290600a62001879565b6040518463ffffffff1660e01b815260040162000852939291906200189b565b600060405180830381600087803b1580156200086d57600080fd5b505af115801562000882573d6000803e3d6000fd5b505060065460055460405163d914cd4b60e01b81526001600160a01b0391821660048201529116925063d914cd4b9150602401600060405180830381600087803b158015620008d057600080fd5b505af1158015620008e5573d6000803e3d6000fd5b5050600f80546001600160801b031916670de0b6b3a76400001790555062000911925050620011ec9050565b6200091e90600a62001879565b600f80546001600160801b03908116600160801b9382168402818117938490556040805160a0810182529184169092178152939092041660208301526000919081016200096b84620012ab565b815260006020820181905260409182018190526005549151929350916001600160a01b039091169083908390620009a290620015c0565b620009b093929190620018c5565b604051809103906000f080158015620009cd573d6000803e3d6000fd5b509050806001600160a01b031663c12c21c06040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a0f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a3591906200162a565b600b60006101000a8154816001600160a01b0302191690836001600160a01b03160217905550806001600160a01b0316632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a9a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ac091906200162a565b600c60006101000a8154816001600160a01b0302191690836001600160a01b03160217905550806001600160a01b031663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000b25573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b4b91906200162a565b600d80546001600160a01b0319166001600160a01b03928316179055600654600b5460405163e26b2f6360e01b8152908316600482015291169063e26b2f6390602401600060405180830381600087803b15801562000ba957600080fd5b505af115801562000bbe573d6000803e3d6000fd5b5050600054600554604080516318caf8e360e31b81526001600160a01b039283166004808301919091526024820192909252604481019190915263141bdbdb60e21b60648201526201000090920416925063c657c7189150608401600060405180830381600087803b15801562000c3457600080fd5b505af115801562000c49573d6000803e3d6000fd5b5050600054600c8054604080516318caf8e360e31b81526001600160a01b039283166004820152602481019190915260448101929092526b43726564697446616361646560a01b606483015262010000909204909116925063c657c7189150608401600060405180830381600087803b15801562000cc657600080fd5b505af115801562000cdb573d6000803e3d6000fd5b5050600054600b54604080516318caf8e360e31b81526001600160a01b0392831660048201526024810191909152600d60448201526c21b932b234ba26b0b730b3b2b960991b60648201526201000090920416925063c657c7189150608401600060405180830381600087803b15801562000d5557600080fd5b505af115801562000d6a573d6000803e3d6000fd5b5050600054600d54604080516318caf8e360e31b81526001600160a01b0392831660048201526024810191909152601260448201527121b932b234ba21b7b73334b3bab930ba37b960711b60648201526201000090920416925063c657c7189150608401600060405180830381600087803b15801562000de957600080fd5b505af115801562000dfe573d6000803e3d6000fd5b50506001546001600160a01b0316915063eebab8ef90508473f39fd6e51aad88f6f4ce6ab8827279cfffb9226662000e35620011ec565b6040518463ffffffff1660e01b815260040162000e55939291906200189b565b600060405180830381600087803b15801562000e7057600080fd5b505af115801562000e85573d6000803e3d6000fd5b50506001546001600160a01b0316915063eebab8ef9050847390f79bf6eb2c4f870365e785982e1f101e93b90662000ebc620011ec565b6040518463ffffffff1660e01b815260040162000edc939291906200189b565b600060405180830381600087803b15801562000ef757600080fd5b505af115801562000f0c573d6000803e3d6000fd5b505060005460405163ca669fa760e01b815273f39fd6e51aad88f6f4ce6ab8827279cfffb922666004820152620100009091046001600160a01b0316925063ca669fa79150602401600060405180830381600087803b15801562000f6f57600080fd5b505af115801562000f84573d6000803e3d6000fd5b5050600954600b5460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529116925063095ea7b391506044016020604051808303816000875af115801562000fdf573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001005919062001989565b5060005460405163ca669fa760e01b81527390f79bf6eb2c4f870365e785982e1f101e93b9066004820152620100009091046001600160a01b03169063ca669fa790602401600060405180830381600087803b1580156200106557600080fd5b505af11580156200107a573d6000803e3d6000fd5b5050600954600b5460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529116925063095ea7b391506044016020604051808303816000875af1158015620010d5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010fb919062001989565b5060025460405163f2fde38b60e01b81527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526001600160a01b039091169063f2fde38b90602401600060405180830381600087803b1580156200115657600080fd5b505af11580156200116b573d6000803e3d6000fd5b505060075460405163f2fde38b60e01b81527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b158015620011c957600080fd5b505af1158015620011de573d6000803e3d6000fd5b5050505050505050620019e1565b600180546040516367b4264560e01b81526000926001600160a01b03909216916367b42645916200122191906004016200184d565b602060405180830381865afa1580156200123f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200126591906200162a565b6009546001600160a01b03908116911614620012955762001290670de0b6b3a764000060c862001879565b905090565b62001290670de0b6b3a7640000614e2062001879565b6040805160c08101825260026080820190815261232860a08301528152815180830183526005815261226060208281019190915282015281518083018352606092600092919082019080600387600a8111156200130c576200130c62001814565b146200131a5760036200131d565b60015b600a81111562001331576200133162001814565b815261206c6020918201529082526040805180820190915260048152611c84818301529101529050612454600a6000858281111562001374576200137462001814565b600a81111562001388576200138862001814565b815260208101919091526040908101600020805461ffff9390931661ffff19909316929092179091558051600480825260a0820190925281816020015b6040805180820190915260008082526020820152815260200190600190039081620013c557905050925060005b818110156200158d57828160048110620014105762001410620019ad565b602002015160200151600a6000858460048110620014325762001432620019ad565b602002015151600a8111156200144c576200144c62001814565b600a81111562001460576200146062001814565b815260208101919091526040908101600020805461ffff191661ffff9390931692909217909155805180820190915260015481906001600160a01b03166367b42645868560048110620014b757620014b7620019ad565b6020020151516040516001600160e01b031960e084901b168152620014e091906004016200184d565b602060405180830381865afa158015620014fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200152491906200162a565b6001600160a01b03168152602001848360048110620015475762001547620019ad565b60200201516020015161ffff168152508482815181106200156c576200156c620019ad565b602002602001018190525080806200158490620019c3565b915050620013f2565b505050919050565b6105e6806200bc5283390190565b62011105806200c23883390190565b6110a7806201d33d83390190565b62013af2806201e3e483390190565b6001600160a01b0381168114620015e557600080fd5b50565b60008060408385031215620015fc57600080fd5b82516200160981620015cf565b6020840151909250600b81106200161f57600080fd5b809150509250929050565b6000602082840312156200163d57600080fd5b81516200164a81620015cf565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156200168c576200168c62001651565b60405290565b604051601f8201601f191681016001600160401b0381118282101715620016bd57620016bd62001651565b604052919050565b60006020808385031215620016d957600080fd5b82516001600160401b0380821115620016f157600080fd5b818501915085601f8301126200170657600080fd5b8151818111156200171b576200171b62001651565b6200172b848260051b0162001692565b818152848101925060069190911b8301840190878211156200174c57600080fd5b928401925b81841015620017ab57604084890312156200176c5760008081fd5b6200177662001667565b84516200178381620015cf565b8152848601516200179481620015cf565b818701528352604093909301929184019162001751565b979650505050505050565b602080825282518282018190526000919060409081850190868401855b828110156200180757815180516001600160a01b0390811686529087015116868501529284019290850190600101620017d3565b5091979650505050505050565b634e487b7160e01b600052602160045260246000fd5b600b81106200184957634e487b7160e01b600052602160045260246000fd5b9052565b602081016200185d82846200182a565b92915050565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161562001896576200189662001863565b500290565b60608101620018ab82866200182a565b6001600160a01b0393909316602082015260400152919050565b6001600160a01b0384811682526060602080840182905285516001600160801b039081169285019290925285810151909116608084015260408086015160a085810152805161010086018190526000949392918301919085906101208801905b808310156200195657845180518816835286015161ffff168683015293850193600192909201919083019062001925565b5060608a01516001600160a01b031660c0890152608090990151151560e088015250909401949094525092949350505050565b6000602082840312156200199c57600080fd5b815180151581146200164a57600080fd5b634e487b7160e01b600052603260045260246000fd5b6000600019821415620019da57620019da62001863565b5060010190565b61a26180620019f16000396000f3fe60806040523480156200001157600080fd5b5060043610620001ad5760003560e01c806362eb33e311620000f5578063ba414fa61162000097578063de287359116200006e578063de2873591462000479578063f9aa028a146200049a578063fa7626d414620004bb57600080fd5b8063ba414fa6146200041c578063c12c21c01462000437578063d46b9330146200045857600080fd5b80637785ff5d11620000cc5780637785ff5d14620003da5780639408b63f14620003e45780639dd55b45146200040557600080fd5b806362eb33e314620003775780636b70b04c14620003985780636f307dc314620003b957600080fd5b80632f7a1881116200015f5780635e813a8b11620001365780635e813a8b146200030c5780635f7c9bd0146200032d57806362186905146200034657600080fd5b80632f7a188114620002be578063406c8e2f14620002df57806354cae56e146200030057600080fd5b80630e42bc5d11620001945780630e42bc5d14620002305780632630c12f14620002565780632954018c146200029d57600080fd5b80630bc772da14620001b25780630c75f80614620001f5575b600080fd5b600f54620001cf906fffffffffffffffffffffffffffffffff1681565b6040516fffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6200021c62000206366004620012dd565b600a6020526000908152604090205461ffff1681565b60405161ffff9091168152602001620001ec565b6200024762000241366004620012dd565b620004c9565b604051620001ec919062001307565b600854620002779073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001620001ec565b600254620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600c54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600154620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200030a6200081f565b005b600454620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200033762000b1a565b604051908152602001620001ec565b600f54620001cf9070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681565b600654620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600554620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600954620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200030a62000c0c565b600e54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200030a6200041636600462001398565b62000fd6565b6200042662001149565b6040519015158152602001620001ec565b600b54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600354620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600754620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600d54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600054620004269060ff1681565b6040805160c08101825260026080820190815261232860a08301528152815180830183526005815261226060208281019190915282015281518083018352606092600092919082019080600387600a8111156200052a576200052a620013c7565b14620005385760036200053b565b60015b600a8111156200054f576200054f620013c7565b815261206c6020918201529082526040805180820190915260048152611c84818301529101529050612454600a60008582811115620005925762000592620013c7565b600a811115620005a657620005a6620013c7565b815260208101919091526040908101600020805461ffff939093167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909316929092179091558051600480825260a0820190925281816020015b60408051808201909152600080825260208201528152602001906001900390816200060057905050925060005b8181101562000817578281600481106200064b576200064b620013f6565b602002015160200151600a60008584600481106200066d576200066d620013f6565b602002015151600a811115620006875762000687620013c7565b600a8111156200069b576200069b620013c7565b81526020810191909152604090810160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff93909316929092179091558051808201909152600154819073ffffffffffffffffffffffffffffffffffffffff166367b426458685600481106200071c576200071c620013f6565b6020020151516040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526200075d919060040162001425565b602060405180830381865afa1580156200077b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007a1919062001467565b73ffffffffffffffffffffffffffffffffffffffff168152602001848360048110620007d157620007d1620013f6565b60200201516020015161ffff16815250848281518110620007f657620007f6620013f6565b602002602001018190525080806200080e90620014b6565b9150506200062d565b505050919050565b6000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16906306447d5690602401600060405180830381600087803b158015620008a457600080fd5b505af1158015620008b9573d6000803e3d6000fd5b5050600b5460405173ffffffffffffffffffffffffffffffffffffffff909116925060009150600190620008ed90620012b3565b73ffffffffffffffffffffffffffffffffffffffff938416815292909116602083015215156040820152606001604051809103906000f08015801562000937573d6000803e3d6000fd5b50600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316908117909155600d546040517f526a41e80000000000000000000000000000000000000000000000000000000081526004810192909252600160248301529091169063526a41e890604401600060405180830381600087803b158015620009dc57600080fd5b505af1158015620009f1573d6000803e3d6000fd5b5050600d5473ffffffffffffffffffffffffffffffffffffffff16915063eb9606df905062000a22426001620014f2565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815264ffffffffff90911660048201526024015b600060405180830381600087803b15801562000a7b57600080fd5b505af115801562000a90573d6000803e3d6000fd5b50505050600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562000aff57600080fd5b505af115801562000b14573d6000803e3d6000fd5b50505050565b600180546040517f67b4264500000000000000000000000000000000000000000000000000000000815260009273ffffffffffffffffffffffffffffffffffffffff909216916367b426459162000b75919060040162001425565b602060405180830381865afa15801562000b93573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000bb9919062001467565b60095473ffffffffffffffffffffffffffffffffffffffff90811691161462000bf65762000bf1670de0b6b3a764000060c86200150d565b905090565b62000bf1670de0b6b3a7640000614e206200150d565b60025460405173ffffffffffffffffffffffffffffffffffffffff9091169062000c3690620012c1565b73ffffffffffffffffffffffffffffffffffffffff90911681526060602082018190526008908201527f446567656e4e4654000000000000000000000000000000000000000000000000608082015260a060408201819052600a908201527f476561722d446567656e0000000000000000000000000000000000000000000060c082015260e001604051809103906000f08015801562000cda573d6000803e3d6000fd5b50600e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283161790556000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015262010000909104909116906306447d5690602401600060405180830381600087803b15801562000d8e57600080fd5b505af115801562000da3573d6000803e3d6000fd5b5050600e546040517ffca3b5aa0000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff909116925063fca3b5aa9150602401600060405180830381600087803b15801562000e2757600080fd5b505af115801562000e3c573d6000803e3d6000fd5b5050600b54600e5460405173ffffffffffffffffffffffffffffffffffffffff92831694509116915060009062000e7390620012b3565b73ffffffffffffffffffffffffffffffffffffffff938416815292909116602083015215156040820152606001604051809103906000f08015801562000ebd573d6000803e3d6000fd5b50600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316908117909155600d546040517f526a41e80000000000000000000000000000000000000000000000000000000081526004810192909252600160248301529091169063526a41e890604401600060405180830381600087803b15801562000f6257600080fd5b505af115801562000f77573d6000803e3d6000fd5b5050600e54600c546040517f4610f6ac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015291169250634610f6ac915060240162000a60565b600081600860405162000fe990620012cf565b91825260ff166020820152604001604051809103906000f08015801562001014573d6000803e3d6000fd5b506000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291925062010000900473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b1580156200109c57600080fd5b505af1158015620010b1573d6000803e3d6000fd5b50506008546040517fe8a97a3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528581166024830152909116925063e8a97a3e9150604401600060405180830381600087803b1580156200112b57600080fd5b505af115801562001140573d6000803e3d6000fd5b50505050505050565b60008054610100900460ff16156200116a5750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620012ae5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000008284015282518083038401815260608301909352600092909162001212917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016200158b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526200124c91620015c9565b6000604051808303816000865af19150503d80600081146200128b576040519150601f19603f3d011682016040523d82523d6000602084013e62001290565b606091505b5091505080806020019051810190620012aa9190620015d7565b9150505b919050565b615e9780620015fc83390190565b6126cf806200749383390190565b6106ca8062009b6283390190565b600060208284031215620012f057600080fd5b8135600b81106200130057600080fd5b9392505050565b602080825282518282018190526000919060409081850190868401855b8281101562001365578151805173ffffffffffffffffffffffffffffffffffffffff16855286015161ffff1686850152928401929085019060010162001324565b5091979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff811681146200139557600080fd5b50565b60008060408385031215620013ac57600080fd5b8235620013b98162001372565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60208101600b831062001461577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000602082840312156200147a57600080fd5b8151620013008162001372565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415620014eb57620014eb62001487565b5060010190565b6000821982111562001508576200150862001487565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562001548576200154862001487565b500290565b6000815160005b8181101562001570576020818501810151868301520162001554565b8181111562001580576000828601525b509290920192915050565b7fffffffff00000000000000000000000000000000000000000000000000000000831681526000620015c160048301846200154d565b949350505050565b60006200130082846200154d565b600060208284031215620015ea57600080fd5b815180151581146200130057600080fdfe6101406040523480156200001257600080fd5b5060405162005e9738038062005e97833981016040819052620000359162000198565b60016000556001600160a01b0383166200006257604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038316608081905260408051636f307dc360e01b81529051636f307dc3916004808201926020929091908290030181865afa158015620000ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d39190620001ea565b6001600160a01b031660a0816001600160a01b031681525050826001600160a01b0316634f0e0ef36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200012b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001519190620001ea565b6001600160a01b0390811660c0529190911660e0819052151561010052151561012052506200020f565b80516001600160a01b03811681146200019357600080fd5b919050565b600080600060608486031215620001ae57600080fd5b620001b9846200017b565b9250620001c9602085016200017b565b915060408401518015158114620001df57600080fd5b809150509250925092565b600060208284031215620001fd57600080fd5b62000208826200017b565b9392505050565b60805160a05160c05160e0516101005161012051615a86620004116000396000818161061101528181612fb5015261481f01526000818161031701528181610dde015281816144f901526146e5015260008181610557015281816146a901526147a901526000818161034b0152818161387d015261392d01526000818161047301528181611bfe0152818161274f0152818161280d0152818161366a01526137dd015260008181610665015281816109d801528181610b0301528181610bd501528181610cdd01528181610e6501528181610fe30152818161114e0152818161120e0152818161132e015281816114510152818161162b01528181611708015281816117e0015281816119e501528181611b1201528181611d9501528181611ed5015281816120040152818161216801528181612290015281816123c601528181612568015281816126390152818161266f0152818161293d01528181612a2101528181612a8a01528181612bde01528181612d2601528181612e6801528181612ec2015281816130a10152818161311b015281816131b401528181613341015281816134c10152818161358a0152818161372f01528181613a1a01528181613b2e01528181613dbb015281816142200152818161432801528181614492015281816148e7015281816149e801528181614aae0152614d8f0152615a866000f3fe6080604052600436106102695760003560e01c8063860aefcf11610153578063c7de38a6116100cb578063dfd594651161007f578063eb9606df11610064578063eb9606df1461081e578063f9eaee0d1461083e578063ffd9b9071461085e57600080fd5b8063dfd59465146107de578063e1f21c67146107fe57600080fd5b8063cff0ab96116100b0578063cff0ab96146106ef578063d9ccbec114610783578063dcf65482146107be57600080fd5b8063c7de38a6146106a7578063caa5c23f146106dc57600080fd5b80639c55a05411610122578063b55bb84b11610107578063b55bb84b14610633578063c12c21c014610653578063c690908a1461068757600080fd5b80639c55a054146105df578063b1836d32146105ff57600080fd5b8063860aefcf146104db5780639408b63f146105455780639b67ab30146105795780639be0536a146105bd57600080fd5b80635d91a0e0116101e65780636d19b486116101b55780637071b7c51161019a5780637071b7c51461049557806379c0ef91146104a857806382871ace146104c857600080fd5b80636d19b486146104415780636f307dc31461046157600080fd5b80635d91a0e0146103e85780635f73fbec146103fb578063601d66f61461040e5780636c8f225d1461042e57600080fd5b80633d9287fa1161023d5780635019e20a116102225780635019e20a1461039257806354fd4d50146103b257806359781034146103d557600080fd5b80633d9287fa146103055780634f0e0ef31461033957600080fd5b8062842b571461026e578063256ac915146102905780632a7ba1f7146102c55780632b7c7b11146102e5575b600080fd5b34801561027a57600080fd5b5061028e6102893660046151bf565b61087e565b005b34801561029c57600080fd5b506102b06102ab3660046151f8565b61098e565b60405190151581526020015b60405180910390f35b3480156102d157600080fd5b5061028e6102e0366004615215565b610a61565b3480156102f157600080fd5b5061028e610300366004615215565b610c3b565b34801561031157600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561034557600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102bc565b34801561039e57600080fd5b5061028e6103ad3660046151f8565b610d6a565b3480156103be57600080fd5b506103c7600281565b6040519081526020016102bc565b61028e6103e336600461522e565b61108c565b61028e6103f63660046152bb565b611275565b61028e610409366004615340565b611589565b34801561041a57600080fd5b5061028e6104293660046153d8565b6117de565b61028e61043c36600461541b565b611900565b34801561044d57600080fd5b506102b061045c3660046151f8565b611c31565b34801561046d57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b61028e6104a336600461546e565b611c60565b3480156104b457600080fd5b5061036d6104c3366004615215565b611f3e565b61028e6104d63660046152bb565b611f4b565b3480156104e757600080fd5b5060025461051c906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041682565b604080516fffffffffffffffffffffffffffffffff9384168152929091166020830152016102bc565b34801561055157600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561058557600080fd5b506004546040805167ffffffffffffffff608084901c1681526fffffffffffffffffffffffffffffffff9092166020830152016102bc565b3480156105c957600080fd5b506105d261227d565b6040516102bc91906154e2565b3480156105eb57600080fd5b5061028e6105fa36600461553c565b61228e565b34801561060b57600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561063f57600080fd5b5061028e61064e3660046151f8565b6123c4565b34801561065f57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561069357600080fd5b5061028e6106a23660046151f8565b6124c6565b3480156106b357600080fd5b506106c76106c23660046151f8565b612668565b604080519283526020830191909152016102bc565b61028e6106ea366004615557565b61289b565b3480156106fb57600080fd5b5060015461074e906fffffffffffffffffffffffffffffffff811690700100000000000000000000000000000000810460ff169071010000000000000000000000000000000000900464ffffffffff1683565b604080516fffffffffffffffffffffffffffffffff9094168452911515602084015264ffffffffff16908201526060016102bc565b34801561078f57600080fd5b506102b061079e366004615599565b600360209081526000928352604080842090915290825290205460ff1681565b3480156107ca57600080fd5b5061028e6107d93660046151f8565b612a88565b3480156107ea57600080fd5b506103c76107f93660046151f8565b612b86565b34801561080a57600080fd5b5061028e61081936600461522e565b612c6d565b34801561082a57600080fd5b5061028e6108393660046155c7565b612ec0565b34801561084a57600080fd5b506102b06108593660046151f8565b613057565b34801561086a57600080fd5b5061028e6108793660046155ee565b6131b2565b600260005414156108f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b6002600090815573ffffffffffffffffffffffffffffffffffffffff8316808252600360209081526040808420338086529083529381902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081527f9b3258bc4904fd6426b99843e206c6c7cdb1fd0f040121c25b71dafbb3851ee0910160405180910390a350506001600055565b6040517f055ee9b500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063055ee9b590602401602060405180830381865afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a43919061560b565b73ffffffffffffffffffffffffffffffffffffffff16141592915050565b60026000541415610ace576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610b5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b83919061560b565b9050610b903382846132eb565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906395373018906024015b600060405180830381600087803b158015610c1a57600080fd5b505af1158015610c2e573d6000803e3d6000fd5b5050600160005550505050565b60026000541415610ca8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610d39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5d919061560b565b9050610b90338284613411565b60026000541415610dd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000557f000000000000000000000000000000000000000000000000000000000000000015610e34576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610ec1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee5919061560b565b33600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915290205490915060ff16610f52576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f5d82613583565b5090508015610f98576040517ff713841e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b15801561102757600080fd5b505af115801561103b573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692503391507f93c70cc9715bef0d83edf2095f3595402279d274f402a73ffc17f1bcb19d863d90600090a35050600160005550565b600260005414156110f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611106613875565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063e958b70490602401602060405180830381865afa158015611197573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bb919061560b565b90506111c9848285856139b7565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401600060405180830381600087803b15801561125257600080fd5b505af1158015611266573d6000803e3d6000fd5b50506001600055505050505050565b600260005414156112e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611375573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611399919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166113e8576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806113f483613583565b915091508161142f576040517f1fdd676f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611437613875565b831561144d5761144d85858b8660016000613ae3565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632362a2d88b600185338e8e8e6040518863ffffffff1660e01b81526004016114b59796959493929190615663565b6020604051808303816000875af11580156114d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f891906156bf565b90508873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f7dfecd8419723a9d3954585a30c2a270165d70aafa146c11c1e1b88ae14390648460405161157091815260200190565b60405180910390a4505060016000555050505050505050565b600260005414156115f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ab919061560b565b90506116b5613875565b81156116cb576116cb8383338460016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d89061174a903390600090819083908d908d908d90600401615663565b6020604051808303816000875af1158015611769573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178d91906156bf565b5060405173ffffffffffffffffffffffffffffffffffffffff87169033907f460ad03b1cf79b1d64d3aefa28475f110ab66e84649c52bb41ed796b9b39198190600090a35050600160005550505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611849573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118d1576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff90811670010000000000000000000000000000000002911617600255565b6002600054141561196d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000908155606461198461ffff851687615707565b61198e9190615744565b9050611999816144f7565b6119a2816145e8565b6119ab84614668565b6119b3613875565b6040517f172c48c7000000000000000000000000000000000000000000000000000000008152600060048201819052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a64919061577f565b61ffff169150611a789050816127106157ae565b611a829083615707565b611a8c8288615707565b11611ac3576040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff86811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611b5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b81919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638587604051611bef92919091825261ffff16602082015260400190565b60405180910390a3611c2386827f00000000000000000000000000000000000000000000000000000000000000008a6139b7565b505060016000555050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526006602052604081205415155b92915050565b60026000541415611ccd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611cdb856144f7565b611ce484614668565b611ced856145e8565b600154700100000000000000000000000000000000900460ff1615611d3e576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d46613875565b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff85811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611de0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e04919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638885604051611e7292919091825261ffff16602082015260400190565b60405180910390a38215611e9057611e908484878460006001613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015611f1957600080fd5b505af1158015611f2d573d6000803e3d6000fd5b505060016000555050505050505050565b6000611c5a60058361480f565b60026000541415611fb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa15801561204b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206f919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166120be576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120c661481b565b6120fc576040517f7e52ccb400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061210782612668565b509050612112613875565b82156121285761212884848a8560016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d8906121aa908c90600290879033908f908f908f90600401615663565b6020604051808303816000875af11580156121c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ed91906156bf565b90508773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167ffada13ff2d5e1a1d9da37ad4a4130893b34e3c69c32b17f87ec31fd661b867078460405161226591815260200190565b60405180910390a45050600160005550505050505050565b6060612289600561486b565b905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612381576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561242f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612453919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146124b7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614878565b5050565b60026000541415612533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156125c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e8919061560b565b90506125f4818361489a565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401610c00565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126fc919061560b565b905060008061270b8387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156127a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127c991906156bf565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015291965061271091851690637afb010490604401602060405180830381865afa158015612863573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061288791906156bf565b6128919190615744565b9350505050915091565b60026000541415612908576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129bd919061560b565b90506129c7613875565b8115612a7e576129dc83833384600080613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015612a6557600080fd5b505af1158015612a79573d6000803e3d6000fd5b505050505b5050600160005550565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612af3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b17919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b7b576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614c92565b600080612b9283612668565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152919350600092507f000000000000000000000000000000000000000000000000000000000000000090911690633192195c906024016040805180830381865afa158015612c26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4a91906157c5565b9150819050612c5b61271084615707565b612c659190615744565b949350505050565b60026000541415612cda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063fdd5764590602401602060405180830381865afa158015612d6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d91919061560b565b73ffffffffffffffffffffffffffffffffffffffff161480612dd7575073ffffffffffffffffffffffffffffffffffffffff831660009081526006602052604090205415155b15612e0e576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612eac57600080fd5b505af1158015611c23573d6000803e3d6000fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f4f919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612fb3576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000061300a576040517f50dd11fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805464ffffffffff90921671010000000000000000000000000000000000027fffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffffff909216919091179055565b6040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063f67c5bd090602401602060405180830381865afa1580156130e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061310c91906156bf565b905080158015906131ab5750807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015613184573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a891906156bf565b16155b9392505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561321d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613241919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146132a5576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018054911515700100000000000000000000000000000000027fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff909216919091179055565b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600060448301819052917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561338c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133b091906156bf565b90506133bb816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f98274bf834d179ee08dc0604071b0dc90b54731bd5f725a5a96a39a86bce025a8360405161340391815260200190565b60405180910390a250505050565b61341a816144f7565b600154700100000000000000000000000000000000900460ff161561346b576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600160448301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561350c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061353091906156bf565b905061353b816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f9cac51154cc0d835e2f9c9d1f59a9344588cee107f4203bf58a8c797e3a58c458360405161340391815260200190565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613617919061560b565b90506000806136268387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156136c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136e491906156bf565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529195506000917f00000000000000000000000000000000000000000000000000000000000000001690633192195c906024016040805180830381865afa158015613775573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061379991906157c5565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350600092506127109187169063f9a6503090604401602060405180830381865afa158015613837573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061385b91906156bf565b6138659190615707565b9092109794965093945050505050565b34156139b5577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156138e357600080fd5b505af11580156138f7573d6000803e3d6000fd5b50506040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201523460248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16935063a9059cbb925060440190506020604051808303816000875af115801561398f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139b391906157e9565b505b565b6139c084614cb4565b6040517f830aa74500000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f0000000000000000000000000000000000000000000000000000000000000000169063830aa74590608401600060405180830381600087803b158015613a5e57600080fd5b505af1158015613a72573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fa32435755c235de2976ed44a75a2f85cb01faf0c894f639fe0c32bb9455fea8f83604051613ad591815260200190565b60405180910390a350505050565b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301523060248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b158015613b7257600080fd5b505af1158015613b86573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff871692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a28460005b8181101561441d5736888883818110613bea57613bea615806565b9050602002810190613bfc9190615835565b90506004613c0d6020830183615873565b90501015613c47576040517fe2b0e50600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b30613c5560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16141561421c578415613ca9576040517f5fb9107f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613cb86020830183615873565b613cc1916158d8565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167f59781034000000000000000000000000000000000000000000000000000000001415613e3c5760008080613d1e6020860186615873565b613d2c916004908290615920565b810190613d39919061522e565b925092509250613e34838c73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614613e2b576040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015613e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e26919061560b565b613e2d565b8b5b84846139b7565b505050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2b7c7b11000000000000000000000000000000000000000000000000000000001415613ec757600194506000613e996020840184615873565b613ea7916004908290615920565b810190613eb49190615215565b9050613ec1898983613411565b50614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2a7ba1f7000000000000000000000000000000000000000000000000000000001415613f80578415613f49576040517fc0b0caa800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613f586020840184615873565b613f66916004908290615920565b810190613f739190615215565b9050613ec18989836132eb565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f233a8caa0000000000000000000000000000000000000000000000000000000014156140e457600080613fda6020850185615873565b613fe8916004908290615920565b810190613ff5919061594a565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c8116600483015292945090925082918416906370a0823190602401602060405180830381865afa158015614069573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061408d91906156bf565b10156140dd576040517fa5ac537300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016108e7565b5050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fc690908a00000000000000000000000000000000000000000000000000000000141561416457600061413d6020840184615873565b61414b916004908290615920565b81019061415891906151f8565b9050613ec1888261489a565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f23e27a640000000000000000000000000000000000000000000000000000000014156141e45760006141bd6020840184615873565b6141cb916004908290615920565b8101906141d891906151f8565b9050613ec18882614d42565b6040517f1e9e7e7a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50614414565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff68754361426760208501856151f8565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156142d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142f4919061560b565b73ffffffffffffffffffffffffffffffffffffffff16148061436d575073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001661435560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16145b156143a4576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6144126143b46020830183615873565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506143f69250505060208401846151f8565b73ffffffffffffffffffffffffffffffffffffffff1690614e39565b505b50600101613bcf565b506040517f60c8e8938c9a0c0d88a98d6f1c562ce68077e12bf3edb8047378f2f736cb45b490600090a16040517fe1998cf900000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff86811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b1580156144d657600080fd5b505af11580156144ea573d6000803e3d6000fd5b5050505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006139b3576001546fffffffffffffffffffffffffffffffff9081169081146124c257600454608081901c906fffffffffffffffffffffffffffffffff16600067ffffffffffffffff8316431461456e578461458a565b61458a6fffffffffffffffffffffffffffffffff831686615976565b9050838111156145c6576040517f675f1a5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff81164360801b176004555050505050565b6002546fffffffffffffffffffffffffffffffff16811080614631575060025470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681115b156139b3576040517fce16799400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61467061481b565b156146a7576040517f63fc31c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1615614806577f0000000000000000000000000000000000000000000000000000000000000000801561472657503373ffffffffffffffffffffffffffffffffffffffff821614155b1561475d576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600160248301527f00000000000000000000000000000000000000000000000000000000000000001690639dc29fac90604401600060405180830381600087803b1580156147ed57600080fd5b505af1158015614801573d6000803e3d6000fd5b505050505b6139b381614cb4565b60006131ab8383614e7b565b60007f0000000000000000000000000000000000000000000000000000000000000000801561228957505060015471010000000000000000000000000000000000900464ffffffffff1642101590565b606060006131ab83614ea5565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f01565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561492b57600080fd5b505af115801561493f573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527fdf498aa1c340e992665d6fb4f3be8436d452c45a630cb6d7fab7963da39bac8793500190505b60405180910390a15050565b6040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600091829160019183917f00000000000000000000000000000000000000000000000000000000000000001690638991b2f190602401602060405180830381865afa158015614a2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a5391906156bf565b90505b808211614c895780821615614c7d576040517fe75538c700000000000000000000000000000000000000000000000000000000815260048101839052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e75538c7906024016040805180830381865afa158015614af4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b18919061577f565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529294509092506000918416906370a0823190602401602060405180830381865afa158015614b8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bb191906156bf565b90506001811115614c79576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff8481166024830152600091908b169063f9a6503090604401602060405180830381865afa158015614c33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c5791906156bf565b978801979050614c6b61ffff841682615707565b614c759088615976565b9650505b5050505b600182901b9150614a56565b50509250929050565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f50565b3373ffffffffffffffffffffffffffffffffffffffff821614801590614d0b575033600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16155b156139b3576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b158015614dd357600080fd5b505af1158015614de7573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527f69db9e9764da61b6681b89fb0f5be018506e0342036e56b59c3015a620d60977935001905061498d565b60606131ab83836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250615043565b6000826000018281548110614e9257614e92615806565b9060005260206000200154905092915050565b606081600001805480602002602001604051908101604052809291908181526020018280548015614ef557602002820191906000526020600020905b815481526020019060010190808311614ee1575b50505050509050919050565b6000818152600183016020526040812054614f4857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611c5a565b506000611c5a565b60008181526001830160205260408120548015615039576000614f746001836157ae565b8554909150600090614f88906001906157ae565b9050818114614fed576000866000018281548110614fa857614fa8615806565b9060005260206000200154905080876000018481548110614fcb57614fcb615806565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080614ffe57614ffe61598e565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611c5a565b6000915050611c5a565b6060612c65848460008585843b6150b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108e7565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516150df91906159ed565b60006040518083038185875af1925050503d806000811461511c576040519150601f19603f3d011682016040523d82523d6000602084013e615121565b606091505b509150915061513182828661513c565b979650505050505050565b6060831561514b5750816131ab565b82511561515b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e791906159ff565b73ffffffffffffffffffffffffffffffffffffffff811681146139b357600080fd5b80151581146139b357600080fd5b600080604083850312156151d257600080fd5b82356151dd8161518f565b915060208301356151ed816151b1565b809150509250929050565b60006020828403121561520a57600080fd5b81356131ab8161518f565b60006020828403121561522757600080fd5b5035919050565b60008060006060848603121561524357600080fd5b833561524e8161518f565b9250602084013561525e8161518f565b929592945050506040919091013590565b60008083601f84011261528157600080fd5b50813567ffffffffffffffff81111561529957600080fd5b6020830191508360208260051b85010111156152b457600080fd5b9250929050565b60008060008060008060a087890312156152d457600080fd5b86356152df8161518f565b955060208701356152ef8161518f565b9450604087013593506060870135615306816151b1565b9250608087013567ffffffffffffffff81111561532257600080fd5b61532e89828a0161526f565b979a9699509497509295939492505050565b60008060008060006080868803121561535857600080fd5b85356153638161518f565b945060208601359350604086013561537a816151b1565b9250606086013567ffffffffffffffff81111561539657600080fd5b6153a28882890161526f565b969995985093965092949392505050565b80356fffffffffffffffffffffffffffffffff811681146153d357600080fd5b919050565b600080604083850312156153eb57600080fd5b6153f4836153b3565b9150615402602084016153b3565b90509250929050565b61ffff811681146139b357600080fd5b6000806000806080858703121561543157600080fd5b8435935060208501356154438161518f565b925060408501356154538161540b565b915060608501356154638161540b565b939692955090935050565b60008060008060006080868803121561548657600080fd5b8535945060208601356154988161518f565b9350604086013567ffffffffffffffff8111156154b457600080fd5b6154c08882890161526f565b90945092505060608601356154d48161540b565b809150509295509295909350565b6020808252825182820181905260009190848201906040850190845b8181101561553057835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016154fe565b50909695505050505050565b60006020828403121561554e57600080fd5b6131ab826153b3565b6000806020838503121561556a57600080fd5b823567ffffffffffffffff81111561558157600080fd5b61558d8582860161526f565b90969095509350505050565b600080604083850312156155ac57600080fd5b82356155b78161518f565b915060208301356151ed8161518f565b6000602082840312156155d957600080fd5b813564ffffffffff811681146131ab57600080fd5b60006020828403121561560057600080fd5b81356131ab816151b1565b60006020828403121561561d57600080fd5b81516131ab8161518f565b6003811061565f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b73ffffffffffffffffffffffffffffffffffffffff888116825260e082019061568f602084018a615628565b6040830197909752948616606082015292909416608083015260a082015291151560c09092019190915292915050565b6000602082840312156156d157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561573f5761573f6156d8565b500290565b60008261577a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000806040838503121561579257600080fd5b825161579d8161518f565b60208401519092506151ed8161540b565b6000828210156157c0576157c06156d8565b500390565b600080604083850312156157d857600080fd5b505080516020909101519092909150565b6000602082840312156157fb57600080fd5b81516131ab816151b1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc183360301811261586957600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126158a857600080fd5b83018035915067ffffffffffffffff8211156158c357600080fd5b6020019150368190038213156152b457600080fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156159185780818660040360031b1b83161692505b505092915050565b6000808585111561593057600080fd5b8386111561593d57600080fd5b5050820193919092039150565b6000806040838503121561595d57600080fd5b82356159688161518f565b946020939093013593505050565b60008219821115615989576159896156d8565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60005b838110156159d85781810151838201526020016159c0565b838111156159e7576000848401525b50505050565b600082516158698184602087016159bd565b6020815260008251806020840152615a1e8160408501602087016159bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea2646970667358221220a3f4a705ab580a6ada1e438cd2ee4abc001b62d1d171fce12c41994900fef21664736f6c634300080a003360c06040523480156200001157600080fd5b50604051620026cf380380620026cf833981016040819052620000349162000324565b82828281600090805190602001906200004f92919062000194565b5080516200006590600190602084019062000194565b50506006805460ff19169055506001600160a01b0381166200009a57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000d9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ff9190620003a1565b6001600160a01b03166080816001600160a01b03168152505050826001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000158573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200017e9190620003a1565b6001600160a01b031660a0525062000403915050565b828054620001a290620003c6565b90600052602060002090601f016020900481019282620001c6576000855562000211565b82601f10620001e157805160ff191683800117855562000211565b8280016001018555821562000211579182015b8281111562000211578251825591602001919060010190620001f4565b506200021f92915062000223565b5090565b5b808211156200021f576000815560010162000224565b80516001600160a01b03811681146200025257600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200027f57600080fd5b81516001600160401b03808211156200029c576200029c62000257565b604051601f8301601f19908116603f01168101908282118183101715620002c757620002c762000257565b81604052838152602092508683858801011115620002e457600080fd5b600091505b83821015620003085785820183015181830184015290820190620002e9565b838211156200031a5760008385830101525b9695505050505050565b6000806000606084860312156200033a57600080fd5b62000345846200023a565b60208501519093506001600160401b03808211156200036357600080fd5b62000371878388016200026d565b935060408601519150808211156200038857600080fd5b5062000397868287016200026d565b9150509250925092565b600060208284031215620003b457600080fd5b620003bf826200023a565b9392505050565b600181811c90821680620003db57607f821691505b60208210811415620003fd57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a0516122756200045a6000396000610a9a015260008181610386015281816106db0152818161089101528181610f15015281816110010152818161115b015281816112f401526114f901526122756000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80636352211e116100f9578063a0bcfc7f11610097578063b88d4fde11610071578063b88d4fde146103a8578063c87b56dd146103b6578063e985e9c5146103c9578063fca3b5aa1461041257600080fd5b8063a0bcfc7f14610360578063a22cb46514610373578063a50cf2c81461038157600080fd5b80638456cb59116100d35780638456cb591461032a57806389406ff51461033257806395d89b41146103455780639dc29fac1461034d57600080fd5b80636352211e146102fc5780636c0360eb1461030f57806370a082311461031757600080fd5b80633f4ba83a116101665780634610f6ac116101405780634610f6ac146102b357806354fd4d50146102c6578063576cd2d1146102ce5780635c975abb146102f157600080fd5b80633f4ba83a1461029857806340c10f19146102a057806342842e0e1461028a57600080fd5b8063081812fc116101a2578063081812fc1461024b578063095ea7b31461025e57806318160ddd1461027357806323b872dd1461028a57600080fd5b806301ffc9a7146101c957806306fdde03146101f15780630754617214610206575b600080fd5b6101dc6101d7366004611cc6565b610425565b60405190151581526020015b60405180910390f35b6101f961050a565b6040516101e89190611d38565b6008546102269073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e8565b610226610259366004611d89565b61059c565b61027161026c366004611dc7565b61067b565b005b61027c60075481565b6040519081526020016101e8565b61027161026c366004611df3565b6102716106ad565b6102716102ae366004611dc7565b61079b565b6102716102c1366004611e34565b610863565b61027c600181565b6101dc6102dc366004611e34565b60096020526000908152604090205460ff1681565b60065460ff166101dc565b61022661030a366004611d89565b610cd9565b6101f9610d8b565b61027c610325366004611e34565b610e19565b610271610ee7565b610271610340366004611e34565b610fd3565b6101f9611103565b61027161035b366004611dc7565b611112565b61027161036e366004611e51565b6112c6565b61027161026c366004611ed1565b6102267f000000000000000000000000000000000000000000000000000000000000000081565b61027161026c366004611f39565b6101f96103c4366004611d89565b6113bb565b6101dc6103d7366004612037565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205460ff1690565b610271610420366004611e34565b6114cb565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd0000000000000000000000000000000000000000000000000000000014806104b857507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061050457507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60606000805461051990612065565b80601f016020809104026020016040519081016040528092919081815260200182805461054590612065565b80156105925780601f1061056757610100808354040283529160200191610592565b820191906000526020600020905b81548152906001019060200180831161057557829003601f168201915b5050505050905090565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff16610652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084015b60405180910390fd5b5060009081526004602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b6040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa158015610737573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075b91906120b9565b610791576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107996115f6565b565b60085473ffffffffffffffffffffffffffffffffffffffff1633146107ec576040517f5c2967f500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006107f783610e19565b905060005b82811015610846576000816108278473ffffffffffffffffffffffffffffffffffffffff8816612105565b6108319190612105565b905061083d85826116d7565b506001016107fc565b5081600760008282546108599190612105565b9091555050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156108ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091191906120b9565b610947576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163b610995576040517f9c01f6a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff1663c12c21c06040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610a1c575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610a199181019061211d565b60015b610a52576040517f9c01f6a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f6fbc6f6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192507f000000000000000000000000000000000000000000000000000000000000000090911690636fbc6f6b90602401602060405180830381865afa158015610ae3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0791906120b9565b1580610bad57503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16639408b63f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b94919061211d565b73ffffffffffffffffffffffffffffffffffffffff1614155b80610c5257508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c39919061211d565b73ffffffffffffffffffffffffffffffffffffffff1614155b15610c89576040517f9c01f6a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff16600090815260096020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff1680610504576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e00000000000000000000000000000000000000000000006064820152608401610649565b600a8054610d9890612065565b80601f0160208091040260200160405190810160405280929190818152602001828054610dc490612065565b8015610e115780601f10610de657610100808354040283529160200191610e11565b820191906000526020600020905b815481529060010190602001808311610df457829003601f168201915b505050505081565b600073ffffffffffffffffffffffffffffffffffffffff8216610ebe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152608401610649565b5073ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015610f71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9591906120b9565b610fcb576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610799611899565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561105d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108191906120b9565b6110b7576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff16600090815260096020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b60606001805461051990612065565b3360009081526009602052604090205460ff161580156111dd57506040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156111b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111db91906120b9565b155b15611214576040517f1e0d048500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061121f83610e19565b90508181101561125b576040517f90c9142d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b828110156112b357600060018261128b8573ffffffffffffffffffffffffffffffffffffffff8916612105565b611295919061213a565b61129f919061213a565b90506112aa81611959565b5060010161125e565b508160076000828254610859919061213a565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611350573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137491906120b9565b6113aa576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113b6600a8383611c0f565b505050565b60008181526002602052604090205460609073ffffffffffffffffffffffffffffffffffffffff1661146f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006064820152608401610649565b6000611479611a26565b9050600081511161149957604051806020016040528060008152506114c4565b806114a384611a35565b6040516020016114b4929190612151565b6040516020818303038152906040525b9392505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611555573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157991906120b9565b6115af576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60065460ff16611662576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610649565b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b73ffffffffffffffffffffffffffffffffffffffff8216611754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610649565b60008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff16156117e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610649565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805460019290611816908490612105565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60065460ff1615611906576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610649565b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586116ad3390565b600061196482610cd9565b9050611971600083611b6f565b73ffffffffffffffffffffffffffffffffffffffff811660009081526003602052604081208054600192906119a790849061213a565b909155505060008281526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555183919073ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6060600a805461051990612065565b606081611a7557505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611a9f5780611a8981612180565b9150611a989050600a836121e8565b9150611a79565b60008167ffffffffffffffff811115611aba57611aba611f0a565b6040519080825280601f01601f191660200182016040528015611ae4576020820181803683370190505b5090505b8415611b6757611af960018361213a565b9150611b06600a866121fc565b611b11906030612105565b60f81b818381518110611b2657611b26612210565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611b60600a866121e8565b9450611ae8565b949350505050565b600081815260046020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091558190611bc982610cd9565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b828054611c1b90612065565b90600052602060002090601f016020900481019282611c3d5760008555611ca1565b82601f10611c74578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00823516178555611ca1565b82800160010185558215611ca1579182015b82811115611ca1578235825591602001919060010190611c86565b50611cad929150611cb1565b5090565b5b80821115611cad5760008155600101611cb2565b600060208284031215611cd857600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146114c457600080fd5b60005b83811015611d23578181015183820152602001611d0b565b83811115611d32576000848401525b50505050565b6020815260008251806020840152611d57816040850160208701611d08565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b600060208284031215611d9b57600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff81168114611dc457600080fd5b50565b60008060408385031215611dda57600080fd5b8235611de581611da2565b946020939093013593505050565b600080600060608486031215611e0857600080fd5b8335611e1381611da2565b92506020840135611e2381611da2565b929592945050506040919091013590565b600060208284031215611e4657600080fd5b81356114c481611da2565b60008060208385031215611e6457600080fd5b823567ffffffffffffffff80821115611e7c57600080fd5b818501915085601f830112611e9057600080fd5b813581811115611e9f57600080fd5b866020828501011115611eb157600080fd5b60209290920196919550909350505050565b8015158114611dc457600080fd5b60008060408385031215611ee457600080fd5b8235611eef81611da2565b91506020830135611eff81611ec3565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060008060808587031215611f4f57600080fd5b8435611f5a81611da2565b93506020850135611f6a81611da2565b925060408501359150606085013567ffffffffffffffff80821115611f8e57600080fd5b818701915087601f830112611fa257600080fd5b813581811115611fb457611fb4611f0a565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715611ffa57611ffa611f0a565b816040528281528a602084870101111561201357600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000806040838503121561204a57600080fd5b823561205581611da2565b91506020830135611eff81611da2565b600181811c9082168061207957607f821691505b602082108114156120b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156120cb57600080fd5b81516114c481611ec3565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115612118576121186120d6565b500190565b60006020828403121561212f57600080fd5b81516114c481611da2565b60008282101561214c5761214c6120d6565b500390565b60008351612163818460208801611d08565b835190830190612177818360208801611d08565b01949350505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156121b2576121b26120d6565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826121f7576121f76121b9565b500490565b60008261220b5761220b6121b9565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea2646970667358221220ffdd83a2fc9a158347ca248f021e63fcef3a7985b3deb793f75cd1835b068aab64736f6c634300080a003360a060405234801561001057600080fd5b506040516106ca3803806106ca83398101604081905261002f9161006c565b60009190915560ff166080526001805460506001600160501b031991821681179092556004805490911690911790554260028190556003556100a2565b6000806040838503121561007f57600080fd5b82519150602083015160ff8116811461009757600080fd5b809150509250929050565b60805161060e6100bc600039600060d3015261060e6000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80639a6fc8f511610081578063d62ada111161005b578063d62ada11146102dc578063f7a30806146102f4578063feaf968c1461030757600080fd5b80639a6fc8f5146101cd578063bd18ad531461023a578063cd653afc1461024d57600080fd5b806354fd4d50116100b257806354fd4d501461012d57806367e8d83d1461013c5780637284e4161461018e57600080fd5b8063313ce567146100ce5780633fd0875f1461010c575b600080fd5b6100f57f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020015b60405180910390f35b6004546a0100000000000000000000900460ff166040516101039190610441565b60405160018152602001610103565b61018c61014a366004610482565b600480549115156c01000000000000000000000000027fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff909216919091179055565b005b604080518082018252600c81527f7072696365206f7261636c6500000000000000000000000000000000000000006020820152905161010391906104ab565b6102036101db36600461053d565b60015460005460025460035460045469ffffffffffffffffffff948516941691939590929450565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610103565b61018c610248366004610558565b61030f565b61018c61025b366004610579565b6001805469ffffffffffffffffffff9586167fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090911617905560029290925560035560048054919092167fffffffffffffffffffffffffffffffffffffffff00ff00000000000000000000909116176b020000000000000000000000179055565b6102e461035f565b6040519015158152602001610103565b61018c6103023660046105bf565b600055565b610203610385565b600480548291907fffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff166b01000000000000000000000083600281111561035757610357610412565b021790555050565b600454600090610380906b010000000000000000000000900460ff166103d6565b905090565b60008060008060006004600c9054906101000a900460ff16156103a757600080fd5b505060015460005460025460035460045469ffffffffffffffffffff9485169893975091955093509190911690565b600060028260028111156103ec576103ec610412565b14156103f757600080fd5b600182600281111561040b5761040b610412565b1492915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016006831061047c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561049457600080fd5b813580151581146104a457600080fd5b9392505050565b600060208083528351808285015260005b818110156104d8578581018301518582016040015282016104bc565b818111156104ea576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803569ffffffffffffffffffff8116811461053857600080fd5b919050565b60006020828403121561054f57600080fd5b6104a48261051e565b60006020828403121561056a57600080fd5b8135600381106104a457600080fd5b6000806000806080858703121561058f57600080fd5b6105988561051e565b935060208501359250604085013591506105b46060860161051e565b905092959194509250565b6000602082840312156105d157600080fd5b503591905056fea264697066735822122014874f7a973b86501c4c1a8be32490fe902c8f088ee234d25f9b2497e19f9e5264736f6c634300080a0033a2646970667358221220d8fdaadc825c43ac2783715ebcfe33e7b0ce3a396ac7717d65e4c95e98b6cf7f64736f6c634300080a003360806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d000117905534801561003957600080fd5b50600054604080516318caf8e360e31b815273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660048083019190915260248201929092526044810191909152632aa9a2a960e11b6064820152620100009091046001600160a01b03169063c657c71890608401600060405180830381600087803b1580156100ba57600080fd5b505af11580156100ce573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b81527390f79bf6eb2c4f870365e785982e1f101e93b90660048201526024810191909152600660448201526511949251539160d21b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561014f57600080fd5b505af1158015610163573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b8152733c44cdddb6a900fa2b585dd299e03d12fa4293bc60048201526024810191909152600a6044820152692624a8aaa4a220aa27a960b11b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b1580156101e857600080fd5b505af11580156101fc573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b815273c4375b7de8af5a38a93548eb8453a498222c4ff260048201526024810191909152600c60448201526b44554d425f4144445245535360a01b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561028357600080fd5b505af1158015610297573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b8152739965507d1a55bcc2695c58ba16fb37d819b0a4dc60048201526024810191909152600760448201526620a220a82a22a960c91b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561031957600080fd5b505af115801561032d573d6000803e3d6000fd5b505050506102a6806103406000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063ba414fa61461003b578063fa7626d414610057575b600080fd5b610043610064565b604051901515815260200160405180910390f35b6000546100439060ff1681565b60008054610100900460ff16156100845750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156101bf5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610129917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016101ff565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526101619161023b565b6000604051808303816000865af19150503d806000811461019e576040519150601f19603f3d011682016040523d82523d6000602084013e6101a3565b606091505b50915050808060200190518101906101bb919061024e565b9150505b919050565b6000815160005b818110156101e557602081850181015186830152016101cb565b818111156101f4576000828601525b509290920192915050565b7fffffffff0000000000000000000000000000000000000000000000000000000083168152600061023360048301846101c4565b949350505050565b600061024782846101c4565b9392505050565b60006020828403121561026057600080fd5b8151801515811461024757600080fdfea2646970667358221220293f55a0ef7b60c31a89dbc50e3339c80a8fdb1f9567614b200e97598226671f64736f6c634300080a003360806040523480156200001157600080fd5b506040516201110538038062011105833981016040819052620000349162000811565b6200003f3362000734565b6040516200004d9062000784565b604051809103906000f0801580156200006a573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b039283169081179091556040516310dc138160e31b81529184166004830152906386e09c0890602401600060405180830381600087803b158015620000c457600080fd5b505af1158015620000d9573d6000803e3d6000fd5b50506001546040516301ed651160e41b81526001600160a01b0385811660048301529091169250631ed651109150602401600060405180830381600087803b1580156200012557600080fd5b505af11580156200013a573d6000803e3d6000fd5b505050506040516200014c9062000792565b604051809103906000f08015801562000169573d6000803e3d6000fd5b50600280546001600160a01b0319166001600160a01b039283169081179091556001546040516376aad60560e01b81526004810192909252909116906376aad60590602401600060405180830381600087803b158015620001c957600080fd5b505af1158015620001de573d6000803e3d6000fd5b5050600154604051600093506001600160a01b0390911691506200020290620007a0565b6001600160a01b039091168152602001604051809103906000f0801580156200022f573d6000803e3d6000fd5b5060015460405163338f12b960e21b81526001600160a01b03808416600483015292935091169063ce3c4ae490602401600060405180830381600087803b1580156200027a57600080fd5b505af11580156200028f573d6000803e3d6000fd5b5050600154604051600093506001600160a01b039091169150620002b390620007ae565b6001600160a01b039091168152602001604051809103906000f080158015620002e0573d6000803e3d6000fd5b5060015460405163c5120b3960e01b81526001600160a01b03808416600483015292935091169063c5120b3990602401600060405180830381600087803b1580156200032b57600080fd5b505af115801562000340573d6000803e3d6000fd5b5050600154604051606093506001600160a01b03909116915082906200036690620007bc565b6200037392919062000849565b604051809103906000f08015801562000390573d6000803e3d6000fd5b50600380546001600160a01b0319166001600160a01b0392831690811790915560015460405163530e784f60e01b815260048101929092529091169063530e784f90602401600060405180830381600087803b158015620003f057600080fd5b505af115801562000405573d6000803e3d6000fd5b5050600154604051600093506001600160a01b0390911691506200042990620007ca565b6001600160a01b039091168152602001604051809103906000f08015801562000456573d6000803e3d6000fd5b506001546040516356ee0d3b60e11b81526001600160a01b03808416600483015292935091169063addc1a7690602401600060405180830381600087803b158015620004a157600080fd5b505af1158015620004b6573d6000803e3d6000fd5b5050600154604051600093506001600160a01b039091169150620004da90620007d8565b6001600160a01b039091168152602001604051809103906000f08015801562000507573d6000803e3d6000fd5b506001546040516321da583760e01b81526001600160a01b0380841660048301529293509116906321da583790602401600060405180830381600087803b1580156200055257600080fd5b505af115801562000567573d6000803e3d6000fd5b505050506000306040516200057c90620007e6565b6001600160a01b039091168152602001604051809103906000f080158015620005a9573d6000803e3d6000fd5b50600154604051631795d5b360e31b81526001600160a01b03808416600483015292935091169063bcaead9890602401600060405180830381600087803b158015620005f457600080fd5b505af115801562000609573d6000803e3d6000fd5b505060405163f2fde38b60e01b81523360048201526001600160a01b038416925063f2fde38b9150602401600060405180830381600087803b1580156200064f57600080fd5b505af115801562000664573d6000803e3d6000fd5b505060015460405163f2fde38b60e01b81523360048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b158015620006ae57600080fd5b505af1158015620006c3573d6000803e3d6000fd5b505060025460405163f2fde38b60e01b81523360048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b1580156200070d57600080fd5b505af115801562000722573d6000803e3d6000fd5b505050505050505050505050620008b2565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610fcd80620010dd83390190565b61098c80620020aa83390190565b610f508062002a3683390190565b614da6806200398683390190565b611b45806200872c83390190565b612ced806200a27183390190565b611627806200cf5e83390190565b612b80806200e58583390190565b80516001600160a01b03811681146200080c57600080fd5b919050565b600080604083850312156200082557600080fd5b6200083083620007f4565b91506200084060208401620007f4565b90509250929050565b6001600160a01b0383811682526040602080840182905284518483018190526000938683019290916060870190865b81811015620008a3578551805186168452840151851684840152948301949186019160010162000878565b50909998505050505050505050565b61081b80620008c26000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80638874ff1f1161005b5780638874ff1f146100f55780638da5cb5b14610108578063de28735914610126578063f2fde38b1461014657600080fd5b80632630c12f146100825780632954018c146100cb578063715018a6146100eb575b600080fd5b6003546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6001546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b6100f3610159565b005b6100f3610103366004610658565b6101eb565b60005473ffffffffffffffffffffffffffffffffffffffff166100a2565b6002546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b6100f3610154366004610734565b6103e3565b60005473ffffffffffffffffffffffffffffffffffffffff1633146101df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6101e96000610513565b565b60005473ffffffffffffffffffffffffffffffffffffffff16331461026c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101d6565b60005b815181101561035c57600354825173ffffffffffffffffffffffffffffffffffffffff9091169063e8a97a3e908490849081106102ae576102ae610756565b6020026020010151600001518484815181106102cc576102cc610756565b6020026020010151602001516040518363ffffffff1660e01b815260040161031792919073ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b600060405180830381600087803b15801561033157600080fd5b505af1158015610345573d6000803e3d6000fd5b50505050808061035490610785565b91505061026f565b506002546040517ff2fde38b00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063f2fde38b90602401600060405180830381600087803b1580156103c857600080fd5b505af11580156103dc573d6000803e3d6000fd5b5050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101d6565b73ffffffffffffffffffffffffffffffffffffffff8116610507576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016101d6565b61051081610513565b50565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156105da576105da610588565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561062757610627610588565b604052919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461065357600080fd5b919050565b6000602080838503121561066b57600080fd5b823567ffffffffffffffff8082111561068357600080fd5b818501915085601f83011261069757600080fd5b8135818111156106a9576106a9610588565b6106b7848260051b016105e0565b818152848101925060069190911b8301840190878211156106d757600080fd5b928401925b8184101561072957604084890312156106f55760008081fd5b6106fd6105b7565b6107068561062f565b815261071386860161062f565b81870152835260409390930192918401916106dc565b979650505050505050565b60006020828403121561074657600080fd5b61074f8261062f565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156107de577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea26469706673582212205ee75e57bb635aa49a1758f4ab0b04182a73115bff08f420c56a8ddb433c029364736f6c634300080a0033608060405234801561001057600080fd5b5061001a3361005f565b60405130906f20a2222922a9a9afa82927ab24a222a960811b907fb37614c7d254ea8d16eb81fa11dddaeb266aa8ba4917980859c7740aff30c69190600090a36100af565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610f0f806100be6000396000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c806377532ed9116100e3578063bcaead981161008c578063ce3c4ae411610066578063ce3c4ae414610308578063f2fde38b1461031b578063fca513a81461032e57600080fd5b8063bcaead98146102da578063c5120b39146102ed578063c513c9bb1461030057600080fd5b80639068a868116100bd5780639068a868146102b7578063addc1a76146102bf578063affd9243146102d257600080fd5b806377532ed91461027e57806386e09c08146102865780638da5cb5b1461029957600080fd5b80634c252f9111610145578063699f200f1161011f578063699f200f1461022d578063715018a61461026357806376aad6051461026b57600080fd5b80634c252f91146101fc578063530e784f1461020457806354fd4d501461021757600080fd5b80631ed65110116101765780631ed65110146101cc57806321da5837146101e157806326c74fc3146101f457600080fd5b8063060678c21461019257806308737695146101c4575b600080fd5b61019a610336565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61019a610366565b6101df6101da366004610e10565b610391565b005b6101df6101ef366004610e10565b610444565b61019a6104ef565b61019a61051a565b6101df610212366004610e10565b610545565b61021f600281565b6040519081526020016101bb565b61019a61023b366004610e4d565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6101df6105f0565b6101df610279366004610e10565b61067d565b61019a610728565b6101df610294366004610e10565b610753565b60005473ffffffffffffffffffffffffffffffffffffffff1661019a565b61019a6107fe565b6101df6102cd366004610e10565b610829565b61019a6108d4565b6101df6102e8366004610e10565b6108ff565b6101df6102fb366004610e10565b6109aa565b61019a610a55565b6101df610316366004610e10565b610a80565b6101df610329366004610e10565b610b2b565b61019a610c58565b60006103617f444154415f434f4d50524553534f520000000000000000000000000000000000610c7f565b905090565b60006103617f41434c0000000000000000000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610417576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6104417f54524541535552595f434f4e545241435400000000000000000000000000000082610d1d565b50565b60005473ffffffffffffffffffffffffffffffffffffffff1633146104c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f574554485f47415445574159000000000000000000000000000000000000000082610d1d565b60006103617f54524541535552595f434f4e5452414354000000000000000000000000000000610c7f565b60006103617f574554485f544f4b454e00000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f50524943455f4f5241434c45000000000000000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610671576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b61067b6000610d9b565b565b60005473ffffffffffffffffffffffffffffffffffffffff1633146106fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f41434c000000000000000000000000000000000000000000000000000000000082610d1d565b60006103617f574554485f474154455741590000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146107d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f574554485f544f4b454e0000000000000000000000000000000000000000000082610d1d565b60006103617f4143434f554e545f464143544f52590000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146108aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f4143434f554e545f464143544f5259000000000000000000000000000000000082610d1d565b60006103617f474541525f544f4b454e00000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610980576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f474541525f544f4b454e0000000000000000000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f444154415f434f4d50524553534f52000000000000000000000000000000000082610d1d565b60006103617f434f4e5452414354535f52454749535445520000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610b01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f434f4e5452414354535f5245474953544552000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610bac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b73ffffffffffffffffffffffffffffffffffffffff8116610c4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161040e565b61044181610d9b565b60006103617f50524943455f4f5241434c4500000000000000000000000000000000000000005b6000818152600160209081526040808320548151808301909252600382527f41503100000000000000000000000000000000000000000000000000000000009282019290925273ffffffffffffffffffffffffffffffffffffffff9091169081610d16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040e9190610e66565b5092915050565b60008281526001602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091559051909184917fb37614c7d254ea8d16eb81fa11dddaeb266aa8ba4917980859c7740aff30c6919190a35050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215610e2257600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610e4657600080fd5b9392505050565b600060208284031215610e5f57600080fd5b5035919050565b600060208083528351808285015260005b81811015610e9357858101830151858201604001528201610e77565b81811115610ea5576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea264697066735822122083c228af017c6f5cf8c395cdf7a53276ff56fdd4f4313c39f680ab73bd75417364736f6c634300080a0033608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61090e8061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063732818191161008c578063adce758d11610066578063adce758d14610215578063ba306df114610228578063d4eb5db01461023b578063f2fde38b1461027457600080fd5b806373281819146101b7578063819ad68e146101da5780638da5cb5b146101ed57600080fd5b806354fd4d50116100bd57806354fd4d501461016a5780635f259aba14610180578063715018a6146101af57600080fd5b806335914829146100e45780633a41ec641461011c5780634910832f14610155575b600080fd5b6101076100f236600461089b565b60016020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61010761012a36600461089b565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205460ff1690565b61016861016336600461089b565b610287565b005b610172600181565b604051908152602001610113565b61010761018e36600461089b565b60005473ffffffffffffffffffffffffffffffffffffffff91821691161490565b610168610387565b6101076101c536600461089b565b60026020526000908152604090205460ff1681565b6101686101e836600461089b565b610414565b60005460405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610113565b61016861022336600461089b565b61050c565b61016861023636600461089b565b610601565b61010761024936600461089b565b73ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205460ff1690565b61016861028236600461089b565b6106f6565b60005473ffffffffffffffffffffffffffffffffffffffff16331461030d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909217909155517fae26b1cfe9454ba87274a4e8330b6654684362d0f3d7bbd17f7449a1d38387c69190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610408576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b6104126000610826565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517fd400da6c0c0a894dacc0981730b88af0545d00272ee8fff1437bf560ff245fc49190a250565b60005473ffffffffffffffffffffffffffffffffffffffff16331461058d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f1998397e7203f7baca9d6f41b9e4da6e768daac5caad4234fb9bf5869d2715459190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610682576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526001602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f28b01395b7e25d20552a0c8dc8ecd3b1d4abc986f14dad7885fd45b6fd73c8d99190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811661081a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610304565b61082381610826565b50565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156108ad57600080fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146108d157600080fd5b939250505056fea26469706673582212204712efbfe997070def77285a5b8753bc882b62da2133ce1937ad26cd2b48e49864736f6c634300080a003360a060405234801561001057600080fd5b50604051610f50380380610f5083398101604081905261002f916100d7565b6000805460ff19169055806001600160a01b03811661006157604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa15801561009f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100c391906100d7565b6001600160a01b0316608052506101079050565b6000602082840312156100e957600080fd5b81516001600160a01b038116811461010057600080fd5b9392505050565b608051610e1261013e600039600081816101e2015281816102b20152818161040f0152818161057801526108510152610e126000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80638456cb5911610097578063b4ac686011610066578063b4ac686014610217578063c29277cd1461021f578063d914cd4b14610227578063e26b2f631461023a57600080fd5b80638456cb59146101cd57806394144856146101d5578063a50cf2c8146101dd578063ac4afa381461020457600080fd5b80635b16ebb7116100d35780635b16ebb7146101575780635c975abb1461018a578063673a2a1f146101955780636fbc6f6b146101aa57600080fd5b80631e16e4fc146100fa5780633f4ba83a1461013757806354fd4d5014610141575b600080fd5b61010d610108366004610c97565b61024d565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61013f610284565b005b610149600181565b60405190815260200161012e565b61017a610165366004610cb0565b60026020526000908152604090205460ff1681565b604051901515815260200161012e565b60005460ff1661017a565b61019d610372565b60405161012e9190610ced565b61017a6101b8366004610cb0565b60046020526000908152604090205460ff1681565b61013f6103e1565b61019d6104cd565b61010d7f000000000000000000000000000000000000000000000000000000000000000081565b61010d610212366004610c97565b61053a565b600154610149565b600354610149565b61013f610235366004610cb0565b61054a565b61013f610248366004610cb0565b610823565b6003818154811061025d57600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa15801561030e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103329190610d47565b610368576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610370610af6565b565b606060018054806020026020016040519081016040528092919081815260200182805480156103d757602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116103ac575b5050505050905090565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561046b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048f9190610d47565b6104c5576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610370610bd7565b606060038054806020026020016040519081016040528092919081815260200182805480156103d75760200282019190600052602060002090815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116103ac575050505050905090565b6001818154811061025d57600080fd5b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156105d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f89190610d47565b61062e576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051808201909152600281527f5a30000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff82166106b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b60405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff8116600090815260026020908152604091829020548251808401909352600383527f43523100000000000000000000000000000000000000000000000000000000009183019190915260ff1615610753576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b506001805480820182557fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915560008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909417909355915190917ff816b5143086c89d103a0683286be86c2b741e83ebfa75135aae606e2f5c6e5391a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156108ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d19190610d47565b610907576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051808201909152600281527f5a30000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8216610989576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b5073ffffffffffffffffffffffffffffffffffffffff8116600090815260046020908152604091829020548251808401909352600383527f43523200000000000000000000000000000000000000000000000000000000009183019190915260ff1615610a23576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b506003805460018082019092557fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915560008181526004602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909417909355915190917f58ad3cfc4b6552a53c8c4128ae9b080e14b4378a159280643a62c6f709cee24f91a250565b60005460ff16610b62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016106b0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff1615610c44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016106b0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610bad3390565b600060208284031215610ca957600080fd5b5035919050565b600060208284031215610cc257600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610ce657600080fd5b9392505050565b6020808252825182820181905260009190848201906040850190845b81811015610d3b57835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101610d09565b50909695505050505050565b600060208284031215610d5957600080fd5b81518015158114610ce657600080fd5b600060208083528351808285015260005b81811015610d9657858101830151858201604001528201610d7a565b81811115610da8576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea26469706673582212208f2d91c863db9ab1494a9c5db20e3fddc4b6c779ea3c3621737c105c60d9440a64736f6c634300080a003360e06040523480156200001157600080fd5b5060405162004da638038062004da6833981016040819052620000349162000160565b6001600160a01b0381166200005c57604051635919af9760e11b815260040160405180910390fd5b6001600160a01b03811660808190526040805163c513c9bb60e01b8152905163c513c9bb916004808201926020929091908290030181865afa158015620000a7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cd919062000160565b6001600160a01b031660a0816001600160a01b0316815250506080516001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000127573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200014d919062000160565b6001600160a01b031660c0525062000192565b6000602082840312156200017357600080fd5b81516001600160a01b03811681146200018b57600080fd5b9392505050565b60805160a05160c051614b896200021d6000396000818161018801528181611c4f0152612c5a0152600081816101ed015281816115e201528181611f5f0152818161213f0152818161223f0152818161243801528181612604015281816126bc01528181612788015281816129a501528181613c410152613d000152600061013c0152614b896000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c806354fd4d5011610081578063a80deda31161005b578063a80deda31461020f578063ae093f3f1461022f578063fc9914cb1461024f57600080fd5b806354fd4d50146101bd578063663b8fdb146101d35780637a0c7b21146101e857600080fd5b80632954018c116100b25780632954018c146101375780634b2f336d146101835780634c472fc9146101aa57600080fd5b80630dbd616d146100d957806313d21cdf146101025780631bcd8fc014610122575b600080fd5b6100ec6100e73660046140fc565b610272565b6040516100f9919061430b565b60405180910390f35b61011561011036600461431e565b6114d4565b6040516100f99190614444565b61012a611f59565b6040516100f99190614453565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100f9565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b61015e6101b83660046140fc565b6121f5565b6101c5600281565b6040519081526020016100f9565b6101db612432565b6040516100f991906146ea565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b61022261021d36600461431e565b6126b5565b6040516100f9919061476a565b61024261023d36600461431e565b612a75565b6040516100f991906147dd565b61026261025d3660046140fc565b613bf7565b60405190151581526020016100f9565b61035f604051806102400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160008152602001606081526020016000815260200160008152602001600015158152602001600081526020016000815260200160008152602001600060ff168152602001600081525090565b600080600080600061037088613cf4565b509450945094509450945060008560ff1660011461041d576040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015284169063e958b70490602401602060405180830381865afa1580156103f4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061041891906147f0565b6104ad565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015286169063e958b70490602401602060405180830381865afa158015610489573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ad91906147f0565b60ff8716610200890181905273ffffffffffffffffffffffffffffffffffffffff808b1660208b01528b811660608b015282168952909150600114156109e9578473ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610538573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055c91906147f0565b73ffffffffffffffffffffffffffffffffffffffff90811660808901526040517fc7de38a600000000000000000000000000000000000000000000000000000000815282821660048201529085169063c7de38a690602401602060405180830381865afa1580156105d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f5919061480d565b60c08801526040517fdfd5946500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015285169063dfd5946590602401602060405180830381865afa158015610666573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068a919061480d565b60e08801526040517f3ce0735500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015260006024830152861690633ce0735590604401602060405180830381865afa92505050801561073c575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526107399181019061480d565b60015b6107455761074c565b6101408801525b6040517f3ce0735500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015260016024830152861690633ce0735590604401602060405180830381865afa9250505080156107f9575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526107f69181019061480d565b60015b61080257610809565b6101608801525b60c08701516040517f996329f800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526024820192909252600060448201529086169063996329f89060640160a060405180830381865afa9250505080156108c4575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526108c191810190614826565b60015b6108cd576108da565b505015156101808a015250505b8073ffffffffffffffffffffffffffffffffffffffff16631afbb7a46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610925573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610949919061480d565b6101a08801526040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152851690633192195c90602401602060405180830381865afa1580156109bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109df919061480d565b60a0880152610c26565b8273ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5891906147f0565b73ffffffffffffffffffffffffffffffffffffffff90811660808901526040517fc7de38a600000000000000000000000000000000000000000000000000000000815282821660048201529083169063c7de38a6906024016040805180830381865afa158015610acc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af09190614866565b5060c08801526040517fdfd5946500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015283169063dfd5946590602401602060405180830381865afa158015610b62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b86919061480d565b60e08801526040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152841690633192195c906024016040805180830381865afa158015610bf6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1a9190614866565b60a08901526101a08801525b60008660ff16600114610ca7578373ffffffffffffffffffffffffffffffffffffffff166316f0115b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca291906147f0565b610d16565b8573ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1691906147f0565b90508073ffffffffffffffffffffffffffffffffffffffff166345d31f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d87919061480d565b6101008901526000600160ff891614610e0e578473ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610de5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e09919061480d565b610e7d565b8573ffffffffffffffffffffffffffffffffffffffff166320a05ff76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7d919061480d565b90508760ff16600114610f1f576040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152861690638991b2f190602401602060405180830381865afa158015610ef6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1a919061480d565b610faf565b6040517fb451cecc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015287169063b451cecc90602401602060405180830381865afa158015610f8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610faf919061480d565b6102208a01528067ffffffffffffffff811115610fce57610fce61488a565b60405190808252806020026020018201604052801561103e57816020015b6040805160808101825260008082526020808301829052928201819052606082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181610fec5790505b506101208a015260005b818110156113d657604080516080810182526000808252602082018190529181018290526060810191909152600180831b9060ff8c1614156111c5576040517faf0a650200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018590528a169063af0a650290604401608060405180830381865afa1580156110f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111b91906148b9565b5050602084015273ffffffffffffffffffffffffffffffffffffffff9081168084526040517ff9eaee0d0000000000000000000000000000000000000000000000000000000081526004810191909152908a169063f9eaee0d90602401602060405180830381865afa158015611195573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b9919061490d565b15156040830152611388565b6040517f172c48c70000000000000000000000000000000000000000000000000000000081526004810184905273ffffffffffffffffffffffffffffffffffffffff89169063172c48c7906024016040805180830381865afa15801561122f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112539190614928565b5073ffffffffffffffffffffffffffffffffffffffff9081168084526040517f70a082310000000000000000000000000000000000000000000000000000000081529188166004830152906370a0823190602401602060405180830381865afa1580156112c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e8919061480d565b602083015281516040517ff9eaee0d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529088169063f9eaee0d90602401602060405180830381865afa15801561135c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611380919061490d565b151560408301525b6102208c015181161561139c57600161139f565b60005b151560608301526101208c01518051839190859081106113c1576113c161495e565b60209081029190910101525050600101611048565b508273ffffffffffffffffffffffffffffffffffffffff166317d11a156040518163ffffffff1660e01b8152600401602060405180830381865afa158015611422573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611446919061480d565b896101c00181815250508273ffffffffffffffffffffffffffffffffffffffff16633dc54b406040518163ffffffff1660e01b8152600401602060405180830381865afa15801561149b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bf919061480d565b6101e08a015250969998505050505050505050565b61159b604051806102000160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600060ff1681525090565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015283917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa15801561162b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164f919061490d565b611685576040517fd384b23800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316808352604080517ffe14112d000000000000000000000000000000000000000000000000000000008152905185929163fe14112d9160048083019260209291908290030181865afa1580156116f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611719919061480d565b8360c00181815250508073ffffffffffffffffffffffffffffffffffffffff1663ef8d96036040518163ffffffff1660e01b8152600401602060405180830381865afa15801561176d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611791919061480d565b8360e00181815250508073ffffffffffffffffffffffffffffffffffffffff1663743753596040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611809919061480d565b8360a00181815250508073ffffffffffffffffffffffffffffffffffffffff16634c19386c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561185d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611881919061480d565b836101000181815250508073ffffffffffffffffffffffffffffffffffffffff1663788c6bfe6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fa919061480d565b836101600181815250508073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561194f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611973919061480d565b8360800181815250508073ffffffffffffffffffffffffffffffffffffffff166345d31f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119eb919061480d565b836101400181815250508073ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6491906147f0565b836040019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff166336dda7d56040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0a91906147f0565b836060019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663788c6bfe6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb0919061480d565b836101600181815250508073ffffffffffffffffffffffffffffffffffffffff1663e941fa786040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c29919061480d565b61018084015260408084015173ffffffffffffffffffffffffffffffffffffffff9081167f000000000000000000000000000000000000000000000000000000000000000082161460208087019190915282517f609ae31700000000000000000000000000000000000000000000000000000000815292519184169263609ae31792600480830193928290030181865afa158015611ccb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cef919061480d565b836101c00181815250508073ffffffffffffffffffffffffffffffffffffffff1663dbcb313b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d68919061480d565b836101a00181815250506000836060015173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de7919061480d565b6040517f5427c9380000000000000000000000000000000000000000000000000000000081526004810182905290915060009073ffffffffffffffffffffffffffffffffffffffff841690635427c93890602401602060405180830381865afa158015611e58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7c919061480d565b90508015611ec7576101808501518190611eb890611e9c906127106149bc565b876101000151886101400151611eb291906149d3565b90613fd0565b611ec29190614a3f565b611ece565b8461014001515b856101200181815250508273ffffffffffffffffffffffffffffffffffffffff166354fd4d506040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f47919061480d565b60ff166101e086015250505050919050565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b4ac68606040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fec919061480d565b90508067ffffffffffffffff8111156120075761200761488a565b6040519080825280602002602001820160405280156120ff57816020015b6120ec604051806102000160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600060ff1681525090565b8152602001906001900390816120255790505b50915060005b818110156121f0576040517fac4afa38000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ac4afa3890602401602060405180830381865afa15801561219b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121bf91906147f0565b90506121ca816114d4565b8483815181106121dc576121dc61495e565b602090810291909101015250600101612105565b505090565b6040517f6fbc6f6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015260009184917f00000000000000000000000000000000000000000000000000000000000000001690636fbc6f6b90602401602060405180830381865afa158015612286573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122aa919061490d565b6122e0576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060006122ee87613cf4565b5050935093505092508260ff16600114612397576040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015282169063fdd5764590602401602060405180830381865afa15801561236e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061239291906147f0565b612427565b6040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015283169063fdd5764590602401602060405180830381865afa158015612403573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061242791906147f0565b979650505050505050565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c29277cd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124c5919061480d565b90508067ffffffffffffffff8111156124e0576124e061488a565b6040519080825280602002602001820160405280156125c457816020015b60408051610260810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083018290526101208301819052610140830181905261016083015261018082018190526101a082018190526101c082018190526101e082018190526102008201819052610220820181905261024082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816124fe5790505b50915060005b818110156121f0576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa158015612660573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061268491906147f0565b905061268f81612a75565b8483815181106126a1576126a161495e565b6020908102919091010152506001016125ca565b60606000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c29277cd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612725573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612749919061480d565b905060005b81811015612829576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa1580156127e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061280891906147f0565b90506128148187613bf7565b15612820578360010193505b5060010161274e565b508167ffffffffffffffff8111156128435761284361488a565b60405190808252806020026020018201604052801561296157816020015b61294e604051806102400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160008152602001606081526020016000815260200160008152602001600015158152602001600081526020016000815260200160008152602001600060ff168152602001600081525090565b8152602001906001900390816128615790505b5092506000915060005b81811015612a6d576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa158015612a01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a2591906147f0565b9050612a318187613bf7565b15612a6457612a408187610272565b858581518110612a5257612a5261495e565b60209081029190910101526001909301925b5060010161296b565b505050919050565b604080516102608101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082018390526101208201819052610140820181905261016082015261018081018290526101a081018290526101c081018290526101e08101829052610200810182905261022081018290526102408101829052908080808080612b1b88613cf4565b73ffffffffffffffffffffffffffffffffffffffff8e168d5260ff86166101808e01819052959b50939950919750955093509150600114612bca578273ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ba1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bc591906147f0565b612c39565b8473ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c3991906147f0565b73ffffffffffffffffffffffffffffffffffffffff908116602089018190527f00000000000000000000000000000000000000000000000000000000000000009091161460408801526000600160ff881614612d03578373ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cfe91906147f0565b612d72565b8573ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d7291906147f0565b6040517f2e97ca2100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b8116600483015291925090821690632e97ca2190602401602060405180830381865afa158015612de2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e06919061490d565b15156060890152604080517f45d31f9d000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff8316916345d31f9d9160048083019260209291908290030181865afa158015612e78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e9c919061480d565b8860800181815250508073ffffffffffffffffffffffffffffffffffffffff1663743753596040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ef0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f14919061480d565b610100890152600160ff88161415613017578573ffffffffffffffffffffffffffffffffffffffff16639b2cb5d86040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f95919061480d565b8860a00181815250508573ffffffffffffffffffffffffffffffffffffffff16635f48f3936040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fe9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061300d919061480d565b60c08901526130a5565b8273ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa158015613061573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130859190614a73565b6fffffffffffffffffffffffffffffffff90811660c08b01521660a08901525b60008760ff16600114613126578473ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613121919061480d565b613195565b8573ffffffffffffffffffffffffffffffffffffffff166320a05ff76040518163ffffffff1660e01b8152600401602060405180830381865afa158015613171573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613195919061480d565b90508067ffffffffffffffff8111156131b0576131b061488a565b6040519080825280602002602001820160405280156131d9578160200160208202803683370190505b506101208a01528067ffffffffffffffff8111156131f9576131f961488a565b604051908082528060200260200182016040528015613222578160200160208202803683370190505b506101608a015260005b818110156134c4578860ff16600114156133b4576040517f5e5f2e260000000000000000000000000000000000000000000000000000000081526004810182905260009073ffffffffffffffffffffffffffffffffffffffff891690635e5f2e2690602401602060405180830381865afa1580156132ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132d291906147f0565b9050808b610120015183815181106132ec576132ec61495e565b73ffffffffffffffffffffffffffffffffffffffff92831660209182029290920101526040517f78327438000000000000000000000000000000000000000000000000000000008152828216600482015290891690637832743890602401602060405180830381865afa158015613367573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061338b919061480d565b8b610160015183815181106133a2576133a261495e565b602002602001018181525050506134bc565b6040517f172c48c70000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff87169063172c48c7906024016040805180830381865afa15801561341e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134429190614928565b8061ffff1690508b610120015183815181106134605761346061495e565b602002602001018c6101600151848151811061347e5761347e61495e565b60200260200101828152508273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525050505b60010161322c565b5060008860ff16600114613546578373ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561351d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613541919061480d565b6135b5565b8673ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613591573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135b5919061480d565b90508067ffffffffffffffff8111156135d0576135d061488a565b60405190808252806020026020018201604052801561361557816020015b60408051808201909152600080825260208201528152602001906001900390816135ee5790505b506101408b015260005b818110156139015760408051808201909152600080825260208201528a60ff166001146136da576040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff871690635094cb4f90602401602060405180830381865afa1580156136b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136d591906147f0565b613769565b6040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff8a1690635094cb4f90602401602060405180830381865afa158015613745573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061376991906147f0565b73ffffffffffffffffffffffffffffffffffffffff168152600160ff8c16146138245780516040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529089169063fdd5764590602401602060405180830381865afa1580156137fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061381f91906147f0565b6138b7565b80516040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152908a169063fdd5764590602401602060405180830381865afa158015613893573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138b791906147f0565b73ffffffffffffffffffffffffffffffffffffffff1660208201526101408c01518051829190849081106138ed576138ed61495e565b60209081029190910101525060010161361f565b508860ff166001141561398f578773ffffffffffffffffffffffffffffffffffffffff1663b2c53a6c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613959573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061397d919061480d565b60e08b015260ff6102408b0152613be9565b73ffffffffffffffffffffffffffffffffffffffff85166101a08b01819052604080517f9408b63f0000000000000000000000000000000000000000000000000000000081529051639408b63f916004808201926020929091908290030181865afa158015613a02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a2691906147f0565b8a6101e0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508473ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015613aa9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613acd9190614aa6565b5015156102008c015250604080517f9fd12b77000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff881691639fd12b779160048083019260209291908290030181865afa158015613b42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b66919061480d565b8a6102200181815250508573ffffffffffffffffffffffffffffffffffffffff16638345f26e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bdf9190614af7565b60ff166102408b01525b505050505050505050919050565b6040517f6fbc6f6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015260009184917f00000000000000000000000000000000000000000000000000000000000000001690636fbc6f6b90602401602060405180830381865afa158015613c88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cac919061490d565b613ce2576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613cec8484614023565b949350505050565b600080600080600080867f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636fbc6f6b826040518263ffffffff1660e01b8152600401613d73919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa158015613d90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613db4919061490d565b613dea576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8773ffffffffffffffffffffffffffffffffffffffff166354fd4d506040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e59919061480d565b96508660ff1660011415613ee0578795508573ffffffffffffffffffffffffffffffffffffffff1663f93f515b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613eb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ed991906147f0565b9450613fc6565b8793508373ffffffffffffffffffffffffffffffffffffffff16632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f5291906147f0565b92508373ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fc391906147f0565b91505b5091939550919395565b6000821580613fdd575081155b15613fea5750600061401d565b612710613ff8600282614b1a565b61ffff1661400684866149d3565b6140109190614b3b565b61401a9190614a3f565b90505b92915050565b6040517f055ee9b500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600091829185169063055ee9b590602401602060405180830381865afa158015614094573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140b891906147f0565b73ffffffffffffffffffffffffffffffffffffffff1614159392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146140f957600080fd5b50565b6000806040838503121561410f57600080fd5b823561411a816140d7565b9150602083013561412a816140d7565b809150509250929050565b600081518084526020808501945080840160005b8381101561419f578151805173ffffffffffffffffffffffffffffffffffffffff168852838101518489015260408082015115159089015260609081015115159088015260809096019590820190600101614149565b509495945050505050565b805173ffffffffffffffffffffffffffffffffffffffff168252600061024060208301516141f0602086018273ffffffffffffffffffffffffffffffffffffffff169052565b506040830151614204604086018215159052565b50606083015161422c606086018273ffffffffffffffffffffffffffffffffffffffff169052565b506080830151614254608086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060a083015160a085015260c083015160c085015260e083015160e085015261010080840151818601525061012080840151828287015261429783870182614135565b92505050610140808401518186015250610160808401518186015250610180808401516142c78287018215159052565b50506101a083810151908501526101c080840151908501526101e080840151908501526102008084015160ff16908501526102209283015192909301919091525090565b60208152600061401a60208301846141aa565b60006020828403121561433057600080fd5b813561433b816140d7565b9392505050565b805173ffffffffffffffffffffffffffffffffffffffff168252602081015161436f602084018215159052565b506040810151614397604084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060608101516143bf606084018273ffffffffffffffffffffffffffffffffffffffff169052565b506080818101519083015260a0808201519083015260c0808201519083015260e08082015190830152610100808201519083015261012080820151908301526101408082015190830152610160808201519083015261018080820151908301526101a080820151908301526101c080820151908301526101e09081015160ff16910152565b610200810161401d8284614342565b6020808252825182820181905260009190848201906040850190845b8181101561449657614482838551614342565b92840192610200929092019160010161446f565b50909695505050505050565b600081518084526020808501945080840160005b8381101561419f57815173ffffffffffffffffffffffffffffffffffffffff16875295820195908201906001016144b6565b600081518084526020808501945080840160005b8381101561419f578151805173ffffffffffffffffffffffffffffffffffffffff9081168952908401511683880152604090960195908201906001016144fc565b600081518084526020808501945080840160005b8381101561419f57815187529582019590820190600101614551565b805173ffffffffffffffffffffffffffffffffffffffff168252600061026060208301516145b3602086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060408301516145c7604086018215159052565b5060608301516145db606086018215159052565b506080830151608085015260a083015160a085015260c083015160c085015260e083015160e0850152610100808401518186015250610120808401518282870152614628838701826144a2565b92505050610140808401518583038287015261464483826144e8565b925050506101608084015185830382870152614660838261453d565b92505050610180808401516146798287018260ff169052565b50506101a08381015173ffffffffffffffffffffffffffffffffffffffff908116918601919091526101c0808501511515908601526101e080850151909116908501526102008084015115159085015261022080840151908501526102409283015160ff1692909301919091525090565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561475d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc088860301845261474b85835161456d565b94509285019290850190600101614711565b5092979650505050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561475d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08886030184526147cb8583516141aa565b94509285019290850190600101614791565b60208152600061401a602083018461456d565b60006020828403121561480257600080fd5b815161433b816140d7565b60006020828403121561481f57600080fd5b5051919050565b600080600080600060a0868803121561483e57600080fd5b5050835160208501516040860151606087015160809097015192989197509594509092509050565b6000806040838503121561487957600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080600080608085870312156148cf57600080fd5b84516148da816140d7565b60208601516040870151606090970151919890975090945092505050565b8051801515811461490857600080fd5b919050565b60006020828403121561491f57600080fd5b61401a826148f8565b6000806040838503121561493b57600080fd5b8251614946816140d7565b602084015190925061ffff8116811461412a57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156149ce576149ce61498d565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614a0b57614a0b61498d565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614a4e57614a4e614a10565b500490565b80516fffffffffffffffffffffffffffffffff8116811461490857600080fd5b60008060408385031215614a8657600080fd5b614a8f83614a53565b9150614a9d60208401614a53565b90509250929050565b600080600060608486031215614abb57600080fd5b614ac484614a53565b9250614ad2602085016148f8565b9150604084015164ffffffffff81168114614aec57600080fd5b809150509250925092565b600060208284031215614b0957600080fd5b815160ff8116811461433b57600080fd5b600061ffff80841680614b2f57614b2f614a10565b92169190910492915050565b60008219821115614b4e57614b4e61498d565b50019056fea2646970667358221220d15108d0bec9cc6f3903875dd8412869a3da1b36661bdc780e2e2f0ae3136d2464736f6c634300080a003360a06040523480156200001157600080fd5b5060405162001b4538038062001b45833981016040819052620000349162000608565b6000805460ff19169055816001600160a01b0381166200006757604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cc91906200070a565b6001600160a01b031660805250805160005b818110156200014257620001398382815181106200010057620001006200072f565b6020026020010151600001518483815181106200012157620001216200072f565b6020026020010151602001516200014c60201b60201c565b600101620000de565b5050505062000822565b6001600160a01b03821615806200016a57506001600160a01b038116155b156200018957604051635919af9760e11b815260040160405180910390fd5b620001a8826001600160a01b0316620004ba60201b620006751760201c565b620001d65760405163df4c572d60e01b81526001600160a01b03831660048201526024015b60405180910390fd5b620001f5816001600160a01b0316620004ba60201b620006751760201c565b6200021f5760405163df4c572d60e01b81526001600160a01b0382166004820152602401620001cd565b806001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200027c575060408051601f3d908101601f19168201909252620002799181019062000745565b60015b6200029a576040516367a7cd4360e01b815260040160405180910390fd5b8060ff16600814620002bf576040516367a7cd4360e01b815260040160405180910390fd5b506000816001600160a01b031663d62ada116040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200031f575060408051601f3d908101601f191682019092526200031c918101906200076a565b60015b6200032a576200032d565b90505b6000836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200038c575060408051601f3d908101601f19168201909252620003899181019062000745565b60015b620003aa5760405163528ca31d60e01b815260040160405180910390fd5b60128160ff161115620003d05760405163528ca31d60e01b815260040160405180910390fd5b9050826001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa9250505080156200042f575060408051601f3d908101601f191682019092526200042c91810190620007a6565b60015b6200044d576040516367a7cd4360e01b815260040160405180910390fd5b8662000461576200046185858484620004c0565b5050505050620004748484848462000526565b826001600160a01b0316846001600160a01b03167fe263805b03657ab13064915d0723c5ce14981547e7cba5283f66b9e5d81f6e6e60405160405180910390a350505050565b3b151590565b60008313620004e2576040516356e05d2b60e01b815260040160405180910390fd5b836001600160501b0316816001600160501b0316108062000501575081155b15620005205760405163b1cf675560e01b815260040160405180910390fd5b50505050565b6001600160a01b03831682156200053e57600160a11b175b6200055460ff60a21b60a284901b1682620007fb565b6001600160a01b0390951660009081526001602052604090209490945550505050565b80516001600160a01b03811681146200058f57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715620005cf57620005cf62000594565b60405290565b604051601f8201601f191681016001600160401b038111828210171562000600576200060062000594565b604052919050565b60008060408084860312156200061d57600080fd5b620006288462000577565b602085810151919450906001600160401b03808211156200064857600080fd5b818701915087601f8301126200065d57600080fd5b81518181111562000672576200067262000594565b62000682848260051b01620005d5565b818152848101925060069190911b830184019089821115620006a357600080fd5b928401925b81841015620006fa5785848b031215620006c25760008081fd5b620006cc620005aa565b620006d78562000577565b8152620006e686860162000577565b8187015283529285019291840191620006a8565b8096505050505050509250929050565b6000602082840312156200071d57600080fd5b620007288262000577565b9392505050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156200075857600080fd5b815160ff811681146200072857600080fd5b6000602082840312156200077d57600080fd5b815180151581146200072857600080fd5b80516001600160501b03811681146200058f57600080fd5b600080600080600060a08688031215620007bf57600080fd5b620007ca866200078e565b9450602086015193506040860151925060608601519150620007ef608087016200078e565b90509295509295909350565b600082198211156200081d57634e487b7160e01b600052601160045260246000fd5b500190565b6080516112f262000853600039600081816101b201528181610280015281816103e201526104ff01526112f26000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c80638456cb591161008c578063b66102df11610066578063b66102df146101d4578063e8a97a3e146101e7578063f190e5fa146101fa578063f9a650301461023f57600080fd5b80638456cb591461016d5780639dcb511a14610175578063a50cf2c8146101ad57600080fd5b80635c975abb116100bd5780635c975abb1461011c5780635cecbd0e146101325780637afb01041461015a57600080fd5b80633f4ba83a146100e457806341976e09146100ee57806354fd4d5014610114575b600080fd5b6100ec610252565b005b6101016100fc366004610f28565b610340565b6040519081526020015b60405180910390f35b610101600281565b60005460ff16604051901515815260200161010b565b610145610140366004610f4a565b610352565b6040805192835260208301919091520161010b565b610101610168366004610f90565b610376565b6100ec6103b4565b610188610183366004610f28565b6104a0565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010b565b6101887f000000000000000000000000000000000000000000000000000000000000000081565b6101016101e2366004610fbc565b6104b4565b6100ec6101f5366004610ff8565b6104d1565b61020d610208366004610f28565b6105c3565b6040805173ffffffffffffffffffffffffffffffffffffffff909416845291151560208401529082015260600161010b565b61010161024d366004610f90565b61064d565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156102dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103009190611022565b610336576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033e61067b565b565b600061034b82610761565b5092915050565b60008061035f868661064d565b915061036b848461064d565b905094509492505050565b600080600061038484610761565b90925090508161039582600a611193565b61039f908761119f565b6103a991906111dc565b925050505b92915050565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561043e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104629190611022565b610498576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033e610819565b60006104ab826105c3565b50909392505050565b60006104c96104c3858561064d565b83610376565b949350505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561055b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057f9190611022565b6105b5576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105bf82826108d9565b5050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600160205260408120548190819080610624576040517f4bb8ad8200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b947402000000000000000000000000000000000000000086161515945060a286901c9350915050565b600080600061065b84610761565b909250905061066b81600a611193565b61039f838761119f565b3b151590565b60005460ff166106ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b600080600080610770856105c3565b8095508193508294505050506000806000808573ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156107cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f19190611231565b9450945050935093508461080b5761080b84848484610dd9565b829750505050505050915091565b60005460ff1615610886576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016106e3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586107373390565b73ffffffffffffffffffffffffffffffffffffffff82161580610910575073ffffffffffffffffffffffffffffffffffffffff8116155b15610947576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82163b6109ad576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016106e3565b73ffffffffffffffffffffffffffffffffffffffff81163b610a13576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024016106e3565b8073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610a98575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610a9591810190611281565b60015b610ace576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060ff16600814610b0b576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060008173ffffffffffffffffffffffffffffffffffffffff1663d62ada116040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610b93575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610b9091810190611022565b60015b610b9c57610b9f565b90505b60008373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610c26575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610c2391810190611281565b60015b610c5c576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60128160ff161115610c9a576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b90508273ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa925050508015610d21575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610d1e91810190611231565b60015b610d57576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b86610d6857610d6885858484610dd9565b5050505050610d7984848484610e74565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fe263805b03657ab13064915d0723c5ce14981547e7cba5283f66b9e5d81f6e6e60405160405180910390a350505050565b60008313610e13576040517f56e05d2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8369ffffffffffffffffffff168169ffffffffffffffffffff161080610e37575081155b15610e6e576040517fb1cf675500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b73ffffffffffffffffffffffffffffffffffffffff83168215610ea95774020000000000000000000000000000000000000000175b610ecf7503fc000000000000000000000000000000000000000060a284901b16826112a4565b73ffffffffffffffffffffffffffffffffffffffff90951660009081526001602052604090209490945550505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610f2357600080fd5b919050565b600060208284031215610f3a57600080fd5b610f4382610eff565b9392505050565b60008060008060808587031215610f6057600080fd5b84359350610f7060208601610eff565b925060408501359150610f8560608601610eff565b905092959194509250565b60008060408385031215610fa357600080fd5b82359150610fb360208401610eff565b90509250929050565b600080600060608486031215610fd157600080fd5b83359250610fe160208501610eff565b9150610fef60408501610eff565b90509250925092565b6000806040838503121561100b57600080fd5b61101483610eff565b9150610fb360208401610eff565b60006020828403121561103457600080fd5b81518015158114610f4357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b808511156110cc57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156110b2576110b2611044565b808516156110bf57918102915b93841c9390800290611078565b509250929050565b6000826110e3575060016103ae565b816110f0575060006103ae565b816001811461110657600281146111105761112c565b60019150506103ae565b60ff84111561112157611121611044565b50506001821b6103ae565b5060208310610133831016604e8410600b841016171561114f575081810a6103ae565b6111598383611073565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561118b5761118b611044565b029392505050565b6000610f4383836110d4565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156111d7576111d7611044565b500290565b600082611212577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b805169ffffffffffffffffffff81168114610f2357600080fd5b600080600080600060a0868803121561124957600080fd5b61125286611217565b945060208601519350604086015192506060860151915061127560808701611217565b90509295509295909350565b60006020828403121561129357600080fd5b815160ff81168114610f4357600080fd5b600082198211156112b7576112b7611044565b50019056fea2646970667358221220e7485a2cb5750973f539ca59d2211008b42bb92b6c49605a53f5d9c88c330fb164736f6c634300080a003360e06040523480156200001157600080fd5b5060405162002ced38038062002ced8339810160408190526200003491620004bb565b6000805460ff19169055806001600160a01b0381166200006757604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cc9190620004bb565b6001600160a01b039081166080526001805560408051808201909152600281526105a360f41b602082015291508216620001245760405162461bcd60e51b81526004016200011b9190620004ed565b60405180910390fd5b50806001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000164573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200018a9190620004bb565b6001600160a01b031660c052604051620001a490620004ad565b604051809103906000f080158015620001c1573d6000803e3d6000fd5b506001600160a01b031660a08190526040805163204a7f0760e21b81529051638129fc1c9160048082019260009290919082900301818387803b1580156200020857600080fd5b505af11580156200021d573d6000803e3d6000fd5b50505050620002316200028a60201b60201c565b50600454600380546001600160a01b039092166001600160a01b03199283161790556000805260026020527fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b8054909116905562000545565b6000620002a460a0516200038c60201b6200119b1760201c565b9050806001600160a01b0316638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620002e257600080fd5b505af1158015620002f7573d6000803e3d6000fd5b5050600480546001600160a01b03908116600090815260026020908152604090912080546001600160a01b03199081169388169384179091558354169091179091556200035492506005915083906200043b811b6200127d17901c565b506040516001600160a01b038216907f9f69b6c10f6810213e055b0ba6bc0a4e2603f73c221aad77ea35da819cda7dc390600090a250565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260601b60148201526e5af43d82803e903d91602b57fd5bf360881b60288201526037816000f09150506001600160a01b038116620004365760405162461bcd60e51b815260206004820152601660248201527f455243313136373a20637265617465206661696c65640000000000000000000060448201526064016200011b565b919050565b600062000452836001600160a01b0384166200045b565b90505b92915050565b6000818152600183016020526040812054620004a45750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000455565b50600062000455565b610e788062001e7583390190565b600060208284031215620004ce57600080fd5b81516001600160a01b0381168114620004e657600080fd5b9392505050565b600060208083528351808285015260005b818110156200051c57858101830151858201604001528201620004fe565b818111156200052f576000604083870101525b50601f01601f1916929092016040019392505050565b60805160a05160c0516118cf620005a66000396000818161026a015281816103680152610b7001526000818161020201526110650152600081816102c4015281816105b80152818161099601528181610a840152610e7401526118cf6000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806388f64c54116100cd578063b193976311610081578063d82ecc4811610066578063d82ecc4814610309578063e3ba9ace1461031c578063f23953ab1461032f57600080fd5b8063b1939763146102f9578063b60e85181461030157600080fd5b80638f7dcfa3116100b25780638f7dcfa31461029f578063a50cf2c8146102bf578063a904aab6146102e657600080fd5b806388f64c541461026557806389b77b3e1461028c57600080fd5b806354fd4d50116101245780635da33c5b116101095780635da33c5b146101fd578063765e0159146102245780638456cb591461025d57600080fd5b806354fd4d50146101d05780635c975abb146101e657600080fd5b806313d8c8401461015657806321d18456146101a05780632932472f146101b35780633f4ba83a146101c8575b600080fd5b6004546101769073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6101766101ae366004611651565b610337565b6101c66101c1366004611697565b61058a565b005b6101c6610968565b6101d8600181565b604051908152602001610197565b60005460ff165b6040519015158152602001610197565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101766102323660046116da565b73ffffffffffffffffffffffffffffffffffffffff9081166000908152600260205260409020541690565b6101c6610a56565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101c661029a3660046116da565b610b42565b6003546101769073ffffffffffffffffffffffffffffffffffffffff1681565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101c66102f4366004611697565b610e46565b6101d8610fb8565b6101d8611033565b6101ed6103173660046116da565b611044565b61017661032a3660046116f5565b611051565b6101c661105e565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa1580156103c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103e8919061170e565b6040518060400160405280600281526020017f43500000000000000000000000000000000000000000000000000000000000008152509061045f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b60405180910390fd5b506104686112a6565b6003805473ffffffffffffffffffffffffffffffffffffffff8082166000818152600260205260409081902080549093167fffffffffffffffffffffffff0000000000000000000000000000000000000000948516179094558154909216905590517fc75b5a710000000000000000000000000000000000000000000000000000000081523360048201526024810185905260448101849052819063c75b5a7190606401600060405180830381600087803b15801561052657600080fd5b505af115801561053a573d6000803e3d6000fd5b505060405133925073ffffffffffffffffffffffffffffffffffffffff841691507ff3ede7039176503a8ad1fe7cfaa29475a9dbe0cdcaf04ecf9a5c10570c47b10390600090a390505b92915050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610614573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610638919061170e565b61066e576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106766112a6565b60035473ffffffffffffffffffffffffffffffffffffffff838116911614156106fa576003805473ffffffffffffffffffffffffffffffffffffffff808216600090815260026020526040902080549091167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092558154169055610865565b73ffffffffffffffffffffffffffffffffffffffff838116600090815260026020908152604091829020548251808401909352600383527f4146330000000000000000000000000000000000000000000000000000000000918301919091529091848116911614610798576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b5060045473ffffffffffffffffffffffffffffffffffffffff838116911614156107fd57600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85161790555b73ffffffffffffffffffffffffffffffffffffffff828116600081815260026020526040808220805488861684529183208054929095167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790945591905281541690555b6040517fc75b5a7100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600060248301819052604483015283169063c75b5a7190606401600060405180830381600087803b1580156108dc57600080fd5b505af11580156108f0573d6000803e3d6000fd5b505050506109088260056112dd90919063ffffffff16565b508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f25e267469ba2ae82515be7b3d45df60bf8308343f0809e8cf7319058e2255ce660405160405180910390a3505050565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156109f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a16919061170e565b610a4c576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a546112ff565b565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015610ae0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b04919061170e565b610b3a576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a546113e0565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa158015610bcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf0919061170e565b6040518060400160405280600281526020017f435000000000000000000000000000000000000000000000000000000000000081525090610c5e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b50610c6a6005826114a0565b6040518060400160405280600381526020017f414634000000000000000000000000000000000000000000000000000000000081525090610cd8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b50438173ffffffffffffffffffffffffffffffffffffffff16633dc54b406040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4991906117a3565b14156040518060400160405280600381526020017f414631000000000000000000000000000000000000000000000000000000000081525090610db9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b506004805473ffffffffffffffffffffffffffffffffffffffff90811660009081526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081169487169485179091558454168317909355915190917fced6ab9afc868b3a088366f6631ae20752993b5cce5d5f0534ea5a59fcc57d5691a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610ed0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef4919061170e565b610f2a576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f19a1603900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301528416906319a1603990604401600060405180830381600087803b158015610f9b57600080fd5b505af1158015610faf573d6000803e3d6000fd5b50505050505050565b600354600090819073ffffffffffffffffffffffffffffffffffffffff165b73ffffffffffffffffffffffffffffffffffffffff81161561102d5773ffffffffffffffffffffffffffffffffffffffff9081166000908152600260205260409020541681611025816117eb565b925050610fd7565b50919050565b600061103f60056114cf565b905090565b60006105846005836114a0565b60006105846005836114d9565b60006110897f000000000000000000000000000000000000000000000000000000000000000061119b565b90508073ffffffffffffffffffffffffffffffffffffffff16638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156110d357600080fd5b505af11580156110e7573d6000803e3d6000fd5b50506004805473ffffffffffffffffffffffffffffffffffffffff908116600090815260026020526040902080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811692871692831790915582541617905550611156905060058261127d565b5060405173ffffffffffffffffffffffffffffffffffffffff8216907f9f69b6c10f6810213e055b0ba6bc0a4e2603f73c221aad77ea35da819cda7dc390600090a250565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260601b60148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f091505073ffffffffffffffffffffffffffffffffffffffff8116611278576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f455243313136373a20637265617465206661696c6564000000000000000000006044820152606401610456565b919050565b600061129f8373ffffffffffffffffffffffffffffffffffffffff84166114e5565b9392505050565b60035473ffffffffffffffffffffffffffffffffffffffff90811660009081526002602052604090205416610a5457610a5461105e565b600061129f8373ffffffffffffffffffffffffffffffffffffffff8416611534565b60005460ff1661136b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610456565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff161561144d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610456565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586113b63390565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600183016020526040812054151561129f565b6000610584825490565b600061129f8383611627565b600081815260018301602052604081205461152c57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610584565b506000610584565b6000818152600183016020526040812054801561161d576000611558600183611824565b855490915060009061156c90600190611824565b90508181146115d157600086600001828154811061158c5761158c61183b565b90600052602060002001549050808760000184815481106115af576115af61183b565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806115e2576115e261186a565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610584565b6000915050610584565b600082600001828154811061163e5761163e61183b565b9060005260206000200154905092915050565b6000806040838503121561166457600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff8116811461127857600080fd5b6000806000606084860312156116ac57600080fd5b6116b584611673565b92506116c360208501611673565b91506116d160408501611673565b90509250925092565b6000602082840312156116ec57600080fd5b61129f82611673565b60006020828403121561170757600080fd5b5035919050565b60006020828403121561172057600080fd5b8151801515811461129f57600080fd5b600060208083528351808285015260005b8181101561175d57858101830151858201604001528201611741565b8181111561176f576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b6000602082840312156117b557600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561181d5761181d6117bc565b5060010190565b600082821015611836576118366117bc565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220f1e9c81b8c3af2491c907ee66cf24e1bb76111b821db02df8f98dbb48b5ab5fa64736f6c634300080a0033608060405234801561001057600080fd5b50610e58806100206000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c806354fd4d5011610081578063c45a01551161005b578063c45a0155146101a4578063c75b5a71146101ca578063d1660f99146101dd57600080fd5b806354fd4d501461014f5780638129fc1c14610157578063c12c21c01461015f57600080fd5b80631afbb7a4116100b25780631afbb7a41461011d5780631cff79cd146101265780633dc54b401461014657600080fd5b806316128211146100d957806317d11a15146100ee57806319a160391461010a575b600080fd5b6100ec6100e7366004610b42565b6101f0565b005b6100f760035481565b6040519081526020015b60405180910390f35b6100ec610118366004610b8d565b61024c565b6100f760025481565b610139610134366004610bef565b6102c9565b6040516101019190610d49565b6100f760045481565b6100f7600181565b6100ec610344565b60015461017f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610101565b60005461017f9062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b6100ec6101d8366004610d5c565b610494565b6100ec6101eb366004610d8f565b61053d565b60015473ffffffffffffffffffffffffffffffffffffffff163314610241576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600291909155600355565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1633146102a3576040517fb126b84800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102c573ffffffffffffffffffffffffffffffffffffffff83168260006105b4565b5050565b60015460609073ffffffffffffffffffffffffffffffffffffffff16331461031d576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033d73ffffffffffffffffffffffffffffffffffffffff8416836107b4565b9392505050565b600054610100900460ff1661035f5760005460ff1615610363565b303b155b6103f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600054610100900460ff1615801561043357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000166101011790555b600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16336201000002179055801561049157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b50565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1633146104eb576040517fb126b84800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff949094169390931790925560025560035543600455565b60015473ffffffffffffffffffffffffffffffffffffffff16331461058e576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105af73ffffffffffffffffffffffffffffffffffffffff841683836107f6565b505050565b80158061065457506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015284169063dd62ed3e90604401602060405180830381865afa15801561062e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106529190610dcb565b155b6106e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e63650000000000000000000060648201526084016103eb565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526105af9084907f095ea7b300000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261084c565b606061033d83836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250610958565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526105af9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401610732565b60006108ae826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166109589092919063ffffffff16565b8051909150156105af57808060200190518101906108cc9190610de4565b6105af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016103eb565b6060610967848460008561096f565b949350505050565b606082471015610a01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016103eb565b843b610a69576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016103eb565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051610a929190610e06565b60006040518083038185875af1925050503d8060008114610acf576040519150601f19603f3d011682016040523d82523d6000602084013e610ad4565b606091505b5091509150610ae4828286610aef565b979650505050505050565b60608315610afe57508161033d565b825115610b0e5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103eb9190610d49565b60008060408385031215610b5557600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff81168114610b8857600080fd5b919050565b60008060408385031215610ba057600080fd5b610ba983610b64565b9150610bb760208401610b64565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215610c0257600080fd5b610c0b83610b64565b9150602083013567ffffffffffffffff80821115610c2857600080fd5b818501915085601f830112610c3c57600080fd5b813581811115610c4e57610c4e610bc0565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715610c9457610c94610bc0565b81604052828152886020848701011115610cad57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b83811015610cea578181015183820152602001610cd2565b83811115610cf9576000848401525b50505050565b60008151808452610d17816020860160208601610ccf565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061033d6020830184610cff565b600080600060608486031215610d7157600080fd5b610d7a84610b64565b95602085013595506040909401359392505050565b600080600060608486031215610da457600080fd5b610dad84610b64565b9250610dbb60208501610b64565b9150604084013590509250925092565b600060208284031215610ddd57600080fd5b5051919050565b600060208284031215610df657600080fd5b8151801515811461033d57600080fd5b60008251610e18818460208701610ccf565b919091019291505056fea2646970667358221220448e7046078cd668c09328d857e534e2aab6cdc0e691d3d4f2c8baae8e084b1364736f6c634300080a003360c06040523480156200001157600080fd5b506040516200162738038062001627833981016040819052620000349162000177565b60408051808201909152600281526105a360f41b60208201526001600160a01b038216620000805760405162461bcd60e51b8152600401620000779190620001a9565b60405180910390fd5b50806001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e6919062000177565b6001600160a01b03166080816001600160a01b031681525050806001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200013e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000164919062000177565b6001600160a01b031660a0525062000201565b6000602082840312156200018a57600080fd5b81516001600160a01b0381168114620001a257600080fd5b9392505050565b600060208083528351808285015260005b81811015620001d857858101830151858201604001528201620001ba565b81811115620001eb576000604083870101525b50601f01601f1916929092016040019392505050565b60805160a0516113c2620002656000396000818161021f0152818161036401526106d501526000818160af0152818161012a015281816104420152818161056e015281816107b301528181610aa601528181610b890152610c6701526113c26000f3fe60806040526004361061005e5760003560e01c80635869dba8116100435780635869dba814610199578063deecfbc9146101bb578063e79a4089146101ce57600080fd5b80634f0e0ef31461011857806354fd4d501461017657600080fd5b366101135760408051808201909152600381527f574732000000000000000000000000000000000000000000000000000000000060208201523373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b60405180910390fd5b50005b600080fd5b34801561012457600080fd5b5061014c7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561018257600080fd5b5061018b600181565b60405190815260200161016d565b3480156101a557600080fd5b506101b96101b4366004611263565b6101ee565b005b6101b96101c936600461128f565b61031d565b3480156101da57600080fd5b506101b96101e93660046112e1565b61068e565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201819052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa15801561027b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061029f9190611318565b6040518060400160405280600281526020017f43500000000000000000000000000000000000000000000000000000000000008152509061030d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b506103188383610a77565b505050565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808516600483015284917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa1580156103ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103d19190611318565b6040518060400160405280600281526020017f52500000000000000000000000000000000000000000000000000000000000008152509061043f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e6919061133a565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600381526020017f57473100000000000000000000000000000000000000000000000000000000008152509061056b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156105d457600080fd5b505af11580156105e8573d6000803e3d6000fd5b50505050506105f78434610b3c565b6040517f9aa5d46200000000000000000000000000000000000000000000000000000000815234600482015273ffffffffffffffffffffffffffffffffffffffff848116602483015261ffff84166044830152851690639aa5d46290606401600060405180830381600087803b15801561067057600080fd5b505af1158015610684573d6000803e3d6000fd5b5050505050505050565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808516600483015284917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa15801561071e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107429190611318565b6040518060400160405280600281526020017f5250000000000000000000000000000000000000000000000000000000000000815250906107b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610833573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610857919061133a565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600381526020017f5747310000000000000000000000000000000000000000000000000000000000815250906108dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b506109703330858773ffffffffffffffffffffffffffffffffffffffff166336dda7d56040518163ffffffff1660e01b8152600401602060405180830381865afa15801561092e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610952919061133a565b73ffffffffffffffffffffffffffffffffffffffff16929190610cd4565b6040517f05fe138b0000000000000000000000000000000000000000000000000000000081526004810184905230602482015260009073ffffffffffffffffffffffffffffffffffffffff8616906305fe138b906044016020604051808303816000875af11580156109e6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0a9190611357565b9050610a168382610a77565b8273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f6de63bb986f2779478e384365c03cc2e62f06b453856acca87d5a519ce02664960405160405180910390a35050505050565b6040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632e1a7d4d90602401600060405180830381600087803b158015610aff57600080fd5b505af1158015610b13573d6000803e3d6000fd5b50610b389250505073ffffffffffffffffffffffffffffffffffffffff831682610d6f565b5050565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015282917f00000000000000000000000000000000000000000000000000000000000000009091169063dd62ed3e90604401602060405180830381865afa158015610bd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf69190611357565b1015610b38576040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303816000875af1158015610cb0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103189190611318565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052610d69908590610ec9565b50505050565b80471015610dd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610107565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114610e33576040519150601f19603f3d011682016040523d82523d6000602084013e610e38565b606091505b5050905080610318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610107565b6000610f2b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16610fd59092919063ffffffff16565b8051909150156103185780806020019051810190610f499190611318565b610318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610107565b6060610fe48484600085610fee565b90505b9392505050565b606082471015611080576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610107565b843b6110e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610107565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516111119190611370565b60006040518083038185875af1925050503d806000811461114e576040519150601f19603f3d011682016040523d82523d6000602084013e611153565b606091505b509150915061116382828661116e565b979650505050505050565b6060831561117d575081610fe7565b82511561118d5782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b60005b838110156111dc5781810151838201526020016111c4565b83811115610d695750506000910152565b602081526000825180602084015261120c8160408501602087016111c1565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461126057600080fd5b50565b6000806040838503121561127657600080fd5b82356112818161123e565b946020939093013593505050565b6000806000606084860312156112a457600080fd5b83356112af8161123e565b925060208401356112bf8161123e565b9150604084013561ffff811681146112d657600080fd5b809150509250925092565b6000806000606084860312156112f657600080fd5b83356113018161123e565b92506020840135915060408401356112d68161123e565b60006020828403121561132a57600080fd5b81518015158114610fe757600080fd5b60006020828403121561134c57600080fd5b8151610fe78161123e565b60006020828403121561136957600080fd5b5051919050565b600082516113828184602087016111c1565b919091019291505056fea264697066735822122017fd7fc76e4a1efcf24b78a3417fad7ab9576f0a23aa756ddb211c5e2227aa9564736f6c634300080a003360806040523480156200001157600080fd5b5060405162002b8038038062002b80833981016040819052620000349162000122565b6001600160a01b0381166200008f5760405162461bcd60e51b815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640160405180910390fd5b6001600160a01b03811660008181526001602052604080822080546001600160601b0319166b204fce5e3e2502611000000090811790915590517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91620000f99190815260200190565b60405180910390a350600680546001600160a81b031916336101000260ff191617905562000154565b6000602082840312156200013557600080fd5b81516001600160a01b03811681146200014d57600080fd5b9392505050565b612a1c80620001646000396000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c806370a08231116100f9578063b4b5ea5711610097578063dd62ed3e11610071578063dd62ed3e14610503578063e7a324dc14610555578063f1127ed81461057c578063f2fde38b146105ee57600080fd5b8063b4b5ea57146104ca578063c3cda520146104dd578063d505accf146104f057600080fd5b806395d89b41116100d357806395d89b411461045b5780639742ca4614610497578063a9059cbb146104aa578063b0660c3d146104bd57600080fd5b806370a08231146103c7578063782d6fe11461040b5780637ecebe001461043b57600080fd5b806330adf81f11610166578063481c6a7511610140578063481c6a751461031e578063587cde1e146103435780635c19a95c146103795780636fcfff451461038c57600080fd5b806330adf81f14610298578063313ce567146102bf578063349dc329146102d957600080fd5b806320606b701161019757806320606b70146102545780632185810b1461027b57806323b872dd1461028557600080fd5b806306fdde03146101be578063095ea7b31461021057806318160ddd14610233575b600080fd5b6101fa6040518060400160405280600781526020017f47656172626f780000000000000000000000000000000000000000000000000081525081565b60405161020791906124a3565b60405180910390f35b61022361021e36600461253f565b610601565b6040519015158152602001610207565b6102466b204fce5e3e2502611000000081565b604051908152602001610207565b6102467f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b61028361070d565b005b610223610293366004612569565b6107ee565b6102467f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b6102c7601281565b60405160ff9091168152602001610207565b6007546102f99073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610207565b6006546102f990610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6102f96103513660046125a5565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6102836103873660046125a5565b61098a565b6103b261039a3660046125a5565b60046020526000908152604090205463ffffffff1681565b60405163ffffffff9091168152602001610207565b6102466103d53660046125a5565b73ffffffffffffffffffffffffffffffffffffffff166000908152600160205260409020546bffffffffffffffffffffffff1690565b61041e61041936600461253f565b610997565b6040516bffffffffffffffffffffffff9091168152602001610207565b6102466104493660046125a5565b60056020526000908152604090205481565b6101fa6040518060400160405280600481526020017f474541520000000000000000000000000000000000000000000000000000000081525081565b6102836104a53660046125a5565b610cae565b6102236104b836600461253f565b610e20565b6006546102239060ff1681565b61041e6104d83660046125a5565b610e5c565b6102836104eb3660046125d1565b610efa565b6102836104fe366004612629565b611310565b610246610511366004612693565b73ffffffffffffffffffffffffffffffffffffffff9182166000908152602081815260408083209390941682529190915220546bffffffffffffffffffffffff1690565b6102467fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b6105c561058a3660046126c6565b600360209081526000928352604080842090915290825290205463ffffffff81169064010000000090046bffffffffffffffffffffffff1682565b6040805163ffffffff90931683526bffffffffffffffffffffffff909116602083015201610207565b6102836105fc3660046125a5565b61187a565b6000807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83141561063f57506bffffffffffffffffffffffff610664565b6106618360405180606001604052806025815260200161285260259139611a15565b90505b3360008181526020818152604080832073ffffffffffffffffffffffffffffffffffffffff89168085529083529281902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff871690811790915590519081529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a360019150505b92915050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314610798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e616765720060448201526064015b60405180910390fd5b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f795b0e16c8da9807b0a215f3749bd6dbcc49fc0472183f4e446abb7dcbd9d00790600090a1565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081815260408083203380855290835281842054825160608101909352602580845291936bffffffffffffffffffffffff909116928592610856928892919061285290830139611a15565b90508673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156108a257506bffffffffffffffffffffffff82811614155b156109725760006108cc83836040518060600160405280603d8152602001612974603d9139611a67565b73ffffffffffffffffffffffffffffffffffffffff898116600081815260208181526040808320948a168084529482529182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff87169081179091559151918252939450919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505b61097d878783611ad5565b5060019695505050505050565b6109943382611e9c565b50565b6000438210610a28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f476561723a3a6765745072696f72566f7465733a206e6f74207965742064657460448201527f65726d696e656400000000000000000000000000000000000000000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff831660009081526004602052604090205463ffffffff1680610a63576000915050610707565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604081208491610a95600185612735565b63ffffffff90811682526020820192909252604001600020541611610b1b5773ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812090610ae5600184612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff1691506107079050565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020908152604080832083805290915290205463ffffffff16831015610b63576000915050610707565b600080610b71600184612735565b90505b8163ffffffff168163ffffffff161115610c565760006002610b968484612735565b610ba0919061275a565b610baa9083612735565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260036020908152604080832063ffffffff8581168552908352928190208151808301909252549283168082526401000000009093046bffffffffffffffffffffffff1691810191909152919250871415610c2a576020015194506107079350505050565b805163ffffffff16871115610c4157819350610c4f565b610c4c600183612735565b92505b5050610b74565b5073ffffffffffffffffffffffffffffffffffffffff8516600090815260036020908152604080832063ffffffff909416835292905220546bffffffffffffffffffffffff6401000000009091041691505092915050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314610d34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e6167657200604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff8116610db1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640161078f565b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f2f834d1c8c4b956018fff5faca4d99868ae635487424d9c265c257ccbc698c6a90600090a250565b600080610e45836040518060600160405280602681526020016128a760269139611a15565b9050610e52338583611ad5565b5060019392505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526004602052604081205463ffffffff1680610e94576000610ef3565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812090610ec5600184612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b9392505050565b604080518082018252600781527f47656172626f780000000000000000000000000000000000000000000000000060209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f028ef9f797075f74ac647c65fde04fb0f128c2d59fd40f45732269917642fd4681840152466060820152306080808301919091528351808303909101815260a0820184528051908301207fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60c083015273ffffffffffffffffffffffffffffffffffffffff8a1660e08301526101008201899052610120808301899052845180840390910181526101408301909452835193909201929092207f19010000000000000000000000000000000000000000000000000000000000006101608401526101628301829052610182830181905290916000906101a201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa1580156110d8573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166111a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f476561723a3a64656c656761746542795369673a20696e76616c69642073696760448201527f6e61747572650000000000000000000000000000000000000000000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff811660009081526005602052604081208054916111d7836127a4565b919050558914611269576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f476561723a3a64656c656761746542795369673a20696e76616c6964206e6f6e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161078f565b874211156112f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f476561723a3a64656c656761746542795369673a207369676e6174757265206560448201527f7870697265640000000000000000000000000000000000000000000000000000606482015260840161078f565b611303818b611e9c565b505050505b505050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86141561134d57506bffffffffffffffffffffffff611372565b61136f8660405180606001604052806024815260200161291c60249139611a15565b90505b604080518082018252600781527f47656172626f780000000000000000000000000000000000000000000000000060209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f028ef9f797075f74ac647c65fde04fb0f128c2d59fd40f45732269917642fd4681840152466060820152306080808301919091528351808303909101815260a0909101835280519082012073ffffffffffffffffffffffffffffffffffffffff8b166000908152600590925291812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918c918c918c919086611472836127a4565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810188905260e001604051602081830303815290604052805190602001209050600082826040516020016115199291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff8b169284019290925260608301899052608083018890529092509060019060a0016020604051602081039080840390855afa1580156115a2573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661164a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a7065726d69743a20696e76616c6964207369676e617475726500604482015260640161078f565b8b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146116df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f476561723a3a7065726d69743a20756e617574686f72697a6564000000000000604482015260640161078f565b88421115611749576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a7065726d69743a207369676e6174757265206578706972656400604482015260640161078f565b846000808e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508a73ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258760405161186491906bffffffffffffffffffffffff91909116815260200190565b60405180910390a3505050505050505050505050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314611900576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e6167657200604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff811661197d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640161078f565b60065460405173ffffffffffffffffffffffffffffffffffffffff80841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36006805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b6000816c010000000000000000000000008410611a5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b509192915050565b6000836bffffffffffffffffffffffff16836bffffffffffffffffffffffff1611158290611ac2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b50611acd83856127dd565b949350505050565b60065460ff1680611b025750600654610100900473ffffffffffffffffffffffffffffffffffffffff1633145b80611b24575060075473ffffffffffffffffffffffffffffffffffffffff1633145b611b8a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f476561723a3a7472616e73666572732061726520666f7262696464656e000000604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff8316611c2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603c60248201527f476561723a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260448201527f616e736665722066726f6d20746865207a65726f206164647265737300000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff8216611cd0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f476561723a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260448201527f616e7366657220746f20746865207a65726f2061646472657373000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260016020908152604091829020548251606081019093526036808452611d2d936bffffffffffffffffffffffff90921692859291906129b190830139611a67565b73ffffffffffffffffffffffffffffffffffffffff848116600090815260016020908152604080832080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff968716179055928616825290829020548251606081019093526030808452611dbf949190911692859290919061287790830139611f50565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260409182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff968716179055905193851684529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a373ffffffffffffffffffffffffffffffffffffffff808416600090815260026020526040808220548584168352912054611e9792918216911683611fc1565b505050565b73ffffffffffffffffffffffffffffffffffffffff808316600081815260026020818152604080842080546001845282862054949093528787167fffffffffffffffffffffffff000000000000000000000000000000000000000084168117909155905191909516946bffffffffffffffffffffffff9092169391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4611f4a828483611fc1565b50505050565b600080611f5d8486612802565b9050846bffffffffffffffffffffffff16816bffffffffffffffffffffffff1610158390611fb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b50949350505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561200b57506000816bffffffffffffffffffffffff16115b15611e975773ffffffffffffffffffffffffffffffffffffffff8316156120fd5773ffffffffffffffffffffffffffffffffffffffff831660009081526004602052604081205463ffffffff1690816120655760006120c4565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812090612096600185612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b905060006120eb82856040518060600160405280602881526020016128cd60289139611a67565b90506120f9868484846121e2565b5050505b73ffffffffffffffffffffffffffffffffffffffff821615611e975773ffffffffffffffffffffffffffffffffffffffff821660009081526004602052604081205463ffffffff1690816121525760006121b1565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812090612183600185612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b905060006121d882856040518060600160405280602781526020016128f560279139611f50565b9050611308858484845b60006122064360405180606001604052806034815260200161294060349139612465565b905060008463ffffffff1611801561226d575073ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812063ffffffff831691612251600188612735565b63ffffffff908116825260208201929092526040016000205416145b156123035773ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812083916122a4600188612735565b63ffffffff168152602081019190915260400160002080546bffffffffffffffffffffffff92909216640100000000027fffffffffffffffffffffffffffffffff000000000000000000000000ffffffff9092169190911790556123fe565b60408051808201825263ffffffff80841682526bffffffffffffffffffffffff808616602080850191825273ffffffffffffffffffffffffffffffffffffffff8b166000908152600382528681208b8616825290915294909420925183549451909116640100000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009094169116179190911790556123a5846001612832565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260046020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff929092169190911790555b604080516bffffffffffffffffffffffff80861682528416602082015273ffffffffffffffffffffffffffffffffffffffff8716917fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724910160405180910390a25050505050565b6000816401000000008410611a5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91905b600060208083528351808285015260005b818110156124d0578581018301518582016040015282016124b4565b818111156124e2576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461253a57600080fd5b919050565b6000806040838503121561255257600080fd5b61255b83612516565b946020939093013593505050565b60008060006060848603121561257e57600080fd5b61258784612516565b925061259560208501612516565b9150604084013590509250925092565b6000602082840312156125b757600080fd5b610ef382612516565b803560ff8116811461253a57600080fd5b60008060008060008060c087890312156125ea57600080fd5b6125f387612516565b9550602087013594506040870135935061260f606088016125c0565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a03121561264457600080fd5b61264d88612516565b965061265b60208901612516565b95506040880135945060608801359350612677608089016125c0565b925060a0880135915060c0880135905092959891949750929550565b600080604083850312156126a657600080fd5b6126af83612516565b91506126bd60208401612516565b90509250929050565b600080604083850312156126d957600080fd5b6126e283612516565b9150602083013563ffffffff811681146126fb57600080fd5b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600063ffffffff8381169083168181101561275257612752612706565b039392505050565b600063ffffffff80841680612798577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156127d6576127d6612706565b5060010190565b60006bffffffffffffffffffffffff8381169083168181101561275257612752612706565b60006bffffffffffffffffffffffff80831681851680830382111561282957612829612706565b01949350505050565b600063ffffffff8083168185168083038211156128295761282961270656fe476561723a3a617070726f76653a20616d6f756e7420657863656564732039362062697473476561723a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e74206f766572666c6f7773476561723a3a7472616e736665723a20616d6f756e7420657863656564732039362062697473476561723a3a5f6d6f7665566f7465733a20766f746520616d6f756e7420756e646572666c6f7773476561723a3a5f6d6f7665566f7465733a20766f746520616d6f756e74206f766572666c6f7773476561723a3a7065726d69743a20616d6f756e7420657863656564732039362062697473476561723a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d62657220657863656564732033322062697473476561723a3a7472616e7366657246726f6d3a207472616e7366657220616d6f756e742065786365656473207370656e64657220616c6c6f77616e6365476561723a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e7420657863656564732062616c616e6365a26469706673582212201b84fd7789a35c022f692420863210a30e82d2405659f5a28275d433fa53467f64736f6c634300080a003360806040526016805460ff1916905534801561001a57600080fd5b506040516110a73803806110a7833981016040819052610039916100b6565b600080546001600160a01b038085166001600160a01b0319928316179092556003805492841692909116919091179055610080600a6b033b2e3c9fd0803ce80000006100e9565b60075550506b033b2e3c9fd0803ce800000060155561010b565b80516001600160a01b03811681146100b157600080fd5b919050565b600080604083850312156100c957600080fd5b6100d28361009a565b91506100e06020840161009a565b90509250929050565b60008261010657634e487b7160e01b600052601260045260246000fd5b500490565b610f8d8061011a6000396000f3fe608060405234801561001057600080fd5b50600436106102e95760003560e01c806367c99d5811610191578063c5f956af116100e3578063dbcb313b11610097578063f11a648711610071578063f11a648714610320578063f3fdb15a146105f1578063fe14112d1461061157600080fd5b8063dbcb313b146105d6578063e941fa78146105df578063ef8d9603146105e857600080fd5b8063cb3905e1116100c8578063cb3905e1146105c4578063cf33d95514610320578063d0efe753146105cd57600080fd5b8063c5f956af14610588578063ca9505e4146105a857600080fd5b80639aa5d46211610145578063b6ac642a1161011f578063b6ac642a14610567578063bb04b19314610567578063bf28068b1461057557600080fd5b80639aa5d46214610544578063a4e8273e14610557578063b3554a0a1461055e57600080fd5b8063788c6bfe11610176578063788c6bfe146104ef5780638456cb591461050157806396df5dc01461053157600080fd5b806367c99d58146104de57806374375359146104e757600080fd5b806336dda7d51161024a5780634d778ad1116101fe57806354fd4d50116101d857806354fd4d50146104c05780635c975abb146104c8578063609ae317146104d557600080fd5b80634d778ad114610491578063532fe502146104a45780635427c938146104ad57600080fd5b80633f4ba83a1161022f5780633f4ba83a1461045257806345d31f9d1461047f5780634c19386c1461048857600080fd5b806336dda7d51461040f5780633e163df01461042f57600080fd5b80632495a599116102a157806329f3d3b61161028657806329f3d3b6146103b35780632a3354c9146103bc5780632e97ca21146103dc57600080fd5b80632495a599146103735780632954018c1461039357600080fd5b8063078c4781116102d2578063078c4781146103205780630fce70fb146103335780631e16e4fc1461033b57600080fd5b8063030dbb04146102ee57806305fe138b1461030a575b600080fd5b6102f760105481565b6040519081526020015b60405180910390f35b6102f7610318366004610ce8565b600092915050565b61033161032e366004610d14565b50565b005b6015546102f7565b61034e610349366004610d2f565b610618565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610301565b60035461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b60005461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6102f760095481565b600a5461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103ff6103ea366004610d14565b60066020526000908152604090205460ff1681565b6040519015158152602001610301565b60055461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103ff61043d366004610d14565b60146020526000908152604090205460ff1681565b610331601680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b6102f760075481565b6102f760015481565b6102f761049f366004610d2f565b61064f565b6102f760115481565b6102f76104bb366004610d2f565b61066d565b6102f7600181565b6016546103ff9060ff1681565b6102f760085481565b6102f7600d5481565b6102f7610685565b6b033b2e3c9fd0803ce80000006102f7565b610331601680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b61033161053f366004610d2f565b601555565b610331610552366004610d48565b505050565b60016102f7565b6102f7600e5481565b61033161032e366004610d2f565b610331610583366004610ce8565b61071d565b60135461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103316105b6366004610d7d565b600b92909255600c55600d55565b6102f7600c5481565b6102f7600b5481565b6102f760155481565b6102f7600f5481565b6102f760025481565b60125461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b60006102f7565b6004818154811061062857600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6000610667826b033b2e3c9fd0803ce800000061077a565b92915050565b6000610667826b033b2e3c9fd0803ce80000006108e9565b6003546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156106f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107189190610da9565b905090565b6009829055600a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691909117909155600354610776911682846109fe565b5050565b60408051808201909152600281527f4d330000000000000000000000000000000000000000000000000000000000006020820152600090826107f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b60405180910390fd5b506000610800600284610e72565b90506b033b2e3c9fd0803ce8000000610839827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610ead565b6108439190610e72565b8411156040518060400160405280600281526020017f4d31000000000000000000000000000000000000000000000000000000000000815250906108b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b5082816108cd6b033b2e3c9fd0803ce800000087610ec4565b6108d79190610f01565b6108e19190610e72565b949350505050565b60008215806108f6575081155b1561090357506000610667565b8161091b60026b033b2e3c9fd0803ce8000000610e72565b610945907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610ead565b61094f9190610e72565b8311156040518060400160405280600281526020017f4d31000000000000000000000000000000000000000000000000000000000000815250906109c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b506b033b2e3c9fd0803ce80000006109d9600282610e72565b6109e38486610ec4565b6109ed9190610f01565b6109f79190610e72565b9392505050565b6040805173ffffffffffffffffffffffffffffffffffffffff848116602483015260448083018590528351808403909101815260649092018352602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65649084015261055292869291600091610ac9918516908490610b73565b8051909150156105525780806020019051810190610ae79190610f19565b610552576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016107e9565b60606108e1848460008585843b610be6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107e9565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051610c0f9190610f3b565b60006040518083038185875af1925050503d8060008114610c4c576040519150601f19603f3d011682016040523d82523d6000602084013e610c51565b606091505b5091509150610c61828286610c6c565b979650505050505050565b60608315610c7b5750816109f7565b825115610c8b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ce357600080fd5b919050565b60008060408385031215610cfb57600080fd5b82359150610d0b60208401610cbf565b90509250929050565b600060208284031215610d2657600080fd5b6109f782610cbf565b600060208284031215610d4157600080fd5b5035919050565b600080600060608486031215610d5d57600080fd5b83359250610d6d60208501610cbf565b9150604084013590509250925092565b600080600060608486031215610d9257600080fd5b505081359360208301359350604090920135919050565b600060208284031215610dbb57600080fd5b5051919050565b60005b83811015610ddd578181015183820152602001610dc5565b83811115610dec576000848401525b50505050565b6020815260008251806020840152610e11816040850160208701610dc2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082610ea8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600082821015610ebf57610ebf610e43565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610efc57610efc610e43565b500290565b60008219821115610f1457610f14610e43565b500190565b600060208284031215610f2b57600080fd5b815180151581146109f757600080fd5b60008251610f4d818460208701610dc2565b919091019291505056fea26469706673582212204edb887d94928b3914f60ab48df0182da9eb30ddbb7021b164cc728b60a655d564736f6c634300080a003360e06040523480156200001157600080fd5b5060405162013af238038062013af2833981016040819052620000349162000630565b826001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000073573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000999190620007bf565b620000a433620004ab565b6001600160a01b038116608081905260408051630873769560e01b815290516308737695916004808201926020929091908290030181865afa158015620000ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001159190620007bf565b6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000153573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001799190620007bf565b6001600160a01b0390811660a052841660c0525060405183906200019d9062000519565b6001600160a01b039091168152602001604051809103906000f080158015620001ca573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b0392909216918217905560608301516080840151604051620002029062000527565b6001600160a01b03938416815292909116602083015215156040820152606001604051809103906000f0801580156200023f573d6000803e3d6000fd5b50600280546001600160a01b0319166001600160a01b0392909216919091179055604051600090620002746020820162000535565b601f1982820381018352601f909101166040819052600154600254620002b0926001600160a01b039283169291909116908790602001620007e6565b60408051601f1981840301815290829052620002d09291602001620008e8565b60408051601f19818403018152919052905060006200035982848151602092830120604080517fff00000000000000000000000000000000000000000000000000000000000000818601523060601b6001600160601b03191660218201526035810193909352605580840192909252805180840390920182526075909201909152805191012090565b600154604051634fafc35760e11b81526001600160a01b038084166004830152929350911690639f5f86ae90602401600060405180830381600087803b158015620003a357600080fd5b505af1158015620003b8573d6000803e3d6000fd5b50505050620003ce8284620004fb60201b60201c565b600380546001600160a01b0319166001600160a01b0383811691821790925560015460408051630304b08760e61b81529051919093169263c12c21c09160048083019260209291908290030181865afa15801562000430573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004569190620007bf565b6001600160a01b031614620004a05760405162461bcd60e51b815260206004820152600c60248201526b496e636f727265637420434d60a01b604482015260640160405180910390fd5b505050505062000909565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008183516020850134f59050803b6200051457600080fd5b505050565b6158e8806200243683390190565b615e978062007d1e83390190565b615f3d806200dbb583390190565b6001600160a01b03811681146200055957600080fd5b50565b8051620005698162000543565b919050565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b0381118282101715620005a957620005a96200056e565b60405290565b604080519081016001600160401b0381118282101715620005a957620005a96200056e565b604051601f8201601f191681016001600160401b0381118282101715620005ff57620005ff6200056e565b604052919050565b80516001600160801b03811681146200056957600080fd5b805180151581146200056957600080fd5b6000806000606084860312156200064657600080fd5b8351620006538162000543565b602085810151919450906001600160401b03808211156200067357600080fd5b9086019060a082890312156200068857600080fd5b6200069262000584565b6200069d8362000607565b8152620006ac84840162000607565b8482015260408084015183811115620006c457600080fd5b8401601f81018b13620006d657600080fd5b805184811115620006eb57620006eb6200056e565b620006fb878260051b01620005d4565b818152878101955060069190911b82018701908c8211156200071c57600080fd5b918701915b818310156200077e5783838e0312156200073b5760008081fd5b62000745620005af565b8351620007528162000543565b81528389015161ffff811681146200076a5760008081fd5b818a01528652948701949183019162000721565b8484015250620007939050606085016200055c565b6060830152620007a6608085016200061f565b6080830152979097015195989697509495945050505050565b600060208284031215620007d257600080fd5b8151620007df8162000543565b9392505050565b600060018060a01b0380861683526020818616818501526040606081860152610100850160018060801b038088511660608801528084890151166080880152508187015160a080880152818151808452610120890191508583019350600092505b808310156200087857835180518816835286015161ffff168683015292850192600192909201919084019062000847565b5060608901516001600160a01b031660c0890152608090980151151560e0909701969096525094979650505050505050565b6000815160005b81811015620008cd5760208185018101518683015201620008b1565b81811115620008dd576000828601525b509290920192915050565b600062000901620008fa8386620008aa565b84620008aa565b949350505050565b60805160a05160c051611ad3620009636000396000818161010a0152610ea00152600081816103790152610b170152600081816101680152818161068c01528181610a4d01528181610b860152610c190152611ad36000f3fe6080604052600436106100f35760003560e01c80638da5cb5b1161008a578063ebf0c71711610059578063ebf0c71714610367578063f2fde38b1461039b578063f4747c58146103bb578063f9aa028a146103db57600080fd5b80638da5cb5b1461025a57806394ca2cb5146102855780639c4ae2d014610327578063c12c21c01461033a57600080fd5b80633e0b1a23116100c65780633e0b1a23146101ce5780634ef501ac146101e3578063715018a614610230578063805abe6a1461024557600080fd5b806316f0115b146100f85780632954018c146101565780632f7a18811461018a578063318d0d10146101b7575b600080fd5b34801561010457600080fd5b5061012c7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561016257600080fd5b5061012c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561019657600080fd5b5060025461012c9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156101c357600080fd5b506101cc610408565b005b3480156101da57600080fd5b506101cc610498565b3480156101ef57600080fd5b506102036101fe366004611726565b610521565b6040805173ffffffffffffffffffffffffffffffffffffffff93841681529290911660208301520161014d565b34801561023c57600080fd5b506101cc610567565b34801561025157600080fd5b506101cc6105f2565b34801561026657600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff1661012c565b34801561029157600080fd5b5061012c6102a03660046117e6565b8151602092830120604080517fff00000000000000000000000000000000000000000000000000000000000000818601523060601b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660218201526035810193909352605580840192909252805180840390920182526075909201909152805191012090565b6101cc6103353660046117e6565b6107d8565b34801561034657600080fd5b5060015461012c9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561037357600080fd5b5061012c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103a757600080fd5b506101cc6103b63660046118c0565b6107f5565b3480156103c757600080fd5b506101cc6103d63660046118e4565b610925565b3480156103e757600080fd5b5060035461012c9073ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff16331461048e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b610496610a49565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610519576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b61048e610b82565b6004818154811061053157600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff91821692501682565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b61049660006116b1565b60005473ffffffffffffffffffffffffffffffffffffffff163314610673576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b3073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106f5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071991906119c4565b73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610763573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078791906119c4565b73ffffffffffffffffffffffffffffffffffffffff1614156107d5576040517fbdebb83f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33ff5b60008183516020850134f59050803b6107f057600080fd5b505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b73ffffffffffffffffffffffffffffffffffffffff8116610919576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610485565b610922816116b1565b50565b60005473ffffffffffffffffffffffffffffffffffffffff1633146109a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b805160005b818110156107f05760048382815181106109c7576109c76119e1565b602090810291909101810151825460018082018555600094855293839020825160029092020180547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff938416178255929093015192840180549092169216919091179055016109ab565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ab6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ada91906119c4565b6040517ff2fde38b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301529192509082169063f2fde38b90602401600060405180830381600087803b158015610b6757600080fd5b505af1158015610b7b573d6000803e3d6000fd5b5050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1391906119c4565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca691906119c4565b60045490915060005b81811015610dd4576003546004805473ffffffffffffffffffffffffffffffffffffffff90921691637bccacee919084908110610cee57610cee6119e1565b906000526020600020906002020160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660048481548110610d3357610d336119e1565b600091825260209091206002909102015460405160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b158015610db157600080fd5b505af1158015610dc5573d6000803e3d6000fd5b50505050806001019050610caf565b506001546040517fe26b2f6300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529084169063e26b2f6390602401600060405180830381600087803b158015610e4257600080fd5b505af1158015610e56573d6000803e3d6000fd5b50506001546040517fcf33d95500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201527f0000000000000000000000000000000000000000000000000000000000000000909116925063cf33d9559150602401600060405180830381600087803b158015610ee857600080fd5b505af1158015610efc573d6000803e3d6000fd5b50505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f919190611a10565b905060005b818110156116ab576003546040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810183905260009173ffffffffffffffffffffffffffffffffffffffff1690635094cb4f90602401602060405180830381865afa15801561100e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103291906119c4565b6001546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80841660048301529293506000929091169063fdd5764590602401602060405180830381865afa1580156110a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110cc91906119c4565b905060008173ffffffffffffffffffffffffffffffffffffffff1663ce30bbdb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561111b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113f9190611a29565b9050600c81601081111561115557611155611a4a565b14156116225760008273ffffffffffffffffffffffffffffffffffffffff166320b2c1516040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111cc91906119c4565b905060008373ffffffffffffffffffffffffffffffffffffffff1663927188d96040518163ffffffff1660e01b8152600401602060405180830381865afa15801561121b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123f91906119c4565b905060008473ffffffffffffffffffffffffffffffffffffffff166399253ac06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561128e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b291906119c4565b6040517f9dcb511a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152919250908a169063e8a97a3e9083908390639dcb511a90602401602060405180830381865afa15801561132c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135091906119c4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156113bd57600080fd5b505af11580156113d1573d6000803e3d6000fd5b50506040517f9dcb511a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301528c16925063e8a97a3e915085908390639dcb511a90602401602060405180830381865afa15801561144b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061146f91906119c4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156114dc57600080fd5b505af11580156114f0573d6000803e3d6000fd5b50506003546001546040517f7832743800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301529283169450633e7c88d69350879290911690637832743890602401602060405180830381865afa158015611573573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115979190611a79565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015261ffff166024820152604401600060405180830381600087803b15801561160657600080fd5b505af115801561161a573d6000803e3d6000fd5b505050505050505b600d81601081111561163657611636611a4a565b141561169d578173ffffffffffffffffffffffffffffffffffffffff16639b51ecd36040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561168457600080fd5b505af1158015611698573d6000803e3d6000fd5b505050505b836001019350505050610f96565b50505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561173857600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156117915761179161173f565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156117de576117de61173f565b604052919050565b600080604083850312156117f957600080fd5b823567ffffffffffffffff8082111561181157600080fd5b818501915085601f83011261182557600080fd5b81356020828211156118395761183961173f565b611869817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011601611797565b9250818352878183860101111561187f57600080fd5b8181850182850137600091830181019190915290969401359450505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461092257600080fd5b6000602082840312156118d257600080fd5b81356118dd8161189e565b9392505050565b600060208083850312156118f757600080fd5b823567ffffffffffffffff8082111561190f57600080fd5b818501915085601f83011261192357600080fd5b8135818111156119355761193561173f565b611943848260051b01611797565b818152848101925060069190911b83018401908782111561196357600080fd5b928401925b818410156119b957604084890312156119815760008081fd5b61198961176e565b84356119948161189e565b8152848601356119a38161189e565b8187015283526040939093019291840191611968565b979650505050505050565b6000602082840312156119d657600080fd5b81516118dd8161189e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215611a2257600080fd5b5051919050565b600060208284031215611a3b57600080fd5b8151601181106118dd57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060208284031215611a8b57600080fd5b815161ffff811681146118dd57600080fdfea264697066735822122090f5e4310a8b66bfdd7fdfbe64bc5b98570e7c1a415ffb0ced3c857cf6c5b14064736f6c634300080a00336101606040526000805462ff00001916620c00001790553480156200002357600080fd5b50604051620058e8380380620058e8833981016040819052620000469162000537565b806001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000085573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ab919062000537565b6000805460ff191690556001600160a01b038116620000dd57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200011c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000142919062000537565b6001600160a01b03166080816001600160a01b031681525050506000816001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200019d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c3919062000537565b6001600160a01b03831661010081905260e081905260408051632495a59960e01b81529051929350600092632495a599916004808201926020929091908290030181865afa1580156200021a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000240919062000537565b6001600160a01b03811660c05290506200025a8162000472565b816001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000299573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002bf919062000537565b6001600160a01b0316610120816001600160a01b031681525050816001600160a01b03166377532ed96040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000318573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033e919062000537565b6001600160a01b0316610140816001600160a01b031681525050816001600160a01b031663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000397573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003bd919062000537565b6001600001600a6101000a8154816001600160a01b0302191690836001600160a01b03160217905550816001600160a01b0316639068a8686040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000425573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044b919062000537565b6001600160a01b031660a0525050600380546001600160a01b031916331790555062000588565b6001600160a01b03811660009081526006602052604090205415620004aa57604051632e5a5c7760e01b815260040160405180910390fd5b61010060055410620004cf57604051631cbbe18560e01b815260040160405180910390fd5b600580546001600160a01b0383166000818152600660209081526040808320600190951b948590558483526004909152812091909155825491929062000515836200055e565b91905055505050565b6001600160a01b03811681146200053457600080fd5b50565b6000602082840312156200054a57600080fd5b815162000557816200051e565b9392505050565b60006000198214156200058157634e487b7160e01b600052601160045260246000fd5b5060010190565b60805160a05160c05160e051610100516101205161014051615248620006a0600039600081816107e20152818161371001526137c501526000818161052f01526136780152600081816103d301528181610e5701528181610ebb015281816124ff0152818161265a01528181612aa101528181612b8c01528181612c4e01528181612d0d0152613b8f015260006105a401526000818161062701528181610d2201528181610db301528181610e0001528181610e3601528181610f3f0152818161203a01528181612b6b015281816130ee015281816134dc015281816135a90152613fe601526000818161081c01528181610fe101526124c20152600081816107a80152818161118401526122cb01526152486000f3fe608060405234801561001057600080fd5b50600436106103415760003560e01c8063830aa745116101bd578063a70bc542116100f9578063e75538c7116100a2578063f9aa028a1161007c578063f9aa028a1461089d578063fdd57645146108bd578063fe47cde7146108f3578063ff6875431461091357600080fd5b8063e75538c714610864578063e958b70414610877578063f67c5bd01461088a57600080fd5b8063db7ceb80116100d3578063db7ceb8014610817578063dc2b21c11461083e578063e1998cf91461085157600080fd5b8063a70bc542146107ca578063c5e10eef146107dd578063d48bfca71461080457600080fd5b806394cf073a116101665780639f5f86ae116101405780639f5f86ae146107745780639fd12b7714610787578063a366f49614610790578063a50cf2c8146107a357600080fd5b806394cf073a146106f557806395373018146107085780639af1d35a1461071b57600080fd5b80638991b2f1116101975780638991b2f1146106af5780638fe3f93f146106cf578063944ac59f146106e257600080fd5b8063830aa7451461066f5780638345f26e146106825780638456cb59146106a757600080fd5b8063458936f51161028c578063570a7af2116102355780636ce4074a1161020f5780636ce4074a146105ef5780636e98e5e41461060f5780636f307dc314610622578063783274381461064957600080fd5b8063570a7af21461059f5780635c975abb146105c6578063654a9eda146105dc57600080fd5b80635063524a116102665780635063524a1461055157806351e3f1601461058457806354fd4d501461059757600080fd5b8063458936f51461050e57806346fb371d146105175780634f0e0ef31461052a57600080fd5b80632630c12f116102ee5780633192195c116102c85780633192195c146104be5780633e8297ca146104e65780633f4ba83a1461050657600080fd5b80632630c12f1461045857806329df0b93146104845780632f7a18811461049757600080fd5b806316f0115b1161031f57806316f0115b146103ce578063172c48c7146103f55780632362a2d81461043757600080fd5b8063055ee9b5146103465780630d8f9cee146103a657806311ca4fc2146103bb575b600080fd5b61037c610354366004614a87565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6103b96103b4366004614aa4565b610949565b005b6103b96103c9366004614aa4565b610a76565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b610408610403366004614add565b610b4e565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835261ffff90911660208301520161039d565b61044a610445366004614b13565b610b66565b60405190815260200161039d565b6001546a0100000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1661037c565b6103b9610492366004614a87565b6110be565b60005461037c906301000000900473ffffffffffffffffffffffffffffffffffffffff1681565b6104d16104cc366004614a87565b611122565b6040805192835260208301919091520161039d565b61044a6104f4366004614a87565b60096020526000908152604090205481565b6103b9611156565b61044a60055481565b6103b9610525366004614b95565b611244565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b61056461055f366004614be6565b61149b565b60408051948552602085019390935291830152606082015260800161039d565b6103b9610592366004614aa4565b611602565b61044a600281565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b60005460ff16604051901515815260200161039d565b6103b96105ea366004614c21565b611703565b6106026105fd366004614d40565b611bbb565b60405161039d9190614e5b565b6103b961061d366004614aa4565b611e8e565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b61065c610657366004614a87565b612036565b60405161ffff909116815260200161039d565b6103b961067d366004614b95565b61210f565b6000546106959062010000900460ff1681565b60405160ff909116815260200161039d565b6103b961229d565b61044a6106bd366004614a87565b60086020526000908152604090205481565b61037c6106dd366004614e6e565b612389565b6103b96106f0366004614ea5565b612718565b61044a610703366004614f0a565b612845565b6103b9610716366004614a87565b612e5a565b6001546040805161ffff808416825262010000840481166020830152640100000000840481169282019290925266010000000000008304821660608201526801000000000000000090920416608082015260a00161039d565b6103b9610782366004614a87565b612f85565b61044a60075481565b6103b961079e366004614add565b613045565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b96107d8366004614f4c565b61309b565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b9610812366004614a87565b613221565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b961084c366004614f81565b61327b565b6103b961085f366004614aa4565b613306565b610408610872366004614add565b6134c9565b61037c610885366004614a87565b613541565b61044a610898366004614a87565b6135a5565b60035461037c9073ffffffffffffffffffffffffffffffffffffffff1681565b61037c6108cb366004614a87565b600b6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b600c5461037c9073ffffffffffffffffffffffffffffffffffffffff1681565b61037c610921366004614a87565b600a6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561099b57506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b156109d2576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff1615610a14576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055610a4a828261362e565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b60035473ffffffffffffffffffffffffffffffffffffffff163314610ac7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805473ffffffffffffffffffffffffffffffffffffffff9384166301000000027fffffffffffffffffff0000000000000000000000000000000000000000ffffff90911617905560018054919092166a0100000000000000000000027fffff0000000000000000000000000000000000000000ffffffffffffffffffff909116179055565b600080610b5d6001841b6134c9565b91509150915091565b6000805460ff1615610bd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064015b60405180910390fd5b600054610100900460ff1615610c1b576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff163314610ca0576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610cab89613541565b90506000806000806000610cbe86611122565b9094509050610ccf8c8e868461149b565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152939b5093985090955093506000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015610d6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8f9190614fa4565b9050610d9b8887614fec565b610da6906001614fec565b811115610de657610de1877f00000000000000000000000000000000000000000000000000000000000000008d60018c8b870303038d61366e565b610e30565b610e3073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168d8960018a8d01869003016138c0565b610e7e877f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000089600061366e565b6040517fca9505e40000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604481018490527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ca9505e490606401600060405180830381600087803b158015610f1457600080fd5b505af1158015610f28573d6000803e3d6000fd5b50505050505050506001841115610f6757610f67837f00000000000000000000000000000000000000000000000000000000000000008d87600061366e565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260086020526040902054861916610f9c8489888461395b565b6040517f89b77b3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f000000000000000000000000000000000000000000000000000000000000000016906389b77b3e90602401600060405180830381600087803b15801561102557600080fd5b505af1158015611039573d6000803e3d6000fd5b50505073ffffffffffffffffffffffffffffffffffffffff909c16600090815260026020526040812080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550929a9950505050505050505050565b6000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314611116576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61111f81613a35565b50565b60008060008061113185613aa6565b91955092509050816111438286615004565b61114d9190615041565b92505050915091565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156111e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611204919061507c565b61123a576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611242613c24565b565b60005460ff16156112b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156112f3576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100178155338152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff9081169084161480159061137457506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b80156113985750600c5473ffffffffffffffffffffffffffffffffffffffff163314155b806113b7575073ffffffffffffffffffffffffffffffffffffffff8316155b156113ee576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113f7826135a5565b61142d576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061143885613541565b9050611448838583856000613d05565b61146c5761145b83858360006001613d05565b5061146a838583856001613d05565b505b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b6001546000908190819081906127109061ffff166114b98888615099565b6114c39190615004565b6114cd9190615041565b6114d79086614fec565b935060018760028111156114ed576114ed6150b0565b1415611587576001546000906127109061151390640100000000900461ffff168b615004565b61151d9190615041565b6001549091506127109061153b9062010000900461ffff168b615004565b6115459190615041565b61154f9086614fec565b94508481111561156657600185820303935061156a565b8094505b85811061157b578585039250611581565b84860391505b506115f7565b600287600281111561159b5761159b6150b0565b14156115f157600154600090612710906115c59068010000000000000000900461ffff168b615004565b6115cf9190615041565b6001549091506127109061153b906601000000000000900461ffff168b615004565b84840391505b945094509450949050565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561165457506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b1561168b576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff16156116cd576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055610a4a8282613ea6565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561175557506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b1561178c576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff16156117ce576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790556118048584613ea6565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152600091908616906370a0823190602401602060405180830381865afa158015611874573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118989190614fa4565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529192506000918616906370a0823190602401602060405180830381865afa15801561190a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192e9190614fa4565b60015490915060009081906a0100000000000000000000900473ffffffffffffffffffffffffffffffffffffffff16635cecbd0e61196c8689615099565b8a6119778988615099565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152600481019390935273ffffffffffffffffffffffffffffffffffffffff918216602484015260448301528a1660648201526084016040805180830381865afa1580156119f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1791906150df565b9150915060018411611a2d57611a2d898961362e565b611a3687612036565b611a449061ffff1682615004565b9050611a4f88612036565b611a5d9061ffff1683615004565b9150818110611a7857611a6f89613a35565b5050505061146c565b73ffffffffffffffffffffffffffffffffffffffff891660009081526009602052604081205483611ab56b033b2e3c9fd0803ce800000085615004565b611abf9190615041565b611ad5906b033b2e3c9fd0803ce8000000615099565b611adf9190614fec565b60015490915061271090611b0a906b033b2e3c9fd0803ce80000009062010000900461ffff16615004565b611b149190615041565b8111611b555773ffffffffffffffffffffffffffffffffffffffff8a166000908152600960205260409020819055611b4b8a613a35565b505050505061146c565b611b5e8a613f56565b50505073ffffffffffffffffffffffffffffffffffffffff871660009081526009602052604090206001905550505050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b6060611bc960005460ff1690565b15611c30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff1615611c72576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100178155338152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff908116908416141580611ce7575073ffffffffffffffffffffffffffffffffffffffff8316155b15611d3d57600c5473ffffffffffffffffffffffffffffffffffffffff163314611d3d576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611d4885613541565b90508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167faed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab0360405160405180910390a36040517f1cff79cd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821690631cff79cd90611df89087908790600401615103565b6000604051808303816000875af1158015611e17573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611e5d9190810190615132565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905595945050505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314611edf576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821615611f4f5773ffffffffffffffffffffffffffffffffffffffff8281166000908152600a6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169183169190911790555b73ffffffffffffffffffffffffffffffffffffffff811615611fbf5773ffffffffffffffffffffffffffffffffffffffff8181166000908152600b6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169184169190911790555b73ffffffffffffffffffffffffffffffffffffffff811673cccccccccccccccccccccccccccccccccccccccc141561203257600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790555b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120ba5750506001547e01000000000000000000000000000000000000000000000000000000000000900461ffff1690565b60006120c5836135a5565b9050806120fe576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612107816134c9565b949350505050565b60005460ff161561217c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156121be576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff163314612243576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61224d8383613ea6565b61226f73ffffffffffffffffffffffffffffffffffffffff83168585846138c0565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555050565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015612327573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061234b919061507c565b612381576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112426142d4565b6000805460ff16156123f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff1615612439576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff1633146124be576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166321d18456857f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612568573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061258c9190614fa4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168152600481019290925260248201526044016020604051808303816000875af11580156125e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061260b91906151a0565b6040517fbf28068b0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff80831660248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063bf28068b90604401600060405180830381600087803b1580156126a057600080fd5b505af11580156126b4573d6000803e3d6000fd5b505050506126c28382614394565b73ffffffffffffffffffffffffffffffffffffffff811660009081526008602052604081206001905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690559392505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314612769576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805461ffff92831668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9484166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff96851664010000000002969096167fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff97851662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000090931694909816939093171794909416949094179190911716919091179055565b6000805460ff16156128b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156128f5576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff16331461297a576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080600061298887613aa6565b925092509250846129a25761299d8684615099565b6129ac565b6129ac8684614fec565b935060008515612b045769021e19e0c9bab24000008510612a15576129d583603689901c615004565b6129e3603686901c84615004565b6129ed9190614fec565b603686901c6129fc8585615004565b612a069190615004565b612a109190615041565b612a52565b612a1f8388615004565b612a298584615004565b612a339190614fec565b85612a3e8585615004565b612a489190615004565b612a529190615041565b6040517fbf28068b0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff8a811660248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063bf28068b90604401600060405180830381600087803b158015612ae757600080fd5b505af1158015612afb573d6000803e3d6000fd5b50505050612d9f565b60008484612b128583615004565b612b1c9190615041565b612b269190615099565b60015490915060009061271090612b419061ffff1684615004565b612b4b9190615041565b905073ffffffffffffffffffffffffffffffffffffffff8a1663d1660f997f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000084612bb6878f614fec565b612bc09190614fec565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b158015612c3457600080fd5b505af1158015612c48573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ca9505e4838b612c949190614fec565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815260048101919091526024810184905260006044820152606401600060405180830381600087803b158015612cf357600080fd5b505af1158015612d07573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d9a9190614fa4565b925050505b6040517f16128211000000000000000000000000000000000000000000000000000000008152600481018690526024810182905273ffffffffffffffffffffffffffffffffffffffff891690631612821190604401600060405180830381600087803b158015612e0e57600080fd5b505af1158015612e22573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055509498975050505050505050565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff16158015612eac57506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b15612ee3576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff1615612f25576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055612f5a81613f56565b50600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b60035473ffffffffffffffffffffffffffffffffffffffff163314612fd6576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517ff62005acebe9b616aefb5f248b48f5e89f28437b27d1eebc0b2d911209f297af90600090a250565b60035473ffffffffffffffffffffffffffffffffffffffff163314613096576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600755565b60035473ffffffffffffffffffffffffffffffffffffffff1633146130ec576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613193576001805461ffff83167e01000000000000000000000000000000000000000000000000000000000000027dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790555050565b600061319e836135a5565b9050806131d7576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000908152600460205260409020805473ffffffffffffffffffffffffffffffffffffffff1675ffff000000000000000000000000000000000000000060a084901b161790555050565b60035473ffffffffffffffffffffffffffffffffffffffff163314613272576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61111f81614467565b60035473ffffffffffffffffffffffffffffffffffffffff1633146132cc576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805460ff90921662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff909216919091179055565b60005460ff1615613373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156133b5576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff16331461343a576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061344583613541565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260026020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055905061349c8282614394565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b60008082600114156135275750506001547f0000000000000000000000000000000000000000000000000000000000000000927e0100000000000000000000000000000000000000000000000000000000000090910461ffff169150565b50506000908152600460205260409020549060a082901c90565b73ffffffffffffffffffffffffffffffffffffffff80821660009081526002602052604090205416806135a0576040517fb5ba4c4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146136255773ffffffffffffffffffffffffffffffffffffffff8216600090815260066020526040902054613628565b60015b92915050565b6000613639826135a5565b73ffffffffffffffffffffffffffffffffffffffff909316600090815260086020526040902080549319939093169092555050565b8080156136c657507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b15613828576040517fd1660f9900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301526044820184905286169063d1660f9990606401600060405180830381600087803b15801561376357600080fd5b505af1158015613777573d6000803e3d6000fd5b50506040517f5869dba800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690527f0000000000000000000000000000000000000000000000000000000000000000169250635869dba89150604401600060405180830381600087803b15801561380b57600080fd5b505af115801561381f573d6000803e3d6000fd5b505050506138b9565b6040517fd1660f9900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301526044820184905286169063d1660f9990606401600060405180830381600087803b1580156138a057600080fd5b505af11580156138b4573d6000803e3d6000fd5b505050505b5050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261395590859061455b565b50505050565b60025b8181116138b95781811615613a2d576000613978826134c9565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529192506000918316906370a0823190602401602060405180830381865afa1580156139eb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a0f9190614fa4565b90506002811115613a2a57613a2a878388600185038961366e565b50505b60011b61395e565b73ffffffffffffffffffffffffffffffffffffffff811660009081526008602052604081205490613a6582614667565b60005490915062010000900460ff16811115613aa1576000613a86836146a7565b613a91906001614fec565b905061395584848460008561470b565b505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff16631afbb7a46040518163ffffffff1660e01b8152600401602060405180830381865afa158015613af6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b1a9190614fa4565b92508373ffffffffffffffffffffffffffffffffffffffff166317d11a156040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b8b9190614fa4565b91507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bf8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c1c9190614fa4565b929491935050565b60005460ff16613c90576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610bd0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6040805173ffffffffffffffffffffffffffffffffffffffff8681166024830152604480830186905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b30000000000000000000000000000000000000000000000000000000017905291517f1cff79cd000000000000000000000000000000000000000000000000000000008152600092861691631cff79cd91613dc6918a91600401615103565b6000604051808303816000875af1925050508015613e2457506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052613e219190810190615132565b60015b613e2d57613e61565b80511580613e50575080806020019051810190613e4a919061507c565b15156001145b15613e5f576001915050613e9d565b505b8115613e99576040517f76e3e29c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060005b95945050505050565b6000613eb1826135a5565b9050801580613ec35750600754811615155b15613efa576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83166000908152600860205260409020548116613aa15773ffffffffffffffffffffffffffffffffffffffff83166000908152600860205260409020805482179055505050565b60015473ffffffffffffffffffffffffffffffffffffffff8281166000908152600860205260408120546a010000000000000000000090930490911691908080613f9f86611122565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526127108202600482015273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350908716915063f9a6503090604401602060405180830381865afa15801561403a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061405e9190614fa4565b9250614069846146a7565b6001019150506000806000805b848110156142a157801561408f5760018186031b614092565b60015b935086841615614299576000806140a8866134c9565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8e811660048301529294509092506000918416906370a0823190602401602060405180830381865afa15801561411d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141419190614fa4565b9050600181111561428c576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff848116602483015261ffff841691908d169063f9a6503090604401602060405180830381865afa1580156141c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141ea9190614fa4565b6141f49190615004565b6141fe9087614fec565b95508886106142875760006142128b614667565b60005490915062010000900460ff16811115614249576142448d8c836001891561423e57898e0361470b565b8d61470b565b614278565b85156142785773ffffffffffffffffffffffffffffffffffffffff8d1660009081526008602052604090208b90555b50505050505050505050505050565b614295565b98861898600194505b5050505b600101614076565b506040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005460ff1615614341576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613cdb3390565b73ffffffffffffffffffffffffffffffffffffffff821615806143dd575073ffffffffffffffffffffffffffffffffffffffff8281166000908152600260205260409020541615155b15614414576040517f9e59609e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff918216600090815260026020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001691909216179055565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260066020526040902054156144c4576040517f2e5a5c7700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61010060055410614501576040517f1cbbe18500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005805473ffffffffffffffffffffffffffffffffffffffff83166000818152600660209081526040808320600190951b9485905584835260049091528120919091558254919290614552836151bd565b91905055505050565b60006145bd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166148799092919063ffffffff16565b805190915015613aa157808060200190518101906145db919061507c565b613aa1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610bd0565b60008060005b6101008110156146a0576001811b91508382161561468c578260010192505b838210614698576146a0565b60010161466d565b5050919050565b600081600114156146ba57506000919050565b61010060015b60016146cc8284614fec565b901c92506001831b848116158015906146e75750600185851c145b156146f257506146a0565b84811061470157839250614705565b8391505b506146c0565b815b81811015614846576001811b8581161561483d57600061472c826134c9565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529192506000918316906370a0823190602401602060405180830381865afa15801561479f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147c39190614fa4565b90506001811161483a57600054978318977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9097019660ff6201000090910416871161483a5750505073ffffffffffffffffffffffffffffffffffffffff86166000908152600860205260409020859055506138b9565b50505b5060010161470d565b506040517f53275fcb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606148888484600085614892565b90505b9392505050565b606082471015614924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610bd0565b843b61498c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610bd0565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516149b591906151f6565b60006040518083038185875af1925050503d80600081146149f2576040519150601f19603f3d011682016040523d82523d6000602084013e6149f7565b606091505b5091509150614a07828286614a12565b979650505050505050565b60608315614a2157508161488b565b825115614a315782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd09190614e5b565b73ffffffffffffffffffffffffffffffffffffffff8116811461111f57600080fd5b600060208284031215614a9957600080fd5b813561488b81614a65565b60008060408385031215614ab757600080fd5b8235614ac281614a65565b91506020830135614ad281614a65565b809150509250929050565b600060208284031215614aef57600080fd5b5035919050565b8035600381106135a057600080fd5b801515811461111f57600080fd5b600080600080600080600060e0888a031215614b2e57600080fd5b8735614b3981614a65565b9650614b4760208901614af6565b9550604088013594506060880135614b5e81614a65565b93506080880135614b6e81614a65565b925060a0880135915060c0880135614b8581614b05565b8091505092959891949750929550565b60008060008060808587031215614bab57600080fd5b8435614bb681614a65565b93506020850135614bc681614a65565b92506040850135614bd681614a65565b9396929550929360600135925050565b60008060008060808587031215614bfc57600080fd5b84359350614c0c60208601614af6565b93969395505050506040820135916060013590565b600080600080600060a08688031215614c3957600080fd5b8535614c4481614a65565b94506020860135614c5481614a65565b93506040860135614c6481614a65565b94979396509394606081013594506080013592915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614cf257614cf2614c7c565b604052919050565b600067ffffffffffffffff821115614d1457614d14614c7c565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600080600060608486031215614d5557600080fd5b8335614d6081614a65565b92506020840135614d7081614a65565b9150604084013567ffffffffffffffff811115614d8c57600080fd5b8401601f81018613614d9d57600080fd5b8035614db0614dab82614cfa565b614cab565b818152876020838501011115614dc557600080fd5b816020840160208301376000602083830101528093505050509250925092565b60005b83811015614e00578181015183820152602001614de8565b838111156139555750506000910152565b60008151808452614e29816020860160208601614de5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061488b6020830184614e11565b60008060408385031215614e8157600080fd5b823591506020830135614ad281614a65565b803561ffff811681146135a057600080fd5b600080600080600060a08688031215614ebd57600080fd5b614ec686614e93565b9450614ed460208701614e93565b9350614ee260408701614e93565b9250614ef060608701614e93565b9150614efe60808701614e93565b90509295509295909350565b600080600060608486031215614f1f57600080fd5b8335614f2a81614a65565b9250602084013591506040840135614f4181614b05565b809150509250925092565b60008060408385031215614f5f57600080fd5b8235614f6a81614a65565b9150614f7860208401614e93565b90509250929050565b600060208284031215614f9357600080fd5b813560ff8116811461488b57600080fd5b600060208284031215614fb657600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115614fff57614fff614fbd565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561503c5761503c614fbd565b500290565b600082615077577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60006020828403121561508e57600080fd5b815161488b81614b05565b6000828210156150ab576150ab614fbd565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600080604083850312156150f257600080fd5b505080516020909101519092909150565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015260006148886040830184614e11565b60006020828403121561514457600080fd5b815167ffffffffffffffff81111561515b57600080fd5b8201601f8101841361516c57600080fd5b805161517a614dab82614cfa565b81815285602083850101111561518f57600080fd5b613e9d826020830160208601614de5565b6000602082840312156151b257600080fd5b815161488b81614a65565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156151ef576151ef614fbd565b5060010190565b60008251615208818460208701614de5565b919091019291505056fea26469706673582212209d39bb9d4972b515acdad1ffb757acd15e103ca6ee762f88a6382b36243734ba64736f6c634300080a00336101406040523480156200001257600080fd5b5060405162005e9738038062005e97833981016040819052620000359162000198565b60016000556001600160a01b0383166200006257604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038316608081905260408051636f307dc360e01b81529051636f307dc3916004808201926020929091908290030181865afa158015620000ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d39190620001ea565b6001600160a01b031660a0816001600160a01b031681525050826001600160a01b0316634f0e0ef36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200012b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001519190620001ea565b6001600160a01b0390811660c0529190911660e0819052151561010052151561012052506200020f565b80516001600160a01b03811681146200019357600080fd5b919050565b600080600060608486031215620001ae57600080fd5b620001b9846200017b565b9250620001c9602085016200017b565b915060408401518015158114620001df57600080fd5b809150509250925092565b600060208284031215620001fd57600080fd5b62000208826200017b565b9392505050565b60805160a05160c05160e0516101005161012051615a86620004116000396000818161061101528181612fb5015261481f01526000818161031701528181610dde015281816144f901526146e5015260008181610557015281816146a901526147a901526000818161034b0152818161387d015261392d01526000818161047301528181611bfe0152818161274f0152818161280d0152818161366a01526137dd015260008181610665015281816109d801528181610b0301528181610bd501528181610cdd01528181610e6501528181610fe30152818161114e0152818161120e0152818161132e015281816114510152818161162b01528181611708015281816117e0015281816119e501528181611b1201528181611d9501528181611ed5015281816120040152818161216801528181612290015281816123c601528181612568015281816126390152818161266f0152818161293d01528181612a2101528181612a8a01528181612bde01528181612d2601528181612e6801528181612ec2015281816130a10152818161311b015281816131b401528181613341015281816134c10152818161358a0152818161372f01528181613a1a01528181613b2e01528181613dbb015281816142200152818161432801528181614492015281816148e7015281816149e801528181614aae0152614d8f0152615a866000f3fe6080604052600436106102695760003560e01c8063860aefcf11610153578063c7de38a6116100cb578063dfd594651161007f578063eb9606df11610064578063eb9606df1461081e578063f9eaee0d1461083e578063ffd9b9071461085e57600080fd5b8063dfd59465146107de578063e1f21c67146107fe57600080fd5b8063cff0ab96116100b0578063cff0ab96146106ef578063d9ccbec114610783578063dcf65482146107be57600080fd5b8063c7de38a6146106a7578063caa5c23f146106dc57600080fd5b80639c55a05411610122578063b55bb84b11610107578063b55bb84b14610633578063c12c21c014610653578063c690908a1461068757600080fd5b80639c55a054146105df578063b1836d32146105ff57600080fd5b8063860aefcf146104db5780639408b63f146105455780639b67ab30146105795780639be0536a146105bd57600080fd5b80635d91a0e0116101e65780636d19b486116101b55780637071b7c51161019a5780637071b7c51461049557806379c0ef91146104a857806382871ace146104c857600080fd5b80636d19b486146104415780636f307dc31461046157600080fd5b80635d91a0e0146103e85780635f73fbec146103fb578063601d66f61461040e5780636c8f225d1461042e57600080fd5b80633d9287fa1161023d5780635019e20a116102225780635019e20a1461039257806354fd4d50146103b257806359781034146103d557600080fd5b80633d9287fa146103055780634f0e0ef31461033957600080fd5b8062842b571461026e578063256ac915146102905780632a7ba1f7146102c55780632b7c7b11146102e5575b600080fd5b34801561027a57600080fd5b5061028e6102893660046151bf565b61087e565b005b34801561029c57600080fd5b506102b06102ab3660046151f8565b61098e565b60405190151581526020015b60405180910390f35b3480156102d157600080fd5b5061028e6102e0366004615215565b610a61565b3480156102f157600080fd5b5061028e610300366004615215565b610c3b565b34801561031157600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561034557600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102bc565b34801561039e57600080fd5b5061028e6103ad3660046151f8565b610d6a565b3480156103be57600080fd5b506103c7600281565b6040519081526020016102bc565b61028e6103e336600461522e565b61108c565b61028e6103f63660046152bb565b611275565b61028e610409366004615340565b611589565b34801561041a57600080fd5b5061028e6104293660046153d8565b6117de565b61028e61043c36600461541b565b611900565b34801561044d57600080fd5b506102b061045c3660046151f8565b611c31565b34801561046d57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b61028e6104a336600461546e565b611c60565b3480156104b457600080fd5b5061036d6104c3366004615215565b611f3e565b61028e6104d63660046152bb565b611f4b565b3480156104e757600080fd5b5060025461051c906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041682565b604080516fffffffffffffffffffffffffffffffff9384168152929091166020830152016102bc565b34801561055157600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561058557600080fd5b506004546040805167ffffffffffffffff608084901c1681526fffffffffffffffffffffffffffffffff9092166020830152016102bc565b3480156105c957600080fd5b506105d261227d565b6040516102bc91906154e2565b3480156105eb57600080fd5b5061028e6105fa36600461553c565b61228e565b34801561060b57600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561063f57600080fd5b5061028e61064e3660046151f8565b6123c4565b34801561065f57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561069357600080fd5b5061028e6106a23660046151f8565b6124c6565b3480156106b357600080fd5b506106c76106c23660046151f8565b612668565b604080519283526020830191909152016102bc565b61028e6106ea366004615557565b61289b565b3480156106fb57600080fd5b5060015461074e906fffffffffffffffffffffffffffffffff811690700100000000000000000000000000000000810460ff169071010000000000000000000000000000000000900464ffffffffff1683565b604080516fffffffffffffffffffffffffffffffff9094168452911515602084015264ffffffffff16908201526060016102bc565b34801561078f57600080fd5b506102b061079e366004615599565b600360209081526000928352604080842090915290825290205460ff1681565b3480156107ca57600080fd5b5061028e6107d93660046151f8565b612a88565b3480156107ea57600080fd5b506103c76107f93660046151f8565b612b86565b34801561080a57600080fd5b5061028e61081936600461522e565b612c6d565b34801561082a57600080fd5b5061028e6108393660046155c7565b612ec0565b34801561084a57600080fd5b506102b06108593660046151f8565b613057565b34801561086a57600080fd5b5061028e6108793660046155ee565b6131b2565b600260005414156108f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b6002600090815573ffffffffffffffffffffffffffffffffffffffff8316808252600360209081526040808420338086529083529381902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081527f9b3258bc4904fd6426b99843e206c6c7cdb1fd0f040121c25b71dafbb3851ee0910160405180910390a350506001600055565b6040517f055ee9b500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063055ee9b590602401602060405180830381865afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a43919061560b565b73ffffffffffffffffffffffffffffffffffffffff16141592915050565b60026000541415610ace576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610b5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b83919061560b565b9050610b903382846132eb565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906395373018906024015b600060405180830381600087803b158015610c1a57600080fd5b505af1158015610c2e573d6000803e3d6000fd5b5050600160005550505050565b60026000541415610ca8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610d39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5d919061560b565b9050610b90338284613411565b60026000541415610dd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000557f000000000000000000000000000000000000000000000000000000000000000015610e34576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610ec1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee5919061560b565b33600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915290205490915060ff16610f52576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f5d82613583565b5090508015610f98576040517ff713841e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b15801561102757600080fd5b505af115801561103b573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692503391507f93c70cc9715bef0d83edf2095f3595402279d274f402a73ffc17f1bcb19d863d90600090a35050600160005550565b600260005414156110f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611106613875565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063e958b70490602401602060405180830381865afa158015611197573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bb919061560b565b90506111c9848285856139b7565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401600060405180830381600087803b15801561125257600080fd5b505af1158015611266573d6000803e3d6000fd5b50506001600055505050505050565b600260005414156112e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611375573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611399919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166113e8576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806113f483613583565b915091508161142f576040517f1fdd676f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611437613875565b831561144d5761144d85858b8660016000613ae3565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632362a2d88b600185338e8e8e6040518863ffffffff1660e01b81526004016114b59796959493929190615663565b6020604051808303816000875af11580156114d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f891906156bf565b90508873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f7dfecd8419723a9d3954585a30c2a270165d70aafa146c11c1e1b88ae14390648460405161157091815260200190565b60405180910390a4505060016000555050505050505050565b600260005414156115f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ab919061560b565b90506116b5613875565b81156116cb576116cb8383338460016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d89061174a903390600090819083908d908d908d90600401615663565b6020604051808303816000875af1158015611769573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178d91906156bf565b5060405173ffffffffffffffffffffffffffffffffffffffff87169033907f460ad03b1cf79b1d64d3aefa28475f110ab66e84649c52bb41ed796b9b39198190600090a35050600160005550505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611849573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118d1576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff90811670010000000000000000000000000000000002911617600255565b6002600054141561196d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000908155606461198461ffff851687615707565b61198e9190615744565b9050611999816144f7565b6119a2816145e8565b6119ab84614668565b6119b3613875565b6040517f172c48c7000000000000000000000000000000000000000000000000000000008152600060048201819052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a64919061577f565b61ffff169150611a789050816127106157ae565b611a829083615707565b611a8c8288615707565b11611ac3576040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff86811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611b5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b81919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638587604051611bef92919091825261ffff16602082015260400190565b60405180910390a3611c2386827f00000000000000000000000000000000000000000000000000000000000000008a6139b7565b505060016000555050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526006602052604081205415155b92915050565b60026000541415611ccd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611cdb856144f7565b611ce484614668565b611ced856145e8565b600154700100000000000000000000000000000000900460ff1615611d3e576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d46613875565b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff85811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611de0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e04919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638885604051611e7292919091825261ffff16602082015260400190565b60405180910390a38215611e9057611e908484878460006001613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015611f1957600080fd5b505af1158015611f2d573d6000803e3d6000fd5b505060016000555050505050505050565b6000611c5a60058361480f565b60026000541415611fb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa15801561204b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206f919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166120be576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120c661481b565b6120fc576040517f7e52ccb400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061210782612668565b509050612112613875565b82156121285761212884848a8560016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d8906121aa908c90600290879033908f908f908f90600401615663565b6020604051808303816000875af11580156121c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ed91906156bf565b90508773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167ffada13ff2d5e1a1d9da37ad4a4130893b34e3c69c32b17f87ec31fd661b867078460405161226591815260200190565b60405180910390a45050600160005550505050505050565b6060612289600561486b565b905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612381576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561242f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612453919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146124b7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614878565b5050565b60026000541415612533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156125c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e8919061560b565b90506125f4818361489a565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401610c00565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126fc919061560b565b905060008061270b8387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156127a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127c991906156bf565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015291965061271091851690637afb010490604401602060405180830381865afa158015612863573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061288791906156bf565b6128919190615744565b9350505050915091565b60026000541415612908576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129bd919061560b565b90506129c7613875565b8115612a7e576129dc83833384600080613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015612a6557600080fd5b505af1158015612a79573d6000803e3d6000fd5b505050505b5050600160005550565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612af3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b17919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b7b576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614c92565b600080612b9283612668565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152919350600092507f000000000000000000000000000000000000000000000000000000000000000090911690633192195c906024016040805180830381865afa158015612c26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4a91906157c5565b9150819050612c5b61271084615707565b612c659190615744565b949350505050565b60026000541415612cda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063fdd5764590602401602060405180830381865afa158015612d6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d91919061560b565b73ffffffffffffffffffffffffffffffffffffffff161480612dd7575073ffffffffffffffffffffffffffffffffffffffff831660009081526006602052604090205415155b15612e0e576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612eac57600080fd5b505af1158015611c23573d6000803e3d6000fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f4f919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612fb3576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000061300a576040517f50dd11fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805464ffffffffff90921671010000000000000000000000000000000000027fffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffffff909216919091179055565b6040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063f67c5bd090602401602060405180830381865afa1580156130e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061310c91906156bf565b905080158015906131ab5750807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015613184573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a891906156bf565b16155b9392505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561321d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613241919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146132a5576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018054911515700100000000000000000000000000000000027fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff909216919091179055565b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600060448301819052917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561338c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133b091906156bf565b90506133bb816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f98274bf834d179ee08dc0604071b0dc90b54731bd5f725a5a96a39a86bce025a8360405161340391815260200190565b60405180910390a250505050565b61341a816144f7565b600154700100000000000000000000000000000000900460ff161561346b576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600160448301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561350c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061353091906156bf565b905061353b816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f9cac51154cc0d835e2f9c9d1f59a9344588cee107f4203bf58a8c797e3a58c458360405161340391815260200190565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613617919061560b565b90506000806136268387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156136c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136e491906156bf565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529195506000917f00000000000000000000000000000000000000000000000000000000000000001690633192195c906024016040805180830381865afa158015613775573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061379991906157c5565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350600092506127109187169063f9a6503090604401602060405180830381865afa158015613837573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061385b91906156bf565b6138659190615707565b9092109794965093945050505050565b34156139b5577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156138e357600080fd5b505af11580156138f7573d6000803e3d6000fd5b50506040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201523460248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16935063a9059cbb925060440190506020604051808303816000875af115801561398f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139b391906157e9565b505b565b6139c084614cb4565b6040517f830aa74500000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f0000000000000000000000000000000000000000000000000000000000000000169063830aa74590608401600060405180830381600087803b158015613a5e57600080fd5b505af1158015613a72573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fa32435755c235de2976ed44a75a2f85cb01faf0c894f639fe0c32bb9455fea8f83604051613ad591815260200190565b60405180910390a350505050565b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301523060248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b158015613b7257600080fd5b505af1158015613b86573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff871692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a28460005b8181101561441d5736888883818110613bea57613bea615806565b9050602002810190613bfc9190615835565b90506004613c0d6020830183615873565b90501015613c47576040517fe2b0e50600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b30613c5560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16141561421c578415613ca9576040517f5fb9107f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613cb86020830183615873565b613cc1916158d8565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167f59781034000000000000000000000000000000000000000000000000000000001415613e3c5760008080613d1e6020860186615873565b613d2c916004908290615920565b810190613d39919061522e565b925092509250613e34838c73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614613e2b576040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015613e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e26919061560b565b613e2d565b8b5b84846139b7565b505050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2b7c7b11000000000000000000000000000000000000000000000000000000001415613ec757600194506000613e996020840184615873565b613ea7916004908290615920565b810190613eb49190615215565b9050613ec1898983613411565b50614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2a7ba1f7000000000000000000000000000000000000000000000000000000001415613f80578415613f49576040517fc0b0caa800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613f586020840184615873565b613f66916004908290615920565b810190613f739190615215565b9050613ec18989836132eb565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f233a8caa0000000000000000000000000000000000000000000000000000000014156140e457600080613fda6020850185615873565b613fe8916004908290615920565b810190613ff5919061594a565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c8116600483015292945090925082918416906370a0823190602401602060405180830381865afa158015614069573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061408d91906156bf565b10156140dd576040517fa5ac537300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016108e7565b5050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fc690908a00000000000000000000000000000000000000000000000000000000141561416457600061413d6020840184615873565b61414b916004908290615920565b81019061415891906151f8565b9050613ec1888261489a565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f23e27a640000000000000000000000000000000000000000000000000000000014156141e45760006141bd6020840184615873565b6141cb916004908290615920565b8101906141d891906151f8565b9050613ec18882614d42565b6040517f1e9e7e7a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50614414565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff68754361426760208501856151f8565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156142d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142f4919061560b565b73ffffffffffffffffffffffffffffffffffffffff16148061436d575073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001661435560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16145b156143a4576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6144126143b46020830183615873565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506143f69250505060208401846151f8565b73ffffffffffffffffffffffffffffffffffffffff1690614e39565b505b50600101613bcf565b506040517f60c8e8938c9a0c0d88a98d6f1c562ce68077e12bf3edb8047378f2f736cb45b490600090a16040517fe1998cf900000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff86811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b1580156144d657600080fd5b505af11580156144ea573d6000803e3d6000fd5b5050505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006139b3576001546fffffffffffffffffffffffffffffffff9081169081146124c257600454608081901c906fffffffffffffffffffffffffffffffff16600067ffffffffffffffff8316431461456e578461458a565b61458a6fffffffffffffffffffffffffffffffff831686615976565b9050838111156145c6576040517f675f1a5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff81164360801b176004555050505050565b6002546fffffffffffffffffffffffffffffffff16811080614631575060025470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681115b156139b3576040517fce16799400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61467061481b565b156146a7576040517f63fc31c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1615614806577f0000000000000000000000000000000000000000000000000000000000000000801561472657503373ffffffffffffffffffffffffffffffffffffffff821614155b1561475d576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600160248301527f00000000000000000000000000000000000000000000000000000000000000001690639dc29fac90604401600060405180830381600087803b1580156147ed57600080fd5b505af1158015614801573d6000803e3d6000fd5b505050505b6139b381614cb4565b60006131ab8383614e7b565b60007f0000000000000000000000000000000000000000000000000000000000000000801561228957505060015471010000000000000000000000000000000000900464ffffffffff1642101590565b606060006131ab83614ea5565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f01565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561492b57600080fd5b505af115801561493f573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527fdf498aa1c340e992665d6fb4f3be8436d452c45a630cb6d7fab7963da39bac8793500190505b60405180910390a15050565b6040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600091829160019183917f00000000000000000000000000000000000000000000000000000000000000001690638991b2f190602401602060405180830381865afa158015614a2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a5391906156bf565b90505b808211614c895780821615614c7d576040517fe75538c700000000000000000000000000000000000000000000000000000000815260048101839052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e75538c7906024016040805180830381865afa158015614af4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b18919061577f565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529294509092506000918416906370a0823190602401602060405180830381865afa158015614b8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bb191906156bf565b90506001811115614c79576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff8481166024830152600091908b169063f9a6503090604401602060405180830381865afa158015614c33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c5791906156bf565b978801979050614c6b61ffff841682615707565b614c759088615976565b9650505b5050505b600182901b9150614a56565b50509250929050565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f50565b3373ffffffffffffffffffffffffffffffffffffffff821614801590614d0b575033600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16155b156139b3576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b158015614dd357600080fd5b505af1158015614de7573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527f69db9e9764da61b6681b89fb0f5be018506e0342036e56b59c3015a620d60977935001905061498d565b60606131ab83836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250615043565b6000826000018281548110614e9257614e92615806565b9060005260206000200154905092915050565b606081600001805480602002602001604051908101604052809291908181526020018280548015614ef557602002820191906000526020600020905b815481526020019060010190808311614ee1575b50505050509050919050565b6000818152600183016020526040812054614f4857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611c5a565b506000611c5a565b60008181526001830160205260408120548015615039576000614f746001836157ae565b8554909150600090614f88906001906157ae565b9050818114614fed576000866000018281548110614fa857614fa8615806565b9060005260206000200154905080876000018481548110614fcb57614fcb615806565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080614ffe57614ffe61598e565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611c5a565b6000915050611c5a565b6060612c65848460008585843b6150b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108e7565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516150df91906159ed565b60006040518083038185875af1925050503d806000811461511c576040519150601f19603f3d011682016040523d82523d6000602084013e615121565b606091505b509150915061513182828661513c565b979650505050505050565b6060831561514b5750816131ab565b82511561515b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e791906159ff565b73ffffffffffffffffffffffffffffffffffffffff811681146139b357600080fd5b80151581146139b357600080fd5b600080604083850312156151d257600080fd5b82356151dd8161518f565b915060208301356151ed816151b1565b809150509250929050565b60006020828403121561520a57600080fd5b81356131ab8161518f565b60006020828403121561522757600080fd5b5035919050565b60008060006060848603121561524357600080fd5b833561524e8161518f565b9250602084013561525e8161518f565b929592945050506040919091013590565b60008083601f84011261528157600080fd5b50813567ffffffffffffffff81111561529957600080fd5b6020830191508360208260051b85010111156152b457600080fd5b9250929050565b60008060008060008060a087890312156152d457600080fd5b86356152df8161518f565b955060208701356152ef8161518f565b9450604087013593506060870135615306816151b1565b9250608087013567ffffffffffffffff81111561532257600080fd5b61532e89828a0161526f565b979a9699509497509295939492505050565b60008060008060006080868803121561535857600080fd5b85356153638161518f565b945060208601359350604086013561537a816151b1565b9250606086013567ffffffffffffffff81111561539657600080fd5b6153a28882890161526f565b969995985093965092949392505050565b80356fffffffffffffffffffffffffffffffff811681146153d357600080fd5b919050565b600080604083850312156153eb57600080fd5b6153f4836153b3565b9150615402602084016153b3565b90509250929050565b61ffff811681146139b357600080fd5b6000806000806080858703121561543157600080fd5b8435935060208501356154438161518f565b925060408501356154538161540b565b915060608501356154638161540b565b939692955090935050565b60008060008060006080868803121561548657600080fd5b8535945060208601356154988161518f565b9350604086013567ffffffffffffffff8111156154b457600080fd5b6154c08882890161526f565b90945092505060608601356154d48161540b565b809150509295509295909350565b6020808252825182820181905260009190848201906040850190845b8181101561553057835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016154fe565b50909695505050505050565b60006020828403121561554e57600080fd5b6131ab826153b3565b6000806020838503121561556a57600080fd5b823567ffffffffffffffff81111561558157600080fd5b61558d8582860161526f565b90969095509350505050565b600080604083850312156155ac57600080fd5b82356155b78161518f565b915060208301356151ed8161518f565b6000602082840312156155d957600080fd5b813564ffffffffff811681146131ab57600080fd5b60006020828403121561560057600080fd5b81356131ab816151b1565b60006020828403121561561d57600080fd5b81516131ab8161518f565b6003811061565f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b73ffffffffffffffffffffffffffffffffffffffff888116825260e082019061568f602084018a615628565b6040830197909752948616606082015292909416608083015260a082015291151560c09092019190915292915050565b6000602082840312156156d157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561573f5761573f6156d8565b500290565b60008261577a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000806040838503121561579257600080fd5b825161579d8161518f565b60208401519092506151ed8161540b565b6000828210156157c0576157c06156d8565b500390565b600080604083850312156157d857600080fd5b505080516020909101519092909150565b6000602082840312156157fb57600080fd5b81516131ab816151b1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc183360301811261586957600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126158a857600080fd5b83018035915067ffffffffffffffff8211156158c357600080fd5b6020019150368190038213156152b457600080fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156159185780818660040360031b1b83161692505b505092915050565b6000808585111561593057600080fd5b8386111561593d57600080fd5b5050820193919092039150565b6000806040838503121561595d57600080fd5b82356159688161518f565b946020939093013593505050565b60008219821115615989576159896156d8565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60005b838110156159d85781810151838201526020016159c0565b838111156159e7576000848401525b50505050565b600082516158698184602087016159bd565b6020815260008251806020840152615a1e8160408501602087016159bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea2646970667358221220a3f4a705ab580a6ada1e438cd2ee4abc001b62d1d171fce12c41994900fef21664736f6c634300080a003360a06040523480156200001157600080fd5b5060405162005f3d38038062005f3d8339810160408190526200003491620012eb565b826001600160a01b031663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000073573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200009991906200147f565b6001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000d7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000fd91906200147f565b6000805460ff191690556001600160a01b0381166200012f57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200016e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200019491906200147f565b6001600160a01b03908116608052600180546001600160a01b031916918616918217905560408051636f307dc360e01b81529051919250636f307dc39160048083019260209291908290030181865afa158015620001f6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200021c91906200147f565b600260006101000a8154816001600160a01b0302191690836001600160a01b03160217905550826001600160a01b031663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000281573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a791906200147f565b6001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200030b91906200147f565b600080546001600160a01b039290921661010002610100600160a81b0319909216919091179055620003626103e860c86200034b6101f4612710620014bc565b60646200035c60c8612710620014bc565b620005e8565b60408101515160005b81811015620003ee576000836040015182815181106200038f576200038f620014e2565b6020026020010151600001519050620003ae81620007c260201b60201c565b620003e48185604001518481518110620003cc57620003cc620014e2565b60200260200101516020015162000a5e60201b60201c565b506001016200036b565b5060015460408051632630c12f60e01b815290516001600160a01b03909216916311ca4fc29186918491632630c12f9160048083019260209291908290030181865afa15801562000443573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200046991906200147f565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401600060405180830381600087803b158015620004b257600080fd5b505af1158015620004c7573d6000803e3d6000fd5b50506040516001600160a01b03861692507fa8b21f72cb83bce808df32dc2330217d744a1c22f3e9e44e4b11bbf049d37d9d9150600090a2600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000553573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200057991906200147f565b6001600160a01b03167f3f82447be465b0b5a4a9e54c74d5f6ae73f2e9537f2cc1590a340524703d096160405160405180910390a26020820151620005cb90620005c5906002620014f8565b62000bda565b81516020830151620005de919062000dc8565b5050505062001604565b6000620005f68585620014bc565b60015460405163172c48c760e01b81526000600482018190529293506001600160a01b039091169063172c48c7906024016040805180830381865afa15801562000644573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200066a91906200152a565b9150508061ffff168261ffff1614620006be57620006888262000f47565b60025460405161ffff841681526001600160a01b039091169060008051602062005f1d8339815191529060200160405180910390a25b60015460405163944ac59f60e01b815261ffff808a166004830152808916602483015280881660448301528087166064830152851660848201526001600160a01b039091169063944ac59f9060a401600060405180830381600087803b1580156200072857600080fd5b505af11580156200073d573d6000803e3d6000fd5b505050507f2214a403d5f8d049e52eacca974c6dea01a471e41d6a18903bfaf7dbc709741f878787612710620007749190620014bc565b876200078388612710620014bc565b6040805161ffff96871681529486166020860152928516848401529084166060840152909216608082015290519081900360a00190a150505050505050565b6001600160a01b038116620007ea57604051635919af9760e11b815260040160405180910390fd5b62000809816001600160a01b03166200116f60201b620023381760201c565b620008365760405163df4c572d60e01b81526001600160a01b038216600482015260240160405180910390fd5b6040516370a0823160e01b81523060048201526001600160a01b038216906370a0823190602401602060405180830381865afa92505050801562000899575060408051601f3d908101601f19168201909252620008969181019062001564565b60015b620008b75760405163528ca31d60e01b815260040160405180910390fd5b50600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200090c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200093291906200147f565b604051630f9a650360e41b8152670de0b6b3a764000060048201526001600160a01b038381166024830152919091169063f9a6503090604401602060405180830381865afa925050508015620009a7575060408051601f3d908101601f19168201909252620009a49181019062001564565b60015b620009c5576040516367a7cd4360e01b815260040160405180910390fd5b5060015460405163d48bfca760e01b81526001600160a01b0383811660048301529091169063d48bfca790602401600060405180830381600087803b15801562000a0e57600080fd5b505af115801562000a23573d6000803e3d6000fd5b50506040516001600160a01b03841692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a250565b6002546001600160a01b038381169116141562000a8e57604051633b899cf960e01b815260040160405180910390fd5b60015460405163172c48c760e01b8152600060048201819052916001600160a01b03169063172c48c7906024016040805180830381865afa15801562000ad8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000afe91906200152a565b91505061ffff8216158062000b1a57508061ffff168261ffff16115b1562000b39576040516333c6608d60e01b815260040160405180910390fd5b600154604051635385e2a160e11b81526001600160a01b03858116600483015261ffff851660248301529091169063a70bc54290604401600060405180830381600087803b15801562000b8b57600080fd5b505af115801562000ba0573d6000803e3d6000fd5b505060405161ffff851681526001600160a01b038616925060008051602062005f1d833981519152915060200160405180910390a2505050565b600062000be662001175565b6001600160a01b031663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801562000c24573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c4a91906200157e565b50509050600062000c606200117560201b60201c565b6001600160a01b031663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa15801562000c9d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000cc39190620015d5565b915050806001600160801b0316836001600160801b0316101562000cfa576040516309aadd6f60e41b815260040160405180910390fd5b826001600160801b0316826001600160801b03161462000dc35762000d1e62001175565b604051632715681560e21b81526001600160801b03851660048201526001600160a01b039190911690639c55a05490602401600060405180830381600087803b15801562000d6b57600080fd5b505af115801562000d80573d6000803e3d6000fd5b50506040516001600160801b03861681527fa030eec20ae970821387224ec3bb15b4bd22b89bfb86dc4d2b3827aa3d99e48d925060200190505b60405180910390a15b505050565b600062000dd462001175565b6001600160a01b031663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801562000e12573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e3891906200157e565b50509050816001600160801b0316836001600160801b0316118062000e6e5750806001600160801b0316826001600160801b0316115b1562000e8d576040516309aadd6f60e41b815260040160405180910390fd5b62000e9762001175565b60405163300eb37b60e11b81526001600160801b038086166004830152841660248201526001600160a01b03919091169063601d66f690604401600060405180830381600087803b15801562000eec57600080fd5b505af115801562000f01573d6000803e3d6000fd5b5050604080516001600160801b038088168252861660208201527f4d4981437d0211f9e6843eb024d9ada1fa3a99514d4343d4aece106dd11524bb935001905062000dba565b600154600254604051635385e2a160e11b81526001600160a01b03918216600482015261ffff8416602482015291169063a70bc54290604401600060405180830381600087803b15801562000f9b57600080fd5b505af115801562000fb0573d6000803e3d6000fd5b505050506000600160009054906101000a90046001600160a01b03166001600160a01b031663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200100a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001030919062001564565b905060015b8181101562000dc35760015460405163172c48c760e01b81526004810183905260009182916001600160a01b039091169063172c48c7906024016040805180830381865afa1580156200108c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010b291906200152a565b915091508461ffff168161ffff1611156200116457600154604051635385e2a160e11b81526001600160a01b03848116600483015261ffff881660248301529091169063a70bc54290604401600060405180830381600087803b1580156200111957600080fd5b505af11580156200112e573d6000803e3d6000fd5b505060405161ffff881681526001600160a01b038516925060008051602062005f1d833981519152915060200160405180910390a25b505060010162001035565b3b151590565b60015460408051632f7a188160e01b815290516000926001600160a01b031691632f7a18819160048083019260209291908290030181865afa158015620011c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011e691906200147f565b905090565b6001600160a01b03811681146200120157600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b03811182821017156200123f576200123f62001204565b60405290565b604080519081016001600160401b03811182821017156200123f576200123f62001204565b604051601f8201601f191681016001600160401b038111828210171562001295576200129562001204565b604052919050565b80516001600160801b0381168114620012b557600080fd5b919050565b8051620012b581620011eb565b805161ffff81168114620012b557600080fd5b80518015158114620012b557600080fd5b6000806000606084860312156200130157600080fd5b83516200130e81620011eb565b809350506020808501516200132381620011eb565b604086810151919450906001600160401b03808211156200134357600080fd5b9087019060a0828a0312156200135857600080fd5b620013626200121a565b6200136d836200129d565b81526200137c8584016200129d565b8582015283830151828111156200139257600080fd5b8301601f81018b13620013a457600080fd5b805183811115620013b957620013b962001204565b620013c9878260051b016200126a565b818152878101945060069190911b82018701908c821115620013ea57600080fd5b918701915b81831015620014435786838e031215620014095760008081fd5b6200141362001245565b83516200142081620011eb565b81526200142f848a01620012c7565b818a015285529387019391860191620013ef565b838701525062001458905060608401620012ba565b60608201526200146b60808401620012da565b608082015280955050505050509250925092565b6000602082840312156200149257600080fd5b81516200149f81620011eb565b9392505050565b634e487b7160e01b600052601160045260246000fd5b600061ffff83811690831681811015620014da57620014da620014a6565b039392505050565b634e487b7160e01b600052603260045260246000fd5b60006001600160801b0382811684821681151582840482111615620015215762001521620014a6565b02949350505050565b600080604083850312156200153e57600080fd5b82516200154b81620011eb565b91506200155b60208401620012c7565b90509250929050565b6000602082840312156200157757600080fd5b5051919050565b6000806000606084860312156200159457600080fd5b6200159f846200129d565b9250620015af60208501620012da565b9150604084015164ffffffffff81168114620015ca57600080fd5b809150509250925092565b60008060408385031215620015e957600080fd5b620015f4836200129d565b91506200155b602084016200129d565b608051614878620016a56000396000818161033601528181610446015281816107c5015281816108c0015281816109ae01528181610b8301528181610f0a015281816113e1015281816114cf015281816115bb015281816116ab015281816117990152818161187d01528181611ad901528181611bc601528181611cb301528181611da0015281816120090152818161218c015261227901526148786000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80638456cb59116100f9578063dc2b21c111610097578063f0527ac611610071578063f0527ac6146103d7578063f206d32a146103df578063fb1bd8c4146103f2578063ffd9b9071461040557600080fd5b8063dc2b21c11461039e578063e6492d7b146103b1578063eb9606df146103c457600080fd5b8063a50cf2c8116100d3578063a50cf2c814610331578063a70bc54214610358578063b53472ef1461036b578063c12c21c01461037e57600080fd5b80638456cb59146103035780639c55a0541461030b5780639f1c50691461031e57600080fd5b806350e036ff1161016657806354fd4d501161014057806354fd4d50146102b25780635c975abb146102ba5780636f307dc3146102d05780637bccacee146102f057600080fd5b806350e036ff1461027657806352438e541461028c578063526a41e81461029f57600080fd5b80633e7c88d6116101a25780633e7c88d6146102355780633f4ba83a14610248578063456e0742146102505780635094cb4f1461026357600080fd5b806324147708146101c95780632954018c146101de5780632f7a18811461022d575b600080fd5b6101dc6101d7366004614307565b610418565b005b60005461020390610100900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6102036106fe565b6101dc610243366004614334565b610797565b6101dc610892565b6101dc61025e366004614307565b610980565b61020361027136600461436d565b610b36565b61027e610b49565b604051908152602001610224565b6101dc61029a366004614307565b610b55565b6101dc6102ad366004614394565b610edc565b61027e600281565b60005460ff166040519015158152602001610224565b6002546102039073ffffffffffffffffffffffffffffffffffffffff1681565b6101dc6102fe3660046143c2565b6113b3565b6101dc6114a1565b6101dc61031936600461440e565b61158d565b6101dc61032c36600461442b565b61167d565b6102037f000000000000000000000000000000000000000000000000000000000000000081565b6101dc610366366004614334565b61176b565b6101dc610379366004614307565b61184f565b6001546102039073ffffffffffffffffffffffffffffffffffffffff1681565b6101dc6103ac366004614459565b611aab565b6101dc6103bf366004614307565b611b98565b6101dc6103d236600461448f565b611c85565b6101dc611d72565b6101dc6103ed3660046144ac565b611fdb565b6101dc610400366004614307565b61215e565b6101dc61041336600461451d565b61224b565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156104a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c6919061453a565b6104fc576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006105078261233e565b90506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015610578573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059c9190614557565b90508181166106f9576001546040517fa366f496000000000000000000000000000000000000000000000000000000008152918317600483018190529173ffffffffffffffffffffffffffffffffffffffff9091169063a366f49690602401600060405180830381600087803b15801561061557600080fd5b505af1158015610629573d6000803e3d6000fd5b505050506106356106fe565b6040517fffd9b9070000000000000000000000000000000000000000000000000000000081526001600482015273ffffffffffffffffffffffffffffffffffffffff919091169063ffd9b90790602401600060405180830381600087803b15801561069f57600080fd5b505af11580156106b3573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692507ff17b849746e74d7186170c9553d4bbf60b4f8bb1ed81fe50c099b934fb078f059150600090a25b505050565b600154604080517f2f7a1881000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691632f7a18819160048083019260209291908290030181865afa15801561076e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610792919061457b565b905090565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610821573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610845919061453a565b61087b576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108848261241e565b61088e82826127f8565b5050565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa15801561091c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610940919061453a565b610976576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61097e612a15565b565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610a0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2e919061453a565b610a64576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a6d81612af6565b6001546040517f9f5f86ae00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015290911690639f5f86ae90602401600060405180830381600087803b158015610ada57600080fd5b505af1158015610aee573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507f5a0b7d0f9c24b39256e112a0584b4c5ce38d8f1dee2e7c56f15b852604cdc8869150600090a250565b6000610b43600383612cb8565b92915050565b60006107926003612ccb565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610bdf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c03919061453a565b610c39576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610c86576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063fdd5764590602401602060405180830381865afa158015610cf7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1b919061457b565b905073ffffffffffffffffffffffffffffffffffffffff8116610d6a576040517f1170cc2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f6e98e5e400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526000602483015290911690636e98e5e490604401600060405180830381600087803b158015610dde57600080fd5b505af1158015610df2573d6000803e3d6000fd5b50506001546040517f6e98e5e40000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff86811660248301529091169250636e98e5e49150604401600060405180830381600087803b158015610e6a57600080fd5b505af1158015610e7e573d6000803e3d6000fd5b50505050610e96826003612cd590919063ffffffff16565b5060405173ffffffffffffffffffffffffffffffffffffffff8316907fab9f405bf0c19b97f65a7031634db41569cd2f0e0376a610a1e977f9ab22b58f90600090a25050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610f66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8a919061453a565b610fc0576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fc982612af6565b6000806000610fd66106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015611020573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110449190614598565b9250925092506000806110556106fe565b73ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa15801561109e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c291906145e5565b9150915060006110d06106fe565b73ffffffffffffffffffffffffffffffffffffffff16639be0536a6040518163ffffffff1660e01b8152600401600060405180830381865afa15801561111a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526111609190810190614643565b9050600061116c6106fe565b73ffffffffffffffffffffffffffffffffffffffff1663b1836d326040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111da919061453a565b600154604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905192935073ffffffffffffffffffffffffffffffffffffffff909116916311ca4fc2918c918491632630c12f9160048083019260209291908290030181865afa158015611256573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061127a919061457b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156112e757600080fd5b505af11580156112fb573d6000803e3d6000fd5b5050505087156113675761130e87612cf7565b6113188484612f5d565b61132186613152565b60005b82518110156113575761134f83828151811061134257611342614726565b60200260200101516132a3565b600101611324565b50801561136757611367856133c9565b60405173ffffffffffffffffffffffffffffffffffffffff8a16907fa8b21f72cb83bce808df32dc2330217d744a1c22f3e9e44e4b11bbf049d37d9d90600090a2505050505050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561143d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611461919061453a565b611497576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61088e828261357b565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561152b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061154f919061453a565b611585576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61097e6139c3565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611617573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163b919061453a565b611671576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81612cf7565b50565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611707573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172b919061453a565b611761576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61088e8282612f5d565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156117f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611819919061453a565b610884576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156118d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fd919061453a565b611933576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061193e8261233e565b90506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d39190614557565b9050818116156106f9576001546040517fa366f496000000000000000000000000000000000000000000000000000000008152918318600483018190529173ffffffffffffffffffffffffffffffffffffffff9091169063a366f49690602401600060405180830381600087803b158015611a4d57600080fd5b505af1158015611a61573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a2505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611b35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b59919061453a565b611b8f576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81613a83565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611c22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c46919061453a565b611c7c576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81613b3d565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611d0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d33919061453a565b611d69576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a816133c9565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611dfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e20919061453a565b611e56576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ec4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee8919061457b565b60015490915073ffffffffffffffffffffffffffffffffffffffff166311ca4fc2611f116106fe565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff91821660048201529084166024820152604401600060405180830381600087803b158015611f7f57600080fd5b505af1158015611f93573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507f3f82447be465b0b5a4a9e54c74d5f6ae73f2e9537f2cc1590a340524703d09619150600090a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015612065573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612089919061453a565b6120bf576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61271061ffff86161015806120e357506127106120dc8585614784565b61ffff1610155b806120fd57506127106120f68383614784565b61ffff1610155b15612134576040517f0b361d6900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6121578585612145866127106147aa565b85612152866127106147aa565b613c5c565b5050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156121e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061220c919061453a565b612242576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a816132a3565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156122d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122f9919061453a565b61232f576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81613152565b3b151590565b6001546040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063f67c5bd090602401602060405180830381865afa1580156123af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123d39190614557565b90508015806123e25750806001145b15612419576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b73ffffffffffffffffffffffffffffffffffffffff811661246b576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163b6124d6576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024015b60405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8216906370a0823190602401602060405180830381865afa92505050801561257a575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261257791810190614557565b60015b6125b0576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561261e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612642919061457b565b6040517ff9a65030000000000000000000000000000000000000000000000000000000008152670de0b6b3a7640000600482015273ffffffffffffffffffffffffffffffffffffffff8381166024830152919091169063f9a6503090604401602060405180830381865afa9250505080156126f8575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526126f591810190614557565b60015b61272e576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506001546040517fd48bfca700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301529091169063d48bfca790602401600060405180830381600087803b15801561279c57600080fd5b505af11580156127b0573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a250565b60025473ffffffffffffffffffffffffffffffffffffffff8381169116141561284d576040517f3b899cf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f172c48c70000000000000000000000000000000000000000000000000000000081526000600482018190529173ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa1580156128bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128e091906147cd565b91505061ffff821615806128fb57508061ffff168261ffff16115b15612932576040517f33c6608d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015261ffff851660248301529091169063a70bc54290604401600060405180830381600087803b1580156129a957600080fd5b505af11580156129bd573d6000803e3d6000fd5b505060405161ffff8516815273ffffffffffffffffffffffffffffffffffffffff861692507f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650915060200160405180910390a2505050565b60005460ff16612a81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016124cd565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b73ffffffffffffffffffffffffffffffffffffffff8116612b43576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163b612ba9576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024016124cd565b8073ffffffffffffffffffffffffffffffffffffffff1663c12c21c06040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612c2e575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252612c2b9181019061457b565b60015b612c64576040517fe9eddd1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60015473ffffffffffffffffffffffffffffffffffffffff82811691161461088e576040517fe9eddd1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612cc48383613e92565b9392505050565b6000610b43825490565b6000612cc48373ffffffffffffffffffffffffffffffffffffffff8416613ebc565b6000612d016106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015612d4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d6f9190614598565b505090506000612d7d6106fe565b73ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa158015612dc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dea91906145e5565b915050806fffffffffffffffffffffffffffffffff16836fffffffffffffffffffffffffffffffff161015612e4b576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826fffffffffffffffffffffffffffffffff16826fffffffffffffffffffffffffffffffff16146106f957612e7e6106fe565b6040517f9c55a0540000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff8516600482015273ffffffffffffffffffffffffffffffffffffffff9190911690639c55a05490602401600060405180830381600087803b158015612ef957600080fd5b505af1158015612f0d573d6000803e3d6000fd5b50506040516fffffffffffffffffffffffffffffffff861681527fa030eec20ae970821387224ec3bb15b4bd22b89bfb86dc4d2b3827aa3d99e48d925060200190505b60405180910390a1505050565b6000612f676106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015612fb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fd59190614598565b50509050816fffffffffffffffffffffffffffffffff16836fffffffffffffffffffffffffffffffff16118061302e5750806fffffffffffffffffffffffffffffffff16826fffffffffffffffffffffffffffffffff16115b15613065576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61306d6106fe565b6040517f601d66f60000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff80861660048301528416602482015273ffffffffffffffffffffffffffffffffffffffff919091169063601d66f690604401600060405180830381600087803b1580156130f057600080fd5b505af1158015613104573d6000803e3d6000fd5b5050604080516fffffffffffffffffffffffffffffffff8088168252861660208201527f4d4981437d0211f9e6843eb024d9ada1fa3a99514d4343d4aece106dd11524bb9350019050612f50565b600061315c6106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa1580156131a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131ca9190614598565b509150508015158215151461088e576131e16106fe565b6040517fffd9b907000000000000000000000000000000000000000000000000000000008152831515600482015273ffffffffffffffffffffffffffffffffffffffff919091169063ffd9b90790602401600060405180830381600087803b15801561324c57600080fd5b505af1158015613260573d6000803e3d6000fd5b505050507ff97ba903470ff3262b4a68a938fe81def401bac1bd742169d2e8d5c4ed2185d382604051613297911515815260200190565b60405180910390a15050565b73ffffffffffffffffffffffffffffffffffffffff81166132f0576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6132f86106fe565b6040517fb55bb84b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152919091169063b55bb84b90602401600060405180830381600087803b15801561336357600080fd5b505af1158015613377573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841681527fdac9a7995cbc0c0f01d78970fb6fd0b52fe0fe869eb6635e65cc1b5682b8325c925060200190505b60405180910390a150565b60006133d36106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801561341d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134419190614598565b925050508064ffffffffff168264ffffffffff161461088e578164ffffffffff168164ffffffffff16118061347c57508164ffffffffff1642115b156134b3576040517fe4eaca7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134bb6106fe565b6040517feb9606df00000000000000000000000000000000000000000000000000000000815264ffffffffff8416600482015273ffffffffffffffffffffffffffffffffffffffff919091169063eb9606df90602401600060405180830381600087803b15801561352b57600080fd5b505af115801561353f573d6000803e3d6000fd5b505060405164ffffffffff851681527f0b3eb35ba750e7a7e4d26c9eee3d226f4e1f68c5568f4a3d051c94b241b02ac092506020019050613297565b73ffffffffffffffffffffffffffffffffffffffff82166135c8576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82163b61362e576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016124cd565b61363781612af6565b60015473ffffffffffffffffffffffffffffffffffffffff8381169116148061369257506136636106fe565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b806136b7575060015473ffffffffffffffffffffffffffffffffffffffff8281169116145b806136f457506136c56106fe565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b1561372b576040517f727de5c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517fff68754300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063ff68754390602401602060405180830381865afa15801561379c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137c0919061457b565b73ffffffffffffffffffffffffffffffffffffffff1614158061388c57506001546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063fdd5764590602401602060405180830381865afa15801561384f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613873919061457b565b73ffffffffffffffffffffffffffffffffffffffff1614155b156138c3576040517f21ff1e7100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f6e98e5e400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152848116602483015290911690636e98e5e490604401600060405180830381600087803b15801561393857600080fd5b505af115801561394c573d6000803e3d6000fd5b50505050613964826003613faf90919063ffffffff16565b508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4bcbefaef68b99503d502f5a6abe7bca2b183ab8ac55457013c77d084ebd130560405160405180910390a35050565b60005460ff1615613a30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016124cd565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612acc3390565b6001546040517fdc2b21c100000000000000000000000000000000000000000000000000000000815260ff8316600482015273ffffffffffffffffffffffffffffffffffffffff9091169063dc2b21c190602401600060405180830381600087803b158015613af157600080fd5b505af1158015613b05573d6000803e3d6000fd5b505060405160ff841681527f73caacd705657a7d283e48ecf288b73bc517e3aea1bbc9da2fd54a979e8aa950925060200190506133be565b73ffffffffffffffffffffffffffffffffffffffff8116613b8a576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613b926106fe565b6040517fdcf6548200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152919091169063dcf6548290602401600060405180830381600087803b158015613bfd57600080fd5b505af1158015613c11573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841681527f32e53e2e527af8518ae889e5f7e674bc83f7cf68e4cc059aceeaa0e64208b85b925060200190506133be565b6000613c6885856147aa565b6001546040517f172c48c700000000000000000000000000000000000000000000000000000000815260006004820181905292935073ffffffffffffffffffffffffffffffffffffffff9091169063172c48c7906024016040805180830381865afa158015613cdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cff91906147cd565b9150508061ffff168261ffff1614613d6e57613d1a82613fd1565b60025460405161ffff8416815273ffffffffffffffffffffffffffffffffffffffff909116907f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac6509060200160405180910390a25b6001546040517f944ac59f00000000000000000000000000000000000000000000000000000000815261ffff808a1660048301528089166024830152808816604483015280871660648301528516608482015273ffffffffffffffffffffffffffffffffffffffff9091169063944ac59f9060a401600060405180830381600087803b158015613dfd57600080fd5b505af1158015613e11573d6000803e3d6000fd5b505050507f2214a403d5f8d049e52eacca974c6dea01a471e41d6a18903bfaf7dbc709741f878787612710613e4691906147aa565b87613e53886127106147aa565b6040805161ffff96871681529486166020860152928516848401529084166060840152909216608082015290519081900360a00190a150505050505050565b6000826000018281548110613ea957613ea9614726565b9060005260206000200154905092915050565b60008181526001830160205260408120548015613fa5576000613ee06001836147fc565b8554909150600090613ef4906001906147fc565b9050818114613f59576000866000018281548110613f1457613f14614726565b9060005260206000200154905080876000018481548110613f3757613f37614726565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080613f6a57613f6a614813565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610b43565b6000915050610b43565b6000612cc48373ffffffffffffffffffffffffffffffffffffffff8416614296565b6001546002546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015261ffff8416602482015291169063a70bc54290604401600060405180830381600087803b15801561404a57600080fd5b505af115801561405e573d6000803e3d6000fd5b505050506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156140d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140f59190614557565b905060015b818110156106f9576001546040517f172c48c700000000000000000000000000000000000000000000000000000000815260048101839052600091829173ffffffffffffffffffffffffffffffffffffffff9091169063172c48c7906024016040805180830381865afa158015614175573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061419991906147cd565b915091508461ffff168161ffff16111561428c576001546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015261ffff881660248301529091169063a70bc54290604401600060405180830381600087803b15801561422457600080fd5b505af1158015614238573d6000803e3d6000fd5b505060405161ffff8816815273ffffffffffffffffffffffffffffffffffffffff851692507f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650915060200160405180910390a25b50506001016140fa565b60008181526001830160205260408120546142dd57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610b43565b506000610b43565b73ffffffffffffffffffffffffffffffffffffffff8116811461167a57600080fd5b60006020828403121561431957600080fd5b8135612cc4816142e5565b61ffff8116811461167a57600080fd5b6000806040838503121561434757600080fd5b8235614352816142e5565b9150602083013561436281614324565b809150509250929050565b60006020828403121561437f57600080fd5b5035919050565b801515811461167a57600080fd5b600080604083850312156143a757600080fd5b82356143b2816142e5565b9150602083013561436281614386565b600080604083850312156143d557600080fd5b82356143e0816142e5565b91506020830135614362816142e5565b6fffffffffffffffffffffffffffffffff8116811461167a57600080fd5b60006020828403121561442057600080fd5b8135612cc4816143f0565b6000806040838503121561443e57600080fd5b8235614449816143f0565b91506020830135614362816143f0565b60006020828403121561446b57600080fd5b813560ff81168114612cc457600080fd5b64ffffffffff8116811461167a57600080fd5b6000602082840312156144a157600080fd5b8135612cc48161447c565b600080600080600060a086880312156144c457600080fd5b85356144cf81614324565b945060208601356144df81614324565b935060408601356144ef81614324565b925060608601356144ff81614324565b9150608086013561450f81614324565b809150509295509295909350565b60006020828403121561452f57600080fd5b8135612cc481614386565b60006020828403121561454c57600080fd5b8151612cc481614386565b60006020828403121561456957600080fd5b5051919050565b8051612419816142e5565b60006020828403121561458d57600080fd5b8151612cc4816142e5565b6000806000606084860312156145ad57600080fd5b83516145b8816143f0565b60208501519093506145c981614386565b60408501519092506145da8161447c565b809150509250925092565b600080604083850312156145f857600080fd5b8251614603816143f0565b6020840151909250614362816143f0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000602080838503121561465657600080fd5b825167ffffffffffffffff8082111561466e57600080fd5b818501915085601f83011261468257600080fd5b81518181111561469457614694614614565b8060051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f830116810181811085821117156146d7576146d7614614565b6040529182528482019250838101850191888311156146f557600080fd5b938501935b8285101561471a5761470b85614570565b845293850193928501926146fa565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061ffff8083168185168083038211156147a1576147a1614755565b01949350505050565b600061ffff838116908316818110156147c5576147c5614755565b039392505050565b600080604083850312156147e057600080fd5b82516147eb816142e5565b602084015190925061436281614324565b60008282101561480e5761480e614755565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea264697066735822122046c364b67d38a3dd85b57e027716324d90dd1df102f265f0a0e2697babdb3f3b64736f6c634300080a003394525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650a264697066735822122048ca2c6d3cf555aeaa26701141bfd973b253bf5b59745c4b3d244504c2a4ba5264736f6c634300080a0033"; - -type YearnV2AdapterTestConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: YearnV2AdapterTestConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class YearnV2AdapterTest__factory extends ContractFactory { - constructor(...args: YearnV2AdapterTestConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): YearnV2AdapterTest { - return super.attach(address) as YearnV2AdapterTest; - } - override connect(signer: Signer): YearnV2AdapterTest__factory { - return super.connect(signer) as YearnV2AdapterTest__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): YearnV2AdapterTestInterface { - return new utils.Interface(_abi) as YearnV2AdapterTestInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): YearnV2AdapterTest { - return new Contract(address, _abi, signerOrProvider) as YearnV2AdapterTest; - } -} diff --git a/src/types/factories/contracts/test/adapters/YearnV2Adapter.t.sol/index.ts b/src/types/factories/contracts/test/adapters/YearnV2Adapter.t.sol/index.ts deleted file mode 100644 index a350c29d..00000000 --- a/src/types/factories/contracts/test/adapters/YearnV2Adapter.t.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { YearnV2AdapterTest__factory } from "./YearnV2AdapterTest__factory"; diff --git a/src/types/factories/contracts/test/adapters/index.ts b/src/types/factories/contracts/test/adapters/index.ts deleted file mode 100644 index a4fefa76..00000000 --- a/src/types/factories/contracts/test/adapters/index.ts +++ /dev/null @@ -1,20 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export * as abstractAdapterTSol from "./AbstractAdapter.t.sol"; -export * as convexV1BaseRewardPoolTSol from "./ConvexV1_BaseRewardPool.t.sol"; -export * as convexV1BoosterTSol from "./ConvexV1_Booster.t.sol"; -export * as convexV1ClaimZapTSol from "./ConvexV1_ClaimZap.t.sol"; -export * as curveV1AdapterBaseMetapoolTestTSol from "./CurveV1AdapterBaseMetapoolTest.t.sol"; -export * as curveV1AdapterBaseTestTSol from "./CurveV1AdapterBaseTest.t.sol"; -export * as curveV1Adapter2AssetsTestTSol from "./CurveV1Adapter_2AssetsTest.t.sol"; -export * as curveV1Adapter3AssetsTestTSol from "./CurveV1Adapter_3AssetsTest.t.sol"; -export * as curveV1Adapter4AssetsTestTSol from "./CurveV1Adapter_4AssetsTest.t.sol"; -export * as curveV1StEthTestTSol from "./CurveV1StETHTest.t.sol"; -export * as lidoV1AdapterTSol from "./LidoV1Adapter.t.sol"; -export * as uniswapV2AdapterTSol from "./UniswapV2Adapter.t.sol"; -export * as uniswapV3AdapterTSol from "./UniswapV3Adapter.t.sol"; -export * as yearnV2AdapterTSol from "./YearnV2Adapter.t.sol"; -export { AdapterTestHelper__factory } from "./AdapterTestHelper__factory"; -export { ConvexAdapterHelper__factory } from "./ConvexAdapterHelper__factory"; -export { CurveV1AdapterHelper__factory } from "./CurveV1AdapterHelper__factory"; diff --git a/src/types/factories/contracts/test/core/ACL.t.sol/ACLTest__factory.ts b/src/types/factories/contracts/test/core/ACL.t.sol/ACLTest__factory.ts deleted file mode 100644 index fc48161d..00000000 --- a/src/types/factories/contracts/test/core/ACL.t.sol/ACLTest__factory.ts +++ /dev/null @@ -1,457 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - ACLTest, - ACLTestInterface, -} from "../../../../../contracts/test/core/ACL.t.sol/ACLTest"; - -const _abi = [ - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newAdmin", - type: "address", - }, - ], - name: "PausableAdminAdded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "admin", - type: "address", - }, - ], - name: "PausableAdminRemoved", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newAdmin", - type: "address", - }, - ], - name: "UnpausableAdminAdded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "admin", - type: "address", - }, - ], - name: "UnpausableAdminRemoved", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "", - type: "address", - }, - ], - name: "log_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "log_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - name: "log_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "int256", - name: "", - type: "int256", - }, - ], - name: "log_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "address", - name: "val", - type: "address", - }, - ], - name: "log_named_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes", - name: "val", - type: "bytes", - }, - ], - name: "log_named_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes32", - name: "val", - type: "bytes32", - }, - ], - name: "log_named_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - ], - name: "log_named_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "string", - name: "val", - type: "string", - }, - ], - name: "log_named_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - ], - name: "log_named_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "log_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "logs", - type: "event", - }, - { - inputs: [], - name: "IS_TEST", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "failed", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "setUp", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_ACL_01_add_remove_reverts_on_non_owner", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_ACL_02_addPausableAdmin_adds_pool", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_ACL_03_removePausableAdmin_removes_admin", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_ACL_04_addUnpausableAdmin_adds_pool", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_ACL_05_removeUnpausableAdmin_removes_admin", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_ACL_06_isConfigurator_correct", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, -]; - -const _bytecode = - "0x60806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d000117905534801561003957600080fd5b5061255a806100496000396000f3fe608060405234801561001057600080fd5b50600436106100a35760003560e01c8063a98948c911610076578063ba414fa61161005b578063ba414fa6146100da578063f1a577d9146100f6578063fa7626d4146100fe57600080fd5b8063a98948c9146100ca578063b41b5e56146100d257600080fd5b80630a9254e4146100a857806353ccd216146100b25780636b4a1fec146100ba578063887a9389146100c2575b600080fd5b6100b061010b565b005b6100b0610217565b6100b0610376565b6100b0610661565b6100b0610a69565b6100b0610ded565b6100e2611443565b604051901515815260200160405180910390f35b6100b06115a3565b6000546100e29060ff1681565b6000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b15801561018f57600080fd5b505af11580156101a3573d6000803e3d6000fd5b505050506040516101b390611a81565b604051809103906000f0801580156101cf573d6000803e3d6000fd5b50600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6001546040517f5f259aba0000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526102c59173ffffffffffffffffffffffffffffffffffffffff1690635f259aba906024015b602060405180830381865afa15801561029c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102c09190611a8e565b61188e565b6001546040517f5f259aba00000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff260048201526103749173ffffffffffffffffffffffffffffffffffffffff1690635f259aba906024015b602060405180830381865afa15801561034a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061036e9190611a8e565b1561188e565b565b6001546040517fd4eb5db000000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff260048201526103e29173ffffffffffffffffffffffffffffffffffffffff169063d4eb5db09060240161032d565b600080546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600160048201526024810183905260448101839052606481019290925262010000900473ffffffffffffffffffffffffffffffffffffffff169063491cc7c290608401600060405180830381600087803b15801561046957600080fd5b505af115801561047d573d6000803e3d6000fd5b505060405173c4375b7de8af5a38a93548eb8453a498222c4ff292507fd400da6c0c0a894dacc0981730b88af0545d00272ee8fff1437bf560ff245fc49150600090a26000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b15801561054457600080fd5b505af1158015610558573d6000803e3d6000fd5b50506001546040517f819ad68e00000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff2600482015273ffffffffffffffffffffffffffffffffffffffff909116925063819ad68e9150602401600060405180830381600087803b1580156105db57600080fd5b505af11580156105ef573d6000803e3d6000fd5b50506001546040517fd4eb5db000000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff26004820152610374935073ffffffffffffffffffffffffffffffffffffffff909116915063d4eb5db09060240161027f565b6000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16906306447d5690602401600060405180830381600087803b1580156106e557600080fd5b505af11580156106f9573d6000803e3d6000fd5b50506001546040517f4910832f00000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff2600482015273ffffffffffffffffffffffffffffffffffffffff9091169250634910832f9150602401600060405180830381600087803b15801561077c57600080fd5b505af1158015610790573d6000803e3d6000fd5b50506001546040517f3a41ec6400000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff26004820152610802935073ffffffffffffffffffffffffffffffffffffffff9091169150633a41ec649060240161027f565b600080546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600160048201526024810183905260448101839052606481019290925262010000900473ffffffffffffffffffffffffffffffffffffffff169063491cc7c290608401600060405180830381600087803b15801561088957600080fd5b505af115801561089d573d6000803e3d6000fd5b505060405173c4375b7de8af5a38a93548eb8453a498222c4ff292507f28b01395b7e25d20552a0c8dc8ecd3b1d4abc986f14dad7885fd45b6fd73c8d99150600090a26001546040517fba306df100000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff2600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ba306df190602401600060405180830381600087803b15801561095f57600080fd5b505af1158015610973573d6000803e3d6000fd5b50506001546040517f3a41ec6400000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff260048201526109e5935073ffffffffffffffffffffffffffffffffffffffff9091169150633a41ec649060240161032d565b600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610a4f57600080fd5b505af1158015610a63573d6000803e3d6000fd5b50505050565b6000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16906306447d5690602401600060405180830381600087803b158015610aed57600080fd5b505af1158015610b01573d6000803e3d6000fd5b50506001546040517f819ad68e00000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff2600482015273ffffffffffffffffffffffffffffffffffffffff909116925063819ad68e9150602401600060405180830381600087803b158015610b8457600080fd5b505af1158015610b98573d6000803e3d6000fd5b50506001546040517fd4eb5db000000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff26004820152610c0a935073ffffffffffffffffffffffffffffffffffffffff909116915063d4eb5db09060240161027f565b600080546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600160048201526024810183905260448101839052606481019290925262010000900473ffffffffffffffffffffffffffffffffffffffff169063491cc7c290608401600060405180830381600087803b158015610c9157600080fd5b505af1158015610ca5573d6000803e3d6000fd5b505060405173c4375b7de8af5a38a93548eb8453a498222c4ff292507f1998397e7203f7baca9d6f41b9e4da6e768daac5caad4234fb9bf5869d2715459150600090a26001546040517fadce758d00000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff2600482015273ffffffffffffffffffffffffffffffffffffffff9091169063adce758d90602401600060405180830381600087803b158015610d6757600080fd5b505af1158015610d7b573d6000803e3d6000fd5b50506001546040517fd4eb5db000000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff260048201526109e5935073ffffffffffffffffffffffffffffffffffffffff909116915063d4eb5db09060240161032d565b6000546040517f06447d5600000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16906306447d5690602401600060405180830381600087803b158015610e7157600080fd5b505af1158015610e85573d6000803e3d6000fd5b505060005460408051808201825260208082527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65729082015290517ff28dceb30000000000000000000000000000000000000000000000000000000081526201000090920473ffffffffffffffffffffffffffffffffffffffff16935063f28dceb39250610f1491600401611ae3565b600060405180830381600087803b158015610f2e57600080fd5b505af1158015610f42573d6000803e3d6000fd5b50506001546040517f4910832f00000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff2600482015273ffffffffffffffffffffffffffffffffffffffff9091169250634910832f9150602401600060405180830381600087803b158015610fc557600080fd5b505af1158015610fd9573d6000803e3d6000fd5b505060005460408051808201825260208082527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65729082015290517ff28dceb30000000000000000000000000000000000000000000000000000000081526201000090920473ffffffffffffffffffffffffffffffffffffffff16935063f28dceb3925061106891600401611ae3565b600060405180830381600087803b15801561108257600080fd5b505af1158015611096573d6000803e3d6000fd5b50506001546040517f819ad68e00000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff2600482015273ffffffffffffffffffffffffffffffffffffffff909116925063819ad68e9150602401600060405180830381600087803b15801561111957600080fd5b505af115801561112d573d6000803e3d6000fd5b505060005460408051808201825260208082527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65729082015290517ff28dceb30000000000000000000000000000000000000000000000000000000081526201000090920473ffffffffffffffffffffffffffffffffffffffff16935063f28dceb392506111bc91600401611ae3565b600060405180830381600087803b1580156111d657600080fd5b505af11580156111ea573d6000803e3d6000fd5b50506001546040517fba306df100000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff2600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ba306df19150602401600060405180830381600087803b15801561126d57600080fd5b505af1158015611281573d6000803e3d6000fd5b505060005460408051808201825260208082527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65729082015290517ff28dceb30000000000000000000000000000000000000000000000000000000081526201000090920473ffffffffffffffffffffffffffffffffffffffff16935063f28dceb3925061131091600401611ae3565b600060405180830381600087803b15801561132a57600080fd5b505af115801561133e573d6000803e3d6000fd5b50506001546040517fadce758d00000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff2600482015273ffffffffffffffffffffffffffffffffffffffff909116925063adce758d9150602401600060405180830381600087803b1580156113c157600080fd5b505af11580156113d5573d6000803e3d6000fd5b50505050600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610a4f57600080fd5b60008054610100900460ff16156114635750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561159e5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091611508917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc491608001611b34565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261154091611b7c565b6000604051808303816000865af19150503d806000811461157d576040519150601f19603f3d011682016040523d82523d6000602084013e611582565b606091505b509150508080602001905181019061159a9190611a8e565b9150505b919050565b6001546040517f3a41ec6400000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff2600482015261160f9173ffffffffffffffffffffffffffffffffffffffff1690633a41ec649060240161032d565b600080546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600160048201526024810183905260448101839052606481019290925262010000900473ffffffffffffffffffffffffffffffffffffffff169063491cc7c290608401600060405180830381600087803b15801561169657600080fd5b505af11580156116aa573d6000803e3d6000fd5b505060405173c4375b7de8af5a38a93548eb8453a498222c4ff292507fae26b1cfe9454ba87274a4e8330b6654684362d0f3d7bbd17f7449a1d38387c69150600090a26000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b15801561177157600080fd5b505af1158015611785573d6000803e3d6000fd5b50506001546040517f4910832f00000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff2600482015273ffffffffffffffffffffffffffffffffffffffff9091169250634910832f9150602401600060405180830381600087803b15801561180857600080fd5b505af115801561181c573d6000803e3d6000fd5b50506001546040517f3a41ec6400000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff26004820152610374935073ffffffffffffffffffffffffffffffffffffffff9091169150633a41ec649060240161027f565b80611902577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f506040516118f29060208082526017908201527f4572726f723a20417373657274696f6e204661696c6564000000000000000000604082015260600190565b60405180910390a1611902611905565b50565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15611a535760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000009282019290925260016060820152600091907f70ca10bbd0dbfd9020a9f4b13402c16cb120705e0d1c0aeab10fa353ae586fc490608001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526119d49291602001611b34565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052611a0c91611b7c565b6000604051808303816000865af19150503d8060008114611a49576040519150601f19603f3d011682016040523d82523d6000602084013e611a4e565b606091505b505050505b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055565b61098c80611b9983390190565b600060208284031215611aa057600080fd5b81518015158114611ab057600080fd5b9392505050565b60005b83811015611ad2578181015183820152602001611aba565b83811115610a635750506000910152565b6020815260008251806020840152611b02816040850160208701611ab7565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b7fffffffff000000000000000000000000000000000000000000000000000000008316815260008251611b6e816004850160208701611ab7565b919091016004019392505050565b60008251611b8e818460208701611ab7565b919091019291505056fe608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61090e8061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063732818191161008c578063adce758d11610066578063adce758d14610215578063ba306df114610228578063d4eb5db01461023b578063f2fde38b1461027457600080fd5b806373281819146101b7578063819ad68e146101da5780638da5cb5b146101ed57600080fd5b806354fd4d50116100bd57806354fd4d501461016a5780635f259aba14610180578063715018a6146101af57600080fd5b806335914829146100e45780633a41ec641461011c5780634910832f14610155575b600080fd5b6101076100f236600461089b565b60016020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61010761012a36600461089b565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205460ff1690565b61016861016336600461089b565b610287565b005b610172600181565b604051908152602001610113565b61010761018e36600461089b565b60005473ffffffffffffffffffffffffffffffffffffffff91821691161490565b610168610387565b6101076101c536600461089b565b60026020526000908152604090205460ff1681565b6101686101e836600461089b565b610414565b60005460405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610113565b61016861022336600461089b565b61050c565b61016861023636600461089b565b610601565b61010761024936600461089b565b73ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205460ff1690565b61016861028236600461089b565b6106f6565b60005473ffffffffffffffffffffffffffffffffffffffff16331461030d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909217909155517fae26b1cfe9454ba87274a4e8330b6654684362d0f3d7bbd17f7449a1d38387c69190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610408576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b6104126000610826565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517fd400da6c0c0a894dacc0981730b88af0545d00272ee8fff1437bf560ff245fc49190a250565b60005473ffffffffffffffffffffffffffffffffffffffff16331461058d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f1998397e7203f7baca9d6f41b9e4da6e768daac5caad4234fb9bf5869d2715459190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610682576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526001602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f28b01395b7e25d20552a0c8dc8ecd3b1d4abc986f14dad7885fd45b6fd73c8d99190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811661081a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610304565b61082381610826565b50565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156108ad57600080fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146108d157600080fd5b939250505056fea26469706673582212204712efbfe997070def77285a5b8753bc882b62da2133ce1937ad26cd2b48e49864736f6c634300080a0033a26469706673582212209a666f9a1c71e1614a8fd73a851f948a01d133b39711e9ee217197fe43aec48764736f6c634300080a0033"; - -type ACLTestConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: ACLTestConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class ACLTest__factory extends ContractFactory { - constructor(...args: ACLTestConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): ACLTest { - return super.attach(address) as ACLTest; - } - override connect(signer: Signer): ACLTest__factory { - return super.connect(signer) as ACLTest__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): ACLTestInterface { - return new utils.Interface(_abi) as ACLTestInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): ACLTest { - return new Contract(address, _abi, signerOrProvider) as ACLTest; - } -} diff --git a/src/types/factories/contracts/test/core/ACL.t.sol/index.ts b/src/types/factories/contracts/test/core/ACL.t.sol/index.ts deleted file mode 100644 index 39002a0d..00000000 --- a/src/types/factories/contracts/test/core/ACL.t.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { ACLTest__factory } from "./ACLTest__factory"; diff --git a/src/types/factories/contracts/test/core/AddressProvider.t.sol/AddressProviderTest__factory.ts b/src/types/factories/contracts/test/core/AddressProvider.t.sol/AddressProviderTest__factory.ts deleted file mode 100644 index 91b0779f..00000000 --- a/src/types/factories/contracts/test/core/AddressProvider.t.sol/AddressProviderTest__factory.ts +++ /dev/null @@ -1,466 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - AddressProviderTest, - AddressProviderTestInterface, -} from "../../../../../contracts/test/core/AddressProvider.t.sol/AddressProviderTest"; - -const _abi = [ - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "service", - type: "bytes32", - }, - { - indexed: true, - internalType: "address", - name: "newAddress", - type: "address", - }, - ], - name: "AddressSet", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "", - type: "address", - }, - ], - name: "log_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "log_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - name: "log_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "int256", - name: "", - type: "int256", - }, - ], - name: "log_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "address", - name: "val", - type: "address", - }, - ], - name: "log_named_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes", - name: "val", - type: "bytes", - }, - ], - name: "log_named_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes32", - name: "val", - type: "bytes32", - }, - ], - name: "log_named_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - ], - name: "log_named_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "string", - name: "val", - type: "string", - }, - ], - name: "log_named_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - ], - name: "log_named_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "log_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "logs", - type: "event", - }, - { - inputs: [], - name: "IS_TEST", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "failed", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "setUp", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_AP_01_getAddress_reverts_if_contact_not_found", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_AP_02_setAddress_emits_event_correctly", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_AP_03_setACL_correctly_sets_ACL", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_AP_04_setContractsRegister_correctly_sets_ContractsRegister", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_AP_05_setPriceOracle_correctly_sets_PriceOracle", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_AP_06_setAccountFactory_correctly_sets_AccountFactory", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_AP_07_setDataCompressor_correctly_sets_DataCompressor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_AP_08_setTreasuryContract_correctly_sets_TreasuryContract", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_AP_09_setGearToken_correctly_sets_GearToken", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_AP_10_setWethToken_correctly_sets_WethToken", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_AP_11_setWETHGateway_correctly_sets_WethGateway", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_AP_12_set_functions_revert_if_called_by_non_owner", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, -]; - -const _bytecode = - "0x60806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d000117905534801561003957600080fd5b50613090806100496000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c8063a4542fff11610097578063caacc2ab11610066578063caacc2ab14610168578063cda1eec714610170578063f63ce13e14610178578063fa7626d41461018057600080fd5b8063a4542fff14610134578063a4ea04131461013c578063ba414fa614610144578063c11f97271461016057600080fd5b806335c44f35116100d357806335c44f351461011457806361a5a4be1461011c5780637ce04bfc146101245780638457cab41461012c57600080fd5b8063067e033e146100fa5780630a9254e41461010457806332b57c7c1461010c575b600080fd5b61010261018d565b005b6101026102d4565b610102610344565b61010261044b565b610102610552565b610102610659565b610102610760565b610102610a23565b610102610b2a565b61014c610c31565b604051901515815260200160405180910390f35b610102610d91565b6101026118a8565b6101026119af565b610102611b00565b60005461014c9060ff1681565b6001546040517f1ed6511000000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff2600482015273ffffffffffffffffffffffffffffffffffffffff90911690631ed6511090602401600060405180830381600087803b15801561020c57600080fd5b505af1158015610220573d6000803e3d6000fd5b505050506102d2600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166326c74fc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610294573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102b89190611f49565b73c4375b7de8af5a38a93548eb8453a498222c4ff2611c07565b565b6040516102e090611f3c565b604051809103906000f0801580156102fc573d6000803e3d6000fd5b50600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6001546040517faddc1a7600000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff2600482015273ffffffffffffffffffffffffffffffffffffffff9091169063addc1a7690602401600060405180830381600087803b1580156103c357600080fd5b505af11580156103d7573d6000803e3d6000fd5b505050506102d2600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639068a8686040518163ffffffff1660e01b8152600401602060405180830381865afa158015610294573d6000803e3d6000fd5b6001546040517f530e784f00000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff2600482015273ffffffffffffffffffffffffffffffffffffffff9091169063530e784f90602401600060405180830381600087803b1580156104ca57600080fd5b505af11580156104de573d6000803e3d6000fd5b505050506102d2600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610294573d6000803e3d6000fd5b6001546040517fc5120b3900000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff2600482015273ffffffffffffffffffffffffffffffffffffffff9091169063c5120b3990602401600060405180830381600087803b1580156105d157600080fd5b505af11580156105e5573d6000803e3d6000fd5b505050506102d2600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663060678c26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610294573d6000803e3d6000fd5b6001546040517fce3c4ae400000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff2600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ce3c4ae490602401600060405180830381600087803b1580156106d857600080fd5b505af11580156106ec573d6000803e3d6000fd5b505050506102d2600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610294573d6000803e3d6000fd5b600080546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600160048201819052602482015260448101839052606481019290925262010000900473ffffffffffffffffffffffffffffffffffffffff169063491cc7c290608401600060405180830381600087803b1580156107e757600080fd5b505af11580156107fb573d6000803e3d6000fd5b505060405173c4375b7de8af5a38a93548eb8453a498222c4ff292507f434f4e5452414354535f5245474953544552000000000000000000000000000091507fb37614c7d254ea8d16eb81fa11dddaeb266aa8ba4917980859c7740aff30c69190600090a36001546040517fce3c4ae400000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff2600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ce3c4ae490602401600060405180830381600087803b1580156108df57600080fd5b505af11580156108f3573d6000803e3d6000fd5b5050600080546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600160048201526024810183905260448101839052606481019290925262010000900473ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b15801561097e57600080fd5b505af1158015610992573d6000803e3d6000fd5b505060405173c4375b7de8af5a38a93548eb8453a498222c4ff292507f414444524553535f50524f56494445520000000000000000000000000000000091507fb37614c7d254ea8d16eb81fa11dddaeb266aa8ba4917980859c7740aff30c69190600090a3604051610a0390611f3c565b604051809103906000f080158015610a1f573d6000803e3d6000fd5b5050565b6001546040517f21da583700000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff2600482015273ffffffffffffffffffffffffffffffffffffffff909116906321da583790602401600060405180830381600087803b158015610aa257600080fd5b505af1158015610ab6573d6000803e3d6000fd5b505050506102d2600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166377532ed96040518163ffffffff1660e01b8152600401602060405180830381865afa158015610294573d6000803e3d6000fd5b6001546040517f86e09c0800000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff2600482015273ffffffffffffffffffffffffffffffffffffffff909116906386e09c0890602401600060405180830381600087803b158015610ba957600080fd5b505af1158015610bbd573d6000803e3d6000fd5b505050506102d2600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa158015610294573d6000803e3d6000fd5b60008054610100900460ff1615610c515750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610d8c5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610cf6917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc491608001611fb6565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052610d2e91611ffe565b6000604051808303816000865af19150503d8060008114610d6b576040519150601f19603f3d011682016040523d82523d6000602084013e610d70565b606091505b5091505080806020019051810190610d88919061201a565b9150505b919050565b6000546040517f06447d5600000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16906306447d5690602401600060405180830381600087803b158015610e1557600080fd5b505af1158015610e29573d6000803e3d6000fd5b505060408051808201825260208082527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65729082015260005491517ff28dceb30000000000000000000000000000000000000000000000000000000081529093506201000090910473ffffffffffffffffffffffffffffffffffffffff16915063f28dceb390610ebc90849060040161203c565b600060405180830381600087803b158015610ed657600080fd5b505af1158015610eea573d6000803e3d6000fd5b50506001546040517f76aad60500000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff2600482015273ffffffffffffffffffffffffffffffffffffffff90911692506376aad6059150602401600060405180830381600087803b158015610f6d57600080fd5b505af1158015610f81573d6000803e3d6000fd5b50506000546040517ff28dceb30000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063f28dceb39150610fe090849060040161203c565b600060405180830381600087803b158015610ffa57600080fd5b505af115801561100e573d6000803e3d6000fd5b50506001546040517fce3c4ae400000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff2600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ce3c4ae49150602401600060405180830381600087803b15801561109157600080fd5b505af11580156110a5573d6000803e3d6000fd5b50506000546040517ff28dceb30000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063f28dceb3915061110490849060040161203c565b600060405180830381600087803b15801561111e57600080fd5b505af1158015611132573d6000803e3d6000fd5b50506001546040517f530e784f00000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff2600482015273ffffffffffffffffffffffffffffffffffffffff909116925063530e784f9150602401600060405180830381600087803b1580156111b557600080fd5b505af11580156111c9573d6000803e3d6000fd5b50506000546040517ff28dceb30000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063f28dceb3915061122890849060040161203c565b600060405180830381600087803b15801561124257600080fd5b505af1158015611256573d6000803e3d6000fd5b50506001546040517faddc1a7600000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff2600482015273ffffffffffffffffffffffffffffffffffffffff909116925063addc1a769150602401600060405180830381600087803b1580156112d957600080fd5b505af11580156112ed573d6000803e3d6000fd5b50506000546040517ff28dceb30000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063f28dceb3915061134c90849060040161203c565b600060405180830381600087803b15801561136657600080fd5b505af115801561137a573d6000803e3d6000fd5b50506001546040517fc5120b3900000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff2600482015273ffffffffffffffffffffffffffffffffffffffff909116925063c5120b399150602401600060405180830381600087803b1580156113fd57600080fd5b505af1158015611411573d6000803e3d6000fd5b50506000546040517ff28dceb30000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063f28dceb3915061147090849060040161203c565b600060405180830381600087803b15801561148a57600080fd5b505af115801561149e573d6000803e3d6000fd5b50506001546040517f1ed6511000000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff2600482015273ffffffffffffffffffffffffffffffffffffffff9091169250631ed651109150602401600060405180830381600087803b15801561152157600080fd5b505af1158015611535573d6000803e3d6000fd5b50506000546040517ff28dceb30000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063f28dceb3915061159490849060040161203c565b600060405180830381600087803b1580156115ae57600080fd5b505af11580156115c2573d6000803e3d6000fd5b50506001546040517fbcaead9800000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff2600482015273ffffffffffffffffffffffffffffffffffffffff909116925063bcaead989150602401600060405180830381600087803b15801561164557600080fd5b505af1158015611659573d6000803e3d6000fd5b50506000546040517ff28dceb30000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063f28dceb391506116b890849060040161203c565b600060405180830381600087803b1580156116d257600080fd5b505af11580156116e6573d6000803e3d6000fd5b50506001546040517f86e09c0800000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff2600482015273ffffffffffffffffffffffffffffffffffffffff90911692506386e09c089150602401600060405180830381600087803b15801561176957600080fd5b505af115801561177d573d6000803e3d6000fd5b50506000546040517ff28dceb30000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063f28dceb391506117dc90849060040161203c565b600060405180830381600087803b1580156117f657600080fd5b505af115801561180a573d6000803e3d6000fd5b50506001546040517f21da583700000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff2600482015273ffffffffffffffffffffffffffffffffffffffff90911692506321da58379150602401600060405180830381600087803b15801561188d57600080fd5b505af11580156118a1573d6000803e3d6000fd5b5050505050565b6001546040517fbcaead9800000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff2600482015273ffffffffffffffffffffffffffffffffffffffff9091169063bcaead9890602401600060405180830381600087803b15801561192757600080fd5b505af115801561193b573d6000803e3d6000fd5b505050506102d2600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663affd92436040518163ffffffff1660e01b8152600401602060405180830381865afa158015610294573d6000803e3d6000fd5b600054604080518082018252600381527f4150310000000000000000000000000000000000000000000000000000000000602082015290517ff28dceb30000000000000000000000000000000000000000000000000000000081526201000090920473ffffffffffffffffffffffffffffffffffffffff169163f28dceb391611a3a9160040161203c565b600060405180830381600087803b158015611a5457600080fd5b505af1158015611a68573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639068a8686040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ad9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611afd9190611f49565b50565b6001546040517f76aad60500000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff2600482015273ffffffffffffffffffffffffffffffffffffffff909116906376aad60590602401600060405180830381600087803b158015611b7f57600080fd5b505af1158015611b93573d6000803e3d6000fd5b505050506102d2600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015610294573d6000803e3d6000fd5b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614610a1f577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f50604051611cbf9060208082526025908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b61646460408201527f726573735d000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a160408051818152600a818301527f2020457870656374656400000000000000000000000000000000000000000000606082015273ffffffffffffffffffffffffffffffffffffffff8316602082015290517f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f9181900360800190a160408051818152600a818301527f2020202041637475616c00000000000000000000000000000000000000000000606082015273ffffffffffffffffffffffffffffffffffffffff8416602082015290517f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f9181900360800190a1610a1f737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15611f0e5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000009282019290925260016060820152600091907f70ca10bbd0dbfd9020a9f4b13402c16cb120705e0d1c0aeab10fa353ae586fc490608001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052611e8f9291602001611fb6565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052611ec791611ffe565b6000604051808303816000865af19150503d8060008114611f04576040519150601f19603f3d011682016040523d82523d6000602084013e611f09565b606091505b505050505b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055565b610fcd8061208e83390190565b600060208284031215611f5b57600080fd5b815173ffffffffffffffffffffffffffffffffffffffff81168114611f7f57600080fd5b9392505050565b60005b83811015611fa1578181015183820152602001611f89565b83811115611fb0576000848401525b50505050565b7fffffffff000000000000000000000000000000000000000000000000000000008316815260008251611ff0816004850160208701611f86565b919091016004019392505050565b60008251612010818460208701611f86565b9190910192915050565b60006020828403121561202c57600080fd5b81518015158114611f7f57600080fd5b602081526000825180602084015261205b816040850160208701611f86565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe608060405234801561001057600080fd5b5061001a3361005f565b60405130906f20a2222922a9a9afa82927ab24a222a960811b907fb37614c7d254ea8d16eb81fa11dddaeb266aa8ba4917980859c7740aff30c69190600090a36100af565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610f0f806100be6000396000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c806377532ed9116100e3578063bcaead981161008c578063ce3c4ae411610066578063ce3c4ae414610308578063f2fde38b1461031b578063fca513a81461032e57600080fd5b8063bcaead98146102da578063c5120b39146102ed578063c513c9bb1461030057600080fd5b80639068a868116100bd5780639068a868146102b7578063addc1a76146102bf578063affd9243146102d257600080fd5b806377532ed91461027e57806386e09c08146102865780638da5cb5b1461029957600080fd5b80634c252f9111610145578063699f200f1161011f578063699f200f1461022d578063715018a61461026357806376aad6051461026b57600080fd5b80634c252f91146101fc578063530e784f1461020457806354fd4d501461021757600080fd5b80631ed65110116101765780631ed65110146101cc57806321da5837146101e157806326c74fc3146101f457600080fd5b8063060678c21461019257806308737695146101c4575b600080fd5b61019a610336565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61019a610366565b6101df6101da366004610e10565b610391565b005b6101df6101ef366004610e10565b610444565b61019a6104ef565b61019a61051a565b6101df610212366004610e10565b610545565b61021f600281565b6040519081526020016101bb565b61019a61023b366004610e4d565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6101df6105f0565b6101df610279366004610e10565b61067d565b61019a610728565b6101df610294366004610e10565b610753565b60005473ffffffffffffffffffffffffffffffffffffffff1661019a565b61019a6107fe565b6101df6102cd366004610e10565b610829565b61019a6108d4565b6101df6102e8366004610e10565b6108ff565b6101df6102fb366004610e10565b6109aa565b61019a610a55565b6101df610316366004610e10565b610a80565b6101df610329366004610e10565b610b2b565b61019a610c58565b60006103617f444154415f434f4d50524553534f520000000000000000000000000000000000610c7f565b905090565b60006103617f41434c0000000000000000000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610417576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6104417f54524541535552595f434f4e545241435400000000000000000000000000000082610d1d565b50565b60005473ffffffffffffffffffffffffffffffffffffffff1633146104c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f574554485f47415445574159000000000000000000000000000000000000000082610d1d565b60006103617f54524541535552595f434f4e5452414354000000000000000000000000000000610c7f565b60006103617f574554485f544f4b454e00000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f50524943455f4f5241434c45000000000000000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610671576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b61067b6000610d9b565b565b60005473ffffffffffffffffffffffffffffffffffffffff1633146106fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f41434c000000000000000000000000000000000000000000000000000000000082610d1d565b60006103617f574554485f474154455741590000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146107d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f574554485f544f4b454e0000000000000000000000000000000000000000000082610d1d565b60006103617f4143434f554e545f464143544f52590000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146108aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f4143434f554e545f464143544f5259000000000000000000000000000000000082610d1d565b60006103617f474541525f544f4b454e00000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610980576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f474541525f544f4b454e0000000000000000000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f444154415f434f4d50524553534f52000000000000000000000000000000000082610d1d565b60006103617f434f4e5452414354535f52454749535445520000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610b01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f434f4e5452414354535f5245474953544552000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610bac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b73ffffffffffffffffffffffffffffffffffffffff8116610c4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161040e565b61044181610d9b565b60006103617f50524943455f4f5241434c4500000000000000000000000000000000000000005b6000818152600160209081526040808320548151808301909252600382527f41503100000000000000000000000000000000000000000000000000000000009282019290925273ffffffffffffffffffffffffffffffffffffffff9091169081610d16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040e9190610e66565b5092915050565b60008281526001602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091559051909184917fb37614c7d254ea8d16eb81fa11dddaeb266aa8ba4917980859c7740aff30c6919190a35050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215610e2257600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610e4657600080fd5b9392505050565b600060208284031215610e5f57600080fd5b5035919050565b600060208083528351808285015260005b81811015610e9357858101830151858201604001528201610e77565b81811115610ea5576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea264697066735822122083c228af017c6f5cf8c395cdf7a53276ff56fdd4f4313c39f680ab73bd75417364736f6c634300080a0033a264697066735822122066c4312e82164eef19ee5b43751265467d2b4cb8b809741269673b99a74ab10264736f6c634300080a0033"; - -type AddressProviderTestConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: AddressProviderTestConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class AddressProviderTest__factory extends ContractFactory { - constructor(...args: AddressProviderTestConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): AddressProviderTest { - return super.attach(address) as AddressProviderTest; - } - override connect(signer: Signer): AddressProviderTest__factory { - return super.connect(signer) as AddressProviderTest__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): AddressProviderTestInterface { - return new utils.Interface(_abi) as AddressProviderTestInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): AddressProviderTest { - return new Contract(address, _abi, signerOrProvider) as AddressProviderTest; - } -} diff --git a/src/types/factories/contracts/test/core/AddressProvider.t.sol/index.ts b/src/types/factories/contracts/test/core/AddressProvider.t.sol/index.ts deleted file mode 100644 index 4a0e99cb..00000000 --- a/src/types/factories/contracts/test/core/AddressProvider.t.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { AddressProviderTest__factory } from "./AddressProviderTest__factory"; diff --git a/src/types/factories/contracts/test/core/index.ts b/src/types/factories/contracts/test/core/index.ts deleted file mode 100644 index a3e7ab2b..00000000 --- a/src/types/factories/contracts/test/core/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export * as aclTSol from "./ACL.t.sol"; -export * as addressProviderTSol from "./AddressProvider.t.sol"; diff --git a/src/types/factories/contracts/test/credit/CreditConfigurator.t.sol/CreditConfiguratorTest__factory.ts b/src/types/factories/contracts/test/credit/CreditConfigurator.t.sol/CreditConfiguratorTest__factory.ts deleted file mode 100644 index 14a01ca1..00000000 --- a/src/types/factories/contracts/test/credit/CreditConfigurator.t.sol/CreditConfiguratorTest__factory.ts +++ /dev/null @@ -1,1048 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - CreditConfiguratorTest, - CreditConfiguratorTestInterface, -} from "../../../../../contracts/test/credit/CreditConfigurator.t.sol/CreditConfiguratorTest"; - -const _abi = [ - { - inputs: [], - name: "AdapterUsedTwiceException", - type: "error", - }, - { - inputs: [], - name: "ChiThresholdMoreOneException", - type: "error", - }, - { - inputs: [], - name: "ContractNotInAllowedList", - type: "error", - }, - { - inputs: [], - name: "CreditManagerOrFacadeUsedAsAllowContractsException", - type: "error", - }, - { - inputs: [], - name: "DegenNFTnotSetException", - type: "error", - }, - { - inputs: [], - name: "FastCheckNotCoverCollateralDropException", - type: "error", - }, - { - inputs: [], - name: "IncompatibleContractException", - type: "error", - }, - { - inputs: [], - name: "IncorrectExpirationDateException", - type: "error", - }, - { - inputs: [], - name: "IncorrectFeesException", - type: "error", - }, - { - inputs: [], - name: "IncorrectLimitsException", - type: "error", - }, - { - inputs: [], - name: "IncorrectLiquidationThresholdException", - type: "error", - }, - { - inputs: [], - name: "SetLTForUnderlyingException", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "", - type: "address", - }, - ], - name: "AddedToUpgradeable", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "protocol", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "adapter", - type: "address", - }, - ], - name: "ContractAllowed", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "protocol", - type: "address", - }, - ], - name: "ContractForbidden", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newCreditConfigurator", - type: "address", - }, - ], - name: "CreditConfiguratorUpgraded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newCreditFacade", - type: "address", - }, - ], - name: "CreditFacadeUpgraded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bool", - name: "", - type: "bool", - }, - ], - name: "DegenModeUpdated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "target", - type: "address", - }, - ], - name: "ExecuteOrder", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint40", - name: "", - type: "uint40", - }, - ], - name: "ExpirationDateUpdated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint16", - name: "feeInterest", - type: "uint16", - }, - { - indexed: false, - internalType: "uint16", - name: "feeLiquidation", - type: "uint16", - }, - { - indexed: false, - internalType: "uint16", - name: "liquidationPremium", - type: "uint16", - }, - { - indexed: false, - internalType: "uint16", - name: "feeLiquidationExpired", - type: "uint16", - }, - { - indexed: false, - internalType: "uint16", - name: "liquidationPremiumExpired", - type: "uint16", - }, - ], - name: "FeesUpdated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bool", - name: "", - type: "bool", - }, - ], - name: "IncreaseDebtModeUpdated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint128", - name: "", - type: "uint128", - }, - ], - name: "LimitPerBlockUpdated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "minBorrowedAmount", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "maxBorrowedAmount", - type: "uint256", - }, - ], - name: "LimitsUpdated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint8", - name: "", - type: "uint8", - }, - ], - name: "MaxEnabledTokensUpdated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newConfigurator", - type: "address", - }, - ], - name: "NewConfigurator", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newPriceOracle", - type: "address", - }, - ], - name: "PriceOracleUpgraded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "", - type: "address", - }, - ], - name: "RemovedFromUpgradeable", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "token", - type: "address", - }, - ], - name: "TokenAllowed", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "token", - type: "address", - }, - ], - name: "TokenForbidden", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "token", - type: "address", - }, - { - indexed: false, - internalType: "uint16", - name: "liquidityThreshold", - type: "uint16", - }, - ], - name: "TokenLiquidationThresholdUpdated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "", - type: "address", - }, - ], - name: "log_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "log_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - name: "log_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "int256", - name: "", - type: "int256", - }, - ], - name: "log_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "address", - name: "val", - type: "address", - }, - ], - name: "log_named_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes", - name: "val", - type: "bytes", - }, - ], - name: "log_named_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes32", - name: "val", - type: "bytes32", - }, - ], - name: "log_named_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - ], - name: "log_named_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "string", - name: "val", - type: "string", - }, - ], - name: "log_named_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - ], - name: "log_named_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "log_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "logs", - type: "event", - }, - { - inputs: [], - name: "IS_TEST", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes", - name: "bytecode", - type: "bytes", - }, - { - internalType: "uint256", - name: "_salt", - type: "uint256", - }, - ], - name: "_deploy", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes", - name: "bytecode", - type: "bytes", - }, - { - internalType: "uint256", - name: "_salt", - type: "uint256", - }, - ], - name: "_getAddress", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditConfigurator", - outputs: [ - { - internalType: "contract CreditConfigurator", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditFacade", - outputs: [ - { - internalType: "contract CreditFacade", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditManager", - outputs: [ - { - internalType: "contract CreditManager", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "failed", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "setUp", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CC_01A_constructor_emits_all_events", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CC_01_constructor_sets_correct_values", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CC_02_all_functions_revert_if_called_non_configurator", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CC_03_addCollateralToken_reverts_for_zero_address_or_in_priceFeed", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CC_04_addCollateralToken_adds_new_token_to_creditManager_and_set_lt", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CC_05_setLiquidationThreshold_reverts_for_underling_token_and_incorrect_values", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CC_06_setLiquidationThreshold_sets_liquidation_threshold_in_creditManager", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CC_07_allowToken_and_forbidToken_reverts_for_unknown_or_underlying_token", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CC_08_allowToken_doesnt_change_forbidden_mask_if_its_already_allowed", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CC_09_allows_token_if_it_was_forbidden", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CC_10_forbidToken_doesnt_change_forbidden_mask_if_its_already_forbidden", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CC_11_forbidToken_forbids_token_if_it_was_allowed", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CC_12A_allowContract_reverts_for_non_contract_addresses", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CC_12B_allowContract_reverts_for_non_compartible_adapter_contract", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CC_12_allowContract_and_forbidContract_reverts_for_zero_address", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CC_13_allowContract_reverts_for_creditManager_and_creditFacade_contracts", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CC_14_allowContract_reverts_for_creditManager_and_creditFacade_contracts", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CC_15_allowContract_allows_targetContract_adapter_and_emits_event", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CC_16_forbidContract_reverts_for_unknown_contract", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CC_17_forbidContract_forbids_contract_and_emits_event", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CC_18_setLimits_reverts_if_minAmount_gt_maxAmount_or_maxBorrowedAmount_gt_blockLimit", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CC_19_setLimits_sets_limits", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CC_23_setFees_reverts_for_incorrect_fees", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CC_25_setFees_updates_LT_for_underlying_and_for_all_tokens_which_bigger_than_new_LT", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CC_26_setFees_sets_fees_and_doesnt_change_others", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CC_28_upgradePriceOracle_upgrades_priceOracleCorrectly_and_doesnt_change_facade", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CC_29_upgradeCreditFacade_upgradeCreditConfigurator_reverts_for_incompatible_contracts", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CC_30_upgradeCreditFacade_upgrades_creditFacade_and_doesnt_change_priceOracle", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CC_31_upgradeCreditConfigurator_upgrades_creditConfigurator", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CC_32_setIncreaseDebtForbidden_sets_IncreaseDebtForbidden", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CC_33_setLimitPerBlock_reverts_if_it_lt_maxLimit_otherwise_sets_limitPerBlock", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CC_34_setExpirationDate_reverts_on_incorrect_newExpirationDate_otherwise_sets", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CC_35_addToUpgradeableContracts_works_correctly", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CC_36_removeFromUpgradeableContracts_works_correctly", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CC_37_setMaxEnabledTokens_works_correctly", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, -]; - -const _bytecode = - "0x60806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d00011790553480156200003a57600080fd5b506205e532806200004c6000396000f3fe608060405260043610620003165760003560e01c80636cf3cb8d11620001a3578063bc93cb6811620000e7578063e0c7e3601162000095578063f5487cc3116200006c578063f5487cc31462000752578063f9aa028a146200076a578063fa7626d4146200079957600080fd5b8063e0c7e360146200070a578063e379750f1462000722578063f04f5a7c146200073a57600080fd5b8063c1eca48d11620000ca578063c1eca48d14620006c2578063c366cae114620006da578063dbb058b814620006f257600080fd5b8063bc93cb68146200067b578063c12c21c0146200069357600080fd5b806394a477681162000151578063a9a7e1601162000128578063a9a7e1601462000622578063b47bc1c8146200063a578063ba414fa6146200065257600080fd5b806394a4776814620005da578063a4a1aeec14620005f2578063a7da75f8146200060a57600080fd5b8063763d0ab51162000186578063763d0ab514620005935780637f308f7914620005ab57806382dd5c4214620005c357600080fd5b80636cf3cb8d14620005635780636fd9059c146200057b57600080fd5b8063211f3879116200026b5780633811eff3116200021957806364e6c5fe11620001f057806364e6c5fe146200051b5780636844caa414620005335780636ac1eca0146200054b57600080fd5b80633811eff314620004d35780635566b3d814620004eb5780635864bade146200050357600080fd5b806328b5dab8116200024e57806328b5dab8146200047457806329d0f905146200048c5780632f7a188114620004a457600080fd5b8063211f3879146200044457806325c9c435146200045c57600080fd5b80630e43944011620002c957806314008d5411620002ac57806314008d5414620003fc57806319ca6fac14620004145780631d1739ff146200042c57600080fd5b80630e43944014620003cc5780631278a3d114620003e457600080fd5b806305fe778311620002fe57806305fe7783146200034d578063090f299e146200039c5780630a9254e414620003b457600080fd5b80629b9c38146200031b578063035a5a941462000335575b600080fd5b3480156200032857600080fd5b5062000333620007b5565b005b3480156200034257600080fd5b506200033362000ce9565b3480156200035a57600080fd5b50620003726200036c3660046200ff79565b62001617565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b348015620003a957600080fd5b5062000333620016a1565b348015620003c157600080fd5b506200033362001b62565b348015620003d957600080fd5b50620003336200218d565b348015620003f157600080fd5b50620003336200266e565b3480156200040957600080fd5b506200033362002b17565b3480156200042157600080fd5b50620003336200313a565b3480156200043957600080fd5b506200033362003400565b3480156200045157600080fd5b506200033362003c37565b3480156200046957600080fd5b506200033362003ffb565b3480156200048157600080fd5b50620003336200452b565b3480156200049957600080fd5b506200033362005041565b348015620004b157600080fd5b50600454620003729073ffffffffffffffffffffffffffffffffffffffff1681565b348015620004e057600080fd5b506200033362005270565b348015620004f857600080fd5b50620003336200647f565b3480156200051057600080fd5b506200033362006982565b3480156200052857600080fd5b506200033362006c64565b3480156200054057600080fd5b506200033362006ff5565b3480156200055857600080fd5b5062000333620080aa565b3480156200057057600080fd5b5062000333620086e3565b3480156200058857600080fd5b506200033362009491565b348015620005a057600080fd5b5062000333620099ab565b348015620005b857600080fd5b506200033362009e2d565b62000333620005d43660046200ff79565b6200a338565b348015620005e757600080fd5b50620003336200a351565b348015620005ff57600080fd5b50620003336200a957565b3480156200061757600080fd5b50620003336200af1f565b3480156200062f57600080fd5b50620003336200b5e0565b3480156200064757600080fd5b50620003336200c881565b3480156200065f57600080fd5b506200066a6200ca24565b604051901515815260200162000393565b3480156200068857600080fd5b50620003336200cb8e565b348015620006a057600080fd5b50600354620003729073ffffffffffffffffffffffffffffffffffffffff1681565b348015620006cf57600080fd5b50620003336200cfbd565b348015620006e757600080fd5b50620003336200d3a4565b348015620006ff57600080fd5b50620003336200d900565b3480156200071757600080fd5b50620003336200e26e565b3480156200072f57600080fd5b50620003336200e6c2565b3480156200074757600080fd5b50620003336200ed1f565b3480156200075f57600080fd5b50620003336200f090565b3480156200077757600080fd5b50600554620003729073ffffffffffffffffffffffffffffffffffffffff1681565b348015620007a657600080fd5b506000546200066a9060ff1681565b6001546040517f67b4264500000000000000000000000000000000000000000000000000000000815260009173ffffffffffffffffffffffffffffffffffffffff16906367b42645906200080f9060029060040162010076565b602060405180830381865afa1580156200082d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008539190620100a9565b6003546040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80841660048301529293506000929091169063f67c5bd090602401602060405180830381865afa158015620008ca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008f09190620100d0565b6000546005546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015292935062010000909104169063ca669fa790602401600060405180830381600087803b1580156200096957600080fd5b505af11580156200097e573d6000803e3d6000fd5b50506003546040517fa366f4960000000000000000000000000000000000000000000000000000000081526004810185905273ffffffffffffffffffffffffffffffffffffffff909116925063a366f4969150602401600060405180830381600087803b158015620009ef57600080fd5b505af115801562000a04573d6000803e3d6000fd5b5050600080546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600160048201526024810183905260448101839052606481019290925262010000900473ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b15801562000a9057600080fd5b505af115801562000aa5573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff851692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a26000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b15801562000b6f57600080fd5b505af115801562000b84573d6000803e3d6000fd5b50506005546040517fb53472ef00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152909116925063b53472ef9150602401600060405180830381600087803b15801562000bf657600080fd5b505af115801562000c0b573d6000803e3d6000fd5b5050505062000ce5600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000c81573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ca79190620100d0565b60006040518060400160405280601881526020017f496e636f727265637420666f7262696464656e206d61736b00000000000000008152506200f747565b5050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166354cae56e6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562000d5457600080fd5b505af115801562000d69573d6000803e3d6000fd5b50505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000ddb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e019190620100a9565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169182178155604080517fcff0ab9600000000000000000000000000000000000000000000000000000000815290516000939263cff0ab96928082019260609290918290030181865afa15801562000e9b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ec191906201011c565b6000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291945062010000900473ffffffffffffffffffffffffffffffffffffffff16925063ca669fa79150602401600060405180830381600087803b15801562000f4a57600080fd5b505af115801562000f5f573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fe4eaca7f0000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b15801562000ff457600080fd5b505af115801562001009573d6000803e3d6000fd5b505060055473ffffffffffffffffffffffffffffffffffffffff16915063eb9606df90506200103a600184620101a2565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815264ffffffffff9091166004820152602401600060405180830381600087803b1580156200109257600080fd5b505af1158015620010a7573d6000803e3d6000fd5b505060005462010000900473ffffffffffffffffffffffffffffffffffffffff16915063e5d6bf029050620010de42600a620101cb565b6040518263ffffffff1660e01b8152600401620010fd91815260200190565b600060405180830381600087803b1580156200111857600080fd5b505af11580156200112d573d6000803e3d6000fd5b50506000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063ca669fa79150602401600060405180830381600087803b158015620011b657600080fd5b505af1158015620011cb573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fe4eaca7f0000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b1580156200126057600080fd5b505af115801562001275573d6000803e3d6000fd5b505060055473ffffffffffffffffffffffffffffffffffffffff16915063eb9606df9050620012a6836001620101e6565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815264ffffffffff9091166004820152602401600060405180830381600087803b158015620012fe57600080fd5b505af115801562001313573d6000803e3d6000fd5b505050506000426001620013289190620101cb565b600080546040517f491cc7c200000000000000000000000000000000000000000000000000000000815260048101839052602481018390526044810192909252600160648301529192506201000090910473ffffffffffffffffffffffffffffffffffffffff169063491cc7c290608401600060405180830381600087803b158015620013b457600080fd5b505af1158015620013c9573d6000803e3d6000fd5b505060405164ffffffffff841681527f0b3eb35ba750e7a7e4d26c9eee3d226f4e1f68c5568f4a3d051c94b241b02ac09250602001905060405180910390a16000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b1580156200148d57600080fd5b505af1158015620014a2573d6000803e3d6000fd5b50506005546040517feb9606df00000000000000000000000000000000000000000000000000000000815264ffffffffff8516600482015273ffffffffffffffffffffffffffffffffffffffff909116925063eb9606df9150602401600060405180830381600087803b1580156200151957600080fd5b505af11580156200152e573d6000803e3d6000fd5b505060048054604080517fcff0ab96000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff909216945063cff0ab96935080830192606092918290030181865afa158015620015a0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620015c691906201011c565b60408051808201909152601c81527f496e636f7272656374206e65772065787069726174696f6e4461746500000000602082015290945062000ce5925064ffffffffff80861692508416906200f747565b8151602080840191909120604080517fff00000000000000000000000000000000000000000000000000000000000000818501523060601b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660218201526035810185905260558082019390935281518082039093018352607501905280519101205b92915050565b6000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16906306447d5690602401600060405180830381600087803b1580156200172657600080fd5b505af11580156200173b573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb2335f2e0000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b158015620017d057600080fd5b505af1158015620017e5573d6000803e3d6000fd5b50506005546040517f7bccacee0000000000000000000000000000000000000000000000000000000081526000600482015230602482015273ffffffffffffffffffffffffffffffffffffffff9091169250637bccacee9150604401600060405180830381600087803b1580156200185c57600080fd5b505af115801562001871573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb2335f2e0000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b1580156200190657600080fd5b505af11580156200191b573d6000803e3d6000fd5b50506005546040517f7bccacee0000000000000000000000000000000000000000000000000000000081523060048201526000602482015273ffffffffffffffffffffffffffffffffffffffff9091169250637bccacee9150604401600060405180830381600087803b1580156200199257600080fd5b505af1158015620019a7573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb2335f2e0000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b15801562001a3c57600080fd5b505af115801562001a51573d6000803e3d6000fd5b50506005546040517f52438e540000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff90911692506352438e5491506024015b600060405180830381600087803b15801562001ac357600080fd5b505af115801562001ad8573d6000803e3d6000fd5b50505050600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562001b4757600080fd5b505af115801562001b5c573d6000803e3d6000fd5b50505050565b60405162001b70906200fe87565b604051809103906000f08015801562001b8d573d6000803e3d6000fd5b50600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216918217905563b36ba20862001bec670de0b6b3a7640000606462010212565b6040518263ffffffff1660e01b81526004016000604051808303818588803b15801562001c1857600080fd5b505af115801562001c2d573d6000803e3d6000fd5b50506001805460405173ffffffffffffffffffffffffffffffffffffffff909116945090925062001c5f91506200fe95565b62001c6c92919062010252565b604051809103906000f08015801562001c89573d6000803e3d6000fd5b50600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169182179055604080517f6f307dc30000000000000000000000000000000000000000000000000000000081529051636f307dc3916004808201926020929091908290030181865afa15801562001d23573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001d499190620100a9565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600254604080517fc12c21c00000000000000000000000000000000000000000000000000000000081529051919092169163c12c21c09160048083019260209291908290030181865afa15801562001de6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001e0c9190620100a9565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600254604080517f2f7a188100000000000000000000000000000000000000000000000000000000815290519190921691632f7a18819160048083019260209291908290030181865afa15801562001ea9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001ecf9190620100a9565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316178155600254604080517ff9aa028a0000000000000000000000000000000000000000000000000000000081529051919093169263f9aa028a92818101926020929091908290030181865afa15801562001f6b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001f919190620100a9565b600580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905560405162001fe4906200fea4565b604051809103906000f08015801562002001573d6000803e3d6000fd5b50600a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283169081179091556003546040519216916200205a906200feb2565b73ffffffffffffffffffffffffffffffffffffffff928316815291166020820152604001604051809103906000f0801580156200209b573d6000803e3d6000fd5b50600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600a5460405130929190911690620020f5906200feb2565b73ffffffffffffffffffffffffffffffffffffffff928316815291166020820152604001604051809103906000f08015801562002136573d6000803e3d6000fd5b50600880547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff9384161790915560075460098054919093169116179055565b6000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b1580156200221257600080fd5b505af115801562002227573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb2335f2e0000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b158015620022bc57600080fd5b505af1158015620022d1573d6000803e3d6000fd5b50506005546040517ffb1bd8c40000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff909116925063fb1bd8c49150602401600060405180830381600087803b1580156200234257600080fd5b505af115801562002357573d6000803e3d6000fd5b5050600080546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526024810183905260448101929092526001606483015262010000900473ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b158015620023e357600080fd5b505af1158015620023f8573d6000803e3d6000fd5b505060405173c4375b7de8af5a38a93548eb8453a498222c4ff281527fdac9a7995cbc0c0f01d78970fb6fd0b52fe0fe869eb6635e65cc1b5682b8325c9250602001905060405180910390a16000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b158015620024c957600080fd5b505af1158015620024de573d6000803e3d6000fd5b50506005546040517ffb1bd8c400000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff2600482015273ffffffffffffffffffffffffffffffffffffffff909116925063fb1bd8c49150602401600060405180830381600087803b1580156200256257600080fd5b505af115801562002577573d6000803e3d6000fd5b5050600480546040517f79c0ef91000000000000000000000000000000000000000000000000000000008152600092810183905291935073ffffffffffffffffffffffffffffffffffffffff1691506379c0ef9190602401602060405180830381865afa158015620025ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620026139190620100a9565b90506200266b8173c4375b7de8af5a38a93548eb8453a498222c4ff26040518060400160405280601481526020017f436f6e747261637420776173206e6f74207365740000000000000000000000008152506200f794565b50565b60035460095460405160009273ffffffffffffffffffffffffffffffffffffffff908116921690620026a0906200feb2565b73ffffffffffffffffffffffffffffffffffffffff928316815291166020820152604001604051809103906000f080158015620026e1573d6000803e3d6000fd5b506000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291925062010000900473ffffffffffffffffffffffffffffffffffffffff16906306447d5690602401600060405180830381600087803b1580156200276957600080fd5b505af11580156200277e573d6000803e3d6000fd5b50506005546009546007546040517f7bccacee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283166004820152908216602482015291169250637bccacee9150604401600060405180830381600087803b158015620027fd57600080fd5b505af115801562002812573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f21ff1e710000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b158015620028a757600080fd5b505af1158015620028bc573d6000803e3d6000fd5b50506005546009546040517f7bccacee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152858216602482015291169250637bccacee9150604401600060405180830381600087803b1580156200293857600080fd5b505af11580156200294d573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f21ff1e710000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b158015620029e257600080fd5b505af1158015620029f7573d6000803e3d6000fd5b50506005546008546007546040517f7bccacee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283166004820152908216602482015291169250637bccacee91506044015b600060405180830381600087803b15801562002a7757600080fd5b505af115801562002a8c573d6000803e3d6000fd5b50505050600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562002afb57600080fd5b505af115801562002b10573d6000803e3d6000fd5b5050505050565b6000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b15801562002b9c57600080fd5b505af115801562002bb1573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb2335f2e0000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b15801562002c4657600080fd5b505af115801562002c5b573d6000803e3d6000fd5b50506005546040517fe6492d7b0000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff909116925063e6492d7b9150602401600060405180830381600087803b15801562002ccc57600080fd5b505af115801562002ce1573d6000803e3d6000fd5b50506000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063ca669fa79150602401600060405180830381600087803b15801562002d6a57600080fd5b505af115801562002d7f573d6000803e3d6000fd5b50506005546040517ffb1bd8c400000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff2600482015273ffffffffffffffffffffffffffffffffffffffff909116925063fb1bd8c49150602401600060405180830381600087803b15801562002e0357600080fd5b505af115801562002e18573d6000803e3d6000fd5b5050600080546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526024810183905260448101929092526001606483015262010000900473ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b15801562002ea457600080fd5b505af115801562002eb9573d6000803e3d6000fd5b505060405173c4375b7de8af5a38a93548eb8453a498222c4ff281527f32e53e2e527af8518ae889e5f7e674bc83f7cf68e4cc059aceeaa0e64208b85b9250602001905060405180910390a16000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b15801562002f8a57600080fd5b505af115801562002f9f573d6000803e3d6000fd5b50506005546040517fe6492d7b00000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff2600482015273ffffffffffffffffffffffffffffffffffffffff909116925063e6492d7b9150602401600060405180830381600087803b1580156200302357600080fd5b505af115801562003038573d6000803e3d6000fd5b505050506000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639be0536a6040518163ffffffff1660e01b8152600401600060405180830381865afa158015620030ac573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620030f491908101906201027e565b90506200266b815160006040518060400160405280601881526020017f436f6e747261637420776173206e6f742072656d6f76656400000000000000008152506200f747565b600080546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600160048201526024810183905260448101839052606481019290925262010000900473ffffffffffffffffffffffffffffffffffffffff169063491cc7c290608401600060405180830381600087803b158015620031c257600080fd5b505af1158015620031d7573d6000803e3d6000fd5b505060095460405173ffffffffffffffffffffffffffffffffffffffff90911692507f5a0b7d0f9c24b39256e112a0584b4c5ce38d8f1dee2e7c56f15b852604cdc8869150600090a26000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b158015620032a557600080fd5b505af1158015620032ba573d6000803e3d6000fd5b50506005546009546040517f456e074200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529116925063456e07429150602401600060405180830381600087803b1580156200332e57600080fd5b505af115801562003343573d6000803e3d6000fd5b50505050620033fe600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620033b9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620033df9190620100a9565b60095473ffffffffffffffffffffffffffffffffffffffff166200f808565b565b600554604080517f50e036ff000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff16916350e036ff9160048083019260209291908290030181865afa15801562003471573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620034979190620100d0565b6000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291925062010000900473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b1580156200351e57600080fd5b505af115801562003533573d6000803e3d6000fd5b5050600080546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600160048201819052602482015260448101839052606481019290925262010000900473ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b158015620035bf57600080fd5b505af1158015620035d4573d6000803e3d6000fd5b5050600754600a5460405173ffffffffffffffffffffffffffffffffffffffff9283169450911691507f4bcbefaef68b99503d502f5a6abe7bca2b183ab8ac55457013c77d084ebd130590600090a360005b818110156200373857600a546005546040517f5094cb4f00000000000000000000000000000000000000000000000000000000815260006004820152620037239273ffffffffffffffffffffffffffffffffffffffff908116921690635094cb4f90602401602060405180830381865afa158015620036a9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620036cf9190620100a9565b73ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280601681526020017f436f6e747261637420616c7265616479206164646564000000000000000000008152506200f946565b806200372f816201033d565b91505062003626565b50600554600a546007546040517f7bccacee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201529082166024820152911690637bccacee90604401600060405180830381600087803b158015620037b457600080fd5b505af1158015620037c9573d6000803e3d6000fd5b50506003546007546040517fff68754300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152620038c194509116915063ff68754390602401602060405180830381865afa15801562003845573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200386b9190620100a9565b600a546040805180820190915260208082527f61646170746572546f436f6e7472616374207761736e277420756470617465649082015273ffffffffffffffffffffffffffffffffffffffff909116906200f794565b600354600a546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152620039b792919091169063fdd5764590602401602060405180830381865afa1580156200393b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620039619190620100a9565b6007546040805180820190915260208082527f636f6e7472616374546f41646170746572207761736e277420756470617465649082015273ffffffffffffffffffffffffffffffffffffffff909116906200f794565b600554604080517f50e036ff000000000000000000000000000000000000000000000000000000008152905162003a7d9273ffffffffffffffffffffffffffffffffffffffff16916350e036ff9160048083019260209291908290030181865afa15801562003a2a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003a509190620100d0565b62003a5d836001620101cb565b6040518060600160405280602181526020016205e3dd602191396200f747565b6000805b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562003aef573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003b159190620100d0565b81101562003c3257600a546005546040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff9283169290911690635094cb4f90602401602060405180830381865afa15801562003b94573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003bba9190620100a9565b73ffffffffffffffffffffffffffffffffffffffff16141562003bdc57505050565b62003c1d826040518060400160405280601b81526020017f54617267657420636f6e7472616374207761736e7420666f756e6400000000008152506200f946565b8062003c29816201033d565b91505062003a81565b505050565b6000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16906306447d5690602401600060405180830381600087803b15801562003cbc57600080fd5b505af115801562003cd1573d6000803e3d6000fd5b50506000546040805173c4375b7de8af5a38a93548eb8453a498222c4ff260248083019190915282518083039091018152604490910182526020810180517fdf4c572d000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff90911617905290517ff28dceb30000000000000000000000000000000000000000000000000000000081526201000090920473ffffffffffffffffffffffffffffffffffffffff16935063f28dceb3925062003dac91600401620103f4565b600060405180830381600087803b15801562003dc757600080fd5b505af115801562003ddc573d6000803e3d6000fd5b50506005546040517f7bccacee00000000000000000000000000000000000000000000000000000000815230600482015273c4375b7de8af5a38a93548eb8453a498222c4ff2602482015273ffffffffffffffffffffffffffffffffffffffff9091169250637bccacee9150604401600060405180830381600087803b15801562003e6657600080fd5b505af115801562003e7b573d6000803e3d6000fd5b50506000546040805173c4375b7de8af5a38a93548eb8453a498222c4ff260248083019190915282518083039091018152604490910182526020810180517fdf4c572d000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff90911617905290517ff28dceb30000000000000000000000000000000000000000000000000000000081526201000090920473ffffffffffffffffffffffffffffffffffffffff16935063f28dceb3925062003f5691600401620103f4565b600060405180830381600087803b15801562003f7157600080fd5b505af115801562003f86573d6000803e3d6000fd5b50506005546040517f7bccacee00000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff2600482015230602482015273ffffffffffffffffffffffffffffffffffffffff9091169250637bccacee915060440162001aa8565b6001546040517f67b4264500000000000000000000000000000000000000000000000000000000815260009173ffffffffffffffffffffffffffffffffffffffff16906367b4264590620040559060029060040162010076565b602060405180830381865afa15801562004073573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620040999190620100a9565b6003546040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80841660048301529293506000929091169063f67c5bd090602401602060405180830381865afa15801562004110573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620041369190620100d0565b6000546005546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015292935062010000909104169063ca669fa790602401600060405180830381600087803b158015620041af57600080fd5b505af1158015620041c4573d6000803e3d6000fd5b50506003546040517fa366f4960000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff909116925063a366f4969150602401600060405180830381600087803b1580156200423557600080fd5b505af11580156200424a573d6000803e3d6000fd5b5050600080546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600160048201526024810183905260448101839052606481019290925262010000900473ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b158015620042d657600080fd5b505af1158015620042eb573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff851692507ff17b849746e74d7186170c9553d4bbf60b4f8bb1ed81fe50c099b934fb078f059150600090a26000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b158015620043b557600080fd5b505af1158015620043ca573d6000803e3d6000fd5b50506005546040517f2414770800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301529091169250632414770891506024015b600060405180830381600087803b1580156200443d57600080fd5b505af115801562004452573d6000803e3d6000fd5b5050505062000ce5600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015620044c8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620044ee9190620100d0565b826040518060400160405280601881526020017f496e636f727265637420666f7262696464656e206d61736b00000000000000008152506200f747565b6000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16906306447d5690602401600060405180830381600087803b158015620045b057600080fd5b505af1158015620045c5573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb2335f2e0000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b1580156200465a57600080fd5b505af11580156200466f573d6000803e3d6000fd5b50506005546040517f526a41e8000000000000000000000000000000000000000000000000000000008152600060048201819052602482015273ffffffffffffffffffffffffffffffffffffffff909116925063526a41e89150604401600060405180830381600087803b158015620046e757600080fd5b505af1158015620046fc573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb2335f2e0000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b1580156200479157600080fd5b505af1158015620047a6573d6000803e3d6000fd5b50506005546040517f456e07420000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff909116925063456e07429150602401600060405180830381600087803b1580156200481757600080fd5b505af11580156200482c573d6000803e3d6000fd5b50506000546040805173c4375b7de8af5a38a93548eb8453a498222c4ff260248083019190915282518083039091018152604490910182526020810180517fdf4c572d000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff90911617905290517ff28dceb30000000000000000000000000000000000000000000000000000000081526201000090920473ffffffffffffffffffffffffffffffffffffffff16935063f28dceb392506200490791600401620103f4565b600060405180830381600087803b1580156200492257600080fd5b505af115801562004937573d6000803e3d6000fd5b50506005546040517f526a41e800000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff260048201526000602482015273ffffffffffffffffffffffffffffffffffffffff909116925063526a41e89150604401600060405180830381600087803b158015620049c257600080fd5b505af1158015620049d7573d6000803e3d6000fd5b50506000546040805173c4375b7de8af5a38a93548eb8453a498222c4ff260248083019190915282518083039091018152604490910182526020810180517fdf4c572d000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff90911617905290517ff28dceb30000000000000000000000000000000000000000000000000000000081526201000090920473ffffffffffffffffffffffffffffffffffffffff16935063f28dceb3925062004ab291600401620103f4565b600060405180830381600087803b15801562004acd57600080fd5b505af115801562004ae2573d6000803e3d6000fd5b50506005546040517f456e074200000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff2600482015273ffffffffffffffffffffffffffffffffffffffff909116925063456e07429150602401600060405180830381600087803b15801562004b6657600080fd5b505af115801562004b7b573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fe9eddd170000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b15801562004c1057600080fd5b505af115801562004c25573d6000803e3d6000fd5b50506005546006546040517f526a41e800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152600060248201529116925063526a41e89150604401600060405180830381600087803b15801562004ca057600080fd5b505af115801562004cb5573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fe9eddd170000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b15801562004d4a57600080fd5b505af115801562004d5f573d6000803e3d6000fd5b50506005546006546040517f456e074200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529116925063456e07429150602401600060405180830381600087803b15801562004dd357600080fd5b505af115801562004de8573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fe9eddd170000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b15801562004e7d57600080fd5b505af115801562004e92573d6000803e3d6000fd5b50506005546008546040517f526a41e800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152600060248201529116925063526a41e89150604401600060405180830381600087803b15801562004f0d57600080fd5b505af115801562004f22573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fe9eddd170000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b15801562004fb757600080fd5b505af115801562004fcc573d6000803e3d6000fd5b50506005546008546040517f456e074200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529116925063456e074291506024015b600060405180830381600087803b15801562001b4757600080fd5b6001546040517f67b4264500000000000000000000000000000000000000000000000000000000815260009173ffffffffffffffffffffffffffffffffffffffff16906367b42645906200509b9060029060040162010076565b602060405180830381865afa158015620050b9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620050df9190620100a9565b90506000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa15801562005151573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620051779190620100d0565b6000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291925062010000900473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b158015620051fe57600080fd5b505af115801562005213573d6000803e3d6000fd5b50506005546040517fb53472ef00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152909116925063b53472ef915060240162004422565b600554604080517fc12c21c000000000000000000000000000000000000000000000000000000000815290516200535f9273ffffffffffffffffffffffffffffffffffffffff169163c12c21c09160048083019260209291908290030181865afa158015620052e3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620053099190620100a9565b60035460408051808201909152601781527f496e636f7272656374206372656469744d616e61676572000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff909116906200f794565b600554604080517f2f7a188100000000000000000000000000000000000000000000000000000000815290516200544e9273ffffffffffffffffffffffffffffffffffffffff1691632f7a18819160048083019260209291908290030181865afa158015620053d2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620053f89190620100a9565b60045460408051808201909152601681527f496e636f72726563742063726564697446616361646500000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff909116906200f794565b600554604080517f6f307dc30000000000000000000000000000000000000000000000000000000081529051620055b79273ffffffffffffffffffffffffffffffffffffffff1691636f307dc39160048083019260209291908290030181865afa158015620054c1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620054e79190620100a9565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa15801562005555573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200557b9190620100a9565b6040518060400160405280601481526020017f496e636f727265637420756e6465726c79696e670000000000000000000000008152506200f794565b600554604080517f2954018c0000000000000000000000000000000000000000000000000000000081529051620057209273ffffffffffffffffffffffffffffffffffffffff1691632954018c9160048083019260209291908290030181865afa1580156200562a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620056509190620100a9565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620056be573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620056e49190620100a9565b6040518060400160405280601981526020017f496e636f7272656374206164647265737350726f7669646572000000000000008152506200f794565b6000806000806000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639af1d35a6040518163ffffffff1660e01b815260040160a060405180830381865afa15801562005796573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620057bc91906201041c565b94509450945094509450620058128561ffff166103e861ffff166040518060400160405280601581526020017f496e636f727265637420666565496e74657265737400000000000000000000008152506200f747565b6200585d8461ffff1660c861ffff166040518060400160405280601881526020017f496e636f7272656374206665654c69717569646174696f6e00000000000000008152506200f747565b620058b661ffff8416620058766101f46127106201048c565b61ffff166040518060400160405280601d81526020017f496e636f7272656374206c69717569646174696f6e446973636f756e740000008152506200f747565b620059018261ffff16606461ffff166040518060400160405280601f81526020017f496e636f7272656374206665654c69717569646174696f6e45787069726564008152506200f747565b6200593d61ffff82166200591960c86127106201048c565b61ffff166040518060600160405280602481526020016205e4b6602491396200f747565b600554604080517f2954018c000000000000000000000000000000000000000000000000000000008152905162005aa69273ffffffffffffffffffffffffffffffffffffffff1691632954018c9160048083019260209291908290030181865afa158015620059b0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620059d69190620100a9565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562005a44573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005a6a9190620100a9565b6040518060400160405280601a81526020017f496e636f727265637420616464726573732070726f76696465720000000000008152506200f794565b6040805160e081018252600160a0820190815261245460c08301528152815180830183526002815261232860208281019190915280830191909152825180840184526005808252612260828401528385019190915283518085018552600380825261206c828501526060850191909152845180860186526004808252611c84828601526080860191909152905485517f458936f500000000000000000000000000000000000000000000000000000000815295519495929462005be99473ffffffffffffffffffffffffffffffffffffffff9092169363458936f5938181019392918290030181865afa15801562005ba2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005bc89190620100d0565b826040518060600160405280602481526020016205e467602491396200f747565b60005b8181101562005e0e576003546040517f172c48c700000000000000000000000000000000000000000000000000000000815260048101839052600091829173ffffffffffffffffffffffffffffffffffffffff9091169063172c48c7906024016040805180830381865afa15801562005c69573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005c8f9190620104aa565b600154919350915062005d8f90839073ffffffffffffffffffffffffffffffffffffffff166367b4264588876005811062005cce5762005cce620104e4565b6020020151516040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815262005d0f919060040162010076565b602060405180830381865afa15801562005d2d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005d539190620100a9565b6040518060400160405280601781526020017f496e636f727265637420746f6b656e20616464726573730000000000000000008152506200f794565b62005df68161ffff1686856005811062005dad5762005dad620104e4565b60200201516020015161ffff166040518060400160405280601f81526020017f496e636f7272656374206c69717569646174696f6e207468726573686f6c64008152506200f747565b5050808062005e05906201033d565b91505062005bec565b50600354604080517f2f7a1881000000000000000000000000000000000000000000000000000000008152905162005e829273ffffffffffffffffffffffffffffffffffffffff1691632f7a18819160048083019260209291908290030181865afa158015620053d2573d6000803e3d6000fd5b600354604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905162005feb9273ffffffffffffffffffffffffffffffffffffffff1691632630c12f9160048083019260209291908290030181865afa15801562005ef5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005f1b9190620100a9565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562005f89573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005faf9190620100a9565b6040518060400160405280601681526020017f496e636f727265637420637265646974466163616465000000000000000000008152506200f794565b60048054604080517f860aefcf0000000000000000000000000000000000000000000000000000000081528151600094859473ffffffffffffffffffffffffffffffffffffffff169363860aefcf93808301939192908290030181865afa1580156200605b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062006081919062010513565b915091506200617e826fffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630bc772da6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200610a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062006130919062010542565b6fffffffffffffffffffffffffffffffff166040518060400160405280601b81526020017f496e636f7272656374206d696e426f72726f776564416d6f756e7400000000008152506200f747565b62006277816fffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663621869056040518163ffffffff1660e01b8152600401602060405180830381865afa15801562006203573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062006229919062010542565b6fffffffffffffffffffffffffffffffff166040518060400160405280601b81526020017f496e636f7272656374206d6178426f72726f776564416d6f756e7400000000008152506200f747565b6000806000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015620062ea573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200631091906201011c565b92509250925062006400836fffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663621869056040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200639b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620063c1919062010542565b620063ce90600262010560565b6fffffffffffffffffffffffffffffffff166040518060600160405280602481526020016205e443602491396200f747565b6040805160608101909152602280825262006427918415916205e42160208301396200f946565b620064718164ffffffffff1660006040518060400160405280601981526020017f496e636f72726563742065787069726174696f6e2064617465000000000000008152506200f747565b505050505050505050505050565b6000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16906306447d5690602401600060405180830381600087803b1580156200650457600080fd5b505af115801562006519573d6000803e3d6000fd5b50505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200658b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620065b19190620100a9565b6040517f530e784f00000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff2600482015273ffffffffffffffffffffffffffffffffffffffff919091169063530e784f90602401600060405180830381600087803b1580156200662f57600080fd5b505af115801562006644573d6000803e3d6000fd5b5050600080546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600160048201526024810183905260448101839052606481019290925262010000900473ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b158015620066d057600080fd5b505af1158015620066e5573d6000803e3d6000fd5b505060405173c4375b7de8af5a38a93548eb8453a498222c4ff292507f3f82447be465b0b5a4a9e54c74d5f6ae73f2e9537f2cc1590a340524703d09619150600090a2600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f0527ac66040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200679357600080fd5b505af1158015620067a8573d6000803e3d6000fd5b505050506200685f600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200681e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620068449190620100a9565b73c4375b7de8af5a38a93548eb8453a498222c4ff26200f808565b600354604080517f2f7a18810000000000000000000000000000000000000000000000000000000081529051620069179273ffffffffffffffffffffffffffffffffffffffff1691632f7a18819160048083019260209291908290030181865afa158015620068d2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620068f89190620100a9565b60045473ffffffffffffffffffffffffffffffffffffffff166200f808565b600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562001b4757600080fd5b6000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16906306447d5690602401600060405180830381600087803b15801562006a0757600080fd5b505af115801562006a1c573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fe9eddd170000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b15801562006ab157600080fd5b505af115801562006ac6573d6000803e3d6000fd5b50506005546006546040517f7bccacee00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff918216602482015291169250637bccacee9150604401600060405180830381600087803b15801562006b4057600080fd5b505af115801562006b55573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fe9eddd170000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b15801562006bea57600080fd5b505af115801562006bff573d6000803e3d6000fd5b50506005546008546040517f7bccacee00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff918216602482015291169250637bccacee915060440162001aa8565b6000806000806000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639af1d35a6040518163ffffffff1660e01b815260040160a060405180830381865afa15801562006cda573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062006d0091906201041c565b94509450945094509450600085600262006d1b91906201059b565b9050600062006d2c8660026201059b565b9050600062006d3e866127106201048c565b62006d4b9060026201059b565b9050600062006d5c8660026201059b565b9050600062006d6e866127106201048c565b62006d7b9060026201059b565b600080546040517f491cc7c200000000000000000000000000000000000000000000000000000000815260048101839052602481018390526044810192909252600160648301529192506201000090910473ffffffffffffffffffffffffffffffffffffffff169063491cc7c290608401600060405180830381600087803b15801562006e0757600080fd5b505af115801562006e1c573d6000803e3d6000fd5b50506040805161ffff898116825288811660208301528781168284015286811660608301528516608082015290517f2214a403d5f8d049e52eacca974c6dea01a471e41d6a18903bfaf7dbc709741f93509081900360a0019150a16000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b15801562006efc57600080fd5b505af115801562006f11573d6000803e3d6000fd5b50506005546040517ff206d32a00000000000000000000000000000000000000000000000000000000815261ffff808a1660048301528089166024830152808816604483015280871660648301528516608482015273ffffffffffffffffffffffffffffffffffffffff909116925063f206d32a915060a401600060405180830381600087803b15801562006fa557600080fd5b505af115801562006fba573d6000803e3d6000fd5b5050505062006fe985858561271062006fd491906201048c565b8562006fe3866127106201048c565b6200f990565b50505050505050505050565b6000546040517f06447d5600000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16906306447d5690602401600060405180830381600087803b1580156200707a57600080fd5b505af11580156200708f573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f61081c150000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b1580156200712457600080fd5b505af115801562007139573d6000803e3d6000fd5b50506005546040517f3e7c88d600000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff260048201526001602482015273ffffffffffffffffffffffffffffffffffffffff9091169250633e7c88d69150604401600060405180830381600087803b158015620071c457600080fd5b505af1158015620071d9573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f61081c150000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b1580156200726e57600080fd5b505af115801562007283573d6000803e3d6000fd5b50506005546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff260048201526000602482015273ffffffffffffffffffffffffffffffffffffffff909116925063a70bc5429150604401600060405180830381600087803b1580156200730e57600080fd5b505af115801562007323573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f61081c150000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b158015620073b857600080fd5b505af1158015620073cd573d6000803e3d6000fd5b50506005546040517fb53472ef00000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff2600482015273ffffffffffffffffffffffffffffffffffffffff909116925063b53472ef9150602401600060405180830381600087803b1580156200745157600080fd5b505af115801562007466573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f61081c150000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b158015620074fb57600080fd5b505af115801562007510573d6000803e3d6000fd5b50506005546040517f2414770800000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff2600482015273ffffffffffffffffffffffffffffffffffffffff909116925063241477089150602401600060405180830381600087803b1580156200759457600080fd5b505af1158015620075a9573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f61081c150000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b1580156200763e57600080fd5b505af115801562007653573d6000803e3d6000fd5b50506005546040517f7bccacee00000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff260048201819052602482015273ffffffffffffffffffffffffffffffffffffffff9091169250637bccacee9150604401600060405180830381600087803b158015620076de57600080fd5b505af1158015620076f3573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f61081c150000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b1580156200778857600080fd5b505af11580156200779d573d6000803e3d6000fd5b50506005546040517f52438e5400000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff2600482015273ffffffffffffffffffffffffffffffffffffffff90911692506352438e549150602401600060405180830381600087803b1580156200782157600080fd5b505af115801562007836573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f61081c150000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b158015620078cb57600080fd5b505af1158015620078e0573d6000803e3d6000fd5b50506005546040517f9f1c5069000000000000000000000000000000000000000000000000000000008152600060048201819052602482015273ffffffffffffffffffffffffffffffffffffffff9091169250639f1c50699150604401600060405180830381600087803b1580156200795857600080fd5b505af11580156200796d573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f61081c150000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b15801562007a0257600080fd5b505af115801562007a17573d6000803e3d6000fd5b50506005546040517ff206d32a000000000000000000000000000000000000000000000000000000008152600060048201819052602482018190526044820181905260648201819052608482015273ffffffffffffffffffffffffffffffffffffffff909116925063f206d32a915060a401600060405180830381600087803b15801562007aa457600080fd5b505af115801562007ab9573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f61081c150000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b15801562007b4e57600080fd5b505af115801562007b63573d6000803e3d6000fd5b50505050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f0527ac66040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562007bd257600080fd5b505af115801562007be7573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f61081c150000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b15801562007c7c57600080fd5b505af115801562007c91573d6000803e3d6000fd5b50506005546040517f526a41e800000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff260048201526000602482015273ffffffffffffffffffffffffffffffffffffffff909116925063526a41e89150604401600060405180830381600087803b15801562007d1c57600080fd5b505af115801562007d31573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f61081c150000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b15801562007dc657600080fd5b505af115801562007ddb573d6000803e3d6000fd5b50506005546040517f456e074200000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff2600482015273ffffffffffffffffffffffffffffffffffffffff909116925063456e07429150602401600060405180830381600087803b15801562007e5f57600080fd5b505af115801562007e74573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f61081c150000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b15801562007f0957600080fd5b505af115801562007f1e573d6000803e3d6000fd5b50506005546040517fffd9b9070000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ffd9b9079150602401600060405180830381600087803b15801562007f8f57600080fd5b505af115801562007fa4573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f61081c150000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b1580156200803957600080fd5b505af11580156200804e573d6000803e3d6000fd5b50506005546040517f9c55a0540000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff9091169250639c55a054915060240162001aa8565b6000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16906306447d5690602401600060405180830381600087803b1580156200812f57600080fd5b505af115801562008144573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f3b899cf90000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b158015620081d957600080fd5b505af1158015620081ee573d6000803e3d6000fd5b50506005546006546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152600160248201529116925063a70bc5429150604401600060405180830381600087803b1580156200826957600080fd5b505af11580156200827e573d6000803e3d6000fd5b50506001546040517f67b426450000000000000000000000000000000000000000000000000000000081526000935073ffffffffffffffffffffffffffffffffffffffff90911691506367b4264590620082de9060029060040162010076565b602060405180830381865afa158015620082fc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620083229190620100a9565b6000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f33c6608d00000000000000000000000000000000000000000000000000000000600482015291925062010000900473ffffffffffffffffffffffffffffffffffffffff169063c31eb0e090602401600060405180830381600087803b158015620083b557600080fd5b505af1158015620083ca573d6000803e3d6000fd5b50506005546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260006024830152909116925063a70bc5429150604401600060405180830381600087803b1580156200844357600080fd5b505af115801562008458573d6000803e3d6000fd5b50506003546006546040517f7832743800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526000945091169150637832743890602401602060405180830381865afa158015620084d2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620084f89190620105bf565b6000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f33c6608d00000000000000000000000000000000000000000000000000000000600482015291925062010000900473ffffffffffffffffffffffffffffffffffffffff169063c31eb0e090602401600060405180830381600087803b1580156200858b57600080fd5b505af1158015620085a0573d6000803e3d6000fd5b505060055473ffffffffffffffffffffffffffffffffffffffff16915063a70bc542905083620085d2846001620105dd565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015261ffff166024820152604401600060405180830381600087803b1580156200864257600080fd5b505af115801562008657573d6000803e3d6000fd5b50505050600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620086c657600080fd5b505af1158015620086db573d6000803e3d6000fd5b505050505050565b604080516001808252818301909252600091816020015b6040805180820190915260008082526020820152815260200190600190039081620086fa57505060408051808201918290526001547f67b4264500000000000000000000000000000000000000000000000000000000909252919250819073ffffffffffffffffffffffffffffffffffffffff166367b426456200878360026044850162010076565b602060405180830381865afa158015620087a1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620087c79190620100a9565b73ffffffffffffffffffffffffffffffffffffffff16815260200161177061ffff1681525081600081518110620088025762008802620104e4565b602002602001018190525060006040518060a00160405280670de0b6b3a7640000603262008831919062010212565b6fffffffffffffffffffffffffffffffff1681526020016200885f670de0b6b3a7640000620249f062010212565b6fffffffffffffffffffffffffffffffff16815260208082018590526000604080840182905260609093015260025482517f6b70b04c000000000000000000000000000000000000000000000000000000008152925193945073ffffffffffffffffffffffffffffffffffffffff1692636b70b04c9260048082019392918290030181865afa158015620088f7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200891d9190620100a9565b6040516200892b906200fec0565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103906000f08015801562008965573d6000803e3d6000fd5b50600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216918217905560608201516080830151604051620089c2906200fece565b73ffffffffffffffffffffffffffffffffffffffff938416815292909116602083015215156040820152606001604051809103906000f08015801562008a0c573d6000803e3d6000fd5b50600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316178155600354604080517f2630c12f00000000000000000000000000000000000000000000000000000000815290516000949290921692632630c12f9282820192602092908290030181865afa15801562008aaa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062008ad09190620100a9565b6001546040517f67b4264500000000000000000000000000000000000000000000000000000000815291925060009173ffffffffffffffffffffffffffffffffffffffff909116906367b426459062008b2f9060029060040162010076565b602060405180830381865afa15801562008b4d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062008b739190620100a9565b905060006040518060200162008b89906200fedc565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082820381018352601f90910116604081905260035460045462008bf09273ffffffffffffffffffffffffffffffffffffffff9283169291909116908890602001620105fd565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905262008c2e9291602001620106e6565b6040516020818303038152906040529050600062008c4e82600062001617565b6003546040517f9f5f86ae00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8084166004830152929350911690639f5f86ae90602401600060405180830381600087803b15801562008cbe57600080fd5b505af115801562008cd3573d6000803e3d6000fd5b5050600080546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600160048201819052602482018490526044820193909352606481019290925262010000900473ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b15801562008d6257600080fd5b505af115801562008d77573d6000803e3d6000fd5b5050600654604051612454815273ffffffffffffffffffffffffffffffffffffffff90911692507f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650915060200160405180910390a2600080546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526024810183905260448101839052606481019290925262010000900473ffffffffffffffffffffffffffffffffffffffff169063491cc7c290608401600060405180830381600087803b15801562008e5457600080fd5b505af115801562008e69573d6000803e3d6000fd5b5050604080516103e8815260c8602082018190526101f48284015260646060830152608082015290517f2214a403d5f8d049e52eacca974c6dea01a471e41d6a18903bfaf7dbc709741f93509081900360a0019150a1600080546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600160048201526024810183905260448101839052606481019290925262010000900473ffffffffffffffffffffffffffffffffffffffff169063491cc7c290608401600060405180830381600087803b15801562008f4757600080fd5b505af115801562008f5c573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a2600080546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600160048201819052602482018490526044820193909352606481019290925262010000900473ffffffffffffffffffffffffffffffffffffffff169063491cc7c290608401600060405180830381600087803b1580156200902c57600080fd5b505af115801562009041573d6000803e3d6000fd5b5050604051611770815273ffffffffffffffffffffffffffffffffffffffff861692507f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650915060200160405180910390a2600080546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600160048201526024810183905260448101839052606481019290925262010000900473ffffffffffffffffffffffffffffffffffffffff169063491cc7c290608401600060405180830381600087803b1580156200911a57600080fd5b505af11580156200912f573d6000803e3d6000fd5b505060045460405173ffffffffffffffffffffffffffffffffffffffff90911692507fa8b21f72cb83bce808df32dc2330217d744a1c22f3e9e44e4b11bbf049d37d9d9150600090a2600080546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600160048201526024810183905260448101839052606481019290925262010000900473ffffffffffffffffffffffffffffffffffffffff169063491cc7c290608401600060405180830381600087803b1580156200920057600080fd5b505af115801562009215573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff871692507f3f82447be465b0b5a4a9e54c74d5f6ae73f2e9537f2cc1590a340524703d09619150600090a2600080546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526024810183905260448101929092526001606483015262010000900473ffffffffffffffffffffffffffffffffffffffff169063491cc7c290608401600060405180830381600087803b158015620092e257600080fd5b505af1158015620092f7573d6000803e3d6000fd5b507fa030eec20ae970821387224ec3bb15b4bd22b89bfb86dc4d2b3827aa3d99e48d925060029150620093389050670de0b6b3a7640000620249f062010212565b62009344919062010212565b6040516fffffffffffffffffffffffffffffffff909116815260200160405180910390a1600080546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526024810183905260448101929092526001606483015262010000900473ffffffffffffffffffffffffffffffffffffffff169063491cc7c290608401600060405180830381600087803b158015620093f057600080fd5b505af115801562009405573d6000803e3d6000fd5b505050507f4d4981437d0211f9e6843eb024d9ada1fa3a99514d4343d4aece106dd11524bb670de0b6b3a7640000603262009441919062010212565b62009458670de0b6b3a7640000620249f062010212565b604080516fffffffffffffffffffffffffffffffff93841681529290911660208301520160405180910390a1620086db8260006200a338565b60048054604080517f860aefcf0000000000000000000000000000000000000000000000000000000081528151600094859473ffffffffffffffffffffffffffffffffffffffff169363860aefcf93808301939192908290030181865afa15801562009501573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062009527919062010513565b6000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f9aadd6f000000000000000000000000000000000000000000000000000000000600482015292945090925062010000900473ffffffffffffffffffffffffffffffffffffffff169063c31eb0e090602401600060405180830381600087803b158015620095bd57600080fd5b505af1158015620095d2573d6000803e3d6000fd5b50506000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063ca669fa79150602401600060405180830381600087803b1580156200965b57600080fd5b505af115801562009670573d6000803e3d6000fd5b50506005546040517f9f1c50690000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff80861660048301528616602482015273ffffffffffffffffffffffffffffffffffffffff9091169250639f1c50699150604401600060405180830381600087803b158015620096fa57600080fd5b505af11580156200970f573d6000803e3d6000fd5b505050506000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801562009783573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620097a991906201011c565b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f9aadd6f000000000000000000000000000000000000000000000000000000000600482015291925062010000900473ffffffffffffffffffffffffffffffffffffffff169063c31eb0e090602401600060405180830381600087803b1580156200983e57600080fd5b505af115801562009853573d6000803e3d6000fd5b50506000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063ca669fa79150602401600060405180830381600087803b158015620098dc57600080fd5b505af1158015620098f1573d6000803e3d6000fd5b505060055473ffffffffffffffffffffffffffffffffffffffff169150639f1c50699050846200992384600162010710565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526fffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156200998d57600080fd5b505af1158015620099a2573d6000803e3d6000fd5b50505050505050565b6001546040517f67b4264500000000000000000000000000000000000000000000000000000000815260009173ffffffffffffffffffffffffffffffffffffffff16906367b426459062009a059060029060040162010076565b602060405180830381865afa15801562009a23573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062009a499190620100a9565b6003546040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80841660048301529293506000929091169063f67c5bd090602401602060405180830381865afa15801562009ac0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062009ae69190620100d0565b6000546005546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015292935062010000909104169063ca669fa790602401600060405180830381600087803b15801562009b5f57600080fd5b505af115801562009b74573d6000803e3d6000fd5b50506003546040517fa366f4960000000000000000000000000000000000000000000000000000000081526004810185905273ffffffffffffffffffffffffffffffffffffffff909116925063a366f4969150602401600060405180830381600087803b15801562009be557600080fd5b505af115801562009bfa573d6000803e3d6000fd5b505050506000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa15801562009c6e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062009c949190620100d0565b6000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291925062010000900473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b15801562009d1b57600080fd5b505af115801562009d30573d6000803e3d6000fd5b50506005546040517f2414770800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152909116925063241477089150602401600060405180830381600087803b15801562009da257600080fd5b505af115801562009db7573d6000803e3d6000fd5b5050505062003c32600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015620044c8573d6000803e3d6000fd5b60005b60028110156200266b5780151560005b60028110156200a3205780151562009e5762001b62565b6000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b15801562009edc57600080fd5b505af115801562009ef1573d6000803e3d6000fd5b50506005546040517fffd9b907000000000000000000000000000000000000000000000000000000008152841515600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ffd9b9079150602401600060405180830381600087803b15801562009f6357600080fd5b505af115801562009f78573d6000803e3d6000fd5b505050506000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801562009fec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200a01291906201011c565b50915050831515811515146200a10057600080546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526024810183905260448101929092526001606483015262010000900473ffffffffffffffffffffffffffffffffffffffff169063491cc7c290608401600060405180830381600087803b1580156200a0aa57600080fd5b505af11580156200a0bf573d6000803e3d6000fd5b505050507ff97ba903470ff3262b4a68a938fe81def401bac1bd742169d2e8d5c4ed2185d3846040516200a0f7911515815260200190565b60405180910390a15b6000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b1580156200a18557600080fd5b505af11580156200a19a573d6000803e3d6000fd5b50506005546040517fffd9b907000000000000000000000000000000000000000000000000000000008152871515600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ffd9b9079150602401600060405180830381600087803b1580156200a20c57600080fd5b505af11580156200a221573d6000803e3d6000fd5b505060048054604080517fcff0ab96000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff909216945063cff0ab96935080830192606092918290030181865afa1580156200a293573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200a2b991906201011c565b90915050809150506200a308841515821515146040518060400160405280602081526020017f496e636f7272656374206973496e63726561736544656274466f62696464656e8152506200f946565b505080806200a317906201033d565b91505062009e40565b505080806200a32f906201033d565b91505062009e30565b60008183516020850134f59050803b62003c3257600080fd5b6000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16906306447d5690602401600060405180830381600087803b1580156200a3d657600080fd5b505af11580156200a3eb573d6000803e3d6000fd5b50506005546009546007546040517f7bccacee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283166004820152908216602482015291169250637bccacee9150604401600060405180830381600087803b1580156200a46a57600080fd5b505af11580156200a47f573d6000803e3d6000fd5b505050506000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200a4f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200a5199190620100d0565b600080546040517f491cc7c200000000000000000000000000000000000000000000000000000000815260016004820152602481018390526044810183905260648101929092529192506201000090910473ffffffffffffffffffffffffffffffffffffffff169063491cc7c290608401600060405180830381600087803b1580156200a5a557600080fd5b505af11580156200a5ba573d6000803e3d6000fd5b505060095460405173ffffffffffffffffffffffffffffffffffffffff90911692507fab9f405bf0c19b97f65a7031634db41569cd2f0e0376a610a1e977f9ab22b58f9150600090a26005546009546040517f52438e5400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529116906352438e5490602401600060405180830381600087803b1580156200a67357600080fd5b505af11580156200a688573d6000803e3d6000fd5b50506003546007546040517fff68754300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526200a76894509116915063ff68754390602401602060405180830381865afa1580156200a704573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200a72a9190620100a9565b60006040518060400160405280601c81526020017f4372656469744d616e61676572207761736e27742075647061746564000000008152506200f794565b6003546009546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526200a84692919091169063fdd5764590602401602060405180830381865afa1580156200a7e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200a8089190620100a9565b60006040518060400160405280601b81526020017f437265646974466163616465207761736e2774207564706174656400000000008152506200f794565b600554604080517f50e036ff00000000000000000000000000000000000000000000000000000000815290516200a8ec9273ffffffffffffffffffffffffffffffffffffffff16916350e036ff9160048083019260209291908290030181865afa1580156200a8b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200a8df9190620100d0565b62003a5d6001846201073e565b600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562002afb57600080fd5b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa1580156200a9c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200a9ec919062010513565b6000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291935062010000900473ffffffffffffffffffffffffffffffffffffffff16915063ca669fa790602401600060405180830381600087803b1580156200aa7457600080fd5b505af11580156200aa89573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f9aadd6f00000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b1580156200ab1e57600080fd5b505af11580156200ab33573d6000803e3d6000fd5b505060055473ffffffffffffffffffffffffffffffffffffffff169150639c55a05490506200ab6460018462010758565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526fffffffffffffffffffffffffffffffff9091166004820152602401600060405180830381600087803b1580156200abc757600080fd5b505af11580156200abdc573d6000803e3d6000fd5b505050506000600a82600c6200abf3919062010560565b6200abff919062010784565b600080546040517f491cc7c200000000000000000000000000000000000000000000000000000000815260048101839052602481018390526044810192909252600160648301529192506201000090910473ffffffffffffffffffffffffffffffffffffffff169063491cc7c290608401600060405180830381600087803b1580156200ac8b57600080fd5b505af11580156200aca0573d6000803e3d6000fd5b50506040516fffffffffffffffffffffffffffffffff841681527fa030eec20ae970821387224ec3bb15b4bd22b89bfb86dc4d2b3827aa3d99e48d9250602001905060405180910390a16000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b1580156200ad6f57600080fd5b505af11580156200ad84573d6000803e3d6000fd5b50506005546040517f9c55a0540000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff8516600482015273ffffffffffffffffffffffffffffffffffffffff9091169250639c55a0549150602401600060405180830381600087803b1580156200ae0657600080fd5b505af11580156200ae1b573d6000803e3d6000fd5b505050506000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa1580156200ae8f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200aeb591906201011c565b5050905062003c32816fffffffffffffffffffffffffffffffff16836fffffffffffffffffffffffffffffffff166040518060400160405280601a81526020017f496e636f7272656374206e6577206c696d69747320626c6f636b0000000000008152506200f747565b600354604080517f458936f5000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163458936f59160048083019260209291908290030181865afa1580156200af90573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200afb69190620100d0565b6001546040517f67b4264500000000000000000000000000000000000000000000000000000000815291925060009173ffffffffffffffffffffffffffffffffffffffff909116906367b42645906200b0159060069060040162010076565b602060405180830381865afa1580156200b033573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200b0599190620100a9565b600080546040517f491cc7c200000000000000000000000000000000000000000000000000000000815260016004820152602481018390526044810183905260648101929092529192506201000090910473ffffffffffffffffffffffffffffffffffffffff169063491cc7c290608401600060405180830381600087803b1580156200b0e557600080fd5b505af11580156200b0fa573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a26000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b1580156200b1c457600080fd5b505af11580156200b1d9573d6000803e3d6000fd5b50506005546040517f3e7c88d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015261226060248301529091169250633e7c88d69150604401600060405180830381600087803b1580156200b25357600080fd5b505af11580156200b268573d6000803e3d6000fd5b505050506200b34d600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200b2de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200b3049190620100d0565b6200b311846001620101cb565b6040518060400160405280601681526020017f496e636f727265637420746f6b656e7320636f756e74000000000000000000008152506200f747565b6003546040517f172c48c70000000000000000000000000000000000000000000000000000000081526004810184905260009173ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa1580156200b3bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200b3e39190620104aa565b5090506200b42881836040518060400160405280601a81526020017f546f6b656e206973206e6f7420616464656420746f206c6973740000000000008152506200f794565b6003546040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526200b5039260009291169063f67c5bd090602401602060405180830381865afa1580156200b4a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200b4c69190620100d0565b116040518060400160405280601481526020017f496e636f727265637420746f6b656e206d61736b0000000000000000000000008152506200f946565b6003546040517f7832743800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015262003c32921690637832743890602401602060405180830381865afa1580156200b577573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200b59d9190620105bf565b61ffff166122606040518060400160405280601481526020017f5468726573686f6c64207761736e2774207365740000000000000000000000008152506200f747565b60005b60028110156200266b5780151560005b60028110156200c8695780151560005b60028110156200c851578015156200b61a62001b62565b82156200b94e5760035460405160009173ffffffffffffffffffffffffffffffffffffffff169082906001906200b651906200fece565b73ffffffffffffffffffffffffffffffffffffffff938416815292909116602083015215156040820152606001604051809103906000f0801580156200b69b573d6000803e3d6000fd5b506000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291925062010000900473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b1580156200b72357600080fd5b505af11580156200b738573d6000803e3d6000fd5b50506005546040517f526a41e800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301528615156024830152909116925063526a41e89150604401600060405180830381600087803b1580156200b7b257600080fd5b505af11580156200b7c7573d6000803e3d6000fd5b50506000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063ca669fa79150602401600060405180830381600087803b1580156200b85057600080fd5b505af11580156200b865573d6000803e3d6000fd5b505060055473ffffffffffffffffffffffffffffffffffffffff16915063eb9606df90506200b896426001620101cb565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815264ffffffffff9091166004820152602401600060405180830381600087803b1580156200b8ee57600080fd5b505af11580156200b903573d6000803e3d6000fd5b5050600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff949094169390931790925550505b60035460405160009173ffffffffffffffffffffffffffffffffffffffff1690829086906200b97d906200fece565b73ffffffffffffffffffffffffffffffffffffffff938416815292909116602083015215156040820152606001604051809103906000f0801580156200b9c7573d6000803e3d6000fd5b506000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291925062010000900473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b1580156200ba4f57600080fd5b505af11580156200ba64573d6000803e3d6000fd5b50506005546040517ffb1bd8c400000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff2600482015273ffffffffffffffffffffffffffffffffffffffff909116925063fb1bd8c49150602401600060405180830381600087803b1580156200bae857600080fd5b505af11580156200bafd573d6000803e3d6000fd5b50506000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063ca669fa79150602401600060405180830381600087803b1580156200bb8657600080fd5b505af11580156200bb9b573d6000803e3d6000fd5b50506005546040517ffb1bd8c40000000000000000000000000000000000000000000000000000000081527393548eb8453a498222c4ff2c4375b7de8af5a38a600482015273ffffffffffffffffffffffffffffffffffffffff909116925063fb1bd8c49150602401600060405180830381600087803b1580156200bc1f57600080fd5b505af11580156200bc34573d6000803e3d6000fd5b50506000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063ca669fa79150602401600060405180830381600087803b1580156200bcbd57600080fd5b505af11580156200bcd2573d6000803e3d6000fd5b50506005546040517fffd9b907000000000000000000000000000000000000000000000000000000008152891515600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ffd9b9079150602401600060405180830381600087803b1580156200bd4457600080fd5b505af11580156200bd59573d6000803e3d6000fd5b505050506000806000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa1580156200bdd0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200bdf691906201011c565b925092509250600080600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa1580156200be6c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200be92919062010513565b600080546040517f491cc7c200000000000000000000000000000000000000000000000000000000815260016004820152602481018390526044810183905260648101929092529294509092506201000090910473ffffffffffffffffffffffffffffffffffffffff169063491cc7c290608401600060405180830381600087803b1580156200bf2157600080fd5b505af11580156200bf36573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff891692507fa8b21f72cb83bce808df32dc2330217d744a1c22f3e9e44e4b11bbf049d37d9d9150600090a26000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b1580156200c00057600080fd5b505af11580156200c015573d6000803e3d6000fd5b50506005546040517f526a41e800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301528b15156024830152909116925063526a41e89150604401600060405180830381600087803b1580156200c08f57600080fd5b505af11580156200c0a4573d6000803e3d6000fd5b505050506200c24b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200c11a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200c1409190620100a9565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200c1ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200c1d49190620100a9565b73ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200c21f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200c2459190620100a9565b6200f808565b600354604080517f2f7a188100000000000000000000000000000000000000000000000000000000815290516200c2eb9273ffffffffffffffffffffffffffffffffffffffff1691632f7a18819160048083019260209291908290030181865afa1580156200c2be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200c2e49190620100a9565b876200f808565b600554604080517f2f7a188100000000000000000000000000000000000000000000000000000000815290516200c35e9273ffffffffffffffffffffffffffffffffffffffff1691632f7a18819160048083019260209291908290030181865afa1580156200c2be573d6000803e3d6000fd5b60008060008873ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa1580156200c3af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200c3d591906201011c565b9250925092506000808a73ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa1580156200c429573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200c44f919062010513565b915091506000808d156200c587576040517f79c0ef910000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff8e16906379c0ef9190602401602060405180830381865afa1580156200c4c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200c4ef9190620100a9565b6040517f79c0ef910000000000000000000000000000000000000000000000000000000081526001600482015290925073ffffffffffffffffffffffffffffffffffffffff8e16906379c0ef9190602401602060405180830381865afa1580156200c55e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200c5849190620100a9565b90505b6200c5fc876fffffffffffffffffffffffffffffffff168f6200c5ac5760006200c5ae565b8d5b6fffffffffffffffffffffffffffffffff166040518060400160405280601881526020017f496e636f727277656374206c696d6974506572426c6f636b00000000000000008152506200f747565b6200c671846fffffffffffffffffffffffffffffffff168f6200c6215760006200c623565b8a5b6fffffffffffffffffffffffffffffffff166040518060400160405280601c81526020017f496e636f727277656374206d696e426f72726f776564416d6f756e74000000008152506200f747565b6200c6e6836fffffffffffffffffffffffffffffffff168f6200c6965760006200c698565b895b6fffffffffffffffffffffffffffffffff166040518060400160405280601c81526020017f496e636f727277656374206d6178426f72726f776564416d6f756e74000000008152506200f747565b6200c73c8e6200c6f85760006200c6fa565b8b5b1515871515146040518060400160405280602081526020017f496e636f7272656374206973496e63726561736544656274466f62696464656e8152506200f946565b6200c79b8564ffffffffff168f6200c7565760006200c758565b8b5b64ffffffffff166040518060400160405280601881526020017f496e636f72726563742065787069726174696f6e4461746500000000000000008152506200f747565b6200c7e4828f6200c7ae5760006200c7c4565b73c4375b7de8af5a38a93548eb8453a498222c4ff25b6040518060600160405280602a81526020016205e392602a91396200f794565b6200c82d818f6200c7f75760006200c80d565b7393548eb8453a498222c4ff2c4375b7de8af5a38a5b6040518060600160405280602a81526020016205e368602a91396200f794565b505050505050505050505050505080806200c848906201033d565b9150506200b603565b505080806200c860906201033d565b9150506200b5f3565b505080806200c878906201033d565b9150506200b5e3565b6000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f1170cc2e0000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c31eb0e090602401600060405180830381600087803b1580156200c91257600080fd5b505af11580156200c927573d6000803e3d6000fd5b50506000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063ca669fa79150602401600060405180830381600087803b1580156200c9b057600080fd5b505af11580156200c9c5573d6000803e3d6000fd5b5050600554600a546040517f52438e5400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152911692506352438e54915060240162005026565b60008054610100900460ff16156200ca455750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200cb895760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c65640000000000000000000000000000000000000000000000000000828401528251808303840181526060830190935260009290916200caed917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc491608001620107db565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526200cb279162010825565b6000604051808303816000865af19150503d80600081146200cb66576040519150601f19603f3d011682016040523d82523d6000602084013e6200cb6b565b606091505b50915050808060200190518101906200cb85919062010843565b9150505b919050565b6000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16906306447d5690602401600060405180830381600087803b1580156200cc1357600080fd5b505af11580156200cc28573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f727de5c60000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b1580156200ccbd57600080fd5b505af11580156200ccd2573d6000803e3d6000fd5b50506005546003546009546040517f7bccacee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283166004820152908216602482015291169250637bccacee9150604401600060405180830381600087803b1580156200cd5157600080fd5b505af11580156200cd66573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f727de5c60000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b1580156200cdfb57600080fd5b505af11580156200ce10573d6000803e3d6000fd5b5050600554600954600480546040517f7bccacee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff938416928101929092528216602482015291169250637bccacee9150604401600060405180830381600087803b1580156200ce9157600080fd5b505af11580156200cea6573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f727de5c60000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b1580156200cf3b57600080fd5b505af11580156200cf50573d6000803e3d6000fd5b5050600554600480546009546040517f7bccacee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831693810193909352811660248301529091169250637bccacee915060440162001aa8565b6000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f61081c150000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c31eb0e090602401600060405180830381600087803b1580156200d04e57600080fd5b505af11580156200d063573d6000803e3d6000fd5b50506005546040517fdc2b21c100000000000000000000000000000000000000000000000000000000815260ff600482015273ffffffffffffffffffffffffffffffffffffffff909116925063dc2b21c19150602401600060405180830381600087803b1580156200d0d457600080fd5b505af11580156200d0e9573d6000803e3d6000fd5b5050600080546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526024810183905260448101929092526001606483015262010000900473ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b1580156200d17557600080fd5b505af11580156200d18a573d6000803e3d6000fd5b505060405160ff81527f73caacd705657a7d283e48ecf288b73bc517e3aea1bbc9da2fd54a979e8aa9509250602001905060405180910390a16000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b1580156200d24857600080fd5b505af11580156200d25d573d6000803e3d6000fd5b50506005546040517fdc2b21c100000000000000000000000000000000000000000000000000000000815260ff600482015273ffffffffffffffffffffffffffffffffffffffff909116925063dc2b21c19150602401600060405180830381600087803b1580156200d2ce57600080fd5b505af11580156200d2e3573d6000803e3d6000fd5b50505050620033fe600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638345f26e6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200d359573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200d37f919062010861565b60ff1660ff6040518060600160405280602b81526020016205e48b602b91396200f747565b6000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16906306447d5690602401600060405180830381600087803b1580156200d42957600080fd5b505af11580156200d43e573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f700ca0af0000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b1580156200d4d357600080fd5b505af11580156200d4e8573d6000803e3d6000fd5b50506005546040517fb53472ef00000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff2600482015273ffffffffffffffffffffffffffffffffffffffff909116925063b53472ef9150602401600060405180830381600087803b1580156200d56c57600080fd5b505af11580156200d581573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f700ca0af0000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b1580156200d61657600080fd5b505af11580156200d62b573d6000803e3d6000fd5b50506005546006546040517fb53472ef00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529116925063b53472ef9150602401600060405180830381600087803b1580156200d69f57600080fd5b505af11580156200d6b4573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f700ca0af0000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b1580156200d74957600080fd5b505af11580156200d75e573d6000803e3d6000fd5b50506005546040517f2414770800000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff2600482015273ffffffffffffffffffffffffffffffffffffffff909116925063241477089150602401600060405180830381600087803b1580156200d7e257600080fd5b505af11580156200d7f7573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f700ca0af0000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b1580156200d88c57600080fd5b505af11580156200d8a1573d6000803e3d6000fd5b50506005546006546040517f2414770800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152911692506324147708915060240162001aa8565b6000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16906306447d5690602401600060405180830381600087803b1580156200d98557600080fd5b505af11580156200d99a573d6000803e3d6000fd5b505050506000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639af1d35a6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156200da0e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200da3491906201041c565b50506001546040517f67b4264500000000000000000000000000000000000000000000000000000000815293945060009373ffffffffffffffffffffffffffffffffffffffff90911692506367b4264591506200da979060029060040162010076565b602060405180830381865afa1580156200dab5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200dadb9190620100a9565b6001546040517f67b4264500000000000000000000000000000000000000000000000000000000815291925060009173ffffffffffffffffffffffffffffffffffffffff909116906367b42645906200db3a9060039060040162010076565b602060405180830381865afa1580156200db58573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200db7e9190620100a9565b6005546003546006546040517f7832743800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529394509182169263a70bc5429286921690637832743890602401602060405180830381865afa1580156200dc02573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200dc289190620105bf565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015261ffff166024820152604401600060405180830381600087803b1580156200dc9857600080fd5b505af11580156200dcad573d6000803e3d6000fd5b50505050600060c860026200dcc391906201059b565b6200dcd36101f46127106201048c565b6200dcdf91906201048c565b6003546040517f7832743800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015261ffff93909316935060009290911690637832743890602401602060405180830381865afa1580156200dd5c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200dd829190620105bf565b600080546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600160048201819052602482018490526044820193909352606481019290925261ffff9290921692506201000090910473ffffffffffffffffffffffffffffffffffffffff169063491cc7c290608401600060405180830381600087803b1580156200de1757600080fd5b505af11580156200de2c573d6000803e3d6000fd5b505060405161ffff8516815273ffffffffffffffffffffffffffffffffffffffff871692507f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650915060200160405180910390a2600080546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600160048201819052602482018490526044820193909352606481019290925262010000900473ffffffffffffffffffffffffffffffffffffffff169063491cc7c290608401600060405180830381600087803b1580156200df0a57600080fd5b505af11580156200df1f573d6000803e3d6000fd5b505060065460405161ffff8616815273ffffffffffffffffffffffffffffffffffffffff90911692507f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650915060200160405180910390a260055473ffffffffffffffffffffffffffffffffffffffff1663f206d32a866200dfa360c860026201059b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815261ffff9283166004820152911660248201526101f4604482015260648181015260c8608482015260a401600060405180830381600087803b1580156200e01457600080fd5b505af11580156200e029573d6000803e3d6000fd5b50506003546006546040517f7832743800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526200e0f0945091169150637832743890602401602060405180830381865afa1580156200e0a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200e0cb9190620105bf565b61ffff16836040518060600160405280602181526020016205e3bc602191396200f747565b6003546040517f7832743800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526200e1af921690637832743890602401602060405180830381865afa1580156200e164573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200e18a9190620105bf565b61ffff16836040518060600160405280602381526020016205e3fe602391396200f747565b6003546040517f7832743800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015262002b10921690637832743890602401602060405180830381865afa1580156200e223573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200e2499190620105bf565b61ffff16826040518060600160405280602381526020016205e4da602391396200f747565b60048054604080517f860aefcf0000000000000000000000000000000000000000000000000000000081528151600094859473ffffffffffffffffffffffffffffffffffffffff169363860aefcf93808301939192908290030181865afa1580156200e2de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200e304919062010513565b909250905060006200e319836103e862010710565b905060006200e32b836103e862010710565b600080546040517f491cc7c200000000000000000000000000000000000000000000000000000000815260048101839052602481018390526044810192909252600160648301529192506201000090910473ffffffffffffffffffffffffffffffffffffffff169063491cc7c290608401600060405180830381600087803b1580156200e3b757600080fd5b505af11580156200e3cc573d6000803e3d6000fd5b5050604080516fffffffffffffffffffffffffffffffff8087168252851660208201527f4d4981437d0211f9e6843eb024d9ada1fa3a99514d4343d4aece106dd11524bb935001905060405180910390a16000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b1580156200e4a257600080fd5b505af11580156200e4b7573d6000803e3d6000fd5b50506005546040517f9f1c50690000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff80871660048301528516602482015273ffffffffffffffffffffffffffffffffffffffff9091169250639f1c50699150604401600060405180830381600087803b1580156200e54157600080fd5b505af11580156200e556573d6000803e3d6000fd5b505060048054604080517f860aefcf000000000000000000000000000000000000000000000000000000008152815173ffffffffffffffffffffffffffffffffffffffff909316955063860aefcf945080840193919291908290030181865afa1580156200e5c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200e5ee919062010513565b80945081955050506200e65c846fffffffffffffffffffffffffffffffff16836fffffffffffffffffffffffffffffffff166040518060400160405280601b81526020017f496e636f7272656374206d696e426f72726f776564416d6f756e7400000000008152506200f747565b62001b5c836fffffffffffffffffffffffffffffffff16826fffffffffffffffffffffffffffffffff166040518060400160405280601b81526020017f496e636f7272656374206d6178426f72726f776564416d6f756e7400000000008152506200f747565b6000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16906306447d5690602401600060405180830381600087803b1580156200e74757600080fd5b505af11580156200e75c573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb2335f2e0000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b1580156200e7f157600080fd5b505af11580156200e806573d6000803e3d6000fd5b50506005546040517f3e7c88d600000000000000000000000000000000000000000000000000000000815260006004820152612454602482015273ffffffffffffffffffffffffffffffffffffffff9091169250633e7c88d69150604401600060405180830381600087803b1580156200e87f57600080fd5b505af11580156200e894573d6000803e3d6000fd5b50506000546040805173c4375b7de8af5a38a93548eb8453a498222c4ff260248083019190915282518083039091018152604490910182526020810180517fdf4c572d000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff90911617905290517ff28dceb30000000000000000000000000000000000000000000000000000000081526201000090920473ffffffffffffffffffffffffffffffffffffffff16935063f28dceb392506200e96f91600401620103f4565b600060405180830381600087803b1580156200e98a57600080fd5b505af11580156200e99f573d6000803e3d6000fd5b50506005546040517f3e7c88d600000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff26004820152612454602482015273ffffffffffffffffffffffffffffffffffffffff9091169250633e7c88d69150604401600060405180830381600087803b1580156200ea2b57600080fd5b505af11580156200ea40573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f528ca31d0000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b1580156200ead557600080fd5b505af11580156200eaea573d6000803e3d6000fd5b50506005546040517f3e7c88d6000000000000000000000000000000000000000000000000000000008152306004820152612454602482015273ffffffffffffffffffffffffffffffffffffffff9091169250633e7c88d69150604401600060405180830381600087803b1580156200eb6257600080fd5b505af11580156200eb77573d6000803e3d6000fd5b5050505060006040516200eb8b906200feea565b60408082526004908201527f545750460000000000000000000000000000000000000000000000000000000060608201526080602082018190526017908201527f546f6b656e20776974686f75742070726963654665656400000000000000000060a082015260c001604051809103906000f0801580156200ec11573d6000803e3d6000fd5b506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f67a7cd4300000000000000000000000000000000000000000000000000000000600482015291925062010000900473ffffffffffffffffffffffffffffffffffffffff169063c31eb0e090602401600060405180830381600087803b1580156200eca557600080fd5b505af11580156200ecba573d6000803e3d6000fd5b50506005546040517f3e7c88d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015261245460248301529091169250633e7c88d6915060440162002a5c565b6001546040517f67b4264500000000000000000000000000000000000000000000000000000000815260009173ffffffffffffffffffffffffffffffffffffffff16906367b42645906200ed799060029060040162010076565b602060405180830381865afa1580156200ed97573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200edbd9190620100a9565b600080546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600160048201819052602482018490526044820193909352606481019290925291925060189162010000900473ffffffffffffffffffffffffffffffffffffffff169063491cc7c290608401600060405180830381600087803b1580156200ee4e57600080fd5b505af11580156200ee63573d6000803e3d6000fd5b505060405161ffff8416815273ffffffffffffffffffffffffffffffffffffffff851692507f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650915060200160405180910390a26000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b1580156200ef3b57600080fd5b505af11580156200ef50573d6000803e3d6000fd5b50506005546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015261ffff86166024830152909116925063a70bc5429150604401600060405180830381600087803b1580156200efcc57600080fd5b505af11580156200efe1573d6000803e3d6000fd5b50506003546040517f7832743800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015262000ce594509091169150637832743890602401602060405180830381865afa1580156200f05b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200f0819190620105bf565b61ffff168261ffff166200fb8c565b600080600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639af1d35a6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156200f101573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200f12791906201041c565b506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f0b361d6900000000000000000000000000000000000000000000000000000000600482015293965090945062010000900473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e0916024019050600060405180830381600087803b1580156200f1c157600080fd5b505af11580156200f1d6573d6000803e3d6000fd5b50506000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063ca669fa79150602401600060405180830381600087803b1580156200f25f57600080fd5b505af11580156200f274573d6000803e3d6000fd5b50506005546040517ff206d32a000000000000000000000000000000000000000000000000000000008152612710600482015261ffff8616602482015260006044820181905260648201819052608482015273ffffffffffffffffffffffffffffffffffffffff909116925063f206d32a915060a401600060405180830381600087803b1580156200f30557600080fd5b505af11580156200f31a573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f0b361d690000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b1580156200f3af57600080fd5b505af11580156200f3c4573d6000803e3d6000fd5b50506000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063ca669fa79150602401600060405180830381600087803b1580156200f44d57600080fd5b505af11580156200f462573d6000803e3d6000fd5b505060055473ffffffffffffffffffffffffffffffffffffffff16915063f206d32a90506200f49560016127106201048c565b846200f4a4816127106201048c565b60405160e085901b7fffffffff0000000000000000000000000000000000000000000000000000000016815261ffff938416600482015291831660248301529091166044820152600060648201819052608482015260a401600060405180830381600087803b1580156200f51757600080fd5b505af11580156200f52c573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f0b361d690000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b1580156200f5c157600080fd5b505af11580156200f5d6573d6000803e3d6000fd5b50506000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063ca669fa79150602401600060405180830381600087803b1580156200f65f57600080fd5b505af11580156200f674573d6000803e3d6000fd5b505060055473ffffffffffffffffffffffffffffffffffffffff16915063f206d32a90506200f6a760016127106201048c565b8460016200f6b8826127106201048c565b6200f6c491906201048c565b856200f6d3816127106201048c565b60405160e087901b7fffffffff0000000000000000000000000000000000000000000000000000000016815261ffff95861660048201529385166024850152918416604484015283166064830152909116608482015260a401600060405180830381600087803b158015620086c657600080fd5b81831462003c32577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf3583816040516200f780919062010886565b60405180910390a162003c3283836200fb8c565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161462003c32577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf3583816040516200f7f9919062010886565b60405180910390a162003c3283835b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462000ce5577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f506040516200f8c29060208082526025908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b61646460408201527f726573735d000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f816040516200f8fb9190620108cf565b60405180910390a17f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f826040516200f934919062010931565b60405180910390a162000ce56200fc8c565b8162000ce5577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf3583816040516200f97d919062010886565b60405180910390a162000ce5826200fe0f565b6000806000806000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639af1d35a6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156200fa06573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200fa2c91906201041c565b945094509450945094506200fa808561ffff168b61ffff166040518060400160405280601581526020017f496e636f727265637420666565496e74657265737400000000000000000000008152506200f747565b6200faca8461ffff168a61ffff166040518060400160405280601881526020017f496e636f7272656374206665654c69717569646174696f6e00000000000000008152506200f747565b6200fb148361ffff168961ffff166040518060400160405280601d81526020017f496e636f7272656374206c69717569646174696f6e446973636f756e740000008152506200f747565b6200fb5e8261ffff168861ffff166040518060400160405280601f81526020017f496e636f7272656374206665654c69717569646174696f6e45787069726564008152506200f747565b62006fe98161ffff168761ffff166040518060600160405280602481526020016205e4b6602491396200f747565b80821462000ce5577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f506040516200fc1a9060208082526022908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b75696e60408201527f745d000000000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a8816040516200fc5391906201096f565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a8826040516200f9349190620109bb565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200fde15760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000009282019290925260016060820152600091907f70ca10bbd0dbfd9020a9f4b13402c16cb120705e0d1c0aeab10fa353ae586fc490608001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526200fd5e9291602001620107db565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526200fd989162010825565b6000604051808303816000865af19150503d80600081146200fdd7576040519150601f19603f3d011682016040523d82523d6000602084013e6200fddc565b606091505b505050505b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055565b806200266b577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f506040516200fe759060208082526017908201527f4572726f723a20417373657274696f6e204661696c6564000000000000000000604082015260600190565b60405180910390a16200266b6200fc8c565b617a5180620109fa83390190565b62031ed6806201844b83390190565b6102ba806204a32183390190565b6118e8806204a5db83390190565b6158e8806204bec383390190565b615e9780620517ab83390190565b615f3d806205764283390190565b610de9806205d57f83390190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156200ff71576200ff716200fef8565b604052919050565b600080604083850312156200ff8d57600080fd5b823567ffffffffffffffff808211156200ffa657600080fd5b818501915085601f8301126200ffbb57600080fd5b81356020828211156200ffd2576200ffd26200fef8565b62010004817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f850116016200ff27565b925081835287818386010111156201001b57600080fd5b8181850182850137600091830181019190915290969401359450505050565b600b811062010072577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b602081016200169b82846201003a565b73ffffffffffffffffffffffffffffffffffffffff811681146200266b57600080fd5b600060208284031215620100bc57600080fd5b8151620100c98162010086565b9392505050565b600060208284031215620100e357600080fd5b5051919050565b80516fffffffffffffffffffffffffffffffff811681146200cb8957600080fd5b805180151581146200cb8957600080fd5b6000806000606084860312156201013257600080fd5b6201013d84620100ea565b92506201014d602085016201010b565b9150604084015164ffffffffff811681146201016857600080fd5b809150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600064ffffffffff83811690831681811015620101c357620101c362010173565b039392505050565b60008219821115620101e157620101e162010173565b500190565b600064ffffffffff80831681851680830382111562010209576201020962010173565b01949350505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156201024d576201024d62010173565b500290565b73ffffffffffffffffffffffffffffffffffffffff8316815260408101620100c960208301846201003a565b600060208083850312156201029257600080fd5b825167ffffffffffffffff80821115620102ab57600080fd5b818501915085601f830112620102c057600080fd5b815181811115620102d557620102d56200fef8565b8060051b9150620102e88483016200ff27565b81815291830184019184810190888411156201030357600080fd5b938501935b83851015620103315784519250620103208362010086565b828252938501939085019062010308565b98975050505050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141562010372576201037262010173565b5060010190565b60005b83811015620103965781810151838201526020016201037c565b8381111562001b5c5750506000910152565b60008151808452620103c281602086016020860162010379565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000620100c96020830184620103a8565b805161ffff811681146200cb8957600080fd5b600080600080600060a086880312156201043557600080fd5b620104408662010409565b9450620104506020870162010409565b9350620104606040870162010409565b9250620104706060870162010409565b9150620104806080870162010409565b90509295509295909350565b600061ffff83811690831681811015620101c357620101c362010173565b60008060408385031215620104be57600080fd5b8251620104cb8162010086565b9150620104db6020840162010409565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080604083850312156201052757600080fd5b6201053283620100ea565b9150620104db60208401620100ea565b6000602082840312156201055557600080fd5b620100c982620100ea565b60006fffffffffffffffffffffffffffffffff8083168185168183048111821515161562010592576201059262010173565b02949350505050565b600061ffff8083168185168183048111821515161562010592576201059262010173565b600060208284031215620105d257600080fd5b620100c98262010409565b600061ffff80831681851680830382111562010209576201020962010173565b600073ffffffffffffffffffffffffffffffffffffffff8086168352602081861681850152604060608186015261010085016fffffffffffffffffffffffffffffffff8088511660608801528084890151166080880152508187015160a080880152818151808452610120890191508583019350600092505b80831015620106a757835180518816835286015161ffff168683015292850192600192909201919084019062010676565b50606089015173ffffffffffffffffffffffffffffffffffffffff1660c0890152608090980151151560e0909701969096525094979650505050505050565b60008351620106fa81846020880162010379565b8351908301906201020981836020880162010379565b60006fffffffffffffffffffffffffffffffff80831681851680830382111562010209576201020962010173565b60008282101562010753576201075362010173565b500390565b60006fffffffffffffffffffffffffffffffff83811690831681811015620101c357620101c362010173565b60006fffffffffffffffffffffffffffffffff80841680620107cf577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b7fffffffff0000000000000000000000000000000000000000000000000000000083168152600082516201081781600485016020870162010379565b919091016004019392505050565b600082516201083981846020870162010379565b9190910192915050565b6000602082840312156201085657600080fd5b620100c9826201010b565b6000602082840312156201087457600080fd5b815160ff81168114620100c957600080fd5b60408152600560408201527f4572726f720000000000000000000000000000000000000000000000000000006060820152608060208201526000620100c96080830184620103a8565b6040815260006201090d60408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b905073ffffffffffffffffffffffffffffffffffffffff8316602083015292915050565b6040815260006201090d60408301600a81527f2020202041637475616c00000000000000000000000000000000000000000000602082015260400190565b604081526000620109ad60408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b905082602083015292915050565b604081526000620109ad60408301600a81527f2020202041637475616c0000000000000000000000000000000000000000000060208201526040019056fe60806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d00011790553480156200003a57600080fd5b506040805161018081019091526000908060c081018060018152604080518082018252600381526244414960e81b6020828101919091528301526012908201526305f5e100606082015260800160018152602001600081525081526020016040518060c001604052806002600a811115620000b957620000b962000b78565b815260408051808201825260048152635553444360e01b6020828101919091528301526006908201526305f5e100606082015260800160018152602001600081525081526020016040518060c001604052806003600a81111562000121576200012162000b78565b815260408051808201825260048152630ae8aa8960e31b602082810191909152830152601290820152644a817c8000606082015260800160028152602001600081525081526020016040518060c001604052806004600a8111156200018a576200018a62000b78565b815260408051808201825260048152634c494e4b60e01b6020828101919091528301526012908201526359682f00606082015260800160018152602001600081525081526020016040518060c001604052806005600a811115620001f257620001f262000b78565b815260408051808201825260048152631554d11560e21b602082810191909152830152601290820152633b023380606082015260800160018152602001600081525081526020016040518060c001604052806006600a8111156200025a576200025a62000b78565b815260408051808201825260058152640e6e88aa8960db1b602082810191909152830152601290820152644cd588640060608201526080016003815260200160009052905260408051610140810190915290915060009080608081018060078152602001604051806040016040528060048152602001636344414960e01b8152508152602001601260ff1681526020016305f5e100815260200160048081111562000309576200030962000b78565b8152602001600181525081526020016040518060c001604052806008600a81111562000339576200033962000b78565b81526040805180820182526005815264635553444360d81b6020828101919091528301526006908201526305f5e100606082015260800160048152602001600281525081526020016040518060c001604052806009600a811115620003a257620003a262000b78565b8152604080518082018252600581526418d554d11560da1b602082810191909152830152601290820152633b023380606082015260800160048152602001600581525081526020016040518060c00160405280600a808111156200040a576200040a62000b78565b81526040805180820182526005815264634c494e4b60d81b6020828101919091528301526012908201526359682f00606082015260800160048152602001600490529052905060005b600681101562000496576200048183826006811062000476576200047662000b8e565b6020020151620004db565b806200048d8162000ba4565b91505062000453565b5060005b6004811015620004d257620004bd82826004811062000476576200047662000b8e565b80620004c98162000ba4565b9150506200049a565b50505062000d14565b6000600282608001516004811115620004f857620004f862000b78565b14156200054e576040516200050d9062000a8c565b604051809103906000f0801580156200052a573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b03831617905590506200071e565b60038260800151600481111562000569576200056962000b78565b1415620005a4576040516200057e9062000a9a565b604051809103906000f0801580156200059b573d6000803e3d6000fd5b5090506200071e565b600182608001516004811115620005bf57620005bf62000b78565b1415620005f157816020015182602001518360400151604051620005e39062000aa8565b6200057e9392919062000c1e565b6004826080015160048111156200060c576200060c62000b78565b1415620006be576000600260008460a00151600a81111562000632576200063262000b78565b600a81111562000646576200064662000b78565b815260200190815260200160002060009054906101000a90046001600160a01b0316905082602001518360200151846040015183604051620006889062000ab6565b62000697949392919062000c5b565b604051809103906000f080158015620006b4573d6000803e3d6000fd5b509150506200071e565b60405162461bcd60e51b815260206004820152602b60248201527f74657374546f6b656e53756974653a204372656174696e6720756e6b6e6f776e60448201526a20746f6b656e207479706560a81b606482015260840160405180910390fd5b60005460208301516040516318caf8e360e31b8152620100009092046001600160a01b03169163c657c718916200075b9185919060040162000ca9565b600060405180830381600087803b1580156200077657600080fd5b505af11580156200078b573d6000803e3d6000fd5b50505050600082606001516008604051620007a69062000ac4565b91825260ff166020820152604001604051809103906000f080158015620007d1573d6000803e3d6000fd5b50905081600260008560000151600a811115620007f257620007f262000b78565b600a81111562000806576200080662000b78565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055508260600151600560008560000151600a8111156200085a576200085a62000b78565b600a8111156200086e576200086e62000b78565b8152602080820192909252604090810160009081209390935585516001600160a01b03861684526008909252909120805460ff1916600183600a811115620008ba57620008ba62000b78565b02179055508260800151600360008560000151600a811115620008e157620008e162000b78565b600a811115620008f557620008f562000b78565b81526020810191909152604001600020805460ff1916600183600481111562000922576200092262000b78565b0217905550604080518082019091526001600160a01b0380841682528281166020808401918252600780546001810182556000918252945160029095027fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688810180549686166001600160a01b031997881617905592517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c689909301805493909416929094169190911790915584015184519091600491600a811115620009eb57620009eb62000b78565b600a811115620009ff57620009ff62000b78565b8152602001908152602001600020908051906020019062000a2292919062000ad2565b5080600660008560000151600a81111562000a415762000a4162000b78565b600a81111562000a555762000a5562000b78565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550505050565b610ab1806200285183390190565b611224806200330283390190565b611758806200452683390190565b6117098062005c7e83390190565b6106ca806200738783390190565b82805462000ae09062000cd7565b90600052602060002090601f01602090048101928262000b04576000855562000b4f565b82601f1062000b1f57805160ff191683800117855562000b4f565b8280016001018555821562000b4f579182015b8281111562000b4f57825182559160200191906001019062000b32565b5062000b5d92915062000b61565b5090565b5b8082111562000b5d576000815560010162000b62565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600060001982141562000bc757634e487b7160e01b600052601160045260246000fd5b5060010190565b6000815180845260005b8181101562000bf65760208185018101518683018201520162000bd8565b8181111562000c09576000602083870101525b50601f01601f19169290920160200192915050565b60608152600062000c33606083018662000bce565b828103602084015262000c47818662000bce565b91505060ff83166040830152949350505050565b60808152600062000c70608083018762000bce565b828103602084015262000c84818762000bce565b60ff95909516604084015250506001600160a01b039190911660609091015292915050565b6001600160a01b038316815260406020820181905260009062000ccf9083018462000bce565b949350505050565b600181811c9082168062000cec57607f821691505b6020821081141562000d0e57634e487b7160e01b600052602260045260246000fd5b50919050565b611b2d8062000d246000396000f3fe6080604052600436106101635760003560e01c80638eb86e8b116100c0578063c6c3bbe611610074578063d051a62211610059578063d051a62214610490578063eebab8ef146104b0578063fa7626d4146104d057600080fd5b8063c6c3bbe614610433578063c74912d21461045357600080fd5b80639b140a85116100a55780639b140a85146103e6578063b36ba20814610406578063ba414fa61461040e57600080fd5b80638eb86e8b1461038357806398cdaadf146103a357600080fd5b80636a72bde71161011757806388327863116100fc578063883278631461030857806388f776a2146103365780638a3177a31461035657600080fd5b80636a72bde7146102c45780636ca42ae3146102e657600080fd5b8063440864fa11610148578063440864fa146102025780634b57b0be1461022f57806367b426451461028157600080fd5b806304bc3b1c1461016f57806310c7f0b9146101b557600080fd5b3661016a57005b600080fd5b34801561017b57600080fd5b5061019f61018a3660046116f6565b60086020526000908152604090205460ff1681565b6040516101ac9190611742565b60405180910390f35b3480156101c157600080fd5b506101d56101d036600461175c565b6104ea565b6040805173ffffffffffffffffffffffffffffffffffffffff9384168152929091166020830152016101ac565b34801561020e57600080fd5b5061022261021d366004611784565b610530565b6040516101ac91906117cb565b34801561023b57600080fd5b5060015461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101ac565b34801561028d57600080fd5b5061025c61029c366004611784565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156102d057600080fd5b506102e46102df36600461181c565b6105ca565b005b3480156102f257600080fd5b506102fb610730565b6040516101ac919061186b565b34801561031457600080fd5b506103286103233660046118d4565b6107b5565b6040519081526020016101ac565b34801561034257600080fd5b506102e461035136600461190b565b610888565b34801561036257600080fd5b50610328610371366004611784565b60056020526000908152604090205481565b34801561038f57600080fd5b506102e461039e366004611954565b6108b9565b3480156103af57600080fd5b5061025c6103be366004611784565b60066020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156103f257600080fd5b506102e4610401366004611993565b610a73565b6102e4610b22565b34801561041a57600080fd5b50610423610ba0565b60405190151581526020016101ac565b34801561043f57600080fd5b506102e461044e3660046119b3565b610d00565b34801561045f57600080fd5b5061048361046e366004611784565b60036020526000908152604090205460ff1681565b6040516101ac91906119d3565b34801561049c57600080fd5b506103286104ab36600461190b565b610daf565b3480156104bc57600080fd5b506102e46104cb366004611954565b610e8b565b3480156104dc57600080fd5b506000546104239060ff1681565b600781815481106104fa57600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff91821692501682565b60046020526000908152604090208054610549906119e7565b80601f0160208091040260200160405190810160405280929190818152602001828054610575906119e7565b80156105c25780601f10610597576101008083540402835291602001916105c2565b820191906000526020600020905b8154815290600101906020018083116105a557829003601f168201915b505050505081565b6000546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152620100009092049091169063ca669fa790602401600060405180830381600087803b15801561063e57600080fd5b505af1158015610652573d6000803e3d6000fd5b505050506002600085600a81111561066c5761066c611713565b600a81111561067d5761067d611713565b8152602081019190915260409081016000205490517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490529091169063095ea7b3906044016020604051808303816000875af1158015610705573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107299190611a3b565b5050505050565b60606007805480602002602001604051908101604052809291908181526020016000905b828210156107ac5760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff908116835260019182015416828401529083529092019101610754565b50505050905090565b60006002600084600a8111156107cd576107cd611713565b600a8111156107de576107de611713565b8152602081019190915260409081016000205490517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152909116906370a0823190602401602060405180830381865afa15801561085d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108819190611a5d565b9392505050565b6108b48383837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6105ca565b505050565b60016003600085600a8111156108d1576108d1611713565b600a8111156108e2576108e2611713565b815260208101919091526040016000205460ff16600481111561090757610907611713565b14610999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f74657374546f6b656e53756974653a20547279696e6720746f206275726e206160448201527f206e6f6e2d6e6f726d616c20746f6b656e00000000000000000000000000000060648201526084015b60405180910390fd5b6002600084600a8111156109af576109af611713565b600a8111156109c0576109c0611713565b8152602081019190915260409081016000205490517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526024820184905290911690639dc29fac906044015b6020604051808303816000875af1158015610a49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6d9190611a3b565b50505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604081205460ff169081600a811115610aaf57610aaf611713565b1415610b17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f20746f6b656e2077697468207375636820616464726573730000000000006044820152606401610990565b610a6d818484610888565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015610b8c57600080fd5b505af1158015610729573d6000803e3d6000fd5b60008054610100900460ff1615610bc05750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610cfb5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610c65917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc491608001611a76565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052610c9d91611abe565b6000604051808303816000865af19150503d8060008114610cda576040519150601f19603f3d011682016040523d82523d6000602084013e610cdf565b606091505b5091505080806020019051810190610cf79190611a3b565b9150505b919050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604081205460ff169081600a811115610d3c57610d3c611713565b1415610da4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f20746f6b656e2077697468207375636820616464726573730000000000006044820152606401610990565b610a6d818484610e8b565b60006002600085600a811115610dc757610dc7611713565b600a811115610dd857610dd8611713565b8152602081019190915260409081016000205490517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301529091169063dd62ed3e90604401602060405180830381865afa158015610e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e839190611a5d565b949350505050565b60026003600085600a811115610ea357610ea3611713565b600a811115610eb457610eb4611713565b815260208101919091526040016000205460ff166004811115610ed957610ed9611713565b1415610ff6576000546040517fc88a5e6d000000000000000000000000000000000000000000000000000000008152306004820152602481018390526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c88a5e6d90604401600060405180830381600087803b158015610f5657600080fd5b505af1158015610f6a573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015610fd857600080fd5b505af1158015610fec573d6000803e3d6000fd5b505050505061163c565b600380600085600a81111561100d5761100d611713565b600a81111561101e5761101e611713565b815260208101919091526040016000205460ff16600481111561104357611043611713565b14156111aa576000546040517fc88a5e6d000000000000000000000000000000000000000000000000000000008152306004820152602481018390526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c88a5e6d90604401600060405180830381600087803b1580156110c057600080fd5b505af11580156110d4573d6000803e3d6000fd5b505050506002600084600a8111156110ee576110ee611713565b600a8111156110ff576110ff611713565b8152602081019190915260409081016000205490517fa1903eab00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a1903eab90839060240160206040518083038185885af115801561117f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906111a49190611a5d565b5061163c565b60046003600085600a8111156111c2576111c2611713565b600a8111156111d3576111d3611713565b815260208101919091526040016000205460ff1660048111156111f8576111f8611713565b141561148f5760006002600085600a81111561121657611216611713565b600a81111561122757611227611713565b815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c49190611ada565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600860205260409020549091506112fb9060ff163084610e8b565b8073ffffffffffffffffffffffffffffffffffffffff1663095ea7b36002600087600a81111561132d5761132d611713565b600a81111561133e5761133e611713565b81526020810191909152604090810160002054905160e083901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602481018590526044016020604051808303816000875af11580156113c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e69190611a3b565b506002600085600a8111156113fd576113fd611713565b600a81111561140e5761140e611713565b8152602081019190915260409081016000205490517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810184905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f1990604401600060405180830381600087803b158015610fd857600080fd5b60016003600085600a8111156114a7576114a7611713565b600a8111156114b8576114b8611713565b815260208101919091526040016000205460ff1660048111156114dd576114dd611713565b14156115b4576002600084600a8111156114f9576114f9611713565b600a81111561150a5761150a611713565b8152602081019190915260409081016000205490517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f19906044016020604051808303816000875af1158015611590573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a49190611a3b565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f74657374546f6b656e53756974653a20547279696e6720746f207472616e736660448201527f657220756e6b6e6f776e20746f6b656e000000000000000000000000000000006064820152608401610990565b6002600084600a81111561165257611652611713565b600a81111561166357611663611713565b8152602081019190915260409081016000205490517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490529091169063a9059cbb90604401610a2a565b73ffffffffffffffffffffffffffffffffffffffff811681146116f357600080fd5b50565b60006020828403121561170857600080fd5b8135610881816116d1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60208101600b831061175657611756611713565b91905290565b60006020828403121561176e57600080fd5b5035919050565b8035600b8110610cfb57600080fd5b60006020828403121561179657600080fd5b61088182611775565b60005b838110156117ba5781810151838201526020016117a2565b83811115610a6d5750506000910152565b60208152600082518060208401526117ea81604085016020870161179f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000806080858703121561183257600080fd5b61183b85611775565b9350602085013561184b816116d1565b9250604085013561185b816116d1565b9396929550929360600135925050565b602080825282518282018190526000919060409081850190868401855b828110156118c7578151805173ffffffffffffffffffffffffffffffffffffffff90811686529087015116868501529284019290850190600101611888565b5091979650505050505050565b600080604083850312156118e757600080fd5b6118f083611775565b91506020830135611900816116d1565b809150509250929050565b60008060006060848603121561192057600080fd5b61192984611775565b92506020840135611939816116d1565b91506040840135611949816116d1565b809150509250925092565b60008060006060848603121561196957600080fd5b61197284611775565b92506020840135611982816116d1565b929592945050506040919091013590565b6000806000606084860312156119a857600080fd5b8335611929816116d1565b6000806000606084860312156119c857600080fd5b8335611972816116d1565b602081016005831061175657611756611713565b600181811c908216806119fb57607f821691505b60208210811415611a35577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600060208284031215611a4d57600080fd5b8151801515811461088157600080fd5b600060208284031215611a6f57600080fd5b5051919050565b7fffffffff000000000000000000000000000000000000000000000000000000008316815260008251611ab081600485016020870161179f565b919091016004019392505050565b60008251611ad081846020870161179f565b9190910192915050565b600060208284031215611aec57600080fd5b8151610881816116d156fea264697066735822122010fe735ed069aca27931edce4ba2ff14ec7886bf21b0eea685a884f9200fb49e64736f6c634300080a003360c0604052600d60808190526c2bb930b83832b21022ba3432b960991b60a090815261002e916000919061007a565b50604080518082019091526004808252630ae8aa8960e31b602090920191825261005a9160019161007a565b506002805460ff1916601217905534801561007457600080fd5b5061014e565b82805461008690610113565b90600052602060002090601f0160209004810192826100a857600085556100ee565b82601f106100c157805160ff19168380011785556100ee565b828001600101855582156100ee579182015b828111156100ee5782518255916020019190600101906100d3565b506100fa9291506100fe565b5090565b5b808211156100fa57600081556001016100ff565b600181811c9082168061012757607f821691505b6020821081141561014857634e487b7160e01b600052602260045260246000fd5b50919050565b6109548061015d6000396000f3fe6080604052600436106100cb5760003560e01c806340c10f1911610074578063a9059cbb1161004e578063a9059cbb14610225578063d0e30db014610245578063dd62ed3e1461024d57600080fd5b806340c10f19146101c357806370a08231146101e357806395d89b411461021057600080fd5b806323b872dd116100a557806323b872dd146101575780632e1a7d4d14610177578063313ce5671461019757600080fd5b806306fdde03146100df578063095ea7b31461010a57806318160ddd1461013a57600080fd5b366100da576100d8610285565b005b600080fd5b3480156100eb57600080fd5b506100f46102e0565b6040516101019190610703565b60405180910390f35b34801561011657600080fd5b5061012a61012536600461079f565b61036e565b6040519015158152602001610101565b34801561014657600080fd5b50475b604051908152602001610101565b34801561016357600080fd5b5061012a6101723660046107c9565b6103e7565b34801561018357600080fd5b506100d8610192366004610805565b6105fe565b3480156101a357600080fd5b506002546101b19060ff1681565b60405160ff9091168152602001610101565b3480156101cf57600080fd5b506100d86101de36600461079f565b6106a4565b3480156101ef57600080fd5b506101496101fe36600461081e565b60036020526000908152604090205481565b34801561021c57600080fd5b506100f46106e2565b34801561023157600080fd5b5061012a61024036600461079f565b6106ef565b6100d8610285565b34801561025957600080fd5b50610149610268366004610839565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102a490849061089b565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102ed906108b3565b80601f0160208091040260200160405190810160405280929190818152602001828054610319906108b3565b80156103665780601f1061033b57610100808354040283529160200191610366565b820191906000526020600020905b81548152906001019060200180831161034957829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103d69086815260200190565b60405180910390a350600192915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561041957600080fd5b73ffffffffffffffffffffffffffffffffffffffff8416331480159061048f575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105175773ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020548211156104d157600080fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915281208054849290610511908490610907565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061054c908490610907565b909155505073ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260408120805484929061058690849061089b565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516105ec91815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561061a57600080fd5b3360009081526003602052604081208054839290610639908490610907565b9091555050604051339082156108fc029083906000818181858888f1935050505015801561066b573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260036020526040812080548392906106d990849061089b565b90915550505050565b600180546102ed906108b3565b60006106fc3384846103e7565b9392505050565b600060208083528351808285015260005b8181101561073057858101830151858201604001528201610714565b81811115610742576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461079a57600080fd5b919050565b600080604083850312156107b257600080fd5b6107bb83610776565b946020939093013593505050565b6000806000606084860312156107de57600080fd5b6107e784610776565b92506107f560208501610776565b9150604084013590509250925092565b60006020828403121561081757600080fd5b5035919050565b60006020828403121561083057600080fd5b6106fc82610776565b6000806040838503121561084c57600080fd5b61085583610776565b915061086360208401610776565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156108ae576108ae61086c565b500190565b600181811c908216806108c757607f821691505b60208210811415610901577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000828210156109195761091961086c565b50039056fea26469706673582212206ec943fa4e3b70d8fca6c25b6aa26fa18e8f8952ce3bc4d5afcb443bf3097c0564736f6c634300080a003360806040526000600255600060035534801561001a57600080fd5b506111fa8061002a6000396000f3fe60806040526004361061016e5760003560e01c80637a28fb88116100cb578063bdd17e1c1161007f578063dd62ed3e11610059578063dd62ed3e146103ee578063ee7a7c0414610441578063f5eb42dc1461046157600080fd5b8063bdd17e1c146103ad578063cdb9a21c146103c3578063d5002f2e146103d957600080fd5b8063a1903eab116100b0578063a1903eab1461035a578063a457c2d71461036d578063a9059cbb1461038d57600080fd5b80637a28fb88146102f457806395d89b411461031457600080fd5b806323b872dd1161012257806337cfdaca1161010757806337cfdaca1461020d57806339509351146102b457806370a08231146102d457600080fd5b806323b872dd14610278578063313ce5671461029857600080fd5b806318160ddd1161015357806318160ddd1461020d578063192084511461023057806322301f6e1461025057600080fd5b806306fdde0314610185578063095ea7b3146101dd57600080fd5b366101805761017d6000610481565b50005b600080fd5b34801561019157600080fd5b5060408051808201909152601781527f4c6971756964207374616b656420457468657220322e3000000000000000000060208201525b6040516101d49190610f63565b60405180910390f35b3480156101e957600080fd5b506101fd6101f8366004610fff565b610545565b60405190151581526020016101d4565b34801561021957600080fd5b5061022261055b565b6040519081526020016101d4565b34801561023c57600080fd5b5061022261024b366004611029565b61056b565b34801561025c57600080fd5b5061027661026b366004611042565b600391909155600255565b005b34801561028457600080fd5b506101fd610293366004611064565b6105ab565b3480156102a457600080fd5b50604051601281526020016101d4565b3480156102c057600080fd5b506101fd6102cf366004610fff565b610696565b3480156102e057600080fd5b506102226102ef3660046110a0565b6106d9565b34801561030057600080fd5b5061022261030f366004611029565b61070e565b34801561032057600080fd5b5060408051808201909152600581527f737445544800000000000000000000000000000000000000000000000000000060208201526101c7565b6102226103683660046110a0565b61073a565b34801561037957600080fd5b506101fd610388366004610fff565b610745565b34801561039957600080fd5b506101fd6103a8366004610fff565b6107f9565b3480156103b957600080fd5b5061022260035481565b3480156103cf57600080fd5b5061022260025481565b3480156103e557600080fd5b50610222610806565b3480156103fa57600080fd5b506102226104093660046110bb565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b34801561044d57600080fd5b5061027661045c366004610fff565b610811565b34801561046d57600080fd5b5061022261047c3660046110a0565b61081f565b60003334806104f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f5a45524f5f4445504f534954000000000000000000000000000000000000000060448201526064015b60405180910390fd5b60006104fc8261056b565b9050806105065750805b8160036000828254610518919061111d565b909155506105289050838261084a565b61053383838761093b565b61053d8382610992565b949350505050565b60006105523384846109ea565b50600192915050565b600061056660035490565b905090565b60008061057760035490565b9050806105875750600092915050565b6105a48161059e61059760025490565b8690610b52565b90610b5e565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001602090815260408083203384529091528120548281101561066c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f5452414e534645525f414d4f554e545f455843454544535f414c4c4f57414e4360448201527f450000000000000000000000000000000000000000000000000000000000000060648201526084016104e8565b610677858585610b6a565b61068b85336106868487610bef565b6109ea565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916105529185906106869086610bfb565b73ffffffffffffffffffffffffffffffffffffffff81166000908152602081905260408120546107089061070e565b92915050565b60008061071a60025490565b90508061072a5750600092915050565b6105a48161059e61059760035490565b600061070882610481565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156107e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4445435245415345445f414c4c4f57414e43455f42454c4f575f5a45524f000060448201526064016104e8565b6107ef33856106868487610bef565b5060019392505050565b6000610552338484610b6a565b600061056660025490565b61081b8282610c07565b5050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040812054610708565b73ffffffffffffffffffffffffffffffffffffffff82166108c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4d494e545f544f5f5448455f5a45524f5f41444452455353000000000000000060448201526064016104e8565b80600260008282546108d9919061111d565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205461090e9082610bfb565b73ffffffffffffffffffffffffffffffffffffffff90921660009081526020819052604090209190915550565b6040805183815273ffffffffffffffffffffffffffffffffffffffff83811660208301528516917fed8dd430b1e4bba98e943dc5b157cf7b54d9e12916d6c474ff5733a95001d03b910160405180910390a2505050565b73ffffffffffffffffffffffffffffffffffffffff821660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6109d58461070e565b60405190815260200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff8316610a67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f415050524f56455f46524f4d5f5a45524f5f414444524553530000000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff8216610ae4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f415050524f56455f544f5f5a45524f5f4144445245535300000000000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006105a48284611135565b60006105a48284611172565b6000610b758261056b565b9050610b82848483610d64565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610be191815260200190565b60405180910390a350505050565b60006105a482846111ad565b60006105a4828461111d565b73ffffffffffffffffffffffffffffffffffffffff8216610c84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4255524e5f46524f4d5f5448455f5a45524f5f4144445245535300000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205480821115610d14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4255524e5f414d4f554e545f455843454544535f42414c414e4345000000000060448201526064016104e8565b8160026000828254610d2691906111ad565b90915550610d3690508183610bef565b73ffffffffffffffffffffffffffffffffffffffff9093166000908152602081905260409020929092555050565b73ffffffffffffffffffffffffffffffffffffffff8316610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f5452414e534645525f46524f4d5f5448455f5a45524f5f41444452455353000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff8216610e5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f5452414e534645525f544f5f5448455f5a45524f5f414444524553530000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205480821115610eee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5452414e534645525f414d4f554e545f455843454544535f42414c414e43450060448201526064016104e8565b610ef88183610bef565b73ffffffffffffffffffffffffffffffffffffffff8086166000908152602081905260408082209390935590851681522054610f349083610bfb565b73ffffffffffffffffffffffffffffffffffffffff909316600090815260208190526040902092909255505050565b600060208083528351808285015260005b81811015610f9057858101830151858201604001528201610f74565b81811115610fa2576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ffa57600080fd5b919050565b6000806040838503121561101257600080fd5b61101b83610fd6565b946020939093013593505050565b60006020828403121561103b57600080fd5b5035919050565b6000806040838503121561105557600080fd5b50508035926020909101359150565b60008060006060848603121561107957600080fd5b61108284610fd6565b925061109060208501610fd6565b9150604084013590509250925092565b6000602082840312156110b257600080fd5b6105a482610fd6565b600080604083850312156110ce57600080fd5b6110d783610fd6565b91506110e560208401610fd6565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611130576111306110ee565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561116d5761116d6110ee565b500290565b6000826111a8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000828210156111bf576111bf6110ee565b50039056fea2646970667358221220a5b4f31162ba2b8b3424cef84b31ef91d05a825243602b5fdf758ffb49b8246364736f6c634300080a003360a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a003360c06040523480156200001157600080fd5b506040516200170938038062001709833981016040819052620000349162000266565b8351849084906200004d906003906020850190620000f3565b50805162000063906004906020840190620000f3565b505050620000806200007a6200009d60201b60201c565b620000a1565b60ff9091166080526001600160a01b031660a05250620003479050565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b82805462000101906200030a565b90600052602060002090601f01602090048101928262000125576000855562000170565b82601f106200014057805160ff191683800117855562000170565b8280016001018555821562000170579182015b828111156200017057825182559160200191906001019062000153565b506200017e92915062000182565b5090565b5b808211156200017e576000815560010162000183565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c157600080fd5b81516001600160401b0380821115620001de57620001de62000199565b604051601f8301601f19908116603f0116810190828211818310171562000209576200020962000199565b816040528381526020925086838588010111156200022657600080fd5b600091505b838210156200024a57858201830151818301840152908201906200022b565b838211156200025c5760008385830101525b9695505050505050565b600080600080608085870312156200027d57600080fd5b84516001600160401b03808211156200029557600080fd5b620002a388838901620001af565b95506020870151915080821115620002ba57600080fd5b50620002c987828801620001af565b935050604085015160ff81168114620002e157600080fd5b60608601519092506001600160a01b0381168114620002ff57600080fd5b939692955090935050565b600181811c908216806200031f57607f821691505b602082108114156200034157634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05161138e6200037b600039600081816101f70152818161041f0152610600015260006101a2015261138e6000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80636f307dc3116100b257806395d89b4111610081578063a9059cbb11610066578063a9059cbb146102b5578063dd62ed3e146102c8578063f2fde38b1461030e57600080fd5b806395d89b411461029a578063a457c2d7146102a257600080fd5b80636f307dc3146101f257806370a082311461023e578063715018a6146102745780638da5cb5b1461027c57600080fd5b806323b872dd116100ee57806323b872dd14610188578063313ce5671461019b57806339509351146101cc57806340c10f19146101df57600080fd5b806306fdde0314610120578063095ea7b31461013e57806318160ddd146101615780631e9a695014610173575b600080fd5b610128610321565b604051610135919061112d565b60405180910390f35b61015161014c3660046111c9565b6103b3565b6040519015158152602001610135565b6002545b604051908152602001610135565b6101866101813660046111c9565b6103c9565b005b6101516101963660046111f3565b610491565b60405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610135565b6101516101da3660046111c9565b61057c565b6101866101ed3660046111c9565b6105c5565b6102197f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b61016561024c36600461122f565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610186610691565b60055473ffffffffffffffffffffffffffffffffffffffff16610219565b61012861071e565b6101516102b03660046111c9565b61072d565b6101516102c33660046111c9565b610805565b6101656102d6366004611251565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b61018661031c36600461122f565b610812565b60606003805461033090611284565b80601f016020809104026020016040519081016040528092919081815260200182805461035c90611284565b80156103a95780601f1061037e576101008083540402835291602001916103a9565b820191906000526020600020905b81548152906001019060200180831161038c57829003601f168201915b5050505050905090565b60006103c0338484610942565b50600192915050565b6103d33382610af5565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015610468573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048c91906112d8565b505050565b600061049e848484610ce2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6105718533858403610942565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916103c09185906105c0908690611329565b610942565b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906323b872dd906064016020604051808303816000875af115801561065e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068291906112d8565b5061068d8282610f96565b5050565b60055473ffffffffffffffffffffffffffffffffffffffff163314610712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161055b565b61071c60006110b6565b565b60606004805461033090611284565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156107ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161055b565b6107fb3385858403610942565b5060019392505050565b60006103c0338484610ce2565b60055473ffffffffffffffffffffffffffffffffffffffff163314610893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161055b565b73ffffffffffffffffffffffffffffffffffffffff8116610936576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161055b565b61093f816110b6565b50565b73ffffffffffffffffffffffffffffffffffffffff83166109e4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff8216610a87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8216610b98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015610c4e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290610c8a908490611341565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff8216610e28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610ede576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610f22908490611329565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f8891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161055b565b80600260008282546110259190611329565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152602081905260408120805483929061105f908490611329565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208083528351808285015260005b8181101561115a5785810183015185820160400152820161113e565b8181111561116c576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146111c457600080fd5b919050565b600080604083850312156111dc57600080fd5b6111e5836111a0565b946020939093013593505050565b60008060006060848603121561120857600080fd5b611211846111a0565b925061121f602085016111a0565b9150604084013590509250925092565b60006020828403121561124157600080fd5b61124a826111a0565b9392505050565b6000806040838503121561126457600080fd5b61126d836111a0565b915061127b602084016111a0565b90509250929050565b600181811c9082168061129857607f821691505b602082108114156112d2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156112ea57600080fd5b8151801515811461124a57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561133c5761133c6112fa565b500190565b600082821015611353576113536112fa565b50039056fea26469706673582212203a6db30cd3c097921df4156794aa7973eb848711deeb2cffd7c54a9df1fdb0a564736f6c634300080a003360a060405234801561001057600080fd5b506040516106ca3803806106ca83398101604081905261002f9161006c565b60009190915560ff166080526001805460506001600160501b031991821681179092556004805490911690911790554260028190556003556100a2565b6000806040838503121561007f57600080fd5b82519150602083015160ff8116811461009757600080fd5b809150509250929050565b60805161060e6100bc600039600060d3015261060e6000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80639a6fc8f511610081578063d62ada111161005b578063d62ada11146102dc578063f7a30806146102f4578063feaf968c1461030757600080fd5b80639a6fc8f5146101cd578063bd18ad531461023a578063cd653afc1461024d57600080fd5b806354fd4d50116100b257806354fd4d501461012d57806367e8d83d1461013c5780637284e4161461018e57600080fd5b8063313ce567146100ce5780633fd0875f1461010c575b600080fd5b6100f57f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020015b60405180910390f35b6004546a0100000000000000000000900460ff166040516101039190610441565b60405160018152602001610103565b61018c61014a366004610482565b600480549115156c01000000000000000000000000027fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff909216919091179055565b005b604080518082018252600c81527f7072696365206f7261636c6500000000000000000000000000000000000000006020820152905161010391906104ab565b6102036101db36600461053d565b60015460005460025460035460045469ffffffffffffffffffff948516941691939590929450565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610103565b61018c610248366004610558565b61030f565b61018c61025b366004610579565b6001805469ffffffffffffffffffff9586167fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090911617905560029290925560035560048054919092167fffffffffffffffffffffffffffffffffffffffff00ff00000000000000000000909116176b020000000000000000000000179055565b6102e461035f565b6040519015158152602001610103565b61018c6103023660046105bf565b600055565b610203610385565b600480548291907fffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff166b01000000000000000000000083600281111561035757610357610412565b021790555050565b600454600090610380906b010000000000000000000000900460ff166103d6565b905090565b60008060008060006004600c9054906101000a900460ff16156103a757600080fd5b505060015460005460025460035460045469ffffffffffffffffffff9485169893975091955093509190911690565b600060028260028111156103ec576103ec610412565b14156103f757600080fd5b600182600281111561040b5761040b610412565b1492915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016006831061047c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561049457600080fd5b813580151581146104a457600080fd5b9392505050565b600060208083528351808285015260005b818110156104d8578581018301518582016040015282016104bc565b818111156104ea576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803569ffffffffffffffffffff8116811461053857600080fd5b919050565b60006020828403121561054f57600080fd5b6104a48261051e565b60006020828403121561056a57600080fd5b8135600381106104a457600080fd5b6000806000806080858703121561058f57600080fd5b6105988561051e565b935060208501359250604085013591506105b46060860161051e565b905092959194509250565b6000602082840312156105d157600080fd5b503591905056fea264697066735822122014874f7a973b86501c4c1a8be32490fe902c8f088ee234d25f9b2497e19f9e5264736f6c634300080a003360806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d00011790553480156200003a57600080fd5b5060405162031ed638038062031ed68339810160408190526200005d91620015e8565b81816040516200006d9062001595565b604051809103906000f0801580156200008a573d6000803e3d6000fd5b5050600180546001600160a01b0319166001600160a01b038416908117909155604080516325abd85f60e11b81529051634b57b0be916004808201926020929091908290030181865afa158015620000e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200010c91906200162a565b73c4375b7de8af5a38a93548eb8453a498222c4ff26040516200012f90620015a3565b6001600160a01b03928316815291166020820152604001604051809103906000f08015801562000163573d6000803e3d6000fd5b50600380546001600160a01b0319166001600160a01b039290921691821790556040805163de28735960e01b8152905163de287359916004808201926020929091908290030181865afa158015620001bf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e591906200162a565b604051634910832f60e01b81527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526001600160a01b039190911690634910832f90602401600060405180830381600087803b1580156200023d57600080fd5b505af115801562000252573d6000803e3d6000fd5b50505050600360009054906101000a90046001600160a01b03166001600160a01b031663de2873596040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d091906200162a565b60035460405163f2fde38b60e01b81526001600160a01b03918216600482015291169063f2fde38b90602401600060405180830381600087803b1580156200031757600080fd5b505af11580156200032c573d6000803e3d6000fd5b505060035460015460408051636ca42ae360e01b815290516001600160a01b039384169550638874ff1f94509190921691636ca42ae39160048083019260009291908290030181865afa15801562000388573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620003b29190810190620016c5565b6040518263ffffffff1660e01b8152600401620003d09190620017b6565b600060405180830381600087803b158015620003eb57600080fd5b505af115801562000400573d6000803e3d6000fd5b50505050600360009054906101000a90046001600160a01b03166001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000458573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200047e91906200162a565b600280546001600160a01b0319166001600160a01b039290921691821790556040805163120d150d60e31b81529051639068a868916004808201926020929091908290030181865afa158015620004d9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004ff91906200162a565b600480546001600160a01b0319166001600160a01b0392831617815560025460408051631f94a27560e31b81529051919093169263fca513a892818101926020929091908290030181865afa1580156200055d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200058391906200162a565b600880546001600160a01b0319166001600160a01b0392831617905560025460408051630873769560e01b81529051919092169163087376959160048083019260209291908290030181865afa158015620005e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200060891906200162a565b600780546001600160a01b0319166001600160a01b039283161790556002546040805163c513c9bb60e01b81529051919092169163c513c9bb9160048083019260209291908290030181865afa15801562000667573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200068d91906200162a565b600680546001600160a01b0319166001600160a01b039283161790556001546040516367b4264560e01b81529116906367b4264590620006d29084906004016200184d565b602060405180830381865afa158015620006f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200071691906200162a565b600980546001600160a01b0319166001600160a01b0392831617905560035460408051630a55006360e21b815290519190921691632954018c9160048083019260209291908290030181865afa15801562000775573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200079b91906200162a565b6009546040516001600160a01b0390911690620007b890620015b2565b6001600160a01b03928316815291166020820152604001604051809103906000f080158015620007ec573d6000803e3d6000fd5b50600580546001600160a01b0319166001600160a01b039283169081179091556001549091169063eebab8ef90839062000825620011ec565b6200083290600a62001879565b6040518463ffffffff1660e01b815260040162000852939291906200189b565b600060405180830381600087803b1580156200086d57600080fd5b505af115801562000882573d6000803e3d6000fd5b505060065460055460405163d914cd4b60e01b81526001600160a01b0391821660048201529116925063d914cd4b9150602401600060405180830381600087803b158015620008d057600080fd5b505af1158015620008e5573d6000803e3d6000fd5b5050600f80546001600160801b031916670de0b6b3a76400001790555062000911925050620011ec9050565b6200091e90600a62001879565b600f80546001600160801b03908116600160801b9382168402818117938490556040805160a0810182529184169092178152939092041660208301526000919081016200096b84620012ab565b815260006020820181905260409182018190526005549151929350916001600160a01b039091169083908390620009a290620015c0565b620009b093929190620018c5565b604051809103906000f080158015620009cd573d6000803e3d6000fd5b509050806001600160a01b031663c12c21c06040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a0f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a3591906200162a565b600b60006101000a8154816001600160a01b0302191690836001600160a01b03160217905550806001600160a01b0316632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a9a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ac091906200162a565b600c60006101000a8154816001600160a01b0302191690836001600160a01b03160217905550806001600160a01b031663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000b25573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b4b91906200162a565b600d80546001600160a01b0319166001600160a01b03928316179055600654600b5460405163e26b2f6360e01b8152908316600482015291169063e26b2f6390602401600060405180830381600087803b15801562000ba957600080fd5b505af115801562000bbe573d6000803e3d6000fd5b5050600054600554604080516318caf8e360e31b81526001600160a01b039283166004808301919091526024820192909252604481019190915263141bdbdb60e21b60648201526201000090920416925063c657c7189150608401600060405180830381600087803b15801562000c3457600080fd5b505af115801562000c49573d6000803e3d6000fd5b5050600054600c8054604080516318caf8e360e31b81526001600160a01b039283166004820152602481019190915260448101929092526b43726564697446616361646560a01b606483015262010000909204909116925063c657c7189150608401600060405180830381600087803b15801562000cc657600080fd5b505af115801562000cdb573d6000803e3d6000fd5b5050600054600b54604080516318caf8e360e31b81526001600160a01b0392831660048201526024810191909152600d60448201526c21b932b234ba26b0b730b3b2b960991b60648201526201000090920416925063c657c7189150608401600060405180830381600087803b15801562000d5557600080fd5b505af115801562000d6a573d6000803e3d6000fd5b5050600054600d54604080516318caf8e360e31b81526001600160a01b0392831660048201526024810191909152601260448201527121b932b234ba21b7b73334b3bab930ba37b960711b60648201526201000090920416925063c657c7189150608401600060405180830381600087803b15801562000de957600080fd5b505af115801562000dfe573d6000803e3d6000fd5b50506001546001600160a01b0316915063eebab8ef90508473f39fd6e51aad88f6f4ce6ab8827279cfffb9226662000e35620011ec565b6040518463ffffffff1660e01b815260040162000e55939291906200189b565b600060405180830381600087803b15801562000e7057600080fd5b505af115801562000e85573d6000803e3d6000fd5b50506001546001600160a01b0316915063eebab8ef9050847390f79bf6eb2c4f870365e785982e1f101e93b90662000ebc620011ec565b6040518463ffffffff1660e01b815260040162000edc939291906200189b565b600060405180830381600087803b15801562000ef757600080fd5b505af115801562000f0c573d6000803e3d6000fd5b505060005460405163ca669fa760e01b815273f39fd6e51aad88f6f4ce6ab8827279cfffb922666004820152620100009091046001600160a01b0316925063ca669fa79150602401600060405180830381600087803b15801562000f6f57600080fd5b505af115801562000f84573d6000803e3d6000fd5b5050600954600b5460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529116925063095ea7b391506044016020604051808303816000875af115801562000fdf573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001005919062001989565b5060005460405163ca669fa760e01b81527390f79bf6eb2c4f870365e785982e1f101e93b9066004820152620100009091046001600160a01b03169063ca669fa790602401600060405180830381600087803b1580156200106557600080fd5b505af11580156200107a573d6000803e3d6000fd5b5050600954600b5460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529116925063095ea7b391506044016020604051808303816000875af1158015620010d5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010fb919062001989565b5060025460405163f2fde38b60e01b81527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526001600160a01b039091169063f2fde38b90602401600060405180830381600087803b1580156200115657600080fd5b505af11580156200116b573d6000803e3d6000fd5b505060075460405163f2fde38b60e01b81527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b158015620011c957600080fd5b505af1158015620011de573d6000803e3d6000fd5b5050505050505050620019e1565b600180546040516367b4264560e01b81526000926001600160a01b03909216916367b42645916200122191906004016200184d565b602060405180830381865afa1580156200123f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200126591906200162a565b6009546001600160a01b03908116911614620012955762001290670de0b6b3a764000060c862001879565b905090565b62001290670de0b6b3a7640000614e2062001879565b6040805160c08101825260026080820190815261232860a08301528152815180830183526005815261226060208281019190915282015281518083018352606092600092919082019080600387600a8111156200130c576200130c62001814565b146200131a5760036200131d565b60015b600a81111562001331576200133162001814565b815261206c6020918201529082526040805180820190915260048152611c84818301529101529050612454600a6000858281111562001374576200137462001814565b600a81111562001388576200138862001814565b815260208101919091526040908101600020805461ffff9390931661ffff19909316929092179091558051600480825260a0820190925281816020015b6040805180820190915260008082526020820152815260200190600190039081620013c557905050925060005b818110156200158d57828160048110620014105762001410620019ad565b602002015160200151600a6000858460048110620014325762001432620019ad565b602002015151600a8111156200144c576200144c62001814565b600a81111562001460576200146062001814565b815260208101919091526040908101600020805461ffff191661ffff9390931692909217909155805180820190915260015481906001600160a01b03166367b42645868560048110620014b757620014b7620019ad565b6020020151516040516001600160e01b031960e084901b168152620014e091906004016200184d565b602060405180830381865afa158015620014fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200152491906200162a565b6001600160a01b03168152602001848360048110620015475762001547620019ad565b60200201516020015161ffff168152508482815181106200156c576200156c620019ad565b602002602001018190525080806200158490620019c3565b915050620013f2565b505050919050565b6105e6806200bc5283390190565b62011105806200c23883390190565b6110a7806201d33d83390190565b62013af2806201e3e483390190565b6001600160a01b0381168114620015e557600080fd5b50565b60008060408385031215620015fc57600080fd5b82516200160981620015cf565b6020840151909250600b81106200161f57600080fd5b809150509250929050565b6000602082840312156200163d57600080fd5b81516200164a81620015cf565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156200168c576200168c62001651565b60405290565b604051601f8201601f191681016001600160401b0381118282101715620016bd57620016bd62001651565b604052919050565b60006020808385031215620016d957600080fd5b82516001600160401b0380821115620016f157600080fd5b818501915085601f8301126200170657600080fd5b8151818111156200171b576200171b62001651565b6200172b848260051b0162001692565b818152848101925060069190911b8301840190878211156200174c57600080fd5b928401925b81841015620017ab57604084890312156200176c5760008081fd5b6200177662001667565b84516200178381620015cf565b8152848601516200179481620015cf565b818701528352604093909301929184019162001751565b979650505050505050565b602080825282518282018190526000919060409081850190868401855b828110156200180757815180516001600160a01b0390811686529087015116868501529284019290850190600101620017d3565b5091979650505050505050565b634e487b7160e01b600052602160045260246000fd5b600b81106200184957634e487b7160e01b600052602160045260246000fd5b9052565b602081016200185d82846200182a565b92915050565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161562001896576200189662001863565b500290565b60608101620018ab82866200182a565b6001600160a01b0393909316602082015260400152919050565b6001600160a01b0384811682526060602080840182905285516001600160801b039081169285019290925285810151909116608084015260408086015160a085810152805161010086018190526000949392918301919085906101208801905b808310156200195657845180518816835286015161ffff168683015293850193600192909201919083019062001925565b5060608a01516001600160a01b031660c0890152608090990151151560e088015250909401949094525092949350505050565b6000602082840312156200199c57600080fd5b815180151581146200164a57600080fd5b634e487b7160e01b600052603260045260246000fd5b6000600019821415620019da57620019da62001863565b5060010190565b61a26180620019f16000396000f3fe60806040523480156200001157600080fd5b5060043610620001ad5760003560e01c806362eb33e311620000f5578063ba414fa61162000097578063de287359116200006e578063de2873591462000479578063f9aa028a146200049a578063fa7626d414620004bb57600080fd5b8063ba414fa6146200041c578063c12c21c01462000437578063d46b9330146200045857600080fd5b80637785ff5d11620000cc5780637785ff5d14620003da5780639408b63f14620003e45780639dd55b45146200040557600080fd5b806362eb33e314620003775780636b70b04c14620003985780636f307dc314620003b957600080fd5b80632f7a1881116200015f5780635e813a8b11620001365780635e813a8b146200030c5780635f7c9bd0146200032d57806362186905146200034657600080fd5b80632f7a188114620002be578063406c8e2f14620002df57806354cae56e146200030057600080fd5b80630e42bc5d11620001945780630e42bc5d14620002305780632630c12f14620002565780632954018c146200029d57600080fd5b80630bc772da14620001b25780630c75f80614620001f5575b600080fd5b600f54620001cf906fffffffffffffffffffffffffffffffff1681565b6040516fffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6200021c62000206366004620012dd565b600a6020526000908152604090205461ffff1681565b60405161ffff9091168152602001620001ec565b6200024762000241366004620012dd565b620004c9565b604051620001ec919062001307565b600854620002779073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001620001ec565b600254620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600c54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600154620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200030a6200081f565b005b600454620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200033762000b1a565b604051908152602001620001ec565b600f54620001cf9070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681565b600654620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600554620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600954620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200030a62000c0c565b600e54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200030a6200041636600462001398565b62000fd6565b6200042662001149565b6040519015158152602001620001ec565b600b54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600354620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600754620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600d54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600054620004269060ff1681565b6040805160c08101825260026080820190815261232860a08301528152815180830183526005815261226060208281019190915282015281518083018352606092600092919082019080600387600a8111156200052a576200052a620013c7565b14620005385760036200053b565b60015b600a8111156200054f576200054f620013c7565b815261206c6020918201529082526040805180820190915260048152611c84818301529101529050612454600a60008582811115620005925762000592620013c7565b600a811115620005a657620005a6620013c7565b815260208101919091526040908101600020805461ffff939093167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909316929092179091558051600480825260a0820190925281816020015b60408051808201909152600080825260208201528152602001906001900390816200060057905050925060005b8181101562000817578281600481106200064b576200064b620013f6565b602002015160200151600a60008584600481106200066d576200066d620013f6565b602002015151600a811115620006875762000687620013c7565b600a8111156200069b576200069b620013c7565b81526020810191909152604090810160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff93909316929092179091558051808201909152600154819073ffffffffffffffffffffffffffffffffffffffff166367b426458685600481106200071c576200071c620013f6565b6020020151516040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526200075d919060040162001425565b602060405180830381865afa1580156200077b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007a1919062001467565b73ffffffffffffffffffffffffffffffffffffffff168152602001848360048110620007d157620007d1620013f6565b60200201516020015161ffff16815250848281518110620007f657620007f6620013f6565b602002602001018190525080806200080e90620014b6565b9150506200062d565b505050919050565b6000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16906306447d5690602401600060405180830381600087803b158015620008a457600080fd5b505af1158015620008b9573d6000803e3d6000fd5b5050600b5460405173ffffffffffffffffffffffffffffffffffffffff909116925060009150600190620008ed90620012b3565b73ffffffffffffffffffffffffffffffffffffffff938416815292909116602083015215156040820152606001604051809103906000f08015801562000937573d6000803e3d6000fd5b50600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316908117909155600d546040517f526a41e80000000000000000000000000000000000000000000000000000000081526004810192909252600160248301529091169063526a41e890604401600060405180830381600087803b158015620009dc57600080fd5b505af1158015620009f1573d6000803e3d6000fd5b5050600d5473ffffffffffffffffffffffffffffffffffffffff16915063eb9606df905062000a22426001620014f2565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815264ffffffffff90911660048201526024015b600060405180830381600087803b15801562000a7b57600080fd5b505af115801562000a90573d6000803e3d6000fd5b50505050600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562000aff57600080fd5b505af115801562000b14573d6000803e3d6000fd5b50505050565b600180546040517f67b4264500000000000000000000000000000000000000000000000000000000815260009273ffffffffffffffffffffffffffffffffffffffff909216916367b426459162000b75919060040162001425565b602060405180830381865afa15801562000b93573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000bb9919062001467565b60095473ffffffffffffffffffffffffffffffffffffffff90811691161462000bf65762000bf1670de0b6b3a764000060c86200150d565b905090565b62000bf1670de0b6b3a7640000614e206200150d565b60025460405173ffffffffffffffffffffffffffffffffffffffff9091169062000c3690620012c1565b73ffffffffffffffffffffffffffffffffffffffff90911681526060602082018190526008908201527f446567656e4e4654000000000000000000000000000000000000000000000000608082015260a060408201819052600a908201527f476561722d446567656e0000000000000000000000000000000000000000000060c082015260e001604051809103906000f08015801562000cda573d6000803e3d6000fd5b50600e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283161790556000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015262010000909104909116906306447d5690602401600060405180830381600087803b15801562000d8e57600080fd5b505af115801562000da3573d6000803e3d6000fd5b5050600e546040517ffca3b5aa0000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff909116925063fca3b5aa9150602401600060405180830381600087803b15801562000e2757600080fd5b505af115801562000e3c573d6000803e3d6000fd5b5050600b54600e5460405173ffffffffffffffffffffffffffffffffffffffff92831694509116915060009062000e7390620012b3565b73ffffffffffffffffffffffffffffffffffffffff938416815292909116602083015215156040820152606001604051809103906000f08015801562000ebd573d6000803e3d6000fd5b50600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316908117909155600d546040517f526a41e80000000000000000000000000000000000000000000000000000000081526004810192909252600160248301529091169063526a41e890604401600060405180830381600087803b15801562000f6257600080fd5b505af115801562000f77573d6000803e3d6000fd5b5050600e54600c546040517f4610f6ac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015291169250634610f6ac915060240162000a60565b600081600860405162000fe990620012cf565b91825260ff166020820152604001604051809103906000f08015801562001014573d6000803e3d6000fd5b506000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291925062010000900473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b1580156200109c57600080fd5b505af1158015620010b1573d6000803e3d6000fd5b50506008546040517fe8a97a3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528581166024830152909116925063e8a97a3e9150604401600060405180830381600087803b1580156200112b57600080fd5b505af115801562001140573d6000803e3d6000fd5b50505050505050565b60008054610100900460ff16156200116a5750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620012ae5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000008284015282518083038401815260608301909352600092909162001212917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016200158b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526200124c91620015c9565b6000604051808303816000865af19150503d80600081146200128b576040519150601f19603f3d011682016040523d82523d6000602084013e62001290565b606091505b5091505080806020019051810190620012aa9190620015d7565b9150505b919050565b615e9780620015fc83390190565b6126cf806200749383390190565b6106ca8062009b6283390190565b600060208284031215620012f057600080fd5b8135600b81106200130057600080fd5b9392505050565b602080825282518282018190526000919060409081850190868401855b8281101562001365578151805173ffffffffffffffffffffffffffffffffffffffff16855286015161ffff1686850152928401929085019060010162001324565b5091979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff811681146200139557600080fd5b50565b60008060408385031215620013ac57600080fd5b8235620013b98162001372565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60208101600b831062001461577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000602082840312156200147a57600080fd5b8151620013008162001372565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415620014eb57620014eb62001487565b5060010190565b6000821982111562001508576200150862001487565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562001548576200154862001487565b500290565b6000815160005b8181101562001570576020818501810151868301520162001554565b8181111562001580576000828601525b509290920192915050565b7fffffffff00000000000000000000000000000000000000000000000000000000831681526000620015c160048301846200154d565b949350505050565b60006200130082846200154d565b600060208284031215620015ea57600080fd5b815180151581146200130057600080fdfe6101406040523480156200001257600080fd5b5060405162005e9738038062005e97833981016040819052620000359162000198565b60016000556001600160a01b0383166200006257604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038316608081905260408051636f307dc360e01b81529051636f307dc3916004808201926020929091908290030181865afa158015620000ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d39190620001ea565b6001600160a01b031660a0816001600160a01b031681525050826001600160a01b0316634f0e0ef36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200012b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001519190620001ea565b6001600160a01b0390811660c0529190911660e0819052151561010052151561012052506200020f565b80516001600160a01b03811681146200019357600080fd5b919050565b600080600060608486031215620001ae57600080fd5b620001b9846200017b565b9250620001c9602085016200017b565b915060408401518015158114620001df57600080fd5b809150509250925092565b600060208284031215620001fd57600080fd5b62000208826200017b565b9392505050565b60805160a05160c05160e0516101005161012051615a86620004116000396000818161061101528181612fb5015261481f01526000818161031701528181610dde015281816144f901526146e5015260008181610557015281816146a901526147a901526000818161034b0152818161387d015261392d01526000818161047301528181611bfe0152818161274f0152818161280d0152818161366a01526137dd015260008181610665015281816109d801528181610b0301528181610bd501528181610cdd01528181610e6501528181610fe30152818161114e0152818161120e0152818161132e015281816114510152818161162b01528181611708015281816117e0015281816119e501528181611b1201528181611d9501528181611ed5015281816120040152818161216801528181612290015281816123c601528181612568015281816126390152818161266f0152818161293d01528181612a2101528181612a8a01528181612bde01528181612d2601528181612e6801528181612ec2015281816130a10152818161311b015281816131b401528181613341015281816134c10152818161358a0152818161372f01528181613a1a01528181613b2e01528181613dbb015281816142200152818161432801528181614492015281816148e7015281816149e801528181614aae0152614d8f0152615a866000f3fe6080604052600436106102695760003560e01c8063860aefcf11610153578063c7de38a6116100cb578063dfd594651161007f578063eb9606df11610064578063eb9606df1461081e578063f9eaee0d1461083e578063ffd9b9071461085e57600080fd5b8063dfd59465146107de578063e1f21c67146107fe57600080fd5b8063cff0ab96116100b0578063cff0ab96146106ef578063d9ccbec114610783578063dcf65482146107be57600080fd5b8063c7de38a6146106a7578063caa5c23f146106dc57600080fd5b80639c55a05411610122578063b55bb84b11610107578063b55bb84b14610633578063c12c21c014610653578063c690908a1461068757600080fd5b80639c55a054146105df578063b1836d32146105ff57600080fd5b8063860aefcf146104db5780639408b63f146105455780639b67ab30146105795780639be0536a146105bd57600080fd5b80635d91a0e0116101e65780636d19b486116101b55780637071b7c51161019a5780637071b7c51461049557806379c0ef91146104a857806382871ace146104c857600080fd5b80636d19b486146104415780636f307dc31461046157600080fd5b80635d91a0e0146103e85780635f73fbec146103fb578063601d66f61461040e5780636c8f225d1461042e57600080fd5b80633d9287fa1161023d5780635019e20a116102225780635019e20a1461039257806354fd4d50146103b257806359781034146103d557600080fd5b80633d9287fa146103055780634f0e0ef31461033957600080fd5b8062842b571461026e578063256ac915146102905780632a7ba1f7146102c55780632b7c7b11146102e5575b600080fd5b34801561027a57600080fd5b5061028e6102893660046151bf565b61087e565b005b34801561029c57600080fd5b506102b06102ab3660046151f8565b61098e565b60405190151581526020015b60405180910390f35b3480156102d157600080fd5b5061028e6102e0366004615215565b610a61565b3480156102f157600080fd5b5061028e610300366004615215565b610c3b565b34801561031157600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561034557600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102bc565b34801561039e57600080fd5b5061028e6103ad3660046151f8565b610d6a565b3480156103be57600080fd5b506103c7600281565b6040519081526020016102bc565b61028e6103e336600461522e565b61108c565b61028e6103f63660046152bb565b611275565b61028e610409366004615340565b611589565b34801561041a57600080fd5b5061028e6104293660046153d8565b6117de565b61028e61043c36600461541b565b611900565b34801561044d57600080fd5b506102b061045c3660046151f8565b611c31565b34801561046d57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b61028e6104a336600461546e565b611c60565b3480156104b457600080fd5b5061036d6104c3366004615215565b611f3e565b61028e6104d63660046152bb565b611f4b565b3480156104e757600080fd5b5060025461051c906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041682565b604080516fffffffffffffffffffffffffffffffff9384168152929091166020830152016102bc565b34801561055157600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561058557600080fd5b506004546040805167ffffffffffffffff608084901c1681526fffffffffffffffffffffffffffffffff9092166020830152016102bc565b3480156105c957600080fd5b506105d261227d565b6040516102bc91906154e2565b3480156105eb57600080fd5b5061028e6105fa36600461553c565b61228e565b34801561060b57600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561063f57600080fd5b5061028e61064e3660046151f8565b6123c4565b34801561065f57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561069357600080fd5b5061028e6106a23660046151f8565b6124c6565b3480156106b357600080fd5b506106c76106c23660046151f8565b612668565b604080519283526020830191909152016102bc565b61028e6106ea366004615557565b61289b565b3480156106fb57600080fd5b5060015461074e906fffffffffffffffffffffffffffffffff811690700100000000000000000000000000000000810460ff169071010000000000000000000000000000000000900464ffffffffff1683565b604080516fffffffffffffffffffffffffffffffff9094168452911515602084015264ffffffffff16908201526060016102bc565b34801561078f57600080fd5b506102b061079e366004615599565b600360209081526000928352604080842090915290825290205460ff1681565b3480156107ca57600080fd5b5061028e6107d93660046151f8565b612a88565b3480156107ea57600080fd5b506103c76107f93660046151f8565b612b86565b34801561080a57600080fd5b5061028e61081936600461522e565b612c6d565b34801561082a57600080fd5b5061028e6108393660046155c7565b612ec0565b34801561084a57600080fd5b506102b06108593660046151f8565b613057565b34801561086a57600080fd5b5061028e6108793660046155ee565b6131b2565b600260005414156108f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b6002600090815573ffffffffffffffffffffffffffffffffffffffff8316808252600360209081526040808420338086529083529381902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081527f9b3258bc4904fd6426b99843e206c6c7cdb1fd0f040121c25b71dafbb3851ee0910160405180910390a350506001600055565b6040517f055ee9b500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063055ee9b590602401602060405180830381865afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a43919061560b565b73ffffffffffffffffffffffffffffffffffffffff16141592915050565b60026000541415610ace576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610b5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b83919061560b565b9050610b903382846132eb565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906395373018906024015b600060405180830381600087803b158015610c1a57600080fd5b505af1158015610c2e573d6000803e3d6000fd5b5050600160005550505050565b60026000541415610ca8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610d39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5d919061560b565b9050610b90338284613411565b60026000541415610dd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000557f000000000000000000000000000000000000000000000000000000000000000015610e34576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610ec1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee5919061560b565b33600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915290205490915060ff16610f52576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f5d82613583565b5090508015610f98576040517ff713841e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b15801561102757600080fd5b505af115801561103b573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692503391507f93c70cc9715bef0d83edf2095f3595402279d274f402a73ffc17f1bcb19d863d90600090a35050600160005550565b600260005414156110f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611106613875565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063e958b70490602401602060405180830381865afa158015611197573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bb919061560b565b90506111c9848285856139b7565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401600060405180830381600087803b15801561125257600080fd5b505af1158015611266573d6000803e3d6000fd5b50506001600055505050505050565b600260005414156112e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611375573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611399919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166113e8576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806113f483613583565b915091508161142f576040517f1fdd676f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611437613875565b831561144d5761144d85858b8660016000613ae3565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632362a2d88b600185338e8e8e6040518863ffffffff1660e01b81526004016114b59796959493929190615663565b6020604051808303816000875af11580156114d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f891906156bf565b90508873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f7dfecd8419723a9d3954585a30c2a270165d70aafa146c11c1e1b88ae14390648460405161157091815260200190565b60405180910390a4505060016000555050505050505050565b600260005414156115f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ab919061560b565b90506116b5613875565b81156116cb576116cb8383338460016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d89061174a903390600090819083908d908d908d90600401615663565b6020604051808303816000875af1158015611769573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178d91906156bf565b5060405173ffffffffffffffffffffffffffffffffffffffff87169033907f460ad03b1cf79b1d64d3aefa28475f110ab66e84649c52bb41ed796b9b39198190600090a35050600160005550505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611849573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118d1576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff90811670010000000000000000000000000000000002911617600255565b6002600054141561196d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000908155606461198461ffff851687615707565b61198e9190615744565b9050611999816144f7565b6119a2816145e8565b6119ab84614668565b6119b3613875565b6040517f172c48c7000000000000000000000000000000000000000000000000000000008152600060048201819052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a64919061577f565b61ffff169150611a789050816127106157ae565b611a829083615707565b611a8c8288615707565b11611ac3576040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff86811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611b5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b81919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638587604051611bef92919091825261ffff16602082015260400190565b60405180910390a3611c2386827f00000000000000000000000000000000000000000000000000000000000000008a6139b7565b505060016000555050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526006602052604081205415155b92915050565b60026000541415611ccd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611cdb856144f7565b611ce484614668565b611ced856145e8565b600154700100000000000000000000000000000000900460ff1615611d3e576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d46613875565b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff85811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611de0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e04919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638885604051611e7292919091825261ffff16602082015260400190565b60405180910390a38215611e9057611e908484878460006001613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015611f1957600080fd5b505af1158015611f2d573d6000803e3d6000fd5b505060016000555050505050505050565b6000611c5a60058361480f565b60026000541415611fb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa15801561204b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206f919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166120be576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120c661481b565b6120fc576040517f7e52ccb400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061210782612668565b509050612112613875565b82156121285761212884848a8560016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d8906121aa908c90600290879033908f908f908f90600401615663565b6020604051808303816000875af11580156121c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ed91906156bf565b90508773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167ffada13ff2d5e1a1d9da37ad4a4130893b34e3c69c32b17f87ec31fd661b867078460405161226591815260200190565b60405180910390a45050600160005550505050505050565b6060612289600561486b565b905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612381576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561242f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612453919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146124b7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614878565b5050565b60026000541415612533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156125c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e8919061560b565b90506125f4818361489a565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401610c00565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126fc919061560b565b905060008061270b8387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156127a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127c991906156bf565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015291965061271091851690637afb010490604401602060405180830381865afa158015612863573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061288791906156bf565b6128919190615744565b9350505050915091565b60026000541415612908576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129bd919061560b565b90506129c7613875565b8115612a7e576129dc83833384600080613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015612a6557600080fd5b505af1158015612a79573d6000803e3d6000fd5b505050505b5050600160005550565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612af3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b17919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b7b576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614c92565b600080612b9283612668565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152919350600092507f000000000000000000000000000000000000000000000000000000000000000090911690633192195c906024016040805180830381865afa158015612c26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4a91906157c5565b9150819050612c5b61271084615707565b612c659190615744565b949350505050565b60026000541415612cda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063fdd5764590602401602060405180830381865afa158015612d6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d91919061560b565b73ffffffffffffffffffffffffffffffffffffffff161480612dd7575073ffffffffffffffffffffffffffffffffffffffff831660009081526006602052604090205415155b15612e0e576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612eac57600080fd5b505af1158015611c23573d6000803e3d6000fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f4f919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612fb3576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000061300a576040517f50dd11fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805464ffffffffff90921671010000000000000000000000000000000000027fffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffffff909216919091179055565b6040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063f67c5bd090602401602060405180830381865afa1580156130e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061310c91906156bf565b905080158015906131ab5750807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015613184573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a891906156bf565b16155b9392505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561321d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613241919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146132a5576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018054911515700100000000000000000000000000000000027fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff909216919091179055565b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600060448301819052917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561338c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133b091906156bf565b90506133bb816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f98274bf834d179ee08dc0604071b0dc90b54731bd5f725a5a96a39a86bce025a8360405161340391815260200190565b60405180910390a250505050565b61341a816144f7565b600154700100000000000000000000000000000000900460ff161561346b576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600160448301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561350c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061353091906156bf565b905061353b816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f9cac51154cc0d835e2f9c9d1f59a9344588cee107f4203bf58a8c797e3a58c458360405161340391815260200190565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613617919061560b565b90506000806136268387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156136c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136e491906156bf565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529195506000917f00000000000000000000000000000000000000000000000000000000000000001690633192195c906024016040805180830381865afa158015613775573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061379991906157c5565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350600092506127109187169063f9a6503090604401602060405180830381865afa158015613837573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061385b91906156bf565b6138659190615707565b9092109794965093945050505050565b34156139b5577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156138e357600080fd5b505af11580156138f7573d6000803e3d6000fd5b50506040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201523460248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16935063a9059cbb925060440190506020604051808303816000875af115801561398f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139b391906157e9565b505b565b6139c084614cb4565b6040517f830aa74500000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f0000000000000000000000000000000000000000000000000000000000000000169063830aa74590608401600060405180830381600087803b158015613a5e57600080fd5b505af1158015613a72573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fa32435755c235de2976ed44a75a2f85cb01faf0c894f639fe0c32bb9455fea8f83604051613ad591815260200190565b60405180910390a350505050565b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301523060248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b158015613b7257600080fd5b505af1158015613b86573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff871692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a28460005b8181101561441d5736888883818110613bea57613bea615806565b9050602002810190613bfc9190615835565b90506004613c0d6020830183615873565b90501015613c47576040517fe2b0e50600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b30613c5560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16141561421c578415613ca9576040517f5fb9107f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613cb86020830183615873565b613cc1916158d8565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167f59781034000000000000000000000000000000000000000000000000000000001415613e3c5760008080613d1e6020860186615873565b613d2c916004908290615920565b810190613d39919061522e565b925092509250613e34838c73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614613e2b576040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015613e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e26919061560b565b613e2d565b8b5b84846139b7565b505050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2b7c7b11000000000000000000000000000000000000000000000000000000001415613ec757600194506000613e996020840184615873565b613ea7916004908290615920565b810190613eb49190615215565b9050613ec1898983613411565b50614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2a7ba1f7000000000000000000000000000000000000000000000000000000001415613f80578415613f49576040517fc0b0caa800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613f586020840184615873565b613f66916004908290615920565b810190613f739190615215565b9050613ec18989836132eb565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f233a8caa0000000000000000000000000000000000000000000000000000000014156140e457600080613fda6020850185615873565b613fe8916004908290615920565b810190613ff5919061594a565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c8116600483015292945090925082918416906370a0823190602401602060405180830381865afa158015614069573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061408d91906156bf565b10156140dd576040517fa5ac537300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016108e7565b5050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fc690908a00000000000000000000000000000000000000000000000000000000141561416457600061413d6020840184615873565b61414b916004908290615920565b81019061415891906151f8565b9050613ec1888261489a565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f23e27a640000000000000000000000000000000000000000000000000000000014156141e45760006141bd6020840184615873565b6141cb916004908290615920565b8101906141d891906151f8565b9050613ec18882614d42565b6040517f1e9e7e7a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50614414565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff68754361426760208501856151f8565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156142d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142f4919061560b565b73ffffffffffffffffffffffffffffffffffffffff16148061436d575073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001661435560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16145b156143a4576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6144126143b46020830183615873565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506143f69250505060208401846151f8565b73ffffffffffffffffffffffffffffffffffffffff1690614e39565b505b50600101613bcf565b506040517f60c8e8938c9a0c0d88a98d6f1c562ce68077e12bf3edb8047378f2f736cb45b490600090a16040517fe1998cf900000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff86811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b1580156144d657600080fd5b505af11580156144ea573d6000803e3d6000fd5b5050505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006139b3576001546fffffffffffffffffffffffffffffffff9081169081146124c257600454608081901c906fffffffffffffffffffffffffffffffff16600067ffffffffffffffff8316431461456e578461458a565b61458a6fffffffffffffffffffffffffffffffff831686615976565b9050838111156145c6576040517f675f1a5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff81164360801b176004555050505050565b6002546fffffffffffffffffffffffffffffffff16811080614631575060025470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681115b156139b3576040517fce16799400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61467061481b565b156146a7576040517f63fc31c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1615614806577f0000000000000000000000000000000000000000000000000000000000000000801561472657503373ffffffffffffffffffffffffffffffffffffffff821614155b1561475d576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600160248301527f00000000000000000000000000000000000000000000000000000000000000001690639dc29fac90604401600060405180830381600087803b1580156147ed57600080fd5b505af1158015614801573d6000803e3d6000fd5b505050505b6139b381614cb4565b60006131ab8383614e7b565b60007f0000000000000000000000000000000000000000000000000000000000000000801561228957505060015471010000000000000000000000000000000000900464ffffffffff1642101590565b606060006131ab83614ea5565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f01565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561492b57600080fd5b505af115801561493f573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527fdf498aa1c340e992665d6fb4f3be8436d452c45a630cb6d7fab7963da39bac8793500190505b60405180910390a15050565b6040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600091829160019183917f00000000000000000000000000000000000000000000000000000000000000001690638991b2f190602401602060405180830381865afa158015614a2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a5391906156bf565b90505b808211614c895780821615614c7d576040517fe75538c700000000000000000000000000000000000000000000000000000000815260048101839052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e75538c7906024016040805180830381865afa158015614af4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b18919061577f565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529294509092506000918416906370a0823190602401602060405180830381865afa158015614b8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bb191906156bf565b90506001811115614c79576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff8481166024830152600091908b169063f9a6503090604401602060405180830381865afa158015614c33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c5791906156bf565b978801979050614c6b61ffff841682615707565b614c759088615976565b9650505b5050505b600182901b9150614a56565b50509250929050565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f50565b3373ffffffffffffffffffffffffffffffffffffffff821614801590614d0b575033600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16155b156139b3576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b158015614dd357600080fd5b505af1158015614de7573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527f69db9e9764da61b6681b89fb0f5be018506e0342036e56b59c3015a620d60977935001905061498d565b60606131ab83836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250615043565b6000826000018281548110614e9257614e92615806565b9060005260206000200154905092915050565b606081600001805480602002602001604051908101604052809291908181526020018280548015614ef557602002820191906000526020600020905b815481526020019060010190808311614ee1575b50505050509050919050565b6000818152600183016020526040812054614f4857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611c5a565b506000611c5a565b60008181526001830160205260408120548015615039576000614f746001836157ae565b8554909150600090614f88906001906157ae565b9050818114614fed576000866000018281548110614fa857614fa8615806565b9060005260206000200154905080876000018481548110614fcb57614fcb615806565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080614ffe57614ffe61598e565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611c5a565b6000915050611c5a565b6060612c65848460008585843b6150b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108e7565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516150df91906159ed565b60006040518083038185875af1925050503d806000811461511c576040519150601f19603f3d011682016040523d82523d6000602084013e615121565b606091505b509150915061513182828661513c565b979650505050505050565b6060831561514b5750816131ab565b82511561515b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e791906159ff565b73ffffffffffffffffffffffffffffffffffffffff811681146139b357600080fd5b80151581146139b357600080fd5b600080604083850312156151d257600080fd5b82356151dd8161518f565b915060208301356151ed816151b1565b809150509250929050565b60006020828403121561520a57600080fd5b81356131ab8161518f565b60006020828403121561522757600080fd5b5035919050565b60008060006060848603121561524357600080fd5b833561524e8161518f565b9250602084013561525e8161518f565b929592945050506040919091013590565b60008083601f84011261528157600080fd5b50813567ffffffffffffffff81111561529957600080fd5b6020830191508360208260051b85010111156152b457600080fd5b9250929050565b60008060008060008060a087890312156152d457600080fd5b86356152df8161518f565b955060208701356152ef8161518f565b9450604087013593506060870135615306816151b1565b9250608087013567ffffffffffffffff81111561532257600080fd5b61532e89828a0161526f565b979a9699509497509295939492505050565b60008060008060006080868803121561535857600080fd5b85356153638161518f565b945060208601359350604086013561537a816151b1565b9250606086013567ffffffffffffffff81111561539657600080fd5b6153a28882890161526f565b969995985093965092949392505050565b80356fffffffffffffffffffffffffffffffff811681146153d357600080fd5b919050565b600080604083850312156153eb57600080fd5b6153f4836153b3565b9150615402602084016153b3565b90509250929050565b61ffff811681146139b357600080fd5b6000806000806080858703121561543157600080fd5b8435935060208501356154438161518f565b925060408501356154538161540b565b915060608501356154638161540b565b939692955090935050565b60008060008060006080868803121561548657600080fd5b8535945060208601356154988161518f565b9350604086013567ffffffffffffffff8111156154b457600080fd5b6154c08882890161526f565b90945092505060608601356154d48161540b565b809150509295509295909350565b6020808252825182820181905260009190848201906040850190845b8181101561553057835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016154fe565b50909695505050505050565b60006020828403121561554e57600080fd5b6131ab826153b3565b6000806020838503121561556a57600080fd5b823567ffffffffffffffff81111561558157600080fd5b61558d8582860161526f565b90969095509350505050565b600080604083850312156155ac57600080fd5b82356155b78161518f565b915060208301356151ed8161518f565b6000602082840312156155d957600080fd5b813564ffffffffff811681146131ab57600080fd5b60006020828403121561560057600080fd5b81356131ab816151b1565b60006020828403121561561d57600080fd5b81516131ab8161518f565b6003811061565f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b73ffffffffffffffffffffffffffffffffffffffff888116825260e082019061568f602084018a615628565b6040830197909752948616606082015292909416608083015260a082015291151560c09092019190915292915050565b6000602082840312156156d157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561573f5761573f6156d8565b500290565b60008261577a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000806040838503121561579257600080fd5b825161579d8161518f565b60208401519092506151ed8161540b565b6000828210156157c0576157c06156d8565b500390565b600080604083850312156157d857600080fd5b505080516020909101519092909150565b6000602082840312156157fb57600080fd5b81516131ab816151b1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc183360301811261586957600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126158a857600080fd5b83018035915067ffffffffffffffff8211156158c357600080fd5b6020019150368190038213156152b457600080fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156159185780818660040360031b1b83161692505b505092915050565b6000808585111561593057600080fd5b8386111561593d57600080fd5b5050820193919092039150565b6000806040838503121561595d57600080fd5b82356159688161518f565b946020939093013593505050565b60008219821115615989576159896156d8565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60005b838110156159d85781810151838201526020016159c0565b838111156159e7576000848401525b50505050565b600082516158698184602087016159bd565b6020815260008251806020840152615a1e8160408501602087016159bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea2646970667358221220a3f4a705ab580a6ada1e438cd2ee4abc001b62d1d171fce12c41994900fef21664736f6c634300080a003360c06040523480156200001157600080fd5b50604051620026cf380380620026cf833981016040819052620000349162000324565b82828281600090805190602001906200004f92919062000194565b5080516200006590600190602084019062000194565b50506006805460ff19169055506001600160a01b0381166200009a57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000d9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ff9190620003a1565b6001600160a01b03166080816001600160a01b03168152505050826001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000158573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200017e9190620003a1565b6001600160a01b031660a0525062000403915050565b828054620001a290620003c6565b90600052602060002090601f016020900481019282620001c6576000855562000211565b82601f10620001e157805160ff191683800117855562000211565b8280016001018555821562000211579182015b8281111562000211578251825591602001919060010190620001f4565b506200021f92915062000223565b5090565b5b808211156200021f576000815560010162000224565b80516001600160a01b03811681146200025257600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200027f57600080fd5b81516001600160401b03808211156200029c576200029c62000257565b604051601f8301601f19908116603f01168101908282118183101715620002c757620002c762000257565b81604052838152602092508683858801011115620002e457600080fd5b600091505b83821015620003085785820183015181830184015290820190620002e9565b838211156200031a5760008385830101525b9695505050505050565b6000806000606084860312156200033a57600080fd5b62000345846200023a565b60208501519093506001600160401b03808211156200036357600080fd5b62000371878388016200026d565b935060408601519150808211156200038857600080fd5b5062000397868287016200026d565b9150509250925092565b600060208284031215620003b457600080fd5b620003bf826200023a565b9392505050565b600181811c90821680620003db57607f821691505b60208210811415620003fd57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a0516122756200045a6000396000610a9a015260008181610386015281816106db0152818161089101528181610f15015281816110010152818161115b015281816112f401526114f901526122756000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80636352211e116100f9578063a0bcfc7f11610097578063b88d4fde11610071578063b88d4fde146103a8578063c87b56dd146103b6578063e985e9c5146103c9578063fca3b5aa1461041257600080fd5b8063a0bcfc7f14610360578063a22cb46514610373578063a50cf2c81461038157600080fd5b80638456cb59116100d35780638456cb591461032a57806389406ff51461033257806395d89b41146103455780639dc29fac1461034d57600080fd5b80636352211e146102fc5780636c0360eb1461030f57806370a082311461031757600080fd5b80633f4ba83a116101665780634610f6ac116101405780634610f6ac146102b357806354fd4d50146102c6578063576cd2d1146102ce5780635c975abb146102f157600080fd5b80633f4ba83a1461029857806340c10f19146102a057806342842e0e1461028a57600080fd5b8063081812fc116101a2578063081812fc1461024b578063095ea7b31461025e57806318160ddd1461027357806323b872dd1461028a57600080fd5b806301ffc9a7146101c957806306fdde03146101f15780630754617214610206575b600080fd5b6101dc6101d7366004611cc6565b610425565b60405190151581526020015b60405180910390f35b6101f961050a565b6040516101e89190611d38565b6008546102269073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e8565b610226610259366004611d89565b61059c565b61027161026c366004611dc7565b61067b565b005b61027c60075481565b6040519081526020016101e8565b61027161026c366004611df3565b6102716106ad565b6102716102ae366004611dc7565b61079b565b6102716102c1366004611e34565b610863565b61027c600181565b6101dc6102dc366004611e34565b60096020526000908152604090205460ff1681565b60065460ff166101dc565b61022661030a366004611d89565b610cd9565b6101f9610d8b565b61027c610325366004611e34565b610e19565b610271610ee7565b610271610340366004611e34565b610fd3565b6101f9611103565b61027161035b366004611dc7565b611112565b61027161036e366004611e51565b6112c6565b61027161026c366004611ed1565b6102267f000000000000000000000000000000000000000000000000000000000000000081565b61027161026c366004611f39565b6101f96103c4366004611d89565b6113bb565b6101dc6103d7366004612037565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205460ff1690565b610271610420366004611e34565b6114cb565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd0000000000000000000000000000000000000000000000000000000014806104b857507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061050457507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60606000805461051990612065565b80601f016020809104026020016040519081016040528092919081815260200182805461054590612065565b80156105925780601f1061056757610100808354040283529160200191610592565b820191906000526020600020905b81548152906001019060200180831161057557829003601f168201915b5050505050905090565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff16610652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084015b60405180910390fd5b5060009081526004602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b6040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa158015610737573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075b91906120b9565b610791576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107996115f6565b565b60085473ffffffffffffffffffffffffffffffffffffffff1633146107ec576040517f5c2967f500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006107f783610e19565b905060005b82811015610846576000816108278473ffffffffffffffffffffffffffffffffffffffff8816612105565b6108319190612105565b905061083d85826116d7565b506001016107fc565b5081600760008282546108599190612105565b9091555050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156108ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091191906120b9565b610947576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163b610995576040517f9c01f6a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff1663c12c21c06040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610a1c575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610a199181019061211d565b60015b610a52576040517f9c01f6a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f6fbc6f6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192507f000000000000000000000000000000000000000000000000000000000000000090911690636fbc6f6b90602401602060405180830381865afa158015610ae3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0791906120b9565b1580610bad57503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16639408b63f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b94919061211d565b73ffffffffffffffffffffffffffffffffffffffff1614155b80610c5257508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c39919061211d565b73ffffffffffffffffffffffffffffffffffffffff1614155b15610c89576040517f9c01f6a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff16600090815260096020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff1680610504576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e00000000000000000000000000000000000000000000006064820152608401610649565b600a8054610d9890612065565b80601f0160208091040260200160405190810160405280929190818152602001828054610dc490612065565b8015610e115780601f10610de657610100808354040283529160200191610e11565b820191906000526020600020905b815481529060010190602001808311610df457829003601f168201915b505050505081565b600073ffffffffffffffffffffffffffffffffffffffff8216610ebe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152608401610649565b5073ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015610f71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9591906120b9565b610fcb576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610799611899565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561105d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108191906120b9565b6110b7576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff16600090815260096020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b60606001805461051990612065565b3360009081526009602052604090205460ff161580156111dd57506040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156111b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111db91906120b9565b155b15611214576040517f1e0d048500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061121f83610e19565b90508181101561125b576040517f90c9142d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b828110156112b357600060018261128b8573ffffffffffffffffffffffffffffffffffffffff8916612105565b611295919061213a565b61129f919061213a565b90506112aa81611959565b5060010161125e565b508160076000828254610859919061213a565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611350573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137491906120b9565b6113aa576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113b6600a8383611c0f565b505050565b60008181526002602052604090205460609073ffffffffffffffffffffffffffffffffffffffff1661146f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006064820152608401610649565b6000611479611a26565b9050600081511161149957604051806020016040528060008152506114c4565b806114a384611a35565b6040516020016114b4929190612151565b6040516020818303038152906040525b9392505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611555573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157991906120b9565b6115af576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60065460ff16611662576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610649565b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b73ffffffffffffffffffffffffffffffffffffffff8216611754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610649565b60008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff16156117e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610649565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805460019290611816908490612105565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60065460ff1615611906576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610649565b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586116ad3390565b600061196482610cd9565b9050611971600083611b6f565b73ffffffffffffffffffffffffffffffffffffffff811660009081526003602052604081208054600192906119a790849061213a565b909155505060008281526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555183919073ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6060600a805461051990612065565b606081611a7557505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611a9f5780611a8981612180565b9150611a989050600a836121e8565b9150611a79565b60008167ffffffffffffffff811115611aba57611aba611f0a565b6040519080825280601f01601f191660200182016040528015611ae4576020820181803683370190505b5090505b8415611b6757611af960018361213a565b9150611b06600a866121fc565b611b11906030612105565b60f81b818381518110611b2657611b26612210565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611b60600a866121e8565b9450611ae8565b949350505050565b600081815260046020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091558190611bc982610cd9565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b828054611c1b90612065565b90600052602060002090601f016020900481019282611c3d5760008555611ca1565b82601f10611c74578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00823516178555611ca1565b82800160010185558215611ca1579182015b82811115611ca1578235825591602001919060010190611c86565b50611cad929150611cb1565b5090565b5b80821115611cad5760008155600101611cb2565b600060208284031215611cd857600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146114c457600080fd5b60005b83811015611d23578181015183820152602001611d0b565b83811115611d32576000848401525b50505050565b6020815260008251806020840152611d57816040850160208701611d08565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b600060208284031215611d9b57600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff81168114611dc457600080fd5b50565b60008060408385031215611dda57600080fd5b8235611de581611da2565b946020939093013593505050565b600080600060608486031215611e0857600080fd5b8335611e1381611da2565b92506020840135611e2381611da2565b929592945050506040919091013590565b600060208284031215611e4657600080fd5b81356114c481611da2565b60008060208385031215611e6457600080fd5b823567ffffffffffffffff80821115611e7c57600080fd5b818501915085601f830112611e9057600080fd5b813581811115611e9f57600080fd5b866020828501011115611eb157600080fd5b60209290920196919550909350505050565b8015158114611dc457600080fd5b60008060408385031215611ee457600080fd5b8235611eef81611da2565b91506020830135611eff81611ec3565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060008060808587031215611f4f57600080fd5b8435611f5a81611da2565b93506020850135611f6a81611da2565b925060408501359150606085013567ffffffffffffffff80821115611f8e57600080fd5b818701915087601f830112611fa257600080fd5b813581811115611fb457611fb4611f0a565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715611ffa57611ffa611f0a565b816040528281528a602084870101111561201357600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000806040838503121561204a57600080fd5b823561205581611da2565b91506020830135611eff81611da2565b600181811c9082168061207957607f821691505b602082108114156120b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156120cb57600080fd5b81516114c481611ec3565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115612118576121186120d6565b500190565b60006020828403121561212f57600080fd5b81516114c481611da2565b60008282101561214c5761214c6120d6565b500390565b60008351612163818460208801611d08565b835190830190612177818360208801611d08565b01949350505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156121b2576121b26120d6565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826121f7576121f76121b9565b500490565b60008261220b5761220b6121b9565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea2646970667358221220ffdd83a2fc9a158347ca248f021e63fcef3a7985b3deb793f75cd1835b068aab64736f6c634300080a003360a060405234801561001057600080fd5b506040516106ca3803806106ca83398101604081905261002f9161006c565b60009190915560ff166080526001805460506001600160501b031991821681179092556004805490911690911790554260028190556003556100a2565b6000806040838503121561007f57600080fd5b82519150602083015160ff8116811461009757600080fd5b809150509250929050565b60805161060e6100bc600039600060d3015261060e6000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80639a6fc8f511610081578063d62ada111161005b578063d62ada11146102dc578063f7a30806146102f4578063feaf968c1461030757600080fd5b80639a6fc8f5146101cd578063bd18ad531461023a578063cd653afc1461024d57600080fd5b806354fd4d50116100b257806354fd4d501461012d57806367e8d83d1461013c5780637284e4161461018e57600080fd5b8063313ce567146100ce5780633fd0875f1461010c575b600080fd5b6100f57f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020015b60405180910390f35b6004546a0100000000000000000000900460ff166040516101039190610441565b60405160018152602001610103565b61018c61014a366004610482565b600480549115156c01000000000000000000000000027fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff909216919091179055565b005b604080518082018252600c81527f7072696365206f7261636c6500000000000000000000000000000000000000006020820152905161010391906104ab565b6102036101db36600461053d565b60015460005460025460035460045469ffffffffffffffffffff948516941691939590929450565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610103565b61018c610248366004610558565b61030f565b61018c61025b366004610579565b6001805469ffffffffffffffffffff9586167fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090911617905560029290925560035560048054919092167fffffffffffffffffffffffffffffffffffffffff00ff00000000000000000000909116176b020000000000000000000000179055565b6102e461035f565b6040519015158152602001610103565b61018c6103023660046105bf565b600055565b610203610385565b600480548291907fffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff166b01000000000000000000000083600281111561035757610357610412565b021790555050565b600454600090610380906b010000000000000000000000900460ff166103d6565b905090565b60008060008060006004600c9054906101000a900460ff16156103a757600080fd5b505060015460005460025460035460045469ffffffffffffffffffff9485169893975091955093509190911690565b600060028260028111156103ec576103ec610412565b14156103f757600080fd5b600182600281111561040b5761040b610412565b1492915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016006831061047c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561049457600080fd5b813580151581146104a457600080fd5b9392505050565b600060208083528351808285015260005b818110156104d8578581018301518582016040015282016104bc565b818111156104ea576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803569ffffffffffffffffffff8116811461053857600080fd5b919050565b60006020828403121561054f57600080fd5b6104a48261051e565b60006020828403121561056a57600080fd5b8135600381106104a457600080fd5b6000806000806080858703121561058f57600080fd5b6105988561051e565b935060208501359250604085013591506105b46060860161051e565b905092959194509250565b6000602082840312156105d157600080fd5b503591905056fea264697066735822122014874f7a973b86501c4c1a8be32490fe902c8f088ee234d25f9b2497e19f9e5264736f6c634300080a0033a2646970667358221220d8fdaadc825c43ac2783715ebcfe33e7b0ce3a396ac7717d65e4c95e98b6cf7f64736f6c634300080a003360806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d000117905534801561003957600080fd5b50600054604080516318caf8e360e31b815273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660048083019190915260248201929092526044810191909152632aa9a2a960e11b6064820152620100009091046001600160a01b03169063c657c71890608401600060405180830381600087803b1580156100ba57600080fd5b505af11580156100ce573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b81527390f79bf6eb2c4f870365e785982e1f101e93b90660048201526024810191909152600660448201526511949251539160d21b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561014f57600080fd5b505af1158015610163573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b8152733c44cdddb6a900fa2b585dd299e03d12fa4293bc60048201526024810191909152600a6044820152692624a8aaa4a220aa27a960b11b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b1580156101e857600080fd5b505af11580156101fc573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b815273c4375b7de8af5a38a93548eb8453a498222c4ff260048201526024810191909152600c60448201526b44554d425f4144445245535360a01b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561028357600080fd5b505af1158015610297573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b8152739965507d1a55bcc2695c58ba16fb37d819b0a4dc60048201526024810191909152600760448201526620a220a82a22a960c91b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561031957600080fd5b505af115801561032d573d6000803e3d6000fd5b505050506102a6806103406000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063ba414fa61461003b578063fa7626d414610057575b600080fd5b610043610064565b604051901515815260200160405180910390f35b6000546100439060ff1681565b60008054610100900460ff16156100845750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156101bf5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610129917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016101ff565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526101619161023b565b6000604051808303816000865af19150503d806000811461019e576040519150601f19603f3d011682016040523d82523d6000602084013e6101a3565b606091505b50915050808060200190518101906101bb919061024e565b9150505b919050565b6000815160005b818110156101e557602081850181015186830152016101cb565b818111156101f4576000828601525b509290920192915050565b7fffffffff0000000000000000000000000000000000000000000000000000000083168152600061023360048301846101c4565b949350505050565b600061024782846101c4565b9392505050565b60006020828403121561026057600080fd5b8151801515811461024757600080fdfea2646970667358221220293f55a0ef7b60c31a89dbc50e3339c80a8fdb1f9567614b200e97598226671f64736f6c634300080a003360806040523480156200001157600080fd5b506040516201110538038062011105833981016040819052620000349162000811565b6200003f3362000734565b6040516200004d9062000784565b604051809103906000f0801580156200006a573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b039283169081179091556040516310dc138160e31b81529184166004830152906386e09c0890602401600060405180830381600087803b158015620000c457600080fd5b505af1158015620000d9573d6000803e3d6000fd5b50506001546040516301ed651160e41b81526001600160a01b0385811660048301529091169250631ed651109150602401600060405180830381600087803b1580156200012557600080fd5b505af11580156200013a573d6000803e3d6000fd5b505050506040516200014c9062000792565b604051809103906000f08015801562000169573d6000803e3d6000fd5b50600280546001600160a01b0319166001600160a01b039283169081179091556001546040516376aad60560e01b81526004810192909252909116906376aad60590602401600060405180830381600087803b158015620001c957600080fd5b505af1158015620001de573d6000803e3d6000fd5b5050600154604051600093506001600160a01b0390911691506200020290620007a0565b6001600160a01b039091168152602001604051809103906000f0801580156200022f573d6000803e3d6000fd5b5060015460405163338f12b960e21b81526001600160a01b03808416600483015292935091169063ce3c4ae490602401600060405180830381600087803b1580156200027a57600080fd5b505af11580156200028f573d6000803e3d6000fd5b5050600154604051600093506001600160a01b039091169150620002b390620007ae565b6001600160a01b039091168152602001604051809103906000f080158015620002e0573d6000803e3d6000fd5b5060015460405163c5120b3960e01b81526001600160a01b03808416600483015292935091169063c5120b3990602401600060405180830381600087803b1580156200032b57600080fd5b505af115801562000340573d6000803e3d6000fd5b5050600154604051606093506001600160a01b03909116915082906200036690620007bc565b6200037392919062000849565b604051809103906000f08015801562000390573d6000803e3d6000fd5b50600380546001600160a01b0319166001600160a01b0392831690811790915560015460405163530e784f60e01b815260048101929092529091169063530e784f90602401600060405180830381600087803b158015620003f057600080fd5b505af115801562000405573d6000803e3d6000fd5b5050600154604051600093506001600160a01b0390911691506200042990620007ca565b6001600160a01b039091168152602001604051809103906000f08015801562000456573d6000803e3d6000fd5b506001546040516356ee0d3b60e11b81526001600160a01b03808416600483015292935091169063addc1a7690602401600060405180830381600087803b158015620004a157600080fd5b505af1158015620004b6573d6000803e3d6000fd5b5050600154604051600093506001600160a01b039091169150620004da90620007d8565b6001600160a01b039091168152602001604051809103906000f08015801562000507573d6000803e3d6000fd5b506001546040516321da583760e01b81526001600160a01b0380841660048301529293509116906321da583790602401600060405180830381600087803b1580156200055257600080fd5b505af115801562000567573d6000803e3d6000fd5b505050506000306040516200057c90620007e6565b6001600160a01b039091168152602001604051809103906000f080158015620005a9573d6000803e3d6000fd5b50600154604051631795d5b360e31b81526001600160a01b03808416600483015292935091169063bcaead9890602401600060405180830381600087803b158015620005f457600080fd5b505af115801562000609573d6000803e3d6000fd5b505060405163f2fde38b60e01b81523360048201526001600160a01b038416925063f2fde38b9150602401600060405180830381600087803b1580156200064f57600080fd5b505af115801562000664573d6000803e3d6000fd5b505060015460405163f2fde38b60e01b81523360048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b158015620006ae57600080fd5b505af1158015620006c3573d6000803e3d6000fd5b505060025460405163f2fde38b60e01b81523360048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b1580156200070d57600080fd5b505af115801562000722573d6000803e3d6000fd5b505050505050505050505050620008b2565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610fcd80620010dd83390190565b61098c80620020aa83390190565b610f508062002a3683390190565b614da6806200398683390190565b611b45806200872c83390190565b612ced806200a27183390190565b611627806200cf5e83390190565b612b80806200e58583390190565b80516001600160a01b03811681146200080c57600080fd5b919050565b600080604083850312156200082557600080fd5b6200083083620007f4565b91506200084060208401620007f4565b90509250929050565b6001600160a01b0383811682526040602080840182905284518483018190526000938683019290916060870190865b81811015620008a3578551805186168452840151851684840152948301949186019160010162000878565b50909998505050505050505050565b61081b80620008c26000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80638874ff1f1161005b5780638874ff1f146100f55780638da5cb5b14610108578063de28735914610126578063f2fde38b1461014657600080fd5b80632630c12f146100825780632954018c146100cb578063715018a6146100eb575b600080fd5b6003546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6001546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b6100f3610159565b005b6100f3610103366004610658565b6101eb565b60005473ffffffffffffffffffffffffffffffffffffffff166100a2565b6002546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b6100f3610154366004610734565b6103e3565b60005473ffffffffffffffffffffffffffffffffffffffff1633146101df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6101e96000610513565b565b60005473ffffffffffffffffffffffffffffffffffffffff16331461026c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101d6565b60005b815181101561035c57600354825173ffffffffffffffffffffffffffffffffffffffff9091169063e8a97a3e908490849081106102ae576102ae610756565b6020026020010151600001518484815181106102cc576102cc610756565b6020026020010151602001516040518363ffffffff1660e01b815260040161031792919073ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b600060405180830381600087803b15801561033157600080fd5b505af1158015610345573d6000803e3d6000fd5b50505050808061035490610785565b91505061026f565b506002546040517ff2fde38b00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063f2fde38b90602401600060405180830381600087803b1580156103c857600080fd5b505af11580156103dc573d6000803e3d6000fd5b5050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101d6565b73ffffffffffffffffffffffffffffffffffffffff8116610507576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016101d6565b61051081610513565b50565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156105da576105da610588565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561062757610627610588565b604052919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461065357600080fd5b919050565b6000602080838503121561066b57600080fd5b823567ffffffffffffffff8082111561068357600080fd5b818501915085601f83011261069757600080fd5b8135818111156106a9576106a9610588565b6106b7848260051b016105e0565b818152848101925060069190911b8301840190878211156106d757600080fd5b928401925b8184101561072957604084890312156106f55760008081fd5b6106fd6105b7565b6107068561062f565b815261071386860161062f565b81870152835260409390930192918401916106dc565b979650505050505050565b60006020828403121561074657600080fd5b61074f8261062f565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156107de577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea26469706673582212205ee75e57bb635aa49a1758f4ab0b04182a73115bff08f420c56a8ddb433c029364736f6c634300080a0033608060405234801561001057600080fd5b5061001a3361005f565b60405130906f20a2222922a9a9afa82927ab24a222a960811b907fb37614c7d254ea8d16eb81fa11dddaeb266aa8ba4917980859c7740aff30c69190600090a36100af565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610f0f806100be6000396000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c806377532ed9116100e3578063bcaead981161008c578063ce3c4ae411610066578063ce3c4ae414610308578063f2fde38b1461031b578063fca513a81461032e57600080fd5b8063bcaead98146102da578063c5120b39146102ed578063c513c9bb1461030057600080fd5b80639068a868116100bd5780639068a868146102b7578063addc1a76146102bf578063affd9243146102d257600080fd5b806377532ed91461027e57806386e09c08146102865780638da5cb5b1461029957600080fd5b80634c252f9111610145578063699f200f1161011f578063699f200f1461022d578063715018a61461026357806376aad6051461026b57600080fd5b80634c252f91146101fc578063530e784f1461020457806354fd4d501461021757600080fd5b80631ed65110116101765780631ed65110146101cc57806321da5837146101e157806326c74fc3146101f457600080fd5b8063060678c21461019257806308737695146101c4575b600080fd5b61019a610336565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61019a610366565b6101df6101da366004610e10565b610391565b005b6101df6101ef366004610e10565b610444565b61019a6104ef565b61019a61051a565b6101df610212366004610e10565b610545565b61021f600281565b6040519081526020016101bb565b61019a61023b366004610e4d565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6101df6105f0565b6101df610279366004610e10565b61067d565b61019a610728565b6101df610294366004610e10565b610753565b60005473ffffffffffffffffffffffffffffffffffffffff1661019a565b61019a6107fe565b6101df6102cd366004610e10565b610829565b61019a6108d4565b6101df6102e8366004610e10565b6108ff565b6101df6102fb366004610e10565b6109aa565b61019a610a55565b6101df610316366004610e10565b610a80565b6101df610329366004610e10565b610b2b565b61019a610c58565b60006103617f444154415f434f4d50524553534f520000000000000000000000000000000000610c7f565b905090565b60006103617f41434c0000000000000000000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610417576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6104417f54524541535552595f434f4e545241435400000000000000000000000000000082610d1d565b50565b60005473ffffffffffffffffffffffffffffffffffffffff1633146104c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f574554485f47415445574159000000000000000000000000000000000000000082610d1d565b60006103617f54524541535552595f434f4e5452414354000000000000000000000000000000610c7f565b60006103617f574554485f544f4b454e00000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f50524943455f4f5241434c45000000000000000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610671576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b61067b6000610d9b565b565b60005473ffffffffffffffffffffffffffffffffffffffff1633146106fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f41434c000000000000000000000000000000000000000000000000000000000082610d1d565b60006103617f574554485f474154455741590000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146107d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f574554485f544f4b454e0000000000000000000000000000000000000000000082610d1d565b60006103617f4143434f554e545f464143544f52590000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146108aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f4143434f554e545f464143544f5259000000000000000000000000000000000082610d1d565b60006103617f474541525f544f4b454e00000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610980576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f474541525f544f4b454e0000000000000000000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f444154415f434f4d50524553534f52000000000000000000000000000000000082610d1d565b60006103617f434f4e5452414354535f52454749535445520000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610b01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f434f4e5452414354535f5245474953544552000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610bac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b73ffffffffffffffffffffffffffffffffffffffff8116610c4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161040e565b61044181610d9b565b60006103617f50524943455f4f5241434c4500000000000000000000000000000000000000005b6000818152600160209081526040808320548151808301909252600382527f41503100000000000000000000000000000000000000000000000000000000009282019290925273ffffffffffffffffffffffffffffffffffffffff9091169081610d16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040e9190610e66565b5092915050565b60008281526001602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091559051909184917fb37614c7d254ea8d16eb81fa11dddaeb266aa8ba4917980859c7740aff30c6919190a35050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215610e2257600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610e4657600080fd5b9392505050565b600060208284031215610e5f57600080fd5b5035919050565b600060208083528351808285015260005b81811015610e9357858101830151858201604001528201610e77565b81811115610ea5576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea264697066735822122083c228af017c6f5cf8c395cdf7a53276ff56fdd4f4313c39f680ab73bd75417364736f6c634300080a0033608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61090e8061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063732818191161008c578063adce758d11610066578063adce758d14610215578063ba306df114610228578063d4eb5db01461023b578063f2fde38b1461027457600080fd5b806373281819146101b7578063819ad68e146101da5780638da5cb5b146101ed57600080fd5b806354fd4d50116100bd57806354fd4d501461016a5780635f259aba14610180578063715018a6146101af57600080fd5b806335914829146100e45780633a41ec641461011c5780634910832f14610155575b600080fd5b6101076100f236600461089b565b60016020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61010761012a36600461089b565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205460ff1690565b61016861016336600461089b565b610287565b005b610172600181565b604051908152602001610113565b61010761018e36600461089b565b60005473ffffffffffffffffffffffffffffffffffffffff91821691161490565b610168610387565b6101076101c536600461089b565b60026020526000908152604090205460ff1681565b6101686101e836600461089b565b610414565b60005460405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610113565b61016861022336600461089b565b61050c565b61016861023636600461089b565b610601565b61010761024936600461089b565b73ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205460ff1690565b61016861028236600461089b565b6106f6565b60005473ffffffffffffffffffffffffffffffffffffffff16331461030d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909217909155517fae26b1cfe9454ba87274a4e8330b6654684362d0f3d7bbd17f7449a1d38387c69190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610408576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b6104126000610826565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517fd400da6c0c0a894dacc0981730b88af0545d00272ee8fff1437bf560ff245fc49190a250565b60005473ffffffffffffffffffffffffffffffffffffffff16331461058d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f1998397e7203f7baca9d6f41b9e4da6e768daac5caad4234fb9bf5869d2715459190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610682576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526001602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f28b01395b7e25d20552a0c8dc8ecd3b1d4abc986f14dad7885fd45b6fd73c8d99190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811661081a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610304565b61082381610826565b50565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156108ad57600080fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146108d157600080fd5b939250505056fea26469706673582212204712efbfe997070def77285a5b8753bc882b62da2133ce1937ad26cd2b48e49864736f6c634300080a003360a060405234801561001057600080fd5b50604051610f50380380610f5083398101604081905261002f916100d7565b6000805460ff19169055806001600160a01b03811661006157604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa15801561009f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100c391906100d7565b6001600160a01b0316608052506101079050565b6000602082840312156100e957600080fd5b81516001600160a01b038116811461010057600080fd5b9392505050565b608051610e1261013e600039600081816101e2015281816102b20152818161040f0152818161057801526108510152610e126000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80638456cb5911610097578063b4ac686011610066578063b4ac686014610217578063c29277cd1461021f578063d914cd4b14610227578063e26b2f631461023a57600080fd5b80638456cb59146101cd57806394144856146101d5578063a50cf2c8146101dd578063ac4afa381461020457600080fd5b80635b16ebb7116100d35780635b16ebb7146101575780635c975abb1461018a578063673a2a1f146101955780636fbc6f6b146101aa57600080fd5b80631e16e4fc146100fa5780633f4ba83a1461013757806354fd4d5014610141575b600080fd5b61010d610108366004610c97565b61024d565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61013f610284565b005b610149600181565b60405190815260200161012e565b61017a610165366004610cb0565b60026020526000908152604090205460ff1681565b604051901515815260200161012e565b60005460ff1661017a565b61019d610372565b60405161012e9190610ced565b61017a6101b8366004610cb0565b60046020526000908152604090205460ff1681565b61013f6103e1565b61019d6104cd565b61010d7f000000000000000000000000000000000000000000000000000000000000000081565b61010d610212366004610c97565b61053a565b600154610149565b600354610149565b61013f610235366004610cb0565b61054a565b61013f610248366004610cb0565b610823565b6003818154811061025d57600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa15801561030e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103329190610d47565b610368576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610370610af6565b565b606060018054806020026020016040519081016040528092919081815260200182805480156103d757602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116103ac575b5050505050905090565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561046b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048f9190610d47565b6104c5576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610370610bd7565b606060038054806020026020016040519081016040528092919081815260200182805480156103d75760200282019190600052602060002090815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116103ac575050505050905090565b6001818154811061025d57600080fd5b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156105d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f89190610d47565b61062e576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051808201909152600281527f5a30000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff82166106b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b60405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff8116600090815260026020908152604091829020548251808401909352600383527f43523100000000000000000000000000000000000000000000000000000000009183019190915260ff1615610753576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b506001805480820182557fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915560008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909417909355915190917ff816b5143086c89d103a0683286be86c2b741e83ebfa75135aae606e2f5c6e5391a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156108ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d19190610d47565b610907576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051808201909152600281527f5a30000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8216610989576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b5073ffffffffffffffffffffffffffffffffffffffff8116600090815260046020908152604091829020548251808401909352600383527f43523200000000000000000000000000000000000000000000000000000000009183019190915260ff1615610a23576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b506003805460018082019092557fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915560008181526004602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909417909355915190917f58ad3cfc4b6552a53c8c4128ae9b080e14b4378a159280643a62c6f709cee24f91a250565b60005460ff16610b62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016106b0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff1615610c44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016106b0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610bad3390565b600060208284031215610ca957600080fd5b5035919050565b600060208284031215610cc257600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610ce657600080fd5b9392505050565b6020808252825182820181905260009190848201906040850190845b81811015610d3b57835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101610d09565b50909695505050505050565b600060208284031215610d5957600080fd5b81518015158114610ce657600080fd5b600060208083528351808285015260005b81811015610d9657858101830151858201604001528201610d7a565b81811115610da8576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea26469706673582212208f2d91c863db9ab1494a9c5db20e3fddc4b6c779ea3c3621737c105c60d9440a64736f6c634300080a003360e06040523480156200001157600080fd5b5060405162004da638038062004da6833981016040819052620000349162000160565b6001600160a01b0381166200005c57604051635919af9760e11b815260040160405180910390fd5b6001600160a01b03811660808190526040805163c513c9bb60e01b8152905163c513c9bb916004808201926020929091908290030181865afa158015620000a7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cd919062000160565b6001600160a01b031660a0816001600160a01b0316815250506080516001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000127573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200014d919062000160565b6001600160a01b031660c0525062000192565b6000602082840312156200017357600080fd5b81516001600160a01b03811681146200018b57600080fd5b9392505050565b60805160a05160c051614b896200021d6000396000818161018801528181611c4f0152612c5a0152600081816101ed015281816115e201528181611f5f0152818161213f0152818161223f0152818161243801528181612604015281816126bc01528181612788015281816129a501528181613c410152613d000152600061013c0152614b896000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c806354fd4d5011610081578063a80deda31161005b578063a80deda31461020f578063ae093f3f1461022f578063fc9914cb1461024f57600080fd5b806354fd4d50146101bd578063663b8fdb146101d35780637a0c7b21146101e857600080fd5b80632954018c116100b25780632954018c146101375780634b2f336d146101835780634c472fc9146101aa57600080fd5b80630dbd616d146100d957806313d21cdf146101025780631bcd8fc014610122575b600080fd5b6100ec6100e73660046140fc565b610272565b6040516100f9919061430b565b60405180910390f35b61011561011036600461431e565b6114d4565b6040516100f99190614444565b61012a611f59565b6040516100f99190614453565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100f9565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b61015e6101b83660046140fc565b6121f5565b6101c5600281565b6040519081526020016100f9565b6101db612432565b6040516100f991906146ea565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b61022261021d36600461431e565b6126b5565b6040516100f9919061476a565b61024261023d36600461431e565b612a75565b6040516100f991906147dd565b61026261025d3660046140fc565b613bf7565b60405190151581526020016100f9565b61035f604051806102400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160008152602001606081526020016000815260200160008152602001600015158152602001600081526020016000815260200160008152602001600060ff168152602001600081525090565b600080600080600061037088613cf4565b509450945094509450945060008560ff1660011461041d576040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015284169063e958b70490602401602060405180830381865afa1580156103f4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061041891906147f0565b6104ad565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015286169063e958b70490602401602060405180830381865afa158015610489573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ad91906147f0565b60ff8716610200890181905273ffffffffffffffffffffffffffffffffffffffff808b1660208b01528b811660608b015282168952909150600114156109e9578473ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610538573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055c91906147f0565b73ffffffffffffffffffffffffffffffffffffffff90811660808901526040517fc7de38a600000000000000000000000000000000000000000000000000000000815282821660048201529085169063c7de38a690602401602060405180830381865afa1580156105d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f5919061480d565b60c08801526040517fdfd5946500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015285169063dfd5946590602401602060405180830381865afa158015610666573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068a919061480d565b60e08801526040517f3ce0735500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015260006024830152861690633ce0735590604401602060405180830381865afa92505050801561073c575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526107399181019061480d565b60015b6107455761074c565b6101408801525b6040517f3ce0735500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015260016024830152861690633ce0735590604401602060405180830381865afa9250505080156107f9575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526107f69181019061480d565b60015b61080257610809565b6101608801525b60c08701516040517f996329f800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526024820192909252600060448201529086169063996329f89060640160a060405180830381865afa9250505080156108c4575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526108c191810190614826565b60015b6108cd576108da565b505015156101808a015250505b8073ffffffffffffffffffffffffffffffffffffffff16631afbb7a46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610925573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610949919061480d565b6101a08801526040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152851690633192195c90602401602060405180830381865afa1580156109bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109df919061480d565b60a0880152610c26565b8273ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5891906147f0565b73ffffffffffffffffffffffffffffffffffffffff90811660808901526040517fc7de38a600000000000000000000000000000000000000000000000000000000815282821660048201529083169063c7de38a6906024016040805180830381865afa158015610acc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af09190614866565b5060c08801526040517fdfd5946500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015283169063dfd5946590602401602060405180830381865afa158015610b62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b86919061480d565b60e08801526040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152841690633192195c906024016040805180830381865afa158015610bf6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1a9190614866565b60a08901526101a08801525b60008660ff16600114610ca7578373ffffffffffffffffffffffffffffffffffffffff166316f0115b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca291906147f0565b610d16565b8573ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1691906147f0565b90508073ffffffffffffffffffffffffffffffffffffffff166345d31f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d87919061480d565b6101008901526000600160ff891614610e0e578473ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610de5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e09919061480d565b610e7d565b8573ffffffffffffffffffffffffffffffffffffffff166320a05ff76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7d919061480d565b90508760ff16600114610f1f576040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152861690638991b2f190602401602060405180830381865afa158015610ef6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1a919061480d565b610faf565b6040517fb451cecc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015287169063b451cecc90602401602060405180830381865afa158015610f8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610faf919061480d565b6102208a01528067ffffffffffffffff811115610fce57610fce61488a565b60405190808252806020026020018201604052801561103e57816020015b6040805160808101825260008082526020808301829052928201819052606082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181610fec5790505b506101208a015260005b818110156113d657604080516080810182526000808252602082018190529181018290526060810191909152600180831b9060ff8c1614156111c5576040517faf0a650200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018590528a169063af0a650290604401608060405180830381865afa1580156110f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111b91906148b9565b5050602084015273ffffffffffffffffffffffffffffffffffffffff9081168084526040517ff9eaee0d0000000000000000000000000000000000000000000000000000000081526004810191909152908a169063f9eaee0d90602401602060405180830381865afa158015611195573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b9919061490d565b15156040830152611388565b6040517f172c48c70000000000000000000000000000000000000000000000000000000081526004810184905273ffffffffffffffffffffffffffffffffffffffff89169063172c48c7906024016040805180830381865afa15801561122f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112539190614928565b5073ffffffffffffffffffffffffffffffffffffffff9081168084526040517f70a082310000000000000000000000000000000000000000000000000000000081529188166004830152906370a0823190602401602060405180830381865afa1580156112c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e8919061480d565b602083015281516040517ff9eaee0d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529088169063f9eaee0d90602401602060405180830381865afa15801561135c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611380919061490d565b151560408301525b6102208c015181161561139c57600161139f565b60005b151560608301526101208c01518051839190859081106113c1576113c161495e565b60209081029190910101525050600101611048565b508273ffffffffffffffffffffffffffffffffffffffff166317d11a156040518163ffffffff1660e01b8152600401602060405180830381865afa158015611422573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611446919061480d565b896101c00181815250508273ffffffffffffffffffffffffffffffffffffffff16633dc54b406040518163ffffffff1660e01b8152600401602060405180830381865afa15801561149b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bf919061480d565b6101e08a015250969998505050505050505050565b61159b604051806102000160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600060ff1681525090565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015283917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa15801561162b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164f919061490d565b611685576040517fd384b23800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316808352604080517ffe14112d000000000000000000000000000000000000000000000000000000008152905185929163fe14112d9160048083019260209291908290030181865afa1580156116f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611719919061480d565b8360c00181815250508073ffffffffffffffffffffffffffffffffffffffff1663ef8d96036040518163ffffffff1660e01b8152600401602060405180830381865afa15801561176d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611791919061480d565b8360e00181815250508073ffffffffffffffffffffffffffffffffffffffff1663743753596040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611809919061480d565b8360a00181815250508073ffffffffffffffffffffffffffffffffffffffff16634c19386c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561185d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611881919061480d565b836101000181815250508073ffffffffffffffffffffffffffffffffffffffff1663788c6bfe6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fa919061480d565b836101600181815250508073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561194f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611973919061480d565b8360800181815250508073ffffffffffffffffffffffffffffffffffffffff166345d31f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119eb919061480d565b836101400181815250508073ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6491906147f0565b836040019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff166336dda7d56040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0a91906147f0565b836060019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663788c6bfe6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb0919061480d565b836101600181815250508073ffffffffffffffffffffffffffffffffffffffff1663e941fa786040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c29919061480d565b61018084015260408084015173ffffffffffffffffffffffffffffffffffffffff9081167f000000000000000000000000000000000000000000000000000000000000000082161460208087019190915282517f609ae31700000000000000000000000000000000000000000000000000000000815292519184169263609ae31792600480830193928290030181865afa158015611ccb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cef919061480d565b836101c00181815250508073ffffffffffffffffffffffffffffffffffffffff1663dbcb313b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d68919061480d565b836101a00181815250506000836060015173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de7919061480d565b6040517f5427c9380000000000000000000000000000000000000000000000000000000081526004810182905290915060009073ffffffffffffffffffffffffffffffffffffffff841690635427c93890602401602060405180830381865afa158015611e58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7c919061480d565b90508015611ec7576101808501518190611eb890611e9c906127106149bc565b876101000151886101400151611eb291906149d3565b90613fd0565b611ec29190614a3f565b611ece565b8461014001515b856101200181815250508273ffffffffffffffffffffffffffffffffffffffff166354fd4d506040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f47919061480d565b60ff166101e086015250505050919050565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b4ac68606040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fec919061480d565b90508067ffffffffffffffff8111156120075761200761488a565b6040519080825280602002602001820160405280156120ff57816020015b6120ec604051806102000160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600060ff1681525090565b8152602001906001900390816120255790505b50915060005b818110156121f0576040517fac4afa38000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ac4afa3890602401602060405180830381865afa15801561219b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121bf91906147f0565b90506121ca816114d4565b8483815181106121dc576121dc61495e565b602090810291909101015250600101612105565b505090565b6040517f6fbc6f6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015260009184917f00000000000000000000000000000000000000000000000000000000000000001690636fbc6f6b90602401602060405180830381865afa158015612286573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122aa919061490d565b6122e0576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060006122ee87613cf4565b5050935093505092508260ff16600114612397576040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015282169063fdd5764590602401602060405180830381865afa15801561236e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061239291906147f0565b612427565b6040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015283169063fdd5764590602401602060405180830381865afa158015612403573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061242791906147f0565b979650505050505050565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c29277cd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124c5919061480d565b90508067ffffffffffffffff8111156124e0576124e061488a565b6040519080825280602002602001820160405280156125c457816020015b60408051610260810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083018290526101208301819052610140830181905261016083015261018082018190526101a082018190526101c082018190526101e082018190526102008201819052610220820181905261024082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816124fe5790505b50915060005b818110156121f0576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa158015612660573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061268491906147f0565b905061268f81612a75565b8483815181106126a1576126a161495e565b6020908102919091010152506001016125ca565b60606000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c29277cd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612725573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612749919061480d565b905060005b81811015612829576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa1580156127e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061280891906147f0565b90506128148187613bf7565b15612820578360010193505b5060010161274e565b508167ffffffffffffffff8111156128435761284361488a565b60405190808252806020026020018201604052801561296157816020015b61294e604051806102400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160008152602001606081526020016000815260200160008152602001600015158152602001600081526020016000815260200160008152602001600060ff168152602001600081525090565b8152602001906001900390816128615790505b5092506000915060005b81811015612a6d576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa158015612a01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a2591906147f0565b9050612a318187613bf7565b15612a6457612a408187610272565b858581518110612a5257612a5261495e565b60209081029190910101526001909301925b5060010161296b565b505050919050565b604080516102608101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082018390526101208201819052610140820181905261016082015261018081018290526101a081018290526101c081018290526101e08101829052610200810182905261022081018290526102408101829052908080808080612b1b88613cf4565b73ffffffffffffffffffffffffffffffffffffffff8e168d5260ff86166101808e01819052959b50939950919750955093509150600114612bca578273ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ba1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bc591906147f0565b612c39565b8473ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c3991906147f0565b73ffffffffffffffffffffffffffffffffffffffff908116602089018190527f00000000000000000000000000000000000000000000000000000000000000009091161460408801526000600160ff881614612d03578373ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cfe91906147f0565b612d72565b8573ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d7291906147f0565b6040517f2e97ca2100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b8116600483015291925090821690632e97ca2190602401602060405180830381865afa158015612de2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e06919061490d565b15156060890152604080517f45d31f9d000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff8316916345d31f9d9160048083019260209291908290030181865afa158015612e78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e9c919061480d565b8860800181815250508073ffffffffffffffffffffffffffffffffffffffff1663743753596040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ef0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f14919061480d565b610100890152600160ff88161415613017578573ffffffffffffffffffffffffffffffffffffffff16639b2cb5d86040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f95919061480d565b8860a00181815250508573ffffffffffffffffffffffffffffffffffffffff16635f48f3936040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fe9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061300d919061480d565b60c08901526130a5565b8273ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa158015613061573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130859190614a73565b6fffffffffffffffffffffffffffffffff90811660c08b01521660a08901525b60008760ff16600114613126578473ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613121919061480d565b613195565b8573ffffffffffffffffffffffffffffffffffffffff166320a05ff76040518163ffffffff1660e01b8152600401602060405180830381865afa158015613171573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613195919061480d565b90508067ffffffffffffffff8111156131b0576131b061488a565b6040519080825280602002602001820160405280156131d9578160200160208202803683370190505b506101208a01528067ffffffffffffffff8111156131f9576131f961488a565b604051908082528060200260200182016040528015613222578160200160208202803683370190505b506101608a015260005b818110156134c4578860ff16600114156133b4576040517f5e5f2e260000000000000000000000000000000000000000000000000000000081526004810182905260009073ffffffffffffffffffffffffffffffffffffffff891690635e5f2e2690602401602060405180830381865afa1580156132ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132d291906147f0565b9050808b610120015183815181106132ec576132ec61495e565b73ffffffffffffffffffffffffffffffffffffffff92831660209182029290920101526040517f78327438000000000000000000000000000000000000000000000000000000008152828216600482015290891690637832743890602401602060405180830381865afa158015613367573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061338b919061480d565b8b610160015183815181106133a2576133a261495e565b602002602001018181525050506134bc565b6040517f172c48c70000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff87169063172c48c7906024016040805180830381865afa15801561341e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134429190614928565b8061ffff1690508b610120015183815181106134605761346061495e565b602002602001018c6101600151848151811061347e5761347e61495e565b60200260200101828152508273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525050505b60010161322c565b5060008860ff16600114613546578373ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561351d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613541919061480d565b6135b5565b8673ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613591573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135b5919061480d565b90508067ffffffffffffffff8111156135d0576135d061488a565b60405190808252806020026020018201604052801561361557816020015b60408051808201909152600080825260208201528152602001906001900390816135ee5790505b506101408b015260005b818110156139015760408051808201909152600080825260208201528a60ff166001146136da576040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff871690635094cb4f90602401602060405180830381865afa1580156136b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136d591906147f0565b613769565b6040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff8a1690635094cb4f90602401602060405180830381865afa158015613745573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061376991906147f0565b73ffffffffffffffffffffffffffffffffffffffff168152600160ff8c16146138245780516040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529089169063fdd5764590602401602060405180830381865afa1580156137fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061381f91906147f0565b6138b7565b80516040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152908a169063fdd5764590602401602060405180830381865afa158015613893573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138b791906147f0565b73ffffffffffffffffffffffffffffffffffffffff1660208201526101408c01518051829190849081106138ed576138ed61495e565b60209081029190910101525060010161361f565b508860ff166001141561398f578773ffffffffffffffffffffffffffffffffffffffff1663b2c53a6c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613959573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061397d919061480d565b60e08b015260ff6102408b0152613be9565b73ffffffffffffffffffffffffffffffffffffffff85166101a08b01819052604080517f9408b63f0000000000000000000000000000000000000000000000000000000081529051639408b63f916004808201926020929091908290030181865afa158015613a02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a2691906147f0565b8a6101e0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508473ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015613aa9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613acd9190614aa6565b5015156102008c015250604080517f9fd12b77000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff881691639fd12b779160048083019260209291908290030181865afa158015613b42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b66919061480d565b8a6102200181815250508573ffffffffffffffffffffffffffffffffffffffff16638345f26e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bdf9190614af7565b60ff166102408b01525b505050505050505050919050565b6040517f6fbc6f6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015260009184917f00000000000000000000000000000000000000000000000000000000000000001690636fbc6f6b90602401602060405180830381865afa158015613c88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cac919061490d565b613ce2576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613cec8484614023565b949350505050565b600080600080600080867f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636fbc6f6b826040518263ffffffff1660e01b8152600401613d73919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa158015613d90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613db4919061490d565b613dea576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8773ffffffffffffffffffffffffffffffffffffffff166354fd4d506040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e59919061480d565b96508660ff1660011415613ee0578795508573ffffffffffffffffffffffffffffffffffffffff1663f93f515b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613eb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ed991906147f0565b9450613fc6565b8793508373ffffffffffffffffffffffffffffffffffffffff16632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f5291906147f0565b92508373ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fc391906147f0565b91505b5091939550919395565b6000821580613fdd575081155b15613fea5750600061401d565b612710613ff8600282614b1a565b61ffff1661400684866149d3565b6140109190614b3b565b61401a9190614a3f565b90505b92915050565b6040517f055ee9b500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600091829185169063055ee9b590602401602060405180830381865afa158015614094573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140b891906147f0565b73ffffffffffffffffffffffffffffffffffffffff1614159392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146140f957600080fd5b50565b6000806040838503121561410f57600080fd5b823561411a816140d7565b9150602083013561412a816140d7565b809150509250929050565b600081518084526020808501945080840160005b8381101561419f578151805173ffffffffffffffffffffffffffffffffffffffff168852838101518489015260408082015115159089015260609081015115159088015260809096019590820190600101614149565b509495945050505050565b805173ffffffffffffffffffffffffffffffffffffffff168252600061024060208301516141f0602086018273ffffffffffffffffffffffffffffffffffffffff169052565b506040830151614204604086018215159052565b50606083015161422c606086018273ffffffffffffffffffffffffffffffffffffffff169052565b506080830151614254608086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060a083015160a085015260c083015160c085015260e083015160e085015261010080840151818601525061012080840151828287015261429783870182614135565b92505050610140808401518186015250610160808401518186015250610180808401516142c78287018215159052565b50506101a083810151908501526101c080840151908501526101e080840151908501526102008084015160ff16908501526102209283015192909301919091525090565b60208152600061401a60208301846141aa565b60006020828403121561433057600080fd5b813561433b816140d7565b9392505050565b805173ffffffffffffffffffffffffffffffffffffffff168252602081015161436f602084018215159052565b506040810151614397604084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060608101516143bf606084018273ffffffffffffffffffffffffffffffffffffffff169052565b506080818101519083015260a0808201519083015260c0808201519083015260e08082015190830152610100808201519083015261012080820151908301526101408082015190830152610160808201519083015261018080820151908301526101a080820151908301526101c080820151908301526101e09081015160ff16910152565b610200810161401d8284614342565b6020808252825182820181905260009190848201906040850190845b8181101561449657614482838551614342565b92840192610200929092019160010161446f565b50909695505050505050565b600081518084526020808501945080840160005b8381101561419f57815173ffffffffffffffffffffffffffffffffffffffff16875295820195908201906001016144b6565b600081518084526020808501945080840160005b8381101561419f578151805173ffffffffffffffffffffffffffffffffffffffff9081168952908401511683880152604090960195908201906001016144fc565b600081518084526020808501945080840160005b8381101561419f57815187529582019590820190600101614551565b805173ffffffffffffffffffffffffffffffffffffffff168252600061026060208301516145b3602086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060408301516145c7604086018215159052565b5060608301516145db606086018215159052565b506080830151608085015260a083015160a085015260c083015160c085015260e083015160e0850152610100808401518186015250610120808401518282870152614628838701826144a2565b92505050610140808401518583038287015261464483826144e8565b925050506101608084015185830382870152614660838261453d565b92505050610180808401516146798287018260ff169052565b50506101a08381015173ffffffffffffffffffffffffffffffffffffffff908116918601919091526101c0808501511515908601526101e080850151909116908501526102008084015115159085015261022080840151908501526102409283015160ff1692909301919091525090565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561475d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc088860301845261474b85835161456d565b94509285019290850190600101614711565b5092979650505050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561475d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08886030184526147cb8583516141aa565b94509285019290850190600101614791565b60208152600061401a602083018461456d565b60006020828403121561480257600080fd5b815161433b816140d7565b60006020828403121561481f57600080fd5b5051919050565b600080600080600060a0868803121561483e57600080fd5b5050835160208501516040860151606087015160809097015192989197509594509092509050565b6000806040838503121561487957600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080600080608085870312156148cf57600080fd5b84516148da816140d7565b60208601516040870151606090970151919890975090945092505050565b8051801515811461490857600080fd5b919050565b60006020828403121561491f57600080fd5b61401a826148f8565b6000806040838503121561493b57600080fd5b8251614946816140d7565b602084015190925061ffff8116811461412a57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156149ce576149ce61498d565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614a0b57614a0b61498d565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614a4e57614a4e614a10565b500490565b80516fffffffffffffffffffffffffffffffff8116811461490857600080fd5b60008060408385031215614a8657600080fd5b614a8f83614a53565b9150614a9d60208401614a53565b90509250929050565b600080600060608486031215614abb57600080fd5b614ac484614a53565b9250614ad2602085016148f8565b9150604084015164ffffffffff81168114614aec57600080fd5b809150509250925092565b600060208284031215614b0957600080fd5b815160ff8116811461433b57600080fd5b600061ffff80841680614b2f57614b2f614a10565b92169190910492915050565b60008219821115614b4e57614b4e61498d565b50019056fea2646970667358221220d15108d0bec9cc6f3903875dd8412869a3da1b36661bdc780e2e2f0ae3136d2464736f6c634300080a003360a06040523480156200001157600080fd5b5060405162001b4538038062001b45833981016040819052620000349162000608565b6000805460ff19169055816001600160a01b0381166200006757604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cc91906200070a565b6001600160a01b031660805250805160005b818110156200014257620001398382815181106200010057620001006200072f565b6020026020010151600001518483815181106200012157620001216200072f565b6020026020010151602001516200014c60201b60201c565b600101620000de565b5050505062000822565b6001600160a01b03821615806200016a57506001600160a01b038116155b156200018957604051635919af9760e11b815260040160405180910390fd5b620001a8826001600160a01b0316620004ba60201b620006751760201c565b620001d65760405163df4c572d60e01b81526001600160a01b03831660048201526024015b60405180910390fd5b620001f5816001600160a01b0316620004ba60201b620006751760201c565b6200021f5760405163df4c572d60e01b81526001600160a01b0382166004820152602401620001cd565b806001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200027c575060408051601f3d908101601f19168201909252620002799181019062000745565b60015b6200029a576040516367a7cd4360e01b815260040160405180910390fd5b8060ff16600814620002bf576040516367a7cd4360e01b815260040160405180910390fd5b506000816001600160a01b031663d62ada116040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200031f575060408051601f3d908101601f191682019092526200031c918101906200076a565b60015b6200032a576200032d565b90505b6000836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200038c575060408051601f3d908101601f19168201909252620003899181019062000745565b60015b620003aa5760405163528ca31d60e01b815260040160405180910390fd5b60128160ff161115620003d05760405163528ca31d60e01b815260040160405180910390fd5b9050826001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa9250505080156200042f575060408051601f3d908101601f191682019092526200042c91810190620007a6565b60015b6200044d576040516367a7cd4360e01b815260040160405180910390fd5b8662000461576200046185858484620004c0565b5050505050620004748484848462000526565b826001600160a01b0316846001600160a01b03167fe263805b03657ab13064915d0723c5ce14981547e7cba5283f66b9e5d81f6e6e60405160405180910390a350505050565b3b151590565b60008313620004e2576040516356e05d2b60e01b815260040160405180910390fd5b836001600160501b0316816001600160501b0316108062000501575081155b15620005205760405163b1cf675560e01b815260040160405180910390fd5b50505050565b6001600160a01b03831682156200053e57600160a11b175b6200055460ff60a21b60a284901b1682620007fb565b6001600160a01b0390951660009081526001602052604090209490945550505050565b80516001600160a01b03811681146200058f57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715620005cf57620005cf62000594565b60405290565b604051601f8201601f191681016001600160401b038111828210171562000600576200060062000594565b604052919050565b60008060408084860312156200061d57600080fd5b620006288462000577565b602085810151919450906001600160401b03808211156200064857600080fd5b818701915087601f8301126200065d57600080fd5b81518181111562000672576200067262000594565b62000682848260051b01620005d5565b818152848101925060069190911b830184019089821115620006a357600080fd5b928401925b81841015620006fa5785848b031215620006c25760008081fd5b620006cc620005aa565b620006d78562000577565b8152620006e686860162000577565b8187015283529285019291840191620006a8565b8096505050505050509250929050565b6000602082840312156200071d57600080fd5b620007288262000577565b9392505050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156200075857600080fd5b815160ff811681146200072857600080fd5b6000602082840312156200077d57600080fd5b815180151581146200072857600080fd5b80516001600160501b03811681146200058f57600080fd5b600080600080600060a08688031215620007bf57600080fd5b620007ca866200078e565b9450602086015193506040860151925060608601519150620007ef608087016200078e565b90509295509295909350565b600082198211156200081d57634e487b7160e01b600052601160045260246000fd5b500190565b6080516112f262000853600039600081816101b201528181610280015281816103e201526104ff01526112f26000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c80638456cb591161008c578063b66102df11610066578063b66102df146101d4578063e8a97a3e146101e7578063f190e5fa146101fa578063f9a650301461023f57600080fd5b80638456cb591461016d5780639dcb511a14610175578063a50cf2c8146101ad57600080fd5b80635c975abb116100bd5780635c975abb1461011c5780635cecbd0e146101325780637afb01041461015a57600080fd5b80633f4ba83a146100e457806341976e09146100ee57806354fd4d5014610114575b600080fd5b6100ec610252565b005b6101016100fc366004610f28565b610340565b6040519081526020015b60405180910390f35b610101600281565b60005460ff16604051901515815260200161010b565b610145610140366004610f4a565b610352565b6040805192835260208301919091520161010b565b610101610168366004610f90565b610376565b6100ec6103b4565b610188610183366004610f28565b6104a0565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010b565b6101887f000000000000000000000000000000000000000000000000000000000000000081565b6101016101e2366004610fbc565b6104b4565b6100ec6101f5366004610ff8565b6104d1565b61020d610208366004610f28565b6105c3565b6040805173ffffffffffffffffffffffffffffffffffffffff909416845291151560208401529082015260600161010b565b61010161024d366004610f90565b61064d565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156102dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103009190611022565b610336576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033e61067b565b565b600061034b82610761565b5092915050565b60008061035f868661064d565b915061036b848461064d565b905094509492505050565b600080600061038484610761565b90925090508161039582600a611193565b61039f908761119f565b6103a991906111dc565b925050505b92915050565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561043e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104629190611022565b610498576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033e610819565b60006104ab826105c3565b50909392505050565b60006104c96104c3858561064d565b83610376565b949350505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561055b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057f9190611022565b6105b5576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105bf82826108d9565b5050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600160205260408120548190819080610624576040517f4bb8ad8200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b947402000000000000000000000000000000000000000086161515945060a286901c9350915050565b600080600061065b84610761565b909250905061066b81600a611193565b61039f838761119f565b3b151590565b60005460ff166106ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b600080600080610770856105c3565b8095508193508294505050506000806000808573ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156107cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f19190611231565b9450945050935093508461080b5761080b84848484610dd9565b829750505050505050915091565b60005460ff1615610886576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016106e3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586107373390565b73ffffffffffffffffffffffffffffffffffffffff82161580610910575073ffffffffffffffffffffffffffffffffffffffff8116155b15610947576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82163b6109ad576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016106e3565b73ffffffffffffffffffffffffffffffffffffffff81163b610a13576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024016106e3565b8073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610a98575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610a9591810190611281565b60015b610ace576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060ff16600814610b0b576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060008173ffffffffffffffffffffffffffffffffffffffff1663d62ada116040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610b93575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610b9091810190611022565b60015b610b9c57610b9f565b90505b60008373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610c26575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610c2391810190611281565b60015b610c5c576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60128160ff161115610c9a576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b90508273ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa925050508015610d21575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610d1e91810190611231565b60015b610d57576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b86610d6857610d6885858484610dd9565b5050505050610d7984848484610e74565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fe263805b03657ab13064915d0723c5ce14981547e7cba5283f66b9e5d81f6e6e60405160405180910390a350505050565b60008313610e13576040517f56e05d2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8369ffffffffffffffffffff168169ffffffffffffffffffff161080610e37575081155b15610e6e576040517fb1cf675500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b73ffffffffffffffffffffffffffffffffffffffff83168215610ea95774020000000000000000000000000000000000000000175b610ecf7503fc000000000000000000000000000000000000000060a284901b16826112a4565b73ffffffffffffffffffffffffffffffffffffffff90951660009081526001602052604090209490945550505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610f2357600080fd5b919050565b600060208284031215610f3a57600080fd5b610f4382610eff565b9392505050565b60008060008060808587031215610f6057600080fd5b84359350610f7060208601610eff565b925060408501359150610f8560608601610eff565b905092959194509250565b60008060408385031215610fa357600080fd5b82359150610fb360208401610eff565b90509250929050565b600080600060608486031215610fd157600080fd5b83359250610fe160208501610eff565b9150610fef60408501610eff565b90509250925092565b6000806040838503121561100b57600080fd5b61101483610eff565b9150610fb360208401610eff565b60006020828403121561103457600080fd5b81518015158114610f4357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b808511156110cc57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156110b2576110b2611044565b808516156110bf57918102915b93841c9390800290611078565b509250929050565b6000826110e3575060016103ae565b816110f0575060006103ae565b816001811461110657600281146111105761112c565b60019150506103ae565b60ff84111561112157611121611044565b50506001821b6103ae565b5060208310610133831016604e8410600b841016171561114f575081810a6103ae565b6111598383611073565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561118b5761118b611044565b029392505050565b6000610f4383836110d4565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156111d7576111d7611044565b500290565b600082611212577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b805169ffffffffffffffffffff81168114610f2357600080fd5b600080600080600060a0868803121561124957600080fd5b61125286611217565b945060208601519350604086015192506060860151915061127560808701611217565b90509295509295909350565b60006020828403121561129357600080fd5b815160ff81168114610f4357600080fd5b600082198211156112b7576112b7611044565b50019056fea2646970667358221220e7485a2cb5750973f539ca59d2211008b42bb92b6c49605a53f5d9c88c330fb164736f6c634300080a003360e06040523480156200001157600080fd5b5060405162002ced38038062002ced8339810160408190526200003491620004bb565b6000805460ff19169055806001600160a01b0381166200006757604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cc9190620004bb565b6001600160a01b039081166080526001805560408051808201909152600281526105a360f41b602082015291508216620001245760405162461bcd60e51b81526004016200011b9190620004ed565b60405180910390fd5b50806001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000164573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200018a9190620004bb565b6001600160a01b031660c052604051620001a490620004ad565b604051809103906000f080158015620001c1573d6000803e3d6000fd5b506001600160a01b031660a08190526040805163204a7f0760e21b81529051638129fc1c9160048082019260009290919082900301818387803b1580156200020857600080fd5b505af11580156200021d573d6000803e3d6000fd5b50505050620002316200028a60201b60201c565b50600454600380546001600160a01b039092166001600160a01b03199283161790556000805260026020527fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b8054909116905562000545565b6000620002a460a0516200038c60201b6200119b1760201c565b9050806001600160a01b0316638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620002e257600080fd5b505af1158015620002f7573d6000803e3d6000fd5b5050600480546001600160a01b03908116600090815260026020908152604090912080546001600160a01b03199081169388169384179091558354169091179091556200035492506005915083906200043b811b6200127d17901c565b506040516001600160a01b038216907f9f69b6c10f6810213e055b0ba6bc0a4e2603f73c221aad77ea35da819cda7dc390600090a250565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260601b60148201526e5af43d82803e903d91602b57fd5bf360881b60288201526037816000f09150506001600160a01b038116620004365760405162461bcd60e51b815260206004820152601660248201527f455243313136373a20637265617465206661696c65640000000000000000000060448201526064016200011b565b919050565b600062000452836001600160a01b0384166200045b565b90505b92915050565b6000818152600183016020526040812054620004a45750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000455565b50600062000455565b610e788062001e7583390190565b600060208284031215620004ce57600080fd5b81516001600160a01b0381168114620004e657600080fd5b9392505050565b600060208083528351808285015260005b818110156200051c57858101830151858201604001528201620004fe565b818111156200052f576000604083870101525b50601f01601f1916929092016040019392505050565b60805160a05160c0516118cf620005a66000396000818161026a015281816103680152610b7001526000818161020201526110650152600081816102c4015281816105b80152818161099601528181610a840152610e7401526118cf6000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806388f64c54116100cd578063b193976311610081578063d82ecc4811610066578063d82ecc4814610309578063e3ba9ace1461031c578063f23953ab1461032f57600080fd5b8063b1939763146102f9578063b60e85181461030157600080fd5b80638f7dcfa3116100b25780638f7dcfa31461029f578063a50cf2c8146102bf578063a904aab6146102e657600080fd5b806388f64c541461026557806389b77b3e1461028c57600080fd5b806354fd4d50116101245780635da33c5b116101095780635da33c5b146101fd578063765e0159146102245780638456cb591461025d57600080fd5b806354fd4d50146101d05780635c975abb146101e657600080fd5b806313d8c8401461015657806321d18456146101a05780632932472f146101b35780633f4ba83a146101c8575b600080fd5b6004546101769073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6101766101ae366004611651565b610337565b6101c66101c1366004611697565b61058a565b005b6101c6610968565b6101d8600181565b604051908152602001610197565b60005460ff165b6040519015158152602001610197565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101766102323660046116da565b73ffffffffffffffffffffffffffffffffffffffff9081166000908152600260205260409020541690565b6101c6610a56565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101c661029a3660046116da565b610b42565b6003546101769073ffffffffffffffffffffffffffffffffffffffff1681565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101c66102f4366004611697565b610e46565b6101d8610fb8565b6101d8611033565b6101ed6103173660046116da565b611044565b61017661032a3660046116f5565b611051565b6101c661105e565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa1580156103c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103e8919061170e565b6040518060400160405280600281526020017f43500000000000000000000000000000000000000000000000000000000000008152509061045f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b60405180910390fd5b506104686112a6565b6003805473ffffffffffffffffffffffffffffffffffffffff8082166000818152600260205260409081902080549093167fffffffffffffffffffffffff0000000000000000000000000000000000000000948516179094558154909216905590517fc75b5a710000000000000000000000000000000000000000000000000000000081523360048201526024810185905260448101849052819063c75b5a7190606401600060405180830381600087803b15801561052657600080fd5b505af115801561053a573d6000803e3d6000fd5b505060405133925073ffffffffffffffffffffffffffffffffffffffff841691507ff3ede7039176503a8ad1fe7cfaa29475a9dbe0cdcaf04ecf9a5c10570c47b10390600090a390505b92915050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610614573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610638919061170e565b61066e576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106766112a6565b60035473ffffffffffffffffffffffffffffffffffffffff838116911614156106fa576003805473ffffffffffffffffffffffffffffffffffffffff808216600090815260026020526040902080549091167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092558154169055610865565b73ffffffffffffffffffffffffffffffffffffffff838116600090815260026020908152604091829020548251808401909352600383527f4146330000000000000000000000000000000000000000000000000000000000918301919091529091848116911614610798576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b5060045473ffffffffffffffffffffffffffffffffffffffff838116911614156107fd57600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85161790555b73ffffffffffffffffffffffffffffffffffffffff828116600081815260026020526040808220805488861684529183208054929095167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790945591905281541690555b6040517fc75b5a7100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600060248301819052604483015283169063c75b5a7190606401600060405180830381600087803b1580156108dc57600080fd5b505af11580156108f0573d6000803e3d6000fd5b505050506109088260056112dd90919063ffffffff16565b508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f25e267469ba2ae82515be7b3d45df60bf8308343f0809e8cf7319058e2255ce660405160405180910390a3505050565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156109f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a16919061170e565b610a4c576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a546112ff565b565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015610ae0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b04919061170e565b610b3a576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a546113e0565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa158015610bcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf0919061170e565b6040518060400160405280600281526020017f435000000000000000000000000000000000000000000000000000000000000081525090610c5e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b50610c6a6005826114a0565b6040518060400160405280600381526020017f414634000000000000000000000000000000000000000000000000000000000081525090610cd8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b50438173ffffffffffffffffffffffffffffffffffffffff16633dc54b406040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4991906117a3565b14156040518060400160405280600381526020017f414631000000000000000000000000000000000000000000000000000000000081525090610db9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b506004805473ffffffffffffffffffffffffffffffffffffffff90811660009081526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081169487169485179091558454168317909355915190917fced6ab9afc868b3a088366f6631ae20752993b5cce5d5f0534ea5a59fcc57d5691a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610ed0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef4919061170e565b610f2a576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f19a1603900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301528416906319a1603990604401600060405180830381600087803b158015610f9b57600080fd5b505af1158015610faf573d6000803e3d6000fd5b50505050505050565b600354600090819073ffffffffffffffffffffffffffffffffffffffff165b73ffffffffffffffffffffffffffffffffffffffff81161561102d5773ffffffffffffffffffffffffffffffffffffffff9081166000908152600260205260409020541681611025816117eb565b925050610fd7565b50919050565b600061103f60056114cf565b905090565b60006105846005836114a0565b60006105846005836114d9565b60006110897f000000000000000000000000000000000000000000000000000000000000000061119b565b90508073ffffffffffffffffffffffffffffffffffffffff16638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156110d357600080fd5b505af11580156110e7573d6000803e3d6000fd5b50506004805473ffffffffffffffffffffffffffffffffffffffff908116600090815260026020526040902080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811692871692831790915582541617905550611156905060058261127d565b5060405173ffffffffffffffffffffffffffffffffffffffff8216907f9f69b6c10f6810213e055b0ba6bc0a4e2603f73c221aad77ea35da819cda7dc390600090a250565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260601b60148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f091505073ffffffffffffffffffffffffffffffffffffffff8116611278576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f455243313136373a20637265617465206661696c6564000000000000000000006044820152606401610456565b919050565b600061129f8373ffffffffffffffffffffffffffffffffffffffff84166114e5565b9392505050565b60035473ffffffffffffffffffffffffffffffffffffffff90811660009081526002602052604090205416610a5457610a5461105e565b600061129f8373ffffffffffffffffffffffffffffffffffffffff8416611534565b60005460ff1661136b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610456565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff161561144d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610456565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586113b63390565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600183016020526040812054151561129f565b6000610584825490565b600061129f8383611627565b600081815260018301602052604081205461152c57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610584565b506000610584565b6000818152600183016020526040812054801561161d576000611558600183611824565b855490915060009061156c90600190611824565b90508181146115d157600086600001828154811061158c5761158c61183b565b90600052602060002001549050808760000184815481106115af576115af61183b565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806115e2576115e261186a565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610584565b6000915050610584565b600082600001828154811061163e5761163e61183b565b9060005260206000200154905092915050565b6000806040838503121561166457600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff8116811461127857600080fd5b6000806000606084860312156116ac57600080fd5b6116b584611673565b92506116c360208501611673565b91506116d160408501611673565b90509250925092565b6000602082840312156116ec57600080fd5b61129f82611673565b60006020828403121561170757600080fd5b5035919050565b60006020828403121561172057600080fd5b8151801515811461129f57600080fd5b600060208083528351808285015260005b8181101561175d57858101830151858201604001528201611741565b8181111561176f576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b6000602082840312156117b557600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561181d5761181d6117bc565b5060010190565b600082821015611836576118366117bc565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220f1e9c81b8c3af2491c907ee66cf24e1bb76111b821db02df8f98dbb48b5ab5fa64736f6c634300080a0033608060405234801561001057600080fd5b50610e58806100206000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c806354fd4d5011610081578063c45a01551161005b578063c45a0155146101a4578063c75b5a71146101ca578063d1660f99146101dd57600080fd5b806354fd4d501461014f5780638129fc1c14610157578063c12c21c01461015f57600080fd5b80631afbb7a4116100b25780631afbb7a41461011d5780631cff79cd146101265780633dc54b401461014657600080fd5b806316128211146100d957806317d11a15146100ee57806319a160391461010a575b600080fd5b6100ec6100e7366004610b42565b6101f0565b005b6100f760035481565b6040519081526020015b60405180910390f35b6100ec610118366004610b8d565b61024c565b6100f760025481565b610139610134366004610bef565b6102c9565b6040516101019190610d49565b6100f760045481565b6100f7600181565b6100ec610344565b60015461017f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610101565b60005461017f9062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b6100ec6101d8366004610d5c565b610494565b6100ec6101eb366004610d8f565b61053d565b60015473ffffffffffffffffffffffffffffffffffffffff163314610241576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600291909155600355565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1633146102a3576040517fb126b84800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102c573ffffffffffffffffffffffffffffffffffffffff83168260006105b4565b5050565b60015460609073ffffffffffffffffffffffffffffffffffffffff16331461031d576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033d73ffffffffffffffffffffffffffffffffffffffff8416836107b4565b9392505050565b600054610100900460ff1661035f5760005460ff1615610363565b303b155b6103f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600054610100900460ff1615801561043357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000166101011790555b600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16336201000002179055801561049157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b50565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1633146104eb576040517fb126b84800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff949094169390931790925560025560035543600455565b60015473ffffffffffffffffffffffffffffffffffffffff16331461058e576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105af73ffffffffffffffffffffffffffffffffffffffff841683836107f6565b505050565b80158061065457506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015284169063dd62ed3e90604401602060405180830381865afa15801561062e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106529190610dcb565b155b6106e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e63650000000000000000000060648201526084016103eb565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526105af9084907f095ea7b300000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261084c565b606061033d83836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250610958565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526105af9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401610732565b60006108ae826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166109589092919063ffffffff16565b8051909150156105af57808060200190518101906108cc9190610de4565b6105af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016103eb565b6060610967848460008561096f565b949350505050565b606082471015610a01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016103eb565b843b610a69576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016103eb565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051610a929190610e06565b60006040518083038185875af1925050503d8060008114610acf576040519150601f19603f3d011682016040523d82523d6000602084013e610ad4565b606091505b5091509150610ae4828286610aef565b979650505050505050565b60608315610afe57508161033d565b825115610b0e5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103eb9190610d49565b60008060408385031215610b5557600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff81168114610b8857600080fd5b919050565b60008060408385031215610ba057600080fd5b610ba983610b64565b9150610bb760208401610b64565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215610c0257600080fd5b610c0b83610b64565b9150602083013567ffffffffffffffff80821115610c2857600080fd5b818501915085601f830112610c3c57600080fd5b813581811115610c4e57610c4e610bc0565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715610c9457610c94610bc0565b81604052828152886020848701011115610cad57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b83811015610cea578181015183820152602001610cd2565b83811115610cf9576000848401525b50505050565b60008151808452610d17816020860160208601610ccf565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061033d6020830184610cff565b600080600060608486031215610d7157600080fd5b610d7a84610b64565b95602085013595506040909401359392505050565b600080600060608486031215610da457600080fd5b610dad84610b64565b9250610dbb60208501610b64565b9150604084013590509250925092565b600060208284031215610ddd57600080fd5b5051919050565b600060208284031215610df657600080fd5b8151801515811461033d57600080fd5b60008251610e18818460208701610ccf565b919091019291505056fea2646970667358221220448e7046078cd668c09328d857e534e2aab6cdc0e691d3d4f2c8baae8e084b1364736f6c634300080a003360c06040523480156200001157600080fd5b506040516200162738038062001627833981016040819052620000349162000177565b60408051808201909152600281526105a360f41b60208201526001600160a01b038216620000805760405162461bcd60e51b8152600401620000779190620001a9565b60405180910390fd5b50806001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e6919062000177565b6001600160a01b03166080816001600160a01b031681525050806001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200013e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000164919062000177565b6001600160a01b031660a0525062000201565b6000602082840312156200018a57600080fd5b81516001600160a01b0381168114620001a257600080fd5b9392505050565b600060208083528351808285015260005b81811015620001d857858101830151858201604001528201620001ba565b81811115620001eb576000604083870101525b50601f01601f1916929092016040019392505050565b60805160a0516113c2620002656000396000818161021f0152818161036401526106d501526000818160af0152818161012a015281816104420152818161056e015281816107b301528181610aa601528181610b890152610c6701526113c26000f3fe60806040526004361061005e5760003560e01c80635869dba8116100435780635869dba814610199578063deecfbc9146101bb578063e79a4089146101ce57600080fd5b80634f0e0ef31461011857806354fd4d501461017657600080fd5b366101135760408051808201909152600381527f574732000000000000000000000000000000000000000000000000000000000060208201523373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b60405180910390fd5b50005b600080fd5b34801561012457600080fd5b5061014c7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561018257600080fd5b5061018b600181565b60405190815260200161016d565b3480156101a557600080fd5b506101b96101b4366004611263565b6101ee565b005b6101b96101c936600461128f565b61031d565b3480156101da57600080fd5b506101b96101e93660046112e1565b61068e565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201819052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa15801561027b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061029f9190611318565b6040518060400160405280600281526020017f43500000000000000000000000000000000000000000000000000000000000008152509061030d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b506103188383610a77565b505050565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808516600483015284917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa1580156103ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103d19190611318565b6040518060400160405280600281526020017f52500000000000000000000000000000000000000000000000000000000000008152509061043f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e6919061133a565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600381526020017f57473100000000000000000000000000000000000000000000000000000000008152509061056b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156105d457600080fd5b505af11580156105e8573d6000803e3d6000fd5b50505050506105f78434610b3c565b6040517f9aa5d46200000000000000000000000000000000000000000000000000000000815234600482015273ffffffffffffffffffffffffffffffffffffffff848116602483015261ffff84166044830152851690639aa5d46290606401600060405180830381600087803b15801561067057600080fd5b505af1158015610684573d6000803e3d6000fd5b5050505050505050565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808516600483015284917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa15801561071e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107429190611318565b6040518060400160405280600281526020017f5250000000000000000000000000000000000000000000000000000000000000815250906107b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610833573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610857919061133a565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600381526020017f5747310000000000000000000000000000000000000000000000000000000000815250906108dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b506109703330858773ffffffffffffffffffffffffffffffffffffffff166336dda7d56040518163ffffffff1660e01b8152600401602060405180830381865afa15801561092e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610952919061133a565b73ffffffffffffffffffffffffffffffffffffffff16929190610cd4565b6040517f05fe138b0000000000000000000000000000000000000000000000000000000081526004810184905230602482015260009073ffffffffffffffffffffffffffffffffffffffff8616906305fe138b906044016020604051808303816000875af11580156109e6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0a9190611357565b9050610a168382610a77565b8273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f6de63bb986f2779478e384365c03cc2e62f06b453856acca87d5a519ce02664960405160405180910390a35050505050565b6040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632e1a7d4d90602401600060405180830381600087803b158015610aff57600080fd5b505af1158015610b13573d6000803e3d6000fd5b50610b389250505073ffffffffffffffffffffffffffffffffffffffff831682610d6f565b5050565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015282917f00000000000000000000000000000000000000000000000000000000000000009091169063dd62ed3e90604401602060405180830381865afa158015610bd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf69190611357565b1015610b38576040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303816000875af1158015610cb0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103189190611318565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052610d69908590610ec9565b50505050565b80471015610dd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610107565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114610e33576040519150601f19603f3d011682016040523d82523d6000602084013e610e38565b606091505b5050905080610318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610107565b6000610f2b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16610fd59092919063ffffffff16565b8051909150156103185780806020019051810190610f499190611318565b610318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610107565b6060610fe48484600085610fee565b90505b9392505050565b606082471015611080576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610107565b843b6110e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610107565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516111119190611370565b60006040518083038185875af1925050503d806000811461114e576040519150601f19603f3d011682016040523d82523d6000602084013e611153565b606091505b509150915061116382828661116e565b979650505050505050565b6060831561117d575081610fe7565b82511561118d5782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b60005b838110156111dc5781810151838201526020016111c4565b83811115610d695750506000910152565b602081526000825180602084015261120c8160408501602087016111c1565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461126057600080fd5b50565b6000806040838503121561127657600080fd5b82356112818161123e565b946020939093013593505050565b6000806000606084860312156112a457600080fd5b83356112af8161123e565b925060208401356112bf8161123e565b9150604084013561ffff811681146112d657600080fd5b809150509250925092565b6000806000606084860312156112f657600080fd5b83356113018161123e565b92506020840135915060408401356112d68161123e565b60006020828403121561132a57600080fd5b81518015158114610fe757600080fd5b60006020828403121561134c57600080fd5b8151610fe78161123e565b60006020828403121561136957600080fd5b5051919050565b600082516113828184602087016111c1565b919091019291505056fea264697066735822122017fd7fc76e4a1efcf24b78a3417fad7ab9576f0a23aa756ddb211c5e2227aa9564736f6c634300080a003360806040523480156200001157600080fd5b5060405162002b8038038062002b80833981016040819052620000349162000122565b6001600160a01b0381166200008f5760405162461bcd60e51b815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640160405180910390fd5b6001600160a01b03811660008181526001602052604080822080546001600160601b0319166b204fce5e3e2502611000000090811790915590517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91620000f99190815260200190565b60405180910390a350600680546001600160a81b031916336101000260ff191617905562000154565b6000602082840312156200013557600080fd5b81516001600160a01b03811681146200014d57600080fd5b9392505050565b612a1c80620001646000396000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c806370a08231116100f9578063b4b5ea5711610097578063dd62ed3e11610071578063dd62ed3e14610503578063e7a324dc14610555578063f1127ed81461057c578063f2fde38b146105ee57600080fd5b8063b4b5ea57146104ca578063c3cda520146104dd578063d505accf146104f057600080fd5b806395d89b41116100d357806395d89b411461045b5780639742ca4614610497578063a9059cbb146104aa578063b0660c3d146104bd57600080fd5b806370a08231146103c7578063782d6fe11461040b5780637ecebe001461043b57600080fd5b806330adf81f11610166578063481c6a7511610140578063481c6a751461031e578063587cde1e146103435780635c19a95c146103795780636fcfff451461038c57600080fd5b806330adf81f14610298578063313ce567146102bf578063349dc329146102d957600080fd5b806320606b701161019757806320606b70146102545780632185810b1461027b57806323b872dd1461028557600080fd5b806306fdde03146101be578063095ea7b31461021057806318160ddd14610233575b600080fd5b6101fa6040518060400160405280600781526020017f47656172626f780000000000000000000000000000000000000000000000000081525081565b60405161020791906124a3565b60405180910390f35b61022361021e36600461253f565b610601565b6040519015158152602001610207565b6102466b204fce5e3e2502611000000081565b604051908152602001610207565b6102467f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b61028361070d565b005b610223610293366004612569565b6107ee565b6102467f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b6102c7601281565b60405160ff9091168152602001610207565b6007546102f99073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610207565b6006546102f990610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6102f96103513660046125a5565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6102836103873660046125a5565b61098a565b6103b261039a3660046125a5565b60046020526000908152604090205463ffffffff1681565b60405163ffffffff9091168152602001610207565b6102466103d53660046125a5565b73ffffffffffffffffffffffffffffffffffffffff166000908152600160205260409020546bffffffffffffffffffffffff1690565b61041e61041936600461253f565b610997565b6040516bffffffffffffffffffffffff9091168152602001610207565b6102466104493660046125a5565b60056020526000908152604090205481565b6101fa6040518060400160405280600481526020017f474541520000000000000000000000000000000000000000000000000000000081525081565b6102836104a53660046125a5565b610cae565b6102236104b836600461253f565b610e20565b6006546102239060ff1681565b61041e6104d83660046125a5565b610e5c565b6102836104eb3660046125d1565b610efa565b6102836104fe366004612629565b611310565b610246610511366004612693565b73ffffffffffffffffffffffffffffffffffffffff9182166000908152602081815260408083209390941682529190915220546bffffffffffffffffffffffff1690565b6102467fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b6105c561058a3660046126c6565b600360209081526000928352604080842090915290825290205463ffffffff81169064010000000090046bffffffffffffffffffffffff1682565b6040805163ffffffff90931683526bffffffffffffffffffffffff909116602083015201610207565b6102836105fc3660046125a5565b61187a565b6000807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83141561063f57506bffffffffffffffffffffffff610664565b6106618360405180606001604052806025815260200161285260259139611a15565b90505b3360008181526020818152604080832073ffffffffffffffffffffffffffffffffffffffff89168085529083529281902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff871690811790915590519081529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a360019150505b92915050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314610798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e616765720060448201526064015b60405180910390fd5b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f795b0e16c8da9807b0a215f3749bd6dbcc49fc0472183f4e446abb7dcbd9d00790600090a1565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081815260408083203380855290835281842054825160608101909352602580845291936bffffffffffffffffffffffff909116928592610856928892919061285290830139611a15565b90508673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156108a257506bffffffffffffffffffffffff82811614155b156109725760006108cc83836040518060600160405280603d8152602001612974603d9139611a67565b73ffffffffffffffffffffffffffffffffffffffff898116600081815260208181526040808320948a168084529482529182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff87169081179091559151918252939450919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505b61097d878783611ad5565b5060019695505050505050565b6109943382611e9c565b50565b6000438210610a28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f476561723a3a6765745072696f72566f7465733a206e6f74207965742064657460448201527f65726d696e656400000000000000000000000000000000000000000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff831660009081526004602052604090205463ffffffff1680610a63576000915050610707565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604081208491610a95600185612735565b63ffffffff90811682526020820192909252604001600020541611610b1b5773ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812090610ae5600184612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff1691506107079050565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020908152604080832083805290915290205463ffffffff16831015610b63576000915050610707565b600080610b71600184612735565b90505b8163ffffffff168163ffffffff161115610c565760006002610b968484612735565b610ba0919061275a565b610baa9083612735565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260036020908152604080832063ffffffff8581168552908352928190208151808301909252549283168082526401000000009093046bffffffffffffffffffffffff1691810191909152919250871415610c2a576020015194506107079350505050565b805163ffffffff16871115610c4157819350610c4f565b610c4c600183612735565b92505b5050610b74565b5073ffffffffffffffffffffffffffffffffffffffff8516600090815260036020908152604080832063ffffffff909416835292905220546bffffffffffffffffffffffff6401000000009091041691505092915050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314610d34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e6167657200604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff8116610db1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640161078f565b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f2f834d1c8c4b956018fff5faca4d99868ae635487424d9c265c257ccbc698c6a90600090a250565b600080610e45836040518060600160405280602681526020016128a760269139611a15565b9050610e52338583611ad5565b5060019392505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526004602052604081205463ffffffff1680610e94576000610ef3565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812090610ec5600184612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b9392505050565b604080518082018252600781527f47656172626f780000000000000000000000000000000000000000000000000060209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f028ef9f797075f74ac647c65fde04fb0f128c2d59fd40f45732269917642fd4681840152466060820152306080808301919091528351808303909101815260a0820184528051908301207fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60c083015273ffffffffffffffffffffffffffffffffffffffff8a1660e08301526101008201899052610120808301899052845180840390910181526101408301909452835193909201929092207f19010000000000000000000000000000000000000000000000000000000000006101608401526101628301829052610182830181905290916000906101a201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa1580156110d8573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166111a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f476561723a3a64656c656761746542795369673a20696e76616c69642073696760448201527f6e61747572650000000000000000000000000000000000000000000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff811660009081526005602052604081208054916111d7836127a4565b919050558914611269576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f476561723a3a64656c656761746542795369673a20696e76616c6964206e6f6e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161078f565b874211156112f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f476561723a3a64656c656761746542795369673a207369676e6174757265206560448201527f7870697265640000000000000000000000000000000000000000000000000000606482015260840161078f565b611303818b611e9c565b505050505b505050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86141561134d57506bffffffffffffffffffffffff611372565b61136f8660405180606001604052806024815260200161291c60249139611a15565b90505b604080518082018252600781527f47656172626f780000000000000000000000000000000000000000000000000060209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f028ef9f797075f74ac647c65fde04fb0f128c2d59fd40f45732269917642fd4681840152466060820152306080808301919091528351808303909101815260a0909101835280519082012073ffffffffffffffffffffffffffffffffffffffff8b166000908152600590925291812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918c918c918c919086611472836127a4565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810188905260e001604051602081830303815290604052805190602001209050600082826040516020016115199291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff8b169284019290925260608301899052608083018890529092509060019060a0016020604051602081039080840390855afa1580156115a2573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661164a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a7065726d69743a20696e76616c6964207369676e617475726500604482015260640161078f565b8b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146116df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f476561723a3a7065726d69743a20756e617574686f72697a6564000000000000604482015260640161078f565b88421115611749576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a7065726d69743a207369676e6174757265206578706972656400604482015260640161078f565b846000808e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508a73ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258760405161186491906bffffffffffffffffffffffff91909116815260200190565b60405180910390a3505050505050505050505050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314611900576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e6167657200604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff811661197d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640161078f565b60065460405173ffffffffffffffffffffffffffffffffffffffff80841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36006805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b6000816c010000000000000000000000008410611a5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b509192915050565b6000836bffffffffffffffffffffffff16836bffffffffffffffffffffffff1611158290611ac2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b50611acd83856127dd565b949350505050565b60065460ff1680611b025750600654610100900473ffffffffffffffffffffffffffffffffffffffff1633145b80611b24575060075473ffffffffffffffffffffffffffffffffffffffff1633145b611b8a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f476561723a3a7472616e73666572732061726520666f7262696464656e000000604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff8316611c2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603c60248201527f476561723a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260448201527f616e736665722066726f6d20746865207a65726f206164647265737300000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff8216611cd0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f476561723a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260448201527f616e7366657220746f20746865207a65726f2061646472657373000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260016020908152604091829020548251606081019093526036808452611d2d936bffffffffffffffffffffffff90921692859291906129b190830139611a67565b73ffffffffffffffffffffffffffffffffffffffff848116600090815260016020908152604080832080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff968716179055928616825290829020548251606081019093526030808452611dbf949190911692859290919061287790830139611f50565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260409182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff968716179055905193851684529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a373ffffffffffffffffffffffffffffffffffffffff808416600090815260026020526040808220548584168352912054611e9792918216911683611fc1565b505050565b73ffffffffffffffffffffffffffffffffffffffff808316600081815260026020818152604080842080546001845282862054949093528787167fffffffffffffffffffffffff000000000000000000000000000000000000000084168117909155905191909516946bffffffffffffffffffffffff9092169391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4611f4a828483611fc1565b50505050565b600080611f5d8486612802565b9050846bffffffffffffffffffffffff16816bffffffffffffffffffffffff1610158390611fb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b50949350505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561200b57506000816bffffffffffffffffffffffff16115b15611e975773ffffffffffffffffffffffffffffffffffffffff8316156120fd5773ffffffffffffffffffffffffffffffffffffffff831660009081526004602052604081205463ffffffff1690816120655760006120c4565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812090612096600185612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b905060006120eb82856040518060600160405280602881526020016128cd60289139611a67565b90506120f9868484846121e2565b5050505b73ffffffffffffffffffffffffffffffffffffffff821615611e975773ffffffffffffffffffffffffffffffffffffffff821660009081526004602052604081205463ffffffff1690816121525760006121b1565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812090612183600185612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b905060006121d882856040518060600160405280602781526020016128f560279139611f50565b9050611308858484845b60006122064360405180606001604052806034815260200161294060349139612465565b905060008463ffffffff1611801561226d575073ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812063ffffffff831691612251600188612735565b63ffffffff908116825260208201929092526040016000205416145b156123035773ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812083916122a4600188612735565b63ffffffff168152602081019190915260400160002080546bffffffffffffffffffffffff92909216640100000000027fffffffffffffffffffffffffffffffff000000000000000000000000ffffffff9092169190911790556123fe565b60408051808201825263ffffffff80841682526bffffffffffffffffffffffff808616602080850191825273ffffffffffffffffffffffffffffffffffffffff8b166000908152600382528681208b8616825290915294909420925183549451909116640100000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009094169116179190911790556123a5846001612832565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260046020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff929092169190911790555b604080516bffffffffffffffffffffffff80861682528416602082015273ffffffffffffffffffffffffffffffffffffffff8716917fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724910160405180910390a25050505050565b6000816401000000008410611a5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91905b600060208083528351808285015260005b818110156124d0578581018301518582016040015282016124b4565b818111156124e2576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461253a57600080fd5b919050565b6000806040838503121561255257600080fd5b61255b83612516565b946020939093013593505050565b60008060006060848603121561257e57600080fd5b61258784612516565b925061259560208501612516565b9150604084013590509250925092565b6000602082840312156125b757600080fd5b610ef382612516565b803560ff8116811461253a57600080fd5b60008060008060008060c087890312156125ea57600080fd5b6125f387612516565b9550602087013594506040870135935061260f606088016125c0565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a03121561264457600080fd5b61264d88612516565b965061265b60208901612516565b95506040880135945060608801359350612677608089016125c0565b925060a0880135915060c0880135905092959891949750929550565b600080604083850312156126a657600080fd5b6126af83612516565b91506126bd60208401612516565b90509250929050565b600080604083850312156126d957600080fd5b6126e283612516565b9150602083013563ffffffff811681146126fb57600080fd5b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600063ffffffff8381169083168181101561275257612752612706565b039392505050565b600063ffffffff80841680612798577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156127d6576127d6612706565b5060010190565b60006bffffffffffffffffffffffff8381169083168181101561275257612752612706565b60006bffffffffffffffffffffffff80831681851680830382111561282957612829612706565b01949350505050565b600063ffffffff8083168185168083038211156128295761282961270656fe476561723a3a617070726f76653a20616d6f756e7420657863656564732039362062697473476561723a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e74206f766572666c6f7773476561723a3a7472616e736665723a20616d6f756e7420657863656564732039362062697473476561723a3a5f6d6f7665566f7465733a20766f746520616d6f756e7420756e646572666c6f7773476561723a3a5f6d6f7665566f7465733a20766f746520616d6f756e74206f766572666c6f7773476561723a3a7065726d69743a20616d6f756e7420657863656564732039362062697473476561723a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d62657220657863656564732033322062697473476561723a3a7472616e7366657246726f6d3a207472616e7366657220616d6f756e742065786365656473207370656e64657220616c6c6f77616e6365476561723a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e7420657863656564732062616c616e6365a26469706673582212201b84fd7789a35c022f692420863210a30e82d2405659f5a28275d433fa53467f64736f6c634300080a003360806040526016805460ff1916905534801561001a57600080fd5b506040516110a73803806110a7833981016040819052610039916100b6565b600080546001600160a01b038085166001600160a01b0319928316179092556003805492841692909116919091179055610080600a6b033b2e3c9fd0803ce80000006100e9565b60075550506b033b2e3c9fd0803ce800000060155561010b565b80516001600160a01b03811681146100b157600080fd5b919050565b600080604083850312156100c957600080fd5b6100d28361009a565b91506100e06020840161009a565b90509250929050565b60008261010657634e487b7160e01b600052601260045260246000fd5b500490565b610f8d8061011a6000396000f3fe608060405234801561001057600080fd5b50600436106102e95760003560e01c806367c99d5811610191578063c5f956af116100e3578063dbcb313b11610097578063f11a648711610071578063f11a648714610320578063f3fdb15a146105f1578063fe14112d1461061157600080fd5b8063dbcb313b146105d6578063e941fa78146105df578063ef8d9603146105e857600080fd5b8063cb3905e1116100c8578063cb3905e1146105c4578063cf33d95514610320578063d0efe753146105cd57600080fd5b8063c5f956af14610588578063ca9505e4146105a857600080fd5b80639aa5d46211610145578063b6ac642a1161011f578063b6ac642a14610567578063bb04b19314610567578063bf28068b1461057557600080fd5b80639aa5d46214610544578063a4e8273e14610557578063b3554a0a1461055e57600080fd5b8063788c6bfe11610176578063788c6bfe146104ef5780638456cb591461050157806396df5dc01461053157600080fd5b806367c99d58146104de57806374375359146104e757600080fd5b806336dda7d51161024a5780634d778ad1116101fe57806354fd4d50116101d857806354fd4d50146104c05780635c975abb146104c8578063609ae317146104d557600080fd5b80634d778ad114610491578063532fe502146104a45780635427c938146104ad57600080fd5b80633f4ba83a1161022f5780633f4ba83a1461045257806345d31f9d1461047f5780634c19386c1461048857600080fd5b806336dda7d51461040f5780633e163df01461042f57600080fd5b80632495a599116102a157806329f3d3b61161028657806329f3d3b6146103b35780632a3354c9146103bc5780632e97ca21146103dc57600080fd5b80632495a599146103735780632954018c1461039357600080fd5b8063078c4781116102d2578063078c4781146103205780630fce70fb146103335780631e16e4fc1461033b57600080fd5b8063030dbb04146102ee57806305fe138b1461030a575b600080fd5b6102f760105481565b6040519081526020015b60405180910390f35b6102f7610318366004610ce8565b600092915050565b61033161032e366004610d14565b50565b005b6015546102f7565b61034e610349366004610d2f565b610618565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610301565b60035461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b60005461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6102f760095481565b600a5461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103ff6103ea366004610d14565b60066020526000908152604090205460ff1681565b6040519015158152602001610301565b60055461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103ff61043d366004610d14565b60146020526000908152604090205460ff1681565b610331601680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b6102f760075481565b6102f760015481565b6102f761049f366004610d2f565b61064f565b6102f760115481565b6102f76104bb366004610d2f565b61066d565b6102f7600181565b6016546103ff9060ff1681565b6102f760085481565b6102f7600d5481565b6102f7610685565b6b033b2e3c9fd0803ce80000006102f7565b610331601680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b61033161053f366004610d2f565b601555565b610331610552366004610d48565b505050565b60016102f7565b6102f7600e5481565b61033161032e366004610d2f565b610331610583366004610ce8565b61071d565b60135461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103316105b6366004610d7d565b600b92909255600c55600d55565b6102f7600c5481565b6102f7600b5481565b6102f760155481565b6102f7600f5481565b6102f760025481565b60125461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b60006102f7565b6004818154811061062857600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6000610667826b033b2e3c9fd0803ce800000061077a565b92915050565b6000610667826b033b2e3c9fd0803ce80000006108e9565b6003546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156106f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107189190610da9565b905090565b6009829055600a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691909117909155600354610776911682846109fe565b5050565b60408051808201909152600281527f4d330000000000000000000000000000000000000000000000000000000000006020820152600090826107f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b60405180910390fd5b506000610800600284610e72565b90506b033b2e3c9fd0803ce8000000610839827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610ead565b6108439190610e72565b8411156040518060400160405280600281526020017f4d31000000000000000000000000000000000000000000000000000000000000815250906108b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b5082816108cd6b033b2e3c9fd0803ce800000087610ec4565b6108d79190610f01565b6108e19190610e72565b949350505050565b60008215806108f6575081155b1561090357506000610667565b8161091b60026b033b2e3c9fd0803ce8000000610e72565b610945907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610ead565b61094f9190610e72565b8311156040518060400160405280600281526020017f4d31000000000000000000000000000000000000000000000000000000000000815250906109c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b506b033b2e3c9fd0803ce80000006109d9600282610e72565b6109e38486610ec4565b6109ed9190610f01565b6109f79190610e72565b9392505050565b6040805173ffffffffffffffffffffffffffffffffffffffff848116602483015260448083018590528351808403909101815260649092018352602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65649084015261055292869291600091610ac9918516908490610b73565b8051909150156105525780806020019051810190610ae79190610f19565b610552576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016107e9565b60606108e1848460008585843b610be6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107e9565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051610c0f9190610f3b565b60006040518083038185875af1925050503d8060008114610c4c576040519150601f19603f3d011682016040523d82523d6000602084013e610c51565b606091505b5091509150610c61828286610c6c565b979650505050505050565b60608315610c7b5750816109f7565b825115610c8b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ce357600080fd5b919050565b60008060408385031215610cfb57600080fd5b82359150610d0b60208401610cbf565b90509250929050565b600060208284031215610d2657600080fd5b6109f782610cbf565b600060208284031215610d4157600080fd5b5035919050565b600080600060608486031215610d5d57600080fd5b83359250610d6d60208501610cbf565b9150604084013590509250925092565b600080600060608486031215610d9257600080fd5b505081359360208301359350604090920135919050565b600060208284031215610dbb57600080fd5b5051919050565b60005b83811015610ddd578181015183820152602001610dc5565b83811115610dec576000848401525b50505050565b6020815260008251806020840152610e11816040850160208701610dc2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082610ea8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600082821015610ebf57610ebf610e43565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610efc57610efc610e43565b500290565b60008219821115610f1457610f14610e43565b500190565b600060208284031215610f2b57600080fd5b815180151581146109f757600080fd5b60008251610f4d818460208701610dc2565b919091019291505056fea26469706673582212204edb887d94928b3914f60ab48df0182da9eb30ddbb7021b164cc728b60a655d564736f6c634300080a003360e06040523480156200001157600080fd5b5060405162013af238038062013af2833981016040819052620000349162000630565b826001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000073573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000999190620007bf565b620000a433620004ab565b6001600160a01b038116608081905260408051630873769560e01b815290516308737695916004808201926020929091908290030181865afa158015620000ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001159190620007bf565b6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000153573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001799190620007bf565b6001600160a01b0390811660a052841660c0525060405183906200019d9062000519565b6001600160a01b039091168152602001604051809103906000f080158015620001ca573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b0392909216918217905560608301516080840151604051620002029062000527565b6001600160a01b03938416815292909116602083015215156040820152606001604051809103906000f0801580156200023f573d6000803e3d6000fd5b50600280546001600160a01b0319166001600160a01b0392909216919091179055604051600090620002746020820162000535565b601f1982820381018352601f909101166040819052600154600254620002b0926001600160a01b039283169291909116908790602001620007e6565b60408051601f1981840301815290829052620002d09291602001620008e8565b60408051601f19818403018152919052905060006200035982848151602092830120604080517fff00000000000000000000000000000000000000000000000000000000000000818601523060601b6001600160601b03191660218201526035810193909352605580840192909252805180840390920182526075909201909152805191012090565b600154604051634fafc35760e11b81526001600160a01b038084166004830152929350911690639f5f86ae90602401600060405180830381600087803b158015620003a357600080fd5b505af1158015620003b8573d6000803e3d6000fd5b50505050620003ce8284620004fb60201b60201c565b600380546001600160a01b0319166001600160a01b0383811691821790925560015460408051630304b08760e61b81529051919093169263c12c21c09160048083019260209291908290030181865afa15801562000430573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004569190620007bf565b6001600160a01b031614620004a05760405162461bcd60e51b815260206004820152600c60248201526b496e636f727265637420434d60a01b604482015260640160405180910390fd5b505050505062000909565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008183516020850134f59050803b6200051457600080fd5b505050565b6158e8806200243683390190565b615e978062007d1e83390190565b615f3d806200dbb583390190565b6001600160a01b03811681146200055957600080fd5b50565b8051620005698162000543565b919050565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b0381118282101715620005a957620005a96200056e565b60405290565b604080519081016001600160401b0381118282101715620005a957620005a96200056e565b604051601f8201601f191681016001600160401b0381118282101715620005ff57620005ff6200056e565b604052919050565b80516001600160801b03811681146200056957600080fd5b805180151581146200056957600080fd5b6000806000606084860312156200064657600080fd5b8351620006538162000543565b602085810151919450906001600160401b03808211156200067357600080fd5b9086019060a082890312156200068857600080fd5b6200069262000584565b6200069d8362000607565b8152620006ac84840162000607565b8482015260408084015183811115620006c457600080fd5b8401601f81018b13620006d657600080fd5b805184811115620006eb57620006eb6200056e565b620006fb878260051b01620005d4565b818152878101955060069190911b82018701908c8211156200071c57600080fd5b918701915b818310156200077e5783838e0312156200073b5760008081fd5b62000745620005af565b8351620007528162000543565b81528389015161ffff811681146200076a5760008081fd5b818a01528652948701949183019162000721565b8484015250620007939050606085016200055c565b6060830152620007a6608085016200061f565b6080830152979097015195989697509495945050505050565b600060208284031215620007d257600080fd5b8151620007df8162000543565b9392505050565b600060018060a01b0380861683526020818616818501526040606081860152610100850160018060801b038088511660608801528084890151166080880152508187015160a080880152818151808452610120890191508583019350600092505b808310156200087857835180518816835286015161ffff168683015292850192600192909201919084019062000847565b5060608901516001600160a01b031660c0890152608090980151151560e0909701969096525094979650505050505050565b6000815160005b81811015620008cd5760208185018101518683015201620008b1565b81811115620008dd576000828601525b509290920192915050565b600062000901620008fa8386620008aa565b84620008aa565b949350505050565b60805160a05160c051611ad3620009636000396000818161010a0152610ea00152600081816103790152610b170152600081816101680152818161068c01528181610a4d01528181610b860152610c190152611ad36000f3fe6080604052600436106100f35760003560e01c80638da5cb5b1161008a578063ebf0c71711610059578063ebf0c71714610367578063f2fde38b1461039b578063f4747c58146103bb578063f9aa028a146103db57600080fd5b80638da5cb5b1461025a57806394ca2cb5146102855780639c4ae2d014610327578063c12c21c01461033a57600080fd5b80633e0b1a23116100c65780633e0b1a23146101ce5780634ef501ac146101e3578063715018a614610230578063805abe6a1461024557600080fd5b806316f0115b146100f85780632954018c146101565780632f7a18811461018a578063318d0d10146101b7575b600080fd5b34801561010457600080fd5b5061012c7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561016257600080fd5b5061012c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561019657600080fd5b5060025461012c9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156101c357600080fd5b506101cc610408565b005b3480156101da57600080fd5b506101cc610498565b3480156101ef57600080fd5b506102036101fe366004611726565b610521565b6040805173ffffffffffffffffffffffffffffffffffffffff93841681529290911660208301520161014d565b34801561023c57600080fd5b506101cc610567565b34801561025157600080fd5b506101cc6105f2565b34801561026657600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff1661012c565b34801561029157600080fd5b5061012c6102a03660046117e6565b8151602092830120604080517fff00000000000000000000000000000000000000000000000000000000000000818601523060601b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660218201526035810193909352605580840192909252805180840390920182526075909201909152805191012090565b6101cc6103353660046117e6565b6107d8565b34801561034657600080fd5b5060015461012c9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561037357600080fd5b5061012c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103a757600080fd5b506101cc6103b63660046118c0565b6107f5565b3480156103c757600080fd5b506101cc6103d63660046118e4565b610925565b3480156103e757600080fd5b5060035461012c9073ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff16331461048e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b610496610a49565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610519576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b61048e610b82565b6004818154811061053157600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff91821692501682565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b61049660006116b1565b60005473ffffffffffffffffffffffffffffffffffffffff163314610673576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b3073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106f5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071991906119c4565b73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610763573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078791906119c4565b73ffffffffffffffffffffffffffffffffffffffff1614156107d5576040517fbdebb83f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33ff5b60008183516020850134f59050803b6107f057600080fd5b505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b73ffffffffffffffffffffffffffffffffffffffff8116610919576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610485565b610922816116b1565b50565b60005473ffffffffffffffffffffffffffffffffffffffff1633146109a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b805160005b818110156107f05760048382815181106109c7576109c76119e1565b602090810291909101810151825460018082018555600094855293839020825160029092020180547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff938416178255929093015192840180549092169216919091179055016109ab565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ab6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ada91906119c4565b6040517ff2fde38b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301529192509082169063f2fde38b90602401600060405180830381600087803b158015610b6757600080fd5b505af1158015610b7b573d6000803e3d6000fd5b5050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1391906119c4565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca691906119c4565b60045490915060005b81811015610dd4576003546004805473ffffffffffffffffffffffffffffffffffffffff90921691637bccacee919084908110610cee57610cee6119e1565b906000526020600020906002020160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660048481548110610d3357610d336119e1565b600091825260209091206002909102015460405160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b158015610db157600080fd5b505af1158015610dc5573d6000803e3d6000fd5b50505050806001019050610caf565b506001546040517fe26b2f6300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529084169063e26b2f6390602401600060405180830381600087803b158015610e4257600080fd5b505af1158015610e56573d6000803e3d6000fd5b50506001546040517fcf33d95500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201527f0000000000000000000000000000000000000000000000000000000000000000909116925063cf33d9559150602401600060405180830381600087803b158015610ee857600080fd5b505af1158015610efc573d6000803e3d6000fd5b50505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f919190611a10565b905060005b818110156116ab576003546040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810183905260009173ffffffffffffffffffffffffffffffffffffffff1690635094cb4f90602401602060405180830381865afa15801561100e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103291906119c4565b6001546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80841660048301529293506000929091169063fdd5764590602401602060405180830381865afa1580156110a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110cc91906119c4565b905060008173ffffffffffffffffffffffffffffffffffffffff1663ce30bbdb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561111b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113f9190611a29565b9050600c81601081111561115557611155611a4a565b14156116225760008273ffffffffffffffffffffffffffffffffffffffff166320b2c1516040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111cc91906119c4565b905060008373ffffffffffffffffffffffffffffffffffffffff1663927188d96040518163ffffffff1660e01b8152600401602060405180830381865afa15801561121b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123f91906119c4565b905060008473ffffffffffffffffffffffffffffffffffffffff166399253ac06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561128e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b291906119c4565b6040517f9dcb511a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152919250908a169063e8a97a3e9083908390639dcb511a90602401602060405180830381865afa15801561132c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135091906119c4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156113bd57600080fd5b505af11580156113d1573d6000803e3d6000fd5b50506040517f9dcb511a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301528c16925063e8a97a3e915085908390639dcb511a90602401602060405180830381865afa15801561144b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061146f91906119c4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156114dc57600080fd5b505af11580156114f0573d6000803e3d6000fd5b50506003546001546040517f7832743800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301529283169450633e7c88d69350879290911690637832743890602401602060405180830381865afa158015611573573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115979190611a79565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015261ffff166024820152604401600060405180830381600087803b15801561160657600080fd5b505af115801561161a573d6000803e3d6000fd5b505050505050505b600d81601081111561163657611636611a4a565b141561169d578173ffffffffffffffffffffffffffffffffffffffff16639b51ecd36040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561168457600080fd5b505af1158015611698573d6000803e3d6000fd5b505050505b836001019350505050610f96565b50505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561173857600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156117915761179161173f565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156117de576117de61173f565b604052919050565b600080604083850312156117f957600080fd5b823567ffffffffffffffff8082111561181157600080fd5b818501915085601f83011261182557600080fd5b81356020828211156118395761183961173f565b611869817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011601611797565b9250818352878183860101111561187f57600080fd5b8181850182850137600091830181019190915290969401359450505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461092257600080fd5b6000602082840312156118d257600080fd5b81356118dd8161189e565b9392505050565b600060208083850312156118f757600080fd5b823567ffffffffffffffff8082111561190f57600080fd5b818501915085601f83011261192357600080fd5b8135818111156119355761193561173f565b611943848260051b01611797565b818152848101925060069190911b83018401908782111561196357600080fd5b928401925b818410156119b957604084890312156119815760008081fd5b61198961176e565b84356119948161189e565b8152848601356119a38161189e565b8187015283526040939093019291840191611968565b979650505050505050565b6000602082840312156119d657600080fd5b81516118dd8161189e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215611a2257600080fd5b5051919050565b600060208284031215611a3b57600080fd5b8151601181106118dd57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060208284031215611a8b57600080fd5b815161ffff811681146118dd57600080fdfea264697066735822122090f5e4310a8b66bfdd7fdfbe64bc5b98570e7c1a415ffb0ced3c857cf6c5b14064736f6c634300080a00336101606040526000805462ff00001916620c00001790553480156200002357600080fd5b50604051620058e8380380620058e8833981016040819052620000469162000537565b806001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000085573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ab919062000537565b6000805460ff191690556001600160a01b038116620000dd57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200011c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000142919062000537565b6001600160a01b03166080816001600160a01b031681525050506000816001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200019d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c3919062000537565b6001600160a01b03831661010081905260e081905260408051632495a59960e01b81529051929350600092632495a599916004808201926020929091908290030181865afa1580156200021a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000240919062000537565b6001600160a01b03811660c05290506200025a8162000472565b816001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000299573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002bf919062000537565b6001600160a01b0316610120816001600160a01b031681525050816001600160a01b03166377532ed96040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000318573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033e919062000537565b6001600160a01b0316610140816001600160a01b031681525050816001600160a01b031663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000397573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003bd919062000537565b6001600001600a6101000a8154816001600160a01b0302191690836001600160a01b03160217905550816001600160a01b0316639068a8686040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000425573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044b919062000537565b6001600160a01b031660a0525050600380546001600160a01b031916331790555062000588565b6001600160a01b03811660009081526006602052604090205415620004aa57604051632e5a5c7760e01b815260040160405180910390fd5b61010060055410620004cf57604051631cbbe18560e01b815260040160405180910390fd5b600580546001600160a01b0383166000818152600660209081526040808320600190951b948590558483526004909152812091909155825491929062000515836200055e565b91905055505050565b6001600160a01b03811681146200053457600080fd5b50565b6000602082840312156200054a57600080fd5b815162000557816200051e565b9392505050565b60006000198214156200058157634e487b7160e01b600052601160045260246000fd5b5060010190565b60805160a05160c05160e051610100516101205161014051615248620006a0600039600081816107e20152818161371001526137c501526000818161052f01526136780152600081816103d301528181610e5701528181610ebb015281816124ff0152818161265a01528181612aa101528181612b8c01528181612c4e01528181612d0d0152613b8f015260006105a401526000818161062701528181610d2201528181610db301528181610e0001528181610e3601528181610f3f0152818161203a01528181612b6b015281816130ee015281816134dc015281816135a90152613fe601526000818161081c01528181610fe101526124c20152600081816107a80152818161118401526122cb01526152486000f3fe608060405234801561001057600080fd5b50600436106103415760003560e01c8063830aa745116101bd578063a70bc542116100f9578063e75538c7116100a2578063f9aa028a1161007c578063f9aa028a1461089d578063fdd57645146108bd578063fe47cde7146108f3578063ff6875431461091357600080fd5b8063e75538c714610864578063e958b70414610877578063f67c5bd01461088a57600080fd5b8063db7ceb80116100d3578063db7ceb8014610817578063dc2b21c11461083e578063e1998cf91461085157600080fd5b8063a70bc542146107ca578063c5e10eef146107dd578063d48bfca71461080457600080fd5b806394cf073a116101665780639f5f86ae116101405780639f5f86ae146107745780639fd12b7714610787578063a366f49614610790578063a50cf2c8146107a357600080fd5b806394cf073a146106f557806395373018146107085780639af1d35a1461071b57600080fd5b80638991b2f1116101975780638991b2f1146106af5780638fe3f93f146106cf578063944ac59f146106e257600080fd5b8063830aa7451461066f5780638345f26e146106825780638456cb59146106a757600080fd5b8063458936f51161028c578063570a7af2116102355780636ce4074a1161020f5780636ce4074a146105ef5780636e98e5e41461060f5780636f307dc314610622578063783274381461064957600080fd5b8063570a7af21461059f5780635c975abb146105c6578063654a9eda146105dc57600080fd5b80635063524a116102665780635063524a1461055157806351e3f1601461058457806354fd4d501461059757600080fd5b8063458936f51461050e57806346fb371d146105175780634f0e0ef31461052a57600080fd5b80632630c12f116102ee5780633192195c116102c85780633192195c146104be5780633e8297ca146104e65780633f4ba83a1461050657600080fd5b80632630c12f1461045857806329df0b93146104845780632f7a18811461049757600080fd5b806316f0115b1161031f57806316f0115b146103ce578063172c48c7146103f55780632362a2d81461043757600080fd5b8063055ee9b5146103465780630d8f9cee146103a657806311ca4fc2146103bb575b600080fd5b61037c610354366004614a87565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6103b96103b4366004614aa4565b610949565b005b6103b96103c9366004614aa4565b610a76565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b610408610403366004614add565b610b4e565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835261ffff90911660208301520161039d565b61044a610445366004614b13565b610b66565b60405190815260200161039d565b6001546a0100000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1661037c565b6103b9610492366004614a87565b6110be565b60005461037c906301000000900473ffffffffffffffffffffffffffffffffffffffff1681565b6104d16104cc366004614a87565b611122565b6040805192835260208301919091520161039d565b61044a6104f4366004614a87565b60096020526000908152604090205481565b6103b9611156565b61044a60055481565b6103b9610525366004614b95565b611244565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b61056461055f366004614be6565b61149b565b60408051948552602085019390935291830152606082015260800161039d565b6103b9610592366004614aa4565b611602565b61044a600281565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b60005460ff16604051901515815260200161039d565b6103b96105ea366004614c21565b611703565b6106026105fd366004614d40565b611bbb565b60405161039d9190614e5b565b6103b961061d366004614aa4565b611e8e565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b61065c610657366004614a87565b612036565b60405161ffff909116815260200161039d565b6103b961067d366004614b95565b61210f565b6000546106959062010000900460ff1681565b60405160ff909116815260200161039d565b6103b961229d565b61044a6106bd366004614a87565b60086020526000908152604090205481565b61037c6106dd366004614e6e565b612389565b6103b96106f0366004614ea5565b612718565b61044a610703366004614f0a565b612845565b6103b9610716366004614a87565b612e5a565b6001546040805161ffff808416825262010000840481166020830152640100000000840481169282019290925266010000000000008304821660608201526801000000000000000090920416608082015260a00161039d565b6103b9610782366004614a87565b612f85565b61044a60075481565b6103b961079e366004614add565b613045565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b96107d8366004614f4c565b61309b565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b9610812366004614a87565b613221565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b961084c366004614f81565b61327b565b6103b961085f366004614aa4565b613306565b610408610872366004614add565b6134c9565b61037c610885366004614a87565b613541565b61044a610898366004614a87565b6135a5565b60035461037c9073ffffffffffffffffffffffffffffffffffffffff1681565b61037c6108cb366004614a87565b600b6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b600c5461037c9073ffffffffffffffffffffffffffffffffffffffff1681565b61037c610921366004614a87565b600a6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561099b57506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b156109d2576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff1615610a14576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055610a4a828261362e565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b60035473ffffffffffffffffffffffffffffffffffffffff163314610ac7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805473ffffffffffffffffffffffffffffffffffffffff9384166301000000027fffffffffffffffffff0000000000000000000000000000000000000000ffffff90911617905560018054919092166a0100000000000000000000027fffff0000000000000000000000000000000000000000ffffffffffffffffffff909116179055565b600080610b5d6001841b6134c9565b91509150915091565b6000805460ff1615610bd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064015b60405180910390fd5b600054610100900460ff1615610c1b576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff163314610ca0576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610cab89613541565b90506000806000806000610cbe86611122565b9094509050610ccf8c8e868461149b565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152939b5093985090955093506000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015610d6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8f9190614fa4565b9050610d9b8887614fec565b610da6906001614fec565b811115610de657610de1877f00000000000000000000000000000000000000000000000000000000000000008d60018c8b870303038d61366e565b610e30565b610e3073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168d8960018a8d01869003016138c0565b610e7e877f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000089600061366e565b6040517fca9505e40000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604481018490527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ca9505e490606401600060405180830381600087803b158015610f1457600080fd5b505af1158015610f28573d6000803e3d6000fd5b50505050505050506001841115610f6757610f67837f00000000000000000000000000000000000000000000000000000000000000008d87600061366e565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260086020526040902054861916610f9c8489888461395b565b6040517f89b77b3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f000000000000000000000000000000000000000000000000000000000000000016906389b77b3e90602401600060405180830381600087803b15801561102557600080fd5b505af1158015611039573d6000803e3d6000fd5b50505073ffffffffffffffffffffffffffffffffffffffff909c16600090815260026020526040812080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550929a9950505050505050505050565b6000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314611116576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61111f81613a35565b50565b60008060008061113185613aa6565b91955092509050816111438286615004565b61114d9190615041565b92505050915091565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156111e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611204919061507c565b61123a576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611242613c24565b565b60005460ff16156112b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156112f3576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100178155338152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff9081169084161480159061137457506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b80156113985750600c5473ffffffffffffffffffffffffffffffffffffffff163314155b806113b7575073ffffffffffffffffffffffffffffffffffffffff8316155b156113ee576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113f7826135a5565b61142d576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061143885613541565b9050611448838583856000613d05565b61146c5761145b83858360006001613d05565b5061146a838583856001613d05565b505b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b6001546000908190819081906127109061ffff166114b98888615099565b6114c39190615004565b6114cd9190615041565b6114d79086614fec565b935060018760028111156114ed576114ed6150b0565b1415611587576001546000906127109061151390640100000000900461ffff168b615004565b61151d9190615041565b6001549091506127109061153b9062010000900461ffff168b615004565b6115459190615041565b61154f9086614fec565b94508481111561156657600185820303935061156a565b8094505b85811061157b578585039250611581565b84860391505b506115f7565b600287600281111561159b5761159b6150b0565b14156115f157600154600090612710906115c59068010000000000000000900461ffff168b615004565b6115cf9190615041565b6001549091506127109061153b906601000000000000900461ffff168b615004565b84840391505b945094509450949050565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561165457506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b1561168b576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff16156116cd576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055610a4a8282613ea6565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561175557506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b1561178c576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff16156117ce576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790556118048584613ea6565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152600091908616906370a0823190602401602060405180830381865afa158015611874573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118989190614fa4565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529192506000918616906370a0823190602401602060405180830381865afa15801561190a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192e9190614fa4565b60015490915060009081906a0100000000000000000000900473ffffffffffffffffffffffffffffffffffffffff16635cecbd0e61196c8689615099565b8a6119778988615099565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152600481019390935273ffffffffffffffffffffffffffffffffffffffff918216602484015260448301528a1660648201526084016040805180830381865afa1580156119f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1791906150df565b9150915060018411611a2d57611a2d898961362e565b611a3687612036565b611a449061ffff1682615004565b9050611a4f88612036565b611a5d9061ffff1683615004565b9150818110611a7857611a6f89613a35565b5050505061146c565b73ffffffffffffffffffffffffffffffffffffffff891660009081526009602052604081205483611ab56b033b2e3c9fd0803ce800000085615004565b611abf9190615041565b611ad5906b033b2e3c9fd0803ce8000000615099565b611adf9190614fec565b60015490915061271090611b0a906b033b2e3c9fd0803ce80000009062010000900461ffff16615004565b611b149190615041565b8111611b555773ffffffffffffffffffffffffffffffffffffffff8a166000908152600960205260409020819055611b4b8a613a35565b505050505061146c565b611b5e8a613f56565b50505073ffffffffffffffffffffffffffffffffffffffff871660009081526009602052604090206001905550505050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b6060611bc960005460ff1690565b15611c30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff1615611c72576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100178155338152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff908116908416141580611ce7575073ffffffffffffffffffffffffffffffffffffffff8316155b15611d3d57600c5473ffffffffffffffffffffffffffffffffffffffff163314611d3d576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611d4885613541565b90508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167faed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab0360405160405180910390a36040517f1cff79cd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821690631cff79cd90611df89087908790600401615103565b6000604051808303816000875af1158015611e17573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611e5d9190810190615132565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905595945050505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314611edf576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821615611f4f5773ffffffffffffffffffffffffffffffffffffffff8281166000908152600a6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169183169190911790555b73ffffffffffffffffffffffffffffffffffffffff811615611fbf5773ffffffffffffffffffffffffffffffffffffffff8181166000908152600b6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169184169190911790555b73ffffffffffffffffffffffffffffffffffffffff811673cccccccccccccccccccccccccccccccccccccccc141561203257600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790555b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120ba5750506001547e01000000000000000000000000000000000000000000000000000000000000900461ffff1690565b60006120c5836135a5565b9050806120fe576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612107816134c9565b949350505050565b60005460ff161561217c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156121be576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff163314612243576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61224d8383613ea6565b61226f73ffffffffffffffffffffffffffffffffffffffff83168585846138c0565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555050565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015612327573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061234b919061507c565b612381576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112426142d4565b6000805460ff16156123f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff1615612439576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff1633146124be576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166321d18456857f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612568573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061258c9190614fa4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168152600481019290925260248201526044016020604051808303816000875af11580156125e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061260b91906151a0565b6040517fbf28068b0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff80831660248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063bf28068b90604401600060405180830381600087803b1580156126a057600080fd5b505af11580156126b4573d6000803e3d6000fd5b505050506126c28382614394565b73ffffffffffffffffffffffffffffffffffffffff811660009081526008602052604081206001905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690559392505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314612769576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805461ffff92831668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9484166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff96851664010000000002969096167fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff97851662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000090931694909816939093171794909416949094179190911716919091179055565b6000805460ff16156128b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156128f5576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff16331461297a576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080600061298887613aa6565b925092509250846129a25761299d8684615099565b6129ac565b6129ac8684614fec565b935060008515612b045769021e19e0c9bab24000008510612a15576129d583603689901c615004565b6129e3603686901c84615004565b6129ed9190614fec565b603686901c6129fc8585615004565b612a069190615004565b612a109190615041565b612a52565b612a1f8388615004565b612a298584615004565b612a339190614fec565b85612a3e8585615004565b612a489190615004565b612a529190615041565b6040517fbf28068b0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff8a811660248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063bf28068b90604401600060405180830381600087803b158015612ae757600080fd5b505af1158015612afb573d6000803e3d6000fd5b50505050612d9f565b60008484612b128583615004565b612b1c9190615041565b612b269190615099565b60015490915060009061271090612b419061ffff1684615004565b612b4b9190615041565b905073ffffffffffffffffffffffffffffffffffffffff8a1663d1660f997f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000084612bb6878f614fec565b612bc09190614fec565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b158015612c3457600080fd5b505af1158015612c48573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ca9505e4838b612c949190614fec565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815260048101919091526024810184905260006044820152606401600060405180830381600087803b158015612cf357600080fd5b505af1158015612d07573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d9a9190614fa4565b925050505b6040517f16128211000000000000000000000000000000000000000000000000000000008152600481018690526024810182905273ffffffffffffffffffffffffffffffffffffffff891690631612821190604401600060405180830381600087803b158015612e0e57600080fd5b505af1158015612e22573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055509498975050505050505050565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff16158015612eac57506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b15612ee3576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff1615612f25576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055612f5a81613f56565b50600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b60035473ffffffffffffffffffffffffffffffffffffffff163314612fd6576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517ff62005acebe9b616aefb5f248b48f5e89f28437b27d1eebc0b2d911209f297af90600090a250565b60035473ffffffffffffffffffffffffffffffffffffffff163314613096576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600755565b60035473ffffffffffffffffffffffffffffffffffffffff1633146130ec576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613193576001805461ffff83167e01000000000000000000000000000000000000000000000000000000000000027dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790555050565b600061319e836135a5565b9050806131d7576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000908152600460205260409020805473ffffffffffffffffffffffffffffffffffffffff1675ffff000000000000000000000000000000000000000060a084901b161790555050565b60035473ffffffffffffffffffffffffffffffffffffffff163314613272576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61111f81614467565b60035473ffffffffffffffffffffffffffffffffffffffff1633146132cc576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805460ff90921662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff909216919091179055565b60005460ff1615613373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156133b5576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff16331461343a576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061344583613541565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260026020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055905061349c8282614394565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b60008082600114156135275750506001547f0000000000000000000000000000000000000000000000000000000000000000927e0100000000000000000000000000000000000000000000000000000000000090910461ffff169150565b50506000908152600460205260409020549060a082901c90565b73ffffffffffffffffffffffffffffffffffffffff80821660009081526002602052604090205416806135a0576040517fb5ba4c4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146136255773ffffffffffffffffffffffffffffffffffffffff8216600090815260066020526040902054613628565b60015b92915050565b6000613639826135a5565b73ffffffffffffffffffffffffffffffffffffffff909316600090815260086020526040902080549319939093169092555050565b8080156136c657507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b15613828576040517fd1660f9900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301526044820184905286169063d1660f9990606401600060405180830381600087803b15801561376357600080fd5b505af1158015613777573d6000803e3d6000fd5b50506040517f5869dba800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690527f0000000000000000000000000000000000000000000000000000000000000000169250635869dba89150604401600060405180830381600087803b15801561380b57600080fd5b505af115801561381f573d6000803e3d6000fd5b505050506138b9565b6040517fd1660f9900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301526044820184905286169063d1660f9990606401600060405180830381600087803b1580156138a057600080fd5b505af11580156138b4573d6000803e3d6000fd5b505050505b5050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261395590859061455b565b50505050565b60025b8181116138b95781811615613a2d576000613978826134c9565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529192506000918316906370a0823190602401602060405180830381865afa1580156139eb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a0f9190614fa4565b90506002811115613a2a57613a2a878388600185038961366e565b50505b60011b61395e565b73ffffffffffffffffffffffffffffffffffffffff811660009081526008602052604081205490613a6582614667565b60005490915062010000900460ff16811115613aa1576000613a86836146a7565b613a91906001614fec565b905061395584848460008561470b565b505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff16631afbb7a46040518163ffffffff1660e01b8152600401602060405180830381865afa158015613af6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b1a9190614fa4565b92508373ffffffffffffffffffffffffffffffffffffffff166317d11a156040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b8b9190614fa4565b91507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bf8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c1c9190614fa4565b929491935050565b60005460ff16613c90576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610bd0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6040805173ffffffffffffffffffffffffffffffffffffffff8681166024830152604480830186905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b30000000000000000000000000000000000000000000000000000000017905291517f1cff79cd000000000000000000000000000000000000000000000000000000008152600092861691631cff79cd91613dc6918a91600401615103565b6000604051808303816000875af1925050508015613e2457506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052613e219190810190615132565b60015b613e2d57613e61565b80511580613e50575080806020019051810190613e4a919061507c565b15156001145b15613e5f576001915050613e9d565b505b8115613e99576040517f76e3e29c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060005b95945050505050565b6000613eb1826135a5565b9050801580613ec35750600754811615155b15613efa576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83166000908152600860205260409020548116613aa15773ffffffffffffffffffffffffffffffffffffffff83166000908152600860205260409020805482179055505050565b60015473ffffffffffffffffffffffffffffffffffffffff8281166000908152600860205260408120546a010000000000000000000090930490911691908080613f9f86611122565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526127108202600482015273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350908716915063f9a6503090604401602060405180830381865afa15801561403a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061405e9190614fa4565b9250614069846146a7565b6001019150506000806000805b848110156142a157801561408f5760018186031b614092565b60015b935086841615614299576000806140a8866134c9565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8e811660048301529294509092506000918416906370a0823190602401602060405180830381865afa15801561411d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141419190614fa4565b9050600181111561428c576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff848116602483015261ffff841691908d169063f9a6503090604401602060405180830381865afa1580156141c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141ea9190614fa4565b6141f49190615004565b6141fe9087614fec565b95508886106142875760006142128b614667565b60005490915062010000900460ff16811115614249576142448d8c836001891561423e57898e0361470b565b8d61470b565b614278565b85156142785773ffffffffffffffffffffffffffffffffffffffff8d1660009081526008602052604090208b90555b50505050505050505050505050565b614295565b98861898600194505b5050505b600101614076565b506040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005460ff1615614341576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613cdb3390565b73ffffffffffffffffffffffffffffffffffffffff821615806143dd575073ffffffffffffffffffffffffffffffffffffffff8281166000908152600260205260409020541615155b15614414576040517f9e59609e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff918216600090815260026020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001691909216179055565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260066020526040902054156144c4576040517f2e5a5c7700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61010060055410614501576040517f1cbbe18500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005805473ffffffffffffffffffffffffffffffffffffffff83166000818152600660209081526040808320600190951b9485905584835260049091528120919091558254919290614552836151bd565b91905055505050565b60006145bd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166148799092919063ffffffff16565b805190915015613aa157808060200190518101906145db919061507c565b613aa1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610bd0565b60008060005b6101008110156146a0576001811b91508382161561468c578260010192505b838210614698576146a0565b60010161466d565b5050919050565b600081600114156146ba57506000919050565b61010060015b60016146cc8284614fec565b901c92506001831b848116158015906146e75750600185851c145b156146f257506146a0565b84811061470157839250614705565b8391505b506146c0565b815b81811015614846576001811b8581161561483d57600061472c826134c9565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529192506000918316906370a0823190602401602060405180830381865afa15801561479f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147c39190614fa4565b90506001811161483a57600054978318977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9097019660ff6201000090910416871161483a5750505073ffffffffffffffffffffffffffffffffffffffff86166000908152600860205260409020859055506138b9565b50505b5060010161470d565b506040517f53275fcb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606148888484600085614892565b90505b9392505050565b606082471015614924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610bd0565b843b61498c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610bd0565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516149b591906151f6565b60006040518083038185875af1925050503d80600081146149f2576040519150601f19603f3d011682016040523d82523d6000602084013e6149f7565b606091505b5091509150614a07828286614a12565b979650505050505050565b60608315614a2157508161488b565b825115614a315782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd09190614e5b565b73ffffffffffffffffffffffffffffffffffffffff8116811461111f57600080fd5b600060208284031215614a9957600080fd5b813561488b81614a65565b60008060408385031215614ab757600080fd5b8235614ac281614a65565b91506020830135614ad281614a65565b809150509250929050565b600060208284031215614aef57600080fd5b5035919050565b8035600381106135a057600080fd5b801515811461111f57600080fd5b600080600080600080600060e0888a031215614b2e57600080fd5b8735614b3981614a65565b9650614b4760208901614af6565b9550604088013594506060880135614b5e81614a65565b93506080880135614b6e81614a65565b925060a0880135915060c0880135614b8581614b05565b8091505092959891949750929550565b60008060008060808587031215614bab57600080fd5b8435614bb681614a65565b93506020850135614bc681614a65565b92506040850135614bd681614a65565b9396929550929360600135925050565b60008060008060808587031215614bfc57600080fd5b84359350614c0c60208601614af6565b93969395505050506040820135916060013590565b600080600080600060a08688031215614c3957600080fd5b8535614c4481614a65565b94506020860135614c5481614a65565b93506040860135614c6481614a65565b94979396509394606081013594506080013592915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614cf257614cf2614c7c565b604052919050565b600067ffffffffffffffff821115614d1457614d14614c7c565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600080600060608486031215614d5557600080fd5b8335614d6081614a65565b92506020840135614d7081614a65565b9150604084013567ffffffffffffffff811115614d8c57600080fd5b8401601f81018613614d9d57600080fd5b8035614db0614dab82614cfa565b614cab565b818152876020838501011115614dc557600080fd5b816020840160208301376000602083830101528093505050509250925092565b60005b83811015614e00578181015183820152602001614de8565b838111156139555750506000910152565b60008151808452614e29816020860160208601614de5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061488b6020830184614e11565b60008060408385031215614e8157600080fd5b823591506020830135614ad281614a65565b803561ffff811681146135a057600080fd5b600080600080600060a08688031215614ebd57600080fd5b614ec686614e93565b9450614ed460208701614e93565b9350614ee260408701614e93565b9250614ef060608701614e93565b9150614efe60808701614e93565b90509295509295909350565b600080600060608486031215614f1f57600080fd5b8335614f2a81614a65565b9250602084013591506040840135614f4181614b05565b809150509250925092565b60008060408385031215614f5f57600080fd5b8235614f6a81614a65565b9150614f7860208401614e93565b90509250929050565b600060208284031215614f9357600080fd5b813560ff8116811461488b57600080fd5b600060208284031215614fb657600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115614fff57614fff614fbd565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561503c5761503c614fbd565b500290565b600082615077577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60006020828403121561508e57600080fd5b815161488b81614b05565b6000828210156150ab576150ab614fbd565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600080604083850312156150f257600080fd5b505080516020909101519092909150565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015260006148886040830184614e11565b60006020828403121561514457600080fd5b815167ffffffffffffffff81111561515b57600080fd5b8201601f8101841361516c57600080fd5b805161517a614dab82614cfa565b81815285602083850101111561518f57600080fd5b613e9d826020830160208601614de5565b6000602082840312156151b257600080fd5b815161488b81614a65565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156151ef576151ef614fbd565b5060010190565b60008251615208818460208701614de5565b919091019291505056fea26469706673582212209d39bb9d4972b515acdad1ffb757acd15e103ca6ee762f88a6382b36243734ba64736f6c634300080a00336101406040523480156200001257600080fd5b5060405162005e9738038062005e97833981016040819052620000359162000198565b60016000556001600160a01b0383166200006257604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038316608081905260408051636f307dc360e01b81529051636f307dc3916004808201926020929091908290030181865afa158015620000ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d39190620001ea565b6001600160a01b031660a0816001600160a01b031681525050826001600160a01b0316634f0e0ef36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200012b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001519190620001ea565b6001600160a01b0390811660c0529190911660e0819052151561010052151561012052506200020f565b80516001600160a01b03811681146200019357600080fd5b919050565b600080600060608486031215620001ae57600080fd5b620001b9846200017b565b9250620001c9602085016200017b565b915060408401518015158114620001df57600080fd5b809150509250925092565b600060208284031215620001fd57600080fd5b62000208826200017b565b9392505050565b60805160a05160c05160e0516101005161012051615a86620004116000396000818161061101528181612fb5015261481f01526000818161031701528181610dde015281816144f901526146e5015260008181610557015281816146a901526147a901526000818161034b0152818161387d015261392d01526000818161047301528181611bfe0152818161274f0152818161280d0152818161366a01526137dd015260008181610665015281816109d801528181610b0301528181610bd501528181610cdd01528181610e6501528181610fe30152818161114e0152818161120e0152818161132e015281816114510152818161162b01528181611708015281816117e0015281816119e501528181611b1201528181611d9501528181611ed5015281816120040152818161216801528181612290015281816123c601528181612568015281816126390152818161266f0152818161293d01528181612a2101528181612a8a01528181612bde01528181612d2601528181612e6801528181612ec2015281816130a10152818161311b015281816131b401528181613341015281816134c10152818161358a0152818161372f01528181613a1a01528181613b2e01528181613dbb015281816142200152818161432801528181614492015281816148e7015281816149e801528181614aae0152614d8f0152615a866000f3fe6080604052600436106102695760003560e01c8063860aefcf11610153578063c7de38a6116100cb578063dfd594651161007f578063eb9606df11610064578063eb9606df1461081e578063f9eaee0d1461083e578063ffd9b9071461085e57600080fd5b8063dfd59465146107de578063e1f21c67146107fe57600080fd5b8063cff0ab96116100b0578063cff0ab96146106ef578063d9ccbec114610783578063dcf65482146107be57600080fd5b8063c7de38a6146106a7578063caa5c23f146106dc57600080fd5b80639c55a05411610122578063b55bb84b11610107578063b55bb84b14610633578063c12c21c014610653578063c690908a1461068757600080fd5b80639c55a054146105df578063b1836d32146105ff57600080fd5b8063860aefcf146104db5780639408b63f146105455780639b67ab30146105795780639be0536a146105bd57600080fd5b80635d91a0e0116101e65780636d19b486116101b55780637071b7c51161019a5780637071b7c51461049557806379c0ef91146104a857806382871ace146104c857600080fd5b80636d19b486146104415780636f307dc31461046157600080fd5b80635d91a0e0146103e85780635f73fbec146103fb578063601d66f61461040e5780636c8f225d1461042e57600080fd5b80633d9287fa1161023d5780635019e20a116102225780635019e20a1461039257806354fd4d50146103b257806359781034146103d557600080fd5b80633d9287fa146103055780634f0e0ef31461033957600080fd5b8062842b571461026e578063256ac915146102905780632a7ba1f7146102c55780632b7c7b11146102e5575b600080fd5b34801561027a57600080fd5b5061028e6102893660046151bf565b61087e565b005b34801561029c57600080fd5b506102b06102ab3660046151f8565b61098e565b60405190151581526020015b60405180910390f35b3480156102d157600080fd5b5061028e6102e0366004615215565b610a61565b3480156102f157600080fd5b5061028e610300366004615215565b610c3b565b34801561031157600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561034557600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102bc565b34801561039e57600080fd5b5061028e6103ad3660046151f8565b610d6a565b3480156103be57600080fd5b506103c7600281565b6040519081526020016102bc565b61028e6103e336600461522e565b61108c565b61028e6103f63660046152bb565b611275565b61028e610409366004615340565b611589565b34801561041a57600080fd5b5061028e6104293660046153d8565b6117de565b61028e61043c36600461541b565b611900565b34801561044d57600080fd5b506102b061045c3660046151f8565b611c31565b34801561046d57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b61028e6104a336600461546e565b611c60565b3480156104b457600080fd5b5061036d6104c3366004615215565b611f3e565b61028e6104d63660046152bb565b611f4b565b3480156104e757600080fd5b5060025461051c906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041682565b604080516fffffffffffffffffffffffffffffffff9384168152929091166020830152016102bc565b34801561055157600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561058557600080fd5b506004546040805167ffffffffffffffff608084901c1681526fffffffffffffffffffffffffffffffff9092166020830152016102bc565b3480156105c957600080fd5b506105d261227d565b6040516102bc91906154e2565b3480156105eb57600080fd5b5061028e6105fa36600461553c565b61228e565b34801561060b57600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561063f57600080fd5b5061028e61064e3660046151f8565b6123c4565b34801561065f57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561069357600080fd5b5061028e6106a23660046151f8565b6124c6565b3480156106b357600080fd5b506106c76106c23660046151f8565b612668565b604080519283526020830191909152016102bc565b61028e6106ea366004615557565b61289b565b3480156106fb57600080fd5b5060015461074e906fffffffffffffffffffffffffffffffff811690700100000000000000000000000000000000810460ff169071010000000000000000000000000000000000900464ffffffffff1683565b604080516fffffffffffffffffffffffffffffffff9094168452911515602084015264ffffffffff16908201526060016102bc565b34801561078f57600080fd5b506102b061079e366004615599565b600360209081526000928352604080842090915290825290205460ff1681565b3480156107ca57600080fd5b5061028e6107d93660046151f8565b612a88565b3480156107ea57600080fd5b506103c76107f93660046151f8565b612b86565b34801561080a57600080fd5b5061028e61081936600461522e565b612c6d565b34801561082a57600080fd5b5061028e6108393660046155c7565b612ec0565b34801561084a57600080fd5b506102b06108593660046151f8565b613057565b34801561086a57600080fd5b5061028e6108793660046155ee565b6131b2565b600260005414156108f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b6002600090815573ffffffffffffffffffffffffffffffffffffffff8316808252600360209081526040808420338086529083529381902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081527f9b3258bc4904fd6426b99843e206c6c7cdb1fd0f040121c25b71dafbb3851ee0910160405180910390a350506001600055565b6040517f055ee9b500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063055ee9b590602401602060405180830381865afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a43919061560b565b73ffffffffffffffffffffffffffffffffffffffff16141592915050565b60026000541415610ace576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610b5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b83919061560b565b9050610b903382846132eb565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906395373018906024015b600060405180830381600087803b158015610c1a57600080fd5b505af1158015610c2e573d6000803e3d6000fd5b5050600160005550505050565b60026000541415610ca8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610d39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5d919061560b565b9050610b90338284613411565b60026000541415610dd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000557f000000000000000000000000000000000000000000000000000000000000000015610e34576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610ec1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee5919061560b565b33600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915290205490915060ff16610f52576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f5d82613583565b5090508015610f98576040517ff713841e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b15801561102757600080fd5b505af115801561103b573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692503391507f93c70cc9715bef0d83edf2095f3595402279d274f402a73ffc17f1bcb19d863d90600090a35050600160005550565b600260005414156110f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611106613875565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063e958b70490602401602060405180830381865afa158015611197573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bb919061560b565b90506111c9848285856139b7565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401600060405180830381600087803b15801561125257600080fd5b505af1158015611266573d6000803e3d6000fd5b50506001600055505050505050565b600260005414156112e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611375573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611399919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166113e8576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806113f483613583565b915091508161142f576040517f1fdd676f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611437613875565b831561144d5761144d85858b8660016000613ae3565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632362a2d88b600185338e8e8e6040518863ffffffff1660e01b81526004016114b59796959493929190615663565b6020604051808303816000875af11580156114d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f891906156bf565b90508873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f7dfecd8419723a9d3954585a30c2a270165d70aafa146c11c1e1b88ae14390648460405161157091815260200190565b60405180910390a4505060016000555050505050505050565b600260005414156115f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ab919061560b565b90506116b5613875565b81156116cb576116cb8383338460016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d89061174a903390600090819083908d908d908d90600401615663565b6020604051808303816000875af1158015611769573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178d91906156bf565b5060405173ffffffffffffffffffffffffffffffffffffffff87169033907f460ad03b1cf79b1d64d3aefa28475f110ab66e84649c52bb41ed796b9b39198190600090a35050600160005550505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611849573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118d1576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff90811670010000000000000000000000000000000002911617600255565b6002600054141561196d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000908155606461198461ffff851687615707565b61198e9190615744565b9050611999816144f7565b6119a2816145e8565b6119ab84614668565b6119b3613875565b6040517f172c48c7000000000000000000000000000000000000000000000000000000008152600060048201819052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a64919061577f565b61ffff169150611a789050816127106157ae565b611a829083615707565b611a8c8288615707565b11611ac3576040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff86811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611b5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b81919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638587604051611bef92919091825261ffff16602082015260400190565b60405180910390a3611c2386827f00000000000000000000000000000000000000000000000000000000000000008a6139b7565b505060016000555050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526006602052604081205415155b92915050565b60026000541415611ccd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611cdb856144f7565b611ce484614668565b611ced856145e8565b600154700100000000000000000000000000000000900460ff1615611d3e576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d46613875565b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff85811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611de0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e04919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638885604051611e7292919091825261ffff16602082015260400190565b60405180910390a38215611e9057611e908484878460006001613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015611f1957600080fd5b505af1158015611f2d573d6000803e3d6000fd5b505060016000555050505050505050565b6000611c5a60058361480f565b60026000541415611fb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa15801561204b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206f919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166120be576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120c661481b565b6120fc576040517f7e52ccb400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061210782612668565b509050612112613875565b82156121285761212884848a8560016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d8906121aa908c90600290879033908f908f908f90600401615663565b6020604051808303816000875af11580156121c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ed91906156bf565b90508773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167ffada13ff2d5e1a1d9da37ad4a4130893b34e3c69c32b17f87ec31fd661b867078460405161226591815260200190565b60405180910390a45050600160005550505050505050565b6060612289600561486b565b905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612381576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561242f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612453919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146124b7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614878565b5050565b60026000541415612533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156125c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e8919061560b565b90506125f4818361489a565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401610c00565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126fc919061560b565b905060008061270b8387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156127a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127c991906156bf565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015291965061271091851690637afb010490604401602060405180830381865afa158015612863573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061288791906156bf565b6128919190615744565b9350505050915091565b60026000541415612908576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129bd919061560b565b90506129c7613875565b8115612a7e576129dc83833384600080613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015612a6557600080fd5b505af1158015612a79573d6000803e3d6000fd5b505050505b5050600160005550565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612af3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b17919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b7b576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614c92565b600080612b9283612668565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152919350600092507f000000000000000000000000000000000000000000000000000000000000000090911690633192195c906024016040805180830381865afa158015612c26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4a91906157c5565b9150819050612c5b61271084615707565b612c659190615744565b949350505050565b60026000541415612cda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063fdd5764590602401602060405180830381865afa158015612d6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d91919061560b565b73ffffffffffffffffffffffffffffffffffffffff161480612dd7575073ffffffffffffffffffffffffffffffffffffffff831660009081526006602052604090205415155b15612e0e576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612eac57600080fd5b505af1158015611c23573d6000803e3d6000fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f4f919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612fb3576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000061300a576040517f50dd11fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805464ffffffffff90921671010000000000000000000000000000000000027fffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffffff909216919091179055565b6040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063f67c5bd090602401602060405180830381865afa1580156130e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061310c91906156bf565b905080158015906131ab5750807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015613184573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a891906156bf565b16155b9392505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561321d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613241919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146132a5576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018054911515700100000000000000000000000000000000027fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff909216919091179055565b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600060448301819052917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561338c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133b091906156bf565b90506133bb816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f98274bf834d179ee08dc0604071b0dc90b54731bd5f725a5a96a39a86bce025a8360405161340391815260200190565b60405180910390a250505050565b61341a816144f7565b600154700100000000000000000000000000000000900460ff161561346b576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600160448301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561350c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061353091906156bf565b905061353b816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f9cac51154cc0d835e2f9c9d1f59a9344588cee107f4203bf58a8c797e3a58c458360405161340391815260200190565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613617919061560b565b90506000806136268387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156136c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136e491906156bf565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529195506000917f00000000000000000000000000000000000000000000000000000000000000001690633192195c906024016040805180830381865afa158015613775573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061379991906157c5565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350600092506127109187169063f9a6503090604401602060405180830381865afa158015613837573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061385b91906156bf565b6138659190615707565b9092109794965093945050505050565b34156139b5577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156138e357600080fd5b505af11580156138f7573d6000803e3d6000fd5b50506040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201523460248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16935063a9059cbb925060440190506020604051808303816000875af115801561398f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139b391906157e9565b505b565b6139c084614cb4565b6040517f830aa74500000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f0000000000000000000000000000000000000000000000000000000000000000169063830aa74590608401600060405180830381600087803b158015613a5e57600080fd5b505af1158015613a72573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fa32435755c235de2976ed44a75a2f85cb01faf0c894f639fe0c32bb9455fea8f83604051613ad591815260200190565b60405180910390a350505050565b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301523060248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b158015613b7257600080fd5b505af1158015613b86573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff871692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a28460005b8181101561441d5736888883818110613bea57613bea615806565b9050602002810190613bfc9190615835565b90506004613c0d6020830183615873565b90501015613c47576040517fe2b0e50600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b30613c5560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16141561421c578415613ca9576040517f5fb9107f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613cb86020830183615873565b613cc1916158d8565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167f59781034000000000000000000000000000000000000000000000000000000001415613e3c5760008080613d1e6020860186615873565b613d2c916004908290615920565b810190613d39919061522e565b925092509250613e34838c73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614613e2b576040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015613e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e26919061560b565b613e2d565b8b5b84846139b7565b505050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2b7c7b11000000000000000000000000000000000000000000000000000000001415613ec757600194506000613e996020840184615873565b613ea7916004908290615920565b810190613eb49190615215565b9050613ec1898983613411565b50614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2a7ba1f7000000000000000000000000000000000000000000000000000000001415613f80578415613f49576040517fc0b0caa800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613f586020840184615873565b613f66916004908290615920565b810190613f739190615215565b9050613ec18989836132eb565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f233a8caa0000000000000000000000000000000000000000000000000000000014156140e457600080613fda6020850185615873565b613fe8916004908290615920565b810190613ff5919061594a565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c8116600483015292945090925082918416906370a0823190602401602060405180830381865afa158015614069573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061408d91906156bf565b10156140dd576040517fa5ac537300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016108e7565b5050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fc690908a00000000000000000000000000000000000000000000000000000000141561416457600061413d6020840184615873565b61414b916004908290615920565b81019061415891906151f8565b9050613ec1888261489a565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f23e27a640000000000000000000000000000000000000000000000000000000014156141e45760006141bd6020840184615873565b6141cb916004908290615920565b8101906141d891906151f8565b9050613ec18882614d42565b6040517f1e9e7e7a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50614414565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff68754361426760208501856151f8565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156142d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142f4919061560b565b73ffffffffffffffffffffffffffffffffffffffff16148061436d575073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001661435560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16145b156143a4576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6144126143b46020830183615873565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506143f69250505060208401846151f8565b73ffffffffffffffffffffffffffffffffffffffff1690614e39565b505b50600101613bcf565b506040517f60c8e8938c9a0c0d88a98d6f1c562ce68077e12bf3edb8047378f2f736cb45b490600090a16040517fe1998cf900000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff86811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b1580156144d657600080fd5b505af11580156144ea573d6000803e3d6000fd5b5050505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006139b3576001546fffffffffffffffffffffffffffffffff9081169081146124c257600454608081901c906fffffffffffffffffffffffffffffffff16600067ffffffffffffffff8316431461456e578461458a565b61458a6fffffffffffffffffffffffffffffffff831686615976565b9050838111156145c6576040517f675f1a5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff81164360801b176004555050505050565b6002546fffffffffffffffffffffffffffffffff16811080614631575060025470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681115b156139b3576040517fce16799400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61467061481b565b156146a7576040517f63fc31c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1615614806577f0000000000000000000000000000000000000000000000000000000000000000801561472657503373ffffffffffffffffffffffffffffffffffffffff821614155b1561475d576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600160248301527f00000000000000000000000000000000000000000000000000000000000000001690639dc29fac90604401600060405180830381600087803b1580156147ed57600080fd5b505af1158015614801573d6000803e3d6000fd5b505050505b6139b381614cb4565b60006131ab8383614e7b565b60007f0000000000000000000000000000000000000000000000000000000000000000801561228957505060015471010000000000000000000000000000000000900464ffffffffff1642101590565b606060006131ab83614ea5565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f01565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561492b57600080fd5b505af115801561493f573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527fdf498aa1c340e992665d6fb4f3be8436d452c45a630cb6d7fab7963da39bac8793500190505b60405180910390a15050565b6040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600091829160019183917f00000000000000000000000000000000000000000000000000000000000000001690638991b2f190602401602060405180830381865afa158015614a2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a5391906156bf565b90505b808211614c895780821615614c7d576040517fe75538c700000000000000000000000000000000000000000000000000000000815260048101839052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e75538c7906024016040805180830381865afa158015614af4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b18919061577f565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529294509092506000918416906370a0823190602401602060405180830381865afa158015614b8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bb191906156bf565b90506001811115614c79576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff8481166024830152600091908b169063f9a6503090604401602060405180830381865afa158015614c33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c5791906156bf565b978801979050614c6b61ffff841682615707565b614c759088615976565b9650505b5050505b600182901b9150614a56565b50509250929050565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f50565b3373ffffffffffffffffffffffffffffffffffffffff821614801590614d0b575033600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16155b156139b3576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b158015614dd357600080fd5b505af1158015614de7573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527f69db9e9764da61b6681b89fb0f5be018506e0342036e56b59c3015a620d60977935001905061498d565b60606131ab83836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250615043565b6000826000018281548110614e9257614e92615806565b9060005260206000200154905092915050565b606081600001805480602002602001604051908101604052809291908181526020018280548015614ef557602002820191906000526020600020905b815481526020019060010190808311614ee1575b50505050509050919050565b6000818152600183016020526040812054614f4857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611c5a565b506000611c5a565b60008181526001830160205260408120548015615039576000614f746001836157ae565b8554909150600090614f88906001906157ae565b9050818114614fed576000866000018281548110614fa857614fa8615806565b9060005260206000200154905080876000018481548110614fcb57614fcb615806565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080614ffe57614ffe61598e565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611c5a565b6000915050611c5a565b6060612c65848460008585843b6150b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108e7565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516150df91906159ed565b60006040518083038185875af1925050503d806000811461511c576040519150601f19603f3d011682016040523d82523d6000602084013e615121565b606091505b509150915061513182828661513c565b979650505050505050565b6060831561514b5750816131ab565b82511561515b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e791906159ff565b73ffffffffffffffffffffffffffffffffffffffff811681146139b357600080fd5b80151581146139b357600080fd5b600080604083850312156151d257600080fd5b82356151dd8161518f565b915060208301356151ed816151b1565b809150509250929050565b60006020828403121561520a57600080fd5b81356131ab8161518f565b60006020828403121561522757600080fd5b5035919050565b60008060006060848603121561524357600080fd5b833561524e8161518f565b9250602084013561525e8161518f565b929592945050506040919091013590565b60008083601f84011261528157600080fd5b50813567ffffffffffffffff81111561529957600080fd5b6020830191508360208260051b85010111156152b457600080fd5b9250929050565b60008060008060008060a087890312156152d457600080fd5b86356152df8161518f565b955060208701356152ef8161518f565b9450604087013593506060870135615306816151b1565b9250608087013567ffffffffffffffff81111561532257600080fd5b61532e89828a0161526f565b979a9699509497509295939492505050565b60008060008060006080868803121561535857600080fd5b85356153638161518f565b945060208601359350604086013561537a816151b1565b9250606086013567ffffffffffffffff81111561539657600080fd5b6153a28882890161526f565b969995985093965092949392505050565b80356fffffffffffffffffffffffffffffffff811681146153d357600080fd5b919050565b600080604083850312156153eb57600080fd5b6153f4836153b3565b9150615402602084016153b3565b90509250929050565b61ffff811681146139b357600080fd5b6000806000806080858703121561543157600080fd5b8435935060208501356154438161518f565b925060408501356154538161540b565b915060608501356154638161540b565b939692955090935050565b60008060008060006080868803121561548657600080fd5b8535945060208601356154988161518f565b9350604086013567ffffffffffffffff8111156154b457600080fd5b6154c08882890161526f565b90945092505060608601356154d48161540b565b809150509295509295909350565b6020808252825182820181905260009190848201906040850190845b8181101561553057835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016154fe565b50909695505050505050565b60006020828403121561554e57600080fd5b6131ab826153b3565b6000806020838503121561556a57600080fd5b823567ffffffffffffffff81111561558157600080fd5b61558d8582860161526f565b90969095509350505050565b600080604083850312156155ac57600080fd5b82356155b78161518f565b915060208301356151ed8161518f565b6000602082840312156155d957600080fd5b813564ffffffffff811681146131ab57600080fd5b60006020828403121561560057600080fd5b81356131ab816151b1565b60006020828403121561561d57600080fd5b81516131ab8161518f565b6003811061565f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b73ffffffffffffffffffffffffffffffffffffffff888116825260e082019061568f602084018a615628565b6040830197909752948616606082015292909416608083015260a082015291151560c09092019190915292915050565b6000602082840312156156d157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561573f5761573f6156d8565b500290565b60008261577a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000806040838503121561579257600080fd5b825161579d8161518f565b60208401519092506151ed8161540b565b6000828210156157c0576157c06156d8565b500390565b600080604083850312156157d857600080fd5b505080516020909101519092909150565b6000602082840312156157fb57600080fd5b81516131ab816151b1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc183360301811261586957600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126158a857600080fd5b83018035915067ffffffffffffffff8211156158c357600080fd5b6020019150368190038213156152b457600080fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156159185780818660040360031b1b83161692505b505092915050565b6000808585111561593057600080fd5b8386111561593d57600080fd5b5050820193919092039150565b6000806040838503121561595d57600080fd5b82356159688161518f565b946020939093013593505050565b60008219821115615989576159896156d8565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60005b838110156159d85781810151838201526020016159c0565b838111156159e7576000848401525b50505050565b600082516158698184602087016159bd565b6020815260008251806020840152615a1e8160408501602087016159bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea2646970667358221220a3f4a705ab580a6ada1e438cd2ee4abc001b62d1d171fce12c41994900fef21664736f6c634300080a003360a06040523480156200001157600080fd5b5060405162005f3d38038062005f3d8339810160408190526200003491620012eb565b826001600160a01b031663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000073573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200009991906200147f565b6001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000d7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000fd91906200147f565b6000805460ff191690556001600160a01b0381166200012f57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200016e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200019491906200147f565b6001600160a01b03908116608052600180546001600160a01b031916918616918217905560408051636f307dc360e01b81529051919250636f307dc39160048083019260209291908290030181865afa158015620001f6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200021c91906200147f565b600260006101000a8154816001600160a01b0302191690836001600160a01b03160217905550826001600160a01b031663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000281573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a791906200147f565b6001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200030b91906200147f565b600080546001600160a01b039290921661010002610100600160a81b0319909216919091179055620003626103e860c86200034b6101f4612710620014bc565b60646200035c60c8612710620014bc565b620005e8565b60408101515160005b81811015620003ee576000836040015182815181106200038f576200038f620014e2565b6020026020010151600001519050620003ae81620007c260201b60201c565b620003e48185604001518481518110620003cc57620003cc620014e2565b60200260200101516020015162000a5e60201b60201c565b506001016200036b565b5060015460408051632630c12f60e01b815290516001600160a01b03909216916311ca4fc29186918491632630c12f9160048083019260209291908290030181865afa15801562000443573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200046991906200147f565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401600060405180830381600087803b158015620004b257600080fd5b505af1158015620004c7573d6000803e3d6000fd5b50506040516001600160a01b03861692507fa8b21f72cb83bce808df32dc2330217d744a1c22f3e9e44e4b11bbf049d37d9d9150600090a2600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000553573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200057991906200147f565b6001600160a01b03167f3f82447be465b0b5a4a9e54c74d5f6ae73f2e9537f2cc1590a340524703d096160405160405180910390a26020820151620005cb90620005c5906002620014f8565b62000bda565b81516020830151620005de919062000dc8565b5050505062001604565b6000620005f68585620014bc565b60015460405163172c48c760e01b81526000600482018190529293506001600160a01b039091169063172c48c7906024016040805180830381865afa15801562000644573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200066a91906200152a565b9150508061ffff168261ffff1614620006be57620006888262000f47565b60025460405161ffff841681526001600160a01b039091169060008051602062005f1d8339815191529060200160405180910390a25b60015460405163944ac59f60e01b815261ffff808a166004830152808916602483015280881660448301528087166064830152851660848201526001600160a01b039091169063944ac59f9060a401600060405180830381600087803b1580156200072857600080fd5b505af11580156200073d573d6000803e3d6000fd5b505050507f2214a403d5f8d049e52eacca974c6dea01a471e41d6a18903bfaf7dbc709741f878787612710620007749190620014bc565b876200078388612710620014bc565b6040805161ffff96871681529486166020860152928516848401529084166060840152909216608082015290519081900360a00190a150505050505050565b6001600160a01b038116620007ea57604051635919af9760e11b815260040160405180910390fd5b62000809816001600160a01b03166200116f60201b620023381760201c565b620008365760405163df4c572d60e01b81526001600160a01b038216600482015260240160405180910390fd5b6040516370a0823160e01b81523060048201526001600160a01b038216906370a0823190602401602060405180830381865afa92505050801562000899575060408051601f3d908101601f19168201909252620008969181019062001564565b60015b620008b75760405163528ca31d60e01b815260040160405180910390fd5b50600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200090c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200093291906200147f565b604051630f9a650360e41b8152670de0b6b3a764000060048201526001600160a01b038381166024830152919091169063f9a6503090604401602060405180830381865afa925050508015620009a7575060408051601f3d908101601f19168201909252620009a49181019062001564565b60015b620009c5576040516367a7cd4360e01b815260040160405180910390fd5b5060015460405163d48bfca760e01b81526001600160a01b0383811660048301529091169063d48bfca790602401600060405180830381600087803b15801562000a0e57600080fd5b505af115801562000a23573d6000803e3d6000fd5b50506040516001600160a01b03841692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a250565b6002546001600160a01b038381169116141562000a8e57604051633b899cf960e01b815260040160405180910390fd5b60015460405163172c48c760e01b8152600060048201819052916001600160a01b03169063172c48c7906024016040805180830381865afa15801562000ad8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000afe91906200152a565b91505061ffff8216158062000b1a57508061ffff168261ffff16115b1562000b39576040516333c6608d60e01b815260040160405180910390fd5b600154604051635385e2a160e11b81526001600160a01b03858116600483015261ffff851660248301529091169063a70bc54290604401600060405180830381600087803b15801562000b8b57600080fd5b505af115801562000ba0573d6000803e3d6000fd5b505060405161ffff851681526001600160a01b038616925060008051602062005f1d833981519152915060200160405180910390a2505050565b600062000be662001175565b6001600160a01b031663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801562000c24573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c4a91906200157e565b50509050600062000c606200117560201b60201c565b6001600160a01b031663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa15801562000c9d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000cc39190620015d5565b915050806001600160801b0316836001600160801b0316101562000cfa576040516309aadd6f60e41b815260040160405180910390fd5b826001600160801b0316826001600160801b03161462000dc35762000d1e62001175565b604051632715681560e21b81526001600160801b03851660048201526001600160a01b039190911690639c55a05490602401600060405180830381600087803b15801562000d6b57600080fd5b505af115801562000d80573d6000803e3d6000fd5b50506040516001600160801b03861681527fa030eec20ae970821387224ec3bb15b4bd22b89bfb86dc4d2b3827aa3d99e48d925060200190505b60405180910390a15b505050565b600062000dd462001175565b6001600160a01b031663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801562000e12573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e3891906200157e565b50509050816001600160801b0316836001600160801b0316118062000e6e5750806001600160801b0316826001600160801b0316115b1562000e8d576040516309aadd6f60e41b815260040160405180910390fd5b62000e9762001175565b60405163300eb37b60e11b81526001600160801b038086166004830152841660248201526001600160a01b03919091169063601d66f690604401600060405180830381600087803b15801562000eec57600080fd5b505af115801562000f01573d6000803e3d6000fd5b5050604080516001600160801b038088168252861660208201527f4d4981437d0211f9e6843eb024d9ada1fa3a99514d4343d4aece106dd11524bb935001905062000dba565b600154600254604051635385e2a160e11b81526001600160a01b03918216600482015261ffff8416602482015291169063a70bc54290604401600060405180830381600087803b15801562000f9b57600080fd5b505af115801562000fb0573d6000803e3d6000fd5b505050506000600160009054906101000a90046001600160a01b03166001600160a01b031663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200100a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001030919062001564565b905060015b8181101562000dc35760015460405163172c48c760e01b81526004810183905260009182916001600160a01b039091169063172c48c7906024016040805180830381865afa1580156200108c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010b291906200152a565b915091508461ffff168161ffff1611156200116457600154604051635385e2a160e11b81526001600160a01b03848116600483015261ffff881660248301529091169063a70bc54290604401600060405180830381600087803b1580156200111957600080fd5b505af11580156200112e573d6000803e3d6000fd5b505060405161ffff881681526001600160a01b038516925060008051602062005f1d833981519152915060200160405180910390a25b505060010162001035565b3b151590565b60015460408051632f7a188160e01b815290516000926001600160a01b031691632f7a18819160048083019260209291908290030181865afa158015620011c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011e691906200147f565b905090565b6001600160a01b03811681146200120157600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b03811182821017156200123f576200123f62001204565b60405290565b604080519081016001600160401b03811182821017156200123f576200123f62001204565b604051601f8201601f191681016001600160401b038111828210171562001295576200129562001204565b604052919050565b80516001600160801b0381168114620012b557600080fd5b919050565b8051620012b581620011eb565b805161ffff81168114620012b557600080fd5b80518015158114620012b557600080fd5b6000806000606084860312156200130157600080fd5b83516200130e81620011eb565b809350506020808501516200132381620011eb565b604086810151919450906001600160401b03808211156200134357600080fd5b9087019060a0828a0312156200135857600080fd5b620013626200121a565b6200136d836200129d565b81526200137c8584016200129d565b8582015283830151828111156200139257600080fd5b8301601f81018b13620013a457600080fd5b805183811115620013b957620013b962001204565b620013c9878260051b016200126a565b818152878101945060069190911b82018701908c821115620013ea57600080fd5b918701915b81831015620014435786838e031215620014095760008081fd5b6200141362001245565b83516200142081620011eb565b81526200142f848a01620012c7565b818a015285529387019391860191620013ef565b838701525062001458905060608401620012ba565b60608201526200146b60808401620012da565b608082015280955050505050509250925092565b6000602082840312156200149257600080fd5b81516200149f81620011eb565b9392505050565b634e487b7160e01b600052601160045260246000fd5b600061ffff83811690831681811015620014da57620014da620014a6565b039392505050565b634e487b7160e01b600052603260045260246000fd5b60006001600160801b0382811684821681151582840482111615620015215762001521620014a6565b02949350505050565b600080604083850312156200153e57600080fd5b82516200154b81620011eb565b91506200155b60208401620012c7565b90509250929050565b6000602082840312156200157757600080fd5b5051919050565b6000806000606084860312156200159457600080fd5b6200159f846200129d565b9250620015af60208501620012da565b9150604084015164ffffffffff81168114620015ca57600080fd5b809150509250925092565b60008060408385031215620015e957600080fd5b620015f4836200129d565b91506200155b602084016200129d565b608051614878620016a56000396000818161033601528181610446015281816107c5015281816108c0015281816109ae01528181610b8301528181610f0a015281816113e1015281816114cf015281816115bb015281816116ab015281816117990152818161187d01528181611ad901528181611bc601528181611cb301528181611da0015281816120090152818161218c015261227901526148786000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80638456cb59116100f9578063dc2b21c111610097578063f0527ac611610071578063f0527ac6146103d7578063f206d32a146103df578063fb1bd8c4146103f2578063ffd9b9071461040557600080fd5b8063dc2b21c11461039e578063e6492d7b146103b1578063eb9606df146103c457600080fd5b8063a50cf2c8116100d3578063a50cf2c814610331578063a70bc54214610358578063b53472ef1461036b578063c12c21c01461037e57600080fd5b80638456cb59146103035780639c55a0541461030b5780639f1c50691461031e57600080fd5b806350e036ff1161016657806354fd4d501161014057806354fd4d50146102b25780635c975abb146102ba5780636f307dc3146102d05780637bccacee146102f057600080fd5b806350e036ff1461027657806352438e541461028c578063526a41e81461029f57600080fd5b80633e7c88d6116101a25780633e7c88d6146102355780633f4ba83a14610248578063456e0742146102505780635094cb4f1461026357600080fd5b806324147708146101c95780632954018c146101de5780632f7a18811461022d575b600080fd5b6101dc6101d7366004614307565b610418565b005b60005461020390610100900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6102036106fe565b6101dc610243366004614334565b610797565b6101dc610892565b6101dc61025e366004614307565b610980565b61020361027136600461436d565b610b36565b61027e610b49565b604051908152602001610224565b6101dc61029a366004614307565b610b55565b6101dc6102ad366004614394565b610edc565b61027e600281565b60005460ff166040519015158152602001610224565b6002546102039073ffffffffffffffffffffffffffffffffffffffff1681565b6101dc6102fe3660046143c2565b6113b3565b6101dc6114a1565b6101dc61031936600461440e565b61158d565b6101dc61032c36600461442b565b61167d565b6102037f000000000000000000000000000000000000000000000000000000000000000081565b6101dc610366366004614334565b61176b565b6101dc610379366004614307565b61184f565b6001546102039073ffffffffffffffffffffffffffffffffffffffff1681565b6101dc6103ac366004614459565b611aab565b6101dc6103bf366004614307565b611b98565b6101dc6103d236600461448f565b611c85565b6101dc611d72565b6101dc6103ed3660046144ac565b611fdb565b6101dc610400366004614307565b61215e565b6101dc61041336600461451d565b61224b565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156104a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c6919061453a565b6104fc576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006105078261233e565b90506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015610578573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059c9190614557565b90508181166106f9576001546040517fa366f496000000000000000000000000000000000000000000000000000000008152918317600483018190529173ffffffffffffffffffffffffffffffffffffffff9091169063a366f49690602401600060405180830381600087803b15801561061557600080fd5b505af1158015610629573d6000803e3d6000fd5b505050506106356106fe565b6040517fffd9b9070000000000000000000000000000000000000000000000000000000081526001600482015273ffffffffffffffffffffffffffffffffffffffff919091169063ffd9b90790602401600060405180830381600087803b15801561069f57600080fd5b505af11580156106b3573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692507ff17b849746e74d7186170c9553d4bbf60b4f8bb1ed81fe50c099b934fb078f059150600090a25b505050565b600154604080517f2f7a1881000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691632f7a18819160048083019260209291908290030181865afa15801561076e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610792919061457b565b905090565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610821573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610845919061453a565b61087b576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108848261241e565b61088e82826127f8565b5050565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa15801561091c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610940919061453a565b610976576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61097e612a15565b565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610a0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2e919061453a565b610a64576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a6d81612af6565b6001546040517f9f5f86ae00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015290911690639f5f86ae90602401600060405180830381600087803b158015610ada57600080fd5b505af1158015610aee573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507f5a0b7d0f9c24b39256e112a0584b4c5ce38d8f1dee2e7c56f15b852604cdc8869150600090a250565b6000610b43600383612cb8565b92915050565b60006107926003612ccb565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610bdf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c03919061453a565b610c39576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610c86576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063fdd5764590602401602060405180830381865afa158015610cf7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1b919061457b565b905073ffffffffffffffffffffffffffffffffffffffff8116610d6a576040517f1170cc2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f6e98e5e400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526000602483015290911690636e98e5e490604401600060405180830381600087803b158015610dde57600080fd5b505af1158015610df2573d6000803e3d6000fd5b50506001546040517f6e98e5e40000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff86811660248301529091169250636e98e5e49150604401600060405180830381600087803b158015610e6a57600080fd5b505af1158015610e7e573d6000803e3d6000fd5b50505050610e96826003612cd590919063ffffffff16565b5060405173ffffffffffffffffffffffffffffffffffffffff8316907fab9f405bf0c19b97f65a7031634db41569cd2f0e0376a610a1e977f9ab22b58f90600090a25050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610f66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8a919061453a565b610fc0576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fc982612af6565b6000806000610fd66106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015611020573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110449190614598565b9250925092506000806110556106fe565b73ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa15801561109e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c291906145e5565b9150915060006110d06106fe565b73ffffffffffffffffffffffffffffffffffffffff16639be0536a6040518163ffffffff1660e01b8152600401600060405180830381865afa15801561111a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526111609190810190614643565b9050600061116c6106fe565b73ffffffffffffffffffffffffffffffffffffffff1663b1836d326040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111da919061453a565b600154604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905192935073ffffffffffffffffffffffffffffffffffffffff909116916311ca4fc2918c918491632630c12f9160048083019260209291908290030181865afa158015611256573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061127a919061457b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156112e757600080fd5b505af11580156112fb573d6000803e3d6000fd5b5050505087156113675761130e87612cf7565b6113188484612f5d565b61132186613152565b60005b82518110156113575761134f83828151811061134257611342614726565b60200260200101516132a3565b600101611324565b50801561136757611367856133c9565b60405173ffffffffffffffffffffffffffffffffffffffff8a16907fa8b21f72cb83bce808df32dc2330217d744a1c22f3e9e44e4b11bbf049d37d9d90600090a2505050505050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561143d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611461919061453a565b611497576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61088e828261357b565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561152b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061154f919061453a565b611585576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61097e6139c3565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611617573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163b919061453a565b611671576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81612cf7565b50565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611707573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172b919061453a565b611761576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61088e8282612f5d565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156117f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611819919061453a565b610884576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156118d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fd919061453a565b611933576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061193e8261233e565b90506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d39190614557565b9050818116156106f9576001546040517fa366f496000000000000000000000000000000000000000000000000000000008152918318600483018190529173ffffffffffffffffffffffffffffffffffffffff9091169063a366f49690602401600060405180830381600087803b158015611a4d57600080fd5b505af1158015611a61573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a2505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611b35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b59919061453a565b611b8f576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81613a83565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611c22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c46919061453a565b611c7c576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81613b3d565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611d0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d33919061453a565b611d69576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a816133c9565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611dfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e20919061453a565b611e56576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ec4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee8919061457b565b60015490915073ffffffffffffffffffffffffffffffffffffffff166311ca4fc2611f116106fe565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff91821660048201529084166024820152604401600060405180830381600087803b158015611f7f57600080fd5b505af1158015611f93573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507f3f82447be465b0b5a4a9e54c74d5f6ae73f2e9537f2cc1590a340524703d09619150600090a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015612065573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612089919061453a565b6120bf576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61271061ffff86161015806120e357506127106120dc8585614784565b61ffff1610155b806120fd57506127106120f68383614784565b61ffff1610155b15612134576040517f0b361d6900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6121578585612145866127106147aa565b85612152866127106147aa565b613c5c565b5050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156121e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061220c919061453a565b612242576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a816132a3565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156122d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122f9919061453a565b61232f576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81613152565b3b151590565b6001546040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063f67c5bd090602401602060405180830381865afa1580156123af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123d39190614557565b90508015806123e25750806001145b15612419576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b73ffffffffffffffffffffffffffffffffffffffff811661246b576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163b6124d6576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024015b60405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8216906370a0823190602401602060405180830381865afa92505050801561257a575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261257791810190614557565b60015b6125b0576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561261e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612642919061457b565b6040517ff9a65030000000000000000000000000000000000000000000000000000000008152670de0b6b3a7640000600482015273ffffffffffffffffffffffffffffffffffffffff8381166024830152919091169063f9a6503090604401602060405180830381865afa9250505080156126f8575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526126f591810190614557565b60015b61272e576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506001546040517fd48bfca700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301529091169063d48bfca790602401600060405180830381600087803b15801561279c57600080fd5b505af11580156127b0573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a250565b60025473ffffffffffffffffffffffffffffffffffffffff8381169116141561284d576040517f3b899cf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f172c48c70000000000000000000000000000000000000000000000000000000081526000600482018190529173ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa1580156128bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128e091906147cd565b91505061ffff821615806128fb57508061ffff168261ffff16115b15612932576040517f33c6608d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015261ffff851660248301529091169063a70bc54290604401600060405180830381600087803b1580156129a957600080fd5b505af11580156129bd573d6000803e3d6000fd5b505060405161ffff8516815273ffffffffffffffffffffffffffffffffffffffff861692507f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650915060200160405180910390a2505050565b60005460ff16612a81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016124cd565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b73ffffffffffffffffffffffffffffffffffffffff8116612b43576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163b612ba9576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024016124cd565b8073ffffffffffffffffffffffffffffffffffffffff1663c12c21c06040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612c2e575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252612c2b9181019061457b565b60015b612c64576040517fe9eddd1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60015473ffffffffffffffffffffffffffffffffffffffff82811691161461088e576040517fe9eddd1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612cc48383613e92565b9392505050565b6000610b43825490565b6000612cc48373ffffffffffffffffffffffffffffffffffffffff8416613ebc565b6000612d016106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015612d4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d6f9190614598565b505090506000612d7d6106fe565b73ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa158015612dc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dea91906145e5565b915050806fffffffffffffffffffffffffffffffff16836fffffffffffffffffffffffffffffffff161015612e4b576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826fffffffffffffffffffffffffffffffff16826fffffffffffffffffffffffffffffffff16146106f957612e7e6106fe565b6040517f9c55a0540000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff8516600482015273ffffffffffffffffffffffffffffffffffffffff9190911690639c55a05490602401600060405180830381600087803b158015612ef957600080fd5b505af1158015612f0d573d6000803e3d6000fd5b50506040516fffffffffffffffffffffffffffffffff861681527fa030eec20ae970821387224ec3bb15b4bd22b89bfb86dc4d2b3827aa3d99e48d925060200190505b60405180910390a1505050565b6000612f676106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015612fb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fd59190614598565b50509050816fffffffffffffffffffffffffffffffff16836fffffffffffffffffffffffffffffffff16118061302e5750806fffffffffffffffffffffffffffffffff16826fffffffffffffffffffffffffffffffff16115b15613065576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61306d6106fe565b6040517f601d66f60000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff80861660048301528416602482015273ffffffffffffffffffffffffffffffffffffffff919091169063601d66f690604401600060405180830381600087803b1580156130f057600080fd5b505af1158015613104573d6000803e3d6000fd5b5050604080516fffffffffffffffffffffffffffffffff8088168252861660208201527f4d4981437d0211f9e6843eb024d9ada1fa3a99514d4343d4aece106dd11524bb9350019050612f50565b600061315c6106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa1580156131a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131ca9190614598565b509150508015158215151461088e576131e16106fe565b6040517fffd9b907000000000000000000000000000000000000000000000000000000008152831515600482015273ffffffffffffffffffffffffffffffffffffffff919091169063ffd9b90790602401600060405180830381600087803b15801561324c57600080fd5b505af1158015613260573d6000803e3d6000fd5b505050507ff97ba903470ff3262b4a68a938fe81def401bac1bd742169d2e8d5c4ed2185d382604051613297911515815260200190565b60405180910390a15050565b73ffffffffffffffffffffffffffffffffffffffff81166132f0576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6132f86106fe565b6040517fb55bb84b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152919091169063b55bb84b90602401600060405180830381600087803b15801561336357600080fd5b505af1158015613377573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841681527fdac9a7995cbc0c0f01d78970fb6fd0b52fe0fe869eb6635e65cc1b5682b8325c925060200190505b60405180910390a150565b60006133d36106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801561341d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134419190614598565b925050508064ffffffffff168264ffffffffff161461088e578164ffffffffff168164ffffffffff16118061347c57508164ffffffffff1642115b156134b3576040517fe4eaca7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134bb6106fe565b6040517feb9606df00000000000000000000000000000000000000000000000000000000815264ffffffffff8416600482015273ffffffffffffffffffffffffffffffffffffffff919091169063eb9606df90602401600060405180830381600087803b15801561352b57600080fd5b505af115801561353f573d6000803e3d6000fd5b505060405164ffffffffff851681527f0b3eb35ba750e7a7e4d26c9eee3d226f4e1f68c5568f4a3d051c94b241b02ac092506020019050613297565b73ffffffffffffffffffffffffffffffffffffffff82166135c8576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82163b61362e576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016124cd565b61363781612af6565b60015473ffffffffffffffffffffffffffffffffffffffff8381169116148061369257506136636106fe565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b806136b7575060015473ffffffffffffffffffffffffffffffffffffffff8281169116145b806136f457506136c56106fe565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b1561372b576040517f727de5c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517fff68754300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063ff68754390602401602060405180830381865afa15801561379c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137c0919061457b565b73ffffffffffffffffffffffffffffffffffffffff1614158061388c57506001546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063fdd5764590602401602060405180830381865afa15801561384f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613873919061457b565b73ffffffffffffffffffffffffffffffffffffffff1614155b156138c3576040517f21ff1e7100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f6e98e5e400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152848116602483015290911690636e98e5e490604401600060405180830381600087803b15801561393857600080fd5b505af115801561394c573d6000803e3d6000fd5b50505050613964826003613faf90919063ffffffff16565b508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4bcbefaef68b99503d502f5a6abe7bca2b183ab8ac55457013c77d084ebd130560405160405180910390a35050565b60005460ff1615613a30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016124cd565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612acc3390565b6001546040517fdc2b21c100000000000000000000000000000000000000000000000000000000815260ff8316600482015273ffffffffffffffffffffffffffffffffffffffff9091169063dc2b21c190602401600060405180830381600087803b158015613af157600080fd5b505af1158015613b05573d6000803e3d6000fd5b505060405160ff841681527f73caacd705657a7d283e48ecf288b73bc517e3aea1bbc9da2fd54a979e8aa950925060200190506133be565b73ffffffffffffffffffffffffffffffffffffffff8116613b8a576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613b926106fe565b6040517fdcf6548200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152919091169063dcf6548290602401600060405180830381600087803b158015613bfd57600080fd5b505af1158015613c11573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841681527f32e53e2e527af8518ae889e5f7e674bc83f7cf68e4cc059aceeaa0e64208b85b925060200190506133be565b6000613c6885856147aa565b6001546040517f172c48c700000000000000000000000000000000000000000000000000000000815260006004820181905292935073ffffffffffffffffffffffffffffffffffffffff9091169063172c48c7906024016040805180830381865afa158015613cdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cff91906147cd565b9150508061ffff168261ffff1614613d6e57613d1a82613fd1565b60025460405161ffff8416815273ffffffffffffffffffffffffffffffffffffffff909116907f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac6509060200160405180910390a25b6001546040517f944ac59f00000000000000000000000000000000000000000000000000000000815261ffff808a1660048301528089166024830152808816604483015280871660648301528516608482015273ffffffffffffffffffffffffffffffffffffffff9091169063944ac59f9060a401600060405180830381600087803b158015613dfd57600080fd5b505af1158015613e11573d6000803e3d6000fd5b505050507f2214a403d5f8d049e52eacca974c6dea01a471e41d6a18903bfaf7dbc709741f878787612710613e4691906147aa565b87613e53886127106147aa565b6040805161ffff96871681529486166020860152928516848401529084166060840152909216608082015290519081900360a00190a150505050505050565b6000826000018281548110613ea957613ea9614726565b9060005260206000200154905092915050565b60008181526001830160205260408120548015613fa5576000613ee06001836147fc565b8554909150600090613ef4906001906147fc565b9050818114613f59576000866000018281548110613f1457613f14614726565b9060005260206000200154905080876000018481548110613f3757613f37614726565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080613f6a57613f6a614813565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610b43565b6000915050610b43565b6000612cc48373ffffffffffffffffffffffffffffffffffffffff8416614296565b6001546002546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015261ffff8416602482015291169063a70bc54290604401600060405180830381600087803b15801561404a57600080fd5b505af115801561405e573d6000803e3d6000fd5b505050506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156140d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140f59190614557565b905060015b818110156106f9576001546040517f172c48c700000000000000000000000000000000000000000000000000000000815260048101839052600091829173ffffffffffffffffffffffffffffffffffffffff9091169063172c48c7906024016040805180830381865afa158015614175573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061419991906147cd565b915091508461ffff168161ffff16111561428c576001546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015261ffff881660248301529091169063a70bc54290604401600060405180830381600087803b15801561422457600080fd5b505af1158015614238573d6000803e3d6000fd5b505060405161ffff8816815273ffffffffffffffffffffffffffffffffffffffff851692507f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650915060200160405180910390a25b50506001016140fa565b60008181526001830160205260408120546142dd57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610b43565b506000610b43565b73ffffffffffffffffffffffffffffffffffffffff8116811461167a57600080fd5b60006020828403121561431957600080fd5b8135612cc4816142e5565b61ffff8116811461167a57600080fd5b6000806040838503121561434757600080fd5b8235614352816142e5565b9150602083013561436281614324565b809150509250929050565b60006020828403121561437f57600080fd5b5035919050565b801515811461167a57600080fd5b600080604083850312156143a757600080fd5b82356143b2816142e5565b9150602083013561436281614386565b600080604083850312156143d557600080fd5b82356143e0816142e5565b91506020830135614362816142e5565b6fffffffffffffffffffffffffffffffff8116811461167a57600080fd5b60006020828403121561442057600080fd5b8135612cc4816143f0565b6000806040838503121561443e57600080fd5b8235614449816143f0565b91506020830135614362816143f0565b60006020828403121561446b57600080fd5b813560ff81168114612cc457600080fd5b64ffffffffff8116811461167a57600080fd5b6000602082840312156144a157600080fd5b8135612cc48161447c565b600080600080600060a086880312156144c457600080fd5b85356144cf81614324565b945060208601356144df81614324565b935060408601356144ef81614324565b925060608601356144ff81614324565b9150608086013561450f81614324565b809150509295509295909350565b60006020828403121561452f57600080fd5b8135612cc481614386565b60006020828403121561454c57600080fd5b8151612cc481614386565b60006020828403121561456957600080fd5b5051919050565b8051612419816142e5565b60006020828403121561458d57600080fd5b8151612cc4816142e5565b6000806000606084860312156145ad57600080fd5b83516145b8816143f0565b60208501519093506145c981614386565b60408501519092506145da8161447c565b809150509250925092565b600080604083850312156145f857600080fd5b8251614603816143f0565b6020840151909250614362816143f0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000602080838503121561465657600080fd5b825167ffffffffffffffff8082111561466e57600080fd5b818501915085601f83011261468257600080fd5b81518181111561469457614694614614565b8060051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f830116810181811085821117156146d7576146d7614614565b6040529182528482019250838101850191888311156146f557600080fd5b938501935b8285101561471a5761470b85614570565b845293850193928501926146fa565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061ffff8083168185168083038211156147a1576147a1614755565b01949350505050565b600061ffff838116908316818110156147c5576147c5614755565b039392505050565b600080604083850312156147e057600080fd5b82516147eb816142e5565b602084015190925061436281614324565b60008282101561480e5761480e614755565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea264697066735822122046c364b67d38a3dd85b57e027716324d90dd1df102f265f0a0e2697babdb3f3b64736f6c634300080a003394525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650608060405234801561001057600080fd5b5061029a806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80634e417a981461003a575b610037600080366100e6565b50005b610042610058565b60405161004f919061019d565b60405180910390f35b6000805461006590610210565b80601f016020809104026020016040519081016040528092919081815260200182805461009190610210565b80156100de5780601f106100b3576101008083540402835291602001916100de565b820191906000526020600020905b8154815290600101906020018083116100c157829003601f168201915b505050505081565b8280546100f290610210565b90600052602060002090601f0160209004810192826101145760008555610178565b82601f1061014b578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00823516178555610178565b82800160010185558215610178579182015b8281111561017857823582559160200191906001019061015d565b50610184929150610188565b5090565b5b808211156101845760008155600101610189565b600060208083528351808285015260005b818110156101ca578581018301518582016040015282016101ae565b818111156101dc576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b600181811c9082168061022457607f821691505b6020821081141561025e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b5091905056fea2646970667358221220ce4d98ff6e78d6e572ead23f5f0316947ad3d447e60e1efdfc3a1485144c317a64736f6c634300080a003360e06040523480156200001157600080fd5b50604051620018e8380380620018e883398101604081905262000034916200011d565b81816001600160a01b03821615806200005457506001600160a01b038116155b156200007357604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038216608081905260408051632f7a188160e01b81529051632f7a1881916004808201926020929091908290030181865afa158015620000be573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e4919062000155565b6001600160a01b0390811660a0521660c052506200017a915050565b80516001600160a01b03811681146200011857600080fd5b919050565b600080604083850312156200013157600080fd5b6200013c8362000100565b91506200014c6020840162000100565b90509250929050565b6000602082840312156200016857600080fd5b620001738262000100565b9392505050565b60805160a05160c05161169062000258600039600081816102990152818161038c0152818161071c0152818161083b0152818161091501528181610d1901528181610e380152610f120152600081816101f7015281816104390152818161058701528181610b840152610f9001526000818160fa015281816102c00152818161035d015281816104a3015281816107720152818161080c0152818161096b01528181610a2c01528181610af001528181610d6f01528181610e0901528181610f4901528181611018015281816110cc015261117601526116906000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c8063b73c1cfc11610081578063cd685c2c1161005b578063cd685c2c146102e2578063ce30bbdb146102f5578063d190b78d1461030a576100c9565b8063b73c1cfc14610281578063bd90df7014610294578063c12c21c0146102bb576100c9565b806333a9edaf116100b257806333a9edaf1461023e5780633ccb153e1461025357806378aa73a414610266576100c9565b806309c5eabe146101c95780632f7a1881146101f2575b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610156573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061017a91906111fd565b90506101bc6000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061031d92505050565b506101c681610421565b50005b6101dc6101d736600461133b565b610503565b6040516101e991906113f2565b60405180910390f35b6102197f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e9565b61025161024c366004611405565b61050e565b005b6101dc610261366004611437565b610517565b61026e600181565b60405161ffff90911681526020016101e9565b6101dc61028f3660046114cc565b610532565b6102197f000000000000000000000000000000000000000000000000000000000000000081565b6102197f000000000000000000000000000000000000000000000000000000000000000081565b6101dc6102f03660046114cc565b61054b565b6102fd600081565b6040516101e99190611550565b6101dc610318366004611437565b61055a565b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815260609073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a906103b69033907f0000000000000000000000000000000000000000000000000000000000000000908790600401611591565b6000604051808303816000875af11580156103d5573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261041b91908101906115d3565b92915050565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610500576040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b1580156104e757600080fd5b505af11580156104fb573d6000803e3d6000fd5b505050505b50565b606061041b8261031d565b61050081610421565b606061052787878787878761056a565b979650505050505050565b606061054186868686866109e3565b9695505050505050565b60606105418686868686610aa7565b6060610527878787878787610b67565b60606000803373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146106d3576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301528916906370a0823190602401602060405180830381865afa158015610618573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061063c9190611641565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152919350908816906370a0823190602401602060405180830381865afa1580156106ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d09190611641565b90505b84156107cf576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156107b657600080fd5b505af11580156107ca573d6000803e3d6000fd5b505050505b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a906108659033907f0000000000000000000000000000000000000000000000000000000000000000908b90600401611591565b6000604051808303816000875af1158015610884573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108ca91908101906115d3565b925084156109c9576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d906084015b600060405180830381600087803b1580156109b057600080fd5b505af11580156109c4573d6000803e3d6000fd5b505050505b6109d7898989858589610f78565b50509695505050505050565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015260609060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015610a73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a9791906111fd565b905061052781888888888861056a565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015260609060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015610b37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5b91906111fd565b90506105278188888888885b60606000803373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610cd0576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301528916906370a0823190602401602060405180830381865afa158015610c15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c399190611641565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152919350908816906370a0823190602401602060405180830381865afa158015610ca9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ccd9190611641565b90505b8415610dcc576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015610db357600080fd5b505af1158015610dc7573d6000803e3d6000fd5b505050505b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a90610e629033907f0000000000000000000000000000000000000000000000000000000000000000908b90600401611591565b6000604051808303816000875af1158015610e81573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610ec791908101906115d3565b925084156109c9576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301528981166044830152600160648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401610996565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614611079576040517f654a9eda00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528681166024830152858116604483015260648201859052608482018490527f0000000000000000000000000000000000000000000000000000000000000000169063654a9eda9060a401600060405180830381600087803b15801561105c57600080fd5b505af1158015611070573d6000803e3d6000fd5b505050506111d3565b8015611129576040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015286811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b15801561111057600080fd5b505af1158015611124573d6000803e3d6000fd5b505050505b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015285811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156111ba57600080fd5b505af11580156111ce573d6000803e3d6000fd5b505050505b505050505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461050057600080fd5b60006020828403121561120f57600080fd5b815161121a816111db565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561129757611297611221565b604052919050565b600067ffffffffffffffff8211156112b9576112b9611221565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f8301126112f657600080fd5b81356113096113048261129f565b611250565b81815284602083860101111561131e57600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121561134d57600080fd5b813567ffffffffffffffff81111561136457600080fd5b611370848285016112e5565b949350505050565b60005b8381101561139357818101518382015260200161137b565b838111156113a2576000848401525b50505050565b600081518084526113c0816020860160208601611378565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061121a60208301846113a8565b60006020828403121561141757600080fd5b813561121a816111db565b8035801515811461143257600080fd5b919050565b60008060008060008060c0878903121561145057600080fd5b863561145b816111db565b9550602087013561146b816111db565b9450604087013561147b816111db565b9350606087013567ffffffffffffffff81111561149757600080fd5b6114a389828a016112e5565b9350506114b260808801611422565b91506114c060a08801611422565b90509295509295509295565b600080600080600060a086880312156114e457600080fd5b85356114ef816111db565b945060208601356114ff816111db565b9350604086013567ffffffffffffffff81111561151b57600080fd5b611527888289016112e5565b93505061153660608701611422565b915061154460808701611422565b90509295509295909350565b602081016011831061158b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b600073ffffffffffffffffffffffffffffffffffffffff8086168352808516602084015250606060408301526115ca60608301846113a8565b95945050505050565b6000602082840312156115e557600080fd5b815167ffffffffffffffff8111156115fc57600080fd5b8201601f8101841361160d57600080fd5b805161161b6113048261129f565b81815285602083850101111561163057600080fd5b6115ca826020830160208601611378565b60006020828403121561165357600080fd5b505191905056fea264697066735822122018e43ffef2f9cc2414c0800d27162ab8481b522ae2a3529b201f7632a0fcba6764736f6c634300080a00336101606040526000805462ff00001916620c00001790553480156200002357600080fd5b50604051620058e8380380620058e8833981016040819052620000469162000537565b806001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000085573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ab919062000537565b6000805460ff191690556001600160a01b038116620000dd57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200011c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000142919062000537565b6001600160a01b03166080816001600160a01b031681525050506000816001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200019d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c3919062000537565b6001600160a01b03831661010081905260e081905260408051632495a59960e01b81529051929350600092632495a599916004808201926020929091908290030181865afa1580156200021a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000240919062000537565b6001600160a01b03811660c05290506200025a8162000472565b816001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000299573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002bf919062000537565b6001600160a01b0316610120816001600160a01b031681525050816001600160a01b03166377532ed96040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000318573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033e919062000537565b6001600160a01b0316610140816001600160a01b031681525050816001600160a01b031663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000397573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003bd919062000537565b6001600001600a6101000a8154816001600160a01b0302191690836001600160a01b03160217905550816001600160a01b0316639068a8686040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000425573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044b919062000537565b6001600160a01b031660a0525050600380546001600160a01b031916331790555062000588565b6001600160a01b03811660009081526006602052604090205415620004aa57604051632e5a5c7760e01b815260040160405180910390fd5b61010060055410620004cf57604051631cbbe18560e01b815260040160405180910390fd5b600580546001600160a01b0383166000818152600660209081526040808320600190951b948590558483526004909152812091909155825491929062000515836200055e565b91905055505050565b6001600160a01b03811681146200053457600080fd5b50565b6000602082840312156200054a57600080fd5b815162000557816200051e565b9392505050565b60006000198214156200058157634e487b7160e01b600052601160045260246000fd5b5060010190565b60805160a05160c05160e051610100516101205161014051615248620006a0600039600081816107e20152818161371001526137c501526000818161052f01526136780152600081816103d301528181610e5701528181610ebb015281816124ff0152818161265a01528181612aa101528181612b8c01528181612c4e01528181612d0d0152613b8f015260006105a401526000818161062701528181610d2201528181610db301528181610e0001528181610e3601528181610f3f0152818161203a01528181612b6b015281816130ee015281816134dc015281816135a90152613fe601526000818161081c01528181610fe101526124c20152600081816107a80152818161118401526122cb01526152486000f3fe608060405234801561001057600080fd5b50600436106103415760003560e01c8063830aa745116101bd578063a70bc542116100f9578063e75538c7116100a2578063f9aa028a1161007c578063f9aa028a1461089d578063fdd57645146108bd578063fe47cde7146108f3578063ff6875431461091357600080fd5b8063e75538c714610864578063e958b70414610877578063f67c5bd01461088a57600080fd5b8063db7ceb80116100d3578063db7ceb8014610817578063dc2b21c11461083e578063e1998cf91461085157600080fd5b8063a70bc542146107ca578063c5e10eef146107dd578063d48bfca71461080457600080fd5b806394cf073a116101665780639f5f86ae116101405780639f5f86ae146107745780639fd12b7714610787578063a366f49614610790578063a50cf2c8146107a357600080fd5b806394cf073a146106f557806395373018146107085780639af1d35a1461071b57600080fd5b80638991b2f1116101975780638991b2f1146106af5780638fe3f93f146106cf578063944ac59f146106e257600080fd5b8063830aa7451461066f5780638345f26e146106825780638456cb59146106a757600080fd5b8063458936f51161028c578063570a7af2116102355780636ce4074a1161020f5780636ce4074a146105ef5780636e98e5e41461060f5780636f307dc314610622578063783274381461064957600080fd5b8063570a7af21461059f5780635c975abb146105c6578063654a9eda146105dc57600080fd5b80635063524a116102665780635063524a1461055157806351e3f1601461058457806354fd4d501461059757600080fd5b8063458936f51461050e57806346fb371d146105175780634f0e0ef31461052a57600080fd5b80632630c12f116102ee5780633192195c116102c85780633192195c146104be5780633e8297ca146104e65780633f4ba83a1461050657600080fd5b80632630c12f1461045857806329df0b93146104845780632f7a18811461049757600080fd5b806316f0115b1161031f57806316f0115b146103ce578063172c48c7146103f55780632362a2d81461043757600080fd5b8063055ee9b5146103465780630d8f9cee146103a657806311ca4fc2146103bb575b600080fd5b61037c610354366004614a87565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6103b96103b4366004614aa4565b610949565b005b6103b96103c9366004614aa4565b610a76565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b610408610403366004614add565b610b4e565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835261ffff90911660208301520161039d565b61044a610445366004614b13565b610b66565b60405190815260200161039d565b6001546a0100000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1661037c565b6103b9610492366004614a87565b6110be565b60005461037c906301000000900473ffffffffffffffffffffffffffffffffffffffff1681565b6104d16104cc366004614a87565b611122565b6040805192835260208301919091520161039d565b61044a6104f4366004614a87565b60096020526000908152604090205481565b6103b9611156565b61044a60055481565b6103b9610525366004614b95565b611244565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b61056461055f366004614be6565b61149b565b60408051948552602085019390935291830152606082015260800161039d565b6103b9610592366004614aa4565b611602565b61044a600281565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b60005460ff16604051901515815260200161039d565b6103b96105ea366004614c21565b611703565b6106026105fd366004614d40565b611bbb565b60405161039d9190614e5b565b6103b961061d366004614aa4565b611e8e565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b61065c610657366004614a87565b612036565b60405161ffff909116815260200161039d565b6103b961067d366004614b95565b61210f565b6000546106959062010000900460ff1681565b60405160ff909116815260200161039d565b6103b961229d565b61044a6106bd366004614a87565b60086020526000908152604090205481565b61037c6106dd366004614e6e565b612389565b6103b96106f0366004614ea5565b612718565b61044a610703366004614f0a565b612845565b6103b9610716366004614a87565b612e5a565b6001546040805161ffff808416825262010000840481166020830152640100000000840481169282019290925266010000000000008304821660608201526801000000000000000090920416608082015260a00161039d565b6103b9610782366004614a87565b612f85565b61044a60075481565b6103b961079e366004614add565b613045565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b96107d8366004614f4c565b61309b565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b9610812366004614a87565b613221565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b961084c366004614f81565b61327b565b6103b961085f366004614aa4565b613306565b610408610872366004614add565b6134c9565b61037c610885366004614a87565b613541565b61044a610898366004614a87565b6135a5565b60035461037c9073ffffffffffffffffffffffffffffffffffffffff1681565b61037c6108cb366004614a87565b600b6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b600c5461037c9073ffffffffffffffffffffffffffffffffffffffff1681565b61037c610921366004614a87565b600a6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561099b57506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b156109d2576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff1615610a14576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055610a4a828261362e565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b60035473ffffffffffffffffffffffffffffffffffffffff163314610ac7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805473ffffffffffffffffffffffffffffffffffffffff9384166301000000027fffffffffffffffffff0000000000000000000000000000000000000000ffffff90911617905560018054919092166a0100000000000000000000027fffff0000000000000000000000000000000000000000ffffffffffffffffffff909116179055565b600080610b5d6001841b6134c9565b91509150915091565b6000805460ff1615610bd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064015b60405180910390fd5b600054610100900460ff1615610c1b576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff163314610ca0576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610cab89613541565b90506000806000806000610cbe86611122565b9094509050610ccf8c8e868461149b565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152939b5093985090955093506000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015610d6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8f9190614fa4565b9050610d9b8887614fec565b610da6906001614fec565b811115610de657610de1877f00000000000000000000000000000000000000000000000000000000000000008d60018c8b870303038d61366e565b610e30565b610e3073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168d8960018a8d01869003016138c0565b610e7e877f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000089600061366e565b6040517fca9505e40000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604481018490527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ca9505e490606401600060405180830381600087803b158015610f1457600080fd5b505af1158015610f28573d6000803e3d6000fd5b50505050505050506001841115610f6757610f67837f00000000000000000000000000000000000000000000000000000000000000008d87600061366e565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260086020526040902054861916610f9c8489888461395b565b6040517f89b77b3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f000000000000000000000000000000000000000000000000000000000000000016906389b77b3e90602401600060405180830381600087803b15801561102557600080fd5b505af1158015611039573d6000803e3d6000fd5b50505073ffffffffffffffffffffffffffffffffffffffff909c16600090815260026020526040812080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550929a9950505050505050505050565b6000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314611116576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61111f81613a35565b50565b60008060008061113185613aa6565b91955092509050816111438286615004565b61114d9190615041565b92505050915091565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156111e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611204919061507c565b61123a576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611242613c24565b565b60005460ff16156112b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156112f3576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100178155338152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff9081169084161480159061137457506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b80156113985750600c5473ffffffffffffffffffffffffffffffffffffffff163314155b806113b7575073ffffffffffffffffffffffffffffffffffffffff8316155b156113ee576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113f7826135a5565b61142d576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061143885613541565b9050611448838583856000613d05565b61146c5761145b83858360006001613d05565b5061146a838583856001613d05565b505b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b6001546000908190819081906127109061ffff166114b98888615099565b6114c39190615004565b6114cd9190615041565b6114d79086614fec565b935060018760028111156114ed576114ed6150b0565b1415611587576001546000906127109061151390640100000000900461ffff168b615004565b61151d9190615041565b6001549091506127109061153b9062010000900461ffff168b615004565b6115459190615041565b61154f9086614fec565b94508481111561156657600185820303935061156a565b8094505b85811061157b578585039250611581565b84860391505b506115f7565b600287600281111561159b5761159b6150b0565b14156115f157600154600090612710906115c59068010000000000000000900461ffff168b615004565b6115cf9190615041565b6001549091506127109061153b906601000000000000900461ffff168b615004565b84840391505b945094509450949050565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561165457506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b1561168b576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff16156116cd576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055610a4a8282613ea6565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561175557506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b1561178c576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff16156117ce576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790556118048584613ea6565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152600091908616906370a0823190602401602060405180830381865afa158015611874573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118989190614fa4565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529192506000918616906370a0823190602401602060405180830381865afa15801561190a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192e9190614fa4565b60015490915060009081906a0100000000000000000000900473ffffffffffffffffffffffffffffffffffffffff16635cecbd0e61196c8689615099565b8a6119778988615099565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152600481019390935273ffffffffffffffffffffffffffffffffffffffff918216602484015260448301528a1660648201526084016040805180830381865afa1580156119f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1791906150df565b9150915060018411611a2d57611a2d898961362e565b611a3687612036565b611a449061ffff1682615004565b9050611a4f88612036565b611a5d9061ffff1683615004565b9150818110611a7857611a6f89613a35565b5050505061146c565b73ffffffffffffffffffffffffffffffffffffffff891660009081526009602052604081205483611ab56b033b2e3c9fd0803ce800000085615004565b611abf9190615041565b611ad5906b033b2e3c9fd0803ce8000000615099565b611adf9190614fec565b60015490915061271090611b0a906b033b2e3c9fd0803ce80000009062010000900461ffff16615004565b611b149190615041565b8111611b555773ffffffffffffffffffffffffffffffffffffffff8a166000908152600960205260409020819055611b4b8a613a35565b505050505061146c565b611b5e8a613f56565b50505073ffffffffffffffffffffffffffffffffffffffff871660009081526009602052604090206001905550505050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b6060611bc960005460ff1690565b15611c30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff1615611c72576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100178155338152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff908116908416141580611ce7575073ffffffffffffffffffffffffffffffffffffffff8316155b15611d3d57600c5473ffffffffffffffffffffffffffffffffffffffff163314611d3d576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611d4885613541565b90508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167faed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab0360405160405180910390a36040517f1cff79cd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821690631cff79cd90611df89087908790600401615103565b6000604051808303816000875af1158015611e17573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611e5d9190810190615132565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905595945050505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314611edf576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821615611f4f5773ffffffffffffffffffffffffffffffffffffffff8281166000908152600a6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169183169190911790555b73ffffffffffffffffffffffffffffffffffffffff811615611fbf5773ffffffffffffffffffffffffffffffffffffffff8181166000908152600b6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169184169190911790555b73ffffffffffffffffffffffffffffffffffffffff811673cccccccccccccccccccccccccccccccccccccccc141561203257600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790555b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120ba5750506001547e01000000000000000000000000000000000000000000000000000000000000900461ffff1690565b60006120c5836135a5565b9050806120fe576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612107816134c9565b949350505050565b60005460ff161561217c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156121be576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff163314612243576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61224d8383613ea6565b61226f73ffffffffffffffffffffffffffffffffffffffff83168585846138c0565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555050565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015612327573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061234b919061507c565b612381576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112426142d4565b6000805460ff16156123f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff1615612439576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff1633146124be576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166321d18456857f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612568573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061258c9190614fa4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168152600481019290925260248201526044016020604051808303816000875af11580156125e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061260b91906151a0565b6040517fbf28068b0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff80831660248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063bf28068b90604401600060405180830381600087803b1580156126a057600080fd5b505af11580156126b4573d6000803e3d6000fd5b505050506126c28382614394565b73ffffffffffffffffffffffffffffffffffffffff811660009081526008602052604081206001905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690559392505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314612769576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805461ffff92831668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9484166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff96851664010000000002969096167fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff97851662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000090931694909816939093171794909416949094179190911716919091179055565b6000805460ff16156128b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156128f5576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff16331461297a576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080600061298887613aa6565b925092509250846129a25761299d8684615099565b6129ac565b6129ac8684614fec565b935060008515612b045769021e19e0c9bab24000008510612a15576129d583603689901c615004565b6129e3603686901c84615004565b6129ed9190614fec565b603686901c6129fc8585615004565b612a069190615004565b612a109190615041565b612a52565b612a1f8388615004565b612a298584615004565b612a339190614fec565b85612a3e8585615004565b612a489190615004565b612a529190615041565b6040517fbf28068b0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff8a811660248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063bf28068b90604401600060405180830381600087803b158015612ae757600080fd5b505af1158015612afb573d6000803e3d6000fd5b50505050612d9f565b60008484612b128583615004565b612b1c9190615041565b612b269190615099565b60015490915060009061271090612b419061ffff1684615004565b612b4b9190615041565b905073ffffffffffffffffffffffffffffffffffffffff8a1663d1660f997f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000084612bb6878f614fec565b612bc09190614fec565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b158015612c3457600080fd5b505af1158015612c48573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ca9505e4838b612c949190614fec565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815260048101919091526024810184905260006044820152606401600060405180830381600087803b158015612cf357600080fd5b505af1158015612d07573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d9a9190614fa4565b925050505b6040517f16128211000000000000000000000000000000000000000000000000000000008152600481018690526024810182905273ffffffffffffffffffffffffffffffffffffffff891690631612821190604401600060405180830381600087803b158015612e0e57600080fd5b505af1158015612e22573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055509498975050505050505050565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff16158015612eac57506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b15612ee3576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff1615612f25576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055612f5a81613f56565b50600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b60035473ffffffffffffffffffffffffffffffffffffffff163314612fd6576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517ff62005acebe9b616aefb5f248b48f5e89f28437b27d1eebc0b2d911209f297af90600090a250565b60035473ffffffffffffffffffffffffffffffffffffffff163314613096576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600755565b60035473ffffffffffffffffffffffffffffffffffffffff1633146130ec576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613193576001805461ffff83167e01000000000000000000000000000000000000000000000000000000000000027dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790555050565b600061319e836135a5565b9050806131d7576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000908152600460205260409020805473ffffffffffffffffffffffffffffffffffffffff1675ffff000000000000000000000000000000000000000060a084901b161790555050565b60035473ffffffffffffffffffffffffffffffffffffffff163314613272576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61111f81614467565b60035473ffffffffffffffffffffffffffffffffffffffff1633146132cc576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805460ff90921662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff909216919091179055565b60005460ff1615613373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156133b5576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff16331461343a576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061344583613541565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260026020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055905061349c8282614394565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b60008082600114156135275750506001547f0000000000000000000000000000000000000000000000000000000000000000927e0100000000000000000000000000000000000000000000000000000000000090910461ffff169150565b50506000908152600460205260409020549060a082901c90565b73ffffffffffffffffffffffffffffffffffffffff80821660009081526002602052604090205416806135a0576040517fb5ba4c4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146136255773ffffffffffffffffffffffffffffffffffffffff8216600090815260066020526040902054613628565b60015b92915050565b6000613639826135a5565b73ffffffffffffffffffffffffffffffffffffffff909316600090815260086020526040902080549319939093169092555050565b8080156136c657507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b15613828576040517fd1660f9900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301526044820184905286169063d1660f9990606401600060405180830381600087803b15801561376357600080fd5b505af1158015613777573d6000803e3d6000fd5b50506040517f5869dba800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690527f0000000000000000000000000000000000000000000000000000000000000000169250635869dba89150604401600060405180830381600087803b15801561380b57600080fd5b505af115801561381f573d6000803e3d6000fd5b505050506138b9565b6040517fd1660f9900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301526044820184905286169063d1660f9990606401600060405180830381600087803b1580156138a057600080fd5b505af11580156138b4573d6000803e3d6000fd5b505050505b5050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261395590859061455b565b50505050565b60025b8181116138b95781811615613a2d576000613978826134c9565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529192506000918316906370a0823190602401602060405180830381865afa1580156139eb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a0f9190614fa4565b90506002811115613a2a57613a2a878388600185038961366e565b50505b60011b61395e565b73ffffffffffffffffffffffffffffffffffffffff811660009081526008602052604081205490613a6582614667565b60005490915062010000900460ff16811115613aa1576000613a86836146a7565b613a91906001614fec565b905061395584848460008561470b565b505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff16631afbb7a46040518163ffffffff1660e01b8152600401602060405180830381865afa158015613af6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b1a9190614fa4565b92508373ffffffffffffffffffffffffffffffffffffffff166317d11a156040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b8b9190614fa4565b91507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bf8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c1c9190614fa4565b929491935050565b60005460ff16613c90576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610bd0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6040805173ffffffffffffffffffffffffffffffffffffffff8681166024830152604480830186905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b30000000000000000000000000000000000000000000000000000000017905291517f1cff79cd000000000000000000000000000000000000000000000000000000008152600092861691631cff79cd91613dc6918a91600401615103565b6000604051808303816000875af1925050508015613e2457506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052613e219190810190615132565b60015b613e2d57613e61565b80511580613e50575080806020019051810190613e4a919061507c565b15156001145b15613e5f576001915050613e9d565b505b8115613e99576040517f76e3e29c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060005b95945050505050565b6000613eb1826135a5565b9050801580613ec35750600754811615155b15613efa576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83166000908152600860205260409020548116613aa15773ffffffffffffffffffffffffffffffffffffffff83166000908152600860205260409020805482179055505050565b60015473ffffffffffffffffffffffffffffffffffffffff8281166000908152600860205260408120546a010000000000000000000090930490911691908080613f9f86611122565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526127108202600482015273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350908716915063f9a6503090604401602060405180830381865afa15801561403a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061405e9190614fa4565b9250614069846146a7565b6001019150506000806000805b848110156142a157801561408f5760018186031b614092565b60015b935086841615614299576000806140a8866134c9565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8e811660048301529294509092506000918416906370a0823190602401602060405180830381865afa15801561411d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141419190614fa4565b9050600181111561428c576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff848116602483015261ffff841691908d169063f9a6503090604401602060405180830381865afa1580156141c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141ea9190614fa4565b6141f49190615004565b6141fe9087614fec565b95508886106142875760006142128b614667565b60005490915062010000900460ff16811115614249576142448d8c836001891561423e57898e0361470b565b8d61470b565b614278565b85156142785773ffffffffffffffffffffffffffffffffffffffff8d1660009081526008602052604090208b90555b50505050505050505050505050565b614295565b98861898600194505b5050505b600101614076565b506040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005460ff1615614341576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613cdb3390565b73ffffffffffffffffffffffffffffffffffffffff821615806143dd575073ffffffffffffffffffffffffffffffffffffffff8281166000908152600260205260409020541615155b15614414576040517f9e59609e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff918216600090815260026020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001691909216179055565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260066020526040902054156144c4576040517f2e5a5c7700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61010060055410614501576040517f1cbbe18500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005805473ffffffffffffffffffffffffffffffffffffffff83166000818152600660209081526040808320600190951b9485905584835260049091528120919091558254919290614552836151bd565b91905055505050565b60006145bd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166148799092919063ffffffff16565b805190915015613aa157808060200190518101906145db919061507c565b613aa1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610bd0565b60008060005b6101008110156146a0576001811b91508382161561468c578260010192505b838210614698576146a0565b60010161466d565b5050919050565b600081600114156146ba57506000919050565b61010060015b60016146cc8284614fec565b901c92506001831b848116158015906146e75750600185851c145b156146f257506146a0565b84811061470157839250614705565b8391505b506146c0565b815b81811015614846576001811b8581161561483d57600061472c826134c9565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529192506000918316906370a0823190602401602060405180830381865afa15801561479f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147c39190614fa4565b90506001811161483a57600054978318977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9097019660ff6201000090910416871161483a5750505073ffffffffffffffffffffffffffffffffffffffff86166000908152600860205260409020859055506138b9565b50505b5060010161470d565b506040517f53275fcb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606148888484600085614892565b90505b9392505050565b606082471015614924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610bd0565b843b61498c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610bd0565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516149b591906151f6565b60006040518083038185875af1925050503d80600081146149f2576040519150601f19603f3d011682016040523d82523d6000602084013e6149f7565b606091505b5091509150614a07828286614a12565b979650505050505050565b60608315614a2157508161488b565b825115614a315782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd09190614e5b565b73ffffffffffffffffffffffffffffffffffffffff8116811461111f57600080fd5b600060208284031215614a9957600080fd5b813561488b81614a65565b60008060408385031215614ab757600080fd5b8235614ac281614a65565b91506020830135614ad281614a65565b809150509250929050565b600060208284031215614aef57600080fd5b5035919050565b8035600381106135a057600080fd5b801515811461111f57600080fd5b600080600080600080600060e0888a031215614b2e57600080fd5b8735614b3981614a65565b9650614b4760208901614af6565b9550604088013594506060880135614b5e81614a65565b93506080880135614b6e81614a65565b925060a0880135915060c0880135614b8581614b05565b8091505092959891949750929550565b60008060008060808587031215614bab57600080fd5b8435614bb681614a65565b93506020850135614bc681614a65565b92506040850135614bd681614a65565b9396929550929360600135925050565b60008060008060808587031215614bfc57600080fd5b84359350614c0c60208601614af6565b93969395505050506040820135916060013590565b600080600080600060a08688031215614c3957600080fd5b8535614c4481614a65565b94506020860135614c5481614a65565b93506040860135614c6481614a65565b94979396509394606081013594506080013592915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614cf257614cf2614c7c565b604052919050565b600067ffffffffffffffff821115614d1457614d14614c7c565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600080600060608486031215614d5557600080fd5b8335614d6081614a65565b92506020840135614d7081614a65565b9150604084013567ffffffffffffffff811115614d8c57600080fd5b8401601f81018613614d9d57600080fd5b8035614db0614dab82614cfa565b614cab565b818152876020838501011115614dc557600080fd5b816020840160208301376000602083830101528093505050509250925092565b60005b83811015614e00578181015183820152602001614de8565b838111156139555750506000910152565b60008151808452614e29816020860160208601614de5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061488b6020830184614e11565b60008060408385031215614e8157600080fd5b823591506020830135614ad281614a65565b803561ffff811681146135a057600080fd5b600080600080600060a08688031215614ebd57600080fd5b614ec686614e93565b9450614ed460208701614e93565b9350614ee260408701614e93565b9250614ef060608701614e93565b9150614efe60808701614e93565b90509295509295909350565b600080600060608486031215614f1f57600080fd5b8335614f2a81614a65565b9250602084013591506040840135614f4181614b05565b809150509250925092565b60008060408385031215614f5f57600080fd5b8235614f6a81614a65565b9150614f7860208401614e93565b90509250929050565b600060208284031215614f9357600080fd5b813560ff8116811461488b57600080fd5b600060208284031215614fb657600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115614fff57614fff614fbd565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561503c5761503c614fbd565b500290565b600082615077577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60006020828403121561508e57600080fd5b815161488b81614b05565b6000828210156150ab576150ab614fbd565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600080604083850312156150f257600080fd5b505080516020909101519092909150565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015260006148886040830184614e11565b60006020828403121561514457600080fd5b815167ffffffffffffffff81111561515b57600080fd5b8201601f8101841361516c57600080fd5b805161517a614dab82614cfa565b81815285602083850101111561518f57600080fd5b613e9d826020830160208601614de5565b6000602082840312156151b257600080fd5b815161488b81614a65565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156151ef576151ef614fbd565b5060010190565b60008251615208818460208701614de5565b919091019291505056fea26469706673582212209d39bb9d4972b515acdad1ffb757acd15e103ca6ee762f88a6382b36243734ba64736f6c634300080a00336101406040523480156200001257600080fd5b5060405162005e9738038062005e97833981016040819052620000359162000198565b60016000556001600160a01b0383166200006257604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038316608081905260408051636f307dc360e01b81529051636f307dc3916004808201926020929091908290030181865afa158015620000ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d39190620001ea565b6001600160a01b031660a0816001600160a01b031681525050826001600160a01b0316634f0e0ef36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200012b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001519190620001ea565b6001600160a01b0390811660c0529190911660e0819052151561010052151561012052506200020f565b80516001600160a01b03811681146200019357600080fd5b919050565b600080600060608486031215620001ae57600080fd5b620001b9846200017b565b9250620001c9602085016200017b565b915060408401518015158114620001df57600080fd5b809150509250925092565b600060208284031215620001fd57600080fd5b62000208826200017b565b9392505050565b60805160a05160c05160e0516101005161012051615a86620004116000396000818161061101528181612fb5015261481f01526000818161031701528181610dde015281816144f901526146e5015260008181610557015281816146a901526147a901526000818161034b0152818161387d015261392d01526000818161047301528181611bfe0152818161274f0152818161280d0152818161366a01526137dd015260008181610665015281816109d801528181610b0301528181610bd501528181610cdd01528181610e6501528181610fe30152818161114e0152818161120e0152818161132e015281816114510152818161162b01528181611708015281816117e0015281816119e501528181611b1201528181611d9501528181611ed5015281816120040152818161216801528181612290015281816123c601528181612568015281816126390152818161266f0152818161293d01528181612a2101528181612a8a01528181612bde01528181612d2601528181612e6801528181612ec2015281816130a10152818161311b015281816131b401528181613341015281816134c10152818161358a0152818161372f01528181613a1a01528181613b2e01528181613dbb015281816142200152818161432801528181614492015281816148e7015281816149e801528181614aae0152614d8f0152615a866000f3fe6080604052600436106102695760003560e01c8063860aefcf11610153578063c7de38a6116100cb578063dfd594651161007f578063eb9606df11610064578063eb9606df1461081e578063f9eaee0d1461083e578063ffd9b9071461085e57600080fd5b8063dfd59465146107de578063e1f21c67146107fe57600080fd5b8063cff0ab96116100b0578063cff0ab96146106ef578063d9ccbec114610783578063dcf65482146107be57600080fd5b8063c7de38a6146106a7578063caa5c23f146106dc57600080fd5b80639c55a05411610122578063b55bb84b11610107578063b55bb84b14610633578063c12c21c014610653578063c690908a1461068757600080fd5b80639c55a054146105df578063b1836d32146105ff57600080fd5b8063860aefcf146104db5780639408b63f146105455780639b67ab30146105795780639be0536a146105bd57600080fd5b80635d91a0e0116101e65780636d19b486116101b55780637071b7c51161019a5780637071b7c51461049557806379c0ef91146104a857806382871ace146104c857600080fd5b80636d19b486146104415780636f307dc31461046157600080fd5b80635d91a0e0146103e85780635f73fbec146103fb578063601d66f61461040e5780636c8f225d1461042e57600080fd5b80633d9287fa1161023d5780635019e20a116102225780635019e20a1461039257806354fd4d50146103b257806359781034146103d557600080fd5b80633d9287fa146103055780634f0e0ef31461033957600080fd5b8062842b571461026e578063256ac915146102905780632a7ba1f7146102c55780632b7c7b11146102e5575b600080fd5b34801561027a57600080fd5b5061028e6102893660046151bf565b61087e565b005b34801561029c57600080fd5b506102b06102ab3660046151f8565b61098e565b60405190151581526020015b60405180910390f35b3480156102d157600080fd5b5061028e6102e0366004615215565b610a61565b3480156102f157600080fd5b5061028e610300366004615215565b610c3b565b34801561031157600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561034557600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102bc565b34801561039e57600080fd5b5061028e6103ad3660046151f8565b610d6a565b3480156103be57600080fd5b506103c7600281565b6040519081526020016102bc565b61028e6103e336600461522e565b61108c565b61028e6103f63660046152bb565b611275565b61028e610409366004615340565b611589565b34801561041a57600080fd5b5061028e6104293660046153d8565b6117de565b61028e61043c36600461541b565b611900565b34801561044d57600080fd5b506102b061045c3660046151f8565b611c31565b34801561046d57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b61028e6104a336600461546e565b611c60565b3480156104b457600080fd5b5061036d6104c3366004615215565b611f3e565b61028e6104d63660046152bb565b611f4b565b3480156104e757600080fd5b5060025461051c906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041682565b604080516fffffffffffffffffffffffffffffffff9384168152929091166020830152016102bc565b34801561055157600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561058557600080fd5b506004546040805167ffffffffffffffff608084901c1681526fffffffffffffffffffffffffffffffff9092166020830152016102bc565b3480156105c957600080fd5b506105d261227d565b6040516102bc91906154e2565b3480156105eb57600080fd5b5061028e6105fa36600461553c565b61228e565b34801561060b57600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561063f57600080fd5b5061028e61064e3660046151f8565b6123c4565b34801561065f57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561069357600080fd5b5061028e6106a23660046151f8565b6124c6565b3480156106b357600080fd5b506106c76106c23660046151f8565b612668565b604080519283526020830191909152016102bc565b61028e6106ea366004615557565b61289b565b3480156106fb57600080fd5b5060015461074e906fffffffffffffffffffffffffffffffff811690700100000000000000000000000000000000810460ff169071010000000000000000000000000000000000900464ffffffffff1683565b604080516fffffffffffffffffffffffffffffffff9094168452911515602084015264ffffffffff16908201526060016102bc565b34801561078f57600080fd5b506102b061079e366004615599565b600360209081526000928352604080842090915290825290205460ff1681565b3480156107ca57600080fd5b5061028e6107d93660046151f8565b612a88565b3480156107ea57600080fd5b506103c76107f93660046151f8565b612b86565b34801561080a57600080fd5b5061028e61081936600461522e565b612c6d565b34801561082a57600080fd5b5061028e6108393660046155c7565b612ec0565b34801561084a57600080fd5b506102b06108593660046151f8565b613057565b34801561086a57600080fd5b5061028e6108793660046155ee565b6131b2565b600260005414156108f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b6002600090815573ffffffffffffffffffffffffffffffffffffffff8316808252600360209081526040808420338086529083529381902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081527f9b3258bc4904fd6426b99843e206c6c7cdb1fd0f040121c25b71dafbb3851ee0910160405180910390a350506001600055565b6040517f055ee9b500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063055ee9b590602401602060405180830381865afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a43919061560b565b73ffffffffffffffffffffffffffffffffffffffff16141592915050565b60026000541415610ace576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610b5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b83919061560b565b9050610b903382846132eb565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906395373018906024015b600060405180830381600087803b158015610c1a57600080fd5b505af1158015610c2e573d6000803e3d6000fd5b5050600160005550505050565b60026000541415610ca8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610d39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5d919061560b565b9050610b90338284613411565b60026000541415610dd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000557f000000000000000000000000000000000000000000000000000000000000000015610e34576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610ec1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee5919061560b565b33600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915290205490915060ff16610f52576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f5d82613583565b5090508015610f98576040517ff713841e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b15801561102757600080fd5b505af115801561103b573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692503391507f93c70cc9715bef0d83edf2095f3595402279d274f402a73ffc17f1bcb19d863d90600090a35050600160005550565b600260005414156110f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611106613875565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063e958b70490602401602060405180830381865afa158015611197573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bb919061560b565b90506111c9848285856139b7565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401600060405180830381600087803b15801561125257600080fd5b505af1158015611266573d6000803e3d6000fd5b50506001600055505050505050565b600260005414156112e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611375573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611399919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166113e8576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806113f483613583565b915091508161142f576040517f1fdd676f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611437613875565b831561144d5761144d85858b8660016000613ae3565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632362a2d88b600185338e8e8e6040518863ffffffff1660e01b81526004016114b59796959493929190615663565b6020604051808303816000875af11580156114d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f891906156bf565b90508873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f7dfecd8419723a9d3954585a30c2a270165d70aafa146c11c1e1b88ae14390648460405161157091815260200190565b60405180910390a4505060016000555050505050505050565b600260005414156115f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ab919061560b565b90506116b5613875565b81156116cb576116cb8383338460016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d89061174a903390600090819083908d908d908d90600401615663565b6020604051808303816000875af1158015611769573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178d91906156bf565b5060405173ffffffffffffffffffffffffffffffffffffffff87169033907f460ad03b1cf79b1d64d3aefa28475f110ab66e84649c52bb41ed796b9b39198190600090a35050600160005550505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611849573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118d1576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff90811670010000000000000000000000000000000002911617600255565b6002600054141561196d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000908155606461198461ffff851687615707565b61198e9190615744565b9050611999816144f7565b6119a2816145e8565b6119ab84614668565b6119b3613875565b6040517f172c48c7000000000000000000000000000000000000000000000000000000008152600060048201819052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a64919061577f565b61ffff169150611a789050816127106157ae565b611a829083615707565b611a8c8288615707565b11611ac3576040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff86811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611b5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b81919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638587604051611bef92919091825261ffff16602082015260400190565b60405180910390a3611c2386827f00000000000000000000000000000000000000000000000000000000000000008a6139b7565b505060016000555050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526006602052604081205415155b92915050565b60026000541415611ccd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611cdb856144f7565b611ce484614668565b611ced856145e8565b600154700100000000000000000000000000000000900460ff1615611d3e576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d46613875565b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff85811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611de0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e04919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638885604051611e7292919091825261ffff16602082015260400190565b60405180910390a38215611e9057611e908484878460006001613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015611f1957600080fd5b505af1158015611f2d573d6000803e3d6000fd5b505060016000555050505050505050565b6000611c5a60058361480f565b60026000541415611fb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa15801561204b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206f919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166120be576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120c661481b565b6120fc576040517f7e52ccb400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061210782612668565b509050612112613875565b82156121285761212884848a8560016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d8906121aa908c90600290879033908f908f908f90600401615663565b6020604051808303816000875af11580156121c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ed91906156bf565b90508773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167ffada13ff2d5e1a1d9da37ad4a4130893b34e3c69c32b17f87ec31fd661b867078460405161226591815260200190565b60405180910390a45050600160005550505050505050565b6060612289600561486b565b905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612381576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561242f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612453919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146124b7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614878565b5050565b60026000541415612533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156125c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e8919061560b565b90506125f4818361489a565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401610c00565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126fc919061560b565b905060008061270b8387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156127a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127c991906156bf565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015291965061271091851690637afb010490604401602060405180830381865afa158015612863573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061288791906156bf565b6128919190615744565b9350505050915091565b60026000541415612908576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129bd919061560b565b90506129c7613875565b8115612a7e576129dc83833384600080613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015612a6557600080fd5b505af1158015612a79573d6000803e3d6000fd5b505050505b5050600160005550565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612af3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b17919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b7b576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614c92565b600080612b9283612668565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152919350600092507f000000000000000000000000000000000000000000000000000000000000000090911690633192195c906024016040805180830381865afa158015612c26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4a91906157c5565b9150819050612c5b61271084615707565b612c659190615744565b949350505050565b60026000541415612cda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063fdd5764590602401602060405180830381865afa158015612d6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d91919061560b565b73ffffffffffffffffffffffffffffffffffffffff161480612dd7575073ffffffffffffffffffffffffffffffffffffffff831660009081526006602052604090205415155b15612e0e576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612eac57600080fd5b505af1158015611c23573d6000803e3d6000fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f4f919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612fb3576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000061300a576040517f50dd11fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805464ffffffffff90921671010000000000000000000000000000000000027fffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffffff909216919091179055565b6040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063f67c5bd090602401602060405180830381865afa1580156130e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061310c91906156bf565b905080158015906131ab5750807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015613184573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a891906156bf565b16155b9392505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561321d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613241919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146132a5576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018054911515700100000000000000000000000000000000027fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff909216919091179055565b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600060448301819052917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561338c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133b091906156bf565b90506133bb816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f98274bf834d179ee08dc0604071b0dc90b54731bd5f725a5a96a39a86bce025a8360405161340391815260200190565b60405180910390a250505050565b61341a816144f7565b600154700100000000000000000000000000000000900460ff161561346b576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600160448301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561350c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061353091906156bf565b905061353b816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f9cac51154cc0d835e2f9c9d1f59a9344588cee107f4203bf58a8c797e3a58c458360405161340391815260200190565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613617919061560b565b90506000806136268387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156136c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136e491906156bf565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529195506000917f00000000000000000000000000000000000000000000000000000000000000001690633192195c906024016040805180830381865afa158015613775573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061379991906157c5565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350600092506127109187169063f9a6503090604401602060405180830381865afa158015613837573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061385b91906156bf565b6138659190615707565b9092109794965093945050505050565b34156139b5577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156138e357600080fd5b505af11580156138f7573d6000803e3d6000fd5b50506040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201523460248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16935063a9059cbb925060440190506020604051808303816000875af115801561398f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139b391906157e9565b505b565b6139c084614cb4565b6040517f830aa74500000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f0000000000000000000000000000000000000000000000000000000000000000169063830aa74590608401600060405180830381600087803b158015613a5e57600080fd5b505af1158015613a72573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fa32435755c235de2976ed44a75a2f85cb01faf0c894f639fe0c32bb9455fea8f83604051613ad591815260200190565b60405180910390a350505050565b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301523060248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b158015613b7257600080fd5b505af1158015613b86573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff871692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a28460005b8181101561441d5736888883818110613bea57613bea615806565b9050602002810190613bfc9190615835565b90506004613c0d6020830183615873565b90501015613c47576040517fe2b0e50600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b30613c5560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16141561421c578415613ca9576040517f5fb9107f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613cb86020830183615873565b613cc1916158d8565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167f59781034000000000000000000000000000000000000000000000000000000001415613e3c5760008080613d1e6020860186615873565b613d2c916004908290615920565b810190613d39919061522e565b925092509250613e34838c73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614613e2b576040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015613e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e26919061560b565b613e2d565b8b5b84846139b7565b505050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2b7c7b11000000000000000000000000000000000000000000000000000000001415613ec757600194506000613e996020840184615873565b613ea7916004908290615920565b810190613eb49190615215565b9050613ec1898983613411565b50614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2a7ba1f7000000000000000000000000000000000000000000000000000000001415613f80578415613f49576040517fc0b0caa800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613f586020840184615873565b613f66916004908290615920565b810190613f739190615215565b9050613ec18989836132eb565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f233a8caa0000000000000000000000000000000000000000000000000000000014156140e457600080613fda6020850185615873565b613fe8916004908290615920565b810190613ff5919061594a565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c8116600483015292945090925082918416906370a0823190602401602060405180830381865afa158015614069573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061408d91906156bf565b10156140dd576040517fa5ac537300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016108e7565b5050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fc690908a00000000000000000000000000000000000000000000000000000000141561416457600061413d6020840184615873565b61414b916004908290615920565b81019061415891906151f8565b9050613ec1888261489a565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f23e27a640000000000000000000000000000000000000000000000000000000014156141e45760006141bd6020840184615873565b6141cb916004908290615920565b8101906141d891906151f8565b9050613ec18882614d42565b6040517f1e9e7e7a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50614414565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff68754361426760208501856151f8565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156142d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142f4919061560b565b73ffffffffffffffffffffffffffffffffffffffff16148061436d575073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001661435560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16145b156143a4576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6144126143b46020830183615873565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506143f69250505060208401846151f8565b73ffffffffffffffffffffffffffffffffffffffff1690614e39565b505b50600101613bcf565b506040517f60c8e8938c9a0c0d88a98d6f1c562ce68077e12bf3edb8047378f2f736cb45b490600090a16040517fe1998cf900000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff86811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b1580156144d657600080fd5b505af11580156144ea573d6000803e3d6000fd5b5050505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006139b3576001546fffffffffffffffffffffffffffffffff9081169081146124c257600454608081901c906fffffffffffffffffffffffffffffffff16600067ffffffffffffffff8316431461456e578461458a565b61458a6fffffffffffffffffffffffffffffffff831686615976565b9050838111156145c6576040517f675f1a5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff81164360801b176004555050505050565b6002546fffffffffffffffffffffffffffffffff16811080614631575060025470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681115b156139b3576040517fce16799400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61467061481b565b156146a7576040517f63fc31c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1615614806577f0000000000000000000000000000000000000000000000000000000000000000801561472657503373ffffffffffffffffffffffffffffffffffffffff821614155b1561475d576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600160248301527f00000000000000000000000000000000000000000000000000000000000000001690639dc29fac90604401600060405180830381600087803b1580156147ed57600080fd5b505af1158015614801573d6000803e3d6000fd5b505050505b6139b381614cb4565b60006131ab8383614e7b565b60007f0000000000000000000000000000000000000000000000000000000000000000801561228957505060015471010000000000000000000000000000000000900464ffffffffff1642101590565b606060006131ab83614ea5565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f01565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561492b57600080fd5b505af115801561493f573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527fdf498aa1c340e992665d6fb4f3be8436d452c45a630cb6d7fab7963da39bac8793500190505b60405180910390a15050565b6040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600091829160019183917f00000000000000000000000000000000000000000000000000000000000000001690638991b2f190602401602060405180830381865afa158015614a2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a5391906156bf565b90505b808211614c895780821615614c7d576040517fe75538c700000000000000000000000000000000000000000000000000000000815260048101839052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e75538c7906024016040805180830381865afa158015614af4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b18919061577f565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529294509092506000918416906370a0823190602401602060405180830381865afa158015614b8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bb191906156bf565b90506001811115614c79576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff8481166024830152600091908b169063f9a6503090604401602060405180830381865afa158015614c33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c5791906156bf565b978801979050614c6b61ffff841682615707565b614c759088615976565b9650505b5050505b600182901b9150614a56565b50509250929050565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f50565b3373ffffffffffffffffffffffffffffffffffffffff821614801590614d0b575033600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16155b156139b3576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b158015614dd357600080fd5b505af1158015614de7573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527f69db9e9764da61b6681b89fb0f5be018506e0342036e56b59c3015a620d60977935001905061498d565b60606131ab83836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250615043565b6000826000018281548110614e9257614e92615806565b9060005260206000200154905092915050565b606081600001805480602002602001604051908101604052809291908181526020018280548015614ef557602002820191906000526020600020905b815481526020019060010190808311614ee1575b50505050509050919050565b6000818152600183016020526040812054614f4857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611c5a565b506000611c5a565b60008181526001830160205260408120548015615039576000614f746001836157ae565b8554909150600090614f88906001906157ae565b9050818114614fed576000866000018281548110614fa857614fa8615806565b9060005260206000200154905080876000018481548110614fcb57614fcb615806565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080614ffe57614ffe61598e565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611c5a565b6000915050611c5a565b6060612c65848460008585843b6150b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108e7565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516150df91906159ed565b60006040518083038185875af1925050503d806000811461511c576040519150601f19603f3d011682016040523d82523d6000602084013e615121565b606091505b509150915061513182828661513c565b979650505050505050565b6060831561514b5750816131ab565b82511561515b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e791906159ff565b73ffffffffffffffffffffffffffffffffffffffff811681146139b357600080fd5b80151581146139b357600080fd5b600080604083850312156151d257600080fd5b82356151dd8161518f565b915060208301356151ed816151b1565b809150509250929050565b60006020828403121561520a57600080fd5b81356131ab8161518f565b60006020828403121561522757600080fd5b5035919050565b60008060006060848603121561524357600080fd5b833561524e8161518f565b9250602084013561525e8161518f565b929592945050506040919091013590565b60008083601f84011261528157600080fd5b50813567ffffffffffffffff81111561529957600080fd5b6020830191508360208260051b85010111156152b457600080fd5b9250929050565b60008060008060008060a087890312156152d457600080fd5b86356152df8161518f565b955060208701356152ef8161518f565b9450604087013593506060870135615306816151b1565b9250608087013567ffffffffffffffff81111561532257600080fd5b61532e89828a0161526f565b979a9699509497509295939492505050565b60008060008060006080868803121561535857600080fd5b85356153638161518f565b945060208601359350604086013561537a816151b1565b9250606086013567ffffffffffffffff81111561539657600080fd5b6153a28882890161526f565b969995985093965092949392505050565b80356fffffffffffffffffffffffffffffffff811681146153d357600080fd5b919050565b600080604083850312156153eb57600080fd5b6153f4836153b3565b9150615402602084016153b3565b90509250929050565b61ffff811681146139b357600080fd5b6000806000806080858703121561543157600080fd5b8435935060208501356154438161518f565b925060408501356154538161540b565b915060608501356154638161540b565b939692955090935050565b60008060008060006080868803121561548657600080fd5b8535945060208601356154988161518f565b9350604086013567ffffffffffffffff8111156154b457600080fd5b6154c08882890161526f565b90945092505060608601356154d48161540b565b809150509295509295909350565b6020808252825182820181905260009190848201906040850190845b8181101561553057835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016154fe565b50909695505050505050565b60006020828403121561554e57600080fd5b6131ab826153b3565b6000806020838503121561556a57600080fd5b823567ffffffffffffffff81111561558157600080fd5b61558d8582860161526f565b90969095509350505050565b600080604083850312156155ac57600080fd5b82356155b78161518f565b915060208301356151ed8161518f565b6000602082840312156155d957600080fd5b813564ffffffffff811681146131ab57600080fd5b60006020828403121561560057600080fd5b81356131ab816151b1565b60006020828403121561561d57600080fd5b81516131ab8161518f565b6003811061565f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b73ffffffffffffffffffffffffffffffffffffffff888116825260e082019061568f602084018a615628565b6040830197909752948616606082015292909416608083015260a082015291151560c09092019190915292915050565b6000602082840312156156d157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561573f5761573f6156d8565b500290565b60008261577a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000806040838503121561579257600080fd5b825161579d8161518f565b60208401519092506151ed8161540b565b6000828210156157c0576157c06156d8565b500390565b600080604083850312156157d857600080fd5b505080516020909101519092909150565b6000602082840312156157fb57600080fd5b81516131ab816151b1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc183360301811261586957600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126158a857600080fd5b83018035915067ffffffffffffffff8211156158c357600080fd5b6020019150368190038213156152b457600080fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156159185780818660040360031b1b83161692505b505092915050565b6000808585111561593057600080fd5b8386111561593d57600080fd5b5050820193919092039150565b6000806040838503121561595d57600080fd5b82356159688161518f565b946020939093013593505050565b60008219821115615989576159896156d8565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60005b838110156159d85781810151838201526020016159c0565b838111156159e7576000848401525b50505050565b600082516158698184602087016159bd565b6020815260008251806020840152615a1e8160408501602087016159bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea2646970667358221220a3f4a705ab580a6ada1e438cd2ee4abc001b62d1d171fce12c41994900fef21664736f6c634300080a003360a06040523480156200001157600080fd5b5060405162005f3d38038062005f3d8339810160408190526200003491620012eb565b826001600160a01b031663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000073573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200009991906200147f565b6001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000d7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000fd91906200147f565b6000805460ff191690556001600160a01b0381166200012f57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200016e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200019491906200147f565b6001600160a01b03908116608052600180546001600160a01b031916918616918217905560408051636f307dc360e01b81529051919250636f307dc39160048083019260209291908290030181865afa158015620001f6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200021c91906200147f565b600260006101000a8154816001600160a01b0302191690836001600160a01b03160217905550826001600160a01b031663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000281573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a791906200147f565b6001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200030b91906200147f565b600080546001600160a01b039290921661010002610100600160a81b0319909216919091179055620003626103e860c86200034b6101f4612710620014bc565b60646200035c60c8612710620014bc565b620005e8565b60408101515160005b81811015620003ee576000836040015182815181106200038f576200038f620014e2565b6020026020010151600001519050620003ae81620007c260201b60201c565b620003e48185604001518481518110620003cc57620003cc620014e2565b60200260200101516020015162000a5e60201b60201c565b506001016200036b565b5060015460408051632630c12f60e01b815290516001600160a01b03909216916311ca4fc29186918491632630c12f9160048083019260209291908290030181865afa15801562000443573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200046991906200147f565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401600060405180830381600087803b158015620004b257600080fd5b505af1158015620004c7573d6000803e3d6000fd5b50506040516001600160a01b03861692507fa8b21f72cb83bce808df32dc2330217d744a1c22f3e9e44e4b11bbf049d37d9d9150600090a2600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000553573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200057991906200147f565b6001600160a01b03167f3f82447be465b0b5a4a9e54c74d5f6ae73f2e9537f2cc1590a340524703d096160405160405180910390a26020820151620005cb90620005c5906002620014f8565b62000bda565b81516020830151620005de919062000dc8565b5050505062001604565b6000620005f68585620014bc565b60015460405163172c48c760e01b81526000600482018190529293506001600160a01b039091169063172c48c7906024016040805180830381865afa15801562000644573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200066a91906200152a565b9150508061ffff168261ffff1614620006be57620006888262000f47565b60025460405161ffff841681526001600160a01b039091169060008051602062005f1d8339815191529060200160405180910390a25b60015460405163944ac59f60e01b815261ffff808a166004830152808916602483015280881660448301528087166064830152851660848201526001600160a01b039091169063944ac59f9060a401600060405180830381600087803b1580156200072857600080fd5b505af11580156200073d573d6000803e3d6000fd5b505050507f2214a403d5f8d049e52eacca974c6dea01a471e41d6a18903bfaf7dbc709741f878787612710620007749190620014bc565b876200078388612710620014bc565b6040805161ffff96871681529486166020860152928516848401529084166060840152909216608082015290519081900360a00190a150505050505050565b6001600160a01b038116620007ea57604051635919af9760e11b815260040160405180910390fd5b62000809816001600160a01b03166200116f60201b620023381760201c565b620008365760405163df4c572d60e01b81526001600160a01b038216600482015260240160405180910390fd5b6040516370a0823160e01b81523060048201526001600160a01b038216906370a0823190602401602060405180830381865afa92505050801562000899575060408051601f3d908101601f19168201909252620008969181019062001564565b60015b620008b75760405163528ca31d60e01b815260040160405180910390fd5b50600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200090c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200093291906200147f565b604051630f9a650360e41b8152670de0b6b3a764000060048201526001600160a01b038381166024830152919091169063f9a6503090604401602060405180830381865afa925050508015620009a7575060408051601f3d908101601f19168201909252620009a49181019062001564565b60015b620009c5576040516367a7cd4360e01b815260040160405180910390fd5b5060015460405163d48bfca760e01b81526001600160a01b0383811660048301529091169063d48bfca790602401600060405180830381600087803b15801562000a0e57600080fd5b505af115801562000a23573d6000803e3d6000fd5b50506040516001600160a01b03841692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a250565b6002546001600160a01b038381169116141562000a8e57604051633b899cf960e01b815260040160405180910390fd5b60015460405163172c48c760e01b8152600060048201819052916001600160a01b03169063172c48c7906024016040805180830381865afa15801562000ad8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000afe91906200152a565b91505061ffff8216158062000b1a57508061ffff168261ffff16115b1562000b39576040516333c6608d60e01b815260040160405180910390fd5b600154604051635385e2a160e11b81526001600160a01b03858116600483015261ffff851660248301529091169063a70bc54290604401600060405180830381600087803b15801562000b8b57600080fd5b505af115801562000ba0573d6000803e3d6000fd5b505060405161ffff851681526001600160a01b038616925060008051602062005f1d833981519152915060200160405180910390a2505050565b600062000be662001175565b6001600160a01b031663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801562000c24573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c4a91906200157e565b50509050600062000c606200117560201b60201c565b6001600160a01b031663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa15801562000c9d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000cc39190620015d5565b915050806001600160801b0316836001600160801b0316101562000cfa576040516309aadd6f60e41b815260040160405180910390fd5b826001600160801b0316826001600160801b03161462000dc35762000d1e62001175565b604051632715681560e21b81526001600160801b03851660048201526001600160a01b039190911690639c55a05490602401600060405180830381600087803b15801562000d6b57600080fd5b505af115801562000d80573d6000803e3d6000fd5b50506040516001600160801b03861681527fa030eec20ae970821387224ec3bb15b4bd22b89bfb86dc4d2b3827aa3d99e48d925060200190505b60405180910390a15b505050565b600062000dd462001175565b6001600160a01b031663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801562000e12573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e3891906200157e565b50509050816001600160801b0316836001600160801b0316118062000e6e5750806001600160801b0316826001600160801b0316115b1562000e8d576040516309aadd6f60e41b815260040160405180910390fd5b62000e9762001175565b60405163300eb37b60e11b81526001600160801b038086166004830152841660248201526001600160a01b03919091169063601d66f690604401600060405180830381600087803b15801562000eec57600080fd5b505af115801562000f01573d6000803e3d6000fd5b5050604080516001600160801b038088168252861660208201527f4d4981437d0211f9e6843eb024d9ada1fa3a99514d4343d4aece106dd11524bb935001905062000dba565b600154600254604051635385e2a160e11b81526001600160a01b03918216600482015261ffff8416602482015291169063a70bc54290604401600060405180830381600087803b15801562000f9b57600080fd5b505af115801562000fb0573d6000803e3d6000fd5b505050506000600160009054906101000a90046001600160a01b03166001600160a01b031663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200100a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001030919062001564565b905060015b8181101562000dc35760015460405163172c48c760e01b81526004810183905260009182916001600160a01b039091169063172c48c7906024016040805180830381865afa1580156200108c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010b291906200152a565b915091508461ffff168161ffff1611156200116457600154604051635385e2a160e11b81526001600160a01b03848116600483015261ffff881660248301529091169063a70bc54290604401600060405180830381600087803b1580156200111957600080fd5b505af11580156200112e573d6000803e3d6000fd5b505060405161ffff881681526001600160a01b038516925060008051602062005f1d833981519152915060200160405180910390a25b505060010162001035565b3b151590565b60015460408051632f7a188160e01b815290516000926001600160a01b031691632f7a18819160048083019260209291908290030181865afa158015620011c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011e691906200147f565b905090565b6001600160a01b03811681146200120157600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b03811182821017156200123f576200123f62001204565b60405290565b604080519081016001600160401b03811182821017156200123f576200123f62001204565b604051601f8201601f191681016001600160401b038111828210171562001295576200129562001204565b604052919050565b80516001600160801b0381168114620012b557600080fd5b919050565b8051620012b581620011eb565b805161ffff81168114620012b557600080fd5b80518015158114620012b557600080fd5b6000806000606084860312156200130157600080fd5b83516200130e81620011eb565b809350506020808501516200132381620011eb565b604086810151919450906001600160401b03808211156200134357600080fd5b9087019060a0828a0312156200135857600080fd5b620013626200121a565b6200136d836200129d565b81526200137c8584016200129d565b8582015283830151828111156200139257600080fd5b8301601f81018b13620013a457600080fd5b805183811115620013b957620013b962001204565b620013c9878260051b016200126a565b818152878101945060069190911b82018701908c821115620013ea57600080fd5b918701915b81831015620014435786838e031215620014095760008081fd5b6200141362001245565b83516200142081620011eb565b81526200142f848a01620012c7565b818a015285529387019391860191620013ef565b838701525062001458905060608401620012ba565b60608201526200146b60808401620012da565b608082015280955050505050509250925092565b6000602082840312156200149257600080fd5b81516200149f81620011eb565b9392505050565b634e487b7160e01b600052601160045260246000fd5b600061ffff83811690831681811015620014da57620014da620014a6565b039392505050565b634e487b7160e01b600052603260045260246000fd5b60006001600160801b0382811684821681151582840482111615620015215762001521620014a6565b02949350505050565b600080604083850312156200153e57600080fd5b82516200154b81620011eb565b91506200155b60208401620012c7565b90509250929050565b6000602082840312156200157757600080fd5b5051919050565b6000806000606084860312156200159457600080fd5b6200159f846200129d565b9250620015af60208501620012da565b9150604084015164ffffffffff81168114620015ca57600080fd5b809150509250925092565b60008060408385031215620015e957600080fd5b620015f4836200129d565b91506200155b602084016200129d565b608051614878620016a56000396000818161033601528181610446015281816107c5015281816108c0015281816109ae01528181610b8301528181610f0a015281816113e1015281816114cf015281816115bb015281816116ab015281816117990152818161187d01528181611ad901528181611bc601528181611cb301528181611da0015281816120090152818161218c015261227901526148786000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80638456cb59116100f9578063dc2b21c111610097578063f0527ac611610071578063f0527ac6146103d7578063f206d32a146103df578063fb1bd8c4146103f2578063ffd9b9071461040557600080fd5b8063dc2b21c11461039e578063e6492d7b146103b1578063eb9606df146103c457600080fd5b8063a50cf2c8116100d3578063a50cf2c814610331578063a70bc54214610358578063b53472ef1461036b578063c12c21c01461037e57600080fd5b80638456cb59146103035780639c55a0541461030b5780639f1c50691461031e57600080fd5b806350e036ff1161016657806354fd4d501161014057806354fd4d50146102b25780635c975abb146102ba5780636f307dc3146102d05780637bccacee146102f057600080fd5b806350e036ff1461027657806352438e541461028c578063526a41e81461029f57600080fd5b80633e7c88d6116101a25780633e7c88d6146102355780633f4ba83a14610248578063456e0742146102505780635094cb4f1461026357600080fd5b806324147708146101c95780632954018c146101de5780632f7a18811461022d575b600080fd5b6101dc6101d7366004614307565b610418565b005b60005461020390610100900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6102036106fe565b6101dc610243366004614334565b610797565b6101dc610892565b6101dc61025e366004614307565b610980565b61020361027136600461436d565b610b36565b61027e610b49565b604051908152602001610224565b6101dc61029a366004614307565b610b55565b6101dc6102ad366004614394565b610edc565b61027e600281565b60005460ff166040519015158152602001610224565b6002546102039073ffffffffffffffffffffffffffffffffffffffff1681565b6101dc6102fe3660046143c2565b6113b3565b6101dc6114a1565b6101dc61031936600461440e565b61158d565b6101dc61032c36600461442b565b61167d565b6102037f000000000000000000000000000000000000000000000000000000000000000081565b6101dc610366366004614334565b61176b565b6101dc610379366004614307565b61184f565b6001546102039073ffffffffffffffffffffffffffffffffffffffff1681565b6101dc6103ac366004614459565b611aab565b6101dc6103bf366004614307565b611b98565b6101dc6103d236600461448f565b611c85565b6101dc611d72565b6101dc6103ed3660046144ac565b611fdb565b6101dc610400366004614307565b61215e565b6101dc61041336600461451d565b61224b565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156104a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c6919061453a565b6104fc576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006105078261233e565b90506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015610578573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059c9190614557565b90508181166106f9576001546040517fa366f496000000000000000000000000000000000000000000000000000000008152918317600483018190529173ffffffffffffffffffffffffffffffffffffffff9091169063a366f49690602401600060405180830381600087803b15801561061557600080fd5b505af1158015610629573d6000803e3d6000fd5b505050506106356106fe565b6040517fffd9b9070000000000000000000000000000000000000000000000000000000081526001600482015273ffffffffffffffffffffffffffffffffffffffff919091169063ffd9b90790602401600060405180830381600087803b15801561069f57600080fd5b505af11580156106b3573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692507ff17b849746e74d7186170c9553d4bbf60b4f8bb1ed81fe50c099b934fb078f059150600090a25b505050565b600154604080517f2f7a1881000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691632f7a18819160048083019260209291908290030181865afa15801561076e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610792919061457b565b905090565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610821573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610845919061453a565b61087b576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108848261241e565b61088e82826127f8565b5050565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa15801561091c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610940919061453a565b610976576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61097e612a15565b565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610a0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2e919061453a565b610a64576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a6d81612af6565b6001546040517f9f5f86ae00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015290911690639f5f86ae90602401600060405180830381600087803b158015610ada57600080fd5b505af1158015610aee573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507f5a0b7d0f9c24b39256e112a0584b4c5ce38d8f1dee2e7c56f15b852604cdc8869150600090a250565b6000610b43600383612cb8565b92915050565b60006107926003612ccb565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610bdf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c03919061453a565b610c39576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610c86576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063fdd5764590602401602060405180830381865afa158015610cf7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1b919061457b565b905073ffffffffffffffffffffffffffffffffffffffff8116610d6a576040517f1170cc2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f6e98e5e400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526000602483015290911690636e98e5e490604401600060405180830381600087803b158015610dde57600080fd5b505af1158015610df2573d6000803e3d6000fd5b50506001546040517f6e98e5e40000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff86811660248301529091169250636e98e5e49150604401600060405180830381600087803b158015610e6a57600080fd5b505af1158015610e7e573d6000803e3d6000fd5b50505050610e96826003612cd590919063ffffffff16565b5060405173ffffffffffffffffffffffffffffffffffffffff8316907fab9f405bf0c19b97f65a7031634db41569cd2f0e0376a610a1e977f9ab22b58f90600090a25050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610f66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8a919061453a565b610fc0576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fc982612af6565b6000806000610fd66106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015611020573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110449190614598565b9250925092506000806110556106fe565b73ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa15801561109e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c291906145e5565b9150915060006110d06106fe565b73ffffffffffffffffffffffffffffffffffffffff16639be0536a6040518163ffffffff1660e01b8152600401600060405180830381865afa15801561111a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526111609190810190614643565b9050600061116c6106fe565b73ffffffffffffffffffffffffffffffffffffffff1663b1836d326040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111da919061453a565b600154604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905192935073ffffffffffffffffffffffffffffffffffffffff909116916311ca4fc2918c918491632630c12f9160048083019260209291908290030181865afa158015611256573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061127a919061457b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156112e757600080fd5b505af11580156112fb573d6000803e3d6000fd5b5050505087156113675761130e87612cf7565b6113188484612f5d565b61132186613152565b60005b82518110156113575761134f83828151811061134257611342614726565b60200260200101516132a3565b600101611324565b50801561136757611367856133c9565b60405173ffffffffffffffffffffffffffffffffffffffff8a16907fa8b21f72cb83bce808df32dc2330217d744a1c22f3e9e44e4b11bbf049d37d9d90600090a2505050505050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561143d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611461919061453a565b611497576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61088e828261357b565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561152b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061154f919061453a565b611585576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61097e6139c3565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611617573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163b919061453a565b611671576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81612cf7565b50565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611707573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172b919061453a565b611761576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61088e8282612f5d565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156117f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611819919061453a565b610884576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156118d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fd919061453a565b611933576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061193e8261233e565b90506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d39190614557565b9050818116156106f9576001546040517fa366f496000000000000000000000000000000000000000000000000000000008152918318600483018190529173ffffffffffffffffffffffffffffffffffffffff9091169063a366f49690602401600060405180830381600087803b158015611a4d57600080fd5b505af1158015611a61573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a2505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611b35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b59919061453a565b611b8f576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81613a83565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611c22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c46919061453a565b611c7c576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81613b3d565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611d0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d33919061453a565b611d69576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a816133c9565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611dfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e20919061453a565b611e56576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ec4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee8919061457b565b60015490915073ffffffffffffffffffffffffffffffffffffffff166311ca4fc2611f116106fe565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff91821660048201529084166024820152604401600060405180830381600087803b158015611f7f57600080fd5b505af1158015611f93573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507f3f82447be465b0b5a4a9e54c74d5f6ae73f2e9537f2cc1590a340524703d09619150600090a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015612065573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612089919061453a565b6120bf576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61271061ffff86161015806120e357506127106120dc8585614784565b61ffff1610155b806120fd57506127106120f68383614784565b61ffff1610155b15612134576040517f0b361d6900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6121578585612145866127106147aa565b85612152866127106147aa565b613c5c565b5050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156121e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061220c919061453a565b612242576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a816132a3565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156122d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122f9919061453a565b61232f576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81613152565b3b151590565b6001546040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063f67c5bd090602401602060405180830381865afa1580156123af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123d39190614557565b90508015806123e25750806001145b15612419576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b73ffffffffffffffffffffffffffffffffffffffff811661246b576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163b6124d6576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024015b60405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8216906370a0823190602401602060405180830381865afa92505050801561257a575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261257791810190614557565b60015b6125b0576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561261e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612642919061457b565b6040517ff9a65030000000000000000000000000000000000000000000000000000000008152670de0b6b3a7640000600482015273ffffffffffffffffffffffffffffffffffffffff8381166024830152919091169063f9a6503090604401602060405180830381865afa9250505080156126f8575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526126f591810190614557565b60015b61272e576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506001546040517fd48bfca700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301529091169063d48bfca790602401600060405180830381600087803b15801561279c57600080fd5b505af11580156127b0573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a250565b60025473ffffffffffffffffffffffffffffffffffffffff8381169116141561284d576040517f3b899cf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f172c48c70000000000000000000000000000000000000000000000000000000081526000600482018190529173ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa1580156128bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128e091906147cd565b91505061ffff821615806128fb57508061ffff168261ffff16115b15612932576040517f33c6608d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015261ffff851660248301529091169063a70bc54290604401600060405180830381600087803b1580156129a957600080fd5b505af11580156129bd573d6000803e3d6000fd5b505060405161ffff8516815273ffffffffffffffffffffffffffffffffffffffff861692507f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650915060200160405180910390a2505050565b60005460ff16612a81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016124cd565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b73ffffffffffffffffffffffffffffffffffffffff8116612b43576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163b612ba9576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024016124cd565b8073ffffffffffffffffffffffffffffffffffffffff1663c12c21c06040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612c2e575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252612c2b9181019061457b565b60015b612c64576040517fe9eddd1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60015473ffffffffffffffffffffffffffffffffffffffff82811691161461088e576040517fe9eddd1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612cc48383613e92565b9392505050565b6000610b43825490565b6000612cc48373ffffffffffffffffffffffffffffffffffffffff8416613ebc565b6000612d016106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015612d4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d6f9190614598565b505090506000612d7d6106fe565b73ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa158015612dc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dea91906145e5565b915050806fffffffffffffffffffffffffffffffff16836fffffffffffffffffffffffffffffffff161015612e4b576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826fffffffffffffffffffffffffffffffff16826fffffffffffffffffffffffffffffffff16146106f957612e7e6106fe565b6040517f9c55a0540000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff8516600482015273ffffffffffffffffffffffffffffffffffffffff9190911690639c55a05490602401600060405180830381600087803b158015612ef957600080fd5b505af1158015612f0d573d6000803e3d6000fd5b50506040516fffffffffffffffffffffffffffffffff861681527fa030eec20ae970821387224ec3bb15b4bd22b89bfb86dc4d2b3827aa3d99e48d925060200190505b60405180910390a1505050565b6000612f676106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015612fb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fd59190614598565b50509050816fffffffffffffffffffffffffffffffff16836fffffffffffffffffffffffffffffffff16118061302e5750806fffffffffffffffffffffffffffffffff16826fffffffffffffffffffffffffffffffff16115b15613065576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61306d6106fe565b6040517f601d66f60000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff80861660048301528416602482015273ffffffffffffffffffffffffffffffffffffffff919091169063601d66f690604401600060405180830381600087803b1580156130f057600080fd5b505af1158015613104573d6000803e3d6000fd5b5050604080516fffffffffffffffffffffffffffffffff8088168252861660208201527f4d4981437d0211f9e6843eb024d9ada1fa3a99514d4343d4aece106dd11524bb9350019050612f50565b600061315c6106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa1580156131a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131ca9190614598565b509150508015158215151461088e576131e16106fe565b6040517fffd9b907000000000000000000000000000000000000000000000000000000008152831515600482015273ffffffffffffffffffffffffffffffffffffffff919091169063ffd9b90790602401600060405180830381600087803b15801561324c57600080fd5b505af1158015613260573d6000803e3d6000fd5b505050507ff97ba903470ff3262b4a68a938fe81def401bac1bd742169d2e8d5c4ed2185d382604051613297911515815260200190565b60405180910390a15050565b73ffffffffffffffffffffffffffffffffffffffff81166132f0576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6132f86106fe565b6040517fb55bb84b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152919091169063b55bb84b90602401600060405180830381600087803b15801561336357600080fd5b505af1158015613377573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841681527fdac9a7995cbc0c0f01d78970fb6fd0b52fe0fe869eb6635e65cc1b5682b8325c925060200190505b60405180910390a150565b60006133d36106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801561341d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134419190614598565b925050508064ffffffffff168264ffffffffff161461088e578164ffffffffff168164ffffffffff16118061347c57508164ffffffffff1642115b156134b3576040517fe4eaca7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134bb6106fe565b6040517feb9606df00000000000000000000000000000000000000000000000000000000815264ffffffffff8416600482015273ffffffffffffffffffffffffffffffffffffffff919091169063eb9606df90602401600060405180830381600087803b15801561352b57600080fd5b505af115801561353f573d6000803e3d6000fd5b505060405164ffffffffff851681527f0b3eb35ba750e7a7e4d26c9eee3d226f4e1f68c5568f4a3d051c94b241b02ac092506020019050613297565b73ffffffffffffffffffffffffffffffffffffffff82166135c8576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82163b61362e576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016124cd565b61363781612af6565b60015473ffffffffffffffffffffffffffffffffffffffff8381169116148061369257506136636106fe565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b806136b7575060015473ffffffffffffffffffffffffffffffffffffffff8281169116145b806136f457506136c56106fe565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b1561372b576040517f727de5c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517fff68754300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063ff68754390602401602060405180830381865afa15801561379c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137c0919061457b565b73ffffffffffffffffffffffffffffffffffffffff1614158061388c57506001546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063fdd5764590602401602060405180830381865afa15801561384f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613873919061457b565b73ffffffffffffffffffffffffffffffffffffffff1614155b156138c3576040517f21ff1e7100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f6e98e5e400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152848116602483015290911690636e98e5e490604401600060405180830381600087803b15801561393857600080fd5b505af115801561394c573d6000803e3d6000fd5b50505050613964826003613faf90919063ffffffff16565b508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4bcbefaef68b99503d502f5a6abe7bca2b183ab8ac55457013c77d084ebd130560405160405180910390a35050565b60005460ff1615613a30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016124cd565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612acc3390565b6001546040517fdc2b21c100000000000000000000000000000000000000000000000000000000815260ff8316600482015273ffffffffffffffffffffffffffffffffffffffff9091169063dc2b21c190602401600060405180830381600087803b158015613af157600080fd5b505af1158015613b05573d6000803e3d6000fd5b505060405160ff841681527f73caacd705657a7d283e48ecf288b73bc517e3aea1bbc9da2fd54a979e8aa950925060200190506133be565b73ffffffffffffffffffffffffffffffffffffffff8116613b8a576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613b926106fe565b6040517fdcf6548200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152919091169063dcf6548290602401600060405180830381600087803b158015613bfd57600080fd5b505af1158015613c11573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841681527f32e53e2e527af8518ae889e5f7e674bc83f7cf68e4cc059aceeaa0e64208b85b925060200190506133be565b6000613c6885856147aa565b6001546040517f172c48c700000000000000000000000000000000000000000000000000000000815260006004820181905292935073ffffffffffffffffffffffffffffffffffffffff9091169063172c48c7906024016040805180830381865afa158015613cdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cff91906147cd565b9150508061ffff168261ffff1614613d6e57613d1a82613fd1565b60025460405161ffff8416815273ffffffffffffffffffffffffffffffffffffffff909116907f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac6509060200160405180910390a25b6001546040517f944ac59f00000000000000000000000000000000000000000000000000000000815261ffff808a1660048301528089166024830152808816604483015280871660648301528516608482015273ffffffffffffffffffffffffffffffffffffffff9091169063944ac59f9060a401600060405180830381600087803b158015613dfd57600080fd5b505af1158015613e11573d6000803e3d6000fd5b505050507f2214a403d5f8d049e52eacca974c6dea01a471e41d6a18903bfaf7dbc709741f878787612710613e4691906147aa565b87613e53886127106147aa565b6040805161ffff96871681529486166020860152928516848401529084166060840152909216608082015290519081900360a00190a150505050505050565b6000826000018281548110613ea957613ea9614726565b9060005260206000200154905092915050565b60008181526001830160205260408120548015613fa5576000613ee06001836147fc565b8554909150600090613ef4906001906147fc565b9050818114613f59576000866000018281548110613f1457613f14614726565b9060005260206000200154905080876000018481548110613f3757613f37614726565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080613f6a57613f6a614813565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610b43565b6000915050610b43565b6000612cc48373ffffffffffffffffffffffffffffffffffffffff8416614296565b6001546002546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015261ffff8416602482015291169063a70bc54290604401600060405180830381600087803b15801561404a57600080fd5b505af115801561405e573d6000803e3d6000fd5b505050506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156140d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140f59190614557565b905060015b818110156106f9576001546040517f172c48c700000000000000000000000000000000000000000000000000000000815260048101839052600091829173ffffffffffffffffffffffffffffffffffffffff9091169063172c48c7906024016040805180830381865afa158015614175573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061419991906147cd565b915091508461ffff168161ffff16111561428c576001546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015261ffff881660248301529091169063a70bc54290604401600060405180830381600087803b15801561422457600080fd5b505af1158015614238573d6000803e3d6000fd5b505060405161ffff8816815273ffffffffffffffffffffffffffffffffffffffff851692507f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650915060200160405180910390a25b50506001016140fa565b60008181526001830160205260408120546142dd57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610b43565b506000610b43565b73ffffffffffffffffffffffffffffffffffffffff8116811461167a57600080fd5b60006020828403121561431957600080fd5b8135612cc4816142e5565b61ffff8116811461167a57600080fd5b6000806040838503121561434757600080fd5b8235614352816142e5565b9150602083013561436281614324565b809150509250929050565b60006020828403121561437f57600080fd5b5035919050565b801515811461167a57600080fd5b600080604083850312156143a757600080fd5b82356143b2816142e5565b9150602083013561436281614386565b600080604083850312156143d557600080fd5b82356143e0816142e5565b91506020830135614362816142e5565b6fffffffffffffffffffffffffffffffff8116811461167a57600080fd5b60006020828403121561442057600080fd5b8135612cc4816143f0565b6000806040838503121561443e57600080fd5b8235614449816143f0565b91506020830135614362816143f0565b60006020828403121561446b57600080fd5b813560ff81168114612cc457600080fd5b64ffffffffff8116811461167a57600080fd5b6000602082840312156144a157600080fd5b8135612cc48161447c565b600080600080600060a086880312156144c457600080fd5b85356144cf81614324565b945060208601356144df81614324565b935060408601356144ef81614324565b925060608601356144ff81614324565b9150608086013561450f81614324565b809150509295509295909350565b60006020828403121561452f57600080fd5b8135612cc481614386565b60006020828403121561454c57600080fd5b8151612cc481614386565b60006020828403121561456957600080fd5b5051919050565b8051612419816142e5565b60006020828403121561458d57600080fd5b8151612cc4816142e5565b6000806000606084860312156145ad57600080fd5b83516145b8816143f0565b60208501519093506145c981614386565b60408501519092506145da8161447c565b809150509250925092565b600080604083850312156145f857600080fd5b8251614603816143f0565b6020840151909250614362816143f0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000602080838503121561465657600080fd5b825167ffffffffffffffff8082111561466e57600080fd5b818501915085601f83011261468257600080fd5b81518181111561469457614694614614565b8060051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f830116810181811085821117156146d7576146d7614614565b6040529182528482019250838101850191888311156146f557600080fd5b938501935b8285101561471a5761470b85614570565b845293850193928501926146fa565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061ffff8083168185168083038211156147a1576147a1614755565b01949350505050565b600061ffff838116908316818110156147c5576147c5614755565b039392505050565b600080604083850312156147e057600080fd5b82516147eb816142e5565b602084015190925061436281614324565b60008282101561480e5761480e614755565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea264697066735822122046c364b67d38a3dd85b57e027716324d90dd1df102f265f0a0e2697babdb3f3b64736f6c634300080a003394525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac65060806040523480156200001157600080fd5b5060405162000de938038062000de98339810160408190526200003491620001db565b81516200004990600390602085019062000068565b5080516200005f90600490602084019062000068565b50505062000282565b828054620000769062000245565b90600052602060002090601f0160209004810192826200009a5760008555620000e5565b82601f10620000b557805160ff1916838001178555620000e5565b82800160010185558215620000e5579182015b82811115620000e5578251825591602001919060010190620000c8565b50620000f3929150620000f7565b5090565b5b80821115620000f35760008155600101620000f8565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200013657600080fd5b81516001600160401b03808211156200015357620001536200010e565b604051601f8301601f19908116603f011681019082821181831017156200017e576200017e6200010e565b816040528381526020925086838588010111156200019b57600080fd5b600091505b83821015620001bf5785820183015181830184015290820190620001a0565b83821115620001d15760008385830101525b9695505050505050565b60008060408385031215620001ef57600080fd5b82516001600160401b03808211156200020757600080fd5b620002158683870162000124565b935060208501519150808211156200022c57600080fd5b506200023b8582860162000124565b9150509250929050565b600181811c908216806200025a57607f821691505b602082108114156200027c57634e487b7160e01b600052602260045260246000fd5b50919050565b610b5780620002926000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80633950935111610081578063a457c2d71161005b578063a457c2d714610194578063a9059cbb146101a7578063dd62ed3e146101ba57600080fd5b8063395093511461014357806370a082311461015657806395d89b411461018c57600080fd5b806318160ddd116100b257806318160ddd1461010f57806323b872dd14610121578063313ce5671461013457600080fd5b806306fdde03146100ce578063095ea7b3146100ec575b600080fd5b6100d6610200565b6040516100e39190610937565b60405180910390f35b6100ff6100fa3660046109d3565b610292565b60405190151581526020016100e3565b6002545b6040519081526020016100e3565b6100ff61012f3660046109fd565b6102a8565b604051601281526020016100e3565b6100ff6101513660046109d3565b610393565b610113610164366004610a39565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100d66103dc565b6100ff6101a23660046109d3565b6103eb565b6100ff6101b53660046109d3565b6104c3565b6101136101c8366004610a5b565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60606003805461020f90610a8e565b80601f016020809104026020016040519081016040528092919081815260200182805461023b90610a8e565b80156102885780601f1061025d57610100808354040283529160200191610288565b820191906000526020600020905b81548152906001019060200180831161026b57829003601f168201915b5050505050905090565b600061029f3384846104d0565b50600192915050565b60006102b5848484610683565b73ffffffffffffffffffffffffffffffffffffffff841660009081526001602090815260408083203384529091529020548281101561037b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61038885338584036104d0565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161029f9185906103d7908690610ae2565b6104d0565b60606004805461020f90610a8e565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156104ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610372565b6104b933858584036104d0565b5060019392505050565b600061029f338484610683565b73ffffffffffffffffffffffffffffffffffffffff8316610572576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610372565b73ffffffffffffffffffffffffffffffffffffffff8216610615576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610372565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610726576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610372565b73ffffffffffffffffffffffffffffffffffffffff82166107c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610372565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260409020548181101561087f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610372565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152602081905260408082208585039055918516815290812080548492906108c3908490610ae2565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161092991815260200190565b60405180910390a350505050565b600060208083528351808285015260005b8181101561096457858101830151858201604001528201610948565b81811115610976576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146109ce57600080fd5b919050565b600080604083850312156109e657600080fd5b6109ef836109aa565b946020939093013593505050565b600080600060608486031215610a1257600080fd5b610a1b846109aa565b9250610a29602085016109aa565b9150604084013590509250925092565b600060208284031215610a4b57600080fd5b610a54826109aa565b9392505050565b60008060408385031215610a6e57600080fd5b610a77836109aa565b9150610a85602084016109aa565b90509250929050565b600181811c90821680610aa257607f821691505b60208210811415610adc577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60008219821115610b1c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b50019056fea2646970667358221220ea837db55982fa6337364a97193f807baffaf946f2fc4d834a362194db15ea6564736f6c634300080a00335570677261646561626c6520636f6e7472616374203120776173206e6f74207472616e736665727265645570677261646561626c6520636f6e7472616374203020776173206e6f74207472616e73666572726564496e636f7272656374204c5420666f7220756e6465726c79696e6720746f6b656e496e636f727265637420616c6c6f77656420636f6e74726163747320636f756e74496e636f7272656374205553444320666f7220756e6465726c79696e6720746f6b656e496e636f7272656374206973496e63726561736544656274466f7262696464656e20496e636f727265637420206d6178426f72726f776564416d6f756e74506572426c6f636b496e636f7272656374207175616e74697479206f6620616c6c6f77656420746f6b656e73437265646974206d616e61676572206d617820656e61626c656420746f6b656e7320696e636f7272656374496e636f7272656374206c69717569646174696f6e446973636f756e7445787069726564496e636f7272656374205745544820666f7220756e6465726c79696e6720746f6b656ea2646970667358221220ec8431432767766effca5926ce812d52c8401c4e96f32b0312069c1cf85b476664736f6c634300080a0033"; - -type CreditConfiguratorTestConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: CreditConfiguratorTestConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class CreditConfiguratorTest__factory extends ContractFactory { - constructor(...args: CreditConfiguratorTestConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): CreditConfiguratorTest { - return super.attach(address) as CreditConfiguratorTest; - } - override connect(signer: Signer): CreditConfiguratorTest__factory { - return super.connect(signer) as CreditConfiguratorTest__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): CreditConfiguratorTestInterface { - return new utils.Interface(_abi) as CreditConfiguratorTestInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): CreditConfiguratorTest { - return new Contract( - address, - _abi, - signerOrProvider - ) as CreditConfiguratorTest; - } -} diff --git a/src/types/factories/contracts/test/credit/CreditConfigurator.t.sol/index.ts b/src/types/factories/contracts/test/credit/CreditConfigurator.t.sol/index.ts deleted file mode 100644 index 6571f838..00000000 --- a/src/types/factories/contracts/test/credit/CreditConfigurator.t.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { CreditConfiguratorTest__factory } from "./CreditConfiguratorTest__factory"; diff --git a/src/types/factories/contracts/test/credit/CreditFacade.t.sol/CreditFacadeTest__factory.ts b/src/types/factories/contracts/test/credit/CreditFacade.t.sol/CreditFacadeTest__factory.ts deleted file mode 100644 index b661f528..00000000 --- a/src/types/factories/contracts/test/credit/CreditFacade.t.sol/CreditFacadeTest__factory.ts +++ /dev/null @@ -1,1368 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - CreditFacadeTest, - CreditFacadeTestInterface, -} from "../../../../../contracts/test/credit/CreditFacade.t.sol/CreditFacadeTest"; - -const _abi = [ - { - inputs: [], - name: "AccountTransferNotAllowedException", - type: "error", - }, - { - inputs: [], - name: "AdaptersOrCreditFacadeOnlyException", - type: "error", - }, - { - inputs: [], - name: "AllowanceFailedExpcetion", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "BalanceLessThanMinimumDesired", - type: "error", - }, - { - inputs: [], - name: "BorrowAmountOutOfLimitsException", - type: "error", - }, - { - inputs: [], - name: "BorrowedBlockLimitException", - type: "error", - }, - { - inputs: [], - name: "CantLiquidateNonExpiredException", - type: "error", - }, - { - inputs: [], - name: "CantLiquidateWithSuchHealthFactorException", - type: "error", - }, - { - inputs: [], - name: "CantTransferLiquidatableAccountException", - type: "error", - }, - { - inputs: [], - name: "CreditConfiguratorOnlyException", - type: "error", - }, - { - inputs: [], - name: "CreditFacadeOnlyException", - type: "error", - }, - { - inputs: [], - name: "ForbiddenDuringClosureException", - type: "error", - }, - { - inputs: [], - name: "HasNoOpenedAccountException", - type: "error", - }, - { - inputs: [], - name: "IncorrectCallDataException", - type: "error", - }, - { - inputs: [], - name: "IncreaseAndDecreaseForbiddenInOneCallException", - type: "error", - }, - { - inputs: [], - name: "IncreaseDebtForbiddenException", - type: "error", - }, - { - inputs: [], - name: "NotAllowedInWhitelistedMode", - type: "error", - }, - { - inputs: [], - name: "NotAllowedWhenNotExpirableException", - type: "error", - }, - { - inputs: [], - name: "NotEnoughCollateralException", - type: "error", - }, - { - inputs: [], - name: "OpenAccountNotAllowedAfterExpiration", - type: "error", - }, - { - inputs: [], - name: "ReentrancyLockException", - type: "error", - }, - { - inputs: [], - name: "TargetContractNotAllowedExpcetion", - type: "error", - }, - { - inputs: [], - name: "TokenAlreadyAddedException", - type: "error", - }, - { - inputs: [], - name: "TokenNotAllowedException", - type: "error", - }, - { - inputs: [], - name: "TooMuchEnabledTokensException", - type: "error", - }, - { - inputs: [], - name: "TooMuchTokensException", - type: "error", - }, - { - inputs: [], - name: "UnknownMethodException", - type: "error", - }, - { - inputs: [], - name: "ZeroAddressOrUserAlreadyHasAccountException", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "onBehalfOf", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "token", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "AddCollateral", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - ], - name: "CloseCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "DecreaseBorrowedAmount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "target", - type: "address", - }, - ], - name: "ExecuteOrder", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "IncreaseBorrowedAmount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "liquidator", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "remainingFunds", - type: "uint256", - }, - ], - name: "LiquidateCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "liquidator", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "remainingFunds", - type: "uint256", - }, - ], - name: "LiquidateExpiredCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [], - name: "MultiCallFinished", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - ], - name: "MultiCallStarted", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newConfigurator", - type: "address", - }, - ], - name: "NewConfigurator", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "onBehalfOf", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "borrowAmount", - type: "uint256", - }, - { - indexed: false, - internalType: "uint16", - name: "referralCode", - type: "uint16", - }, - ], - name: "OpenCreditAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "token", - type: "address", - }, - ], - name: "TokenDisabled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "token", - type: "address", - }, - ], - name: "TokenEnabled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "oldOwner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "TransferAccount", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "bool", - name: "state", - type: "bool", - }, - ], - name: "TransferAccountAllowed", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "", - type: "address", - }, - ], - name: "log_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "log_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - name: "log_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "int256", - name: "", - type: "int256", - }, - ], - name: "log_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "address", - name: "val", - type: "address", - }, - ], - name: "log_named_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes", - name: "val", - type: "bytes", - }, - ], - name: "log_named_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes32", - name: "val", - type: "bytes32", - }, - ], - name: "log_named_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - ], - name: "log_named_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "string", - name: "val", - type: "string", - }, - ], - name: "log_named_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - ], - name: "log_named_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "log_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "logs", - type: "event", - }, - { - inputs: [], - name: "IS_TEST", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "cft", - outputs: [ - { - internalType: "contract CreditFacadeTestSuite", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditConfigurator", - outputs: [ - { - internalType: "contract CreditConfigurator", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditFacade", - outputs: [ - { - internalType: "contract CreditFacade", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditManager", - outputs: [ - { - internalType: "contract ICreditManagerV2", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "failed", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "setUp", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_FA_01A_constructor_sets_correct_values", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_FA_01_constructor_reverts_for_zero_address", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_FA_02_functions_reverts_if_borrower_has_no_account", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_FA_03A_openCreditAccount_correctly_wraps_ETH", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_FA_03B_openCreditAccountMulticall_correctly_wraps_ETH", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_FA_03C_closeCreditAccount_correctly_wraps_ETH", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_FA_03D_liquidate_correctly_wraps_ETH", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_FA_03E_addCollateral_correctly_wraps_ETH", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_FA_03F_multicall_correctly_wraps_ETH", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_FA_04A_openCreditAccount_reverts_for_using_addresses_which_is_not_allowed_by_transfer_allowance", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_FA_04B_openCreditAccount_reverts_for_non_whitelisted_account", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_FA_04C_openCreditAccount_burns_token_in_whitelisted_mode", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_FA_05_openCreditAccount_sets_correct_values", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint16", - name: "leverageFactor", - type: "uint16", - }, - ], - name: "test_FA_06_openCreditAccount_reverts_for_hf_less_one", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_FA_07_openCreditAccountMulticall_reverts_if_increase_debt_forbidden", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_FA_08_openCreditAccountMulticall_runs_operations_in_correct_order", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "uint8", - name: "token1", - type: "uint8", - }, - ], - name: "test_FA_09_openCreditAccountMulticall_cant_open_credit_account_with_hf_less_one", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_FA_10_no_free_flashloans_during_openCreditAccount", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_FA_11A_openCreditAccount_reverts_if_met_borrowed_limit_per_block", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_FA_11B_openCreditAccount_reverts_if_amount_less_minBorrowedAmount_or_bigger_than_maxBorrowedAmount", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_FA_12_closeCreditAccount_runs_operations_in_correct_order", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_FA_13_closeCreditAccount_reverts_on_internal_call_in_multicall_on_closure", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_FA_14_liquidateCreditAccount_reverts_if_hf_is_greater_than_1", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_FA_15_liquidateCreditAccount_executes_needed_calls_and_emits_events", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_FA_16_liquidateCreditAccount_reverts_on_internal_call_in_multicall_on_closure", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_FA_17_increaseDebt_executes_actions_as_expected", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_FA_18A_increaseDebt_revets_if_more_than_block_limit", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_FA_18B_increaseDebt_revets_if_more_than_block_limit", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_FA_18C_increaseDebt_revets_isIncreaseDebtForbidden_is_enabled", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_FA_19_decreaseDebt_executes_actions_as_expected", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_FA_20_decreaseDebt_revets_if_less_than_minBorrowedAmount", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_FA_21A_addCollateral_reverts_on_account_transfer_not_allowed", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_FA_21B_addCollateral_reverts_on_account_transfer_not_allowed_multicall", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_FA_21_addCollateral_executes_actions_as_expected", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_FA_22_multicall_reverts_if_calldata_length_is_less_than_4_bytes", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_FA_23_multicall_reverts_for_unknown_methods", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_FA_24_multicall_reverts_for_creditManager_address", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_FA_25_multicall_reverts_for_non_adapters", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_FA_26_multicall_addCollateral_and_increase_debt_works_with_creditFacade_calls_as_expected", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_FA_27_multicall_addCollateral_and_decreaseDebt_works_with_creditFacade_calls_as_expected", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_FA_28_multicall_reverts_for_decrease_opeartion_after_increase_one", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_FA_29_multicall_works_with_adapters_calls_as_expected", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_FA_30_approve_reverts_for_not_allowed_token_and_not_allower_contract", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_FA_31_approve_works_as_expected", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_FA_32_transferAccountOwnership_reverts_if_whitelisted_enabled", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_FA_33_transferAccountOwnership_reverts_if_to_user_doesnt_provide_allowance", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_FA_34_transferAccountOwnership_reverts_if_hf_less_1", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_FA_35_transferAccountOwnership_transfers_account_if_its_allowed", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_FA_36_checkAndUpdateBorrowedBlockLimit_doesnt_change_block_limit_if_set_to_max", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_FA_37_checkAndUpdateBorrowedBlockLimit_updates_block_limit_properly", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_FA_38_transferAccountOwnership_with_allowed_to_transfers_account", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_FA_39_enable_token_balance", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_FA_40_isTokenAllowed_works_as_expected", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_FA_41_calcTotalValue_computes_correctly", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_FA_42_calcCreditAccountHealthFactor_computes_correctly", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_FA_43_hasOpenedCreditAccount_returns_correct_values", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_FA_44_config_functions_revert_if_called_non_configurator", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_FA_45_revertIfBalanceLessThan_works_correctly", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_FA_46_openCreditAccount_reverts_on_expired_CreditFacade", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_FA_47_liquidateExpiredCreditAccount_reverts_before_expiration", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_FA_48_liquidateExpiredCreditAccount_reverts_on_CreditFacade_with_no_expiration", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_FA_49_liquidateExpiredCreditAccount_works_correctly_after_expiration", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_FA_50_upgradeableContracts_setters_and_getters_work_correctly", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_FA_51_approve_reverts_for_upgradeable_contract", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_FA_52_enableToken_works_as_expected", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_FA_53_enableToken_works_as_expected_multicall", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_FA_54_disableToken_works_as_expected_multicall", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "underlying", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x60806040526000805460ff1916600190811790915580546001600160a01b031916737109709ecfa91a80626ff3989d68f67f5b1dd12d1790553480156200004557600080fd5b506205c78380620000576000396000f3fe6080604052348015630000001257600080fd5b506004361063000005c55760003560e01c8063776e0dca11630000030d578063c12c21c01163000001a5578063e0cb9424116300000107578063f41767141163000000af578063f74ecaf1116300000090578063f74ecaf11463000009de578063f9aa028a1463000009ea578063fa7626d4146300000a0c57600080fd5b8063f41767141463000009c6578063f4a1793f1463000009d257600080fd5b8063e741c5381163000000e8578063e741c5381463000009a2578063ebb409d81463000009ae578063f30c3fbd1463000009ba57600080fd5b8063e0cb942414630000098a578063e317333b14630000099657600080fd5b8063d419535911630000016c578063da152d3211630000014d578063da152d32146300000950578063df51443314630000095c578063e0a8260f14630000097e57600080fd5b8063d4195359146300000938578063d9c2896d14630000094457600080fd5b8063c12c21c01463000008f2578063c88c25d0146300000914578063c9c31247146300000920578063cd3d6e8f14630000092c57600080fd5b80639cda589311630000026f578063b378ad76116300000217578063b83d63801163000001f8578063b83d63801463000008bc578063b92e9b331463000008c8578063ba414fa61463000008d457600080fd5b8063b378ad761463000008a4578063b7ae1d891463000008b057600080fd5b8063a15853d8116300000250578063a15853d8146300000880578063a8b22db914630000088c578063abe902e814630000089857600080fd5b80639cda5893146300000868578063a02f17a214630000087457600080fd5b80637e8d0d401163000002d45780638d5b30b81163000002b55780638d5b30b814630000083557806395d6fdd3146300000850578063985d41e214630000085c57600080fd5b80637e8d0d4014630000081d5780637f65c01714630000082957600080fd5b8063776e0dca1463000007ed5780637921d6081463000007f9578063798a7e7c1463000008055780637ad70e7914630000081157600080fd5b806330e3d886116300000482578063603769761163000003e457806367f9d16011630000038c5780637223a4f111630000036d5780637223a4f11463000007ba578063729869471463000007c6578063758ef9ea1463000007d257600080fd5b806367f9d16014630000078c5780636f307dc314630000079857600080fd5b80636446e49b1163000003c55780636446e49b146300000768578063645519ce1463000007745780636788c96c14630000078057600080fd5b80636037697614630000075057806360c0871a14630000075c57600080fd5b8063414994071163000004495780634663e7fc11630000042a5780634663e7fc14630000072c5780634a9dab911463000007385780635f19e53914630000074457600080fd5b806341499407146300000714578063454c7b6814630000072057600080fd5b806330e3d8861463000006e457806332eba4571463000006f05780633eecbb851463000006fc5780633fea1cd014630000070857600080fd5b806318f639f111630000052d578063296cf29f1163000004f45780632bd6da511163000004d55780632bd6da511463000006805780632c3f48a214630000068c5780632f7a188114630000069857600080fd5b8063296cf29f14630000066857806329bd877214630000067457600080fd5b806318f639f11463000006385780631ef8829b146300000644578063273eb96c14630000065057806327d23d7414630000065c57600080fd5b80630824106b1163000005925780630a9254e41163000005735780630a9254e4146300000614578063139b7cd3146300000620578063182e19d214630000062c57600080fd5b80630824106b1463000005fc5780630826418b14630000060857600080fd5b8062627fe21463000005ca578062d229bb1463000005d8578063023de8131463000005e45780630694abb91463000005f0575b600080fd5b63000005d66300000a1b565b005b63000005d66300001062565b63000005d66300001535565b63000005d663000022ee565b63000005d66300002623565b63000005d66300002ce3565b63000005d663000039fc565b63000005d663000041bb565b63000005d66300004378565b63000005d663000047d8565b63000005d66300005034565b63000005d663000052d3565b63000005d6630000586a565b63000005d66300005bff565b63000005d66300006170565b63000005d6630000638a565b63000005d663000066c2565b60035463000006ba9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b63000005d66300007042565b63000005d663000074ca565b63000005d6630000796d565b63000005d66300007dd1565b63000005d663000085f1565b63000005d66300009369565b63000005d66300009641565b63000005d66300009a0a565b63000005d6630000aaea565b63000005d6630000acdb565b63000005d6630000af26565b63000005d6630000b8de565b63000005d6630000baa3565b63000005d6630000bdab565b63000005d6630000cf7f565b60065463000006ba9073ffffffffffffffffffffffffffffffffffffffff1681565b63000005d6630000d15d565b63000005d6630000d382565b63000005d663000007e6366004630001a11b565b630000d489565b63000005d6630000e216565b63000005d6630000e470565b63000005d6630000e7d5565b63000005d6630000eb5f565b63000005d6630000f7ad565b63000005d6630000f919565b63000005d66300000849366004630001a167565b630000fd22565b63000005d663000104fb565b63000005d663000106b6565b63000005d66300010adb565b63000005d66300010c9b565b63000005d663000110f0565b63000005d6630001135b565b63000005d66300011469565b63000005d66300011475565b63000005d6630001181f565b63000005d66300011d66565b63000005d66300012033565b63000008e063000121c2565b604051901515815260200163000006db565b60025463000006ba9073ffffffffffffffffffffffffffffffffffffffff1681565b63000005d66300012336565b63000005d66300012a16565b63000005d66300012d23565b63000005d66300013500565b63000005d663000136d6565b63000005d66300013ee1565b60055463000006ba9073ffffffffffffffffffffffffffffffffffffffff1681565b63000005d663000142dd565b63000005d6630001449e565b63000005d663000149c0565b63000005d66300014d55565b63000005d663000155ff565b63000005d663000158a9565b63000005d66300015ca3565b63000005d66300016c80565b63000005d66300016e55565b60045463000006ba9073ffffffffffffffffffffffffffffffffffffffff1681565b60005463000008e09060ff1681565b6001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b1580156300000a9c57600080fd5b505af11580156300000ab2573d6000803e3d6000fd5b5050600480546040517ffb1bd8c400000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff29281019290925273ffffffffffffffffffffffffffffffffffffffff16925063fb1bd8c49150602401600060405180830381600087803b1580156300000b3857600080fd5b505af11580156300000b4e573d6000803e3d6000fd5b50506003546040517f79c0ef91000000000000000000000000000000000000000000000000000000008152600060048201526300000c43935073ffffffffffffffffffffffffffffffffffffffff90911691506379c0ef9190602401602060405180830381865afa1580156300000bc9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300000bf19190630001a1b5565b73c4375b7de8af5a38a93548eb8453a498222c4ff26040518060400160405280601681526020017f436f6e747261637420776173206e6f7420616464656400000000000000000000815250630001754b565b6003546040517f6d19b48600000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff260048201526300000d159173ffffffffffffffffffffffffffffffffffffffff1690636d19b48690602401602060405180830381865afa1580156300000ccb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300000cf39190630001a1ea565b6040518060600160405280602d8152602001630005c6a3602d913963000175c9565b600354604080517f9be0536a00000000000000000000000000000000000000000000000000000000815290516300000e2b9273ffffffffffffffffffffffffffffffffffffffff1691639be0536a9160048083019260009291908290030181865afa1580156300000d8a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526300000dd49190810190630001a28f565b6000815181106300000dec576300000dec630001a35b565b602002602001015173c4375b7de8af5a38a93548eb8453a498222c4ff2604051806060016040528060278152602001630005c5b760279139630001754b565b6001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b1580156300000eac57600080fd5b505af11580156300000ec2573d6000803e3d6000fd5b5050600480546040517fe6492d7b00000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff29281019290925273ffffffffffffffffffffffffffffffffffffffff16925063e6492d7b9150602401600060405180830381600087803b1580156300000f4857600080fd5b505af11580156300000f5e573d6000803e3d6000fd5b505050506300001060600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639be0536a6040518163ffffffff1660e01b8152600401600060405180830381865afa1580156300000fd6573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405263000010209190810190630001a28f565b5160006040518060400160405280601881526020017f436f6e747261637420776173206e6f742072656d6f76656400000000000000008152506300017618565b565b600354604080517f860aefcf0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff9091169263860aefcf92600480830193928290030181865afa15801563000010d4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000010fc9190630001a3ac565b6001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fce16799400000000000000000000000000000000000000000000000000000000600482015292945090925073ffffffffffffffffffffffffffffffffffffffff169063c31eb0e090602401600060405180830381600087803b158015630000118d57600080fd5b505af115801563000011a3573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b158015630000122857600080fd5b505af1158015630000123e573d6000803e3d6000fd5b505060035473ffffffffffffffffffffffffffffffffffffffff169150636c8f225d90506300001271600185630001a418565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526fffffffffffffffffffffffffffffffff909116600482015273f39fd6e51aad88f6f4ce6ab8827279cfffb922666024820152606460448201819052600090820152608401600060405180830381600087803b15801563000012fe57600080fd5b505af11580156300001314573d6000803e3d6000fd5b50506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fce16799400000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff909116925063c31eb0e09150602401600060405180830381600087803b15801563000013a557600080fd5b505af115801563000013bb573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b158015630000144057600080fd5b505af11580156300001456573d6000803e3d6000fd5b505060035473ffffffffffffffffffffffffffffffffffffffff169150636c8f225d90506300001489836001630001a44f565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526fffffffffffffffffffffffffffffffff909116600482015273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660248201526064604482018190526000908201526084015b600060405180830381600087803b158015630000151757600080fd5b505af1158015630000152d573d6000803e3d6000fd5b505050505050565b60006300001543630001766a565b50600080546040517f67b4264500000000000000000000000000000000000000000000000000000000815292935090916201000090910473ffffffffffffffffffffffffffffffffffffffff16906367b426459063000015aa90600290600401630001a4d2565b602060405180830381865afa15801563000015c9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000015f19190630001a1b5565b6000546040517feebab8ef00000000000000000000000000000000000000000000000000000000815291925062010000900473ffffffffffffffffffffffffffffffffffffffff169063eebab8ef90630000166f9060029073f39fd6e51aad88f6f4ce6ab8827279cfffb9226690633b9aca0090600401630001a4e4565b600060405180830381600087803b158015630000168b57600080fd5b505af115801563000016a1573d6000803e3d6000fd5b5050600054600280546040517f88f776a200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff62010000909404841695506388f776a29450630000171f9373f39fd6e51aad88f6f4ce6ab8827279cfffb92266921690600401630001a51d565b600060405180830381600087803b158015630000173b57600080fd5b505af11580156300001751573d6000803e3d6000fd5b50506001546002546003546040805173f39fd6e51aad88f6f4ce6ab8827279cfffb92266602482015273ffffffffffffffffffffffffffffffffffffffff92831660448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe1998cf90000000000000000000000000000000000000000000000000000000017905290517fbd6af434000000000000000000000000000000000000000000000000000000008152938216955063bd6af4349450630000183b93919092169190600401630001a5dd565b600060405180830381600087803b158015630000185757600080fd5b505af1158015630000186d573d6000803e3d6000fd5b5050600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526024810183905260006044820152606481019290925273ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b15801563000018f457600080fd5b505af1158015630000190a573d6000803e3d6000fd5b505060405173f39fd6e51aad88f6f4ce6ab8827279cfffb9226692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a26001546002546040805173f39fd6e51aad88f6f4ce6ab8827279cfffb92266602482015273ffffffffffffffffffffffffffffffffffffffff86811660448301528581166064830152633b9aca006084808401919091528351808403909101815260a490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f830aa7450000000000000000000000000000000000000000000000000000000017905291517fbd6af4340000000000000000000000000000000000000000000000000000000081529382169363bd6af434936300001a3f93169190600401630001a5dd565b600060405180830381600087803b1580156300001a5b57600080fd5b505af11580156300001a71573d6000803e3d6000fd5b5050600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526024810183905260006044820152606481019290925273ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b1580156300001af857600080fd5b505af11580156300001b0e573d6000803e3d6000fd5b5050604051633b9aca00815273ffffffffffffffffffffffffffffffffffffffff8416925073f39fd6e51aad88f6f4ce6ab8827279cfffb9226691507fa32435755c235de2976ed44a75a2f85cb01faf0c894f639fe0c32bb9455fea8f9060200160405180910390a3600180546002546040805173ffffffffffffffffffffffffffffffffffffffff8781166024830152610100604483015260648083019690965282518083039096018652608490910182526020850180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f94cf073a0000000000000000000000000000000000000000000000000000000017905290517fbd6af4340000000000000000000000000000000000000000000000000000000081529281169363bd6af434936300001c4d939290921691600401630001a5dd565b600060405180830381600087803b1580156300001c6957600080fd5b505af11580156300001c7f573d6000803e3d6000fd5b5050600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526000602482018190526044820152606481019290925273ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b1580156300001d0657600080fd5b505af11580156300001d1c573d6000803e3d6000fd5b5050604051610100815273f39fd6e51aad88f6f4ce6ab8827279cfffb9226692507f9cac51154cc0d835e2f9c9d1f59a9344588cee107f4203bf58a8c797e3a58c45915060200160405180910390a2600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600060048201819052602482018190526044820152606481019290925273ffffffffffffffffffffffffffffffffffffffff169063491cc7c290608401600060405180830381600087803b1580156300001dee57600080fd5b505af11580156300001e04573d6000803e3d6000fd5b50506040517f60c8e8938c9a0c0d88a98d6f1c562ce68077e12bf3edb8047378f2f736cb45b4925060009150a16001546002546003546040805173ffffffffffffffffffffffffffffffffffffffff928316602482015273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe1998cf90000000000000000000000000000000000000000000000000000000017905290517fbd6af4340000000000000000000000000000000000000000000000000000000081529382169363bd6af434936300001f1493169190600401630001a5dd565b600060405180830381600087803b1580156300001f3057600080fd5b505af11580156300001f46573d6000803e3d6000fd5b50506001546002546040805173ffffffffffffffffffffffffffffffffffffffff88811660248084019190915283518084039091018152604490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f953730180000000000000000000000000000000000000000000000000000000017905291517fbd6af434000000000000000000000000000000000000000000000000000000008152938216955063bd6af4349450630000201393919092169190600401630001a5dd565b600060405180830381600087803b158015630000202f57600080fd5b505af11580156300002045573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b15801563000020ca57600080fd5b505af115801563000020e0573d6000803e3d6000fd5b505060035460408051808201825273ffffffffffffffffffffffffffffffffffffffff928316808252915173f39fd6e51aad88f6f4ce6ab8827279cfffb9226660248201529286166044840152633b9aca00606484015290935063caa5c23f925063000022ce9160208201907f597810340000000000000000000000000000000000000000000000000000000090608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000959095169490941790935292528151808301835260035473ffffffffffffffffffffffffffffffffffffffff16815291516101006024820152908201907f2b7c7b1100000000000000000000000000000000000000000000000000000000906044015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290526300017a60565b6040518263ffffffff1660e01b815260040163000014fb9190630001a69f565b63000022fa630001766a565b50506001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527390f79bf6eb2c4f870365e785982e1f101e93b906600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b158015630000237d57600080fd5b505af11580156300002393573d6000803e3d6000fd5b50506003546040517e842b5700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660048201526001602482015273ffffffffffffffffffffffffffffffffffffffff909116925062842b579150604401600060405180830381600087803b158015630000241d57600080fd5b505af11580156300002433573d6000803e3d6000fd5b5050505063000024436300017af2565b6001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527ff713841e00000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063c31eb0e090602401600060405180830381600087803b15801563000024d057600080fd5b505af115801563000024e6573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b158015630000256b57600080fd5b505af11580156300002581573d6000803e3d6000fd5b50506003546040517f5019e20a0000000000000000000000000000000000000000000000000000000081527390f79bf6eb2c4f870365e785982e1f101e93b906600482015273ffffffffffffffffffffffffffffffffffffffff9091169250635019e20a91506024015b600060405180830381600087803b158015630000260757600080fd5b505af1158015630000261d573d6000803e3d6000fd5b50505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637785ff5d6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015630000268f57600080fd5b505af115801563000026a5573d6000803e3d6000fd5b50505050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156300002718573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000027409190630001a1b5565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169182179055604080517f9408b63f000000000000000000000000000000000000000000000000000000008152905160009291639408b63f9160048083019260209291908290030181865afa15801563000027dd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000028059190630001a1b5565b6001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291925073ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b158015630000288757600080fd5b505af1158015630000289d573d6000803e3d6000fd5b50506040517f40c10f1900000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660048201526002602482015273ffffffffffffffffffffffffffffffffffffffff841692506340c10f199150604401600060405180830381600087803b158015630000292557600080fd5b505af1158015630000293b573d6000803e3d6000fd5b5050505063000029638173f39fd6e51aad88f6f4ce6ab8827279cfffb9226660026300017c84565b630000296f630001766a565b505063000029958173f39fd6e51aad88f6f4ce6ab8827279cfffb9226660016300017c84565b63000029a16300017ca3565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1663eebab8ef600173f39fd6e51aad88f6f4ce6ab8827279cfffb9226663000029f4670de0b6b3a7640000614e20630001a6b6565b6040518463ffffffff1660e01b81526004016300002a1693929190630001a4e4565b600060405180830381600087803b1580156300002a3257600080fd5b505af11580156300002a48573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b1580156300002acd57600080fd5b505af11580156300002ae3573d6000803e3d6000fd5b505060035473ffffffffffffffffffffffffffffffffffffffff169150637071b7c590506300002b1f670de0b6b3a7640000614e20630001a6b6565b6040805180820190915260035473ffffffffffffffffffffffffffffffffffffffff908116825260065473f39fd6e51aad88f6f4ce6ab8827279cfffb92266926300002c6192909160208301917f5978103400000000000000000000000000000000000000000000000000000000918691166300002ba9670de0b6b3a7640000614e20630001a6b6565b60405173ffffffffffffffffffffffffffffffffffffffff938416602482015292909116604483015260648201526084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290526300017e3e565b60006040518563ffffffff1660e01b81526004016300002c869493929190630001a6f9565b600060405180830381600087803b1580156300002ca257600080fd5b505af11580156300002cb8573d6000803e3d6000fd5b505050506300002ce08173f39fd6e51aad88f6f4ce6ab8827279cfffb9226660006300017c84565b50565b60006300002cf1630001766a565b50600080546040517f67b4264500000000000000000000000000000000000000000000000000000000815292935090916201000090910473ffffffffffffffffffffffffffffffffffffffff16906367b42645906300002d5890600290600401630001a4d2565b602060405180830381865afa1580156300002d77573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300002d9f9190630001a1b5565b6000546040517feebab8ef00000000000000000000000000000000000000000000000000000000815291925062010000900473ffffffffffffffffffffffffffffffffffffffff169063eebab8ef906300002e1d9060029073f39fd6e51aad88f6f4ce6ab8827279cfffb9226690633b9aca0090600401630001a4e4565b600060405180830381600087803b1580156300002e3957600080fd5b505af11580156300002e4f573d6000803e3d6000fd5b5050600054600280546040517f88f776a200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff62010000909404841695506388f776a294506300002ecd9373f39fd6e51aad88f6f4ce6ab8827279cfffb92266921690600401630001a51d565b600060405180830381600087803b1580156300002ee957600080fd5b505af11580156300002eff573d6000803e3d6000fd5b50506001546002546003546040805173f39fd6e51aad88f6f4ce6ab8827279cfffb92266602482015273ffffffffffffffffffffffffffffffffffffffff92831660448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe1998cf90000000000000000000000000000000000000000000000000000000017905290517fbd6af434000000000000000000000000000000000000000000000000000000008152938216955063bd6af43494506300002fe993919092169190600401630001a5dd565b600060405180830381600087803b158015630000300557600080fd5b505af1158015630000301b573d6000803e3d6000fd5b5050600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526024810183905260006044820152606481019290925273ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b15801563000030a257600080fd5b505af115801563000030b8573d6000803e3d6000fd5b505060405173f39fd6e51aad88f6f4ce6ab8827279cfffb9226692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a26001546002546040805173f39fd6e51aad88f6f4ce6ab8827279cfffb92266602482015273ffffffffffffffffffffffffffffffffffffffff86811660448301528581166064830152633b9aca006084808401919091528351808403909101815260a490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f830aa7450000000000000000000000000000000000000000000000000000000017905291517fbd6af4340000000000000000000000000000000000000000000000000000000081529382169363bd6af4349363000031ed93169190600401630001a5dd565b600060405180830381600087803b158015630000320957600080fd5b505af1158015630000321f573d6000803e3d6000fd5b5050600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526024810183905260006044820152606481019290925273ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b15801563000032a657600080fd5b505af115801563000032bc573d6000803e3d6000fd5b5050604051633b9aca00815273ffffffffffffffffffffffffffffffffffffffff8416925073f39fd6e51aad88f6f4ce6ab8827279cfffb9226691507fa32435755c235de2976ed44a75a2f85cb01faf0c894f639fe0c32bb9455fea8f9060200160405180910390a36001546002546040805173ffffffffffffffffffffffffffffffffffffffff86811660248301526101006044830152600060648084019190915283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f94cf073a0000000000000000000000000000000000000000000000000000000017905291517fbd6af4340000000000000000000000000000000000000000000000000000000081529382169363bd6af4349363000033fa93169190600401630001a5dd565b600060405180830381600087803b158015630000341657600080fd5b505af1158015630000342c573d6000803e3d6000fd5b5050600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526000602482018190526044820152606481019290925273ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b15801563000034b357600080fd5b505af115801563000034c9573d6000803e3d6000fd5b5050604051610100815273f39fd6e51aad88f6f4ce6ab8827279cfffb9226692507f98274bf834d179ee08dc0604071b0dc90b54731bd5f725a5a96a39a86bce025a915060200160405180910390a2600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600060048201819052602482018190526044820152606481019290925273ffffffffffffffffffffffffffffffffffffffff169063491cc7c290608401600060405180830381600087803b158015630000359b57600080fd5b505af115801563000035b1573d6000803e3d6000fd5b50506040517f60c8e8938c9a0c0d88a98d6f1c562ce68077e12bf3edb8047378f2f736cb45b4925060009150a16001546002546003546040805173ffffffffffffffffffffffffffffffffffffffff928316602482015273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe1998cf90000000000000000000000000000000000000000000000000000000017905290517fbd6af4340000000000000000000000000000000000000000000000000000000081529382169363bd6af4349363000036c193169190600401630001a5dd565b600060405180830381600087803b15801563000036dd57600080fd5b505af115801563000036f3573d6000803e3d6000fd5b50506001546002546040805173ffffffffffffffffffffffffffffffffffffffff88811660248084019190915283518084039091018152604490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f953730180000000000000000000000000000000000000000000000000000000017905291517fbd6af434000000000000000000000000000000000000000000000000000000008152938216955063bd6af434945063000037c093919092169190600401630001a5dd565b600060405180830381600087803b15801563000037dc57600080fd5b505af115801563000037f2573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b158015630000387757600080fd5b505af1158015630000388d573d6000803e3d6000fd5b505060035460408051808201825273ffffffffffffffffffffffffffffffffffffffff928316808252915173f39fd6e51aad88f6f4ce6ab8827279cfffb9226660248201529286166044840152633b9aca00606484015290935063caa5c23f925063000022ce9160208201907f5978103400000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000959095169490941790935292528151808301835260035473ffffffffffffffffffffffffffffffffffffffff16815291516101006024820152908201907f2a7ba1f700000000000000000000000000000000000000000000000000000000906044016300002248565b6040516300003a0c90630001a0cf565b604051809103906000f0801580156300003a2a573d6000803e3d6000fd5b50600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff166201000073ffffffffffffffffffffffffffffffffffffffff9384168102919091179182905590041663b36ba2086300003a96670de0b6b3a76400006064630001a6b6565b6040518263ffffffff1660e01b81526004016000604051808303818588803b1580156300003ac357600080fd5b505af11580156300003ad9573d6000803e3d6000fd5b5050505050600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016040516300003b1390630001a0de565b6300003b22929190630001a747565b604051809103906000f0801580156300003b40573d6000803e3d6000fd5b50600580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283161790556000546040517f67b4264500000000000000000000000000000000000000000000000000000000815262010000909104909116906367b42645906300003bcf90600190600401630001a4d2565b602060405180830381865afa1580156300003bee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300003c169190630001a1b5565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600554604080517fc12c21c00000000000000000000000000000000000000000000000000000000081529051919092169163c12c21c09160048083019260209291908290030181865afa1580156300003cb4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300003cdc9190630001a1b5565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600554604080517f2f7a188100000000000000000000000000000000000000000000000000000000815290519190921691632f7a18819160048083019260209291908290030181865afa1580156300003d7a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300003da29190630001a1b5565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600554604080517ff9aa028a0000000000000000000000000000000000000000000000000000000081529051919092169163f9aa028a9160048083019260209291908290030181865afa1580156300003e40573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300003e689190630001a1b5565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316178155600554604080517f5e813a8b00000000000000000000000000000000000000000000000000000000815290519190931692635e813a8b92818101926020929091908290030181865afa1580156300003f05573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300003f2d9190630001a1b5565b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169190911790556040516300003f8290630001a0ee565b604051809103906000f0801580156300003fa0573d6000803e3d6000fd5b50600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283169081179091556002546040519216916300003ffb90630001a0fd565b73ffffffffffffffffffffffffffffffffffffffff928316815291166020820152604001604051809103906000f080158015630000403d573d6000803e3d6000fd5b50600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316908117909155600154604080517fc657c71800000000000000000000000000000000000000000000000000000000815260048101939093526024830152600b60448301527f416461707465724d6f636b00000000000000000000000000000000000000000060648301529091169063c657c71890608401600060405180830381600087803b158015630000410f57600080fd5b505af11580156300004125573d6000803e3d6000fd5b5050600154600854604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152601260448201527f546172676574436f6e74726163744d6f636b000000000000000000000000000060648201529116925063c657c718915060840163000025eb565b63000041c7630001766a565b50506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f85b0772600000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063c31eb0e0906024015b600060405180830381600087803b158015630000425757600080fd5b505af1158015630000426d573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b15801563000042f257600080fd5b505af11580156300004308573d6000803e3d6000fd5b50506003546040517f5019e20a00000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff2600482015273ffffffffffffffffffffffffffffffffffffffff9091169250635019e20a915060240163000025eb565b600354604080517f860aefcf000000000000000000000000000000000000000000000000000000008152815160009373ffffffffffffffffffffffffffffffffffffffff169263860aefcf92600480820193918290030181865afa15801563000043e6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000440e9190630001a3ac565b506001546040517f06447d5600000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660048201526fffffffffffffffffffffffffffffffff92909216925073ffffffffffffffffffffffffffffffffffffffff16906306447d5690602401600060405180830381600087803b15801563000044a557600080fd5b505af115801563000044bb573d6000803e3d6000fd5b50506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f85b0772600000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff909116925063c31eb0e09150602401600060405180830381600087803b158015630000454c57600080fd5b505af11580156300004562573d6000803e3d6000fd5b50506003546040517f6c8f225d000000000000000000000000000000000000000000000000000000008152600481018590527390f79bf6eb2c4f870365e785982e1f101e93b906602482015260646044820181905260009082015273ffffffffffffffffffffffffffffffffffffffff9091169250636c8f225d9150608401600060405180830381600087803b15801563000045fd57600080fd5b505af11580156300004613573d6000803e3d6000fd5b50506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f85b077260000000000000000000000000000000000000000000000000000000060048201526060935073ffffffffffffffffffffffffffffffffffffffff909116915063c31eb0e090602401600060405180830381600087803b15801563000046a757600080fd5b505af115801563000046bd573d6000803e3d6000fd5b50506003546040517f7071b7c500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169250637071b7c5915063000047369085907390f79bf6eb2c4f870365e785982e1f101e93b906908690600090600401630001a6f9565b600060405180830381600087803b158015630000475257600080fd5b505af11580156300004768573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015630000151757600080fd5b600754604080517f8f7dcfa3000000000000000000000000000000000000000000000000000000008152905161012c9260009273ffffffffffffffffffffffffffffffffffffffff90911691638f7dcfa3916004808201926020929091908290030181865afa1580156300004851573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000048799190630001a1b5565b6001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527390f79bf6eb2c4f870365e785982e1f101e93b906600482015291925073ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b15801563000048fb57600080fd5b505af11580156300004911573d6000803e3d6000fd5b50506003546040517e842b5700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660048201526001602482015273ffffffffffffffffffffffffffffffffffffffff909116925062842b579150604401600060405180830381600087803b158015630000499b57600080fd5b505af115801563000049b1573d6000803e3d6000fd5b505060015460025473ffffffffffffffffffffffffffffffffffffffff918216935063bd6af434925016606461ffff861663000049fa670de0b6b3a7640000614e20630001a6b6565b6300004a089190630001a6b6565b6300004a169190630001a775565b60405160248101919091527390f79bf6eb2c4f870365e785982e1f101e93b9066044820152606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fe3f93f000000000000000000000000000000000000000000000000000000001790525160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526300004af0929190600401630001a5dd565b600060405180830381600087803b1580156300004b0c57600080fd5b505af11580156300004b22573d6000803e3d6000fd5b5050600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526024810183905260006044820152606481019290925273ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b1580156300004ba957600080fd5b505af11580156300004bbf573d6000803e3d6000fd5b50505073ffffffffffffffffffffffffffffffffffffffff821690507390f79bf6eb2c4f870365e785982e1f101e93b9067ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a763606461ffff86166300004c30670de0b6b3a7640000614e20630001a6b6565b6300004c3e9190630001a6b6565b6300004c4c9190630001a775565b60408051918252601760208301520160405180910390a360015460025460065473ffffffffffffffffffffffffffffffffffffffff9283169263bd6af4349281169173f39fd6e51aad88f6f4ce6ab8827279cfffb92266918691166300004cbf670de0b6b3a7640000614e20630001a6b6565b60405173ffffffffffffffffffffffffffffffffffffffff9485166024820152928416604484015292166064820152608481019190915260a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f830aa745000000000000000000000000000000000000000000000000000000001790525160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526300004dab929190600401630001a5dd565b600060405180830381600087803b1580156300004dc757600080fd5b505af11580156300004ddd573d6000803e3d6000fd5b5050600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526024810183905260006044820152606481019290925273ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b1580156300004e6457600080fd5b505af11580156300004e7a573d6000803e3d6000fd5b505060065473ffffffffffffffffffffffffffffffffffffffff1691507390f79bf6eb2c4f870365e785982e1f101e93b90690507fa32435755c235de2976ed44a75a2f85cb01faf0c894f639fe0c32bb9455fea8f6300004ee7670de0b6b3a7640000614e20630001a6b6565b60405190815260200160405180910390a36001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b1580156300004f7957600080fd5b505af11580156300004f8f573d6000803e3d6000fd5b505060035473ffffffffffffffffffffffffffffffffffffffff169150636c8f225d90506300004fcb670de0b6b3a7640000614e20630001a6b6565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815260048101919091527390f79bf6eb2c4f870365e785982e1f101e93b906602482015261ffff851660448201526017606482015260840163000014fb565b6300005040630001766a565b505060405160206024820152600560448201527f776f726c640000000000000000000000000000000000000000000000000000006064820152600090608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa777d0dc0000000000000000000000000000000000000000000000000000000017905260015490517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f1e9e7e7a00000000000000000000000000000000000000000000000000000000600482015291925073ffffffffffffffffffffffffffffffffffffffff169063c31eb0e090602401600060405180830381600087803b158015630000518257600080fd5b505af11580156300005198573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b158015630000521d57600080fd5b505af11580156300005233573d6000803e3d6000fd5b50506003546040805180820190915273ffffffffffffffffffffffffffffffffffffffff90911680825260208201859052925063caa5c23f9150630000527a906300017e3e565b6040518263ffffffff1660e01b8152600401630000529a9190630001a69f565b600060405180830381600087803b15801563000052b657600080fd5b505af115801563000052cc573d6000803e3d6000fd5b5050505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166354cae56e6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015630000533f57600080fd5b505af11580156300005355573d6000803e3d6000fd5b50505050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa15801563000053c8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000053f09190630001a1b5565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600180549091169063e5d6bf0290630000544e904290630001a7b2565b6040518263ffffffff1660e01b8152600401630000546e91815260200190565b600060405180830381600087803b158015630000548a57600080fd5b505af115801563000054a0573d6000803e3d6000fd5b50506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f63fc31c100000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff909116925063c31eb0e09150602401600060405180830381600087803b158015630000553157600080fd5b505af11580156300005547573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b15801563000055cc57600080fd5b505af115801563000055e2573d6000803e3d6000fd5b505060035473ffffffffffffffffffffffffffffffffffffffff169150636c8f225d9050630000561e670de0b6b3a7640000614e20630001a6b6565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b168152600481019190915273f39fd6e51aad88f6f4ce6ab8827279cfffb922666024820152606460448201819052600090820152608401600060405180830381600087803b158015630000569a57600080fd5b505af115801563000056b0573d6000803e3d6000fd5b50506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f63fc31c100000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff909116925063c31eb0e09150602401600060405180830381600087803b158015630000574157600080fd5b505af11580156300005757573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b15801563000057dc57600080fd5b505af115801563000057f2573d6000803e3d6000fd5b505060035473ffffffffffffffffffffffffffffffffffffffff169150637071b7c59050630000582e670de0b6b3a7640000614e20630001a6b6565b73f39fd6e51aad88f6f4ce6ab8827279cfffb92266606060006040518563ffffffff1660e01b815260040163000025eb9493929190630001a6f9565b6300005876630001766a565b5050600354604080517f860aefcf000000000000000000000000000000000000000000000000000000008152815160009373ffffffffffffffffffffffffffffffffffffffff169263860aefcf92600480820193918290030181865afa15801563000058e6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000590e9190630001a3ac565b915060009050630000592c670de0b6b3a7640000614e20630001a6b6565b630000594c906fffffffffffffffffffffffffffffffff8416630001a7d0565b630000595b906001630001a7b2565b600054600554604080517f6b70b04c000000000000000000000000000000000000000000000000000000008152905193945073ffffffffffffffffffffffffffffffffffffffff6201000090930483169363eebab8ef936001931691636b70b04c9160048083019260209291908290030181865afa15801563000059e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300005a0b9190630001a1b5565b846040518463ffffffff1660e01b81526004016300005a2e93929190630001a4e4565b600060405180830381600087803b1580156300005a4a57600080fd5b505af11580156300005a60573d6000803e3d6000fd5b50506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fce16799400000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff909116925063c31eb0e09150602401600060405180830381600087803b1580156300005af157600080fd5b505af11580156300005b07573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b1580156300005b8c57600080fd5b505af11580156300005ba2573d6000803e3d6000fd5b50506003546040517f2b7c7b110000000000000000000000000000000000000000000000000000000081526004810185905273ffffffffffffffffffffffffffffffffffffffff9091169250632b7c7b11915060240163000014fb565b60006300005c0d630001766a565b506001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527390f79bf6eb2c4f870365e785982e1f101e93b906600482015291925073ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b1580156300005c9057600080fd5b505af11580156300005ca6573d6000803e3d6000fd5b50506003546040517e842b5700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660048201526001602482015273ffffffffffffffffffffffffffffffffffffffff909116925062842b579150604401600060405180830381600087803b1580156300005d3057600080fd5b505af11580156300005d46573d6000803e3d6000fd5b50506001546002546040805173f39fd6e51aad88f6f4ce6ab8827279cfffb9226660248201527390f79bf6eb2c4f870365e785982e1f101e93b90660448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe1998cf90000000000000000000000000000000000000000000000000000000017905290517fbd6af43400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff938416955063bd6af43494506300005e3d9390921691600401630001a5dd565b600060405180830381600087803b1580156300005e5957600080fd5b505af11580156300005e6f573d6000803e3d6000fd5b5050600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526024810192909252600060448301819052606483015273ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b1580156300005ef657600080fd5b505af11580156300005f0c573d6000803e3d6000fd5b50506040517390f79bf6eb2c4f870365e785982e1f101e93b906925073f39fd6e51aad88f6f4ce6ab8827279cfffb9226691507f93c70cc9715bef0d83edf2095f3595402279d274f402a73ffc17f1bcb19d863d90600090a36001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b1580156300005fe657600080fd5b505af11580156300005ffc573d6000803e3d6000fd5b50506003546040517f5019e20a0000000000000000000000000000000000000000000000000000000081527390f79bf6eb2c4f870365e785982e1f101e93b906600482015273ffffffffffffffffffffffffffffffffffffffff9091169250635019e20a9150602401600060405180830381600087803b158015630000608157600080fd5b505af11580156300006097573d6000803e3d6000fd5b50506002546040517fe958b7040000000000000000000000000000000000000000000000000000000081527390f79bf6eb2c4f870365e785982e1f101e93b90660048201526300002ce0935073ffffffffffffffffffffffffffffffffffffffff909116915063e958b70490602401602060405180830381865afa1580156300006125573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000614d9190630001a1b5565b826040518060600160405280602b8152602001630005c58c602b9139630001754b565b6001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fc0b0caa800000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063c31eb0e090602401600060405180830381600087803b15801563000061fd57600080fd5b505af11580156300006213573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b158015630000629857600080fd5b505af115801563000062ae573d6000803e3d6000fd5b505060035473ffffffffffffffffffffffffffffffffffffffff169150637071b7c5905063000062ea670de0b6b3a7640000614e20630001a6b6565b60408051808201825260035473ffffffffffffffffffffffffffffffffffffffff168152905161032c602482015273f39fd6e51aad88f6f4ce6ab8827279cfffb922669163000063659160208201907f2a7ba1f700000000000000000000000000000000000000000000000000000000906044016300002bdb565b60176040518563ffffffff1660e01b815260040163000025eb9493929190630001a6f9565b6300006396630001766a565b505063000063b973f39fd6e51aad88f6f4ce6ab8827279cfffb922666300017eab565b6000546040517feebab8ef0000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff169063eebab8ef9063000064399060019073f39fd6e51aad88f6f4ce6ab8827279cfffb9226690670de0b6b3a764000090600401630001a4e4565b600060405180830381600087803b158015630000645557600080fd5b505af1158015630000646b573d6000803e3d6000fd5b50506000546002546040517f88f776a200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff62010000909304831694506388f776a2935063000064ec9260019273f39fd6e51aad88f6f4ce6ab8827279cfffb9226692911690600401630001a51d565b600060405180830381600087803b158015630000650857600080fd5b505af1158015630000651e573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b15801563000065a357600080fd5b505af115801563000065b9573d6000803e3d6000fd5b505060035473ffffffffffffffffffffffffffffffffffffffff1691506359781034905063000065f4670de0b6b3a76400006005630001a6b6565b60065460405160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091166024820152670de0b6b3a764000060448201526064016000604051808303818588803b158015630000668657600080fd5b505af1158015630000669c573d6000803e3d6000fd5b5050505050630000106073f39fd6e51aad88f6f4ce6ab8827279cfffb9226663000182f1565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637785ff5d6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015630000672e57600080fd5b505af11580156300006744573d6000803e3d6000fd5b50505050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa15801563000067b7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000067df9190630001a1b5565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169182179055604080517f860aefcf00000000000000000000000000000000000000000000000000000000815281516000939263860aefcf92600480820193918290030181865afa1580156300006878573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000068a09190630001a3ac565b506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f5aa667670000000000000000000000000000000000000000000000000000000060048201526fffffffffffffffffffffffffffffffff92909216925073ffffffffffffffffffffffffffffffffffffffff169063c31eb0e090602401600060405180830381600087803b158015630000694357600080fd5b505af11580156300006959573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b15801563000069de57600080fd5b505af115801563000069f4573d6000803e3d6000fd5b50506003546040517f6c8f225d000000000000000000000000000000000000000000000000000000008152600481018590527390f79bf6eb2c4f870365e785982e1f101e93b906602482015260646044820181905260009082015273ffffffffffffffffffffffffffffffffffffffff9091169250636c8f225d9150608401600060405180830381600087803b1580156300006a8f57600080fd5b505af11580156300006aa5573d6000803e3d6000fd5b50506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f90c9142d00000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff909116925063c31eb0e09150602401600060405180830381600087803b1580156300006b3657600080fd5b505af11580156300006b4c573d6000803e3d6000fd5b50506001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527390f79bf6eb2c4f870365e785982e1f101e93b906600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b1580156300006bd157600080fd5b505af11580156300006be7573d6000803e3d6000fd5b50506003546040517f6c8f225d000000000000000000000000000000000000000000000000000000008152600481018590527390f79bf6eb2c4f870365e785982e1f101e93b906602482015260646044820181905260009082015273ffffffffffffffffffffffffffffffffffffffff9091169250636c8f225d9150608401600060405180830381600087803b1580156300006c8257600080fd5b505af11580156300006c98573d6000803e3d6000fd5b50506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f5aa6676700000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff909116925063c31eb0e09150602401600060405180830381600087803b1580156300006d2957600080fd5b505af11580156300006d3f573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b1580156300006dc457600080fd5b505af11580156300006dda573d6000803e3d6000fd5b50506003546040517f7071b7c500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169250637071b7c591506300006e549084907390f79bf6eb2c4f870365e785982e1f101e93b90690606090600090600401630001a6f9565b600060405180830381600087803b1580156300006e7057600080fd5b505af11580156300006e86573d6000803e3d6000fd5b50506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f90c9142d00000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff909116925063c31eb0e09150602401600060405180830381600087803b1580156300006f1757600080fd5b505af11580156300006f2d573d6000803e3d6000fd5b50506001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527390f79bf6eb2c4f870365e785982e1f101e93b906600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b1580156300006fb257600080fd5b505af11580156300006fc8573d6000803e3d6000fd5b50506003546040517f7071b7c500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169250637071b7c59150630000529a9084907390f79bf6eb2c4f870365e785982e1f101e93b90690606090600090600401630001a6f9565b60006300007050630001766a565b506001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291925073ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b15801563000070d357600080fd5b505af115801563000070e9573d6000803e3d6000fd5b5050600480546008546009546040517f7bccacee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283169481019490945281166024840152169250637bccacee9150604401600060405180830381600087803b158015630000716a57600080fd5b505af11580156300007180573d6000803e3d6000fd5b5050600080546040517f67b4264500000000000000000000000000000000000000000000000000000000815291935062010000900473ffffffffffffffffffffffffffffffffffffffff1691506367b426459063000071e690600290600401630001a4d2565b602060405180830381865afa1580156300007205573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000722d9190630001a1b5565b6001546002546008546040805173f39fd6e51aad88f6f4ce6ab8827279cfffb92266602482015273ffffffffffffffffffffffffffffffffffffffff92831660448201528583166064820152633b9aca006084808301919091528251808303909101815260a490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f46fb371d0000000000000000000000000000000000000000000000000000000017905290517fbd6af4340000000000000000000000000000000000000000000000000000000081529495509281169363bd6af43493630000732893929092169190600401630001a5dd565b600060405180830381600087803b158015630000734457600080fd5b505af1158015630000735a573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b15801563000073df57600080fd5b505af115801563000073f5573d6000803e3d6000fd5b50506003546008546040517fe1f21c6700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201528582166024820152633b9aca0060448201529116925063e1f21c679150606401600060405180830381600087803b158015630000747c57600080fd5b505af11580156300007492573d6000803e3d6000fd5b505060085463000074c6925060029150849073ffffffffffffffffffffffffffffffffffffffff16633b9aca006300018326565b5050565b600063000074d8630001766a565b506001805491925073ffffffffffffffffffffffffffffffffffffffff90911690631f7b4f3090630000750e904390630001a7b2565b6040518263ffffffff1660e01b8152600401630000752e91815260200190565b600060405180830381600087803b158015630000754a57600080fd5b505af11580156300007560573d6000803e3d6000fd5b50506000546040517f883278630000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff169250638eb86e8b91506001908490849063883278639063000075d29085908590600401630001a7ed565b602060405180830381865afa15801563000075f1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000076199190630001a822565b6040518463ffffffff1660e01b8152600401630000763b93929190630001a4e4565b600060405180830381600087803b158015630000765757600080fd5b505af1158015630000766d573d6000803e3d6000fd5b505050506300007692733c44cdddb6a900fa2b585dd299e03d12fa4293bc6300017eab565b6000546002546040517f88f776a200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff620100009093048316926388f776a292630000770e92600192733c44cdddb6a900fa2b585dd299e03d12fa4293bc921690600401630001a51d565b600060405180830381600087803b158015630000772a57600080fd5b505af11580156300007740573d6000803e3d6000fd5b505060005462010000900473ffffffffffffffffffffffffffffffffffffffff16915063eebab8ef90506001733c44cdddb6a900fa2b585dd299e03d12fa4293bc6300007799670de0b6b3a7640000614e20630001a6b6565b6040518463ffffffff1660e01b815260040163000077bb93929190630001a4e4565b600060405180830381600087803b15801563000077d757600080fd5b505af115801563000077ed573d6000803e3d6000fd5b50506001546040517fca669fa7000000000000000000000000000000000000000000000000000000008152733c44cdddb6a900fa2b585dd299e03d12fa4293bc600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b158015630000787257600080fd5b505af11580156300007888573d6000803e3d6000fd5b505060035473ffffffffffffffffffffffffffffffffffffffff169150635d91a0e0905063000078c3670de0b6b3a76400006005630001a6b6565b73f39fd6e51aad88f6f4ce6ab8827279cfffb92266733c44cdddb6a900fa2b585dd299e03d12fa4293bc60008060606040518763ffffffff1660e01b81526004016300007916959493929190630001a83d565b6000604051808303818588803b158015630000793157600080fd5b505af11580156300007947573d6000803e3d6000fd5b50505050506300002ce0733c44cdddb6a900fa2b585dd299e03d12fa4293bc63000182f1565b600354604080517fcff0ab96000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163cff0ab969160048083019260609291908290030181865afa15801563000079df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300007a079190630001a893565b50506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f675f1a5600000000000000000000000000000000000000000000000000000000600482015291925073ffffffffffffffffffffffffffffffffffffffff169063c31eb0e090602401600060405180830381600087803b1580156300007a9757600080fd5b505af11580156300007aad573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b1580156300007b3257600080fd5b505af11580156300007b48573d6000803e3d6000fd5b505060035473ffffffffffffffffffffffffffffffffffffffff169150636c8f225d90506300007b7b836001630001a44f565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526fffffffffffffffffffffffffffffffff909116600482015273f39fd6e51aad88f6f4ce6ab8827279cfffb922666024820152606460448201819052600090820152608401600060405180830381600087803b1580156300007c0857600080fd5b505af11580156300007c1e573d6000803e3d6000fd5b50506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f675f1a560000000000000000000000000000000000000000000000000000000060048201526060935073ffffffffffffffffffffffffffffffffffffffff909116915063c31eb0e090602401600060405180830381600087803b1580156300007cb257600080fd5b505af11580156300007cc8573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b1580156300007d4d57600080fd5b505af11580156300007d63573d6000803e3d6000fd5b505060035473ffffffffffffffffffffffffffffffffffffffff169150637071b7c590506300007d96846001630001a44f565b73f39fd6e51aad88f6f4ce6ab8827279cfffb922668460006040518563ffffffff1660e01b815260040163000014fb9493929190630001a8f0565b600354604080517f9b67ab300000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692639b67ab3092600480830193928290030181865afa1580156300007e43573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300007e6b9190630001a93b565b915091506300007ebe8267ffffffffffffffff1660006040518060400160405280601981526020017f496e636f727265637420626c6f636b4c617374557064617465000000000000008152506300017618565b6300007f15816fffffffffffffffffffffffffffffffff1660006040518060400160405280601981526020017f496e636f727265637420626f72726f776564496e426c6f636b000000000000008152506300017618565b6300007f21630001766a565b5050600354604080517f9b67ab30000000000000000000000000000000000000000000000000000000008152815173ffffffffffffffffffffffffffffffffffffffff90931692639b67ab30926004808401939192918290030181865afa1580156300007f92573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300007fba9190630001a93b565b809250819350505063000080108267ffffffffffffffff16436040518060400160405280600f81526020017f626c6f636b4c61737455706461746500000000000000000000000000000000008152506300017618565b630000807d6fffffffffffffffffffffffffffffffff82166300008040670de0b6b3a7640000614e20630001a6b6565b6040518060400160405280601981526020017f496e636f727265637420626f72726f776564496e426c6f636b000000000000008152506300017618565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b15801563000080fe57600080fd5b505af11580156300008114573d6000803e3d6000fd5b505060035473ffffffffffffffffffffffffffffffffffffffff169150632b7c7b11905060026300008152670de0b6b3a7640000614e20630001a6b6565b63000081609190630001a775565b6040518263ffffffff1660e01b8152600401630000818091815260200190565b600060405180830381600087803b158015630000819c57600080fd5b505af115801563000081b2573d6000803e3d6000fd5b5050600354604080517f9b67ab30000000000000000000000000000000000000000000000000000000008152815173ffffffffffffffffffffffffffffffffffffffff9093169450639b67ab309350600480820193918290030181865afa1580156300008223573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000824b9190630001a93b565b809250819350505063000082a18267ffffffffffffffff16436040518060400160405280600f81526020017f626c6f636b4c61737455706461746500000000000000000000000000000000008152506300017618565b63000083076fffffffffffffffffffffffffffffffff8216600263000082d3670de0b6b3a7640000614e20630001a6b6565b63000082e19190630001a775565b63000082f9670de0b6b3a7640000614e20630001a6b6565b63000080409190630001a7b2565b6001805473ffffffffffffffffffffffffffffffffffffffff1690631f7b4f30906300008337904390630001a7b2565b6040518263ffffffff1660e01b8152600401630000835791815260200190565b600060405180830381600087803b158015630000837357600080fd5b505af11580156300008389573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b158015630000840e57600080fd5b505af11580156300008424573d6000803e3d6000fd5b505060035473ffffffffffffffffffffffffffffffffffffffff169150632b7c7b11905060026300008462670de0b6b3a7640000614e20630001a6b6565b63000084709190630001a775565b6040518263ffffffff1660e01b8152600401630000849091815260200190565b600060405180830381600087803b15801563000084ac57600080fd5b505af115801563000084c2573d6000803e3d6000fd5b5050600354604080517f9b67ab30000000000000000000000000000000000000000000000000000000008152815173ffffffffffffffffffffffffffffffffffffffff9093169450639b67ab309350600480820193918290030181865afa1580156300008533573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000855b9190630001a93b565b809250819350505063000085b18267ffffffffffffffff16436040518060400160405280600f81526020017f626c6f636b4c61737455706461746500000000000000000000000000000000008152506300017618565b63000074c66fffffffffffffffffffffffffffffffff8216600263000085e3670de0b6b3a7640000614e20630001a6b6565b63000080409190630001a775565b600063000085ff630001766a565b509050600063000086106300018346565b6040805180820190915260095473ffffffffffffffffffffffffffffffffffffffff16815260208101829052909150600090630000864f906300017e3e565b60015460025460035460405173f39fd6e51aad88f6f4ce6ab8827279cfffb92266602482015273ffffffffffffffffffffffffffffffffffffffff91821660448201529394509182169263bd6af4349290911690606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe1998cf9000000000000000000000000000000000000000000000000000000001790525160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526300008758929190600401630001a5dd565b600060405180830381600087803b158015630000877457600080fd5b505af1158015630000878a573d6000803e3d6000fd5b5050600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481019290925260006024830181905260448301819052606483015273ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b158015630000881157600080fd5b505af11580156300008827573d6000803e3d6000fd5b505060405173f39fd6e51aad88f6f4ce6ab8827279cfffb9226692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a260015460025460035460085460405173ffffffffffffffffffffffffffffffffffffffff9485169463bd6af4349481169363000088b493908216929116908890602401630001a96a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ce4074a000000000000000000000000000000000000000000000000000000001790525160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526300008966929190600401630001a5dd565b600060405180830381600087803b158015630000898257600080fd5b505af11580156300008998573d6000803e3d6000fd5b5050600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526024810183905260006044820152606481019290925273ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b1580156300008a1f57600080fd5b505af11580156300008a35573d6000803e3d6000fd5b505060085460035460405173ffffffffffffffffffffffffffffffffffffffff9283169450911691507faed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab0390600090a360015460085460405173ffffffffffffffffffffffffffffffffffffffff9283169263bd6af4349287927f1cff79cd00000000000000000000000000000000000000000000000000000000926300008ae49216908890602401630001a5dd565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b90921682526300008b799291600401630001a5dd565b600060405180830381600087803b1580156300008b9557600080fd5b505af11580156300008bab573d6000803e3d6000fd5b50506001546008546040517fbd6af43400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316945063bd6af43493506300008c1092909116908690600401630001a5dd565b600060405180830381600087803b1580156300008c2c57600080fd5b505af11580156300008c42573d6000803e3d6000fd5b5050600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600060048201819052602482018190526044820152606481019290925273ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b1580156300008cc957600080fd5b505af11580156300008cdf573d6000803e3d6000fd5b50506040517f60c8e8938c9a0c0d88a98d6f1c562ce68077e12bf3edb8047378f2f736cb45b4925060009150a160015460025460035460405173ffffffffffffffffffffffffffffffffffffffff918216602482015273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660448201529281169263bd6af434929190911690606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe1998cf9000000000000000000000000000000000000000000000000000000001790525160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526300008e13929190600401630001a5dd565b600060405180830381600087803b1580156300008e2f57600080fd5b505af11580156300008e45573d6000803e3d6000fd5b50506001805460025460405173ffffffffffffffffffffffffffffffffffffffff928316955063bd6af43494509116917f2362a2d800000000000000000000000000000000000000000000000000000000916300008ede9173f39fd6e51aad88f6f4ce6ab8827279cfffb9226691600091829184917390f79bf6eb2c4f870365e785982e1f101e93b90691600a9190602401630001a9c6565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b90921682526300008f739291600401630001a5dd565b600060405180830381600087803b1580156300008f8f57600080fd5b505af11580156300008fa5573d6000803e3d6000fd5b5050600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526024810192909252600060448301819052606483015273ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b158015630000902c57600080fd5b505af11580156300009042573d6000803e3d6000fd5b50506040517390f79bf6eb2c4f870365e785982e1f101e93b906925073f39fd6e51aad88f6f4ce6ab8827279cfffb9226691507f460ad03b1cf79b1d64d3aefa28475f110ab66e84649c52bb41ed796b9b39198190600090a36001805473ffffffffffffffffffffffffffffffffffffffff1690631f7b4f309063000090cb904390630001a7b2565b6040518263ffffffff1660e01b815260040163000090eb91815260200190565b600060405180830381600087803b158015630000910757600080fd5b505af1158015630000911d573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b15801563000091a257600080fd5b505af115801563000091b8573d6000803e3d6000fd5b50506003546040517f5f73fbec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169250635f73fbec91506300009232907390f79bf6eb2c4f870365e785982e1f101e93b90690600a906001908790600401630001aa27565b600060405180830381600087803b158015630000924e57600080fd5b505af11580156300009264573d6000803e3d6000fd5b505050506300009364600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634e417a986040518163ffffffff1660e01b8152600401600060405180830381865afa15801563000092dc573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405263000093269190810190630001aaef565b836040518060400160405280601281526020017f496e636f72726563742063616c6c6461746100000000000000000000000000008152506300018537565b505050565b6001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b15801563000093ea57600080fd5b505af11580156300009400573d6000803e3d6000fd5b5050600480546008546040517ffb1bd8c400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182169381019390935216925063fb1bd8c49150602401600060405180830381600087803b158015630000947757600080fd5b505af1158015630000948d573d6000803e3d6000fd5b50506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f5d2e3a7400000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff909116925063c31eb0e09150602401600060405180830381600087803b158015630000951e57600080fd5b505af11580156300009534573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b15801563000095b957600080fd5b505af115801563000095cf573d6000803e3d6000fd5b50506003546008546006546040517fe1f21c6700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201529082166024820152600160448201529116925063e1f21c67915060640163000025eb565b6001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b15801563000096c257600080fd5b505af115801563000096d8573d6000803e3d6000fd5b5050600480546040517f9c55a0540000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff9281019290925273ffffffffffffffffffffffffffffffffffffffff169250639c55a0549150602401600060405180830381600087803b158015630000975a57600080fd5b505af11580156300009770573d6000803e3d6000fd5b50505050600080600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639b67ab306040518163ffffffff1660e01b81526004016040805180830381865afa15801563000097e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000980d9190630001a93b565b9150915063000098608267ffffffffffffffff1660006040518060400160405280601b81526020017f496e636f72726563742063757272656e74426c6f636b4c696d697400000000008152506300017618565b63000098b7816fffffffffffffffffffffffffffffffff1660006040518060400160405280601b81526020017f496e636f72726563742063757272656e74426c6f636b4c696d697400000000008152506300017618565b63000098c3630001766a565b5050600354604080517f9b67ab30000000000000000000000000000000000000000000000000000000008152815173ffffffffffffffffffffffffffffffffffffffff90931692639b67ab30926004808401939192918290030181865afa1580156300009934573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000995c9190630001a93b565b809250819350505063000099b38267ffffffffffffffff1660006040518060400160405280601b81526020017f496e636f72726563742063757272656e74426c6f636b4c696d697400000000008152506300017618565b63000074c6816fffffffffffffffffffffffffffffffff1660006040518060400160405280601b81526020017f496e636f72726563742063757272656e74426c6f636b4c696d697400000000008152506300017618565b6001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527390f79bf6eb2c4f870365e785982e1f101e93b906600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b1580156300009a8b57600080fd5b505af11580156300009aa1573d6000803e3d6000fd5b50506003546040517e842b5700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660048201526001602482015273ffffffffffffffffffffffffffffffffffffffff909116925062842b579150604401600060405180830381600087803b1580156300009b2b57600080fd5b505af11580156300009b41573d6000803e3d6000fd5b505050506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638f7dcfa36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156300009bb6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300009bde9190630001a1b5565b6040805180820190915260035473ffffffffffffffffffffffffffffffffffffffff90811682526006549293506000926300009d7f929160208301917f5978103400000000000000000000000000000000000000000000000000000000917390f79bf6eb2c4f870365e785982e1f101e93b90691166300009c6b670de0b6b3a7640000614e20630001a6b6565b60405173ffffffffffffffffffffffffffffffffffffffff93841660248201529290911660448301526064820152608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000959095169490941790935292528151808301835260035473ffffffffffffffffffffffffffffffffffffffff1681529151670de0b6b3a76400006024820152908201907f2b7c7b1100000000000000000000000000000000000000000000000000000000906044016300002248565b60015460025491925073ffffffffffffffffffffffffffffffffffffffff9081169163bd6af43491166300009dc0670de0b6b3a7640000614e20630001a6b6565b60405160248101919091527390f79bf6eb2c4f870365e785982e1f101e93b9066044820152606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fe3f93f000000000000000000000000000000000000000000000000000000001790525160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526300009e9a929190600401630001a5dd565b600060405180830381600087803b1580156300009eb657600080fd5b505af11580156300009ecc573d6000803e3d6000fd5b5050600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526024810183905260006044820152606481019290925273ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b1580156300009f5357600080fd5b505af11580156300009f69573d6000803e3d6000fd5b50505073ffffffffffffffffffffffffffffffffffffffff831690507390f79bf6eb2c4f870365e785982e1f101e93b9067ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7636300009fd3670de0b6b3a7640000614e20630001a6b6565b60408051918252601760208301520160405180910390a36001546002546003546040517390f79bf6eb2c4f870365e785982e1f101e93b906602482015273ffffffffffffffffffffffffffffffffffffffff91821660448201529281169263bd6af434929190911690606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe1998cf9000000000000000000000000000000000000000000000000000000001790525160e084901b7fffffffff00000000000000000000000000000000000000000000000000000000168152630000a0f1929190600401630001a5dd565b600060405180830381600087803b158015630000a10d57600080fd5b505af1158015630000a123573d6000803e3d6000fd5b5050600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481019290925260006024830181905260448301819052606483015273ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b158015630000a1aa57600080fd5b505af1158015630000a1c0573d6000803e3d6000fd5b50506040517390f79bf6eb2c4f870365e785982e1f101e93b90692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a260015460025460065473ffffffffffffffffffffffffffffffffffffffff9283169263bd6af4349281169173f39fd6e51aad88f6f4ce6ab8827279cfffb9226691879116630000a25f670de0b6b3a7640000614e20630001a6b6565b60405173ffffffffffffffffffffffffffffffffffffffff9485166024820152928416604484015292166064820152608481019190915260a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f830aa745000000000000000000000000000000000000000000000000000000001790525160e084901b7fffffffff00000000000000000000000000000000000000000000000000000000168152630000a34b929190600401630001a5dd565b600060405180830381600087803b158015630000a36757600080fd5b505af1158015630000a37d573d6000803e3d6000fd5b5050600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526024810183905260006044820152606481019290925273ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b158015630000a40457600080fd5b505af1158015630000a41a573d6000803e3d6000fd5b505060065473ffffffffffffffffffffffffffffffffffffffff1691507390f79bf6eb2c4f870365e785982e1f101e93b90690507fa32435755c235de2976ed44a75a2f85cb01faf0c894f639fe0c32bb9455fea8f630000a487670de0b6b3a7640000614e20630001a6b6565b60405190815260200160405180910390a36001805460025460405173ffffffffffffffffffffffffffffffffffffffff8681166024830152670de0b6b3a7640000604483015260648201949094529183169263bd6af43492911690608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f94cf073a000000000000000000000000000000000000000000000000000000001790525160e084901b7fffffffff00000000000000000000000000000000000000000000000000000000168152630000a597929190600401630001a5dd565b600060405180830381600087803b158015630000a5b357600080fd5b505af1158015630000a5c9573d6000803e3d6000fd5b5050600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526000602482018190526044820152606481019290925273ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b158015630000a65057600080fd5b505af1158015630000a666573d6000803e3d6000fd5b5050604051670de0b6b3a764000081527390f79bf6eb2c4f870365e785982e1f101e93b90692507f9cac51154cc0d835e2f9c9d1f59a9344588cee107f4203bf58a8c797e3a58c45915060200160405180910390a2600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600060048201819052602482018190526044820152606481019290925273ffffffffffffffffffffffffffffffffffffffff169063491cc7c290608401600060405180830381600087803b158015630000a73e57600080fd5b505af1158015630000a754573d6000803e3d6000fd5b50506040517f60c8e8938c9a0c0d88a98d6f1c562ce68077e12bf3edb8047378f2f736cb45b4925060009150a160015460025460035460405173ffffffffffffffffffffffffffffffffffffffff91821660248201527390f79bf6eb2c4f870365e785982e1f101e93b90660448201529281169263bd6af434929190911690606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe1998cf9000000000000000000000000000000000000000000000000000000001790525160e084901b7fffffffff00000000000000000000000000000000000000000000000000000000168152630000a888929190600401630001a5dd565b600060405180830381600087803b158015630000a8a457600080fd5b505af1158015630000a8ba573d6000803e3d6000fd5b505060015460025460405173ffffffffffffffffffffffffffffffffffffffff8781166024830152928316945063bd6af4349350911690604401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f95373018000000000000000000000000000000000000000000000000000000001790525160e084901b7fffffffff00000000000000000000000000000000000000000000000000000000168152630000a9a6929190600401630001a5dd565b600060405180830381600087803b158015630000a9c257600080fd5b505af1158015630000a9d8573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b158015630000aa5d57600080fd5b505af1158015630000aa73573d6000803e3d6000fd5b505060035473ffffffffffffffffffffffffffffffffffffffff169150637071b7c59050630000aaaf670de0b6b3a7640000614e20630001a6b6565b7390f79bf6eb2c4f870365e785982e1f101e93b9068460176040518563ffffffff1660e01b815260040163000014fb9493929190630001a6f9565b630000aaf6630001766a565b50506001805473ffffffffffffffffffffffffffffffffffffffff1690631f7b4f3090630000ab28904390630001a7b2565b6040518263ffffffff1660e01b8152600401630000ab4891815260200190565b600060405180830381600087803b158015630000ab6457600080fd5b505af1158015630000ab7a573d6000803e3d6000fd5b50505050630000ab8a6300018594565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b158015630000ac0b57600080fd5b505af1158015630000ac21573d6000803e3d6000fd5b505060035473ffffffffffffffffffffffffffffffffffffffff169150635f73fbec9050630000ac5c670de0b6b3a76400006005630001a6b6565b73f39fd6e51aad88f6f4ce6ab8827279cfffb9226660008060606040518663ffffffff1660e01b8152600401630000ac999493929190630001aa27565b6000604051808303818588803b158015630000acb457600080fd5b505af1158015630000acca573d6000803e3d6000fd5b5050505050630000106063000185b5565b630000ace7630001766a565b505060405160206024820152600560448201527f776f726c640000000000000000000000000000000000000000000000000000006064820152600090608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa777d0dc0000000000000000000000000000000000000000000000000000000017905260015490517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f5d2e3a7400000000000000000000000000000000000000000000000000000000600482015291925073ffffffffffffffffffffffffffffffffffffffff169063c31eb0e090602401600060405180830381600087803b158015630000ae2957600080fd5b505af1158015630000ae3f573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b158015630000aec457600080fd5b505af1158015630000aeda573d6000803e3d6000fd5b50506003546040805180820190915260025473ffffffffffffffffffffffffffffffffffffffff908116825260208201869052909116925063caa5c23f9150630000527a906300017e3e565b6000630000af34630001766a565b5090506000630000af456300018346565b6001546002546003546040805173f39fd6e51aad88f6f4ce6ab8827279cfffb92266602482015273ffffffffffffffffffffffffffffffffffffffff92831660448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe1998cf90000000000000000000000000000000000000000000000000000000017905290517fbd6af4340000000000000000000000000000000000000000000000000000000081529495509281169363bd6af43493630000b02e93929092169190600401630001a5dd565b600060405180830381600087803b158015630000b04a57600080fd5b505af1158015630000b060573d6000803e3d6000fd5b5050600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526024810183905260006044820152606481019290925273ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b158015630000b0e757600080fd5b505af1158015630000b0fd573d6000803e3d6000fd5b505060405173f39fd6e51aad88f6f4ce6ab8827279cfffb9226692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a260015460025460035460085460405173ffffffffffffffffffffffffffffffffffffffff9485169463bd6af434948116937f6ce4074a0000000000000000000000000000000000000000000000000000000093630000b1ab939183169216908890602401630001a96a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b9092168252630000b2409291600401630001a5dd565b600060405180830381600087803b158015630000b25c57600080fd5b505af1158015630000b272573d6000803e3d6000fd5b5050600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526024810183905260006044820152606481019290925273ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b158015630000b2f957600080fd5b505af1158015630000b30f573d6000803e3d6000fd5b505060085460035460405173ffffffffffffffffffffffffffffffffffffffff9283169450911691507faed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab0390600090a360015460085460405173ffffffffffffffffffffffffffffffffffffffff9283169263bd6af434928692630000b39e92909116908690602401630001a5dd565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1cff79cd000000000000000000000000000000000000000000000000000000001790525160e084901b7fffffffff00000000000000000000000000000000000000000000000000000000168152630000b450929190600401630001a5dd565b600060405180830381600087803b158015630000b46c57600080fd5b505af1158015630000b482573d6000803e3d6000fd5b50506001546008546040517fbd6af43400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316945063bd6af4349350630000b4e792909116908590600401630001a5dd565b600060405180830381600087803b158015630000b50357600080fd5b505af1158015630000b519573d6000803e3d6000fd5b5050600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600060048201819052602482018190526044820152606481019290925273ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b158015630000b5a057600080fd5b505af1158015630000b5b6573d6000803e3d6000fd5b50506040517f60c8e8938c9a0c0d88a98d6f1c562ce68077e12bf3edb8047378f2f736cb45b4925060009150a16001546002546003546040805173ffffffffffffffffffffffffffffffffffffffff928316602482015273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe1998cf90000000000000000000000000000000000000000000000000000000017905290517fbd6af4340000000000000000000000000000000000000000000000000000000081529382169363bd6af43493630000b6c693169190600401630001a5dd565b600060405180830381600087803b158015630000b6e257600080fd5b505af1158015630000b6f8573d6000803e3d6000fd5b50506001546002546040805173ffffffffffffffffffffffffffffffffffffffff88811660248084019190915283518084039091018152604490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f953730180000000000000000000000000000000000000000000000000000000017905291517fbd6af434000000000000000000000000000000000000000000000000000000008152938216955063bd6af4349450630000b7c593919092169190600401630001a5dd565b600060405180830381600087803b158015630000b7e157600080fd5b505af1158015630000b7f7573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b158015630000b87c57600080fd5b505af1158015630000b892573d6000803e3d6000fd5b50506003546040805180820190915260095473ffffffffffffffffffffffffffffffffffffffff908116825260208201869052909116925063caa5c23f915063000022ce906300017e3e565b630000b8ea630001766a565b50506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f1fdd676f00000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063c31eb0e090602401600060405180830381600087803b158015630000b97957600080fd5b505af1158015630000b98f573d6000803e3d6000fd5b50506001546040517fca669fa7000000000000000000000000000000000000000000000000000000008152733c44cdddb6a900fa2b585dd299e03d12fa4293bc600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b158015630000ba1457600080fd5b505af1158015630000ba2a573d6000803e3d6000fd5b505060035473ffffffffffffffffffffffffffffffffffffffff169150635d91a0e0905073f39fd6e51aad88f6f4ce6ab8827279cfffb92266733c44cdddb6a900fa2b585dd299e03d12fa4293bc6000600160605b6040518663ffffffff1660e01b815260040163000025eb959493929190630001a83d565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166354cae56e6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015630000bb0f57600080fd5b505af1158015630000bb25573d6000803e3d6000fd5b50505050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa158015630000bb98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000bbc09190630001a1b5565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055630000bc11630001766a565b50506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f7e52ccb400000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063c31eb0e090602401600060405180830381600087803b158015630000bca057600080fd5b505af1158015630000bcb6573d6000803e3d6000fd5b50506001546040517fca669fa7000000000000000000000000000000000000000000000000000000008152733c44cdddb6a900fa2b585dd299e03d12fa4293bc600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b158015630000bd3b57600080fd5b505af1158015630000bd51573d6000803e3d6000fd5b505060035473ffffffffffffffffffffffffffffffffffffffff1691506382871ace905073f39fd6e51aad88f6f4ce6ab8827279cfffb92266733c44cdddb6a900fa2b585dd299e03d12fa4293bc6000806060630000ba7f565b6001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb5ba4c4d00000000000000000000000000000000000000000000000000000000600482018190529173ffffffffffffffffffffffffffffffffffffffff169063c31eb0e090602401600060405180830381600087803b158015630000be3957600080fd5b505af1158015630000be4f573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b158015630000bed457600080fd5b505af1158015630000beea573d6000803e3d6000fd5b50506003546040517f5f73fbec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169250635f73fbec9150630000bf64907390f79bf6eb2c4f870365e785982e1f101e93b906906000908190606090600401630001aa27565b600060405180830381600087803b158015630000bf8057600080fd5b505af1158015630000bf96573d6000803e3d6000fd5b50506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fffffffff000000000000000000000000000000000000000000000000000000008516600482015273ffffffffffffffffffffffffffffffffffffffff909116925063c31eb0e09150602401600060405180830381600087803b158015630000c02957600080fd5b505af1158015630000c03f573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b158015630000c0c457600080fd5b505af1158015630000c0da573d6000803e3d6000fd5b50506003546040805180820190915273ffffffffffffffffffffffffffffffffffffffff918216808252600654909450635f73fbec93507390f79bf6eb2c4f870365e785982e1f101e93b906926000928392630000c1989260208301917f59781034000000000000000000000000000000000000000000000000000000009173f39fd6e51aad88f6f4ce6ab8827279cfffb9226691166004630000c18a670de0b6b3a7640000614e20630001a6b6565b6300002ba99190630001a775565b6040518563ffffffff1660e01b8152600401630000c1bb9493929190630001aa27565b600060405180830381600087803b158015630000c1d757600080fd5b505af1158015630000c1ed573d6000803e3d6000fd5b50506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fffffffff000000000000000000000000000000000000000000000000000000008516600482015273ffffffffffffffffffffffffffffffffffffffff909116925063c31eb0e09150602401600060405180830381600087803b158015630000c28057600080fd5b505af1158015630000c296573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b158015630000c31b57600080fd5b505af1158015630000c331573d6000803e3d6000fd5b50506003546040517f5d91a0e000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169250635d91a0e09150630000c3c19073f39fd6e51aad88f6f4ce6ab8827279cfffb922669073c4375b7de8af5a38a93548eb8453a498222c4ff2906000908190606090600401630001a83d565b600060405180830381600087803b158015630000c3dd57600080fd5b505af1158015630000c3f3573d6000803e3d6000fd5b50506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fffffffff000000000000000000000000000000000000000000000000000000008516600482015273ffffffffffffffffffffffffffffffffffffffff909116925063c31eb0e09150602401600060405180830381600087803b158015630000c48657600080fd5b505af1158015630000c49c573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b158015630000c52157600080fd5b505af1158015630000c537573d6000803e3d6000fd5b50506003546040517f2b7c7b110000000000000000000000000000000000000000000000000000000081526001600482015273ffffffffffffffffffffffffffffffffffffffff9091169250632b7c7b119150602401600060405180830381600087803b158015630000c5a957600080fd5b505af1158015630000c5bf573d6000803e3d6000fd5b50506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fffffffff000000000000000000000000000000000000000000000000000000008516600482015273ffffffffffffffffffffffffffffffffffffffff909116925063c31eb0e09150602401600060405180830381600087803b158015630000c65257600080fd5b505af1158015630000c668573d6000803e3d6000fd5b50506003546006546040517f5978103400000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9182166024820152600160448201529116925063597810349150606401600060405180830381600087803b158015630000c6fe57600080fd5b505af1158015630000c714573d6000803e3d6000fd5b50506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fffffffff000000000000000000000000000000000000000000000000000000008516600482015273ffffffffffffffffffffffffffffffffffffffff909116925063c31eb0e09150602401600060405180830381600087803b158015630000c7a757600080fd5b505af1158015630000c7bd573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b158015630000c84257600080fd5b505af1158015630000c858573d6000803e3d6000fd5b50506003546040517fcaa5c23f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116925063caa5c23f9150630000c8b790606090600401630001a69f565b600060405180830381600087803b158015630000c8d357600080fd5b505af1158015630000c8e9573d6000803e3d6000fd5b50506001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b158015630000c96e57600080fd5b505af1158015630000c984573d6000803e3d6000fd5b5050600480546008546009546040517f7bccacee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283169481019490945281166024840152169250637bccacee9150604401600060405180830381600087803b158015630000ca0557600080fd5b505af1158015630000ca1b573d6000803e3d6000fd5b50506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fffffffff000000000000000000000000000000000000000000000000000000008516600482015273ffffffffffffffffffffffffffffffffffffffff909116925063c31eb0e09150602401600060405180830381600087803b158015630000caae57600080fd5b505af1158015630000cac4573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b158015630000cb4957600080fd5b505af1158015630000cb5f573d6000803e3d6000fd5b50506003546008546006546040517fe1f21c6700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201529082166024820152600160448201529116925063e1f21c679150606401600060405180830381600087803b158015630000cbe657600080fd5b505af1158015630000cbfc573d6000803e3d6000fd5b50506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fffffffff000000000000000000000000000000000000000000000000000000008516600482015273ffffffffffffffffffffffffffffffffffffffff909116925063c31eb0e09150602401600060405180830381600087803b158015630000cc8f57600080fd5b505af1158015630000cca5573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b158015630000cd2a57600080fd5b505af1158015630000cd40573d6000803e3d6000fd5b50506003546040517f5019e20a0000000000000000000000000000000000000000000000000000000081527390f79bf6eb2c4f870365e785982e1f101e93b906600482015273ffffffffffffffffffffffffffffffffffffffff9091169250635019e20a9150602401600060405180830381600087803b158015630000cdc557600080fd5b505af1158015630000cddb573d6000803e3d6000fd5b50506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fffffffff000000000000000000000000000000000000000000000000000000008516600482015273ffffffffffffffffffffffffffffffffffffffff909116925063c31eb0e09150602401600060405180830381600087803b158015630000ce6e57600080fd5b505af1158015630000ce84573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b158015630000cf0957600080fd5b505af1158015630000cf1f573d6000803e3d6000fd5b50506003546006546040517fc690908a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529116925063c690908a9150602401630000529a565b630000cf8b630001766a565b50506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f85b0772600000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063c31eb0e090602401600060405180830381600087803b158015630000d01a57600080fd5b505af1158015630000d030573d6000803e3d6000fd5b50506001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527390f79bf6eb2c4f870365e785982e1f101e93b906600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b158015630000d0b557600080fd5b505af1158015630000d0cb573d6000803e3d6000fd5b50506003546040517f5978103400000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273c4375b7de8af5a38a93548eb8453a498222c4ff26024820152610200604482015273ffffffffffffffffffffffffffffffffffffffff90911692506359781034915060640163000025eb565b630000d169630001766a565b5050630000d17763000185d6565b50506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f85b0772600000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063c31eb0e090602401600060405180830381600087803b158015630000d20657600080fd5b505af1158015630000d21c573d6000803e3d6000fd5b50506001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527390f79bf6eb2c4f870365e785982e1f101e93b906600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b158015630000d2a157600080fd5b505af1158015630000d2b7573d6000803e3d6000fd5b505060035460408051808201825273ffffffffffffffffffffffffffffffffffffffff909216808352905173f39fd6e51aad88f6f4ce6ab8827279cfffb92266602482015273c4375b7de8af5a38a93548eb8453a498222c4ff26044820152633b9aca00606482015290935063caa5c23f9250630000d362919060208201907f5978103400000000000000000000000000000000000000000000000000000000906084016300002bdb565b6040518263ffffffff1660e01b815260040163000025eb9190630001a69f565b6001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb2335f2e00000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063c31eb0e090602401600060405180830381600087803b158015630000d40f57600080fd5b505af1158015630000d425573d6000803e3d6000fd5b505050506000806000604051630000d43e90630001a10c565b73ffffffffffffffffffffffffffffffffffffffff938416815292909116602083015215156040820152606001604051809103906000f08015801563000074c6573d6000803e3d6000fd5b60015473ffffffffffffffffffffffffffffffffffffffff16634c63e5628315801590630000d4ce5750630000d4cb670de0b6b3a7640000614e20630001a6b6565b84105b6040518263ffffffff1660e01b8152600401630000d4f0911515815260200190565b600060405180830381600087803b158015630000d50c57600080fd5b505af1158015630000d522573d6000803e3d6000fd5b505060015473ffffffffffffffffffffffffffffffffffffffff169150634c63e562905060ff831615801590630000d5f25750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa158015630000d5c4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000d5ec9190630001a822565b8360ff16105b6040518263ffffffff1660e01b8152600401630000d614911515815260200190565b600060405180830381600087803b158015630000d63057600080fd5b505af1158015630000d646573d6000803e3d6000fd5b5050600054600254604080517f570a7af200000000000000000000000000000000000000000000000000000000815290516201000090930473ffffffffffffffffffffffffffffffffffffffff908116955063eebab8ef945060019392169163570a7af2916004808201926020929091908290030181865afa158015630000d6d2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000d6fa9190630001a1b5565b6bffffffffffffffffffffffff6040518463ffffffff1660e01b8152600401630000d72993929190630001ab42565b600060405180830381600087803b158015630000d74557600080fd5b505af1158015630000d75b573d6000803e3d6000fd5b50506001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b158015630000d7e057600080fd5b505af1158015630000d7f6573d6000803e3d6000fd5b5050600480546040517f9c55a0540000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff9281019290925273ffffffffffffffffffffffffffffffffffffffff169250639c55a0549150602401600060405180830381600087803b158015630000d87457600080fd5b505af1158015630000d88a573d6000803e3d6000fd5b50506001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b158015630000d90f57600080fd5b505af1158015630000d925573d6000803e3d6000fd5b5050600480546040517f9f1c50690000000000000000000000000000000000000000000000000000000081526001928101929092526bffffffffffffffffffffffff602483015273ffffffffffffffffffffffffffffffffffffffff169250639f1c50699150604401600060405180830381600087803b158015630000d9aa57600080fd5b505af1158015630000d9c0573d6000803e3d6000fd5b50506002546040517f172c48c700000000000000000000000000000000000000000000000000000000815260ff851660048201526000935073ffffffffffffffffffffffffffffffffffffffff909116915063172c48c7906024016040805180830381865afa158015630000da39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000da619190630001ab8c565b506000546040517fc6c3bbe600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660248301526bffffffffffffffffffffffff6044830152929350620100009091049091169063c6c3bbe690606401600060405180830381600087803b158015630000db0757600080fd5b505af1158015630000db1d573d6000803e3d6000fd5b50506000546002546040517f9b140a8500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015273f39fd6e51aad88f6f4ce6ab8827279cfffb922666024830152918216604482015262010000909204169250639b140a859150606401600060405180830381600087803b158015630000dbba57600080fd5b505af1158015630000dbd0573d6000803e3d6000fd5b505060408051808201825260035473ffffffffffffffffffffffffffffffffffffffff9081168252915173f39fd6e51aad88f6f4ce6ab8827279cfffb92266602482015291851660448301526064820187905260009350630000dc6092509060208201907f5978103400000000000000000000000000000000000000000000000000000000906084016300002bdb565b6002546040517f7832743800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015292935060009290911690637832743890602401602060405180830381865afa158015630000dcd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000dd009190630001abc5565b61ffff1690506000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015630000dd77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000dd9f9190630001a1b5565b73ffffffffffffffffffffffffffffffffffffffff1663f9a65030630000ddc88489630001a6b6565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b168152600481019190915273ffffffffffffffffffffffffffffffffffffffff87166024820152604401602060405180830381865afa158015630000de3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000de629190630001a822565b90506000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015630000ded5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000defd9190630001a1b5565b73ffffffffffffffffffffffffffffffffffffffff1663f9a65030612710630000df33670de0b6b3a7640000614e20630001a6b6565b630000df419190630001a6b6565b60065460405160e084901b7fffffffff00000000000000000000000000000000000000000000000000000000168152600481019290925273ffffffffffffffffffffffffffffffffffffffff166024820152604401602060405180830381865afa158015630000dfb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000dfdd9190630001a822565b90506000612710630000dff461245482630001abe8565b630000e0069061ffff1684630001a6b6565b630000e0149190630001a775565b831090508015630000e0c8576001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f532e7bb600000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063c31eb0e090602401600060405180830381600087803b158015630000e0ad57600080fd5b505af1158015630000e0c3573d6000803e3d6000fd5b505050505b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b158015630000e14957600080fd5b505af1158015630000e15f573d6000803e3d6000fd5b505060035473ffffffffffffffffffffffffffffffffffffffff169150637071b7c59050630000e19b670de0b6b3a7640000614e20630001a6b6565b73f39fd6e51aad88f6f4ce6ab8827279cfffb922668860176040518563ffffffff1660e01b8152600401630000e1d69493929190630001a6f9565b600060405180830381600087803b158015630000e1f257600080fd5b505af1158015630000e208573d6000803e3d6000fd5b505050505050505050505050565b630000e222630001766a565b505060405160206024820152600560448201527f776f726c640000000000000000000000000000000000000000000000000000006064820152600090608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa777d0dc0000000000000000000000000000000000000000000000000000000017905260015490517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f5d2e3a7400000000000000000000000000000000000000000000000000000000600482015291925073ffffffffffffffffffffffffffffffffffffffff169063c31eb0e090602401600060405180830381600087803b158015630000e36457600080fd5b505af1158015630000e37a573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b158015630000e3ff57600080fd5b505af1158015630000e415573d6000803e3d6000fd5b50506003546040805180820190915273c4375b7de8af5a38a93548eb8453a498222c4ff281526020810185905273ffffffffffffffffffffffffffffffffffffffff909116925063caa5c23f9150630000527a906300017e3e565b6001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527feee4716900000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063c31eb0e090602401600060405180830381600087803b158015630000e4fd57600080fd5b505af1158015630000e513573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b158015630000e59857600080fd5b505af1158015630000e5ae573d6000803e3d6000fd5b50506003546040517fffd9b9070000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ffd9b9079150602401600060405180830381600087803b158015630000e62057600080fd5b505af1158015630000e636573d6000803e3d6000fd5b50506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527feee4716900000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff909116925063c31eb0e09150602401600060405180830381600087803b158015630000e6c757600080fd5b505af1158015630000e6dd573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b158015630000e76257600080fd5b505af1158015630000e778573d6000803e3d6000fd5b50506003546040517f9c55a0540000000000000000000000000000000000000000000000000000000081526064600482015273ffffffffffffffffffffffffffffffffffffffff9091169250639c55a054915060240163000025eb565b600354604080517f860aefcf000000000000000000000000000000000000000000000000000000008152815160009373ffffffffffffffffffffffffffffffffffffffff169263860aefcf92600480820193918290030181865afa158015630000e843573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000e86b9190630001a3ac565b506001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526fffffffffffffffffffffffffffffffff92909216925073ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b158015630000e90257600080fd5b505af1158015630000e918573d6000803e3d6000fd5b5050600480546040517fffd9b90700000000000000000000000000000000000000000000000000000000815260019281019290925273ffffffffffffffffffffffffffffffffffffffff16925063ffd9b9079150602401600060405180830381600087803b158015630000e98b57600080fd5b505af1158015630000e9a1573d6000803e3d6000fd5b50506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f7615238d00000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff909116925063c31eb0e09150602401600060405180830381600087803b158015630000ea3257600080fd5b505af1158015630000ea48573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660048201526060935073ffffffffffffffffffffffffffffffffffffffff909116915063ca669fa790602401600060405180830381600087803b158015630000ead057600080fd5b505af1158015630000eae6573d6000803e3d6000fd5b50506003546040517f7071b7c500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169250637071b7c5915063000014fb90859073f39fd6e51aad88f6f4ce6ab8827279cfffb92266908690600090600401630001a6f9565b6000630000eb6d630001766a565b5090506000630000eb7e6300018346565b9050630000eb8c6300017af2565b60015460025460035460405173f39fd6e51aad88f6f4ce6ab8827279cfffb92266602482015273ffffffffffffffffffffffffffffffffffffffff91821660448201529281169263bd6af434929190911690606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe1998cf9000000000000000000000000000000000000000000000000000000001790525160e084901b7fffffffff00000000000000000000000000000000000000000000000000000000168152630000ec93929190600401630001a5dd565b600060405180830381600087803b158015630000ecaf57600080fd5b505af1158015630000ecc5573d6000803e3d6000fd5b5050600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481019290925260006024830181905260448301819052606483015273ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b158015630000ed4c57600080fd5b505af1158015630000ed62573d6000803e3d6000fd5b505060405173f39fd6e51aad88f6f4ce6ab8827279cfffb9226692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a260015460025460035460085460405173ffffffffffffffffffffffffffffffffffffffff9485169463bd6af43494811693630000edef93908216929116908790602401630001a96a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ce4074a000000000000000000000000000000000000000000000000000000001790525160e084901b7fffffffff00000000000000000000000000000000000000000000000000000000168152630000eea1929190600401630001a5dd565b600060405180830381600087803b158015630000eebd57600080fd5b505af1158015630000eed3573d6000803e3d6000fd5b5050600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526024810192909252600060448301819052606483015273ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b158015630000ef5a57600080fd5b505af1158015630000ef70573d6000803e3d6000fd5b505060085460035460405173ffffffffffffffffffffffffffffffffffffffff9283169450911691507faed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab0390600090a360015460085460405173ffffffffffffffffffffffffffffffffffffffff9283169263bd6af4349286927f1cff79cd0000000000000000000000000000000000000000000000000000000092630000f01f9216908790602401630001a5dd565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b9092168252630000f0b49291600401630001a5dd565b600060405180830381600087803b158015630000f0d057600080fd5b505af1158015630000f0e6573d6000803e3d6000fd5b50506001546008546040517fbd6af43400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316945063bd6af4349350630000f14b92909116908590600401630001a5dd565b600060405180830381600087803b158015630000f16757600080fd5b505af1158015630000f17d573d6000803e3d6000fd5b50506001546040517f491cc7c20000000000000000000000000000000000000000000000000000000081526000600482018190526024820181905260448201819052606482015273ffffffffffffffffffffffffffffffffffffffff909116925063491cc7c29150608401600060405180830381600087803b158015630000f20457600080fd5b505af1158015630000f21a573d6000803e3d6000fd5b50506040517f60c8e8938c9a0c0d88a98d6f1c562ce68077e12bf3edb8047378f2f736cb45b4925060009150a160015460025460035460405173ffffffffffffffffffffffffffffffffffffffff918216602482015273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660448201529281169263bd6af434929190911690606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe1998cf9000000000000000000000000000000000000000000000000000000001790525160e084901b7fffffffff00000000000000000000000000000000000000000000000000000000168152630000f34e929190600401630001a5dd565b600060405180830381600087803b158015630000f36a57600080fd5b505af1158015630000f380573d6000803e3d6000fd5b505050506000670de0b6b3a7640000614e20630000f3a09190630001a6b6565b630000f3af906002630001a6b6565b6001805460025460405193945073ffffffffffffffffffffffffffffffffffffffff9182169363bd6af4349392909116917f2362a2d80000000000000000000000000000000000000000000000000000000091630000f45b9173f39fd6e51aad88f6f4ce6ab8827279cfffb92266918890733c44cdddb6a900fa2b585dd299e03d12fa4293bc907390f79bf6eb2c4f870365e785982e1f101e93b90690600a908590602401630001ac09565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b9092168252630000f4f09291600401630001a5dd565b600060405180830381600087803b158015630000f50c57600080fd5b505af1158015630000f522573d6000803e3d6000fd5b5050600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526024810183905260448101839052606481019290925273ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b158015630000f5a957600080fd5b505af1158015630000f5bf573d6000803e3d6000fd5b5050604051600081527390f79bf6eb2c4f870365e785982e1f101e93b9069250733c44cdddb6a900fa2b585dd299e03d12fa4293bc915073f39fd6e51aad88f6f4ce6ab8827279cfffb92266907f7dfecd8419723a9d3954585a30c2a270165d70aafa146c11c1e1b88ae14390649060200160405180910390a46001546040517fca669fa7000000000000000000000000000000000000000000000000000000008152733c44cdddb6a900fa2b585dd299e03d12fa4293bc600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b158015630000f6ba57600080fd5b505af1158015630000f6d0573d6000803e3d6000fd5b50506003546040805180820190915260095473ffffffffffffffffffffffffffffffffffffffff9081168252602082018790529091169250635d91a0e0915073f39fd6e51aad88f6f4ce6ab8827279cfffb92266907390f79bf6eb2c4f870365e785982e1f101e93b90690600a90600190630000f74e906300017e3e565b6040518663ffffffff1660e01b8152600401630000f772959493929190630001a83d565b600060405180830381600087803b158015630000f78e57600080fd5b505af1158015630000f7a4573d6000803e3d6000fd5b50505050505050565b630000f7b96300018594565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b158015630000f83a57600080fd5b505af1158015630000f850573d6000803e3d6000fd5b505060035473ffffffffffffffffffffffffffffffffffffffff169150636c8f225d9050630000f88b670de0b6b3a76400006005630001a6b6565b6002630000f8a5670de0b6b3a7640000614e20630001a6b6565b630000f8b39190630001a775565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168152600481019190915273f39fd6e51aad88f6f4ce6ab8827279cfffb92266602482015260c8604482015260006064820152608401630000ac99565b6000630000f927630001766a565b5090506000630000f944670de0b6b3a7640000614e20630001a6b6565b630000f953906002630001a6b6565b90506000612710630000f972670de0b6b3a7640000614e20630001a6b6565b630000f981906002630001a6b6565b630000f99190612454630001a6b6565b630000f99f9190630001a775565b90506000630000f9bb670de0b6b3a7640000614e20630001a6b6565b630000f9cb61271084630001a6b6565b630000f9d99190630001a775565b6003546040517fdfd5946500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152929350630000fabb929091169063dfd59465906024015b602060405180830381865afa158015630000fa55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000fa7d9190630001a822565b826040518060400160405280601781526020017f496e636f7272656374206865616c746820666163746f720000000000000000008152506300017618565b630000facd600262989680630001890e565b630000fae4670de0b6b3a7640000600a630001a6b6565b630000faf29084630001a7b2565b9250612710630000fb0e670de0b6b3a7640000600a630001a6b6565b630000fb1e90612328630001a6b6565b630000fb2c9190630001a775565b630000fb3a9083630001a7b2565b9150630000fb54670de0b6b3a7640000614e20630001a6b6565b630000fb6461271084630001a6b6565b630000fb729190630001a775565b6003546040517fdfd5946500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152929350630000fbd5929091169063dfd5946590602401630000fa36565b630000fbfa6003630000fbf36064670de0b6b3a7640000630001a775565b630001890e565b630000fc116064670de0b6b3a7640000630001a775565b630000fc2190610c80630001a6b6565b630000fc2f9084630001a7b2565b9250612710630000fc4b6064670de0b6b3a7640000630001a775565b630000fc5b90610c80630001a6b6565b630000fc6b9061206c630001a6b6565b630000fc799190630001a775565b630000fc879083630001a7b2565b9150630000fca1670de0b6b3a7640000614e20630001a6b6565b630000fcb161271084630001a6b6565b630000fcbf9190630001a775565b6003546040517fdfd5946500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152929350630000261d929091169063dfd5946590602401630000fa36565b6001546040517f4c63e56200000000000000000000000000000000000000000000000000000000815261ffff83161515600482015273ffffffffffffffffffffffffffffffffffffffff90911690634c63e56290602401600060405180830381600087803b158015630000fd9557600080fd5b505af1158015630000fdab573d6000803e3d6000fd5b50506001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b158015630000fe3057600080fd5b505af1158015630000fe46573d6000803e3d6000fd5b5050600480546040517f9c55a0540000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff9281019290925273ffffffffffffffffffffffffffffffffffffffff169250639c55a0549150602401600060405180830381600087803b158015630000fec857600080fd5b505af1158015630000fede573d6000803e3d6000fd5b50506001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b158015630000ff6357600080fd5b505af1158015630000ff79573d6000803e3d6000fd5b5050600480546040517f9f1c50690000000000000000000000000000000000000000000000000000000081526001928101929092526bffffffffffffffffffffffff602483015273ffffffffffffffffffffffffffffffffffffffff169250639f1c50699150604401600060405180830381600087803b158015630000fffe57600080fd5b505af11580156300010014573d6000803e3d6000fd5b5050600054600254604080517f570a7af200000000000000000000000000000000000000000000000000000000815290516201000090930473ffffffffffffffffffffffffffffffffffffffff908116955063eebab8ef945060019392169163570a7af2916004808201926020929091908290030181865afa15801563000100a0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000100c89190630001a1b5565b6bffffffffffffffffffffffff6040518463ffffffff1660e01b815260040163000100f793929190630001ab42565b600060405180830381600087803b158015630001011357600080fd5b505af11580156300010129573d6000803e3d6000fd5b5050505060006124548261ffff16600763000101479190630001a6b6565b108015915063000101fa576001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f532e7bb600000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063c31eb0e090602401600060405180830381600087803b15801563000101df57600080fd5b505af115801563000101f5573d6000803e3d6000fd5b505050505b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b158015630001027b57600080fd5b505af11580156300010291573d6000803e3d6000fd5b505060035473ffffffffffffffffffffffffffffffffffffffff169150636c8f225d905063000102cd670de0b6b3a7640000614e20630001a6b6565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b168152600481019190915273f39fd6e51aad88f6f4ce6ab8827279cfffb92266602482015261ffff8516604482015260176064820152608401600060405180830381600087803b158015630001034b57600080fd5b505af11580156300010361573d6000803e3d6000fd5b505050508063000074c6576002546040517fe958b70400000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015260009173ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa15801563000103f1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000104199190630001a1b5565b6003546040517fdfd5946500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8084166004830152929350630000936492600192169063dfd5946590602401602060405180830381865afa1580156300010495573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000104bd9190630001a822565b116040518060400160405280600581526020017f4846203c3100000000000000000000000000000000000000000000000000000081525063000175c9565b6003546040517f256ac91500000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015263000105cf9173ffffffffffffffffffffffffffffffffffffffff169063256ac91590602401602060405180830381865afa1580156300010583573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000105ab9190630001a1ea565b6040805160608101909152602e808252911591630005c6f1602083013963000175c9565b63000105db630001766a565b50506003546040517f256ac91500000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015263000010609173ffffffffffffffffffffffffffffffffffffffff169063256ac91590602401602060405180830381865afa1580156300010665573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630001068d9190630001a1ea565b15156001151514604051806060016040528060298152602001630005c5426029913963000175c9565b600063000106c4630001766a565b50600080546040517f67b4264500000000000000000000000000000000000000000000000000000000815292935090916201000090910473ffffffffffffffffffffffffffffffffffffffff16906367b4264590630001072b90600290600401630001a4d2565b602060405180830381865afa158015630001074a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000107729190630001a1b5565b6001546002546040805173ffffffffffffffffffffffffffffffffffffffff878116602483015285811660448084019190915283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f51e3f1600000000000000000000000000000000000000000000000000000000017905291517fbd6af4340000000000000000000000000000000000000000000000000000000081529495509281169363bd6af43493630001084693929092169190600401630001a5dd565b600060405180830381600087803b158015630001086257600080fd5b505af11580156300010878573d6000803e3d6000fd5b5050600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526000602482018190526044820152606481019290925273ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b15801563000108ff57600080fd5b505af11580156300010915573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527fdf498aa1c340e992665d6fb4f3be8436d452c45a630cb6d7fab7963da39bac87935001905060405180910390a16001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b15801563000109eb57600080fd5b505af11580156300010a01573d6000803e3d6000fd5b505060035460408051808201825273ffffffffffffffffffffffffffffffffffffffff9283168082529151928616602484015290935063caa5c23f92506300010a759160208201907fc690908a00000000000000000000000000000000000000000000000000000000906044016300002bdb565b6040518263ffffffff1660e01b81526004016300010a959190630001a69f565b600060405180830381600087803b1580156300010ab157600080fd5b505af11580156300010ac7573d6000803e3d6000fd5b5050505063000074c6600260016300018e46565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637785ff5d6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156300010b4757600080fd5b505af11580156300010b5d573d6000803e3d6000fd5b50505050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156300010bd0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300010bf89190630001a1b5565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283161790556001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f5aa6676700000000000000000000000000000000000000000000000000000000600482015291169063c31eb0e090602401630000423b565b6300010ca7630001766a565b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b1580156300010d2a57600080fd5b505af11580156300010d40573d6000803e3d6000fd5b50506003546040805180820190915273ffffffffffffffffffffffffffffffffffffffff91821680825260065490945063caa5c23f93506300010dec9260208301917f233a8caa0000000000000000000000000000000000000000000000000000000091166300010dbd670de0b6b3a7640000614e20630001a6b6565b60405173ffffffffffffffffffffffffffffffffffffffff909216602483015260448201526064016300002bdb565b6040518263ffffffff1660e01b81526004016300010e0c9190630001a69f565b600060405180830381600087803b1580156300010e2857600080fd5b505af11580156300010e3e573d6000803e3d6000fd5b5050600080546040517f67b4264500000000000000000000000000000000000000000000000000000000815291935062010000900473ffffffffffffffffffffffffffffffffffffffff1691506367b42645906300010ea3906004908101630001a4d2565b602060405180830381865afa1580156300010ec2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300010eea9190630001a1b5565b6001546040805173ffffffffffffffffffffffffffffffffffffffff84811660248084019190915283518084039091018152604490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa5ac53730000000000000000000000000000000000000000000000000000000017905291517ff28dceb300000000000000000000000000000000000000000000000000000000815293945091169163f28dceb3916300010fac91600401630001ac6c565b600060405180830381600087803b1580156300010fc857600080fd5b505af11580156300010fde573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b158015630001106357600080fd5b505af11580156300011079573d6000803e3d6000fd5b50506003546040805180820190915273ffffffffffffffffffffffffffffffffffffffff909116808252925063caa5c23f9150630000527a90602081017f233a8caa00000000000000000000000000000000000000000000000000000000866300010dbd670de0b6b3a7640000614e20630001a6b6565b63000110fc630001766a565b5050600354604080517fcff0ab96000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163cff0ab969160048083019260609291908290030181865afa1580156300011170573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000111989190630001a893565b50506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f675f1a5600000000000000000000000000000000000000000000000000000000600482015291925073ffffffffffffffffffffffffffffffffffffffff169063c31eb0e090602401600060405180830381600087803b158015630001122857600080fd5b505af1158015630001123e573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b15801563000112c357600080fd5b505af115801563000112d9573d6000803e3d6000fd5b505060035473ffffffffffffffffffffffffffffffffffffffff169150632b7c7b119050630001130c836001630001a44f565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526fffffffffffffffffffffffffffffffff9091166004820152602401630000529a565b6300011367630001766a565b505063000113756300018594565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b15801563000113f657600080fd5b505af1158015630001140c573d6000803e3d6000fd5b505060035473ffffffffffffffffffffffffffffffffffffffff16915063caa5c23f90506300011447670de0b6b3a76400006005630001a6b6565b60606040518363ffffffff1660e01b8152600401630000ac999190630001a69f565b630000bc11630001766a565b60006300011483630001766a565b50600080546040517f67b4264500000000000000000000000000000000000000000000000000000000815292935090916201000090910473ffffffffffffffffffffffffffffffffffffffff16906367b426459063000114ea90600290600401630001a4d2565b602060405180830381865afa1580156300011509573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000115319190630001a1b5565b6001546002546040805173ffffffffffffffffffffffffffffffffffffffff878116602483015285811660448084019190915283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f51e3f1600000000000000000000000000000000000000000000000000000000017905291517fbd6af4340000000000000000000000000000000000000000000000000000000081529495509281169363bd6af43493630001160593929092169190600401630001a5dd565b600060405180830381600087803b158015630001162157600080fd5b505af11580156300011637573d6000803e3d6000fd5b5050600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526000602482018190526044820152606481019290925273ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b15801563000116be57600080fd5b505af115801563000116d4573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527fdf498aa1c340e992665d6fb4f3be8436d452c45a630cb6d7fab7963da39bac87935001905060405180910390a16001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa7906024015b600060405180830381600087803b15801563000117ab57600080fd5b505af115801563000117c1573d6000803e3d6000fd5b50506003546040517fc690908a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152909116925063c690908a91506024016300010a95565b6000630001182d630001766a565b50600080546040517f67b4264500000000000000000000000000000000000000000000000000000000815292935090916201000090910473ffffffffffffffffffffffffffffffffffffffff16906367b4264590630001189490600290600401630001a4d2565b602060405180830381865afa15801563000118b3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000118db9190630001a1b5565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015291925073ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b158015630001195d57600080fd5b505af11580156300011973573d6000803e3d6000fd5b50506003546040517fc690908a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152909116925063c690908a9150602401600060405180830381600087803b15801563000119e657600080fd5b505af115801563000119fc573d6000803e3d6000fd5b50506001546002546040805173ffffffffffffffffffffffffffffffffffffffff888116602483015287811660448084019190915283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f0d8f9cee0000000000000000000000000000000000000000000000000000000017905291517fbd6af434000000000000000000000000000000000000000000000000000000008152938216955063bd6af43494506300011ad193919092169190600401630001a5dd565b600060405180830381600087803b1580156300011aed57600080fd5b505af11580156300011b03573d6000803e3d6000fd5b5050600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526000602482018190526044820152606481019290925273ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b1580156300011b8a57600080fd5b505af11580156300011ba0573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527f69db9e9764da61b6681b89fb0f5be018506e0342036e56b59c3015a620d60977935001905060405180910390a16001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b1580156300011c7657600080fd5b505af11580156300011c8c573d6000803e3d6000fd5b505060035460408051808201825273ffffffffffffffffffffffffffffffffffffffff9283168082529151928616602484015290935063caa5c23f92506300011d009160208201907f23e27a6400000000000000000000000000000000000000000000000000000000906044016300002bdb565b6040518263ffffffff1660e01b81526004016300011d209190630001a69f565b600060405180830381600087803b1580156300011d3c57600080fd5b505af11580156300011d52573d6000803e3d6000fd5b5050505063000074c6600260006300018e46565b6300011d72630001766a565b50506001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b1580156300011df557600080fd5b505af11580156300011e0b573d6000803e3d6000fd5b5050600480546040517fffd9b90700000000000000000000000000000000000000000000000000000000815260019281019290925273ffffffffffffffffffffffffffffffffffffffff16925063ffd9b9079150602401600060405180830381600087803b1580156300011e7e57600080fd5b505af11580156300011e94573d6000803e3d6000fd5b50506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f7615238d00000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff909116925063c31eb0e09150602401600060405180830381600087803b1580156300011f2557600080fd5b505af11580156300011f3b573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b1580156300011fc057600080fd5b505af11580156300011fd6573d6000803e3d6000fd5b50506003546040517f2b7c7b110000000000000000000000000000000000000000000000000000000081526001600482015273ffffffffffffffffffffffffffffffffffffffff9091169250632b7c7b11915060240163000025eb565b630001203f6300018594565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b15801563000120c057600080fd5b505af115801563000120d6573d6000803e3d6000fd5b505060035473ffffffffffffffffffffffffffffffffffffffff169150637071b7c590506300012111670de0b6b3a76400006005630001a6b6565b6040805180820190915260035473ffffffffffffffffffffffffffffffffffffffff9081168252600654670de0b6b3a76400009273f39fd6e51aad88f6f4ce6ab8827279cfffb9226692630001219d9260208301917f5978103400000000000000000000000000000000000000000000000000000000918691166004630000c18a89614e20630001a6b6565b60006040518663ffffffff1660e01b8152600401630000ac999493929190630001a6f9565b60008054610100900460ff161563000121e45750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1563000123315760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091630001228f917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc491608001630001ac83565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905263000122cb91630001accf565b6000604051808303816000865af19150503d8060008114630001230c576040519150601f19603f3d011682016040523d82523d6000602084013e6300012311565b606091505b5091505080806020019051810190630001232d9190630001a1ea565b9150505b919050565b6003546040517fd9ccbec100000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660048201527390f79bf6eb2c4f870365e785982e1f101e93b906602482015263000124259173ffffffffffffffffffffffffffffffffffffffff169063d9ccbec1906044015b602060405180830381865afa15801563000123d9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000124019190630001a1ea565b60408051606081019091526021808252911591630005c603602083013963000175c9565b600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526024810183905260006044820152606481019290925273ffffffffffffffffffffffffffffffffffffffff169063491cc7c290608401600060405180830381600087803b15801563000124a857600080fd5b505af115801563000124be573d6000803e3d6000fd5b5050604051600181527390f79bf6eb2c4f870365e785982e1f101e93b906925073f39fd6e51aad88f6f4ce6ab8827279cfffb9226691507f9b3258bc4904fd6426b99843e206c6c7cdb1fd0f040121c25b71dafbb3851ee09060200160405180910390a36001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527390f79bf6eb2c4f870365e785982e1f101e93b906600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b15801563000125a357600080fd5b505af115801563000125b9573d6000803e3d6000fd5b50506003546040517e842b5700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660048201526001602482015273ffffffffffffffffffffffffffffffffffffffff909116925062842b579150604401600060405180830381600087803b158015630001264357600080fd5b505af11580156300012659573d6000803e3d6000fd5b50506003546040517fd9ccbec100000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660048201527390f79bf6eb2c4f870365e785982e1f101e93b90660248201526300012752935073ffffffffffffffffffffffffffffffffffffffff909116915063d9ccbec190604401602060405180830381865afa1580156300012701573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000127299190630001a1ea565b15156001151514604051806060016040528060258152602001630005c5de6025913963000175c9565b600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526024810183905260006044820152606481019290925273ffffffffffffffffffffffffffffffffffffffff169063491cc7c290608401600060405180830381600087803b15801563000127d557600080fd5b505af115801563000127eb573d6000803e3d6000fd5b5050604051600081527390f79bf6eb2c4f870365e785982e1f101e93b906925073f39fd6e51aad88f6f4ce6ab8827279cfffb9226691507f9b3258bc4904fd6426b99843e206c6c7cdb1fd0f040121c25b71dafbb3851ee09060200160405180910390a36001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527390f79bf6eb2c4f870365e785982e1f101e93b906600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b15801563000128d057600080fd5b505af115801563000128e6573d6000803e3d6000fd5b50506003546040517e842b5700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660048201526000602482015273ffffffffffffffffffffffffffffffffffffffff909116925062842b579150604401600060405180830381600087803b158015630001297057600080fd5b505af11580156300012986573d6000803e3d6000fd5b50506003546040517fd9ccbec100000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660048201527390f79bf6eb2c4f870365e785982e1f101e93b90660248201526300001060935073ffffffffffffffffffffffffffffffffffffffff909116915063d9ccbec19060440163000123ba565b60405160206024820152600560448201527f776f726c640000000000000000000000000000000000000000000000000000006064820152600090608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa777d0dc0000000000000000000000000000000000000000000000000000000017905290506300012ad7630001766a565b50506001805473ffffffffffffffffffffffffffffffffffffffff1690631f7b4f30906300012b09904390630001a7b2565b6040518263ffffffff1660e01b81526004016300012b2991815260200190565b600060405180830381600087803b1580156300012b4557600080fd5b505af11580156300012b5b573d6000803e3d6000fd5b50506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f5fb9107f00000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff909116925063c31eb0e09150602401600060405180830381600087803b1580156300012bec57600080fd5b505af11580156300012c02573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b1580156300012c8757600080fd5b505af11580156300012c9d573d6000803e3d6000fd5b50506003546040805180820190915273ffffffffffffffffffffffffffffffffffffffff909116808252602082018590529250635f73fbec91507390f79bf6eb2c4f870365e785982e1f101e93b906906000906001906300012d00906300017e3e565b6040518563ffffffff1660e01b8152600401630000529a9493929190630001aa27565b60006300012d31630001766a565b50905060006300012d4e670de0b6b3a7640000614e20630001a6b6565b6300012d5d906002630001a6b6565b905060006127106300012d7c670de0b6b3a7640000614e20630001a6b6565b6300012d8b906002630001a6b6565b6300012d9b90612454630001a6b6565b6300012da99190630001a775565b6003546040517fc7de38a600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301529293506000928392169063c7de38a6906024016040805180830381865afa1580156300012e20573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300012e489190630001acef565b915091506300012e758285604051806060016040528060218152602001630005c6d0602191396300017618565b6300012e9e81846040518060600160405280602f8152602001630005c645602f91396300017618565b600080546040517f67b426450000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff16906367b42645906300012eff90600290600401630001a4d2565b602060405180830381865afa1580156300012f1e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300012f469190630001a1b5565b6000546040517feebab8ef00000000000000000000000000000000000000000000000000000000815291925062010000900473ffffffffffffffffffffffffffffffffffffffff169063eebab8ef906300012faf906002908a906298968090600401630001a4e4565b600060405180830381600087803b1580156300012fcb57600080fd5b505af11580156300012fe1573d6000803e3d6000fd5b50506003546040517fc7de38a600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a81166004830152909116925063c7de38a691506024016040805180830381865afa1580156300013056573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630001307e9190630001acef565b809350819450505063000130af8386604051806060016040528060218152602001630005c6d0602191396300017618565b63000130d882856040518060600160405280602f8152602001630005c645602f91396300017618565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b158015630001315957600080fd5b505af1158015630001316f573d6000803e3d6000fd5b50506003546040517fc690908a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152909116925063c690908a9150602401600060405180830381600087803b15801563000131e257600080fd5b505af115801563000131f8573d6000803e3d6000fd5b50505050670de0b6b3a7640000600a63000132159190630001a6b6565b63000132239086630001a7b2565b9450612710630001323f670de0b6b3a7640000600a630001a6b6565b630001324f90612328630001a6b6565b630001325d9190630001a775565b630001326b9085630001a7b2565b6003546040517fc7de38a600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015292965091169063c7de38a6906024016040805180830381865afa15801563000132de573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000133069190630001acef565b809350819450505063000133378386604051806060016040528060218152602001630005c56b602191396300017618565b630001336082856040518060600160405280602f8152602001630005c71f602f91396300017618565b630001337e6003630000fbf36064670de0b6b3a7640000630001a775565b63000133956064670de0b6b3a7640000630001a775565b63000133a590610c80630001a6b6565b63000133b39086630001a7b2565b945061271063000133cf6064670de0b6b3a7640000630001a775565b63000133df90610c80630001a6b6565b63000133ef9061206c630001a6b6565b63000133fd9190630001a775565b630001340b9085630001a7b2565b6003546040517fc7de38a600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015292965091169063c7de38a6906024016040805180830381865afa158015630001347e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000134a69190630001acef565b809350819450505063000134d78386604051806060016040528060218152602001630005c624602191396300017618565b630000152d82856040518060600160405280602f8152602001630005c674602f91396300017618565b630001350c630001766a565b50506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fe2b0e50600000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063c31eb0e090602401600060405180830381600087803b158015630001359b57600080fd5b505af115801563000135b1573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b158015630001363657600080fd5b505af1158015630001364c573d6000803e3d6000fd5b50506003805460408051808201825273c4375b7de8af5a38a93548eb8453a498222c4ff2815281518083019092529281527f313233000000000000000000000000000000000000000000000000000000000060208281019190915283015273ffffffffffffffffffffffffffffffffffffffff16925063caa5c23f9150630000d362906300017e3e565b600080546040517f67b426450000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff16906367b4264590630001373790600190600401630001a4d2565b602060405180830381865afa1580156300013756573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630001377e9190630001a1b5565b600080546040517f67b4264500000000000000000000000000000000000000000000000000000000815292935090916201000090910473ffffffffffffffffffffffffffffffffffffffff16906367b426459063000137e490600690600401630001a4d2565b602060405180830381865afa1580156300013803573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630001382b9190630001a1b5565b6001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f5d2e3a7400000000000000000000000000000000000000000000000000000000600482015291925073ffffffffffffffffffffffffffffffffffffffff169063c31eb0e090602401600060405180830381600087803b15801563000138b957600080fd5b505af115801563000138cf573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b158015630001395457600080fd5b505af1158015630001396a573d6000803e3d6000fd5b50506003546040517fe1f21c6700000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff2600482015273ffffffffffffffffffffffffffffffffffffffff868116602483015260016044830152909116925063e1f21c679150606401600060405180830381600087803b15801563000139fe57600080fd5b505af11580156300013a14573d6000803e3d6000fd5b50506001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b1580156300013a9957600080fd5b505af11580156300013aaf573d6000803e3d6000fd5b5050600480546008546009546040517f7bccacee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283169481019490945281166024840152169250637bccacee9150604401600060405180830381600087803b1580156300013b3057600080fd5b505af11580156300013b46573d6000803e3d6000fd5b50506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb5ba4c4d00000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff909116925063c31eb0e09150602401600060405180830381600087803b1580156300013bd757600080fd5b505af11580156300013bed573d6000803e3d6000fd5b50506001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527390f79bf6eb2c4f870365e785982e1f101e93b906600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b1580156300013c7257600080fd5b505af11580156300013c88573d6000803e3d6000fd5b50506003546008546040517fe1f21c6700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201528682166024820152600160448201529116925063e1f21c679150606401600060405180830381600087803b1580156300013d0c57600080fd5b505af11580156300013d22573d6000803e3d6000fd5b505050506300013d32630001766a565b50506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f700ca0af00000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063c31eb0e090602401600060405180830381600087803b1580156300013dc157600080fd5b505af11580156300013dd7573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b1580156300013e5c57600080fd5b505af11580156300013e72573d6000803e3d6000fd5b50506003546008546040517fe1f21c6700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201528582166024820152600160448201529116925063e1f21c67915060640163000014fb565b60006300013eef630001766a565b506001546002546040805173ffffffffffffffffffffffffffffffffffffffff85811660248301526102006044830152600060648084019190915283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f94cf073a0000000000000000000000000000000000000000000000000000000017905291517fbd6af4340000000000000000000000000000000000000000000000000000000081529495509281169363bd6af434936300013fcb93929092169190600401630001a5dd565b600060405180830381600087803b1580156300013fe757600080fd5b505af11580156300013ffd573d6000803e3d6000fd5b50506001546002546040805173ffffffffffffffffffffffffffffffffffffffff87811660248084019190915283518084039091018152604490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f953730180000000000000000000000000000000000000000000000000000000017905291517fbd6af434000000000000000000000000000000000000000000000000000000008152938216955063bd6af434945063000140ca93919092169190600401630001a5dd565b600060405180830381600087803b15801563000140e657600080fd5b505af115801563000140fc573d6000803e3d6000fd5b5050600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526000602482018190526044820152606481019290925273ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b158015630001418357600080fd5b505af11580156300014199573d6000803e3d6000fd5b5050604051610200815273f39fd6e51aad88f6f4ce6ab8827279cfffb9226692507f98274bf834d179ee08dc0604071b0dc90b54731bd5f725a5a96a39a86bce025a915060200160405180910390a26001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b158015630001426957600080fd5b505af1158015630001427f573d6000803e3d6000fd5b50506003546040517f2a7ba1f7000000000000000000000000000000000000000000000000000000008152610200600482015273ffffffffffffffffffffffffffffffffffffffff9091169250632a7ba1f79150602401630000529a565b63000142e9630001766a565b50506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fc0b0caa800000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063c31eb0e090602401600060405180830381600087803b158015630001437857600080fd5b505af1158015630001438e573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b158015630001441357600080fd5b505af11580156300014429573d6000803e3d6000fd5b505060035460408051808201825273ffffffffffffffffffffffffffffffffffffffff9092168083529051610100602482015290935063caa5c23f9250630000d362919060208201907f2b7c7b110000000000000000000000000000000000000000000000000000000090604401630000391f565b600080546040517f67b426450000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff16906367b426459063000144ff90600690600401630001a4d2565b602060405180830381865afa158015630001451e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000145469190630001a1b5565b6003546040517ff9eaee0d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80841660048301529293506300014628929091169063f9eaee0d906024015b602060405180830381865afa15801563000145c2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000145ea9190630001a1ea565b60408051808201909152601b81527f73744554482073686f756c64206265206e6f7420616c6c6f7765640000000000602082015290159063000175c9565b6001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b15801563000146a957600080fd5b505af115801563000146bf573d6000803e3d6000fd5b5050600480546040517f3e7c88d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811693820193909352612454602482015291169250633e7c88d69150604401600060405180830381600087803b158015630001473c57600080fd5b505af11580156300014752573d6000803e3d6000fd5b50506003546040517ff9eaee0d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152630001483a9450909116915063f9eaee0d90602401602060405180830381865afa15801563000147ce573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000147f69190630001a1ea565b151560011515146040518060400160405280601781526020017f73744554482073686f756c6420626520616c6c6f77656400000000000000000081525063000175c9565b6001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b15801563000148bb57600080fd5b505af115801563000148d1573d6000803e3d6000fd5b5050600480546040517f2414770800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116938201939093529116925063241477089150602401600060405180830381600087803b158015630001494657600080fd5b505af1158015630001495c573d6000803e3d6000fd5b50506003546040517ff9eaee0d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301526300002ce09450909116915063f9eaee0d9060240163000145a3565b63000149cc630001766a565b5050600354604080517f860aefcf000000000000000000000000000000000000000000000000000000008152815160009373ffffffffffffffffffffffffffffffffffffffff169263860aefcf92600480820193918290030181865afa1580156300014a3c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300014a649190630001a3ac565b50905060006fffffffffffffffffffffffffffffffff82166300014a94670de0b6b3a7640000614e20630001a6b6565b6300014aa29190630001a7d0565b6300014ab1906001630001a7b2565b600054600554604080517f6b70b04c000000000000000000000000000000000000000000000000000000008152905193945073ffffffffffffffffffffffffffffffffffffffff6201000090930483169363eebab8ef936001931691636b70b04c9160048083019260209291908290030181865afa1580156300014b39573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300014b619190630001a1b5565b846040518463ffffffff1660e01b81526004016300014b8493929190630001a4e4565b600060405180830381600087803b1580156300014ba057600080fd5b505af11580156300014bb6573d6000803e3d6000fd5b50506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fce16799400000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff909116925063c31eb0e09150602401600060405180830381600087803b1580156300014c4757600080fd5b505af11580156300014c5d573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b1580156300014ce257600080fd5b505af11580156300014cf8573d6000803e3d6000fd5b50506003546040517f2a7ba1f70000000000000000000000000000000000000000000000000000000081526004810185905273ffffffffffffffffffffffffffffffffffffffff9091169250632a7ba1f7915060240163000014fb565b600354604080517fc12c21c000000000000000000000000000000000000000000000000000000000815290516300014e499273ffffffffffffffffffffffffffffffffffffffff169163c12c21c09160048083019260209291908290030181865afa1580156300014dca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300014df29190630001a1b5565b60025460408051808201909152601781527f496e636f7272656374206372656469744d616e61676572000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff90911690630001754b565b600354604080517f6f307dc300000000000000000000000000000000000000000000000000000000815290516300014f3d9273ffffffffffffffffffffffffffffffffffffffff1691636f307dc39160048083019260209291908290030181865afa1580156300014ebe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300014ee69190630001a1b5565b60065460408051808201909152601a81527f496e636f727265637420756e6465726c79696e6720746f6b656e000000000000602082015273ffffffffffffffffffffffffffffffffffffffff90911690630001754b565b600354604080517f4f0e0ef3000000000000000000000000000000000000000000000000000000008152905163000150ae9273ffffffffffffffffffffffffffffffffffffffff1691634f0e0ef39160048083019260209291908290030181865afa1580156300014fb2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300014fda9190630001a1b5565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634f0e0ef36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156300015049573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000150719190630001a1b5565b6040518060400160405280601b81526020017f496e636f727265637420776574684164647265737320746f6b656e0000000000815250630001754b565b600354604080517f9408b63f0000000000000000000000000000000000000000000000000000000081529051630001518a9273ffffffffffffffffffffffffffffffffffffffff1691639408b63f9160048083019260209291908290030181865afa1580156300015123573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630001514b9190630001a1b5565b60006040518060400160405280601281526020017f496e636f727265637420646567656e4e46540000000000000000000000000000815250630001754b565b600354604080517f3d9287fa000000000000000000000000000000000000000000000000000000008152905163000152659273ffffffffffffffffffffffffffffffffffffffff1691633d9287fa9160048083019260209291908290030181865afa15801563000151ff573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000152279190630001a1ea565b60408051808201909152601581527f496e636f72726563742077686974656c69737465640000000000000000000000602082015290159063000175c9565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637785ff5d6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801563000152d157600080fd5b505af115801563000152e7573d6000803e3d6000fd5b50505050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa158015630001535a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000153829190630001a1b5565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169182179055604080517f9408b63f0000000000000000000000000000000000000000000000000000000081529051630001551e9291639408b63f9160048083019260209291908290030181865afa1580156300015422573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630001544a9190630001a1b5565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639408b63f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801563000154b9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000154e19190630001a1b5565b6040518060400160405280601281526020017f496e636f727265637420646567656e4e46540000000000000000000000000000815250630001754b565b600354604080517f3d9287fa000000000000000000000000000000000000000000000000000000008152905163000010609273ffffffffffffffffffffffffffffffffffffffff1691633d9287fa9160048083019260209291908290030181865afa1580156300015593573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000155bb9190630001a1ea565b151560011515146040518060400160405280601581526020017f496e636f72726563742077686974656c6973746564000000000000000000000081525063000175c9565b60405160206024820152600560448201527f776f726c640000000000000000000000000000000000000000000000000000006064820152600090608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa777d0dc00000000000000000000000000000000000000000000000000000000179052905063000156c0630001766a565b505063000156ce6300017af2565b6001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f5fb9107f00000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063c31eb0e090602401600060405180830381600087803b158015630001575b57600080fd5b505af11580156300015771573d6000803e3d6000fd5b50506001546040517fca669fa7000000000000000000000000000000000000000000000000000000008152733c44cdddb6a900fa2b585dd299e03d12fa4293bc600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b15801563000157f657600080fd5b505af1158015630001580c573d6000803e3d6000fd5b50506003546040805180820190915273ffffffffffffffffffffffffffffffffffffffff909116808252602082018590529250635d91a0e0915073f39fd6e51aad88f6f4ce6ab8827279cfffb92266907390f79bf6eb2c4f870365e785982e1f101e93b90690600a906001906300015885906300017e3e565b6040518663ffffffff1660e01b8152600401630000529a959493929190630001a83d565b600063000158b7630001766a565b50600180546002546040805173ffffffffffffffffffffffffffffffffffffffff8681166024830152610200604483015260648083019690965282518083039096018652608490910182526020850180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f94cf073a0000000000000000000000000000000000000000000000000000000017905290517fbd6af4340000000000000000000000000000000000000000000000000000000081529495509182169363bd6af434936300015991939092169190600401630001a5dd565b600060405180830381600087803b15801563000159ad57600080fd5b505af115801563000159c3573d6000803e3d6000fd5b50506001546002546040805173ffffffffffffffffffffffffffffffffffffffff87811660248084019190915283518084039091018152604490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f953730180000000000000000000000000000000000000000000000000000000017905291517fbd6af434000000000000000000000000000000000000000000000000000000008152938216955063bd6af43494506300015a9093919092169190600401630001a5dd565b600060405180830381600087803b1580156300015aac57600080fd5b505af11580156300015ac2573d6000803e3d6000fd5b5050600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526000602482018190526044820152606481019290925273ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b1580156300015b4957600080fd5b505af11580156300015b5f573d6000803e3d6000fd5b5050604051610200815273f39fd6e51aad88f6f4ce6ab8827279cfffb9226692507f9cac51154cc0d835e2f9c9d1f59a9344588cee107f4203bf58a8c797e3a58c45915060200160405180910390a26001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b1580156300015c2f57600080fd5b505af11580156300015c45573d6000803e3d6000fd5b50506003546040517f2b7c7b11000000000000000000000000000000000000000000000000000000008152610200600482015273ffffffffffffffffffffffffffffffffffffffff9091169250632b7c7b119150602401630000529a565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166354cae56e6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156300015d0f57600080fd5b505af11580156300015d25573d6000803e3d6000fd5b50505050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156300015d98573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300015dc09190630001a1b5565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169190911790556000806300015e14630001766a565b9150915060006300015e266300018346565b6001805491925073ffffffffffffffffffffffffffffffffffffffff9091169063e5d6bf02906300015e5b904290630001a7b2565b6040518263ffffffff1660e01b81526004016300015e7b91815260200190565b600060405180830381600087803b1580156300015e9757600080fd5b505af11580156300015ead573d6000803e3d6000fd5b50506001805473ffffffffffffffffffffffffffffffffffffffff169250631f7b4f3091506300015ee1904390630001a7b2565b6040518263ffffffff1660e01b81526004016300015f0191815260200190565b600060405180830381600087803b1580156300015f1d57600080fd5b505af11580156300015f33573d6000803e3d6000fd5b50506002546040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301526000945084935090911690633192195c906024016040805180830381865afa1580156300015fad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300015fd59190630001acef565b600280546040517f5063524a00000000000000000000000000000000000000000000000000000000815293955091935060009273ffffffffffffffffffffffffffffffffffffffff90921691635063524a91630001603e9189919088908890600401630001ad15565b608060405180830381865afa158015630001605d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000160859190630001ad3f565b505060015460025460035460405173f39fd6e51aad88f6f4ce6ab8827279cfffb92266602482015273ffffffffffffffffffffffffffffffffffffffff9182166044820152939550918216935063bd6af43492911690606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe1998cf9000000000000000000000000000000000000000000000000000000001790525160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526300016190929190600401630001a5dd565b600060405180830381600087803b15801563000161ac57600080fd5b505af115801563000161c2573d6000803e3d6000fd5b5050600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481019290925260006024830181905260448301819052606483015273ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b158015630001624957600080fd5b505af1158015630001625f573d6000803e3d6000fd5b505060405173f39fd6e51aad88f6f4ce6ab8827279cfffb9226692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a260015460025460035460085460405173ffffffffffffffffffffffffffffffffffffffff9485169463bd6af4349481169363000162ec93908216929116908a90602401630001a96a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ce4074a000000000000000000000000000000000000000000000000000000001790525160e084901b7fffffffff00000000000000000000000000000000000000000000000000000000168152630001639e929190600401630001a5dd565b600060405180830381600087803b15801563000163ba57600080fd5b505af115801563000163d0573d6000803e3d6000fd5b5050600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526024810192909252600060448301819052606483015273ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b158015630001645757600080fd5b505af1158015630001646d573d6000803e3d6000fd5b505060085460035460405173ffffffffffffffffffffffffffffffffffffffff9283169450911691507faed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab0390600090a360015460085460405173ffffffffffffffffffffffffffffffffffffffff9283169263bd6af434928a927f1cff79cd0000000000000000000000000000000000000000000000000000000092630001651c9216908a90602401630001a5dd565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b909216825263000165b19291600401630001a5dd565b600060405180830381600087803b15801563000165cd57600080fd5b505af115801563000165e3573d6000803e3d6000fd5b50506001546008546040517fbd6af43400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316945063bd6af4349350630001664892909116908890600401630001a5dd565b600060405180830381600087803b158015630001666457600080fd5b505af1158015630001667a573d6000803e3d6000fd5b50506001546040517f491cc7c20000000000000000000000000000000000000000000000000000000081526000600482018190526024820181905260448201819052606482015273ffffffffffffffffffffffffffffffffffffffff909116925063491cc7c29150608401600060405180830381600087803b158015630001670157600080fd5b505af11580156300016717573d6000803e3d6000fd5b50506040517f60c8e8938c9a0c0d88a98d6f1c562ce68077e12bf3edb8047378f2f736cb45b4925060009150a160015460025460035460405173ffffffffffffffffffffffffffffffffffffffff918216602482015273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660448201529281169263bd6af434929190911690606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe1998cf9000000000000000000000000000000000000000000000000000000001790525160e084901b7fffffffff00000000000000000000000000000000000000000000000000000000168152630001684b929190600401630001a5dd565b600060405180830381600087803b158015630001686757600080fd5b505af1158015630001687d573d6000803e3d6000fd5b505060018054600280546040518b965073ffffffffffffffffffffffffffffffffffffffff938416955063bd6af4349491909316927f2362a2d80000000000000000000000000000000000000000000000000000000092630001692b9273f39fd6e51aad88f6f4ce6ab8827279cfffb92266928991733c44cdddb6a900fa2b585dd299e03d12fa4293bc917390f79bf6eb2c4f870365e785982e1f101e93b90691600a91602401630001ac09565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b909216825263000169c09291600401630001a5dd565b600060405180830381600087803b15801563000169dc57600080fd5b505af115801563000169f2573d6000803e3d6000fd5b5050600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526024810183905260448101839052606481019290925273ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b1580156300016a7957600080fd5b505af11580156300016a8f573d6000803e3d6000fd5b50506040518481527390f79bf6eb2c4f870365e785982e1f101e93b9069250733c44cdddb6a900fa2b585dd299e03d12fa4293bc915073f39fd6e51aad88f6f4ce6ab8827279cfffb92266907ffada13ff2d5e1a1d9da37ad4a4130893b34e3c69c32b17f87ec31fd661b867079060200160405180910390a46001546040517fca669fa7000000000000000000000000000000000000000000000000000000008152733c44cdddb6a900fa2b585dd299e03d12fa4293bc600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b1580156300016b8957600080fd5b505af11580156300016b9f573d6000803e3d6000fd5b50506003546040805180820190915260095473ffffffffffffffffffffffffffffffffffffffff9081168252602082018a905290911692506382871ace915073f39fd6e51aad88f6f4ce6ab8827279cfffb92266907390f79bf6eb2c4f870365e785982e1f101e93b90690600a906001906300016c1d906300017e3e565b6040518663ffffffff1660e01b81526004016300016c41959493929190630001a83d565b600060405180830381600087803b1580156300016c5d57600080fd5b505af11580156300016c73573d6000803e3d6000fd5b5050505050505050505050565b60006300016c8e630001766a565b50600080546040517f67b4264500000000000000000000000000000000000000000000000000000000815292935090916201000090910473ffffffffffffffffffffffffffffffffffffffff16906367b42645906300016cf590600290600401630001a4d2565b602060405180830381865afa1580156300016d14573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300016d3c9190630001a1b5565b90506300016d4e600260006300018e46565b6000546040517feebab8ef0000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff169063eebab8ef906300016db3906002908690606490600401630001a4e4565b600060405180830381600087803b1580156300016dcf57600080fd5b505af11580156300016de5573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401630001178f565b60006300016e63630001766a565b506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015291925073ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b1580156300016ee657600080fd5b505af11580156300016efc573d6000803e3d6000fd5b50506003546040517e842b570000000000000000000000000000000000000000000000000000000081527390f79bf6eb2c4f870365e785982e1f101e93b90660048201526001602482015273ffffffffffffffffffffffffffffffffffffffff909116925062842b579150604401600060405180830381600087803b1580156300016f8657600080fd5b505af11580156300016f9c573d6000803e3d6000fd5b505050506300016fb0600260006300018e46565b600080546040517f67b426450000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff16906367b4264590630001701190600290600401630001a4d2565b602060405180830381865afa1580156300017030573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000170589190630001a1b5565b6000546040517feebab8ef00000000000000000000000000000000000000000000000000000000815291925062010000900473ffffffffffffffffffffffffffffffffffffffff169063eebab8ef9063000170d4906002907390f79bf6eb2c4f870365e785982e1f101e93b9069061020090600401630001a4e4565b600060405180830381600087803b15801563000170f057600080fd5b505af11580156300017106573d6000803e3d6000fd5b5050600054600280546040517f88f776a200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff62010000909404841695506388f776a294506300017184937390f79bf6eb2c4f870365e785982e1f101e93b906921690600401630001a51d565b600060405180830381600087803b15801563000171a057600080fd5b505af115801563000171b6573d6000803e3d6000fd5b5050600154600254604080517390f79bf6eb2c4f870365e785982e1f101e93b906602482015273ffffffffffffffffffffffffffffffffffffffff888116604483015287811660648301526102006084808401919091528351808403909101815260a490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f830aa7450000000000000000000000000000000000000000000000000000000017905291517fbd6af434000000000000000000000000000000000000000000000000000000008152938216955063bd6af434945063000172ad93919092169190600401630001a5dd565b600060405180830381600087803b15801563000172c957600080fd5b505af115801563000172df573d6000803e3d6000fd5b5050600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526024810183905260006044820152606481019290925273ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b158015630001736657600080fd5b505af1158015630001737c573d6000803e3d6000fd5b5050604051610200815273ffffffffffffffffffffffffffffffffffffffff8416925073f39fd6e51aad88f6f4ce6ab8827279cfffb9226691507fa32435755c235de2976ed44a75a2f85cb01faf0c894f639fe0c32bb9455fea8f9060200160405180910390a36001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527390f79bf6eb2c4f870365e785982e1f101e93b906600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b158015630001746457600080fd5b505af1158015630001747a573d6000803e3d6000fd5b50506003546040517f5978103400000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff85811660248301526102006044830152909116925063597810349150606401600060405180830381600087803b158015630001750f57600080fd5b505af11580156300017525573d6000803e3d6000fd5b50505050630001753b6002836102006300018e64565b63000074c6600260016300018e46565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146300009364577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf35838160405163000175b39190630001ad77565b60405180910390a1630000936483836300018e83565b8163000074c6577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf35838160405163000176039190630001ad77565b60405180910390a163000074c6826300018fc9565b8183146300009364577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf35838160405163000176549190630001ad77565b60405180910390a1630000936483836300019045565b6000806000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635f7c9bd06040518163ffffffff1660e01b8152600401602060405180830381865afa15801563000176de573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000177069190630001a822565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015291925073ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b158015630001778857600080fd5b505af1158015630001779e573d6000803e3d6000fd5b50506003546040517f6c8f225d0000000000000000000000000000000000000000000000000000000081526004810185905273f39fd6e51aad88f6f4ce6ab8827279cfffb92266602482015260646044820181905260009082015273ffffffffffffffffffffffffffffffffffffffff9091169250636c8f225d9150608401600060405180830381600087803b158015630001783957600080fd5b505af1158015630001784f573d6000803e3d6000fd5b50506002546040517fe958b70400000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063e958b7049150602401602060405180830381865afa15801563000178d7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000178ff9190630001a1b5565b6006546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80841660048301529295509116906370a0823190602401602060405180830381865afa1580156300017973573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630001799b9190630001a822565b600154604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301526024820192909252600d60448201527f6372656469744163636f756e74000000000000000000000000000000000000006064820152929450169063c657c71890608401600060405180830381600087803b1580156300017a4157600080fd5b505af11580156300017a57573d6000803e3d6000fd5b50505050509091565b6040805160028082526060828101909352816020015b6040805180820190915260008152606060208201528152602001906001900390816300017a7657905050905082816000815181106300017abc576300017abc630001a35b565b602002602001018190525081816001815181106300017ae1576300017ae1630001a35b565b602002602001018190525092915050565b6001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b1580156300017b7357600080fd5b505af11580156300017b89573d6000803e3d6000fd5b5050600480546040517ff206d32a0000000000000000000000000000000000000000000000000000000081526103e89281019290925260c86024830152612328604483015260648083015261251c608483015273ffffffffffffffffffffffffffffffffffffffff16925063f206d32a915060a401600060405180830381600087803b1580156300017c1a57600080fd5b505af11580156300017c30573d6000803e3d6000fd5b50506001805473ffffffffffffffffffffffffffffffffffffffff169250631f7b4f3091506300017c64904390630001a7b2565b6040518263ffffffff1660e01b815260040163000025eb91815260200190565b630000936483838360405180602001604052806000815250630001914b565b6001805460609173ffffffffffffffffffffffffffffffffffffffff90911690631f7b4f30906300017cd8904390630001a7b2565b6040518263ffffffff1660e01b81526004016300017cf891815260200190565b600060405180830381600087803b1580156300017d1457600080fd5b505af11580156300017d2a573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b1580156300017daf57600080fd5b505af11580156300017dc5573d6000803e3d6000fd5b50506003546040517f5f73fbec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169250635f73fbec9150630000529a907390f79bf6eb2c4f870365e785982e1f101e93b9069060009081908790600401630001aa27565b604080516001808252818301909252606091816020015b6040805180820190915260008152606060208201528152602001906001900390816300017e5557905050905081816000815181106300017e9b576300017e9b630001a35b565b6020026020010181905250919050565b600080546040517f67b426450000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff16906367b42645906300017f0c90600390600401630001a4d2565b602060405180830381865afa1580156300017f2b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300017f539190630001a1b5565b6001546040517f06447d5600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529293509116906306447d5690602401600060405180830381600087803b1580156300017fc457600080fd5b505af11580156300017fda573d6000803e3d6000fd5b5050505073ffffffffffffffffffffffffffffffffffffffff82163115630001807a578073ffffffffffffffffffffffffffffffffffffffff1663d0e30db08373ffffffffffffffffffffffffffffffffffffffff16316040518263ffffffff1660e01b81526004016000604051808303818588803b158015630001805e57600080fd5b505af11580156300018074573d6000803e3d6000fd5b50505050505b6000546040517f8832786300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8084169263a9059cbb923092620100009092049091169063883278639063000180ea906003908990600401630001a7ed565b602060405180830381865afa1580156300018109573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000181319190630001a822565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af115801563000181a3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000181cb9190630001a1ea565b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015630001823857600080fd5b505af1158015630001824e573d6000803e3d6000fd5b50505050630001826360038360006300018e64565b60015473ffffffffffffffffffffffffffffffffffffffff1663c88a5e6d836300018299670de0b6b3a76400006005630001a6b6565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff9092166004830152602482015260440163000014fb565b63000183176003826300018310670de0b6b3a76400006005630001a6b6565b6300018e64565b6300002ce08160006300019313565b630000261d84848484604051806020016040528060008152506300019331565b6001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015260609173ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b15801563000183c857600080fd5b505af115801563000183de573d6000803e3d6000fd5b5050600480546008546009546040517f7bccacee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283169481019490945281166024840152169250637bccacee9150604401600060405180830381600087803b158015630001845f57600080fd5b505af11580156300018475573d6000803e3d6000fd5b505060405160206024820152600560448201527f776f726c640000000000000000000000000000000000000000000000000000006064820152608401915063000184bc9050565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa777d0dc00000000000000000000000000000000000000000000000000000000179052919050565b630001854583836300019473565b6300009364577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf358381604051630001857e9190630001ad77565b60405180910390a163000093648383630001954a565b630000106073f39fd6e51aad88f6f4ce6ab8827279cfffb922666300017eab565b630000106073f39fd6e51aad88f6f4ce6ab8827279cfffb9226663000182f1565b6000806000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635f7c9bd06040518163ffffffff1660e01b8152600401602060405180830381865afa158015630001864a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000186729190630001a822565b6001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527390f79bf6eb2c4f870365e785982e1f101e93b906600482015291925073ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b15801563000186f457600080fd5b505af1158015630001870a573d6000803e3d6000fd5b50506003546040517f6c8f225d000000000000000000000000000000000000000000000000000000008152600481018590527390f79bf6eb2c4f870365e785982e1f101e93b906602482015260646044820181905260009082015273ffffffffffffffffffffffffffffffffffffffff9091169250636c8f225d9150608401600060405180830381600087803b15801563000187a557600080fd5b505af115801563000187bb573d6000803e3d6000fd5b50506002546040517fe958b7040000000000000000000000000000000000000000000000000000000081527390f79bf6eb2c4f870365e785982e1f101e93b906600482015273ffffffffffffffffffffffffffffffffffffffff909116925063e958b7049150602401602060405180830381865afa1580156300018843573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630001886b9190630001a1b5565b6006546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80841660048301529295509116906370a0823190602401602060405180830381865afa15801563000188df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000189079190630001a822565b9150509091565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663406c8e2f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015630001897d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000189a59190630001a1b5565b73ffffffffffffffffffffffffffffffffffffffff1663eebab8ef8373f39fd6e51aad88f6f4ce6ab8827279cfffb92266846040518463ffffffff1660e01b815260040163000189f993929190630001a4e4565b600060405180830381600087803b1580156300018a1557600080fd5b505af11580156300018a2b573d6000803e3d6000fd5b50506001546040517f06447d5600000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff90911692506306447d569150602401600060405180830381600087803b1580156300018ab057600080fd5b505af11580156300018ac6573d6000803e3d6000fd5b50505050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663406c8e2f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156300018b39573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300018b619190630001a1b5565b73ffffffffffffffffffffffffffffffffffffffff166367b42645836040518263ffffffff1660e01b81526004016300018b9d9190630001a4d2565b602060405180830381865afa1580156300018bbc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300018be49190630001a1b5565b6002546040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602482015291169063095ea7b3906044016020604051808303816000875af11580156300018c7d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300018ca59190630001a1ea565b50600354600554604080517f406c8e2f000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169363597810349373f39fd6e51aad88f6f4ce6ab8827279cfffb922669391169163406c8e2f916004808201926020929091908290030181865afa1580156300018d3a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300018d629190630001a1b5565b73ffffffffffffffffffffffffffffffffffffffff166367b42645866040518263ffffffff1660e01b81526004016300018d9e9190630001a4d2565b602060405180830381865afa1580156300018dbd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300018de59190630001a1b5565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604481018490526064016300004736565b63000074c6828260405180602001604052806000815250630001965b565b6300009364838383604051806020016040528060008152506300019784565b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161463000074c6577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f506040516300018f3f9060208082526025908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b61646460408201527f726573735d000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f816040516300018f7a9190630001adc2565b60405180910390a17f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f826040516300018fb59190630001ae25565b60405180910390a163000074c663000198c2565b806300002ce0577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f5060405163000190319060208082526017908201527f4572726f723a20417373657274696f6e204661696c6564000000000000000000604082015260600190565b60405180910390a16300002ce063000198c2565b80821463000074c6577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f5060405163000190d59060208082526022908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b75696e60408201527f745d000000000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a88160405163000191109190630001ae64565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a8826040516300018fb59190630001aeb1565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600091908616906370a0823190602401602060405180830381865afa15801563000191bd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000191e59190630001a822565b90508281146300019305577f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f828673ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015630001925f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405263000192a99190810190630001aaef565b60405160200163000192be929190630001aef0565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905263000192fc918790630001af7a565b60405180910390a15b63000052cc81846300019045565b63000074c68282604051806020016040528060008152506300019a4c565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1663000193bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f74657374546f6b656e5375697465206973206e6f74207365740000000000000060448201526064015b60405180910390fd5b6000546040517f67b4264500000000000000000000000000000000000000000000000000000000815263000052cc9162010000900473ffffffffffffffffffffffffffffffffffffffff16906367b42645906300019421908990600401630001a4d2565b602060405180830381865afa1580156300019440573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000194689190630001a1b5565b858585856300019af8565b80518251600191141563000195405760005b835181101563000195385782818151811063000194a85763000194a8630001a35b565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684828151811063000194ed5763000194ed630001a35b565b01602001517fff000000000000000000000000000000000000000000000000000000000000001614630001952057600091505b80630001952e81630001afb6565b9150506300019485565b506300019544565b5060005b92915050565b630001955882826300019473565b63000074c6577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f5060405163000195e59060208082526023908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b62797460408201527f65735d0000000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17fd26e16cad4548705e4c9e2d94f98ee91c289085ee425594fd5635fa2964ccf188160405163000196209190630001aff5565b60405180910390a17fd26e16cad4548705e4c9e2d94f98ee91c289085ee425594fd5635fa2964ccf18826040516300018fb59190630001b04a565b600554604080517f406c8e2f000000000000000000000000000000000000000000000000000000008152905163000093649273ffffffffffffffffffffffffffffffffffffffff169163406c8e2f9160048083019260209291908290030181865afa15801563000196d0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000196f89190630001a1b5565b73ffffffffffffffffffffffffffffffffffffffff166367b42645856040518263ffffffff1660e01b815260040163000197349190630001a4d2565b602060405180830381865afa1580156300019753573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630001977b9190630001a1b5565b83836300019d43565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff16630001980d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f74657374546f6b656e5375697465206973206e6f742073657400000000000000604482015260640163000193b4565b6000546040517f67b42645000000000000000000000000000000000000000000000000000000008152630000261d9162010000900473ffffffffffffffffffffffffffffffffffffffff16906367b42645906300019871908890600401630001a4d2565b602060405180830381865afa1580156300019890573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000198b89190630001a1b5565b848484630001914b565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156300019a1e5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000009282019290925260016060820152600091907f70ca10bbd0dbfd9020a9f4b13402c16cb120705e0d1c0aeab10fa353ae586fc490608001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905263000199979291602001630001ac83565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905263000199d391630001accf565b6000604051808303816000865af19150503d80600081146300019a14576040519150601f19603f3d011682016040523d82523d6000602084013e6300019a19565b606091505b505050505b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055565b73ffffffffffffffffffffffffffffffffffffffff8316318281146300019aea577f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f826040516020016300019aa39190630001b089565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526300019ae1918790630001af7a565b60405180910390a15b630000261d81846300019045565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301526000919087169063dd62ed3e90604401602060405180830381865afa1580156300019b72573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300019b9a9190630001a822565b90508281146300019d35577f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f828773ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156300019c14573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526300019c5e9190810190630001aaef565b6040516020016300019c73929190630001b0f4565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526300019cb1918890630001af7a565b60405180910390a160408051818152600a818301527f207370656e6465723a2000000000000000000000000000000000000000000000606082015273ffffffffffffffffffffffffffffffffffffffff8616602082015290517f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f9181900360800190a15b630000152d81846300019045565b6002546040517fe958b70400000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015260009173ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156300019dc8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300019df09190630001a1b5565b6002546040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015292935060009290911690638991b2f190602401602060405180830381865afa1580156300019e68573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300019e909190630001a822565b6002546040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529091169063f67c5bd090602401602060405180830381865afa1580156300019f02573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300019f2a9190630001a822565b161515905083151581148015906300019f435750825115155b156300019f86577f0b2e13ff20ac7b474198655583edf70dedd2c1dc980e329c4fbb2fc0748b796b836040516300019f7d9190630001ac6c565b60405180910390a15b63000052cc841515821515148673ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156300019fdf573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052630001a0299190810190630001aaef565b83630001a06d576040518060400160405280601981526020017f206e6f7420656e61626c65642061732065787065637465642000000000000000815250630001a0a4565b6040518060400160405280601981526020017f20656e61626c6564206173206e6f7420657870657463746564000000000000008152505b604051602001630001a0b9929190630001b17e565b60405160208183030381529060405263000175c9565b617a5180630001b1e283390190565b62031ed6806300022c3383390190565b6102ba806300054b0983390190565b6118e8806300054dc383390190565b615e978063000566ab83390190565b60008060408385031215630001a13057600080fd5b82359150602083013560ff81168114630001a14a57600080fd5b809150509250929050565b61ffff811681146300002ce057600080fd5b600060208284031215630001a17b57600080fd5b8135630001a18a81630001a155565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146300002ce057600080fd5b600060208284031215630001a1c957600080fd5b8151630001a18a81630001a191565b80518015158114630001233157600080fd5b600060208284031215630001a1fe57600080fd5b630001a18a82630001a1d8565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715630001a28757630001a287630001a20b565b604052919050565b60006020808385031215630001a2a457600080fd5b825167ffffffffffffffff80821115630001a2be57600080fd5b818501915085601f830112630001a2d457600080fd5b815181811115630001a2ec57630001a2ec630001a20b565b8060051b9150630001a301848301630001a23a565b8181529183018401918481019088841115630001a31d57600080fd5b938501935b83851015630001a34f5784519250630001a33d83630001a191565b8282529385019390850190630001a322565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80516fffffffffffffffffffffffffffffffff81168114630001233157600080fd5b60008060408385031215630001a3c157600080fd5b630001a3ce83630001a38a565b9150630001a3e060208401630001a38a565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006fffffffffffffffffffffffffffffffff83811690831681811015630001a44757630001a447630001a3e9565b039392505050565b60006fffffffffffffffffffffffffffffffff808316818516808303821115630001a48057630001a480630001a3e9565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600b8110630001a4ce57630001a4ce630001a489565b9052565b6020810163000195448284630001a4b8565b60608101630001a4f68286630001a4b8565b73ffffffffffffffffffffffffffffffffffffffff93909316602082015260400152919050565b60608101630001a52f8286630001a4b8565b73ffffffffffffffffffffffffffffffffffffffff8085166020840152808416604084015250949350505050565b60005b83811015630001a57c578181015183820152602001630001a560565b83811115630000261d5750506000910152565b60008151808452630001a5ab816020860160208601630001a55d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff83168152604060208201526000630001a6106040830184630001a58f565b949350505050565b600081518084526020808501808196508360051b8101915082860160005b85811015630001a6925782840389528151805173ffffffffffffffffffffffffffffffffffffffff1685528501516040868601819052630001a67c81870183630001a58f565b9a87019a9550505090840190600101630001a636565b5091979650505050505050565b602081526000630001a18a6020830184630001a618565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615630001a6f457630001a6f4630001a3e9565b500290565b84815273ffffffffffffffffffffffffffffffffffffffff84166020820152608060408201526000630001a7326080830185630001a618565b905061ffff8316606083015295945050505050565b73ffffffffffffffffffffffffffffffffffffffff8316815260408101630001a18a6020830184630001a4b8565b600082630001a7ad577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60008219821115630001a7cb57630001a7cb630001a3e9565b500190565b600082821015630001a7e857630001a7e8630001a3e9565b500390565b60408101630001a7ff8285630001a4b8565b73ffffffffffffffffffffffffffffffffffffffff831660208301529392505050565b600060208284031215630001a83657600080fd5b5051919050565b600073ffffffffffffffffffffffffffffffffffffffff8088168352808716602084015250846040830152831515606083015260a06080830152630001a88860a0830184630001a618565b979650505050505050565b600080600060608486031215630001a8aa57600080fd5b630001a8b784630001a38a565b9250630001a8c960208501630001a1d8565b9150604084015164ffffffffff81168114630001a8e557600080fd5b809150509250925092565b6fffffffffffffffffffffffffffffffff8516815273ffffffffffffffffffffffffffffffffffffffff84166020820152608060408201526000630001a7326080830185630001a618565b60008060408385031215630001a95057600080fd5b825167ffffffffffffffff81168114630001a3ce57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff808616835280851660208401525060606040830152630001a9a76060830184630001a58f565b95945050505050565b60038110630001a4ce57630001a4ce630001a489565b73ffffffffffffffffffffffffffffffffffffffff888116825260e0820190630001a9f6602084018a630001a9b0565b60ff97881660408401529586166060830152939094166080850152931660a083015291151560c09091015292915050565b73ffffffffffffffffffffffffffffffffffffffff851681528360208201528215156040820152608060608201526000630001aa686080830184630001a618565b9695505050505050565b600067ffffffffffffffff831115630001aa9257630001aa92630001a20b565b630001aac760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f86011601630001a23a565b9050828152838383011115630001aadd57600080fd5b630001a18a836020830184630001a55d565b600060208284031215630001ab0357600080fd5b815167ffffffffffffffff811115630001ab1c57600080fd5b8201601f81018413630001ab2f57600080fd5b630001a61084825160208401630001aa72565b60608101630001ab548286630001a4b8565b73ffffffffffffffffffffffffffffffffffffffff841660208301526bffffffffffffffffffffffff83166040830152949350505050565b60008060408385031215630001aba157600080fd5b8251630001abb081630001a191565b6020840151909250630001a14a81630001a155565b600060208284031215630001abd957600080fd5b8151630001a18a81630001a155565b600061ffff83811690831681811015630001a44757630001a447630001a3e9565b73ffffffffffffffffffffffffffffffffffffffff888116825260e0820190630001ac39602084018a630001a9b0565b6040830197909752948616606082015292909416608083015260ff1660a082015291151560c09092019190915292915050565b602081526000630001a18a6020830184630001a58f565b7fffffffff000000000000000000000000000000000000000000000000000000008316815260008251630001acc1816004850160208701630001a55d565b919091016004019392505050565b60008251630001ace5818460208701630001a55d565b9190910192915050565b60008060408385031215630001ad0457600080fd5b505080516020909101519092909150565b84815260808101630001ad2d6020830186630001a9b0565b60408201939093526060015292915050565b60008060008060808587031215630001ad5757600080fd5b505082516020840151604085015160609095015191969095509092509050565b60408152600560408201527f4572726f720000000000000000000000000000000000000000000000000000006060820152608060208201526000630001a18a6080830184630001a58f565b604081526000630001ae0160408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b905073ffffffffffffffffffffffffffffffffffffffff8316602083015292915050565b604081526000630001ae0160408301600a81527f2020202041637475616c00000000000000000000000000000000000000000000602082015260400190565b604081526000630001aea360408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b905082602083015292915050565b604081526000630001aea360408301600a81527f2020202041637475616c00000000000000000000000000000000000000000000602082015260400190565b60008351630001af06818460208801630001a55d565b7f496e636f727265637420000000000000000000000000000000000000000000009083019081528351630001af4481600a840160208801630001a55d565b7f2062616c616e6365206f6e206163636f756e743a200000000000000000000000600a9290910191820152601f01949350505050565b604081526000630001af916040830185630001a58f565b905073ffffffffffffffffffffffffffffffffffffffff831660208301529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415630001afee57630001afee630001a3e9565b5060010190565b604081526000630001b03460408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b8281036020840152630001a6108185630001a58f565b604081526000630001b03460408301600a81527f2020202041637475616c00000000000000000000000000000000000000000000602082015260400190565b60008251630001b09f818460208701630001a55d565b7f496e636f7272656374204554482062616c616e6365206f6e206163636f756e749201918252507f3a200000000000000000000000000000000000000000000000000000000000006020820152602201919050565b60008351630001b10a818460208801630001a55d565b7f496e636f727265637420000000000000000000000000000000000000000000009083019081528351630001b14881600a840160208801630001a55d565b7f20416c6c6f77616e6365206f6e206163636f756e743a20200000000000000000600a9290910191820152602201949350505050565b7f546f6b656e200000000000000000000000000000000000000000000000000000815260008351630001b1ba816006850160208801630001a55d565b835190830190630001b1d5816006840160208801630001a55d565b0160060194935050505056fe60806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d00011790553480156200003a57600080fd5b506040805161018081019091526000908060c081018060018152604080518082018252600381526244414960e81b6020828101919091528301526012908201526305f5e100606082015260800160018152602001600081525081526020016040518060c001604052806002600a811115620000b957620000b962000b78565b815260408051808201825260048152635553444360e01b6020828101919091528301526006908201526305f5e100606082015260800160018152602001600081525081526020016040518060c001604052806003600a81111562000121576200012162000b78565b815260408051808201825260048152630ae8aa8960e31b602082810191909152830152601290820152644a817c8000606082015260800160028152602001600081525081526020016040518060c001604052806004600a8111156200018a576200018a62000b78565b815260408051808201825260048152634c494e4b60e01b6020828101919091528301526012908201526359682f00606082015260800160018152602001600081525081526020016040518060c001604052806005600a811115620001f257620001f262000b78565b815260408051808201825260048152631554d11560e21b602082810191909152830152601290820152633b023380606082015260800160018152602001600081525081526020016040518060c001604052806006600a8111156200025a576200025a62000b78565b815260408051808201825260058152640e6e88aa8960db1b602082810191909152830152601290820152644cd588640060608201526080016003815260200160009052905260408051610140810190915290915060009080608081018060078152602001604051806040016040528060048152602001636344414960e01b8152508152602001601260ff1681526020016305f5e100815260200160048081111562000309576200030962000b78565b8152602001600181525081526020016040518060c001604052806008600a81111562000339576200033962000b78565b81526040805180820182526005815264635553444360d81b6020828101919091528301526006908201526305f5e100606082015260800160048152602001600281525081526020016040518060c001604052806009600a811115620003a257620003a262000b78565b8152604080518082018252600581526418d554d11560da1b602082810191909152830152601290820152633b023380606082015260800160048152602001600581525081526020016040518060c00160405280600a808111156200040a576200040a62000b78565b81526040805180820182526005815264634c494e4b60d81b6020828101919091528301526012908201526359682f00606082015260800160048152602001600490529052905060005b600681101562000496576200048183826006811062000476576200047662000b8e565b6020020151620004db565b806200048d8162000ba4565b91505062000453565b5060005b6004811015620004d257620004bd82826004811062000476576200047662000b8e565b80620004c98162000ba4565b9150506200049a565b50505062000d14565b6000600282608001516004811115620004f857620004f862000b78565b14156200054e576040516200050d9062000a8c565b604051809103906000f0801580156200052a573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b03831617905590506200071e565b60038260800151600481111562000569576200056962000b78565b1415620005a4576040516200057e9062000a9a565b604051809103906000f0801580156200059b573d6000803e3d6000fd5b5090506200071e565b600182608001516004811115620005bf57620005bf62000b78565b1415620005f157816020015182602001518360400151604051620005e39062000aa8565b6200057e9392919062000c1e565b6004826080015160048111156200060c576200060c62000b78565b1415620006be576000600260008460a00151600a81111562000632576200063262000b78565b600a81111562000646576200064662000b78565b815260200190815260200160002060009054906101000a90046001600160a01b0316905082602001518360200151846040015183604051620006889062000ab6565b62000697949392919062000c5b565b604051809103906000f080158015620006b4573d6000803e3d6000fd5b509150506200071e565b60405162461bcd60e51b815260206004820152602b60248201527f74657374546f6b656e53756974653a204372656174696e6720756e6b6e6f776e60448201526a20746f6b656e207479706560a81b606482015260840160405180910390fd5b60005460208301516040516318caf8e360e31b8152620100009092046001600160a01b03169163c657c718916200075b9185919060040162000ca9565b600060405180830381600087803b1580156200077657600080fd5b505af11580156200078b573d6000803e3d6000fd5b50505050600082606001516008604051620007a69062000ac4565b91825260ff166020820152604001604051809103906000f080158015620007d1573d6000803e3d6000fd5b50905081600260008560000151600a811115620007f257620007f262000b78565b600a81111562000806576200080662000b78565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055508260600151600560008560000151600a8111156200085a576200085a62000b78565b600a8111156200086e576200086e62000b78565b8152602080820192909252604090810160009081209390935585516001600160a01b03861684526008909252909120805460ff1916600183600a811115620008ba57620008ba62000b78565b02179055508260800151600360008560000151600a811115620008e157620008e162000b78565b600a811115620008f557620008f562000b78565b81526020810191909152604001600020805460ff1916600183600481111562000922576200092262000b78565b0217905550604080518082019091526001600160a01b0380841682528281166020808401918252600780546001810182556000918252945160029095027fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688810180549686166001600160a01b031997881617905592517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c689909301805493909416929094169190911790915584015184519091600491600a811115620009eb57620009eb62000b78565b600a811115620009ff57620009ff62000b78565b8152602001908152602001600020908051906020019062000a2292919062000ad2565b5080600660008560000151600a81111562000a415762000a4162000b78565b600a81111562000a555762000a5562000b78565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550505050565b610ab1806200285183390190565b611224806200330283390190565b611758806200452683390190565b6117098062005c7e83390190565b6106ca806200738783390190565b82805462000ae09062000cd7565b90600052602060002090601f01602090048101928262000b04576000855562000b4f565b82601f1062000b1f57805160ff191683800117855562000b4f565b8280016001018555821562000b4f579182015b8281111562000b4f57825182559160200191906001019062000b32565b5062000b5d92915062000b61565b5090565b5b8082111562000b5d576000815560010162000b62565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600060001982141562000bc757634e487b7160e01b600052601160045260246000fd5b5060010190565b6000815180845260005b8181101562000bf65760208185018101518683018201520162000bd8565b8181111562000c09576000602083870101525b50601f01601f19169290920160200192915050565b60608152600062000c33606083018662000bce565b828103602084015262000c47818662000bce565b91505060ff83166040830152949350505050565b60808152600062000c70608083018762000bce565b828103602084015262000c84818762000bce565b60ff95909516604084015250506001600160a01b039190911660609091015292915050565b6001600160a01b038316815260406020820181905260009062000ccf9083018462000bce565b949350505050565b600181811c9082168062000cec57607f821691505b6020821081141562000d0e57634e487b7160e01b600052602260045260246000fd5b50919050565b611b2d8062000d246000396000f3fe6080604052600436106101635760003560e01c80638eb86e8b116100c0578063c6c3bbe611610074578063d051a62211610059578063d051a62214610490578063eebab8ef146104b0578063fa7626d4146104d057600080fd5b8063c6c3bbe614610433578063c74912d21461045357600080fd5b80639b140a85116100a55780639b140a85146103e6578063b36ba20814610406578063ba414fa61461040e57600080fd5b80638eb86e8b1461038357806398cdaadf146103a357600080fd5b80636a72bde71161011757806388327863116100fc578063883278631461030857806388f776a2146103365780638a3177a31461035657600080fd5b80636a72bde7146102c45780636ca42ae3146102e657600080fd5b8063440864fa11610148578063440864fa146102025780634b57b0be1461022f57806367b426451461028157600080fd5b806304bc3b1c1461016f57806310c7f0b9146101b557600080fd5b3661016a57005b600080fd5b34801561017b57600080fd5b5061019f61018a3660046116f6565b60086020526000908152604090205460ff1681565b6040516101ac9190611742565b60405180910390f35b3480156101c157600080fd5b506101d56101d036600461175c565b6104ea565b6040805173ffffffffffffffffffffffffffffffffffffffff9384168152929091166020830152016101ac565b34801561020e57600080fd5b5061022261021d366004611784565b610530565b6040516101ac91906117cb565b34801561023b57600080fd5b5060015461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101ac565b34801561028d57600080fd5b5061025c61029c366004611784565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156102d057600080fd5b506102e46102df36600461181c565b6105ca565b005b3480156102f257600080fd5b506102fb610730565b6040516101ac919061186b565b34801561031457600080fd5b506103286103233660046118d4565b6107b5565b6040519081526020016101ac565b34801561034257600080fd5b506102e461035136600461190b565b610888565b34801561036257600080fd5b50610328610371366004611784565b60056020526000908152604090205481565b34801561038f57600080fd5b506102e461039e366004611954565b6108b9565b3480156103af57600080fd5b5061025c6103be366004611784565b60066020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156103f257600080fd5b506102e4610401366004611993565b610a73565b6102e4610b22565b34801561041a57600080fd5b50610423610ba0565b60405190151581526020016101ac565b34801561043f57600080fd5b506102e461044e3660046119b3565b610d00565b34801561045f57600080fd5b5061048361046e366004611784565b60036020526000908152604090205460ff1681565b6040516101ac91906119d3565b34801561049c57600080fd5b506103286104ab36600461190b565b610daf565b3480156104bc57600080fd5b506102e46104cb366004611954565b610e8b565b3480156104dc57600080fd5b506000546104239060ff1681565b600781815481106104fa57600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff91821692501682565b60046020526000908152604090208054610549906119e7565b80601f0160208091040260200160405190810160405280929190818152602001828054610575906119e7565b80156105c25780601f10610597576101008083540402835291602001916105c2565b820191906000526020600020905b8154815290600101906020018083116105a557829003601f168201915b505050505081565b6000546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152620100009092049091169063ca669fa790602401600060405180830381600087803b15801561063e57600080fd5b505af1158015610652573d6000803e3d6000fd5b505050506002600085600a81111561066c5761066c611713565b600a81111561067d5761067d611713565b8152602081019190915260409081016000205490517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490529091169063095ea7b3906044016020604051808303816000875af1158015610705573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107299190611a3b565b5050505050565b60606007805480602002602001604051908101604052809291908181526020016000905b828210156107ac5760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff908116835260019182015416828401529083529092019101610754565b50505050905090565b60006002600084600a8111156107cd576107cd611713565b600a8111156107de576107de611713565b8152602081019190915260409081016000205490517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152909116906370a0823190602401602060405180830381865afa15801561085d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108819190611a5d565b9392505050565b6108b48383837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6105ca565b505050565b60016003600085600a8111156108d1576108d1611713565b600a8111156108e2576108e2611713565b815260208101919091526040016000205460ff16600481111561090757610907611713565b14610999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f74657374546f6b656e53756974653a20547279696e6720746f206275726e206160448201527f206e6f6e2d6e6f726d616c20746f6b656e00000000000000000000000000000060648201526084015b60405180910390fd5b6002600084600a8111156109af576109af611713565b600a8111156109c0576109c0611713565b8152602081019190915260409081016000205490517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526024820184905290911690639dc29fac906044015b6020604051808303816000875af1158015610a49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6d9190611a3b565b50505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604081205460ff169081600a811115610aaf57610aaf611713565b1415610b17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f20746f6b656e2077697468207375636820616464726573730000000000006044820152606401610990565b610a6d818484610888565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015610b8c57600080fd5b505af1158015610729573d6000803e3d6000fd5b60008054610100900460ff1615610bc05750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610cfb5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610c65917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc491608001611a76565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052610c9d91611abe565b6000604051808303816000865af19150503d8060008114610cda576040519150601f19603f3d011682016040523d82523d6000602084013e610cdf565b606091505b5091505080806020019051810190610cf79190611a3b565b9150505b919050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604081205460ff169081600a811115610d3c57610d3c611713565b1415610da4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f20746f6b656e2077697468207375636820616464726573730000000000006044820152606401610990565b610a6d818484610e8b565b60006002600085600a811115610dc757610dc7611713565b600a811115610dd857610dd8611713565b8152602081019190915260409081016000205490517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301529091169063dd62ed3e90604401602060405180830381865afa158015610e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e839190611a5d565b949350505050565b60026003600085600a811115610ea357610ea3611713565b600a811115610eb457610eb4611713565b815260208101919091526040016000205460ff166004811115610ed957610ed9611713565b1415610ff6576000546040517fc88a5e6d000000000000000000000000000000000000000000000000000000008152306004820152602481018390526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c88a5e6d90604401600060405180830381600087803b158015610f5657600080fd5b505af1158015610f6a573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015610fd857600080fd5b505af1158015610fec573d6000803e3d6000fd5b505050505061163c565b600380600085600a81111561100d5761100d611713565b600a81111561101e5761101e611713565b815260208101919091526040016000205460ff16600481111561104357611043611713565b14156111aa576000546040517fc88a5e6d000000000000000000000000000000000000000000000000000000008152306004820152602481018390526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c88a5e6d90604401600060405180830381600087803b1580156110c057600080fd5b505af11580156110d4573d6000803e3d6000fd5b505050506002600084600a8111156110ee576110ee611713565b600a8111156110ff576110ff611713565b8152602081019190915260409081016000205490517fa1903eab00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a1903eab90839060240160206040518083038185885af115801561117f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906111a49190611a5d565b5061163c565b60046003600085600a8111156111c2576111c2611713565b600a8111156111d3576111d3611713565b815260208101919091526040016000205460ff1660048111156111f8576111f8611713565b141561148f5760006002600085600a81111561121657611216611713565b600a81111561122757611227611713565b815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c49190611ada565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600860205260409020549091506112fb9060ff163084610e8b565b8073ffffffffffffffffffffffffffffffffffffffff1663095ea7b36002600087600a81111561132d5761132d611713565b600a81111561133e5761133e611713565b81526020810191909152604090810160002054905160e083901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602481018590526044016020604051808303816000875af11580156113c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e69190611a3b565b506002600085600a8111156113fd576113fd611713565b600a81111561140e5761140e611713565b8152602081019190915260409081016000205490517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810184905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f1990604401600060405180830381600087803b158015610fd857600080fd5b60016003600085600a8111156114a7576114a7611713565b600a8111156114b8576114b8611713565b815260208101919091526040016000205460ff1660048111156114dd576114dd611713565b14156115b4576002600084600a8111156114f9576114f9611713565b600a81111561150a5761150a611713565b8152602081019190915260409081016000205490517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f19906044016020604051808303816000875af1158015611590573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a49190611a3b565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f74657374546f6b656e53756974653a20547279696e6720746f207472616e736660448201527f657220756e6b6e6f776e20746f6b656e000000000000000000000000000000006064820152608401610990565b6002600084600a81111561165257611652611713565b600a81111561166357611663611713565b8152602081019190915260409081016000205490517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490529091169063a9059cbb90604401610a2a565b73ffffffffffffffffffffffffffffffffffffffff811681146116f357600080fd5b50565b60006020828403121561170857600080fd5b8135610881816116d1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60208101600b831061175657611756611713565b91905290565b60006020828403121561176e57600080fd5b5035919050565b8035600b8110610cfb57600080fd5b60006020828403121561179657600080fd5b61088182611775565b60005b838110156117ba5781810151838201526020016117a2565b83811115610a6d5750506000910152565b60208152600082518060208401526117ea81604085016020870161179f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000806080858703121561183257600080fd5b61183b85611775565b9350602085013561184b816116d1565b9250604085013561185b816116d1565b9396929550929360600135925050565b602080825282518282018190526000919060409081850190868401855b828110156118c7578151805173ffffffffffffffffffffffffffffffffffffffff90811686529087015116868501529284019290850190600101611888565b5091979650505050505050565b600080604083850312156118e757600080fd5b6118f083611775565b91506020830135611900816116d1565b809150509250929050565b60008060006060848603121561192057600080fd5b61192984611775565b92506020840135611939816116d1565b91506040840135611949816116d1565b809150509250925092565b60008060006060848603121561196957600080fd5b61197284611775565b92506020840135611982816116d1565b929592945050506040919091013590565b6000806000606084860312156119a857600080fd5b8335611929816116d1565b6000806000606084860312156119c857600080fd5b8335611972816116d1565b602081016005831061175657611756611713565b600181811c908216806119fb57607f821691505b60208210811415611a35577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600060208284031215611a4d57600080fd5b8151801515811461088157600080fd5b600060208284031215611a6f57600080fd5b5051919050565b7fffffffff000000000000000000000000000000000000000000000000000000008316815260008251611ab081600485016020870161179f565b919091016004019392505050565b60008251611ad081846020870161179f565b9190910192915050565b600060208284031215611aec57600080fd5b8151610881816116d156fea264697066735822122010fe735ed069aca27931edce4ba2ff14ec7886bf21b0eea685a884f9200fb49e64736f6c634300080a003360c0604052600d60808190526c2bb930b83832b21022ba3432b960991b60a090815261002e916000919061007a565b50604080518082019091526004808252630ae8aa8960e31b602090920191825261005a9160019161007a565b506002805460ff1916601217905534801561007457600080fd5b5061014e565b82805461008690610113565b90600052602060002090601f0160209004810192826100a857600085556100ee565b82601f106100c157805160ff19168380011785556100ee565b828001600101855582156100ee579182015b828111156100ee5782518255916020019190600101906100d3565b506100fa9291506100fe565b5090565b5b808211156100fa57600081556001016100ff565b600181811c9082168061012757607f821691505b6020821081141561014857634e487b7160e01b600052602260045260246000fd5b50919050565b6109548061015d6000396000f3fe6080604052600436106100cb5760003560e01c806340c10f1911610074578063a9059cbb1161004e578063a9059cbb14610225578063d0e30db014610245578063dd62ed3e1461024d57600080fd5b806340c10f19146101c357806370a08231146101e357806395d89b411461021057600080fd5b806323b872dd116100a557806323b872dd146101575780632e1a7d4d14610177578063313ce5671461019757600080fd5b806306fdde03146100df578063095ea7b31461010a57806318160ddd1461013a57600080fd5b366100da576100d8610285565b005b600080fd5b3480156100eb57600080fd5b506100f46102e0565b6040516101019190610703565b60405180910390f35b34801561011657600080fd5b5061012a61012536600461079f565b61036e565b6040519015158152602001610101565b34801561014657600080fd5b50475b604051908152602001610101565b34801561016357600080fd5b5061012a6101723660046107c9565b6103e7565b34801561018357600080fd5b506100d8610192366004610805565b6105fe565b3480156101a357600080fd5b506002546101b19060ff1681565b60405160ff9091168152602001610101565b3480156101cf57600080fd5b506100d86101de36600461079f565b6106a4565b3480156101ef57600080fd5b506101496101fe36600461081e565b60036020526000908152604090205481565b34801561021c57600080fd5b506100f46106e2565b34801561023157600080fd5b5061012a61024036600461079f565b6106ef565b6100d8610285565b34801561025957600080fd5b50610149610268366004610839565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102a490849061089b565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102ed906108b3565b80601f0160208091040260200160405190810160405280929190818152602001828054610319906108b3565b80156103665780601f1061033b57610100808354040283529160200191610366565b820191906000526020600020905b81548152906001019060200180831161034957829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103d69086815260200190565b60405180910390a350600192915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561041957600080fd5b73ffffffffffffffffffffffffffffffffffffffff8416331480159061048f575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105175773ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020548211156104d157600080fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915281208054849290610511908490610907565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061054c908490610907565b909155505073ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260408120805484929061058690849061089b565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516105ec91815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561061a57600080fd5b3360009081526003602052604081208054839290610639908490610907565b9091555050604051339082156108fc029083906000818181858888f1935050505015801561066b573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260036020526040812080548392906106d990849061089b565b90915550505050565b600180546102ed906108b3565b60006106fc3384846103e7565b9392505050565b600060208083528351808285015260005b8181101561073057858101830151858201604001528201610714565b81811115610742576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461079a57600080fd5b919050565b600080604083850312156107b257600080fd5b6107bb83610776565b946020939093013593505050565b6000806000606084860312156107de57600080fd5b6107e784610776565b92506107f560208501610776565b9150604084013590509250925092565b60006020828403121561081757600080fd5b5035919050565b60006020828403121561083057600080fd5b6106fc82610776565b6000806040838503121561084c57600080fd5b61085583610776565b915061086360208401610776565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156108ae576108ae61086c565b500190565b600181811c908216806108c757607f821691505b60208210811415610901577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000828210156109195761091961086c565b50039056fea26469706673582212206ec943fa4e3b70d8fca6c25b6aa26fa18e8f8952ce3bc4d5afcb443bf3097c0564736f6c634300080a003360806040526000600255600060035534801561001a57600080fd5b506111fa8061002a6000396000f3fe60806040526004361061016e5760003560e01c80637a28fb88116100cb578063bdd17e1c1161007f578063dd62ed3e11610059578063dd62ed3e146103ee578063ee7a7c0414610441578063f5eb42dc1461046157600080fd5b8063bdd17e1c146103ad578063cdb9a21c146103c3578063d5002f2e146103d957600080fd5b8063a1903eab116100b0578063a1903eab1461035a578063a457c2d71461036d578063a9059cbb1461038d57600080fd5b80637a28fb88146102f457806395d89b411461031457600080fd5b806323b872dd1161012257806337cfdaca1161010757806337cfdaca1461020d57806339509351146102b457806370a08231146102d457600080fd5b806323b872dd14610278578063313ce5671461029857600080fd5b806318160ddd1161015357806318160ddd1461020d578063192084511461023057806322301f6e1461025057600080fd5b806306fdde0314610185578063095ea7b3146101dd57600080fd5b366101805761017d6000610481565b50005b600080fd5b34801561019157600080fd5b5060408051808201909152601781527f4c6971756964207374616b656420457468657220322e3000000000000000000060208201525b6040516101d49190610f63565b60405180910390f35b3480156101e957600080fd5b506101fd6101f8366004610fff565b610545565b60405190151581526020016101d4565b34801561021957600080fd5b5061022261055b565b6040519081526020016101d4565b34801561023c57600080fd5b5061022261024b366004611029565b61056b565b34801561025c57600080fd5b5061027661026b366004611042565b600391909155600255565b005b34801561028457600080fd5b506101fd610293366004611064565b6105ab565b3480156102a457600080fd5b50604051601281526020016101d4565b3480156102c057600080fd5b506101fd6102cf366004610fff565b610696565b3480156102e057600080fd5b506102226102ef3660046110a0565b6106d9565b34801561030057600080fd5b5061022261030f366004611029565b61070e565b34801561032057600080fd5b5060408051808201909152600581527f737445544800000000000000000000000000000000000000000000000000000060208201526101c7565b6102226103683660046110a0565b61073a565b34801561037957600080fd5b506101fd610388366004610fff565b610745565b34801561039957600080fd5b506101fd6103a8366004610fff565b6107f9565b3480156103b957600080fd5b5061022260035481565b3480156103cf57600080fd5b5061022260025481565b3480156103e557600080fd5b50610222610806565b3480156103fa57600080fd5b506102226104093660046110bb565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b34801561044d57600080fd5b5061027661045c366004610fff565b610811565b34801561046d57600080fd5b5061022261047c3660046110a0565b61081f565b60003334806104f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f5a45524f5f4445504f534954000000000000000000000000000000000000000060448201526064015b60405180910390fd5b60006104fc8261056b565b9050806105065750805b8160036000828254610518919061111d565b909155506105289050838261084a565b61053383838761093b565b61053d8382610992565b949350505050565b60006105523384846109ea565b50600192915050565b600061056660035490565b905090565b60008061057760035490565b9050806105875750600092915050565b6105a48161059e61059760025490565b8690610b52565b90610b5e565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001602090815260408083203384529091528120548281101561066c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f5452414e534645525f414d4f554e545f455843454544535f414c4c4f57414e4360448201527f450000000000000000000000000000000000000000000000000000000000000060648201526084016104e8565b610677858585610b6a565b61068b85336106868487610bef565b6109ea565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916105529185906106869086610bfb565b73ffffffffffffffffffffffffffffffffffffffff81166000908152602081905260408120546107089061070e565b92915050565b60008061071a60025490565b90508061072a5750600092915050565b6105a48161059e61059760035490565b600061070882610481565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156107e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4445435245415345445f414c4c4f57414e43455f42454c4f575f5a45524f000060448201526064016104e8565b6107ef33856106868487610bef565b5060019392505050565b6000610552338484610b6a565b600061056660025490565b61081b8282610c07565b5050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040812054610708565b73ffffffffffffffffffffffffffffffffffffffff82166108c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4d494e545f544f5f5448455f5a45524f5f41444452455353000000000000000060448201526064016104e8565b80600260008282546108d9919061111d565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205461090e9082610bfb565b73ffffffffffffffffffffffffffffffffffffffff90921660009081526020819052604090209190915550565b6040805183815273ffffffffffffffffffffffffffffffffffffffff83811660208301528516917fed8dd430b1e4bba98e943dc5b157cf7b54d9e12916d6c474ff5733a95001d03b910160405180910390a2505050565b73ffffffffffffffffffffffffffffffffffffffff821660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6109d58461070e565b60405190815260200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff8316610a67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f415050524f56455f46524f4d5f5a45524f5f414444524553530000000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff8216610ae4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f415050524f56455f544f5f5a45524f5f4144445245535300000000000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006105a48284611135565b60006105a48284611172565b6000610b758261056b565b9050610b82848483610d64565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610be191815260200190565b60405180910390a350505050565b60006105a482846111ad565b60006105a4828461111d565b73ffffffffffffffffffffffffffffffffffffffff8216610c84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4255524e5f46524f4d5f5448455f5a45524f5f4144445245535300000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205480821115610d14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4255524e5f414d4f554e545f455843454544535f42414c414e4345000000000060448201526064016104e8565b8160026000828254610d2691906111ad565b90915550610d3690508183610bef565b73ffffffffffffffffffffffffffffffffffffffff9093166000908152602081905260409020929092555050565b73ffffffffffffffffffffffffffffffffffffffff8316610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f5452414e534645525f46524f4d5f5448455f5a45524f5f41444452455353000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff8216610e5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f5452414e534645525f544f5f5448455f5a45524f5f414444524553530000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205480821115610eee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5452414e534645525f414d4f554e545f455843454544535f42414c414e43450060448201526064016104e8565b610ef88183610bef565b73ffffffffffffffffffffffffffffffffffffffff8086166000908152602081905260408082209390935590851681522054610f349083610bfb565b73ffffffffffffffffffffffffffffffffffffffff909316600090815260208190526040902092909255505050565b600060208083528351808285015260005b81811015610f9057858101830151858201604001528201610f74565b81811115610fa2576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ffa57600080fd5b919050565b6000806040838503121561101257600080fd5b61101b83610fd6565b946020939093013593505050565b60006020828403121561103b57600080fd5b5035919050565b6000806040838503121561105557600080fd5b50508035926020909101359150565b60008060006060848603121561107957600080fd5b61108284610fd6565b925061109060208501610fd6565b9150604084013590509250925092565b6000602082840312156110b257600080fd5b6105a482610fd6565b600080604083850312156110ce57600080fd5b6110d783610fd6565b91506110e560208401610fd6565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611130576111306110ee565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561116d5761116d6110ee565b500290565b6000826111a8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000828210156111bf576111bf6110ee565b50039056fea2646970667358221220a5b4f31162ba2b8b3424cef84b31ef91d05a825243602b5fdf758ffb49b8246364736f6c634300080a003360a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a003360c06040523480156200001157600080fd5b506040516200170938038062001709833981016040819052620000349162000266565b8351849084906200004d906003906020850190620000f3565b50805162000063906004906020840190620000f3565b505050620000806200007a6200009d60201b60201c565b620000a1565b60ff9091166080526001600160a01b031660a05250620003479050565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b82805462000101906200030a565b90600052602060002090601f01602090048101928262000125576000855562000170565b82601f106200014057805160ff191683800117855562000170565b8280016001018555821562000170579182015b828111156200017057825182559160200191906001019062000153565b506200017e92915062000182565b5090565b5b808211156200017e576000815560010162000183565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c157600080fd5b81516001600160401b0380821115620001de57620001de62000199565b604051601f8301601f19908116603f0116810190828211818310171562000209576200020962000199565b816040528381526020925086838588010111156200022657600080fd5b600091505b838210156200024a57858201830151818301840152908201906200022b565b838211156200025c5760008385830101525b9695505050505050565b600080600080608085870312156200027d57600080fd5b84516001600160401b03808211156200029557600080fd5b620002a388838901620001af565b95506020870151915080821115620002ba57600080fd5b50620002c987828801620001af565b935050604085015160ff81168114620002e157600080fd5b60608601519092506001600160a01b0381168114620002ff57600080fd5b939692955090935050565b600181811c908216806200031f57607f821691505b602082108114156200034157634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05161138e6200037b600039600081816101f70152818161041f0152610600015260006101a2015261138e6000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80636f307dc3116100b257806395d89b4111610081578063a9059cbb11610066578063a9059cbb146102b5578063dd62ed3e146102c8578063f2fde38b1461030e57600080fd5b806395d89b411461029a578063a457c2d7146102a257600080fd5b80636f307dc3146101f257806370a082311461023e578063715018a6146102745780638da5cb5b1461027c57600080fd5b806323b872dd116100ee57806323b872dd14610188578063313ce5671461019b57806339509351146101cc57806340c10f19146101df57600080fd5b806306fdde0314610120578063095ea7b31461013e57806318160ddd146101615780631e9a695014610173575b600080fd5b610128610321565b604051610135919061112d565b60405180910390f35b61015161014c3660046111c9565b6103b3565b6040519015158152602001610135565b6002545b604051908152602001610135565b6101866101813660046111c9565b6103c9565b005b6101516101963660046111f3565b610491565b60405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610135565b6101516101da3660046111c9565b61057c565b6101866101ed3660046111c9565b6105c5565b6102197f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b61016561024c36600461122f565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610186610691565b60055473ffffffffffffffffffffffffffffffffffffffff16610219565b61012861071e565b6101516102b03660046111c9565b61072d565b6101516102c33660046111c9565b610805565b6101656102d6366004611251565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b61018661031c36600461122f565b610812565b60606003805461033090611284565b80601f016020809104026020016040519081016040528092919081815260200182805461035c90611284565b80156103a95780601f1061037e576101008083540402835291602001916103a9565b820191906000526020600020905b81548152906001019060200180831161038c57829003601f168201915b5050505050905090565b60006103c0338484610942565b50600192915050565b6103d33382610af5565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015610468573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048c91906112d8565b505050565b600061049e848484610ce2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6105718533858403610942565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916103c09185906105c0908690611329565b610942565b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906323b872dd906064016020604051808303816000875af115801561065e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068291906112d8565b5061068d8282610f96565b5050565b60055473ffffffffffffffffffffffffffffffffffffffff163314610712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161055b565b61071c60006110b6565b565b60606004805461033090611284565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156107ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161055b565b6107fb3385858403610942565b5060019392505050565b60006103c0338484610ce2565b60055473ffffffffffffffffffffffffffffffffffffffff163314610893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161055b565b73ffffffffffffffffffffffffffffffffffffffff8116610936576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161055b565b61093f816110b6565b50565b73ffffffffffffffffffffffffffffffffffffffff83166109e4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff8216610a87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8216610b98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015610c4e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290610c8a908490611341565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff8216610e28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610ede576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610f22908490611329565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f8891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161055b565b80600260008282546110259190611329565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152602081905260408120805483929061105f908490611329565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208083528351808285015260005b8181101561115a5785810183015185820160400152820161113e565b8181111561116c576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146111c457600080fd5b919050565b600080604083850312156111dc57600080fd5b6111e5836111a0565b946020939093013593505050565b60008060006060848603121561120857600080fd5b611211846111a0565b925061121f602085016111a0565b9150604084013590509250925092565b60006020828403121561124157600080fd5b61124a826111a0565b9392505050565b6000806040838503121561126457600080fd5b61126d836111a0565b915061127b602084016111a0565b90509250929050565b600181811c9082168061129857607f821691505b602082108114156112d2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156112ea57600080fd5b8151801515811461124a57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561133c5761133c6112fa565b500190565b600082821015611353576113536112fa565b50039056fea26469706673582212203a6db30cd3c097921df4156794aa7973eb848711deeb2cffd7c54a9df1fdb0a564736f6c634300080a003360a060405234801561001057600080fd5b506040516106ca3803806106ca83398101604081905261002f9161006c565b60009190915560ff166080526001805460506001600160501b031991821681179092556004805490911690911790554260028190556003556100a2565b6000806040838503121561007f57600080fd5b82519150602083015160ff8116811461009757600080fd5b809150509250929050565b60805161060e6100bc600039600060d3015261060e6000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80639a6fc8f511610081578063d62ada111161005b578063d62ada11146102dc578063f7a30806146102f4578063feaf968c1461030757600080fd5b80639a6fc8f5146101cd578063bd18ad531461023a578063cd653afc1461024d57600080fd5b806354fd4d50116100b257806354fd4d501461012d57806367e8d83d1461013c5780637284e4161461018e57600080fd5b8063313ce567146100ce5780633fd0875f1461010c575b600080fd5b6100f57f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020015b60405180910390f35b6004546a0100000000000000000000900460ff166040516101039190610441565b60405160018152602001610103565b61018c61014a366004610482565b600480549115156c01000000000000000000000000027fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff909216919091179055565b005b604080518082018252600c81527f7072696365206f7261636c6500000000000000000000000000000000000000006020820152905161010391906104ab565b6102036101db36600461053d565b60015460005460025460035460045469ffffffffffffffffffff948516941691939590929450565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610103565b61018c610248366004610558565b61030f565b61018c61025b366004610579565b6001805469ffffffffffffffffffff9586167fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090911617905560029290925560035560048054919092167fffffffffffffffffffffffffffffffffffffffff00ff00000000000000000000909116176b020000000000000000000000179055565b6102e461035f565b6040519015158152602001610103565b61018c6103023660046105bf565b600055565b610203610385565b600480548291907fffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff166b01000000000000000000000083600281111561035757610357610412565b021790555050565b600454600090610380906b010000000000000000000000900460ff166103d6565b905090565b60008060008060006004600c9054906101000a900460ff16156103a757600080fd5b505060015460005460025460035460045469ffffffffffffffffffff9485169893975091955093509190911690565b600060028260028111156103ec576103ec610412565b14156103f757600080fd5b600182600281111561040b5761040b610412565b1492915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016006831061047c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561049457600080fd5b813580151581146104a457600080fd5b9392505050565b600060208083528351808285015260005b818110156104d8578581018301518582016040015282016104bc565b818111156104ea576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803569ffffffffffffffffffff8116811461053857600080fd5b919050565b60006020828403121561054f57600080fd5b6104a48261051e565b60006020828403121561056a57600080fd5b8135600381106104a457600080fd5b6000806000806080858703121561058f57600080fd5b6105988561051e565b935060208501359250604085013591506105b46060860161051e565b905092959194509250565b6000602082840312156105d157600080fd5b503591905056fea264697066735822122014874f7a973b86501c4c1a8be32490fe902c8f088ee234d25f9b2497e19f9e5264736f6c634300080a003360806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d00011790553480156200003a57600080fd5b5060405162031ed638038062031ed68339810160408190526200005d91620015e8565b81816040516200006d9062001595565b604051809103906000f0801580156200008a573d6000803e3d6000fd5b5050600180546001600160a01b0319166001600160a01b038416908117909155604080516325abd85f60e11b81529051634b57b0be916004808201926020929091908290030181865afa158015620000e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200010c91906200162a565b73c4375b7de8af5a38a93548eb8453a498222c4ff26040516200012f90620015a3565b6001600160a01b03928316815291166020820152604001604051809103906000f08015801562000163573d6000803e3d6000fd5b50600380546001600160a01b0319166001600160a01b039290921691821790556040805163de28735960e01b8152905163de287359916004808201926020929091908290030181865afa158015620001bf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e591906200162a565b604051634910832f60e01b81527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526001600160a01b039190911690634910832f90602401600060405180830381600087803b1580156200023d57600080fd5b505af115801562000252573d6000803e3d6000fd5b50505050600360009054906101000a90046001600160a01b03166001600160a01b031663de2873596040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d091906200162a565b60035460405163f2fde38b60e01b81526001600160a01b03918216600482015291169063f2fde38b90602401600060405180830381600087803b1580156200031757600080fd5b505af11580156200032c573d6000803e3d6000fd5b505060035460015460408051636ca42ae360e01b815290516001600160a01b039384169550638874ff1f94509190921691636ca42ae39160048083019260009291908290030181865afa15801562000388573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620003b29190810190620016c5565b6040518263ffffffff1660e01b8152600401620003d09190620017b6565b600060405180830381600087803b158015620003eb57600080fd5b505af115801562000400573d6000803e3d6000fd5b50505050600360009054906101000a90046001600160a01b03166001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000458573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200047e91906200162a565b600280546001600160a01b0319166001600160a01b039290921691821790556040805163120d150d60e31b81529051639068a868916004808201926020929091908290030181865afa158015620004d9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004ff91906200162a565b600480546001600160a01b0319166001600160a01b0392831617815560025460408051631f94a27560e31b81529051919093169263fca513a892818101926020929091908290030181865afa1580156200055d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200058391906200162a565b600880546001600160a01b0319166001600160a01b0392831617905560025460408051630873769560e01b81529051919092169163087376959160048083019260209291908290030181865afa158015620005e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200060891906200162a565b600780546001600160a01b0319166001600160a01b039283161790556002546040805163c513c9bb60e01b81529051919092169163c513c9bb9160048083019260209291908290030181865afa15801562000667573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200068d91906200162a565b600680546001600160a01b0319166001600160a01b039283161790556001546040516367b4264560e01b81529116906367b4264590620006d29084906004016200184d565b602060405180830381865afa158015620006f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200071691906200162a565b600980546001600160a01b0319166001600160a01b0392831617905560035460408051630a55006360e21b815290519190921691632954018c9160048083019260209291908290030181865afa15801562000775573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200079b91906200162a565b6009546040516001600160a01b0390911690620007b890620015b2565b6001600160a01b03928316815291166020820152604001604051809103906000f080158015620007ec573d6000803e3d6000fd5b50600580546001600160a01b0319166001600160a01b039283169081179091556001549091169063eebab8ef90839062000825620011ec565b6200083290600a62001879565b6040518463ffffffff1660e01b815260040162000852939291906200189b565b600060405180830381600087803b1580156200086d57600080fd5b505af115801562000882573d6000803e3d6000fd5b505060065460055460405163d914cd4b60e01b81526001600160a01b0391821660048201529116925063d914cd4b9150602401600060405180830381600087803b158015620008d057600080fd5b505af1158015620008e5573d6000803e3d6000fd5b5050600f80546001600160801b031916670de0b6b3a76400001790555062000911925050620011ec9050565b6200091e90600a62001879565b600f80546001600160801b03908116600160801b9382168402818117938490556040805160a0810182529184169092178152939092041660208301526000919081016200096b84620012ab565b815260006020820181905260409182018190526005549151929350916001600160a01b039091169083908390620009a290620015c0565b620009b093929190620018c5565b604051809103906000f080158015620009cd573d6000803e3d6000fd5b509050806001600160a01b031663c12c21c06040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a0f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a3591906200162a565b600b60006101000a8154816001600160a01b0302191690836001600160a01b03160217905550806001600160a01b0316632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a9a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ac091906200162a565b600c60006101000a8154816001600160a01b0302191690836001600160a01b03160217905550806001600160a01b031663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000b25573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b4b91906200162a565b600d80546001600160a01b0319166001600160a01b03928316179055600654600b5460405163e26b2f6360e01b8152908316600482015291169063e26b2f6390602401600060405180830381600087803b15801562000ba957600080fd5b505af115801562000bbe573d6000803e3d6000fd5b5050600054600554604080516318caf8e360e31b81526001600160a01b039283166004808301919091526024820192909252604481019190915263141bdbdb60e21b60648201526201000090920416925063c657c7189150608401600060405180830381600087803b15801562000c3457600080fd5b505af115801562000c49573d6000803e3d6000fd5b5050600054600c8054604080516318caf8e360e31b81526001600160a01b039283166004820152602481019190915260448101929092526b43726564697446616361646560a01b606483015262010000909204909116925063c657c7189150608401600060405180830381600087803b15801562000cc657600080fd5b505af115801562000cdb573d6000803e3d6000fd5b5050600054600b54604080516318caf8e360e31b81526001600160a01b0392831660048201526024810191909152600d60448201526c21b932b234ba26b0b730b3b2b960991b60648201526201000090920416925063c657c7189150608401600060405180830381600087803b15801562000d5557600080fd5b505af115801562000d6a573d6000803e3d6000fd5b5050600054600d54604080516318caf8e360e31b81526001600160a01b0392831660048201526024810191909152601260448201527121b932b234ba21b7b73334b3bab930ba37b960711b60648201526201000090920416925063c657c7189150608401600060405180830381600087803b15801562000de957600080fd5b505af115801562000dfe573d6000803e3d6000fd5b50506001546001600160a01b0316915063eebab8ef90508473f39fd6e51aad88f6f4ce6ab8827279cfffb9226662000e35620011ec565b6040518463ffffffff1660e01b815260040162000e55939291906200189b565b600060405180830381600087803b15801562000e7057600080fd5b505af115801562000e85573d6000803e3d6000fd5b50506001546001600160a01b0316915063eebab8ef9050847390f79bf6eb2c4f870365e785982e1f101e93b90662000ebc620011ec565b6040518463ffffffff1660e01b815260040162000edc939291906200189b565b600060405180830381600087803b15801562000ef757600080fd5b505af115801562000f0c573d6000803e3d6000fd5b505060005460405163ca669fa760e01b815273f39fd6e51aad88f6f4ce6ab8827279cfffb922666004820152620100009091046001600160a01b0316925063ca669fa79150602401600060405180830381600087803b15801562000f6f57600080fd5b505af115801562000f84573d6000803e3d6000fd5b5050600954600b5460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529116925063095ea7b391506044016020604051808303816000875af115801562000fdf573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001005919062001989565b5060005460405163ca669fa760e01b81527390f79bf6eb2c4f870365e785982e1f101e93b9066004820152620100009091046001600160a01b03169063ca669fa790602401600060405180830381600087803b1580156200106557600080fd5b505af11580156200107a573d6000803e3d6000fd5b5050600954600b5460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529116925063095ea7b391506044016020604051808303816000875af1158015620010d5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010fb919062001989565b5060025460405163f2fde38b60e01b81527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526001600160a01b039091169063f2fde38b90602401600060405180830381600087803b1580156200115657600080fd5b505af11580156200116b573d6000803e3d6000fd5b505060075460405163f2fde38b60e01b81527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b158015620011c957600080fd5b505af1158015620011de573d6000803e3d6000fd5b5050505050505050620019e1565b600180546040516367b4264560e01b81526000926001600160a01b03909216916367b42645916200122191906004016200184d565b602060405180830381865afa1580156200123f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200126591906200162a565b6009546001600160a01b03908116911614620012955762001290670de0b6b3a764000060c862001879565b905090565b62001290670de0b6b3a7640000614e2062001879565b6040805160c08101825260026080820190815261232860a08301528152815180830183526005815261226060208281019190915282015281518083018352606092600092919082019080600387600a8111156200130c576200130c62001814565b146200131a5760036200131d565b60015b600a81111562001331576200133162001814565b815261206c6020918201529082526040805180820190915260048152611c84818301529101529050612454600a6000858281111562001374576200137462001814565b600a81111562001388576200138862001814565b815260208101919091526040908101600020805461ffff9390931661ffff19909316929092179091558051600480825260a0820190925281816020015b6040805180820190915260008082526020820152815260200190600190039081620013c557905050925060005b818110156200158d57828160048110620014105762001410620019ad565b602002015160200151600a6000858460048110620014325762001432620019ad565b602002015151600a8111156200144c576200144c62001814565b600a81111562001460576200146062001814565b815260208101919091526040908101600020805461ffff191661ffff9390931692909217909155805180820190915260015481906001600160a01b03166367b42645868560048110620014b757620014b7620019ad565b6020020151516040516001600160e01b031960e084901b168152620014e091906004016200184d565b602060405180830381865afa158015620014fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200152491906200162a565b6001600160a01b03168152602001848360048110620015475762001547620019ad565b60200201516020015161ffff168152508482815181106200156c576200156c620019ad565b602002602001018190525080806200158490620019c3565b915050620013f2565b505050919050565b6105e6806200bc5283390190565b62011105806200c23883390190565b6110a7806201d33d83390190565b62013af2806201e3e483390190565b6001600160a01b0381168114620015e557600080fd5b50565b60008060408385031215620015fc57600080fd5b82516200160981620015cf565b6020840151909250600b81106200161f57600080fd5b809150509250929050565b6000602082840312156200163d57600080fd5b81516200164a81620015cf565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156200168c576200168c62001651565b60405290565b604051601f8201601f191681016001600160401b0381118282101715620016bd57620016bd62001651565b604052919050565b60006020808385031215620016d957600080fd5b82516001600160401b0380821115620016f157600080fd5b818501915085601f8301126200170657600080fd5b8151818111156200171b576200171b62001651565b6200172b848260051b0162001692565b818152848101925060069190911b8301840190878211156200174c57600080fd5b928401925b81841015620017ab57604084890312156200176c5760008081fd5b6200177662001667565b84516200178381620015cf565b8152848601516200179481620015cf565b818701528352604093909301929184019162001751565b979650505050505050565b602080825282518282018190526000919060409081850190868401855b828110156200180757815180516001600160a01b0390811686529087015116868501529284019290850190600101620017d3565b5091979650505050505050565b634e487b7160e01b600052602160045260246000fd5b600b81106200184957634e487b7160e01b600052602160045260246000fd5b9052565b602081016200185d82846200182a565b92915050565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161562001896576200189662001863565b500290565b60608101620018ab82866200182a565b6001600160a01b0393909316602082015260400152919050565b6001600160a01b0384811682526060602080840182905285516001600160801b039081169285019290925285810151909116608084015260408086015160a085810152805161010086018190526000949392918301919085906101208801905b808310156200195657845180518816835286015161ffff168683015293850193600192909201919083019062001925565b5060608a01516001600160a01b031660c0890152608090990151151560e088015250909401949094525092949350505050565b6000602082840312156200199c57600080fd5b815180151581146200164a57600080fd5b634e487b7160e01b600052603260045260246000fd5b6000600019821415620019da57620019da62001863565b5060010190565b61a26180620019f16000396000f3fe60806040523480156200001157600080fd5b5060043610620001ad5760003560e01c806362eb33e311620000f5578063ba414fa61162000097578063de287359116200006e578063de2873591462000479578063f9aa028a146200049a578063fa7626d414620004bb57600080fd5b8063ba414fa6146200041c578063c12c21c01462000437578063d46b9330146200045857600080fd5b80637785ff5d11620000cc5780637785ff5d14620003da5780639408b63f14620003e45780639dd55b45146200040557600080fd5b806362eb33e314620003775780636b70b04c14620003985780636f307dc314620003b957600080fd5b80632f7a1881116200015f5780635e813a8b11620001365780635e813a8b146200030c5780635f7c9bd0146200032d57806362186905146200034657600080fd5b80632f7a188114620002be578063406c8e2f14620002df57806354cae56e146200030057600080fd5b80630e42bc5d11620001945780630e42bc5d14620002305780632630c12f14620002565780632954018c146200029d57600080fd5b80630bc772da14620001b25780630c75f80614620001f5575b600080fd5b600f54620001cf906fffffffffffffffffffffffffffffffff1681565b6040516fffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6200021c62000206366004620012dd565b600a6020526000908152604090205461ffff1681565b60405161ffff9091168152602001620001ec565b6200024762000241366004620012dd565b620004c9565b604051620001ec919062001307565b600854620002779073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001620001ec565b600254620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600c54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600154620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200030a6200081f565b005b600454620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200033762000b1a565b604051908152602001620001ec565b600f54620001cf9070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681565b600654620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600554620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600954620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200030a62000c0c565b600e54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200030a6200041636600462001398565b62000fd6565b6200042662001149565b6040519015158152602001620001ec565b600b54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600354620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600754620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600d54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600054620004269060ff1681565b6040805160c08101825260026080820190815261232860a08301528152815180830183526005815261226060208281019190915282015281518083018352606092600092919082019080600387600a8111156200052a576200052a620013c7565b14620005385760036200053b565b60015b600a8111156200054f576200054f620013c7565b815261206c6020918201529082526040805180820190915260048152611c84818301529101529050612454600a60008582811115620005925762000592620013c7565b600a811115620005a657620005a6620013c7565b815260208101919091526040908101600020805461ffff939093167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909316929092179091558051600480825260a0820190925281816020015b60408051808201909152600080825260208201528152602001906001900390816200060057905050925060005b8181101562000817578281600481106200064b576200064b620013f6565b602002015160200151600a60008584600481106200066d576200066d620013f6565b602002015151600a811115620006875762000687620013c7565b600a8111156200069b576200069b620013c7565b81526020810191909152604090810160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff93909316929092179091558051808201909152600154819073ffffffffffffffffffffffffffffffffffffffff166367b426458685600481106200071c576200071c620013f6565b6020020151516040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526200075d919060040162001425565b602060405180830381865afa1580156200077b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007a1919062001467565b73ffffffffffffffffffffffffffffffffffffffff168152602001848360048110620007d157620007d1620013f6565b60200201516020015161ffff16815250848281518110620007f657620007f6620013f6565b602002602001018190525080806200080e90620014b6565b9150506200062d565b505050919050565b6000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16906306447d5690602401600060405180830381600087803b158015620008a457600080fd5b505af1158015620008b9573d6000803e3d6000fd5b5050600b5460405173ffffffffffffffffffffffffffffffffffffffff909116925060009150600190620008ed90620012b3565b73ffffffffffffffffffffffffffffffffffffffff938416815292909116602083015215156040820152606001604051809103906000f08015801562000937573d6000803e3d6000fd5b50600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316908117909155600d546040517f526a41e80000000000000000000000000000000000000000000000000000000081526004810192909252600160248301529091169063526a41e890604401600060405180830381600087803b158015620009dc57600080fd5b505af1158015620009f1573d6000803e3d6000fd5b5050600d5473ffffffffffffffffffffffffffffffffffffffff16915063eb9606df905062000a22426001620014f2565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815264ffffffffff90911660048201526024015b600060405180830381600087803b15801562000a7b57600080fd5b505af115801562000a90573d6000803e3d6000fd5b50505050600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562000aff57600080fd5b505af115801562000b14573d6000803e3d6000fd5b50505050565b600180546040517f67b4264500000000000000000000000000000000000000000000000000000000815260009273ffffffffffffffffffffffffffffffffffffffff909216916367b426459162000b75919060040162001425565b602060405180830381865afa15801562000b93573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000bb9919062001467565b60095473ffffffffffffffffffffffffffffffffffffffff90811691161462000bf65762000bf1670de0b6b3a764000060c86200150d565b905090565b62000bf1670de0b6b3a7640000614e206200150d565b60025460405173ffffffffffffffffffffffffffffffffffffffff9091169062000c3690620012c1565b73ffffffffffffffffffffffffffffffffffffffff90911681526060602082018190526008908201527f446567656e4e4654000000000000000000000000000000000000000000000000608082015260a060408201819052600a908201527f476561722d446567656e0000000000000000000000000000000000000000000060c082015260e001604051809103906000f08015801562000cda573d6000803e3d6000fd5b50600e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283161790556000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015262010000909104909116906306447d5690602401600060405180830381600087803b15801562000d8e57600080fd5b505af115801562000da3573d6000803e3d6000fd5b5050600e546040517ffca3b5aa0000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff909116925063fca3b5aa9150602401600060405180830381600087803b15801562000e2757600080fd5b505af115801562000e3c573d6000803e3d6000fd5b5050600b54600e5460405173ffffffffffffffffffffffffffffffffffffffff92831694509116915060009062000e7390620012b3565b73ffffffffffffffffffffffffffffffffffffffff938416815292909116602083015215156040820152606001604051809103906000f08015801562000ebd573d6000803e3d6000fd5b50600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316908117909155600d546040517f526a41e80000000000000000000000000000000000000000000000000000000081526004810192909252600160248301529091169063526a41e890604401600060405180830381600087803b15801562000f6257600080fd5b505af115801562000f77573d6000803e3d6000fd5b5050600e54600c546040517f4610f6ac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015291169250634610f6ac915060240162000a60565b600081600860405162000fe990620012cf565b91825260ff166020820152604001604051809103906000f08015801562001014573d6000803e3d6000fd5b506000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291925062010000900473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b1580156200109c57600080fd5b505af1158015620010b1573d6000803e3d6000fd5b50506008546040517fe8a97a3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528581166024830152909116925063e8a97a3e9150604401600060405180830381600087803b1580156200112b57600080fd5b505af115801562001140573d6000803e3d6000fd5b50505050505050565b60008054610100900460ff16156200116a5750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620012ae5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000008284015282518083038401815260608301909352600092909162001212917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016200158b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526200124c91620015c9565b6000604051808303816000865af19150503d80600081146200128b576040519150601f19603f3d011682016040523d82523d6000602084013e62001290565b606091505b5091505080806020019051810190620012aa9190620015d7565b9150505b919050565b615e9780620015fc83390190565b6126cf806200749383390190565b6106ca8062009b6283390190565b600060208284031215620012f057600080fd5b8135600b81106200130057600080fd5b9392505050565b602080825282518282018190526000919060409081850190868401855b8281101562001365578151805173ffffffffffffffffffffffffffffffffffffffff16855286015161ffff1686850152928401929085019060010162001324565b5091979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff811681146200139557600080fd5b50565b60008060408385031215620013ac57600080fd5b8235620013b98162001372565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60208101600b831062001461577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000602082840312156200147a57600080fd5b8151620013008162001372565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415620014eb57620014eb62001487565b5060010190565b6000821982111562001508576200150862001487565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562001548576200154862001487565b500290565b6000815160005b8181101562001570576020818501810151868301520162001554565b8181111562001580576000828601525b509290920192915050565b7fffffffff00000000000000000000000000000000000000000000000000000000831681526000620015c160048301846200154d565b949350505050565b60006200130082846200154d565b600060208284031215620015ea57600080fd5b815180151581146200130057600080fdfe6101406040523480156200001257600080fd5b5060405162005e9738038062005e97833981016040819052620000359162000198565b60016000556001600160a01b0383166200006257604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038316608081905260408051636f307dc360e01b81529051636f307dc3916004808201926020929091908290030181865afa158015620000ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d39190620001ea565b6001600160a01b031660a0816001600160a01b031681525050826001600160a01b0316634f0e0ef36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200012b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001519190620001ea565b6001600160a01b0390811660c0529190911660e0819052151561010052151561012052506200020f565b80516001600160a01b03811681146200019357600080fd5b919050565b600080600060608486031215620001ae57600080fd5b620001b9846200017b565b9250620001c9602085016200017b565b915060408401518015158114620001df57600080fd5b809150509250925092565b600060208284031215620001fd57600080fd5b62000208826200017b565b9392505050565b60805160a05160c05160e0516101005161012051615a86620004116000396000818161061101528181612fb5015261481f01526000818161031701528181610dde015281816144f901526146e5015260008181610557015281816146a901526147a901526000818161034b0152818161387d015261392d01526000818161047301528181611bfe0152818161274f0152818161280d0152818161366a01526137dd015260008181610665015281816109d801528181610b0301528181610bd501528181610cdd01528181610e6501528181610fe30152818161114e0152818161120e0152818161132e015281816114510152818161162b01528181611708015281816117e0015281816119e501528181611b1201528181611d9501528181611ed5015281816120040152818161216801528181612290015281816123c601528181612568015281816126390152818161266f0152818161293d01528181612a2101528181612a8a01528181612bde01528181612d2601528181612e6801528181612ec2015281816130a10152818161311b015281816131b401528181613341015281816134c10152818161358a0152818161372f01528181613a1a01528181613b2e01528181613dbb015281816142200152818161432801528181614492015281816148e7015281816149e801528181614aae0152614d8f0152615a866000f3fe6080604052600436106102695760003560e01c8063860aefcf11610153578063c7de38a6116100cb578063dfd594651161007f578063eb9606df11610064578063eb9606df1461081e578063f9eaee0d1461083e578063ffd9b9071461085e57600080fd5b8063dfd59465146107de578063e1f21c67146107fe57600080fd5b8063cff0ab96116100b0578063cff0ab96146106ef578063d9ccbec114610783578063dcf65482146107be57600080fd5b8063c7de38a6146106a7578063caa5c23f146106dc57600080fd5b80639c55a05411610122578063b55bb84b11610107578063b55bb84b14610633578063c12c21c014610653578063c690908a1461068757600080fd5b80639c55a054146105df578063b1836d32146105ff57600080fd5b8063860aefcf146104db5780639408b63f146105455780639b67ab30146105795780639be0536a146105bd57600080fd5b80635d91a0e0116101e65780636d19b486116101b55780637071b7c51161019a5780637071b7c51461049557806379c0ef91146104a857806382871ace146104c857600080fd5b80636d19b486146104415780636f307dc31461046157600080fd5b80635d91a0e0146103e85780635f73fbec146103fb578063601d66f61461040e5780636c8f225d1461042e57600080fd5b80633d9287fa1161023d5780635019e20a116102225780635019e20a1461039257806354fd4d50146103b257806359781034146103d557600080fd5b80633d9287fa146103055780634f0e0ef31461033957600080fd5b8062842b571461026e578063256ac915146102905780632a7ba1f7146102c55780632b7c7b11146102e5575b600080fd5b34801561027a57600080fd5b5061028e6102893660046151bf565b61087e565b005b34801561029c57600080fd5b506102b06102ab3660046151f8565b61098e565b60405190151581526020015b60405180910390f35b3480156102d157600080fd5b5061028e6102e0366004615215565b610a61565b3480156102f157600080fd5b5061028e610300366004615215565b610c3b565b34801561031157600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561034557600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102bc565b34801561039e57600080fd5b5061028e6103ad3660046151f8565b610d6a565b3480156103be57600080fd5b506103c7600281565b6040519081526020016102bc565b61028e6103e336600461522e565b61108c565b61028e6103f63660046152bb565b611275565b61028e610409366004615340565b611589565b34801561041a57600080fd5b5061028e6104293660046153d8565b6117de565b61028e61043c36600461541b565b611900565b34801561044d57600080fd5b506102b061045c3660046151f8565b611c31565b34801561046d57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b61028e6104a336600461546e565b611c60565b3480156104b457600080fd5b5061036d6104c3366004615215565b611f3e565b61028e6104d63660046152bb565b611f4b565b3480156104e757600080fd5b5060025461051c906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041682565b604080516fffffffffffffffffffffffffffffffff9384168152929091166020830152016102bc565b34801561055157600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561058557600080fd5b506004546040805167ffffffffffffffff608084901c1681526fffffffffffffffffffffffffffffffff9092166020830152016102bc565b3480156105c957600080fd5b506105d261227d565b6040516102bc91906154e2565b3480156105eb57600080fd5b5061028e6105fa36600461553c565b61228e565b34801561060b57600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561063f57600080fd5b5061028e61064e3660046151f8565b6123c4565b34801561065f57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561069357600080fd5b5061028e6106a23660046151f8565b6124c6565b3480156106b357600080fd5b506106c76106c23660046151f8565b612668565b604080519283526020830191909152016102bc565b61028e6106ea366004615557565b61289b565b3480156106fb57600080fd5b5060015461074e906fffffffffffffffffffffffffffffffff811690700100000000000000000000000000000000810460ff169071010000000000000000000000000000000000900464ffffffffff1683565b604080516fffffffffffffffffffffffffffffffff9094168452911515602084015264ffffffffff16908201526060016102bc565b34801561078f57600080fd5b506102b061079e366004615599565b600360209081526000928352604080842090915290825290205460ff1681565b3480156107ca57600080fd5b5061028e6107d93660046151f8565b612a88565b3480156107ea57600080fd5b506103c76107f93660046151f8565b612b86565b34801561080a57600080fd5b5061028e61081936600461522e565b612c6d565b34801561082a57600080fd5b5061028e6108393660046155c7565b612ec0565b34801561084a57600080fd5b506102b06108593660046151f8565b613057565b34801561086a57600080fd5b5061028e6108793660046155ee565b6131b2565b600260005414156108f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b6002600090815573ffffffffffffffffffffffffffffffffffffffff8316808252600360209081526040808420338086529083529381902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081527f9b3258bc4904fd6426b99843e206c6c7cdb1fd0f040121c25b71dafbb3851ee0910160405180910390a350506001600055565b6040517f055ee9b500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063055ee9b590602401602060405180830381865afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a43919061560b565b73ffffffffffffffffffffffffffffffffffffffff16141592915050565b60026000541415610ace576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610b5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b83919061560b565b9050610b903382846132eb565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906395373018906024015b600060405180830381600087803b158015610c1a57600080fd5b505af1158015610c2e573d6000803e3d6000fd5b5050600160005550505050565b60026000541415610ca8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610d39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5d919061560b565b9050610b90338284613411565b60026000541415610dd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000557f000000000000000000000000000000000000000000000000000000000000000015610e34576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610ec1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee5919061560b565b33600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915290205490915060ff16610f52576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f5d82613583565b5090508015610f98576040517ff713841e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b15801561102757600080fd5b505af115801561103b573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692503391507f93c70cc9715bef0d83edf2095f3595402279d274f402a73ffc17f1bcb19d863d90600090a35050600160005550565b600260005414156110f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611106613875565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063e958b70490602401602060405180830381865afa158015611197573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bb919061560b565b90506111c9848285856139b7565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401600060405180830381600087803b15801561125257600080fd5b505af1158015611266573d6000803e3d6000fd5b50506001600055505050505050565b600260005414156112e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611375573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611399919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166113e8576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806113f483613583565b915091508161142f576040517f1fdd676f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611437613875565b831561144d5761144d85858b8660016000613ae3565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632362a2d88b600185338e8e8e6040518863ffffffff1660e01b81526004016114b59796959493929190615663565b6020604051808303816000875af11580156114d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f891906156bf565b90508873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f7dfecd8419723a9d3954585a30c2a270165d70aafa146c11c1e1b88ae14390648460405161157091815260200190565b60405180910390a4505060016000555050505050505050565b600260005414156115f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ab919061560b565b90506116b5613875565b81156116cb576116cb8383338460016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d89061174a903390600090819083908d908d908d90600401615663565b6020604051808303816000875af1158015611769573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178d91906156bf565b5060405173ffffffffffffffffffffffffffffffffffffffff87169033907f460ad03b1cf79b1d64d3aefa28475f110ab66e84649c52bb41ed796b9b39198190600090a35050600160005550505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611849573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118d1576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff90811670010000000000000000000000000000000002911617600255565b6002600054141561196d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000908155606461198461ffff851687615707565b61198e9190615744565b9050611999816144f7565b6119a2816145e8565b6119ab84614668565b6119b3613875565b6040517f172c48c7000000000000000000000000000000000000000000000000000000008152600060048201819052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a64919061577f565b61ffff169150611a789050816127106157ae565b611a829083615707565b611a8c8288615707565b11611ac3576040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff86811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611b5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b81919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638587604051611bef92919091825261ffff16602082015260400190565b60405180910390a3611c2386827f00000000000000000000000000000000000000000000000000000000000000008a6139b7565b505060016000555050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526006602052604081205415155b92915050565b60026000541415611ccd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611cdb856144f7565b611ce484614668565b611ced856145e8565b600154700100000000000000000000000000000000900460ff1615611d3e576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d46613875565b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff85811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611de0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e04919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638885604051611e7292919091825261ffff16602082015260400190565b60405180910390a38215611e9057611e908484878460006001613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015611f1957600080fd5b505af1158015611f2d573d6000803e3d6000fd5b505060016000555050505050505050565b6000611c5a60058361480f565b60026000541415611fb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa15801561204b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206f919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166120be576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120c661481b565b6120fc576040517f7e52ccb400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061210782612668565b509050612112613875565b82156121285761212884848a8560016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d8906121aa908c90600290879033908f908f908f90600401615663565b6020604051808303816000875af11580156121c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ed91906156bf565b90508773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167ffada13ff2d5e1a1d9da37ad4a4130893b34e3c69c32b17f87ec31fd661b867078460405161226591815260200190565b60405180910390a45050600160005550505050505050565b6060612289600561486b565b905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612381576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561242f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612453919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146124b7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614878565b5050565b60026000541415612533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156125c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e8919061560b565b90506125f4818361489a565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401610c00565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126fc919061560b565b905060008061270b8387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156127a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127c991906156bf565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015291965061271091851690637afb010490604401602060405180830381865afa158015612863573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061288791906156bf565b6128919190615744565b9350505050915091565b60026000541415612908576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129bd919061560b565b90506129c7613875565b8115612a7e576129dc83833384600080613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015612a6557600080fd5b505af1158015612a79573d6000803e3d6000fd5b505050505b5050600160005550565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612af3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b17919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b7b576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614c92565b600080612b9283612668565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152919350600092507f000000000000000000000000000000000000000000000000000000000000000090911690633192195c906024016040805180830381865afa158015612c26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4a91906157c5565b9150819050612c5b61271084615707565b612c659190615744565b949350505050565b60026000541415612cda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063fdd5764590602401602060405180830381865afa158015612d6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d91919061560b565b73ffffffffffffffffffffffffffffffffffffffff161480612dd7575073ffffffffffffffffffffffffffffffffffffffff831660009081526006602052604090205415155b15612e0e576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612eac57600080fd5b505af1158015611c23573d6000803e3d6000fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f4f919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612fb3576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000061300a576040517f50dd11fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805464ffffffffff90921671010000000000000000000000000000000000027fffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffffff909216919091179055565b6040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063f67c5bd090602401602060405180830381865afa1580156130e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061310c91906156bf565b905080158015906131ab5750807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015613184573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a891906156bf565b16155b9392505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561321d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613241919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146132a5576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018054911515700100000000000000000000000000000000027fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff909216919091179055565b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600060448301819052917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561338c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133b091906156bf565b90506133bb816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f98274bf834d179ee08dc0604071b0dc90b54731bd5f725a5a96a39a86bce025a8360405161340391815260200190565b60405180910390a250505050565b61341a816144f7565b600154700100000000000000000000000000000000900460ff161561346b576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600160448301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561350c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061353091906156bf565b905061353b816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f9cac51154cc0d835e2f9c9d1f59a9344588cee107f4203bf58a8c797e3a58c458360405161340391815260200190565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613617919061560b565b90506000806136268387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156136c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136e491906156bf565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529195506000917f00000000000000000000000000000000000000000000000000000000000000001690633192195c906024016040805180830381865afa158015613775573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061379991906157c5565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350600092506127109187169063f9a6503090604401602060405180830381865afa158015613837573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061385b91906156bf565b6138659190615707565b9092109794965093945050505050565b34156139b5577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156138e357600080fd5b505af11580156138f7573d6000803e3d6000fd5b50506040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201523460248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16935063a9059cbb925060440190506020604051808303816000875af115801561398f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139b391906157e9565b505b565b6139c084614cb4565b6040517f830aa74500000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f0000000000000000000000000000000000000000000000000000000000000000169063830aa74590608401600060405180830381600087803b158015613a5e57600080fd5b505af1158015613a72573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fa32435755c235de2976ed44a75a2f85cb01faf0c894f639fe0c32bb9455fea8f83604051613ad591815260200190565b60405180910390a350505050565b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301523060248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b158015613b7257600080fd5b505af1158015613b86573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff871692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a28460005b8181101561441d5736888883818110613bea57613bea615806565b9050602002810190613bfc9190615835565b90506004613c0d6020830183615873565b90501015613c47576040517fe2b0e50600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b30613c5560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16141561421c578415613ca9576040517f5fb9107f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613cb86020830183615873565b613cc1916158d8565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167f59781034000000000000000000000000000000000000000000000000000000001415613e3c5760008080613d1e6020860186615873565b613d2c916004908290615920565b810190613d39919061522e565b925092509250613e34838c73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614613e2b576040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015613e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e26919061560b565b613e2d565b8b5b84846139b7565b505050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2b7c7b11000000000000000000000000000000000000000000000000000000001415613ec757600194506000613e996020840184615873565b613ea7916004908290615920565b810190613eb49190615215565b9050613ec1898983613411565b50614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2a7ba1f7000000000000000000000000000000000000000000000000000000001415613f80578415613f49576040517fc0b0caa800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613f586020840184615873565b613f66916004908290615920565b810190613f739190615215565b9050613ec18989836132eb565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f233a8caa0000000000000000000000000000000000000000000000000000000014156140e457600080613fda6020850185615873565b613fe8916004908290615920565b810190613ff5919061594a565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c8116600483015292945090925082918416906370a0823190602401602060405180830381865afa158015614069573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061408d91906156bf565b10156140dd576040517fa5ac537300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016108e7565b5050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fc690908a00000000000000000000000000000000000000000000000000000000141561416457600061413d6020840184615873565b61414b916004908290615920565b81019061415891906151f8565b9050613ec1888261489a565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f23e27a640000000000000000000000000000000000000000000000000000000014156141e45760006141bd6020840184615873565b6141cb916004908290615920565b8101906141d891906151f8565b9050613ec18882614d42565b6040517f1e9e7e7a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50614414565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff68754361426760208501856151f8565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156142d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142f4919061560b565b73ffffffffffffffffffffffffffffffffffffffff16148061436d575073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001661435560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16145b156143a4576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6144126143b46020830183615873565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506143f69250505060208401846151f8565b73ffffffffffffffffffffffffffffffffffffffff1690614e39565b505b50600101613bcf565b506040517f60c8e8938c9a0c0d88a98d6f1c562ce68077e12bf3edb8047378f2f736cb45b490600090a16040517fe1998cf900000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff86811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b1580156144d657600080fd5b505af11580156144ea573d6000803e3d6000fd5b5050505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006139b3576001546fffffffffffffffffffffffffffffffff9081169081146124c257600454608081901c906fffffffffffffffffffffffffffffffff16600067ffffffffffffffff8316431461456e578461458a565b61458a6fffffffffffffffffffffffffffffffff831686615976565b9050838111156145c6576040517f675f1a5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff81164360801b176004555050505050565b6002546fffffffffffffffffffffffffffffffff16811080614631575060025470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681115b156139b3576040517fce16799400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61467061481b565b156146a7576040517f63fc31c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1615614806577f0000000000000000000000000000000000000000000000000000000000000000801561472657503373ffffffffffffffffffffffffffffffffffffffff821614155b1561475d576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600160248301527f00000000000000000000000000000000000000000000000000000000000000001690639dc29fac90604401600060405180830381600087803b1580156147ed57600080fd5b505af1158015614801573d6000803e3d6000fd5b505050505b6139b381614cb4565b60006131ab8383614e7b565b60007f0000000000000000000000000000000000000000000000000000000000000000801561228957505060015471010000000000000000000000000000000000900464ffffffffff1642101590565b606060006131ab83614ea5565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f01565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561492b57600080fd5b505af115801561493f573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527fdf498aa1c340e992665d6fb4f3be8436d452c45a630cb6d7fab7963da39bac8793500190505b60405180910390a15050565b6040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600091829160019183917f00000000000000000000000000000000000000000000000000000000000000001690638991b2f190602401602060405180830381865afa158015614a2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a5391906156bf565b90505b808211614c895780821615614c7d576040517fe75538c700000000000000000000000000000000000000000000000000000000815260048101839052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e75538c7906024016040805180830381865afa158015614af4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b18919061577f565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529294509092506000918416906370a0823190602401602060405180830381865afa158015614b8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bb191906156bf565b90506001811115614c79576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff8481166024830152600091908b169063f9a6503090604401602060405180830381865afa158015614c33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c5791906156bf565b978801979050614c6b61ffff841682615707565b614c759088615976565b9650505b5050505b600182901b9150614a56565b50509250929050565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f50565b3373ffffffffffffffffffffffffffffffffffffffff821614801590614d0b575033600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16155b156139b3576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b158015614dd357600080fd5b505af1158015614de7573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527f69db9e9764da61b6681b89fb0f5be018506e0342036e56b59c3015a620d60977935001905061498d565b60606131ab83836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250615043565b6000826000018281548110614e9257614e92615806565b9060005260206000200154905092915050565b606081600001805480602002602001604051908101604052809291908181526020018280548015614ef557602002820191906000526020600020905b815481526020019060010190808311614ee1575b50505050509050919050565b6000818152600183016020526040812054614f4857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611c5a565b506000611c5a565b60008181526001830160205260408120548015615039576000614f746001836157ae565b8554909150600090614f88906001906157ae565b9050818114614fed576000866000018281548110614fa857614fa8615806565b9060005260206000200154905080876000018481548110614fcb57614fcb615806565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080614ffe57614ffe61598e565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611c5a565b6000915050611c5a565b6060612c65848460008585843b6150b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108e7565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516150df91906159ed565b60006040518083038185875af1925050503d806000811461511c576040519150601f19603f3d011682016040523d82523d6000602084013e615121565b606091505b509150915061513182828661513c565b979650505050505050565b6060831561514b5750816131ab565b82511561515b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e791906159ff565b73ffffffffffffffffffffffffffffffffffffffff811681146139b357600080fd5b80151581146139b357600080fd5b600080604083850312156151d257600080fd5b82356151dd8161518f565b915060208301356151ed816151b1565b809150509250929050565b60006020828403121561520a57600080fd5b81356131ab8161518f565b60006020828403121561522757600080fd5b5035919050565b60008060006060848603121561524357600080fd5b833561524e8161518f565b9250602084013561525e8161518f565b929592945050506040919091013590565b60008083601f84011261528157600080fd5b50813567ffffffffffffffff81111561529957600080fd5b6020830191508360208260051b85010111156152b457600080fd5b9250929050565b60008060008060008060a087890312156152d457600080fd5b86356152df8161518f565b955060208701356152ef8161518f565b9450604087013593506060870135615306816151b1565b9250608087013567ffffffffffffffff81111561532257600080fd5b61532e89828a0161526f565b979a9699509497509295939492505050565b60008060008060006080868803121561535857600080fd5b85356153638161518f565b945060208601359350604086013561537a816151b1565b9250606086013567ffffffffffffffff81111561539657600080fd5b6153a28882890161526f565b969995985093965092949392505050565b80356fffffffffffffffffffffffffffffffff811681146153d357600080fd5b919050565b600080604083850312156153eb57600080fd5b6153f4836153b3565b9150615402602084016153b3565b90509250929050565b61ffff811681146139b357600080fd5b6000806000806080858703121561543157600080fd5b8435935060208501356154438161518f565b925060408501356154538161540b565b915060608501356154638161540b565b939692955090935050565b60008060008060006080868803121561548657600080fd5b8535945060208601356154988161518f565b9350604086013567ffffffffffffffff8111156154b457600080fd5b6154c08882890161526f565b90945092505060608601356154d48161540b565b809150509295509295909350565b6020808252825182820181905260009190848201906040850190845b8181101561553057835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016154fe565b50909695505050505050565b60006020828403121561554e57600080fd5b6131ab826153b3565b6000806020838503121561556a57600080fd5b823567ffffffffffffffff81111561558157600080fd5b61558d8582860161526f565b90969095509350505050565b600080604083850312156155ac57600080fd5b82356155b78161518f565b915060208301356151ed8161518f565b6000602082840312156155d957600080fd5b813564ffffffffff811681146131ab57600080fd5b60006020828403121561560057600080fd5b81356131ab816151b1565b60006020828403121561561d57600080fd5b81516131ab8161518f565b6003811061565f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b73ffffffffffffffffffffffffffffffffffffffff888116825260e082019061568f602084018a615628565b6040830197909752948616606082015292909416608083015260a082015291151560c09092019190915292915050565b6000602082840312156156d157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561573f5761573f6156d8565b500290565b60008261577a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000806040838503121561579257600080fd5b825161579d8161518f565b60208401519092506151ed8161540b565b6000828210156157c0576157c06156d8565b500390565b600080604083850312156157d857600080fd5b505080516020909101519092909150565b6000602082840312156157fb57600080fd5b81516131ab816151b1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc183360301811261586957600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126158a857600080fd5b83018035915067ffffffffffffffff8211156158c357600080fd5b6020019150368190038213156152b457600080fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156159185780818660040360031b1b83161692505b505092915050565b6000808585111561593057600080fd5b8386111561593d57600080fd5b5050820193919092039150565b6000806040838503121561595d57600080fd5b82356159688161518f565b946020939093013593505050565b60008219821115615989576159896156d8565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60005b838110156159d85781810151838201526020016159c0565b838111156159e7576000848401525b50505050565b600082516158698184602087016159bd565b6020815260008251806020840152615a1e8160408501602087016159bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea2646970667358221220a3f4a705ab580a6ada1e438cd2ee4abc001b62d1d171fce12c41994900fef21664736f6c634300080a003360c06040523480156200001157600080fd5b50604051620026cf380380620026cf833981016040819052620000349162000324565b82828281600090805190602001906200004f92919062000194565b5080516200006590600190602084019062000194565b50506006805460ff19169055506001600160a01b0381166200009a57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000d9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ff9190620003a1565b6001600160a01b03166080816001600160a01b03168152505050826001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000158573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200017e9190620003a1565b6001600160a01b031660a0525062000403915050565b828054620001a290620003c6565b90600052602060002090601f016020900481019282620001c6576000855562000211565b82601f10620001e157805160ff191683800117855562000211565b8280016001018555821562000211579182015b8281111562000211578251825591602001919060010190620001f4565b506200021f92915062000223565b5090565b5b808211156200021f576000815560010162000224565b80516001600160a01b03811681146200025257600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200027f57600080fd5b81516001600160401b03808211156200029c576200029c62000257565b604051601f8301601f19908116603f01168101908282118183101715620002c757620002c762000257565b81604052838152602092508683858801011115620002e457600080fd5b600091505b83821015620003085785820183015181830184015290820190620002e9565b838211156200031a5760008385830101525b9695505050505050565b6000806000606084860312156200033a57600080fd5b62000345846200023a565b60208501519093506001600160401b03808211156200036357600080fd5b62000371878388016200026d565b935060408601519150808211156200038857600080fd5b5062000397868287016200026d565b9150509250925092565b600060208284031215620003b457600080fd5b620003bf826200023a565b9392505050565b600181811c90821680620003db57607f821691505b60208210811415620003fd57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a0516122756200045a6000396000610a9a015260008181610386015281816106db0152818161089101528181610f15015281816110010152818161115b015281816112f401526114f901526122756000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80636352211e116100f9578063a0bcfc7f11610097578063b88d4fde11610071578063b88d4fde146103a8578063c87b56dd146103b6578063e985e9c5146103c9578063fca3b5aa1461041257600080fd5b8063a0bcfc7f14610360578063a22cb46514610373578063a50cf2c81461038157600080fd5b80638456cb59116100d35780638456cb591461032a57806389406ff51461033257806395d89b41146103455780639dc29fac1461034d57600080fd5b80636352211e146102fc5780636c0360eb1461030f57806370a082311461031757600080fd5b80633f4ba83a116101665780634610f6ac116101405780634610f6ac146102b357806354fd4d50146102c6578063576cd2d1146102ce5780635c975abb146102f157600080fd5b80633f4ba83a1461029857806340c10f19146102a057806342842e0e1461028a57600080fd5b8063081812fc116101a2578063081812fc1461024b578063095ea7b31461025e57806318160ddd1461027357806323b872dd1461028a57600080fd5b806301ffc9a7146101c957806306fdde03146101f15780630754617214610206575b600080fd5b6101dc6101d7366004611cc6565b610425565b60405190151581526020015b60405180910390f35b6101f961050a565b6040516101e89190611d38565b6008546102269073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e8565b610226610259366004611d89565b61059c565b61027161026c366004611dc7565b61067b565b005b61027c60075481565b6040519081526020016101e8565b61027161026c366004611df3565b6102716106ad565b6102716102ae366004611dc7565b61079b565b6102716102c1366004611e34565b610863565b61027c600181565b6101dc6102dc366004611e34565b60096020526000908152604090205460ff1681565b60065460ff166101dc565b61022661030a366004611d89565b610cd9565b6101f9610d8b565b61027c610325366004611e34565b610e19565b610271610ee7565b610271610340366004611e34565b610fd3565b6101f9611103565b61027161035b366004611dc7565b611112565b61027161036e366004611e51565b6112c6565b61027161026c366004611ed1565b6102267f000000000000000000000000000000000000000000000000000000000000000081565b61027161026c366004611f39565b6101f96103c4366004611d89565b6113bb565b6101dc6103d7366004612037565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205460ff1690565b610271610420366004611e34565b6114cb565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd0000000000000000000000000000000000000000000000000000000014806104b857507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061050457507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60606000805461051990612065565b80601f016020809104026020016040519081016040528092919081815260200182805461054590612065565b80156105925780601f1061056757610100808354040283529160200191610592565b820191906000526020600020905b81548152906001019060200180831161057557829003601f168201915b5050505050905090565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff16610652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084015b60405180910390fd5b5060009081526004602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b6040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa158015610737573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075b91906120b9565b610791576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107996115f6565b565b60085473ffffffffffffffffffffffffffffffffffffffff1633146107ec576040517f5c2967f500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006107f783610e19565b905060005b82811015610846576000816108278473ffffffffffffffffffffffffffffffffffffffff8816612105565b6108319190612105565b905061083d85826116d7565b506001016107fc565b5081600760008282546108599190612105565b9091555050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156108ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091191906120b9565b610947576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163b610995576040517f9c01f6a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff1663c12c21c06040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610a1c575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610a199181019061211d565b60015b610a52576040517f9c01f6a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f6fbc6f6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192507f000000000000000000000000000000000000000000000000000000000000000090911690636fbc6f6b90602401602060405180830381865afa158015610ae3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0791906120b9565b1580610bad57503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16639408b63f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b94919061211d565b73ffffffffffffffffffffffffffffffffffffffff1614155b80610c5257508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c39919061211d565b73ffffffffffffffffffffffffffffffffffffffff1614155b15610c89576040517f9c01f6a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff16600090815260096020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff1680610504576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e00000000000000000000000000000000000000000000006064820152608401610649565b600a8054610d9890612065565b80601f0160208091040260200160405190810160405280929190818152602001828054610dc490612065565b8015610e115780601f10610de657610100808354040283529160200191610e11565b820191906000526020600020905b815481529060010190602001808311610df457829003601f168201915b505050505081565b600073ffffffffffffffffffffffffffffffffffffffff8216610ebe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152608401610649565b5073ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015610f71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9591906120b9565b610fcb576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610799611899565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561105d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108191906120b9565b6110b7576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff16600090815260096020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b60606001805461051990612065565b3360009081526009602052604090205460ff161580156111dd57506040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156111b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111db91906120b9565b155b15611214576040517f1e0d048500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061121f83610e19565b90508181101561125b576040517f90c9142d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b828110156112b357600060018261128b8573ffffffffffffffffffffffffffffffffffffffff8916612105565b611295919061213a565b61129f919061213a565b90506112aa81611959565b5060010161125e565b508160076000828254610859919061213a565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611350573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137491906120b9565b6113aa576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113b6600a8383611c0f565b505050565b60008181526002602052604090205460609073ffffffffffffffffffffffffffffffffffffffff1661146f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006064820152608401610649565b6000611479611a26565b9050600081511161149957604051806020016040528060008152506114c4565b806114a384611a35565b6040516020016114b4929190612151565b6040516020818303038152906040525b9392505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611555573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157991906120b9565b6115af576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60065460ff16611662576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610649565b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b73ffffffffffffffffffffffffffffffffffffffff8216611754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610649565b60008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff16156117e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610649565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805460019290611816908490612105565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60065460ff1615611906576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610649565b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586116ad3390565b600061196482610cd9565b9050611971600083611b6f565b73ffffffffffffffffffffffffffffffffffffffff811660009081526003602052604081208054600192906119a790849061213a565b909155505060008281526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555183919073ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6060600a805461051990612065565b606081611a7557505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611a9f5780611a8981612180565b9150611a989050600a836121e8565b9150611a79565b60008167ffffffffffffffff811115611aba57611aba611f0a565b6040519080825280601f01601f191660200182016040528015611ae4576020820181803683370190505b5090505b8415611b6757611af960018361213a565b9150611b06600a866121fc565b611b11906030612105565b60f81b818381518110611b2657611b26612210565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611b60600a866121e8565b9450611ae8565b949350505050565b600081815260046020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091558190611bc982610cd9565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b828054611c1b90612065565b90600052602060002090601f016020900481019282611c3d5760008555611ca1565b82601f10611c74578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00823516178555611ca1565b82800160010185558215611ca1579182015b82811115611ca1578235825591602001919060010190611c86565b50611cad929150611cb1565b5090565b5b80821115611cad5760008155600101611cb2565b600060208284031215611cd857600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146114c457600080fd5b60005b83811015611d23578181015183820152602001611d0b565b83811115611d32576000848401525b50505050565b6020815260008251806020840152611d57816040850160208701611d08565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b600060208284031215611d9b57600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff81168114611dc457600080fd5b50565b60008060408385031215611dda57600080fd5b8235611de581611da2565b946020939093013593505050565b600080600060608486031215611e0857600080fd5b8335611e1381611da2565b92506020840135611e2381611da2565b929592945050506040919091013590565b600060208284031215611e4657600080fd5b81356114c481611da2565b60008060208385031215611e6457600080fd5b823567ffffffffffffffff80821115611e7c57600080fd5b818501915085601f830112611e9057600080fd5b813581811115611e9f57600080fd5b866020828501011115611eb157600080fd5b60209290920196919550909350505050565b8015158114611dc457600080fd5b60008060408385031215611ee457600080fd5b8235611eef81611da2565b91506020830135611eff81611ec3565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060008060808587031215611f4f57600080fd5b8435611f5a81611da2565b93506020850135611f6a81611da2565b925060408501359150606085013567ffffffffffffffff80821115611f8e57600080fd5b818701915087601f830112611fa257600080fd5b813581811115611fb457611fb4611f0a565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715611ffa57611ffa611f0a565b816040528281528a602084870101111561201357600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000806040838503121561204a57600080fd5b823561205581611da2565b91506020830135611eff81611da2565b600181811c9082168061207957607f821691505b602082108114156120b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156120cb57600080fd5b81516114c481611ec3565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115612118576121186120d6565b500190565b60006020828403121561212f57600080fd5b81516114c481611da2565b60008282101561214c5761214c6120d6565b500390565b60008351612163818460208801611d08565b835190830190612177818360208801611d08565b01949350505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156121b2576121b26120d6565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826121f7576121f76121b9565b500490565b60008261220b5761220b6121b9565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea2646970667358221220ffdd83a2fc9a158347ca248f021e63fcef3a7985b3deb793f75cd1835b068aab64736f6c634300080a003360a060405234801561001057600080fd5b506040516106ca3803806106ca83398101604081905261002f9161006c565b60009190915560ff166080526001805460506001600160501b031991821681179092556004805490911690911790554260028190556003556100a2565b6000806040838503121561007f57600080fd5b82519150602083015160ff8116811461009757600080fd5b809150509250929050565b60805161060e6100bc600039600060d3015261060e6000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80639a6fc8f511610081578063d62ada111161005b578063d62ada11146102dc578063f7a30806146102f4578063feaf968c1461030757600080fd5b80639a6fc8f5146101cd578063bd18ad531461023a578063cd653afc1461024d57600080fd5b806354fd4d50116100b257806354fd4d501461012d57806367e8d83d1461013c5780637284e4161461018e57600080fd5b8063313ce567146100ce5780633fd0875f1461010c575b600080fd5b6100f57f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020015b60405180910390f35b6004546a0100000000000000000000900460ff166040516101039190610441565b60405160018152602001610103565b61018c61014a366004610482565b600480549115156c01000000000000000000000000027fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff909216919091179055565b005b604080518082018252600c81527f7072696365206f7261636c6500000000000000000000000000000000000000006020820152905161010391906104ab565b6102036101db36600461053d565b60015460005460025460035460045469ffffffffffffffffffff948516941691939590929450565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610103565b61018c610248366004610558565b61030f565b61018c61025b366004610579565b6001805469ffffffffffffffffffff9586167fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090911617905560029290925560035560048054919092167fffffffffffffffffffffffffffffffffffffffff00ff00000000000000000000909116176b020000000000000000000000179055565b6102e461035f565b6040519015158152602001610103565b61018c6103023660046105bf565b600055565b610203610385565b600480548291907fffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff166b01000000000000000000000083600281111561035757610357610412565b021790555050565b600454600090610380906b010000000000000000000000900460ff166103d6565b905090565b60008060008060006004600c9054906101000a900460ff16156103a757600080fd5b505060015460005460025460035460045469ffffffffffffffffffff9485169893975091955093509190911690565b600060028260028111156103ec576103ec610412565b14156103f757600080fd5b600182600281111561040b5761040b610412565b1492915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016006831061047c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561049457600080fd5b813580151581146104a457600080fd5b9392505050565b600060208083528351808285015260005b818110156104d8578581018301518582016040015282016104bc565b818111156104ea576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803569ffffffffffffffffffff8116811461053857600080fd5b919050565b60006020828403121561054f57600080fd5b6104a48261051e565b60006020828403121561056a57600080fd5b8135600381106104a457600080fd5b6000806000806080858703121561058f57600080fd5b6105988561051e565b935060208501359250604085013591506105b46060860161051e565b905092959194509250565b6000602082840312156105d157600080fd5b503591905056fea264697066735822122014874f7a973b86501c4c1a8be32490fe902c8f088ee234d25f9b2497e19f9e5264736f6c634300080a0033a2646970667358221220d8fdaadc825c43ac2783715ebcfe33e7b0ce3a396ac7717d65e4c95e98b6cf7f64736f6c634300080a003360806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d000117905534801561003957600080fd5b50600054604080516318caf8e360e31b815273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660048083019190915260248201929092526044810191909152632aa9a2a960e11b6064820152620100009091046001600160a01b03169063c657c71890608401600060405180830381600087803b1580156100ba57600080fd5b505af11580156100ce573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b81527390f79bf6eb2c4f870365e785982e1f101e93b90660048201526024810191909152600660448201526511949251539160d21b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561014f57600080fd5b505af1158015610163573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b8152733c44cdddb6a900fa2b585dd299e03d12fa4293bc60048201526024810191909152600a6044820152692624a8aaa4a220aa27a960b11b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b1580156101e857600080fd5b505af11580156101fc573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b815273c4375b7de8af5a38a93548eb8453a498222c4ff260048201526024810191909152600c60448201526b44554d425f4144445245535360a01b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561028357600080fd5b505af1158015610297573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b8152739965507d1a55bcc2695c58ba16fb37d819b0a4dc60048201526024810191909152600760448201526620a220a82a22a960c91b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561031957600080fd5b505af115801561032d573d6000803e3d6000fd5b505050506102a6806103406000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063ba414fa61461003b578063fa7626d414610057575b600080fd5b610043610064565b604051901515815260200160405180910390f35b6000546100439060ff1681565b60008054610100900460ff16156100845750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156101bf5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610129917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016101ff565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526101619161023b565b6000604051808303816000865af19150503d806000811461019e576040519150601f19603f3d011682016040523d82523d6000602084013e6101a3565b606091505b50915050808060200190518101906101bb919061024e565b9150505b919050565b6000815160005b818110156101e557602081850181015186830152016101cb565b818111156101f4576000828601525b509290920192915050565b7fffffffff0000000000000000000000000000000000000000000000000000000083168152600061023360048301846101c4565b949350505050565b600061024782846101c4565b9392505050565b60006020828403121561026057600080fd5b8151801515811461024757600080fdfea2646970667358221220293f55a0ef7b60c31a89dbc50e3339c80a8fdb1f9567614b200e97598226671f64736f6c634300080a003360806040523480156200001157600080fd5b506040516201110538038062011105833981016040819052620000349162000811565b6200003f3362000734565b6040516200004d9062000784565b604051809103906000f0801580156200006a573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b039283169081179091556040516310dc138160e31b81529184166004830152906386e09c0890602401600060405180830381600087803b158015620000c457600080fd5b505af1158015620000d9573d6000803e3d6000fd5b50506001546040516301ed651160e41b81526001600160a01b0385811660048301529091169250631ed651109150602401600060405180830381600087803b1580156200012557600080fd5b505af11580156200013a573d6000803e3d6000fd5b505050506040516200014c9062000792565b604051809103906000f08015801562000169573d6000803e3d6000fd5b50600280546001600160a01b0319166001600160a01b039283169081179091556001546040516376aad60560e01b81526004810192909252909116906376aad60590602401600060405180830381600087803b158015620001c957600080fd5b505af1158015620001de573d6000803e3d6000fd5b5050600154604051600093506001600160a01b0390911691506200020290620007a0565b6001600160a01b039091168152602001604051809103906000f0801580156200022f573d6000803e3d6000fd5b5060015460405163338f12b960e21b81526001600160a01b03808416600483015292935091169063ce3c4ae490602401600060405180830381600087803b1580156200027a57600080fd5b505af11580156200028f573d6000803e3d6000fd5b5050600154604051600093506001600160a01b039091169150620002b390620007ae565b6001600160a01b039091168152602001604051809103906000f080158015620002e0573d6000803e3d6000fd5b5060015460405163c5120b3960e01b81526001600160a01b03808416600483015292935091169063c5120b3990602401600060405180830381600087803b1580156200032b57600080fd5b505af115801562000340573d6000803e3d6000fd5b5050600154604051606093506001600160a01b03909116915082906200036690620007bc565b6200037392919062000849565b604051809103906000f08015801562000390573d6000803e3d6000fd5b50600380546001600160a01b0319166001600160a01b0392831690811790915560015460405163530e784f60e01b815260048101929092529091169063530e784f90602401600060405180830381600087803b158015620003f057600080fd5b505af115801562000405573d6000803e3d6000fd5b5050600154604051600093506001600160a01b0390911691506200042990620007ca565b6001600160a01b039091168152602001604051809103906000f08015801562000456573d6000803e3d6000fd5b506001546040516356ee0d3b60e11b81526001600160a01b03808416600483015292935091169063addc1a7690602401600060405180830381600087803b158015620004a157600080fd5b505af1158015620004b6573d6000803e3d6000fd5b5050600154604051600093506001600160a01b039091169150620004da90620007d8565b6001600160a01b039091168152602001604051809103906000f08015801562000507573d6000803e3d6000fd5b506001546040516321da583760e01b81526001600160a01b0380841660048301529293509116906321da583790602401600060405180830381600087803b1580156200055257600080fd5b505af115801562000567573d6000803e3d6000fd5b505050506000306040516200057c90620007e6565b6001600160a01b039091168152602001604051809103906000f080158015620005a9573d6000803e3d6000fd5b50600154604051631795d5b360e31b81526001600160a01b03808416600483015292935091169063bcaead9890602401600060405180830381600087803b158015620005f457600080fd5b505af115801562000609573d6000803e3d6000fd5b505060405163f2fde38b60e01b81523360048201526001600160a01b038416925063f2fde38b9150602401600060405180830381600087803b1580156200064f57600080fd5b505af115801562000664573d6000803e3d6000fd5b505060015460405163f2fde38b60e01b81523360048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b158015620006ae57600080fd5b505af1158015620006c3573d6000803e3d6000fd5b505060025460405163f2fde38b60e01b81523360048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b1580156200070d57600080fd5b505af115801562000722573d6000803e3d6000fd5b505050505050505050505050620008b2565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610fcd80620010dd83390190565b61098c80620020aa83390190565b610f508062002a3683390190565b614da6806200398683390190565b611b45806200872c83390190565b612ced806200a27183390190565b611627806200cf5e83390190565b612b80806200e58583390190565b80516001600160a01b03811681146200080c57600080fd5b919050565b600080604083850312156200082557600080fd5b6200083083620007f4565b91506200084060208401620007f4565b90509250929050565b6001600160a01b0383811682526040602080840182905284518483018190526000938683019290916060870190865b81811015620008a3578551805186168452840151851684840152948301949186019160010162000878565b50909998505050505050505050565b61081b80620008c26000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80638874ff1f1161005b5780638874ff1f146100f55780638da5cb5b14610108578063de28735914610126578063f2fde38b1461014657600080fd5b80632630c12f146100825780632954018c146100cb578063715018a6146100eb575b600080fd5b6003546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6001546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b6100f3610159565b005b6100f3610103366004610658565b6101eb565b60005473ffffffffffffffffffffffffffffffffffffffff166100a2565b6002546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b6100f3610154366004610734565b6103e3565b60005473ffffffffffffffffffffffffffffffffffffffff1633146101df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6101e96000610513565b565b60005473ffffffffffffffffffffffffffffffffffffffff16331461026c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101d6565b60005b815181101561035c57600354825173ffffffffffffffffffffffffffffffffffffffff9091169063e8a97a3e908490849081106102ae576102ae610756565b6020026020010151600001518484815181106102cc576102cc610756565b6020026020010151602001516040518363ffffffff1660e01b815260040161031792919073ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b600060405180830381600087803b15801561033157600080fd5b505af1158015610345573d6000803e3d6000fd5b50505050808061035490610785565b91505061026f565b506002546040517ff2fde38b00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063f2fde38b90602401600060405180830381600087803b1580156103c857600080fd5b505af11580156103dc573d6000803e3d6000fd5b5050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101d6565b73ffffffffffffffffffffffffffffffffffffffff8116610507576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016101d6565b61051081610513565b50565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156105da576105da610588565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561062757610627610588565b604052919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461065357600080fd5b919050565b6000602080838503121561066b57600080fd5b823567ffffffffffffffff8082111561068357600080fd5b818501915085601f83011261069757600080fd5b8135818111156106a9576106a9610588565b6106b7848260051b016105e0565b818152848101925060069190911b8301840190878211156106d757600080fd5b928401925b8184101561072957604084890312156106f55760008081fd5b6106fd6105b7565b6107068561062f565b815261071386860161062f565b81870152835260409390930192918401916106dc565b979650505050505050565b60006020828403121561074657600080fd5b61074f8261062f565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156107de577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea26469706673582212205ee75e57bb635aa49a1758f4ab0b04182a73115bff08f420c56a8ddb433c029364736f6c634300080a0033608060405234801561001057600080fd5b5061001a3361005f565b60405130906f20a2222922a9a9afa82927ab24a222a960811b907fb37614c7d254ea8d16eb81fa11dddaeb266aa8ba4917980859c7740aff30c69190600090a36100af565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610f0f806100be6000396000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c806377532ed9116100e3578063bcaead981161008c578063ce3c4ae411610066578063ce3c4ae414610308578063f2fde38b1461031b578063fca513a81461032e57600080fd5b8063bcaead98146102da578063c5120b39146102ed578063c513c9bb1461030057600080fd5b80639068a868116100bd5780639068a868146102b7578063addc1a76146102bf578063affd9243146102d257600080fd5b806377532ed91461027e57806386e09c08146102865780638da5cb5b1461029957600080fd5b80634c252f9111610145578063699f200f1161011f578063699f200f1461022d578063715018a61461026357806376aad6051461026b57600080fd5b80634c252f91146101fc578063530e784f1461020457806354fd4d501461021757600080fd5b80631ed65110116101765780631ed65110146101cc57806321da5837146101e157806326c74fc3146101f457600080fd5b8063060678c21461019257806308737695146101c4575b600080fd5b61019a610336565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61019a610366565b6101df6101da366004610e10565b610391565b005b6101df6101ef366004610e10565b610444565b61019a6104ef565b61019a61051a565b6101df610212366004610e10565b610545565b61021f600281565b6040519081526020016101bb565b61019a61023b366004610e4d565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6101df6105f0565b6101df610279366004610e10565b61067d565b61019a610728565b6101df610294366004610e10565b610753565b60005473ffffffffffffffffffffffffffffffffffffffff1661019a565b61019a6107fe565b6101df6102cd366004610e10565b610829565b61019a6108d4565b6101df6102e8366004610e10565b6108ff565b6101df6102fb366004610e10565b6109aa565b61019a610a55565b6101df610316366004610e10565b610a80565b6101df610329366004610e10565b610b2b565b61019a610c58565b60006103617f444154415f434f4d50524553534f520000000000000000000000000000000000610c7f565b905090565b60006103617f41434c0000000000000000000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610417576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6104417f54524541535552595f434f4e545241435400000000000000000000000000000082610d1d565b50565b60005473ffffffffffffffffffffffffffffffffffffffff1633146104c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f574554485f47415445574159000000000000000000000000000000000000000082610d1d565b60006103617f54524541535552595f434f4e5452414354000000000000000000000000000000610c7f565b60006103617f574554485f544f4b454e00000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f50524943455f4f5241434c45000000000000000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610671576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b61067b6000610d9b565b565b60005473ffffffffffffffffffffffffffffffffffffffff1633146106fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f41434c000000000000000000000000000000000000000000000000000000000082610d1d565b60006103617f574554485f474154455741590000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146107d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f574554485f544f4b454e0000000000000000000000000000000000000000000082610d1d565b60006103617f4143434f554e545f464143544f52590000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146108aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f4143434f554e545f464143544f5259000000000000000000000000000000000082610d1d565b60006103617f474541525f544f4b454e00000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610980576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f474541525f544f4b454e0000000000000000000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f444154415f434f4d50524553534f52000000000000000000000000000000000082610d1d565b60006103617f434f4e5452414354535f52454749535445520000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610b01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f434f4e5452414354535f5245474953544552000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610bac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b73ffffffffffffffffffffffffffffffffffffffff8116610c4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161040e565b61044181610d9b565b60006103617f50524943455f4f5241434c4500000000000000000000000000000000000000005b6000818152600160209081526040808320548151808301909252600382527f41503100000000000000000000000000000000000000000000000000000000009282019290925273ffffffffffffffffffffffffffffffffffffffff9091169081610d16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040e9190610e66565b5092915050565b60008281526001602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091559051909184917fb37614c7d254ea8d16eb81fa11dddaeb266aa8ba4917980859c7740aff30c6919190a35050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215610e2257600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610e4657600080fd5b9392505050565b600060208284031215610e5f57600080fd5b5035919050565b600060208083528351808285015260005b81811015610e9357858101830151858201604001528201610e77565b81811115610ea5576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea264697066735822122083c228af017c6f5cf8c395cdf7a53276ff56fdd4f4313c39f680ab73bd75417364736f6c634300080a0033608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61090e8061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063732818191161008c578063adce758d11610066578063adce758d14610215578063ba306df114610228578063d4eb5db01461023b578063f2fde38b1461027457600080fd5b806373281819146101b7578063819ad68e146101da5780638da5cb5b146101ed57600080fd5b806354fd4d50116100bd57806354fd4d501461016a5780635f259aba14610180578063715018a6146101af57600080fd5b806335914829146100e45780633a41ec641461011c5780634910832f14610155575b600080fd5b6101076100f236600461089b565b60016020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61010761012a36600461089b565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205460ff1690565b61016861016336600461089b565b610287565b005b610172600181565b604051908152602001610113565b61010761018e36600461089b565b60005473ffffffffffffffffffffffffffffffffffffffff91821691161490565b610168610387565b6101076101c536600461089b565b60026020526000908152604090205460ff1681565b6101686101e836600461089b565b610414565b60005460405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610113565b61016861022336600461089b565b61050c565b61016861023636600461089b565b610601565b61010761024936600461089b565b73ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205460ff1690565b61016861028236600461089b565b6106f6565b60005473ffffffffffffffffffffffffffffffffffffffff16331461030d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909217909155517fae26b1cfe9454ba87274a4e8330b6654684362d0f3d7bbd17f7449a1d38387c69190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610408576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b6104126000610826565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517fd400da6c0c0a894dacc0981730b88af0545d00272ee8fff1437bf560ff245fc49190a250565b60005473ffffffffffffffffffffffffffffffffffffffff16331461058d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f1998397e7203f7baca9d6f41b9e4da6e768daac5caad4234fb9bf5869d2715459190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610682576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526001602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f28b01395b7e25d20552a0c8dc8ecd3b1d4abc986f14dad7885fd45b6fd73c8d99190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811661081a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610304565b61082381610826565b50565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156108ad57600080fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146108d157600080fd5b939250505056fea26469706673582212204712efbfe997070def77285a5b8753bc882b62da2133ce1937ad26cd2b48e49864736f6c634300080a003360a060405234801561001057600080fd5b50604051610f50380380610f5083398101604081905261002f916100d7565b6000805460ff19169055806001600160a01b03811661006157604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa15801561009f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100c391906100d7565b6001600160a01b0316608052506101079050565b6000602082840312156100e957600080fd5b81516001600160a01b038116811461010057600080fd5b9392505050565b608051610e1261013e600039600081816101e2015281816102b20152818161040f0152818161057801526108510152610e126000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80638456cb5911610097578063b4ac686011610066578063b4ac686014610217578063c29277cd1461021f578063d914cd4b14610227578063e26b2f631461023a57600080fd5b80638456cb59146101cd57806394144856146101d5578063a50cf2c8146101dd578063ac4afa381461020457600080fd5b80635b16ebb7116100d35780635b16ebb7146101575780635c975abb1461018a578063673a2a1f146101955780636fbc6f6b146101aa57600080fd5b80631e16e4fc146100fa5780633f4ba83a1461013757806354fd4d5014610141575b600080fd5b61010d610108366004610c97565b61024d565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61013f610284565b005b610149600181565b60405190815260200161012e565b61017a610165366004610cb0565b60026020526000908152604090205460ff1681565b604051901515815260200161012e565b60005460ff1661017a565b61019d610372565b60405161012e9190610ced565b61017a6101b8366004610cb0565b60046020526000908152604090205460ff1681565b61013f6103e1565b61019d6104cd565b61010d7f000000000000000000000000000000000000000000000000000000000000000081565b61010d610212366004610c97565b61053a565b600154610149565b600354610149565b61013f610235366004610cb0565b61054a565b61013f610248366004610cb0565b610823565b6003818154811061025d57600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa15801561030e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103329190610d47565b610368576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610370610af6565b565b606060018054806020026020016040519081016040528092919081815260200182805480156103d757602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116103ac575b5050505050905090565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561046b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048f9190610d47565b6104c5576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610370610bd7565b606060038054806020026020016040519081016040528092919081815260200182805480156103d75760200282019190600052602060002090815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116103ac575050505050905090565b6001818154811061025d57600080fd5b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156105d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f89190610d47565b61062e576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051808201909152600281527f5a30000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff82166106b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b60405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff8116600090815260026020908152604091829020548251808401909352600383527f43523100000000000000000000000000000000000000000000000000000000009183019190915260ff1615610753576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b506001805480820182557fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915560008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909417909355915190917ff816b5143086c89d103a0683286be86c2b741e83ebfa75135aae606e2f5c6e5391a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156108ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d19190610d47565b610907576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051808201909152600281527f5a30000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8216610989576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b5073ffffffffffffffffffffffffffffffffffffffff8116600090815260046020908152604091829020548251808401909352600383527f43523200000000000000000000000000000000000000000000000000000000009183019190915260ff1615610a23576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b506003805460018082019092557fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915560008181526004602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909417909355915190917f58ad3cfc4b6552a53c8c4128ae9b080e14b4378a159280643a62c6f709cee24f91a250565b60005460ff16610b62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016106b0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff1615610c44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016106b0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610bad3390565b600060208284031215610ca957600080fd5b5035919050565b600060208284031215610cc257600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610ce657600080fd5b9392505050565b6020808252825182820181905260009190848201906040850190845b81811015610d3b57835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101610d09565b50909695505050505050565b600060208284031215610d5957600080fd5b81518015158114610ce657600080fd5b600060208083528351808285015260005b81811015610d9657858101830151858201604001528201610d7a565b81811115610da8576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea26469706673582212208f2d91c863db9ab1494a9c5db20e3fddc4b6c779ea3c3621737c105c60d9440a64736f6c634300080a003360e06040523480156200001157600080fd5b5060405162004da638038062004da6833981016040819052620000349162000160565b6001600160a01b0381166200005c57604051635919af9760e11b815260040160405180910390fd5b6001600160a01b03811660808190526040805163c513c9bb60e01b8152905163c513c9bb916004808201926020929091908290030181865afa158015620000a7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cd919062000160565b6001600160a01b031660a0816001600160a01b0316815250506080516001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000127573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200014d919062000160565b6001600160a01b031660c0525062000192565b6000602082840312156200017357600080fd5b81516001600160a01b03811681146200018b57600080fd5b9392505050565b60805160a05160c051614b896200021d6000396000818161018801528181611c4f0152612c5a0152600081816101ed015281816115e201528181611f5f0152818161213f0152818161223f0152818161243801528181612604015281816126bc01528181612788015281816129a501528181613c410152613d000152600061013c0152614b896000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c806354fd4d5011610081578063a80deda31161005b578063a80deda31461020f578063ae093f3f1461022f578063fc9914cb1461024f57600080fd5b806354fd4d50146101bd578063663b8fdb146101d35780637a0c7b21146101e857600080fd5b80632954018c116100b25780632954018c146101375780634b2f336d146101835780634c472fc9146101aa57600080fd5b80630dbd616d146100d957806313d21cdf146101025780631bcd8fc014610122575b600080fd5b6100ec6100e73660046140fc565b610272565b6040516100f9919061430b565b60405180910390f35b61011561011036600461431e565b6114d4565b6040516100f99190614444565b61012a611f59565b6040516100f99190614453565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100f9565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b61015e6101b83660046140fc565b6121f5565b6101c5600281565b6040519081526020016100f9565b6101db612432565b6040516100f991906146ea565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b61022261021d36600461431e565b6126b5565b6040516100f9919061476a565b61024261023d36600461431e565b612a75565b6040516100f991906147dd565b61026261025d3660046140fc565b613bf7565b60405190151581526020016100f9565b61035f604051806102400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160008152602001606081526020016000815260200160008152602001600015158152602001600081526020016000815260200160008152602001600060ff168152602001600081525090565b600080600080600061037088613cf4565b509450945094509450945060008560ff1660011461041d576040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015284169063e958b70490602401602060405180830381865afa1580156103f4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061041891906147f0565b6104ad565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015286169063e958b70490602401602060405180830381865afa158015610489573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ad91906147f0565b60ff8716610200890181905273ffffffffffffffffffffffffffffffffffffffff808b1660208b01528b811660608b015282168952909150600114156109e9578473ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610538573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055c91906147f0565b73ffffffffffffffffffffffffffffffffffffffff90811660808901526040517fc7de38a600000000000000000000000000000000000000000000000000000000815282821660048201529085169063c7de38a690602401602060405180830381865afa1580156105d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f5919061480d565b60c08801526040517fdfd5946500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015285169063dfd5946590602401602060405180830381865afa158015610666573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068a919061480d565b60e08801526040517f3ce0735500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015260006024830152861690633ce0735590604401602060405180830381865afa92505050801561073c575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526107399181019061480d565b60015b6107455761074c565b6101408801525b6040517f3ce0735500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015260016024830152861690633ce0735590604401602060405180830381865afa9250505080156107f9575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526107f69181019061480d565b60015b61080257610809565b6101608801525b60c08701516040517f996329f800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526024820192909252600060448201529086169063996329f89060640160a060405180830381865afa9250505080156108c4575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526108c191810190614826565b60015b6108cd576108da565b505015156101808a015250505b8073ffffffffffffffffffffffffffffffffffffffff16631afbb7a46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610925573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610949919061480d565b6101a08801526040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152851690633192195c90602401602060405180830381865afa1580156109bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109df919061480d565b60a0880152610c26565b8273ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5891906147f0565b73ffffffffffffffffffffffffffffffffffffffff90811660808901526040517fc7de38a600000000000000000000000000000000000000000000000000000000815282821660048201529083169063c7de38a6906024016040805180830381865afa158015610acc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af09190614866565b5060c08801526040517fdfd5946500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015283169063dfd5946590602401602060405180830381865afa158015610b62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b86919061480d565b60e08801526040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152841690633192195c906024016040805180830381865afa158015610bf6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1a9190614866565b60a08901526101a08801525b60008660ff16600114610ca7578373ffffffffffffffffffffffffffffffffffffffff166316f0115b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca291906147f0565b610d16565b8573ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1691906147f0565b90508073ffffffffffffffffffffffffffffffffffffffff166345d31f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d87919061480d565b6101008901526000600160ff891614610e0e578473ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610de5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e09919061480d565b610e7d565b8573ffffffffffffffffffffffffffffffffffffffff166320a05ff76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7d919061480d565b90508760ff16600114610f1f576040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152861690638991b2f190602401602060405180830381865afa158015610ef6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1a919061480d565b610faf565b6040517fb451cecc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015287169063b451cecc90602401602060405180830381865afa158015610f8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610faf919061480d565b6102208a01528067ffffffffffffffff811115610fce57610fce61488a565b60405190808252806020026020018201604052801561103e57816020015b6040805160808101825260008082526020808301829052928201819052606082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181610fec5790505b506101208a015260005b818110156113d657604080516080810182526000808252602082018190529181018290526060810191909152600180831b9060ff8c1614156111c5576040517faf0a650200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018590528a169063af0a650290604401608060405180830381865afa1580156110f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111b91906148b9565b5050602084015273ffffffffffffffffffffffffffffffffffffffff9081168084526040517ff9eaee0d0000000000000000000000000000000000000000000000000000000081526004810191909152908a169063f9eaee0d90602401602060405180830381865afa158015611195573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b9919061490d565b15156040830152611388565b6040517f172c48c70000000000000000000000000000000000000000000000000000000081526004810184905273ffffffffffffffffffffffffffffffffffffffff89169063172c48c7906024016040805180830381865afa15801561122f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112539190614928565b5073ffffffffffffffffffffffffffffffffffffffff9081168084526040517f70a082310000000000000000000000000000000000000000000000000000000081529188166004830152906370a0823190602401602060405180830381865afa1580156112c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e8919061480d565b602083015281516040517ff9eaee0d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529088169063f9eaee0d90602401602060405180830381865afa15801561135c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611380919061490d565b151560408301525b6102208c015181161561139c57600161139f565b60005b151560608301526101208c01518051839190859081106113c1576113c161495e565b60209081029190910101525050600101611048565b508273ffffffffffffffffffffffffffffffffffffffff166317d11a156040518163ffffffff1660e01b8152600401602060405180830381865afa158015611422573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611446919061480d565b896101c00181815250508273ffffffffffffffffffffffffffffffffffffffff16633dc54b406040518163ffffffff1660e01b8152600401602060405180830381865afa15801561149b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bf919061480d565b6101e08a015250969998505050505050505050565b61159b604051806102000160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600060ff1681525090565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015283917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa15801561162b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164f919061490d565b611685576040517fd384b23800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316808352604080517ffe14112d000000000000000000000000000000000000000000000000000000008152905185929163fe14112d9160048083019260209291908290030181865afa1580156116f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611719919061480d565b8360c00181815250508073ffffffffffffffffffffffffffffffffffffffff1663ef8d96036040518163ffffffff1660e01b8152600401602060405180830381865afa15801561176d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611791919061480d565b8360e00181815250508073ffffffffffffffffffffffffffffffffffffffff1663743753596040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611809919061480d565b8360a00181815250508073ffffffffffffffffffffffffffffffffffffffff16634c19386c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561185d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611881919061480d565b836101000181815250508073ffffffffffffffffffffffffffffffffffffffff1663788c6bfe6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fa919061480d565b836101600181815250508073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561194f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611973919061480d565b8360800181815250508073ffffffffffffffffffffffffffffffffffffffff166345d31f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119eb919061480d565b836101400181815250508073ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6491906147f0565b836040019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff166336dda7d56040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0a91906147f0565b836060019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663788c6bfe6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb0919061480d565b836101600181815250508073ffffffffffffffffffffffffffffffffffffffff1663e941fa786040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c29919061480d565b61018084015260408084015173ffffffffffffffffffffffffffffffffffffffff9081167f000000000000000000000000000000000000000000000000000000000000000082161460208087019190915282517f609ae31700000000000000000000000000000000000000000000000000000000815292519184169263609ae31792600480830193928290030181865afa158015611ccb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cef919061480d565b836101c00181815250508073ffffffffffffffffffffffffffffffffffffffff1663dbcb313b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d68919061480d565b836101a00181815250506000836060015173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de7919061480d565b6040517f5427c9380000000000000000000000000000000000000000000000000000000081526004810182905290915060009073ffffffffffffffffffffffffffffffffffffffff841690635427c93890602401602060405180830381865afa158015611e58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7c919061480d565b90508015611ec7576101808501518190611eb890611e9c906127106149bc565b876101000151886101400151611eb291906149d3565b90613fd0565b611ec29190614a3f565b611ece565b8461014001515b856101200181815250508273ffffffffffffffffffffffffffffffffffffffff166354fd4d506040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f47919061480d565b60ff166101e086015250505050919050565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b4ac68606040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fec919061480d565b90508067ffffffffffffffff8111156120075761200761488a565b6040519080825280602002602001820160405280156120ff57816020015b6120ec604051806102000160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600060ff1681525090565b8152602001906001900390816120255790505b50915060005b818110156121f0576040517fac4afa38000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ac4afa3890602401602060405180830381865afa15801561219b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121bf91906147f0565b90506121ca816114d4565b8483815181106121dc576121dc61495e565b602090810291909101015250600101612105565b505090565b6040517f6fbc6f6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015260009184917f00000000000000000000000000000000000000000000000000000000000000001690636fbc6f6b90602401602060405180830381865afa158015612286573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122aa919061490d565b6122e0576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060006122ee87613cf4565b5050935093505092508260ff16600114612397576040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015282169063fdd5764590602401602060405180830381865afa15801561236e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061239291906147f0565b612427565b6040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015283169063fdd5764590602401602060405180830381865afa158015612403573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061242791906147f0565b979650505050505050565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c29277cd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124c5919061480d565b90508067ffffffffffffffff8111156124e0576124e061488a565b6040519080825280602002602001820160405280156125c457816020015b60408051610260810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083018290526101208301819052610140830181905261016083015261018082018190526101a082018190526101c082018190526101e082018190526102008201819052610220820181905261024082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816124fe5790505b50915060005b818110156121f0576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa158015612660573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061268491906147f0565b905061268f81612a75565b8483815181106126a1576126a161495e565b6020908102919091010152506001016125ca565b60606000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c29277cd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612725573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612749919061480d565b905060005b81811015612829576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa1580156127e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061280891906147f0565b90506128148187613bf7565b15612820578360010193505b5060010161274e565b508167ffffffffffffffff8111156128435761284361488a565b60405190808252806020026020018201604052801561296157816020015b61294e604051806102400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160008152602001606081526020016000815260200160008152602001600015158152602001600081526020016000815260200160008152602001600060ff168152602001600081525090565b8152602001906001900390816128615790505b5092506000915060005b81811015612a6d576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa158015612a01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a2591906147f0565b9050612a318187613bf7565b15612a6457612a408187610272565b858581518110612a5257612a5261495e565b60209081029190910101526001909301925b5060010161296b565b505050919050565b604080516102608101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082018390526101208201819052610140820181905261016082015261018081018290526101a081018290526101c081018290526101e08101829052610200810182905261022081018290526102408101829052908080808080612b1b88613cf4565b73ffffffffffffffffffffffffffffffffffffffff8e168d5260ff86166101808e01819052959b50939950919750955093509150600114612bca578273ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ba1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bc591906147f0565b612c39565b8473ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c3991906147f0565b73ffffffffffffffffffffffffffffffffffffffff908116602089018190527f00000000000000000000000000000000000000000000000000000000000000009091161460408801526000600160ff881614612d03578373ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cfe91906147f0565b612d72565b8573ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d7291906147f0565b6040517f2e97ca2100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b8116600483015291925090821690632e97ca2190602401602060405180830381865afa158015612de2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e06919061490d565b15156060890152604080517f45d31f9d000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff8316916345d31f9d9160048083019260209291908290030181865afa158015612e78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e9c919061480d565b8860800181815250508073ffffffffffffffffffffffffffffffffffffffff1663743753596040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ef0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f14919061480d565b610100890152600160ff88161415613017578573ffffffffffffffffffffffffffffffffffffffff16639b2cb5d86040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f95919061480d565b8860a00181815250508573ffffffffffffffffffffffffffffffffffffffff16635f48f3936040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fe9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061300d919061480d565b60c08901526130a5565b8273ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa158015613061573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130859190614a73565b6fffffffffffffffffffffffffffffffff90811660c08b01521660a08901525b60008760ff16600114613126578473ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613121919061480d565b613195565b8573ffffffffffffffffffffffffffffffffffffffff166320a05ff76040518163ffffffff1660e01b8152600401602060405180830381865afa158015613171573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613195919061480d565b90508067ffffffffffffffff8111156131b0576131b061488a565b6040519080825280602002602001820160405280156131d9578160200160208202803683370190505b506101208a01528067ffffffffffffffff8111156131f9576131f961488a565b604051908082528060200260200182016040528015613222578160200160208202803683370190505b506101608a015260005b818110156134c4578860ff16600114156133b4576040517f5e5f2e260000000000000000000000000000000000000000000000000000000081526004810182905260009073ffffffffffffffffffffffffffffffffffffffff891690635e5f2e2690602401602060405180830381865afa1580156132ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132d291906147f0565b9050808b610120015183815181106132ec576132ec61495e565b73ffffffffffffffffffffffffffffffffffffffff92831660209182029290920101526040517f78327438000000000000000000000000000000000000000000000000000000008152828216600482015290891690637832743890602401602060405180830381865afa158015613367573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061338b919061480d565b8b610160015183815181106133a2576133a261495e565b602002602001018181525050506134bc565b6040517f172c48c70000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff87169063172c48c7906024016040805180830381865afa15801561341e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134429190614928565b8061ffff1690508b610120015183815181106134605761346061495e565b602002602001018c6101600151848151811061347e5761347e61495e565b60200260200101828152508273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525050505b60010161322c565b5060008860ff16600114613546578373ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561351d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613541919061480d565b6135b5565b8673ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613591573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135b5919061480d565b90508067ffffffffffffffff8111156135d0576135d061488a565b60405190808252806020026020018201604052801561361557816020015b60408051808201909152600080825260208201528152602001906001900390816135ee5790505b506101408b015260005b818110156139015760408051808201909152600080825260208201528a60ff166001146136da576040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff871690635094cb4f90602401602060405180830381865afa1580156136b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136d591906147f0565b613769565b6040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff8a1690635094cb4f90602401602060405180830381865afa158015613745573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061376991906147f0565b73ffffffffffffffffffffffffffffffffffffffff168152600160ff8c16146138245780516040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529089169063fdd5764590602401602060405180830381865afa1580156137fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061381f91906147f0565b6138b7565b80516040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152908a169063fdd5764590602401602060405180830381865afa158015613893573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138b791906147f0565b73ffffffffffffffffffffffffffffffffffffffff1660208201526101408c01518051829190849081106138ed576138ed61495e565b60209081029190910101525060010161361f565b508860ff166001141561398f578773ffffffffffffffffffffffffffffffffffffffff1663b2c53a6c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613959573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061397d919061480d565b60e08b015260ff6102408b0152613be9565b73ffffffffffffffffffffffffffffffffffffffff85166101a08b01819052604080517f9408b63f0000000000000000000000000000000000000000000000000000000081529051639408b63f916004808201926020929091908290030181865afa158015613a02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a2691906147f0565b8a6101e0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508473ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015613aa9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613acd9190614aa6565b5015156102008c015250604080517f9fd12b77000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff881691639fd12b779160048083019260209291908290030181865afa158015613b42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b66919061480d565b8a6102200181815250508573ffffffffffffffffffffffffffffffffffffffff16638345f26e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bdf9190614af7565b60ff166102408b01525b505050505050505050919050565b6040517f6fbc6f6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015260009184917f00000000000000000000000000000000000000000000000000000000000000001690636fbc6f6b90602401602060405180830381865afa158015613c88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cac919061490d565b613ce2576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613cec8484614023565b949350505050565b600080600080600080867f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636fbc6f6b826040518263ffffffff1660e01b8152600401613d73919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa158015613d90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613db4919061490d565b613dea576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8773ffffffffffffffffffffffffffffffffffffffff166354fd4d506040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e59919061480d565b96508660ff1660011415613ee0578795508573ffffffffffffffffffffffffffffffffffffffff1663f93f515b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613eb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ed991906147f0565b9450613fc6565b8793508373ffffffffffffffffffffffffffffffffffffffff16632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f5291906147f0565b92508373ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fc391906147f0565b91505b5091939550919395565b6000821580613fdd575081155b15613fea5750600061401d565b612710613ff8600282614b1a565b61ffff1661400684866149d3565b6140109190614b3b565b61401a9190614a3f565b90505b92915050565b6040517f055ee9b500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600091829185169063055ee9b590602401602060405180830381865afa158015614094573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140b891906147f0565b73ffffffffffffffffffffffffffffffffffffffff1614159392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146140f957600080fd5b50565b6000806040838503121561410f57600080fd5b823561411a816140d7565b9150602083013561412a816140d7565b809150509250929050565b600081518084526020808501945080840160005b8381101561419f578151805173ffffffffffffffffffffffffffffffffffffffff168852838101518489015260408082015115159089015260609081015115159088015260809096019590820190600101614149565b509495945050505050565b805173ffffffffffffffffffffffffffffffffffffffff168252600061024060208301516141f0602086018273ffffffffffffffffffffffffffffffffffffffff169052565b506040830151614204604086018215159052565b50606083015161422c606086018273ffffffffffffffffffffffffffffffffffffffff169052565b506080830151614254608086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060a083015160a085015260c083015160c085015260e083015160e085015261010080840151818601525061012080840151828287015261429783870182614135565b92505050610140808401518186015250610160808401518186015250610180808401516142c78287018215159052565b50506101a083810151908501526101c080840151908501526101e080840151908501526102008084015160ff16908501526102209283015192909301919091525090565b60208152600061401a60208301846141aa565b60006020828403121561433057600080fd5b813561433b816140d7565b9392505050565b805173ffffffffffffffffffffffffffffffffffffffff168252602081015161436f602084018215159052565b506040810151614397604084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060608101516143bf606084018273ffffffffffffffffffffffffffffffffffffffff169052565b506080818101519083015260a0808201519083015260c0808201519083015260e08082015190830152610100808201519083015261012080820151908301526101408082015190830152610160808201519083015261018080820151908301526101a080820151908301526101c080820151908301526101e09081015160ff16910152565b610200810161401d8284614342565b6020808252825182820181905260009190848201906040850190845b8181101561449657614482838551614342565b92840192610200929092019160010161446f565b50909695505050505050565b600081518084526020808501945080840160005b8381101561419f57815173ffffffffffffffffffffffffffffffffffffffff16875295820195908201906001016144b6565b600081518084526020808501945080840160005b8381101561419f578151805173ffffffffffffffffffffffffffffffffffffffff9081168952908401511683880152604090960195908201906001016144fc565b600081518084526020808501945080840160005b8381101561419f57815187529582019590820190600101614551565b805173ffffffffffffffffffffffffffffffffffffffff168252600061026060208301516145b3602086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060408301516145c7604086018215159052565b5060608301516145db606086018215159052565b506080830151608085015260a083015160a085015260c083015160c085015260e083015160e0850152610100808401518186015250610120808401518282870152614628838701826144a2565b92505050610140808401518583038287015261464483826144e8565b925050506101608084015185830382870152614660838261453d565b92505050610180808401516146798287018260ff169052565b50506101a08381015173ffffffffffffffffffffffffffffffffffffffff908116918601919091526101c0808501511515908601526101e080850151909116908501526102008084015115159085015261022080840151908501526102409283015160ff1692909301919091525090565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561475d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc088860301845261474b85835161456d565b94509285019290850190600101614711565b5092979650505050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561475d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08886030184526147cb8583516141aa565b94509285019290850190600101614791565b60208152600061401a602083018461456d565b60006020828403121561480257600080fd5b815161433b816140d7565b60006020828403121561481f57600080fd5b5051919050565b600080600080600060a0868803121561483e57600080fd5b5050835160208501516040860151606087015160809097015192989197509594509092509050565b6000806040838503121561487957600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080600080608085870312156148cf57600080fd5b84516148da816140d7565b60208601516040870151606090970151919890975090945092505050565b8051801515811461490857600080fd5b919050565b60006020828403121561491f57600080fd5b61401a826148f8565b6000806040838503121561493b57600080fd5b8251614946816140d7565b602084015190925061ffff8116811461412a57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156149ce576149ce61498d565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614a0b57614a0b61498d565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614a4e57614a4e614a10565b500490565b80516fffffffffffffffffffffffffffffffff8116811461490857600080fd5b60008060408385031215614a8657600080fd5b614a8f83614a53565b9150614a9d60208401614a53565b90509250929050565b600080600060608486031215614abb57600080fd5b614ac484614a53565b9250614ad2602085016148f8565b9150604084015164ffffffffff81168114614aec57600080fd5b809150509250925092565b600060208284031215614b0957600080fd5b815160ff8116811461433b57600080fd5b600061ffff80841680614b2f57614b2f614a10565b92169190910492915050565b60008219821115614b4e57614b4e61498d565b50019056fea2646970667358221220d15108d0bec9cc6f3903875dd8412869a3da1b36661bdc780e2e2f0ae3136d2464736f6c634300080a003360a06040523480156200001157600080fd5b5060405162001b4538038062001b45833981016040819052620000349162000608565b6000805460ff19169055816001600160a01b0381166200006757604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cc91906200070a565b6001600160a01b031660805250805160005b818110156200014257620001398382815181106200010057620001006200072f565b6020026020010151600001518483815181106200012157620001216200072f565b6020026020010151602001516200014c60201b60201c565b600101620000de565b5050505062000822565b6001600160a01b03821615806200016a57506001600160a01b038116155b156200018957604051635919af9760e11b815260040160405180910390fd5b620001a8826001600160a01b0316620004ba60201b620006751760201c565b620001d65760405163df4c572d60e01b81526001600160a01b03831660048201526024015b60405180910390fd5b620001f5816001600160a01b0316620004ba60201b620006751760201c565b6200021f5760405163df4c572d60e01b81526001600160a01b0382166004820152602401620001cd565b806001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200027c575060408051601f3d908101601f19168201909252620002799181019062000745565b60015b6200029a576040516367a7cd4360e01b815260040160405180910390fd5b8060ff16600814620002bf576040516367a7cd4360e01b815260040160405180910390fd5b506000816001600160a01b031663d62ada116040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200031f575060408051601f3d908101601f191682019092526200031c918101906200076a565b60015b6200032a576200032d565b90505b6000836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200038c575060408051601f3d908101601f19168201909252620003899181019062000745565b60015b620003aa5760405163528ca31d60e01b815260040160405180910390fd5b60128160ff161115620003d05760405163528ca31d60e01b815260040160405180910390fd5b9050826001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa9250505080156200042f575060408051601f3d908101601f191682019092526200042c91810190620007a6565b60015b6200044d576040516367a7cd4360e01b815260040160405180910390fd5b8662000461576200046185858484620004c0565b5050505050620004748484848462000526565b826001600160a01b0316846001600160a01b03167fe263805b03657ab13064915d0723c5ce14981547e7cba5283f66b9e5d81f6e6e60405160405180910390a350505050565b3b151590565b60008313620004e2576040516356e05d2b60e01b815260040160405180910390fd5b836001600160501b0316816001600160501b0316108062000501575081155b15620005205760405163b1cf675560e01b815260040160405180910390fd5b50505050565b6001600160a01b03831682156200053e57600160a11b175b6200055460ff60a21b60a284901b1682620007fb565b6001600160a01b0390951660009081526001602052604090209490945550505050565b80516001600160a01b03811681146200058f57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715620005cf57620005cf62000594565b60405290565b604051601f8201601f191681016001600160401b038111828210171562000600576200060062000594565b604052919050565b60008060408084860312156200061d57600080fd5b620006288462000577565b602085810151919450906001600160401b03808211156200064857600080fd5b818701915087601f8301126200065d57600080fd5b81518181111562000672576200067262000594565b62000682848260051b01620005d5565b818152848101925060069190911b830184019089821115620006a357600080fd5b928401925b81841015620006fa5785848b031215620006c25760008081fd5b620006cc620005aa565b620006d78562000577565b8152620006e686860162000577565b8187015283529285019291840191620006a8565b8096505050505050509250929050565b6000602082840312156200071d57600080fd5b620007288262000577565b9392505050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156200075857600080fd5b815160ff811681146200072857600080fd5b6000602082840312156200077d57600080fd5b815180151581146200072857600080fd5b80516001600160501b03811681146200058f57600080fd5b600080600080600060a08688031215620007bf57600080fd5b620007ca866200078e565b9450602086015193506040860151925060608601519150620007ef608087016200078e565b90509295509295909350565b600082198211156200081d57634e487b7160e01b600052601160045260246000fd5b500190565b6080516112f262000853600039600081816101b201528181610280015281816103e201526104ff01526112f26000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c80638456cb591161008c578063b66102df11610066578063b66102df146101d4578063e8a97a3e146101e7578063f190e5fa146101fa578063f9a650301461023f57600080fd5b80638456cb591461016d5780639dcb511a14610175578063a50cf2c8146101ad57600080fd5b80635c975abb116100bd5780635c975abb1461011c5780635cecbd0e146101325780637afb01041461015a57600080fd5b80633f4ba83a146100e457806341976e09146100ee57806354fd4d5014610114575b600080fd5b6100ec610252565b005b6101016100fc366004610f28565b610340565b6040519081526020015b60405180910390f35b610101600281565b60005460ff16604051901515815260200161010b565b610145610140366004610f4a565b610352565b6040805192835260208301919091520161010b565b610101610168366004610f90565b610376565b6100ec6103b4565b610188610183366004610f28565b6104a0565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010b565b6101887f000000000000000000000000000000000000000000000000000000000000000081565b6101016101e2366004610fbc565b6104b4565b6100ec6101f5366004610ff8565b6104d1565b61020d610208366004610f28565b6105c3565b6040805173ffffffffffffffffffffffffffffffffffffffff909416845291151560208401529082015260600161010b565b61010161024d366004610f90565b61064d565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156102dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103009190611022565b610336576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033e61067b565b565b600061034b82610761565b5092915050565b60008061035f868661064d565b915061036b848461064d565b905094509492505050565b600080600061038484610761565b90925090508161039582600a611193565b61039f908761119f565b6103a991906111dc565b925050505b92915050565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561043e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104629190611022565b610498576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033e610819565b60006104ab826105c3565b50909392505050565b60006104c96104c3858561064d565b83610376565b949350505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561055b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057f9190611022565b6105b5576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105bf82826108d9565b5050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600160205260408120548190819080610624576040517f4bb8ad8200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b947402000000000000000000000000000000000000000086161515945060a286901c9350915050565b600080600061065b84610761565b909250905061066b81600a611193565b61039f838761119f565b3b151590565b60005460ff166106ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b600080600080610770856105c3565b8095508193508294505050506000806000808573ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156107cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f19190611231565b9450945050935093508461080b5761080b84848484610dd9565b829750505050505050915091565b60005460ff1615610886576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016106e3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586107373390565b73ffffffffffffffffffffffffffffffffffffffff82161580610910575073ffffffffffffffffffffffffffffffffffffffff8116155b15610947576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82163b6109ad576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016106e3565b73ffffffffffffffffffffffffffffffffffffffff81163b610a13576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024016106e3565b8073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610a98575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610a9591810190611281565b60015b610ace576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060ff16600814610b0b576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060008173ffffffffffffffffffffffffffffffffffffffff1663d62ada116040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610b93575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610b9091810190611022565b60015b610b9c57610b9f565b90505b60008373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610c26575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610c2391810190611281565b60015b610c5c576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60128160ff161115610c9a576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b90508273ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa925050508015610d21575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610d1e91810190611231565b60015b610d57576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b86610d6857610d6885858484610dd9565b5050505050610d7984848484610e74565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fe263805b03657ab13064915d0723c5ce14981547e7cba5283f66b9e5d81f6e6e60405160405180910390a350505050565b60008313610e13576040517f56e05d2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8369ffffffffffffffffffff168169ffffffffffffffffffff161080610e37575081155b15610e6e576040517fb1cf675500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b73ffffffffffffffffffffffffffffffffffffffff83168215610ea95774020000000000000000000000000000000000000000175b610ecf7503fc000000000000000000000000000000000000000060a284901b16826112a4565b73ffffffffffffffffffffffffffffffffffffffff90951660009081526001602052604090209490945550505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610f2357600080fd5b919050565b600060208284031215610f3a57600080fd5b610f4382610eff565b9392505050565b60008060008060808587031215610f6057600080fd5b84359350610f7060208601610eff565b925060408501359150610f8560608601610eff565b905092959194509250565b60008060408385031215610fa357600080fd5b82359150610fb360208401610eff565b90509250929050565b600080600060608486031215610fd157600080fd5b83359250610fe160208501610eff565b9150610fef60408501610eff565b90509250925092565b6000806040838503121561100b57600080fd5b61101483610eff565b9150610fb360208401610eff565b60006020828403121561103457600080fd5b81518015158114610f4357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b808511156110cc57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156110b2576110b2611044565b808516156110bf57918102915b93841c9390800290611078565b509250929050565b6000826110e3575060016103ae565b816110f0575060006103ae565b816001811461110657600281146111105761112c565b60019150506103ae565b60ff84111561112157611121611044565b50506001821b6103ae565b5060208310610133831016604e8410600b841016171561114f575081810a6103ae565b6111598383611073565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561118b5761118b611044565b029392505050565b6000610f4383836110d4565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156111d7576111d7611044565b500290565b600082611212577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b805169ffffffffffffffffffff81168114610f2357600080fd5b600080600080600060a0868803121561124957600080fd5b61125286611217565b945060208601519350604086015192506060860151915061127560808701611217565b90509295509295909350565b60006020828403121561129357600080fd5b815160ff81168114610f4357600080fd5b600082198211156112b7576112b7611044565b50019056fea2646970667358221220e7485a2cb5750973f539ca59d2211008b42bb92b6c49605a53f5d9c88c330fb164736f6c634300080a003360e06040523480156200001157600080fd5b5060405162002ced38038062002ced8339810160408190526200003491620004bb565b6000805460ff19169055806001600160a01b0381166200006757604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cc9190620004bb565b6001600160a01b039081166080526001805560408051808201909152600281526105a360f41b602082015291508216620001245760405162461bcd60e51b81526004016200011b9190620004ed565b60405180910390fd5b50806001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000164573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200018a9190620004bb565b6001600160a01b031660c052604051620001a490620004ad565b604051809103906000f080158015620001c1573d6000803e3d6000fd5b506001600160a01b031660a08190526040805163204a7f0760e21b81529051638129fc1c9160048082019260009290919082900301818387803b1580156200020857600080fd5b505af11580156200021d573d6000803e3d6000fd5b50505050620002316200028a60201b60201c565b50600454600380546001600160a01b039092166001600160a01b03199283161790556000805260026020527fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b8054909116905562000545565b6000620002a460a0516200038c60201b6200119b1760201c565b9050806001600160a01b0316638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620002e257600080fd5b505af1158015620002f7573d6000803e3d6000fd5b5050600480546001600160a01b03908116600090815260026020908152604090912080546001600160a01b03199081169388169384179091558354169091179091556200035492506005915083906200043b811b6200127d17901c565b506040516001600160a01b038216907f9f69b6c10f6810213e055b0ba6bc0a4e2603f73c221aad77ea35da819cda7dc390600090a250565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260601b60148201526e5af43d82803e903d91602b57fd5bf360881b60288201526037816000f09150506001600160a01b038116620004365760405162461bcd60e51b815260206004820152601660248201527f455243313136373a20637265617465206661696c65640000000000000000000060448201526064016200011b565b919050565b600062000452836001600160a01b0384166200045b565b90505b92915050565b6000818152600183016020526040812054620004a45750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000455565b50600062000455565b610e788062001e7583390190565b600060208284031215620004ce57600080fd5b81516001600160a01b0381168114620004e657600080fd5b9392505050565b600060208083528351808285015260005b818110156200051c57858101830151858201604001528201620004fe565b818111156200052f576000604083870101525b50601f01601f1916929092016040019392505050565b60805160a05160c0516118cf620005a66000396000818161026a015281816103680152610b7001526000818161020201526110650152600081816102c4015281816105b80152818161099601528181610a840152610e7401526118cf6000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806388f64c54116100cd578063b193976311610081578063d82ecc4811610066578063d82ecc4814610309578063e3ba9ace1461031c578063f23953ab1461032f57600080fd5b8063b1939763146102f9578063b60e85181461030157600080fd5b80638f7dcfa3116100b25780638f7dcfa31461029f578063a50cf2c8146102bf578063a904aab6146102e657600080fd5b806388f64c541461026557806389b77b3e1461028c57600080fd5b806354fd4d50116101245780635da33c5b116101095780635da33c5b146101fd578063765e0159146102245780638456cb591461025d57600080fd5b806354fd4d50146101d05780635c975abb146101e657600080fd5b806313d8c8401461015657806321d18456146101a05780632932472f146101b35780633f4ba83a146101c8575b600080fd5b6004546101769073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6101766101ae366004611651565b610337565b6101c66101c1366004611697565b61058a565b005b6101c6610968565b6101d8600181565b604051908152602001610197565b60005460ff165b6040519015158152602001610197565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101766102323660046116da565b73ffffffffffffffffffffffffffffffffffffffff9081166000908152600260205260409020541690565b6101c6610a56565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101c661029a3660046116da565b610b42565b6003546101769073ffffffffffffffffffffffffffffffffffffffff1681565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101c66102f4366004611697565b610e46565b6101d8610fb8565b6101d8611033565b6101ed6103173660046116da565b611044565b61017661032a3660046116f5565b611051565b6101c661105e565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa1580156103c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103e8919061170e565b6040518060400160405280600281526020017f43500000000000000000000000000000000000000000000000000000000000008152509061045f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b60405180910390fd5b506104686112a6565b6003805473ffffffffffffffffffffffffffffffffffffffff8082166000818152600260205260409081902080549093167fffffffffffffffffffffffff0000000000000000000000000000000000000000948516179094558154909216905590517fc75b5a710000000000000000000000000000000000000000000000000000000081523360048201526024810185905260448101849052819063c75b5a7190606401600060405180830381600087803b15801561052657600080fd5b505af115801561053a573d6000803e3d6000fd5b505060405133925073ffffffffffffffffffffffffffffffffffffffff841691507ff3ede7039176503a8ad1fe7cfaa29475a9dbe0cdcaf04ecf9a5c10570c47b10390600090a390505b92915050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610614573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610638919061170e565b61066e576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106766112a6565b60035473ffffffffffffffffffffffffffffffffffffffff838116911614156106fa576003805473ffffffffffffffffffffffffffffffffffffffff808216600090815260026020526040902080549091167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092558154169055610865565b73ffffffffffffffffffffffffffffffffffffffff838116600090815260026020908152604091829020548251808401909352600383527f4146330000000000000000000000000000000000000000000000000000000000918301919091529091848116911614610798576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b5060045473ffffffffffffffffffffffffffffffffffffffff838116911614156107fd57600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85161790555b73ffffffffffffffffffffffffffffffffffffffff828116600081815260026020526040808220805488861684529183208054929095167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790945591905281541690555b6040517fc75b5a7100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600060248301819052604483015283169063c75b5a7190606401600060405180830381600087803b1580156108dc57600080fd5b505af11580156108f0573d6000803e3d6000fd5b505050506109088260056112dd90919063ffffffff16565b508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f25e267469ba2ae82515be7b3d45df60bf8308343f0809e8cf7319058e2255ce660405160405180910390a3505050565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156109f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a16919061170e565b610a4c576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a546112ff565b565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015610ae0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b04919061170e565b610b3a576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a546113e0565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa158015610bcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf0919061170e565b6040518060400160405280600281526020017f435000000000000000000000000000000000000000000000000000000000000081525090610c5e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b50610c6a6005826114a0565b6040518060400160405280600381526020017f414634000000000000000000000000000000000000000000000000000000000081525090610cd8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b50438173ffffffffffffffffffffffffffffffffffffffff16633dc54b406040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4991906117a3565b14156040518060400160405280600381526020017f414631000000000000000000000000000000000000000000000000000000000081525090610db9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b506004805473ffffffffffffffffffffffffffffffffffffffff90811660009081526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081169487169485179091558454168317909355915190917fced6ab9afc868b3a088366f6631ae20752993b5cce5d5f0534ea5a59fcc57d5691a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610ed0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef4919061170e565b610f2a576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f19a1603900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301528416906319a1603990604401600060405180830381600087803b158015610f9b57600080fd5b505af1158015610faf573d6000803e3d6000fd5b50505050505050565b600354600090819073ffffffffffffffffffffffffffffffffffffffff165b73ffffffffffffffffffffffffffffffffffffffff81161561102d5773ffffffffffffffffffffffffffffffffffffffff9081166000908152600260205260409020541681611025816117eb565b925050610fd7565b50919050565b600061103f60056114cf565b905090565b60006105846005836114a0565b60006105846005836114d9565b60006110897f000000000000000000000000000000000000000000000000000000000000000061119b565b90508073ffffffffffffffffffffffffffffffffffffffff16638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156110d357600080fd5b505af11580156110e7573d6000803e3d6000fd5b50506004805473ffffffffffffffffffffffffffffffffffffffff908116600090815260026020526040902080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811692871692831790915582541617905550611156905060058261127d565b5060405173ffffffffffffffffffffffffffffffffffffffff8216907f9f69b6c10f6810213e055b0ba6bc0a4e2603f73c221aad77ea35da819cda7dc390600090a250565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260601b60148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f091505073ffffffffffffffffffffffffffffffffffffffff8116611278576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f455243313136373a20637265617465206661696c6564000000000000000000006044820152606401610456565b919050565b600061129f8373ffffffffffffffffffffffffffffffffffffffff84166114e5565b9392505050565b60035473ffffffffffffffffffffffffffffffffffffffff90811660009081526002602052604090205416610a5457610a5461105e565b600061129f8373ffffffffffffffffffffffffffffffffffffffff8416611534565b60005460ff1661136b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610456565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff161561144d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610456565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586113b63390565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600183016020526040812054151561129f565b6000610584825490565b600061129f8383611627565b600081815260018301602052604081205461152c57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610584565b506000610584565b6000818152600183016020526040812054801561161d576000611558600183611824565b855490915060009061156c90600190611824565b90508181146115d157600086600001828154811061158c5761158c61183b565b90600052602060002001549050808760000184815481106115af576115af61183b565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806115e2576115e261186a565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610584565b6000915050610584565b600082600001828154811061163e5761163e61183b565b9060005260206000200154905092915050565b6000806040838503121561166457600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff8116811461127857600080fd5b6000806000606084860312156116ac57600080fd5b6116b584611673565b92506116c360208501611673565b91506116d160408501611673565b90509250925092565b6000602082840312156116ec57600080fd5b61129f82611673565b60006020828403121561170757600080fd5b5035919050565b60006020828403121561172057600080fd5b8151801515811461129f57600080fd5b600060208083528351808285015260005b8181101561175d57858101830151858201604001528201611741565b8181111561176f576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b6000602082840312156117b557600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561181d5761181d6117bc565b5060010190565b600082821015611836576118366117bc565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220f1e9c81b8c3af2491c907ee66cf24e1bb76111b821db02df8f98dbb48b5ab5fa64736f6c634300080a0033608060405234801561001057600080fd5b50610e58806100206000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c806354fd4d5011610081578063c45a01551161005b578063c45a0155146101a4578063c75b5a71146101ca578063d1660f99146101dd57600080fd5b806354fd4d501461014f5780638129fc1c14610157578063c12c21c01461015f57600080fd5b80631afbb7a4116100b25780631afbb7a41461011d5780631cff79cd146101265780633dc54b401461014657600080fd5b806316128211146100d957806317d11a15146100ee57806319a160391461010a575b600080fd5b6100ec6100e7366004610b42565b6101f0565b005b6100f760035481565b6040519081526020015b60405180910390f35b6100ec610118366004610b8d565b61024c565b6100f760025481565b610139610134366004610bef565b6102c9565b6040516101019190610d49565b6100f760045481565b6100f7600181565b6100ec610344565b60015461017f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610101565b60005461017f9062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b6100ec6101d8366004610d5c565b610494565b6100ec6101eb366004610d8f565b61053d565b60015473ffffffffffffffffffffffffffffffffffffffff163314610241576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600291909155600355565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1633146102a3576040517fb126b84800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102c573ffffffffffffffffffffffffffffffffffffffff83168260006105b4565b5050565b60015460609073ffffffffffffffffffffffffffffffffffffffff16331461031d576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033d73ffffffffffffffffffffffffffffffffffffffff8416836107b4565b9392505050565b600054610100900460ff1661035f5760005460ff1615610363565b303b155b6103f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600054610100900460ff1615801561043357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000166101011790555b600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16336201000002179055801561049157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b50565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1633146104eb576040517fb126b84800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff949094169390931790925560025560035543600455565b60015473ffffffffffffffffffffffffffffffffffffffff16331461058e576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105af73ffffffffffffffffffffffffffffffffffffffff841683836107f6565b505050565b80158061065457506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015284169063dd62ed3e90604401602060405180830381865afa15801561062e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106529190610dcb565b155b6106e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e63650000000000000000000060648201526084016103eb565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526105af9084907f095ea7b300000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261084c565b606061033d83836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250610958565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526105af9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401610732565b60006108ae826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166109589092919063ffffffff16565b8051909150156105af57808060200190518101906108cc9190610de4565b6105af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016103eb565b6060610967848460008561096f565b949350505050565b606082471015610a01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016103eb565b843b610a69576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016103eb565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051610a929190610e06565b60006040518083038185875af1925050503d8060008114610acf576040519150601f19603f3d011682016040523d82523d6000602084013e610ad4565b606091505b5091509150610ae4828286610aef565b979650505050505050565b60608315610afe57508161033d565b825115610b0e5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103eb9190610d49565b60008060408385031215610b5557600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff81168114610b8857600080fd5b919050565b60008060408385031215610ba057600080fd5b610ba983610b64565b9150610bb760208401610b64565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215610c0257600080fd5b610c0b83610b64565b9150602083013567ffffffffffffffff80821115610c2857600080fd5b818501915085601f830112610c3c57600080fd5b813581811115610c4e57610c4e610bc0565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715610c9457610c94610bc0565b81604052828152886020848701011115610cad57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b83811015610cea578181015183820152602001610cd2565b83811115610cf9576000848401525b50505050565b60008151808452610d17816020860160208601610ccf565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061033d6020830184610cff565b600080600060608486031215610d7157600080fd5b610d7a84610b64565b95602085013595506040909401359392505050565b600080600060608486031215610da457600080fd5b610dad84610b64565b9250610dbb60208501610b64565b9150604084013590509250925092565b600060208284031215610ddd57600080fd5b5051919050565b600060208284031215610df657600080fd5b8151801515811461033d57600080fd5b60008251610e18818460208701610ccf565b919091019291505056fea2646970667358221220448e7046078cd668c09328d857e534e2aab6cdc0e691d3d4f2c8baae8e084b1364736f6c634300080a003360c06040523480156200001157600080fd5b506040516200162738038062001627833981016040819052620000349162000177565b60408051808201909152600281526105a360f41b60208201526001600160a01b038216620000805760405162461bcd60e51b8152600401620000779190620001a9565b60405180910390fd5b50806001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e6919062000177565b6001600160a01b03166080816001600160a01b031681525050806001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200013e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000164919062000177565b6001600160a01b031660a0525062000201565b6000602082840312156200018a57600080fd5b81516001600160a01b0381168114620001a257600080fd5b9392505050565b600060208083528351808285015260005b81811015620001d857858101830151858201604001528201620001ba565b81811115620001eb576000604083870101525b50601f01601f1916929092016040019392505050565b60805160a0516113c2620002656000396000818161021f0152818161036401526106d501526000818160af0152818161012a015281816104420152818161056e015281816107b301528181610aa601528181610b890152610c6701526113c26000f3fe60806040526004361061005e5760003560e01c80635869dba8116100435780635869dba814610199578063deecfbc9146101bb578063e79a4089146101ce57600080fd5b80634f0e0ef31461011857806354fd4d501461017657600080fd5b366101135760408051808201909152600381527f574732000000000000000000000000000000000000000000000000000000000060208201523373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b60405180910390fd5b50005b600080fd5b34801561012457600080fd5b5061014c7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561018257600080fd5b5061018b600181565b60405190815260200161016d565b3480156101a557600080fd5b506101b96101b4366004611263565b6101ee565b005b6101b96101c936600461128f565b61031d565b3480156101da57600080fd5b506101b96101e93660046112e1565b61068e565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201819052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa15801561027b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061029f9190611318565b6040518060400160405280600281526020017f43500000000000000000000000000000000000000000000000000000000000008152509061030d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b506103188383610a77565b505050565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808516600483015284917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa1580156103ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103d19190611318565b6040518060400160405280600281526020017f52500000000000000000000000000000000000000000000000000000000000008152509061043f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e6919061133a565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600381526020017f57473100000000000000000000000000000000000000000000000000000000008152509061056b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156105d457600080fd5b505af11580156105e8573d6000803e3d6000fd5b50505050506105f78434610b3c565b6040517f9aa5d46200000000000000000000000000000000000000000000000000000000815234600482015273ffffffffffffffffffffffffffffffffffffffff848116602483015261ffff84166044830152851690639aa5d46290606401600060405180830381600087803b15801561067057600080fd5b505af1158015610684573d6000803e3d6000fd5b5050505050505050565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808516600483015284917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa15801561071e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107429190611318565b6040518060400160405280600281526020017f5250000000000000000000000000000000000000000000000000000000000000815250906107b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610833573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610857919061133a565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600381526020017f5747310000000000000000000000000000000000000000000000000000000000815250906108dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b506109703330858773ffffffffffffffffffffffffffffffffffffffff166336dda7d56040518163ffffffff1660e01b8152600401602060405180830381865afa15801561092e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610952919061133a565b73ffffffffffffffffffffffffffffffffffffffff16929190610cd4565b6040517f05fe138b0000000000000000000000000000000000000000000000000000000081526004810184905230602482015260009073ffffffffffffffffffffffffffffffffffffffff8616906305fe138b906044016020604051808303816000875af11580156109e6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0a9190611357565b9050610a168382610a77565b8273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f6de63bb986f2779478e384365c03cc2e62f06b453856acca87d5a519ce02664960405160405180910390a35050505050565b6040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632e1a7d4d90602401600060405180830381600087803b158015610aff57600080fd5b505af1158015610b13573d6000803e3d6000fd5b50610b389250505073ffffffffffffffffffffffffffffffffffffffff831682610d6f565b5050565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015282917f00000000000000000000000000000000000000000000000000000000000000009091169063dd62ed3e90604401602060405180830381865afa158015610bd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf69190611357565b1015610b38576040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303816000875af1158015610cb0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103189190611318565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052610d69908590610ec9565b50505050565b80471015610dd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610107565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114610e33576040519150601f19603f3d011682016040523d82523d6000602084013e610e38565b606091505b5050905080610318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610107565b6000610f2b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16610fd59092919063ffffffff16565b8051909150156103185780806020019051810190610f499190611318565b610318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610107565b6060610fe48484600085610fee565b90505b9392505050565b606082471015611080576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610107565b843b6110e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610107565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516111119190611370565b60006040518083038185875af1925050503d806000811461114e576040519150601f19603f3d011682016040523d82523d6000602084013e611153565b606091505b509150915061116382828661116e565b979650505050505050565b6060831561117d575081610fe7565b82511561118d5782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b60005b838110156111dc5781810151838201526020016111c4565b83811115610d695750506000910152565b602081526000825180602084015261120c8160408501602087016111c1565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461126057600080fd5b50565b6000806040838503121561127657600080fd5b82356112818161123e565b946020939093013593505050565b6000806000606084860312156112a457600080fd5b83356112af8161123e565b925060208401356112bf8161123e565b9150604084013561ffff811681146112d657600080fd5b809150509250925092565b6000806000606084860312156112f657600080fd5b83356113018161123e565b92506020840135915060408401356112d68161123e565b60006020828403121561132a57600080fd5b81518015158114610fe757600080fd5b60006020828403121561134c57600080fd5b8151610fe78161123e565b60006020828403121561136957600080fd5b5051919050565b600082516113828184602087016111c1565b919091019291505056fea264697066735822122017fd7fc76e4a1efcf24b78a3417fad7ab9576f0a23aa756ddb211c5e2227aa9564736f6c634300080a003360806040523480156200001157600080fd5b5060405162002b8038038062002b80833981016040819052620000349162000122565b6001600160a01b0381166200008f5760405162461bcd60e51b815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640160405180910390fd5b6001600160a01b03811660008181526001602052604080822080546001600160601b0319166b204fce5e3e2502611000000090811790915590517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91620000f99190815260200190565b60405180910390a350600680546001600160a81b031916336101000260ff191617905562000154565b6000602082840312156200013557600080fd5b81516001600160a01b03811681146200014d57600080fd5b9392505050565b612a1c80620001646000396000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c806370a08231116100f9578063b4b5ea5711610097578063dd62ed3e11610071578063dd62ed3e14610503578063e7a324dc14610555578063f1127ed81461057c578063f2fde38b146105ee57600080fd5b8063b4b5ea57146104ca578063c3cda520146104dd578063d505accf146104f057600080fd5b806395d89b41116100d357806395d89b411461045b5780639742ca4614610497578063a9059cbb146104aa578063b0660c3d146104bd57600080fd5b806370a08231146103c7578063782d6fe11461040b5780637ecebe001461043b57600080fd5b806330adf81f11610166578063481c6a7511610140578063481c6a751461031e578063587cde1e146103435780635c19a95c146103795780636fcfff451461038c57600080fd5b806330adf81f14610298578063313ce567146102bf578063349dc329146102d957600080fd5b806320606b701161019757806320606b70146102545780632185810b1461027b57806323b872dd1461028557600080fd5b806306fdde03146101be578063095ea7b31461021057806318160ddd14610233575b600080fd5b6101fa6040518060400160405280600781526020017f47656172626f780000000000000000000000000000000000000000000000000081525081565b60405161020791906124a3565b60405180910390f35b61022361021e36600461253f565b610601565b6040519015158152602001610207565b6102466b204fce5e3e2502611000000081565b604051908152602001610207565b6102467f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b61028361070d565b005b610223610293366004612569565b6107ee565b6102467f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b6102c7601281565b60405160ff9091168152602001610207565b6007546102f99073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610207565b6006546102f990610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6102f96103513660046125a5565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6102836103873660046125a5565b61098a565b6103b261039a3660046125a5565b60046020526000908152604090205463ffffffff1681565b60405163ffffffff9091168152602001610207565b6102466103d53660046125a5565b73ffffffffffffffffffffffffffffffffffffffff166000908152600160205260409020546bffffffffffffffffffffffff1690565b61041e61041936600461253f565b610997565b6040516bffffffffffffffffffffffff9091168152602001610207565b6102466104493660046125a5565b60056020526000908152604090205481565b6101fa6040518060400160405280600481526020017f474541520000000000000000000000000000000000000000000000000000000081525081565b6102836104a53660046125a5565b610cae565b6102236104b836600461253f565b610e20565b6006546102239060ff1681565b61041e6104d83660046125a5565b610e5c565b6102836104eb3660046125d1565b610efa565b6102836104fe366004612629565b611310565b610246610511366004612693565b73ffffffffffffffffffffffffffffffffffffffff9182166000908152602081815260408083209390941682529190915220546bffffffffffffffffffffffff1690565b6102467fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b6105c561058a3660046126c6565b600360209081526000928352604080842090915290825290205463ffffffff81169064010000000090046bffffffffffffffffffffffff1682565b6040805163ffffffff90931683526bffffffffffffffffffffffff909116602083015201610207565b6102836105fc3660046125a5565b61187a565b6000807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83141561063f57506bffffffffffffffffffffffff610664565b6106618360405180606001604052806025815260200161285260259139611a15565b90505b3360008181526020818152604080832073ffffffffffffffffffffffffffffffffffffffff89168085529083529281902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff871690811790915590519081529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a360019150505b92915050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314610798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e616765720060448201526064015b60405180910390fd5b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f795b0e16c8da9807b0a215f3749bd6dbcc49fc0472183f4e446abb7dcbd9d00790600090a1565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081815260408083203380855290835281842054825160608101909352602580845291936bffffffffffffffffffffffff909116928592610856928892919061285290830139611a15565b90508673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156108a257506bffffffffffffffffffffffff82811614155b156109725760006108cc83836040518060600160405280603d8152602001612974603d9139611a67565b73ffffffffffffffffffffffffffffffffffffffff898116600081815260208181526040808320948a168084529482529182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff87169081179091559151918252939450919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505b61097d878783611ad5565b5060019695505050505050565b6109943382611e9c565b50565b6000438210610a28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f476561723a3a6765745072696f72566f7465733a206e6f74207965742064657460448201527f65726d696e656400000000000000000000000000000000000000000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff831660009081526004602052604090205463ffffffff1680610a63576000915050610707565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604081208491610a95600185612735565b63ffffffff90811682526020820192909252604001600020541611610b1b5773ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812090610ae5600184612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff1691506107079050565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020908152604080832083805290915290205463ffffffff16831015610b63576000915050610707565b600080610b71600184612735565b90505b8163ffffffff168163ffffffff161115610c565760006002610b968484612735565b610ba0919061275a565b610baa9083612735565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260036020908152604080832063ffffffff8581168552908352928190208151808301909252549283168082526401000000009093046bffffffffffffffffffffffff1691810191909152919250871415610c2a576020015194506107079350505050565b805163ffffffff16871115610c4157819350610c4f565b610c4c600183612735565b92505b5050610b74565b5073ffffffffffffffffffffffffffffffffffffffff8516600090815260036020908152604080832063ffffffff909416835292905220546bffffffffffffffffffffffff6401000000009091041691505092915050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314610d34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e6167657200604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff8116610db1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640161078f565b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f2f834d1c8c4b956018fff5faca4d99868ae635487424d9c265c257ccbc698c6a90600090a250565b600080610e45836040518060600160405280602681526020016128a760269139611a15565b9050610e52338583611ad5565b5060019392505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526004602052604081205463ffffffff1680610e94576000610ef3565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812090610ec5600184612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b9392505050565b604080518082018252600781527f47656172626f780000000000000000000000000000000000000000000000000060209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f028ef9f797075f74ac647c65fde04fb0f128c2d59fd40f45732269917642fd4681840152466060820152306080808301919091528351808303909101815260a0820184528051908301207fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60c083015273ffffffffffffffffffffffffffffffffffffffff8a1660e08301526101008201899052610120808301899052845180840390910181526101408301909452835193909201929092207f19010000000000000000000000000000000000000000000000000000000000006101608401526101628301829052610182830181905290916000906101a201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa1580156110d8573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166111a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f476561723a3a64656c656761746542795369673a20696e76616c69642073696760448201527f6e61747572650000000000000000000000000000000000000000000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff811660009081526005602052604081208054916111d7836127a4565b919050558914611269576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f476561723a3a64656c656761746542795369673a20696e76616c6964206e6f6e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161078f565b874211156112f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f476561723a3a64656c656761746542795369673a207369676e6174757265206560448201527f7870697265640000000000000000000000000000000000000000000000000000606482015260840161078f565b611303818b611e9c565b505050505b505050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86141561134d57506bffffffffffffffffffffffff611372565b61136f8660405180606001604052806024815260200161291c60249139611a15565b90505b604080518082018252600781527f47656172626f780000000000000000000000000000000000000000000000000060209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f028ef9f797075f74ac647c65fde04fb0f128c2d59fd40f45732269917642fd4681840152466060820152306080808301919091528351808303909101815260a0909101835280519082012073ffffffffffffffffffffffffffffffffffffffff8b166000908152600590925291812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918c918c918c919086611472836127a4565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810188905260e001604051602081830303815290604052805190602001209050600082826040516020016115199291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff8b169284019290925260608301899052608083018890529092509060019060a0016020604051602081039080840390855afa1580156115a2573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661164a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a7065726d69743a20696e76616c6964207369676e617475726500604482015260640161078f565b8b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146116df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f476561723a3a7065726d69743a20756e617574686f72697a6564000000000000604482015260640161078f565b88421115611749576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a7065726d69743a207369676e6174757265206578706972656400604482015260640161078f565b846000808e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508a73ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258760405161186491906bffffffffffffffffffffffff91909116815260200190565b60405180910390a3505050505050505050505050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314611900576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e6167657200604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff811661197d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640161078f565b60065460405173ffffffffffffffffffffffffffffffffffffffff80841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36006805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b6000816c010000000000000000000000008410611a5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b509192915050565b6000836bffffffffffffffffffffffff16836bffffffffffffffffffffffff1611158290611ac2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b50611acd83856127dd565b949350505050565b60065460ff1680611b025750600654610100900473ffffffffffffffffffffffffffffffffffffffff1633145b80611b24575060075473ffffffffffffffffffffffffffffffffffffffff1633145b611b8a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f476561723a3a7472616e73666572732061726520666f7262696464656e000000604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff8316611c2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603c60248201527f476561723a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260448201527f616e736665722066726f6d20746865207a65726f206164647265737300000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff8216611cd0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f476561723a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260448201527f616e7366657220746f20746865207a65726f2061646472657373000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260016020908152604091829020548251606081019093526036808452611d2d936bffffffffffffffffffffffff90921692859291906129b190830139611a67565b73ffffffffffffffffffffffffffffffffffffffff848116600090815260016020908152604080832080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff968716179055928616825290829020548251606081019093526030808452611dbf949190911692859290919061287790830139611f50565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260409182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff968716179055905193851684529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a373ffffffffffffffffffffffffffffffffffffffff808416600090815260026020526040808220548584168352912054611e9792918216911683611fc1565b505050565b73ffffffffffffffffffffffffffffffffffffffff808316600081815260026020818152604080842080546001845282862054949093528787167fffffffffffffffffffffffff000000000000000000000000000000000000000084168117909155905191909516946bffffffffffffffffffffffff9092169391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4611f4a828483611fc1565b50505050565b600080611f5d8486612802565b9050846bffffffffffffffffffffffff16816bffffffffffffffffffffffff1610158390611fb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b50949350505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561200b57506000816bffffffffffffffffffffffff16115b15611e975773ffffffffffffffffffffffffffffffffffffffff8316156120fd5773ffffffffffffffffffffffffffffffffffffffff831660009081526004602052604081205463ffffffff1690816120655760006120c4565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812090612096600185612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b905060006120eb82856040518060600160405280602881526020016128cd60289139611a67565b90506120f9868484846121e2565b5050505b73ffffffffffffffffffffffffffffffffffffffff821615611e975773ffffffffffffffffffffffffffffffffffffffff821660009081526004602052604081205463ffffffff1690816121525760006121b1565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812090612183600185612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b905060006121d882856040518060600160405280602781526020016128f560279139611f50565b9050611308858484845b60006122064360405180606001604052806034815260200161294060349139612465565b905060008463ffffffff1611801561226d575073ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812063ffffffff831691612251600188612735565b63ffffffff908116825260208201929092526040016000205416145b156123035773ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812083916122a4600188612735565b63ffffffff168152602081019190915260400160002080546bffffffffffffffffffffffff92909216640100000000027fffffffffffffffffffffffffffffffff000000000000000000000000ffffffff9092169190911790556123fe565b60408051808201825263ffffffff80841682526bffffffffffffffffffffffff808616602080850191825273ffffffffffffffffffffffffffffffffffffffff8b166000908152600382528681208b8616825290915294909420925183549451909116640100000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009094169116179190911790556123a5846001612832565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260046020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff929092169190911790555b604080516bffffffffffffffffffffffff80861682528416602082015273ffffffffffffffffffffffffffffffffffffffff8716917fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724910160405180910390a25050505050565b6000816401000000008410611a5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91905b600060208083528351808285015260005b818110156124d0578581018301518582016040015282016124b4565b818111156124e2576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461253a57600080fd5b919050565b6000806040838503121561255257600080fd5b61255b83612516565b946020939093013593505050565b60008060006060848603121561257e57600080fd5b61258784612516565b925061259560208501612516565b9150604084013590509250925092565b6000602082840312156125b757600080fd5b610ef382612516565b803560ff8116811461253a57600080fd5b60008060008060008060c087890312156125ea57600080fd5b6125f387612516565b9550602087013594506040870135935061260f606088016125c0565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a03121561264457600080fd5b61264d88612516565b965061265b60208901612516565b95506040880135945060608801359350612677608089016125c0565b925060a0880135915060c0880135905092959891949750929550565b600080604083850312156126a657600080fd5b6126af83612516565b91506126bd60208401612516565b90509250929050565b600080604083850312156126d957600080fd5b6126e283612516565b9150602083013563ffffffff811681146126fb57600080fd5b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600063ffffffff8381169083168181101561275257612752612706565b039392505050565b600063ffffffff80841680612798577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156127d6576127d6612706565b5060010190565b60006bffffffffffffffffffffffff8381169083168181101561275257612752612706565b60006bffffffffffffffffffffffff80831681851680830382111561282957612829612706565b01949350505050565b600063ffffffff8083168185168083038211156128295761282961270656fe476561723a3a617070726f76653a20616d6f756e7420657863656564732039362062697473476561723a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e74206f766572666c6f7773476561723a3a7472616e736665723a20616d6f756e7420657863656564732039362062697473476561723a3a5f6d6f7665566f7465733a20766f746520616d6f756e7420756e646572666c6f7773476561723a3a5f6d6f7665566f7465733a20766f746520616d6f756e74206f766572666c6f7773476561723a3a7065726d69743a20616d6f756e7420657863656564732039362062697473476561723a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d62657220657863656564732033322062697473476561723a3a7472616e7366657246726f6d3a207472616e7366657220616d6f756e742065786365656473207370656e64657220616c6c6f77616e6365476561723a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e7420657863656564732062616c616e6365a26469706673582212201b84fd7789a35c022f692420863210a30e82d2405659f5a28275d433fa53467f64736f6c634300080a003360806040526016805460ff1916905534801561001a57600080fd5b506040516110a73803806110a7833981016040819052610039916100b6565b600080546001600160a01b038085166001600160a01b0319928316179092556003805492841692909116919091179055610080600a6b033b2e3c9fd0803ce80000006100e9565b60075550506b033b2e3c9fd0803ce800000060155561010b565b80516001600160a01b03811681146100b157600080fd5b919050565b600080604083850312156100c957600080fd5b6100d28361009a565b91506100e06020840161009a565b90509250929050565b60008261010657634e487b7160e01b600052601260045260246000fd5b500490565b610f8d8061011a6000396000f3fe608060405234801561001057600080fd5b50600436106102e95760003560e01c806367c99d5811610191578063c5f956af116100e3578063dbcb313b11610097578063f11a648711610071578063f11a648714610320578063f3fdb15a146105f1578063fe14112d1461061157600080fd5b8063dbcb313b146105d6578063e941fa78146105df578063ef8d9603146105e857600080fd5b8063cb3905e1116100c8578063cb3905e1146105c4578063cf33d95514610320578063d0efe753146105cd57600080fd5b8063c5f956af14610588578063ca9505e4146105a857600080fd5b80639aa5d46211610145578063b6ac642a1161011f578063b6ac642a14610567578063bb04b19314610567578063bf28068b1461057557600080fd5b80639aa5d46214610544578063a4e8273e14610557578063b3554a0a1461055e57600080fd5b8063788c6bfe11610176578063788c6bfe146104ef5780638456cb591461050157806396df5dc01461053157600080fd5b806367c99d58146104de57806374375359146104e757600080fd5b806336dda7d51161024a5780634d778ad1116101fe57806354fd4d50116101d857806354fd4d50146104c05780635c975abb146104c8578063609ae317146104d557600080fd5b80634d778ad114610491578063532fe502146104a45780635427c938146104ad57600080fd5b80633f4ba83a1161022f5780633f4ba83a1461045257806345d31f9d1461047f5780634c19386c1461048857600080fd5b806336dda7d51461040f5780633e163df01461042f57600080fd5b80632495a599116102a157806329f3d3b61161028657806329f3d3b6146103b35780632a3354c9146103bc5780632e97ca21146103dc57600080fd5b80632495a599146103735780632954018c1461039357600080fd5b8063078c4781116102d2578063078c4781146103205780630fce70fb146103335780631e16e4fc1461033b57600080fd5b8063030dbb04146102ee57806305fe138b1461030a575b600080fd5b6102f760105481565b6040519081526020015b60405180910390f35b6102f7610318366004610ce8565b600092915050565b61033161032e366004610d14565b50565b005b6015546102f7565b61034e610349366004610d2f565b610618565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610301565b60035461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b60005461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6102f760095481565b600a5461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103ff6103ea366004610d14565b60066020526000908152604090205460ff1681565b6040519015158152602001610301565b60055461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103ff61043d366004610d14565b60146020526000908152604090205460ff1681565b610331601680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b6102f760075481565b6102f760015481565b6102f761049f366004610d2f565b61064f565b6102f760115481565b6102f76104bb366004610d2f565b61066d565b6102f7600181565b6016546103ff9060ff1681565b6102f760085481565b6102f7600d5481565b6102f7610685565b6b033b2e3c9fd0803ce80000006102f7565b610331601680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b61033161053f366004610d2f565b601555565b610331610552366004610d48565b505050565b60016102f7565b6102f7600e5481565b61033161032e366004610d2f565b610331610583366004610ce8565b61071d565b60135461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103316105b6366004610d7d565b600b92909255600c55600d55565b6102f7600c5481565b6102f7600b5481565b6102f760155481565b6102f7600f5481565b6102f760025481565b60125461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b60006102f7565b6004818154811061062857600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6000610667826b033b2e3c9fd0803ce800000061077a565b92915050565b6000610667826b033b2e3c9fd0803ce80000006108e9565b6003546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156106f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107189190610da9565b905090565b6009829055600a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691909117909155600354610776911682846109fe565b5050565b60408051808201909152600281527f4d330000000000000000000000000000000000000000000000000000000000006020820152600090826107f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b60405180910390fd5b506000610800600284610e72565b90506b033b2e3c9fd0803ce8000000610839827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610ead565b6108439190610e72565b8411156040518060400160405280600281526020017f4d31000000000000000000000000000000000000000000000000000000000000815250906108b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b5082816108cd6b033b2e3c9fd0803ce800000087610ec4565b6108d79190610f01565b6108e19190610e72565b949350505050565b60008215806108f6575081155b1561090357506000610667565b8161091b60026b033b2e3c9fd0803ce8000000610e72565b610945907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610ead565b61094f9190610e72565b8311156040518060400160405280600281526020017f4d31000000000000000000000000000000000000000000000000000000000000815250906109c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b506b033b2e3c9fd0803ce80000006109d9600282610e72565b6109e38486610ec4565b6109ed9190610f01565b6109f79190610e72565b9392505050565b6040805173ffffffffffffffffffffffffffffffffffffffff848116602483015260448083018590528351808403909101815260649092018352602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65649084015261055292869291600091610ac9918516908490610b73565b8051909150156105525780806020019051810190610ae79190610f19565b610552576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016107e9565b60606108e1848460008585843b610be6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107e9565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051610c0f9190610f3b565b60006040518083038185875af1925050503d8060008114610c4c576040519150601f19603f3d011682016040523d82523d6000602084013e610c51565b606091505b5091509150610c61828286610c6c565b979650505050505050565b60608315610c7b5750816109f7565b825115610c8b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ce357600080fd5b919050565b60008060408385031215610cfb57600080fd5b82359150610d0b60208401610cbf565b90509250929050565b600060208284031215610d2657600080fd5b6109f782610cbf565b600060208284031215610d4157600080fd5b5035919050565b600080600060608486031215610d5d57600080fd5b83359250610d6d60208501610cbf565b9150604084013590509250925092565b600080600060608486031215610d9257600080fd5b505081359360208301359350604090920135919050565b600060208284031215610dbb57600080fd5b5051919050565b60005b83811015610ddd578181015183820152602001610dc5565b83811115610dec576000848401525b50505050565b6020815260008251806020840152610e11816040850160208701610dc2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082610ea8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600082821015610ebf57610ebf610e43565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610efc57610efc610e43565b500290565b60008219821115610f1457610f14610e43565b500190565b600060208284031215610f2b57600080fd5b815180151581146109f757600080fd5b60008251610f4d818460208701610dc2565b919091019291505056fea26469706673582212204edb887d94928b3914f60ab48df0182da9eb30ddbb7021b164cc728b60a655d564736f6c634300080a003360e06040523480156200001157600080fd5b5060405162013af238038062013af2833981016040819052620000349162000630565b826001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000073573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000999190620007bf565b620000a433620004ab565b6001600160a01b038116608081905260408051630873769560e01b815290516308737695916004808201926020929091908290030181865afa158015620000ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001159190620007bf565b6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000153573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001799190620007bf565b6001600160a01b0390811660a052841660c0525060405183906200019d9062000519565b6001600160a01b039091168152602001604051809103906000f080158015620001ca573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b0392909216918217905560608301516080840151604051620002029062000527565b6001600160a01b03938416815292909116602083015215156040820152606001604051809103906000f0801580156200023f573d6000803e3d6000fd5b50600280546001600160a01b0319166001600160a01b0392909216919091179055604051600090620002746020820162000535565b601f1982820381018352601f909101166040819052600154600254620002b0926001600160a01b039283169291909116908790602001620007e6565b60408051601f1981840301815290829052620002d09291602001620008e8565b60408051601f19818403018152919052905060006200035982848151602092830120604080517fff00000000000000000000000000000000000000000000000000000000000000818601523060601b6001600160601b03191660218201526035810193909352605580840192909252805180840390920182526075909201909152805191012090565b600154604051634fafc35760e11b81526001600160a01b038084166004830152929350911690639f5f86ae90602401600060405180830381600087803b158015620003a357600080fd5b505af1158015620003b8573d6000803e3d6000fd5b50505050620003ce8284620004fb60201b60201c565b600380546001600160a01b0319166001600160a01b0383811691821790925560015460408051630304b08760e61b81529051919093169263c12c21c09160048083019260209291908290030181865afa15801562000430573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004569190620007bf565b6001600160a01b031614620004a05760405162461bcd60e51b815260206004820152600c60248201526b496e636f727265637420434d60a01b604482015260640160405180910390fd5b505050505062000909565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008183516020850134f59050803b6200051457600080fd5b505050565b6158e8806200243683390190565b615e978062007d1e83390190565b615f3d806200dbb583390190565b6001600160a01b03811681146200055957600080fd5b50565b8051620005698162000543565b919050565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b0381118282101715620005a957620005a96200056e565b60405290565b604080519081016001600160401b0381118282101715620005a957620005a96200056e565b604051601f8201601f191681016001600160401b0381118282101715620005ff57620005ff6200056e565b604052919050565b80516001600160801b03811681146200056957600080fd5b805180151581146200056957600080fd5b6000806000606084860312156200064657600080fd5b8351620006538162000543565b602085810151919450906001600160401b03808211156200067357600080fd5b9086019060a082890312156200068857600080fd5b6200069262000584565b6200069d8362000607565b8152620006ac84840162000607565b8482015260408084015183811115620006c457600080fd5b8401601f81018b13620006d657600080fd5b805184811115620006eb57620006eb6200056e565b620006fb878260051b01620005d4565b818152878101955060069190911b82018701908c8211156200071c57600080fd5b918701915b818310156200077e5783838e0312156200073b5760008081fd5b62000745620005af565b8351620007528162000543565b81528389015161ffff811681146200076a5760008081fd5b818a01528652948701949183019162000721565b8484015250620007939050606085016200055c565b6060830152620007a6608085016200061f565b6080830152979097015195989697509495945050505050565b600060208284031215620007d257600080fd5b8151620007df8162000543565b9392505050565b600060018060a01b0380861683526020818616818501526040606081860152610100850160018060801b038088511660608801528084890151166080880152508187015160a080880152818151808452610120890191508583019350600092505b808310156200087857835180518816835286015161ffff168683015292850192600192909201919084019062000847565b5060608901516001600160a01b031660c0890152608090980151151560e0909701969096525094979650505050505050565b6000815160005b81811015620008cd5760208185018101518683015201620008b1565b81811115620008dd576000828601525b509290920192915050565b600062000901620008fa8386620008aa565b84620008aa565b949350505050565b60805160a05160c051611ad3620009636000396000818161010a0152610ea00152600081816103790152610b170152600081816101680152818161068c01528181610a4d01528181610b860152610c190152611ad36000f3fe6080604052600436106100f35760003560e01c80638da5cb5b1161008a578063ebf0c71711610059578063ebf0c71714610367578063f2fde38b1461039b578063f4747c58146103bb578063f9aa028a146103db57600080fd5b80638da5cb5b1461025a57806394ca2cb5146102855780639c4ae2d014610327578063c12c21c01461033a57600080fd5b80633e0b1a23116100c65780633e0b1a23146101ce5780634ef501ac146101e3578063715018a614610230578063805abe6a1461024557600080fd5b806316f0115b146100f85780632954018c146101565780632f7a18811461018a578063318d0d10146101b7575b600080fd5b34801561010457600080fd5b5061012c7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561016257600080fd5b5061012c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561019657600080fd5b5060025461012c9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156101c357600080fd5b506101cc610408565b005b3480156101da57600080fd5b506101cc610498565b3480156101ef57600080fd5b506102036101fe366004611726565b610521565b6040805173ffffffffffffffffffffffffffffffffffffffff93841681529290911660208301520161014d565b34801561023c57600080fd5b506101cc610567565b34801561025157600080fd5b506101cc6105f2565b34801561026657600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff1661012c565b34801561029157600080fd5b5061012c6102a03660046117e6565b8151602092830120604080517fff00000000000000000000000000000000000000000000000000000000000000818601523060601b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660218201526035810193909352605580840192909252805180840390920182526075909201909152805191012090565b6101cc6103353660046117e6565b6107d8565b34801561034657600080fd5b5060015461012c9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561037357600080fd5b5061012c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103a757600080fd5b506101cc6103b63660046118c0565b6107f5565b3480156103c757600080fd5b506101cc6103d63660046118e4565b610925565b3480156103e757600080fd5b5060035461012c9073ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff16331461048e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b610496610a49565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610519576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b61048e610b82565b6004818154811061053157600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff91821692501682565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b61049660006116b1565b60005473ffffffffffffffffffffffffffffffffffffffff163314610673576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b3073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106f5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071991906119c4565b73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610763573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078791906119c4565b73ffffffffffffffffffffffffffffffffffffffff1614156107d5576040517fbdebb83f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33ff5b60008183516020850134f59050803b6107f057600080fd5b505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b73ffffffffffffffffffffffffffffffffffffffff8116610919576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610485565b610922816116b1565b50565b60005473ffffffffffffffffffffffffffffffffffffffff1633146109a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b805160005b818110156107f05760048382815181106109c7576109c76119e1565b602090810291909101810151825460018082018555600094855293839020825160029092020180547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff938416178255929093015192840180549092169216919091179055016109ab565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ab6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ada91906119c4565b6040517ff2fde38b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301529192509082169063f2fde38b90602401600060405180830381600087803b158015610b6757600080fd5b505af1158015610b7b573d6000803e3d6000fd5b5050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1391906119c4565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca691906119c4565b60045490915060005b81811015610dd4576003546004805473ffffffffffffffffffffffffffffffffffffffff90921691637bccacee919084908110610cee57610cee6119e1565b906000526020600020906002020160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660048481548110610d3357610d336119e1565b600091825260209091206002909102015460405160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b158015610db157600080fd5b505af1158015610dc5573d6000803e3d6000fd5b50505050806001019050610caf565b506001546040517fe26b2f6300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529084169063e26b2f6390602401600060405180830381600087803b158015610e4257600080fd5b505af1158015610e56573d6000803e3d6000fd5b50506001546040517fcf33d95500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201527f0000000000000000000000000000000000000000000000000000000000000000909116925063cf33d9559150602401600060405180830381600087803b158015610ee857600080fd5b505af1158015610efc573d6000803e3d6000fd5b50505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f919190611a10565b905060005b818110156116ab576003546040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810183905260009173ffffffffffffffffffffffffffffffffffffffff1690635094cb4f90602401602060405180830381865afa15801561100e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103291906119c4565b6001546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80841660048301529293506000929091169063fdd5764590602401602060405180830381865afa1580156110a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110cc91906119c4565b905060008173ffffffffffffffffffffffffffffffffffffffff1663ce30bbdb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561111b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113f9190611a29565b9050600c81601081111561115557611155611a4a565b14156116225760008273ffffffffffffffffffffffffffffffffffffffff166320b2c1516040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111cc91906119c4565b905060008373ffffffffffffffffffffffffffffffffffffffff1663927188d96040518163ffffffff1660e01b8152600401602060405180830381865afa15801561121b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123f91906119c4565b905060008473ffffffffffffffffffffffffffffffffffffffff166399253ac06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561128e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b291906119c4565b6040517f9dcb511a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152919250908a169063e8a97a3e9083908390639dcb511a90602401602060405180830381865afa15801561132c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135091906119c4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156113bd57600080fd5b505af11580156113d1573d6000803e3d6000fd5b50506040517f9dcb511a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301528c16925063e8a97a3e915085908390639dcb511a90602401602060405180830381865afa15801561144b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061146f91906119c4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156114dc57600080fd5b505af11580156114f0573d6000803e3d6000fd5b50506003546001546040517f7832743800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301529283169450633e7c88d69350879290911690637832743890602401602060405180830381865afa158015611573573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115979190611a79565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015261ffff166024820152604401600060405180830381600087803b15801561160657600080fd5b505af115801561161a573d6000803e3d6000fd5b505050505050505b600d81601081111561163657611636611a4a565b141561169d578173ffffffffffffffffffffffffffffffffffffffff16639b51ecd36040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561168457600080fd5b505af1158015611698573d6000803e3d6000fd5b505050505b836001019350505050610f96565b50505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561173857600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156117915761179161173f565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156117de576117de61173f565b604052919050565b600080604083850312156117f957600080fd5b823567ffffffffffffffff8082111561181157600080fd5b818501915085601f83011261182557600080fd5b81356020828211156118395761183961173f565b611869817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011601611797565b9250818352878183860101111561187f57600080fd5b8181850182850137600091830181019190915290969401359450505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461092257600080fd5b6000602082840312156118d257600080fd5b81356118dd8161189e565b9392505050565b600060208083850312156118f757600080fd5b823567ffffffffffffffff8082111561190f57600080fd5b818501915085601f83011261192357600080fd5b8135818111156119355761193561173f565b611943848260051b01611797565b818152848101925060069190911b83018401908782111561196357600080fd5b928401925b818410156119b957604084890312156119815760008081fd5b61198961176e565b84356119948161189e565b8152848601356119a38161189e565b8187015283526040939093019291840191611968565b979650505050505050565b6000602082840312156119d657600080fd5b81516118dd8161189e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215611a2257600080fd5b5051919050565b600060208284031215611a3b57600080fd5b8151601181106118dd57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060208284031215611a8b57600080fd5b815161ffff811681146118dd57600080fdfea264697066735822122090f5e4310a8b66bfdd7fdfbe64bc5b98570e7c1a415ffb0ced3c857cf6c5b14064736f6c634300080a00336101606040526000805462ff00001916620c00001790553480156200002357600080fd5b50604051620058e8380380620058e8833981016040819052620000469162000537565b806001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000085573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ab919062000537565b6000805460ff191690556001600160a01b038116620000dd57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200011c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000142919062000537565b6001600160a01b03166080816001600160a01b031681525050506000816001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200019d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c3919062000537565b6001600160a01b03831661010081905260e081905260408051632495a59960e01b81529051929350600092632495a599916004808201926020929091908290030181865afa1580156200021a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000240919062000537565b6001600160a01b03811660c05290506200025a8162000472565b816001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000299573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002bf919062000537565b6001600160a01b0316610120816001600160a01b031681525050816001600160a01b03166377532ed96040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000318573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033e919062000537565b6001600160a01b0316610140816001600160a01b031681525050816001600160a01b031663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000397573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003bd919062000537565b6001600001600a6101000a8154816001600160a01b0302191690836001600160a01b03160217905550816001600160a01b0316639068a8686040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000425573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044b919062000537565b6001600160a01b031660a0525050600380546001600160a01b031916331790555062000588565b6001600160a01b03811660009081526006602052604090205415620004aa57604051632e5a5c7760e01b815260040160405180910390fd5b61010060055410620004cf57604051631cbbe18560e01b815260040160405180910390fd5b600580546001600160a01b0383166000818152600660209081526040808320600190951b948590558483526004909152812091909155825491929062000515836200055e565b91905055505050565b6001600160a01b03811681146200053457600080fd5b50565b6000602082840312156200054a57600080fd5b815162000557816200051e565b9392505050565b60006000198214156200058157634e487b7160e01b600052601160045260246000fd5b5060010190565b60805160a05160c05160e051610100516101205161014051615248620006a0600039600081816107e20152818161371001526137c501526000818161052f01526136780152600081816103d301528181610e5701528181610ebb015281816124ff0152818161265a01528181612aa101528181612b8c01528181612c4e01528181612d0d0152613b8f015260006105a401526000818161062701528181610d2201528181610db301528181610e0001528181610e3601528181610f3f0152818161203a01528181612b6b015281816130ee015281816134dc015281816135a90152613fe601526000818161081c01528181610fe101526124c20152600081816107a80152818161118401526122cb01526152486000f3fe608060405234801561001057600080fd5b50600436106103415760003560e01c8063830aa745116101bd578063a70bc542116100f9578063e75538c7116100a2578063f9aa028a1161007c578063f9aa028a1461089d578063fdd57645146108bd578063fe47cde7146108f3578063ff6875431461091357600080fd5b8063e75538c714610864578063e958b70414610877578063f67c5bd01461088a57600080fd5b8063db7ceb80116100d3578063db7ceb8014610817578063dc2b21c11461083e578063e1998cf91461085157600080fd5b8063a70bc542146107ca578063c5e10eef146107dd578063d48bfca71461080457600080fd5b806394cf073a116101665780639f5f86ae116101405780639f5f86ae146107745780639fd12b7714610787578063a366f49614610790578063a50cf2c8146107a357600080fd5b806394cf073a146106f557806395373018146107085780639af1d35a1461071b57600080fd5b80638991b2f1116101975780638991b2f1146106af5780638fe3f93f146106cf578063944ac59f146106e257600080fd5b8063830aa7451461066f5780638345f26e146106825780638456cb59146106a757600080fd5b8063458936f51161028c578063570a7af2116102355780636ce4074a1161020f5780636ce4074a146105ef5780636e98e5e41461060f5780636f307dc314610622578063783274381461064957600080fd5b8063570a7af21461059f5780635c975abb146105c6578063654a9eda146105dc57600080fd5b80635063524a116102665780635063524a1461055157806351e3f1601461058457806354fd4d501461059757600080fd5b8063458936f51461050e57806346fb371d146105175780634f0e0ef31461052a57600080fd5b80632630c12f116102ee5780633192195c116102c85780633192195c146104be5780633e8297ca146104e65780633f4ba83a1461050657600080fd5b80632630c12f1461045857806329df0b93146104845780632f7a18811461049757600080fd5b806316f0115b1161031f57806316f0115b146103ce578063172c48c7146103f55780632362a2d81461043757600080fd5b8063055ee9b5146103465780630d8f9cee146103a657806311ca4fc2146103bb575b600080fd5b61037c610354366004614a87565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6103b96103b4366004614aa4565b610949565b005b6103b96103c9366004614aa4565b610a76565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b610408610403366004614add565b610b4e565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835261ffff90911660208301520161039d565b61044a610445366004614b13565b610b66565b60405190815260200161039d565b6001546a0100000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1661037c565b6103b9610492366004614a87565b6110be565b60005461037c906301000000900473ffffffffffffffffffffffffffffffffffffffff1681565b6104d16104cc366004614a87565b611122565b6040805192835260208301919091520161039d565b61044a6104f4366004614a87565b60096020526000908152604090205481565b6103b9611156565b61044a60055481565b6103b9610525366004614b95565b611244565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b61056461055f366004614be6565b61149b565b60408051948552602085019390935291830152606082015260800161039d565b6103b9610592366004614aa4565b611602565b61044a600281565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b60005460ff16604051901515815260200161039d565b6103b96105ea366004614c21565b611703565b6106026105fd366004614d40565b611bbb565b60405161039d9190614e5b565b6103b961061d366004614aa4565b611e8e565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b61065c610657366004614a87565b612036565b60405161ffff909116815260200161039d565b6103b961067d366004614b95565b61210f565b6000546106959062010000900460ff1681565b60405160ff909116815260200161039d565b6103b961229d565b61044a6106bd366004614a87565b60086020526000908152604090205481565b61037c6106dd366004614e6e565b612389565b6103b96106f0366004614ea5565b612718565b61044a610703366004614f0a565b612845565b6103b9610716366004614a87565b612e5a565b6001546040805161ffff808416825262010000840481166020830152640100000000840481169282019290925266010000000000008304821660608201526801000000000000000090920416608082015260a00161039d565b6103b9610782366004614a87565b612f85565b61044a60075481565b6103b961079e366004614add565b613045565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b96107d8366004614f4c565b61309b565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b9610812366004614a87565b613221565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b961084c366004614f81565b61327b565b6103b961085f366004614aa4565b613306565b610408610872366004614add565b6134c9565b61037c610885366004614a87565b613541565b61044a610898366004614a87565b6135a5565b60035461037c9073ffffffffffffffffffffffffffffffffffffffff1681565b61037c6108cb366004614a87565b600b6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b600c5461037c9073ffffffffffffffffffffffffffffffffffffffff1681565b61037c610921366004614a87565b600a6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561099b57506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b156109d2576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff1615610a14576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055610a4a828261362e565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b60035473ffffffffffffffffffffffffffffffffffffffff163314610ac7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805473ffffffffffffffffffffffffffffffffffffffff9384166301000000027fffffffffffffffffff0000000000000000000000000000000000000000ffffff90911617905560018054919092166a0100000000000000000000027fffff0000000000000000000000000000000000000000ffffffffffffffffffff909116179055565b600080610b5d6001841b6134c9565b91509150915091565b6000805460ff1615610bd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064015b60405180910390fd5b600054610100900460ff1615610c1b576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff163314610ca0576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610cab89613541565b90506000806000806000610cbe86611122565b9094509050610ccf8c8e868461149b565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152939b5093985090955093506000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015610d6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8f9190614fa4565b9050610d9b8887614fec565b610da6906001614fec565b811115610de657610de1877f00000000000000000000000000000000000000000000000000000000000000008d60018c8b870303038d61366e565b610e30565b610e3073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168d8960018a8d01869003016138c0565b610e7e877f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000089600061366e565b6040517fca9505e40000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604481018490527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ca9505e490606401600060405180830381600087803b158015610f1457600080fd5b505af1158015610f28573d6000803e3d6000fd5b50505050505050506001841115610f6757610f67837f00000000000000000000000000000000000000000000000000000000000000008d87600061366e565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260086020526040902054861916610f9c8489888461395b565b6040517f89b77b3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f000000000000000000000000000000000000000000000000000000000000000016906389b77b3e90602401600060405180830381600087803b15801561102557600080fd5b505af1158015611039573d6000803e3d6000fd5b50505073ffffffffffffffffffffffffffffffffffffffff909c16600090815260026020526040812080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550929a9950505050505050505050565b6000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314611116576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61111f81613a35565b50565b60008060008061113185613aa6565b91955092509050816111438286615004565b61114d9190615041565b92505050915091565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156111e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611204919061507c565b61123a576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611242613c24565b565b60005460ff16156112b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156112f3576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100178155338152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff9081169084161480159061137457506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b80156113985750600c5473ffffffffffffffffffffffffffffffffffffffff163314155b806113b7575073ffffffffffffffffffffffffffffffffffffffff8316155b156113ee576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113f7826135a5565b61142d576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061143885613541565b9050611448838583856000613d05565b61146c5761145b83858360006001613d05565b5061146a838583856001613d05565b505b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b6001546000908190819081906127109061ffff166114b98888615099565b6114c39190615004565b6114cd9190615041565b6114d79086614fec565b935060018760028111156114ed576114ed6150b0565b1415611587576001546000906127109061151390640100000000900461ffff168b615004565b61151d9190615041565b6001549091506127109061153b9062010000900461ffff168b615004565b6115459190615041565b61154f9086614fec565b94508481111561156657600185820303935061156a565b8094505b85811061157b578585039250611581565b84860391505b506115f7565b600287600281111561159b5761159b6150b0565b14156115f157600154600090612710906115c59068010000000000000000900461ffff168b615004565b6115cf9190615041565b6001549091506127109061153b906601000000000000900461ffff168b615004565b84840391505b945094509450949050565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561165457506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b1561168b576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff16156116cd576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055610a4a8282613ea6565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561175557506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b1561178c576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff16156117ce576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790556118048584613ea6565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152600091908616906370a0823190602401602060405180830381865afa158015611874573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118989190614fa4565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529192506000918616906370a0823190602401602060405180830381865afa15801561190a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192e9190614fa4565b60015490915060009081906a0100000000000000000000900473ffffffffffffffffffffffffffffffffffffffff16635cecbd0e61196c8689615099565b8a6119778988615099565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152600481019390935273ffffffffffffffffffffffffffffffffffffffff918216602484015260448301528a1660648201526084016040805180830381865afa1580156119f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1791906150df565b9150915060018411611a2d57611a2d898961362e565b611a3687612036565b611a449061ffff1682615004565b9050611a4f88612036565b611a5d9061ffff1683615004565b9150818110611a7857611a6f89613a35565b5050505061146c565b73ffffffffffffffffffffffffffffffffffffffff891660009081526009602052604081205483611ab56b033b2e3c9fd0803ce800000085615004565b611abf9190615041565b611ad5906b033b2e3c9fd0803ce8000000615099565b611adf9190614fec565b60015490915061271090611b0a906b033b2e3c9fd0803ce80000009062010000900461ffff16615004565b611b149190615041565b8111611b555773ffffffffffffffffffffffffffffffffffffffff8a166000908152600960205260409020819055611b4b8a613a35565b505050505061146c565b611b5e8a613f56565b50505073ffffffffffffffffffffffffffffffffffffffff871660009081526009602052604090206001905550505050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b6060611bc960005460ff1690565b15611c30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff1615611c72576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100178155338152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff908116908416141580611ce7575073ffffffffffffffffffffffffffffffffffffffff8316155b15611d3d57600c5473ffffffffffffffffffffffffffffffffffffffff163314611d3d576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611d4885613541565b90508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167faed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab0360405160405180910390a36040517f1cff79cd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821690631cff79cd90611df89087908790600401615103565b6000604051808303816000875af1158015611e17573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611e5d9190810190615132565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905595945050505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314611edf576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821615611f4f5773ffffffffffffffffffffffffffffffffffffffff8281166000908152600a6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169183169190911790555b73ffffffffffffffffffffffffffffffffffffffff811615611fbf5773ffffffffffffffffffffffffffffffffffffffff8181166000908152600b6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169184169190911790555b73ffffffffffffffffffffffffffffffffffffffff811673cccccccccccccccccccccccccccccccccccccccc141561203257600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790555b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120ba5750506001547e01000000000000000000000000000000000000000000000000000000000000900461ffff1690565b60006120c5836135a5565b9050806120fe576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612107816134c9565b949350505050565b60005460ff161561217c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156121be576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff163314612243576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61224d8383613ea6565b61226f73ffffffffffffffffffffffffffffffffffffffff83168585846138c0565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555050565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015612327573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061234b919061507c565b612381576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112426142d4565b6000805460ff16156123f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff1615612439576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff1633146124be576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166321d18456857f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612568573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061258c9190614fa4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168152600481019290925260248201526044016020604051808303816000875af11580156125e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061260b91906151a0565b6040517fbf28068b0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff80831660248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063bf28068b90604401600060405180830381600087803b1580156126a057600080fd5b505af11580156126b4573d6000803e3d6000fd5b505050506126c28382614394565b73ffffffffffffffffffffffffffffffffffffffff811660009081526008602052604081206001905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690559392505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314612769576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805461ffff92831668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9484166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff96851664010000000002969096167fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff97851662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000090931694909816939093171794909416949094179190911716919091179055565b6000805460ff16156128b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156128f5576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff16331461297a576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080600061298887613aa6565b925092509250846129a25761299d8684615099565b6129ac565b6129ac8684614fec565b935060008515612b045769021e19e0c9bab24000008510612a15576129d583603689901c615004565b6129e3603686901c84615004565b6129ed9190614fec565b603686901c6129fc8585615004565b612a069190615004565b612a109190615041565b612a52565b612a1f8388615004565b612a298584615004565b612a339190614fec565b85612a3e8585615004565b612a489190615004565b612a529190615041565b6040517fbf28068b0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff8a811660248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063bf28068b90604401600060405180830381600087803b158015612ae757600080fd5b505af1158015612afb573d6000803e3d6000fd5b50505050612d9f565b60008484612b128583615004565b612b1c9190615041565b612b269190615099565b60015490915060009061271090612b419061ffff1684615004565b612b4b9190615041565b905073ffffffffffffffffffffffffffffffffffffffff8a1663d1660f997f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000084612bb6878f614fec565b612bc09190614fec565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b158015612c3457600080fd5b505af1158015612c48573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ca9505e4838b612c949190614fec565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815260048101919091526024810184905260006044820152606401600060405180830381600087803b158015612cf357600080fd5b505af1158015612d07573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d9a9190614fa4565b925050505b6040517f16128211000000000000000000000000000000000000000000000000000000008152600481018690526024810182905273ffffffffffffffffffffffffffffffffffffffff891690631612821190604401600060405180830381600087803b158015612e0e57600080fd5b505af1158015612e22573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055509498975050505050505050565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff16158015612eac57506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b15612ee3576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff1615612f25576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055612f5a81613f56565b50600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b60035473ffffffffffffffffffffffffffffffffffffffff163314612fd6576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517ff62005acebe9b616aefb5f248b48f5e89f28437b27d1eebc0b2d911209f297af90600090a250565b60035473ffffffffffffffffffffffffffffffffffffffff163314613096576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600755565b60035473ffffffffffffffffffffffffffffffffffffffff1633146130ec576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613193576001805461ffff83167e01000000000000000000000000000000000000000000000000000000000000027dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790555050565b600061319e836135a5565b9050806131d7576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000908152600460205260409020805473ffffffffffffffffffffffffffffffffffffffff1675ffff000000000000000000000000000000000000000060a084901b161790555050565b60035473ffffffffffffffffffffffffffffffffffffffff163314613272576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61111f81614467565b60035473ffffffffffffffffffffffffffffffffffffffff1633146132cc576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805460ff90921662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff909216919091179055565b60005460ff1615613373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156133b5576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff16331461343a576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061344583613541565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260026020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055905061349c8282614394565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b60008082600114156135275750506001547f0000000000000000000000000000000000000000000000000000000000000000927e0100000000000000000000000000000000000000000000000000000000000090910461ffff169150565b50506000908152600460205260409020549060a082901c90565b73ffffffffffffffffffffffffffffffffffffffff80821660009081526002602052604090205416806135a0576040517fb5ba4c4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146136255773ffffffffffffffffffffffffffffffffffffffff8216600090815260066020526040902054613628565b60015b92915050565b6000613639826135a5565b73ffffffffffffffffffffffffffffffffffffffff909316600090815260086020526040902080549319939093169092555050565b8080156136c657507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b15613828576040517fd1660f9900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301526044820184905286169063d1660f9990606401600060405180830381600087803b15801561376357600080fd5b505af1158015613777573d6000803e3d6000fd5b50506040517f5869dba800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690527f0000000000000000000000000000000000000000000000000000000000000000169250635869dba89150604401600060405180830381600087803b15801561380b57600080fd5b505af115801561381f573d6000803e3d6000fd5b505050506138b9565b6040517fd1660f9900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301526044820184905286169063d1660f9990606401600060405180830381600087803b1580156138a057600080fd5b505af11580156138b4573d6000803e3d6000fd5b505050505b5050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261395590859061455b565b50505050565b60025b8181116138b95781811615613a2d576000613978826134c9565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529192506000918316906370a0823190602401602060405180830381865afa1580156139eb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a0f9190614fa4565b90506002811115613a2a57613a2a878388600185038961366e565b50505b60011b61395e565b73ffffffffffffffffffffffffffffffffffffffff811660009081526008602052604081205490613a6582614667565b60005490915062010000900460ff16811115613aa1576000613a86836146a7565b613a91906001614fec565b905061395584848460008561470b565b505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff16631afbb7a46040518163ffffffff1660e01b8152600401602060405180830381865afa158015613af6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b1a9190614fa4565b92508373ffffffffffffffffffffffffffffffffffffffff166317d11a156040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b8b9190614fa4565b91507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bf8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c1c9190614fa4565b929491935050565b60005460ff16613c90576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610bd0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6040805173ffffffffffffffffffffffffffffffffffffffff8681166024830152604480830186905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b30000000000000000000000000000000000000000000000000000000017905291517f1cff79cd000000000000000000000000000000000000000000000000000000008152600092861691631cff79cd91613dc6918a91600401615103565b6000604051808303816000875af1925050508015613e2457506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052613e219190810190615132565b60015b613e2d57613e61565b80511580613e50575080806020019051810190613e4a919061507c565b15156001145b15613e5f576001915050613e9d565b505b8115613e99576040517f76e3e29c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060005b95945050505050565b6000613eb1826135a5565b9050801580613ec35750600754811615155b15613efa576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83166000908152600860205260409020548116613aa15773ffffffffffffffffffffffffffffffffffffffff83166000908152600860205260409020805482179055505050565b60015473ffffffffffffffffffffffffffffffffffffffff8281166000908152600860205260408120546a010000000000000000000090930490911691908080613f9f86611122565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526127108202600482015273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350908716915063f9a6503090604401602060405180830381865afa15801561403a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061405e9190614fa4565b9250614069846146a7565b6001019150506000806000805b848110156142a157801561408f5760018186031b614092565b60015b935086841615614299576000806140a8866134c9565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8e811660048301529294509092506000918416906370a0823190602401602060405180830381865afa15801561411d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141419190614fa4565b9050600181111561428c576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff848116602483015261ffff841691908d169063f9a6503090604401602060405180830381865afa1580156141c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141ea9190614fa4565b6141f49190615004565b6141fe9087614fec565b95508886106142875760006142128b614667565b60005490915062010000900460ff16811115614249576142448d8c836001891561423e57898e0361470b565b8d61470b565b614278565b85156142785773ffffffffffffffffffffffffffffffffffffffff8d1660009081526008602052604090208b90555b50505050505050505050505050565b614295565b98861898600194505b5050505b600101614076565b506040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005460ff1615614341576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613cdb3390565b73ffffffffffffffffffffffffffffffffffffffff821615806143dd575073ffffffffffffffffffffffffffffffffffffffff8281166000908152600260205260409020541615155b15614414576040517f9e59609e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff918216600090815260026020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001691909216179055565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260066020526040902054156144c4576040517f2e5a5c7700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61010060055410614501576040517f1cbbe18500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005805473ffffffffffffffffffffffffffffffffffffffff83166000818152600660209081526040808320600190951b9485905584835260049091528120919091558254919290614552836151bd565b91905055505050565b60006145bd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166148799092919063ffffffff16565b805190915015613aa157808060200190518101906145db919061507c565b613aa1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610bd0565b60008060005b6101008110156146a0576001811b91508382161561468c578260010192505b838210614698576146a0565b60010161466d565b5050919050565b600081600114156146ba57506000919050565b61010060015b60016146cc8284614fec565b901c92506001831b848116158015906146e75750600185851c145b156146f257506146a0565b84811061470157839250614705565b8391505b506146c0565b815b81811015614846576001811b8581161561483d57600061472c826134c9565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529192506000918316906370a0823190602401602060405180830381865afa15801561479f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147c39190614fa4565b90506001811161483a57600054978318977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9097019660ff6201000090910416871161483a5750505073ffffffffffffffffffffffffffffffffffffffff86166000908152600860205260409020859055506138b9565b50505b5060010161470d565b506040517f53275fcb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606148888484600085614892565b90505b9392505050565b606082471015614924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610bd0565b843b61498c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610bd0565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516149b591906151f6565b60006040518083038185875af1925050503d80600081146149f2576040519150601f19603f3d011682016040523d82523d6000602084013e6149f7565b606091505b5091509150614a07828286614a12565b979650505050505050565b60608315614a2157508161488b565b825115614a315782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd09190614e5b565b73ffffffffffffffffffffffffffffffffffffffff8116811461111f57600080fd5b600060208284031215614a9957600080fd5b813561488b81614a65565b60008060408385031215614ab757600080fd5b8235614ac281614a65565b91506020830135614ad281614a65565b809150509250929050565b600060208284031215614aef57600080fd5b5035919050565b8035600381106135a057600080fd5b801515811461111f57600080fd5b600080600080600080600060e0888a031215614b2e57600080fd5b8735614b3981614a65565b9650614b4760208901614af6565b9550604088013594506060880135614b5e81614a65565b93506080880135614b6e81614a65565b925060a0880135915060c0880135614b8581614b05565b8091505092959891949750929550565b60008060008060808587031215614bab57600080fd5b8435614bb681614a65565b93506020850135614bc681614a65565b92506040850135614bd681614a65565b9396929550929360600135925050565b60008060008060808587031215614bfc57600080fd5b84359350614c0c60208601614af6565b93969395505050506040820135916060013590565b600080600080600060a08688031215614c3957600080fd5b8535614c4481614a65565b94506020860135614c5481614a65565b93506040860135614c6481614a65565b94979396509394606081013594506080013592915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614cf257614cf2614c7c565b604052919050565b600067ffffffffffffffff821115614d1457614d14614c7c565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600080600060608486031215614d5557600080fd5b8335614d6081614a65565b92506020840135614d7081614a65565b9150604084013567ffffffffffffffff811115614d8c57600080fd5b8401601f81018613614d9d57600080fd5b8035614db0614dab82614cfa565b614cab565b818152876020838501011115614dc557600080fd5b816020840160208301376000602083830101528093505050509250925092565b60005b83811015614e00578181015183820152602001614de8565b838111156139555750506000910152565b60008151808452614e29816020860160208601614de5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061488b6020830184614e11565b60008060408385031215614e8157600080fd5b823591506020830135614ad281614a65565b803561ffff811681146135a057600080fd5b600080600080600060a08688031215614ebd57600080fd5b614ec686614e93565b9450614ed460208701614e93565b9350614ee260408701614e93565b9250614ef060608701614e93565b9150614efe60808701614e93565b90509295509295909350565b600080600060608486031215614f1f57600080fd5b8335614f2a81614a65565b9250602084013591506040840135614f4181614b05565b809150509250925092565b60008060408385031215614f5f57600080fd5b8235614f6a81614a65565b9150614f7860208401614e93565b90509250929050565b600060208284031215614f9357600080fd5b813560ff8116811461488b57600080fd5b600060208284031215614fb657600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115614fff57614fff614fbd565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561503c5761503c614fbd565b500290565b600082615077577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60006020828403121561508e57600080fd5b815161488b81614b05565b6000828210156150ab576150ab614fbd565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600080604083850312156150f257600080fd5b505080516020909101519092909150565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015260006148886040830184614e11565b60006020828403121561514457600080fd5b815167ffffffffffffffff81111561515b57600080fd5b8201601f8101841361516c57600080fd5b805161517a614dab82614cfa565b81815285602083850101111561518f57600080fd5b613e9d826020830160208601614de5565b6000602082840312156151b257600080fd5b815161488b81614a65565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156151ef576151ef614fbd565b5060010190565b60008251615208818460208701614de5565b919091019291505056fea26469706673582212209d39bb9d4972b515acdad1ffb757acd15e103ca6ee762f88a6382b36243734ba64736f6c634300080a00336101406040523480156200001257600080fd5b5060405162005e9738038062005e97833981016040819052620000359162000198565b60016000556001600160a01b0383166200006257604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038316608081905260408051636f307dc360e01b81529051636f307dc3916004808201926020929091908290030181865afa158015620000ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d39190620001ea565b6001600160a01b031660a0816001600160a01b031681525050826001600160a01b0316634f0e0ef36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200012b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001519190620001ea565b6001600160a01b0390811660c0529190911660e0819052151561010052151561012052506200020f565b80516001600160a01b03811681146200019357600080fd5b919050565b600080600060608486031215620001ae57600080fd5b620001b9846200017b565b9250620001c9602085016200017b565b915060408401518015158114620001df57600080fd5b809150509250925092565b600060208284031215620001fd57600080fd5b62000208826200017b565b9392505050565b60805160a05160c05160e0516101005161012051615a86620004116000396000818161061101528181612fb5015261481f01526000818161031701528181610dde015281816144f901526146e5015260008181610557015281816146a901526147a901526000818161034b0152818161387d015261392d01526000818161047301528181611bfe0152818161274f0152818161280d0152818161366a01526137dd015260008181610665015281816109d801528181610b0301528181610bd501528181610cdd01528181610e6501528181610fe30152818161114e0152818161120e0152818161132e015281816114510152818161162b01528181611708015281816117e0015281816119e501528181611b1201528181611d9501528181611ed5015281816120040152818161216801528181612290015281816123c601528181612568015281816126390152818161266f0152818161293d01528181612a2101528181612a8a01528181612bde01528181612d2601528181612e6801528181612ec2015281816130a10152818161311b015281816131b401528181613341015281816134c10152818161358a0152818161372f01528181613a1a01528181613b2e01528181613dbb015281816142200152818161432801528181614492015281816148e7015281816149e801528181614aae0152614d8f0152615a866000f3fe6080604052600436106102695760003560e01c8063860aefcf11610153578063c7de38a6116100cb578063dfd594651161007f578063eb9606df11610064578063eb9606df1461081e578063f9eaee0d1461083e578063ffd9b9071461085e57600080fd5b8063dfd59465146107de578063e1f21c67146107fe57600080fd5b8063cff0ab96116100b0578063cff0ab96146106ef578063d9ccbec114610783578063dcf65482146107be57600080fd5b8063c7de38a6146106a7578063caa5c23f146106dc57600080fd5b80639c55a05411610122578063b55bb84b11610107578063b55bb84b14610633578063c12c21c014610653578063c690908a1461068757600080fd5b80639c55a054146105df578063b1836d32146105ff57600080fd5b8063860aefcf146104db5780639408b63f146105455780639b67ab30146105795780639be0536a146105bd57600080fd5b80635d91a0e0116101e65780636d19b486116101b55780637071b7c51161019a5780637071b7c51461049557806379c0ef91146104a857806382871ace146104c857600080fd5b80636d19b486146104415780636f307dc31461046157600080fd5b80635d91a0e0146103e85780635f73fbec146103fb578063601d66f61461040e5780636c8f225d1461042e57600080fd5b80633d9287fa1161023d5780635019e20a116102225780635019e20a1461039257806354fd4d50146103b257806359781034146103d557600080fd5b80633d9287fa146103055780634f0e0ef31461033957600080fd5b8062842b571461026e578063256ac915146102905780632a7ba1f7146102c55780632b7c7b11146102e5575b600080fd5b34801561027a57600080fd5b5061028e6102893660046151bf565b61087e565b005b34801561029c57600080fd5b506102b06102ab3660046151f8565b61098e565b60405190151581526020015b60405180910390f35b3480156102d157600080fd5b5061028e6102e0366004615215565b610a61565b3480156102f157600080fd5b5061028e610300366004615215565b610c3b565b34801561031157600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561034557600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102bc565b34801561039e57600080fd5b5061028e6103ad3660046151f8565b610d6a565b3480156103be57600080fd5b506103c7600281565b6040519081526020016102bc565b61028e6103e336600461522e565b61108c565b61028e6103f63660046152bb565b611275565b61028e610409366004615340565b611589565b34801561041a57600080fd5b5061028e6104293660046153d8565b6117de565b61028e61043c36600461541b565b611900565b34801561044d57600080fd5b506102b061045c3660046151f8565b611c31565b34801561046d57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b61028e6104a336600461546e565b611c60565b3480156104b457600080fd5b5061036d6104c3366004615215565b611f3e565b61028e6104d63660046152bb565b611f4b565b3480156104e757600080fd5b5060025461051c906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041682565b604080516fffffffffffffffffffffffffffffffff9384168152929091166020830152016102bc565b34801561055157600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561058557600080fd5b506004546040805167ffffffffffffffff608084901c1681526fffffffffffffffffffffffffffffffff9092166020830152016102bc565b3480156105c957600080fd5b506105d261227d565b6040516102bc91906154e2565b3480156105eb57600080fd5b5061028e6105fa36600461553c565b61228e565b34801561060b57600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561063f57600080fd5b5061028e61064e3660046151f8565b6123c4565b34801561065f57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561069357600080fd5b5061028e6106a23660046151f8565b6124c6565b3480156106b357600080fd5b506106c76106c23660046151f8565b612668565b604080519283526020830191909152016102bc565b61028e6106ea366004615557565b61289b565b3480156106fb57600080fd5b5060015461074e906fffffffffffffffffffffffffffffffff811690700100000000000000000000000000000000810460ff169071010000000000000000000000000000000000900464ffffffffff1683565b604080516fffffffffffffffffffffffffffffffff9094168452911515602084015264ffffffffff16908201526060016102bc565b34801561078f57600080fd5b506102b061079e366004615599565b600360209081526000928352604080842090915290825290205460ff1681565b3480156107ca57600080fd5b5061028e6107d93660046151f8565b612a88565b3480156107ea57600080fd5b506103c76107f93660046151f8565b612b86565b34801561080a57600080fd5b5061028e61081936600461522e565b612c6d565b34801561082a57600080fd5b5061028e6108393660046155c7565b612ec0565b34801561084a57600080fd5b506102b06108593660046151f8565b613057565b34801561086a57600080fd5b5061028e6108793660046155ee565b6131b2565b600260005414156108f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b6002600090815573ffffffffffffffffffffffffffffffffffffffff8316808252600360209081526040808420338086529083529381902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081527f9b3258bc4904fd6426b99843e206c6c7cdb1fd0f040121c25b71dafbb3851ee0910160405180910390a350506001600055565b6040517f055ee9b500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063055ee9b590602401602060405180830381865afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a43919061560b565b73ffffffffffffffffffffffffffffffffffffffff16141592915050565b60026000541415610ace576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610b5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b83919061560b565b9050610b903382846132eb565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906395373018906024015b600060405180830381600087803b158015610c1a57600080fd5b505af1158015610c2e573d6000803e3d6000fd5b5050600160005550505050565b60026000541415610ca8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610d39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5d919061560b565b9050610b90338284613411565b60026000541415610dd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000557f000000000000000000000000000000000000000000000000000000000000000015610e34576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610ec1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee5919061560b565b33600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915290205490915060ff16610f52576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f5d82613583565b5090508015610f98576040517ff713841e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b15801561102757600080fd5b505af115801561103b573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692503391507f93c70cc9715bef0d83edf2095f3595402279d274f402a73ffc17f1bcb19d863d90600090a35050600160005550565b600260005414156110f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611106613875565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063e958b70490602401602060405180830381865afa158015611197573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bb919061560b565b90506111c9848285856139b7565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401600060405180830381600087803b15801561125257600080fd5b505af1158015611266573d6000803e3d6000fd5b50506001600055505050505050565b600260005414156112e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611375573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611399919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166113e8576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806113f483613583565b915091508161142f576040517f1fdd676f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611437613875565b831561144d5761144d85858b8660016000613ae3565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632362a2d88b600185338e8e8e6040518863ffffffff1660e01b81526004016114b59796959493929190615663565b6020604051808303816000875af11580156114d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f891906156bf565b90508873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f7dfecd8419723a9d3954585a30c2a270165d70aafa146c11c1e1b88ae14390648460405161157091815260200190565b60405180910390a4505060016000555050505050505050565b600260005414156115f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ab919061560b565b90506116b5613875565b81156116cb576116cb8383338460016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d89061174a903390600090819083908d908d908d90600401615663565b6020604051808303816000875af1158015611769573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178d91906156bf565b5060405173ffffffffffffffffffffffffffffffffffffffff87169033907f460ad03b1cf79b1d64d3aefa28475f110ab66e84649c52bb41ed796b9b39198190600090a35050600160005550505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611849573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118d1576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff90811670010000000000000000000000000000000002911617600255565b6002600054141561196d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000908155606461198461ffff851687615707565b61198e9190615744565b9050611999816144f7565b6119a2816145e8565b6119ab84614668565b6119b3613875565b6040517f172c48c7000000000000000000000000000000000000000000000000000000008152600060048201819052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a64919061577f565b61ffff169150611a789050816127106157ae565b611a829083615707565b611a8c8288615707565b11611ac3576040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff86811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611b5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b81919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638587604051611bef92919091825261ffff16602082015260400190565b60405180910390a3611c2386827f00000000000000000000000000000000000000000000000000000000000000008a6139b7565b505060016000555050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526006602052604081205415155b92915050565b60026000541415611ccd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611cdb856144f7565b611ce484614668565b611ced856145e8565b600154700100000000000000000000000000000000900460ff1615611d3e576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d46613875565b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff85811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611de0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e04919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638885604051611e7292919091825261ffff16602082015260400190565b60405180910390a38215611e9057611e908484878460006001613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015611f1957600080fd5b505af1158015611f2d573d6000803e3d6000fd5b505060016000555050505050505050565b6000611c5a60058361480f565b60026000541415611fb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa15801561204b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206f919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166120be576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120c661481b565b6120fc576040517f7e52ccb400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061210782612668565b509050612112613875565b82156121285761212884848a8560016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d8906121aa908c90600290879033908f908f908f90600401615663565b6020604051808303816000875af11580156121c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ed91906156bf565b90508773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167ffada13ff2d5e1a1d9da37ad4a4130893b34e3c69c32b17f87ec31fd661b867078460405161226591815260200190565b60405180910390a45050600160005550505050505050565b6060612289600561486b565b905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612381576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561242f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612453919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146124b7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614878565b5050565b60026000541415612533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156125c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e8919061560b565b90506125f4818361489a565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401610c00565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126fc919061560b565b905060008061270b8387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156127a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127c991906156bf565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015291965061271091851690637afb010490604401602060405180830381865afa158015612863573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061288791906156bf565b6128919190615744565b9350505050915091565b60026000541415612908576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129bd919061560b565b90506129c7613875565b8115612a7e576129dc83833384600080613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015612a6557600080fd5b505af1158015612a79573d6000803e3d6000fd5b505050505b5050600160005550565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612af3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b17919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b7b576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614c92565b600080612b9283612668565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152919350600092507f000000000000000000000000000000000000000000000000000000000000000090911690633192195c906024016040805180830381865afa158015612c26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4a91906157c5565b9150819050612c5b61271084615707565b612c659190615744565b949350505050565b60026000541415612cda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063fdd5764590602401602060405180830381865afa158015612d6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d91919061560b565b73ffffffffffffffffffffffffffffffffffffffff161480612dd7575073ffffffffffffffffffffffffffffffffffffffff831660009081526006602052604090205415155b15612e0e576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612eac57600080fd5b505af1158015611c23573d6000803e3d6000fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f4f919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612fb3576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000061300a576040517f50dd11fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805464ffffffffff90921671010000000000000000000000000000000000027fffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffffff909216919091179055565b6040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063f67c5bd090602401602060405180830381865afa1580156130e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061310c91906156bf565b905080158015906131ab5750807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015613184573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a891906156bf565b16155b9392505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561321d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613241919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146132a5576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018054911515700100000000000000000000000000000000027fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff909216919091179055565b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600060448301819052917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561338c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133b091906156bf565b90506133bb816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f98274bf834d179ee08dc0604071b0dc90b54731bd5f725a5a96a39a86bce025a8360405161340391815260200190565b60405180910390a250505050565b61341a816144f7565b600154700100000000000000000000000000000000900460ff161561346b576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600160448301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561350c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061353091906156bf565b905061353b816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f9cac51154cc0d835e2f9c9d1f59a9344588cee107f4203bf58a8c797e3a58c458360405161340391815260200190565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613617919061560b565b90506000806136268387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156136c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136e491906156bf565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529195506000917f00000000000000000000000000000000000000000000000000000000000000001690633192195c906024016040805180830381865afa158015613775573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061379991906157c5565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350600092506127109187169063f9a6503090604401602060405180830381865afa158015613837573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061385b91906156bf565b6138659190615707565b9092109794965093945050505050565b34156139b5577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156138e357600080fd5b505af11580156138f7573d6000803e3d6000fd5b50506040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201523460248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16935063a9059cbb925060440190506020604051808303816000875af115801561398f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139b391906157e9565b505b565b6139c084614cb4565b6040517f830aa74500000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f0000000000000000000000000000000000000000000000000000000000000000169063830aa74590608401600060405180830381600087803b158015613a5e57600080fd5b505af1158015613a72573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fa32435755c235de2976ed44a75a2f85cb01faf0c894f639fe0c32bb9455fea8f83604051613ad591815260200190565b60405180910390a350505050565b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301523060248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b158015613b7257600080fd5b505af1158015613b86573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff871692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a28460005b8181101561441d5736888883818110613bea57613bea615806565b9050602002810190613bfc9190615835565b90506004613c0d6020830183615873565b90501015613c47576040517fe2b0e50600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b30613c5560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16141561421c578415613ca9576040517f5fb9107f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613cb86020830183615873565b613cc1916158d8565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167f59781034000000000000000000000000000000000000000000000000000000001415613e3c5760008080613d1e6020860186615873565b613d2c916004908290615920565b810190613d39919061522e565b925092509250613e34838c73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614613e2b576040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015613e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e26919061560b565b613e2d565b8b5b84846139b7565b505050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2b7c7b11000000000000000000000000000000000000000000000000000000001415613ec757600194506000613e996020840184615873565b613ea7916004908290615920565b810190613eb49190615215565b9050613ec1898983613411565b50614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2a7ba1f7000000000000000000000000000000000000000000000000000000001415613f80578415613f49576040517fc0b0caa800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613f586020840184615873565b613f66916004908290615920565b810190613f739190615215565b9050613ec18989836132eb565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f233a8caa0000000000000000000000000000000000000000000000000000000014156140e457600080613fda6020850185615873565b613fe8916004908290615920565b810190613ff5919061594a565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c8116600483015292945090925082918416906370a0823190602401602060405180830381865afa158015614069573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061408d91906156bf565b10156140dd576040517fa5ac537300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016108e7565b5050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fc690908a00000000000000000000000000000000000000000000000000000000141561416457600061413d6020840184615873565b61414b916004908290615920565b81019061415891906151f8565b9050613ec1888261489a565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f23e27a640000000000000000000000000000000000000000000000000000000014156141e45760006141bd6020840184615873565b6141cb916004908290615920565b8101906141d891906151f8565b9050613ec18882614d42565b6040517f1e9e7e7a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50614414565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff68754361426760208501856151f8565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156142d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142f4919061560b565b73ffffffffffffffffffffffffffffffffffffffff16148061436d575073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001661435560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16145b156143a4576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6144126143b46020830183615873565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506143f69250505060208401846151f8565b73ffffffffffffffffffffffffffffffffffffffff1690614e39565b505b50600101613bcf565b506040517f60c8e8938c9a0c0d88a98d6f1c562ce68077e12bf3edb8047378f2f736cb45b490600090a16040517fe1998cf900000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff86811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b1580156144d657600080fd5b505af11580156144ea573d6000803e3d6000fd5b5050505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006139b3576001546fffffffffffffffffffffffffffffffff9081169081146124c257600454608081901c906fffffffffffffffffffffffffffffffff16600067ffffffffffffffff8316431461456e578461458a565b61458a6fffffffffffffffffffffffffffffffff831686615976565b9050838111156145c6576040517f675f1a5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff81164360801b176004555050505050565b6002546fffffffffffffffffffffffffffffffff16811080614631575060025470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681115b156139b3576040517fce16799400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61467061481b565b156146a7576040517f63fc31c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1615614806577f0000000000000000000000000000000000000000000000000000000000000000801561472657503373ffffffffffffffffffffffffffffffffffffffff821614155b1561475d576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600160248301527f00000000000000000000000000000000000000000000000000000000000000001690639dc29fac90604401600060405180830381600087803b1580156147ed57600080fd5b505af1158015614801573d6000803e3d6000fd5b505050505b6139b381614cb4565b60006131ab8383614e7b565b60007f0000000000000000000000000000000000000000000000000000000000000000801561228957505060015471010000000000000000000000000000000000900464ffffffffff1642101590565b606060006131ab83614ea5565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f01565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561492b57600080fd5b505af115801561493f573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527fdf498aa1c340e992665d6fb4f3be8436d452c45a630cb6d7fab7963da39bac8793500190505b60405180910390a15050565b6040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600091829160019183917f00000000000000000000000000000000000000000000000000000000000000001690638991b2f190602401602060405180830381865afa158015614a2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a5391906156bf565b90505b808211614c895780821615614c7d576040517fe75538c700000000000000000000000000000000000000000000000000000000815260048101839052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e75538c7906024016040805180830381865afa158015614af4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b18919061577f565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529294509092506000918416906370a0823190602401602060405180830381865afa158015614b8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bb191906156bf565b90506001811115614c79576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff8481166024830152600091908b169063f9a6503090604401602060405180830381865afa158015614c33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c5791906156bf565b978801979050614c6b61ffff841682615707565b614c759088615976565b9650505b5050505b600182901b9150614a56565b50509250929050565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f50565b3373ffffffffffffffffffffffffffffffffffffffff821614801590614d0b575033600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16155b156139b3576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b158015614dd357600080fd5b505af1158015614de7573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527f69db9e9764da61b6681b89fb0f5be018506e0342036e56b59c3015a620d60977935001905061498d565b60606131ab83836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250615043565b6000826000018281548110614e9257614e92615806565b9060005260206000200154905092915050565b606081600001805480602002602001604051908101604052809291908181526020018280548015614ef557602002820191906000526020600020905b815481526020019060010190808311614ee1575b50505050509050919050565b6000818152600183016020526040812054614f4857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611c5a565b506000611c5a565b60008181526001830160205260408120548015615039576000614f746001836157ae565b8554909150600090614f88906001906157ae565b9050818114614fed576000866000018281548110614fa857614fa8615806565b9060005260206000200154905080876000018481548110614fcb57614fcb615806565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080614ffe57614ffe61598e565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611c5a565b6000915050611c5a565b6060612c65848460008585843b6150b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108e7565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516150df91906159ed565b60006040518083038185875af1925050503d806000811461511c576040519150601f19603f3d011682016040523d82523d6000602084013e615121565b606091505b509150915061513182828661513c565b979650505050505050565b6060831561514b5750816131ab565b82511561515b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e791906159ff565b73ffffffffffffffffffffffffffffffffffffffff811681146139b357600080fd5b80151581146139b357600080fd5b600080604083850312156151d257600080fd5b82356151dd8161518f565b915060208301356151ed816151b1565b809150509250929050565b60006020828403121561520a57600080fd5b81356131ab8161518f565b60006020828403121561522757600080fd5b5035919050565b60008060006060848603121561524357600080fd5b833561524e8161518f565b9250602084013561525e8161518f565b929592945050506040919091013590565b60008083601f84011261528157600080fd5b50813567ffffffffffffffff81111561529957600080fd5b6020830191508360208260051b85010111156152b457600080fd5b9250929050565b60008060008060008060a087890312156152d457600080fd5b86356152df8161518f565b955060208701356152ef8161518f565b9450604087013593506060870135615306816151b1565b9250608087013567ffffffffffffffff81111561532257600080fd5b61532e89828a0161526f565b979a9699509497509295939492505050565b60008060008060006080868803121561535857600080fd5b85356153638161518f565b945060208601359350604086013561537a816151b1565b9250606086013567ffffffffffffffff81111561539657600080fd5b6153a28882890161526f565b969995985093965092949392505050565b80356fffffffffffffffffffffffffffffffff811681146153d357600080fd5b919050565b600080604083850312156153eb57600080fd5b6153f4836153b3565b9150615402602084016153b3565b90509250929050565b61ffff811681146139b357600080fd5b6000806000806080858703121561543157600080fd5b8435935060208501356154438161518f565b925060408501356154538161540b565b915060608501356154638161540b565b939692955090935050565b60008060008060006080868803121561548657600080fd5b8535945060208601356154988161518f565b9350604086013567ffffffffffffffff8111156154b457600080fd5b6154c08882890161526f565b90945092505060608601356154d48161540b565b809150509295509295909350565b6020808252825182820181905260009190848201906040850190845b8181101561553057835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016154fe565b50909695505050505050565b60006020828403121561554e57600080fd5b6131ab826153b3565b6000806020838503121561556a57600080fd5b823567ffffffffffffffff81111561558157600080fd5b61558d8582860161526f565b90969095509350505050565b600080604083850312156155ac57600080fd5b82356155b78161518f565b915060208301356151ed8161518f565b6000602082840312156155d957600080fd5b813564ffffffffff811681146131ab57600080fd5b60006020828403121561560057600080fd5b81356131ab816151b1565b60006020828403121561561d57600080fd5b81516131ab8161518f565b6003811061565f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b73ffffffffffffffffffffffffffffffffffffffff888116825260e082019061568f602084018a615628565b6040830197909752948616606082015292909416608083015260a082015291151560c09092019190915292915050565b6000602082840312156156d157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561573f5761573f6156d8565b500290565b60008261577a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000806040838503121561579257600080fd5b825161579d8161518f565b60208401519092506151ed8161540b565b6000828210156157c0576157c06156d8565b500390565b600080604083850312156157d857600080fd5b505080516020909101519092909150565b6000602082840312156157fb57600080fd5b81516131ab816151b1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc183360301811261586957600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126158a857600080fd5b83018035915067ffffffffffffffff8211156158c357600080fd5b6020019150368190038213156152b457600080fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156159185780818660040360031b1b83161692505b505092915050565b6000808585111561593057600080fd5b8386111561593d57600080fd5b5050820193919092039150565b6000806040838503121561595d57600080fd5b82356159688161518f565b946020939093013593505050565b60008219821115615989576159896156d8565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60005b838110156159d85781810151838201526020016159c0565b838111156159e7576000848401525b50505050565b600082516158698184602087016159bd565b6020815260008251806020840152615a1e8160408501602087016159bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea2646970667358221220a3f4a705ab580a6ada1e438cd2ee4abc001b62d1d171fce12c41994900fef21664736f6c634300080a003360a06040523480156200001157600080fd5b5060405162005f3d38038062005f3d8339810160408190526200003491620012eb565b826001600160a01b031663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000073573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200009991906200147f565b6001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000d7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000fd91906200147f565b6000805460ff191690556001600160a01b0381166200012f57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200016e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200019491906200147f565b6001600160a01b03908116608052600180546001600160a01b031916918616918217905560408051636f307dc360e01b81529051919250636f307dc39160048083019260209291908290030181865afa158015620001f6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200021c91906200147f565b600260006101000a8154816001600160a01b0302191690836001600160a01b03160217905550826001600160a01b031663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000281573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a791906200147f565b6001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200030b91906200147f565b600080546001600160a01b039290921661010002610100600160a81b0319909216919091179055620003626103e860c86200034b6101f4612710620014bc565b60646200035c60c8612710620014bc565b620005e8565b60408101515160005b81811015620003ee576000836040015182815181106200038f576200038f620014e2565b6020026020010151600001519050620003ae81620007c260201b60201c565b620003e48185604001518481518110620003cc57620003cc620014e2565b60200260200101516020015162000a5e60201b60201c565b506001016200036b565b5060015460408051632630c12f60e01b815290516001600160a01b03909216916311ca4fc29186918491632630c12f9160048083019260209291908290030181865afa15801562000443573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200046991906200147f565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401600060405180830381600087803b158015620004b257600080fd5b505af1158015620004c7573d6000803e3d6000fd5b50506040516001600160a01b03861692507fa8b21f72cb83bce808df32dc2330217d744a1c22f3e9e44e4b11bbf049d37d9d9150600090a2600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000553573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200057991906200147f565b6001600160a01b03167f3f82447be465b0b5a4a9e54c74d5f6ae73f2e9537f2cc1590a340524703d096160405160405180910390a26020820151620005cb90620005c5906002620014f8565b62000bda565b81516020830151620005de919062000dc8565b5050505062001604565b6000620005f68585620014bc565b60015460405163172c48c760e01b81526000600482018190529293506001600160a01b039091169063172c48c7906024016040805180830381865afa15801562000644573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200066a91906200152a565b9150508061ffff168261ffff1614620006be57620006888262000f47565b60025460405161ffff841681526001600160a01b039091169060008051602062005f1d8339815191529060200160405180910390a25b60015460405163944ac59f60e01b815261ffff808a166004830152808916602483015280881660448301528087166064830152851660848201526001600160a01b039091169063944ac59f9060a401600060405180830381600087803b1580156200072857600080fd5b505af11580156200073d573d6000803e3d6000fd5b505050507f2214a403d5f8d049e52eacca974c6dea01a471e41d6a18903bfaf7dbc709741f878787612710620007749190620014bc565b876200078388612710620014bc565b6040805161ffff96871681529486166020860152928516848401529084166060840152909216608082015290519081900360a00190a150505050505050565b6001600160a01b038116620007ea57604051635919af9760e11b815260040160405180910390fd5b62000809816001600160a01b03166200116f60201b620023381760201c565b620008365760405163df4c572d60e01b81526001600160a01b038216600482015260240160405180910390fd5b6040516370a0823160e01b81523060048201526001600160a01b038216906370a0823190602401602060405180830381865afa92505050801562000899575060408051601f3d908101601f19168201909252620008969181019062001564565b60015b620008b75760405163528ca31d60e01b815260040160405180910390fd5b50600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200090c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200093291906200147f565b604051630f9a650360e41b8152670de0b6b3a764000060048201526001600160a01b038381166024830152919091169063f9a6503090604401602060405180830381865afa925050508015620009a7575060408051601f3d908101601f19168201909252620009a49181019062001564565b60015b620009c5576040516367a7cd4360e01b815260040160405180910390fd5b5060015460405163d48bfca760e01b81526001600160a01b0383811660048301529091169063d48bfca790602401600060405180830381600087803b15801562000a0e57600080fd5b505af115801562000a23573d6000803e3d6000fd5b50506040516001600160a01b03841692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a250565b6002546001600160a01b038381169116141562000a8e57604051633b899cf960e01b815260040160405180910390fd5b60015460405163172c48c760e01b8152600060048201819052916001600160a01b03169063172c48c7906024016040805180830381865afa15801562000ad8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000afe91906200152a565b91505061ffff8216158062000b1a57508061ffff168261ffff16115b1562000b39576040516333c6608d60e01b815260040160405180910390fd5b600154604051635385e2a160e11b81526001600160a01b03858116600483015261ffff851660248301529091169063a70bc54290604401600060405180830381600087803b15801562000b8b57600080fd5b505af115801562000ba0573d6000803e3d6000fd5b505060405161ffff851681526001600160a01b038616925060008051602062005f1d833981519152915060200160405180910390a2505050565b600062000be662001175565b6001600160a01b031663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801562000c24573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c4a91906200157e565b50509050600062000c606200117560201b60201c565b6001600160a01b031663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa15801562000c9d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000cc39190620015d5565b915050806001600160801b0316836001600160801b0316101562000cfa576040516309aadd6f60e41b815260040160405180910390fd5b826001600160801b0316826001600160801b03161462000dc35762000d1e62001175565b604051632715681560e21b81526001600160801b03851660048201526001600160a01b039190911690639c55a05490602401600060405180830381600087803b15801562000d6b57600080fd5b505af115801562000d80573d6000803e3d6000fd5b50506040516001600160801b03861681527fa030eec20ae970821387224ec3bb15b4bd22b89bfb86dc4d2b3827aa3d99e48d925060200190505b60405180910390a15b505050565b600062000dd462001175565b6001600160a01b031663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801562000e12573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e3891906200157e565b50509050816001600160801b0316836001600160801b0316118062000e6e5750806001600160801b0316826001600160801b0316115b1562000e8d576040516309aadd6f60e41b815260040160405180910390fd5b62000e9762001175565b60405163300eb37b60e11b81526001600160801b038086166004830152841660248201526001600160a01b03919091169063601d66f690604401600060405180830381600087803b15801562000eec57600080fd5b505af115801562000f01573d6000803e3d6000fd5b5050604080516001600160801b038088168252861660208201527f4d4981437d0211f9e6843eb024d9ada1fa3a99514d4343d4aece106dd11524bb935001905062000dba565b600154600254604051635385e2a160e11b81526001600160a01b03918216600482015261ffff8416602482015291169063a70bc54290604401600060405180830381600087803b15801562000f9b57600080fd5b505af115801562000fb0573d6000803e3d6000fd5b505050506000600160009054906101000a90046001600160a01b03166001600160a01b031663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200100a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001030919062001564565b905060015b8181101562000dc35760015460405163172c48c760e01b81526004810183905260009182916001600160a01b039091169063172c48c7906024016040805180830381865afa1580156200108c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010b291906200152a565b915091508461ffff168161ffff1611156200116457600154604051635385e2a160e11b81526001600160a01b03848116600483015261ffff881660248301529091169063a70bc54290604401600060405180830381600087803b1580156200111957600080fd5b505af11580156200112e573d6000803e3d6000fd5b505060405161ffff881681526001600160a01b038516925060008051602062005f1d833981519152915060200160405180910390a25b505060010162001035565b3b151590565b60015460408051632f7a188160e01b815290516000926001600160a01b031691632f7a18819160048083019260209291908290030181865afa158015620011c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011e691906200147f565b905090565b6001600160a01b03811681146200120157600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b03811182821017156200123f576200123f62001204565b60405290565b604080519081016001600160401b03811182821017156200123f576200123f62001204565b604051601f8201601f191681016001600160401b038111828210171562001295576200129562001204565b604052919050565b80516001600160801b0381168114620012b557600080fd5b919050565b8051620012b581620011eb565b805161ffff81168114620012b557600080fd5b80518015158114620012b557600080fd5b6000806000606084860312156200130157600080fd5b83516200130e81620011eb565b809350506020808501516200132381620011eb565b604086810151919450906001600160401b03808211156200134357600080fd5b9087019060a0828a0312156200135857600080fd5b620013626200121a565b6200136d836200129d565b81526200137c8584016200129d565b8582015283830151828111156200139257600080fd5b8301601f81018b13620013a457600080fd5b805183811115620013b957620013b962001204565b620013c9878260051b016200126a565b818152878101945060069190911b82018701908c821115620013ea57600080fd5b918701915b81831015620014435786838e031215620014095760008081fd5b6200141362001245565b83516200142081620011eb565b81526200142f848a01620012c7565b818a015285529387019391860191620013ef565b838701525062001458905060608401620012ba565b60608201526200146b60808401620012da565b608082015280955050505050509250925092565b6000602082840312156200149257600080fd5b81516200149f81620011eb565b9392505050565b634e487b7160e01b600052601160045260246000fd5b600061ffff83811690831681811015620014da57620014da620014a6565b039392505050565b634e487b7160e01b600052603260045260246000fd5b60006001600160801b0382811684821681151582840482111615620015215762001521620014a6565b02949350505050565b600080604083850312156200153e57600080fd5b82516200154b81620011eb565b91506200155b60208401620012c7565b90509250929050565b6000602082840312156200157757600080fd5b5051919050565b6000806000606084860312156200159457600080fd5b6200159f846200129d565b9250620015af60208501620012da565b9150604084015164ffffffffff81168114620015ca57600080fd5b809150509250925092565b60008060408385031215620015e957600080fd5b620015f4836200129d565b91506200155b602084016200129d565b608051614878620016a56000396000818161033601528181610446015281816107c5015281816108c0015281816109ae01528181610b8301528181610f0a015281816113e1015281816114cf015281816115bb015281816116ab015281816117990152818161187d01528181611ad901528181611bc601528181611cb301528181611da0015281816120090152818161218c015261227901526148786000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80638456cb59116100f9578063dc2b21c111610097578063f0527ac611610071578063f0527ac6146103d7578063f206d32a146103df578063fb1bd8c4146103f2578063ffd9b9071461040557600080fd5b8063dc2b21c11461039e578063e6492d7b146103b1578063eb9606df146103c457600080fd5b8063a50cf2c8116100d3578063a50cf2c814610331578063a70bc54214610358578063b53472ef1461036b578063c12c21c01461037e57600080fd5b80638456cb59146103035780639c55a0541461030b5780639f1c50691461031e57600080fd5b806350e036ff1161016657806354fd4d501161014057806354fd4d50146102b25780635c975abb146102ba5780636f307dc3146102d05780637bccacee146102f057600080fd5b806350e036ff1461027657806352438e541461028c578063526a41e81461029f57600080fd5b80633e7c88d6116101a25780633e7c88d6146102355780633f4ba83a14610248578063456e0742146102505780635094cb4f1461026357600080fd5b806324147708146101c95780632954018c146101de5780632f7a18811461022d575b600080fd5b6101dc6101d7366004614307565b610418565b005b60005461020390610100900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6102036106fe565b6101dc610243366004614334565b610797565b6101dc610892565b6101dc61025e366004614307565b610980565b61020361027136600461436d565b610b36565b61027e610b49565b604051908152602001610224565b6101dc61029a366004614307565b610b55565b6101dc6102ad366004614394565b610edc565b61027e600281565b60005460ff166040519015158152602001610224565b6002546102039073ffffffffffffffffffffffffffffffffffffffff1681565b6101dc6102fe3660046143c2565b6113b3565b6101dc6114a1565b6101dc61031936600461440e565b61158d565b6101dc61032c36600461442b565b61167d565b6102037f000000000000000000000000000000000000000000000000000000000000000081565b6101dc610366366004614334565b61176b565b6101dc610379366004614307565b61184f565b6001546102039073ffffffffffffffffffffffffffffffffffffffff1681565b6101dc6103ac366004614459565b611aab565b6101dc6103bf366004614307565b611b98565b6101dc6103d236600461448f565b611c85565b6101dc611d72565b6101dc6103ed3660046144ac565b611fdb565b6101dc610400366004614307565b61215e565b6101dc61041336600461451d565b61224b565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156104a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c6919061453a565b6104fc576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006105078261233e565b90506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015610578573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059c9190614557565b90508181166106f9576001546040517fa366f496000000000000000000000000000000000000000000000000000000008152918317600483018190529173ffffffffffffffffffffffffffffffffffffffff9091169063a366f49690602401600060405180830381600087803b15801561061557600080fd5b505af1158015610629573d6000803e3d6000fd5b505050506106356106fe565b6040517fffd9b9070000000000000000000000000000000000000000000000000000000081526001600482015273ffffffffffffffffffffffffffffffffffffffff919091169063ffd9b90790602401600060405180830381600087803b15801561069f57600080fd5b505af11580156106b3573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692507ff17b849746e74d7186170c9553d4bbf60b4f8bb1ed81fe50c099b934fb078f059150600090a25b505050565b600154604080517f2f7a1881000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691632f7a18819160048083019260209291908290030181865afa15801561076e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610792919061457b565b905090565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610821573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610845919061453a565b61087b576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108848261241e565b61088e82826127f8565b5050565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa15801561091c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610940919061453a565b610976576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61097e612a15565b565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610a0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2e919061453a565b610a64576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a6d81612af6565b6001546040517f9f5f86ae00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015290911690639f5f86ae90602401600060405180830381600087803b158015610ada57600080fd5b505af1158015610aee573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507f5a0b7d0f9c24b39256e112a0584b4c5ce38d8f1dee2e7c56f15b852604cdc8869150600090a250565b6000610b43600383612cb8565b92915050565b60006107926003612ccb565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610bdf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c03919061453a565b610c39576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610c86576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063fdd5764590602401602060405180830381865afa158015610cf7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1b919061457b565b905073ffffffffffffffffffffffffffffffffffffffff8116610d6a576040517f1170cc2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f6e98e5e400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526000602483015290911690636e98e5e490604401600060405180830381600087803b158015610dde57600080fd5b505af1158015610df2573d6000803e3d6000fd5b50506001546040517f6e98e5e40000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff86811660248301529091169250636e98e5e49150604401600060405180830381600087803b158015610e6a57600080fd5b505af1158015610e7e573d6000803e3d6000fd5b50505050610e96826003612cd590919063ffffffff16565b5060405173ffffffffffffffffffffffffffffffffffffffff8316907fab9f405bf0c19b97f65a7031634db41569cd2f0e0376a610a1e977f9ab22b58f90600090a25050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610f66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8a919061453a565b610fc0576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fc982612af6565b6000806000610fd66106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015611020573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110449190614598565b9250925092506000806110556106fe565b73ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa15801561109e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c291906145e5565b9150915060006110d06106fe565b73ffffffffffffffffffffffffffffffffffffffff16639be0536a6040518163ffffffff1660e01b8152600401600060405180830381865afa15801561111a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526111609190810190614643565b9050600061116c6106fe565b73ffffffffffffffffffffffffffffffffffffffff1663b1836d326040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111da919061453a565b600154604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905192935073ffffffffffffffffffffffffffffffffffffffff909116916311ca4fc2918c918491632630c12f9160048083019260209291908290030181865afa158015611256573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061127a919061457b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156112e757600080fd5b505af11580156112fb573d6000803e3d6000fd5b5050505087156113675761130e87612cf7565b6113188484612f5d565b61132186613152565b60005b82518110156113575761134f83828151811061134257611342614726565b60200260200101516132a3565b600101611324565b50801561136757611367856133c9565b60405173ffffffffffffffffffffffffffffffffffffffff8a16907fa8b21f72cb83bce808df32dc2330217d744a1c22f3e9e44e4b11bbf049d37d9d90600090a2505050505050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561143d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611461919061453a565b611497576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61088e828261357b565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561152b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061154f919061453a565b611585576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61097e6139c3565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611617573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163b919061453a565b611671576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81612cf7565b50565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611707573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172b919061453a565b611761576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61088e8282612f5d565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156117f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611819919061453a565b610884576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156118d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fd919061453a565b611933576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061193e8261233e565b90506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d39190614557565b9050818116156106f9576001546040517fa366f496000000000000000000000000000000000000000000000000000000008152918318600483018190529173ffffffffffffffffffffffffffffffffffffffff9091169063a366f49690602401600060405180830381600087803b158015611a4d57600080fd5b505af1158015611a61573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a2505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611b35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b59919061453a565b611b8f576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81613a83565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611c22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c46919061453a565b611c7c576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81613b3d565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611d0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d33919061453a565b611d69576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a816133c9565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611dfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e20919061453a565b611e56576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ec4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee8919061457b565b60015490915073ffffffffffffffffffffffffffffffffffffffff166311ca4fc2611f116106fe565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff91821660048201529084166024820152604401600060405180830381600087803b158015611f7f57600080fd5b505af1158015611f93573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507f3f82447be465b0b5a4a9e54c74d5f6ae73f2e9537f2cc1590a340524703d09619150600090a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015612065573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612089919061453a565b6120bf576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61271061ffff86161015806120e357506127106120dc8585614784565b61ffff1610155b806120fd57506127106120f68383614784565b61ffff1610155b15612134576040517f0b361d6900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6121578585612145866127106147aa565b85612152866127106147aa565b613c5c565b5050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156121e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061220c919061453a565b612242576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a816132a3565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156122d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122f9919061453a565b61232f576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81613152565b3b151590565b6001546040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063f67c5bd090602401602060405180830381865afa1580156123af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123d39190614557565b90508015806123e25750806001145b15612419576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b73ffffffffffffffffffffffffffffffffffffffff811661246b576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163b6124d6576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024015b60405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8216906370a0823190602401602060405180830381865afa92505050801561257a575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261257791810190614557565b60015b6125b0576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561261e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612642919061457b565b6040517ff9a65030000000000000000000000000000000000000000000000000000000008152670de0b6b3a7640000600482015273ffffffffffffffffffffffffffffffffffffffff8381166024830152919091169063f9a6503090604401602060405180830381865afa9250505080156126f8575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526126f591810190614557565b60015b61272e576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506001546040517fd48bfca700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301529091169063d48bfca790602401600060405180830381600087803b15801561279c57600080fd5b505af11580156127b0573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a250565b60025473ffffffffffffffffffffffffffffffffffffffff8381169116141561284d576040517f3b899cf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f172c48c70000000000000000000000000000000000000000000000000000000081526000600482018190529173ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa1580156128bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128e091906147cd565b91505061ffff821615806128fb57508061ffff168261ffff16115b15612932576040517f33c6608d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015261ffff851660248301529091169063a70bc54290604401600060405180830381600087803b1580156129a957600080fd5b505af11580156129bd573d6000803e3d6000fd5b505060405161ffff8516815273ffffffffffffffffffffffffffffffffffffffff861692507f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650915060200160405180910390a2505050565b60005460ff16612a81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016124cd565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b73ffffffffffffffffffffffffffffffffffffffff8116612b43576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163b612ba9576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024016124cd565b8073ffffffffffffffffffffffffffffffffffffffff1663c12c21c06040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612c2e575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252612c2b9181019061457b565b60015b612c64576040517fe9eddd1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60015473ffffffffffffffffffffffffffffffffffffffff82811691161461088e576040517fe9eddd1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612cc48383613e92565b9392505050565b6000610b43825490565b6000612cc48373ffffffffffffffffffffffffffffffffffffffff8416613ebc565b6000612d016106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015612d4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d6f9190614598565b505090506000612d7d6106fe565b73ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa158015612dc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dea91906145e5565b915050806fffffffffffffffffffffffffffffffff16836fffffffffffffffffffffffffffffffff161015612e4b576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826fffffffffffffffffffffffffffffffff16826fffffffffffffffffffffffffffffffff16146106f957612e7e6106fe565b6040517f9c55a0540000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff8516600482015273ffffffffffffffffffffffffffffffffffffffff9190911690639c55a05490602401600060405180830381600087803b158015612ef957600080fd5b505af1158015612f0d573d6000803e3d6000fd5b50506040516fffffffffffffffffffffffffffffffff861681527fa030eec20ae970821387224ec3bb15b4bd22b89bfb86dc4d2b3827aa3d99e48d925060200190505b60405180910390a1505050565b6000612f676106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015612fb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fd59190614598565b50509050816fffffffffffffffffffffffffffffffff16836fffffffffffffffffffffffffffffffff16118061302e5750806fffffffffffffffffffffffffffffffff16826fffffffffffffffffffffffffffffffff16115b15613065576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61306d6106fe565b6040517f601d66f60000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff80861660048301528416602482015273ffffffffffffffffffffffffffffffffffffffff919091169063601d66f690604401600060405180830381600087803b1580156130f057600080fd5b505af1158015613104573d6000803e3d6000fd5b5050604080516fffffffffffffffffffffffffffffffff8088168252861660208201527f4d4981437d0211f9e6843eb024d9ada1fa3a99514d4343d4aece106dd11524bb9350019050612f50565b600061315c6106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa1580156131a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131ca9190614598565b509150508015158215151461088e576131e16106fe565b6040517fffd9b907000000000000000000000000000000000000000000000000000000008152831515600482015273ffffffffffffffffffffffffffffffffffffffff919091169063ffd9b90790602401600060405180830381600087803b15801561324c57600080fd5b505af1158015613260573d6000803e3d6000fd5b505050507ff97ba903470ff3262b4a68a938fe81def401bac1bd742169d2e8d5c4ed2185d382604051613297911515815260200190565b60405180910390a15050565b73ffffffffffffffffffffffffffffffffffffffff81166132f0576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6132f86106fe565b6040517fb55bb84b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152919091169063b55bb84b90602401600060405180830381600087803b15801561336357600080fd5b505af1158015613377573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841681527fdac9a7995cbc0c0f01d78970fb6fd0b52fe0fe869eb6635e65cc1b5682b8325c925060200190505b60405180910390a150565b60006133d36106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801561341d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134419190614598565b925050508064ffffffffff168264ffffffffff161461088e578164ffffffffff168164ffffffffff16118061347c57508164ffffffffff1642115b156134b3576040517fe4eaca7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134bb6106fe565b6040517feb9606df00000000000000000000000000000000000000000000000000000000815264ffffffffff8416600482015273ffffffffffffffffffffffffffffffffffffffff919091169063eb9606df90602401600060405180830381600087803b15801561352b57600080fd5b505af115801561353f573d6000803e3d6000fd5b505060405164ffffffffff851681527f0b3eb35ba750e7a7e4d26c9eee3d226f4e1f68c5568f4a3d051c94b241b02ac092506020019050613297565b73ffffffffffffffffffffffffffffffffffffffff82166135c8576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82163b61362e576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016124cd565b61363781612af6565b60015473ffffffffffffffffffffffffffffffffffffffff8381169116148061369257506136636106fe565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b806136b7575060015473ffffffffffffffffffffffffffffffffffffffff8281169116145b806136f457506136c56106fe565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b1561372b576040517f727de5c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517fff68754300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063ff68754390602401602060405180830381865afa15801561379c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137c0919061457b565b73ffffffffffffffffffffffffffffffffffffffff1614158061388c57506001546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063fdd5764590602401602060405180830381865afa15801561384f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613873919061457b565b73ffffffffffffffffffffffffffffffffffffffff1614155b156138c3576040517f21ff1e7100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f6e98e5e400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152848116602483015290911690636e98e5e490604401600060405180830381600087803b15801561393857600080fd5b505af115801561394c573d6000803e3d6000fd5b50505050613964826003613faf90919063ffffffff16565b508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4bcbefaef68b99503d502f5a6abe7bca2b183ab8ac55457013c77d084ebd130560405160405180910390a35050565b60005460ff1615613a30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016124cd565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612acc3390565b6001546040517fdc2b21c100000000000000000000000000000000000000000000000000000000815260ff8316600482015273ffffffffffffffffffffffffffffffffffffffff9091169063dc2b21c190602401600060405180830381600087803b158015613af157600080fd5b505af1158015613b05573d6000803e3d6000fd5b505060405160ff841681527f73caacd705657a7d283e48ecf288b73bc517e3aea1bbc9da2fd54a979e8aa950925060200190506133be565b73ffffffffffffffffffffffffffffffffffffffff8116613b8a576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613b926106fe565b6040517fdcf6548200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152919091169063dcf6548290602401600060405180830381600087803b158015613bfd57600080fd5b505af1158015613c11573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841681527f32e53e2e527af8518ae889e5f7e674bc83f7cf68e4cc059aceeaa0e64208b85b925060200190506133be565b6000613c6885856147aa565b6001546040517f172c48c700000000000000000000000000000000000000000000000000000000815260006004820181905292935073ffffffffffffffffffffffffffffffffffffffff9091169063172c48c7906024016040805180830381865afa158015613cdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cff91906147cd565b9150508061ffff168261ffff1614613d6e57613d1a82613fd1565b60025460405161ffff8416815273ffffffffffffffffffffffffffffffffffffffff909116907f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac6509060200160405180910390a25b6001546040517f944ac59f00000000000000000000000000000000000000000000000000000000815261ffff808a1660048301528089166024830152808816604483015280871660648301528516608482015273ffffffffffffffffffffffffffffffffffffffff9091169063944ac59f9060a401600060405180830381600087803b158015613dfd57600080fd5b505af1158015613e11573d6000803e3d6000fd5b505050507f2214a403d5f8d049e52eacca974c6dea01a471e41d6a18903bfaf7dbc709741f878787612710613e4691906147aa565b87613e53886127106147aa565b6040805161ffff96871681529486166020860152928516848401529084166060840152909216608082015290519081900360a00190a150505050505050565b6000826000018281548110613ea957613ea9614726565b9060005260206000200154905092915050565b60008181526001830160205260408120548015613fa5576000613ee06001836147fc565b8554909150600090613ef4906001906147fc565b9050818114613f59576000866000018281548110613f1457613f14614726565b9060005260206000200154905080876000018481548110613f3757613f37614726565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080613f6a57613f6a614813565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610b43565b6000915050610b43565b6000612cc48373ffffffffffffffffffffffffffffffffffffffff8416614296565b6001546002546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015261ffff8416602482015291169063a70bc54290604401600060405180830381600087803b15801561404a57600080fd5b505af115801561405e573d6000803e3d6000fd5b505050506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156140d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140f59190614557565b905060015b818110156106f9576001546040517f172c48c700000000000000000000000000000000000000000000000000000000815260048101839052600091829173ffffffffffffffffffffffffffffffffffffffff9091169063172c48c7906024016040805180830381865afa158015614175573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061419991906147cd565b915091508461ffff168161ffff16111561428c576001546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015261ffff881660248301529091169063a70bc54290604401600060405180830381600087803b15801561422457600080fd5b505af1158015614238573d6000803e3d6000fd5b505060405161ffff8816815273ffffffffffffffffffffffffffffffffffffffff851692507f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650915060200160405180910390a25b50506001016140fa565b60008181526001830160205260408120546142dd57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610b43565b506000610b43565b73ffffffffffffffffffffffffffffffffffffffff8116811461167a57600080fd5b60006020828403121561431957600080fd5b8135612cc4816142e5565b61ffff8116811461167a57600080fd5b6000806040838503121561434757600080fd5b8235614352816142e5565b9150602083013561436281614324565b809150509250929050565b60006020828403121561437f57600080fd5b5035919050565b801515811461167a57600080fd5b600080604083850312156143a757600080fd5b82356143b2816142e5565b9150602083013561436281614386565b600080604083850312156143d557600080fd5b82356143e0816142e5565b91506020830135614362816142e5565b6fffffffffffffffffffffffffffffffff8116811461167a57600080fd5b60006020828403121561442057600080fd5b8135612cc4816143f0565b6000806040838503121561443e57600080fd5b8235614449816143f0565b91506020830135614362816143f0565b60006020828403121561446b57600080fd5b813560ff81168114612cc457600080fd5b64ffffffffff8116811461167a57600080fd5b6000602082840312156144a157600080fd5b8135612cc48161447c565b600080600080600060a086880312156144c457600080fd5b85356144cf81614324565b945060208601356144df81614324565b935060408601356144ef81614324565b925060608601356144ff81614324565b9150608086013561450f81614324565b809150509295509295909350565b60006020828403121561452f57600080fd5b8135612cc481614386565b60006020828403121561454c57600080fd5b8151612cc481614386565b60006020828403121561456957600080fd5b5051919050565b8051612419816142e5565b60006020828403121561458d57600080fd5b8151612cc4816142e5565b6000806000606084860312156145ad57600080fd5b83516145b8816143f0565b60208501519093506145c981614386565b60408501519092506145da8161447c565b809150509250925092565b600080604083850312156145f857600080fd5b8251614603816143f0565b6020840151909250614362816143f0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000602080838503121561465657600080fd5b825167ffffffffffffffff8082111561466e57600080fd5b818501915085601f83011261468257600080fd5b81518181111561469457614694614614565b8060051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f830116810181811085821117156146d7576146d7614614565b6040529182528482019250838101850191888311156146f557600080fd5b938501935b8285101561471a5761470b85614570565b845293850193928501926146fa565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061ffff8083168185168083038211156147a1576147a1614755565b01949350505050565b600061ffff838116908316818110156147c5576147c5614755565b039392505050565b600080604083850312156147e057600080fd5b82516147eb816142e5565b602084015190925061436281614324565b60008282101561480e5761480e614755565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea264697066735822122046c364b67d38a3dd85b57e027716324d90dd1df102f265f0a0e2697babdb3f3b64736f6c634300080a003394525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650608060405234801561001057600080fd5b5061029a806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80634e417a981461003a575b610037600080366100e6565b50005b610042610058565b60405161004f919061019d565b60405180910390f35b6000805461006590610210565b80601f016020809104026020016040519081016040528092919081815260200182805461009190610210565b80156100de5780601f106100b3576101008083540402835291602001916100de565b820191906000526020600020905b8154815290600101906020018083116100c157829003601f168201915b505050505081565b8280546100f290610210565b90600052602060002090601f0160209004810192826101145760008555610178565b82601f1061014b578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00823516178555610178565b82800160010185558215610178579182015b8281111561017857823582559160200191906001019061015d565b50610184929150610188565b5090565b5b808211156101845760008155600101610189565b600060208083528351808285015260005b818110156101ca578581018301518582016040015282016101ae565b818111156101dc576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b600181811c9082168061022457607f821691505b6020821081141561025e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b5091905056fea2646970667358221220ce4d98ff6e78d6e572ead23f5f0316947ad3d447e60e1efdfc3a1485144c317a64736f6c634300080a003360e06040523480156200001157600080fd5b50604051620018e8380380620018e883398101604081905262000034916200011d565b81816001600160a01b03821615806200005457506001600160a01b038116155b156200007357604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038216608081905260408051632f7a188160e01b81529051632f7a1881916004808201926020929091908290030181865afa158015620000be573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e4919062000155565b6001600160a01b0390811660a0521660c052506200017a915050565b80516001600160a01b03811681146200011857600080fd5b919050565b600080604083850312156200013157600080fd5b6200013c8362000100565b91506200014c6020840162000100565b90509250929050565b6000602082840312156200016857600080fd5b620001738262000100565b9392505050565b60805160a05160c05161169062000258600039600081816102990152818161038c0152818161071c0152818161083b0152818161091501528181610d1901528181610e380152610f120152600081816101f7015281816104390152818161058701528181610b840152610f9001526000818160fa015281816102c00152818161035d015281816104a3015281816107720152818161080c0152818161096b01528181610a2c01528181610af001528181610d6f01528181610e0901528181610f4901528181611018015281816110cc015261117601526116906000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c8063b73c1cfc11610081578063cd685c2c1161005b578063cd685c2c146102e2578063ce30bbdb146102f5578063d190b78d1461030a576100c9565b8063b73c1cfc14610281578063bd90df7014610294578063c12c21c0146102bb576100c9565b806333a9edaf116100b257806333a9edaf1461023e5780633ccb153e1461025357806378aa73a414610266576100c9565b806309c5eabe146101c95780632f7a1881146101f2575b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610156573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061017a91906111fd565b90506101bc6000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061031d92505050565b506101c681610421565b50005b6101dc6101d736600461133b565b610503565b6040516101e991906113f2565b60405180910390f35b6102197f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e9565b61025161024c366004611405565b61050e565b005b6101dc610261366004611437565b610517565b61026e600181565b60405161ffff90911681526020016101e9565b6101dc61028f3660046114cc565b610532565b6102197f000000000000000000000000000000000000000000000000000000000000000081565b6102197f000000000000000000000000000000000000000000000000000000000000000081565b6101dc6102f03660046114cc565b61054b565b6102fd600081565b6040516101e99190611550565b6101dc610318366004611437565b61055a565b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815260609073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a906103b69033907f0000000000000000000000000000000000000000000000000000000000000000908790600401611591565b6000604051808303816000875af11580156103d5573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261041b91908101906115d3565b92915050565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610500576040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b1580156104e757600080fd5b505af11580156104fb573d6000803e3d6000fd5b505050505b50565b606061041b8261031d565b61050081610421565b606061052787878787878761056a565b979650505050505050565b606061054186868686866109e3565b9695505050505050565b60606105418686868686610aa7565b6060610527878787878787610b67565b60606000803373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146106d3576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301528916906370a0823190602401602060405180830381865afa158015610618573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061063c9190611641565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152919350908816906370a0823190602401602060405180830381865afa1580156106ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d09190611641565b90505b84156107cf576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156107b657600080fd5b505af11580156107ca573d6000803e3d6000fd5b505050505b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a906108659033907f0000000000000000000000000000000000000000000000000000000000000000908b90600401611591565b6000604051808303816000875af1158015610884573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108ca91908101906115d3565b925084156109c9576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d906084015b600060405180830381600087803b1580156109b057600080fd5b505af11580156109c4573d6000803e3d6000fd5b505050505b6109d7898989858589610f78565b50509695505050505050565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015260609060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015610a73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a9791906111fd565b905061052781888888888861056a565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015260609060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015610b37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5b91906111fd565b90506105278188888888885b60606000803373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610cd0576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301528916906370a0823190602401602060405180830381865afa158015610c15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c399190611641565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152919350908816906370a0823190602401602060405180830381865afa158015610ca9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ccd9190611641565b90505b8415610dcc576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015610db357600080fd5b505af1158015610dc7573d6000803e3d6000fd5b505050505b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a90610e629033907f0000000000000000000000000000000000000000000000000000000000000000908b90600401611591565b6000604051808303816000875af1158015610e81573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610ec791908101906115d3565b925084156109c9576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301528981166044830152600160648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401610996565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614611079576040517f654a9eda00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528681166024830152858116604483015260648201859052608482018490527f0000000000000000000000000000000000000000000000000000000000000000169063654a9eda9060a401600060405180830381600087803b15801561105c57600080fd5b505af1158015611070573d6000803e3d6000fd5b505050506111d3565b8015611129576040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015286811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b15801561111057600080fd5b505af1158015611124573d6000803e3d6000fd5b505050505b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015285811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156111ba57600080fd5b505af11580156111ce573d6000803e3d6000fd5b505050505b505050505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461050057600080fd5b60006020828403121561120f57600080fd5b815161121a816111db565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561129757611297611221565b604052919050565b600067ffffffffffffffff8211156112b9576112b9611221565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f8301126112f657600080fd5b81356113096113048261129f565b611250565b81815284602083860101111561131e57600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121561134d57600080fd5b813567ffffffffffffffff81111561136457600080fd5b611370848285016112e5565b949350505050565b60005b8381101561139357818101518382015260200161137b565b838111156113a2576000848401525b50505050565b600081518084526113c0816020860160208601611378565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061121a60208301846113a8565b60006020828403121561141757600080fd5b813561121a816111db565b8035801515811461143257600080fd5b919050565b60008060008060008060c0878903121561145057600080fd5b863561145b816111db565b9550602087013561146b816111db565b9450604087013561147b816111db565b9350606087013567ffffffffffffffff81111561149757600080fd5b6114a389828a016112e5565b9350506114b260808801611422565b91506114c060a08801611422565b90509295509295509295565b600080600080600060a086880312156114e457600080fd5b85356114ef816111db565b945060208601356114ff816111db565b9350604086013567ffffffffffffffff81111561151b57600080fd5b611527888289016112e5565b93505061153660608701611422565b915061154460808701611422565b90509295509295909350565b602081016011831061158b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b600073ffffffffffffffffffffffffffffffffffffffff8086168352808516602084015250606060408301526115ca60608301846113a8565b95945050505050565b6000602082840312156115e557600080fd5b815167ffffffffffffffff8111156115fc57600080fd5b8201601f8101841361160d57600080fd5b805161161b6113048261129f565b81815285602083850101111561163057600080fd5b6115ca826020830160208601611378565b60006020828403121561165357600080fd5b505191905056fea264697066735822122018e43ffef2f9cc2414c0800d27162ab8481b522ae2a3529b201f7632a0fcba6764736f6c634300080a00336101406040523480156200001257600080fd5b5060405162005e9738038062005e97833981016040819052620000359162000198565b60016000556001600160a01b0383166200006257604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038316608081905260408051636f307dc360e01b81529051636f307dc3916004808201926020929091908290030181865afa158015620000ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d39190620001ea565b6001600160a01b031660a0816001600160a01b031681525050826001600160a01b0316634f0e0ef36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200012b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001519190620001ea565b6001600160a01b0390811660c0529190911660e0819052151561010052151561012052506200020f565b80516001600160a01b03811681146200019357600080fd5b919050565b600080600060608486031215620001ae57600080fd5b620001b9846200017b565b9250620001c9602085016200017b565b915060408401518015158114620001df57600080fd5b809150509250925092565b600060208284031215620001fd57600080fd5b62000208826200017b565b9392505050565b60805160a05160c05160e0516101005161012051615a86620004116000396000818161061101528181612fb5015261481f01526000818161031701528181610dde015281816144f901526146e5015260008181610557015281816146a901526147a901526000818161034b0152818161387d015261392d01526000818161047301528181611bfe0152818161274f0152818161280d0152818161366a01526137dd015260008181610665015281816109d801528181610b0301528181610bd501528181610cdd01528181610e6501528181610fe30152818161114e0152818161120e0152818161132e015281816114510152818161162b01528181611708015281816117e0015281816119e501528181611b1201528181611d9501528181611ed5015281816120040152818161216801528181612290015281816123c601528181612568015281816126390152818161266f0152818161293d01528181612a2101528181612a8a01528181612bde01528181612d2601528181612e6801528181612ec2015281816130a10152818161311b015281816131b401528181613341015281816134c10152818161358a0152818161372f01528181613a1a01528181613b2e01528181613dbb015281816142200152818161432801528181614492015281816148e7015281816149e801528181614aae0152614d8f0152615a866000f3fe6080604052600436106102695760003560e01c8063860aefcf11610153578063c7de38a6116100cb578063dfd594651161007f578063eb9606df11610064578063eb9606df1461081e578063f9eaee0d1461083e578063ffd9b9071461085e57600080fd5b8063dfd59465146107de578063e1f21c67146107fe57600080fd5b8063cff0ab96116100b0578063cff0ab96146106ef578063d9ccbec114610783578063dcf65482146107be57600080fd5b8063c7de38a6146106a7578063caa5c23f146106dc57600080fd5b80639c55a05411610122578063b55bb84b11610107578063b55bb84b14610633578063c12c21c014610653578063c690908a1461068757600080fd5b80639c55a054146105df578063b1836d32146105ff57600080fd5b8063860aefcf146104db5780639408b63f146105455780639b67ab30146105795780639be0536a146105bd57600080fd5b80635d91a0e0116101e65780636d19b486116101b55780637071b7c51161019a5780637071b7c51461049557806379c0ef91146104a857806382871ace146104c857600080fd5b80636d19b486146104415780636f307dc31461046157600080fd5b80635d91a0e0146103e85780635f73fbec146103fb578063601d66f61461040e5780636c8f225d1461042e57600080fd5b80633d9287fa1161023d5780635019e20a116102225780635019e20a1461039257806354fd4d50146103b257806359781034146103d557600080fd5b80633d9287fa146103055780634f0e0ef31461033957600080fd5b8062842b571461026e578063256ac915146102905780632a7ba1f7146102c55780632b7c7b11146102e5575b600080fd5b34801561027a57600080fd5b5061028e6102893660046151bf565b61087e565b005b34801561029c57600080fd5b506102b06102ab3660046151f8565b61098e565b60405190151581526020015b60405180910390f35b3480156102d157600080fd5b5061028e6102e0366004615215565b610a61565b3480156102f157600080fd5b5061028e610300366004615215565b610c3b565b34801561031157600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561034557600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102bc565b34801561039e57600080fd5b5061028e6103ad3660046151f8565b610d6a565b3480156103be57600080fd5b506103c7600281565b6040519081526020016102bc565b61028e6103e336600461522e565b61108c565b61028e6103f63660046152bb565b611275565b61028e610409366004615340565b611589565b34801561041a57600080fd5b5061028e6104293660046153d8565b6117de565b61028e61043c36600461541b565b611900565b34801561044d57600080fd5b506102b061045c3660046151f8565b611c31565b34801561046d57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b61028e6104a336600461546e565b611c60565b3480156104b457600080fd5b5061036d6104c3366004615215565b611f3e565b61028e6104d63660046152bb565b611f4b565b3480156104e757600080fd5b5060025461051c906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041682565b604080516fffffffffffffffffffffffffffffffff9384168152929091166020830152016102bc565b34801561055157600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561058557600080fd5b506004546040805167ffffffffffffffff608084901c1681526fffffffffffffffffffffffffffffffff9092166020830152016102bc565b3480156105c957600080fd5b506105d261227d565b6040516102bc91906154e2565b3480156105eb57600080fd5b5061028e6105fa36600461553c565b61228e565b34801561060b57600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561063f57600080fd5b5061028e61064e3660046151f8565b6123c4565b34801561065f57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561069357600080fd5b5061028e6106a23660046151f8565b6124c6565b3480156106b357600080fd5b506106c76106c23660046151f8565b612668565b604080519283526020830191909152016102bc565b61028e6106ea366004615557565b61289b565b3480156106fb57600080fd5b5060015461074e906fffffffffffffffffffffffffffffffff811690700100000000000000000000000000000000810460ff169071010000000000000000000000000000000000900464ffffffffff1683565b604080516fffffffffffffffffffffffffffffffff9094168452911515602084015264ffffffffff16908201526060016102bc565b34801561078f57600080fd5b506102b061079e366004615599565b600360209081526000928352604080842090915290825290205460ff1681565b3480156107ca57600080fd5b5061028e6107d93660046151f8565b612a88565b3480156107ea57600080fd5b506103c76107f93660046151f8565b612b86565b34801561080a57600080fd5b5061028e61081936600461522e565b612c6d565b34801561082a57600080fd5b5061028e6108393660046155c7565b612ec0565b34801561084a57600080fd5b506102b06108593660046151f8565b613057565b34801561086a57600080fd5b5061028e6108793660046155ee565b6131b2565b600260005414156108f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b6002600090815573ffffffffffffffffffffffffffffffffffffffff8316808252600360209081526040808420338086529083529381902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081527f9b3258bc4904fd6426b99843e206c6c7cdb1fd0f040121c25b71dafbb3851ee0910160405180910390a350506001600055565b6040517f055ee9b500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063055ee9b590602401602060405180830381865afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a43919061560b565b73ffffffffffffffffffffffffffffffffffffffff16141592915050565b60026000541415610ace576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610b5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b83919061560b565b9050610b903382846132eb565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906395373018906024015b600060405180830381600087803b158015610c1a57600080fd5b505af1158015610c2e573d6000803e3d6000fd5b5050600160005550505050565b60026000541415610ca8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610d39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5d919061560b565b9050610b90338284613411565b60026000541415610dd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000557f000000000000000000000000000000000000000000000000000000000000000015610e34576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610ec1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee5919061560b565b33600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915290205490915060ff16610f52576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f5d82613583565b5090508015610f98576040517ff713841e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b15801561102757600080fd5b505af115801561103b573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692503391507f93c70cc9715bef0d83edf2095f3595402279d274f402a73ffc17f1bcb19d863d90600090a35050600160005550565b600260005414156110f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611106613875565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063e958b70490602401602060405180830381865afa158015611197573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bb919061560b565b90506111c9848285856139b7565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401600060405180830381600087803b15801561125257600080fd5b505af1158015611266573d6000803e3d6000fd5b50506001600055505050505050565b600260005414156112e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611375573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611399919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166113e8576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806113f483613583565b915091508161142f576040517f1fdd676f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611437613875565b831561144d5761144d85858b8660016000613ae3565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632362a2d88b600185338e8e8e6040518863ffffffff1660e01b81526004016114b59796959493929190615663565b6020604051808303816000875af11580156114d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f891906156bf565b90508873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f7dfecd8419723a9d3954585a30c2a270165d70aafa146c11c1e1b88ae14390648460405161157091815260200190565b60405180910390a4505060016000555050505050505050565b600260005414156115f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ab919061560b565b90506116b5613875565b81156116cb576116cb8383338460016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d89061174a903390600090819083908d908d908d90600401615663565b6020604051808303816000875af1158015611769573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178d91906156bf565b5060405173ffffffffffffffffffffffffffffffffffffffff87169033907f460ad03b1cf79b1d64d3aefa28475f110ab66e84649c52bb41ed796b9b39198190600090a35050600160005550505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611849573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118d1576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff90811670010000000000000000000000000000000002911617600255565b6002600054141561196d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000908155606461198461ffff851687615707565b61198e9190615744565b9050611999816144f7565b6119a2816145e8565b6119ab84614668565b6119b3613875565b6040517f172c48c7000000000000000000000000000000000000000000000000000000008152600060048201819052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a64919061577f565b61ffff169150611a789050816127106157ae565b611a829083615707565b611a8c8288615707565b11611ac3576040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff86811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611b5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b81919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638587604051611bef92919091825261ffff16602082015260400190565b60405180910390a3611c2386827f00000000000000000000000000000000000000000000000000000000000000008a6139b7565b505060016000555050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526006602052604081205415155b92915050565b60026000541415611ccd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611cdb856144f7565b611ce484614668565b611ced856145e8565b600154700100000000000000000000000000000000900460ff1615611d3e576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d46613875565b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff85811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611de0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e04919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638885604051611e7292919091825261ffff16602082015260400190565b60405180910390a38215611e9057611e908484878460006001613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015611f1957600080fd5b505af1158015611f2d573d6000803e3d6000fd5b505060016000555050505050505050565b6000611c5a60058361480f565b60026000541415611fb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa15801561204b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206f919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166120be576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120c661481b565b6120fc576040517f7e52ccb400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061210782612668565b509050612112613875565b82156121285761212884848a8560016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d8906121aa908c90600290879033908f908f908f90600401615663565b6020604051808303816000875af11580156121c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ed91906156bf565b90508773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167ffada13ff2d5e1a1d9da37ad4a4130893b34e3c69c32b17f87ec31fd661b867078460405161226591815260200190565b60405180910390a45050600160005550505050505050565b6060612289600561486b565b905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612381576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561242f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612453919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146124b7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614878565b5050565b60026000541415612533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156125c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e8919061560b565b90506125f4818361489a565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401610c00565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126fc919061560b565b905060008061270b8387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156127a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127c991906156bf565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015291965061271091851690637afb010490604401602060405180830381865afa158015612863573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061288791906156bf565b6128919190615744565b9350505050915091565b60026000541415612908576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129bd919061560b565b90506129c7613875565b8115612a7e576129dc83833384600080613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015612a6557600080fd5b505af1158015612a79573d6000803e3d6000fd5b505050505b5050600160005550565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612af3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b17919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b7b576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614c92565b600080612b9283612668565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152919350600092507f000000000000000000000000000000000000000000000000000000000000000090911690633192195c906024016040805180830381865afa158015612c26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4a91906157c5565b9150819050612c5b61271084615707565b612c659190615744565b949350505050565b60026000541415612cda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063fdd5764590602401602060405180830381865afa158015612d6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d91919061560b565b73ffffffffffffffffffffffffffffffffffffffff161480612dd7575073ffffffffffffffffffffffffffffffffffffffff831660009081526006602052604090205415155b15612e0e576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612eac57600080fd5b505af1158015611c23573d6000803e3d6000fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f4f919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612fb3576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000061300a576040517f50dd11fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805464ffffffffff90921671010000000000000000000000000000000000027fffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffffff909216919091179055565b6040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063f67c5bd090602401602060405180830381865afa1580156130e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061310c91906156bf565b905080158015906131ab5750807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015613184573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a891906156bf565b16155b9392505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561321d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613241919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146132a5576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018054911515700100000000000000000000000000000000027fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff909216919091179055565b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600060448301819052917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561338c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133b091906156bf565b90506133bb816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f98274bf834d179ee08dc0604071b0dc90b54731bd5f725a5a96a39a86bce025a8360405161340391815260200190565b60405180910390a250505050565b61341a816144f7565b600154700100000000000000000000000000000000900460ff161561346b576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600160448301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561350c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061353091906156bf565b905061353b816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f9cac51154cc0d835e2f9c9d1f59a9344588cee107f4203bf58a8c797e3a58c458360405161340391815260200190565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613617919061560b565b90506000806136268387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156136c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136e491906156bf565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529195506000917f00000000000000000000000000000000000000000000000000000000000000001690633192195c906024016040805180830381865afa158015613775573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061379991906157c5565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350600092506127109187169063f9a6503090604401602060405180830381865afa158015613837573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061385b91906156bf565b6138659190615707565b9092109794965093945050505050565b34156139b5577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156138e357600080fd5b505af11580156138f7573d6000803e3d6000fd5b50506040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201523460248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16935063a9059cbb925060440190506020604051808303816000875af115801561398f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139b391906157e9565b505b565b6139c084614cb4565b6040517f830aa74500000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f0000000000000000000000000000000000000000000000000000000000000000169063830aa74590608401600060405180830381600087803b158015613a5e57600080fd5b505af1158015613a72573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fa32435755c235de2976ed44a75a2f85cb01faf0c894f639fe0c32bb9455fea8f83604051613ad591815260200190565b60405180910390a350505050565b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301523060248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b158015613b7257600080fd5b505af1158015613b86573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff871692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a28460005b8181101561441d5736888883818110613bea57613bea615806565b9050602002810190613bfc9190615835565b90506004613c0d6020830183615873565b90501015613c47576040517fe2b0e50600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b30613c5560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16141561421c578415613ca9576040517f5fb9107f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613cb86020830183615873565b613cc1916158d8565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167f59781034000000000000000000000000000000000000000000000000000000001415613e3c5760008080613d1e6020860186615873565b613d2c916004908290615920565b810190613d39919061522e565b925092509250613e34838c73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614613e2b576040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015613e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e26919061560b565b613e2d565b8b5b84846139b7565b505050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2b7c7b11000000000000000000000000000000000000000000000000000000001415613ec757600194506000613e996020840184615873565b613ea7916004908290615920565b810190613eb49190615215565b9050613ec1898983613411565b50614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2a7ba1f7000000000000000000000000000000000000000000000000000000001415613f80578415613f49576040517fc0b0caa800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613f586020840184615873565b613f66916004908290615920565b810190613f739190615215565b9050613ec18989836132eb565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f233a8caa0000000000000000000000000000000000000000000000000000000014156140e457600080613fda6020850185615873565b613fe8916004908290615920565b810190613ff5919061594a565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c8116600483015292945090925082918416906370a0823190602401602060405180830381865afa158015614069573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061408d91906156bf565b10156140dd576040517fa5ac537300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016108e7565b5050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fc690908a00000000000000000000000000000000000000000000000000000000141561416457600061413d6020840184615873565b61414b916004908290615920565b81019061415891906151f8565b9050613ec1888261489a565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f23e27a640000000000000000000000000000000000000000000000000000000014156141e45760006141bd6020840184615873565b6141cb916004908290615920565b8101906141d891906151f8565b9050613ec18882614d42565b6040517f1e9e7e7a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50614414565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff68754361426760208501856151f8565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156142d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142f4919061560b565b73ffffffffffffffffffffffffffffffffffffffff16148061436d575073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001661435560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16145b156143a4576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6144126143b46020830183615873565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506143f69250505060208401846151f8565b73ffffffffffffffffffffffffffffffffffffffff1690614e39565b505b50600101613bcf565b506040517f60c8e8938c9a0c0d88a98d6f1c562ce68077e12bf3edb8047378f2f736cb45b490600090a16040517fe1998cf900000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff86811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b1580156144d657600080fd5b505af11580156144ea573d6000803e3d6000fd5b5050505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006139b3576001546fffffffffffffffffffffffffffffffff9081169081146124c257600454608081901c906fffffffffffffffffffffffffffffffff16600067ffffffffffffffff8316431461456e578461458a565b61458a6fffffffffffffffffffffffffffffffff831686615976565b9050838111156145c6576040517f675f1a5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff81164360801b176004555050505050565b6002546fffffffffffffffffffffffffffffffff16811080614631575060025470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681115b156139b3576040517fce16799400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61467061481b565b156146a7576040517f63fc31c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1615614806577f0000000000000000000000000000000000000000000000000000000000000000801561472657503373ffffffffffffffffffffffffffffffffffffffff821614155b1561475d576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600160248301527f00000000000000000000000000000000000000000000000000000000000000001690639dc29fac90604401600060405180830381600087803b1580156147ed57600080fd5b505af1158015614801573d6000803e3d6000fd5b505050505b6139b381614cb4565b60006131ab8383614e7b565b60007f0000000000000000000000000000000000000000000000000000000000000000801561228957505060015471010000000000000000000000000000000000900464ffffffffff1642101590565b606060006131ab83614ea5565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f01565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561492b57600080fd5b505af115801561493f573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527fdf498aa1c340e992665d6fb4f3be8436d452c45a630cb6d7fab7963da39bac8793500190505b60405180910390a15050565b6040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600091829160019183917f00000000000000000000000000000000000000000000000000000000000000001690638991b2f190602401602060405180830381865afa158015614a2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a5391906156bf565b90505b808211614c895780821615614c7d576040517fe75538c700000000000000000000000000000000000000000000000000000000815260048101839052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e75538c7906024016040805180830381865afa158015614af4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b18919061577f565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529294509092506000918416906370a0823190602401602060405180830381865afa158015614b8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bb191906156bf565b90506001811115614c79576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff8481166024830152600091908b169063f9a6503090604401602060405180830381865afa158015614c33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c5791906156bf565b978801979050614c6b61ffff841682615707565b614c759088615976565b9650505b5050505b600182901b9150614a56565b50509250929050565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f50565b3373ffffffffffffffffffffffffffffffffffffffff821614801590614d0b575033600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16155b156139b3576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b158015614dd357600080fd5b505af1158015614de7573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527f69db9e9764da61b6681b89fb0f5be018506e0342036e56b59c3015a620d60977935001905061498d565b60606131ab83836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250615043565b6000826000018281548110614e9257614e92615806565b9060005260206000200154905092915050565b606081600001805480602002602001604051908101604052809291908181526020018280548015614ef557602002820191906000526020600020905b815481526020019060010190808311614ee1575b50505050509050919050565b6000818152600183016020526040812054614f4857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611c5a565b506000611c5a565b60008181526001830160205260408120548015615039576000614f746001836157ae565b8554909150600090614f88906001906157ae565b9050818114614fed576000866000018281548110614fa857614fa8615806565b9060005260206000200154905080876000018481548110614fcb57614fcb615806565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080614ffe57614ffe61598e565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611c5a565b6000915050611c5a565b6060612c65848460008585843b6150b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108e7565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516150df91906159ed565b60006040518083038185875af1925050503d806000811461511c576040519150601f19603f3d011682016040523d82523d6000602084013e615121565b606091505b509150915061513182828661513c565b979650505050505050565b6060831561514b5750816131ab565b82511561515b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e791906159ff565b73ffffffffffffffffffffffffffffffffffffffff811681146139b357600080fd5b80151581146139b357600080fd5b600080604083850312156151d257600080fd5b82356151dd8161518f565b915060208301356151ed816151b1565b809150509250929050565b60006020828403121561520a57600080fd5b81356131ab8161518f565b60006020828403121561522757600080fd5b5035919050565b60008060006060848603121561524357600080fd5b833561524e8161518f565b9250602084013561525e8161518f565b929592945050506040919091013590565b60008083601f84011261528157600080fd5b50813567ffffffffffffffff81111561529957600080fd5b6020830191508360208260051b85010111156152b457600080fd5b9250929050565b60008060008060008060a087890312156152d457600080fd5b86356152df8161518f565b955060208701356152ef8161518f565b9450604087013593506060870135615306816151b1565b9250608087013567ffffffffffffffff81111561532257600080fd5b61532e89828a0161526f565b979a9699509497509295939492505050565b60008060008060006080868803121561535857600080fd5b85356153638161518f565b945060208601359350604086013561537a816151b1565b9250606086013567ffffffffffffffff81111561539657600080fd5b6153a28882890161526f565b969995985093965092949392505050565b80356fffffffffffffffffffffffffffffffff811681146153d357600080fd5b919050565b600080604083850312156153eb57600080fd5b6153f4836153b3565b9150615402602084016153b3565b90509250929050565b61ffff811681146139b357600080fd5b6000806000806080858703121561543157600080fd5b8435935060208501356154438161518f565b925060408501356154538161540b565b915060608501356154638161540b565b939692955090935050565b60008060008060006080868803121561548657600080fd5b8535945060208601356154988161518f565b9350604086013567ffffffffffffffff8111156154b457600080fd5b6154c08882890161526f565b90945092505060608601356154d48161540b565b809150509295509295909350565b6020808252825182820181905260009190848201906040850190845b8181101561553057835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016154fe565b50909695505050505050565b60006020828403121561554e57600080fd5b6131ab826153b3565b6000806020838503121561556a57600080fd5b823567ffffffffffffffff81111561558157600080fd5b61558d8582860161526f565b90969095509350505050565b600080604083850312156155ac57600080fd5b82356155b78161518f565b915060208301356151ed8161518f565b6000602082840312156155d957600080fd5b813564ffffffffff811681146131ab57600080fd5b60006020828403121561560057600080fd5b81356131ab816151b1565b60006020828403121561561d57600080fd5b81516131ab8161518f565b6003811061565f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b73ffffffffffffffffffffffffffffffffffffffff888116825260e082019061568f602084018a615628565b6040830197909752948616606082015292909416608083015260a082015291151560c09092019190915292915050565b6000602082840312156156d157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561573f5761573f6156d8565b500290565b60008261577a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000806040838503121561579257600080fd5b825161579d8161518f565b60208401519092506151ed8161540b565b6000828210156157c0576157c06156d8565b500390565b600080604083850312156157d857600080fd5b505080516020909101519092909150565b6000602082840312156157fb57600080fd5b81516131ab816151b1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc183360301811261586957600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126158a857600080fd5b83018035915067ffffffffffffffff8211156158c357600080fd5b6020019150368190038213156152b457600080fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156159185780818660040360031b1b83161692505b505092915050565b6000808585111561593057600080fd5b8386111561593d57600080fd5b5050820193919092039150565b6000806040838503121561595d57600080fd5b82356159688161518f565b946020939093013593505050565b60008219821115615989576159896156d8565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60005b838110156159d85781810151838201526020016159c0565b838111156159e7576000848401525b50505050565b600082516158698184602087016159bd565b6020815260008251806020840152615a1e8160408501602087016159bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea2646970667358221220a3f4a705ab580a6ada1e438cd2ee4abc001b62d1d171fce12c41994900fef21664736f6c634300080a003352657475726e65642066616c736520666f7220757365722077697468206f70656e206163636f756e74496e636f727265637420746f74616c2076616c756520666f722032206173736574437265646974206163636f756e7420776173206e6f742070726f7065726c79207472616e736665727265645570677261646561626c6520636f6e747261637473206c69737420697320696e636f72726563745472616e7366657220697320756e65787065637465646c79206e6f7420616c6c6f776564205472616e7366657220697320756e65787065637465646c7920616c6c6f77656420496e636f727265637420746f74616c2076616c756520666f722033206173736574496e636f7272656374205468726573686f6c64207765696768746865642076616c756520666f722031206173736574496e636f7272656374205468726573686f6c64207765696768746865642076616c756520666f72203320617373657469735570677261646561626c65436f6e74726163742072657475726e7320696e636f72726563742076616c7565496e636f727265637420746f74616c2076616c756520666f72203120617373657452657475726e6564207472756520666f7220757365722077686f20686173206e6f206f70656e206163636f756e74496e636f7272656374205468726573686f6c64207765696768746865642076616c756520666f722032206173736574a2646970667358221220ec360a0bc65cc3998f0e816a8050b3937c7f5c2a9ce47f06bcd0f3562930950e64736f6c634300080a0033"; - -type CreditFacadeTestConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: CreditFacadeTestConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class CreditFacadeTest__factory extends ContractFactory { - constructor(...args: CreditFacadeTestConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): CreditFacadeTest { - return super.attach(address) as CreditFacadeTest; - } - override connect(signer: Signer): CreditFacadeTest__factory { - return super.connect(signer) as CreditFacadeTest__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): CreditFacadeTestInterface { - return new utils.Interface(_abi) as CreditFacadeTestInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): CreditFacadeTest { - return new Contract(address, _abi, signerOrProvider) as CreditFacadeTest; - } -} diff --git a/src/types/factories/contracts/test/credit/CreditFacade.t.sol/index.ts b/src/types/factories/contracts/test/credit/CreditFacade.t.sol/index.ts deleted file mode 100644 index 60265d1d..00000000 --- a/src/types/factories/contracts/test/credit/CreditFacade.t.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { CreditFacadeTest__factory } from "./CreditFacadeTest__factory"; diff --git a/src/types/factories/contracts/test/credit/CreditManager.t.sol/CreditManagerTest__factory.ts b/src/types/factories/contracts/test/credit/CreditManager.t.sol/CreditManagerTest__factory.ts deleted file mode 100644 index 0979959f..00000000 --- a/src/types/factories/contracts/test/credit/CreditManager.t.sol/CreditManagerTest__factory.ts +++ /dev/null @@ -1,1003 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - CreditManagerTest, - CreditManagerTestInterface, -} from "../../../../../contracts/test/credit/CreditManager.t.sol/CreditManagerTest"; - -const _abi = [ - { - inputs: [], - name: "AdaptersOrCreditFacadeOnlyException", - type: "error", - }, - { - inputs: [], - name: "AllowanceFailedExpcetion", - type: "error", - }, - { - inputs: [], - name: "CreditConfiguratorOnlyException", - type: "error", - }, - { - inputs: [], - name: "CreditFacadeOnlyException", - type: "error", - }, - { - inputs: [], - name: "HasNoOpenedAccountException", - type: "error", - }, - { - inputs: [], - name: "NotEnoughCollateralException", - type: "error", - }, - { - inputs: [], - name: "ReentrancyLockException", - type: "error", - }, - { - inputs: [], - name: "TargetContractNotAllowedExpcetion", - type: "error", - }, - { - inputs: [], - name: "TokenAlreadyAddedException", - type: "error", - }, - { - inputs: [], - name: "TokenNotAllowedException", - type: "error", - }, - { - inputs: [], - name: "TooMuchEnabledTokensException", - type: "error", - }, - { - inputs: [], - name: "TooMuchTokensException", - type: "error", - }, - { - inputs: [], - name: "ZeroAddressOrUserAlreadyHasAccountException", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "target", - type: "address", - }, - ], - name: "ExecuteOrder", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newConfigurator", - type: "address", - }, - ], - name: "NewConfigurator", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "", - type: "address", - }, - ], - name: "log_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "log_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - name: "log_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "int256", - name: "", - type: "int256", - }, - ], - name: "log_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "address", - name: "val", - type: "address", - }, - ], - name: "log_named_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes", - name: "val", - type: "bytes", - }, - ], - name: "log_named_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes32", - name: "val", - type: "bytes32", - }, - ], - name: "log_named_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - ], - name: "log_named_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "string", - name: "val", - type: "string", - }, - ], - name: "log_named_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - ], - name: "log_named_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "log_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "logs", - type: "event", - }, - { - inputs: [], - name: "IS_TEST", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "failed", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "setUp", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CM_01_constructor_sets_correct_values", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CM_02_credit_account_management_functions_revert_if_not_called_by_creditFacadeCall", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CM_03_credit_account_execution_functions_revert_if_not_called_by_creditFacade", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CM_04_credit_account_configurator_functions_revert_if_not_called_by_creditFacade", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CM_05_pause_pauses_management_functions", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CM_06_openCreditAccount_sets_correct_values_and_transfers_tokens_from_pool", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CM_07_openCreditAccount_reverts_if_zero_address_or_address_exists", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CM_08_openCreditAccount_sets_correct_values_and_transfers_tokens_from_pool", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CM_09_close_credit_account_returns_credit_account_and_remove_borrower_from_map", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CM_10_close_credit_account_returns_underlying_token_if_not_liquidated", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CM_11_close_credit_account_charges_caller_if_underlying_token_not_enough", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CM_12_close_credit_account_charges_caller_if_underlying_token_not_enough", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CM_13_close_credit_account_charges_caller_if_underlying_token_not_enough", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CM_14_close_credit_account_with_nonzero_skipTokenMask_sends_correct_tokens", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CM_16_close_weth_credit_account_sends_eth_to_borrower", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CM_17_close_dai_credit_account_sends_eth_to_borrower", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CM_18_close_credit_account_sends_eth_to_liquidator_and_weth_to_borrower", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CM_19_close_dai_credit_account_sends_eth_to_liquidator", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint128", - name: "amount", - type: "uint128", - }, - ], - name: "test_CM_20_manageDebt_correctly_increases_debt", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint128", - name: "amount", - type: "uint128", - }, - ], - name: "test_CM_21_manageDebt_correctly_decreases_debt", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CM_22_add_collateral_transfers_money_and_enables_token", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CM_23_transferAccountOwnership_reverts_if_to_equals_zero_or_account_exists", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CM_24_transferAccountOwnership_changes_creditAccounts_map_properly", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CM_25A_approveCreditAccount_reverts_if_the_token_is_not_added", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CM_25_approveCreditAccount_reverts_if_adapter_isnt_connected_with_contract_or_0", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CM_26_approveCreditAccount_approves_with_desired_allowance", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CM_27A_approveCreditAccount_works_for_ERC20_with_approve_restrictions", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CM_27B_approveCreditAccount_works_for_ERC20_with_approve_restrictions", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CM_28_executeOrder_reverts_if_adapter_is_not_connected_with_target_contract", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CM_29_executeOrder_calls_credit_account_method_and_emit_event", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CM_30_checkAndEnableToken_reverts_for_token_for_token_not_in_list_and_for_forbidden_token", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CM_31_checkAndEnableToken_enables_token_for_creditAccount", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CM_32_fastCollateralCheck_enables_tokenOut_and_reverts_if_its_unkown_or_forbidden", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint8", - name: "balanceAfter", - type: "uint8", - }, - ], - name: "test_CM_33_fastCollateralCheck_disable_tokens_with_zero_balance", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CM_34_fastCollateralCheck_is_passed_if_collateralOut_gte_collarteralIn", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CM_35_fastCollateralCheck_reverts_if_more_enabled_tokens_than_allowed_if_collateralOut_gte_collarteralIn_wo_lt_check", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CM_36A_fastCollateralCheck_correctly_optimizes_enabled_tokens", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "desiredDrop", - type: "uint256", - }, - ], - name: "test_CM_36_fastCollateralCheck_is_passed_with_cumulative_drop_lte_feeLiquidation", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CM_37_fastCollateralCheck_reverts_if_more_enabled_tokens_than_allowed_if_collateralOut_lt_collarteralIn_wo_lt_check", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CM_38_fullCollateralCheck_skips_tokens_is_they_are_not_enabled", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CM_39_fullCollateralCheck_diables_tokens_if_they_have_zero_balance", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CM_40_fullCollateralCheck_breaks_loop_if_total_gte_borrowAmountPlusInterestRateUSD_and_pass_the_check", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CM_41A_fullCollateralCheck_correctly_disables_the_underlying_when_needed", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CM_41B_fullCollateralCheck_correctly_optimizes_enabled_tokens", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CM_41_fullCollateralCheck_reverts_if_CA_has_more_than_allowed_enabled_tokens", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint128", - name: "borrowedAmount", - type: "uint128", - }, - { - internalType: "uint128", - name: "daiBalance", - type: "uint128", - }, - { - internalType: "uint128", - name: "usdcBalance", - type: "uint128", - }, - { - internalType: "uint128", - name: "linkBalance", - type: "uint128", - }, - { - internalType: "uint128", - name: "wethBalance", - type: "uint128", - }, - { - internalType: "bool", - name: "enableUSDC", - type: "bool", - }, - { - internalType: "bool", - name: "enableLINK", - type: "bool", - }, - { - internalType: "bool", - name: "enableWETH", - type: "bool", - }, - ], - name: "test_CM_42_fullCollateralCheck_fuzzing_test", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CM_43_calcClosePayments_test", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CM_44_transferAssetsTo_sends_all_tokens_except_underlying_one_to_provided_address", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CM_45_safeTokenTransfer_transfers_tokens", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CM_46__disableToken_disabale_tokens_and_do_not_enable_it_if_called_twice", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newToken", - type: "address", - }, - { - internalType: "uint16", - name: "newLT", - type: "uint16", - }, - ], - name: "test_CM_47_collateralTokens_works_as_expected", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CM_48_getCreditAccountOrRevert_reverts_if_borrower_has_no_account", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint128", - name: "amount", - type: "uint128", - }, - ], - name: "test_CM_49_calcCreditAccountAccruedInterest_computes_correctly", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CM_50_getCreditAccountParameters_return_correct_values", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CM_51_setParams_sets_configuration_properly", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CM_52_addToken_reverts_if_token_exists_and_if_collateralTokens_more_256", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CM_53_addToken_adds_token_and_set_tokenMaskMap_correctly", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CM_54_setLiquidationThreshold_reverts_for_unknown_token", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CM_55_setForbidMask_sets_forbidMask_correctly", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CM_56_changeContractAllowance_updates_adapterToContract", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CM_57_upgradeContracts_updates_contracts_correctly", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CM_58_setConfigurator_sets_creditConfigurator_correctly_and_emits_event", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "noise", - type: "uint256", - }, - ], - name: "test_CM_59_getMaxIndex_works_properly", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CM_60_universal_adapter_can_call_adapter_restricted_functions", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CM_61_setMaxEnabledTokens_works_correctly", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, -]; - -const _bytecode = - "0x60806040526000805460ff1916600190811790915580546001600160a01b031916737109709ecfa91a80626ff3989d68f67f5b1dd12d1790553480156200004557600080fd5b50620547ec80620000576000396000f3fe6080604052348015630000001257600080fd5b506004361063000004ee5760003560e01c806386562dbc116300000291578063cbcef3f1116300000167578063e9e933e41163000000e8578063f836a3971163000000af578063fb47c1f7116300000090578063fb47c1f7146300000890578063fc1d242c14630000089c578063fcc48bed1463000008a857600080fd5b8063f836a397146300000875578063fa7626d414630000088157600080fd5b8063e9e933e4146300000845578063ec43a71a146300000851578063ece2c55714630000085d578063f3fbcebd14630000086957600080fd5b8063e423b74811630000012e578063e423b748146300000815578063e4672631146300000821578063e4f86d0a14630000082d578063e91b684314630000083957600080fd5b8063cbcef3f11463000007e5578063d735cc0a1463000007f1578063dd5bbfc21463000007fd578063deb32a1814630000080957600080fd5b80639c06719b116300000212578063b778b0681163000001d9578063ba668a6f1163000001ba578063ba668a6f1463000007b2578063c3b502931463000007be578063c676441a1463000007ca57600080fd5b8063b778b068146300000786578063ba414fa614630000079257600080fd5b80639c06719b1463000007475780639cd0b37e146300000753578063a95871dc14630000076e578063b353fcff14630000077a57600080fd5b8063950e2bbb116300000258578063950e2bbb146300000717578063957ca3b314630000072357806399d8ff2314630000072f5780639a776bce14630000073b57600080fd5b806386562dbc1463000006e7578063873a53d31463000006f35780638fa5973b1463000006ff578063930ba1eb14630000070b57600080fd5b806343c242d31163000003c8578063719142f511630000034957806374a871bf11630000031057806378f710a01163000002f157806378f710a01463000006a557806382d9cafb1463000006c0578063842140e41463000006db57600080fd5b806374a871bf14630000067e57806375a71e9614630000068a57600080fd5b8063719142f514630000064e5780637305ef9514630000065a5780637332418314630000066657806373bc56c214630000067257600080fd5b80635000489111630000038f5780635000489114630000060f5780636430791714630000061b5780636931631e1463000006275780636c9b028414630000063357600080fd5b806343c242d31463000005df5780634a1542631463000005eb5780634ede9b821463000005f75780634f1cb90e14630000060357600080fd5b80631fe2cc5a1163000004735780632c37358511630000043a57806332b34dde11630000041b57806332b34dde1463000005bb5780633a20d7fb1463000005c757806341cb5b221463000005d357600080fd5b80632c373585146300000594578063316d59df1463000005a057600080fd5b80631fe2cc5a1463000005555780632512f525146300000561578063289db64f14630000057c5780632954173f14630000058857600080fd5b80630d320ebb1163000004b95780630d320ebb14630000052557806315ac40551463000005315780631787eb5b14630000053d57806319c6d96814630000054957600080fd5b806302a1f8c71463000004f357806303514d991463000005015780630493062614630000050d5780630a9254e4146300000519575b600080fd5b63000004ff63000008b4565b005b63000004ff63000014d7565b63000004ff6300001b0a565b63000004ff63000022dd565b63000004ff63000023d1565b63000004ff63000027b7565b63000004ff6300002a7e565b63000004ff630000364f565b63000004ff6300003898565b63000004ff6300000575366004630001ad90565b6300003cc0565b63000004ff63000043a5565b63000004ff63000046c9565b63000004ff63000048ca565b63000004ff63000005b4366004630001adc9565b6300004a2a565b63000004ff6300004e25565b63000004ff630000560c565b63000004ff63000057c2565b63000004ff6300005cfb565b63000004ff63000065f9565b63000004ff630000680a565b63000004ff6300006b6c565b63000004ff63000074d5565b63000004ff6300007b0e565b63000004ff6300007ef8565b63000004ff6300000647366004630001adec565b63000081aa565b63000004ff6300009159565b63000004ff630000992e565b63000004ff6300009b9e565b63000004ff630000a17f565b63000004ff630000a6a1565b63000004ff630000069e366004630001ae17565b630000a9dd565b63000004ff63000006b9366004630001ad90565b630000b97c565b63000004ff63000006d4366004630001ad90565b630000bea8565b63000004ff630000c271565b63000004ff630000c65d565b63000004ff630000ce84565b63000004ff630000d286565b63000004ff630000d9dd565b63000004ff630000e0be565b63000004ff630000e542565b63000004ff630000ea4a565b63000004ff630000ef79565b63000004ff630000f508565b63000004ff6300000767366004630001af0e565b630000f78e565b63000004ff6300010207565b63000004ff6300010f61565b63000004ff63000116eb565b630000079e63000119df565b604051901515815260200160405180910390f35b63000004ff6300011b53565b63000004ff6300011f4e565b63000004ff63000007de366004630001adec565b6300012163565b63000004ff63000122e7565b63000004ff63000126f8565b63000004ff630001271d565b63000004ff6300012d7e565b63000004ff630001306c565b63000004ff630001352a565b63000004ff6300013a88565b63000004ff6300014678565b63000004ff630001510d565b63000004ff63000157c2565b63000004ff6300015b52565b63000004ff6300015f57565b63000004ff63000162e9565b600054630000079e9060ff1681565b63000004ff6300016645565b63000004ff6300016a08565b63000004ff6300017817565b6001546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff909116906306447d5690602401600060405180830381600087803b158015630000093557600080fd5b505af1158015630000094b573d6000803e3d6000fd5b50506008546040516000935073ffffffffffffffffffffffffffffffffffffffff9091169150630000097e90630001ace6565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103906000f08015801563000009b9573d6000803e3d6000fd5b509050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166362eb33e36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156300000a2b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300000a539190630001af51565b6040517fe26b2f6300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152919091169063e26b2f6390602401600060405180830381600087803b1580156300000ac057600080fd5b505af11580156300000ad6573d6000803e3d6000fd5b50506009546040517f11ca4fc200000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff918216602482015290841692506311ca4fc29150604401600060405180830381600087803b1580156300000b4f57600080fd5b505af11580156300000b65573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156300000bd557600080fd5b505af11580156300000beb573d6000803e3d6000fd5b5050505060008173ffffffffffffffffffffffffffffffffffffffff16638fe3f93f670de0b6b3a7640000614e206300000c279190630001afa3565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b168152600481019190915273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660248201526044016020604051808303816000875af11580156300000c99573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300000cc19190630001af51565b600080546040517f67b4264500000000000000000000000000000000000000000000000000000000815292935073c4375b7de8af5a38a93548eb8453a498222c4ff2926201000090910473ffffffffffffffffffffffffffffffffffffffff16906367b42645906300000d3a906004908101630001b02f565b602060405180830381865afa1580156300000d59573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300000d819190630001af51565b6001546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291925073ffffffffffffffffffffffffffffffffffffffff16906306447d5690602401600060405180830381600087803b1580156300000e0357600080fd5b505af11580156300000e19573d6000803e3d6000fd5b50506040517fd48bfca700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301528716925063d48bfca79150602401600060405180830381600087803b1580156300000e8857600080fd5b505af11580156300000e9e573d6000803e3d6000fd5b50506040517fd48bfca700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301528716925063d48bfca79150602401600060405180830381600087803b1580156300000f0d57600080fd5b505af11580156300000f23573d6000803e3d6000fd5b50506002546040517f0c75f80600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808916945063a70bc542935085921690630c75f806906300000f8b906004908101630001b02f565b602060405180830381865afa1580156300000faa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300000fd29190630001b041565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015261ffff166024820152604401600060405180830381600087803b158015630000104357600080fd5b505af11580156300001059573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801563000010c957600080fd5b505af115801563000010df573d6000803e3d6000fd5b50506040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301528581166024830152871692506351e3f1609150604401600060405180830381600087803b158015630000115657600080fd5b505af1158015630000116c573d6000803e3d6000fd5b50506040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301528481166024830152871692506351e3f1609150604401600060405180830381600087803b15801563000011e357600080fd5b505af115801563000011f9573d6000803e3d6000fd5b5050600080546040517f8a3177a300000000000000000000000000000000000000000000000000000000815291935062010000900473ffffffffffffffffffffffffffffffffffffffff169150638a3177a390630000125e906004908101630001b02f565b602060405180830381865afa158015630000127d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000012a59190630001b064565b6002546040517f0c75f80600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690630c75f8069063000012ff906004908101630001b02f565b602060405180830381865afa158015630000131e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000013469190630001b041565b61ffff16612710670de0b6b3a7640000630000136681614e20630001afa3565b63000013749190630001b07f565b63000013829190630001afa3565b6300001394906305f5e100630001afa3565b63000013a29190630001b0cc565b63000013b09190630001b0cc565b6000546040517feebab8ef00000000000000000000000000000000000000000000000000000000815291925062010000900473ffffffffffffffffffffffffffffffffffffffff169063eebab8ef90630000141590600490889086908301630001b0e6565b600060405180830381600087803b158015630000143157600080fd5b505af11580156300001447573d6000803e3d6000fd5b50506040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528816925063953730189150602401600060405180830381600087803b15801563000014b657600080fd5b505af115801563000014cc573d6000803e3d6000fd5b505050505050505050565b60008060008063000014e96300017b0b565b600080546008546040517f88327863000000000000000000000000000000000000000000000000000000008152969a50949850929650909450926201000090910473ffffffffffffffffffffffffffffffffffffffff90811692638832786392630000155e926001921690600401630001b11f565b602060405180830381865afa158015630000157d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000015a59190630001b064565b6000546040517feebab8ef00000000000000000000000000000000000000000000000000000000815291925062010000900473ffffffffffffffffffffffffffffffffffffffff169063eebab8ef90630000161f9060019073f39fd6e51aad88f6f4ce6ab8827279cfffb92266908a90600401630001b0e6565b600060405180830381600087803b158015630000163b57600080fd5b505af11580156300001651573d6000803e3d6000fd5b5050505060008585858863000016699190630001afa3565b63000016779190630001b0cc565b63000016859190630001b154565b90506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639af1d35a6040518163ffffffff1660e01b815260040160a060405180830381865afa15801563000016f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000017209190630001b171565b505050509050600061271061ffff168261ffff168463000017439190630001afa3565b63000017519190630001b0cc565b90506000816300001764858b630001b07f565b63000017729190630001b07f565b60015460085460408051602481018e905260448101879052600060648083019190915282518083039091018152608490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fca9505e40000000000000000000000000000000000000000000000000000000017905290517fbd6af43400000000000000000000000000000000000000000000000000000000815293945073ffffffffffffffffffffffffffffffffffffffff9283169363bd6af43493630000184893169190600401630001b27c565b600060405180830381600087803b158015630000186457600080fd5b505af1158015630000187a573d6000803e3d6000fd5b50506007546040517f2362a2d80000000000000000000000000000000000000000000000000000000081526000935073ffffffffffffffffffffffffffffffffffffffff9091169150632362a2d890630000190f9073f39fd6e51aad88f6f4ce6ab8827279cfffb92266908590819083907390f79bf6eb2c4f870365e785982e1f101e93b9069083908190600401630001b2cd565b6020604051808303816000875af11580156300001930573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000019589190630001b064565b9050630000199f8160006040518060400160405280601c81526020017f52656d61696e696e672066756e6473206973206e6f74207a65726f21000000008152506300017bb8565b63000019e660018860016040518060400160405280601b81526020017f437265646974206163636f756e742062616c616e636520213d203100000000008152506300017c0a565b6008546300001a1d9060019073ffffffffffffffffffffffffffffffffffffffff166300001a16858a630001b07f565b6300017d4b565b6300001aa3600173f39fd6e51aad88f6f4ce6ab8827279cfffb9226681856300001a4a8f6002630001afa3565b6300001a589190630001b154565b6300001a669190630001b154565b6040518060400160405280601f81526020017f496e636f727265637420616d6f756e7420776572652070616964206261636b008152506300017c0a565b6300001afe60017390f79bf6eb2c4f870365e785982e1f101e93b90660006040518060400160405280601f81526020017f496e636f727265637420616d6f756e7420776572652070616964206261636b008152506300017c0a565b50505050505050505050565b60006300001b186300017b0b565b600080546040517f67b4264500000000000000000000000000000000000000000000000000000000815292965090945062010000900473ffffffffffffffffffffffffffffffffffffffff1692506367b4264591506300001b8090600290600401630001b02f565b602060405180830381865afa1580156300001b9f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300001bc79190630001af51565b6000546040517feebab8ef00000000000000000000000000000000000000000000000000000000815291925062010000900473ffffffffffffffffffffffffffffffffffffffff169063eebab8ef906300001c31906002908690633b9aca0090600401630001b0e6565b600060405180830381600087803b1580156300001c4d57600080fd5b505af11580156300001c63573d6000803e3d6000fd5b505050506300001c77600260006300017d6a565b60075473ffffffffffffffffffffffffffffffffffffffff1663654a9eda8383806300001cab633b9aca006002630001afa3565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b16815273ffffffffffffffffffffffffffffffffffffffff948516600482015292841660248401529216604482015260648101919091526000608482015260a401600060405180830381600087803b1580156300001d3157600080fd5b505af11580156300001d47573d6000803e3d6000fd5b505050506300001d5b600260016300017d6a565b6001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f700ca0af00000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063c31eb0e090602401600060405180830381600087803b1580156300001de857600080fd5b505af11580156300001dfe573d6000803e3d6000fd5b505060075473ffffffffffffffffffffffffffffffffffffffff16915063654a9eda9050838373c4375b7de8af5a38a93548eb8453a498222c4ff26300001e4c633b9aca006002630001afa3565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b16815273ffffffffffffffffffffffffffffffffffffffff948516600482015292841660248401529216604482015260648101919091526000608482015260a401600060405180830381600087803b1580156300001ed257600080fd5b505af11580156300001ee8573d6000803e3d6000fd5b5050600080546040517f67b4264500000000000000000000000000000000000000000000000000000000815291935062010000900473ffffffffffffffffffffffffffffffffffffffff1691506367b42645906300001f4e90600390600401630001b02f565b602060405180830381865afa1580156300001f6d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300001f959190630001af51565b6007546040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80841660048301529293506000929091169063f67c5bd090602401602060405180830381865afa158015630000200d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000020359190630001b064565b6001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291925073ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b15801563000020b757600080fd5b505af115801563000020cd573d6000803e3d6000fd5b50506007546040517fa366f4960000000000000000000000000000000000000000000000000000000081526004810185905273ffffffffffffffffffffffffffffffffffffffff909116925063a366f4969150602401600060405180830381600087803b158015630000213f57600080fd5b505af11580156300002155573d6000803e3d6000fd5b50506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f700ca0af00000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff909116925063c31eb0e09150602401600060405180830381600087803b15801563000021e657600080fd5b505af115801563000021fc573d6000803e3d6000fd5b505060075473ffffffffffffffffffffffffffffffffffffffff16915063654a9eda90508585856300002236633b9aca006002630001afa3565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b16815273ffffffffffffffffffffffffffffffffffffffff948516600482015292841660248401529216604482015260648101919091526000608482015260a4015b600060405180830381600087803b15801563000022bd57600080fd5b505af115801563000022d3573d6000803e3d6000fd5b5050505050505050565b60405163000022ed90630001acf5565b604051809103906000f080158015630000230b573d6000803e3d6000fd5b50600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff166201000073ffffffffffffffffffffffffffffffffffffffff9384168102919091179182905590041663b36ba2086300002377670de0b6b3a76400006064630001afa3565b6040518263ffffffff1660e01b81526004016000604051808303818588803b15801563000023a457600080fd5b505af115801563000023ba573d6000803e3d6000fd5b505050505063000023cf600160006300018266565b565b63000024d273c4375b7de8af5a38a93548eb8453a498222c4ff273ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156300002470573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000024989190630001af51565b73ffffffffffffffffffffffffffffffffffffffff161415604051806060016040528060268152602001630005440e60269139630001893b565b6001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b158015630000255357600080fd5b505af11580156300002569573d6000803e3d6000fd5b5050600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481019290925260006024830181905260448301819052606483015273ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b15801563000025f057600080fd5b505af11580156300002606573d6000803e3d6000fd5b505060405173c4375b7de8af5a38a93548eb8453a498222c4ff292507ff62005acebe9b616aefb5f248b48f5e89f28437b27d1eebc0b2d911209f297af9150600090a26007546040517f9f5f86ae00000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff2600482015273ffffffffffffffffffffffffffffffffffffffff90911690639f5f86ae90602401600060405180830381600087803b15801563000026ca57600080fd5b505af115801563000026e0573d6000803e3d6000fd5b5050505063000023cf600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156300002758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000027809190630001af51565b73c4375b7de8af5a38a93548eb8453a498222c4ff2604051806060016040528060278152602001630005426760279139630001898a565b600060f49050630000287e81600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa1580156300002832573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000285a9190630001b064565b1415604051806060016040528060268152602001630005476e60269139630001893b565b6001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b15801563000028ff57600080fd5b505af11580156300002915573d6000803e3d6000fd5b50506007546040517fa366f4960000000000000000000000000000000000000000000000000000000081526004810185905273ffffffffffffffffffffffffffffffffffffffff909116925063a366f4969150602401600060405180830381600087803b158015630000298757600080fd5b505af1158015630000299d573d6000803e3d6000fd5b505050506300002a7b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa1580156300002a15573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300002a3d9190630001b064565b826040518060400160405280601f81526020017f466f726269644d61736b206973206e6f742073657420636f72726563746c79008152506300017bb8565b50565b600754604080517f2f7a188100000000000000000000000000000000000000000000000000000000815290516300002b239273ffffffffffffffffffffffffffffffffffffffff1691632f7a18819160048083019260209291908290030181865afa1580156300002af3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300002b1b9190630001af51565b306300018a02565b6001546040517f06447d5600000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116906306447d5690602401600060405180830381600087803b1580156300002ba457600080fd5b505af11580156300002bba573d6000803e3d6000fd5b50506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527feee4716900000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff909116925063c31eb0e09150602401600060405180830381600087803b1580156300002c4b57600080fd5b505af11580156300002c61573d6000803e3d6000fd5b50506007546040517fd48bfca700000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff2600482015273ffffffffffffffffffffffffffffffffffffffff909116925063d48bfca79150602401600060405180830381600087803b1580156300002ce657600080fd5b505af11580156300002cfc573d6000803e3d6000fd5b50506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527feee4716900000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff909116925063c31eb0e09150602401600060405180830381600087803b1580156300002d8d57600080fd5b505af11580156300002da3573d6000803e3d6000fd5b50506007546040517f944ac59f000000000000000000000000000000000000000000000000000000008152600060048201819052602482018190526044820181905260648201819052608482015273ffffffffffffffffffffffffffffffffffffffff909116925063944ac59f915060a401600060405180830381600087803b1580156300002e3157600080fd5b505af11580156300002e47573d6000803e3d6000fd5b50506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527feee4716900000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff909116925063c31eb0e09150602401600060405180830381600087803b1580156300002ed857600080fd5b505af11580156300002eee573d6000803e3d6000fd5b50506007546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff260048201526000602482015273ffffffffffffffffffffffffffffffffffffffff909116925063a70bc5429150604401600060405180830381600087803b1580156300002f7a57600080fd5b505af11580156300002f90573d6000803e3d6000fd5b50506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527feee4716900000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff909116925063c31eb0e09150602401600060405180830381600087803b158015630000302157600080fd5b505af11580156300003037573d6000803e3d6000fd5b50506007546040517fa366f4960000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff909116925063a366f4969150602401600060405180830381600087803b15801563000030a957600080fd5b505af115801563000030bf573d6000803e3d6000fd5b50506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527feee4716900000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff909116925063c31eb0e09150602401600060405180830381600087803b158015630000315057600080fd5b505af11580156300003166573d6000803e3d6000fd5b50506007546040517f6e98e5e400000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff260048201819052602482015273ffffffffffffffffffffffffffffffffffffffff9091169250636e98e5e49150604401600060405180830381600087803b15801563000031f257600080fd5b505af11580156300003208573d6000803e3d6000fd5b50506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527feee4716900000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff909116925063c31eb0e09150602401600060405180830381600087803b158015630000329957600080fd5b505af115801563000032af573d6000803e3d6000fd5b50506007546040517f11ca4fc200000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff260048201819052602482015273ffffffffffffffffffffffffffffffffffffffff90911692506311ca4fc29150604401600060405180830381600087803b158015630000333b57600080fd5b505af11580156300003351573d6000803e3d6000fd5b50506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527feee4716900000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff909116925063c31eb0e09150602401600060405180830381600087803b15801563000033e257600080fd5b505af115801563000033f8573d6000803e3d6000fd5b50506007546040517f9f5f86ae00000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff2600482015273ffffffffffffffffffffffffffffffffffffffff9091169250639f5f86ae9150602401600060405180830381600087803b158015630000347d57600080fd5b505af11580156300003493573d6000803e3d6000fd5b50506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527feee4716900000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff909116925063c31eb0e09150602401600060405180830381600087803b158015630000352457600080fd5b505af1158015630000353a573d6000803e3d6000fd5b50506007546040517fdc2b21c100000000000000000000000000000000000000000000000000000000815260ff600482015273ffffffffffffffffffffffffffffffffffffffff909116925063dc2b21c191506024015b600060405180830381600087803b15801563000035ad57600080fd5b505af115801563000035c3573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015630000363357600080fd5b505af11580156300003649573d6000803e3d6000fd5b50505050565b60075460009073ffffffffffffffffffffffffffffffffffffffff16638fe3f93f6300003688670de0b6b3a7640000614e20630001afa3565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b168152600481019190915273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660248201526044016020604051808303816000875af115801563000036fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000037229190630001af51565b90506300003731816300018b48565b6007546040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015290911690639537301890602401600060405180830381600087803b15801563000037a057600080fd5b505af115801563000037b6573d6000803e3d6000fd5b5050505063000037ca600160006300017d6a565b6300002a7b63000037dc826300018f1b565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638345f26e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015630000384b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000038739190630001b32d565b60ff166040518060600160405280602281526020016300054307602291396300017bb8565b60005a60405160200163000038af91815260200190565b6040516020818303038152906040528051906020012060001c905060005b60288110156300003cbc576000600c821163000038ed57600063000038fc565b63000038fc600c83630001b154565b9050805b8281116300003ca157630000391563000022dd565b600754604080517f8345f26e000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691638345f26e9160048083019260209291908290030181865afa1580156300003987573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000039af9190630001b32d565b60ff169050600c8263000039c6866001630001b07f565b63000039d49190630001b154565b111563000039e457506300003c89565b6000806300003a0363000039fa8588630001b154565b85896300019008565b915091506000806300003a166300017b0b565b6000549395509350505062010000900473ffffffffffffffffffffffffffffffffffffffff1663eebab8ef6001836300003a53866064630001afa3565b6040518463ffffffff1660e01b81526004016300003a7593929190630001b0e6565b600060405180830381600087803b1580156300003a9157600080fd5b505af11580156300003aa7573d6000803e3d6000fd5b505050506300003abc81858a8987630001926e565b50878581106300003aca5750845b868914156300003af8578581146300003af3576300003aec816001630001b07f565b6300003af5565b855b90505b600080546040517f883278630000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff16906388327863906300003b5b906001908790600401630001b11f565b602060405180830381865afa1580156300003b7a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300003ba29190630001b064565b600754600b546040517f654a9eda00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301529182166024820181905260448201526064810184905260848101849052929350169063654a9eda9060a401600060405180830381600087803b1580156300003c3257600080fd5b505af11580156300003c48573d6000803e3d6000fd5b505050506300003c816300003c5e846300018f1b565b836040518060600160405280602281526020016300054307602291396300017bb8565b505050505050505b806300003c9781630001b350565b9150506300003900565b506300003cb39050600882630001b07f565b905063000038cd565b5050565b6002546040517f7d6bc094000000000000000000000000000000000000000000000000000000008152600160048201526000918291829173ffffffffffffffffffffffffffffffffffffffff1690637d6bc094906024016080604051808303816000875af11580156300003d38573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300003d609190630001b38f565b6000546008546040517feebab8ef00000000000000000000000000000000000000000000000000000000815295985093965090945073ffffffffffffffffffffffffffffffffffffffff6201000090910481169363eebab8ef936300003dd2935060019216908990600401630001b3d6565b600060405180830381600087803b1580156300003dee57600080fd5b505af11580156300003e04573d6000803e3d6000fd5b505060085473ffffffffffffffffffffffffffffffffffffffff1691506396df5dc090506300003e37846002630001afa3565b6040518263ffffffff1660e01b81526004016300003e5791815260200190565b600060405180830381600087803b1580156300003e7357600080fd5b505af11580156300003e89573d6000803e3d6000fd5b505050506000846fffffffffffffffffffffffffffffffff168460026300003eb39190630001afa3565b6300003ec19190630001b07f565b6300003ee16fffffffffffffffffffffffffffffffff871686630001b07f565b6300003ef0856002630001afa3565b6300003efe9190630001afa3565b6300003f0c9190630001b0cc565b6007546040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301526fffffffffffffffffffffffffffffffff8916602483015260016044830152929350600092909116906394cf073a906064016020604051808303816000875af11580156300003fa5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300003fcd9190630001b064565b90506300004017816300003ff56fffffffffffffffffffffffffffffffff891688630001b07f565b604051806060016040528060248152602001630005457c602491396300017bb8565b63000040f2828473ffffffffffffffffffffffffffffffffffffffff166317d11a156040518163ffffffff1660e01b8152600401602060405180830381865afa158015630000406a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000040929190630001b064565b63000040a390620f4240630001afa3565b63000040b19190630001b0cc565b620f42406040518060400160405280601a81526020017f496e636f72726563742063756d756c617469766520696e64657800000000000081525063000194cc565b63000041aa8373ffffffffffffffffffffffffffffffffffffffff16631afbb7a46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156300004144573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000416c9190630001b064565b826040518060400160405280601881526020017f496e636f727265637420626f72726f776564416d6f756e7400000000000000008152506300017bb8565b63000041d560018483604051806060016040528060238152602001630005447e602391396300017c0a565b600854604080517f29f3d3b6000000000000000000000000000000000000000000000000000000008152905163000042c29273ffffffffffffffffffffffffffffffffffffffff16916329f3d3b69160048083019260209291908290030181865afa158015630000424a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000042729190630001b064565b876fffffffffffffffffffffffffffffffff166040518060400160405280601581526020017f496e636f7272656374206c656e6420616d6f756e7400000000000000000000008152506300017bb8565b600854604080517f2a3354c90000000000000000000000000000000000000000000000000000000081529051630000439d9273ffffffffffffffffffffffffffffffffffffffff1691632a3354c99160048083019260209291908290030181865afa1580156300004337573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000435f9190630001af51565b846040518060400160405280601681526020017f496e636f7272656374206c656e64206163636f756e7400000000000000000000815250630001898a565b505050505050565b60005a60405160200163000043bc91815260200190565b6040516020818303038152906040528051906020012060001c905060005b60288110156300003cbc576000600c821163000043fa5760006300004409565b6300004409600c83630001b154565b9050805b82811163000046ae57630000442263000022dd565b600754604080517f8345f26e000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691638345f26e9160048083019260209291908290030181865afa1580156300004494573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000044bc9190630001b32d565b60ff169050600c8263000044d3866001630001b07f565b63000044e19190630001b154565b111563000044f157506300004696565b600080630000450763000039fa8588630001b154565b91509150600080630000451a6300017b0b565b6000549395509350505062010000900473ffffffffffffffffffffffffffffffffffffffff1663eebab8ef6001836300004557866064630001afa3565b6040518463ffffffff1660e01b8152600401630000457993929190630001b0e6565b600060405180830381600087803b158015630000459557600080fd5b505af115801563000045ab573d6000803e3d6000fd5b50505050600063000045c282868b8a88630001926e565b90508581111563000045d15750845b6007546040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015290911690639537301890602401600060405180830381600087803b158015630000464057600080fd5b505af11580156300004656573d6000803e3d6000fd5b50505050630000468f630000466c836300018f1b565b826040518060600160405280602281526020016300054307602291396300017bb8565b5050505050505b8063000046a481630001b350565b915050630000440d565b5063000046c09050600882630001b07f565b905063000043da565b6001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b158015630000474a57600080fd5b505af11580156300004760573d6000803e3d6000fd5b50506007546040517fdc2b21c100000000000000000000000000000000000000000000000000000000815260ff600482015273ffffffffffffffffffffffffffffffffffffffff909116925063dc2b21c19150602401600060405180830381600087803b15801563000047d257600080fd5b505af115801563000047e8573d6000803e3d6000fd5b5050505063000023cf600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638345f26e6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156300004860573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000048889190630001b32d565b60ff1660ff6040518060400160405280601c81526020017f496e636f7272656374206d617820656e61626c656420746f6b656e73000000008152506300017bb8565b63000048d66300017b0b565b50506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f700ca0af00000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff909116925063c31eb0e09150602401600060405180830381600087803b158015630000496757600080fd5b505af1158015630000497d573d6000803e3d6000fd5b50506007546040517f46fb371d00000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273c4375b7de8af5a38a93548eb8453a498222c4ff260248201819052604482015260648082015273ffffffffffffffffffffffffffffffffffffffff90911692506346fb371d91506084015b600060405180830381600087803b158015630000363357600080fd5b600180546040517f4c63e56200000000000000000000000000000000000000000000000000000000815260ff84169290921115600483015273ffffffffffffffffffffffffffffffffffffffff1690634c63e56290602401600060405180830381600087803b1580156300004a9e57600080fd5b505af11580156300004ab4573d6000803e3d6000fd5b5050505060006300004ac66300017b0b565b600080546040517f67b4264500000000000000000000000000000000000000000000000000000000815292965090945062010000900473ffffffffffffffffffffffffffffffffffffffff1692506367b4264591506300004b2e90600290600401630001b02f565b602060405180830381865afa1580156300004b4d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300004b759190630001af51565b6000546040517feebab8ef00000000000000000000000000000000000000000000000000000000815291925062010000900473ffffffffffffffffffffffffffffffffffffffff169063eebab8ef906300004bdb9060029086908890600401630001b424565b600060405180830381600087803b1580156300004bf757600080fd5b505af11580156300004c0d573d6000803e3d6000fd5b50506007546040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152858116602483015290911692506351e3f1609150604401600060405180830381600087803b1580156300004c8857600080fd5b505af11580156300004c9e573d6000803e3d6000fd5b505050506300004cb2600260016300017d6a565b6007546000546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283169263654a9eda928692869262010000909204909116906367b42645906300004d2590600190600401630001b02f565b602060405180830381865afa1580156300004d44573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300004d6c9190630001af51565b60405160e085901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff938416600482015291831660248301529091166044820152633b9aca0060648201526000608482015260a4015b600060405180830381600087803b1580156300004df657600080fd5b505af11580156300004e0c573d6000803e3d6000fd5b505050506300004e20600260006300017d6a565b505050565b6000806000806300004e376300017b0b565b600080546008546040517f88327863000000000000000000000000000000000000000000000000000000008152969a50949850929650909450926201000090910473ffffffffffffffffffffffffffffffffffffffff908116926388327863926300004eac926001921690600401630001b11f565b602060405180830381865afa1580156300004ecb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300004ef39190630001b064565b905060006300004f0e670de0b6b3a76400006064630001afa3565b9050600080808089896300004f258a83630001afa3565b6300004f339190630001b0cc565b6300004f419190630001b154565b90506000806000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639af1d35a6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156300004fb7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300004fdf9190630001b171565b50929550909350915060009050612710630000500161ffff861687630001afa3565b630000500f9190630001b0cc565b905080858f63000050229190630001b07f565b63000050309190630001b07f565b965063000050408383630001b463565b61ffff1661271063000050558b8a630001b07f565b63000050639190630001afa3565b63000050719190630001b0cc565b95506000612710630000508a61ffff861689630001afa3565b63000050989190630001b0cc565b905063000050a88189630001b07f565b975063000050b88183630001b07f565b6000546040517feebab8ef000000000000000000000000000000000000000000000000000000008152919a5062010000900473ffffffffffffffffffffffffffffffffffffffff16965063eebab8ef95506300005138945060019350733c44cdddb6a900fa2b585dd299e03d12fa4293bc9250879150600401630001b0e6565b600060405180830381600087803b158015630000515457600080fd5b505af1158015630000516a573d6000803e3d6000fd5b5050505063000051c9600173f39fd6e51aad88f6f4ce6ab8827279cfffb9226660006040518060400160405280601981526020017f5553455220686173206e6f6e2d7a65726f2062616c616e6365000000000000008152506300017c0a565b630000522460017390f79bf6eb2c4f870365e785982e1f101e93b90660006040518060400160405280601b81526020017f465249454e4420686173206e6f6e2d7a65726f2062616c616e636500000000008152506300017c0a565b63000052636001733c44cdddb6a900fa2b585dd299e03d12fa4293bc8360405180606001604052806028815260200163000542bc602891396300017c0a565b630000528e6001878b6040518060600160405280602b8152602001630005462e602b91396300017c0a565b60015460085460408051602481018d905260448101879052600060648083019190915282518083039091018152608490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fca9505e40000000000000000000000000000000000000000000000000000000017905290517fbd6af43400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9384169363bd6af43493630000536193911691600401630001b27c565b600060405180830381600087803b158015630000537d57600080fd5b505af11580156300005393573d6000803e3d6000fd5b50506007546040517f2362a2d80000000000000000000000000000000000000000000000000000000081526000935073ffffffffffffffffffffffffffffffffffffffff9091169150632362a2d890630000543d9073f39fd6e51aad88f6f4ce6ab8827279cfffb92266906001908790733c44cdddb6a900fa2b585dd299e03d12fa4293bc907390f79bf6eb2c4f870365e785982e1f101e93b9069089908190600401630001b2cd565b6020604051808303816000875af1158015630000545e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000054869190630001b064565b905063000054da630000549b8287630001b154565b60026040518060400160405280601981526020017f496e636f72726563742072656d61696e696e672066756e64730000000000000081525063000194cc565b630000552160018860016040518060400160405280601b81526020017f437265646974206163636f756e742062616c616e636520213d203100000000008152506300017c0a565b6300005560600173f39fd6e51aad88f6f4ce6ab8827279cfffb92266836040518060600160405280602b81526020016300054659602b91396300017c0a565b60085463000055909060019073ffffffffffffffffffffffffffffffffffffffff166300001a16868a630001b07f565b6300001afe6001733c44cdddb6a900fa2b585dd299e03d12fa4293bc600184878f8863000055c09190630001b07f565b63000055ce9190630001b154565b63000055dc9190630001b154565b63000055ea9190630001b154565b6040518060600160405280602a8152602001630005439a602a91396300017c0a565b6001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b158015630000568d57600080fd5b505af115801563000056a3573d6000803e3d6000fd5b50506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f700ca0af00000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff909116925063c31eb0e09150602401600060405180830381600087803b158015630000573457600080fd5b505af1158015630000574a573d6000803e3d6000fd5b50506007546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff260048201526104b0602482015273ffffffffffffffffffffffffffffffffffffffff909116925063a70bc54291506044016300004a0e565b63000057ce6300017b0b565b50506001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b158015630000585357600080fd5b505af11580156300005869573d6000803e3d6000fd5b50506007546040517f6e98e5e400000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff260048201527390f79bf6eb2c4f870365e785982e1f101e93b906602482015273ffffffffffffffffffffffffffffffffffffffff9091169250636e98e5e49150604401600060405180830381600087803b158015630000590857600080fd5b505af1158015630000591e573d6000803e3d6000fd5b50506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fad40d9e900000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff909116925063c31eb0e09150602401600060405180830381600087803b15801563000059af57600080fd5b505af115801563000059c5573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff2600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b1580156300005a4a57600080fd5b505af11580156300005a60573d6000803e3d6000fd5b50506007546040517f46fb371d00000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273c4375b7de8af5a38a93548eb8453a498222c4ff260248201819052604482015260648082015273ffffffffffffffffffffffffffffffffffffffff90911692506346fb371d9150608401600060405180830381600087803b1580156300005b0c57600080fd5b505af11580156300005b22573d6000803e3d6000fd5b50506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fad40d9e900000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff909116925063c31eb0e09150602401600060405180830381600087803b1580156300005bb357600080fd5b505af11580156300005bc9573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff2600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b1580156300005c4e57600080fd5b505af11580156300005c64573d6000803e3d6000fd5b50506007546040517f46fb371d00000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660048201526000602482015273c4375b7de8af5a38a93548eb8453a498222c4ff2604482015260648082015273ffffffffffffffffffffffffffffffffffffffff90911692506346fb371d91506084016300004a0e565b600754604080517f2f7a188100000000000000000000000000000000000000000000000000000000815290516300005d709273ffffffffffffffffffffffffffffffffffffffff1691632f7a18819160048083019260209291908290030181865afa1580156300002af3573d6000803e3d6000fd5b6001546040517f06447d5600000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116906306447d5690602401600060405180830381600087803b1580156300005df157600080fd5b505af11580156300005e07573d6000803e3d6000fd5b50506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd8026b2200000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff909116925063c31eb0e09150602401600060405180830381600087803b1580156300005e9857600080fd5b505af11580156300005eae573d6000803e3d6000fd5b50506007546040517f8fe3f93f00000000000000000000000000000000000000000000000000000000815262030d40600482015230602482015273ffffffffffffffffffffffffffffffffffffffff9091169250638fe3f93f91506044016020604051808303816000875af11580156300005f2d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300005f559190630001af51565b506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd8026b2200000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063c31eb0e090602401600060405180830381600087803b1580156300005fe357600080fd5b505af11580156300005ff9573d6000803e3d6000fd5b50506007546040517f2362a2d800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169250632362a2d8915063000060999073c4375b7de8af5a38a93548eb8453a498222c4ff290600190600090839081907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff908490600401630001b2cd565b6020604051808303816000875af115801563000060ba573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000060e29190630001b064565b506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd8026b2200000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063c31eb0e090602401600060405180830381600087803b158015630000617057600080fd5b505af11580156300006186573d6000803e3d6000fd5b50506007546040517f94cf073a00000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff260048201526064602482018190526001604483015273ffffffffffffffffffffffffffffffffffffffff90921693506394cf073a9250016020604051808303816000875af1158015630000621e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000062469190630001b064565b506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd8026b2200000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063c31eb0e090602401600060405180830381600087803b15801563000062d457600080fd5b505af115801563000062ea573d6000803e3d6000fd5b50506007546040517f830aa74500000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff26004820181905260248201819052604482015260648082015273ffffffffffffffffffffffffffffffffffffffff909116925063830aa7459150608401600060405180830381600087803b158015630000638357600080fd5b505af11580156300006399573d6000803e3d6000fd5b50506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd8026b2200000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff909116925063c31eb0e09150602401600060405180830381600087803b158015630000642a57600080fd5b505af11580156300006440573d6000803e3d6000fd5b50506007546040517fe1998cf900000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff260048201819052602482015273ffffffffffffffffffffffffffffffffffffffff909116925063e1998cf99150604401600060405180830381600087803b15801563000064cc57600080fd5b505af115801563000064e2573d6000803e3d6000fd5b50506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd8026b2200000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff909116925063c31eb0e09150602401600060405180830381600087803b158015630000657357600080fd5b505af11580156300006589573d6000803e3d6000fd5b50506007546040517f29df0b9300000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff2600482015273ffffffffffffffffffffffffffffffffffffffff90911692506329df0b9391506024016300003591565b600063000066076300017b0b565b600080546040517f67b4264500000000000000000000000000000000000000000000000000000000815292965090945062010000900473ffffffffffffffffffffffffffffffffffffffff1692506367b426459150630000666f90600290600401630001b02f565b602060405180830381865afa158015630000668e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000066b69190630001af51565b905063000066c8600260006300017d6a565b6007546040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301528381166024830152909116906351e3f16090604401600060405180830381600087803b158015630000673f57600080fd5b505af11580156300006755573d6000803e3d6000fd5b505050506300006769600260016300017d6a565b6007546040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301528381166024830152909116906351e3f16090604401600060405180830381600087803b15801563000067e057600080fd5b505af115801563000067f6573d6000803e3d6000fd5b505050506300003cbc600260016300017d6a565b6001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015261221d916104d1916104c4916104c591611e619173ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b158015630000689d57600080fd5b505af115801563000068b3573d6000803e3d6000fd5b50506007546040517f944ac59f00000000000000000000000000000000000000000000000000000000815261ffff808a1660048301528089166024830152808816604483015280871660648301528516608482015273ffffffffffffffffffffffffffffffffffffffff909116925063944ac59f915060a401600060405180830381600087803b158015630000694857600080fd5b505af1158015630000695e573d6000803e3d6000fd5b505050506000806000806000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639af1d35a6040518163ffffffff1660e01b815260040160a060405180830381865afa15801563000069d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300006a019190630001b171565b945094509450945094506300006a578561ffff168b61ffff166040518060400160405280601581526020017f496e636f727265637420666565496e74657265737400000000000000000000008152506300017bb8565b6300006aa38461ffff168a61ffff166040518060400160405280601881526020017f496e636f7272656374206665654c69717569646174696f6e00000000000000008152506300017bb8565b6300006aef8361ffff168961ffff166040518060400160405280601d81526020017f496e636f7272656374206c69717569646174696f6e446973636f756e740000008152506300017bb8565b6300006b3b8261ffff168861ffff166040518060400160405280601f81526020017f496e636f7272656374206665654c69717569646174696f6e45787069726564008152506300017bb8565b6300001afe8161ffff168761ffff1660405180606001604052806023815260200163000542e4602391396300017bb8565b6001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb5ba4c4d00000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063c31eb0e090602401600060405180830381600087803b1580156300006bf957600080fd5b505af11580156300006c0f573d6000803e3d6000fd5b50506007546040517fe958b70400000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063e958b7049150602401602060405180830381865afa1580156300006c97573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300006cbf9190630001af51565b506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb5ba4c4d00000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063c31eb0e090602401600060405180830381600087803b1580156300006d4d57600080fd5b505af11580156300006d63573d6000803e3d6000fd5b50506007546040517f2362a2d800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169250632362a2d891506300006e179073f39fd6e51aad88f6f4ce6ab8827279cfffb922669060019060009073c4375b7de8af5a38a93548eb8453a498222c4ff29081907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff908490600401630001b2cd565b6020604051808303816000875af11580156300006e38573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300006e609190630001b064565b506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb5ba4c4d00000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063c31eb0e090602401600060405180830381600087803b1580156300006eee57600080fd5b505af11580156300006f04573d6000803e3d6000fd5b50506007546040517fe1998cf900000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273c4375b7de8af5a38a93548eb8453a498222c4ff2602482015273ffffffffffffffffffffffffffffffffffffffff909116925063e1998cf99150604401600060405180830381600087803b1580156300006fa357600080fd5b505af11580156300006fb9573d6000803e3d6000fd5b5050600080546040517f67b4264500000000000000000000000000000000000000000000000000000000815291935062010000900473ffffffffffffffffffffffffffffffffffffffff1691506367b4264590630000701f90600190600401630001b02f565b602060405180830381865afa158015630000703e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000070669190630001af51565b6001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb5ba4c4d00000000000000000000000000000000000000000000000000000000600482015291925073ffffffffffffffffffffffffffffffffffffffff169063c31eb0e090602401600060405180830381600087803b15801563000070f457600080fd5b505af1158015630000710a573d6000803e3d6000fd5b50506007546040517f46fb371d00000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273c4375b7de8af5a38a93548eb8453a498222c4ff2602482015273ffffffffffffffffffffffffffffffffffffffff858116604483015260648083015290911692506346fb371d9150608401600060405180830381600087803b15801563000071b757600080fd5b505af115801563000071cd573d6000803e3d6000fd5b50506001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b158015630000725257600080fd5b505af11580156300007268573d6000803e3d6000fd5b50506007546040517f6e98e5e400000000000000000000000000000000000000000000000000000000815230600482015273c4375b7de8af5a38a93548eb8453a498222c4ff2602482015273ffffffffffffffffffffffffffffffffffffffff9091169250636e98e5e49150604401600060405180830381600087803b15801563000072f357600080fd5b505af11580156300007309573d6000803e3d6000fd5b50506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb5ba4c4d00000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff909116925063c31eb0e09150602401600060405180830381600087803b158015630000739a57600080fd5b505af115801563000073b0573d6000803e3d6000fd5b5050600754604080518082018252600281527f6464000000000000000000000000000000000000000000000000000000000000602082015290517f6ce4074a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169350636ce4074a9250630000746a9173f39fd6e51aad88f6f4ce6ab8827279cfffb922669173c4375b7de8af5a38a93548eb8453a498222c4ff291600401630001b48c565b6000604051808303816000875af1158015630000748b573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526300003cbc9190810190630001b59c565b600063000074e36300017b0b565b600080546040517f67b4264500000000000000000000000000000000000000000000000000000000815292965090945062010000900473ffffffffffffffffffffffffffffffffffffffff1692506367b426459150630000754b90600290600401630001b02f565b602060405180830381865afa158015630000756a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000075929190630001af51565b600b546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152929350600092909116906370a0823190602401602060405180830381865afa158015630000760a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000076329190630001b064565b6007546040517f3e8297ca00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015292935063000076fa9290911690633e8297ca906024015b602060405180830381865afa15801563000076ae573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000076d69190630001b064565b60006040518060600160405280602281526020016300054329602291396300017bb8565b6001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b158015630000777b57600080fd5b505af11580156300007791573d6000803e3d6000fd5b50506007546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152610fa06024830152909116925063a70bc5429150604401600060405180830381600087803b158015630000780c57600080fd5b505af11580156300007822573d6000803e3d6000fd5b50506001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b15801563000078a757600080fd5b505af115801563000078bd573d6000803e3d6000fd5b5050600754600b546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015261138860248201529116925063a70bc5429150604401600060405180830381600087803b158015630000793a57600080fd5b505af11580156300007950573d6000803e3d6000fd5b5050600754600b5473ffffffffffffffffffffffffffffffffffffffff918216935063654a9eda9250869186911664012a05f200630000799c670de0b6b3a7640000610fa0630001afa3565b63000079aa9088630001b154565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b16815273ffffffffffffffffffffffffffffffffffffffff958616600482015293851660248501529390911660448301526064820152608481019190915260a401600060405180830381600087803b1580156300007a3057600080fd5b505af11580156300007a46573d6000803e3d6000fd5b50506007546040517f3e8297ca00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301526300004e2094509091169150633e8297ca90602401602060405180830381865afa1580156300007ac2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300007aea9190630001b064565b60006040518060600160405280602581526020016300054723602591396300017bb8565b6000806300007b1d6300017b0b565b6000546040517feebab8ef00000000000000000000000000000000000000000000000000000000815294965090945062010000900473ffffffffffffffffffffffffffffffffffffffff169263eebab8ef92506300007b88915060019085908790600401630001b0e6565b600060405180830381600087803b1580156300007ba457600080fd5b505af11580156300007bba573d6000803e3d6000fd5b505060005462010000900473ffffffffffffffffffffffffffffffffffffffff16915063eebab8ef90506003836300007bfd670de0b6b3a764000083630001afa3565b6040518463ffffffff1660e01b81526004016300007c1f93929190630001b0e6565b600060405180830381600087803b1580156300007c3b57600080fd5b505af11580156300007c51573d6000803e3d6000fd5b50506007546000546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831694506351e3f1609350859262010000909204909116906367b42645906300007cc690600390600401630001b02f565b602060405180830381865afa1580156300007ce5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300007d0d9190630001af51565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156300007d7c57600080fd5b505af11580156300007d92573d6000803e3d6000fd5b50506007546040517f2362a2d800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169250632362a2d891506300007e3a9073f39fd6e51aad88f6f4ce6ab8827279cfffb92266906001908790733c44cdddb6a900fa2b585dd299e03d12fa4293bc907390f79bf6eb2c4f870365e785982e1f101e93b906906000908590600401630001b2cd565b6020604051808303816000875af11580156300007e5b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300007e839190630001b064565b506300007e9560038260016300017d4b565b6300003cbc7390f79bf6eb2c4f870365e785982e1f101e93b90660016300007ec8670de0b6b3a76400006003630001afa3565b6300007ed69190630001b154565b60405180606001604052806037815260200163000545f760379139630001951f565b60006300007f066300017b0b565b6000546040517f6a72bde700000000000000000000000000000000000000000000000000000000815291955062010000900473ffffffffffffffffffffffffffffffffffffffff169350636a72bde792506300007f869150600190859073c4375b7de8af5a38a93548eb8453a498222c4ff29060c890600401630001b5ef565b600060405180830381600087803b1580156300007fa257600080fd5b505af11580156300007fb8573d6000803e3d6000fd5b50506007546000546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831694506346fb371d935073f39fd6e51aad88f6f4ce6ab8827279cfffb922669273c4375b7de8af5a38a93548eb8453a498222c4ff29262010000900416906367b4264590630000805490600190600401630001b02f565b602060405180830381865afa1580156300008073573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000809b9190630001af51565b600263000080b5670de0b6b3a7640000614e20630001afa3565b63000080c39190630001b0cc565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b16815273ffffffffffffffffffffffffffffffffffffffff94851660048201529284166024840152921660448201526064810191909152608401600060405180830381600087803b158015630000814257600080fd5b505af11580156300008158573d6000803e3d6000fd5b505050506300002a7b60018273c4375b7de8af5a38a93548eb8453a498222c4ff26002670de0b6b3a7640000614e2063000081959190630001afa3565b63000081a39190630001b0cc565b63000195cb565b600754604080517f9af1d35a000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691639af1d35a9160048083019260a09291908290030181865afa158015630000821c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000082449190630001b171565b50506001549193505073ffffffffffffffffffffffffffffffffffffffff169050634c63e562831580159063000082a457506127106300008293670de0b6b3a764000061ffff8616630001afa3565b63000082a19190630001b0cc565b84105b6040518263ffffffff1660e01b815260040163000082c6911515815260200190565b600060405180830381600087803b15801563000082e257600080fd5b505af115801563000082f8573d6000803e3d6000fd5b505050506000630000830a6300017b0b565b600080546040517f67b4264500000000000000000000000000000000000000000000000000000000815292965090945062010000900473ffffffffffffffffffffffffffffffffffffffff1692506367b426459150630000837290600290600401630001b02f565b602060405180830381865afa1580156300008391573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000083b99190630001af51565b600b546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152929350600092909116906370a0823190602401602060405180830381865afa1580156300008431573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000084599190630001b064565b600754600b546040517f7832743800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152929350600092911690637832743890602401602060405180830381865afa15801563000084d3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000084fb9190630001b041565b6001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291925073ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b158015630000857d57600080fd5b505af11580156300008593573d6000803e3d6000fd5b50506007546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015261ffff86166024830152909116925063a70bc5429150604401600060405180830381600087803b158015630000861057600080fd5b505af11580156300008626573d6000803e3d6000fd5b505050506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015630000869b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000086c39190630001af51565b600b546040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff918216602482015291169063f9a6503090604401602060405180830381865afa158015630000873b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000087639190630001b064565b905060006b033b2e3c9fd0803ce80000008263000087838a83630001b154565b63000087919190630001afa3565b630000879f9190630001b0cc565b90506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156300008812573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000883a9190630001af51565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810184905273ffffffffffffffffffffffffffffffffffffffff88811660248301529190911690637afb010490604401602060405180830381865afa15801563000088b1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000088d99190630001b064565b6000546040517feebab8ef00000000000000000000000000000000000000000000000000000000815291925062010000900473ffffffffffffffffffffffffffffffffffffffff169063eebab8ef90630000893f906002908b908690600401630001b0e6565b600060405180830381600087803b158015630000895b57600080fd5b505af11580156300008971573d6000803e3d6000fd5b5050600054600754604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff620100009094048416955063eebab8ef94506004938d931691632630c12f918186019160209190819003870181865afa15801563000089fa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300008a229190630001af51565b6000546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831692637afb0104928d9262010000909104909116906367b42645906300008a8f906004908101630001b02f565b602060405180830381865afa1580156300008aae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300008ad69190630001af51565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168152600481019290925273ffffffffffffffffffffffffffffffffffffffff166024820152604401602060405180830381865afa1580156300008b47573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300008b6f9190630001b064565b6040518463ffffffff1660e01b81526004016300008b9193929190630001b0e6565b600060405180830381600087803b1580156300008bad57600080fd5b505af11580156300008bc3573d6000803e3d6000fd5b50506007546000546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831694506351e3f16093508b9262010000909204909116906367b42645906300008c37906004908101630001b02f565b602060405180830381865afa1580156300008c56573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300008c7e9190630001af51565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156300008ced57600080fd5b505af11580156300008d03573d6000803e3d6000fd5b50505050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156300008d76573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300008d9e9190630001af51565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff8881166024830152919091169063f9a6503090604401602060405180830381865afa1580156300008e15573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300008e3d9190630001b064565b9150826300008e5a6b033b2e3c9fd0803ce800000084630001afa3565b6300008e689190630001b0cc565b6300008e82906b033b2e3c9fd0803ce8000000630001b154565b6000546040517f8eb86e8b000000000000000000000000000000000000000000000000000000008152919a5062010000900473ffffffffffffffffffffffffffffffffffffffff1690638eb86e8b906300008ee8906001908b908a90600401630001b0e6565b600060405180830381600087803b1580156300008f0457600080fd5b505af11580156300008f1a573d6000803e3d6000fd5b505050506000898961ffff166300008f349190630001b0cc565b6300008f43906002630001b07f565b90506000805b82811015630000914b576300008f618c83630001b07f565b91506127106300008f846b033b2e3c9fd0803ce800000061ffff8e16630001afa3565b6300008f929190630001b0cc565b8211156300008fac576300008fa763000195eb565b600191505b600754600b546040517f654a9eda00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8d8116600483015291821660248201528b82166044820152606481018b90526000608482015291169063654a9eda9060a401600060405180830381600087803b158015630000903b57600080fd5b505af11580156300009051573d6000803e3d6000fd5b50506007546040517f3e8297ca00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8e81166004830152630000913394509091169150633e8297ca90602401602060405180830381865afa15801563000090cd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000090f59190630001b064565b836040518060400160405280601981526020017f496e636f72726563742063756d756c61746976652064726f70000000000000008152506300017bb8565b80630000914181630001b350565b9150506300008f49565b505050505050505050505050565b600754604080517f2f7a1881000000000000000000000000000000000000000000000000000000008152905163000091ce9273ffffffffffffffffffffffffffffffffffffffff1691632f7a18819160048083019260209291908290030181865afa1580156300002af3573d6000803e3d6000fd5b6001546040517f06447d5600000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116906306447d5690602401600060405180830381600087803b158015630000924f57600080fd5b505af11580156300009265573d6000803e3d6000fd5b50506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fad40d9e900000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff909116925063c31eb0e09150602401600060405180830381600087803b15801563000092f657600080fd5b505af1158015630000930c573d6000803e3d6000fd5b50506007546040517f46fb371d00000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff26004820181905260248201819052604482015260648082015273ffffffffffffffffffffffffffffffffffffffff90911692506346fb371d9150608401600060405180830381600087803b15801563000093a557600080fd5b505af115801563000093bb573d6000803e3d6000fd5b50506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f5d2e3a7400000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff909116925063c31eb0e09150602401600060405180830381600087803b158015630000944c57600080fd5b505af11580156300009462573d6000803e3d6000fd5b5050600754604080518082018252600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290517f6ce4074a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169350636ce4074a925063000095089173c4375b7de8af5a38a93548eb8453a498222c4ff2918291600401630001b48c565b6000604051808303816000875af11580156300009529573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405263000095739190810190630001b59c565b506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fad40d9e900000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063c31eb0e090602401600060405180830381600087803b158015630000960157600080fd5b505af11580156300009617573d6000803e3d6000fd5b50506007546040517f51e3f16000000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff260048201819052602482015273ffffffffffffffffffffffffffffffffffffffff90911692506351e3f1609150604401600060405180830381600087803b15801563000096a357600080fd5b505af115801563000096b9573d6000803e3d6000fd5b50506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fad40d9e900000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff909116925063c31eb0e09150602401600060405180830381600087803b158015630000974a57600080fd5b505af11580156300009760573d6000803e3d6000fd5b50506007546040517f654a9eda00000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff260048201819052602482018190526044820152600060648201819052608482015273ffffffffffffffffffffffffffffffffffffffff909116925063654a9eda915060a401600060405180830381600087803b158015630000980157600080fd5b505af11580156300009817573d6000803e3d6000fd5b50506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fad40d9e900000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff909116925063c31eb0e09150602401600060405180830381600087803b15801563000098a857600080fd5b505af115801563000098be573d6000803e3d6000fd5b50506007546040517f9537301800000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff2600482015273ffffffffffffffffffffffffffffffffffffffff9091169250639537301891506024016300003591565b630000993d6001806300018266565b6000630000994b6300017b0b565b600080546040517f67b4264500000000000000000000000000000000000000000000000000000000815292965090945062010000900473ffffffffffffffffffffffffffffffffffffffff1692506367b42645915063000099b390600290600401630001b02f565b602060405180830381865afa15801563000099d2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000099fa9190630001af51565b6007546040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015280841660248301529293509116906351e3f16090604401600060405180830381600087803b1580156300009a7357600080fd5b505af11580156300009a89573d6000803e3d6000fd5b505050506300009a9d600260016300017d6a565b6007546040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301528381166024830152909116908190630d8f9cee90604401600060405180830381600087803b1580156300009b1657600080fd5b505af11580156300009b2c573d6000803e3d6000fd5b505050506300009b40600260006300017d6a565b6040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301528381166024830152821690630d8f9cee906044016300004dda565b6000806300009bad6300017b0b565b9350505091506300009d14600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639068a8686040518163ffffffff1660e01b8152600401602060405180830381865afa1580156300009c27573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300009c4f9190630001af51565b73ffffffffffffffffffffffffffffffffffffffff166313d8c8406040518163ffffffff1660e01b8152600401602060405180830381865afa1580156300009c9b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300009cc39190630001af51565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141560405180606001604052806022815260200163000546aa60229139630001893b565b6000546040517feebab8ef0000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff169063eebab8ef906300009d789060019085908790600401630001b0e6565b600060405180830381600087803b1580156300009d9457600080fd5b505af11580156300009daa573d6000803e3d6000fd5b50506001805473ffffffffffffffffffffffffffffffffffffffff169250631f7b4f3091506300009dde904390630001b07f565b6040518263ffffffff1660e01b81526004016300009dfe91815260200190565b600060405180830381600087803b1580156300009e1a57600080fd5b505af11580156300009e30573d6000803e3d6000fd5b50506007546040517f2362a2d800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169250632362a2d891506300009eaf9073f39fd6e51aad88f6f4ce6ab8827279cfffb922669060009081908390819083908190600401630001b2cd565b6020604051808303816000875af11580156300009ed0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300009ef89190630001b064565b50630000a02c81600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639068a8686040518163ffffffff1660e01b8152600401602060405180830381865afa1580156300009f6e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300009f969190630001af51565b73ffffffffffffffffffffffffffffffffffffffff166313d8c8406040518163ffffffff1660e01b8152600401602060405180830381865afa1580156300009fe2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000a00a9190630001af51565b6040518060600160405280602d815260200163000545a0602d9139630001898a565b6001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb5ba4c4d00000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063c31eb0e090602401600060405180830381600087803b158015630000a0b957600080fd5b505af1158015630000a0cf573d6000803e3d6000fd5b50506007546040517fe958b70400000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063e958b7049150602401602060405180830381865afa158015630000a157573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300004e209190630001af51565b600080600080630000a1916300017b0b565b600080546008546040517f88327863000000000000000000000000000000000000000000000000000000008152969a50949850929650909450926201000090910473ffffffffffffffffffffffffffffffffffffffff90811692638832786392630000a206926001921690600401630001b11f565b602060405180830381865afa158015630000a225573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000a24d9190630001b064565b6000546040517feebab8ef00000000000000000000000000000000000000000000000000000000815291925062010000900473ffffffffffffffffffffffffffffffffffffffff169063eebab8ef90630000a2b39060019086908a90600401630001b0e6565b600060405180830381600087803b158015630000a2cf57600080fd5b505af1158015630000a2e5573d6000803e3d6000fd5b50505050600085858588630000a2fd9190630001afa3565b630000a30b9190630001b0cc565b630000a3199190630001b154565b90506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639af1d35a6040518163ffffffff1660e01b815260040160a060405180830381865afa158015630000a38c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000a3b49190630001b171565b505050509050600061271061ffff168261ffff1684630000a3d79190630001afa3565b630000a3e59190630001b0cc565b9050600081630000a3f8858b630001b07f565b630000a4069190630001b07f565b60015460085460408051602481018e905260448101879052600060648083019190915282518083039091018152608490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fca9505e40000000000000000000000000000000000000000000000000000000017905290517fbd6af43400000000000000000000000000000000000000000000000000000000815293945073ffffffffffffffffffffffffffffffffffffffff9283169363bd6af43493630000a4dc93169190600401630001b27c565b600060405180830381600087803b158015630000a4f857600080fd5b505af1158015630000a50e573d6000803e3d6000fd5b50506007546040517f2362a2d80000000000000000000000000000000000000000000000000000000081526000935073ffffffffffffffffffffffffffffffffffffffff9091169150632362a2d890630000a5a39073f39fd6e51aad88f6f4ce6ab8827279cfffb92266908590819083907390f79bf6eb2c4f870365e785982e1f101e93b9069083908190600401630001b2cd565b6020604051808303816000875af1158015630000a5c4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000a5ec9190630001b064565b9050630000a6338160006040518060400160405280601c81526020017f52656d61696e696e672066756e6473206973206e6f74207a65726f21000000008152506300017bb8565b630000a64460018860016300017d4b565b600854630000a6749060019073ffffffffffffffffffffffffffffffffffffffff166300001a16858a630001b07f565b6300001afe60017390f79bf6eb2c4f870365e785982e1f101e93b90681856300001a4a8f6002630001afa3565b630000a6ad6300017b0b565b50506007546040517f8fe3f93f000000000000000000000000000000000000000000000000000000008152600160048201527390f79bf6eb2c4f870365e785982e1f101e93b906602482015273ffffffffffffffffffffffffffffffffffffffff9091169250638fe3f93f91506044016020604051808303816000875af1158015630000a73e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000a7669190630001af51565b506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f9e59609e00000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063c31eb0e090602401600060405180830381600087803b158015630000a7f457600080fd5b505af1158015630000a80a573d6000803e3d6000fd5b50506007546040517fe1998cf900000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660048201526000602482015273ffffffffffffffffffffffffffffffffffffffff909116925063e1998cf99150604401600060405180830381600087803b158015630000a89657600080fd5b505af1158015630000a8ac573d6000803e3d6000fd5b50506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f9e59609e00000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff909116925063c31eb0e09150602401600060405180830381600087803b158015630000a93d57600080fd5b505af1158015630000a953573d6000803e3d6000fd5b50506007546040517fe1998cf90000000000000000000000000000000000000000000000000000000081527390f79bf6eb2c4f870365e785982e1f101e93b906600482015273f39fd6e51aad88f6f4ce6ab8827279cfffb92266602482015273ffffffffffffffffffffffffffffffffffffffff909116925063e1998cf991506044016300004a0e565b6001546040517f4c63e562000000000000000000000000000000000000000000000000000000008152670de0b6b3a76400006fffffffffffffffffffffffffffffffff8b1611600482015273ffffffffffffffffffffffffffffffffffffffff90911690634c63e56290602401600060405180830381600087803b158015630000aa6657600080fd5b505af1158015630000aa7c573d6000803e3d6000fd5b50506000546008546040517feebab8ef00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff620100009093048316945063eebab8ef9350630000aae89260019216908d90600401630001b3d6565b600060405180830381600087803b158015630000ab0457600080fd5b505af1158015630000ab1a573d6000803e3d6000fd5b50506002546040517f7d6bc0940000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff8c1660048201526000935073ffffffffffffffffffffffffffffffffffffffff9091169150637d6bc094906024016080604051808303816000875af1158015630000aba5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000abcd9190630001b38f565b9350505050886fffffffffffffffffffffffffffffffff16886fffffffffffffffffffffffffffffffff161115630000ac945760005462010000900473ffffffffffffffffffffffffffffffffffffffff1663eebab8ef600183630000ac358d8d630001b635565b6040518463ffffffff1660e01b8152600401630000ac5793929190630001b3d6565b600060405180830381600087803b158015630000ac7357600080fd5b505af1158015630000ac89573d6000803e3d6000fd5b50505050630000ad22565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff16638eb86e8b600183630000acc98c8e630001b635565b6040518463ffffffff1660e01b8152600401630000aceb93929190630001b3d6565b600060405180830381600087803b158015630000ad0757600080fd5b505af1158015630000ad1d573d6000803e3d6000fd5b505050505b630000ad446001828a6fffffffffffffffffffffffffffffffff166300017d4b565b630000ad666002886fffffffffffffffffffffffffffffffff16866300019885565b630000ad886004876fffffffffffffffffffffffffffffffff16856300019885565b630000adaa6003866fffffffffffffffffffffffffffffffff16846300019885565b6002546040517f0c75f806000000000000000000000000000000000000000000000000000000008152600091670de0b6b3a76400009173ffffffffffffffffffffffffffffffffffffffff90911690630c75f80690630000ae1290600190600401630001b02f565b602060405180830381865afa158015630000ae31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000ae599190630001b041565b61ffff16600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638a3177a360016040518263ffffffff1660e01b8152600401630000aebd9190630001b02f565b602060405180830381865afa158015630000aedc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000af049190630001b064565b6000546040517f883278630000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff1690638832786390630000af66906001908990600401630001b11f565b602060405180830381865afa158015630000af85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000afad9190630001b064565b630000afbb9190630001afa3565b630000afc99190630001afa3565b630000afd79190630001b0cc565b90508415630000b20c57600280546040517f0c75f806000000000000000000000000000000000000000000000000000000008152620f42409273ffffffffffffffffffffffffffffffffffffffff90921691630c75f80691630000b0409190600401630001b02f565b602060405180830381865afa158015630000b05f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000b0879190630001b041565b61ffff16600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638a3177a360026040518263ffffffff1660e01b8152600401630000b0eb9190630001b02f565b602060405180830381865afa158015630000b10a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000b1329190630001b064565b6000546040517f883278630000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff1690638832786390630000b194906002908990600401630001b11f565b602060405180830381865afa158015630000b1b3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000b1db9190630001b064565b630000b1e99190630001afa3565b630000b1f79190630001afa3565b630000b2059190630001b0cc565b630000b20f565b60005b630000b21d9082630001b07f565b90508315630000b454576002546040517f0c75f806000000000000000000000000000000000000000000000000000000008152670de0b6b3a76400009173ffffffffffffffffffffffffffffffffffffffff1690630c75f80690630000b289906004908101630001b02f565b602060405180830381865afa158015630000b2a8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000b2d09190630001b041565b61ffff16600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638a3177a360046040518263ffffffff1660e01b8152600401630000b3349190630001b02f565b602060405180830381865afa158015630000b353573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000b37b9190630001b064565b6000546040517f883278630000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff1690638832786390630000b3dc9060049089908201630001b11f565b602060405180830381865afa158015630000b3fb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000b4239190630001b064565b630000b4319190630001afa3565b630000b43f9190630001afa3565b630000b44d9190630001b0cc565b630000b457565b60005b630000b4659082630001b07f565b90508215630000b69e576002546040517f0c75f806000000000000000000000000000000000000000000000000000000008152670de0b6b3a76400009173ffffffffffffffffffffffffffffffffffffffff1690630c75f80690630000b4d290600390600401630001b02f565b602060405180830381865afa158015630000b4f1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000b5199190630001b041565b61ffff16600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638a3177a360036040518263ffffffff1660e01b8152600401630000b57d9190630001b02f565b602060405180830381865afa158015630000b59c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000b5c49190630001b064565b6000546040517f883278630000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff1690638832786390630000b626906003908990600401630001b11f565b602060405180830381865afa158015630000b645573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000b66d9190630001b064565b630000b67b9190630001afa3565b630000b6899190630001afa3565b630000b6979190630001b0cc565b630000b6a1565b60005b630000b6af9082630001b07f565b6007546040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015292935060009290911690633192195c906024016040805180830381865afa158015630000b726573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000b74e9190630001b664565b9150506000670de0b6b3a7640000600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638a3177a360016040518263ffffffff1660e01b8152600401630000b7bc9190630001b02f565b602060405180830381865afa158015630000b7db573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000b8039190630001b064565b630000b81361271085630001afa3565b630000b8219190630001afa3565b630000b82f9190630001b0cc565b90508083108015630000b8e4576001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f532e7bb600000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063c31eb0e090602401600060405180830381600087803b158015630000b8c957600080fd5b505af1158015630000b8df573d6000803e3d6000fd5b505050505b6007546040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015290911690639537301890602401600060405180830381600087803b158015630000b95357600080fd5b505af1158015630000b969573d6000803e3d6000fd5b5050505050505050505050505050505050565b60005460085473ffffffffffffffffffffffffffffffffffffffff6201000090920482169163eebab8ef9160019116600a630000b9cc6fffffffffffffffffffffffffffffffff600e630001afa3565b630000b9da9190630001b0cc565b6040518463ffffffff1660e01b8152600401630000b9fc93929190630001b0e6565b600060405180830381600087803b158015630000ba1857600080fd5b505af1158015630000ba2e573d6000803e3d6000fd5b5050600254600092508291508190819073ffffffffffffffffffffffffffffffffffffffff16637d6bc094600a630000ba7a6fffffffffffffffffffffffffffffffff600e630001afa3565b630000ba889190630001b0cc565b6040518263ffffffff1660e01b8152600401630000baa891815260200190565b6080604051808303816000875af1158015630000bac9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000baf19190630001b38f565b6007546040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80841660048301526fffffffffffffffffffffffffffffffff8c166024830152600060448301819052969a5094985092965090945085939216906394cf073a906064016020604051808303816000875af1158015630000bb93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000bbbb9190630001b064565b9050630000bbe3816300003ff56fffffffffffffffffffffffffffffffff8a1689630001b154565b630000bc9b8373ffffffffffffffffffffffffffffffffffffffff166317d11a156040518163ffffffff1660e01b8152600401602060405180830381865afa158015630000bc35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000bc5d9190630001b064565b836040518060400160405280601a81526020017f496e636f72726563742063756d756c617469766520696e6465780000000000008152506300017bb8565b630000bced8373ffffffffffffffffffffffffffffffffffffffff16631afbb7a46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156300004144573d6000803e3d6000fd5b630000bd4f84600a630000bd0488600c630001afa3565b630000bd129190630001b0cc565b6040518060400160405280601f81526020017f546573742069732064657369676e656420666f72203230252067726f777468008152506300017bb8565b6000600a630000bd62886002630001afa3565b630000bd709190630001b0cc565b90506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639af1d35a6040518163ffffffff1660e01b815260040160a060405180830381865afa158015630000bde3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000be0b9190630001b171565b505050509050600061271061ffff168261ffff1684630000be2e9190630001afa3565b630000be3c9190630001b0cc565b90506300001afe60018783868e6fffffffffffffffffffffffffffffffff168e630000be6a9190630001b154565b630000be789190630001b154565b630000be869190630001b154565b604051806060016040528060238152602001630005447e602391396300017c0a565b6000546008546040517feebab8ef0000000000000000000000000000000000000000000000000000000081526201000090920473ffffffffffffffffffffffffffffffffffffffff9081169263eebab8ef92630000bf12926001929116908690600401630001b3d6565b600060405180830381600087803b158015630000bf2e57600080fd5b505af1158015630000bf44573d6000803e3d6000fd5b50506002546040517f7d6bc0940000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff851660048201526000935073ffffffffffffffffffffffffffffffffffffffff9091169150637d6bc094906024016080604051808303816000875af1158015630000bfcf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000bff79190630001b38f565b93505050506000826fffffffffffffffffffffffffffffffff16905060008273ffffffffffffffffffffffffffffffffffffffff166317d11a156040518163ffffffff1660e01b8152600401602060405180830381865afa158015630000c062573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000c08a9190630001b064565b90506000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dbcb313b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015630000c0fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000c1259190630001b064565b9050600082630000c1388386630001afa3565b630000c1469190630001b0cc565b6007546040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015292935060009283921690633192195c906024016040805180830381865afa158015630000c1bd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000c1e59190630001b664565b91509150630000c22d82876040518060400160405280601981526020017f496e636f727265637420626f72726f77656420616d6f756e74000000000000008152506300017bb8565b63000022d381846040518060400160405280601981526020017f496e636f727265637420626f72726f77656420616d6f756e74000000000000008152506300017bb8565b6000630000c27f6300017b0b565b93505050506000604051630000c29690630001ad04565b604051809103906000f080158015630000c2b4573d6000803e3d6000fd5b506001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291925073ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b158015630000c33757600080fd5b505af1158015630000c34d573d6000803e3d6000fd5b50506007546040517fd48bfca700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152909116925063d48bfca79150602401600060405180830381600087803b158015630000c3c057600080fd5b505af1158015630000c3d6573d6000803e3d6000fd5b505060075473ffffffffffffffffffffffffffffffffffffffff1691506346fb371d905073f39fd6e51aad88f6f4ce6ab8827279cfffb9226673c4375b7de8af5a38a93548eb8453a498222c4ff2846002630000c43f670de0b6b3a7640000614e20630001afa3565b630000c44d9190630001b0cc565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b16815273ffffffffffffffffffffffffffffffffffffffff94851660048201529284166024840152921660448201526064810191909152608401600060405180830381600087803b158015630000c4cc57600080fd5b505af1158015630000c4e2573d6000803e3d6000fd5b505060075473ffffffffffffffffffffffffffffffffffffffff1691506346fb371d905073f39fd6e51aad88f6f4ce6ab8827279cfffb9226673c4375b7de8af5a38a93548eb8453a498222c4ff2846002630000c54b670de0b6b3a7640000614e20630001afa3565b630000c5599190630001b0cc565b630000c568906002630001afa3565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b16815273ffffffffffffffffffffffffffffffffffffffff94851660048201529284166024840152921660448201526064810191909152608401600060405180830381600087803b158015630000c5e757600080fd5b505af1158015630000c5fd573d6000803e3d6000fd5b505050506300003cbc818373c4375b7de8af5a38a93548eb8453a498222c4ff26002670de0b6b3a7640000614e20630000c6399190630001afa3565b630000c6479190630001b0cc565b630000c656906002630001afa3565b6300019ae6565b600354604080517f9068a868000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691639068a8689160048083019260209291908290030181865afa158015630000c6cf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000c6f79190630001af51565b73ffffffffffffffffffffffffffffffffffffffff16638f7dcfa36040518163ffffffff1660e01b8152600401602060405180830381865afa158015630000c743573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000c76b9190630001af51565b6008546040517f96df5dc00000000000000000000000000000000000000000000000000000000081526103f46004820181905292935043929173ffffffffffffffffffffffffffffffffffffffff16906396df5dc090602401600060405180830381600087803b158015630000c7e057600080fd5b505af1158015630000c7f6573d6000803e3d6000fd5b50506007546000925073ffffffffffffffffffffffffffffffffffffffff169050638fe3f93f630000c834670de0b6b3a7640000614e20630001afa3565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b168152600481019190915273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660248201526044016020604051808303816000875af1158015630000c8a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000c8ce9190630001af51565b9050630000c8f9818560405180606001604052806021815260200163000544da60219139630001898a565b630000c9ad8173ffffffffffffffffffffffffffffffffffffffff16631afbb7a46040518163ffffffff1660e01b8152600401602060405180830381865afa158015630000c94b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000c9739190630001b064565b630000c98b670de0b6b3a7640000614e20630001afa3565b60405180606001604052806023815260200163000546cc602391396300017bb8565b630000ca658173ffffffffffffffffffffffffffffffffffffffff16633dc54b406040518163ffffffff1660e01b8152600401602060405180830381865afa158015630000c9ff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000ca279190630001b064565b846040518060400160405280601981526020017f496e636f72726563742073696e63652073657420696e204341000000000000008152506300017bb8565b630000cb1d8173ffffffffffffffffffffffffffffffffffffffff166317d11a156040518163ffffffff1660e01b8152600401602060405180830381865afa158015630000cab7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000cadf9190630001b064565b836040518060400160405280601981526020017f496e636f72726563742073696e63652073657420696e204341000000000000008152506300017bb8565b630000cb3d6001826300001a16670de0b6b3a7640000614e20630001afa3565b600854604080517f29f3d3b60000000000000000000000000000000000000000000000000000000081529051630000cc149273ffffffffffffffffffffffffffffffffffffffff16916329f3d3b69160048083019260209291908290030181865afa158015630000cbb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000cbda9190630001b064565b630000cbf2670de0b6b3a7640000614e20630001afa3565b6040518060600160405280602981526020016300054434602991396300017bb8565b600854604080517f2a3354c90000000000000000000000000000000000000000000000000000000081529051630000ccd49273ffffffffffffffffffffffffffffffffffffffff1691632a3354c99160048083019260209291908290030181865afa158015630000cc89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000ccb19190630001af51565b82604051806060016040528060328152602001630005452960329139630001898a565b6007546040517f055ee9b500000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb922666004820152630000cda79173ffffffffffffffffffffffffffffffffffffffff169063055ee9b590602401602060405180830381865afa158015630000cd5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000cd849190630001af51565b826040518060600160405280602a815260200163000545cd602a9139630001898a565b6007546040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526300003649921690638991b2f190602401602060405180830381865afa158015630000ce1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000ce459190630001b064565b60016040518060400160405280601c81526020017f496e636f727265637420656e61626c656420746f6b656e206d61736b000000008152506300017bb8565b630000ce936001806300018266565b60006004630000ceae670de0b6b3a76400006003630001afa3565b630000cebc9190630001b0cc565b604080518082019091527390f79bf6eb2c4f870365e785982e1f101e93b90681527315d34aaf54267db7d7c367839aaf71a00a2c6a65602082015290915060005b60028110156300004e20578015156000838360028110630000cf2557630000cf25630001b68a565b602002015190506000630000cf3a6300017b0b565b60075460005491955073ffffffffffffffffffffffffffffffffffffffff90811694506201000090910416915063eebab8ef9050600384630000cf87670de0b6b3a764000083630001afa3565b6040518463ffffffff1660e01b8152600401630000cfa993929190630001b0e6565b600060405180830381600087803b158015630000cfc557600080fd5b505af1158015630000cfdb573d6000803e3d6000fd5b50506000546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8086169450630d92632d9350869262010000900416906367b4264590630000d04a90600390600401630001b02f565b602060405180830381865afa158015630000d069573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000d0919190630001af51565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015290821660248201529086166044820152606481018a9052861515608482015260a401600060405180830381600087803b158015630000d11857600080fd5b505af1158015630000d12e573d6000803e3d6000fd5b50505050630000d16260038389670de0b6b3a76400006003630000d1549190630001afa3565b6300001a169190630001b154565b8315630000d17f57630000d17883886300019b06565b630000d18f565b630000d18f600384896300017d4b565b6007546040517f2362a2d800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690632362a2d890630000d21f9073f39fd6e51aad88f6f4ce6ab8827279cfffb9226690600190600090733c44cdddb6a900fa2b585dd299e03d12fa4293bc908a9083908190600401630001b2cd565b6020604051808303816000875af1158015630000d240573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000d2689190630001b064565b50505050508080630000d27c90630001b350565b915050630000cefd565b6001546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff909116906306447d5690602401600060405180830381600087803b158015630000d30757600080fd5b505af1158015630000d31d573d6000803e3d6000fd5b505060085460405173ffffffffffffffffffffffffffffffffffffffff9091169250630000d34d9150630001ace6565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103906000f080158015630000d388573d6000803e3d6000fd5b50600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600254604080517f62eb33e3000000000000000000000000000000000000000000000000000000008152905191909216916362eb33e39160048083019260209291908290030181865afa158015630000d427573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000d44f9190630001af51565b6007546040517fe26b2f6300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015291169063e26b2f6390602401600060405180830381600087803b158015630000d4bd57600080fd5b505af1158015630000d4d3573d6000803e3d6000fd5b50506007546009546040517f11ca4fc200000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff9182166024820152911692506311ca4fc29150604401600060405180830381600087803b158015630000d54e57600080fd5b505af1158015630000d564573d6000803e3d6000fd5b5050600754600854604080517f2495a599000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416955063a70bc54294509190921691632495a5999160048083019260209291908290030181865afa158015630000d5e7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000d60f9190630001af51565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff90911660048201526124546024820152604401600060405180830381600087803b158015630000d67f57600080fd5b505af1158015630000d695573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015630000d70557600080fd5b505af1158015630000d71b573d6000803e3d6000fd5b50506007546000925073ffffffffffffffffffffffffffffffffffffffff169050638fe3f93f630000d759670de0b6b3a7640000614e20630001afa3565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b168152600481019190915273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660248201526044016020604051808303816000875af1158015630000d7cb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000d7f39190630001af51565b60005490915062010000900473ffffffffffffffffffffffffffffffffffffffff1663eebab8ef600183630000d835670de0b6b3a7640000614e20630001afa3565b630000d844906002630001afa3565b6040518463ffffffff1660e01b8152600401630000d86693929190630001b0e6565b600060405180830381600087803b158015630000d88257600080fd5b505af1158015630000d898573d6000803e3d6000fd5b50505050630000d8a9816300019b24565b6001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f53275fcb00000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063c31eb0e0906024015b600060405180830381600087803b158015630000d93757600080fd5b505af1158015630000d94d573d6000803e3d6000fd5b50506007546040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152909116925063953730189150602401600060405180830381600087803b158015630000d9c057600080fd5b505af1158015630000d9d6573d6000803e3d6000fd5b5050505050565b630000d9ec6001806300018266565b604080518082019091527390f79bf6eb2c4f870365e785982e1f101e93b90681527315d34aaf54267db7d7c367839aaf71a00a2c6a65602082015260005b60028110156300003cbc578015156000838360028110630000da5257630000da52630001b68a565b60200201519050600080630000da686300017b0b565b6007546000546040517feebab8ef00000000000000000000000000000000000000000000000000000000815295975091955073ffffffffffffffffffffffffffffffffffffffff908116946201000090920416925063eebab8ef9150630000dadf906002908690633b9aca0090600401630001b0e6565b600060405180830381600087803b158015630000dafb57600080fd5b505af1158015630000db11573d6000803e3d6000fd5b505060005462010000900473ffffffffffffffffffffffffffffffffffffffff16915063eebab8ef9050600384630000db54670de0b6b3a764000083630001afa3565b6040518463ffffffff1660e01b8152600401630000db7693929190630001b0e6565b600060405180830381600087803b158015630000db9257600080fd5b505af1158015630000dba8573d6000803e3d6000fd5b505060005462010000900473ffffffffffffffffffffffffffffffffffffffff16915063eebab8ef9050600484630000dbed670de0b6b3a764000061012c630001afa3565b6040518463ffffffff1660e01b8152600401630000dc0f93929190630001b0e6565b600060405180830381600087803b158015630000dc2b57600080fd5b505af1158015630000dc41573d6000803e3d6000fd5b5050600080546040517f67b4264500000000000000000000000000000000000000000000000000000000815291935062010000900473ffffffffffffffffffffffffffffffffffffffff1691506367b4264590630000dca790600390600401630001b02f565b602060405180830381865afa158015630000dcc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000dcee9190630001af51565b6007546040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015280841660248301529293509116906351e3f16090604401600060405180830381600087803b158015630000dd6757600080fd5b505af1158015630000dd7d573d6000803e3d6000fd5b50506007546040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152600094509091169150638991b2f190602401602060405180830381865afa158015630000ddf6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000de1e9190630001b064565b6040517f22995f5d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301528881166024830152891515604483015260648201839052919250908416906322995f5d90608401600060405180830381600087803b158015630000dea457600080fd5b505af1158015630000deba573d6000803e3d6000fd5b50505050630000dee9600185876040518060600160405280602381526020016300054794602391396300017c0a565b630000defa60018760006300017d4b565b630000df0e600285633b9aca006300017d4b565b630000df1f60028760006300017d4b565b630000df3060038560016300017d4b565b8615630000df7357630000df6c866001630000df57670de0b6b3a76400006003630001afa3565b630000df659190630001b154565b6300019b06565b630000df93565b630000df936003876001630000d154670de0b6b3a764000084630001afa3565b630000dfb36004856300001a16670de0b6b3a764000061012c630001afa3565b630000dfc460048760006300017d4b565b6007546040517f2362a2d800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690632362a2d890630000e0549073f39fd6e51aad88f6f4ce6ab8827279cfffb9226690600190600090733c44cdddb6a900fa2b585dd299e03d12fa4293bc908d9083908190600401630001b2cd565b6020604051808303816000875af1158015630000e075573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000e09d9190630001b064565b50505050505050508080630000e0b490630001b350565b915050630000da2a565b6001546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff909116906306447d5690602401600060405180830381600087803b158015630000e13f57600080fd5b505af1158015630000e155573d6000803e3d6000fd5b50506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f2e5a5c7700000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff909116925063c31eb0e09150602401600060405180830381600087803b158015630000e1e657600080fd5b505af1158015630000e1fc573d6000803e3d6000fd5b5050600754600b546040517fd48bfca700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529116925063d48bfca79150602401600060405180830381600087803b158015630000e27157600080fd5b505af1158015630000e287573d6000803e3d6000fd5b505050506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa158015630000e2fc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000e3249190630001b064565b90505b610100811015630000e42e57600754604080516020810184905273ffffffffffffffffffffffffffffffffffffffff9092169163d48bfca79101604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815290829052805160209091012060e083901b7fffffffff0000000000000000000000000000000000000000000000000000000016825273ffffffffffffffffffffffffffffffffffffffff166004820152602401600060405180830381600087803b158015630000e3fb57600080fd5b505af1158015630000e411573d6000803e3d6000fd5b505050508080630000e42490630001b350565b915050630000e327565b506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f1cbbe18500000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063c31eb0e090602401600060405180830381600087803b158015630000e4bc57600080fd5b505af1158015630000e4d2573d6000803e3d6000fd5b50506007546040517fd48bfca700000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff2600482015273ffffffffffffffffffffffffffffffffffffffff909116925063d48bfca791506024016300003591565b6000630000e5506300017b0b565b6001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f700ca0af00000000000000000000000000000000000000000000000000000000600482015291955073ffffffffffffffffffffffffffffffffffffffff16935063c31eb0e092506024019050600060405180830381600087803b158015630000e5e257600080fd5b505af1158015630000e5f8573d6000803e3d6000fd5b50506007546040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015273c4375b7de8af5a38a93548eb8453a498222c4ff2602483015290911692506351e3f1609150604401600060405180830381600087803b158015630000e68557600080fd5b505af1158015630000e69b573d6000803e3d6000fd5b5050600080546040517f67b4264500000000000000000000000000000000000000000000000000000000815291935062010000900473ffffffffffffffffffffffffffffffffffffffff1691506367b4264590630000e70190600290600401630001b02f565b602060405180830381865afa158015630000e720573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000e7489190630001af51565b6007546040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80841660048301529293506000929091169063f67c5bd090602401602060405180830381865afa158015630000e7c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000e7e89190630001b064565b6001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291925073ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b158015630000e86a57600080fd5b505af1158015630000e880573d6000803e3d6000fd5b50506007546040517fa366f4960000000000000000000000000000000000000000000000000000000081526004810185905273ffffffffffffffffffffffffffffffffffffffff909116925063a366f4969150602401600060405180830381600087803b158015630000e8f257600080fd5b505af1158015630000e908573d6000803e3d6000fd5b50506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f700ca0af00000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff909116925063c31eb0e09150602401600060405180830381600087803b158015630000e99957600080fd5b505af1158015630000e9af573d6000803e3d6000fd5b50506007546040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152868116602483015290911692506351e3f16091506044015b600060405180830381600087803b158015630000ea2b57600080fd5b505af1158015630000ea41573d6000803e3d6000fd5b50505050505050565b630000eb4b73c4375b7de8af5a38a93548eb8453a498222c4ff273ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa158015630000eae9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000eb119190630001af51565b73ffffffffffffffffffffffffffffffffffffffff161415604051806060016040528060218152602001630005455b60219139630001893b565b630000ec677393548eb8453a498222c4ff2c4375b7de8af5a38a73ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015630000ebea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000ec129190630001af51565b73ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280601f81526020017f70726963654f7261636c6520697320616c7265616479207468652073616d6500815250630001893b565b6001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b158015630000ece857600080fd5b505af1158015630000ecfe573d6000803e3d6000fd5b50506007546040517f11ca4fc200000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff260048201527393548eb8453a498222c4ff2c4375b7de8af5a38a602482015273ffffffffffffffffffffffffffffffffffffffff90911692506311ca4fc29150604401600060405180830381600087803b158015630000ed9d57600080fd5b505af1158015630000edb3573d6000803e3d6000fd5b50505050630000ee8a600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa158015630000ee2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000ee539190630001af51565b73c4375b7de8af5a38a93548eb8453a498222c4ff2604051806060016040528060218152602001630005445d60219139630001898a565b600754604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905163000023cf9273ffffffffffffffffffffffffffffffffffffffff1691632630c12f9160048083019260209291908290030181865afa158015630000eeff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000ef279190630001af51565b7393548eb8453a498222c4ff2c4375b7de8af5a38a6040518060400160405280602081526020017f70726963654f7261636c65206973206e6f742073657420636f72726563746c79815250630001898a565b600080600080630000ef8b6300017b0b565b6002546040517f0c75f806000000000000000000000000000000000000000000000000000000008152949850929650909450925060009173ffffffffffffffffffffffffffffffffffffffff90911690630c75f80690630000eff490600390600401630001b02f565b602060405180830381865afa158015630000f013573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000f03b9190630001b041565b61ffff16600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638a3177a360036040518263ffffffff1660e01b8152600401630000f09f9190630001b02f565b602060405180830381865afa158015630000f0be573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000f0e69190630001b064565b85612710630000f0f8878a630001afa3565b630000f1069190630001afa3565b630000f1149190630001b0cc565b630000f126906305f5e100630001afa3565b630000f1349190630001b0cc565b630000f1429190630001b0cc565b6000546040517feebab8ef00000000000000000000000000000000000000000000000000000000815291925062010000900473ffffffffffffffffffffffffffffffffffffffff169063eebab8ef90630000f1a89060039086908690600401630001b0e6565b600060405180830381600087803b158015630000f1c457600080fd5b505af1158015630000f1da573d6000803e3d6000fd5b50506007546000546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831694506351e3f1609350869262010000909204909116906367b4264590630000f24e906004908101630001b02f565b602060405180830381865afa158015630000f26d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000f2959190630001af51565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b158015630000f30457600080fd5b505af1158015630000f31a573d6000803e3d6000fd5b50506007546000546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831694506351e3f1609350869262010000909204909116906367b4264590630000f38f90600390600401630001b02f565b602060405180830381865afa158015630000f3ae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000f3d69190630001af51565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b158015630000f44557600080fd5b505af1158015630000f45b573d6000803e3d6000fd5b50506007546040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152909116925063953730189150602401600060405180830381600087803b158015630000f4ce57600080fd5b505af1158015630000f4e4573d6000803e3d6000fd5b50505050630000f4f8600460006300017d6a565b630000d9d6600360016300017d6a565b630000f5176001806300018266565b6000630000f5256300017b0b565b935050505060008173ffffffffffffffffffffffffffffffffffffffff16631afbb7a46040518163ffffffff1660e01b8152600401602060405180830381865afa158015630000f579573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000f5a19190630001b064565b905060008273ffffffffffffffffffffffffffffffffffffffff166317d11a156040518163ffffffff1660e01b8152600401602060405180830381865afa158015630000f5f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000f61a9190630001b064565b6007546040517fb5b12cd700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301529293509116906000908190839063b5b12cd790602401606060405180830381865afa158015630000f695573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000f6bd9190630001b6b9565b5091509150630000f70682866040518060400160405280601981526020017f496e636f727265637420626f72726f77656420616d6f756e74000000000000008152506300017bb8565b630000f74a81856040518060400160405280601f81526020017f496e636f72726563742063756d756c6174697665496e64657841744f70656e008152506300017bb8565b630000439d81856040518060400160405280601581526020017f63756d756c6174697665496e64657841744f70656e00000000000000000000008152506300017bb8565b600154600b5473ffffffffffffffffffffffffffffffffffffffff91821691634c63e56291858216911614801590630000f7dd575073ffffffffffffffffffffffffffffffffffffffff841615155b6040518263ffffffff1660e01b8152600401630000f7ff911515815260200190565b600060405180830381600087803b158015630000f81b57600080fd5b505af1158015630000f831573d6000803e3d6000fd5b50506001546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff90911692506306447d569150602401600060405180830381600087803b158015630000f8b657600080fd5b505af1158015630000f8cc573d6000803e3d6000fd5b50506008546040516000935073ffffffffffffffffffffffffffffffffffffffff9091169150630000f8ff90630001ace6565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103906000f080158015630000f93a573d6000803e3d6000fd5b50600b546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526123f0602482015291925082169063a70bc54290604401600060405180830381600087803b158015630000f9b457600080fd5b505af1158015630000f9ca573d6000803e3d6000fd5b50506040517f172c48c7000000000000000000000000000000000000000000000000000000008152600060048201819052925082915073ffffffffffffffffffffffffffffffffffffffff84169063172c48c7906024016040805180830381865afa158015630000fa3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000fa679190630001b6e9565b600b5460408051808201909152601a81527f696e636f727265637420756e6465726c79696e6720746f6b656e0000000000006020820152929450909250630000faca91849173ffffffffffffffffffffffffffffffffffffffff1690630001898a565b630000faf98161ffff166123f060405180606001604052806021815260200163000543ed602191396300017bb8565b600b546040517f7832743800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152600091851690637832743890602401602060405180830381865afa158015630000fb6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000fb959190630001b041565b9050630000fbc68161ffff166123f060405180606001604052806021815260200163000543ed602191396300017bb8565b630000fc7f8473ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa158015630000fc18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000fc409190630001b064565b60016040518060400160405280601081526020017f496e636f7272656374206c656e677468000000000000000000000000000000008152506300017bb8565b6040517fd48bfca700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015285169063d48bfca790602401600060405180830381600087803b158015630000fcea57600080fd5b505af1158015630000fd00573d6000803e3d6000fd5b50505050630000fdbd8473ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa158015630000fd56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000fd7e9190630001b064565b60026040518060400160405280601081526020017f496e636f7272656374206c656e677468000000000000000000000000000000008152506300017bb8565b6040517f172c48c70000000000000000000000000000000000000000000000000000000081526001600482015273ffffffffffffffffffffffffffffffffffffffff85169063172c48c7906024016040805180830381865afa158015630000fe29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630000fe519190630001b6e9565b8093508194505050630000fe9d83876040518060400160405280601881526020017f696e636f7272656374206e6577546f6b656e20746f6b656e0000000000000000815250630001898a565b630000fee68261ffff1660006040518060400160405280602081526020017f696e636f7272656374206c7420666f7220206e6577546f6b656e20746f6b656e8152506300017bb8565b6040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015261ffff8716602483015285169063a70bc54290604401600060405180830381600087803b158015630000ff5b57600080fd5b505af1158015630000ff71573d6000803e3d6000fd5b50506040517f172c48c70000000000000000000000000000000000000000000000000000000081526001600482015273ffffffffffffffffffffffffffffffffffffffff8716925063172c48c791506024016040805180830381865afa158015630000ffe1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000100099190630001b6e9565b8093508194505050630001005583876040518060400160405280601881526020017f696e636f7272656374206e6577546f6b656e20746f6b656e0000000000000000815250630001898a565b63000100a18261ffff168661ffff166040518060400160405280602081526020017f696e636f7272656374206c7420666f7220206e6577546f6b656e20746f6b656e8152506300017bb8565b6040517f7832743800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152851690637832743890602401602060405180830381865afa158015630001010f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000101379190630001b041565b905063000101858161ffff168661ffff166040518060400160405280602081526020017f696e636f7272656374206c7420666f7220206e6577546f6b656e20746f6b656e8152506300017bb8565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801563000101f157600080fd5b505af11580156300001afe573d6000803e3d6000fd5b600a54604080517f8da5cb5b000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691638da5cb5b9160048083019260209291908290030181865afa1580156300010279573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000102a19190630001af51565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015292935091169063ca669fa790602401600060405180830381600087803b158015630001031257600080fd5b505af11580156300010328573d6000803e3d6000fd5b5050600a546040517f4910832f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529091169250634910832f9150602401600060405180830381600087803b158015630001039b57600080fd5b505af115801563000103b1573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152909116925063ca669fa79150602401600060405180830381600087803b158015630001042457600080fd5b505af1158015630001043a573d6000803e3d6000fd5b50505050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b15801563000104aa57600080fd5b505af115801563000104c0573d6000803e3d6000fd5b505050506300010538600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156300002af3573d6000803e3d6000fd5b600154604080518082018252601081527f5061757361626c653a2070617573656400000000000000000000000000000000602082015290517ff28dceb300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163f28dceb39163000105c291600401630001b722565b600060405180830381600087803b15801563000105de57600080fd5b505af115801563000105f4573d6000803e3d6000fd5b50506007546040517f8fe3f93f00000000000000000000000000000000000000000000000000000000815262030d40600482015230602482015273ffffffffffffffffffffffffffffffffffffffff9091169250638fe3f93f91506044016020604051808303816000875af11580156300010673573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630001069b9190630001af51565b50600154604080518082018252601081527f5061757361626c653a2070617573656400000000000000000000000000000000602082015290517ff28dceb300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163f28dceb391630001072691600401630001b722565b600060405180830381600087803b158015630001074257600080fd5b505af11580156300010758573d6000803e3d6000fd5b50506007546040517f2362a2d800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169250632362a2d8915063000107f89073c4375b7de8af5a38a93548eb8453a498222c4ff290600190600090839081907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff908490600401630001b2cd565b6020604051808303816000875af11580156300010819573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000108419190630001b064565b50600154604080518082018252601081527f5061757361626c653a2070617573656400000000000000000000000000000000602082015290517ff28dceb300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163f28dceb39163000108cc91600401630001b722565b600060405180830381600087803b15801563000108e857600080fd5b505af115801563000108fe573d6000803e3d6000fd5b50506007546040517f94cf073a00000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff260048201526064602482018190526001604483015273ffffffffffffffffffffffffffffffffffffffff90921693506394cf073a9250016020604051808303816000875af11580156300010996573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000109be9190630001b064565b50600154604080518082018252601081527f5061757361626c653a2070617573656400000000000000000000000000000000602082015290517ff28dceb300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163f28dceb3916300010a4991600401630001b722565b600060405180830381600087803b1580156300010a6557600080fd5b505af11580156300010a7b573d6000803e3d6000fd5b50506007546040517f830aa74500000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff26004820181905260248201819052604482015260648082015273ffffffffffffffffffffffffffffffffffffffff909116925063830aa7459150608401600060405180830381600087803b1580156300010b1457600080fd5b505af11580156300010b2a573d6000803e3d6000fd5b5050600154604080518082018252601081527f5061757361626c653a2070617573656400000000000000000000000000000000602082015290517ff28dceb300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909216935063f28dceb392506300010bb891600401630001b722565b600060405180830381600087803b1580156300010bd457600080fd5b505af11580156300010bea573d6000803e3d6000fd5b50506007546040517fe1998cf900000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff260048201819052602482015273ffffffffffffffffffffffffffffffffffffffff909116925063e1998cf99150604401600060405180830381600087803b1580156300010c7657600080fd5b505af11580156300010c8c573d6000803e3d6000fd5b5050600154604080518082018252601081527f5061757361626c653a2070617573656400000000000000000000000000000000602082015290517ff28dceb300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909216935063f28dceb392506300010d1a91600401630001b722565b600060405180830381600087803b1580156300010d3657600080fd5b505af11580156300010d4c573d6000803e3d6000fd5b50506007546040517f46fb371d00000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff26004820181905260248201819052604482015260648082015273ffffffffffffffffffffffffffffffffffffffff90911692506346fb371d9150608401600060405180830381600087803b1580156300010de557600080fd5b505af11580156300010dfb573d6000803e3d6000fd5b5050600154604080518082018252601081527f5061757361626c653a2070617573656400000000000000000000000000000000602082015290517ff28dceb300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909216935063f28dceb392506300010e8991600401630001b722565b600060405180830381600087803b1580156300010ea557600080fd5b505af11580156300010ebb573d6000803e3d6000fd5b5050600754604080518082018252600281527f6464000000000000000000000000000000000000000000000000000000000000602082015290517f6ce4074a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169350636ce4074a9250630000746a9173c4375b7de8af5a38a93548eb8453a498222c4ff2918291600401630001b48c565b6001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b1580156300010fe257600080fd5b505af11580156300010ff8573d6000803e3d6000fd5b50506007546040517f944ac59f0000000000000000000000000000000000000000000000000000000081526103e8600482015260c8602482015261251c6044820152606480820152612648608482015273ffffffffffffffffffffffffffffffffffffffff909116925063944ac59f915060a401600060405180830381600087803b158015630001108857600080fd5b505af1158015630001109e573d6000803e3d6000fd5b5050604080516102408101909152600761020082019081527f434c4f535552450000000000000000000000000000000000000000000000000061022083015260e08201908152600061010083018190529350909150819061012082018481526020016103e8815260200161044c8152602001610456815260200160008152602001600a81526020016000815250815260200160405180610120016040528060405180606001604052806029815260200163000543c46029913981526107d06020820152604001600181526020016103e8815260200161044c815260200161047e81526020016102ed815260200160328152602001600081525081526020016040518061012001604052806040518060600160405280602e8152602001630005428e602e91398152610834602082015260400160018152602001610384815260200161076c81526020016107cb815260200160008152602001605f8152602001600081525081526020016040518061012001604052806040518060400160405280601581526020017f4c49515549444154494f4e2057495448204c4f5353000000000000000000000081525081526020016103e8815260200160016002811115630001126f57630001126f630001afe6565b8152602001610384815260200161076c81526020016103b6815260200160008152602001600081526020016103b6815250815260200160405180610120016040528060405180606001604052806034815260200163000546ef6034913981526107d06020820152604001600281526020016103e8815260200161044c815260200161046a815260200161033d8152602001601e81526020016000815250815260200160405180610120016040528060405180606001604052806039815260200163000544a160399139815261083460208201526040016002815260200161038481526020016107d0815260200161080a815260200160008152602001603a8152602001600081525081526020016040518061012001604052806040518060400160405280602081526020017f4c49515549444154494f4e204f4620455850495245442057495448204c4f535381525081526020016103e8815260200160028081111563000113e35763000113e3630001afe6565b8152602001610384815260200161076c81526020016103d481526020016000815260200160008152602001610398815250815250905060005b60078110156300003cbc576007805460009182918291829173ffffffffffffffffffffffffffffffffffffffff1690635063524a908890889081106300011469576300011469630001b68a565b602002015160200151888860078110630001148a57630001148a630001b68a565b60200201516040015189896007811063000114ab5763000114ab630001b68a565b6020020151606001518a8a6007811063000114cc5763000114cc630001b68a565b6020020151608001516040518563ffffffff1660e01b815260040163000114f89493929190630001b739565b608060405180830381865afa1580156300011517573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630001153f9190630001b763565b935093509350935063000115b9848787600781106300011565576300011565630001b68a565b602002015160a001518888600781106300011586576300011586630001b68a565b60200201516000015160405160200163000115a39190630001b79b565b6040516020818303038152906040526300017bb8565b63000116158387876007811063000115d75763000115d7630001b68a565b602002015160c0015188886007811063000115f85763000115f8630001b68a565b60200201516000015160405160200163000115a39190630001b7e0565b6300011671828787600781106300011633576300011633630001b68a565b602002015160e001518888600781106300011654576300011654630001b68a565b60200201516000015160405160200163000115a39190630001b825565b63000116ce81878760078110630001168f57630001168f630001b68a565b6020020151610100015188886007811063000116b15763000116b1630001b68a565b60200201516000015160405160200163000115a39190630001b86a565b50505050808063000116e190630001b350565b915050630001141c565b63000116fb600360006300018266565b600080600080630001170d6300017b0b565b6000546040517feebab8ef000000000000000000000000000000000000000000000000000000008152949850929650909450925062010000900473ffffffffffffffffffffffffffffffffffffffff169063eebab8ef90630001177b9060039085908990600401630001b0e6565b600060405180830381600087803b158015630001179757600080fd5b505af115801563000117ad573d6000803e3d6000fd5b50506007546040517f2362a2d800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169250632362a2d89150630001182d9073f39fd6e51aad88f6f4ce6ab8827279cfffb92266906000908190839081908390600190600401630001b2cd565b6020604051808303816000875af1158015630001184e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000118769190630001b064565b50630001188860038260016300017d4b565b60008484630001189a8583630001afa3565b63000118a89190630001b0cc565b63000118b69190630001b154565b90506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639af1d35a6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156300011929573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000119519190630001b171565b505050509050600061271061ffff168261ffff168463000119749190630001afa3565b63000119829190630001b0cc565b90506000816300011995858a630001b07f565b63000119a39190630001b07f565b905063000022d373f39fd6e51aad88f6f4ce6ab8827279cfffb9226660018363000119d18c6002630001afa3565b630000df579190630001b154565b60008054610100900460ff16156300011a015750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156300011b4e5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c65640000000000000000000000000000000000000000000000000000828401528251808303840181526060830190935260009290916300011aac917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc491608001630001b8af565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526300011ae891630001b8fb565b6000604051808303816000865af19150503d80600081146300011b29576040519150601f19603f3d011682016040523d82523d6000602084013e6300011b2e565b606091505b50915050808060200190518101906300011b4a9190630001b91b565b9150505b919050565b60006300011b616300017b0b565b6007546040517fe1998cf900000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660048201527390f79bf6eb2c4f870365e785982e1f101e93b906602482015291955073ffffffffffffffffffffffffffffffffffffffff16935063e1998cf992506044019050600060405180830381600087803b1580156300011c0157600080fd5b505af11580156300011c17573d6000803e3d6000fd5b50506007546040517f055ee9b500000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660048201526300011d0c935073ffffffffffffffffffffffffffffffffffffffff909116915063055ee9b590602401602060405180830381865afa1580156300011ca5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300011ccd9190630001af51565b60006040518060400160405280601b81526020017f46726f6d206163636f756e74207761736e27742064656c657465640000000000815250630001898a565b6007546040517f055ee9b50000000000000000000000000000000000000000000000000000000081527390f79bf6eb2c4f870365e785982e1f101e93b90660048201526300011dfa9173ffffffffffffffffffffffffffffffffffffffff169063055ee9b590602401602060405180830381865afa1580156300011d94573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300011dbc9190630001af51565b826040518060400160405280601881526020017f546f206163636f756e742069736e277420636f72726563740000000000000000815250630001898a565b6001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb5ba4c4d00000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063c31eb0e090602401600060405180830381600087803b1580156300011e8757600080fd5b505af11580156300011e9d573d6000803e3d6000fd5b50506007546040517fe958b70400000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063e958b70491506024015b602060405180830381865afa1580156300011f26573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300003cbc9190630001af51565b60006300011f5c6300017b0b565b6007546040517fe958b70400000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660048201529195506300012050945073ffffffffffffffffffffffffffffffffffffffff16925063e958b7049150602401602060405180830381865afa1580156300011fea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000120129190630001af51565b826040518060400160405280601881526020017f496e636f727265637420637265646974206163636f756e740000000000000000815250630001898a565b6001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb5ba4c4d00000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063c31eb0e090602401600060405180830381600087803b15801563000120dd57600080fd5b505af115801563000120f3573d6000803e3d6000fd5b50506007546040517fe958b70400000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff2600482015273ffffffffffffffffffffffffffffffffffffffff909116925063e958b70491506024016300011f07565b60085460405160009173ffffffffffffffffffffffffffffffffffffffff1690630001219090630001ad13565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103906000f08015801563000121cb573d6000803e3d6000fd5b50905060005b6101008110156300004e20576001811b8381111563000121ee5783175b6040517fa64bec9e0000000000000000000000000000000000000000000000000000000081526004810182905260009073ffffffffffffffffffffffffffffffffffffffff85169063a64bec9e90602401602060405180830381865afa158015630001225e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000122869190630001b064565b905063000122cc83826040518060400160405280601081526020017f496e636f727265637420726573756c74000000000000000000000000000000008152506300017bb8565b5050808063000122dd90630001b350565b91505063000121d1565b600063000122f56300017b0b565b60005490945062010000900473ffffffffffffffffffffffffffffffffffffffff16925063eebab8ef9150600390507390f79bf6eb2c4f870365e785982e1f101e93b906630001234f670de0b6b3a764000083630001afa3565b6040518463ffffffff1660e01b8152600401630001237193929190630001b0e6565b600060405180830381600087803b158015630001238d57600080fd5b505af115801563000123a3573d6000803e3d6000fd5b50506000546007546040517f88f776a200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff62010000909304831694506388f776a293506300012424926003927390f79bf6eb2c4f870365e785982e1f101e93b90692911690600401630001b93e565b600060405180830381600087803b158015630001244057600080fd5b505af11580156300012456573d6000803e3d6000fd5b5050505063000124a160038260006040518060400160405280601581526020017f4e6f6e2d7a65726f20574554482062616c616e636500000000000000000000008152506300017c0a565b63000124b1600360006300017d6a565b6007546000546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283169263830aa745927390f79bf6eb2c4f870365e785982e1f101e93b90692869262010000909204909116906367b4264590630001253890600390600401630001b02f565b602060405180830381865afa1580156300012557573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630001257f9190630001af51565b6300012596670de0b6b3a76400006003630001afa3565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b16815273ffffffffffffffffffffffffffffffffffffffff94851660048201529284166024840152921660448201526064810191909152608401600060405180830381600087803b158015630001261557600080fd5b505af1158015630001262b573d6000803e3d6000fd5b50505050630001268d600382670de0b6b3a7640000600363000126509190630001afa3565b6040518060400160405280601581526020017f4e6f6e2d7a65726f20574554482062616c616e636500000000000000000000008152506300017c0a565b63000126e860037390f79bf6eb2c4f870365e785982e1f101e93b90660006040518060400160405280601881526020017f496e636f727265637420465249454e442062616c616e636500000000000000008152506300017c0a565b6300002a7b600360016300017d6a565b600063000127066300017b0b565b93505050506000604051630000c29690630001ad22565b600080600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639af1d35a6040518163ffffffff1660e01b815260040160a060405180830381865afa158015630001278f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000127b79190630001b171565b9450509350505060005b60028110156300004e2057600080546040517f883278630000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff16906388327863906300012843906001907390f79bf6eb2c4f870365e785982e1f101e93b90690600401630001b11f565b602060405180830381865afa1580156300012862573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630001288a9190630001b064565b905060008215630001289f57600263000128a2565b60015b905060008060008063000128b66300017b0b565b600080546008546040517f88327863000000000000000000000000000000000000000000000000000000008152969a50949850929650909450926201000090910473ffffffffffffffffffffffffffffffffffffffff90811692638832786392630001292b926001921690600401630001b11f565b602060405180830381865afa158015630001294a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000129729190630001b064565b9050846000818663000129878783630001afa3565b63000129959190630001b0cc565b63000129a39190630001b154565b90506000600189600281111563000129c15763000129c1630001afe6565b1463000129d0578b63000129d2565b8c5b61ffff169050600061271063000129eb8386630001afa3565b63000129f99190630001b0cc565b90506000816300012a0c858c630001b07f565b6300012a1a9190630001b154565b60015460085460408051602481018f905260006044820152606480820186905282518083039091018152608490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fca9505e40000000000000000000000000000000000000000000000000000000017905290517fbd6af43400000000000000000000000000000000000000000000000000000000815293945073ffffffffffffffffffffffffffffffffffffffff9283169363bd6af434936300012aed93169190600401630001b27c565b600060405180830381600087803b1580156300012b0957600080fd5b505af11580156300012b1f573d6000803e3d6000fd5b50506007546040517f2362a2d80000000000000000000000000000000000000000000000000000000081526000945073ffffffffffffffffffffffffffffffffffffffff9091169250632362a2d891506300012bc99073f39fd6e51aad88f6f4ce6ab8827279cfffb92266908f908a90733c44cdddb6a900fa2b585dd299e03d12fa4293bc907390f79bf6eb2c4f870365e785982e1f101e93b9069089908190600401630001b2cd565b6020604051808303816000875af11580156300012bea573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300012c129190630001b064565b90506300012c598160006040518060400160405280601c81526020017f52656d61696e696e672066756e6473206973206e6f74207a65726f21000000008152506300017bb8565b506300012ca160018760016040518060400160405280601b81526020017f437265646974206163636f756e742062616c616e636520213d203100000000008152506300017c0a565b6008546300012cd19060019073ffffffffffffffffffffffffffffffffffffffff166300001a168489630001b07f565b6300012d5a60017390f79bf6eb2c4f870365e785982e1f101e93b906816127106300012cff8782630001b154565b6300012d0d908f630001afa3565b6300012d1b9190630001b0cc565b8f6300012d2a9190630001b07f565b6300012d389190630001b154565b60405180606001604052806037815260200163000545f7603791396300017c0a565b505050505050505050505080806300012d7490630001b350565b91505063000127c1565b60006300012d8c6300017b0b565b600080546040517f67b4264500000000000000000000000000000000000000000000000000000000815292965090945062010000900473ffffffffffffffffffffffffffffffffffffffff1692506367b4264591506300012df490600290600401630001b02f565b602060405180830381865afa1580156300012e13573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300012e3b9190630001af51565b600b546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152929350600092909116906370a0823190602401602060405180830381865afa1580156300012eb3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300012edb9190630001b064565b6007546040517f3e8297ca00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301529293506300012f3e9290911690633e8297ca90602401630000768f565b6300012f4b836300019b24565b6001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f53275fcb00000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063c31eb0e090602401600060405180830381600087803b1580156300012fd857600080fd5b505af11580156300012fee573d6000803e3d6000fd5b5050600754600b546040517f654a9eda00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529182166024820152868216604482015260648101869052600060848201529116925063654a9eda915060a401630000ea0f565b6000604051630001307e90630001ad31565b604051809103906000f080158015630001309c573d6000803e3d6000fd5b506001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291925073ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b158015630001311f57600080fd5b505af11580156300013135573d6000803e3d6000fd5b50506007546040517f6e98e5e4000000000000000000000000000000000000000000000000000000008152739965507d1a55bcc2695c58ba16fb37d819b0a4dc600482015273cccccccccccccccccccccccccccccccccccccccc602482015273ffffffffffffffffffffffffffffffffffffffff9091169250636e98e5e49150604401600060405180830381600087803b15801563000131d457600080fd5b505af115801563000131ea573d6000803e3d6000fd5b5050505063000131fa6300017b0b565b50506001546040517fca669fa7000000000000000000000000000000000000000000000000000000008152739965507d1a55bcc2695c58ba16fb37d819b0a4dc600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b158015630001327f57600080fd5b505af11580156300013295573d6000803e3d6000fd5b5050600754600b546040517f46fb371d00000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273c4375b7de8af5a38a93548eb8453a498222c4ff2602482015273ffffffffffffffffffffffffffffffffffffffff91821660448201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6064820152911692506346fb371d9150608401600060405180830381600087803b158015630001336457600080fd5b505af1158015630001337a573d6000803e3d6000fd5b5050604080518082018252600581527f48656c6c6f000000000000000000000000000000000000000000000000000000602082015260015491517fca669fa7000000000000000000000000000000000000000000000000000000008152739965507d1a55bcc2695c58ba16fb37d819b0a4dc600482015290935073ffffffffffffffffffffffffffffffffffffffff909116915063ca669fa790602401600060405180830381600087803b158015630001343357600080fd5b505af11580156300013449573d6000803e3d6000fd5b50506007546040517f6ce4074a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169250636ce4074a915063000134bf9073f39fd6e51aad88f6f4ce6ab8827279cfffb922669086908690600401630001b48c565b6000604051808303816000875af115801563000134e0573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526300004e209190810190630001b59c565b600063000135386300017b0b565b600080546040517f67b4264500000000000000000000000000000000000000000000000000000000815292965090945062010000900473ffffffffffffffffffffffffffffffffffffffff1692506367b42645915063000135a090600290600401630001b02f565b602060405180830381865afa15801563000135bf573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000135e79190630001af51565b600b546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152929350600092909116906370a0823190602401602060405180830381865afa158015630001365f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000136879190630001b064565b6007546040517f3e8297ca00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015292935063000136ea9290911690633e8297ca90602401630000768f565b6001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b158015630001376b57600080fd5b505af11580156300013781573d6000803e3d6000fd5b5050600754600b546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015261232860248201529116925063a70bc5429150604401600060405180830381600087803b15801563000137fe57600080fd5b505af11580156300013814573d6000803e3d6000fd5b50506001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b158015630001389957600080fd5b505af115801563000138af573d6000803e3d6000fd5b50506007546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526123286024830152909116925063a70bc5429150604401600060405180830381600087803b158015630001392a57600080fd5b505af11580156300013940573d6000803e3d6000fd5b505060005462010000900473ffffffffffffffffffffffffffffffffffffffff169150638eb86e8b90506001856300013985670de0b6b3a76400006103e8630001afa3565b6040518463ffffffff1660e01b815260040163000139a793929190630001b0e6565b600060405180830381600087803b15801563000139c357600080fd5b505af115801563000139d9573d6000803e3d6000fd5b50506000546040517feebab8ef0000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063eebab8ef91506300013a45906002908790633b8b87c090600401630001b0e6565b600060405180830381600087803b1580156300013a6157600080fd5b505af11580156300013a77573d6000803e3d6000fd5b505050506300012f4b836300019b24565b60085460405173ffffffffffffffffffffffffffffffffffffffff909116906300013ab490630001ace6565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103906000f0801580156300013aef573d6000803e3d6000fd5b50600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169182179055604080517f570a7af200000000000000000000000000000000000000000000000000000000815290516300013c0f929163570a7af29160048083019260209291908290030181865afa1580156300013b90573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300013bb89190630001af51565b60085460408051808201909152601681527f496e636f727265637420706f6f6c536572697669636500000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff90911690630001898a565b600754604080517f16f0115b00000000000000000000000000000000000000000000000000000000815290516300013d039273ffffffffffffffffffffffffffffffffffffffff16916316f0115b9160048083019260209291908290030181865afa1580156300013c84573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300013cac9190630001af51565b60085460408051808201909152600e81527f496e636f727265637420706f6f6c000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff90911690630001898a565b600754604080517f6f307dc300000000000000000000000000000000000000000000000000000000815290516300013e849273ffffffffffffffffffffffffffffffffffffffff1691636f307dc39160048083019260209291908290030181865afa1580156300013d78573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300013da09190630001af51565b6000546040517f67b426450000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff16906367b42645906300013e0090600190600401630001b02f565b602060405180830381865afa1580156300013e1f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300013e479190630001af51565b6040518060400160405280601481526020017f496e636f727265637420756e6465726c79696e67000000000000000000000000815250630001898a565b6007546040517f172c48c700000000000000000000000000000000000000000000000000000000815260006004820181905291829173ffffffffffffffffffffffffffffffffffffffff9091169063172c48c7906024016040805180830381865afa1580156300013ef9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300013f219190630001b6e9565b6000546040517f67b426450000000000000000000000000000000000000000000000000000000081529294509092506300013f8e91849162010000900473ffffffffffffffffffffffffffffffffffffffff16906367b42645906300013e0090600190600401630001b02f565b6007546000546040517f67b4264500000000000000000000000000000000000000000000000000000000815263000141019273ffffffffffffffffffffffffffffffffffffffff9081169263f67c5bd09262010000909104909116906367b4264590630001400390600190600401630001b02f565b602060405180830381865afa1580156300014022573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630001404a9190630001af51565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa15801563000140b5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000140dd9190630001b064565b6001604051806060016040528060298152602001630005434b602991396300017bb8565b630001414a8161ffff1660006040518060400160405280601b81526020017f496e636f7272656374204c5420666f7220756e6465726c79696e6700000000008152506300017bb8565b600754604080517f4f0e0ef3000000000000000000000000000000000000000000000000000000008152905163000142bb9273ffffffffffffffffffffffffffffffffffffffff1691634f0e0ef39160048083019260209291908290030181865afa15801563000141bf573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000141e79190630001af51565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa1580156300014256573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630001427e9190630001af51565b6040518060400160405280601481526020017f496e636f7272656374205745544820746f6b656e000000000000000000000000815250630001898a565b600754604080517fc5e10eef0000000000000000000000000000000000000000000000000000000081529051630001442c9273ffffffffffffffffffffffffffffffffffffffff169163c5e10eef9160048083019260209291908290030181865afa1580156300014330573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000143589190630001af51565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166377532ed96040518163ffffffff1660e01b8152600401602060405180830381865afa15801563000143c7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000143ef9190630001af51565b6040518060400160405280601681526020017f496e636f72726563742057455448204761746577617900000000000000000000815250630001898a565b600754604080517f2630c12f0000000000000000000000000000000000000000000000000000000081529051630001459d9273ffffffffffffffffffffffffffffffffffffffff1691632630c12f9160048083019260209291908290030181865afa15801563000144a1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000144c99190630001af51565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156300014538573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000145609190630001af51565b6040518060400160405280601681526020017f496e636f7272656374205072696365206f7261636c6500000000000000000000815250630001898a565b600754604080517ff9aa028a00000000000000000000000000000000000000000000000000000000815290516300003cbc9273ffffffffffffffffffffffffffffffffffffffff169163f9aa028a9160048083019260209291908290030181865afa1580156300014612573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630001463a9190630001af51565b306040518060400160405280601c81526020017f496e636f727265637420637265646974436f6e666967757261746f7200000000815250630001898a565b60008063000146876300017b0b565b6000546040517feebab8ef00000000000000000000000000000000000000000000000000000000815294965090945062010000900473ffffffffffffffffffffffffffffffffffffffff169263eebab8ef925063000146f2915060019085908790600401630001b0e6565b600060405180830381600087803b158015630001470e57600080fd5b505af11580156300014724573d6000803e3d6000fd5b505060005462010000900473ffffffffffffffffffffffffffffffffffffffff16915063eebab8ef90506003836300014767670de0b6b3a764000083630001afa3565b6040518463ffffffff1660e01b8152600401630001478993929190630001b0e6565b600060405180830381600087803b15801563000147a557600080fd5b505af115801563000147bb573d6000803e3d6000fd5b50506007546000546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831694506351e3f1609350859262010000909204909116906367b4264590630001483090600390600401630001b02f565b602060405180830381865afa158015630001484f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000148779190630001af51565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b15801563000148e657600080fd5b505af115801563000148fc573d6000803e3d6000fd5b50506000546040517feebab8ef0000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063eebab8ef91506300014968906002908590633b9aca0090600401630001b0e6565b600060405180830381600087803b158015630001498457600080fd5b505af1158015630001499a573d6000803e3d6000fd5b50506007546000546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831694506351e3f1609350859262010000909204909116906367b42645906300014a0f90600290600401630001b02f565b602060405180830381865afa1580156300014a2e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300014a569190630001af51565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156300014ac557600080fd5b505af11580156300014adb573d6000803e3d6000fd5b505060005462010000900473ffffffffffffffffffffffffffffffffffffffff16915063eebab8ef90506004836300014b20670de0b6b3a764000061012c630001afa3565b6040518463ffffffff1660e01b81526004016300014b4293929190630001b0e6565b600060405180830381600087803b1580156300014b5e57600080fd5b505af11580156300014b74573d6000803e3d6000fd5b50506007546000546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831694506351e3f1609350859262010000909204909116906367b42645906300014be8906004908101630001b02f565b602060405180830381865afa1580156300014c07573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300014c2f9190630001af51565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156300014c9e57600080fd5b505af11580156300014cb4573d6000803e3d6000fd5b505050506300014cc8600360016300017d6a565b6300014cd8600260016300017d6a565b6300014ce8600460016300017d6a565b600754600080546040517f67b42645000000000000000000000000000000000000000000000000000000008152919273ffffffffffffffffffffffffffffffffffffffff9081169263f67c5bd092620100009004909116906367b42645906300014d5990600390600401630001b02f565b602060405180830381865afa1580156300014d78573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300014da09190630001af51565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156300014e0b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300014e339190630001b064565b600754600080546040517f67b42645000000000000000000000000000000000000000000000000000000008152939450909273ffffffffffffffffffffffffffffffffffffffff9283169263f67c5bd09262010000900416906367b42645906300014ea590600290600401630001b02f565b602060405180830381865afa1580156300014ec4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300014eec9190630001af51565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156300014f57573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300014f7f9190630001b064565b6007546040517f2362a2d800000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff1690632362a2d89063000150119073f39fd6e51aad88f6f4ce6ab8827279cfffb9226690600090819083907390f79bf6eb2c4f870365e785982e1f101e93b906908a8a17908490600401630001b2cd565b6020604051808303816000875af11580156300015032573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630001505a9190630001b064565b50630001508060037390f79bf6eb2c4f870365e785982e1f101e93b90660006300017d4b565b630001509e6003846300001a16670de0b6b3a764000083630001afa3565b63000150c360027390f79bf6eb2c4f870365e785982e1f101e93b90660006300017d4b565b63000150d7600284633b9aca006300017d4b565b630000364960047390f79bf6eb2c4f870365e785982e1f101e93b9066001630000d154670de0b6b3a764000061012c630001afa3565b6000630001511b6300017b0b565b93505050506000604051630001513290630001ad31565b604051809103906000f0801580156300015150573d6000803e3d6000fd5b506001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291925073ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b15801563000151d357600080fd5b505af115801563000151e9573d6000803e3d6000fd5b50506007546040517f6e98e5e4000000000000000000000000000000000000000000000000000000008152739965507d1a55bcc2695c58ba16fb37d819b0a4dc600482015273ffffffffffffffffffffffffffffffffffffffff85811660248301529091169250636e98e5e49150604401600060405180830381600087803b158015630001527657600080fd5b505af1158015630001528c573d6000803e3d6000fd5b5050604080518082018252600d81527f48656c6c6f2c20776f726c64210000000000000000000000000000000000000060208201526001805492517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018290526024810191909152600060448201819052606482015290935073ffffffffffffffffffffffffffffffffffffffff909116915063491cc7c290608401600060405180830381600087803b158015630001534957600080fd5b505af1158015630001535f573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff8516925073f39fd6e51aad88f6f4ce6ab8827279cfffb9226691507faed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab0390600090a360015460405173ffffffffffffffffffffffffffffffffffffffff9091169063bd6af43490859063000153f59086908690602401630001b27c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1cff79cd000000000000000000000000000000000000000000000000000000001790525160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016815263000154a7929190600401630001b27c565b600060405180830381600087803b15801563000154c357600080fd5b505af115801563000154d9573d6000803e3d6000fd5b50506001546040517fbd6af43400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116925063bd6af434915063000155399085908590600401630001b27c565b600060405180830381600087803b158015630001555557600080fd5b505af1158015630001556b573d6000803e3d6000fd5b50506001546040517fca669fa7000000000000000000000000000000000000000000000000000000008152739965507d1a55bcc2695c58ba16fb37d819b0a4dc600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b15801563000155f057600080fd5b505af11580156300015606573d6000803e3d6000fd5b50506007546040517f6ce4074a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169250636ce4074a9150630001567c9073f39fd6e51aad88f6f4ce6ab8827279cfffb922669086908690600401630001b48c565b6000604051808303816000875af1158015630001569d573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405263000156e79190810190630001b59c565b506300004e208273ffffffffffffffffffffffffffffffffffffffff16634e417a986040518163ffffffff1660e01b8152600401600060405180830381865afa158015630001573a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405263000157849190810190630001b59c565b826040518060400160405280601281526020017f496e636f72726563742063616c6c6461746100000000000000000000000000008152506300019bd3565b600754604080517f458936f5000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163458936f59160048083019260209291908290030181865afa1580156300015834573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630001585c9190630001b064565b6001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291925073ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b15801563000158de57600080fd5b505af115801563000158f4573d6000803e3d6000fd5b50506007546040517fd48bfca700000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff2600482015273ffffffffffffffffffffffffffffffffffffffff909116925063d48bfca79150602401600060405180830381600087803b158015630001597957600080fd5b505af1158015630001598f573d6000803e3d6000fd5b505050506300015a60600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156300015a07573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300015a2f9190630001b064565b6300015a3e836001630001b07f565b6040518060600160405280602681526020016300054684602691396300017bb8565b6007546040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff260048201526300002a7b9173ffffffffffffffffffffffffffffffffffffffff169063f67c5bd090602401602060405180830381865afa1580156300015ae8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300015b109190630001b064565b826001901b6040518060400160405280602081526020017f746f6b656e4d61736b4d6170207761732073657420696e636f72726563746c798152506300017bb8565b600080546040517f883278630000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff16906388327863906300015bc99060039073f39fd6e51aad88f6f4ce6ab8827279cfffb9226690600401630001b11f565b602060405180830381865afa1580156300015be8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300015c109190630001b064565b90506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639af1d35a6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156300015c83573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300015cab9190630001b171565b5050925050506300015cc1600360006300018266565b6000806300015cd06300017b0b565b6000546040517feebab8ef00000000000000000000000000000000000000000000000000000000815294965090945062010000900473ffffffffffffffffffffffffffffffffffffffff169263eebab8ef92506300015d3b915060039085908790600401630001b0e6565b600060405180830381600087803b1580156300015d5757600080fd5b505af11580156300015d6d573d6000803e3d6000fd5b5050505060008260026300015d849190630001afa3565b6007546040517f2362a2d800000000000000000000000000000000000000000000000000000000815291925060009173ffffffffffffffffffffffffffffffffffffffff90911690632362a2d8906300015e2d9073f39fd6e51aad88f6f4ce6ab8827279cfffb92266906001908790733c44cdddb6a900fa2b585dd299e03d12fa4293bc907390f79bf6eb2c4f870365e785982e1f101e93b9069089908590600401630001b2cd565b6020604051808303816000875af11580156300015e4e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300015e769190630001b064565b90506300015e9b73f39fd6e51aad88f6f4ce6ab8827279cfffb9226660006300019b06565b6300015ee260038460016040518060400160405280601b81526020017f437265646974206163636f756e742062616c616e636520213d203100000000008152506300017c0a565b6300015f0c600373f39fd6e51aad88f6f4ce6ab8827279cfffb922666300001a66848a630001b07f565b630000439d7390f79bf6eb2c4f870365e785982e1f101e93b9066127106300015f378882630001b463565b6300015f499061ffff1686630001afa3565b6300007ed69190630001b0cc565b6000806300015f666300017b0b565b6000546040517feebab8ef00000000000000000000000000000000000000000000000000000000815294965090945062010000900473ffffffffffffffffffffffffffffffffffffffff169263eebab8ef92506300015fd1915060019085908790600401630001b0e6565b600060405180830381600087803b1580156300015fed57600080fd5b505af11580156300016003573d6000803e3d6000fd5b505060005462010000900473ffffffffffffffffffffffffffffffffffffffff16915063eebab8ef90506003836300016046670de0b6b3a764000083630001afa3565b6040518463ffffffff1660e01b8152600401630001606893929190630001b0e6565b600060405180830381600087803b158015630001608457600080fd5b505af1158015630001609a573d6000803e3d6000fd5b50506007546000546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831694506351e3f1609350859262010000909204909116906367b4264590630001610f90600390600401630001b02f565b602060405180830381865afa158015630001612e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000161569190630001af51565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b15801563000161c557600080fd5b505af115801563000161db573d6000803e3d6000fd5b50506007546040517f2362a2d800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169250632362a2d89150630001625b9073f39fd6e51aad88f6f4ce6ab8827279cfffb92266906000908190839081908390600190600401630001b2cd565b6020604051808303816000875af1158015630001627c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000162a49190630001b064565b5063000162b660038260016300017d4b565b6300003cbc73f39fd6e51aad88f6f4ce6ab8827279cfffb922666001630000df57670de0b6b3a76400006003630001afa3565b6001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f9e59609e00000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063c31eb0e090602401600060405180830381600087803b158015630001637657600080fd5b505af1158015630001638c573d6000803e3d6000fd5b50506007546040517f8fe3f93f000000000000000000000000000000000000000000000000000000008152600160048201526000602482015273ffffffffffffffffffffffffffffffffffffffff9091169250638fe3f93f91506044016020604051808303816000875af1158015630001640a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000164329190630001af51565b506007546040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526001600482015273f39fd6e51aad88f6f4ce6ab8827279cfffb92266602482015273ffffffffffffffffffffffffffffffffffffffff90911690638fe3f93f906044016020604051808303816000875af115801563000164c0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000164e89190630001af51565b506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f9e59609e00000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063c31eb0e090602401600060405180830381600087803b158015630001657657600080fd5b505af1158015630001658c573d6000803e3d6000fd5b50506007546040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526001600482015273f39fd6e51aad88f6f4ce6ab8827279cfffb92266602482015273ffffffffffffffffffffffffffffffffffffffff9091169250638fe3f93f91506044016020604051808303816000875af1158015630001661d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300002a7b9190630001af51565b63000166516300017b0b565b50506001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b15801563000166d657600080fd5b505af115801563000166ec573d6000803e3d6000fd5b50506007546040517f6e98e5e4000000000000000000000000000000000000000000000000000000008152739965507d1a55bcc2695c58ba16fb37d819b0a4dc60048201527390f79bf6eb2c4f870365e785982e1f101e93b906602482015273ffffffffffffffffffffffffffffffffffffffff9091169250636e98e5e49150604401600060405180830381600087803b158015630001678b57600080fd5b505af115801563000167a1573d6000803e3d6000fd5b50506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f5d2e3a7400000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff909116925063c31eb0e09150602401600060405180830381600087803b158015630001683257600080fd5b505af11580156300016848573d6000803e3d6000fd5b50506001546040517fca669fa7000000000000000000000000000000000000000000000000000000008152739965507d1a55bcc2695c58ba16fb37d819b0a4dc600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b15801563000168cd57600080fd5b505af115801563000168e3573d6000803e3d6000fd5b5050600754604080518082018252600d81527f48656c6c6f2c20776f726c642100000000000000000000000000000000000000602082015290517f6ce4074a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169350636ce4074a9250630001699d9173f39fd6e51aad88f6f4ce6ab8827279cfffb922669173c4375b7de8af5a38a93548eb8453a498222c4ff291600401630001b48c565b6000604051808303816000875af115801563000169be573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526300002a7b9190810190630001b59c565b6007546040517fff687543000000000000000000000000000000000000000000000000000000008152739965507d1a55bcc2695c58ba16fb37d819b0a4dc60048201526300016b0a9173c4375b7de8af5a38a93548eb8453a498222c4ff29173ffffffffffffffffffffffffffffffffffffffff9091169063ff68754390602401602060405180830381865afa1580156300016aa8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300016ad09190630001af51565b73ffffffffffffffffffffffffffffffffffffffff1614156040518060600160405280602e815260200163000544fb602e9139630001893b565b6001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b1580156300016b8b57600080fd5b505af11580156300016ba1573d6000803e3d6000fd5b50506007546040517f6e98e5e4000000000000000000000000000000000000000000000000000000008152739965507d1a55bcc2695c58ba16fb37d819b0a4dc600482015273c4375b7de8af5a38a93548eb8453a498222c4ff2602482015273ffffffffffffffffffffffffffffffffffffffff9091169250636e98e5e49150604401600060405180830381600087803b1580156300016c4057600080fd5b505af11580156300016c56573d6000803e3d6000fd5b50506007546040517fff687543000000000000000000000000000000000000000000000000000000008152739965507d1a55bcc2695c58ba16fb37d819b0a4dc60048201526300016d43935073ffffffffffffffffffffffffffffffffffffffff909116915063ff68754390602401602060405180830381865afa1580156300016ce4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300016d0c9190630001af51565b73c4375b7de8af5a38a93548eb8453a498222c4ff2604051806060016040528060268152602001630005474860269139630001898a565b6007546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff260048201526300016e2a9173ffffffffffffffffffffffffffffffffffffffff169063fdd5764590602401602060405180830381865afa1580156300016dcb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300016df39190630001af51565b739965507d1a55bcc2695c58ba16fb37d819b0a4dc604051806060016040528060268152602001630005474860269139630001898a565b6001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b1580156300016eab57600080fd5b505af11580156300016ec1573d6000803e3d6000fd5b50506007546040517f6e98e5e4000000000000000000000000000000000000000000000000000000008152739965507d1a55bcc2695c58ba16fb37d819b0a4dc60048201526000602482015273ffffffffffffffffffffffffffffffffffffffff9091169250636e98e5e49150604401600060405180830381600087803b1580156300016f4d57600080fd5b505af11580156300016f63573d6000803e3d6000fd5b50506007546040517fff687543000000000000000000000000000000000000000000000000000000008152739965507d1a55bcc2695c58ba16fb37d819b0a4dc6004820152630001703e935073ffffffffffffffffffffffffffffffffffffffff909116915063ff687543906024015b602060405180830381865afa1580156300016ff2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630001701a9190630001af51565b6000604051806060016040528060268152602001630005474860269139630001898a565b6007546040517ffdd5764500000000000000000000000000000000000000000000000000000000815260006004820152630001709b9173ffffffffffffffffffffffffffffffffffffffff169063fdd57645906024016300016fd3565b6001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b158015630001711c57600080fd5b505af11580156300017132573d6000803e3d6000fd5b50506007546040517f6e98e5e4000000000000000000000000000000000000000000000000000000008152739965507d1a55bcc2695c58ba16fb37d819b0a4dc600482015273c4375b7de8af5a38a93548eb8453a498222c4ff2602482015273ffffffffffffffffffffffffffffffffffffffff9091169250636e98e5e49150604401600060405180830381600087803b15801563000171d157600080fd5b505af115801563000171e7573d6000803e3d6000fd5b50506001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b158015630001726c57600080fd5b505af11580156300017282573d6000803e3d6000fd5b50506007546040517f6e98e5e40000000000000000000000000000000000000000000000000000000081526000600482015273c4375b7de8af5a38a93548eb8453a498222c4ff2602482015273ffffffffffffffffffffffffffffffffffffffff9091169250636e98e5e49150604401600060405180830381600087803b158015630001730e57600080fd5b505af11580156300017324573d6000803e3d6000fd5b50506007546040517fff687543000000000000000000000000000000000000000000000000000000008152600060048201526300017387935073ffffffffffffffffffffffffffffffffffffffff909116915063ff687543906024016300016fd3565b6007546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff2600482015263000173f79173ffffffffffffffffffffffffffffffffffffffff169063fdd57645906024016300016fd3565b6001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b158015630001747857600080fd5b505af1158015630001748e573d6000803e3d6000fd5b50506007546040517f6e98e5e4000000000000000000000000000000000000000000000000000000008152739965507d1a55bcc2695c58ba16fb37d819b0a4dc600482015273cccccccccccccccccccccccccccccccccccccccc602482015273ffffffffffffffffffffffffffffffffffffffff9091169250636e98e5e49150604401600060405180830381600087803b158015630001752d57600080fd5b505af11580156300017543573d6000803e3d6000fd5b50505050630001761a600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fe47cde76040518163ffffffff1660e01b8152600401602060405180830381865afa15801563000175bb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000175e39190630001af51565b739965507d1a55bcc2695c58ba16fb37d819b0a4dc604051806060016040528060268152602001630005437460269139630001898a565b6001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b158015630001769b57600080fd5b505af115801563000176b1573d6000803e3d6000fd5b50506007546040517f6e98e5e40000000000000000000000000000000000000000000000000000000081526000600482015273cccccccccccccccccccccccccccccccccccccccc602482015273ffffffffffffffffffffffffffffffffffffffff9091169250636e98e5e49150604401600060405180830381600087803b158015630001773d57600080fd5b505af11580156300017753573d6000803e3d6000fd5b5050505063000023cf600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fe47cde76040518163ffffffff1660e01b8152600401602060405180830381865afa15801563000177cb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000177f39190630001af51565b6000604051806060016040528060268152602001630005437460269139630001898a565b600063000178256300017b0b565b6000546040517feebab8ef00000000000000000000000000000000000000000000000000000000815291955062010000900473ffffffffffffffffffffffffffffffffffffffff16935063eebab8ef92506300017893915060029085906404a817c80090600401630001b0e6565b600060405180830381600087803b15801563000178af57600080fd5b505af115801563000178c5573d6000803e3d6000fd5b50506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f532e7bb600000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff909116925063c31eb0e09150602401600060405180830381600087803b158015630001795657600080fd5b505af1158015630001796c573d6000803e3d6000fd5b50506007546040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152909116925063953730189150602401600060405180830381600087803b15801563000179df57600080fd5b505af115801563000179f5573d6000803e3d6000fd5b50506007546000546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831694506351e3f1609350859262010000909204909116906367b42645906300017a6a90600290600401630001b02f565b602060405180830381865afa1580156300017a89573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300017ab19190630001af51565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401630000d91b565b600080600080600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635aba4b246040518163ffffffff1660e01b81526004016080604051808303816000875af11580156300017b82573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300017baa9190630001b38f565b935093509350935090919293565b8183146300004e20577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf3583816040516300017bf49190630001b97e565b60405180910390a16300004e2083836300019c30565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff166300017c96576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f74657374546f6b656e5375697465206973206e6f74207365740000000000000060448201526064015b60405180910390fd5b6000546040517f67b4264500000000000000000000000000000000000000000000000000000000815263000036499162010000900473ffffffffffffffffffffffffffffffffffffffff16906367b42645906300017cfa908890600401630001b02f565b602060405180830381865afa1580156300017d19573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300017d419190630001af51565b8484846300019d36565b6300004e20838383604051806020016040528060008152506300017c0a565b6007546040517fe958b70400000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015260009173ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156300017def573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300017e179190630001af51565b6007546040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015292935060009290911690638991b2f190602401602060405180830381865afa1580156300017e8f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300017eb79190630001b064565b600754600254604080517f406c8e2f000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169363f67c5bd093169163406c8e2f9160048083019260209291908290030181865afa1580156300017f33573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300017f5b9190630001af51565b73ffffffffffffffffffffffffffffffffffffffff166367b42645886040518263ffffffff1660e01b81526004016300017f979190630001b02f565b602060405180830381865afa1580156300017fb6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300017fde9190630001af51565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156300018049573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000180719190630001b064565b16600014159050630000364983151582151514600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663406c8e2f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801563000180f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630001811b9190630001af51565b73ffffffffffffffffffffffffffffffffffffffff1663440864fa876040518263ffffffff1660e01b815260040163000181579190630001b02f565b600060405180830381865afa1580156300018176573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405263000181c09190810190630001b59c565b836300018204576040518060400160405280601981526020017f206e6f7420656e61626c65642061732065787065637465642000000000000000815250630001823b565b6040518060400160405280601981526020017f20656e61626c6564206173206e6f7420657870657463746564000000000000008152505b6040516020016300018250929190630001b9c9565b604051602081830303815290604052630001893b565b600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff168282604051630001829b90630001ad40565b63000182ab93929190630001ba2c565b604051809103906000f08015801563000182c9573d6000803e3d6000fd5b50600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169182179055604080517fd46b9330000000000000000000000000000000000000000000000000000000008152905163d46b9330916004808201926020929091908290030181865afa1580156300018364573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630001838c9190630001af51565b600580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600254604080517fde2873590000000000000000000000000000000000000000000000000000000081529051919092169163de2873599160048083019260209291908290030181865afa158015630001842a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000184529190630001af51565b600a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600254604080517f2954018c00000000000000000000000000000000000000000000000000000000815290519190921691632954018c9160048083019260209291908290030181865afa15801563000184f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000185189190630001af51565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600254604080517f5e813a8b00000000000000000000000000000000000000000000000000000000815290519190921691635e813a8b9160048083019260209291908290030181865afa15801563000185b6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000185de9190630001af51565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600254604080517f6b70b04c00000000000000000000000000000000000000000000000000000000815290519190921691636b70b04c9160048083019260209291908290030181865afa158015630001867c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000186a49190630001af51565b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600254604080517fc12c21c00000000000000000000000000000000000000000000000000000000081529051919092169163c12c21c09160048083019260209291908290030181865afa1580156300018742573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630001876a9190630001af51565b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169182179055604080517f2630c12f0000000000000000000000000000000000000000000000000000000081529051632630c12f916004808201926020929091908290030181865afa1580156300018804573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630001882c9190630001af51565b600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600754604080517f6f307dc300000000000000000000000000000000000000000000000000000000815290519190921691636f307dc39160048083019260209291908290030181865afa15801563000188ca573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000188f29190630001af51565b600b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169190911790555050565b816300003cbc577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf35838160405163000189759190630001b97e565b60405180910390a16300003cbc826300019efe565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146300004e20577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf35838160405163000189f29190630001b97e565b60405180910390a16300004e2083835b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146300003cbc577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f506040516300018abe9060208082526025908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b61646460408201527f726573735d000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f816040516300018af99190630001ba6a565b60405180910390a17f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f826040516300018b349190630001bacd565b60405180910390a16300003cbc6300019f74565b600080546040517f883278630000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff16906388327863906300018bab906001908690600401630001b11f565b602060405180830381865afa1580156300018bca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300018bf29190630001b064565b6000546040517f8eb86e8b00000000000000000000000000000000000000000000000000000000815291925062010000900473ffffffffffffffffffffffffffffffffffffffff1690638eb86e8b906300018c589060019086908690600401630001b0e6565b600060405180830381600087803b1580156300018c7457600080fd5b505af11580156300018c8a573d6000803e3d6000fd5b505060005462010000900473ffffffffffffffffffffffffffffffffffffffff16915063eebab8ef90506002846300018cc685600a630001afa3565b6040518463ffffffff1660e01b81526004016300018ce893929190630001b0e6565b600060405180830381600087803b1580156300018d0457600080fd5b505af11580156300018d1a573d6000803e3d6000fd5b50506007546000546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831694506351e3f1609350869262010000909204909116906367b42645906300018d8f90600290600401630001b02f565b602060405180830381865afa1580156300018dae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300018dd69190630001af51565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156300018e4557600080fd5b505af11580156300018e5b573d6000803e3d6000fd5b505050506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638345f26e6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156300018ed0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300018ef89190630001b32d565b60ff1690506300004e20836300018f12600184630001b154565b6002630001a0fe565b6007546040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526000928392911690638991b2f190602401602060405180830381865afa1580156300018f91573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300018fb99190630001b064565b905060008060005b6101008110156300018ffe576001811b9150838216156300018fe4578260010192505b8382106300018ff4576300018ffe565b6001016300018fc1565b5090949350505050565b60606000630001901a8486630001b07f565b630001903a57505060408051600080825260208201909252906300019266565b8484630001904a8183630001b07f565b67ffffffffffffffff8111156300019068576300019068630001b4c9565b6040519080825280602002602001820160405280156300019093578160200160208202803683370190505b50935060005b600063000190a98385630001b07f565b1115630001919757600063000190c18385630001b07f565b60408051602081018a9052016040516020818303038152906040528051906020012060001c63000190f49190630001bb0c565b9050838110156300019142576001868381518110630001911a57630001911a630001b68a565b9115156020928302919091019091015283630001913881630001bb26565b945050630001917e565b6000868381518110630001915c57630001915c630001b68a565b9115156020928302919091019091015282630001917a81630001bb26565b9350505b81630001918c81630001b350565b925050506300019099565b87156300019262576000888760405160200163000191b791815260200190565b6040516020818303038152906040528051906020012060001c63000191de9190630001bb0c565b63000191ed906001630001b07f565b905060005b8651811015630001925f578681815181106300019215576300019215630001b68a565b60200260200101511563000192365781630001923281630001bb26565b9250505b81630001924757809550630001925f565b80630001925581630001b350565b91505063000191f2565b50505b5050505b935093915050565b60008363000192815750600163000194c3565b600083851463000193de57600080546040517f883278630000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff169063883278639063000192ef906001908c90600401630001b11f565b602060405180830381865afa158015630001930e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000193369190630001b064565b6000546040517f8eb86e8b00000000000000000000000000000000000000000000000000000000815291925062010000900473ffffffffffffffffffffffffffffffffffffffff1690638eb86e8b90630001939c906001908c908690600401630001b0e6565b600060405180830381600087803b15801563000193b857600080fd5b505af115801563000193ce573d6000803e3d6000fd5b50505050600191505063000193f0565b63000193ed600186630001b07f565b94505b60005b865181101563000194bd578381148015630001940c5750815b15630001943657630001942f8860016b033b2e3c9fd0803ce8000000630001a0fe565b63000194a5565b868181518110630001944e57630001944e630001b68a565b602002602001015115630001946e57630001942f8860016002630001a0fe565b630001947e88600180630001a0fe565b8381118015630001948c5750815b1563000194a5578563000194a181630001bb26565b9650505b8063000194b381630001b350565b91505063000193f3565b50849150505b95945050505050565b818311156300004e20577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf35838160405163000195099190630001b97e565b60405180910390a16300004e208383630001a612565b73ffffffffffffffffffffffffffffffffffffffff83163182811463000195bd577f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f8260405160200163000195769190630001bb61565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905263000195b4918790630001bbcc565b60405180910390a15b630000364981846300019c30565b63000036498484848460405180602001604052806000815250630001a77a565b6007546040517fe958b70400000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015260009173ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156300019670573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000196989190630001af51565b6007546040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015292935060009290911690633192195c906024016040805180830381865afa158015630001970f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000197379190630001b664565b60015460095491935073ffffffffffffffffffffffffffffffffffffffff908116925063bd6af43491167ff9a6503000000000000000000000000000000000000000000000000000000000630001979261271086630001afa3565b600b54604051602481019290925273ffffffffffffffffffffffffffffffffffffffff166044820152606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b909216825263000198539291600401630001b27c565b600060405180830381600087803b158015630001986f57600080fd5b505af1158015630000439d573d6000803e3d6000fd5b6007546040517fe958b70400000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015260009173ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015630001990a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019063000199329190630001af51565b6000546040517feebab8ef00000000000000000000000000000000000000000000000000000000815291925062010000900473ffffffffffffffffffffffffffffffffffffffff169063eebab8ef90630001999790879085908890600401630001b0e6565b600060405180830381600087803b15801563000199b357600080fd5b505af115801563000199c9573d6000803e3d6000fd5b5050505081156300003649576007546000546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316926351e3f16092859262010000909104909116906367b42645906300019a45908a90600401630001b02f565b602060405180830381865afa1580156300019a64573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300019a8c9190630001af51565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff92831660048201529116602482015260440163000022a1565b63000036498484848460405180602001604052806000815250630001a8b3565b6300003cbc828260405180602001604052806000815250630001951f565b600754604080517f8345f26e000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691638345f26e9160048083019260209291908290030181865afa1580156300019b96573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300019bbe9190630001b32d565b60ff1690506300003cbc82826002630001a0fe565b6300019be18383630001aafe565b6300004e20577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf3583816040516300019c1a9190630001b97e565b60405180910390a16300004e208383630001abd5565b8082146300003cbc577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f506040516300019cc09060208082526022908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b75696e60408201527f745d000000000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a8816040516300019cfb9190630001bc08565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a8826040516300018b349190630001bc55565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600091908616906370a0823190602401602060405180830381865afa1580156300019da8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300019dd09190630001b064565b90508281146300019ef0577f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f828673ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156300019e4a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526300019e949190810190630001b59c565b6040516020016300019ea9929190630001bc94565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526300019ee7918790630001bbcc565b60405180910390a15b630000d9d681846300019c30565b806300002a7b577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f506040516300019f669060208082526017908201527f4572726f723a20417373657274696f6e204661696c6564000000000000000000604082015260600190565b60405180910390a16300002a7b5b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15630001a0d05760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000009282019290925260016060820152600091907f70ca10bbd0dbfd9020a9f4b13402c16cb120705e0d1c0aeab10fa353ae586fc490608001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052630001a0499291602001630001b8af565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052630001a08591630001b8fb565b6000604051808303816000865af19150503d8060008114630001a0c6576040519150601f19603f3d011682016040523d82523d6000602084013e630001a0cb565b606091505b505050505b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055565b60005b8281101563000036495760006012604051630001a11f90630001ad50565b60608082526009908201527f6e657720746f6b656e0000000000000000000000000000000000000000000000608082015260a0602082018190526002908201527f6e7400000000000000000000000000000000000000000000000000000000000060c082015260ff909116604082015260e001604051809103906000f080158015630001a1b0573d6000803e3d6000fd5b50905060006305f5e1006008604051630001a1cc90630001ad5f565b91825260ff166020820152604001604051809103906000f080158015630001a1f8573d6000803e3d6000fd5b506001546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291925073ffffffffffffffffffffffffffffffffffffffff16906306447d5690602401600060405180830381600087803b158015630001a27b57600080fd5b505af1158015630001a291573d6000803e3d6000fd5b50506007546040517fd48bfca700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152909116925063d48bfca79150602401600060405180830381600087803b158015630001a30457600080fd5b505af1158015630001a31a573d6000803e3d6000fd5b50506009546040517fe8a97a3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301528581166024830152909116925063e8a97a3e9150604401600060405180830381600087803b158015630001a39557600080fd5b505af1158015630001a3ab573d6000803e3d6000fd5b50506007546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152611f406024830152909116925063a70bc5429150604401600060405180830381600087803b158015630001a42657600080fd5b505af1158015630001a43c573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015630001a4ac57600080fd5b505af1158015630001a4c2573d6000803e3d6000fd5b50506040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015260248201889052851692506340c10f1991506044016020604051808303816000875af1158015630001a53d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630001a5659190630001b91b565b506007546040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301528481166024830152909116906351e3f16090604401600060405180830381600087803b158015630001a5dd57600080fd5b505af1158015630001a5f3573d6000803e3d6000fd5b5050505050508080630001a60890630001b350565b915050630001a101565b808211156300003cbc577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f50604051630001a6a39060208082526022908201527f4572726f723a2061203c3d2062206e6f7420736174697366696564205b75696e60408201527f745d000000000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a1604080518181526009818301527f202056616c75652061000000000000000000000000000000000000000000000060608201526020810184905290517fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a89181900360800190a1604080518181526009918101919091527f202056616c7565206200000000000000000000000000000000000000000000006060820152602081018290527fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a8906080016300018b34565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff16630001a803576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f74657374546f6b656e5375697465206973206e6f74207365740000000000000060448201526064016300017c8d565b6000546040517f67b42645000000000000000000000000000000000000000000000000000000008152630000d9d69162010000900473ffffffffffffffffffffffffffffffffffffffff16906367b4264590630001a867908990600401630001b02f565b602060405180830381865afa158015630001a886573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630001a8ae9190630001af51565b858585855b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301526000919087169063dd62ed3e90604401602060405180830381865afa158015630001a92d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190630001a9559190630001b064565b9050828114630001aaf0577f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f828773ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015630001a9cf573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052630001aa199190810190630001b59c565b604051602001630001aa2e929190630001bd1e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052630001aa6c918890630001bbcc565b60405180910390a160408051818152600a818301527f207370656e6465723a2000000000000000000000000000000000000000000000606082015273ffffffffffffffffffffffffffffffffffffffff8616602082015290517f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f9181900360800190a15b630000439d81846300019c30565b805182516001911415630001abcb5760005b8351811015630001abc357828181518110630001ab3357630001ab33630001b68a565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916848281518110630001ab7857630001ab78630001b68a565b01602001517fff000000000000000000000000000000000000000000000000000000000000001614630001abab57600091505b80630001abb981630001b350565b915050630001ab10565b50630001abcf565b5060005b92915050565b630001abe38282630001aafe565b6300003cbc577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f50604051630001ac709060208082526023908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b62797460408201527f65735d0000000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17fd26e16cad4548705e4c9e2d94f98ee91c289085ee425594fd5635fa2964ccf1881604051630001acab9190630001bda8565b60405180910390a17fd26e16cad4548705e4c9e2d94f98ee91c289085ee425594fd5635fa2964ccf18826040516300018b349190630001bdfd565b6158e880630001be3d83390190565b617a5180630002172583390190565b610fff80630002917683390190565b615c8480630002a17583390190565b61107e80630002fdf983390190565b6102ba806300030e7783390190565b6202131480630003113183390190565b61175880630005244583390190565b6106ca806300053b9d83390190565b80356fffffffffffffffffffffffffffffffff811681146300011b4e57600080fd5b600060208284031215630001ada457600080fd5b630001adb182630001ad6e565b9392505050565b60ff811681146300002a7b57600080fd5b600060208284031215630001addd57600080fd5b8135630001adb181630001adb8565b600060208284031215630001ae0057600080fd5b5035919050565b80151581146300002a7b57600080fd5b600080600080600080600080610100898b031215630001ae3657600080fd5b630001ae4389630001ad6e565b9750630001ae5560208a01630001ad6e565b9650630001ae6760408a01630001ad6e565b9550630001ae7960608a01630001ad6e565b9450630001ae8b60808a01630001ad6e565b935060a0890135630001ae9f81630001ae07565b925060c0890135630001aeb381630001ae07565b915060e0890135630001aec781630001ae07565b809150509295985092959890939650565b73ffffffffffffffffffffffffffffffffffffffff811681146300002a7b57600080fd5b61ffff811681146300002a7b57600080fd5b60008060408385031215630001af2357600080fd5b8235630001af3281630001aed8565b91506020830135630001af4681630001aefc565b809150509250929050565b600060208284031215630001af6557600080fd5b8151630001adb181630001aed8565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615630001afe157630001afe1630001af74565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600b8110630001b02b57630001b02b630001afe6565b9052565b60208101630001abcf8284630001b015565b600060208284031215630001b05557600080fd5b8151630001adb181630001aefc565b600060208284031215630001b07857600080fd5b5051919050565b60008219821115630001b09857630001b098630001af74565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082630001b0e157630001b0e1630001b09d565b500490565b60608101630001b0f88286630001b015565b73ffffffffffffffffffffffffffffffffffffffff93909316602082015260400152919050565b60408101630001b1318285630001b015565b73ffffffffffffffffffffffffffffffffffffffff831660208301529392505050565b600082821015630001b16c57630001b16c630001af74565b500390565b600080600080600060a08688031215630001b18b57600080fd5b8551630001b19a81630001aefc565b6020870151909550630001b1af81630001aefc565b6040870151909450630001b1c481630001aefc565b6060870151909350630001b1d981630001aefc565b6080870151909250630001b1ee81630001aefc565b809150509295509295909350565b60005b83811015630001b21b578181015183820152602001630001b1ff565b8381111563000036495750506000910152565b60008151808452630001b24a816020860160208601630001b1fc565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff83168152604060208201526000630001b2af6040830184630001b22e565b949350505050565b60038110630001b02b57630001b02b630001afe6565b73ffffffffffffffffffffffffffffffffffffffff888116825260e0820190630001b2fd602084018a630001b2b7565b6040830197909752948616606082015292909416608083015260a082015291151560c09092019190915292915050565b600060208284031215630001b34157600080fd5b8151630001adb181630001adb8565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415630001b38857630001b388630001af74565b5060010190565b60008060008060808587031215630001b3a757600080fd5b8451935060208501519250604085015191506060850151630001b3cb81630001aed8565b939692955090935050565b60608101630001b3e88286630001b015565b73ffffffffffffffffffffffffffffffffffffffff841660208301526fffffffffffffffffffffffffffffffff83166040830152949350505050565b60608101630001b4368286630001b015565b73ffffffffffffffffffffffffffffffffffffffff8416602083015260ff83166040830152949350505050565b600061ffff83811690831681811015630001b48457630001b484630001af74565b039392505050565b600073ffffffffffffffffffffffffffffffffffffffff80861683528085166020840152506060604083015263000194c36060830184630001b22e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff80841115630001b51957630001b519630001b4c9565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715630001b56557630001b565630001b4c9565b81604052809350858152868686011115630001b58057600080fd5b630001b592866020830187630001b1fc565b5050509392505050565b600060208284031215630001b5b057600080fd5b815167ffffffffffffffff811115630001b5c957600080fd5b8201601f81018413630001b5dc57600080fd5b630001b2af84825160208401630001b4f8565b60808101630001b6018287630001b015565b73ffffffffffffffffffffffffffffffffffffffff9485166020830152929093166040840152606090920191909152919050565b60006fffffffffffffffffffffffffffffffff83811690831681811015630001b48457630001b484630001af74565b60008060408385031215630001b67957600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080600060608486031215630001b6d057600080fd5b8351925060208401519150604084015190509250925092565b60008060408385031215630001b6fe57600080fd5b8251630001b70d81630001aed8565b6020840151909250630001af4681630001aefc565b602081526000630001adb16020830184630001b22e565b84815260808101630001b7516020830186630001b2b7565b60408201939093526060015292915050565b60008060008060808587031215630001b77b57600080fd5b505082516020840151604085015160609095015191969095509092509050565b60008251630001b7b1818460208701630001b1fc565b7f3a20616d6f756e74546f506f6f6c000000000000000000000000000000000000920191825250600e01919050565b60008251630001b7f6818460208701630001b1fc565b7f3a2072656d61696e696e6746756e647300000000000000000000000000000000920191825250601001919050565b60008251630001b83b818460208701630001b1fc565b7f3a2070726f666974000000000000000000000000000000000000000000000000920191825250600801919050565b60008251630001b880818460208701630001b1fc565b7f3a206c6f73730000000000000000000000000000000000000000000000000000920191825250600601919050565b7fffffffff000000000000000000000000000000000000000000000000000000008316815260008251630001b8ed816004850160208701630001b1fc565b919091016004019392505050565b60008251630001b911818460208701630001b1fc565b9190910192915050565b600060208284031215630001b92f57600080fd5b8151630001adb181630001ae07565b60608101630001b9508286630001b015565b73ffffffffffffffffffffffffffffffffffffffff8085166020840152808416604084015250949350505050565b60408152600560408201527f4572726f720000000000000000000000000000000000000000000000000000006060820152608060208201526000630001adb16080830184630001b22e565b7f546f6b656e200000000000000000000000000000000000000000000000000000815260008351630001ba05816006850160208801630001b1fc565b835190830190630001ba20816006840160208801630001b1fc565b01600601949350505050565b73ffffffffffffffffffffffffffffffffffffffff8416815260608101630001ba5a6020830185630001b015565b8215156040830152949350505050565b604081526000630001baa960408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b905073ffffffffffffffffffffffffffffffffffffffff8316602083015292915050565b604081526000630001baa960408301600a81527f2020202041637475616c00000000000000000000000000000000000000000000602082015260400190565b600082630001bb2157630001bb21630001b09d565b500690565b600081630001bb3b57630001bb3b630001af74565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b60008251630001bb77818460208701630001b1fc565b7f496e636f7272656374204554482062616c616e6365206f6e206163636f756e749201918252507f3a200000000000000000000000000000000000000000000000000000000000006020820152602201919050565b604081526000630001bbe36040830185630001b22e565b905073ffffffffffffffffffffffffffffffffffffffff831660208301529392505050565b604081526000630001bc4760408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b905082602083015292915050565b604081526000630001bc4760408301600a81527f2020202041637475616c00000000000000000000000000000000000000000000602082015260400190565b60008351630001bcaa818460208801630001b1fc565b7f496e636f727265637420000000000000000000000000000000000000000000009083019081528351630001bce881600a840160208801630001b1fc565b7f2062616c616e6365206f6e206163636f756e743a200000000000000000000000600a9290910191820152601f01949350505050565b60008351630001bd34818460208801630001b1fc565b7f496e636f727265637420000000000000000000000000000000000000000000009083019081528351630001bd7281600a840160208801630001b1fc565b7f20416c6c6f77616e6365206f6e206163636f756e743a20200000000000000000600a9290910191820152602201949350505050565b604081526000630001bde760408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b8281036020840152630001b2af8185630001b22e565b604081526000630001bde760408301600a81527f2020202041637475616c0000000000000000000000000000000000000000000060208201526040019056fe6101606040526000805462ff00001916620c00001790553480156200002357600080fd5b50604051620058e8380380620058e8833981016040819052620000469162000537565b806001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000085573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ab919062000537565b6000805460ff191690556001600160a01b038116620000dd57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200011c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000142919062000537565b6001600160a01b03166080816001600160a01b031681525050506000816001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200019d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c3919062000537565b6001600160a01b03831661010081905260e081905260408051632495a59960e01b81529051929350600092632495a599916004808201926020929091908290030181865afa1580156200021a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000240919062000537565b6001600160a01b03811660c05290506200025a8162000472565b816001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000299573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002bf919062000537565b6001600160a01b0316610120816001600160a01b031681525050816001600160a01b03166377532ed96040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000318573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033e919062000537565b6001600160a01b0316610140816001600160a01b031681525050816001600160a01b031663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000397573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003bd919062000537565b6001600001600a6101000a8154816001600160a01b0302191690836001600160a01b03160217905550816001600160a01b0316639068a8686040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000425573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044b919062000537565b6001600160a01b031660a0525050600380546001600160a01b031916331790555062000588565b6001600160a01b03811660009081526006602052604090205415620004aa57604051632e5a5c7760e01b815260040160405180910390fd5b61010060055410620004cf57604051631cbbe18560e01b815260040160405180910390fd5b600580546001600160a01b0383166000818152600660209081526040808320600190951b948590558483526004909152812091909155825491929062000515836200055e565b91905055505050565b6001600160a01b03811681146200053457600080fd5b50565b6000602082840312156200054a57600080fd5b815162000557816200051e565b9392505050565b60006000198214156200058157634e487b7160e01b600052601160045260246000fd5b5060010190565b60805160a05160c05160e051610100516101205161014051615248620006a0600039600081816107e20152818161371001526137c501526000818161052f01526136780152600081816103d301528181610e5701528181610ebb015281816124ff0152818161265a01528181612aa101528181612b8c01528181612c4e01528181612d0d0152613b8f015260006105a401526000818161062701528181610d2201528181610db301528181610e0001528181610e3601528181610f3f0152818161203a01528181612b6b015281816130ee015281816134dc015281816135a90152613fe601526000818161081c01528181610fe101526124c20152600081816107a80152818161118401526122cb01526152486000f3fe608060405234801561001057600080fd5b50600436106103415760003560e01c8063830aa745116101bd578063a70bc542116100f9578063e75538c7116100a2578063f9aa028a1161007c578063f9aa028a1461089d578063fdd57645146108bd578063fe47cde7146108f3578063ff6875431461091357600080fd5b8063e75538c714610864578063e958b70414610877578063f67c5bd01461088a57600080fd5b8063db7ceb80116100d3578063db7ceb8014610817578063dc2b21c11461083e578063e1998cf91461085157600080fd5b8063a70bc542146107ca578063c5e10eef146107dd578063d48bfca71461080457600080fd5b806394cf073a116101665780639f5f86ae116101405780639f5f86ae146107745780639fd12b7714610787578063a366f49614610790578063a50cf2c8146107a357600080fd5b806394cf073a146106f557806395373018146107085780639af1d35a1461071b57600080fd5b80638991b2f1116101975780638991b2f1146106af5780638fe3f93f146106cf578063944ac59f146106e257600080fd5b8063830aa7451461066f5780638345f26e146106825780638456cb59146106a757600080fd5b8063458936f51161028c578063570a7af2116102355780636ce4074a1161020f5780636ce4074a146105ef5780636e98e5e41461060f5780636f307dc314610622578063783274381461064957600080fd5b8063570a7af21461059f5780635c975abb146105c6578063654a9eda146105dc57600080fd5b80635063524a116102665780635063524a1461055157806351e3f1601461058457806354fd4d501461059757600080fd5b8063458936f51461050e57806346fb371d146105175780634f0e0ef31461052a57600080fd5b80632630c12f116102ee5780633192195c116102c85780633192195c146104be5780633e8297ca146104e65780633f4ba83a1461050657600080fd5b80632630c12f1461045857806329df0b93146104845780632f7a18811461049757600080fd5b806316f0115b1161031f57806316f0115b146103ce578063172c48c7146103f55780632362a2d81461043757600080fd5b8063055ee9b5146103465780630d8f9cee146103a657806311ca4fc2146103bb575b600080fd5b61037c610354366004614a87565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6103b96103b4366004614aa4565b610949565b005b6103b96103c9366004614aa4565b610a76565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b610408610403366004614add565b610b4e565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835261ffff90911660208301520161039d565b61044a610445366004614b13565b610b66565b60405190815260200161039d565b6001546a0100000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1661037c565b6103b9610492366004614a87565b6110be565b60005461037c906301000000900473ffffffffffffffffffffffffffffffffffffffff1681565b6104d16104cc366004614a87565b611122565b6040805192835260208301919091520161039d565b61044a6104f4366004614a87565b60096020526000908152604090205481565b6103b9611156565b61044a60055481565b6103b9610525366004614b95565b611244565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b61056461055f366004614be6565b61149b565b60408051948552602085019390935291830152606082015260800161039d565b6103b9610592366004614aa4565b611602565b61044a600281565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b60005460ff16604051901515815260200161039d565b6103b96105ea366004614c21565b611703565b6106026105fd366004614d40565b611bbb565b60405161039d9190614e5b565b6103b961061d366004614aa4565b611e8e565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b61065c610657366004614a87565b612036565b60405161ffff909116815260200161039d565b6103b961067d366004614b95565b61210f565b6000546106959062010000900460ff1681565b60405160ff909116815260200161039d565b6103b961229d565b61044a6106bd366004614a87565b60086020526000908152604090205481565b61037c6106dd366004614e6e565b612389565b6103b96106f0366004614ea5565b612718565b61044a610703366004614f0a565b612845565b6103b9610716366004614a87565b612e5a565b6001546040805161ffff808416825262010000840481166020830152640100000000840481169282019290925266010000000000008304821660608201526801000000000000000090920416608082015260a00161039d565b6103b9610782366004614a87565b612f85565b61044a60075481565b6103b961079e366004614add565b613045565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b96107d8366004614f4c565b61309b565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b9610812366004614a87565b613221565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b961084c366004614f81565b61327b565b6103b961085f366004614aa4565b613306565b610408610872366004614add565b6134c9565b61037c610885366004614a87565b613541565b61044a610898366004614a87565b6135a5565b60035461037c9073ffffffffffffffffffffffffffffffffffffffff1681565b61037c6108cb366004614a87565b600b6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b600c5461037c9073ffffffffffffffffffffffffffffffffffffffff1681565b61037c610921366004614a87565b600a6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561099b57506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b156109d2576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff1615610a14576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055610a4a828261362e565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b60035473ffffffffffffffffffffffffffffffffffffffff163314610ac7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805473ffffffffffffffffffffffffffffffffffffffff9384166301000000027fffffffffffffffffff0000000000000000000000000000000000000000ffffff90911617905560018054919092166a0100000000000000000000027fffff0000000000000000000000000000000000000000ffffffffffffffffffff909116179055565b600080610b5d6001841b6134c9565b91509150915091565b6000805460ff1615610bd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064015b60405180910390fd5b600054610100900460ff1615610c1b576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff163314610ca0576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610cab89613541565b90506000806000806000610cbe86611122565b9094509050610ccf8c8e868461149b565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152939b5093985090955093506000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015610d6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8f9190614fa4565b9050610d9b8887614fec565b610da6906001614fec565b811115610de657610de1877f00000000000000000000000000000000000000000000000000000000000000008d60018c8b870303038d61366e565b610e30565b610e3073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168d8960018a8d01869003016138c0565b610e7e877f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000089600061366e565b6040517fca9505e40000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604481018490527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ca9505e490606401600060405180830381600087803b158015610f1457600080fd5b505af1158015610f28573d6000803e3d6000fd5b50505050505050506001841115610f6757610f67837f00000000000000000000000000000000000000000000000000000000000000008d87600061366e565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260086020526040902054861916610f9c8489888461395b565b6040517f89b77b3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f000000000000000000000000000000000000000000000000000000000000000016906389b77b3e90602401600060405180830381600087803b15801561102557600080fd5b505af1158015611039573d6000803e3d6000fd5b50505073ffffffffffffffffffffffffffffffffffffffff909c16600090815260026020526040812080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550929a9950505050505050505050565b6000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314611116576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61111f81613a35565b50565b60008060008061113185613aa6565b91955092509050816111438286615004565b61114d9190615041565b92505050915091565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156111e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611204919061507c565b61123a576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611242613c24565b565b60005460ff16156112b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156112f3576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100178155338152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff9081169084161480159061137457506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b80156113985750600c5473ffffffffffffffffffffffffffffffffffffffff163314155b806113b7575073ffffffffffffffffffffffffffffffffffffffff8316155b156113ee576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113f7826135a5565b61142d576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061143885613541565b9050611448838583856000613d05565b61146c5761145b83858360006001613d05565b5061146a838583856001613d05565b505b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b6001546000908190819081906127109061ffff166114b98888615099565b6114c39190615004565b6114cd9190615041565b6114d79086614fec565b935060018760028111156114ed576114ed6150b0565b1415611587576001546000906127109061151390640100000000900461ffff168b615004565b61151d9190615041565b6001549091506127109061153b9062010000900461ffff168b615004565b6115459190615041565b61154f9086614fec565b94508481111561156657600185820303935061156a565b8094505b85811061157b578585039250611581565b84860391505b506115f7565b600287600281111561159b5761159b6150b0565b14156115f157600154600090612710906115c59068010000000000000000900461ffff168b615004565b6115cf9190615041565b6001549091506127109061153b906601000000000000900461ffff168b615004565b84840391505b945094509450949050565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561165457506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b1561168b576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff16156116cd576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055610a4a8282613ea6565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561175557506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b1561178c576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff16156117ce576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790556118048584613ea6565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152600091908616906370a0823190602401602060405180830381865afa158015611874573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118989190614fa4565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529192506000918616906370a0823190602401602060405180830381865afa15801561190a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192e9190614fa4565b60015490915060009081906a0100000000000000000000900473ffffffffffffffffffffffffffffffffffffffff16635cecbd0e61196c8689615099565b8a6119778988615099565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152600481019390935273ffffffffffffffffffffffffffffffffffffffff918216602484015260448301528a1660648201526084016040805180830381865afa1580156119f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1791906150df565b9150915060018411611a2d57611a2d898961362e565b611a3687612036565b611a449061ffff1682615004565b9050611a4f88612036565b611a5d9061ffff1683615004565b9150818110611a7857611a6f89613a35565b5050505061146c565b73ffffffffffffffffffffffffffffffffffffffff891660009081526009602052604081205483611ab56b033b2e3c9fd0803ce800000085615004565b611abf9190615041565b611ad5906b033b2e3c9fd0803ce8000000615099565b611adf9190614fec565b60015490915061271090611b0a906b033b2e3c9fd0803ce80000009062010000900461ffff16615004565b611b149190615041565b8111611b555773ffffffffffffffffffffffffffffffffffffffff8a166000908152600960205260409020819055611b4b8a613a35565b505050505061146c565b611b5e8a613f56565b50505073ffffffffffffffffffffffffffffffffffffffff871660009081526009602052604090206001905550505050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b6060611bc960005460ff1690565b15611c30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff1615611c72576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100178155338152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff908116908416141580611ce7575073ffffffffffffffffffffffffffffffffffffffff8316155b15611d3d57600c5473ffffffffffffffffffffffffffffffffffffffff163314611d3d576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611d4885613541565b90508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167faed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab0360405160405180910390a36040517f1cff79cd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821690631cff79cd90611df89087908790600401615103565b6000604051808303816000875af1158015611e17573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611e5d9190810190615132565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905595945050505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314611edf576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821615611f4f5773ffffffffffffffffffffffffffffffffffffffff8281166000908152600a6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169183169190911790555b73ffffffffffffffffffffffffffffffffffffffff811615611fbf5773ffffffffffffffffffffffffffffffffffffffff8181166000908152600b6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169184169190911790555b73ffffffffffffffffffffffffffffffffffffffff811673cccccccccccccccccccccccccccccccccccccccc141561203257600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790555b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120ba5750506001547e01000000000000000000000000000000000000000000000000000000000000900461ffff1690565b60006120c5836135a5565b9050806120fe576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612107816134c9565b949350505050565b60005460ff161561217c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156121be576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff163314612243576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61224d8383613ea6565b61226f73ffffffffffffffffffffffffffffffffffffffff83168585846138c0565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555050565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015612327573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061234b919061507c565b612381576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112426142d4565b6000805460ff16156123f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff1615612439576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff1633146124be576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166321d18456857f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612568573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061258c9190614fa4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168152600481019290925260248201526044016020604051808303816000875af11580156125e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061260b91906151a0565b6040517fbf28068b0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff80831660248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063bf28068b90604401600060405180830381600087803b1580156126a057600080fd5b505af11580156126b4573d6000803e3d6000fd5b505050506126c28382614394565b73ffffffffffffffffffffffffffffffffffffffff811660009081526008602052604081206001905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690559392505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314612769576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805461ffff92831668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9484166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff96851664010000000002969096167fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff97851662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000090931694909816939093171794909416949094179190911716919091179055565b6000805460ff16156128b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156128f5576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff16331461297a576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080600061298887613aa6565b925092509250846129a25761299d8684615099565b6129ac565b6129ac8684614fec565b935060008515612b045769021e19e0c9bab24000008510612a15576129d583603689901c615004565b6129e3603686901c84615004565b6129ed9190614fec565b603686901c6129fc8585615004565b612a069190615004565b612a109190615041565b612a52565b612a1f8388615004565b612a298584615004565b612a339190614fec565b85612a3e8585615004565b612a489190615004565b612a529190615041565b6040517fbf28068b0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff8a811660248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063bf28068b90604401600060405180830381600087803b158015612ae757600080fd5b505af1158015612afb573d6000803e3d6000fd5b50505050612d9f565b60008484612b128583615004565b612b1c9190615041565b612b269190615099565b60015490915060009061271090612b419061ffff1684615004565b612b4b9190615041565b905073ffffffffffffffffffffffffffffffffffffffff8a1663d1660f997f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000084612bb6878f614fec565b612bc09190614fec565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b158015612c3457600080fd5b505af1158015612c48573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ca9505e4838b612c949190614fec565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815260048101919091526024810184905260006044820152606401600060405180830381600087803b158015612cf357600080fd5b505af1158015612d07573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d9a9190614fa4565b925050505b6040517f16128211000000000000000000000000000000000000000000000000000000008152600481018690526024810182905273ffffffffffffffffffffffffffffffffffffffff891690631612821190604401600060405180830381600087803b158015612e0e57600080fd5b505af1158015612e22573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055509498975050505050505050565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff16158015612eac57506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b15612ee3576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff1615612f25576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055612f5a81613f56565b50600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b60035473ffffffffffffffffffffffffffffffffffffffff163314612fd6576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517ff62005acebe9b616aefb5f248b48f5e89f28437b27d1eebc0b2d911209f297af90600090a250565b60035473ffffffffffffffffffffffffffffffffffffffff163314613096576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600755565b60035473ffffffffffffffffffffffffffffffffffffffff1633146130ec576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613193576001805461ffff83167e01000000000000000000000000000000000000000000000000000000000000027dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790555050565b600061319e836135a5565b9050806131d7576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000908152600460205260409020805473ffffffffffffffffffffffffffffffffffffffff1675ffff000000000000000000000000000000000000000060a084901b161790555050565b60035473ffffffffffffffffffffffffffffffffffffffff163314613272576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61111f81614467565b60035473ffffffffffffffffffffffffffffffffffffffff1633146132cc576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805460ff90921662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff909216919091179055565b60005460ff1615613373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156133b5576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff16331461343a576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061344583613541565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260026020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055905061349c8282614394565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b60008082600114156135275750506001547f0000000000000000000000000000000000000000000000000000000000000000927e0100000000000000000000000000000000000000000000000000000000000090910461ffff169150565b50506000908152600460205260409020549060a082901c90565b73ffffffffffffffffffffffffffffffffffffffff80821660009081526002602052604090205416806135a0576040517fb5ba4c4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146136255773ffffffffffffffffffffffffffffffffffffffff8216600090815260066020526040902054613628565b60015b92915050565b6000613639826135a5565b73ffffffffffffffffffffffffffffffffffffffff909316600090815260086020526040902080549319939093169092555050565b8080156136c657507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b15613828576040517fd1660f9900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301526044820184905286169063d1660f9990606401600060405180830381600087803b15801561376357600080fd5b505af1158015613777573d6000803e3d6000fd5b50506040517f5869dba800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690527f0000000000000000000000000000000000000000000000000000000000000000169250635869dba89150604401600060405180830381600087803b15801561380b57600080fd5b505af115801561381f573d6000803e3d6000fd5b505050506138b9565b6040517fd1660f9900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301526044820184905286169063d1660f9990606401600060405180830381600087803b1580156138a057600080fd5b505af11580156138b4573d6000803e3d6000fd5b505050505b5050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261395590859061455b565b50505050565b60025b8181116138b95781811615613a2d576000613978826134c9565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529192506000918316906370a0823190602401602060405180830381865afa1580156139eb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a0f9190614fa4565b90506002811115613a2a57613a2a878388600185038961366e565b50505b60011b61395e565b73ffffffffffffffffffffffffffffffffffffffff811660009081526008602052604081205490613a6582614667565b60005490915062010000900460ff16811115613aa1576000613a86836146a7565b613a91906001614fec565b905061395584848460008561470b565b505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff16631afbb7a46040518163ffffffff1660e01b8152600401602060405180830381865afa158015613af6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b1a9190614fa4565b92508373ffffffffffffffffffffffffffffffffffffffff166317d11a156040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b8b9190614fa4565b91507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bf8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c1c9190614fa4565b929491935050565b60005460ff16613c90576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610bd0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6040805173ffffffffffffffffffffffffffffffffffffffff8681166024830152604480830186905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b30000000000000000000000000000000000000000000000000000000017905291517f1cff79cd000000000000000000000000000000000000000000000000000000008152600092861691631cff79cd91613dc6918a91600401615103565b6000604051808303816000875af1925050508015613e2457506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052613e219190810190615132565b60015b613e2d57613e61565b80511580613e50575080806020019051810190613e4a919061507c565b15156001145b15613e5f576001915050613e9d565b505b8115613e99576040517f76e3e29c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060005b95945050505050565b6000613eb1826135a5565b9050801580613ec35750600754811615155b15613efa576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83166000908152600860205260409020548116613aa15773ffffffffffffffffffffffffffffffffffffffff83166000908152600860205260409020805482179055505050565b60015473ffffffffffffffffffffffffffffffffffffffff8281166000908152600860205260408120546a010000000000000000000090930490911691908080613f9f86611122565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526127108202600482015273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350908716915063f9a6503090604401602060405180830381865afa15801561403a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061405e9190614fa4565b9250614069846146a7565b6001019150506000806000805b848110156142a157801561408f5760018186031b614092565b60015b935086841615614299576000806140a8866134c9565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8e811660048301529294509092506000918416906370a0823190602401602060405180830381865afa15801561411d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141419190614fa4565b9050600181111561428c576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff848116602483015261ffff841691908d169063f9a6503090604401602060405180830381865afa1580156141c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141ea9190614fa4565b6141f49190615004565b6141fe9087614fec565b95508886106142875760006142128b614667565b60005490915062010000900460ff16811115614249576142448d8c836001891561423e57898e0361470b565b8d61470b565b614278565b85156142785773ffffffffffffffffffffffffffffffffffffffff8d1660009081526008602052604090208b90555b50505050505050505050505050565b614295565b98861898600194505b5050505b600101614076565b506040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005460ff1615614341576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613cdb3390565b73ffffffffffffffffffffffffffffffffffffffff821615806143dd575073ffffffffffffffffffffffffffffffffffffffff8281166000908152600260205260409020541615155b15614414576040517f9e59609e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff918216600090815260026020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001691909216179055565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260066020526040902054156144c4576040517f2e5a5c7700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61010060055410614501576040517f1cbbe18500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005805473ffffffffffffffffffffffffffffffffffffffff83166000818152600660209081526040808320600190951b9485905584835260049091528120919091558254919290614552836151bd565b91905055505050565b60006145bd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166148799092919063ffffffff16565b805190915015613aa157808060200190518101906145db919061507c565b613aa1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610bd0565b60008060005b6101008110156146a0576001811b91508382161561468c578260010192505b838210614698576146a0565b60010161466d565b5050919050565b600081600114156146ba57506000919050565b61010060015b60016146cc8284614fec565b901c92506001831b848116158015906146e75750600185851c145b156146f257506146a0565b84811061470157839250614705565b8391505b506146c0565b815b81811015614846576001811b8581161561483d57600061472c826134c9565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529192506000918316906370a0823190602401602060405180830381865afa15801561479f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147c39190614fa4565b90506001811161483a57600054978318977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9097019660ff6201000090910416871161483a5750505073ffffffffffffffffffffffffffffffffffffffff86166000908152600860205260409020859055506138b9565b50505b5060010161470d565b506040517f53275fcb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606148888484600085614892565b90505b9392505050565b606082471015614924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610bd0565b843b61498c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610bd0565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516149b591906151f6565b60006040518083038185875af1925050503d80600081146149f2576040519150601f19603f3d011682016040523d82523d6000602084013e6149f7565b606091505b5091509150614a07828286614a12565b979650505050505050565b60608315614a2157508161488b565b825115614a315782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd09190614e5b565b73ffffffffffffffffffffffffffffffffffffffff8116811461111f57600080fd5b600060208284031215614a9957600080fd5b813561488b81614a65565b60008060408385031215614ab757600080fd5b8235614ac281614a65565b91506020830135614ad281614a65565b809150509250929050565b600060208284031215614aef57600080fd5b5035919050565b8035600381106135a057600080fd5b801515811461111f57600080fd5b600080600080600080600060e0888a031215614b2e57600080fd5b8735614b3981614a65565b9650614b4760208901614af6565b9550604088013594506060880135614b5e81614a65565b93506080880135614b6e81614a65565b925060a0880135915060c0880135614b8581614b05565b8091505092959891949750929550565b60008060008060808587031215614bab57600080fd5b8435614bb681614a65565b93506020850135614bc681614a65565b92506040850135614bd681614a65565b9396929550929360600135925050565b60008060008060808587031215614bfc57600080fd5b84359350614c0c60208601614af6565b93969395505050506040820135916060013590565b600080600080600060a08688031215614c3957600080fd5b8535614c4481614a65565b94506020860135614c5481614a65565b93506040860135614c6481614a65565b94979396509394606081013594506080013592915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614cf257614cf2614c7c565b604052919050565b600067ffffffffffffffff821115614d1457614d14614c7c565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600080600060608486031215614d5557600080fd5b8335614d6081614a65565b92506020840135614d7081614a65565b9150604084013567ffffffffffffffff811115614d8c57600080fd5b8401601f81018613614d9d57600080fd5b8035614db0614dab82614cfa565b614cab565b818152876020838501011115614dc557600080fd5b816020840160208301376000602083830101528093505050509250925092565b60005b83811015614e00578181015183820152602001614de8565b838111156139555750506000910152565b60008151808452614e29816020860160208601614de5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061488b6020830184614e11565b60008060408385031215614e8157600080fd5b823591506020830135614ad281614a65565b803561ffff811681146135a057600080fd5b600080600080600060a08688031215614ebd57600080fd5b614ec686614e93565b9450614ed460208701614e93565b9350614ee260408701614e93565b9250614ef060608701614e93565b9150614efe60808701614e93565b90509295509295909350565b600080600060608486031215614f1f57600080fd5b8335614f2a81614a65565b9250602084013591506040840135614f4181614b05565b809150509250925092565b60008060408385031215614f5f57600080fd5b8235614f6a81614a65565b9150614f7860208401614e93565b90509250929050565b600060208284031215614f9357600080fd5b813560ff8116811461488b57600080fd5b600060208284031215614fb657600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115614fff57614fff614fbd565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561503c5761503c614fbd565b500290565b600082615077577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60006020828403121561508e57600080fd5b815161488b81614b05565b6000828210156150ab576150ab614fbd565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600080604083850312156150f257600080fd5b505080516020909101519092909150565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015260006148886040830184614e11565b60006020828403121561514457600080fd5b815167ffffffffffffffff81111561515b57600080fd5b8201601f8101841361516c57600080fd5b805161517a614dab82614cfa565b81815285602083850101111561518f57600080fd5b613e9d826020830160208601614de5565b6000602082840312156151b257600080fd5b815161488b81614a65565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156151ef576151ef614fbd565b5060010190565b60008251615208818460208701614de5565b919091019291505056fea26469706673582212209d39bb9d4972b515acdad1ffb757acd15e103ca6ee762f88a6382b36243734ba64736f6c634300080a003360806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d00011790553480156200003a57600080fd5b506040805161018081019091526000908060c081018060018152604080518082018252600381526244414960e81b6020828101919091528301526012908201526305f5e100606082015260800160018152602001600081525081526020016040518060c001604052806002600a811115620000b957620000b962000b78565b815260408051808201825260048152635553444360e01b6020828101919091528301526006908201526305f5e100606082015260800160018152602001600081525081526020016040518060c001604052806003600a81111562000121576200012162000b78565b815260408051808201825260048152630ae8aa8960e31b602082810191909152830152601290820152644a817c8000606082015260800160028152602001600081525081526020016040518060c001604052806004600a8111156200018a576200018a62000b78565b815260408051808201825260048152634c494e4b60e01b6020828101919091528301526012908201526359682f00606082015260800160018152602001600081525081526020016040518060c001604052806005600a811115620001f257620001f262000b78565b815260408051808201825260048152631554d11560e21b602082810191909152830152601290820152633b023380606082015260800160018152602001600081525081526020016040518060c001604052806006600a8111156200025a576200025a62000b78565b815260408051808201825260058152640e6e88aa8960db1b602082810191909152830152601290820152644cd588640060608201526080016003815260200160009052905260408051610140810190915290915060009080608081018060078152602001604051806040016040528060048152602001636344414960e01b8152508152602001601260ff1681526020016305f5e100815260200160048081111562000309576200030962000b78565b8152602001600181525081526020016040518060c001604052806008600a81111562000339576200033962000b78565b81526040805180820182526005815264635553444360d81b6020828101919091528301526006908201526305f5e100606082015260800160048152602001600281525081526020016040518060c001604052806009600a811115620003a257620003a262000b78565b8152604080518082018252600581526418d554d11560da1b602082810191909152830152601290820152633b023380606082015260800160048152602001600581525081526020016040518060c00160405280600a808111156200040a576200040a62000b78565b81526040805180820182526005815264634c494e4b60d81b6020828101919091528301526012908201526359682f00606082015260800160048152602001600490529052905060005b600681101562000496576200048183826006811062000476576200047662000b8e565b6020020151620004db565b806200048d8162000ba4565b91505062000453565b5060005b6004811015620004d257620004bd82826004811062000476576200047662000b8e565b80620004c98162000ba4565b9150506200049a565b50505062000d14565b6000600282608001516004811115620004f857620004f862000b78565b14156200054e576040516200050d9062000a8c565b604051809103906000f0801580156200052a573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b03831617905590506200071e565b60038260800151600481111562000569576200056962000b78565b1415620005a4576040516200057e9062000a9a565b604051809103906000f0801580156200059b573d6000803e3d6000fd5b5090506200071e565b600182608001516004811115620005bf57620005bf62000b78565b1415620005f157816020015182602001518360400151604051620005e39062000aa8565b6200057e9392919062000c1e565b6004826080015160048111156200060c576200060c62000b78565b1415620006be576000600260008460a00151600a81111562000632576200063262000b78565b600a81111562000646576200064662000b78565b815260200190815260200160002060009054906101000a90046001600160a01b0316905082602001518360200151846040015183604051620006889062000ab6565b62000697949392919062000c5b565b604051809103906000f080158015620006b4573d6000803e3d6000fd5b509150506200071e565b60405162461bcd60e51b815260206004820152602b60248201527f74657374546f6b656e53756974653a204372656174696e6720756e6b6e6f776e60448201526a20746f6b656e207479706560a81b606482015260840160405180910390fd5b60005460208301516040516318caf8e360e31b8152620100009092046001600160a01b03169163c657c718916200075b9185919060040162000ca9565b600060405180830381600087803b1580156200077657600080fd5b505af11580156200078b573d6000803e3d6000fd5b50505050600082606001516008604051620007a69062000ac4565b91825260ff166020820152604001604051809103906000f080158015620007d1573d6000803e3d6000fd5b50905081600260008560000151600a811115620007f257620007f262000b78565b600a81111562000806576200080662000b78565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055508260600151600560008560000151600a8111156200085a576200085a62000b78565b600a8111156200086e576200086e62000b78565b8152602080820192909252604090810160009081209390935585516001600160a01b03861684526008909252909120805460ff1916600183600a811115620008ba57620008ba62000b78565b02179055508260800151600360008560000151600a811115620008e157620008e162000b78565b600a811115620008f557620008f562000b78565b81526020810191909152604001600020805460ff1916600183600481111562000922576200092262000b78565b0217905550604080518082019091526001600160a01b0380841682528281166020808401918252600780546001810182556000918252945160029095027fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688810180549686166001600160a01b031997881617905592517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c689909301805493909416929094169190911790915584015184519091600491600a811115620009eb57620009eb62000b78565b600a811115620009ff57620009ff62000b78565b8152602001908152602001600020908051906020019062000a2292919062000ad2565b5080600660008560000151600a81111562000a415762000a4162000b78565b600a81111562000a555762000a5562000b78565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550505050565b610ab1806200285183390190565b611224806200330283390190565b611758806200452683390190565b6117098062005c7e83390190565b6106ca806200738783390190565b82805462000ae09062000cd7565b90600052602060002090601f01602090048101928262000b04576000855562000b4f565b82601f1062000b1f57805160ff191683800117855562000b4f565b8280016001018555821562000b4f579182015b8281111562000b4f57825182559160200191906001019062000b32565b5062000b5d92915062000b61565b5090565b5b8082111562000b5d576000815560010162000b62565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600060001982141562000bc757634e487b7160e01b600052601160045260246000fd5b5060010190565b6000815180845260005b8181101562000bf65760208185018101518683018201520162000bd8565b8181111562000c09576000602083870101525b50601f01601f19169290920160200192915050565b60608152600062000c33606083018662000bce565b828103602084015262000c47818662000bce565b91505060ff83166040830152949350505050565b60808152600062000c70608083018762000bce565b828103602084015262000c84818762000bce565b60ff95909516604084015250506001600160a01b039190911660609091015292915050565b6001600160a01b038316815260406020820181905260009062000ccf9083018462000bce565b949350505050565b600181811c9082168062000cec57607f821691505b6020821081141562000d0e57634e487b7160e01b600052602260045260246000fd5b50919050565b611b2d8062000d246000396000f3fe6080604052600436106101635760003560e01c80638eb86e8b116100c0578063c6c3bbe611610074578063d051a62211610059578063d051a62214610490578063eebab8ef146104b0578063fa7626d4146104d057600080fd5b8063c6c3bbe614610433578063c74912d21461045357600080fd5b80639b140a85116100a55780639b140a85146103e6578063b36ba20814610406578063ba414fa61461040e57600080fd5b80638eb86e8b1461038357806398cdaadf146103a357600080fd5b80636a72bde71161011757806388327863116100fc578063883278631461030857806388f776a2146103365780638a3177a31461035657600080fd5b80636a72bde7146102c45780636ca42ae3146102e657600080fd5b8063440864fa11610148578063440864fa146102025780634b57b0be1461022f57806367b426451461028157600080fd5b806304bc3b1c1461016f57806310c7f0b9146101b557600080fd5b3661016a57005b600080fd5b34801561017b57600080fd5b5061019f61018a3660046116f6565b60086020526000908152604090205460ff1681565b6040516101ac9190611742565b60405180910390f35b3480156101c157600080fd5b506101d56101d036600461175c565b6104ea565b6040805173ffffffffffffffffffffffffffffffffffffffff9384168152929091166020830152016101ac565b34801561020e57600080fd5b5061022261021d366004611784565b610530565b6040516101ac91906117cb565b34801561023b57600080fd5b5060015461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101ac565b34801561028d57600080fd5b5061025c61029c366004611784565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156102d057600080fd5b506102e46102df36600461181c565b6105ca565b005b3480156102f257600080fd5b506102fb610730565b6040516101ac919061186b565b34801561031457600080fd5b506103286103233660046118d4565b6107b5565b6040519081526020016101ac565b34801561034257600080fd5b506102e461035136600461190b565b610888565b34801561036257600080fd5b50610328610371366004611784565b60056020526000908152604090205481565b34801561038f57600080fd5b506102e461039e366004611954565b6108b9565b3480156103af57600080fd5b5061025c6103be366004611784565b60066020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156103f257600080fd5b506102e4610401366004611993565b610a73565b6102e4610b22565b34801561041a57600080fd5b50610423610ba0565b60405190151581526020016101ac565b34801561043f57600080fd5b506102e461044e3660046119b3565b610d00565b34801561045f57600080fd5b5061048361046e366004611784565b60036020526000908152604090205460ff1681565b6040516101ac91906119d3565b34801561049c57600080fd5b506103286104ab36600461190b565b610daf565b3480156104bc57600080fd5b506102e46104cb366004611954565b610e8b565b3480156104dc57600080fd5b506000546104239060ff1681565b600781815481106104fa57600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff91821692501682565b60046020526000908152604090208054610549906119e7565b80601f0160208091040260200160405190810160405280929190818152602001828054610575906119e7565b80156105c25780601f10610597576101008083540402835291602001916105c2565b820191906000526020600020905b8154815290600101906020018083116105a557829003601f168201915b505050505081565b6000546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152620100009092049091169063ca669fa790602401600060405180830381600087803b15801561063e57600080fd5b505af1158015610652573d6000803e3d6000fd5b505050506002600085600a81111561066c5761066c611713565b600a81111561067d5761067d611713565b8152602081019190915260409081016000205490517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490529091169063095ea7b3906044016020604051808303816000875af1158015610705573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107299190611a3b565b5050505050565b60606007805480602002602001604051908101604052809291908181526020016000905b828210156107ac5760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff908116835260019182015416828401529083529092019101610754565b50505050905090565b60006002600084600a8111156107cd576107cd611713565b600a8111156107de576107de611713565b8152602081019190915260409081016000205490517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152909116906370a0823190602401602060405180830381865afa15801561085d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108819190611a5d565b9392505050565b6108b48383837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6105ca565b505050565b60016003600085600a8111156108d1576108d1611713565b600a8111156108e2576108e2611713565b815260208101919091526040016000205460ff16600481111561090757610907611713565b14610999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f74657374546f6b656e53756974653a20547279696e6720746f206275726e206160448201527f206e6f6e2d6e6f726d616c20746f6b656e00000000000000000000000000000060648201526084015b60405180910390fd5b6002600084600a8111156109af576109af611713565b600a8111156109c0576109c0611713565b8152602081019190915260409081016000205490517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526024820184905290911690639dc29fac906044015b6020604051808303816000875af1158015610a49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6d9190611a3b565b50505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604081205460ff169081600a811115610aaf57610aaf611713565b1415610b17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f20746f6b656e2077697468207375636820616464726573730000000000006044820152606401610990565b610a6d818484610888565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015610b8c57600080fd5b505af1158015610729573d6000803e3d6000fd5b60008054610100900460ff1615610bc05750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610cfb5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610c65917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc491608001611a76565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052610c9d91611abe565b6000604051808303816000865af19150503d8060008114610cda576040519150601f19603f3d011682016040523d82523d6000602084013e610cdf565b606091505b5091505080806020019051810190610cf79190611a3b565b9150505b919050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604081205460ff169081600a811115610d3c57610d3c611713565b1415610da4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f20746f6b656e2077697468207375636820616464726573730000000000006044820152606401610990565b610a6d818484610e8b565b60006002600085600a811115610dc757610dc7611713565b600a811115610dd857610dd8611713565b8152602081019190915260409081016000205490517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301529091169063dd62ed3e90604401602060405180830381865afa158015610e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e839190611a5d565b949350505050565b60026003600085600a811115610ea357610ea3611713565b600a811115610eb457610eb4611713565b815260208101919091526040016000205460ff166004811115610ed957610ed9611713565b1415610ff6576000546040517fc88a5e6d000000000000000000000000000000000000000000000000000000008152306004820152602481018390526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c88a5e6d90604401600060405180830381600087803b158015610f5657600080fd5b505af1158015610f6a573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015610fd857600080fd5b505af1158015610fec573d6000803e3d6000fd5b505050505061163c565b600380600085600a81111561100d5761100d611713565b600a81111561101e5761101e611713565b815260208101919091526040016000205460ff16600481111561104357611043611713565b14156111aa576000546040517fc88a5e6d000000000000000000000000000000000000000000000000000000008152306004820152602481018390526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c88a5e6d90604401600060405180830381600087803b1580156110c057600080fd5b505af11580156110d4573d6000803e3d6000fd5b505050506002600084600a8111156110ee576110ee611713565b600a8111156110ff576110ff611713565b8152602081019190915260409081016000205490517fa1903eab00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a1903eab90839060240160206040518083038185885af115801561117f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906111a49190611a5d565b5061163c565b60046003600085600a8111156111c2576111c2611713565b600a8111156111d3576111d3611713565b815260208101919091526040016000205460ff1660048111156111f8576111f8611713565b141561148f5760006002600085600a81111561121657611216611713565b600a81111561122757611227611713565b815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c49190611ada565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600860205260409020549091506112fb9060ff163084610e8b565b8073ffffffffffffffffffffffffffffffffffffffff1663095ea7b36002600087600a81111561132d5761132d611713565b600a81111561133e5761133e611713565b81526020810191909152604090810160002054905160e083901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602481018590526044016020604051808303816000875af11580156113c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e69190611a3b565b506002600085600a8111156113fd576113fd611713565b600a81111561140e5761140e611713565b8152602081019190915260409081016000205490517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810184905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f1990604401600060405180830381600087803b158015610fd857600080fd5b60016003600085600a8111156114a7576114a7611713565b600a8111156114b8576114b8611713565b815260208101919091526040016000205460ff1660048111156114dd576114dd611713565b14156115b4576002600084600a8111156114f9576114f9611713565b600a81111561150a5761150a611713565b8152602081019190915260409081016000205490517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f19906044016020604051808303816000875af1158015611590573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a49190611a3b565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f74657374546f6b656e53756974653a20547279696e6720746f207472616e736660448201527f657220756e6b6e6f776e20746f6b656e000000000000000000000000000000006064820152608401610990565b6002600084600a81111561165257611652611713565b600a81111561166357611663611713565b8152602081019190915260409081016000205490517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490529091169063a9059cbb90604401610a2a565b73ffffffffffffffffffffffffffffffffffffffff811681146116f357600080fd5b50565b60006020828403121561170857600080fd5b8135610881816116d1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60208101600b831061175657611756611713565b91905290565b60006020828403121561176e57600080fd5b5035919050565b8035600b8110610cfb57600080fd5b60006020828403121561179657600080fd5b61088182611775565b60005b838110156117ba5781810151838201526020016117a2565b83811115610a6d5750506000910152565b60208152600082518060208401526117ea81604085016020870161179f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000806080858703121561183257600080fd5b61183b85611775565b9350602085013561184b816116d1565b9250604085013561185b816116d1565b9396929550929360600135925050565b602080825282518282018190526000919060409081850190868401855b828110156118c7578151805173ffffffffffffffffffffffffffffffffffffffff90811686529087015116868501529284019290850190600101611888565b5091979650505050505050565b600080604083850312156118e757600080fd5b6118f083611775565b91506020830135611900816116d1565b809150509250929050565b60008060006060848603121561192057600080fd5b61192984611775565b92506020840135611939816116d1565b91506040840135611949816116d1565b809150509250925092565b60008060006060848603121561196957600080fd5b61197284611775565b92506020840135611982816116d1565b929592945050506040919091013590565b6000806000606084860312156119a857600080fd5b8335611929816116d1565b6000806000606084860312156119c857600080fd5b8335611972816116d1565b602081016005831061175657611756611713565b600181811c908216806119fb57607f821691505b60208210811415611a35577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600060208284031215611a4d57600080fd5b8151801515811461088157600080fd5b600060208284031215611a6f57600080fd5b5051919050565b7fffffffff000000000000000000000000000000000000000000000000000000008316815260008251611ab081600485016020870161179f565b919091016004019392505050565b60008251611ad081846020870161179f565b9190910192915050565b600060208284031215611aec57600080fd5b8151610881816116d156fea264697066735822122010fe735ed069aca27931edce4ba2ff14ec7886bf21b0eea685a884f9200fb49e64736f6c634300080a003360c0604052600d60808190526c2bb930b83832b21022ba3432b960991b60a090815261002e916000919061007a565b50604080518082019091526004808252630ae8aa8960e31b602090920191825261005a9160019161007a565b506002805460ff1916601217905534801561007457600080fd5b5061014e565b82805461008690610113565b90600052602060002090601f0160209004810192826100a857600085556100ee565b82601f106100c157805160ff19168380011785556100ee565b828001600101855582156100ee579182015b828111156100ee5782518255916020019190600101906100d3565b506100fa9291506100fe565b5090565b5b808211156100fa57600081556001016100ff565b600181811c9082168061012757607f821691505b6020821081141561014857634e487b7160e01b600052602260045260246000fd5b50919050565b6109548061015d6000396000f3fe6080604052600436106100cb5760003560e01c806340c10f1911610074578063a9059cbb1161004e578063a9059cbb14610225578063d0e30db014610245578063dd62ed3e1461024d57600080fd5b806340c10f19146101c357806370a08231146101e357806395d89b411461021057600080fd5b806323b872dd116100a557806323b872dd146101575780632e1a7d4d14610177578063313ce5671461019757600080fd5b806306fdde03146100df578063095ea7b31461010a57806318160ddd1461013a57600080fd5b366100da576100d8610285565b005b600080fd5b3480156100eb57600080fd5b506100f46102e0565b6040516101019190610703565b60405180910390f35b34801561011657600080fd5b5061012a61012536600461079f565b61036e565b6040519015158152602001610101565b34801561014657600080fd5b50475b604051908152602001610101565b34801561016357600080fd5b5061012a6101723660046107c9565b6103e7565b34801561018357600080fd5b506100d8610192366004610805565b6105fe565b3480156101a357600080fd5b506002546101b19060ff1681565b60405160ff9091168152602001610101565b3480156101cf57600080fd5b506100d86101de36600461079f565b6106a4565b3480156101ef57600080fd5b506101496101fe36600461081e565b60036020526000908152604090205481565b34801561021c57600080fd5b506100f46106e2565b34801561023157600080fd5b5061012a61024036600461079f565b6106ef565b6100d8610285565b34801561025957600080fd5b50610149610268366004610839565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102a490849061089b565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102ed906108b3565b80601f0160208091040260200160405190810160405280929190818152602001828054610319906108b3565b80156103665780601f1061033b57610100808354040283529160200191610366565b820191906000526020600020905b81548152906001019060200180831161034957829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103d69086815260200190565b60405180910390a350600192915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561041957600080fd5b73ffffffffffffffffffffffffffffffffffffffff8416331480159061048f575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105175773ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020548211156104d157600080fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915281208054849290610511908490610907565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061054c908490610907565b909155505073ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260408120805484929061058690849061089b565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516105ec91815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561061a57600080fd5b3360009081526003602052604081208054839290610639908490610907565b9091555050604051339082156108fc029083906000818181858888f1935050505015801561066b573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260036020526040812080548392906106d990849061089b565b90915550505050565b600180546102ed906108b3565b60006106fc3384846103e7565b9392505050565b600060208083528351808285015260005b8181101561073057858101830151858201604001528201610714565b81811115610742576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461079a57600080fd5b919050565b600080604083850312156107b257600080fd5b6107bb83610776565b946020939093013593505050565b6000806000606084860312156107de57600080fd5b6107e784610776565b92506107f560208501610776565b9150604084013590509250925092565b60006020828403121561081757600080fd5b5035919050565b60006020828403121561083057600080fd5b6106fc82610776565b6000806040838503121561084c57600080fd5b61085583610776565b915061086360208401610776565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156108ae576108ae61086c565b500190565b600181811c908216806108c757607f821691505b60208210811415610901577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000828210156109195761091961086c565b50039056fea26469706673582212206ec943fa4e3b70d8fca6c25b6aa26fa18e8f8952ce3bc4d5afcb443bf3097c0564736f6c634300080a003360806040526000600255600060035534801561001a57600080fd5b506111fa8061002a6000396000f3fe60806040526004361061016e5760003560e01c80637a28fb88116100cb578063bdd17e1c1161007f578063dd62ed3e11610059578063dd62ed3e146103ee578063ee7a7c0414610441578063f5eb42dc1461046157600080fd5b8063bdd17e1c146103ad578063cdb9a21c146103c3578063d5002f2e146103d957600080fd5b8063a1903eab116100b0578063a1903eab1461035a578063a457c2d71461036d578063a9059cbb1461038d57600080fd5b80637a28fb88146102f457806395d89b411461031457600080fd5b806323b872dd1161012257806337cfdaca1161010757806337cfdaca1461020d57806339509351146102b457806370a08231146102d457600080fd5b806323b872dd14610278578063313ce5671461029857600080fd5b806318160ddd1161015357806318160ddd1461020d578063192084511461023057806322301f6e1461025057600080fd5b806306fdde0314610185578063095ea7b3146101dd57600080fd5b366101805761017d6000610481565b50005b600080fd5b34801561019157600080fd5b5060408051808201909152601781527f4c6971756964207374616b656420457468657220322e3000000000000000000060208201525b6040516101d49190610f63565b60405180910390f35b3480156101e957600080fd5b506101fd6101f8366004610fff565b610545565b60405190151581526020016101d4565b34801561021957600080fd5b5061022261055b565b6040519081526020016101d4565b34801561023c57600080fd5b5061022261024b366004611029565b61056b565b34801561025c57600080fd5b5061027661026b366004611042565b600391909155600255565b005b34801561028457600080fd5b506101fd610293366004611064565b6105ab565b3480156102a457600080fd5b50604051601281526020016101d4565b3480156102c057600080fd5b506101fd6102cf366004610fff565b610696565b3480156102e057600080fd5b506102226102ef3660046110a0565b6106d9565b34801561030057600080fd5b5061022261030f366004611029565b61070e565b34801561032057600080fd5b5060408051808201909152600581527f737445544800000000000000000000000000000000000000000000000000000060208201526101c7565b6102226103683660046110a0565b61073a565b34801561037957600080fd5b506101fd610388366004610fff565b610745565b34801561039957600080fd5b506101fd6103a8366004610fff565b6107f9565b3480156103b957600080fd5b5061022260035481565b3480156103cf57600080fd5b5061022260025481565b3480156103e557600080fd5b50610222610806565b3480156103fa57600080fd5b506102226104093660046110bb565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b34801561044d57600080fd5b5061027661045c366004610fff565b610811565b34801561046d57600080fd5b5061022261047c3660046110a0565b61081f565b60003334806104f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f5a45524f5f4445504f534954000000000000000000000000000000000000000060448201526064015b60405180910390fd5b60006104fc8261056b565b9050806105065750805b8160036000828254610518919061111d565b909155506105289050838261084a565b61053383838761093b565b61053d8382610992565b949350505050565b60006105523384846109ea565b50600192915050565b600061056660035490565b905090565b60008061057760035490565b9050806105875750600092915050565b6105a48161059e61059760025490565b8690610b52565b90610b5e565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001602090815260408083203384529091528120548281101561066c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f5452414e534645525f414d4f554e545f455843454544535f414c4c4f57414e4360448201527f450000000000000000000000000000000000000000000000000000000000000060648201526084016104e8565b610677858585610b6a565b61068b85336106868487610bef565b6109ea565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916105529185906106869086610bfb565b73ffffffffffffffffffffffffffffffffffffffff81166000908152602081905260408120546107089061070e565b92915050565b60008061071a60025490565b90508061072a5750600092915050565b6105a48161059e61059760035490565b600061070882610481565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156107e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4445435245415345445f414c4c4f57414e43455f42454c4f575f5a45524f000060448201526064016104e8565b6107ef33856106868487610bef565b5060019392505050565b6000610552338484610b6a565b600061056660025490565b61081b8282610c07565b5050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040812054610708565b73ffffffffffffffffffffffffffffffffffffffff82166108c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4d494e545f544f5f5448455f5a45524f5f41444452455353000000000000000060448201526064016104e8565b80600260008282546108d9919061111d565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205461090e9082610bfb565b73ffffffffffffffffffffffffffffffffffffffff90921660009081526020819052604090209190915550565b6040805183815273ffffffffffffffffffffffffffffffffffffffff83811660208301528516917fed8dd430b1e4bba98e943dc5b157cf7b54d9e12916d6c474ff5733a95001d03b910160405180910390a2505050565b73ffffffffffffffffffffffffffffffffffffffff821660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6109d58461070e565b60405190815260200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff8316610a67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f415050524f56455f46524f4d5f5a45524f5f414444524553530000000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff8216610ae4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f415050524f56455f544f5f5a45524f5f4144445245535300000000000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006105a48284611135565b60006105a48284611172565b6000610b758261056b565b9050610b82848483610d64565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610be191815260200190565b60405180910390a350505050565b60006105a482846111ad565b60006105a4828461111d565b73ffffffffffffffffffffffffffffffffffffffff8216610c84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4255524e5f46524f4d5f5448455f5a45524f5f4144445245535300000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205480821115610d14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4255524e5f414d4f554e545f455843454544535f42414c414e4345000000000060448201526064016104e8565b8160026000828254610d2691906111ad565b90915550610d3690508183610bef565b73ffffffffffffffffffffffffffffffffffffffff9093166000908152602081905260409020929092555050565b73ffffffffffffffffffffffffffffffffffffffff8316610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f5452414e534645525f46524f4d5f5448455f5a45524f5f41444452455353000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff8216610e5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f5452414e534645525f544f5f5448455f5a45524f5f414444524553530000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205480821115610eee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5452414e534645525f414d4f554e545f455843454544535f42414c414e43450060448201526064016104e8565b610ef88183610bef565b73ffffffffffffffffffffffffffffffffffffffff8086166000908152602081905260408082209390935590851681522054610f349083610bfb565b73ffffffffffffffffffffffffffffffffffffffff909316600090815260208190526040902092909255505050565b600060208083528351808285015260005b81811015610f9057858101830151858201604001528201610f74565b81811115610fa2576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ffa57600080fd5b919050565b6000806040838503121561101257600080fd5b61101b83610fd6565b946020939093013593505050565b60006020828403121561103b57600080fd5b5035919050565b6000806040838503121561105557600080fd5b50508035926020909101359150565b60008060006060848603121561107957600080fd5b61108284610fd6565b925061109060208501610fd6565b9150604084013590509250925092565b6000602082840312156110b257600080fd5b6105a482610fd6565b600080604083850312156110ce57600080fd5b6110d783610fd6565b91506110e560208401610fd6565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611130576111306110ee565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561116d5761116d6110ee565b500290565b6000826111a8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000828210156111bf576111bf6110ee565b50039056fea2646970667358221220a5b4f31162ba2b8b3424cef84b31ef91d05a825243602b5fdf758ffb49b8246364736f6c634300080a003360a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a003360c06040523480156200001157600080fd5b506040516200170938038062001709833981016040819052620000349162000266565b8351849084906200004d906003906020850190620000f3565b50805162000063906004906020840190620000f3565b505050620000806200007a6200009d60201b60201c565b620000a1565b60ff9091166080526001600160a01b031660a05250620003479050565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b82805462000101906200030a565b90600052602060002090601f01602090048101928262000125576000855562000170565b82601f106200014057805160ff191683800117855562000170565b8280016001018555821562000170579182015b828111156200017057825182559160200191906001019062000153565b506200017e92915062000182565b5090565b5b808211156200017e576000815560010162000183565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c157600080fd5b81516001600160401b0380821115620001de57620001de62000199565b604051601f8301601f19908116603f0116810190828211818310171562000209576200020962000199565b816040528381526020925086838588010111156200022657600080fd5b600091505b838210156200024a57858201830151818301840152908201906200022b565b838211156200025c5760008385830101525b9695505050505050565b600080600080608085870312156200027d57600080fd5b84516001600160401b03808211156200029557600080fd5b620002a388838901620001af565b95506020870151915080821115620002ba57600080fd5b50620002c987828801620001af565b935050604085015160ff81168114620002e157600080fd5b60608601519092506001600160a01b0381168114620002ff57600080fd5b939692955090935050565b600181811c908216806200031f57607f821691505b602082108114156200034157634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05161138e6200037b600039600081816101f70152818161041f0152610600015260006101a2015261138e6000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80636f307dc3116100b257806395d89b4111610081578063a9059cbb11610066578063a9059cbb146102b5578063dd62ed3e146102c8578063f2fde38b1461030e57600080fd5b806395d89b411461029a578063a457c2d7146102a257600080fd5b80636f307dc3146101f257806370a082311461023e578063715018a6146102745780638da5cb5b1461027c57600080fd5b806323b872dd116100ee57806323b872dd14610188578063313ce5671461019b57806339509351146101cc57806340c10f19146101df57600080fd5b806306fdde0314610120578063095ea7b31461013e57806318160ddd146101615780631e9a695014610173575b600080fd5b610128610321565b604051610135919061112d565b60405180910390f35b61015161014c3660046111c9565b6103b3565b6040519015158152602001610135565b6002545b604051908152602001610135565b6101866101813660046111c9565b6103c9565b005b6101516101963660046111f3565b610491565b60405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610135565b6101516101da3660046111c9565b61057c565b6101866101ed3660046111c9565b6105c5565b6102197f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b61016561024c36600461122f565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610186610691565b60055473ffffffffffffffffffffffffffffffffffffffff16610219565b61012861071e565b6101516102b03660046111c9565b61072d565b6101516102c33660046111c9565b610805565b6101656102d6366004611251565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b61018661031c36600461122f565b610812565b60606003805461033090611284565b80601f016020809104026020016040519081016040528092919081815260200182805461035c90611284565b80156103a95780601f1061037e576101008083540402835291602001916103a9565b820191906000526020600020905b81548152906001019060200180831161038c57829003601f168201915b5050505050905090565b60006103c0338484610942565b50600192915050565b6103d33382610af5565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015610468573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048c91906112d8565b505050565b600061049e848484610ce2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6105718533858403610942565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916103c09185906105c0908690611329565b610942565b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906323b872dd906064016020604051808303816000875af115801561065e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068291906112d8565b5061068d8282610f96565b5050565b60055473ffffffffffffffffffffffffffffffffffffffff163314610712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161055b565b61071c60006110b6565b565b60606004805461033090611284565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156107ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161055b565b6107fb3385858403610942565b5060019392505050565b60006103c0338484610ce2565b60055473ffffffffffffffffffffffffffffffffffffffff163314610893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161055b565b73ffffffffffffffffffffffffffffffffffffffff8116610936576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161055b565b61093f816110b6565b50565b73ffffffffffffffffffffffffffffffffffffffff83166109e4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff8216610a87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8216610b98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015610c4e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290610c8a908490611341565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff8216610e28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610ede576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610f22908490611329565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f8891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161055b565b80600260008282546110259190611329565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152602081905260408120805483929061105f908490611329565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208083528351808285015260005b8181101561115a5785810183015185820160400152820161113e565b8181111561116c576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146111c457600080fd5b919050565b600080604083850312156111dc57600080fd5b6111e5836111a0565b946020939093013593505050565b60008060006060848603121561120857600080fd5b611211846111a0565b925061121f602085016111a0565b9150604084013590509250925092565b60006020828403121561124157600080fd5b61124a826111a0565b9392505050565b6000806040838503121561126457600080fd5b61126d836111a0565b915061127b602084016111a0565b90509250929050565b600181811c9082168061129857607f821691505b602082108114156112d2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156112ea57600080fd5b8151801515811461124a57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561133c5761133c6112fa565b500190565b600082821015611353576113536112fa565b50039056fea26469706673582212203a6db30cd3c097921df4156794aa7973eb848711deeb2cffd7c54a9df1fdb0a564736f6c634300080a003360a060405234801561001057600080fd5b506040516106ca3803806106ca83398101604081905261002f9161006c565b60009190915560ff166080526001805460506001600160501b031991821681179092556004805490911690911790554260028190556003556100a2565b6000806040838503121561007f57600080fd5b82519150602083015160ff8116811461009757600080fd5b809150509250929050565b60805161060e6100bc600039600060d3015261060e6000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80639a6fc8f511610081578063d62ada111161005b578063d62ada11146102dc578063f7a30806146102f4578063feaf968c1461030757600080fd5b80639a6fc8f5146101cd578063bd18ad531461023a578063cd653afc1461024d57600080fd5b806354fd4d50116100b257806354fd4d501461012d57806367e8d83d1461013c5780637284e4161461018e57600080fd5b8063313ce567146100ce5780633fd0875f1461010c575b600080fd5b6100f57f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020015b60405180910390f35b6004546a0100000000000000000000900460ff166040516101039190610441565b60405160018152602001610103565b61018c61014a366004610482565b600480549115156c01000000000000000000000000027fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff909216919091179055565b005b604080518082018252600c81527f7072696365206f7261636c6500000000000000000000000000000000000000006020820152905161010391906104ab565b6102036101db36600461053d565b60015460005460025460035460045469ffffffffffffffffffff948516941691939590929450565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610103565b61018c610248366004610558565b61030f565b61018c61025b366004610579565b6001805469ffffffffffffffffffff9586167fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090911617905560029290925560035560048054919092167fffffffffffffffffffffffffffffffffffffffff00ff00000000000000000000909116176b020000000000000000000000179055565b6102e461035f565b6040519015158152602001610103565b61018c6103023660046105bf565b600055565b610203610385565b600480548291907fffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff166b01000000000000000000000083600281111561035757610357610412565b021790555050565b600454600090610380906b010000000000000000000000900460ff166103d6565b905090565b60008060008060006004600c9054906101000a900460ff16156103a757600080fd5b505060015460005460025460035460045469ffffffffffffffffffff9485169893975091955093509190911690565b600060028260028111156103ec576103ec610412565b14156103f757600080fd5b600182600281111561040b5761040b610412565b1492915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016006831061047c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561049457600080fd5b813580151581146104a457600080fd5b9392505050565b600060208083528351808285015260005b818110156104d8578581018301518582016040015282016104bc565b818111156104ea576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803569ffffffffffffffffffff8116811461053857600080fd5b919050565b60006020828403121561054f57600080fd5b6104a48261051e565b60006020828403121561056a57600080fd5b8135600381106104a457600080fd5b6000806000806080858703121561058f57600080fd5b6105988561051e565b935060208501359250604085013591506105b46060860161051e565b905092959194509250565b6000602082840312156105d157600080fd5b503591905056fea264697066735822122014874f7a973b86501c4c1a8be32490fe902c8f088ee234d25f9b2497e19f9e5264736f6c634300080a003360806040523480156200001157600080fd5b50604080516020808201808452600080845284519283019094529281528151919290916200004291600391620000d1565b50805162000058906004906020840190620000d1565b505050620000756200006f6200007b60201b60201c565b6200007f565b620001b4565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054620000df9062000177565b90600052602060002090601f0160209004810192826200010357600085556200014e565b82601f106200011e57805160ff19168380011785556200014e565b828001600101855582156200014e579182015b828111156200014e57825182559160200191906001019062000131565b506200015c92915062000160565b5090565b5b808211156200015c576000815560010162000161565b600181811c908216806200018c57607f821691505b60208210811415620001ae57634e487b7160e01b600052602260045260246000fd5b50919050565b610e3b80620001c46000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063715018a61161008c578063a457c2d711610066578063a457c2d7146101e7578063a9059cbb146101fa578063dd62ed3e1461020d578063f2fde38b1461025357600080fd5b8063715018a6146101ad5780638da5cb5b146101b757806395d89b41146101df57600080fd5b806323b872dd116100c857806323b872dd14610142578063313ce56714610155578063395093511461016457806370a082311461017757600080fd5b806306fdde03146100ef578063095ea7b31461010d57806318160ddd14610130575b600080fd5b6100f7610266565b6040516101049190610c1b565b60405180910390f35b61012061011b366004610cb7565b6102f8565b6040519015158152602001610104565b6002545b604051908152602001610104565b610120610150366004610ce1565b610358565b60405160128152602001610104565b610120610172366004610cb7565b610443565b610134610185366004610d1d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101b561048c565b005b60055460405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610104565b6100f7610519565b6101206101f5366004610cb7565b610528565b610120610208366004610cb7565b610600565b61013461021b366004610d3f565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101b5610261366004610d1d565b61060d565b60606003805461027590610d72565b80601f01602080910402602001604051908101604052809291908181526020018280546102a190610d72565b80156102ee5780601f106102c3576101008083540402835291602001916102ee565b820191906000526020600020905b8154815290600101906020018083116102d157829003601f168201915b5050505050905090565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548110801561033657508115155b1561034357506000610352565b61034e33848461073d565b5060015b92915050565b60006103658484846108f0565b73ffffffffffffffffffffffffffffffffffffffff841660009081526001602090815260408083203384529091529020548281101561042b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b610438853385840361073d565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161034e918590610487908690610dc6565b61073d565b60055473ffffffffffffffffffffffffffffffffffffffff16331461050d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610422565b6105176000610ba4565b565b60606004805461027590610d72565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156105e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610422565b6105f6338585840361073d565b5060019392505050565b600061034e3384846108f0565b60055473ffffffffffffffffffffffffffffffffffffffff16331461068e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610422565b73ffffffffffffffffffffffffffffffffffffffff8116610731576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610422565b61073a81610ba4565b50565b73ffffffffffffffffffffffffffffffffffffffff83166107df576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610422565b73ffffffffffffffffffffffffffffffffffffffff8216610882576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610422565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610993576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610422565b73ffffffffffffffffffffffffffffffffffffffff8216610a36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610422565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610aec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610422565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610b30908490610dc6565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610b9691815260200190565b60405180910390a350505050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208083528351808285015260005b81811015610c4857858101830151858201604001528201610c2c565b81811115610c5a576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610cb257600080fd5b919050565b60008060408385031215610cca57600080fd5b610cd383610c8e565b946020939093013593505050565b600080600060608486031215610cf657600080fd5b610cff84610c8e565b9250610d0d60208501610c8e565b9150604084013590509250925092565b600060208284031215610d2f57600080fd5b610d3882610c8e565b9392505050565b60008060408385031215610d5257600080fd5b610d5b83610c8e565b9150610d6960208401610c8e565b90509250929050565b600181811c90821680610d8657607f821691505b60208210811415610dc0577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60008219821115610e00577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b50019056fea264697066735822122046ab9b2ff246a21fe95c48d51fda8c67c187c16ac22893aa37d4d531643fa5e364736f6c634300080a00336101606040526000805462ff00001916620c00001790553480156200002357600080fd5b5060405162005c8438038062005c8483398101604081905262000046916200053a565b80806001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000086573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ac91906200053a565b6000805460ff191690556001600160a01b038116620000de57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200011d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200014391906200053a565b6001600160a01b03166080816001600160a01b031681525050506000816001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200019e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c491906200053a565b6001600160a01b03831661010081905260e081905260408051632495a59960e01b81529051929350600092632495a599916004808201926020929091908290030181865afa1580156200021b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200024191906200053a565b6001600160a01b03811660c05290506200025b8162000475565b816001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200029a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c091906200053a565b6001600160a01b0316610120816001600160a01b031681525050816001600160a01b03166377532ed96040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000319573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033f91906200053a565b6001600160a01b0316610140816001600160a01b031681525050816001600160a01b031663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000398573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003be91906200053a565b6001600001600a6101000a8154816001600160a01b0302191690836001600160a01b03160217905550816001600160a01b0316639068a8686040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000426573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044c91906200053a565b6001600160a01b031660a0525050600380546001600160a01b03191633179055506200058b9050565b6001600160a01b03811660009081526006602052604090205415620004ad57604051632e5a5c7760e01b815260040160405180910390fd5b61010060055410620004d257604051631cbbe18560e01b815260040160405180910390fd5b600580546001600160a01b0383166000818152600660209081526040808320600190951b9485905584835260049091528120919091558254919290620005188362000561565b91905055505050565b6001600160a01b03811681146200053757600080fd5b50565b6000602082840312156200054d57600080fd5b81516200055a8162000521565b9392505050565b60006000198214156200058457634e487b7160e01b600052601160045260246000fd5b5060010190565b60805160a05160c05160e0516101005161012051610140516155e1620006a3600039600081816109040152818161397e0152613a330152600081816105e001526138e601526000818161043e01528181610fda0152818161103e01528181612680015281816127db01528181612c2201528181612d0d01528181612dcf01528181612e8e0152613df6015260006106470152600081816106ca01528181610ea501528181610f3601528181610f8301528181610fb9015281816110c2015281816121bb01528181612cec015281816132800152818161374b01528181613818015261424d01526000818161095301528181611164015261264301526000818161084b01528181611307015261244c01526155e16000f3fe608060405234801561001057600080fd5b50600436106103995760003560e01c8063830aa745116101e9578063b5b12cd71161010f578063e1998cf9116100ad578063f9aa028a1161007c578063f9aa028a146109d4578063fdd57645146109f4578063fe47cde714610a2a578063ff68754314610a4a57600080fd5b8063e1998cf914610988578063e75538c71461099b578063e958b704146109ae578063f67c5bd0146109c157600080fd5b8063ced342b5116100e9578063ced342b514610926578063d48bfca71461093b578063db7ceb801461094e578063dc2b21c11461097557600080fd5b8063b5b12cd714610893578063b7ac50c6146108c1578063c5e10eef146108ff57600080fd5b80639537301811610187578063a366f49611610156578063a366f49614610833578063a50cf2c814610846578063a64bec9e1461086d578063a70bc5421461088057600080fd5b806395373018146107ab5780639af1d35a146107be5780639f5f86ae146108175780639fd12b771461082a57600080fd5b80638991b2f1116101c35780638991b2f1146107525780638fe3f93f14610772578063944ac59f1461078557806394cf073a1461079857600080fd5b8063830aa745146107125780638345f26e146107255780638456cb591461074a57600080fd5b80633f4ba83a116102ce57806355aabafd1161026c5780636ce4074a1161023b5780636ce4074a146106925780636e98e5e4146106b25780636f307dc3146106c557806378327438146106ec57600080fd5b806355aabafd14610630578063570a7af2146106425780635c975abb14610669578063654a9eda1461067f57600080fd5b80634f0e0ef3116102a85780634f0e0ef3146105db5780635063524a1461060257806351e3f1601461061557806354fd4d501461062857600080fd5b80633f4ba83a146105b7578063458936f5146105bf57806346fb371d146105c857600080fd5b806322995f5d1161033b57806329df0b931161031557806329df0b93146105355780632f7a1881146105485780633192195c1461056f5780633e8297ca1461059757600080fd5b806322995f5d146104d55780632362a2d8146104e85780632630c12f1461050957600080fd5b806311ca4fc21161037757806311ca4fc21461042657806316f0115b14610439578063172c48c7146104605780631b0c8234146104a257600080fd5b8063055ee9b51461039e5780630d8f9cee146103fe5780630d92632d14610413575b600080fd5b6103d46103ac366004614cee565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61041161040c366004614d0b565b610a80565b005b610411610421366004614d52565b610bad565b610411610434366004614d0b565b610bc1565b6103d47f000000000000000000000000000000000000000000000000000000000000000081565b61047361046e366004614dba565b610c99565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835261ffff9091166020830152016103f5565b6104b56104b0366004614de2565b610cb1565b6040805194855260208501939093529183015260608201526080016103f5565b6104116104e3366004614e1d565b610cd7565b6104fb6104f6366004614e6e565b610ce9565b6040519081526020016103f5565b6001546a0100000000000000000000900473ffffffffffffffffffffffffffffffffffffffff166103d4565b610411610543366004614cee565b611241565b6000546103d4906301000000900473ffffffffffffffffffffffffffffffffffffffff1681565b61058261057d366004614cee565b6112a5565b604080519283526020830191909152016103f5565b6104fb6105a5366004614cee565b60096020526000908152604090205481565b6104116112d9565b6104fb60055481565b6104116105d6366004614ef0565b6113c7565b6103d47f000000000000000000000000000000000000000000000000000000000000000081565b6104b5610610366004614de2565b61161e565b610411610623366004614d0b565b611783565b6104fb600281565b6104fb61063e366004614dba565b5490565b6103d47f000000000000000000000000000000000000000000000000000000000000000081565b60005460ff1660405190151581526020016103f5565b61041161068d366004614f31565b611884565b6106a56106a0366004615050565b611d3c565b6040516103f5919061516b565b6104116106c0366004614d0b565b61200f565b6103d47f000000000000000000000000000000000000000000000000000000000000000081565b6106ff6106fa366004614cee565b6121b7565b60405161ffff90911681526020016103f5565b610411610720366004614ef0565b612290565b6000546107389062010000900460ff1681565b60405160ff90911681526020016103f5565b61041161241e565b6104fb610760366004614cee565b60086020526000908152604090205481565b6103d461078036600461517e565b61250a565b6104116107933660046151b5565b612899565b6104fb6107a636600461521a565b6129c6565b6104116107b9366004614cee565b612fdb565b6001546040805161ffff808416825262010000840481166020830152640100000000840481169282019290925266010000000000008304821660608201526801000000000000000090920416608082015260a0016103f5565b610411610825366004614cee565b613106565b6104fb60075481565b610411610841366004614dba565b6131c6565b6103d47f000000000000000000000000000000000000000000000000000000000000000081565b6104fb61087b366004614dba565b61321c565b61041161088e36600461525c565b61322d565b6108a66108a1366004614cee565b6133b3565b604080519384526020840192909252908201526060016103f5565b6104116108cf36600461525c565b73ffffffffffffffffffffffffffffffffffffffff909116600090815260096020526040902061ffff9091169055565b6103d47f000000000000000000000000000000000000000000000000000000000000000081565b61092e6133ce565b6040516103f59190615291565b610411610949366004614cee565b613490565b6103d47f000000000000000000000000000000000000000000000000000000000000000081565b6104116109833660046152eb565b6134ea565b610411610996366004614d0b565b613575565b6104736109a9366004614dba565b613738565b6103d46109bc366004614cee565b6137b0565b6104fb6109cf366004614cee565b613814565b6003546103d49073ffffffffffffffffffffffffffffffffffffffff1681565b6103d4610a02366004614cee565b600b6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b600c546103d49073ffffffffffffffffffffffffffffffffffffffff1681565b6103d4610a58366004614cee565b600a6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff16158015610ad257506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b15610b09576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff1615610b4b576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055610b81828261389c565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b610bba85858585856138dc565b5050505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314610c12576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805473ffffffffffffffffffffffffffffffffffffffff9384166301000000027fffffffffffffffffff0000000000000000000000000000000000000000ffffff90911617905560018054919092166a0100000000000000000000027fffff0000000000000000000000000000000000000000ffffffffffffffffffff909116179055565b600080610ca86001841b613738565b91509150915091565b600080600080610cc38888888861161e565b93509350935093505b945094509450949050565b610ce384848484613b2d565b50505050565b6000805460ff1615610d5c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064015b60405180910390fd5b600054610100900460ff1615610d9e576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff163314610e23576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610e2e896137b0565b90506000806000806000610e41866112a5565b9094509050610e528c8e868461161e565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152939b5093985090955093506000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015610eee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f12919061530e565b9050610f1e8887615356565b610f29906001615356565b811115610f6957610f64877f00000000000000000000000000000000000000000000000000000000000000008d60018c8b870303038d6138dc565b610fb3565b610fb373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168d8960018a8d0186900301613c07565b611001877f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008960006138dc565b6040517fca9505e40000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604481018490527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ca9505e490606401600060405180830381600087803b15801561109757600080fd5b505af11580156110ab573d6000803e3d6000fd5b505050505050505060018411156110ea576110ea837f00000000000000000000000000000000000000000000000000000000000000008d8760006138dc565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604090205486191661111f84898884613b2d565b6040517f89b77b3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f000000000000000000000000000000000000000000000000000000000000000016906389b77b3e90602401600060405180830381600087803b1580156111a857600080fd5b505af11580156111bc573d6000803e3d6000fd5b50505073ffffffffffffffffffffffffffffffffffffffff909c16600090815260026020526040812080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550929a9950505050505050505050565b6000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314611299576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112a281613c9c565b50565b6000806000806112b485613d0d565b91955092509050816112c6828661536e565b6112d091906153ab565b92505050915091565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa158015611363573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061138791906153e6565b6113bd576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113c5613e8b565b565b60005460ff1615611434576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610d53565b600054610100900460ff1615611476576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100178155338152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff908116908416148015906114f757506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b801561151b5750600c5473ffffffffffffffffffffffffffffffffffffffff163314155b8061153a575073ffffffffffffffffffffffffffffffffffffffff8316155b15611571576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61157a82613814565b6115b0576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006115bb856137b0565b90506115cb838583856000613f6c565b6115ef576115de83858360006001613f6c565b506115ed838583856001613f6c565b505b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b6001546000908190819081906127109061ffff1661163c8888615403565b611646919061536e565b61165091906153ab565b61165a9086615356565b935060018760028111156116705761167061541a565b141561170a576001546000906127109061169690640100000000900461ffff168b61536e565b6116a091906153ab565b600154909150612710906116be9062010000900461ffff168b61536e565b6116c891906153ab565b6116d29086615356565b9450848111156116e95760018582030393506116ed565b8094505b8581106116fe578585039250611704565b84860391505b50610ccc565b600287600281111561171e5761171e61541a565b141561177457600154600090612710906117489068010000000000000000900461ffff168b61536e565b61175291906153ab565b600154909150612710906116be906601000000000000900461ffff168b61536e565b92979196505091860393509150565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff161580156117d557506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b1561180c576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff161561184e576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055610b81828261410d565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff161580156118d657506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b1561190d576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff161561194f576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055611985858461410d565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152600091908616906370a0823190602401602060405180830381865afa1580156119f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a19919061530e565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529192506000918616906370a0823190602401602060405180830381865afa158015611a8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aaf919061530e565b60015490915060009081906a0100000000000000000000900473ffffffffffffffffffffffffffffffffffffffff16635cecbd0e611aed8689615403565b8a611af88988615403565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152600481019390935273ffffffffffffffffffffffffffffffffffffffff918216602484015260448301528a1660648201526084016040805180830381865afa158015611b74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b989190615449565b9150915060018411611bae57611bae898961389c565b611bb7876121b7565b611bc59061ffff168261536e565b9050611bd0886121b7565b611bde9061ffff168361536e565b9150818110611bf957611bf089613c9c565b505050506115ef565b73ffffffffffffffffffffffffffffffffffffffff891660009081526009602052604081205483611c366b033b2e3c9fd0803ce80000008561536e565b611c4091906153ab565b611c56906b033b2e3c9fd0803ce8000000615403565b611c609190615356565b60015490915061271090611c8b906b033b2e3c9fd0803ce80000009062010000900461ffff1661536e565b611c9591906153ab565b8111611cd65773ffffffffffffffffffffffffffffffffffffffff8a166000908152600960205260409020819055611ccc8a613c9c565b50505050506115ef565b611cdf8a6141bd565b50505073ffffffffffffffffffffffffffffffffffffffff871660009081526009602052604090206001905550505050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b6060611d4a60005460ff1690565b15611db1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610d53565b600054610100900460ff1615611df3576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100178155338152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff908116908416141580611e68575073ffffffffffffffffffffffffffffffffffffffff8316155b15611ebe57600c5473ffffffffffffffffffffffffffffffffffffffff163314611ebe576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611ec9856137b0565b90508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167faed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab0360405160405180910390a36040517f1cff79cd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821690631cff79cd90611f79908790879060040161546d565b6000604051808303816000875af1158015611f98573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611fde919081019061549c565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905595945050505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314612060576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216156120d05773ffffffffffffffffffffffffffffffffffffffff8281166000908152600a6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169183169190911790555b73ffffffffffffffffffffffffffffffffffffffff8116156121405773ffffffffffffffffffffffffffffffffffffffff8181166000908152600b6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169184169190911790555b73ffffffffffffffffffffffffffffffffffffffff811673cccccccccccccccccccccccccccccccccccccccc14156121b357600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790555b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561223b5750506001547e01000000000000000000000000000000000000000000000000000000000000900461ffff1690565b600061224683613814565b90508061227f576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61228881613738565b949350505050565b60005460ff16156122fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610d53565b600054610100900460ff161561233f576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff1633146123c4576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6123ce838361410d565b6123f073ffffffffffffffffffffffffffffffffffffffff8316858584613c07565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555050565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa1580156124a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124cc91906153e6565b612502576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113c561453b565b6000805460ff1615612578576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610d53565b600054610100900460ff16156125ba576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff16331461263f576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166321d18456857f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061270d919061530e565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168152600481019290925260248201526044016020604051808303816000875af1158015612768573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061278c919061550a565b6040517fbf28068b0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff80831660248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063bf28068b90604401600060405180830381600087803b15801561282157600080fd5b505af1158015612835573d6000803e3d6000fd5b5050505061284383826145fb565b73ffffffffffffffffffffffffffffffffffffffff811660009081526008602052604081206001905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690559392505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633146128ea576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805461ffff92831668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9484166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff96851664010000000002969096167fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff97851662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000090931694909816939093171794909416949094179190911716919091179055565b6000805460ff1615612a34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610d53565b600054610100900460ff1615612a76576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff163314612afb576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806000612b0987613d0d565b92509250925084612b2357612b1e8684615403565b612b2d565b612b2d8684615356565b935060008515612c855769021e19e0c9bab24000008510612b9657612b5683603689901c61536e565b612b64603686901c8461536e565b612b6e9190615356565b603686901c612b7d858561536e565b612b87919061536e565b612b9191906153ab565b612bd3565b612ba0838861536e565b612baa858461536e565b612bb49190615356565b85612bbf858561536e565b612bc9919061536e565b612bd391906153ab565b6040517fbf28068b0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff8a811660248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063bf28068b90604401600060405180830381600087803b158015612c6857600080fd5b505af1158015612c7c573d6000803e3d6000fd5b50505050612f20565b60008484612c93858361536e565b612c9d91906153ab565b612ca79190615403565b60015490915060009061271090612cc29061ffff168461536e565b612ccc91906153ab565b905073ffffffffffffffffffffffffffffffffffffffff8a1663d1660f997f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000084612d37878f615356565b612d419190615356565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b158015612db557600080fd5b505af1158015612dc9573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ca9505e4838b612e159190615356565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815260048101919091526024810184905260006044820152606401600060405180830381600087803b158015612e7457600080fd5b505af1158015612e88573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ef7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f1b919061530e565b925050505b6040517f16128211000000000000000000000000000000000000000000000000000000008152600481018690526024810182905273ffffffffffffffffffffffffffffffffffffffff891690631612821190604401600060405180830381600087803b158015612f8f57600080fd5b505af1158015612fa3573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055509498975050505050505050565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561302d57506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b15613064576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff16156130a6576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790556130db816141bd565b50600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b60035473ffffffffffffffffffffffffffffffffffffffff163314613157576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517ff62005acebe9b616aefb5f248b48f5e89f28437b27d1eebc0b2d911209f297af90600090a250565b60035473ffffffffffffffffffffffffffffffffffffffff163314613217576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600755565b6000613227826146ce565b92915050565b60035473ffffffffffffffffffffffffffffffffffffffff16331461327e576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613325576001805461ffff83167e01000000000000000000000000000000000000000000000000000000000000027dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790555050565b600061333083613814565b905080613369576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000908152600460205260409020805473ffffffffffffffffffffffffffffffffffffffff1675ffff000000000000000000000000000000000000000060a084901b161790555050565b60008060006133c184613d0d565b9250925092509193909250565b6005546060908067ffffffffffffffff8111156133ed576133ed614f8c565b604051908082528060200260200182016040528015613416578160200160208202803683370190505b50915060005b8181101561348b5761342d81610c99565b5083828151811061344057613440615527565b602002602001018173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525050808061348390615556565b91505061341c565b505090565b60035473ffffffffffffffffffffffffffffffffffffffff1633146134e1576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112a281614739565b60035473ffffffffffffffffffffffffffffffffffffffff16331461353b576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805460ff90921662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff909216919091179055565b60005460ff16156135e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610d53565b600054610100900460ff1615613624576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff1633146136a9576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006136b4836137b0565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260026020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055905061370b82826145fb565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b60008082600114156137965750506001547f0000000000000000000000000000000000000000000000000000000000000000927e0100000000000000000000000000000000000000000000000000000000000090910461ffff169150565b50506000908152600460205260409020549060a082901c90565b73ffffffffffffffffffffffffffffffffffffffff808216600090815260026020526040902054168061380f576040517fb5ba4c4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146138945773ffffffffffffffffffffffffffffffffffffffff8216600090815260066020526040902054613227565b600192915050565b60006138a782613814565b73ffffffffffffffffffffffffffffffffffffffff909316600090815260086020526040902080549319939093169092555050565b80801561393457507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b15613a96576040517fd1660f9900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301526044820184905286169063d1660f9990606401600060405180830381600087803b1580156139d157600080fd5b505af11580156139e5573d6000803e3d6000fd5b50506040517f5869dba800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690527f0000000000000000000000000000000000000000000000000000000000000000169250635869dba89150604401600060405180830381600087803b158015613a7957600080fd5b505af1158015613a8d573d6000803e3d6000fd5b50505050610bba565b6040517fd1660f9900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301526044820184905286169063d1660f9990606401600060405180830381600087803b158015613b0e57600080fd5b505af1158015613b22573d6000803e3d6000fd5b505050505050505050565b60025b818111610bba5781811615613bff576000613b4a82613738565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529192506000918316906370a0823190602401602060405180830381865afa158015613bbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613be1919061530e565b90506002811115613bfc57613bfc87838860018503896138dc565b50505b60011b613b30565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052610ce390859061482d565b73ffffffffffffffffffffffffffffffffffffffff811660009081526008602052604081205490613ccc82614939565b60005490915062010000900460ff16811115613d08576000613ced836146ce565b613cf8906001615356565b9050610ce3848484600085614972565b505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff16631afbb7a46040518163ffffffff1660e01b8152600401602060405180830381865afa158015613d5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d81919061530e565b92508373ffffffffffffffffffffffffffffffffffffffff166317d11a156040518163ffffffff1660e01b8152600401602060405180830381865afa158015613dce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613df2919061530e565b91507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e83919061530e565b929491935050565b60005460ff16613ef7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610d53565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6040805173ffffffffffffffffffffffffffffffffffffffff8681166024830152604480830186905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b30000000000000000000000000000000000000000000000000000000017905291517f1cff79cd000000000000000000000000000000000000000000000000000000008152600092861691631cff79cd9161402d918a9160040161546d565b6000604051808303816000875af192505050801561408b57506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052614088919081019061549c565b60015b614094576140c8565b805115806140b75750808060200190518101906140b191906153e6565b15156001145b156140c6576001915050614104565b505b8115614100576040517f76e3e29c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060005b95945050505050565b600061411882613814565b905080158061412a5750600754811615155b15614161576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83166000908152600860205260409020548116613d085773ffffffffffffffffffffffffffffffffffffffff83166000908152600860205260409020805482179055505050565b60015473ffffffffffffffffffffffffffffffffffffffff8281166000908152600860205260408120546a010000000000000000000090930490911691908080614206866112a5565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526127108202600482015273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350908716915063f9a6503090604401602060405180830381865afa1580156142a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142c5919061530e565b92506142d0846146ce565b6001019150506000806000805b848110156145085780156142f65760018186031b6142f9565b60015b9350868416156145005760008061430f86613738565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8e811660048301529294509092506000918416906370a0823190602401602060405180830381865afa158015614384573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143a8919061530e565b905060018111156144f3576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff848116602483015261ffff841691908d169063f9a6503090604401602060405180830381865afa15801561442d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614451919061530e565b61445b919061536e565b6144659087615356565b95508886106144ee5760006144798b614939565b60005490915062010000900460ff168111156144b0576144ab8d8c83600189156144a557898e03614972565b8d614972565b6144df565b85156144df5773ffffffffffffffffffffffffffffffffffffffff8d1660009081526008602052604090208b90555b50505050505050505050505050565b6144fc565b98861898600194505b5050505b6001016142dd565b506040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005460ff16156145a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610d53565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613f423390565b73ffffffffffffffffffffffffffffffffffffffff82161580614644575073ffffffffffffffffffffffffffffffffffffffff8281166000908152600260205260409020541615155b1561467b576040517f9e59609e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff918216600090815260026020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001691909216179055565b600081600114156146e157506000919050565b61010060015b60016146f38284615356565b901c92506001831b8481161580159061470e5750600185851c145b156147195750614732565b8481106147285783925061472c565b8391505b506146e7565b5050919050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526006602052604090205415614796576040517f2e5a5c7700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610100600554106147d3576040517f1cbbe18500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005805473ffffffffffffffffffffffffffffffffffffffff83166000818152600660209081526040808320600190951b948590558483526004909152812091909155825491929061482483615556565b91905055505050565b600061488f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16614ae09092919063ffffffff16565b805190915015613d0857808060200190518101906148ad91906153e6565b613d08576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610d53565b60008060005b610100811015614732576001811b91508382161561495e578260010192505b83821061496a57614732565b60010161493f565b815b81811015614aad576001811b85811615614aa457600061499382613738565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529192506000918316906370a0823190602401602060405180830381865afa158015614a06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a2a919061530e565b905060018111614aa157600054978318977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9097019660ff62010000909104168711614aa15750505073ffffffffffffffffffffffffffffffffffffffff8616600090815260086020526040902085905550610bba565b50505b50600101614974565b506040517f53275fcb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060614aef8484600085614af9565b90505b9392505050565b606082471015614b8b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610d53565b843b614bf3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610d53565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051614c1c919061558f565b60006040518083038185875af1925050503d8060008114614c59576040519150601f19603f3d011682016040523d82523d6000602084013e614c5e565b606091505b5091509150614c6e828286614c79565b979650505050505050565b60608315614c88575081614af2565b825115614c985782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d53919061516b565b73ffffffffffffffffffffffffffffffffffffffff811681146112a257600080fd5b600060208284031215614d0057600080fd5b8135614af281614ccc565b60008060408385031215614d1e57600080fd5b8235614d2981614ccc565b91506020830135614d3981614ccc565b809150509250929050565b80151581146112a257600080fd5b600080600080600060a08688031215614d6a57600080fd5b8535614d7581614ccc565b94506020860135614d8581614ccc565b93506040860135614d9581614ccc565b9250606086013591506080860135614dac81614d44565b809150509295509295909350565b600060208284031215614dcc57600080fd5b5035919050565b80356003811061380f57600080fd5b60008060008060808587031215614df857600080fd5b84359350614e0860208601614dd3565b93969395505050506040820135916060013590565b60008060008060808587031215614e3357600080fd5b8435614e3e81614ccc565b93506020850135614e4e81614ccc565b92506040850135614e5e81614d44565b9396929550929360600135925050565b600080600080600080600060e0888a031215614e8957600080fd5b8735614e9481614ccc565b9650614ea260208901614dd3565b9550604088013594506060880135614eb981614ccc565b93506080880135614ec981614ccc565b925060a0880135915060c0880135614ee081614d44565b8091505092959891949750929550565b60008060008060808587031215614f0657600080fd5b8435614f1181614ccc565b93506020850135614f2181614ccc565b92506040850135614e5e81614ccc565b600080600080600060a08688031215614f4957600080fd5b8535614f5481614ccc565b94506020860135614f6481614ccc565b93506040860135614f7481614ccc565b94979396509394606081013594506080013592915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561500257615002614f8c565b604052919050565b600067ffffffffffffffff82111561502457615024614f8c565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60008060006060848603121561506557600080fd5b833561507081614ccc565b9250602084013561508081614ccc565b9150604084013567ffffffffffffffff81111561509c57600080fd5b8401601f810186136150ad57600080fd5b80356150c06150bb8261500a565b614fbb565b8181528760208385010111156150d557600080fd5b816020840160208301376000602083830101528093505050509250925092565b60005b838110156151105781810151838201526020016150f8565b83811115610ce35750506000910152565b600081518084526151398160208601602086016150f5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000614af26020830184615121565b6000806040838503121561519157600080fd5b823591506020830135614d3981614ccc565b803561ffff8116811461380f57600080fd5b600080600080600060a086880312156151cd57600080fd5b6151d6866151a3565b94506151e4602087016151a3565b93506151f2604087016151a3565b9250615200606087016151a3565b915061520e608087016151a3565b90509295509295909350565b60008060006060848603121561522f57600080fd5b833561523a81614ccc565b925060208401359150604084013561525181614d44565b809150509250925092565b6000806040838503121561526f57600080fd5b823561527a81614ccc565b9150615288602084016151a3565b90509250929050565b6020808252825182820181905260009190848201906040850190845b818110156152df57835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016152ad565b50909695505050505050565b6000602082840312156152fd57600080fd5b813560ff81168114614af257600080fd5b60006020828403121561532057600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561536957615369615327565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156153a6576153a6615327565b500290565b6000826153e1577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000602082840312156153f857600080fd5b8151614af281614d44565b60008282101561541557615415615327565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6000806040838503121561545c57600080fd5b505080516020909101519092909150565b73ffffffffffffffffffffffffffffffffffffffff83168152604060208201526000614aef6040830184615121565b6000602082840312156154ae57600080fd5b815167ffffffffffffffff8111156154c557600080fd5b8201601f810184136154d657600080fd5b80516154e46150bb8261500a565b8181528560208385010111156154f957600080fd5b6141048260208301602086016150f5565b60006020828403121561551c57600080fd5b8151614af281614ccc565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561558857615588615327565b5060010190565b600082516155a18184602087016150f5565b919091019291505056fea26469706673582212209a61b2b1203f2f5e63c5e3bdfef5184c4cbbb88b745f884592632c989b91297064736f6c634300080a003360806040523480156200001157600080fd5b50604080516020808201808452600080845284519283019094529281528151919290916200004291600391620000d1565b50805162000058906004906020840190620000d1565b505050620000756200006f6200007b60201b60201c565b6200007f565b620001b4565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054620000df9062000177565b90600052602060002090601f0160209004810192826200010357600085556200014e565b82601f106200011e57805160ff19168380011785556200014e565b828001600101855582156200014e579182015b828111156200014e57825182559160200191906001019062000131565b506200015c92915062000160565b5090565b5b808211156200015c576000815560010162000161565b600181811c908216806200018c57607f821691505b60208210811415620001ae57634e487b7160e01b600052602260045260246000fd5b50919050565b610eba80620001c46000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063715018a61161008c578063a457c2d711610066578063a457c2d7146101e7578063a9059cbb146101fa578063dd62ed3e1461020d578063f2fde38b1461025357600080fd5b8063715018a6146101ad5780638da5cb5b146101b757806395d89b41146101df57600080fd5b806323b872dd116100c857806323b872dd14610142578063313ce56714610155578063395093511461016457806370a082311461017757600080fd5b806306fdde03146100ef578063095ea7b31461010d57806318160ddd14610130575b600080fd5b6100f7610266565b6040516101049190610c9a565b60405180910390f35b61012061011b366004610d36565b6102f8565b6040519015158152602001610104565b6002545b604051908152602001610104565b610120610150366004610d60565b6103dc565b60405160128152602001610104565b610120610172366004610d36565b6104c2565b610134610185366004610d9c565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101b561050b565b005b60055460405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610104565b6100f7610598565b6101206101f5366004610d36565b6105a7565b610120610208366004610d36565b61067f565b61013461021b366004610dbe565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101b5610261366004610d9c565b61068c565b60606003805461027590610df1565b80601f01602080910402602001604051908101604052809291908181526020018280546102a190610df1565b80156102ee5780601f106102c3576101008083540402835291602001916102ee565b820191906000526020600020905b8154815290600101906020018083116102d157829003601f168201915b5050505050905090565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548110801561033657508115155b156103c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f54727920746f206368616e676520616c6c6f77616e63652066726f6d206e6f6e60448201527f2d7a65726f20746f206e6f6e2d7a65726f00000000000000000000000000000060648201526084015b60405180910390fd5b6103d33384846107bc565b50600192915050565b60006103e984848461096f565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600160209081526040808320338452909152902054828110156104aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084016103bf565b6104b785338584036107bc565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916103d3918590610506908690610e45565b6107bc565b60055473ffffffffffffffffffffffffffffffffffffffff16331461058c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103bf565b6105966000610c23565b565b60606004805461027590610df1565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915281205482811015610668576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084016103bf565b61067533858584036107bc565b5060019392505050565b60006103d333848461096f565b60055473ffffffffffffffffffffffffffffffffffffffff16331461070d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103bf565b73ffffffffffffffffffffffffffffffffffffffff81166107b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016103bf565b6107b981610c23565b50565b73ffffffffffffffffffffffffffffffffffffffff831661085e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016103bf565b73ffffffffffffffffffffffffffffffffffffffff8216610901576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f737300000000000000000000000000000000000000000000000000000000000060648201526084016103bf565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610a12576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016103bf565b73ffffffffffffffffffffffffffffffffffffffff8216610ab5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016103bf565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610b6b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e6365000000000000000000000000000000000000000000000000000060648201526084016103bf565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610baf908490610e45565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610c1591815260200190565b60405180910390a350505050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208083528351808285015260005b81811015610cc757858101830151858201604001528201610cab565b81811115610cd9576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610d3157600080fd5b919050565b60008060408385031215610d4957600080fd5b610d5283610d0d565b946020939093013593505050565b600080600060608486031215610d7557600080fd5b610d7e84610d0d565b9250610d8c60208501610d0d565b9150604084013590509250925092565b600060208284031215610dae57600080fd5b610db782610d0d565b9392505050565b60008060408385031215610dd157600080fd5b610dda83610d0d565b9150610de860208401610d0d565b90509250929050565b600181811c90821680610e0557607f821691505b60208210811415610e3f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60008219821115610e7f577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b50019056fea2646970667358221220ee9246695e444dbf781646003ed01c8652e021f6ffa33f024a028b10aecc0fa164736f6c634300080a0033608060405234801561001057600080fd5b5061029a806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80634e417a981461003a575b610037600080366100e6565b50005b610042610058565b60405161004f919061019d565b60405180910390f35b6000805461006590610210565b80601f016020809104026020016040519081016040528092919081815260200182805461009190610210565b80156100de5780601f106100b3576101008083540402835291602001916100de565b820191906000526020600020905b8154815290600101906020018083116100c157829003601f168201915b505050505081565b8280546100f290610210565b90600052602060002090601f0160209004810192826101145760008555610178565b82601f1061014b578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00823516178555610178565b82800160010185558215610178579182015b8281111561017857823582559160200191906001019061015d565b50610184929150610188565b5090565b5b808211156101845760008155600101610189565b600060208083528351808285015260005b818110156101ca578581018301518582016040015282016101ae565b818111156101dc576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b600181811c9082168061022457607f821691505b6020821081141561025e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b5091905056fea2646970667358221220ce4d98ff6e78d6e572ead23f5f0316947ad3d447e60e1efdfc3a1485144c317a64736f6c634300080a003360806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d00011790553480156200003a57600080fd5b5060405162021314380380620213148339810160408190526200005d91620017f0565b82826040516200006d9062001790565b604051809103906000f0801580156200008a573d6000803e3d6000fd5b5050600180546001600160a01b0319166001600160a01b038416908117909155604080516325abd85f60e11b81529051634b57b0be916004808201926020929091908290030181865afa158015620000e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200010c91906200184b565b73c4375b7de8af5a38a93548eb8453a498222c4ff26040516200012f906200179e565b6001600160a01b03928316815291166020820152604001604051809103906000f08015801562000163573d6000803e3d6000fd5b50600380546001600160a01b0319166001600160a01b039290921691821790556040805163de28735960e01b8152905163de287359916004808201926020929091908290030181865afa158015620001bf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e591906200184b565b604051634910832f60e01b8152600080516020620212f483398151915260048201526001600160a01b039190911690634910832f90602401600060405180830381600087803b1580156200023857600080fd5b505af11580156200024d573d6000803e3d6000fd5b50505050600360009054906101000a90046001600160a01b03166001600160a01b031663de2873596040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002a5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002cb91906200184b565b60035460405163f2fde38b60e01b81526001600160a01b03918216600482015291169063f2fde38b90602401600060405180830381600087803b1580156200031257600080fd5b505af115801562000327573d6000803e3d6000fd5b505060035460015460408051636ca42ae360e01b815290516001600160a01b039384169550638874ff1f94509190921691636ca42ae39160048083019260009291908290030181865afa15801562000383573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620003ad9190810190620018e6565b6040518263ffffffff1660e01b8152600401620003cb9190620019d7565b600060405180830381600087803b158015620003e657600080fd5b505af1158015620003fb573d6000803e3d6000fd5b50505050600360009054906101000a90046001600160a01b03166001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000453573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200047991906200184b565b600280546001600160a01b0319166001600160a01b039290921691821790556040805163120d150d60e31b81529051639068a868916004808201926020929091908290030181865afa158015620004d4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004fa91906200184b565b600480546001600160a01b0319166001600160a01b0392831617815560025460408051631f94a27560e31b81529051919093169263fca513a892818101926020929091908290030181865afa15801562000558573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200057e91906200184b565b600880546001600160a01b0319166001600160a01b0392831617905560025460408051630873769560e01b81529051919092169163087376959160048083019260209291908290030181865afa158015620005dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200060391906200184b565b600780546001600160a01b0319166001600160a01b039283161790556002546040805163c513c9bb60e01b81529051919092169163c513c9bb9160048083019260209291908290030181865afa15801562000662573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200068891906200184b565b600680546001600160a01b0319166001600160a01b039283161790556001546040516367b4264560e01b81529116906367b4264590620006cd90849060040162001a6e565b602060405180830381865afa158015620006eb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200071191906200184b565b600980546001600160a01b0319166001600160a01b0392831617905560035460408051630a55006360e21b815290519190921691632954018c9160048083019260209291908290030181865afa15801562000770573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200079691906200184b565b6009546040516001600160a01b0390911690620007b390620017ad565b6001600160a01b03928316815291166020820152604001604051809103906000f080158015620007e7573d6000803e3d6000fd5b50600580546001600160a01b0319166001600160a01b039283169081179091556001549091169063eebab8ef908390620008206200113e565b6200082d90600a62001a9a565b6040518463ffffffff1660e01b81526004016200084d9392919062001abc565b600060405180830381600087803b1580156200086857600080fd5b505af11580156200087d573d6000803e3d6000fd5b505060065460055460405163d914cd4b60e01b81526001600160a01b0391821660048201529116925063d914cd4b9150602401600060405180830381600087803b158015620008cb57600080fd5b505af1158015620008e0573d6000803e3d6000fd5b505050505050806200093d576005546040516001600160a01b03909116906200090990620017bb565b6001600160a01b039091168152602001604051809103906000f08015801562000936573d6000803e3d6000fd5b5062000989565b6005546040516001600160a01b03909116906200095a90620017c9565b6001600160a01b039091168152602001604051809103906000f08015801562000987573d6000803e3d6000fd5b505b600b80546001600160a01b03929092166001600160a01b03199283168117909155600d80549092163317909155604051634fafc35760e11b8152600080516020620212f48339815191526004820152639f5f86ae90602401600060405180830381600087803b158015620009fc57600080fd5b505af115801562000a11573d6000803e3d6000fd5b50506000546040516303223eab60e11b8152600080516020620212f48339815191526004820152620100009091046001600160a01b031692506306447d569150602401600060405180830381600087803b15801562000a6f57600080fd5b505af115801562000a84573d6000803e3d6000fd5b5050600b54600d5460408051632630c12f60e01b815290516001600160a01b0393841695506311ca4fc2945092909116918491632630c12f9160048083019260209291908290030181865afa15801562000ae2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b0891906200184b565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401600060405180830381600087803b15801562000b5157600080fd5b505af115801562000b66573d6000803e3d6000fd5b5050600b546001600160a01b0316915063944ac59f90506103e860c862000b926101f461271062001ae6565b606462000ba360c861271062001ae6565b60405160e087901b6001600160e01b031916815261ffff95861660048201529385166024850152918416604484015283166064830152909116608482015260a401600060405180830381600087803b15801562000bff57600080fd5b505af115801562000c14573d6000803e3d6000fd5b50505050600062000c2c6001620011fd60201b60201c565b905060005b815181101562000dbd5760095482516001600160a01b039091169083908390811062000c615762000c6162001b0c565b6020026020010151600001516001600160a01b03161462000da857600082828151811062000c935762000c9362001b0c565b602090810291909101015151600b5460405163d48bfca760e01b81526001600160a01b03808416600483015292935091169063d48bfca790602401600060405180830381600087803b15801562000ce957600080fd5b505af115801562000cfe573d6000803e3d6000fd5b5050600b5485516001600160a01b03909116925063a70bc5429150839086908690811062000d305762000d3062001b0c565b6020026020010151602001516040518363ffffffff1660e01b815260040162000d729291906001600160a01b0392909216825261ffff16602082015260400190565b600060405180830381600087803b15801562000d8d57600080fd5b505af115801562000da2573d6000803e3d6000fd5b50505050505b8062000db48162001b22565b91505062000c31565b50600060029054906101000a90046001600160a01b03166001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562000e0f57600080fd5b505af115801562000e24573d6000803e3d6000fd5b5050505062000ef1600b60009054906101000a90046001600160a01b03166001600160a01b031663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000e80573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ea691906200184b565b60408051808201909152601781527f436f6e666967757261746f72207761736e2774207365740000000000000000006020820152600080516020620212f483398151915290620014e7565b600654600b5460405163e26b2f6360e01b81526001600160a01b03918216600482015291169063e26b2f6390602401600060405180830381600087803b15801562000f3b57600080fd5b505af115801562000f50573d6000803e3d6000fd5b5050600154600b5460405163447bbb5160e11b81526001600160a01b0392831694506388f776a2935062000fa292889273f39fd6e51aad88f6f4ce6ab8827279cfffb922669291169060040162001b40565b600060405180830381600087803b15801562000fbd57600080fd5b505af115801562000fd2573d6000803e3d6000fd5b5050600154600b5460405163447bbb5160e11b81526001600160a01b0392831694506388f776a2935062001024928892733c44cdddb6a900fa2b585dd299e03d12fa4293bc9291169060040162001b40565b600060405180830381600087803b1580156200103f57600080fd5b505af115801562001054573d6000803e3d6000fd5b505060025460405163f2fde38b60e01b8152600080516020620212f483398151915260048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b158015620010ad57600080fd5b505af1158015620010c2573d6000803e3d6000fd5b505060075460405163f2fde38b60e01b8152600080516020620212f483398151915260048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b1580156200111b57600080fd5b505af115801562001130573d6000803e3d6000fd5b505050505050505062001c47565b600180546040516367b4264560e01b81526000926001600160a01b03909216916367b426459162001173919060040162001a6e565b602060405180830381865afa15801562001191573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011b791906200184b565b6009546001600160a01b03908116911614620011e757620011e2670de0b6b3a764000060c862001a9a565b905090565b620011e2670de0b6b3a7640000614e2062001a9a565b6040805160c08101825260026080820190815261232860a08301528152815180830183526005815261226060208281019190915282015281518083018352606092600092919082019080600387600a8111156200125e576200125e62001a35565b146200126c5760036200126f565b60015b600a81111562001283576200128362001a35565b815261206c6020918201529082526040805180820190915260048152611c84818301529101529050612454600a60008582811115620012c657620012c662001a35565b600a811115620012da57620012da62001a35565b815260208101919091526040908101600020805461ffff9390931661ffff19909316929092179091558051600480825260a0820190925281816020015b60408051808201909152600080825260208201528152602001906001900390816200131757905050925060005b81811015620014df5782816004811062001362576200136262001b0c565b602002015160200151600a600085846004811062001384576200138462001b0c565b602002015151600a8111156200139e576200139e62001a35565b600a811115620013b257620013b262001a35565b815260208101919091526040908101600020805461ffff191661ffff9390931692909217909155805180820190915260015481906001600160a01b03166367b4264586856004811062001409576200140962001b0c565b6020020151516040516001600160e01b031960e084901b16815262001432919060040162001a6e565b602060405180830381865afa15801562001450573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200147691906200184b565b6001600160a01b0316815260200184836004811062001499576200149962001b0c565b60200201516020015161ffff16815250848281518110620014be57620014be62001b0c565b60200260200101819052508080620014d69062001b22565b91505062001344565b505050919050565b816001600160a01b0316836001600160a01b03161462001546577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf35838160405162001532919062001ba5565b60405180910390a16200154683836200154b565b505050565b806001600160a01b0316826001600160a01b03161462001679577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f50604051620015d39060208082526025908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b616464604082015264726573735d60d81b606082015260800190565b60405180910390a160408051818152600a81830152690808115e1c1958dd195960b21b60608201526001600160a01b03831660208201529051600080516020620212d48339815191529181900360800190a160408051818152600a8183015269080808081058dd1d585b60b21b60608201526001600160a01b03841660208201529051600080516020620212d48339815191529181900360800190a1620016796200167d565b5050565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200177f5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190526519985a5b195960d21b9282019290925260016060820152600091907f70ca10bbd0dbfd9020a9f4b13402c16cb120705e0d1c0aeab10fa353ae586fc49060800160408051601f19818403018152908290526200171a929160200162001bf6565b60408051601f1981840301815290829052620017369162001c29565b6000604051808303816000865af19150503d806000811462001775576040519150601f19603f3d011682016040523d82523d6000602084013e6200177a565b606091505b505050505b6000805461ff001916610100179055565b6105e680620035d683390190565b620111058062003bbc83390190565b6110a78062014cc183390190565b6158e88062015d6883390190565b615c84806201b65083390190565b6001600160a01b0381168114620017ed57600080fd5b50565b6000806000606084860312156200180657600080fd5b83516200181381620017d7565b6020850151909350600b81106200182957600080fd5b604085015190925080151581146200184057600080fd5b809150509250925092565b6000602082840312156200185e57600080fd5b81516200186b81620017d7565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715620018ad57620018ad62001872565b60405290565b604051601f8201601f191681016001600160401b0381118282101715620018de57620018de62001872565b604052919050565b60006020808385031215620018fa57600080fd5b82516001600160401b03808211156200191257600080fd5b818501915085601f8301126200192757600080fd5b8151818111156200193c576200193c62001872565b6200194c848260051b01620018b3565b818152848101925060069190911b8301840190878211156200196d57600080fd5b928401925b81841015620019cc57604084890312156200198d5760008081fd5b6200199762001888565b8451620019a481620017d7565b815284860151620019b581620017d7565b818701528352604093909301929184019162001972565b979650505050505050565b602080825282518282018190526000919060409081850190868401855b8281101562001a2857815180516001600160a01b0390811686529087015116868501529284019290850190600101620019f4565b5091979650505050505050565b634e487b7160e01b600052602160045260246000fd5b600b811062001a6a57634e487b7160e01b600052602160045260246000fd5b9052565b6020810162001a7e828462001a4b565b92915050565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161562001ab75762001ab762001a84565b500290565b6060810162001acc828662001a4b565b6001600160a01b0393909316602082015260400152919050565b600061ffff8381169083168181101562001b045762001b0462001a84565b039392505050565b634e487b7160e01b600052603260045260246000fd5b600060001982141562001b395762001b3962001a84565b5060010190565b6060810162001b50828662001a4b565b6001600160a01b03938416602083015291909216604090920191909152919050565b60005b8381101562001b8f57818101518382015260200162001b75565b8381111562001b9f576000848401525b50505050565b60408152600560408201526422b93937b960d91b6060820152608060208201526000825180608084015262001be28160a085016020870162001b72565b601f01601f19169190910160a00192915050565b6001600160e01b031983168152815160009062001c1b81600485016020870162001b72565b919091016004019392505050565b6000825162001c3d81846020870162001b72565b9190910192915050565b61197f8062001c576000396000f3fe608060405234801561001057600080fd5b50600436106101365760003560e01c80636b70b04c116100b2578063ba414fa611610081578063d46b933011610066578063d46b933014610350578063de28735914610370578063fa7626d41461039057600080fd5b8063ba414fa614610318578063c12c21c01461033057600080fd5b80636b70b04c146102b05780636f307dc3146102d05780637d6bc094146102f05780639dd55b451461030357600080fd5b8063406c8e2f116101095780635e813a8b116100ee5780635e813a8b1461025a5780635f7c9bd01461027a57806362eb33e31461029057600080fd5b8063406c8e2f146101fc5780635aba4b241461021c57600080fd5b80630c75f8061461013b5780630e42bc5d146101775780632630c12f146101975780632954018c146101dc575b600080fd5b61015f610149366004610f08565b600a6020526000908152604090205461ffff1681565b60405161ffff90911681526020015b60405180910390f35b61018a610185366004610f08565b61039d565b60405161016e9190610f30565b6008546101b79073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016e565b6002546101b79073ffffffffffffffffffffffffffffffffffffffff1681565b6001546101b79073ffffffffffffffffffffffffffffffffffffffff1681565b6102246106c6565b6040805194855260208501939093529183015273ffffffffffffffffffffffffffffffffffffffff16606082015260800161016e565b6004546101b79073ffffffffffffffffffffffffffffffffffffffff1681565b6102826106e5565b60405190815260200161016e565b6006546101b79073ffffffffffffffffffffffffffffffffffffffff1681565b6005546101b79073ffffffffffffffffffffffffffffffffffffffff1681565b6009546101b79073ffffffffffffffffffffffffffffffffffffffff1681565b6102246102fe366004610f99565b6107cd565b610316610311366004610fd7565b610c2f565b005b610320610d9b565b604051901515815260200161016e565b600b546101b79073ffffffffffffffffffffffffffffffffffffffff1681565b6003546101b79073ffffffffffffffffffffffffffffffffffffffff1681565b6007546101b79073ffffffffffffffffffffffffffffffffffffffff1681565b6000546103209060ff1681565b6040805160c08101825260026080820190815261232860a08301528152815180830183526005815261226060208281019190915282015281518083018352606092600092919082019080600387600a8111156103fb576103fb611003565b1461040757600361040a565b60015b600a81111561041b5761041b611003565b815261206c6020918201529082526040805180820190915260048152611c84818301529101529050612454600a6000858281111561045b5761045b611003565b600a81111561046c5761046c611003565b815260208101919091526040908101600020805461ffff939093167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909316929092179091558051600480825260a0820190925281816020015b60408051808201909152600080825260208201528152602001906001900390816104c657905050925060005b818110156106be5782816004811061050c5761050c611032565b602002015160200151600a600085846004811061052b5761052b611032565b602002015151600a81111561054257610542611003565b600a81111561055357610553611003565b81526020810191909152604090810160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff93909316929092179091558051808201909152600154819073ffffffffffffffffffffffffffffffffffffffff166367b426458685600481106105d1576105d1611032565b6020020151516040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526106109190600401611061565b602060405180830381865afa15801561062d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061065191906110a2565b73ffffffffffffffffffffffffffffffffffffffff16815260200184836004811061067e5761067e611032565b60200201516020015161ffff168152508482815181106106a0576106a0611032565b602002602001018190525080806106b6906110ee565b9150506104f2565b505050919050565b6000806000806106d76102fe6106e5565b935093509350935090919293565b600180546040517f67b4264500000000000000000000000000000000000000000000000000000000815260009273ffffffffffffffffffffffffffffffffffffffff909216916367b426459161073e9190600401611061565b602060405180830381865afa15801561075b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077f91906110a2565b60095473ffffffffffffffffffffffffffffffffffffffff9081169116146107b9576107b4670de0b6b3a764000060c8611127565b905090565b6107b4670de0b6b3a7640000614e20611127565b600080546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015282918291829162010000900473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b15801561085757600080fd5b505af115801561086b573d6000803e3d6000fd5b5050600b5460095473ffffffffffffffffffffffffffffffffffffffff918216935063a70bc5429250166101f46108a560c8612710611164565b6108af9190611164565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015261ffff166024820152604401600060405180830381600087803b15801561091e57600080fd5b505af1158015610932573d6000803e3d6000fd5b50506005546040517f96df5dc00000000000000000000000000000000000000000000000000000000081526b033b2e3c9fd0803ce800000060048201819052899850965073ffffffffffffffffffffffffffffffffffffffff90911692506396df5dc09150602401600060405180830381600087803b1580156109b457600080fd5b505af11580156109c8573d6000803e3d6000fd5b5050600054600d546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526201000090920416925063ca669fa79150602401600060405180830381600087803b158015610a4157600080fd5b505af1158015610a55573d6000803e3d6000fd5b5050600b546040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810188905273f39fd6e51aad88f6f4ce6ab8827279cfffb92266602482015273ffffffffffffffffffffffffffffffffffffffff9091169250638fe3f93f91506044016020604051808303816000875af1158015610ae4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0891906110a2565b60005490915062010000900473ffffffffffffffffffffffffffffffffffffffff16631f7b4f30610b3a436001611187565b6040518263ffffffff1660e01b8152600401610b5891815260200190565b600060405180830381600087803b158015610b7257600080fd5b505af1158015610b86573d6000803e3d6000fd5b50505050600a83600c610b999190611127565b610ba3919061119f565b6005546040517f96df5dc00000000000000000000000000000000000000000000000000000000081526004810183905291935073ffffffffffffffffffffffffffffffffffffffff16906396df5dc090602401600060405180830381600087803b158015610c1057600080fd5b505af1158015610c24573d6000803e3d6000fd5b505050509193509193565b6000816008604051610c4090610efb565b91825260ff166020820152604001604051809103906000f080158015610c6a573d6000803e3d6000fd5b506000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291925062010000900473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b158015610cf157600080fd5b505af1158015610d05573d6000803e3d6000fd5b50506008546040517fe8a97a3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528581166024830152909116925063e8a97a3e9150604401600060405180830381600087803b158015610d7e57600080fd5b505af1158015610d92573d6000803e3d6000fd5b50505050505050565b60008054610100900460ff1615610dbb5750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610ef65760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610e60917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc491608001611215565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052610e9891611251565b6000604051808303816000865af19150503d8060008114610ed5576040519150601f19603f3d011682016040523d82523d6000602084013e610eda565b606091505b5091505080806020019051810190610ef2919061125d565b9150505b919050565b6106ca8061128083390190565b600060208284031215610f1a57600080fd5b8135600b8110610f2957600080fd5b9392505050565b602080825282518282018190526000919060409081850190868401855b82811015610f8c578151805173ffffffffffffffffffffffffffffffffffffffff16855286015161ffff16868501529284019290850190600101610f4d565b5091979650505050505050565b600060208284031215610fab57600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff81168114610fd457600080fd5b50565b60008060408385031215610fea57600080fd5b8235610ff581610fb2565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60208101600b831061109c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000602082840312156110b457600080fd5b8151610f2981610fb2565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611120576111206110bf565b5060010190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561115f5761115f6110bf565b500290565b600061ffff8381169083168181101561117f5761117f6110bf565b039392505050565b6000821982111561119a5761119a6110bf565b500190565b6000826111d5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000815160005b818110156111fb57602081850181015186830152016111e1565b8181111561120a576000828601525b509290920192915050565b7fffffffff0000000000000000000000000000000000000000000000000000000083168152600061124960048301846111da565b949350505050565b6000610f2982846111da565b60006020828403121561126f57600080fd5b81518015158114610f2957600080fdfe60a060405234801561001057600080fd5b506040516106ca3803806106ca83398101604081905261002f9161006c565b60009190915560ff166080526001805460506001600160501b031991821681179092556004805490911690911790554260028190556003556100a2565b6000806040838503121561007f57600080fd5b82519150602083015160ff8116811461009757600080fd5b809150509250929050565b60805161060e6100bc600039600060d3015261060e6000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80639a6fc8f511610081578063d62ada111161005b578063d62ada11146102dc578063f7a30806146102f4578063feaf968c1461030757600080fd5b80639a6fc8f5146101cd578063bd18ad531461023a578063cd653afc1461024d57600080fd5b806354fd4d50116100b257806354fd4d501461012d57806367e8d83d1461013c5780637284e4161461018e57600080fd5b8063313ce567146100ce5780633fd0875f1461010c575b600080fd5b6100f57f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020015b60405180910390f35b6004546a0100000000000000000000900460ff166040516101039190610441565b60405160018152602001610103565b61018c61014a366004610482565b600480549115156c01000000000000000000000000027fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff909216919091179055565b005b604080518082018252600c81527f7072696365206f7261636c6500000000000000000000000000000000000000006020820152905161010391906104ab565b6102036101db36600461053d565b60015460005460025460035460045469ffffffffffffffffffff948516941691939590929450565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610103565b61018c610248366004610558565b61030f565b61018c61025b366004610579565b6001805469ffffffffffffffffffff9586167fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090911617905560029290925560035560048054919092167fffffffffffffffffffffffffffffffffffffffff00ff00000000000000000000909116176b020000000000000000000000179055565b6102e461035f565b6040519015158152602001610103565b61018c6103023660046105bf565b600055565b610203610385565b600480548291907fffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff166b01000000000000000000000083600281111561035757610357610412565b021790555050565b600454600090610380906b010000000000000000000000900460ff166103d6565b905090565b60008060008060006004600c9054906101000a900460ff16156103a757600080fd5b505060015460005460025460035460045469ffffffffffffffffffff9485169893975091955093509190911690565b600060028260028111156103ec576103ec610412565b14156103f757600080fd5b600182600281111561040b5761040b610412565b1492915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016006831061047c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561049457600080fd5b813580151581146104a457600080fd5b9392505050565b600060208083528351808285015260005b818110156104d8578581018301518582016040015282016104bc565b818111156104ea576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803569ffffffffffffffffffff8116811461053857600080fd5b919050565b60006020828403121561054f57600080fd5b6104a48261051e565b60006020828403121561056a57600080fd5b8135600381106104a457600080fd5b6000806000806080858703121561058f57600080fd5b6105988561051e565b935060208501359250604085013591506105b46060860161051e565b905092959194509250565b6000602082840312156105d157600080fd5b503591905056fea264697066735822122014874f7a973b86501c4c1a8be32490fe902c8f088ee234d25f9b2497e19f9e5264736f6c634300080a0033a2646970667358221220db8bf1b20c3ed39fd8eb2d77267ba8a606c43060a1321f93c24a8edb8117a9fb64736f6c634300080a003360806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d000117905534801561003957600080fd5b50600054604080516318caf8e360e31b815273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660048083019190915260248201929092526044810191909152632aa9a2a960e11b6064820152620100009091046001600160a01b03169063c657c71890608401600060405180830381600087803b1580156100ba57600080fd5b505af11580156100ce573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b81527390f79bf6eb2c4f870365e785982e1f101e93b90660048201526024810191909152600660448201526511949251539160d21b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561014f57600080fd5b505af1158015610163573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b8152733c44cdddb6a900fa2b585dd299e03d12fa4293bc60048201526024810191909152600a6044820152692624a8aaa4a220aa27a960b11b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b1580156101e857600080fd5b505af11580156101fc573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b815273c4375b7de8af5a38a93548eb8453a498222c4ff260048201526024810191909152600c60448201526b44554d425f4144445245535360a01b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561028357600080fd5b505af1158015610297573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b8152739965507d1a55bcc2695c58ba16fb37d819b0a4dc60048201526024810191909152600760448201526620a220a82a22a960c91b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561031957600080fd5b505af115801561032d573d6000803e3d6000fd5b505050506102a6806103406000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063ba414fa61461003b578063fa7626d414610057575b600080fd5b610043610064565b604051901515815260200160405180910390f35b6000546100439060ff1681565b60008054610100900460ff16156100845750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156101bf5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610129917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016101ff565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526101619161023b565b6000604051808303816000865af19150503d806000811461019e576040519150601f19603f3d011682016040523d82523d6000602084013e6101a3565b606091505b50915050808060200190518101906101bb919061024e565b9150505b919050565b6000815160005b818110156101e557602081850181015186830152016101cb565b818111156101f4576000828601525b509290920192915050565b7fffffffff0000000000000000000000000000000000000000000000000000000083168152600061023360048301846101c4565b949350505050565b600061024782846101c4565b9392505050565b60006020828403121561026057600080fd5b8151801515811461024757600080fdfea2646970667358221220293f55a0ef7b60c31a89dbc50e3339c80a8fdb1f9567614b200e97598226671f64736f6c634300080a003360806040523480156200001157600080fd5b506040516201110538038062011105833981016040819052620000349162000811565b6200003f3362000734565b6040516200004d9062000784565b604051809103906000f0801580156200006a573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b039283169081179091556040516310dc138160e31b81529184166004830152906386e09c0890602401600060405180830381600087803b158015620000c457600080fd5b505af1158015620000d9573d6000803e3d6000fd5b50506001546040516301ed651160e41b81526001600160a01b0385811660048301529091169250631ed651109150602401600060405180830381600087803b1580156200012557600080fd5b505af11580156200013a573d6000803e3d6000fd5b505050506040516200014c9062000792565b604051809103906000f08015801562000169573d6000803e3d6000fd5b50600280546001600160a01b0319166001600160a01b039283169081179091556001546040516376aad60560e01b81526004810192909252909116906376aad60590602401600060405180830381600087803b158015620001c957600080fd5b505af1158015620001de573d6000803e3d6000fd5b5050600154604051600093506001600160a01b0390911691506200020290620007a0565b6001600160a01b039091168152602001604051809103906000f0801580156200022f573d6000803e3d6000fd5b5060015460405163338f12b960e21b81526001600160a01b03808416600483015292935091169063ce3c4ae490602401600060405180830381600087803b1580156200027a57600080fd5b505af11580156200028f573d6000803e3d6000fd5b5050600154604051600093506001600160a01b039091169150620002b390620007ae565b6001600160a01b039091168152602001604051809103906000f080158015620002e0573d6000803e3d6000fd5b5060015460405163c5120b3960e01b81526001600160a01b03808416600483015292935091169063c5120b3990602401600060405180830381600087803b1580156200032b57600080fd5b505af115801562000340573d6000803e3d6000fd5b5050600154604051606093506001600160a01b03909116915082906200036690620007bc565b6200037392919062000849565b604051809103906000f08015801562000390573d6000803e3d6000fd5b50600380546001600160a01b0319166001600160a01b0392831690811790915560015460405163530e784f60e01b815260048101929092529091169063530e784f90602401600060405180830381600087803b158015620003f057600080fd5b505af115801562000405573d6000803e3d6000fd5b5050600154604051600093506001600160a01b0390911691506200042990620007ca565b6001600160a01b039091168152602001604051809103906000f08015801562000456573d6000803e3d6000fd5b506001546040516356ee0d3b60e11b81526001600160a01b03808416600483015292935091169063addc1a7690602401600060405180830381600087803b158015620004a157600080fd5b505af1158015620004b6573d6000803e3d6000fd5b5050600154604051600093506001600160a01b039091169150620004da90620007d8565b6001600160a01b039091168152602001604051809103906000f08015801562000507573d6000803e3d6000fd5b506001546040516321da583760e01b81526001600160a01b0380841660048301529293509116906321da583790602401600060405180830381600087803b1580156200055257600080fd5b505af115801562000567573d6000803e3d6000fd5b505050506000306040516200057c90620007e6565b6001600160a01b039091168152602001604051809103906000f080158015620005a9573d6000803e3d6000fd5b50600154604051631795d5b360e31b81526001600160a01b03808416600483015292935091169063bcaead9890602401600060405180830381600087803b158015620005f457600080fd5b505af115801562000609573d6000803e3d6000fd5b505060405163f2fde38b60e01b81523360048201526001600160a01b038416925063f2fde38b9150602401600060405180830381600087803b1580156200064f57600080fd5b505af115801562000664573d6000803e3d6000fd5b505060015460405163f2fde38b60e01b81523360048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b158015620006ae57600080fd5b505af1158015620006c3573d6000803e3d6000fd5b505060025460405163f2fde38b60e01b81523360048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b1580156200070d57600080fd5b505af115801562000722573d6000803e3d6000fd5b505050505050505050505050620008b2565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610fcd80620010dd83390190565b61098c80620020aa83390190565b610f508062002a3683390190565b614da6806200398683390190565b611b45806200872c83390190565b612ced806200a27183390190565b611627806200cf5e83390190565b612b80806200e58583390190565b80516001600160a01b03811681146200080c57600080fd5b919050565b600080604083850312156200082557600080fd5b6200083083620007f4565b91506200084060208401620007f4565b90509250929050565b6001600160a01b0383811682526040602080840182905284518483018190526000938683019290916060870190865b81811015620008a3578551805186168452840151851684840152948301949186019160010162000878565b50909998505050505050505050565b61081b80620008c26000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80638874ff1f1161005b5780638874ff1f146100f55780638da5cb5b14610108578063de28735914610126578063f2fde38b1461014657600080fd5b80632630c12f146100825780632954018c146100cb578063715018a6146100eb575b600080fd5b6003546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6001546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b6100f3610159565b005b6100f3610103366004610658565b6101eb565b60005473ffffffffffffffffffffffffffffffffffffffff166100a2565b6002546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b6100f3610154366004610734565b6103e3565b60005473ffffffffffffffffffffffffffffffffffffffff1633146101df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6101e96000610513565b565b60005473ffffffffffffffffffffffffffffffffffffffff16331461026c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101d6565b60005b815181101561035c57600354825173ffffffffffffffffffffffffffffffffffffffff9091169063e8a97a3e908490849081106102ae576102ae610756565b6020026020010151600001518484815181106102cc576102cc610756565b6020026020010151602001516040518363ffffffff1660e01b815260040161031792919073ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b600060405180830381600087803b15801561033157600080fd5b505af1158015610345573d6000803e3d6000fd5b50505050808061035490610785565b91505061026f565b506002546040517ff2fde38b00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063f2fde38b90602401600060405180830381600087803b1580156103c857600080fd5b505af11580156103dc573d6000803e3d6000fd5b5050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101d6565b73ffffffffffffffffffffffffffffffffffffffff8116610507576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016101d6565b61051081610513565b50565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156105da576105da610588565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561062757610627610588565b604052919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461065357600080fd5b919050565b6000602080838503121561066b57600080fd5b823567ffffffffffffffff8082111561068357600080fd5b818501915085601f83011261069757600080fd5b8135818111156106a9576106a9610588565b6106b7848260051b016105e0565b818152848101925060069190911b8301840190878211156106d757600080fd5b928401925b8184101561072957604084890312156106f55760008081fd5b6106fd6105b7565b6107068561062f565b815261071386860161062f565b81870152835260409390930192918401916106dc565b979650505050505050565b60006020828403121561074657600080fd5b61074f8261062f565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156107de577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea26469706673582212205ee75e57bb635aa49a1758f4ab0b04182a73115bff08f420c56a8ddb433c029364736f6c634300080a0033608060405234801561001057600080fd5b5061001a3361005f565b60405130906f20a2222922a9a9afa82927ab24a222a960811b907fb37614c7d254ea8d16eb81fa11dddaeb266aa8ba4917980859c7740aff30c69190600090a36100af565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610f0f806100be6000396000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c806377532ed9116100e3578063bcaead981161008c578063ce3c4ae411610066578063ce3c4ae414610308578063f2fde38b1461031b578063fca513a81461032e57600080fd5b8063bcaead98146102da578063c5120b39146102ed578063c513c9bb1461030057600080fd5b80639068a868116100bd5780639068a868146102b7578063addc1a76146102bf578063affd9243146102d257600080fd5b806377532ed91461027e57806386e09c08146102865780638da5cb5b1461029957600080fd5b80634c252f9111610145578063699f200f1161011f578063699f200f1461022d578063715018a61461026357806376aad6051461026b57600080fd5b80634c252f91146101fc578063530e784f1461020457806354fd4d501461021757600080fd5b80631ed65110116101765780631ed65110146101cc57806321da5837146101e157806326c74fc3146101f457600080fd5b8063060678c21461019257806308737695146101c4575b600080fd5b61019a610336565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61019a610366565b6101df6101da366004610e10565b610391565b005b6101df6101ef366004610e10565b610444565b61019a6104ef565b61019a61051a565b6101df610212366004610e10565b610545565b61021f600281565b6040519081526020016101bb565b61019a61023b366004610e4d565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6101df6105f0565b6101df610279366004610e10565b61067d565b61019a610728565b6101df610294366004610e10565b610753565b60005473ffffffffffffffffffffffffffffffffffffffff1661019a565b61019a6107fe565b6101df6102cd366004610e10565b610829565b61019a6108d4565b6101df6102e8366004610e10565b6108ff565b6101df6102fb366004610e10565b6109aa565b61019a610a55565b6101df610316366004610e10565b610a80565b6101df610329366004610e10565b610b2b565b61019a610c58565b60006103617f444154415f434f4d50524553534f520000000000000000000000000000000000610c7f565b905090565b60006103617f41434c0000000000000000000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610417576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6104417f54524541535552595f434f4e545241435400000000000000000000000000000082610d1d565b50565b60005473ffffffffffffffffffffffffffffffffffffffff1633146104c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f574554485f47415445574159000000000000000000000000000000000000000082610d1d565b60006103617f54524541535552595f434f4e5452414354000000000000000000000000000000610c7f565b60006103617f574554485f544f4b454e00000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f50524943455f4f5241434c45000000000000000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610671576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b61067b6000610d9b565b565b60005473ffffffffffffffffffffffffffffffffffffffff1633146106fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f41434c000000000000000000000000000000000000000000000000000000000082610d1d565b60006103617f574554485f474154455741590000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146107d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f574554485f544f4b454e0000000000000000000000000000000000000000000082610d1d565b60006103617f4143434f554e545f464143544f52590000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146108aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f4143434f554e545f464143544f5259000000000000000000000000000000000082610d1d565b60006103617f474541525f544f4b454e00000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610980576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f474541525f544f4b454e0000000000000000000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f444154415f434f4d50524553534f52000000000000000000000000000000000082610d1d565b60006103617f434f4e5452414354535f52454749535445520000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610b01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f434f4e5452414354535f5245474953544552000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610bac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b73ffffffffffffffffffffffffffffffffffffffff8116610c4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161040e565b61044181610d9b565b60006103617f50524943455f4f5241434c4500000000000000000000000000000000000000005b6000818152600160209081526040808320548151808301909252600382527f41503100000000000000000000000000000000000000000000000000000000009282019290925273ffffffffffffffffffffffffffffffffffffffff9091169081610d16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040e9190610e66565b5092915050565b60008281526001602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091559051909184917fb37614c7d254ea8d16eb81fa11dddaeb266aa8ba4917980859c7740aff30c6919190a35050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215610e2257600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610e4657600080fd5b9392505050565b600060208284031215610e5f57600080fd5b5035919050565b600060208083528351808285015260005b81811015610e9357858101830151858201604001528201610e77565b81811115610ea5576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea264697066735822122083c228af017c6f5cf8c395cdf7a53276ff56fdd4f4313c39f680ab73bd75417364736f6c634300080a0033608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61090e8061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063732818191161008c578063adce758d11610066578063adce758d14610215578063ba306df114610228578063d4eb5db01461023b578063f2fde38b1461027457600080fd5b806373281819146101b7578063819ad68e146101da5780638da5cb5b146101ed57600080fd5b806354fd4d50116100bd57806354fd4d501461016a5780635f259aba14610180578063715018a6146101af57600080fd5b806335914829146100e45780633a41ec641461011c5780634910832f14610155575b600080fd5b6101076100f236600461089b565b60016020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61010761012a36600461089b565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205460ff1690565b61016861016336600461089b565b610287565b005b610172600181565b604051908152602001610113565b61010761018e36600461089b565b60005473ffffffffffffffffffffffffffffffffffffffff91821691161490565b610168610387565b6101076101c536600461089b565b60026020526000908152604090205460ff1681565b6101686101e836600461089b565b610414565b60005460405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610113565b61016861022336600461089b565b61050c565b61016861023636600461089b565b610601565b61010761024936600461089b565b73ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205460ff1690565b61016861028236600461089b565b6106f6565b60005473ffffffffffffffffffffffffffffffffffffffff16331461030d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909217909155517fae26b1cfe9454ba87274a4e8330b6654684362d0f3d7bbd17f7449a1d38387c69190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610408576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b6104126000610826565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517fd400da6c0c0a894dacc0981730b88af0545d00272ee8fff1437bf560ff245fc49190a250565b60005473ffffffffffffffffffffffffffffffffffffffff16331461058d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f1998397e7203f7baca9d6f41b9e4da6e768daac5caad4234fb9bf5869d2715459190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610682576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526001602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f28b01395b7e25d20552a0c8dc8ecd3b1d4abc986f14dad7885fd45b6fd73c8d99190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811661081a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610304565b61082381610826565b50565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156108ad57600080fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146108d157600080fd5b939250505056fea26469706673582212204712efbfe997070def77285a5b8753bc882b62da2133ce1937ad26cd2b48e49864736f6c634300080a003360a060405234801561001057600080fd5b50604051610f50380380610f5083398101604081905261002f916100d7565b6000805460ff19169055806001600160a01b03811661006157604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa15801561009f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100c391906100d7565b6001600160a01b0316608052506101079050565b6000602082840312156100e957600080fd5b81516001600160a01b038116811461010057600080fd5b9392505050565b608051610e1261013e600039600081816101e2015281816102b20152818161040f0152818161057801526108510152610e126000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80638456cb5911610097578063b4ac686011610066578063b4ac686014610217578063c29277cd1461021f578063d914cd4b14610227578063e26b2f631461023a57600080fd5b80638456cb59146101cd57806394144856146101d5578063a50cf2c8146101dd578063ac4afa381461020457600080fd5b80635b16ebb7116100d35780635b16ebb7146101575780635c975abb1461018a578063673a2a1f146101955780636fbc6f6b146101aa57600080fd5b80631e16e4fc146100fa5780633f4ba83a1461013757806354fd4d5014610141575b600080fd5b61010d610108366004610c97565b61024d565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61013f610284565b005b610149600181565b60405190815260200161012e565b61017a610165366004610cb0565b60026020526000908152604090205460ff1681565b604051901515815260200161012e565b60005460ff1661017a565b61019d610372565b60405161012e9190610ced565b61017a6101b8366004610cb0565b60046020526000908152604090205460ff1681565b61013f6103e1565b61019d6104cd565b61010d7f000000000000000000000000000000000000000000000000000000000000000081565b61010d610212366004610c97565b61053a565b600154610149565b600354610149565b61013f610235366004610cb0565b61054a565b61013f610248366004610cb0565b610823565b6003818154811061025d57600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa15801561030e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103329190610d47565b610368576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610370610af6565b565b606060018054806020026020016040519081016040528092919081815260200182805480156103d757602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116103ac575b5050505050905090565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561046b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048f9190610d47565b6104c5576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610370610bd7565b606060038054806020026020016040519081016040528092919081815260200182805480156103d75760200282019190600052602060002090815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116103ac575050505050905090565b6001818154811061025d57600080fd5b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156105d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f89190610d47565b61062e576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051808201909152600281527f5a30000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff82166106b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b60405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff8116600090815260026020908152604091829020548251808401909352600383527f43523100000000000000000000000000000000000000000000000000000000009183019190915260ff1615610753576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b506001805480820182557fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915560008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909417909355915190917ff816b5143086c89d103a0683286be86c2b741e83ebfa75135aae606e2f5c6e5391a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156108ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d19190610d47565b610907576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051808201909152600281527f5a30000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8216610989576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b5073ffffffffffffffffffffffffffffffffffffffff8116600090815260046020908152604091829020548251808401909352600383527f43523200000000000000000000000000000000000000000000000000000000009183019190915260ff1615610a23576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b506003805460018082019092557fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915560008181526004602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909417909355915190917f58ad3cfc4b6552a53c8c4128ae9b080e14b4378a159280643a62c6f709cee24f91a250565b60005460ff16610b62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016106b0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff1615610c44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016106b0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610bad3390565b600060208284031215610ca957600080fd5b5035919050565b600060208284031215610cc257600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610ce657600080fd5b9392505050565b6020808252825182820181905260009190848201906040850190845b81811015610d3b57835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101610d09565b50909695505050505050565b600060208284031215610d5957600080fd5b81518015158114610ce657600080fd5b600060208083528351808285015260005b81811015610d9657858101830151858201604001528201610d7a565b81811115610da8576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea26469706673582212208f2d91c863db9ab1494a9c5db20e3fddc4b6c779ea3c3621737c105c60d9440a64736f6c634300080a003360e06040523480156200001157600080fd5b5060405162004da638038062004da6833981016040819052620000349162000160565b6001600160a01b0381166200005c57604051635919af9760e11b815260040160405180910390fd5b6001600160a01b03811660808190526040805163c513c9bb60e01b8152905163c513c9bb916004808201926020929091908290030181865afa158015620000a7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cd919062000160565b6001600160a01b031660a0816001600160a01b0316815250506080516001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000127573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200014d919062000160565b6001600160a01b031660c0525062000192565b6000602082840312156200017357600080fd5b81516001600160a01b03811681146200018b57600080fd5b9392505050565b60805160a05160c051614b896200021d6000396000818161018801528181611c4f0152612c5a0152600081816101ed015281816115e201528181611f5f0152818161213f0152818161223f0152818161243801528181612604015281816126bc01528181612788015281816129a501528181613c410152613d000152600061013c0152614b896000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c806354fd4d5011610081578063a80deda31161005b578063a80deda31461020f578063ae093f3f1461022f578063fc9914cb1461024f57600080fd5b806354fd4d50146101bd578063663b8fdb146101d35780637a0c7b21146101e857600080fd5b80632954018c116100b25780632954018c146101375780634b2f336d146101835780634c472fc9146101aa57600080fd5b80630dbd616d146100d957806313d21cdf146101025780631bcd8fc014610122575b600080fd5b6100ec6100e73660046140fc565b610272565b6040516100f9919061430b565b60405180910390f35b61011561011036600461431e565b6114d4565b6040516100f99190614444565b61012a611f59565b6040516100f99190614453565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100f9565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b61015e6101b83660046140fc565b6121f5565b6101c5600281565b6040519081526020016100f9565b6101db612432565b6040516100f991906146ea565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b61022261021d36600461431e565b6126b5565b6040516100f9919061476a565b61024261023d36600461431e565b612a75565b6040516100f991906147dd565b61026261025d3660046140fc565b613bf7565b60405190151581526020016100f9565b61035f604051806102400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160008152602001606081526020016000815260200160008152602001600015158152602001600081526020016000815260200160008152602001600060ff168152602001600081525090565b600080600080600061037088613cf4565b509450945094509450945060008560ff1660011461041d576040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015284169063e958b70490602401602060405180830381865afa1580156103f4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061041891906147f0565b6104ad565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015286169063e958b70490602401602060405180830381865afa158015610489573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ad91906147f0565b60ff8716610200890181905273ffffffffffffffffffffffffffffffffffffffff808b1660208b01528b811660608b015282168952909150600114156109e9578473ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610538573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055c91906147f0565b73ffffffffffffffffffffffffffffffffffffffff90811660808901526040517fc7de38a600000000000000000000000000000000000000000000000000000000815282821660048201529085169063c7de38a690602401602060405180830381865afa1580156105d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f5919061480d565b60c08801526040517fdfd5946500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015285169063dfd5946590602401602060405180830381865afa158015610666573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068a919061480d565b60e08801526040517f3ce0735500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015260006024830152861690633ce0735590604401602060405180830381865afa92505050801561073c575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526107399181019061480d565b60015b6107455761074c565b6101408801525b6040517f3ce0735500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015260016024830152861690633ce0735590604401602060405180830381865afa9250505080156107f9575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526107f69181019061480d565b60015b61080257610809565b6101608801525b60c08701516040517f996329f800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526024820192909252600060448201529086169063996329f89060640160a060405180830381865afa9250505080156108c4575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526108c191810190614826565b60015b6108cd576108da565b505015156101808a015250505b8073ffffffffffffffffffffffffffffffffffffffff16631afbb7a46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610925573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610949919061480d565b6101a08801526040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152851690633192195c90602401602060405180830381865afa1580156109bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109df919061480d565b60a0880152610c26565b8273ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5891906147f0565b73ffffffffffffffffffffffffffffffffffffffff90811660808901526040517fc7de38a600000000000000000000000000000000000000000000000000000000815282821660048201529083169063c7de38a6906024016040805180830381865afa158015610acc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af09190614866565b5060c08801526040517fdfd5946500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015283169063dfd5946590602401602060405180830381865afa158015610b62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b86919061480d565b60e08801526040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152841690633192195c906024016040805180830381865afa158015610bf6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1a9190614866565b60a08901526101a08801525b60008660ff16600114610ca7578373ffffffffffffffffffffffffffffffffffffffff166316f0115b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca291906147f0565b610d16565b8573ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1691906147f0565b90508073ffffffffffffffffffffffffffffffffffffffff166345d31f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d87919061480d565b6101008901526000600160ff891614610e0e578473ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610de5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e09919061480d565b610e7d565b8573ffffffffffffffffffffffffffffffffffffffff166320a05ff76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7d919061480d565b90508760ff16600114610f1f576040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152861690638991b2f190602401602060405180830381865afa158015610ef6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1a919061480d565b610faf565b6040517fb451cecc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015287169063b451cecc90602401602060405180830381865afa158015610f8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610faf919061480d565b6102208a01528067ffffffffffffffff811115610fce57610fce61488a565b60405190808252806020026020018201604052801561103e57816020015b6040805160808101825260008082526020808301829052928201819052606082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181610fec5790505b506101208a015260005b818110156113d657604080516080810182526000808252602082018190529181018290526060810191909152600180831b9060ff8c1614156111c5576040517faf0a650200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018590528a169063af0a650290604401608060405180830381865afa1580156110f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111b91906148b9565b5050602084015273ffffffffffffffffffffffffffffffffffffffff9081168084526040517ff9eaee0d0000000000000000000000000000000000000000000000000000000081526004810191909152908a169063f9eaee0d90602401602060405180830381865afa158015611195573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b9919061490d565b15156040830152611388565b6040517f172c48c70000000000000000000000000000000000000000000000000000000081526004810184905273ffffffffffffffffffffffffffffffffffffffff89169063172c48c7906024016040805180830381865afa15801561122f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112539190614928565b5073ffffffffffffffffffffffffffffffffffffffff9081168084526040517f70a082310000000000000000000000000000000000000000000000000000000081529188166004830152906370a0823190602401602060405180830381865afa1580156112c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e8919061480d565b602083015281516040517ff9eaee0d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529088169063f9eaee0d90602401602060405180830381865afa15801561135c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611380919061490d565b151560408301525b6102208c015181161561139c57600161139f565b60005b151560608301526101208c01518051839190859081106113c1576113c161495e565b60209081029190910101525050600101611048565b508273ffffffffffffffffffffffffffffffffffffffff166317d11a156040518163ffffffff1660e01b8152600401602060405180830381865afa158015611422573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611446919061480d565b896101c00181815250508273ffffffffffffffffffffffffffffffffffffffff16633dc54b406040518163ffffffff1660e01b8152600401602060405180830381865afa15801561149b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bf919061480d565b6101e08a015250969998505050505050505050565b61159b604051806102000160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600060ff1681525090565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015283917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa15801561162b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164f919061490d565b611685576040517fd384b23800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316808352604080517ffe14112d000000000000000000000000000000000000000000000000000000008152905185929163fe14112d9160048083019260209291908290030181865afa1580156116f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611719919061480d565b8360c00181815250508073ffffffffffffffffffffffffffffffffffffffff1663ef8d96036040518163ffffffff1660e01b8152600401602060405180830381865afa15801561176d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611791919061480d565b8360e00181815250508073ffffffffffffffffffffffffffffffffffffffff1663743753596040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611809919061480d565b8360a00181815250508073ffffffffffffffffffffffffffffffffffffffff16634c19386c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561185d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611881919061480d565b836101000181815250508073ffffffffffffffffffffffffffffffffffffffff1663788c6bfe6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fa919061480d565b836101600181815250508073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561194f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611973919061480d565b8360800181815250508073ffffffffffffffffffffffffffffffffffffffff166345d31f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119eb919061480d565b836101400181815250508073ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6491906147f0565b836040019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff166336dda7d56040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0a91906147f0565b836060019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663788c6bfe6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb0919061480d565b836101600181815250508073ffffffffffffffffffffffffffffffffffffffff1663e941fa786040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c29919061480d565b61018084015260408084015173ffffffffffffffffffffffffffffffffffffffff9081167f000000000000000000000000000000000000000000000000000000000000000082161460208087019190915282517f609ae31700000000000000000000000000000000000000000000000000000000815292519184169263609ae31792600480830193928290030181865afa158015611ccb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cef919061480d565b836101c00181815250508073ffffffffffffffffffffffffffffffffffffffff1663dbcb313b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d68919061480d565b836101a00181815250506000836060015173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de7919061480d565b6040517f5427c9380000000000000000000000000000000000000000000000000000000081526004810182905290915060009073ffffffffffffffffffffffffffffffffffffffff841690635427c93890602401602060405180830381865afa158015611e58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7c919061480d565b90508015611ec7576101808501518190611eb890611e9c906127106149bc565b876101000151886101400151611eb291906149d3565b90613fd0565b611ec29190614a3f565b611ece565b8461014001515b856101200181815250508273ffffffffffffffffffffffffffffffffffffffff166354fd4d506040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f47919061480d565b60ff166101e086015250505050919050565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b4ac68606040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fec919061480d565b90508067ffffffffffffffff8111156120075761200761488a565b6040519080825280602002602001820160405280156120ff57816020015b6120ec604051806102000160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600060ff1681525090565b8152602001906001900390816120255790505b50915060005b818110156121f0576040517fac4afa38000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ac4afa3890602401602060405180830381865afa15801561219b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121bf91906147f0565b90506121ca816114d4565b8483815181106121dc576121dc61495e565b602090810291909101015250600101612105565b505090565b6040517f6fbc6f6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015260009184917f00000000000000000000000000000000000000000000000000000000000000001690636fbc6f6b90602401602060405180830381865afa158015612286573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122aa919061490d565b6122e0576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060006122ee87613cf4565b5050935093505092508260ff16600114612397576040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015282169063fdd5764590602401602060405180830381865afa15801561236e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061239291906147f0565b612427565b6040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015283169063fdd5764590602401602060405180830381865afa158015612403573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061242791906147f0565b979650505050505050565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c29277cd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124c5919061480d565b90508067ffffffffffffffff8111156124e0576124e061488a565b6040519080825280602002602001820160405280156125c457816020015b60408051610260810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083018290526101208301819052610140830181905261016083015261018082018190526101a082018190526101c082018190526101e082018190526102008201819052610220820181905261024082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816124fe5790505b50915060005b818110156121f0576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa158015612660573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061268491906147f0565b905061268f81612a75565b8483815181106126a1576126a161495e565b6020908102919091010152506001016125ca565b60606000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c29277cd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612725573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612749919061480d565b905060005b81811015612829576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa1580156127e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061280891906147f0565b90506128148187613bf7565b15612820578360010193505b5060010161274e565b508167ffffffffffffffff8111156128435761284361488a565b60405190808252806020026020018201604052801561296157816020015b61294e604051806102400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160008152602001606081526020016000815260200160008152602001600015158152602001600081526020016000815260200160008152602001600060ff168152602001600081525090565b8152602001906001900390816128615790505b5092506000915060005b81811015612a6d576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa158015612a01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a2591906147f0565b9050612a318187613bf7565b15612a6457612a408187610272565b858581518110612a5257612a5261495e565b60209081029190910101526001909301925b5060010161296b565b505050919050565b604080516102608101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082018390526101208201819052610140820181905261016082015261018081018290526101a081018290526101c081018290526101e08101829052610200810182905261022081018290526102408101829052908080808080612b1b88613cf4565b73ffffffffffffffffffffffffffffffffffffffff8e168d5260ff86166101808e01819052959b50939950919750955093509150600114612bca578273ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ba1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bc591906147f0565b612c39565b8473ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c3991906147f0565b73ffffffffffffffffffffffffffffffffffffffff908116602089018190527f00000000000000000000000000000000000000000000000000000000000000009091161460408801526000600160ff881614612d03578373ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cfe91906147f0565b612d72565b8573ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d7291906147f0565b6040517f2e97ca2100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b8116600483015291925090821690632e97ca2190602401602060405180830381865afa158015612de2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e06919061490d565b15156060890152604080517f45d31f9d000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff8316916345d31f9d9160048083019260209291908290030181865afa158015612e78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e9c919061480d565b8860800181815250508073ffffffffffffffffffffffffffffffffffffffff1663743753596040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ef0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f14919061480d565b610100890152600160ff88161415613017578573ffffffffffffffffffffffffffffffffffffffff16639b2cb5d86040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f95919061480d565b8860a00181815250508573ffffffffffffffffffffffffffffffffffffffff16635f48f3936040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fe9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061300d919061480d565b60c08901526130a5565b8273ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa158015613061573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130859190614a73565b6fffffffffffffffffffffffffffffffff90811660c08b01521660a08901525b60008760ff16600114613126578473ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613121919061480d565b613195565b8573ffffffffffffffffffffffffffffffffffffffff166320a05ff76040518163ffffffff1660e01b8152600401602060405180830381865afa158015613171573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613195919061480d565b90508067ffffffffffffffff8111156131b0576131b061488a565b6040519080825280602002602001820160405280156131d9578160200160208202803683370190505b506101208a01528067ffffffffffffffff8111156131f9576131f961488a565b604051908082528060200260200182016040528015613222578160200160208202803683370190505b506101608a015260005b818110156134c4578860ff16600114156133b4576040517f5e5f2e260000000000000000000000000000000000000000000000000000000081526004810182905260009073ffffffffffffffffffffffffffffffffffffffff891690635e5f2e2690602401602060405180830381865afa1580156132ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132d291906147f0565b9050808b610120015183815181106132ec576132ec61495e565b73ffffffffffffffffffffffffffffffffffffffff92831660209182029290920101526040517f78327438000000000000000000000000000000000000000000000000000000008152828216600482015290891690637832743890602401602060405180830381865afa158015613367573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061338b919061480d565b8b610160015183815181106133a2576133a261495e565b602002602001018181525050506134bc565b6040517f172c48c70000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff87169063172c48c7906024016040805180830381865afa15801561341e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134429190614928565b8061ffff1690508b610120015183815181106134605761346061495e565b602002602001018c6101600151848151811061347e5761347e61495e565b60200260200101828152508273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525050505b60010161322c565b5060008860ff16600114613546578373ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561351d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613541919061480d565b6135b5565b8673ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613591573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135b5919061480d565b90508067ffffffffffffffff8111156135d0576135d061488a565b60405190808252806020026020018201604052801561361557816020015b60408051808201909152600080825260208201528152602001906001900390816135ee5790505b506101408b015260005b818110156139015760408051808201909152600080825260208201528a60ff166001146136da576040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff871690635094cb4f90602401602060405180830381865afa1580156136b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136d591906147f0565b613769565b6040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff8a1690635094cb4f90602401602060405180830381865afa158015613745573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061376991906147f0565b73ffffffffffffffffffffffffffffffffffffffff168152600160ff8c16146138245780516040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529089169063fdd5764590602401602060405180830381865afa1580156137fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061381f91906147f0565b6138b7565b80516040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152908a169063fdd5764590602401602060405180830381865afa158015613893573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138b791906147f0565b73ffffffffffffffffffffffffffffffffffffffff1660208201526101408c01518051829190849081106138ed576138ed61495e565b60209081029190910101525060010161361f565b508860ff166001141561398f578773ffffffffffffffffffffffffffffffffffffffff1663b2c53a6c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613959573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061397d919061480d565b60e08b015260ff6102408b0152613be9565b73ffffffffffffffffffffffffffffffffffffffff85166101a08b01819052604080517f9408b63f0000000000000000000000000000000000000000000000000000000081529051639408b63f916004808201926020929091908290030181865afa158015613a02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a2691906147f0565b8a6101e0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508473ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015613aa9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613acd9190614aa6565b5015156102008c015250604080517f9fd12b77000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff881691639fd12b779160048083019260209291908290030181865afa158015613b42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b66919061480d565b8a6102200181815250508573ffffffffffffffffffffffffffffffffffffffff16638345f26e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bdf9190614af7565b60ff166102408b01525b505050505050505050919050565b6040517f6fbc6f6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015260009184917f00000000000000000000000000000000000000000000000000000000000000001690636fbc6f6b90602401602060405180830381865afa158015613c88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cac919061490d565b613ce2576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613cec8484614023565b949350505050565b600080600080600080867f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636fbc6f6b826040518263ffffffff1660e01b8152600401613d73919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa158015613d90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613db4919061490d565b613dea576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8773ffffffffffffffffffffffffffffffffffffffff166354fd4d506040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e59919061480d565b96508660ff1660011415613ee0578795508573ffffffffffffffffffffffffffffffffffffffff1663f93f515b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613eb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ed991906147f0565b9450613fc6565b8793508373ffffffffffffffffffffffffffffffffffffffff16632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f5291906147f0565b92508373ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fc391906147f0565b91505b5091939550919395565b6000821580613fdd575081155b15613fea5750600061401d565b612710613ff8600282614b1a565b61ffff1661400684866149d3565b6140109190614b3b565b61401a9190614a3f565b90505b92915050565b6040517f055ee9b500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600091829185169063055ee9b590602401602060405180830381865afa158015614094573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140b891906147f0565b73ffffffffffffffffffffffffffffffffffffffff1614159392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146140f957600080fd5b50565b6000806040838503121561410f57600080fd5b823561411a816140d7565b9150602083013561412a816140d7565b809150509250929050565b600081518084526020808501945080840160005b8381101561419f578151805173ffffffffffffffffffffffffffffffffffffffff168852838101518489015260408082015115159089015260609081015115159088015260809096019590820190600101614149565b509495945050505050565b805173ffffffffffffffffffffffffffffffffffffffff168252600061024060208301516141f0602086018273ffffffffffffffffffffffffffffffffffffffff169052565b506040830151614204604086018215159052565b50606083015161422c606086018273ffffffffffffffffffffffffffffffffffffffff169052565b506080830151614254608086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060a083015160a085015260c083015160c085015260e083015160e085015261010080840151818601525061012080840151828287015261429783870182614135565b92505050610140808401518186015250610160808401518186015250610180808401516142c78287018215159052565b50506101a083810151908501526101c080840151908501526101e080840151908501526102008084015160ff16908501526102209283015192909301919091525090565b60208152600061401a60208301846141aa565b60006020828403121561433057600080fd5b813561433b816140d7565b9392505050565b805173ffffffffffffffffffffffffffffffffffffffff168252602081015161436f602084018215159052565b506040810151614397604084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060608101516143bf606084018273ffffffffffffffffffffffffffffffffffffffff169052565b506080818101519083015260a0808201519083015260c0808201519083015260e08082015190830152610100808201519083015261012080820151908301526101408082015190830152610160808201519083015261018080820151908301526101a080820151908301526101c080820151908301526101e09081015160ff16910152565b610200810161401d8284614342565b6020808252825182820181905260009190848201906040850190845b8181101561449657614482838551614342565b92840192610200929092019160010161446f565b50909695505050505050565b600081518084526020808501945080840160005b8381101561419f57815173ffffffffffffffffffffffffffffffffffffffff16875295820195908201906001016144b6565b600081518084526020808501945080840160005b8381101561419f578151805173ffffffffffffffffffffffffffffffffffffffff9081168952908401511683880152604090960195908201906001016144fc565b600081518084526020808501945080840160005b8381101561419f57815187529582019590820190600101614551565b805173ffffffffffffffffffffffffffffffffffffffff168252600061026060208301516145b3602086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060408301516145c7604086018215159052565b5060608301516145db606086018215159052565b506080830151608085015260a083015160a085015260c083015160c085015260e083015160e0850152610100808401518186015250610120808401518282870152614628838701826144a2565b92505050610140808401518583038287015261464483826144e8565b925050506101608084015185830382870152614660838261453d565b92505050610180808401516146798287018260ff169052565b50506101a08381015173ffffffffffffffffffffffffffffffffffffffff908116918601919091526101c0808501511515908601526101e080850151909116908501526102008084015115159085015261022080840151908501526102409283015160ff1692909301919091525090565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561475d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc088860301845261474b85835161456d565b94509285019290850190600101614711565b5092979650505050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561475d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08886030184526147cb8583516141aa565b94509285019290850190600101614791565b60208152600061401a602083018461456d565b60006020828403121561480257600080fd5b815161433b816140d7565b60006020828403121561481f57600080fd5b5051919050565b600080600080600060a0868803121561483e57600080fd5b5050835160208501516040860151606087015160809097015192989197509594509092509050565b6000806040838503121561487957600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080600080608085870312156148cf57600080fd5b84516148da816140d7565b60208601516040870151606090970151919890975090945092505050565b8051801515811461490857600080fd5b919050565b60006020828403121561491f57600080fd5b61401a826148f8565b6000806040838503121561493b57600080fd5b8251614946816140d7565b602084015190925061ffff8116811461412a57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156149ce576149ce61498d565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614a0b57614a0b61498d565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614a4e57614a4e614a10565b500490565b80516fffffffffffffffffffffffffffffffff8116811461490857600080fd5b60008060408385031215614a8657600080fd5b614a8f83614a53565b9150614a9d60208401614a53565b90509250929050565b600080600060608486031215614abb57600080fd5b614ac484614a53565b9250614ad2602085016148f8565b9150604084015164ffffffffff81168114614aec57600080fd5b809150509250925092565b600060208284031215614b0957600080fd5b815160ff8116811461433b57600080fd5b600061ffff80841680614b2f57614b2f614a10565b92169190910492915050565b60008219821115614b4e57614b4e61498d565b50019056fea2646970667358221220d15108d0bec9cc6f3903875dd8412869a3da1b36661bdc780e2e2f0ae3136d2464736f6c634300080a003360a06040523480156200001157600080fd5b5060405162001b4538038062001b45833981016040819052620000349162000608565b6000805460ff19169055816001600160a01b0381166200006757604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cc91906200070a565b6001600160a01b031660805250805160005b818110156200014257620001398382815181106200010057620001006200072f565b6020026020010151600001518483815181106200012157620001216200072f565b6020026020010151602001516200014c60201b60201c565b600101620000de565b5050505062000822565b6001600160a01b03821615806200016a57506001600160a01b038116155b156200018957604051635919af9760e11b815260040160405180910390fd5b620001a8826001600160a01b0316620004ba60201b620006751760201c565b620001d65760405163df4c572d60e01b81526001600160a01b03831660048201526024015b60405180910390fd5b620001f5816001600160a01b0316620004ba60201b620006751760201c565b6200021f5760405163df4c572d60e01b81526001600160a01b0382166004820152602401620001cd565b806001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200027c575060408051601f3d908101601f19168201909252620002799181019062000745565b60015b6200029a576040516367a7cd4360e01b815260040160405180910390fd5b8060ff16600814620002bf576040516367a7cd4360e01b815260040160405180910390fd5b506000816001600160a01b031663d62ada116040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200031f575060408051601f3d908101601f191682019092526200031c918101906200076a565b60015b6200032a576200032d565b90505b6000836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200038c575060408051601f3d908101601f19168201909252620003899181019062000745565b60015b620003aa5760405163528ca31d60e01b815260040160405180910390fd5b60128160ff161115620003d05760405163528ca31d60e01b815260040160405180910390fd5b9050826001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa9250505080156200042f575060408051601f3d908101601f191682019092526200042c91810190620007a6565b60015b6200044d576040516367a7cd4360e01b815260040160405180910390fd5b8662000461576200046185858484620004c0565b5050505050620004748484848462000526565b826001600160a01b0316846001600160a01b03167fe263805b03657ab13064915d0723c5ce14981547e7cba5283f66b9e5d81f6e6e60405160405180910390a350505050565b3b151590565b60008313620004e2576040516356e05d2b60e01b815260040160405180910390fd5b836001600160501b0316816001600160501b0316108062000501575081155b15620005205760405163b1cf675560e01b815260040160405180910390fd5b50505050565b6001600160a01b03831682156200053e57600160a11b175b6200055460ff60a21b60a284901b1682620007fb565b6001600160a01b0390951660009081526001602052604090209490945550505050565b80516001600160a01b03811681146200058f57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715620005cf57620005cf62000594565b60405290565b604051601f8201601f191681016001600160401b038111828210171562000600576200060062000594565b604052919050565b60008060408084860312156200061d57600080fd5b620006288462000577565b602085810151919450906001600160401b03808211156200064857600080fd5b818701915087601f8301126200065d57600080fd5b81518181111562000672576200067262000594565b62000682848260051b01620005d5565b818152848101925060069190911b830184019089821115620006a357600080fd5b928401925b81841015620006fa5785848b031215620006c25760008081fd5b620006cc620005aa565b620006d78562000577565b8152620006e686860162000577565b8187015283529285019291840191620006a8565b8096505050505050509250929050565b6000602082840312156200071d57600080fd5b620007288262000577565b9392505050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156200075857600080fd5b815160ff811681146200072857600080fd5b6000602082840312156200077d57600080fd5b815180151581146200072857600080fd5b80516001600160501b03811681146200058f57600080fd5b600080600080600060a08688031215620007bf57600080fd5b620007ca866200078e565b9450602086015193506040860151925060608601519150620007ef608087016200078e565b90509295509295909350565b600082198211156200081d57634e487b7160e01b600052601160045260246000fd5b500190565b6080516112f262000853600039600081816101b201528181610280015281816103e201526104ff01526112f26000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c80638456cb591161008c578063b66102df11610066578063b66102df146101d4578063e8a97a3e146101e7578063f190e5fa146101fa578063f9a650301461023f57600080fd5b80638456cb591461016d5780639dcb511a14610175578063a50cf2c8146101ad57600080fd5b80635c975abb116100bd5780635c975abb1461011c5780635cecbd0e146101325780637afb01041461015a57600080fd5b80633f4ba83a146100e457806341976e09146100ee57806354fd4d5014610114575b600080fd5b6100ec610252565b005b6101016100fc366004610f28565b610340565b6040519081526020015b60405180910390f35b610101600281565b60005460ff16604051901515815260200161010b565b610145610140366004610f4a565b610352565b6040805192835260208301919091520161010b565b610101610168366004610f90565b610376565b6100ec6103b4565b610188610183366004610f28565b6104a0565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010b565b6101887f000000000000000000000000000000000000000000000000000000000000000081565b6101016101e2366004610fbc565b6104b4565b6100ec6101f5366004610ff8565b6104d1565b61020d610208366004610f28565b6105c3565b6040805173ffffffffffffffffffffffffffffffffffffffff909416845291151560208401529082015260600161010b565b61010161024d366004610f90565b61064d565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156102dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103009190611022565b610336576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033e61067b565b565b600061034b82610761565b5092915050565b60008061035f868661064d565b915061036b848461064d565b905094509492505050565b600080600061038484610761565b90925090508161039582600a611193565b61039f908761119f565b6103a991906111dc565b925050505b92915050565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561043e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104629190611022565b610498576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033e610819565b60006104ab826105c3565b50909392505050565b60006104c96104c3858561064d565b83610376565b949350505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561055b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057f9190611022565b6105b5576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105bf82826108d9565b5050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600160205260408120548190819080610624576040517f4bb8ad8200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b947402000000000000000000000000000000000000000086161515945060a286901c9350915050565b600080600061065b84610761565b909250905061066b81600a611193565b61039f838761119f565b3b151590565b60005460ff166106ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b600080600080610770856105c3565b8095508193508294505050506000806000808573ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156107cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f19190611231565b9450945050935093508461080b5761080b84848484610dd9565b829750505050505050915091565b60005460ff1615610886576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016106e3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586107373390565b73ffffffffffffffffffffffffffffffffffffffff82161580610910575073ffffffffffffffffffffffffffffffffffffffff8116155b15610947576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82163b6109ad576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016106e3565b73ffffffffffffffffffffffffffffffffffffffff81163b610a13576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024016106e3565b8073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610a98575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610a9591810190611281565b60015b610ace576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060ff16600814610b0b576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060008173ffffffffffffffffffffffffffffffffffffffff1663d62ada116040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610b93575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610b9091810190611022565b60015b610b9c57610b9f565b90505b60008373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610c26575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610c2391810190611281565b60015b610c5c576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60128160ff161115610c9a576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b90508273ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa925050508015610d21575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610d1e91810190611231565b60015b610d57576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b86610d6857610d6885858484610dd9565b5050505050610d7984848484610e74565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fe263805b03657ab13064915d0723c5ce14981547e7cba5283f66b9e5d81f6e6e60405160405180910390a350505050565b60008313610e13576040517f56e05d2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8369ffffffffffffffffffff168169ffffffffffffffffffff161080610e37575081155b15610e6e576040517fb1cf675500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b73ffffffffffffffffffffffffffffffffffffffff83168215610ea95774020000000000000000000000000000000000000000175b610ecf7503fc000000000000000000000000000000000000000060a284901b16826112a4565b73ffffffffffffffffffffffffffffffffffffffff90951660009081526001602052604090209490945550505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610f2357600080fd5b919050565b600060208284031215610f3a57600080fd5b610f4382610eff565b9392505050565b60008060008060808587031215610f6057600080fd5b84359350610f7060208601610eff565b925060408501359150610f8560608601610eff565b905092959194509250565b60008060408385031215610fa357600080fd5b82359150610fb360208401610eff565b90509250929050565b600080600060608486031215610fd157600080fd5b83359250610fe160208501610eff565b9150610fef60408501610eff565b90509250925092565b6000806040838503121561100b57600080fd5b61101483610eff565b9150610fb360208401610eff565b60006020828403121561103457600080fd5b81518015158114610f4357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b808511156110cc57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156110b2576110b2611044565b808516156110bf57918102915b93841c9390800290611078565b509250929050565b6000826110e3575060016103ae565b816110f0575060006103ae565b816001811461110657600281146111105761112c565b60019150506103ae565b60ff84111561112157611121611044565b50506001821b6103ae565b5060208310610133831016604e8410600b841016171561114f575081810a6103ae565b6111598383611073565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561118b5761118b611044565b029392505050565b6000610f4383836110d4565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156111d7576111d7611044565b500290565b600082611212577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b805169ffffffffffffffffffff81168114610f2357600080fd5b600080600080600060a0868803121561124957600080fd5b61125286611217565b945060208601519350604086015192506060860151915061127560808701611217565b90509295509295909350565b60006020828403121561129357600080fd5b815160ff81168114610f4357600080fd5b600082198211156112b7576112b7611044565b50019056fea2646970667358221220e7485a2cb5750973f539ca59d2211008b42bb92b6c49605a53f5d9c88c330fb164736f6c634300080a003360e06040523480156200001157600080fd5b5060405162002ced38038062002ced8339810160408190526200003491620004bb565b6000805460ff19169055806001600160a01b0381166200006757604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cc9190620004bb565b6001600160a01b039081166080526001805560408051808201909152600281526105a360f41b602082015291508216620001245760405162461bcd60e51b81526004016200011b9190620004ed565b60405180910390fd5b50806001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000164573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200018a9190620004bb565b6001600160a01b031660c052604051620001a490620004ad565b604051809103906000f080158015620001c1573d6000803e3d6000fd5b506001600160a01b031660a08190526040805163204a7f0760e21b81529051638129fc1c9160048082019260009290919082900301818387803b1580156200020857600080fd5b505af11580156200021d573d6000803e3d6000fd5b50505050620002316200028a60201b60201c565b50600454600380546001600160a01b039092166001600160a01b03199283161790556000805260026020527fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b8054909116905562000545565b6000620002a460a0516200038c60201b6200119b1760201c565b9050806001600160a01b0316638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620002e257600080fd5b505af1158015620002f7573d6000803e3d6000fd5b5050600480546001600160a01b03908116600090815260026020908152604090912080546001600160a01b03199081169388169384179091558354169091179091556200035492506005915083906200043b811b6200127d17901c565b506040516001600160a01b038216907f9f69b6c10f6810213e055b0ba6bc0a4e2603f73c221aad77ea35da819cda7dc390600090a250565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260601b60148201526e5af43d82803e903d91602b57fd5bf360881b60288201526037816000f09150506001600160a01b038116620004365760405162461bcd60e51b815260206004820152601660248201527f455243313136373a20637265617465206661696c65640000000000000000000060448201526064016200011b565b919050565b600062000452836001600160a01b0384166200045b565b90505b92915050565b6000818152600183016020526040812054620004a45750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000455565b50600062000455565b610e788062001e7583390190565b600060208284031215620004ce57600080fd5b81516001600160a01b0381168114620004e657600080fd5b9392505050565b600060208083528351808285015260005b818110156200051c57858101830151858201604001528201620004fe565b818111156200052f576000604083870101525b50601f01601f1916929092016040019392505050565b60805160a05160c0516118cf620005a66000396000818161026a015281816103680152610b7001526000818161020201526110650152600081816102c4015281816105b80152818161099601528181610a840152610e7401526118cf6000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806388f64c54116100cd578063b193976311610081578063d82ecc4811610066578063d82ecc4814610309578063e3ba9ace1461031c578063f23953ab1461032f57600080fd5b8063b1939763146102f9578063b60e85181461030157600080fd5b80638f7dcfa3116100b25780638f7dcfa31461029f578063a50cf2c8146102bf578063a904aab6146102e657600080fd5b806388f64c541461026557806389b77b3e1461028c57600080fd5b806354fd4d50116101245780635da33c5b116101095780635da33c5b146101fd578063765e0159146102245780638456cb591461025d57600080fd5b806354fd4d50146101d05780635c975abb146101e657600080fd5b806313d8c8401461015657806321d18456146101a05780632932472f146101b35780633f4ba83a146101c8575b600080fd5b6004546101769073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6101766101ae366004611651565b610337565b6101c66101c1366004611697565b61058a565b005b6101c6610968565b6101d8600181565b604051908152602001610197565b60005460ff165b6040519015158152602001610197565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101766102323660046116da565b73ffffffffffffffffffffffffffffffffffffffff9081166000908152600260205260409020541690565b6101c6610a56565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101c661029a3660046116da565b610b42565b6003546101769073ffffffffffffffffffffffffffffffffffffffff1681565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101c66102f4366004611697565b610e46565b6101d8610fb8565b6101d8611033565b6101ed6103173660046116da565b611044565b61017661032a3660046116f5565b611051565b6101c661105e565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa1580156103c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103e8919061170e565b6040518060400160405280600281526020017f43500000000000000000000000000000000000000000000000000000000000008152509061045f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b60405180910390fd5b506104686112a6565b6003805473ffffffffffffffffffffffffffffffffffffffff8082166000818152600260205260409081902080549093167fffffffffffffffffffffffff0000000000000000000000000000000000000000948516179094558154909216905590517fc75b5a710000000000000000000000000000000000000000000000000000000081523360048201526024810185905260448101849052819063c75b5a7190606401600060405180830381600087803b15801561052657600080fd5b505af115801561053a573d6000803e3d6000fd5b505060405133925073ffffffffffffffffffffffffffffffffffffffff841691507ff3ede7039176503a8ad1fe7cfaa29475a9dbe0cdcaf04ecf9a5c10570c47b10390600090a390505b92915050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610614573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610638919061170e565b61066e576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106766112a6565b60035473ffffffffffffffffffffffffffffffffffffffff838116911614156106fa576003805473ffffffffffffffffffffffffffffffffffffffff808216600090815260026020526040902080549091167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092558154169055610865565b73ffffffffffffffffffffffffffffffffffffffff838116600090815260026020908152604091829020548251808401909352600383527f4146330000000000000000000000000000000000000000000000000000000000918301919091529091848116911614610798576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b5060045473ffffffffffffffffffffffffffffffffffffffff838116911614156107fd57600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85161790555b73ffffffffffffffffffffffffffffffffffffffff828116600081815260026020526040808220805488861684529183208054929095167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790945591905281541690555b6040517fc75b5a7100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600060248301819052604483015283169063c75b5a7190606401600060405180830381600087803b1580156108dc57600080fd5b505af11580156108f0573d6000803e3d6000fd5b505050506109088260056112dd90919063ffffffff16565b508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f25e267469ba2ae82515be7b3d45df60bf8308343f0809e8cf7319058e2255ce660405160405180910390a3505050565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156109f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a16919061170e565b610a4c576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a546112ff565b565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015610ae0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b04919061170e565b610b3a576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a546113e0565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa158015610bcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf0919061170e565b6040518060400160405280600281526020017f435000000000000000000000000000000000000000000000000000000000000081525090610c5e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b50610c6a6005826114a0565b6040518060400160405280600381526020017f414634000000000000000000000000000000000000000000000000000000000081525090610cd8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b50438173ffffffffffffffffffffffffffffffffffffffff16633dc54b406040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4991906117a3565b14156040518060400160405280600381526020017f414631000000000000000000000000000000000000000000000000000000000081525090610db9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b506004805473ffffffffffffffffffffffffffffffffffffffff90811660009081526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081169487169485179091558454168317909355915190917fced6ab9afc868b3a088366f6631ae20752993b5cce5d5f0534ea5a59fcc57d5691a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610ed0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef4919061170e565b610f2a576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f19a1603900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301528416906319a1603990604401600060405180830381600087803b158015610f9b57600080fd5b505af1158015610faf573d6000803e3d6000fd5b50505050505050565b600354600090819073ffffffffffffffffffffffffffffffffffffffff165b73ffffffffffffffffffffffffffffffffffffffff81161561102d5773ffffffffffffffffffffffffffffffffffffffff9081166000908152600260205260409020541681611025816117eb565b925050610fd7565b50919050565b600061103f60056114cf565b905090565b60006105846005836114a0565b60006105846005836114d9565b60006110897f000000000000000000000000000000000000000000000000000000000000000061119b565b90508073ffffffffffffffffffffffffffffffffffffffff16638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156110d357600080fd5b505af11580156110e7573d6000803e3d6000fd5b50506004805473ffffffffffffffffffffffffffffffffffffffff908116600090815260026020526040902080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811692871692831790915582541617905550611156905060058261127d565b5060405173ffffffffffffffffffffffffffffffffffffffff8216907f9f69b6c10f6810213e055b0ba6bc0a4e2603f73c221aad77ea35da819cda7dc390600090a250565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260601b60148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f091505073ffffffffffffffffffffffffffffffffffffffff8116611278576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f455243313136373a20637265617465206661696c6564000000000000000000006044820152606401610456565b919050565b600061129f8373ffffffffffffffffffffffffffffffffffffffff84166114e5565b9392505050565b60035473ffffffffffffffffffffffffffffffffffffffff90811660009081526002602052604090205416610a5457610a5461105e565b600061129f8373ffffffffffffffffffffffffffffffffffffffff8416611534565b60005460ff1661136b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610456565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff161561144d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610456565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586113b63390565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600183016020526040812054151561129f565b6000610584825490565b600061129f8383611627565b600081815260018301602052604081205461152c57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610584565b506000610584565b6000818152600183016020526040812054801561161d576000611558600183611824565b855490915060009061156c90600190611824565b90508181146115d157600086600001828154811061158c5761158c61183b565b90600052602060002001549050808760000184815481106115af576115af61183b565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806115e2576115e261186a565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610584565b6000915050610584565b600082600001828154811061163e5761163e61183b565b9060005260206000200154905092915050565b6000806040838503121561166457600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff8116811461127857600080fd5b6000806000606084860312156116ac57600080fd5b6116b584611673565b92506116c360208501611673565b91506116d160408501611673565b90509250925092565b6000602082840312156116ec57600080fd5b61129f82611673565b60006020828403121561170757600080fd5b5035919050565b60006020828403121561172057600080fd5b8151801515811461129f57600080fd5b600060208083528351808285015260005b8181101561175d57858101830151858201604001528201611741565b8181111561176f576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b6000602082840312156117b557600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561181d5761181d6117bc565b5060010190565b600082821015611836576118366117bc565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220f1e9c81b8c3af2491c907ee66cf24e1bb76111b821db02df8f98dbb48b5ab5fa64736f6c634300080a0033608060405234801561001057600080fd5b50610e58806100206000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c806354fd4d5011610081578063c45a01551161005b578063c45a0155146101a4578063c75b5a71146101ca578063d1660f99146101dd57600080fd5b806354fd4d501461014f5780638129fc1c14610157578063c12c21c01461015f57600080fd5b80631afbb7a4116100b25780631afbb7a41461011d5780631cff79cd146101265780633dc54b401461014657600080fd5b806316128211146100d957806317d11a15146100ee57806319a160391461010a575b600080fd5b6100ec6100e7366004610b42565b6101f0565b005b6100f760035481565b6040519081526020015b60405180910390f35b6100ec610118366004610b8d565b61024c565b6100f760025481565b610139610134366004610bef565b6102c9565b6040516101019190610d49565b6100f760045481565b6100f7600181565b6100ec610344565b60015461017f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610101565b60005461017f9062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b6100ec6101d8366004610d5c565b610494565b6100ec6101eb366004610d8f565b61053d565b60015473ffffffffffffffffffffffffffffffffffffffff163314610241576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600291909155600355565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1633146102a3576040517fb126b84800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102c573ffffffffffffffffffffffffffffffffffffffff83168260006105b4565b5050565b60015460609073ffffffffffffffffffffffffffffffffffffffff16331461031d576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033d73ffffffffffffffffffffffffffffffffffffffff8416836107b4565b9392505050565b600054610100900460ff1661035f5760005460ff1615610363565b303b155b6103f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600054610100900460ff1615801561043357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000166101011790555b600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16336201000002179055801561049157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b50565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1633146104eb576040517fb126b84800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff949094169390931790925560025560035543600455565b60015473ffffffffffffffffffffffffffffffffffffffff16331461058e576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105af73ffffffffffffffffffffffffffffffffffffffff841683836107f6565b505050565b80158061065457506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015284169063dd62ed3e90604401602060405180830381865afa15801561062e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106529190610dcb565b155b6106e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e63650000000000000000000060648201526084016103eb565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526105af9084907f095ea7b300000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261084c565b606061033d83836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250610958565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526105af9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401610732565b60006108ae826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166109589092919063ffffffff16565b8051909150156105af57808060200190518101906108cc9190610de4565b6105af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016103eb565b6060610967848460008561096f565b949350505050565b606082471015610a01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016103eb565b843b610a69576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016103eb565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051610a929190610e06565b60006040518083038185875af1925050503d8060008114610acf576040519150601f19603f3d011682016040523d82523d6000602084013e610ad4565b606091505b5091509150610ae4828286610aef565b979650505050505050565b60608315610afe57508161033d565b825115610b0e5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103eb9190610d49565b60008060408385031215610b5557600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff81168114610b8857600080fd5b919050565b60008060408385031215610ba057600080fd5b610ba983610b64565b9150610bb760208401610b64565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215610c0257600080fd5b610c0b83610b64565b9150602083013567ffffffffffffffff80821115610c2857600080fd5b818501915085601f830112610c3c57600080fd5b813581811115610c4e57610c4e610bc0565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715610c9457610c94610bc0565b81604052828152886020848701011115610cad57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b83811015610cea578181015183820152602001610cd2565b83811115610cf9576000848401525b50505050565b60008151808452610d17816020860160208601610ccf565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061033d6020830184610cff565b600080600060608486031215610d7157600080fd5b610d7a84610b64565b95602085013595506040909401359392505050565b600080600060608486031215610da457600080fd5b610dad84610b64565b9250610dbb60208501610b64565b9150604084013590509250925092565b600060208284031215610ddd57600080fd5b5051919050565b600060208284031215610df657600080fd5b8151801515811461033d57600080fd5b60008251610e18818460208701610ccf565b919091019291505056fea2646970667358221220448e7046078cd668c09328d857e534e2aab6cdc0e691d3d4f2c8baae8e084b1364736f6c634300080a003360c06040523480156200001157600080fd5b506040516200162738038062001627833981016040819052620000349162000177565b60408051808201909152600281526105a360f41b60208201526001600160a01b038216620000805760405162461bcd60e51b8152600401620000779190620001a9565b60405180910390fd5b50806001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e6919062000177565b6001600160a01b03166080816001600160a01b031681525050806001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200013e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000164919062000177565b6001600160a01b031660a0525062000201565b6000602082840312156200018a57600080fd5b81516001600160a01b0381168114620001a257600080fd5b9392505050565b600060208083528351808285015260005b81811015620001d857858101830151858201604001528201620001ba565b81811115620001eb576000604083870101525b50601f01601f1916929092016040019392505050565b60805160a0516113c2620002656000396000818161021f0152818161036401526106d501526000818160af0152818161012a015281816104420152818161056e015281816107b301528181610aa601528181610b890152610c6701526113c26000f3fe60806040526004361061005e5760003560e01c80635869dba8116100435780635869dba814610199578063deecfbc9146101bb578063e79a4089146101ce57600080fd5b80634f0e0ef31461011857806354fd4d501461017657600080fd5b366101135760408051808201909152600381527f574732000000000000000000000000000000000000000000000000000000000060208201523373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b60405180910390fd5b50005b600080fd5b34801561012457600080fd5b5061014c7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561018257600080fd5b5061018b600181565b60405190815260200161016d565b3480156101a557600080fd5b506101b96101b4366004611263565b6101ee565b005b6101b96101c936600461128f565b61031d565b3480156101da57600080fd5b506101b96101e93660046112e1565b61068e565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201819052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa15801561027b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061029f9190611318565b6040518060400160405280600281526020017f43500000000000000000000000000000000000000000000000000000000000008152509061030d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b506103188383610a77565b505050565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808516600483015284917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa1580156103ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103d19190611318565b6040518060400160405280600281526020017f52500000000000000000000000000000000000000000000000000000000000008152509061043f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e6919061133a565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600381526020017f57473100000000000000000000000000000000000000000000000000000000008152509061056b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156105d457600080fd5b505af11580156105e8573d6000803e3d6000fd5b50505050506105f78434610b3c565b6040517f9aa5d46200000000000000000000000000000000000000000000000000000000815234600482015273ffffffffffffffffffffffffffffffffffffffff848116602483015261ffff84166044830152851690639aa5d46290606401600060405180830381600087803b15801561067057600080fd5b505af1158015610684573d6000803e3d6000fd5b5050505050505050565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808516600483015284917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa15801561071e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107429190611318565b6040518060400160405280600281526020017f5250000000000000000000000000000000000000000000000000000000000000815250906107b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610833573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610857919061133a565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600381526020017f5747310000000000000000000000000000000000000000000000000000000000815250906108dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b506109703330858773ffffffffffffffffffffffffffffffffffffffff166336dda7d56040518163ffffffff1660e01b8152600401602060405180830381865afa15801561092e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610952919061133a565b73ffffffffffffffffffffffffffffffffffffffff16929190610cd4565b6040517f05fe138b0000000000000000000000000000000000000000000000000000000081526004810184905230602482015260009073ffffffffffffffffffffffffffffffffffffffff8616906305fe138b906044016020604051808303816000875af11580156109e6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0a9190611357565b9050610a168382610a77565b8273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f6de63bb986f2779478e384365c03cc2e62f06b453856acca87d5a519ce02664960405160405180910390a35050505050565b6040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632e1a7d4d90602401600060405180830381600087803b158015610aff57600080fd5b505af1158015610b13573d6000803e3d6000fd5b50610b389250505073ffffffffffffffffffffffffffffffffffffffff831682610d6f565b5050565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015282917f00000000000000000000000000000000000000000000000000000000000000009091169063dd62ed3e90604401602060405180830381865afa158015610bd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf69190611357565b1015610b38576040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303816000875af1158015610cb0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103189190611318565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052610d69908590610ec9565b50505050565b80471015610dd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610107565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114610e33576040519150601f19603f3d011682016040523d82523d6000602084013e610e38565b606091505b5050905080610318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610107565b6000610f2b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16610fd59092919063ffffffff16565b8051909150156103185780806020019051810190610f499190611318565b610318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610107565b6060610fe48484600085610fee565b90505b9392505050565b606082471015611080576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610107565b843b6110e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610107565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516111119190611370565b60006040518083038185875af1925050503d806000811461114e576040519150601f19603f3d011682016040523d82523d6000602084013e611153565b606091505b509150915061116382828661116e565b979650505050505050565b6060831561117d575081610fe7565b82511561118d5782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b60005b838110156111dc5781810151838201526020016111c4565b83811115610d695750506000910152565b602081526000825180602084015261120c8160408501602087016111c1565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461126057600080fd5b50565b6000806040838503121561127657600080fd5b82356112818161123e565b946020939093013593505050565b6000806000606084860312156112a457600080fd5b83356112af8161123e565b925060208401356112bf8161123e565b9150604084013561ffff811681146112d657600080fd5b809150509250925092565b6000806000606084860312156112f657600080fd5b83356113018161123e565b92506020840135915060408401356112d68161123e565b60006020828403121561132a57600080fd5b81518015158114610fe757600080fd5b60006020828403121561134c57600080fd5b8151610fe78161123e565b60006020828403121561136957600080fd5b5051919050565b600082516113828184602087016111c1565b919091019291505056fea264697066735822122017fd7fc76e4a1efcf24b78a3417fad7ab9576f0a23aa756ddb211c5e2227aa9564736f6c634300080a003360806040523480156200001157600080fd5b5060405162002b8038038062002b80833981016040819052620000349162000122565b6001600160a01b0381166200008f5760405162461bcd60e51b815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640160405180910390fd5b6001600160a01b03811660008181526001602052604080822080546001600160601b0319166b204fce5e3e2502611000000090811790915590517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91620000f99190815260200190565b60405180910390a350600680546001600160a81b031916336101000260ff191617905562000154565b6000602082840312156200013557600080fd5b81516001600160a01b03811681146200014d57600080fd5b9392505050565b612a1c80620001646000396000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c806370a08231116100f9578063b4b5ea5711610097578063dd62ed3e11610071578063dd62ed3e14610503578063e7a324dc14610555578063f1127ed81461057c578063f2fde38b146105ee57600080fd5b8063b4b5ea57146104ca578063c3cda520146104dd578063d505accf146104f057600080fd5b806395d89b41116100d357806395d89b411461045b5780639742ca4614610497578063a9059cbb146104aa578063b0660c3d146104bd57600080fd5b806370a08231146103c7578063782d6fe11461040b5780637ecebe001461043b57600080fd5b806330adf81f11610166578063481c6a7511610140578063481c6a751461031e578063587cde1e146103435780635c19a95c146103795780636fcfff451461038c57600080fd5b806330adf81f14610298578063313ce567146102bf578063349dc329146102d957600080fd5b806320606b701161019757806320606b70146102545780632185810b1461027b57806323b872dd1461028557600080fd5b806306fdde03146101be578063095ea7b31461021057806318160ddd14610233575b600080fd5b6101fa6040518060400160405280600781526020017f47656172626f780000000000000000000000000000000000000000000000000081525081565b60405161020791906124a3565b60405180910390f35b61022361021e36600461253f565b610601565b6040519015158152602001610207565b6102466b204fce5e3e2502611000000081565b604051908152602001610207565b6102467f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b61028361070d565b005b610223610293366004612569565b6107ee565b6102467f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b6102c7601281565b60405160ff9091168152602001610207565b6007546102f99073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610207565b6006546102f990610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6102f96103513660046125a5565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6102836103873660046125a5565b61098a565b6103b261039a3660046125a5565b60046020526000908152604090205463ffffffff1681565b60405163ffffffff9091168152602001610207565b6102466103d53660046125a5565b73ffffffffffffffffffffffffffffffffffffffff166000908152600160205260409020546bffffffffffffffffffffffff1690565b61041e61041936600461253f565b610997565b6040516bffffffffffffffffffffffff9091168152602001610207565b6102466104493660046125a5565b60056020526000908152604090205481565b6101fa6040518060400160405280600481526020017f474541520000000000000000000000000000000000000000000000000000000081525081565b6102836104a53660046125a5565b610cae565b6102236104b836600461253f565b610e20565b6006546102239060ff1681565b61041e6104d83660046125a5565b610e5c565b6102836104eb3660046125d1565b610efa565b6102836104fe366004612629565b611310565b610246610511366004612693565b73ffffffffffffffffffffffffffffffffffffffff9182166000908152602081815260408083209390941682529190915220546bffffffffffffffffffffffff1690565b6102467fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b6105c561058a3660046126c6565b600360209081526000928352604080842090915290825290205463ffffffff81169064010000000090046bffffffffffffffffffffffff1682565b6040805163ffffffff90931683526bffffffffffffffffffffffff909116602083015201610207565b6102836105fc3660046125a5565b61187a565b6000807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83141561063f57506bffffffffffffffffffffffff610664565b6106618360405180606001604052806025815260200161285260259139611a15565b90505b3360008181526020818152604080832073ffffffffffffffffffffffffffffffffffffffff89168085529083529281902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff871690811790915590519081529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a360019150505b92915050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314610798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e616765720060448201526064015b60405180910390fd5b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f795b0e16c8da9807b0a215f3749bd6dbcc49fc0472183f4e446abb7dcbd9d00790600090a1565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081815260408083203380855290835281842054825160608101909352602580845291936bffffffffffffffffffffffff909116928592610856928892919061285290830139611a15565b90508673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156108a257506bffffffffffffffffffffffff82811614155b156109725760006108cc83836040518060600160405280603d8152602001612974603d9139611a67565b73ffffffffffffffffffffffffffffffffffffffff898116600081815260208181526040808320948a168084529482529182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff87169081179091559151918252939450919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505b61097d878783611ad5565b5060019695505050505050565b6109943382611e9c565b50565b6000438210610a28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f476561723a3a6765745072696f72566f7465733a206e6f74207965742064657460448201527f65726d696e656400000000000000000000000000000000000000000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff831660009081526004602052604090205463ffffffff1680610a63576000915050610707565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604081208491610a95600185612735565b63ffffffff90811682526020820192909252604001600020541611610b1b5773ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812090610ae5600184612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff1691506107079050565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020908152604080832083805290915290205463ffffffff16831015610b63576000915050610707565b600080610b71600184612735565b90505b8163ffffffff168163ffffffff161115610c565760006002610b968484612735565b610ba0919061275a565b610baa9083612735565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260036020908152604080832063ffffffff8581168552908352928190208151808301909252549283168082526401000000009093046bffffffffffffffffffffffff1691810191909152919250871415610c2a576020015194506107079350505050565b805163ffffffff16871115610c4157819350610c4f565b610c4c600183612735565b92505b5050610b74565b5073ffffffffffffffffffffffffffffffffffffffff8516600090815260036020908152604080832063ffffffff909416835292905220546bffffffffffffffffffffffff6401000000009091041691505092915050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314610d34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e6167657200604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff8116610db1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640161078f565b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f2f834d1c8c4b956018fff5faca4d99868ae635487424d9c265c257ccbc698c6a90600090a250565b600080610e45836040518060600160405280602681526020016128a760269139611a15565b9050610e52338583611ad5565b5060019392505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526004602052604081205463ffffffff1680610e94576000610ef3565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812090610ec5600184612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b9392505050565b604080518082018252600781527f47656172626f780000000000000000000000000000000000000000000000000060209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f028ef9f797075f74ac647c65fde04fb0f128c2d59fd40f45732269917642fd4681840152466060820152306080808301919091528351808303909101815260a0820184528051908301207fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60c083015273ffffffffffffffffffffffffffffffffffffffff8a1660e08301526101008201899052610120808301899052845180840390910181526101408301909452835193909201929092207f19010000000000000000000000000000000000000000000000000000000000006101608401526101628301829052610182830181905290916000906101a201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa1580156110d8573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166111a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f476561723a3a64656c656761746542795369673a20696e76616c69642073696760448201527f6e61747572650000000000000000000000000000000000000000000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff811660009081526005602052604081208054916111d7836127a4565b919050558914611269576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f476561723a3a64656c656761746542795369673a20696e76616c6964206e6f6e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161078f565b874211156112f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f476561723a3a64656c656761746542795369673a207369676e6174757265206560448201527f7870697265640000000000000000000000000000000000000000000000000000606482015260840161078f565b611303818b611e9c565b505050505b505050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86141561134d57506bffffffffffffffffffffffff611372565b61136f8660405180606001604052806024815260200161291c60249139611a15565b90505b604080518082018252600781527f47656172626f780000000000000000000000000000000000000000000000000060209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f028ef9f797075f74ac647c65fde04fb0f128c2d59fd40f45732269917642fd4681840152466060820152306080808301919091528351808303909101815260a0909101835280519082012073ffffffffffffffffffffffffffffffffffffffff8b166000908152600590925291812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918c918c918c919086611472836127a4565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810188905260e001604051602081830303815290604052805190602001209050600082826040516020016115199291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff8b169284019290925260608301899052608083018890529092509060019060a0016020604051602081039080840390855afa1580156115a2573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661164a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a7065726d69743a20696e76616c6964207369676e617475726500604482015260640161078f565b8b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146116df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f476561723a3a7065726d69743a20756e617574686f72697a6564000000000000604482015260640161078f565b88421115611749576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a7065726d69743a207369676e6174757265206578706972656400604482015260640161078f565b846000808e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508a73ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258760405161186491906bffffffffffffffffffffffff91909116815260200190565b60405180910390a3505050505050505050505050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314611900576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e6167657200604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff811661197d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640161078f565b60065460405173ffffffffffffffffffffffffffffffffffffffff80841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36006805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b6000816c010000000000000000000000008410611a5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b509192915050565b6000836bffffffffffffffffffffffff16836bffffffffffffffffffffffff1611158290611ac2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b50611acd83856127dd565b949350505050565b60065460ff1680611b025750600654610100900473ffffffffffffffffffffffffffffffffffffffff1633145b80611b24575060075473ffffffffffffffffffffffffffffffffffffffff1633145b611b8a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f476561723a3a7472616e73666572732061726520666f7262696464656e000000604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff8316611c2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603c60248201527f476561723a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260448201527f616e736665722066726f6d20746865207a65726f206164647265737300000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff8216611cd0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f476561723a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260448201527f616e7366657220746f20746865207a65726f2061646472657373000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260016020908152604091829020548251606081019093526036808452611d2d936bffffffffffffffffffffffff90921692859291906129b190830139611a67565b73ffffffffffffffffffffffffffffffffffffffff848116600090815260016020908152604080832080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff968716179055928616825290829020548251606081019093526030808452611dbf949190911692859290919061287790830139611f50565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260409182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff968716179055905193851684529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a373ffffffffffffffffffffffffffffffffffffffff808416600090815260026020526040808220548584168352912054611e9792918216911683611fc1565b505050565b73ffffffffffffffffffffffffffffffffffffffff808316600081815260026020818152604080842080546001845282862054949093528787167fffffffffffffffffffffffff000000000000000000000000000000000000000084168117909155905191909516946bffffffffffffffffffffffff9092169391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4611f4a828483611fc1565b50505050565b600080611f5d8486612802565b9050846bffffffffffffffffffffffff16816bffffffffffffffffffffffff1610158390611fb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b50949350505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561200b57506000816bffffffffffffffffffffffff16115b15611e975773ffffffffffffffffffffffffffffffffffffffff8316156120fd5773ffffffffffffffffffffffffffffffffffffffff831660009081526004602052604081205463ffffffff1690816120655760006120c4565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812090612096600185612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b905060006120eb82856040518060600160405280602881526020016128cd60289139611a67565b90506120f9868484846121e2565b5050505b73ffffffffffffffffffffffffffffffffffffffff821615611e975773ffffffffffffffffffffffffffffffffffffffff821660009081526004602052604081205463ffffffff1690816121525760006121b1565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812090612183600185612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b905060006121d882856040518060600160405280602781526020016128f560279139611f50565b9050611308858484845b60006122064360405180606001604052806034815260200161294060349139612465565b905060008463ffffffff1611801561226d575073ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812063ffffffff831691612251600188612735565b63ffffffff908116825260208201929092526040016000205416145b156123035773ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812083916122a4600188612735565b63ffffffff168152602081019190915260400160002080546bffffffffffffffffffffffff92909216640100000000027fffffffffffffffffffffffffffffffff000000000000000000000000ffffffff9092169190911790556123fe565b60408051808201825263ffffffff80841682526bffffffffffffffffffffffff808616602080850191825273ffffffffffffffffffffffffffffffffffffffff8b166000908152600382528681208b8616825290915294909420925183549451909116640100000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009094169116179190911790556123a5846001612832565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260046020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff929092169190911790555b604080516bffffffffffffffffffffffff80861682528416602082015273ffffffffffffffffffffffffffffffffffffffff8716917fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724910160405180910390a25050505050565b6000816401000000008410611a5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91905b600060208083528351808285015260005b818110156124d0578581018301518582016040015282016124b4565b818111156124e2576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461253a57600080fd5b919050565b6000806040838503121561255257600080fd5b61255b83612516565b946020939093013593505050565b60008060006060848603121561257e57600080fd5b61258784612516565b925061259560208501612516565b9150604084013590509250925092565b6000602082840312156125b757600080fd5b610ef382612516565b803560ff8116811461253a57600080fd5b60008060008060008060c087890312156125ea57600080fd5b6125f387612516565b9550602087013594506040870135935061260f606088016125c0565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a03121561264457600080fd5b61264d88612516565b965061265b60208901612516565b95506040880135945060608801359350612677608089016125c0565b925060a0880135915060c0880135905092959891949750929550565b600080604083850312156126a657600080fd5b6126af83612516565b91506126bd60208401612516565b90509250929050565b600080604083850312156126d957600080fd5b6126e283612516565b9150602083013563ffffffff811681146126fb57600080fd5b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600063ffffffff8381169083168181101561275257612752612706565b039392505050565b600063ffffffff80841680612798577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156127d6576127d6612706565b5060010190565b60006bffffffffffffffffffffffff8381169083168181101561275257612752612706565b60006bffffffffffffffffffffffff80831681851680830382111561282957612829612706565b01949350505050565b600063ffffffff8083168185168083038211156128295761282961270656fe476561723a3a617070726f76653a20616d6f756e7420657863656564732039362062697473476561723a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e74206f766572666c6f7773476561723a3a7472616e736665723a20616d6f756e7420657863656564732039362062697473476561723a3a5f6d6f7665566f7465733a20766f746520616d6f756e7420756e646572666c6f7773476561723a3a5f6d6f7665566f7465733a20766f746520616d6f756e74206f766572666c6f7773476561723a3a7065726d69743a20616d6f756e7420657863656564732039362062697473476561723a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d62657220657863656564732033322062697473476561723a3a7472616e7366657246726f6d3a207472616e7366657220616d6f756e742065786365656473207370656e64657220616c6c6f77616e6365476561723a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e7420657863656564732062616c616e6365a26469706673582212201b84fd7789a35c022f692420863210a30e82d2405659f5a28275d433fa53467f64736f6c634300080a003360806040526016805460ff1916905534801561001a57600080fd5b506040516110a73803806110a7833981016040819052610039916100b6565b600080546001600160a01b038085166001600160a01b0319928316179092556003805492841692909116919091179055610080600a6b033b2e3c9fd0803ce80000006100e9565b60075550506b033b2e3c9fd0803ce800000060155561010b565b80516001600160a01b03811681146100b157600080fd5b919050565b600080604083850312156100c957600080fd5b6100d28361009a565b91506100e06020840161009a565b90509250929050565b60008261010657634e487b7160e01b600052601260045260246000fd5b500490565b610f8d8061011a6000396000f3fe608060405234801561001057600080fd5b50600436106102e95760003560e01c806367c99d5811610191578063c5f956af116100e3578063dbcb313b11610097578063f11a648711610071578063f11a648714610320578063f3fdb15a146105f1578063fe14112d1461061157600080fd5b8063dbcb313b146105d6578063e941fa78146105df578063ef8d9603146105e857600080fd5b8063cb3905e1116100c8578063cb3905e1146105c4578063cf33d95514610320578063d0efe753146105cd57600080fd5b8063c5f956af14610588578063ca9505e4146105a857600080fd5b80639aa5d46211610145578063b6ac642a1161011f578063b6ac642a14610567578063bb04b19314610567578063bf28068b1461057557600080fd5b80639aa5d46214610544578063a4e8273e14610557578063b3554a0a1461055e57600080fd5b8063788c6bfe11610176578063788c6bfe146104ef5780638456cb591461050157806396df5dc01461053157600080fd5b806367c99d58146104de57806374375359146104e757600080fd5b806336dda7d51161024a5780634d778ad1116101fe57806354fd4d50116101d857806354fd4d50146104c05780635c975abb146104c8578063609ae317146104d557600080fd5b80634d778ad114610491578063532fe502146104a45780635427c938146104ad57600080fd5b80633f4ba83a1161022f5780633f4ba83a1461045257806345d31f9d1461047f5780634c19386c1461048857600080fd5b806336dda7d51461040f5780633e163df01461042f57600080fd5b80632495a599116102a157806329f3d3b61161028657806329f3d3b6146103b35780632a3354c9146103bc5780632e97ca21146103dc57600080fd5b80632495a599146103735780632954018c1461039357600080fd5b8063078c4781116102d2578063078c4781146103205780630fce70fb146103335780631e16e4fc1461033b57600080fd5b8063030dbb04146102ee57806305fe138b1461030a575b600080fd5b6102f760105481565b6040519081526020015b60405180910390f35b6102f7610318366004610ce8565b600092915050565b61033161032e366004610d14565b50565b005b6015546102f7565b61034e610349366004610d2f565b610618565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610301565b60035461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b60005461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6102f760095481565b600a5461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103ff6103ea366004610d14565b60066020526000908152604090205460ff1681565b6040519015158152602001610301565b60055461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103ff61043d366004610d14565b60146020526000908152604090205460ff1681565b610331601680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b6102f760075481565b6102f760015481565b6102f761049f366004610d2f565b61064f565b6102f760115481565b6102f76104bb366004610d2f565b61066d565b6102f7600181565b6016546103ff9060ff1681565b6102f760085481565b6102f7600d5481565b6102f7610685565b6b033b2e3c9fd0803ce80000006102f7565b610331601680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b61033161053f366004610d2f565b601555565b610331610552366004610d48565b505050565b60016102f7565b6102f7600e5481565b61033161032e366004610d2f565b610331610583366004610ce8565b61071d565b60135461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103316105b6366004610d7d565b600b92909255600c55600d55565b6102f7600c5481565b6102f7600b5481565b6102f760155481565b6102f7600f5481565b6102f760025481565b60125461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b60006102f7565b6004818154811061062857600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6000610667826b033b2e3c9fd0803ce800000061077a565b92915050565b6000610667826b033b2e3c9fd0803ce80000006108e9565b6003546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156106f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107189190610da9565b905090565b6009829055600a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691909117909155600354610776911682846109fe565b5050565b60408051808201909152600281527f4d330000000000000000000000000000000000000000000000000000000000006020820152600090826107f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b60405180910390fd5b506000610800600284610e72565b90506b033b2e3c9fd0803ce8000000610839827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610ead565b6108439190610e72565b8411156040518060400160405280600281526020017f4d31000000000000000000000000000000000000000000000000000000000000815250906108b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b5082816108cd6b033b2e3c9fd0803ce800000087610ec4565b6108d79190610f01565b6108e19190610e72565b949350505050565b60008215806108f6575081155b1561090357506000610667565b8161091b60026b033b2e3c9fd0803ce8000000610e72565b610945907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610ead565b61094f9190610e72565b8311156040518060400160405280600281526020017f4d31000000000000000000000000000000000000000000000000000000000000815250906109c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b506b033b2e3c9fd0803ce80000006109d9600282610e72565b6109e38486610ec4565b6109ed9190610f01565b6109f79190610e72565b9392505050565b6040805173ffffffffffffffffffffffffffffffffffffffff848116602483015260448083018590528351808403909101815260649092018352602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65649084015261055292869291600091610ac9918516908490610b73565b8051909150156105525780806020019051810190610ae79190610f19565b610552576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016107e9565b60606108e1848460008585843b610be6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107e9565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051610c0f9190610f3b565b60006040518083038185875af1925050503d8060008114610c4c576040519150601f19603f3d011682016040523d82523d6000602084013e610c51565b606091505b5091509150610c61828286610c6c565b979650505050505050565b60608315610c7b5750816109f7565b825115610c8b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ce357600080fd5b919050565b60008060408385031215610cfb57600080fd5b82359150610d0b60208401610cbf565b90509250929050565b600060208284031215610d2657600080fd5b6109f782610cbf565b600060208284031215610d4157600080fd5b5035919050565b600080600060608486031215610d5d57600080fd5b83359250610d6d60208501610cbf565b9150604084013590509250925092565b600080600060608486031215610d9257600080fd5b505081359360208301359350604090920135919050565b600060208284031215610dbb57600080fd5b5051919050565b60005b83811015610ddd578181015183820152602001610dc5565b83811115610dec576000848401525b50505050565b6020815260008251806020840152610e11816040850160208701610dc2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082610ea8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600082821015610ebf57610ebf610e43565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610efc57610efc610e43565b500290565b60008219821115610f1457610f14610e43565b500190565b600060208284031215610f2b57600080fd5b815180151581146109f757600080fd5b60008251610f4d818460208701610dc2565b919091019291505056fea26469706673582212204edb887d94928b3914f60ab48df0182da9eb30ddbb7021b164cc728b60a655d564736f6c634300080a00336101606040526000805462ff00001916620c00001790553480156200002357600080fd5b50604051620058e8380380620058e8833981016040819052620000469162000537565b806001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000085573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ab919062000537565b6000805460ff191690556001600160a01b038116620000dd57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200011c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000142919062000537565b6001600160a01b03166080816001600160a01b031681525050506000816001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200019d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c3919062000537565b6001600160a01b03831661010081905260e081905260408051632495a59960e01b81529051929350600092632495a599916004808201926020929091908290030181865afa1580156200021a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000240919062000537565b6001600160a01b03811660c05290506200025a8162000472565b816001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000299573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002bf919062000537565b6001600160a01b0316610120816001600160a01b031681525050816001600160a01b03166377532ed96040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000318573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033e919062000537565b6001600160a01b0316610140816001600160a01b031681525050816001600160a01b031663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000397573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003bd919062000537565b6001600001600a6101000a8154816001600160a01b0302191690836001600160a01b03160217905550816001600160a01b0316639068a8686040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000425573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044b919062000537565b6001600160a01b031660a0525050600380546001600160a01b031916331790555062000588565b6001600160a01b03811660009081526006602052604090205415620004aa57604051632e5a5c7760e01b815260040160405180910390fd5b61010060055410620004cf57604051631cbbe18560e01b815260040160405180910390fd5b600580546001600160a01b0383166000818152600660209081526040808320600190951b948590558483526004909152812091909155825491929062000515836200055e565b91905055505050565b6001600160a01b03811681146200053457600080fd5b50565b6000602082840312156200054a57600080fd5b815162000557816200051e565b9392505050565b60006000198214156200058157634e487b7160e01b600052601160045260246000fd5b5060010190565b60805160a05160c05160e051610100516101205161014051615248620006a0600039600081816107e20152818161371001526137c501526000818161052f01526136780152600081816103d301528181610e5701528181610ebb015281816124ff0152818161265a01528181612aa101528181612b8c01528181612c4e01528181612d0d0152613b8f015260006105a401526000818161062701528181610d2201528181610db301528181610e0001528181610e3601528181610f3f0152818161203a01528181612b6b015281816130ee015281816134dc015281816135a90152613fe601526000818161081c01528181610fe101526124c20152600081816107a80152818161118401526122cb01526152486000f3fe608060405234801561001057600080fd5b50600436106103415760003560e01c8063830aa745116101bd578063a70bc542116100f9578063e75538c7116100a2578063f9aa028a1161007c578063f9aa028a1461089d578063fdd57645146108bd578063fe47cde7146108f3578063ff6875431461091357600080fd5b8063e75538c714610864578063e958b70414610877578063f67c5bd01461088a57600080fd5b8063db7ceb80116100d3578063db7ceb8014610817578063dc2b21c11461083e578063e1998cf91461085157600080fd5b8063a70bc542146107ca578063c5e10eef146107dd578063d48bfca71461080457600080fd5b806394cf073a116101665780639f5f86ae116101405780639f5f86ae146107745780639fd12b7714610787578063a366f49614610790578063a50cf2c8146107a357600080fd5b806394cf073a146106f557806395373018146107085780639af1d35a1461071b57600080fd5b80638991b2f1116101975780638991b2f1146106af5780638fe3f93f146106cf578063944ac59f146106e257600080fd5b8063830aa7451461066f5780638345f26e146106825780638456cb59146106a757600080fd5b8063458936f51161028c578063570a7af2116102355780636ce4074a1161020f5780636ce4074a146105ef5780636e98e5e41461060f5780636f307dc314610622578063783274381461064957600080fd5b8063570a7af21461059f5780635c975abb146105c6578063654a9eda146105dc57600080fd5b80635063524a116102665780635063524a1461055157806351e3f1601461058457806354fd4d501461059757600080fd5b8063458936f51461050e57806346fb371d146105175780634f0e0ef31461052a57600080fd5b80632630c12f116102ee5780633192195c116102c85780633192195c146104be5780633e8297ca146104e65780633f4ba83a1461050657600080fd5b80632630c12f1461045857806329df0b93146104845780632f7a18811461049757600080fd5b806316f0115b1161031f57806316f0115b146103ce578063172c48c7146103f55780632362a2d81461043757600080fd5b8063055ee9b5146103465780630d8f9cee146103a657806311ca4fc2146103bb575b600080fd5b61037c610354366004614a87565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6103b96103b4366004614aa4565b610949565b005b6103b96103c9366004614aa4565b610a76565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b610408610403366004614add565b610b4e565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835261ffff90911660208301520161039d565b61044a610445366004614b13565b610b66565b60405190815260200161039d565b6001546a0100000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1661037c565b6103b9610492366004614a87565b6110be565b60005461037c906301000000900473ffffffffffffffffffffffffffffffffffffffff1681565b6104d16104cc366004614a87565b611122565b6040805192835260208301919091520161039d565b61044a6104f4366004614a87565b60096020526000908152604090205481565b6103b9611156565b61044a60055481565b6103b9610525366004614b95565b611244565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b61056461055f366004614be6565b61149b565b60408051948552602085019390935291830152606082015260800161039d565b6103b9610592366004614aa4565b611602565b61044a600281565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b60005460ff16604051901515815260200161039d565b6103b96105ea366004614c21565b611703565b6106026105fd366004614d40565b611bbb565b60405161039d9190614e5b565b6103b961061d366004614aa4565b611e8e565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b61065c610657366004614a87565b612036565b60405161ffff909116815260200161039d565b6103b961067d366004614b95565b61210f565b6000546106959062010000900460ff1681565b60405160ff909116815260200161039d565b6103b961229d565b61044a6106bd366004614a87565b60086020526000908152604090205481565b61037c6106dd366004614e6e565b612389565b6103b96106f0366004614ea5565b612718565b61044a610703366004614f0a565b612845565b6103b9610716366004614a87565b612e5a565b6001546040805161ffff808416825262010000840481166020830152640100000000840481169282019290925266010000000000008304821660608201526801000000000000000090920416608082015260a00161039d565b6103b9610782366004614a87565b612f85565b61044a60075481565b6103b961079e366004614add565b613045565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b96107d8366004614f4c565b61309b565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b9610812366004614a87565b613221565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b961084c366004614f81565b61327b565b6103b961085f366004614aa4565b613306565b610408610872366004614add565b6134c9565b61037c610885366004614a87565b613541565b61044a610898366004614a87565b6135a5565b60035461037c9073ffffffffffffffffffffffffffffffffffffffff1681565b61037c6108cb366004614a87565b600b6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b600c5461037c9073ffffffffffffffffffffffffffffffffffffffff1681565b61037c610921366004614a87565b600a6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561099b57506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b156109d2576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff1615610a14576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055610a4a828261362e565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b60035473ffffffffffffffffffffffffffffffffffffffff163314610ac7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805473ffffffffffffffffffffffffffffffffffffffff9384166301000000027fffffffffffffffffff0000000000000000000000000000000000000000ffffff90911617905560018054919092166a0100000000000000000000027fffff0000000000000000000000000000000000000000ffffffffffffffffffff909116179055565b600080610b5d6001841b6134c9565b91509150915091565b6000805460ff1615610bd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064015b60405180910390fd5b600054610100900460ff1615610c1b576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff163314610ca0576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610cab89613541565b90506000806000806000610cbe86611122565b9094509050610ccf8c8e868461149b565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152939b5093985090955093506000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015610d6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8f9190614fa4565b9050610d9b8887614fec565b610da6906001614fec565b811115610de657610de1877f00000000000000000000000000000000000000000000000000000000000000008d60018c8b870303038d61366e565b610e30565b610e3073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168d8960018a8d01869003016138c0565b610e7e877f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000089600061366e565b6040517fca9505e40000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604481018490527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ca9505e490606401600060405180830381600087803b158015610f1457600080fd5b505af1158015610f28573d6000803e3d6000fd5b50505050505050506001841115610f6757610f67837f00000000000000000000000000000000000000000000000000000000000000008d87600061366e565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260086020526040902054861916610f9c8489888461395b565b6040517f89b77b3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f000000000000000000000000000000000000000000000000000000000000000016906389b77b3e90602401600060405180830381600087803b15801561102557600080fd5b505af1158015611039573d6000803e3d6000fd5b50505073ffffffffffffffffffffffffffffffffffffffff909c16600090815260026020526040812080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550929a9950505050505050505050565b6000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314611116576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61111f81613a35565b50565b60008060008061113185613aa6565b91955092509050816111438286615004565b61114d9190615041565b92505050915091565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156111e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611204919061507c565b61123a576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611242613c24565b565b60005460ff16156112b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156112f3576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100178155338152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff9081169084161480159061137457506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b80156113985750600c5473ffffffffffffffffffffffffffffffffffffffff163314155b806113b7575073ffffffffffffffffffffffffffffffffffffffff8316155b156113ee576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113f7826135a5565b61142d576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061143885613541565b9050611448838583856000613d05565b61146c5761145b83858360006001613d05565b5061146a838583856001613d05565b505b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b6001546000908190819081906127109061ffff166114b98888615099565b6114c39190615004565b6114cd9190615041565b6114d79086614fec565b935060018760028111156114ed576114ed6150b0565b1415611587576001546000906127109061151390640100000000900461ffff168b615004565b61151d9190615041565b6001549091506127109061153b9062010000900461ffff168b615004565b6115459190615041565b61154f9086614fec565b94508481111561156657600185820303935061156a565b8094505b85811061157b578585039250611581565b84860391505b506115f7565b600287600281111561159b5761159b6150b0565b14156115f157600154600090612710906115c59068010000000000000000900461ffff168b615004565b6115cf9190615041565b6001549091506127109061153b906601000000000000900461ffff168b615004565b84840391505b945094509450949050565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561165457506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b1561168b576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff16156116cd576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055610a4a8282613ea6565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561175557506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b1561178c576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff16156117ce576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790556118048584613ea6565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152600091908616906370a0823190602401602060405180830381865afa158015611874573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118989190614fa4565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529192506000918616906370a0823190602401602060405180830381865afa15801561190a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192e9190614fa4565b60015490915060009081906a0100000000000000000000900473ffffffffffffffffffffffffffffffffffffffff16635cecbd0e61196c8689615099565b8a6119778988615099565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152600481019390935273ffffffffffffffffffffffffffffffffffffffff918216602484015260448301528a1660648201526084016040805180830381865afa1580156119f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1791906150df565b9150915060018411611a2d57611a2d898961362e565b611a3687612036565b611a449061ffff1682615004565b9050611a4f88612036565b611a5d9061ffff1683615004565b9150818110611a7857611a6f89613a35565b5050505061146c565b73ffffffffffffffffffffffffffffffffffffffff891660009081526009602052604081205483611ab56b033b2e3c9fd0803ce800000085615004565b611abf9190615041565b611ad5906b033b2e3c9fd0803ce8000000615099565b611adf9190614fec565b60015490915061271090611b0a906b033b2e3c9fd0803ce80000009062010000900461ffff16615004565b611b149190615041565b8111611b555773ffffffffffffffffffffffffffffffffffffffff8a166000908152600960205260409020819055611b4b8a613a35565b505050505061146c565b611b5e8a613f56565b50505073ffffffffffffffffffffffffffffffffffffffff871660009081526009602052604090206001905550505050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b6060611bc960005460ff1690565b15611c30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff1615611c72576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100178155338152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff908116908416141580611ce7575073ffffffffffffffffffffffffffffffffffffffff8316155b15611d3d57600c5473ffffffffffffffffffffffffffffffffffffffff163314611d3d576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611d4885613541565b90508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167faed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab0360405160405180910390a36040517f1cff79cd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821690631cff79cd90611df89087908790600401615103565b6000604051808303816000875af1158015611e17573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611e5d9190810190615132565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905595945050505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314611edf576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821615611f4f5773ffffffffffffffffffffffffffffffffffffffff8281166000908152600a6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169183169190911790555b73ffffffffffffffffffffffffffffffffffffffff811615611fbf5773ffffffffffffffffffffffffffffffffffffffff8181166000908152600b6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169184169190911790555b73ffffffffffffffffffffffffffffffffffffffff811673cccccccccccccccccccccccccccccccccccccccc141561203257600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790555b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120ba5750506001547e01000000000000000000000000000000000000000000000000000000000000900461ffff1690565b60006120c5836135a5565b9050806120fe576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612107816134c9565b949350505050565b60005460ff161561217c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156121be576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff163314612243576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61224d8383613ea6565b61226f73ffffffffffffffffffffffffffffffffffffffff83168585846138c0565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555050565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015612327573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061234b919061507c565b612381576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112426142d4565b6000805460ff16156123f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff1615612439576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff1633146124be576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166321d18456857f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612568573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061258c9190614fa4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168152600481019290925260248201526044016020604051808303816000875af11580156125e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061260b91906151a0565b6040517fbf28068b0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff80831660248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063bf28068b90604401600060405180830381600087803b1580156126a057600080fd5b505af11580156126b4573d6000803e3d6000fd5b505050506126c28382614394565b73ffffffffffffffffffffffffffffffffffffffff811660009081526008602052604081206001905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690559392505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314612769576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805461ffff92831668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9484166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff96851664010000000002969096167fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff97851662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000090931694909816939093171794909416949094179190911716919091179055565b6000805460ff16156128b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156128f5576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff16331461297a576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080600061298887613aa6565b925092509250846129a25761299d8684615099565b6129ac565b6129ac8684614fec565b935060008515612b045769021e19e0c9bab24000008510612a15576129d583603689901c615004565b6129e3603686901c84615004565b6129ed9190614fec565b603686901c6129fc8585615004565b612a069190615004565b612a109190615041565b612a52565b612a1f8388615004565b612a298584615004565b612a339190614fec565b85612a3e8585615004565b612a489190615004565b612a529190615041565b6040517fbf28068b0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff8a811660248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063bf28068b90604401600060405180830381600087803b158015612ae757600080fd5b505af1158015612afb573d6000803e3d6000fd5b50505050612d9f565b60008484612b128583615004565b612b1c9190615041565b612b269190615099565b60015490915060009061271090612b419061ffff1684615004565b612b4b9190615041565b905073ffffffffffffffffffffffffffffffffffffffff8a1663d1660f997f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000084612bb6878f614fec565b612bc09190614fec565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b158015612c3457600080fd5b505af1158015612c48573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ca9505e4838b612c949190614fec565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815260048101919091526024810184905260006044820152606401600060405180830381600087803b158015612cf357600080fd5b505af1158015612d07573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d9a9190614fa4565b925050505b6040517f16128211000000000000000000000000000000000000000000000000000000008152600481018690526024810182905273ffffffffffffffffffffffffffffffffffffffff891690631612821190604401600060405180830381600087803b158015612e0e57600080fd5b505af1158015612e22573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055509498975050505050505050565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff16158015612eac57506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b15612ee3576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff1615612f25576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055612f5a81613f56565b50600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b60035473ffffffffffffffffffffffffffffffffffffffff163314612fd6576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517ff62005acebe9b616aefb5f248b48f5e89f28437b27d1eebc0b2d911209f297af90600090a250565b60035473ffffffffffffffffffffffffffffffffffffffff163314613096576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600755565b60035473ffffffffffffffffffffffffffffffffffffffff1633146130ec576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613193576001805461ffff83167e01000000000000000000000000000000000000000000000000000000000000027dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790555050565b600061319e836135a5565b9050806131d7576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000908152600460205260409020805473ffffffffffffffffffffffffffffffffffffffff1675ffff000000000000000000000000000000000000000060a084901b161790555050565b60035473ffffffffffffffffffffffffffffffffffffffff163314613272576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61111f81614467565b60035473ffffffffffffffffffffffffffffffffffffffff1633146132cc576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805460ff90921662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff909216919091179055565b60005460ff1615613373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156133b5576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff16331461343a576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061344583613541565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260026020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055905061349c8282614394565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b60008082600114156135275750506001547f0000000000000000000000000000000000000000000000000000000000000000927e0100000000000000000000000000000000000000000000000000000000000090910461ffff169150565b50506000908152600460205260409020549060a082901c90565b73ffffffffffffffffffffffffffffffffffffffff80821660009081526002602052604090205416806135a0576040517fb5ba4c4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146136255773ffffffffffffffffffffffffffffffffffffffff8216600090815260066020526040902054613628565b60015b92915050565b6000613639826135a5565b73ffffffffffffffffffffffffffffffffffffffff909316600090815260086020526040902080549319939093169092555050565b8080156136c657507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b15613828576040517fd1660f9900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301526044820184905286169063d1660f9990606401600060405180830381600087803b15801561376357600080fd5b505af1158015613777573d6000803e3d6000fd5b50506040517f5869dba800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690527f0000000000000000000000000000000000000000000000000000000000000000169250635869dba89150604401600060405180830381600087803b15801561380b57600080fd5b505af115801561381f573d6000803e3d6000fd5b505050506138b9565b6040517fd1660f9900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301526044820184905286169063d1660f9990606401600060405180830381600087803b1580156138a057600080fd5b505af11580156138b4573d6000803e3d6000fd5b505050505b5050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261395590859061455b565b50505050565b60025b8181116138b95781811615613a2d576000613978826134c9565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529192506000918316906370a0823190602401602060405180830381865afa1580156139eb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a0f9190614fa4565b90506002811115613a2a57613a2a878388600185038961366e565b50505b60011b61395e565b73ffffffffffffffffffffffffffffffffffffffff811660009081526008602052604081205490613a6582614667565b60005490915062010000900460ff16811115613aa1576000613a86836146a7565b613a91906001614fec565b905061395584848460008561470b565b505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff16631afbb7a46040518163ffffffff1660e01b8152600401602060405180830381865afa158015613af6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b1a9190614fa4565b92508373ffffffffffffffffffffffffffffffffffffffff166317d11a156040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b8b9190614fa4565b91507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bf8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c1c9190614fa4565b929491935050565b60005460ff16613c90576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610bd0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6040805173ffffffffffffffffffffffffffffffffffffffff8681166024830152604480830186905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b30000000000000000000000000000000000000000000000000000000017905291517f1cff79cd000000000000000000000000000000000000000000000000000000008152600092861691631cff79cd91613dc6918a91600401615103565b6000604051808303816000875af1925050508015613e2457506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052613e219190810190615132565b60015b613e2d57613e61565b80511580613e50575080806020019051810190613e4a919061507c565b15156001145b15613e5f576001915050613e9d565b505b8115613e99576040517f76e3e29c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060005b95945050505050565b6000613eb1826135a5565b9050801580613ec35750600754811615155b15613efa576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83166000908152600860205260409020548116613aa15773ffffffffffffffffffffffffffffffffffffffff83166000908152600860205260409020805482179055505050565b60015473ffffffffffffffffffffffffffffffffffffffff8281166000908152600860205260408120546a010000000000000000000090930490911691908080613f9f86611122565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526127108202600482015273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350908716915063f9a6503090604401602060405180830381865afa15801561403a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061405e9190614fa4565b9250614069846146a7565b6001019150506000806000805b848110156142a157801561408f5760018186031b614092565b60015b935086841615614299576000806140a8866134c9565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8e811660048301529294509092506000918416906370a0823190602401602060405180830381865afa15801561411d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141419190614fa4565b9050600181111561428c576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff848116602483015261ffff841691908d169063f9a6503090604401602060405180830381865afa1580156141c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141ea9190614fa4565b6141f49190615004565b6141fe9087614fec565b95508886106142875760006142128b614667565b60005490915062010000900460ff16811115614249576142448d8c836001891561423e57898e0361470b565b8d61470b565b614278565b85156142785773ffffffffffffffffffffffffffffffffffffffff8d1660009081526008602052604090208b90555b50505050505050505050505050565b614295565b98861898600194505b5050505b600101614076565b506040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005460ff1615614341576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613cdb3390565b73ffffffffffffffffffffffffffffffffffffffff821615806143dd575073ffffffffffffffffffffffffffffffffffffffff8281166000908152600260205260409020541615155b15614414576040517f9e59609e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff918216600090815260026020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001691909216179055565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260066020526040902054156144c4576040517f2e5a5c7700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61010060055410614501576040517f1cbbe18500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005805473ffffffffffffffffffffffffffffffffffffffff83166000818152600660209081526040808320600190951b9485905584835260049091528120919091558254919290614552836151bd565b91905055505050565b60006145bd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166148799092919063ffffffff16565b805190915015613aa157808060200190518101906145db919061507c565b613aa1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610bd0565b60008060005b6101008110156146a0576001811b91508382161561468c578260010192505b838210614698576146a0565b60010161466d565b5050919050565b600081600114156146ba57506000919050565b61010060015b60016146cc8284614fec565b901c92506001831b848116158015906146e75750600185851c145b156146f257506146a0565b84811061470157839250614705565b8391505b506146c0565b815b81811015614846576001811b8581161561483d57600061472c826134c9565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529192506000918316906370a0823190602401602060405180830381865afa15801561479f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147c39190614fa4565b90506001811161483a57600054978318977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9097019660ff6201000090910416871161483a5750505073ffffffffffffffffffffffffffffffffffffffff86166000908152600860205260409020859055506138b9565b50505b5060010161470d565b506040517f53275fcb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606148888484600085614892565b90505b9392505050565b606082471015614924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610bd0565b843b61498c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610bd0565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516149b591906151f6565b60006040518083038185875af1925050503d80600081146149f2576040519150601f19603f3d011682016040523d82523d6000602084013e6149f7565b606091505b5091509150614a07828286614a12565b979650505050505050565b60608315614a2157508161488b565b825115614a315782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd09190614e5b565b73ffffffffffffffffffffffffffffffffffffffff8116811461111f57600080fd5b600060208284031215614a9957600080fd5b813561488b81614a65565b60008060408385031215614ab757600080fd5b8235614ac281614a65565b91506020830135614ad281614a65565b809150509250929050565b600060208284031215614aef57600080fd5b5035919050565b8035600381106135a057600080fd5b801515811461111f57600080fd5b600080600080600080600060e0888a031215614b2e57600080fd5b8735614b3981614a65565b9650614b4760208901614af6565b9550604088013594506060880135614b5e81614a65565b93506080880135614b6e81614a65565b925060a0880135915060c0880135614b8581614b05565b8091505092959891949750929550565b60008060008060808587031215614bab57600080fd5b8435614bb681614a65565b93506020850135614bc681614a65565b92506040850135614bd681614a65565b9396929550929360600135925050565b60008060008060808587031215614bfc57600080fd5b84359350614c0c60208601614af6565b93969395505050506040820135916060013590565b600080600080600060a08688031215614c3957600080fd5b8535614c4481614a65565b94506020860135614c5481614a65565b93506040860135614c6481614a65565b94979396509394606081013594506080013592915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614cf257614cf2614c7c565b604052919050565b600067ffffffffffffffff821115614d1457614d14614c7c565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600080600060608486031215614d5557600080fd5b8335614d6081614a65565b92506020840135614d7081614a65565b9150604084013567ffffffffffffffff811115614d8c57600080fd5b8401601f81018613614d9d57600080fd5b8035614db0614dab82614cfa565b614cab565b818152876020838501011115614dc557600080fd5b816020840160208301376000602083830101528093505050509250925092565b60005b83811015614e00578181015183820152602001614de8565b838111156139555750506000910152565b60008151808452614e29816020860160208601614de5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061488b6020830184614e11565b60008060408385031215614e8157600080fd5b823591506020830135614ad281614a65565b803561ffff811681146135a057600080fd5b600080600080600060a08688031215614ebd57600080fd5b614ec686614e93565b9450614ed460208701614e93565b9350614ee260408701614e93565b9250614ef060608701614e93565b9150614efe60808701614e93565b90509295509295909350565b600080600060608486031215614f1f57600080fd5b8335614f2a81614a65565b9250602084013591506040840135614f4181614b05565b809150509250925092565b60008060408385031215614f5f57600080fd5b8235614f6a81614a65565b9150614f7860208401614e93565b90509250929050565b600060208284031215614f9357600080fd5b813560ff8116811461488b57600080fd5b600060208284031215614fb657600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115614fff57614fff614fbd565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561503c5761503c614fbd565b500290565b600082615077577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60006020828403121561508e57600080fd5b815161488b81614b05565b6000828210156150ab576150ab614fbd565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600080604083850312156150f257600080fd5b505080516020909101519092909150565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015260006148886040830184614e11565b60006020828403121561514457600080fd5b815167ffffffffffffffff81111561515b57600080fd5b8201601f8101841361516c57600080fd5b805161517a614dab82614cfa565b81815285602083850101111561518f57600080fd5b613e9d826020830160208601614de5565b6000602082840312156151b257600080fd5b815161488b81614a65565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156151ef576151ef614fbd565b5060010190565b60008251615208818460208701614de5565b919091019291505056fea26469706673582212209d39bb9d4972b515acdad1ffb757acd15e103ca6ee762f88a6382b36243734ba64736f6c634300080a00336101606040526000805462ff00001916620c00001790553480156200002357600080fd5b5060405162005c8438038062005c8483398101604081905262000046916200053a565b80806001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000086573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ac91906200053a565b6000805460ff191690556001600160a01b038116620000de57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200011d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200014391906200053a565b6001600160a01b03166080816001600160a01b031681525050506000816001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200019e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c491906200053a565b6001600160a01b03831661010081905260e081905260408051632495a59960e01b81529051929350600092632495a599916004808201926020929091908290030181865afa1580156200021b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200024191906200053a565b6001600160a01b03811660c05290506200025b8162000475565b816001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200029a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c091906200053a565b6001600160a01b0316610120816001600160a01b031681525050816001600160a01b03166377532ed96040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000319573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033f91906200053a565b6001600160a01b0316610140816001600160a01b031681525050816001600160a01b031663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000398573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003be91906200053a565b6001600001600a6101000a8154816001600160a01b0302191690836001600160a01b03160217905550816001600160a01b0316639068a8686040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000426573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044c91906200053a565b6001600160a01b031660a0525050600380546001600160a01b03191633179055506200058b9050565b6001600160a01b03811660009081526006602052604090205415620004ad57604051632e5a5c7760e01b815260040160405180910390fd5b61010060055410620004d257604051631cbbe18560e01b815260040160405180910390fd5b600580546001600160a01b0383166000818152600660209081526040808320600190951b9485905584835260049091528120919091558254919290620005188362000561565b91905055505050565b6001600160a01b03811681146200053757600080fd5b50565b6000602082840312156200054d57600080fd5b81516200055a8162000521565b9392505050565b60006000198214156200058457634e487b7160e01b600052601160045260246000fd5b5060010190565b60805160a05160c05160e0516101005161012051610140516155e1620006a3600039600081816109040152818161397e0152613a330152600081816105e001526138e601526000818161043e01528181610fda0152818161103e01528181612680015281816127db01528181612c2201528181612d0d01528181612dcf01528181612e8e0152613df6015260006106470152600081816106ca01528181610ea501528181610f3601528181610f8301528181610fb9015281816110c2015281816121bb01528181612cec015281816132800152818161374b01528181613818015261424d01526000818161095301528181611164015261264301526000818161084b01528181611307015261244c01526155e16000f3fe608060405234801561001057600080fd5b50600436106103995760003560e01c8063830aa745116101e9578063b5b12cd71161010f578063e1998cf9116100ad578063f9aa028a1161007c578063f9aa028a146109d4578063fdd57645146109f4578063fe47cde714610a2a578063ff68754314610a4a57600080fd5b8063e1998cf914610988578063e75538c71461099b578063e958b704146109ae578063f67c5bd0146109c157600080fd5b8063ced342b5116100e9578063ced342b514610926578063d48bfca71461093b578063db7ceb801461094e578063dc2b21c11461097557600080fd5b8063b5b12cd714610893578063b7ac50c6146108c1578063c5e10eef146108ff57600080fd5b80639537301811610187578063a366f49611610156578063a366f49614610833578063a50cf2c814610846578063a64bec9e1461086d578063a70bc5421461088057600080fd5b806395373018146107ab5780639af1d35a146107be5780639f5f86ae146108175780639fd12b771461082a57600080fd5b80638991b2f1116101c35780638991b2f1146107525780638fe3f93f14610772578063944ac59f1461078557806394cf073a1461079857600080fd5b8063830aa745146107125780638345f26e146107255780638456cb591461074a57600080fd5b80633f4ba83a116102ce57806355aabafd1161026c5780636ce4074a1161023b5780636ce4074a146106925780636e98e5e4146106b25780636f307dc3146106c557806378327438146106ec57600080fd5b806355aabafd14610630578063570a7af2146106425780635c975abb14610669578063654a9eda1461067f57600080fd5b80634f0e0ef3116102a85780634f0e0ef3146105db5780635063524a1461060257806351e3f1601461061557806354fd4d501461062857600080fd5b80633f4ba83a146105b7578063458936f5146105bf57806346fb371d146105c857600080fd5b806322995f5d1161033b57806329df0b931161031557806329df0b93146105355780632f7a1881146105485780633192195c1461056f5780633e8297ca1461059757600080fd5b806322995f5d146104d55780632362a2d8146104e85780632630c12f1461050957600080fd5b806311ca4fc21161037757806311ca4fc21461042657806316f0115b14610439578063172c48c7146104605780631b0c8234146104a257600080fd5b8063055ee9b51461039e5780630d8f9cee146103fe5780630d92632d14610413575b600080fd5b6103d46103ac366004614cee565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61041161040c366004614d0b565b610a80565b005b610411610421366004614d52565b610bad565b610411610434366004614d0b565b610bc1565b6103d47f000000000000000000000000000000000000000000000000000000000000000081565b61047361046e366004614dba565b610c99565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835261ffff9091166020830152016103f5565b6104b56104b0366004614de2565b610cb1565b6040805194855260208501939093529183015260608201526080016103f5565b6104116104e3366004614e1d565b610cd7565b6104fb6104f6366004614e6e565b610ce9565b6040519081526020016103f5565b6001546a0100000000000000000000900473ffffffffffffffffffffffffffffffffffffffff166103d4565b610411610543366004614cee565b611241565b6000546103d4906301000000900473ffffffffffffffffffffffffffffffffffffffff1681565b61058261057d366004614cee565b6112a5565b604080519283526020830191909152016103f5565b6104fb6105a5366004614cee565b60096020526000908152604090205481565b6104116112d9565b6104fb60055481565b6104116105d6366004614ef0565b6113c7565b6103d47f000000000000000000000000000000000000000000000000000000000000000081565b6104b5610610366004614de2565b61161e565b610411610623366004614d0b565b611783565b6104fb600281565b6104fb61063e366004614dba565b5490565b6103d47f000000000000000000000000000000000000000000000000000000000000000081565b60005460ff1660405190151581526020016103f5565b61041161068d366004614f31565b611884565b6106a56106a0366004615050565b611d3c565b6040516103f5919061516b565b6104116106c0366004614d0b565b61200f565b6103d47f000000000000000000000000000000000000000000000000000000000000000081565b6106ff6106fa366004614cee565b6121b7565b60405161ffff90911681526020016103f5565b610411610720366004614ef0565b612290565b6000546107389062010000900460ff1681565b60405160ff90911681526020016103f5565b61041161241e565b6104fb610760366004614cee565b60086020526000908152604090205481565b6103d461078036600461517e565b61250a565b6104116107933660046151b5565b612899565b6104fb6107a636600461521a565b6129c6565b6104116107b9366004614cee565b612fdb565b6001546040805161ffff808416825262010000840481166020830152640100000000840481169282019290925266010000000000008304821660608201526801000000000000000090920416608082015260a0016103f5565b610411610825366004614cee565b613106565b6104fb60075481565b610411610841366004614dba565b6131c6565b6103d47f000000000000000000000000000000000000000000000000000000000000000081565b6104fb61087b366004614dba565b61321c565b61041161088e36600461525c565b61322d565b6108a66108a1366004614cee565b6133b3565b604080519384526020840192909252908201526060016103f5565b6104116108cf36600461525c565b73ffffffffffffffffffffffffffffffffffffffff909116600090815260096020526040902061ffff9091169055565b6103d47f000000000000000000000000000000000000000000000000000000000000000081565b61092e6133ce565b6040516103f59190615291565b610411610949366004614cee565b613490565b6103d47f000000000000000000000000000000000000000000000000000000000000000081565b6104116109833660046152eb565b6134ea565b610411610996366004614d0b565b613575565b6104736109a9366004614dba565b613738565b6103d46109bc366004614cee565b6137b0565b6104fb6109cf366004614cee565b613814565b6003546103d49073ffffffffffffffffffffffffffffffffffffffff1681565b6103d4610a02366004614cee565b600b6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b600c546103d49073ffffffffffffffffffffffffffffffffffffffff1681565b6103d4610a58366004614cee565b600a6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff16158015610ad257506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b15610b09576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff1615610b4b576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055610b81828261389c565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b610bba85858585856138dc565b5050505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314610c12576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805473ffffffffffffffffffffffffffffffffffffffff9384166301000000027fffffffffffffffffff0000000000000000000000000000000000000000ffffff90911617905560018054919092166a0100000000000000000000027fffff0000000000000000000000000000000000000000ffffffffffffffffffff909116179055565b600080610ca86001841b613738565b91509150915091565b600080600080610cc38888888861161e565b93509350935093505b945094509450949050565b610ce384848484613b2d565b50505050565b6000805460ff1615610d5c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064015b60405180910390fd5b600054610100900460ff1615610d9e576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff163314610e23576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610e2e896137b0565b90506000806000806000610e41866112a5565b9094509050610e528c8e868461161e565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152939b5093985090955093506000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015610eee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f12919061530e565b9050610f1e8887615356565b610f29906001615356565b811115610f6957610f64877f00000000000000000000000000000000000000000000000000000000000000008d60018c8b870303038d6138dc565b610fb3565b610fb373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168d8960018a8d0186900301613c07565b611001877f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008960006138dc565b6040517fca9505e40000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604481018490527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ca9505e490606401600060405180830381600087803b15801561109757600080fd5b505af11580156110ab573d6000803e3d6000fd5b505050505050505060018411156110ea576110ea837f00000000000000000000000000000000000000000000000000000000000000008d8760006138dc565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604090205486191661111f84898884613b2d565b6040517f89b77b3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f000000000000000000000000000000000000000000000000000000000000000016906389b77b3e90602401600060405180830381600087803b1580156111a857600080fd5b505af11580156111bc573d6000803e3d6000fd5b50505073ffffffffffffffffffffffffffffffffffffffff909c16600090815260026020526040812080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550929a9950505050505050505050565b6000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314611299576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112a281613c9c565b50565b6000806000806112b485613d0d565b91955092509050816112c6828661536e565b6112d091906153ab565b92505050915091565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa158015611363573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061138791906153e6565b6113bd576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113c5613e8b565b565b60005460ff1615611434576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610d53565b600054610100900460ff1615611476576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100178155338152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff908116908416148015906114f757506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b801561151b5750600c5473ffffffffffffffffffffffffffffffffffffffff163314155b8061153a575073ffffffffffffffffffffffffffffffffffffffff8316155b15611571576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61157a82613814565b6115b0576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006115bb856137b0565b90506115cb838583856000613f6c565b6115ef576115de83858360006001613f6c565b506115ed838583856001613f6c565b505b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b6001546000908190819081906127109061ffff1661163c8888615403565b611646919061536e565b61165091906153ab565b61165a9086615356565b935060018760028111156116705761167061541a565b141561170a576001546000906127109061169690640100000000900461ffff168b61536e565b6116a091906153ab565b600154909150612710906116be9062010000900461ffff168b61536e565b6116c891906153ab565b6116d29086615356565b9450848111156116e95760018582030393506116ed565b8094505b8581106116fe578585039250611704565b84860391505b50610ccc565b600287600281111561171e5761171e61541a565b141561177457600154600090612710906117489068010000000000000000900461ffff168b61536e565b61175291906153ab565b600154909150612710906116be906601000000000000900461ffff168b61536e565b92979196505091860393509150565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff161580156117d557506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b1561180c576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff161561184e576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055610b81828261410d565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff161580156118d657506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b1561190d576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff161561194f576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055611985858461410d565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152600091908616906370a0823190602401602060405180830381865afa1580156119f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a19919061530e565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529192506000918616906370a0823190602401602060405180830381865afa158015611a8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aaf919061530e565b60015490915060009081906a0100000000000000000000900473ffffffffffffffffffffffffffffffffffffffff16635cecbd0e611aed8689615403565b8a611af88988615403565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152600481019390935273ffffffffffffffffffffffffffffffffffffffff918216602484015260448301528a1660648201526084016040805180830381865afa158015611b74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b989190615449565b9150915060018411611bae57611bae898961389c565b611bb7876121b7565b611bc59061ffff168261536e565b9050611bd0886121b7565b611bde9061ffff168361536e565b9150818110611bf957611bf089613c9c565b505050506115ef565b73ffffffffffffffffffffffffffffffffffffffff891660009081526009602052604081205483611c366b033b2e3c9fd0803ce80000008561536e565b611c4091906153ab565b611c56906b033b2e3c9fd0803ce8000000615403565b611c609190615356565b60015490915061271090611c8b906b033b2e3c9fd0803ce80000009062010000900461ffff1661536e565b611c9591906153ab565b8111611cd65773ffffffffffffffffffffffffffffffffffffffff8a166000908152600960205260409020819055611ccc8a613c9c565b50505050506115ef565b611cdf8a6141bd565b50505073ffffffffffffffffffffffffffffffffffffffff871660009081526009602052604090206001905550505050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b6060611d4a60005460ff1690565b15611db1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610d53565b600054610100900460ff1615611df3576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100178155338152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff908116908416141580611e68575073ffffffffffffffffffffffffffffffffffffffff8316155b15611ebe57600c5473ffffffffffffffffffffffffffffffffffffffff163314611ebe576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611ec9856137b0565b90508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167faed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab0360405160405180910390a36040517f1cff79cd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821690631cff79cd90611f79908790879060040161546d565b6000604051808303816000875af1158015611f98573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611fde919081019061549c565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905595945050505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314612060576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216156120d05773ffffffffffffffffffffffffffffffffffffffff8281166000908152600a6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169183169190911790555b73ffffffffffffffffffffffffffffffffffffffff8116156121405773ffffffffffffffffffffffffffffffffffffffff8181166000908152600b6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169184169190911790555b73ffffffffffffffffffffffffffffffffffffffff811673cccccccccccccccccccccccccccccccccccccccc14156121b357600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790555b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561223b5750506001547e01000000000000000000000000000000000000000000000000000000000000900461ffff1690565b600061224683613814565b90508061227f576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61228881613738565b949350505050565b60005460ff16156122fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610d53565b600054610100900460ff161561233f576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff1633146123c4576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6123ce838361410d565b6123f073ffffffffffffffffffffffffffffffffffffffff8316858584613c07565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555050565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa1580156124a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124cc91906153e6565b612502576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113c561453b565b6000805460ff1615612578576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610d53565b600054610100900460ff16156125ba576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff16331461263f576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166321d18456857f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061270d919061530e565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168152600481019290925260248201526044016020604051808303816000875af1158015612768573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061278c919061550a565b6040517fbf28068b0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff80831660248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063bf28068b90604401600060405180830381600087803b15801561282157600080fd5b505af1158015612835573d6000803e3d6000fd5b5050505061284383826145fb565b73ffffffffffffffffffffffffffffffffffffffff811660009081526008602052604081206001905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690559392505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633146128ea576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805461ffff92831668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9484166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff96851664010000000002969096167fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff97851662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000090931694909816939093171794909416949094179190911716919091179055565b6000805460ff1615612a34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610d53565b600054610100900460ff1615612a76576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff163314612afb576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806000612b0987613d0d565b92509250925084612b2357612b1e8684615403565b612b2d565b612b2d8684615356565b935060008515612c855769021e19e0c9bab24000008510612b9657612b5683603689901c61536e565b612b64603686901c8461536e565b612b6e9190615356565b603686901c612b7d858561536e565b612b87919061536e565b612b9191906153ab565b612bd3565b612ba0838861536e565b612baa858461536e565b612bb49190615356565b85612bbf858561536e565b612bc9919061536e565b612bd391906153ab565b6040517fbf28068b0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff8a811660248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063bf28068b90604401600060405180830381600087803b158015612c6857600080fd5b505af1158015612c7c573d6000803e3d6000fd5b50505050612f20565b60008484612c93858361536e565b612c9d91906153ab565b612ca79190615403565b60015490915060009061271090612cc29061ffff168461536e565b612ccc91906153ab565b905073ffffffffffffffffffffffffffffffffffffffff8a1663d1660f997f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000084612d37878f615356565b612d419190615356565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b158015612db557600080fd5b505af1158015612dc9573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ca9505e4838b612e159190615356565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815260048101919091526024810184905260006044820152606401600060405180830381600087803b158015612e7457600080fd5b505af1158015612e88573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ef7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f1b919061530e565b925050505b6040517f16128211000000000000000000000000000000000000000000000000000000008152600481018690526024810182905273ffffffffffffffffffffffffffffffffffffffff891690631612821190604401600060405180830381600087803b158015612f8f57600080fd5b505af1158015612fa3573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055509498975050505050505050565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561302d57506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b15613064576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff16156130a6576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790556130db816141bd565b50600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b60035473ffffffffffffffffffffffffffffffffffffffff163314613157576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517ff62005acebe9b616aefb5f248b48f5e89f28437b27d1eebc0b2d911209f297af90600090a250565b60035473ffffffffffffffffffffffffffffffffffffffff163314613217576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600755565b6000613227826146ce565b92915050565b60035473ffffffffffffffffffffffffffffffffffffffff16331461327e576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613325576001805461ffff83167e01000000000000000000000000000000000000000000000000000000000000027dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790555050565b600061333083613814565b905080613369576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000908152600460205260409020805473ffffffffffffffffffffffffffffffffffffffff1675ffff000000000000000000000000000000000000000060a084901b161790555050565b60008060006133c184613d0d565b9250925092509193909250565b6005546060908067ffffffffffffffff8111156133ed576133ed614f8c565b604051908082528060200260200182016040528015613416578160200160208202803683370190505b50915060005b8181101561348b5761342d81610c99565b5083828151811061344057613440615527565b602002602001018173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525050808061348390615556565b91505061341c565b505090565b60035473ffffffffffffffffffffffffffffffffffffffff1633146134e1576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112a281614739565b60035473ffffffffffffffffffffffffffffffffffffffff16331461353b576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805460ff90921662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff909216919091179055565b60005460ff16156135e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610d53565b600054610100900460ff1615613624576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff1633146136a9576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006136b4836137b0565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260026020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055905061370b82826145fb565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b60008082600114156137965750506001547f0000000000000000000000000000000000000000000000000000000000000000927e0100000000000000000000000000000000000000000000000000000000000090910461ffff169150565b50506000908152600460205260409020549060a082901c90565b73ffffffffffffffffffffffffffffffffffffffff808216600090815260026020526040902054168061380f576040517fb5ba4c4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146138945773ffffffffffffffffffffffffffffffffffffffff8216600090815260066020526040902054613227565b600192915050565b60006138a782613814565b73ffffffffffffffffffffffffffffffffffffffff909316600090815260086020526040902080549319939093169092555050565b80801561393457507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b15613a96576040517fd1660f9900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301526044820184905286169063d1660f9990606401600060405180830381600087803b1580156139d157600080fd5b505af11580156139e5573d6000803e3d6000fd5b50506040517f5869dba800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690527f0000000000000000000000000000000000000000000000000000000000000000169250635869dba89150604401600060405180830381600087803b158015613a7957600080fd5b505af1158015613a8d573d6000803e3d6000fd5b50505050610bba565b6040517fd1660f9900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301526044820184905286169063d1660f9990606401600060405180830381600087803b158015613b0e57600080fd5b505af1158015613b22573d6000803e3d6000fd5b505050505050505050565b60025b818111610bba5781811615613bff576000613b4a82613738565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529192506000918316906370a0823190602401602060405180830381865afa158015613bbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613be1919061530e565b90506002811115613bfc57613bfc87838860018503896138dc565b50505b60011b613b30565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052610ce390859061482d565b73ffffffffffffffffffffffffffffffffffffffff811660009081526008602052604081205490613ccc82614939565b60005490915062010000900460ff16811115613d08576000613ced836146ce565b613cf8906001615356565b9050610ce3848484600085614972565b505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff16631afbb7a46040518163ffffffff1660e01b8152600401602060405180830381865afa158015613d5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d81919061530e565b92508373ffffffffffffffffffffffffffffffffffffffff166317d11a156040518163ffffffff1660e01b8152600401602060405180830381865afa158015613dce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613df2919061530e565b91507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e83919061530e565b929491935050565b60005460ff16613ef7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610d53565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6040805173ffffffffffffffffffffffffffffffffffffffff8681166024830152604480830186905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b30000000000000000000000000000000000000000000000000000000017905291517f1cff79cd000000000000000000000000000000000000000000000000000000008152600092861691631cff79cd9161402d918a9160040161546d565b6000604051808303816000875af192505050801561408b57506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052614088919081019061549c565b60015b614094576140c8565b805115806140b75750808060200190518101906140b191906153e6565b15156001145b156140c6576001915050614104565b505b8115614100576040517f76e3e29c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060005b95945050505050565b600061411882613814565b905080158061412a5750600754811615155b15614161576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83166000908152600860205260409020548116613d085773ffffffffffffffffffffffffffffffffffffffff83166000908152600860205260409020805482179055505050565b60015473ffffffffffffffffffffffffffffffffffffffff8281166000908152600860205260408120546a010000000000000000000090930490911691908080614206866112a5565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526127108202600482015273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350908716915063f9a6503090604401602060405180830381865afa1580156142a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142c5919061530e565b92506142d0846146ce565b6001019150506000806000805b848110156145085780156142f65760018186031b6142f9565b60015b9350868416156145005760008061430f86613738565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8e811660048301529294509092506000918416906370a0823190602401602060405180830381865afa158015614384573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143a8919061530e565b905060018111156144f3576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff848116602483015261ffff841691908d169063f9a6503090604401602060405180830381865afa15801561442d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614451919061530e565b61445b919061536e565b6144659087615356565b95508886106144ee5760006144798b614939565b60005490915062010000900460ff168111156144b0576144ab8d8c83600189156144a557898e03614972565b8d614972565b6144df565b85156144df5773ffffffffffffffffffffffffffffffffffffffff8d1660009081526008602052604090208b90555b50505050505050505050505050565b6144fc565b98861898600194505b5050505b6001016142dd565b506040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005460ff16156145a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610d53565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613f423390565b73ffffffffffffffffffffffffffffffffffffffff82161580614644575073ffffffffffffffffffffffffffffffffffffffff8281166000908152600260205260409020541615155b1561467b576040517f9e59609e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff918216600090815260026020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001691909216179055565b600081600114156146e157506000919050565b61010060015b60016146f38284615356565b901c92506001831b8481161580159061470e5750600185851c145b156147195750614732565b8481106147285783925061472c565b8391505b506146e7565b5050919050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526006602052604090205415614796576040517f2e5a5c7700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610100600554106147d3576040517f1cbbe18500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005805473ffffffffffffffffffffffffffffffffffffffff83166000818152600660209081526040808320600190951b948590558483526004909152812091909155825491929061482483615556565b91905055505050565b600061488f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16614ae09092919063ffffffff16565b805190915015613d0857808060200190518101906148ad91906153e6565b613d08576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610d53565b60008060005b610100811015614732576001811b91508382161561495e578260010192505b83821061496a57614732565b60010161493f565b815b81811015614aad576001811b85811615614aa457600061499382613738565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529192506000918316906370a0823190602401602060405180830381865afa158015614a06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a2a919061530e565b905060018111614aa157600054978318977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9097019660ff62010000909104168711614aa15750505073ffffffffffffffffffffffffffffffffffffffff8616600090815260086020526040902085905550610bba565b50505b50600101614974565b506040517f53275fcb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060614aef8484600085614af9565b90505b9392505050565b606082471015614b8b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610d53565b843b614bf3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610d53565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051614c1c919061558f565b60006040518083038185875af1925050503d8060008114614c59576040519150601f19603f3d011682016040523d82523d6000602084013e614c5e565b606091505b5091509150614c6e828286614c79565b979650505050505050565b60608315614c88575081614af2565b825115614c985782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d53919061516b565b73ffffffffffffffffffffffffffffffffffffffff811681146112a257600080fd5b600060208284031215614d0057600080fd5b8135614af281614ccc565b60008060408385031215614d1e57600080fd5b8235614d2981614ccc565b91506020830135614d3981614ccc565b809150509250929050565b80151581146112a257600080fd5b600080600080600060a08688031215614d6a57600080fd5b8535614d7581614ccc565b94506020860135614d8581614ccc565b93506040860135614d9581614ccc565b9250606086013591506080860135614dac81614d44565b809150509295509295909350565b600060208284031215614dcc57600080fd5b5035919050565b80356003811061380f57600080fd5b60008060008060808587031215614df857600080fd5b84359350614e0860208601614dd3565b93969395505050506040820135916060013590565b60008060008060808587031215614e3357600080fd5b8435614e3e81614ccc565b93506020850135614e4e81614ccc565b92506040850135614e5e81614d44565b9396929550929360600135925050565b600080600080600080600060e0888a031215614e8957600080fd5b8735614e9481614ccc565b9650614ea260208901614dd3565b9550604088013594506060880135614eb981614ccc565b93506080880135614ec981614ccc565b925060a0880135915060c0880135614ee081614d44565b8091505092959891949750929550565b60008060008060808587031215614f0657600080fd5b8435614f1181614ccc565b93506020850135614f2181614ccc565b92506040850135614e5e81614ccc565b600080600080600060a08688031215614f4957600080fd5b8535614f5481614ccc565b94506020860135614f6481614ccc565b93506040860135614f7481614ccc565b94979396509394606081013594506080013592915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561500257615002614f8c565b604052919050565b600067ffffffffffffffff82111561502457615024614f8c565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60008060006060848603121561506557600080fd5b833561507081614ccc565b9250602084013561508081614ccc565b9150604084013567ffffffffffffffff81111561509c57600080fd5b8401601f810186136150ad57600080fd5b80356150c06150bb8261500a565b614fbb565b8181528760208385010111156150d557600080fd5b816020840160208301376000602083830101528093505050509250925092565b60005b838110156151105781810151838201526020016150f8565b83811115610ce35750506000910152565b600081518084526151398160208601602086016150f5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000614af26020830184615121565b6000806040838503121561519157600080fd5b823591506020830135614d3981614ccc565b803561ffff8116811461380f57600080fd5b600080600080600060a086880312156151cd57600080fd5b6151d6866151a3565b94506151e4602087016151a3565b93506151f2604087016151a3565b9250615200606087016151a3565b915061520e608087016151a3565b90509295509295909350565b60008060006060848603121561522f57600080fd5b833561523a81614ccc565b925060208401359150604084013561525181614d44565b809150509250925092565b6000806040838503121561526f57600080fd5b823561527a81614ccc565b9150615288602084016151a3565b90509250929050565b6020808252825182820181905260009190848201906040850190845b818110156152df57835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016152ad565b50909695505050505050565b6000602082840312156152fd57600080fd5b813560ff81168114614af257600080fd5b60006020828403121561532057600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561536957615369615327565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156153a6576153a6615327565b500290565b6000826153e1577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000602082840312156153f857600080fd5b8151614af281614d44565b60008282101561541557615415615327565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6000806040838503121561545c57600080fd5b505080516020909101519092909150565b73ffffffffffffffffffffffffffffffffffffffff83168152604060208201526000614aef6040830184615121565b6000602082840312156154ae57600080fd5b815167ffffffffffffffff8111156154c557600080fd5b8201601f810184136154d657600080fd5b80516154e46150bb8261500a565b8181528560208385010111156154f957600080fd5b6141048260208301602086016150f5565b60006020828403121561551c57600080fd5b8151614af281614ccc565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561558857615588615327565b5060010190565b600082516155a18184602087016150f5565b919091019291505056fea26469706673582212209a61b2b1203f2f5e63c5e3bdfef5184c4cbbb88b745f884592632c989b91297064736f6c634300080a00339c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c860a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a003360a060405234801561001057600080fd5b506040516106ca3803806106ca83398101604081905261002f9161006c565b60009190915560ff166080526001805460506001600160501b031991821681179092556004805490911690911790554260028190556003556100a2565b6000806040838503121561007f57600080fd5b82519150602083015160ff8116811461009757600080fd5b809150509250929050565b60805161060e6100bc600039600060d3015261060e6000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80639a6fc8f511610081578063d62ada111161005b578063d62ada11146102dc578063f7a30806146102f4578063feaf968c1461030757600080fd5b80639a6fc8f5146101cd578063bd18ad531461023a578063cd653afc1461024d57600080fd5b806354fd4d50116100b257806354fd4d501461012d57806367e8d83d1461013c5780637284e4161461018e57600080fd5b8063313ce567146100ce5780633fd0875f1461010c575b600080fd5b6100f57f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020015b60405180910390f35b6004546a0100000000000000000000900460ff166040516101039190610441565b60405160018152602001610103565b61018c61014a366004610482565b600480549115156c01000000000000000000000000027fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff909216919091179055565b005b604080518082018252600c81527f7072696365206f7261636c6500000000000000000000000000000000000000006020820152905161010391906104ab565b6102036101db36600461053d565b60015460005460025460035460045469ffffffffffffffffffff948516941691939590929450565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610103565b61018c610248366004610558565b61030f565b61018c61025b366004610579565b6001805469ffffffffffffffffffff9586167fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090911617905560029290925560035560048054919092167fffffffffffffffffffffffffffffffffffffffff00ff00000000000000000000909116176b020000000000000000000000179055565b6102e461035f565b6040519015158152602001610103565b61018c6103023660046105bf565b600055565b610203610385565b600480548291907fffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff166b01000000000000000000000083600281111561035757610357610412565b021790555050565b600454600090610380906b010000000000000000000000900460ff166103d6565b905090565b60008060008060006004600c9054906101000a900460ff16156103a757600080fd5b505060015460005460025460035460045469ffffffffffffffffffff9485169893975091955093509190911690565b600060028260028111156103ec576103ec610412565b14156103f757600080fd5b600182600281111561040b5761040b610412565b1492915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016006831061047c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561049457600080fd5b813580151581146104a457600080fd5b9392505050565b600060208083528351808285015260005b818110156104d8578581018301518582016040015282016104bc565b818111156104ea576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803569ffffffffffffffffffff8116811461053857600080fd5b919050565b60006020828403121561054f57600080fd5b6104a48261051e565b60006020828403121561056a57600080fd5b8135600381106104a457600080fd5b6000806000806080858703121561058f57600080fd5b6105988561051e565b935060208501359250604085013591506105b46060860161051e565b905092959194509250565b6000602082840312156105d157600080fd5b503591905056fea264697066735822122014874f7a973b86501c4c1a8be32490fe902c8f088ee234d25f9b2497e19f9e5264736f6c634300080a0033637265646974436f6e666967757261746f72206973206e6f742073657420636f72726563746c794c49515549444154494f4e20574954482050524f4649542026205a45524f2052454d41494e494e472046554e44534c495155494441544f522068617320696e636f727265637420696e697469616c2062616c616e6365496e636f7272656374206c69717569646174696f6e5072656d69756d45787069726564496e636f7272656374206e756d626572206f6620746f6b656e7320656e61626c656463756d756c617469766544726f70417446617374436865636b206973206e6f742030496e636f727265637420746f6b656e206d61736b20666f7220756e6465726c79696e6720746f6b656e556e6976657273616c2061646170746572206973206e6f7420636f72726563746c7920736574496e636f727265637420616d6f756e742077657265207061696420746f206c7169756461696461746f724c49515549444154494f4e20574954482050524f46495420262052454d41494e494e472046554e4453696e636f7272656374206c7420666f7220756e6465726c79696e6720746f6b656e637265646974436f6e666967757261746f7220697320616c7265616479207468652073616d65496e636f7272656374204441495f4143434f554e545f414d4f554e5420696e20506f6f6c2063616c6c637265646974466163616465206973206e6f742073657420636f72726563746c79496e636f72726563742062616c616e6365206f6e20637265646974206163636f756e744c49515549444154494f4e204f46204558504952454420574954482050524f4649542026205a45524f2052454d41494e494e472046554e4453496e636f72726563637420637265646974206163636f756e74206164647265737361646170746572546f436f6e747261637428414441505445522920697320616c7265616479207468652073616d65496e636f727265637420637265646974206163636f756e7420696e206c656e644372656469744163636f756e742063616c6c6372656469744661636164652820697320616c7265616479207468652073616d65496e636f72726563742072657475726e6564206e6577426f72726f776564416d6f756e74637265646974206163636f756e74206973206e6f7420696e206163636f756e74466163746f7279207461696c21437265646974206163636f756e74206973206e6f74206173736f63696174656420776974682075736572496e636f727265637420616d6f756e742077657265207061696420746f206c697169756461746f7220667269656e6420616464726573736372656469744163636f756e742068617320696e636f727265637420696e697469616c2062616c616e6365555345522067657420696e636f727265637420616d6f756e742061732072656d616e696e672066756e6473636f6c6c61746572616c546f6b656e73436f756e742077616e7420696e6372656d656e746564637265646974206163636f756e7420697320616c726561647920696e207461696c21496e636f727265637420626f72726f77656420616d6f756e742073657420696e2043414c49515549444154494f4e204f46204558504952454420574954482050524f46495420262052454d41494e494e472046554e445363756d756c617469766544726f70417446617374436865636b20776173206368616e67656461646170746572546f436f6e7472616374206973206e6f742073657420636f72726563746c796578706563746564466f726269644d61736b20697320616c7265616479207468652073616d65556e6465726c79696e67206173736574732077657265207472616e7366666572656421a2646970667358221220f83f3deb62d439fd2dfc2a3627de72bf2be34b41934d293c513e493f7206733564736f6c634300080a0033"; - -type CreditManagerTestConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: CreditManagerTestConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class CreditManagerTest__factory extends ContractFactory { - constructor(...args: CreditManagerTestConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): CreditManagerTest { - return super.attach(address) as CreditManagerTest; - } - override connect(signer: Signer): CreditManagerTest__factory { - return super.connect(signer) as CreditManagerTest__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): CreditManagerTestInterface { - return new utils.Interface(_abi) as CreditManagerTestInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): CreditManagerTest { - return new Contract(address, _abi, signerOrProvider) as CreditManagerTest; - } -} diff --git a/src/types/factories/contracts/test/credit/CreditManager.t.sol/index.ts b/src/types/factories/contracts/test/credit/CreditManager.t.sol/index.ts deleted file mode 100644 index 7abcf74d..00000000 --- a/src/types/factories/contracts/test/credit/CreditManager.t.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { CreditManagerTest__factory } from "./CreditManagerTest__factory"; diff --git a/src/types/factories/contracts/test/credit/index.ts b/src/types/factories/contracts/test/credit/index.ts deleted file mode 100644 index 58e7ef08..00000000 --- a/src/types/factories/contracts/test/credit/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export * as creditConfiguratorTSol from "./CreditConfigurator.t.sol"; -export * as creditFacadeTSol from "./CreditFacade.t.sol"; -export * as creditManagerTSol from "./CreditManager.t.sol"; diff --git a/src/types/factories/contracts/test/index.ts b/src/types/factories/contracts/test/index.ts index 33791aa2..4d2ec5b4 100644 --- a/src/types/factories/contracts/test/index.ts +++ b/src/types/factories/contracts/test/index.ts @@ -1,17 +1,5 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ -export * as playgroundTSol from "./Playground.t.sol"; -export * as adapters from "./adapters"; -export * as core from "./core"; -export * as credit from "./credit"; -export * as lib from "./lib"; -export * as mainnet from "./mainnet"; export * as mocks from "./mocks"; -export * as oracles from "./oracles"; -export * as pathfinder from "./pathfinder"; -export * as pool from "./pool"; export * as sigp from "./sigp"; -export * as suites from "./suites"; -export * as support from "./support"; -export * as tokens from "./tokens"; diff --git a/src/types/factories/contracts/test/lib/cheatCodes.sol/CheatCodes__factory.ts b/src/types/factories/contracts/test/lib/cheatCodes.sol/CheatCodes__factory.ts deleted file mode 100644 index b456c5e9..00000000 --- a/src/types/factories/contracts/test/lib/cheatCodes.sol/CheatCodes__factory.ts +++ /dev/null @@ -1,472 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import { Contract, Signer, utils } from "ethers"; -import type { Provider } from "@ethersproject/providers"; -import type { - CheatCodes, - CheatCodesInterface, -} from "../../../../../contracts/test/lib/cheatCodes.sol/CheatCodes"; - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "accesses", - outputs: [ - { - internalType: "bytes32[]", - name: "reads", - type: "bytes32[]", - }, - { - internalType: "bytes32[]", - name: "writes", - type: "bytes32[]", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "privateKey", - type: "uint256", - }, - ], - name: "addr", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - name: "assume", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "clearMockedCalls", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "who", - type: "address", - }, - { - internalType: "uint256", - name: "newBalance", - type: "uint256", - }, - ], - name: "deal", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "who", - type: "address", - }, - { - internalType: "bytes", - name: "code", - type: "bytes", - }, - ], - name: "etch", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "expectCall", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - { - internalType: "bool", - name: "", - type: "bool", - }, - { - internalType: "bool", - name: "", - type: "bool", - }, - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - name: "expectEmit", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes4", - name: "", - type: "bytes4", - }, - ], - name: "expectRevert", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "expectRevert", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "fee", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "string[]", - name: "", - type: "string[]", - }, - ], - name: "ffi", - outputs: [ - { - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - name: "getCode", - outputs: [ - { - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "addr", - type: "address", - }, - { - internalType: "string", - name: "label", - type: "string", - }, - ], - name: "label", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "bytes32", - name: "slot", - type: "bytes32", - }, - ], - name: "load", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "bytes", - name: "", - type: "bytes", - }, - { - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "mockCall", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "prank", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "prank", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "record", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "roll", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "privateKey", - type: "uint256", - }, - { - internalType: "bytes32", - name: "digest", - type: "bytes32", - }, - ], - name: "sign", - outputs: [ - { - internalType: "uint8", - name: "v", - type: "uint8", - }, - { - internalType: "bytes32", - name: "r", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "s", - type: "bytes32", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "startPrank", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "startPrank", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "stopPrank", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "bytes32", - name: "slot", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "value", - type: "bytes32", - }, - ], - name: "store", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "warp", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, -]; - -export class CheatCodes__factory { - static readonly abi = _abi; - static createInterface(): CheatCodesInterface { - return new utils.Interface(_abi) as CheatCodesInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): CheatCodes { - return new Contract(address, _abi, signerOrProvider) as CheatCodes; - } -} diff --git a/src/types/factories/contracts/test/lib/cheatCodes.sol/index.ts b/src/types/factories/contracts/test/lib/cheatCodes.sol/index.ts deleted file mode 100644 index 74450a41..00000000 --- a/src/types/factories/contracts/test/lib/cheatCodes.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { CheatCodes__factory } from "./CheatCodes__factory"; diff --git a/src/types/factories/contracts/test/lib/constants.sol/Roles__factory.ts b/src/types/factories/contracts/test/lib/constants.sol/Roles__factory.ts deleted file mode 100644 index fed1e336..00000000 --- a/src/types/factories/contracts/test/lib/constants.sol/Roles__factory.ts +++ /dev/null @@ -1,358 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - Roles, - RolesInterface, -} from "../../../../../contracts/test/lib/constants.sol/Roles"; - -const _abi = [ - { - inputs: [], - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "", - type: "address", - }, - ], - name: "log_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "log_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - name: "log_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "int256", - name: "", - type: "int256", - }, - ], - name: "log_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "address", - name: "val", - type: "address", - }, - ], - name: "log_named_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes", - name: "val", - type: "bytes", - }, - ], - name: "log_named_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes32", - name: "val", - type: "bytes32", - }, - ], - name: "log_named_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - ], - name: "log_named_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "string", - name: "val", - type: "string", - }, - ], - name: "log_named_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - ], - name: "log_named_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "log_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "logs", - type: "event", - }, - { - inputs: [], - name: "IS_TEST", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "failed", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, -]; - -const _bytecode = - "0x60806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d000117905534801561003957600080fd5b50600054604080516318caf8e360e31b815273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660048083019190915260248201929092526044810191909152632aa9a2a960e11b6064820152620100009091046001600160a01b03169063c657c71890608401600060405180830381600087803b1580156100ba57600080fd5b505af11580156100ce573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b81527390f79bf6eb2c4f870365e785982e1f101e93b90660048201526024810191909152600660448201526511949251539160d21b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561014f57600080fd5b505af1158015610163573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b8152733c44cdddb6a900fa2b585dd299e03d12fa4293bc60048201526024810191909152600a6044820152692624a8aaa4a220aa27a960b11b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b1580156101e857600080fd5b505af11580156101fc573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b815273c4375b7de8af5a38a93548eb8453a498222c4ff260048201526024810191909152600c60448201526b44554d425f4144445245535360a01b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561028357600080fd5b505af1158015610297573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b8152739965507d1a55bcc2695c58ba16fb37d819b0a4dc60048201526024810191909152600760448201526620a220a82a22a960c91b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561031957600080fd5b505af115801561032d573d6000803e3d6000fd5b505050506102a6806103406000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063ba414fa61461003b578063fa7626d414610057575b600080fd5b610043610064565b604051901515815260200160405180910390f35b6000546100439060ff1681565b60008054610100900460ff16156100845750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156101bf5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610129917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016101ff565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526101619161023b565b6000604051808303816000865af19150503d806000811461019e576040519150601f19603f3d011682016040523d82523d6000602084013e6101a3565b606091505b50915050808060200190518101906101bb919061024e565b9150505b919050565b6000815160005b818110156101e557602081850181015186830152016101cb565b818111156101f4576000828601525b509290920192915050565b7fffffffff0000000000000000000000000000000000000000000000000000000083168152600061023360048301846101c4565b949350505050565b600061024782846101c4565b9392505050565b60006020828403121561026057600080fd5b8151801515811461024757600080fdfea2646970667358221220293f55a0ef7b60c31a89dbc50e3339c80a8fdb1f9567614b200e97598226671f64736f6c634300080a0033"; - -type RolesConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: RolesConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class Roles__factory extends ContractFactory { - constructor(...args: RolesConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): Roles { - return super.attach(address) as Roles; - } - override connect(signer: Signer): Roles__factory { - return super.connect(signer) as Roles__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): RolesInterface { - return new utils.Interface(_abi) as RolesInterface; - } - static connect(address: string, signerOrProvider: Signer | Provider): Roles { - return new Contract(address, _abi, signerOrProvider) as Roles; - } -} diff --git a/src/types/factories/contracts/test/lib/constants.sol/index.ts b/src/types/factories/contracts/test/lib/constants.sol/index.ts deleted file mode 100644 index d116f913..00000000 --- a/src/types/factories/contracts/test/lib/constants.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { Roles__factory } from "./Roles__factory"; diff --git a/src/types/factories/contracts/test/lib/index.ts b/src/types/factories/contracts/test/lib/index.ts deleted file mode 100644 index de80f068..00000000 --- a/src/types/factories/contracts/test/lib/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export * as cheatCodesSol from "./cheatCodes.sol"; -export * as constantsSol from "./constants.sol"; -export * as testSol from "./test.sol"; diff --git a/src/types/factories/contracts/test/lib/test.sol/DSTest__factory.ts b/src/types/factories/contracts/test/lib/test.sol/DSTest__factory.ts deleted file mode 100644 index e386bcf9..00000000 --- a/src/types/factories/contracts/test/lib/test.sol/DSTest__factory.ts +++ /dev/null @@ -1,353 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - DSTest, - DSTestInterface, -} from "../../../../../contracts/test/lib/test.sol/DSTest"; - -const _abi = [ - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "", - type: "address", - }, - ], - name: "log_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "log_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - name: "log_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "int256", - name: "", - type: "int256", - }, - ], - name: "log_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "address", - name: "val", - type: "address", - }, - ], - name: "log_named_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes", - name: "val", - type: "bytes", - }, - ], - name: "log_named_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes32", - name: "val", - type: "bytes32", - }, - ], - name: "log_named_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - ], - name: "log_named_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "string", - name: "val", - type: "string", - }, - ], - name: "log_named_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - ], - name: "log_named_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "log_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "logs", - type: "event", - }, - { - inputs: [], - name: "IS_TEST", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "failed", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, -]; - -const _bytecode = - "0x60806040526000805460ff1916600117905534801561001d57600080fd5b506102a68061002d6000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063ba414fa61461003b578063fa7626d414610057575b600080fd5b610043610064565b604051901515815260200160405180910390f35b6000546100439060ff1681565b60008054610100900460ff16156100845750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156101bf5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610129917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016101ff565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526101619161023b565b6000604051808303816000865af19150503d806000811461019e576040519150601f19603f3d011682016040523d82523d6000602084013e6101a3565b606091505b50915050808060200190518101906101bb919061024e565b9150505b919050565b6000815160005b818110156101e557602081850181015186830152016101cb565b818111156101f4576000828601525b509290920192915050565b7fffffffff0000000000000000000000000000000000000000000000000000000083168152600061023360048301846101c4565b949350505050565b600061024782846101c4565b9392505050565b60006020828403121561026057600080fd5b8151801515811461024757600080fdfea26469706673582212207353546550454dd401e5c0e25422332c17a484293d8f4c346e47609550280e6464736f6c634300080a0033"; - -type DSTestConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: DSTestConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class DSTest__factory extends ContractFactory { - constructor(...args: DSTestConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): DSTest { - return super.attach(address) as DSTest; - } - override connect(signer: Signer): DSTest__factory { - return super.connect(signer) as DSTest__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): DSTestInterface { - return new utils.Interface(_abi) as DSTestInterface; - } - static connect(address: string, signerOrProvider: Signer | Provider): DSTest { - return new Contract(address, _abi, signerOrProvider) as DSTest; - } -} diff --git a/src/types/factories/contracts/test/lib/test.sol/index.ts b/src/types/factories/contracts/test/lib/test.sol/index.ts deleted file mode 100644 index f8816feb..00000000 --- a/src/types/factories/contracts/test/lib/test.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { DSTest__factory } from "./DSTest__factory"; diff --git a/src/types/factories/contracts/test/mainnet/MainnetTokens.sol/MainnetTokensTestSuite__factory.ts b/src/types/factories/contracts/test/mainnet/MainnetTokens.sol/MainnetTokensTestSuite__factory.ts deleted file mode 100644 index ff3b56f8..00000000 --- a/src/types/factories/contracts/test/mainnet/MainnetTokens.sol/MainnetTokensTestSuite__factory.ts +++ /dev/null @@ -1,237 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - MainnetTokensTestSuite, - MainnetTokensTestSuiteInterface, -} from "../../../../../contracts/test/mainnet/MainnetTokens.sol/MainnetTokensTestSuite"; - -const _abi = [ - { - inputs: [], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [ - { - internalType: "enum MainnetTokens", - name: "t", - type: "uint8", - }, - { - internalType: "address", - name: "holder", - type: "address", - }, - { - internalType: "address", - name: "targetContract", - type: "address", - }, - ], - name: "allowance", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "enum MainnetTokens", - name: "t", - type: "uint8", - }, - { - internalType: "address", - name: "holder", - type: "address", - }, - { - internalType: "address", - name: "targetContract", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "approve", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "enum MainnetTokens", - name: "t", - type: "uint8", - }, - { - internalType: "address", - name: "holder", - type: "address", - }, - { - internalType: "address", - name: "targetContract", - type: "address", - }, - ], - name: "approve", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "enum MainnetTokens", - name: "t", - type: "uint8", - }, - { - internalType: "address", - name: "holder", - type: "address", - }, - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "balance", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "enum MainnetTokens", - name: "", - type: "uint8", - }, - ], - name: "tokens", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "topUpWETH", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "enum MainnetTokens", - name: "t", - type: "uint8", - }, - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "transfer", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "wethToken", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x6080604052600080546001600160a01b031916737109709ecfa91a80626ff3989d68f67f5b1dd12d17905534801561003657600080fd5b506040805160608101825260006020820181815273111111111117dc0aa78b770fa6a738034120c30293830193909352918152905b600181101561010d578181600181106100865761008661012a565b602002015160200151600260008484600181106100a5576100a561012a565b60200201515160298111156100bc576100bc610114565b60298111156100cd576100cd610114565b8152602081019190915260400160002080546001600160a01b0319166001600160a01b03929092169190911790558061010581610140565b91505061006b565b5050610169565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600060001982141561016257634e487b7160e01b600052601160045260246000fd5b5060010190565b610858806101786000396000f3fe60806040526004361061007b5760003560e01c806388f776a21161004e57806388f776a21461016a578063b00173211461018a578063b36ba208146101aa578063d051a622146101b257600080fd5b80634b57b0be146100805780636a72bde7146100d757806388327863146100f95780638856c0d614610127575b600080fd5b34801561008c57600080fd5b506001546100ad9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156100e357600080fd5b506100f76100f23660046106a0565b6101d2565b005b34801561010557600080fd5b506101196101143660046106eb565b610331565b6040519081526020016100ce565b34801561013357600080fd5b506100ad61014236600461071e565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b34801561017657600080fd5b506100f7610185366004610739565b610404565b34801561019657600080fd5b506100f76101a536600461077c565b610435565b6100f761050e565b3480156101be57600080fd5b506101196101cd366004610739565b61058c565b6000546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529091169063ca669fa790602401600060405180830381600087803b15801561023f57600080fd5b505af1158015610253573d6000803e3d6000fd5b505050506002600085602981111561026d5761026d6107b8565b602981111561027e5761027e6107b8565b8152602081019190915260409081016000205490517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490529091169063095ea7b3906044016020604051808303816000875af1158015610306573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061032a91906107e7565b5050505050565b600060026000846029811115610349576103496107b8565b602981111561035a5761035a6107b8565b8152602081019190915260409081016000205490517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152909116906370a0823190602401602060405180830381865afa1580156103d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103fd9190610809565b9392505050565b6104308383837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101d2565b505050565b6002600084602981111561044b5761044b6107b8565b602981111561045c5761045c6107b8565b8152602081019190915260409081016000205490517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490529091169063a9059cbb906044016020604051808303816000875af11580156104e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061050891906107e7565b50505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801561057857600080fd5b505af115801561032a573d6000803e3d6000fd5b6000600260008560298111156105a4576105a46107b8565b60298111156105b5576105b56107b8565b8152602081019190915260409081016000205490517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301529091169063dd62ed3e90604401602060405180830381865afa15801561063c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106609190610809565b949350505050565b8035602a811061067757600080fd5b919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461067757600080fd5b600080600080608085870312156106b657600080fd5b6106bf85610668565b93506106cd6020860161067c565b92506106db6040860161067c565b9396929550929360600135925050565b600080604083850312156106fe57600080fd5b61070783610668565b91506107156020840161067c565b90509250929050565b60006020828403121561073057600080fd5b6103fd82610668565b60008060006060848603121561074e57600080fd5b61075784610668565b92506107656020850161067c565b91506107736040850161067c565b90509250925092565b60008060006060848603121561079157600080fd5b61079a84610668565b92506107a86020850161067c565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6000602082840312156107f957600080fd5b815180151581146103fd57600080fd5b60006020828403121561081b57600080fd5b505191905056fea26469706673582212207537968a38b464e78ff4b44e67a674bbff8e71a719e90886ae16f1bb509a125a64736f6c634300080a0033"; - -type MainnetTokensTestSuiteConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: MainnetTokensTestSuiteConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class MainnetTokensTestSuite__factory extends ContractFactory { - constructor(...args: MainnetTokensTestSuiteConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): MainnetTokensTestSuite { - return super.attach(address) as MainnetTokensTestSuite; - } - override connect(signer: Signer): MainnetTokensTestSuite__factory { - return super.connect(signer) as MainnetTokensTestSuite__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): MainnetTokensTestSuiteInterface { - return new utils.Interface(_abi) as MainnetTokensTestSuiteInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): MainnetTokensTestSuite { - return new Contract( - address, - _abi, - signerOrProvider - ) as MainnetTokensTestSuite; - } -} diff --git a/src/types/factories/contracts/test/mainnet/MainnetTokens.sol/index.ts b/src/types/factories/contracts/test/mainnet/MainnetTokens.sol/index.ts deleted file mode 100644 index 157a956c..00000000 --- a/src/types/factories/contracts/test/mainnet/MainnetTokens.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { MainnetTokensTestSuite__factory } from "./MainnetTokensTestSuite__factory"; diff --git a/src/types/factories/contracts/test/mainnet/TotalValueCalculator__factory.ts b/src/types/factories/contracts/test/mainnet/TotalValueCalculator__factory.ts deleted file mode 100644 index 1aac5a45..00000000 --- a/src/types/factories/contracts/test/mainnet/TotalValueCalculator__factory.ts +++ /dev/null @@ -1,95 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - TotalValueCalculator, - TotalValueCalculatorInterface, -} from "../../../../contracts/test/mainnet/TotalValueCalculator"; - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "_creditFacade", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [ - { - internalType: "address", - name: "creditAccount", - type: "address", - }, - ], - name: "saveTotalValue", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, -]; - -const _bytecode = - "0x60a060405234801561001057600080fd5b5060405161021c38038061021c83398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b60805161019261008a6000396000608a01526101926000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c806355eb724114610030575b600080fd5b61004361003e3660046100fb565b610045565b005b6040517fc7de38a600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063c7de38a6906024016040805180830381865afa1580156100d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100f49190610138565b6000555050565b60006020828403121561010d57600080fd5b813573ffffffffffffffffffffffffffffffffffffffff8116811461013157600080fd5b9392505050565b6000806040838503121561014b57600080fd5b50508051602090910151909290915056fea26469706673582212202b76890b2e78ad5dad5924d6cd8099f674fa7a2fb7697b9d62f687f8a23bdc2464736f6c634300080a0033"; - -type TotalValueCalculatorConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: TotalValueCalculatorConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class TotalValueCalculator__factory extends ContractFactory { - constructor(...args: TotalValueCalculatorConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - _creditFacade: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - _creditFacade, - overrides || {} - ) as Promise; - } - override getDeployTransaction( - _creditFacade: string, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(_creditFacade, overrides || {}); - } - override attach(address: string): TotalValueCalculator { - return super.attach(address) as TotalValueCalculator; - } - override connect(signer: Signer): TotalValueCalculator__factory { - return super.connect(signer) as TotalValueCalculator__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): TotalValueCalculatorInterface { - return new utils.Interface(_abi) as TotalValueCalculatorInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): TotalValueCalculator { - return new Contract( - address, - _abi, - signerOrProvider - ) as TotalValueCalculator; - } -} diff --git a/src/types/factories/contracts/test/mainnet/index.ts b/src/types/factories/contracts/test/mainnet/index.ts deleted file mode 100644 index f27bba1c..00000000 --- a/src/types/factories/contracts/test/mainnet/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export * as mainnetTokensSol from "./MainnetTokens.sol"; -export { TotalValueCalculator__factory } from "./TotalValueCalculator__factory"; diff --git a/src/types/factories/contracts/test/mocks/adapters/AdapterMock__factory.ts b/src/types/factories/contracts/test/mocks/adapters/AdapterMock__factory.ts deleted file mode 100644 index e75f8a72..00000000 --- a/src/types/factories/contracts/test/mocks/adapters/AdapterMock__factory.ts +++ /dev/null @@ -1,373 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - AdapterMock, - AdapterMockInterface, -} from "../../../../../contracts/test/mocks/adapters/AdapterMock"; - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "_creditManager", - type: "address", - }, - { - internalType: "address", - name: "_targetContract", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "TokenIsNotInAllowedList", - type: "error", - }, - { - inputs: [], - name: "ZeroAddressException", - type: "error", - }, - { - stateMutability: "nonpayable", - type: "fallback", - }, - { - inputs: [], - name: "_gearboxAdapterType", - outputs: [ - { - internalType: "enum AdapterType", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "_gearboxAdapterVersion", - outputs: [ - { - internalType: "uint16", - name: "", - type: "uint16", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditFacade", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditManager", - outputs: [ - { - internalType: "contract ICreditManagerV2", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes", - name: "callData", - type: "bytes", - }, - ], - name: "execute", - outputs: [ - { - internalType: "bytes", - name: "result", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - internalType: "address", - name: "tokenIn", - type: "address", - }, - { - internalType: "address", - name: "tokenOut", - type: "address", - }, - { - internalType: "bytes", - name: "callData", - type: "bytes", - }, - { - internalType: "bool", - name: "allowTokenIn", - type: "bool", - }, - { - internalType: "bool", - name: "disableTokenIn", - type: "bool", - }, - ], - name: "executeMaxAllowanceFastCheck", - outputs: [ - { - internalType: "bytes", - name: "result", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "tokenIn", - type: "address", - }, - { - internalType: "address", - name: "tokenOut", - type: "address", - }, - { - internalType: "bytes", - name: "callData", - type: "bytes", - }, - { - internalType: "bool", - name: "allowTokenIn", - type: "bool", - }, - { - internalType: "bool", - name: "disableTokenIn", - type: "bool", - }, - ], - name: "executeMaxAllowanceFastCheck", - outputs: [ - { - internalType: "bytes", - name: "result", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "creditAccount", - type: "address", - }, - ], - name: "fullCheck", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "tokenIn", - type: "address", - }, - { - internalType: "address", - name: "tokenOut", - type: "address", - }, - { - internalType: "bytes", - name: "callData", - type: "bytes", - }, - { - internalType: "bool", - name: "allowTokenIn", - type: "bool", - }, - { - internalType: "bool", - name: "disableTokenIn", - type: "bool", - }, - ], - name: "safeExecuteFastCheck", - outputs: [ - { - internalType: "bytes", - name: "result", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - internalType: "address", - name: "tokenIn", - type: "address", - }, - { - internalType: "address", - name: "tokenOut", - type: "address", - }, - { - internalType: "bytes", - name: "callData", - type: "bytes", - }, - { - internalType: "bool", - name: "allowTokenIn", - type: "bool", - }, - { - internalType: "bool", - name: "disableTokenIn", - type: "bool", - }, - ], - name: "safeExecuteFastCheck", - outputs: [ - { - internalType: "bytes", - name: "result", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "targetContract", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x60e06040523480156200001157600080fd5b50604051620018e8380380620018e883398101604081905262000034916200011d565b81816001600160a01b03821615806200005457506001600160a01b038116155b156200007357604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038216608081905260408051632f7a188160e01b81529051632f7a1881916004808201926020929091908290030181865afa158015620000be573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e4919062000155565b6001600160a01b0390811660a0521660c052506200017a915050565b80516001600160a01b03811681146200011857600080fd5b919050565b600080604083850312156200013157600080fd5b6200013c8362000100565b91506200014c6020840162000100565b90509250929050565b6000602082840312156200016857600080fd5b620001738262000100565b9392505050565b60805160a05160c05161169062000258600039600081816102990152818161038c0152818161071c0152818161083b0152818161091501528181610d1901528181610e380152610f120152600081816101f7015281816104390152818161058701528181610b840152610f9001526000818160fa015281816102c00152818161035d015281816104a3015281816107720152818161080c0152818161096b01528181610a2c01528181610af001528181610d6f01528181610e0901528181610f4901528181611018015281816110cc015261117601526116906000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c8063b73c1cfc11610081578063cd685c2c1161005b578063cd685c2c146102e2578063ce30bbdb146102f5578063d190b78d1461030a576100c9565b8063b73c1cfc14610281578063bd90df7014610294578063c12c21c0146102bb576100c9565b806333a9edaf116100b257806333a9edaf1461023e5780633ccb153e1461025357806378aa73a414610266576100c9565b806309c5eabe146101c95780632f7a1881146101f2575b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610156573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061017a91906111fd565b90506101bc6000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061031d92505050565b506101c681610421565b50005b6101dc6101d736600461133b565b610503565b6040516101e991906113f2565b60405180910390f35b6102197f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e9565b61025161024c366004611405565b61050e565b005b6101dc610261366004611437565b610517565b61026e600181565b60405161ffff90911681526020016101e9565b6101dc61028f3660046114cc565b610532565b6102197f000000000000000000000000000000000000000000000000000000000000000081565b6102197f000000000000000000000000000000000000000000000000000000000000000081565b6101dc6102f03660046114cc565b61054b565b6102fd600081565b6040516101e99190611550565b6101dc610318366004611437565b61055a565b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815260609073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a906103b69033907f0000000000000000000000000000000000000000000000000000000000000000908790600401611591565b6000604051808303816000875af11580156103d5573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261041b91908101906115d3565b92915050565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610500576040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b1580156104e757600080fd5b505af11580156104fb573d6000803e3d6000fd5b505050505b50565b606061041b8261031d565b61050081610421565b606061052787878787878761056a565b979650505050505050565b606061054186868686866109e3565b9695505050505050565b60606105418686868686610aa7565b6060610527878787878787610b67565b60606000803373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146106d3576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301528916906370a0823190602401602060405180830381865afa158015610618573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061063c9190611641565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152919350908816906370a0823190602401602060405180830381865afa1580156106ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d09190611641565b90505b84156107cf576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156107b657600080fd5b505af11580156107ca573d6000803e3d6000fd5b505050505b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a906108659033907f0000000000000000000000000000000000000000000000000000000000000000908b90600401611591565b6000604051808303816000875af1158015610884573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108ca91908101906115d3565b925084156109c9576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d906084015b600060405180830381600087803b1580156109b057600080fd5b505af11580156109c4573d6000803e3d6000fd5b505050505b6109d7898989858589610f78565b50509695505050505050565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015260609060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015610a73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a9791906111fd565b905061052781888888888861056a565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015260609060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015610b37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5b91906111fd565b90506105278188888888885b60606000803373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610cd0576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301528916906370a0823190602401602060405180830381865afa158015610c15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c399190611641565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152919350908816906370a0823190602401602060405180830381865afa158015610ca9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ccd9190611641565b90505b8415610dcc576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015610db357600080fd5b505af1158015610dc7573d6000803e3d6000fd5b505050505b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a90610e629033907f0000000000000000000000000000000000000000000000000000000000000000908b90600401611591565b6000604051808303816000875af1158015610e81573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610ec791908101906115d3565b925084156109c9576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301528981166044830152600160648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401610996565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614611079576040517f654a9eda00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528681166024830152858116604483015260648201859052608482018490527f0000000000000000000000000000000000000000000000000000000000000000169063654a9eda9060a401600060405180830381600087803b15801561105c57600080fd5b505af1158015611070573d6000803e3d6000fd5b505050506111d3565b8015611129576040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015286811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b15801561111057600080fd5b505af1158015611124573d6000803e3d6000fd5b505050505b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015285811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156111ba57600080fd5b505af11580156111ce573d6000803e3d6000fd5b505050505b505050505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461050057600080fd5b60006020828403121561120f57600080fd5b815161121a816111db565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561129757611297611221565b604052919050565b600067ffffffffffffffff8211156112b9576112b9611221565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f8301126112f657600080fd5b81356113096113048261129f565b611250565b81815284602083860101111561131e57600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121561134d57600080fd5b813567ffffffffffffffff81111561136457600080fd5b611370848285016112e5565b949350505050565b60005b8381101561139357818101518382015260200161137b565b838111156113a2576000848401525b50505050565b600081518084526113c0816020860160208601611378565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061121a60208301846113a8565b60006020828403121561141757600080fd5b813561121a816111db565b8035801515811461143257600080fd5b919050565b60008060008060008060c0878903121561145057600080fd5b863561145b816111db565b9550602087013561146b816111db565b9450604087013561147b816111db565b9350606087013567ffffffffffffffff81111561149757600080fd5b6114a389828a016112e5565b9350506114b260808801611422565b91506114c060a08801611422565b90509295509295509295565b600080600080600060a086880312156114e457600080fd5b85356114ef816111db565b945060208601356114ff816111db565b9350604086013567ffffffffffffffff81111561151b57600080fd5b611527888289016112e5565b93505061153660608701611422565b915061154460808701611422565b90509295509295909350565b602081016011831061158b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b600073ffffffffffffffffffffffffffffffffffffffff8086168352808516602084015250606060408301526115ca60608301846113a8565b95945050505050565b6000602082840312156115e557600080fd5b815167ffffffffffffffff8111156115fc57600080fd5b8201601f8101841361160d57600080fd5b805161161b6113048261129f565b81815285602083850101111561163057600080fd5b6115ca826020830160208601611378565b60006020828403121561165357600080fd5b505191905056fea264697066735822122018e43ffef2f9cc2414c0800d27162ab8481b522ae2a3529b201f7632a0fcba6764736f6c634300080a0033"; - -type AdapterMockConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: AdapterMockConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class AdapterMock__factory extends ContractFactory { - constructor(...args: AdapterMockConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - _creditManager: string, - _targetContract: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - _creditManager, - _targetContract, - overrides || {} - ) as Promise; - } - override getDeployTransaction( - _creditManager: string, - _targetContract: string, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction( - _creditManager, - _targetContract, - overrides || {} - ); - } - override attach(address: string): AdapterMock { - return super.attach(address) as AdapterMock; - } - override connect(signer: Signer): AdapterMock__factory { - return super.connect(signer) as AdapterMock__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): AdapterMockInterface { - return new utils.Interface(_abi) as AdapterMockInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): AdapterMock { - return new Contract(address, _abi, signerOrProvider) as AdapterMock; - } -} diff --git a/src/types/factories/contracts/test/mocks/adapters/TargetContractMock__factory.ts b/src/types/factories/contracts/test/mocks/adapters/TargetContractMock__factory.ts deleted file mode 100644 index 2d9d08b7..00000000 --- a/src/types/factories/contracts/test/mocks/adapters/TargetContractMock__factory.ts +++ /dev/null @@ -1,84 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - TargetContractMock, - TargetContractMockInterface, -} from "../../../../../contracts/test/mocks/adapters/TargetContractMock"; - -const _abi = [ - { - inputs: [], - stateMutability: "nonpayable", - type: "constructor", - }, - { - stateMutability: "nonpayable", - type: "fallback", - }, - { - inputs: [], - name: "callData", - outputs: [ - { - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x608060405234801561001057600080fd5b5061029a806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80634e417a981461003a575b610037600080366100e6565b50005b610042610058565b60405161004f919061019d565b60405180910390f35b6000805461006590610210565b80601f016020809104026020016040519081016040528092919081815260200182805461009190610210565b80156100de5780601f106100b3576101008083540402835291602001916100de565b820191906000526020600020905b8154815290600101906020018083116100c157829003601f168201915b505050505081565b8280546100f290610210565b90600052602060002090601f0160209004810192826101145760008555610178565b82601f1061014b578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00823516178555610178565b82800160010185558215610178579182015b8281111561017857823582559160200191906001019061015d565b50610184929150610188565b5090565b5b808211156101845760008155600101610189565b600060208083528351808285015260005b818110156101ca578581018301518582016040015282016101ae565b818111156101dc576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b600181811c9082168061022457607f821691505b6020821081141561025e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b5091905056fea2646970667358221220ce4d98ff6e78d6e572ead23f5f0316947ad3d447e60e1efdfc3a1485144c317a64736f6c634300080a0033"; - -type TargetContractMockConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: TargetContractMockConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class TargetContractMock__factory extends ContractFactory { - constructor(...args: TargetContractMockConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): TargetContractMock { - return super.attach(address) as TargetContractMock; - } - override connect(signer: Signer): TargetContractMock__factory { - return super.connect(signer) as TargetContractMock__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): TargetContractMockInterface { - return new utils.Interface(_abi) as TargetContractMockInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): TargetContractMock { - return new Contract(address, _abi, signerOrProvider) as TargetContractMock; - } -} diff --git a/src/types/factories/contracts/test/mocks/adapters/index.ts b/src/types/factories/contracts/test/mocks/adapters/index.ts deleted file mode 100644 index dc9aaed0..00000000 --- a/src/types/factories/contracts/test/mocks/adapters/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { AdapterMock__factory } from "./AdapterMock__factory"; -export { TargetContractMock__factory } from "./TargetContractMock__factory"; diff --git a/src/types/factories/contracts/test/mocks/core/ACLTraitTest__factory.ts b/src/types/factories/contracts/test/mocks/core/ACLTraitTest__factory.ts deleted file mode 100644 index 5675230e..00000000 --- a/src/types/factories/contracts/test/mocks/core/ACLTraitTest__factory.ts +++ /dev/null @@ -1,185 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - ACLTraitTest, - ACLTraitTestInterface, -} from "../../../../../contracts/test/mocks/core/ACLTraitTest"; - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "addressProvider", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "CallerNotConfiguratorException", - type: "error", - }, - { - inputs: [], - name: "CallerNotPausableAdminException", - type: "error", - }, - { - inputs: [], - name: "CallerNotUnPausableAdminException", - type: "error", - }, - { - inputs: [], - name: "ZeroAddressException", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "Paused", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "Unpaused", - type: "event", - }, - { - inputs: [], - name: "_acl", - outputs: [ - { - internalType: "contract ACL", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "accessConfiguratorOnly", - outputs: [], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "accessWhenNotPaused", - outputs: [], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "accessWhenPaused", - outputs: [], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "pause", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "paused", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "unpause", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, -]; - -const _bytecode = - "0x60a060405234801561001057600080fd5b506040516107e53803806107e583398101604081905261002f916100d7565b6000805460ff19169055806001600160a01b03811661006157604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa15801561009f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100c391906100d7565b6001600160a01b0316608052506101079050565b6000602082840312156100e957600080fd5b81516001600160a01b038116811461010057600080fd5b9392505050565b6080516106af6101366000396000818160cc0152818161014101528181610227015261038501526106af6000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80635c975abb1161005b5780635c975abb1461009c5780638456cb59146100b75780638def0c0b146100bf578063a50cf2c8146100c757600080fd5b806319df69ae146100825780633f4ba83a1461008c57806350a472ae14610094575b600080fd5b61008a610113565b005b61008a6101f9565b61008a6102e5565b60005460ff1660405190151581526020015b60405180910390f35b61008a610357565b61008a610443565b6100ee7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100ae565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561019d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101c19190610650565b6101f7576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa158015610283573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102a79190610650565b6102dd576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101f76104af565b60005460ff16156101f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064015b60405180910390fd5b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa1580156103e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104059190610650565b61043b576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101f7610590565b60005460ff166101f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f7420706175736564000000000000000000000000604482015260640161034e565b60005460ff1661051b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f7420706175736564000000000000000000000000604482015260640161034e565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff16156105fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015260640161034e565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586105663390565b60006020828403121561066257600080fd5b8151801515811461067257600080fd5b939250505056fea264697066735822122058f0fc7882f6ae81a153219c169e419e733107c720666c1a2e1150ca9857cb7464736f6c634300080a0033"; - -type ACLTraitTestConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: ACLTraitTestConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class ACLTraitTest__factory extends ContractFactory { - constructor(...args: ACLTraitTestConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - addressProvider: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - addressProvider, - overrides || {} - ) as Promise; - } - override getDeployTransaction( - addressProvider: string, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(addressProvider, overrides || {}); - } - override attach(address: string): ACLTraitTest { - return super.attach(address) as ACLTraitTest; - } - override connect(signer: Signer): ACLTraitTest__factory { - return super.connect(signer) as ACLTraitTest__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): ACLTraitTestInterface { - return new utils.Interface(_abi) as ACLTraitTestInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): ACLTraitTest { - return new Contract(address, _abi, signerOrProvider) as ACLTraitTest; - } -} diff --git a/src/types/factories/contracts/test/mocks/core/AddressProviderACLMock__factory.ts b/src/types/factories/contracts/test/mocks/core/AddressProviderACLMock__factory.ts deleted file mode 100644 index 9fb71f9c..00000000 --- a/src/types/factories/contracts/test/mocks/core/AddressProviderACLMock__factory.ts +++ /dev/null @@ -1,153 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - AddressProviderACLMock, - AddressProviderACLMockInterface, -} from "../../../../../contracts/test/mocks/core/AddressProviderACLMock"; - -const _abi = [ - { - inputs: [], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "getACL", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "getPriceOracle", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "isConfigurator", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "priceFeeds", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "token", - type: "address", - }, - { - internalType: "address", - name: "feed", - type: "address", - }, - ], - name: "setPriceFeed", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, -]; - -const _bytecode = - "0x608060405234801561001057600080fd5b50600080546001600160a01b031990811630908117835560028054909216179055338152600160208190526040909120805460ff191690911790556102568061005a6000396000f3fe608060405234801561001057600080fd5b50600436106100675760003560e01c806376e112861161005057806376e11286146100e95780639dcb511a1461014c578063fca513a81461018257600080fd5b8063087376951461006c5780635f259aba146100b6575b600080fd5b60005461008c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6100d96100c43660046101cb565b60016020526000908152604090205460ff1681565b60405190151581526020016100ad565b61014a6100f73660046101ed565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001691909216179055565b005b61008c61015a3660046101cb565b60036020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60025461008c9073ffffffffffffffffffffffffffffffffffffffff1681565b803573ffffffffffffffffffffffffffffffffffffffff811681146101c657600080fd5b919050565b6000602082840312156101dd57600080fd5b6101e6826101a2565b9392505050565b6000806040838503121561020057600080fd5b610209836101a2565b9150610217602084016101a2565b9050925092905056fea26469706673582212204291f208ba289dc45c65523845755f7f16fafcfe35cecba679ed1b9627e274ee64736f6c634300080a0033"; - -type AddressProviderACLMockConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: AddressProviderACLMockConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class AddressProviderACLMock__factory extends ContractFactory { - constructor(...args: AddressProviderACLMockConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): AddressProviderACLMock { - return super.attach(address) as AddressProviderACLMock; - } - override connect(signer: Signer): AddressProviderACLMock__factory { - return super.connect(signer) as AddressProviderACLMock__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): AddressProviderACLMockInterface { - return new utils.Interface(_abi) as AddressProviderACLMockInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): AddressProviderACLMock { - return new Contract( - address, - _abi, - signerOrProvider - ) as AddressProviderACLMock; - } -} diff --git a/src/types/factories/contracts/test/mocks/core/index.ts b/src/types/factories/contracts/test/mocks/core/index.ts deleted file mode 100644 index c3f3d78b..00000000 --- a/src/types/factories/contracts/test/mocks/core/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { ACLTraitTest__factory } from "./ACLTraitTest__factory"; -export { AddressProviderACLMock__factory } from "./AddressProviderACLMock__factory"; diff --git a/src/types/factories/contracts/test/mocks/credit/CreditManagerInternal__factory.ts b/src/types/factories/contracts/test/mocks/credit/CreditManagerInternal__factory.ts deleted file mode 100644 index b48aa852..00000000 --- a/src/types/factories/contracts/test/mocks/credit/CreditManagerInternal__factory.ts +++ /dev/null @@ -1,1395 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - CreditManagerInternal, - CreditManagerInternalInterface, -} from "../../../../../contracts/test/mocks/credit/CreditManagerInternal"; - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "_poolService", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "AdaptersOrCreditFacadeOnlyException", - type: "error", - }, - { - inputs: [], - name: "AllowanceFailedExpcetion", - type: "error", - }, - { - inputs: [], - name: "CallerNotPausableAdminException", - type: "error", - }, - { - inputs: [], - name: "CallerNotUnPausableAdminException", - type: "error", - }, - { - inputs: [], - name: "CreditConfiguratorOnlyException", - type: "error", - }, - { - inputs: [], - name: "CreditFacadeOnlyException", - type: "error", - }, - { - inputs: [], - name: "HasNoOpenedAccountException", - type: "error", - }, - { - inputs: [], - name: "NotEnoughCollateralException", - type: "error", - }, - { - inputs: [], - name: "ReentrancyLockException", - type: "error", - }, - { - inputs: [], - name: "TargetContractNotAllowedExpcetion", - type: "error", - }, - { - inputs: [], - name: "TokenAlreadyAddedException", - type: "error", - }, - { - inputs: [], - name: "TokenNotAllowedException", - type: "error", - }, - { - inputs: [], - name: "TooMuchEnabledTokensException", - type: "error", - }, - { - inputs: [], - name: "TooMuchTokensException", - type: "error", - }, - { - inputs: [], - name: "ZeroAddressException", - type: "error", - }, - { - inputs: [], - name: "ZeroAddressOrUserAlreadyHasAccountException", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "borrower", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "target", - type: "address", - }, - ], - name: "ExecuteOrder", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newConfigurator", - type: "address", - }, - ], - name: "NewConfigurator", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "Paused", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "Unpaused", - type: "event", - }, - { - inputs: [], - name: "_accountFactory", - outputs: [ - { - internalType: "contract IAccountFactory", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "_acl", - outputs: [ - { - internalType: "contract ACL", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "adapterToContract", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "payer", - type: "address", - }, - { - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - internalType: "address", - name: "token", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "addCollateral", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "token", - type: "address", - }, - ], - name: "addToken", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "borrower", - type: "address", - }, - { - internalType: "address", - name: "targetContract", - type: "address", - }, - { - internalType: "address", - name: "token", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "approveCreditAccount", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "totalValue", - type: "uint256", - }, - { - internalType: "enum ClosureAction", - name: "closureActionType", - type: "uint8", - }, - { - internalType: "uint256", - name: "borrowedAmount", - type: "uint256", - }, - { - internalType: "uint256", - name: "borrowedAmountWithInterest", - type: "uint256", - }, - ], - name: "calcClosePayments", - outputs: [ - { - internalType: "uint256", - name: "amountToPool", - type: "uint256", - }, - { - internalType: "uint256", - name: "remainingFunds", - type: "uint256", - }, - { - internalType: "uint256", - name: "profit", - type: "uint256", - }, - { - internalType: "uint256", - name: "loss", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "totalValue", - type: "uint256", - }, - { - internalType: "enum ClosureAction", - name: "closureActionType", - type: "uint8", - }, - { - internalType: "uint256", - name: "borrowedAmount", - type: "uint256", - }, - { - internalType: "uint256", - name: "borrowedAmountWithInterest", - type: "uint256", - }, - ], - name: "calcClosePaymentsPure", - outputs: [ - { - internalType: "uint256", - name: "amountToPool", - type: "uint256", - }, - { - internalType: "uint256", - name: "remainingFunds", - type: "uint256", - }, - { - internalType: "uint256", - name: "profit", - type: "uint256", - }, - { - internalType: "uint256", - name: "loss", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "creditAccount", - type: "address", - }, - ], - name: "calcCreditAccountAccruedInterest", - outputs: [ - { - internalType: "uint256", - name: "borrowedAmount", - type: "uint256", - }, - { - internalType: "uint256", - name: "borrowedAmountWithInterest", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "adapter", - type: "address", - }, - { - internalType: "address", - name: "targetContract", - type: "address", - }, - ], - name: "changeContractAllowance", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - internalType: "address", - name: "tokenOut", - type: "address", - }, - ], - name: "checkAndEnableToken", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "creditAccount", - type: "address", - }, - ], - name: "checkAndOptimizeEnabledTokens", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "borrower", - type: "address", - }, - { - internalType: "enum ClosureAction", - name: "closureActionType", - type: "uint8", - }, - { - internalType: "uint256", - name: "totalValue", - type: "uint256", - }, - { - internalType: "address", - name: "payer", - type: "address", - }, - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "skipTokenMask", - type: "uint256", - }, - { - internalType: "bool", - name: "convertWETH", - type: "bool", - }, - ], - name: "closeCreditAccount", - outputs: [ - { - internalType: "uint256", - name: "remainingFunds", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "id", - type: "uint256", - }, - ], - name: "collateralTokens", - outputs: [ - { - internalType: "address", - name: "token", - type: "address", - }, - { - internalType: "uint16", - name: "liquidationThreshold", - type: "uint16", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "tokenMask", - type: "uint256", - }, - ], - name: "collateralTokensByMask", - outputs: [ - { - internalType: "address", - name: "token", - type: "address", - }, - { - internalType: "uint16", - name: "liquidationThreshold", - type: "uint16", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "collateralTokensCount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "collateralTokensInternal", - outputs: [ - { - internalType: "address[]", - name: "collateralTokensAddr", - type: "address[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "contractToAdapter", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "creditAccounts", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditConfigurator", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditFacade", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "cumulativeDropAtFastCheckRAY", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - internalType: "address", - name: "token", - type: "address", - }, - ], - name: "disableToken", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "enabledTokensMap", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "borrower", - type: "address", - }, - { - internalType: "address", - name: "targetContract", - type: "address", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - ], - name: "executeOrder", - outputs: [ - { - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - internalType: "address", - name: "tokenIn", - type: "address", - }, - { - internalType: "address", - name: "tokenOut", - type: "address", - }, - { - internalType: "uint256", - name: "balanceInBefore", - type: "uint256", - }, - { - internalType: "uint256", - name: "balanceOutBefore", - type: "uint256", - }, - ], - name: "fastCollateralCheck", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "fees", - outputs: [ - { - internalType: "uint16", - name: "feeInterest", - type: "uint16", - }, - { - internalType: "uint16", - name: "feeLiquidation", - type: "uint16", - }, - { - internalType: "uint16", - name: "liquidationDiscount", - type: "uint16", - }, - { - internalType: "uint16", - name: "feeLiquidationExpired", - type: "uint16", - }, - { - internalType: "uint16", - name: "liquidationDiscountExpired", - type: "uint16", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "forbiddenTokenMask", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "creditAccount", - type: "address", - }, - ], - name: "fullCollateralCheck", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "borrower", - type: "address", - }, - ], - name: "getCreditAccountOrRevert", - outputs: [ - { - internalType: "address", - name: "result", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "creditAccount", - type: "address", - }, - ], - name: "getCreditAccountParameters", - outputs: [ - { - internalType: "uint256", - name: "borrowedAmount", - type: "uint256", - }, - { - internalType: "uint256", - name: "cumulativeIndexAtOpen", - type: "uint256", - }, - { - internalType: "uint256", - name: "cumulativeIndexNow", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "mask", - type: "uint256", - }, - ], - name: "getMaxIndex", - outputs: [ - { - internalType: "uint256", - name: "index", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "slotNum", - type: "uint256", - }, - ], - name: "getSlotBytes", - outputs: [ - { - internalType: "bytes32", - name: "slotVal", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "token", - type: "address", - }, - ], - name: "liquidationThresholds", - outputs: [ - { - internalType: "uint16", - name: "lt", - type: "uint16", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "bool", - name: "increase", - type: "bool", - }, - ], - name: "manageDebt", - outputs: [ - { - internalType: "uint256", - name: "newBorrowedAmount", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "maxAllowedEnabledTokenLength", - outputs: [ - { - internalType: "uint8", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "borrowedAmount", - type: "uint256", - }, - { - internalType: "address", - name: "onBehalfOf", - type: "address", - }, - ], - name: "openCreditAccount", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "pause", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "paused", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "pool", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "poolService", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "priceOracle", - outputs: [ - { - internalType: "contract IPriceOracleV2", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - internalType: "address", - name: "token", - type: "address", - }, - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "bool", - name: "convertToETH", - type: "bool", - }, - ], - name: "safeTokenTransfer", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_creditConfigurator", - type: "address", - }, - ], - name: "setConfigurator", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - internalType: "uint16", - name: "value", - type: "uint16", - }, - ], - name: "setCumulativeDropAtFastCheck", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_forbidMask", - type: "uint256", - }, - ], - name: "setForbidMask", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "token", - type: "address", - }, - { - internalType: "uint16", - name: "liquidationThreshold", - type: "uint16", - }, - ], - name: "setLiquidationThreshold", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint8", - name: "newMaxEnabledTokens", - type: "uint8", - }, - ], - name: "setMaxEnabledTokens", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint16", - name: "_feeInterest", - type: "uint16", - }, - { - internalType: "uint16", - name: "_feeLiquidation", - type: "uint16", - }, - { - internalType: "uint16", - name: "_liquidationDiscount", - type: "uint16", - }, - { - internalType: "uint16", - name: "_feeLiquidationExpired", - type: "uint16", - }, - { - internalType: "uint16", - name: "_liquidationDiscountExpired", - type: "uint16", - }, - ], - name: "setParams", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "token", - type: "address", - }, - ], - name: "tokenMasksMap", - outputs: [ - { - internalType: "uint256", - name: "mask", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "from", - type: "address", - }, - { - internalType: "address", - name: "to", - type: "address", - }, - ], - name: "transferAccountOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "bool", - name: "convertWETH", - type: "bool", - }, - { - internalType: "uint256", - name: "enabledTokenMask", - type: "uint256", - }, - ], - name: "transferAssetsTo", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "underlying", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "universalAdapter", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "unpause", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_creditFacade", - type: "address", - }, - { - internalType: "address", - name: "_priceOracle", - type: "address", - }, - ], - name: "upgradeContracts", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "wethAddress", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "wethGateway", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x6101606040526000805462ff00001916620c00001790553480156200002357600080fd5b5060405162005c8438038062005c8483398101604081905262000046916200053a565b80806001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000086573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ac91906200053a565b6000805460ff191690556001600160a01b038116620000de57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200011d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200014391906200053a565b6001600160a01b03166080816001600160a01b031681525050506000816001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200019e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c491906200053a565b6001600160a01b03831661010081905260e081905260408051632495a59960e01b81529051929350600092632495a599916004808201926020929091908290030181865afa1580156200021b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200024191906200053a565b6001600160a01b03811660c05290506200025b8162000475565b816001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200029a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c091906200053a565b6001600160a01b0316610120816001600160a01b031681525050816001600160a01b03166377532ed96040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000319573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033f91906200053a565b6001600160a01b0316610140816001600160a01b031681525050816001600160a01b031663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000398573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003be91906200053a565b6001600001600a6101000a8154816001600160a01b0302191690836001600160a01b03160217905550816001600160a01b0316639068a8686040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000426573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044c91906200053a565b6001600160a01b031660a0525050600380546001600160a01b03191633179055506200058b9050565b6001600160a01b03811660009081526006602052604090205415620004ad57604051632e5a5c7760e01b815260040160405180910390fd5b61010060055410620004d257604051631cbbe18560e01b815260040160405180910390fd5b600580546001600160a01b0383166000818152600660209081526040808320600190951b9485905584835260049091528120919091558254919290620005188362000561565b91905055505050565b6001600160a01b03811681146200053757600080fd5b50565b6000602082840312156200054d57600080fd5b81516200055a8162000521565b9392505050565b60006000198214156200058457634e487b7160e01b600052601160045260246000fd5b5060010190565b60805160a05160c05160e0516101005161012051610140516155e1620006a3600039600081816109040152818161397e0152613a330152600081816105e001526138e601526000818161043e01528181610fda0152818161103e01528181612680015281816127db01528181612c2201528181612d0d01528181612dcf01528181612e8e0152613df6015260006106470152600081816106ca01528181610ea501528181610f3601528181610f8301528181610fb9015281816110c2015281816121bb01528181612cec015281816132800152818161374b01528181613818015261424d01526000818161095301528181611164015261264301526000818161084b01528181611307015261244c01526155e16000f3fe608060405234801561001057600080fd5b50600436106103995760003560e01c8063830aa745116101e9578063b5b12cd71161010f578063e1998cf9116100ad578063f9aa028a1161007c578063f9aa028a146109d4578063fdd57645146109f4578063fe47cde714610a2a578063ff68754314610a4a57600080fd5b8063e1998cf914610988578063e75538c71461099b578063e958b704146109ae578063f67c5bd0146109c157600080fd5b8063ced342b5116100e9578063ced342b514610926578063d48bfca71461093b578063db7ceb801461094e578063dc2b21c11461097557600080fd5b8063b5b12cd714610893578063b7ac50c6146108c1578063c5e10eef146108ff57600080fd5b80639537301811610187578063a366f49611610156578063a366f49614610833578063a50cf2c814610846578063a64bec9e1461086d578063a70bc5421461088057600080fd5b806395373018146107ab5780639af1d35a146107be5780639f5f86ae146108175780639fd12b771461082a57600080fd5b80638991b2f1116101c35780638991b2f1146107525780638fe3f93f14610772578063944ac59f1461078557806394cf073a1461079857600080fd5b8063830aa745146107125780638345f26e146107255780638456cb591461074a57600080fd5b80633f4ba83a116102ce57806355aabafd1161026c5780636ce4074a1161023b5780636ce4074a146106925780636e98e5e4146106b25780636f307dc3146106c557806378327438146106ec57600080fd5b806355aabafd14610630578063570a7af2146106425780635c975abb14610669578063654a9eda1461067f57600080fd5b80634f0e0ef3116102a85780634f0e0ef3146105db5780635063524a1461060257806351e3f1601461061557806354fd4d501461062857600080fd5b80633f4ba83a146105b7578063458936f5146105bf57806346fb371d146105c857600080fd5b806322995f5d1161033b57806329df0b931161031557806329df0b93146105355780632f7a1881146105485780633192195c1461056f5780633e8297ca1461059757600080fd5b806322995f5d146104d55780632362a2d8146104e85780632630c12f1461050957600080fd5b806311ca4fc21161037757806311ca4fc21461042657806316f0115b14610439578063172c48c7146104605780631b0c8234146104a257600080fd5b8063055ee9b51461039e5780630d8f9cee146103fe5780630d92632d14610413575b600080fd5b6103d46103ac366004614cee565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61041161040c366004614d0b565b610a80565b005b610411610421366004614d52565b610bad565b610411610434366004614d0b565b610bc1565b6103d47f000000000000000000000000000000000000000000000000000000000000000081565b61047361046e366004614dba565b610c99565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835261ffff9091166020830152016103f5565b6104b56104b0366004614de2565b610cb1565b6040805194855260208501939093529183015260608201526080016103f5565b6104116104e3366004614e1d565b610cd7565b6104fb6104f6366004614e6e565b610ce9565b6040519081526020016103f5565b6001546a0100000000000000000000900473ffffffffffffffffffffffffffffffffffffffff166103d4565b610411610543366004614cee565b611241565b6000546103d4906301000000900473ffffffffffffffffffffffffffffffffffffffff1681565b61058261057d366004614cee565b6112a5565b604080519283526020830191909152016103f5565b6104fb6105a5366004614cee565b60096020526000908152604090205481565b6104116112d9565b6104fb60055481565b6104116105d6366004614ef0565b6113c7565b6103d47f000000000000000000000000000000000000000000000000000000000000000081565b6104b5610610366004614de2565b61161e565b610411610623366004614d0b565b611783565b6104fb600281565b6104fb61063e366004614dba565b5490565b6103d47f000000000000000000000000000000000000000000000000000000000000000081565b60005460ff1660405190151581526020016103f5565b61041161068d366004614f31565b611884565b6106a56106a0366004615050565b611d3c565b6040516103f5919061516b565b6104116106c0366004614d0b565b61200f565b6103d47f000000000000000000000000000000000000000000000000000000000000000081565b6106ff6106fa366004614cee565b6121b7565b60405161ffff90911681526020016103f5565b610411610720366004614ef0565b612290565b6000546107389062010000900460ff1681565b60405160ff90911681526020016103f5565b61041161241e565b6104fb610760366004614cee565b60086020526000908152604090205481565b6103d461078036600461517e565b61250a565b6104116107933660046151b5565b612899565b6104fb6107a636600461521a565b6129c6565b6104116107b9366004614cee565b612fdb565b6001546040805161ffff808416825262010000840481166020830152640100000000840481169282019290925266010000000000008304821660608201526801000000000000000090920416608082015260a0016103f5565b610411610825366004614cee565b613106565b6104fb60075481565b610411610841366004614dba565b6131c6565b6103d47f000000000000000000000000000000000000000000000000000000000000000081565b6104fb61087b366004614dba565b61321c565b61041161088e36600461525c565b61322d565b6108a66108a1366004614cee565b6133b3565b604080519384526020840192909252908201526060016103f5565b6104116108cf36600461525c565b73ffffffffffffffffffffffffffffffffffffffff909116600090815260096020526040902061ffff9091169055565b6103d47f000000000000000000000000000000000000000000000000000000000000000081565b61092e6133ce565b6040516103f59190615291565b610411610949366004614cee565b613490565b6103d47f000000000000000000000000000000000000000000000000000000000000000081565b6104116109833660046152eb565b6134ea565b610411610996366004614d0b565b613575565b6104736109a9366004614dba565b613738565b6103d46109bc366004614cee565b6137b0565b6104fb6109cf366004614cee565b613814565b6003546103d49073ffffffffffffffffffffffffffffffffffffffff1681565b6103d4610a02366004614cee565b600b6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b600c546103d49073ffffffffffffffffffffffffffffffffffffffff1681565b6103d4610a58366004614cee565b600a6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff16158015610ad257506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b15610b09576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff1615610b4b576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055610b81828261389c565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b610bba85858585856138dc565b5050505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314610c12576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805473ffffffffffffffffffffffffffffffffffffffff9384166301000000027fffffffffffffffffff0000000000000000000000000000000000000000ffffff90911617905560018054919092166a0100000000000000000000027fffff0000000000000000000000000000000000000000ffffffffffffffffffff909116179055565b600080610ca86001841b613738565b91509150915091565b600080600080610cc38888888861161e565b93509350935093505b945094509450949050565b610ce384848484613b2d565b50505050565b6000805460ff1615610d5c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064015b60405180910390fd5b600054610100900460ff1615610d9e576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff163314610e23576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610e2e896137b0565b90506000806000806000610e41866112a5565b9094509050610e528c8e868461161e565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152939b5093985090955093506000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015610eee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f12919061530e565b9050610f1e8887615356565b610f29906001615356565b811115610f6957610f64877f00000000000000000000000000000000000000000000000000000000000000008d60018c8b870303038d6138dc565b610fb3565b610fb373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168d8960018a8d0186900301613c07565b611001877f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008960006138dc565b6040517fca9505e40000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604481018490527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ca9505e490606401600060405180830381600087803b15801561109757600080fd5b505af11580156110ab573d6000803e3d6000fd5b505050505050505060018411156110ea576110ea837f00000000000000000000000000000000000000000000000000000000000000008d8760006138dc565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604090205486191661111f84898884613b2d565b6040517f89b77b3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f000000000000000000000000000000000000000000000000000000000000000016906389b77b3e90602401600060405180830381600087803b1580156111a857600080fd5b505af11580156111bc573d6000803e3d6000fd5b50505073ffffffffffffffffffffffffffffffffffffffff909c16600090815260026020526040812080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550929a9950505050505050505050565b6000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314611299576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112a281613c9c565b50565b6000806000806112b485613d0d565b91955092509050816112c6828661536e565b6112d091906153ab565b92505050915091565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa158015611363573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061138791906153e6565b6113bd576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113c5613e8b565b565b60005460ff1615611434576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610d53565b600054610100900460ff1615611476576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100178155338152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff908116908416148015906114f757506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b801561151b5750600c5473ffffffffffffffffffffffffffffffffffffffff163314155b8061153a575073ffffffffffffffffffffffffffffffffffffffff8316155b15611571576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61157a82613814565b6115b0576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006115bb856137b0565b90506115cb838583856000613f6c565b6115ef576115de83858360006001613f6c565b506115ed838583856001613f6c565b505b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b6001546000908190819081906127109061ffff1661163c8888615403565b611646919061536e565b61165091906153ab565b61165a9086615356565b935060018760028111156116705761167061541a565b141561170a576001546000906127109061169690640100000000900461ffff168b61536e565b6116a091906153ab565b600154909150612710906116be9062010000900461ffff168b61536e565b6116c891906153ab565b6116d29086615356565b9450848111156116e95760018582030393506116ed565b8094505b8581106116fe578585039250611704565b84860391505b50610ccc565b600287600281111561171e5761171e61541a565b141561177457600154600090612710906117489068010000000000000000900461ffff168b61536e565b61175291906153ab565b600154909150612710906116be906601000000000000900461ffff168b61536e565b92979196505091860393509150565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff161580156117d557506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b1561180c576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff161561184e576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055610b81828261410d565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff161580156118d657506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b1561190d576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff161561194f576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055611985858461410d565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152600091908616906370a0823190602401602060405180830381865afa1580156119f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a19919061530e565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529192506000918616906370a0823190602401602060405180830381865afa158015611a8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aaf919061530e565b60015490915060009081906a0100000000000000000000900473ffffffffffffffffffffffffffffffffffffffff16635cecbd0e611aed8689615403565b8a611af88988615403565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152600481019390935273ffffffffffffffffffffffffffffffffffffffff918216602484015260448301528a1660648201526084016040805180830381865afa158015611b74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b989190615449565b9150915060018411611bae57611bae898961389c565b611bb7876121b7565b611bc59061ffff168261536e565b9050611bd0886121b7565b611bde9061ffff168361536e565b9150818110611bf957611bf089613c9c565b505050506115ef565b73ffffffffffffffffffffffffffffffffffffffff891660009081526009602052604081205483611c366b033b2e3c9fd0803ce80000008561536e565b611c4091906153ab565b611c56906b033b2e3c9fd0803ce8000000615403565b611c609190615356565b60015490915061271090611c8b906b033b2e3c9fd0803ce80000009062010000900461ffff1661536e565b611c9591906153ab565b8111611cd65773ffffffffffffffffffffffffffffffffffffffff8a166000908152600960205260409020819055611ccc8a613c9c565b50505050506115ef565b611cdf8a6141bd565b50505073ffffffffffffffffffffffffffffffffffffffff871660009081526009602052604090206001905550505050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b6060611d4a60005460ff1690565b15611db1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610d53565b600054610100900460ff1615611df3576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100178155338152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff908116908416141580611e68575073ffffffffffffffffffffffffffffffffffffffff8316155b15611ebe57600c5473ffffffffffffffffffffffffffffffffffffffff163314611ebe576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611ec9856137b0565b90508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167faed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab0360405160405180910390a36040517f1cff79cd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821690631cff79cd90611f79908790879060040161546d565b6000604051808303816000875af1158015611f98573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611fde919081019061549c565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905595945050505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314612060576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216156120d05773ffffffffffffffffffffffffffffffffffffffff8281166000908152600a6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169183169190911790555b73ffffffffffffffffffffffffffffffffffffffff8116156121405773ffffffffffffffffffffffffffffffffffffffff8181166000908152600b6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169184169190911790555b73ffffffffffffffffffffffffffffffffffffffff811673cccccccccccccccccccccccccccccccccccccccc14156121b357600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790555b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561223b5750506001547e01000000000000000000000000000000000000000000000000000000000000900461ffff1690565b600061224683613814565b90508061227f576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61228881613738565b949350505050565b60005460ff16156122fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610d53565b600054610100900460ff161561233f576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff1633146123c4576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6123ce838361410d565b6123f073ffffffffffffffffffffffffffffffffffffffff8316858584613c07565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555050565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa1580156124a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124cc91906153e6565b612502576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113c561453b565b6000805460ff1615612578576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610d53565b600054610100900460ff16156125ba576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff16331461263f576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166321d18456857f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061270d919061530e565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168152600481019290925260248201526044016020604051808303816000875af1158015612768573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061278c919061550a565b6040517fbf28068b0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff80831660248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063bf28068b90604401600060405180830381600087803b15801561282157600080fd5b505af1158015612835573d6000803e3d6000fd5b5050505061284383826145fb565b73ffffffffffffffffffffffffffffffffffffffff811660009081526008602052604081206001905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690559392505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633146128ea576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805461ffff92831668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9484166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff96851664010000000002969096167fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff97851662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000090931694909816939093171794909416949094179190911716919091179055565b6000805460ff1615612a34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610d53565b600054610100900460ff1615612a76576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff163314612afb576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806000612b0987613d0d565b92509250925084612b2357612b1e8684615403565b612b2d565b612b2d8684615356565b935060008515612c855769021e19e0c9bab24000008510612b9657612b5683603689901c61536e565b612b64603686901c8461536e565b612b6e9190615356565b603686901c612b7d858561536e565b612b87919061536e565b612b9191906153ab565b612bd3565b612ba0838861536e565b612baa858461536e565b612bb49190615356565b85612bbf858561536e565b612bc9919061536e565b612bd391906153ab565b6040517fbf28068b0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff8a811660248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063bf28068b90604401600060405180830381600087803b158015612c6857600080fd5b505af1158015612c7c573d6000803e3d6000fd5b50505050612f20565b60008484612c93858361536e565b612c9d91906153ab565b612ca79190615403565b60015490915060009061271090612cc29061ffff168461536e565b612ccc91906153ab565b905073ffffffffffffffffffffffffffffffffffffffff8a1663d1660f997f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000084612d37878f615356565b612d419190615356565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b158015612db557600080fd5b505af1158015612dc9573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ca9505e4838b612e159190615356565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815260048101919091526024810184905260006044820152606401600060405180830381600087803b158015612e7457600080fd5b505af1158015612e88573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ef7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f1b919061530e565b925050505b6040517f16128211000000000000000000000000000000000000000000000000000000008152600481018690526024810182905273ffffffffffffffffffffffffffffffffffffffff891690631612821190604401600060405180830381600087803b158015612f8f57600080fd5b505af1158015612fa3573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055509498975050505050505050565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561302d57506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b15613064576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff16156130a6576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790556130db816141bd565b50600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b60035473ffffffffffffffffffffffffffffffffffffffff163314613157576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517ff62005acebe9b616aefb5f248b48f5e89f28437b27d1eebc0b2d911209f297af90600090a250565b60035473ffffffffffffffffffffffffffffffffffffffff163314613217576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600755565b6000613227826146ce565b92915050565b60035473ffffffffffffffffffffffffffffffffffffffff16331461327e576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613325576001805461ffff83167e01000000000000000000000000000000000000000000000000000000000000027dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790555050565b600061333083613814565b905080613369576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000908152600460205260409020805473ffffffffffffffffffffffffffffffffffffffff1675ffff000000000000000000000000000000000000000060a084901b161790555050565b60008060006133c184613d0d565b9250925092509193909250565b6005546060908067ffffffffffffffff8111156133ed576133ed614f8c565b604051908082528060200260200182016040528015613416578160200160208202803683370190505b50915060005b8181101561348b5761342d81610c99565b5083828151811061344057613440615527565b602002602001018173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525050808061348390615556565b91505061341c565b505090565b60035473ffffffffffffffffffffffffffffffffffffffff1633146134e1576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112a281614739565b60035473ffffffffffffffffffffffffffffffffffffffff16331461353b576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805460ff90921662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff909216919091179055565b60005460ff16156135e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610d53565b600054610100900460ff1615613624576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff1633146136a9576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006136b4836137b0565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260026020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055905061370b82826145fb565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b60008082600114156137965750506001547f0000000000000000000000000000000000000000000000000000000000000000927e0100000000000000000000000000000000000000000000000000000000000090910461ffff169150565b50506000908152600460205260409020549060a082901c90565b73ffffffffffffffffffffffffffffffffffffffff808216600090815260026020526040902054168061380f576040517fb5ba4c4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146138945773ffffffffffffffffffffffffffffffffffffffff8216600090815260066020526040902054613227565b600192915050565b60006138a782613814565b73ffffffffffffffffffffffffffffffffffffffff909316600090815260086020526040902080549319939093169092555050565b80801561393457507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b15613a96576040517fd1660f9900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301526044820184905286169063d1660f9990606401600060405180830381600087803b1580156139d157600080fd5b505af11580156139e5573d6000803e3d6000fd5b50506040517f5869dba800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690527f0000000000000000000000000000000000000000000000000000000000000000169250635869dba89150604401600060405180830381600087803b158015613a7957600080fd5b505af1158015613a8d573d6000803e3d6000fd5b50505050610bba565b6040517fd1660f9900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301526044820184905286169063d1660f9990606401600060405180830381600087803b158015613b0e57600080fd5b505af1158015613b22573d6000803e3d6000fd5b505050505050505050565b60025b818111610bba5781811615613bff576000613b4a82613738565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529192506000918316906370a0823190602401602060405180830381865afa158015613bbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613be1919061530e565b90506002811115613bfc57613bfc87838860018503896138dc565b50505b60011b613b30565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052610ce390859061482d565b73ffffffffffffffffffffffffffffffffffffffff811660009081526008602052604081205490613ccc82614939565b60005490915062010000900460ff16811115613d08576000613ced836146ce565b613cf8906001615356565b9050610ce3848484600085614972565b505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff16631afbb7a46040518163ffffffff1660e01b8152600401602060405180830381865afa158015613d5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d81919061530e565b92508373ffffffffffffffffffffffffffffffffffffffff166317d11a156040518163ffffffff1660e01b8152600401602060405180830381865afa158015613dce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613df2919061530e565b91507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e83919061530e565b929491935050565b60005460ff16613ef7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610d53565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6040805173ffffffffffffffffffffffffffffffffffffffff8681166024830152604480830186905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b30000000000000000000000000000000000000000000000000000000017905291517f1cff79cd000000000000000000000000000000000000000000000000000000008152600092861691631cff79cd9161402d918a9160040161546d565b6000604051808303816000875af192505050801561408b57506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052614088919081019061549c565b60015b614094576140c8565b805115806140b75750808060200190518101906140b191906153e6565b15156001145b156140c6576001915050614104565b505b8115614100576040517f76e3e29c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060005b95945050505050565b600061411882613814565b905080158061412a5750600754811615155b15614161576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83166000908152600860205260409020548116613d085773ffffffffffffffffffffffffffffffffffffffff83166000908152600860205260409020805482179055505050565b60015473ffffffffffffffffffffffffffffffffffffffff8281166000908152600860205260408120546a010000000000000000000090930490911691908080614206866112a5565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526127108202600482015273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350908716915063f9a6503090604401602060405180830381865afa1580156142a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142c5919061530e565b92506142d0846146ce565b6001019150506000806000805b848110156145085780156142f65760018186031b6142f9565b60015b9350868416156145005760008061430f86613738565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8e811660048301529294509092506000918416906370a0823190602401602060405180830381865afa158015614384573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143a8919061530e565b905060018111156144f3576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff848116602483015261ffff841691908d169063f9a6503090604401602060405180830381865afa15801561442d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614451919061530e565b61445b919061536e565b6144659087615356565b95508886106144ee5760006144798b614939565b60005490915062010000900460ff168111156144b0576144ab8d8c83600189156144a557898e03614972565b8d614972565b6144df565b85156144df5773ffffffffffffffffffffffffffffffffffffffff8d1660009081526008602052604090208b90555b50505050505050505050505050565b6144fc565b98861898600194505b5050505b6001016142dd565b506040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005460ff16156145a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610d53565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613f423390565b73ffffffffffffffffffffffffffffffffffffffff82161580614644575073ffffffffffffffffffffffffffffffffffffffff8281166000908152600260205260409020541615155b1561467b576040517f9e59609e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff918216600090815260026020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001691909216179055565b600081600114156146e157506000919050565b61010060015b60016146f38284615356565b901c92506001831b8481161580159061470e5750600185851c145b156147195750614732565b8481106147285783925061472c565b8391505b506146e7565b5050919050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526006602052604090205415614796576040517f2e5a5c7700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610100600554106147d3576040517f1cbbe18500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005805473ffffffffffffffffffffffffffffffffffffffff83166000818152600660209081526040808320600190951b948590558483526004909152812091909155825491929061482483615556565b91905055505050565b600061488f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16614ae09092919063ffffffff16565b805190915015613d0857808060200190518101906148ad91906153e6565b613d08576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610d53565b60008060005b610100811015614732576001811b91508382161561495e578260010192505b83821061496a57614732565b60010161493f565b815b81811015614aad576001811b85811615614aa457600061499382613738565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529192506000918316906370a0823190602401602060405180830381865afa158015614a06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a2a919061530e565b905060018111614aa157600054978318977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9097019660ff62010000909104168711614aa15750505073ffffffffffffffffffffffffffffffffffffffff8616600090815260086020526040902085905550610bba565b50505b50600101614974565b506040517f53275fcb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060614aef8484600085614af9565b90505b9392505050565b606082471015614b8b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610d53565b843b614bf3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610d53565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051614c1c919061558f565b60006040518083038185875af1925050503d8060008114614c59576040519150601f19603f3d011682016040523d82523d6000602084013e614c5e565b606091505b5091509150614c6e828286614c79565b979650505050505050565b60608315614c88575081614af2565b825115614c985782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d53919061516b565b73ffffffffffffffffffffffffffffffffffffffff811681146112a257600080fd5b600060208284031215614d0057600080fd5b8135614af281614ccc565b60008060408385031215614d1e57600080fd5b8235614d2981614ccc565b91506020830135614d3981614ccc565b809150509250929050565b80151581146112a257600080fd5b600080600080600060a08688031215614d6a57600080fd5b8535614d7581614ccc565b94506020860135614d8581614ccc565b93506040860135614d9581614ccc565b9250606086013591506080860135614dac81614d44565b809150509295509295909350565b600060208284031215614dcc57600080fd5b5035919050565b80356003811061380f57600080fd5b60008060008060808587031215614df857600080fd5b84359350614e0860208601614dd3565b93969395505050506040820135916060013590565b60008060008060808587031215614e3357600080fd5b8435614e3e81614ccc565b93506020850135614e4e81614ccc565b92506040850135614e5e81614d44565b9396929550929360600135925050565b600080600080600080600060e0888a031215614e8957600080fd5b8735614e9481614ccc565b9650614ea260208901614dd3565b9550604088013594506060880135614eb981614ccc565b93506080880135614ec981614ccc565b925060a0880135915060c0880135614ee081614d44565b8091505092959891949750929550565b60008060008060808587031215614f0657600080fd5b8435614f1181614ccc565b93506020850135614f2181614ccc565b92506040850135614e5e81614ccc565b600080600080600060a08688031215614f4957600080fd5b8535614f5481614ccc565b94506020860135614f6481614ccc565b93506040860135614f7481614ccc565b94979396509394606081013594506080013592915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561500257615002614f8c565b604052919050565b600067ffffffffffffffff82111561502457615024614f8c565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60008060006060848603121561506557600080fd5b833561507081614ccc565b9250602084013561508081614ccc565b9150604084013567ffffffffffffffff81111561509c57600080fd5b8401601f810186136150ad57600080fd5b80356150c06150bb8261500a565b614fbb565b8181528760208385010111156150d557600080fd5b816020840160208301376000602083830101528093505050509250925092565b60005b838110156151105781810151838201526020016150f8565b83811115610ce35750506000910152565b600081518084526151398160208601602086016150f5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000614af26020830184615121565b6000806040838503121561519157600080fd5b823591506020830135614d3981614ccc565b803561ffff8116811461380f57600080fd5b600080600080600060a086880312156151cd57600080fd5b6151d6866151a3565b94506151e4602087016151a3565b93506151f2604087016151a3565b9250615200606087016151a3565b915061520e608087016151a3565b90509295509295909350565b60008060006060848603121561522f57600080fd5b833561523a81614ccc565b925060208401359150604084013561525181614d44565b809150509250925092565b6000806040838503121561526f57600080fd5b823561527a81614ccc565b9150615288602084016151a3565b90509250929050565b6020808252825182820181905260009190848201906040850190845b818110156152df57835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016152ad565b50909695505050505050565b6000602082840312156152fd57600080fd5b813560ff81168114614af257600080fd5b60006020828403121561532057600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561536957615369615327565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156153a6576153a6615327565b500290565b6000826153e1577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000602082840312156153f857600080fd5b8151614af281614d44565b60008282101561541557615415615327565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6000806040838503121561545c57600080fd5b505080516020909101519092909150565b73ffffffffffffffffffffffffffffffffffffffff83168152604060208201526000614aef6040830184615121565b6000602082840312156154ae57600080fd5b815167ffffffffffffffff8111156154c557600080fd5b8201601f810184136154d657600080fd5b80516154e46150bb8261500a565b8181528560208385010111156154f957600080fd5b6141048260208301602086016150f5565b60006020828403121561551c57600080fd5b8151614af281614ccc565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561558857615588615327565b5060010190565b600082516155a18184602087016150f5565b919091019291505056fea26469706673582212209a61b2b1203f2f5e63c5e3bdfef5184c4cbbb88b745f884592632c989b91297064736f6c634300080a0033"; - -type CreditManagerInternalConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: CreditManagerInternalConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class CreditManagerInternal__factory extends ContractFactory { - constructor(...args: CreditManagerInternalConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - _poolService: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - _poolService, - overrides || {} - ) as Promise; - } - override getDeployTransaction( - _poolService: string, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(_poolService, overrides || {}); - } - override attach(address: string): CreditManagerInternal { - return super.attach(address) as CreditManagerInternal; - } - override connect(signer: Signer): CreditManagerInternal__factory { - return super.connect(signer) as CreditManagerInternal__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): CreditManagerInternalInterface { - return new utils.Interface(_abi) as CreditManagerInternalInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): CreditManagerInternal { - return new Contract( - address, - _abi, - signerOrProvider - ) as CreditManagerInternal; - } -} diff --git a/src/types/factories/contracts/test/mocks/credit/index.ts b/src/types/factories/contracts/test/mocks/credit/index.ts deleted file mode 100644 index e44ab330..00000000 --- a/src/types/factories/contracts/test/mocks/credit/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { CreditManagerInternal__factory } from "./CreditManagerInternal__factory"; diff --git a/src/types/factories/contracts/test/mocks/dao/TreasuryMock__factory.ts b/src/types/factories/contracts/test/mocks/dao/TreasuryMock__factory.ts deleted file mode 100644 index fee3b315..00000000 --- a/src/types/factories/contracts/test/mocks/dao/TreasuryMock__factory.ts +++ /dev/null @@ -1,79 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - TreasuryMock, - TreasuryMockInterface, -} from "../../../../../contracts/test/mocks/dao/TreasuryMock"; - -const _abi = [ - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "NewDonation", - type: "event", - }, - { - stateMutability: "payable", - type: "receive", - }, -]; - -const _bytecode = - "0x6080604052348015600f57600080fd5b5060788061001e6000396000f3fe608060405236603d576040513481527f8ffa785350fa6b5fee858c4ca63eff2704b9538ff446bd673c1f6c11fc7aca169060200160405180910390a1005b600080fdfea264697066735822122021be454ea40e918ac93e02604b693891335b2f626cae855d903cebb95ed57ac164736f6c634300080a0033"; - -type TreasuryMockConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: TreasuryMockConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class TreasuryMock__factory extends ContractFactory { - constructor(...args: TreasuryMockConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): TreasuryMock { - return super.attach(address) as TreasuryMock; - } - override connect(signer: Signer): TreasuryMock__factory { - return super.connect(signer) as TreasuryMock__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): TreasuryMockInterface { - return new utils.Interface(_abi) as TreasuryMockInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): TreasuryMock { - return new Contract(address, _abi, signerOrProvider) as TreasuryMock; - } -} diff --git a/src/types/factories/contracts/test/mocks/dao/index.ts b/src/types/factories/contracts/test/mocks/dao/index.ts deleted file mode 100644 index bab22291..00000000 --- a/src/types/factories/contracts/test/mocks/dao/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { TreasuryMock__factory } from "./TreasuryMock__factory"; diff --git a/src/types/factories/contracts/test/mocks/index.ts b/src/types/factories/contracts/test/mocks/index.ts index bc88f30c..fa1f4ca2 100644 --- a/src/types/factories/contracts/test/mocks/index.ts +++ b/src/types/factories/contracts/test/mocks/index.ts @@ -1,12 +1,5 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ -export * as adapters from "./adapters"; -export * as core from "./core"; -export * as credit from "./credit"; -export * as dao from "./dao"; export * as integrations from "./integrations"; -export * as libraries from "./libraries"; -export * as oracles from "./oracles"; -export * as pool from "./pool"; export * as token from "./token"; diff --git a/src/types/factories/contracts/test/mocks/integrations/ConvexBaseRewardPoolMock.sol/BaseRewardPoolMock__factory.ts b/src/types/factories/contracts/test/mocks/integrations/ConvexBaseRewardPoolMock.sol/BaseRewardPoolMock__factory.ts deleted file mode 100644 index 03801116..00000000 --- a/src/types/factories/contracts/test/mocks/integrations/ConvexBaseRewardPoolMock.sol/BaseRewardPoolMock__factory.ts +++ /dev/null @@ -1,763 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { - Signer, - utils, - Contract, - ContractFactory, - BigNumberish, - Overrides, -} from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - BaseRewardPoolMock, - BaseRewardPoolMockInterface, -} from "../../../../../../contracts/test/mocks/integrations/ConvexBaseRewardPoolMock.sol/BaseRewardPoolMock"; - -const _abi = [ - { - inputs: [ - { - internalType: "uint256", - name: "pid_", - type: "uint256", - }, - { - internalType: "address", - name: "stakingToken_", - type: "address", - }, - { - internalType: "address", - name: "rewardToken_", - type: "address", - }, - { - internalType: "address", - name: "operator_", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "index", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "user", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "reward", - type: "uint256", - }, - ], - name: "Mock_BaseRewardPaid", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "index", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "user", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "Mock_BaseStaked", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "index", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "user", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "Mock_BaseWithdrawn", - type: "event", - }, - { - inputs: [ - { - internalType: "address", - name: "_reward", - type: "address", - }, - ], - name: "addExtraReward", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "addRewardAmount", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "clearExtraRewards", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "currentRewards", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "donate", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "duration", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "earned", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "extraRewards", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "extraRewardsLength", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "getReward", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - { - internalType: "bool", - name: "_claimExtras", - type: "bool", - }, - ], - name: "getReward", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "historicalRewards", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "lastTimeRewardApplicable", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "lastUpdateTime", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "newRewardRatio", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "operator", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "periodFinish", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "pid", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "queueNewRewards", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "queuedRewards", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "rewardManager", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "rewardPerToken", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "rewardPerTokenStored", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "rewardRate", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "rewardToken", - outputs: [ - { - internalType: "contract ERC20Mock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "rewards", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "stake", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "stakeAll", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_for", - type: "address", - }, - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "stakeFor", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "stakingToken", - outputs: [ - { - internalType: "contract IERC20", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "totalSupply", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "userRewardPerTokenPaid", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "bool", - name: "claim", - type: "bool", - }, - ], - name: "withdraw", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bool", - name: "claim", - type: "bool", - }, - ], - name: "withdrawAll", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bool", - name: "claim", - type: "bool", - }, - ], - name: "withdrawAllAndUnwrap", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "bool", - name: "claim", - type: "bool", - }, - ], - name: "withdrawAndUnwrap", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, -]; - -const _bytecode = - "0x6080604052600080546001600160a01b031916737109709ecfa91a80626ff3989d68f67f5b1dd12d17815560068190556007819055600a819055600b819055600c81905560128190556013553480156200005857600080fd5b5060405162001ed238038062001ed28339810160408190526200007b91620000e1565b600593909355600280546001600160a01b03199081166001600160a01b039485161790915560018054821692841692909217909155600380549091169190921617905562000135565b80516001600160a01b0381168114620000dc57600080fd5b919050565b60008060008060808587031215620000f857600080fd5b845193506200010a60208601620000c4565b92506200011a60408601620000c4565b91506200012a60608601620000c4565b905092959194509250565b611d8d80620001456000396000f3fe608060405234801561001057600080fd5b50600436106102765760003560e01c80637050ccd911610160578063a694fc3a116100d8578063df136d651161008c578063f106845411610071578063f10684541461050a578063f14faf6f146103c2578063f7c618c11461051357600080fd5b8063df136d65146104f8578063ebe2b12b1461050157600080fd5b8063c8f33c91116100bd578063c8f33c91146104df578063cd3daf9d146104e8578063d55a23f4146104f057600080fd5b8063a694fc3a146104b9578063c32e7202146104cc57600080fd5b806380faa57d1161012f5780638dcb4061116101145780638dcb406114610495578063901a7d531461049d5780639b7ccf4c146104a657600080fd5b806380faa57d1461046d5780638b8763471461047557600080fd5b80637050ccd9146103fb57806370a082311461040e57806372f702f3146104445780637b0a47ee1461046457600080fd5b806338d07436116101f3578063570ca735116101c25780635e43c47b116101a75780635e43c47b146103d657806363d38c3b146103e95780636c8bcee8146103f257600080fd5b8063570ca735146103a2578063590a41f5146103c257600080fd5b806338d07436146103615780633d18b9121461037457806340c354461461037c57806349f039a21461038f57600080fd5b80630fb5a6b41161024a5780631c1c6fe51161022f5780631c1c6fe514610322578063262d3d6d146103355780632ee409081461033e57600080fd5b80630fb5a6b41461031057806318160ddd1461031a57600080fd5b80628cc2621461027b5780630569d388146102a15780630700037d146102ab5780630f4ef8a6146102cb575b600080fd5b61028e610289366004611a42565b610533565b6040519081526020015b60405180910390f35b6102a96105cc565b005b61028e6102b9366004611a42565b600f6020526000908152604090205481565b6004546102eb9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610298565b61028e62093a8081565b600d5461028e565b6102a9610330366004611a6d565b6105da565b61028e600c5481565b61035161034c366004611a8a565b6105f8565b6040519015158152602001610298565b61035161036f366004611ab6565b61087f565b610351610aa7565b6102eb61038a366004611ae6565b610abc565b6102a961039d366004611a6d565b610af3565b6003546102eb9073ffffffffffffffffffffffffffffffffffffffff1681565b6103516103d0366004611ae6565b50600190565b6103516103e4366004611a42565b610b0d565b61028e600a5481565b61028e61033e81565b610351610409366004611aff565b610c07565b61028e61041c366004611a42565b73ffffffffffffffffffffffffffffffffffffffff1660009081526010602052604090205490565b6002546102eb9073ffffffffffffffffffffffffffffffffffffffff1681565b61028e60075481565b61028e610e88565b61028e610483366004611a42565b600e6020526000908152604090205481565b610351610e9b565b61028e600b5481565b6102a96104b4366004611ae6565b610f46565b6103516104c7366004611ae6565b61113f565b6103516104da366004611ab6565b611378565b61028e60085481565b60095461028e565b60115461028e565b61028e60095481565b61028e60065481565b61028e60055481565b6001546102eb9073ffffffffffffffffffffffffffffffffffffffff1681565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600f6020908152604080832054600e9092528220546105c691906105c090670de0b6b3a7640000906105ba9061058e9061058860095490565b9061156e565b73ffffffffffffffffffffffffffffffffffffffff881660009081526010602052604090205490611581565b9061158d565b90611599565b92915050565b6105d8601160006119ee565b565b336000908152601060205260409020546105f4908261087f565b5050565b60008273ffffffffffffffffffffffffffffffffffffffff8116156106595761062081610533565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600f6020908152604080832093909355600954600e909152919020555b600083116106c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f526577617264506f6f6c203a2043616e6e6f74207374616b652030000000000060448201526064015b60405180910390fd5b60005b60115481101561079057601181815481106106e8576106e8611b2d565b6000918252602090912001546040517fadc9772e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018790529091169063adc9772e90604401600060405180830381600087803b15801561076557600080fd5b505af1158015610779573d6000803e3d6000fd5b50505050808061078890611b8b565b9150506106cb565b50600d5461079e9084611599565b600d5573ffffffffffffffffffffffffffffffffffffffff84166000908152601060205260409020546107d19084611599565b73ffffffffffffffffffffffffffffffffffffffff80861660009081526010602052604090209190915560025461080b91163330866115a5565b8373ffffffffffffffffffffffffffffffffffffffff166013547e12ea37eafadc86c304798c357ee0b9923724f92be4e45c4796ccf0e33f84ce8560405161085591815260200190565b60405180910390a36001601360008282546108709190611bc4565b90915550600195945050505050565b60003380156108ca5761089181610533565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600f6020908152604080832093909355600954600e909152919020555b60008411610934576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f526577617264506f6f6c203a2043616e6e6f742077697468647261772030000060448201526064016106bf565b60005b6011548110156109fa576011818154811061095457610954611b2d565b6000918252602090912001546040517ff3fef3a30000000000000000000000000000000000000000000000000000000081523360048201526024810187905273ffffffffffffffffffffffffffffffffffffffff9091169063f3fef3a390604401600060405180830381600087803b1580156109cf57600080fd5b505af11580156109e3573d6000803e3d6000fd5b5050505080806109f290611b8b565b915050610937565b50600d54610a08908561156e565b600d5533600090815260106020526040902054610a25908561156e565b33600081815260106020526040902091909155600254610a5e9173ffffffffffffffffffffffffffffffffffffffff9091169086611687565b8215610a7157610a6f336001610c07565b505b6013546040518581523391907f5512f168a2a6322c28d70f2b2811c8857ea8b1f256d7be8ee8ef770665c3f96290602001610855565b6000610ab4336001610c07565b506001905090565b60118181548110610acc57600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b336000908152601060205260409020546105f49082611378565b600073ffffffffffffffffffffffffffffffffffffffff8216610b8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f217265776172642073657474696e67000000000000000000000000000000000060448201526064016106bf565b5060118054600180820183556000929092527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c680180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff939093169290921790915590565b60008273ffffffffffffffffffffffffffffffffffffffff811615610c6857610c2f81610533565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600f6020908152604080832093909355600954600e909152919020555b6000610c7385610533565b90508015610d495773ffffffffffffffffffffffffffffffffffffffff8086166000908152600f6020526040812055600154610cb191168683611687565b6003546005546040517f71192b17000000000000000000000000000000000000000000000000000000008152600481019190915273ffffffffffffffffffffffffffffffffffffffff878116602483015260448201849052909116906371192b1790606401600060405180830381600087803b158015610d3057600080fd5b505af1158015610d44573d6000803e3d6000fd5b505050505b8315610e125760005b601154811015610e105760118181548110610d6f57610d6f611b2d565b6000918252602090912001546040517fc00007b000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529091169063c00007b090602401600060405180830381600087803b158015610de557600080fd5b505af1158015610df9573d6000803e3d6000fd5b505050508080610e0890611b8b565b915050610d52565b505b8473ffffffffffffffffffffffffffffffffffffffff166013547fa7283f521536f3db5cd5c50a1f053bbba463b20de118ee0f9dd4c3ff2bc9532f83604051610e5d91815260200190565b60405180910390a3600160136000828254610e789190611bc4565b9091555060019695505050505050565b6000610e96426006546116e2565b905090565b6002546040517f70a08231000000000000000000000000000000000000000000000000000000008152336004820152600091829173ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa158015610f0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f329190611bdc565b9050610f3d8161113f565b50600191505090565b600054600154604080517f07546172000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169363ca669fa793169163075461729160048083019260209291908290030181865afa158015610fc0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe49190611bf5565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401600060405180830381600087803b15801561104a57600080fd5b505af115801561105e573d6000803e3d6000fd5b50506001546040517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810185905273ffffffffffffffffffffffffffffffffffffffff90911692506340c10f1991506044016020604051808303816000875af11580156110d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110fd9190611c12565b50600d541561113c57600d5461111b82670de0b6b3a7640000611c2f565b6111259190611c6c565b600960008282546111369190611bc4565b90915550505b50565b600033801561118a5761115181610533565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600f6020908152604080832093909355600954600e909152919020555b600083116111f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f526577617264506f6f6c203a2043616e6e6f74207374616b652030000000000060448201526064016106bf565b60005b6011548110156112ba576011818154811061121457611214611b2d565b6000918252602090912001546040517fadc9772e0000000000000000000000000000000000000000000000000000000081523360048201526024810186905273ffffffffffffffffffffffffffffffffffffffff9091169063adc9772e90604401600060405180830381600087803b15801561128f57600080fd5b505af11580156112a3573d6000803e3d6000fd5b5050505080806112b290611b8b565b9150506111f7565b50600d546112c89084611599565b600d55336000908152601060205260409020546112e59084611599565b3360008181526010602052604090209190915560025461131f9173ffffffffffffffffffffffffffffffffffffffff9091169030866115a5565b6013546040518481523391907e12ea37eafadc86c304798c357ee0b9923724f92be4e45c4796ccf0e33f84ce9060200160405180910390a360016013600082825461136a9190611bc4565b909155506001949350505050565b60003380156113c35761138a81610533565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600f6020908152604080832093909355600954600e909152919020555b60005b60115481101561148957601181815481106113e3576113e3611b2d565b6000918252602090912001546040517ff3fef3a30000000000000000000000000000000000000000000000000000000081523360048201526024810187905273ffffffffffffffffffffffffffffffffffffffff9091169063f3fef3a390604401600060405180830381600087803b15801561145e57600080fd5b505af1158015611472573d6000803e3d6000fd5b50505050808061148190611b8b565b9150506113c6565b50600d54611497908561156e565b600d55336000908152601060205260409020546114b4908561156e565b33600081815260106020526040908190209290925560035460055492517f14cd70e4000000000000000000000000000000000000000000000000000000008152600481019390935260248301879052604483019190915273ffffffffffffffffffffffffffffffffffffffff16906314cd70e490606401600060405180830381600087803b15801561154557600080fd5b505af1158015611559573d6000803e3d6000fd5b505050508215610a7157610a6f336001610c07565b600061157a8284611ca7565b9392505050565b600061157a8284611c2f565b600061157a8284611c6c565b600061157a8284611bc4565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526116819085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526116f8565b50505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526116dd9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016115ff565b505050565b60008183106116f1578161157a565b5090919050565b600061175a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166118049092919063ffffffff16565b8051909150156116dd57808060200190518101906117789190611c12565b6116dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016106bf565b6060611813848460008561181b565b949350505050565b6060824710156118ad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016106bf565b843b611915576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016106bf565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161193e9190611cea565b60006040518083038185875af1925050503d806000811461197b576040519150601f19603f3d011682016040523d82523d6000602084013e611980565b606091505b509150915061199082828661199b565b979650505050505050565b606083156119aa57508161157a565b8251156119ba5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106bf9190611d06565b508054600082559060005260206000209081019061113c91905b80821115611a1c5760008155600101611a08565b5090565b73ffffffffffffffffffffffffffffffffffffffff8116811461113c57600080fd5b600060208284031215611a5457600080fd5b813561157a81611a20565b801515811461113c57600080fd5b600060208284031215611a7f57600080fd5b813561157a81611a5f565b60008060408385031215611a9d57600080fd5b8235611aa881611a20565b946020939093013593505050565b60008060408385031215611ac957600080fd5b823591506020830135611adb81611a5f565b809150509250929050565b600060208284031215611af857600080fd5b5035919050565b60008060408385031215611b1257600080fd5b8235611b1d81611a20565b91506020830135611adb81611a5f565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611bbd57611bbd611b5c565b5060010190565b60008219821115611bd757611bd7611b5c565b500190565b600060208284031215611bee57600080fd5b5051919050565b600060208284031215611c0757600080fd5b815161157a81611a20565b600060208284031215611c2457600080fd5b815161157a81611a5f565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611c6757611c67611b5c565b500290565b600082611ca2577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600082821015611cb957611cb9611b5c565b500390565b60005b83811015611cd9578181015183820152602001611cc1565b838111156116815750506000910152565b60008251611cfc818460208701611cbe565b9190910192915050565b6020815260008251806020840152611d25816040850160208701611cbe565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea26469706673582212203f11f44bbbc8c8f79b251a573810815d0ad952cb93d7f9b03a3b1f9b4b5f088b64736f6c634300080a0033"; - -type BaseRewardPoolMockConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: BaseRewardPoolMockConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class BaseRewardPoolMock__factory extends ContractFactory { - constructor(...args: BaseRewardPoolMockConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - pid_: BigNumberish, - stakingToken_: string, - rewardToken_: string, - operator_: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - pid_, - stakingToken_, - rewardToken_, - operator_, - overrides || {} - ) as Promise; - } - override getDeployTransaction( - pid_: BigNumberish, - stakingToken_: string, - rewardToken_: string, - operator_: string, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction( - pid_, - stakingToken_, - rewardToken_, - operator_, - overrides || {} - ); - } - override attach(address: string): BaseRewardPoolMock { - return super.attach(address) as BaseRewardPoolMock; - } - override connect(signer: Signer): BaseRewardPoolMock__factory { - return super.connect(signer) as BaseRewardPoolMock__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): BaseRewardPoolMockInterface { - return new utils.Interface(_abi) as BaseRewardPoolMockInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): BaseRewardPoolMock { - return new Contract(address, _abi, signerOrProvider) as BaseRewardPoolMock; - } -} diff --git a/src/types/factories/contracts/test/mocks/integrations/ConvexBaseRewardPoolMock.sol/IBaseRewardPoolMockEvents__factory.ts b/src/types/factories/contracts/test/mocks/integrations/ConvexBaseRewardPoolMock.sol/IBaseRewardPoolMockEvents__factory.ts deleted file mode 100644 index 801e2422..00000000 --- a/src/types/factories/contracts/test/mocks/integrations/ConvexBaseRewardPoolMock.sol/IBaseRewardPoolMockEvents__factory.ts +++ /dev/null @@ -1,105 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import { Contract, Signer, utils } from "ethers"; -import type { Provider } from "@ethersproject/providers"; -import type { - IBaseRewardPoolMockEvents, - IBaseRewardPoolMockEventsInterface, -} from "../../../../../../contracts/test/mocks/integrations/ConvexBaseRewardPoolMock.sol/IBaseRewardPoolMockEvents"; - -const _abi = [ - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "index", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "user", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "reward", - type: "uint256", - }, - ], - name: "Mock_BaseRewardPaid", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "index", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "user", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "Mock_BaseStaked", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "index", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "user", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "Mock_BaseWithdrawn", - type: "event", - }, -]; - -export class IBaseRewardPoolMockEvents__factory { - static readonly abi = _abi; - static createInterface(): IBaseRewardPoolMockEventsInterface { - return new utils.Interface(_abi) as IBaseRewardPoolMockEventsInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): IBaseRewardPoolMockEvents { - return new Contract( - address, - _abi, - signerOrProvider - ) as IBaseRewardPoolMockEvents; - } -} diff --git a/src/types/factories/contracts/test/mocks/integrations/ConvexBaseRewardPoolMock.sol/index.ts b/src/types/factories/contracts/test/mocks/integrations/ConvexBaseRewardPoolMock.sol/index.ts deleted file mode 100644 index 8f394477..00000000 --- a/src/types/factories/contracts/test/mocks/integrations/ConvexBaseRewardPoolMock.sol/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { BaseRewardPoolMock__factory } from "./BaseRewardPoolMock__factory"; -export { IBaseRewardPoolMockEvents__factory } from "./IBaseRewardPoolMockEvents__factory"; diff --git a/src/types/factories/contracts/test/mocks/integrations/ConvexBoosterMock.sol/BoosterMock__factory.ts b/src/types/factories/contracts/test/mocks/integrations/ConvexBoosterMock.sol/BoosterMock__factory.ts deleted file mode 100644 index edec3faf..00000000 --- a/src/types/factories/contracts/test/mocks/integrations/ConvexBoosterMock.sol/BoosterMock__factory.ts +++ /dev/null @@ -1,776 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - BoosterMock, - BoosterMockInterface, -} from "../../../../../../contracts/test/mocks/integrations/ConvexBoosterMock.sol/BoosterMock"; - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "_crv", - type: "address", - }, - { - internalType: "address", - name: "_cvx", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "index", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "user", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "poolid", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - indexed: false, - internalType: "bool", - name: "_stake", - type: "bool", - }, - ], - name: "Mock_Deposited", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "index", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "user", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "poolid", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "Mock_Withdrawn", - type: "event", - }, - { - inputs: [], - name: "FEE_DENOMINATOR", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "MaxFees", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_lptoken", - type: "address", - }, - ], - name: "addPool", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "crv", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_pid", - type: "uint256", - }, - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - { - internalType: "bool", - name: "_stake", - type: "bool", - }, - ], - name: "deposit", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_pid", - type: "uint256", - }, - { - internalType: "bool", - name: "_stake", - type: "bool", - }, - ], - name: "depositAll", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "distributionAddressId", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "earmarkIncentive", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "feeDistro", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "feeManager", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "feeToken", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "gaugeMap", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "index", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "isShutdown", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "lockFees", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "lockIncentive", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "lockRewards", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "minter", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "owner", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "platformFee", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "poolInfo", - outputs: [ - { - internalType: "address", - name: "lptoken", - type: "address", - }, - { - internalType: "address", - name: "token", - type: "address", - }, - { - internalType: "address", - name: "gauge", - type: "address", - }, - { - internalType: "address", - name: "crvRewards", - type: "address", - }, - { - internalType: "address", - name: "stash", - type: "address", - }, - { - internalType: "bool", - name: "shutdown", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "poolLength", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "poolManager", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "registry", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "rewardArbitrator", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_pid", - type: "uint256", - }, - { - internalType: "address", - name: "_address", - type: "address", - }, - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "rewardClaimed", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "rewardFactory", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "staker", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "stakerIncentive", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "stakerRewards", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "stashFactory", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "tokenFactory", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "treasury", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "voteDelegate", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "voteOwnership", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "voteParameter", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_pid", - type: "uint256", - }, - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "withdraw", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_pid", - type: "uint256", - }, - ], - name: "withdrawAll", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_pid", - type: "uint256", - }, - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - { - internalType: "address", - name: "_to", - type: "address", - }, - ], - name: "withdrawTo", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, -]; - -const _bytecode = - "0x60c0604052600080546001600160a01b031916737109709ecfa91a80626ff3989d68f67f5b1dd12d1781556103e86002556101c2600355603260045560058190556014553480156200005057600080fd5b506040516200559438038062005594833981016040819052620000739162000113565b601380546000608052600680546001600160a01b031990811633908117909255600d80548216831790556007805482168317905560088054821690921790915560128054821690556001600160a81b0319909116909155600e8054821690556001600160a01b0391821660a052600180549390921692169190911790556200014b565b80516001600160a01b03811681146200010e57600080fd5b919050565b600080604083850312156200012757600080fd5b6200013283620000f6565b91506200014260208401620000f6565b90509250929050565b60805160a0516154156200017f6000396000818161035b01528181610d6d0152610ec7015260006104be01526154156000f3fe60806040523480156200001157600080fd5b5060043610620002e45760003560e01c80636a4874a11162000199578063b42eda7111620000e9578063d6a0f5301162000097578063d914cd4b116200007a578063d914cd4b1462000711578063dc4c90d31462000728578063e77772fe146200074957600080fd5b8063d6a0f53014620006e6578063d73792a9146200070757600080fd5b8063cb0d5b5211620000cc578063cb0d5b52146200067e578063cfb9cfba14620006a4578063d0fb020314620006c557600080fd5b8063b42eda71146200063c578063bf86d690146200065857600080fd5b806393e846a011620001475780639f00332b116200012a5780639f00332b14620005de578063a386a08014620005ff578063ab366292146200061b57600080fd5b806393e846a014620005be578063958e2d3114620005c757600080fd5b80637303df9a116200017c5780637303df9a146200057b5780637b10399914620005855780638da5cb5b146200059d57600080fd5b80636a4874a1146200054357806371192b17146200056457600080fd5b8063376d771a11620002555780635ebaf1db116200020357806361d027b311620001e657806361d027b314620004f757806362d28ac71462000518578063647846a5146200052257600080fd5b80635ebaf1db14620004b857806360759fce14620004e057600080fd5b806343a0d066116200023857806343a0d0661462000480578063441a3e7014620004975780635094061814620004ae57600080fd5b8063376d771a14620004555780633a088cd2146200047657600080fd5b806314cd70e411620002b3578063245e4bf01162000296578063245e4bf0146200042057806326232a2e14620004415780632986c0e5146200044b57600080fd5b806314cd70e414620003905780631526fe2714620003b857600080fd5b8063043b684a14620002e9578063068eb19e1462000334578063075461721462000355578063081e3eda146200037d575b600080fd5b600c546200030a9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b600a546200030a9073ffffffffffffffffffffffffffffffffffffffff1681565b6200030a7f000000000000000000000000000000000000000000000000000000000000000081565b6015545b6040519081526020016200032b565b620003a7620003a136600462001b05565b6200076a565b60405190151581526020016200032b565b620003cf620003c936600462001b41565b62000839565b6040805173ffffffffffffffffffffffffffffffffffffffff97881681529587166020870152938616938501939093529084166060840152909216608082015290151560a082015260c0016200032b565b6009546200030a9073ffffffffffffffffffffffffffffffffffffffff1681565b6200038160055481565b6200038160145481565b6010546200030a9073ffffffffffffffffffffffffffffffffffffffff1681565b6200038160045481565b620003a76200049136600462001b6a565b620008b9565b620003a7620004a836600462001b9b565b62000b8c565b6200038160025481565b6200030a7f000000000000000000000000000000000000000000000000000000000000000081565b620003a7620004f136600462001bbe565b62000ba5565b600e546200030a9073ffffffffffffffffffffffffffffffffffffffff1681565b6200038160035481565b6013546200030a9073ffffffffffffffffffffffffffffffffffffffff1681565b6001546200030a9073ffffffffffffffffffffffffffffffffffffffff1681565b620003a76200057536600462001bf1565b62000c7f565b620003816107d081565b6200030a6f22d53366457f9d5e68ec105046fc438381565b6006546200030a9073ffffffffffffffffffffffffffffffffffffffff1681565b62000381600481565b620003a7620005d836600462001b41565b62000f32565b600d546200030a9073ffffffffffffffffffffffffffffffffffffffff1681565b6200030a73e478de485ad2fe566d49342cbd03e49ed7db335681565b6011546200030a9073ffffffffffffffffffffffffffffffffffffffff1681565b6200030a73bcff8b0b9419b9a88c44546519b1e909cf33039981565b601354620003a79074010000000000000000000000000000000000000000900460ff1681565b620003a76200068f36600462001c2c565b60166020526000908152604090205460ff1681565b600f546200030a9073ffffffffffffffffffffffffffffffffffffffff1681565b6007546200030a9073ffffffffffffffffffffffffffffffffffffffff1681565b6012546200030a9073ffffffffffffffffffffffffffffffffffffffff1681565b6200038161271081565b620003a76200072236600462001c2c565b6200100d565b6008546200030a9073ffffffffffffffffffffffffffffffffffffffff1681565b600b546200030a9073ffffffffffffffffffffffffffffffffffffffff1681565b6000806015858154811062000783576200078362001c4c565b600091825260209091206003600590920201015473ffffffffffffffffffffffffffffffffffffffff1690503381146200081e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f216175746800000000000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b6200082c8585338662001385565b60019150505b9392505050565b601581815481106200084a57600080fd5b60009182526020909120600590910201805460018201546002830154600384015460049094015473ffffffffffffffffffffffffffffffffffffffff93841695509183169390831692908116919081169074010000000000000000000000000000000000000000900460ff1686565b60008060158581548110620008d257620008d262001c4c565b60009182526020909120600590910201805490915073ffffffffffffffffffffffffffffffffffffffff166200090b81333088620014ea565b600182015473ffffffffffffffffffffffffffffffffffffffff16841562000a95576040517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810187905273ffffffffffffffffffffffffffffffffffffffff8216906340c10f1990604401600060405180830381600087803b1580156200099c57600080fd5b505af1158015620009b1573d6000803e3d6000fd5b505050600384015473ffffffffffffffffffffffffffffffffffffffff9081169150620009e3908316826000620015ce565b62000a0673ffffffffffffffffffffffffffffffffffffffff83168289620015ce565b6040517f2ee409080000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff821690632ee4090890604401600060405180830381600087803b15801562000a7557600080fd5b505af115801562000a8a573d6000803e3d6000fd5b505050505062000b1e565b6040517f40c10f190000000000000000000000000000000000000000000000000000000081523360048201526024810187905273ffffffffffffffffffffffffffffffffffffffff8216906340c10f1990604401600060405180830381600087803b15801562000b0457600080fd5b505af115801562000b19573d6000803e3d6000fd5b505050505b60145460408051918252602082018890528615158282015251889133917fb16197b2bc5f21de7d21259f49728a7ae0f7f294f8b5d0815aed6ab550b137829181900360600190a360016014600082825462000b7a919062001c7b565b90915550600198975050505050505050565b600062000b9c8383333362001385565b50600192915050565b6000806015848154811062000bbe5762000bbe62001c4c565b60009182526020822060059190910201546040517f70a0823100000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff909116925082906370a0823190602401602060405180830381865afa15801562000c3e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c64919062001cbb565b905062000c73858286620008b9565b50600195945050505050565b6000806015858154811062000c985762000c9862001c4c565b600091825260209091206003600590920201015473ffffffffffffffffffffffffffffffffffffffff16905033811462000d2f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f2161757468000000000000000000000000000000000000000000000000000000604482015260640162000815565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ca669fa77f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663075461726040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000dd7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000dfd919062001cd5565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401600060405180830381600087803b15801562000e6457600080fd5b505af115801562000e79573d6000803e3d6000fd5b50506040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018790527f00000000000000000000000000000000000000000000000000000000000000001692506340c10f199150604401600060405180830381600087803b15801562000f0e57600080fd5b505af115801562000f23573d6000803e3d6000fd5b50600198975050505050505050565b6000806015838154811062000f4b5762000f4b62001c4c565b60009182526020822060059190910201600101546040517f70a0823100000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff909116925082906370a0823190602401602060405180830381865afa15801562000fce573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ff4919062001cbb565b905062001002848262000b8c565b506001949350505050565b600073ffffffffffffffffffffffffffffffffffffffff82166200108e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f21706172616d0000000000000000000000000000000000000000000000000000604482015260640162000815565b601554604051600090601290620010a59062001ac3565b6060808252600b908201527f436f6e766578546f6b656e000000000000000000000000000000000000000000608082015260a0602082018190526008908201527f435658544f4b454e00000000000000000000000000000000000000000000000060c082015260ff909116604082015260e001604051809103906000f08015801562001135573d6000803e3d6000fd5b50905060008282600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16306040516200116e9062001ad1565b93845273ffffffffffffffffffffffffffffffffffffffff92831660208501529082166040840152166060820152608001604051809103906000f080158015620011bc573d6000803e3d6000fd5b506040805160c08101825273ffffffffffffffffffffffffffffffffffffffff978816815293871660208501908152600191850182815292881660608601908152600260808701908152600060a088018181526015805480880182559252975160059091027f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec47581018054928d167fffffffffffffffffffffffff000000000000000000000000000000000000000093841617905593517f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec47685018054918d1691831691909117905594517f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec47784018054918c1691871691909117905590517f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec47883018054918b16919095161790935591517f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec47990920180549451151574010000000000000000000000000000000000000000027fffffffffffffffffffffff0000000000000000000000000000000000000000009095169290971691909117929092179094559392505050565b6000601585815481106200139d576200139d62001c4c565b60009182526020909120600590910201805460018201546040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018990529394509183169216908190639dc29fac90604401600060405180830381600087803b1580156200142d57600080fd5b505af115801562001442573d6000803e3d6000fd5b506200146a9250505073ffffffffffffffffffffffffffffffffffffffff831685886200175d565b868473ffffffffffffffffffffffffffffffffffffffff167f617ecc79b6b01a6f07d16c413645249f6c6b38105ddcd843e4d4c0d11009db8c60145489604051620014bf929190918252602082015260400190565b60405180910390a3600160146000828254620014dc919062001c7b565b909155505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052620015c89085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152620017b5565b50505050565b8015806200167257506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015284169063dd62ed3e90604401602060405180830381865afa1580156200164a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001670919062001cbb565b155b62001700576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e636500000000000000000000606482015260840162000815565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052620017589084907f095ea7b3000000000000000000000000000000000000000000000000000000009060640162001545565b505050565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052620017589084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640162001545565b600062001819826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16620018c89092919063ffffffff16565b8051909150156200175857808060200190518101906200183a919062001cf5565b62001758576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840162000815565b6060620018d98484600085620018e1565b949350505050565b60608247101562001975576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c0000000000000000000000000000000000000000000000000000606482015260840162000815565b843b620019df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000815565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405162001a0a919062001d44565b60006040518083038185875af1925050503d806000811462001a49576040519150601f19603f3d011682016040523d82523d6000602084013e62001a4e565b606091505b509150915062001a6082828662001a6b565b979650505050505050565b6060831562001a7c57508162000832565b82511562001a8d5782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000815919062001d62565b6117588062001db683390190565b611ed2806200350e83390190565b73ffffffffffffffffffffffffffffffffffffffff8116811462001b0257600080fd5b50565b60008060006060848603121562001b1b57600080fd5b8335925060208401359150604084013562001b368162001adf565b809150509250925092565b60006020828403121562001b5457600080fd5b5035919050565b801515811462001b0257600080fd5b60008060006060848603121562001b8057600080fd5b8335925060208401359150604084013562001b368162001b5b565b6000806040838503121562001baf57600080fd5b50508035926020909101359150565b6000806040838503121562001bd257600080fd5b82359150602083013562001be68162001b5b565b809150509250929050565b60008060006060848603121562001c0757600080fd5b83359250602084013562001c1b8162001adf565b929592945050506040919091013590565b60006020828403121562001c3f57600080fd5b8135620008328162001adf565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000821982111562001cb6577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500190565b60006020828403121562001cce57600080fd5b5051919050565b60006020828403121562001ce857600080fd5b8151620008328162001adf565b60006020828403121562001d0857600080fd5b8151620008328162001b5b565b60005b8381101562001d3257818101518382015260200162001d18565b83811115620015c85750506000910152565b6000825162001d5881846020870162001d15565b9190910192915050565b602081526000825180602084015262001d8381604085016020870162001d15565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe60a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a00336080604052600080546001600160a01b031916737109709ecfa91a80626ff3989d68f67f5b1dd12d17815560068190556007819055600a819055600b819055600c81905560128190556013553480156200005857600080fd5b5060405162001ed238038062001ed28339810160408190526200007b91620000e1565b600593909355600280546001600160a01b03199081166001600160a01b039485161790915560018054821692841692909217909155600380549091169190921617905562000135565b80516001600160a01b0381168114620000dc57600080fd5b919050565b60008060008060808587031215620000f857600080fd5b845193506200010a60208601620000c4565b92506200011a60408601620000c4565b91506200012a60608601620000c4565b905092959194509250565b611d8d80620001456000396000f3fe608060405234801561001057600080fd5b50600436106102765760003560e01c80637050ccd911610160578063a694fc3a116100d8578063df136d651161008c578063f106845411610071578063f10684541461050a578063f14faf6f146103c2578063f7c618c11461051357600080fd5b8063df136d65146104f8578063ebe2b12b1461050157600080fd5b8063c8f33c91116100bd578063c8f33c91146104df578063cd3daf9d146104e8578063d55a23f4146104f057600080fd5b8063a694fc3a146104b9578063c32e7202146104cc57600080fd5b806380faa57d1161012f5780638dcb4061116101145780638dcb406114610495578063901a7d531461049d5780639b7ccf4c146104a657600080fd5b806380faa57d1461046d5780638b8763471461047557600080fd5b80637050ccd9146103fb57806370a082311461040e57806372f702f3146104445780637b0a47ee1461046457600080fd5b806338d07436116101f3578063570ca735116101c25780635e43c47b116101a75780635e43c47b146103d657806363d38c3b146103e95780636c8bcee8146103f257600080fd5b8063570ca735146103a2578063590a41f5146103c257600080fd5b806338d07436146103615780633d18b9121461037457806340c354461461037c57806349f039a21461038f57600080fd5b80630fb5a6b41161024a5780631c1c6fe51161022f5780631c1c6fe514610322578063262d3d6d146103355780632ee409081461033e57600080fd5b80630fb5a6b41461031057806318160ddd1461031a57600080fd5b80628cc2621461027b5780630569d388146102a15780630700037d146102ab5780630f4ef8a6146102cb575b600080fd5b61028e610289366004611a42565b610533565b6040519081526020015b60405180910390f35b6102a96105cc565b005b61028e6102b9366004611a42565b600f6020526000908152604090205481565b6004546102eb9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610298565b61028e62093a8081565b600d5461028e565b6102a9610330366004611a6d565b6105da565b61028e600c5481565b61035161034c366004611a8a565b6105f8565b6040519015158152602001610298565b61035161036f366004611ab6565b61087f565b610351610aa7565b6102eb61038a366004611ae6565b610abc565b6102a961039d366004611a6d565b610af3565b6003546102eb9073ffffffffffffffffffffffffffffffffffffffff1681565b6103516103d0366004611ae6565b50600190565b6103516103e4366004611a42565b610b0d565b61028e600a5481565b61028e61033e81565b610351610409366004611aff565b610c07565b61028e61041c366004611a42565b73ffffffffffffffffffffffffffffffffffffffff1660009081526010602052604090205490565b6002546102eb9073ffffffffffffffffffffffffffffffffffffffff1681565b61028e60075481565b61028e610e88565b61028e610483366004611a42565b600e6020526000908152604090205481565b610351610e9b565b61028e600b5481565b6102a96104b4366004611ae6565b610f46565b6103516104c7366004611ae6565b61113f565b6103516104da366004611ab6565b611378565b61028e60085481565b60095461028e565b60115461028e565b61028e60095481565b61028e60065481565b61028e60055481565b6001546102eb9073ffffffffffffffffffffffffffffffffffffffff1681565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600f6020908152604080832054600e9092528220546105c691906105c090670de0b6b3a7640000906105ba9061058e9061058860095490565b9061156e565b73ffffffffffffffffffffffffffffffffffffffff881660009081526010602052604090205490611581565b9061158d565b90611599565b92915050565b6105d8601160006119ee565b565b336000908152601060205260409020546105f4908261087f565b5050565b60008273ffffffffffffffffffffffffffffffffffffffff8116156106595761062081610533565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600f6020908152604080832093909355600954600e909152919020555b600083116106c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f526577617264506f6f6c203a2043616e6e6f74207374616b652030000000000060448201526064015b60405180910390fd5b60005b60115481101561079057601181815481106106e8576106e8611b2d565b6000918252602090912001546040517fadc9772e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018790529091169063adc9772e90604401600060405180830381600087803b15801561076557600080fd5b505af1158015610779573d6000803e3d6000fd5b50505050808061078890611b8b565b9150506106cb565b50600d5461079e9084611599565b600d5573ffffffffffffffffffffffffffffffffffffffff84166000908152601060205260409020546107d19084611599565b73ffffffffffffffffffffffffffffffffffffffff80861660009081526010602052604090209190915560025461080b91163330866115a5565b8373ffffffffffffffffffffffffffffffffffffffff166013547e12ea37eafadc86c304798c357ee0b9923724f92be4e45c4796ccf0e33f84ce8560405161085591815260200190565b60405180910390a36001601360008282546108709190611bc4565b90915550600195945050505050565b60003380156108ca5761089181610533565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600f6020908152604080832093909355600954600e909152919020555b60008411610934576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f526577617264506f6f6c203a2043616e6e6f742077697468647261772030000060448201526064016106bf565b60005b6011548110156109fa576011818154811061095457610954611b2d565b6000918252602090912001546040517ff3fef3a30000000000000000000000000000000000000000000000000000000081523360048201526024810187905273ffffffffffffffffffffffffffffffffffffffff9091169063f3fef3a390604401600060405180830381600087803b1580156109cf57600080fd5b505af11580156109e3573d6000803e3d6000fd5b5050505080806109f290611b8b565b915050610937565b50600d54610a08908561156e565b600d5533600090815260106020526040902054610a25908561156e565b33600081815260106020526040902091909155600254610a5e9173ffffffffffffffffffffffffffffffffffffffff9091169086611687565b8215610a7157610a6f336001610c07565b505b6013546040518581523391907f5512f168a2a6322c28d70f2b2811c8857ea8b1f256d7be8ee8ef770665c3f96290602001610855565b6000610ab4336001610c07565b506001905090565b60118181548110610acc57600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b336000908152601060205260409020546105f49082611378565b600073ffffffffffffffffffffffffffffffffffffffff8216610b8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f217265776172642073657474696e67000000000000000000000000000000000060448201526064016106bf565b5060118054600180820183556000929092527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c680180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff939093169290921790915590565b60008273ffffffffffffffffffffffffffffffffffffffff811615610c6857610c2f81610533565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600f6020908152604080832093909355600954600e909152919020555b6000610c7385610533565b90508015610d495773ffffffffffffffffffffffffffffffffffffffff8086166000908152600f6020526040812055600154610cb191168683611687565b6003546005546040517f71192b17000000000000000000000000000000000000000000000000000000008152600481019190915273ffffffffffffffffffffffffffffffffffffffff878116602483015260448201849052909116906371192b1790606401600060405180830381600087803b158015610d3057600080fd5b505af1158015610d44573d6000803e3d6000fd5b505050505b8315610e125760005b601154811015610e105760118181548110610d6f57610d6f611b2d565b6000918252602090912001546040517fc00007b000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529091169063c00007b090602401600060405180830381600087803b158015610de557600080fd5b505af1158015610df9573d6000803e3d6000fd5b505050508080610e0890611b8b565b915050610d52565b505b8473ffffffffffffffffffffffffffffffffffffffff166013547fa7283f521536f3db5cd5c50a1f053bbba463b20de118ee0f9dd4c3ff2bc9532f83604051610e5d91815260200190565b60405180910390a3600160136000828254610e789190611bc4565b9091555060019695505050505050565b6000610e96426006546116e2565b905090565b6002546040517f70a08231000000000000000000000000000000000000000000000000000000008152336004820152600091829173ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa158015610f0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f329190611bdc565b9050610f3d8161113f565b50600191505090565b600054600154604080517f07546172000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169363ca669fa793169163075461729160048083019260209291908290030181865afa158015610fc0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe49190611bf5565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401600060405180830381600087803b15801561104a57600080fd5b505af115801561105e573d6000803e3d6000fd5b50506001546040517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810185905273ffffffffffffffffffffffffffffffffffffffff90911692506340c10f1991506044016020604051808303816000875af11580156110d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110fd9190611c12565b50600d541561113c57600d5461111b82670de0b6b3a7640000611c2f565b6111259190611c6c565b600960008282546111369190611bc4565b90915550505b50565b600033801561118a5761115181610533565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600f6020908152604080832093909355600954600e909152919020555b600083116111f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f526577617264506f6f6c203a2043616e6e6f74207374616b652030000000000060448201526064016106bf565b60005b6011548110156112ba576011818154811061121457611214611b2d565b6000918252602090912001546040517fadc9772e0000000000000000000000000000000000000000000000000000000081523360048201526024810186905273ffffffffffffffffffffffffffffffffffffffff9091169063adc9772e90604401600060405180830381600087803b15801561128f57600080fd5b505af11580156112a3573d6000803e3d6000fd5b5050505080806112b290611b8b565b9150506111f7565b50600d546112c89084611599565b600d55336000908152601060205260409020546112e59084611599565b3360008181526010602052604090209190915560025461131f9173ffffffffffffffffffffffffffffffffffffffff9091169030866115a5565b6013546040518481523391907e12ea37eafadc86c304798c357ee0b9923724f92be4e45c4796ccf0e33f84ce9060200160405180910390a360016013600082825461136a9190611bc4565b909155506001949350505050565b60003380156113c35761138a81610533565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600f6020908152604080832093909355600954600e909152919020555b60005b60115481101561148957601181815481106113e3576113e3611b2d565b6000918252602090912001546040517ff3fef3a30000000000000000000000000000000000000000000000000000000081523360048201526024810187905273ffffffffffffffffffffffffffffffffffffffff9091169063f3fef3a390604401600060405180830381600087803b15801561145e57600080fd5b505af1158015611472573d6000803e3d6000fd5b50505050808061148190611b8b565b9150506113c6565b50600d54611497908561156e565b600d55336000908152601060205260409020546114b4908561156e565b33600081815260106020526040908190209290925560035460055492517f14cd70e4000000000000000000000000000000000000000000000000000000008152600481019390935260248301879052604483019190915273ffffffffffffffffffffffffffffffffffffffff16906314cd70e490606401600060405180830381600087803b15801561154557600080fd5b505af1158015611559573d6000803e3d6000fd5b505050508215610a7157610a6f336001610c07565b600061157a8284611ca7565b9392505050565b600061157a8284611c2f565b600061157a8284611c6c565b600061157a8284611bc4565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526116819085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526116f8565b50505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526116dd9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016115ff565b505050565b60008183106116f1578161157a565b5090919050565b600061175a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166118049092919063ffffffff16565b8051909150156116dd57808060200190518101906117789190611c12565b6116dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016106bf565b6060611813848460008561181b565b949350505050565b6060824710156118ad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016106bf565b843b611915576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016106bf565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161193e9190611cea565b60006040518083038185875af1925050503d806000811461197b576040519150601f19603f3d011682016040523d82523d6000602084013e611980565b606091505b509150915061199082828661199b565b979650505050505050565b606083156119aa57508161157a565b8251156119ba5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106bf9190611d06565b508054600082559060005260206000209081019061113c91905b80821115611a1c5760008155600101611a08565b5090565b73ffffffffffffffffffffffffffffffffffffffff8116811461113c57600080fd5b600060208284031215611a5457600080fd5b813561157a81611a20565b801515811461113c57600080fd5b600060208284031215611a7f57600080fd5b813561157a81611a5f565b60008060408385031215611a9d57600080fd5b8235611aa881611a20565b946020939093013593505050565b60008060408385031215611ac957600080fd5b823591506020830135611adb81611a5f565b809150509250929050565b600060208284031215611af857600080fd5b5035919050565b60008060408385031215611b1257600080fd5b8235611b1d81611a20565b91506020830135611adb81611a5f565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611bbd57611bbd611b5c565b5060010190565b60008219821115611bd757611bd7611b5c565b500190565b600060208284031215611bee57600080fd5b5051919050565b600060208284031215611c0757600080fd5b815161157a81611a20565b600060208284031215611c2457600080fd5b815161157a81611a5f565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611c6757611c67611b5c565b500290565b600082611ca2577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600082821015611cb957611cb9611b5c565b500390565b60005b83811015611cd9578181015183820152602001611cc1565b838111156116815750506000910152565b60008251611cfc818460208701611cbe565b9190910192915050565b6020815260008251806020840152611d25816040850160208701611cbe565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea26469706673582212203f11f44bbbc8c8f79b251a573810815d0ad952cb93d7f9b03a3b1f9b4b5f088b64736f6c634300080a0033a264697066735822122044488a884b50168ddd6206e1b0e6f92b3a4c18569c421a05cd933000ca6bb7ec64736f6c634300080a0033"; - -type BoosterMockConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: BoosterMockConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class BoosterMock__factory extends ContractFactory { - constructor(...args: BoosterMockConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - _crv: string, - _cvx: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(_crv, _cvx, overrides || {}) as Promise; - } - override getDeployTransaction( - _crv: string, - _cvx: string, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(_crv, _cvx, overrides || {}); - } - override attach(address: string): BoosterMock { - return super.attach(address) as BoosterMock; - } - override connect(signer: Signer): BoosterMock__factory { - return super.connect(signer) as BoosterMock__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): BoosterMockInterface { - return new utils.Interface(_abi) as BoosterMockInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): BoosterMock { - return new Contract(address, _abi, signerOrProvider) as BoosterMock; - } -} diff --git a/src/types/factories/contracts/test/mocks/integrations/ConvexBoosterMock.sol/IBoosterMockEvents__factory.ts b/src/types/factories/contracts/test/mocks/integrations/ConvexBoosterMock.sol/IBoosterMockEvents__factory.ts deleted file mode 100644 index 1932bfed..00000000 --- a/src/types/factories/contracts/test/mocks/integrations/ConvexBoosterMock.sol/IBoosterMockEvents__factory.ts +++ /dev/null @@ -1,94 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import { Contract, Signer, utils } from "ethers"; -import type { Provider } from "@ethersproject/providers"; -import type { - IBoosterMockEvents, - IBoosterMockEventsInterface, -} from "../../../../../../contracts/test/mocks/integrations/ConvexBoosterMock.sol/IBoosterMockEvents"; - -const _abi = [ - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "index", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "user", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "poolid", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - indexed: false, - internalType: "bool", - name: "_stake", - type: "bool", - }, - ], - name: "Mock_Deposited", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "index", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "user", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "poolid", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "Mock_Withdrawn", - type: "event", - }, -]; - -export class IBoosterMockEvents__factory { - static readonly abi = _abi; - static createInterface(): IBoosterMockEventsInterface { - return new utils.Interface(_abi) as IBoosterMockEventsInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): IBoosterMockEvents { - return new Contract(address, _abi, signerOrProvider) as IBoosterMockEvents; - } -} diff --git a/src/types/factories/contracts/test/mocks/integrations/ConvexBoosterMock.sol/index.ts b/src/types/factories/contracts/test/mocks/integrations/ConvexBoosterMock.sol/index.ts deleted file mode 100644 index 827d161c..00000000 --- a/src/types/factories/contracts/test/mocks/integrations/ConvexBoosterMock.sol/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { BoosterMock__factory } from "./BoosterMock__factory"; -export { IBoosterMockEvents__factory } from "./IBoosterMockEvents__factory"; diff --git a/src/types/factories/contracts/test/mocks/integrations/ConvexClaimZapMock.sol/ClaimZapMock__factory.ts b/src/types/factories/contracts/test/mocks/integrations/ConvexClaimZapMock.sol/ClaimZapMock__factory.ts deleted file mode 100644 index 5b4b0f7a..00000000 --- a/src/types/factories/contracts/test/mocks/integrations/ConvexClaimZapMock.sol/ClaimZapMock__factory.ts +++ /dev/null @@ -1,187 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - ClaimZapMock, - ClaimZapMockInterface, -} from "../../../../../../contracts/test/mocks/integrations/ConvexClaimZapMock.sol/ClaimZapMock"; - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "_crv", - type: "address", - }, - { - internalType: "address", - name: "_cvx", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [ - { - internalType: "address[]", - name: "rewardContracts", - type: "address[]", - }, - { - internalType: "address[]", - name: "extraRewardContracts", - type: "address[]", - }, - { - internalType: "address[]", - name: "", - type: "address[]", - }, - { - internalType: "address[]", - name: "", - type: "address[]", - }, - { - internalType: "uint256", - name: "depositCrvMaxAmount", - type: "uint256", - }, - { - internalType: "uint256", - name: "minAmountOut", - type: "uint256", - }, - { - internalType: "uint256", - name: "depositCvxMaxAmount", - type: "uint256", - }, - { - internalType: "uint256", - name: "spendCvxAmount", - type: "uint256", - }, - { - internalType: "uint256", - name: "options", - type: "uint256", - }, - ], - name: "claimRewards", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "crv", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "cvx", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "getName", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "owner", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x60e060405234801561001057600080fd5b506040516108e73803806108e78339818101604052604081101561003357600080fd5b508051602090910151336080526001600160a01b0391821660a0521660c05260805160a05160c05161086661008160003960006103120152600061029b015260006102eb01526108666000f3fe608060405234801561001057600080fd5b50600436106100675760003560e01c80636a4874a1116100505780636a4874a1146102965780638da5cb5b146102e6578063923c1d611461030d57600080fd5b806317d7de7c1461006c5780635a7b87f214610115575b600080fd5b60408051808201909152600d81527f436c61696d5a61702056322e300000000000000000000000000000000000000060208201526040805160208082528351818301528351919283929083019185019080838360005b838110156100da5781810151838201526020016100c2565b50505050905090810190601f1680156101075780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610294600480360361012081101561012c57600080fd5b81019060208101813564010000000081111561014757600080fd5b82018360208201111561015957600080fd5b8035906020019184602083028401116401000000008311171561017b57600080fd5b91939092909160208101903564010000000081111561019957600080fd5b8201836020820111156101ab57600080fd5b803590602001918460208302840111640100000000831117156101cd57600080fd5b9193909290916020810190356401000000008111156101eb57600080fd5b8201836020820111156101fd57600080fd5b8035906020019184602083028401116401000000008311171561021f57600080fd5b91939092909160208101903564010000000081111561023d57600080fd5b82018360208201111561024f57600080fd5b8035906020019184602083028401116401000000008311171561027157600080fd5b919350915080359060208101359060408101359060608101359060800135610334565b005b6102bd7f000000000000000000000000000000000000000000000000000000000000000081565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6102bd7f000000000000000000000000000000000000000000000000000000000000000081565b6102bd7f000000000000000000000000000000000000000000000000000000000000000081565b60005b8c81101561040c578d8d8281811061035157610351610764565b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637050ccd93360016040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff168152602001821515815260200192505050600060405180830381600087803b1580156103e157600080fd5b505af11580156103f5573d6000803e3d6000fd5b50505050808061040490610793565b915050610337565b5060005b8a8110156104da578b8b8281811061042a5761042a610764565b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c00007b0336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b1580156104af57600080fd5b505af11580156104c3573d6000803e3d6000fd5b5050505080806104d290610793565b915050610410565b506104eb85858585600080876104fa565b50505050505050505050505050565b8615610551576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d8152602001806107f4603d913960400191505060405180910390fd5b85156105a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d8152602001806107f4603d913960400191505060405180910390fd5b84156105ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d8152602001806107f4603d913960400191505060405180910390fd5b8315610656576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d8152602001806107f4603d913960400191505060405180910390fd5b82156106ad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d8152602001806107f4603d913960400191505060405180910390fd5b8115610704576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d8152602001806107f4603d913960400191505060405180910390fd5b801561075b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d8152602001806107f4603d913960400191505060405180910390fd5b50505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156107ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fe436c61696d205a6170204d6f636b3a204e6f6e2d7a65726f20657874726120706172616d65746572207761732070617373656420746f20746172676574a2646970667358221220804b3364e3f1f3fdbeaae89a76796b90e4f98f99bcd43ed1c2f9bd27338d29d964736f6c634300080a0033"; - -type ClaimZapMockConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: ClaimZapMockConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class ClaimZapMock__factory extends ContractFactory { - constructor(...args: ClaimZapMockConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - _crv: string, - _cvx: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(_crv, _cvx, overrides || {}) as Promise; - } - override getDeployTransaction( - _crv: string, - _cvx: string, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(_crv, _cvx, overrides || {}); - } - override attach(address: string): ClaimZapMock { - return super.attach(address) as ClaimZapMock; - } - override connect(signer: Signer): ClaimZapMock__factory { - return super.connect(signer) as ClaimZapMock__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): ClaimZapMockInterface { - return new utils.Interface(_abi) as ClaimZapMockInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): ClaimZapMock { - return new Contract(address, _abi, signerOrProvider) as ClaimZapMock; - } -} diff --git a/src/types/factories/contracts/test/mocks/integrations/ConvexClaimZapMock.sol/index.ts b/src/types/factories/contracts/test/mocks/integrations/ConvexClaimZapMock.sol/index.ts index 98600d31..d0f49d39 100644 --- a/src/types/factories/contracts/test/mocks/integrations/ConvexClaimZapMock.sol/index.ts +++ b/src/types/factories/contracts/test/mocks/integrations/ConvexClaimZapMock.sol/index.ts @@ -1,5 +1,4 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ -export { ClaimZapMock__factory } from "./ClaimZapMock__factory"; export { IBasicRewards__factory } from "./IBasicRewards__factory"; diff --git a/src/types/factories/contracts/test/mocks/integrations/ConvexExtraRewardPoolMock.sol/ExtraRewardPoolMock__factory.ts b/src/types/factories/contracts/test/mocks/integrations/ConvexExtraRewardPoolMock.sol/ExtraRewardPoolMock__factory.ts deleted file mode 100644 index 43aa4c45..00000000 --- a/src/types/factories/contracts/test/mocks/integrations/ConvexExtraRewardPoolMock.sol/ExtraRewardPoolMock__factory.ts +++ /dev/null @@ -1,558 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - ExtraRewardPoolMock, - ExtraRewardPoolMockInterface, -} from "../../../../../../contracts/test/mocks/integrations/ConvexExtraRewardPoolMock.sol/ExtraRewardPoolMock"; - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "deposit_", - type: "address", - }, - { - internalType: "address", - name: "reward_", - type: "address", - }, - { - internalType: "address", - name: "op_", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "index", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "user", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "reward", - type: "uint256", - }, - ], - name: "Mock_ExtraRewardPaid", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "index", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "user", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "Mock_ExtraStaked", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "index", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "user", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "Mock_ExtraWithdrawn", - type: "event", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "addRewardAmount", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "currentRewards", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "deposits", - outputs: [ - { - internalType: "contract IDeposit", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "donate", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "duration", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "earned", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "getReward", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - ], - name: "getReward", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "historicalRewards", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "lastUpdateTime", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "newRewardRatio", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "operator", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "periodFinish", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "queueNewRewards", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "queuedRewards", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "rewardPerToken", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "rewardPerTokenStored", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "rewardRate", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "rewardToken", - outputs: [ - { - internalType: "contract ERC20Mock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "rewards", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "stake", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "totalSupply", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "userRewardPerTokenPaid", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "withdraw", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, -]; - -const _bytecode = - "0x6080604052600180546001600160a01b031916737109709ecfa91a80626ff3989d68f67f5b1dd12d17905560006004819055600581905560088190556009819055600a819055600d819055600e5534801561005957600080fd5b50604051611127380380611127833981016040819052610078916100d6565b600080546001600160a01b039485166001600160a01b031991821617909155600280549385169382169390931790925560038054919093169116179055610119565b80516001600160a01b03811681146100d157600080fd5b919050565b6000806000606084860312156100eb57600080fd5b6100f4846100ba565b9250610102602085016100ba565b9150610110604085016100ba565b90509250925092565b610fff806101286000396000f3fe608060405234801561001057600080fd5b50600436106101a25760003560e01c80637b0a47ee116100ee578063c8f33c9111610097578063ebe2b12b11610071578063ebe2b12b14610345578063f14faf6f14610285578063f3fef3a31461034e578063f7c618c11461036157600080fd5b8063c8f33c911461032b578063cd3daf9d14610334578063df136d651461033c57600080fd5b80639b7ccf4c116100c85780639b7ccf4c146102f0578063adc9772e14610305578063c00007b01461031857600080fd5b80637b0a47ee146102be5780638b876347146102c7578063901a7d53146102e757600080fd5b80633d18b9121161015057806363d38c3b1161012a57806363d38c3b146102995780636c8bcee8146102a257806370a08231146102ab57600080fd5b80633d18b9121461024d578063570ca73514610265578063590a41f51461028557600080fd5b806318160ddd1161018157806318160ddd146101f7578063262d3d6d146101ff578063323a5e0b1461020857600080fd5b80628cc262146101a75780630700037d146101cd5780630fb5a6b4146101ed575b600080fd5b6101ba6101b5366004610d9c565b610381565b6040519081526020015b60405180910390f35b6101ba6101db366004610d9c565b600c6020526000908152604090205481565b6101ba62093a8081565b6101ba6103fd565b6101ba600a5481565b6000546102289073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101c4565b610255610494565b60405190151581526020016101c4565b6003546102289073ffffffffffffffffffffffffffffffffffffffff1681565b610255610293366004610db9565b50600190565b6101ba60085481565b6101ba61033e81565b6101ba6102b9366004610d9c565b6104a7565b6101ba60055481565b6101ba6102d5366004610d9c565b600b6020526000908152604090205481565b6101ba60095481565b6103036102fe366004610db9565b61053c565b005b610255610313366004610dd2565b61073f565b610255610326366004610d9c565b610815565b6101ba60065481565b6007546101ba565b6101ba60075481565b6101ba60045481565b61025561035c366004610dd2565b61090a565b6002546102289073ffffffffffffffffffffffffffffffffffffffff1681565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600c6020908152604080832054600b9092528220546103f791906103f190670de0b6b3a7640000906103eb906103dc906103d660075490565b906109b6565b6103e5886104a7565b906109c9565b906109d5565b906109e1565b92915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561046b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048f9190610dfe565b905090565b600061049f33610815565b506001905090565b600080546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152909116906370a0823190602401602060405180830381865afa158015610518573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103f79190610dfe565b600154600254604080517f07546172000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169363ca669fa793169163075461729160048083019260209291908290030181865afa1580156105b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105da9190610e17565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401600060405180830381600087803b15801561064057600080fd5b505af1158015610654573d6000803e3d6000fd5b50506002546040517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810185905273ffffffffffffffffffffffffffffffffffffffff90911692506340c10f1991506044016020604051808303816000875af11580156106cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f39190610e34565b506106fc6103fd565b1561073c576107096103fd565b61071b82670de0b6b3a7640000610e85565b6107259190610ec2565b600760008282546107369190610efd565b90915550505b50565b60008273ffffffffffffffffffffffffffffffffffffffff8116156107a05761076781610381565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600c6020908152604080832093909355600754600b909152919020555b8373ffffffffffffffffffffffffffffffffffffffff16600e547fd198b93c3f48daa3d45cc61906c9e4716488eeb15e548a75d758b920def2594b856040516107eb91815260200190565b60405180910390a36001600e60008282546108069190610efd565b90915550600195945050505050565b60008173ffffffffffffffffffffffffffffffffffffffff8116156108765761083d81610381565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600c6020908152604080832093909355600754600b909152919020555b600061088184610381565b905080156108bf5773ffffffffffffffffffffffffffffffffffffffff8085166000908152600c60205260408120556002546108bf911685836109ed565b8373ffffffffffffffffffffffffffffffffffffffff16600e547f7f6ed0d42a688c853d54c432db2c486796be01babc08c81d92cc84fac254e53a836040516107eb91815260200190565b60008273ffffffffffffffffffffffffffffffffffffffff81161561096b5761093281610381565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600c6020908152604080832093909355600754600b909152919020555b8373ffffffffffffffffffffffffffffffffffffffff16600e547f13da9d660b9991f6835852ad20002cecf1c4664a804c5b315539e1f8934c56df856040516107eb91815260200190565b60006109c28284610f15565b9392505050565b60006109c28284610e85565b60006109c28284610ec2565b60006109c28284610efd565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610a7a908490610a7f565b505050565b6000610ae1826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16610b909092919063ffffffff16565b805190915015610a7a5780806020019051810190610aff9190610e34565b610a7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6060610b9f8484600085610ba7565b949350505050565b606082471015610c39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610b87565b843b610ca1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610b87565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051610cca9190610f5c565b60006040518083038185875af1925050503d8060008114610d07576040519150601f19603f3d011682016040523d82523d6000602084013e610d0c565b606091505b5091509150610d1c828286610d27565b979650505050505050565b60608315610d365750816109c2565b825115610d465782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b879190610f78565b73ffffffffffffffffffffffffffffffffffffffff8116811461073c57600080fd5b600060208284031215610dae57600080fd5b81356109c281610d7a565b600060208284031215610dcb57600080fd5b5035919050565b60008060408385031215610de557600080fd5b8235610df081610d7a565b946020939093013593505050565b600060208284031215610e1057600080fd5b5051919050565b600060208284031215610e2957600080fd5b81516109c281610d7a565b600060208284031215610e4657600080fd5b815180151581146109c257600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610ebd57610ebd610e56565b500290565b600082610ef8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60008219821115610f1057610f10610e56565b500190565b600082821015610f2757610f27610e56565b500390565b60005b83811015610f47578181015183820152602001610f2f565b83811115610f56576000848401525b50505050565b60008251610f6e818460208701610f2c565b9190910192915050565b6020815260008251806020840152610f97816040850160208701610f2c565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea26469706673582212203edf2b496d59cc45e2c69e6980d4fa131b9a2d1fbf9bede11ec63d2d8cd65bfc64736f6c634300080a0033"; - -type ExtraRewardPoolMockConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: ExtraRewardPoolMockConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class ExtraRewardPoolMock__factory extends ContractFactory { - constructor(...args: ExtraRewardPoolMockConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - deposit_: string, - reward_: string, - op_: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - deposit_, - reward_, - op_, - overrides || {} - ) as Promise; - } - override getDeployTransaction( - deposit_: string, - reward_: string, - op_: string, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(deposit_, reward_, op_, overrides || {}); - } - override attach(address: string): ExtraRewardPoolMock { - return super.attach(address) as ExtraRewardPoolMock; - } - override connect(signer: Signer): ExtraRewardPoolMock__factory { - return super.connect(signer) as ExtraRewardPoolMock__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): ExtraRewardPoolMockInterface { - return new utils.Interface(_abi) as ExtraRewardPoolMockInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): ExtraRewardPoolMock { - return new Contract(address, _abi, signerOrProvider) as ExtraRewardPoolMock; - } -} diff --git a/src/types/factories/contracts/test/mocks/integrations/ConvexExtraRewardPoolMock.sol/IExtraRewardPoolMockEvents__factory.ts b/src/types/factories/contracts/test/mocks/integrations/ConvexExtraRewardPoolMock.sol/IExtraRewardPoolMockEvents__factory.ts deleted file mode 100644 index f8dd481e..00000000 --- a/src/types/factories/contracts/test/mocks/integrations/ConvexExtraRewardPoolMock.sol/IExtraRewardPoolMockEvents__factory.ts +++ /dev/null @@ -1,105 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import { Contract, Signer, utils } from "ethers"; -import type { Provider } from "@ethersproject/providers"; -import type { - IExtraRewardPoolMockEvents, - IExtraRewardPoolMockEventsInterface, -} from "../../../../../../contracts/test/mocks/integrations/ConvexExtraRewardPoolMock.sol/IExtraRewardPoolMockEvents"; - -const _abi = [ - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "index", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "user", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "reward", - type: "uint256", - }, - ], - name: "Mock_ExtraRewardPaid", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "index", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "user", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "Mock_ExtraStaked", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "index", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "user", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "Mock_ExtraWithdrawn", - type: "event", - }, -]; - -export class IExtraRewardPoolMockEvents__factory { - static readonly abi = _abi; - static createInterface(): IExtraRewardPoolMockEventsInterface { - return new utils.Interface(_abi) as IExtraRewardPoolMockEventsInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): IExtraRewardPoolMockEvents { - return new Contract( - address, - _abi, - signerOrProvider - ) as IExtraRewardPoolMockEvents; - } -} diff --git a/src/types/factories/contracts/test/mocks/integrations/ConvexExtraRewardPoolMock.sol/VirtualBalanceWrapper__factory.ts b/src/types/factories/contracts/test/mocks/integrations/ConvexExtraRewardPoolMock.sol/VirtualBalanceWrapper__factory.ts deleted file mode 100644 index 2bf2802b..00000000 --- a/src/types/factories/contracts/test/mocks/integrations/ConvexExtraRewardPoolMock.sol/VirtualBalanceWrapper__factory.ts +++ /dev/null @@ -1,186 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - VirtualBalanceWrapper, - VirtualBalanceWrapperInterface, -} from "../../../../../../contracts/test/mocks/integrations/ConvexExtraRewardPoolMock.sol/VirtualBalanceWrapper"; - -const _abi = [ - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "index", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "user", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "reward", - type: "uint256", - }, - ], - name: "Mock_ExtraRewardPaid", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "index", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "user", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "Mock_ExtraStaked", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "index", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "user", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "Mock_ExtraWithdrawn", - type: "event", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "deposits", - outputs: [ - { - internalType: "contract IDeposit", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "totalSupply", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x608060405234801561001057600080fd5b50610277806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806318160ddd14610046578063323a5e0b1461006157806370a08231146100a6575b600080fd5b61004e6100b9565b6040519081526020015b60405180910390f35b6000546100819073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610058565b61004e6100b43660046101eb565b610150565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610127573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061014b9190610228565b905090565b600080546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152909116906370a0823190602401602060405180830381865afa1580156101c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101e59190610228565b92915050565b6000602082840312156101fd57600080fd5b813573ffffffffffffffffffffffffffffffffffffffff8116811461022157600080fd5b9392505050565b60006020828403121561023a57600080fd5b505191905056fea26469706673582212204705deaccf00a2326fe7c3e1cf95a1a4e9c7f4a16b082b600151ea0d707c247664736f6c634300080a0033"; - -type VirtualBalanceWrapperConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: VirtualBalanceWrapperConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class VirtualBalanceWrapper__factory extends ContractFactory { - constructor(...args: VirtualBalanceWrapperConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): VirtualBalanceWrapper { - return super.attach(address) as VirtualBalanceWrapper; - } - override connect(signer: Signer): VirtualBalanceWrapper__factory { - return super.connect(signer) as VirtualBalanceWrapper__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): VirtualBalanceWrapperInterface { - return new utils.Interface(_abi) as VirtualBalanceWrapperInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): VirtualBalanceWrapper { - return new Contract( - address, - _abi, - signerOrProvider - ) as VirtualBalanceWrapper; - } -} diff --git a/src/types/factories/contracts/test/mocks/integrations/ConvexExtraRewardPoolMock.sol/index.ts b/src/types/factories/contracts/test/mocks/integrations/ConvexExtraRewardPoolMock.sol/index.ts deleted file mode 100644 index df5466c4..00000000 --- a/src/types/factories/contracts/test/mocks/integrations/ConvexExtraRewardPoolMock.sol/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { ExtraRewardPoolMock__factory } from "./ExtraRewardPoolMock__factory"; -export { IExtraRewardPoolMockEvents__factory } from "./IExtraRewardPoolMockEvents__factory"; -export { VirtualBalanceWrapper__factory } from "./VirtualBalanceWrapper__factory"; diff --git a/src/types/factories/contracts/test/mocks/integrations/ConvexTokenRewardContractMock.sol/TokenRewardContractMock__factory.ts b/src/types/factories/contracts/test/mocks/integrations/ConvexTokenRewardContractMock.sol/TokenRewardContractMock__factory.ts deleted file mode 100644 index ffffb184..00000000 --- a/src/types/factories/contracts/test/mocks/integrations/ConvexTokenRewardContractMock.sol/TokenRewardContractMock__factory.ts +++ /dev/null @@ -1,345 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - TokenRewardContractMock, - TokenRewardContractMockInterface, -} from "../../../../../../contracts/test/mocks/integrations/ConvexTokenRewardContractMock.sol/TokenRewardContractMock"; - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "deposit_", - type: "address", - }, - { - internalType: "address", - name: "op_", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "index", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "user", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "reward", - type: "uint256", - }, - ], - name: "Mock_ExtraRewardPaid", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "index", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "user", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "Mock_ExtraStaked", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "index", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "user", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "Mock_ExtraWithdrawn", - type: "event", - }, - { - inputs: [ - { - internalType: "address", - name: "token", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "addRewardAmount", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "deposits", - outputs: [ - { - internalType: "contract IDeposit", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "duration", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - { - internalType: "address", - name: "_token", - type: "address", - }, - ], - name: "getReward", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_token", - type: "address", - }, - ], - name: "getReward", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "operator", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "stake", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "totalSupply", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "withdraw", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "pure", - type: "function", - }, -]; - -const _bytecode = - "0x6080604052600180546001600160a01b031916737109709ecfa91a80626ff3989d68f67f5b1dd12d17905534801561003657600080fd5b50604051610bf4380380610bf4833981016040819052610055916100a2565b600080546001600160a01b039384166001600160a01b031991821617909155600280549290931691161790556100d5565b80516001600160a01b038116811461009d57600080fd5b919050565b600080604083850312156100b557600080fd5b6100be83610086565b91506100cc60208401610086565b90509250929050565b610b10806100e46000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c80636b42e66a11610076578063adc9772e1161005b578063adc9772e14610198578063c00007b0146101ae578063f3fef3a31461019857600080fd5b80636b42e66a1461017057806370a082311461018557600080fd5b8063323a5e0b116100a7578063323a5e0b146100e8578063570ca7351461012d5780636b0916951461014d57600080fd5b80630fb5a6b4146100c357806318160ddd146100e0575b600080fd5b6100cd62093a8081565b6040519081526020015b60405180910390f35b6100cd6101c1565b6000546101089073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100d7565b6002546101089073ffffffffffffffffffffffffffffffffffffffff1681565b61016061015b366004610924565b610258565b60405190151581526020016100d7565b61018361017e36600461095d565b6102bf565b005b6100cd610193366004610989565b6104c0565b6101606101a636600461095d565b600192915050565b6101606101bc366004610989565b61055b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561022f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061025391906109a6565b905090565b73ffffffffffffffffffffffffffffffffffffffff811660009081526003602052604081205480156102b55773ffffffffffffffffffffffffffffffffffffffff83166000818152600360205260408120556102b5908583610570565b5060019392505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ca669fa78373ffffffffffffffffffffffffffffffffffffffff1663075461726040518163ffffffff1660e01b8152600401602060405180830381865afa158015610348573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061036c91906109bf565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401600060405180830381600087803b1580156103d257600080fd5b505af11580156103e6573d6000803e3d6000fd5b50506040517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810184905273ffffffffffffffffffffffffffffffffffffffff851692506340c10f1991506044016020604051808303816000875af115801561045d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048191906109dc565b5073ffffffffffffffffffffffffffffffffffffffff8216600090815260036020526040812080548392906104b79084906109fe565b90915550505050565b600080546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152909116906370a0823190602401602060405180830381865afa158015610531573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055591906109a6565b92915050565b60006105673383610258565b50600192915050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526105fd908490610602565b505050565b6000610664826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166107139092919063ffffffff16565b8051909150156105fd578080602001905181019061068291906109dc565b6105fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6060610722848460008561072c565b90505b9392505050565b6060824710156107be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c0000000000000000000000000000000000000000000000000000606482015260840161070a565b843b610826576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161070a565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161084f9190610a6d565b60006040518083038185875af1925050503d806000811461088c576040519150601f19603f3d011682016040523d82523d6000602084013e610891565b606091505b50915091506108a18282866108ac565b979650505050505050565b606083156108bb575081610725565b8251156108cb5782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070a9190610a89565b73ffffffffffffffffffffffffffffffffffffffff8116811461092157600080fd5b50565b6000806040838503121561093757600080fd5b8235610942816108ff565b91506020830135610952816108ff565b809150509250929050565b6000806040838503121561097057600080fd5b823561097b816108ff565b946020939093013593505050565b60006020828403121561099b57600080fd5b8135610725816108ff565b6000602082840312156109b857600080fd5b5051919050565b6000602082840312156109d157600080fd5b8151610725816108ff565b6000602082840312156109ee57600080fd5b8151801515811461072557600080fd5b60008219821115610a38577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500190565b60005b83811015610a58578181015183820152602001610a40565b83811115610a67576000848401525b50505050565b60008251610a7f818460208701610a3d565b9190910192915050565b6020815260008251806020840152610aa8816040850160208701610a3d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea26469706673582212204596b0ce7c8237b2db420876fc95b273d09200ff4edcfead35e0b6e715065a7f64736f6c634300080a0033"; - -type TokenRewardContractMockConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: TokenRewardContractMockConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class TokenRewardContractMock__factory extends ContractFactory { - constructor(...args: TokenRewardContractMockConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - deposit_: string, - op_: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - deposit_, - op_, - overrides || {} - ) as Promise; - } - override getDeployTransaction( - deposit_: string, - op_: string, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(deposit_, op_, overrides || {}); - } - override attach(address: string): TokenRewardContractMock { - return super.attach(address) as TokenRewardContractMock; - } - override connect(signer: Signer): TokenRewardContractMock__factory { - return super.connect(signer) as TokenRewardContractMock__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): TokenRewardContractMockInterface { - return new utils.Interface(_abi) as TokenRewardContractMockInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): TokenRewardContractMock { - return new Contract( - address, - _abi, - signerOrProvider - ) as TokenRewardContractMock; - } -} diff --git a/src/types/factories/contracts/test/mocks/integrations/ConvexTokenRewardContractMock.sol/index.ts b/src/types/factories/contracts/test/mocks/integrations/ConvexTokenRewardContractMock.sol/index.ts deleted file mode 100644 index 57cb5cd0..00000000 --- a/src/types/factories/contracts/test/mocks/integrations/ConvexTokenRewardContractMock.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { TokenRewardContractMock__factory } from "./TokenRewardContractMock__factory"; diff --git a/src/types/factories/contracts/test/mocks/integrations/CurveV1MetapoolMock__factory.ts b/src/types/factories/contracts/test/mocks/integrations/CurveV1MetapoolMock__factory.ts deleted file mode 100644 index 890a7674..00000000 --- a/src/types/factories/contracts/test/mocks/integrations/CurveV1MetapoolMock__factory.ts +++ /dev/null @@ -1,747 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - CurveV1MetapoolMock, - CurveV1MetapoolMockInterface, -} from "../../../../../contracts/test/mocks/integrations/CurveV1MetapoolMock"; - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "_token0", - type: "address", - }, - { - internalType: "address", - name: "_basePool", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "A", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "A_precise", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "admin", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "admin_balances", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "admin_fee", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "allowance", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - ], - name: "balances", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "i", - type: "uint256", - }, - ], - name: "balances", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "basePool", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "block_timestamp_last", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "int128", - name: "coin", - type: "int128", - }, - ], - name: "calc_withdraw_one_coin", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - ], - name: "coins", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "i", - type: "uint256", - }, - ], - name: "coins", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "decimals", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "int128", - name: "j", - type: "int128", - }, - { - internalType: "uint256", - name: "dx", - type: "uint256", - }, - { - internalType: "uint256", - name: "min_dy", - type: "uint256", - }, - ], - name: "exchange", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "int128", - name: "j", - type: "int128", - }, - { - internalType: "uint256", - name: "dx", - type: "uint256", - }, - { - internalType: "uint256", - name: "min_dy", - type: "uint256", - }, - ], - name: "exchange_underlying", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "fee", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "future_A", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "future_A_time", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "int128", - name: "j", - type: "int128", - }, - { - internalType: "uint256", - name: "dx", - type: "uint256", - }, - ], - name: "get_dy", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "int128", - name: "j", - type: "int128", - }, - { - internalType: "uint256", - name: "dx", - type: "uint256", - }, - ], - name: "get_dy_underlying", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "get_virtual_price", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "initial_A", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "initial_A_time", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "lp_token", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_token_amount", - type: "uint256", - }, - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "uint256", - name: "min_amount", - type: "uint256", - }, - ], - name: "remove_liquidity_one_coin", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "int128", - name: "j", - type: "int128", - }, - { - internalType: "uint256", - name: "rate_RAY", - type: "uint256", - }, - ], - name: "setRate", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "int128", - name: "j", - type: "int128", - }, - { - internalType: "uint256", - name: "rate_RAY", - type: "uint256", - }, - ], - name: "setRateUnderlying", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "uint256", - name: "rate_RAY", - type: "uint256", - }, - ], - name: "setWithdrawRate", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_price", - type: "uint256", - }, - ], - name: "set_virtual_price", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "symbol", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "token", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "totalSupply", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - ], - name: "underlying_coins", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "i", - type: "uint256", - }, - ], - name: "underlying_coins", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "virtualPrice", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x60806040523480156200001157600080fd5b506040516200329438038062003294833981016040819052620000349162000222565b6002805460018101825560008290527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319166001600160a01b038581169190911790915560408051637e062a3560e11b815290519184169163fc0c546a916004808201926020929091908290030181865afa158015620000c3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e991906200025a565b81546001810183556000928352602083200180546001600160a01b0319166001600160a01b03929092169190911790556040516012906200012a90620001f7565b6060808252600790820152664352564d6f636b60c81b608082015260a0602082018190526015908201527f43525620666f72204375727665506f6f6c4d6f636b000000000000000000000060c082015260ff909116604082015260e001604051809103906000f080158015620001a4573d6000803e3d6000fd5b50600080546001600160a01b039283166001600160a01b03199182168117909255600180548216909217909155670de0b6b3a76400006007556003805494909216931692909217909155506200027f9050565b6117588062001b3c83390190565b80516001600160a01b03811681146200021d57600080fd5b919050565b600080604083850312156200023657600080fd5b620002418362000205565b9150620002516020840162000205565b90509250929050565b6000602082840312156200026d57600080fd5b620002788262000205565b9392505050565b6118ad806200028f6000396000f3fe608060405234801561001057600080fd5b50600436106102925760003560e01c806382c6306611610160578063c531e24f116100d8578063e2e7d2641161008c578063f851a44011610071578063f851a440146104bd578063fc0c546a146104c4578063fee3f7f9146102ea57600080fd5b8063e2e7d264146104af578063f446c1d0146102ea57600080fd5b8063cc2b27d7116100bd578063cc2b27d714610486578063dd62ed3e14610499578063ddca3f43146102ea57600080fd5b8063c531e24f14610453578063c66106571461047357600080fd5b8063b4b577ad1161012f578063b91434d111610114578063b91434d114610425578063b9947eb014610438578063bb7b8b801461044b57600080fd5b8063b4b577ad146102ea578063b739953e1461041257600080fd5b806382c63066146103d65780638ea875f3146103f657806395d89b41146102bd578063a6417ed6146103ff57600080fd5b80633df021241161020e57806363543f06116101c257806371035418116101a7578063710354181461039e57806376a2f0f0146102ea5780637b475b68146103b157600080fd5b806363543f06146102ea57806370a082311461038a57600080fd5b80635409491a116101f35780635409491a146102ea57806356ac3503146103645780635e0d443f1461037757600080fd5b80633df021241461033e5780634903b0d11461035157600080fd5b806318160ddd116102655780632081066c1161024a5780632081066c146102ea57806323746eb814610306578063313ce567146102ea57600080fd5b806318160ddd146102ea5780631a4d01d2146102f157600080fd5b8063065a80d81461029757806306fdde03146102bd57806307211ef7146102d757806314052288146102ea575b600080fd5b6102aa6102a5366004611468565b6104e4565b6040519081526020015b60405180910390f35b604080516020810182526000815290516102b491906114af565b6102aa6102e5366004611500565b610507565b60006102aa565b6103046102ff36600461153c565b610557565b005b610319610314366004611468565b61064b565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102b4565b61030461034c366004611561565b61069a565b6102aa61035f3660046115a3565b6107c4565b610304610372366004611500565b610874565b6102aa610385366004611500565b6108d5565b6102aa6103983660046115e1565b50600090565b6103046103ac3660046115a3565b600755565b6103046103bf3660046115fe565b600f9190910b600090815260066020526040902055565b6001546103199073ffffffffffffffffffffffffffffffffffffffff1681565b6102aa60075481565b61030461040d366004611561565b610911565b610319610420366004611468565b610daf565b610304610433366004611500565b610e70565b6103196104463660046115a3565b610ed1565b6007546102aa565b6003546103199073ffffffffffffffffffffffffffffffffffffffff1681565b6103196104813660046115a3565b610f15565b6102aa610494366004611628565b610f2a565b6102aa6104a7366004611654565b600092915050565b6102aa6103983660046115a3565b6000610319565b6000546103199073ffffffffffffffffffffffffffffffffffffffff1681565b6000610501826fffffffffffffffffffffffffffffffff166107c4565b92915050565b600f83810b60009081526005602090815260408083209386900b8352929052908120546b033b2e3c9fd0803ce8000000906105439084906116bc565b61054d91906116f9565b90505b9392505050565b6000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810185905273ffffffffffffffffffffffffffffffffffffffff909116906379cc6790906044016020604051808303816000875af11580156105ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f29190611734565b5061064633826002856fffffffffffffffffffffffffffffffff168154811061061d5761061d611756565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169190610f60565b505050565b60006002826fffffffffffffffffffffffffffffffff168154811061067257610672611756565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1692915050565b60006106a78585856108d5565b90508181101561073e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f437572766556314d6f636b3a20494e53554646494349454e545f4f555450555460448201527f5f414d4f554e540000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6107933330856002896fffffffffffffffffffffffffffffffff168154811061076957610769611756565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16929190611034565b6107bd33826002876fffffffffffffffffffffffffffffffff168154811061061d5761061d611756565b5050505050565b6000600282815481106107d9576107d9611756565b6000918252602090912001546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa158015610850573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105019190611785565b600f83810b60009081526005602090815260408083209386900b8352929052208190556108ad6b033b2e3c9fd0803ce800000082611098565b600f92830b60009081526005602090815260408083209690950b825294909452919092205550565b600f83810b60009081526004602090815260408083209386900b8352929052908120546b033b2e3c9fd0803ce8000000906105439084906116bc565b83600f0b600014156109e157600260008154811061093157610931611756565b6000918252602090912001546040517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201523060248201526044810184905273ffffffffffffffffffffffffffffffffffffffff909116906323b872dd906064016020604051808303816000875af11580156109b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109db9190611734565b50610aa1565b60006109fe856fffffffffffffffffffffffffffffffff16610ed1565b6040517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201523060248201526044810185905290915073ffffffffffffffffffffffffffffffffffffffff8216906323b872dd906064016020604051808303816000875af1158015610a7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a9e9190611734565b50505b60008085600f0b13610ab4576000610ab7565b60015b905060008085600f0b13610acc576000610acf565b60015b90506000610ade8383876108d5565b90506000610aed888888610507565b905084811015610b7f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f437572766556314d6f636b3a20494e53554646494349454e545f4f555450555460448201527f5f414d4f554e54000000000000000000000000000000000000000000000000006064820152608401610735565b86600f0b60001415610c49576002600081548110610b9f57610b9f611756565b6000918252602090912001546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201526024810183905273ffffffffffffffffffffffffffffffffffffffff9091169063a9059cbb906044016020604051808303816000875af1158015610c1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c439190611734565b50610da5565b6000610c66886fffffffffffffffffffffffffffffffff16610ed1565b60035490915073ffffffffffffffffffffffffffffffffffffffff16631a4d01d284610c9360018c61179e565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526004810192909252600f0b602482015260448101859052606401600060405180830381600087803b158015610cf357600080fd5b505af1158015610d07573d6000803e3d6000fd5b50506040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201526024810185905273ffffffffffffffffffffffffffffffffffffffff8416925063a9059cbb91506044016020604051808303816000875af1158015610d7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da29190611734565b50505b5050505050505050565b600081600f0b60001415610dd157600260008154811061067257610672611756565b60035473ffffffffffffffffffffffffffffffffffffffff1663c6610657610e0c60016fffffffffffffffffffffffffffffffff861661180f565b6040518263ffffffff1660e01b8152600401610e2a91815260200190565b602060405180830381865afa158015610e47573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105019190611826565b919050565b600f83810b60009081526004602090815260408083209386900b835292905220819055610ea96b033b2e3c9fd0803ce800000082611098565b600f92830b60009081526004602090815260408083209690950b825294909452919092205550565b600081610eec57600260008154811061067257610672611756565b60035473ffffffffffffffffffffffffffffffffffffffff1663c6610657610e0c60018561180f565b60006002828154811061067257610672611756565b600f81900b6000908152600660205260408120546b033b2e3c9fd0803ce800000090610f5690856116bc565b61055091906116f9565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526106469084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526111fe565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526110929085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401610fb2565b50505050565b60408051808201909152600281527f4d33000000000000000000000000000000000000000000000000000000000000602082015260009082611107576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073591906114af565b5060006111156002846116f9565b90506b033b2e3c9fd0803ce800000061114e827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61180f565b61115891906116f9565b8411156040518060400160405280600281526020017f4d31000000000000000000000000000000000000000000000000000000000000815250906111c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073591906114af565b5082816111e26b033b2e3c9fd0803ce8000000876116bc565b6111ec9190611843565b6111f691906116f9565b949350505050565b6000611260826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661130a9092919063ffffffff16565b805190915015610646578080602001905181019061127e9190611734565b610646576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610735565b606061054d848460008585843b61137d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610735565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516113a6919061185b565b60006040518083038185875af1925050503d80600081146113e3576040519150601f19603f3d011682016040523d82523d6000602084013e6113e8565b606091505b50915091506113f8828286611403565b979650505050505050565b60608315611412575081610550565b8251156114225782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073591906114af565b8035600f81900b8114610e6b57600080fd5b60006020828403121561147a57600080fd5b61055082611456565b60005b8381101561149e578181015183820152602001611486565b838111156110925750506000910152565b60208152600082518060208401526114ce816040850160208701611483565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b60008060006060848603121561151557600080fd5b61151e84611456565b925061152c60208501611456565b9150604084013590509250925092565b60008060006060848603121561155157600080fd5b8335925061152c60208501611456565b6000806000806080858703121561157757600080fd5b61158085611456565b935061158e60208601611456565b93969395505050506040820135916060013590565b6000602082840312156115b557600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff811681146115de57600080fd5b50565b6000602082840312156115f357600080fd5b8135610550816115bc565b6000806040838503121561161157600080fd5b61161a83611456565b946020939093013593505050565b6000806040838503121561163b57600080fd5b8235915061164b60208401611456565b90509250929050565b6000806040838503121561166757600080fd5b8235611672816115bc565b91506020830135611682816115bc565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156116f4576116f461168d565b500290565b60008261172f577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60006020828403121561174657600080fd5b8151801515811461055057600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561179757600080fd5b5051919050565b600081600f0b83600f0b60008112817fffffffffffffffffffffffffffffffff80000000000000000000000000000000018312811516156117e1576117e161168d565b816f7fffffffffffffffffffffffffffffff0183138116156118055761180561168d565b5090039392505050565b6000828210156118215761182161168d565b500390565b60006020828403121561183857600080fd5b8151610550816115bc565b600082198211156118565761185661168d565b500190565b6000825161186d818460208701611483565b919091019291505056fea264697066735822122003bb569820a08cb24f2e28d9f88e09bbb1ba6be2f41ea54f1d153e677b3aab3464736f6c634300080a003360a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a0033"; - -type CurveV1MetapoolMockConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: CurveV1MetapoolMockConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class CurveV1MetapoolMock__factory extends ContractFactory { - constructor(...args: CurveV1MetapoolMockConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - _token0: string, - _basePool: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - _token0, - _basePool, - overrides || {} - ) as Promise; - } - override getDeployTransaction( - _token0: string, - _basePool: string, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(_token0, _basePool, overrides || {}); - } - override attach(address: string): CurveV1MetapoolMock { - return super.attach(address) as CurveV1MetapoolMock; - } - override connect(signer: Signer): CurveV1MetapoolMock__factory { - return super.connect(signer) as CurveV1MetapoolMock__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): CurveV1MetapoolMockInterface { - return new utils.Interface(_abi) as CurveV1MetapoolMockInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): CurveV1MetapoolMock { - return new Contract(address, _abi, signerOrProvider) as CurveV1MetapoolMock; - } -} diff --git a/src/types/factories/contracts/test/mocks/integrations/CurveV1Mock_2Assets__factory.ts b/src/types/factories/contracts/test/mocks/integrations/CurveV1Mock_2Assets__factory.ts deleted file mode 100644 index 05be69a2..00000000 --- a/src/types/factories/contracts/test/mocks/integrations/CurveV1Mock_2Assets__factory.ts +++ /dev/null @@ -1,902 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - CurveV1Mock_2Assets, - CurveV1Mock_2AssetsInterface, -} from "../../../../../contracts/test/mocks/integrations/CurveV1Mock_2Assets"; - -const _abi = [ - { - inputs: [ - { - internalType: "address[]", - name: "_coins", - type: "address[]", - }, - { - internalType: "address[]", - name: "_underlying_coins", - type: "address[]", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "A", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "A_precise", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256[2]", - name: "amounts", - type: "uint256[2]", - }, - { - internalType: "uint256", - name: "min_mint_amount", - type: "uint256", - }, - ], - name: "add_liquidity", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "admin", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "admin_balances", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "admin_fee", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "allowance", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - ], - name: "balances", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "i", - type: "uint256", - }, - ], - name: "balances", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "block_timestamp_last", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256[2]", - name: "", - type: "uint256[2]", - }, - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - name: "calc_token_amount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "int128", - name: "coin", - type: "int128", - }, - ], - name: "calc_withdraw_one_coin", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - ], - name: "coins", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "i", - type: "uint256", - }, - ], - name: "coins", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "decimals", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "int128", - name: "j", - type: "int128", - }, - { - internalType: "uint256", - name: "dx", - type: "uint256", - }, - { - internalType: "uint256", - name: "min_dy", - type: "uint256", - }, - ], - name: "exchange", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "int128", - name: "j", - type: "int128", - }, - { - internalType: "uint256", - name: "dx", - type: "uint256", - }, - { - internalType: "uint256", - name: "min_dy", - type: "uint256", - }, - ], - name: "exchange_underlying", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "fee", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "future_A", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "future_A_time", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "get_balances", - outputs: [ - { - internalType: "uint256[2]", - name: "", - type: "uint256[2]", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "int128", - name: "j", - type: "int128", - }, - { - internalType: "uint256", - name: "dx", - type: "uint256", - }, - ], - name: "get_dy", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "int128", - name: "j", - type: "int128", - }, - { - internalType: "uint256", - name: "dx", - type: "uint256", - }, - ], - name: "get_dy_underlying", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "get_previous_balances", - outputs: [ - { - internalType: "uint256[2]", - name: "", - type: "uint256[2]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "get_price_cumulative_last", - outputs: [ - { - internalType: "uint256[2]", - name: "", - type: "uint256[2]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256[2]", - name: "_first_balances", - type: "uint256[2]", - }, - { - internalType: "uint256[2]", - name: "", - type: "uint256[2]", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "get_twap_balances", - outputs: [ - { - internalType: "uint256[2]", - name: "", - type: "uint256[2]", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "get_virtual_price", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "initial_A", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "initial_A_time", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "lp_token", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "mintLP", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - { - internalType: "uint256[2]", - name: "min_amounts", - type: "uint256[2]", - }, - ], - name: "remove_liquidity", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256[2]", - name: "amounts", - type: "uint256[2]", - }, - { - internalType: "uint256", - name: "max_burn_amount", - type: "uint256", - }, - ], - name: "remove_liquidity_imbalance", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_token_amount", - type: "uint256", - }, - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "uint256", - name: "min_amount", - type: "uint256", - }, - ], - name: "remove_liquidity_one_coin", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "int128", - name: "j", - type: "int128", - }, - { - internalType: "uint256", - name: "rate_RAY", - type: "uint256", - }, - ], - name: "setRate", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "int128", - name: "j", - type: "int128", - }, - { - internalType: "uint256", - name: "rate_RAY", - type: "uint256", - }, - ], - name: "setRateUnderlying", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "uint256", - name: "rate_RAY", - type: "uint256", - }, - ], - name: "setWithdrawRate", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_price", - type: "uint256", - }, - ], - name: "set_virtual_price", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "symbol", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "token", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "totalSupply", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - ], - name: "underlying_coins", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "i", - type: "uint256", - }, - ], - name: "underlying_coins", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "virtualPrice", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x60806040523480156200001157600080fd5b5060405162003954380380620039548339810160408190526200003491620002a2565b8151829082906200004d90600290602085019062000133565b5080516200006390600390602084019062000133565b506000601260405162000076906200019d565b6060808252600790820152664352564d6f636b60c81b608082015260a0602082018190526015908201527f43525620666f72204375727665506f6f6c4d6f636b000000000000000000000060c082015260ff909116604082015260e001604051809103906000f080158015620000f0573d6000803e3d6000fd5b50600080546001600160a01b039092166001600160a01b03199283168117909155600180549092161790555050670de0b6b3a7640000600755506200030c915050565b8280548282559060005260206000209081019282156200018b579160200282015b828111156200018b57825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019062000154565b5062000199929150620001ab565b5090565b61175880620021fc83390190565b5b80821115620001995760008155600101620001ac565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b0381168114620001f057600080fd5b919050565b600082601f8301126200020757600080fd5b815160206001600160401b0380831115620002265762000226620001c2565b8260051b604051601f19603f830116810181811084821117156200024e576200024e620001c2565b6040529384528581018301938381019250878511156200026d57600080fd5b83870191505b8482101562000297576200028782620001d8565b8352918301919083019062000273565b979650505050505050565b60008060408385031215620002b657600080fd5b82516001600160401b0380821115620002ce57600080fd5b620002dc86838701620001f5565b93506020850151915080821115620002f357600080fd5b506200030285828601620001f5565b9150509250929050565b611ee0806200031c6000396000f3fe608060405234801561001057600080fd5b506004361061030a5760003560e01c80637b475b681161019c578063c6610657116100ee578063e310327311610097578063f851a44011610071578063f851a44014610597578063fc0c546a1461059e578063fee3f7f91461039757600080fd5b8063e310327314610576578063ed8e84f314610589578063f446c1d01461039757600080fd5b8063dd62ed3e116100c8578063dd62ed3e14610552578063ddca3f4314610397578063e2e7d2641461056857600080fd5b8063c66106571461052c578063cc2b27d71461053f578063d96c7fce1461039e57600080fd5b8063a6417ed611610150578063b91434d11161012a578063b91434d1146104fe578063b9947eb014610511578063bb7b8b801461052457600080fd5b8063a6417ed6146104d8578063b4b577ad14610397578063b739953e146104eb57600080fd5b80638ea875f3116101815780638ea875f3146104bc57806395d89b411461033557806399bd2ba5146104c557600080fd5b80637b475b681461047757806382c630661461049c57600080fd5b8063313ce567116102605780635b36389c1161020957806370a08231116101e357806370a0823114610450578063710354181461046457806376a2f0f01461039757600080fd5b80635b36389c1461042a5780635e0d443f1461043d57806363543f061461039757600080fd5b80634903b0d11161023a5780634903b0d1146104045780635409491a1461039757806356ac35031461041757600080fd5b8063313ce567146103975780633df02124146103f15780634469e30e1461039e57600080fd5b806314052288116102c25780631a4d01d21161029c5780631a4d01d2146103a65780632081066c1461039757806323746eb8146103b957600080fd5b8063140522881461039757806314f059791461039e57806318160ddd1461039757600080fd5b806307211ef7116102f357806307211ef71461034f5780630b4c7e4d146103625780630f6ba8e31461037757600080fd5b8063065a80d81461030f57806306fdde0314610335575b600080fd5b61032261031d36600461191f565b6105be565b6040519081526020015b60405180910390f35b6040805160208101825260008152905161032c9190611966565b61032261035d3660046119b7565b610677565b610375610370366004611a8a565b6106c7565b005b61038a610385366004611ac6565b610898565b60405161032c9190611b04565b6000610322565b61038a6108cb565b6103756103b4366004611b35565b6108eb565b6103cc6103c736600461191f565b6109da565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161032c565b6103756103ff366004611b5a565b610a1a565b610322610412366004611b9c565b610b44565b6103756104253660046119b7565b610b59565b610375610438366004611bb5565b610bba565b61032261044b3660046119b7565b610d3d565b61032261045e366004611c06565b50600090565b610375610472366004611b9c565b600755565b610375610485366004611c21565b600f9190910b600090815260066020526040902055565b6001546103cc9073ffffffffffffffffffffffffffffffffffffffff1681565b61032260075481565b6103756104d3366004611c4b565b610d79565b6103756104e6366004611b5a565b610dd8565b6103cc6104f936600461191f565b611198565b61037561050c3660046119b7565b6111b0565b6103cc61051f366004611b9c565b611211565b600754610322565b6103cc61053a366004611b9c565b611226565b61032261054d366004611c67565b61123b565b610322610560366004611c8a565b600092915050565b61032261045e366004611b9c565b610375610584366004611cb4565b611271565b610322610560366004611ce2565b60006103cc565b6000546103cc9073ffffffffffffffffffffffffffffffffffffffff1681565b6000600282600f0b815481106105d6576105d6611d1a565b6000918252602090912001546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa15801561064d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106719190611d49565b92915050565b600f83810b60009081526005602090815260408083209386900b8352929052908120546b033b2e3c9fd0803ce8000000906106b3908490611d91565b6106bd9190611dce565b90505b9392505050565b60005b60028110156107f65760008382600281106106e7576106e7611d1a565b602002015111156107e4576002818154811061070557610705611d1a565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff166323b872dd333086856002811061074057610740611d1a565b60200201516040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff938416600482015292909116602483015260448201526064016020604051808303816000875af11580156107be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e29190611e09565b505b806107ee81611e26565b9150506106ca565b506000546040517f40c10f190000000000000000000000000000000000000000000000000000000081523360048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f19906044015b6020604051808303816000875af115801561086f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108939190611e09565b505050565b6108a06118ea565b6040805180820182529085906002908390839080828437600092019190915250919695505050505050565b6108d36118ea565b50604080518082019091526000808252602082015290565b6000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810185905273ffffffffffffffffffffffffffffffffffffffff909116906379cc6790906044016020604051808303816000875af1158015610962573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109869190611e09565b5061089333826002856fffffffffffffffffffffffffffffffff16815481106109b1576109b1611d1a565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1691906113f4565b6000600282600f0b815481106109f2576109f2611d1a565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1692915050565b6000610a27858585610d3d565b905081811015610abe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f437572766556314d6f636b3a20494e53554646494349454e545f4f555450555460448201527f5f414d4f554e540000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b610b133330856002896fffffffffffffffffffffffffffffffff1681548110610ae957610ae9611d1a565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169291906114c8565b610b3d33826002876fffffffffffffffffffffffffffffffff16815481106109b1576109b1611d1a565b5050505050565b6000600282815481106105d6576105d6611d1a565b600f83810b60009081526005602090815260408083209386900b835292905220819055610b926b033b2e3c9fd0803ce80000008261152c565b600f92830b60009081526005602090815260408083209690950b825294909452919092205550565b60005b6002811015610cdf576000828260028110610bda57610bda611d1a565b60200201511115610ccd5760028181548110610bf857610bf8611d1a565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33848460028110610c3257610c32611d1a565b60200201516040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af1158015610ca7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ccb9190611e09565b505b80610cd781611e26565b915050610bbd565b506000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810184905273ffffffffffffffffffffffffffffffffffffffff909116906379cc679090604401610850565b600f83810b60009081526004602090815260408083209386900b8352929052908120546b033b2e3c9fd0803ce8000000906106b3908490611d91565b6000546040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052909116906340c10f1990604401610850565b60006002856fffffffffffffffffffffffffffffffff1681548110610dff57610dff611d1a565b60009182526020822001546003805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff8816908110610e4b57610e4b611d1a565b60009182526020822001546002805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff8816908110610e9757610e97611d1a565b60009182526020822001546003805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff8916908110610ee357610ee3611d1a565b600091825260208220015473ffffffffffffffffffffffffffffffffffffffff169150610f11898989610677565b905085811015610fa3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f437572766556314d6f636b3a20494e53554646494349454e545f4f555450555460448201527f5f414d4f554e54000000000000000000000000000000000000000000000000006064820152608401610ab5565b610fc573ffffffffffffffffffffffffffffffffffffffff851633308a6114c8565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526024820189905285169063095ea7b3906044016020604051808303816000875af115801561103a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061105e9190611e09565b506040517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8616906340c10f1990604401600060405180830381600087803b1580156110cd57600080fd5b505af11580156110e1573d6000803e3d6000fd5b50506040517f1e9a69500000000000000000000000000000000000000000000000000000000081523060048201526024810184905273ffffffffffffffffffffffffffffffffffffffff86169250631e9a69509150604401600060405180830381600087803b15801561115357600080fd5b505af1158015611167573d6000803e3d6000fd5b5061118d9250505073ffffffffffffffffffffffffffffffffffffffff831633836113f4565b505050505050505050565b6000600382600f0b815481106109f2576109f2611d1a565b600f83810b60009081526004602090815260408083209386900b8352929052208190556111e96b033b2e3c9fd0803ce80000008261152c565b600f92830b60009081526004602090815260408083209690950b825294909452919092205550565b6000600382815481106109f2576109f2611d1a565b6000600282815481106109f2576109f2611d1a565b600f81900b6000908152600660205260408120546b033b2e3c9fd0803ce8000000906112679085611d91565b6106c09190611dce565b60005b600281101561139657600083826002811061129157611291611d1a565b6020020135111561138457600281815481106112af576112af611d1a565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb338584600281106112e9576112e9611d1a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff9093166004840152602002013560248201526044016020604051808303816000875af115801561135e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113829190611e09565b505b8061138e81611e26565b915050611274565b506000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906379cc679090604401610850565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526108939084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611692565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526115269085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611446565b50505050565b60408051808201909152600281527f4d3300000000000000000000000000000000000000000000000000000000000060208201526000908261159b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab59190611966565b5060006115a9600284611dce565b90506b033b2e3c9fd0803ce80000006115e2827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611e5f565b6115ec9190611dce565b8411156040518060400160405280600281526020017f4d310000000000000000000000000000000000000000000000000000000000008152509061165d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab59190611966565b5082816116766b033b2e3c9fd0803ce800000087611d91565b6116809190611e76565b61168a9190611dce565b949350505050565b60006116f4826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661179e9092919063ffffffff16565b80519091501561089357808060200190518101906117129190611e09565b610893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610ab5565b60606106bd848460008585843b611811576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610ab5565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161183a9190611e8e565b60006040518083038185875af1925050503d8060008114611877576040519150601f19603f3d011682016040523d82523d6000602084013e61187c565b606091505b509150915061188c828286611897565b979650505050505050565b606083156118a65750816106c0565b8251156118b65782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab59190611966565b60405180604001604052806002906020820280368337509192915050565b8035600f81900b811461191a57600080fd5b919050565b60006020828403121561193157600080fd5b6106c082611908565b60005b8381101561195557818101518382015260200161193d565b838111156115265750506000910152565b602081526000825180602084015261198581604085016020870161193a565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000606084860312156119cc57600080fd5b6119d584611908565b92506119e360208501611908565b9150604084013590509250925092565b600082601f830112611a0457600080fd5b6040516040810181811067ffffffffffffffff82111715611a4e577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b8060405250806040840185811115611a6557600080fd5b845b81811015611a7f578035835260209283019201611a67565b509195945050505050565b60008060608385031215611a9d57600080fd5b611aa784846119f3565b946040939093013593505050565b806040810183101561067157600080fd5b600080600060a08486031215611adb57600080fd5b611ae58585611ab5565b9250611af48560408601611ab5565b9150608084013590509250925092565b60408101818360005b6002811015611b2c578151835260209283019290910190600101611b0d565b50505092915050565b600080600060608486031215611b4a57600080fd5b833592506119e360208501611908565b60008060008060808587031215611b7057600080fd5b611b7985611908565b9350611b8760208601611908565b93969395505050506040820135916060013590565b600060208284031215611bae57600080fd5b5035919050565b60008060608385031215611bc857600080fd5b82359150611bd984602085016119f3565b90509250929050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461191a57600080fd5b600060208284031215611c1857600080fd5b6106c082611be2565b60008060408385031215611c3457600080fd5b611c3d83611908565b946020939093013593505050565b60008060408385031215611c5e57600080fd5b611c3d83611be2565b60008060408385031215611c7a57600080fd5b82359150611bd960208401611908565b60008060408385031215611c9d57600080fd5b611ca683611be2565b9150611bd960208401611be2565b60008060608385031215611cc757600080fd5b611aa78484611ab5565b8015158114611cdf57600080fd5b50565b60008060608385031215611cf557600080fd5b611cff8484611ab5565b91506040830135611d0f81611cd1565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215611d5b57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611dc957611dc9611d62565b500290565b600082611e04577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600060208284031215611e1b57600080fd5b81516106c081611cd1565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611e5857611e58611d62565b5060010190565b600082821015611e7157611e71611d62565b500390565b60008219821115611e8957611e89611d62565b500190565b60008251611ea081846020870161193a565b919091019291505056fea2646970667358221220adf7625854adc68c76c6173acf1acab253dff9360c8a557d9c3227c5377c0ffb64736f6c634300080a003360a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a0033"; - -type CurveV1Mock_2AssetsConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: CurveV1Mock_2AssetsConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class CurveV1Mock_2Assets__factory extends ContractFactory { - constructor(...args: CurveV1Mock_2AssetsConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - _coins: string[], - _underlying_coins: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - _coins, - _underlying_coins, - overrides || {} - ) as Promise; - } - override getDeployTransaction( - _coins: string[], - _underlying_coins: string[], - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction( - _coins, - _underlying_coins, - overrides || {} - ); - } - override attach(address: string): CurveV1Mock_2Assets { - return super.attach(address) as CurveV1Mock_2Assets; - } - override connect(signer: Signer): CurveV1Mock_2Assets__factory { - return super.connect(signer) as CurveV1Mock_2Assets__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): CurveV1Mock_2AssetsInterface { - return new utils.Interface(_abi) as CurveV1Mock_2AssetsInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): CurveV1Mock_2Assets { - return new Contract(address, _abi, signerOrProvider) as CurveV1Mock_2Assets; - } -} diff --git a/src/types/factories/contracts/test/mocks/integrations/CurveV1Mock_3Assets__factory.ts b/src/types/factories/contracts/test/mocks/integrations/CurveV1Mock_3Assets__factory.ts deleted file mode 100644 index a9511b55..00000000 --- a/src/types/factories/contracts/test/mocks/integrations/CurveV1Mock_3Assets__factory.ts +++ /dev/null @@ -1,902 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - CurveV1Mock_3Assets, - CurveV1Mock_3AssetsInterface, -} from "../../../../../contracts/test/mocks/integrations/CurveV1Mock_3Assets"; - -const _abi = [ - { - inputs: [ - { - internalType: "address[]", - name: "_coins", - type: "address[]", - }, - { - internalType: "address[]", - name: "_underlying_coins", - type: "address[]", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "A", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "A_precise", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256[3]", - name: "amounts", - type: "uint256[3]", - }, - { - internalType: "uint256", - name: "min_mint_amount", - type: "uint256", - }, - ], - name: "add_liquidity", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "admin", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "admin_balances", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "admin_fee", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "allowance", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - ], - name: "balances", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "i", - type: "uint256", - }, - ], - name: "balances", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "block_timestamp_last", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256[3]", - name: "", - type: "uint256[3]", - }, - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - name: "calc_token_amount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "int128", - name: "coin", - type: "int128", - }, - ], - name: "calc_withdraw_one_coin", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - ], - name: "coins", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "i", - type: "uint256", - }, - ], - name: "coins", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "decimals", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "int128", - name: "j", - type: "int128", - }, - { - internalType: "uint256", - name: "dx", - type: "uint256", - }, - { - internalType: "uint256", - name: "min_dy", - type: "uint256", - }, - ], - name: "exchange", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "int128", - name: "j", - type: "int128", - }, - { - internalType: "uint256", - name: "dx", - type: "uint256", - }, - { - internalType: "uint256", - name: "min_dy", - type: "uint256", - }, - ], - name: "exchange_underlying", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "fee", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "future_A", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "future_A_time", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "get_balances", - outputs: [ - { - internalType: "uint256[3]", - name: "", - type: "uint256[3]", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "int128", - name: "j", - type: "int128", - }, - { - internalType: "uint256", - name: "dx", - type: "uint256", - }, - ], - name: "get_dy", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "int128", - name: "j", - type: "int128", - }, - { - internalType: "uint256", - name: "dx", - type: "uint256", - }, - ], - name: "get_dy_underlying", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "get_previous_balances", - outputs: [ - { - internalType: "uint256[3]", - name: "", - type: "uint256[3]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "get_price_cumulative_last", - outputs: [ - { - internalType: "uint256[3]", - name: "", - type: "uint256[3]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256[3]", - name: "_first_balances", - type: "uint256[3]", - }, - { - internalType: "uint256[3]", - name: "", - type: "uint256[3]", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "get_twap_balances", - outputs: [ - { - internalType: "uint256[3]", - name: "", - type: "uint256[3]", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "get_virtual_price", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "initial_A", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "initial_A_time", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "lp_token", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "mintLP", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - { - internalType: "uint256[3]", - name: "min_amounts", - type: "uint256[3]", - }, - ], - name: "remove_liquidity", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256[3]", - name: "amounts", - type: "uint256[3]", - }, - { - internalType: "uint256", - name: "max_burn_amount", - type: "uint256", - }, - ], - name: "remove_liquidity_imbalance", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_token_amount", - type: "uint256", - }, - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "uint256", - name: "min_amount", - type: "uint256", - }, - ], - name: "remove_liquidity_one_coin", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "int128", - name: "j", - type: "int128", - }, - { - internalType: "uint256", - name: "rate_RAY", - type: "uint256", - }, - ], - name: "setRate", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "int128", - name: "j", - type: "int128", - }, - { - internalType: "uint256", - name: "rate_RAY", - type: "uint256", - }, - ], - name: "setRateUnderlying", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "uint256", - name: "rate_RAY", - type: "uint256", - }, - ], - name: "setWithdrawRate", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_price", - type: "uint256", - }, - ], - name: "set_virtual_price", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "symbol", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "token", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "totalSupply", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - ], - name: "underlying_coins", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "i", - type: "uint256", - }, - ], - name: "underlying_coins", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "virtualPrice", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x60806040523480156200001157600080fd5b5060405162003960380380620039608339810160408190526200003491620002a2565b8151829082906200004d90600290602085019062000133565b5080516200006390600390602084019062000133565b506000601260405162000076906200019d565b6060808252600790820152664352564d6f636b60c81b608082015260a0602082018190526015908201527f43525620666f72204375727665506f6f6c4d6f636b000000000000000000000060c082015260ff909116604082015260e001604051809103906000f080158015620000f0573d6000803e3d6000fd5b50600080546001600160a01b039092166001600160a01b03199283168117909155600180549092161790555050670de0b6b3a7640000600755506200030c915050565b8280548282559060005260206000209081019282156200018b579160200282015b828111156200018b57825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019062000154565b5062000199929150620001ab565b5090565b611758806200220883390190565b5b80821115620001995760008155600101620001ac565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b0381168114620001f057600080fd5b919050565b600082601f8301126200020757600080fd5b815160206001600160401b0380831115620002265762000226620001c2565b8260051b604051601f19603f830116810181811084821117156200024e576200024e620001c2565b6040529384528581018301938381019250878511156200026d57600080fd5b83870191505b8482101562000297576200028782620001d8565b8352918301919083019062000273565b979650505050505050565b60008060408385031215620002b657600080fd5b82516001600160401b0380821115620002ce57600080fd5b620002dc86838701620001f5565b93506020850151915080821115620002f357600080fd5b506200030285828601620001f5565b9150509250929050565b611eec806200031c6000396000f3fe608060405234801561001057600080fd5b506004361061030a5760003560e01c806382c630661161019c578063bb7b8b80116100ee578063e2e7d26411610097578063f851a44011610071578063f851a44014610597578063fc0c546a1461059e578063fee3f7f91461036257600080fd5b8063e2e7d26414610576578063ecb586a514610584578063f446c1d01461036257600080fd5b8063d96c7fce116100c8578063d96c7fce14610369578063dd62ed3e14610568578063ddca3f431461036257600080fd5b8063bb7b8b801461053a578063c661065714610542578063cc2b27d71461055557600080fd5b80639fdaea0c11610150578063b739953e1161012a578063b739953e14610501578063b91434d114610514578063b9947eb01461052757600080fd5b80639fdaea0c146104db578063a6417ed6146104ee578063b4b577ad1461036257600080fd5b80638ea875f3116101815780638ea875f3146104bf57806395d89b411461033557806399bd2ba5146104c857600080fd5b806382c630661461048c57806385ca3c6f146104ac57600080fd5b80633df02124116102605780635e0d443f1161020957806371035418116101e3578063710354181461045457806376a2f0f0146103625780637b475b681461046757600080fd5b80635e0d443f1461042d57806363543f061461036257806370a082311461044057600080fd5b80634903b0d11161023a5780634903b0d1146104075780635409491a1461036257806356ac35031461041a57600080fd5b80633df02124146103e15780634469e30e146103695780634515cef3146103f457600080fd5b806318160ddd116102c257806323746eb81161029c57806323746eb814610393578063313ce567146103625780633883e119146103cb57600080fd5b806318160ddd146103625780631a4d01d21461037e5780632081066c1461036257600080fd5b806307211ef7116102f357806307211ef71461034f578063140522881461036257806314f059791461036957600080fd5b8063065a80d81461030f57806306fdde0314610335575b600080fd5b61032261031d36600461192d565b6105be565b6040519081526020015b60405180910390f35b6040805160208101825260008152905161032c9190611974565b61032261035d3660046119c5565b610677565b6000610322565b6103716106c7565b60405161032c9190611a01565b61039161038c366004611a32565b6106f2565b005b6103a66103a136600461192d565b6107e6565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161032c565b6103226103d9366004611a79565b600092915050565b6103916103ef366004611ab1565b610826565b610391610402366004611b88565b610950565b610322610415366004611bb3565b610b1c565b6103916104283660046119c5565b610b31565b61032261043b3660046119c5565b610b92565b61032261044e366004611bf0565b50600090565b610391610462366004611bb3565b600755565b610391610475366004611c0b565b600f9190910b600090815260066020526040902055565b6001546103a69073ffffffffffffffffffffffffffffffffffffffff1681565b6103716104ba366004611c35565b610bce565b61032260075481565b6103916104d6366004611c73565b610c04565b6103916104e9366004611c8f565b610c63565b6103916104fc366004611ab1565b610de6565b6103a661050f36600461192d565b6111a6565b6103916105223660046119c5565b6111be565b6103a6610535366004611bb3565b61121f565b600754610322565b6103a6610550366004611bb3565b611234565b610322610563366004611cac565b611249565b6103226103d9366004611cd8565b61032261044e366004611bb3565b610391610592366004611d02565b61127f565b60006103a6565b6000546103a69073ffffffffffffffffffffffffffffffffffffffff1681565b6000600282600f0b815481106105d6576105d6611d26565b6000918252602090912001546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa15801561064d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106719190611d55565b92915050565b600f83810b60009081526005602090815260408083209386900b8352929052908120546b033b2e3c9fd0803ce8000000906106b3908490611d9d565b6106bd9190611dda565b90505b9392505050565b6106cf6118f8565b604051806060016040528060008152602001600081526020016000815250905090565b6000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810185905273ffffffffffffffffffffffffffffffffffffffff909116906379cc6790906044016020604051808303816000875af1158015610769573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078d9190611e15565b506107e133826002856fffffffffffffffffffffffffffffffff16815481106107b8576107b8611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169190611402565b505050565b6000600282600f0b815481106107fe576107fe611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1692915050565b6000610833858585610b92565b9050818110156108ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f437572766556314d6f636b3a20494e53554646494349454e545f4f555450555460448201527f5f414d4f554e540000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61091f3330856002896fffffffffffffffffffffffffffffffff16815481106108f5576108f5611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169291906114d6565b61094933826002876fffffffffffffffffffffffffffffffff16815481106107b8576107b8611d26565b5050505050565b60005b6003811015610a7f57600083826003811061097057610970611d26565b60200201511115610a6d576002818154811061098e5761098e611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff166323b872dd33308685600381106109c9576109c9611d26565b60200201516040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff938416600482015292909116602483015260448201526064016020604051808303816000875af1158015610a47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6b9190611e15565b505b80610a7781611e32565b915050610953565b506000546040517f40c10f190000000000000000000000000000000000000000000000000000000081523360048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f19906044015b6020604051808303816000875af1158015610af8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e19190611e15565b6000600282815481106105d6576105d6611d26565b600f83810b60009081526005602090815260408083209386900b835292905220819055610b6a6b033b2e3c9fd0803ce80000008261153a565b600f92830b60009081526005602090815260408083209690950b825294909452919092205550565b600f83810b60009081526004602090815260408083209386900b8352929052908120546b033b2e3c9fd0803ce8000000906106b3908490611d9d565b610bd66118f8565b6040805160608181019092529085906003908390839080828437600092019190915250919695505050505050565b6000546040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052909116906340c10f1990604401610ad9565b60005b6003811015610d88576000838260038110610c8357610c83611d26565b60200201351115610d765760028181548110610ca157610ca1611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33858460038110610cdb57610cdb611d26565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff9093166004840152602002013560248201526044016020604051808303816000875af1158015610d50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d749190611e15565b505b80610d8081611e32565b915050610c66565b506000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906379cc679090604401610ad9565b60006002856fffffffffffffffffffffffffffffffff1681548110610e0d57610e0d611d26565b60009182526020822001546003805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff8816908110610e5957610e59611d26565b60009182526020822001546002805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff8816908110610ea557610ea5611d26565b60009182526020822001546003805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff8916908110610ef157610ef1611d26565b600091825260208220015473ffffffffffffffffffffffffffffffffffffffff169150610f1f898989610677565b905085811015610fb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f437572766556314d6f636b3a20494e53554646494349454e545f4f555450555460448201527f5f414d4f554e540000000000000000000000000000000000000000000000000060648201526084016108c1565b610fd373ffffffffffffffffffffffffffffffffffffffff851633308a6114d6565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526024820189905285169063095ea7b3906044016020604051808303816000875af1158015611048573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061106c9190611e15565b506040517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8616906340c10f1990604401600060405180830381600087803b1580156110db57600080fd5b505af11580156110ef573d6000803e3d6000fd5b50506040517f1e9a69500000000000000000000000000000000000000000000000000000000081523060048201526024810184905273ffffffffffffffffffffffffffffffffffffffff86169250631e9a69509150604401600060405180830381600087803b15801561116157600080fd5b505af1158015611175573d6000803e3d6000fd5b5061119b9250505073ffffffffffffffffffffffffffffffffffffffff83163383611402565b505050505050505050565b6000600382600f0b815481106107fe576107fe611d26565b600f83810b60009081526004602090815260408083209386900b8352929052208190556111f76b033b2e3c9fd0803ce80000008261153a565b600f92830b60009081526004602090815260408083209690950b825294909452919092205550565b6000600382815481106107fe576107fe611d26565b6000600282815481106107fe576107fe611d26565b600f81900b6000908152600660205260408120546b033b2e3c9fd0803ce8000000906112759085611d9d565b6106c09190611dda565b60005b60038110156113a457600082826003811061129f5761129f611d26565b6020020151111561139257600281815481106112bd576112bd611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb338484600381106112f7576112f7611d26565b60200201516040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af115801561136c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113909190611e15565b505b8061139c81611e32565b915050611282565b506000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810184905273ffffffffffffffffffffffffffffffffffffffff909116906379cc679090604401610ad9565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526107e19084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526116a0565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526115349085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611454565b50505050565b60408051808201909152600281527f4d330000000000000000000000000000000000000000000000000000000000006020820152600090826115a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c19190611974565b5060006115b7600284611dda565b90506b033b2e3c9fd0803ce80000006115f0827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611e6b565b6115fa9190611dda565b8411156040518060400160405280600281526020017f4d310000000000000000000000000000000000000000000000000000000000008152509061166b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c19190611974565b5082816116846b033b2e3c9fd0803ce800000087611d9d565b61168e9190611e82565b6116989190611dda565b949350505050565b6000611702826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166117ac9092919063ffffffff16565b8051909150156107e157808060200190518101906117209190611e15565b6107e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016108c1565b60606106bd848460008585843b61181f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108c1565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516118489190611e9a565b60006040518083038185875af1925050503d8060008114611885576040519150601f19603f3d011682016040523d82523d6000602084013e61188a565b606091505b509150915061189a8282866118a5565b979650505050505050565b606083156118b45750816106c0565b8251156118c45782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c19190611974565b60405180606001604052806003906020820280368337509192915050565b8035600f81900b811461192857600080fd5b919050565b60006020828403121561193f57600080fd5b6106c082611916565b60005b8381101561196357818101518382015260200161194b565b838111156115345750506000910152565b6020815260008251806020840152611993816040850160208701611948565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000606084860312156119da57600080fd5b6119e384611916565b92506119f160208501611916565b9150604084013590509250925092565b60608101818360005b6003811015611a29578151835260209283019290910190600101611a0a565b50505092915050565b600080600060608486031215611a4757600080fd5b833592506119f160208501611916565b806060810183101561067157600080fd5b8015158114611a7657600080fd5b50565b60008060808385031215611a8c57600080fd5b611a968484611a57565b91506060830135611aa681611a68565b809150509250929050565b60008060008060808587031215611ac757600080fd5b611ad085611916565b9350611ade60208601611916565b93969395505050506040820135916060013590565b600082601f830112611b0457600080fd5b6040516060810181811067ffffffffffffffff82111715611b4e577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604052806060840185811115611b6357600080fd5b845b81811015611b7d578035835260209283019201611b65565b509195945050505050565b60008060808385031215611b9b57600080fd5b611ba58484611af3565b946060939093013593505050565b600060208284031215611bc557600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461192857600080fd5b600060208284031215611c0257600080fd5b6106c082611bcc565b60008060408385031215611c1e57600080fd5b611c2783611916565b946020939093013593505050565b600080600060e08486031215611c4a57600080fd5b611c548585611a57565b9250611c638560608601611a57565b915060c084013590509250925092565b60008060408385031215611c8657600080fd5b611c2783611bcc565b60008060808385031215611ca257600080fd5b611ba58484611a57565b60008060408385031215611cbf57600080fd5b82359150611ccf60208401611916565b90509250929050565b60008060408385031215611ceb57600080fd5b611cf483611bcc565b9150611ccf60208401611bcc565b60008060808385031215611d1557600080fd5b82359150611ccf8460208501611af3565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215611d6757600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611dd557611dd5611d6e565b500290565b600082611e10577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600060208284031215611e2757600080fd5b81516106c081611a68565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611e6457611e64611d6e565b5060010190565b600082821015611e7d57611e7d611d6e565b500390565b60008219821115611e9557611e95611d6e565b500190565b60008251611eac818460208701611948565b919091019291505056fea2646970667358221220a76213374b33de2cb1c5d61e9c1133f6d8163c7b90c32a6142a6f4fd98fe430364736f6c634300080a003360a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a0033"; - -type CurveV1Mock_3AssetsConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: CurveV1Mock_3AssetsConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class CurveV1Mock_3Assets__factory extends ContractFactory { - constructor(...args: CurveV1Mock_3AssetsConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - _coins: string[], - _underlying_coins: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - _coins, - _underlying_coins, - overrides || {} - ) as Promise; - } - override getDeployTransaction( - _coins: string[], - _underlying_coins: string[], - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction( - _coins, - _underlying_coins, - overrides || {} - ); - } - override attach(address: string): CurveV1Mock_3Assets { - return super.attach(address) as CurveV1Mock_3Assets; - } - override connect(signer: Signer): CurveV1Mock_3Assets__factory { - return super.connect(signer) as CurveV1Mock_3Assets__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): CurveV1Mock_3AssetsInterface { - return new utils.Interface(_abi) as CurveV1Mock_3AssetsInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): CurveV1Mock_3Assets { - return new Contract(address, _abi, signerOrProvider) as CurveV1Mock_3Assets; - } -} diff --git a/src/types/factories/contracts/test/mocks/integrations/CurveV1Mock_4Assets__factory.ts b/src/types/factories/contracts/test/mocks/integrations/CurveV1Mock_4Assets__factory.ts deleted file mode 100644 index 1e39fee6..00000000 --- a/src/types/factories/contracts/test/mocks/integrations/CurveV1Mock_4Assets__factory.ts +++ /dev/null @@ -1,902 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - CurveV1Mock_4Assets, - CurveV1Mock_4AssetsInterface, -} from "../../../../../contracts/test/mocks/integrations/CurveV1Mock_4Assets"; - -const _abi = [ - { - inputs: [ - { - internalType: "address[]", - name: "_coins", - type: "address[]", - }, - { - internalType: "address[]", - name: "_underlying_coins", - type: "address[]", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "A", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "A_precise", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256[4]", - name: "amounts", - type: "uint256[4]", - }, - { - internalType: "uint256", - name: "min_mint_amount", - type: "uint256", - }, - ], - name: "add_liquidity", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "admin", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "admin_balances", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "admin_fee", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "allowance", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - ], - name: "balances", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "i", - type: "uint256", - }, - ], - name: "balances", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "block_timestamp_last", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256[4]", - name: "", - type: "uint256[4]", - }, - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - name: "calc_token_amount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "int128", - name: "coin", - type: "int128", - }, - ], - name: "calc_withdraw_one_coin", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - ], - name: "coins", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "i", - type: "uint256", - }, - ], - name: "coins", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "decimals", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "int128", - name: "j", - type: "int128", - }, - { - internalType: "uint256", - name: "dx", - type: "uint256", - }, - { - internalType: "uint256", - name: "min_dy", - type: "uint256", - }, - ], - name: "exchange", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "int128", - name: "j", - type: "int128", - }, - { - internalType: "uint256", - name: "dx", - type: "uint256", - }, - { - internalType: "uint256", - name: "min_dy", - type: "uint256", - }, - ], - name: "exchange_underlying", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "fee", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "future_A", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "future_A_time", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "get_balances", - outputs: [ - { - internalType: "uint256[4]", - name: "", - type: "uint256[4]", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "int128", - name: "j", - type: "int128", - }, - { - internalType: "uint256", - name: "dx", - type: "uint256", - }, - ], - name: "get_dy", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "int128", - name: "j", - type: "int128", - }, - { - internalType: "uint256", - name: "dx", - type: "uint256", - }, - ], - name: "get_dy_underlying", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "get_previous_balances", - outputs: [ - { - internalType: "uint256[4]", - name: "", - type: "uint256[4]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "get_price_cumulative_last", - outputs: [ - { - internalType: "uint256[4]", - name: "", - type: "uint256[4]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256[4]", - name: "_first_balances", - type: "uint256[4]", - }, - { - internalType: "uint256[4]", - name: "", - type: "uint256[4]", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "get_twap_balances", - outputs: [ - { - internalType: "uint256[4]", - name: "", - type: "uint256[4]", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "get_virtual_price", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "initial_A", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "initial_A_time", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "lp_token", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "mintLP", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - { - internalType: "uint256[4]", - name: "min_amounts", - type: "uint256[4]", - }, - ], - name: "remove_liquidity", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256[4]", - name: "amounts", - type: "uint256[4]", - }, - { - internalType: "uint256", - name: "max_burn_amount", - type: "uint256", - }, - ], - name: "remove_liquidity_imbalance", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_token_amount", - type: "uint256", - }, - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "uint256", - name: "min_amount", - type: "uint256", - }, - ], - name: "remove_liquidity_one_coin", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "int128", - name: "j", - type: "int128", - }, - { - internalType: "uint256", - name: "rate_RAY", - type: "uint256", - }, - ], - name: "setRate", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "int128", - name: "j", - type: "int128", - }, - { - internalType: "uint256", - name: "rate_RAY", - type: "uint256", - }, - ], - name: "setRateUnderlying", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "uint256", - name: "rate_RAY", - type: "uint256", - }, - ], - name: "setWithdrawRate", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_price", - type: "uint256", - }, - ], - name: "set_virtual_price", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "symbol", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "token", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "totalSupply", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - ], - name: "underlying_coins", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "i", - type: "uint256", - }, - ], - name: "underlying_coins", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "virtualPrice", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x60806040523480156200001157600080fd5b5060405162003969380380620039698339810160408190526200003491620002a2565b8151829082906200004d90600290602085019062000133565b5080516200006390600390602084019062000133565b506000601260405162000076906200019d565b6060808252600790820152664352564d6f636b60c81b608082015260a0602082018190526015908201527f43525620666f72204375727665506f6f6c4d6f636b000000000000000000000060c082015260ff909116604082015260e001604051809103906000f080158015620000f0573d6000803e3d6000fd5b50600080546001600160a01b039092166001600160a01b03199283168117909155600180549092161790555050670de0b6b3a7640000600755506200030c915050565b8280548282559060005260206000209081019282156200018b579160200282015b828111156200018b57825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019062000154565b5062000199929150620001ab565b5090565b611758806200221183390190565b5b80821115620001995760008155600101620001ac565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b0381168114620001f057600080fd5b919050565b600082601f8301126200020757600080fd5b815160206001600160401b0380831115620002265762000226620001c2565b8260051b604051601f19603f830116810181811084821117156200024e576200024e620001c2565b6040529384528581018301938381019250878511156200026d57600080fd5b83870191505b8482101562000297576200028782620001d8565b8352918301919083019062000273565b979650505050505050565b60008060408385031215620002b657600080fd5b82516001600160401b0380821115620002ce57600080fd5b620002dc86838701620001f5565b93506020850151915080821115620002f357600080fd5b506200030285828601620001f5565b9150509250929050565b611ef5806200031c6000396000f3fe608060405234801561001057600080fd5b506004361061030a5760003560e01c80637b475b681161019c578063bb7b8b80116100ee578063ddca3f4311610097578063f851a44011610071578063f851a44014610597578063fc0c546a1461059e578063fee3f7f91461037757600080fd5b8063ddca3f4314610377578063e2e7d26414610589578063f446c1d01461037757600080fd5b8063cf701ff7116100c8578063cf701ff714610565578063d96c7fce1461037e578063dd62ed3e1461057b57600080fd5b8063bb7b8b8014610537578063c66106571461053f578063cc2b27d71461055257600080fd5b806399bd2ba511610150578063b739953e1161012a578063b739953e146104fe578063b91434d114610511578063b9947eb01461052457600080fd5b806399bd2ba5146104d8578063a6417ed6146104eb578063b4b577ad1461037757600080fd5b806382c630661161018157806382c63066146104af5780638ea875f3146104cf57806395d89b411461034a57600080fd5b80637b475b68146104775780637d49d8751461049c57600080fd5b8063313ce5671161026057806356ac35031161020957806370a08231116101e357806370a0823114610450578063710354181461046457806376a2f0f01461037757600080fd5b806356ac35031461042a5780635e0d443f1461043d57806363543f061461037757600080fd5b80634903b0d11161023a5780634903b0d11461040457806353b546cd146104175780635409491a1461037757600080fd5b8063313ce567146103775780633df02124146103f15780634469e30e1461037e57600080fd5b806314f05979116102c25780631a4d01d21161029c5780631a4d01d2146103a65780632081066c1461037757806323746eb8146103b957600080fd5b806314f059791461037e57806318160ddd1461037757806318a7bd761461039357600080fd5b806306fdde03116102f357806306fdde031461034a57806307211ef714610364578063140522881461037757600080fd5b8063029b2f341461030f578063065a80d814610324575b600080fd5b61032261031d3660046119b2565b6105be565b005b6103376103323660046119f4565b61078f565b6040519081526020015b60405180910390f35b604080516020810182526000815290516103419190611a3b565b610337610372366004611a8c565b610848565b6000610337565b610386610898565b6040516103419190611ac8565b6103226103a1366004611b0a565b6108ca565b6103226103b4366004611b27565b610a4d565b6103cc6103c73660046119f4565b610b3c565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610341565b6103226103ff366004611b4c565b610b7c565b610337610412366004611b8e565b610ca6565b610386610425366004611ba7565b610cbb565b610322610438366004611a8c565b610cf1565b61033761044b366004611a8c565b610d52565b61033761045e366004611c0b565b50600090565b610322610472366004611b8e565b600755565b610322610485366004611c26565b600f9190910b600090815260066020526040902055565b6103226104aa366004611c50565b610d8e565b6001546103cc9073ffffffffffffffffffffffffffffffffffffffff1681565b61033760075481565b6103226104e6366004611c7d565b610f11565b6103226104f9366004611b4c565b610f70565b6103cc61050c3660046119f4565b611330565b61032261051f366004611a8c565b611348565b6103cc610532366004611b8e565b6113a9565b600754610337565b6103cc61054d366004611b8e565b6113be565b610337610560366004611c99565b6113d3565b610337610573366004611ccd565b600092915050565b610337610573366004611d05565b61033761045e366004611b8e565b60006103cc565b6000546103cc9073ffffffffffffffffffffffffffffffffffffffff1681565b60005b60048110156106ed5760008382600481106105de576105de611d2f565b602002015111156106db57600281815481106105fc576105fc611d2f565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff166323b872dd333086856004811061063757610637611d2f565b60200201516040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff938416600482015292909116602483015260448201526064016020604051808303816000875af11580156106b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d99190611d5e565b505b806106e581611daa565b9150506105c1565b506000546040517f40c10f190000000000000000000000000000000000000000000000000000000081523360048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f19906044015b6020604051808303816000875af1158015610766573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078a9190611d5e565b505050565b6000600282600f0b815481106107a7576107a7611d2f565b6000918252602090912001546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa15801561081e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108429190611de3565b92915050565b600f83810b60009081526005602090815260408083209386900b8352929052908120546b033b2e3c9fd0803ce800000090610884908490611dfc565b61088e9190611e39565b90505b9392505050565b6108a06118ff565b60405180608001604052806000815260200160008152602001600081526020016000815250905090565b60005b60048110156109ef5760008382600481106108ea576108ea611d2f565b602002013511156109dd576002818154811061090857610908611d2f565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb3385846004811061094257610942611d2f565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff9093166004840152602002013560248201526044016020604051808303816000875af11580156109b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109db9190611d5e565b505b806109e781611daa565b9150506108cd565b506000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906379cc679090604401610747565b6000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810185905273ffffffffffffffffffffffffffffffffffffffff909116906379cc6790906044016020604051808303816000875af1158015610ac4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae89190611d5e565b5061078a33826002856fffffffffffffffffffffffffffffffff1681548110610b1357610b13611d2f565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169190611409565b6000600282600f0b81548110610b5457610b54611d2f565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1692915050565b6000610b89858585610d52565b905081811015610c20576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f437572766556314d6f636b3a20494e53554646494349454e545f4f555450555460448201527f5f414d4f554e540000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b610c753330856002896fffffffffffffffffffffffffffffffff1681548110610c4b57610c4b611d2f565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169291906114dd565b610c9f33826002876fffffffffffffffffffffffffffffffff1681548110610b1357610b13611d2f565b5050505050565b6000600282815481106107a7576107a7611d2f565b610cc36118ff565b6040805160808181019092529085906004908390839080828437600092019190915250919695505050505050565b600f83810b60009081526005602090815260408083209386900b835292905220819055610d2a6b033b2e3c9fd0803ce800000082611541565b600f92830b60009081526005602090815260408083209690950b825294909452919092205550565b600f83810b60009081526004602090815260408083209386900b8352929052908120546b033b2e3c9fd0803ce800000090610884908490611dfc565b60005b6004811015610eb3576000828260048110610dae57610dae611d2f565b60200201511115610ea15760028181548110610dcc57610dcc611d2f565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33848460048110610e0657610e06611d2f565b60200201516040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af1158015610e7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9f9190611d5e565b505b80610eab81611daa565b915050610d91565b506000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810184905273ffffffffffffffffffffffffffffffffffffffff909116906379cc679090604401610747565b6000546040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052909116906340c10f1990604401610747565b60006002856fffffffffffffffffffffffffffffffff1681548110610f9757610f97611d2f565b60009182526020822001546003805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff8816908110610fe357610fe3611d2f565b60009182526020822001546002805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff881690811061102f5761102f611d2f565b60009182526020822001546003805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff891690811061107b5761107b611d2f565b600091825260208220015473ffffffffffffffffffffffffffffffffffffffff1691506110a9898989610848565b90508581101561113b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f437572766556314d6f636b3a20494e53554646494349454e545f4f555450555460448201527f5f414d4f554e54000000000000000000000000000000000000000000000000006064820152608401610c17565b61115d73ffffffffffffffffffffffffffffffffffffffff851633308a6114dd565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526024820189905285169063095ea7b3906044016020604051808303816000875af11580156111d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f69190611d5e565b506040517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8616906340c10f1990604401600060405180830381600087803b15801561126557600080fd5b505af1158015611279573d6000803e3d6000fd5b50506040517f1e9a69500000000000000000000000000000000000000000000000000000000081523060048201526024810184905273ffffffffffffffffffffffffffffffffffffffff86169250631e9a69509150604401600060405180830381600087803b1580156112eb57600080fd5b505af11580156112ff573d6000803e3d6000fd5b506113259250505073ffffffffffffffffffffffffffffffffffffffff83163383611409565b505050505050505050565b6000600382600f0b81548110610b5457610b54611d2f565b600f83810b60009081526004602090815260408083209386900b8352929052208190556113816b033b2e3c9fd0803ce800000082611541565b600f92830b60009081526004602090815260408083209690950b825294909452919092205550565b600060038281548110610b5457610b54611d2f565b600060028281548110610b5457610b54611d2f565b600f81900b6000908152600660205260408120546b033b2e3c9fd0803ce8000000906113ff9085611dfc565b6108919190611e39565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905261078a9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526116a7565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905261153b9085907f23b872dd000000000000000000000000000000000000000000000000000000009060840161145b565b50505050565b60408051808201909152600281527f4d330000000000000000000000000000000000000000000000000000000000006020820152600090826115b0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c179190611a3b565b5060006115be600284611e39565b90506b033b2e3c9fd0803ce80000006115f7827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611e74565b6116019190611e39565b8411156040518060400160405280600281526020017f4d3100000000000000000000000000000000000000000000000000000000000081525090611672576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c179190611a3b565b50828161168b6b033b2e3c9fd0803ce800000087611dfc565b6116959190611e8b565b61169f9190611e39565b949350505050565b6000611709826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166117b39092919063ffffffff16565b80519091501561078a57808060200190518101906117279190611d5e565b61078a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610c17565b606061088e848460008585843b611826576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610c17565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161184f9190611ea3565b60006040518083038185875af1925050503d806000811461188c576040519150601f19603f3d011682016040523d82523d6000602084013e611891565b606091505b50915091506118a18282866118ac565b979650505050505050565b606083156118bb575081610891565b8251156118cb5782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c179190611a3b565b60405180608001604052806004906020820280368337509192915050565b600082601f83011261192e57600080fd5b6040516080810181811067ffffffffffffffff82111715611978577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405280608084018581111561198d57600080fd5b845b818110156119a757803583526020928301920161198f565b509195945050505050565b60008060a083850312156119c557600080fd5b6119cf848461191d565b946080939093013593505050565b8035600f81900b81146119ef57600080fd5b919050565b600060208284031215611a0657600080fd5b610891826119dd565b60005b83811015611a2a578181015183820152602001611a12565b8381111561153b5750506000910152565b6020815260008251806020840152611a5a816040850160208701611a0f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b600080600060608486031215611aa157600080fd5b611aaa846119dd565b9250611ab8602085016119dd565b9150604084013590509250925092565b60808101818360005b6004811015611af0578151835260209283019290910190600101611ad1565b50505092915050565b806080810183101561084257600080fd5b60008060a08385031215611b1d57600080fd5b6119cf8484611af9565b600080600060608486031215611b3c57600080fd5b83359250611ab8602085016119dd565b60008060008060808587031215611b6257600080fd5b611b6b856119dd565b9350611b79602086016119dd565b93969395505050506040820135916060013590565b600060208284031215611ba057600080fd5b5035919050565b60008060006101208486031215611bbd57600080fd5b611bc78585611af9565b9250611bd68560808601611af9565b915061010084013590509250925092565b803573ffffffffffffffffffffffffffffffffffffffff811681146119ef57600080fd5b600060208284031215611c1d57600080fd5b61089182611be7565b60008060408385031215611c3957600080fd5b611c42836119dd565b946020939093013593505050565b60008060a08385031215611c6357600080fd5b82359150611c74846020850161191d565b90509250929050565b60008060408385031215611c9057600080fd5b611c4283611be7565b60008060408385031215611cac57600080fd5b82359150611c74602084016119dd565b8015158114611cca57600080fd5b50565b60008060a08385031215611ce057600080fd5b611cea8484611af9565b91506080830135611cfa81611cbc565b809150509250929050565b60008060408385031215611d1857600080fd5b611d2183611be7565b9150611c7460208401611be7565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215611d7057600080fd5b815161089181611cbc565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611ddc57611ddc611d7b565b5060010190565b600060208284031215611df557600080fd5b5051919050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611e3457611e34611d7b565b500290565b600082611e6f577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600082821015611e8657611e86611d7b565b500390565b60008219821115611e9e57611e9e611d7b565b500190565b60008251611eb5818460208701611a0f565b919091019291505056fea2646970667358221220f61dc1547f427f062d37b4d652f14b779f56255086161f347804b4d07b32be2064736f6c634300080a003360a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a0033"; - -type CurveV1Mock_4AssetsConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: CurveV1Mock_4AssetsConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class CurveV1Mock_4Assets__factory extends ContractFactory { - constructor(...args: CurveV1Mock_4AssetsConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - _coins: string[], - _underlying_coins: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - _coins, - _underlying_coins, - overrides || {} - ) as Promise; - } - override getDeployTransaction( - _coins: string[], - _underlying_coins: string[], - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction( - _coins, - _underlying_coins, - overrides || {} - ); - } - override attach(address: string): CurveV1Mock_4Assets { - return super.attach(address) as CurveV1Mock_4Assets; - } - override connect(signer: Signer): CurveV1Mock_4Assets__factory { - return super.connect(signer) as CurveV1Mock_4Assets__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): CurveV1Mock_4AssetsInterface { - return new utils.Interface(_abi) as CurveV1Mock_4AssetsInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): CurveV1Mock_4Assets { - return new Contract(address, _abi, signerOrProvider) as CurveV1Mock_4Assets; - } -} diff --git a/src/types/factories/contracts/test/mocks/integrations/CurveV1Mock__factory.ts b/src/types/factories/contracts/test/mocks/integrations/CurveV1Mock__factory.ts deleted file mode 100644 index e5d6392f..00000000 --- a/src/types/factories/contracts/test/mocks/integrations/CurveV1Mock__factory.ts +++ /dev/null @@ -1,756 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - CurveV1Mock, - CurveV1MockInterface, -} from "../../../../../contracts/test/mocks/integrations/CurveV1Mock"; - -const _abi = [ - { - inputs: [ - { - internalType: "address[]", - name: "coins_", - type: "address[]", - }, - { - internalType: "address[]", - name: "underlying_coins_", - type: "address[]", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "A", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "A_precise", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "admin", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "admin_balances", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "admin_fee", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "allowance", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - ], - name: "balances", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "i", - type: "uint256", - }, - ], - name: "balances", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "block_timestamp_last", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "int128", - name: "coin", - type: "int128", - }, - ], - name: "calc_withdraw_one_coin", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - ], - name: "coins", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "i", - type: "uint256", - }, - ], - name: "coins", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "decimals", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "int128", - name: "j", - type: "int128", - }, - { - internalType: "uint256", - name: "dx", - type: "uint256", - }, - { - internalType: "uint256", - name: "min_dy", - type: "uint256", - }, - ], - name: "exchange", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "int128", - name: "j", - type: "int128", - }, - { - internalType: "uint256", - name: "dx", - type: "uint256", - }, - { - internalType: "uint256", - name: "min_dy", - type: "uint256", - }, - ], - name: "exchange_underlying", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "fee", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "future_A", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "future_A_time", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "int128", - name: "j", - type: "int128", - }, - { - internalType: "uint256", - name: "dx", - type: "uint256", - }, - ], - name: "get_dy", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "int128", - name: "j", - type: "int128", - }, - { - internalType: "uint256", - name: "dx", - type: "uint256", - }, - ], - name: "get_dy_underlying", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "get_virtual_price", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "initial_A", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "initial_A_time", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "lp_token", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "mintLP", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_token_amount", - type: "uint256", - }, - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "uint256", - name: "min_amount", - type: "uint256", - }, - ], - name: "remove_liquidity_one_coin", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "int128", - name: "j", - type: "int128", - }, - { - internalType: "uint256", - name: "rate_RAY", - type: "uint256", - }, - ], - name: "setRate", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "int128", - name: "j", - type: "int128", - }, - { - internalType: "uint256", - name: "rate_RAY", - type: "uint256", - }, - ], - name: "setRateUnderlying", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "uint256", - name: "rate_RAY", - type: "uint256", - }, - ], - name: "setWithdrawRate", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_price", - type: "uint256", - }, - ], - name: "set_virtual_price", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "symbol", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "token", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "totalSupply", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - ], - name: "underlying_coins", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "i", - type: "uint256", - }, - ], - name: "underlying_coins", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "virtualPrice", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x60806040523480156200001157600080fd5b50604051620031613803806200316183398101604081905262000034916200029b565b8151620000499060029060208501906200012c565b5080516200005f9060039060208401906200012c565b5060006012604051620000729062000196565b6060808252600790820152664352564d6f636b60c81b608082015260a0602082018190526015908201527f43525620666f72204375727665506f6f6c4d6f636b000000000000000000000060c082015260ff909116604082015260e001604051809103906000f080158015620000ec573d6000803e3d6000fd5b50600080546001600160a01b039092166001600160a01b03199283168117909155600180549092161790555050670de0b6b3a76400006007555062000305565b82805482825590600052602060002090810192821562000184579160200282015b828111156200018457825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906200014d565b5062000192929150620001a4565b5090565b6117588062001a0983390190565b5b80821115620001925760008155600101620001a5565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b0381168114620001e957600080fd5b919050565b600082601f8301126200020057600080fd5b815160206001600160401b03808311156200021f576200021f620001bb565b8260051b604051601f19603f83011681018181108482111715620002475762000247620001bb565b6040529384528581018301938381019250878511156200026657600080fd5b83870191505b8482101562000290576200028082620001d1565b835291830191908301906200026c565b979650505050505050565b60008060408385031215620002af57600080fd5b82516001600160401b0380821115620002c757600080fd5b620002d586838701620001ee565b93506020850151915080821115620002ec57600080fd5b50620002fb85828601620001ee565b9150509250929050565b6116f480620003156000396000f3fe608060405234801561001057600080fd5b50600436106102925760003560e01c806382c6306611610160578063bb7b8b80116100d8578063e2e7d2641161008c578063f851a44011610071578063f851a440146104b0578063fc0c546a146104b7578063fee3f7f9146102ea57600080fd5b8063e2e7d264146104a2578063f446c1d0146102ea57600080fd5b8063cc2b27d7116100bd578063cc2b27d714610479578063dd62ed3e1461048c578063ddca3f43146102ea57600080fd5b8063bb7b8b801461045e578063c66106571461046657600080fd5b8063a6417ed61161012f578063b739953e11610114578063b739953e14610425578063b91434d114610438578063b9947eb01461044b57600080fd5b8063a6417ed614610412578063b4b577ad146102ea57600080fd5b806382c63066146103d65780638ea875f3146103f657806395d89b41146102bd57806399bd2ba5146103ff57600080fd5b80633df021241161020e57806363543f06116101c257806371035418116101a7578063710354181461039e57806376a2f0f0146102ea5780637b475b68146103b157600080fd5b806363543f06146102ea57806370a082311461038a57600080fd5b80635409491a116101f35780635409491a146102ea57806356ac3503146103645780635e0d443f1461037757600080fd5b80633df021241461033e5780634903b0d11461035157600080fd5b806318160ddd116102655780632081066c1161024a5780632081066c146102ea57806323746eb814610306578063313ce567146102ea57600080fd5b806318160ddd146102ea5780631a4d01d2146102f157600080fd5b8063065a80d81461029757806306fdde03146102bd57806307211ef7146102d757806314052288146102ea575b600080fd5b6102aa6102a5366004611333565b6104d7565b6040519081526020015b60405180910390f35b604080516020810182526000815290516102b4919061137a565b6102aa6102e53660046113cb565b610590565b60006102aa565b6103046102ff366004611407565b6105e0565b005b610319610314366004611333565b6106d4565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102b4565b61030461034c36600461142c565b610714565b6102aa61035f36600461146e565b61083e565b6103046103723660046113cb565b610853565b6102aa6103853660046113cb565b6108b4565b6102aa6103983660046114ab565b50600090565b6103046103ac36600461146e565b600755565b6103046103bf3660046114c6565b600f9190910b600090815260066020526040902055565b6001546103199073ffffffffffffffffffffffffffffffffffffffff1681565b6102aa60075481565b61030461040d3660046114f0565b6108f0565b61030461042036600461142c565b61098d565b610319610433366004611333565b610d4d565b6103046104463660046113cb565b610d65565b61031961045936600461146e565b610dc6565b6007546102aa565b61031961047436600461146e565b610ddb565b6102aa61048736600461150c565b610df0565b6102aa61049a366004611538565b600092915050565b6102aa61039836600461146e565b6000610319565b6000546103199073ffffffffffffffffffffffffffffffffffffffff1681565b6000600282600f0b815481106104ef576104ef611562565b6000918252602090912001546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa158015610566573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061058a9190611591565b92915050565b600f83810b60009081526005602090815260408083209386900b8352929052908120546b033b2e3c9fd0803ce8000000906105cc9084906115d9565b6105d69190611616565b90505b9392505050565b6000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810185905273ffffffffffffffffffffffffffffffffffffffff909116906379cc6790906044016020604051808303816000875af1158015610657573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061067b9190611651565b506106cf33826002856fffffffffffffffffffffffffffffffff16815481106106a6576106a6611562565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169190610e26565b505050565b6000600282600f0b815481106106ec576106ec611562565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1692915050565b60006107218585856108b4565b9050818110156107b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f437572766556314d6f636b3a20494e53554646494349454e545f4f555450555460448201527f5f414d4f554e540000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61080d3330856002896fffffffffffffffffffffffffffffffff16815481106107e3576107e3611562565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16929190610efa565b61083733826002876fffffffffffffffffffffffffffffffff16815481106106a6576106a6611562565b5050505050565b6000600282815481106104ef576104ef611562565b600f83810b60009081526005602090815260408083209386900b83529290522081905561088c6b033b2e3c9fd0803ce800000082610f5e565b600f92830b60009081526005602090815260408083209690950b825294909452919092205550565b600f83810b60009081526004602090815260408083209386900b8352929052908120546b033b2e3c9fd0803ce8000000906105cc9084906115d9565b6000546040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052909116906340c10f19906044016020604051808303816000875af1158015610969573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106cf9190611651565b60006002856fffffffffffffffffffffffffffffffff16815481106109b4576109b4611562565b60009182526020822001546003805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff8816908110610a0057610a00611562565b60009182526020822001546002805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff8816908110610a4c57610a4c611562565b60009182526020822001546003805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff8916908110610a9857610a98611562565b600091825260208220015473ffffffffffffffffffffffffffffffffffffffff169150610ac6898989610590565b905085811015610b58576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f437572766556314d6f636b3a20494e53554646494349454e545f4f555450555460448201527f5f414d4f554e540000000000000000000000000000000000000000000000000060648201526084016107af565b610b7a73ffffffffffffffffffffffffffffffffffffffff851633308a610efa565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526024820189905285169063095ea7b3906044016020604051808303816000875af1158015610bef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c139190611651565b506040517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8616906340c10f1990604401600060405180830381600087803b158015610c8257600080fd5b505af1158015610c96573d6000803e3d6000fd5b50506040517f1e9a69500000000000000000000000000000000000000000000000000000000081523060048201526024810184905273ffffffffffffffffffffffffffffffffffffffff86169250631e9a69509150604401600060405180830381600087803b158015610d0857600080fd5b505af1158015610d1c573d6000803e3d6000fd5b50610d429250505073ffffffffffffffffffffffffffffffffffffffff83163383610e26565b505050505050505050565b6000600382600f0b815481106106ec576106ec611562565b600f83810b60009081526004602090815260408083209386900b835292905220819055610d9e6b033b2e3c9fd0803ce800000082610f5e565b600f92830b60009081526004602090815260408083209690950b825294909452919092205550565b6000600382815481106106ec576106ec611562565b6000600282815481106106ec576106ec611562565b600f81900b6000908152600660205260408120546b033b2e3c9fd0803ce800000090610e1c90856115d9565b6105d99190611616565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526106cf9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526110c4565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052610f589085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401610e78565b50505050565b60408051808201909152600281527f4d33000000000000000000000000000000000000000000000000000000000000602082015260009082610fcd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107af919061137a565b506000610fdb600284611616565b90506b033b2e3c9fd0803ce8000000611014827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611673565b61101e9190611616565b8411156040518060400160405280600281526020017f4d310000000000000000000000000000000000000000000000000000000000008152509061108f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107af919061137a565b5082816110a86b033b2e3c9fd0803ce8000000876115d9565b6110b2919061168a565b6110bc9190611616565b949350505050565b6000611126826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166111d09092919063ffffffff16565b8051909150156106cf57808060200190518101906111449190611651565b6106cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016107af565b60606105d6848460008585843b611243576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107af565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161126c91906116a2565b60006040518083038185875af1925050503d80600081146112a9576040519150601f19603f3d011682016040523d82523d6000602084013e6112ae565b606091505b50915091506112be8282866112c9565b979650505050505050565b606083156112d85750816105d9565b8251156112e85782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107af919061137a565b8035600f81900b811461132e57600080fd5b919050565b60006020828403121561134557600080fd5b6105d98261131c565b60005b83811015611369578181015183820152602001611351565b83811115610f585750506000910152565b602081526000825180602084015261139981604085016020870161134e565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000606084860312156113e057600080fd5b6113e98461131c565b92506113f76020850161131c565b9150604084013590509250925092565b60008060006060848603121561141c57600080fd5b833592506113f76020850161131c565b6000806000806080858703121561144257600080fd5b61144b8561131c565b93506114596020860161131c565b93969395505050506040820135916060013590565b60006020828403121561148057600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461132e57600080fd5b6000602082840312156114bd57600080fd5b6105d982611487565b600080604083850312156114d957600080fd5b6114e28361131c565b946020939093013593505050565b6000806040838503121561150357600080fd5b6114e283611487565b6000806040838503121561151f57600080fd5b8235915061152f6020840161131c565b90509250929050565b6000806040838503121561154b57600080fd5b61155483611487565b915061152f60208401611487565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000602082840312156115a357600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611611576116116115aa565b500290565b60008261164c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60006020828403121561166357600080fd5b815180151581146105d957600080fd5b600082821015611685576116856115aa565b500390565b6000821982111561169d5761169d6115aa565b500190565b600082516116b481846020870161134e565b919091019291505056fea264697066735822122085930fb95d77cfd8b121f00dfae6066e162c3aa4154af7bb3967ed233996408164736f6c634300080a003360a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a0033"; - -type CurveV1MockConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: CurveV1MockConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class CurveV1Mock__factory extends ContractFactory { - constructor(...args: CurveV1MockConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - coins_: string[], - underlying_coins_: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - coins_, - underlying_coins_, - overrides || {} - ) as Promise; - } - override getDeployTransaction( - coins_: string[], - underlying_coins_: string[], - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction( - coins_, - underlying_coins_, - overrides || {} - ); - } - override attach(address: string): CurveV1Mock { - return super.attach(address) as CurveV1Mock; - } - override connect(signer: Signer): CurveV1Mock__factory { - return super.connect(signer) as CurveV1Mock__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): CurveV1MockInterface { - return new utils.Interface(_abi) as CurveV1MockInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): CurveV1Mock { - return new Contract(address, _abi, signerOrProvider) as CurveV1Mock; - } -} diff --git a/src/types/factories/contracts/test/mocks/integrations/CurveV1StETHMock__factory.ts b/src/types/factories/contracts/test/mocks/integrations/CurveV1StETHMock__factory.ts deleted file mode 100644 index 492c0a72..00000000 --- a/src/types/factories/contracts/test/mocks/integrations/CurveV1StETHMock__factory.ts +++ /dev/null @@ -1,594 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - CurveV1StETHMock, - CurveV1StETHMockInterface, -} from "../../../../../contracts/test/mocks/integrations/CurveV1StETHMock"; - -const _abi = [ - { - inputs: [ - { - internalType: "address[]", - name: "_coins", - type: "address[]", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "NotImplementedException", - type: "error", - }, - { - inputs: [], - name: "A", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "A_precise", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256[2]", - name: "amounts", - type: "uint256[2]", - }, - { - internalType: "uint256", - name: "min_mint_amount", - type: "uint256", - }, - ], - name: "add_liquidity", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [], - name: "admin", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "admin_balances", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "admin_fee", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "i", - type: "uint256", - }, - ], - name: "balances", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "block_timestamp_last", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256[2]", - name: "", - type: "uint256[2]", - }, - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - name: "calc_token_amount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "int128", - name: "", - type: "int128", - }, - ], - name: "calc_withdraw_one_coin", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "coins", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "int128", - name: "j", - type: "int128", - }, - { - internalType: "uint256", - name: "dx", - type: "uint256", - }, - { - internalType: "uint256", - name: "min_dy", - type: "uint256", - }, - ], - name: "exchange", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "", - type: "int128", - }, - { - internalType: "int128", - name: "", - type: "int128", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "exchange_underlying", - outputs: [], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "fee", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "future_A", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "future_A_time", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "int128", - name: "j", - type: "int128", - }, - { - internalType: "uint256", - name: "dx", - type: "uint256", - }, - ], - name: "get_dy", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "", - type: "int128", - }, - { - internalType: "int128", - name: "", - type: "int128", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "get_dy_underlying", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "get_virtual_price", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "initial_A", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "initial_A_time", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "lp_token", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - { - internalType: "uint256[2]", - name: "min_amounts", - type: "uint256[2]", - }, - ], - name: "remove_liquidity", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256[2]", - name: "amounts", - type: "uint256[2]", - }, - { - internalType: "uint256", - name: "max_burn_amount", - type: "uint256", - }, - ], - name: "remove_liquidity_imbalance", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_token_amount", - type: "uint256", - }, - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "uint256", - name: "min_amount", - type: "uint256", - }, - ], - name: "remove_liquidity_one_coin", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "int128", - name: "i", - type: "int128", - }, - { - internalType: "int128", - name: "j", - type: "int128", - }, - { - internalType: "uint256", - name: "rate_RAY", - type: "uint256", - }, - ], - name: "setRate", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_price", - type: "uint256", - }, - ], - name: "set_virtual_price", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "token", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "virtualPrice", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x60806040523480156200001157600080fd5b5060405162003103380380620031038339810160408190526200003491620001d5565b80516200004990600290602084019062000113565b5060126040516200005a906200017d565b6060808252600790820152664352564d6f636b60c81b608082015260a0602082018190526015908201527f43525620666f72204375727665506f6f6c4d6f636b000000000000000000000060c082015260ff909116604082015260e001604051809103906000f080158015620000d4573d6000803e3d6000fd5b50600080546001600160a01b03929092166001600160a01b031992831681179091556001805490921617905550670de0b6b3a7640000600455620002a7565b8280548282559060005260206000209081019282156200016b579160200282015b828111156200016b57825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019062000134565b50620001799291506200018b565b5090565b61175880620019ab83390190565b5b808211156200017957600081556001016200018c565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b0381168114620001d057600080fd5b919050565b60006020808385031215620001e957600080fd5b82516001600160401b03808211156200020157600080fd5b818501915085601f8301126200021657600080fd5b8151818111156200022b576200022b620001a2565b8060051b604051601f19603f83011681018181108582111715620002535762000253620001a2565b6040529182528482019250838101850191888311156200027257600080fd5b938501935b828510156200029b576200028b85620001b8565b8452938501939285019262000277565b98975050505050505050565b6116f480620002b76000396000f3fe6080604052600436106101c25760003560e01c80638ea875f3116100f7578063ddca3f4311610095578063f446c1d011610064578063f446c1d01461020f578063f851a44014610432578063fc0c546a14610446578063fee3f7f91461020f57600080fd5b8063ddca3f431461020f578063e2e7d264146103d6578063e3103273146103f7578063ed8e84f31461041757600080fd5b8063b91434d1116100d1578063b91434d11461035e578063bb7b8b801461037e578063c661065714610393578063cc2b27d7146103b357600080fd5b80638ea875f314610328578063a6417ed61461033e578063b4b577ad1461020f57600080fd5b80635409491a1161016457806363543f061161013e57806363543f061461020f57806371035418146102b657806376a2f0f01461020f57806382c63066146102d657600080fd5b80635409491a1461020f5780635b36389c146102765780635e0d443f1461029657600080fd5b80631a4d01d2116101a05780631a4d01d2146102235780632081066c1461020f5780633df02124146102435780634903b0d11461025657600080fd5b806307211ef7146101c75780630b4c7e4d146101fa578063140522881461020f575b600080fd5b3480156101d357600080fd5b506101e76101e23660046112cf565b610473565b6040519081526020015b60405180910390f35b61020d6102083660046113a2565b6104a7565b005b34801561021b57600080fd5b5060006101e7565b34801561022f57600080fd5b5061020d61023e3660046113cd565b61061a565b61020d6102513660046113f2565b6107ad565b34801561026257600080fd5b506101e7610271366004611434565b610957565b34801561028257600080fd5b5061020d61029136600461144d565b610a1f565b3480156102a257600080fd5b506101e76102b13660046112cf565b610b69565b3480156102c257600080fd5b5061020d6102d1366004611434565b600455565b3480156102e257600080fd5b506000546103039073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101f1565b34801561033457600080fd5b506101e760045481565b34801561034a57600080fd5b5061020d6103593660046113f2565b610bb9565b34801561036a57600080fd5b5061020d6103793660046112cf565b610beb565b34801561038a57600080fd5b506004546101e7565b34801561039f57600080fd5b506103036103ae366004611434565b610c4c565b3480156103bf57600080fd5b506101e76103ce36600461147a565b600092915050565b3480156103e257600080fd5b506101e76103f1366004611434565b50600090565b34801561040357600080fd5b5061020d6104123660046113a2565b610c83565b34801561042357600080fd5b506101e76103ce3660046114ae565b34801561043e57600080fd5b506000610303565b34801561045257600080fd5b506001546103039073ffffffffffffffffffffffffffffffffffffffff1681565b60006040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815134146104b457600080fd5b60026001815481106104c8576104c86114ea565b60009182526020918290200154908301516040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481019190915273ffffffffffffffffffffffffffffffffffffffff909116906323b872dd906064016020604051808303816000875af1158015610554573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105789190611519565b506000546040517f40c10f190000000000000000000000000000000000000000000000000000000081523360048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f19906044015b6020604051808303816000875af11580156105f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106159190611519565b505050565b6000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810185905273ffffffffffffffffffffffffffffffffffffffff909116906379cc6790906044016020604051808303816000875af1158015610691573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106b59190611519565b5081600f0b600014156106f557604051339082156108fc029083906000818181858888f193505050501580156106ef573d6000803e3d6000fd5b50505050565b6002600181548110610709576107096114ea565b6000918252602090912001546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201526024810183905273ffffffffffffffffffffffffffffffffffffffff9091169063a9059cbb906044016020604051808303816000875af1158015610789573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ef9190611519565b60006107ba858585610b69565b905081811015610851576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f437572766556314d6f636b3a20494e53554646494349454e545f4f555450555460448201527f5f414d4f554e540000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b84600f0b600014156108c15782341461086957600080fd5b6108bc33826002876fffffffffffffffffffffffffffffffff1681548110610893576108936114ea565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169190610dcd565b610950565b34156108cc57600080fd5b6109213330856002896fffffffffffffffffffffffffffffffff16815481106108f7576108f76114ea565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16929190610ea1565b604051339082156108fc029083906000818181858888f1935050505015801561094e573d6000803e3d6000fd5b505b5050505050565b600081610965575047919050565b6002600181548110610979576109796114ea565b6000918252602090912001546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa1580156109f0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a149190611536565b92915050565b919050565b8051604051339180156108fc02916000818181858888f19350505050158015610a4c573d6000803e3d6000fd5b506002600181548110610a6157610a616114ea565b60009182526020918290200154908201516040517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063a9059cbb906044016020604051808303816000875af1158015610ae7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0b9190611519565b506000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810184905273ffffffffffffffffffffffffffffffffffffffff909116906379cc6790906044016105d2565b600f83810b60009081526003602090815260408083209386900b8352929052908120546b033b2e3c9fd0803ce800000090610ba590849061157e565b610baf91906115bb565b90505b9392505050565b6040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600f83810b60009081526003602090815260408083209386900b835292905220819055610c246b033b2e3c9fd0803ce800000082610eff565b600f92830b60009081526003602090815260408083209690950b825294909452919092205550565b60028181548110610c5c57600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b8151604051339180156108fc02916000818181858888f19350505050158015610cb0573d6000803e3d6000fd5b506002600181548110610cc557610cc56114ea565b60009182526020918290200154908301516040517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063a9059cbb906044016020604051808303816000875af1158015610d4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6f9190611519565b506000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906379cc6790906044016105d2565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526106159084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611065565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526106ef9085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401610e1f565b60408051808201909152600281527f4d33000000000000000000000000000000000000000000000000000000000000602082015260009082610f6e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108489190611622565b506000610f7c6002846115bb565b90506b033b2e3c9fd0803ce8000000610fb5827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611673565b610fbf91906115bb565b8411156040518060400160405280600281526020017f4d3100000000000000000000000000000000000000000000000000000000000081525090611030576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108489190611622565b5082816110496b033b2e3c9fd0803ce80000008761157e565b611053919061168a565b61105d91906115bb565b949350505050565b60006110c7826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166111719092919063ffffffff16565b80519091501561061557808060200190518101906110e59190611519565b610615576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610848565b6060610baf848460008585843b6111e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610848565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161120d91906116a2565b60006040518083038185875af1925050503d806000811461124a576040519150601f19603f3d011682016040523d82523d6000602084013e61124f565b606091505b509150915061125f82828661126a565b979650505050505050565b60608315611279575081610bb2565b8251156112895782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108489190611622565b8035600f81900b8114610a1a57600080fd5b6000806000606084860312156112e457600080fd5b6112ed846112bd565b92506112fb602085016112bd565b9150604084013590509250925092565b600082601f83011261131c57600080fd5b6040516040810181811067ffffffffffffffff82111715611366577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b806040525080604084018581111561137d57600080fd5b845b8181101561139757803583526020928301920161137f565b509195945050505050565b600080606083850312156113b557600080fd5b6113bf848461130b565b946040939093013593505050565b6000806000606084860312156113e257600080fd5b833592506112fb602085016112bd565b6000806000806080858703121561140857600080fd5b611411856112bd565b935061141f602086016112bd565b93969395505050506040820135916060013590565b60006020828403121561144657600080fd5b5035919050565b6000806060838503121561146057600080fd5b82359150611471846020850161130b565b90509250929050565b6000806040838503121561148d57600080fd5b82359150611471602084016112bd565b80151581146114ab57600080fd5b50565b600080606083850312156114c157600080fd5b60408301848111156114d257600080fd5b839250356114df8161149d565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561152b57600080fd5b8151610bb28161149d565b60006020828403121561154857600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156115b6576115b661154f565b500290565b6000826115f1577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b838110156116115781810151838201526020016115f9565b838111156106ef5750506000910152565b60208152600082518060208401526116418160408501602087016115f6565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000828210156116855761168561154f565b500390565b6000821982111561169d5761169d61154f565b500190565b600082516116b48184602087016115f6565b919091019291505056fea2646970667358221220b08d13831afa17fcbabcc6391231128e0bf9b6bc55cff50eb2ad2f57ee46714464736f6c634300080a003360a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a0033"; - -type CurveV1StETHMockConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: CurveV1StETHMockConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class CurveV1StETHMock__factory extends ContractFactory { - constructor(...args: CurveV1StETHMockConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - _coins: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(_coins, overrides || {}) as Promise; - } - override getDeployTransaction( - _coins: string[], - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(_coins, overrides || {}); - } - override attach(address: string): CurveV1StETHMock { - return super.attach(address) as CurveV1StETHMock; - } - override connect(signer: Signer): CurveV1StETHMock__factory { - return super.connect(signer) as CurveV1StETHMock__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): CurveV1StETHMockInterface { - return new utils.Interface(_abi) as CurveV1StETHMockInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): CurveV1StETHMock { - return new Contract(address, _abi, signerOrProvider) as CurveV1StETHMock; - } -} diff --git a/src/types/factories/contracts/test/mocks/integrations/LidoMock.sol/LidoMock__factory.ts b/src/types/factories/contracts/test/mocks/integrations/LidoMock.sol/LidoMock__factory.ts deleted file mode 100644 index e8a067b0..00000000 --- a/src/types/factories/contracts/test/mocks/integrations/LidoMock.sol/LidoMock__factory.ts +++ /dev/null @@ -1,525 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - LidoMock, - LidoMockInterface, -} from "../../../../../../contracts/test/mocks/integrations/LidoMock.sol/LidoMock"; - -const _abi = [ - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "spender", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "Approval", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "sender", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - indexed: false, - internalType: "address", - name: "referral", - type: "address", - }, - ], - name: "Mock_Submitted", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "Transfer", - type: "event", - }, - { - inputs: [ - { - internalType: "address", - name: "_owner", - type: "address", - }, - { - internalType: "address", - name: "_spender", - type: "address", - }, - ], - name: "allowance", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_spender", - type: "address", - }, - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "approve", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - { - internalType: "uint256", - name: "_sharesAmount", - type: "uint256", - }, - ], - name: "burnShares", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "decimals", - outputs: [ - { - internalType: "uint8", - name: "", - type: "uint8", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_spender", - type: "address", - }, - { - internalType: "uint256", - name: "_subtractedValue", - type: "uint256", - }, - ], - name: "decreaseAllowance", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_sharesAmount", - type: "uint256", - }, - ], - name: "getPooledEthByShares", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_ethAmount", - type: "uint256", - }, - ], - name: "getSharesByPooledEth", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "getTotalPooledEther", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "getTotalShares", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_spender", - type: "address", - }, - { - internalType: "uint256", - name: "_addedValue", - type: "uint256", - }, - ], - name: "increaseAllowance", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - ], - name: "sharesOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_referral", - type: "address", - }, - ], - name: "submit", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "payable", - type: "function", - }, - { - inputs: [], - name: "symbol", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "totalPooledEther", - type: "uint256", - }, - { - internalType: "uint256", - name: "totalShares", - type: "uint256", - }, - ], - name: "syncExchangeRate", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "totalPooledEtherSynced", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "totalSharesSynced", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "totalSupply", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_recipient", - type: "address", - }, - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "transfer", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_sender", - type: "address", - }, - { - internalType: "address", - name: "_recipient", - type: "address", - }, - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "transferFrom", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - stateMutability: "payable", - type: "receive", - }, -]; - -const _bytecode = - "0x60806040526000600255600060035534801561001a57600080fd5b506111fa8061002a6000396000f3fe60806040526004361061016e5760003560e01c80637a28fb88116100cb578063bdd17e1c1161007f578063dd62ed3e11610059578063dd62ed3e146103ee578063ee7a7c0414610441578063f5eb42dc1461046157600080fd5b8063bdd17e1c146103ad578063cdb9a21c146103c3578063d5002f2e146103d957600080fd5b8063a1903eab116100b0578063a1903eab1461035a578063a457c2d71461036d578063a9059cbb1461038d57600080fd5b80637a28fb88146102f457806395d89b411461031457600080fd5b806323b872dd1161012257806337cfdaca1161010757806337cfdaca1461020d57806339509351146102b457806370a08231146102d457600080fd5b806323b872dd14610278578063313ce5671461029857600080fd5b806318160ddd1161015357806318160ddd1461020d578063192084511461023057806322301f6e1461025057600080fd5b806306fdde0314610185578063095ea7b3146101dd57600080fd5b366101805761017d6000610481565b50005b600080fd5b34801561019157600080fd5b5060408051808201909152601781527f4c6971756964207374616b656420457468657220322e3000000000000000000060208201525b6040516101d49190610f63565b60405180910390f35b3480156101e957600080fd5b506101fd6101f8366004610fff565b610545565b60405190151581526020016101d4565b34801561021957600080fd5b5061022261055b565b6040519081526020016101d4565b34801561023c57600080fd5b5061022261024b366004611029565b61056b565b34801561025c57600080fd5b5061027661026b366004611042565b600391909155600255565b005b34801561028457600080fd5b506101fd610293366004611064565b6105ab565b3480156102a457600080fd5b50604051601281526020016101d4565b3480156102c057600080fd5b506101fd6102cf366004610fff565b610696565b3480156102e057600080fd5b506102226102ef3660046110a0565b6106d9565b34801561030057600080fd5b5061022261030f366004611029565b61070e565b34801561032057600080fd5b5060408051808201909152600581527f737445544800000000000000000000000000000000000000000000000000000060208201526101c7565b6102226103683660046110a0565b61073a565b34801561037957600080fd5b506101fd610388366004610fff565b610745565b34801561039957600080fd5b506101fd6103a8366004610fff565b6107f9565b3480156103b957600080fd5b5061022260035481565b3480156103cf57600080fd5b5061022260025481565b3480156103e557600080fd5b50610222610806565b3480156103fa57600080fd5b506102226104093660046110bb565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b34801561044d57600080fd5b5061027661045c366004610fff565b610811565b34801561046d57600080fd5b5061022261047c3660046110a0565b61081f565b60003334806104f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f5a45524f5f4445504f534954000000000000000000000000000000000000000060448201526064015b60405180910390fd5b60006104fc8261056b565b9050806105065750805b8160036000828254610518919061111d565b909155506105289050838261084a565b61053383838761093b565b61053d8382610992565b949350505050565b60006105523384846109ea565b50600192915050565b600061056660035490565b905090565b60008061057760035490565b9050806105875750600092915050565b6105a48161059e61059760025490565b8690610b52565b90610b5e565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001602090815260408083203384529091528120548281101561066c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f5452414e534645525f414d4f554e545f455843454544535f414c4c4f57414e4360448201527f450000000000000000000000000000000000000000000000000000000000000060648201526084016104e8565b610677858585610b6a565b61068b85336106868487610bef565b6109ea565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916105529185906106869086610bfb565b73ffffffffffffffffffffffffffffffffffffffff81166000908152602081905260408120546107089061070e565b92915050565b60008061071a60025490565b90508061072a5750600092915050565b6105a48161059e61059760035490565b600061070882610481565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156107e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4445435245415345445f414c4c4f57414e43455f42454c4f575f5a45524f000060448201526064016104e8565b6107ef33856106868487610bef565b5060019392505050565b6000610552338484610b6a565b600061056660025490565b61081b8282610c07565b5050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040812054610708565b73ffffffffffffffffffffffffffffffffffffffff82166108c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4d494e545f544f5f5448455f5a45524f5f41444452455353000000000000000060448201526064016104e8565b80600260008282546108d9919061111d565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205461090e9082610bfb565b73ffffffffffffffffffffffffffffffffffffffff90921660009081526020819052604090209190915550565b6040805183815273ffffffffffffffffffffffffffffffffffffffff83811660208301528516917fed8dd430b1e4bba98e943dc5b157cf7b54d9e12916d6c474ff5733a95001d03b910160405180910390a2505050565b73ffffffffffffffffffffffffffffffffffffffff821660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6109d58461070e565b60405190815260200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff8316610a67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f415050524f56455f46524f4d5f5a45524f5f414444524553530000000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff8216610ae4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f415050524f56455f544f5f5a45524f5f4144445245535300000000000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006105a48284611135565b60006105a48284611172565b6000610b758261056b565b9050610b82848483610d64565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610be191815260200190565b60405180910390a350505050565b60006105a482846111ad565b60006105a4828461111d565b73ffffffffffffffffffffffffffffffffffffffff8216610c84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4255524e5f46524f4d5f5448455f5a45524f5f4144445245535300000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205480821115610d14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4255524e5f414d4f554e545f455843454544535f42414c414e4345000000000060448201526064016104e8565b8160026000828254610d2691906111ad565b90915550610d3690508183610bef565b73ffffffffffffffffffffffffffffffffffffffff9093166000908152602081905260409020929092555050565b73ffffffffffffffffffffffffffffffffffffffff8316610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f5452414e534645525f46524f4d5f5448455f5a45524f5f41444452455353000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff8216610e5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f5452414e534645525f544f5f5448455f5a45524f5f414444524553530000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205480821115610eee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5452414e534645525f414d4f554e545f455843454544535f42414c414e43450060448201526064016104e8565b610ef88183610bef565b73ffffffffffffffffffffffffffffffffffffffff8086166000908152602081905260408082209390935590851681522054610f349083610bfb565b73ffffffffffffffffffffffffffffffffffffffff909316600090815260208190526040902092909255505050565b600060208083528351808285015260005b81811015610f9057858101830151858201604001528201610f74565b81811115610fa2576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ffa57600080fd5b919050565b6000806040838503121561101257600080fd5b61101b83610fd6565b946020939093013593505050565b60006020828403121561103b57600080fd5b5035919050565b6000806040838503121561105557600080fd5b50508035926020909101359150565b60008060006060848603121561107957600080fd5b61108284610fd6565b925061109060208501610fd6565b9150604084013590509250925092565b6000602082840312156110b257600080fd5b6105a482610fd6565b600080604083850312156110ce57600080fd5b6110d783610fd6565b91506110e560208401610fd6565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611130576111306110ee565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561116d5761116d6110ee565b500290565b6000826111a8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000828210156111bf576111bf6110ee565b50039056fea2646970667358221220a5b4f31162ba2b8b3424cef84b31ef91d05a825243602b5fdf758ffb49b8246364736f6c634300080a0033"; - -type LidoMockConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: LidoMockConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class LidoMock__factory extends ContractFactory { - constructor(...args: LidoMockConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): LidoMock { - return super.attach(address) as LidoMock; - } - override connect(signer: Signer): LidoMock__factory { - return super.connect(signer) as LidoMock__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): LidoMockInterface { - return new utils.Interface(_abi) as LidoMockInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): LidoMock { - return new Contract(address, _abi, signerOrProvider) as LidoMock; - } -} diff --git a/src/types/factories/contracts/test/mocks/integrations/LidoMock.sol/index.ts b/src/types/factories/contracts/test/mocks/integrations/LidoMock.sol/index.ts index 7464a9b2..eeecf212 100644 --- a/src/types/factories/contracts/test/mocks/integrations/LidoMock.sol/index.ts +++ b/src/types/factories/contracts/test/mocks/integrations/LidoMock.sol/index.ts @@ -2,4 +2,3 @@ /* tslint:disable */ /* eslint-disable */ export { ILidoMockEvents__factory } from "./ILidoMockEvents__factory"; -export { LidoMock__factory } from "./LidoMock__factory"; diff --git a/src/types/factories/contracts/test/mocks/integrations/UniswapV2Mock__factory.ts b/src/types/factories/contracts/test/mocks/integrations/UniswapV2Mock__factory.ts deleted file mode 100644 index dd351567..00000000 --- a/src/types/factories/contracts/test/mocks/integrations/UniswapV2Mock__factory.ts +++ /dev/null @@ -1,1060 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - UniswapV2Mock, - UniswapV2MockInterface, -} from "../../../../../contracts/test/mocks/integrations/UniswapV2Mock"; - -const _abi = [ - { - inputs: [], - name: "WETH", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "addLiquidity", - outputs: [ - { - internalType: "uint256", - name: "amountA", - type: "uint256", - }, - { - internalType: "uint256", - name: "amountB", - type: "uint256", - }, - { - internalType: "uint256", - name: "liquidity", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "addLiquidityETH", - outputs: [ - { - internalType: "uint256", - name: "amountToken", - type: "uint256", - }, - { - internalType: "uint256", - name: "amountETH", - type: "uint256", - }, - { - internalType: "uint256", - name: "liquidity", - type: "uint256", - }, - ], - stateMutability: "payable", - type: "function", - }, - { - inputs: [], - name: "factory", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "getAmountIn", - outputs: [ - { - internalType: "uint256", - name: "amountIn", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "getAmountOut", - outputs: [ - { - internalType: "uint256", - name: "amountOut", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountOut", - type: "uint256", - }, - { - internalType: "address[]", - name: "path", - type: "address[]", - }, - ], - name: "getAmountsIn", - outputs: [ - { - internalType: "uint256[]", - name: "amounts", - type: "uint256[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountIn", - type: "uint256", - }, - { - internalType: "address[]", - name: "path", - type: "address[]", - }, - ], - name: "getAmountsOut", - outputs: [ - { - internalType: "uint256[]", - name: "amounts", - type: "uint256[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "tokenIn", - type: "address", - }, - { - internalType: "address", - name: "tokenOut", - type: "address", - }, - ], - name: "getRate", - outputs: [ - { - internalType: "uint256", - name: "rate", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "quote", - outputs: [ - { - internalType: "uint256", - name: "amountB", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "removeLiquidity", - outputs: [ - { - internalType: "uint256", - name: "amountA", - type: "uint256", - }, - { - internalType: "uint256", - name: "amountB", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "removeLiquidityETH", - outputs: [ - { - internalType: "uint256", - name: "amountToken", - type: "uint256", - }, - { - internalType: "uint256", - name: "amountETH", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "removeLiquidityETHSupportingFeeOnTransferTokens", - outputs: [ - { - internalType: "uint256", - name: "amountETH", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "bool", - name: "", - type: "bool", - }, - { - internalType: "uint8", - name: "", - type: "uint8", - }, - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - name: "removeLiquidityETHWithPermit", - outputs: [ - { - internalType: "uint256", - name: "amountToken", - type: "uint256", - }, - { - internalType: "uint256", - name: "amountETH", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "bool", - name: "", - type: "bool", - }, - { - internalType: "uint8", - name: "", - type: "uint8", - }, - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - name: "removeLiquidityETHWithPermitSupportingFeeOnTransferTokens", - outputs: [ - { - internalType: "uint256", - name: "amountETH", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "bool", - name: "", - type: "bool", - }, - { - internalType: "uint8", - name: "", - type: "uint8", - }, - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - name: "removeLiquidityWithPermit", - outputs: [ - { - internalType: "uint256", - name: "amountA", - type: "uint256", - }, - { - internalType: "uint256", - name: "amountB", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "tokenFrom", - type: "address", - }, - { - internalType: "address", - name: "tokenTo", - type: "address", - }, - { - internalType: "uint256", - name: "rate_RAY", - type: "uint256", - }, - ], - name: "setRate", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "address[]", - name: "", - type: "address[]", - }, - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "swapETHForExactTokens", - outputs: [ - { - internalType: "uint256[]", - name: "", - type: "uint256[]", - }, - ], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "address[]", - name: "", - type: "address[]", - }, - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "swapExactETHForTokens", - outputs: [ - { - internalType: "uint256[]", - name: "amounts", - type: "uint256[]", - }, - ], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "address[]", - name: "", - type: "address[]", - }, - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "swapExactETHForTokensSupportingFeeOnTransferTokens", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "address[]", - name: "", - type: "address[]", - }, - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "swapExactTokensForETH", - outputs: [ - { - internalType: "uint256[]", - name: "amounts", - type: "uint256[]", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "address[]", - name: "", - type: "address[]", - }, - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "swapExactTokensForETHSupportingFeeOnTransferTokens", - outputs: [], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountIn", - type: "uint256", - }, - { - internalType: "uint256", - name: "amountOutMin", - type: "uint256", - }, - { - internalType: "address[]", - name: "path", - type: "address[]", - }, - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256", - }, - ], - name: "swapExactTokensForTokens", - outputs: [ - { - internalType: "uint256[]", - name: "", - type: "uint256[]", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "address[]", - name: "", - type: "address[]", - }, - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "swapExactTokensForTokensSupportingFeeOnTransferTokens", - outputs: [], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "address[]", - name: "", - type: "address[]", - }, - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "swapTokensForExactETH", - outputs: [ - { - internalType: "uint256[]", - name: "amounts", - type: "uint256[]", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountOut", - type: "uint256", - }, - { - internalType: "uint256", - name: "amountInMax", - type: "uint256", - }, - { - internalType: "address[]", - name: "path", - type: "address[]", - }, - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256", - }, - ], - name: "swapTokensForExactTokens", - outputs: [ - { - internalType: "uint256[]", - name: "", - type: "uint256[]", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, -]; - -const _bytecode = - "0x608060405234801561001057600080fd5b50611a3c806100206000396000f3fe6080604052600436106101a15760003560e01c806385f8c259116100e1578063baa2abde1161008a578063ded9382a11610064578063ded9382a14610424578063e8e3370014610451578063f305d7191461049a578063fb3bdb41146104b957600080fd5b8063baa2abde146103da578063c45a015514610382578063d06ca61f1461040457600080fd5b8063ad615dec116100bb578063ad615dec146101e9578063af2979eb1461039e578063b6f9de95146103c557600080fd5b806385f8c259146101e95780638803dbee14610362578063ad5c46481461038257600080fd5b806338ed17391161014e5780635b0d5984116101285780635b0d5984146102fb5780635c11d79514610326578063791ac947146103265780637ff36ab51461034957600080fd5b806338ed1739146102b95780634a25d94a146102175780635911fb9a146102d957600080fd5b80631f00ca741161017f5780631f00ca741461024b5780632195995c1461026b578063379b87ea1461029957600080fd5b806302751cec146101a6578063054d50d4146101e957806318cbafe514610217575b600080fd5b3480156101b257600080fd5b506101cf6101c13660046112b8565b600080965096945050505050565b604080519283526020830191909152015b60405180910390f35b3480156101f557600080fd5b50610209610204366004611310565b6104cc565b6040519081526020016101e0565b34801561022357600080fd5b5061023e610232366004611388565b60609695505050505050565b6040516101e091906113f8565b34801561025757600080fd5b5061023e61026636600461143c565b6104d6565b34801561027757600080fd5b506101cf6102863660046114aa565b6000809b509b9950505050505050505050565b3480156102a557600080fd5b506102096102b436600461154e565b610728565b3480156102c557600080fd5b5061023e6102d4366004611388565b6107c6565b3480156102e557600080fd5b506102f96102f4366004611581565b6109a6565b005b34801561030757600080fd5b506102096103163660046115bd565b60009a9950505050505050505050565b34801561033257600080fd5b506102f9610341366004611388565b505050505050565b61023e61035736600461164f565b606095945050505050565b34801561036e57600080fd5b5061023e61037d366004611388565b610a28565b34801561038e57600080fd5b50604051600081526020016101e0565b3480156103aa57600080fd5b506102096103b93660046112b8565b60009695505050505050565b6102f96103d336600461164f565b5050505050565b3480156103e657600080fd5b506101cf6103f53660046116b5565b60008097509795505050505050565b34801561041057600080fd5b5061023e61041f36600461143c565b610b7e565b34801561043057600080fd5b506101cf61043f3660046115bd565b6000809a509a98505050505050505050565b34801561045d57600080fd5b5061047f61046c36600461171f565b6000806000985098509895505050505050565b604080519384526020840192909252908201526060016101e0565b61047f6104a83660046112b8565b600080600096509650969350505050565b61023e6104c736600461164f565b610d65565b60005b9392505050565b60606002821015610548576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f496e636f72726563742070617468206c656e677468000000000000000000000060448201526064015b60405180910390fd5b8167ffffffffffffffff81111561056157610561611793565b60405190808252806020026020018201604052801561058a578160200160208202803683370190505b509050838161059a6001856117f1565b815181106105aa576105aa611808565b602090810291909101015260006105c26001846117f1565b90505b801561072057600061062885856105dd6001866117f1565b8181106105ec576105ec611808565b90506020020160208101906106019190611837565b86868581811061061357610613611808565b90506020020160208101906102b49190611837565b905080610691576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f556e69737761704d6f636b3a2052617465206973206e6f742073657475700000604482015260640161053f565b6103e5816b033b2e3c9fd0803ce80000008585815181106106b4576106b4611808565b60200260200101516106c69190611852565b6106d0919061188f565b6106dc906103e8611852565b6106e6919061188f565b836106f26001856117f1565b8151811061070257610702611808565b60209081029190910101525080610718816118ca565b9150506105c5565b509392505050565b73ffffffffffffffffffffffffffffffffffffffff80831660009081526020818152604080832093851683529290522054806107c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f546f6b656e2070616972206e6f7420666f756e64000000000000000000000000604482015260640161053f565b92915050565b60608142811015610833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015260640161053f565b6000610840898888610b7e565b90506000816108506001896117f1565b8151811061086057610860611808565b60200260200101519050888110156108fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f556e69737761705632526f757465723a20494e53554646494349454e545f4f5560448201527f545055545f414d4f554e54000000000000000000000000000000000000000000606482015260840161053f565b61094633308c8b8b600081811061091357610913611808565b90506020020160208101906109289190611837565b73ffffffffffffffffffffffffffffffffffffffff16929190610d94565b61099986828a8a6109586001826117f1565b81811061096757610967611808565b905060200201602081019061097c9190611837565b73ffffffffffffffffffffffffffffffffffffffff169190610e76565b5098975050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152602081815260408083209386168352929052208190556109ef6b033b2e3c9fd0803ce800000082610ed1565b73ffffffffffffffffffffffffffffffffffffffff92831660009081526020818152604080832096909516825294909452919092205550565b60608142811015610a95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015260640161053f565b6000610aa28988886104d6565b9050600081600081518110610ab957610ab9611808565b6020026020010151905088811115610b53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f556e69737761705632526f757465723a204558434553534956455f494e50555460448201527f5f414d4f554e5400000000000000000000000000000000000000000000000000606482015260840161053f565b610b6c3330838b8b600081811061091357610913611808565b610999868b8a8a6109586001826117f1565b60606002821015610beb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f496e636f72726563742070617468206c656e6774680000000000000000000000604482015260640161053f565b8167ffffffffffffffff811115610c0457610c04611793565b604051908082528060200260200182016040528015610c2d578160200160208202803683370190505b5090508381600081518110610c4457610c44611808565b602090810291909101015260015b82811015610720576000610c6c85856105dd6001866117f1565b905080610cd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f556e69737761704d6f636b3a2052617465206973206e6f742073657475700000604482015260640161053f565b6103e86103e56b033b2e3c9fd0803ce80000008386610cf56001886117f1565b81518110610d0557610d05611808565b6020026020010151610d179190611852565b610d21919061188f565b610d2b9190611852565b610d35919061188f565b838381518110610d4757610d47611808565b60209081029190910101525080610d5d816118ff565b915050610c52565b604080516001808252818301909252606091600091906020808301908036833701905050979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052610e709085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611037565b50505050565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610ecc9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401610dee565b505050565b60408051808201909152600281527f4d33000000000000000000000000000000000000000000000000000000000000602082015260009082610f40576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053f9190611964565b506000610f4e60028461188f565b90506b033b2e3c9fd0803ce8000000610f87827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6117f1565b610f91919061188f565b8411156040518060400160405280600281526020017f4d3100000000000000000000000000000000000000000000000000000000000081525090611002576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053f9190611964565b50828161101b6b033b2e3c9fd0803ce800000087611852565b61102591906119b5565b61102f919061188f565b949350505050565b6000611099826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166111439092919063ffffffff16565b805190915015610ecc57808060200190518101906110b791906119cd565b610ecc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161053f565b606061102f848460008585843b6111b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161053f565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516111df91906119ea565b60006040518083038185875af1925050503d806000811461121c576040519150601f19603f3d011682016040523d82523d6000602084013e611221565b606091505b509150915061123182828661123c565b979650505050505050565b6060831561124b5750816104cf565b82511561125b5782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053f9190611964565b803573ffffffffffffffffffffffffffffffffffffffff811681146112b357600080fd5b919050565b60008060008060008060c087890312156112d157600080fd5b6112da8761128f565b95506020870135945060408701359350606087013592506112fd6080880161128f565b915060a087013590509295509295509295565b60008060006060848603121561132557600080fd5b505081359360208301359350604090920135919050565b60008083601f84011261134e57600080fd5b50813567ffffffffffffffff81111561136657600080fd5b6020830191508360208260051b850101111561138157600080fd5b9250929050565b60008060008060008060a087890312156113a157600080fd5b8635955060208701359450604087013567ffffffffffffffff8111156113c657600080fd5b6113d289828a0161133c565b90955093506113e590506060880161128f565b9150608087013590509295509295509295565b6020808252825182820181905260009190848201906040850190845b8181101561143057835183529284019291840191600101611414565b50909695505050505050565b60008060006040848603121561145157600080fd5b83359250602084013567ffffffffffffffff81111561146f57600080fd5b61147b8682870161133c565b9497909650939450505050565b801515811461149657600080fd5b50565b803560ff811681146112b357600080fd5b60008060008060008060008060008060006101608c8e0312156114cc57600080fd5b6114d58c61128f565b9a506114e360208d0161128f565b995060408c0135985060608c0135975060808c0135965061150660a08d0161128f565b955060c08c0135945060e08c013561151d81611488565b935061152c6101008d01611499565b92506101208c013591506101408c013590509295989b509295989b9093969950565b6000806040838503121561156157600080fd5b61156a8361128f565b91506115786020840161128f565b90509250929050565b60008060006060848603121561159657600080fd5b61159f8461128f565b92506115ad6020850161128f565b9150604084013590509250925092565b6000806000806000806000806000806101408b8d0312156115dd57600080fd5b6115e68b61128f565b995060208b0135985060408b0135975060608b0135965061160960808c0161128f565b955060a08b0135945060c08b013561162081611488565b935061162e60e08c01611499565b92506101008b013591506101208b013590509295989b9194979a5092959850565b60008060008060006080868803121561166757600080fd5b85359450602086013567ffffffffffffffff81111561168557600080fd5b6116918882890161133c565b90955093506116a490506040870161128f565b949793965091946060013592915050565b600080600080600080600060e0888a0312156116d057600080fd5b6116d98861128f565b96506116e76020890161128f565b955060408801359450606088013593506080880135925061170a60a0890161128f565b915060c0880135905092959891949750929550565b600080600080600080600080610100898b03121561173c57600080fd5b6117458961128f565b975061175360208a0161128f565b965060408901359550606089013594506080890135935060a0890135925061177d60c08a0161128f565b915060e089013590509295985092959890939650565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015611803576118036117c2565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561184957600080fd5b6104cf8261128f565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561188a5761188a6117c2565b500290565b6000826118c5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000816118d9576118d96117c2565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611931576119316117c2565b5060010190565b60005b8381101561195357818101518382015260200161193b565b83811115610e705750506000910152565b6020815260008251806020840152611983816040850160208701611938565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b600082198211156119c8576119c86117c2565b500190565b6000602082840312156119df57600080fd5b81516104cf81611488565b600082516119fc818460208701611938565b919091019291505056fea2646970667358221220c83ba4b7a780d6bcd42d58ce63ee43d73cb764a70cd33e8cc91609b9554a872e64736f6c634300080a0033"; - -type UniswapV2MockConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: UniswapV2MockConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class UniswapV2Mock__factory extends ContractFactory { - constructor(...args: UniswapV2MockConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): UniswapV2Mock { - return super.attach(address) as UniswapV2Mock; - } - override connect(signer: Signer): UniswapV2Mock__factory { - return super.connect(signer) as UniswapV2Mock__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): UniswapV2MockInterface { - return new utils.Interface(_abi) as UniswapV2MockInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): UniswapV2Mock { - return new Contract(address, _abi, signerOrProvider) as UniswapV2Mock; - } -} diff --git a/src/types/factories/contracts/test/mocks/integrations/UniswapV3Mock__factory.ts b/src/types/factories/contracts/test/mocks/integrations/UniswapV3Mock__factory.ts deleted file mode 100644 index 29f21ed7..00000000 --- a/src/types/factories/contracts/test/mocks/integrations/UniswapV3Mock__factory.ts +++ /dev/null @@ -1,776 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - UniswapV3Mock, - UniswapV3MockInterface, -} from "../../../../../contracts/test/mocks/integrations/UniswapV3Mock"; - -const _abi = [ - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "", - type: "address", - }, - ], - name: "log_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "log_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - name: "log_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "int256", - name: "", - type: "int256", - }, - ], - name: "log_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "address", - name: "val", - type: "address", - }, - ], - name: "log_named_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes", - name: "val", - type: "bytes", - }, - ], - name: "log_named_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes32", - name: "val", - type: "bytes32", - }, - ], - name: "log_named_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - ], - name: "log_named_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "string", - name: "val", - type: "string", - }, - ], - name: "log_named_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - ], - name: "log_named_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "log_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "logs", - type: "event", - }, - { - inputs: [], - name: "IS_TEST", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - components: [ - { - internalType: "bytes", - name: "path", - type: "bytes", - }, - { - internalType: "address", - name: "recipient", - type: "address", - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256", - }, - { - internalType: "uint256", - name: "amountIn", - type: "uint256", - }, - { - internalType: "uint256", - name: "amountOutMinimum", - type: "uint256", - }, - ], - internalType: "struct ISwapRouter.ExactInputParams", - name: "params", - type: "tuple", - }, - ], - name: "exactInput", - outputs: [ - { - internalType: "uint256", - name: "amountOut", - type: "uint256", - }, - ], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - components: [ - { - internalType: "address", - name: "tokenIn", - type: "address", - }, - { - internalType: "address", - name: "tokenOut", - type: "address", - }, - { - internalType: "uint24", - name: "fee", - type: "uint24", - }, - { - internalType: "address", - name: "recipient", - type: "address", - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256", - }, - { - internalType: "uint256", - name: "amountIn", - type: "uint256", - }, - { - internalType: "uint256", - name: "amountOutMinimum", - type: "uint256", - }, - { - internalType: "uint160", - name: "sqrtPriceLimitX96", - type: "uint160", - }, - ], - internalType: "struct ISwapRouter.ExactInputSingleParams", - name: "params", - type: "tuple", - }, - ], - name: "exactInputSingle", - outputs: [ - { - internalType: "uint256", - name: "amountOut", - type: "uint256", - }, - ], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - components: [ - { - internalType: "bytes", - name: "path", - type: "bytes", - }, - { - internalType: "address", - name: "recipient", - type: "address", - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256", - }, - { - internalType: "uint256", - name: "amountOut", - type: "uint256", - }, - { - internalType: "uint256", - name: "amountInMaximum", - type: "uint256", - }, - ], - internalType: "struct ISwapRouter.ExactOutputParams", - name: "params", - type: "tuple", - }, - ], - name: "exactOutput", - outputs: [ - { - internalType: "uint256", - name: "amountIn", - type: "uint256", - }, - ], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - components: [ - { - internalType: "address", - name: "tokenIn", - type: "address", - }, - { - internalType: "address", - name: "tokenOut", - type: "address", - }, - { - internalType: "uint24", - name: "fee", - type: "uint24", - }, - { - internalType: "address", - name: "recipient", - type: "address", - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256", - }, - { - internalType: "uint256", - name: "amountOut", - type: "uint256", - }, - { - internalType: "uint256", - name: "amountInMaximum", - type: "uint256", - }, - { - internalType: "uint160", - name: "sqrtPriceLimitX96", - type: "uint160", - }, - ], - internalType: "struct ISwapRouter.ExactOutputSingleParams", - name: "params", - type: "tuple", - }, - ], - name: "exactOutputSingle", - outputs: [ - { - internalType: "uint256", - name: "amountIn", - type: "uint256", - }, - ], - stateMutability: "payable", - type: "function", - }, - { - inputs: [], - name: "failed", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes", - name: "path", - type: "bytes", - }, - { - internalType: "uint256", - name: "amountIn", - type: "uint256", - }, - ], - name: "quoteExactInput", - outputs: [ - { - internalType: "uint256", - name: "amountOut", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "tokenIn", - type: "address", - }, - { - internalType: "address", - name: "tokenOut", - type: "address", - }, - { - internalType: "uint24", - name: "fee", - type: "uint24", - }, - { - internalType: "uint256", - name: "amountIn", - type: "uint256", - }, - { - internalType: "uint160", - name: "", - type: "uint160", - }, - ], - name: "quoteExactInputSingle", - outputs: [ - { - internalType: "uint256", - name: "amountOut", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes", - name: "path", - type: "bytes", - }, - { - internalType: "uint256", - name: "amountOut", - type: "uint256", - }, - ], - name: "quoteExactOutput", - outputs: [ - { - internalType: "uint256", - name: "amountIn", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "tokenIn", - type: "address", - }, - { - internalType: "address", - name: "tokenOut", - type: "address", - }, - { - internalType: "uint24", - name: "fee", - type: "uint24", - }, - { - internalType: "uint256", - name: "amountOut", - type: "uint256", - }, - { - internalType: "uint160", - name: "", - type: "uint160", - }, - ], - name: "quoteExactOutputSingle", - outputs: [ - { - internalType: "uint256", - name: "amountIn", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint24", - name: "", - type: "uint24", - }, - ], - name: "rates", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "tokenFrom", - type: "address", - }, - { - internalType: "address", - name: "tokenTo", - type: "address", - }, - { - internalType: "uint24", - name: "fee", - type: "uint24", - }, - { - internalType: "uint256", - name: "rate_RAY", - type: "uint256", - }, - ], - name: "setRate", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "tokenFrom", - type: "address", - }, - { - internalType: "address", - name: "tokenTo", - type: "address", - }, - { - internalType: "uint256", - name: "rate_RAY", - type: "uint256", - }, - ], - name: "setRate", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, -]; - -const _bytecode = - "0x60806040526000805460ff1916600117905534801561001d57600080fd5b50611be18061002d6000396000f3fe6080604052600436106100d25760003560e01c8063ba414fa61161007f578063db3e219811610059578063db3e219814610215578063f28c049814610228578063f7729d431461023b578063fa7626d41461025b57600080fd5b8063ba414fa6146101bd578063c04b8d59146101e2578063cdca1753146101f557600080fd5b8063414bf389116100b0578063414bf3891461014c57806347485d2a1461015f5780635911fb9a1461019d57600080fd5b80632ccbc99b146100d75780632f80bb1d146100f957806330d07f211461012c575b600080fd5b3480156100e357600080fd5b506100f76100f2366004611672565b610275565b005b34801561010557600080fd5b506101196101143660046116f0565b61031f565b6040519081526020015b60405180910390f35b34801561013857600080fd5b506101196101473660046117c3565b610468565b61011961015a366004611842565b610566565b34801561016b57600080fd5b5061011961017a36600461185f565b600160209081526000938452604080852082529284528284209052825290205481565b3480156101a957600080fd5b506100f76101b83660046118a6565b6106b5565b3480156101c957600080fd5b506101d26106c8565b6040519015158152602001610123565b6101196101f03660046118f9565b610826565b34801561020157600080fd5b506101196102103660046116f0565b6109b5565b610119610223366004611842565b610af1565b6101196102363660046118f9565b610c00565b34801561024757600080fd5b506101196102563660046117c3565b610d4e565b34801561026757600080fd5b506000546101d29060ff1681565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160209081526040808320938716835292815282822062ffffff86168352905220819055806102ce6b033b2e3c9fd0803ce80000008061195d565b6102d8919061199a565b73ffffffffffffffffffffffffffffffffffffffff938416600090815260016020908152604080832097909616825295865284812062ffffff909416815292909452502055565b805b600361032f6014600261195d565b61033991906119d5565b83511061046257600080600061034e86610e35565b73ffffffffffffffffffffffffffffffffffffffff8083166000908152600160209081526040808320938716835292815282822062ffffff8516835290522054929550909350915080610402576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f556e697377617056334d6f636b3a2052617465206973206e6f7420736574757060448201526064015b60405180910390fd5b61041462ffffff8316620f42406119ed565b8161042b6b033b2e3c9fd0803ce80000008861195d565b610435919061199a565b61044290620f424061195d565b61044c919061199a565b945061045787610e71565b965050505050610321565b92915050565b73ffffffffffffffffffffffffffffffffffffffff8086166000908152600160209081526040808320938816835292815282822062ffffff8716835290529081205480610511576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f556e697377617056334d6f636b3a2052617465206973206e6f7420736574757060448201526064016103f9565b61052362ffffff8616620f42406119ed565b8161053a6b033b2e3c9fd0803ce80000008761195d565b610544919061199a565b61055190620f424061195d565b61055b919061199a565b979650505050505050565b60006105a46105786020840184611a04565b6105886040850160208601611a04565b6105986060860160408701611a21565b8560a001356000610d4e565b90508160c0013581101561063a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f556e69737761705632526f757465723a20494e53554646494349454e545f4f5560448201527f545055545f414d4f554e5400000000000000000000000000000000000000000060648201526084016103f9565b61066f333060a08501356106516020870187611a04565b73ffffffffffffffffffffffffffffffffffffffff16929190610ea2565b6106b06106826080840160608501611a04565b826106936040860160208701611a04565b73ffffffffffffffffffffffffffffffffffffffff169190610f84565b919050565b6106c38383610bb884610275565b505050565b60008054610100900460ff16156106e85750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106b05760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000008284015282518083038401815260608301909352600092909161078d917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc491608001611a68565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526107c591611ab0565b6000604051808303816000865af19150503d8060008114610802576040519150601f19603f3d011682016040523d82523d6000602084013e610807565b606091505b509150508080602001905181019061081f9190611acc565b9392505050565b600080806108716108378580611aee565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610fda92505050565b90925090506108c16108838580611aee565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505060608601356109b5565b92508360800135831015610957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f556e69737761705632526f757465723a20494e53554646494349454e545f4f5560448201527f545055545f414d4f554e5400000000000000000000000000000000000000000060648201526084016103f9565b61097d73ffffffffffffffffffffffffffffffffffffffff831633306060880135610ea2565b6109ae6109906040860160208701611a04565b73ffffffffffffffffffffffffffffffffffffffff83169085610f84565b5050919050565b805b60036109c56014600261195d565b6109cf91906119d5565b8351106104625760008060006109e486610e35565b73ffffffffffffffffffffffffffffffffffffffff8084166000908152600160209081526040808320938616835292815282822062ffffff8516835290522054929550909350915080610a93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f556e697377617056334d6f636b3a2052617465206973206e6f7420736574757060448201526064016103f9565b620f4240610aa662ffffff8416826119ed565b6b033b2e3c9fd0803ce8000000610abd848961195d565b610ac7919061199a565b610ad1919061195d565b610adb919061199a565b9450610ae687610e71565b9650505050506109b7565b6000610b2f610b036020840184611a04565b610b136040850160208601611a04565b610b236060860160408701611a21565b8560a001356000610468565b90508160c00135811115610bc5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f556e69737761705632526f757465723a20494e53554646494349454e545f4f5560448201527f545055545f414d4f554e5400000000000000000000000000000000000000000060648201526084016103f9565b610bd83330836106516020870187611a04565b6106b0610beb6080840160608501611a04565b60a08401356106936040860160208701611a04565b60008080610c116108378580611aee565b9092509050610c61610c238580611aee565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050606086013561031f565b92508360800135831115610cf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f556e69737761705632526f757465723a20494e53554646494349454e545f4f5560448201527f545055545f414d4f554e5400000000000000000000000000000000000000000060648201526084016103f9565b610d1973ffffffffffffffffffffffffffffffffffffffff8216333086610ea2565b6109ae610d2c6040860160208701611a04565b73ffffffffffffffffffffffffffffffffffffffff8416906060870135610f84565b73ffffffffffffffffffffffffffffffffffffffff8086166000908152600160209081526040808320938816835292815282822062ffffff8716835290529081205480610df7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f556e697377617056334d6f636b3a2052617465206973206e6f7420736574757060448201526064016103f9565b620f4240610e0a62ffffff8716826119ed565b6b033b2e3c9fd0803ce8000000610e21848861195d565b610e2b919061199a565b610551919061195d565b60008080610e43848261101c565b9250610e508460146110ac565b9050610e68610e61600360146119d5565b859061101c565b91509193909250565b6060610462610e82600360146119d5565b610e8e600360146119d5565b8451610e9a91906119ed565b8491906111a0565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052610f7e9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261131a565b50505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526106c39084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401610efc565b600080610fe683610e35565b50909250610ff5905083611426565b1561100a5761100383610e71565b9250915091565b61101383610e35565b50915050915091565b60006110298260146119d5565b83511015611093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f746f416464726573735f6f75744f66426f756e6473000000000000000000000060448201526064016103f9565b5001602001516c01000000000000000000000000900490565b6000816110ba8160036119d5565b1015611122576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f746f55696e7432345f6f766572666c6f7700000000000000000000000000000060448201526064016103f9565b61112d8260036119d5565b83511015611197576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f746f55696e7432345f6f75744f66426f756e647300000000000000000000000060448201526064016103f9565b50016003015190565b6060816111ae81601f6119d5565b1015611216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016103f9565b61122082846119d5565b8451101561128a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e647300000000000000000000000000000060448201526064016103f9565b6060821580156112a95760405191506000825260208201604052611311565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156112e25780518352602092830192016112ca565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b600061137c826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166114609092919063ffffffff16565b8051909150156106c3578080602001905181019061139a9190611acc565b6106c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016103f9565b6000611434600360146119d5565b60146114416003826119d5565b61144b91906119d5565b61145591906119d5565b825110159050919050565b606061146f8484600085611477565b949350505050565b606082471015611509576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016103f9565b843b611571576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016103f9565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161159a9190611ab0565b60006040518083038185875af1925050503d80600081146115d7576040519150601f19603f3d011682016040523d82523d6000602084013e6115dc565b606091505b509150915061055b828286606083156115f657508161081f565b8251156116065782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103f99190611b5a565b73ffffffffffffffffffffffffffffffffffffffff8116811461165c57600080fd5b50565b803562ffffff811681146106b057600080fd5b6000806000806080858703121561168857600080fd5b84356116938161163a565b935060208501356116a38161163a565b92506116b16040860161165f565b9396929550929360600135925050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561170357600080fd5b823567ffffffffffffffff8082111561171b57600080fd5b818501915085601f83011261172f57600080fd5b813581811115611741576117416116c1565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715611787576117876116c1565b816040528281528860208487010111156117a057600080fd5b826020860160208301376000602093820184015298969091013596505050505050565b600080600080600060a086880312156117db57600080fd5b85356117e68161163a565b945060208601356117f68161163a565b93506118046040870161165f565b925060608601359150608086013561181b8161163a565b809150509295509295909350565b6000610100828403121561183c57600080fd5b50919050565b6000610100828403121561185557600080fd5b61081f8383611829565b60008060006060848603121561187457600080fd5b833561187f8161163a565b9250602084013561188f8161163a565b915061189d6040850161165f565b90509250925092565b6000806000606084860312156118bb57600080fd5b83356118c68161163a565b925060208401356118d68161163a565b929592945050506040919091013590565b600060a0828403121561183c57600080fd5b60006020828403121561190b57600080fd5b813567ffffffffffffffff81111561192257600080fd5b61146f848285016118e7565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156119955761199561192e565b500290565b6000826119d0577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600082198211156119e8576119e861192e565b500190565b6000828210156119ff576119ff61192e565b500390565b600060208284031215611a1657600080fd5b813561081f8161163a565b600060208284031215611a3357600080fd5b61081f8261165f565b60005b83811015611a57578181015183820152602001611a3f565b83811115610f7e5750506000910152565b7fffffffff000000000000000000000000000000000000000000000000000000008316815260008251611aa2816004850160208701611a3c565b919091016004019392505050565b60008251611ac2818460208701611a3c565b9190910192915050565b600060208284031215611ade57600080fd5b8151801515811461081f57600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112611b2357600080fd5b83018035915067ffffffffffffffff821115611b3e57600080fd5b602001915036819003821315611b5357600080fd5b9250929050565b6020815260008251806020840152611b79816040850160208701611a3c565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea26469706673582212204cf30f1ca2431e63304f0a45d5cefa0164fe6393b35a339d16bca5512d511dd064736f6c634300080a0033"; - -type UniswapV3MockConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: UniswapV3MockConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class UniswapV3Mock__factory extends ContractFactory { - constructor(...args: UniswapV3MockConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): UniswapV3Mock { - return super.attach(address) as UniswapV3Mock; - } - override connect(signer: Signer): UniswapV3Mock__factory { - return super.connect(signer) as UniswapV3Mock__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): UniswapV3MockInterface { - return new utils.Interface(_abi) as UniswapV3MockInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): UniswapV3Mock { - return new Contract(address, _abi, signerOrProvider) as UniswapV3Mock; - } -} diff --git a/src/types/factories/contracts/test/mocks/integrations/YearnV2Mock__factory.ts b/src/types/factories/contracts/test/mocks/integrations/YearnV2Mock__factory.ts deleted file mode 100644 index e78e48cb..00000000 --- a/src/types/factories/contracts/test/mocks/integrations/YearnV2Mock__factory.ts +++ /dev/null @@ -1,609 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - YearnV2Mock, - YearnV2MockInterface, -} from "../../../../../contracts/test/mocks/integrations/YearnV2Mock"; - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "_token", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "spender", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "Approval", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "previousOwner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "OwnershipTransferred", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "Transfer", - type: "event", - }, - { - inputs: [ - { - internalType: "address", - name: "updater", - type: "address", - }, - ], - name: "addUpdater", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "owner", - type: "address", - }, - { - internalType: "address", - name: "spender", - type: "address", - }, - ], - name: "allowance", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "approve", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "decimals", - outputs: [ - { - internalType: "uint8", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "subtractedValue", - type: "uint256", - }, - ], - name: "decreaseAllowance", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - { - internalType: "address", - name: "recipient", - type: "address", - }, - ], - name: "deposit", - outputs: [ - { - internalType: "uint256", - name: "shares", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "deposit", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "deposit", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "addedValue", - type: "uint256", - }, - ], - name: "increaseAllowance", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "owner", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "pricePerShare", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "renounceOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "newPrice", - type: "uint256", - }, - ], - name: "setPricePerShare", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "symbol", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "token", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "totalSupply", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "recipient", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "transfer", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "sender", - type: "address", - }, - { - internalType: "address", - name: "recipient", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "transferFrom", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "transferOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "updaters", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "maxShares", - type: "uint256", - }, - { - internalType: "address", - name: "recipient", - type: "address", - }, - ], - name: "withdraw", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "maxShares", - type: "uint256", - }, - ], - name: "withdraw", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "withdraw", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "maxShares", - type: "uint256", - }, - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint256", - name: "maxLoss", - type: "uint256", - }, - ], - name: "withdraw", - outputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, -]; - -const _bytecode = - "0x60a06040523480156200001157600080fd5b50604051620021d0380380620021d08339810160408190526200003491620002f9565b806001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000073573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200009d919081019062000374565b604051602001620000af91906200042c565b604051602081830303815290604052816001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015620000fd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000127919081019062000374565b6040516020016200013991906200045c565b60408051601f1981840301815291905281516200015e90600390602085019062000253565b5080516200017490600490602084019062000253565b505050620001916200018b620001f860201b60201c565b620001fc565b600680546001600160a01b0319166001600160a01b038316179055620001c26200024e602090811b62000b9817901c565b620001cf90600a6200059d565b608081905260075550336000908152600860205260409020805460ff19166001179055620005eb565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b601290565b8280546200026190620005ae565b90600052602060002090601f016020900481019282620002855760008555620002d0565b82601f10620002a057805160ff1916838001178555620002d0565b82800160010185558215620002d0579182015b82811115620002d0578251825591602001919060010190620002b3565b50620002de929150620002e2565b5090565b5b80821115620002de5760008155600101620002e3565b6000602082840312156200030c57600080fd5b81516001600160a01b03811681146200032457600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200035e57818101518382015260200162000344565b838111156200036e576000848401525b50505050565b6000602082840312156200038757600080fd5b81516001600160401b03808211156200039f57600080fd5b818401915084601f830112620003b457600080fd5b815181811115620003c957620003c96200032b565b604051601f8201601f19908116603f01168101908382118183101715620003f457620003f46200032b565b816040528281528760208487010111156200040e57600080fd5b6200042183602083016020880162000341565b979650505050505050565b6503cb2b0b937160d51b8152600082516200044f81600685016020870162000341565b9190910160060192915050565b613cbb60f11b8152600082516200047b81600285016020870162000341565b9190910160020192915050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620004df578160001904821115620004c357620004c362000488565b80851615620004d157918102915b93841c9390800290620004a3565b509250929050565b600082620004f85750600162000597565b81620005075750600062000597565b81600181146200052057600281146200052b576200054b565b600191505062000597565b60ff8411156200053f576200053f62000488565b50506001821b62000597565b5060208310610133831016604e8410600b841016171562000570575081810a62000597565b6200057c83836200049e565b806000190482111562000593576200059362000488565b0290505b92915050565b60006200032460ff841683620004e7565b600181811c90821680620005c357607f821691505b60208210811415620005e557634e487b7160e01b600052602260045260246000fd5b50919050565b608051611bc26200060e6000396000818161073601526109a00152611bc26000f3fe608060405234801561001057600080fd5b50600436106101ad5760003560e01c806370a08231116100ee578063a9059cbb11610097578063dd62ed3e11610071578063dd62ed3e14610395578063e63697c8146103db578063f2fde38b146103ee578063fc0c546a1461040157600080fd5b8063a9059cbb14610367578063b6b55f251461037a578063d0e30db01461038d57600080fd5b806395d89b41116100c857806395d89b411461034357806399530b061461034b578063a457c2d71461035457600080fd5b806370a08231146102c6578063715018a6146102fc5780638da5cb5b1461030457600080fd5b80632e1a7d4d1161015b5780633ccfd60b116101355780633ccfd60b1461027557806343d24a5e1461027d57806354a055c1146102905780636e553f65146102b357600080fd5b80632e1a7d4d14610240578063313ce56714610253578063395093511461026257600080fd5b8063118c9a071161018c578063118c9a071461021057806318160ddd1461022557806323b872dd1461022d57600080fd5b8062f714ce146101b257806306fdde03146101d8578063095ea7b3146101ed575b600080fd5b6101c56101c0366004611879565b610421565b6040519081526020015b60405180910390f35b6101e0610438565b6040516101cf91906118d1565b6102006101fb366004611922565b610447565b60405190151581526020016101cf565b61022361021e36600461194c565b61045d565b005b6002546101c5565b61020061023b366004611965565b6104e0565b6101c561024e36600461194c565b6105c8565b604051601281526020016101cf565b610200610270366004611922565b6105d4565b6101c561061d565b61022361028b3660046119a1565b610636565b61020061029e3660046119a1565b60086020526000908152604090205460ff1681565b6101c56102c1366004611879565b610706565b6101c56102d43660046119a1565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610223610771565b60055473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101cf565b6101e06107fe565b6101c560075481565b610200610362366004611922565b610808565b610200610375366004611922565b6108e0565b6101c561038836600461194c565b6108ed565b6101c56108f9565b6101c56103a33660046119bc565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101c56103e93660046119e6565b610992565b6102236103fc3660046119a1565b610a68565b60065461031e9073ffffffffffffffffffffffffffffffffffffffff1681565b600061042f83836001610992565b90505b92915050565b6060610442610b9d565b905090565b6000610454338484610c2f565b50600192915050565b3360009081526008602052604090205460ff166104db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f666f72207570646174657273206f6e6c7900000000000000000000000000000060448201526064015b60405180910390fd5b600755565b60006104ed848484610de3565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600160209081526040808320338452909152902054828110156105ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084016104d2565b6105bb8533858403610c2f565b60019150505b9392505050565b60006104328233610421565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091610454918590610618908690611a3a565b610c2f565b33600090815260208190526040812054610442906105c8565b60055473ffffffffffffffffffffffffffffffffffffffff1633146106b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104d2565b73ffffffffffffffffffffffffffffffffffffffff16600090815260086020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b60065460009061072e9073ffffffffffffffffffffffffffffffffffffffff16333086611098565b60075461075b7f000000000000000000000000000000000000000000000000000000000000000085611a52565b6107659190611a8f565b90506104328282611174565b60055473ffffffffffffffffffffffffffffffffffffffff1633146107f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104d2565b6107fc6000611294565b565b606061044261130b565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156108c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084016104d2565b6108d63385858403610c2f565b5060019392505050565b6000610454338484610de3565b60006104328233610706565b6006546040517f70a082310000000000000000000000000000000000000000000000000000000081523360048201526000916104429173ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa15801561096e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103889190611aca565b600061099e338561131a565b7f0000000000000000000000000000000000000000000000000000000000000000600754856109cd9190611a52565b6109d79190611a8f565b90506001821115610a44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4c6f737320746f6f20626967000000000000000000000000000000000000000060448201526064016104d2565b6006546105c19073ffffffffffffffffffffffffffffffffffffffff163383611504565b60055473ffffffffffffffffffffffffffffffffffffffff163314610ae9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104d2565b73ffffffffffffffffffffffffffffffffffffffff8116610b8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016104d2565b610b9581611294565b50565b601290565b606060038054610bac90611ae3565b80601f0160208091040260200160405190810160405280929190818152602001828054610bd890611ae3565b8015610c255780601f10610bfa57610100808354040283529160200191610c25565b820191906000526020600020905b815481529060010190602001808311610c0857829003601f168201915b5050505050905090565b73ffffffffffffffffffffffffffffffffffffffff8316610cd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016104d2565b73ffffffffffffffffffffffffffffffffffffffff8216610d74576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f737300000000000000000000000000000000000000000000000000000000000060648201526084016104d2565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610e86576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016104d2565b73ffffffffffffffffffffffffffffffffffffffff8216610f29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016104d2565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610fdf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e6365000000000000000000000000000000000000000000000000000060648201526084016104d2565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290611023908490611a3a565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161108991815260200190565b60405180910390a35b50505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526110929085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261155a565b73ffffffffffffffffffffffffffffffffffffffff82166111f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104d2565b80600260008282546112039190611a3a565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152602081905260408120805483929061123d908490611a3a565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b606060048054610bac90611ae3565b73ffffffffffffffffffffffffffffffffffffffff82166113bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f730000000000000000000000000000000000000000000000000000000000000060648201526084016104d2565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611473576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f636500000000000000000000000000000000000000000000000000000000000060648201526084016104d2565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906114af908490611b37565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610dd6565b505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526114ff9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016110f2565b60006115bc826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166116669092919063ffffffff16565b8051909150156114ff57808060200190518101906115da9190611b4e565b6114ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016104d2565b6060611675848460008561167d565b949350505050565b60608247101561170f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016104d2565b843b611777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016104d2565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516117a09190611b70565b60006040518083038185875af1925050503d80600081146117dd576040519150601f19603f3d011682016040523d82523d6000602084013e6117e2565b606091505b50915091506117f28282866117fd565b979650505050505050565b6060831561180c5750816105c1565b82511561181c5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d291906118d1565b803573ffffffffffffffffffffffffffffffffffffffff8116811461187457600080fd5b919050565b6000806040838503121561188c57600080fd5b8235915061189c60208401611850565b90509250929050565b60005b838110156118c05781810151838201526020016118a8565b838111156110925750506000910152565b60208152600082518060208401526118f08160408501602087016118a5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806040838503121561193557600080fd5b61193e83611850565b946020939093013593505050565b60006020828403121561195e57600080fd5b5035919050565b60008060006060848603121561197a57600080fd5b61198384611850565b925061199160208501611850565b9150604084013590509250925092565b6000602082840312156119b357600080fd5b61042f82611850565b600080604083850312156119cf57600080fd5b6119d883611850565b915061189c60208401611850565b6000806000606084860312156119fb57600080fd5b8335925061199160208501611850565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611a4d57611a4d611a0b565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611a8a57611a8a611a0b565b500290565b600082611ac5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600060208284031215611adc57600080fd5b5051919050565b600181811c90821680611af757607f821691505b60208210811415611b31577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600082821015611b4957611b49611a0b565b500390565b600060208284031215611b6057600080fd5b815180151581146105c157600080fd5b60008251611b828184602087016118a5565b919091019291505056fea2646970667358221220dd6ab68a357bcb22f83ca9169f71d50eab420f577d6615614a08c2ea63f4ce2f64736f6c634300080a0033"; - -type YearnV2MockConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: YearnV2MockConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class YearnV2Mock__factory extends ContractFactory { - constructor(...args: YearnV2MockConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - _token: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(_token, overrides || {}) as Promise; - } - override getDeployTransaction( - _token: string, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(_token, overrides || {}); - } - override attach(address: string): YearnV2Mock { - return super.attach(address) as YearnV2Mock; - } - override connect(signer: Signer): YearnV2Mock__factory { - return super.connect(signer) as YearnV2Mock__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): YearnV2MockInterface { - return new utils.Interface(_abi) as YearnV2MockInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): YearnV2Mock { - return new Contract(address, _abi, signerOrProvider) as YearnV2Mock; - } -} diff --git a/src/types/factories/contracts/test/mocks/integrations/index.ts b/src/types/factories/contracts/test/mocks/integrations/index.ts index 1f882679..dcdd80a7 100644 --- a/src/types/factories/contracts/test/mocks/integrations/index.ts +++ b/src/types/factories/contracts/test/mocks/integrations/index.ts @@ -1,18 +1,5 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ -export * as convexBaseRewardPoolMockSol from "./ConvexBaseRewardPoolMock.sol"; -export * as convexBoosterMockSol from "./ConvexBoosterMock.sol"; export * as convexClaimZapMockSol from "./ConvexClaimZapMock.sol"; -export * as convexExtraRewardPoolMockSol from "./ConvexExtraRewardPoolMock.sol"; -export * as convexTokenRewardContractMockSol from "./ConvexTokenRewardContractMock.sol"; export * as lidoMockSol from "./LidoMock.sol"; -export { CurveV1MetapoolMock__factory } from "./CurveV1MetapoolMock__factory"; -export { CurveV1Mock__factory } from "./CurveV1Mock__factory"; -export { CurveV1Mock_2Assets__factory } from "./CurveV1Mock_2Assets__factory"; -export { CurveV1Mock_3Assets__factory } from "./CurveV1Mock_3Assets__factory"; -export { CurveV1Mock_4Assets__factory } from "./CurveV1Mock_4Assets__factory"; -export { CurveV1StETHMock__factory } from "./CurveV1StETHMock__factory"; -export { UniswapV2Mock__factory } from "./UniswapV2Mock__factory"; -export { UniswapV3Mock__factory } from "./UniswapV3Mock__factory"; -export { YearnV2Mock__factory } from "./YearnV2Mock__factory"; diff --git a/src/types/factories/contracts/test/mocks/libraries/PercentageMathTest__factory.ts b/src/types/factories/contracts/test/mocks/libraries/PercentageMathTest__factory.ts deleted file mode 100644 index 017c4252..00000000 --- a/src/types/factories/contracts/test/mocks/libraries/PercentageMathTest__factory.ts +++ /dev/null @@ -1,110 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - PercentageMathTest, - PercentageMathTestInterface, -} from "../../../../../contracts/test/mocks/libraries/PercentageMathTest"; - -const _abi = [ - { - inputs: [ - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - internalType: "uint256", - name: "percentage", - type: "uint256", - }, - ], - name: "percentDiv", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - internalType: "uint256", - name: "percentage", - type: "uint256", - }, - ], - name: "percentMul", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, -]; - -const _bytecode = - "0x608060405234801561001057600080fd5b50610343806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806346c840bb1461003b5780634bf6a8f014610060575b600080fd5b61004e610049366004610190565b610073565b60405190815260200160405180910390f35b61004e61006e366004610190565b610088565b600061007f8383610094565b90505b92915050565b600061007f8383610146565b60408051808201909152600281527f4d3300000000000000000000000000000000000000000000000000000000000060208201526000908261010c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010391906101b2565b60405180910390fd5b50600061011a600284610283565b9050828161012a61271087610297565b61013491906102d4565b61013e9190610283565b949350505050565b6000821580610153575081155b1561016057506000610082565b61271061016e6002826102ec565b61ffff1661017c8486610297565b61018691906102d4565b61007f9190610283565b600080604083850312156101a357600080fd5b50508035926020909101359150565b600060208083528351808285015260005b818110156101df578581018301518582016040015282016101c3565b818111156101f1576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008261029257610292610225565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156102cf576102cf610254565b500290565b600082198211156102e7576102e7610254565b500190565b600061ffff8084168061030157610301610225565b9216919091049291505056fea26469706673582212208f38722287bb8f6292d8b0a108329767d6ca6a1cb2ba155f6a167014b5872bc364736f6c634300080a0033"; - -type PercentageMathTestConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: PercentageMathTestConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class PercentageMathTest__factory extends ContractFactory { - constructor(...args: PercentageMathTestConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): PercentageMathTest { - return super.attach(address) as PercentageMathTest; - } - override connect(signer: Signer): PercentageMathTest__factory { - return super.connect(signer) as PercentageMathTest__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): PercentageMathTestInterface { - return new utils.Interface(_abi) as PercentageMathTestInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): PercentageMathTest { - return new Contract(address, _abi, signerOrProvider) as PercentageMathTest; - } -} diff --git a/src/types/factories/contracts/test/mocks/libraries/WadRayMathTest__factory.ts b/src/types/factories/contracts/test/mocks/libraries/WadRayMathTest__factory.ts deleted file mode 100644 index 2643303f..00000000 --- a/src/types/factories/contracts/test/mocks/libraries/WadRayMathTest__factory.ts +++ /dev/null @@ -1,248 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - WadRayMathTest, - WadRayMathTestInterface, -} from "../../../../../contracts/test/mocks/libraries/WadRayMathTest"; - -const _abi = [ - { - inputs: [], - name: "halfRay", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "halfWad", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "ray", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "a", - type: "uint256", - }, - { - internalType: "uint256", - name: "b", - type: "uint256", - }, - ], - name: "rayDiv", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "a", - type: "uint256", - }, - { - internalType: "uint256", - name: "b", - type: "uint256", - }, - ], - name: "rayMul", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "a", - type: "uint256", - }, - ], - name: "rayToWad", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "wad", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "a", - type: "uint256", - }, - { - internalType: "uint256", - name: "b", - type: "uint256", - }, - ], - name: "wadDiv", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "a", - type: "uint256", - }, - { - internalType: "uint256", - name: "b", - type: "uint256", - }, - ], - name: "wadMul", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "a", - type: "uint256", - }, - ], - name: "wadToRay", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, -]; - -const _bytecode = - "0x608060405234801561001057600080fd5b506109ad806100206000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c80637df38c5b11610076578063d2e305851161005b578063d2e3058514610149578063e304e1d31461015c578063e57b6d3b1461016457600080fd5b80637df38c5b146101285780639c34d8801461013657600080fd5b806329cb5aa4116100a757806329cb5aa4146100f0578063416a8b2014610103578063761fdad61461011557600080fd5b806310de27b9146100c35780631fa89fc6146100e8575b600080fd5b6100d66100d13660046107f3565b610177565b60405190815260200160405180910390f35b6100d6610188565b6100d66100fe3660046107f3565b610197565b6b033b2e3c9fd0803ce80000006100d6565b6100d661012336600461080c565b6101a2565b670de0b6b3a76400006100d6565b6100d661014436600461080c565b6101b5565b6100d661015736600461080c565b6101c1565b6100d66101cd565b6100d661017236600461080c565b6101d7565b6000610182826101e3565b92915050565b6000610192610284565b905090565b60006101828261029d565b60006101ae8383610348565b9392505050565b60006101ae838361044e565b60006101ae83836105ac565b600061019261069c565b60006101ae83836106b1565b6000806101f4633b9aca008461085d565b905082610205633b9aca008361089a565b146040518060400160405280600281526020017f4d310000000000000000000000000000000000000000000000000000000000008152509061027d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161027491906108d5565b60405180910390fd5b5092915050565b600061019260026b033b2e3c9fd0803ce800000061089a565b6000806102af6002633b9aca0061089a565b905060006102bd8483610948565b9050818110156040518060400160405280600281526020017f4d3200000000000000000000000000000000000000000000000000000000000081525090610331576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161027491906108d5565b50610340633b9aca008261089a565b949350505050565b6000821580610355575081155b1561036257506000610182565b816103766002670de0b6b3a764000061089a565b6103a0907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610960565b6103aa919061089a565b8311156040518060400160405280600281526020017f4d310000000000000000000000000000000000000000000000000000000000008152509061041b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161027491906108d5565b50670de0b6b3a764000061043060028261089a565b61043a848661085d565b6104449190610948565b6101ae919061089a565b60408051808201909152600281527f4d330000000000000000000000000000000000000000000000000000000000006020820152600090826104bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161027491906108d5565b5060006104cb60028461089a565b90506b033b2e3c9fd0803ce8000000610504827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610960565b61050e919061089a565b8411156040518060400160405280600281526020017f4d310000000000000000000000000000000000000000000000000000000000008152509061057f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161027491906108d5565b5082816105986b033b2e3c9fd0803ce80000008761085d565b6105a29190610948565b610340919061089a565b60008215806105b9575081155b156105c657506000610182565b816105de60026b033b2e3c9fd0803ce800000061089a565b610608907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610960565b610612919061089a565b8311156040518060400160405280600281526020017f4d3100000000000000000000000000000000000000000000000000000000000081525090610683576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161027491906108d5565b506b033b2e3c9fd0803ce800000061043060028261089a565b60006101926002670de0b6b3a764000061089a565b60408051808201909152600281527f4d33000000000000000000000000000000000000000000000000000000000000602082015260009082610720576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161027491906108d5565b50600061072e60028461089a565b9050670de0b6b3a7640000610763827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610960565b61076d919061089a565b8411156040518060400160405280600281526020017f4d31000000000000000000000000000000000000000000000000000000000000815250906107de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161027491906108d5565b508281610598670de0b6b3a76400008761085d565b60006020828403121561080557600080fd5b5035919050565b6000806040838503121561081f57600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156108955761089561082e565b500290565b6000826108d0577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600060208083528351808285015260005b81811015610902578581018301518582016040015282016108e6565b81811115610914576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b6000821982111561095b5761095b61082e565b500190565b6000828210156109725761097261082e565b50039056fea26469706673582212204d1cf0ee3bbd037f0aeb7e35f62a821e47bba7e6fdd8b5f034b25bfd2470a45864736f6c634300080a0033"; - -type WadRayMathTestConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: WadRayMathTestConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class WadRayMathTest__factory extends ContractFactory { - constructor(...args: WadRayMathTestConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): WadRayMathTest { - return super.attach(address) as WadRayMathTest; - } - override connect(signer: Signer): WadRayMathTest__factory { - return super.connect(signer) as WadRayMathTest__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): WadRayMathTestInterface { - return new utils.Interface(_abi) as WadRayMathTestInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): WadRayMathTest { - return new Contract(address, _abi, signerOrProvider) as WadRayMathTest; - } -} diff --git a/src/types/factories/contracts/test/mocks/libraries/index.ts b/src/types/factories/contracts/test/mocks/libraries/index.ts deleted file mode 100644 index fb95f4a4..00000000 --- a/src/types/factories/contracts/test/mocks/libraries/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { PercentageMathTest__factory } from "./PercentageMathTest__factory"; -export { WadRayMathTest__factory } from "./WadRayMathTest__factory"; diff --git a/src/types/factories/contracts/test/mocks/oracles/LPPriceFeedMock__factory.ts b/src/types/factories/contracts/test/mocks/oracles/LPPriceFeedMock__factory.ts deleted file mode 100644 index 637a0f68..00000000 --- a/src/types/factories/contracts/test/mocks/oracles/LPPriceFeedMock__factory.ts +++ /dev/null @@ -1,449 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { - Signer, - utils, - Contract, - ContractFactory, - BigNumberish, - Overrides, -} from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - LPPriceFeedMock, - LPPriceFeedMockInterface, -} from "../../../../../contracts/test/mocks/oracles/LPPriceFeedMock"; - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "addressProvider", - type: "address", - }, - { - internalType: "uint256", - name: "range", - type: "uint256", - }, - { - internalType: "string", - name: "descrition", - type: "string", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "CallerNotConfiguratorException", - type: "error", - }, - { - inputs: [], - name: "CallerNotPausableAdminException", - type: "error", - }, - { - inputs: [], - name: "CallerNotUnPausableAdminException", - type: "error", - }, - { - inputs: [], - name: "ChainPriceStaleException", - type: "error", - }, - { - inputs: [], - name: "IncorrectLimitsException", - type: "error", - }, - { - inputs: [], - name: "NotImplementedException", - type: "error", - }, - { - inputs: [], - name: "PriceOracleNotExistsException", - type: "error", - }, - { - inputs: [], - name: "ValueOutOfRangeExpcetion", - type: "error", - }, - { - inputs: [], - name: "ZeroAddressException", - type: "error", - }, - { - inputs: [], - name: "ZeroPriceException", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "lowerBound", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "upperBound", - type: "uint256", - }, - ], - name: "NewLimiterParams", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "Paused", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "Unpaused", - type: "event", - }, - { - inputs: [], - name: "_acl", - outputs: [ - { - internalType: "contract ACL", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "checkAndUpperBoundValue", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "decimals", - outputs: [ - { - internalType: "uint8", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "delta", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "description", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint80", - name: "", - type: "uint80", - }, - ], - name: "getRoundData", - outputs: [ - { - internalType: "uint80", - name: "", - type: "uint80", - }, - { - internalType: "int256", - name: "", - type: "int256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint80", - name: "", - type: "uint80", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "latestRoundData", - outputs: [ - { - internalType: "uint80", - name: "roundId", - type: "uint80", - }, - { - internalType: "int256", - name: "answer", - type: "int256", - }, - { - internalType: "uint256", - name: "startedAt", - type: "uint256", - }, - { - internalType: "uint256", - name: "updatedAt", - type: "uint256", - }, - { - internalType: "uint80", - name: "answeredInRound", - type: "uint80", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "lowerBound", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "pause", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "paused", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "priceFeedType", - outputs: [ - { - internalType: "enum PriceFeedType", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_lowerBound", - type: "uint256", - }, - ], - name: "setLimiter", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "skipPriceCheck", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "unpause", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "upperBound", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x60c06040523480156200001157600080fd5b5060405162000efe38038062000efe8339810160408190526200003491620001da565b6000805460ff19169055828282826001600160a01b0381166200006a57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000a9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cf9190620002d6565b6001600160a01b0316608052508051620000f190600290602084019062000101565b505060a052506200033892505050565b8280546200010f90620002fb565b90600052602060002090601f0160209004810192826200013357600085556200017e565b82601f106200014e57805160ff19168380011785556200017e565b828001600101855582156200017e579182015b828111156200017e57825182559160200191906001019062000161565b506200018c92915062000190565b5090565b5b808211156200018c576000815560010162000191565b80516001600160a01b0381168114620001bf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600080600060608486031215620001f057600080fd5b620001fb84620001a7565b60208581015160408701519295509350906001600160401b03808211156200022257600080fd5b818701915087601f8301126200023757600080fd5b8151818111156200024c576200024c620001c4565b604051601f8201601f19908116603f01168101908382118183101715620002775762000277620001c4565b816040528281528a868487010111156200029057600080fd5b600093505b82841015620002b4578484018601518185018701529285019262000295565b82841115620002c65760008684830101525b8096505050505050509250925092565b600060208284031215620002e957600080fd5b620002f482620001a7565b9392505050565b600181811c908216806200031057607f821691505b602082108114156200033257634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a051610b846200037a6000396000818161010a01526107fa01526000818161020c015281816102c30152818161043f01526105770152610b846000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80639a6fc8f511610097578063bc489a6511610066578063bc489a651461025b578063be622e741461026e578063d62ada1114610281578063feaf968c1461028957600080fd5b80639a6fc8f5146101b4578063a384d6ff146101fe578063a50cf2c814610207578063b09ad8a01461025357600080fd5b806354fd4d50116100d357806354fd4d50146101785780635c975abb146101805780637284e416146101975780638456cb59146101ac57600080fd5b806312b495a814610105578063313ce5671461013f5780633f4ba83a146101595780633fd0875f14610163575b600080fd5b61012c7f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b610147600881565b60405160ff9091168152602001610136565b610161610295565b005b61016b600181565b6040516101369190610919565b61012c600181565b60005460ff165b6040519015158152602001610136565b61019f610383565b604051610136919061095a565b610161610411565b6101c76101c23660046109cd565b6104fd565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610136565b61012c60015481565b61022e7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610136565b61012c610537565b610161610269366004610a00565b610549565b61012c61027c366004610a00565b610639565b610187600181565b600160004280836101c7565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa15801561031f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103439190610a19565b610379576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61038161064a565b565b6002805461039090610a3b565b80601f01602080910402602001604051908101604052809291908181526020018280546103bc90610a3b565b80156104095780601f106103de57610100808354040283529160200191610409565b820191906000526020600020905b8154815290600101906020018083116103ec57829003601f168201915b505050505081565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561049b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104bf9190610a19565b6104f5576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610381610730565b60008060008060006040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006105446001546107f0565b905090565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156105d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f79190610a19565b61062d576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61063681610833565b50565b6000610644826108b5565b92915050565b60005460ff166106bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff161561079d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016106b2565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586107063390565b600061271061081f7f000000000000000000000000000000000000000000000000000000000000000082610abe565b6108299084610ad6565b6106449190610b13565b8061086a576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190557f82e7ee47180a631312683eeb2a85ad264c9af490d54de5a75bbdb95b968c6de28161089a816107f0565b6040805192835260208301919091520160405180910390a150565b600154600090808310156108f5576040517fb416da7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610900826107f0565b905080841115610911579392505050565b509192915050565b6020810160068310610954577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b600060208083528351808285015260005b818110156109875785810183015185820160400152820161096b565b81811115610999576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b6000602082840312156109df57600080fd5b813569ffffffffffffffffffff811681146109f957600080fd5b9392505050565b600060208284031215610a1257600080fd5b5035919050565b600060208284031215610a2b57600080fd5b815180151581146109f957600080fd5b600181811c90821680610a4f57607f821691505b60208210811415610a89577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115610ad157610ad1610a8f565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610b0e57610b0e610a8f565b500290565b600082610b49577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fea26469706673582212207c354f59e454ec524905b596dbb5f22aa4157a72f467412b02ae253c4946583764736f6c634300080a0033"; - -type LPPriceFeedMockConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: LPPriceFeedMockConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class LPPriceFeedMock__factory extends ContractFactory { - constructor(...args: LPPriceFeedMockConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - addressProvider: string, - range: BigNumberish, - descrition: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - addressProvider, - range, - descrition, - overrides || {} - ) as Promise; - } - override getDeployTransaction( - addressProvider: string, - range: BigNumberish, - descrition: string, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction( - addressProvider, - range, - descrition, - overrides || {} - ); - } - override attach(address: string): LPPriceFeedMock { - return super.attach(address) as LPPriceFeedMock; - } - override connect(signer: Signer): LPPriceFeedMock__factory { - return super.connect(signer) as LPPriceFeedMock__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): LPPriceFeedMockInterface { - return new utils.Interface(_abi) as LPPriceFeedMockInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): LPPriceFeedMock { - return new Contract(address, _abi, signerOrProvider) as LPPriceFeedMock; - } -} diff --git a/src/types/factories/contracts/test/mocks/oracles/PriceFeedMock__factory.ts b/src/types/factories/contracts/test/mocks/oracles/PriceFeedMock__factory.ts deleted file mode 100644 index bd3f6ba3..00000000 --- a/src/types/factories/contracts/test/mocks/oracles/PriceFeedMock__factory.ts +++ /dev/null @@ -1,297 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { - Signer, - utils, - Contract, - ContractFactory, - BigNumberish, - Overrides, -} from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - PriceFeedMock, - PriceFeedMockInterface, -} from "../../../../../contracts/test/mocks/oracles/PriceFeedMock"; - -const _abi = [ - { - inputs: [ - { - internalType: "int256", - name: "_price", - type: "int256", - }, - { - internalType: "uint8", - name: "_decimals", - type: "uint8", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "decimals", - outputs: [ - { - internalType: "uint8", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "description", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint80", - name: "", - type: "uint80", - }, - ], - name: "getRoundData", - outputs: [ - { - internalType: "uint80", - name: "", - type: "uint80", - }, - { - internalType: "int256", - name: "", - type: "int256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint80", - name: "", - type: "uint80", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "latestRoundData", - outputs: [ - { - internalType: "uint80", - name: "", - type: "uint80", - }, - { - internalType: "int256", - name: "", - type: "int256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint80", - name: "", - type: "uint80", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "priceFeedType", - outputs: [ - { - internalType: "enum PriceFeedType", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint80", - name: "_roundId", - type: "uint80", - }, - { - internalType: "uint256", - name: "_startedAt", - type: "uint256", - }, - { - internalType: "uint256", - name: "_updatedAt", - type: "uint256", - }, - { - internalType: "uint80", - name: "_answerInRound", - type: "uint80", - }, - ], - name: "setParams", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "int256", - name: "newPrice", - type: "int256", - }, - ], - name: "setPrice", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bool", - name: "value", - type: "bool", - }, - ], - name: "setRevertOnLatestRound", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "enum FlagState", - name: "f", - type: "uint8", - }, - ], - name: "setSkipPriceCheck", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "skipPriceCheck", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, -]; - -const _bytecode = - "0x60a060405234801561001057600080fd5b506040516106ca3803806106ca83398101604081905261002f9161006c565b60009190915560ff166080526001805460506001600160501b031991821681179092556004805490911690911790554260028190556003556100a2565b6000806040838503121561007f57600080fd5b82519150602083015160ff8116811461009757600080fd5b809150509250929050565b60805161060e6100bc600039600060d3015261060e6000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80639a6fc8f511610081578063d62ada111161005b578063d62ada11146102dc578063f7a30806146102f4578063feaf968c1461030757600080fd5b80639a6fc8f5146101cd578063bd18ad531461023a578063cd653afc1461024d57600080fd5b806354fd4d50116100b257806354fd4d501461012d57806367e8d83d1461013c5780637284e4161461018e57600080fd5b8063313ce567146100ce5780633fd0875f1461010c575b600080fd5b6100f57f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020015b60405180910390f35b6004546a0100000000000000000000900460ff166040516101039190610441565b60405160018152602001610103565b61018c61014a366004610482565b600480549115156c01000000000000000000000000027fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff909216919091179055565b005b604080518082018252600c81527f7072696365206f7261636c6500000000000000000000000000000000000000006020820152905161010391906104ab565b6102036101db36600461053d565b60015460005460025460035460045469ffffffffffffffffffff948516941691939590929450565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610103565b61018c610248366004610558565b61030f565b61018c61025b366004610579565b6001805469ffffffffffffffffffff9586167fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090911617905560029290925560035560048054919092167fffffffffffffffffffffffffffffffffffffffff00ff00000000000000000000909116176b020000000000000000000000179055565b6102e461035f565b6040519015158152602001610103565b61018c6103023660046105bf565b600055565b610203610385565b600480548291907fffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff166b01000000000000000000000083600281111561035757610357610412565b021790555050565b600454600090610380906b010000000000000000000000900460ff166103d6565b905090565b60008060008060006004600c9054906101000a900460ff16156103a757600080fd5b505060015460005460025460035460045469ffffffffffffffffffff9485169893975091955093509190911690565b600060028260028111156103ec576103ec610412565b14156103f757600080fd5b600182600281111561040b5761040b610412565b1492915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016006831061047c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561049457600080fd5b813580151581146104a457600080fd5b9392505050565b600060208083528351808285015260005b818110156104d8578581018301518582016040015282016104bc565b818111156104ea576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803569ffffffffffffffffffff8116811461053857600080fd5b919050565b60006020828403121561054f57600080fd5b6104a48261051e565b60006020828403121561056a57600080fd5b8135600381106104a457600080fd5b6000806000806080858703121561058f57600080fd5b6105988561051e565b935060208501359250604085013591506105b46060860161051e565b905092959194509250565b6000602082840312156105d157600080fd5b503591905056fea264697066735822122014874f7a973b86501c4c1a8be32490fe902c8f088ee234d25f9b2497e19f9e5264736f6c634300080a0033"; - -type PriceFeedMockConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: PriceFeedMockConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class PriceFeedMock__factory extends ContractFactory { - constructor(...args: PriceFeedMockConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - _price: BigNumberish, - _decimals: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - _price, - _decimals, - overrides || {} - ) as Promise; - } - override getDeployTransaction( - _price: BigNumberish, - _decimals: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(_price, _decimals, overrides || {}); - } - override attach(address: string): PriceFeedMock { - return super.attach(address) as PriceFeedMock; - } - override connect(signer: Signer): PriceFeedMock__factory { - return super.connect(signer) as PriceFeedMock__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): PriceFeedMockInterface { - return new utils.Interface(_abi) as PriceFeedMockInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): PriceFeedMock { - return new Contract(address, _abi, signerOrProvider) as PriceFeedMock; - } -} diff --git a/src/types/factories/contracts/test/mocks/oracles/index.ts b/src/types/factories/contracts/test/mocks/oracles/index.ts deleted file mode 100644 index 8f3414b3..00000000 --- a/src/types/factories/contracts/test/mocks/oracles/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { LPPriceFeedMock__factory } from "./LPPriceFeedMock__factory"; -export { PriceFeedMock__factory } from "./PriceFeedMock__factory"; diff --git a/src/types/factories/contracts/test/mocks/pool/CreditManagerMockForPoolTest__factory.ts b/src/types/factories/contracts/test/mocks/pool/CreditManagerMockForPoolTest__factory.ts deleted file mode 100644 index 96df439e..00000000 --- a/src/types/factories/contracts/test/mocks/pool/CreditManagerMockForPoolTest__factory.ts +++ /dev/null @@ -1,194 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - CreditManagerMockForPoolTest, - CreditManagerMockForPoolTestInterface, -} from "../../../../../contracts/test/mocks/pool/CreditManagerMockForPoolTest"; - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "_poolService", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [ - { - internalType: "address", - name: "newPool", - type: "address", - }, - ], - name: "changePoolService", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "creditAccount", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "getCreditAccountOrRevert", - outputs: [ - { - internalType: "address", - name: "result", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "borrowedAmount", - type: "uint256", - }, - { - internalType: "address", - name: "ca", - type: "address", - }, - ], - name: "lendCreditAccount", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "poolService", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "borrowedAmount", - type: "uint256", - }, - { - internalType: "uint256", - name: "profit", - type: "uint256", - }, - { - internalType: "uint256", - name: "loss", - type: "uint256", - }, - ], - name: "repayCreditAccount", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "underlying", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x6080604052600280546001600160a01b03191673c4375b7de8af5a38a93548eb8453a498222c4ff217905534801561003657600080fd5b5060405161046c38038061046c8339810160408190526100559161007a565b600080546001600160a01b0319166001600160a01b03929092169190911790556100aa565b60006020828403121561008c57600080fd5b81516001600160a01b03811681146100a357600080fd5b9392505050565b6103b3806100b96000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063bf28068b1161005b578063bf28068b1461010b578063c8cca9e514610120578063ca9505e414610175578063e958b7041461018857600080fd5b8063570a7af2146100825780636d0a1218146100cb5780636f307dc3146100eb575b600080fd5b6000546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6002546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b6001546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b61011e610119366004610303565b6101b3565b005b61011e61012e36600461032f565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b61011e610183366004610351565b610243565b6100a261019636600461032f565b5060025473ffffffffffffffffffffffffffffffffffffffff1690565b6000546040517fbf28068b0000000000000000000000000000000000000000000000000000000081526004810184905273ffffffffffffffffffffffffffffffffffffffff83811660248301529091169063bf28068b90604401600060405180830381600087803b15801561022757600080fd5b505af115801561023b573d6000803e3d6000fd5b505050505050565b6000546040517fca9505e400000000000000000000000000000000000000000000000000000000815260048101859052602481018490526044810183905273ffffffffffffffffffffffffffffffffffffffff9091169063ca9505e490606401600060405180830381600087803b1580156102bd57600080fd5b505af11580156102d1573d6000803e3d6000fd5b50505050505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146102fe57600080fd5b919050565b6000806040838503121561031657600080fd5b82359150610326602084016102da565b90509250929050565b60006020828403121561034157600080fd5b61034a826102da565b9392505050565b60008060006060848603121561036657600080fd5b50508135936020830135935060409092013591905056fea2646970667358221220e29e625436d382630e7a0373aafe5230ccc0f5a960595820d041897bf0d7850c64736f6c634300080a0033"; - -type CreditManagerMockForPoolTestConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: CreditManagerMockForPoolTestConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class CreditManagerMockForPoolTest__factory extends ContractFactory { - constructor(...args: CreditManagerMockForPoolTestConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - _poolService: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - _poolService, - overrides || {} - ) as Promise; - } - override getDeployTransaction( - _poolService: string, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(_poolService, overrides || {}); - } - override attach(address: string): CreditManagerMockForPoolTest { - return super.attach(address) as CreditManagerMockForPoolTest; - } - override connect(signer: Signer): CreditManagerMockForPoolTest__factory { - return super.connect(signer) as CreditManagerMockForPoolTest__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): CreditManagerMockForPoolTestInterface { - return new utils.Interface(_abi) as CreditManagerMockForPoolTestInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): CreditManagerMockForPoolTest { - return new Contract( - address, - _abi, - signerOrProvider - ) as CreditManagerMockForPoolTest; - } -} diff --git a/src/types/factories/contracts/test/mocks/pool/PoolServiceMock__factory.ts b/src/types/factories/contracts/test/mocks/pool/PoolServiceMock__factory.ts deleted file mode 100644 index e5fc3a8e..00000000 --- a/src/types/factories/contracts/test/mocks/pool/PoolServiceMock__factory.ts +++ /dev/null @@ -1,899 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - PoolServiceMock, - PoolServiceMockInterface, -} from "../../../../../contracts/test/mocks/pool/PoolServiceMock"; - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "_addressProvider", - type: "address", - }, - { - internalType: "address", - name: "_underlyingToken", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "sender", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "onBehalfOf", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "referralCode", - type: "uint256", - }, - ], - name: "AddLiquidity", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "creditManager", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "Borrow", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "creditManager", - type: "address", - }, - ], - name: "BorrowForbidden", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "creditManager", - type: "address", - }, - ], - name: "NewCreditManagerConnected", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "newLimit", - type: "uint256", - }, - ], - name: "NewExpectedLiquidityLimit", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newInterestRateModel", - type: "address", - }, - ], - name: "NewInterestRateModel", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "fee", - type: "uint256", - }, - ], - name: "NewWithdrawFee", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "sender", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "RemoveLiquidity", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "creditManager", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "borrowedAmount", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "profit", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "loss", - type: "uint256", - }, - ], - name: "Repay", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "creditManager", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "loss", - type: "uint256", - }, - ], - name: "UncoveredLoss", - type: "event", - }, - { - inputs: [], - name: "_cumulativeIndex_RAY", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "_expectedLiquidityLU", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "_timestampLU", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "address", - name: "onBehalfOf", - type: "address", - }, - { - internalType: "uint256", - name: "referralCode", - type: "uint256", - }, - ], - name: "addLiquidity", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "addressProvider", - outputs: [ - { - internalType: "contract AddressProvider", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "availableLiquidity", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "borrowAPY_RAY", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "calcLinearCumulative_RAY", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "calcLinearIndex_RAY", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_creditManager", - type: "address", - }, - ], - name: "connectCreditManager", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "creditManagers", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "creditManagersCanBorrow", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "creditManagersCanRepay", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditManagersCount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "dieselToken", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "expectedLiquidity", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "expectedLiquidityLimit", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_creditManager", - type: "address", - }, - ], - name: "forbidCreditManagerToBorrow", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "fromDiesel", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "getDieselRate_RAY", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "interestRateModel", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "lendAccount", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "lendAmount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "borrowedAmount", - type: "uint256", - }, - { - internalType: "address", - name: "creditAccount", - type: "address", - }, - ], - name: "lendCreditAccount", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_interestRateModel", - type: "address", - }, - ], - name: "newInterestRateModel", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "pause", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "paused", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "address", - name: "to", - type: "address", - }, - ], - name: "removeLiquidity", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "repayAmount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "borrowedAmount", - type: "uint256", - }, - { - internalType: "uint256", - name: "profit", - type: "uint256", - }, - { - internalType: "uint256", - name: "loss", - type: "uint256", - }, - ], - name: "repayCreditAccount", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "repayLoss", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "repayProfit", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "cumulativeIndex_RAY", - type: "uint256", - }, - ], - name: "setCumulative_RAY", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "num", - type: "uint256", - }, - ], - name: "setExpectedLiquidityLimit", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "num", - type: "uint256", - }, - ], - name: "setWithdrawFee", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "toDiesel", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "totalBorrowed", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "treasuryAddress", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "underlyingToken", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "unpause", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "withdrawFee", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "withdrawMultiplier", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x60806040526016805460ff1916905534801561001a57600080fd5b506040516110a73803806110a7833981016040819052610039916100b6565b600080546001600160a01b038085166001600160a01b0319928316179092556003805492841692909116919091179055610080600a6b033b2e3c9fd0803ce80000006100e9565b60075550506b033b2e3c9fd0803ce800000060155561010b565b80516001600160a01b03811681146100b157600080fd5b919050565b600080604083850312156100c957600080fd5b6100d28361009a565b91506100e06020840161009a565b90509250929050565b60008261010657634e487b7160e01b600052601260045260246000fd5b500490565b610f8d8061011a6000396000f3fe608060405234801561001057600080fd5b50600436106102e95760003560e01c806367c99d5811610191578063c5f956af116100e3578063dbcb313b11610097578063f11a648711610071578063f11a648714610320578063f3fdb15a146105f1578063fe14112d1461061157600080fd5b8063dbcb313b146105d6578063e941fa78146105df578063ef8d9603146105e857600080fd5b8063cb3905e1116100c8578063cb3905e1146105c4578063cf33d95514610320578063d0efe753146105cd57600080fd5b8063c5f956af14610588578063ca9505e4146105a857600080fd5b80639aa5d46211610145578063b6ac642a1161011f578063b6ac642a14610567578063bb04b19314610567578063bf28068b1461057557600080fd5b80639aa5d46214610544578063a4e8273e14610557578063b3554a0a1461055e57600080fd5b8063788c6bfe11610176578063788c6bfe146104ef5780638456cb591461050157806396df5dc01461053157600080fd5b806367c99d58146104de57806374375359146104e757600080fd5b806336dda7d51161024a5780634d778ad1116101fe57806354fd4d50116101d857806354fd4d50146104c05780635c975abb146104c8578063609ae317146104d557600080fd5b80634d778ad114610491578063532fe502146104a45780635427c938146104ad57600080fd5b80633f4ba83a1161022f5780633f4ba83a1461045257806345d31f9d1461047f5780634c19386c1461048857600080fd5b806336dda7d51461040f5780633e163df01461042f57600080fd5b80632495a599116102a157806329f3d3b61161028657806329f3d3b6146103b35780632a3354c9146103bc5780632e97ca21146103dc57600080fd5b80632495a599146103735780632954018c1461039357600080fd5b8063078c4781116102d2578063078c4781146103205780630fce70fb146103335780631e16e4fc1461033b57600080fd5b8063030dbb04146102ee57806305fe138b1461030a575b600080fd5b6102f760105481565b6040519081526020015b60405180910390f35b6102f7610318366004610ce8565b600092915050565b61033161032e366004610d14565b50565b005b6015546102f7565b61034e610349366004610d2f565b610618565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610301565b60035461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b60005461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6102f760095481565b600a5461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103ff6103ea366004610d14565b60066020526000908152604090205460ff1681565b6040519015158152602001610301565b60055461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103ff61043d366004610d14565b60146020526000908152604090205460ff1681565b610331601680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b6102f760075481565b6102f760015481565b6102f761049f366004610d2f565b61064f565b6102f760115481565b6102f76104bb366004610d2f565b61066d565b6102f7600181565b6016546103ff9060ff1681565b6102f760085481565b6102f7600d5481565b6102f7610685565b6b033b2e3c9fd0803ce80000006102f7565b610331601680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b61033161053f366004610d2f565b601555565b610331610552366004610d48565b505050565b60016102f7565b6102f7600e5481565b61033161032e366004610d2f565b610331610583366004610ce8565b61071d565b60135461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103316105b6366004610d7d565b600b92909255600c55600d55565b6102f7600c5481565b6102f7600b5481565b6102f760155481565b6102f7600f5481565b6102f760025481565b60125461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b60006102f7565b6004818154811061062857600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6000610667826b033b2e3c9fd0803ce800000061077a565b92915050565b6000610667826b033b2e3c9fd0803ce80000006108e9565b6003546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156106f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107189190610da9565b905090565b6009829055600a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691909117909155600354610776911682846109fe565b5050565b60408051808201909152600281527f4d330000000000000000000000000000000000000000000000000000000000006020820152600090826107f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b60405180910390fd5b506000610800600284610e72565b90506b033b2e3c9fd0803ce8000000610839827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610ead565b6108439190610e72565b8411156040518060400160405280600281526020017f4d31000000000000000000000000000000000000000000000000000000000000815250906108b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b5082816108cd6b033b2e3c9fd0803ce800000087610ec4565b6108d79190610f01565b6108e19190610e72565b949350505050565b60008215806108f6575081155b1561090357506000610667565b8161091b60026b033b2e3c9fd0803ce8000000610e72565b610945907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610ead565b61094f9190610e72565b8311156040518060400160405280600281526020017f4d31000000000000000000000000000000000000000000000000000000000000815250906109c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b506b033b2e3c9fd0803ce80000006109d9600282610e72565b6109e38486610ec4565b6109ed9190610f01565b6109f79190610e72565b9392505050565b6040805173ffffffffffffffffffffffffffffffffffffffff848116602483015260448083018590528351808403909101815260649092018352602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65649084015261055292869291600091610ac9918516908490610b73565b8051909150156105525780806020019051810190610ae79190610f19565b610552576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016107e9565b60606108e1848460008585843b610be6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107e9565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051610c0f9190610f3b565b60006040518083038185875af1925050503d8060008114610c4c576040519150601f19603f3d011682016040523d82523d6000602084013e610c51565b606091505b5091509150610c61828286610c6c565b979650505050505050565b60608315610c7b5750816109f7565b825115610c8b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ce357600080fd5b919050565b60008060408385031215610cfb57600080fd5b82359150610d0b60208401610cbf565b90509250929050565b600060208284031215610d2657600080fd5b6109f782610cbf565b600060208284031215610d4157600080fd5b5035919050565b600080600060608486031215610d5d57600080fd5b83359250610d6d60208501610cbf565b9150604084013590509250925092565b600080600060608486031215610d9257600080fd5b505081359360208301359350604090920135919050565b600060208284031215610dbb57600080fd5b5051919050565b60005b83811015610ddd578181015183820152602001610dc5565b83811115610dec576000848401525b50505050565b6020815260008251806020840152610e11816040850160208701610dc2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082610ea8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600082821015610ebf57610ebf610e43565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610efc57610efc610e43565b500290565b60008219821115610f1457610f14610e43565b500190565b600060208284031215610f2b57600080fd5b815180151581146109f757600080fd5b60008251610f4d818460208701610dc2565b919091019291505056fea26469706673582212204edb887d94928b3914f60ab48df0182da9eb30ddbb7021b164cc728b60a655d564736f6c634300080a0033"; - -type PoolServiceMockConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: PoolServiceMockConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class PoolServiceMock__factory extends ContractFactory { - constructor(...args: PoolServiceMockConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - _addressProvider: string, - _underlyingToken: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - _addressProvider, - _underlyingToken, - overrides || {} - ) as Promise; - } - override getDeployTransaction( - _addressProvider: string, - _underlyingToken: string, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction( - _addressProvider, - _underlyingToken, - overrides || {} - ); - } - override attach(address: string): PoolServiceMock { - return super.attach(address) as PoolServiceMock; - } - override connect(signer: Signer): PoolServiceMock__factory { - return super.connect(signer) as PoolServiceMock__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): PoolServiceMockInterface { - return new utils.Interface(_abi) as PoolServiceMockInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): PoolServiceMock { - return new Contract(address, _abi, signerOrProvider) as PoolServiceMock; - } -} diff --git a/src/types/factories/contracts/test/mocks/pool/TestPoolService__factory.ts b/src/types/factories/contracts/test/mocks/pool/TestPoolService__factory.ts deleted file mode 100644 index d931827e..00000000 --- a/src/types/factories/contracts/test/mocks/pool/TestPoolService__factory.ts +++ /dev/null @@ -1,976 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { - Signer, - utils, - Contract, - ContractFactory, - BigNumberish, - Overrides, -} from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - TestPoolService, - TestPoolServiceInterface, -} from "../../../../../contracts/test/mocks/pool/TestPoolService"; - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "addressProvider", - type: "address", - }, - { - internalType: "address", - name: "_underlying", - type: "address", - }, - { - internalType: "address", - name: "_dieselAddress", - type: "address", - }, - { - internalType: "address", - name: "interestRateModelAddress", - type: "address", - }, - { - internalType: "uint256", - name: "_expectedLiquidityLimit", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "CallerNotConfiguratorException", - type: "error", - }, - { - inputs: [], - name: "CallerNotPausableAdminException", - type: "error", - }, - { - inputs: [], - name: "CallerNotUnPausableAdminException", - type: "error", - }, - { - inputs: [], - name: "ZeroAddressException", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "sender", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "onBehalfOf", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "referralCode", - type: "uint256", - }, - ], - name: "AddLiquidity", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "creditManager", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "Borrow", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "creditManager", - type: "address", - }, - ], - name: "BorrowForbidden", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "creditManager", - type: "address", - }, - ], - name: "NewCreditManagerConnected", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "newLimit", - type: "uint256", - }, - ], - name: "NewExpectedLiquidityLimit", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newInterestRateModel", - type: "address", - }, - ], - name: "NewInterestRateModel", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "fee", - type: "uint256", - }, - ], - name: "NewWithdrawFee", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "Paused", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "sender", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "RemoveLiquidity", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "creditManager", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "borrowedAmount", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "profit", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "loss", - type: "uint256", - }, - ], - name: "Repay", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "creditManager", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "loss", - type: "uint256", - }, - ], - name: "UncoveredLoss", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "Unpaused", - type: "event", - }, - { - inputs: [], - name: "_acl", - outputs: [ - { - internalType: "contract ACL", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "_cumulativeIndex_RAY", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "_expectedLiquidityLU", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "_timestampLU", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "address", - name: "onBehalfOf", - type: "address", - }, - { - internalType: "uint256", - name: "referralCode", - type: "uint256", - }, - ], - name: "addLiquidity", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "addressProvider", - outputs: [ - { - internalType: "contract AddressProvider", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "availableLiquidity", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "borrowAPY_RAY", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "calcLinearCumulative_RAY", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "cumulativeIndex_RAY", - type: "uint256", - }, - { - internalType: "uint256", - name: "currentBorrowRate_RAY", - type: "uint256", - }, - { - internalType: "uint256", - name: "timeDifference", - type: "uint256", - }, - ], - name: "calcLinearIndex_RAY", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_creditManager", - type: "address", - }, - ], - name: "connectCreditManager", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "creditManagers", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "creditManagersCanBorrow", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "creditManagersCanRepay", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditManagersCount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "dieselToken", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "expectedLiquidity", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "expectedLiquidityLimit", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_creditManager", - type: "address", - }, - ], - name: "forbidCreditManagerToBorrow", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "fromDiesel", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "getCumulativeIndex_RAY", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "getDieselRate_RAY", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "getExpectedLU", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "getTimestampLU", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "interestRateModel", - outputs: [ - { - internalType: "contract IInterestRateModel", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "borrowedAmount", - type: "uint256", - }, - { - internalType: "address", - name: "creditAccount", - type: "address", - }, - ], - name: "lendCreditAccount", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "pause", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "paused", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "address", - name: "to", - type: "address", - }, - ], - name: "removeLiquidity", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "borrowedAmount", - type: "uint256", - }, - { - internalType: "uint256", - name: "profit", - type: "uint256", - }, - { - internalType: "uint256", - name: "loss", - type: "uint256", - }, - ], - name: "repayCreditAccount", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "newExpectedLiquidity", - type: "uint256", - }, - ], - name: "setExpectedLiquidity", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "newLimit", - type: "uint256", - }, - ], - name: "setExpectedLiquidityLimit", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "fee", - type: "uint256", - }, - ], - name: "setWithdrawFee", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "toDiesel", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "totalBorrowed", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "treasuryAddress", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "underlyingToken", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "unpause", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "updateBorrowRate", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_interestRateModel", - type: "address", - }, - ], - name: "updateInterestRateModel", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "withdrawFee", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x60a06040523480156200001157600080fd5b506040516200339f3803806200339f833981016040819052620000349162000627565b6000805460ff191690558484848484846001600160a01b0381166200006c57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000ab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d191906200068e565b6001600160a01b039081166080526001805586161580159150620000fd57506001600160a01b03841615155b80156200011257506001600160a01b03831615155b80156200012757506001600160a01b03821615155b6040518060400160405280600281526020016105a360f41b815250906200016c5760405162461bcd60e51b8152600401620001639190620006ac565b60405180910390fd5b50600580546001600160a01b038088166001600160a01b03199283168117909355600780548883169084161790556008805491871691909216179055604080516326c74fc360e01b815290516326c74fc3916004808201926020929091908290030181865afa158015620001e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200020a91906200068e565b600c80546001600160a01b0319166001600160a01b03929092169190911790556b033b2e3c9fd0803ce8000000600d55620002458262000258565b60035550620007ae975050505050505050565b60408051808201909152600281526105a360f41b60208201526001600160a01b0382166200029b5760405162461bcd60e51b8152600401620001639190620006ac565b50600680546001600160a01b0319166001600160a01b038316179055620002c36000620002fa565b6040516001600160a01b038216907f0ec6cb7631d36954a05ffd646135bfd9995c71e7fa36d26abb1ad9f24a040ea190600090a250565b8062000305620003b5565b6200031191906200071a565b6002556200031e6200042e565b600d556006546002546001600160a01b03909116906342568d44906200034362000460565b6040516001600160e01b031960e085901b16815260048101929092526024820152604401602060405180830381865afa15801562000385573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003ab919062000734565b600e555042600f55565b600080600f5442620003c891906200071a565b905060006301e133806b033b2e3c9fd0803ce800000083600e54600454620003f191906200074e565b620003fd91906200074e565b62000409919062000770565b62000415919062000770565b90508060025462000427919062000793565b9250505090565b600080600f54426200044191906200071a565b90506200045a600d54600e5483620004d560201b60201c565b91505090565b6007546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015620004aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004d0919062000734565b905090565b6000806301e13380620004e984866200074e565b620004f5919062000770565b6200050d906b033b2e3c9fd0803ce800000062000793565b90506200052981866200053260201b62001f941790919060201c565b95945050505050565b600082158062000540575081155b156200054f5750600062000604565b816200056960026b033b2e3c9fd0803ce800000062000770565b62000577906000196200071a565b62000583919062000770565b831115604051806040016040528060028152602001614d3160f01b81525090620005c25760405162461bcd60e51b8152600401620001639190620006ac565b506b033b2e3c9fd0803ce8000000620005dd60028262000770565b620005e984866200074e565b620005f5919062000793565b62000601919062000770565b90505b92915050565b80516001600160a01b03811681146200062257600080fd5b919050565b600080600080600060a086880312156200064057600080fd5b6200064b866200060a565b94506200065b602087016200060a565b93506200066b604087016200060a565b92506200067b606087016200060a565b9150608086015190509295509295909350565b600060208284031215620006a157600080fd5b62000601826200060a565b600060208083528351808285015260005b81811015620006db57858101830151858201604001528201620006bd565b81811115620006ee576000604083870101525b50601f01601f1916929092016040019392505050565b634e487b7160e01b600052601160045260246000fd5b6000828210156200072f576200072f62000704565b500390565b6000602082840312156200074757600080fd5b5051919050565b60008160001904831182151516156200076b576200076b62000704565b500290565b6000826200078e57634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115620007a957620007a962000704565b500190565b608051612ba4620007fb600039600081816104fa0152818161090d01528181610b0d01528181610c4c01528181610eac015281816113ff015281816115900152611bdb0152612ba46000f3fe608060405234801561001057600080fd5b50600436106102de5760003560e01c8063609ae31711610186578063bb04b193116100e3578063d41ee0f711610097578063ef8d960311610071578063ef8d9603146105bd578063f3fdb15a146105c6578063fe14112d146105e657600080fd5b8063d41ee0f7146105a3578063dbcb313b146105ab578063e941fa78146105b457600080fd5b8063c5f956af116100c8578063c5f956af1461055d578063ca9505e41461057d578063cf33d9551461059057600080fd5b8063bb04b19314610537578063bf28068b1461054a57600080fd5b80639aa5d4621161013a578063a50cf2c81161011f578063a50cf2c8146104f5578063a7a5eccc1461051c578063b6ac642a1461052457600080fd5b80639aa5d462146104da578063a4e8273e146104ed57600080fd5b8063788c6bfe1161016b578063788c6bfe146104b75780637dfc6afe146104bf5780638456cb59146104d257600080fd5b8063609ae317146104a657806374375359146104af57600080fd5b80633e163df01161023f57806352cb995f116101f35780635664cacf116101cd5780635664cacf146104805780635b29233b146104935780635c975abb1461049b57600080fd5b806352cb995f1461045d5780635427c9381461046557806354fd4d501461047857600080fd5b806345d31f9d1161022457806345d31f9d146104385780634c19386c146104415780634d778ad11461044a57600080fd5b80633e163df01461040d5780633f4ba83a1461043057600080fd5b80632495a599116102965780632e97ca211161027b5780632e97ca21146103a757806331d8bc27146103da57806336dda7d5146103ed57600080fd5b80632495a599146103675780632954018c1461038757600080fd5b8063078c4781116102c7578063078c4781146103125780630fce70fb146103275780631e16e4fc1461032f57600080fd5b8063030dbb04146102e357806305fe138b146102ff575b600080fd5b6102ec60025481565b6040519081526020015b60405180910390f35b6102ec61030d3660046128b4565b6105ee565b6103256103203660046128e4565b6108df565b005b6102ec610a37565b61034261033d366004612901565b610a5f565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102f6565b6007546103429073ffffffffffffffffffffffffffffffffffffffff1681565b6005546103429073ffffffffffffffffffffffffffffffffffffffff1681565b6103ca6103b53660046128e4565b60096020526000908152604090205460ff1681565b60405190151581526020016102f6565b6102ec6103e836600461291a565b610a96565b6008546103429073ffffffffffffffffffffffffffffffffffffffff1681565b6103ca61041b3660046128e4565b600a6020526000908152604090205460ff1681565b610325610adf565b6102ec600e5481565b6102ec60045481565b6102ec610458366004612901565b610bcd565b6002546102ec565b6102ec610473366004612901565b610bfd565b6102ec600181565b61032561048e3660046128e4565b610c1e565b600f546102ec565b60005460ff166103ca565b6102ec600f5481565b6102ec610d0e565b6102ec610da6565b6103256104cd366004612901565b600255565b610325610e7e565b6103256104e8366004612946565b610f6a565b600b546102ec565b6103427f000000000000000000000000000000000000000000000000000000000000000081565b600d546102ec565b610325610532366004612901565b6113d1565b610325610545366004612901565b611562565b6103256105583660046128b4565b61167b565b600c546103429073ffffffffffffffffffffffffffffffffffffffff1681565b61032561058b36600461291a565b6117fb565b61032561059e3660046128e4565b611bad565b610325611f1d565b6102ec600d5481565b6102ec60105481565b6102ec60035481565b6006546103429073ffffffffffffffffffffffffffffffffffffffff1681565b6102ec611f27565b6000805460ff1615610661576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064015b60405180910390fd5b600260015414156106ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610658565b60026001819055604080518082019091529081527f5a30000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8316610756576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065891906129aa565b50600061076284610bfd565b9050600061077b601054836120a290919063ffffffff16565b905060006107898284612a2a565b6007549091506107b09073ffffffffffffffffffffffffffffffffffffffff1686836120d8565b81156107e057600c546007546107e09173ffffffffffffffffffffffffffffffffffffffff9182169116846120d8565b6008546040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff90911690639dc29fac90604401600060405180830381600087803b15801561085257600080fd5b505af1158015610866573d6000803e3d6000fd5b50505050826002546108789190612a2a565b60025561088560006121b1565b60405186815273ffffffffffffffffffffffffffffffffffffffff86169033907fd8ae9b9ba89e637bcb66a69ac91e8f688018e81d6f92c57e02226425c8efbdf69060200160405180910390a36001805595945050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610969573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061098d9190612a41565b6109c3576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff811660008181526009602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f9181736fce85d2d4cca2e4406f10679302ae5c387180fdb62963af3cd9a24fd69190a250565b600080600f5442610a489190612a2a565b9050610a59600d54600e5483610a96565b91505090565b600b8181548110610a6f57600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6000806301e13380610aa88486612a63565b610ab29190612acf565b610ac8906b033b2e3c9fd0803ce8000000612ae3565b9050610ad48582611f94565b9150505b9392505050565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa158015610b69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8d9190612a41565b610bc3576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bcb612286565b565b6000610bd7610da6565b610bed6b033b2e3c9fd0803ce800000084612a63565b610bf79190612acf565b92915050565b60006b033b2e3c9fd0803ce8000000610c14610da6565b610bed9084612a63565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610ca8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ccc9190612a41565b610d02576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d0b81612367565b50565b6007546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015610d7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da19190612afb565b905090565b600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3a9190612afb565b905080610e54576b033b2e3c9fd0803ce800000091505090565b806b033b2e3c9fd0803ce8000000610e6a611f27565b610e749190612a63565b610a599190612acf565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015610f08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2c9190612a41565b610f62576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bcb612478565b60005460ff1615610fd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610658565b60026001541415611044576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610658565b60026001819055604080518082019091529081527f5a30000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff83166110cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065891906129aa565b50600354836110d9611f27565b6110e39190612ae3565b11156040518060400160405280600381526020017f505332000000000000000000000000000000000000000000000000000000000081525090611153576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065891906129aa565b506007546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156111c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e79190612afb565b60075490915061120f9073ffffffffffffffffffffffffffffffffffffffff16333087612538565b6007546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152829173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa15801561127d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a19190612afb565b6112ab9190612a2a565b60085490945073ffffffffffffffffffffffffffffffffffffffff166340c10f19846112d687610bcd565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401600060405180830381600087803b15801561134157600080fd5b505af1158015611355573d6000803e3d6000fd5b50505050836002546113679190612ae3565b60025561137460006121b1565b604080518581526020810184905273ffffffffffffffffffffffffffffffffffffffff85169133917fd2491a9b4fe81a7cd4511e8b7b7743951b061dad5bed7da8a7795b080ee08c7e910160405180910390a35050600180555050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561145b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061147f9190612a41565b6114b5576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051808201909152600381527f505333000000000000000000000000000000000000000000000000000000000060208201526064821115611525576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065891906129aa565b5060108190556040518181527fd5fe46099fa396290a7f57e36c3c3c8774e2562c18ed5d1dcc0fa75071e03f1d906020015b60405180910390a150565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156115ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116109190612a41565b611646576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60038190556040518181527fd7a183c9fe85b604c25d54bd676e0866f6c13bcca9fb9b0850213de118fdc99c90602001611557565b60005460ff16156116e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610658565b33600090815260096020908152604091829020548251808401909352600383527f50533000000000000000000000000000000000000000000000000000000000009183019190915260ff1661176a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065891906129aa565b5060075461178f9073ffffffffffffffffffffffffffffffffffffffff1682846120d8565b61179960006121b1565b816004546117a79190612ae3565b60045560405182815273ffffffffffffffffffffffffffffffffffffffff82169033907f312a5e5e1079f5dda4e95dbbd0b908b291fd5b992ef22073643ab691572c5b529060200160405180910390a35050565b60005460ff1615611868576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610658565b336000908152600a6020908152604091829020548251808401909352600383527f50533000000000000000000000000000000000000000000000000000000000009183019190915260ff166118ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065891906129aa565b5081156119b957600854600c5473ffffffffffffffffffffffffffffffffffffffff918216916340c10f19911661192085610bcd565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401600060405180830381600087803b15801561198b57600080fd5b505af115801561199f573d6000803e3d6000fd5b50505050816002546119b19190612ae3565b600255611b45565b60006119c482610bcd565b600854600c546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529293506000929116906370a0823190602401602060405180830381865afa158015611a3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a609190612afb565b905081811015611ab457905080337fef3653ded679720ab04913b6f3820be7cedc8286d42ff5dd8dff17e91bd2964c611a9883610bfd565b611aa29086612a2a565b60405190815260200160405180910390a25b600854600c546040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015260248101859052911690639dc29fac90604401600060405180830381600087803b158015611b2a57600080fd5b505af1158015611b3e573d6000803e3d6000fd5b5050505050505b611b4e816121b1565b8260046000828254611b609190612a2a565b9091555050604080518481526020810184905290810182905233907f2fe77b1c99aca6b022b8efc6e3e8dd1b48b30748709339b65c50ef3263443e099060600160405180910390a2505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611c37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c5b9190612a41565b611c91576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cdc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d009190612b14565b73ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600381526020017f505331000000000000000000000000000000000000000000000000000000000081525090611d9c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065891906129aa565b5073ffffffffffffffffffffffffffffffffffffffff81166000908152600a6020908152604091829020548251808401909352600383527f50533400000000000000000000000000000000000000000000000000000000009183019190915260ff1615611e36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065891906129aa565b5073ffffffffffffffffffffffffffffffffffffffff81166000818152600960209081526040808320805460017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009182168117909255600a90935281842080549093168117909255600b8054928301815583527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db990910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055517fe076020e7eac3915d33aec40c24f95e73eb6c9921ff89747d50aa8fd934d2c019190a250565b610bcb60006121b1565b600080600f5442611f389190612a2a565b905060006301e133806b033b2e3c9fd0803ce800000083600e54600454611f5f9190612a63565b611f699190612a63565b611f739190612acf565b611f7d9190612acf565b905080600254611f8d9190612ae3565b9250505090565b6000821580611fa1575081155b15611fae57506000610bf7565b81611fc660026b033b2e3c9fd0803ce8000000612acf565b611ff0907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612a2a565b611ffa9190612acf565b8311156040518060400160405280600281526020017f4d310000000000000000000000000000000000000000000000000000000000008152509061206b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065891906129aa565b506b033b2e3c9fd0803ce8000000612084600282612acf565b61208e8486612a63565b6120989190612ae3565b610ad89190612acf565b60008215806120af575081155b156120bc57506000610bf7565b6127106120ca600282612b31565b61ffff1661208e8486612a63565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526121ac9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261259c565b505050565b806121ba611f27565b6121c49190612a2a565b6002556121cf610a37565b600d5560065460025473ffffffffffffffffffffffffffffffffffffffff909116906342568d44906121ff610d0e565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815260048101929092526024820152604401602060405180830381865afa158015612258573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061227c9190612afb565b600e555042600f55565b60005460ff166122f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610658565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60408051808201909152600281527f5a30000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff82166123e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065891906129aa565b50600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff831617905561243460006121b1565b60405173ffffffffffffffffffffffffffffffffffffffff8216907f0ec6cb7631d36954a05ffd646135bfd9995c71e7fa36d26abb1ad9f24a040ea190600090a250565b60005460ff16156124e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610658565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861233d3390565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526125969085907f23b872dd000000000000000000000000000000000000000000000000000000009060840161212a565b50505050565b60006125fe826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166126a89092919063ffffffff16565b8051909150156121ac578080602001905181019061261c9190612a41565b6121ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610658565b60606126b784846000856126bf565b949350505050565b606082471015612751576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610658565b843b6127b9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610658565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516127e29190612b52565b60006040518083038185875af1925050503d806000811461281f576040519150601f19603f3d011682016040523d82523d6000602084013e612824565b606091505b509150915061283482828661283f565b979650505050505050565b6060831561284e575081610ad8565b82511561285e5782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065891906129aa565b73ffffffffffffffffffffffffffffffffffffffff81168114610d0b57600080fd5b600080604083850312156128c757600080fd5b8235915060208301356128d981612892565b809150509250929050565b6000602082840312156128f657600080fd5b8135610ad881612892565b60006020828403121561291357600080fd5b5035919050565b60008060006060848603121561292f57600080fd5b505081359360208301359350604090920135919050565b60008060006060848603121561295b57600080fd5b83359250602084013561296d81612892565b929592945050506040919091013590565b60005b83811015612999578181015183820152602001612981565b838111156125965750506000910152565b60208152600082518060208401526129c981604085016020870161297e565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612a3c57612a3c6129fb565b500390565b600060208284031215612a5357600080fd5b81518015158114610ad857600080fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612a9b57612a9b6129fb565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082612ade57612ade612aa0565b500490565b60008219821115612af657612af66129fb565b500190565b600060208284031215612b0d57600080fd5b5051919050565b600060208284031215612b2657600080fd5b8151610ad881612892565b600061ffff80841680612b4657612b46612aa0565b92169190910492915050565b60008251612b6481846020870161297e565b919091019291505056fea2646970667358221220aa576a1f3048229fbbd4b2babbd3d404feadeb799dd811619fe8b62885256f2164736f6c634300080a0033"; - -type TestPoolServiceConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: TestPoolServiceConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class TestPoolService__factory extends ContractFactory { - constructor(...args: TestPoolServiceConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - addressProvider: string, - _underlying: string, - _dieselAddress: string, - interestRateModelAddress: string, - _expectedLiquidityLimit: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - addressProvider, - _underlying, - _dieselAddress, - interestRateModelAddress, - _expectedLiquidityLimit, - overrides || {} - ) as Promise; - } - override getDeployTransaction( - addressProvider: string, - _underlying: string, - _dieselAddress: string, - interestRateModelAddress: string, - _expectedLiquidityLimit: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction( - addressProvider, - _underlying, - _dieselAddress, - interestRateModelAddress, - _expectedLiquidityLimit, - overrides || {} - ); - } - override attach(address: string): TestPoolService { - return super.attach(address) as TestPoolService; - } - override connect(signer: Signer): TestPoolService__factory { - return super.connect(signer) as TestPoolService__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): TestPoolServiceInterface { - return new utils.Interface(_abi) as TestPoolServiceInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): TestPoolService { - return new Contract(address, _abi, signerOrProvider) as TestPoolService; - } -} diff --git a/src/types/factories/contracts/test/mocks/pool/index.ts b/src/types/factories/contracts/test/mocks/pool/index.ts deleted file mode 100644 index ae0ffc15..00000000 --- a/src/types/factories/contracts/test/mocks/pool/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { CreditManagerMockForPoolTest__factory } from "./CreditManagerMockForPoolTest__factory"; -export { PoolServiceMock__factory } from "./PoolServiceMock__factory"; -export { TestPoolService__factory } from "./TestPoolService__factory"; diff --git a/src/types/factories/contracts/test/mocks/token/CERC20Mock__factory.ts b/src/types/factories/contracts/test/mocks/token/CERC20Mock__factory.ts deleted file mode 100644 index 0bdd88a0..00000000 --- a/src/types/factories/contracts/test/mocks/token/CERC20Mock__factory.ts +++ /dev/null @@ -1,486 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { - Signer, - utils, - Contract, - ContractFactory, - BigNumberish, - Overrides, -} from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - CERC20Mock, - CERC20MockInterface, -} from "../../../../../contracts/test/mocks/token/CERC20Mock"; - -const _abi = [ - { - inputs: [ - { - internalType: "string", - name: "name_", - type: "string", - }, - { - internalType: "string", - name: "symbol_", - type: "string", - }, - { - internalType: "uint8", - name: "decimals_", - type: "uint8", - }, - { - internalType: "address", - name: "underlying_", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "spender", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "Approval", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "previousOwner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "OwnershipTransferred", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "Transfer", - type: "event", - }, - { - inputs: [ - { - internalType: "address", - name: "owner", - type: "address", - }, - { - internalType: "address", - name: "spender", - type: "address", - }, - ], - name: "allowance", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "approve", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "decimals", - outputs: [ - { - internalType: "uint8", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "subtractedValue", - type: "uint256", - }, - ], - name: "decreaseAllowance", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "addedValue", - type: "uint256", - }, - ], - name: "increaseAllowance", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "mint", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "owner", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "redeem", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "renounceOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "symbol", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "totalSupply", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "recipient", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "transfer", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "sender", - type: "address", - }, - { - internalType: "address", - name: "recipient", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "transferFrom", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "transferOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "underlying", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x60c06040523480156200001157600080fd5b506040516200170938038062001709833981016040819052620000349162000266565b8351849084906200004d906003906020850190620000f3565b50805162000063906004906020840190620000f3565b505050620000806200007a6200009d60201b60201c565b620000a1565b60ff9091166080526001600160a01b031660a05250620003479050565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b82805462000101906200030a565b90600052602060002090601f01602090048101928262000125576000855562000170565b82601f106200014057805160ff191683800117855562000170565b8280016001018555821562000170579182015b828111156200017057825182559160200191906001019062000153565b506200017e92915062000182565b5090565b5b808211156200017e576000815560010162000183565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c157600080fd5b81516001600160401b0380821115620001de57620001de62000199565b604051601f8301601f19908116603f0116810190828211818310171562000209576200020962000199565b816040528381526020925086838588010111156200022657600080fd5b600091505b838210156200024a57858201830151818301840152908201906200022b565b838211156200025c5760008385830101525b9695505050505050565b600080600080608085870312156200027d57600080fd5b84516001600160401b03808211156200029557600080fd5b620002a388838901620001af565b95506020870151915080821115620002ba57600080fd5b50620002c987828801620001af565b935050604085015160ff81168114620002e157600080fd5b60608601519092506001600160a01b0381168114620002ff57600080fd5b939692955090935050565b600181811c908216806200031f57607f821691505b602082108114156200034157634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05161138e6200037b600039600081816101f70152818161041f0152610600015260006101a2015261138e6000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80636f307dc3116100b257806395d89b4111610081578063a9059cbb11610066578063a9059cbb146102b5578063dd62ed3e146102c8578063f2fde38b1461030e57600080fd5b806395d89b411461029a578063a457c2d7146102a257600080fd5b80636f307dc3146101f257806370a082311461023e578063715018a6146102745780638da5cb5b1461027c57600080fd5b806323b872dd116100ee57806323b872dd14610188578063313ce5671461019b57806339509351146101cc57806340c10f19146101df57600080fd5b806306fdde0314610120578063095ea7b31461013e57806318160ddd146101615780631e9a695014610173575b600080fd5b610128610321565b604051610135919061112d565b60405180910390f35b61015161014c3660046111c9565b6103b3565b6040519015158152602001610135565b6002545b604051908152602001610135565b6101866101813660046111c9565b6103c9565b005b6101516101963660046111f3565b610491565b60405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610135565b6101516101da3660046111c9565b61057c565b6101866101ed3660046111c9565b6105c5565b6102197f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b61016561024c36600461122f565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610186610691565b60055473ffffffffffffffffffffffffffffffffffffffff16610219565b61012861071e565b6101516102b03660046111c9565b61072d565b6101516102c33660046111c9565b610805565b6101656102d6366004611251565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b61018661031c36600461122f565b610812565b60606003805461033090611284565b80601f016020809104026020016040519081016040528092919081815260200182805461035c90611284565b80156103a95780601f1061037e576101008083540402835291602001916103a9565b820191906000526020600020905b81548152906001019060200180831161038c57829003601f168201915b5050505050905090565b60006103c0338484610942565b50600192915050565b6103d33382610af5565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015610468573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048c91906112d8565b505050565b600061049e848484610ce2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6105718533858403610942565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916103c09185906105c0908690611329565b610942565b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906323b872dd906064016020604051808303816000875af115801561065e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068291906112d8565b5061068d8282610f96565b5050565b60055473ffffffffffffffffffffffffffffffffffffffff163314610712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161055b565b61071c60006110b6565b565b60606004805461033090611284565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156107ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161055b565b6107fb3385858403610942565b5060019392505050565b60006103c0338484610ce2565b60055473ffffffffffffffffffffffffffffffffffffffff163314610893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161055b565b73ffffffffffffffffffffffffffffffffffffffff8116610936576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161055b565b61093f816110b6565b50565b73ffffffffffffffffffffffffffffffffffffffff83166109e4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff8216610a87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8216610b98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015610c4e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290610c8a908490611341565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff8216610e28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610ede576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610f22908490611329565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f8891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161055b565b80600260008282546110259190611329565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152602081905260408120805483929061105f908490611329565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208083528351808285015260005b8181101561115a5785810183015185820160400152820161113e565b8181111561116c576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146111c457600080fd5b919050565b600080604083850312156111dc57600080fd5b6111e5836111a0565b946020939093013593505050565b60008060006060848603121561120857600080fd5b611211846111a0565b925061121f602085016111a0565b9150604084013590509250925092565b60006020828403121561124157600080fd5b61124a826111a0565b9392505050565b6000806040838503121561126457600080fd5b61126d836111a0565b915061127b602084016111a0565b90509250929050565b600181811c9082168061129857607f821691505b602082108114156112d2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156112ea57600080fd5b8151801515811461124a57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561133c5761133c6112fa565b500190565b600082821015611353576113536112fa565b50039056fea26469706673582212203a6db30cd3c097921df4156794aa7973eb848711deeb2cffd7c54a9df1fdb0a564736f6c634300080a0033"; - -type CERC20MockConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: CERC20MockConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class CERC20Mock__factory extends ContractFactory { - constructor(...args: CERC20MockConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - name_: string, - symbol_: string, - decimals_: BigNumberish, - underlying_: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - name_, - symbol_, - decimals_, - underlying_, - overrides || {} - ) as Promise; - } - override getDeployTransaction( - name_: string, - symbol_: string, - decimals_: BigNumberish, - underlying_: string, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction( - name_, - symbol_, - decimals_, - underlying_, - overrides || {} - ); - } - override attach(address: string): CERC20Mock { - return super.attach(address) as CERC20Mock; - } - override connect(signer: Signer): CERC20Mock__factory { - return super.connect(signer) as CERC20Mock__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): CERC20MockInterface { - return new utils.Interface(_abi) as CERC20MockInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): CERC20Mock { - return new Contract(address, _abi, signerOrProvider) as CERC20Mock; - } -} diff --git a/src/types/factories/contracts/test/mocks/token/ERC20ApproveRestricted.sol/ERC20ApproveRestrictedFalse__factory.ts b/src/types/factories/contracts/test/mocks/token/ERC20ApproveRestricted.sol/ERC20ApproveRestrictedFalse__factory.ts deleted file mode 100644 index d61101d9..00000000 --- a/src/types/factories/contracts/test/mocks/token/ERC20ApproveRestricted.sol/ERC20ApproveRestrictedFalse__factory.ts +++ /dev/null @@ -1,395 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - ERC20ApproveRestrictedFalse, - ERC20ApproveRestrictedFalseInterface, -} from "../../../../../../contracts/test/mocks/token/ERC20ApproveRestricted.sol/ERC20ApproveRestrictedFalse"; - -const _abi = [ - { - inputs: [], - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "spender", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "Approval", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "previousOwner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "OwnershipTransferred", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "Transfer", - type: "event", - }, - { - inputs: [ - { - internalType: "address", - name: "owner", - type: "address", - }, - { - internalType: "address", - name: "spender", - type: "address", - }, - ], - name: "allowance", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "user", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "approve", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "decimals", - outputs: [ - { - internalType: "uint8", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "subtractedValue", - type: "uint256", - }, - ], - name: "decreaseAllowance", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "addedValue", - type: "uint256", - }, - ], - name: "increaseAllowance", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "owner", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "renounceOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "symbol", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "totalSupply", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "recipient", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "transfer", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "sender", - type: "address", - }, - { - internalType: "address", - name: "recipient", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "transferFrom", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "transferOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, -]; - -const _bytecode = - "0x60806040523480156200001157600080fd5b50604080516020808201808452600080845284519283019094529281528151919290916200004291600391620000d1565b50805162000058906004906020840190620000d1565b505050620000756200006f6200007b60201b60201c565b6200007f565b620001b4565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054620000df9062000177565b90600052602060002090601f0160209004810192826200010357600085556200014e565b82601f106200011e57805160ff19168380011785556200014e565b828001600101855582156200014e579182015b828111156200014e57825182559160200191906001019062000131565b506200015c92915062000160565b5090565b5b808211156200015c576000815560010162000161565b600181811c908216806200018c57607f821691505b60208210811415620001ae57634e487b7160e01b600052602260045260246000fd5b50919050565b610e3b80620001c46000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063715018a61161008c578063a457c2d711610066578063a457c2d7146101e7578063a9059cbb146101fa578063dd62ed3e1461020d578063f2fde38b1461025357600080fd5b8063715018a6146101ad5780638da5cb5b146101b757806395d89b41146101df57600080fd5b806323b872dd116100c857806323b872dd14610142578063313ce56714610155578063395093511461016457806370a082311461017757600080fd5b806306fdde03146100ef578063095ea7b31461010d57806318160ddd14610130575b600080fd5b6100f7610266565b6040516101049190610c1b565b60405180910390f35b61012061011b366004610cb7565b6102f8565b6040519015158152602001610104565b6002545b604051908152602001610104565b610120610150366004610ce1565b610358565b60405160128152602001610104565b610120610172366004610cb7565b610443565b610134610185366004610d1d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101b561048c565b005b60055460405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610104565b6100f7610519565b6101206101f5366004610cb7565b610528565b610120610208366004610cb7565b610600565b61013461021b366004610d3f565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101b5610261366004610d1d565b61060d565b60606003805461027590610d72565b80601f01602080910402602001604051908101604052809291908181526020018280546102a190610d72565b80156102ee5780601f106102c3576101008083540402835291602001916102ee565b820191906000526020600020905b8154815290600101906020018083116102d157829003601f168201915b5050505050905090565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548110801561033657508115155b1561034357506000610352565b61034e33848461073d565b5060015b92915050565b60006103658484846108f0565b73ffffffffffffffffffffffffffffffffffffffff841660009081526001602090815260408083203384529091529020548281101561042b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b610438853385840361073d565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161034e918590610487908690610dc6565b61073d565b60055473ffffffffffffffffffffffffffffffffffffffff16331461050d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610422565b6105176000610ba4565b565b60606004805461027590610d72565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156105e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610422565b6105f6338585840361073d565b5060019392505050565b600061034e3384846108f0565b60055473ffffffffffffffffffffffffffffffffffffffff16331461068e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610422565b73ffffffffffffffffffffffffffffffffffffffff8116610731576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610422565b61073a81610ba4565b50565b73ffffffffffffffffffffffffffffffffffffffff83166107df576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610422565b73ffffffffffffffffffffffffffffffffffffffff8216610882576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610422565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610993576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610422565b73ffffffffffffffffffffffffffffffffffffffff8216610a36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610422565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610aec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610422565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610b30908490610dc6565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610b9691815260200190565b60405180910390a350505050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208083528351808285015260005b81811015610c4857858101830151858201604001528201610c2c565b81811115610c5a576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610cb257600080fd5b919050565b60008060408385031215610cca57600080fd5b610cd383610c8e565b946020939093013593505050565b600080600060608486031215610cf657600080fd5b610cff84610c8e565b9250610d0d60208501610c8e565b9150604084013590509250925092565b600060208284031215610d2f57600080fd5b610d3882610c8e565b9392505050565b60008060408385031215610d5257600080fd5b610d5b83610c8e565b9150610d6960208401610c8e565b90509250929050565b600181811c90821680610d8657607f821691505b60208210811415610dc0577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60008219821115610e00577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b50019056fea264697066735822122046ab9b2ff246a21fe95c48d51fda8c67c187c16ac22893aa37d4d531643fa5e364736f6c634300080a0033"; - -type ERC20ApproveRestrictedFalseConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: ERC20ApproveRestrictedFalseConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class ERC20ApproveRestrictedFalse__factory extends ContractFactory { - constructor(...args: ERC20ApproveRestrictedFalseConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - overrides || {} - ) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): ERC20ApproveRestrictedFalse { - return super.attach(address) as ERC20ApproveRestrictedFalse; - } - override connect(signer: Signer): ERC20ApproveRestrictedFalse__factory { - return super.connect(signer) as ERC20ApproveRestrictedFalse__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): ERC20ApproveRestrictedFalseInterface { - return new utils.Interface(_abi) as ERC20ApproveRestrictedFalseInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): ERC20ApproveRestrictedFalse { - return new Contract( - address, - _abi, - signerOrProvider - ) as ERC20ApproveRestrictedFalse; - } -} diff --git a/src/types/factories/contracts/test/mocks/token/ERC20ApproveRestricted.sol/ERC20ApproveRestrictedRevert__factory.ts b/src/types/factories/contracts/test/mocks/token/ERC20ApproveRestricted.sol/ERC20ApproveRestrictedRevert__factory.ts deleted file mode 100644 index f3699b54..00000000 --- a/src/types/factories/contracts/test/mocks/token/ERC20ApproveRestricted.sol/ERC20ApproveRestrictedRevert__factory.ts +++ /dev/null @@ -1,395 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - ERC20ApproveRestrictedRevert, - ERC20ApproveRestrictedRevertInterface, -} from "../../../../../../contracts/test/mocks/token/ERC20ApproveRestricted.sol/ERC20ApproveRestrictedRevert"; - -const _abi = [ - { - inputs: [], - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "spender", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "Approval", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "previousOwner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "OwnershipTransferred", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "Transfer", - type: "event", - }, - { - inputs: [ - { - internalType: "address", - name: "owner", - type: "address", - }, - { - internalType: "address", - name: "spender", - type: "address", - }, - ], - name: "allowance", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "user", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "approve", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "decimals", - outputs: [ - { - internalType: "uint8", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "subtractedValue", - type: "uint256", - }, - ], - name: "decreaseAllowance", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "addedValue", - type: "uint256", - }, - ], - name: "increaseAllowance", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "owner", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "renounceOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "symbol", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "totalSupply", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "recipient", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "transfer", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "sender", - type: "address", - }, - { - internalType: "address", - name: "recipient", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "transferFrom", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "transferOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, -]; - -const _bytecode = - "0x60806040523480156200001157600080fd5b50604080516020808201808452600080845284519283019094529281528151919290916200004291600391620000d1565b50805162000058906004906020840190620000d1565b505050620000756200006f6200007b60201b60201c565b6200007f565b620001b4565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054620000df9062000177565b90600052602060002090601f0160209004810192826200010357600085556200014e565b82601f106200011e57805160ff19168380011785556200014e565b828001600101855582156200014e579182015b828111156200014e57825182559160200191906001019062000131565b506200015c92915062000160565b5090565b5b808211156200015c576000815560010162000161565b600181811c908216806200018c57607f821691505b60208210811415620001ae57634e487b7160e01b600052602260045260246000fd5b50919050565b610eba80620001c46000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063715018a61161008c578063a457c2d711610066578063a457c2d7146101e7578063a9059cbb146101fa578063dd62ed3e1461020d578063f2fde38b1461025357600080fd5b8063715018a6146101ad5780638da5cb5b146101b757806395d89b41146101df57600080fd5b806323b872dd116100c857806323b872dd14610142578063313ce56714610155578063395093511461016457806370a082311461017757600080fd5b806306fdde03146100ef578063095ea7b31461010d57806318160ddd14610130575b600080fd5b6100f7610266565b6040516101049190610c9a565b60405180910390f35b61012061011b366004610d36565b6102f8565b6040519015158152602001610104565b6002545b604051908152602001610104565b610120610150366004610d60565b6103dc565b60405160128152602001610104565b610120610172366004610d36565b6104c2565b610134610185366004610d9c565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101b561050b565b005b60055460405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610104565b6100f7610598565b6101206101f5366004610d36565b6105a7565b610120610208366004610d36565b61067f565b61013461021b366004610dbe565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101b5610261366004610d9c565b61068c565b60606003805461027590610df1565b80601f01602080910402602001604051908101604052809291908181526020018280546102a190610df1565b80156102ee5780601f106102c3576101008083540402835291602001916102ee565b820191906000526020600020905b8154815290600101906020018083116102d157829003601f168201915b5050505050905090565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548110801561033657508115155b156103c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f54727920746f206368616e676520616c6c6f77616e63652066726f6d206e6f6e60448201527f2d7a65726f20746f206e6f6e2d7a65726f00000000000000000000000000000060648201526084015b60405180910390fd5b6103d33384846107bc565b50600192915050565b60006103e984848461096f565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600160209081526040808320338452909152902054828110156104aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084016103bf565b6104b785338584036107bc565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916103d3918590610506908690610e45565b6107bc565b60055473ffffffffffffffffffffffffffffffffffffffff16331461058c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103bf565b6105966000610c23565b565b60606004805461027590610df1565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915281205482811015610668576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084016103bf565b61067533858584036107bc565b5060019392505050565b60006103d333848461096f565b60055473ffffffffffffffffffffffffffffffffffffffff16331461070d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103bf565b73ffffffffffffffffffffffffffffffffffffffff81166107b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016103bf565b6107b981610c23565b50565b73ffffffffffffffffffffffffffffffffffffffff831661085e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016103bf565b73ffffffffffffffffffffffffffffffffffffffff8216610901576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f737300000000000000000000000000000000000000000000000000000000000060648201526084016103bf565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610a12576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016103bf565b73ffffffffffffffffffffffffffffffffffffffff8216610ab5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016103bf565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610b6b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e6365000000000000000000000000000000000000000000000000000060648201526084016103bf565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610baf908490610e45565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610c1591815260200190565b60405180910390a350505050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208083528351808285015260005b81811015610cc757858101830151858201604001528201610cab565b81811115610cd9576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610d3157600080fd5b919050565b60008060408385031215610d4957600080fd5b610d5283610d0d565b946020939093013593505050565b600080600060608486031215610d7557600080fd5b610d7e84610d0d565b9250610d8c60208501610d0d565b9150604084013590509250925092565b600060208284031215610dae57600080fd5b610db782610d0d565b9392505050565b60008060408385031215610dd157600080fd5b610dda83610d0d565b9150610de860208401610d0d565b90509250929050565b600181811c90821680610e0557607f821691505b60208210811415610e3f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60008219821115610e7f577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b50019056fea2646970667358221220ee9246695e444dbf781646003ed01c8652e021f6ffa33f024a028b10aecc0fa164736f6c634300080a0033"; - -type ERC20ApproveRestrictedRevertConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: ERC20ApproveRestrictedRevertConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class ERC20ApproveRestrictedRevert__factory extends ContractFactory { - constructor(...args: ERC20ApproveRestrictedRevertConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - overrides || {} - ) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): ERC20ApproveRestrictedRevert { - return super.attach(address) as ERC20ApproveRestrictedRevert; - } - override connect(signer: Signer): ERC20ApproveRestrictedRevert__factory { - return super.connect(signer) as ERC20ApproveRestrictedRevert__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): ERC20ApproveRestrictedRevertInterface { - return new utils.Interface(_abi) as ERC20ApproveRestrictedRevertInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): ERC20ApproveRestrictedRevert { - return new Contract( - address, - _abi, - signerOrProvider - ) as ERC20ApproveRestrictedRevert; - } -} diff --git a/src/types/factories/contracts/test/mocks/token/ERC20ApproveRestricted.sol/index.ts b/src/types/factories/contracts/test/mocks/token/ERC20ApproveRestricted.sol/index.ts deleted file mode 100644 index de228343..00000000 --- a/src/types/factories/contracts/test/mocks/token/ERC20ApproveRestricted.sol/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { ERC20ApproveRestrictedFalse__factory } from "./ERC20ApproveRestrictedFalse__factory"; -export { ERC20ApproveRestrictedRevert__factory } from "./ERC20ApproveRestrictedRevert__factory"; diff --git a/src/types/factories/contracts/test/mocks/token/ERC20Blocking.sol/ERC20BlockingMock__factory.ts b/src/types/factories/contracts/test/mocks/token/ERC20Blocking.sol/ERC20BlockingMock__factory.ts deleted file mode 100644 index 932e8dea..00000000 --- a/src/types/factories/contracts/test/mocks/token/ERC20Blocking.sol/ERC20BlockingMock__factory.ts +++ /dev/null @@ -1,446 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - ERC20BlockingMock, - ERC20BlockingMockInterface, -} from "../../../../../../contracts/test/mocks/token/ERC20Blocking.sol/ERC20BlockingMock"; - -const _abi = [ - { - inputs: [ - { - internalType: "string", - name: "name_", - type: "string", - }, - { - internalType: "string", - name: "symbol_", - type: "string", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "spender", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "Approval", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "previousOwner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "OwnershipTransferred", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "Transfer", - type: "event", - }, - { - inputs: [ - { - internalType: "address", - name: "owner", - type: "address", - }, - { - internalType: "address", - name: "spender", - type: "address", - }, - ], - name: "allowance", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "approve", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "blockToken", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "decimals", - outputs: [ - { - internalType: "uint8", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "subtractedValue", - type: "uint256", - }, - ], - name: "decreaseAllowance", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "addedValue", - type: "uint256", - }, - ], - name: "increaseAllowance", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "isBlocked", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "mint", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "owner", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "renounceOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "symbol", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "totalSupply", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "recipient", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "transfer", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "sender", - type: "address", - }, - { - internalType: "address", - name: "recipient", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "transferFrom", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "transferOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, -]; - -const _bytecode = - "0x60806040523480156200001157600080fd5b50604051620014ad380380620014ad83398101604081905262000034916200035c565b8151829082906200004d906003906020850190620001e9565b50805162000063906004906020840190620001e9565b505050620000806200007a620000ab60201b60201c565b620000af565b620000963369d3c21bcecceda100000062000101565b50506005805460ff60a01b191690556200042a565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166200015c5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b8060026000828254620001709190620003c6565b90915550506001600160a01b038216600090815260208190526040812080548392906200019f908490620003c6565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b828054620001f790620003ed565b90600052602060002090601f0160209004810192826200021b576000855562000266565b82601f106200023657805160ff191683800117855562000266565b8280016001018555821562000266579182015b828111156200026657825182559160200191906001019062000249565b506200027492915062000278565b5090565b5b8082111562000274576000815560010162000279565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620002b757600080fd5b81516001600160401b0380821115620002d457620002d46200028f565b604051601f8301601f19908116603f01168101908282118183101715620002ff57620002ff6200028f565b816040528381526020925086838588010111156200031c57600080fd5b600091505b8382101562000340578582018301518183018401529082019062000321565b83821115620003525760008385830101525b9695505050505050565b600080604083850312156200037057600080fd5b82516001600160401b03808211156200038857600080fd5b6200039686838701620002a5565b93506020850151915080821115620003ad57600080fd5b50620003bc85828601620002a5565b9150509250929050565b60008219821115620003e857634e487b7160e01b600052601160045260246000fd5b500190565b600181811c908216806200040257607f821691505b602082108114156200042457634e487b7160e01b600052602260045260246000fd5b50919050565b611073806200043a6000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c806370a08231116100b2578063a457c2d711610081578063d75f0da711610066578063d75f0da714610295578063dd62ed3e146102ba578063f2fde38b1461030057600080fd5b8063a457c2d71461026f578063a9059cbb1461028257600080fd5b806370a0823114610201578063715018a6146102375780638da5cb5b1461023f57806395d89b411461026757600080fd5b806323b872dd116100ee57806323b872dd146101b9578063313ce567146101cc57806339509351146101db57806340c10f19146101ee57600080fd5b806306fdde0314610120578063095ea7b31461013e5780631150e7a21461016157806318160ddd146101a7575b600080fd5b610128610313565b6040516101359190610e53565b60405180910390f35b61015161014c366004610eef565b6103a5565b6040519015158152602001610135565b6101a5600580547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055565b005b6002545b604051908152602001610135565b6101516101c7366004610f19565b6103bb565b60405160128152602001610135565b6101516101e9366004610eef565b6104a6565b6101a56101fc366004610eef565b6104ef565b6101ab61020f366004610f55565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101a561057e565b60055460405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b61012861060b565b61015161027d366004610eef565b61061a565b610151610290366004610eef565b6106f2565b6005546101519074010000000000000000000000000000000000000000900460ff1681565b6101ab6102c8366004610f77565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101a561030e366004610f55565b610725565b60606003805461032290610faa565b80601f016020809104026020016040519081016040528092919081815260200182805461034e90610faa565b801561039b5780601f106103705761010080835404028352916020019161039b565b820191906000526020600020905b81548152906001019060200180831161037e57829003601f168201915b5050505050905090565b60006103b2338484610855565b50600192915050565b60006103c8848484610a08565b73ffffffffffffffffffffffffffffffffffffffff841660009081526001602090815260408083203384529091529020548281101561048e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61049b8533858403610855565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916103b29185906104ea908690610ffe565b610855565b60055473ffffffffffffffffffffffffffffffffffffffff163314610570576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b61057a8282610cbc565b5050565b60055473ffffffffffffffffffffffffffffffffffffffff1633146105ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b6106096000610ddc565b565b60606004805461032290610faa565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156106db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610485565b6106e83385858403610855565b5060019392505050565b60006106ff338484610a08565b505060055474010000000000000000000000000000000000000000900460ff1615919050565b60055473ffffffffffffffffffffffffffffffffffffffff1633146107a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b73ffffffffffffffffffffffffffffffffffffffff8116610849576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610485565b61085281610ddc565b50565b73ffffffffffffffffffffffffffffffffffffffff83166108f7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610485565b73ffffffffffffffffffffffffffffffffffffffff821661099a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610485565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610aab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610485565b73ffffffffffffffffffffffffffffffffffffffff8216610b4e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610485565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610c04576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610485565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610c48908490610ffe565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610cae91815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610d39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610485565b8060026000828254610d4b9190610ffe565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610d85908490610ffe565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208083528351808285015260005b81811015610e8057858101830151858201604001528201610e64565b81811115610e92576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610eea57600080fd5b919050565b60008060408385031215610f0257600080fd5b610f0b83610ec6565b946020939093013593505050565b600080600060608486031215610f2e57600080fd5b610f3784610ec6565b9250610f4560208501610ec6565b9150604084013590509250925092565b600060208284031215610f6757600080fd5b610f7082610ec6565b9392505050565b60008060408385031215610f8a57600080fd5b610f9383610ec6565b9150610fa160208401610ec6565b90509250929050565b600181811c90821680610fbe57607f821691505b60208210811415610ff8577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60008219821115611038577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b50019056fea2646970667358221220f276b3a428ebad5ca3019bc11bfd4e423a65a36ee1a068d717da460f6b9482dc64736f6c634300080a0033"; - -type ERC20BlockingMockConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: ERC20BlockingMockConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class ERC20BlockingMock__factory extends ContractFactory { - constructor(...args: ERC20BlockingMockConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - name_: string, - symbol_: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - name_, - symbol_, - overrides || {} - ) as Promise; - } - override getDeployTransaction( - name_: string, - symbol_: string, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(name_, symbol_, overrides || {}); - } - override attach(address: string): ERC20BlockingMock { - return super.attach(address) as ERC20BlockingMock; - } - override connect(signer: Signer): ERC20BlockingMock__factory { - return super.connect(signer) as ERC20BlockingMock__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): ERC20BlockingMockInterface { - return new utils.Interface(_abi) as ERC20BlockingMockInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): ERC20BlockingMock { - return new Contract(address, _abi, signerOrProvider) as ERC20BlockingMock; - } -} diff --git a/src/types/factories/contracts/test/mocks/token/ERC20Blocking.sol/index.ts b/src/types/factories/contracts/test/mocks/token/ERC20Blocking.sol/index.ts deleted file mode 100644 index a880437a..00000000 --- a/src/types/factories/contracts/test/mocks/token/ERC20Blocking.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { ERC20BlockingMock__factory } from "./ERC20BlockingMock__factory"; diff --git a/src/types/factories/contracts/test/mocks/token/ERC20Fee.sol/TokenFeeMock__factory.ts b/src/types/factories/contracts/test/mocks/token/ERC20Fee.sol/TokenFeeMock__factory.ts deleted file mode 100644 index 4690b26f..00000000 --- a/src/types/factories/contracts/test/mocks/token/ERC20Fee.sol/TokenFeeMock__factory.ts +++ /dev/null @@ -1,454 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { - Signer, - utils, - Contract, - ContractFactory, - BigNumberish, - Overrides, -} from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - TokenFeeMock, - TokenFeeMockInterface, -} from "../../../../../../contracts/test/mocks/token/ERC20Fee.sol/TokenFeeMock"; - -const _abi = [ - { - inputs: [ - { - internalType: "string", - name: "name_", - type: "string", - }, - { - internalType: "string", - name: "symbol_", - type: "string", - }, - { - internalType: "uint256", - name: "fee_", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "spender", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "Approval", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "previousOwner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "OwnershipTransferred", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "Transfer", - type: "event", - }, - { - inputs: [ - { - internalType: "address", - name: "owner", - type: "address", - }, - { - internalType: "address", - name: "spender", - type: "address", - }, - ], - name: "allowance", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "approve", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "decimals", - outputs: [ - { - internalType: "uint8", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "subtractedValue", - type: "uint256", - }, - ], - name: "decreaseAllowance", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "fee", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "addedValue", - type: "uint256", - }, - ], - name: "increaseAllowance", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "mint", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "owner", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "renounceOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "symbol", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "totalSupply", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "recipient", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "transfer", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "sender", - type: "address", - }, - { - internalType: "address", - name: "recipient", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "transferFrom", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "transferOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, -]; - -const _bytecode = - "0x60806040523480156200001157600080fd5b506040516200154b3803806200154b833981016040819052620000349162000399565b8251839083906200004d90600390602085019062000226565b5080516200006390600490602084019062000226565b505050620000806200007a620000eb60201b60201c565b620000ef565b620000963369d3c21bcecceda100000062000141565b60068190556127108110620000e25760405162461bcd60e51b815260206004820152600d60248201526c496e636f72726563742066656560981b60448201526064015b60405180910390fd5b50505062000470565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216620001995760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620000d9565b8060026000828254620001ad91906200040c565b90915550506001600160a01b03821660009081526020819052604081208054839290620001dc9084906200040c565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b828054620002349062000433565b90600052602060002090601f016020900481019282620002585760008555620002a3565b82601f106200027357805160ff1916838001178555620002a3565b82800160010185558215620002a3579182015b82811115620002a357825182559160200191906001019062000286565b50620002b1929150620002b5565b5090565b5b80821115620002b15760008155600101620002b6565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620002f457600080fd5b81516001600160401b0380821115620003115762000311620002cc565b604051601f8301601f19908116603f011681019082821181831017156200033c576200033c620002cc565b816040528381526020925086838588010111156200035957600080fd5b600091505b838210156200037d57858201830151818301840152908201906200035e565b838211156200038f5760008385830101525b9695505050505050565b600080600060608486031215620003af57600080fd5b83516001600160401b0380821115620003c757600080fd5b620003d587838801620002e2565b94506020860151915080821115620003ec57600080fd5b50620003fb86828701620002e2565b925050604084015190509250925092565b600082198211156200042e57634e487b7160e01b600052601160045260246000fd5b500190565b600181811c908216806200044857607f821691505b602082108114156200046a57634e487b7160e01b600052602260045260246000fd5b50919050565b6110cb80620004806000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c8063715018a611610097578063a9059cbb11610066578063a9059cbb14610223578063dd62ed3e14610236578063ddca3f431461027c578063f2fde38b1461028557600080fd5b8063715018a6146101d85780638da5cb5b146101e057806395d89b4114610208578063a457c2d71461021057600080fd5b8063313ce567116100d3578063313ce5671461016b578063395093511461017a57806340c10f191461018d57806370a08231146101a257600080fd5b806306fdde0314610105578063095ea7b31461012357806318160ddd1461014657806323b872dd14610158575b600080fd5b61010d610298565b60405161011a9190610e14565b60405180910390f35b610136610131366004610eb0565b61032a565b604051901515815260200161011a565b6002545b60405190815260200161011a565b610136610166366004610eda565b610340565b6040516012815260200161011a565b610136610188366004610eb0565b61037d565b6101a061019b366004610eb0565b6103c6565b005b61014a6101b0366004610f16565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101a061045a565b60055460405173ffffffffffffffffffffffffffffffffffffffff909116815260200161011a565b61010d6104e7565b61013661021e366004610eb0565b6104f6565b610136610231366004610eb0565b6105ce565b61014a610244366004610f38565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b61014a60065481565b6101a0610293366004610f16565b610600565b6060600380546102a790610f6b565b80601f01602080910402602001604051908101604052809291908181526020018280546102d390610f6b565b80156103205780601f106102f557610100808354040283529160200191610320565b820191906000526020600020905b81548152906001019060200180831161030357829003601f168201915b5050505050905090565b6000610337338484610730565b50600192915050565b600654600090612710906103549082610fee565b61035e9084611005565b6103689190611042565b91506103758484846108e3565b949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916103379185906103c190869061107d565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16331461044c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b61045682826109c9565b5050565b60055473ffffffffffffffffffffffffffffffffffffffff1633146104db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610443565b6104e56000610ae9565b565b6060600480546102a790610f6b565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156105b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610443565b6105c43385858403610730565b5060019392505050565b6000610337336006548590612710906105e79082610fee565b6105f19087611005565b6105fb9190611042565b610b60565b60055473ffffffffffffffffffffffffffffffffffffffff163314610681576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610443565b73ffffffffffffffffffffffffffffffffffffffff8116610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610443565b61072d81610ae9565b50565b73ffffffffffffffffffffffffffffffffffffffff83166107d2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610443565b73ffffffffffffffffffffffffffffffffffffffff8216610875576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610443565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006108f0848484610b60565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600160209081526040808320338452909152902054828110156109b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e63650000000000000000000000000000000000000000000000006064820152608401610443565b6109be8533858403610730565b506001949350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610a46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610443565b8060026000828254610a58919061107d565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610a9290849061107d565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8316610c03576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610443565b73ffffffffffffffffffffffffffffffffffffffff8216610ca6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610443565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d5c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610443565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610da090849061107d565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e0691815260200190565b60405180910390a350505050565b600060208083528351808285015260005b81811015610e4157858101830151858201604001528201610e25565b81811115610e53576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610eab57600080fd5b919050565b60008060408385031215610ec357600080fd5b610ecc83610e87565b946020939093013593505050565b600080600060608486031215610eef57600080fd5b610ef884610e87565b9250610f0660208501610e87565b9150604084013590509250925092565b600060208284031215610f2857600080fd5b610f3182610e87565b9392505050565b60008060408385031215610f4b57600080fd5b610f5483610e87565b9150610f6260208401610e87565b90509250929050565b600181811c90821680610f7f57607f821691505b60208210811415610fb9577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561100057611000610fbf565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561103d5761103d610fbf565b500290565b600082611078577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000821982111561109057611090610fbf565b50019056fea2646970667358221220db6b94d1b259b54d135203fb352c6115455fca2230a43e5c45f6c1d7dd32ce9864736f6c634300080a0033"; - -type TokenFeeMockConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: TokenFeeMockConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class TokenFeeMock__factory extends ContractFactory { - constructor(...args: TokenFeeMockConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - name_: string, - symbol_: string, - fee_: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - name_, - symbol_, - fee_, - overrides || {} - ) as Promise; - } - override getDeployTransaction( - name_: string, - symbol_: string, - fee_: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(name_, symbol_, fee_, overrides || {}); - } - override attach(address: string): TokenFeeMock { - return super.attach(address) as TokenFeeMock; - } - override connect(signer: Signer): TokenFeeMock__factory { - return super.connect(signer) as TokenFeeMock__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): TokenFeeMockInterface { - return new utils.Interface(_abi) as TokenFeeMockInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): TokenFeeMock { - return new Contract(address, _abi, signerOrProvider) as TokenFeeMock; - } -} diff --git a/src/types/factories/contracts/test/mocks/token/ERC20Fee.sol/index.ts b/src/types/factories/contracts/test/mocks/token/ERC20Fee.sol/index.ts deleted file mode 100644 index c3bcbf93..00000000 --- a/src/types/factories/contracts/test/mocks/token/ERC20Fee.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { TokenFeeMock__factory } from "./TokenFeeMock__factory"; diff --git a/src/types/factories/contracts/test/mocks/token/ERC20Mock__factory.ts b/src/types/factories/contracts/test/mocks/token/ERC20Mock__factory.ts deleted file mode 100644 index 72aa22bd..00000000 --- a/src/types/factories/contracts/test/mocks/token/ERC20Mock__factory.ts +++ /dev/null @@ -1,526 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { - Signer, - utils, - Contract, - ContractFactory, - BigNumberish, - Overrides, -} from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - ERC20Mock, - ERC20MockInterface, -} from "../../../../../contracts/test/mocks/token/ERC20Mock"; - -const _abi = [ - { - inputs: [ - { - internalType: "string", - name: "name_", - type: "string", - }, - { - internalType: "string", - name: "symbol_", - type: "string", - }, - { - internalType: "uint8", - name: "decimals_", - type: "uint8", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "spender", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "Approval", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "previousOwner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "OwnershipTransferred", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "Transfer", - type: "event", - }, - { - inputs: [ - { - internalType: "address", - name: "owner", - type: "address", - }, - { - internalType: "address", - name: "spender", - type: "address", - }, - ], - name: "allowance", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "approve", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "burn", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "burnFrom", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "decimals", - outputs: [ - { - internalType: "uint8", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "subtractedValue", - type: "uint256", - }, - ], - name: "decreaseAllowance", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "addedValue", - type: "uint256", - }, - ], - name: "increaseAllowance", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "mint", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "minter", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "owner", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "renounceOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_minter", - type: "address", - }, - ], - name: "set_minter", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "symbol", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "totalSupply", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "recipient", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "transfer", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "sender", - type: "address", - }, - { - internalType: "address", - name: "recipient", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "transferFrom", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "transferOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, -]; - -const _bytecode = - "0x60a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a0033"; - -type ERC20MockConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: ERC20MockConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class ERC20Mock__factory extends ContractFactory { - constructor(...args: ERC20MockConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - name_: string, - symbol_: string, - decimals_: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - name_, - symbol_, - decimals_, - overrides || {} - ) as Promise; - } - override getDeployTransaction( - name_: string, - symbol_: string, - decimals_: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction( - name_, - symbol_, - decimals_, - overrides || {} - ); - } - override attach(address: string): ERC20Mock { - return super.attach(address) as ERC20Mock; - } - override connect(signer: Signer): ERC20Mock__factory { - return super.connect(signer) as ERC20Mock__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): ERC20MockInterface { - return new utils.Interface(_abi) as ERC20MockInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): ERC20Mock { - return new Contract(address, _abi, signerOrProvider) as ERC20Mock; - } -} diff --git a/src/types/factories/contracts/test/mocks/token/ERC20NonCompliant.sol/NonCompliantERC20__factory.ts b/src/types/factories/contracts/test/mocks/token/ERC20NonCompliant.sol/NonCompliantERC20__factory.ts deleted file mode 100644 index f7a24f3d..00000000 --- a/src/types/factories/contracts/test/mocks/token/ERC20NonCompliant.sol/NonCompliantERC20__factory.ts +++ /dev/null @@ -1,86 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - NonCompliantERC20, - NonCompliantERC20Interface, -} from "../../../../../../contracts/test/mocks/token/ERC20NonCompliant.sol/NonCompliantERC20"; - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "approve", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "pure", - type: "function", - }, -]; - -const _bytecode = - "0x608060405234801561001057600080fd5b5060cd8061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063095ea7b314602d575b600080fd5b604060383660046054565b600092915050565b604051901515815260200160405180910390f35b60008060408385031215606657600080fd5b823573ffffffffffffffffffffffffffffffffffffffff81168114608957600080fd5b94602093909301359350505056fea2646970667358221220efc54dde003b323b5557889b52b8139bf30ed15a931ae5c4bd867527348a59bc64736f6c634300080a0033"; - -type NonCompliantERC20ConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: NonCompliantERC20ConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class NonCompliantERC20__factory extends ContractFactory { - constructor(...args: NonCompliantERC20ConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): NonCompliantERC20 { - return super.attach(address) as NonCompliantERC20; - } - override connect(signer: Signer): NonCompliantERC20__factory { - return super.connect(signer) as NonCompliantERC20__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): NonCompliantERC20Interface { - return new utils.Interface(_abi) as NonCompliantERC20Interface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): NonCompliantERC20 { - return new Contract(address, _abi, signerOrProvider) as NonCompliantERC20; - } -} diff --git a/src/types/factories/contracts/test/mocks/token/ERC20NonCompliant.sol/index.ts b/src/types/factories/contracts/test/mocks/token/ERC20NonCompliant.sol/index.ts deleted file mode 100644 index 8b9ed57a..00000000 --- a/src/types/factories/contracts/test/mocks/token/ERC20NonCompliant.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { NonCompliantERC20__factory } from "./NonCompliantERC20__factory"; diff --git a/src/types/factories/contracts/test/mocks/token/ERC721ReceiverMock.sol/ERC721ReceiverMock__factory.ts b/src/types/factories/contracts/test/mocks/token/ERC721ReceiverMock.sol/ERC721ReceiverMock__factory.ts deleted file mode 100644 index 76c819c0..00000000 --- a/src/types/factories/contracts/test/mocks/token/ERC721ReceiverMock.sol/ERC721ReceiverMock__factory.ts +++ /dev/null @@ -1,96 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - ERC721ReceiverMock, - ERC721ReceiverMockInterface, -} from "../../../../../../contracts/test/mocks/token/ERC721ReceiverMock.sol/ERC721ReceiverMock"; - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "onERC721Received", - outputs: [ - { - internalType: "bytes4", - name: "", - type: "bytes4", - }, - ], - stateMutability: "pure", - type: "function", - }, -]; - -const _bytecode = - "0x608060405234801561001057600080fd5b50610197806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063150b7a0214610030575b600080fd5b61006861003e3660046100c6565b7f150b7a020000000000000000000000000000000000000000000000000000000095945050505050565b6040517fffffffff00000000000000000000000000000000000000000000000000000000909116815260200160405180910390f35b803573ffffffffffffffffffffffffffffffffffffffff811681146100c157600080fd5b919050565b6000806000806000608086880312156100de57600080fd5b6100e78661009d565b94506100f56020870161009d565b935060408601359250606086013567ffffffffffffffff8082111561011957600080fd5b818801915088601f83011261012d57600080fd5b81358181111561013c57600080fd5b89602082850101111561014e57600080fd5b969995985093965060200194939250505056fea26469706673582212201040629f4a59bc5ad67311394a0e2bf0488c3b7fe2dba70c87d5f74b7c1098ad64736f6c634300080a0033"; - -type ERC721ReceiverMockConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: ERC721ReceiverMockConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class ERC721ReceiverMock__factory extends ContractFactory { - constructor(...args: ERC721ReceiverMockConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): ERC721ReceiverMock { - return super.attach(address) as ERC721ReceiverMock; - } - override connect(signer: Signer): ERC721ReceiverMock__factory { - return super.connect(signer) as ERC721ReceiverMock__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): ERC721ReceiverMockInterface { - return new utils.Interface(_abi) as ERC721ReceiverMockInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): ERC721ReceiverMock { - return new Contract(address, _abi, signerOrProvider) as ERC721ReceiverMock; - } -} diff --git a/src/types/factories/contracts/test/mocks/token/ERC721ReceiverMock.sol/index.ts b/src/types/factories/contracts/test/mocks/token/ERC721ReceiverMock.sol/index.ts index 437462eb..aaceed63 100644 --- a/src/types/factories/contracts/test/mocks/token/ERC721ReceiverMock.sol/index.ts +++ b/src/types/factories/contracts/test/mocks/token/ERC721ReceiverMock.sol/index.ts @@ -1,5 +1,4 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ -export { ERC721ReceiverMock__factory } from "./ERC721ReceiverMock__factory"; export { IERC721Receiver__factory } from "./IERC721Receiver__factory"; diff --git a/src/types/factories/contracts/test/mocks/token/StETHMock__factory.ts b/src/types/factories/contracts/test/mocks/token/StETHMock__factory.ts deleted file mode 100644 index 9bf6d88f..00000000 --- a/src/types/factories/contracts/test/mocks/token/StETHMock__factory.ts +++ /dev/null @@ -1,441 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - StETHMock, - StETHMockInterface, -} from "../../../../../contracts/test/mocks/token/StETHMock"; - -const _abi = [ - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "spender", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "Approval", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "Transfer", - type: "event", - }, - { - inputs: [ - { - internalType: "address", - name: "_owner", - type: "address", - }, - { - internalType: "address", - name: "_spender", - type: "address", - }, - ], - name: "allowance", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_spender", - type: "address", - }, - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "approve", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "decimals", - outputs: [ - { - internalType: "uint8", - name: "", - type: "uint8", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_spender", - type: "address", - }, - { - internalType: "uint256", - name: "_subtractedValue", - type: "uint256", - }, - ], - name: "decreaseAllowance", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_sharesAmount", - type: "uint256", - }, - ], - name: "getPooledEthByShares", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_ethAmount", - type: "uint256", - }, - ], - name: "getSharesByPooledEth", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "getTotalPooledEther", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "getTotalShares", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_spender", - type: "address", - }, - { - internalType: "uint256", - name: "_addedValue", - type: "uint256", - }, - ], - name: "increaseAllowance", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - ], - name: "sharesOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "symbol", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "totalPooledEtherSynced", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "totalSharesSynced", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "totalSupply", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_recipient", - type: "address", - }, - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "transfer", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_sender", - type: "address", - }, - { - internalType: "address", - name: "_recipient", - type: "address", - }, - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "transferFrom", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, -]; - -const _bytecode = - "0x60806040526000600255600060035534801561001a57600080fd5b50610c818061002a6000396000f3fe608060405234801561001057600080fd5b50600436106101365760003560e01c80637a28fb88116100b2578063bdd17e1c11610081578063d5002f2e11610066578063d5002f2e1461029e578063dd62ed3e146102a6578063f5eb42dc146102ec57600080fd5b8063bdd17e1c1461028c578063cdb9a21c1461029557600080fd5b80637a28fb881461021a57806395d89b411461022d578063a457c2d714610266578063a9059cbb1461027957600080fd5b806323b872dd1161010957806337cfdaca116100ee57806337cfdaca146101a957806339509351146101f457806370a082311461020757600080fd5b806323b872dd146101d2578063313ce567146101e557600080fd5b806306fdde031461013b578063095ea7b31461018657806318160ddd146101a957806319208451146101bf575b600080fd5b60408051808201909152601781527f4c6971756964207374616b656420457468657220322e3000000000000000000060208201525b60405161017d9190610a0c565b60405180910390f35b610199610194366004610aa8565b6102ff565b604051901515815260200161017d565b6101b1610315565b60405190815260200161017d565b6101b16101cd366004610ad2565b610325565b6101996101e0366004610aeb565b610365565b6040516012815260200161017d565b610199610202366004610aa8565b610455565b6101b1610215366004610b27565b610498565b6101b1610228366004610ad2565b6104cd565b60408051808201909152600581527f73744554480000000000000000000000000000000000000000000000000000006020820152610170565b610199610274366004610aa8565b6104f9565b610199610287366004610aa8565b6105ad565b6101b160035481565b6101b160025481565b6101b16105ba565b6101b16102b4366004610b42565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101b16102fa366004610b27565b6105c5565b600061030c3384846105f0565b50600192915050565b600061032060035490565b905090565b60008061033160035490565b9050806103415750600092915050565b61035e8161035861035160025490565b8690610758565b90610764565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001602090815260408083203384529091528120548281101561042b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f5452414e534645525f414d4f554e545f455843454544535f414c4c4f57414e4360448201527f450000000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b610436858585610770565b61044a853361044584876107f5565b6105f0565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161030c9185906104459086610801565b73ffffffffffffffffffffffffffffffffffffffff81166000908152602081905260408120546104c7906104cd565b92915050565b6000806104d960025490565b9050806104e95750600092915050565b61035e8161035861035160035490565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915281205482811015610594576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4445435245415345445f414c4c4f57414e43455f42454c4f575f5a45524f00006044820152606401610422565b6105a3338561044584876107f5565b5060019392505050565b600061030c338484610770565b600061032060025490565b73ffffffffffffffffffffffffffffffffffffffff81166000908152602081905260408120546104c7565b73ffffffffffffffffffffffffffffffffffffffff831661066d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f415050524f56455f46524f4d5f5a45524f5f41444452455353000000000000006044820152606401610422565b73ffffffffffffffffffffffffffffffffffffffff82166106ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f415050524f56455f544f5f5a45524f5f414444524553530000000000000000006044820152606401610422565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600061035e8284610ba4565b600061035e8284610be1565b600061077b82610325565b905061078884848361080d565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516107e791815260200190565b60405180910390a350505050565b600061035e8284610c1c565b600061035e8284610c33565b73ffffffffffffffffffffffffffffffffffffffff831661088a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f5452414e534645525f46524f4d5f5448455f5a45524f5f4144445245535300006044820152606401610422565b73ffffffffffffffffffffffffffffffffffffffff8216610907576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f5452414e534645525f544f5f5448455f5a45524f5f41444452455353000000006044820152606401610422565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205480821115610997576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5452414e534645525f414d4f554e545f455843454544535f42414c414e4345006044820152606401610422565b6109a181836107f5565b73ffffffffffffffffffffffffffffffffffffffff80861660009081526020819052604080822093909355908516815220546109dd9083610801565b73ffffffffffffffffffffffffffffffffffffffff909316600090815260208190526040902092909255505050565b600060208083528351808285015260005b81811015610a3957858101830151858201604001528201610a1d565b81811115610a4b576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610aa357600080fd5b919050565b60008060408385031215610abb57600080fd5b610ac483610a7f565b946020939093013593505050565b600060208284031215610ae457600080fd5b5035919050565b600080600060608486031215610b0057600080fd5b610b0984610a7f565b9250610b1760208501610a7f565b9150604084013590509250925092565b600060208284031215610b3957600080fd5b61035e82610a7f565b60008060408385031215610b5557600080fd5b610b5e83610a7f565b9150610b6c60208401610a7f565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610bdc57610bdc610b75565b500290565b600082610c17577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600082821015610c2e57610c2e610b75565b500390565b60008219821115610c4657610c46610b75565b50019056fea26469706673582212202b9be39340b19fe992a0de0f9a6f84ef193f8c9c929b42d356f542ae700eb7d064736f6c634300080a0033"; - -type StETHMockConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: StETHMockConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class StETHMock__factory extends ContractFactory { - constructor(...args: StETHMockConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): StETHMock { - return super.attach(address) as StETHMock; - } - override connect(signer: Signer): StETHMock__factory { - return super.connect(signer) as StETHMock__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): StETHMockInterface { - return new utils.Interface(_abi) as StETHMockInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): StETHMock { - return new Contract(address, _abi, signerOrProvider) as StETHMock; - } -} diff --git a/src/types/factories/contracts/test/mocks/token/WETHMock__factory.ts b/src/types/factories/contracts/test/mocks/token/WETHMock__factory.ts deleted file mode 100644 index e19f6086..00000000 --- a/src/types/factories/contracts/test/mocks/token/WETHMock__factory.ts +++ /dev/null @@ -1,364 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - WETHMock, - WETHMockInterface, -} from "../../../../../contracts/test/mocks/token/WETHMock"; - -const _abi = [ - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "spender", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "Approval", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "dst", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "wad", - type: "uint256", - }, - ], - name: "Deposit", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "Transfer", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "src", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "wad", - type: "uint256", - }, - ], - name: "Withdrawal", - type: "event", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "allowance", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "guy", - type: "address", - }, - { - internalType: "uint256", - name: "wad", - type: "uint256", - }, - ], - name: "approve", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "decimals", - outputs: [ - { - internalType: "uint8", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "deposit", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "mint", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "symbol", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "totalSupply", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "dst", - type: "address", - }, - { - internalType: "uint256", - name: "wad", - type: "uint256", - }, - ], - name: "transfer", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "src", - type: "address", - }, - { - internalType: "address", - name: "dst", - type: "address", - }, - { - internalType: "uint256", - name: "wad", - type: "uint256", - }, - ], - name: "transferFrom", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "wad", - type: "uint256", - }, - ], - name: "withdraw", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - stateMutability: "payable", - type: "receive", - }, -]; - -const _bytecode = - "0x60c0604052600d60808190526c2bb930b83832b21022ba3432b960991b60a090815261002e916000919061007a565b50604080518082019091526004808252630ae8aa8960e31b602090920191825261005a9160019161007a565b506002805460ff1916601217905534801561007457600080fd5b5061014e565b82805461008690610113565b90600052602060002090601f0160209004810192826100a857600085556100ee565b82601f106100c157805160ff19168380011785556100ee565b828001600101855582156100ee579182015b828111156100ee5782518255916020019190600101906100d3565b506100fa9291506100fe565b5090565b5b808211156100fa57600081556001016100ff565b600181811c9082168061012757607f821691505b6020821081141561014857634e487b7160e01b600052602260045260246000fd5b50919050565b6109548061015d6000396000f3fe6080604052600436106100cb5760003560e01c806340c10f1911610074578063a9059cbb1161004e578063a9059cbb14610225578063d0e30db014610245578063dd62ed3e1461024d57600080fd5b806340c10f19146101c357806370a08231146101e357806395d89b411461021057600080fd5b806323b872dd116100a557806323b872dd146101575780632e1a7d4d14610177578063313ce5671461019757600080fd5b806306fdde03146100df578063095ea7b31461010a57806318160ddd1461013a57600080fd5b366100da576100d8610285565b005b600080fd5b3480156100eb57600080fd5b506100f46102e0565b6040516101019190610703565b60405180910390f35b34801561011657600080fd5b5061012a61012536600461079f565b61036e565b6040519015158152602001610101565b34801561014657600080fd5b50475b604051908152602001610101565b34801561016357600080fd5b5061012a6101723660046107c9565b6103e7565b34801561018357600080fd5b506100d8610192366004610805565b6105fe565b3480156101a357600080fd5b506002546101b19060ff1681565b60405160ff9091168152602001610101565b3480156101cf57600080fd5b506100d86101de36600461079f565b6106a4565b3480156101ef57600080fd5b506101496101fe36600461081e565b60036020526000908152604090205481565b34801561021c57600080fd5b506100f46106e2565b34801561023157600080fd5b5061012a61024036600461079f565b6106ef565b6100d8610285565b34801561025957600080fd5b50610149610268366004610839565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102a490849061089b565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102ed906108b3565b80601f0160208091040260200160405190810160405280929190818152602001828054610319906108b3565b80156103665780601f1061033b57610100808354040283529160200191610366565b820191906000526020600020905b81548152906001019060200180831161034957829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103d69086815260200190565b60405180910390a350600192915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561041957600080fd5b73ffffffffffffffffffffffffffffffffffffffff8416331480159061048f575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105175773ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020548211156104d157600080fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915281208054849290610511908490610907565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061054c908490610907565b909155505073ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260408120805484929061058690849061089b565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516105ec91815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561061a57600080fd5b3360009081526003602052604081208054839290610639908490610907565b9091555050604051339082156108fc029083906000818181858888f1935050505015801561066b573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260036020526040812080548392906106d990849061089b565b90915550505050565b600180546102ed906108b3565b60006106fc3384846103e7565b9392505050565b600060208083528351808285015260005b8181101561073057858101830151858201604001528201610714565b81811115610742576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461079a57600080fd5b919050565b600080604083850312156107b257600080fd5b6107bb83610776565b946020939093013593505050565b6000806000606084860312156107de57600080fd5b6107e784610776565b92506107f560208501610776565b9150604084013590509250925092565b60006020828403121561081757600080fd5b5035919050565b60006020828403121561083057600080fd5b6106fc82610776565b6000806040838503121561084c57600080fd5b61085583610776565b915061086360208401610776565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156108ae576108ae61086c565b500190565b600181811c908216806108c757607f821691505b60208210811415610901577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000828210156109195761091961086c565b50039056fea26469706673582212206ec943fa4e3b70d8fca6c25b6aa26fa18e8f8952ce3bc4d5afcb443bf3097c0564736f6c634300080a0033"; - -type WETHMockConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: WETHMockConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class WETHMock__factory extends ContractFactory { - constructor(...args: WETHMockConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): WETHMock { - return super.attach(address) as WETHMock; - } - override connect(signer: Signer): WETHMock__factory { - return super.connect(signer) as WETHMock__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): WETHMockInterface { - return new utils.Interface(_abi) as WETHMockInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): WETHMock { - return new Contract(address, _abi, signerOrProvider) as WETHMock; - } -} diff --git a/src/types/factories/contracts/test/mocks/token/index.ts b/src/types/factories/contracts/test/mocks/token/index.ts index c175537e..55fc1e14 100644 --- a/src/types/factories/contracts/test/mocks/token/index.ts +++ b/src/types/factories/contracts/test/mocks/token/index.ts @@ -1,12 +1,4 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ -export * as erc20ApproveRestrictedSol from "./ERC20ApproveRestricted.sol"; -export * as erc20BlockingSol from "./ERC20Blocking.sol"; -export * as erc20FeeSol from "./ERC20Fee.sol"; -export * as erc20NonCompliantSol from "./ERC20NonCompliant.sol"; export * as erc721ReceiverMockSol from "./ERC721ReceiverMock.sol"; -export { ERC20Mock__factory } from "./ERC20Mock__factory"; -export { StETHMock__factory } from "./StETHMock__factory"; -export { WETHMock__factory } from "./WETHMock__factory"; -export { CERC20Mock__factory } from "./CERC20Mock__factory"; diff --git a/src/types/factories/contracts/test/oracles/CurveLPPriceFeed.t.sol/CurveLPPriceFeedTest__factory.ts b/src/types/factories/contracts/test/oracles/CurveLPPriceFeed.t.sol/CurveLPPriceFeedTest__factory.ts deleted file mode 100644 index 7cbfcf8b..00000000 --- a/src/types/factories/contracts/test/oracles/CurveLPPriceFeed.t.sol/CurveLPPriceFeedTest__factory.ts +++ /dev/null @@ -1,543 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - CurveLPPriceFeedTest, - CurveLPPriceFeedTestInterface, -} from "../../../../../contracts/test/oracles/CurveLPPriceFeed.t.sol/CurveLPPriceFeedTest"; - -const _abi = [ - { - inputs: [], - name: "IncorrectLimitsException", - type: "error", - }, - { - inputs: [], - name: "ValueOutOfRangeExpcetion", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "", - type: "address", - }, - ], - name: "log_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "log_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - name: "log_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "int256", - name: "", - type: "int256", - }, - ], - name: "log_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "address", - name: "val", - type: "address", - }, - ], - name: "log_named_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes", - name: "val", - type: "bytes", - }, - ], - name: "log_named_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes32", - name: "val", - type: "bytes32", - }, - ], - name: "log_named_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - ], - name: "log_named_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "string", - name: "val", - type: "string", - }, - ], - name: "log_named_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - ], - name: "log_named_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "log_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "logs", - type: "event", - }, - { - inputs: [], - name: "IS_TEST", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "addressProvider", - outputs: [ - { - internalType: "contract AddressProviderACLMock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "c2feed", - outputs: [ - { - internalType: "contract CurveLP2PriceFeed", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "c3feed", - outputs: [ - { - internalType: "contract CurveLP3PriceFeed", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "c4feed", - outputs: [ - { - internalType: "contract CurveLP4PriceFeed", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "curveV1Mock", - outputs: [ - { - internalType: "contract CurveV1Mock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "failed", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "pfm1", - outputs: [ - { - internalType: "contract PriceFeedMock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "pfm2", - outputs: [ - { - internalType: "contract PriceFeedMock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "pfm3", - outputs: [ - { - internalType: "contract PriceFeedMock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "pfm4", - outputs: [ - { - internalType: "contract PriceFeedMock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "setUp", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_OCLP_01_constructor_sets_correct_values", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_OCLP_02_constructor_reverts_for_zero_addresses", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_OCLP_03_constructor_reverts_at_getRoundData_call", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_OCLP_04_latestRoundData_works_correctly_for_2_assets_CurveLPPriceFeed", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_OCLP_05_latestRoundData_works_correctly_for_3_assets_CurveLPPriceFeed", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_OCLP_06_latestRoundData_works_correctly_for_4_assets_CurveLPPriceFeed", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_OCLP_07_latestRoundData_reverts_for_out_of_bounds_prices", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, -]; - -const _bytecode = - "0x60806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d000117905534801561003957600080fd5b506201665a806200004b6000396000f3fe60806040523480156200001157600080fd5b50600436106200016c5760003560e01c806340cef91b11620000dd578063bae95c6d116200008b578063dbd232ba116200006e578063dbd232ba1462000306578063de89c0e81462000327578063fa7626d4146200033157600080fd5b8063bae95c6d14620002db578063c32ac9e014620002fc57600080fd5b80638b26d31b11620000c05780638b26d31b146200027e5780638e19e983146200029f578063ba414fa614620002c057600080fd5b806340cef91b146200025357806364a47f1b146200027457600080fd5b80632954018c116200013b57806331762e20116200011e57806331762e20146200023557806331c956fe146200023f578063403f7943146200024957600080fd5b80632954018c14620001f357806329d351d8146200021457600080fd5b80630a9254e414620001715780630ea03a63146200017d5780631813aa9714620001c85780632641f48614620001d2575b600080fd5b6200017b6200033f565b005b6008546200019e9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6200017b62000ce7565b6003546200019e9073ffffffffffffffffffffffffffffffffffffffff1681565b6001546200019e9073ffffffffffffffffffffffffffffffffffffffff1681565b6002546200019e9073ffffffffffffffffffffffffffffffffffffffff1681565b6200017b620014c9565b6200017b62001ca5565b6200017b62002480565b6007546200019e9073ffffffffffffffffffffffffffffffffffffffff1681565b6200017b62002fa2565b6005546200019e9073ffffffffffffffffffffffffffffffffffffffff1681565b6004546200019e9073ffffffffffffffffffffffffffffffffffffffff1681565b620002ca6200433f565b6040519015158152602001620001bf565b6006546200019e9073ffffffffffffffffffffffffffffffffffffffff1681565b6200017b620044a9565b6009546200019e9073ffffffffffffffffffffffffffffffffffffffff1681565b6200017b62005600565b600054620002ca9060ff1681565b6040516200034d9062006196565b604051809103906000f0801580156200036a573d6000803e3d6000fd5b50600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061044c6008604051620003be90620061a4565b91825260ff166020820152604001604051809103906000f080158015620003e9573d6000803e3d6000fd5b50600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061089860086040516200043d90620061a4565b91825260ff166020820152604001604051809103906000f08015801562000468573d6000803e3d6000fd5b50600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610ce46008604051620004bc90620061a4565b91825260ff166020820152604001604051809103906000f080158015620004e7573d6000803e3d6000fd5b50600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061113060086040516200053b90620061a4565b91825260ff166020820152604001604051809103906000f08015801562000566573d6000803e3d6000fd5b50600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283161790556003546040517fcd653afc000000000000000000000000000000000000000000000000000000008152600b6004820181905261045760248301526104586044830152606482015291169063cd653afc90608401600060405180830381600087803b1580156200061657600080fd5b505af11580156200062b573d6000803e3d6000fd5b5050600480546040517fcd653afc00000000000000000000000000000000000000000000000000000000815260169281018390526108ae60248201526108af6044820152606481019290925273ffffffffffffffffffffffffffffffffffffffff16925063cd653afc9150608401600060405180830381600087803b158015620006b457600080fd5b505af1158015620006c9573d6000803e3d6000fd5b50506005546040517fcd653afc000000000000000000000000000000000000000000000000000000008152602160048201819052610d056024830152610d066044830152606482015273ffffffffffffffffffffffffffffffffffffffff909116925063cd653afc9150608401600060405180830381600087803b1580156200075157600080fd5b505af115801562000766573d6000803e3d6000fd5b50506006546040517fcd653afc000000000000000000000000000000000000000000000000000000008152602c6004820181905261115c602483015261115d6044830152606482015273ffffffffffffffffffffffffffffffffffffffff909116925063cd653afc9150608401600060405180830381600087803b158015620007ee57600080fd5b505af115801562000803573d6000803e3d6000fd5b5050505060606040516200081790620061b2565b604051809103906000f08015801562000834573d6000803e3d6000fd5b50600a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216918217905563b36ba20862000893670de0b6b3a76400006064620061f8565b6040518263ffffffff1660e01b81526004016000604051808303818588803b158015620008bf57600080fd5b505af1158015620008d4573d6000803e3d6000fd5b50505050508081604051620008e990620061c0565b620008f6929190620062b0565b604051809103906000f08015801562000913573d6000803e3d6000fd5b50600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691821790556040517f71035418000000000000000000000000000000000000000000000000000000008152670de0b6b3a76400006004820152637103541890602401600060405180830381600087803b158015620009b057600080fd5b505af1158015620009c5573d6000803e3d6000fd5b505060015460025460035460045460405173ffffffffffffffffffffffffffffffffffffffff9485169650928416945090831692169062000a0690620061ce565b73ffffffffffffffffffffffffffffffffffffffff948516815292841660208401529083166040830152909116606082015260a0608082018190526003908201527f4c5032000000000000000000000000000000000000000000000000000000000060c082015260e001604051809103906000f08015801562000a8d573d6000803e3d6000fd5b50600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283161790556001546002546003546004546005546040519486169593841694928416939182169291169062000aff90620061dc565b73ffffffffffffffffffffffffffffffffffffffff95861681529385166020850152918416604084015283166060830152909116608082015260c060a082018190526003908201527f4c5033000000000000000000000000000000000000000000000000000000000060e082015261010001604051809103906000f08015801562000b8e573d6000803e3d6000fd5b50600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283161790556001546002546003546004546005546006546040519587169694851695938516949283169391831692169062000c0690620061ea565b73ffffffffffffffffffffffffffffffffffffffff96871681529486166020860152928516604085015290841660608401528316608083015290911660a082015260e060c082018190526003908201527f4c5034000000000000000000000000000000000000000000000000000000000061010082015261012001604051809103906000f08015801562000c9e573d6000803e3d6000fd5b50600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b60025473ffffffffffffffffffffffffffffffffffffffff16637103541861271062000d1e670de0b6b3a7640000612742620061f8565b62000d2a9190620062e2565b6040518263ffffffff1660e01b815260040162000d4991815260200190565b600060405180830381600087803b15801562000d6457600080fd5b505af115801562000d79573d6000803e3d6000fd5b505050506000806000806000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa15801562000df3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e19919062006339565b9450945094509450945062000e728569ffffffffffffffffffff16600b6040518060400160405280601581526020017f496e636f727265637420726f756e642049642023310000000000000000000000815250620059cc565b62000eb6846104516040518060400160405280601381526020017f496e636f727265637420616e737765722023310000000000000000000000000081525062005a1e565b62000efa836104576040518060400160405280601681526020017f496e636f72726563742073746172746564417420233100000000000000000000815250620059cc565b62000f3e826104586040518060400160405280601681526020017f496e636f72726563742075706461746564417420233100000000000000000000815250620059cc565b62000f8d8169ffffffffffffffffffff16600b6040518060400160405280601c81526020017f496e636f727265637420616e737765726564496e526f756e6420233100000000815250620059cc565b6005546040517ff7a308060000000000000000000000000000000000000000000000000000000081526103e8600482015273ffffffffffffffffffffffffffffffffffffffff9091169063f7a3080690602401600060405180830381600087803b15801562000ffb57600080fd5b505af115801562001010573d6000803e3d6000fd5b50505050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa15801562001082573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010a8919062006339565b60408051808201909152601581527f496e636f727265637420726f756e642049642023320000000000000000000000602082015294995092975090955093509150620011059069ffffffffffffffffffff871690602190620059cc565b62001149846103ed6040518060400160405280601381526020017f496e636f727265637420616e737765722023320000000000000000000000000081525062005a1e565b6200118d83610d056040518060400160405280601681526020017f496e636f72726563742073746172746564417420233200000000000000000000815250620059cc565b620011d182610d066040518060400160405280601681526020017f496e636f72726563742075706461746564417420233200000000000000000000815250620059cc565b620012208169ffffffffffffffffffff1660216040518060400160405280601c81526020017f496e636f727265637420616e737765726564496e526f756e6420233200000000815250620059cc565b60025473ffffffffffffffffffffffffffffffffffffffff16637103541861271062001257670de0b6b3a7640000612774620061f8565b620012639190620062e2565b6040518263ffffffff1660e01b81526004016200128291815260200190565b600060405180830381600087803b1580156200129d57600080fd5b505af1158015620012b2573d6000803e3d6000fd5b50505050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa15801562001324573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200134a919062006339565b60408051808201909152601581527f496e636f727265637420726f756e642049642023330000000000000000000000602082015294995092975090955093509150620013a79069ffffffffffffffffffff871690602190620059cc565b620013eb846103f26040518060400160405280601381526020017f496e636f727265637420616e737765722023330000000000000000000000000081525062005a1e565b6200142f83610d056040518060400160405280601681526020017f496e636f72726563742073746172746564417420233300000000000000000000815250620059cc565b6200147382610d066040518060400160405280601681526020017f496e636f72726563742075706461746564417420233300000000000000000000815250620059cc565b620014c28169ffffffffffffffffffff1660216040518060400160405280601c81526020017f496e636f727265637420616e737765726564496e526f756e6420233300000000815250620059cc565b5050505050565b60025473ffffffffffffffffffffffffffffffffffffffff16637103541861271062001500670de0b6b3a7640000612742620061f8565b6200150c9190620062e2565b6040518263ffffffff1660e01b81526004016200152b91815260200190565b600060405180830381600087803b1580156200154657600080fd5b505af11580156200155b573d6000803e3d6000fd5b505050506000806000806000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015620015d5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620015fb919062006339565b94509450945094509450620016548569ffffffffffffffffffff16600b6040518060400160405280601581526020017f496e636f727265637420726f756e642049642023310000000000000000000000815250620059cc565b62001698846104516040518060400160405280601381526020017f496e636f727265637420616e737765722023310000000000000000000000000081525062005a1e565b620016dc836104576040518060400160405280601681526020017f496e636f72726563742073746172746564417420233100000000000000000000815250620059cc565b62001720826104586040518060400160405280601681526020017f496e636f72726563742075706461746564417420233100000000000000000000815250620059cc565b6200176f8169ffffffffffffffffffff16600b6040518060400160405280601c81526020017f496e636f727265637420616e737765726564496e526f756e6420233100000000815250620059cc565b600480546040517ff7a308060000000000000000000000000000000000000000000000000000000081526103e89281019290925273ffffffffffffffffffffffffffffffffffffffff169063f7a3080690602401600060405180830381600087803b158015620017de57600080fd5b505af1158015620017f3573d6000803e3d6000fd5b50505050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa15801562001865573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200188b919062006339565b60408051808201909152601581527f496e636f727265637420726f756e642049642023320000000000000000000000602082015294995092975090955093509150620018e89069ffffffffffffffffffff871690601690620059cc565b6200192c846103ed6040518060400160405280601381526020017f496e636f727265637420616e737765722023320000000000000000000000000081525062005a1e565b62001970836108ae6040518060400160405280601681526020017f496e636f72726563742073746172746564417420233200000000000000000000815250620059cc565b620019b4826108af6040518060400160405280601681526020017f496e636f72726563742075706461746564417420233200000000000000000000815250620059cc565b62001a038169ffffffffffffffffffff1660166040518060400160405280601c81526020017f496e636f727265637420616e737765726564496e526f756e6420233200000000815250620059cc565b60025473ffffffffffffffffffffffffffffffffffffffff16637103541861271062001a3a670de0b6b3a7640000612774620061f8565b62001a469190620062e2565b6040518263ffffffff1660e01b815260040162001a6591815260200190565b600060405180830381600087803b15801562001a8057600080fd5b505af115801562001a95573d6000803e3d6000fd5b50505050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa15801562001b07573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001b2d919062006339565b60408051808201909152601581527f496e636f727265637420726f756e64204964202333000000000000000000000060208201529499509297509095509350915062001b8a9069ffffffffffffffffffff871690601690620059cc565b62001bce846103f26040518060400160405280601381526020017f496e636f727265637420616e737765722023330000000000000000000000000081525062005a1e565b62001c12836108ae6040518060400160405280601681526020017f496e636f72726563742073746172746564417420233300000000000000000000815250620059cc565b62001c56826108af6040518060400160405280601681526020017f496e636f72726563742075706461746564417420233300000000000000000000815250620059cc565b620014c28169ffffffffffffffffffff1660166040518060400160405280601c81526020017f496e636f727265637420616e737765726564496e526f756e6420233300000000815250620059cc565b60025473ffffffffffffffffffffffffffffffffffffffff16637103541861271062001cdc670de0b6b3a7640000612742620061f8565b62001ce89190620062e2565b6040518263ffffffff1660e01b815260040162001d0791815260200190565b600060405180830381600087803b15801562001d2257600080fd5b505af115801562001d37573d6000803e3d6000fd5b505050506000806000806000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa15801562001db1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001dd7919062006339565b9450945094509450945062001e308569ffffffffffffffffffff16600b6040518060400160405280601581526020017f496e636f727265637420726f756e642049642023310000000000000000000000815250620059cc565b62001e74846104516040518060400160405280601381526020017f496e636f727265637420616e737765722023310000000000000000000000000081525062005a1e565b62001eb8836104576040518060400160405280601681526020017f496e636f72726563742073746172746564417420233100000000000000000000815250620059cc565b62001efc826104586040518060400160405280601681526020017f496e636f72726563742075706461746564417420233100000000000000000000815250620059cc565b62001f4b8169ffffffffffffffffffff16600b6040518060400160405280601c81526020017f496e636f727265637420616e737765726564496e526f756e6420233100000000815250620059cc565b6006546040517ff7a308060000000000000000000000000000000000000000000000000000000081526103e8600482015273ffffffffffffffffffffffffffffffffffffffff9091169063f7a3080690602401600060405180830381600087803b15801562001fb957600080fd5b505af115801562001fce573d6000803e3d6000fd5b50505050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa15801562002040573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002066919062006339565b60408051808201909152601581527f496e636f727265637420726f756e642049642023320000000000000000000000602082015294995092975090955093509150620020c39069ffffffffffffffffffff871690602c90620059cc565b62002107846103ed6040518060400160405280601381526020017f496e636f727265637420616e737765722023320000000000000000000000000081525062005a1e565b6200214b8361115c6040518060400160405280601681526020017f496e636f72726563742073746172746564417420233200000000000000000000815250620059cc565b6200218f8261115d6040518060400160405280601681526020017f496e636f72726563742075706461746564417420233200000000000000000000815250620059cc565b620021de8169ffffffffffffffffffff16602c6040518060400160405280601c81526020017f496e636f727265637420616e737765726564496e526f756e6420233200000000815250620059cc565b60025473ffffffffffffffffffffffffffffffffffffffff16637103541861271062002215670de0b6b3a7640000612774620061f8565b620022219190620062e2565b6040518263ffffffff1660e01b81526004016200224091815260200190565b600060405180830381600087803b1580156200225b57600080fd5b505af115801562002270573d6000803e3d6000fd5b50505050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015620022e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002308919062006339565b60408051808201909152601581527f496e636f727265637420726f756e642049642023330000000000000000000000602082015294995092975090955093509150620023659069ffffffffffffffffffff871690602c90620059cc565b620023a9846103f26040518060400160405280601381526020017f496e636f727265637420616e737765722023330000000000000000000000000081525062005a1e565b620023ed8361115c6040518060400160405280601681526020017f496e636f72726563742073746172746564417420233300000000000000000000815250620059cc565b620024318261115d6040518060400160405280601681526020017f496e636f72726563742075706461746564417420233300000000000000000000815250620059cc565b620014c28169ffffffffffffffffffff16602c6040518060400160405280601c81526020017f496e636f727265637420616e737765726564496e526f756e6420233300000000815250620059cc565b60025473ffffffffffffffffffffffffffffffffffffffff166371035418612710620024b7670de0b6b3a7640000612328620061f8565b620024c39190620062e2565b6040518263ffffffff1660e01b8152600401620024e291815260200190565b600060405180830381600087803b158015620024fd57600080fd5b505af115801562002512573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb416da7f0000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b158015620025a757600080fd5b505af1158015620025bc573d6000803e3d6000fd5b50505050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156200262e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002654919062006339565b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb416da7f0000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16935063c31eb0e092506024019050600060405180830381600087803b158015620026eb57600080fd5b505af115801562002700573d6000803e3d6000fd5b50505050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa15801562002772573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002798919062006339565b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb416da7f0000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16935063c31eb0e092506024019050600060405180830381600087803b1580156200282f57600080fd5b505af115801562002844573d6000803e3d6000fd5b50505050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015620028b6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620028dc919062006339565b505060025473ffffffffffffffffffffffffffffffffffffffff1692506371035418915061271090506200291b670de0b6b3a7640000613a98620061f8565b620029279190620062e2565b6040518263ffffffff1660e01b81526004016200294691815260200190565b600060405180830381600087803b1580156200296157600080fd5b505af115801562002976573d6000803e3d6000fd5b505050506000806000806000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015620029f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002a16919062006339565b9450945094509450945062002a6f8569ffffffffffffffffffff16600b6040518060400160405280601581526020017f496e636f727265637420726f756e642049642023310000000000000000000000815250620059cc565b62002ab3846104626040518060400160405280601381526020017f496e636f727265637420616e737765722023310000000000000000000000000081525062005a1e565b62002af7836104576040518060400160405280601681526020017f496e636f72726563742073746172746564417420233100000000000000000000815250620059cc565b62002b3b826104586040518060400160405280601681526020017f496e636f72726563742075706461746564417420233100000000000000000000815250620059cc565b62002b8a8169ffffffffffffffffffff16600b6040518060400160405280601c81526020017f496e636f727265637420616e737765726564496e526f756e6420233100000000815250620059cc565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa15801562002bf8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002c1e919062006339565b60408051808201909152601581527f496e636f727265637420726f756e64204964202331000000000000000000000060208201529499509297509095509350915062002c7b9069ffffffffffffffffffff871690600b90620059cc565b62002cbf846104626040518060400160405280601381526020017f496e636f727265637420616e737765722023310000000000000000000000000081525062005a1e565b62002d03836104576040518060400160405280601681526020017f496e636f72726563742073746172746564417420233100000000000000000000815250620059cc565b62002d47826104586040518060400160405280601681526020017f496e636f72726563742075706461746564417420233100000000000000000000815250620059cc565b62002d968169ffffffffffffffffffff16600b6040518060400160405280601c81526020017f496e636f727265637420616e737765726564496e526f756e6420233100000000815250620059cc565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa15801562002e04573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002e2a919062006339565b60408051808201909152601581527f496e636f727265637420726f756e64204964202331000000000000000000000060208201529499509297509095509350915062002e879069ffffffffffffffffffff871690600b90620059cc565b62002ecb846104626040518060400160405280601381526020017f496e636f727265637420616e737765722023310000000000000000000000000081525062005a1e565b62002f0f836104576040518060400160405280601681526020017f496e636f72726563742073746172746564417420233100000000000000000000815250620059cc565b62002f53826104586040518060400160405280601681526020017f496e636f72726563742075706461746564417420233100000000000000000000815250620059cc565b620014c28169ffffffffffffffffffff16600b6040518060400160405280601c81526020017f496e636f727265637420616e737765726564496e526f756e6420233100000000815250620059cc565b6000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb2335f2e0000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c31eb0e090602401600060405180830381600087803b1580156200303357600080fd5b505af115801562003048573d6000803e3d6000fd5b505060015460035460045460405173ffffffffffffffffffffffffffffffffffffffff9384169550600094509183169216906200308590620061ce565b73ffffffffffffffffffffffffffffffffffffffff948516815292841660208401529083166040830152909116606082015260a0608082018190526003908201527f4c5032000000000000000000000000000000000000000000000000000000000060c082015260e001604051809103906000f0801580156200310c573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb2335f2e0000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c31eb0e090602401600060405180830381600087803b1580156200319f57600080fd5b505af1158015620031b4573d6000803e3d6000fd5b505060015460025460045460405173ffffffffffffffffffffffffffffffffffffffff938416955091831693506000921690620031f190620061ce565b73ffffffffffffffffffffffffffffffffffffffff948516815292841660208401529083166040830152909116606082015260a0608082018190526003908201527f4c5032000000000000000000000000000000000000000000000000000000000060c082015260e001604051809103906000f08015801562003278573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb2335f2e0000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c31eb0e090602401600060405180830381600087803b1580156200330b57600080fd5b505af115801562003320573d6000803e3d6000fd5b505060015460025460035460405173ffffffffffffffffffffffffffffffffffffffff93841695509183169350909116906000906200335f90620061ce565b73ffffffffffffffffffffffffffffffffffffffff948516815292841660208401529083166040830152909116606082015260a0608082018190526003908201527f4c5032000000000000000000000000000000000000000000000000000000000060c082015260e001604051809103906000f080158015620033e6573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb2335f2e0000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c31eb0e090602401600060405180830381600087803b1580156200347957600080fd5b505af11580156200348e573d6000803e3d6000fd5b505060015460035460045460055460405173ffffffffffffffffffffffffffffffffffffffff9485169650600095509284169391821692911690620034d390620061dc565b73ffffffffffffffffffffffffffffffffffffffff95861681529385166020850152918416604084015283166060830152909116608082015260c060a082018190526003908201527f4c5033000000000000000000000000000000000000000000000000000000000060e082015261010001604051809103906000f08015801562003562573d6000803e3d6000fd5b50600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283161790556000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb2335f2e000000000000000000000000000000000000000000000000000000006004820152620100009091049091169063c31eb0e090602401600060405180830381600087803b1580156200362257600080fd5b505af115801562003637573d6000803e3d6000fd5b505060015460025460045460055460405173ffffffffffffffffffffffffffffffffffffffff94851696509284169450600093918216929116906200367c90620061dc565b73ffffffffffffffffffffffffffffffffffffffff95861681529385166020850152918416604084015283166060830152909116608082015260c060a082018190526003908201527f4c5033000000000000000000000000000000000000000000000000000000000060e082015261010001604051809103906000f0801580156200370b573d6000803e3d6000fd5b50600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283161790556000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb2335f2e000000000000000000000000000000000000000000000000000000006004820152620100009091049091169063c31eb0e090602401600060405180830381600087803b158015620037cb57600080fd5b505af1158015620037e0573d6000803e3d6000fd5b505060015460025460035460055460405173ffffffffffffffffffffffffffffffffffffffff94851696509284169450908316926000929116906200382590620061dc565b73ffffffffffffffffffffffffffffffffffffffff95861681529385166020850152918416604084015283166060830152909116608082015260c060a082018190526003908201527f4c5033000000000000000000000000000000000000000000000000000000000060e082015261010001604051809103906000f080158015620038b4573d6000803e3d6000fd5b50600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283161790556000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb2335f2e000000000000000000000000000000000000000000000000000000006004820152620100009091049091169063c31eb0e090602401600060405180830381600087803b1580156200397457600080fd5b505af115801562003989573d6000803e3d6000fd5b505060015460025460035460045460405173ffffffffffffffffffffffffffffffffffffffff94851696509284169450908316921690600090620039cd90620061dc565b73ffffffffffffffffffffffffffffffffffffffff95861681529385166020850152918416604084015283166060830152909116608082015260c060a082018190526003908201527f4c5033000000000000000000000000000000000000000000000000000000000060e082015261010001604051809103906000f08015801562003a5c573d6000803e3d6000fd5b50600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283161790556000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb2335f2e000000000000000000000000000000000000000000000000000000006004820152620100009091049091169063c31eb0e090602401600060405180830381600087803b15801562003b1c57600080fd5b505af115801562003b31573d6000803e3d6000fd5b505060015460035460045460055460065460405173ffffffffffffffffffffffffffffffffffffffff958616975060009650938516949283169391831692169062003b7c90620061ea565b73ffffffffffffffffffffffffffffffffffffffff96871681529486166020860152928516604085015290841660608401528316608083015290911660a082015260e060c082018190526003908201527f4c5034000000000000000000000000000000000000000000000000000000000061010082015261012001604051809103906000f08015801562003c14573d6000803e3d6000fd5b50600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283161790556000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb2335f2e000000000000000000000000000000000000000000000000000000006004820152620100009091049091169063c31eb0e090602401600060405180830381600087803b15801562003cd457600080fd5b505af115801562003ce9573d6000803e3d6000fd5b505060015460025460045460055460065460405173ffffffffffffffffffffffffffffffffffffffff958616975093851695506000949283169391831692169062003d3490620061ea565b73ffffffffffffffffffffffffffffffffffffffff96871681529486166020860152928516604085015290841660608401528316608083015290911660a082015260e060c082018190526003908201527f4c5034000000000000000000000000000000000000000000000000000000000061010082015261012001604051809103906000f08015801562003dcc573d6000803e3d6000fd5b50600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283161790556000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb2335f2e000000000000000000000000000000000000000000000000000000006004820152620100009091049091169063c31eb0e090602401600060405180830381600087803b15801562003e8c57600080fd5b505af115801562003ea1573d6000803e3d6000fd5b505060015460025460035460055460065460405173ffffffffffffffffffffffffffffffffffffffff958616975093851695509184169360009391811692169062003eec90620061ea565b73ffffffffffffffffffffffffffffffffffffffff96871681529486166020860152928516604085015290841660608401528316608083015290911660a082015260e060c082018190526003908201527f4c5034000000000000000000000000000000000000000000000000000000000061010082015261012001604051809103906000f08015801562003f84573d6000803e3d6000fd5b50600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283161790556000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb2335f2e000000000000000000000000000000000000000000000000000000006004820152620100009091049091169063c31eb0e090602401600060405180830381600087803b1580156200404457600080fd5b505af115801562004059573d6000803e3d6000fd5b505060015460025460035460045460065460405173ffffffffffffffffffffffffffffffffffffffff95861697509385169550918416939081169260009290911690620040a690620061ea565b73ffffffffffffffffffffffffffffffffffffffff96871681529486166020860152928516604085015290841660608401528316608083015290911660a082015260e060c082018190526003908201527f4c5034000000000000000000000000000000000000000000000000000000000061010082015261012001604051809103906000f0801580156200413e573d6000803e3d6000fd5b50600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283161790556000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb2335f2e000000000000000000000000000000000000000000000000000000006004820152620100009091049091169063c31eb0e090602401600060405180830381600087803b158015620041fe57600080fd5b505af115801562004213573d6000803e3d6000fd5b505060015460025460035460045460055460405173ffffffffffffffffffffffffffffffffffffffff9586169750938516955091841693908116929116906000906200425f90620061ea565b73ffffffffffffffffffffffffffffffffffffffff96871681529486166020860152928516604085015290841660608401528316608083015290911660a082015260e060c082018190526003908201527f4c5034000000000000000000000000000000000000000000000000000000000061010082015261012001604051809103906000f080158015620042f7573d6000803e3d6000fd5b50600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60008054610100900460ff1615620043605750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620044a45760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000008284015282518083038401815260608301909352600092909162004408917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc491608001620063c1565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905262004442916200640b565b6000604051808303816000865af19150503d806000811462004481576040519150601f19603f3d011682016040523d82523d6000602084013e62004486565b606091505b5091505080806020019051810190620044a0919062006429565b9150505b919050565b600754604080517fab0ca0e10000000000000000000000000000000000000000000000000000000081529051620045989273ffffffffffffffffffffffffffffffffffffffff169163ab0ca0e19160048083019260209291908290030181865afa1580156200451c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200454291906200647a565b60035460408051808201909152601981527f4c50323a20696e636f7272656374207072696365466565643100000000000000602082015273ffffffffffffffffffffffffffffffffffffffff9091169062005a6b565b600754604080517fe5693f410000000000000000000000000000000000000000000000000000000081529051620046879273ffffffffffffffffffffffffffffffffffffffff169163e5693f419160048083019260209291908290030181865afa1580156200460b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200463191906200647a565b60045460408051808201909152601981527f4c50323a20696e636f7272656374207072696365466565643200000000000000602082015273ffffffffffffffffffffffffffffffffffffffff9091169062005a6b565b600754604080517f218751b20000000000000000000000000000000000000000000000000000000081529051620047769273ffffffffffffffffffffffffffffffffffffffff169163218751b29160048083019260209291908290030181865afa158015620046fa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200472091906200647a565b60025460408051808201909152601881527f4c50323a20696e636f7272656374206375727665506f6f6c0000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff9091169062005a6b565b600754604080517f7284e4160000000000000000000000000000000000000000000000000000000081529051620048a39273ffffffffffffffffffffffffffffffffffffffff1691637284e4169160048083019260009291908290030181865afa158015620047e9573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620048319190810190620064c9565b6040518060400160405280600381526020017f4c503200000000000000000000000000000000000000000000000000000000008152506040518060400160405280601a81526020017f4c50323a20696e636f7272656374206465736372697074696f6e00000000000081525062005ae4565b600854604080517fab0ca0e10000000000000000000000000000000000000000000000000000000081529051620049929273ffffffffffffffffffffffffffffffffffffffff169163ab0ca0e19160048083019260209291908290030181865afa15801562004916573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200493c91906200647a565b60035460408051808201909152601981527f4c50333a20696e636f7272656374207072696365466565643100000000000000602082015273ffffffffffffffffffffffffffffffffffffffff9091169062005a6b565b600854604080517fe5693f41000000000000000000000000000000000000000000000000000000008152905162004a819273ffffffffffffffffffffffffffffffffffffffff169163e5693f419160048083019260209291908290030181865afa15801562004a05573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004a2b91906200647a565b60045460408051808201909152601981527f4c50333a20696e636f7272656374207072696365466565643200000000000000602082015273ffffffffffffffffffffffffffffffffffffffff9091169062005a6b565b600854604080517f427cb6fe000000000000000000000000000000000000000000000000000000008152905162004b709273ffffffffffffffffffffffffffffffffffffffff169163427cb6fe9160048083019260209291908290030181865afa15801562004af4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004b1a91906200647a565b60055460408051808201909152601981527f4c50333a20696e636f7272656374207072696365466565643300000000000000602082015273ffffffffffffffffffffffffffffffffffffffff9091169062005a6b565b600854604080517f218751b2000000000000000000000000000000000000000000000000000000008152905162004c5f9273ffffffffffffffffffffffffffffffffffffffff169163218751b29160048083019260209291908290030181865afa15801562004be3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004c0991906200647a565b60025460408051808201909152601881527f4c50333a20696e636f7272656374206375727665506f6f6c0000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff9091169062005a6b565b600854604080517f7284e416000000000000000000000000000000000000000000000000000000008152905162004d8c9273ffffffffffffffffffffffffffffffffffffffff1691637284e4169160048083019260009291908290030181865afa15801562004cd2573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262004d1a9190810190620064c9565b6040518060400160405280600381526020017f4c503300000000000000000000000000000000000000000000000000000000008152506040518060400160405280601a81526020017f4c50333a20696e636f7272656374206465736372697074696f6e00000000000081525062005ae4565b600954604080517fab0ca0e1000000000000000000000000000000000000000000000000000000008152905162004e7b9273ffffffffffffffffffffffffffffffffffffffff169163ab0ca0e19160048083019260209291908290030181865afa15801562004dff573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004e2591906200647a565b60035460408051808201909152601981527f4c50343a20696e636f7272656374207072696365466565643100000000000000602082015273ffffffffffffffffffffffffffffffffffffffff9091169062005a6b565b600954604080517fe5693f41000000000000000000000000000000000000000000000000000000008152905162004f6a9273ffffffffffffffffffffffffffffffffffffffff169163e5693f419160048083019260209291908290030181865afa15801562004eee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004f1491906200647a565b60045460408051808201909152601981527f4c50343a20696e636f7272656374207072696365466565643200000000000000602082015273ffffffffffffffffffffffffffffffffffffffff9091169062005a6b565b600954604080517f427cb6fe0000000000000000000000000000000000000000000000000000000081529051620050599273ffffffffffffffffffffffffffffffffffffffff169163427cb6fe9160048083019260209291908290030181865afa15801562004fdd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200500391906200647a565b60055460408051808201909152601981527f4c50343a20696e636f7272656374207072696365466565643300000000000000602082015273ffffffffffffffffffffffffffffffffffffffff9091169062005a6b565b600954604080517f7aac1c480000000000000000000000000000000000000000000000000000000081529051620051489273ffffffffffffffffffffffffffffffffffffffff1691637aac1c489160048083019260209291908290030181865afa158015620050cc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620050f291906200647a565b60065460408051808201909152601981527f4c50343a20696e636f7272656374207072696365466565643400000000000000602082015273ffffffffffffffffffffffffffffffffffffffff9091169062005a6b565b600954604080517f218751b20000000000000000000000000000000000000000000000000000000081529051620052379273ffffffffffffffffffffffffffffffffffffffff169163218751b29160048083019260209291908290030181865afa158015620051bb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620051e191906200647a565b60025460408051808201909152601881527f4c50343a20696e636f7272656374206375727665506f6f6c0000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff9091169062005a6b565b600954604080517f7284e4160000000000000000000000000000000000000000000000000000000081529051620053649273ffffffffffffffffffffffffffffffffffffffff1691637284e4169160048083019260009291908290030181865afa158015620052aa573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620052f29190810190620064c9565b6040518060400160405280600381526020017f4c503400000000000000000000000000000000000000000000000000000000008152506040518060400160405280601a81526020017f4c50343a20696e636f7272656374206465736372697074696f6e00000000000081525062005ae4565b600754604080517fa384d6ff0000000000000000000000000000000000000000000000000000000081529051620054429273ffffffffffffffffffffffffffffffffffffffff169163a384d6ff9160048083019260209291908290030181865afa158015620053d7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620053fd9190620065a0565b670de0b6b3a76400006040518060400160405280601a81526020017f4c50323a20496e636f7272656374206c6f77657220626f756e64000000000000815250620059cc565b600854604080517fa384d6ff0000000000000000000000000000000000000000000000000000000081529051620055209273ffffffffffffffffffffffffffffffffffffffff169163a384d6ff9160048083019260209291908290030181865afa158015620054b5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620054db9190620065a0565b670de0b6b3a76400006040518060400160405280601a81526020017f4c50333a20496e636f7272656374206c6f77657220626f756e64000000000000815250620059cc565b600954604080517fa384d6ff0000000000000000000000000000000000000000000000000000000081529051620055fe9273ffffffffffffffffffffffffffffffffffffffff169163a384d6ff9160048083019260209291908290030181865afa15801562005593573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620055b99190620065a0565b670de0b6b3a76400006040518060400160405280601a81526020017f4c50343a20496e636f7272656374206c6f77657220626f756e64000000000000815250620059cc565b565b6000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f24e46f700000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c31eb0e090602401600060405180830381600087803b1580156200569157600080fd5b505af1158015620056a6573d6000803e3d6000fd5b50506007546040517f9a6fc8f50000000000000000000000000000000000000000000000000000000081526001600482015273ffffffffffffffffffffffffffffffffffffffff9091169250639a6fc8f5915060240160a060405180830381865afa1580156200571a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005740919062006339565b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f24e46f700000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16935063c31eb0e092506024019050600060405180830381600087803b158015620057d757600080fd5b505af1158015620057ec573d6000803e3d6000fd5b50506008546040517f9a6fc8f50000000000000000000000000000000000000000000000000000000081526001600482015273ffffffffffffffffffffffffffffffffffffffff9091169250639a6fc8f5915060240160a060405180830381865afa15801562005860573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005886919062006339565b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f24e46f700000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16935063c31eb0e092506024019050600060405180830381600087803b1580156200591d57600080fd5b505af115801562005932573d6000803e3d6000fd5b50506009546040517f9a6fc8f50000000000000000000000000000000000000000000000000000000081526001600482015273ffffffffffffffffffffffffffffffffffffffff9091169250639a6fc8f5915060240160a060405180830381865afa158015620059a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620014c2919062006339565b81831462005a19577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf35838160405162005a05919062006606565b60405180910390a162005a19838362005b81565b505050565b81831462005a19577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf35838160405162005a57919062006606565b60405180910390a162005a19838362005c97565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161462005a19577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf35838160405162005ad0919062006606565b60405180910390a162005a19838362005d97565b8160405160200162005af791906200640b565b604051602081830303815290604052805190602001208360405160200162005b2091906200640b565b604051602081830303815290604052805190602001201462005a19577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf35838160405162005b6d919062006606565b60405180910390a162005a19838362005ec3565b80821462005c93577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f5060405162005c0f9060208082526022908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b75696e60408201527f745d000000000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a88160405162005c4891906200664f565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a88260405162005c8191906200669b565b60405180910390a162005c9362006013565b5050565b80821462005c93577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f5060405162005d259060208082526021908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b696e7460408201527f5d00000000000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17f2fe632779174374378442a8e978bccfbdcc1d6b2b0d81f7e8eb776ab2286f1688160405162005d5e91906200664f565b60405180910390a17f2fe632779174374378442a8e978bccfbdcc1d6b2b0d81f7e8eb776ab2286f1688260405162005c8191906200669b565b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462005c93577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f5060405162005e519060208082526025908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b61646460408201527f726573735d000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f8160405162005e8a9190620066d9565b60405180910390a17f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f8260405162005c8191906200673b565b8060405160200162005ed691906200640b565b604051602081830303815290604052805190602001208260405160200162005eff91906200640b565b604051602081830303815290604052805190602001201462005c93577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f5060405162005fa19060208082526024908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b73747260408201527f696e675d00000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf35838160405162005fda919062006779565b60405180910390a17f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf35838260405162005c819190620067d3565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620061685760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000009282019290925260016060820152600091907f70ca10bbd0dbfd9020a9f4b13402c16cb120705e0d1c0aeab10fa353ae586fc490608001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052620060e59291602001620063c1565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526200611f916200640b565b6000604051808303816000865af19150503d80600081146200615e576040519150601f19603f3d011682016040523d82523d6000602084013e62006163565b606091505b505050505b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055565b6102b0806200681283390190565b6106ca8062006ac283390190565b617a51806200718c83390190565b613161806200ebdd83390190565b6117138062011d3e83390190565b611852806201345183390190565b6119828062014ca383390190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562006258577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500290565b600081518084526020808501945080840160005b83811015620062a557815173ffffffffffffffffffffffffffffffffffffffff168752958201959082019060010162006271565b509495945050505050565b604081526000620062c560408301856200625d565b8281036020840152620062d981856200625d565b95945050505050565b60008262006319577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b805169ffffffffffffffffffff81168114620044a457600080fd5b600080600080600060a086880312156200635257600080fd5b6200635d866200631e565b945060208601519350604086015192506060860151915062006382608087016200631e565b90509295509295909350565b60005b83811015620063ab57818101518382015260200162006391565b83811115620063bb576000848401525b50505050565b7fffffffff000000000000000000000000000000000000000000000000000000008316815260008251620063fd8160048501602087016200638e565b919091016004019392505050565b600082516200641f8184602087016200638e565b9190910192915050565b6000602082840312156200643c57600080fd5b815180151581146200644d57600080fd5b9392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146200647757600080fd5b50565b6000602082840312156200648d57600080fd5b81516200644d8162006454565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060208284031215620064dc57600080fd5b815167ffffffffffffffff80821115620064f557600080fd5b818401915084601f8301126200650a57600080fd5b8151818111156200651f576200651f6200649a565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156200656857620065686200649a565b816040528281528760208487010111156200658257600080fd5b620065958360208301602088016200638e565b979650505050505050565b600060208284031215620065b357600080fd5b5051919050565b60008151808452620065d48160208601602086016200638e565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60408152600560408201527f4572726f7200000000000000000000000000000000000000000000000000000060608201526080602082015260006200644d6080830184620065ba565b6040815260006200668d60408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b905082602083015292915050565b6040815260006200668d60408301600a81527f2020202041637475616c00000000000000000000000000000000000000000000602082015260400190565b6040815260006200671760408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b905073ffffffffffffffffffffffffffffffffffffffff8316602083015292915050565b6040815260006200671760408301600a81527f2020202041637475616c00000000000000000000000000000000000000000000602082015260400190565b604081526000620067b760408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b8281036020840152620067cb8185620065ba565b949350505050565b604081526000620067b760408301600a81527f2020202041637475616c0000000000000000000000000000000000000000000060208201526040019056fe608060405234801561001057600080fd5b50600080546001600160a01b031990811630908117835560028054909216179055338152600160208190526040909120805460ff191690911790556102568061005a6000396000f3fe608060405234801561001057600080fd5b50600436106100675760003560e01c806376e112861161005057806376e11286146100e95780639dcb511a1461014c578063fca513a81461018257600080fd5b8063087376951461006c5780635f259aba146100b6575b600080fd5b60005461008c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6100d96100c43660046101cb565b60016020526000908152604090205460ff1681565b60405190151581526020016100ad565b61014a6100f73660046101ed565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001691909216179055565b005b61008c61015a3660046101cb565b60036020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60025461008c9073ffffffffffffffffffffffffffffffffffffffff1681565b803573ffffffffffffffffffffffffffffffffffffffff811681146101c657600080fd5b919050565b6000602082840312156101dd57600080fd5b6101e6826101a2565b9392505050565b6000806040838503121561020057600080fd5b610209836101a2565b9150610217602084016101a2565b9050925092905056fea26469706673582212204291f208ba289dc45c65523845755f7f16fafcfe35cecba679ed1b9627e274ee64736f6c634300080a003360a060405234801561001057600080fd5b506040516106ca3803806106ca83398101604081905261002f9161006c565b60009190915560ff166080526001805460506001600160501b031991821681179092556004805490911690911790554260028190556003556100a2565b6000806040838503121561007f57600080fd5b82519150602083015160ff8116811461009757600080fd5b809150509250929050565b60805161060e6100bc600039600060d3015261060e6000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80639a6fc8f511610081578063d62ada111161005b578063d62ada11146102dc578063f7a30806146102f4578063feaf968c1461030757600080fd5b80639a6fc8f5146101cd578063bd18ad531461023a578063cd653afc1461024d57600080fd5b806354fd4d50116100b257806354fd4d501461012d57806367e8d83d1461013c5780637284e4161461018e57600080fd5b8063313ce567146100ce5780633fd0875f1461010c575b600080fd5b6100f57f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020015b60405180910390f35b6004546a0100000000000000000000900460ff166040516101039190610441565b60405160018152602001610103565b61018c61014a366004610482565b600480549115156c01000000000000000000000000027fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff909216919091179055565b005b604080518082018252600c81527f7072696365206f7261636c6500000000000000000000000000000000000000006020820152905161010391906104ab565b6102036101db36600461053d565b60015460005460025460035460045469ffffffffffffffffffff948516941691939590929450565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610103565b61018c610248366004610558565b61030f565b61018c61025b366004610579565b6001805469ffffffffffffffffffff9586167fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090911617905560029290925560035560048054919092167fffffffffffffffffffffffffffffffffffffffff00ff00000000000000000000909116176b020000000000000000000000179055565b6102e461035f565b6040519015158152602001610103565b61018c6103023660046105bf565b600055565b610203610385565b600480548291907fffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff166b01000000000000000000000083600281111561035757610357610412565b021790555050565b600454600090610380906b010000000000000000000000900460ff166103d6565b905090565b60008060008060006004600c9054906101000a900460ff16156103a757600080fd5b505060015460005460025460035460045469ffffffffffffffffffff9485169893975091955093509190911690565b600060028260028111156103ec576103ec610412565b14156103f757600080fd5b600182600281111561040b5761040b610412565b1492915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016006831061047c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561049457600080fd5b813580151581146104a457600080fd5b9392505050565b600060208083528351808285015260005b818110156104d8578581018301518582016040015282016104bc565b818111156104ea576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803569ffffffffffffffffffff8116811461053857600080fd5b919050565b60006020828403121561054f57600080fd5b6104a48261051e565b60006020828403121561056a57600080fd5b8135600381106104a457600080fd5b6000806000806080858703121561058f57600080fd5b6105988561051e565b935060208501359250604085013591506105b46060860161051e565b905092959194509250565b6000602082840312156105d157600080fd5b503591905056fea264697066735822122014874f7a973b86501c4c1a8be32490fe902c8f088ee234d25f9b2497e19f9e5264736f6c634300080a003360806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d00011790553480156200003a57600080fd5b506040805161018081019091526000908060c081018060018152604080518082018252600381526244414960e81b6020828101919091528301526012908201526305f5e100606082015260800160018152602001600081525081526020016040518060c001604052806002600a811115620000b957620000b962000b78565b815260408051808201825260048152635553444360e01b6020828101919091528301526006908201526305f5e100606082015260800160018152602001600081525081526020016040518060c001604052806003600a81111562000121576200012162000b78565b815260408051808201825260048152630ae8aa8960e31b602082810191909152830152601290820152644a817c8000606082015260800160028152602001600081525081526020016040518060c001604052806004600a8111156200018a576200018a62000b78565b815260408051808201825260048152634c494e4b60e01b6020828101919091528301526012908201526359682f00606082015260800160018152602001600081525081526020016040518060c001604052806005600a811115620001f257620001f262000b78565b815260408051808201825260048152631554d11560e21b602082810191909152830152601290820152633b023380606082015260800160018152602001600081525081526020016040518060c001604052806006600a8111156200025a576200025a62000b78565b815260408051808201825260058152640e6e88aa8960db1b602082810191909152830152601290820152644cd588640060608201526080016003815260200160009052905260408051610140810190915290915060009080608081018060078152602001604051806040016040528060048152602001636344414960e01b8152508152602001601260ff1681526020016305f5e100815260200160048081111562000309576200030962000b78565b8152602001600181525081526020016040518060c001604052806008600a81111562000339576200033962000b78565b81526040805180820182526005815264635553444360d81b6020828101919091528301526006908201526305f5e100606082015260800160048152602001600281525081526020016040518060c001604052806009600a811115620003a257620003a262000b78565b8152604080518082018252600581526418d554d11560da1b602082810191909152830152601290820152633b023380606082015260800160048152602001600581525081526020016040518060c00160405280600a808111156200040a576200040a62000b78565b81526040805180820182526005815264634c494e4b60d81b6020828101919091528301526012908201526359682f00606082015260800160048152602001600490529052905060005b600681101562000496576200048183826006811062000476576200047662000b8e565b6020020151620004db565b806200048d8162000ba4565b91505062000453565b5060005b6004811015620004d257620004bd82826004811062000476576200047662000b8e565b80620004c98162000ba4565b9150506200049a565b50505062000d14565b6000600282608001516004811115620004f857620004f862000b78565b14156200054e576040516200050d9062000a8c565b604051809103906000f0801580156200052a573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b03831617905590506200071e565b60038260800151600481111562000569576200056962000b78565b1415620005a4576040516200057e9062000a9a565b604051809103906000f0801580156200059b573d6000803e3d6000fd5b5090506200071e565b600182608001516004811115620005bf57620005bf62000b78565b1415620005f157816020015182602001518360400151604051620005e39062000aa8565b6200057e9392919062000c1e565b6004826080015160048111156200060c576200060c62000b78565b1415620006be576000600260008460a00151600a81111562000632576200063262000b78565b600a81111562000646576200064662000b78565b815260200190815260200160002060009054906101000a90046001600160a01b0316905082602001518360200151846040015183604051620006889062000ab6565b62000697949392919062000c5b565b604051809103906000f080158015620006b4573d6000803e3d6000fd5b509150506200071e565b60405162461bcd60e51b815260206004820152602b60248201527f74657374546f6b656e53756974653a204372656174696e6720756e6b6e6f776e60448201526a20746f6b656e207479706560a81b606482015260840160405180910390fd5b60005460208301516040516318caf8e360e31b8152620100009092046001600160a01b03169163c657c718916200075b9185919060040162000ca9565b600060405180830381600087803b1580156200077657600080fd5b505af11580156200078b573d6000803e3d6000fd5b50505050600082606001516008604051620007a69062000ac4565b91825260ff166020820152604001604051809103906000f080158015620007d1573d6000803e3d6000fd5b50905081600260008560000151600a811115620007f257620007f262000b78565b600a81111562000806576200080662000b78565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055508260600151600560008560000151600a8111156200085a576200085a62000b78565b600a8111156200086e576200086e62000b78565b8152602080820192909252604090810160009081209390935585516001600160a01b03861684526008909252909120805460ff1916600183600a811115620008ba57620008ba62000b78565b02179055508260800151600360008560000151600a811115620008e157620008e162000b78565b600a811115620008f557620008f562000b78565b81526020810191909152604001600020805460ff1916600183600481111562000922576200092262000b78565b0217905550604080518082019091526001600160a01b0380841682528281166020808401918252600780546001810182556000918252945160029095027fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688810180549686166001600160a01b031997881617905592517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c689909301805493909416929094169190911790915584015184519091600491600a811115620009eb57620009eb62000b78565b600a811115620009ff57620009ff62000b78565b8152602001908152602001600020908051906020019062000a2292919062000ad2565b5080600660008560000151600a81111562000a415762000a4162000b78565b600a81111562000a555762000a5562000b78565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550505050565b610ab1806200285183390190565b611224806200330283390190565b611758806200452683390190565b6117098062005c7e83390190565b6106ca806200738783390190565b82805462000ae09062000cd7565b90600052602060002090601f01602090048101928262000b04576000855562000b4f565b82601f1062000b1f57805160ff191683800117855562000b4f565b8280016001018555821562000b4f579182015b8281111562000b4f57825182559160200191906001019062000b32565b5062000b5d92915062000b61565b5090565b5b8082111562000b5d576000815560010162000b62565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600060001982141562000bc757634e487b7160e01b600052601160045260246000fd5b5060010190565b6000815180845260005b8181101562000bf65760208185018101518683018201520162000bd8565b8181111562000c09576000602083870101525b50601f01601f19169290920160200192915050565b60608152600062000c33606083018662000bce565b828103602084015262000c47818662000bce565b91505060ff83166040830152949350505050565b60808152600062000c70608083018762000bce565b828103602084015262000c84818762000bce565b60ff95909516604084015250506001600160a01b039190911660609091015292915050565b6001600160a01b038316815260406020820181905260009062000ccf9083018462000bce565b949350505050565b600181811c9082168062000cec57607f821691505b6020821081141562000d0e57634e487b7160e01b600052602260045260246000fd5b50919050565b611b2d8062000d246000396000f3fe6080604052600436106101635760003560e01c80638eb86e8b116100c0578063c6c3bbe611610074578063d051a62211610059578063d051a62214610490578063eebab8ef146104b0578063fa7626d4146104d057600080fd5b8063c6c3bbe614610433578063c74912d21461045357600080fd5b80639b140a85116100a55780639b140a85146103e6578063b36ba20814610406578063ba414fa61461040e57600080fd5b80638eb86e8b1461038357806398cdaadf146103a357600080fd5b80636a72bde71161011757806388327863116100fc578063883278631461030857806388f776a2146103365780638a3177a31461035657600080fd5b80636a72bde7146102c45780636ca42ae3146102e657600080fd5b8063440864fa11610148578063440864fa146102025780634b57b0be1461022f57806367b426451461028157600080fd5b806304bc3b1c1461016f57806310c7f0b9146101b557600080fd5b3661016a57005b600080fd5b34801561017b57600080fd5b5061019f61018a3660046116f6565b60086020526000908152604090205460ff1681565b6040516101ac9190611742565b60405180910390f35b3480156101c157600080fd5b506101d56101d036600461175c565b6104ea565b6040805173ffffffffffffffffffffffffffffffffffffffff9384168152929091166020830152016101ac565b34801561020e57600080fd5b5061022261021d366004611784565b610530565b6040516101ac91906117cb565b34801561023b57600080fd5b5060015461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101ac565b34801561028d57600080fd5b5061025c61029c366004611784565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156102d057600080fd5b506102e46102df36600461181c565b6105ca565b005b3480156102f257600080fd5b506102fb610730565b6040516101ac919061186b565b34801561031457600080fd5b506103286103233660046118d4565b6107b5565b6040519081526020016101ac565b34801561034257600080fd5b506102e461035136600461190b565b610888565b34801561036257600080fd5b50610328610371366004611784565b60056020526000908152604090205481565b34801561038f57600080fd5b506102e461039e366004611954565b6108b9565b3480156103af57600080fd5b5061025c6103be366004611784565b60066020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156103f257600080fd5b506102e4610401366004611993565b610a73565b6102e4610b22565b34801561041a57600080fd5b50610423610ba0565b60405190151581526020016101ac565b34801561043f57600080fd5b506102e461044e3660046119b3565b610d00565b34801561045f57600080fd5b5061048361046e366004611784565b60036020526000908152604090205460ff1681565b6040516101ac91906119d3565b34801561049c57600080fd5b506103286104ab36600461190b565b610daf565b3480156104bc57600080fd5b506102e46104cb366004611954565b610e8b565b3480156104dc57600080fd5b506000546104239060ff1681565b600781815481106104fa57600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff91821692501682565b60046020526000908152604090208054610549906119e7565b80601f0160208091040260200160405190810160405280929190818152602001828054610575906119e7565b80156105c25780601f10610597576101008083540402835291602001916105c2565b820191906000526020600020905b8154815290600101906020018083116105a557829003601f168201915b505050505081565b6000546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152620100009092049091169063ca669fa790602401600060405180830381600087803b15801561063e57600080fd5b505af1158015610652573d6000803e3d6000fd5b505050506002600085600a81111561066c5761066c611713565b600a81111561067d5761067d611713565b8152602081019190915260409081016000205490517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490529091169063095ea7b3906044016020604051808303816000875af1158015610705573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107299190611a3b565b5050505050565b60606007805480602002602001604051908101604052809291908181526020016000905b828210156107ac5760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff908116835260019182015416828401529083529092019101610754565b50505050905090565b60006002600084600a8111156107cd576107cd611713565b600a8111156107de576107de611713565b8152602081019190915260409081016000205490517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152909116906370a0823190602401602060405180830381865afa15801561085d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108819190611a5d565b9392505050565b6108b48383837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6105ca565b505050565b60016003600085600a8111156108d1576108d1611713565b600a8111156108e2576108e2611713565b815260208101919091526040016000205460ff16600481111561090757610907611713565b14610999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f74657374546f6b656e53756974653a20547279696e6720746f206275726e206160448201527f206e6f6e2d6e6f726d616c20746f6b656e00000000000000000000000000000060648201526084015b60405180910390fd5b6002600084600a8111156109af576109af611713565b600a8111156109c0576109c0611713565b8152602081019190915260409081016000205490517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526024820184905290911690639dc29fac906044015b6020604051808303816000875af1158015610a49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6d9190611a3b565b50505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604081205460ff169081600a811115610aaf57610aaf611713565b1415610b17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f20746f6b656e2077697468207375636820616464726573730000000000006044820152606401610990565b610a6d818484610888565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015610b8c57600080fd5b505af1158015610729573d6000803e3d6000fd5b60008054610100900460ff1615610bc05750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610cfb5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610c65917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc491608001611a76565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052610c9d91611abe565b6000604051808303816000865af19150503d8060008114610cda576040519150601f19603f3d011682016040523d82523d6000602084013e610cdf565b606091505b5091505080806020019051810190610cf79190611a3b565b9150505b919050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604081205460ff169081600a811115610d3c57610d3c611713565b1415610da4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f20746f6b656e2077697468207375636820616464726573730000000000006044820152606401610990565b610a6d818484610e8b565b60006002600085600a811115610dc757610dc7611713565b600a811115610dd857610dd8611713565b8152602081019190915260409081016000205490517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301529091169063dd62ed3e90604401602060405180830381865afa158015610e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e839190611a5d565b949350505050565b60026003600085600a811115610ea357610ea3611713565b600a811115610eb457610eb4611713565b815260208101919091526040016000205460ff166004811115610ed957610ed9611713565b1415610ff6576000546040517fc88a5e6d000000000000000000000000000000000000000000000000000000008152306004820152602481018390526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c88a5e6d90604401600060405180830381600087803b158015610f5657600080fd5b505af1158015610f6a573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015610fd857600080fd5b505af1158015610fec573d6000803e3d6000fd5b505050505061163c565b600380600085600a81111561100d5761100d611713565b600a81111561101e5761101e611713565b815260208101919091526040016000205460ff16600481111561104357611043611713565b14156111aa576000546040517fc88a5e6d000000000000000000000000000000000000000000000000000000008152306004820152602481018390526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c88a5e6d90604401600060405180830381600087803b1580156110c057600080fd5b505af11580156110d4573d6000803e3d6000fd5b505050506002600084600a8111156110ee576110ee611713565b600a8111156110ff576110ff611713565b8152602081019190915260409081016000205490517fa1903eab00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a1903eab90839060240160206040518083038185885af115801561117f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906111a49190611a5d565b5061163c565b60046003600085600a8111156111c2576111c2611713565b600a8111156111d3576111d3611713565b815260208101919091526040016000205460ff1660048111156111f8576111f8611713565b141561148f5760006002600085600a81111561121657611216611713565b600a81111561122757611227611713565b815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c49190611ada565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600860205260409020549091506112fb9060ff163084610e8b565b8073ffffffffffffffffffffffffffffffffffffffff1663095ea7b36002600087600a81111561132d5761132d611713565b600a81111561133e5761133e611713565b81526020810191909152604090810160002054905160e083901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602481018590526044016020604051808303816000875af11580156113c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e69190611a3b565b506002600085600a8111156113fd576113fd611713565b600a81111561140e5761140e611713565b8152602081019190915260409081016000205490517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810184905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f1990604401600060405180830381600087803b158015610fd857600080fd5b60016003600085600a8111156114a7576114a7611713565b600a8111156114b8576114b8611713565b815260208101919091526040016000205460ff1660048111156114dd576114dd611713565b14156115b4576002600084600a8111156114f9576114f9611713565b600a81111561150a5761150a611713565b8152602081019190915260409081016000205490517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f19906044016020604051808303816000875af1158015611590573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a49190611a3b565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f74657374546f6b656e53756974653a20547279696e6720746f207472616e736660448201527f657220756e6b6e6f776e20746f6b656e000000000000000000000000000000006064820152608401610990565b6002600084600a81111561165257611652611713565b600a81111561166357611663611713565b8152602081019190915260409081016000205490517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490529091169063a9059cbb90604401610a2a565b73ffffffffffffffffffffffffffffffffffffffff811681146116f357600080fd5b50565b60006020828403121561170857600080fd5b8135610881816116d1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60208101600b831061175657611756611713565b91905290565b60006020828403121561176e57600080fd5b5035919050565b8035600b8110610cfb57600080fd5b60006020828403121561179657600080fd5b61088182611775565b60005b838110156117ba5781810151838201526020016117a2565b83811115610a6d5750506000910152565b60208152600082518060208401526117ea81604085016020870161179f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000806080858703121561183257600080fd5b61183b85611775565b9350602085013561184b816116d1565b9250604085013561185b816116d1565b9396929550929360600135925050565b602080825282518282018190526000919060409081850190868401855b828110156118c7578151805173ffffffffffffffffffffffffffffffffffffffff90811686529087015116868501529284019290850190600101611888565b5091979650505050505050565b600080604083850312156118e757600080fd5b6118f083611775565b91506020830135611900816116d1565b809150509250929050565b60008060006060848603121561192057600080fd5b61192984611775565b92506020840135611939816116d1565b91506040840135611949816116d1565b809150509250925092565b60008060006060848603121561196957600080fd5b61197284611775565b92506020840135611982816116d1565b929592945050506040919091013590565b6000806000606084860312156119a857600080fd5b8335611929816116d1565b6000806000606084860312156119c857600080fd5b8335611972816116d1565b602081016005831061175657611756611713565b600181811c908216806119fb57607f821691505b60208210811415611a35577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600060208284031215611a4d57600080fd5b8151801515811461088157600080fd5b600060208284031215611a6f57600080fd5b5051919050565b7fffffffff000000000000000000000000000000000000000000000000000000008316815260008251611ab081600485016020870161179f565b919091016004019392505050565b60008251611ad081846020870161179f565b9190910192915050565b600060208284031215611aec57600080fd5b8151610881816116d156fea264697066735822122010fe735ed069aca27931edce4ba2ff14ec7886bf21b0eea685a884f9200fb49e64736f6c634300080a003360c0604052600d60808190526c2bb930b83832b21022ba3432b960991b60a090815261002e916000919061007a565b50604080518082019091526004808252630ae8aa8960e31b602090920191825261005a9160019161007a565b506002805460ff1916601217905534801561007457600080fd5b5061014e565b82805461008690610113565b90600052602060002090601f0160209004810192826100a857600085556100ee565b82601f106100c157805160ff19168380011785556100ee565b828001600101855582156100ee579182015b828111156100ee5782518255916020019190600101906100d3565b506100fa9291506100fe565b5090565b5b808211156100fa57600081556001016100ff565b600181811c9082168061012757607f821691505b6020821081141561014857634e487b7160e01b600052602260045260246000fd5b50919050565b6109548061015d6000396000f3fe6080604052600436106100cb5760003560e01c806340c10f1911610074578063a9059cbb1161004e578063a9059cbb14610225578063d0e30db014610245578063dd62ed3e1461024d57600080fd5b806340c10f19146101c357806370a08231146101e357806395d89b411461021057600080fd5b806323b872dd116100a557806323b872dd146101575780632e1a7d4d14610177578063313ce5671461019757600080fd5b806306fdde03146100df578063095ea7b31461010a57806318160ddd1461013a57600080fd5b366100da576100d8610285565b005b600080fd5b3480156100eb57600080fd5b506100f46102e0565b6040516101019190610703565b60405180910390f35b34801561011657600080fd5b5061012a61012536600461079f565b61036e565b6040519015158152602001610101565b34801561014657600080fd5b50475b604051908152602001610101565b34801561016357600080fd5b5061012a6101723660046107c9565b6103e7565b34801561018357600080fd5b506100d8610192366004610805565b6105fe565b3480156101a357600080fd5b506002546101b19060ff1681565b60405160ff9091168152602001610101565b3480156101cf57600080fd5b506100d86101de36600461079f565b6106a4565b3480156101ef57600080fd5b506101496101fe36600461081e565b60036020526000908152604090205481565b34801561021c57600080fd5b506100f46106e2565b34801561023157600080fd5b5061012a61024036600461079f565b6106ef565b6100d8610285565b34801561025957600080fd5b50610149610268366004610839565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102a490849061089b565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102ed906108b3565b80601f0160208091040260200160405190810160405280929190818152602001828054610319906108b3565b80156103665780601f1061033b57610100808354040283529160200191610366565b820191906000526020600020905b81548152906001019060200180831161034957829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103d69086815260200190565b60405180910390a350600192915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561041957600080fd5b73ffffffffffffffffffffffffffffffffffffffff8416331480159061048f575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105175773ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020548211156104d157600080fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915281208054849290610511908490610907565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061054c908490610907565b909155505073ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260408120805484929061058690849061089b565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516105ec91815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561061a57600080fd5b3360009081526003602052604081208054839290610639908490610907565b9091555050604051339082156108fc029083906000818181858888f1935050505015801561066b573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260036020526040812080548392906106d990849061089b565b90915550505050565b600180546102ed906108b3565b60006106fc3384846103e7565b9392505050565b600060208083528351808285015260005b8181101561073057858101830151858201604001528201610714565b81811115610742576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461079a57600080fd5b919050565b600080604083850312156107b257600080fd5b6107bb83610776565b946020939093013593505050565b6000806000606084860312156107de57600080fd5b6107e784610776565b92506107f560208501610776565b9150604084013590509250925092565b60006020828403121561081757600080fd5b5035919050565b60006020828403121561083057600080fd5b6106fc82610776565b6000806040838503121561084c57600080fd5b61085583610776565b915061086360208401610776565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156108ae576108ae61086c565b500190565b600181811c908216806108c757607f821691505b60208210811415610901577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000828210156109195761091961086c565b50039056fea26469706673582212206ec943fa4e3b70d8fca6c25b6aa26fa18e8f8952ce3bc4d5afcb443bf3097c0564736f6c634300080a003360806040526000600255600060035534801561001a57600080fd5b506111fa8061002a6000396000f3fe60806040526004361061016e5760003560e01c80637a28fb88116100cb578063bdd17e1c1161007f578063dd62ed3e11610059578063dd62ed3e146103ee578063ee7a7c0414610441578063f5eb42dc1461046157600080fd5b8063bdd17e1c146103ad578063cdb9a21c146103c3578063d5002f2e146103d957600080fd5b8063a1903eab116100b0578063a1903eab1461035a578063a457c2d71461036d578063a9059cbb1461038d57600080fd5b80637a28fb88146102f457806395d89b411461031457600080fd5b806323b872dd1161012257806337cfdaca1161010757806337cfdaca1461020d57806339509351146102b457806370a08231146102d457600080fd5b806323b872dd14610278578063313ce5671461029857600080fd5b806318160ddd1161015357806318160ddd1461020d578063192084511461023057806322301f6e1461025057600080fd5b806306fdde0314610185578063095ea7b3146101dd57600080fd5b366101805761017d6000610481565b50005b600080fd5b34801561019157600080fd5b5060408051808201909152601781527f4c6971756964207374616b656420457468657220322e3000000000000000000060208201525b6040516101d49190610f63565b60405180910390f35b3480156101e957600080fd5b506101fd6101f8366004610fff565b610545565b60405190151581526020016101d4565b34801561021957600080fd5b5061022261055b565b6040519081526020016101d4565b34801561023c57600080fd5b5061022261024b366004611029565b61056b565b34801561025c57600080fd5b5061027661026b366004611042565b600391909155600255565b005b34801561028457600080fd5b506101fd610293366004611064565b6105ab565b3480156102a457600080fd5b50604051601281526020016101d4565b3480156102c057600080fd5b506101fd6102cf366004610fff565b610696565b3480156102e057600080fd5b506102226102ef3660046110a0565b6106d9565b34801561030057600080fd5b5061022261030f366004611029565b61070e565b34801561032057600080fd5b5060408051808201909152600581527f737445544800000000000000000000000000000000000000000000000000000060208201526101c7565b6102226103683660046110a0565b61073a565b34801561037957600080fd5b506101fd610388366004610fff565b610745565b34801561039957600080fd5b506101fd6103a8366004610fff565b6107f9565b3480156103b957600080fd5b5061022260035481565b3480156103cf57600080fd5b5061022260025481565b3480156103e557600080fd5b50610222610806565b3480156103fa57600080fd5b506102226104093660046110bb565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b34801561044d57600080fd5b5061027661045c366004610fff565b610811565b34801561046d57600080fd5b5061022261047c3660046110a0565b61081f565b60003334806104f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f5a45524f5f4445504f534954000000000000000000000000000000000000000060448201526064015b60405180910390fd5b60006104fc8261056b565b9050806105065750805b8160036000828254610518919061111d565b909155506105289050838261084a565b61053383838761093b565b61053d8382610992565b949350505050565b60006105523384846109ea565b50600192915050565b600061056660035490565b905090565b60008061057760035490565b9050806105875750600092915050565b6105a48161059e61059760025490565b8690610b52565b90610b5e565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001602090815260408083203384529091528120548281101561066c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f5452414e534645525f414d4f554e545f455843454544535f414c4c4f57414e4360448201527f450000000000000000000000000000000000000000000000000000000000000060648201526084016104e8565b610677858585610b6a565b61068b85336106868487610bef565b6109ea565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916105529185906106869086610bfb565b73ffffffffffffffffffffffffffffffffffffffff81166000908152602081905260408120546107089061070e565b92915050565b60008061071a60025490565b90508061072a5750600092915050565b6105a48161059e61059760035490565b600061070882610481565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156107e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4445435245415345445f414c4c4f57414e43455f42454c4f575f5a45524f000060448201526064016104e8565b6107ef33856106868487610bef565b5060019392505050565b6000610552338484610b6a565b600061056660025490565b61081b8282610c07565b5050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040812054610708565b73ffffffffffffffffffffffffffffffffffffffff82166108c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4d494e545f544f5f5448455f5a45524f5f41444452455353000000000000000060448201526064016104e8565b80600260008282546108d9919061111d565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205461090e9082610bfb565b73ffffffffffffffffffffffffffffffffffffffff90921660009081526020819052604090209190915550565b6040805183815273ffffffffffffffffffffffffffffffffffffffff83811660208301528516917fed8dd430b1e4bba98e943dc5b157cf7b54d9e12916d6c474ff5733a95001d03b910160405180910390a2505050565b73ffffffffffffffffffffffffffffffffffffffff821660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6109d58461070e565b60405190815260200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff8316610a67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f415050524f56455f46524f4d5f5a45524f5f414444524553530000000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff8216610ae4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f415050524f56455f544f5f5a45524f5f4144445245535300000000000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006105a48284611135565b60006105a48284611172565b6000610b758261056b565b9050610b82848483610d64565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610be191815260200190565b60405180910390a350505050565b60006105a482846111ad565b60006105a4828461111d565b73ffffffffffffffffffffffffffffffffffffffff8216610c84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4255524e5f46524f4d5f5448455f5a45524f5f4144445245535300000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205480821115610d14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4255524e5f414d4f554e545f455843454544535f42414c414e4345000000000060448201526064016104e8565b8160026000828254610d2691906111ad565b90915550610d3690508183610bef565b73ffffffffffffffffffffffffffffffffffffffff9093166000908152602081905260409020929092555050565b73ffffffffffffffffffffffffffffffffffffffff8316610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f5452414e534645525f46524f4d5f5448455f5a45524f5f41444452455353000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff8216610e5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f5452414e534645525f544f5f5448455f5a45524f5f414444524553530000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205480821115610eee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5452414e534645525f414d4f554e545f455843454544535f42414c414e43450060448201526064016104e8565b610ef88183610bef565b73ffffffffffffffffffffffffffffffffffffffff8086166000908152602081905260408082209390935590851681522054610f349083610bfb565b73ffffffffffffffffffffffffffffffffffffffff909316600090815260208190526040902092909255505050565b600060208083528351808285015260005b81811015610f9057858101830151858201604001528201610f74565b81811115610fa2576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ffa57600080fd5b919050565b6000806040838503121561101257600080fd5b61101b83610fd6565b946020939093013593505050565b60006020828403121561103b57600080fd5b5035919050565b6000806040838503121561105557600080fd5b50508035926020909101359150565b60008060006060848603121561107957600080fd5b61108284610fd6565b925061109060208501610fd6565b9150604084013590509250925092565b6000602082840312156110b257600080fd5b6105a482610fd6565b600080604083850312156110ce57600080fd5b6110d783610fd6565b91506110e560208401610fd6565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611130576111306110ee565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561116d5761116d6110ee565b500290565b6000826111a8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000828210156111bf576111bf6110ee565b50039056fea2646970667358221220a5b4f31162ba2b8b3424cef84b31ef91d05a825243602b5fdf758ffb49b8246364736f6c634300080a003360a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a003360c06040523480156200001157600080fd5b506040516200170938038062001709833981016040819052620000349162000266565b8351849084906200004d906003906020850190620000f3565b50805162000063906004906020840190620000f3565b505050620000806200007a6200009d60201b60201c565b620000a1565b60ff9091166080526001600160a01b031660a05250620003479050565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b82805462000101906200030a565b90600052602060002090601f01602090048101928262000125576000855562000170565b82601f106200014057805160ff191683800117855562000170565b8280016001018555821562000170579182015b828111156200017057825182559160200191906001019062000153565b506200017e92915062000182565b5090565b5b808211156200017e576000815560010162000183565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c157600080fd5b81516001600160401b0380821115620001de57620001de62000199565b604051601f8301601f19908116603f0116810190828211818310171562000209576200020962000199565b816040528381526020925086838588010111156200022657600080fd5b600091505b838210156200024a57858201830151818301840152908201906200022b565b838211156200025c5760008385830101525b9695505050505050565b600080600080608085870312156200027d57600080fd5b84516001600160401b03808211156200029557600080fd5b620002a388838901620001af565b95506020870151915080821115620002ba57600080fd5b50620002c987828801620001af565b935050604085015160ff81168114620002e157600080fd5b60608601519092506001600160a01b0381168114620002ff57600080fd5b939692955090935050565b600181811c908216806200031f57607f821691505b602082108114156200034157634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05161138e6200037b600039600081816101f70152818161041f0152610600015260006101a2015261138e6000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80636f307dc3116100b257806395d89b4111610081578063a9059cbb11610066578063a9059cbb146102b5578063dd62ed3e146102c8578063f2fde38b1461030e57600080fd5b806395d89b411461029a578063a457c2d7146102a257600080fd5b80636f307dc3146101f257806370a082311461023e578063715018a6146102745780638da5cb5b1461027c57600080fd5b806323b872dd116100ee57806323b872dd14610188578063313ce5671461019b57806339509351146101cc57806340c10f19146101df57600080fd5b806306fdde0314610120578063095ea7b31461013e57806318160ddd146101615780631e9a695014610173575b600080fd5b610128610321565b604051610135919061112d565b60405180910390f35b61015161014c3660046111c9565b6103b3565b6040519015158152602001610135565b6002545b604051908152602001610135565b6101866101813660046111c9565b6103c9565b005b6101516101963660046111f3565b610491565b60405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610135565b6101516101da3660046111c9565b61057c565b6101866101ed3660046111c9565b6105c5565b6102197f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b61016561024c36600461122f565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610186610691565b60055473ffffffffffffffffffffffffffffffffffffffff16610219565b61012861071e565b6101516102b03660046111c9565b61072d565b6101516102c33660046111c9565b610805565b6101656102d6366004611251565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b61018661031c36600461122f565b610812565b60606003805461033090611284565b80601f016020809104026020016040519081016040528092919081815260200182805461035c90611284565b80156103a95780601f1061037e576101008083540402835291602001916103a9565b820191906000526020600020905b81548152906001019060200180831161038c57829003601f168201915b5050505050905090565b60006103c0338484610942565b50600192915050565b6103d33382610af5565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015610468573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048c91906112d8565b505050565b600061049e848484610ce2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6105718533858403610942565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916103c09185906105c0908690611329565b610942565b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906323b872dd906064016020604051808303816000875af115801561065e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068291906112d8565b5061068d8282610f96565b5050565b60055473ffffffffffffffffffffffffffffffffffffffff163314610712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161055b565b61071c60006110b6565b565b60606004805461033090611284565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156107ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161055b565b6107fb3385858403610942565b5060019392505050565b60006103c0338484610ce2565b60055473ffffffffffffffffffffffffffffffffffffffff163314610893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161055b565b73ffffffffffffffffffffffffffffffffffffffff8116610936576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161055b565b61093f816110b6565b50565b73ffffffffffffffffffffffffffffffffffffffff83166109e4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff8216610a87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8216610b98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015610c4e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290610c8a908490611341565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff8216610e28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610ede576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610f22908490611329565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f8891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161055b565b80600260008282546110259190611329565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152602081905260408120805483929061105f908490611329565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208083528351808285015260005b8181101561115a5785810183015185820160400152820161113e565b8181111561116c576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146111c457600080fd5b919050565b600080604083850312156111dc57600080fd5b6111e5836111a0565b946020939093013593505050565b60008060006060848603121561120857600080fd5b611211846111a0565b925061121f602085016111a0565b9150604084013590509250925092565b60006020828403121561124157600080fd5b61124a826111a0565b9392505050565b6000806040838503121561126457600080fd5b61126d836111a0565b915061127b602084016111a0565b90509250929050565b600181811c9082168061129857607f821691505b602082108114156112d2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156112ea57600080fd5b8151801515811461124a57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561133c5761133c6112fa565b500190565b600082821015611353576113536112fa565b50039056fea26469706673582212203a6db30cd3c097921df4156794aa7973eb848711deeb2cffd7c54a9df1fdb0a564736f6c634300080a003360a060405234801561001057600080fd5b506040516106ca3803806106ca83398101604081905261002f9161006c565b60009190915560ff166080526001805460506001600160501b031991821681179092556004805490911690911790554260028190556003556100a2565b6000806040838503121561007f57600080fd5b82519150602083015160ff8116811461009757600080fd5b809150509250929050565b60805161060e6100bc600039600060d3015261060e6000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80639a6fc8f511610081578063d62ada111161005b578063d62ada11146102dc578063f7a30806146102f4578063feaf968c1461030757600080fd5b80639a6fc8f5146101cd578063bd18ad531461023a578063cd653afc1461024d57600080fd5b806354fd4d50116100b257806354fd4d501461012d57806367e8d83d1461013c5780637284e4161461018e57600080fd5b8063313ce567146100ce5780633fd0875f1461010c575b600080fd5b6100f57f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020015b60405180910390f35b6004546a0100000000000000000000900460ff166040516101039190610441565b60405160018152602001610103565b61018c61014a366004610482565b600480549115156c01000000000000000000000000027fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff909216919091179055565b005b604080518082018252600c81527f7072696365206f7261636c6500000000000000000000000000000000000000006020820152905161010391906104ab565b6102036101db36600461053d565b60015460005460025460035460045469ffffffffffffffffffff948516941691939590929450565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610103565b61018c610248366004610558565b61030f565b61018c61025b366004610579565b6001805469ffffffffffffffffffff9586167fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090911617905560029290925560035560048054919092167fffffffffffffffffffffffffffffffffffffffff00ff00000000000000000000909116176b020000000000000000000000179055565b6102e461035f565b6040519015158152602001610103565b61018c6103023660046105bf565b600055565b610203610385565b600480548291907fffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff166b01000000000000000000000083600281111561035757610357610412565b021790555050565b600454600090610380906b010000000000000000000000900460ff166103d6565b905090565b60008060008060006004600c9054906101000a900460ff16156103a757600080fd5b505060015460005460025460035460045469ffffffffffffffffffff9485169893975091955093509190911690565b600060028260028111156103ec576103ec610412565b14156103f757600080fd5b600182600281111561040b5761040b610412565b1492915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016006831061047c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561049457600080fd5b813580151581146104a457600080fd5b9392505050565b600060208083528351808285015260005b818110156104d8578581018301518582016040015282016104bc565b818111156104ea576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803569ffffffffffffffffffff8116811461053857600080fd5b919050565b60006020828403121561054f57600080fd5b6104a48261051e565b60006020828403121561056a57600080fd5b8135600381106104a457600080fd5b6000806000806080858703121561058f57600080fd5b6105988561051e565b935060208501359250604085013591506105b46060860161051e565b905092959194509250565b6000602082840312156105d157600080fd5b503591905056fea264697066735822122014874f7a973b86501c4c1a8be32490fe902c8f088ee234d25f9b2497e19f9e5264736f6c634300080a003360806040523480156200001157600080fd5b50604051620031613803806200316183398101604081905262000034916200029b565b8151620000499060029060208501906200012c565b5080516200005f9060039060208401906200012c565b5060006012604051620000729062000196565b6060808252600790820152664352564d6f636b60c81b608082015260a0602082018190526015908201527f43525620666f72204375727665506f6f6c4d6f636b000000000000000000000060c082015260ff909116604082015260e001604051809103906000f080158015620000ec573d6000803e3d6000fd5b50600080546001600160a01b039092166001600160a01b03199283168117909155600180549092161790555050670de0b6b3a76400006007555062000305565b82805482825590600052602060002090810192821562000184579160200282015b828111156200018457825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906200014d565b5062000192929150620001a4565b5090565b6117588062001a0983390190565b5b80821115620001925760008155600101620001a5565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b0381168114620001e957600080fd5b919050565b600082601f8301126200020057600080fd5b815160206001600160401b03808311156200021f576200021f620001bb565b8260051b604051601f19603f83011681018181108482111715620002475762000247620001bb565b6040529384528581018301938381019250878511156200026657600080fd5b83870191505b8482101562000290576200028082620001d1565b835291830191908301906200026c565b979650505050505050565b60008060408385031215620002af57600080fd5b82516001600160401b0380821115620002c757600080fd5b620002d586838701620001ee565b93506020850151915080821115620002ec57600080fd5b50620002fb85828601620001ee565b9150509250929050565b6116f480620003156000396000f3fe608060405234801561001057600080fd5b50600436106102925760003560e01c806382c6306611610160578063bb7b8b80116100d8578063e2e7d2641161008c578063f851a44011610071578063f851a440146104b0578063fc0c546a146104b7578063fee3f7f9146102ea57600080fd5b8063e2e7d264146104a2578063f446c1d0146102ea57600080fd5b8063cc2b27d7116100bd578063cc2b27d714610479578063dd62ed3e1461048c578063ddca3f43146102ea57600080fd5b8063bb7b8b801461045e578063c66106571461046657600080fd5b8063a6417ed61161012f578063b739953e11610114578063b739953e14610425578063b91434d114610438578063b9947eb01461044b57600080fd5b8063a6417ed614610412578063b4b577ad146102ea57600080fd5b806382c63066146103d65780638ea875f3146103f657806395d89b41146102bd57806399bd2ba5146103ff57600080fd5b80633df021241161020e57806363543f06116101c257806371035418116101a7578063710354181461039e57806376a2f0f0146102ea5780637b475b68146103b157600080fd5b806363543f06146102ea57806370a082311461038a57600080fd5b80635409491a116101f35780635409491a146102ea57806356ac3503146103645780635e0d443f1461037757600080fd5b80633df021241461033e5780634903b0d11461035157600080fd5b806318160ddd116102655780632081066c1161024a5780632081066c146102ea57806323746eb814610306578063313ce567146102ea57600080fd5b806318160ddd146102ea5780631a4d01d2146102f157600080fd5b8063065a80d81461029757806306fdde03146102bd57806307211ef7146102d757806314052288146102ea575b600080fd5b6102aa6102a5366004611333565b6104d7565b6040519081526020015b60405180910390f35b604080516020810182526000815290516102b4919061137a565b6102aa6102e53660046113cb565b610590565b60006102aa565b6103046102ff366004611407565b6105e0565b005b610319610314366004611333565b6106d4565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102b4565b61030461034c36600461142c565b610714565b6102aa61035f36600461146e565b61083e565b6103046103723660046113cb565b610853565b6102aa6103853660046113cb565b6108b4565b6102aa6103983660046114ab565b50600090565b6103046103ac36600461146e565b600755565b6103046103bf3660046114c6565b600f9190910b600090815260066020526040902055565b6001546103199073ffffffffffffffffffffffffffffffffffffffff1681565b6102aa60075481565b61030461040d3660046114f0565b6108f0565b61030461042036600461142c565b61098d565b610319610433366004611333565b610d4d565b6103046104463660046113cb565b610d65565b61031961045936600461146e565b610dc6565b6007546102aa565b61031961047436600461146e565b610ddb565b6102aa61048736600461150c565b610df0565b6102aa61049a366004611538565b600092915050565b6102aa61039836600461146e565b6000610319565b6000546103199073ffffffffffffffffffffffffffffffffffffffff1681565b6000600282600f0b815481106104ef576104ef611562565b6000918252602090912001546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa158015610566573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061058a9190611591565b92915050565b600f83810b60009081526005602090815260408083209386900b8352929052908120546b033b2e3c9fd0803ce8000000906105cc9084906115d9565b6105d69190611616565b90505b9392505050565b6000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810185905273ffffffffffffffffffffffffffffffffffffffff909116906379cc6790906044016020604051808303816000875af1158015610657573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061067b9190611651565b506106cf33826002856fffffffffffffffffffffffffffffffff16815481106106a6576106a6611562565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169190610e26565b505050565b6000600282600f0b815481106106ec576106ec611562565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1692915050565b60006107218585856108b4565b9050818110156107b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f437572766556314d6f636b3a20494e53554646494349454e545f4f555450555460448201527f5f414d4f554e540000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61080d3330856002896fffffffffffffffffffffffffffffffff16815481106107e3576107e3611562565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16929190610efa565b61083733826002876fffffffffffffffffffffffffffffffff16815481106106a6576106a6611562565b5050505050565b6000600282815481106104ef576104ef611562565b600f83810b60009081526005602090815260408083209386900b83529290522081905561088c6b033b2e3c9fd0803ce800000082610f5e565b600f92830b60009081526005602090815260408083209690950b825294909452919092205550565b600f83810b60009081526004602090815260408083209386900b8352929052908120546b033b2e3c9fd0803ce8000000906105cc9084906115d9565b6000546040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052909116906340c10f19906044016020604051808303816000875af1158015610969573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106cf9190611651565b60006002856fffffffffffffffffffffffffffffffff16815481106109b4576109b4611562565b60009182526020822001546003805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff8816908110610a0057610a00611562565b60009182526020822001546002805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff8816908110610a4c57610a4c611562565b60009182526020822001546003805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff8916908110610a9857610a98611562565b600091825260208220015473ffffffffffffffffffffffffffffffffffffffff169150610ac6898989610590565b905085811015610b58576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f437572766556314d6f636b3a20494e53554646494349454e545f4f555450555460448201527f5f414d4f554e540000000000000000000000000000000000000000000000000060648201526084016107af565b610b7a73ffffffffffffffffffffffffffffffffffffffff851633308a610efa565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526024820189905285169063095ea7b3906044016020604051808303816000875af1158015610bef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c139190611651565b506040517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8616906340c10f1990604401600060405180830381600087803b158015610c8257600080fd5b505af1158015610c96573d6000803e3d6000fd5b50506040517f1e9a69500000000000000000000000000000000000000000000000000000000081523060048201526024810184905273ffffffffffffffffffffffffffffffffffffffff86169250631e9a69509150604401600060405180830381600087803b158015610d0857600080fd5b505af1158015610d1c573d6000803e3d6000fd5b50610d429250505073ffffffffffffffffffffffffffffffffffffffff83163383610e26565b505050505050505050565b6000600382600f0b815481106106ec576106ec611562565b600f83810b60009081526004602090815260408083209386900b835292905220819055610d9e6b033b2e3c9fd0803ce800000082610f5e565b600f92830b60009081526004602090815260408083209690950b825294909452919092205550565b6000600382815481106106ec576106ec611562565b6000600282815481106106ec576106ec611562565b600f81900b6000908152600660205260408120546b033b2e3c9fd0803ce800000090610e1c90856115d9565b6105d99190611616565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526106cf9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526110c4565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052610f589085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401610e78565b50505050565b60408051808201909152600281527f4d33000000000000000000000000000000000000000000000000000000000000602082015260009082610fcd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107af919061137a565b506000610fdb600284611616565b90506b033b2e3c9fd0803ce8000000611014827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611673565b61101e9190611616565b8411156040518060400160405280600281526020017f4d310000000000000000000000000000000000000000000000000000000000008152509061108f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107af919061137a565b5082816110a86b033b2e3c9fd0803ce8000000876115d9565b6110b2919061168a565b6110bc9190611616565b949350505050565b6000611126826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166111d09092919063ffffffff16565b8051909150156106cf57808060200190518101906111449190611651565b6106cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016107af565b60606105d6848460008585843b611243576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107af565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161126c91906116a2565b60006040518083038185875af1925050503d80600081146112a9576040519150601f19603f3d011682016040523d82523d6000602084013e6112ae565b606091505b50915091506112be8282866112c9565b979650505050505050565b606083156112d85750816105d9565b8251156112e85782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107af919061137a565b8035600f81900b811461132e57600080fd5b919050565b60006020828403121561134557600080fd5b6105d98261131c565b60005b83811015611369578181015183820152602001611351565b83811115610f585750506000910152565b602081526000825180602084015261139981604085016020870161134e565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000606084860312156113e057600080fd5b6113e98461131c565b92506113f76020850161131c565b9150604084013590509250925092565b60008060006060848603121561141c57600080fd5b833592506113f76020850161131c565b6000806000806080858703121561144257600080fd5b61144b8561131c565b93506114596020860161131c565b93969395505050506040820135916060013590565b60006020828403121561148057600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461132e57600080fd5b6000602082840312156114bd57600080fd5b6105d982611487565b600080604083850312156114d957600080fd5b6114e28361131c565b946020939093013593505050565b6000806040838503121561150357600080fd5b6114e283611487565b6000806040838503121561151f57600080fd5b8235915061152f6020840161131c565b90509250929050565b6000806040838503121561154b57600080fd5b61155483611487565b915061152f60208401611487565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000602082840312156115a357600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611611576116116115aa565b500290565b60008261164c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60006020828403121561166357600080fd5b815180151581146105d957600080fd5b600082821015611685576116856115aa565b500390565b6000821982111561169d5761169d6115aa565b500190565b600082516116b481846020870161134e565b919091019291505056fea264697066735822122085930fb95d77cfd8b121f00dfae6066e162c3aa4154af7bb3967ed233996408164736f6c634300080a003360a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a00336101406040523480156200001257600080fd5b506040516200171338038062001713833981016040819052620000359162000389565b6000805460ff191690558484828260c882826001600160a01b0381166200006f57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000ae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d49190620004b3565b6001600160a01b0316608052508051620000f6906002906020840190620002b0565b505060a052506001600160a01b0382166200012457604051635919af9760e11b815260040160405180910390fd5b6001600160a01b03821660c0819052670de0b6b3a764000060e05260408051630176f71760e71b815290516000929163bb7b8b809160048083019260209291908290030181865afa1580156200017e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001a49190620004d8565b9050620001b18162000210565b505050506001600160a01b0383161580620001d357506001600160a01b038216155b15620001f257604051635919af9760e11b815260040160405180910390fd5b506001600160a01b0391821661010052166101205250620005a59050565b806200022f576040516309aadd6f60e41b815260040160405180910390fd5b60018190557f82e7ee47180a631312683eeb2a85ad264c9af490d54de5a75bbdb95b968c6de28162000261816200027c565b6040805192835260208301919091520160405180910390a150565b60a0516000906127109062000292908262000508565b6200029e908462000523565b620002aa919062000545565b92915050565b828054620002be9062000568565b90600052602060002090601f016020900481019282620002e257600085556200032d565b82601f10620002fd57805160ff19168380011785556200032d565b828001600101855582156200032d579182015b828111156200032d57825182559160200191906001019062000310565b506200033b9291506200033f565b5090565b5b808211156200033b576000815560010162000340565b80516001600160a01b03811681146200036e57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600080600080600060a08688031215620003a257600080fd5b620003ad8662000356565b94506020620003be81880162000356565b9450620003ce6040880162000356565b9350620003de6060880162000356565b60808801519093506001600160401b0380821115620003fc57600080fd5b818901915089601f8301126200041157600080fd5b81518181111562000426576200042662000373565b604051601f8201601f19908116603f0116810190838211818310171562000451576200045162000373565b816040528281528c868487010111156200046a57600080fd5b600093505b828410156200048e57848401860151818501870152928501926200046f565b82841115620004a05760008684830101525b8096505050505050509295509295909350565b600060208284031215620004c657600080fd5b620004d18262000356565b9392505050565b600060208284031215620004eb57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156200051e576200051e620004f2565b500190565b6000816000190483118215151615620005405762000540620004f2565b500290565b6000826200056357634e487b7160e01b600052601260045260246000fd5b500490565b600181811c908216806200057d57607f821691505b602082108114156200059f57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c05160e05161010051610120516110e66200062d6000396000818161034101526107c80152600081816102f701526107190152600081816102d00152610923015260008181610195015261088701526000818161015b0152610b150152600081816102a90152818161039901528181610515015261064d01526110e66000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c80639a6fc8f5116100cd578063b09ad8a011610081578063d62ada1111610066578063d62ada1114610334578063e5693f411461033c578063feaf968c1461036357600080fd5b8063b09ad8a014610319578063bc489a651461032157600080fd5b8063a50cf2c8116100b2578063a50cf2c8146102a4578063a834559e146102cb578063ab0ca0e1146102f257600080fd5b80639a6fc8f514610251578063a384d6ff1461029b57600080fd5b80633fd0875f116101245780635c975abb116101095780635c975abb1461021d5780637284e416146102345780638456cb591461024957600080fd5b80633fd0875f1461020057806354fd4d501461021557600080fd5b806312b495a814610156578063218751b214610190578063313ce567146101dc5780633f4ba83a146101f6575b600080fd5b61017d7f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b6101b77f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610187565b6101e4600881565b60405160ff9091168152602001610187565b6101fe61036b565b005b610208600281565b6040516101879190610cd5565b61017d600181565b60005460ff165b6040519015158152602001610187565b61023c610459565b6040516101879190610d16565b6101fe6104e7565b61026461025f366004610da1565b6105d3565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610187565b61017d60015481565b6101b77f000000000000000000000000000000000000000000000000000000000000000081565b61017d7f000000000000000000000000000000000000000000000000000000000000000081565b6101b77f000000000000000000000000000000000000000000000000000000000000000081565b61017d61060d565b6101fe61032f366004610dc5565b61061f565b610224600181565b6101b77f000000000000000000000000000000000000000000000000000000000000000081565b61026461070f565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156103f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104199190610dde565b61044f576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610457610965565b565b6002805461046690610e00565b80601f016020809104026020016040519081016040528092919081815260200182805461049290610e00565b80156104df5780601f106104b4576101008083540402835291602001916104df565b820191906000526020600020905b8154815290600101906020018083116104c257829003601f168201915b505050505081565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015610571573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105959190610dde565b6105cb576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610457610a4b565b60008060008060006040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061061a600154610b0b565b905090565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156106a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106cd9190610dde565b610703576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61070c81610b54565b50565b60008060008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610782573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a69190610e54565b9398509196509450925090506107be85858484610bd6565b60008060008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610831573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108559190610e54565b9450945094509450945061086b85858484610bd6565b88841215610883578499508398508297508196508095505b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb7b8b806040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109149190610eac565b905061091f81610c71565b90507f000000000000000000000000000000000000000000000000000000000000000061094c828c610ef4565b6109569190610fdf565b99505050505050509091929394565b60005460ff166109d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff1615610ab8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016109cd565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610a213390565b6000612710610b3a7f000000000000000000000000000000000000000000000000000000000000000082611047565b610b44908461105f565b610b4e919061109c565b92915050565b80610b8b576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190557f82e7ee47180a631312683eeb2a85ad264c9af490d54de5a75bbdb95b968c6de281610bbb81610b0b565b6040805192835260208301919091520160405180910390a150565b60008313610c10576040517f56e05d2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8369ffffffffffffffffffff168169ffffffffffffffffffff161080610c34575081155b15610c6b576040517fb1cf675500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60015460009080831015610cb1576040517fb416da7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610cbc82610b0b565b905080841115610ccd579392505050565b509192915050565b6020810160068310610d10577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b600060208083528351808285015260005b81811015610d4357858101830151858201604001528201610d27565b81811115610d55576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b69ffffffffffffffffffff8116811461070c57600080fd5b600060208284031215610db357600080fd5b8135610dbe81610d89565b9392505050565b600060208284031215610dd757600080fd5b5035919050565b600060208284031215610df057600080fd5b81518015158114610dbe57600080fd5b600181811c90821680610e1457607f821691505b60208210811415610e4e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600080600080600060a08688031215610e6c57600080fd5b8551610e7781610d89565b809550506020860151935060408601519250606086015191506080860151610e9e81610d89565b809150509295509295909350565b600060208284031215610ebe57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615610f3557610f35610ec5565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615610f7057610f70610ec5565b60008712925087820587128484161615610f8c57610f8c610ec5565b87850587128184161615610fa257610fa2610ec5565b505050929093029392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082610fee57610fee610fb0565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f80000000000000000000000000000000000000000000000000000000000000008314161561104257611042610ec5565b500590565b6000821982111561105a5761105a610ec5565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561109757611097610ec5565b500290565b6000826110ab576110ab610fb0565b50049056fea2646970667358221220ca5730f8ac976a41fd1283a55d712276536b576394940abc65027e8592280cc364736f6c634300080a00336101606040523480156200001257600080fd5b5060405162001852380380620018528339810160408190526200003591620003a3565b6000805460ff191690558585828260c882826001600160a01b0381166200006f57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000ae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d49190620004de565b6001600160a01b0316608052508051620000f6906002906020840190620002ca565b505060a052506001600160a01b0382166200012457604051635919af9760e11b815260040160405180910390fd5b6001600160a01b03821660c0819052670de0b6b3a764000060e05260408051630176f71760e71b815290516000929163bb7b8b809160048083019260209291908290030181865afa1580156200017e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001a4919062000503565b9050620001b1816200022a565b505050506001600160a01b0384161580620001d357506001600160a01b038316155b80620001e657506001600160a01b038216155b156200020557604051635919af9760e11b815260040160405180910390fd5b506001600160a01b039283166101005290821661012052166101405250620005d09050565b8062000249576040516309aadd6f60e41b815260040160405180910390fd5b60018190557f82e7ee47180a631312683eeb2a85ad264c9af490d54de5a75bbdb95b968c6de2816200027b8162000296565b6040805192835260208301919091520160405180910390a150565b60a05160009061271090620002ac908262000533565b620002b890846200054e565b620002c4919062000570565b92915050565b828054620002d89062000593565b90600052602060002090601f016020900481019282620002fc576000855562000347565b82601f106200031757805160ff191683800117855562000347565b8280016001018555821562000347579182015b82811115620003475782518255916020019190600101906200032a565b506200035592915062000359565b5090565b5b808211156200035557600081556001016200035a565b80516001600160a01b03811681146200038857600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60008060008060008060c08789031215620003bd57600080fd5b620003c88762000370565b95506020620003d981890162000370565b9550620003e96040890162000370565b9450620003f96060890162000370565b9350620004096080890162000370565b60a08901519093506001600160401b03808211156200042757600080fd5b818a0191508a601f8301126200043c57600080fd5b8151818111156200045157620004516200038d565b604051601f8201601f19908116603f011681019083821181831017156200047c576200047c6200038d565b816040528281528d868487010111156200049557600080fd5b600093505b82841015620004b957848401860151818501870152928501926200049a565b82841115620004cb5760008684830101525b8096505050505050509295509295509295565b600060208284031215620004f157600080fd5b620004fc8262000370565b9392505050565b6000602082840312156200051657600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156200054957620005496200051d565b500190565b60008160001904831182151516156200056b576200056b6200051d565b500290565b6000826200058e57634e487b7160e01b600052601260045260246000fd5b500490565b600181811c90821680620005a857607f821691505b60208210811415620005ca57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c05160e0516101005161012051610140516111e86200066a6000396000818161023501526108c8015260008181610383015261080901526000818161033901526107620152600081816103120152610a250152600081816101b001526109890152600081816101760152610c170152600081816102eb015281816103db01528181610557015261068f01526111e86000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c80639a6fc8f5116100cd578063b09ad8a011610081578063d62ada1111610066578063d62ada1114610376578063e5693f411461037e578063feaf968c146103a557600080fd5b8063b09ad8a01461035b578063bc489a651461036357600080fd5b8063a50cf2c8116100b2578063a50cf2c8146102e6578063a834559e1461030d578063ab0ca0e11461033457600080fd5b80639a6fc8f514610293578063a384d6ff146102dd57600080fd5b8063427cb6fe116101245780635c975abb116101095780635c975abb1461025f5780637284e416146102765780638456cb591461028b57600080fd5b8063427cb6fe1461023057806354fd4d501461025757600080fd5b8063313ce56711610155578063313ce567146101f75780633f4ba83a146102115780633fd0875f1461021b57600080fd5b806312b495a814610171578063218751b2146101ab575b600080fd5b6101987f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101a2565b6101ff600881565b60405160ff90911681526020016101a2565b6102196103ad565b005b610223600381565b6040516101a29190610dd7565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b610198600181565b60005460ff165b60405190151581526020016101a2565b61027e61049b565b6040516101a29190610e18565b610219610529565b6102a66102a1366004610ea3565b610615565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a0016101a2565b61019860015481565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b6101987f000000000000000000000000000000000000000000000000000000000000000081565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b61019861064f565b610219610371366004610ec7565b610661565b610266600181565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b6102a6610751565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa158015610437573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061045b9190610ee0565b610491576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610499610a67565b565b600280546104a890610f02565b80601f01602080910402602001604051908101604052809291908181526020018280546104d490610f02565b80156105215780601f106104f657610100808354040283529160200191610521565b820191906000526020600020905b81548152906001019060200180831161050457829003601f168201915b505050505081565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa1580156105b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105d79190610ee0565b61060d576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610499610b4d565b60008060008060006040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061065c600154610c0d565b905090565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156106eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070f9190610ee0565b610745576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61074e81610c56565b50565b6000806000806000806000806000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156107cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ef9190610f56565b939d50919b509950975095506108078a8a8989610cd8565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610872573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108969190610f56565b9398509196509450925090506108ae85858484610cd8565b888412156108c6578499508398508297508196508095505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610931573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109559190610f56565b93985091965094509250905061096d85858484610cd8565b88841215610985578499508398508297508196508095505b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb7b8b806040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a169190610fae565b9050610a2181610d73565b90507f0000000000000000000000000000000000000000000000000000000000000000610a4e828c610ff6565b610a5891906110e1565b99505050505050509091929394565b60005460ff16610ad8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff1615610bba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610acf565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b233390565b6000612710610c3c7f000000000000000000000000000000000000000000000000000000000000000082611149565b610c469084611161565b610c50919061119e565b92915050565b80610c8d576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190557f82e7ee47180a631312683eeb2a85ad264c9af490d54de5a75bbdb95b968c6de281610cbd81610c0d565b6040805192835260208301919091520160405180910390a150565b60008313610d12576040517f56e05d2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8369ffffffffffffffffffff168169ffffffffffffffffffff161080610d36575081155b15610d6d576040517fb1cf675500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60015460009080831015610db3576040517fb416da7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610dbe82610c0d565b905080841115610dcf579392505050565b509192915050565b6020810160068310610e12577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b600060208083528351808285015260005b81811015610e4557858101830151858201604001528201610e29565b81811115610e57576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b69ffffffffffffffffffff8116811461074e57600080fd5b600060208284031215610eb557600080fd5b8135610ec081610e8b565b9392505050565b600060208284031215610ed957600080fd5b5035919050565b600060208284031215610ef257600080fd5b81518015158114610ec057600080fd5b600181811c90821680610f1657607f821691505b60208210811415610f50577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600080600080600060a08688031215610f6e57600080fd5b8551610f7981610e8b565b809550506020860151935060408601519250606086015191506080860151610fa081610e8b565b809150509295509295909350565b600060208284031215610fc057600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60008413600084138583048511828216161561103757611037610fc7565b7f8000000000000000000000000000000000000000000000000000000000000000600087128682058812818416161561107257611072610fc7565b6000871292508782058712848416161561108e5761108e610fc7565b878505871281841616156110a4576110a4610fc7565b505050929093029392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826110f0576110f06110b2565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f80000000000000000000000000000000000000000000000000000000000000008314161561114457611144610fc7565b500590565b6000821982111561115c5761115c610fc7565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561119957611199610fc7565b500290565b6000826111ad576111ad6110b2565b50049056fea2646970667358221220226b667ed6fc6db7c8ec1377cc84dae524e2dc572320ead4a7092944a6b912de64736f6c634300080a00336101806040523480156200001257600080fd5b5060405162001982380380620019828339810160408190526200003591620003bc565b6000805460ff191690558686828260c882826001600160a01b0381166200006f57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000ae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d491906200050b565b6001600160a01b0316608052508051620000f6906002906020840190620002e3565b505060a052506001600160a01b0382166200012457604051635919af9760e11b815260040160405180910390fd5b6001600160a01b03821660c0819052670de0b6b3a764000060e05260408051630176f71760e71b815290516000929163bb7b8b809160048083019260209291908290030181865afa1580156200017e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001a4919062000530565b9050620001b18162000243565b505050506001600160a01b0385161580620001d357506001600160a01b038416155b80620001e657506001600160a01b038316155b80620001f957506001600160a01b038216155b156200021857604051635919af9760e11b815260040160405180910390fd5b506001600160a01b039384166101005291831661012052821661014052166101605250620005fd9050565b8062000262576040516309aadd6f60e41b815260040160405180910390fd5b60018190557f82e7ee47180a631312683eeb2a85ad264c9af490d54de5a75bbdb95b968c6de2816200029481620002af565b6040805192835260208301919091520160405180910390a150565b60a05160009061271090620002c5908262000560565b620002d190846200057b565b620002dd91906200059d565b92915050565b828054620002f190620005c0565b90600052602060002090601f01602090048101928262000315576000855562000360565b82601f106200033057805160ff191683800117855562000360565b8280016001018555821562000360579182015b828111156200036057825182559160200191906001019062000343565b506200036e92915062000372565b5090565b5b808211156200036e576000815560010162000373565b80516001600160a01b0381168114620003a157600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600080600080600080600060e0888a031215620003d857600080fd5b620003e38862000389565b96506020620003f4818a0162000389565b96506200040460408a0162000389565b95506200041460608a0162000389565b94506200042460808a0162000389565b93506200043460a08a0162000389565b60c08a01519093506001600160401b03808211156200045257600080fd5b818b0191508b601f8301126200046757600080fd5b8151818111156200047c576200047c620003a6565b604051601f8201601f19908116603f01168101908382118183101715620004a757620004a7620003a6565b816040528281528e86848701011115620004c057600080fd5b600093505b82841015620004e45784840186015181850187015292850192620004c5565b82841115620004f65760008684830101525b80965050505050505092959891949750929550565b6000602082840312156200051e57600080fd5b620005298262000389565b9392505050565b6000602082840312156200054357600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156200057657620005766200054a565b500190565b60008160001904831182151516156200059857620005986200054a565b500290565b600082620005bb57634e487b7160e01b600052601260045260246000fd5b500490565b600181811c90821680620005d557607f821691505b60208210811415620005f757634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c05160e051610100516101205161014051610160516112d9620006a96000396000818161029b01526109b901526000818161024001526108fa0152600081816103b5015261083b01526000818161036b01526107940152600081816103440152610b160152600081816101bb0152610a7a0152600081816101810152610d0801526000818161031d0152818161040d0152818161058901526106c101526112d96000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80638456cb59116100d8578063ab0ca0e11161008c578063d62ada1111610066578063d62ada11146103a8578063e5693f41146103b0578063feaf968c146103d757600080fd5b8063ab0ca0e114610366578063b09ad8a01461038d578063bc489a651461039557600080fd5b8063a384d6ff116100bd578063a384d6ff1461030f578063a50cf2c814610318578063a834559e1461033f57600080fd5b80638456cb59146102bd5780639a6fc8f5146102c557600080fd5b8063427cb6fe1161012f5780635c975abb116101145780635c975abb1461026a5780637284e416146102815780637aac1c481461029657600080fd5b8063427cb6fe1461023b57806354fd4d501461026257600080fd5b8063313ce56711610160578063313ce567146102025780633f4ba83a1461021c5780633fd0875f1461022657600080fd5b806312b495a81461017c578063218751b2146101b6575b600080fd5b6101a37f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b6101dd7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101ad565b61020a600881565b60405160ff90911681526020016101ad565b6102246103df565b005b61022e600481565b6040516101ad9190610ec8565b6101dd7f000000000000000000000000000000000000000000000000000000000000000081565b6101a3600181565b60005460ff165b60405190151581526020016101ad565b6102896104cd565b6040516101ad9190610f09565b6101dd7f000000000000000000000000000000000000000000000000000000000000000081565b61022461055b565b6102d86102d3366004610f94565b610647565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a0016101ad565b6101a360015481565b6101dd7f000000000000000000000000000000000000000000000000000000000000000081565b6101a37f000000000000000000000000000000000000000000000000000000000000000081565b6101dd7f000000000000000000000000000000000000000000000000000000000000000081565b6101a3610681565b6102246103a3366004610fb8565b610693565b610271600181565b6101dd7f000000000000000000000000000000000000000000000000000000000000000081565b6102d8610783565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa158015610469573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048d9190610fd1565b6104c3576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104cb610b58565b565b600280546104da90610ff3565b80601f016020809104026020016040519081016040528092919081815260200182805461050690610ff3565b80156105535780601f1061052857610100808354040283529160200191610553565b820191906000526020600020905b81548152906001019060200180831161053657829003601f168201915b505050505081565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa1580156105e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106099190610fd1565b61063f576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104cb610c3e565b60008060008060006040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061068e600154610cfe565b905090565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561071d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107419190610fd1565b610777576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61078081610d47565b50565b6000806000806000806000806000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156107fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108219190611047565b939d50919b509950975095506108398a8a8989610dc9565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156108a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c89190611047565b9398509196509450925090506108e085858484610dc9565b888412156108f8578499508398508297508196508095505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610963573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109879190611047565b93985091965094509250905061099f85858484610dc9565b888412156109b7578499508398508297508196508095505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610a22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a469190611047565b939850919650945092509050610a5e85858484610dc9565b88841215610a76578499508398508297508196508095505b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb7b8b806040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ae3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b07919061109f565b9050610b1281610e64565b90507f0000000000000000000000000000000000000000000000000000000000000000610b3f828c6110e7565b610b4991906111d2565b99505050505050509091929394565b60005460ff16610bc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff1615610cab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bc0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610c143390565b6000612710610d2d7f00000000000000000000000000000000000000000000000000000000000000008261123a565b610d379084611252565b610d41919061128f565b92915050565b80610d7e576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190557f82e7ee47180a631312683eeb2a85ad264c9af490d54de5a75bbdb95b968c6de281610dae81610cfe565b6040805192835260208301919091520160405180910390a150565b60008313610e03576040517f56e05d2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8369ffffffffffffffffffff168169ffffffffffffffffffff161080610e27575081155b15610e5e576040517fb1cf675500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60015460009080831015610ea4576040517fb416da7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610eaf82610cfe565b905080841115610ec0579392505050565b509192915050565b6020810160068310610f03577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b600060208083528351808285015260005b81811015610f3657858101830151858201604001528201610f1a565b81811115610f48576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b69ffffffffffffffffffff8116811461078057600080fd5b600060208284031215610fa657600080fd5b8135610fb181610f7c565b9392505050565b600060208284031215610fca57600080fd5b5035919050565b600060208284031215610fe357600080fd5b81518015158114610fb157600080fd5b600181811c9082168061100757607f821691505b60208210811415611041577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600080600080600060a0868803121561105f57600080fd5b855161106a81610f7c565b80955050602086015193506040860151925060608601519150608086015161109181610f7c565b809150509295509295909350565b6000602082840312156110b157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615611128576111286110b8565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615611163576111636110b8565b6000871292508782058712848416161561117f5761117f6110b8565b87850587128184161615611195576111956110b8565b505050929093029392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826111e1576111e16111a3565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615611235576112356110b8565b500590565b6000821982111561124d5761124d6110b8565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561128a5761128a6110b8565b500290565b60008261129e5761129e6111a3565b50049056fea26469706673582212201ac3e66d7646fe6cc19eeb98703f28a4e57d890bef3635f1ed53ec7a4ea130d864736f6c634300080a0033a26469706673582212203dc2e71dea9cc200254ee285e57731b1416589a9bcb5cbbca2ae4bdd3867ed0b64736f6c634300080a0033"; - -type CurveLPPriceFeedTestConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: CurveLPPriceFeedTestConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class CurveLPPriceFeedTest__factory extends ContractFactory { - constructor(...args: CurveLPPriceFeedTestConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): CurveLPPriceFeedTest { - return super.attach(address) as CurveLPPriceFeedTest; - } - override connect(signer: Signer): CurveLPPriceFeedTest__factory { - return super.connect(signer) as CurveLPPriceFeedTest__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): CurveLPPriceFeedTestInterface { - return new utils.Interface(_abi) as CurveLPPriceFeedTestInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): CurveLPPriceFeedTest { - return new Contract( - address, - _abi, - signerOrProvider - ) as CurveLPPriceFeedTest; - } -} diff --git a/src/types/factories/contracts/test/oracles/CurveLPPriceFeed.t.sol/index.ts b/src/types/factories/contracts/test/oracles/CurveLPPriceFeed.t.sol/index.ts deleted file mode 100644 index 4e35b67b..00000000 --- a/src/types/factories/contracts/test/oracles/CurveLPPriceFeed.t.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { CurveLPPriceFeedTest__factory } from "./CurveLPPriceFeedTest__factory"; diff --git a/src/types/factories/contracts/test/oracles/LPPriceFeed.t.sol/LPPriceFeedTest__factory.ts b/src/types/factories/contracts/test/oracles/LPPriceFeed.t.sol/LPPriceFeedTest__factory.ts deleted file mode 100644 index 5f1d5100..00000000 --- a/src/types/factories/contracts/test/oracles/LPPriceFeed.t.sol/LPPriceFeedTest__factory.ts +++ /dev/null @@ -1,480 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - LPPriceFeedTest, - LPPriceFeedTestInterface, -} from "../../../../../contracts/test/oracles/LPPriceFeed.t.sol/LPPriceFeedTest"; - -const _abi = [ - { - inputs: [], - name: "ChainPriceStaleException", - type: "error", - }, - { - inputs: [], - name: "IncorrectLimitsException", - type: "error", - }, - { - inputs: [], - name: "PriceOracleNotExistsException", - type: "error", - }, - { - inputs: [], - name: "ValueOutOfRangeExpcetion", - type: "error", - }, - { - inputs: [], - name: "ZeroPriceException", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "lowerBound", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "upperBound", - type: "uint256", - }, - ], - name: "NewLimiterParams", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "", - type: "address", - }, - ], - name: "log_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "log_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - name: "log_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "int256", - name: "", - type: "int256", - }, - ], - name: "log_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "address", - name: "val", - type: "address", - }, - ], - name: "log_named_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes", - name: "val", - type: "bytes", - }, - ], - name: "log_named_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes32", - name: "val", - type: "bytes32", - }, - ], - name: "log_named_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - ], - name: "log_named_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "string", - name: "val", - type: "string", - }, - ], - name: "log_named_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - ], - name: "log_named_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "log_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "logs", - type: "event", - }, - { - inputs: [], - name: "IS_TEST", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "addressProvider", - outputs: [ - { - internalType: "contract AddressProviderACLMock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "failed", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "pf", - outputs: [ - { - internalType: "contract LPPriceFeedMock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "setUp", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_LPF_01_constructor_sets_correct_values", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_LPF_02_getRoundData_reverts", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "test_LPF_03_latestRoundData_works_correctly", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_LPF_04_setLimiter_reverts_for_non_configurator_or_with_zero_value", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "test_LPF_05_setLimiter_sets_bounds_correctly", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, -]; - -const _bytecode = - "0x60806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d000117905534801561003957600080fd5b50612f7e806100496000396000f3fe60806040523480156200001157600080fd5b5060043610620000cd5760003560e01c806382948f8a116200007f578063c4b6fdff1162000062578063c4b6fdff1462000186578063ccadf7d11462000190578063fa7626d414620001b157600080fd5b806382948f8a1462000161578063ba414fa6146200016b57600080fd5b80632954018c11620000b45780632954018c14620000f55780632b36eb751462000140578063532f9452146200015757600080fd5b80630a9254e414620000d2578063160094db14620000de575b600080fd5b620000dc620001bf565b005b620000dc620000ef36600462001897565b62000445565b600154620001169073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b620000dc6200015136600462001897565b620008ca565b620000dc62000cf3565b620000dc62000ec3565b6200017562001193565b604051901515815260200162000137565b620000dc620012fd565b600254620001169073ffffffffffffffffffffffffffffffffffffffff1681565b600054620001759060ff1681565b6000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b1580156200024457600080fd5b505af115801562000259573d6000803e3d6000fd5b505050506040516200026b906200187b565b604051809103906000f08015801562000288573d6000803e3d6000fd5b50600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216918217905560405160c890620002de9062001889565b73ffffffffffffffffffffffffffffffffffffffff909216825260208201526060604082018190526004908201527f4d4f434b00000000000000000000000000000000000000000000000000000000608082015260a001604051809103906000f08015801562000352573d6000803e3d6000fd5b50600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316908117909155600054604080517fc657c71800000000000000000000000000000000000000000000000000000000815260048101939093526024830152600d60448301527f4c505f50524943455f464545440000000000000000000000000000000000000060648301526201000090049091169063c657c718906084015b600060405180830381600087803b1580156200042a57600080fd5b505af11580156200043f573d6000803e3d6000fd5b50505050565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff16634c63e56282158015906200049657507dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83105b6040518263ffffffff1660e01b8152600401620004b7911515815260200190565b600060405180830381600087803b158015620004d257600080fd5b505af1158015620004e7573d6000803e3d6000fd5b5060009250612710915062000500905060c882620018e0565b6200050c9084620018fb565b6200051891906200193b565b600080546040517f491cc7c200000000000000000000000000000000000000000000000000000000815260048101839052602481018390526044810192909252600160648301529192506201000090910473ffffffffffffffffffffffffffffffffffffffff169063491cc7c290608401600060405180830381600087803b158015620005a457600080fd5b505af1158015620005b9573d6000803e3d6000fd5b505060408051858152602081018590527f82e7ee47180a631312683eeb2a85ad264c9af490d54de5a75bbdb95b968c6de2935001905060405180910390a16000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b1580156200067c57600080fd5b505af115801562000691573d6000803e3d6000fd5b50506002546040517fbc489a650000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff909116925063bc489a659150602401600060405180830381600087803b1580156200070257600080fd5b505af115801562000717573d6000803e3d6000fd5b50505050620007f0600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a384d6ff6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200078d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007b3919062001977565b836040518060400160405280601581526020017f496e636f7272656374206c6f77657220626f756e64000000000000000000000081525062001444565b600254604080517fb09ad8a00000000000000000000000000000000000000000000000000000000081529051620008c69273ffffffffffffffffffffffffffffffffffffffff169163b09ad8a09160048083019260209291908290030181865afa15801562000863573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000889919062001977565b826040518060400160405280601581526020017f496e636f727265637420757070657220626f756e64000000000000000000000081525062001444565b5050565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff16634c63e56282158015906200091b57507dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83105b6040518263ffffffff1660e01b81526004016200093c911515815260200190565b600060405180830381600087803b1580156200095757600080fd5b505af11580156200096c573d6000803e3d6000fd5b50506000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063ca669fa79150602401600060405180830381600087803b158015620009f557600080fd5b505af115801562000a0a573d6000803e3d6000fd5b50506002546040517fbc489a650000000000000000000000000000000000000000000000000000000081526004810185905273ffffffffffffffffffffffffffffffffffffffff909116925063bc489a659150602401600060405180830381600087803b15801562000a7b57600080fd5b505af115801562000a90573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb416da7f0000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b15801562000b2557600080fd5b505af115801562000b3a573d6000803e3d6000fd5b505060025473ffffffffffffffffffffffffffffffffffffffff16915063be622e74905062000b6b60018462001991565b6040518263ffffffff1660e01b815260040162000b8a91815260200190565b602060405180830381865afa15801562000ba8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000bce919062001977565b5060025460009073ffffffffffffffffffffffffffffffffffffffff1663be622e7461271062000c0060c882620018e0565b62000c0c9086620018fb565b62000c1891906200193b565b62000c25906001620018e0565b6040518263ffffffff1660e01b815260040162000c4491815260200190565b602060405180830381865afa15801562000c62573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c88919062001977565b9050620008c68161271062000c9f60c882620018e0565b62000cab9086620018fb565b62000cb791906200193b565b6040518060400160405280602081526020017f557070657220626f756e6465642076616c756520697320696e636f727265637481525062001444565b600254604080517f7284e416000000000000000000000000000000000000000000000000000000008152905162000dea9273ffffffffffffffffffffffffffffffffffffffff1691637284e4169160048083019260009291908290030181865afa15801562000d66573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262000dae919081019062001a09565b6040518060400160405280600481526020017f4d4f434b0000000000000000000000000000000000000000000000000000000081525062001496565b600254604080517f12b495a8000000000000000000000000000000000000000000000000000000008152905162000ec19273ffffffffffffffffffffffffffffffffffffffff16916312b495a89160048083019260209291908290030181865afa15801562000e5d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e83919062001977565b60c86040518060400160405280600f81526020017f496e636f72726563742064656c7461000000000000000000000000000000000081525062001444565b565b6000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f61081c150000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c31eb0e090602401600060405180830381600087803b15801562000f5457600080fd5b505af115801562000f69573d6000803e3d6000fd5b50506002546040517fbc489a65000000000000000000000000000000000000000000000000000000008152602c600482015273ffffffffffffffffffffffffffffffffffffffff909116925063bc489a659150602401600060405180830381600087803b15801562000fda57600080fd5b505af115801562000fef573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f9aadd6f00000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b1580156200108457600080fd5b505af115801562001099573d6000803e3d6000fd5b50506000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063ca669fa79150602401600060405180830381600087803b1580156200112257600080fd5b505af115801562001137573d6000803e3d6000fd5b50506002546040517fbc489a650000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff909116925063bc489a6591506024016200040f565b60008054610100900460ff1615620011b45750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620012f85760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c65640000000000000000000000000000000000000000000000000000828401528251808303840181526060830190935260009290916200125c917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc49160800162001ae0565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052620012969162001b2a565b6000604051808303816000865af19150503d8060008114620012d5576040519150601f19603f3d011682016040523d82523d6000602084013e620012da565b606091505b5091505080806020019051810190620012f4919062001b48565b9150505b919050565b6000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f24e46f700000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c31eb0e090602401600060405180830381600087803b1580156200138e57600080fd5b505af1158015620013a3573d6000803e3d6000fd5b50506002546040517f9a6fc8f50000000000000000000000000000000000000000000000000000000081526001600482015273ffffffffffffffffffffffffffffffffffffffff9091169250639a6fc8f5915060240160a060405180830381865afa15801562001417573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200143d919062001b8e565b5050505050565b81831462001491577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf3583816040516200147d919062001c2f565b60405180910390a1620014918383620015f8565b505050565b80604051602001620014a9919062001b2a565b6040516020818303038152906040528051906020012082604051602001620014d2919062001b2a565b6040516020818303038152906040528051906020012014620008c6577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f50604051620015749060208082526024908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b73747260408201527f696e675d00000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf358381604051620015ad919062001c78565b60405180910390a17f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf358382604051620015e6919062001cd2565b60405180910390a1620008c6620016f8565b808214620008c6577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f50604051620016869060208082526022908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b75696e60408201527f745d000000000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a881604051620016bf919062001d10565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a882604051620015e6919062001d5c565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200184d5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000009282019290925260016060820152600091907f70ca10bbd0dbfd9020a9f4b13402c16cb120705e0d1c0aeab10fa353ae586fc490608001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052620017ca929160200162001ae0565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052620018049162001b2a565b6000604051808303816000865af19150503d806000811462001843576040519150601f19603f3d011682016040523d82523d6000602084013e62001848565b606091505b505050505b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055565b6102b08062001d9b83390190565b610efe806200204b83390190565b600060208284031215620018aa57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115620018f657620018f6620018b1565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620019365762001936620018b1565b500290565b60008262001972577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000602082840312156200198a57600080fd5b5051919050565b600082821015620019a657620019a6620018b1565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60005b83811015620019f7578181015183820152602001620019dd565b838111156200043f5750506000910152565b60006020828403121562001a1c57600080fd5b815167ffffffffffffffff8082111562001a3557600080fd5b818401915084601f83011262001a4a57600080fd5b81518181111562001a5f5762001a5f620019ab565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171562001aa85762001aa8620019ab565b8160405282815287602084870101111562001ac257600080fd5b62001ad5836020830160208801620019da565b979650505050505050565b7fffffffff00000000000000000000000000000000000000000000000000000000831681526000825162001b1c816004850160208701620019da565b919091016004019392505050565b6000825162001b3e818460208701620019da565b9190910192915050565b60006020828403121562001b5b57600080fd5b8151801515811462001b6c57600080fd5b9392505050565b805169ffffffffffffffffffff81168114620012f857600080fd5b600080600080600060a0868803121562001ba757600080fd5b62001bb28662001b73565b945060208601519350604086015192506060860151915062001bd76080870162001b73565b90509295509295909350565b6000815180845262001bfd816020860160208601620019da565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60408152600560408201527f4572726f72000000000000000000000000000000000000000000000000000000606082015260806020820152600062001b6c608083018462001be3565b60408152600062001cb660408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b828103602084015262001cca818562001be3565b949350505050565b60408152600062001cb660408301600a81527f2020202041637475616c00000000000000000000000000000000000000000000602082015260400190565b60408152600062001d4e60408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b905082602083015292915050565b60408152600062001d4e60408301600a81527f2020202041637475616c0000000000000000000000000000000000000000000060208201526040019056fe608060405234801561001057600080fd5b50600080546001600160a01b031990811630908117835560028054909216179055338152600160208190526040909120805460ff191690911790556102568061005a6000396000f3fe608060405234801561001057600080fd5b50600436106100675760003560e01c806376e112861161005057806376e11286146100e95780639dcb511a1461014c578063fca513a81461018257600080fd5b8063087376951461006c5780635f259aba146100b6575b600080fd5b60005461008c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6100d96100c43660046101cb565b60016020526000908152604090205460ff1681565b60405190151581526020016100ad565b61014a6100f73660046101ed565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001691909216179055565b005b61008c61015a3660046101cb565b60036020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60025461008c9073ffffffffffffffffffffffffffffffffffffffff1681565b803573ffffffffffffffffffffffffffffffffffffffff811681146101c657600080fd5b919050565b6000602082840312156101dd57600080fd5b6101e6826101a2565b9392505050565b6000806040838503121561020057600080fd5b610209836101a2565b9150610217602084016101a2565b9050925092905056fea26469706673582212204291f208ba289dc45c65523845755f7f16fafcfe35cecba679ed1b9627e274ee64736f6c634300080a003360c06040523480156200001157600080fd5b5060405162000efe38038062000efe8339810160408190526200003491620001da565b6000805460ff19169055828282826001600160a01b0381166200006a57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000a9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cf9190620002d6565b6001600160a01b0316608052508051620000f190600290602084019062000101565b505060a052506200033892505050565b8280546200010f90620002fb565b90600052602060002090601f0160209004810192826200013357600085556200017e565b82601f106200014e57805160ff19168380011785556200017e565b828001600101855582156200017e579182015b828111156200017e57825182559160200191906001019062000161565b506200018c92915062000190565b5090565b5b808211156200018c576000815560010162000191565b80516001600160a01b0381168114620001bf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600080600060608486031215620001f057600080fd5b620001fb84620001a7565b60208581015160408701519295509350906001600160401b03808211156200022257600080fd5b818701915087601f8301126200023757600080fd5b8151818111156200024c576200024c620001c4565b604051601f8201601f19908116603f01168101908382118183101715620002775762000277620001c4565b816040528281528a868487010111156200029057600080fd5b600093505b82841015620002b4578484018601518185018701529285019262000295565b82841115620002c65760008684830101525b8096505050505050509250925092565b600060208284031215620002e957600080fd5b620002f482620001a7565b9392505050565b600181811c908216806200031057607f821691505b602082108114156200033257634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a051610b846200037a6000396000818161010a01526107fa01526000818161020c015281816102c30152818161043f01526105770152610b846000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80639a6fc8f511610097578063bc489a6511610066578063bc489a651461025b578063be622e741461026e578063d62ada1114610281578063feaf968c1461028957600080fd5b80639a6fc8f5146101b4578063a384d6ff146101fe578063a50cf2c814610207578063b09ad8a01461025357600080fd5b806354fd4d50116100d357806354fd4d50146101785780635c975abb146101805780637284e416146101975780638456cb59146101ac57600080fd5b806312b495a814610105578063313ce5671461013f5780633f4ba83a146101595780633fd0875f14610163575b600080fd5b61012c7f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b610147600881565b60405160ff9091168152602001610136565b610161610295565b005b61016b600181565b6040516101369190610919565b61012c600181565b60005460ff165b6040519015158152602001610136565b61019f610383565b604051610136919061095a565b610161610411565b6101c76101c23660046109cd565b6104fd565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610136565b61012c60015481565b61022e7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610136565b61012c610537565b610161610269366004610a00565b610549565b61012c61027c366004610a00565b610639565b610187600181565b600160004280836101c7565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa15801561031f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103439190610a19565b610379576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61038161064a565b565b6002805461039090610a3b565b80601f01602080910402602001604051908101604052809291908181526020018280546103bc90610a3b565b80156104095780601f106103de57610100808354040283529160200191610409565b820191906000526020600020905b8154815290600101906020018083116103ec57829003601f168201915b505050505081565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561049b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104bf9190610a19565b6104f5576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610381610730565b60008060008060006040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006105446001546107f0565b905090565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156105d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f79190610a19565b61062d576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61063681610833565b50565b6000610644826108b5565b92915050565b60005460ff166106bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff161561079d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016106b2565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586107063390565b600061271061081f7f000000000000000000000000000000000000000000000000000000000000000082610abe565b6108299084610ad6565b6106449190610b13565b8061086a576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190557f82e7ee47180a631312683eeb2a85ad264c9af490d54de5a75bbdb95b968c6de28161089a816107f0565b6040805192835260208301919091520160405180910390a150565b600154600090808310156108f5576040517fb416da7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610900826107f0565b905080841115610911579392505050565b509192915050565b6020810160068310610954577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b600060208083528351808285015260005b818110156109875785810183015185820160400152820161096b565b81811115610999576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b6000602082840312156109df57600080fd5b813569ffffffffffffffffffff811681146109f957600080fd5b9392505050565b600060208284031215610a1257600080fd5b5035919050565b600060208284031215610a2b57600080fd5b815180151581146109f957600080fd5b600181811c90821680610a4f57607f821691505b60208210811415610a89577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115610ad157610ad1610a8f565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610b0e57610b0e610a8f565b500290565b600082610b49577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fea26469706673582212207c354f59e454ec524905b596dbb5f22aa4157a72f467412b02ae253c4946583764736f6c634300080a0033a2646970667358221220932c262476c279bc2c76e3c099113e3ff1a0ea39352f3dfdc1256475293f501f64736f6c634300080a0033"; - -type LPPriceFeedTestConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: LPPriceFeedTestConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class LPPriceFeedTest__factory extends ContractFactory { - constructor(...args: LPPriceFeedTestConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): LPPriceFeedTest { - return super.attach(address) as LPPriceFeedTest; - } - override connect(signer: Signer): LPPriceFeedTest__factory { - return super.connect(signer) as LPPriceFeedTest__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): LPPriceFeedTestInterface { - return new utils.Interface(_abi) as LPPriceFeedTestInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): LPPriceFeedTest { - return new Contract(address, _abi, signerOrProvider) as LPPriceFeedTest; - } -} diff --git a/src/types/factories/contracts/test/oracles/PriceOracle.t.sol/PriceOracleTest__factory.ts b/src/types/factories/contracts/test/oracles/PriceOracle.t.sol/PriceOracleTest__factory.ts deleted file mode 100644 index efa315a4..00000000 --- a/src/types/factories/contracts/test/oracles/PriceOracle.t.sol/PriceOracleTest__factory.ts +++ /dev/null @@ -1,511 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - PriceOracleTest, - PriceOracleTestInterface, -} from "../../../../../contracts/test/oracles/PriceOracle.t.sol/PriceOracleTest"; - -const _abi = [ - { - inputs: [], - name: "ChainPriceStaleException", - type: "error", - }, - { - inputs: [], - name: "PriceOracleNotExistsException", - type: "error", - }, - { - inputs: [], - name: "ZeroPriceException", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "token", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "priceFeed", - type: "address", - }, - ], - name: "NewPriceFeed", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "", - type: "address", - }, - ], - name: "log_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "log_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - name: "log_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "int256", - name: "", - type: "int256", - }, - ], - name: "log_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "address", - name: "val", - type: "address", - }, - ], - name: "log_named_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes", - name: "val", - type: "bytes", - }, - ], - name: "log_named_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes32", - name: "val", - type: "bytes32", - }, - ], - name: "log_named_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - ], - name: "log_named_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "string", - name: "val", - type: "string", - }, - ], - name: "log_named_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - ], - name: "log_named_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "log_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "logs", - type: "event", - }, - { - inputs: [], - name: "IS_TEST", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "acl", - outputs: [ - { - internalType: "contract ACL", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "addressProvider", - outputs: [ - { - internalType: "contract AddressProvider", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "failed", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "priceOracle", - outputs: [ - { - internalType: "contract PriceOracle", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "setUp", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_PO_01_constructor_sets_correct_values", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_PO_02_addPriceFeed_reverts_for_zero_address_and_incorrect_contracts", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_PO_03_addPriceFeed_adds_pricefeed_and_emits_event", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_PO_04_getPrice_reverts_if_depends_on_address_but_zero_address_was_provided", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_PO_05_getPrice_reverts_if_not_passed_skipCheck_when_its_enabled", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "int256", - name: "price", - type: "int256", - }, - ], - name: "test_PO_06_getPrice_returns_correct_price", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint128", - name: "amount", - type: "uint128", - }, - ], - name: "test_PO_07_convertFromUSD_and_convertToUSD_computes_correctly", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_PO_08_convert_computes_correctly", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_PO_09_fastCheck_computes_correctly", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, -]; - -const _bytecode = - "0x60806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d000117905534801561003957600080fd5b5062012a60806200004b6000396000f3fe60806040523480156200001157600080fd5b5060043610620001095760003560e01c8063ba414fa611620000a3578063de287359116200006e578063de2873591462000201578063e2076c381462000222578063edb88d0a146200022c578063fa7626d4146200023657600080fd5b8063ba414fa614620001bb578063cc0ba48814620001d6578063d050403714620001e0578063da8af6f314620001f757600080fd5b80632954018c11620000e45780632954018c146200017c5780639391812b146200019d5780639f72089614620001a7578063b511eb6914620001b157600080fd5b80630a9254e4146200010e5780630e943615146200011a5780632630c12f1462000131575b600080fd5b6200011862000244565b005b620001186200012b36600462005398565b620007bd565b600454620001529073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b600254620001529073ffffffffffffffffffffffffffffffffffffffff1681565b6200011862000c4e565b6200011862000e9e565b620001186200143d565b620001c56200174b565b604051901515815260200162000173565b62000118620018b5565b62000118620001f1366004620053b2565b62001b65565b6200011862002136565b600354620001529073ffffffffffffffffffffffffffffffffffffffff1681565b6200011862002a41565b6200011862003346565b600054620001c59060ff1681565b604051620002529062005344565b604051809103906000f0801580156200026f573d6000803e3d6000fd5b50600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216918217905563b36ba208620002ce670de0b6b3a764000060646200541c565b6040518263ffffffff1660e01b81526004016000604051808303818588803b158015620002fa57600080fd5b505af11580156200030f573d6000803e3d6000fd5b50506000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff1693506306447d5692506024019050600060405180830381600087803b1580156200039a57600080fd5b505af1158015620003af573d6000803e3d6000fd5b50505050604051620003c19062005352565b604051809103906000f080158015620003de573d6000803e3d6000fd5b50600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316908117909155600154604080517f4b57b0be000000000000000000000000000000000000000000000000000000008152905192936386e09c0893921691634b57b0be916004808201926020929091908290030181865afa15801562000486573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004ac919062005481565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401600060405180830381600087803b1580156200051357600080fd5b505af115801562000528573d6000803e3d6000fd5b505050506040516200053a9062005360565b604051809103906000f08015801562000557573d6000803e3d6000fd5b50600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283169081179091556002546040517f76aad6050000000000000000000000000000000000000000000000000000000081526004810192909252909116906376aad60590602401600060405180830381600087803b158015620005f557600080fd5b505af11580156200060a573d6000803e3d6000fd5b5050600254600154604080517f6ca42ae3000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169550929091169250636ca42ae39160048083019260009291908290030181865afa15801562000686573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620006ce91908101906200554c565b604051620006dc906200536e565b620006e99291906200563a565b604051809103906000f08015801562000706573d6000803e3d6000fd5b50600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92831617815560008054604080517f90c5013b000000000000000000000000000000000000000000000000000000008152905162010000909204909416936390c5013b9381810193929182900301818387803b158015620007a257600080fd5b505af1158015620007b7573d6000803e3d6000fd5b50505050565b620007c762000244565b600080546040517f4c63e562000000000000000000000000000000000000000000000000000000008152918313600483015262010000900473ffffffffffffffffffffffffffffffffffffffff1690634c63e56290602401600060405180830381600087803b1580156200083a57600080fd5b505af11580156200084f573d6000803e3d6000fd5b505050506000601160405162000865906200537c565b620008719190620056b0565b604051809103906000f0801580156200088e573d6000803e3d6000fd5b5090506000632faf08006008604051620008a8906200538a565b91825260ff166020820152604001604051809103906000f080158015620008d3573d6000803e3d6000fd5b506000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291925062010000900473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b1580156200095b57600080fd5b505af115801562000970573d6000803e3d6000fd5b5050600480546040517fe8a97a3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781169382019390935285831660248201529116925063e8a97a3e9150604401600060405180830381600087803b158015620009ec57600080fd5b505af115801562000a01573d6000803e3d6000fd5b50506040517ff7a308060000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff8416925063f7a308069150602401600060405180830381600087803b15801562000a6e57600080fd5b505af115801562000a83573d6000803e3d6000fd5b50506000546040805160048082526024820183526020820180517ffeaf968c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff90911617905291517fbd6af4340000000000000000000000000000000000000000000000000000000081526201000090930473ffffffffffffffffffffffffffffffffffffffff16945063bd6af434935062000b3a92869201620057b8565b600060405180830381600087803b15801562000b5557600080fd5b505af115801562000b6a573d6000803e3d6000fd5b5050600480546040517f41976e0900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781169382019390935260009450911691506341976e0990602401602060405180830381865afa15801562000be4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c0a9190620057f1565b9050620007b781856040518060400160405280600f81526020017f496e636f7272656374207072696365000000000000000000000000000000000081525062004e00565b6000601160405162000c60906200537c565b62000c6c9190620056b0565b604051809103906000f08015801562000c89573d6000803e3d6000fd5b5090506000632faf0800600860405162000ca3906200538a565b91825260ff166020820152604001604051809103906000f08015801562000cce573d6000803e3d6000fd5b506000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291925062010000900473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b15801562000d5657600080fd5b505af115801562000d6b573d6000803e3d6000fd5b5050600480546040517fe8a97a3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781169382019390935285831660248201529116925063e8a97a3e9150604401600060405180830381600087803b15801562000de757600080fd5b505af115801562000dfc573d6000803e3d6000fd5b5050600480546040517f41976e0900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811693820193909352911692506341976e099150602401602060405180830381865afa15801562000e73573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e999190620057f1565b505050565b60005b60028110156200143a5780151562000eb862000244565b6000601160405162000eca906200537c565b62000ed69190620056b0565b604051809103906000f08015801562000ef3573d6000803e3d6000fd5b5090506000632faf0800600860405162000f0d906200538a565b91825260ff166020820152604001604051809103906000f08015801562000f38573d6000803e3d6000fd5b5090508073ffffffffffffffffffffffffffffffffffffffff1663bd18ad538462000f6557600062000f68565b60015b6040518263ffffffff1660e01b815260040162000f8691906200583a565b600060405180830381600087803b15801562000fa157600080fd5b505af115801562000fb6573d6000803e3d6000fd5b5050600080546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600160048201819052602482015260448101839052606481019290925262010000900473ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b1580156200104257600080fd5b505af115801562001057573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff8085169350851691507fe263805b03657ab13064915d0723c5ce14981547e7cba5283f66b9e5d81f6e6e90600090a36000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b1580156200112557600080fd5b505af11580156200113a573d6000803e3d6000fd5b5050600480546040517fe8a97a3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781169382019390935285831660248201529116925063e8a97a3e9150604401600060405180830381600087803b158015620011b657600080fd5b505af1158015620011cb573d6000803e3d6000fd5b5050600480546040517ff190e5fa00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116938201939093526000945084935083929091169063f190e5fa90602401606060405180830381865afa1580156200124a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001270919062005868565b925092509250620012b883856040518060400160405280601381526020017f496e636f7272656374207072696365666565640000000000000000000000000081525062004e4d565b600480546040517f9dcb511a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811693820193909352620013949290911690639dcb511a90602401602060405180830381865afa15801562001331573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001357919062005481565b856040518060400160405280601381526020017f496e636f7272656374207072696365666565640000000000000000000000000081525062004e4d565b620013d78160116040518060400160405280601281526020017f496e636f727265637420646563696d616c73000000000000000000000000000081525062004e00565b6200141e861515831515146040518060400160405280601381526020017f496e636f727265637420736b6970436865636b0000000000000000000000000081525062004ec6565b50505050505080806200143190620058a9565b91505062000ea1565b50565b60408051608081018252600181526002602082015260039181019190915260046060820181905260005b8181101562000e995760015460009073ffffffffffffffffffffffffffffffffffffffff166367b42645858460048110620014a657620014a6620058e5565b60200201516040518263ffffffff1660e01b8152600401620014c9919062005914565b602060405180830381865afa158015620014e7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200150d919062005481565b60015490915060009073ffffffffffffffffffffffffffffffffffffffff166398cdaadf868560048110620015465762001546620058e5565b60200201516040518263ffffffff1660e01b815260040162001569919062005914565b602060405180830381865afa15801562001587573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620015ad919062005481565b600480546040517f9dcb511a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116938201939093529293506200173392911690639dcb511a90602401602060405180830381865afa15801562001628573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200164e919062005481565b600154839073ffffffffffffffffffffffffffffffffffffffff1663440864fa898860048110620016835762001683620058e5565b60200201516040518263ffffffff1660e01b8152600401620016a6919062005914565b600060405180830381865afa158015620016c4573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200170c91908101906200592b565b6040516020016200171e9190620059e8565b60405160208183030381529060405262004e4d565b505080806200174290620058a9565b91505062001467565b60008054610100900460ff16156200176c5750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620018b05760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000008284015282518083038401815260608301909352600092909162001814917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc49160800162005a2f565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526200184e9162005a79565b6000604051808303816000865af19150503d80600081146200188d576040519150601f19603f3d011682016040523d82523d6000602084013e62001892565b606091505b5091505080806020019051810190620018ac919062005a97565b9150505b919050565b600454600090819073ffffffffffffffffffffffffffffffffffffffff16635cecbd0e620018ed670de0b6b3a764000060056200541c565b6001546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906367b4264590620019469060039060040162005914565b602060405180830381865afa15801562001964573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200198a919062005481565b6001546040517f67b42645000000000000000000000000000000000000000000000000000000008152629896809173ffffffffffffffffffffffffffffffffffffffff16906367b4264590620019e69060029060040162005914565b602060405180830381865afa15801562001a04573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001a2a919062005481565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b168152600481019490945273ffffffffffffffffffffffffffffffffffffffff928316602485015260448401919091521660648201526084016040805180830381865afa15801562001aa9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001acf919062005ab5565b9150915062001b1b82650174876e80006040518060400160405280601981526020017f496e636f727265637420636f6c6c61746572616c20574554480000000000000081525062004e00565b62001b6181633b9aca006040518060400160405280601981526020017f496e636f727265637420636f6c6c61746572616c20555344430000000000000081525062004e00565b5050565b600154604080517f4b57b0be000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691634b57b0be9160048083019260209291908290030181865afa15801562001bd6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001bfc919062005481565b6001546040517f67b4264500000000000000000000000000000000000000000000000000000000815291925060009173ffffffffffffffffffffffffffffffffffffffff909116906367b426459062001c5a90600490810162005914565b602060405180830381865afa15801562001c78573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c9e919062005481565b9050600062001cba6305f5e100670de0b6b3a764000062005ada565b600480546040517ff9a650300000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff88169281019290925273ffffffffffffffffffffffffffffffffffffffff868116602484015292935062001ddb92169063f9a6503090604401602060405180830381865afa15801562001d4c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001d729190620057f1565b8262001d936fffffffffffffffffffffffffffffffff8816610c806200541c565b62001d9f919062005ada565b6040518060400160405280601e81526020017f496e636f7272656374204554482f55534420636f6e766572736174696f6e000081525062004e00565b600480546040517ff9a650300000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff87169281019290925273ffffffffffffffffffffffffffffffffffffffff848116602484015262001ef99291169063f9a6503090604401602060405180830381865afa15801562001e6b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001e919190620057f1565b8262001eb16fffffffffffffffffffffffffffffffff8816600f6200541c565b62001ebd919062005ada565b6040518060400160405280601f81526020017f496e636f7272656374204c494e4b2f55534420636f6e766572736174696f6e0081525062004e00565b600480546040517f7afb01040000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff87169281019290925273ffffffffffffffffffffffffffffffffffffffff85811660248401526200201892911690637afb010490604401602060405180830381865afa15801562001f89573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001faf9190620057f1565b610c8062001fd0846fffffffffffffffffffffffffffffffff89166200541c565b62001fdc919062005ada565b6040518060400160405280601f81526020017f496e636f727265637420555344432f45544820636f6e766572736174696f6e0081525062004e00565b600480546040517f7afb01040000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff87169281019290925273ffffffffffffffffffffffffffffffffffffffff8481166024840152620007b792911690637afb010490604401602060405180830381865afa158015620020a8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620020ce9190620057f1565b600f620020ee846fffffffffffffffffffffffffffffffff89166200541c565b620020fa919062005ada565b6040518060400160405280601f81526020017f496e636f7272656374205553442f4c494e4b20636f6e766572736174696f6e0081525062004e00565b60005b60028110156200143a578015156200215062000244565b6000601160405162002162906200537c565b6200216e9190620056b0565b604051809103906000f0801580156200218b573d6000803e3d6000fd5b5090506000632faf08006008604051620021a5906200538a565b91825260ff166020820152604001604051809103906000f080158015620021d0573d6000803e3d6000fd5b5090508073ffffffffffffffffffffffffffffffffffffffff1663bd18ad5384620021fd57600062002200565b60015b6040518263ffffffff1660e01b81526004016200221e91906200583a565b600060405180830381600087803b1580156200223957600080fd5b505af11580156200224e573d6000803e3d6000fd5b50506000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063ca669fa79150602401600060405180830381600087803b158015620022d757600080fd5b505af1158015620022ec573d6000803e3d6000fd5b5050600480546040517fe8a97a3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781169382019390935285831660248201529116925063e8a97a3e9150604401600060405180830381600087803b1580156200236857600080fd5b505af11580156200237d573d6000803e3d6000fd5b50506040517ff7a308060000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff8416925063f7a308069150602401600060405180830381600087803b158015620023ea57600080fd5b505af1158015620023ff573d6000803e3d6000fd5b50506040517fcd653afc00000000000000000000000000000000000000000000000000000000815260506004820181905242602483018190526044830152606482015273ffffffffffffffffffffffffffffffffffffffff8416925063cd653afc9150608401600060405180830381600087803b1580156200248057600080fd5b505af115801562002495573d6000803e3d6000fd5b50505050826200254a576000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f56e05d2b0000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c31eb0e090602401600060405180830381600087803b1580156200253057600080fd5b505af115801562002545573d6000803e3d6000fd5b505050505b600480546040517f41976e0900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116938201939093529116906341976e0990602401602060405180830381865afa158015620025bd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620025e39190620057f1565b506040517ff7a30806000000000000000000000000000000000000000000000000000000008152600a600482015273ffffffffffffffffffffffffffffffffffffffff82169063f7a3080690602401600060405180830381600087803b1580156200264d57600080fd5b505af115801562002662573d6000803e3d6000fd5b50506040517fcd653afc0000000000000000000000000000000000000000000000000000000081526050600482015242602482018190526044820152604e606482015273ffffffffffffffffffffffffffffffffffffffff8416925063cd653afc9150608401600060405180830381600087803b158015620026e357600080fd5b505af1158015620026f8573d6000803e3d6000fd5b5050505082620027ad576000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb1cf67550000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c31eb0e090602401600060405180830381600087803b1580156200279357600080fd5b505af1158015620027a8573d6000803e3d6000fd5b505050505b600480546040517f41976e0900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116938201939093529116906341976e0990602401602060405180830381865afa15801562002820573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620028469190620057f1565b506040517fcd653afc00000000000000000000000000000000000000000000000000000000815260506004820181905242602483015260006044830152606482015273ffffffffffffffffffffffffffffffffffffffff82169063cd653afc90608401600060405180830381600087803b158015620028c457600080fd5b505af1158015620028d9573d6000803e3d6000fd5b50505050826200298e576000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb1cf67550000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c31eb0e090602401600060405180830381600087803b1580156200297457600080fd5b505af115801562002989573d6000803e3d6000fd5b505050505b600480546040517f41976e0900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116938201939093529116906341976e0990602401602060405180830381865afa15801562002a01573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002a279190620057f1565b50505050808062002a3890620058a9565b91505062002139565b600480546001546040517f67b4264500000000000000000000000000000000000000000000000000000000815262002c749373ffffffffffffffffffffffffffffffffffffffff9384169363b66102df93670de0b6b3a7640000939116916367b426459162002ab4916003910162005914565b602060405180830381865afa15801562002ad2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002af8919062005481565b6001546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906367b426459062002b519060029060040162005914565b602060405180830381865afa15801562002b6f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002b95919062005481565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152600481019390935273ffffffffffffffffffffffffffffffffffffffff9182166024840152166044820152606401602060405180830381865afa15801562002c0d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002c339190620057f1565b63bebc20006040518060400160405280602081526020017f496e636f727265637420574554482f5553444320636f6e766572736174696f6e81525062004e00565b600480546001546040517f67b4264500000000000000000000000000000000000000000000000000000000815262002ec59373ffffffffffffffffffffffffffffffffffffffff9384169363b66102df93670de0b6b3a7640000939116916367b426459162002ce7916003910162005914565b602060405180830381865afa15801562002d05573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002d2b919062005481565b6001546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906367b426459062002d8390600490810162005914565b602060405180830381865afa15801562002da1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002dc7919062005481565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152600481019390935273ffffffffffffffffffffffffffffffffffffffff9182166024840152166044820152606401602060405180830381865afa15801562002e3f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002e659190620057f1565b600f62002e7d670de0b6b3a7640000610c806200541c565b62002e89919062005ada565b6040518060400160405280602081526020017f496e636f727265637420574554482f4c494e4b20636f6e766572736174696f6e81525062004e00565b600480546001546040517f67b42645000000000000000000000000000000000000000000000000000000008152620031069373ffffffffffffffffffffffffffffffffffffffff9384169363b66102df93670de0b6b3a7640000939116916367b426459162002f379190810162005914565b602060405180830381865afa15801562002f55573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002f7b919062005481565b600180546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116916367b426459162002fd3919060040162005914565b602060405180830381865afa15801562002ff1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003017919062005481565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152600481019390935273ffffffffffffffffffffffffffffffffffffffff9182166024840152166044820152606401602060405180830381865afa1580156200308f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620030b59190620057f1565b620030ca670de0b6b3a7640000600f6200541c565b6040518060400160405280601f81526020017f496e636f7272656374204c494e4b2f44414920636f6e766572736174696f6e0081525062004e00565b600480546001546040517f67b42645000000000000000000000000000000000000000000000000000000008152620033449373ffffffffffffffffffffffffffffffffffffffff9384169363b66102df936305f5e100939116916367b426459162003175916002910162005914565b602060405180830381865afa15801562003193573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620031b9919062005481565b600180546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116916367b426459162003211919060040162005914565b602060405180830381865afa1580156200322f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003255919062005481565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152600481019390935273ffffffffffffffffffffffffffffffffffffffff9182166024840152166044820152606401602060405180830381865afa158015620032cd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620032f39190620057f1565b62003308670de0b6b3a764000060646200541c565b6040518060400160405280601f81526020017f496e636f727265637420555344432f44414920636f6e766572736174696f6e0081525062004e00565b565b6000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16906306447d5690602401600060405180830381600087803b158015620033cb57600080fd5b505af1158015620033e0573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb2335f2e0000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b1580156200347557600080fd5b505af11580156200348a573d6000803e3d6000fd5b5050600480546040517fe8a97a3e00000000000000000000000000000000000000000000000000000000815260009281019290925273c4375b7de8af5a38a93548eb8453a498222c4ff2602483015273ffffffffffffffffffffffffffffffffffffffff16925063e8a97a3e9150604401600060405180830381600087803b1580156200351657600080fd5b505af11580156200352b573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb2335f2e0000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b158015620035c057600080fd5b505af1158015620035d5573d6000803e3d6000fd5b5050600480546040517fe8a97a3e00000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff2928101929092526000602483015273ffffffffffffffffffffffffffffffffffffffff16925063e8a97a3e9150604401600060405180830381600087803b1580156200366157600080fd5b505af115801562003676573d6000803e3d6000fd5b50506000546040805173c4375b7de8af5a38a93548eb8453a498222c4ff260248083019190915282518083039091018152604490910182526020810180517fdf4c572d000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff90911617905290517ff28dceb30000000000000000000000000000000000000000000000000000000081526201000090920473ffffffffffffffffffffffffffffffffffffffff16935063f28dceb39250620037519160040162005b16565b600060405180830381600087803b1580156200376c57600080fd5b505af115801562003781573d6000803e3d6000fd5b5050600480546040517fe8a97a3e00000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff29281019290925230602483015273ffffffffffffffffffffffffffffffffffffffff16925063e8a97a3e9150604401600060405180830381600087803b1580156200380c57600080fd5b505af115801562003821573d6000803e3d6000fd5b5050600054604080517393548eb8453a498222c4ff2c4375b7de8af5a38a60248083019190915282518083039091018152604490910182526020810180517fdf4c572d000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff90911617905290517ff28dceb30000000000000000000000000000000000000000000000000000000081526201000090920473ffffffffffffffffffffffffffffffffffffffff16935063f28dceb39250620038fc9160040162005b16565b600060405180830381600087803b1580156200391757600080fd5b505af11580156200392c573d6000803e3d6000fd5b5050600480546040517fe8a97a3e00000000000000000000000000000000000000000000000000000000815230928101929092527393548eb8453a498222c4ff2c4375b7de8af5a38a602483015273ffffffffffffffffffffffffffffffffffffffff16925063e8a97a3e9150604401600060405180830381600087803b158015620039b757600080fd5b505af1158015620039cc573d6000803e3d6000fd5b505050506000632faf08006008604051620039e7906200538a565b91825260ff166020820152604001604051809103906000f08015801562003a12573d6000803e3d6000fd5b506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f528ca31d00000000000000000000000000000000000000000000000000000000600482015291925062010000900473ffffffffffffffffffffffffffffffffffffffff169063c31eb0e090602401600060405180830381600087803b15801562003aa657600080fd5b505af115801562003abb573d6000803e3d6000fd5b5050600480546040517fe8a97a3e000000000000000000000000000000000000000000000000000000008152309281019290925273ffffffffffffffffffffffffffffffffffffffff858116602484015216925063e8a97a3e9150604401600060405180830381600087803b15801562003b3457600080fd5b505af115801562003b49573d6000803e3d6000fd5b505050506000601360405162003b5f906200537c565b62003b6b919062005b2b565b604051809103906000f08015801562003b88573d6000803e3d6000fd5b506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f528ca31d00000000000000000000000000000000000000000000000000000000600482015291925062010000900473ffffffffffffffffffffffffffffffffffffffff169063c31eb0e090602401600060405180830381600087803b15801562003c1c57600080fd5b505af115801562003c31573d6000803e3d6000fd5b5050600480546040517fe8a97a3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681169382019390935286831660248201529116925063e8a97a3e9150604401600060405180830381600087803b15801562003cad57600080fd5b505af115801562003cc2573d6000803e3d6000fd5b5050600180546040517f67b426450000000000000000000000000000000000000000000000000000000081526000945073ffffffffffffffffffffffffffffffffffffffff90911692506367b426459162003d209160040162005914565b602060405180830381865afa15801562003d3e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003d64919062005481565b6000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f67a7cd4300000000000000000000000000000000000000000000000000000000600482015291925062010000900473ffffffffffffffffffffffffffffffffffffffff169063c31eb0e090602401600060405180830381600087803b15801562003df757600080fd5b505af115801562003e0c573d6000803e3d6000fd5b5050600480546040517fe8a97a3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116938201939093523060248201529116925063e8a97a3e9150604401600060405180830381600087803b15801562003e8657600080fd5b505af115801562003e9b573d6000803e3d6000fd5b505050506000600a600960405162003eb3906200538a565b91825260ff166020820152604001604051809103906000f08015801562003ede573d6000803e3d6000fd5b506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f67a7cd4300000000000000000000000000000000000000000000000000000000600482015291925062010000900473ffffffffffffffffffffffffffffffffffffffff169063c31eb0e090602401600060405180830381600087803b15801562003f7257600080fd5b505af115801562003f87573d6000803e3d6000fd5b5050600480546040517fe8a97a3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781169382019390935285831660248201529116925063e8a97a3e9150604401600060405180830381600087803b1580156200400357600080fd5b505af115801562004018573d6000803e3d6000fd5b50506040517f67e8d83d0000000000000000000000000000000000000000000000000000000081526001600482015273ffffffffffffffffffffffffffffffffffffffff871692506367e8d83d9150602401600060405180830381600087803b1580156200408557600080fd5b505af11580156200409a573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f67a7cd430000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b1580156200412f57600080fd5b505af115801562004144573d6000803e3d6000fd5b5050600480546040517fe8a97a3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781169382019390935288831660248201529116925063e8a97a3e9150604401600060405180830381600087803b158015620041c057600080fd5b505af1158015620041d5573d6000803e3d6000fd5b50506040517ff7a308060000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff8716925063f7a308069150602401600060405180830381600087803b1580156200424257600080fd5b505af115801562004257573d6000803e3d6000fd5b50506040517fcd653afc00000000000000000000000000000000000000000000000000000000815260506004820181905242602483018190526044830152606482015273ffffffffffffffffffffffffffffffffffffffff8716925063cd653afc9150608401600060405180830381600087803b158015620042d857600080fd5b505af1158015620042ed573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f67a7cd430000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b1580156200438257600080fd5b505af115801562004397573d6000803e3d6000fd5b5050600480546040517fe8a97a3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781169382019390935288831660248201529116925063e8a97a3e9150604401600060405180830381600087803b1580156200441357600080fd5b505af115801562004428573d6000803e3d6000fd5b50506040517f67e8d83d0000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff871692506367e8d83d9150602401600060405180830381600087803b1580156200449557600080fd5b505af1158015620044aa573d6000803e3d6000fd5b50506040517ff7a308060000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff8716925063f7a308069150602401600060405180830381600087803b1580156200451757600080fd5b505af11580156200452c573d6000803e3d6000fd5b50506040517fcd653afc00000000000000000000000000000000000000000000000000000000815260506004820181905242602483018190526044830152606482015273ffffffffffffffffffffffffffffffffffffffff8716925063cd653afc9150608401600060405180830381600087803b158015620045ad57600080fd5b505af1158015620045c2573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f56e05d2b0000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b1580156200465757600080fd5b505af11580156200466c573d6000803e3d6000fd5b5050600480546040517fe8a97a3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781169382019390935288831660248201529116925063e8a97a3e9150604401600060405180830381600087803b158015620046e857600080fd5b505af1158015620046fd573d6000803e3d6000fd5b50506040517ff7a30806000000000000000000000000000000000000000000000000000000008152600a600482015273ffffffffffffffffffffffffffffffffffffffff8716925063f7a308069150602401600060405180830381600087803b1580156200476a57600080fd5b505af11580156200477f573d6000803e3d6000fd5b50506040517fcd653afc0000000000000000000000000000000000000000000000000000000081526050600482015242602482018190526044820152604e606482015273ffffffffffffffffffffffffffffffffffffffff8716925063cd653afc9150608401600060405180830381600087803b1580156200480057600080fd5b505af115801562004815573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb1cf67550000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b158015620048aa57600080fd5b505af1158015620048bf573d6000803e3d6000fd5b5050600480546040517fe8a97a3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781169382019390935288831660248201529116925063e8a97a3e9150604401600060405180830381600087803b1580156200493b57600080fd5b505af115801562004950573d6000803e3d6000fd5b50506040517f67e8d83d0000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff871692506367e8d83d9150602401600060405180830381600087803b158015620049bd57600080fd5b505af1158015620049d2573d6000803e3d6000fd5b50506040517ff7a30806000000000000000000000000000000000000000000000000000000008152600a600482015273ffffffffffffffffffffffffffffffffffffffff8716925063f7a308069150602401600060405180830381600087803b15801562004a3f57600080fd5b505af115801562004a54573d6000803e3d6000fd5b50506040517fcd653afc0000000000000000000000000000000000000000000000000000000081526050600482015242602482018190526044820152604e606482015273ffffffffffffffffffffffffffffffffffffffff8716925063cd653afc9150608401600060405180830381600087803b15801562004ad557600080fd5b505af115801562004aea573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb1cf67550000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b15801562004b7f57600080fd5b505af115801562004b94573d6000803e3d6000fd5b5050600480546040517fe8a97a3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781169382019390935288831660248201529116925063e8a97a3e9150604401600060405180830381600087803b15801562004c1057600080fd5b505af115801562004c25573d6000803e3d6000fd5b50506040517fcd653afc00000000000000000000000000000000000000000000000000000000815260506004820181905242602483015260006044830152606482015273ffffffffffffffffffffffffffffffffffffffff8716925063cd653afc9150608401600060405180830381600087803b15801562004ca657600080fd5b505af115801562004cbb573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb1cf67550000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b15801562004d5057600080fd5b505af115801562004d65573d6000803e3d6000fd5b5050600480546040517fe8a97a3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781169382019390935288831660248201529116925063e8a97a3e9150604401600060405180830381600087803b15801562004de157600080fd5b505af115801562004df6573d6000803e3d6000fd5b5050505050505050565b81831462000e99577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf35838160405162004e39919062005ba6565b60405180910390a162000e99838362004f10565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161462000e99577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf35838160405162004eb2919062005ba6565b60405180910390a162000e99838362005022565b8162001b61577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf35838160405162004efd919062005ba6565b60405180910390a162001b61826200514e565b80821462001b61577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f5060405162004f9e9060208082526022908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b75696e60408201527f745d000000000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a88160405162004fd7919062005bef565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a88260405162005010919062005c3b565b60405180910390a162001b61620051c1565b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462001b61577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f50604051620050dc9060208082526025908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b61646460408201527f726573735d000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f8160405162005115919062005c79565b60405180910390a17f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f8260405162005010919062005cdb565b806200143a577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f50604051620051b49060208082526017908201527f4572726f723a20417373657274696f6e204661696c6564000000000000000000604082015260600190565b60405180910390a16200143a5b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620053165760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000009282019290925260016060820152600091907f70ca10bbd0dbfd9020a9f4b13402c16cb120705e0d1c0aeab10fa353ae586fc490608001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905262005293929160200162005a2f565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052620052cd9162005a79565b6000604051808303816000865af19150503d80600081146200530c576040519150601f19603f3d011682016040523d82523d6000602084013e62005311565b606091505b505050505b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055565b617a518062005d1a83390190565b610fcd806200d76b83390190565b61098c806200e73883390190565b611b45806200f0c483390190565b6117588062010c0983390190565b6106ca806201236183390190565b600060208284031215620053ab57600080fd5b5035919050565b600060208284031215620053c557600080fd5b81356fffffffffffffffffffffffffffffffff81168114620053e657600080fd5b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620054575762005457620053ed565b500290565b805173ffffffffffffffffffffffffffffffffffffffff81168114620018b057600080fd5b6000602082840312156200549457600080fd5b620053e6826200545c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715620054f457620054f46200549f565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156200554457620055446200549f565b604052919050565b600060208083850312156200556057600080fd5b825167ffffffffffffffff808211156200557957600080fd5b818501915085601f8301126200558e57600080fd5b815181811115620055a357620055a36200549f565b620055b3848260051b01620054fa565b818152848101925060069190911b830184019087821115620055d457600080fd5b928401925b818410156200562f5760408489031215620055f45760008081fd5b620055fe620054ce565b62005609856200545c565b8152620056188686016200545c565b8187015283526040939093019291840191620055d9565b979650505050505050565b6000604080830173ffffffffffffffffffffffffffffffffffffffff808716855260208381870152828751808552606088019150828901945060005b81811015620056a1578551805186168452840151851684840152948301949186019160010162005676565b50909998505050505050505050565b606081526000620056ee60608301600581527f546f6b656e000000000000000000000000000000000000000000000000000000602082015260400190565b82810360208401526200572b81600581527f546f6b656e000000000000000000000000000000000000000000000000000000602082015260400190565b91505060ff8316604083015292915050565b60005b838110156200575a57818101518382015260200162005740565b83811115620007b75750506000910152565b60008151808452620057868160208601602086016200573d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff83168152604060208201526000620057e960408301846200576c565b949350505050565b6000602082840312156200580457600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60208101600383106200585157620058516200580b565b91905290565b80518015158114620018b057600080fd5b6000806000606084860312156200587e57600080fd5b62005889846200545c565b9250620058996020850162005857565b9150604084015190509250925092565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415620058de57620058de620053ed565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60208101600b83106200585157620058516200580b565b6000602082840312156200593e57600080fd5b815167ffffffffffffffff808211156200595757600080fd5b818401915084601f8301126200596c57600080fd5b8151818111156200598157620059816200549f565b620059b460207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601620054fa565b9150808252856020828501011115620059cc57600080fd5b620059df8160208401602086016200573d565b50949350505050565b7f496e636f7272656374207072696365666565642000000000000000000000000081526000825162005a228160148501602087016200573d565b9190910160140192915050565b7fffffffff00000000000000000000000000000000000000000000000000000000831681526000825162005a6b8160048501602087016200573d565b919091016004019392505050565b6000825162005a8d8184602087016200573d565b9190910192915050565b60006020828403121562005aaa57600080fd5b620053e68262005857565b6000806040838503121562005ac957600080fd5b505080516020909101519092909150565b60008262005b11577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b602081526000620053e660208301846200576c565b60608152600062005b6960608301600581527f31392d3139000000000000000000000000000000000000000000000000000000602082015260400190565b82810360208401526200572b81600581527f31392d3139000000000000000000000000000000000000000000000000000000602082015260400190565b60408152600560408201527f4572726f720000000000000000000000000000000000000000000000000000006060820152608060208201526000620053e660808301846200576c565b60408152600062005c2d60408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b905082602083015292915050565b60408152600062005c2d60408301600a81527f2020202041637475616c00000000000000000000000000000000000000000000602082015260400190565b60408152600062005cb760408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b905073ffffffffffffffffffffffffffffffffffffffff8316602083015292915050565b60408152600062005cb760408301600a81527f2020202041637475616c0000000000000000000000000000000000000000000060208201526040019056fe60806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d00011790553480156200003a57600080fd5b506040805161018081019091526000908060c081018060018152604080518082018252600381526244414960e81b6020828101919091528301526012908201526305f5e100606082015260800160018152602001600081525081526020016040518060c001604052806002600a811115620000b957620000b962000b78565b815260408051808201825260048152635553444360e01b6020828101919091528301526006908201526305f5e100606082015260800160018152602001600081525081526020016040518060c001604052806003600a81111562000121576200012162000b78565b815260408051808201825260048152630ae8aa8960e31b602082810191909152830152601290820152644a817c8000606082015260800160028152602001600081525081526020016040518060c001604052806004600a8111156200018a576200018a62000b78565b815260408051808201825260048152634c494e4b60e01b6020828101919091528301526012908201526359682f00606082015260800160018152602001600081525081526020016040518060c001604052806005600a811115620001f257620001f262000b78565b815260408051808201825260048152631554d11560e21b602082810191909152830152601290820152633b023380606082015260800160018152602001600081525081526020016040518060c001604052806006600a8111156200025a576200025a62000b78565b815260408051808201825260058152640e6e88aa8960db1b602082810191909152830152601290820152644cd588640060608201526080016003815260200160009052905260408051610140810190915290915060009080608081018060078152602001604051806040016040528060048152602001636344414960e01b8152508152602001601260ff1681526020016305f5e100815260200160048081111562000309576200030962000b78565b8152602001600181525081526020016040518060c001604052806008600a81111562000339576200033962000b78565b81526040805180820182526005815264635553444360d81b6020828101919091528301526006908201526305f5e100606082015260800160048152602001600281525081526020016040518060c001604052806009600a811115620003a257620003a262000b78565b8152604080518082018252600581526418d554d11560da1b602082810191909152830152601290820152633b023380606082015260800160048152602001600581525081526020016040518060c00160405280600a808111156200040a576200040a62000b78565b81526040805180820182526005815264634c494e4b60d81b6020828101919091528301526012908201526359682f00606082015260800160048152602001600490529052905060005b600681101562000496576200048183826006811062000476576200047662000b8e565b6020020151620004db565b806200048d8162000ba4565b91505062000453565b5060005b6004811015620004d257620004bd82826004811062000476576200047662000b8e565b80620004c98162000ba4565b9150506200049a565b50505062000d14565b6000600282608001516004811115620004f857620004f862000b78565b14156200054e576040516200050d9062000a8c565b604051809103906000f0801580156200052a573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b03831617905590506200071e565b60038260800151600481111562000569576200056962000b78565b1415620005a4576040516200057e9062000a9a565b604051809103906000f0801580156200059b573d6000803e3d6000fd5b5090506200071e565b600182608001516004811115620005bf57620005bf62000b78565b1415620005f157816020015182602001518360400151604051620005e39062000aa8565b6200057e9392919062000c1e565b6004826080015160048111156200060c576200060c62000b78565b1415620006be576000600260008460a00151600a81111562000632576200063262000b78565b600a81111562000646576200064662000b78565b815260200190815260200160002060009054906101000a90046001600160a01b0316905082602001518360200151846040015183604051620006889062000ab6565b62000697949392919062000c5b565b604051809103906000f080158015620006b4573d6000803e3d6000fd5b509150506200071e565b60405162461bcd60e51b815260206004820152602b60248201527f74657374546f6b656e53756974653a204372656174696e6720756e6b6e6f776e60448201526a20746f6b656e207479706560a81b606482015260840160405180910390fd5b60005460208301516040516318caf8e360e31b8152620100009092046001600160a01b03169163c657c718916200075b9185919060040162000ca9565b600060405180830381600087803b1580156200077657600080fd5b505af11580156200078b573d6000803e3d6000fd5b50505050600082606001516008604051620007a69062000ac4565b91825260ff166020820152604001604051809103906000f080158015620007d1573d6000803e3d6000fd5b50905081600260008560000151600a811115620007f257620007f262000b78565b600a81111562000806576200080662000b78565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055508260600151600560008560000151600a8111156200085a576200085a62000b78565b600a8111156200086e576200086e62000b78565b8152602080820192909252604090810160009081209390935585516001600160a01b03861684526008909252909120805460ff1916600183600a811115620008ba57620008ba62000b78565b02179055508260800151600360008560000151600a811115620008e157620008e162000b78565b600a811115620008f557620008f562000b78565b81526020810191909152604001600020805460ff1916600183600481111562000922576200092262000b78565b0217905550604080518082019091526001600160a01b0380841682528281166020808401918252600780546001810182556000918252945160029095027fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688810180549686166001600160a01b031997881617905592517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c689909301805493909416929094169190911790915584015184519091600491600a811115620009eb57620009eb62000b78565b600a811115620009ff57620009ff62000b78565b8152602001908152602001600020908051906020019062000a2292919062000ad2565b5080600660008560000151600a81111562000a415762000a4162000b78565b600a81111562000a555762000a5562000b78565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550505050565b610ab1806200285183390190565b611224806200330283390190565b611758806200452683390190565b6117098062005c7e83390190565b6106ca806200738783390190565b82805462000ae09062000cd7565b90600052602060002090601f01602090048101928262000b04576000855562000b4f565b82601f1062000b1f57805160ff191683800117855562000b4f565b8280016001018555821562000b4f579182015b8281111562000b4f57825182559160200191906001019062000b32565b5062000b5d92915062000b61565b5090565b5b8082111562000b5d576000815560010162000b62565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600060001982141562000bc757634e487b7160e01b600052601160045260246000fd5b5060010190565b6000815180845260005b8181101562000bf65760208185018101518683018201520162000bd8565b8181111562000c09576000602083870101525b50601f01601f19169290920160200192915050565b60608152600062000c33606083018662000bce565b828103602084015262000c47818662000bce565b91505060ff83166040830152949350505050565b60808152600062000c70608083018762000bce565b828103602084015262000c84818762000bce565b60ff95909516604084015250506001600160a01b039190911660609091015292915050565b6001600160a01b038316815260406020820181905260009062000ccf9083018462000bce565b949350505050565b600181811c9082168062000cec57607f821691505b6020821081141562000d0e57634e487b7160e01b600052602260045260246000fd5b50919050565b611b2d8062000d246000396000f3fe6080604052600436106101635760003560e01c80638eb86e8b116100c0578063c6c3bbe611610074578063d051a62211610059578063d051a62214610490578063eebab8ef146104b0578063fa7626d4146104d057600080fd5b8063c6c3bbe614610433578063c74912d21461045357600080fd5b80639b140a85116100a55780639b140a85146103e6578063b36ba20814610406578063ba414fa61461040e57600080fd5b80638eb86e8b1461038357806398cdaadf146103a357600080fd5b80636a72bde71161011757806388327863116100fc578063883278631461030857806388f776a2146103365780638a3177a31461035657600080fd5b80636a72bde7146102c45780636ca42ae3146102e657600080fd5b8063440864fa11610148578063440864fa146102025780634b57b0be1461022f57806367b426451461028157600080fd5b806304bc3b1c1461016f57806310c7f0b9146101b557600080fd5b3661016a57005b600080fd5b34801561017b57600080fd5b5061019f61018a3660046116f6565b60086020526000908152604090205460ff1681565b6040516101ac9190611742565b60405180910390f35b3480156101c157600080fd5b506101d56101d036600461175c565b6104ea565b6040805173ffffffffffffffffffffffffffffffffffffffff9384168152929091166020830152016101ac565b34801561020e57600080fd5b5061022261021d366004611784565b610530565b6040516101ac91906117cb565b34801561023b57600080fd5b5060015461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101ac565b34801561028d57600080fd5b5061025c61029c366004611784565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156102d057600080fd5b506102e46102df36600461181c565b6105ca565b005b3480156102f257600080fd5b506102fb610730565b6040516101ac919061186b565b34801561031457600080fd5b506103286103233660046118d4565b6107b5565b6040519081526020016101ac565b34801561034257600080fd5b506102e461035136600461190b565b610888565b34801561036257600080fd5b50610328610371366004611784565b60056020526000908152604090205481565b34801561038f57600080fd5b506102e461039e366004611954565b6108b9565b3480156103af57600080fd5b5061025c6103be366004611784565b60066020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156103f257600080fd5b506102e4610401366004611993565b610a73565b6102e4610b22565b34801561041a57600080fd5b50610423610ba0565b60405190151581526020016101ac565b34801561043f57600080fd5b506102e461044e3660046119b3565b610d00565b34801561045f57600080fd5b5061048361046e366004611784565b60036020526000908152604090205460ff1681565b6040516101ac91906119d3565b34801561049c57600080fd5b506103286104ab36600461190b565b610daf565b3480156104bc57600080fd5b506102e46104cb366004611954565b610e8b565b3480156104dc57600080fd5b506000546104239060ff1681565b600781815481106104fa57600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff91821692501682565b60046020526000908152604090208054610549906119e7565b80601f0160208091040260200160405190810160405280929190818152602001828054610575906119e7565b80156105c25780601f10610597576101008083540402835291602001916105c2565b820191906000526020600020905b8154815290600101906020018083116105a557829003601f168201915b505050505081565b6000546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152620100009092049091169063ca669fa790602401600060405180830381600087803b15801561063e57600080fd5b505af1158015610652573d6000803e3d6000fd5b505050506002600085600a81111561066c5761066c611713565b600a81111561067d5761067d611713565b8152602081019190915260409081016000205490517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490529091169063095ea7b3906044016020604051808303816000875af1158015610705573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107299190611a3b565b5050505050565b60606007805480602002602001604051908101604052809291908181526020016000905b828210156107ac5760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff908116835260019182015416828401529083529092019101610754565b50505050905090565b60006002600084600a8111156107cd576107cd611713565b600a8111156107de576107de611713565b8152602081019190915260409081016000205490517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152909116906370a0823190602401602060405180830381865afa15801561085d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108819190611a5d565b9392505050565b6108b48383837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6105ca565b505050565b60016003600085600a8111156108d1576108d1611713565b600a8111156108e2576108e2611713565b815260208101919091526040016000205460ff16600481111561090757610907611713565b14610999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f74657374546f6b656e53756974653a20547279696e6720746f206275726e206160448201527f206e6f6e2d6e6f726d616c20746f6b656e00000000000000000000000000000060648201526084015b60405180910390fd5b6002600084600a8111156109af576109af611713565b600a8111156109c0576109c0611713565b8152602081019190915260409081016000205490517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526024820184905290911690639dc29fac906044015b6020604051808303816000875af1158015610a49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6d9190611a3b565b50505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604081205460ff169081600a811115610aaf57610aaf611713565b1415610b17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f20746f6b656e2077697468207375636820616464726573730000000000006044820152606401610990565b610a6d818484610888565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015610b8c57600080fd5b505af1158015610729573d6000803e3d6000fd5b60008054610100900460ff1615610bc05750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610cfb5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610c65917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc491608001611a76565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052610c9d91611abe565b6000604051808303816000865af19150503d8060008114610cda576040519150601f19603f3d011682016040523d82523d6000602084013e610cdf565b606091505b5091505080806020019051810190610cf79190611a3b565b9150505b919050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604081205460ff169081600a811115610d3c57610d3c611713565b1415610da4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f20746f6b656e2077697468207375636820616464726573730000000000006044820152606401610990565b610a6d818484610e8b565b60006002600085600a811115610dc757610dc7611713565b600a811115610dd857610dd8611713565b8152602081019190915260409081016000205490517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301529091169063dd62ed3e90604401602060405180830381865afa158015610e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e839190611a5d565b949350505050565b60026003600085600a811115610ea357610ea3611713565b600a811115610eb457610eb4611713565b815260208101919091526040016000205460ff166004811115610ed957610ed9611713565b1415610ff6576000546040517fc88a5e6d000000000000000000000000000000000000000000000000000000008152306004820152602481018390526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c88a5e6d90604401600060405180830381600087803b158015610f5657600080fd5b505af1158015610f6a573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015610fd857600080fd5b505af1158015610fec573d6000803e3d6000fd5b505050505061163c565b600380600085600a81111561100d5761100d611713565b600a81111561101e5761101e611713565b815260208101919091526040016000205460ff16600481111561104357611043611713565b14156111aa576000546040517fc88a5e6d000000000000000000000000000000000000000000000000000000008152306004820152602481018390526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c88a5e6d90604401600060405180830381600087803b1580156110c057600080fd5b505af11580156110d4573d6000803e3d6000fd5b505050506002600084600a8111156110ee576110ee611713565b600a8111156110ff576110ff611713565b8152602081019190915260409081016000205490517fa1903eab00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a1903eab90839060240160206040518083038185885af115801561117f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906111a49190611a5d565b5061163c565b60046003600085600a8111156111c2576111c2611713565b600a8111156111d3576111d3611713565b815260208101919091526040016000205460ff1660048111156111f8576111f8611713565b141561148f5760006002600085600a81111561121657611216611713565b600a81111561122757611227611713565b815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c49190611ada565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600860205260409020549091506112fb9060ff163084610e8b565b8073ffffffffffffffffffffffffffffffffffffffff1663095ea7b36002600087600a81111561132d5761132d611713565b600a81111561133e5761133e611713565b81526020810191909152604090810160002054905160e083901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602481018590526044016020604051808303816000875af11580156113c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e69190611a3b565b506002600085600a8111156113fd576113fd611713565b600a81111561140e5761140e611713565b8152602081019190915260409081016000205490517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810184905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f1990604401600060405180830381600087803b158015610fd857600080fd5b60016003600085600a8111156114a7576114a7611713565b600a8111156114b8576114b8611713565b815260208101919091526040016000205460ff1660048111156114dd576114dd611713565b14156115b4576002600084600a8111156114f9576114f9611713565b600a81111561150a5761150a611713565b8152602081019190915260409081016000205490517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f19906044016020604051808303816000875af1158015611590573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a49190611a3b565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f74657374546f6b656e53756974653a20547279696e6720746f207472616e736660448201527f657220756e6b6e6f776e20746f6b656e000000000000000000000000000000006064820152608401610990565b6002600084600a81111561165257611652611713565b600a81111561166357611663611713565b8152602081019190915260409081016000205490517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490529091169063a9059cbb90604401610a2a565b73ffffffffffffffffffffffffffffffffffffffff811681146116f357600080fd5b50565b60006020828403121561170857600080fd5b8135610881816116d1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60208101600b831061175657611756611713565b91905290565b60006020828403121561176e57600080fd5b5035919050565b8035600b8110610cfb57600080fd5b60006020828403121561179657600080fd5b61088182611775565b60005b838110156117ba5781810151838201526020016117a2565b83811115610a6d5750506000910152565b60208152600082518060208401526117ea81604085016020870161179f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000806080858703121561183257600080fd5b61183b85611775565b9350602085013561184b816116d1565b9250604085013561185b816116d1565b9396929550929360600135925050565b602080825282518282018190526000919060409081850190868401855b828110156118c7578151805173ffffffffffffffffffffffffffffffffffffffff90811686529087015116868501529284019290850190600101611888565b5091979650505050505050565b600080604083850312156118e757600080fd5b6118f083611775565b91506020830135611900816116d1565b809150509250929050565b60008060006060848603121561192057600080fd5b61192984611775565b92506020840135611939816116d1565b91506040840135611949816116d1565b809150509250925092565b60008060006060848603121561196957600080fd5b61197284611775565b92506020840135611982816116d1565b929592945050506040919091013590565b6000806000606084860312156119a857600080fd5b8335611929816116d1565b6000806000606084860312156119c857600080fd5b8335611972816116d1565b602081016005831061175657611756611713565b600181811c908216806119fb57607f821691505b60208210811415611a35577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600060208284031215611a4d57600080fd5b8151801515811461088157600080fd5b600060208284031215611a6f57600080fd5b5051919050565b7fffffffff000000000000000000000000000000000000000000000000000000008316815260008251611ab081600485016020870161179f565b919091016004019392505050565b60008251611ad081846020870161179f565b9190910192915050565b600060208284031215611aec57600080fd5b8151610881816116d156fea264697066735822122010fe735ed069aca27931edce4ba2ff14ec7886bf21b0eea685a884f9200fb49e64736f6c634300080a003360c0604052600d60808190526c2bb930b83832b21022ba3432b960991b60a090815261002e916000919061007a565b50604080518082019091526004808252630ae8aa8960e31b602090920191825261005a9160019161007a565b506002805460ff1916601217905534801561007457600080fd5b5061014e565b82805461008690610113565b90600052602060002090601f0160209004810192826100a857600085556100ee565b82601f106100c157805160ff19168380011785556100ee565b828001600101855582156100ee579182015b828111156100ee5782518255916020019190600101906100d3565b506100fa9291506100fe565b5090565b5b808211156100fa57600081556001016100ff565b600181811c9082168061012757607f821691505b6020821081141561014857634e487b7160e01b600052602260045260246000fd5b50919050565b6109548061015d6000396000f3fe6080604052600436106100cb5760003560e01c806340c10f1911610074578063a9059cbb1161004e578063a9059cbb14610225578063d0e30db014610245578063dd62ed3e1461024d57600080fd5b806340c10f19146101c357806370a08231146101e357806395d89b411461021057600080fd5b806323b872dd116100a557806323b872dd146101575780632e1a7d4d14610177578063313ce5671461019757600080fd5b806306fdde03146100df578063095ea7b31461010a57806318160ddd1461013a57600080fd5b366100da576100d8610285565b005b600080fd5b3480156100eb57600080fd5b506100f46102e0565b6040516101019190610703565b60405180910390f35b34801561011657600080fd5b5061012a61012536600461079f565b61036e565b6040519015158152602001610101565b34801561014657600080fd5b50475b604051908152602001610101565b34801561016357600080fd5b5061012a6101723660046107c9565b6103e7565b34801561018357600080fd5b506100d8610192366004610805565b6105fe565b3480156101a357600080fd5b506002546101b19060ff1681565b60405160ff9091168152602001610101565b3480156101cf57600080fd5b506100d86101de36600461079f565b6106a4565b3480156101ef57600080fd5b506101496101fe36600461081e565b60036020526000908152604090205481565b34801561021c57600080fd5b506100f46106e2565b34801561023157600080fd5b5061012a61024036600461079f565b6106ef565b6100d8610285565b34801561025957600080fd5b50610149610268366004610839565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102a490849061089b565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102ed906108b3565b80601f0160208091040260200160405190810160405280929190818152602001828054610319906108b3565b80156103665780601f1061033b57610100808354040283529160200191610366565b820191906000526020600020905b81548152906001019060200180831161034957829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103d69086815260200190565b60405180910390a350600192915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561041957600080fd5b73ffffffffffffffffffffffffffffffffffffffff8416331480159061048f575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105175773ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020548211156104d157600080fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915281208054849290610511908490610907565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061054c908490610907565b909155505073ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260408120805484929061058690849061089b565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516105ec91815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561061a57600080fd5b3360009081526003602052604081208054839290610639908490610907565b9091555050604051339082156108fc029083906000818181858888f1935050505015801561066b573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260036020526040812080548392906106d990849061089b565b90915550505050565b600180546102ed906108b3565b60006106fc3384846103e7565b9392505050565b600060208083528351808285015260005b8181101561073057858101830151858201604001528201610714565b81811115610742576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461079a57600080fd5b919050565b600080604083850312156107b257600080fd5b6107bb83610776565b946020939093013593505050565b6000806000606084860312156107de57600080fd5b6107e784610776565b92506107f560208501610776565b9150604084013590509250925092565b60006020828403121561081757600080fd5b5035919050565b60006020828403121561083057600080fd5b6106fc82610776565b6000806040838503121561084c57600080fd5b61085583610776565b915061086360208401610776565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156108ae576108ae61086c565b500190565b600181811c908216806108c757607f821691505b60208210811415610901577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000828210156109195761091961086c565b50039056fea26469706673582212206ec943fa4e3b70d8fca6c25b6aa26fa18e8f8952ce3bc4d5afcb443bf3097c0564736f6c634300080a003360806040526000600255600060035534801561001a57600080fd5b506111fa8061002a6000396000f3fe60806040526004361061016e5760003560e01c80637a28fb88116100cb578063bdd17e1c1161007f578063dd62ed3e11610059578063dd62ed3e146103ee578063ee7a7c0414610441578063f5eb42dc1461046157600080fd5b8063bdd17e1c146103ad578063cdb9a21c146103c3578063d5002f2e146103d957600080fd5b8063a1903eab116100b0578063a1903eab1461035a578063a457c2d71461036d578063a9059cbb1461038d57600080fd5b80637a28fb88146102f457806395d89b411461031457600080fd5b806323b872dd1161012257806337cfdaca1161010757806337cfdaca1461020d57806339509351146102b457806370a08231146102d457600080fd5b806323b872dd14610278578063313ce5671461029857600080fd5b806318160ddd1161015357806318160ddd1461020d578063192084511461023057806322301f6e1461025057600080fd5b806306fdde0314610185578063095ea7b3146101dd57600080fd5b366101805761017d6000610481565b50005b600080fd5b34801561019157600080fd5b5060408051808201909152601781527f4c6971756964207374616b656420457468657220322e3000000000000000000060208201525b6040516101d49190610f63565b60405180910390f35b3480156101e957600080fd5b506101fd6101f8366004610fff565b610545565b60405190151581526020016101d4565b34801561021957600080fd5b5061022261055b565b6040519081526020016101d4565b34801561023c57600080fd5b5061022261024b366004611029565b61056b565b34801561025c57600080fd5b5061027661026b366004611042565b600391909155600255565b005b34801561028457600080fd5b506101fd610293366004611064565b6105ab565b3480156102a457600080fd5b50604051601281526020016101d4565b3480156102c057600080fd5b506101fd6102cf366004610fff565b610696565b3480156102e057600080fd5b506102226102ef3660046110a0565b6106d9565b34801561030057600080fd5b5061022261030f366004611029565b61070e565b34801561032057600080fd5b5060408051808201909152600581527f737445544800000000000000000000000000000000000000000000000000000060208201526101c7565b6102226103683660046110a0565b61073a565b34801561037957600080fd5b506101fd610388366004610fff565b610745565b34801561039957600080fd5b506101fd6103a8366004610fff565b6107f9565b3480156103b957600080fd5b5061022260035481565b3480156103cf57600080fd5b5061022260025481565b3480156103e557600080fd5b50610222610806565b3480156103fa57600080fd5b506102226104093660046110bb565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b34801561044d57600080fd5b5061027661045c366004610fff565b610811565b34801561046d57600080fd5b5061022261047c3660046110a0565b61081f565b60003334806104f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f5a45524f5f4445504f534954000000000000000000000000000000000000000060448201526064015b60405180910390fd5b60006104fc8261056b565b9050806105065750805b8160036000828254610518919061111d565b909155506105289050838261084a565b61053383838761093b565b61053d8382610992565b949350505050565b60006105523384846109ea565b50600192915050565b600061056660035490565b905090565b60008061057760035490565b9050806105875750600092915050565b6105a48161059e61059760025490565b8690610b52565b90610b5e565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001602090815260408083203384529091528120548281101561066c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f5452414e534645525f414d4f554e545f455843454544535f414c4c4f57414e4360448201527f450000000000000000000000000000000000000000000000000000000000000060648201526084016104e8565b610677858585610b6a565b61068b85336106868487610bef565b6109ea565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916105529185906106869086610bfb565b73ffffffffffffffffffffffffffffffffffffffff81166000908152602081905260408120546107089061070e565b92915050565b60008061071a60025490565b90508061072a5750600092915050565b6105a48161059e61059760035490565b600061070882610481565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156107e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4445435245415345445f414c4c4f57414e43455f42454c4f575f5a45524f000060448201526064016104e8565b6107ef33856106868487610bef565b5060019392505050565b6000610552338484610b6a565b600061056660025490565b61081b8282610c07565b5050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040812054610708565b73ffffffffffffffffffffffffffffffffffffffff82166108c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4d494e545f544f5f5448455f5a45524f5f41444452455353000000000000000060448201526064016104e8565b80600260008282546108d9919061111d565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205461090e9082610bfb565b73ffffffffffffffffffffffffffffffffffffffff90921660009081526020819052604090209190915550565b6040805183815273ffffffffffffffffffffffffffffffffffffffff83811660208301528516917fed8dd430b1e4bba98e943dc5b157cf7b54d9e12916d6c474ff5733a95001d03b910160405180910390a2505050565b73ffffffffffffffffffffffffffffffffffffffff821660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6109d58461070e565b60405190815260200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff8316610a67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f415050524f56455f46524f4d5f5a45524f5f414444524553530000000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff8216610ae4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f415050524f56455f544f5f5a45524f5f4144445245535300000000000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006105a48284611135565b60006105a48284611172565b6000610b758261056b565b9050610b82848483610d64565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610be191815260200190565b60405180910390a350505050565b60006105a482846111ad565b60006105a4828461111d565b73ffffffffffffffffffffffffffffffffffffffff8216610c84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4255524e5f46524f4d5f5448455f5a45524f5f4144445245535300000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205480821115610d14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4255524e5f414d4f554e545f455843454544535f42414c414e4345000000000060448201526064016104e8565b8160026000828254610d2691906111ad565b90915550610d3690508183610bef565b73ffffffffffffffffffffffffffffffffffffffff9093166000908152602081905260409020929092555050565b73ffffffffffffffffffffffffffffffffffffffff8316610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f5452414e534645525f46524f4d5f5448455f5a45524f5f41444452455353000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff8216610e5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f5452414e534645525f544f5f5448455f5a45524f5f414444524553530000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205480821115610eee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5452414e534645525f414d4f554e545f455843454544535f42414c414e43450060448201526064016104e8565b610ef88183610bef565b73ffffffffffffffffffffffffffffffffffffffff8086166000908152602081905260408082209390935590851681522054610f349083610bfb565b73ffffffffffffffffffffffffffffffffffffffff909316600090815260208190526040902092909255505050565b600060208083528351808285015260005b81811015610f9057858101830151858201604001528201610f74565b81811115610fa2576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ffa57600080fd5b919050565b6000806040838503121561101257600080fd5b61101b83610fd6565b946020939093013593505050565b60006020828403121561103b57600080fd5b5035919050565b6000806040838503121561105557600080fd5b50508035926020909101359150565b60008060006060848603121561107957600080fd5b61108284610fd6565b925061109060208501610fd6565b9150604084013590509250925092565b6000602082840312156110b257600080fd5b6105a482610fd6565b600080604083850312156110ce57600080fd5b6110d783610fd6565b91506110e560208401610fd6565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611130576111306110ee565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561116d5761116d6110ee565b500290565b6000826111a8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000828210156111bf576111bf6110ee565b50039056fea2646970667358221220a5b4f31162ba2b8b3424cef84b31ef91d05a825243602b5fdf758ffb49b8246364736f6c634300080a003360a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a003360c06040523480156200001157600080fd5b506040516200170938038062001709833981016040819052620000349162000266565b8351849084906200004d906003906020850190620000f3565b50805162000063906004906020840190620000f3565b505050620000806200007a6200009d60201b60201c565b620000a1565b60ff9091166080526001600160a01b031660a05250620003479050565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b82805462000101906200030a565b90600052602060002090601f01602090048101928262000125576000855562000170565b82601f106200014057805160ff191683800117855562000170565b8280016001018555821562000170579182015b828111156200017057825182559160200191906001019062000153565b506200017e92915062000182565b5090565b5b808211156200017e576000815560010162000183565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c157600080fd5b81516001600160401b0380821115620001de57620001de62000199565b604051601f8301601f19908116603f0116810190828211818310171562000209576200020962000199565b816040528381526020925086838588010111156200022657600080fd5b600091505b838210156200024a57858201830151818301840152908201906200022b565b838211156200025c5760008385830101525b9695505050505050565b600080600080608085870312156200027d57600080fd5b84516001600160401b03808211156200029557600080fd5b620002a388838901620001af565b95506020870151915080821115620002ba57600080fd5b50620002c987828801620001af565b935050604085015160ff81168114620002e157600080fd5b60608601519092506001600160a01b0381168114620002ff57600080fd5b939692955090935050565b600181811c908216806200031f57607f821691505b602082108114156200034157634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05161138e6200037b600039600081816101f70152818161041f0152610600015260006101a2015261138e6000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80636f307dc3116100b257806395d89b4111610081578063a9059cbb11610066578063a9059cbb146102b5578063dd62ed3e146102c8578063f2fde38b1461030e57600080fd5b806395d89b411461029a578063a457c2d7146102a257600080fd5b80636f307dc3146101f257806370a082311461023e578063715018a6146102745780638da5cb5b1461027c57600080fd5b806323b872dd116100ee57806323b872dd14610188578063313ce5671461019b57806339509351146101cc57806340c10f19146101df57600080fd5b806306fdde0314610120578063095ea7b31461013e57806318160ddd146101615780631e9a695014610173575b600080fd5b610128610321565b604051610135919061112d565b60405180910390f35b61015161014c3660046111c9565b6103b3565b6040519015158152602001610135565b6002545b604051908152602001610135565b6101866101813660046111c9565b6103c9565b005b6101516101963660046111f3565b610491565b60405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610135565b6101516101da3660046111c9565b61057c565b6101866101ed3660046111c9565b6105c5565b6102197f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b61016561024c36600461122f565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610186610691565b60055473ffffffffffffffffffffffffffffffffffffffff16610219565b61012861071e565b6101516102b03660046111c9565b61072d565b6101516102c33660046111c9565b610805565b6101656102d6366004611251565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b61018661031c36600461122f565b610812565b60606003805461033090611284565b80601f016020809104026020016040519081016040528092919081815260200182805461035c90611284565b80156103a95780601f1061037e576101008083540402835291602001916103a9565b820191906000526020600020905b81548152906001019060200180831161038c57829003601f168201915b5050505050905090565b60006103c0338484610942565b50600192915050565b6103d33382610af5565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015610468573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048c91906112d8565b505050565b600061049e848484610ce2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6105718533858403610942565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916103c09185906105c0908690611329565b610942565b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906323b872dd906064016020604051808303816000875af115801561065e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068291906112d8565b5061068d8282610f96565b5050565b60055473ffffffffffffffffffffffffffffffffffffffff163314610712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161055b565b61071c60006110b6565b565b60606004805461033090611284565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156107ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161055b565b6107fb3385858403610942565b5060019392505050565b60006103c0338484610ce2565b60055473ffffffffffffffffffffffffffffffffffffffff163314610893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161055b565b73ffffffffffffffffffffffffffffffffffffffff8116610936576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161055b565b61093f816110b6565b50565b73ffffffffffffffffffffffffffffffffffffffff83166109e4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff8216610a87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8216610b98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015610c4e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290610c8a908490611341565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff8216610e28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610ede576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610f22908490611329565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f8891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161055b565b80600260008282546110259190611329565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152602081905260408120805483929061105f908490611329565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208083528351808285015260005b8181101561115a5785810183015185820160400152820161113e565b8181111561116c576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146111c457600080fd5b919050565b600080604083850312156111dc57600080fd5b6111e5836111a0565b946020939093013593505050565b60008060006060848603121561120857600080fd5b611211846111a0565b925061121f602085016111a0565b9150604084013590509250925092565b60006020828403121561124157600080fd5b61124a826111a0565b9392505050565b6000806040838503121561126457600080fd5b61126d836111a0565b915061127b602084016111a0565b90509250929050565b600181811c9082168061129857607f821691505b602082108114156112d2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156112ea57600080fd5b8151801515811461124a57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561133c5761133c6112fa565b500190565b600082821015611353576113536112fa565b50039056fea26469706673582212203a6db30cd3c097921df4156794aa7973eb848711deeb2cffd7c54a9df1fdb0a564736f6c634300080a003360a060405234801561001057600080fd5b506040516106ca3803806106ca83398101604081905261002f9161006c565b60009190915560ff166080526001805460506001600160501b031991821681179092556004805490911690911790554260028190556003556100a2565b6000806040838503121561007f57600080fd5b82519150602083015160ff8116811461009757600080fd5b809150509250929050565b60805161060e6100bc600039600060d3015261060e6000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80639a6fc8f511610081578063d62ada111161005b578063d62ada11146102dc578063f7a30806146102f4578063feaf968c1461030757600080fd5b80639a6fc8f5146101cd578063bd18ad531461023a578063cd653afc1461024d57600080fd5b806354fd4d50116100b257806354fd4d501461012d57806367e8d83d1461013c5780637284e4161461018e57600080fd5b8063313ce567146100ce5780633fd0875f1461010c575b600080fd5b6100f57f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020015b60405180910390f35b6004546a0100000000000000000000900460ff166040516101039190610441565b60405160018152602001610103565b61018c61014a366004610482565b600480549115156c01000000000000000000000000027fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff909216919091179055565b005b604080518082018252600c81527f7072696365206f7261636c6500000000000000000000000000000000000000006020820152905161010391906104ab565b6102036101db36600461053d565b60015460005460025460035460045469ffffffffffffffffffff948516941691939590929450565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610103565b61018c610248366004610558565b61030f565b61018c61025b366004610579565b6001805469ffffffffffffffffffff9586167fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090911617905560029290925560035560048054919092167fffffffffffffffffffffffffffffffffffffffff00ff00000000000000000000909116176b020000000000000000000000179055565b6102e461035f565b6040519015158152602001610103565b61018c6103023660046105bf565b600055565b610203610385565b600480548291907fffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff166b01000000000000000000000083600281111561035757610357610412565b021790555050565b600454600090610380906b010000000000000000000000900460ff166103d6565b905090565b60008060008060006004600c9054906101000a900460ff16156103a757600080fd5b505060015460005460025460035460045469ffffffffffffffffffff9485169893975091955093509190911690565b600060028260028111156103ec576103ec610412565b14156103f757600080fd5b600182600281111561040b5761040b610412565b1492915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016006831061047c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561049457600080fd5b813580151581146104a457600080fd5b9392505050565b600060208083528351808285015260005b818110156104d8578581018301518582016040015282016104bc565b818111156104ea576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803569ffffffffffffffffffff8116811461053857600080fd5b919050565b60006020828403121561054f57600080fd5b6104a48261051e565b60006020828403121561056a57600080fd5b8135600381106104a457600080fd5b6000806000806080858703121561058f57600080fd5b6105988561051e565b935060208501359250604085013591506105b46060860161051e565b905092959194509250565b6000602082840312156105d157600080fd5b503591905056fea264697066735822122014874f7a973b86501c4c1a8be32490fe902c8f088ee234d25f9b2497e19f9e5264736f6c634300080a0033608060405234801561001057600080fd5b5061001a3361005f565b60405130906f20a2222922a9a9afa82927ab24a222a960811b907fb37614c7d254ea8d16eb81fa11dddaeb266aa8ba4917980859c7740aff30c69190600090a36100af565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610f0f806100be6000396000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c806377532ed9116100e3578063bcaead981161008c578063ce3c4ae411610066578063ce3c4ae414610308578063f2fde38b1461031b578063fca513a81461032e57600080fd5b8063bcaead98146102da578063c5120b39146102ed578063c513c9bb1461030057600080fd5b80639068a868116100bd5780639068a868146102b7578063addc1a76146102bf578063affd9243146102d257600080fd5b806377532ed91461027e57806386e09c08146102865780638da5cb5b1461029957600080fd5b80634c252f9111610145578063699f200f1161011f578063699f200f1461022d578063715018a61461026357806376aad6051461026b57600080fd5b80634c252f91146101fc578063530e784f1461020457806354fd4d501461021757600080fd5b80631ed65110116101765780631ed65110146101cc57806321da5837146101e157806326c74fc3146101f457600080fd5b8063060678c21461019257806308737695146101c4575b600080fd5b61019a610336565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61019a610366565b6101df6101da366004610e10565b610391565b005b6101df6101ef366004610e10565b610444565b61019a6104ef565b61019a61051a565b6101df610212366004610e10565b610545565b61021f600281565b6040519081526020016101bb565b61019a61023b366004610e4d565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6101df6105f0565b6101df610279366004610e10565b61067d565b61019a610728565b6101df610294366004610e10565b610753565b60005473ffffffffffffffffffffffffffffffffffffffff1661019a565b61019a6107fe565b6101df6102cd366004610e10565b610829565b61019a6108d4565b6101df6102e8366004610e10565b6108ff565b6101df6102fb366004610e10565b6109aa565b61019a610a55565b6101df610316366004610e10565b610a80565b6101df610329366004610e10565b610b2b565b61019a610c58565b60006103617f444154415f434f4d50524553534f520000000000000000000000000000000000610c7f565b905090565b60006103617f41434c0000000000000000000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610417576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6104417f54524541535552595f434f4e545241435400000000000000000000000000000082610d1d565b50565b60005473ffffffffffffffffffffffffffffffffffffffff1633146104c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f574554485f47415445574159000000000000000000000000000000000000000082610d1d565b60006103617f54524541535552595f434f4e5452414354000000000000000000000000000000610c7f565b60006103617f574554485f544f4b454e00000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f50524943455f4f5241434c45000000000000000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610671576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b61067b6000610d9b565b565b60005473ffffffffffffffffffffffffffffffffffffffff1633146106fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f41434c000000000000000000000000000000000000000000000000000000000082610d1d565b60006103617f574554485f474154455741590000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146107d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f574554485f544f4b454e0000000000000000000000000000000000000000000082610d1d565b60006103617f4143434f554e545f464143544f52590000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146108aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f4143434f554e545f464143544f5259000000000000000000000000000000000082610d1d565b60006103617f474541525f544f4b454e00000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610980576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f474541525f544f4b454e0000000000000000000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f444154415f434f4d50524553534f52000000000000000000000000000000000082610d1d565b60006103617f434f4e5452414354535f52454749535445520000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610b01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f434f4e5452414354535f5245474953544552000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610bac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b73ffffffffffffffffffffffffffffffffffffffff8116610c4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161040e565b61044181610d9b565b60006103617f50524943455f4f5241434c4500000000000000000000000000000000000000005b6000818152600160209081526040808320548151808301909252600382527f41503100000000000000000000000000000000000000000000000000000000009282019290925273ffffffffffffffffffffffffffffffffffffffff9091169081610d16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040e9190610e66565b5092915050565b60008281526001602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091559051909184917fb37614c7d254ea8d16eb81fa11dddaeb266aa8ba4917980859c7740aff30c6919190a35050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215610e2257600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610e4657600080fd5b9392505050565b600060208284031215610e5f57600080fd5b5035919050565b600060208083528351808285015260005b81811015610e9357858101830151858201604001528201610e77565b81811115610ea5576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea264697066735822122083c228af017c6f5cf8c395cdf7a53276ff56fdd4f4313c39f680ab73bd75417364736f6c634300080a0033608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61090e8061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063732818191161008c578063adce758d11610066578063adce758d14610215578063ba306df114610228578063d4eb5db01461023b578063f2fde38b1461027457600080fd5b806373281819146101b7578063819ad68e146101da5780638da5cb5b146101ed57600080fd5b806354fd4d50116100bd57806354fd4d501461016a5780635f259aba14610180578063715018a6146101af57600080fd5b806335914829146100e45780633a41ec641461011c5780634910832f14610155575b600080fd5b6101076100f236600461089b565b60016020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61010761012a36600461089b565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205460ff1690565b61016861016336600461089b565b610287565b005b610172600181565b604051908152602001610113565b61010761018e36600461089b565b60005473ffffffffffffffffffffffffffffffffffffffff91821691161490565b610168610387565b6101076101c536600461089b565b60026020526000908152604090205460ff1681565b6101686101e836600461089b565b610414565b60005460405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610113565b61016861022336600461089b565b61050c565b61016861023636600461089b565b610601565b61010761024936600461089b565b73ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205460ff1690565b61016861028236600461089b565b6106f6565b60005473ffffffffffffffffffffffffffffffffffffffff16331461030d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909217909155517fae26b1cfe9454ba87274a4e8330b6654684362d0f3d7bbd17f7449a1d38387c69190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610408576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b6104126000610826565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517fd400da6c0c0a894dacc0981730b88af0545d00272ee8fff1437bf560ff245fc49190a250565b60005473ffffffffffffffffffffffffffffffffffffffff16331461058d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f1998397e7203f7baca9d6f41b9e4da6e768daac5caad4234fb9bf5869d2715459190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610682576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526001602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f28b01395b7e25d20552a0c8dc8ecd3b1d4abc986f14dad7885fd45b6fd73c8d99190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811661081a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610304565b61082381610826565b50565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156108ad57600080fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146108d157600080fd5b939250505056fea26469706673582212204712efbfe997070def77285a5b8753bc882b62da2133ce1937ad26cd2b48e49864736f6c634300080a003360a06040523480156200001157600080fd5b5060405162001b4538038062001b45833981016040819052620000349162000608565b6000805460ff19169055816001600160a01b0381166200006757604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cc91906200070a565b6001600160a01b031660805250805160005b818110156200014257620001398382815181106200010057620001006200072f565b6020026020010151600001518483815181106200012157620001216200072f565b6020026020010151602001516200014c60201b60201c565b600101620000de565b5050505062000822565b6001600160a01b03821615806200016a57506001600160a01b038116155b156200018957604051635919af9760e11b815260040160405180910390fd5b620001a8826001600160a01b0316620004ba60201b620006751760201c565b620001d65760405163df4c572d60e01b81526001600160a01b03831660048201526024015b60405180910390fd5b620001f5816001600160a01b0316620004ba60201b620006751760201c565b6200021f5760405163df4c572d60e01b81526001600160a01b0382166004820152602401620001cd565b806001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200027c575060408051601f3d908101601f19168201909252620002799181019062000745565b60015b6200029a576040516367a7cd4360e01b815260040160405180910390fd5b8060ff16600814620002bf576040516367a7cd4360e01b815260040160405180910390fd5b506000816001600160a01b031663d62ada116040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200031f575060408051601f3d908101601f191682019092526200031c918101906200076a565b60015b6200032a576200032d565b90505b6000836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200038c575060408051601f3d908101601f19168201909252620003899181019062000745565b60015b620003aa5760405163528ca31d60e01b815260040160405180910390fd5b60128160ff161115620003d05760405163528ca31d60e01b815260040160405180910390fd5b9050826001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa9250505080156200042f575060408051601f3d908101601f191682019092526200042c91810190620007a6565b60015b6200044d576040516367a7cd4360e01b815260040160405180910390fd5b8662000461576200046185858484620004c0565b5050505050620004748484848462000526565b826001600160a01b0316846001600160a01b03167fe263805b03657ab13064915d0723c5ce14981547e7cba5283f66b9e5d81f6e6e60405160405180910390a350505050565b3b151590565b60008313620004e2576040516356e05d2b60e01b815260040160405180910390fd5b836001600160501b0316816001600160501b0316108062000501575081155b15620005205760405163b1cf675560e01b815260040160405180910390fd5b50505050565b6001600160a01b03831682156200053e57600160a11b175b6200055460ff60a21b60a284901b1682620007fb565b6001600160a01b0390951660009081526001602052604090209490945550505050565b80516001600160a01b03811681146200058f57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715620005cf57620005cf62000594565b60405290565b604051601f8201601f191681016001600160401b038111828210171562000600576200060062000594565b604052919050565b60008060408084860312156200061d57600080fd5b620006288462000577565b602085810151919450906001600160401b03808211156200064857600080fd5b818701915087601f8301126200065d57600080fd5b81518181111562000672576200067262000594565b62000682848260051b01620005d5565b818152848101925060069190911b830184019089821115620006a357600080fd5b928401925b81841015620006fa5785848b031215620006c25760008081fd5b620006cc620005aa565b620006d78562000577565b8152620006e686860162000577565b8187015283529285019291840191620006a8565b8096505050505050509250929050565b6000602082840312156200071d57600080fd5b620007288262000577565b9392505050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156200075857600080fd5b815160ff811681146200072857600080fd5b6000602082840312156200077d57600080fd5b815180151581146200072857600080fd5b80516001600160501b03811681146200058f57600080fd5b600080600080600060a08688031215620007bf57600080fd5b620007ca866200078e565b9450602086015193506040860151925060608601519150620007ef608087016200078e565b90509295509295909350565b600082198211156200081d57634e487b7160e01b600052601160045260246000fd5b500190565b6080516112f262000853600039600081816101b201528181610280015281816103e201526104ff01526112f26000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c80638456cb591161008c578063b66102df11610066578063b66102df146101d4578063e8a97a3e146101e7578063f190e5fa146101fa578063f9a650301461023f57600080fd5b80638456cb591461016d5780639dcb511a14610175578063a50cf2c8146101ad57600080fd5b80635c975abb116100bd5780635c975abb1461011c5780635cecbd0e146101325780637afb01041461015a57600080fd5b80633f4ba83a146100e457806341976e09146100ee57806354fd4d5014610114575b600080fd5b6100ec610252565b005b6101016100fc366004610f28565b610340565b6040519081526020015b60405180910390f35b610101600281565b60005460ff16604051901515815260200161010b565b610145610140366004610f4a565b610352565b6040805192835260208301919091520161010b565b610101610168366004610f90565b610376565b6100ec6103b4565b610188610183366004610f28565b6104a0565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010b565b6101887f000000000000000000000000000000000000000000000000000000000000000081565b6101016101e2366004610fbc565b6104b4565b6100ec6101f5366004610ff8565b6104d1565b61020d610208366004610f28565b6105c3565b6040805173ffffffffffffffffffffffffffffffffffffffff909416845291151560208401529082015260600161010b565b61010161024d366004610f90565b61064d565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156102dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103009190611022565b610336576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033e61067b565b565b600061034b82610761565b5092915050565b60008061035f868661064d565b915061036b848461064d565b905094509492505050565b600080600061038484610761565b90925090508161039582600a611193565b61039f908761119f565b6103a991906111dc565b925050505b92915050565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561043e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104629190611022565b610498576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033e610819565b60006104ab826105c3565b50909392505050565b60006104c96104c3858561064d565b83610376565b949350505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561055b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057f9190611022565b6105b5576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105bf82826108d9565b5050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600160205260408120548190819080610624576040517f4bb8ad8200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b947402000000000000000000000000000000000000000086161515945060a286901c9350915050565b600080600061065b84610761565b909250905061066b81600a611193565b61039f838761119f565b3b151590565b60005460ff166106ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b600080600080610770856105c3565b8095508193508294505050506000806000808573ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156107cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f19190611231565b9450945050935093508461080b5761080b84848484610dd9565b829750505050505050915091565b60005460ff1615610886576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016106e3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586107373390565b73ffffffffffffffffffffffffffffffffffffffff82161580610910575073ffffffffffffffffffffffffffffffffffffffff8116155b15610947576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82163b6109ad576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016106e3565b73ffffffffffffffffffffffffffffffffffffffff81163b610a13576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024016106e3565b8073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610a98575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610a9591810190611281565b60015b610ace576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060ff16600814610b0b576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060008173ffffffffffffffffffffffffffffffffffffffff1663d62ada116040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610b93575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610b9091810190611022565b60015b610b9c57610b9f565b90505b60008373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610c26575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610c2391810190611281565b60015b610c5c576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60128160ff161115610c9a576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b90508273ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa925050508015610d21575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610d1e91810190611231565b60015b610d57576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b86610d6857610d6885858484610dd9565b5050505050610d7984848484610e74565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fe263805b03657ab13064915d0723c5ce14981547e7cba5283f66b9e5d81f6e6e60405160405180910390a350505050565b60008313610e13576040517f56e05d2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8369ffffffffffffffffffff168169ffffffffffffffffffff161080610e37575081155b15610e6e576040517fb1cf675500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b73ffffffffffffffffffffffffffffffffffffffff83168215610ea95774020000000000000000000000000000000000000000175b610ecf7503fc000000000000000000000000000000000000000060a284901b16826112a4565b73ffffffffffffffffffffffffffffffffffffffff90951660009081526001602052604090209490945550505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610f2357600080fd5b919050565b600060208284031215610f3a57600080fd5b610f4382610eff565b9392505050565b60008060008060808587031215610f6057600080fd5b84359350610f7060208601610eff565b925060408501359150610f8560608601610eff565b905092959194509250565b60008060408385031215610fa357600080fd5b82359150610fb360208401610eff565b90509250929050565b600080600060608486031215610fd157600080fd5b83359250610fe160208501610eff565b9150610fef60408501610eff565b90509250925092565b6000806040838503121561100b57600080fd5b61101483610eff565b9150610fb360208401610eff565b60006020828403121561103457600080fd5b81518015158114610f4357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b808511156110cc57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156110b2576110b2611044565b808516156110bf57918102915b93841c9390800290611078565b509250929050565b6000826110e3575060016103ae565b816110f0575060006103ae565b816001811461110657600281146111105761112c565b60019150506103ae565b60ff84111561112157611121611044565b50506001821b6103ae565b5060208310610133831016604e8410600b841016171561114f575081810a6103ae565b6111598383611073565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561118b5761118b611044565b029392505050565b6000610f4383836110d4565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156111d7576111d7611044565b500290565b600082611212577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b805169ffffffffffffffffffff81168114610f2357600080fd5b600080600080600060a0868803121561124957600080fd5b61125286611217565b945060208601519350604086015192506060860151915061127560808701611217565b90509295509295909350565b60006020828403121561129357600080fd5b815160ff81168114610f4357600080fd5b600082198211156112b7576112b7611044565b50019056fea2646970667358221220e7485a2cb5750973f539ca59d2211008b42bb92b6c49605a53f5d9c88c330fb164736f6c634300080a003360a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a003360a060405234801561001057600080fd5b506040516106ca3803806106ca83398101604081905261002f9161006c565b60009190915560ff166080526001805460506001600160501b031991821681179092556004805490911690911790554260028190556003556100a2565b6000806040838503121561007f57600080fd5b82519150602083015160ff8116811461009757600080fd5b809150509250929050565b60805161060e6100bc600039600060d3015261060e6000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80639a6fc8f511610081578063d62ada111161005b578063d62ada11146102dc578063f7a30806146102f4578063feaf968c1461030757600080fd5b80639a6fc8f5146101cd578063bd18ad531461023a578063cd653afc1461024d57600080fd5b806354fd4d50116100b257806354fd4d501461012d57806367e8d83d1461013c5780637284e4161461018e57600080fd5b8063313ce567146100ce5780633fd0875f1461010c575b600080fd5b6100f57f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020015b60405180910390f35b6004546a0100000000000000000000900460ff166040516101039190610441565b60405160018152602001610103565b61018c61014a366004610482565b600480549115156c01000000000000000000000000027fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff909216919091179055565b005b604080518082018252600c81527f7072696365206f7261636c6500000000000000000000000000000000000000006020820152905161010391906104ab565b6102036101db36600461053d565b60015460005460025460035460045469ffffffffffffffffffff948516941691939590929450565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610103565b61018c610248366004610558565b61030f565b61018c61025b366004610579565b6001805469ffffffffffffffffffff9586167fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090911617905560029290925560035560048054919092167fffffffffffffffffffffffffffffffffffffffff00ff00000000000000000000909116176b020000000000000000000000179055565b6102e461035f565b6040519015158152602001610103565b61018c6103023660046105bf565b600055565b610203610385565b600480548291907fffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff166b01000000000000000000000083600281111561035757610357610412565b021790555050565b600454600090610380906b010000000000000000000000900460ff166103d6565b905090565b60008060008060006004600c9054906101000a900460ff16156103a757600080fd5b505060015460005460025460035460045469ffffffffffffffffffff9485169893975091955093509190911690565b600060028260028111156103ec576103ec610412565b14156103f757600080fd5b600182600281111561040b5761040b610412565b1492915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016006831061047c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561049457600080fd5b813580151581146104a457600080fd5b9392505050565b600060208083528351808285015260005b818110156104d8578581018301518582016040015282016104bc565b818111156104ea576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803569ffffffffffffffffffff8116811461053857600080fd5b919050565b60006020828403121561054f57600080fd5b6104a48261051e565b60006020828403121561056a57600080fd5b8135600381106104a457600080fd5b6000806000806080858703121561058f57600080fd5b6105988561051e565b935060208501359250604085013591506105b46060860161051e565b905092959194509250565b6000602082840312156105d157600080fd5b503591905056fea264697066735822122014874f7a973b86501c4c1a8be32490fe902c8f088ee234d25f9b2497e19f9e5264736f6c634300080a0033a2646970667358221220d3205bed7dc6bf96cf3d46b7750ba068a10999b0099c00b82507274333afe9b164736f6c634300080a0033"; - -type PriceOracleTestConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: PriceOracleTestConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class PriceOracleTest__factory extends ContractFactory { - constructor(...args: PriceOracleTestConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): PriceOracleTest { - return super.attach(address) as PriceOracleTest; - } - override connect(signer: Signer): PriceOracleTest__factory { - return super.connect(signer) as PriceOracleTest__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): PriceOracleTestInterface { - return new utils.Interface(_abi) as PriceOracleTestInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): PriceOracleTest { - return new Contract(address, _abi, signerOrProvider) as PriceOracleTest; - } -} diff --git a/src/types/factories/contracts/test/oracles/PriceOracle.t.sol/index.ts b/src/types/factories/contracts/test/oracles/PriceOracle.t.sol/index.ts deleted file mode 100644 index 35034987..00000000 --- a/src/types/factories/contracts/test/oracles/PriceOracle.t.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { PriceOracleTest__factory } from "./PriceOracleTest__factory"; diff --git a/src/types/factories/contracts/test/oracles/YearnPriceFeed.t.sol/YearnFeedTest__factory.ts b/src/types/factories/contracts/test/oracles/YearnPriceFeed.t.sol/YearnFeedTest__factory.ts deleted file mode 100644 index b58cc6b8..00000000 --- a/src/types/factories/contracts/test/oracles/YearnPriceFeed.t.sol/YearnFeedTest__factory.ts +++ /dev/null @@ -1,474 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - YearnFeedTest, - YearnFeedTestInterface, -} from "../../../../../contracts/test/oracles/YearnPriceFeed.t.sol/YearnFeedTest"; - -const _abi = [ - { - inputs: [], - name: "ChainPriceStaleException", - type: "error", - }, - { - inputs: [], - name: "IncorrectLimitsException", - type: "error", - }, - { - inputs: [], - name: "PriceOracleNotExistsException", - type: "error", - }, - { - inputs: [], - name: "ValueOutOfRangeExpcetion", - type: "error", - }, - { - inputs: [], - name: "ZeroPriceException", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "", - type: "address", - }, - ], - name: "log_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "log_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - name: "log_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "int256", - name: "", - type: "int256", - }, - ], - name: "log_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "address", - name: "val", - type: "address", - }, - ], - name: "log_named_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes", - name: "val", - type: "bytes", - }, - ], - name: "log_named_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes32", - name: "val", - type: "bytes32", - }, - ], - name: "log_named_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - ], - name: "log_named_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "string", - name: "val", - type: "string", - }, - ], - name: "log_named_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - ], - name: "log_named_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "log_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "logs", - type: "event", - }, - { - inputs: [], - name: "IS_TEST", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "addressProvider", - outputs: [ - { - internalType: "contract AddressProviderACLMock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "failed", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "pf", - outputs: [ - { - internalType: "contract YearnPriceFeed", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "setUp", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_YPF_01_constructor_sets_correct_values", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_YPF_02_constructor_reverts_for_zero_addresses", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint8", - name: "add", - type: "uint8", - }, - ], - name: "test_YPF_04_latestRoundData_works_correctly", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_YPF_05_latestRoundData_reverts_or_bounds_for_out_of_bounds_prices", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "underlyingPf", - outputs: [ - { - internalType: "contract PriceFeedMock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "yearnMock", - outputs: [ - { - internalType: "contract YearnV2Mock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x60806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d000117905534801561003957600080fd5b5061f485806200004a6000396000f3fe60806040523480156200001157600080fd5b5060043610620000d95760003560e01c8063ab24beba116200008b578063cac283c81162000062578063cac283c814620001a6578063ccadf7d114620001c7578063fa7626d414620001e857600080fd5b8063ab24beba1462000160578063b0a85d4f146200016a578063ba414fa6146200018b57600080fd5b80633fd6179111620000c05780633fd617911462000135578063677092a3146200013f5780636fa88053146200014957600080fd5b80630a9254e414620000de5780632954018c14620000ea575b600080fd5b620000e8620001f6565b005b6001546200010b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b620000e862000a0d565b620000e862000c5d565b620000e86200015a3660046200316a565b62001417565b620000e862001937565b6003546200010b9073ffffffffffffffffffffffffffffffffffffffff1681565b620001956200272f565b60405190151581526020016200012c565b6002546200010b9073ffffffffffffffffffffffffffffffffffffffff1681565b6004546200010b9073ffffffffffffffffffffffffffffffffffffffff1681565b600054620001959060ff1681565b604051620002049062003124565b604051809103906000f08015801562000221573d6000803e3d6000fd5b50600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061044c6008604051620002759062003132565b91825260ff166020820152604001604051809103906000f080158015620002a0573d6000803e3d6000fd5b50600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691821790556040517fcd653afc000000000000000000000000000000000000000000000000000000008152600b6004820181905261045760248301526104586044830152606482015263cd653afc90608401600060405180830381600087803b1580156200034d57600080fd5b505af115801562000362573d6000803e3d6000fd5b50505050604051620003749062003140565b604051809103906000f08015801562000391573d6000803e3d6000fd5b50600580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216918217905563b36ba208620003f0670de0b6b3a76400006064620031c5565b6040518263ffffffff1660e01b81526004016000604051808303818588803b1580156200041c57600080fd5b505af115801562000431573d6000803e3d6000fd5b50506005546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911693506367b4264592506200048f915060019060040162003205565b602060405180830381865afa158015620004ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004d391906200326a565b604051620004e1906200314e565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103906000f0801580156200051b573d6000803e3d6000fd5b50600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691821790556040517f43d24a5e0000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526343d24a5e90602401600060405180830381600087803b158015620005c457600080fd5b505af1158015620005d9573d6000803e3d6000fd5b50506000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063ca669fa79150602401600060405180830381600087803b1580156200066257600080fd5b505af115801562000677573d6000803e3d6000fd5b50506002546040517f118c9a07000000000000000000000000000000000000000000000000000000008152670de0b6b3a7640000600482015273ffffffffffffffffffffffffffffffffffffffff909116925063118c9a079150602401600060405180830381600087803b158015620006ef57600080fd5b505af115801562000704573d6000803e3d6000fd5b505060015460025460035460405173ffffffffffffffffffffffffffffffffffffffff938416955091831693509091169062000740906200315c565b73ffffffffffffffffffffffffffffffffffffffff938416815291831660208301529091166040820152606001604051809103906000f0801580156200078a573d6000803e3d6000fd5b50600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316178155600054600354604080517fc657c718000000000000000000000000000000000000000000000000000000008152918516938201939093526024810192909252600d60448301527f4441495f5052494345464545440000000000000000000000000000000000000060648301526201000090049091169063c657c71890608401600060405180830381600087803b1580156200086657600080fd5b505af11580156200087b573d6000803e3d6000fd5b5050600054600254604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152600a60448201527f594541524e5f4d4f434b0000000000000000000000000000000000000000000060648201526201000090920416925063c657c7189150608401600060405180830381600087803b1580156200092b57600080fd5b505af115801562000940573d6000803e3d6000fd5b505060005460048054604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316938101939093526024830152601060448301527f594541524e5f50524943455f4645454400000000000000000000000000000000606483015262010000909204909116925063c657c7189150608401600060405180830381600087803b158015620009f257600080fd5b505af115801562000a07573d6000803e3d6000fd5b50505050565b6000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb2335f2e0000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c31eb0e090602401600060405180830381600087803b15801562000a9e57600080fd5b505af115801562000ab3573d6000803e3d6000fd5b505060015460405173ffffffffffffffffffffffffffffffffffffffff909116925060009150819062000ae6906200315c565b73ffffffffffffffffffffffffffffffffffffffff938416815291831660208301529091166040820152606001604051809103906000f08015801562000b30573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb2335f2e0000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c31eb0e090602401600060405180830381600087803b15801562000bc357600080fd5b505af115801562000bd8573d6000803e3d6000fd5b505060015460025460405173ffffffffffffffffffffffffffffffffffffffff92831694509116915060009062000c0f906200315c565b73ffffffffffffffffffffffffffffffffffffffff938416815291831660208301529091166040820152606001604051809103906000f08015801562000c59573d6000803e3d6000fd5b5050565b62000d89600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637284e4166040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000ccf573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262000d179190810190620032e8565b6040518060400160405280601381526020017f796561726e2044414920707269636546656564000000000000000000000000008152506040518060400160405280601581526020017f496e636f7272656374206465736372697074696f6e000000000000000000000081525062002899565b62000e77600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663741bef1a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000dfb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e2191906200326a565b60035460408051808201909152601381527f496e636f72726563742070726963654665656400000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff909116906200293b565b62000f65600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166333303f8e6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000ee9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000f0f91906200326a565b60025460408051808201909152601081527f496e636f727265637420795661756c7400000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff909116906200293b565b62001042600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a834559e6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000fd7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ffd9190620033bf565b670de0b6b3a76400006040518060400160405280601281526020017f496e636f727265637420646563696d616c730000000000000000000000000000815250620029b4565b6200111d600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d62ada116040518163ffffffff1660e01b8152600401602060405180830381865afa158015620010b4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010da9190620033d9565b151560011515146040518060400160405280601f81526020017f496e636f72726563742064656570656e63647320666f7220616464726573730081525062002a01565b62001285600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a384d6ff6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200118f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011b59190620033bf565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166399530b066040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001223573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620012499190620033bf565b6040518060400160405280601581526020017f496e636f7272656374206c6f77657220626f756e640000000000000000000000815250620029b4565b62001415600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b09ad8a06040518163ffffffff1660e01b8152600401602060405180830381865afa158015620012f7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200131d9190620033bf565b6127106200132d60c882620033fd565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166399530b066040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200139b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013c19190620033bf565b620013cd9190620031c5565b620013d9919062003418565b6040518060400160405280601581526020017f496e636f727265637420757070657220626f756e640000000000000000000000815250620029b4565b565b60048054604080517fa384d6ff000000000000000000000000000000000000000000000000000000008152905160009360ff86169373ffffffffffffffffffffffffffffffffffffffff169263a384d6ff92818301926020928290030181865afa1580156200148a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620014b09190620033bf565b620014bc9190620033fd565b60005460048054604080517fb09ad8a0000000000000000000000000000000000000000000000000000000008152905194955073ffffffffffffffffffffffffffffffffffffffff62010000909404841694634c63e56294929092169263b09ad8a09282820192602092908290030181865afa15801562001541573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620015679190620033bf565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681529084106004820152602401600060405180830381600087803b158015620015b957600080fd5b505af1158015620015ce573d6000803e3d6000fd5b50506000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063ca669fa79150602401600060405180830381600087803b1580156200165757600080fd5b505af11580156200166c573d6000803e3d6000fd5b50506002546040517f118c9a070000000000000000000000000000000000000000000000000000000081526004810185905273ffffffffffffffffffffffffffffffffffffffff909116925063118c9a079150602401600060405180830381600087803b158015620016dd57600080fd5b505af1158015620016f2573d6000803e3d6000fd5b505050506000806000806000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156200176c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200179291906200346f565b945094509450945094506000670de0b6b3a764000061044c88620017b79190620031c5565b620017c3919062003418565b9050620018148669ffffffffffffffffffff16600b6040518060400160405280601581526020017f496e636f727265637420726f756e642049642023310000000000000000000000815250620029b4565b6200185685826040518060400160405280601381526020017f496e636f727265637420616e737765722023310000000000000000000000000081525062002a4b565b6200189a846104576040518060400160405280601681526020017f496e636f72726563742073746172746564417420233100000000000000000000815250620029b4565b620018de836104586040518060400160405280601681526020017f496e636f72726563742075706461746564417420233100000000000000000000815250620029b4565b6200192d8269ffffffffffffffffffff16600b6040518060400160405280601c81526020017f496e636f727265637420616e737765726564496e526f756e6420233100000000815250620029b4565b5050505050505050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a384d6ff6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620019a7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620019cd9190620033bf565b90506000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b09ad8a06040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001a3f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001a659190620033bf565b6000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291925062010000900473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b15801562001aec57600080fd5b505af115801562001b01573d6000803e3d6000fd5b505060025473ffffffffffffffffffffffffffffffffffffffff16915063118c9a07905062001b32600185620034c4565b6040518263ffffffff1660e01b815260040162001b5191815260200190565b600060405180830381600087803b15801562001b6c57600080fd5b505af115801562001b81573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb416da7f0000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b15801562001c1657600080fd5b505af115801562001c2b573d6000803e3d6000fd5b505060048054604080517ffeaf968c000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff909216945063feaf968c93508083019260a092918290030181865afa15801562001c9d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001cc391906200346f565b50506000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16935063ca669fa792506024019050600060405180830381600087803b15801562001d4e57600080fd5b505af115801562001d63573d6000803e3d6000fd5b505060025473ffffffffffffffffffffffffffffffffffffffff16915063118c9a07905062001d94836001620033fd565b6040518263ffffffff1660e01b815260040162001db391815260200190565b600060405180830381600087803b15801562001dce57600080fd5b505af115801562001de3573d6000803e3d6000fd5b505050506000806000806000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa15801562001e5d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001e8391906200346f565b9450945094509450945062001edc8569ffffffffffffffffffff16600b6040518060400160405280601581526020017f496e636f727265637420726f756e642049642023310000000000000000000000815250620029b4565b62001f20846104626040518060400160405280601381526020017f496e636f727265637420616e737765722023310000000000000000000000000081525062002a4b565b62001f64836104576040518060400160405280601681526020017f496e636f72726563742073746172746564417420233100000000000000000000815250620029b4565b62001fa8826104586040518060400160405280601681526020017f496e636f72726563742075706461746564417420233100000000000000000000815250620029b4565b62001ff78169ffffffffffffffffffff16600b6040518060400160405280601c81526020017f496e636f727265637420616e737765726564496e526f756e6420233100000000815250620029b4565b6000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b1580156200207c57600080fd5b505af115801562002091573d6000803e3d6000fd5b50506002546040517f118c9a07000000000000000000000000000000000000000000000000000000008152600481018b905273ffffffffffffffffffffffffffffffffffffffff909116925063118c9a079150602401600060405180830381600087803b1580156200210257600080fd5b505af115801562002117573d6000803e3d6000fd5b50506003546040517ff7a308060000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff909116925063f7a308069150602401600060405180830381600087803b1580156200218857600080fd5b505af11580156200219d573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f56e05d2b0000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b1580156200223257600080fd5b505af115801562002247573d6000803e3d6000fd5b505060048054604080517ffeaf968c000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff909216945063feaf968c93508083019260a092918290030181865afa158015620022b9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620022df91906200346f565b50506003546040517ff7a308060000000000000000000000000000000000000000000000000000000081526064600482015273ffffffffffffffffffffffffffffffffffffffff909116935063f7a3080692506024019050600060405180830381600087803b1580156200235257600080fd5b505af115801562002367573d6000803e3d6000fd5b50506003546040517fcd653afc0000000000000000000000000000000000000000000000000000000081526050600482015242602482018190526044820152604e606482015273ffffffffffffffffffffffffffffffffffffffff909116925063cd653afc9150608401600060405180830381600087803b158015620023ec57600080fd5b505af115801562002401573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb1cf67550000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b1580156200249657600080fd5b505af1158015620024ab573d6000803e3d6000fd5b505060048054604080517ffeaf968c000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff909216945063feaf968c93508083019260a092918290030181865afa1580156200251d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200254391906200346f565b50506003546040517fcd653afc00000000000000000000000000000000000000000000000000000000815260506004820181905242602483015260006044830152606482015273ffffffffffffffffffffffffffffffffffffffff909116935063cd653afc92506084019050600060405180830381600087803b158015620025ca57600080fd5b505af1158015620025df573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb1cf67550000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b1580156200267457600080fd5b505af115801562002689573d6000803e3d6000fd5b505060048054604080517ffeaf968c000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff909216945063feaf968c93508083019260a092918290030181865afa158015620026fb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200272191906200346f565b505050505050505050505050565b60008054610100900460ff1615620027505750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620028945760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091620027f8917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc491608001620034de565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052620028329162003528565b6000604051808303816000865af19150503d806000811462002871576040519150601f19603f3d011682016040523d82523d6000602084013e62002876565b606091505b5091505080806020019051810190620028909190620033d9565b9150505b919050565b81604051602001620028ac919062003528565b6040516020818303038152906040528051906020012083604051602001620028d5919062003528565b604051602081830303815290604052805190602001201462002936577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf35838160405162002922919062003592565b60405180910390a162002936838362002a98565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161462002936577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf358381604051620029a0919062003592565b60405180910390a162002936838362002bfa565b81831462002936577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf358381604051620029ed919062003592565b60405180910390a162002936838362002d26565b8162000c59577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf35838160405162002a38919062003592565b60405180910390a162000c598262002e26565b81831462002936577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf35838160405162002a84919062003592565b60405180910390a162002936838362002ea1565b8060405160200162002aab919062003528565b604051602081830303815290604052805190602001208260405160200162002ad4919062003528565b604051602081830303815290604052805190602001201462000c59577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f5060405162002b769060208082526024908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b73747260408201527f696e675d00000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf35838160405162002baf9190620035db565b60405180910390a17f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf35838260405162002be8919062003635565b60405180910390a162000c5962002fa1565b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462000c59577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f5060405162002cb49060208082526025908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b61646460408201527f726573735d000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f8160405162002ced919062003673565b60405180910390a17f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f8260405162002be89190620036d5565b80821462000c59577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f5060405162002db49060208082526022908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b75696e60408201527f745d000000000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a88160405162002ded919062003713565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a88260405162002be891906200375f565b8062002e9e577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f5060405162002e8c9060208082526017908201527f4572726f723a20417373657274696f6e204661696c6564000000000000000000604082015260600190565b60405180910390a162002e9e62002fa1565b50565b80821462000c59577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f5060405162002f2f9060208082526021908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b696e7460408201527f5d00000000000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17f2fe632779174374378442a8e978bccfbdcc1d6b2b0d81f7e8eb776ab2286f1688160405162002f68919062003713565b60405180910390a17f2fe632779174374378442a8e978bccfbdcc1d6b2b0d81f7e8eb776ab2286f1688260405162002be891906200375f565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620030f65760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000009282019290925260016060820152600091907f70ca10bbd0dbfd9020a9f4b13402c16cb120705e0d1c0aeab10fa353ae586fc490608001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052620030739291602001620034de565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052620030ad9162003528565b6000604051808303816000865af19150503d8060008114620030ec576040519150601f19603f3d011682016040523d82523d6000602084013e620030f1565b606091505b505050505b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055565b6102b0806200379e83390190565b6106ca8062003a4e83390190565b617a51806200411883390190565b6121d0806200bb6983390190565b611717806200dd3983390190565b6000602082840312156200317d57600080fd5b813560ff811681146200318f57600080fd5b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562003200576200320062003196565b500290565b60208101600b831062003241577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b73ffffffffffffffffffffffffffffffffffffffff8116811462002e9e57600080fd5b6000602082840312156200327d57600080fd5b81516200318f8162003247565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60005b83811015620032d6578181015183820152602001620032bc565b8381111562000a075750506000910152565b600060208284031215620032fb57600080fd5b815167ffffffffffffffff808211156200331457600080fd5b818401915084601f8301126200332957600080fd5b8151818111156200333e576200333e6200328a565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156200338757620033876200328a565b81604052828152876020848701011115620033a157600080fd5b620033b4836020830160208801620032b9565b979650505050505050565b600060208284031215620033d257600080fd5b5051919050565b600060208284031215620033ec57600080fd5b815180151581146200318f57600080fd5b6000821982111562003413576200341362003196565b500190565b6000826200344f577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b805169ffffffffffffffffffff811681146200289457600080fd5b600080600080600060a086880312156200348857600080fd5b620034938662003454565b9450602086015193506040860151925060608601519150620034b86080870162003454565b90509295509295909350565b600082821015620034d957620034d962003196565b500390565b7fffffffff0000000000000000000000000000000000000000000000000000000083168152600082516200351a816004850160208701620032b9565b919091016004019392505050565b600082516200353c818460208701620032b9565b9190910192915050565b6000815180845262003560816020860160208601620032b9565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60408152600560408201527f4572726f7200000000000000000000000000000000000000000000000000000060608201526080602082015260006200318f608083018462003546565b6040815260006200361960408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b82810360208401526200362d818562003546565b949350505050565b6040815260006200361960408301600a81527f2020202041637475616c00000000000000000000000000000000000000000000602082015260400190565b604081526000620036b160408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b905073ffffffffffffffffffffffffffffffffffffffff8316602083015292915050565b604081526000620036b160408301600a81527f2020202041637475616c00000000000000000000000000000000000000000000602082015260400190565b6040815260006200375160408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b905082602083015292915050565b6040815260006200375160408301600a81527f2020202041637475616c0000000000000000000000000000000000000000000060208201526040019056fe608060405234801561001057600080fd5b50600080546001600160a01b031990811630908117835560028054909216179055338152600160208190526040909120805460ff191690911790556102568061005a6000396000f3fe608060405234801561001057600080fd5b50600436106100675760003560e01c806376e112861161005057806376e11286146100e95780639dcb511a1461014c578063fca513a81461018257600080fd5b8063087376951461006c5780635f259aba146100b6575b600080fd5b60005461008c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6100d96100c43660046101cb565b60016020526000908152604090205460ff1681565b60405190151581526020016100ad565b61014a6100f73660046101ed565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001691909216179055565b005b61008c61015a3660046101cb565b60036020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60025461008c9073ffffffffffffffffffffffffffffffffffffffff1681565b803573ffffffffffffffffffffffffffffffffffffffff811681146101c657600080fd5b919050565b6000602082840312156101dd57600080fd5b6101e6826101a2565b9392505050565b6000806040838503121561020057600080fd5b610209836101a2565b9150610217602084016101a2565b9050925092905056fea26469706673582212204291f208ba289dc45c65523845755f7f16fafcfe35cecba679ed1b9627e274ee64736f6c634300080a003360a060405234801561001057600080fd5b506040516106ca3803806106ca83398101604081905261002f9161006c565b60009190915560ff166080526001805460506001600160501b031991821681179092556004805490911690911790554260028190556003556100a2565b6000806040838503121561007f57600080fd5b82519150602083015160ff8116811461009757600080fd5b809150509250929050565b60805161060e6100bc600039600060d3015261060e6000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80639a6fc8f511610081578063d62ada111161005b578063d62ada11146102dc578063f7a30806146102f4578063feaf968c1461030757600080fd5b80639a6fc8f5146101cd578063bd18ad531461023a578063cd653afc1461024d57600080fd5b806354fd4d50116100b257806354fd4d501461012d57806367e8d83d1461013c5780637284e4161461018e57600080fd5b8063313ce567146100ce5780633fd0875f1461010c575b600080fd5b6100f57f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020015b60405180910390f35b6004546a0100000000000000000000900460ff166040516101039190610441565b60405160018152602001610103565b61018c61014a366004610482565b600480549115156c01000000000000000000000000027fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff909216919091179055565b005b604080518082018252600c81527f7072696365206f7261636c6500000000000000000000000000000000000000006020820152905161010391906104ab565b6102036101db36600461053d565b60015460005460025460035460045469ffffffffffffffffffff948516941691939590929450565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610103565b61018c610248366004610558565b61030f565b61018c61025b366004610579565b6001805469ffffffffffffffffffff9586167fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090911617905560029290925560035560048054919092167fffffffffffffffffffffffffffffffffffffffff00ff00000000000000000000909116176b020000000000000000000000179055565b6102e461035f565b6040519015158152602001610103565b61018c6103023660046105bf565b600055565b610203610385565b600480548291907fffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff166b01000000000000000000000083600281111561035757610357610412565b021790555050565b600454600090610380906b010000000000000000000000900460ff166103d6565b905090565b60008060008060006004600c9054906101000a900460ff16156103a757600080fd5b505060015460005460025460035460045469ffffffffffffffffffff9485169893975091955093509190911690565b600060028260028111156103ec576103ec610412565b14156103f757600080fd5b600182600281111561040b5761040b610412565b1492915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016006831061047c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561049457600080fd5b813580151581146104a457600080fd5b9392505050565b600060208083528351808285015260005b818110156104d8578581018301518582016040015282016104bc565b818111156104ea576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803569ffffffffffffffffffff8116811461053857600080fd5b919050565b60006020828403121561054f57600080fd5b6104a48261051e565b60006020828403121561056a57600080fd5b8135600381106104a457600080fd5b6000806000806080858703121561058f57600080fd5b6105988561051e565b935060208501359250604085013591506105b46060860161051e565b905092959194509250565b6000602082840312156105d157600080fd5b503591905056fea264697066735822122014874f7a973b86501c4c1a8be32490fe902c8f088ee234d25f9b2497e19f9e5264736f6c634300080a003360806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d00011790553480156200003a57600080fd5b506040805161018081019091526000908060c081018060018152604080518082018252600381526244414960e81b6020828101919091528301526012908201526305f5e100606082015260800160018152602001600081525081526020016040518060c001604052806002600a811115620000b957620000b962000b78565b815260408051808201825260048152635553444360e01b6020828101919091528301526006908201526305f5e100606082015260800160018152602001600081525081526020016040518060c001604052806003600a81111562000121576200012162000b78565b815260408051808201825260048152630ae8aa8960e31b602082810191909152830152601290820152644a817c8000606082015260800160028152602001600081525081526020016040518060c001604052806004600a8111156200018a576200018a62000b78565b815260408051808201825260048152634c494e4b60e01b6020828101919091528301526012908201526359682f00606082015260800160018152602001600081525081526020016040518060c001604052806005600a811115620001f257620001f262000b78565b815260408051808201825260048152631554d11560e21b602082810191909152830152601290820152633b023380606082015260800160018152602001600081525081526020016040518060c001604052806006600a8111156200025a576200025a62000b78565b815260408051808201825260058152640e6e88aa8960db1b602082810191909152830152601290820152644cd588640060608201526080016003815260200160009052905260408051610140810190915290915060009080608081018060078152602001604051806040016040528060048152602001636344414960e01b8152508152602001601260ff1681526020016305f5e100815260200160048081111562000309576200030962000b78565b8152602001600181525081526020016040518060c001604052806008600a81111562000339576200033962000b78565b81526040805180820182526005815264635553444360d81b6020828101919091528301526006908201526305f5e100606082015260800160048152602001600281525081526020016040518060c001604052806009600a811115620003a257620003a262000b78565b8152604080518082018252600581526418d554d11560da1b602082810191909152830152601290820152633b023380606082015260800160048152602001600581525081526020016040518060c00160405280600a808111156200040a576200040a62000b78565b81526040805180820182526005815264634c494e4b60d81b6020828101919091528301526012908201526359682f00606082015260800160048152602001600490529052905060005b600681101562000496576200048183826006811062000476576200047662000b8e565b6020020151620004db565b806200048d8162000ba4565b91505062000453565b5060005b6004811015620004d257620004bd82826004811062000476576200047662000b8e565b80620004c98162000ba4565b9150506200049a565b50505062000d14565b6000600282608001516004811115620004f857620004f862000b78565b14156200054e576040516200050d9062000a8c565b604051809103906000f0801580156200052a573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b03831617905590506200071e565b60038260800151600481111562000569576200056962000b78565b1415620005a4576040516200057e9062000a9a565b604051809103906000f0801580156200059b573d6000803e3d6000fd5b5090506200071e565b600182608001516004811115620005bf57620005bf62000b78565b1415620005f157816020015182602001518360400151604051620005e39062000aa8565b6200057e9392919062000c1e565b6004826080015160048111156200060c576200060c62000b78565b1415620006be576000600260008460a00151600a81111562000632576200063262000b78565b600a81111562000646576200064662000b78565b815260200190815260200160002060009054906101000a90046001600160a01b0316905082602001518360200151846040015183604051620006889062000ab6565b62000697949392919062000c5b565b604051809103906000f080158015620006b4573d6000803e3d6000fd5b509150506200071e565b60405162461bcd60e51b815260206004820152602b60248201527f74657374546f6b656e53756974653a204372656174696e6720756e6b6e6f776e60448201526a20746f6b656e207479706560a81b606482015260840160405180910390fd5b60005460208301516040516318caf8e360e31b8152620100009092046001600160a01b03169163c657c718916200075b9185919060040162000ca9565b600060405180830381600087803b1580156200077657600080fd5b505af11580156200078b573d6000803e3d6000fd5b50505050600082606001516008604051620007a69062000ac4565b91825260ff166020820152604001604051809103906000f080158015620007d1573d6000803e3d6000fd5b50905081600260008560000151600a811115620007f257620007f262000b78565b600a81111562000806576200080662000b78565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055508260600151600560008560000151600a8111156200085a576200085a62000b78565b600a8111156200086e576200086e62000b78565b8152602080820192909252604090810160009081209390935585516001600160a01b03861684526008909252909120805460ff1916600183600a811115620008ba57620008ba62000b78565b02179055508260800151600360008560000151600a811115620008e157620008e162000b78565b600a811115620008f557620008f562000b78565b81526020810191909152604001600020805460ff1916600183600481111562000922576200092262000b78565b0217905550604080518082019091526001600160a01b0380841682528281166020808401918252600780546001810182556000918252945160029095027fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688810180549686166001600160a01b031997881617905592517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c689909301805493909416929094169190911790915584015184519091600491600a811115620009eb57620009eb62000b78565b600a811115620009ff57620009ff62000b78565b8152602001908152602001600020908051906020019062000a2292919062000ad2565b5080600660008560000151600a81111562000a415762000a4162000b78565b600a81111562000a555762000a5562000b78565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550505050565b610ab1806200285183390190565b611224806200330283390190565b611758806200452683390190565b6117098062005c7e83390190565b6106ca806200738783390190565b82805462000ae09062000cd7565b90600052602060002090601f01602090048101928262000b04576000855562000b4f565b82601f1062000b1f57805160ff191683800117855562000b4f565b8280016001018555821562000b4f579182015b8281111562000b4f57825182559160200191906001019062000b32565b5062000b5d92915062000b61565b5090565b5b8082111562000b5d576000815560010162000b62565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600060001982141562000bc757634e487b7160e01b600052601160045260246000fd5b5060010190565b6000815180845260005b8181101562000bf65760208185018101518683018201520162000bd8565b8181111562000c09576000602083870101525b50601f01601f19169290920160200192915050565b60608152600062000c33606083018662000bce565b828103602084015262000c47818662000bce565b91505060ff83166040830152949350505050565b60808152600062000c70608083018762000bce565b828103602084015262000c84818762000bce565b60ff95909516604084015250506001600160a01b039190911660609091015292915050565b6001600160a01b038316815260406020820181905260009062000ccf9083018462000bce565b949350505050565b600181811c9082168062000cec57607f821691505b6020821081141562000d0e57634e487b7160e01b600052602260045260246000fd5b50919050565b611b2d8062000d246000396000f3fe6080604052600436106101635760003560e01c80638eb86e8b116100c0578063c6c3bbe611610074578063d051a62211610059578063d051a62214610490578063eebab8ef146104b0578063fa7626d4146104d057600080fd5b8063c6c3bbe614610433578063c74912d21461045357600080fd5b80639b140a85116100a55780639b140a85146103e6578063b36ba20814610406578063ba414fa61461040e57600080fd5b80638eb86e8b1461038357806398cdaadf146103a357600080fd5b80636a72bde71161011757806388327863116100fc578063883278631461030857806388f776a2146103365780638a3177a31461035657600080fd5b80636a72bde7146102c45780636ca42ae3146102e657600080fd5b8063440864fa11610148578063440864fa146102025780634b57b0be1461022f57806367b426451461028157600080fd5b806304bc3b1c1461016f57806310c7f0b9146101b557600080fd5b3661016a57005b600080fd5b34801561017b57600080fd5b5061019f61018a3660046116f6565b60086020526000908152604090205460ff1681565b6040516101ac9190611742565b60405180910390f35b3480156101c157600080fd5b506101d56101d036600461175c565b6104ea565b6040805173ffffffffffffffffffffffffffffffffffffffff9384168152929091166020830152016101ac565b34801561020e57600080fd5b5061022261021d366004611784565b610530565b6040516101ac91906117cb565b34801561023b57600080fd5b5060015461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101ac565b34801561028d57600080fd5b5061025c61029c366004611784565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156102d057600080fd5b506102e46102df36600461181c565b6105ca565b005b3480156102f257600080fd5b506102fb610730565b6040516101ac919061186b565b34801561031457600080fd5b506103286103233660046118d4565b6107b5565b6040519081526020016101ac565b34801561034257600080fd5b506102e461035136600461190b565b610888565b34801561036257600080fd5b50610328610371366004611784565b60056020526000908152604090205481565b34801561038f57600080fd5b506102e461039e366004611954565b6108b9565b3480156103af57600080fd5b5061025c6103be366004611784565b60066020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156103f257600080fd5b506102e4610401366004611993565b610a73565b6102e4610b22565b34801561041a57600080fd5b50610423610ba0565b60405190151581526020016101ac565b34801561043f57600080fd5b506102e461044e3660046119b3565b610d00565b34801561045f57600080fd5b5061048361046e366004611784565b60036020526000908152604090205460ff1681565b6040516101ac91906119d3565b34801561049c57600080fd5b506103286104ab36600461190b565b610daf565b3480156104bc57600080fd5b506102e46104cb366004611954565b610e8b565b3480156104dc57600080fd5b506000546104239060ff1681565b600781815481106104fa57600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff91821692501682565b60046020526000908152604090208054610549906119e7565b80601f0160208091040260200160405190810160405280929190818152602001828054610575906119e7565b80156105c25780601f10610597576101008083540402835291602001916105c2565b820191906000526020600020905b8154815290600101906020018083116105a557829003601f168201915b505050505081565b6000546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152620100009092049091169063ca669fa790602401600060405180830381600087803b15801561063e57600080fd5b505af1158015610652573d6000803e3d6000fd5b505050506002600085600a81111561066c5761066c611713565b600a81111561067d5761067d611713565b8152602081019190915260409081016000205490517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490529091169063095ea7b3906044016020604051808303816000875af1158015610705573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107299190611a3b565b5050505050565b60606007805480602002602001604051908101604052809291908181526020016000905b828210156107ac5760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff908116835260019182015416828401529083529092019101610754565b50505050905090565b60006002600084600a8111156107cd576107cd611713565b600a8111156107de576107de611713565b8152602081019190915260409081016000205490517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152909116906370a0823190602401602060405180830381865afa15801561085d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108819190611a5d565b9392505050565b6108b48383837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6105ca565b505050565b60016003600085600a8111156108d1576108d1611713565b600a8111156108e2576108e2611713565b815260208101919091526040016000205460ff16600481111561090757610907611713565b14610999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f74657374546f6b656e53756974653a20547279696e6720746f206275726e206160448201527f206e6f6e2d6e6f726d616c20746f6b656e00000000000000000000000000000060648201526084015b60405180910390fd5b6002600084600a8111156109af576109af611713565b600a8111156109c0576109c0611713565b8152602081019190915260409081016000205490517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526024820184905290911690639dc29fac906044015b6020604051808303816000875af1158015610a49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6d9190611a3b565b50505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604081205460ff169081600a811115610aaf57610aaf611713565b1415610b17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f20746f6b656e2077697468207375636820616464726573730000000000006044820152606401610990565b610a6d818484610888565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015610b8c57600080fd5b505af1158015610729573d6000803e3d6000fd5b60008054610100900460ff1615610bc05750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610cfb5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610c65917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc491608001611a76565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052610c9d91611abe565b6000604051808303816000865af19150503d8060008114610cda576040519150601f19603f3d011682016040523d82523d6000602084013e610cdf565b606091505b5091505080806020019051810190610cf79190611a3b565b9150505b919050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604081205460ff169081600a811115610d3c57610d3c611713565b1415610da4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f20746f6b656e2077697468207375636820616464726573730000000000006044820152606401610990565b610a6d818484610e8b565b60006002600085600a811115610dc757610dc7611713565b600a811115610dd857610dd8611713565b8152602081019190915260409081016000205490517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301529091169063dd62ed3e90604401602060405180830381865afa158015610e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e839190611a5d565b949350505050565b60026003600085600a811115610ea357610ea3611713565b600a811115610eb457610eb4611713565b815260208101919091526040016000205460ff166004811115610ed957610ed9611713565b1415610ff6576000546040517fc88a5e6d000000000000000000000000000000000000000000000000000000008152306004820152602481018390526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c88a5e6d90604401600060405180830381600087803b158015610f5657600080fd5b505af1158015610f6a573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015610fd857600080fd5b505af1158015610fec573d6000803e3d6000fd5b505050505061163c565b600380600085600a81111561100d5761100d611713565b600a81111561101e5761101e611713565b815260208101919091526040016000205460ff16600481111561104357611043611713565b14156111aa576000546040517fc88a5e6d000000000000000000000000000000000000000000000000000000008152306004820152602481018390526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c88a5e6d90604401600060405180830381600087803b1580156110c057600080fd5b505af11580156110d4573d6000803e3d6000fd5b505050506002600084600a8111156110ee576110ee611713565b600a8111156110ff576110ff611713565b8152602081019190915260409081016000205490517fa1903eab00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a1903eab90839060240160206040518083038185885af115801561117f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906111a49190611a5d565b5061163c565b60046003600085600a8111156111c2576111c2611713565b600a8111156111d3576111d3611713565b815260208101919091526040016000205460ff1660048111156111f8576111f8611713565b141561148f5760006002600085600a81111561121657611216611713565b600a81111561122757611227611713565b815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c49190611ada565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600860205260409020549091506112fb9060ff163084610e8b565b8073ffffffffffffffffffffffffffffffffffffffff1663095ea7b36002600087600a81111561132d5761132d611713565b600a81111561133e5761133e611713565b81526020810191909152604090810160002054905160e083901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602481018590526044016020604051808303816000875af11580156113c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e69190611a3b565b506002600085600a8111156113fd576113fd611713565b600a81111561140e5761140e611713565b8152602081019190915260409081016000205490517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810184905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f1990604401600060405180830381600087803b158015610fd857600080fd5b60016003600085600a8111156114a7576114a7611713565b600a8111156114b8576114b8611713565b815260208101919091526040016000205460ff1660048111156114dd576114dd611713565b14156115b4576002600084600a8111156114f9576114f9611713565b600a81111561150a5761150a611713565b8152602081019190915260409081016000205490517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f19906044016020604051808303816000875af1158015611590573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a49190611a3b565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f74657374546f6b656e53756974653a20547279696e6720746f207472616e736660448201527f657220756e6b6e6f776e20746f6b656e000000000000000000000000000000006064820152608401610990565b6002600084600a81111561165257611652611713565b600a81111561166357611663611713565b8152602081019190915260409081016000205490517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490529091169063a9059cbb90604401610a2a565b73ffffffffffffffffffffffffffffffffffffffff811681146116f357600080fd5b50565b60006020828403121561170857600080fd5b8135610881816116d1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60208101600b831061175657611756611713565b91905290565b60006020828403121561176e57600080fd5b5035919050565b8035600b8110610cfb57600080fd5b60006020828403121561179657600080fd5b61088182611775565b60005b838110156117ba5781810151838201526020016117a2565b83811115610a6d5750506000910152565b60208152600082518060208401526117ea81604085016020870161179f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000806080858703121561183257600080fd5b61183b85611775565b9350602085013561184b816116d1565b9250604085013561185b816116d1565b9396929550929360600135925050565b602080825282518282018190526000919060409081850190868401855b828110156118c7578151805173ffffffffffffffffffffffffffffffffffffffff90811686529087015116868501529284019290850190600101611888565b5091979650505050505050565b600080604083850312156118e757600080fd5b6118f083611775565b91506020830135611900816116d1565b809150509250929050565b60008060006060848603121561192057600080fd5b61192984611775565b92506020840135611939816116d1565b91506040840135611949816116d1565b809150509250925092565b60008060006060848603121561196957600080fd5b61197284611775565b92506020840135611982816116d1565b929592945050506040919091013590565b6000806000606084860312156119a857600080fd5b8335611929816116d1565b6000806000606084860312156119c857600080fd5b8335611972816116d1565b602081016005831061175657611756611713565b600181811c908216806119fb57607f821691505b60208210811415611a35577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600060208284031215611a4d57600080fd5b8151801515811461088157600080fd5b600060208284031215611a6f57600080fd5b5051919050565b7fffffffff000000000000000000000000000000000000000000000000000000008316815260008251611ab081600485016020870161179f565b919091016004019392505050565b60008251611ad081846020870161179f565b9190910192915050565b600060208284031215611aec57600080fd5b8151610881816116d156fea264697066735822122010fe735ed069aca27931edce4ba2ff14ec7886bf21b0eea685a884f9200fb49e64736f6c634300080a003360c0604052600d60808190526c2bb930b83832b21022ba3432b960991b60a090815261002e916000919061007a565b50604080518082019091526004808252630ae8aa8960e31b602090920191825261005a9160019161007a565b506002805460ff1916601217905534801561007457600080fd5b5061014e565b82805461008690610113565b90600052602060002090601f0160209004810192826100a857600085556100ee565b82601f106100c157805160ff19168380011785556100ee565b828001600101855582156100ee579182015b828111156100ee5782518255916020019190600101906100d3565b506100fa9291506100fe565b5090565b5b808211156100fa57600081556001016100ff565b600181811c9082168061012757607f821691505b6020821081141561014857634e487b7160e01b600052602260045260246000fd5b50919050565b6109548061015d6000396000f3fe6080604052600436106100cb5760003560e01c806340c10f1911610074578063a9059cbb1161004e578063a9059cbb14610225578063d0e30db014610245578063dd62ed3e1461024d57600080fd5b806340c10f19146101c357806370a08231146101e357806395d89b411461021057600080fd5b806323b872dd116100a557806323b872dd146101575780632e1a7d4d14610177578063313ce5671461019757600080fd5b806306fdde03146100df578063095ea7b31461010a57806318160ddd1461013a57600080fd5b366100da576100d8610285565b005b600080fd5b3480156100eb57600080fd5b506100f46102e0565b6040516101019190610703565b60405180910390f35b34801561011657600080fd5b5061012a61012536600461079f565b61036e565b6040519015158152602001610101565b34801561014657600080fd5b50475b604051908152602001610101565b34801561016357600080fd5b5061012a6101723660046107c9565b6103e7565b34801561018357600080fd5b506100d8610192366004610805565b6105fe565b3480156101a357600080fd5b506002546101b19060ff1681565b60405160ff9091168152602001610101565b3480156101cf57600080fd5b506100d86101de36600461079f565b6106a4565b3480156101ef57600080fd5b506101496101fe36600461081e565b60036020526000908152604090205481565b34801561021c57600080fd5b506100f46106e2565b34801561023157600080fd5b5061012a61024036600461079f565b6106ef565b6100d8610285565b34801561025957600080fd5b50610149610268366004610839565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102a490849061089b565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102ed906108b3565b80601f0160208091040260200160405190810160405280929190818152602001828054610319906108b3565b80156103665780601f1061033b57610100808354040283529160200191610366565b820191906000526020600020905b81548152906001019060200180831161034957829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103d69086815260200190565b60405180910390a350600192915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561041957600080fd5b73ffffffffffffffffffffffffffffffffffffffff8416331480159061048f575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105175773ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020548211156104d157600080fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915281208054849290610511908490610907565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061054c908490610907565b909155505073ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260408120805484929061058690849061089b565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516105ec91815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561061a57600080fd5b3360009081526003602052604081208054839290610639908490610907565b9091555050604051339082156108fc029083906000818181858888f1935050505015801561066b573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260036020526040812080548392906106d990849061089b565b90915550505050565b600180546102ed906108b3565b60006106fc3384846103e7565b9392505050565b600060208083528351808285015260005b8181101561073057858101830151858201604001528201610714565b81811115610742576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461079a57600080fd5b919050565b600080604083850312156107b257600080fd5b6107bb83610776565b946020939093013593505050565b6000806000606084860312156107de57600080fd5b6107e784610776565b92506107f560208501610776565b9150604084013590509250925092565b60006020828403121561081757600080fd5b5035919050565b60006020828403121561083057600080fd5b6106fc82610776565b6000806040838503121561084c57600080fd5b61085583610776565b915061086360208401610776565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156108ae576108ae61086c565b500190565b600181811c908216806108c757607f821691505b60208210811415610901577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000828210156109195761091961086c565b50039056fea26469706673582212206ec943fa4e3b70d8fca6c25b6aa26fa18e8f8952ce3bc4d5afcb443bf3097c0564736f6c634300080a003360806040526000600255600060035534801561001a57600080fd5b506111fa8061002a6000396000f3fe60806040526004361061016e5760003560e01c80637a28fb88116100cb578063bdd17e1c1161007f578063dd62ed3e11610059578063dd62ed3e146103ee578063ee7a7c0414610441578063f5eb42dc1461046157600080fd5b8063bdd17e1c146103ad578063cdb9a21c146103c3578063d5002f2e146103d957600080fd5b8063a1903eab116100b0578063a1903eab1461035a578063a457c2d71461036d578063a9059cbb1461038d57600080fd5b80637a28fb88146102f457806395d89b411461031457600080fd5b806323b872dd1161012257806337cfdaca1161010757806337cfdaca1461020d57806339509351146102b457806370a08231146102d457600080fd5b806323b872dd14610278578063313ce5671461029857600080fd5b806318160ddd1161015357806318160ddd1461020d578063192084511461023057806322301f6e1461025057600080fd5b806306fdde0314610185578063095ea7b3146101dd57600080fd5b366101805761017d6000610481565b50005b600080fd5b34801561019157600080fd5b5060408051808201909152601781527f4c6971756964207374616b656420457468657220322e3000000000000000000060208201525b6040516101d49190610f63565b60405180910390f35b3480156101e957600080fd5b506101fd6101f8366004610fff565b610545565b60405190151581526020016101d4565b34801561021957600080fd5b5061022261055b565b6040519081526020016101d4565b34801561023c57600080fd5b5061022261024b366004611029565b61056b565b34801561025c57600080fd5b5061027661026b366004611042565b600391909155600255565b005b34801561028457600080fd5b506101fd610293366004611064565b6105ab565b3480156102a457600080fd5b50604051601281526020016101d4565b3480156102c057600080fd5b506101fd6102cf366004610fff565b610696565b3480156102e057600080fd5b506102226102ef3660046110a0565b6106d9565b34801561030057600080fd5b5061022261030f366004611029565b61070e565b34801561032057600080fd5b5060408051808201909152600581527f737445544800000000000000000000000000000000000000000000000000000060208201526101c7565b6102226103683660046110a0565b61073a565b34801561037957600080fd5b506101fd610388366004610fff565b610745565b34801561039957600080fd5b506101fd6103a8366004610fff565b6107f9565b3480156103b957600080fd5b5061022260035481565b3480156103cf57600080fd5b5061022260025481565b3480156103e557600080fd5b50610222610806565b3480156103fa57600080fd5b506102226104093660046110bb565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b34801561044d57600080fd5b5061027661045c366004610fff565b610811565b34801561046d57600080fd5b5061022261047c3660046110a0565b61081f565b60003334806104f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f5a45524f5f4445504f534954000000000000000000000000000000000000000060448201526064015b60405180910390fd5b60006104fc8261056b565b9050806105065750805b8160036000828254610518919061111d565b909155506105289050838261084a565b61053383838761093b565b61053d8382610992565b949350505050565b60006105523384846109ea565b50600192915050565b600061056660035490565b905090565b60008061057760035490565b9050806105875750600092915050565b6105a48161059e61059760025490565b8690610b52565b90610b5e565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001602090815260408083203384529091528120548281101561066c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f5452414e534645525f414d4f554e545f455843454544535f414c4c4f57414e4360448201527f450000000000000000000000000000000000000000000000000000000000000060648201526084016104e8565b610677858585610b6a565b61068b85336106868487610bef565b6109ea565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916105529185906106869086610bfb565b73ffffffffffffffffffffffffffffffffffffffff81166000908152602081905260408120546107089061070e565b92915050565b60008061071a60025490565b90508061072a5750600092915050565b6105a48161059e61059760035490565b600061070882610481565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156107e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4445435245415345445f414c4c4f57414e43455f42454c4f575f5a45524f000060448201526064016104e8565b6107ef33856106868487610bef565b5060019392505050565b6000610552338484610b6a565b600061056660025490565b61081b8282610c07565b5050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040812054610708565b73ffffffffffffffffffffffffffffffffffffffff82166108c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4d494e545f544f5f5448455f5a45524f5f41444452455353000000000000000060448201526064016104e8565b80600260008282546108d9919061111d565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205461090e9082610bfb565b73ffffffffffffffffffffffffffffffffffffffff90921660009081526020819052604090209190915550565b6040805183815273ffffffffffffffffffffffffffffffffffffffff83811660208301528516917fed8dd430b1e4bba98e943dc5b157cf7b54d9e12916d6c474ff5733a95001d03b910160405180910390a2505050565b73ffffffffffffffffffffffffffffffffffffffff821660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6109d58461070e565b60405190815260200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff8316610a67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f415050524f56455f46524f4d5f5a45524f5f414444524553530000000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff8216610ae4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f415050524f56455f544f5f5a45524f5f4144445245535300000000000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006105a48284611135565b60006105a48284611172565b6000610b758261056b565b9050610b82848483610d64565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610be191815260200190565b60405180910390a350505050565b60006105a482846111ad565b60006105a4828461111d565b73ffffffffffffffffffffffffffffffffffffffff8216610c84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4255524e5f46524f4d5f5448455f5a45524f5f4144445245535300000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205480821115610d14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4255524e5f414d4f554e545f455843454544535f42414c414e4345000000000060448201526064016104e8565b8160026000828254610d2691906111ad565b90915550610d3690508183610bef565b73ffffffffffffffffffffffffffffffffffffffff9093166000908152602081905260409020929092555050565b73ffffffffffffffffffffffffffffffffffffffff8316610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f5452414e534645525f46524f4d5f5448455f5a45524f5f41444452455353000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff8216610e5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f5452414e534645525f544f5f5448455f5a45524f5f414444524553530000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205480821115610eee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5452414e534645525f414d4f554e545f455843454544535f42414c414e43450060448201526064016104e8565b610ef88183610bef565b73ffffffffffffffffffffffffffffffffffffffff8086166000908152602081905260408082209390935590851681522054610f349083610bfb565b73ffffffffffffffffffffffffffffffffffffffff909316600090815260208190526040902092909255505050565b600060208083528351808285015260005b81811015610f9057858101830151858201604001528201610f74565b81811115610fa2576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ffa57600080fd5b919050565b6000806040838503121561101257600080fd5b61101b83610fd6565b946020939093013593505050565b60006020828403121561103b57600080fd5b5035919050565b6000806040838503121561105557600080fd5b50508035926020909101359150565b60008060006060848603121561107957600080fd5b61108284610fd6565b925061109060208501610fd6565b9150604084013590509250925092565b6000602082840312156110b257600080fd5b6105a482610fd6565b600080604083850312156110ce57600080fd5b6110d783610fd6565b91506110e560208401610fd6565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611130576111306110ee565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561116d5761116d6110ee565b500290565b6000826111a8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000828210156111bf576111bf6110ee565b50039056fea2646970667358221220a5b4f31162ba2b8b3424cef84b31ef91d05a825243602b5fdf758ffb49b8246364736f6c634300080a003360a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a003360c06040523480156200001157600080fd5b506040516200170938038062001709833981016040819052620000349162000266565b8351849084906200004d906003906020850190620000f3565b50805162000063906004906020840190620000f3565b505050620000806200007a6200009d60201b60201c565b620000a1565b60ff9091166080526001600160a01b031660a05250620003479050565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b82805462000101906200030a565b90600052602060002090601f01602090048101928262000125576000855562000170565b82601f106200014057805160ff191683800117855562000170565b8280016001018555821562000170579182015b828111156200017057825182559160200191906001019062000153565b506200017e92915062000182565b5090565b5b808211156200017e576000815560010162000183565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c157600080fd5b81516001600160401b0380821115620001de57620001de62000199565b604051601f8301601f19908116603f0116810190828211818310171562000209576200020962000199565b816040528381526020925086838588010111156200022657600080fd5b600091505b838210156200024a57858201830151818301840152908201906200022b565b838211156200025c5760008385830101525b9695505050505050565b600080600080608085870312156200027d57600080fd5b84516001600160401b03808211156200029557600080fd5b620002a388838901620001af565b95506020870151915080821115620002ba57600080fd5b50620002c987828801620001af565b935050604085015160ff81168114620002e157600080fd5b60608601519092506001600160a01b0381168114620002ff57600080fd5b939692955090935050565b600181811c908216806200031f57607f821691505b602082108114156200034157634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05161138e6200037b600039600081816101f70152818161041f0152610600015260006101a2015261138e6000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80636f307dc3116100b257806395d89b4111610081578063a9059cbb11610066578063a9059cbb146102b5578063dd62ed3e146102c8578063f2fde38b1461030e57600080fd5b806395d89b411461029a578063a457c2d7146102a257600080fd5b80636f307dc3146101f257806370a082311461023e578063715018a6146102745780638da5cb5b1461027c57600080fd5b806323b872dd116100ee57806323b872dd14610188578063313ce5671461019b57806339509351146101cc57806340c10f19146101df57600080fd5b806306fdde0314610120578063095ea7b31461013e57806318160ddd146101615780631e9a695014610173575b600080fd5b610128610321565b604051610135919061112d565b60405180910390f35b61015161014c3660046111c9565b6103b3565b6040519015158152602001610135565b6002545b604051908152602001610135565b6101866101813660046111c9565b6103c9565b005b6101516101963660046111f3565b610491565b60405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610135565b6101516101da3660046111c9565b61057c565b6101866101ed3660046111c9565b6105c5565b6102197f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b61016561024c36600461122f565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610186610691565b60055473ffffffffffffffffffffffffffffffffffffffff16610219565b61012861071e565b6101516102b03660046111c9565b61072d565b6101516102c33660046111c9565b610805565b6101656102d6366004611251565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b61018661031c36600461122f565b610812565b60606003805461033090611284565b80601f016020809104026020016040519081016040528092919081815260200182805461035c90611284565b80156103a95780601f1061037e576101008083540402835291602001916103a9565b820191906000526020600020905b81548152906001019060200180831161038c57829003601f168201915b5050505050905090565b60006103c0338484610942565b50600192915050565b6103d33382610af5565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015610468573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048c91906112d8565b505050565b600061049e848484610ce2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6105718533858403610942565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916103c09185906105c0908690611329565b610942565b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906323b872dd906064016020604051808303816000875af115801561065e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068291906112d8565b5061068d8282610f96565b5050565b60055473ffffffffffffffffffffffffffffffffffffffff163314610712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161055b565b61071c60006110b6565b565b60606004805461033090611284565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156107ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161055b565b6107fb3385858403610942565b5060019392505050565b60006103c0338484610ce2565b60055473ffffffffffffffffffffffffffffffffffffffff163314610893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161055b565b73ffffffffffffffffffffffffffffffffffffffff8116610936576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161055b565b61093f816110b6565b50565b73ffffffffffffffffffffffffffffffffffffffff83166109e4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff8216610a87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8216610b98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015610c4e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290610c8a908490611341565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff8216610e28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610ede576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610f22908490611329565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f8891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161055b565b80600260008282546110259190611329565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152602081905260408120805483929061105f908490611329565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208083528351808285015260005b8181101561115a5785810183015185820160400152820161113e565b8181111561116c576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146111c457600080fd5b919050565b600080604083850312156111dc57600080fd5b6111e5836111a0565b946020939093013593505050565b60008060006060848603121561120857600080fd5b611211846111a0565b925061121f602085016111a0565b9150604084013590509250925092565b60006020828403121561124157600080fd5b61124a826111a0565b9392505050565b6000806040838503121561126457600080fd5b61126d836111a0565b915061127b602084016111a0565b90509250929050565b600181811c9082168061129857607f821691505b602082108114156112d2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156112ea57600080fd5b8151801515811461124a57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561133c5761133c6112fa565b500190565b600082821015611353576113536112fa565b50039056fea26469706673582212203a6db30cd3c097921df4156794aa7973eb848711deeb2cffd7c54a9df1fdb0a564736f6c634300080a003360a060405234801561001057600080fd5b506040516106ca3803806106ca83398101604081905261002f9161006c565b60009190915560ff166080526001805460506001600160501b031991821681179092556004805490911690911790554260028190556003556100a2565b6000806040838503121561007f57600080fd5b82519150602083015160ff8116811461009757600080fd5b809150509250929050565b60805161060e6100bc600039600060d3015261060e6000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80639a6fc8f511610081578063d62ada111161005b578063d62ada11146102dc578063f7a30806146102f4578063feaf968c1461030757600080fd5b80639a6fc8f5146101cd578063bd18ad531461023a578063cd653afc1461024d57600080fd5b806354fd4d50116100b257806354fd4d501461012d57806367e8d83d1461013c5780637284e4161461018e57600080fd5b8063313ce567146100ce5780633fd0875f1461010c575b600080fd5b6100f57f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020015b60405180910390f35b6004546a0100000000000000000000900460ff166040516101039190610441565b60405160018152602001610103565b61018c61014a366004610482565b600480549115156c01000000000000000000000000027fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff909216919091179055565b005b604080518082018252600c81527f7072696365206f7261636c6500000000000000000000000000000000000000006020820152905161010391906104ab565b6102036101db36600461053d565b60015460005460025460035460045469ffffffffffffffffffff948516941691939590929450565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610103565b61018c610248366004610558565b61030f565b61018c61025b366004610579565b6001805469ffffffffffffffffffff9586167fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090911617905560029290925560035560048054919092167fffffffffffffffffffffffffffffffffffffffff00ff00000000000000000000909116176b020000000000000000000000179055565b6102e461035f565b6040519015158152602001610103565b61018c6103023660046105bf565b600055565b610203610385565b600480548291907fffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff166b01000000000000000000000083600281111561035757610357610412565b021790555050565b600454600090610380906b010000000000000000000000900460ff166103d6565b905090565b60008060008060006004600c9054906101000a900460ff16156103a757600080fd5b505060015460005460025460035460045469ffffffffffffffffffff9485169893975091955093509190911690565b600060028260028111156103ec576103ec610412565b14156103f757600080fd5b600182600281111561040b5761040b610412565b1492915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016006831061047c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561049457600080fd5b813580151581146104a457600080fd5b9392505050565b600060208083528351808285015260005b818110156104d8578581018301518582016040015282016104bc565b818111156104ea576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803569ffffffffffffffffffff8116811461053857600080fd5b919050565b60006020828403121561054f57600080fd5b6104a48261051e565b60006020828403121561056a57600080fd5b8135600381106104a457600080fd5b6000806000806080858703121561058f57600080fd5b6105988561051e565b935060208501359250604085013591506105b46060860161051e565b905092959194509250565b6000602082840312156105d157600080fd5b503591905056fea264697066735822122014874f7a973b86501c4c1a8be32490fe902c8f088ee234d25f9b2497e19f9e5264736f6c634300080a003360a06040523480156200001157600080fd5b50604051620021d0380380620021d08339810160408190526200003491620002f9565b806001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000073573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200009d919081019062000374565b604051602001620000af91906200042c565b604051602081830303815290604052816001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015620000fd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000127919081019062000374565b6040516020016200013991906200045c565b60408051601f1981840301815291905281516200015e90600390602085019062000253565b5080516200017490600490602084019062000253565b505050620001916200018b620001f860201b60201c565b620001fc565b600680546001600160a01b0319166001600160a01b038316179055620001c26200024e602090811b62000b9817901c565b620001cf90600a6200059d565b608081905260075550336000908152600860205260409020805460ff19166001179055620005eb565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b601290565b8280546200026190620005ae565b90600052602060002090601f016020900481019282620002855760008555620002d0565b82601f10620002a057805160ff1916838001178555620002d0565b82800160010185558215620002d0579182015b82811115620002d0578251825591602001919060010190620002b3565b50620002de929150620002e2565b5090565b5b80821115620002de5760008155600101620002e3565b6000602082840312156200030c57600080fd5b81516001600160a01b03811681146200032457600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200035e57818101518382015260200162000344565b838111156200036e576000848401525b50505050565b6000602082840312156200038757600080fd5b81516001600160401b03808211156200039f57600080fd5b818401915084601f830112620003b457600080fd5b815181811115620003c957620003c96200032b565b604051601f8201601f19908116603f01168101908382118183101715620003f457620003f46200032b565b816040528281528760208487010111156200040e57600080fd5b6200042183602083016020880162000341565b979650505050505050565b6503cb2b0b937160d51b8152600082516200044f81600685016020870162000341565b9190910160060192915050565b613cbb60f11b8152600082516200047b81600285016020870162000341565b9190910160020192915050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620004df578160001904821115620004c357620004c362000488565b80851615620004d157918102915b93841c9390800290620004a3565b509250929050565b600082620004f85750600162000597565b81620005075750600062000597565b81600181146200052057600281146200052b576200054b565b600191505062000597565b60ff8411156200053f576200053f62000488565b50506001821b62000597565b5060208310610133831016604e8410600b841016171562000570575081810a62000597565b6200057c83836200049e565b806000190482111562000593576200059362000488565b0290505b92915050565b60006200032460ff841683620004e7565b600181811c90821680620005c357607f821691505b60208210811415620005e557634e487b7160e01b600052602260045260246000fd5b50919050565b608051611bc26200060e6000396000818161073601526109a00152611bc26000f3fe608060405234801561001057600080fd5b50600436106101ad5760003560e01c806370a08231116100ee578063a9059cbb11610097578063dd62ed3e11610071578063dd62ed3e14610395578063e63697c8146103db578063f2fde38b146103ee578063fc0c546a1461040157600080fd5b8063a9059cbb14610367578063b6b55f251461037a578063d0e30db01461038d57600080fd5b806395d89b41116100c857806395d89b411461034357806399530b061461034b578063a457c2d71461035457600080fd5b806370a08231146102c6578063715018a6146102fc5780638da5cb5b1461030457600080fd5b80632e1a7d4d1161015b5780633ccfd60b116101355780633ccfd60b1461027557806343d24a5e1461027d57806354a055c1146102905780636e553f65146102b357600080fd5b80632e1a7d4d14610240578063313ce56714610253578063395093511461026257600080fd5b8063118c9a071161018c578063118c9a071461021057806318160ddd1461022557806323b872dd1461022d57600080fd5b8062f714ce146101b257806306fdde03146101d8578063095ea7b3146101ed575b600080fd5b6101c56101c0366004611879565b610421565b6040519081526020015b60405180910390f35b6101e0610438565b6040516101cf91906118d1565b6102006101fb366004611922565b610447565b60405190151581526020016101cf565b61022361021e36600461194c565b61045d565b005b6002546101c5565b61020061023b366004611965565b6104e0565b6101c561024e36600461194c565b6105c8565b604051601281526020016101cf565b610200610270366004611922565b6105d4565b6101c561061d565b61022361028b3660046119a1565b610636565b61020061029e3660046119a1565b60086020526000908152604090205460ff1681565b6101c56102c1366004611879565b610706565b6101c56102d43660046119a1565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610223610771565b60055473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101cf565b6101e06107fe565b6101c560075481565b610200610362366004611922565b610808565b610200610375366004611922565b6108e0565b6101c561038836600461194c565b6108ed565b6101c56108f9565b6101c56103a33660046119bc565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101c56103e93660046119e6565b610992565b6102236103fc3660046119a1565b610a68565b60065461031e9073ffffffffffffffffffffffffffffffffffffffff1681565b600061042f83836001610992565b90505b92915050565b6060610442610b9d565b905090565b6000610454338484610c2f565b50600192915050565b3360009081526008602052604090205460ff166104db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f666f72207570646174657273206f6e6c7900000000000000000000000000000060448201526064015b60405180910390fd5b600755565b60006104ed848484610de3565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600160209081526040808320338452909152902054828110156105ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084016104d2565b6105bb8533858403610c2f565b60019150505b9392505050565b60006104328233610421565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091610454918590610618908690611a3a565b610c2f565b33600090815260208190526040812054610442906105c8565b60055473ffffffffffffffffffffffffffffffffffffffff1633146106b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104d2565b73ffffffffffffffffffffffffffffffffffffffff16600090815260086020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b60065460009061072e9073ffffffffffffffffffffffffffffffffffffffff16333086611098565b60075461075b7f000000000000000000000000000000000000000000000000000000000000000085611a52565b6107659190611a8f565b90506104328282611174565b60055473ffffffffffffffffffffffffffffffffffffffff1633146107f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104d2565b6107fc6000611294565b565b606061044261130b565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156108c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084016104d2565b6108d63385858403610c2f565b5060019392505050565b6000610454338484610de3565b60006104328233610706565b6006546040517f70a082310000000000000000000000000000000000000000000000000000000081523360048201526000916104429173ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa15801561096e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103889190611aca565b600061099e338561131a565b7f0000000000000000000000000000000000000000000000000000000000000000600754856109cd9190611a52565b6109d79190611a8f565b90506001821115610a44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4c6f737320746f6f20626967000000000000000000000000000000000000000060448201526064016104d2565b6006546105c19073ffffffffffffffffffffffffffffffffffffffff163383611504565b60055473ffffffffffffffffffffffffffffffffffffffff163314610ae9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104d2565b73ffffffffffffffffffffffffffffffffffffffff8116610b8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016104d2565b610b9581611294565b50565b601290565b606060038054610bac90611ae3565b80601f0160208091040260200160405190810160405280929190818152602001828054610bd890611ae3565b8015610c255780601f10610bfa57610100808354040283529160200191610c25565b820191906000526020600020905b815481529060010190602001808311610c0857829003601f168201915b5050505050905090565b73ffffffffffffffffffffffffffffffffffffffff8316610cd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016104d2565b73ffffffffffffffffffffffffffffffffffffffff8216610d74576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f737300000000000000000000000000000000000000000000000000000000000060648201526084016104d2565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610e86576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016104d2565b73ffffffffffffffffffffffffffffffffffffffff8216610f29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016104d2565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610fdf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e6365000000000000000000000000000000000000000000000000000060648201526084016104d2565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290611023908490611a3a565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161108991815260200190565b60405180910390a35b50505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526110929085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261155a565b73ffffffffffffffffffffffffffffffffffffffff82166111f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104d2565b80600260008282546112039190611a3a565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152602081905260408120805483929061123d908490611a3a565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b606060048054610bac90611ae3565b73ffffffffffffffffffffffffffffffffffffffff82166113bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f730000000000000000000000000000000000000000000000000000000000000060648201526084016104d2565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611473576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f636500000000000000000000000000000000000000000000000000000000000060648201526084016104d2565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906114af908490611b37565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610dd6565b505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526114ff9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016110f2565b60006115bc826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166116669092919063ffffffff16565b8051909150156114ff57808060200190518101906115da9190611b4e565b6114ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016104d2565b6060611675848460008561167d565b949350505050565b60608247101561170f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016104d2565b843b611777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016104d2565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516117a09190611b70565b60006040518083038185875af1925050503d80600081146117dd576040519150601f19603f3d011682016040523d82523d6000602084013e6117e2565b606091505b50915091506117f28282866117fd565b979650505050505050565b6060831561180c5750816105c1565b82511561181c5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d291906118d1565b803573ffffffffffffffffffffffffffffffffffffffff8116811461187457600080fd5b919050565b6000806040838503121561188c57600080fd5b8235915061189c60208401611850565b90509250929050565b60005b838110156118c05781810151838201526020016118a8565b838111156110925750506000910152565b60208152600082518060208401526118f08160408501602087016118a5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806040838503121561193557600080fd5b61193e83611850565b946020939093013593505050565b60006020828403121561195e57600080fd5b5035919050565b60008060006060848603121561197a57600080fd5b61198384611850565b925061199160208501611850565b9150604084013590509250925092565b6000602082840312156119b357600080fd5b61042f82611850565b600080604083850312156119cf57600080fd5b6119d883611850565b915061189c60208401611850565b6000806000606084860312156119fb57600080fd5b8335925061199160208501611850565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611a4d57611a4d611a0b565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611a8a57611a8a611a0b565b500290565b600082611ac5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600060208284031215611adc57600080fd5b5051919050565b600181811c90821680611af757607f821691505b60208210811415611b31577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600082821015611b4957611b49611a0b565b500390565b600060208284031215611b6057600080fd5b815180151581146105c157600080fd5b60008251611b828184602087016118a5565b919091019291505056fea2646970667358221220dd6ab68a357bcb22f83ca9169f71d50eab420f577d6615614a08c2ea63f4ce2f64736f6c634300080a00336101206040523480156200001257600080fd5b506040516200171738038062001717833981016040819052620000359162000453565b8260c86001600160a01b0384166200005d5760405180602001604052806000815250620000e8565b836001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200009c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620000c69190810190620004e6565b604051602001620000d891906200059e565b6040516020818303038152906040525b6000805460ff19169055826001600160a01b0381166200011b57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200015a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001809190620005ce565b6001600160a01b0316608052508051620001a290600290602084019062000390565b505060a052506001600160a01b0382161580620001c657506001600160a01b038116155b15620001e557604051635919af9760e11b815260040160405180910390fd5b6001600160a01b0380831660e081905290821660c0526040805163313ce56760e01b8152905163313ce567916004808201926020929091908290030181865afa15801562000237573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025d9190620005f3565b6200026a90600a6200072b565b61010081815250506000826001600160a01b03166399530b066040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002b3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d991906200073c565b9050620002e681620002f0565b50505050620007f3565b806200030f576040516309aadd6f60e41b815260040160405180910390fd5b60018190557f82e7ee47180a631312683eeb2a85ad264c9af490d54de5a75bbdb95b968c6de28162000341816200035c565b6040805192835260208301919091520160405180910390a150565b60a0516000906127109062000372908262000756565b6200037e908462000771565b6200038a919062000793565b92915050565b8280546200039e90620007b6565b90600052602060002090601f016020900481019282620003c257600085556200040d565b82601f10620003dd57805160ff19168380011785556200040d565b828001600101855582156200040d579182015b828111156200040d578251825591602001919060010190620003f0565b506200041b9291506200041f565b5090565b5b808211156200041b576000815560010162000420565b80516001600160a01b03811681146200044e57600080fd5b919050565b6000806000606084860312156200046957600080fd5b620004748462000436565b9250620004846020850162000436565b9150620004946040850162000436565b90509250925092565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620004d0578181015183820152602001620004b6565b83811115620004e0576000848401525b50505050565b600060208284031215620004f957600080fd5b81516001600160401b03808211156200051157600080fd5b818401915084601f8301126200052657600080fd5b8151818111156200053b576200053b6200049d565b604051601f8201601f19908116603f011681019083821181831017156200056657620005666200049d565b816040528281528760208487010111156200058057600080fd5b62000593836020830160208801620004b3565b979650505050505050565b60008251620005b2818460208701620004b3565b69081c1c9a58d95199595960b21b920191825250600a01919050565b600060208284031215620005e157600080fd5b620005ec8262000436565b9392505050565b6000602082840312156200060657600080fd5b815160ff81168114620005ec57600080fd5b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200066f57816000190482111562000653576200065362000618565b808516156200066157918102915b93841c939080029062000633565b509250929050565b60008262000688575060016200038a565b8162000697575060006200038a565b8160018114620006b05760028114620006bb57620006db565b60019150506200038a565b60ff841115620006cf57620006cf62000618565b50506001821b6200038a565b5060208310610133831016604e8410600b841016171562000700575081810a6200038a565b6200070c83836200062e565b806000190482111562000723576200072362000618565b029392505050565b6000620005ec60ff84168362000677565b6000602082840312156200074f57600080fd5b5051919050565b600082198211156200076c576200076c62000618565b500190565b60008160001904831182151516156200078e576200078e62000618565b500290565b600082620007b157634e487b7160e01b600052601260045260246000fd5b500490565b600181811c90821680620007cb57607f821691505b60208210811415620007ed57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c05160e05161010051610eae62000869600039600081816102dc015261081c015260008181610194015261078001526000818161023301526106d70152600081816101400152610a090152600081816102b501528181610357015281816104d3015261060b0152610eae6000f3fe608060405234801561001057600080fd5b50600436106101365760003560e01c80638456cb59116100b2578063a834559e11610081578063bc489a6511610066578063bc489a6514610306578063d62ada1114610319578063feaf968c1461032157600080fd5b8063a834559e146102d7578063b09ad8a0146102fe57600080fd5b80638456cb59146102555780639a6fc8f51461025d578063a384d6ff146102a7578063a50cf2c8146102b057600080fd5b80633fd0875f116101095780635c975abb116100ee5780635c975abb146102025780637284e41614610219578063741bef1a1461022e57600080fd5b80633fd0875f146101e557806354fd4d50146101fa57600080fd5b806312b495a81461013b578063313ce5671461017557806333303f8e1461018f5780633f4ba83a146101db575b600080fd5b6101627f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b61017d600881565b60405160ff909116815260200161016c565b6101b67f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016c565b6101e3610329565b005b6101ed600181565b60405161016c9190610bc9565b610162600281565b60005460ff165b604051901515815260200161016c565b610221610417565b60405161016c9190610c0a565b6101b67f000000000000000000000000000000000000000000000000000000000000000081565b6101e36104a5565b61027061026b366004610c95565b610591565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a00161016c565b61016260015481565b6101b67f000000000000000000000000000000000000000000000000000000000000000081565b6101627f000000000000000000000000000000000000000000000000000000000000000081565b6101626105cb565b6101e3610314366004610cb9565b6105dd565b610209600181565b6102706106cd565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156103b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103d79190610cd2565b61040d576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610415610859565b565b6002805461042490610cf4565b80601f016020809104026020016040519081016040528092919081815260200182805461045090610cf4565b801561049d5780601f106104725761010080835404028352916020019161049d565b820191906000526020600020905b81548152906001019060200180831161048057829003601f168201915b505050505081565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561052f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105539190610cd2565b610589576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61041561093f565b60008060008060006040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006105d86001546109ff565b905090565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610667573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068b9190610cd2565b6106c1576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106ca81610a48565b50565b60008060008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610740573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107649190610d48565b93985091965094509250905061077c85858484610aca565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166399530b066040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080d9190610da0565b905061081881610b65565b90507f00000000000000000000000000000000000000000000000000000000000000006108458683610de8565b61084f9190610e25565b9450509091929394565b60005460ff166108ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff16156109ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016108c1565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586109153390565b6000612710610a2e7f000000000000000000000000000000000000000000000000000000000000000082610e60565b610a389084610de8565b610a429190610e25565b92915050565b80610a7f576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190557f82e7ee47180a631312683eeb2a85ad264c9af490d54de5a75bbdb95b968c6de281610aaf816109ff565b6040805192835260208301919091520160405180910390a150565b60008313610b04576040517f56e05d2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8369ffffffffffffffffffff168169ffffffffffffffffffff161080610b28575081155b15610b5f576040517fb1cf675500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60015460009080831015610ba5576040517fb416da7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610bb0826109ff565b905080841115610bc1579392505050565b509192915050565b6020810160068310610c04577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b600060208083528351808285015260005b81811015610c3757858101830151858201604001528201610c1b565b81811115610c49576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b69ffffffffffffffffffff811681146106ca57600080fd5b600060208284031215610ca757600080fd5b8135610cb281610c7d565b9392505050565b600060208284031215610ccb57600080fd5b5035919050565b600060208284031215610ce457600080fd5b81518015158114610cb257600080fd5b600181811c90821680610d0857607f821691505b60208210811415610d42577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600080600080600060a08688031215610d6057600080fd5b8551610d6b81610c7d565b809550506020860151935060408601519250606086015191506080860151610d9281610c7d565b809150509295509295909350565b600060208284031215610db257600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610e2057610e20610db9565b500290565b600082610e5b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60008219821115610e7357610e73610db9565b50019056fea264697066735822122033f071fae3fea6aa014d596b65f986292bf0f88262db5a9aebc2674ec8efeeea64736f6c634300080a0033a2646970667358221220b27734f006fee986ecfd33236cd2ab9df688e0c8f462a44caf23337f68200fed64736f6c634300080a0033"; - -type YearnFeedTestConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: YearnFeedTestConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class YearnFeedTest__factory extends ContractFactory { - constructor(...args: YearnFeedTestConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): YearnFeedTest { - return super.attach(address) as YearnFeedTest; - } - override connect(signer: Signer): YearnFeedTest__factory { - return super.connect(signer) as YearnFeedTest__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): YearnFeedTestInterface { - return new utils.Interface(_abi) as YearnFeedTestInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): YearnFeedTest { - return new Contract(address, _abi, signerOrProvider) as YearnFeedTest; - } -} diff --git a/src/types/factories/contracts/test/oracles/YearnPriceFeed.t.sol/index.ts b/src/types/factories/contracts/test/oracles/YearnPriceFeed.t.sol/index.ts deleted file mode 100644 index 2ae13bc5..00000000 --- a/src/types/factories/contracts/test/oracles/YearnPriceFeed.t.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { YearnFeedTest__factory } from "./YearnFeedTest__factory"; diff --git a/src/types/factories/contracts/test/oracles/ZeroPriceFeed.t.sol/ZeroFeedTest__factory.ts b/src/types/factories/contracts/test/oracles/ZeroPriceFeed.t.sol/ZeroFeedTest__factory.ts deleted file mode 100644 index 78c80985..00000000 --- a/src/types/factories/contracts/test/oracles/ZeroPriceFeed.t.sol/ZeroFeedTest__factory.ts +++ /dev/null @@ -1,422 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - ZeroFeedTest, - ZeroFeedTestInterface, -} from "../../../../../contracts/test/oracles/ZeroPriceFeed.t.sol/ZeroFeedTest"; - -const _abi = [ - { - inputs: [], - name: "ChainPriceStaleException", - type: "error", - }, - { - inputs: [], - name: "IncorrectLimitsException", - type: "error", - }, - { - inputs: [], - name: "PriceOracleNotExistsException", - type: "error", - }, - { - inputs: [], - name: "ValueOutOfRangeExpcetion", - type: "error", - }, - { - inputs: [], - name: "ZeroPriceException", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "", - type: "address", - }, - ], - name: "log_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "log_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - name: "log_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "int256", - name: "", - type: "int256", - }, - ], - name: "log_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "address", - name: "val", - type: "address", - }, - ], - name: "log_named_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes", - name: "val", - type: "bytes", - }, - ], - name: "log_named_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes32", - name: "val", - type: "bytes32", - }, - ], - name: "log_named_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - ], - name: "log_named_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "string", - name: "val", - type: "string", - }, - ], - name: "log_named_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - ], - name: "log_named_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "log_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "logs", - type: "event", - }, - { - inputs: [], - name: "IS_TEST", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "failed", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "pf", - outputs: [ - { - internalType: "contract ZeroPriceFeed", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "setUp", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_ZPF_01_constructor_sets_correct_values", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_ZPF_02_getRoundData_reverts", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_ZPF_03_latestRoundData_works_correctly", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, -]; - -const _bytecode = - "0x60806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d000117905534801561003957600080fd5b5061177a806100496000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063ba414fa61161005b578063ba414fa61461009c578063c5669af4146100b9578063ccadf7d1146100c1578063fa7626d41461010657600080fd5b80630470160b146100825780630a9254e41461008c578063ab0fb72914610094575b600080fd5b61008a610113565b005b61008a610255565b61008a61036d565b6100a461056b565b60405190151581526020015b60405180910390f35b61008a6106cb565b6001546100e19073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b0565b6000546100a49060ff1681565b6000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f24e46f700000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c31eb0e090602401600060405180830381600087803b1580156101a357600080fd5b505af11580156101b7573d6000803e3d6000fd5b5050600180546040517f9a6fc8f5000000000000000000000000000000000000000000000000000000008152600481019290925273ffffffffffffffffffffffffffffffffffffffff169250639a6fc8f5915060240160a060405180830381865afa15801561022a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061024e9190611077565b5050505050565b60405161026190611050565b604051809103906000f08015801561027d573d6000803e3d6000fd5b50600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316908117909155600054604080517fc657c71800000000000000000000000000000000000000000000000000000000815260048101939093526024830152600f60448301527f5a45524f5f50524943455f46454544000000000000000000000000000000000060648301526201000090049091169063c657c71890608401600060405180830381600087803b15801561035357600080fd5b505af1158015610367573d6000803e3d6000fd5b50505050565b6000806000806000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156103e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104069190611077565b9450945094509450945061045d8569ffffffffffffffffffff1660016040518060400160405280601581526020017f496e636f727265637420726f756e6420496420233100000000000000000000008152506109a1565b61049e8460006040518060400160405280601381526020017f496e636f727265637420616e73776572202331000000000000000000000000008152506109ee565b6104de83426040518060400160405280601681526020017f496e636f727265637420737461727465644174202331000000000000000000008152506109a1565b61051e82426040518060400160405280601681526020017f496e636f727265637420757064617465644174202331000000000000000000008152506109a1565b61024e8169ffffffffffffffffffff1660016040518060400160405280601c81526020017f496e636f727265637420616e737765726564496e526f756e64202331000000008152506109a1565b60008054610100900460ff161561058b5750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106c65760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610630917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016110f3565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526106689161113b565b6000604051808303816000865af19150503d80600081146106a5576040519150601f19603f3d011682016040523d82523d6000602084013e6106aa565b606091505b50915050808060200190518101906106c29190611157565b9150505b919050565b600154604080517f7284e41600000000000000000000000000000000000000000000000000000000815290516107f39273ffffffffffffffffffffffffffffffffffffffff1691637284e4169160048083019260009291908290030181865afa15801561073c573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261078291908101906111af565b6040518060400160405280600e81526020017f5a65726f207072696365666565640000000000000000000000000000000000008152506040518060400160405280601581526020017f496e636f7272656374206465736372697074696f6e0000000000000000000000815250610a36565b600154604080517f313ce56700000000000000000000000000000000000000000000000000000000815290516108c89273ffffffffffffffffffffffffffffffffffffffff169163313ce5679160048083019260209291908290030181865afa158015610864573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610888919061127a565b60ff1660086040518060400160405280601281526020017f496e636f727265637420646563696d616c7300000000000000000000000000008152506109a1565b600154604080517fd62ada11000000000000000000000000000000000000000000000000000000008152905161099f9273ffffffffffffffffffffffffffffffffffffffff169163d62ada119160048083019260209291908290030181865afa158015610939573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095d9190611157565b151560011515146040518060400160405280601f81526020017f496e636f72726563742064656570656e63647320666f72206164647265737300815250610aca565b565b8183146109e9577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf3583816040516109d791906112e7565b60405180910390a16109e98383610b13565b505050565b8183146109e9577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf358381604051610a2491906112e7565b60405180910390a16109e98383610c1d565b81604051602001610a47919061113b565b6040516020818303038152906040528051906020012083604051602001610a6e919061113b565b60405160208183030381529060405280519060200120146109e9577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf358381604051610ab891906112e7565b60405180910390a16109e98383610d17565b81610b0f577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf358381604051610afe91906112e7565b60405180910390a1610b0f82610e5d565b5050565b808214610b0f577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f50604051610b9f9060208082526022908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b75696e60408201527f745d000000000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a881604051610bd6919061132e565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a882604051610c0d9190611379565b60405180910390a1610b0f610ed4565b808214610b0f577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f50604051610ca99060208082526021908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b696e7460408201527f5d00000000000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17f2fe632779174374378442a8e978bccfbdcc1d6b2b0d81f7e8eb776ab2286f16881604051610ce0919061132e565b60405180910390a17f2fe632779174374378442a8e978bccfbdcc1d6b2b0d81f7e8eb776ab2286f16882604051610c0d9190611379565b80604051602001610d28919061113b565b6040516020818303038152906040528051906020012082604051602001610d4f919061113b565b6040516020818303038152906040528051906020012014610b0f577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f50604051610def9060208082526024908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b73747260408201527f696e675d00000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf358381604051610e2691906113b6565b60405180910390a17f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf358382604051610c0d919061140d565b80610ed1577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f50604051610ec19060208082526017908201527f4572726f723a20417373657274696f6e204661696c6564000000000000000000604082015260600190565b60405180910390a1610ed1610ed4565b50565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156110225760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000009282019290925260016060820152600091907f70ca10bbd0dbfd9020a9f4b13402c16cb120705e0d1c0aeab10fa353ae586fc490608001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052610fa392916020016110f3565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052610fdb9161113b565b6000604051808303816000865af19150503d8060008114611018576040519150601f19603f3d011682016040523d82523d6000602084013e61101d565b606091505b505050505b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055565b6102fa8061144b83390190565b805169ffffffffffffffffffff811681146106c657600080fd5b600080600080600060a0868803121561108f57600080fd5b6110988661105d565b94506020860151935060408601519250606086015191506110bb6080870161105d565b90509295509295909350565b60005b838110156110e25781810151838201526020016110ca565b838111156103675750506000910152565b7fffffffff00000000000000000000000000000000000000000000000000000000831681526000825161112d8160048501602087016110c7565b919091016004019392505050565b6000825161114d8184602087016110c7565b9190910192915050565b60006020828403121561116957600080fd5b8151801515811461117957600080fd5b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000602082840312156111c157600080fd5b815167ffffffffffffffff808211156111d957600080fd5b818401915084601f8301126111ed57600080fd5b8151818111156111ff576111ff611180565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561124557611245611180565b8160405282815287602084870101111561125e57600080fd5b61126f8360208301602088016110c7565b979650505050505050565b60006020828403121561128c57600080fd5b815160ff8116811461117957600080fd5b600081518084526112b58160208601602086016110c7565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60408152600560408201527f4572726f720000000000000000000000000000000000000000000000000000006060820152608060208201526000611179608083018461129d565b60408152600061136b60408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b905082602083015292915050565b60408152600061136b60408301600a81527f2020202041637475616c00000000000000000000000000000000000000000000602082015260400190565b6040815260006113f360408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b8281036020840152611405818561129d565b949350505050565b6040815260006113f360408301600a81527f2020202041637475616c0000000000000000000000000000000000000000000060208201526040019056fe608060405234801561001057600080fd5b506102da806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80637284e4161161005b5780637284e416146100cc5780639a6fc8f514610115578063d62ada111461015f578063feaf968c1461017757600080fd5b8063313ce567146100825780633fd0875f146100a157806354fd4d50146100b6575b600080fd5b61008a600881565b60405160ff90911681526020015b60405180910390f35b6100a9600581565b60405161009891906101bd565b6100be600181565b604051908152602001610098565b6101086040518060400160405280600e81526020017f5a65726f2070726963656665656400000000000000000000000000000000000081525081565b60405161009891906101fe565b610128610123366004610271565b610183565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610098565b610167600181565b6040519015158152602001610098565b60016000428083610128565b60008060008060006040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208101600683106101f8577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b600060208083528351808285015260005b8181101561022b5785810183015185820160400152820161020f565b8181111561023d576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60006020828403121561028357600080fd5b813569ffffffffffffffffffff8116811461029d57600080fd5b939250505056fea264697066735822122022d38108114e4b0f90bffdca6f01ae82a1ba53476258c2385aeda40a5af3500b64736f6c634300080a0033a2646970667358221220a70fe6858bf70ff9e254e05bda91d7981821813cc32d878ae9970fa77fecf8bc64736f6c634300080a0033"; - -type ZeroFeedTestConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: ZeroFeedTestConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class ZeroFeedTest__factory extends ContractFactory { - constructor(...args: ZeroFeedTestConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): ZeroFeedTest { - return super.attach(address) as ZeroFeedTest; - } - override connect(signer: Signer): ZeroFeedTest__factory { - return super.connect(signer) as ZeroFeedTest__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): ZeroFeedTestInterface { - return new utils.Interface(_abi) as ZeroFeedTestInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): ZeroFeedTest { - return new Contract(address, _abi, signerOrProvider) as ZeroFeedTest; - } -} diff --git a/src/types/factories/contracts/test/oracles/ZeroPriceFeed.t.sol/index.ts b/src/types/factories/contracts/test/oracles/ZeroPriceFeed.t.sol/index.ts deleted file mode 100644 index 4ade6152..00000000 --- a/src/types/factories/contracts/test/oracles/ZeroPriceFeed.t.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { ZeroFeedTest__factory } from "./ZeroFeedTest__factory"; diff --git a/src/types/factories/contracts/test/oracles/index.ts b/src/types/factories/contracts/test/oracles/index.ts deleted file mode 100644 index d6c1d403..00000000 --- a/src/types/factories/contracts/test/oracles/index.ts +++ /dev/null @@ -1,8 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export * as curveLpPriceFeedTSol from "./CurveLPPriceFeed.t.sol"; -export * as lpPriceFeedTSol from "./LPPriceFeed.t.sol"; -export * as priceOracleTSol from "./PriceOracle.t.sol"; -export * as yearnPriceFeedTSol from "./YearnPriceFeed.t.sol"; -export * as zeroPriceFeedTSol from "./ZeroPriceFeed.t.sol"; diff --git a/src/types/factories/contracts/test/pathfinder/CurveLPPathFinder.t.sol/CurveLPPathFinderTest__factory.ts b/src/types/factories/contracts/test/pathfinder/CurveLPPathFinder.t.sol/CurveLPPathFinderTest__factory.ts deleted file mode 100644 index c08aad77..00000000 --- a/src/types/factories/contracts/test/pathfinder/CurveLPPathFinder.t.sol/CurveLPPathFinderTest__factory.ts +++ /dev/null @@ -1,673 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - CurveLPPathFinderTest, - CurveLPPathFinderTestInterface, -} from "../../../../../contracts/test/pathfinder/CurveLPPathFinder.t.sol/CurveLPPathFinderTest"; - -const _abi = [ - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "", - type: "address", - }, - ], - name: "log_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "log_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - name: "log_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "int256", - name: "", - type: "int256", - }, - ], - name: "log_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "address", - name: "val", - type: "address", - }, - ], - name: "log_named_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes", - name: "val", - type: "bytes", - }, - ], - name: "log_named_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes32", - name: "val", - type: "bytes32", - }, - ], - name: "log_named_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - ], - name: "log_named_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "string", - name: "val", - type: "string", - }, - ], - name: "log_named_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - ], - name: "log_named_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "log_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "logs", - type: "event", - }, - { - inputs: [], - name: "IS_TEST", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bool", - name: "withUnderlyings", - type: "bool", - }, - ], - name: "_setUpCurve", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "cft", - outputs: [ - { - internalType: "contract CreditFacadeTestSuite", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditConfigurator", - outputs: [ - { - internalType: "contract CreditConfigurator", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditFacade", - outputs: [ - { - internalType: "contract CreditFacade", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditManager", - outputs: [ - { - internalType: "contract ICreditManagerV2", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "curveAdapter", - outputs: [ - { - internalType: "contract ICurveV1Adapter", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "curveLPPathFinder", - outputs: [ - { - internalType: "contract CurveLPPathFinder", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "curveMetaAdapter", - outputs: [ - { - internalType: "contract ICurveV1Adapter", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "curvePathFinder", - outputs: [ - { - internalType: "contract CurvePathFinder", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "curveV1MetaMock", - outputs: [ - { - internalType: "contract CurveV1MetapoolMock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "curveV1Mock", - outputs: [ - { - internalType: "contract CurveV1Mock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "failed", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "setUp", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CLPPF_01_filterCurveLPAdapters_finds_yearn_adapters_only", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CLPPF_02_withdrawAll_works_correctly", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "tokenMasksMap", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "underlying", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "uniV2adapter", - outputs: [ - { - internalType: "contract IUniswapV2Adapter", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "uniV2mock", - outputs: [ - { - internalType: "contract UniswapV2Mock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "uniV2pathFinder", - outputs: [ - { - internalType: "contract UniswapV2PathFinder", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "uniV3adapter", - outputs: [ - { - internalType: "contract IUniswapV3Adapter", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "uniV3mock", - outputs: [ - { - internalType: "contract UniswapV3Mock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "uniV3pathFinder", - outputs: [ - { - internalType: "contract UniswapV3PathFinder", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "yearnAdapter", - outputs: [ - { - internalType: "contract YearnV2Adapter", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "yearnMock", - outputs: [ - { - internalType: "contract YearnV2Mock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "yearnPathFinder", - outputs: [ - { - internalType: "contract YearnPathFinder", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x60806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d000117905534801561003957600080fd5b50620323e2806200004b6000396000f3fe60806040523480156200001157600080fd5b5060043610620001dd5760003560e01c80639b6a80a7116200010d578063df51443311620000a3578063f67c5bd0116200007a578063f67c5bd014620004b0578063f9aa028a14620004d6578063fa7626d414620004f7578063fca2cea5146200050557600080fd5b8063df514433146200044d578063eeef8dd0146200046e578063f310c6da146200048f57600080fd5b8063c12c21c011620000e4578063c12c21c014620003c9578063cac283c814620003ea578063ceab1386146200040b578063d8d7ca3c146200042c57600080fd5b80639b6a80a7146200036c5780639f8ad9ec146200038d578063ba414fa614620003ae57600080fd5b80632f7a188111620001835780635ebb2361116200015a5780635ebb236114620003165780636315fae11462000337578063639fd40c14620003415780636f307dc3146200034b57600080fd5b80632f7a188114620002b35780634b7b24a514620002d45780635a521cf814620002f557600080fd5b8063287b94d711620001b8578063287b94d7146200025a57806329d351d8146200027b5780632b9d0d28146200029c57600080fd5b80630a9254e414620001e25780631497761e14620001ee5780631c9a755f1462000239575b600080fd5b620001ec62000526565b005b6007546200020f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6012546200020f9073ffffffffffffffffffffffffffffffffffffffff1681565b600b546200020f9073ffffffffffffffffffffffffffffffffffffffff1681565b6008546200020f9073ffffffffffffffffffffffffffffffffffffffff1681565b620001ec620002ad3660046200558c565b62000552565b6002546200020f9073ffffffffffffffffffffffffffffffffffffffff1681565b600a546200020f9073ffffffffffffffffffffffffffffffffffffffff1681565b600e546200020f9073ffffffffffffffffffffffffffffffffffffffff1681565b600c546200020f9073ffffffffffffffffffffffffffffffffffffffff1681565b620001ec62001721565b620001ec62001a10565b6005546200020f9073ffffffffffffffffffffffffffffffffffffffff1681565b6013546200020f9073ffffffffffffffffffffffffffffffffffffffff1681565b600d546200020f9073ffffffffffffffffffffffffffffffffffffffff1681565b620003b862002b13565b604051901515815260200162000230565b6001546200020f9073ffffffffffffffffffffffffffffffffffffffff1681565b6014546200020f9073ffffffffffffffffffffffffffffffffffffffff1681565b6011546200020f9073ffffffffffffffffffffffffffffffffffffffff1681565b6009546200020f9073ffffffffffffffffffffffffffffffffffffffff1681565b6004546200020f9073ffffffffffffffffffffffffffffffffffffffff1681565b600f546200020f9073ffffffffffffffffffffffffffffffffffffffff1681565b6015546200020f9073ffffffffffffffffffffffffffffffffffffffff1681565b620004c7620004c1366004620055d6565b50600190565b60405190815260200162000230565b6003546200020f9073ffffffffffffffffffffffffffffffffffffffff1681565b600054620003b89060ff1681565b6010546200020f9073ffffffffffffffffffffffffffffffffffffffff1681565b6200053062002c7d565b6200053a62003ba5565b6200054462003f63565b62000550600062000552565b565b6200055c6200437e565b60085473ffffffffffffffffffffffffffffffffffffffff166200171e576006546040517f67b426450000000000000000000000000000000000000000000000000000000081526000916200075f9173ffffffffffffffffffffffffffffffffffffffff909116906367b4264590620005db90600790600401620055f6565b602060405180830381865afa158015620005f9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200061f919062005638565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906367b42645906200067890600890600401620055f6565b602060405180830381865afa15801562000696573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006bc919062005638565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906367b42645906200071590600990600401620055f6565b602060405180830381865afa15801562000733573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000759919062005638565b620044a8565b6006546040517f67b42645000000000000000000000000000000000000000000000000000000008152919250600091620008fb9173ffffffffffffffffffffffffffffffffffffffff16906367b4264590620007c190600190600401620055f6565b602060405180830381865afa158015620007df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000805919062005638565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906367b42645906200085e90600290600401620055f6565b602060405180830381865afa1580156200087c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008a2919062005638565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906367b42645906200071590600590600401620055f6565b60035490915073ffffffffffffffffffffffffffffffffffffffff1615158062000923575082155b156200092e57905060605b81816040516200093e90620054ab565b6200094b929190620056ab565b604051809103906000f08015801562000968573d6000803e3d6000fd5b50600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169182179055604080517ffc0c546a00000000000000000000000000000000000000000000000000000000815290516000929163fc0c546a9160048083019260209291908290030181865afa15801562000a05573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a2b919062005638565b6000546040517fc657c71800000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff62010000909104169063c657c7189062000adb90849060040173ffffffffffffffffffffffffffffffffffffffff9190911681526040602082018190526004908201527f3343525600000000000000000000000000000000000000000000000000000000606082015260800190565b600060405180830381600087803b15801562000af657600080fd5b505af115801562000b0b573d6000803e3d6000fd5b505060035473ffffffffffffffffffffffffffffffffffffffff161591506200131f9050576000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000ba0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000bc6919062005638565b60085460048054604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9485169490921692632630c12f9282820192602092908290030181865afa15801562000c3b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c61919062005638565b73ffffffffffffffffffffffffffffffffffffffff16639dcb511a8760008151811062000c925762000c92620056dd565b60200260200101516040518263ffffffff1660e01b815260040162000cd3919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa15801562000cf1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000d17919062005638565b60048054604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff90921692632630c12f9282820192602092908290030181865afa15801562000d85573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000dab919062005638565b73ffffffffffffffffffffffffffffffffffffffff16639dcb511a8860018151811062000ddc5762000ddc620056dd565b60200260200101516040518263ffffffff1660e01b815260040162000e1d919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa15801562000e3b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e61919062005638565b60048054604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff90921692632630c12f9282820192602092908290030181865afa15801562000ecf573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ef5919062005638565b73ffffffffffffffffffffffffffffffffffffffff16639dcb511a8960028151811062000f265762000f26620056dd565b60200260200101516040518263ffffffff1660e01b815260040162000f67919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa15801562000f85573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000fab919062005638565b60405162000fb990620054b9565b73ffffffffffffffffffffffffffffffffffffffff95861681529385166020850152918416604084015283166060830152909116608082015260c060a082018190526011908201527f43757276654c503350726963654665656400000000000000000000000000000060e082015261010001604051809103906000f08015801562001048573d6000803e3d6000fd5b506000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291925062010000900473ffffffffffffffffffffffffffffffffffffffff16906306447d5690602401600060405180830381600087803b158015620010d057600080fd5b505af1158015620010e5573d6000803e3d6000fd5b505060048054604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9092169450632630c12f935080830192602092918290030181865afa15801562001157573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200117d919062005638565b6040517fe8a97a3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301528381166024830152919091169063e8a97a3e90604401600060405180830381600087803b158015620011f157600080fd5b505af115801562001206573d6000803e3d6000fd5b50506003546040517f3e7c88d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152611e7860248301529091169250633e7c88d69150604401600060405180830381600087803b1580156200128057600080fd5b505af115801562001295573d6000803e3d6000fd5b50505050600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200130457600080fd5b505af115801562001319573d6000803e3d6000fd5b50505050505b60015460085460405173ffffffffffffffffffffffffffffffffffffffff928316929091169083906000906200135590620054c7565b73ffffffffffffffffffffffffffffffffffffffff9485168152928416602084015290831660408301529091166060820152608001604051809103906000f080158015620013a7573d6000803e3d6000fd5b50600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055604051620013fb90620054d5565b604051809103906000f08015801562001418573d6000803e3d6000fd5b50600b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283169081179091556008546040517fd914cd4b000000000000000000000000000000000000000000000000000000008152921660048301529063d914cd4b90602401600060405180830381600087803b158015620014b257600080fd5b505af1158015620014c7573d6000803e3d6000fd5b5050600054600754604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152600d60448201527f43555256455f414441505445520000000000000000000000000000000000000060648201526201000090920416925063c657c7189150608401600060405180830381600087803b1580156200157757600080fd5b505af11580156200158c573d6000803e3d6000fd5b5050600054600854604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152600a60448201527f43555256455f4d4f434b0000000000000000000000000000000000000000000060648201526201000090920416925063c657c7189150608401600060405180830381600087803b1580156200163c57600080fd5b505af115801562001651573d6000803e3d6000fd5b5050600054600b54604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152601060448201527f43555256455f5041544846494e4445520000000000000000000000000000000060648201526201000090920416925063c657c7189150608401600060405180830381600087803b1580156200170157600080fd5b505af115801562001716573d6000803e3d6000fd5b505050505050505b50565b600c5460009073ffffffffffffffffffffffffffffffffffffffff1663cc06dd336200174c620045c4565b60006040518363ffffffff1660e01b81526004016200176d9291906200570c565b600060405180830381865afa1580156200178b573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620017d3919081019062005806565b905062001819815160016040518060400160405280601981526020017f496e636f7272656374206164617074657273206c656e677468000000000000008152506200460c565b6200189a81600081518110620018335762001833620056dd565b6020026020010151600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518060400160405280601f81526020017f496e636f7272656374206e6f726d616c2063757276652061646170747265720081525062004659565b600c5473ffffffffffffffffffffffffffffffffffffffff1663cc06dd33620018c2620045c4565b60016040518363ffffffff1660e01b8152600401620018e39291906200570c565b600060405180830381865afa15801562001901573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262001949919081019062005806565b90506200198f815160016040518060400160405280601981526020017f496e636f7272656374206164617074657273206c656e677468000000000000008152506200460c565b6200171e81600081518110620019a957620019a9620056dd565b6020026020010151600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518060400160405280601d81526020017f496e636f7272656374206d65746120637572766520616461707472657200000081525062004659565b60408051600280825260608201909252600091816020015b60408051606081018252600080825260208083018290529282015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018162001a285750506040805160608101808352600a547f82c6306600000000000000000000000000000000000000000000000000000000909152915192935091829173ffffffffffffffffffffffffffffffffffffffff16906382c63066906064808501916020918187030181865afa15801562001aed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001b13919062005638565b73ffffffffffffffffffffffffffffffffffffffff168152602001600060ff168152602001600260ff168152508160008151811062001b565762001b56620056dd565b60200260200101819052506040518060600160405280600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166382c630666040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001bda573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c00919062005638565b73ffffffffffffffffffffffffffffffffffffffff16815260006020820152600360409091015281518290600190811062001c3f5762001c3f620056dd565b602090810291909101015260095460019060009073ffffffffffffffffffffffffffffffffffffffff16637b475b688262001c886b033b2e3c9fd0803ce80000006002620058e0565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168152600f9290920b60048301526024820152604401600060405180830381600087803b15801562001ce257600080fd5b505af115801562001cf7573d6000803e3d6000fd5b505060095473ffffffffffffffffffffffffffffffffffffffff169150637b475b689050600162001d366b033b2e3c9fd0803ce80000006003620058e0565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168152600f9290920b60048301526024820152604401600060405180830381600087803b15801562001d9057600080fd5b505af115801562001da5573d6000803e3d6000fd5b505060085473ffffffffffffffffffffffffffffffffffffffff169150637b475b689050600062001de46b033b2e3c9fd0803ce80000006003620058e0565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168152600f9290920b60048301526024820152604401600060405180830381600087803b15801562001e3e57600080fd5b505af115801562001e53573d6000803e3d6000fd5b505060085473ffffffffffffffffffffffffffffffffffffffff169150637b475b689050600162001e926b033b2e3c9fd0803ce80000006004620058e0565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168152600f9290920b60048301526024820152604401600060405180830381600087803b15801562001eec57600080fd5b505af115801562001f01573d6000803e3d6000fd5b505060085473ffffffffffffffffffffffffffffffffffffffff169150637b475b689050600262001f406b033b2e3c9fd0803ce80000006005620058e0565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168152600f9290920b60048301526024820152604401600060405180830381600087803b15801562001f9a57600080fd5b505af115801562001faf573d6000803e3d6000fd5b505050505b811562002b0e5760408051600680825260e08201909252600091816020015b604080518082019091526000808252602082015281526020019060019003908162001fd35790505090506200200c60016103e8620046d2565b81600081518110620020225762002022620056dd565b60200260200101819052506200203c6002610b4a620046d2565b81600181518110620020525762002052620056dd565b60200260200101819052506200206b60056014620046d2565b81600281518110620020815762002081620056dd565b60200260200101819052506200209a6004600a620046d2565b81600381518110620020b057620020b0620056dd565b60200260200101819052506040518060400160405280600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166382c630666040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002134573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200215a919062005638565b73ffffffffffffffffffffffffffffffffffffffff1681526020016107d081525081600481518110620021915762002191620056dd565b60200260200101819052506040518060400160405280600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166382c630666040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002215573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200223b919062005638565b73ffffffffffffffffffffffffffffffffffffffff1681526020016101f481525081600581518110620022725762002272620056dd565b6020908102919091010152600c54600754600a54600092839273ffffffffffffffffffffffffffffffffffffffff9182169263901d1145928792620022bc929082169116620047ae565b896040518463ffffffff1660e01b8152600401620022dd9392919062005920565b600060405180830381865afa158015620022fb573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262002343919081019062005ba1565b91509150620023ac82600081518110620023615762002361620056dd565b6020026020010151602001516103e86040518060400160405280601581526020017f496e636f7272656374204441492042616c616e636500000000000000000000008152506200460c565b6200241182600181518110620023c657620023c6620056dd565b602002602001015160200151610b4a6040518060400160405280601681526020017f496e636f727265637420555344432042616c616e6365000000000000000000008152506200460c565b62002475826002815181106200242b576200242b620056dd565b60200260200101516020015160146040518060400160405280601681526020017f496e636f727265637420555344542042616c616e6365000000000000000000008152506200460c565b620024fd826003815181106200248f576200248f620056dd565b60200260200101516020015160038610620024ac576000620024b0565b6103e85b620024bd90600a62005c9b565b61ffff166040518060400160405280601681526020017f496e636f7272656374204c494e4b2042616c616e6365000000000000000000008152506200460c565b600060038510156200251157600062002515565b6105dc5b62002523906107d062005c9b565b61ffff1690506200258c83600481518110620025435762002543620056dd565b602002602001015160200151826040518060400160405280601681526020017f496e636f727265637420334352562042616c616e6365000000000000000000008152506200460c565b620025f083600581518110620025a657620025a6620056dd565b60200260200101516020015160016040518060400160405280601a81526020017f496e636f7272656374204c494e4b334352562042616c616e63650000000000008152506200460c565b604080518082018252600a5473ffffffffffffffffffffffffffffffffffffffff16815290516003871015602482015260006044820152620026ea918491620026e4919060208201907f33d2ebf200000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152905262004876565b620048df565b600c54600754600a5473ffffffffffffffffffffffffffffffffffffffff92831692639b17fa6f92879262002724929182169116620047ae565b8a6040518463ffffffff1660e01b8152600401620027459392919062005920565b600060405180830381865afa15801562002763573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620027ab919081019062005ba1565b80935081945050506200284d83600081518110620027cd57620027cd620056dd565b602002602001015160200151600387620027e8919062005cc4565b15620027f657600062002803565b62002803836003620058e0565b62002811906103e862005d00565b6040518060400160405280601581526020017f496e636f7272656374204441492042616c616e636500000000000000000000008152506200460c565b620028e983600181518110620028675762002867620056dd565b60200260200101516020015160038762002882919062005cc4565b600114620028925760006200289f565b6200289f836004620058e0565b620028ad90610b4a62005d00565b6040518060400160405280601681526020017f496e636f727265637420555344432042616c616e6365000000000000000000008152506200460c565b6200298483600281518110620029035762002903620056dd565b6020026020010151602001516003876200291e919062005cc4565b6002146200292e5760006200293b565b6200293b836005620058e0565b6200294890601462005d00565b6040518060400160405280601681526020017f496e636f727265637420555344542042616c616e6365000000000000000000008152506200460c565b620029e9836003815181106200299e576200299e620056dd565b6020026020010151602001516103f26040518060400160405280601681526020017f496e636f7272656374204c494e4b2042616c616e6365000000000000000000008152506200460c565b62002a4d8360048151811062002a035762002a03620056dd565b60200260200101516020015160016040518060400160405280601681526020017f496e636f727265637420334352562042616c616e6365000000000000000000008152506200460c565b62002a6783600581518110620025a657620025a6620056dd565b6040805180820190915260075473ffffffffffffffffffffffffffffffffffffffff16815262002ae5908390620026e490602081017f33d2ebf20000000000000000000000000000000000000000000000000000000062002aca60038c62005cc4565b6040516024810191909152600060448201526064016200265f565b62002af08762004b75565b90975095508462002b018162005d1b565b9550505050505062001fb4565b505050565b60008054610100900460ff161562002b345750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1562002c785760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000008284015282518083038401815260608301909352600092909162002bdc917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc49160800162005d57565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905262002c169162005da1565b6000604051808303816000865af19150503d806000811462002c55576040519150601f19603f3d011682016040523d82523d6000602084013e62002c5a565b606091505b509150508080602001905181019062002c74919062005dbf565b9150505b919050565b62002c89600062000552565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906367b426459062002ce1906004908101620055f6565b602060405180830381865afa15801562002cff573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002d25919062005638565b60085460405173ffffffffffffffffffffffffffffffffffffffff9091169062002d4f90620054e3565b73ffffffffffffffffffffffffffffffffffffffff928316815291166020820152604001604051809103906000f08015801562002d90573d6000803e3d6000fd5b50600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169182179055604080517ffc0c546a00000000000000000000000000000000000000000000000000000000815290516000929163fc0c546a9160048083019260209291908290030181865afa15801562002e2d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002e53919062005638565b600054604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80851660048301526024820192909252600860448201527f4c494e4b33435256000000000000000000000000000000000000000000000000606482015292935062010000909104169063c657c71890608401600060405180830381600087803b15801562002eff57600080fd5b505af115801562002f14573d6000803e3d6000fd5b505060035473ffffffffffffffffffffffffffffffffffffffff1615915062003a619050576000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002fa9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002fcf919062005638565b60095460048054604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9485169490921692632630c12f9282820192602092908290030181865afa15801562003044573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200306a919062005638565b6008546040517f23746eb80000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff92831692639dcb511a9216906323746eb890602401602060405180830381865afa158015620030e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003108919062005638565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa15801562003172573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003198919062005638565b60048054604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff90921692632630c12f9282820192602092908290030181865afa15801562003206573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200322c919062005638565b6008546040517f23746eb80000000000000000000000000000000000000000000000000000000081526001600482015273ffffffffffffffffffffffffffffffffffffffff92831692639dcb511a9216906323746eb890602401602060405180830381865afa158015620032a4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620032ca919062005638565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa15801562003334573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200335a919062005638565b60048054604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff90921692632630c12f9282820192602092908290030181865afa158015620033c8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620033ee919062005638565b6008546040517f23746eb80000000000000000000000000000000000000000000000000000000081526002600482015273ffffffffffffffffffffffffffffffffffffffff92831692639dcb511a9216906323746eb890602401602060405180830381865afa15801562003466573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200348c919062005638565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa158015620034f6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200351c919062005638565b60048054604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff90921692632630c12f9282820192602092908290030181865afa1580156200358a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620035b0919062005638565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831692639dcb511a9216906367b426459062003610906004908101620055f6565b602060405180830381865afa1580156200362e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003654919062005638565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa158015620036be573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620036e4919062005638565b604051620036f290620054f1565b73ffffffffffffffffffffffffffffffffffffffff96871681529486166020860152928516604085015290841660608401528316608083015290911660a082015260e060c082018190526011908201527f43757276654c503450726963654665656400000000000000000000000000000061010082015261012001604051809103906000f0801580156200378a573d6000803e3d6000fd5b506000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291925062010000900473ffffffffffffffffffffffffffffffffffffffff16906306447d5690602401600060405180830381600087803b1580156200381257600080fd5b505af115801562003827573d6000803e3d6000fd5b505060048054604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9092169450632630c12f935080830192602092918290030181865afa15801562003899573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620038bf919062005638565b6040517fe8a97a3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301528381166024830152919091169063e8a97a3e90604401600060405180830381600087803b1580156200393357600080fd5b505af115801562003948573d6000803e3d6000fd5b50506003546040517f3e7c88d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152611e7860248301529091169250633e7c88d69150604401600060405180830381600087803b158015620039c257600080fd5b505af1158015620039d7573d6000803e3d6000fd5b50505050600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562003a4657600080fd5b505af115801562003a5b573d6000803e3d6000fd5b50505050505b60015460095460085460405173ffffffffffffffffffffffffffffffffffffffff93841693928316928592169062003a9990620054ff565b73ffffffffffffffffffffffffffffffffffffffff9485168152928416602084015290831660408301529091166060820152608001604051809103906000f08015801562003aeb573d6000803e3d6000fd5b50600a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905560405162003b3f906200550d565b604051809103906000f08015801562003b5c573d6000803e3d6000fd5b50600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b62003baf6200437e565b60405162003bbd906200551b565b604051809103906000f08015801562003bda573d6000803e3d6000fd5b50600e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92831690811790915560015460405192169162003c339062005529565b73ffffffffffffffffffffffffffffffffffffffff928316815291166020820152604001604051809103906000f08015801562003c74573d6000803e3d6000fd5b50600d80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905560405162003cc89062005537565b604051809103906000f08015801562003ce5573d6000803e3d6000fd5b50600f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600054600d54604080517fc657c71800000000000000000000000000000000000000000000000000000000815291841660048301526024820152601260448201527f554e49535741505f56325f4144415054455200000000000000000000000000006064820152620100009091049091169063c657c71890608401600060405180830381600087803b15801562003dbd57600080fd5b505af115801562003dd2573d6000803e3d6000fd5b5050600054600e54604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152600f60448201527f554e49535741505f56325f4d4f434b000000000000000000000000000000000060648201526201000090920416925063c657c7189150608401600060405180830381600087803b15801562003e8257600080fd5b505af115801562003e97573d6000803e3d6000fd5b5050600054600f54604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152601560448201527f554e49535741505f56325f5041544846494e444552000000000000000000000060648201526201000090920416925063c657c71891506084015b600060405180830381600087803b15801562003f4857600080fd5b505af115801562003f5d573d6000803e3d6000fd5b50505050565b62003f6d6200437e565b60405162003f7b9062005545565b604051809103906000f08015801562003f98573d6000803e3d6000fd5b50601180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92831690811790915560015460405192169162003ff19062005553565b73ffffffffffffffffffffffffffffffffffffffff928316815291166020820152604001604051809103906000f08015801562004032573d6000803e3d6000fd5b50601080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055604051620040869062005561565b604051809103906000f080158015620040a3573d6000803e3d6000fd5b50601280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283169081179091556011546040517fc67903ea00000000000000000000000000000000000000000000000000000000815292166004830181905260248301529063c67903ea90604401600060405180830381600087803b1580156200414457600080fd5b505af115801562004159573d6000803e3d6000fd5b5050600054601054604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152601260448201527f554e49535741505f56335f41444150544552000000000000000000000000000060648201526201000090920416925063c657c7189150608401600060405180830381600087803b1580156200420957600080fd5b505af11580156200421e573d6000803e3d6000fd5b5050600054601154604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152600f60448201527f554e49535741505f56335f4d4f434b000000000000000000000000000000000060648201526201000090920416925063c657c7189150608401600060405180830381600087803b158015620042ce57600080fd5b505af1158015620042e3573d6000803e3d6000fd5b5050600054601254604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152601560448201527f554e49535741505f56335f5041544846494e444552000000000000000000000060648201526201000090920416925063c657c718915060840162003f2d565b60065473ffffffffffffffffffffffffffffffffffffffff166200055057604051620043aa906200556f565b604051809103906000f080158015620043c7573d6000803e3d6000fd5b50600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216918217905563b36ba20862004426670de0b6b3a76400006064620058e0565b6040518263ffffffff1660e01b81526004016000604051808303818588803b1580156200445257600080fd5b505af115801562004467573d6000803e3d6000fd5b505060028054307fffffffffffffffffffffffff00000000000000000000000000000000000000009182168117909255600180549091169091179055505050565b604080516003808252608082019092526060916020820183803683370190505090508381600081518110620044e157620044e1620056dd565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508281600181518110620045325762004532620056dd565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508181600281518110620045835762004583620056dd565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250509392505050565b600754600d54601054601354600a54606094620046079473ffffffffffffffffffffffffffffffffffffffff918216949082169390821692908216911662004cfd565b905090565b81831462002b0e577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf35838160405162004645919062005e2b565b60405180910390a162002b0e838362004ebe565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161462002b0e577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf358381604051620046be919062005e2b565b60405180910390a162002b0e838362004fd4565b604080518082018252600080825260208201528151808301928390526006547f67b42645000000000000000000000000000000000000000000000000000000009093529091819073ffffffffffffffffffffffffffffffffffffffff166367b42645620047438760448501620055f6565b602060405180830381865afa15801562004761573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004787919062005638565b73ffffffffffffffffffffffffffffffffffffffff16815260200183905290505b92915050565b60408051600280825260608083018452926020830190803683370190505090508281600081518110620047e557620047e5620056dd565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508181600181518110620048365762004836620056dd565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505092915050565b604080516001808252818301909252606091816020015b6040805180820190915260008152606060208201528152602001906001900390816200488d5790505090508181600081518110620048cf57620048cf620056dd565b6020026020010181905250919050565b62004923825182516040518060400160405280601681526020017f496e636f72726563742063616c6c73206c656e677468000000000000000000008152506200460c565b815160005b8181101562003f5d57828181518110620049465762004946620056dd565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff168482815181106200497d576200497d620056dd565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff16141580620049fb5750828181518110620049bd57620049bd620056dd565b60200260200101516020015180519060200120848281518110620049e557620049e5620056dd565b6020026020010151602001518051906020012014155b1562004a685760408051818152601b818301527f4572726f7220696e206d756c746963616c6c20617420696e646578000000000060608201526020810183905290517fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a89181900360800190a15b62004aea84828151811062004a815762004a81620056dd565b60200260200101516000015184838151811062004aa25762004aa2620056dd565b6020026020010151600001516040518060400160405280601881526020017f496e636f7272656374207461726765742061646472657373000000000000000081525062004659565b62004b6c84828151811062004b035762004b03620056dd565b60200260200101516020015184838151811062004b245762004b24620056dd565b6020026020010151602001516040518060400160405280601281526020017f496e636f72726563742063616c6c64617461000000000000000000000000000081525062005100565b60010162004928565b80518190600190600062004b8a838362005e74565b90505b821562004cf65783818151811062004ba95762004ba9620056dd565b6020026020010151602001805180919062004bc49062005e8e565b60ff169052508015801562004c2c5750600184828151811062004beb5762004beb620056dd565b60200260200101516040015162004c03919062005eb1565b60ff1684828151811062004c1b5762004c1b620056dd565b60200260200101516020015160ff16145b1562004c3e5750919360009350915050565b83818151811062004c535762004c53620056dd565b60200260200101516040015160ff1684828151811062004c775762004c77620056dd565b60200260200101516020015160ff16141562004cc257600084828151811062004ca45762004ca4620056dd565b60209081029190910181015160ff9092169101526001925062004cce565b50919360019350915050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0162004b8d565b5050915091565b60408051600580825260c082019092526060916020820160a080368337019050509050858160008151811062004d375762004d37620056dd565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050848160018151811062004d885762004d88620056dd565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050838160028151811062004dd95762004dd9620056dd565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050828160038151811062004e2a5762004e2a620056dd565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050818160048151811062004e7b5762004e7b620056dd565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505095945050505050565b80821462004fd0577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f5060405162004f4c9060208082526022908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b75696e60408201527f745d000000000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a88160405162004f85919062005ed7565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a88260405162004fbe919062005f23565b60405180910390a162004fd062005156565b5050565b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462004fd0577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f506040516200508e9060208082526025908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b61646460408201527f726573735d000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f81604051620050c7919062005f61565b60405180910390a17f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f8260405162004fbe919062005fc3565b6200510c8383620052d9565b62002b0e577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf35838160405162005142919062005e2b565b60405180910390a162002b0e8383620053a2565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620052ab5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000009282019290925260016060820152600091907f70ca10bbd0dbfd9020a9f4b13402c16cb120705e0d1c0aeab10fa353ae586fc490608001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905262005228929160200162005d57565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052620052629162005da1565b6000604051808303816000865af19150503d8060008114620052a1576040519150601f19603f3d011682016040523d82523d6000602084013e620052a6565b606091505b505050505b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055565b805182516001911415620053995760005b83518110156200539257828181518110620053095762005309620056dd565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168482815181106200534b576200534b620056dd565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016146200537d57600091505b80620053898162005d1b565b915050620052ea565b50620047a8565b50600092915050565b620053ae8282620052d9565b62004fd0577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f50604051620054399060208082526023908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b62797460408201527f65735d0000000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17fd26e16cad4548705e4c9e2d94f98ee91c289085ee425594fd5635fa2964ccf188160405162005472919062006001565b60405180910390a17fd26e16cad4548705e4c9e2d94f98ee91c289085ee425594fd5635fa2964ccf188260405162004fbe91906200605b565b613960806200609a83390190565b61185280620099fa83390190565b615f8c806200b24c83390190565b61189380620111d883390190565b6132948062012a6b83390190565b6119828062015cff83390190565b615f7e806201768183390190565b61145b806201d5ff83390190565b611a5c806201ea5a83390190565b61251b80620204b683390190565b611a7f80620229d183390190565b611c0e806202445083390190565b61221a806202605e83390190565b6126e4806202827883390190565b617a51806202a95c83390190565b80151581146200171e57600080fd5b6000602082840312156200559f57600080fd5b8135620055ac816200557d565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146200171e57600080fd5b600060208284031215620055e957600080fd5b8135620055ac81620055b3565b60208101600b831062005632577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000602082840312156200564b57600080fd5b8151620055ac81620055b3565b600081518084526020808501945080840160005b83811015620056a057815173ffffffffffffffffffffffffffffffffffffffff16875295820195908201906001016200566c565b509495945050505050565b604081526000620056c0604083018562005658565b8281036020840152620056d4818562005658565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60408152600062005721604083018562005658565b905082151560208301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff8111828210171562005787576200578762005732565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715620057d757620057d762005732565b604052919050565b600067ffffffffffffffff821115620057fc57620057fc62005732565b5060051b60200190565b600060208083850312156200581a57600080fd5b825167ffffffffffffffff8111156200583257600080fd5b8301601f810185136200584457600080fd5b80516200585b6200585582620057df565b6200578d565b81815260059190911b820183019083810190878311156200587b57600080fd5b928401925b82841015620058a65783516200589681620055b3565b8252928401929084019062005880565b979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156200591b576200591b620058b1565b500290565b60608082528451828201819052600091906020906080850190828901855b828110156200597d578151805173ffffffffffffffffffffffffffffffffffffffff16855285015185850152604090930192908401906001016200593e565b5050508481038286015262005993818862005658565b90506040858203818701528187518084528484019150848901935060005b81811015620059fd578451805173ffffffffffffffffffffffffffffffffffffffff1684528681015160ff908116888601529085015116848401529385019391860191600101620059b1565b50909a9950505050505050505050565b60005b8381101562005a2a57818101518382015260200162005a10565b8381111562003f5d5750506000910152565b6000601f838184011262005a4f57600080fd5b8251602062005a626200585583620057df565b82815260059290921b8501810191818101908784111562005a8257600080fd5b8287015b8481101562005b9557805167ffffffffffffffff8082111562005aa95760008081fd5b818a01915060407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08181858f0301121562005ae45760008081fd5b62005aee62005761565b8885015162005afd81620055b3565b8152848301518481111562005b125760008081fd5b8086019550508d603f86011262005b295760008081fd5b888501518481111562005b405762005b4062005732565b62005b518a848e840116016200578d565b94508085528e8482880101111562005b6b57600092508283fd5b62005b7c818b870186890162005a0d565b5080890193909352505084525091830191830162005a86565b50979650505050505050565b600080604080848603121562005bb657600080fd5b835167ffffffffffffffff8082111562005bcf57600080fd5b818601915086601f83011262005be457600080fd5b8151602062005bf76200585583620057df565b82815260069290921b8401810191818101908a84111562005c1757600080fd5b948201945b8386101562005c675786868c03121562005c365760008081fd5b62005c4062005761565b865162005c4d81620055b3565b815286840151848201528252948601949082019062005c1c565b9189015191975090945050508083111562005c8157600080fd5b505062005c918582860162005a3c565b9150509250929050565b600061ffff80831681851680830382111562005cbb5762005cbb620058b1565b01949350505050565b60008262005cfb577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500690565b6000821982111562005d165762005d16620058b1565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141562005d505762005d50620058b1565b5060010190565b7fffffffff00000000000000000000000000000000000000000000000000000000831681526000825162005d9381600485016020870162005a0d565b919091016004019392505050565b6000825162005db581846020870162005a0d565b9190910192915050565b60006020828403121562005dd257600080fd5b8151620055ac816200557d565b6000815180845262005df981602086016020860162005a0d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60408152600560408201527f4572726f720000000000000000000000000000000000000000000000000000006060820152608060208201526000620055ac608083018462005ddf565b60008282101562005e895762005e89620058b1565b500390565b600060ff821660ff81141562005ea85762005ea8620058b1565b60010192915050565b600060ff821660ff84168082101562005ece5762005ece620058b1565b90039392505050565b60408152600062005f1560408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b905082602083015292915050565b60408152600062005f1560408301600a81527f2020202041637475616c00000000000000000000000000000000000000000000602082015260400190565b60408152600062005f9f60408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b905073ffffffffffffffffffffffffffffffffffffffff8316602083015292915050565b60408152600062005f9f60408301600a81527f2020202041637475616c00000000000000000000000000000000000000000000602082015260400190565b6040815260006200603f60408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b828103602084015262006053818562005ddf565b949350505050565b6040815260006200603f60408301600a81527f2020202041637475616c0000000000000000000000000000000000000000000060208201526040019056fe60806040523480156200001157600080fd5b5060405162003960380380620039608339810160408190526200003491620002a2565b8151829082906200004d90600290602085019062000133565b5080516200006390600390602084019062000133565b506000601260405162000076906200019d565b6060808252600790820152664352564d6f636b60c81b608082015260a0602082018190526015908201527f43525620666f72204375727665506f6f6c4d6f636b000000000000000000000060c082015260ff909116604082015260e001604051809103906000f080158015620000f0573d6000803e3d6000fd5b50600080546001600160a01b039092166001600160a01b03199283168117909155600180549092161790555050670de0b6b3a7640000600755506200030c915050565b8280548282559060005260206000209081019282156200018b579160200282015b828111156200018b57825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019062000154565b5062000199929150620001ab565b5090565b611758806200220883390190565b5b80821115620001995760008155600101620001ac565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b0381168114620001f057600080fd5b919050565b600082601f8301126200020757600080fd5b815160206001600160401b0380831115620002265762000226620001c2565b8260051b604051601f19603f830116810181811084821117156200024e576200024e620001c2565b6040529384528581018301938381019250878511156200026d57600080fd5b83870191505b8482101562000297576200028782620001d8565b8352918301919083019062000273565b979650505050505050565b60008060408385031215620002b657600080fd5b82516001600160401b0380821115620002ce57600080fd5b620002dc86838701620001f5565b93506020850151915080821115620002f357600080fd5b506200030285828601620001f5565b9150509250929050565b611eec806200031c6000396000f3fe608060405234801561001057600080fd5b506004361061030a5760003560e01c806382c630661161019c578063bb7b8b80116100ee578063e2e7d26411610097578063f851a44011610071578063f851a44014610597578063fc0c546a1461059e578063fee3f7f91461036257600080fd5b8063e2e7d26414610576578063ecb586a514610584578063f446c1d01461036257600080fd5b8063d96c7fce116100c8578063d96c7fce14610369578063dd62ed3e14610568578063ddca3f431461036257600080fd5b8063bb7b8b801461053a578063c661065714610542578063cc2b27d71461055557600080fd5b80639fdaea0c11610150578063b739953e1161012a578063b739953e14610501578063b91434d114610514578063b9947eb01461052757600080fd5b80639fdaea0c146104db578063a6417ed6146104ee578063b4b577ad1461036257600080fd5b80638ea875f3116101815780638ea875f3146104bf57806395d89b411461033557806399bd2ba5146104c857600080fd5b806382c630661461048c57806385ca3c6f146104ac57600080fd5b80633df02124116102605780635e0d443f1161020957806371035418116101e3578063710354181461045457806376a2f0f0146103625780637b475b681461046757600080fd5b80635e0d443f1461042d57806363543f061461036257806370a082311461044057600080fd5b80634903b0d11161023a5780634903b0d1146104075780635409491a1461036257806356ac35031461041a57600080fd5b80633df02124146103e15780634469e30e146103695780634515cef3146103f457600080fd5b806318160ddd116102c257806323746eb81161029c57806323746eb814610393578063313ce567146103625780633883e119146103cb57600080fd5b806318160ddd146103625780631a4d01d21461037e5780632081066c1461036257600080fd5b806307211ef7116102f357806307211ef71461034f578063140522881461036257806314f059791461036957600080fd5b8063065a80d81461030f57806306fdde0314610335575b600080fd5b61032261031d36600461192d565b6105be565b6040519081526020015b60405180910390f35b6040805160208101825260008152905161032c9190611974565b61032261035d3660046119c5565b610677565b6000610322565b6103716106c7565b60405161032c9190611a01565b61039161038c366004611a32565b6106f2565b005b6103a66103a136600461192d565b6107e6565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161032c565b6103226103d9366004611a79565b600092915050565b6103916103ef366004611ab1565b610826565b610391610402366004611b88565b610950565b610322610415366004611bb3565b610b1c565b6103916104283660046119c5565b610b31565b61032261043b3660046119c5565b610b92565b61032261044e366004611bf0565b50600090565b610391610462366004611bb3565b600755565b610391610475366004611c0b565b600f9190910b600090815260066020526040902055565b6001546103a69073ffffffffffffffffffffffffffffffffffffffff1681565b6103716104ba366004611c35565b610bce565b61032260075481565b6103916104d6366004611c73565b610c04565b6103916104e9366004611c8f565b610c63565b6103916104fc366004611ab1565b610de6565b6103a661050f36600461192d565b6111a6565b6103916105223660046119c5565b6111be565b6103a6610535366004611bb3565b61121f565b600754610322565b6103a6610550366004611bb3565b611234565b610322610563366004611cac565b611249565b6103226103d9366004611cd8565b61032261044e366004611bb3565b610391610592366004611d02565b61127f565b60006103a6565b6000546103a69073ffffffffffffffffffffffffffffffffffffffff1681565b6000600282600f0b815481106105d6576105d6611d26565b6000918252602090912001546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa15801561064d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106719190611d55565b92915050565b600f83810b60009081526005602090815260408083209386900b8352929052908120546b033b2e3c9fd0803ce8000000906106b3908490611d9d565b6106bd9190611dda565b90505b9392505050565b6106cf6118f8565b604051806060016040528060008152602001600081526020016000815250905090565b6000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810185905273ffffffffffffffffffffffffffffffffffffffff909116906379cc6790906044016020604051808303816000875af1158015610769573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078d9190611e15565b506107e133826002856fffffffffffffffffffffffffffffffff16815481106107b8576107b8611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169190611402565b505050565b6000600282600f0b815481106107fe576107fe611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1692915050565b6000610833858585610b92565b9050818110156108ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f437572766556314d6f636b3a20494e53554646494349454e545f4f555450555460448201527f5f414d4f554e540000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61091f3330856002896fffffffffffffffffffffffffffffffff16815481106108f5576108f5611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169291906114d6565b61094933826002876fffffffffffffffffffffffffffffffff16815481106107b8576107b8611d26565b5050505050565b60005b6003811015610a7f57600083826003811061097057610970611d26565b60200201511115610a6d576002818154811061098e5761098e611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff166323b872dd33308685600381106109c9576109c9611d26565b60200201516040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff938416600482015292909116602483015260448201526064016020604051808303816000875af1158015610a47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6b9190611e15565b505b80610a7781611e32565b915050610953565b506000546040517f40c10f190000000000000000000000000000000000000000000000000000000081523360048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f19906044015b6020604051808303816000875af1158015610af8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e19190611e15565b6000600282815481106105d6576105d6611d26565b600f83810b60009081526005602090815260408083209386900b835292905220819055610b6a6b033b2e3c9fd0803ce80000008261153a565b600f92830b60009081526005602090815260408083209690950b825294909452919092205550565b600f83810b60009081526004602090815260408083209386900b8352929052908120546b033b2e3c9fd0803ce8000000906106b3908490611d9d565b610bd66118f8565b6040805160608181019092529085906003908390839080828437600092019190915250919695505050505050565b6000546040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052909116906340c10f1990604401610ad9565b60005b6003811015610d88576000838260038110610c8357610c83611d26565b60200201351115610d765760028181548110610ca157610ca1611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33858460038110610cdb57610cdb611d26565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff9093166004840152602002013560248201526044016020604051808303816000875af1158015610d50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d749190611e15565b505b80610d8081611e32565b915050610c66565b506000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906379cc679090604401610ad9565b60006002856fffffffffffffffffffffffffffffffff1681548110610e0d57610e0d611d26565b60009182526020822001546003805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff8816908110610e5957610e59611d26565b60009182526020822001546002805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff8816908110610ea557610ea5611d26565b60009182526020822001546003805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff8916908110610ef157610ef1611d26565b600091825260208220015473ffffffffffffffffffffffffffffffffffffffff169150610f1f898989610677565b905085811015610fb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f437572766556314d6f636b3a20494e53554646494349454e545f4f555450555460448201527f5f414d4f554e540000000000000000000000000000000000000000000000000060648201526084016108c1565b610fd373ffffffffffffffffffffffffffffffffffffffff851633308a6114d6565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526024820189905285169063095ea7b3906044016020604051808303816000875af1158015611048573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061106c9190611e15565b506040517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8616906340c10f1990604401600060405180830381600087803b1580156110db57600080fd5b505af11580156110ef573d6000803e3d6000fd5b50506040517f1e9a69500000000000000000000000000000000000000000000000000000000081523060048201526024810184905273ffffffffffffffffffffffffffffffffffffffff86169250631e9a69509150604401600060405180830381600087803b15801561116157600080fd5b505af1158015611175573d6000803e3d6000fd5b5061119b9250505073ffffffffffffffffffffffffffffffffffffffff83163383611402565b505050505050505050565b6000600382600f0b815481106107fe576107fe611d26565b600f83810b60009081526004602090815260408083209386900b8352929052208190556111f76b033b2e3c9fd0803ce80000008261153a565b600f92830b60009081526004602090815260408083209690950b825294909452919092205550565b6000600382815481106107fe576107fe611d26565b6000600282815481106107fe576107fe611d26565b600f81900b6000908152600660205260408120546b033b2e3c9fd0803ce8000000906112759085611d9d565b6106c09190611dda565b60005b60038110156113a457600082826003811061129f5761129f611d26565b6020020151111561139257600281815481106112bd576112bd611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb338484600381106112f7576112f7611d26565b60200201516040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af115801561136c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113909190611e15565b505b8061139c81611e32565b915050611282565b506000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810184905273ffffffffffffffffffffffffffffffffffffffff909116906379cc679090604401610ad9565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526107e19084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526116a0565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526115349085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611454565b50505050565b60408051808201909152600281527f4d330000000000000000000000000000000000000000000000000000000000006020820152600090826115a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c19190611974565b5060006115b7600284611dda565b90506b033b2e3c9fd0803ce80000006115f0827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611e6b565b6115fa9190611dda565b8411156040518060400160405280600281526020017f4d310000000000000000000000000000000000000000000000000000000000008152509061166b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c19190611974565b5082816116846b033b2e3c9fd0803ce800000087611d9d565b61168e9190611e82565b6116989190611dda565b949350505050565b6000611702826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166117ac9092919063ffffffff16565b8051909150156107e157808060200190518101906117209190611e15565b6107e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016108c1565b60606106bd848460008585843b61181f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108c1565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516118489190611e9a565b60006040518083038185875af1925050503d8060008114611885576040519150601f19603f3d011682016040523d82523d6000602084013e61188a565b606091505b509150915061189a8282866118a5565b979650505050505050565b606083156118b45750816106c0565b8251156118c45782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c19190611974565b60405180606001604052806003906020820280368337509192915050565b8035600f81900b811461192857600080fd5b919050565b60006020828403121561193f57600080fd5b6106c082611916565b60005b8381101561196357818101518382015260200161194b565b838111156115345750506000910152565b6020815260008251806020840152611993816040850160208701611948565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000606084860312156119da57600080fd5b6119e384611916565b92506119f160208501611916565b9150604084013590509250925092565b60608101818360005b6003811015611a29578151835260209283019290910190600101611a0a565b50505092915050565b600080600060608486031215611a4757600080fd5b833592506119f160208501611916565b806060810183101561067157600080fd5b8015158114611a7657600080fd5b50565b60008060808385031215611a8c57600080fd5b611a968484611a57565b91506060830135611aa681611a68565b809150509250929050565b60008060008060808587031215611ac757600080fd5b611ad085611916565b9350611ade60208601611916565b93969395505050506040820135916060013590565b600082601f830112611b0457600080fd5b6040516060810181811067ffffffffffffffff82111715611b4e577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604052806060840185811115611b6357600080fd5b845b81811015611b7d578035835260209283019201611b65565b509195945050505050565b60008060808385031215611b9b57600080fd5b611ba58484611af3565b946060939093013593505050565b600060208284031215611bc557600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461192857600080fd5b600060208284031215611c0257600080fd5b6106c082611bcc565b60008060408385031215611c1e57600080fd5b611c2783611916565b946020939093013593505050565b600080600060e08486031215611c4a57600080fd5b611c548585611a57565b9250611c638560608601611a57565b915060c084013590509250925092565b60008060408385031215611c8657600080fd5b611c2783611bcc565b60008060808385031215611ca257600080fd5b611ba58484611a57565b60008060408385031215611cbf57600080fd5b82359150611ccf60208401611916565b90509250929050565b60008060408385031215611ceb57600080fd5b611cf483611bcc565b9150611ccf60208401611bcc565b60008060808385031215611d1557600080fd5b82359150611ccf8460208501611af3565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215611d6757600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611dd557611dd5611d6e565b500290565b600082611e10577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600060208284031215611e2757600080fd5b81516106c081611a68565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611e6457611e64611d6e565b5060010190565b600082821015611e7d57611e7d611d6e565b500390565b60008219821115611e9557611e95611d6e565b500190565b60008251611eac818460208701611948565b919091019291505056fea2646970667358221220a76213374b33de2cb1c5d61e9c1133f6d8163c7b90c32a6142a6f4fd98fe430364736f6c634300080a003360a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a00336101606040523480156200001257600080fd5b5060405162001852380380620018528339810160408190526200003591620003a3565b6000805460ff191690558585828260c882826001600160a01b0381166200006f57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000ae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d49190620004de565b6001600160a01b0316608052508051620000f6906002906020840190620002ca565b505060a052506001600160a01b0382166200012457604051635919af9760e11b815260040160405180910390fd5b6001600160a01b03821660c0819052670de0b6b3a764000060e05260408051630176f71760e71b815290516000929163bb7b8b809160048083019260209291908290030181865afa1580156200017e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001a4919062000503565b9050620001b1816200022a565b505050506001600160a01b0384161580620001d357506001600160a01b038316155b80620001e657506001600160a01b038216155b156200020557604051635919af9760e11b815260040160405180910390fd5b506001600160a01b039283166101005290821661012052166101405250620005d09050565b8062000249576040516309aadd6f60e41b815260040160405180910390fd5b60018190557f82e7ee47180a631312683eeb2a85ad264c9af490d54de5a75bbdb95b968c6de2816200027b8162000296565b6040805192835260208301919091520160405180910390a150565b60a05160009061271090620002ac908262000533565b620002b890846200054e565b620002c4919062000570565b92915050565b828054620002d89062000593565b90600052602060002090601f016020900481019282620002fc576000855562000347565b82601f106200031757805160ff191683800117855562000347565b8280016001018555821562000347579182015b82811115620003475782518255916020019190600101906200032a565b506200035592915062000359565b5090565b5b808211156200035557600081556001016200035a565b80516001600160a01b03811681146200038857600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60008060008060008060c08789031215620003bd57600080fd5b620003c88762000370565b95506020620003d981890162000370565b9550620003e96040890162000370565b9450620003f96060890162000370565b9350620004096080890162000370565b60a08901519093506001600160401b03808211156200042757600080fd5b818a0191508a601f8301126200043c57600080fd5b8151818111156200045157620004516200038d565b604051601f8201601f19908116603f011681019083821181831017156200047c576200047c6200038d565b816040528281528d868487010111156200049557600080fd5b600093505b82841015620004b957848401860151818501870152928501926200049a565b82841115620004cb5760008684830101525b8096505050505050509295509295509295565b600060208284031215620004f157600080fd5b620004fc8262000370565b9392505050565b6000602082840312156200051657600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156200054957620005496200051d565b500190565b60008160001904831182151516156200056b576200056b6200051d565b500290565b6000826200058e57634e487b7160e01b600052601260045260246000fd5b500490565b600181811c90821680620005a857607f821691505b60208210811415620005ca57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c05160e0516101005161012051610140516111e86200066a6000396000818161023501526108c8015260008181610383015261080901526000818161033901526107620152600081816103120152610a250152600081816101b001526109890152600081816101760152610c170152600081816102eb015281816103db01528181610557015261068f01526111e86000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c80639a6fc8f5116100cd578063b09ad8a011610081578063d62ada1111610066578063d62ada1114610376578063e5693f411461037e578063feaf968c146103a557600080fd5b8063b09ad8a01461035b578063bc489a651461036357600080fd5b8063a50cf2c8116100b2578063a50cf2c8146102e6578063a834559e1461030d578063ab0ca0e11461033457600080fd5b80639a6fc8f514610293578063a384d6ff146102dd57600080fd5b8063427cb6fe116101245780635c975abb116101095780635c975abb1461025f5780637284e416146102765780638456cb591461028b57600080fd5b8063427cb6fe1461023057806354fd4d501461025757600080fd5b8063313ce56711610155578063313ce567146101f75780633f4ba83a146102115780633fd0875f1461021b57600080fd5b806312b495a814610171578063218751b2146101ab575b600080fd5b6101987f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101a2565b6101ff600881565b60405160ff90911681526020016101a2565b6102196103ad565b005b610223600381565b6040516101a29190610dd7565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b610198600181565b60005460ff165b60405190151581526020016101a2565b61027e61049b565b6040516101a29190610e18565b610219610529565b6102a66102a1366004610ea3565b610615565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a0016101a2565b61019860015481565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b6101987f000000000000000000000000000000000000000000000000000000000000000081565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b61019861064f565b610219610371366004610ec7565b610661565b610266600181565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b6102a6610751565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa158015610437573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061045b9190610ee0565b610491576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610499610a67565b565b600280546104a890610f02565b80601f01602080910402602001604051908101604052809291908181526020018280546104d490610f02565b80156105215780601f106104f657610100808354040283529160200191610521565b820191906000526020600020905b81548152906001019060200180831161050457829003601f168201915b505050505081565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa1580156105b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105d79190610ee0565b61060d576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610499610b4d565b60008060008060006040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061065c600154610c0d565b905090565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156106eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070f9190610ee0565b610745576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61074e81610c56565b50565b6000806000806000806000806000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156107cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ef9190610f56565b939d50919b509950975095506108078a8a8989610cd8565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610872573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108969190610f56565b9398509196509450925090506108ae85858484610cd8565b888412156108c6578499508398508297508196508095505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610931573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109559190610f56565b93985091965094509250905061096d85858484610cd8565b88841215610985578499508398508297508196508095505b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb7b8b806040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a169190610fae565b9050610a2181610d73565b90507f0000000000000000000000000000000000000000000000000000000000000000610a4e828c610ff6565b610a5891906110e1565b99505050505050509091929394565b60005460ff16610ad8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff1615610bba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610acf565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b233390565b6000612710610c3c7f000000000000000000000000000000000000000000000000000000000000000082611149565b610c469084611161565b610c50919061119e565b92915050565b80610c8d576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190557f82e7ee47180a631312683eeb2a85ad264c9af490d54de5a75bbdb95b968c6de281610cbd81610c0d565b6040805192835260208301919091520160405180910390a150565b60008313610d12576040517f56e05d2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8369ffffffffffffffffffff168169ffffffffffffffffffff161080610d36575081155b15610d6d576040517fb1cf675500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60015460009080831015610db3576040517fb416da7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610dbe82610c0d565b905080841115610dcf579392505050565b509192915050565b6020810160068310610e12577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b600060208083528351808285015260005b81811015610e4557858101830151858201604001528201610e29565b81811115610e57576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b69ffffffffffffffffffff8116811461074e57600080fd5b600060208284031215610eb557600080fd5b8135610ec081610e8b565b9392505050565b600060208284031215610ed957600080fd5b5035919050565b600060208284031215610ef257600080fd5b81518015158114610ec057600080fd5b600181811c90821680610f1657607f821691505b60208210811415610f50577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600080600080600060a08688031215610f6e57600080fd5b8551610f7981610e8b565b809550506020860151935060408601519250606086015191506080860151610fa081610e8b565b809150509295509295909350565b600060208284031215610fc057600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60008413600084138583048511828216161561103757611037610fc7565b7f8000000000000000000000000000000000000000000000000000000000000000600087128682058812818416161561107257611072610fc7565b6000871292508782058712848416161561108e5761108e610fc7565b878505871281841616156110a4576110a4610fc7565b505050929093029392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826110f0576110f06110b2565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f80000000000000000000000000000000000000000000000000000000000000008314161561114457611144610fc7565b500590565b6000821982111561115c5761115c610fc7565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561119957611199610fc7565b500290565b6000826111ad576111ad6110b2565b50049056fea2646970667358221220226b667ed6fc6db7c8ec1377cc84dae524e2dc572320ead4a7092944a6b912de64736f6c634300080a00336102606040523480156200001257600080fd5b5060405162005f8c38038062005f8c833981016040819052620000359162000ba4565b83838383600384846001600160a01b03821615806200005b57506001600160a01b038116155b156200007a57604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038216608081905260408051632f7a188160e01b81529051632f7a1881916004808201926020929091908290030181865afa158015620000c5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000eb919062000c01565b6001600160a01b0390811660a05290811660c05260016000558416151590506200012857604051635919af9760e11b815260040160405180910390fd5b608051604051630f67c5bd60e41b81526001600160a01b0385811660048301529091169063f67c5bd090602401602060405180830381865afa15801562000173573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000199919062000c26565b620001c757604051634c607af960e11b81526001600160a01b03841660048201526024015b60405180910390fd5b6001600160a01b038084166101e081905261020052821661022052610240819052620001f460006200090a565b6001600160a01b031660e0526200020c60016200090a565b6001600160a01b0316610100526200022560026200090a565b6001600160a01b0316610120526200023e60036200090a565b6001600160a01b031661014052620002576000620009fd565b6001600160a01b031661016052620002706001620009fd565b6001600160a01b031661018052620002896002620009fd565b6001600160a01b03166101a052620002a26003620009fd565b6001600160a01b039081166101c05260e051161580620002cc5750610100516001600160a01b0316155b15620002eb57604051635919af9760e11b815260040160405180910390fd5b600281118015620003065750610120516001600160a01b0316155b156200032557604051635919af9760e11b815260040160405180910390fd5b600381118015620003405750610140516001600160a01b0316155b156200035f57604051635919af9760e11b815260040160405180910390fd5b60805160e051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620003ac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003d2919062000c26565b620004005760e051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b60805161010051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa1580156200044e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000474919062000c26565b620004a35761010051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b60028111801562000525575060805161012051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620004fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000523919062000c26565b155b15620005555761012051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b600381118015620005d7575060805161014051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620005af573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005d5919062000c26565b155b15620006075761014051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b610160516001600160a01b03161580159062000694575060805161016051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa1580156200066c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000692919062000c26565b155b15620006c45761016051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b610180516001600160a01b03161580159062000751575060805161018051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa15801562000729573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200074f919062000c26565b155b15620007815761018051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b6101a0516001600160a01b0316158015906200080e57506080516101a051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620007e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200080c919062000c26565b155b156200083e576101a051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b6101c0516001600160a01b031615801590620008cb57506080516101c051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620008a3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008c9919062000c26565b155b15620008fb576101c051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b50505050505050505062000c66565b60c05160405163c661065760e01b8152600481018390526000916001600160a01b03169063c661065790602401602060405180830381865afa92505050801562000973575060408051601f3d908101601f19168201909252620009709181019062000c01565b60015b6200097e5762000984565b92915050565b60c05160405163046e8dd760e31b8152600f84900b60048201526001600160a01b03909116906323746eb8906024015b602060405180830381865afa925050508015620009f0575060408051601f3d908101601f19168201909252620009ed9181019062000c01565b60015b6200097e57506000919050565b610220516000906001600160a01b03161562000a1e576200097e8262000ac0565b60c051604051630b9947eb60e41b8152600481018490526001600160a01b039091169063b9947eb090602401602060405180830381865afa92505050801562000a86575060408051601f3d908101601f1916820190925262000a839181019062000c01565b60015b6200097e5760c051604051635b9cca9f60e11b8152600f84900b60048201526001600160a01b039091169063b739953e90602401620009b4565b60008162000ad4576200097e600062000b17565b610220516001600160a01b031663c661065762000af360018562000c40565b6040518263ffffffff1660e01b8152600401620009b491815260200190565b919050565b600081600f0b6000141562000b2b575060e0515b81600f0b6001141562000b3e5750610100515b81600f0b6002141562000b515750610120515b81600f0b6003141562000b645750610140515b6001600160a01b03811662000b12576040516334769e6f60e21b815260040160405180910390fd5b80516001600160a01b038116811462000b1257600080fd5b6000806000806080858703121562000bbb57600080fd5b62000bc68562000b8c565b935062000bd66020860162000b8c565b925062000be66040860162000b8c565b915062000bf66060860162000b8c565b905092959194509250565b60006020828403121562000c1457600080fd5b62000c1f8262000b8c565b9392505050565b60006020828403121562000c3957600080fd5b5051919050565b60008282101562000c6157634e487b7160e01b600052601160045260246000fd5b500390565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e051610200516102205161024051614fa962000fe36000396000818161078301528181613708015281816138bf015281816139d901528181613e0f0152613f01015260006105de01526000818161067501528181611f680152818161239f0152818161278901528181612e6b01528181612f0901526131ed015260006108ad01526000818161059c015261288b0152600081816103d4015261285c015260008181610605015261282d0152600081816106af01526127fe015260008181610876015281816126630152818161363501528181613f6b01526146640152600081816104d7015281816126340152818161356501528181613e7901526145480152600081816107f3015281816126050152818161349501528181613d85015261442c015260008181610448015281816125d6015281816133c501528181613cb901526143100152600081816107350152818161091a015281816109e701528181610a7701528181610b6f01528181610bfe01528181610c9501528181610d2601528181611139015281816111b1015281816112ee0152818161144101528181611578015281816115c00152818161166d015281816116b5015281816117660152818161179b01528181611ac501528181611b4301528181611ccd01528181611d4501528181611dea01528181611fb20152818161206b015281816120a00152818161213b0152818161245e015281816124cb0152818161255c01528181612aa901528181612bc801528181612ca2015281816142e801528181614404015281816145200152818161463c01526147840152600081816104fe0152818161291401528181614055015261482b01526000818161075c01528181610ec9015281816118a601528181611ef4015281816122450152818161270101528181612aff01528181612b9901528181612cf801528181612da0015281816130630152818161311a01528181613215015281816132f8015281816133ed015281816134bd0152818161358d0152818161365d01528181613bf401528181613ce401528181613dad01528181613ea101528181613f93015281816140dd015281816141910152818161423b0152818161435e0152818161447a01528181614596015281816146b20152818161475501526148950152614fa96000f3fe608060405234801561001057600080fd5b50600436106103a45760003560e01c806379bea664116101e9578063cc2b27d71161010f578063e2e7d264116100ad578063f446c1d01161007c578063f446c1d014610898578063f851a440146108a0578063fc0c546a146108a8578063fee3f7f9146108cf57600080fd5b8063e2e7d26414610838578063ec026ca71461084b578063ecb586a51461085e578063ef14101e1461087157600080fd5b8063d21220a7116100e9578063d21220a7146107ee578063d96c7fce14610815578063dd62ed3e1461081d578063ddca3f431461083057600080fd5b8063cc2b27d7146107b3578063ce30bbdb146107c6578063cf023dd0146107db57600080fd5b8063b4b577ad11610187578063bd90df7011610156578063bd90df7014610730578063c12c21c014610757578063c21ee1621461077e578063c6610657146107a557600080fd5b8063b4b577ad146106ff578063b739953e14610707578063b9947eb01461071a578063bb7b8b801461072857600080fd5b80638ba51dfc116101c35780638ba51dfc146106aa57806395d89b41146106d15780639fdaea0c146106d9578063a6417ed6146106ec57600080fd5b806379bea6641461065d57806382c630661461067057806385ca3c6f1461069757600080fd5b806333d2ebf2116102ce57806357d788751161026c5780636e1d82711161023b5780636e1d82711461060057806370a082311461062757806376a2f0f01461063a57806378aa73a41461064257600080fd5b806357d78875146105975780635e0d443f146105be57806363543f06146105d157806364a89bca146105d957600080fd5b80634469e30e116102a85780634469e30e146105615780634515cef3146105695780634903b0d11461057c5780635409491a1461058f57600080fd5b806333d2ebf2146105285780633883e1191461053b5780633df021241461054e57600080fd5b806318160ddd1161034657806323746eb81161031557806323746eb8146104bf57806325be124e146104d25780632f7a1881146104f9578063313ce5671461052057600080fd5b806318160ddd146104875780631a4d01d21461048f5780631af4de83146104a45780632081066c146104b757600080fd5b806307211ef71161038257806307211ef7146104305780630dfe168114610443578063140522881461046a57806314f059791461047257600080fd5b8063065a80d8146103a957806306871163146103cf57806306fdde031461041b575b600080fd5b6103bc6103b736600461491d565b6108d7565b6040519081526020015b60405180910390f35b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016103c6565b610423610a73565b6040516103c691906149ae565b6103bc61043e3660046149c1565b610b2b565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc610bfa565b61047a610c8b565b6040516103c691906149fd565b6103bc610d22565b6104a261049d366004614a2e565b610d8f565b005b6104a26104b23660046149c1565b610e27565b6103bc611135565b6103f66104cd36600461491d565b6111a2565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc6111ad565b6104a2610536366004614a53565b61121a565b6103bc610549366004614a8e565b6112ae565b6104a261055c366004614acb565b611366565b61047a611437565b6104a2610577366004614b0d565b6114aa565b6103bc61058a366004614b38565b611546565b6103bc6115bc565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc6105cc3660046149c1565b611629565b6103bc6116b1565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc610635366004614b73565b61171e565b6103bc611797565b61064a600281565b60405161ffff90911681526020016103c6565b6104a261066b3660046149c1565b611804565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b61047a6106a5366004614b90565b611a80565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b610423611b3f565b6104a26106e7366004614b0d565b611bac565b6104a26106fa366004614acb565b611c3f565b6103bc611cc9565b6103f661071536600461491d565b611d36565b6103f6610715366004614b38565b6103bc611d41565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc7f000000000000000000000000000000000000000000000000000000000000000081565b6103f66104cd366004614b38565b6103bc6107c1366004614bce565b611dae565b6107ce600681565b6040516103c69190614bfa565b6104a26107e9366004614a2e565b611e2e565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b61047a611fa8565b6103bc61082b366004614c3b565b61201b565b6103bc61209c565b6103bc610846366004614b38565b612109565b6104a2610859366004614a53565b61217f565b6104a261086c366004614c69565b6123e0565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc61245a565b6103f66124c7565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc612558565b6040517f4903b0d10000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff821660048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634903b0d1906024015b602060405180830381865afa9250505080156109b1575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526109ae91810190614c8d565b60015b610a68576040517f065a80d8000000000000000000000000000000000000000000000000000000008152600f83900b60048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063065a80d8906024015b602060405180830381865afa158015610a44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a689190614c8d565b92915050565b919050565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015610ae0573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b269190810190614d67565b905090565b6040517f07211ef7000000000000000000000000000000000000000000000000000000008152600f84810b600483015283900b6024820152604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906307211ef7906064015b602060405180830381865afa158015610bcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf09190614c8d565b90505b9392505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663140522886040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b269190614c8d565b610c936148ed565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166314f059796040518163ffffffff1660e01b8152600401606060405180830381865afa158015610cfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b269190614db8565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b60026000541415610e01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b60026000908155610e11836125c5565b9050610e1c816126d0565b505060016000555050565b60026000541415610e94576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610f25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f499190614e36565b90506000610f56856127ed565b90506000610f63856127ed565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529192506000918416906370a0823190602401602060405180830381865afa158015610fd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff99190614c8d565b90506001811115611127577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce800000061103f8784614e53565b6110499190614eb7565b604051600f8a810b602483015289900b60448201526064810184905260848101829052909150611124908690869086907fa6417ed6000000000000000000000000000000000000000000000000000000009060a4015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526001806128f7565b50505b505060016000555050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632081066c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6000610a68826125c5565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b60026000541415611287576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b60026000908155611297836125c5565b90506112a4838284612d6f565b5050600160005550565b6040517f3883e11900000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690633883e119906113259086908690600401614ef2565b602060405180830381865afa158015611342573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf39190614c8d565b600260005414156113d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b600260009081556113e3856125c5565b905060006113f0856125c5565b905061112782826000368080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525060019350915061301a9050565b61143f6148ed565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16634469e30e6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610cfe573d6000803e3d6000fd5b60026000541415611517576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b6002600090815561153d90600184358110916020860135821091604087013511906130e9565b50506001600055565b6040517f4903b0d1000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634903b0d19060240161095a565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635409491a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6040517f5e0d443f000000000000000000000000000000000000000000000000000000008152600f84810b600483015283900b6024820152604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635e0d443f90606401610baf565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166363543f066040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401610a27565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166376a2f0f06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b60026000541415611871576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611902573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119269190614e36565b90506000611933856125c5565b90506000611940856125c5565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529192506000918416906370a0823190602401602060405180830381865afa1580156119b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d69190614c8d565b90506001811115611127577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce8000000611a1c8784614e53565b611a269190614eb7565b604051600f8a810b602483015289900b60448201526064810184905260848101829052909150611124908690869086907f3df02124000000000000000000000000000000000000000000000000000000009060a40161109f565b611a886148ed565b6040517f85ca3c6f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906385ca3c6f90611afe90879087908790600401614f0a565b606060405180830381865afa158015611b1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf09190614db8565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610ae0573d6000803e3d6000fd5b60026000541415611c19576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b6002600090815561153d90600184358110916020860135821091604087013511906132c7565b60026000541415611cac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b60026000908155611cbc856127ed565b905060006113f0856127ed565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b4b577ad6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6000610a68826127ed565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb7b8b806040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6040517fcc2b27d700000000000000000000000000000000000000000000000000000000815260048101839052600f82900b60248201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063cc2b27d790604401611325565b60026000541415611e9b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b60026000908155611eab836125c5565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611f3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f5f9190614e36565b9050611f9b81837f0000000000000000000000000000000000000000000000000000000000000000611f92888a89613704565b600160006128f7565b5050600160005550505050565b611fb06148ed565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d96c7fce6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610cfe573d6000803e3d6000fd5b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063dd62ed3e90604401611325565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6040517fe2e7d264000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e2e7d26490602401610a27565b600260005414156121ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b600260009081556121fc836125c5565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa15801561228c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b09190614e36565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000918416906370a0823190602401602060405180830381865afa158015612322573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123469190614c8d565b905060018111156123d4577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce800000061238c8684614e53565b6123969190614eb7565b90506123d183857f00000000000000000000000000000000000000000000000000000000000000006123c98a8787613704565b6001806128f7565b50505b50506001600055505050565b6002600054141561244d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b600260005561153d613bc3565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f446c1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa158015612534573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b269190614e36565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fee3f7f96040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b600081600f0b600014156125f657507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6001141561262557507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6002141561265457507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6003141561268357507f00000000000000000000000000000000000000000000000000000000000000005b73ffffffffffffffffffffffffffffffffffffffff8116610a6e576040517fd1da79bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa15801561275d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127819190614e36565b90506127e8817f0000000000000000000000000000000000000000000000000000000000000000846000368080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525092508291506128f79050565b505050565b600081600f0b6000141561281e57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6001141561284d57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6002141561287c57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6003141561268357507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff8116610a6e576040517fd1da79bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606000803373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614612a60576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301528916906370a0823190602401602060405180830381865afa1580156129a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129c99190614c8d565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152919350908816906370a0823190602401602060405180830381865afa158015612a39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a5d9190614c8d565b90505b8415612b5c576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612b4357600080fd5b505af1158015612b57573d6000803e3d6000fd5b505050505b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a90612bf29033907f0000000000000000000000000000000000000000000000000000000000000000908b90600401614f31565b6000604051808303816000875af1158015612c11573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052612c579190810190614d67565b92508415612d55576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612d3c57600080fd5b505af1158015612d50573d6000803e3d6000fd5b505050505b612d6389898985858961403d565b50509695505050505050565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612dfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e209190614e36565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000917f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015612eb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ed69190614c8d565b90506001811115613013577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01613011827f0000000000000000000000000000000000000000000000000000000000000000867f1a4d01d200000000000000000000000000000000000000000000000000000000858a6b033b2e3c9fd0803ce8000000612f638b84614e53565b612f6d9190614eb7565b6040516024810193909352600f9190910b60448301526064820152608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152600060016128f7565b505b5050505050565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015260609060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa1580156130aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130ce9190614e36565b90506130de8188888888886128f7565b979650505050505050565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015613176573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061319a9190614e36565b90506131a88585858561429f565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561325957600080fd5b505af115801561326d573d6000803e3d6000fd5b505050506132b16000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061471592505050565b506132be8585858561429f565b61301381614813565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015613354573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133789190614e36565b9050841561344a576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561343157600080fd5b505af1158015613445573d6000803e3d6000fd5b505050505b831561351a576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561350157600080fd5b505af1158015613515573d6000803e3d6000fd5b505050505b82156135ea576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156135d157600080fd5b505af11580156135e5573d6000803e3d6000fd5b505050505b81156136ba576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156136a157600080fd5b505af11580156136b5573d6000803e3d6000fd5b505050505b6136fa6000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061471592505050565b5061301381614813565b60607f0000000000000000000000000000000000000000000000000000000000000000600214156138bd5783600f0b6000146137fa576040516000602482015260448101849052606481018390527f0b4c7e4d00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526138b6565b6040516024810184905260006044820152606481018390527f0b4c7e4d00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091525b9050610bf3565b7f0000000000000000000000000000000000000000000000000000000000000000600314156139d75783600f0b60001461398e5783600f0b60011461394557604051600060248201819052604482015260648101849052608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401613778565b604051600060248201819052604482018590526064820152608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401613778565b604051602481018490526000604482018190526064820152608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401613838565b7f000000000000000000000000000000000000000000000000000000000000000060041415613b615783600f0b600014613b115783600f0b600114613ac15783600f0b600214613a71576040516000602482018190526044820181905260648201526084810184905260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613778565b6040516000602482018190526044820181905260648201859052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613778565b6040516000602482018190526044820185905260648201819052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613778565b6040516024810184905260006044820181905260648201819052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613838565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f496e636f7272656374206e436f696e73000000000000000000000000000000006044820152606401610df8565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015613c50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c749190614e36565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301529192507f0000000000000000000000000000000000000000000000000000000000000000909116906351e3f16090604401600060405180830381600087803b158015613d2a57600080fd5b505af1158015613d3e573d6000803e3d6000fd5b50506040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f00000000000000000000000000000000000000000000000000000000000000001692506351e3f1609150604401600060405180830381600087803b158015613df357600080fd5b505af1158015613e07573d6000803e3d6000fd5b5050505060027f00000000000000000000000000000000000000000000000000000000000000001115613ff0576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015613ee557600080fd5b505af1158015613ef9573d6000803e3d6000fd5b5050505060037f00000000000000000000000000000000000000000000000000000000000000001115613ff0576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015613fd757600080fd5b505af1158015613feb573d6000803e3d6000fd5b505050505b6140306000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061471592505050565b5061403a81614813565b50565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461413e576040517f654a9eda00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528681166024830152858116604483015260648201859052608482018490527f0000000000000000000000000000000000000000000000000000000000000000169063654a9eda9060a401600060405180830381600087803b15801561412157600080fd5b505af1158015614135573d6000803e3d6000fd5b50505050613011565b80156141ee576040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015286811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b1580156141d557600080fd5b505af11580156141e9573d6000803e3d6000fd5b505050505b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015285811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561427f57600080fd5b505af1158015614293573d6000803e3d6000fd5b50505050505050505050565b83156143bb576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156143a257600080fd5b505af11580156143b6573d6000803e3d6000fd5b505050505b82156144d7576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156144be57600080fd5b505af11580156144d2573d6000803e3d6000fd5b505050505b81156145f3576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156145da57600080fd5b505af11580156145ee573d6000803e3d6000fd5b505050505b801561470f576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156146f657600080fd5b505af115801561470a573d6000803e3d6000fd5b505050505b50505050565b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815260609073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a906147ae9033907f0000000000000000000000000000000000000000000000000000000000000000908790600401614f31565b6000604051808303816000875af11580156147cd573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610a689190810190614d67565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461403a576040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b1580156148d957600080fd5b505af1158015613013573d6000803e3d6000fd5b60405180606001604052806003906020820280368337509192915050565b8035600f81900b8114610a6e57600080fd5b60006020828403121561492f57600080fd5b610bf38261490b565b60005b8381101561495357818101518382015260200161493b565b8381111561470f5750506000910152565b6000815180845261497c816020860160208601614938565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610bf36020830184614964565b6000806000606084860312156149d657600080fd5b6149df8461490b565b92506149ed6020850161490b565b9150604084013590509250925092565b60608101818360005b6003811015614a25578151835260209283019290910190600101614a06565b50505092915050565b600080600060608486031215614a4357600080fd5b833592506149ed6020850161490b565b60008060408385031215614a6657600080fd5b614a6f8361490b565b946020939093013593505050565b8060608101831015610a6857600080fd5b60008060808385031215614aa157600080fd5b614aab8484614a7d565b915060608301358015158114614ac057600080fd5b809150509250929050565b60008060008060808587031215614ae157600080fd5b614aea8561490b565b9350614af86020860161490b565b93969395505050506040820135916060013590565b60008060808385031215614b2057600080fd5b614b2a8484614a7d565b946060939093013593505050565b600060208284031215614b4a57600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461403a57600080fd5b600060208284031215614b8557600080fd5b8135610bf381614b51565b600080600060e08486031215614ba557600080fd5b614baf8585614a7d565b9250614bbe8560608601614a7d565b915060c084013590509250925092565b60008060408385031215614be157600080fd5b82359150614bf16020840161490b565b90509250929050565b6020810160118310614c35577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60008060408385031215614c4e57600080fd5b8235614c5981614b51565b91506020830135614ac081614b51565b60008060808385031215614c7c57600080fd5b82359150614bf18460208501614a7d565b600060208284031215614c9f57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff80841115614cf057614cf0614ca6565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715614d3657614d36614ca6565b81604052809350858152868686011115614d4f57600080fd5b614d5d866020830187614938565b5050509392505050565b600060208284031215614d7957600080fd5b815167ffffffffffffffff811115614d9057600080fd5b8201601f81018413614da157600080fd5b614db084825160208401614cd5565b949350505050565b600060608284031215614dca57600080fd5b82601f830112614dd957600080fd5b6040516060810181811067ffffffffffffffff82111715614dfc57614dfc614ca6565b604052806060840185811115614e1157600080fd5b845b81811015614e2b578051835260209283019201614e13565b509195945050505050565b600060208284031215614e4857600080fd5b8151610bf381614b51565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614eb2577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500290565b600082614eed577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60808101606084833791151560609190910152919050565b60e081016060858337606082016000815260608582375060c0919091019190915292915050565b600073ffffffffffffffffffffffffffffffffffffffff808616835280851660208401525060606040830152614f6a6060830184614964565b9594505050505056fea2646970667358221220efb951725986e76ee157ff0d00cd7b7a6a9b8a581784400c52be5c96516fe15064736f6c634300080a0033608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6118158061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c80638da5cb5b11610076578063d7aa2e351161005b578063d7aa2e35146101b3578063d914cd4b146101f2578063f2fde38b1461020557600080fd5b80638da5cb5b1461015d578063c488f7fe1461018557600080fd5b80634dee073b116100a75780634dee073b146101015780636f33547d14610142578063715018a61461015557600080fd5b80631bf64c41146100c357806345330666146100ec575b600080fd5b6100d66100d1366004611345565b610218565b6040516100e3919061142e565b60405180910390f35b6100ff6100fa366004611500565b6103fa565b005b61012f61010f366004611551565b6001602090815260009283526040808420909152908252902054600f0b81565b604051600f9190910b81526020016100e3565b6100d6610150366004611345565b6104d7565b6100ff610514565b60005460405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100e3565b61012f610193366004611551565b6002602090815260009283526040808420909152908252902054600f0b81565b6101e46101c136600461158a565b600360209081526000938452604080852082529284528284209052825290205481565b6040519081526020016100e3565b6100ff6102003660046115d5565b6105a1565b6100ff6102133660046115d5565b61089e565b6102556040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b61025e836109ce565b156103f45760008273ffffffffffffffffffffffffffffffffffffffff1663bd90df706040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102d491906115f2565b905060008060008060006102e88987610a67565b9450945094509450945082156103ed5760405180608001604052806103118b8b858a8a89610d8b565b8152602001828152602001600115158152602001600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008c6040015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008c6060015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481525096505b5050505050505b92915050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610480576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff93841660009081526003602090815260408083209587168084528683528184209590971683529381528382208390559384528281209481529390925290912055565b6103f46040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b60005473ffffffffffffffffffffffffffffffffffffffff163314610595576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610477565b61059f6000611045565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610622576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610477565b60005b6004600f82900b121561075d576040517f23746eb8000000000000000000000000000000000000000000000000000000008152600f82900b600482015273ffffffffffffffffffffffffffffffffffffffff8316906323746eb890602401602060405180830381865afa9250505080156106da575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526106d7918101906115f2565b60015b6106e35761075d565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160208181526040808420959094168352939093522080547fffffffffffffffffffffffffffffffff0000000000000000000000000000000016929091016fffffffffffffffffffffffffffffffff8116929092179055610625565b5060005b6004600f82900b121561089a576040517fb739953e000000000000000000000000000000000000000000000000000000008152600f82900b600482015273ffffffffffffffffffffffffffffffffffffffff83169063b739953e90602401602060405180830381865afa925050508015610816575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610813918101906115f2565b60015b61081e575050565b73ffffffffffffffffffffffffffffffffffffffff808416600090815260026020908152604080832094909316825292909252902080546fffffffffffffffffffffffffffffffff60018401167fffffffffffffffffffffffffffffffff00000000000000000000000000000000909116179055600101610761565b5050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461091f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610477565b73ffffffffffffffffffffffffffffffffffffffff81166109c2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610477565b6109cb81611045565b50565b600080825160028111156109e4576109e461160f565b1480610a025750600182516002811115610a0057610a0061160f565b145b15610a0f57506001919050565b600282516002811115610a2457610a2461160f565b1415610a3257506000919050565b81516040517ffe7995cf000000000000000000000000000000000000000000000000000000008152610477919060040161163e565b73ffffffffffffffffffffffffffffffffffffffff80821660009081526001602081815260408084208782015190951684529390529181205490918291829182918291610ab691600f0b6116ae565b73ffffffffffffffffffffffffffffffffffffffff808816600090815260016020818152604080842060608e0151909516845293905291902054919650610aff91600f0b6116ae565b9350600085600f0b12158015610b195750600084600f0b12155b15610bf85760a08701516040517f5e0d443f000000000000000000000000000000000000000000000000000000008152600f87810b600483015286900b6024820152604481019190915273ffffffffffffffffffffffffffffffffffffffff871690635e0d443f90606401602060405180830381865afa925050508015610bdb575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610bd89181019061171f565b60015b610be457610d81565b8015610bf257600193508091505b50610d81565b73ffffffffffffffffffffffffffffffffffffffff80871660009081526002602090815260408083208b82015190941683529290522054610c3e90600190600f0b6116ae565b73ffffffffffffffffffffffffffffffffffffffff808816600090815260026020908152604080832060608d015190941683529290522054909550610c8890600190600f0b6116ae565b9350600085600f0b12158015610ca25750600084600f0b12155b15610d815760a08701516040517f07211ef7000000000000000000000000000000000000000000000000000000008152600f87810b600483015286900b6024820152604481019190915273ffffffffffffffffffffffffffffffffffffffff8716906307211ef790606401602060405180830381865afa925050508015610d64575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610d619181019061171f565b60015b610d6d57610d81565b8015610d7f5760019350809150600192505b505b9295509295909350565b6040805180820190915260008152606060208201526060600188516002811115610db757610db761160f565b1415610eb75782610de8577f79bea66400000000000000000000000000000000000000000000000000000000610e0a565b7f1af4de83000000000000000000000000000000000000000000000000000000005b8585610e168b8a6110ba565b604051600f93840b60248201529190920b60448201526064810191909152608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505b600088516002811115610ecc57610ecc61160f565b1415610fcc5782610efd577f3df0212400000000000000000000000000000000000000000000000000000000610f1f565b7fa6417ed6000000000000000000000000000000000000000000000000000000005b8585610f2b8b8a6110f2565b604051600f93840b60248201529190920b60448201526064810191909152608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505b8051156110065760405180604001604052808873ffffffffffffffffffffffffffffffffffffffff1681526020018281525091505061103b565b87516040517ffe7995cf000000000000000000000000000000000000000000000000000000008152610477919060040161163e565b9695505050505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60a08201516000906110e1846110dc856b033b2e3c9fd0803ce8000000611738565b6110f2565b6110eb9190611775565b9392505050565b60008260e0015115611106575060006103f4565b60008351600281111561111b5761111b61160f565b148061113957506001835160028111156111375761113761160f565b145b1561116c5760c08301516127109061115190826117b0565b61115b9084611738565b6111659190611775565b90506103f4565b6002835160028111156111815761118161160f565b14156111a45760c0830151611198906127106117c7565b61115b61271084611738565b82516040517ffe7995cf000000000000000000000000000000000000000000000000000000008152610477919060040161163e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610100810167ffffffffffffffff8111828210171561122c5761122c6111d9565b60405290565b80356003811061124157600080fd5b919050565b73ffffffffffffffffffffffffffffffffffffffff811681146109cb57600080fd5b803561124181611246565b600082601f83011261128457600080fd5b8135602067ffffffffffffffff808311156112a1576112a16111d9565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f830116810181811084821117156112e4576112e46111d9565b60405293845285810183019383810192508785111561130257600080fd5b83870191505b8482101561132a57813561131b81611246565b83529183019190830190611308565b979650505050505050565b8035801515811461124157600080fd5b6000806040838503121561135857600080fd5b823567ffffffffffffffff8082111561137057600080fd5b90840190610100828703121561138557600080fd5b61138d611208565b61139683611232565b81526113a460208401611268565b60208201526113b560408401611268565b60408201526113c660608401611268565b60608201526080830135828111156113dd57600080fd5b6113e988828601611273565b60808301525060a083013560a082015260c083013560c082015261140f60e08401611335565b60e0820152935061142591505060208401611268565b90509250929050565b60006020808352835160808285015273ffffffffffffffffffffffffffffffffffffffff81511660a0850152818101519050604060c085015280518060e086015260005b8181101561148f5782810184015186820161010001528301611472565b818111156114a257600061010083880101525b50828601516040860152604086015192506114c1606086018415159052565b606095909501516080850152505050601f919091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016016101000190565b6000806000806080858703121561151657600080fd5b843561152181611246565b9350602085013561153181611246565b9250604085013561154181611246565b9396929550929360600135925050565b6000806040838503121561156457600080fd5b823561156f81611246565b9150602083013561157f81611246565b809150509250929050565b60008060006060848603121561159f57600080fd5b83356115aa81611246565b925060208401356115ba81611246565b915060408401356115ca81611246565b809150509250925092565b6000602082840312156115e757600080fd5b81356110eb81611246565b60006020828403121561160457600080fd5b81516110eb81611246565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160038310611679577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600081600f0b83600f0b60008112817fffffffffffffffffffffffffffffffff80000000000000000000000000000000018312811516156116f1576116f161167f565b816f7fffffffffffffffffffffffffffffff0183138116156117155761171561167f565b5090039392505050565b60006020828403121561173157600080fd5b5051919050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156117705761177061167f565b500290565b6000826117ab577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000828210156117c2576117c261167f565b500390565b600082198211156117da576117da61167f565b50019056fea2646970667358221220ed82995f9e9761ea7972d39ed0d8d0b378778cbba995315b16c90b49c74d2b7e64736f6c634300080a003360806040523480156200001157600080fd5b506040516200329438038062003294833981016040819052620000349162000222565b6002805460018101825560008290527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319166001600160a01b038581169190911790915560408051637e062a3560e11b815290519184169163fc0c546a916004808201926020929091908290030181865afa158015620000c3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e991906200025a565b81546001810183556000928352602083200180546001600160a01b0319166001600160a01b03929092169190911790556040516012906200012a90620001f7565b6060808252600790820152664352564d6f636b60c81b608082015260a0602082018190526015908201527f43525620666f72204375727665506f6f6c4d6f636b000000000000000000000060c082015260ff909116604082015260e001604051809103906000f080158015620001a4573d6000803e3d6000fd5b50600080546001600160a01b039283166001600160a01b03199182168117909255600180548216909217909155670de0b6b3a76400006007556003805494909216931692909217909155506200027f9050565b6117588062001b3c83390190565b80516001600160a01b03811681146200021d57600080fd5b919050565b600080604083850312156200023657600080fd5b620002418362000205565b9150620002516020840162000205565b90509250929050565b6000602082840312156200026d57600080fd5b620002788262000205565b9392505050565b6118ad806200028f6000396000f3fe608060405234801561001057600080fd5b50600436106102925760003560e01c806382c6306611610160578063c531e24f116100d8578063e2e7d2641161008c578063f851a44011610071578063f851a440146104bd578063fc0c546a146104c4578063fee3f7f9146102ea57600080fd5b8063e2e7d264146104af578063f446c1d0146102ea57600080fd5b8063cc2b27d7116100bd578063cc2b27d714610486578063dd62ed3e14610499578063ddca3f43146102ea57600080fd5b8063c531e24f14610453578063c66106571461047357600080fd5b8063b4b577ad1161012f578063b91434d111610114578063b91434d114610425578063b9947eb014610438578063bb7b8b801461044b57600080fd5b8063b4b577ad146102ea578063b739953e1461041257600080fd5b806382c63066146103d65780638ea875f3146103f657806395d89b41146102bd578063a6417ed6146103ff57600080fd5b80633df021241161020e57806363543f06116101c257806371035418116101a7578063710354181461039e57806376a2f0f0146102ea5780637b475b68146103b157600080fd5b806363543f06146102ea57806370a082311461038a57600080fd5b80635409491a116101f35780635409491a146102ea57806356ac3503146103645780635e0d443f1461037757600080fd5b80633df021241461033e5780634903b0d11461035157600080fd5b806318160ddd116102655780632081066c1161024a5780632081066c146102ea57806323746eb814610306578063313ce567146102ea57600080fd5b806318160ddd146102ea5780631a4d01d2146102f157600080fd5b8063065a80d81461029757806306fdde03146102bd57806307211ef7146102d757806314052288146102ea575b600080fd5b6102aa6102a5366004611468565b6104e4565b6040519081526020015b60405180910390f35b604080516020810182526000815290516102b491906114af565b6102aa6102e5366004611500565b610507565b60006102aa565b6103046102ff36600461153c565b610557565b005b610319610314366004611468565b61064b565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102b4565b61030461034c366004611561565b61069a565b6102aa61035f3660046115a3565b6107c4565b610304610372366004611500565b610874565b6102aa610385366004611500565b6108d5565b6102aa6103983660046115e1565b50600090565b6103046103ac3660046115a3565b600755565b6103046103bf3660046115fe565b600f9190910b600090815260066020526040902055565b6001546103199073ffffffffffffffffffffffffffffffffffffffff1681565b6102aa60075481565b61030461040d366004611561565b610911565b610319610420366004611468565b610daf565b610304610433366004611500565b610e70565b6103196104463660046115a3565b610ed1565b6007546102aa565b6003546103199073ffffffffffffffffffffffffffffffffffffffff1681565b6103196104813660046115a3565b610f15565b6102aa610494366004611628565b610f2a565b6102aa6104a7366004611654565b600092915050565b6102aa6103983660046115a3565b6000610319565b6000546103199073ffffffffffffffffffffffffffffffffffffffff1681565b6000610501826fffffffffffffffffffffffffffffffff166107c4565b92915050565b600f83810b60009081526005602090815260408083209386900b8352929052908120546b033b2e3c9fd0803ce8000000906105439084906116bc565b61054d91906116f9565b90505b9392505050565b6000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810185905273ffffffffffffffffffffffffffffffffffffffff909116906379cc6790906044016020604051808303816000875af11580156105ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f29190611734565b5061064633826002856fffffffffffffffffffffffffffffffff168154811061061d5761061d611756565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169190610f60565b505050565b60006002826fffffffffffffffffffffffffffffffff168154811061067257610672611756565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1692915050565b60006106a78585856108d5565b90508181101561073e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f437572766556314d6f636b3a20494e53554646494349454e545f4f555450555460448201527f5f414d4f554e540000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6107933330856002896fffffffffffffffffffffffffffffffff168154811061076957610769611756565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16929190611034565b6107bd33826002876fffffffffffffffffffffffffffffffff168154811061061d5761061d611756565b5050505050565b6000600282815481106107d9576107d9611756565b6000918252602090912001546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa158015610850573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105019190611785565b600f83810b60009081526005602090815260408083209386900b8352929052208190556108ad6b033b2e3c9fd0803ce800000082611098565b600f92830b60009081526005602090815260408083209690950b825294909452919092205550565b600f83810b60009081526004602090815260408083209386900b8352929052908120546b033b2e3c9fd0803ce8000000906105439084906116bc565b83600f0b600014156109e157600260008154811061093157610931611756565b6000918252602090912001546040517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201523060248201526044810184905273ffffffffffffffffffffffffffffffffffffffff909116906323b872dd906064016020604051808303816000875af11580156109b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109db9190611734565b50610aa1565b60006109fe856fffffffffffffffffffffffffffffffff16610ed1565b6040517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201523060248201526044810185905290915073ffffffffffffffffffffffffffffffffffffffff8216906323b872dd906064016020604051808303816000875af1158015610a7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a9e9190611734565b50505b60008085600f0b13610ab4576000610ab7565b60015b905060008085600f0b13610acc576000610acf565b60015b90506000610ade8383876108d5565b90506000610aed888888610507565b905084811015610b7f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f437572766556314d6f636b3a20494e53554646494349454e545f4f555450555460448201527f5f414d4f554e54000000000000000000000000000000000000000000000000006064820152608401610735565b86600f0b60001415610c49576002600081548110610b9f57610b9f611756565b6000918252602090912001546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201526024810183905273ffffffffffffffffffffffffffffffffffffffff9091169063a9059cbb906044016020604051808303816000875af1158015610c1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c439190611734565b50610da5565b6000610c66886fffffffffffffffffffffffffffffffff16610ed1565b60035490915073ffffffffffffffffffffffffffffffffffffffff16631a4d01d284610c9360018c61179e565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526004810192909252600f0b602482015260448101859052606401600060405180830381600087803b158015610cf357600080fd5b505af1158015610d07573d6000803e3d6000fd5b50506040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201526024810185905273ffffffffffffffffffffffffffffffffffffffff8416925063a9059cbb91506044016020604051808303816000875af1158015610d7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da29190611734565b50505b5050505050505050565b600081600f0b60001415610dd157600260008154811061067257610672611756565b60035473ffffffffffffffffffffffffffffffffffffffff1663c6610657610e0c60016fffffffffffffffffffffffffffffffff861661180f565b6040518263ffffffff1660e01b8152600401610e2a91815260200190565b602060405180830381865afa158015610e47573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105019190611826565b919050565b600f83810b60009081526004602090815260408083209386900b835292905220819055610ea96b033b2e3c9fd0803ce800000082611098565b600f92830b60009081526004602090815260408083209690950b825294909452919092205550565b600081610eec57600260008154811061067257610672611756565b60035473ffffffffffffffffffffffffffffffffffffffff1663c6610657610e0c60018561180f565b60006002828154811061067257610672611756565b600f81900b6000908152600660205260408120546b033b2e3c9fd0803ce800000090610f5690856116bc565b61055091906116f9565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526106469084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526111fe565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526110929085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401610fb2565b50505050565b60408051808201909152600281527f4d33000000000000000000000000000000000000000000000000000000000000602082015260009082611107576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073591906114af565b5060006111156002846116f9565b90506b033b2e3c9fd0803ce800000061114e827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61180f565b61115891906116f9565b8411156040518060400160405280600281526020017f4d31000000000000000000000000000000000000000000000000000000000000815250906111c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073591906114af565b5082816111e26b033b2e3c9fd0803ce8000000876116bc565b6111ec9190611843565b6111f691906116f9565b949350505050565b6000611260826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661130a9092919063ffffffff16565b805190915015610646578080602001905181019061127e9190611734565b610646576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610735565b606061054d848460008585843b61137d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610735565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516113a6919061185b565b60006040518083038185875af1925050503d80600081146113e3576040519150601f19603f3d011682016040523d82523d6000602084013e6113e8565b606091505b50915091506113f8828286611403565b979650505050505050565b60608315611412575081610550565b8251156114225782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073591906114af565b8035600f81900b8114610e6b57600080fd5b60006020828403121561147a57600080fd5b61055082611456565b60005b8381101561149e578181015183820152602001611486565b838111156110925750506000910152565b60208152600082518060208401526114ce816040850160208701611483565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b60008060006060848603121561151557600080fd5b61151e84611456565b925061152c60208501611456565b9150604084013590509250925092565b60008060006060848603121561155157600080fd5b8335925061152c60208501611456565b6000806000806080858703121561157757600080fd5b61158085611456565b935061158e60208601611456565b93969395505050506040820135916060013590565b6000602082840312156115b557600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff811681146115de57600080fd5b50565b6000602082840312156115f357600080fd5b8135610550816115bc565b6000806040838503121561161157600080fd5b61161a83611456565b946020939093013593505050565b6000806040838503121561163b57600080fd5b8235915061164b60208401611456565b90509250929050565b6000806040838503121561166757600080fd5b8235611672816115bc565b91506020830135611682816115bc565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156116f4576116f461168d565b500290565b60008261172f577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60006020828403121561174657600080fd5b8151801515811461055057600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561179757600080fd5b5051919050565b600081600f0b83600f0b60008112817fffffffffffffffffffffffffffffffff80000000000000000000000000000000018312811516156117e1576117e161168d565b816f7fffffffffffffffffffffffffffffff0183138116156118055761180561168d565b5090039392505050565b6000828210156118215761182161168d565b500390565b60006020828403121561183857600080fd5b8151610550816115bc565b600082198211156118565761185661168d565b500190565b6000825161186d818460208701611483565b919091019291505056fea264697066735822122003bb569820a08cb24f2e28d9f88e09bbb1ba6be2f41ea54f1d153e677b3aab3464736f6c634300080a003360a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a00336101806040523480156200001257600080fd5b5060405162001982380380620019828339810160408190526200003591620003bc565b6000805460ff191690558686828260c882826001600160a01b0381166200006f57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000ae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d491906200050b565b6001600160a01b0316608052508051620000f6906002906020840190620002e3565b505060a052506001600160a01b0382166200012457604051635919af9760e11b815260040160405180910390fd5b6001600160a01b03821660c0819052670de0b6b3a764000060e05260408051630176f71760e71b815290516000929163bb7b8b809160048083019260209291908290030181865afa1580156200017e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001a4919062000530565b9050620001b18162000243565b505050506001600160a01b0385161580620001d357506001600160a01b038416155b80620001e657506001600160a01b038316155b80620001f957506001600160a01b038216155b156200021857604051635919af9760e11b815260040160405180910390fd5b506001600160a01b039384166101005291831661012052821661014052166101605250620005fd9050565b8062000262576040516309aadd6f60e41b815260040160405180910390fd5b60018190557f82e7ee47180a631312683eeb2a85ad264c9af490d54de5a75bbdb95b968c6de2816200029481620002af565b6040805192835260208301919091520160405180910390a150565b60a05160009061271090620002c5908262000560565b620002d190846200057b565b620002dd91906200059d565b92915050565b828054620002f190620005c0565b90600052602060002090601f01602090048101928262000315576000855562000360565b82601f106200033057805160ff191683800117855562000360565b8280016001018555821562000360579182015b828111156200036057825182559160200191906001019062000343565b506200036e92915062000372565b5090565b5b808211156200036e576000815560010162000373565b80516001600160a01b0381168114620003a157600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600080600080600080600060e0888a031215620003d857600080fd5b620003e38862000389565b96506020620003f4818a0162000389565b96506200040460408a0162000389565b95506200041460608a0162000389565b94506200042460808a0162000389565b93506200043460a08a0162000389565b60c08a01519093506001600160401b03808211156200045257600080fd5b818b0191508b601f8301126200046757600080fd5b8151818111156200047c576200047c620003a6565b604051601f8201601f19908116603f01168101908382118183101715620004a757620004a7620003a6565b816040528281528e86848701011115620004c057600080fd5b600093505b82841015620004e45784840186015181850187015292850192620004c5565b82841115620004f65760008684830101525b80965050505050505092959891949750929550565b6000602082840312156200051e57600080fd5b620005298262000389565b9392505050565b6000602082840312156200054357600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156200057657620005766200054a565b500190565b60008160001904831182151516156200059857620005986200054a565b500290565b600082620005bb57634e487b7160e01b600052601260045260246000fd5b500490565b600181811c90821680620005d557607f821691505b60208210811415620005f757634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c05160e051610100516101205161014051610160516112d9620006a96000396000818161029b01526109b901526000818161024001526108fa0152600081816103b5015261083b01526000818161036b01526107940152600081816103440152610b160152600081816101bb0152610a7a0152600081816101810152610d0801526000818161031d0152818161040d0152818161058901526106c101526112d96000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80638456cb59116100d8578063ab0ca0e11161008c578063d62ada1111610066578063d62ada11146103a8578063e5693f41146103b0578063feaf968c146103d757600080fd5b8063ab0ca0e114610366578063b09ad8a01461038d578063bc489a651461039557600080fd5b8063a384d6ff116100bd578063a384d6ff1461030f578063a50cf2c814610318578063a834559e1461033f57600080fd5b80638456cb59146102bd5780639a6fc8f5146102c557600080fd5b8063427cb6fe1161012f5780635c975abb116101145780635c975abb1461026a5780637284e416146102815780637aac1c481461029657600080fd5b8063427cb6fe1461023b57806354fd4d501461026257600080fd5b8063313ce56711610160578063313ce567146102025780633f4ba83a1461021c5780633fd0875f1461022657600080fd5b806312b495a81461017c578063218751b2146101b6575b600080fd5b6101a37f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b6101dd7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101ad565b61020a600881565b60405160ff90911681526020016101ad565b6102246103df565b005b61022e600481565b6040516101ad9190610ec8565b6101dd7f000000000000000000000000000000000000000000000000000000000000000081565b6101a3600181565b60005460ff165b60405190151581526020016101ad565b6102896104cd565b6040516101ad9190610f09565b6101dd7f000000000000000000000000000000000000000000000000000000000000000081565b61022461055b565b6102d86102d3366004610f94565b610647565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a0016101ad565b6101a360015481565b6101dd7f000000000000000000000000000000000000000000000000000000000000000081565b6101a37f000000000000000000000000000000000000000000000000000000000000000081565b6101dd7f000000000000000000000000000000000000000000000000000000000000000081565b6101a3610681565b6102246103a3366004610fb8565b610693565b610271600181565b6101dd7f000000000000000000000000000000000000000000000000000000000000000081565b6102d8610783565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa158015610469573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048d9190610fd1565b6104c3576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104cb610b58565b565b600280546104da90610ff3565b80601f016020809104026020016040519081016040528092919081815260200182805461050690610ff3565b80156105535780601f1061052857610100808354040283529160200191610553565b820191906000526020600020905b81548152906001019060200180831161053657829003601f168201915b505050505081565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa1580156105e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106099190610fd1565b61063f576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104cb610c3e565b60008060008060006040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061068e600154610cfe565b905090565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561071d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107419190610fd1565b610777576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61078081610d47565b50565b6000806000806000806000806000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156107fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108219190611047565b939d50919b509950975095506108398a8a8989610dc9565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156108a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c89190611047565b9398509196509450925090506108e085858484610dc9565b888412156108f8578499508398508297508196508095505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610963573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109879190611047565b93985091965094509250905061099f85858484610dc9565b888412156109b7578499508398508297508196508095505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610a22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a469190611047565b939850919650945092509050610a5e85858484610dc9565b88841215610a76578499508398508297508196508095505b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb7b8b806040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ae3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b07919061109f565b9050610b1281610e64565b90507f0000000000000000000000000000000000000000000000000000000000000000610b3f828c6110e7565b610b4991906111d2565b99505050505050509091929394565b60005460ff16610bc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff1615610cab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bc0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610c143390565b6000612710610d2d7f00000000000000000000000000000000000000000000000000000000000000008261123a565b610d379084611252565b610d41919061128f565b92915050565b80610d7e576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190557f82e7ee47180a631312683eeb2a85ad264c9af490d54de5a75bbdb95b968c6de281610dae81610cfe565b6040805192835260208301919091520160405180910390a150565b60008313610e03576040517f56e05d2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8369ffffffffffffffffffff168169ffffffffffffffffffff161080610e27575081155b15610e5e576040517fb1cf675500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60015460009080831015610ea4576040517fb416da7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610eaf82610cfe565b905080841115610ec0579392505050565b509192915050565b6020810160068310610f03577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b600060208083528351808285015260005b81811015610f3657858101830151858201604001528201610f1a565b81811115610f48576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b69ffffffffffffffffffff8116811461078057600080fd5b600060208284031215610fa657600080fd5b8135610fb181610f7c565b9392505050565b600060208284031215610fca57600080fd5b5035919050565b600060208284031215610fe357600080fd5b81518015158114610fb157600080fd5b600181811c9082168061100757607f821691505b60208210811415611041577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600080600080600060a0868803121561105f57600080fd5b855161106a81610f7c565b80955050602086015193506040860151925060608601519150608086015161109181610f7c565b809150509295509295909350565b6000602082840312156110b157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615611128576111286110b8565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615611163576111636110b8565b6000871292508782058712848416161561117f5761117f6110b8565b87850587128184161615611195576111956110b8565b505050929093029392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826111e1576111e16111a3565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615611235576112356110b8565b500590565b6000821982111561124d5761124d6110b8565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561128a5761128a6110b8565b500290565b60008261129e5761129e6111a3565b50049056fea26469706673582212201ac3e66d7646fe6cc19eeb98703f28a4e57d890bef3635f1ed53ec7a4ea130d864736f6c634300080a00336102606040523480156200001257600080fd5b5060405162005f7e38038062005f7e833981016040819052620000359162000ba4565b83838383600284846001600160a01b03821615806200005b57506001600160a01b038116155b156200007a57604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038216608081905260408051632f7a188160e01b81529051632f7a1881916004808201926020929091908290030181865afa158015620000c5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000eb919062000c01565b6001600160a01b0390811660a05290811660c05260016000558416151590506200012857604051635919af9760e11b815260040160405180910390fd5b608051604051630f67c5bd60e41b81526001600160a01b0385811660048301529091169063f67c5bd090602401602060405180830381865afa15801562000173573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000199919062000c26565b620001c757604051634c607af960e11b81526001600160a01b03841660048201526024015b60405180910390fd5b6001600160a01b038084166101e081905261020052821661022052610240819052620001f460006200090a565b6001600160a01b031660e0526200020c60016200090a565b6001600160a01b0316610100526200022560026200090a565b6001600160a01b0316610120526200023e60036200090a565b6001600160a01b031661014052620002576000620009fd565b6001600160a01b031661016052620002706001620009fd565b6001600160a01b031661018052620002896002620009fd565b6001600160a01b03166101a052620002a26003620009fd565b6001600160a01b039081166101c05260e051161580620002cc5750610100516001600160a01b0316155b15620002eb57604051635919af9760e11b815260040160405180910390fd5b600281118015620003065750610120516001600160a01b0316155b156200032557604051635919af9760e11b815260040160405180910390fd5b600381118015620003405750610140516001600160a01b0316155b156200035f57604051635919af9760e11b815260040160405180910390fd5b60805160e051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620003ac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003d2919062000c26565b620004005760e051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b60805161010051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa1580156200044e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000474919062000c26565b620004a35761010051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b60028111801562000525575060805161012051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620004fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000523919062000c26565b155b15620005555761012051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b600381118015620005d7575060805161014051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620005af573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005d5919062000c26565b155b15620006075761014051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b610160516001600160a01b03161580159062000694575060805161016051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa1580156200066c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000692919062000c26565b155b15620006c45761016051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b610180516001600160a01b03161580159062000751575060805161018051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa15801562000729573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200074f919062000c26565b155b15620007815761018051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b6101a0516001600160a01b0316158015906200080e57506080516101a051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620007e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200080c919062000c26565b155b156200083e576101a051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b6101c0516001600160a01b031615801590620008cb57506080516101c051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620008a3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008c9919062000c26565b155b15620008fb576101c051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b50505050505050505062000c66565b60c05160405163c661065760e01b8152600481018390526000916001600160a01b03169063c661065790602401602060405180830381865afa92505050801562000973575060408051601f3d908101601f19168201909252620009709181019062000c01565b60015b6200097e5762000984565b92915050565b60c05160405163046e8dd760e31b8152600f84900b60048201526001600160a01b03909116906323746eb8906024015b602060405180830381865afa925050508015620009f0575060408051601f3d908101601f19168201909252620009ed9181019062000c01565b60015b6200097e57506000919050565b610220516000906001600160a01b03161562000a1e576200097e8262000ac0565b60c051604051630b9947eb60e41b8152600481018490526001600160a01b039091169063b9947eb090602401602060405180830381865afa92505050801562000a86575060408051601f3d908101601f1916820190925262000a839181019062000c01565b60015b6200097e5760c051604051635b9cca9f60e11b8152600f84900b60048201526001600160a01b039091169063b739953e90602401620009b4565b60008162000ad4576200097e600062000b17565b610220516001600160a01b031663c661065762000af360018562000c40565b6040518263ffffffff1660e01b8152600401620009b491815260200190565b919050565b600081600f0b6000141562000b2b575060e0515b81600f0b6001141562000b3e5750610100515b81600f0b6002141562000b515750610120515b81600f0b6003141562000b645750610140515b6001600160a01b03811662000b12576040516334769e6f60e21b815260040160405180910390fd5b80516001600160a01b038116811462000b1257600080fd5b6000806000806080858703121562000bbb57600080fd5b62000bc68562000b8c565b935062000bd66020860162000b8c565b925062000be66040860162000b8c565b915062000bf66060860162000b8c565b905092959194509250565b60006020828403121562000c1457600080fd5b62000c1f8262000b8c565b9392505050565b60006020828403121562000c3957600080fd5b5051919050565b60008282101562000c6157634e487b7160e01b600052601160045260246000fd5b500390565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e051610200516102205161024051614f9b62000fe36000396000818161077001528181613503015281816135f501528181613735015281816138ec0152613a06015260006105f101526000818161068801528181611ec70152818161238c015281816126b3015281816129580152818161303a01526130d8015260006108a701526000818161059c0152612a5a0152600081816103d40152612a2b01526000818161061801526129fc0152600081816106af01526129cd015260008181610870015281816128320152818161365f01528181613f5e01526143f20152600081816104fd015281816128030152818161356d01528181613e8e01526142d60152600081816107da015281816127d40152818161347901528181613dbe01526141ba01526000818161045d015281816127a5015281816133ad01528181613cee015261409e01526000818161072201528181610914015281816109e101528181610a7101528181610b6901528181610cd601528181610d5301528181610dea01528181610e7a0152818161128801528181611300015281816114d801528181611572015281816115ba015281816116e101528181611729015281816117da0152818161180f01528181611af801528181611bef01528181611c6701528181611d0c01528181611f1101528181611fc901528181611ffe015281816120990152818161240d01528181612448015281816124b50152818161254601528181612c7801528181612d9701528181612e710152818161407601528181614192015281816142ae015281816143ca015261451201526000818161052401528181612ae3015281816145b90152614693015260008181610749015281816110180152818161191a01528181611e5301528181612232015281816125e0015281816126db015281816128d001528181612cce01528181612d6801528181612ec701528181612f6f01528181613231015281816132e8015281816133d8015281816134a1015281816135950152818161368701528181613c2101528181613d1601528181613de601528181613eb601528181613f86015281816140ec015281816142080152818161432401528181614440015281816144e3015281816146230152818161471b015281816147cf01526148790152614f9b6000f3fe608060405234801561001057600080fd5b50600436106103a45760003560e01c806378aa73a4116101e9578063ce30bbdb1161010f578063e3103273116100ad578063f446c1d01161007c578063f446c1d014610892578063f851a4401461089a578063fc0c546a146108a2578063fee3f7f9146108c957600080fd5b8063e310327314610832578063ec026ca714610845578063ed8e84f314610858578063ef14101e1461086b57600080fd5b8063d96c7fce116100e9578063d96c7fce146107fc578063dd62ed3e14610804578063ddca3f4314610817578063e2e7d2641461081f57600080fd5b8063ce30bbdb146107b3578063cf023dd0146107c2578063d21220a7146107d557600080fd5b8063b739953e11610187578063c12c21c011610156578063c12c21c014610744578063c21ee1621461076b578063c661065714610792578063cc2b27d7146107a057600080fd5b8063b739953e146106f4578063b9947eb014610707578063bb7b8b8014610715578063bd90df701461071d57600080fd5b80638ba51dfc116101c35780638ba51dfc146106aa57806395d89b41146106d1578063a6417ed6146106d9578063b4b577ad146106ec57600080fd5b806378aa73a41461065557806379bea6641461067057806382c630661461068357600080fd5b80632f7a1881116102ce57806357d788751161026c57806364a89bca1161023b57806364a89bca146105ec5780636e1d82711461061357806370a082311461063a57806376a2f0f01461064d57600080fd5b806357d78875146105975780635b36389c146105be5780635e0d443f146105d157806363543f06146105e457600080fd5b80633df02124116102a85780633df02124146105615780634469e30e146105745780634903b0d11461057c5780635409491a1461058f57600080fd5b80632f7a18811461051f578063313ce5671461054657806333d2ebf21461054e57600080fd5b806314052288116103465780631af4de83116103155780631af4de83146104ca5780632081066c146104dd57806323746eb8146104e557806325be124e146104f857600080fd5b8063140522881461049f57806314f05979146104a757806318160ddd146104af5780631a4d01d2146104b757600080fd5b806307211ef71161038257806307211ef7146104305780630b4c7e4d146104435780630dfe1681146104585780630f6ba8e31461047f57600080fd5b8063065a80d8146103a957806306871163146103cf57806306fdde031461041b575b600080fd5b6103bc6103b736600461490d565b6108d1565b6040519081526020015b60405180910390f35b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016103c6565b610423610a6d565b6040516103c6919061499e565b6103bc61043e3660046149b1565b610b25565b6104566104513660046149fe565b610bf4565b005b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b61049261048d366004614a29565b610c91565b6040516103c69190614a67565b6103bc610d4f565b610492610de0565b6103bc610e76565b6104566104c5366004614a98565b610ee3565b6104566104d83660046149b1565b610f76565b6103bc611284565b6103f66104f336600461490d565b6112f1565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc6112fc565b61045661055c366004614abd565b611369565b61045661056f366004614ae7565b6113fd565b6104926114ce565b6103bc61058a366004614b29565b611540565b6103bc6115b6565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6104566105cc366004614b42565b611623565b6103bc6105df3660046149b1565b61169d565b6103bc611725565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc610648366004614b91565b611792565b6103bc61180b565b61065d600281565b60405161ffff90911681526020016103c6565b61045661067e3660046149b1565b611878565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b610423611af4565b6104566106e7366004614ae7565b611b61565b6103bc611beb565b6103f661070236600461490d565b611c58565b6103f6610702366004614b29565b6103bc611c63565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc7f000000000000000000000000000000000000000000000000000000000000000081565b6103f66104f3366004614b29565b6103bc6107ae366004614bae565b611cd0565b60056040516103c69190614bd1565b6104566107d0366004614a98565b611d8d565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b610492611f07565b6103bc610812366004614c12565b611f79565b6103bc611ffa565b6103bc61082d366004614b29565b612067565b6104566108403660046149fe565b6120dd565b610456610853366004614abd565b61216c565b6103bc610866366004614c4b565b6123cd565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc612444565b6103f66124b1565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc612542565b6040517f4903b0d10000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff821660048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634903b0d1906024015b602060405180830381865afa9250505080156109ab575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526109a891810190614c7d565b60015b610a62576040517f065a80d8000000000000000000000000000000000000000000000000000000008152600f83900b60048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063065a80d8906024015b602060405180830381865afa158015610a3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a629190614c7d565b92915050565b919050565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015610ada573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b209190810190614d57565b905090565b6040517f07211ef7000000000000000000000000000000000000000000000000000000008152600f84810b600483015283900b6024820152604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906307211ef7906064015b602060405180830381865afa158015610bc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bea9190614c7d565b90505b9392505050565b60026000541415610c66576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b60026000908155610c88906001843581109160208601359190911190806125af565b50506001600055565b610c996148dd565b6040517f0f6ba8e300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690630f6ba8e390610d0f90879087908790600401614da8565b6040805180830381865afa158015610d2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bea9190614dcf565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663140522886040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b209190614c7d565b610de86148dd565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166314f059796040518163ffffffff1660e01b81526004016040805180830381865afa158015610e52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b209190614dcf565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b60026000541415610f50576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b60026000908155610f6083612794565b9050610f6b8161289f565b505060016000555050565b60026000541415610fe3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611074573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110989190614e4f565b905060006110a5856129bc565b905060006110b2856129bc565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529192506000918416906370a0823190602401602060405180830381865afa158015611124573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111489190614c7d565b90506001811115611276577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce800000061118e8784614e6c565b6111989190614ed0565b604051600f8a810b602483015289900b60448201526064810184905260848101829052909150611273908690869086907fa6417ed6000000000000000000000000000000000000000000000000000000009060a4015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152600180612ac6565b50505b505060016000555050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632081066c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b6000610a6282612794565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b600260005414156113d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b600260009081556113e683612794565b90506113f3838284612f3e565b5050600160005550565b6002600054141561146a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b6002600090815561147a85612794565b9050600061148785612794565b905061127682826000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052506001935091506131e89050565b6114d66148dd565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16634469e30e6040518163ffffffff1660e01b81526004016040805180830381865afa158015610e52573d6000803e3d6000fd5b6040517f4903b0d1000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634903b0d190602401610954565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635409491a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b60026000541415611690576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b6002600055610c886132b7565b6040517f5e0d443f000000000000000000000000000000000000000000000000000000008152600f84810b600483015283900b6024820152604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635e0d443f90606401610ba9565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166363543f066040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401610a21565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166376a2f0f06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b600260005414156118e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611976573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061199a9190614e4f565b905060006119a785612794565b905060006119b485612794565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529192506000918416906370a0823190602401602060405180830381865afa158015611a26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a4a9190614c7d565b90506001811115611276577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce8000000611a908784614e6c565b611a9a9190614ed0565b604051600f8a810b602483015289900b60448201526064810184905260848101829052909150611273908690869086907f3df02124000000000000000000000000000000000000000000000000000000009060a4016111ee565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610ada573d6000803e3d6000fd5b60026000541415611bce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b60026000908155611bde856129bc565b90506000611487856129bc565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b4b577ad6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b6000610a62826129bc565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb7b8b806040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b6040517fcc2b27d700000000000000000000000000000000000000000000000000000000815260048101839052600f82900b60248201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063cc2b27d7906044015b602060405180830381865afa158015611d69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bed9190614c7d565b60026000541415611dfa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b60026000908155611e0a83612794565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611e9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ebe9190614e4f565b9050611efa81837f0000000000000000000000000000000000000000000000000000000000000000611ef1888a89613731565b60016000612ac6565b5050600160005550505050565b611f0f6148dd565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d96c7fce6040518163ffffffff1660e01b81526004016040805180830381865afa158015610e52573d6000803e3d6000fd5b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063dd62ed3e90604401611d4c565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b6040517fe2e7d264000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e2e7d26490602401610a21565b6002600054141561214a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b60026000908155610c8890600184358110916020860135919091119080613bf0565b600260005414156121d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b600260009081556121e983612794565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015612279573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061229d9190614e4f565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000918416906370a0823190602401602060405180830381865afa15801561230f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123339190614c7d565b905060018111156123c1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce80000006123798684614e6c565b6123839190614ed0565b90506123be83857f00000000000000000000000000000000000000000000000000000000000000006123b68a8787613731565b600180612ac6565b50505b50506001600055505050565b6040517fed8e84f300000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063ed8e84f390611d4c9086908690600401614f0b565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f446c1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa15801561251e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b209190614e4f565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fee3f7f96040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbc573d6000803e3d6000fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa15801561263c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126609190614e4f565b905061266e8585858561402d565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561271f57600080fd5b505af1158015612733573d6000803e3d6000fd5b505050506127776000368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506144a392505050565b506127848585858561402d565b61278d816145a1565b5050505050565b600081600f0b600014156127c557507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b600114156127f457507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6002141561282357507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6003141561285257507f00000000000000000000000000000000000000000000000000000000000000005b73ffffffffffffffffffffffffffffffffffffffff8116610a68576040517fd1da79bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa15801561292c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129509190614e4f565b90506129b7817f0000000000000000000000000000000000000000000000000000000000000000846000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509250829150612ac69050565b505050565b600081600f0b600014156129ed57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b60011415612a1c57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b60021415612a4b57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6003141561285257507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff8116610a68576040517fd1da79bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606000803373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614612c2f576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301528916906370a0823190602401602060405180830381865afa158015612b74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b989190614c7d565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152919350908816906370a0823190602401602060405180830381865afa158015612c08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c2c9190614c7d565b90505b8415612d2b576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612d1257600080fd5b505af1158015612d26573d6000803e3d6000fd5b505050505b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a90612dc19033907f0000000000000000000000000000000000000000000000000000000000000000908b90600401614f23565b6000604051808303816000875af1158015612de0573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052612e269190810190614d57565b92508415612f24576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612f0b57600080fd5b505af1158015612f1f573d6000803e3d6000fd5b505050505b612f3289898985858961467b565b50509695505050505050565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612fcb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fef9190614e4f565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000917f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015613081573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130a59190614c7d565b9050600181111561278d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016131e0827f0000000000000000000000000000000000000000000000000000000000000000867f1a4d01d200000000000000000000000000000000000000000000000000000000858a6b033b2e3c9fd0803ce80000006131328b84614e6c565b61313c9190614ed0565b6040516024810193909352600f9190910b60448301526064820152608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915260006001612ac6565b505050505050565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015260609060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015613278573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061329c9190614e4f565b90506132ac818888888888612ac6565b979650505050505050565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015613344573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133689190614e4f565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301529192507f0000000000000000000000000000000000000000000000000000000000000000909116906351e3f16090604401600060405180830381600087803b15801561341e57600080fd5b505af1158015613432573d6000803e3d6000fd5b50506040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f00000000000000000000000000000000000000000000000000000000000000001692506351e3f1609150604401600060405180830381600087803b1580156134e757600080fd5b505af11580156134fb573d6000803e3d6000fd5b5050505060027f000000000000000000000000000000000000000000000000000000000000000011156136e4576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156135d957600080fd5b505af11580156135ed573d6000803e3d6000fd5b5050505060037f000000000000000000000000000000000000000000000000000000000000000011156136e4576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156136cb57600080fd5b505af11580156136df573d6000803e3d6000fd5b505050505b6137246000368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506144a392505050565b5061372e816145a1565b50565b60607f0000000000000000000000000000000000000000000000000000000000000000600214156138ea5783600f0b600014613827576040516000602482015260448101849052606481018390527f0b4c7e4d00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526138e3565b6040516024810184905260006044820152606481018390527f0b4c7e4d00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091525b9050610bed565b7f000000000000000000000000000000000000000000000000000000000000000060031415613a045783600f0b6000146139bb5783600f0b60011461397257604051600060248201819052604482015260648101849052608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a4016137a5565b604051600060248201819052604482018590526064820152608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a4016137a5565b604051602481018490526000604482018190526064820152608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401613865565b7f000000000000000000000000000000000000000000000000000000000000000060041415613b8e5783600f0b600014613b3e5783600f0b600114613aee5783600f0b600214613a9e576040516000602482018190526044820181905260648201526084810184905260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c4016137a5565b6040516000602482018190526044820181905260648201859052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c4016137a5565b6040516000602482018190526044820185905260648201819052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c4016137a5565b6040516024810184905260006044820181905260648201819052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613865565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f496e636f7272656374206e436f696e73000000000000000000000000000000006044820152606401610c5d565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015613c7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ca19190614e4f565b90508415613d73576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015613d5a57600080fd5b505af1158015613d6e573d6000803e3d6000fd5b505050505b8315613e43576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015613e2a57600080fd5b505af1158015613e3e573d6000803e3d6000fd5b505050505b8215613f13576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015613efa57600080fd5b505af1158015613f0e573d6000803e3d6000fd5b505050505b8115613fe3576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015613fca57600080fd5b505af1158015613fde573d6000803e3d6000fd5b505050505b6140236000368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506144a392505050565b5061278d816145a1565b8315614149576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561413057600080fd5b505af1158015614144573d6000803e3d6000fd5b505050505b8215614265576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561424c57600080fd5b505af1158015614260573d6000803e3d6000fd5b505050505b8115614381576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561436857600080fd5b505af115801561437c573d6000803e3d6000fd5b505050505b801561449d576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561448457600080fd5b505af1158015614498573d6000803e3d6000fd5b505050505b50505050565b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815260609073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a9061453c9033907f0000000000000000000000000000000000000000000000000000000000000000908790600401614f23565b6000604051808303816000875af115801561455b573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610a629190810190614d57565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461372e576040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b15801561466757600080fd5b505af115801561278d573d6000803e3d6000fd5b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461477c576040517f654a9eda00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528681166024830152858116604483015260648201859052608482018490527f0000000000000000000000000000000000000000000000000000000000000000169063654a9eda9060a401600060405180830381600087803b15801561475f57600080fd5b505af1158015614773573d6000803e3d6000fd5b505050506131e0565b801561482c576040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015286811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b15801561481357600080fd5b505af1158015614827573d6000803e3d6000fd5b505050505b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015285811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156148bd57600080fd5b505af11580156148d1573d6000803e3d6000fd5b50505050505050505050565b60405180604001604052806002906020820280368337509192915050565b8035600f81900b8114610a6857600080fd5b60006020828403121561491f57600080fd5b610bed826148fb565b60005b8381101561494357818101518382015260200161492b565b8381111561449d5750506000910152565b6000815180845261496c816020860160208601614928565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610bed6020830184614954565b6000806000606084860312156149c657600080fd5b6149cf846148fb565b92506149dd602085016148fb565b9150604084013590509250925092565b8060408101831015610a6257600080fd5b60008060608385031215614a1157600080fd5b614a1b84846149ed565b946040939093013593505050565b600080600060a08486031215614a3e57600080fd5b614a4885856149ed565b9250614a5785604086016149ed565b9150608084013590509250925092565b60408101818360005b6002811015614a8f578151835260209283019290910190600101614a70565b50505092915050565b600080600060608486031215614aad57600080fd5b833592506149dd602085016148fb565b60008060408385031215614ad057600080fd5b614ad9836148fb565b946020939093013593505050565b60008060008060808587031215614afd57600080fd5b614b06856148fb565b9350614b14602086016148fb565b93969395505050506040820135916060013590565b600060208284031215614b3b57600080fd5b5035919050565b60008060608385031215614b5557600080fd5b82359150614b6684602085016149ed565b90509250929050565b73ffffffffffffffffffffffffffffffffffffffff8116811461372e57600080fd5b600060208284031215614ba357600080fd5b8135610bed81614b6f565b60008060408385031215614bc157600080fd5b82359150614b66602084016148fb565b6020810160118310614c0c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60008060408385031215614c2557600080fd5b8235614c3081614b6f565b91506020830135614c4081614b6f565b809150509250929050565b60008060608385031215614c5e57600080fd5b614c6884846149ed565b915060408301358015158114614c4057600080fd5b600060208284031215614c8f57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff80841115614ce057614ce0614c96565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715614d2657614d26614c96565b81604052809350858152868686011115614d3f57600080fd5b614d4d866020830187614928565b5050509392505050565b600060208284031215614d6957600080fd5b815167ffffffffffffffff811115614d8057600080fd5b8201601f81018413614d9157600080fd5b614da084825160208401614cc5565b949350505050565b60a08101604085833760408201600081526040858237506080919091019190915292915050565b600060408284031215614de157600080fd5b82601f830112614df057600080fd5b6040516040810181811067ffffffffffffffff82111715614e1357614e13614c96565b8060405250806040840185811115614e2a57600080fd5b845b81811015614e44578051835260209283019201614e2c565b509195945050505050565b600060208284031215614e6157600080fd5b8151610bed81614b6f565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ecb577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500290565b600082614f06577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60608101604084833791151560409190910152919050565b600073ffffffffffffffffffffffffffffffffffffffff808616835280851660208401525060606040830152614f5c6060830184614954565b9594505050505056fea26469706673582212205dd1b4208756e7993c5cfaf271be99123f9b37ebc97bdd8fd152eac9cd1e945564736f6c634300080a0033608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6113dd8061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c80639b17fa6f116100505780639b17fa6f146100cf578063cc06dd33146100e2578063f2fde38b1461010257600080fd5b8063715018a6146100775780638da5cb5b14610081578063901d1145146100ae575b600080fd5b61007f610115565b005b60005460405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6100c16100bc366004610f9a565b6101a7565b6040516100a59291906110a5565b6100c16100dd366004610f9a565b6101d1565b6100f56100f03660046111de565b6101dd565b6040516100a59190611235565b61007f61011036600461128f565b61048a565b60005473ffffffffffffffffffffffffffffffffffffffff16331461019b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6101a560006105ba565b565b60608060006101b78560016101dd565b90506101c486828661062f565b9250925050935093915050565b60608060006101b78560005b81516060908067ffffffffffffffff8111156101fb576101fb610d55565b604051908082528060200260200182016040528015610224578160200160208202803683370190505b5091506000805b82811015610465576000868281518110610247576102476112b3565b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561028c575061045d565b60008173ffffffffffffffffffffffffffffffffffffffff1663ce30bbdb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102fd91906112e2565b9050600581601081111561031357610313611303565b14806103305750600681601081111561032e5761032e611303565b145b8061034c5750600781601081111561034a5761034a611303565b145b806103685750600881601081111561036657610366611303565b145b1561045a5760008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff166364a89bca6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103f59190611332565b73ffffffffffffffffffffffffffffffffffffffff1614159050871515811415610458578287868151811061042c5761042c6112b3565b73ffffffffffffffffffffffffffffffffffffffff909216602092830291909101909101526001909401935b505b50505b60010161022b565b508181101561048157610478838261080f565b92505050610484565b50505b92915050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461050b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610192565b73ffffffffffffffffffffffffffffffffffffffff81166105ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610192565b6105b7816105ba565b50565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b8151606090819060008167ffffffffffffffff81111561065157610651610d55565b60405190808252806020026020018201604052801561069757816020015b60408051808201909152600081526060602082015281526020019060019003908161066f5790505b5090506000805b838110156107f4576000806000806106d08d8d87815181106106c2576106c26112b3565b60200260200101518d6108c1565b935093509350935060008211156107e55760018d85815181106106f5576106f56112b3565b602002602001015160200181815250506107c08c868151811061071a5761071a6112b3565b60209081029190910101516040517f23746eb8000000000000000000000000000000000000000000000000000000008152600f86900b600482015273ffffffffffffffffffffffffffffffffffffffff909116906323746eb890602401602060405180830381865afa158015610794573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107b89190611332565b8e9084610b1a565b808787815181106107d3576107d36112b3565b60200260200101819052508560010195505b8460010194505050505061069e565b50876108008383610b56565b94509450505050935093915050565b60608167ffffffffffffffff81111561082a5761082a610d55565b604051908082528060200260200182016040528015610853578160200160208202803683370190505b50905060005b828110156108ba57838181518110610873576108736112b3565b602002602001015182828151811061088d5761088d6112b3565b73ffffffffffffffffffffffffffffffffffffffff90921660209283029190910190910152600101610859565b5092915050565b60008060006108f96040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001606081525090565b60008673ffffffffffffffffffffffffffffffffffffffff166382c630666040518163ffffffff1660e01b8152600401602060405180830381865afa158015610946573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061096a9190611332565b90506109768882610c04565b9450600188868151811061098c5761098c6112b3565b6020026020010151602001511115610b10576109a88682610cbc565b93508673ffffffffffffffffffffffffffffffffffffffff1663cc2b27d78987815181106109d8576109d86112b3565b602002602001015160200151866040518363ffffffff1660e01b8152600401610a0e929190918252600f0b602082015260400190565b602060405180830381865afa158015610a2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4f919061134f565b92506001888681518110610a6557610a656112b3565b60209081029190910181015181019190915260408051808201825273ffffffffffffffffffffffffffffffffffffffff8a1681528151600f88900b6024820152600060448083019190915283518083039091018152606490910190925281830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f33d2ebf2000000000000000000000000000000000000000000000000000000001790529182015291505b5093509350935093565b8083610b268585610c04565b81518110610b3657610b366112b3565b6020026020010151602001818151610b4e9190611368565b905250505050565b60608167ffffffffffffffff811115610b7157610b71610d55565b604051908082528060200260200182016040528015610bb757816020015b604080518082019091526000815260606020820152815260200190600190039081610b8f5790505b50905060005b828110156108ba57838181518110610bd757610bd76112b3565b6020026020010151828281518110610bf157610bf16112b3565b6020908102919091010152600101610bbd565b6000805b8351811015610c71578273ffffffffffffffffffffffffffffffffffffffff16848281518110610c3a57610c3a6112b3565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff161415610c69579050610484565b600101610c08565b506040517f81a3b1be00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83166004820152602401610192565b6000805b8351811015610d4b578273ffffffffffffffffffffffffffffffffffffffff16848281518110610cf257610cf26112b3565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff161415610d4357838181518110610d2c57610d2c6112b3565b60200260200101516020015160ff16915050610484565b600101610cc0565b5060009392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715610da757610da7610d55565b60405290565b6040805190810167ffffffffffffffff81118282101715610da757610da7610d55565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715610e1757610e17610d55565b604052919050565b600067ffffffffffffffff821115610e3957610e39610d55565b5060051b60200190565b73ffffffffffffffffffffffffffffffffffffffff811681146105b757600080fd5b600082601f830112610e7657600080fd5b81356020610e8b610e8683610e1f565b610dd0565b82815260059290921b84018101918181019086841115610eaa57600080fd5b8286015b84811015610ece578035610ec181610e43565b8352918301918301610eae565b509695505050505050565b803560ff81168114610eea57600080fd5b919050565b600082601f830112610f0057600080fd5b81356020610f10610e8683610e1f565b82815260609283028501820192828201919087851115610f2f57600080fd5b8387015b85811015610f8d5781818a031215610f4b5760008081fd5b610f53610d84565b8135610f5e81610e43565b8152610f6b828701610ed9565b868201526040610f7c818401610ed9565b908201528452928401928101610f33565b5090979650505050505050565b600080600060608486031215610faf57600080fd5b833567ffffffffffffffff80821115610fc757600080fd5b818601915086601f830112610fdb57600080fd5b81356020610feb610e8683610e1f565b82815260069290921b8401810191818101908a84111561100a57600080fd5b948201945b83861015611056576040868c0312156110285760008081fd5b611030610dad565b863561103b81610e43565b8152868401358482015282526040909501949082019061100f565b9750508701359250508082111561106c57600080fd5b61107887838801610e65565b9350604086013591508082111561108e57600080fd5b5061109b86828701610eef565b9150509250925092565b6040808252835182820181905260009190606090818501906020808901865b838110156110ff578151805173ffffffffffffffffffffffffffffffffffffffff1686528301518386015293860193908201906001016110c4565b50508683038188015287518084528184019250600581901b8401820189830160005b838110156111cd577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe080888503018752825173ffffffffffffffffffffffffffffffffffffffff81511685528681015190508a878601528051808c87015260005b8181101561119d578281018901518782018d01528801611182565b818111156111ae5760008c83890101525b5097870197601f01909116939093018801925090840190600101611121565b50909b9a5050505050505050505050565b600080604083850312156111f157600080fd5b823567ffffffffffffffff81111561120857600080fd5b61121485828601610e65565b9250506020830135801515811461122a57600080fd5b809150509250929050565b6020808252825182820181905260009190848201906040850190845b8181101561128357835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101611251565b50909695505050505050565b6000602082840312156112a157600080fd5b81356112ac81610e43565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000602082840312156112f457600080fd5b8151601181106112ac57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60006020828403121561134457600080fd5b81516112ac81610e43565b60006020828403121561136157600080fd5b5051919050565b600082198211156113a2577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b50019056fea264697066735822122007a21f86b7b83416fac922b7fad648d880d7ed3a37662a6bdd344da6d4b5f88764736f6c634300080a0033608060405234801561001057600080fd5b50611a3c806100206000396000f3fe6080604052600436106101a15760003560e01c806385f8c259116100e1578063baa2abde1161008a578063ded9382a11610064578063ded9382a14610424578063e8e3370014610451578063f305d7191461049a578063fb3bdb41146104b957600080fd5b8063baa2abde146103da578063c45a015514610382578063d06ca61f1461040457600080fd5b8063ad615dec116100bb578063ad615dec146101e9578063af2979eb1461039e578063b6f9de95146103c557600080fd5b806385f8c259146101e95780638803dbee14610362578063ad5c46481461038257600080fd5b806338ed17391161014e5780635b0d5984116101285780635b0d5984146102fb5780635c11d79514610326578063791ac947146103265780637ff36ab51461034957600080fd5b806338ed1739146102b95780634a25d94a146102175780635911fb9a146102d957600080fd5b80631f00ca741161017f5780631f00ca741461024b5780632195995c1461026b578063379b87ea1461029957600080fd5b806302751cec146101a6578063054d50d4146101e957806318cbafe514610217575b600080fd5b3480156101b257600080fd5b506101cf6101c13660046112b8565b600080965096945050505050565b604080519283526020830191909152015b60405180910390f35b3480156101f557600080fd5b50610209610204366004611310565b6104cc565b6040519081526020016101e0565b34801561022357600080fd5b5061023e610232366004611388565b60609695505050505050565b6040516101e091906113f8565b34801561025757600080fd5b5061023e61026636600461143c565b6104d6565b34801561027757600080fd5b506101cf6102863660046114aa565b6000809b509b9950505050505050505050565b3480156102a557600080fd5b506102096102b436600461154e565b610728565b3480156102c557600080fd5b5061023e6102d4366004611388565b6107c6565b3480156102e557600080fd5b506102f96102f4366004611581565b6109a6565b005b34801561030757600080fd5b506102096103163660046115bd565b60009a9950505050505050505050565b34801561033257600080fd5b506102f9610341366004611388565b505050505050565b61023e61035736600461164f565b606095945050505050565b34801561036e57600080fd5b5061023e61037d366004611388565b610a28565b34801561038e57600080fd5b50604051600081526020016101e0565b3480156103aa57600080fd5b506102096103b93660046112b8565b60009695505050505050565b6102f96103d336600461164f565b5050505050565b3480156103e657600080fd5b506101cf6103f53660046116b5565b60008097509795505050505050565b34801561041057600080fd5b5061023e61041f36600461143c565b610b7e565b34801561043057600080fd5b506101cf61043f3660046115bd565b6000809a509a98505050505050505050565b34801561045d57600080fd5b5061047f61046c36600461171f565b6000806000985098509895505050505050565b604080519384526020840192909252908201526060016101e0565b61047f6104a83660046112b8565b600080600096509650969350505050565b61023e6104c736600461164f565b610d65565b60005b9392505050565b60606002821015610548576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f496e636f72726563742070617468206c656e677468000000000000000000000060448201526064015b60405180910390fd5b8167ffffffffffffffff81111561056157610561611793565b60405190808252806020026020018201604052801561058a578160200160208202803683370190505b509050838161059a6001856117f1565b815181106105aa576105aa611808565b602090810291909101015260006105c26001846117f1565b90505b801561072057600061062885856105dd6001866117f1565b8181106105ec576105ec611808565b90506020020160208101906106019190611837565b86868581811061061357610613611808565b90506020020160208101906102b49190611837565b905080610691576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f556e69737761704d6f636b3a2052617465206973206e6f742073657475700000604482015260640161053f565b6103e5816b033b2e3c9fd0803ce80000008585815181106106b4576106b4611808565b60200260200101516106c69190611852565b6106d0919061188f565b6106dc906103e8611852565b6106e6919061188f565b836106f26001856117f1565b8151811061070257610702611808565b60209081029190910101525080610718816118ca565b9150506105c5565b509392505050565b73ffffffffffffffffffffffffffffffffffffffff80831660009081526020818152604080832093851683529290522054806107c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f546f6b656e2070616972206e6f7420666f756e64000000000000000000000000604482015260640161053f565b92915050565b60608142811015610833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015260640161053f565b6000610840898888610b7e565b90506000816108506001896117f1565b8151811061086057610860611808565b60200260200101519050888110156108fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f556e69737761705632526f757465723a20494e53554646494349454e545f4f5560448201527f545055545f414d4f554e54000000000000000000000000000000000000000000606482015260840161053f565b61094633308c8b8b600081811061091357610913611808565b90506020020160208101906109289190611837565b73ffffffffffffffffffffffffffffffffffffffff16929190610d94565b61099986828a8a6109586001826117f1565b81811061096757610967611808565b905060200201602081019061097c9190611837565b73ffffffffffffffffffffffffffffffffffffffff169190610e76565b5098975050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152602081815260408083209386168352929052208190556109ef6b033b2e3c9fd0803ce800000082610ed1565b73ffffffffffffffffffffffffffffffffffffffff92831660009081526020818152604080832096909516825294909452919092205550565b60608142811015610a95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015260640161053f565b6000610aa28988886104d6565b9050600081600081518110610ab957610ab9611808565b6020026020010151905088811115610b53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f556e69737761705632526f757465723a204558434553534956455f494e50555460448201527f5f414d4f554e5400000000000000000000000000000000000000000000000000606482015260840161053f565b610b6c3330838b8b600081811061091357610913611808565b610999868b8a8a6109586001826117f1565b60606002821015610beb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f496e636f72726563742070617468206c656e6774680000000000000000000000604482015260640161053f565b8167ffffffffffffffff811115610c0457610c04611793565b604051908082528060200260200182016040528015610c2d578160200160208202803683370190505b5090508381600081518110610c4457610c44611808565b602090810291909101015260015b82811015610720576000610c6c85856105dd6001866117f1565b905080610cd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f556e69737761704d6f636b3a2052617465206973206e6f742073657475700000604482015260640161053f565b6103e86103e56b033b2e3c9fd0803ce80000008386610cf56001886117f1565b81518110610d0557610d05611808565b6020026020010151610d179190611852565b610d21919061188f565b610d2b9190611852565b610d35919061188f565b838381518110610d4757610d47611808565b60209081029190910101525080610d5d816118ff565b915050610c52565b604080516001808252818301909252606091600091906020808301908036833701905050979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052610e709085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611037565b50505050565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610ecc9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401610dee565b505050565b60408051808201909152600281527f4d33000000000000000000000000000000000000000000000000000000000000602082015260009082610f40576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053f9190611964565b506000610f4e60028461188f565b90506b033b2e3c9fd0803ce8000000610f87827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6117f1565b610f91919061188f565b8411156040518060400160405280600281526020017f4d3100000000000000000000000000000000000000000000000000000000000081525090611002576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053f9190611964565b50828161101b6b033b2e3c9fd0803ce800000087611852565b61102591906119b5565b61102f919061188f565b949350505050565b6000611099826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166111439092919063ffffffff16565b805190915015610ecc57808060200190518101906110b791906119cd565b610ecc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161053f565b606061102f848460008585843b6111b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161053f565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516111df91906119ea565b60006040518083038185875af1925050503d806000811461121c576040519150601f19603f3d011682016040523d82523d6000602084013e611221565b606091505b509150915061123182828661123c565b979650505050505050565b6060831561124b5750816104cf565b82511561125b5782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053f9190611964565b803573ffffffffffffffffffffffffffffffffffffffff811681146112b357600080fd5b919050565b60008060008060008060c087890312156112d157600080fd5b6112da8761128f565b95506020870135945060408701359350606087013592506112fd6080880161128f565b915060a087013590509295509295509295565b60008060006060848603121561132557600080fd5b505081359360208301359350604090920135919050565b60008083601f84011261134e57600080fd5b50813567ffffffffffffffff81111561136657600080fd5b6020830191508360208260051b850101111561138157600080fd5b9250929050565b60008060008060008060a087890312156113a157600080fd5b8635955060208701359450604087013567ffffffffffffffff8111156113c657600080fd5b6113d289828a0161133c565b90955093506113e590506060880161128f565b9150608087013590509295509295509295565b6020808252825182820181905260009190848201906040850190845b8181101561143057835183529284019291840191600101611414565b50909695505050505050565b60008060006040848603121561145157600080fd5b83359250602084013567ffffffffffffffff81111561146f57600080fd5b61147b8682870161133c565b9497909650939450505050565b801515811461149657600080fd5b50565b803560ff811681146112b357600080fd5b60008060008060008060008060008060006101608c8e0312156114cc57600080fd5b6114d58c61128f565b9a506114e360208d0161128f565b995060408c0135985060608c0135975060808c0135965061150660a08d0161128f565b955060c08c0135945060e08c013561151d81611488565b935061152c6101008d01611499565b92506101208c013591506101408c013590509295989b509295989b9093969950565b6000806040838503121561156157600080fd5b61156a8361128f565b91506115786020840161128f565b90509250929050565b60008060006060848603121561159657600080fd5b61159f8461128f565b92506115ad6020850161128f565b9150604084013590509250925092565b6000806000806000806000806000806101408b8d0312156115dd57600080fd5b6115e68b61128f565b995060208b0135985060408b0135975060608b0135965061160960808c0161128f565b955060a08b0135945060c08b013561162081611488565b935061162e60e08c01611499565b92506101008b013591506101208b013590509295989b9194979a5092959850565b60008060008060006080868803121561166757600080fd5b85359450602086013567ffffffffffffffff81111561168557600080fd5b6116918882890161133c565b90955093506116a490506040870161128f565b949793965091946060013592915050565b600080600080600080600060e0888a0312156116d057600080fd5b6116d98861128f565b96506116e76020890161128f565b955060408801359450606088013593506080880135925061170a60a0890161128f565b915060c0880135905092959891949750929550565b600080600080600080600080610100898b03121561173c57600080fd5b6117458961128f565b975061175360208a0161128f565b965060408901359550606089013594506080890135935060a0890135925061177d60c08a0161128f565b915060e089013590509295985092959890939650565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015611803576118036117c2565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561184957600080fd5b6104cf8261128f565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561188a5761188a6117c2565b500290565b6000826118c5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000816118d9576118d96117c2565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611931576119316117c2565b5060010190565b60005b8381101561195357818101518382015260200161193b565b83811115610e705750506000910152565b6020815260008251806020840152611983816040850160208701611938565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b600082198211156119c8576119c86117c2565b500190565b6000602082840312156119df57600080fd5b81516104cf81611488565b600082516119fc818460208701611938565b919091019291505056fea2646970667358221220c83ba4b7a780d6bcd42d58ce63ee43d73cb764a70cd33e8cc91609b9554a872e64736f6c634300080a003360e06040523480156200001157600080fd5b506040516200251b3803806200251b833981016040819052620000349162000121565b81816001600160a01b03821615806200005457506001600160a01b038116155b156200007357604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038216608081905260408051632f7a188160e01b81529051632f7a1881916004808201926020929091908290030181865afa158015620000be573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e4919062000159565b6001600160a01b0390811660a0521660c05250506001600055506200017e565b80516001600160a01b03811681146200011c57600080fd5b919050565b600080604083850312156200013557600080fd5b620001408362000104565b9150620001506020840162000104565b90509250929050565b6000602082840312156200016c57600080fd5b620001778262000104565b9392505050565b60805160a05160c0516122da620002416000396000818161045e015281816106040152818161070101528181610aa401528181610c9c01528181610d6e015281816110dd01528181611186015281816113a8015281816114c701526115a10152600081816102b40152818161121301526116860152600081816104b20152818161084601528181610b8c01528181610e56015281816113fe01528181611498015281816115f70152818161170e015281816117c2015261186c01526122da6000f3fe6080604052600436106101cd5760003560e01c8063ad5c4648116100f7578063c12c21c011610095578063ded9382a11610064578063ded9382a1461052b578063e8e3370014610546578063f305d71914610581578063fb3bdb411461038557600080fd5b8063c12c21c0146104a0578063c45a0155146104d4578063ce30bbdb146104e9578063d06ca61f1461050b57600080fd5b8063b6f9de95116100d1578063b6f9de9514610423578063baa2abde14610431578063bd90df701461044c578063bdbeaa311461048057600080fd5b8063ad5c4648146103d3578063ad615dec146103e8578063af2979eb1461040857600080fd5b80634a25d94a1161016f578063791ac9471161013e578063791ac9471461033b5780637ff36ab51461038557806385f8c259146103935780638803dbee146103b357600080fd5b80634a25d94a1461023a5780635b0d59841461031b5780635c11d7951461033b57806378aa73a41461035d57600080fd5b80631f00ca74116101ab5780631f00ca74146102675780632195995c146102875780632f7a1881146102a257806338ed1739146102fb57600080fd5b806302751cec146101d2578063054d50d41461020c57806318cbafe51461023a575b600080fd5b3480156101de57600080fd5b506101f26101ed3660046118f6565b61058f565b604080519283526020830191909152015b60405180910390f35b34801561021857600080fd5b5061022c610227366004611954565b6105c4565b604051908152602001610203565b34801561024657600080fd5b5061025a6102553660046119cc565b61068d565b6040516102039190611a3f565b34801561027357600080fd5b5061025a610282366004611a83565b6106c1565b34801561029357600080fd5b506101f26101ed366004611af5565b3480156102ae57600080fd5b506102d67f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610203565b34801561030757600080fd5b5061025a6103163660046119cc565b61079d565b34801561032757600080fd5b5061022c610336366004611b9d565b6109fe565b34801561034757600080fd5b5061035b6103563660046119cc565b610a32565b005b34801561036957600080fd5b50610372600281565b60405161ffff9091168152602001610203565b61025a610255366004611c31565b34801561039f57600080fd5b5061022c6103ae366004611954565b610a64565b3480156103bf57600080fd5b5061025a6103ce3660046119cc565b610ae8565b3480156103df57600080fd5b506102d6610c98565b3480156103f457600080fd5b5061022c610403366004611954565b610d2e565b34801561041457600080fd5b5061022c6103363660046118f6565b61035b610356366004611c31565b34801561043d57600080fd5b506101f26101ed366004611c98565b34801561045857600080fd5b506102d67f000000000000000000000000000000000000000000000000000000000000000081565b34801561048c57600080fd5b5061025a61049b366004611d0a565b610db2565b3480156104ac57600080fd5b506102d67f000000000000000000000000000000000000000000000000000000000000000081565b3480156104e057600080fd5b506102d66110d9565b3480156104f557600080fd5b506104fe600181565b6040516102039190611d5d565b34801561051757600080fd5b5061025a610526366004611a83565b611146565b34801561053757600080fd5b506101f26101ed366004611b9d565b34801561055257600080fd5b50610566610561366004611d9e565b6111bf565b60408051938452602084019290925290820152606001610203565b6105666105613660046118f6565b6000806040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f054d50d40000000000000000000000000000000000000000000000000000000081526004810184905260248101839052604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063054d50d4906064015b602060405180830381865afa158015610661573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106859190611e1a565b949350505050565b60606040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1f00ca7400000000000000000000000000000000000000000000000000000000815260609073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690631f00ca749061073a90879087908790600401611e89565b600060405180830381865afa158015610757573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526106859190810190611f2a565b606060026000541415610811576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156108a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c69190611fd0565b90506000868660008181106108dd576108dd611ff4565b90506020020160208101906108f29190612023565b90506000878761090360018261206f565b81811061091257610912611ff4565b90506020020160208101906109279190612023565b90506109d88383836338ed173960e01b8e8e8e8e8b8e60405160240161095296959493929190612086565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152600160006111f6565b8060200190518101906109eb9190611f2a565b60016000559a9950505050505050505050565b60006040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f85f8c2590000000000000000000000000000000000000000000000000000000081526004810184905260248101839052604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906385f8c25990606401610644565b606060026000541415610b57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610808565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610be8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0c9190611fd0565b9050600086866000818110610c2357610c23611ff4565b9050602002016020810190610c389190612023565b905060008787610c4960018261206f565b818110610c5857610c58611ff4565b9050602002016020810190610c6d9190612023565b90506109d8838383638803dbee60e01b8e8e8e8e8b8e60405160240161095296959493929190612086565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d299190611fd0565b905090565b6040517fad615dec0000000000000000000000000000000000000000000000000000000081526004810184905260248101839052604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ad615dec90606401610644565b606060026000541415610e21576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610808565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610eb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed69190611fd0565b9050600085856000818110610eed57610eed611ff4565b9050602002016020810190610f029190612023565b905060008686610f1360018261206f565b818110610f2257610f22611ff4565b9050602002016020810190610f379190612023565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529192506000918416906370a0823190602401602060405180830381865afa158015610fa9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fcd9190611e1a565b905060018111156110c7578080600190039150506110b18484846338ed173960e01b856b033b2e3c9fd0803ce80000008f8861100991906120d1565b611013919061210e565b8e8e8c8f60405160240161102c96959493929190612086565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526001806111f6565b8060200190518101906110c49190611f2a565b94505b50506001600055509095945050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d05573d6000803e3d6000fd5b6040517fd06ca61f00000000000000000000000000000000000000000000000000000000815260609073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063d06ca61f9061073a90879087908790600401611e89565b60008060006040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606000803373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461135f576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301528916906370a0823190602401602060405180830381865afa1580156112a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c89190611e1a565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152919350908816906370a0823190602401602060405180830381865afa158015611338573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135c9190611e1a565b90505b841561145b576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561144257600080fd5b505af1158015611456573d6000803e3d6000fd5b505050505b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a906114f19033907f0000000000000000000000000000000000000000000000000000000000000000908b90600401612179565b6000604051808303816000875af1158015611510573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261155691908101906121f2565b92508415611654576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561163b57600080fd5b505af115801561164f573d6000803e3d6000fd5b505050505b61166289898985858961166e565b50509695505050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461176f576040517f654a9eda00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528681166024830152858116604483015260648201859052608482018490527f0000000000000000000000000000000000000000000000000000000000000000169063654a9eda9060a401600060405180830381600087803b15801561175257600080fd5b505af1158015611766573d6000803e3d6000fd5b505050506118c9565b801561181f576040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015286811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b15801561180657600080fd5b505af115801561181a573d6000803e3d6000fd5b505050505b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015285811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156118b057600080fd5b505af11580156118c4573d6000803e3d6000fd5b505050505b505050505050565b73ffffffffffffffffffffffffffffffffffffffff811681146118f357600080fd5b50565b60008060008060008060c0878903121561190f57600080fd5b863561191a816118d1565b9550602087013594506040870135935060608701359250608087013561193f816118d1565b8092505060a087013590509295509295509295565b60008060006060848603121561196957600080fd5b505081359360208301359350604090920135919050565b60008083601f84011261199257600080fd5b50813567ffffffffffffffff8111156119aa57600080fd5b6020830191508360208260051b85010111156119c557600080fd5b9250929050565b60008060008060008060a087890312156119e557600080fd5b8635955060208701359450604087013567ffffffffffffffff811115611a0a57600080fd5b611a1689828a01611980565b9095509350506060870135611a2a816118d1565b80925050608087013590509295509295509295565b6020808252825182820181905260009190848201906040850190845b81811015611a7757835183529284019291840191600101611a5b565b50909695505050505050565b600080600060408486031215611a9857600080fd5b83359250602084013567ffffffffffffffff811115611ab657600080fd5b611ac286828701611980565b9497909650939450505050565b80358015158114611adf57600080fd5b919050565b803560ff81168114611adf57600080fd5b60008060008060008060008060008060006101608c8e031215611b1757600080fd5b8b35611b22816118d1565b9a5060208c0135611b32816118d1565b995060408c0135985060608c0135975060808c0135965060a08c0135611b57816118d1565b955060c08c01359450611b6c60e08d01611acf565b9350611b7b6101008d01611ae4565b92506101208c013591506101408c013590509295989b509295989b9093969950565b6000806000806000806000806000806101408b8d031215611bbd57600080fd5b8a35611bc8816118d1565b995060208b0135985060408b0135975060608b0135965060808b0135611bed816118d1565b955060a08b01359450611c0260c08c01611acf565b9350611c1060e08c01611ae4565b92506101008b013591506101208b013590509295989b9194979a5092959850565b600080600080600060808688031215611c4957600080fd5b85359450602086013567ffffffffffffffff811115611c6757600080fd5b611c7388828901611980565b9095509350506040860135611c87816118d1565b949793965091946060013592915050565b600080600080600080600060e0888a031215611cb357600080fd5b8735611cbe816118d1565b96506020880135611cce816118d1565b955060408801359450606088013593506080880135925060a0880135611cf3816118d1565b8092505060c0880135905092959891949750929550565b60008060008060608587031215611d2057600080fd5b84359350602085013567ffffffffffffffff811115611d3e57600080fd5b611d4a87828801611980565b9598909750949560400135949350505050565b6020810160118310611d98577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b600080600080600080600080610100898b031215611dbb57600080fd5b8835611dc6816118d1565b97506020890135611dd6816118d1565b965060408901359550606089013594506080890135935060a0890135925060c0890135611e02816118d1565b8092505060e089013590509295985092959890939650565b600060208284031215611e2c57600080fd5b5051919050565b8183526000602080850194508260005b85811015611e7e578135611e56816118d1565b73ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101611e43565b509495945050505050565b838152604060208201526000611ea3604083018486611e33565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611f2257611f22611eac565b604052919050565b60006020808385031215611f3d57600080fd5b825167ffffffffffffffff80821115611f5557600080fd5b818501915085601f830112611f6957600080fd5b815181811115611f7b57611f7b611eac565b8060051b9150611f8c848301611edb565b8181529183018401918481019088841115611fa657600080fd5b938501935b83851015611fc457845182529385019390850190611fab565b98975050505050505050565b600060208284031215611fe257600080fd5b8151611fed816118d1565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561203557600080fd5b8135611fed816118d1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561208157612081612040565b500390565b86815285602082015260a0604082015260006120a660a083018688611e33565b73ffffffffffffffffffffffffffffffffffffffff9490941660608301525060800152949350505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561210957612109612040565b500290565b600082612144577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b8381101561216457818101518382015260200161214c565b83811115612173576000848401525b50505050565b600073ffffffffffffffffffffffffffffffffffffffff80861683528085166020840152506060604083015282518060608401526121be816080850160208701612149565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01691909101608001949350505050565b60006020828403121561220457600080fd5b815167ffffffffffffffff8082111561221c57600080fd5b818401915084601f83011261223057600080fd5b81518181111561224257612242611eac565b61227360207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611edb565b915080825285602082850101111561228a57600080fd5b61229b816020840160208601612149565b5094935050505056fea2646970667358221220eb17abe05eeba3a20acf423d9c0b916f7c22eba6424cd918d18ad2a760eea1ba64736f6c634300080a0033608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611a018061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c8063715018a61161005b578063715018a6146100f45780638da5cb5b146100fc578063d7aa2e3514610124578063f2fde38b1461015557600080fd5b80631bf64c411461008d57806345330666146100b657806354fd4d50146100cb5780636f33547d146100e1575b600080fd5b6100a061009b366004611436565b610168565b6040516100ad919061158a565b60405180910390f35b6100c96100c43660046115f9565b61027d565b005b6100d3600281565b6040519081526020016100ad565b6100a06100ef366004611436565b61035a565b6100c9610514565b60005460405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100ad565b6100d361013236600461164a565b600160209081526000938452604080852082529284528284209052825290205481565b6100c9610163366004611695565b6105a1565b6101a56040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b6040805160028082526060820183526000926020830190803683370190505090508360400151816000815181106101de576101de6116b9565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050836060015181600181518110610230576102306116b9565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506102758484836106d1565b949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610303576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff93841660009081526001602090815260408083209587168084528683528184209590971683529381528382208390559384528281209481529390925290912055565b6103976040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b60808381015151604080516003808252938101909152909160009190602082016060803683370190505090508460400151816000815181106103db576103db6116b9565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505084606001518160028151811061042d5761042d6116b9565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060005b8281101561050b5785608001518181518110610488576104886116b9565b6020026020010151826001815181106104a3576104a36116b9565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060006104ea8787856106d1565b90506104f98188876000610aa7565b15610502578094505b5060010161046a565b50505092915050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610595576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102fa565b61059f6000610ac3565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610622576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102fa565b73ffffffffffffffffffffffffffffffffffffffff81166106c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102fa565b6106ce81610ac3565b50565b61070e6040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b600061071985610b38565b1561080a5760a08501516040517fd06ca61f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86169163d06ca61f9161077691908790600401611739565b600060405180830381865afa9250505080156107d257506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526107cf9190810190611752565b60015b6107db576108e6565b80600182516107ea9190611812565b815181106107fa576107fa6116b9565b60200260200101519150506108e6565b60a08501516040517f1f00ca7400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff861691631f00ca749161086291908790600401611739565b600060405180830381865afa9250505080156108be57506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108bb9190810190611752565b60015b6108c7576108e6565b806000815181106108da576108da6116b9565b60200260200101519150505b8015610a9f57602082018190526001604083015261090685858584610bd1565b826000018190525060008473ffffffffffffffffffffffffffffffffffffffff1663bd90df706040518163ffffffff1660e01b8152600401602060405180830381865afa15801561095b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097f9190611829565b90506000600185516109919190611812565b905060005b81811015610a9b5773ffffffffffffffffffffffffffffffffffffffff8316600090815260016020526040812087519091908890849081106109da576109da6116b9565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600087836001610a2c9190611846565b81518110610a3c57610a3c6116b9565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205485606001818151610a909190611846565b905250600101610996565b5050505b509392505050565b6000610aba858585866060015186610e3c565b95945050505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008082516002811115610b4e57610b4e61185e565b1480610b6c5750600182516002811115610b6a57610b6a61185e565b145b15610b7957506001919050565b600282516002811115610b8e57610b8e61185e565b1415610b9c57506000919050565b81516040517ffe7995cf0000000000000000000000000000000000000000000000000000000081526102fa919060040161188d565b604080518082019091526000815260606020820152600185516002811115610bfb57610bfb61185e565b1415610cf8576040805180820190915273ffffffffffffffffffffffffffffffffffffffff85168152602081017fbdbeaa3100000000000000000000000000000000000000000000000000000000610c538886610f56565b86610c6042610e10611846565b604051602401610c72939291906118ce565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290529050610275565b600085516002811115610d0d57610d0d61185e565b1415610d93576040805180820190915273ffffffffffffffffffffffffffffffffffffffff8516815260a086015160208201907f38ed17390000000000000000000000000000000000000000000000000000000090610d6c8987610f90565b60208a01518890610d7f42610e10611846565b604051602401610c729594939291906118f7565b600285516002811115610da857610da861185e565b1415610e07576040805180820190915273ffffffffffffffffffffffffffffffffffffffff8516815260a086015160208201907f8803dbee0000000000000000000000000000000000000000000000000000000090610d6c8987610f90565b84516040517ffe7995cf0000000000000000000000000000000000000000000000000000000081526102fa919060040161188d565b60008560400151610e4f57506000610aba565b8360400151610e6057506001610aba565b6000610ebd8688602001516b033b2e3c9fd0803ce8000000868b60600151610e889190611940565b610e92919061197d565b60208901516b033b2e3c9fd0803ce8000000610eae898b611940565b610eb8919061197d565b611077565b9050600086516002811115610ed457610ed461185e565b1480610ef25750600186516002811115610ef057610ef061185e565b145b15610efe579050610aba565b600286516002811115610f1357610f1361185e565b1415610f2157159050610aba565b85516040517ffe7995cf0000000000000000000000000000000000000000000000000000000081526102fa919060040161188d565b60a0820151600090610f7d84610f78856b033b2e3c9fd0803ce8000000611940565b610f90565b610f87919061197d565b90505b92915050565b60008260e0015115610fa457506000610f8a565b600083516002811115610fb957610fb961185e565b1480610fd75750600183516002811115610fd557610fd561185e565b145b1561100a5760c083015161271090610fef9082611812565b610ff99084611940565b611003919061197d565b9050610f8a565b60028351600281111561101f5761101f61185e565b14156110425760c083015161103690612710611846565b610ff961271084611940565b82516040517ffe7995cf0000000000000000000000000000000000000000000000000000000081526102fa919060040161188d565b60006110b76040518060400160405280600c81526020017f414141202d20616d6f756e740000000000000000000000000000000000000000815250611168565b6110c0856111f7565b6110c9846111f7565b6110d2836111f7565b6110db826111f7565b6110ed6110e88587611812565b6111f7565b6110fa6110e88385611812565b61110386610b38565b611124576111118284611846565b61111b8587611846565b10159050610aba565b8385101580156111345750818310155b1561114d576111438284611812565b61111b8587611812565b83851061115b57600161115e565b60005b9695505050505050565b6106ce8160405160240161117c91906119b8565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f41304fac00000000000000000000000000000000000000000000000000000000179052611284565b6106ce8160405160240161120d91815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff5b1bba9000000000000000000000000000000000000000000000000000000001790525b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610100810167ffffffffffffffff811182821017156112f8576112f86112a5565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611345576113456112a5565b604052919050565b80356003811061135c57600080fd5b919050565b73ffffffffffffffffffffffffffffffffffffffff811681146106ce57600080fd5b803561135c81611361565b600067ffffffffffffffff8211156113a8576113a86112a5565b5060051b60200190565b600082601f8301126113c357600080fd5b813560206113d86113d38361138e565b6112fe565b82815260059290921b840181019181810190868411156113f757600080fd5b8286015b8481101561141b57803561140e81611361565b83529183019183016113fb565b509695505050505050565b8035801515811461135c57600080fd5b6000806040838503121561144957600080fd5b823567ffffffffffffffff8082111561146157600080fd5b90840190610100828703121561147657600080fd5b61147e6112d4565b6114878361134d565b815261149560208401611383565b60208201526114a660408401611383565b60408201526114b760608401611383565b60608201526080830135828111156114ce57600080fd5b6114da888286016113b2565b60808301525060a083013560a082015260c083013560c082015261150060e08401611426565b60e0820152935061151691505060208401611383565b90509250929050565b6000815180845260005b8181101561154557602081850181015186830182015201611529565b81811115611557576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208082528251608083830152805173ffffffffffffffffffffffffffffffffffffffff1660a08401520151604060c08301526000906115cd60e084018261151f565b905060208401516040840152604084015115156060840152606084015160808401528091505092915050565b6000806000806080858703121561160f57600080fd5b843561161a81611361565b9350602085013561162a81611361565b9250604085013561163a81611361565b9396929550929360600135925050565b60008060006060848603121561165f57600080fd5b833561166a81611361565b9250602084013561167a81611361565b9150604084013561168a81611361565b809150509250925092565b6000602082840312156116a757600080fd5b81356116b281611361565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081518084526020808501945080840160005b8381101561172e57815173ffffffffffffffffffffffffffffffffffffffff16875295820195908201906001016116fc565b509495945050505050565b82815260406020820152600061027560408301846116e8565b6000602080838503121561176557600080fd5b825167ffffffffffffffff81111561177c57600080fd5b8301601f8101851361178d57600080fd5b805161179b6113d38261138e565b81815260059190911b820183019083810190878311156117ba57600080fd5b928401925b828410156117d8578351825292840192908401906117bf565b979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015611824576118246117e3565b500390565b60006020828403121561183b57600080fd5b81516116b281611361565b60008219821115611859576118596117e3565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60208101600383106118c8577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b8381526060602082015260006118e760608301856116e8565b9050826040830152949350505050565b85815284602082015260a06040820152600061191660a08301866116e8565b73ffffffffffffffffffffffffffffffffffffffff94909416606083015250608001529392505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611978576119786117e3565b500290565b6000826119b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b602081526000610f87602083018461151f56fea2646970667358221220042a62b4d425a2205fa828887bf063a55ef88bc4c19cee1e98235c23b32ccdf764736f6c634300080a003360806040526000805460ff1916600117905534801561001d57600080fd5b50611be18061002d6000396000f3fe6080604052600436106100d25760003560e01c8063ba414fa61161007f578063db3e219811610059578063db3e219814610215578063f28c049814610228578063f7729d431461023b578063fa7626d41461025b57600080fd5b8063ba414fa6146101bd578063c04b8d59146101e2578063cdca1753146101f557600080fd5b8063414bf389116100b0578063414bf3891461014c57806347485d2a1461015f5780635911fb9a1461019d57600080fd5b80632ccbc99b146100d75780632f80bb1d146100f957806330d07f211461012c575b600080fd5b3480156100e357600080fd5b506100f76100f2366004611672565b610275565b005b34801561010557600080fd5b506101196101143660046116f0565b61031f565b6040519081526020015b60405180910390f35b34801561013857600080fd5b506101196101473660046117c3565b610468565b61011961015a366004611842565b610566565b34801561016b57600080fd5b5061011961017a36600461185f565b600160209081526000938452604080852082529284528284209052825290205481565b3480156101a957600080fd5b506100f76101b83660046118a6565b6106b5565b3480156101c957600080fd5b506101d26106c8565b6040519015158152602001610123565b6101196101f03660046118f9565b610826565b34801561020157600080fd5b506101196102103660046116f0565b6109b5565b610119610223366004611842565b610af1565b6101196102363660046118f9565b610c00565b34801561024757600080fd5b506101196102563660046117c3565b610d4e565b34801561026757600080fd5b506000546101d29060ff1681565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160209081526040808320938716835292815282822062ffffff86168352905220819055806102ce6b033b2e3c9fd0803ce80000008061195d565b6102d8919061199a565b73ffffffffffffffffffffffffffffffffffffffff938416600090815260016020908152604080832097909616825295865284812062ffffff909416815292909452502055565b805b600361032f6014600261195d565b61033991906119d5565b83511061046257600080600061034e86610e35565b73ffffffffffffffffffffffffffffffffffffffff8083166000908152600160209081526040808320938716835292815282822062ffffff8516835290522054929550909350915080610402576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f556e697377617056334d6f636b3a2052617465206973206e6f7420736574757060448201526064015b60405180910390fd5b61041462ffffff8316620f42406119ed565b8161042b6b033b2e3c9fd0803ce80000008861195d565b610435919061199a565b61044290620f424061195d565b61044c919061199a565b945061045787610e71565b965050505050610321565b92915050565b73ffffffffffffffffffffffffffffffffffffffff8086166000908152600160209081526040808320938816835292815282822062ffffff8716835290529081205480610511576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f556e697377617056334d6f636b3a2052617465206973206e6f7420736574757060448201526064016103f9565b61052362ffffff8616620f42406119ed565b8161053a6b033b2e3c9fd0803ce80000008761195d565b610544919061199a565b61055190620f424061195d565b61055b919061199a565b979650505050505050565b60006105a46105786020840184611a04565b6105886040850160208601611a04565b6105986060860160408701611a21565b8560a001356000610d4e565b90508160c0013581101561063a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f556e69737761705632526f757465723a20494e53554646494349454e545f4f5560448201527f545055545f414d4f554e5400000000000000000000000000000000000000000060648201526084016103f9565b61066f333060a08501356106516020870187611a04565b73ffffffffffffffffffffffffffffffffffffffff16929190610ea2565b6106b06106826080840160608501611a04565b826106936040860160208701611a04565b73ffffffffffffffffffffffffffffffffffffffff169190610f84565b919050565b6106c38383610bb884610275565b505050565b60008054610100900460ff16156106e85750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106b05760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000008284015282518083038401815260608301909352600092909161078d917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc491608001611a68565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526107c591611ab0565b6000604051808303816000865af19150503d8060008114610802576040519150601f19603f3d011682016040523d82523d6000602084013e610807565b606091505b509150508080602001905181019061081f9190611acc565b9392505050565b600080806108716108378580611aee565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610fda92505050565b90925090506108c16108838580611aee565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505060608601356109b5565b92508360800135831015610957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f556e69737761705632526f757465723a20494e53554646494349454e545f4f5560448201527f545055545f414d4f554e5400000000000000000000000000000000000000000060648201526084016103f9565b61097d73ffffffffffffffffffffffffffffffffffffffff831633306060880135610ea2565b6109ae6109906040860160208701611a04565b73ffffffffffffffffffffffffffffffffffffffff83169085610f84565b5050919050565b805b60036109c56014600261195d565b6109cf91906119d5565b8351106104625760008060006109e486610e35565b73ffffffffffffffffffffffffffffffffffffffff8084166000908152600160209081526040808320938616835292815282822062ffffff8516835290522054929550909350915080610a93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f556e697377617056334d6f636b3a2052617465206973206e6f7420736574757060448201526064016103f9565b620f4240610aa662ffffff8416826119ed565b6b033b2e3c9fd0803ce8000000610abd848961195d565b610ac7919061199a565b610ad1919061195d565b610adb919061199a565b9450610ae687610e71565b9650505050506109b7565b6000610b2f610b036020840184611a04565b610b136040850160208601611a04565b610b236060860160408701611a21565b8560a001356000610468565b90508160c00135811115610bc5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f556e69737761705632526f757465723a20494e53554646494349454e545f4f5560448201527f545055545f414d4f554e5400000000000000000000000000000000000000000060648201526084016103f9565b610bd83330836106516020870187611a04565b6106b0610beb6080840160608501611a04565b60a08401356106936040860160208701611a04565b60008080610c116108378580611aee565b9092509050610c61610c238580611aee565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050606086013561031f565b92508360800135831115610cf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f556e69737761705632526f757465723a20494e53554646494349454e545f4f5560448201527f545055545f414d4f554e5400000000000000000000000000000000000000000060648201526084016103f9565b610d1973ffffffffffffffffffffffffffffffffffffffff8216333086610ea2565b6109ae610d2c6040860160208701611a04565b73ffffffffffffffffffffffffffffffffffffffff8416906060870135610f84565b73ffffffffffffffffffffffffffffffffffffffff8086166000908152600160209081526040808320938816835292815282822062ffffff8716835290529081205480610df7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f556e697377617056334d6f636b3a2052617465206973206e6f7420736574757060448201526064016103f9565b620f4240610e0a62ffffff8716826119ed565b6b033b2e3c9fd0803ce8000000610e21848861195d565b610e2b919061199a565b610551919061195d565b60008080610e43848261101c565b9250610e508460146110ac565b9050610e68610e61600360146119d5565b859061101c565b91509193909250565b6060610462610e82600360146119d5565b610e8e600360146119d5565b8451610e9a91906119ed565b8491906111a0565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052610f7e9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261131a565b50505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526106c39084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401610efc565b600080610fe683610e35565b50909250610ff5905083611426565b1561100a5761100383610e71565b9250915091565b61101383610e35565b50915050915091565b60006110298260146119d5565b83511015611093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f746f416464726573735f6f75744f66426f756e6473000000000000000000000060448201526064016103f9565b5001602001516c01000000000000000000000000900490565b6000816110ba8160036119d5565b1015611122576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f746f55696e7432345f6f766572666c6f7700000000000000000000000000000060448201526064016103f9565b61112d8260036119d5565b83511015611197576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f746f55696e7432345f6f75744f66426f756e647300000000000000000000000060448201526064016103f9565b50016003015190565b6060816111ae81601f6119d5565b1015611216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016103f9565b61122082846119d5565b8451101561128a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e647300000000000000000000000000000060448201526064016103f9565b6060821580156112a95760405191506000825260208201604052611311565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156112e25780518352602092830192016112ca565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b600061137c826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166114609092919063ffffffff16565b8051909150156106c3578080602001905181019061139a9190611acc565b6106c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016103f9565b6000611434600360146119d5565b60146114416003826119d5565b61144b91906119d5565b61145591906119d5565b825110159050919050565b606061146f8484600085611477565b949350505050565b606082471015611509576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016103f9565b843b611571576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016103f9565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161159a9190611ab0565b60006040518083038185875af1925050503d80600081146115d7576040519150601f19603f3d011682016040523d82523d6000602084013e6115dc565b606091505b509150915061055b828286606083156115f657508161081f565b8251156116065782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103f99190611b5a565b73ffffffffffffffffffffffffffffffffffffffff8116811461165c57600080fd5b50565b803562ffffff811681146106b057600080fd5b6000806000806080858703121561168857600080fd5b84356116938161163a565b935060208501356116a38161163a565b92506116b16040860161165f565b9396929550929360600135925050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561170357600080fd5b823567ffffffffffffffff8082111561171b57600080fd5b818501915085601f83011261172f57600080fd5b813581811115611741576117416116c1565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715611787576117876116c1565b816040528281528860208487010111156117a057600080fd5b826020860160208301376000602093820184015298969091013596505050505050565b600080600080600060a086880312156117db57600080fd5b85356117e68161163a565b945060208601356117f68161163a565b93506118046040870161165f565b925060608601359150608086013561181b8161163a565b809150509295509295909350565b6000610100828403121561183c57600080fd5b50919050565b6000610100828403121561185557600080fd5b61081f8383611829565b60008060006060848603121561187457600080fd5b833561187f8161163a565b9250602084013561188f8161163a565b915061189d6040850161165f565b90509250925092565b6000806000606084860312156118bb57600080fd5b83356118c68161163a565b925060208401356118d68161163a565b929592945050506040919091013590565b600060a0828403121561183c57600080fd5b60006020828403121561190b57600080fd5b813567ffffffffffffffff81111561192257600080fd5b61146f848285016118e7565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156119955761199561192e565b500290565b6000826119d0577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600082198211156119e8576119e861192e565b500190565b6000828210156119ff576119ff61192e565b500390565b600060208284031215611a1657600080fd5b813561081f8161163a565b600060208284031215611a3357600080fd5b61081f8261165f565b60005b83811015611a57578181015183820152602001611a3f565b83811115610f7e5750506000910152565b7fffffffff000000000000000000000000000000000000000000000000000000008316815260008251611aa2816004850160208701611a3c565b919091016004019392505050565b60008251611ac2818460208701611a3c565b9190910192915050565b600060208284031215611ade57600080fd5b8151801515811461081f57600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112611b2357600080fd5b83018035915067ffffffffffffffff821115611b3e57600080fd5b602001915036819003821315611b5357600080fd5b9250929050565b6020815260008251806020840152611b79816040850160208701611a3c565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea26469706673582212204cf30f1ca2431e63304f0a45d5cefa0164fe6393b35a339d16bca5512d511dd064736f6c634300080a003360e06040523480156200001157600080fd5b506040516200221a3803806200221a833981016040819052620000349162000121565b81816001600160a01b03821615806200005457506001600160a01b038116155b156200007357604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038216608081905260408051632f7a188160e01b81529051632f7a1881916004808201926020929091908290030181865afa158015620000be573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e4919062000159565b6001600160a01b0390811660a0521660c05250506001600055506200017e565b80516001600160a01b03811681146200011c57600080fd5b919050565b600080604083850312156200013557600080fd5b620001408362000104565b9150620001506020840162000104565b90509250929050565b6000602082840312156200016c57600080fd5b620001778262000104565b9392505050565b60805160a05160c051611ff6620002246000396000818161017a015281816111a8015281816112c701526113a101526000818160d30152818161101301526115330152600081816101c101528181610314015281816105630152818161070501528181610ae001528181610c7801528181610dbe015281816111fe01528181611298015281816113f7015281816115bb0152818161166f01526117190152611ff66000f3fe6080604052600436106100bc5760003560e01c8063c12c21c011610074578063db3e21981161004e578063db3e219814610225578063f28c049814610238578063f4f18d901461024b57600080fd5b8063c12c21c0146101af578063c7fbf4de146101e3578063ce30bbdb1461020357600080fd5b806378aa73a4116100a557806378aa73a414610140578063bd90df7014610168578063c04b8d591461019c57600080fd5b80632f7a1881146100c1578063414bf3891461011f575b600080fd5b3480156100cd57600080fd5b506100f57f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61013261012d36600461182d565b61026b565b604051908152602001610116565b34801561014c57600080fd5b50610155600281565b60405161ffff9091168152602001610116565b34801561017457600080fd5b506100f57f000000000000000000000000000000000000000000000000000000000000000081565b6101326101aa366004611863565b6104bf565b3480156101bb57600080fd5b506100f57f000000000000000000000000000000000000000000000000000000000000000081565b3480156101ef57600080fd5b506101326101fe3660046118a0565b6106bd565b34801561020f57600080fd5b50610218600281565b60405161011691906118b2565b61013261023336600461182d565b610a3c565b610132610246366004611863565b610bd4565b34801561025757600080fd5b506101326102663660046118f3565b610d76565b6000600260005414156102df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610370573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103949190611953565b905060006103a736859003850185611af2565b73ffffffffffffffffffffffffffffffffffffffff83166060820152905061049f826103d66020870187611b0f565b6103e66040880160208901611b0f565b6040517f414bf3890000000000000000000000000000000000000000000000000000000090610419908790602401611b2c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915260016000610ff6565b8060200190518101906104b29190611ba7565b6001600055949350505050565b60006002600054141561052e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016102d6565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156105bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105e39190611953565b905060008061062f6105f58680611bc0565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061146e92505050565b9150915060008561063f90611d27565b73ffffffffffffffffffffffffffffffffffffffff8516602082015260405190915061069b908590859085907fc04b8d590000000000000000000000000000000000000000000000000000000090610419908790602401611e0c565b8060200190518101906106ae9190611ba7565b60016000559695505050505050565b6040517fe958b704000000000000000000000000000000000000000000000000000000008152336004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa15801561074c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107709190611953565b905060006107816020850185611b0f565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015291909116906370a0823190602401602060405180830381865afa1580156107ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108139190611ba7565b90506001811115610a35576040805161010081019091527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90910190600090806108606020880188611b0f565b73ffffffffffffffffffffffffffffffffffffffff16815260200186602001602081019061088e9190611b0f565b73ffffffffffffffffffffffffffffffffffffffff1681526020016108b96060880160408901611e1f565b62ffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff168152602001866060013581526020018381526020016b033b2e3c9fd0803ce800000087608001358561090c9190611e69565b6109169190611ea6565b815260200161092b60c0880160a08901611b0f565b73ffffffffffffffffffffffffffffffffffffffff1690529050610a1e836109566020880188611b0f565b6109666040890160208a01611b0f565b6040517f414bf3890000000000000000000000000000000000000000000000000000000090610999908790602401611b2c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152600180610ff6565b806020019051810190610a319190611ba7565b9350505b5050919050565b600060026000541415610aab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016102d6565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610b3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b609190611953565b90506000610b7336859003850185611af2565b73ffffffffffffffffffffffffffffffffffffffff831660608201528051602082015160405192935061049f92859291907fdb3e21980000000000000000000000000000000000000000000000000000000090610419908790602401611b2c565b600060026000541415610c43576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016102d6565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610cd4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf89190611953565b9050600080610d0a6105f58680611bc0565b91509150600085610d1a90611d27565b73ffffffffffffffffffffffffffffffffffffffff8516602082015260405190915061069b908590849086907ff28c04980000000000000000000000000000000000000000000000000000000090610419908790602401611e0c565b6040517fe958b704000000000000000000000000000000000000000000000000000000008152336004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015610e05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e299190611953565b9050600080610e3b6105f58680611bc0565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301529294509092506000918416906370a0823190602401602060405180830381865afa158015610eb0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed49190611ba7565b90506001811115610fed576040805160a081019091527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091019060009080610f1d8980611bc0565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509082525073ffffffffffffffffffffffffffffffffffffffff8716602080830191909152890135604080830191909152606082018590526080909101906b033b2e3c9fd0803ce800000090610fa8908b013586611e69565b610fb29190611ea6565b8152509050610fd685858563c04b8d5960e01b856040516024016109999190611e0c565b806020019051810190610fe99190611ba7565b9550505b50505050919050565b60606000803373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461115f576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301528916906370a0823190602401602060405180830381865afa1580156110a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c89190611ba7565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152919350908816906370a0823190602401602060405180830381865afa158015611138573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115c9190611ba7565b90505b841561125b576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561124257600080fd5b505af1158015611256573d6000803e3d6000fd5b505050505b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a906112f19033907f0000000000000000000000000000000000000000000000000000000000000000908b90600401611ee1565b6000604051808303816000875af1158015611310573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526113569190810190611f23565b92508415611454576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561143b57600080fd5b505af115801561144f573d6000803e3d6000fd5b505050505b61146289898985858961151b565b50509695505050505050565b600080600361147f60146002611e69565b6114899190611f91565b835110156114c3576040517f8287466d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114ce83600061177e565b91506115146114df60036014611f91565b6114eb60036014611f91565b601486516114f99190611fa9565b6115039190611ea6565b61150d9190611e69565b849061177e565b9050915091565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461161c576040517f654a9eda00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528681166024830152858116604483015260648201859052608482018490527f0000000000000000000000000000000000000000000000000000000000000000169063654a9eda9060a401600060405180830381600087803b1580156115ff57600080fd5b505af1158015611613573d6000803e3d6000fd5b50505050611776565b80156116cc576040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015286811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b1580156116b357600080fd5b505af11580156116c7573d6000803e3d6000fd5b505050505b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015285811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561175d57600080fd5b505af1158015611771573d6000803e3d6000fd5b505050505b505050505050565b600061178b826014611f91565b835110156117f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f746f416464726573735f6f75744f66426f756e6473000000000000000000000060448201526064016102d6565b50818101602001516c0100000000000000000000000090045b92915050565b6000610100828403121561182757600080fd5b50919050565b6000610100828403121561184057600080fd5b61184a8383611814565b9392505050565b600060a0828403121561182757600080fd5b60006020828403121561187557600080fd5b813567ffffffffffffffff81111561188c57600080fd5b61189884828501611851565b949350505050565b600060c0828403121561182757600080fd5b60208101601183106118ed577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561190557600080fd5b813567ffffffffffffffff81111561191c57600080fd5b82016060818503121561184a57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8116811461195057600080fd5b50565b60006020828403121561196557600080fd5b815161184a8161192e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff811182821017156119c2576119c2611970565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611a0f57611a0f611970565b604052919050565b8035611a228161192e565b919050565b803562ffffff81168114611a2257600080fd5b6000610100808385031215611a4e57600080fd5b6040519081019067ffffffffffffffff82118183101715611a7157611a71611970565b8160405280925083359150611a858261192e565b818152611a9460208501611a17565b6020820152611aa560408501611a27565b6040820152611ab660608501611a17565b60608201526080840135608082015260a084013560a082015260c084013560c0820152611ae560e08501611a17565b60e0820152505092915050565b60006101008284031215611b0557600080fd5b61184a8383611a3a565b600060208284031215611b2157600080fd5b813561184a8161192e565b610100810161180e828473ffffffffffffffffffffffffffffffffffffffff80825116835280602083015116602084015262ffffff60408301511660408401528060608301511660608401526080820151608084015260a082015160a084015260c082015160c08401528060e08301511660e0840152505050565b600060208284031215611bb957600080fd5b5051919050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112611bf557600080fd5b83018035915067ffffffffffffffff821115611c1057600080fd5b602001915036819003821315611c2557600080fd5b9250929050565b600067ffffffffffffffff821115611c4657611c46611970565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600060a08284031215611c8457600080fd5b611c8c61199f565b9050813567ffffffffffffffff811115611ca557600080fd5b8201601f81018413611cb657600080fd5b80356020611ccb611cc683611c2c565b6119c8565b8281528682848601011115611cdf57600080fd5b828285018383013760008184018301528452611cfc858201611a17565b8185015250505060408201356040820152606082013560608201526080820135608082015292915050565b600061180e3683611c72565b60005b83811015611d4e578181015183820152602001611d36565b83811115611d5d576000848401525b50505050565b60008151808452611d7b816020860160208601611d33565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6000815160a08452611dc260a0850182611d63565b905073ffffffffffffffffffffffffffffffffffffffff60208401511660208501526040830151604085015260608301516060850152608083015160808501528091505092915050565b60208152600061184a6020830184611dad565b600060208284031215611e3157600080fd5b61184a82611a27565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611ea157611ea1611e3a565b500290565b600082611edc577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600073ffffffffffffffffffffffffffffffffffffffff808616835280851660208401525060606040830152611f1a6060830184611d63565b95945050505050565b600060208284031215611f3557600080fd5b815167ffffffffffffffff811115611f4c57600080fd5b8201601f81018413611f5d57600080fd5b8051611f6b611cc682611c2c565b818152856020838501011115611f8057600080fd5b611f1a826020830160208601611d33565b60008219821115611fa457611fa4611e3a565b500190565b600082821015611fbb57611fbb611e3a565b50039056fea26469706673582212205e5422ac5bcae72b08548a48e40a231ab28c72dbc2d7f2b1b2c453222770f56564736f6c634300080a0033608060405234801561001057600080fd5b5061001a33610081565b73e592427a0aece92de3edee1f18e0157c0586156460005260016020527fbad1c9453febe4a6446e59e386c36af7924acc0d372d29859fea25e7a6eaac1780546001600160a01b03191673b27308f9f90d607463bb33ea1bebb41c27ce5ab61790556100d1565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b612604806100e06000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c80636f33547d11610081578063c67903ea1161005b578063c67903ea14610208578063d7aa2e3514610269578063f2fde38b1461029a57600080fd5b80636f33547d146101cf578063715018a6146101e25780638da5cb5b146101ea57600080fd5b806345330666116100b2578063453306661461017d5780634acc79ed1461019257806354fd4d50146101b957600080fd5b80631b162e56146100d95780631bf64c41146101025780632a10672614610122575b600080fd5b6100ec6100e7366004611e57565b6102ad565b6040516100f99190611f30565b60405180910390f35b61011561011036600461206e565b610427565b6040516100f99190612157565b6101586101303660046121c6565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100f9565b61019061018b3660046121ea565b610805565b005b6101a56101a036600461223b565b6108e2565b60405162ffffff90911681526020016100f9565b6101c1600281565b6040519081526020016100f9565b6101156101dd36600461206e565b61094a565b610190610f2e565b60005473ffffffffffffffffffffffffffffffffffffffff16610158565b610190610216366004612254565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001691909216179055565b6101c161027736600461228d565b600260209081526000938452604080852082529284528284209052825290205481565b6101906102a83660046121c6565b610fbb565b606060006102ba866108e2565b905060006102c7856108e2565b905060008960028111156102dd576102dd6122d8565b14806102fa575060018960028111156102f8576102f86122d8565b145b61038e576040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606086811b821660208401527fffffff000000000000000000000000000000000000000000000000000000000060e885811b821660348601528a831b8416603786015286901b16604b8401528a901b16604e82015260620160405160208183030381529060405261041a565b6040517fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b821660208401527fffffff000000000000000000000000000000000000000000000000000000000060e886811b821660348601528a831b8416603786015285901b16604b84015286901b16604e8201526062016040516020818303038152906040525b9998505050505050505050565b6104646040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b600283516002811115610479576104796122d8565b146104855760006104a7565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b8160200181815250506000600160008473ffffffffffffffffffffffffffffffffffffffff1663bd90df706040518163ffffffff1660e01b8152600401602060405180830381865afa158015610501573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105259190612307565b73ffffffffffffffffffffffffffffffffffffffff9081168252602082019290925260400160009081205490911691505b60038110156107fd5761059c6040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b6105a5866110eb565b156106c6578273ffffffffffffffffffffffffffffffffffffffff1663f7729d43876040015188606001516105d9866108e2565b60a08b01516040517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b16815273ffffffffffffffffffffffffffffffffffffffff948516600482015293909216602484015262ffffff16604483015260648201526000608482015260a4016020604051808303816000875af19250505080156106a2575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261069f91810190612324565b60015b6106ab576107de565b80156106c0576106bd87828886611184565b91505b506107de565b8273ffffffffffffffffffffffffffffffffffffffff166330d07f21876040015188606001516106f5866108e2565b60a08b01516040517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b16815273ffffffffffffffffffffffffffffffffffffffff948516600482015293909216602484015262ffffff16604483015260648201526000608482015260a4016020604051808303816000875af19250505080156107be575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526107bb91810190612324565b60015b6107c7576107de565b80156107dc576107d987828886611184565b91505b505b6107eb81878660006112a9565b156107f4578093505b50600101610556565b505092915050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461088b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff93841660009081526002602090815260408083209587168084528683528184209590971683529381528382208390559384528281209481529390925290912055565b60006003821061091e576040517f50c1fe4a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b811561093c578160011461093457611388610940565b610bb8610940565b6103e85b61ffff1692915050565b6109876040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1663bd90df706040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109fc9190612307565b73ffffffffffffffffffffffffffffffffffffffff908116825260208201929092526040016000908120546080870151519216925085516002811115610a4457610a446122d8565b1480610a625750600185516002811115610a6057610a606122d8565b145b610a8c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610a8f565b60005b602084015260005b81811015610f255760005b6003811015610f1c5760005b6003811015610f13576000610af089600001518a60400151858c608001518881518110610add57610add61233d565b6020026020010151868e606001516102ad565b9050600080610afe8b6110eb565b15610be15760a08b01516040517fcdca175300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a169163cdca175391610b5a91879160040161236c565b6020604051808303816000875af1925050508015610bb3575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610bb091810190612324565b60015b610bbc57610cbb565b8015801590610bce5750896020015181115b15610bdb57809250600191505b50610cbb565b60a08b01516040517f2f80bb1d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a1691632f80bb1d91610c3891879160040161236c565b6020604051808303816000875af1925050508015610c91575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610c8e91810190612324565b60015b610c9a57610cbb565b8015801590610cac5750896020015181105b15610cb957809250600191505b505b8015610f0557600160408a015260208901829052610cdb8b838c866112c7565b896000018190525060008a73ffffffffffffffffffffffffffffffffffffffff1663bd90df706040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d549190612307565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260026020526040812060808f0151805193945090928a908110610d9557610d9561233d565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008d6060015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008e6040015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008e608001518a81518110610eb157610eb161233d565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610efe91906123bd565b60608b0152505b505050806001019050610aae565b50600101610aa2565b50600101610a97565b50505092915050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610faf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610882565b610fb9600061159d565b565b60005473ffffffffffffffffffffffffffffffffffffffff16331461103c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610882565b73ffffffffffffffffffffffffffffffffffffffff81166110df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610882565b6110e88161159d565b50565b60008082516002811115611101576111016122d8565b148061111f575060018251600281111561111d5761111d6122d8565b145b1561112c57506001919050565b600282516002811115611141576111416122d8565b141561114f57506000919050565b81516040517ffe7995cf00000000000000000000000000000000000000000000000000000000815261088291906004016123d5565b6111c16040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b60016040820152602081018490526111db85858585611612565b816000018190525060008373ffffffffffffffffffffffffffffffffffffffff1663bd90df706040518163ffffffff1660e01b8152600401602060405180830381865afa158015611230573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112549190612307565b73ffffffffffffffffffffffffffffffffffffffff90811660009081526002602090815260408083208a82015185168452825280832060609a8b01519094168352929052205495820195909552949350505050565b60006112bc8585858660600151866119a4565b90505b949350505050565b6040805180820190915260008152606060208201526001855160028111156112f1576112f16122d8565b14156113f4576000604051806060016040528084815260200142610e1061131891906123bd565b81526020016113278888611ac7565b815250905060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff16815260200163f4f18d9060e01b8360405160240161136c9190612416565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152905291506112bf9050565b600085516002811115611409576114096122d8565b14156114ae5760006040518060a00160405280848152602001876020015173ffffffffffffffffffffffffffffffffffffffff16815260200142610e1061145091906123bd565b815260a088015160208201526040016114698888611b01565b815250905060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff16815260200163c04b8d5960e01b8360405160240161136c91906124b1565b6002855160028111156114c3576114c36122d8565b14156115685760006040518060a00160405280848152602001876020015173ffffffffffffffffffffffffffffffffffffffff16815260200142610e1061150a91906123bd565b815260a088015160208201526040016115238888611b01565b815250905060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff16815260200163f28c049860e01b8360405160240161136c91906124b1565b84516040517ffe7995cf00000000000000000000000000000000000000000000000000000000815261088291906004016123d5565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60408051808201909152600081526060602082015260018551600281111561163c5761163c6122d8565b141561175e5760006040518060c00160405280876040015173ffffffffffffffffffffffffffffffffffffffff168152602001876060015173ffffffffffffffffffffffffffffffffffffffff168152602001611698856108e2565b62ffffff1681526020016116ae42610e106123bd565b81526020016116bd8888611ac7565b8152600060209182015260408051808201825273ffffffffffffffffffffffffffffffffffffffff8881168252825185518216602482015285850151821660448201529285015162ffffff16606484015260608501516084840152608085015160a484015260a08501511660c4830152929350908201907fc7fbf4de000000000000000000000000000000000000000000000000000000009060e40161136c565b600085516002811115611773576117736122d8565b1415611881576000604051806101000160405280876040015173ffffffffffffffffffffffffffffffffffffffff168152602001876060015173ffffffffffffffffffffffffffffffffffffffff1681526020016117d0856108e2565b62ffffff16815260208881015173ffffffffffffffffffffffffffffffffffffffff169082015260400161180642610e106123bd565b815260a0880151602082015260400161181f8888611b01565b8152602001600073ffffffffffffffffffffffffffffffffffffffff16815250905060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff16815260200163414bf38960e01b8360405160240161136c91906124c4565b600285516002811115611896576118966122d8565b1415611568576000604051806101000160405280876040015173ffffffffffffffffffffffffffffffffffffffff168152602001876060015173ffffffffffffffffffffffffffffffffffffffff1681526020016118f3856108e2565b62ffffff16815260208881015173ffffffffffffffffffffffffffffffffffffffff169082015260400161192942610e106123bd565b815260a088015160208201526040016119428888611b01565b8152602001600073ffffffffffffffffffffffffffffffffffffffff16815250905060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff16815260200163db3e219860e01b8360405160240161136c91906124c4565b600085604001516119b757506000611abe565b83604001516119c857506001611abe565b6000611a258688602001516b033b2e3c9fd0803ce8000000868b606001516119f0919061253f565b6119fa919061257c565b60208901516b033b2e3c9fd0803ce8000000611a16898b61253f565b611a20919061257c565b611be8565b9050600086516002811115611a3c57611a3c6122d8565b1480611a5a5750600186516002811115611a5857611a586122d8565b145b15611a66579050611abe565b600286516002811115611a7b57611a7b6122d8565b1415611a8957159050611abe565b85516040517ffe7995cf00000000000000000000000000000000000000000000000000000000815261088291906004016123d5565b95945050505050565b60a0820151600090611aee84611ae9856b033b2e3c9fd0803ce800000061253f565b611b01565b611af8919061257c565b90505b92915050565b60008260e0015115611b1557506000611afb565b600083516002811115611b2a57611b2a6122d8565b1480611b485750600183516002811115611b4657611b466122d8565b145b15611b7b5760c083015161271090611b6090826125b7565b611b6a908461253f565b611b74919061257c565b9050611afb565b600283516002811115611b9057611b906122d8565b1415611bb35760c0830151611ba7906127106123bd565b611b6a6127108461253f565b82516040517ffe7995cf00000000000000000000000000000000000000000000000000000000815261088291906004016123d5565b6000611c286040518060400160405280600c81526020017f414141202d20616d6f756e740000000000000000000000000000000000000000815250611cd9565b611c3185611d68565b611c3a84611d68565b611c4383611d68565b611c4c82611d68565b611c5e611c5985876125b7565b611d68565b611c6b611c5983856125b7565b611c74866110eb565b611c9557611c8282846123bd565b611c8c85876123bd565b10159050611abe565b838510158015611ca55750818310155b15611cbe57611cb482846125b7565b611c8c85876125b7565b838510611ccc576001611ccf565b60005b9695505050505050565b6110e881604051602401611ced9190611f30565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f41304fac00000000000000000000000000000000000000000000000000000000179052611df5565b6110e881604051602401611d7e91815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff5b1bba9000000000000000000000000000000000000000000000000000000001790525b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b803560038110611e2557600080fd5b919050565b73ffffffffffffffffffffffffffffffffffffffff811681146110e857600080fd5b8035611e2581611e2a565b60008060008060008060c08789031215611e7057600080fd5b611e7987611e16565b95506020870135611e8981611e2a565b9450604087013593506060870135611ea081611e2a565b92506080870135915060a0870135611eb781611e2a565b809150509295509295509295565b6000815180845260005b81811015611eeb57602081850181015186830182015201611ecf565b81811115611efd576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611af86020830184611ec5565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610100810167ffffffffffffffff81118282101715611f9657611f96611f43565b60405290565b600082601f830112611fad57600080fd5b8135602067ffffffffffffffff80831115611fca57611fca611f43565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f8301168101818110848211171561200d5761200d611f43565b60405293845285810183019383810192508785111561202b57600080fd5b83870191505b8482101561205357813561204481611e2a565b83529183019190830190612031565b979650505050505050565b80358015158114611e2557600080fd5b6000806040838503121561208157600080fd5b823567ffffffffffffffff8082111561209957600080fd5b9084019061010082870312156120ae57600080fd5b6120b6611f72565b6120bf83611e16565b81526120cd60208401611e4c565b60208201526120de60408401611e4c565b60408201526120ef60608401611e4c565b606082015260808301358281111561210657600080fd5b61211288828601611f9c565b60808301525060a083013560a082015260c083013560c082015261213860e0840161205e565b60e0820152935061214e91505060208401611e4c565b90509250929050565b60208082528251608083830152805173ffffffffffffffffffffffffffffffffffffffff1660a08401520151604060c083015260009061219a60e0840182611ec5565b905060208401516040840152604084015115156060840152606084015160808401528091505092915050565b6000602082840312156121d857600080fd5b81356121e381611e2a565b9392505050565b6000806000806080858703121561220057600080fd5b843561220b81611e2a565b9350602085013561221b81611e2a565b9250604085013561222b81611e2a565b9396929550929360600135925050565b60006020828403121561224d57600080fd5b5035919050565b6000806040838503121561226757600080fd5b823561227281611e2a565b9150602083013561228281611e2a565b809150509250929050565b6000806000606084860312156122a257600080fd5b83356122ad81611e2a565b925060208401356122bd81611e2a565b915060408401356122cd81611e2a565b809150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60006020828403121561231957600080fd5b81516121e381611e2a565b60006020828403121561233657600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60408152600061237f6040830185611ec5565b90508260208301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156123d0576123d061238e565b500190565b6020810160038310612410577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6020815260008251606060208401526124326080840182611ec5565b905060208401516040840152604084015160608401528091505092915050565b6000815160a0845261246760a0850182611ec5565b905073ffffffffffffffffffffffffffffffffffffffff60208401511660208501526040830151604085015260608301516060850152608083015160808501528091505092915050565b602081526000611af86020830184612452565b6101008101611afb828473ffffffffffffffffffffffffffffffffffffffff80825116835280602083015116602084015262ffffff60408301511660408401528060608301511660608401526080820151608084015260a082015160a084015260c082015160c08401528060e08301511660e0840152505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156125775761257761238e565b500290565b6000826125b2577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000828210156125c9576125c961238e565b50039056fea2646970667358221220f48bf290d42d727585d0174d5aecb1c111d9a28593d6c27486ce6672041893ce64736f6c634300080a003360806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d00011790553480156200003a57600080fd5b506040805161018081019091526000908060c081018060018152604080518082018252600381526244414960e81b6020828101919091528301526012908201526305f5e100606082015260800160018152602001600081525081526020016040518060c001604052806002600a811115620000b957620000b962000b78565b815260408051808201825260048152635553444360e01b6020828101919091528301526006908201526305f5e100606082015260800160018152602001600081525081526020016040518060c001604052806003600a81111562000121576200012162000b78565b815260408051808201825260048152630ae8aa8960e31b602082810191909152830152601290820152644a817c8000606082015260800160028152602001600081525081526020016040518060c001604052806004600a8111156200018a576200018a62000b78565b815260408051808201825260048152634c494e4b60e01b6020828101919091528301526012908201526359682f00606082015260800160018152602001600081525081526020016040518060c001604052806005600a811115620001f257620001f262000b78565b815260408051808201825260048152631554d11560e21b602082810191909152830152601290820152633b023380606082015260800160018152602001600081525081526020016040518060c001604052806006600a8111156200025a576200025a62000b78565b815260408051808201825260058152640e6e88aa8960db1b602082810191909152830152601290820152644cd588640060608201526080016003815260200160009052905260408051610140810190915290915060009080608081018060078152602001604051806040016040528060048152602001636344414960e01b8152508152602001601260ff1681526020016305f5e100815260200160048081111562000309576200030962000b78565b8152602001600181525081526020016040518060c001604052806008600a81111562000339576200033962000b78565b81526040805180820182526005815264635553444360d81b6020828101919091528301526006908201526305f5e100606082015260800160048152602001600281525081526020016040518060c001604052806009600a811115620003a257620003a262000b78565b8152604080518082018252600581526418d554d11560da1b602082810191909152830152601290820152633b023380606082015260800160048152602001600581525081526020016040518060c00160405280600a808111156200040a576200040a62000b78565b81526040805180820182526005815264634c494e4b60d81b6020828101919091528301526012908201526359682f00606082015260800160048152602001600490529052905060005b600681101562000496576200048183826006811062000476576200047662000b8e565b6020020151620004db565b806200048d8162000ba4565b91505062000453565b5060005b6004811015620004d257620004bd82826004811062000476576200047662000b8e565b80620004c98162000ba4565b9150506200049a565b50505062000d14565b6000600282608001516004811115620004f857620004f862000b78565b14156200054e576040516200050d9062000a8c565b604051809103906000f0801580156200052a573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b03831617905590506200071e565b60038260800151600481111562000569576200056962000b78565b1415620005a4576040516200057e9062000a9a565b604051809103906000f0801580156200059b573d6000803e3d6000fd5b5090506200071e565b600182608001516004811115620005bf57620005bf62000b78565b1415620005f157816020015182602001518360400151604051620005e39062000aa8565b6200057e9392919062000c1e565b6004826080015160048111156200060c576200060c62000b78565b1415620006be576000600260008460a00151600a81111562000632576200063262000b78565b600a81111562000646576200064662000b78565b815260200190815260200160002060009054906101000a90046001600160a01b0316905082602001518360200151846040015183604051620006889062000ab6565b62000697949392919062000c5b565b604051809103906000f080158015620006b4573d6000803e3d6000fd5b509150506200071e565b60405162461bcd60e51b815260206004820152602b60248201527f74657374546f6b656e53756974653a204372656174696e6720756e6b6e6f776e60448201526a20746f6b656e207479706560a81b606482015260840160405180910390fd5b60005460208301516040516318caf8e360e31b8152620100009092046001600160a01b03169163c657c718916200075b9185919060040162000ca9565b600060405180830381600087803b1580156200077657600080fd5b505af11580156200078b573d6000803e3d6000fd5b50505050600082606001516008604051620007a69062000ac4565b91825260ff166020820152604001604051809103906000f080158015620007d1573d6000803e3d6000fd5b50905081600260008560000151600a811115620007f257620007f262000b78565b600a81111562000806576200080662000b78565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055508260600151600560008560000151600a8111156200085a576200085a62000b78565b600a8111156200086e576200086e62000b78565b8152602080820192909252604090810160009081209390935585516001600160a01b03861684526008909252909120805460ff1916600183600a811115620008ba57620008ba62000b78565b02179055508260800151600360008560000151600a811115620008e157620008e162000b78565b600a811115620008f557620008f562000b78565b81526020810191909152604001600020805460ff1916600183600481111562000922576200092262000b78565b0217905550604080518082019091526001600160a01b0380841682528281166020808401918252600780546001810182556000918252945160029095027fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688810180549686166001600160a01b031997881617905592517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c689909301805493909416929094169190911790915584015184519091600491600a811115620009eb57620009eb62000b78565b600a811115620009ff57620009ff62000b78565b8152602001908152602001600020908051906020019062000a2292919062000ad2565b5080600660008560000151600a81111562000a415762000a4162000b78565b600a81111562000a555762000a5562000b78565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550505050565b610ab1806200285183390190565b611224806200330283390190565b611758806200452683390190565b6117098062005c7e83390190565b6106ca806200738783390190565b82805462000ae09062000cd7565b90600052602060002090601f01602090048101928262000b04576000855562000b4f565b82601f1062000b1f57805160ff191683800117855562000b4f565b8280016001018555821562000b4f579182015b8281111562000b4f57825182559160200191906001019062000b32565b5062000b5d92915062000b61565b5090565b5b8082111562000b5d576000815560010162000b62565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600060001982141562000bc757634e487b7160e01b600052601160045260246000fd5b5060010190565b6000815180845260005b8181101562000bf65760208185018101518683018201520162000bd8565b8181111562000c09576000602083870101525b50601f01601f19169290920160200192915050565b60608152600062000c33606083018662000bce565b828103602084015262000c47818662000bce565b91505060ff83166040830152949350505050565b60808152600062000c70608083018762000bce565b828103602084015262000c84818762000bce565b60ff95909516604084015250506001600160a01b039190911660609091015292915050565b6001600160a01b038316815260406020820181905260009062000ccf9083018462000bce565b949350505050565b600181811c9082168062000cec57607f821691505b6020821081141562000d0e57634e487b7160e01b600052602260045260246000fd5b50919050565b611b2d8062000d246000396000f3fe6080604052600436106101635760003560e01c80638eb86e8b116100c0578063c6c3bbe611610074578063d051a62211610059578063d051a62214610490578063eebab8ef146104b0578063fa7626d4146104d057600080fd5b8063c6c3bbe614610433578063c74912d21461045357600080fd5b80639b140a85116100a55780639b140a85146103e6578063b36ba20814610406578063ba414fa61461040e57600080fd5b80638eb86e8b1461038357806398cdaadf146103a357600080fd5b80636a72bde71161011757806388327863116100fc578063883278631461030857806388f776a2146103365780638a3177a31461035657600080fd5b80636a72bde7146102c45780636ca42ae3146102e657600080fd5b8063440864fa11610148578063440864fa146102025780634b57b0be1461022f57806367b426451461028157600080fd5b806304bc3b1c1461016f57806310c7f0b9146101b557600080fd5b3661016a57005b600080fd5b34801561017b57600080fd5b5061019f61018a3660046116f6565b60086020526000908152604090205460ff1681565b6040516101ac9190611742565b60405180910390f35b3480156101c157600080fd5b506101d56101d036600461175c565b6104ea565b6040805173ffffffffffffffffffffffffffffffffffffffff9384168152929091166020830152016101ac565b34801561020e57600080fd5b5061022261021d366004611784565b610530565b6040516101ac91906117cb565b34801561023b57600080fd5b5060015461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101ac565b34801561028d57600080fd5b5061025c61029c366004611784565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156102d057600080fd5b506102e46102df36600461181c565b6105ca565b005b3480156102f257600080fd5b506102fb610730565b6040516101ac919061186b565b34801561031457600080fd5b506103286103233660046118d4565b6107b5565b6040519081526020016101ac565b34801561034257600080fd5b506102e461035136600461190b565b610888565b34801561036257600080fd5b50610328610371366004611784565b60056020526000908152604090205481565b34801561038f57600080fd5b506102e461039e366004611954565b6108b9565b3480156103af57600080fd5b5061025c6103be366004611784565b60066020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156103f257600080fd5b506102e4610401366004611993565b610a73565b6102e4610b22565b34801561041a57600080fd5b50610423610ba0565b60405190151581526020016101ac565b34801561043f57600080fd5b506102e461044e3660046119b3565b610d00565b34801561045f57600080fd5b5061048361046e366004611784565b60036020526000908152604090205460ff1681565b6040516101ac91906119d3565b34801561049c57600080fd5b506103286104ab36600461190b565b610daf565b3480156104bc57600080fd5b506102e46104cb366004611954565b610e8b565b3480156104dc57600080fd5b506000546104239060ff1681565b600781815481106104fa57600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff91821692501682565b60046020526000908152604090208054610549906119e7565b80601f0160208091040260200160405190810160405280929190818152602001828054610575906119e7565b80156105c25780601f10610597576101008083540402835291602001916105c2565b820191906000526020600020905b8154815290600101906020018083116105a557829003601f168201915b505050505081565b6000546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152620100009092049091169063ca669fa790602401600060405180830381600087803b15801561063e57600080fd5b505af1158015610652573d6000803e3d6000fd5b505050506002600085600a81111561066c5761066c611713565b600a81111561067d5761067d611713565b8152602081019190915260409081016000205490517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490529091169063095ea7b3906044016020604051808303816000875af1158015610705573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107299190611a3b565b5050505050565b60606007805480602002602001604051908101604052809291908181526020016000905b828210156107ac5760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff908116835260019182015416828401529083529092019101610754565b50505050905090565b60006002600084600a8111156107cd576107cd611713565b600a8111156107de576107de611713565b8152602081019190915260409081016000205490517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152909116906370a0823190602401602060405180830381865afa15801561085d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108819190611a5d565b9392505050565b6108b48383837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6105ca565b505050565b60016003600085600a8111156108d1576108d1611713565b600a8111156108e2576108e2611713565b815260208101919091526040016000205460ff16600481111561090757610907611713565b14610999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f74657374546f6b656e53756974653a20547279696e6720746f206275726e206160448201527f206e6f6e2d6e6f726d616c20746f6b656e00000000000000000000000000000060648201526084015b60405180910390fd5b6002600084600a8111156109af576109af611713565b600a8111156109c0576109c0611713565b8152602081019190915260409081016000205490517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526024820184905290911690639dc29fac906044015b6020604051808303816000875af1158015610a49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6d9190611a3b565b50505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604081205460ff169081600a811115610aaf57610aaf611713565b1415610b17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f20746f6b656e2077697468207375636820616464726573730000000000006044820152606401610990565b610a6d818484610888565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015610b8c57600080fd5b505af1158015610729573d6000803e3d6000fd5b60008054610100900460ff1615610bc05750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610cfb5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610c65917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc491608001611a76565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052610c9d91611abe565b6000604051808303816000865af19150503d8060008114610cda576040519150601f19603f3d011682016040523d82523d6000602084013e610cdf565b606091505b5091505080806020019051810190610cf79190611a3b565b9150505b919050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604081205460ff169081600a811115610d3c57610d3c611713565b1415610da4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f20746f6b656e2077697468207375636820616464726573730000000000006044820152606401610990565b610a6d818484610e8b565b60006002600085600a811115610dc757610dc7611713565b600a811115610dd857610dd8611713565b8152602081019190915260409081016000205490517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301529091169063dd62ed3e90604401602060405180830381865afa158015610e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e839190611a5d565b949350505050565b60026003600085600a811115610ea357610ea3611713565b600a811115610eb457610eb4611713565b815260208101919091526040016000205460ff166004811115610ed957610ed9611713565b1415610ff6576000546040517fc88a5e6d000000000000000000000000000000000000000000000000000000008152306004820152602481018390526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c88a5e6d90604401600060405180830381600087803b158015610f5657600080fd5b505af1158015610f6a573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015610fd857600080fd5b505af1158015610fec573d6000803e3d6000fd5b505050505061163c565b600380600085600a81111561100d5761100d611713565b600a81111561101e5761101e611713565b815260208101919091526040016000205460ff16600481111561104357611043611713565b14156111aa576000546040517fc88a5e6d000000000000000000000000000000000000000000000000000000008152306004820152602481018390526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c88a5e6d90604401600060405180830381600087803b1580156110c057600080fd5b505af11580156110d4573d6000803e3d6000fd5b505050506002600084600a8111156110ee576110ee611713565b600a8111156110ff576110ff611713565b8152602081019190915260409081016000205490517fa1903eab00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a1903eab90839060240160206040518083038185885af115801561117f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906111a49190611a5d565b5061163c565b60046003600085600a8111156111c2576111c2611713565b600a8111156111d3576111d3611713565b815260208101919091526040016000205460ff1660048111156111f8576111f8611713565b141561148f5760006002600085600a81111561121657611216611713565b600a81111561122757611227611713565b815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c49190611ada565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600860205260409020549091506112fb9060ff163084610e8b565b8073ffffffffffffffffffffffffffffffffffffffff1663095ea7b36002600087600a81111561132d5761132d611713565b600a81111561133e5761133e611713565b81526020810191909152604090810160002054905160e083901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602481018590526044016020604051808303816000875af11580156113c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e69190611a3b565b506002600085600a8111156113fd576113fd611713565b600a81111561140e5761140e611713565b8152602081019190915260409081016000205490517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810184905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f1990604401600060405180830381600087803b158015610fd857600080fd5b60016003600085600a8111156114a7576114a7611713565b600a8111156114b8576114b8611713565b815260208101919091526040016000205460ff1660048111156114dd576114dd611713565b14156115b4576002600084600a8111156114f9576114f9611713565b600a81111561150a5761150a611713565b8152602081019190915260409081016000205490517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f19906044016020604051808303816000875af1158015611590573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a49190611a3b565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f74657374546f6b656e53756974653a20547279696e6720746f207472616e736660448201527f657220756e6b6e6f776e20746f6b656e000000000000000000000000000000006064820152608401610990565b6002600084600a81111561165257611652611713565b600a81111561166357611663611713565b8152602081019190915260409081016000205490517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490529091169063a9059cbb90604401610a2a565b73ffffffffffffffffffffffffffffffffffffffff811681146116f357600080fd5b50565b60006020828403121561170857600080fd5b8135610881816116d1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60208101600b831061175657611756611713565b91905290565b60006020828403121561176e57600080fd5b5035919050565b8035600b8110610cfb57600080fd5b60006020828403121561179657600080fd5b61088182611775565b60005b838110156117ba5781810151838201526020016117a2565b83811115610a6d5750506000910152565b60208152600082518060208401526117ea81604085016020870161179f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000806080858703121561183257600080fd5b61183b85611775565b9350602085013561184b816116d1565b9250604085013561185b816116d1565b9396929550929360600135925050565b602080825282518282018190526000919060409081850190868401855b828110156118c7578151805173ffffffffffffffffffffffffffffffffffffffff90811686529087015116868501529284019290850190600101611888565b5091979650505050505050565b600080604083850312156118e757600080fd5b6118f083611775565b91506020830135611900816116d1565b809150509250929050565b60008060006060848603121561192057600080fd5b61192984611775565b92506020840135611939816116d1565b91506040840135611949816116d1565b809150509250925092565b60008060006060848603121561196957600080fd5b61197284611775565b92506020840135611982816116d1565b929592945050506040919091013590565b6000806000606084860312156119a857600080fd5b8335611929816116d1565b6000806000606084860312156119c857600080fd5b8335611972816116d1565b602081016005831061175657611756611713565b600181811c908216806119fb57607f821691505b60208210811415611a35577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600060208284031215611a4d57600080fd5b8151801515811461088157600080fd5b600060208284031215611a6f57600080fd5b5051919050565b7fffffffff000000000000000000000000000000000000000000000000000000008316815260008251611ab081600485016020870161179f565b919091016004019392505050565b60008251611ad081846020870161179f565b9190910192915050565b600060208284031215611aec57600080fd5b8151610881816116d156fea264697066735822122010fe735ed069aca27931edce4ba2ff14ec7886bf21b0eea685a884f9200fb49e64736f6c634300080a003360c0604052600d60808190526c2bb930b83832b21022ba3432b960991b60a090815261002e916000919061007a565b50604080518082019091526004808252630ae8aa8960e31b602090920191825261005a9160019161007a565b506002805460ff1916601217905534801561007457600080fd5b5061014e565b82805461008690610113565b90600052602060002090601f0160209004810192826100a857600085556100ee565b82601f106100c157805160ff19168380011785556100ee565b828001600101855582156100ee579182015b828111156100ee5782518255916020019190600101906100d3565b506100fa9291506100fe565b5090565b5b808211156100fa57600081556001016100ff565b600181811c9082168061012757607f821691505b6020821081141561014857634e487b7160e01b600052602260045260246000fd5b50919050565b6109548061015d6000396000f3fe6080604052600436106100cb5760003560e01c806340c10f1911610074578063a9059cbb1161004e578063a9059cbb14610225578063d0e30db014610245578063dd62ed3e1461024d57600080fd5b806340c10f19146101c357806370a08231146101e357806395d89b411461021057600080fd5b806323b872dd116100a557806323b872dd146101575780632e1a7d4d14610177578063313ce5671461019757600080fd5b806306fdde03146100df578063095ea7b31461010a57806318160ddd1461013a57600080fd5b366100da576100d8610285565b005b600080fd5b3480156100eb57600080fd5b506100f46102e0565b6040516101019190610703565b60405180910390f35b34801561011657600080fd5b5061012a61012536600461079f565b61036e565b6040519015158152602001610101565b34801561014657600080fd5b50475b604051908152602001610101565b34801561016357600080fd5b5061012a6101723660046107c9565b6103e7565b34801561018357600080fd5b506100d8610192366004610805565b6105fe565b3480156101a357600080fd5b506002546101b19060ff1681565b60405160ff9091168152602001610101565b3480156101cf57600080fd5b506100d86101de36600461079f565b6106a4565b3480156101ef57600080fd5b506101496101fe36600461081e565b60036020526000908152604090205481565b34801561021c57600080fd5b506100f46106e2565b34801561023157600080fd5b5061012a61024036600461079f565b6106ef565b6100d8610285565b34801561025957600080fd5b50610149610268366004610839565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102a490849061089b565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102ed906108b3565b80601f0160208091040260200160405190810160405280929190818152602001828054610319906108b3565b80156103665780601f1061033b57610100808354040283529160200191610366565b820191906000526020600020905b81548152906001019060200180831161034957829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103d69086815260200190565b60405180910390a350600192915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561041957600080fd5b73ffffffffffffffffffffffffffffffffffffffff8416331480159061048f575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105175773ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020548211156104d157600080fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915281208054849290610511908490610907565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061054c908490610907565b909155505073ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260408120805484929061058690849061089b565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516105ec91815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561061a57600080fd5b3360009081526003602052604081208054839290610639908490610907565b9091555050604051339082156108fc029083906000818181858888f1935050505015801561066b573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260036020526040812080548392906106d990849061089b565b90915550505050565b600180546102ed906108b3565b60006106fc3384846103e7565b9392505050565b600060208083528351808285015260005b8181101561073057858101830151858201604001528201610714565b81811115610742576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461079a57600080fd5b919050565b600080604083850312156107b257600080fd5b6107bb83610776565b946020939093013593505050565b6000806000606084860312156107de57600080fd5b6107e784610776565b92506107f560208501610776565b9150604084013590509250925092565b60006020828403121561081757600080fd5b5035919050565b60006020828403121561083057600080fd5b6106fc82610776565b6000806040838503121561084c57600080fd5b61085583610776565b915061086360208401610776565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156108ae576108ae61086c565b500190565b600181811c908216806108c757607f821691505b60208210811415610901577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000828210156109195761091961086c565b50039056fea26469706673582212206ec943fa4e3b70d8fca6c25b6aa26fa18e8f8952ce3bc4d5afcb443bf3097c0564736f6c634300080a003360806040526000600255600060035534801561001a57600080fd5b506111fa8061002a6000396000f3fe60806040526004361061016e5760003560e01c80637a28fb88116100cb578063bdd17e1c1161007f578063dd62ed3e11610059578063dd62ed3e146103ee578063ee7a7c0414610441578063f5eb42dc1461046157600080fd5b8063bdd17e1c146103ad578063cdb9a21c146103c3578063d5002f2e146103d957600080fd5b8063a1903eab116100b0578063a1903eab1461035a578063a457c2d71461036d578063a9059cbb1461038d57600080fd5b80637a28fb88146102f457806395d89b411461031457600080fd5b806323b872dd1161012257806337cfdaca1161010757806337cfdaca1461020d57806339509351146102b457806370a08231146102d457600080fd5b806323b872dd14610278578063313ce5671461029857600080fd5b806318160ddd1161015357806318160ddd1461020d578063192084511461023057806322301f6e1461025057600080fd5b806306fdde0314610185578063095ea7b3146101dd57600080fd5b366101805761017d6000610481565b50005b600080fd5b34801561019157600080fd5b5060408051808201909152601781527f4c6971756964207374616b656420457468657220322e3000000000000000000060208201525b6040516101d49190610f63565b60405180910390f35b3480156101e957600080fd5b506101fd6101f8366004610fff565b610545565b60405190151581526020016101d4565b34801561021957600080fd5b5061022261055b565b6040519081526020016101d4565b34801561023c57600080fd5b5061022261024b366004611029565b61056b565b34801561025c57600080fd5b5061027661026b366004611042565b600391909155600255565b005b34801561028457600080fd5b506101fd610293366004611064565b6105ab565b3480156102a457600080fd5b50604051601281526020016101d4565b3480156102c057600080fd5b506101fd6102cf366004610fff565b610696565b3480156102e057600080fd5b506102226102ef3660046110a0565b6106d9565b34801561030057600080fd5b5061022261030f366004611029565b61070e565b34801561032057600080fd5b5060408051808201909152600581527f737445544800000000000000000000000000000000000000000000000000000060208201526101c7565b6102226103683660046110a0565b61073a565b34801561037957600080fd5b506101fd610388366004610fff565b610745565b34801561039957600080fd5b506101fd6103a8366004610fff565b6107f9565b3480156103b957600080fd5b5061022260035481565b3480156103cf57600080fd5b5061022260025481565b3480156103e557600080fd5b50610222610806565b3480156103fa57600080fd5b506102226104093660046110bb565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b34801561044d57600080fd5b5061027661045c366004610fff565b610811565b34801561046d57600080fd5b5061022261047c3660046110a0565b61081f565b60003334806104f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f5a45524f5f4445504f534954000000000000000000000000000000000000000060448201526064015b60405180910390fd5b60006104fc8261056b565b9050806105065750805b8160036000828254610518919061111d565b909155506105289050838261084a565b61053383838761093b565b61053d8382610992565b949350505050565b60006105523384846109ea565b50600192915050565b600061056660035490565b905090565b60008061057760035490565b9050806105875750600092915050565b6105a48161059e61059760025490565b8690610b52565b90610b5e565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001602090815260408083203384529091528120548281101561066c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f5452414e534645525f414d4f554e545f455843454544535f414c4c4f57414e4360448201527f450000000000000000000000000000000000000000000000000000000000000060648201526084016104e8565b610677858585610b6a565b61068b85336106868487610bef565b6109ea565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916105529185906106869086610bfb565b73ffffffffffffffffffffffffffffffffffffffff81166000908152602081905260408120546107089061070e565b92915050565b60008061071a60025490565b90508061072a5750600092915050565b6105a48161059e61059760035490565b600061070882610481565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156107e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4445435245415345445f414c4c4f57414e43455f42454c4f575f5a45524f000060448201526064016104e8565b6107ef33856106868487610bef565b5060019392505050565b6000610552338484610b6a565b600061056660025490565b61081b8282610c07565b5050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040812054610708565b73ffffffffffffffffffffffffffffffffffffffff82166108c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4d494e545f544f5f5448455f5a45524f5f41444452455353000000000000000060448201526064016104e8565b80600260008282546108d9919061111d565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205461090e9082610bfb565b73ffffffffffffffffffffffffffffffffffffffff90921660009081526020819052604090209190915550565b6040805183815273ffffffffffffffffffffffffffffffffffffffff83811660208301528516917fed8dd430b1e4bba98e943dc5b157cf7b54d9e12916d6c474ff5733a95001d03b910160405180910390a2505050565b73ffffffffffffffffffffffffffffffffffffffff821660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6109d58461070e565b60405190815260200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff8316610a67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f415050524f56455f46524f4d5f5a45524f5f414444524553530000000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff8216610ae4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f415050524f56455f544f5f5a45524f5f4144445245535300000000000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006105a48284611135565b60006105a48284611172565b6000610b758261056b565b9050610b82848483610d64565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610be191815260200190565b60405180910390a350505050565b60006105a482846111ad565b60006105a4828461111d565b73ffffffffffffffffffffffffffffffffffffffff8216610c84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4255524e5f46524f4d5f5448455f5a45524f5f4144445245535300000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205480821115610d14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4255524e5f414d4f554e545f455843454544535f42414c414e4345000000000060448201526064016104e8565b8160026000828254610d2691906111ad565b90915550610d3690508183610bef565b73ffffffffffffffffffffffffffffffffffffffff9093166000908152602081905260409020929092555050565b73ffffffffffffffffffffffffffffffffffffffff8316610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f5452414e534645525f46524f4d5f5448455f5a45524f5f41444452455353000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff8216610e5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f5452414e534645525f544f5f5448455f5a45524f5f414444524553530000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205480821115610eee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5452414e534645525f414d4f554e545f455843454544535f42414c414e43450060448201526064016104e8565b610ef88183610bef565b73ffffffffffffffffffffffffffffffffffffffff8086166000908152602081905260408082209390935590851681522054610f349083610bfb565b73ffffffffffffffffffffffffffffffffffffffff909316600090815260208190526040902092909255505050565b600060208083528351808285015260005b81811015610f9057858101830151858201604001528201610f74565b81811115610fa2576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ffa57600080fd5b919050565b6000806040838503121561101257600080fd5b61101b83610fd6565b946020939093013593505050565b60006020828403121561103b57600080fd5b5035919050565b6000806040838503121561105557600080fd5b50508035926020909101359150565b60008060006060848603121561107957600080fd5b61108284610fd6565b925061109060208501610fd6565b9150604084013590509250925092565b6000602082840312156110b257600080fd5b6105a482610fd6565b600080604083850312156110ce57600080fd5b6110d783610fd6565b91506110e560208401610fd6565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611130576111306110ee565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561116d5761116d6110ee565b500290565b6000826111a8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000828210156111bf576111bf6110ee565b50039056fea2646970667358221220a5b4f31162ba2b8b3424cef84b31ef91d05a825243602b5fdf758ffb49b8246364736f6c634300080a003360a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a003360c06040523480156200001157600080fd5b506040516200170938038062001709833981016040819052620000349162000266565b8351849084906200004d906003906020850190620000f3565b50805162000063906004906020840190620000f3565b505050620000806200007a6200009d60201b60201c565b620000a1565b60ff9091166080526001600160a01b031660a05250620003479050565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b82805462000101906200030a565b90600052602060002090601f01602090048101928262000125576000855562000170565b82601f106200014057805160ff191683800117855562000170565b8280016001018555821562000170579182015b828111156200017057825182559160200191906001019062000153565b506200017e92915062000182565b5090565b5b808211156200017e576000815560010162000183565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c157600080fd5b81516001600160401b0380821115620001de57620001de62000199565b604051601f8301601f19908116603f0116810190828211818310171562000209576200020962000199565b816040528381526020925086838588010111156200022657600080fd5b600091505b838210156200024a57858201830151818301840152908201906200022b565b838211156200025c5760008385830101525b9695505050505050565b600080600080608085870312156200027d57600080fd5b84516001600160401b03808211156200029557600080fd5b620002a388838901620001af565b95506020870151915080821115620002ba57600080fd5b50620002c987828801620001af565b935050604085015160ff81168114620002e157600080fd5b60608601519092506001600160a01b0381168114620002ff57600080fd5b939692955090935050565b600181811c908216806200031f57607f821691505b602082108114156200034157634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05161138e6200037b600039600081816101f70152818161041f0152610600015260006101a2015261138e6000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80636f307dc3116100b257806395d89b4111610081578063a9059cbb11610066578063a9059cbb146102b5578063dd62ed3e146102c8578063f2fde38b1461030e57600080fd5b806395d89b411461029a578063a457c2d7146102a257600080fd5b80636f307dc3146101f257806370a082311461023e578063715018a6146102745780638da5cb5b1461027c57600080fd5b806323b872dd116100ee57806323b872dd14610188578063313ce5671461019b57806339509351146101cc57806340c10f19146101df57600080fd5b806306fdde0314610120578063095ea7b31461013e57806318160ddd146101615780631e9a695014610173575b600080fd5b610128610321565b604051610135919061112d565b60405180910390f35b61015161014c3660046111c9565b6103b3565b6040519015158152602001610135565b6002545b604051908152602001610135565b6101866101813660046111c9565b6103c9565b005b6101516101963660046111f3565b610491565b60405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610135565b6101516101da3660046111c9565b61057c565b6101866101ed3660046111c9565b6105c5565b6102197f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b61016561024c36600461122f565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610186610691565b60055473ffffffffffffffffffffffffffffffffffffffff16610219565b61012861071e565b6101516102b03660046111c9565b61072d565b6101516102c33660046111c9565b610805565b6101656102d6366004611251565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b61018661031c36600461122f565b610812565b60606003805461033090611284565b80601f016020809104026020016040519081016040528092919081815260200182805461035c90611284565b80156103a95780601f1061037e576101008083540402835291602001916103a9565b820191906000526020600020905b81548152906001019060200180831161038c57829003601f168201915b5050505050905090565b60006103c0338484610942565b50600192915050565b6103d33382610af5565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015610468573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048c91906112d8565b505050565b600061049e848484610ce2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6105718533858403610942565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916103c09185906105c0908690611329565b610942565b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906323b872dd906064016020604051808303816000875af115801561065e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068291906112d8565b5061068d8282610f96565b5050565b60055473ffffffffffffffffffffffffffffffffffffffff163314610712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161055b565b61071c60006110b6565b565b60606004805461033090611284565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156107ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161055b565b6107fb3385858403610942565b5060019392505050565b60006103c0338484610ce2565b60055473ffffffffffffffffffffffffffffffffffffffff163314610893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161055b565b73ffffffffffffffffffffffffffffffffffffffff8116610936576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161055b565b61093f816110b6565b50565b73ffffffffffffffffffffffffffffffffffffffff83166109e4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff8216610a87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8216610b98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015610c4e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290610c8a908490611341565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff8216610e28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610ede576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610f22908490611329565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f8891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161055b565b80600260008282546110259190611329565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152602081905260408120805483929061105f908490611329565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208083528351808285015260005b8181101561115a5785810183015185820160400152820161113e565b8181111561116c576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146111c457600080fd5b919050565b600080604083850312156111dc57600080fd5b6111e5836111a0565b946020939093013593505050565b60008060006060848603121561120857600080fd5b611211846111a0565b925061121f602085016111a0565b9150604084013590509250925092565b60006020828403121561124157600080fd5b61124a826111a0565b9392505050565b6000806040838503121561126457600080fd5b61126d836111a0565b915061127b602084016111a0565b90509250929050565b600181811c9082168061129857607f821691505b602082108114156112d2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156112ea57600080fd5b8151801515811461124a57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561133c5761133c6112fa565b500190565b600082821015611353576113536112fa565b50039056fea26469706673582212203a6db30cd3c097921df4156794aa7973eb848711deeb2cffd7c54a9df1fdb0a564736f6c634300080a003360a060405234801561001057600080fd5b506040516106ca3803806106ca83398101604081905261002f9161006c565b60009190915560ff166080526001805460506001600160501b031991821681179092556004805490911690911790554260028190556003556100a2565b6000806040838503121561007f57600080fd5b82519150602083015160ff8116811461009757600080fd5b809150509250929050565b60805161060e6100bc600039600060d3015261060e6000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80639a6fc8f511610081578063d62ada111161005b578063d62ada11146102dc578063f7a30806146102f4578063feaf968c1461030757600080fd5b80639a6fc8f5146101cd578063bd18ad531461023a578063cd653afc1461024d57600080fd5b806354fd4d50116100b257806354fd4d501461012d57806367e8d83d1461013c5780637284e4161461018e57600080fd5b8063313ce567146100ce5780633fd0875f1461010c575b600080fd5b6100f57f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020015b60405180910390f35b6004546a0100000000000000000000900460ff166040516101039190610441565b60405160018152602001610103565b61018c61014a366004610482565b600480549115156c01000000000000000000000000027fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff909216919091179055565b005b604080518082018252600c81527f7072696365206f7261636c6500000000000000000000000000000000000000006020820152905161010391906104ab565b6102036101db36600461053d565b60015460005460025460035460045469ffffffffffffffffffff948516941691939590929450565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610103565b61018c610248366004610558565b61030f565b61018c61025b366004610579565b6001805469ffffffffffffffffffff9586167fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090911617905560029290925560035560048054919092167fffffffffffffffffffffffffffffffffffffffff00ff00000000000000000000909116176b020000000000000000000000179055565b6102e461035f565b6040519015158152602001610103565b61018c6103023660046105bf565b600055565b610203610385565b600480548291907fffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff166b01000000000000000000000083600281111561035757610357610412565b021790555050565b600454600090610380906b010000000000000000000000900460ff166103d6565b905090565b60008060008060006004600c9054906101000a900460ff16156103a757600080fd5b505060015460005460025460035460045469ffffffffffffffffffff9485169893975091955093509190911690565b600060028260028111156103ec576103ec610412565b14156103f757600080fd5b600182600281111561040b5761040b610412565b1492915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016006831061047c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561049457600080fd5b813580151581146104a457600080fd5b9392505050565b600060208083528351808285015260005b818110156104d8578581018301518582016040015282016104bc565b818111156104ea576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803569ffffffffffffffffffff8116811461053857600080fd5b919050565b60006020828403121561054f57600080fd5b6104a48261051e565b60006020828403121561056a57600080fd5b8135600381106104a457600080fd5b6000806000806080858703121561058f57600080fd5b6105988561051e565b935060208501359250604085013591506105b46060860161051e565b905092959194509250565b6000602082840312156105d157600080fd5b503591905056fea264697066735822122014874f7a973b86501c4c1a8be32490fe902c8f088ee234d25f9b2497e19f9e5264736f6c634300080a0033a26469706673582212202a612a856366d8e766dd309972cf906ff8978a23c51db1e98d7ee17dbd924e1c64736f6c634300080a0033"; - -type CurveLPPathFinderTestConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: CurveLPPathFinderTestConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class CurveLPPathFinderTest__factory extends ContractFactory { - constructor(...args: CurveLPPathFinderTestConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): CurveLPPathFinderTest { - return super.attach(address) as CurveLPPathFinderTest; - } - override connect(signer: Signer): CurveLPPathFinderTest__factory { - return super.connect(signer) as CurveLPPathFinderTest__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): CurveLPPathFinderTestInterface { - return new utils.Interface(_abi) as CurveLPPathFinderTestInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): CurveLPPathFinderTest { - return new Contract( - address, - _abi, - signerOrProvider - ) as CurveLPPathFinderTest; - } -} diff --git a/src/types/factories/contracts/test/pathfinder/CurveLPPathFinder.t.sol/index.ts b/src/types/factories/contracts/test/pathfinder/CurveLPPathFinder.t.sol/index.ts deleted file mode 100644 index fb9dcea2..00000000 --- a/src/types/factories/contracts/test/pathfinder/CurveLPPathFinder.t.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { CurveLPPathFinderTest__factory } from "./CurveLPPathFinderTest__factory"; diff --git a/src/types/factories/contracts/test/pathfinder/CurvePathFinder.t.sol/CurvePathFinderTest__factory.ts b/src/types/factories/contracts/test/pathfinder/CurvePathFinder.t.sol/CurvePathFinderTest__factory.ts deleted file mode 100644 index 6945ddd1..00000000 --- a/src/types/factories/contracts/test/pathfinder/CurvePathFinder.t.sol/CurvePathFinderTest__factory.ts +++ /dev/null @@ -1,750 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - CurvePathFinderTest, - CurvePathFinderTestInterface, -} from "../../../../../contracts/test/pathfinder/CurvePathFinder.t.sol/CurvePathFinderTest"; - -const _abi = [ - { - inputs: [ - { - internalType: "enum SwapOperation", - name: "", - type: "uint8", - }, - ], - name: "UnsupportedSwapOperation", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "", - type: "address", - }, - ], - name: "log_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "log_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - name: "log_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "int256", - name: "", - type: "int256", - }, - ], - name: "log_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "address", - name: "val", - type: "address", - }, - ], - name: "log_named_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes", - name: "val", - type: "bytes", - }, - ], - name: "log_named_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes32", - name: "val", - type: "bytes32", - }, - ], - name: "log_named_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - ], - name: "log_named_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "string", - name: "val", - type: "string", - }, - ], - name: "log_named_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - ], - name: "log_named_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "log_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "logs", - type: "event", - }, - { - inputs: [], - name: "IS_TEST", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bool", - name: "withUnderlyings", - type: "bool", - }, - ], - name: "_setUpCurve", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "cft", - outputs: [ - { - internalType: "contract CreditFacadeTestSuite", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditConfigurator", - outputs: [ - { - internalType: "contract CreditConfigurator", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditFacade", - outputs: [ - { - internalType: "contract CreditFacade", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditManager", - outputs: [ - { - internalType: "contract ICreditManagerV2", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "curveAdapter", - outputs: [ - { - internalType: "contract ICurveV1Adapter", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "curveLPPathFinder", - outputs: [ - { - internalType: "contract CurveLPPathFinder", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "curveMetaAdapter", - outputs: [ - { - internalType: "contract ICurveV1Adapter", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "curvePathFinder", - outputs: [ - { - internalType: "contract CurvePathFinder", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "curveV1MetaMock", - outputs: [ - { - internalType: "contract CurveV1MetapoolMock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "curveV1Mock", - outputs: [ - { - internalType: "contract CurveV1Mock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "failed", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "setUp", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_PCV_01_addPool_correctly_sets_values", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_PCV_02_setGasUsage_correctly_sets_values", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_PCV_03_getBestDirectPairSwap_returns_empty_quote_for_unknown_tokens", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_PCV_04_getBestDirectPairSwap_returns_empty_quote_for_unknown_tokens", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountIn", - type: "uint256", - }, - { - internalType: "uint256", - name: "slippage", - type: "uint256", - }, - { - internalType: "bool", - name: "isAll", - type: "bool", - }, - { - internalType: "bool", - name: "externalSlippage", - type: "bool", - }, - ], - name: "test_PCV_05_getBestDirectPairSwap_returns_correct_swapQuote", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountIn", - type: "uint256", - }, - { - internalType: "uint256", - name: "slippage", - type: "uint256", - }, - { - internalType: "bool", - name: "isAll", - type: "bool", - }, - { - internalType: "bool", - name: "externalSlippage", - type: "bool", - }, - ], - name: "test_PCV_06_getBestDirectPairSwap_returns_correct_swapQuote", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "tokenMasksMap", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "underlying", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "uniV2adapter", - outputs: [ - { - internalType: "contract IUniswapV2Adapter", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "uniV2mock", - outputs: [ - { - internalType: "contract UniswapV2Mock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "uniV2pathFinder", - outputs: [ - { - internalType: "contract UniswapV2PathFinder", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "uniV3adapter", - outputs: [ - { - internalType: "contract IUniswapV3Adapter", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "uniV3mock", - outputs: [ - { - internalType: "contract UniswapV3Mock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "uniV3pathFinder", - outputs: [ - { - internalType: "contract UniswapV3PathFinder", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "yearnAdapter", - outputs: [ - { - internalType: "contract YearnV2Adapter", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "yearnMock", - outputs: [ - { - internalType: "contract YearnV2Mock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "yearnPathFinder", - outputs: [ - { - internalType: "contract YearnPathFinder", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x60806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d000117905534801561003957600080fd5b5062019428806200004b6000396000f3fe60806040523480156200001157600080fd5b50600436106200020d5760003560e01c80639b6a80a71162000125578063df51443311620000af578063f9aa028a116200007a578063f9aa028a146200053e578063fa4954cf146200055f578063fa7626d41462000569578063fca2cea5146200057757600080fd5b8063df51443314620004b5578063eeef8dd014620004d6578063f310c6da14620004f7578063f67c5bd0146200051857600080fd5b8063c1da9ced11620000f0578063c1da9ced146200043b578063cac283c81462000452578063ceab13861462000473578063d8d7ca3c146200049457600080fd5b80639b6a80a714620003bd5780639f8ad9ec14620003de578063ba414fa614620003ff578063c12c21c0146200041a57600080fd5b80632b9d0d2811620001a75780635e13c4a411620001725780635e13c4a4146200035a5780635ebb236114620003715780636698e05014620003925780636f307dc3146200039c57600080fd5b80632b9d0d2814620002e05780632f7a188114620002f75780634b7b24a514620003185780635a521cf8146200033957600080fd5b80631497761e11620001e85780631497761e14620002325780631c9a755f146200027d578063287b94d7146200029e57806329d351d814620002bf57600080fd5b80630990d83d14620002125780630a9254e4146200021e5780630d1eec041462000228575b600080fd5b6200021c62000598565b005b6200021c62000bab565b6200021c62000bb7565b600754620002539073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b601254620002539073ffffffffffffffffffffffffffffffffffffffff1681565b600b54620002539073ffffffffffffffffffffffffffffffffffffffff1681565b600854620002539073ffffffffffffffffffffffffffffffffffffffff1681565b6200021c620002f136600462004490565b62000e78565b600254620002539073ffffffffffffffffffffffffffffffffffffffff1681565b600a54620002539073ffffffffffffffffffffffffffffffffffffffff1681565b600e54620002539073ffffffffffffffffffffffffffffffffffffffff1681565b6200021c6200036b366004620044b7565b62002047565b600c54620002539073ffffffffffffffffffffffffffffffffffffffff1681565b6200021c620025e3565b600554620002539073ffffffffffffffffffffffffffffffffffffffff1681565b601354620002539073ffffffffffffffffffffffffffffffffffffffff1681565b600d54620002539073ffffffffffffffffffffffffffffffffffffffff1681565b6200040962002c15565b604051901515815260200162000274565b600154620002539073ffffffffffffffffffffffffffffffffffffffff1681565b6200021c6200044c366004620044b7565b62002d7f565b601454620002539073ffffffffffffffffffffffffffffffffffffffff1681565b601154620002539073ffffffffffffffffffffffffffffffffffffffff1681565b600954620002539073ffffffffffffffffffffffffffffffffffffffff1681565b600454620002539073ffffffffffffffffffffffffffffffffffffffff1681565b600f54620002539073ffffffffffffffffffffffffffffffffffffffff1681565b601554620002539073ffffffffffffffffffffffffffffffffffffffff1681565b6200052f6200052936600462004529565b50600190565b60405190815260200162000274565b600354620002539073ffffffffffffffffffffffffffffffffffffffff1681565b6200021c620032e3565b600054620004099060ff1681565b601054620002539073ffffffffffffffffffffffffffffffffffffffff1681565b600b546008546006546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9384169363453306669381169216906367b4264590620006029060019060040162004578565b602060405180830381865afa15801562000620573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000646919062004595565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906367b42645906200069f9060029060040162004578565b602060405180830381865afa158015620006bd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006e3919062004595565b60405160e085901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff938416600482015291831660248301529091166044820152620249f06064820152608401600060405180830381600087803b1580156200076357600080fd5b505af115801562000778573d6000803e3d6000fd5b5050600b546008546006546040517f67b4264500000000000000000000000000000000000000000000000000000000815262000993955073ffffffffffffffffffffffffffffffffffffffff938416945063d7aa2e359392831692909116906367b4264590620007ee9060019060040162004578565b602060405180830381865afa1580156200080c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000832919062004595565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906367b42645906200088b9060029060040162004578565b602060405180830381865afa158015620008a9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008cf919062004595565b60405160e085901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff938416600482015291831660248301529091166044820152606401602060405180830381865afa15801562000949573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200096f9190620045b5565b620249f0604051806060016040528060228152602001620193d16022913962003410565b600b546008546006546040517f67b4264500000000000000000000000000000000000000000000000000000000815262000ba99373ffffffffffffffffffffffffffffffffffffffff9081169363d7aa2e3593908216929116906367b426459062000a049060029060040162004578565b602060405180830381865afa15801562000a22573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a48919062004595565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906367b426459062000aa19060019060040162004578565b602060405180830381865afa15801562000abf573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ae5919062004595565b60405160e085901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff938416600482015291831660248301529091166044820152606401602060405180830381865afa15801562000b5f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b859190620045b5565b620249f0604051806060016040528060228152602001620193af6022913962003410565b565b62000ba9600162000e78565b60408051610100810182526002815273c4375b7de8af5a38a93548eb8453a498222c4ff2602082015260065482517f67b4264500000000000000000000000000000000000000000000000000000000815260009383019173ffffffffffffffffffffffffffffffffffffffff16906367b426459062000c3c9060019060040162004578565b602060405180830381865afa15801562000c5a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c80919062004595565b73ffffffffffffffffffffffffffffffffffffffff90811682526006546040517f67b426450000000000000000000000000000000000000000000000000000000081526020909301929116906367b426459062000ce39060029060040162004578565b602060405180830381865afa15801562000d01573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000d27919062004595565b73ffffffffffffffffffffffffffffffffffffffff16815260200160608152614e206020820152606460408083019190915260006060909201829052600b5460075491517f1bf64c41000000000000000000000000000000000000000000000000000000008152939450919273ffffffffffffffffffffffffffffffffffffffff92831692631bf64c419262000dc69287929091169060040162004639565b600060405180830381865afa15801562000de4573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262000e2c919081019062004829565b6040808201518151808301909252601d82527f466f756e642071756f746520666f7220756e6b6e6f776e20746f6b656e000000602083015291925062000e7491159062003462565b5050565b62000e82620034ac565b60085473ffffffffffffffffffffffffffffffffffffffff1662002044576006546040517f67b42645000000000000000000000000000000000000000000000000000000008152600091620010859173ffffffffffffffffffffffffffffffffffffffff909116906367b426459062000f019060079060040162004578565b602060405180830381865afa15801562000f1f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000f45919062004595565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906367b426459062000f9e9060089060040162004578565b602060405180830381865afa15801562000fbc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000fe2919062004595565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906367b42645906200103b9060099060040162004578565b602060405180830381865afa15801562001059573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200107f919062004595565b620035d6565b6006546040517f67b42645000000000000000000000000000000000000000000000000000000008152919250600091620012219173ffffffffffffffffffffffffffffffffffffffff16906367b4264590620010e79060019060040162004578565b602060405180830381865afa15801562001105573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200112b919062004595565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906367b4264590620011849060029060040162004578565b602060405180830381865afa158015620011a2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011c8919062004595565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906367b42645906200103b9060059060040162004578565b60035490915073ffffffffffffffffffffffffffffffffffffffff1615158062001249575082155b156200125457905060605b818160405162001264906200443b565b6200127192919062004984565b604051809103906000f0801580156200128e573d6000803e3d6000fd5b50600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169182179055604080517ffc0c546a00000000000000000000000000000000000000000000000000000000815290516000929163fc0c546a9160048083019260209291908290030181865afa1580156200132b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001351919062004595565b6000546040517fc657c71800000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff62010000909104169063c657c718906200140190849060040173ffffffffffffffffffffffffffffffffffffffff9190911681526040602082018190526004908201527f3343525600000000000000000000000000000000000000000000000000000000606082015260800190565b600060405180830381600087803b1580156200141c57600080fd5b505af115801562001431573d6000803e3d6000fd5b505060035473ffffffffffffffffffffffffffffffffffffffff1615915062001c459050576000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620014c6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620014ec919062004595565b60085460048054604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9485169490921692632630c12f9282820192602092908290030181865afa15801562001561573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001587919062004595565b73ffffffffffffffffffffffffffffffffffffffff16639dcb511a87600081518110620015b857620015b8620049ad565b60200260200101516040518263ffffffff1660e01b8152600401620015f9919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa15801562001617573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200163d919062004595565b60048054604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff90921692632630c12f9282820192602092908290030181865afa158015620016ab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620016d1919062004595565b73ffffffffffffffffffffffffffffffffffffffff16639dcb511a88600181518110620017025762001702620049ad565b60200260200101516040518263ffffffff1660e01b815260040162001743919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa15801562001761573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001787919062004595565b60048054604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff90921692632630c12f9282820192602092908290030181865afa158015620017f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200181b919062004595565b73ffffffffffffffffffffffffffffffffffffffff16639dcb511a896002815181106200184c576200184c620049ad565b60200260200101516040518263ffffffff1660e01b81526004016200188d919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa158015620018ab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620018d1919062004595565b604051620018df9062004449565b73ffffffffffffffffffffffffffffffffffffffff95861681529385166020850152918416604084015283166060830152909116608082015260c060a082018190526011908201527f43757276654c503350726963654665656400000000000000000000000000000060e082015261010001604051809103906000f0801580156200196e573d6000803e3d6000fd5b506000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291925062010000900473ffffffffffffffffffffffffffffffffffffffff16906306447d5690602401600060405180830381600087803b158015620019f657600080fd5b505af115801562001a0b573d6000803e3d6000fd5b505060048054604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9092169450632630c12f935080830192602092918290030181865afa15801562001a7d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001aa3919062004595565b6040517fe8a97a3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301528381166024830152919091169063e8a97a3e90604401600060405180830381600087803b15801562001b1757600080fd5b505af115801562001b2c573d6000803e3d6000fd5b50506003546040517f3e7c88d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152611e7860248301529091169250633e7c88d69150604401600060405180830381600087803b15801562001ba657600080fd5b505af115801562001bbb573d6000803e3d6000fd5b50505050600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562001c2a57600080fd5b505af115801562001c3f573d6000803e3d6000fd5b50505050505b60015460085460405173ffffffffffffffffffffffffffffffffffffffff9283169290911690839060009062001c7b9062004457565b73ffffffffffffffffffffffffffffffffffffffff9485168152928416602084015290831660408301529091166060820152608001604051809103906000f08015801562001ccd573d6000803e3d6000fd5b50600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905560405162001d219062004465565b604051809103906000f08015801562001d3e573d6000803e3d6000fd5b50600b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283169081179091556008546040517fd914cd4b000000000000000000000000000000000000000000000000000000008152921660048301529063d914cd4b90602401600060405180830381600087803b15801562001dd857600080fd5b505af115801562001ded573d6000803e3d6000fd5b5050600054600754604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152600d60448201527f43555256455f414441505445520000000000000000000000000000000000000060648201526201000090920416925063c657c7189150608401600060405180830381600087803b15801562001e9d57600080fd5b505af115801562001eb2573d6000803e3d6000fd5b5050600054600854604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152600a60448201527f43555256455f4d4f434b0000000000000000000000000000000000000000000060648201526201000090920416925063c657c7189150608401600060405180830381600087803b15801562001f6257600080fd5b505af115801562001f77573d6000803e3d6000fd5b5050600054600b54604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152601060448201527f43555256455f5041544846494e4445520000000000000000000000000000000060648201526201000090920416925063c657c7189150608401600060405180830381600087803b1580156200202757600080fd5b505af11580156200203c573d6000803e3d6000fd5b505050505050505b50565b6000546040517f4c63e562000000000000000000000000000000000000000000000000000000008152612710851060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff1690634c63e56290602401600060405180830381600087803b158015620020bc57600080fd5b505af1158015620020d1573d6000803e3d6000fd5b505060005462010000900473ffffffffffffffffffffffffffffffffffffffff169150634c63e5629050600b86118015620021245750620021216b033b2e3c9fd0803ce80000006103e862004a0b565b86105b6040518263ffffffff1660e01b815260040162002145911515815260200190565b600060405180830381600087803b1580156200216057600080fd5b505af115801562002175573d6000803e3d6000fd5b50506006546040517f67b426450000000000000000000000000000000000000000000000000000000081526000935073ffffffffffffffffffffffffffffffffffffffff90911691506367b4264590620021d59060079060040162004578565b602060405180830381865afa158015620021f3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002219919062004595565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815291925060009173ffffffffffffffffffffffffffffffffffffffff909116906367b4264590620022789060089060040162004578565b602060405180830381865afa15801562002296573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620022bc919062004595565b60085490915073ffffffffffffffffffffffffffffffffffffffff1663b91434d160006001620022fa60026b033b2e3c9fd0803ce800000062004a4b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152600f93840b60048201529190920b60248201526044810191909152606401600060405180830381600087803b1580156200235f57600080fd5b505af115801562002374573d6000803e3d6000fd5b5050600b546008546040517f4533066600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201528682166024820152858216604482015261300c60648201529116925063453306669150608401600060405180830381600087803b1580156200240057600080fd5b505af115801562002415573d6000803e3d6000fd5b505050506000604051806101000160405280866200243557600062002438565b60015b60028111156200244c576200244c62004549565b815273c4375b7de8af5a38a93548eb8453a498222c4ff2602082015273ffffffffffffffffffffffffffffffffffffffff85811660408301528416606082015260800162002498606090565b8152602081018990526040808201899052861515606090920191909152600b5460075491517f1bf64c4100000000000000000000000000000000000000000000000000000000815292935060009273ffffffffffffffffffffffffffffffffffffffff91821692631bf64c4192620025199287929091169060040162004639565b600060405180830381865afa15801562002537573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200257f919081019062004829565b905060006b033b2e3c9fd0803ce8000000896200259e60028362004a4b565b620025aa919062004a0b565b620025b6919062004a4b565b9050620025d882620025d2858460006001600061300c620036f2565b6200376c565b505050505050505050565b600b546008546006546040517f67b42645000000000000000000000000000000000000000000000000000000008152620027709373ffffffffffffffffffffffffffffffffffffffff90811693634dee073b93908216929116906367b4264590620026549060079060040162004578565b602060405180830381865afa15801562002672573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002698919062004595565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401602060405180830381865afa15801562002709573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200272f919062004a87565b600f0b60016040518060400160405280601981526020017f6344414920636f696e20696e64657820696e636f72726563740000000000000081525062003788565b600b54600880546006546040517f67b42645000000000000000000000000000000000000000000000000000000008152620028fb9473ffffffffffffffffffffffffffffffffffffffff90811694634dee073b94821693909116916367b4264591620027df9160040162004578565b602060405180830381865afa158015620027fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002823919062004595565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401602060405180830381865afa15801562002894573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620028ba919062004a87565b600f0b60026040518060400160405280601a81526020017f635553444320636f696e20696e64657820696e636f727265637400000000000081525062003788565b600b546008546006546040517f67b4264500000000000000000000000000000000000000000000000000000000815262002a889373ffffffffffffffffffffffffffffffffffffffff9081169363c488f7fe93908216929116906367b42645906200296c9060019060040162004578565b602060405180830381865afa1580156200298a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620029b0919062004595565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401602060405180830381865afa15801562002a21573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002a47919062004a87565b600f0b60016040518060400160405280601e81526020017f44414920756e6465726c79696e6720696e64657820696e636f7272656374000081525062003788565b600b546008546006546040517f67b4264500000000000000000000000000000000000000000000000000000000815262000ba99373ffffffffffffffffffffffffffffffffffffffff9081169363c488f7fe93908216929116906367b426459062002af99060029060040162004578565b602060405180830381865afa15801562002b17573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002b3d919062004595565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401602060405180830381865afa15801562002bae573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002bd4919062004a87565b600f0b60026040518060400160405280602081526020017f635553444320756e6465726c79696e6720696e64657820696e636f727265637481525062003788565b60008054610100900460ff161562002c365750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1562002d7a5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000008284015282518083038401815260608301909352600092909162002cde917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc49160800162004aac565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905262002d189162004af6565b6000604051808303816000865af19150503d806000811462002d57576040519150601f19603f3d011682016040523d82523d6000602084013e62002d5c565b606091505b509150508080602001905181019062002d76919062004b14565b9150505b919050565b6000546040517f4c63e562000000000000000000000000000000000000000000000000000000008152612710851060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff1690634c63e56290602401600060405180830381600087803b15801562002df457600080fd5b505af115801562002e09573d6000803e3d6000fd5b505060005462010000900473ffffffffffffffffffffffffffffffffffffffff169150634c63e5629050600b8611801562002e5c575062002e596b033b2e3c9fd0803ce80000006103e862004a0b565b86105b6040518263ffffffff1660e01b815260040162002e7d911515815260200190565b600060405180830381600087803b15801562002e9857600080fd5b505af115801562002ead573d6000803e3d6000fd5b50506006546040517f67b426450000000000000000000000000000000000000000000000000000000081526000935073ffffffffffffffffffffffffffffffffffffffff90911691506367b426459062002f0d9060019060040162004578565b602060405180830381865afa15801562002f2b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002f51919062004595565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815291925060009173ffffffffffffffffffffffffffffffffffffffff909116906367b426459062002fb09060029060040162004578565b602060405180830381865afa15801562002fce573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002ff4919062004595565b60085490915073ffffffffffffffffffffffffffffffffffffffff166356ac350360006001620030326b033b2e3c9fd0803ce8000000600262004a0b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152600f93840b60048201529190920b60248201526044810191909152606401600060405180830381600087803b1580156200309757600080fd5b505af1158015620030ac573d6000803e3d6000fd5b5050600b546008546040517f4533066600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201528682166024820152858216604482015261300c60648201529116925063453306669150608401600060405180830381600087803b1580156200313857600080fd5b505af11580156200314d573d6000803e3d6000fd5b505050506000604051806101000160405280866200316d57600062003170565b60015b600281111562003184576200318462004549565b815273c4375b7de8af5a38a93548eb8453a498222c4ff2602082015273ffffffffffffffffffffffffffffffffffffffff858116604083015284166060820152608001620031d0606090565b8152602081018990526040808201899052861515606090920191909152600b5460075491517f1bf64c4100000000000000000000000000000000000000000000000000000000815292935060009273ffffffffffffffffffffffffffffffffffffffff91821692631bf64c4192620032519287929091169060040162004639565b600060405180830381865afa1580156200326f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620032b7919081019062004829565b90506000620032c889600262004a0b565b9050620025d882620025d28584600060018061300c620036f2565b6040805161010081018252600180825273c4375b7de8af5a38a93548eb8453a498222c4ff2602083015260065483517f67b4264500000000000000000000000000000000000000000000000000000000815260009484019273ffffffffffffffffffffffffffffffffffffffff909216916367b426459162003369919060040162004578565b602060405180830381865afa15801562003387573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620033ad919062004595565b73ffffffffffffffffffffffffffffffffffffffff90811682526006546040517f67b426450000000000000000000000000000000000000000000000000000000081526020909301929116906367b426459062000ce39060039060040162004578565b8183146200345d577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf35838160405162003449919062004b80565b60405180910390a16200345d8383620037d5565b505050565b8162000e74577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf35838160405162003499919062004b80565b60405180910390a162000e7482620038e7565b60065473ffffffffffffffffffffffffffffffffffffffff1662000ba957604051620034d89062004473565b604051809103906000f080158015620034f5573d6000803e3d6000fd5b50600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216918217905563b36ba20862003554670de0b6b3a7640000606462004a0b565b6040518263ffffffff1660e01b81526004016000604051808303818588803b1580156200358057600080fd5b505af115801562003595573d6000803e3d6000fd5b505060028054307fffffffffffffffffffffffff00000000000000000000000000000000000000009182168117909255600180549091169091179055505050565b6040805160038082526080820190925260609160208201838036833701905050905083816000815181106200360f576200360f620049ad565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508281600181518110620036605762003660620049ad565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508181600281518110620036b157620036b1620049ad565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250509392505050565b620037306040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b60405180608001604052806200374a89898989896200395f565b8152602081018890526001604082015260600183905290509695505050505050565b62000e7482826040518060200160405280600081525062003cc8565b8183146200345d577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf358381604051620037c1919062004b80565b60405180910390a16200345d838362003dea565b80821462000e74577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f50604051620038639060208082526022908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b75696e60408201527f745d000000000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a8816040516200389c919062004bc9565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a882604051620038d5919062004c15565b60405180910390a162000e7462003eea565b8062002044577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f506040516200394d9060208082526017908201527f4572726f723a20417373657274696f6e204661696c6564000000000000000000604082015260600190565b60405180910390a16200204462003eea565b60408051808201909152600081526060602082015260606000875160028111156200398e576200398e62004549565b141562003ac75782620039c2577f3df0212400000000000000000000000000000000000000000000000000000000620039e4565b7fa6417ed6000000000000000000000000000000000000000000000000000000005b85858960e0015162003a235760c08a01516127109062003a05908262004c53565b62003a11908b62004a0b565b62003a1d919062004a4b565b62003a26565b60005b604051600f93840b60248201529190920b60448201526064810191909152608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505b60018751600281111562003adf5762003adf62004549565b141562003c42578262003b13577f79bea6640000000000000000000000000000000000000000000000000000000062003b35565b7f1af4de83000000000000000000000000000000000000000000000000000000005b85858960e0015162003b9e5760a08a015162003b55906127109062004a0b565b60c08b015162003b689061271062004c53565b62003b808b6b033b2e3c9fd0803ce800000062004a0b565b62003b8c919062004a0b565b62003b98919062004a4b565b62003ba1565b60005b604051600f93840b60248201529190920b60448201526064810191909152608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505b80511562003c7f576040805180820190915260075473ffffffffffffffffffffffffffffffffffffffff1681526020810191909152905062003cbf565b86516040517ffe7995cf00000000000000000000000000000000000000000000000000000000815262003cb6919060040162004c6d565b60405180910390fd5b95945050505050565b62003d038260400151151584604001511515148260405160200162003cee919062004c7d565b60405160208183030381529060405262003462565b60408301511515600114801562003d205750604082015115156001145b156200345d5762003d5c836020015183602001518360405160200162003d47919062004cc0565b60405160208183030381529060405262003410565b62003d7d836060015183606001518360405160200162003d47919062004d03565b82515182515160405162003db292919062003d9d90859060200162004d46565b6040516020818303038152906040526200406d565b825160209081015183518201516040516200345d9362003dd59186910162004daf565b604051602081830303815290604052620040e6565b80821462000e74577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f5060405162003e789060208082526021908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b696e7460408201527f5d00000000000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17f2fe632779174374378442a8e978bccfbdcc1d6b2b0d81f7e8eb776ab2286f1688160405162003eb1919062004bc9565b60405180910390a17f2fe632779174374378442a8e978bccfbdcc1d6b2b0d81f7e8eb776ab2286f16882604051620038d5919062004c15565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200403f5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000009282019290925260016060820152600091907f70ca10bbd0dbfd9020a9f4b13402c16cb120705e0d1c0aeab10fa353ae586fc490608001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905262003fbc929160200162004aac565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905262003ff69162004af6565b6000604051808303816000865af19150503d806000811462004035576040519150601f19603f3d011682016040523d82523d6000602084013e6200403a565b606091505b505050505b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146200345d577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf358381604051620040d2919062004b80565b60405180910390a16200345d83836200413c565b620040f2838362004268565b6200345d577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf35838160405162004128919062004b80565b60405180910390a16200345d838362004332565b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462000e74577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f50604051620041f69060208082526025908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b61646460408201527f726573735d000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f816040516200422f919062004e18565b60405180910390a17f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f82604051620038d5919062004e7a565b805182516001911415620043285760005b83518110156200432157828181518110620042985762004298620049ad565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916848281518110620042da57620042da620049ad565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016146200430c57600091505b80620043188162004eb8565b91505062004279565b506200432c565b5060005b92915050565b6200433e828262004268565b62000e74577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f50604051620043c99060208082526023908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b62797460408201527f65735d0000000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17fd26e16cad4548705e4c9e2d94f98ee91c289085ee425594fd5635fa2964ccf188160405162004402919062004ef4565b60405180910390a17fd26e16cad4548705e4c9e2d94f98ee91c289085ee425594fd5635fa2964ccf1882604051620038d5919062004f4e565b6139608062004f8d83390190565b61185280620088ed83390190565b615f8c806200a13f83390190565b61189380620100cb83390190565b617a51806201195e83390190565b80151581146200204457600080fd5b600060208284031215620044a357600080fd5b8135620044b08162004481565b9392505050565b60008060008060808587031215620044ce57600080fd5b84359350602085013592506040850135620044e98162004481565b91506060850135620044fb8162004481565b939692955090935050565b73ffffffffffffffffffffffffffffffffffffffff811681146200204457600080fd5b6000602082840312156200453c57600080fd5b8135620044b08162004506565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60208101600b83106200458f576200458f62004549565b91905290565b600060208284031215620045a857600080fd5b8151620044b08162004506565b600060208284031215620045c857600080fd5b5051919050565b60038110620045e257620045e262004549565b9052565b600081518084526020808501945080840160005b838110156200462e57815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101620045fa565b509495945050505050565b604081526200464d604082018451620045cf565b6000602084015173ffffffffffffffffffffffffffffffffffffffff808216606085015280604087015116608085015250506060840151620046a760a084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060808401516101008060c0850152620046c6610140850183620045e6565b915060a086015160e085015260c0860151818501525060e0850151620046f161012085018215159052565b5073ffffffffffffffffffffffffffffffffffffffff841660208401529050620044b0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff811182821017156200476b576200476b62004716565b60405290565b6040805190810167ffffffffffffffff811182821017156200476b576200476b62004716565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715620047e157620047e162004716565b604052919050565b60005b8381101562004806578181015183820152602001620047ec565b8381111562004816576000848401525b50505050565b805162002d7a8162004481565b600060208083850312156200483d57600080fd5b825167ffffffffffffffff808211156200485657600080fd5b90840190608082870312156200486b57600080fd5b6200487562004745565b8251828111156200488557600080fd5b8301604081890312156200489857600080fd5b620048a262004771565b8151620048af8162004506565b81528186015184811115620048c357600080fd5b80830192505088601f830112620048d957600080fd5b815184811115620048ee57620048ee62004716565b62004920877fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160162004797565b945080855289878285010111156200493757600080fd5b6200494881888701898601620047e9565b50808601849052825250828401518185015262004968604084016200481c565b6040820152606083015160608201528094505050505092915050565b604081526000620049996040830185620045e6565b828103602084015262003cbf8185620045e6565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562004a465762004a46620049dc565b500290565b60008262004a82577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60006020828403121562004a9a57600080fd5b815180600f0b8114620044b057600080fd5b7fffffffff00000000000000000000000000000000000000000000000000000000831681526000825162004ae8816004850160208701620047e9565b919091016004019392505050565b6000825162004b0a818460208701620047e9565b9190910192915050565b60006020828403121562004b2757600080fd5b8151620044b08162004481565b6000815180845262004b4e816020860160208601620047e9565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60408152600560408201527f4572726f720000000000000000000000000000000000000000000000000000006060820152608060208201526000620044b0608083018462004b34565b60408152600062004c0760408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b905082602083015292915050565b60408152600062004c0760408301600a81527f2020202041637475616c00000000000000000000000000000000000000000000602082015260400190565b60008282101562004c685762004c68620049dc565b500390565b602081016200432c8284620045cf565b6000825162004c91818460208701620047e9565b7f446966666572656e7420666f756e6420706172616d7300000000000000000000920191825250601601919050565b6000825162004cd4818460208701620047e9565b7f71312e616d6f756e7420213d2071322e616d6f756e7400000000000000000000920191825250601601919050565b6000825162004d17818460208701620047e9565b7f71312e676173557361676520213d2071322e6761735573616765000000000000920191825250601a01919050565b6000825162004d5a818460208701620047e9565b7f71312e6d756c746943616c6c2e74617267657420213d2071322e6d756c7469439201918252507f616c6c2e746172676574000000000000000000000000000000000000000000006020820152602a01919050565b6000825162004dc3818460208701620047e9565b7f71312e6d756c746943616c6c2e63616c6c4461746120213d2071322e6d756c749201918252507f6943616c6c2e63616c6c446174610000000000000000000000000000000000006020820152602e01919050565b60408152600062004e5660408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b905073ffffffffffffffffffffffffffffffffffffffff8316602083015292915050565b60408152600062004e5660408301600a81527f2020202041637475616c00000000000000000000000000000000000000000000602082015260400190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141562004eed5762004eed620049dc565b5060010190565b60408152600062004f3260408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b828103602084015262004f46818562004b34565b949350505050565b60408152600062004f3260408301600a81527f2020202041637475616c0000000000000000000000000000000000000000000060208201526040019056fe60806040523480156200001157600080fd5b5060405162003960380380620039608339810160408190526200003491620002a2565b8151829082906200004d90600290602085019062000133565b5080516200006390600390602084019062000133565b506000601260405162000076906200019d565b6060808252600790820152664352564d6f636b60c81b608082015260a0602082018190526015908201527f43525620666f72204375727665506f6f6c4d6f636b000000000000000000000060c082015260ff909116604082015260e001604051809103906000f080158015620000f0573d6000803e3d6000fd5b50600080546001600160a01b039092166001600160a01b03199283168117909155600180549092161790555050670de0b6b3a7640000600755506200030c915050565b8280548282559060005260206000209081019282156200018b579160200282015b828111156200018b57825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019062000154565b5062000199929150620001ab565b5090565b611758806200220883390190565b5b80821115620001995760008155600101620001ac565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b0381168114620001f057600080fd5b919050565b600082601f8301126200020757600080fd5b815160206001600160401b0380831115620002265762000226620001c2565b8260051b604051601f19603f830116810181811084821117156200024e576200024e620001c2565b6040529384528581018301938381019250878511156200026d57600080fd5b83870191505b8482101562000297576200028782620001d8565b8352918301919083019062000273565b979650505050505050565b60008060408385031215620002b657600080fd5b82516001600160401b0380821115620002ce57600080fd5b620002dc86838701620001f5565b93506020850151915080821115620002f357600080fd5b506200030285828601620001f5565b9150509250929050565b611eec806200031c6000396000f3fe608060405234801561001057600080fd5b506004361061030a5760003560e01c806382c630661161019c578063bb7b8b80116100ee578063e2e7d26411610097578063f851a44011610071578063f851a44014610597578063fc0c546a1461059e578063fee3f7f91461036257600080fd5b8063e2e7d26414610576578063ecb586a514610584578063f446c1d01461036257600080fd5b8063d96c7fce116100c8578063d96c7fce14610369578063dd62ed3e14610568578063ddca3f431461036257600080fd5b8063bb7b8b801461053a578063c661065714610542578063cc2b27d71461055557600080fd5b80639fdaea0c11610150578063b739953e1161012a578063b739953e14610501578063b91434d114610514578063b9947eb01461052757600080fd5b80639fdaea0c146104db578063a6417ed6146104ee578063b4b577ad1461036257600080fd5b80638ea875f3116101815780638ea875f3146104bf57806395d89b411461033557806399bd2ba5146104c857600080fd5b806382c630661461048c57806385ca3c6f146104ac57600080fd5b80633df02124116102605780635e0d443f1161020957806371035418116101e3578063710354181461045457806376a2f0f0146103625780637b475b681461046757600080fd5b80635e0d443f1461042d57806363543f061461036257806370a082311461044057600080fd5b80634903b0d11161023a5780634903b0d1146104075780635409491a1461036257806356ac35031461041a57600080fd5b80633df02124146103e15780634469e30e146103695780634515cef3146103f457600080fd5b806318160ddd116102c257806323746eb81161029c57806323746eb814610393578063313ce567146103625780633883e119146103cb57600080fd5b806318160ddd146103625780631a4d01d21461037e5780632081066c1461036257600080fd5b806307211ef7116102f357806307211ef71461034f578063140522881461036257806314f059791461036957600080fd5b8063065a80d81461030f57806306fdde0314610335575b600080fd5b61032261031d36600461192d565b6105be565b6040519081526020015b60405180910390f35b6040805160208101825260008152905161032c9190611974565b61032261035d3660046119c5565b610677565b6000610322565b6103716106c7565b60405161032c9190611a01565b61039161038c366004611a32565b6106f2565b005b6103a66103a136600461192d565b6107e6565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161032c565b6103226103d9366004611a79565b600092915050565b6103916103ef366004611ab1565b610826565b610391610402366004611b88565b610950565b610322610415366004611bb3565b610b1c565b6103916104283660046119c5565b610b31565b61032261043b3660046119c5565b610b92565b61032261044e366004611bf0565b50600090565b610391610462366004611bb3565b600755565b610391610475366004611c0b565b600f9190910b600090815260066020526040902055565b6001546103a69073ffffffffffffffffffffffffffffffffffffffff1681565b6103716104ba366004611c35565b610bce565b61032260075481565b6103916104d6366004611c73565b610c04565b6103916104e9366004611c8f565b610c63565b6103916104fc366004611ab1565b610de6565b6103a661050f36600461192d565b6111a6565b6103916105223660046119c5565b6111be565b6103a6610535366004611bb3565b61121f565b600754610322565b6103a6610550366004611bb3565b611234565b610322610563366004611cac565b611249565b6103226103d9366004611cd8565b61032261044e366004611bb3565b610391610592366004611d02565b61127f565b60006103a6565b6000546103a69073ffffffffffffffffffffffffffffffffffffffff1681565b6000600282600f0b815481106105d6576105d6611d26565b6000918252602090912001546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa15801561064d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106719190611d55565b92915050565b600f83810b60009081526005602090815260408083209386900b8352929052908120546b033b2e3c9fd0803ce8000000906106b3908490611d9d565b6106bd9190611dda565b90505b9392505050565b6106cf6118f8565b604051806060016040528060008152602001600081526020016000815250905090565b6000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810185905273ffffffffffffffffffffffffffffffffffffffff909116906379cc6790906044016020604051808303816000875af1158015610769573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078d9190611e15565b506107e133826002856fffffffffffffffffffffffffffffffff16815481106107b8576107b8611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169190611402565b505050565b6000600282600f0b815481106107fe576107fe611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1692915050565b6000610833858585610b92565b9050818110156108ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f437572766556314d6f636b3a20494e53554646494349454e545f4f555450555460448201527f5f414d4f554e540000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61091f3330856002896fffffffffffffffffffffffffffffffff16815481106108f5576108f5611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169291906114d6565b61094933826002876fffffffffffffffffffffffffffffffff16815481106107b8576107b8611d26565b5050505050565b60005b6003811015610a7f57600083826003811061097057610970611d26565b60200201511115610a6d576002818154811061098e5761098e611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff166323b872dd33308685600381106109c9576109c9611d26565b60200201516040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff938416600482015292909116602483015260448201526064016020604051808303816000875af1158015610a47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6b9190611e15565b505b80610a7781611e32565b915050610953565b506000546040517f40c10f190000000000000000000000000000000000000000000000000000000081523360048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f19906044015b6020604051808303816000875af1158015610af8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e19190611e15565b6000600282815481106105d6576105d6611d26565b600f83810b60009081526005602090815260408083209386900b835292905220819055610b6a6b033b2e3c9fd0803ce80000008261153a565b600f92830b60009081526005602090815260408083209690950b825294909452919092205550565b600f83810b60009081526004602090815260408083209386900b8352929052908120546b033b2e3c9fd0803ce8000000906106b3908490611d9d565b610bd66118f8565b6040805160608181019092529085906003908390839080828437600092019190915250919695505050505050565b6000546040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052909116906340c10f1990604401610ad9565b60005b6003811015610d88576000838260038110610c8357610c83611d26565b60200201351115610d765760028181548110610ca157610ca1611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33858460038110610cdb57610cdb611d26565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff9093166004840152602002013560248201526044016020604051808303816000875af1158015610d50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d749190611e15565b505b80610d8081611e32565b915050610c66565b506000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906379cc679090604401610ad9565b60006002856fffffffffffffffffffffffffffffffff1681548110610e0d57610e0d611d26565b60009182526020822001546003805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff8816908110610e5957610e59611d26565b60009182526020822001546002805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff8816908110610ea557610ea5611d26565b60009182526020822001546003805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff8916908110610ef157610ef1611d26565b600091825260208220015473ffffffffffffffffffffffffffffffffffffffff169150610f1f898989610677565b905085811015610fb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f437572766556314d6f636b3a20494e53554646494349454e545f4f555450555460448201527f5f414d4f554e540000000000000000000000000000000000000000000000000060648201526084016108c1565b610fd373ffffffffffffffffffffffffffffffffffffffff851633308a6114d6565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526024820189905285169063095ea7b3906044016020604051808303816000875af1158015611048573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061106c9190611e15565b506040517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8616906340c10f1990604401600060405180830381600087803b1580156110db57600080fd5b505af11580156110ef573d6000803e3d6000fd5b50506040517f1e9a69500000000000000000000000000000000000000000000000000000000081523060048201526024810184905273ffffffffffffffffffffffffffffffffffffffff86169250631e9a69509150604401600060405180830381600087803b15801561116157600080fd5b505af1158015611175573d6000803e3d6000fd5b5061119b9250505073ffffffffffffffffffffffffffffffffffffffff83163383611402565b505050505050505050565b6000600382600f0b815481106107fe576107fe611d26565b600f83810b60009081526004602090815260408083209386900b8352929052208190556111f76b033b2e3c9fd0803ce80000008261153a565b600f92830b60009081526004602090815260408083209690950b825294909452919092205550565b6000600382815481106107fe576107fe611d26565b6000600282815481106107fe576107fe611d26565b600f81900b6000908152600660205260408120546b033b2e3c9fd0803ce8000000906112759085611d9d565b6106c09190611dda565b60005b60038110156113a457600082826003811061129f5761129f611d26565b6020020151111561139257600281815481106112bd576112bd611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb338484600381106112f7576112f7611d26565b60200201516040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af115801561136c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113909190611e15565b505b8061139c81611e32565b915050611282565b506000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810184905273ffffffffffffffffffffffffffffffffffffffff909116906379cc679090604401610ad9565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526107e19084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526116a0565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526115349085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611454565b50505050565b60408051808201909152600281527f4d330000000000000000000000000000000000000000000000000000000000006020820152600090826115a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c19190611974565b5060006115b7600284611dda565b90506b033b2e3c9fd0803ce80000006115f0827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611e6b565b6115fa9190611dda565b8411156040518060400160405280600281526020017f4d310000000000000000000000000000000000000000000000000000000000008152509061166b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c19190611974565b5082816116846b033b2e3c9fd0803ce800000087611d9d565b61168e9190611e82565b6116989190611dda565b949350505050565b6000611702826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166117ac9092919063ffffffff16565b8051909150156107e157808060200190518101906117209190611e15565b6107e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016108c1565b60606106bd848460008585843b61181f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108c1565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516118489190611e9a565b60006040518083038185875af1925050503d8060008114611885576040519150601f19603f3d011682016040523d82523d6000602084013e61188a565b606091505b509150915061189a8282866118a5565b979650505050505050565b606083156118b45750816106c0565b8251156118c45782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c19190611974565b60405180606001604052806003906020820280368337509192915050565b8035600f81900b811461192857600080fd5b919050565b60006020828403121561193f57600080fd5b6106c082611916565b60005b8381101561196357818101518382015260200161194b565b838111156115345750506000910152565b6020815260008251806020840152611993816040850160208701611948565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000606084860312156119da57600080fd5b6119e384611916565b92506119f160208501611916565b9150604084013590509250925092565b60608101818360005b6003811015611a29578151835260209283019290910190600101611a0a565b50505092915050565b600080600060608486031215611a4757600080fd5b833592506119f160208501611916565b806060810183101561067157600080fd5b8015158114611a7657600080fd5b50565b60008060808385031215611a8c57600080fd5b611a968484611a57565b91506060830135611aa681611a68565b809150509250929050565b60008060008060808587031215611ac757600080fd5b611ad085611916565b9350611ade60208601611916565b93969395505050506040820135916060013590565b600082601f830112611b0457600080fd5b6040516060810181811067ffffffffffffffff82111715611b4e577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604052806060840185811115611b6357600080fd5b845b81811015611b7d578035835260209283019201611b65565b509195945050505050565b60008060808385031215611b9b57600080fd5b611ba58484611af3565b946060939093013593505050565b600060208284031215611bc557600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461192857600080fd5b600060208284031215611c0257600080fd5b6106c082611bcc565b60008060408385031215611c1e57600080fd5b611c2783611916565b946020939093013593505050565b600080600060e08486031215611c4a57600080fd5b611c548585611a57565b9250611c638560608601611a57565b915060c084013590509250925092565b60008060408385031215611c8657600080fd5b611c2783611bcc565b60008060808385031215611ca257600080fd5b611ba58484611a57565b60008060408385031215611cbf57600080fd5b82359150611ccf60208401611916565b90509250929050565b60008060408385031215611ceb57600080fd5b611cf483611bcc565b9150611ccf60208401611bcc565b60008060808385031215611d1557600080fd5b82359150611ccf8460208501611af3565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215611d6757600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611dd557611dd5611d6e565b500290565b600082611e10577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600060208284031215611e2757600080fd5b81516106c081611a68565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611e6457611e64611d6e565b5060010190565b600082821015611e7d57611e7d611d6e565b500390565b60008219821115611e9557611e95611d6e565b500190565b60008251611eac818460208701611948565b919091019291505056fea2646970667358221220a76213374b33de2cb1c5d61e9c1133f6d8163c7b90c32a6142a6f4fd98fe430364736f6c634300080a003360a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a00336101606040523480156200001257600080fd5b5060405162001852380380620018528339810160408190526200003591620003a3565b6000805460ff191690558585828260c882826001600160a01b0381166200006f57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000ae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d49190620004de565b6001600160a01b0316608052508051620000f6906002906020840190620002ca565b505060a052506001600160a01b0382166200012457604051635919af9760e11b815260040160405180910390fd5b6001600160a01b03821660c0819052670de0b6b3a764000060e05260408051630176f71760e71b815290516000929163bb7b8b809160048083019260209291908290030181865afa1580156200017e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001a4919062000503565b9050620001b1816200022a565b505050506001600160a01b0384161580620001d357506001600160a01b038316155b80620001e657506001600160a01b038216155b156200020557604051635919af9760e11b815260040160405180910390fd5b506001600160a01b039283166101005290821661012052166101405250620005d09050565b8062000249576040516309aadd6f60e41b815260040160405180910390fd5b60018190557f82e7ee47180a631312683eeb2a85ad264c9af490d54de5a75bbdb95b968c6de2816200027b8162000296565b6040805192835260208301919091520160405180910390a150565b60a05160009061271090620002ac908262000533565b620002b890846200054e565b620002c4919062000570565b92915050565b828054620002d89062000593565b90600052602060002090601f016020900481019282620002fc576000855562000347565b82601f106200031757805160ff191683800117855562000347565b8280016001018555821562000347579182015b82811115620003475782518255916020019190600101906200032a565b506200035592915062000359565b5090565b5b808211156200035557600081556001016200035a565b80516001600160a01b03811681146200038857600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60008060008060008060c08789031215620003bd57600080fd5b620003c88762000370565b95506020620003d981890162000370565b9550620003e96040890162000370565b9450620003f96060890162000370565b9350620004096080890162000370565b60a08901519093506001600160401b03808211156200042757600080fd5b818a0191508a601f8301126200043c57600080fd5b8151818111156200045157620004516200038d565b604051601f8201601f19908116603f011681019083821181831017156200047c576200047c6200038d565b816040528281528d868487010111156200049557600080fd5b600093505b82841015620004b957848401860151818501870152928501926200049a565b82841115620004cb5760008684830101525b8096505050505050509295509295509295565b600060208284031215620004f157600080fd5b620004fc8262000370565b9392505050565b6000602082840312156200051657600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156200054957620005496200051d565b500190565b60008160001904831182151516156200056b576200056b6200051d565b500290565b6000826200058e57634e487b7160e01b600052601260045260246000fd5b500490565b600181811c90821680620005a857607f821691505b60208210811415620005ca57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c05160e0516101005161012051610140516111e86200066a6000396000818161023501526108c8015260008181610383015261080901526000818161033901526107620152600081816103120152610a250152600081816101b001526109890152600081816101760152610c170152600081816102eb015281816103db01528181610557015261068f01526111e86000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c80639a6fc8f5116100cd578063b09ad8a011610081578063d62ada1111610066578063d62ada1114610376578063e5693f411461037e578063feaf968c146103a557600080fd5b8063b09ad8a01461035b578063bc489a651461036357600080fd5b8063a50cf2c8116100b2578063a50cf2c8146102e6578063a834559e1461030d578063ab0ca0e11461033457600080fd5b80639a6fc8f514610293578063a384d6ff146102dd57600080fd5b8063427cb6fe116101245780635c975abb116101095780635c975abb1461025f5780637284e416146102765780638456cb591461028b57600080fd5b8063427cb6fe1461023057806354fd4d501461025757600080fd5b8063313ce56711610155578063313ce567146101f75780633f4ba83a146102115780633fd0875f1461021b57600080fd5b806312b495a814610171578063218751b2146101ab575b600080fd5b6101987f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101a2565b6101ff600881565b60405160ff90911681526020016101a2565b6102196103ad565b005b610223600381565b6040516101a29190610dd7565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b610198600181565b60005460ff165b60405190151581526020016101a2565b61027e61049b565b6040516101a29190610e18565b610219610529565b6102a66102a1366004610ea3565b610615565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a0016101a2565b61019860015481565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b6101987f000000000000000000000000000000000000000000000000000000000000000081565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b61019861064f565b610219610371366004610ec7565b610661565b610266600181565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b6102a6610751565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa158015610437573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061045b9190610ee0565b610491576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610499610a67565b565b600280546104a890610f02565b80601f01602080910402602001604051908101604052809291908181526020018280546104d490610f02565b80156105215780601f106104f657610100808354040283529160200191610521565b820191906000526020600020905b81548152906001019060200180831161050457829003601f168201915b505050505081565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa1580156105b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105d79190610ee0565b61060d576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610499610b4d565b60008060008060006040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061065c600154610c0d565b905090565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156106eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070f9190610ee0565b610745576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61074e81610c56565b50565b6000806000806000806000806000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156107cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ef9190610f56565b939d50919b509950975095506108078a8a8989610cd8565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610872573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108969190610f56565b9398509196509450925090506108ae85858484610cd8565b888412156108c6578499508398508297508196508095505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610931573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109559190610f56565b93985091965094509250905061096d85858484610cd8565b88841215610985578499508398508297508196508095505b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb7b8b806040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a169190610fae565b9050610a2181610d73565b90507f0000000000000000000000000000000000000000000000000000000000000000610a4e828c610ff6565b610a5891906110e1565b99505050505050509091929394565b60005460ff16610ad8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff1615610bba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610acf565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b233390565b6000612710610c3c7f000000000000000000000000000000000000000000000000000000000000000082611149565b610c469084611161565b610c50919061119e565b92915050565b80610c8d576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190557f82e7ee47180a631312683eeb2a85ad264c9af490d54de5a75bbdb95b968c6de281610cbd81610c0d565b6040805192835260208301919091520160405180910390a150565b60008313610d12576040517f56e05d2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8369ffffffffffffffffffff168169ffffffffffffffffffff161080610d36575081155b15610d6d576040517fb1cf675500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60015460009080831015610db3576040517fb416da7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610dbe82610c0d565b905080841115610dcf579392505050565b509192915050565b6020810160068310610e12577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b600060208083528351808285015260005b81811015610e4557858101830151858201604001528201610e29565b81811115610e57576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b69ffffffffffffffffffff8116811461074e57600080fd5b600060208284031215610eb557600080fd5b8135610ec081610e8b565b9392505050565b600060208284031215610ed957600080fd5b5035919050565b600060208284031215610ef257600080fd5b81518015158114610ec057600080fd5b600181811c90821680610f1657607f821691505b60208210811415610f50577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600080600080600060a08688031215610f6e57600080fd5b8551610f7981610e8b565b809550506020860151935060408601519250606086015191506080860151610fa081610e8b565b809150509295509295909350565b600060208284031215610fc057600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60008413600084138583048511828216161561103757611037610fc7565b7f8000000000000000000000000000000000000000000000000000000000000000600087128682058812818416161561107257611072610fc7565b6000871292508782058712848416161561108e5761108e610fc7565b878505871281841616156110a4576110a4610fc7565b505050929093029392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826110f0576110f06110b2565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f80000000000000000000000000000000000000000000000000000000000000008314161561114457611144610fc7565b500590565b6000821982111561115c5761115c610fc7565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561119957611199610fc7565b500290565b6000826111ad576111ad6110b2565b50049056fea2646970667358221220226b667ed6fc6db7c8ec1377cc84dae524e2dc572320ead4a7092944a6b912de64736f6c634300080a00336102606040523480156200001257600080fd5b5060405162005f8c38038062005f8c833981016040819052620000359162000ba4565b83838383600384846001600160a01b03821615806200005b57506001600160a01b038116155b156200007a57604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038216608081905260408051632f7a188160e01b81529051632f7a1881916004808201926020929091908290030181865afa158015620000c5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000eb919062000c01565b6001600160a01b0390811660a05290811660c05260016000558416151590506200012857604051635919af9760e11b815260040160405180910390fd5b608051604051630f67c5bd60e41b81526001600160a01b0385811660048301529091169063f67c5bd090602401602060405180830381865afa15801562000173573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000199919062000c26565b620001c757604051634c607af960e11b81526001600160a01b03841660048201526024015b60405180910390fd5b6001600160a01b038084166101e081905261020052821661022052610240819052620001f460006200090a565b6001600160a01b031660e0526200020c60016200090a565b6001600160a01b0316610100526200022560026200090a565b6001600160a01b0316610120526200023e60036200090a565b6001600160a01b031661014052620002576000620009fd565b6001600160a01b031661016052620002706001620009fd565b6001600160a01b031661018052620002896002620009fd565b6001600160a01b03166101a052620002a26003620009fd565b6001600160a01b039081166101c05260e051161580620002cc5750610100516001600160a01b0316155b15620002eb57604051635919af9760e11b815260040160405180910390fd5b600281118015620003065750610120516001600160a01b0316155b156200032557604051635919af9760e11b815260040160405180910390fd5b600381118015620003405750610140516001600160a01b0316155b156200035f57604051635919af9760e11b815260040160405180910390fd5b60805160e051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620003ac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003d2919062000c26565b620004005760e051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b60805161010051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa1580156200044e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000474919062000c26565b620004a35761010051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b60028111801562000525575060805161012051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620004fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000523919062000c26565b155b15620005555761012051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b600381118015620005d7575060805161014051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620005af573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005d5919062000c26565b155b15620006075761014051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b610160516001600160a01b03161580159062000694575060805161016051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa1580156200066c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000692919062000c26565b155b15620006c45761016051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b610180516001600160a01b03161580159062000751575060805161018051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa15801562000729573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200074f919062000c26565b155b15620007815761018051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b6101a0516001600160a01b0316158015906200080e57506080516101a051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620007e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200080c919062000c26565b155b156200083e576101a051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b6101c0516001600160a01b031615801590620008cb57506080516101c051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620008a3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008c9919062000c26565b155b15620008fb576101c051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b50505050505050505062000c66565b60c05160405163c661065760e01b8152600481018390526000916001600160a01b03169063c661065790602401602060405180830381865afa92505050801562000973575060408051601f3d908101601f19168201909252620009709181019062000c01565b60015b6200097e5762000984565b92915050565b60c05160405163046e8dd760e31b8152600f84900b60048201526001600160a01b03909116906323746eb8906024015b602060405180830381865afa925050508015620009f0575060408051601f3d908101601f19168201909252620009ed9181019062000c01565b60015b6200097e57506000919050565b610220516000906001600160a01b03161562000a1e576200097e8262000ac0565b60c051604051630b9947eb60e41b8152600481018490526001600160a01b039091169063b9947eb090602401602060405180830381865afa92505050801562000a86575060408051601f3d908101601f1916820190925262000a839181019062000c01565b60015b6200097e5760c051604051635b9cca9f60e11b8152600f84900b60048201526001600160a01b039091169063b739953e90602401620009b4565b60008162000ad4576200097e600062000b17565b610220516001600160a01b031663c661065762000af360018562000c40565b6040518263ffffffff1660e01b8152600401620009b491815260200190565b919050565b600081600f0b6000141562000b2b575060e0515b81600f0b6001141562000b3e5750610100515b81600f0b6002141562000b515750610120515b81600f0b6003141562000b645750610140515b6001600160a01b03811662000b12576040516334769e6f60e21b815260040160405180910390fd5b80516001600160a01b038116811462000b1257600080fd5b6000806000806080858703121562000bbb57600080fd5b62000bc68562000b8c565b935062000bd66020860162000b8c565b925062000be66040860162000b8c565b915062000bf66060860162000b8c565b905092959194509250565b60006020828403121562000c1457600080fd5b62000c1f8262000b8c565b9392505050565b60006020828403121562000c3957600080fd5b5051919050565b60008282101562000c6157634e487b7160e01b600052601160045260246000fd5b500390565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e051610200516102205161024051614fa962000fe36000396000818161078301528181613708015281816138bf015281816139d901528181613e0f0152613f01015260006105de01526000818161067501528181611f680152818161239f0152818161278901528181612e6b01528181612f0901526131ed015260006108ad01526000818161059c015261288b0152600081816103d4015261285c015260008181610605015261282d0152600081816106af01526127fe015260008181610876015281816126630152818161363501528181613f6b01526146640152600081816104d7015281816126340152818161356501528181613e7901526145480152600081816107f3015281816126050152818161349501528181613d85015261442c015260008181610448015281816125d6015281816133c501528181613cb901526143100152600081816107350152818161091a015281816109e701528181610a7701528181610b6f01528181610bfe01528181610c9501528181610d2601528181611139015281816111b1015281816112ee0152818161144101528181611578015281816115c00152818161166d015281816116b5015281816117660152818161179b01528181611ac501528181611b4301528181611ccd01528181611d4501528181611dea01528181611fb20152818161206b015281816120a00152818161213b0152818161245e015281816124cb0152818161255c01528181612aa901528181612bc801528181612ca2015281816142e801528181614404015281816145200152818161463c01526147840152600081816104fe0152818161291401528181614055015261482b01526000818161075c01528181610ec9015281816118a601528181611ef4015281816122450152818161270101528181612aff01528181612b9901528181612cf801528181612da0015281816130630152818161311a01528181613215015281816132f8015281816133ed015281816134bd0152818161358d0152818161365d01528181613bf401528181613ce401528181613dad01528181613ea101528181613f93015281816140dd015281816141910152818161423b0152818161435e0152818161447a01528181614596015281816146b20152818161475501526148950152614fa96000f3fe608060405234801561001057600080fd5b50600436106103a45760003560e01c806379bea664116101e9578063cc2b27d71161010f578063e2e7d264116100ad578063f446c1d01161007c578063f446c1d014610898578063f851a440146108a0578063fc0c546a146108a8578063fee3f7f9146108cf57600080fd5b8063e2e7d26414610838578063ec026ca71461084b578063ecb586a51461085e578063ef14101e1461087157600080fd5b8063d21220a7116100e9578063d21220a7146107ee578063d96c7fce14610815578063dd62ed3e1461081d578063ddca3f431461083057600080fd5b8063cc2b27d7146107b3578063ce30bbdb146107c6578063cf023dd0146107db57600080fd5b8063b4b577ad11610187578063bd90df7011610156578063bd90df7014610730578063c12c21c014610757578063c21ee1621461077e578063c6610657146107a557600080fd5b8063b4b577ad146106ff578063b739953e14610707578063b9947eb01461071a578063bb7b8b801461072857600080fd5b80638ba51dfc116101c35780638ba51dfc146106aa57806395d89b41146106d15780639fdaea0c146106d9578063a6417ed6146106ec57600080fd5b806379bea6641461065d57806382c630661461067057806385ca3c6f1461069757600080fd5b806333d2ebf2116102ce57806357d788751161026c5780636e1d82711161023b5780636e1d82711461060057806370a082311461062757806376a2f0f01461063a57806378aa73a41461064257600080fd5b806357d78875146105975780635e0d443f146105be57806363543f06146105d157806364a89bca146105d957600080fd5b80634469e30e116102a85780634469e30e146105615780634515cef3146105695780634903b0d11461057c5780635409491a1461058f57600080fd5b806333d2ebf2146105285780633883e1191461053b5780633df021241461054e57600080fd5b806318160ddd1161034657806323746eb81161031557806323746eb8146104bf57806325be124e146104d25780632f7a1881146104f9578063313ce5671461052057600080fd5b806318160ddd146104875780631a4d01d21461048f5780631af4de83146104a45780632081066c146104b757600080fd5b806307211ef71161038257806307211ef7146104305780630dfe168114610443578063140522881461046a57806314f059791461047257600080fd5b8063065a80d8146103a957806306871163146103cf57806306fdde031461041b575b600080fd5b6103bc6103b736600461491d565b6108d7565b6040519081526020015b60405180910390f35b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016103c6565b610423610a73565b6040516103c691906149ae565b6103bc61043e3660046149c1565b610b2b565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc610bfa565b61047a610c8b565b6040516103c691906149fd565b6103bc610d22565b6104a261049d366004614a2e565b610d8f565b005b6104a26104b23660046149c1565b610e27565b6103bc611135565b6103f66104cd36600461491d565b6111a2565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc6111ad565b6104a2610536366004614a53565b61121a565b6103bc610549366004614a8e565b6112ae565b6104a261055c366004614acb565b611366565b61047a611437565b6104a2610577366004614b0d565b6114aa565b6103bc61058a366004614b38565b611546565b6103bc6115bc565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc6105cc3660046149c1565b611629565b6103bc6116b1565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc610635366004614b73565b61171e565b6103bc611797565b61064a600281565b60405161ffff90911681526020016103c6565b6104a261066b3660046149c1565b611804565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b61047a6106a5366004614b90565b611a80565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b610423611b3f565b6104a26106e7366004614b0d565b611bac565b6104a26106fa366004614acb565b611c3f565b6103bc611cc9565b6103f661071536600461491d565b611d36565b6103f6610715366004614b38565b6103bc611d41565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc7f000000000000000000000000000000000000000000000000000000000000000081565b6103f66104cd366004614b38565b6103bc6107c1366004614bce565b611dae565b6107ce600681565b6040516103c69190614bfa565b6104a26107e9366004614a2e565b611e2e565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b61047a611fa8565b6103bc61082b366004614c3b565b61201b565b6103bc61209c565b6103bc610846366004614b38565b612109565b6104a2610859366004614a53565b61217f565b6104a261086c366004614c69565b6123e0565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc61245a565b6103f66124c7565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc612558565b6040517f4903b0d10000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff821660048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634903b0d1906024015b602060405180830381865afa9250505080156109b1575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526109ae91810190614c8d565b60015b610a68576040517f065a80d8000000000000000000000000000000000000000000000000000000008152600f83900b60048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063065a80d8906024015b602060405180830381865afa158015610a44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a689190614c8d565b92915050565b919050565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015610ae0573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b269190810190614d67565b905090565b6040517f07211ef7000000000000000000000000000000000000000000000000000000008152600f84810b600483015283900b6024820152604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906307211ef7906064015b602060405180830381865afa158015610bcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf09190614c8d565b90505b9392505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663140522886040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b269190614c8d565b610c936148ed565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166314f059796040518163ffffffff1660e01b8152600401606060405180830381865afa158015610cfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b269190614db8565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b60026000541415610e01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b60026000908155610e11836125c5565b9050610e1c816126d0565b505060016000555050565b60026000541415610e94576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610f25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f499190614e36565b90506000610f56856127ed565b90506000610f63856127ed565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529192506000918416906370a0823190602401602060405180830381865afa158015610fd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff99190614c8d565b90506001811115611127577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce800000061103f8784614e53565b6110499190614eb7565b604051600f8a810b602483015289900b60448201526064810184905260848101829052909150611124908690869086907fa6417ed6000000000000000000000000000000000000000000000000000000009060a4015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526001806128f7565b50505b505060016000555050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632081066c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6000610a68826125c5565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b60026000541415611287576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b60026000908155611297836125c5565b90506112a4838284612d6f565b5050600160005550565b6040517f3883e11900000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690633883e119906113259086908690600401614ef2565b602060405180830381865afa158015611342573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf39190614c8d565b600260005414156113d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b600260009081556113e3856125c5565b905060006113f0856125c5565b905061112782826000368080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525060019350915061301a9050565b61143f6148ed565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16634469e30e6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610cfe573d6000803e3d6000fd5b60026000541415611517576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b6002600090815561153d90600184358110916020860135821091604087013511906130e9565b50506001600055565b6040517f4903b0d1000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634903b0d19060240161095a565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635409491a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6040517f5e0d443f000000000000000000000000000000000000000000000000000000008152600f84810b600483015283900b6024820152604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635e0d443f90606401610baf565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166363543f066040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401610a27565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166376a2f0f06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b60026000541415611871576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611902573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119269190614e36565b90506000611933856125c5565b90506000611940856125c5565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529192506000918416906370a0823190602401602060405180830381865afa1580156119b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d69190614c8d565b90506001811115611127577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce8000000611a1c8784614e53565b611a269190614eb7565b604051600f8a810b602483015289900b60448201526064810184905260848101829052909150611124908690869086907f3df02124000000000000000000000000000000000000000000000000000000009060a40161109f565b611a886148ed565b6040517f85ca3c6f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906385ca3c6f90611afe90879087908790600401614f0a565b606060405180830381865afa158015611b1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf09190614db8565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610ae0573d6000803e3d6000fd5b60026000541415611c19576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b6002600090815561153d90600184358110916020860135821091604087013511906132c7565b60026000541415611cac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b60026000908155611cbc856127ed565b905060006113f0856127ed565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b4b577ad6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6000610a68826127ed565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb7b8b806040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6040517fcc2b27d700000000000000000000000000000000000000000000000000000000815260048101839052600f82900b60248201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063cc2b27d790604401611325565b60026000541415611e9b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b60026000908155611eab836125c5565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611f3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f5f9190614e36565b9050611f9b81837f0000000000000000000000000000000000000000000000000000000000000000611f92888a89613704565b600160006128f7565b5050600160005550505050565b611fb06148ed565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d96c7fce6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610cfe573d6000803e3d6000fd5b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063dd62ed3e90604401611325565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6040517fe2e7d264000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e2e7d26490602401610a27565b600260005414156121ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b600260009081556121fc836125c5565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa15801561228c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b09190614e36565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000918416906370a0823190602401602060405180830381865afa158015612322573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123469190614c8d565b905060018111156123d4577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce800000061238c8684614e53565b6123969190614eb7565b90506123d183857f00000000000000000000000000000000000000000000000000000000000000006123c98a8787613704565b6001806128f7565b50505b50506001600055505050565b6002600054141561244d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b600260005561153d613bc3565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f446c1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa158015612534573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b269190614e36565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fee3f7f96040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b600081600f0b600014156125f657507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6001141561262557507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6002141561265457507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6003141561268357507f00000000000000000000000000000000000000000000000000000000000000005b73ffffffffffffffffffffffffffffffffffffffff8116610a6e576040517fd1da79bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa15801561275d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127819190614e36565b90506127e8817f0000000000000000000000000000000000000000000000000000000000000000846000368080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525092508291506128f79050565b505050565b600081600f0b6000141561281e57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6001141561284d57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6002141561287c57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6003141561268357507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff8116610a6e576040517fd1da79bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606000803373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614612a60576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301528916906370a0823190602401602060405180830381865afa1580156129a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129c99190614c8d565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152919350908816906370a0823190602401602060405180830381865afa158015612a39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a5d9190614c8d565b90505b8415612b5c576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612b4357600080fd5b505af1158015612b57573d6000803e3d6000fd5b505050505b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a90612bf29033907f0000000000000000000000000000000000000000000000000000000000000000908b90600401614f31565b6000604051808303816000875af1158015612c11573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052612c579190810190614d67565b92508415612d55576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612d3c57600080fd5b505af1158015612d50573d6000803e3d6000fd5b505050505b612d6389898985858961403d565b50509695505050505050565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612dfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e209190614e36565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000917f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015612eb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ed69190614c8d565b90506001811115613013577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01613011827f0000000000000000000000000000000000000000000000000000000000000000867f1a4d01d200000000000000000000000000000000000000000000000000000000858a6b033b2e3c9fd0803ce8000000612f638b84614e53565b612f6d9190614eb7565b6040516024810193909352600f9190910b60448301526064820152608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152600060016128f7565b505b5050505050565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015260609060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa1580156130aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130ce9190614e36565b90506130de8188888888886128f7565b979650505050505050565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015613176573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061319a9190614e36565b90506131a88585858561429f565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561325957600080fd5b505af115801561326d573d6000803e3d6000fd5b505050506132b16000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061471592505050565b506132be8585858561429f565b61301381614813565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015613354573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133789190614e36565b9050841561344a576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561343157600080fd5b505af1158015613445573d6000803e3d6000fd5b505050505b831561351a576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561350157600080fd5b505af1158015613515573d6000803e3d6000fd5b505050505b82156135ea576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156135d157600080fd5b505af11580156135e5573d6000803e3d6000fd5b505050505b81156136ba576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156136a157600080fd5b505af11580156136b5573d6000803e3d6000fd5b505050505b6136fa6000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061471592505050565b5061301381614813565b60607f0000000000000000000000000000000000000000000000000000000000000000600214156138bd5783600f0b6000146137fa576040516000602482015260448101849052606481018390527f0b4c7e4d00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526138b6565b6040516024810184905260006044820152606481018390527f0b4c7e4d00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091525b9050610bf3565b7f0000000000000000000000000000000000000000000000000000000000000000600314156139d75783600f0b60001461398e5783600f0b60011461394557604051600060248201819052604482015260648101849052608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401613778565b604051600060248201819052604482018590526064820152608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401613778565b604051602481018490526000604482018190526064820152608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401613838565b7f000000000000000000000000000000000000000000000000000000000000000060041415613b615783600f0b600014613b115783600f0b600114613ac15783600f0b600214613a71576040516000602482018190526044820181905260648201526084810184905260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613778565b6040516000602482018190526044820181905260648201859052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613778565b6040516000602482018190526044820185905260648201819052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613778565b6040516024810184905260006044820181905260648201819052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613838565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f496e636f7272656374206e436f696e73000000000000000000000000000000006044820152606401610df8565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015613c50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c749190614e36565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301529192507f0000000000000000000000000000000000000000000000000000000000000000909116906351e3f16090604401600060405180830381600087803b158015613d2a57600080fd5b505af1158015613d3e573d6000803e3d6000fd5b50506040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f00000000000000000000000000000000000000000000000000000000000000001692506351e3f1609150604401600060405180830381600087803b158015613df357600080fd5b505af1158015613e07573d6000803e3d6000fd5b5050505060027f00000000000000000000000000000000000000000000000000000000000000001115613ff0576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015613ee557600080fd5b505af1158015613ef9573d6000803e3d6000fd5b5050505060037f00000000000000000000000000000000000000000000000000000000000000001115613ff0576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015613fd757600080fd5b505af1158015613feb573d6000803e3d6000fd5b505050505b6140306000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061471592505050565b5061403a81614813565b50565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461413e576040517f654a9eda00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528681166024830152858116604483015260648201859052608482018490527f0000000000000000000000000000000000000000000000000000000000000000169063654a9eda9060a401600060405180830381600087803b15801561412157600080fd5b505af1158015614135573d6000803e3d6000fd5b50505050613011565b80156141ee576040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015286811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b1580156141d557600080fd5b505af11580156141e9573d6000803e3d6000fd5b505050505b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015285811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561427f57600080fd5b505af1158015614293573d6000803e3d6000fd5b50505050505050505050565b83156143bb576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156143a257600080fd5b505af11580156143b6573d6000803e3d6000fd5b505050505b82156144d7576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156144be57600080fd5b505af11580156144d2573d6000803e3d6000fd5b505050505b81156145f3576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156145da57600080fd5b505af11580156145ee573d6000803e3d6000fd5b505050505b801561470f576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156146f657600080fd5b505af115801561470a573d6000803e3d6000fd5b505050505b50505050565b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815260609073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a906147ae9033907f0000000000000000000000000000000000000000000000000000000000000000908790600401614f31565b6000604051808303816000875af11580156147cd573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610a689190810190614d67565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461403a576040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b1580156148d957600080fd5b505af1158015613013573d6000803e3d6000fd5b60405180606001604052806003906020820280368337509192915050565b8035600f81900b8114610a6e57600080fd5b60006020828403121561492f57600080fd5b610bf38261490b565b60005b8381101561495357818101518382015260200161493b565b8381111561470f5750506000910152565b6000815180845261497c816020860160208601614938565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610bf36020830184614964565b6000806000606084860312156149d657600080fd5b6149df8461490b565b92506149ed6020850161490b565b9150604084013590509250925092565b60608101818360005b6003811015614a25578151835260209283019290910190600101614a06565b50505092915050565b600080600060608486031215614a4357600080fd5b833592506149ed6020850161490b565b60008060408385031215614a6657600080fd5b614a6f8361490b565b946020939093013593505050565b8060608101831015610a6857600080fd5b60008060808385031215614aa157600080fd5b614aab8484614a7d565b915060608301358015158114614ac057600080fd5b809150509250929050565b60008060008060808587031215614ae157600080fd5b614aea8561490b565b9350614af86020860161490b565b93969395505050506040820135916060013590565b60008060808385031215614b2057600080fd5b614b2a8484614a7d565b946060939093013593505050565b600060208284031215614b4a57600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461403a57600080fd5b600060208284031215614b8557600080fd5b8135610bf381614b51565b600080600060e08486031215614ba557600080fd5b614baf8585614a7d565b9250614bbe8560608601614a7d565b915060c084013590509250925092565b60008060408385031215614be157600080fd5b82359150614bf16020840161490b565b90509250929050565b6020810160118310614c35577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60008060408385031215614c4e57600080fd5b8235614c5981614b51565b91506020830135614ac081614b51565b60008060808385031215614c7c57600080fd5b82359150614bf18460208501614a7d565b600060208284031215614c9f57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff80841115614cf057614cf0614ca6565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715614d3657614d36614ca6565b81604052809350858152868686011115614d4f57600080fd5b614d5d866020830187614938565b5050509392505050565b600060208284031215614d7957600080fd5b815167ffffffffffffffff811115614d9057600080fd5b8201601f81018413614da157600080fd5b614db084825160208401614cd5565b949350505050565b600060608284031215614dca57600080fd5b82601f830112614dd957600080fd5b6040516060810181811067ffffffffffffffff82111715614dfc57614dfc614ca6565b604052806060840185811115614e1157600080fd5b845b81811015614e2b578051835260209283019201614e13565b509195945050505050565b600060208284031215614e4857600080fd5b8151610bf381614b51565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614eb2577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500290565b600082614eed577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60808101606084833791151560609190910152919050565b60e081016060858337606082016000815260608582375060c0919091019190915292915050565b600073ffffffffffffffffffffffffffffffffffffffff808616835280851660208401525060606040830152614f6a6060830184614964565b9594505050505056fea2646970667358221220efb951725986e76ee157ff0d00cd7b7a6a9b8a581784400c52be5c96516fe15064736f6c634300080a0033608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6118158061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c80638da5cb5b11610076578063d7aa2e351161005b578063d7aa2e35146101b3578063d914cd4b146101f2578063f2fde38b1461020557600080fd5b80638da5cb5b1461015d578063c488f7fe1461018557600080fd5b80634dee073b116100a75780634dee073b146101015780636f33547d14610142578063715018a61461015557600080fd5b80631bf64c41146100c357806345330666146100ec575b600080fd5b6100d66100d1366004611345565b610218565b6040516100e3919061142e565b60405180910390f35b6100ff6100fa366004611500565b6103fa565b005b61012f61010f366004611551565b6001602090815260009283526040808420909152908252902054600f0b81565b604051600f9190910b81526020016100e3565b6100d6610150366004611345565b6104d7565b6100ff610514565b60005460405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100e3565b61012f610193366004611551565b6002602090815260009283526040808420909152908252902054600f0b81565b6101e46101c136600461158a565b600360209081526000938452604080852082529284528284209052825290205481565b6040519081526020016100e3565b6100ff6102003660046115d5565b6105a1565b6100ff6102133660046115d5565b61089e565b6102556040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b61025e836109ce565b156103f45760008273ffffffffffffffffffffffffffffffffffffffff1663bd90df706040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102d491906115f2565b905060008060008060006102e88987610a67565b9450945094509450945082156103ed5760405180608001604052806103118b8b858a8a89610d8b565b8152602001828152602001600115158152602001600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008c6040015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008c6060015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481525096505b5050505050505b92915050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610480576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff93841660009081526003602090815260408083209587168084528683528184209590971683529381528382208390559384528281209481529390925290912055565b6103f46040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b60005473ffffffffffffffffffffffffffffffffffffffff163314610595576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610477565b61059f6000611045565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610622576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610477565b60005b6004600f82900b121561075d576040517f23746eb8000000000000000000000000000000000000000000000000000000008152600f82900b600482015273ffffffffffffffffffffffffffffffffffffffff8316906323746eb890602401602060405180830381865afa9250505080156106da575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526106d7918101906115f2565b60015b6106e35761075d565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160208181526040808420959094168352939093522080547fffffffffffffffffffffffffffffffff0000000000000000000000000000000016929091016fffffffffffffffffffffffffffffffff8116929092179055610625565b5060005b6004600f82900b121561089a576040517fb739953e000000000000000000000000000000000000000000000000000000008152600f82900b600482015273ffffffffffffffffffffffffffffffffffffffff83169063b739953e90602401602060405180830381865afa925050508015610816575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610813918101906115f2565b60015b61081e575050565b73ffffffffffffffffffffffffffffffffffffffff808416600090815260026020908152604080832094909316825292909252902080546fffffffffffffffffffffffffffffffff60018401167fffffffffffffffffffffffffffffffff00000000000000000000000000000000909116179055600101610761565b5050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461091f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610477565b73ffffffffffffffffffffffffffffffffffffffff81166109c2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610477565b6109cb81611045565b50565b600080825160028111156109e4576109e461160f565b1480610a025750600182516002811115610a0057610a0061160f565b145b15610a0f57506001919050565b600282516002811115610a2457610a2461160f565b1415610a3257506000919050565b81516040517ffe7995cf000000000000000000000000000000000000000000000000000000008152610477919060040161163e565b73ffffffffffffffffffffffffffffffffffffffff80821660009081526001602081815260408084208782015190951684529390529181205490918291829182918291610ab691600f0b6116ae565b73ffffffffffffffffffffffffffffffffffffffff808816600090815260016020818152604080842060608e0151909516845293905291902054919650610aff91600f0b6116ae565b9350600085600f0b12158015610b195750600084600f0b12155b15610bf85760a08701516040517f5e0d443f000000000000000000000000000000000000000000000000000000008152600f87810b600483015286900b6024820152604481019190915273ffffffffffffffffffffffffffffffffffffffff871690635e0d443f90606401602060405180830381865afa925050508015610bdb575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610bd89181019061171f565b60015b610be457610d81565b8015610bf257600193508091505b50610d81565b73ffffffffffffffffffffffffffffffffffffffff80871660009081526002602090815260408083208b82015190941683529290522054610c3e90600190600f0b6116ae565b73ffffffffffffffffffffffffffffffffffffffff808816600090815260026020908152604080832060608d015190941683529290522054909550610c8890600190600f0b6116ae565b9350600085600f0b12158015610ca25750600084600f0b12155b15610d815760a08701516040517f07211ef7000000000000000000000000000000000000000000000000000000008152600f87810b600483015286900b6024820152604481019190915273ffffffffffffffffffffffffffffffffffffffff8716906307211ef790606401602060405180830381865afa925050508015610d64575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610d619181019061171f565b60015b610d6d57610d81565b8015610d7f5760019350809150600192505b505b9295509295909350565b6040805180820190915260008152606060208201526060600188516002811115610db757610db761160f565b1415610eb75782610de8577f79bea66400000000000000000000000000000000000000000000000000000000610e0a565b7f1af4de83000000000000000000000000000000000000000000000000000000005b8585610e168b8a6110ba565b604051600f93840b60248201529190920b60448201526064810191909152608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505b600088516002811115610ecc57610ecc61160f565b1415610fcc5782610efd577f3df0212400000000000000000000000000000000000000000000000000000000610f1f565b7fa6417ed6000000000000000000000000000000000000000000000000000000005b8585610f2b8b8a6110f2565b604051600f93840b60248201529190920b60448201526064810191909152608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505b8051156110065760405180604001604052808873ffffffffffffffffffffffffffffffffffffffff1681526020018281525091505061103b565b87516040517ffe7995cf000000000000000000000000000000000000000000000000000000008152610477919060040161163e565b9695505050505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60a08201516000906110e1846110dc856b033b2e3c9fd0803ce8000000611738565b6110f2565b6110eb9190611775565b9392505050565b60008260e0015115611106575060006103f4565b60008351600281111561111b5761111b61160f565b148061113957506001835160028111156111375761113761160f565b145b1561116c5760c08301516127109061115190826117b0565b61115b9084611738565b6111659190611775565b90506103f4565b6002835160028111156111815761118161160f565b14156111a45760c0830151611198906127106117c7565b61115b61271084611738565b82516040517ffe7995cf000000000000000000000000000000000000000000000000000000008152610477919060040161163e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610100810167ffffffffffffffff8111828210171561122c5761122c6111d9565b60405290565b80356003811061124157600080fd5b919050565b73ffffffffffffffffffffffffffffffffffffffff811681146109cb57600080fd5b803561124181611246565b600082601f83011261128457600080fd5b8135602067ffffffffffffffff808311156112a1576112a16111d9565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f830116810181811084821117156112e4576112e46111d9565b60405293845285810183019383810192508785111561130257600080fd5b83870191505b8482101561132a57813561131b81611246565b83529183019190830190611308565b979650505050505050565b8035801515811461124157600080fd5b6000806040838503121561135857600080fd5b823567ffffffffffffffff8082111561137057600080fd5b90840190610100828703121561138557600080fd5b61138d611208565b61139683611232565b81526113a460208401611268565b60208201526113b560408401611268565b60408201526113c660608401611268565b60608201526080830135828111156113dd57600080fd5b6113e988828601611273565b60808301525060a083013560a082015260c083013560c082015261140f60e08401611335565b60e0820152935061142591505060208401611268565b90509250929050565b60006020808352835160808285015273ffffffffffffffffffffffffffffffffffffffff81511660a0850152818101519050604060c085015280518060e086015260005b8181101561148f5782810184015186820161010001528301611472565b818111156114a257600061010083880101525b50828601516040860152604086015192506114c1606086018415159052565b606095909501516080850152505050601f919091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016016101000190565b6000806000806080858703121561151657600080fd5b843561152181611246565b9350602085013561153181611246565b9250604085013561154181611246565b9396929550929360600135925050565b6000806040838503121561156457600080fd5b823561156f81611246565b9150602083013561157f81611246565b809150509250929050565b60008060006060848603121561159f57600080fd5b83356115aa81611246565b925060208401356115ba81611246565b915060408401356115ca81611246565b809150509250925092565b6000602082840312156115e757600080fd5b81356110eb81611246565b60006020828403121561160457600080fd5b81516110eb81611246565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160038310611679577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600081600f0b83600f0b60008112817fffffffffffffffffffffffffffffffff80000000000000000000000000000000018312811516156116f1576116f161167f565b816f7fffffffffffffffffffffffffffffff0183138116156117155761171561167f565b5090039392505050565b60006020828403121561173157600080fd5b5051919050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156117705761177061167f565b500290565b6000826117ab577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000828210156117c2576117c261167f565b500390565b600082198211156117da576117da61167f565b50019056fea2646970667358221220ed82995f9e9761ea7972d39ed0d8d0b378778cbba995315b16c90b49c74d2b7e64736f6c634300080a003360806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d00011790553480156200003a57600080fd5b506040805161018081019091526000908060c081018060018152604080518082018252600381526244414960e81b6020828101919091528301526012908201526305f5e100606082015260800160018152602001600081525081526020016040518060c001604052806002600a811115620000b957620000b962000b78565b815260408051808201825260048152635553444360e01b6020828101919091528301526006908201526305f5e100606082015260800160018152602001600081525081526020016040518060c001604052806003600a81111562000121576200012162000b78565b815260408051808201825260048152630ae8aa8960e31b602082810191909152830152601290820152644a817c8000606082015260800160028152602001600081525081526020016040518060c001604052806004600a8111156200018a576200018a62000b78565b815260408051808201825260048152634c494e4b60e01b6020828101919091528301526012908201526359682f00606082015260800160018152602001600081525081526020016040518060c001604052806005600a811115620001f257620001f262000b78565b815260408051808201825260048152631554d11560e21b602082810191909152830152601290820152633b023380606082015260800160018152602001600081525081526020016040518060c001604052806006600a8111156200025a576200025a62000b78565b815260408051808201825260058152640e6e88aa8960db1b602082810191909152830152601290820152644cd588640060608201526080016003815260200160009052905260408051610140810190915290915060009080608081018060078152602001604051806040016040528060048152602001636344414960e01b8152508152602001601260ff1681526020016305f5e100815260200160048081111562000309576200030962000b78565b8152602001600181525081526020016040518060c001604052806008600a81111562000339576200033962000b78565b81526040805180820182526005815264635553444360d81b6020828101919091528301526006908201526305f5e100606082015260800160048152602001600281525081526020016040518060c001604052806009600a811115620003a257620003a262000b78565b8152604080518082018252600581526418d554d11560da1b602082810191909152830152601290820152633b023380606082015260800160048152602001600581525081526020016040518060c00160405280600a808111156200040a576200040a62000b78565b81526040805180820182526005815264634c494e4b60d81b6020828101919091528301526012908201526359682f00606082015260800160048152602001600490529052905060005b600681101562000496576200048183826006811062000476576200047662000b8e565b6020020151620004db565b806200048d8162000ba4565b91505062000453565b5060005b6004811015620004d257620004bd82826004811062000476576200047662000b8e565b80620004c98162000ba4565b9150506200049a565b50505062000d14565b6000600282608001516004811115620004f857620004f862000b78565b14156200054e576040516200050d9062000a8c565b604051809103906000f0801580156200052a573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b03831617905590506200071e565b60038260800151600481111562000569576200056962000b78565b1415620005a4576040516200057e9062000a9a565b604051809103906000f0801580156200059b573d6000803e3d6000fd5b5090506200071e565b600182608001516004811115620005bf57620005bf62000b78565b1415620005f157816020015182602001518360400151604051620005e39062000aa8565b6200057e9392919062000c1e565b6004826080015160048111156200060c576200060c62000b78565b1415620006be576000600260008460a00151600a81111562000632576200063262000b78565b600a81111562000646576200064662000b78565b815260200190815260200160002060009054906101000a90046001600160a01b0316905082602001518360200151846040015183604051620006889062000ab6565b62000697949392919062000c5b565b604051809103906000f080158015620006b4573d6000803e3d6000fd5b509150506200071e565b60405162461bcd60e51b815260206004820152602b60248201527f74657374546f6b656e53756974653a204372656174696e6720756e6b6e6f776e60448201526a20746f6b656e207479706560a81b606482015260840160405180910390fd5b60005460208301516040516318caf8e360e31b8152620100009092046001600160a01b03169163c657c718916200075b9185919060040162000ca9565b600060405180830381600087803b1580156200077657600080fd5b505af11580156200078b573d6000803e3d6000fd5b50505050600082606001516008604051620007a69062000ac4565b91825260ff166020820152604001604051809103906000f080158015620007d1573d6000803e3d6000fd5b50905081600260008560000151600a811115620007f257620007f262000b78565b600a81111562000806576200080662000b78565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055508260600151600560008560000151600a8111156200085a576200085a62000b78565b600a8111156200086e576200086e62000b78565b8152602080820192909252604090810160009081209390935585516001600160a01b03861684526008909252909120805460ff1916600183600a811115620008ba57620008ba62000b78565b02179055508260800151600360008560000151600a811115620008e157620008e162000b78565b600a811115620008f557620008f562000b78565b81526020810191909152604001600020805460ff1916600183600481111562000922576200092262000b78565b0217905550604080518082019091526001600160a01b0380841682528281166020808401918252600780546001810182556000918252945160029095027fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688810180549686166001600160a01b031997881617905592517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c689909301805493909416929094169190911790915584015184519091600491600a811115620009eb57620009eb62000b78565b600a811115620009ff57620009ff62000b78565b8152602001908152602001600020908051906020019062000a2292919062000ad2565b5080600660008560000151600a81111562000a415762000a4162000b78565b600a81111562000a555762000a5562000b78565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550505050565b610ab1806200285183390190565b611224806200330283390190565b611758806200452683390190565b6117098062005c7e83390190565b6106ca806200738783390190565b82805462000ae09062000cd7565b90600052602060002090601f01602090048101928262000b04576000855562000b4f565b82601f1062000b1f57805160ff191683800117855562000b4f565b8280016001018555821562000b4f579182015b8281111562000b4f57825182559160200191906001019062000b32565b5062000b5d92915062000b61565b5090565b5b8082111562000b5d576000815560010162000b62565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600060001982141562000bc757634e487b7160e01b600052601160045260246000fd5b5060010190565b6000815180845260005b8181101562000bf65760208185018101518683018201520162000bd8565b8181111562000c09576000602083870101525b50601f01601f19169290920160200192915050565b60608152600062000c33606083018662000bce565b828103602084015262000c47818662000bce565b91505060ff83166040830152949350505050565b60808152600062000c70608083018762000bce565b828103602084015262000c84818762000bce565b60ff95909516604084015250506001600160a01b039190911660609091015292915050565b6001600160a01b038316815260406020820181905260009062000ccf9083018462000bce565b949350505050565b600181811c9082168062000cec57607f821691505b6020821081141562000d0e57634e487b7160e01b600052602260045260246000fd5b50919050565b611b2d8062000d246000396000f3fe6080604052600436106101635760003560e01c80638eb86e8b116100c0578063c6c3bbe611610074578063d051a62211610059578063d051a62214610490578063eebab8ef146104b0578063fa7626d4146104d057600080fd5b8063c6c3bbe614610433578063c74912d21461045357600080fd5b80639b140a85116100a55780639b140a85146103e6578063b36ba20814610406578063ba414fa61461040e57600080fd5b80638eb86e8b1461038357806398cdaadf146103a357600080fd5b80636a72bde71161011757806388327863116100fc578063883278631461030857806388f776a2146103365780638a3177a31461035657600080fd5b80636a72bde7146102c45780636ca42ae3146102e657600080fd5b8063440864fa11610148578063440864fa146102025780634b57b0be1461022f57806367b426451461028157600080fd5b806304bc3b1c1461016f57806310c7f0b9146101b557600080fd5b3661016a57005b600080fd5b34801561017b57600080fd5b5061019f61018a3660046116f6565b60086020526000908152604090205460ff1681565b6040516101ac9190611742565b60405180910390f35b3480156101c157600080fd5b506101d56101d036600461175c565b6104ea565b6040805173ffffffffffffffffffffffffffffffffffffffff9384168152929091166020830152016101ac565b34801561020e57600080fd5b5061022261021d366004611784565b610530565b6040516101ac91906117cb565b34801561023b57600080fd5b5060015461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101ac565b34801561028d57600080fd5b5061025c61029c366004611784565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156102d057600080fd5b506102e46102df36600461181c565b6105ca565b005b3480156102f257600080fd5b506102fb610730565b6040516101ac919061186b565b34801561031457600080fd5b506103286103233660046118d4565b6107b5565b6040519081526020016101ac565b34801561034257600080fd5b506102e461035136600461190b565b610888565b34801561036257600080fd5b50610328610371366004611784565b60056020526000908152604090205481565b34801561038f57600080fd5b506102e461039e366004611954565b6108b9565b3480156103af57600080fd5b5061025c6103be366004611784565b60066020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156103f257600080fd5b506102e4610401366004611993565b610a73565b6102e4610b22565b34801561041a57600080fd5b50610423610ba0565b60405190151581526020016101ac565b34801561043f57600080fd5b506102e461044e3660046119b3565b610d00565b34801561045f57600080fd5b5061048361046e366004611784565b60036020526000908152604090205460ff1681565b6040516101ac91906119d3565b34801561049c57600080fd5b506103286104ab36600461190b565b610daf565b3480156104bc57600080fd5b506102e46104cb366004611954565b610e8b565b3480156104dc57600080fd5b506000546104239060ff1681565b600781815481106104fa57600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff91821692501682565b60046020526000908152604090208054610549906119e7565b80601f0160208091040260200160405190810160405280929190818152602001828054610575906119e7565b80156105c25780601f10610597576101008083540402835291602001916105c2565b820191906000526020600020905b8154815290600101906020018083116105a557829003601f168201915b505050505081565b6000546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152620100009092049091169063ca669fa790602401600060405180830381600087803b15801561063e57600080fd5b505af1158015610652573d6000803e3d6000fd5b505050506002600085600a81111561066c5761066c611713565b600a81111561067d5761067d611713565b8152602081019190915260409081016000205490517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490529091169063095ea7b3906044016020604051808303816000875af1158015610705573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107299190611a3b565b5050505050565b60606007805480602002602001604051908101604052809291908181526020016000905b828210156107ac5760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff908116835260019182015416828401529083529092019101610754565b50505050905090565b60006002600084600a8111156107cd576107cd611713565b600a8111156107de576107de611713565b8152602081019190915260409081016000205490517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152909116906370a0823190602401602060405180830381865afa15801561085d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108819190611a5d565b9392505050565b6108b48383837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6105ca565b505050565b60016003600085600a8111156108d1576108d1611713565b600a8111156108e2576108e2611713565b815260208101919091526040016000205460ff16600481111561090757610907611713565b14610999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f74657374546f6b656e53756974653a20547279696e6720746f206275726e206160448201527f206e6f6e2d6e6f726d616c20746f6b656e00000000000000000000000000000060648201526084015b60405180910390fd5b6002600084600a8111156109af576109af611713565b600a8111156109c0576109c0611713565b8152602081019190915260409081016000205490517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526024820184905290911690639dc29fac906044015b6020604051808303816000875af1158015610a49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6d9190611a3b565b50505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604081205460ff169081600a811115610aaf57610aaf611713565b1415610b17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f20746f6b656e2077697468207375636820616464726573730000000000006044820152606401610990565b610a6d818484610888565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015610b8c57600080fd5b505af1158015610729573d6000803e3d6000fd5b60008054610100900460ff1615610bc05750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610cfb5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610c65917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc491608001611a76565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052610c9d91611abe565b6000604051808303816000865af19150503d8060008114610cda576040519150601f19603f3d011682016040523d82523d6000602084013e610cdf565b606091505b5091505080806020019051810190610cf79190611a3b565b9150505b919050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604081205460ff169081600a811115610d3c57610d3c611713565b1415610da4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f20746f6b656e2077697468207375636820616464726573730000000000006044820152606401610990565b610a6d818484610e8b565b60006002600085600a811115610dc757610dc7611713565b600a811115610dd857610dd8611713565b8152602081019190915260409081016000205490517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301529091169063dd62ed3e90604401602060405180830381865afa158015610e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e839190611a5d565b949350505050565b60026003600085600a811115610ea357610ea3611713565b600a811115610eb457610eb4611713565b815260208101919091526040016000205460ff166004811115610ed957610ed9611713565b1415610ff6576000546040517fc88a5e6d000000000000000000000000000000000000000000000000000000008152306004820152602481018390526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c88a5e6d90604401600060405180830381600087803b158015610f5657600080fd5b505af1158015610f6a573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015610fd857600080fd5b505af1158015610fec573d6000803e3d6000fd5b505050505061163c565b600380600085600a81111561100d5761100d611713565b600a81111561101e5761101e611713565b815260208101919091526040016000205460ff16600481111561104357611043611713565b14156111aa576000546040517fc88a5e6d000000000000000000000000000000000000000000000000000000008152306004820152602481018390526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c88a5e6d90604401600060405180830381600087803b1580156110c057600080fd5b505af11580156110d4573d6000803e3d6000fd5b505050506002600084600a8111156110ee576110ee611713565b600a8111156110ff576110ff611713565b8152602081019190915260409081016000205490517fa1903eab00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a1903eab90839060240160206040518083038185885af115801561117f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906111a49190611a5d565b5061163c565b60046003600085600a8111156111c2576111c2611713565b600a8111156111d3576111d3611713565b815260208101919091526040016000205460ff1660048111156111f8576111f8611713565b141561148f5760006002600085600a81111561121657611216611713565b600a81111561122757611227611713565b815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c49190611ada565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600860205260409020549091506112fb9060ff163084610e8b565b8073ffffffffffffffffffffffffffffffffffffffff1663095ea7b36002600087600a81111561132d5761132d611713565b600a81111561133e5761133e611713565b81526020810191909152604090810160002054905160e083901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602481018590526044016020604051808303816000875af11580156113c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e69190611a3b565b506002600085600a8111156113fd576113fd611713565b600a81111561140e5761140e611713565b8152602081019190915260409081016000205490517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810184905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f1990604401600060405180830381600087803b158015610fd857600080fd5b60016003600085600a8111156114a7576114a7611713565b600a8111156114b8576114b8611713565b815260208101919091526040016000205460ff1660048111156114dd576114dd611713565b14156115b4576002600084600a8111156114f9576114f9611713565b600a81111561150a5761150a611713565b8152602081019190915260409081016000205490517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f19906044016020604051808303816000875af1158015611590573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a49190611a3b565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f74657374546f6b656e53756974653a20547279696e6720746f207472616e736660448201527f657220756e6b6e6f776e20746f6b656e000000000000000000000000000000006064820152608401610990565b6002600084600a81111561165257611652611713565b600a81111561166357611663611713565b8152602081019190915260409081016000205490517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490529091169063a9059cbb90604401610a2a565b73ffffffffffffffffffffffffffffffffffffffff811681146116f357600080fd5b50565b60006020828403121561170857600080fd5b8135610881816116d1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60208101600b831061175657611756611713565b91905290565b60006020828403121561176e57600080fd5b5035919050565b8035600b8110610cfb57600080fd5b60006020828403121561179657600080fd5b61088182611775565b60005b838110156117ba5781810151838201526020016117a2565b83811115610a6d5750506000910152565b60208152600082518060208401526117ea81604085016020870161179f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000806080858703121561183257600080fd5b61183b85611775565b9350602085013561184b816116d1565b9250604085013561185b816116d1565b9396929550929360600135925050565b602080825282518282018190526000919060409081850190868401855b828110156118c7578151805173ffffffffffffffffffffffffffffffffffffffff90811686529087015116868501529284019290850190600101611888565b5091979650505050505050565b600080604083850312156118e757600080fd5b6118f083611775565b91506020830135611900816116d1565b809150509250929050565b60008060006060848603121561192057600080fd5b61192984611775565b92506020840135611939816116d1565b91506040840135611949816116d1565b809150509250925092565b60008060006060848603121561196957600080fd5b61197284611775565b92506020840135611982816116d1565b929592945050506040919091013590565b6000806000606084860312156119a857600080fd5b8335611929816116d1565b6000806000606084860312156119c857600080fd5b8335611972816116d1565b602081016005831061175657611756611713565b600181811c908216806119fb57607f821691505b60208210811415611a35577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600060208284031215611a4d57600080fd5b8151801515811461088157600080fd5b600060208284031215611a6f57600080fd5b5051919050565b7fffffffff000000000000000000000000000000000000000000000000000000008316815260008251611ab081600485016020870161179f565b919091016004019392505050565b60008251611ad081846020870161179f565b9190910192915050565b600060208284031215611aec57600080fd5b8151610881816116d156fea264697066735822122010fe735ed069aca27931edce4ba2ff14ec7886bf21b0eea685a884f9200fb49e64736f6c634300080a003360c0604052600d60808190526c2bb930b83832b21022ba3432b960991b60a090815261002e916000919061007a565b50604080518082019091526004808252630ae8aa8960e31b602090920191825261005a9160019161007a565b506002805460ff1916601217905534801561007457600080fd5b5061014e565b82805461008690610113565b90600052602060002090601f0160209004810192826100a857600085556100ee565b82601f106100c157805160ff19168380011785556100ee565b828001600101855582156100ee579182015b828111156100ee5782518255916020019190600101906100d3565b506100fa9291506100fe565b5090565b5b808211156100fa57600081556001016100ff565b600181811c9082168061012757607f821691505b6020821081141561014857634e487b7160e01b600052602260045260246000fd5b50919050565b6109548061015d6000396000f3fe6080604052600436106100cb5760003560e01c806340c10f1911610074578063a9059cbb1161004e578063a9059cbb14610225578063d0e30db014610245578063dd62ed3e1461024d57600080fd5b806340c10f19146101c357806370a08231146101e357806395d89b411461021057600080fd5b806323b872dd116100a557806323b872dd146101575780632e1a7d4d14610177578063313ce5671461019757600080fd5b806306fdde03146100df578063095ea7b31461010a57806318160ddd1461013a57600080fd5b366100da576100d8610285565b005b600080fd5b3480156100eb57600080fd5b506100f46102e0565b6040516101019190610703565b60405180910390f35b34801561011657600080fd5b5061012a61012536600461079f565b61036e565b6040519015158152602001610101565b34801561014657600080fd5b50475b604051908152602001610101565b34801561016357600080fd5b5061012a6101723660046107c9565b6103e7565b34801561018357600080fd5b506100d8610192366004610805565b6105fe565b3480156101a357600080fd5b506002546101b19060ff1681565b60405160ff9091168152602001610101565b3480156101cf57600080fd5b506100d86101de36600461079f565b6106a4565b3480156101ef57600080fd5b506101496101fe36600461081e565b60036020526000908152604090205481565b34801561021c57600080fd5b506100f46106e2565b34801561023157600080fd5b5061012a61024036600461079f565b6106ef565b6100d8610285565b34801561025957600080fd5b50610149610268366004610839565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102a490849061089b565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102ed906108b3565b80601f0160208091040260200160405190810160405280929190818152602001828054610319906108b3565b80156103665780601f1061033b57610100808354040283529160200191610366565b820191906000526020600020905b81548152906001019060200180831161034957829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103d69086815260200190565b60405180910390a350600192915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561041957600080fd5b73ffffffffffffffffffffffffffffffffffffffff8416331480159061048f575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105175773ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020548211156104d157600080fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915281208054849290610511908490610907565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061054c908490610907565b909155505073ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260408120805484929061058690849061089b565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516105ec91815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561061a57600080fd5b3360009081526003602052604081208054839290610639908490610907565b9091555050604051339082156108fc029083906000818181858888f1935050505015801561066b573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260036020526040812080548392906106d990849061089b565b90915550505050565b600180546102ed906108b3565b60006106fc3384846103e7565b9392505050565b600060208083528351808285015260005b8181101561073057858101830151858201604001528201610714565b81811115610742576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461079a57600080fd5b919050565b600080604083850312156107b257600080fd5b6107bb83610776565b946020939093013593505050565b6000806000606084860312156107de57600080fd5b6107e784610776565b92506107f560208501610776565b9150604084013590509250925092565b60006020828403121561081757600080fd5b5035919050565b60006020828403121561083057600080fd5b6106fc82610776565b6000806040838503121561084c57600080fd5b61085583610776565b915061086360208401610776565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156108ae576108ae61086c565b500190565b600181811c908216806108c757607f821691505b60208210811415610901577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000828210156109195761091961086c565b50039056fea26469706673582212206ec943fa4e3b70d8fca6c25b6aa26fa18e8f8952ce3bc4d5afcb443bf3097c0564736f6c634300080a003360806040526000600255600060035534801561001a57600080fd5b506111fa8061002a6000396000f3fe60806040526004361061016e5760003560e01c80637a28fb88116100cb578063bdd17e1c1161007f578063dd62ed3e11610059578063dd62ed3e146103ee578063ee7a7c0414610441578063f5eb42dc1461046157600080fd5b8063bdd17e1c146103ad578063cdb9a21c146103c3578063d5002f2e146103d957600080fd5b8063a1903eab116100b0578063a1903eab1461035a578063a457c2d71461036d578063a9059cbb1461038d57600080fd5b80637a28fb88146102f457806395d89b411461031457600080fd5b806323b872dd1161012257806337cfdaca1161010757806337cfdaca1461020d57806339509351146102b457806370a08231146102d457600080fd5b806323b872dd14610278578063313ce5671461029857600080fd5b806318160ddd1161015357806318160ddd1461020d578063192084511461023057806322301f6e1461025057600080fd5b806306fdde0314610185578063095ea7b3146101dd57600080fd5b366101805761017d6000610481565b50005b600080fd5b34801561019157600080fd5b5060408051808201909152601781527f4c6971756964207374616b656420457468657220322e3000000000000000000060208201525b6040516101d49190610f63565b60405180910390f35b3480156101e957600080fd5b506101fd6101f8366004610fff565b610545565b60405190151581526020016101d4565b34801561021957600080fd5b5061022261055b565b6040519081526020016101d4565b34801561023c57600080fd5b5061022261024b366004611029565b61056b565b34801561025c57600080fd5b5061027661026b366004611042565b600391909155600255565b005b34801561028457600080fd5b506101fd610293366004611064565b6105ab565b3480156102a457600080fd5b50604051601281526020016101d4565b3480156102c057600080fd5b506101fd6102cf366004610fff565b610696565b3480156102e057600080fd5b506102226102ef3660046110a0565b6106d9565b34801561030057600080fd5b5061022261030f366004611029565b61070e565b34801561032057600080fd5b5060408051808201909152600581527f737445544800000000000000000000000000000000000000000000000000000060208201526101c7565b6102226103683660046110a0565b61073a565b34801561037957600080fd5b506101fd610388366004610fff565b610745565b34801561039957600080fd5b506101fd6103a8366004610fff565b6107f9565b3480156103b957600080fd5b5061022260035481565b3480156103cf57600080fd5b5061022260025481565b3480156103e557600080fd5b50610222610806565b3480156103fa57600080fd5b506102226104093660046110bb565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b34801561044d57600080fd5b5061027661045c366004610fff565b610811565b34801561046d57600080fd5b5061022261047c3660046110a0565b61081f565b60003334806104f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f5a45524f5f4445504f534954000000000000000000000000000000000000000060448201526064015b60405180910390fd5b60006104fc8261056b565b9050806105065750805b8160036000828254610518919061111d565b909155506105289050838261084a565b61053383838761093b565b61053d8382610992565b949350505050565b60006105523384846109ea565b50600192915050565b600061056660035490565b905090565b60008061057760035490565b9050806105875750600092915050565b6105a48161059e61059760025490565b8690610b52565b90610b5e565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001602090815260408083203384529091528120548281101561066c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f5452414e534645525f414d4f554e545f455843454544535f414c4c4f57414e4360448201527f450000000000000000000000000000000000000000000000000000000000000060648201526084016104e8565b610677858585610b6a565b61068b85336106868487610bef565b6109ea565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916105529185906106869086610bfb565b73ffffffffffffffffffffffffffffffffffffffff81166000908152602081905260408120546107089061070e565b92915050565b60008061071a60025490565b90508061072a5750600092915050565b6105a48161059e61059760035490565b600061070882610481565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156107e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4445435245415345445f414c4c4f57414e43455f42454c4f575f5a45524f000060448201526064016104e8565b6107ef33856106868487610bef565b5060019392505050565b6000610552338484610b6a565b600061056660025490565b61081b8282610c07565b5050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040812054610708565b73ffffffffffffffffffffffffffffffffffffffff82166108c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4d494e545f544f5f5448455f5a45524f5f41444452455353000000000000000060448201526064016104e8565b80600260008282546108d9919061111d565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205461090e9082610bfb565b73ffffffffffffffffffffffffffffffffffffffff90921660009081526020819052604090209190915550565b6040805183815273ffffffffffffffffffffffffffffffffffffffff83811660208301528516917fed8dd430b1e4bba98e943dc5b157cf7b54d9e12916d6c474ff5733a95001d03b910160405180910390a2505050565b73ffffffffffffffffffffffffffffffffffffffff821660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6109d58461070e565b60405190815260200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff8316610a67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f415050524f56455f46524f4d5f5a45524f5f414444524553530000000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff8216610ae4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f415050524f56455f544f5f5a45524f5f4144445245535300000000000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006105a48284611135565b60006105a48284611172565b6000610b758261056b565b9050610b82848483610d64565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610be191815260200190565b60405180910390a350505050565b60006105a482846111ad565b60006105a4828461111d565b73ffffffffffffffffffffffffffffffffffffffff8216610c84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4255524e5f46524f4d5f5448455f5a45524f5f4144445245535300000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205480821115610d14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4255524e5f414d4f554e545f455843454544535f42414c414e4345000000000060448201526064016104e8565b8160026000828254610d2691906111ad565b90915550610d3690508183610bef565b73ffffffffffffffffffffffffffffffffffffffff9093166000908152602081905260409020929092555050565b73ffffffffffffffffffffffffffffffffffffffff8316610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f5452414e534645525f46524f4d5f5448455f5a45524f5f41444452455353000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff8216610e5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f5452414e534645525f544f5f5448455f5a45524f5f414444524553530000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205480821115610eee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5452414e534645525f414d4f554e545f455843454544535f42414c414e43450060448201526064016104e8565b610ef88183610bef565b73ffffffffffffffffffffffffffffffffffffffff8086166000908152602081905260408082209390935590851681522054610f349083610bfb565b73ffffffffffffffffffffffffffffffffffffffff909316600090815260208190526040902092909255505050565b600060208083528351808285015260005b81811015610f9057858101830151858201604001528201610f74565b81811115610fa2576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ffa57600080fd5b919050565b6000806040838503121561101257600080fd5b61101b83610fd6565b946020939093013593505050565b60006020828403121561103b57600080fd5b5035919050565b6000806040838503121561105557600080fd5b50508035926020909101359150565b60008060006060848603121561107957600080fd5b61108284610fd6565b925061109060208501610fd6565b9150604084013590509250925092565b6000602082840312156110b257600080fd5b6105a482610fd6565b600080604083850312156110ce57600080fd5b6110d783610fd6565b91506110e560208401610fd6565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611130576111306110ee565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561116d5761116d6110ee565b500290565b6000826111a8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000828210156111bf576111bf6110ee565b50039056fea2646970667358221220a5b4f31162ba2b8b3424cef84b31ef91d05a825243602b5fdf758ffb49b8246364736f6c634300080a003360a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a003360c06040523480156200001157600080fd5b506040516200170938038062001709833981016040819052620000349162000266565b8351849084906200004d906003906020850190620000f3565b50805162000063906004906020840190620000f3565b505050620000806200007a6200009d60201b60201c565b620000a1565b60ff9091166080526001600160a01b031660a05250620003479050565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b82805462000101906200030a565b90600052602060002090601f01602090048101928262000125576000855562000170565b82601f106200014057805160ff191683800117855562000170565b8280016001018555821562000170579182015b828111156200017057825182559160200191906001019062000153565b506200017e92915062000182565b5090565b5b808211156200017e576000815560010162000183565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c157600080fd5b81516001600160401b0380821115620001de57620001de62000199565b604051601f8301601f19908116603f0116810190828211818310171562000209576200020962000199565b816040528381526020925086838588010111156200022657600080fd5b600091505b838210156200024a57858201830151818301840152908201906200022b565b838211156200025c5760008385830101525b9695505050505050565b600080600080608085870312156200027d57600080fd5b84516001600160401b03808211156200029557600080fd5b620002a388838901620001af565b95506020870151915080821115620002ba57600080fd5b50620002c987828801620001af565b935050604085015160ff81168114620002e157600080fd5b60608601519092506001600160a01b0381168114620002ff57600080fd5b939692955090935050565b600181811c908216806200031f57607f821691505b602082108114156200034157634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05161138e6200037b600039600081816101f70152818161041f0152610600015260006101a2015261138e6000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80636f307dc3116100b257806395d89b4111610081578063a9059cbb11610066578063a9059cbb146102b5578063dd62ed3e146102c8578063f2fde38b1461030e57600080fd5b806395d89b411461029a578063a457c2d7146102a257600080fd5b80636f307dc3146101f257806370a082311461023e578063715018a6146102745780638da5cb5b1461027c57600080fd5b806323b872dd116100ee57806323b872dd14610188578063313ce5671461019b57806339509351146101cc57806340c10f19146101df57600080fd5b806306fdde0314610120578063095ea7b31461013e57806318160ddd146101615780631e9a695014610173575b600080fd5b610128610321565b604051610135919061112d565b60405180910390f35b61015161014c3660046111c9565b6103b3565b6040519015158152602001610135565b6002545b604051908152602001610135565b6101866101813660046111c9565b6103c9565b005b6101516101963660046111f3565b610491565b60405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610135565b6101516101da3660046111c9565b61057c565b6101866101ed3660046111c9565b6105c5565b6102197f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b61016561024c36600461122f565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610186610691565b60055473ffffffffffffffffffffffffffffffffffffffff16610219565b61012861071e565b6101516102b03660046111c9565b61072d565b6101516102c33660046111c9565b610805565b6101656102d6366004611251565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b61018661031c36600461122f565b610812565b60606003805461033090611284565b80601f016020809104026020016040519081016040528092919081815260200182805461035c90611284565b80156103a95780601f1061037e576101008083540402835291602001916103a9565b820191906000526020600020905b81548152906001019060200180831161038c57829003601f168201915b5050505050905090565b60006103c0338484610942565b50600192915050565b6103d33382610af5565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015610468573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048c91906112d8565b505050565b600061049e848484610ce2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6105718533858403610942565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916103c09185906105c0908690611329565b610942565b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906323b872dd906064016020604051808303816000875af115801561065e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068291906112d8565b5061068d8282610f96565b5050565b60055473ffffffffffffffffffffffffffffffffffffffff163314610712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161055b565b61071c60006110b6565b565b60606004805461033090611284565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156107ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161055b565b6107fb3385858403610942565b5060019392505050565b60006103c0338484610ce2565b60055473ffffffffffffffffffffffffffffffffffffffff163314610893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161055b565b73ffffffffffffffffffffffffffffffffffffffff8116610936576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161055b565b61093f816110b6565b50565b73ffffffffffffffffffffffffffffffffffffffff83166109e4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff8216610a87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8216610b98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015610c4e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290610c8a908490611341565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff8216610e28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610ede576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610f22908490611329565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f8891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161055b565b80600260008282546110259190611329565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152602081905260408120805483929061105f908490611329565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208083528351808285015260005b8181101561115a5785810183015185820160400152820161113e565b8181111561116c576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146111c457600080fd5b919050565b600080604083850312156111dc57600080fd5b6111e5836111a0565b946020939093013593505050565b60008060006060848603121561120857600080fd5b611211846111a0565b925061121f602085016111a0565b9150604084013590509250925092565b60006020828403121561124157600080fd5b61124a826111a0565b9392505050565b6000806040838503121561126457600080fd5b61126d836111a0565b915061127b602084016111a0565b90509250929050565b600181811c9082168061129857607f821691505b602082108114156112d2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156112ea57600080fd5b8151801515811461124a57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561133c5761133c6112fa565b500190565b600082821015611353576113536112fa565b50039056fea26469706673582212203a6db30cd3c097921df4156794aa7973eb848711deeb2cffd7c54a9df1fdb0a564736f6c634300080a003360a060405234801561001057600080fd5b506040516106ca3803806106ca83398101604081905261002f9161006c565b60009190915560ff166080526001805460506001600160501b031991821681179092556004805490911690911790554260028190556003556100a2565b6000806040838503121561007f57600080fd5b82519150602083015160ff8116811461009757600080fd5b809150509250929050565b60805161060e6100bc600039600060d3015261060e6000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80639a6fc8f511610081578063d62ada111161005b578063d62ada11146102dc578063f7a30806146102f4578063feaf968c1461030757600080fd5b80639a6fc8f5146101cd578063bd18ad531461023a578063cd653afc1461024d57600080fd5b806354fd4d50116100b257806354fd4d501461012d57806367e8d83d1461013c5780637284e4161461018e57600080fd5b8063313ce567146100ce5780633fd0875f1461010c575b600080fd5b6100f57f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020015b60405180910390f35b6004546a0100000000000000000000900460ff166040516101039190610441565b60405160018152602001610103565b61018c61014a366004610482565b600480549115156c01000000000000000000000000027fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff909216919091179055565b005b604080518082018252600c81527f7072696365206f7261636c6500000000000000000000000000000000000000006020820152905161010391906104ab565b6102036101db36600461053d565b60015460005460025460035460045469ffffffffffffffffffff948516941691939590929450565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610103565b61018c610248366004610558565b61030f565b61018c61025b366004610579565b6001805469ffffffffffffffffffff9586167fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090911617905560029290925560035560048054919092167fffffffffffffffffffffffffffffffffffffffff00ff00000000000000000000909116176b020000000000000000000000179055565b6102e461035f565b6040519015158152602001610103565b61018c6103023660046105bf565b600055565b610203610385565b600480548291907fffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff166b01000000000000000000000083600281111561035757610357610412565b021790555050565b600454600090610380906b010000000000000000000000900460ff166103d6565b905090565b60008060008060006004600c9054906101000a900460ff16156103a757600080fd5b505060015460005460025460035460045469ffffffffffffffffffff9485169893975091955093509190911690565b600060028260028111156103ec576103ec610412565b14156103f757600080fd5b600182600281111561040b5761040b610412565b1492915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016006831061047c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561049457600080fd5b813580151581146104a457600080fd5b9392505050565b600060208083528351808285015260005b818110156104d8578581018301518582016040015282016104bc565b818111156104ea576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803569ffffffffffffffffffff8116811461053857600080fd5b919050565b60006020828403121561054f57600080fd5b6104a48261051e565b60006020828403121561056a57600080fd5b8135600381106104a457600080fd5b6000806000806080858703121561058f57600080fd5b6105988561051e565b935060208501359250604085013591506105b46060860161051e565b905092959194509250565b6000602082840312156105d157600080fd5b503591905056fea264697066735822122014874f7a973b86501c4c1a8be32490fe902c8f088ee234d25f9b2497e19f9e5264736f6c634300080a00335745544820746f204441492067617320707269636520697320696e636f727265637444414920746f20555344432067617320707269636520697320696e636f7272656374a2646970667358221220a0f84d34a3b52e7c235f399f22e691ed3483b83412ff1c8c2db54070771381f364736f6c634300080a0033"; - -type CurvePathFinderTestConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: CurvePathFinderTestConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class CurvePathFinderTest__factory extends ContractFactory { - constructor(...args: CurvePathFinderTestConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): CurvePathFinderTest { - return super.attach(address) as CurvePathFinderTest; - } - override connect(signer: Signer): CurvePathFinderTest__factory { - return super.connect(signer) as CurvePathFinderTest__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): CurvePathFinderTestInterface { - return new utils.Interface(_abi) as CurvePathFinderTestInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): CurvePathFinderTest { - return new Contract(address, _abi, signerOrProvider) as CurvePathFinderTest; - } -} diff --git a/src/types/factories/contracts/test/pathfinder/CurvePathFinder.t.sol/index.ts b/src/types/factories/contracts/test/pathfinder/CurvePathFinder.t.sol/index.ts deleted file mode 100644 index 397e14f8..00000000 --- a/src/types/factories/contracts/test/pathfinder/CurvePathFinder.t.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { CurvePathFinderTest__factory } from "./CurvePathFinderTest__factory"; diff --git a/src/types/factories/contracts/test/pathfinder/NormalTokenPathFinder.t.sol/NormalTokenPathFinderTest__factory.ts b/src/types/factories/contracts/test/pathfinder/NormalTokenPathFinder.t.sol/NormalTokenPathFinderTest__factory.ts deleted file mode 100644 index 4d7b16db..00000000 --- a/src/types/factories/contracts/test/pathfinder/NormalTokenPathFinder.t.sol/NormalTokenPathFinderTest__factory.ts +++ /dev/null @@ -1,839 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - NormalTokenPathFinderTest, - NormalTokenPathFinderTestInterface, -} from "../../../../../contracts/test/pathfinder/NormalTokenPathFinder.t.sol/NormalTokenPathFinderTest"; - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "UnknownToken", - type: "error", - }, - { - inputs: [ - { - internalType: "enum SwapOperation", - name: "", - type: "uint8", - }, - ], - name: "UnsupportedSwapOperation", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "", - type: "address", - }, - ], - name: "log_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "log_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - name: "log_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "int256", - name: "", - type: "int256", - }, - ], - name: "log_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "address", - name: "val", - type: "address", - }, - ], - name: "log_named_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes", - name: "val", - type: "bytes", - }, - ], - name: "log_named_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes32", - name: "val", - type: "bytes32", - }, - ], - name: "log_named_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - ], - name: "log_named_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "string", - name: "val", - type: "string", - }, - ], - name: "log_named_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - ], - name: "log_named_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "log_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "logs", - type: "event", - }, - { - inputs: [], - name: "IS_TEST", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bool", - name: "withUnderlyings", - type: "bool", - }, - ], - name: "_setUpCurve", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "cft", - outputs: [ - { - internalType: "contract CreditFacadeTestSuite", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditConfigurator", - outputs: [ - { - internalType: "contract CreditConfigurator", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditFacade", - outputs: [ - { - internalType: "contract CreditFacade", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditManager", - outputs: [ - { - internalType: "contract ICreditManagerV2", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "curveAdapter", - outputs: [ - { - internalType: "contract ICurveV1Adapter", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "curveLPPathFinder", - outputs: [ - { - internalType: "contract CurveLPPathFinder", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "curveMetaAdapter", - outputs: [ - { - internalType: "contract ICurveV1Adapter", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "curvePathFinder", - outputs: [ - { - internalType: "contract CurvePathFinder", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "curveV1MetaMock", - outputs: [ - { - internalType: "contract CurveV1MetapoolMock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "curveV1Mock", - outputs: [ - { - internalType: "contract CurveV1Mock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "failed", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "setUp", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CPF_01_constructor_correctly_sets_initial_values", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CPF_02_getGasPriceTokenOutRAY_works_correctly", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "bool", - name: "isAll", - type: "bool", - }, - { - internalType: "bool", - name: "hasConnectorAmount", - type: "bool", - }, - ], - name: "test_CPF_03_getComplexPairSwap_finds_pair_through_different_protocols", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "bool", - name: "isAll", - type: "bool", - }, - { - internalType: "bool", - name: "hasConnectorAmount", - type: "bool", - }, - ], - name: "test_CPF_04_getComplexPairSwap_finds_the_best_path_gp_0", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "bool", - name: "isAll", - type: "bool", - }, - { - internalType: "uint256", - name: "connectorAmount", - type: "uint256", - }, - ], - name: "test_CPF_05_getComplexPairSwap_finds_the_best_path_gp_non_zero", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "uint256", - name: "connectorAmount", - type: "uint256", - }, - ], - name: "test_CPF_06_findSwapQuote_finds_the_best_path_for_connectors", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "uint256", - name: "connectorAmount", - type: "uint256", - }, - ], - name: "test_CPF_07_findSwapQuote_finds_the_best_path_gp_0", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "uint256", - name: "connectorAmount", - type: "uint256", - }, - ], - name: "test_CPF_08_findSwapQuote_finds_the_best_path_gp_non_zero", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CPF_09_findNormalTokenBestPath_reverts_if_it_can_find_any_path", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CPF_10_findNormalTokenBestPath_finds_correct_path_for_connector_tokens", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_CPF_11_findNormalTokenBestPath_finds_correct_path_for_connector_tokens", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "tokenMasksMap", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "underlying", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "uniV2adapter", - outputs: [ - { - internalType: "contract IUniswapV2Adapter", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "uniV2mock", - outputs: [ - { - internalType: "contract UniswapV2Mock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "uniV2pathFinder", - outputs: [ - { - internalType: "contract UniswapV2PathFinder", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "uniV3adapter", - outputs: [ - { - internalType: "contract IUniswapV3Adapter", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "uniV3mock", - outputs: [ - { - internalType: "contract UniswapV3Mock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "uniV3pathFinder", - outputs: [ - { - internalType: "contract UniswapV3PathFinder", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "yearnAdapter", - outputs: [ - { - internalType: "contract YearnV2Adapter", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "yearnMock", - outputs: [ - { - internalType: "contract YearnV2Mock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "yearnPathFinder", - outputs: [ - { - internalType: "contract YearnPathFinder", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x60806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d00011790553480156200003a57600080fd5b50620616cc806200004c6000396000f3fe60806040523480156200001157600080fd5b50600436106200028d5760003560e01c8063ba414fa6116200015f578063e5a7ec2811620000cc578063f67c5bd01162000097578063fa7626d4116200007a578063fa7626d41462000638578063fca2cea51462000646578063ffba925a146200066757600080fd5b8063f67c5bd014620005f1578063f9aa028a146200061757600080fd5b8063e5a7ec281462000581578063ebd3e70f1462000598578063eeef8dd014620005af578063f310c6da14620005d057600080fd5b8063ceab1386116200012a578063d8d7ca3c116200010d578063d8d7ca3c1462000535578063dc6655b41462000556578063df514433146200056057600080fd5b8063ceab138614620004fd578063d6dcf2ed146200051e57600080fd5b8063ba414fa61462000489578063c12c21c014620004a4578063c5eb2bc014620004c5578063cac283c814620004dc57600080fd5b80632f7a188111620001fe5780635a521cf811620001c95780636f307dc311620001ac5780636f307dc314620004265780639b6a80a714620004475780639f8ad9ec146200046857600080fd5b80635a521cf814620003e45780635ebb2361146200040557600080fd5b80632f7a1881146200038e5780634b30c0d014620003af5780634b7b24a514620003b95780634bb8a0ce14620003da57600080fd5b8063188d1ca9116200025c578063287b94d7116200023f578063287b94d7146200033557806329d351d814620003565780632b9d0d28146200037757600080fd5b8063188d1ca9146200030a5780631c9a755f146200031457600080fd5b8063019d088114620002925780630a9254e4146200029e5780630afcf02f14620002a85780631497761e14620002bf575b600080fd5b6200029c6200067e565b005b6200029c62000d0e565b6200029c620002b93660046200a5c7565b62000f33565b600754620002e09073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6200029c62001843565b601254620002e09073ffffffffffffffffffffffffffffffffffffffff1681565b600b54620002e09073ffffffffffffffffffffffffffffffffffffffff1681565b600854620002e09073ffffffffffffffffffffffffffffffffffffffff1681565b6200029c620003883660046200a60e565b62002090565b600254620002e09073ffffffffffffffffffffffffffffffffffffffff1681565b6200029c62003257565b600a54620002e09073ffffffffffffffffffffffffffffffffffffffff1681565b6200029c62003623565b600e54620002e09073ffffffffffffffffffffffffffffffffffffffff1681565b600c54620002e09073ffffffffffffffffffffffffffffffffffffffff1681565b600554620002e09073ffffffffffffffffffffffffffffffffffffffff1681565b601354620002e09073ffffffffffffffffffffffffffffffffffffffff1681565b600d54620002e09073ffffffffffffffffffffffffffffffffffffffff1681565b62000493620037dc565b604051901515815260200162000301565b600154620002e09073ffffffffffffffffffffffffffffffffffffffff1681565b6200029c620004d63660046200a62e565b62003946565b601454620002e09073ffffffffffffffffffffffffffffffffffffffff1681565b601154620002e09073ffffffffffffffffffffffffffffffffffffffff1681565b6200029c6200052f3660046200a62e565b62004280565b600954620002e09073ffffffffffffffffffffffffffffffffffffffff1681565b6200029c62004f60565b600454620002e09073ffffffffffffffffffffffffffffffffffffffff1681565b6200029c620005923660046200a651565b62005466565b6200029c620005a93660046200a62e565b62005fe3565b600f54620002e09073ffffffffffffffffffffffffffffffffffffffff1681565b601554620002e09073ffffffffffffffffffffffffffffffffffffffff1681565b62000608620006023660046200a6af565b50600190565b60405190815260200162000301565b600354620002e09073ffffffffffffffffffffffffffffffffffffffff1681565b600054620004939060ff1681565b601054620002e09073ffffffffffffffffffffffffffffffffffffffff1681565b6200029c620006783660046200a5c7565b6200687e565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815261271091614e209160009173ffffffffffffffffffffffffffffffffffffffff16906367b4264590620006e0906002906004016200a715565b602060405180830381865afa158015620006fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200072491906200a725565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815291925060009173ffffffffffffffffffffffffffffffffffffffff909116906367b426459062000783906003906004016200a715565b602060405180830381865afa158015620007a1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007c791906200a725565b60085490915073ffffffffffffffffffffffffffffffffffffffff1663b91434d160016000620008056b033b2e3c9fd0803ce800000060036200a774565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152600f93840b60048201529190920b60248201526044810191909152606401600060405180830381600087803b1580156200086a57600080fd5b505af11580156200087f573d6000803e3d6000fd5b5050600e5473ffffffffffffffffffffffffffffffffffffffff169150635911fb9a90508284620008be6b033b2e3c9fd0803ce800000060046200a774565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b1580156200093357600080fd5b505af115801562000948573d6000803e3d6000fd5b50505050620009b96040518060e00160405280600073ffffffffffffffffffffffffffffffffffffffff16815260200160608152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001606081526020016060815260200160008152602001600081525090565b6000620009c562006fe9565b9050620009d4818588620071f6565b620009e1818487620071f6565b620009f781620009f18662007239565b620072b1565b6017546040517fc1a5de800000000000000000000000000000000000000000000000000000000081529193506000925073ffffffffffffffffffffffffffffffffffffffff169063c1a5de809062000a549085906004016200a900565b6000604051808303816000875af115801562000a74573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262000abc91908101906200aaf5565b905060006103e86103e562000ad38860046200a774565b62000adf91906200a774565b62000aeb91906200ac0b565b905062000af981886200ac47565b9650600062000b0a8860036200a774565b905062000d0462000b1b846200742d565b60405180606001604052808481526020016000815260200162000cfc62000c0962000bf68d8c8e8d6060015160408051610100810182526000808252602082018190529181018290526060808201839052608082015260a0810182905260c0810182905260e0810191909152506040805161010081018252600180825273c4375b7de8af5a38a93548eb8453a498222c4ff2602083015273ffffffffffffffffffffffffffffffffffffffff95861692820192909252929093166060830152608082015260a0810192909252600060c083015260e082015290565b8862000c038d8f6200746a565b62007532565b62000cf662000cea8f8e600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168e6060015160408051610100810182526000808252602082018190529181018290526060808201839052608082015260a0810182905260c0810182905260e0810191909152506040805161010081018252600180825273c4375b7de8af5a38a93548eb8453a498222c4ff2602083015273ffffffffffffffffffffffffffffffffffffffff95861692820192909252929093166060830152608082015260a0810192909252600060c083015260e082015290565b89600160008062007967565b62007cc7565b905262007d52565b5050505050505050565b62000d1a600162007df9565b62000d26600162002090565b62000d306200830d565b62000d3a620086cb565b600b54600f5460125460405173ffffffffffffffffffffffffffffffffffffffff93841693928316929091169062000d72906200a4f3565b73ffffffffffffffffffffffffffffffffffffffff938416815291831660208301529091166040820152606001604051809103906000f08015801562000dbc573d6000803e3d6000fd5b50601680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92831617905560048054604080517f2954018c00000000000000000000000000000000000000000000000000000000815290519190931692632954018c92818101926020929091908290030181865afa15801562000e5a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e8091906200a725565b60165460405173ffffffffffffffffffffffffffffffffffffffff9091169062000eaa906200a501565b73ffffffffffffffffffffffffffffffffffffffff928316815291166020820152604001604051809103906000f08015801562000eeb573d6000803e3d6000fd5b50601780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff16634c63e5626103e88511801562000f81575062000f7e6b033b2e3c9fd0803ce80000006103e86200a774565b85105b6040518263ffffffff1660e01b815260040162000fa2911515815260200190565b600060405180830381600087803b15801562000fbd57600080fd5b505af115801562000fd2573d6000803e3d6000fd5b50506006546040517f67b426450000000000000000000000000000000000000000000000000000000081526000935073ffffffffffffffffffffffffffffffffffffffff90911691506367b426459062001032906002906004016200a715565b602060405180830381865afa15801562001050573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200107691906200a725565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815291925060009173ffffffffffffffffffffffffffffffffffffffff909116906367b4264590620010d5906001906004016200a715565b602060405180830381865afa158015620010f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200111991906200a725565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815291925060009173ffffffffffffffffffffffffffffffffffffffff909116906367b426459062001178906003906004016200a715565b602060405180830381865afa15801562001196573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011bc91906200a725565b60085490915073ffffffffffffffffffffffffffffffffffffffff1663b91434d160016000620011fa6b033b2e3c9fd0803ce800000060046200a774565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152600f93840b60048201529190920b60248201526044810191909152606401600060405180830381600087803b1580156200125f57600080fd5b505af115801562001274573d6000803e3d6000fd5b5050600e5473ffffffffffffffffffffffffffffffffffffffff169150635911fb9a90508484620012b36b033b2e3c9fd0803ce800000060036200a774565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b1580156200132857600080fd5b505af11580156200133d573d6000803e3d6000fd5b505060115473ffffffffffffffffffffffffffffffffffffffff169150635911fb9a905084846200137c6b033b2e3c9fd0803ce800000060026200a774565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b158015620013f157600080fd5b505af115801562001406573d6000803e3d6000fd5b5050600e54611388925073ffffffffffffffffffffffffffffffffffffffff169050635911fb9a8484620014486b033b2e3c9fd0803ce800000060036200a774565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b158015620014bd57600080fd5b505af1158015620014d2573d6000803e3d6000fd5b505060115473ffffffffffffffffffffffffffffffffffffffff169150632ccbc99b9050848484620015126b033b2e3c9fd0803ce800000060026200a774565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b16815273ffffffffffffffffffffffffffffffffffffffff948516600482015293909216602484015262ffffff1660448301526064820152608401600060405180830381600087803b1580156200159157600080fd5b505af1158015620015a6573d6000803e3d6000fd5b50505050600060405180610100016040528088620015c6576000620015c9565b60015b6002811115620015dd57620015dd6200a6cf565b815273c4375b7de8af5a38a93548eb8453a498222c4ff2602082015273ffffffffffffffffffffffffffffffffffffffff8781166040830152851660608201526080016200162b8662007239565b8152602001898152602001600081526020016001151581525090506000866200165657600062001663565b620016638960046200a774565b601754909150600090819073ffffffffffffffffffffffffffffffffffffffff166347c242db8583866200169662008ae6565b6040518563ffffffff1660e01b8152600401620016b794939291906200ac75565b6000604051808303816000875af1158015620016d7573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200171f91908101906200adec565b90925090506000620017338c60046200a774565b905062001789836200174d87846001600080600062008b2e565b6040518060400160405280601381526020017f51756f74653120697320696e636f72726563740000000000000000000000000081525062008ba8565b60006103e86103e56200179e8460036200a774565b620017aa91906200a774565b620017b691906200ac0b565b90506000620017d6620017ca87856200ac47565b889060008f1562008ccf565b90506200183384620017f78385620017ef8f8f6200746a565b600062008deb565b6040518060400160405280601381526020017f51756f74653220697320696e636f72726563740000000000000000000000000081525062008ba8565b5050505050505050505050505050565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815261271091614e209160009173ffffffffffffffffffffffffffffffffffffffff16906367b4264590620018a5906002906004016200a715565b602060405180830381865afa158015620018c3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620018e991906200a725565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815291925060009173ffffffffffffffffffffffffffffffffffffffff909116906367b426459062001948906003906004016200a715565b602060405180830381865afa15801562001966573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200198c91906200a725565b905060005b6002811015620020895760085473ffffffffffffffffffffffffffffffffffffffff1663b91434d160016000620019d66b033b2e3c9fd0803ce800000060036200a774565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152600f93840b60048201529190920b60248201526044810191909152606401600060405180830381600087803b15801562001a3b57600080fd5b505af115801562001a50573d6000803e3d6000fd5b5050600b546008546005546040517f4533066600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201528883166024820152908216604482015261300c60648201529116925063453306669150608401600060405180830381600087803b15801562001adf57600080fd5b505af115801562001af4573d6000803e3d6000fd5b5050600e5460055473ffffffffffffffffffffffffffffffffffffffff9182169350635911fb9a925085911662001b396b033b2e3c9fd0803ce800000060046200a774565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b15801562001bae57600080fd5b505af115801562001bc3573d6000803e3d6000fd5b5050600f54600e546005546040517f4533066600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316600482015287831660248201529082166044820152620f242c60648201529116925063453306669150608401600060405180830381600087803b15801562001c5357600080fd5b505af115801562001c68573d6000803e3d6000fd5b5050505062001cd96040518060e00160405280600073ffffffffffffffffffffffffffffffffffffffff16815260200160608152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001606081526020016060815260200160008152602001600081525090565b600062001ce562006fe9565b905062001cf4818689620071f6565b62001d01818588620071f6565b62001d2481841562001d1857620009f18662007239565b620009f187876200746a565b6017546040517fc1a5de800000000000000000000000000000000000000000000000000000000081529193506000925073ffffffffffffffffffffffffffffffffffffffff169063c1a5de809062001d819085906004016200a900565b6000604051808303816000875af115801562001da1573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262001de991908101906200aaf5565b9050600062001dfa8860036200a774565b905060006103e86103e562001e118a60046200a774565b62001e1d91906200a774565b62001e2991906200ac0b565b90506200206f62001e3a846200742d565b6040518060600160405280848662001e5391906200ac47565b815260200162001e69620f242c61300c6200ac47565b815260200162000cfc62001f5f62001f538f8e600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168d6060015160408051610100810182526000808252602082018190529181018290526060808201839052608082015260a0810182905260c0810182905260e0810191909152506040805161010081018252600180825273c4375b7de8af5a38a93548eb8453a498222c4ff2602083015273ffffffffffffffffffffffffffffffffffffffff95861692820192909252929093166060830152608082015260a0810192909252600060c083015260e082015290565b88600160008062007967565b62000cf6620020408f8e600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168e6060015160408051610100810182526000808252602082018190529181018290526060808201839052608082015260a0810182905260c0810182905260e0810191909152506040805161010081018252600180825273c4375b7de8af5a38a93548eb8453a498222c4ff2602083015273ffffffffffffffffffffffffffffffffffffffff95861692820192909252929093166060830152608082015260a0810192909252600060c083015260e082015290565b8862000c038f600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166200746a565b50505050808062002080906200ae57565b91505062001991565b5050505050565b6200209a62008e61565b60085473ffffffffffffffffffffffffffffffffffffffff1662003254576006546040517f67b426450000000000000000000000000000000000000000000000000000000081526000916200229d9173ffffffffffffffffffffffffffffffffffffffff909116906367b426459062002119906007906004016200a715565b602060405180830381865afa15801562002137573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200215d91906200a725565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906367b4264590620021b6906008906004016200a715565b602060405180830381865afa158015620021d4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620021fa91906200a725565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906367b426459062002253906009906004016200a715565b602060405180830381865afa15801562002271573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200229791906200a725565b62008f8b565b6006546040517f67b42645000000000000000000000000000000000000000000000000000000008152919250600091620024399173ffffffffffffffffffffffffffffffffffffffff16906367b4264590620022ff906001906004016200a715565b602060405180830381865afa1580156200231d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200234391906200a725565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906367b42645906200239c906002906004016200a715565b602060405180830381865afa158015620023ba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620023e091906200a725565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906367b426459062002253906005906004016200a715565b60035490915073ffffffffffffffffffffffffffffffffffffffff1615158062002461575082155b156200246c57905060605b81816040516200247c906200a50f565b620024899291906200ae93565b604051809103906000f080158015620024a6573d6000803e3d6000fd5b50600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169182179055604080517ffc0c546a00000000000000000000000000000000000000000000000000000000815290516000929163fc0c546a9160048083019260209291908290030181865afa15801562002543573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200256991906200a725565b6000546040517fc657c71800000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff62010000909104169063c657c718906200261990849060040173ffffffffffffffffffffffffffffffffffffffff9190911681526040602082018190526004908201527f3343525600000000000000000000000000000000000000000000000000000000606082015260800190565b600060405180830381600087803b1580156200263457600080fd5b505af115801562002649573d6000803e3d6000fd5b505060035473ffffffffffffffffffffffffffffffffffffffff1615915062002e5d9050576000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620026de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200270491906200a725565b60085460048054604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9485169490921692632630c12f9282820192602092908290030181865afa15801562002779573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200279f91906200a725565b73ffffffffffffffffffffffffffffffffffffffff16639dcb511a87600081518110620027d057620027d06200aebc565b60200260200101516040518263ffffffff1660e01b815260040162002811919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa1580156200282f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200285591906200a725565b60048054604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff90921692632630c12f9282820192602092908290030181865afa158015620028c3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620028e991906200a725565b73ffffffffffffffffffffffffffffffffffffffff16639dcb511a886001815181106200291a576200291a6200aebc565b60200260200101516040518263ffffffff1660e01b81526004016200295b919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa15801562002979573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200299f91906200a725565b60048054604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff90921692632630c12f9282820192602092908290030181865afa15801562002a0d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002a3391906200a725565b73ffffffffffffffffffffffffffffffffffffffff16639dcb511a8960028151811062002a645762002a646200aebc565b60200260200101516040518263ffffffff1660e01b815260040162002aa5919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa15801562002ac3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002ae991906200a725565b60405162002af7906200a51d565b73ffffffffffffffffffffffffffffffffffffffff95861681529385166020850152918416604084015283166060830152909116608082015260c060a082018190526011908201527f43757276654c503350726963654665656400000000000000000000000000000060e082015261010001604051809103906000f08015801562002b86573d6000803e3d6000fd5b506000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291925062010000900473ffffffffffffffffffffffffffffffffffffffff16906306447d5690602401600060405180830381600087803b15801562002c0e57600080fd5b505af115801562002c23573d6000803e3d6000fd5b505060048054604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9092169450632630c12f935080830192602092918290030181865afa15801562002c95573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002cbb91906200a725565b6040517fe8a97a3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301528381166024830152919091169063e8a97a3e90604401600060405180830381600087803b15801562002d2f57600080fd5b505af115801562002d44573d6000803e3d6000fd5b50506003546040517f3e7c88d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152611e7860248301529091169250633e7c88d69150604401600060405180830381600087803b15801562002dbe57600080fd5b505af115801562002dd3573d6000803e3d6000fd5b50505050600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562002e4257600080fd5b505af115801562002e57573d6000803e3d6000fd5b50505050505b60015460085460405173ffffffffffffffffffffffffffffffffffffffff9283169290911690839060009062002e93906200a52b565b73ffffffffffffffffffffffffffffffffffffffff9485168152928416602084015290831660408301529091166060820152608001604051809103906000f08015801562002ee5573d6000803e3d6000fd5b50600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905560405162002f39906200a539565b604051809103906000f08015801562002f56573d6000803e3d6000fd5b50600b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283169081179091556008546040517fd914cd4b000000000000000000000000000000000000000000000000000000008152921660048301529063d914cd4b90602401600060405180830381600087803b15801562002ff057600080fd5b505af115801562003005573d6000803e3d6000fd5b5050600054600754604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152600d60448201527f43555256455f414441505445520000000000000000000000000000000000000060648201526201000090920416925063c657c7189150608401600060405180830381600087803b158015620030b557600080fd5b505af1158015620030ca573d6000803e3d6000fd5b5050600054600854604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152600a60448201527f43555256455f4d4f434b0000000000000000000000000000000000000000000060648201526201000090920416925063c657c7189150608401600060405180830381600087803b1580156200317a57600080fd5b505af11580156200318f573d6000803e3d6000fd5b5050600054600b54604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152601060448201527f43555256455f5041544846494e4445520000000000000000000000000000000060648201526201000090920416925063c657c7189150608401600060405180830381600087803b1580156200323f57600080fd5b505af115801562000d04573d6000803e3d6000fd5b50565b601754604080517f4b57b0be0000000000000000000000000000000000000000000000000000000081529051620033c99273ffffffffffffffffffffffffffffffffffffffff1691634b57b0be9160048083019260209291908290030181865afa158015620032ca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620032f091906200a725565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906367b426459062003349906003906004016200a715565b602060405180830381865afa15801562003367573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200338d91906200a725565b6040518060400160405280601481526020017f496e636f7272656374205745544820746f6b656e000000000000000000000000815250620090a7565b601754604080517f2630c12f0000000000000000000000000000000000000000000000000000000081529051620035329273ffffffffffffffffffffffffffffffffffffffff1691632630c12f9160048083019260209291908290030181865afa1580156200343c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200346291906200a725565b60048054604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff90921692632630c12f9282820192602092908290030181865afa158015620034d0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620034f691906200a725565b6040518060400160405280601681526020017f496e636f7272656374207072696365206f7261636c6500000000000000000000815250620090a7565b601754604080517f08d665d30000000000000000000000000000000000000000000000000000000081529051620036219273ffffffffffffffffffffffffffffffffffffffff16916308d665d39160048083019260209291908290030181865afa158015620035a5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620035cb91906200a725565b60165460408051808201909152601881527f496e636f727265637420737761705061746846696e6465720000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff90911690620090a7565b565b6000633b9aca00620036446b033b2e3c9fd0803ce8000000610c806200a774565b6200365091906200ac0b565b6200365f90620f42406200a774565b6017546006546040517f67b42645000000000000000000000000000000000000000000000000000000008152929350620032549273ffffffffffffffffffffffffffffffffffffffff9283169263553f67ec9216906367b4264590620036cb906002906004016200a715565b602060405180830381865afa158015620036e9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200370f91906200a725565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa15801562003779573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200379f91906200aeeb565b826040518060400160405280601881526020017f494e434f5252454354205553444320476173207072696365000000000000000081525062009120565b60008054610100900460ff1615620037fd5750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620039415760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091620038a5917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016200af05565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052620038df916200af4f565b6000604051808303816000865af19150503d80600081146200391e576040519150601f19603f3d011682016040523d82523d6000602084013e62003923565b606091505b50915050808060200190518101906200393d91906200af6d565b9150505b919050565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff16634c63e5626103e884118015620039945750620039916b033b2e3c9fd0803ce80000006103e86200a774565b84105b6040518263ffffffff1660e01b8152600401620039b5911515815260200190565b600060405180830381600087803b158015620039d057600080fd5b505af1158015620039e5573d6000803e3d6000fd5b505060005462010000900473ffffffffffffffffffffffffffffffffffffffff169150634c63e562905062003a296b033b2e3c9fd0803ce80000006103e86200a774565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681529084106004820152602401600060405180830381600087803b15801562003a7b57600080fd5b505af115801562003a90573d6000803e3d6000fd5b50506006546040517f67b426450000000000000000000000000000000000000000000000000000000081526000935073ffffffffffffffffffffffffffffffffffffffff90911691506367b426459062003af0906002906004016200a715565b602060405180830381865afa15801562003b0e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003b3491906200a725565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815291925060009173ffffffffffffffffffffffffffffffffffffffff909116906367b426459062003b93906005906004016200a715565b602060405180830381865afa15801562003bb1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003bd791906200a725565b60085490915073ffffffffffffffffffffffffffffffffffffffff1663b91434d16001600262003c156b033b2e3c9fd0803ce800000060036200a774565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152600f93840b60048201529190920b60248201526044810191909152606401600060405180830381600087803b15801562003c7a57600080fd5b505af115801562003c8f573d6000803e3d6000fd5b5050600e5473ffffffffffffffffffffffffffffffffffffffff169150635911fb9a9050838362003cce6b033b2e3c9fd0803ce800000060046200a774565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b15801562003d4357600080fd5b505af115801562003d58573d6000803e3d6000fd5b505060115473ffffffffffffffffffffffffffffffffffffffff169150635911fb9a9050838362003d976b033b2e3c9fd0803ce800000060026200a774565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b15801562003e0c57600080fd5b505af115801562003e21573d6000803e3d6000fd5b5050600e54600554611388935073ffffffffffffffffffffffffffffffffffffffff9182169250635911fb9a9185911662003e6a6b033b2e3c9fd0803ce800000060036200a774565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b15801562003edf57600080fd5b505af115801562003ef4573d6000803e3d6000fd5b505060115460055473ffffffffffffffffffffffffffffffffffffffff9182169350632ccbc99b92508591168462003f3a6b033b2e3c9fd0803ce800000060026200a774565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b16815273ffffffffffffffffffffffffffffffffffffffff948516600482015293909216602484015262ffffff1660448301526064820152608401600060405180830381600087803b15801562003fb957600080fd5b505af115801562003fce573d6000803e3d6000fd5b50505050600062003fde62006fe9565b905062003fed818588620071f6565b62003ffa818487620071f6565b60006200400882866200916d565b905060006200401c83620009f18762007239565b6017546040517f9b59deba000000000000000000000000000000000000000000000000000000008152919250600091829173ffffffffffffffffffffffffffffffffffffffff1690639b59deba906200407e908690889086906004016200af8d565b6000604051808303816000875af11580156200409e573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620040e691908101906200afb9565b909250905060006103e86103e5620041008d60046200a774565b6200410c91906200a774565b6200411891906200ac0b565b90506200415c82896040518060400160405280601381526020017f496e636f727265637420746f6b656e206f757400000000000000000000000000815250620090a7565b620042738362004237604051806101000160405280600160028111156200418757620041876200a6cf565b815260200173c4375b7de8af5a38a93548eb8453a498222c4ff273ffffffffffffffffffffffffffffffffffffffff1681526020018d73ffffffffffffffffffffffffffffffffffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff168152602001886060015181526020018f81526020016000815260200160011515815250846200421f8e8e6200746a565b8f156200422e57600062008deb565b614e2062008deb565b6040518060400160405280600f81526020017f494e434f52524543542051554f5445000000000000000000000000000000000081525062008ba8565b5050505050505050505050565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff16634c63e562620186a084118015620042cf5750620042cc6b033b2e3c9fd0803ce80000006103e86200a774565b84105b6040518263ffffffff1660e01b8152600401620042f0911515815260200190565b600060405180830381600087803b1580156200430b57600080fd5b505af115801562004320573d6000803e3d6000fd5b505060005462010000900473ffffffffffffffffffffffffffffffffffffffff169150634c63e5629050620043646b033b2e3c9fd0803ce80000006103e86200a774565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681529084106004820152602401600060405180830381600087803b158015620043b657600080fd5b505af1158015620043cb573d6000803e3d6000fd5b50506006546040517f67b426450000000000000000000000000000000000000000000000000000000081526000935073ffffffffffffffffffffffffffffffffffffffff90911691506367b42645906200442b906002906004016200a715565b602060405180830381865afa15801562004449573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200446f91906200a725565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815291925060009173ffffffffffffffffffffffffffffffffffffffff909116906367b4264590620044ce906005906004016200a715565b602060405180830381865afa158015620044ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200451291906200a725565b60085490915073ffffffffffffffffffffffffffffffffffffffff1663b91434d160016000620045506b033b2e3c9fd0803ce8000000600e6200a774565b620045619064e8d4a510006200a774565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152600f93840b60048201529190920b60248201526044810191909152606401600060405180830381600087803b158015620045c657600080fd5b505af1158015620045db573d6000803e3d6000fd5b5050600e5473ffffffffffffffffffffffffffffffffffffffff169150635911fb9a905083836200461a6b033b2e3c9fd0803ce800000060036200a774565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b1580156200468f57600080fd5b505af1158015620046a4573d6000803e3d6000fd5b505060115473ffffffffffffffffffffffffffffffffffffffff169150635911fb9a90508383620046e36b033b2e3c9fd0803ce800000060026200a774565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b1580156200475857600080fd5b505af11580156200476d573d6000803e3d6000fd5b505050506000806103e86103e56103e86103e58960036200478f91906200a774565b6200479b91906200a774565b620047a791906200ac0b565b620047b49060036200a774565b620047c59064e8d4a510006200a774565b620047d191906200a774565b620047dd91906200ac0b565b620047ea87600e6200a774565b620047fb9064e8d4a510006200a774565b6200480791906200b011565b6017546005546040517f553f67ec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152929350169063553f67ec90602401602060405180830381865afa1580156200487c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620048a291906200aeeb565b620048ba6b033b2e3c9fd0803ce8000000836200a774565b620048c691906200ac0b565b620048d39060016200ac47565b600b546008546005546040517f4533066600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201528883166024820152908216604482015260648101849052929450169150634533066690608401600060405180830381600087803b1580156200496057600080fd5b505af115801562004975573d6000803e3d6000fd5b5050600e54600554611388935073ffffffffffffffffffffffffffffffffffffffff9182169250635911fb9a91869116620049be6b033b2e3c9fd0803ce800000060036200a774565b620049cf9064e8d4a510006200a774565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b15801562004a4457600080fd5b505af115801562004a59573d6000803e3d6000fd5b505060115460055473ffffffffffffffffffffffffffffffffffffffff9182169350632ccbc99b92508691168462004a9f6b033b2e3c9fd0803ce800000060026200a774565b62004ab09064e8d4a510006200a774565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b16815273ffffffffffffffffffffffffffffffffffffffff948516600482015293909216602484015262ffffff1660448301526064820152608401600060405180830381600087803b15801562004b2f57600080fd5b505af115801562004b44573d6000803e3d6000fd5b50505050600062004bb76040518060e00160405280600073ffffffffffffffffffffffffffffffffffffffff16815260200160608152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001606081526020016060815260200160008152602001600081525090565b600062004bc362006fe9565b905062004bd281888b620071f6565b62004bdf81878a620071f6565b62004beb81886200916d565b925062004bfd81620009f18862007239565b6017546040517f9b59deba00000000000000000000000000000000000000000000000000000000815291935060009250829173ffffffffffffffffffffffffffffffffffffffff90911690639b59deba9062004c62908690889086906004016200af8d565b6000604051808303816000875af115801562004c82573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262004cca91908101906200afb9565b91509150886000141562004e2057600062004ce78b600e6200a774565b62004cf89064e8d4a510006200a774565b60055460408051808201909152601381527f496e636f727265637420746f6b656e206f757400000000000000000000000000602082015291925062004d5691849173ffffffffffffffffffffffffffffffffffffffff1690620090a7565b62004e1983620042376040518061010001604052806001600281111562004d815762004d816200a6cf565b815260200173c4375b7de8af5a38a93548eb8453a498222c4ff273ffffffffffffffffffffffffffffffffffffffff1681526020018d73ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff168152602001886060015181526020018f815260200160008152602001600115158152508460016000808e62008b2e565b5062004f54565b60006103e86103e562004e358d60036200a774565b62004e4191906200a774565b62004e4d91906200ac0b565b905062004e9182896040518060400160405280601381526020017f496e636f727265637420746f6b656e206f757400000000000000000000000000815250620090a7565b6200427383620042376040518061010001604052806001600281111562004ebc5762004ebc6200a6cf565b815260200173c4375b7de8af5a38a93548eb8453a498222c4ff273ffffffffffffffffffffffffffffffffffffffff1681526020018d73ffffffffffffffffffffffffffffffffffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff168152602001886060015181526020018f8152602001600081526020016001151581525084620017ef8e8e6200746a565b50505050505050505050565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815260009173ffffffffffffffffffffffffffffffffffffffff16906367b426459062004fba906002906004016200a715565b602060405180830381865afa15801562004fd8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004ffe91906200a725565b905060006200500c62006fe9565b90506200501c81836002620071f6565b60006200502e82620009f18562007239565b6000546005546040805173ffffffffffffffffffffffffffffffffffffffff888116602483015292831660448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f201e17630000000000000000000000000000000000000000000000000000000017905290517ff28dceb300000000000000000000000000000000000000000000000000000000815293945062010000909204169163f28dceb391620050ff916004016200b077565b600060405180830381600087803b1580156200511a57600080fd5b505af11580156200512f573d6000803e3d6000fd5b50506017546040517fc1a5de8000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116925063c1a5de8091506200518b9084906004016200a900565b6000604051808303816000875af1158015620051ab573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620051f391908101906200aaf5565b506006546040517f67b4264500000000000000000000000000000000000000000000000000000000815260009173ffffffffffffffffffffffffffffffffffffffff16906367b42645906200524e906003906004016200a715565b602060405180830381865afa1580156200526c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200529291906200a725565b9050620052a283826002620071f6565b6000546005546040805173ffffffffffffffffffffffffffffffffffffffff858116602483015292831660448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f201e17630000000000000000000000000000000000000000000000000000000017905290517ff28dceb3000000000000000000000000000000000000000000000000000000008152620100009093049091169163f28dceb39162005372916004016200b077565b600060405180830381600087803b1580156200538d57600080fd5b505af1158015620053a2573d6000803e3d6000fd5b50506017546040517fc1a5de8000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116925063c1a5de809150620053fe9085906004016200a900565b6000604051808303816000875af11580156200541e573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200208991908101906200aaf5565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff16634c63e5626103e885118015620054a4575068056bc75e2d6310000085105b6040518263ffffffff1660e01b8152600401620054c5911515815260200190565b600060405180830381600087803b158015620054e057600080fd5b505af1158015620054f5573d6000803e3d6000fd5b505060005462010000900473ffffffffffffffffffffffffffffffffffffffff169150634c63e5629050620055396b033b2e3c9fd0803ce80000006103e86200a774565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681529084106004820152602401600060405180830381600087803b1580156200558b57600080fd5b505af1158015620055a0573d6000803e3d6000fd5b50506006546040517f67b426450000000000000000000000000000000000000000000000000000000081526000935073ffffffffffffffffffffffffffffffffffffffff90911691506367b426459062005600906002906004016200a715565b602060405180830381865afa1580156200561e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200564491906200a725565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815291925060009173ffffffffffffffffffffffffffffffffffffffff909116906367b4264590620056a3906001906004016200a715565b602060405180830381865afa158015620056c1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620056e791906200a725565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815291925060009173ffffffffffffffffffffffffffffffffffffffff909116906367b426459062005746906003906004016200a715565b602060405180830381865afa15801562005764573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200578a91906200a725565b60085490915073ffffffffffffffffffffffffffffffffffffffff1663b91434d160016000620057c86b033b2e3c9fd0803ce800000060046200a774565b620057d99064e8d4a510006200a774565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152600f93840b60048201529190920b60248201526044810191909152606401600060405180830381600087803b1580156200583e57600080fd5b505af115801562005853573d6000803e3d6000fd5b5050600e5473ffffffffffffffffffffffffffffffffffffffff169150635911fb9a90508484620058926b033b2e3c9fd0803ce800000060036200a774565b620058a39064e8d4a510006200a774565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b1580156200591857600080fd5b505af11580156200592d573d6000803e3d6000fd5b505060115473ffffffffffffffffffffffffffffffffffffffff169150635911fb9a905084846200596c6b033b2e3c9fd0803ce800000060026200a774565b6200597d9064e8d4a510006200a774565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b158015620059f257600080fd5b505af115801562005a07573d6000803e3d6000fd5b5050505060006103e86103e588600362005a2291906200a774565b62005a339064e8d4a510006200a774565b62005a3f91906200a774565b62005a4b91906200ac0b565b62005a588860046200a774565b62005a699064e8d4a510006200a774565b62005a7591906200b011565b6017546040517f553f67ec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301529293506000929091169063553f67ec90602401602060405180830381865afa15801562005aec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005b1291906200aeeb565b62005b2a6b033b2e3c9fd0803ce8000000846200a774565b62005b3691906200ac0b565b62005b439060016200ac47565b600b546008546040517f4533066600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015288821660248201528782166044820152606481018490529293501690634533066690608401600060405180830381600087803b15801562005bcc57600080fd5b505af115801562005be1573d6000803e3d6000fd5b5050600e54611388945073ffffffffffffffffffffffffffffffffffffffff169250635911fb9a91508590508462005c276b033b2e3c9fd0803ce800000060036200a774565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b15801562005c9c57600080fd5b505af115801562005cb1573d6000803e3d6000fd5b505060115473ffffffffffffffffffffffffffffffffffffffff169150632ccbc99b905084848462005cf16b033b2e3c9fd0803ce800000060026200a774565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b16815273ffffffffffffffffffffffffffffffffffffffff948516600482015293909216602484015262ffffff1660448301526064820152608401600060405180830381600087803b15801562005d7057600080fd5b505af115801562005d85573d6000803e3d6000fd5b5050505060006040518061010001604052808862005da557600062005da8565b60015b600281111562005dbc5762005dbc6200a6cf565b815273c4375b7de8af5a38a93548eb8453a498222c4ff2602082015273ffffffffffffffffffffffffffffffffffffffff87811660408301528516606082015260800162005e0a8662007239565b8152602081018a9052600060408201819052600160609092019190915260175491925090819073ffffffffffffffffffffffffffffffffffffffff166347c242db84838b62005e5862008ae6565b6040518563ffffffff1660e01b815260040162005e7994939291906200ac75565b6000604051808303816000875af115801562005e99573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262005ee191908101906200adec565b909250905060006103e86103e562005efb8d60036200a774565b62005f0c9064e8d4a510006200a774565b62005f1891906200a774565b62005f2491906200ac0b565b905062005f3d836200174d8684620017ef8d8d6200746a565b600062005f4b8a836200ac47565b826103e86103e562005f5e8e846200ac47565b62005f6b9060036200a774565b62005f7791906200a774565b62005f8391906200ac0b565b62005f8f91906200a774565b62005f9b91906200ac0b565b9050600062005fbb62005faf8c856200ac47565b879060008e1562008ccf565b905062005fd484620017f78385620017ef8e8e6200746a565b50505050505050505050505050565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff16634c63e5626103e8841180156200603157506200602e6b033b2e3c9fd0803ce80000006103e86200a774565b84105b6040518263ffffffff1660e01b815260040162006052911515815260200190565b600060405180830381600087803b1580156200606d57600080fd5b505af115801562006082573d6000803e3d6000fd5b505060005462010000900473ffffffffffffffffffffffffffffffffffffffff169150634c63e5629050620060c66b033b2e3c9fd0803ce80000006103e86200a774565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681529084106004820152602401600060405180830381600087803b1580156200611857600080fd5b505af11580156200612d573d6000803e3d6000fd5b50506006546040517f67b426450000000000000000000000000000000000000000000000000000000081526000935073ffffffffffffffffffffffffffffffffffffffff90911691506367b42645906200618d906002906004016200a715565b602060405180830381865afa158015620061ab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620061d191906200a725565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815291925060009173ffffffffffffffffffffffffffffffffffffffff909116906367b426459062006230906005906004016200a715565b602060405180830381865afa1580156200624e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200627491906200a725565b60085490915073ffffffffffffffffffffffffffffffffffffffff1663b91434d160016000620062b26b033b2e3c9fd0803ce800000060046200a774565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152600f93840b60048201529190920b60248201526044810191909152606401600060405180830381600087803b1580156200631757600080fd5b505af11580156200632c573d6000803e3d6000fd5b5050600e5460055473ffffffffffffffffffffffffffffffffffffffff9182169350635911fb9a9250859116620063716b033b2e3c9fd0803ce800000060036200a774565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b158015620063e657600080fd5b505af1158015620063fb573d6000803e3d6000fd5b505060115460055473ffffffffffffffffffffffffffffffffffffffff9182169350635911fb9a9250859116620064406b033b2e3c9fd0803ce800000060026200a774565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b158015620064b557600080fd5b505af1158015620064ca573d6000803e3d6000fd5b5050600e5473ffffffffffffffffffffffffffffffffffffffff169150635911fb9a90508383620065096b033b2e3c9fd0803ce800000060036200a774565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b1580156200657e57600080fd5b505af115801562006593573d6000803e3d6000fd5b5050600e5460055473ffffffffffffffffffffffffffffffffffffffff9182169350635911fb9a9250849116620065d86b033b2e3c9fd0803ce800000060036200a774565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b1580156200664d57600080fd5b505af115801562006662573d6000803e3d6000fd5b5050505060006200667262006fe9565b905062006681818487620071f6565b60006200668f82856200916d565b90506000620066a383620009f18762007239565b6017546040517f9b59deba000000000000000000000000000000000000000000000000000000008152919250600091829173ffffffffffffffffffffffffffffffffffffffff1690639b59deba906200670690869088906001906004016200af8d565b6000604051808303816000875af115801562006726573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200676e91908101906200afb9565b90925090506000620067828a60046200a774565b60055460408051808201909152601381527f496e636f727265637420746f6b656e206f7574000000000000000000000000006020820152919250620067e091849173ffffffffffffffffffffffffffffffffffffffff1690620090a7565b62004f548362004237604051806101000160405280600160028111156200680b576200680b6200a6cf565b815273c4375b7de8af5a38a93548eb8453a498222c4ff2602082015273ffffffffffffffffffffffffffffffffffffffff8d8116604083015260055416606080830191909152890151608082015260a081018f9052600060c08201819052600160e0909201829052869190808062008b2e565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff16634c63e5626103e885118015620068cc5750620068c96b033b2e3c9fd0803ce80000006103e86200a774565b85105b6040518263ffffffff1660e01b8152600401620068ed911515815260200190565b600060405180830381600087803b1580156200690857600080fd5b505af11580156200691d573d6000803e3d6000fd5b50506006546040517f67b426450000000000000000000000000000000000000000000000000000000081526000935073ffffffffffffffffffffffffffffffffffffffff90911691506367b42645906200697d906002906004016200a715565b602060405180830381865afa1580156200699b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620069c191906200a725565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815291925060009173ffffffffffffffffffffffffffffffffffffffff909116906367b426459062006a20906001906004016200a715565b602060405180830381865afa15801562006a3e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062006a6491906200a725565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815291925060009173ffffffffffffffffffffffffffffffffffffffff909116906367b426459062006ac3906003906004016200a715565b602060405180830381865afa15801562006ae1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062006b0791906200a725565b60085490915073ffffffffffffffffffffffffffffffffffffffff1663b91434d16001600062006b456b033b2e3c9fd0803ce800000060046200a774565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152600f93840b60048201529190920b60248201526044810191909152606401600060405180830381600087803b15801562006baa57600080fd5b505af115801562006bbf573d6000803e3d6000fd5b5050600b546008546040517f4533066600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201528782166024820152868216604482015261300c60648201529116925063453306669150608401600060405180830381600087803b15801562006c4b57600080fd5b505af115801562006c60573d6000803e3d6000fd5b5050601154611388925073ffffffffffffffffffffffffffffffffffffffff169050632ccbc99b84848462006ca36b033b2e3c9fd0803ce800000060026200a774565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b16815273ffffffffffffffffffffffffffffffffffffffff948516600482015293909216602484015262ffffff1660448301526064820152608401600060405180830381600087803b15801562006d2257600080fd5b505af115801562006d37573d6000803e3d6000fd5b50506012546011546040517f4533066600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015287821660248201528682166044820152620f242c60648201529116925063453306669150608401600060405180830381600087803b15801562006dc457600080fd5b505af115801562006dd9573d6000803e3d6000fd5b5050505060006040518061010001604052808862006df957600062006dfc565b60015b600281111562006e105762006e106200a6cf565b815273c4375b7de8af5a38a93548eb8453a498222c4ff2602082015273ffffffffffffffffffffffffffffffffffffffff87811660408301528516606082015260800162006e5e8662007239565b81526020018981526020016000815260200160011515815250905060008662006e8957600062006e96565b62006e968960046200a774565b601754909150600090819073ffffffffffffffffffffffffffffffffffffffff166347c242db85838662006ec962008ae6565b6040518563ffffffff1660e01b815260040162006eea94939291906200ac75565b6000604051808303816000875af115801562006f0a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262006f5291908101906200adec565b9092509050600062006f668c60046200a774565b905062006f81836200174d8784600160008061300c62008b2e565b6000620f424062006f9862ffffff8916826200b011565b62006fa58460026200a774565b62006fb191906200a774565b62006fbd91906200ac0b565b9050600062006fd1620017ca87856200ac47565b90506200183384620017f783858c620f242c62009233565b60606000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200705b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200708191906200aeeb565b90508067ffffffffffffffff8111156200709f576200709f6200a915565b604051908082528060200260200182016040528015620070e657816020015b6040805180820190915260008082526020820152815260200190600190039081620070be5790505b50915060005b81811015620071f1576001546040517f172c48c70000000000000000000000000000000000000000000000000000000081526004810183905260009173ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa15801562007165573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200718b91906200b08c565b50905060405180604001604052808273ffffffffffffffffffffffffffffffffffffffff1681526020016000815250848381518110620071cf57620071cf6200aebc565b6020026020010181905250508080620071e8906200ae57565b915050620070ec565b505090565b808362007204858562009289565b815181106200721757620072176200aebc565b60200260200101516020018181516200723191906200ac47565b905250505050565b6040805160018082528183019092526060916020808301908036833701905050905081816000815181106200727257620072726200aebc565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050919050565b6200731e6040518060e00160405280600073ffffffffffffffffffffffffffffffffffffffff16815260200160608152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001606081526020016060815260200160008152602001600081525090565b6040805160e08101825273c4375b7de8af5a38a93548eb8453a498222c4ff281526020810185905260055473ffffffffffffffffffffffffffffffffffffffff169181019190915260608101839052608081016200737b62008ae6565b81526017546005546040517f553f67ec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015260209093019291169063553f67ec90602401602060405180830381865afa158015620073f6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200741c91906200aeeb565b815260006020909101529392505050565b6200745260405180606001604052806000815260200160008152602001606081525090565b620074618260400151620092fd565b60408301525090565b60408051600280825260608083018452926020830190803683370190505090508281600081518110620074a157620074a16200aebc565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508181600181518110620074f257620074f26200aebc565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505092915050565b60408051808201909152600081526060602082015260606000855160028111156200756157620075616200a6cf565b14156200766f576338ed173960e01b8560a001518660e00151620075b25760c0870151612710906200759490826200b011565b620075a090886200a774565b620075ac91906200ac0b565b620075b5565b60005b8573c4375b7de8af5a38a93548eb8453a498222c4ff2620075d942610e106200ac47565b604051602401620075ef9594939291906200b0c6565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505b6001855160028111156200768757620076876200a6cf565b1415620077bd5760e08501517fbdbeaa310000000000000000000000000000000000000000000000000000000090620077175760a0860151620076ce90612710906200a774565b60c0870151620076e1906127106200b011565b620076f9876b033b2e3c9fd0803ce80000006200a774565b6200770591906200a774565b6200771191906200ac0b565b6200771a565b60005b846200772942610e106200ac47565b6040516024016200773d939291906200b111565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505b600285516002811115620077d557620077d56200a6cf565b1415620078e357638803dbee60e01b8560a001518660e00151620078265760c087015162007806906127106200ac47565b62007814612710886200a774565b6200782091906200ac0b565b62007829565b60005b8573c4375b7de8af5a38a93548eb8453a498222c4ff26200784d42610e106200ac47565b604051602401620078639594939291906200b0c6565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505b805115620079205760408051808201909152600d5473ffffffffffffffffffffffffffffffffffffffff1681526020810191909152905062007960565b84516040517ffe7995cf0000000000000000000000000000000000000000000000000000000081526200795791906004016200b13c565b60405180910390fd5b9392505050565b60408051808201909152600081526060602082015260606000875160028111156200799657620079966200a6cf565b141562007acf5782620079ca577f3df0212400000000000000000000000000000000000000000000000000000000620079ec565b7fa6417ed6000000000000000000000000000000000000000000000000000000005b85858960e0015162007a2b5760c08a01516127109062007a0d90826200b011565b62007a19908b6200a774565b62007a2591906200ac0b565b62007a2e565b60005b604051600f93840b60248201529190920b60448201526064810191909152608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505b60018751600281111562007ae75762007ae76200a6cf565b141562007c4a578262007b1b577f79bea6640000000000000000000000000000000000000000000000000000000062007b3d565b7f1af4de83000000000000000000000000000000000000000000000000000000005b85858960e0015162007ba65760a08a015162007b5d90612710906200a774565b60c08b015162007b70906127106200b011565b62007b888b6b033b2e3c9fd0803ce80000006200a774565b62007b9491906200a774565b62007ba091906200ac0b565b62007ba9565b60005b604051600f93840b60248201529190920b60448201526064810191909152608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505b80511562007c87576040805180820190915260075473ffffffffffffffffffffffffffffffffffffffff1681526020810191909152905062007cbe565b86516040517ffe7995cf0000000000000000000000000000000000000000000000000000000081526200795791906004016200b13c565b95945050505050565b6040805160028082526060828101909352816020015b60408051808201909152600081526060602082015281526020019060019003908162007cdd579050509050828160008151811062007d1f5762007d1f6200aebc565b6020026020010181905250818160018151811062007d415762007d416200aebc565b602002602001018190525092915050565b8151815160408051808201909152601181527f496e636f727265637420616d6f756e7473000000000000000000000000000000602082015262007d9792919062009120565b62007dab82604001518260400151620093a3565b62007df5826020015182602001516040518060400160405280601281526020017f496e636f7272656374206761735573616765000000000000000000000000000081525062009120565b5050565b600181600a81111562007e105762007e106200a6cf565b148062007e315750600381600a81111562007e2f5762007e2f6200a6cf565b145b62007e99576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f556e737570706f7274656420746f6b656e000000000000000000000000000000604482015260640162007957565b60405162007ea7906200a547565b604051809103906000f08015801562007ec4573d6000803e3d6000fd5b50600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216918217905563b36ba20862007f23670de0b6b3a764000060646200a774565b6040518263ffffffff1660e01b81526004016000604051808303818588803b15801562007f4f57600080fd5b505af115801562007f64573d6000803e3d6000fd5b505060065460405173ffffffffffffffffffffffffffffffffffffffff909116935084925062007f9591506200a555565b62007fa29291906200b14c565b604051809103906000f08015801562007fbf573d6000803e3d6000fd5b50600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169182178155604080517f6f307dc30000000000000000000000000000000000000000000000000000000081529051636f307dc3928281019260209291908290030181865afa15801562008056573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200807c91906200a725565b600580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92831617905560048054604080517fc12c21c00000000000000000000000000000000000000000000000000000000081529051919093169263c12c21c092818101926020929091908290030181865afa15801562008119573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200813f91906200a725565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92831617905560048054604080517f2f7a188100000000000000000000000000000000000000000000000000000000815290519190931692632f7a188192818101926020929091908290030181865afa158015620081dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200820291906200a725565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92831617905560048054604080517ff9aa028a0000000000000000000000000000000000000000000000000000000081529051919093169263f9aa028a92818101926020929091908290030181865afa1580156200829f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620082c591906200a725565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b6200831762008e61565b60405162008325906200a564565b604051809103906000f08015801562008342573d6000803e3d6000fd5b50600e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283169081179091556001546040519216916200839b906200a572565b73ffffffffffffffffffffffffffffffffffffffff928316815291166020820152604001604051809103906000f080158015620083dc573d6000803e3d6000fd5b50600d80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905560405162008430906200a580565b604051809103906000f0801580156200844d573d6000803e3d6000fd5b50600f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600054600d54604080517fc657c71800000000000000000000000000000000000000000000000000000000815291841660048301526024820152601260448201527f554e49535741505f56325f4144415054455200000000000000000000000000006064820152620100009091049091169063c657c71890608401600060405180830381600087803b1580156200852557600080fd5b505af11580156200853a573d6000803e3d6000fd5b5050600054600e54604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152600f60448201527f554e49535741505f56325f4d4f434b000000000000000000000000000000000060648201526201000090920416925063c657c7189150608401600060405180830381600087803b158015620085ea57600080fd5b505af1158015620085ff573d6000803e3d6000fd5b5050600054600f54604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152601560448201527f554e49535741505f56325f5041544846494e444552000000000000000000000060648201526201000090920416925063c657c71891506084015b600060405180830381600087803b158015620086b057600080fd5b505af1158015620086c5573d6000803e3d6000fd5b50505050565b620086d562008e61565b604051620086e3906200a58e565b604051809103906000f08015801562008700573d6000803e3d6000fd5b50601180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92831690811790915560015460405192169162008759906200a59c565b73ffffffffffffffffffffffffffffffffffffffff928316815291166020820152604001604051809103906000f0801580156200879a573d6000803e3d6000fd5b50601080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055604051620087ee906200a5aa565b604051809103906000f0801580156200880b573d6000803e3d6000fd5b50601280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283169081179091556011546040517fc67903ea00000000000000000000000000000000000000000000000000000000815292166004830181905260248301529063c67903ea90604401600060405180830381600087803b158015620088ac57600080fd5b505af1158015620088c1573d6000803e3d6000fd5b5050600054601054604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152601260448201527f554e49535741505f56335f41444150544552000000000000000000000000000060648201526201000090920416925063c657c7189150608401600060405180830381600087803b1580156200897157600080fd5b505af115801562008986573d6000803e3d6000fd5b5050600054601154604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152600f60448201527f554e49535741505f56335f4d4f434b000000000000000000000000000000000060648201526201000090920416925063c657c7189150608401600060405180830381600087803b15801562008a3657600080fd5b505af115801562008a4b573d6000803e3d6000fd5b5050600054601254604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152601560448201527f554e49535741505f56335f5041544846494e444552000000000000000000000060648201526201000090920416925063c657c718915060840162008695565b600754600d54601054601354600a5460609462008b299473ffffffffffffffffffffffffffffffffffffffff918216949082169390821692908216911662009639565b905090565b62008b6c6040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b604051806080016040528062008b86898989898962007967565b8152602081018890526001604082015260600183905290509695505050505050565b62008be38260400151151584604001511515148260405160200162008bce91906200b178565b604051602081830303815290604052620097fa565b60408301511515600114801562008c005750604082015115156001145b1562008cca5762008c3c836020015183602001518360405160200162008c2791906200b1bb565b60405160208183030381529060405262009120565b62008c5d836060015183606001518360405160200162008c2791906200b1fe565b82515182515160405162008c9292919062008c7d9085906020016200b241565b604051602081830303815290604052620090a7565b8251602090810151835182015160405162008cca9362008cb5918691016200b2aa565b60405160208183030381529060405262009844565b505050565b60408051610100810182526000808252602082018190529181018290526060808201839052608082015260a0810182905260c0810182905260e081019190915260606040518061010001604052808462008d2b57875162008d2e565b60015b600281111562008d425762008d426200a6cf565b8152602001876020015173ffffffffffffffffffffffffffffffffffffffff1681526020018760800151868151811062008d805762008d806200aebc565b602002602001015173ffffffffffffffffffffffffffffffffffffffff168152602001876060015173ffffffffffffffffffffffffffffffffffffffff1681526020018281526020018681526020018760c00151815260200160011515815250915050949350505050565b62008e296040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b604051806080016040528062008e4187878762007532565b815260208101869052600160408201526060018390529050949350505050565b60065473ffffffffffffffffffffffffffffffffffffffff16620036215760405162008e8d906200a547565b604051809103906000f08015801562008eaa573d6000803e3d6000fd5b50600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216918217905563b36ba20862008f09670de0b6b3a764000060646200a774565b6040518263ffffffff1660e01b81526004016000604051808303818588803b15801562008f3557600080fd5b505af115801562008f4a573d6000803e3d6000fd5b505060028054307fffffffffffffffffffffffff00000000000000000000000000000000000000009182168117909255600180549091169091179055505050565b60408051600380825260808201909252606091602082018380368337019050509050838160008151811062008fc45762008fc46200aebc565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505082816001815181106200901557620090156200aebc565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505081816002815181106200906657620090666200aebc565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250509392505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161462008cca577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf3583816040516200910c91906200b313565b60405180910390a162008cca83836200989a565b81831462008cca577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf3583816040516200915991906200b313565b60405180910390a162008cca8383620099d8565b6000805b8351811015620091e1578273ffffffffffffffffffffffffffffffffffffffff16848281518110620091a757620091a76200aebc565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff161415620091d85790506200922d565b60010162009171565b506040517f81a3b1be00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316600482015260240162007957565b92915050565b620092716040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b604051806080016040528062008e4187878762009ad8565b6000805b8351811015620091e1578273ffffffffffffffffffffffffffffffffffffffff16848281518110620092c357620092c36200aebc565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff161415620092f45790506200922d565b6001016200928d565b8051606090806200930f575090919050565b60005b600073ffffffffffffffffffffffffffffffffffffffff168482815181106200933f576200933f6200aebc565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff16146200938157600101818114156200937b57509192915050565b62009312565b80156200939c576200939484826200a064565b949350505050565b5050919050565b620093e7825182516040518060400160405280601681526020017f496e636f72726563742063616c6c73206c656e6774680000000000000000000081525062009120565b815160005b81811015620086c5578281815181106200940a576200940a6200aebc565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff168482815181106200944157620094416200aebc565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff16141580620094bf57508281815181106200948157620094816200aebc565b60200260200101516020015180519060200120848281518110620094a957620094a96200aebc565b6020026020010151602001518051906020012014155b156200952c5760408051818152601b818301527f4572726f7220696e206d756c746963616c6c20617420696e646578000000000060608201526020810183905290517fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a89181900360800190a15b620095ae8482815181106200954557620095456200aebc565b6020026020010151600001518483815181106200956657620095666200aebc565b6020026020010151600001516040518060400160405280601881526020017f496e636f72726563742074617267657420616464726573730000000000000000815250620090a7565b62009630848281518110620095c757620095c76200aebc565b602002602001015160200151848381518110620095e857620095e86200aebc565b6020026020010151602001516040518060400160405280601281526020017f496e636f72726563742063616c6c64617461000000000000000000000000000081525062009844565b600101620093ec565b60408051600580825260c082019092526060916020820160a08036833701905050905085816000815181106200967357620096736200aebc565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508481600181518110620096c457620096c46200aebc565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505083816002815181106200971557620097156200aebc565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505082816003815181106200976657620097666200aebc565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508181600481518110620097b757620097b76200aebc565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505095945050505050565b8162007df5577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf3583816040516200983191906200b313565b60405180910390a162007df5826200a126565b6200985083836200a19e565b62008cca577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf3583816040516200988691906200b313565b60405180910390a162008cca83836200a267565b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462007df5577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f50604051620099549060208082526025908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b61646460408201527f726573735d000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f816040516200998d91906200b35c565b60405180910390a17f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f82604051620099c691906200b3be565b60405180910390a162007df56200a370565b80821462007df5577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f5060405162009a669060208082526022908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b75696e60408201527f745d000000000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a88160405162009a9f91906200b3fc565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a882604051620099c691906200b448565b604080518082019091526000815260606020820152606060008551600281111562009b075762009b076200a6cf565b141562009ca9576000604051806101000160405280876040015173ffffffffffffffffffffffffffffffffffffffff168152602001876060015173ffffffffffffffffffffffffffffffffffffffff1681526020018562ffffff168152602001876020015173ffffffffffffffffffffffffffffffffffffffff16815260200142610e1062009b9791906200ac47565b81526020018760a0015181526020018760e0015162009be35760c08801516127109062009bc590826200b011565b62009bd190896200a774565b62009bdd91906200ac0b565b62009be6565b60005b815260006020909101526040519091507f414bf389000000000000000000000000000000000000000000000000000000009062009c289083906024016200b486565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529150505b60018551600281111562009cc15762009cc16200a6cf565b141562009e6d5760008560e0015162009d315760a086015162009ce890612710906200a774565b60c087015162009cfb906127106200b011565b62009d13876b033b2e3c9fd0803ce80000006200a774565b62009d1f91906200a774565b62009d2b91906200ac0b565b62009d34565b60005b905060006040518060c00160405280886040015173ffffffffffffffffffffffffffffffffffffffff168152602001886060015173ffffffffffffffffffffffffffffffffffffffff1681526020018662ffffff16815260200142610e1062009d9e91906200ac47565b815260208082019490945260006040918201528051825173ffffffffffffffffffffffffffffffffffffffff908116602483015283860151811660448301528383015162ffffff16606483015260608401516084830152608084015160a483015260a09093015190921660c4808401919091528151808403909101815260e4909201905291820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc7fbf4de000000000000000000000000000000000000000000000000000000001790525090505b60028551600281111562009e855762009e856200a6cf565b14156200a027576000604051806101000160405280876040015173ffffffffffffffffffffffffffffffffffffffff168152602001876060015173ffffffffffffffffffffffffffffffffffffffff1681526020018562ffffff168152602001876020015173ffffffffffffffffffffffffffffffffffffffff16815260200142610e1062009f1591906200ac47565b81526020018760a0015181526020018760e0015162009f615760c088015162009f41906127106200ac47565b62009f4f612710896200a774565b62009f5b91906200ac0b565b62009f64565b60005b815260006020909101526040519091507fdb3e2198000000000000000000000000000000000000000000000000000000009062009fa69083906024016200b486565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529150505b80511562007920576040805180820190915260105473ffffffffffffffffffffffffffffffffffffffff1681526020810191909152905062007960565b60608167ffffffffffffffff8111156200a082576200a0826200a915565b6040519080825280602002602001820160405280156200a0ca57816020015b6040805180820190915260008152606060208201528152602001906001900390816200a0a15790505b50905060005b828110156200a11f578381815181106200a0ee576200a0ee6200aebc565b60200260200101518282815181106200a10b576200a10b6200aebc565b60209081029190910101526001016200a0d0565b5092915050565b8062003254577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f506040516200a18c9060208082526017908201527f4572726f723a20417373657274696f6e204661696c6564000000000000000000604082015260600190565b60405180910390a1620032546200a370565b8051825160019114156200a25e5760005b83518110156200a257578281815181106200a1ce576200a1ce6200aebc565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168482815181106200a210576200a2106200aebc565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016146200a24257600091505b806200a24e816200ae57565b9150506200a1af565b506200922d565b50600092915050565b6200a27382826200a19e565b62007df5577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f506040516200a2fe9060208082526023908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b62797460408201527f65735d0000000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17fd26e16cad4548705e4c9e2d94f98ee91c289085ee425594fd5635fa2964ccf18816040516200a33791906200b502565b60405180910390a17fd26e16cad4548705e4c9e2d94f98ee91c289085ee425594fd5635fa2964ccf1882604051620099c691906200b554565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200a4c55760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000009282019290925260016060820152600091907f70ca10bbd0dbfd9020a9f4b13402c16cb120705e0d1c0aeab10fa353ae586fc490608001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526200a44292916020016200af05565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526200a47c916200af4f565b6000604051808303816000865af19150503d80600081146200a4bb576040519150601f19603f3d011682016040523d82523d6000602084013e6200a4c0565b606091505b505050505b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055565b611a0d806200b59383390190565b6124fd806200cfa083390190565b613960806200f49d83390190565b6118528062012dfd83390190565b615f8c806201464f83390190565b611893806201a5db83390190565b617a51806201be6e83390190565b62031ed680620238bf83390190565b611a5c806205579583390190565b61251b80620571f183390190565b611a7f806205970c83390190565b611c0e806205b18b83390190565b61221a806205cd9983390190565b6126e4806205efb383390190565b80151581146200325457600080fd5b6000806000606084860312156200a5dd57600080fd5b8335925060208401356200a5f1816200a5b8565b915060408401356200a603816200a5b8565b809150509250925092565b6000602082840312156200a62157600080fd5b813562007960816200a5b8565b600080604083850312156200a64257600080fd5b50508035926020909101359150565b6000806000606084860312156200a66757600080fd5b8335925060208401356200a67b816200a5b8565b929592945050506040919091013590565b73ffffffffffffffffffffffffffffffffffffffff811681146200325457600080fd5b6000602082840312156200a6c257600080fd5b813562007960816200a68c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600b81106200a711576200a7116200a6cf565b9052565b602081016200922d82846200a6fe565b6000602082840312156200a73857600080fd5b815162007960816200a68c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156200a7af576200a7af6200a745565b500290565b600081518084526020808501945080840160005b838110156200a7fc57815173ffffffffffffffffffffffffffffffffffffffff16875295820195908201906001016200a7c8565b509495945050505050565b600060e0830173ffffffffffffffffffffffffffffffffffffffff80845116855260208085015160e082880152838151808652610100890191508383019550600092505b808310156200a87a5785518051861683528401518483015294830194600192909201916040909101906200a84b565b50604087015194506200a8a5604089018673ffffffffffffffffffffffffffffffffffffffff169052565b6060870151945087810360608901526200a8c081866200a7b4565b945050505050608083015184820360808601526200a8df82826200a7b4565b91505060a083015160a085015260c083015160c08501528091505092915050565b6020815260006200796060208301846200a807565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156200a96a576200a96a6200a915565b60405290565b6040516060810167ffffffffffffffff811182821017156200a96a576200a96a6200a915565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156200a9e0576200a9e06200a915565b604052919050565b60005b838110156200aa055781810151838201526020016200a9eb565b83811115620086c55750506000910152565b6000604082840312156200aa2a57600080fd5b6200aa346200a944565b905081516200aa43816200a68c565b815260208281015167ffffffffffffffff808211156200aa6257600080fd5b818501915085601f8301126200aa7757600080fd5b8151818111156200aa8c576200aa8c6200a915565b6200aabe847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016200a996565b915080825286848285010111156200aad557600080fd5b6200aae6818584018686016200a9e8565b50808385015250505092915050565b600060208083850312156200ab0957600080fd5b825167ffffffffffffffff808211156200ab2257600080fd5b90840190606082870312156200ab3757600080fd5b6200ab416200a970565b8251815283830151848201526040830151828111156200ab6057600080fd5b80840193505086601f8401126200ab7657600080fd5b8251828111156200ab8b576200ab8b6200a915565b8060051b6200ab9c8682016200a996565b918252848101860191868101908a8411156200abb757600080fd5b87870192505b838310156200abf8578251868111156200abd75760008081fd5b6200abe78c8a838b01016200aa17565b83525091870191908701906200abbd565b6040850152509198975050505050505050565b6000826200ac42577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600082198211156200ac5d576200ac5d6200a745565b500190565b600381106200a711576200a7116200a6cf565b608081526200ac896080820186516200ac62565b602085015173ffffffffffffffffffffffffffffffffffffffff90811660a083015260408601511660c082015260608501516000906200ace160e084018273ffffffffffffffffffffffffffffffffffffffff169052565b506080860151610100838101526200acfe6101808401826200a7b4565b905060a087015161012084015260c087015161014084015260e08701516200ad2b61016085018215159052565b5085602084015284604084015282810360608401526200ad4c81856200a7b4565b979650505050505050565b6000608082840312156200ad6a57600080fd5b6040516080810167ffffffffffffffff82821081831117156200ad91576200ad916200a915565b8160405282935084519150808211156200adaa57600080fd5b506200adb9858286016200aa17565b8252506020830151602082015260408301516200add6816200a5b8565b6040820152606092830151920191909152919050565b600080604083850312156200ae0057600080fd5b825167ffffffffffffffff808211156200ae1957600080fd5b6200ae27868387016200ad57565b935060208501519150808211156200ae3e57600080fd5b506200ae4d858286016200ad57565b9150509250929050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156200ae8c576200ae8c6200a745565b5060010190565b6040815260006200aea860408301856200a7b4565b828103602084015262007cbe81856200a7b4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000602082840312156200aefe57600080fd5b5051919050565b7fffffffff0000000000000000000000000000000000000000000000000000000083168152600082516200af418160048501602087016200a9e8565b919091016004019392505050565b600082516200af638184602087016200a9e8565b9190910192915050565b6000602082840312156200af8057600080fd5b815162007960816200a5b8565b6060815260006200afa260608301866200a807565b602083019490945250901515604090910152919050565b600080604083850312156200afcd57600080fd5b825167ffffffffffffffff8111156200afe557600080fd5b6200aff3858286016200ad57565b92505060208301516200b006816200a68c565b809150509250929050565b6000828210156200b026576200b0266200a745565b500390565b600081518084526200b0458160208601602086016200a9e8565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006200796060208301846200b02b565b600080604083850312156200b0a057600080fd5b82516200b0ad816200a68c565b602084015190925061ffff811681146200b00657600080fd5b85815284602082015260a0604082015260006200b0e760a08301866200a7b4565b73ffffffffffffffffffffffffffffffffffffffff94909416606083015250608001529392505050565b8381526060602082015260006200b12c60608301856200a7b4565b9050826040830152949350505050565b602081016200922d82846200ac62565b73ffffffffffffffffffffffffffffffffffffffff83168152604081016200796060208301846200a6fe565b600082516200b18c8184602087016200a9e8565b7f446966666572656e7420666f756e6420706172616d7300000000000000000000920191825250601601919050565b600082516200b1cf8184602087016200a9e8565b7f71312e616d6f756e7420213d2071322e616d6f756e7400000000000000000000920191825250601601919050565b600082516200b2128184602087016200a9e8565b7f71312e676173557361676520213d2071322e6761735573616765000000000000920191825250601a01919050565b600082516200b2558184602087016200a9e8565b7f71312e6d756c746943616c6c2e74617267657420213d2071322e6d756c7469439201918252507f616c6c2e746172676574000000000000000000000000000000000000000000006020820152602a01919050565b600082516200b2be8184602087016200a9e8565b7f71312e6d756c746943616c6c2e63616c6c4461746120213d2071322e6d756c749201918252507f6943616c6c2e63616c6c446174610000000000000000000000000000000000006020820152602e01919050565b60408152600560408201527f4572726f7200000000000000000000000000000000000000000000000000000060608201526080602082015260006200796060808301846200b02b565b6040815260006200b39a60408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b905073ffffffffffffffffffffffffffffffffffffffff8316602083015292915050565b6040815260006200b39a60408301600a81527f2020202041637475616c00000000000000000000000000000000000000000000602082015260400190565b6040815260006200b43a60408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b905082602083015292915050565b6040815260006200b43a60408301600a81527f2020202041637475616c00000000000000000000000000000000000000000000602082015260400190565b61010081016200922d828473ffffffffffffffffffffffffffffffffffffffff80825116835280602083015116602084015262ffffff60408301511660408401528060608301511660608401526080820151608084015260a082015160a084015260c082015160c08401528060e08301511660e0840152505050565b6040815260006200b54060408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b82810360208401526200939481856200b02b565b6040815260006200b54060408301600a81527f2020202041637475616c0000000000000000000000000000000000000000000060208201526040019056fe60806040523480156200001157600080fd5b5060405162001a0d38038062001a0d8339810160408190526200003491620000ef565b6200003f3362000082565b600180546001600160a01b039485166001600160a01b03199182161790915560028054938516938216939093179092556003805491909316911617905562000139565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b0381168114620000ea57600080fd5b919050565b6000806000606084860312156200010557600080fd5b6200011084620000d2565b92506200012060208501620000d2565b91506200013060408501620000d2565b90509250925092565b6118c480620001496000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c80638da5cb5b11610076578063ebf9deac1161005b578063ebf9deac1461019e578063eeef8dd0146101be578063f2fde38b146101de57600080fd5b80638da5cb5b1461016d5780638e8a08521461018b57600080fd5b806337c605f7116100a757806337c605f71461012d57806354fd4d501461014d578063715018a61461016357600080fd5b80631c9a755f146100c3578063287b94d71461010d575b600080fd5b6003546100e39073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6001546100e39073ffffffffffffffffffffffffffffffffffffffff1681565b61014061013b3660046111c2565b6101f1565b604051610104919061130a565b610155600181565b604051908152602001610104565b61016b6104d0565b005b60005473ffffffffffffffffffffffffffffffffffffffff166100e3565b6100e361019936600461138a565b610562565b6101b16101ac3660046113ae565b61070c565b604051610104919061141b565b6002546100e39073ffffffffffffffffffffffffffffffffffffffff1681565b61016b6101ec36600461138a565b610873565b6040805160c081018252600060808201818152606060a08401819052908352602083018290529282018190528183015282516000908067ffffffffffffffff81111561023f5761023f610f44565b6040519080825280602002602001820160405280156102ad57816020015b61029a6040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b81526020019060019003908161025d5790505b50935060005b818110156104ba5760008682815181106102cf576102cf61142e565b6020026020010151905060006102e482610562565b905073ffffffffffffffffffffffffffffffffffffffff8116156104b0576040517f1bf64c4100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821690631bf64c4190610356908c908690600401611518565b6000604051808303816000875af1158015610375573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526103bb91908101906115f9565b955060008173ffffffffffffffffffffffffffffffffffffffff16636f33547d8b856040518363ffffffff1660e01b81526004016103fa929190611518565b6000604051808303816000875af1158015610419573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261045f91908101906115f9565b905061046e818b8960006109a3565b15610477578096505b8660400151156104ae57868887815181106104945761049461142e565b602002602001018190525085806104aa9061176c565b9650505b505b50506001016102b3565b506104c4846109bf565b93505050505b92915050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610556576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6105606000610aea565b565b600073ffffffffffffffffffffffffffffffffffffffff8216156107075760008273ffffffffffffffffffffffffffffffffffffffff1663ce30bbdb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f191906117a5565b905060018160108111156106075761060761145d565b14156106295760025473ffffffffffffffffffffffffffffffffffffffff1691505b600281601081111561063d5761063d61145d565b141561065f5760035473ffffffffffffffffffffffffffffffffffffffff1691505b60038160108111156106735761067361145d565b14806106905750600581601081111561068e5761068e61145d565b145b806106ac575060068160108111156106aa576106aa61145d565b145b806106c8575060078160108111156106c6576106c661145d565b145b806106e4575060088160108111156106e2576106e261145d565b145b156107055760015473ffffffffffffffffffffffffffffffffffffffff1691505b505b919050565b6107496040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b825160005b8181101561086a57600085828151811061076a5761076a61142e565b60200260200101519050600061077f82610562565b905073ffffffffffffffffffffffffffffffffffffffff8116156108605760006107a883610562565b73ffffffffffffffffffffffffffffffffffffffff16631bf64c418a856040518363ffffffff1660e01b81526004016107e2929190611518565b6000604051808303816000875af1158015610801573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261084791908101906115f9565b9050610855818a888a6109a3565b1561085e578095505b505b505060010161074e565b50509392505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146108f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161054d565b73ffffffffffffffffffffffffffffffffffffffff8116610997576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161054d565b6109a081610aea565b50565b60006109b6858585866060015186610b5f565b95945050505050565b8051606090806109d0575090919050565b60005b8381815181106109e5576109e561142e565b60200260200101516040015115610a0e5760010181811415610a0957509192915050565b6109d3565b8067ffffffffffffffff811115610a2757610a27610f44565b604051908082528060200260200182016040528015610a9557816020015b610a826040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b815260200190600190039081610a455790505b50925060005b81811015610ae257848181518110610ab557610ab561142e565b6020026020010151848281518110610acf57610acf61142e565b6020908102919091010152600101610a9b565b505050919050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008560400151610b72575060006109b6565b8360400151610b83575060016109b6565b6000610be08688602001516b033b2e3c9fd0803ce8000000868b60600151610bab91906117c6565b610bb59190611803565b60208901516b033b2e3c9fd0803ce8000000610bd1898b6117c6565b610bdb9190611803565b610c79565b9050600086516002811115610bf757610bf761145d565b1480610c155750600186516002811115610c1357610c1361145d565b145b15610c215790506109b6565b600286516002811115610c3657610c3661145d565b1415610c44571590506109b6565b85516040517ffe7995cf00000000000000000000000000000000000000000000000000000000815261054d919060040161183e565b6000610cb96040518060400160405280600c81526020017f414141202d20616d6f756e740000000000000000000000000000000000000000815250610d6a565b610cc285610df9565b610ccb84610df9565b610cd483610df9565b610cdd82610df9565b610cef610cea858761184c565b610df9565b610cfc610cea838561184c565b610d0586610e8a565b610d2657610d138284611863565b610d1d8587611863565b101590506109b6565b838510158015610d365750818310155b15610d4f57610d45828461184c565b610d1d858761184c565b838510610d5d576001610d60565b60005b9695505050505050565b6109a081604051602401610d7e919061187b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f41304fac00000000000000000000000000000000000000000000000000000000179052610f23565b6109a081604051602401610e0f91815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff5b1bba900000000000000000000000000000000000000000000000000000000179052610f23565b60008082516002811115610ea057610ea061145d565b1480610ebe5750600182516002811115610ebc57610ebc61145d565b145b15610ecb57506001919050565b600282516002811115610ee057610ee061145d565b1415610eee57506000919050565b81516040517ffe7995cf00000000000000000000000000000000000000000000000000000000815261054d919060040161183e565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610100810167ffffffffffffffff81118282101715610f9757610f97610f44565b60405290565b6040516080810167ffffffffffffffff81118282101715610f9757610f97610f44565b6040805190810167ffffffffffffffff81118282101715610f9757610f97610f44565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561102a5761102a610f44565b604052919050565b80356003811061070757600080fd5b73ffffffffffffffffffffffffffffffffffffffff811681146109a057600080fd5b803561070781611041565b600082601f83011261107f57600080fd5b8135602067ffffffffffffffff82111561109b5761109b610f44565b8160051b6110aa828201610fe3565b92835284810182019282810190878511156110c457600080fd5b83870192505b848310156110ec5782356110dd81611041565b825291830191908301906110ca565b979650505050505050565b80151581146109a057600080fd5b8035610707816110f7565b6000610100828403121561112357600080fd5b61112b610f73565b905061113682611032565b815261114460208301611063565b602082015261115560408301611063565b604082015261116660608301611063565b6060820152608082013567ffffffffffffffff81111561118557600080fd5b6111918482850161106e565b60808301525060a082013560a082015260c082013560c08201526111b760e08301611105565b60e082015292915050565b600080604083850312156111d557600080fd5b823567ffffffffffffffff808211156111ed57600080fd5b6111f986838701611110565b9350602085013591508082111561120f57600080fd5b5061121c8582860161106e565b9150509250929050565b60005b83811015611241578181015183820152602001611229565b83811115611250576000848401525b50505050565b6000815180845261126e816020860160208601611226565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b80516080808452815173ffffffffffffffffffffffffffffffffffffffff169084015260200151604060a08401526000906112de60c0850182611256565b905060208301516020850152604083015115156040850152606083015160608501528091505092915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561137d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc088860301845261136b8583516112a0565b94509285019290850190600101611331565b5092979650505050505050565b60006020828403121561139c57600080fd5b81356113a781611041565b9392505050565b6000806000606084860312156113c357600080fd5b833567ffffffffffffffff808211156113db57600080fd5b6113e787838801611110565b945060208601359150808211156113fd57600080fd5b5061140a8682870161106e565b925050604084013590509250925092565b6020815260006113a760208301846112a0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600381106114c3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b600081518084526020808501945080840160005b8381101561150d57815173ffffffffffffffffffffffffffffffffffffffff16875295820195908201906001016114db565b509495945050505050565b6040815261152a60408201845161148c565b6000602084015173ffffffffffffffffffffffffffffffffffffffff80821660608501528060408701511660808501525050606084015161158360a084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060808401516101008060c08501526115a06101408501836114c7565b915060a086015160e085015260c0860151818501525060e08501516115ca61012085018215159052565b5073ffffffffffffffffffffffffffffffffffffffff8416602084015290506113a7565b8051610707816110f7565b6000602080838503121561160c57600080fd5b825167ffffffffffffffff8082111561162457600080fd5b908401906080828703121561163857600080fd5b611640610f9d565b82518281111561164f57600080fd5b83016040818903121561166157600080fd5b611669610fc0565b815161167481611041565b8152818601518481111561168757600080fd5b80830192505088601f83011261169c57600080fd5b8151848111156116ae576116ae610f44565b6116de877fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601610fe3565b945080855289878285010111156116f457600080fd5b61170381888701898601611226565b508086018490528252508284015181850152611721604084016115ee565b6040820152606083015160608201528094505050505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561179e5761179e61173d565b5060010190565b6000602082840312156117b757600080fd5b8151601181106113a757600080fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156117fe576117fe61173d565b500290565b600082611839577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b602081016104ca828461148c565b60008282101561185e5761185e61173d565b500390565b600082198211156118765761187661173d565b500190565b6020815260006113a7602083018461125656fea26469706673582212204a44d119a95a7bbbbf2c6cd5403facba1ffe02ace142ee957c64cb512d488b0664736f6c634300080a003360a06040523480156200001157600080fd5b50604051620024fd380380620024fd8339810160408190526200003491620001cd565b6200003f3362000160565b6000829050806001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000083573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000a9919062000205565b6001600160a01b03166080816001600160a01b031681525050806001600160a01b031663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000101573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000127919062000205565b600280546001600160a01b039283166001600160a01b0319918216179091556001805494909216931692909217909155506200022a9050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b0381168114620001c857600080fd5b919050565b60008060408385031215620001e157600080fd5b620001ec83620001b0565b9150620001fc60208401620001b0565b90509250929050565b6000602082840312156200021857600080fd5b6200022382620001b0565b9392505050565b6080516122b06200024d6000396000818161015e015261055001526122b06000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c8063553f67ec116100815780639b59deba1161005b5780639b59deba146101d1578063c1a5de80146101f2578063f2fde38b1461021257600080fd5b8063553f67ec14610196578063715018a6146101a95780638da5cb5b146101b357600080fd5b806347c242db116100b257806347c242db146101385780634b57b0be1461015957806354fd4d501461018057600080fd5b806308d665d3146100ce5780632630c12f14610118575b600080fd5b6001546100ee9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6002546100ee9073ffffffffffffffffffffffffffffffffffffffff1681565b61014b610146366004611955565b610225565b60405161010f929190611b5c565b6100ee7f000000000000000000000000000000000000000000000000000000000000000081565b610188600281565b60405190815260200161010f565b6101886101a4366004611b81565b6104ca565b6101b16105c7565b005b60005473ffffffffffffffffffffffffffffffffffffffff166100ee565b6101e46101df366004611cf7565b610654565b60405161010f929190611d52565b610205610200366004611d8a565b6108a5565b60405161010f9190611dbf565b6101b1610220366004611b81565b610ce9565b6102626040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b61029f6040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b6102a886610e19565b6102ea5785516040517ffe7995cf0000000000000000000000000000000000000000000000000000000081526102e19190600401611ec6565b60405180910390fd5b60015473ffffffffffffffffffffffffffffffffffffffff1663ebf9deac6103128888610eb2565b856103398a608001518a8151811061032c5761032c611ed4565b60200260200101516104ca565b6040518463ffffffff1660e01b815260040161035793929190611f54565b6000604051808303816000875af1158015610376573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526103bc9190810190612034565b91508160400151156104c15760008483602001516103da91906121a7565b60015490915073ffffffffffffffffffffffffffffffffffffffff1663ebf9deac61040889848a8a15610fbe565b866104168b606001516104ca565b6040518463ffffffff1660e01b815260040161043493929190611f54565b6000604051808303816000875af1158015610453573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526104999190810190612034565b915080836020015183602001516104b091906121bf565b6104ba91906121fc565b6020830152505b94509492505050565b60025460009073ffffffffffffffffffffffffffffffffffffffff1663b66102df6105056b033b2e3c9fd0803ce8000000633b9aca006121bf565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b168152600481019190915273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015285166044820152606401602060405180830381865afa15801561059d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105c19190612237565b92915050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610648576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102e1565b61065260006110d2565b565b6106916040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b60008061069e8686611147565b600154608088015160a08901516040517febf9deac00000000000000000000000000000000000000000000000000000000815293945073ffffffffffffffffffffffffffffffffffffffff9092169263ebf9deac92610704928692909190600401611f54565b6000604051808303816000875af1158015610723573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526107699190810190612034565b606081015160408801519194509092508461089b5760608701515160005b818110156108985760006107c58a6060015183815181106107aa576107aa611ed4565b60200260200101518b6020015161126290919063ffffffff16565b90506000806107da8785858f60800151610225565b9150915080604001511561088a5782156107f55760006107f9565b614e205b8160600151836060015161080d91906121a7565b61081791906121a7565b606082015260a08c015161083290829089908c908a90611293565b1561088a578198508260001461084957600061084d565b614e205b8960600181815161085e91906121a7565b90525060608c015180518590811061087857610878611ed4565b60200260200101519750806060015195505b836001019350505050610787565b50505b5050935093915050565b6108c960405180606001604052806000815260200160008152602001606081525090565b604082015160208301515160608401515160008267ffffffffffffffff8111156108f5576108f5611752565b60405190808252806020026020018201604052801561093b57816020015b6040805180820190915260008152606060208201528152602001906001900390816109135790505b50905060008267ffffffffffffffff81111561095957610959611752565b604051908082528060200260200182016040528015610982578160200160208202803683370190505b50905060008060005b86811015610b515760008a6020015182815181106109ab576109ab611ed4565b60200260200101516000015190508873ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610b485760608b01516109fb90826113b6565b15610a2a5781858581518110610a1357610a13611ed4565b602002602001018181525050836001019350610b48565b60018b602001518381518110610a4257610a42611ed4565b6020026020010151602001511115610b4857600080610a638d856000610654565b915091508160400151610ac2576040517f201e176300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80851660048301528c1660248201526044016102e1565b60008d602001518581518110610ada57610ada611ed4565b60200260200101516020018181525050610b078183602001518f602001516114309092919063ffffffff16565b8160000151888681518110610b1e57610b1e611ed4565b6020026020010181905250848060010195505081606001518c602001818151019150818152505050505b5060010161098b565b5060005b85811015610cc3576000848281518110610b7157610b71611ed4565b6020026020010151905060008b602001518281518110610b9357610b93611ed4565b602002602001015160000151905060018c602001518381518110610bb957610bb9611ed4565b6020026020010151602001511115610cb9576000610bd98d846001610654565b5090508060400151610c37576040517f201e176300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80841660048301528c1660248201526044016102e1565b60008d602001518481518110610c4f57610c4f611ed4565b60200260200101516020018181525050610c7c8b82602001518f602001516114309092919063ffffffff16565b8060000151888681518110610c9357610c93611ed4565b602090810291909101810191909152606090910151908c01805190910190526001909301925b5050600101610b55565b50604088018490526020890151610cda9088611262565b88525095979650505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610d6a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102e1565b73ffffffffffffffffffffffffffffffffffffffff8116610e0d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102e1565b610e16816110d2565b50565b60008082516002811115610e2f57610e2f611e5c565b1480610e4d5750600182516002811115610e4b57610e4b611e5c565b145b15610e5a57506001919050565b600282516002811115610e6f57610e6f611e5c565b1415610e7d57506000919050565b81516040517ffe7995cf0000000000000000000000000000000000000000000000000000000081526102e19190600401611ec6565b60408051610100810182526000808252602082018190529181018290526060808201839052608082015260a0810182905260c0810182905260e0810191909152606060405180610100016040528085600001516002811115610f1657610f16611e5c565b8152602001856020015173ffffffffffffffffffffffffffffffffffffffff168152602001856040015173ffffffffffffffffffffffffffffffffffffffff16815260200185608001518581518110610f7157610f71611ed4565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1681526020018281526020018560a0015181526020018560c0015181526020016001151581525091505092915050565b60408051610100810182526000808252602082018190529181018290526060808201839052608082015260a0810182905260c0810182905260e081019190915260606040518061010001604052808461101857875161101b565b60015b600281111561102c5761102c611e5c565b8152602001876020015173ffffffffffffffffffffffffffffffffffffffff1681526020018760800151868151811061106757611067611ed4565b602002602001015173ffffffffffffffffffffffffffffffffffffffff168152602001876060015173ffffffffffffffffffffffffffffffffffffffff1681526020018281526020018681526020018760c00151815260200160011515815250915050949350505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60408051610100810182526000808252602082018190529181018290526060808201839052608082015260a0810182905260c0810182905260e08101919091526040805161010081019091528060018152602001846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015184815181106111d1576111d1611ed4565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff168152602001846040015173ffffffffffffffffffffffffffffffffffffffff168152602001846060015181526020018460200151848151811061123857611238611ed4565b60200260200101516020015181526020018460c00151815260200160011515815250905092915050565b60008261126f848461146c565b8151811061127f5761127f611ed4565b602002602001015160200151905092915050565b600085604001516112a6575060006113ad565b83604001516112b7575060016113ad565b60006113148688602001516b033b2e3c9fd0803ce8000000868b606001516112df91906121bf565b6112e991906121fc565b60208901516b033b2e3c9fd0803ce8000000611305898b6121bf565b61130f91906121fc565b611524565b905060008651600281111561132b5761132b611e5c565b1480611349575060018651600281111561134757611347611e5c565b145b156113555790506113ad565b60028651600281111561136a5761136a611e5c565b1415611378571590506113ad565b85516040517ffe7995cf0000000000000000000000000000000000000000000000000000000081526102e19190600401611ec6565b95945050505050565b8151600090815b81811015611425578373ffffffffffffffffffffffffffffffffffffffff168582815181106113ee576113ee611ed4565b602002602001015173ffffffffffffffffffffffffffffffffffffffff16141561141d576001925050506105c1565b6001016113bd565b506000949350505050565b808361143c858561146c565b8151811061144c5761144c611ed4565b602002602001015160200181815161146491906121a7565b905250505050565b6000805b83518110156114d9578273ffffffffffffffffffffffffffffffffffffffff168482815181106114a2576114a2611ed4565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff1614156114d15790506105c1565b600101611470565b506040517f81a3b1be00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016102e1565b60006115646040518060400160405280600c81526020017f414141202d20616d6f756e740000000000000000000000000000000000000000815250611615565b61156d856116a4565b611576846116a4565b61157f836116a4565b611588826116a4565b61159a6115958587612250565b6116a4565b6115a76115958385612250565b6115b086610e19565b6115d1576115be82846121a7565b6115c885876121a7565b101590506113ad565b8385101580156115e15750818310155b156115fa576115f08284612250565b6115c88587612250565b83851061160857600161160b565b60005b9695505050505050565b610e16816040516024016116299190612267565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f41304fac00000000000000000000000000000000000000000000000000000000179052611731565b610e16816040516024016116ba91815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff5b1bba9000000000000000000000000000000000000000000000000000000001790525b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610100810167ffffffffffffffff811182821017156117a5576117a5611752565b60405290565b6040805190810167ffffffffffffffff811182821017156117a5576117a5611752565b60405160e0810167ffffffffffffffff811182821017156117a5576117a5611752565b6040516080810167ffffffffffffffff811182821017156117a5576117a5611752565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561185b5761185b611752565b604052919050565b80356003811061187257600080fd5b919050565b73ffffffffffffffffffffffffffffffffffffffff81168114610e1657600080fd5b803561187281611877565b600067ffffffffffffffff8211156118be576118be611752565b5060051b60200190565b600082601f8301126118d957600080fd5b813560206118ee6118e9836118a4565b611814565b82815260059290921b8401810191818101908684111561190d57600080fd5b8286015b8481101561193157803561192481611877565b8352918301918301611911565b509695505050505050565b8015158114610e1657600080fd5b80356118728161193c565b6000806000806080858703121561196b57600080fd5b843567ffffffffffffffff8082111561198357600080fd5b90860190610100828903121561199857600080fd5b6119a0611781565b6119a983611863565b81526119b760208401611899565b60208201526119c860408401611899565b60408201526119d960608401611899565b60608201526080830135828111156119f057600080fd5b6119fc8a8286016118c8565b60808301525060a083013560a082015260c083013560c0820152611a2260e0840161194a565b60e0820152955060208701359450604087013593506060870135915080821115611a4b57600080fd5b50611a58878288016118c8565b91505092959194509250565b60005b83811015611a7f578181015183820152602001611a67565b83811115611a8e576000848401525b50505050565b60008151808452611aac816020860160208601611a64565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff81511682526000602082015160406020850152611b136040850182611a94565b949350505050565b6000815160808452611b306080850182611ade565b905060208301516020850152604083015115156040850152606083015160608501528091505092915050565b604081526000611b6f6040830185611b1b565b82810360208401526113ad8185611b1b565b600060208284031215611b9357600080fd5b8135611b9e81611877565b9392505050565b600082601f830112611bb657600080fd5b81356020611bc66118e9836118a4565b82815260069290921b84018101918181019086841115611be557600080fd5b8286015b848110156119315760408189031215611c025760008081fd5b611c0a6117ab565b8135611c1581611877565b81528185013585820152835291830191604001611be9565b600060e08284031215611c3f57600080fd5b611c476117ce565b9050611c5282611899565b8152602082013567ffffffffffffffff80821115611c6f57600080fd5b611c7b85838601611ba5565b6020840152611c8c60408501611899565b60408401526060840135915080821115611ca557600080fd5b611cb1858386016118c8565b60608401526080840135915080821115611cca57600080fd5b50611cd7848285016118c8565b60808301525060a082013560a082015260c082013560c082015292915050565b600080600060608486031215611d0c57600080fd5b833567ffffffffffffffff811115611d2357600080fd5b611d2f86828701611c2d565b935050602084013591506040840135611d478161193c565b809150509250925092565b604081526000611d656040830185611b1b565b905073ffffffffffffffffffffffffffffffffffffffff831660208301529392505050565b600060208284031215611d9c57600080fd5b813567ffffffffffffffff811115611db357600080fd5b611b1384828501611c2d565b6000602080835260808301845182850152818501516040850152604085015160608086015281815180845260a08701915060a08160051b8801019350848301925060005b81811015611e4f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60888603018352611e3d858551611ade565b94509285019291850191600101611e03565b5092979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60038110611ec2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b602081016105c18284611e8b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081518084526020808501945080840160005b83811015611f4957815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101611f17565b509495945050505050565b60608152611f66606082018551611e8b565b602084015173ffffffffffffffffffffffffffffffffffffffff908116608083015260408501511660a08201526060840151600090611fbd60c084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060808501516101008060e0850152611fda610160850183611f03565b915060a0870151818501525060c086015161012084015260e086015161200561014085018215159052565b5082810360208401526120188186611f03565b915050826040830152949350505050565b80516118728161193c565b6000602080838503121561204757600080fd5b825167ffffffffffffffff8082111561205f57600080fd5b908401906080828703121561207357600080fd5b61207b6117f1565b82518281111561208a57600080fd5b83016040818903121561209c57600080fd5b6120a46117ab565b81516120af81611877565b815281860151848111156120c257600080fd5b80830192505088601f8301126120d757600080fd5b8151848111156120e9576120e9611752565b612119877fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611814565b9450808552898782850101111561212f57600080fd5b61213e81888701898601611a64565b50808601849052825250828401518185015261215c60408401612029565b6040820152606083015160608201528094505050505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156121ba576121ba612178565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156121f7576121f7612178565b500290565b600082612232577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60006020828403121561224957600080fd5b5051919050565b60008282101561226257612262612178565b500390565b602081526000611b9e6020830184611a9456fea264697066735822122062a2ca1eb00b46484704ebc3745cb0199763e60cd447c42272869be949de054264736f6c634300080a003360806040523480156200001157600080fd5b5060405162003960380380620039608339810160408190526200003491620002a2565b8151829082906200004d90600290602085019062000133565b5080516200006390600390602084019062000133565b506000601260405162000076906200019d565b6060808252600790820152664352564d6f636b60c81b608082015260a0602082018190526015908201527f43525620666f72204375727665506f6f6c4d6f636b000000000000000000000060c082015260ff909116604082015260e001604051809103906000f080158015620000f0573d6000803e3d6000fd5b50600080546001600160a01b039092166001600160a01b03199283168117909155600180549092161790555050670de0b6b3a7640000600755506200030c915050565b8280548282559060005260206000209081019282156200018b579160200282015b828111156200018b57825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019062000154565b5062000199929150620001ab565b5090565b611758806200220883390190565b5b80821115620001995760008155600101620001ac565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b0381168114620001f057600080fd5b919050565b600082601f8301126200020757600080fd5b815160206001600160401b0380831115620002265762000226620001c2565b8260051b604051601f19603f830116810181811084821117156200024e576200024e620001c2565b6040529384528581018301938381019250878511156200026d57600080fd5b83870191505b8482101562000297576200028782620001d8565b8352918301919083019062000273565b979650505050505050565b60008060408385031215620002b657600080fd5b82516001600160401b0380821115620002ce57600080fd5b620002dc86838701620001f5565b93506020850151915080821115620002f357600080fd5b506200030285828601620001f5565b9150509250929050565b611eec806200031c6000396000f3fe608060405234801561001057600080fd5b506004361061030a5760003560e01c806382c630661161019c578063bb7b8b80116100ee578063e2e7d26411610097578063f851a44011610071578063f851a44014610597578063fc0c546a1461059e578063fee3f7f91461036257600080fd5b8063e2e7d26414610576578063ecb586a514610584578063f446c1d01461036257600080fd5b8063d96c7fce116100c8578063d96c7fce14610369578063dd62ed3e14610568578063ddca3f431461036257600080fd5b8063bb7b8b801461053a578063c661065714610542578063cc2b27d71461055557600080fd5b80639fdaea0c11610150578063b739953e1161012a578063b739953e14610501578063b91434d114610514578063b9947eb01461052757600080fd5b80639fdaea0c146104db578063a6417ed6146104ee578063b4b577ad1461036257600080fd5b80638ea875f3116101815780638ea875f3146104bf57806395d89b411461033557806399bd2ba5146104c857600080fd5b806382c630661461048c57806385ca3c6f146104ac57600080fd5b80633df02124116102605780635e0d443f1161020957806371035418116101e3578063710354181461045457806376a2f0f0146103625780637b475b681461046757600080fd5b80635e0d443f1461042d57806363543f061461036257806370a082311461044057600080fd5b80634903b0d11161023a5780634903b0d1146104075780635409491a1461036257806356ac35031461041a57600080fd5b80633df02124146103e15780634469e30e146103695780634515cef3146103f457600080fd5b806318160ddd116102c257806323746eb81161029c57806323746eb814610393578063313ce567146103625780633883e119146103cb57600080fd5b806318160ddd146103625780631a4d01d21461037e5780632081066c1461036257600080fd5b806307211ef7116102f357806307211ef71461034f578063140522881461036257806314f059791461036957600080fd5b8063065a80d81461030f57806306fdde0314610335575b600080fd5b61032261031d36600461192d565b6105be565b6040519081526020015b60405180910390f35b6040805160208101825260008152905161032c9190611974565b61032261035d3660046119c5565b610677565b6000610322565b6103716106c7565b60405161032c9190611a01565b61039161038c366004611a32565b6106f2565b005b6103a66103a136600461192d565b6107e6565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161032c565b6103226103d9366004611a79565b600092915050565b6103916103ef366004611ab1565b610826565b610391610402366004611b88565b610950565b610322610415366004611bb3565b610b1c565b6103916104283660046119c5565b610b31565b61032261043b3660046119c5565b610b92565b61032261044e366004611bf0565b50600090565b610391610462366004611bb3565b600755565b610391610475366004611c0b565b600f9190910b600090815260066020526040902055565b6001546103a69073ffffffffffffffffffffffffffffffffffffffff1681565b6103716104ba366004611c35565b610bce565b61032260075481565b6103916104d6366004611c73565b610c04565b6103916104e9366004611c8f565b610c63565b6103916104fc366004611ab1565b610de6565b6103a661050f36600461192d565b6111a6565b6103916105223660046119c5565b6111be565b6103a6610535366004611bb3565b61121f565b600754610322565b6103a6610550366004611bb3565b611234565b610322610563366004611cac565b611249565b6103226103d9366004611cd8565b61032261044e366004611bb3565b610391610592366004611d02565b61127f565b60006103a6565b6000546103a69073ffffffffffffffffffffffffffffffffffffffff1681565b6000600282600f0b815481106105d6576105d6611d26565b6000918252602090912001546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa15801561064d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106719190611d55565b92915050565b600f83810b60009081526005602090815260408083209386900b8352929052908120546b033b2e3c9fd0803ce8000000906106b3908490611d9d565b6106bd9190611dda565b90505b9392505050565b6106cf6118f8565b604051806060016040528060008152602001600081526020016000815250905090565b6000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810185905273ffffffffffffffffffffffffffffffffffffffff909116906379cc6790906044016020604051808303816000875af1158015610769573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078d9190611e15565b506107e133826002856fffffffffffffffffffffffffffffffff16815481106107b8576107b8611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169190611402565b505050565b6000600282600f0b815481106107fe576107fe611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1692915050565b6000610833858585610b92565b9050818110156108ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f437572766556314d6f636b3a20494e53554646494349454e545f4f555450555460448201527f5f414d4f554e540000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61091f3330856002896fffffffffffffffffffffffffffffffff16815481106108f5576108f5611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169291906114d6565b61094933826002876fffffffffffffffffffffffffffffffff16815481106107b8576107b8611d26565b5050505050565b60005b6003811015610a7f57600083826003811061097057610970611d26565b60200201511115610a6d576002818154811061098e5761098e611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff166323b872dd33308685600381106109c9576109c9611d26565b60200201516040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff938416600482015292909116602483015260448201526064016020604051808303816000875af1158015610a47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6b9190611e15565b505b80610a7781611e32565b915050610953565b506000546040517f40c10f190000000000000000000000000000000000000000000000000000000081523360048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f19906044015b6020604051808303816000875af1158015610af8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e19190611e15565b6000600282815481106105d6576105d6611d26565b600f83810b60009081526005602090815260408083209386900b835292905220819055610b6a6b033b2e3c9fd0803ce80000008261153a565b600f92830b60009081526005602090815260408083209690950b825294909452919092205550565b600f83810b60009081526004602090815260408083209386900b8352929052908120546b033b2e3c9fd0803ce8000000906106b3908490611d9d565b610bd66118f8565b6040805160608181019092529085906003908390839080828437600092019190915250919695505050505050565b6000546040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052909116906340c10f1990604401610ad9565b60005b6003811015610d88576000838260038110610c8357610c83611d26565b60200201351115610d765760028181548110610ca157610ca1611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33858460038110610cdb57610cdb611d26565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff9093166004840152602002013560248201526044016020604051808303816000875af1158015610d50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d749190611e15565b505b80610d8081611e32565b915050610c66565b506000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906379cc679090604401610ad9565b60006002856fffffffffffffffffffffffffffffffff1681548110610e0d57610e0d611d26565b60009182526020822001546003805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff8816908110610e5957610e59611d26565b60009182526020822001546002805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff8816908110610ea557610ea5611d26565b60009182526020822001546003805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff8916908110610ef157610ef1611d26565b600091825260208220015473ffffffffffffffffffffffffffffffffffffffff169150610f1f898989610677565b905085811015610fb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f437572766556314d6f636b3a20494e53554646494349454e545f4f555450555460448201527f5f414d4f554e540000000000000000000000000000000000000000000000000060648201526084016108c1565b610fd373ffffffffffffffffffffffffffffffffffffffff851633308a6114d6565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526024820189905285169063095ea7b3906044016020604051808303816000875af1158015611048573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061106c9190611e15565b506040517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8616906340c10f1990604401600060405180830381600087803b1580156110db57600080fd5b505af11580156110ef573d6000803e3d6000fd5b50506040517f1e9a69500000000000000000000000000000000000000000000000000000000081523060048201526024810184905273ffffffffffffffffffffffffffffffffffffffff86169250631e9a69509150604401600060405180830381600087803b15801561116157600080fd5b505af1158015611175573d6000803e3d6000fd5b5061119b9250505073ffffffffffffffffffffffffffffffffffffffff83163383611402565b505050505050505050565b6000600382600f0b815481106107fe576107fe611d26565b600f83810b60009081526004602090815260408083209386900b8352929052208190556111f76b033b2e3c9fd0803ce80000008261153a565b600f92830b60009081526004602090815260408083209690950b825294909452919092205550565b6000600382815481106107fe576107fe611d26565b6000600282815481106107fe576107fe611d26565b600f81900b6000908152600660205260408120546b033b2e3c9fd0803ce8000000906112759085611d9d565b6106c09190611dda565b60005b60038110156113a457600082826003811061129f5761129f611d26565b6020020151111561139257600281815481106112bd576112bd611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb338484600381106112f7576112f7611d26565b60200201516040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af115801561136c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113909190611e15565b505b8061139c81611e32565b915050611282565b506000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810184905273ffffffffffffffffffffffffffffffffffffffff909116906379cc679090604401610ad9565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526107e19084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526116a0565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526115349085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611454565b50505050565b60408051808201909152600281527f4d330000000000000000000000000000000000000000000000000000000000006020820152600090826115a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c19190611974565b5060006115b7600284611dda565b90506b033b2e3c9fd0803ce80000006115f0827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611e6b565b6115fa9190611dda565b8411156040518060400160405280600281526020017f4d310000000000000000000000000000000000000000000000000000000000008152509061166b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c19190611974565b5082816116846b033b2e3c9fd0803ce800000087611d9d565b61168e9190611e82565b6116989190611dda565b949350505050565b6000611702826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166117ac9092919063ffffffff16565b8051909150156107e157808060200190518101906117209190611e15565b6107e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016108c1565b60606106bd848460008585843b61181f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108c1565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516118489190611e9a565b60006040518083038185875af1925050503d8060008114611885576040519150601f19603f3d011682016040523d82523d6000602084013e61188a565b606091505b509150915061189a8282866118a5565b979650505050505050565b606083156118b45750816106c0565b8251156118c45782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c19190611974565b60405180606001604052806003906020820280368337509192915050565b8035600f81900b811461192857600080fd5b919050565b60006020828403121561193f57600080fd5b6106c082611916565b60005b8381101561196357818101518382015260200161194b565b838111156115345750506000910152565b6020815260008251806020840152611993816040850160208701611948565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000606084860312156119da57600080fd5b6119e384611916565b92506119f160208501611916565b9150604084013590509250925092565b60608101818360005b6003811015611a29578151835260209283019290910190600101611a0a565b50505092915050565b600080600060608486031215611a4757600080fd5b833592506119f160208501611916565b806060810183101561067157600080fd5b8015158114611a7657600080fd5b50565b60008060808385031215611a8c57600080fd5b611a968484611a57565b91506060830135611aa681611a68565b809150509250929050565b60008060008060808587031215611ac757600080fd5b611ad085611916565b9350611ade60208601611916565b93969395505050506040820135916060013590565b600082601f830112611b0457600080fd5b6040516060810181811067ffffffffffffffff82111715611b4e577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604052806060840185811115611b6357600080fd5b845b81811015611b7d578035835260209283019201611b65565b509195945050505050565b60008060808385031215611b9b57600080fd5b611ba58484611af3565b946060939093013593505050565b600060208284031215611bc557600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461192857600080fd5b600060208284031215611c0257600080fd5b6106c082611bcc565b60008060408385031215611c1e57600080fd5b611c2783611916565b946020939093013593505050565b600080600060e08486031215611c4a57600080fd5b611c548585611a57565b9250611c638560608601611a57565b915060c084013590509250925092565b60008060408385031215611c8657600080fd5b611c2783611bcc565b60008060808385031215611ca257600080fd5b611ba58484611a57565b60008060408385031215611cbf57600080fd5b82359150611ccf60208401611916565b90509250929050565b60008060408385031215611ceb57600080fd5b611cf483611bcc565b9150611ccf60208401611bcc565b60008060808385031215611d1557600080fd5b82359150611ccf8460208501611af3565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215611d6757600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611dd557611dd5611d6e565b500290565b600082611e10577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600060208284031215611e2757600080fd5b81516106c081611a68565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611e6457611e64611d6e565b5060010190565b600082821015611e7d57611e7d611d6e565b500390565b60008219821115611e9557611e95611d6e565b500190565b60008251611eac818460208701611948565b919091019291505056fea2646970667358221220a76213374b33de2cb1c5d61e9c1133f6d8163c7b90c32a6142a6f4fd98fe430364736f6c634300080a003360a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a00336101606040523480156200001257600080fd5b5060405162001852380380620018528339810160408190526200003591620003a3565b6000805460ff191690558585828260c882826001600160a01b0381166200006f57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000ae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d49190620004de565b6001600160a01b0316608052508051620000f6906002906020840190620002ca565b505060a052506001600160a01b0382166200012457604051635919af9760e11b815260040160405180910390fd5b6001600160a01b03821660c0819052670de0b6b3a764000060e05260408051630176f71760e71b815290516000929163bb7b8b809160048083019260209291908290030181865afa1580156200017e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001a4919062000503565b9050620001b1816200022a565b505050506001600160a01b0384161580620001d357506001600160a01b038316155b80620001e657506001600160a01b038216155b156200020557604051635919af9760e11b815260040160405180910390fd5b506001600160a01b039283166101005290821661012052166101405250620005d09050565b8062000249576040516309aadd6f60e41b815260040160405180910390fd5b60018190557f82e7ee47180a631312683eeb2a85ad264c9af490d54de5a75bbdb95b968c6de2816200027b8162000296565b6040805192835260208301919091520160405180910390a150565b60a05160009061271090620002ac908262000533565b620002b890846200054e565b620002c4919062000570565b92915050565b828054620002d89062000593565b90600052602060002090601f016020900481019282620002fc576000855562000347565b82601f106200031757805160ff191683800117855562000347565b8280016001018555821562000347579182015b82811115620003475782518255916020019190600101906200032a565b506200035592915062000359565b5090565b5b808211156200035557600081556001016200035a565b80516001600160a01b03811681146200038857600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60008060008060008060c08789031215620003bd57600080fd5b620003c88762000370565b95506020620003d981890162000370565b9550620003e96040890162000370565b9450620003f96060890162000370565b9350620004096080890162000370565b60a08901519093506001600160401b03808211156200042757600080fd5b818a0191508a601f8301126200043c57600080fd5b8151818111156200045157620004516200038d565b604051601f8201601f19908116603f011681019083821181831017156200047c576200047c6200038d565b816040528281528d868487010111156200049557600080fd5b600093505b82841015620004b957848401860151818501870152928501926200049a565b82841115620004cb5760008684830101525b8096505050505050509295509295509295565b600060208284031215620004f157600080fd5b620004fc8262000370565b9392505050565b6000602082840312156200051657600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156200054957620005496200051d565b500190565b60008160001904831182151516156200056b576200056b6200051d565b500290565b6000826200058e57634e487b7160e01b600052601260045260246000fd5b500490565b600181811c90821680620005a857607f821691505b60208210811415620005ca57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c05160e0516101005161012051610140516111e86200066a6000396000818161023501526108c8015260008181610383015261080901526000818161033901526107620152600081816103120152610a250152600081816101b001526109890152600081816101760152610c170152600081816102eb015281816103db01528181610557015261068f01526111e86000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c80639a6fc8f5116100cd578063b09ad8a011610081578063d62ada1111610066578063d62ada1114610376578063e5693f411461037e578063feaf968c146103a557600080fd5b8063b09ad8a01461035b578063bc489a651461036357600080fd5b8063a50cf2c8116100b2578063a50cf2c8146102e6578063a834559e1461030d578063ab0ca0e11461033457600080fd5b80639a6fc8f514610293578063a384d6ff146102dd57600080fd5b8063427cb6fe116101245780635c975abb116101095780635c975abb1461025f5780637284e416146102765780638456cb591461028b57600080fd5b8063427cb6fe1461023057806354fd4d501461025757600080fd5b8063313ce56711610155578063313ce567146101f75780633f4ba83a146102115780633fd0875f1461021b57600080fd5b806312b495a814610171578063218751b2146101ab575b600080fd5b6101987f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101a2565b6101ff600881565b60405160ff90911681526020016101a2565b6102196103ad565b005b610223600381565b6040516101a29190610dd7565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b610198600181565b60005460ff165b60405190151581526020016101a2565b61027e61049b565b6040516101a29190610e18565b610219610529565b6102a66102a1366004610ea3565b610615565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a0016101a2565b61019860015481565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b6101987f000000000000000000000000000000000000000000000000000000000000000081565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b61019861064f565b610219610371366004610ec7565b610661565b610266600181565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b6102a6610751565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa158015610437573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061045b9190610ee0565b610491576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610499610a67565b565b600280546104a890610f02565b80601f01602080910402602001604051908101604052809291908181526020018280546104d490610f02565b80156105215780601f106104f657610100808354040283529160200191610521565b820191906000526020600020905b81548152906001019060200180831161050457829003601f168201915b505050505081565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa1580156105b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105d79190610ee0565b61060d576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610499610b4d565b60008060008060006040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061065c600154610c0d565b905090565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156106eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070f9190610ee0565b610745576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61074e81610c56565b50565b6000806000806000806000806000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156107cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ef9190610f56565b939d50919b509950975095506108078a8a8989610cd8565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610872573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108969190610f56565b9398509196509450925090506108ae85858484610cd8565b888412156108c6578499508398508297508196508095505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610931573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109559190610f56565b93985091965094509250905061096d85858484610cd8565b88841215610985578499508398508297508196508095505b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb7b8b806040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a169190610fae565b9050610a2181610d73565b90507f0000000000000000000000000000000000000000000000000000000000000000610a4e828c610ff6565b610a5891906110e1565b99505050505050509091929394565b60005460ff16610ad8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff1615610bba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610acf565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b233390565b6000612710610c3c7f000000000000000000000000000000000000000000000000000000000000000082611149565b610c469084611161565b610c50919061119e565b92915050565b80610c8d576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190557f82e7ee47180a631312683eeb2a85ad264c9af490d54de5a75bbdb95b968c6de281610cbd81610c0d565b6040805192835260208301919091520160405180910390a150565b60008313610d12576040517f56e05d2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8369ffffffffffffffffffff168169ffffffffffffffffffff161080610d36575081155b15610d6d576040517fb1cf675500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60015460009080831015610db3576040517fb416da7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610dbe82610c0d565b905080841115610dcf579392505050565b509192915050565b6020810160068310610e12577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b600060208083528351808285015260005b81811015610e4557858101830151858201604001528201610e29565b81811115610e57576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b69ffffffffffffffffffff8116811461074e57600080fd5b600060208284031215610eb557600080fd5b8135610ec081610e8b565b9392505050565b600060208284031215610ed957600080fd5b5035919050565b600060208284031215610ef257600080fd5b81518015158114610ec057600080fd5b600181811c90821680610f1657607f821691505b60208210811415610f50577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600080600080600060a08688031215610f6e57600080fd5b8551610f7981610e8b565b809550506020860151935060408601519250606086015191506080860151610fa081610e8b565b809150509295509295909350565b600060208284031215610fc057600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60008413600084138583048511828216161561103757611037610fc7565b7f8000000000000000000000000000000000000000000000000000000000000000600087128682058812818416161561107257611072610fc7565b6000871292508782058712848416161561108e5761108e610fc7565b878505871281841616156110a4576110a4610fc7565b505050929093029392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826110f0576110f06110b2565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f80000000000000000000000000000000000000000000000000000000000000008314161561114457611144610fc7565b500590565b6000821982111561115c5761115c610fc7565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561119957611199610fc7565b500290565b6000826111ad576111ad6110b2565b50049056fea2646970667358221220226b667ed6fc6db7c8ec1377cc84dae524e2dc572320ead4a7092944a6b912de64736f6c634300080a00336102606040523480156200001257600080fd5b5060405162005f8c38038062005f8c833981016040819052620000359162000ba4565b83838383600384846001600160a01b03821615806200005b57506001600160a01b038116155b156200007a57604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038216608081905260408051632f7a188160e01b81529051632f7a1881916004808201926020929091908290030181865afa158015620000c5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000eb919062000c01565b6001600160a01b0390811660a05290811660c05260016000558416151590506200012857604051635919af9760e11b815260040160405180910390fd5b608051604051630f67c5bd60e41b81526001600160a01b0385811660048301529091169063f67c5bd090602401602060405180830381865afa15801562000173573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000199919062000c26565b620001c757604051634c607af960e11b81526001600160a01b03841660048201526024015b60405180910390fd5b6001600160a01b038084166101e081905261020052821661022052610240819052620001f460006200090a565b6001600160a01b031660e0526200020c60016200090a565b6001600160a01b0316610100526200022560026200090a565b6001600160a01b0316610120526200023e60036200090a565b6001600160a01b031661014052620002576000620009fd565b6001600160a01b031661016052620002706001620009fd565b6001600160a01b031661018052620002896002620009fd565b6001600160a01b03166101a052620002a26003620009fd565b6001600160a01b039081166101c05260e051161580620002cc5750610100516001600160a01b0316155b15620002eb57604051635919af9760e11b815260040160405180910390fd5b600281118015620003065750610120516001600160a01b0316155b156200032557604051635919af9760e11b815260040160405180910390fd5b600381118015620003405750610140516001600160a01b0316155b156200035f57604051635919af9760e11b815260040160405180910390fd5b60805160e051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620003ac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003d2919062000c26565b620004005760e051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b60805161010051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa1580156200044e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000474919062000c26565b620004a35761010051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b60028111801562000525575060805161012051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620004fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000523919062000c26565b155b15620005555761012051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b600381118015620005d7575060805161014051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620005af573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005d5919062000c26565b155b15620006075761014051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b610160516001600160a01b03161580159062000694575060805161016051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa1580156200066c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000692919062000c26565b155b15620006c45761016051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b610180516001600160a01b03161580159062000751575060805161018051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa15801562000729573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200074f919062000c26565b155b15620007815761018051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b6101a0516001600160a01b0316158015906200080e57506080516101a051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620007e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200080c919062000c26565b155b156200083e576101a051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b6101c0516001600160a01b031615801590620008cb57506080516101c051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620008a3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008c9919062000c26565b155b15620008fb576101c051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b50505050505050505062000c66565b60c05160405163c661065760e01b8152600481018390526000916001600160a01b03169063c661065790602401602060405180830381865afa92505050801562000973575060408051601f3d908101601f19168201909252620009709181019062000c01565b60015b6200097e5762000984565b92915050565b60c05160405163046e8dd760e31b8152600f84900b60048201526001600160a01b03909116906323746eb8906024015b602060405180830381865afa925050508015620009f0575060408051601f3d908101601f19168201909252620009ed9181019062000c01565b60015b6200097e57506000919050565b610220516000906001600160a01b03161562000a1e576200097e8262000ac0565b60c051604051630b9947eb60e41b8152600481018490526001600160a01b039091169063b9947eb090602401602060405180830381865afa92505050801562000a86575060408051601f3d908101601f1916820190925262000a839181019062000c01565b60015b6200097e5760c051604051635b9cca9f60e11b8152600f84900b60048201526001600160a01b039091169063b739953e90602401620009b4565b60008162000ad4576200097e600062000b17565b610220516001600160a01b031663c661065762000af360018562000c40565b6040518263ffffffff1660e01b8152600401620009b491815260200190565b919050565b600081600f0b6000141562000b2b575060e0515b81600f0b6001141562000b3e5750610100515b81600f0b6002141562000b515750610120515b81600f0b6003141562000b645750610140515b6001600160a01b03811662000b12576040516334769e6f60e21b815260040160405180910390fd5b80516001600160a01b038116811462000b1257600080fd5b6000806000806080858703121562000bbb57600080fd5b62000bc68562000b8c565b935062000bd66020860162000b8c565b925062000be66040860162000b8c565b915062000bf66060860162000b8c565b905092959194509250565b60006020828403121562000c1457600080fd5b62000c1f8262000b8c565b9392505050565b60006020828403121562000c3957600080fd5b5051919050565b60008282101562000c6157634e487b7160e01b600052601160045260246000fd5b500390565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e051610200516102205161024051614fa962000fe36000396000818161078301528181613708015281816138bf015281816139d901528181613e0f0152613f01015260006105de01526000818161067501528181611f680152818161239f0152818161278901528181612e6b01528181612f0901526131ed015260006108ad01526000818161059c015261288b0152600081816103d4015261285c015260008181610605015261282d0152600081816106af01526127fe015260008181610876015281816126630152818161363501528181613f6b01526146640152600081816104d7015281816126340152818161356501528181613e7901526145480152600081816107f3015281816126050152818161349501528181613d85015261442c015260008181610448015281816125d6015281816133c501528181613cb901526143100152600081816107350152818161091a015281816109e701528181610a7701528181610b6f01528181610bfe01528181610c9501528181610d2601528181611139015281816111b1015281816112ee0152818161144101528181611578015281816115c00152818161166d015281816116b5015281816117660152818161179b01528181611ac501528181611b4301528181611ccd01528181611d4501528181611dea01528181611fb20152818161206b015281816120a00152818161213b0152818161245e015281816124cb0152818161255c01528181612aa901528181612bc801528181612ca2015281816142e801528181614404015281816145200152818161463c01526147840152600081816104fe0152818161291401528181614055015261482b01526000818161075c01528181610ec9015281816118a601528181611ef4015281816122450152818161270101528181612aff01528181612b9901528181612cf801528181612da0015281816130630152818161311a01528181613215015281816132f8015281816133ed015281816134bd0152818161358d0152818161365d01528181613bf401528181613ce401528181613dad01528181613ea101528181613f93015281816140dd015281816141910152818161423b0152818161435e0152818161447a01528181614596015281816146b20152818161475501526148950152614fa96000f3fe608060405234801561001057600080fd5b50600436106103a45760003560e01c806379bea664116101e9578063cc2b27d71161010f578063e2e7d264116100ad578063f446c1d01161007c578063f446c1d014610898578063f851a440146108a0578063fc0c546a146108a8578063fee3f7f9146108cf57600080fd5b8063e2e7d26414610838578063ec026ca71461084b578063ecb586a51461085e578063ef14101e1461087157600080fd5b8063d21220a7116100e9578063d21220a7146107ee578063d96c7fce14610815578063dd62ed3e1461081d578063ddca3f431461083057600080fd5b8063cc2b27d7146107b3578063ce30bbdb146107c6578063cf023dd0146107db57600080fd5b8063b4b577ad11610187578063bd90df7011610156578063bd90df7014610730578063c12c21c014610757578063c21ee1621461077e578063c6610657146107a557600080fd5b8063b4b577ad146106ff578063b739953e14610707578063b9947eb01461071a578063bb7b8b801461072857600080fd5b80638ba51dfc116101c35780638ba51dfc146106aa57806395d89b41146106d15780639fdaea0c146106d9578063a6417ed6146106ec57600080fd5b806379bea6641461065d57806382c630661461067057806385ca3c6f1461069757600080fd5b806333d2ebf2116102ce57806357d788751161026c5780636e1d82711161023b5780636e1d82711461060057806370a082311461062757806376a2f0f01461063a57806378aa73a41461064257600080fd5b806357d78875146105975780635e0d443f146105be57806363543f06146105d157806364a89bca146105d957600080fd5b80634469e30e116102a85780634469e30e146105615780634515cef3146105695780634903b0d11461057c5780635409491a1461058f57600080fd5b806333d2ebf2146105285780633883e1191461053b5780633df021241461054e57600080fd5b806318160ddd1161034657806323746eb81161031557806323746eb8146104bf57806325be124e146104d25780632f7a1881146104f9578063313ce5671461052057600080fd5b806318160ddd146104875780631a4d01d21461048f5780631af4de83146104a45780632081066c146104b757600080fd5b806307211ef71161038257806307211ef7146104305780630dfe168114610443578063140522881461046a57806314f059791461047257600080fd5b8063065a80d8146103a957806306871163146103cf57806306fdde031461041b575b600080fd5b6103bc6103b736600461491d565b6108d7565b6040519081526020015b60405180910390f35b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016103c6565b610423610a73565b6040516103c691906149ae565b6103bc61043e3660046149c1565b610b2b565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc610bfa565b61047a610c8b565b6040516103c691906149fd565b6103bc610d22565b6104a261049d366004614a2e565b610d8f565b005b6104a26104b23660046149c1565b610e27565b6103bc611135565b6103f66104cd36600461491d565b6111a2565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc6111ad565b6104a2610536366004614a53565b61121a565b6103bc610549366004614a8e565b6112ae565b6104a261055c366004614acb565b611366565b61047a611437565b6104a2610577366004614b0d565b6114aa565b6103bc61058a366004614b38565b611546565b6103bc6115bc565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc6105cc3660046149c1565b611629565b6103bc6116b1565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc610635366004614b73565b61171e565b6103bc611797565b61064a600281565b60405161ffff90911681526020016103c6565b6104a261066b3660046149c1565b611804565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b61047a6106a5366004614b90565b611a80565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b610423611b3f565b6104a26106e7366004614b0d565b611bac565b6104a26106fa366004614acb565b611c3f565b6103bc611cc9565b6103f661071536600461491d565b611d36565b6103f6610715366004614b38565b6103bc611d41565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc7f000000000000000000000000000000000000000000000000000000000000000081565b6103f66104cd366004614b38565b6103bc6107c1366004614bce565b611dae565b6107ce600681565b6040516103c69190614bfa565b6104a26107e9366004614a2e565b611e2e565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b61047a611fa8565b6103bc61082b366004614c3b565b61201b565b6103bc61209c565b6103bc610846366004614b38565b612109565b6104a2610859366004614a53565b61217f565b6104a261086c366004614c69565b6123e0565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc61245a565b6103f66124c7565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc612558565b6040517f4903b0d10000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff821660048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634903b0d1906024015b602060405180830381865afa9250505080156109b1575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526109ae91810190614c8d565b60015b610a68576040517f065a80d8000000000000000000000000000000000000000000000000000000008152600f83900b60048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063065a80d8906024015b602060405180830381865afa158015610a44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a689190614c8d565b92915050565b919050565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015610ae0573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b269190810190614d67565b905090565b6040517f07211ef7000000000000000000000000000000000000000000000000000000008152600f84810b600483015283900b6024820152604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906307211ef7906064015b602060405180830381865afa158015610bcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf09190614c8d565b90505b9392505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663140522886040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b269190614c8d565b610c936148ed565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166314f059796040518163ffffffff1660e01b8152600401606060405180830381865afa158015610cfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b269190614db8565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b60026000541415610e01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b60026000908155610e11836125c5565b9050610e1c816126d0565b505060016000555050565b60026000541415610e94576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610f25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f499190614e36565b90506000610f56856127ed565b90506000610f63856127ed565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529192506000918416906370a0823190602401602060405180830381865afa158015610fd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff99190614c8d565b90506001811115611127577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce800000061103f8784614e53565b6110499190614eb7565b604051600f8a810b602483015289900b60448201526064810184905260848101829052909150611124908690869086907fa6417ed6000000000000000000000000000000000000000000000000000000009060a4015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526001806128f7565b50505b505060016000555050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632081066c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6000610a68826125c5565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b60026000541415611287576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b60026000908155611297836125c5565b90506112a4838284612d6f565b5050600160005550565b6040517f3883e11900000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690633883e119906113259086908690600401614ef2565b602060405180830381865afa158015611342573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf39190614c8d565b600260005414156113d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b600260009081556113e3856125c5565b905060006113f0856125c5565b905061112782826000368080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525060019350915061301a9050565b61143f6148ed565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16634469e30e6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610cfe573d6000803e3d6000fd5b60026000541415611517576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b6002600090815561153d90600184358110916020860135821091604087013511906130e9565b50506001600055565b6040517f4903b0d1000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634903b0d19060240161095a565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635409491a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6040517f5e0d443f000000000000000000000000000000000000000000000000000000008152600f84810b600483015283900b6024820152604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635e0d443f90606401610baf565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166363543f066040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401610a27565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166376a2f0f06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b60026000541415611871576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611902573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119269190614e36565b90506000611933856125c5565b90506000611940856125c5565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529192506000918416906370a0823190602401602060405180830381865afa1580156119b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d69190614c8d565b90506001811115611127577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce8000000611a1c8784614e53565b611a269190614eb7565b604051600f8a810b602483015289900b60448201526064810184905260848101829052909150611124908690869086907f3df02124000000000000000000000000000000000000000000000000000000009060a40161109f565b611a886148ed565b6040517f85ca3c6f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906385ca3c6f90611afe90879087908790600401614f0a565b606060405180830381865afa158015611b1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf09190614db8565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610ae0573d6000803e3d6000fd5b60026000541415611c19576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b6002600090815561153d90600184358110916020860135821091604087013511906132c7565b60026000541415611cac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b60026000908155611cbc856127ed565b905060006113f0856127ed565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b4b577ad6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6000610a68826127ed565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb7b8b806040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6040517fcc2b27d700000000000000000000000000000000000000000000000000000000815260048101839052600f82900b60248201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063cc2b27d790604401611325565b60026000541415611e9b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b60026000908155611eab836125c5565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611f3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f5f9190614e36565b9050611f9b81837f0000000000000000000000000000000000000000000000000000000000000000611f92888a89613704565b600160006128f7565b5050600160005550505050565b611fb06148ed565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d96c7fce6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610cfe573d6000803e3d6000fd5b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063dd62ed3e90604401611325565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6040517fe2e7d264000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e2e7d26490602401610a27565b600260005414156121ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b600260009081556121fc836125c5565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa15801561228c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b09190614e36565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000918416906370a0823190602401602060405180830381865afa158015612322573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123469190614c8d565b905060018111156123d4577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce800000061238c8684614e53565b6123969190614eb7565b90506123d183857f00000000000000000000000000000000000000000000000000000000000000006123c98a8787613704565b6001806128f7565b50505b50506001600055505050565b6002600054141561244d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b600260005561153d613bc3565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f446c1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa158015612534573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b269190614e36565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fee3f7f96040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b600081600f0b600014156125f657507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6001141561262557507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6002141561265457507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6003141561268357507f00000000000000000000000000000000000000000000000000000000000000005b73ffffffffffffffffffffffffffffffffffffffff8116610a6e576040517fd1da79bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa15801561275d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127819190614e36565b90506127e8817f0000000000000000000000000000000000000000000000000000000000000000846000368080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525092508291506128f79050565b505050565b600081600f0b6000141561281e57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6001141561284d57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6002141561287c57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6003141561268357507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff8116610a6e576040517fd1da79bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606000803373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614612a60576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301528916906370a0823190602401602060405180830381865afa1580156129a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129c99190614c8d565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152919350908816906370a0823190602401602060405180830381865afa158015612a39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a5d9190614c8d565b90505b8415612b5c576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612b4357600080fd5b505af1158015612b57573d6000803e3d6000fd5b505050505b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a90612bf29033907f0000000000000000000000000000000000000000000000000000000000000000908b90600401614f31565b6000604051808303816000875af1158015612c11573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052612c579190810190614d67565b92508415612d55576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612d3c57600080fd5b505af1158015612d50573d6000803e3d6000fd5b505050505b612d6389898985858961403d565b50509695505050505050565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612dfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e209190614e36565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000917f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015612eb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ed69190614c8d565b90506001811115613013577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01613011827f0000000000000000000000000000000000000000000000000000000000000000867f1a4d01d200000000000000000000000000000000000000000000000000000000858a6b033b2e3c9fd0803ce8000000612f638b84614e53565b612f6d9190614eb7565b6040516024810193909352600f9190910b60448301526064820152608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152600060016128f7565b505b5050505050565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015260609060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa1580156130aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130ce9190614e36565b90506130de8188888888886128f7565b979650505050505050565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015613176573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061319a9190614e36565b90506131a88585858561429f565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561325957600080fd5b505af115801561326d573d6000803e3d6000fd5b505050506132b16000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061471592505050565b506132be8585858561429f565b61301381614813565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015613354573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133789190614e36565b9050841561344a576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561343157600080fd5b505af1158015613445573d6000803e3d6000fd5b505050505b831561351a576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561350157600080fd5b505af1158015613515573d6000803e3d6000fd5b505050505b82156135ea576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156135d157600080fd5b505af11580156135e5573d6000803e3d6000fd5b505050505b81156136ba576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156136a157600080fd5b505af11580156136b5573d6000803e3d6000fd5b505050505b6136fa6000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061471592505050565b5061301381614813565b60607f0000000000000000000000000000000000000000000000000000000000000000600214156138bd5783600f0b6000146137fa576040516000602482015260448101849052606481018390527f0b4c7e4d00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526138b6565b6040516024810184905260006044820152606481018390527f0b4c7e4d00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091525b9050610bf3565b7f0000000000000000000000000000000000000000000000000000000000000000600314156139d75783600f0b60001461398e5783600f0b60011461394557604051600060248201819052604482015260648101849052608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401613778565b604051600060248201819052604482018590526064820152608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401613778565b604051602481018490526000604482018190526064820152608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401613838565b7f000000000000000000000000000000000000000000000000000000000000000060041415613b615783600f0b600014613b115783600f0b600114613ac15783600f0b600214613a71576040516000602482018190526044820181905260648201526084810184905260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613778565b6040516000602482018190526044820181905260648201859052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613778565b6040516000602482018190526044820185905260648201819052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613778565b6040516024810184905260006044820181905260648201819052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613838565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f496e636f7272656374206e436f696e73000000000000000000000000000000006044820152606401610df8565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015613c50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c749190614e36565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301529192507f0000000000000000000000000000000000000000000000000000000000000000909116906351e3f16090604401600060405180830381600087803b158015613d2a57600080fd5b505af1158015613d3e573d6000803e3d6000fd5b50506040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f00000000000000000000000000000000000000000000000000000000000000001692506351e3f1609150604401600060405180830381600087803b158015613df357600080fd5b505af1158015613e07573d6000803e3d6000fd5b5050505060027f00000000000000000000000000000000000000000000000000000000000000001115613ff0576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015613ee557600080fd5b505af1158015613ef9573d6000803e3d6000fd5b5050505060037f00000000000000000000000000000000000000000000000000000000000000001115613ff0576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015613fd757600080fd5b505af1158015613feb573d6000803e3d6000fd5b505050505b6140306000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061471592505050565b5061403a81614813565b50565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461413e576040517f654a9eda00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528681166024830152858116604483015260648201859052608482018490527f0000000000000000000000000000000000000000000000000000000000000000169063654a9eda9060a401600060405180830381600087803b15801561412157600080fd5b505af1158015614135573d6000803e3d6000fd5b50505050613011565b80156141ee576040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015286811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b1580156141d557600080fd5b505af11580156141e9573d6000803e3d6000fd5b505050505b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015285811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561427f57600080fd5b505af1158015614293573d6000803e3d6000fd5b50505050505050505050565b83156143bb576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156143a257600080fd5b505af11580156143b6573d6000803e3d6000fd5b505050505b82156144d7576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156144be57600080fd5b505af11580156144d2573d6000803e3d6000fd5b505050505b81156145f3576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156145da57600080fd5b505af11580156145ee573d6000803e3d6000fd5b505050505b801561470f576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156146f657600080fd5b505af115801561470a573d6000803e3d6000fd5b505050505b50505050565b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815260609073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a906147ae9033907f0000000000000000000000000000000000000000000000000000000000000000908790600401614f31565b6000604051808303816000875af11580156147cd573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610a689190810190614d67565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461403a576040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b1580156148d957600080fd5b505af1158015613013573d6000803e3d6000fd5b60405180606001604052806003906020820280368337509192915050565b8035600f81900b8114610a6e57600080fd5b60006020828403121561492f57600080fd5b610bf38261490b565b60005b8381101561495357818101518382015260200161493b565b8381111561470f5750506000910152565b6000815180845261497c816020860160208601614938565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610bf36020830184614964565b6000806000606084860312156149d657600080fd5b6149df8461490b565b92506149ed6020850161490b565b9150604084013590509250925092565b60608101818360005b6003811015614a25578151835260209283019290910190600101614a06565b50505092915050565b600080600060608486031215614a4357600080fd5b833592506149ed6020850161490b565b60008060408385031215614a6657600080fd5b614a6f8361490b565b946020939093013593505050565b8060608101831015610a6857600080fd5b60008060808385031215614aa157600080fd5b614aab8484614a7d565b915060608301358015158114614ac057600080fd5b809150509250929050565b60008060008060808587031215614ae157600080fd5b614aea8561490b565b9350614af86020860161490b565b93969395505050506040820135916060013590565b60008060808385031215614b2057600080fd5b614b2a8484614a7d565b946060939093013593505050565b600060208284031215614b4a57600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461403a57600080fd5b600060208284031215614b8557600080fd5b8135610bf381614b51565b600080600060e08486031215614ba557600080fd5b614baf8585614a7d565b9250614bbe8560608601614a7d565b915060c084013590509250925092565b60008060408385031215614be157600080fd5b82359150614bf16020840161490b565b90509250929050565b6020810160118310614c35577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60008060408385031215614c4e57600080fd5b8235614c5981614b51565b91506020830135614ac081614b51565b60008060808385031215614c7c57600080fd5b82359150614bf18460208501614a7d565b600060208284031215614c9f57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff80841115614cf057614cf0614ca6565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715614d3657614d36614ca6565b81604052809350858152868686011115614d4f57600080fd5b614d5d866020830187614938565b5050509392505050565b600060208284031215614d7957600080fd5b815167ffffffffffffffff811115614d9057600080fd5b8201601f81018413614da157600080fd5b614db084825160208401614cd5565b949350505050565b600060608284031215614dca57600080fd5b82601f830112614dd957600080fd5b6040516060810181811067ffffffffffffffff82111715614dfc57614dfc614ca6565b604052806060840185811115614e1157600080fd5b845b81811015614e2b578051835260209283019201614e13565b509195945050505050565b600060208284031215614e4857600080fd5b8151610bf381614b51565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614eb2577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500290565b600082614eed577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60808101606084833791151560609190910152919050565b60e081016060858337606082016000815260608582375060c0919091019190915292915050565b600073ffffffffffffffffffffffffffffffffffffffff808616835280851660208401525060606040830152614f6a6060830184614964565b9594505050505056fea2646970667358221220efb951725986e76ee157ff0d00cd7b7a6a9b8a581784400c52be5c96516fe15064736f6c634300080a0033608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6118158061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c80638da5cb5b11610076578063d7aa2e351161005b578063d7aa2e35146101b3578063d914cd4b146101f2578063f2fde38b1461020557600080fd5b80638da5cb5b1461015d578063c488f7fe1461018557600080fd5b80634dee073b116100a75780634dee073b146101015780636f33547d14610142578063715018a61461015557600080fd5b80631bf64c41146100c357806345330666146100ec575b600080fd5b6100d66100d1366004611345565b610218565b6040516100e3919061142e565b60405180910390f35b6100ff6100fa366004611500565b6103fa565b005b61012f61010f366004611551565b6001602090815260009283526040808420909152908252902054600f0b81565b604051600f9190910b81526020016100e3565b6100d6610150366004611345565b6104d7565b6100ff610514565b60005460405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100e3565b61012f610193366004611551565b6002602090815260009283526040808420909152908252902054600f0b81565b6101e46101c136600461158a565b600360209081526000938452604080852082529284528284209052825290205481565b6040519081526020016100e3565b6100ff6102003660046115d5565b6105a1565b6100ff6102133660046115d5565b61089e565b6102556040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b61025e836109ce565b156103f45760008273ffffffffffffffffffffffffffffffffffffffff1663bd90df706040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102d491906115f2565b905060008060008060006102e88987610a67565b9450945094509450945082156103ed5760405180608001604052806103118b8b858a8a89610d8b565b8152602001828152602001600115158152602001600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008c6040015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008c6060015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481525096505b5050505050505b92915050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610480576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff93841660009081526003602090815260408083209587168084528683528184209590971683529381528382208390559384528281209481529390925290912055565b6103f46040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b60005473ffffffffffffffffffffffffffffffffffffffff163314610595576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610477565b61059f6000611045565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610622576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610477565b60005b6004600f82900b121561075d576040517f23746eb8000000000000000000000000000000000000000000000000000000008152600f82900b600482015273ffffffffffffffffffffffffffffffffffffffff8316906323746eb890602401602060405180830381865afa9250505080156106da575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526106d7918101906115f2565b60015b6106e35761075d565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160208181526040808420959094168352939093522080547fffffffffffffffffffffffffffffffff0000000000000000000000000000000016929091016fffffffffffffffffffffffffffffffff8116929092179055610625565b5060005b6004600f82900b121561089a576040517fb739953e000000000000000000000000000000000000000000000000000000008152600f82900b600482015273ffffffffffffffffffffffffffffffffffffffff83169063b739953e90602401602060405180830381865afa925050508015610816575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610813918101906115f2565b60015b61081e575050565b73ffffffffffffffffffffffffffffffffffffffff808416600090815260026020908152604080832094909316825292909252902080546fffffffffffffffffffffffffffffffff60018401167fffffffffffffffffffffffffffffffff00000000000000000000000000000000909116179055600101610761565b5050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461091f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610477565b73ffffffffffffffffffffffffffffffffffffffff81166109c2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610477565b6109cb81611045565b50565b600080825160028111156109e4576109e461160f565b1480610a025750600182516002811115610a0057610a0061160f565b145b15610a0f57506001919050565b600282516002811115610a2457610a2461160f565b1415610a3257506000919050565b81516040517ffe7995cf000000000000000000000000000000000000000000000000000000008152610477919060040161163e565b73ffffffffffffffffffffffffffffffffffffffff80821660009081526001602081815260408084208782015190951684529390529181205490918291829182918291610ab691600f0b6116ae565b73ffffffffffffffffffffffffffffffffffffffff808816600090815260016020818152604080842060608e0151909516845293905291902054919650610aff91600f0b6116ae565b9350600085600f0b12158015610b195750600084600f0b12155b15610bf85760a08701516040517f5e0d443f000000000000000000000000000000000000000000000000000000008152600f87810b600483015286900b6024820152604481019190915273ffffffffffffffffffffffffffffffffffffffff871690635e0d443f90606401602060405180830381865afa925050508015610bdb575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610bd89181019061171f565b60015b610be457610d81565b8015610bf257600193508091505b50610d81565b73ffffffffffffffffffffffffffffffffffffffff80871660009081526002602090815260408083208b82015190941683529290522054610c3e90600190600f0b6116ae565b73ffffffffffffffffffffffffffffffffffffffff808816600090815260026020908152604080832060608d015190941683529290522054909550610c8890600190600f0b6116ae565b9350600085600f0b12158015610ca25750600084600f0b12155b15610d815760a08701516040517f07211ef7000000000000000000000000000000000000000000000000000000008152600f87810b600483015286900b6024820152604481019190915273ffffffffffffffffffffffffffffffffffffffff8716906307211ef790606401602060405180830381865afa925050508015610d64575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610d619181019061171f565b60015b610d6d57610d81565b8015610d7f5760019350809150600192505b505b9295509295909350565b6040805180820190915260008152606060208201526060600188516002811115610db757610db761160f565b1415610eb75782610de8577f79bea66400000000000000000000000000000000000000000000000000000000610e0a565b7f1af4de83000000000000000000000000000000000000000000000000000000005b8585610e168b8a6110ba565b604051600f93840b60248201529190920b60448201526064810191909152608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505b600088516002811115610ecc57610ecc61160f565b1415610fcc5782610efd577f3df0212400000000000000000000000000000000000000000000000000000000610f1f565b7fa6417ed6000000000000000000000000000000000000000000000000000000005b8585610f2b8b8a6110f2565b604051600f93840b60248201529190920b60448201526064810191909152608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505b8051156110065760405180604001604052808873ffffffffffffffffffffffffffffffffffffffff1681526020018281525091505061103b565b87516040517ffe7995cf000000000000000000000000000000000000000000000000000000008152610477919060040161163e565b9695505050505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60a08201516000906110e1846110dc856b033b2e3c9fd0803ce8000000611738565b6110f2565b6110eb9190611775565b9392505050565b60008260e0015115611106575060006103f4565b60008351600281111561111b5761111b61160f565b148061113957506001835160028111156111375761113761160f565b145b1561116c5760c08301516127109061115190826117b0565b61115b9084611738565b6111659190611775565b90506103f4565b6002835160028111156111815761118161160f565b14156111a45760c0830151611198906127106117c7565b61115b61271084611738565b82516040517ffe7995cf000000000000000000000000000000000000000000000000000000008152610477919060040161163e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610100810167ffffffffffffffff8111828210171561122c5761122c6111d9565b60405290565b80356003811061124157600080fd5b919050565b73ffffffffffffffffffffffffffffffffffffffff811681146109cb57600080fd5b803561124181611246565b600082601f83011261128457600080fd5b8135602067ffffffffffffffff808311156112a1576112a16111d9565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f830116810181811084821117156112e4576112e46111d9565b60405293845285810183019383810192508785111561130257600080fd5b83870191505b8482101561132a57813561131b81611246565b83529183019190830190611308565b979650505050505050565b8035801515811461124157600080fd5b6000806040838503121561135857600080fd5b823567ffffffffffffffff8082111561137057600080fd5b90840190610100828703121561138557600080fd5b61138d611208565b61139683611232565b81526113a460208401611268565b60208201526113b560408401611268565b60408201526113c660608401611268565b60608201526080830135828111156113dd57600080fd5b6113e988828601611273565b60808301525060a083013560a082015260c083013560c082015261140f60e08401611335565b60e0820152935061142591505060208401611268565b90509250929050565b60006020808352835160808285015273ffffffffffffffffffffffffffffffffffffffff81511660a0850152818101519050604060c085015280518060e086015260005b8181101561148f5782810184015186820161010001528301611472565b818111156114a257600061010083880101525b50828601516040860152604086015192506114c1606086018415159052565b606095909501516080850152505050601f919091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016016101000190565b6000806000806080858703121561151657600080fd5b843561152181611246565b9350602085013561153181611246565b9250604085013561154181611246565b9396929550929360600135925050565b6000806040838503121561156457600080fd5b823561156f81611246565b9150602083013561157f81611246565b809150509250929050565b60008060006060848603121561159f57600080fd5b83356115aa81611246565b925060208401356115ba81611246565b915060408401356115ca81611246565b809150509250925092565b6000602082840312156115e757600080fd5b81356110eb81611246565b60006020828403121561160457600080fd5b81516110eb81611246565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160038310611679577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600081600f0b83600f0b60008112817fffffffffffffffffffffffffffffffff80000000000000000000000000000000018312811516156116f1576116f161167f565b816f7fffffffffffffffffffffffffffffff0183138116156117155761171561167f565b5090039392505050565b60006020828403121561173157600080fd5b5051919050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156117705761177061167f565b500290565b6000826117ab577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000828210156117c2576117c261167f565b500390565b600082198211156117da576117da61167f565b50019056fea2646970667358221220ed82995f9e9761ea7972d39ed0d8d0b378778cbba995315b16c90b49c74d2b7e64736f6c634300080a003360806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d00011790553480156200003a57600080fd5b506040805161018081019091526000908060c081018060018152604080518082018252600381526244414960e81b6020828101919091528301526012908201526305f5e100606082015260800160018152602001600081525081526020016040518060c001604052806002600a811115620000b957620000b962000b78565b815260408051808201825260048152635553444360e01b6020828101919091528301526006908201526305f5e100606082015260800160018152602001600081525081526020016040518060c001604052806003600a81111562000121576200012162000b78565b815260408051808201825260048152630ae8aa8960e31b602082810191909152830152601290820152644a817c8000606082015260800160028152602001600081525081526020016040518060c001604052806004600a8111156200018a576200018a62000b78565b815260408051808201825260048152634c494e4b60e01b6020828101919091528301526012908201526359682f00606082015260800160018152602001600081525081526020016040518060c001604052806005600a811115620001f257620001f262000b78565b815260408051808201825260048152631554d11560e21b602082810191909152830152601290820152633b023380606082015260800160018152602001600081525081526020016040518060c001604052806006600a8111156200025a576200025a62000b78565b815260408051808201825260058152640e6e88aa8960db1b602082810191909152830152601290820152644cd588640060608201526080016003815260200160009052905260408051610140810190915290915060009080608081018060078152602001604051806040016040528060048152602001636344414960e01b8152508152602001601260ff1681526020016305f5e100815260200160048081111562000309576200030962000b78565b8152602001600181525081526020016040518060c001604052806008600a81111562000339576200033962000b78565b81526040805180820182526005815264635553444360d81b6020828101919091528301526006908201526305f5e100606082015260800160048152602001600281525081526020016040518060c001604052806009600a811115620003a257620003a262000b78565b8152604080518082018252600581526418d554d11560da1b602082810191909152830152601290820152633b023380606082015260800160048152602001600581525081526020016040518060c00160405280600a808111156200040a576200040a62000b78565b81526040805180820182526005815264634c494e4b60d81b6020828101919091528301526012908201526359682f00606082015260800160048152602001600490529052905060005b600681101562000496576200048183826006811062000476576200047662000b8e565b6020020151620004db565b806200048d8162000ba4565b91505062000453565b5060005b6004811015620004d257620004bd82826004811062000476576200047662000b8e565b80620004c98162000ba4565b9150506200049a565b50505062000d14565b6000600282608001516004811115620004f857620004f862000b78565b14156200054e576040516200050d9062000a8c565b604051809103906000f0801580156200052a573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b03831617905590506200071e565b60038260800151600481111562000569576200056962000b78565b1415620005a4576040516200057e9062000a9a565b604051809103906000f0801580156200059b573d6000803e3d6000fd5b5090506200071e565b600182608001516004811115620005bf57620005bf62000b78565b1415620005f157816020015182602001518360400151604051620005e39062000aa8565b6200057e9392919062000c1e565b6004826080015160048111156200060c576200060c62000b78565b1415620006be576000600260008460a00151600a81111562000632576200063262000b78565b600a81111562000646576200064662000b78565b815260200190815260200160002060009054906101000a90046001600160a01b0316905082602001518360200151846040015183604051620006889062000ab6565b62000697949392919062000c5b565b604051809103906000f080158015620006b4573d6000803e3d6000fd5b509150506200071e565b60405162461bcd60e51b815260206004820152602b60248201527f74657374546f6b656e53756974653a204372656174696e6720756e6b6e6f776e60448201526a20746f6b656e207479706560a81b606482015260840160405180910390fd5b60005460208301516040516318caf8e360e31b8152620100009092046001600160a01b03169163c657c718916200075b9185919060040162000ca9565b600060405180830381600087803b1580156200077657600080fd5b505af11580156200078b573d6000803e3d6000fd5b50505050600082606001516008604051620007a69062000ac4565b91825260ff166020820152604001604051809103906000f080158015620007d1573d6000803e3d6000fd5b50905081600260008560000151600a811115620007f257620007f262000b78565b600a81111562000806576200080662000b78565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055508260600151600560008560000151600a8111156200085a576200085a62000b78565b600a8111156200086e576200086e62000b78565b8152602080820192909252604090810160009081209390935585516001600160a01b03861684526008909252909120805460ff1916600183600a811115620008ba57620008ba62000b78565b02179055508260800151600360008560000151600a811115620008e157620008e162000b78565b600a811115620008f557620008f562000b78565b81526020810191909152604001600020805460ff1916600183600481111562000922576200092262000b78565b0217905550604080518082019091526001600160a01b0380841682528281166020808401918252600780546001810182556000918252945160029095027fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688810180549686166001600160a01b031997881617905592517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c689909301805493909416929094169190911790915584015184519091600491600a811115620009eb57620009eb62000b78565b600a811115620009ff57620009ff62000b78565b8152602001908152602001600020908051906020019062000a2292919062000ad2565b5080600660008560000151600a81111562000a415762000a4162000b78565b600a81111562000a555762000a5562000b78565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550505050565b610ab1806200285183390190565b611224806200330283390190565b611758806200452683390190565b6117098062005c7e83390190565b6106ca806200738783390190565b82805462000ae09062000cd7565b90600052602060002090601f01602090048101928262000b04576000855562000b4f565b82601f1062000b1f57805160ff191683800117855562000b4f565b8280016001018555821562000b4f579182015b8281111562000b4f57825182559160200191906001019062000b32565b5062000b5d92915062000b61565b5090565b5b8082111562000b5d576000815560010162000b62565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600060001982141562000bc757634e487b7160e01b600052601160045260246000fd5b5060010190565b6000815180845260005b8181101562000bf65760208185018101518683018201520162000bd8565b8181111562000c09576000602083870101525b50601f01601f19169290920160200192915050565b60608152600062000c33606083018662000bce565b828103602084015262000c47818662000bce565b91505060ff83166040830152949350505050565b60808152600062000c70608083018762000bce565b828103602084015262000c84818762000bce565b60ff95909516604084015250506001600160a01b039190911660609091015292915050565b6001600160a01b038316815260406020820181905260009062000ccf9083018462000bce565b949350505050565b600181811c9082168062000cec57607f821691505b6020821081141562000d0e57634e487b7160e01b600052602260045260246000fd5b50919050565b611b2d8062000d246000396000f3fe6080604052600436106101635760003560e01c80638eb86e8b116100c0578063c6c3bbe611610074578063d051a62211610059578063d051a62214610490578063eebab8ef146104b0578063fa7626d4146104d057600080fd5b8063c6c3bbe614610433578063c74912d21461045357600080fd5b80639b140a85116100a55780639b140a85146103e6578063b36ba20814610406578063ba414fa61461040e57600080fd5b80638eb86e8b1461038357806398cdaadf146103a357600080fd5b80636a72bde71161011757806388327863116100fc578063883278631461030857806388f776a2146103365780638a3177a31461035657600080fd5b80636a72bde7146102c45780636ca42ae3146102e657600080fd5b8063440864fa11610148578063440864fa146102025780634b57b0be1461022f57806367b426451461028157600080fd5b806304bc3b1c1461016f57806310c7f0b9146101b557600080fd5b3661016a57005b600080fd5b34801561017b57600080fd5b5061019f61018a3660046116f6565b60086020526000908152604090205460ff1681565b6040516101ac9190611742565b60405180910390f35b3480156101c157600080fd5b506101d56101d036600461175c565b6104ea565b6040805173ffffffffffffffffffffffffffffffffffffffff9384168152929091166020830152016101ac565b34801561020e57600080fd5b5061022261021d366004611784565b610530565b6040516101ac91906117cb565b34801561023b57600080fd5b5060015461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101ac565b34801561028d57600080fd5b5061025c61029c366004611784565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156102d057600080fd5b506102e46102df36600461181c565b6105ca565b005b3480156102f257600080fd5b506102fb610730565b6040516101ac919061186b565b34801561031457600080fd5b506103286103233660046118d4565b6107b5565b6040519081526020016101ac565b34801561034257600080fd5b506102e461035136600461190b565b610888565b34801561036257600080fd5b50610328610371366004611784565b60056020526000908152604090205481565b34801561038f57600080fd5b506102e461039e366004611954565b6108b9565b3480156103af57600080fd5b5061025c6103be366004611784565b60066020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156103f257600080fd5b506102e4610401366004611993565b610a73565b6102e4610b22565b34801561041a57600080fd5b50610423610ba0565b60405190151581526020016101ac565b34801561043f57600080fd5b506102e461044e3660046119b3565b610d00565b34801561045f57600080fd5b5061048361046e366004611784565b60036020526000908152604090205460ff1681565b6040516101ac91906119d3565b34801561049c57600080fd5b506103286104ab36600461190b565b610daf565b3480156104bc57600080fd5b506102e46104cb366004611954565b610e8b565b3480156104dc57600080fd5b506000546104239060ff1681565b600781815481106104fa57600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff91821692501682565b60046020526000908152604090208054610549906119e7565b80601f0160208091040260200160405190810160405280929190818152602001828054610575906119e7565b80156105c25780601f10610597576101008083540402835291602001916105c2565b820191906000526020600020905b8154815290600101906020018083116105a557829003601f168201915b505050505081565b6000546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152620100009092049091169063ca669fa790602401600060405180830381600087803b15801561063e57600080fd5b505af1158015610652573d6000803e3d6000fd5b505050506002600085600a81111561066c5761066c611713565b600a81111561067d5761067d611713565b8152602081019190915260409081016000205490517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490529091169063095ea7b3906044016020604051808303816000875af1158015610705573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107299190611a3b565b5050505050565b60606007805480602002602001604051908101604052809291908181526020016000905b828210156107ac5760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff908116835260019182015416828401529083529092019101610754565b50505050905090565b60006002600084600a8111156107cd576107cd611713565b600a8111156107de576107de611713565b8152602081019190915260409081016000205490517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152909116906370a0823190602401602060405180830381865afa15801561085d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108819190611a5d565b9392505050565b6108b48383837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6105ca565b505050565b60016003600085600a8111156108d1576108d1611713565b600a8111156108e2576108e2611713565b815260208101919091526040016000205460ff16600481111561090757610907611713565b14610999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f74657374546f6b656e53756974653a20547279696e6720746f206275726e206160448201527f206e6f6e2d6e6f726d616c20746f6b656e00000000000000000000000000000060648201526084015b60405180910390fd5b6002600084600a8111156109af576109af611713565b600a8111156109c0576109c0611713565b8152602081019190915260409081016000205490517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526024820184905290911690639dc29fac906044015b6020604051808303816000875af1158015610a49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6d9190611a3b565b50505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604081205460ff169081600a811115610aaf57610aaf611713565b1415610b17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f20746f6b656e2077697468207375636820616464726573730000000000006044820152606401610990565b610a6d818484610888565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015610b8c57600080fd5b505af1158015610729573d6000803e3d6000fd5b60008054610100900460ff1615610bc05750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610cfb5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610c65917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc491608001611a76565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052610c9d91611abe565b6000604051808303816000865af19150503d8060008114610cda576040519150601f19603f3d011682016040523d82523d6000602084013e610cdf565b606091505b5091505080806020019051810190610cf79190611a3b565b9150505b919050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604081205460ff169081600a811115610d3c57610d3c611713565b1415610da4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f20746f6b656e2077697468207375636820616464726573730000000000006044820152606401610990565b610a6d818484610e8b565b60006002600085600a811115610dc757610dc7611713565b600a811115610dd857610dd8611713565b8152602081019190915260409081016000205490517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301529091169063dd62ed3e90604401602060405180830381865afa158015610e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e839190611a5d565b949350505050565b60026003600085600a811115610ea357610ea3611713565b600a811115610eb457610eb4611713565b815260208101919091526040016000205460ff166004811115610ed957610ed9611713565b1415610ff6576000546040517fc88a5e6d000000000000000000000000000000000000000000000000000000008152306004820152602481018390526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c88a5e6d90604401600060405180830381600087803b158015610f5657600080fd5b505af1158015610f6a573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015610fd857600080fd5b505af1158015610fec573d6000803e3d6000fd5b505050505061163c565b600380600085600a81111561100d5761100d611713565b600a81111561101e5761101e611713565b815260208101919091526040016000205460ff16600481111561104357611043611713565b14156111aa576000546040517fc88a5e6d000000000000000000000000000000000000000000000000000000008152306004820152602481018390526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c88a5e6d90604401600060405180830381600087803b1580156110c057600080fd5b505af11580156110d4573d6000803e3d6000fd5b505050506002600084600a8111156110ee576110ee611713565b600a8111156110ff576110ff611713565b8152602081019190915260409081016000205490517fa1903eab00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a1903eab90839060240160206040518083038185885af115801561117f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906111a49190611a5d565b5061163c565b60046003600085600a8111156111c2576111c2611713565b600a8111156111d3576111d3611713565b815260208101919091526040016000205460ff1660048111156111f8576111f8611713565b141561148f5760006002600085600a81111561121657611216611713565b600a81111561122757611227611713565b815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c49190611ada565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600860205260409020549091506112fb9060ff163084610e8b565b8073ffffffffffffffffffffffffffffffffffffffff1663095ea7b36002600087600a81111561132d5761132d611713565b600a81111561133e5761133e611713565b81526020810191909152604090810160002054905160e083901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602481018590526044016020604051808303816000875af11580156113c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e69190611a3b565b506002600085600a8111156113fd576113fd611713565b600a81111561140e5761140e611713565b8152602081019190915260409081016000205490517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810184905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f1990604401600060405180830381600087803b158015610fd857600080fd5b60016003600085600a8111156114a7576114a7611713565b600a8111156114b8576114b8611713565b815260208101919091526040016000205460ff1660048111156114dd576114dd611713565b14156115b4576002600084600a8111156114f9576114f9611713565b600a81111561150a5761150a611713565b8152602081019190915260409081016000205490517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f19906044016020604051808303816000875af1158015611590573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a49190611a3b565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f74657374546f6b656e53756974653a20547279696e6720746f207472616e736660448201527f657220756e6b6e6f776e20746f6b656e000000000000000000000000000000006064820152608401610990565b6002600084600a81111561165257611652611713565b600a81111561166357611663611713565b8152602081019190915260409081016000205490517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490529091169063a9059cbb90604401610a2a565b73ffffffffffffffffffffffffffffffffffffffff811681146116f357600080fd5b50565b60006020828403121561170857600080fd5b8135610881816116d1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60208101600b831061175657611756611713565b91905290565b60006020828403121561176e57600080fd5b5035919050565b8035600b8110610cfb57600080fd5b60006020828403121561179657600080fd5b61088182611775565b60005b838110156117ba5781810151838201526020016117a2565b83811115610a6d5750506000910152565b60208152600082518060208401526117ea81604085016020870161179f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000806080858703121561183257600080fd5b61183b85611775565b9350602085013561184b816116d1565b9250604085013561185b816116d1565b9396929550929360600135925050565b602080825282518282018190526000919060409081850190868401855b828110156118c7578151805173ffffffffffffffffffffffffffffffffffffffff90811686529087015116868501529284019290850190600101611888565b5091979650505050505050565b600080604083850312156118e757600080fd5b6118f083611775565b91506020830135611900816116d1565b809150509250929050565b60008060006060848603121561192057600080fd5b61192984611775565b92506020840135611939816116d1565b91506040840135611949816116d1565b809150509250925092565b60008060006060848603121561196957600080fd5b61197284611775565b92506020840135611982816116d1565b929592945050506040919091013590565b6000806000606084860312156119a857600080fd5b8335611929816116d1565b6000806000606084860312156119c857600080fd5b8335611972816116d1565b602081016005831061175657611756611713565b600181811c908216806119fb57607f821691505b60208210811415611a35577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600060208284031215611a4d57600080fd5b8151801515811461088157600080fd5b600060208284031215611a6f57600080fd5b5051919050565b7fffffffff000000000000000000000000000000000000000000000000000000008316815260008251611ab081600485016020870161179f565b919091016004019392505050565b60008251611ad081846020870161179f565b9190910192915050565b600060208284031215611aec57600080fd5b8151610881816116d156fea264697066735822122010fe735ed069aca27931edce4ba2ff14ec7886bf21b0eea685a884f9200fb49e64736f6c634300080a003360c0604052600d60808190526c2bb930b83832b21022ba3432b960991b60a090815261002e916000919061007a565b50604080518082019091526004808252630ae8aa8960e31b602090920191825261005a9160019161007a565b506002805460ff1916601217905534801561007457600080fd5b5061014e565b82805461008690610113565b90600052602060002090601f0160209004810192826100a857600085556100ee565b82601f106100c157805160ff19168380011785556100ee565b828001600101855582156100ee579182015b828111156100ee5782518255916020019190600101906100d3565b506100fa9291506100fe565b5090565b5b808211156100fa57600081556001016100ff565b600181811c9082168061012757607f821691505b6020821081141561014857634e487b7160e01b600052602260045260246000fd5b50919050565b6109548061015d6000396000f3fe6080604052600436106100cb5760003560e01c806340c10f1911610074578063a9059cbb1161004e578063a9059cbb14610225578063d0e30db014610245578063dd62ed3e1461024d57600080fd5b806340c10f19146101c357806370a08231146101e357806395d89b411461021057600080fd5b806323b872dd116100a557806323b872dd146101575780632e1a7d4d14610177578063313ce5671461019757600080fd5b806306fdde03146100df578063095ea7b31461010a57806318160ddd1461013a57600080fd5b366100da576100d8610285565b005b600080fd5b3480156100eb57600080fd5b506100f46102e0565b6040516101019190610703565b60405180910390f35b34801561011657600080fd5b5061012a61012536600461079f565b61036e565b6040519015158152602001610101565b34801561014657600080fd5b50475b604051908152602001610101565b34801561016357600080fd5b5061012a6101723660046107c9565b6103e7565b34801561018357600080fd5b506100d8610192366004610805565b6105fe565b3480156101a357600080fd5b506002546101b19060ff1681565b60405160ff9091168152602001610101565b3480156101cf57600080fd5b506100d86101de36600461079f565b6106a4565b3480156101ef57600080fd5b506101496101fe36600461081e565b60036020526000908152604090205481565b34801561021c57600080fd5b506100f46106e2565b34801561023157600080fd5b5061012a61024036600461079f565b6106ef565b6100d8610285565b34801561025957600080fd5b50610149610268366004610839565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102a490849061089b565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102ed906108b3565b80601f0160208091040260200160405190810160405280929190818152602001828054610319906108b3565b80156103665780601f1061033b57610100808354040283529160200191610366565b820191906000526020600020905b81548152906001019060200180831161034957829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103d69086815260200190565b60405180910390a350600192915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561041957600080fd5b73ffffffffffffffffffffffffffffffffffffffff8416331480159061048f575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105175773ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020548211156104d157600080fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915281208054849290610511908490610907565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061054c908490610907565b909155505073ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260408120805484929061058690849061089b565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516105ec91815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561061a57600080fd5b3360009081526003602052604081208054839290610639908490610907565b9091555050604051339082156108fc029083906000818181858888f1935050505015801561066b573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260036020526040812080548392906106d990849061089b565b90915550505050565b600180546102ed906108b3565b60006106fc3384846103e7565b9392505050565b600060208083528351808285015260005b8181101561073057858101830151858201604001528201610714565b81811115610742576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461079a57600080fd5b919050565b600080604083850312156107b257600080fd5b6107bb83610776565b946020939093013593505050565b6000806000606084860312156107de57600080fd5b6107e784610776565b92506107f560208501610776565b9150604084013590509250925092565b60006020828403121561081757600080fd5b5035919050565b60006020828403121561083057600080fd5b6106fc82610776565b6000806040838503121561084c57600080fd5b61085583610776565b915061086360208401610776565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156108ae576108ae61086c565b500190565b600181811c908216806108c757607f821691505b60208210811415610901577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000828210156109195761091961086c565b50039056fea26469706673582212206ec943fa4e3b70d8fca6c25b6aa26fa18e8f8952ce3bc4d5afcb443bf3097c0564736f6c634300080a003360806040526000600255600060035534801561001a57600080fd5b506111fa8061002a6000396000f3fe60806040526004361061016e5760003560e01c80637a28fb88116100cb578063bdd17e1c1161007f578063dd62ed3e11610059578063dd62ed3e146103ee578063ee7a7c0414610441578063f5eb42dc1461046157600080fd5b8063bdd17e1c146103ad578063cdb9a21c146103c3578063d5002f2e146103d957600080fd5b8063a1903eab116100b0578063a1903eab1461035a578063a457c2d71461036d578063a9059cbb1461038d57600080fd5b80637a28fb88146102f457806395d89b411461031457600080fd5b806323b872dd1161012257806337cfdaca1161010757806337cfdaca1461020d57806339509351146102b457806370a08231146102d457600080fd5b806323b872dd14610278578063313ce5671461029857600080fd5b806318160ddd1161015357806318160ddd1461020d578063192084511461023057806322301f6e1461025057600080fd5b806306fdde0314610185578063095ea7b3146101dd57600080fd5b366101805761017d6000610481565b50005b600080fd5b34801561019157600080fd5b5060408051808201909152601781527f4c6971756964207374616b656420457468657220322e3000000000000000000060208201525b6040516101d49190610f63565b60405180910390f35b3480156101e957600080fd5b506101fd6101f8366004610fff565b610545565b60405190151581526020016101d4565b34801561021957600080fd5b5061022261055b565b6040519081526020016101d4565b34801561023c57600080fd5b5061022261024b366004611029565b61056b565b34801561025c57600080fd5b5061027661026b366004611042565b600391909155600255565b005b34801561028457600080fd5b506101fd610293366004611064565b6105ab565b3480156102a457600080fd5b50604051601281526020016101d4565b3480156102c057600080fd5b506101fd6102cf366004610fff565b610696565b3480156102e057600080fd5b506102226102ef3660046110a0565b6106d9565b34801561030057600080fd5b5061022261030f366004611029565b61070e565b34801561032057600080fd5b5060408051808201909152600581527f737445544800000000000000000000000000000000000000000000000000000060208201526101c7565b6102226103683660046110a0565b61073a565b34801561037957600080fd5b506101fd610388366004610fff565b610745565b34801561039957600080fd5b506101fd6103a8366004610fff565b6107f9565b3480156103b957600080fd5b5061022260035481565b3480156103cf57600080fd5b5061022260025481565b3480156103e557600080fd5b50610222610806565b3480156103fa57600080fd5b506102226104093660046110bb565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b34801561044d57600080fd5b5061027661045c366004610fff565b610811565b34801561046d57600080fd5b5061022261047c3660046110a0565b61081f565b60003334806104f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f5a45524f5f4445504f534954000000000000000000000000000000000000000060448201526064015b60405180910390fd5b60006104fc8261056b565b9050806105065750805b8160036000828254610518919061111d565b909155506105289050838261084a565b61053383838761093b565b61053d8382610992565b949350505050565b60006105523384846109ea565b50600192915050565b600061056660035490565b905090565b60008061057760035490565b9050806105875750600092915050565b6105a48161059e61059760025490565b8690610b52565b90610b5e565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001602090815260408083203384529091528120548281101561066c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f5452414e534645525f414d4f554e545f455843454544535f414c4c4f57414e4360448201527f450000000000000000000000000000000000000000000000000000000000000060648201526084016104e8565b610677858585610b6a565b61068b85336106868487610bef565b6109ea565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916105529185906106869086610bfb565b73ffffffffffffffffffffffffffffffffffffffff81166000908152602081905260408120546107089061070e565b92915050565b60008061071a60025490565b90508061072a5750600092915050565b6105a48161059e61059760035490565b600061070882610481565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156107e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4445435245415345445f414c4c4f57414e43455f42454c4f575f5a45524f000060448201526064016104e8565b6107ef33856106868487610bef565b5060019392505050565b6000610552338484610b6a565b600061056660025490565b61081b8282610c07565b5050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040812054610708565b73ffffffffffffffffffffffffffffffffffffffff82166108c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4d494e545f544f5f5448455f5a45524f5f41444452455353000000000000000060448201526064016104e8565b80600260008282546108d9919061111d565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205461090e9082610bfb565b73ffffffffffffffffffffffffffffffffffffffff90921660009081526020819052604090209190915550565b6040805183815273ffffffffffffffffffffffffffffffffffffffff83811660208301528516917fed8dd430b1e4bba98e943dc5b157cf7b54d9e12916d6c474ff5733a95001d03b910160405180910390a2505050565b73ffffffffffffffffffffffffffffffffffffffff821660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6109d58461070e565b60405190815260200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff8316610a67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f415050524f56455f46524f4d5f5a45524f5f414444524553530000000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff8216610ae4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f415050524f56455f544f5f5a45524f5f4144445245535300000000000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006105a48284611135565b60006105a48284611172565b6000610b758261056b565b9050610b82848483610d64565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610be191815260200190565b60405180910390a350505050565b60006105a482846111ad565b60006105a4828461111d565b73ffffffffffffffffffffffffffffffffffffffff8216610c84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4255524e5f46524f4d5f5448455f5a45524f5f4144445245535300000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205480821115610d14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4255524e5f414d4f554e545f455843454544535f42414c414e4345000000000060448201526064016104e8565b8160026000828254610d2691906111ad565b90915550610d3690508183610bef565b73ffffffffffffffffffffffffffffffffffffffff9093166000908152602081905260409020929092555050565b73ffffffffffffffffffffffffffffffffffffffff8316610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f5452414e534645525f46524f4d5f5448455f5a45524f5f41444452455353000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff8216610e5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f5452414e534645525f544f5f5448455f5a45524f5f414444524553530000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205480821115610eee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5452414e534645525f414d4f554e545f455843454544535f42414c414e43450060448201526064016104e8565b610ef88183610bef565b73ffffffffffffffffffffffffffffffffffffffff8086166000908152602081905260408082209390935590851681522054610f349083610bfb565b73ffffffffffffffffffffffffffffffffffffffff909316600090815260208190526040902092909255505050565b600060208083528351808285015260005b81811015610f9057858101830151858201604001528201610f74565b81811115610fa2576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ffa57600080fd5b919050565b6000806040838503121561101257600080fd5b61101b83610fd6565b946020939093013593505050565b60006020828403121561103b57600080fd5b5035919050565b6000806040838503121561105557600080fd5b50508035926020909101359150565b60008060006060848603121561107957600080fd5b61108284610fd6565b925061109060208501610fd6565b9150604084013590509250925092565b6000602082840312156110b257600080fd5b6105a482610fd6565b600080604083850312156110ce57600080fd5b6110d783610fd6565b91506110e560208401610fd6565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611130576111306110ee565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561116d5761116d6110ee565b500290565b6000826111a8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000828210156111bf576111bf6110ee565b50039056fea2646970667358221220a5b4f31162ba2b8b3424cef84b31ef91d05a825243602b5fdf758ffb49b8246364736f6c634300080a003360a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a003360c06040523480156200001157600080fd5b506040516200170938038062001709833981016040819052620000349162000266565b8351849084906200004d906003906020850190620000f3565b50805162000063906004906020840190620000f3565b505050620000806200007a6200009d60201b60201c565b620000a1565b60ff9091166080526001600160a01b031660a05250620003479050565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b82805462000101906200030a565b90600052602060002090601f01602090048101928262000125576000855562000170565b82601f106200014057805160ff191683800117855562000170565b8280016001018555821562000170579182015b828111156200017057825182559160200191906001019062000153565b506200017e92915062000182565b5090565b5b808211156200017e576000815560010162000183565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c157600080fd5b81516001600160401b0380821115620001de57620001de62000199565b604051601f8301601f19908116603f0116810190828211818310171562000209576200020962000199565b816040528381526020925086838588010111156200022657600080fd5b600091505b838210156200024a57858201830151818301840152908201906200022b565b838211156200025c5760008385830101525b9695505050505050565b600080600080608085870312156200027d57600080fd5b84516001600160401b03808211156200029557600080fd5b620002a388838901620001af565b95506020870151915080821115620002ba57600080fd5b50620002c987828801620001af565b935050604085015160ff81168114620002e157600080fd5b60608601519092506001600160a01b0381168114620002ff57600080fd5b939692955090935050565b600181811c908216806200031f57607f821691505b602082108114156200034157634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05161138e6200037b600039600081816101f70152818161041f0152610600015260006101a2015261138e6000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80636f307dc3116100b257806395d89b4111610081578063a9059cbb11610066578063a9059cbb146102b5578063dd62ed3e146102c8578063f2fde38b1461030e57600080fd5b806395d89b411461029a578063a457c2d7146102a257600080fd5b80636f307dc3146101f257806370a082311461023e578063715018a6146102745780638da5cb5b1461027c57600080fd5b806323b872dd116100ee57806323b872dd14610188578063313ce5671461019b57806339509351146101cc57806340c10f19146101df57600080fd5b806306fdde0314610120578063095ea7b31461013e57806318160ddd146101615780631e9a695014610173575b600080fd5b610128610321565b604051610135919061112d565b60405180910390f35b61015161014c3660046111c9565b6103b3565b6040519015158152602001610135565b6002545b604051908152602001610135565b6101866101813660046111c9565b6103c9565b005b6101516101963660046111f3565b610491565b60405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610135565b6101516101da3660046111c9565b61057c565b6101866101ed3660046111c9565b6105c5565b6102197f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b61016561024c36600461122f565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610186610691565b60055473ffffffffffffffffffffffffffffffffffffffff16610219565b61012861071e565b6101516102b03660046111c9565b61072d565b6101516102c33660046111c9565b610805565b6101656102d6366004611251565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b61018661031c36600461122f565b610812565b60606003805461033090611284565b80601f016020809104026020016040519081016040528092919081815260200182805461035c90611284565b80156103a95780601f1061037e576101008083540402835291602001916103a9565b820191906000526020600020905b81548152906001019060200180831161038c57829003601f168201915b5050505050905090565b60006103c0338484610942565b50600192915050565b6103d33382610af5565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015610468573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048c91906112d8565b505050565b600061049e848484610ce2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6105718533858403610942565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916103c09185906105c0908690611329565b610942565b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906323b872dd906064016020604051808303816000875af115801561065e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068291906112d8565b5061068d8282610f96565b5050565b60055473ffffffffffffffffffffffffffffffffffffffff163314610712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161055b565b61071c60006110b6565b565b60606004805461033090611284565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156107ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161055b565b6107fb3385858403610942565b5060019392505050565b60006103c0338484610ce2565b60055473ffffffffffffffffffffffffffffffffffffffff163314610893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161055b565b73ffffffffffffffffffffffffffffffffffffffff8116610936576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161055b565b61093f816110b6565b50565b73ffffffffffffffffffffffffffffffffffffffff83166109e4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff8216610a87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8216610b98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015610c4e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290610c8a908490611341565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff8216610e28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610ede576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610f22908490611329565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f8891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161055b565b80600260008282546110259190611329565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152602081905260408120805483929061105f908490611329565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208083528351808285015260005b8181101561115a5785810183015185820160400152820161113e565b8181111561116c576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146111c457600080fd5b919050565b600080604083850312156111dc57600080fd5b6111e5836111a0565b946020939093013593505050565b60008060006060848603121561120857600080fd5b611211846111a0565b925061121f602085016111a0565b9150604084013590509250925092565b60006020828403121561124157600080fd5b61124a826111a0565b9392505050565b6000806040838503121561126457600080fd5b61126d836111a0565b915061127b602084016111a0565b90509250929050565b600181811c9082168061129857607f821691505b602082108114156112d2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156112ea57600080fd5b8151801515811461124a57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561133c5761133c6112fa565b500190565b600082821015611353576113536112fa565b50039056fea26469706673582212203a6db30cd3c097921df4156794aa7973eb848711deeb2cffd7c54a9df1fdb0a564736f6c634300080a003360a060405234801561001057600080fd5b506040516106ca3803806106ca83398101604081905261002f9161006c565b60009190915560ff166080526001805460506001600160501b031991821681179092556004805490911690911790554260028190556003556100a2565b6000806040838503121561007f57600080fd5b82519150602083015160ff8116811461009757600080fd5b809150509250929050565b60805161060e6100bc600039600060d3015261060e6000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80639a6fc8f511610081578063d62ada111161005b578063d62ada11146102dc578063f7a30806146102f4578063feaf968c1461030757600080fd5b80639a6fc8f5146101cd578063bd18ad531461023a578063cd653afc1461024d57600080fd5b806354fd4d50116100b257806354fd4d501461012d57806367e8d83d1461013c5780637284e4161461018e57600080fd5b8063313ce567146100ce5780633fd0875f1461010c575b600080fd5b6100f57f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020015b60405180910390f35b6004546a0100000000000000000000900460ff166040516101039190610441565b60405160018152602001610103565b61018c61014a366004610482565b600480549115156c01000000000000000000000000027fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff909216919091179055565b005b604080518082018252600c81527f7072696365206f7261636c6500000000000000000000000000000000000000006020820152905161010391906104ab565b6102036101db36600461053d565b60015460005460025460035460045469ffffffffffffffffffff948516941691939590929450565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610103565b61018c610248366004610558565b61030f565b61018c61025b366004610579565b6001805469ffffffffffffffffffff9586167fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090911617905560029290925560035560048054919092167fffffffffffffffffffffffffffffffffffffffff00ff00000000000000000000909116176b020000000000000000000000179055565b6102e461035f565b6040519015158152602001610103565b61018c6103023660046105bf565b600055565b610203610385565b600480548291907fffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff166b01000000000000000000000083600281111561035757610357610412565b021790555050565b600454600090610380906b010000000000000000000000900460ff166103d6565b905090565b60008060008060006004600c9054906101000a900460ff16156103a757600080fd5b505060015460005460025460035460045469ffffffffffffffffffff9485169893975091955093509190911690565b600060028260028111156103ec576103ec610412565b14156103f757600080fd5b600182600281111561040b5761040b610412565b1492915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016006831061047c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561049457600080fd5b813580151581146104a457600080fd5b9392505050565b600060208083528351808285015260005b818110156104d8578581018301518582016040015282016104bc565b818111156104ea576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803569ffffffffffffffffffff8116811461053857600080fd5b919050565b60006020828403121561054f57600080fd5b6104a48261051e565b60006020828403121561056a57600080fd5b8135600381106104a457600080fd5b6000806000806080858703121561058f57600080fd5b6105988561051e565b935060208501359250604085013591506105b46060860161051e565b905092959194509250565b6000602082840312156105d157600080fd5b503591905056fea264697066735822122014874f7a973b86501c4c1a8be32490fe902c8f088ee234d25f9b2497e19f9e5264736f6c634300080a003360806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d00011790553480156200003a57600080fd5b5060405162031ed638038062031ed68339810160408190526200005d91620015e8565b81816040516200006d9062001595565b604051809103906000f0801580156200008a573d6000803e3d6000fd5b5050600180546001600160a01b0319166001600160a01b038416908117909155604080516325abd85f60e11b81529051634b57b0be916004808201926020929091908290030181865afa158015620000e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200010c91906200162a565b73c4375b7de8af5a38a93548eb8453a498222c4ff26040516200012f90620015a3565b6001600160a01b03928316815291166020820152604001604051809103906000f08015801562000163573d6000803e3d6000fd5b50600380546001600160a01b0319166001600160a01b039290921691821790556040805163de28735960e01b8152905163de287359916004808201926020929091908290030181865afa158015620001bf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e591906200162a565b604051634910832f60e01b81527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526001600160a01b039190911690634910832f90602401600060405180830381600087803b1580156200023d57600080fd5b505af115801562000252573d6000803e3d6000fd5b50505050600360009054906101000a90046001600160a01b03166001600160a01b031663de2873596040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d091906200162a565b60035460405163f2fde38b60e01b81526001600160a01b03918216600482015291169063f2fde38b90602401600060405180830381600087803b1580156200031757600080fd5b505af11580156200032c573d6000803e3d6000fd5b505060035460015460408051636ca42ae360e01b815290516001600160a01b039384169550638874ff1f94509190921691636ca42ae39160048083019260009291908290030181865afa15801562000388573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620003b29190810190620016c5565b6040518263ffffffff1660e01b8152600401620003d09190620017b6565b600060405180830381600087803b158015620003eb57600080fd5b505af115801562000400573d6000803e3d6000fd5b50505050600360009054906101000a90046001600160a01b03166001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000458573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200047e91906200162a565b600280546001600160a01b0319166001600160a01b039290921691821790556040805163120d150d60e31b81529051639068a868916004808201926020929091908290030181865afa158015620004d9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004ff91906200162a565b600480546001600160a01b0319166001600160a01b0392831617815560025460408051631f94a27560e31b81529051919093169263fca513a892818101926020929091908290030181865afa1580156200055d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200058391906200162a565b600880546001600160a01b0319166001600160a01b0392831617905560025460408051630873769560e01b81529051919092169163087376959160048083019260209291908290030181865afa158015620005e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200060891906200162a565b600780546001600160a01b0319166001600160a01b039283161790556002546040805163c513c9bb60e01b81529051919092169163c513c9bb9160048083019260209291908290030181865afa15801562000667573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200068d91906200162a565b600680546001600160a01b0319166001600160a01b039283161790556001546040516367b4264560e01b81529116906367b4264590620006d29084906004016200184d565b602060405180830381865afa158015620006f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200071691906200162a565b600980546001600160a01b0319166001600160a01b0392831617905560035460408051630a55006360e21b815290519190921691632954018c9160048083019260209291908290030181865afa15801562000775573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200079b91906200162a565b6009546040516001600160a01b0390911690620007b890620015b2565b6001600160a01b03928316815291166020820152604001604051809103906000f080158015620007ec573d6000803e3d6000fd5b50600580546001600160a01b0319166001600160a01b039283169081179091556001549091169063eebab8ef90839062000825620011ec565b6200083290600a62001879565b6040518463ffffffff1660e01b815260040162000852939291906200189b565b600060405180830381600087803b1580156200086d57600080fd5b505af115801562000882573d6000803e3d6000fd5b505060065460055460405163d914cd4b60e01b81526001600160a01b0391821660048201529116925063d914cd4b9150602401600060405180830381600087803b158015620008d057600080fd5b505af1158015620008e5573d6000803e3d6000fd5b5050600f80546001600160801b031916670de0b6b3a76400001790555062000911925050620011ec9050565b6200091e90600a62001879565b600f80546001600160801b03908116600160801b9382168402818117938490556040805160a0810182529184169092178152939092041660208301526000919081016200096b84620012ab565b815260006020820181905260409182018190526005549151929350916001600160a01b039091169083908390620009a290620015c0565b620009b093929190620018c5565b604051809103906000f080158015620009cd573d6000803e3d6000fd5b509050806001600160a01b031663c12c21c06040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a0f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a3591906200162a565b600b60006101000a8154816001600160a01b0302191690836001600160a01b03160217905550806001600160a01b0316632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a9a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ac091906200162a565b600c60006101000a8154816001600160a01b0302191690836001600160a01b03160217905550806001600160a01b031663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000b25573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b4b91906200162a565b600d80546001600160a01b0319166001600160a01b03928316179055600654600b5460405163e26b2f6360e01b8152908316600482015291169063e26b2f6390602401600060405180830381600087803b15801562000ba957600080fd5b505af115801562000bbe573d6000803e3d6000fd5b5050600054600554604080516318caf8e360e31b81526001600160a01b039283166004808301919091526024820192909252604481019190915263141bdbdb60e21b60648201526201000090920416925063c657c7189150608401600060405180830381600087803b15801562000c3457600080fd5b505af115801562000c49573d6000803e3d6000fd5b5050600054600c8054604080516318caf8e360e31b81526001600160a01b039283166004820152602481019190915260448101929092526b43726564697446616361646560a01b606483015262010000909204909116925063c657c7189150608401600060405180830381600087803b15801562000cc657600080fd5b505af115801562000cdb573d6000803e3d6000fd5b5050600054600b54604080516318caf8e360e31b81526001600160a01b0392831660048201526024810191909152600d60448201526c21b932b234ba26b0b730b3b2b960991b60648201526201000090920416925063c657c7189150608401600060405180830381600087803b15801562000d5557600080fd5b505af115801562000d6a573d6000803e3d6000fd5b5050600054600d54604080516318caf8e360e31b81526001600160a01b0392831660048201526024810191909152601260448201527121b932b234ba21b7b73334b3bab930ba37b960711b60648201526201000090920416925063c657c7189150608401600060405180830381600087803b15801562000de957600080fd5b505af115801562000dfe573d6000803e3d6000fd5b50506001546001600160a01b0316915063eebab8ef90508473f39fd6e51aad88f6f4ce6ab8827279cfffb9226662000e35620011ec565b6040518463ffffffff1660e01b815260040162000e55939291906200189b565b600060405180830381600087803b15801562000e7057600080fd5b505af115801562000e85573d6000803e3d6000fd5b50506001546001600160a01b0316915063eebab8ef9050847390f79bf6eb2c4f870365e785982e1f101e93b90662000ebc620011ec565b6040518463ffffffff1660e01b815260040162000edc939291906200189b565b600060405180830381600087803b15801562000ef757600080fd5b505af115801562000f0c573d6000803e3d6000fd5b505060005460405163ca669fa760e01b815273f39fd6e51aad88f6f4ce6ab8827279cfffb922666004820152620100009091046001600160a01b0316925063ca669fa79150602401600060405180830381600087803b15801562000f6f57600080fd5b505af115801562000f84573d6000803e3d6000fd5b5050600954600b5460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529116925063095ea7b391506044016020604051808303816000875af115801562000fdf573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001005919062001989565b5060005460405163ca669fa760e01b81527390f79bf6eb2c4f870365e785982e1f101e93b9066004820152620100009091046001600160a01b03169063ca669fa790602401600060405180830381600087803b1580156200106557600080fd5b505af11580156200107a573d6000803e3d6000fd5b5050600954600b5460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529116925063095ea7b391506044016020604051808303816000875af1158015620010d5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010fb919062001989565b5060025460405163f2fde38b60e01b81527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526001600160a01b039091169063f2fde38b90602401600060405180830381600087803b1580156200115657600080fd5b505af11580156200116b573d6000803e3d6000fd5b505060075460405163f2fde38b60e01b81527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b158015620011c957600080fd5b505af1158015620011de573d6000803e3d6000fd5b5050505050505050620019e1565b600180546040516367b4264560e01b81526000926001600160a01b03909216916367b42645916200122191906004016200184d565b602060405180830381865afa1580156200123f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200126591906200162a565b6009546001600160a01b03908116911614620012955762001290670de0b6b3a764000060c862001879565b905090565b62001290670de0b6b3a7640000614e2062001879565b6040805160c08101825260026080820190815261232860a08301528152815180830183526005815261226060208281019190915282015281518083018352606092600092919082019080600387600a8111156200130c576200130c62001814565b146200131a5760036200131d565b60015b600a81111562001331576200133162001814565b815261206c6020918201529082526040805180820190915260048152611c84818301529101529050612454600a6000858281111562001374576200137462001814565b600a81111562001388576200138862001814565b815260208101919091526040908101600020805461ffff9390931661ffff19909316929092179091558051600480825260a0820190925281816020015b6040805180820190915260008082526020820152815260200190600190039081620013c557905050925060005b818110156200158d57828160048110620014105762001410620019ad565b602002015160200151600a6000858460048110620014325762001432620019ad565b602002015151600a8111156200144c576200144c62001814565b600a81111562001460576200146062001814565b815260208101919091526040908101600020805461ffff191661ffff9390931692909217909155805180820190915260015481906001600160a01b03166367b42645868560048110620014b757620014b7620019ad565b6020020151516040516001600160e01b031960e084901b168152620014e091906004016200184d565b602060405180830381865afa158015620014fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200152491906200162a565b6001600160a01b03168152602001848360048110620015475762001547620019ad565b60200201516020015161ffff168152508482815181106200156c576200156c620019ad565b602002602001018190525080806200158490620019c3565b915050620013f2565b505050919050565b6105e6806200bc5283390190565b62011105806200c23883390190565b6110a7806201d33d83390190565b62013af2806201e3e483390190565b6001600160a01b0381168114620015e557600080fd5b50565b60008060408385031215620015fc57600080fd5b82516200160981620015cf565b6020840151909250600b81106200161f57600080fd5b809150509250929050565b6000602082840312156200163d57600080fd5b81516200164a81620015cf565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156200168c576200168c62001651565b60405290565b604051601f8201601f191681016001600160401b0381118282101715620016bd57620016bd62001651565b604052919050565b60006020808385031215620016d957600080fd5b82516001600160401b0380821115620016f157600080fd5b818501915085601f8301126200170657600080fd5b8151818111156200171b576200171b62001651565b6200172b848260051b0162001692565b818152848101925060069190911b8301840190878211156200174c57600080fd5b928401925b81841015620017ab57604084890312156200176c5760008081fd5b6200177662001667565b84516200178381620015cf565b8152848601516200179481620015cf565b818701528352604093909301929184019162001751565b979650505050505050565b602080825282518282018190526000919060409081850190868401855b828110156200180757815180516001600160a01b0390811686529087015116868501529284019290850190600101620017d3565b5091979650505050505050565b634e487b7160e01b600052602160045260246000fd5b600b81106200184957634e487b7160e01b600052602160045260246000fd5b9052565b602081016200185d82846200182a565b92915050565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161562001896576200189662001863565b500290565b60608101620018ab82866200182a565b6001600160a01b0393909316602082015260400152919050565b6001600160a01b0384811682526060602080840182905285516001600160801b039081169285019290925285810151909116608084015260408086015160a085810152805161010086018190526000949392918301919085906101208801905b808310156200195657845180518816835286015161ffff168683015293850193600192909201919083019062001925565b5060608a01516001600160a01b031660c0890152608090990151151560e088015250909401949094525092949350505050565b6000602082840312156200199c57600080fd5b815180151581146200164a57600080fd5b634e487b7160e01b600052603260045260246000fd5b6000600019821415620019da57620019da62001863565b5060010190565b61a26180620019f16000396000f3fe60806040523480156200001157600080fd5b5060043610620001ad5760003560e01c806362eb33e311620000f5578063ba414fa61162000097578063de287359116200006e578063de2873591462000479578063f9aa028a146200049a578063fa7626d414620004bb57600080fd5b8063ba414fa6146200041c578063c12c21c01462000437578063d46b9330146200045857600080fd5b80637785ff5d11620000cc5780637785ff5d14620003da5780639408b63f14620003e45780639dd55b45146200040557600080fd5b806362eb33e314620003775780636b70b04c14620003985780636f307dc314620003b957600080fd5b80632f7a1881116200015f5780635e813a8b11620001365780635e813a8b146200030c5780635f7c9bd0146200032d57806362186905146200034657600080fd5b80632f7a188114620002be578063406c8e2f14620002df57806354cae56e146200030057600080fd5b80630e42bc5d11620001945780630e42bc5d14620002305780632630c12f14620002565780632954018c146200029d57600080fd5b80630bc772da14620001b25780630c75f80614620001f5575b600080fd5b600f54620001cf906fffffffffffffffffffffffffffffffff1681565b6040516fffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6200021c62000206366004620012dd565b600a6020526000908152604090205461ffff1681565b60405161ffff9091168152602001620001ec565b6200024762000241366004620012dd565b620004c9565b604051620001ec919062001307565b600854620002779073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001620001ec565b600254620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600c54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600154620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200030a6200081f565b005b600454620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200033762000b1a565b604051908152602001620001ec565b600f54620001cf9070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681565b600654620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600554620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600954620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200030a62000c0c565b600e54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200030a6200041636600462001398565b62000fd6565b6200042662001149565b6040519015158152602001620001ec565b600b54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600354620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600754620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600d54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600054620004269060ff1681565b6040805160c08101825260026080820190815261232860a08301528152815180830183526005815261226060208281019190915282015281518083018352606092600092919082019080600387600a8111156200052a576200052a620013c7565b14620005385760036200053b565b60015b600a8111156200054f576200054f620013c7565b815261206c6020918201529082526040805180820190915260048152611c84818301529101529050612454600a60008582811115620005925762000592620013c7565b600a811115620005a657620005a6620013c7565b815260208101919091526040908101600020805461ffff939093167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909316929092179091558051600480825260a0820190925281816020015b60408051808201909152600080825260208201528152602001906001900390816200060057905050925060005b8181101562000817578281600481106200064b576200064b620013f6565b602002015160200151600a60008584600481106200066d576200066d620013f6565b602002015151600a811115620006875762000687620013c7565b600a8111156200069b576200069b620013c7565b81526020810191909152604090810160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff93909316929092179091558051808201909152600154819073ffffffffffffffffffffffffffffffffffffffff166367b426458685600481106200071c576200071c620013f6565b6020020151516040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526200075d919060040162001425565b602060405180830381865afa1580156200077b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007a1919062001467565b73ffffffffffffffffffffffffffffffffffffffff168152602001848360048110620007d157620007d1620013f6565b60200201516020015161ffff16815250848281518110620007f657620007f6620013f6565b602002602001018190525080806200080e90620014b6565b9150506200062d565b505050919050565b6000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16906306447d5690602401600060405180830381600087803b158015620008a457600080fd5b505af1158015620008b9573d6000803e3d6000fd5b5050600b5460405173ffffffffffffffffffffffffffffffffffffffff909116925060009150600190620008ed90620012b3565b73ffffffffffffffffffffffffffffffffffffffff938416815292909116602083015215156040820152606001604051809103906000f08015801562000937573d6000803e3d6000fd5b50600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316908117909155600d546040517f526a41e80000000000000000000000000000000000000000000000000000000081526004810192909252600160248301529091169063526a41e890604401600060405180830381600087803b158015620009dc57600080fd5b505af1158015620009f1573d6000803e3d6000fd5b5050600d5473ffffffffffffffffffffffffffffffffffffffff16915063eb9606df905062000a22426001620014f2565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815264ffffffffff90911660048201526024015b600060405180830381600087803b15801562000a7b57600080fd5b505af115801562000a90573d6000803e3d6000fd5b50505050600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562000aff57600080fd5b505af115801562000b14573d6000803e3d6000fd5b50505050565b600180546040517f67b4264500000000000000000000000000000000000000000000000000000000815260009273ffffffffffffffffffffffffffffffffffffffff909216916367b426459162000b75919060040162001425565b602060405180830381865afa15801562000b93573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000bb9919062001467565b60095473ffffffffffffffffffffffffffffffffffffffff90811691161462000bf65762000bf1670de0b6b3a764000060c86200150d565b905090565b62000bf1670de0b6b3a7640000614e206200150d565b60025460405173ffffffffffffffffffffffffffffffffffffffff9091169062000c3690620012c1565b73ffffffffffffffffffffffffffffffffffffffff90911681526060602082018190526008908201527f446567656e4e4654000000000000000000000000000000000000000000000000608082015260a060408201819052600a908201527f476561722d446567656e0000000000000000000000000000000000000000000060c082015260e001604051809103906000f08015801562000cda573d6000803e3d6000fd5b50600e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283161790556000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015262010000909104909116906306447d5690602401600060405180830381600087803b15801562000d8e57600080fd5b505af115801562000da3573d6000803e3d6000fd5b5050600e546040517ffca3b5aa0000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff909116925063fca3b5aa9150602401600060405180830381600087803b15801562000e2757600080fd5b505af115801562000e3c573d6000803e3d6000fd5b5050600b54600e5460405173ffffffffffffffffffffffffffffffffffffffff92831694509116915060009062000e7390620012b3565b73ffffffffffffffffffffffffffffffffffffffff938416815292909116602083015215156040820152606001604051809103906000f08015801562000ebd573d6000803e3d6000fd5b50600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316908117909155600d546040517f526a41e80000000000000000000000000000000000000000000000000000000081526004810192909252600160248301529091169063526a41e890604401600060405180830381600087803b15801562000f6257600080fd5b505af115801562000f77573d6000803e3d6000fd5b5050600e54600c546040517f4610f6ac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015291169250634610f6ac915060240162000a60565b600081600860405162000fe990620012cf565b91825260ff166020820152604001604051809103906000f08015801562001014573d6000803e3d6000fd5b506000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291925062010000900473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b1580156200109c57600080fd5b505af1158015620010b1573d6000803e3d6000fd5b50506008546040517fe8a97a3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528581166024830152909116925063e8a97a3e9150604401600060405180830381600087803b1580156200112b57600080fd5b505af115801562001140573d6000803e3d6000fd5b50505050505050565b60008054610100900460ff16156200116a5750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620012ae5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000008284015282518083038401815260608301909352600092909162001212917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016200158b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526200124c91620015c9565b6000604051808303816000865af19150503d80600081146200128b576040519150601f19603f3d011682016040523d82523d6000602084013e62001290565b606091505b5091505080806020019051810190620012aa9190620015d7565b9150505b919050565b615e9780620015fc83390190565b6126cf806200749383390190565b6106ca8062009b6283390190565b600060208284031215620012f057600080fd5b8135600b81106200130057600080fd5b9392505050565b602080825282518282018190526000919060409081850190868401855b8281101562001365578151805173ffffffffffffffffffffffffffffffffffffffff16855286015161ffff1686850152928401929085019060010162001324565b5091979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff811681146200139557600080fd5b50565b60008060408385031215620013ac57600080fd5b8235620013b98162001372565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60208101600b831062001461577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000602082840312156200147a57600080fd5b8151620013008162001372565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415620014eb57620014eb62001487565b5060010190565b6000821982111562001508576200150862001487565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562001548576200154862001487565b500290565b6000815160005b8181101562001570576020818501810151868301520162001554565b8181111562001580576000828601525b509290920192915050565b7fffffffff00000000000000000000000000000000000000000000000000000000831681526000620015c160048301846200154d565b949350505050565b60006200130082846200154d565b600060208284031215620015ea57600080fd5b815180151581146200130057600080fdfe6101406040523480156200001257600080fd5b5060405162005e9738038062005e97833981016040819052620000359162000198565b60016000556001600160a01b0383166200006257604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038316608081905260408051636f307dc360e01b81529051636f307dc3916004808201926020929091908290030181865afa158015620000ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d39190620001ea565b6001600160a01b031660a0816001600160a01b031681525050826001600160a01b0316634f0e0ef36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200012b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001519190620001ea565b6001600160a01b0390811660c0529190911660e0819052151561010052151561012052506200020f565b80516001600160a01b03811681146200019357600080fd5b919050565b600080600060608486031215620001ae57600080fd5b620001b9846200017b565b9250620001c9602085016200017b565b915060408401518015158114620001df57600080fd5b809150509250925092565b600060208284031215620001fd57600080fd5b62000208826200017b565b9392505050565b60805160a05160c05160e0516101005161012051615a86620004116000396000818161061101528181612fb5015261481f01526000818161031701528181610dde015281816144f901526146e5015260008181610557015281816146a901526147a901526000818161034b0152818161387d015261392d01526000818161047301528181611bfe0152818161274f0152818161280d0152818161366a01526137dd015260008181610665015281816109d801528181610b0301528181610bd501528181610cdd01528181610e6501528181610fe30152818161114e0152818161120e0152818161132e015281816114510152818161162b01528181611708015281816117e0015281816119e501528181611b1201528181611d9501528181611ed5015281816120040152818161216801528181612290015281816123c601528181612568015281816126390152818161266f0152818161293d01528181612a2101528181612a8a01528181612bde01528181612d2601528181612e6801528181612ec2015281816130a10152818161311b015281816131b401528181613341015281816134c10152818161358a0152818161372f01528181613a1a01528181613b2e01528181613dbb015281816142200152818161432801528181614492015281816148e7015281816149e801528181614aae0152614d8f0152615a866000f3fe6080604052600436106102695760003560e01c8063860aefcf11610153578063c7de38a6116100cb578063dfd594651161007f578063eb9606df11610064578063eb9606df1461081e578063f9eaee0d1461083e578063ffd9b9071461085e57600080fd5b8063dfd59465146107de578063e1f21c67146107fe57600080fd5b8063cff0ab96116100b0578063cff0ab96146106ef578063d9ccbec114610783578063dcf65482146107be57600080fd5b8063c7de38a6146106a7578063caa5c23f146106dc57600080fd5b80639c55a05411610122578063b55bb84b11610107578063b55bb84b14610633578063c12c21c014610653578063c690908a1461068757600080fd5b80639c55a054146105df578063b1836d32146105ff57600080fd5b8063860aefcf146104db5780639408b63f146105455780639b67ab30146105795780639be0536a146105bd57600080fd5b80635d91a0e0116101e65780636d19b486116101b55780637071b7c51161019a5780637071b7c51461049557806379c0ef91146104a857806382871ace146104c857600080fd5b80636d19b486146104415780636f307dc31461046157600080fd5b80635d91a0e0146103e85780635f73fbec146103fb578063601d66f61461040e5780636c8f225d1461042e57600080fd5b80633d9287fa1161023d5780635019e20a116102225780635019e20a1461039257806354fd4d50146103b257806359781034146103d557600080fd5b80633d9287fa146103055780634f0e0ef31461033957600080fd5b8062842b571461026e578063256ac915146102905780632a7ba1f7146102c55780632b7c7b11146102e5575b600080fd5b34801561027a57600080fd5b5061028e6102893660046151bf565b61087e565b005b34801561029c57600080fd5b506102b06102ab3660046151f8565b61098e565b60405190151581526020015b60405180910390f35b3480156102d157600080fd5b5061028e6102e0366004615215565b610a61565b3480156102f157600080fd5b5061028e610300366004615215565b610c3b565b34801561031157600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561034557600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102bc565b34801561039e57600080fd5b5061028e6103ad3660046151f8565b610d6a565b3480156103be57600080fd5b506103c7600281565b6040519081526020016102bc565b61028e6103e336600461522e565b61108c565b61028e6103f63660046152bb565b611275565b61028e610409366004615340565b611589565b34801561041a57600080fd5b5061028e6104293660046153d8565b6117de565b61028e61043c36600461541b565b611900565b34801561044d57600080fd5b506102b061045c3660046151f8565b611c31565b34801561046d57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b61028e6104a336600461546e565b611c60565b3480156104b457600080fd5b5061036d6104c3366004615215565b611f3e565b61028e6104d63660046152bb565b611f4b565b3480156104e757600080fd5b5060025461051c906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041682565b604080516fffffffffffffffffffffffffffffffff9384168152929091166020830152016102bc565b34801561055157600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561058557600080fd5b506004546040805167ffffffffffffffff608084901c1681526fffffffffffffffffffffffffffffffff9092166020830152016102bc565b3480156105c957600080fd5b506105d261227d565b6040516102bc91906154e2565b3480156105eb57600080fd5b5061028e6105fa36600461553c565b61228e565b34801561060b57600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561063f57600080fd5b5061028e61064e3660046151f8565b6123c4565b34801561065f57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561069357600080fd5b5061028e6106a23660046151f8565b6124c6565b3480156106b357600080fd5b506106c76106c23660046151f8565b612668565b604080519283526020830191909152016102bc565b61028e6106ea366004615557565b61289b565b3480156106fb57600080fd5b5060015461074e906fffffffffffffffffffffffffffffffff811690700100000000000000000000000000000000810460ff169071010000000000000000000000000000000000900464ffffffffff1683565b604080516fffffffffffffffffffffffffffffffff9094168452911515602084015264ffffffffff16908201526060016102bc565b34801561078f57600080fd5b506102b061079e366004615599565b600360209081526000928352604080842090915290825290205460ff1681565b3480156107ca57600080fd5b5061028e6107d93660046151f8565b612a88565b3480156107ea57600080fd5b506103c76107f93660046151f8565b612b86565b34801561080a57600080fd5b5061028e61081936600461522e565b612c6d565b34801561082a57600080fd5b5061028e6108393660046155c7565b612ec0565b34801561084a57600080fd5b506102b06108593660046151f8565b613057565b34801561086a57600080fd5b5061028e6108793660046155ee565b6131b2565b600260005414156108f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b6002600090815573ffffffffffffffffffffffffffffffffffffffff8316808252600360209081526040808420338086529083529381902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081527f9b3258bc4904fd6426b99843e206c6c7cdb1fd0f040121c25b71dafbb3851ee0910160405180910390a350506001600055565b6040517f055ee9b500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063055ee9b590602401602060405180830381865afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a43919061560b565b73ffffffffffffffffffffffffffffffffffffffff16141592915050565b60026000541415610ace576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610b5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b83919061560b565b9050610b903382846132eb565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906395373018906024015b600060405180830381600087803b158015610c1a57600080fd5b505af1158015610c2e573d6000803e3d6000fd5b5050600160005550505050565b60026000541415610ca8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610d39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5d919061560b565b9050610b90338284613411565b60026000541415610dd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000557f000000000000000000000000000000000000000000000000000000000000000015610e34576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610ec1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee5919061560b565b33600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915290205490915060ff16610f52576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f5d82613583565b5090508015610f98576040517ff713841e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b15801561102757600080fd5b505af115801561103b573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692503391507f93c70cc9715bef0d83edf2095f3595402279d274f402a73ffc17f1bcb19d863d90600090a35050600160005550565b600260005414156110f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611106613875565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063e958b70490602401602060405180830381865afa158015611197573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bb919061560b565b90506111c9848285856139b7565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401600060405180830381600087803b15801561125257600080fd5b505af1158015611266573d6000803e3d6000fd5b50506001600055505050505050565b600260005414156112e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611375573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611399919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166113e8576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806113f483613583565b915091508161142f576040517f1fdd676f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611437613875565b831561144d5761144d85858b8660016000613ae3565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632362a2d88b600185338e8e8e6040518863ffffffff1660e01b81526004016114b59796959493929190615663565b6020604051808303816000875af11580156114d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f891906156bf565b90508873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f7dfecd8419723a9d3954585a30c2a270165d70aafa146c11c1e1b88ae14390648460405161157091815260200190565b60405180910390a4505060016000555050505050505050565b600260005414156115f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ab919061560b565b90506116b5613875565b81156116cb576116cb8383338460016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d89061174a903390600090819083908d908d908d90600401615663565b6020604051808303816000875af1158015611769573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178d91906156bf565b5060405173ffffffffffffffffffffffffffffffffffffffff87169033907f460ad03b1cf79b1d64d3aefa28475f110ab66e84649c52bb41ed796b9b39198190600090a35050600160005550505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611849573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118d1576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff90811670010000000000000000000000000000000002911617600255565b6002600054141561196d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000908155606461198461ffff851687615707565b61198e9190615744565b9050611999816144f7565b6119a2816145e8565b6119ab84614668565b6119b3613875565b6040517f172c48c7000000000000000000000000000000000000000000000000000000008152600060048201819052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a64919061577f565b61ffff169150611a789050816127106157ae565b611a829083615707565b611a8c8288615707565b11611ac3576040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff86811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611b5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b81919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638587604051611bef92919091825261ffff16602082015260400190565b60405180910390a3611c2386827f00000000000000000000000000000000000000000000000000000000000000008a6139b7565b505060016000555050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526006602052604081205415155b92915050565b60026000541415611ccd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611cdb856144f7565b611ce484614668565b611ced856145e8565b600154700100000000000000000000000000000000900460ff1615611d3e576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d46613875565b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff85811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611de0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e04919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638885604051611e7292919091825261ffff16602082015260400190565b60405180910390a38215611e9057611e908484878460006001613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015611f1957600080fd5b505af1158015611f2d573d6000803e3d6000fd5b505060016000555050505050505050565b6000611c5a60058361480f565b60026000541415611fb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa15801561204b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206f919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166120be576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120c661481b565b6120fc576040517f7e52ccb400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061210782612668565b509050612112613875565b82156121285761212884848a8560016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d8906121aa908c90600290879033908f908f908f90600401615663565b6020604051808303816000875af11580156121c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ed91906156bf565b90508773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167ffada13ff2d5e1a1d9da37ad4a4130893b34e3c69c32b17f87ec31fd661b867078460405161226591815260200190565b60405180910390a45050600160005550505050505050565b6060612289600561486b565b905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612381576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561242f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612453919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146124b7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614878565b5050565b60026000541415612533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156125c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e8919061560b565b90506125f4818361489a565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401610c00565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126fc919061560b565b905060008061270b8387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156127a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127c991906156bf565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015291965061271091851690637afb010490604401602060405180830381865afa158015612863573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061288791906156bf565b6128919190615744565b9350505050915091565b60026000541415612908576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129bd919061560b565b90506129c7613875565b8115612a7e576129dc83833384600080613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015612a6557600080fd5b505af1158015612a79573d6000803e3d6000fd5b505050505b5050600160005550565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612af3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b17919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b7b576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614c92565b600080612b9283612668565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152919350600092507f000000000000000000000000000000000000000000000000000000000000000090911690633192195c906024016040805180830381865afa158015612c26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4a91906157c5565b9150819050612c5b61271084615707565b612c659190615744565b949350505050565b60026000541415612cda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063fdd5764590602401602060405180830381865afa158015612d6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d91919061560b565b73ffffffffffffffffffffffffffffffffffffffff161480612dd7575073ffffffffffffffffffffffffffffffffffffffff831660009081526006602052604090205415155b15612e0e576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612eac57600080fd5b505af1158015611c23573d6000803e3d6000fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f4f919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612fb3576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000061300a576040517f50dd11fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805464ffffffffff90921671010000000000000000000000000000000000027fffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffffff909216919091179055565b6040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063f67c5bd090602401602060405180830381865afa1580156130e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061310c91906156bf565b905080158015906131ab5750807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015613184573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a891906156bf565b16155b9392505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561321d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613241919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146132a5576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018054911515700100000000000000000000000000000000027fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff909216919091179055565b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600060448301819052917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561338c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133b091906156bf565b90506133bb816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f98274bf834d179ee08dc0604071b0dc90b54731bd5f725a5a96a39a86bce025a8360405161340391815260200190565b60405180910390a250505050565b61341a816144f7565b600154700100000000000000000000000000000000900460ff161561346b576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600160448301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561350c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061353091906156bf565b905061353b816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f9cac51154cc0d835e2f9c9d1f59a9344588cee107f4203bf58a8c797e3a58c458360405161340391815260200190565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613617919061560b565b90506000806136268387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156136c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136e491906156bf565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529195506000917f00000000000000000000000000000000000000000000000000000000000000001690633192195c906024016040805180830381865afa158015613775573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061379991906157c5565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350600092506127109187169063f9a6503090604401602060405180830381865afa158015613837573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061385b91906156bf565b6138659190615707565b9092109794965093945050505050565b34156139b5577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156138e357600080fd5b505af11580156138f7573d6000803e3d6000fd5b50506040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201523460248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16935063a9059cbb925060440190506020604051808303816000875af115801561398f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139b391906157e9565b505b565b6139c084614cb4565b6040517f830aa74500000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f0000000000000000000000000000000000000000000000000000000000000000169063830aa74590608401600060405180830381600087803b158015613a5e57600080fd5b505af1158015613a72573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fa32435755c235de2976ed44a75a2f85cb01faf0c894f639fe0c32bb9455fea8f83604051613ad591815260200190565b60405180910390a350505050565b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301523060248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b158015613b7257600080fd5b505af1158015613b86573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff871692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a28460005b8181101561441d5736888883818110613bea57613bea615806565b9050602002810190613bfc9190615835565b90506004613c0d6020830183615873565b90501015613c47576040517fe2b0e50600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b30613c5560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16141561421c578415613ca9576040517f5fb9107f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613cb86020830183615873565b613cc1916158d8565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167f59781034000000000000000000000000000000000000000000000000000000001415613e3c5760008080613d1e6020860186615873565b613d2c916004908290615920565b810190613d39919061522e565b925092509250613e34838c73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614613e2b576040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015613e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e26919061560b565b613e2d565b8b5b84846139b7565b505050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2b7c7b11000000000000000000000000000000000000000000000000000000001415613ec757600194506000613e996020840184615873565b613ea7916004908290615920565b810190613eb49190615215565b9050613ec1898983613411565b50614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2a7ba1f7000000000000000000000000000000000000000000000000000000001415613f80578415613f49576040517fc0b0caa800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613f586020840184615873565b613f66916004908290615920565b810190613f739190615215565b9050613ec18989836132eb565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f233a8caa0000000000000000000000000000000000000000000000000000000014156140e457600080613fda6020850185615873565b613fe8916004908290615920565b810190613ff5919061594a565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c8116600483015292945090925082918416906370a0823190602401602060405180830381865afa158015614069573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061408d91906156bf565b10156140dd576040517fa5ac537300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016108e7565b5050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fc690908a00000000000000000000000000000000000000000000000000000000141561416457600061413d6020840184615873565b61414b916004908290615920565b81019061415891906151f8565b9050613ec1888261489a565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f23e27a640000000000000000000000000000000000000000000000000000000014156141e45760006141bd6020840184615873565b6141cb916004908290615920565b8101906141d891906151f8565b9050613ec18882614d42565b6040517f1e9e7e7a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50614414565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff68754361426760208501856151f8565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156142d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142f4919061560b565b73ffffffffffffffffffffffffffffffffffffffff16148061436d575073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001661435560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16145b156143a4576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6144126143b46020830183615873565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506143f69250505060208401846151f8565b73ffffffffffffffffffffffffffffffffffffffff1690614e39565b505b50600101613bcf565b506040517f60c8e8938c9a0c0d88a98d6f1c562ce68077e12bf3edb8047378f2f736cb45b490600090a16040517fe1998cf900000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff86811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b1580156144d657600080fd5b505af11580156144ea573d6000803e3d6000fd5b5050505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006139b3576001546fffffffffffffffffffffffffffffffff9081169081146124c257600454608081901c906fffffffffffffffffffffffffffffffff16600067ffffffffffffffff8316431461456e578461458a565b61458a6fffffffffffffffffffffffffffffffff831686615976565b9050838111156145c6576040517f675f1a5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff81164360801b176004555050505050565b6002546fffffffffffffffffffffffffffffffff16811080614631575060025470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681115b156139b3576040517fce16799400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61467061481b565b156146a7576040517f63fc31c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1615614806577f0000000000000000000000000000000000000000000000000000000000000000801561472657503373ffffffffffffffffffffffffffffffffffffffff821614155b1561475d576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600160248301527f00000000000000000000000000000000000000000000000000000000000000001690639dc29fac90604401600060405180830381600087803b1580156147ed57600080fd5b505af1158015614801573d6000803e3d6000fd5b505050505b6139b381614cb4565b60006131ab8383614e7b565b60007f0000000000000000000000000000000000000000000000000000000000000000801561228957505060015471010000000000000000000000000000000000900464ffffffffff1642101590565b606060006131ab83614ea5565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f01565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561492b57600080fd5b505af115801561493f573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527fdf498aa1c340e992665d6fb4f3be8436d452c45a630cb6d7fab7963da39bac8793500190505b60405180910390a15050565b6040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600091829160019183917f00000000000000000000000000000000000000000000000000000000000000001690638991b2f190602401602060405180830381865afa158015614a2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a5391906156bf565b90505b808211614c895780821615614c7d576040517fe75538c700000000000000000000000000000000000000000000000000000000815260048101839052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e75538c7906024016040805180830381865afa158015614af4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b18919061577f565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529294509092506000918416906370a0823190602401602060405180830381865afa158015614b8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bb191906156bf565b90506001811115614c79576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff8481166024830152600091908b169063f9a6503090604401602060405180830381865afa158015614c33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c5791906156bf565b978801979050614c6b61ffff841682615707565b614c759088615976565b9650505b5050505b600182901b9150614a56565b50509250929050565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f50565b3373ffffffffffffffffffffffffffffffffffffffff821614801590614d0b575033600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16155b156139b3576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b158015614dd357600080fd5b505af1158015614de7573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527f69db9e9764da61b6681b89fb0f5be018506e0342036e56b59c3015a620d60977935001905061498d565b60606131ab83836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250615043565b6000826000018281548110614e9257614e92615806565b9060005260206000200154905092915050565b606081600001805480602002602001604051908101604052809291908181526020018280548015614ef557602002820191906000526020600020905b815481526020019060010190808311614ee1575b50505050509050919050565b6000818152600183016020526040812054614f4857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611c5a565b506000611c5a565b60008181526001830160205260408120548015615039576000614f746001836157ae565b8554909150600090614f88906001906157ae565b9050818114614fed576000866000018281548110614fa857614fa8615806565b9060005260206000200154905080876000018481548110614fcb57614fcb615806565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080614ffe57614ffe61598e565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611c5a565b6000915050611c5a565b6060612c65848460008585843b6150b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108e7565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516150df91906159ed565b60006040518083038185875af1925050503d806000811461511c576040519150601f19603f3d011682016040523d82523d6000602084013e615121565b606091505b509150915061513182828661513c565b979650505050505050565b6060831561514b5750816131ab565b82511561515b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e791906159ff565b73ffffffffffffffffffffffffffffffffffffffff811681146139b357600080fd5b80151581146139b357600080fd5b600080604083850312156151d257600080fd5b82356151dd8161518f565b915060208301356151ed816151b1565b809150509250929050565b60006020828403121561520a57600080fd5b81356131ab8161518f565b60006020828403121561522757600080fd5b5035919050565b60008060006060848603121561524357600080fd5b833561524e8161518f565b9250602084013561525e8161518f565b929592945050506040919091013590565b60008083601f84011261528157600080fd5b50813567ffffffffffffffff81111561529957600080fd5b6020830191508360208260051b85010111156152b457600080fd5b9250929050565b60008060008060008060a087890312156152d457600080fd5b86356152df8161518f565b955060208701356152ef8161518f565b9450604087013593506060870135615306816151b1565b9250608087013567ffffffffffffffff81111561532257600080fd5b61532e89828a0161526f565b979a9699509497509295939492505050565b60008060008060006080868803121561535857600080fd5b85356153638161518f565b945060208601359350604086013561537a816151b1565b9250606086013567ffffffffffffffff81111561539657600080fd5b6153a28882890161526f565b969995985093965092949392505050565b80356fffffffffffffffffffffffffffffffff811681146153d357600080fd5b919050565b600080604083850312156153eb57600080fd5b6153f4836153b3565b9150615402602084016153b3565b90509250929050565b61ffff811681146139b357600080fd5b6000806000806080858703121561543157600080fd5b8435935060208501356154438161518f565b925060408501356154538161540b565b915060608501356154638161540b565b939692955090935050565b60008060008060006080868803121561548657600080fd5b8535945060208601356154988161518f565b9350604086013567ffffffffffffffff8111156154b457600080fd5b6154c08882890161526f565b90945092505060608601356154d48161540b565b809150509295509295909350565b6020808252825182820181905260009190848201906040850190845b8181101561553057835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016154fe565b50909695505050505050565b60006020828403121561554e57600080fd5b6131ab826153b3565b6000806020838503121561556a57600080fd5b823567ffffffffffffffff81111561558157600080fd5b61558d8582860161526f565b90969095509350505050565b600080604083850312156155ac57600080fd5b82356155b78161518f565b915060208301356151ed8161518f565b6000602082840312156155d957600080fd5b813564ffffffffff811681146131ab57600080fd5b60006020828403121561560057600080fd5b81356131ab816151b1565b60006020828403121561561d57600080fd5b81516131ab8161518f565b6003811061565f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b73ffffffffffffffffffffffffffffffffffffffff888116825260e082019061568f602084018a615628565b6040830197909752948616606082015292909416608083015260a082015291151560c09092019190915292915050565b6000602082840312156156d157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561573f5761573f6156d8565b500290565b60008261577a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000806040838503121561579257600080fd5b825161579d8161518f565b60208401519092506151ed8161540b565b6000828210156157c0576157c06156d8565b500390565b600080604083850312156157d857600080fd5b505080516020909101519092909150565b6000602082840312156157fb57600080fd5b81516131ab816151b1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc183360301811261586957600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126158a857600080fd5b83018035915067ffffffffffffffff8211156158c357600080fd5b6020019150368190038213156152b457600080fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156159185780818660040360031b1b83161692505b505092915050565b6000808585111561593057600080fd5b8386111561593d57600080fd5b5050820193919092039150565b6000806040838503121561595d57600080fd5b82356159688161518f565b946020939093013593505050565b60008219821115615989576159896156d8565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60005b838110156159d85781810151838201526020016159c0565b838111156159e7576000848401525b50505050565b600082516158698184602087016159bd565b6020815260008251806020840152615a1e8160408501602087016159bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea2646970667358221220a3f4a705ab580a6ada1e438cd2ee4abc001b62d1d171fce12c41994900fef21664736f6c634300080a003360c06040523480156200001157600080fd5b50604051620026cf380380620026cf833981016040819052620000349162000324565b82828281600090805190602001906200004f92919062000194565b5080516200006590600190602084019062000194565b50506006805460ff19169055506001600160a01b0381166200009a57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000d9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ff9190620003a1565b6001600160a01b03166080816001600160a01b03168152505050826001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000158573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200017e9190620003a1565b6001600160a01b031660a0525062000403915050565b828054620001a290620003c6565b90600052602060002090601f016020900481019282620001c6576000855562000211565b82601f10620001e157805160ff191683800117855562000211565b8280016001018555821562000211579182015b8281111562000211578251825591602001919060010190620001f4565b506200021f92915062000223565b5090565b5b808211156200021f576000815560010162000224565b80516001600160a01b03811681146200025257600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200027f57600080fd5b81516001600160401b03808211156200029c576200029c62000257565b604051601f8301601f19908116603f01168101908282118183101715620002c757620002c762000257565b81604052838152602092508683858801011115620002e457600080fd5b600091505b83821015620003085785820183015181830184015290820190620002e9565b838211156200031a5760008385830101525b9695505050505050565b6000806000606084860312156200033a57600080fd5b62000345846200023a565b60208501519093506001600160401b03808211156200036357600080fd5b62000371878388016200026d565b935060408601519150808211156200038857600080fd5b5062000397868287016200026d565b9150509250925092565b600060208284031215620003b457600080fd5b620003bf826200023a565b9392505050565b600181811c90821680620003db57607f821691505b60208210811415620003fd57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a0516122756200045a6000396000610a9a015260008181610386015281816106db0152818161089101528181610f15015281816110010152818161115b015281816112f401526114f901526122756000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80636352211e116100f9578063a0bcfc7f11610097578063b88d4fde11610071578063b88d4fde146103a8578063c87b56dd146103b6578063e985e9c5146103c9578063fca3b5aa1461041257600080fd5b8063a0bcfc7f14610360578063a22cb46514610373578063a50cf2c81461038157600080fd5b80638456cb59116100d35780638456cb591461032a57806389406ff51461033257806395d89b41146103455780639dc29fac1461034d57600080fd5b80636352211e146102fc5780636c0360eb1461030f57806370a082311461031757600080fd5b80633f4ba83a116101665780634610f6ac116101405780634610f6ac146102b357806354fd4d50146102c6578063576cd2d1146102ce5780635c975abb146102f157600080fd5b80633f4ba83a1461029857806340c10f19146102a057806342842e0e1461028a57600080fd5b8063081812fc116101a2578063081812fc1461024b578063095ea7b31461025e57806318160ddd1461027357806323b872dd1461028a57600080fd5b806301ffc9a7146101c957806306fdde03146101f15780630754617214610206575b600080fd5b6101dc6101d7366004611cc6565b610425565b60405190151581526020015b60405180910390f35b6101f961050a565b6040516101e89190611d38565b6008546102269073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e8565b610226610259366004611d89565b61059c565b61027161026c366004611dc7565b61067b565b005b61027c60075481565b6040519081526020016101e8565b61027161026c366004611df3565b6102716106ad565b6102716102ae366004611dc7565b61079b565b6102716102c1366004611e34565b610863565b61027c600181565b6101dc6102dc366004611e34565b60096020526000908152604090205460ff1681565b60065460ff166101dc565b61022661030a366004611d89565b610cd9565b6101f9610d8b565b61027c610325366004611e34565b610e19565b610271610ee7565b610271610340366004611e34565b610fd3565b6101f9611103565b61027161035b366004611dc7565b611112565b61027161036e366004611e51565b6112c6565b61027161026c366004611ed1565b6102267f000000000000000000000000000000000000000000000000000000000000000081565b61027161026c366004611f39565b6101f96103c4366004611d89565b6113bb565b6101dc6103d7366004612037565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205460ff1690565b610271610420366004611e34565b6114cb565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd0000000000000000000000000000000000000000000000000000000014806104b857507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061050457507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60606000805461051990612065565b80601f016020809104026020016040519081016040528092919081815260200182805461054590612065565b80156105925780601f1061056757610100808354040283529160200191610592565b820191906000526020600020905b81548152906001019060200180831161057557829003601f168201915b5050505050905090565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff16610652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084015b60405180910390fd5b5060009081526004602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b6040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa158015610737573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075b91906120b9565b610791576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107996115f6565b565b60085473ffffffffffffffffffffffffffffffffffffffff1633146107ec576040517f5c2967f500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006107f783610e19565b905060005b82811015610846576000816108278473ffffffffffffffffffffffffffffffffffffffff8816612105565b6108319190612105565b905061083d85826116d7565b506001016107fc565b5081600760008282546108599190612105565b9091555050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156108ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091191906120b9565b610947576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163b610995576040517f9c01f6a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff1663c12c21c06040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610a1c575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610a199181019061211d565b60015b610a52576040517f9c01f6a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f6fbc6f6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192507f000000000000000000000000000000000000000000000000000000000000000090911690636fbc6f6b90602401602060405180830381865afa158015610ae3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0791906120b9565b1580610bad57503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16639408b63f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b94919061211d565b73ffffffffffffffffffffffffffffffffffffffff1614155b80610c5257508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c39919061211d565b73ffffffffffffffffffffffffffffffffffffffff1614155b15610c89576040517f9c01f6a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff16600090815260096020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff1680610504576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e00000000000000000000000000000000000000000000006064820152608401610649565b600a8054610d9890612065565b80601f0160208091040260200160405190810160405280929190818152602001828054610dc490612065565b8015610e115780601f10610de657610100808354040283529160200191610e11565b820191906000526020600020905b815481529060010190602001808311610df457829003601f168201915b505050505081565b600073ffffffffffffffffffffffffffffffffffffffff8216610ebe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152608401610649565b5073ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015610f71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9591906120b9565b610fcb576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610799611899565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561105d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108191906120b9565b6110b7576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff16600090815260096020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b60606001805461051990612065565b3360009081526009602052604090205460ff161580156111dd57506040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156111b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111db91906120b9565b155b15611214576040517f1e0d048500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061121f83610e19565b90508181101561125b576040517f90c9142d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b828110156112b357600060018261128b8573ffffffffffffffffffffffffffffffffffffffff8916612105565b611295919061213a565b61129f919061213a565b90506112aa81611959565b5060010161125e565b508160076000828254610859919061213a565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611350573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137491906120b9565b6113aa576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113b6600a8383611c0f565b505050565b60008181526002602052604090205460609073ffffffffffffffffffffffffffffffffffffffff1661146f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006064820152608401610649565b6000611479611a26565b9050600081511161149957604051806020016040528060008152506114c4565b806114a384611a35565b6040516020016114b4929190612151565b6040516020818303038152906040525b9392505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611555573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157991906120b9565b6115af576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60065460ff16611662576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610649565b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b73ffffffffffffffffffffffffffffffffffffffff8216611754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610649565b60008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff16156117e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610649565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805460019290611816908490612105565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60065460ff1615611906576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610649565b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586116ad3390565b600061196482610cd9565b9050611971600083611b6f565b73ffffffffffffffffffffffffffffffffffffffff811660009081526003602052604081208054600192906119a790849061213a565b909155505060008281526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555183919073ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6060600a805461051990612065565b606081611a7557505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611a9f5780611a8981612180565b9150611a989050600a836121e8565b9150611a79565b60008167ffffffffffffffff811115611aba57611aba611f0a565b6040519080825280601f01601f191660200182016040528015611ae4576020820181803683370190505b5090505b8415611b6757611af960018361213a565b9150611b06600a866121fc565b611b11906030612105565b60f81b818381518110611b2657611b26612210565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611b60600a866121e8565b9450611ae8565b949350505050565b600081815260046020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091558190611bc982610cd9565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b828054611c1b90612065565b90600052602060002090601f016020900481019282611c3d5760008555611ca1565b82601f10611c74578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00823516178555611ca1565b82800160010185558215611ca1579182015b82811115611ca1578235825591602001919060010190611c86565b50611cad929150611cb1565b5090565b5b80821115611cad5760008155600101611cb2565b600060208284031215611cd857600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146114c457600080fd5b60005b83811015611d23578181015183820152602001611d0b565b83811115611d32576000848401525b50505050565b6020815260008251806020840152611d57816040850160208701611d08565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b600060208284031215611d9b57600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff81168114611dc457600080fd5b50565b60008060408385031215611dda57600080fd5b8235611de581611da2565b946020939093013593505050565b600080600060608486031215611e0857600080fd5b8335611e1381611da2565b92506020840135611e2381611da2565b929592945050506040919091013590565b600060208284031215611e4657600080fd5b81356114c481611da2565b60008060208385031215611e6457600080fd5b823567ffffffffffffffff80821115611e7c57600080fd5b818501915085601f830112611e9057600080fd5b813581811115611e9f57600080fd5b866020828501011115611eb157600080fd5b60209290920196919550909350505050565b8015158114611dc457600080fd5b60008060408385031215611ee457600080fd5b8235611eef81611da2565b91506020830135611eff81611ec3565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060008060808587031215611f4f57600080fd5b8435611f5a81611da2565b93506020850135611f6a81611da2565b925060408501359150606085013567ffffffffffffffff80821115611f8e57600080fd5b818701915087601f830112611fa257600080fd5b813581811115611fb457611fb4611f0a565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715611ffa57611ffa611f0a565b816040528281528a602084870101111561201357600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000806040838503121561204a57600080fd5b823561205581611da2565b91506020830135611eff81611da2565b600181811c9082168061207957607f821691505b602082108114156120b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156120cb57600080fd5b81516114c481611ec3565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115612118576121186120d6565b500190565b60006020828403121561212f57600080fd5b81516114c481611da2565b60008282101561214c5761214c6120d6565b500390565b60008351612163818460208801611d08565b835190830190612177818360208801611d08565b01949350505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156121b2576121b26120d6565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826121f7576121f76121b9565b500490565b60008261220b5761220b6121b9565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea2646970667358221220ffdd83a2fc9a158347ca248f021e63fcef3a7985b3deb793f75cd1835b068aab64736f6c634300080a003360a060405234801561001057600080fd5b506040516106ca3803806106ca83398101604081905261002f9161006c565b60009190915560ff166080526001805460506001600160501b031991821681179092556004805490911690911790554260028190556003556100a2565b6000806040838503121561007f57600080fd5b82519150602083015160ff8116811461009757600080fd5b809150509250929050565b60805161060e6100bc600039600060d3015261060e6000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80639a6fc8f511610081578063d62ada111161005b578063d62ada11146102dc578063f7a30806146102f4578063feaf968c1461030757600080fd5b80639a6fc8f5146101cd578063bd18ad531461023a578063cd653afc1461024d57600080fd5b806354fd4d50116100b257806354fd4d501461012d57806367e8d83d1461013c5780637284e4161461018e57600080fd5b8063313ce567146100ce5780633fd0875f1461010c575b600080fd5b6100f57f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020015b60405180910390f35b6004546a0100000000000000000000900460ff166040516101039190610441565b60405160018152602001610103565b61018c61014a366004610482565b600480549115156c01000000000000000000000000027fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff909216919091179055565b005b604080518082018252600c81527f7072696365206f7261636c6500000000000000000000000000000000000000006020820152905161010391906104ab565b6102036101db36600461053d565b60015460005460025460035460045469ffffffffffffffffffff948516941691939590929450565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610103565b61018c610248366004610558565b61030f565b61018c61025b366004610579565b6001805469ffffffffffffffffffff9586167fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090911617905560029290925560035560048054919092167fffffffffffffffffffffffffffffffffffffffff00ff00000000000000000000909116176b020000000000000000000000179055565b6102e461035f565b6040519015158152602001610103565b61018c6103023660046105bf565b600055565b610203610385565b600480548291907fffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff166b01000000000000000000000083600281111561035757610357610412565b021790555050565b600454600090610380906b010000000000000000000000900460ff166103d6565b905090565b60008060008060006004600c9054906101000a900460ff16156103a757600080fd5b505060015460005460025460035460045469ffffffffffffffffffff9485169893975091955093509190911690565b600060028260028111156103ec576103ec610412565b14156103f757600080fd5b600182600281111561040b5761040b610412565b1492915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016006831061047c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561049457600080fd5b813580151581146104a457600080fd5b9392505050565b600060208083528351808285015260005b818110156104d8578581018301518582016040015282016104bc565b818111156104ea576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803569ffffffffffffffffffff8116811461053857600080fd5b919050565b60006020828403121561054f57600080fd5b6104a48261051e565b60006020828403121561056a57600080fd5b8135600381106104a457600080fd5b6000806000806080858703121561058f57600080fd5b6105988561051e565b935060208501359250604085013591506105b46060860161051e565b905092959194509250565b6000602082840312156105d157600080fd5b503591905056fea264697066735822122014874f7a973b86501c4c1a8be32490fe902c8f088ee234d25f9b2497e19f9e5264736f6c634300080a0033a2646970667358221220d8fdaadc825c43ac2783715ebcfe33e7b0ce3a396ac7717d65e4c95e98b6cf7f64736f6c634300080a003360806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d000117905534801561003957600080fd5b50600054604080516318caf8e360e31b815273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660048083019190915260248201929092526044810191909152632aa9a2a960e11b6064820152620100009091046001600160a01b03169063c657c71890608401600060405180830381600087803b1580156100ba57600080fd5b505af11580156100ce573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b81527390f79bf6eb2c4f870365e785982e1f101e93b90660048201526024810191909152600660448201526511949251539160d21b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561014f57600080fd5b505af1158015610163573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b8152733c44cdddb6a900fa2b585dd299e03d12fa4293bc60048201526024810191909152600a6044820152692624a8aaa4a220aa27a960b11b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b1580156101e857600080fd5b505af11580156101fc573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b815273c4375b7de8af5a38a93548eb8453a498222c4ff260048201526024810191909152600c60448201526b44554d425f4144445245535360a01b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561028357600080fd5b505af1158015610297573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b8152739965507d1a55bcc2695c58ba16fb37d819b0a4dc60048201526024810191909152600760448201526620a220a82a22a960c91b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561031957600080fd5b505af115801561032d573d6000803e3d6000fd5b505050506102a6806103406000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063ba414fa61461003b578063fa7626d414610057575b600080fd5b610043610064565b604051901515815260200160405180910390f35b6000546100439060ff1681565b60008054610100900460ff16156100845750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156101bf5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610129917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016101ff565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526101619161023b565b6000604051808303816000865af19150503d806000811461019e576040519150601f19603f3d011682016040523d82523d6000602084013e6101a3565b606091505b50915050808060200190518101906101bb919061024e565b9150505b919050565b6000815160005b818110156101e557602081850181015186830152016101cb565b818111156101f4576000828601525b509290920192915050565b7fffffffff0000000000000000000000000000000000000000000000000000000083168152600061023360048301846101c4565b949350505050565b600061024782846101c4565b9392505050565b60006020828403121561026057600080fd5b8151801515811461024757600080fdfea2646970667358221220293f55a0ef7b60c31a89dbc50e3339c80a8fdb1f9567614b200e97598226671f64736f6c634300080a003360806040523480156200001157600080fd5b506040516201110538038062011105833981016040819052620000349162000811565b6200003f3362000734565b6040516200004d9062000784565b604051809103906000f0801580156200006a573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b039283169081179091556040516310dc138160e31b81529184166004830152906386e09c0890602401600060405180830381600087803b158015620000c457600080fd5b505af1158015620000d9573d6000803e3d6000fd5b50506001546040516301ed651160e41b81526001600160a01b0385811660048301529091169250631ed651109150602401600060405180830381600087803b1580156200012557600080fd5b505af11580156200013a573d6000803e3d6000fd5b505050506040516200014c9062000792565b604051809103906000f08015801562000169573d6000803e3d6000fd5b50600280546001600160a01b0319166001600160a01b039283169081179091556001546040516376aad60560e01b81526004810192909252909116906376aad60590602401600060405180830381600087803b158015620001c957600080fd5b505af1158015620001de573d6000803e3d6000fd5b5050600154604051600093506001600160a01b0390911691506200020290620007a0565b6001600160a01b039091168152602001604051809103906000f0801580156200022f573d6000803e3d6000fd5b5060015460405163338f12b960e21b81526001600160a01b03808416600483015292935091169063ce3c4ae490602401600060405180830381600087803b1580156200027a57600080fd5b505af11580156200028f573d6000803e3d6000fd5b5050600154604051600093506001600160a01b039091169150620002b390620007ae565b6001600160a01b039091168152602001604051809103906000f080158015620002e0573d6000803e3d6000fd5b5060015460405163c5120b3960e01b81526001600160a01b03808416600483015292935091169063c5120b3990602401600060405180830381600087803b1580156200032b57600080fd5b505af115801562000340573d6000803e3d6000fd5b5050600154604051606093506001600160a01b03909116915082906200036690620007bc565b6200037392919062000849565b604051809103906000f08015801562000390573d6000803e3d6000fd5b50600380546001600160a01b0319166001600160a01b0392831690811790915560015460405163530e784f60e01b815260048101929092529091169063530e784f90602401600060405180830381600087803b158015620003f057600080fd5b505af115801562000405573d6000803e3d6000fd5b5050600154604051600093506001600160a01b0390911691506200042990620007ca565b6001600160a01b039091168152602001604051809103906000f08015801562000456573d6000803e3d6000fd5b506001546040516356ee0d3b60e11b81526001600160a01b03808416600483015292935091169063addc1a7690602401600060405180830381600087803b158015620004a157600080fd5b505af1158015620004b6573d6000803e3d6000fd5b5050600154604051600093506001600160a01b039091169150620004da90620007d8565b6001600160a01b039091168152602001604051809103906000f08015801562000507573d6000803e3d6000fd5b506001546040516321da583760e01b81526001600160a01b0380841660048301529293509116906321da583790602401600060405180830381600087803b1580156200055257600080fd5b505af115801562000567573d6000803e3d6000fd5b505050506000306040516200057c90620007e6565b6001600160a01b039091168152602001604051809103906000f080158015620005a9573d6000803e3d6000fd5b50600154604051631795d5b360e31b81526001600160a01b03808416600483015292935091169063bcaead9890602401600060405180830381600087803b158015620005f457600080fd5b505af115801562000609573d6000803e3d6000fd5b505060405163f2fde38b60e01b81523360048201526001600160a01b038416925063f2fde38b9150602401600060405180830381600087803b1580156200064f57600080fd5b505af115801562000664573d6000803e3d6000fd5b505060015460405163f2fde38b60e01b81523360048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b158015620006ae57600080fd5b505af1158015620006c3573d6000803e3d6000fd5b505060025460405163f2fde38b60e01b81523360048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b1580156200070d57600080fd5b505af115801562000722573d6000803e3d6000fd5b505050505050505050505050620008b2565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610fcd80620010dd83390190565b61098c80620020aa83390190565b610f508062002a3683390190565b614da6806200398683390190565b611b45806200872c83390190565b612ced806200a27183390190565b611627806200cf5e83390190565b612b80806200e58583390190565b80516001600160a01b03811681146200080c57600080fd5b919050565b600080604083850312156200082557600080fd5b6200083083620007f4565b91506200084060208401620007f4565b90509250929050565b6001600160a01b0383811682526040602080840182905284518483018190526000938683019290916060870190865b81811015620008a3578551805186168452840151851684840152948301949186019160010162000878565b50909998505050505050505050565b61081b80620008c26000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80638874ff1f1161005b5780638874ff1f146100f55780638da5cb5b14610108578063de28735914610126578063f2fde38b1461014657600080fd5b80632630c12f146100825780632954018c146100cb578063715018a6146100eb575b600080fd5b6003546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6001546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b6100f3610159565b005b6100f3610103366004610658565b6101eb565b60005473ffffffffffffffffffffffffffffffffffffffff166100a2565b6002546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b6100f3610154366004610734565b6103e3565b60005473ffffffffffffffffffffffffffffffffffffffff1633146101df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6101e96000610513565b565b60005473ffffffffffffffffffffffffffffffffffffffff16331461026c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101d6565b60005b815181101561035c57600354825173ffffffffffffffffffffffffffffffffffffffff9091169063e8a97a3e908490849081106102ae576102ae610756565b6020026020010151600001518484815181106102cc576102cc610756565b6020026020010151602001516040518363ffffffff1660e01b815260040161031792919073ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b600060405180830381600087803b15801561033157600080fd5b505af1158015610345573d6000803e3d6000fd5b50505050808061035490610785565b91505061026f565b506002546040517ff2fde38b00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063f2fde38b90602401600060405180830381600087803b1580156103c857600080fd5b505af11580156103dc573d6000803e3d6000fd5b5050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101d6565b73ffffffffffffffffffffffffffffffffffffffff8116610507576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016101d6565b61051081610513565b50565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156105da576105da610588565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561062757610627610588565b604052919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461065357600080fd5b919050565b6000602080838503121561066b57600080fd5b823567ffffffffffffffff8082111561068357600080fd5b818501915085601f83011261069757600080fd5b8135818111156106a9576106a9610588565b6106b7848260051b016105e0565b818152848101925060069190911b8301840190878211156106d757600080fd5b928401925b8184101561072957604084890312156106f55760008081fd5b6106fd6105b7565b6107068561062f565b815261071386860161062f565b81870152835260409390930192918401916106dc565b979650505050505050565b60006020828403121561074657600080fd5b61074f8261062f565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156107de577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea26469706673582212205ee75e57bb635aa49a1758f4ab0b04182a73115bff08f420c56a8ddb433c029364736f6c634300080a0033608060405234801561001057600080fd5b5061001a3361005f565b60405130906f20a2222922a9a9afa82927ab24a222a960811b907fb37614c7d254ea8d16eb81fa11dddaeb266aa8ba4917980859c7740aff30c69190600090a36100af565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610f0f806100be6000396000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c806377532ed9116100e3578063bcaead981161008c578063ce3c4ae411610066578063ce3c4ae414610308578063f2fde38b1461031b578063fca513a81461032e57600080fd5b8063bcaead98146102da578063c5120b39146102ed578063c513c9bb1461030057600080fd5b80639068a868116100bd5780639068a868146102b7578063addc1a76146102bf578063affd9243146102d257600080fd5b806377532ed91461027e57806386e09c08146102865780638da5cb5b1461029957600080fd5b80634c252f9111610145578063699f200f1161011f578063699f200f1461022d578063715018a61461026357806376aad6051461026b57600080fd5b80634c252f91146101fc578063530e784f1461020457806354fd4d501461021757600080fd5b80631ed65110116101765780631ed65110146101cc57806321da5837146101e157806326c74fc3146101f457600080fd5b8063060678c21461019257806308737695146101c4575b600080fd5b61019a610336565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61019a610366565b6101df6101da366004610e10565b610391565b005b6101df6101ef366004610e10565b610444565b61019a6104ef565b61019a61051a565b6101df610212366004610e10565b610545565b61021f600281565b6040519081526020016101bb565b61019a61023b366004610e4d565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6101df6105f0565b6101df610279366004610e10565b61067d565b61019a610728565b6101df610294366004610e10565b610753565b60005473ffffffffffffffffffffffffffffffffffffffff1661019a565b61019a6107fe565b6101df6102cd366004610e10565b610829565b61019a6108d4565b6101df6102e8366004610e10565b6108ff565b6101df6102fb366004610e10565b6109aa565b61019a610a55565b6101df610316366004610e10565b610a80565b6101df610329366004610e10565b610b2b565b61019a610c58565b60006103617f444154415f434f4d50524553534f520000000000000000000000000000000000610c7f565b905090565b60006103617f41434c0000000000000000000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610417576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6104417f54524541535552595f434f4e545241435400000000000000000000000000000082610d1d565b50565b60005473ffffffffffffffffffffffffffffffffffffffff1633146104c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f574554485f47415445574159000000000000000000000000000000000000000082610d1d565b60006103617f54524541535552595f434f4e5452414354000000000000000000000000000000610c7f565b60006103617f574554485f544f4b454e00000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f50524943455f4f5241434c45000000000000000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610671576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b61067b6000610d9b565b565b60005473ffffffffffffffffffffffffffffffffffffffff1633146106fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f41434c000000000000000000000000000000000000000000000000000000000082610d1d565b60006103617f574554485f474154455741590000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146107d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f574554485f544f4b454e0000000000000000000000000000000000000000000082610d1d565b60006103617f4143434f554e545f464143544f52590000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146108aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f4143434f554e545f464143544f5259000000000000000000000000000000000082610d1d565b60006103617f474541525f544f4b454e00000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610980576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f474541525f544f4b454e0000000000000000000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f444154415f434f4d50524553534f52000000000000000000000000000000000082610d1d565b60006103617f434f4e5452414354535f52454749535445520000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610b01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f434f4e5452414354535f5245474953544552000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610bac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b73ffffffffffffffffffffffffffffffffffffffff8116610c4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161040e565b61044181610d9b565b60006103617f50524943455f4f5241434c4500000000000000000000000000000000000000005b6000818152600160209081526040808320548151808301909252600382527f41503100000000000000000000000000000000000000000000000000000000009282019290925273ffffffffffffffffffffffffffffffffffffffff9091169081610d16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040e9190610e66565b5092915050565b60008281526001602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091559051909184917fb37614c7d254ea8d16eb81fa11dddaeb266aa8ba4917980859c7740aff30c6919190a35050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215610e2257600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610e4657600080fd5b9392505050565b600060208284031215610e5f57600080fd5b5035919050565b600060208083528351808285015260005b81811015610e9357858101830151858201604001528201610e77565b81811115610ea5576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea264697066735822122083c228af017c6f5cf8c395cdf7a53276ff56fdd4f4313c39f680ab73bd75417364736f6c634300080a0033608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61090e8061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063732818191161008c578063adce758d11610066578063adce758d14610215578063ba306df114610228578063d4eb5db01461023b578063f2fde38b1461027457600080fd5b806373281819146101b7578063819ad68e146101da5780638da5cb5b146101ed57600080fd5b806354fd4d50116100bd57806354fd4d501461016a5780635f259aba14610180578063715018a6146101af57600080fd5b806335914829146100e45780633a41ec641461011c5780634910832f14610155575b600080fd5b6101076100f236600461089b565b60016020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61010761012a36600461089b565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205460ff1690565b61016861016336600461089b565b610287565b005b610172600181565b604051908152602001610113565b61010761018e36600461089b565b60005473ffffffffffffffffffffffffffffffffffffffff91821691161490565b610168610387565b6101076101c536600461089b565b60026020526000908152604090205460ff1681565b6101686101e836600461089b565b610414565b60005460405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610113565b61016861022336600461089b565b61050c565b61016861023636600461089b565b610601565b61010761024936600461089b565b73ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205460ff1690565b61016861028236600461089b565b6106f6565b60005473ffffffffffffffffffffffffffffffffffffffff16331461030d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909217909155517fae26b1cfe9454ba87274a4e8330b6654684362d0f3d7bbd17f7449a1d38387c69190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610408576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b6104126000610826565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517fd400da6c0c0a894dacc0981730b88af0545d00272ee8fff1437bf560ff245fc49190a250565b60005473ffffffffffffffffffffffffffffffffffffffff16331461058d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f1998397e7203f7baca9d6f41b9e4da6e768daac5caad4234fb9bf5869d2715459190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610682576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526001602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f28b01395b7e25d20552a0c8dc8ecd3b1d4abc986f14dad7885fd45b6fd73c8d99190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811661081a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610304565b61082381610826565b50565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156108ad57600080fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146108d157600080fd5b939250505056fea26469706673582212204712efbfe997070def77285a5b8753bc882b62da2133ce1937ad26cd2b48e49864736f6c634300080a003360a060405234801561001057600080fd5b50604051610f50380380610f5083398101604081905261002f916100d7565b6000805460ff19169055806001600160a01b03811661006157604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa15801561009f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100c391906100d7565b6001600160a01b0316608052506101079050565b6000602082840312156100e957600080fd5b81516001600160a01b038116811461010057600080fd5b9392505050565b608051610e1261013e600039600081816101e2015281816102b20152818161040f0152818161057801526108510152610e126000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80638456cb5911610097578063b4ac686011610066578063b4ac686014610217578063c29277cd1461021f578063d914cd4b14610227578063e26b2f631461023a57600080fd5b80638456cb59146101cd57806394144856146101d5578063a50cf2c8146101dd578063ac4afa381461020457600080fd5b80635b16ebb7116100d35780635b16ebb7146101575780635c975abb1461018a578063673a2a1f146101955780636fbc6f6b146101aa57600080fd5b80631e16e4fc146100fa5780633f4ba83a1461013757806354fd4d5014610141575b600080fd5b61010d610108366004610c97565b61024d565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61013f610284565b005b610149600181565b60405190815260200161012e565b61017a610165366004610cb0565b60026020526000908152604090205460ff1681565b604051901515815260200161012e565b60005460ff1661017a565b61019d610372565b60405161012e9190610ced565b61017a6101b8366004610cb0565b60046020526000908152604090205460ff1681565b61013f6103e1565b61019d6104cd565b61010d7f000000000000000000000000000000000000000000000000000000000000000081565b61010d610212366004610c97565b61053a565b600154610149565b600354610149565b61013f610235366004610cb0565b61054a565b61013f610248366004610cb0565b610823565b6003818154811061025d57600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa15801561030e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103329190610d47565b610368576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610370610af6565b565b606060018054806020026020016040519081016040528092919081815260200182805480156103d757602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116103ac575b5050505050905090565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561046b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048f9190610d47565b6104c5576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610370610bd7565b606060038054806020026020016040519081016040528092919081815260200182805480156103d75760200282019190600052602060002090815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116103ac575050505050905090565b6001818154811061025d57600080fd5b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156105d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f89190610d47565b61062e576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051808201909152600281527f5a30000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff82166106b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b60405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff8116600090815260026020908152604091829020548251808401909352600383527f43523100000000000000000000000000000000000000000000000000000000009183019190915260ff1615610753576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b506001805480820182557fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915560008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909417909355915190917ff816b5143086c89d103a0683286be86c2b741e83ebfa75135aae606e2f5c6e5391a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156108ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d19190610d47565b610907576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051808201909152600281527f5a30000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8216610989576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b5073ffffffffffffffffffffffffffffffffffffffff8116600090815260046020908152604091829020548251808401909352600383527f43523200000000000000000000000000000000000000000000000000000000009183019190915260ff1615610a23576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b506003805460018082019092557fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915560008181526004602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909417909355915190917f58ad3cfc4b6552a53c8c4128ae9b080e14b4378a159280643a62c6f709cee24f91a250565b60005460ff16610b62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016106b0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff1615610c44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016106b0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610bad3390565b600060208284031215610ca957600080fd5b5035919050565b600060208284031215610cc257600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610ce657600080fd5b9392505050565b6020808252825182820181905260009190848201906040850190845b81811015610d3b57835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101610d09565b50909695505050505050565b600060208284031215610d5957600080fd5b81518015158114610ce657600080fd5b600060208083528351808285015260005b81811015610d9657858101830151858201604001528201610d7a565b81811115610da8576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea26469706673582212208f2d91c863db9ab1494a9c5db20e3fddc4b6c779ea3c3621737c105c60d9440a64736f6c634300080a003360e06040523480156200001157600080fd5b5060405162004da638038062004da6833981016040819052620000349162000160565b6001600160a01b0381166200005c57604051635919af9760e11b815260040160405180910390fd5b6001600160a01b03811660808190526040805163c513c9bb60e01b8152905163c513c9bb916004808201926020929091908290030181865afa158015620000a7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cd919062000160565b6001600160a01b031660a0816001600160a01b0316815250506080516001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000127573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200014d919062000160565b6001600160a01b031660c0525062000192565b6000602082840312156200017357600080fd5b81516001600160a01b03811681146200018b57600080fd5b9392505050565b60805160a05160c051614b896200021d6000396000818161018801528181611c4f0152612c5a0152600081816101ed015281816115e201528181611f5f0152818161213f0152818161223f0152818161243801528181612604015281816126bc01528181612788015281816129a501528181613c410152613d000152600061013c0152614b896000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c806354fd4d5011610081578063a80deda31161005b578063a80deda31461020f578063ae093f3f1461022f578063fc9914cb1461024f57600080fd5b806354fd4d50146101bd578063663b8fdb146101d35780637a0c7b21146101e857600080fd5b80632954018c116100b25780632954018c146101375780634b2f336d146101835780634c472fc9146101aa57600080fd5b80630dbd616d146100d957806313d21cdf146101025780631bcd8fc014610122575b600080fd5b6100ec6100e73660046140fc565b610272565b6040516100f9919061430b565b60405180910390f35b61011561011036600461431e565b6114d4565b6040516100f99190614444565b61012a611f59565b6040516100f99190614453565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100f9565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b61015e6101b83660046140fc565b6121f5565b6101c5600281565b6040519081526020016100f9565b6101db612432565b6040516100f991906146ea565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b61022261021d36600461431e565b6126b5565b6040516100f9919061476a565b61024261023d36600461431e565b612a75565b6040516100f991906147dd565b61026261025d3660046140fc565b613bf7565b60405190151581526020016100f9565b61035f604051806102400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160008152602001606081526020016000815260200160008152602001600015158152602001600081526020016000815260200160008152602001600060ff168152602001600081525090565b600080600080600061037088613cf4565b509450945094509450945060008560ff1660011461041d576040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015284169063e958b70490602401602060405180830381865afa1580156103f4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061041891906147f0565b6104ad565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015286169063e958b70490602401602060405180830381865afa158015610489573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ad91906147f0565b60ff8716610200890181905273ffffffffffffffffffffffffffffffffffffffff808b1660208b01528b811660608b015282168952909150600114156109e9578473ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610538573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055c91906147f0565b73ffffffffffffffffffffffffffffffffffffffff90811660808901526040517fc7de38a600000000000000000000000000000000000000000000000000000000815282821660048201529085169063c7de38a690602401602060405180830381865afa1580156105d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f5919061480d565b60c08801526040517fdfd5946500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015285169063dfd5946590602401602060405180830381865afa158015610666573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068a919061480d565b60e08801526040517f3ce0735500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015260006024830152861690633ce0735590604401602060405180830381865afa92505050801561073c575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526107399181019061480d565b60015b6107455761074c565b6101408801525b6040517f3ce0735500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015260016024830152861690633ce0735590604401602060405180830381865afa9250505080156107f9575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526107f69181019061480d565b60015b61080257610809565b6101608801525b60c08701516040517f996329f800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526024820192909252600060448201529086169063996329f89060640160a060405180830381865afa9250505080156108c4575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526108c191810190614826565b60015b6108cd576108da565b505015156101808a015250505b8073ffffffffffffffffffffffffffffffffffffffff16631afbb7a46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610925573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610949919061480d565b6101a08801526040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152851690633192195c90602401602060405180830381865afa1580156109bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109df919061480d565b60a0880152610c26565b8273ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5891906147f0565b73ffffffffffffffffffffffffffffffffffffffff90811660808901526040517fc7de38a600000000000000000000000000000000000000000000000000000000815282821660048201529083169063c7de38a6906024016040805180830381865afa158015610acc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af09190614866565b5060c08801526040517fdfd5946500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015283169063dfd5946590602401602060405180830381865afa158015610b62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b86919061480d565b60e08801526040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152841690633192195c906024016040805180830381865afa158015610bf6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1a9190614866565b60a08901526101a08801525b60008660ff16600114610ca7578373ffffffffffffffffffffffffffffffffffffffff166316f0115b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca291906147f0565b610d16565b8573ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1691906147f0565b90508073ffffffffffffffffffffffffffffffffffffffff166345d31f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d87919061480d565b6101008901526000600160ff891614610e0e578473ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610de5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e09919061480d565b610e7d565b8573ffffffffffffffffffffffffffffffffffffffff166320a05ff76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7d919061480d565b90508760ff16600114610f1f576040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152861690638991b2f190602401602060405180830381865afa158015610ef6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1a919061480d565b610faf565b6040517fb451cecc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015287169063b451cecc90602401602060405180830381865afa158015610f8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610faf919061480d565b6102208a01528067ffffffffffffffff811115610fce57610fce61488a565b60405190808252806020026020018201604052801561103e57816020015b6040805160808101825260008082526020808301829052928201819052606082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181610fec5790505b506101208a015260005b818110156113d657604080516080810182526000808252602082018190529181018290526060810191909152600180831b9060ff8c1614156111c5576040517faf0a650200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018590528a169063af0a650290604401608060405180830381865afa1580156110f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111b91906148b9565b5050602084015273ffffffffffffffffffffffffffffffffffffffff9081168084526040517ff9eaee0d0000000000000000000000000000000000000000000000000000000081526004810191909152908a169063f9eaee0d90602401602060405180830381865afa158015611195573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b9919061490d565b15156040830152611388565b6040517f172c48c70000000000000000000000000000000000000000000000000000000081526004810184905273ffffffffffffffffffffffffffffffffffffffff89169063172c48c7906024016040805180830381865afa15801561122f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112539190614928565b5073ffffffffffffffffffffffffffffffffffffffff9081168084526040517f70a082310000000000000000000000000000000000000000000000000000000081529188166004830152906370a0823190602401602060405180830381865afa1580156112c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e8919061480d565b602083015281516040517ff9eaee0d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529088169063f9eaee0d90602401602060405180830381865afa15801561135c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611380919061490d565b151560408301525b6102208c015181161561139c57600161139f565b60005b151560608301526101208c01518051839190859081106113c1576113c161495e565b60209081029190910101525050600101611048565b508273ffffffffffffffffffffffffffffffffffffffff166317d11a156040518163ffffffff1660e01b8152600401602060405180830381865afa158015611422573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611446919061480d565b896101c00181815250508273ffffffffffffffffffffffffffffffffffffffff16633dc54b406040518163ffffffff1660e01b8152600401602060405180830381865afa15801561149b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bf919061480d565b6101e08a015250969998505050505050505050565b61159b604051806102000160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600060ff1681525090565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015283917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa15801561162b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164f919061490d565b611685576040517fd384b23800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316808352604080517ffe14112d000000000000000000000000000000000000000000000000000000008152905185929163fe14112d9160048083019260209291908290030181865afa1580156116f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611719919061480d565b8360c00181815250508073ffffffffffffffffffffffffffffffffffffffff1663ef8d96036040518163ffffffff1660e01b8152600401602060405180830381865afa15801561176d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611791919061480d565b8360e00181815250508073ffffffffffffffffffffffffffffffffffffffff1663743753596040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611809919061480d565b8360a00181815250508073ffffffffffffffffffffffffffffffffffffffff16634c19386c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561185d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611881919061480d565b836101000181815250508073ffffffffffffffffffffffffffffffffffffffff1663788c6bfe6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fa919061480d565b836101600181815250508073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561194f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611973919061480d565b8360800181815250508073ffffffffffffffffffffffffffffffffffffffff166345d31f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119eb919061480d565b836101400181815250508073ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6491906147f0565b836040019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff166336dda7d56040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0a91906147f0565b836060019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663788c6bfe6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb0919061480d565b836101600181815250508073ffffffffffffffffffffffffffffffffffffffff1663e941fa786040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c29919061480d565b61018084015260408084015173ffffffffffffffffffffffffffffffffffffffff9081167f000000000000000000000000000000000000000000000000000000000000000082161460208087019190915282517f609ae31700000000000000000000000000000000000000000000000000000000815292519184169263609ae31792600480830193928290030181865afa158015611ccb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cef919061480d565b836101c00181815250508073ffffffffffffffffffffffffffffffffffffffff1663dbcb313b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d68919061480d565b836101a00181815250506000836060015173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de7919061480d565b6040517f5427c9380000000000000000000000000000000000000000000000000000000081526004810182905290915060009073ffffffffffffffffffffffffffffffffffffffff841690635427c93890602401602060405180830381865afa158015611e58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7c919061480d565b90508015611ec7576101808501518190611eb890611e9c906127106149bc565b876101000151886101400151611eb291906149d3565b90613fd0565b611ec29190614a3f565b611ece565b8461014001515b856101200181815250508273ffffffffffffffffffffffffffffffffffffffff166354fd4d506040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f47919061480d565b60ff166101e086015250505050919050565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b4ac68606040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fec919061480d565b90508067ffffffffffffffff8111156120075761200761488a565b6040519080825280602002602001820160405280156120ff57816020015b6120ec604051806102000160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600060ff1681525090565b8152602001906001900390816120255790505b50915060005b818110156121f0576040517fac4afa38000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ac4afa3890602401602060405180830381865afa15801561219b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121bf91906147f0565b90506121ca816114d4565b8483815181106121dc576121dc61495e565b602090810291909101015250600101612105565b505090565b6040517f6fbc6f6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015260009184917f00000000000000000000000000000000000000000000000000000000000000001690636fbc6f6b90602401602060405180830381865afa158015612286573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122aa919061490d565b6122e0576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060006122ee87613cf4565b5050935093505092508260ff16600114612397576040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015282169063fdd5764590602401602060405180830381865afa15801561236e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061239291906147f0565b612427565b6040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015283169063fdd5764590602401602060405180830381865afa158015612403573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061242791906147f0565b979650505050505050565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c29277cd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124c5919061480d565b90508067ffffffffffffffff8111156124e0576124e061488a565b6040519080825280602002602001820160405280156125c457816020015b60408051610260810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083018290526101208301819052610140830181905261016083015261018082018190526101a082018190526101c082018190526101e082018190526102008201819052610220820181905261024082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816124fe5790505b50915060005b818110156121f0576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa158015612660573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061268491906147f0565b905061268f81612a75565b8483815181106126a1576126a161495e565b6020908102919091010152506001016125ca565b60606000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c29277cd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612725573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612749919061480d565b905060005b81811015612829576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa1580156127e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061280891906147f0565b90506128148187613bf7565b15612820578360010193505b5060010161274e565b508167ffffffffffffffff8111156128435761284361488a565b60405190808252806020026020018201604052801561296157816020015b61294e604051806102400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160008152602001606081526020016000815260200160008152602001600015158152602001600081526020016000815260200160008152602001600060ff168152602001600081525090565b8152602001906001900390816128615790505b5092506000915060005b81811015612a6d576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa158015612a01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a2591906147f0565b9050612a318187613bf7565b15612a6457612a408187610272565b858581518110612a5257612a5261495e565b60209081029190910101526001909301925b5060010161296b565b505050919050565b604080516102608101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082018390526101208201819052610140820181905261016082015261018081018290526101a081018290526101c081018290526101e08101829052610200810182905261022081018290526102408101829052908080808080612b1b88613cf4565b73ffffffffffffffffffffffffffffffffffffffff8e168d5260ff86166101808e01819052959b50939950919750955093509150600114612bca578273ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ba1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bc591906147f0565b612c39565b8473ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c3991906147f0565b73ffffffffffffffffffffffffffffffffffffffff908116602089018190527f00000000000000000000000000000000000000000000000000000000000000009091161460408801526000600160ff881614612d03578373ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cfe91906147f0565b612d72565b8573ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d7291906147f0565b6040517f2e97ca2100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b8116600483015291925090821690632e97ca2190602401602060405180830381865afa158015612de2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e06919061490d565b15156060890152604080517f45d31f9d000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff8316916345d31f9d9160048083019260209291908290030181865afa158015612e78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e9c919061480d565b8860800181815250508073ffffffffffffffffffffffffffffffffffffffff1663743753596040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ef0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f14919061480d565b610100890152600160ff88161415613017578573ffffffffffffffffffffffffffffffffffffffff16639b2cb5d86040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f95919061480d565b8860a00181815250508573ffffffffffffffffffffffffffffffffffffffff16635f48f3936040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fe9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061300d919061480d565b60c08901526130a5565b8273ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa158015613061573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130859190614a73565b6fffffffffffffffffffffffffffffffff90811660c08b01521660a08901525b60008760ff16600114613126578473ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613121919061480d565b613195565b8573ffffffffffffffffffffffffffffffffffffffff166320a05ff76040518163ffffffff1660e01b8152600401602060405180830381865afa158015613171573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613195919061480d565b90508067ffffffffffffffff8111156131b0576131b061488a565b6040519080825280602002602001820160405280156131d9578160200160208202803683370190505b506101208a01528067ffffffffffffffff8111156131f9576131f961488a565b604051908082528060200260200182016040528015613222578160200160208202803683370190505b506101608a015260005b818110156134c4578860ff16600114156133b4576040517f5e5f2e260000000000000000000000000000000000000000000000000000000081526004810182905260009073ffffffffffffffffffffffffffffffffffffffff891690635e5f2e2690602401602060405180830381865afa1580156132ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132d291906147f0565b9050808b610120015183815181106132ec576132ec61495e565b73ffffffffffffffffffffffffffffffffffffffff92831660209182029290920101526040517f78327438000000000000000000000000000000000000000000000000000000008152828216600482015290891690637832743890602401602060405180830381865afa158015613367573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061338b919061480d565b8b610160015183815181106133a2576133a261495e565b602002602001018181525050506134bc565b6040517f172c48c70000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff87169063172c48c7906024016040805180830381865afa15801561341e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134429190614928565b8061ffff1690508b610120015183815181106134605761346061495e565b602002602001018c6101600151848151811061347e5761347e61495e565b60200260200101828152508273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525050505b60010161322c565b5060008860ff16600114613546578373ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561351d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613541919061480d565b6135b5565b8673ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613591573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135b5919061480d565b90508067ffffffffffffffff8111156135d0576135d061488a565b60405190808252806020026020018201604052801561361557816020015b60408051808201909152600080825260208201528152602001906001900390816135ee5790505b506101408b015260005b818110156139015760408051808201909152600080825260208201528a60ff166001146136da576040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff871690635094cb4f90602401602060405180830381865afa1580156136b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136d591906147f0565b613769565b6040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff8a1690635094cb4f90602401602060405180830381865afa158015613745573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061376991906147f0565b73ffffffffffffffffffffffffffffffffffffffff168152600160ff8c16146138245780516040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529089169063fdd5764590602401602060405180830381865afa1580156137fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061381f91906147f0565b6138b7565b80516040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152908a169063fdd5764590602401602060405180830381865afa158015613893573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138b791906147f0565b73ffffffffffffffffffffffffffffffffffffffff1660208201526101408c01518051829190849081106138ed576138ed61495e565b60209081029190910101525060010161361f565b508860ff166001141561398f578773ffffffffffffffffffffffffffffffffffffffff1663b2c53a6c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613959573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061397d919061480d565b60e08b015260ff6102408b0152613be9565b73ffffffffffffffffffffffffffffffffffffffff85166101a08b01819052604080517f9408b63f0000000000000000000000000000000000000000000000000000000081529051639408b63f916004808201926020929091908290030181865afa158015613a02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a2691906147f0565b8a6101e0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508473ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015613aa9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613acd9190614aa6565b5015156102008c015250604080517f9fd12b77000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff881691639fd12b779160048083019260209291908290030181865afa158015613b42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b66919061480d565b8a6102200181815250508573ffffffffffffffffffffffffffffffffffffffff16638345f26e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bdf9190614af7565b60ff166102408b01525b505050505050505050919050565b6040517f6fbc6f6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015260009184917f00000000000000000000000000000000000000000000000000000000000000001690636fbc6f6b90602401602060405180830381865afa158015613c88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cac919061490d565b613ce2576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613cec8484614023565b949350505050565b600080600080600080867f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636fbc6f6b826040518263ffffffff1660e01b8152600401613d73919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa158015613d90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613db4919061490d565b613dea576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8773ffffffffffffffffffffffffffffffffffffffff166354fd4d506040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e59919061480d565b96508660ff1660011415613ee0578795508573ffffffffffffffffffffffffffffffffffffffff1663f93f515b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613eb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ed991906147f0565b9450613fc6565b8793508373ffffffffffffffffffffffffffffffffffffffff16632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f5291906147f0565b92508373ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fc391906147f0565b91505b5091939550919395565b6000821580613fdd575081155b15613fea5750600061401d565b612710613ff8600282614b1a565b61ffff1661400684866149d3565b6140109190614b3b565b61401a9190614a3f565b90505b92915050565b6040517f055ee9b500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600091829185169063055ee9b590602401602060405180830381865afa158015614094573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140b891906147f0565b73ffffffffffffffffffffffffffffffffffffffff1614159392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146140f957600080fd5b50565b6000806040838503121561410f57600080fd5b823561411a816140d7565b9150602083013561412a816140d7565b809150509250929050565b600081518084526020808501945080840160005b8381101561419f578151805173ffffffffffffffffffffffffffffffffffffffff168852838101518489015260408082015115159089015260609081015115159088015260809096019590820190600101614149565b509495945050505050565b805173ffffffffffffffffffffffffffffffffffffffff168252600061024060208301516141f0602086018273ffffffffffffffffffffffffffffffffffffffff169052565b506040830151614204604086018215159052565b50606083015161422c606086018273ffffffffffffffffffffffffffffffffffffffff169052565b506080830151614254608086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060a083015160a085015260c083015160c085015260e083015160e085015261010080840151818601525061012080840151828287015261429783870182614135565b92505050610140808401518186015250610160808401518186015250610180808401516142c78287018215159052565b50506101a083810151908501526101c080840151908501526101e080840151908501526102008084015160ff16908501526102209283015192909301919091525090565b60208152600061401a60208301846141aa565b60006020828403121561433057600080fd5b813561433b816140d7565b9392505050565b805173ffffffffffffffffffffffffffffffffffffffff168252602081015161436f602084018215159052565b506040810151614397604084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060608101516143bf606084018273ffffffffffffffffffffffffffffffffffffffff169052565b506080818101519083015260a0808201519083015260c0808201519083015260e08082015190830152610100808201519083015261012080820151908301526101408082015190830152610160808201519083015261018080820151908301526101a080820151908301526101c080820151908301526101e09081015160ff16910152565b610200810161401d8284614342565b6020808252825182820181905260009190848201906040850190845b8181101561449657614482838551614342565b92840192610200929092019160010161446f565b50909695505050505050565b600081518084526020808501945080840160005b8381101561419f57815173ffffffffffffffffffffffffffffffffffffffff16875295820195908201906001016144b6565b600081518084526020808501945080840160005b8381101561419f578151805173ffffffffffffffffffffffffffffffffffffffff9081168952908401511683880152604090960195908201906001016144fc565b600081518084526020808501945080840160005b8381101561419f57815187529582019590820190600101614551565b805173ffffffffffffffffffffffffffffffffffffffff168252600061026060208301516145b3602086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060408301516145c7604086018215159052565b5060608301516145db606086018215159052565b506080830151608085015260a083015160a085015260c083015160c085015260e083015160e0850152610100808401518186015250610120808401518282870152614628838701826144a2565b92505050610140808401518583038287015261464483826144e8565b925050506101608084015185830382870152614660838261453d565b92505050610180808401516146798287018260ff169052565b50506101a08381015173ffffffffffffffffffffffffffffffffffffffff908116918601919091526101c0808501511515908601526101e080850151909116908501526102008084015115159085015261022080840151908501526102409283015160ff1692909301919091525090565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561475d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc088860301845261474b85835161456d565b94509285019290850190600101614711565b5092979650505050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561475d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08886030184526147cb8583516141aa565b94509285019290850190600101614791565b60208152600061401a602083018461456d565b60006020828403121561480257600080fd5b815161433b816140d7565b60006020828403121561481f57600080fd5b5051919050565b600080600080600060a0868803121561483e57600080fd5b5050835160208501516040860151606087015160809097015192989197509594509092509050565b6000806040838503121561487957600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080600080608085870312156148cf57600080fd5b84516148da816140d7565b60208601516040870151606090970151919890975090945092505050565b8051801515811461490857600080fd5b919050565b60006020828403121561491f57600080fd5b61401a826148f8565b6000806040838503121561493b57600080fd5b8251614946816140d7565b602084015190925061ffff8116811461412a57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156149ce576149ce61498d565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614a0b57614a0b61498d565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614a4e57614a4e614a10565b500490565b80516fffffffffffffffffffffffffffffffff8116811461490857600080fd5b60008060408385031215614a8657600080fd5b614a8f83614a53565b9150614a9d60208401614a53565b90509250929050565b600080600060608486031215614abb57600080fd5b614ac484614a53565b9250614ad2602085016148f8565b9150604084015164ffffffffff81168114614aec57600080fd5b809150509250925092565b600060208284031215614b0957600080fd5b815160ff8116811461433b57600080fd5b600061ffff80841680614b2f57614b2f614a10565b92169190910492915050565b60008219821115614b4e57614b4e61498d565b50019056fea2646970667358221220d15108d0bec9cc6f3903875dd8412869a3da1b36661bdc780e2e2f0ae3136d2464736f6c634300080a003360a06040523480156200001157600080fd5b5060405162001b4538038062001b45833981016040819052620000349162000608565b6000805460ff19169055816001600160a01b0381166200006757604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cc91906200070a565b6001600160a01b031660805250805160005b818110156200014257620001398382815181106200010057620001006200072f565b6020026020010151600001518483815181106200012157620001216200072f565b6020026020010151602001516200014c60201b60201c565b600101620000de565b5050505062000822565b6001600160a01b03821615806200016a57506001600160a01b038116155b156200018957604051635919af9760e11b815260040160405180910390fd5b620001a8826001600160a01b0316620004ba60201b620006751760201c565b620001d65760405163df4c572d60e01b81526001600160a01b03831660048201526024015b60405180910390fd5b620001f5816001600160a01b0316620004ba60201b620006751760201c565b6200021f5760405163df4c572d60e01b81526001600160a01b0382166004820152602401620001cd565b806001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200027c575060408051601f3d908101601f19168201909252620002799181019062000745565b60015b6200029a576040516367a7cd4360e01b815260040160405180910390fd5b8060ff16600814620002bf576040516367a7cd4360e01b815260040160405180910390fd5b506000816001600160a01b031663d62ada116040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200031f575060408051601f3d908101601f191682019092526200031c918101906200076a565b60015b6200032a576200032d565b90505b6000836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200038c575060408051601f3d908101601f19168201909252620003899181019062000745565b60015b620003aa5760405163528ca31d60e01b815260040160405180910390fd5b60128160ff161115620003d05760405163528ca31d60e01b815260040160405180910390fd5b9050826001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa9250505080156200042f575060408051601f3d908101601f191682019092526200042c91810190620007a6565b60015b6200044d576040516367a7cd4360e01b815260040160405180910390fd5b8662000461576200046185858484620004c0565b5050505050620004748484848462000526565b826001600160a01b0316846001600160a01b03167fe263805b03657ab13064915d0723c5ce14981547e7cba5283f66b9e5d81f6e6e60405160405180910390a350505050565b3b151590565b60008313620004e2576040516356e05d2b60e01b815260040160405180910390fd5b836001600160501b0316816001600160501b0316108062000501575081155b15620005205760405163b1cf675560e01b815260040160405180910390fd5b50505050565b6001600160a01b03831682156200053e57600160a11b175b6200055460ff60a21b60a284901b1682620007fb565b6001600160a01b0390951660009081526001602052604090209490945550505050565b80516001600160a01b03811681146200058f57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715620005cf57620005cf62000594565b60405290565b604051601f8201601f191681016001600160401b038111828210171562000600576200060062000594565b604052919050565b60008060408084860312156200061d57600080fd5b620006288462000577565b602085810151919450906001600160401b03808211156200064857600080fd5b818701915087601f8301126200065d57600080fd5b81518181111562000672576200067262000594565b62000682848260051b01620005d5565b818152848101925060069190911b830184019089821115620006a357600080fd5b928401925b81841015620006fa5785848b031215620006c25760008081fd5b620006cc620005aa565b620006d78562000577565b8152620006e686860162000577565b8187015283529285019291840191620006a8565b8096505050505050509250929050565b6000602082840312156200071d57600080fd5b620007288262000577565b9392505050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156200075857600080fd5b815160ff811681146200072857600080fd5b6000602082840312156200077d57600080fd5b815180151581146200072857600080fd5b80516001600160501b03811681146200058f57600080fd5b600080600080600060a08688031215620007bf57600080fd5b620007ca866200078e565b9450602086015193506040860151925060608601519150620007ef608087016200078e565b90509295509295909350565b600082198211156200081d57634e487b7160e01b600052601160045260246000fd5b500190565b6080516112f262000853600039600081816101b201528181610280015281816103e201526104ff01526112f26000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c80638456cb591161008c578063b66102df11610066578063b66102df146101d4578063e8a97a3e146101e7578063f190e5fa146101fa578063f9a650301461023f57600080fd5b80638456cb591461016d5780639dcb511a14610175578063a50cf2c8146101ad57600080fd5b80635c975abb116100bd5780635c975abb1461011c5780635cecbd0e146101325780637afb01041461015a57600080fd5b80633f4ba83a146100e457806341976e09146100ee57806354fd4d5014610114575b600080fd5b6100ec610252565b005b6101016100fc366004610f28565b610340565b6040519081526020015b60405180910390f35b610101600281565b60005460ff16604051901515815260200161010b565b610145610140366004610f4a565b610352565b6040805192835260208301919091520161010b565b610101610168366004610f90565b610376565b6100ec6103b4565b610188610183366004610f28565b6104a0565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010b565b6101887f000000000000000000000000000000000000000000000000000000000000000081565b6101016101e2366004610fbc565b6104b4565b6100ec6101f5366004610ff8565b6104d1565b61020d610208366004610f28565b6105c3565b6040805173ffffffffffffffffffffffffffffffffffffffff909416845291151560208401529082015260600161010b565b61010161024d366004610f90565b61064d565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156102dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103009190611022565b610336576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033e61067b565b565b600061034b82610761565b5092915050565b60008061035f868661064d565b915061036b848461064d565b905094509492505050565b600080600061038484610761565b90925090508161039582600a611193565b61039f908761119f565b6103a991906111dc565b925050505b92915050565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561043e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104629190611022565b610498576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033e610819565b60006104ab826105c3565b50909392505050565b60006104c96104c3858561064d565b83610376565b949350505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561055b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057f9190611022565b6105b5576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105bf82826108d9565b5050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600160205260408120548190819080610624576040517f4bb8ad8200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b947402000000000000000000000000000000000000000086161515945060a286901c9350915050565b600080600061065b84610761565b909250905061066b81600a611193565b61039f838761119f565b3b151590565b60005460ff166106ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b600080600080610770856105c3565b8095508193508294505050506000806000808573ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156107cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f19190611231565b9450945050935093508461080b5761080b84848484610dd9565b829750505050505050915091565b60005460ff1615610886576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016106e3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586107373390565b73ffffffffffffffffffffffffffffffffffffffff82161580610910575073ffffffffffffffffffffffffffffffffffffffff8116155b15610947576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82163b6109ad576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016106e3565b73ffffffffffffffffffffffffffffffffffffffff81163b610a13576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024016106e3565b8073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610a98575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610a9591810190611281565b60015b610ace576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060ff16600814610b0b576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060008173ffffffffffffffffffffffffffffffffffffffff1663d62ada116040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610b93575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610b9091810190611022565b60015b610b9c57610b9f565b90505b60008373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610c26575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610c2391810190611281565b60015b610c5c576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60128160ff161115610c9a576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b90508273ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa925050508015610d21575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610d1e91810190611231565b60015b610d57576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b86610d6857610d6885858484610dd9565b5050505050610d7984848484610e74565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fe263805b03657ab13064915d0723c5ce14981547e7cba5283f66b9e5d81f6e6e60405160405180910390a350505050565b60008313610e13576040517f56e05d2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8369ffffffffffffffffffff168169ffffffffffffffffffff161080610e37575081155b15610e6e576040517fb1cf675500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b73ffffffffffffffffffffffffffffffffffffffff83168215610ea95774020000000000000000000000000000000000000000175b610ecf7503fc000000000000000000000000000000000000000060a284901b16826112a4565b73ffffffffffffffffffffffffffffffffffffffff90951660009081526001602052604090209490945550505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610f2357600080fd5b919050565b600060208284031215610f3a57600080fd5b610f4382610eff565b9392505050565b60008060008060808587031215610f6057600080fd5b84359350610f7060208601610eff565b925060408501359150610f8560608601610eff565b905092959194509250565b60008060408385031215610fa357600080fd5b82359150610fb360208401610eff565b90509250929050565b600080600060608486031215610fd157600080fd5b83359250610fe160208501610eff565b9150610fef60408501610eff565b90509250925092565b6000806040838503121561100b57600080fd5b61101483610eff565b9150610fb360208401610eff565b60006020828403121561103457600080fd5b81518015158114610f4357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b808511156110cc57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156110b2576110b2611044565b808516156110bf57918102915b93841c9390800290611078565b509250929050565b6000826110e3575060016103ae565b816110f0575060006103ae565b816001811461110657600281146111105761112c565b60019150506103ae565b60ff84111561112157611121611044565b50506001821b6103ae565b5060208310610133831016604e8410600b841016171561114f575081810a6103ae565b6111598383611073565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561118b5761118b611044565b029392505050565b6000610f4383836110d4565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156111d7576111d7611044565b500290565b600082611212577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b805169ffffffffffffffffffff81168114610f2357600080fd5b600080600080600060a0868803121561124957600080fd5b61125286611217565b945060208601519350604086015192506060860151915061127560808701611217565b90509295509295909350565b60006020828403121561129357600080fd5b815160ff81168114610f4357600080fd5b600082198211156112b7576112b7611044565b50019056fea2646970667358221220e7485a2cb5750973f539ca59d2211008b42bb92b6c49605a53f5d9c88c330fb164736f6c634300080a003360e06040523480156200001157600080fd5b5060405162002ced38038062002ced8339810160408190526200003491620004bb565b6000805460ff19169055806001600160a01b0381166200006757604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cc9190620004bb565b6001600160a01b039081166080526001805560408051808201909152600281526105a360f41b602082015291508216620001245760405162461bcd60e51b81526004016200011b9190620004ed565b60405180910390fd5b50806001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000164573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200018a9190620004bb565b6001600160a01b031660c052604051620001a490620004ad565b604051809103906000f080158015620001c1573d6000803e3d6000fd5b506001600160a01b031660a08190526040805163204a7f0760e21b81529051638129fc1c9160048082019260009290919082900301818387803b1580156200020857600080fd5b505af11580156200021d573d6000803e3d6000fd5b50505050620002316200028a60201b60201c565b50600454600380546001600160a01b039092166001600160a01b03199283161790556000805260026020527fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b8054909116905562000545565b6000620002a460a0516200038c60201b6200119b1760201c565b9050806001600160a01b0316638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620002e257600080fd5b505af1158015620002f7573d6000803e3d6000fd5b5050600480546001600160a01b03908116600090815260026020908152604090912080546001600160a01b03199081169388169384179091558354169091179091556200035492506005915083906200043b811b6200127d17901c565b506040516001600160a01b038216907f9f69b6c10f6810213e055b0ba6bc0a4e2603f73c221aad77ea35da819cda7dc390600090a250565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260601b60148201526e5af43d82803e903d91602b57fd5bf360881b60288201526037816000f09150506001600160a01b038116620004365760405162461bcd60e51b815260206004820152601660248201527f455243313136373a20637265617465206661696c65640000000000000000000060448201526064016200011b565b919050565b600062000452836001600160a01b0384166200045b565b90505b92915050565b6000818152600183016020526040812054620004a45750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000455565b50600062000455565b610e788062001e7583390190565b600060208284031215620004ce57600080fd5b81516001600160a01b0381168114620004e657600080fd5b9392505050565b600060208083528351808285015260005b818110156200051c57858101830151858201604001528201620004fe565b818111156200052f576000604083870101525b50601f01601f1916929092016040019392505050565b60805160a05160c0516118cf620005a66000396000818161026a015281816103680152610b7001526000818161020201526110650152600081816102c4015281816105b80152818161099601528181610a840152610e7401526118cf6000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806388f64c54116100cd578063b193976311610081578063d82ecc4811610066578063d82ecc4814610309578063e3ba9ace1461031c578063f23953ab1461032f57600080fd5b8063b1939763146102f9578063b60e85181461030157600080fd5b80638f7dcfa3116100b25780638f7dcfa31461029f578063a50cf2c8146102bf578063a904aab6146102e657600080fd5b806388f64c541461026557806389b77b3e1461028c57600080fd5b806354fd4d50116101245780635da33c5b116101095780635da33c5b146101fd578063765e0159146102245780638456cb591461025d57600080fd5b806354fd4d50146101d05780635c975abb146101e657600080fd5b806313d8c8401461015657806321d18456146101a05780632932472f146101b35780633f4ba83a146101c8575b600080fd5b6004546101769073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6101766101ae366004611651565b610337565b6101c66101c1366004611697565b61058a565b005b6101c6610968565b6101d8600181565b604051908152602001610197565b60005460ff165b6040519015158152602001610197565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101766102323660046116da565b73ffffffffffffffffffffffffffffffffffffffff9081166000908152600260205260409020541690565b6101c6610a56565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101c661029a3660046116da565b610b42565b6003546101769073ffffffffffffffffffffffffffffffffffffffff1681565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101c66102f4366004611697565b610e46565b6101d8610fb8565b6101d8611033565b6101ed6103173660046116da565b611044565b61017661032a3660046116f5565b611051565b6101c661105e565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa1580156103c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103e8919061170e565b6040518060400160405280600281526020017f43500000000000000000000000000000000000000000000000000000000000008152509061045f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b60405180910390fd5b506104686112a6565b6003805473ffffffffffffffffffffffffffffffffffffffff8082166000818152600260205260409081902080549093167fffffffffffffffffffffffff0000000000000000000000000000000000000000948516179094558154909216905590517fc75b5a710000000000000000000000000000000000000000000000000000000081523360048201526024810185905260448101849052819063c75b5a7190606401600060405180830381600087803b15801561052657600080fd5b505af115801561053a573d6000803e3d6000fd5b505060405133925073ffffffffffffffffffffffffffffffffffffffff841691507ff3ede7039176503a8ad1fe7cfaa29475a9dbe0cdcaf04ecf9a5c10570c47b10390600090a390505b92915050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610614573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610638919061170e565b61066e576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106766112a6565b60035473ffffffffffffffffffffffffffffffffffffffff838116911614156106fa576003805473ffffffffffffffffffffffffffffffffffffffff808216600090815260026020526040902080549091167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092558154169055610865565b73ffffffffffffffffffffffffffffffffffffffff838116600090815260026020908152604091829020548251808401909352600383527f4146330000000000000000000000000000000000000000000000000000000000918301919091529091848116911614610798576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b5060045473ffffffffffffffffffffffffffffffffffffffff838116911614156107fd57600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85161790555b73ffffffffffffffffffffffffffffffffffffffff828116600081815260026020526040808220805488861684529183208054929095167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790945591905281541690555b6040517fc75b5a7100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600060248301819052604483015283169063c75b5a7190606401600060405180830381600087803b1580156108dc57600080fd5b505af11580156108f0573d6000803e3d6000fd5b505050506109088260056112dd90919063ffffffff16565b508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f25e267469ba2ae82515be7b3d45df60bf8308343f0809e8cf7319058e2255ce660405160405180910390a3505050565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156109f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a16919061170e565b610a4c576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a546112ff565b565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015610ae0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b04919061170e565b610b3a576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a546113e0565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa158015610bcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf0919061170e565b6040518060400160405280600281526020017f435000000000000000000000000000000000000000000000000000000000000081525090610c5e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b50610c6a6005826114a0565b6040518060400160405280600381526020017f414634000000000000000000000000000000000000000000000000000000000081525090610cd8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b50438173ffffffffffffffffffffffffffffffffffffffff16633dc54b406040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4991906117a3565b14156040518060400160405280600381526020017f414631000000000000000000000000000000000000000000000000000000000081525090610db9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b506004805473ffffffffffffffffffffffffffffffffffffffff90811660009081526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081169487169485179091558454168317909355915190917fced6ab9afc868b3a088366f6631ae20752993b5cce5d5f0534ea5a59fcc57d5691a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610ed0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef4919061170e565b610f2a576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f19a1603900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301528416906319a1603990604401600060405180830381600087803b158015610f9b57600080fd5b505af1158015610faf573d6000803e3d6000fd5b50505050505050565b600354600090819073ffffffffffffffffffffffffffffffffffffffff165b73ffffffffffffffffffffffffffffffffffffffff81161561102d5773ffffffffffffffffffffffffffffffffffffffff9081166000908152600260205260409020541681611025816117eb565b925050610fd7565b50919050565b600061103f60056114cf565b905090565b60006105846005836114a0565b60006105846005836114d9565b60006110897f000000000000000000000000000000000000000000000000000000000000000061119b565b90508073ffffffffffffffffffffffffffffffffffffffff16638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156110d357600080fd5b505af11580156110e7573d6000803e3d6000fd5b50506004805473ffffffffffffffffffffffffffffffffffffffff908116600090815260026020526040902080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811692871692831790915582541617905550611156905060058261127d565b5060405173ffffffffffffffffffffffffffffffffffffffff8216907f9f69b6c10f6810213e055b0ba6bc0a4e2603f73c221aad77ea35da819cda7dc390600090a250565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260601b60148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f091505073ffffffffffffffffffffffffffffffffffffffff8116611278576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f455243313136373a20637265617465206661696c6564000000000000000000006044820152606401610456565b919050565b600061129f8373ffffffffffffffffffffffffffffffffffffffff84166114e5565b9392505050565b60035473ffffffffffffffffffffffffffffffffffffffff90811660009081526002602052604090205416610a5457610a5461105e565b600061129f8373ffffffffffffffffffffffffffffffffffffffff8416611534565b60005460ff1661136b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610456565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff161561144d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610456565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586113b63390565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600183016020526040812054151561129f565b6000610584825490565b600061129f8383611627565b600081815260018301602052604081205461152c57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610584565b506000610584565b6000818152600183016020526040812054801561161d576000611558600183611824565b855490915060009061156c90600190611824565b90508181146115d157600086600001828154811061158c5761158c61183b565b90600052602060002001549050808760000184815481106115af576115af61183b565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806115e2576115e261186a565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610584565b6000915050610584565b600082600001828154811061163e5761163e61183b565b9060005260206000200154905092915050565b6000806040838503121561166457600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff8116811461127857600080fd5b6000806000606084860312156116ac57600080fd5b6116b584611673565b92506116c360208501611673565b91506116d160408501611673565b90509250925092565b6000602082840312156116ec57600080fd5b61129f82611673565b60006020828403121561170757600080fd5b5035919050565b60006020828403121561172057600080fd5b8151801515811461129f57600080fd5b600060208083528351808285015260005b8181101561175d57858101830151858201604001528201611741565b8181111561176f576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b6000602082840312156117b557600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561181d5761181d6117bc565b5060010190565b600082821015611836576118366117bc565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220f1e9c81b8c3af2491c907ee66cf24e1bb76111b821db02df8f98dbb48b5ab5fa64736f6c634300080a0033608060405234801561001057600080fd5b50610e58806100206000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c806354fd4d5011610081578063c45a01551161005b578063c45a0155146101a4578063c75b5a71146101ca578063d1660f99146101dd57600080fd5b806354fd4d501461014f5780638129fc1c14610157578063c12c21c01461015f57600080fd5b80631afbb7a4116100b25780631afbb7a41461011d5780631cff79cd146101265780633dc54b401461014657600080fd5b806316128211146100d957806317d11a15146100ee57806319a160391461010a575b600080fd5b6100ec6100e7366004610b42565b6101f0565b005b6100f760035481565b6040519081526020015b60405180910390f35b6100ec610118366004610b8d565b61024c565b6100f760025481565b610139610134366004610bef565b6102c9565b6040516101019190610d49565b6100f760045481565b6100f7600181565b6100ec610344565b60015461017f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610101565b60005461017f9062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b6100ec6101d8366004610d5c565b610494565b6100ec6101eb366004610d8f565b61053d565b60015473ffffffffffffffffffffffffffffffffffffffff163314610241576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600291909155600355565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1633146102a3576040517fb126b84800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102c573ffffffffffffffffffffffffffffffffffffffff83168260006105b4565b5050565b60015460609073ffffffffffffffffffffffffffffffffffffffff16331461031d576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033d73ffffffffffffffffffffffffffffffffffffffff8416836107b4565b9392505050565b600054610100900460ff1661035f5760005460ff1615610363565b303b155b6103f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600054610100900460ff1615801561043357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000166101011790555b600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16336201000002179055801561049157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b50565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1633146104eb576040517fb126b84800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff949094169390931790925560025560035543600455565b60015473ffffffffffffffffffffffffffffffffffffffff16331461058e576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105af73ffffffffffffffffffffffffffffffffffffffff841683836107f6565b505050565b80158061065457506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015284169063dd62ed3e90604401602060405180830381865afa15801561062e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106529190610dcb565b155b6106e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e63650000000000000000000060648201526084016103eb565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526105af9084907f095ea7b300000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261084c565b606061033d83836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250610958565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526105af9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401610732565b60006108ae826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166109589092919063ffffffff16565b8051909150156105af57808060200190518101906108cc9190610de4565b6105af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016103eb565b6060610967848460008561096f565b949350505050565b606082471015610a01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016103eb565b843b610a69576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016103eb565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051610a929190610e06565b60006040518083038185875af1925050503d8060008114610acf576040519150601f19603f3d011682016040523d82523d6000602084013e610ad4565b606091505b5091509150610ae4828286610aef565b979650505050505050565b60608315610afe57508161033d565b825115610b0e5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103eb9190610d49565b60008060408385031215610b5557600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff81168114610b8857600080fd5b919050565b60008060408385031215610ba057600080fd5b610ba983610b64565b9150610bb760208401610b64565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215610c0257600080fd5b610c0b83610b64565b9150602083013567ffffffffffffffff80821115610c2857600080fd5b818501915085601f830112610c3c57600080fd5b813581811115610c4e57610c4e610bc0565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715610c9457610c94610bc0565b81604052828152886020848701011115610cad57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b83811015610cea578181015183820152602001610cd2565b83811115610cf9576000848401525b50505050565b60008151808452610d17816020860160208601610ccf565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061033d6020830184610cff565b600080600060608486031215610d7157600080fd5b610d7a84610b64565b95602085013595506040909401359392505050565b600080600060608486031215610da457600080fd5b610dad84610b64565b9250610dbb60208501610b64565b9150604084013590509250925092565b600060208284031215610ddd57600080fd5b5051919050565b600060208284031215610df657600080fd5b8151801515811461033d57600080fd5b60008251610e18818460208701610ccf565b919091019291505056fea2646970667358221220448e7046078cd668c09328d857e534e2aab6cdc0e691d3d4f2c8baae8e084b1364736f6c634300080a003360c06040523480156200001157600080fd5b506040516200162738038062001627833981016040819052620000349162000177565b60408051808201909152600281526105a360f41b60208201526001600160a01b038216620000805760405162461bcd60e51b8152600401620000779190620001a9565b60405180910390fd5b50806001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e6919062000177565b6001600160a01b03166080816001600160a01b031681525050806001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200013e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000164919062000177565b6001600160a01b031660a0525062000201565b6000602082840312156200018a57600080fd5b81516001600160a01b0381168114620001a257600080fd5b9392505050565b600060208083528351808285015260005b81811015620001d857858101830151858201604001528201620001ba565b81811115620001eb576000604083870101525b50601f01601f1916929092016040019392505050565b60805160a0516113c2620002656000396000818161021f0152818161036401526106d501526000818160af0152818161012a015281816104420152818161056e015281816107b301528181610aa601528181610b890152610c6701526113c26000f3fe60806040526004361061005e5760003560e01c80635869dba8116100435780635869dba814610199578063deecfbc9146101bb578063e79a4089146101ce57600080fd5b80634f0e0ef31461011857806354fd4d501461017657600080fd5b366101135760408051808201909152600381527f574732000000000000000000000000000000000000000000000000000000000060208201523373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b60405180910390fd5b50005b600080fd5b34801561012457600080fd5b5061014c7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561018257600080fd5b5061018b600181565b60405190815260200161016d565b3480156101a557600080fd5b506101b96101b4366004611263565b6101ee565b005b6101b96101c936600461128f565b61031d565b3480156101da57600080fd5b506101b96101e93660046112e1565b61068e565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201819052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa15801561027b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061029f9190611318565b6040518060400160405280600281526020017f43500000000000000000000000000000000000000000000000000000000000008152509061030d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b506103188383610a77565b505050565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808516600483015284917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa1580156103ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103d19190611318565b6040518060400160405280600281526020017f52500000000000000000000000000000000000000000000000000000000000008152509061043f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e6919061133a565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600381526020017f57473100000000000000000000000000000000000000000000000000000000008152509061056b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156105d457600080fd5b505af11580156105e8573d6000803e3d6000fd5b50505050506105f78434610b3c565b6040517f9aa5d46200000000000000000000000000000000000000000000000000000000815234600482015273ffffffffffffffffffffffffffffffffffffffff848116602483015261ffff84166044830152851690639aa5d46290606401600060405180830381600087803b15801561067057600080fd5b505af1158015610684573d6000803e3d6000fd5b5050505050505050565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808516600483015284917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa15801561071e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107429190611318565b6040518060400160405280600281526020017f5250000000000000000000000000000000000000000000000000000000000000815250906107b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610833573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610857919061133a565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600381526020017f5747310000000000000000000000000000000000000000000000000000000000815250906108dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b506109703330858773ffffffffffffffffffffffffffffffffffffffff166336dda7d56040518163ffffffff1660e01b8152600401602060405180830381865afa15801561092e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610952919061133a565b73ffffffffffffffffffffffffffffffffffffffff16929190610cd4565b6040517f05fe138b0000000000000000000000000000000000000000000000000000000081526004810184905230602482015260009073ffffffffffffffffffffffffffffffffffffffff8616906305fe138b906044016020604051808303816000875af11580156109e6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0a9190611357565b9050610a168382610a77565b8273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f6de63bb986f2779478e384365c03cc2e62f06b453856acca87d5a519ce02664960405160405180910390a35050505050565b6040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632e1a7d4d90602401600060405180830381600087803b158015610aff57600080fd5b505af1158015610b13573d6000803e3d6000fd5b50610b389250505073ffffffffffffffffffffffffffffffffffffffff831682610d6f565b5050565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015282917f00000000000000000000000000000000000000000000000000000000000000009091169063dd62ed3e90604401602060405180830381865afa158015610bd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf69190611357565b1015610b38576040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303816000875af1158015610cb0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103189190611318565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052610d69908590610ec9565b50505050565b80471015610dd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610107565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114610e33576040519150601f19603f3d011682016040523d82523d6000602084013e610e38565b606091505b5050905080610318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610107565b6000610f2b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16610fd59092919063ffffffff16565b8051909150156103185780806020019051810190610f499190611318565b610318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610107565b6060610fe48484600085610fee565b90505b9392505050565b606082471015611080576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610107565b843b6110e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610107565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516111119190611370565b60006040518083038185875af1925050503d806000811461114e576040519150601f19603f3d011682016040523d82523d6000602084013e611153565b606091505b509150915061116382828661116e565b979650505050505050565b6060831561117d575081610fe7565b82511561118d5782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b60005b838110156111dc5781810151838201526020016111c4565b83811115610d695750506000910152565b602081526000825180602084015261120c8160408501602087016111c1565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461126057600080fd5b50565b6000806040838503121561127657600080fd5b82356112818161123e565b946020939093013593505050565b6000806000606084860312156112a457600080fd5b83356112af8161123e565b925060208401356112bf8161123e565b9150604084013561ffff811681146112d657600080fd5b809150509250925092565b6000806000606084860312156112f657600080fd5b83356113018161123e565b92506020840135915060408401356112d68161123e565b60006020828403121561132a57600080fd5b81518015158114610fe757600080fd5b60006020828403121561134c57600080fd5b8151610fe78161123e565b60006020828403121561136957600080fd5b5051919050565b600082516113828184602087016111c1565b919091019291505056fea264697066735822122017fd7fc76e4a1efcf24b78a3417fad7ab9576f0a23aa756ddb211c5e2227aa9564736f6c634300080a003360806040523480156200001157600080fd5b5060405162002b8038038062002b80833981016040819052620000349162000122565b6001600160a01b0381166200008f5760405162461bcd60e51b815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640160405180910390fd5b6001600160a01b03811660008181526001602052604080822080546001600160601b0319166b204fce5e3e2502611000000090811790915590517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91620000f99190815260200190565b60405180910390a350600680546001600160a81b031916336101000260ff191617905562000154565b6000602082840312156200013557600080fd5b81516001600160a01b03811681146200014d57600080fd5b9392505050565b612a1c80620001646000396000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c806370a08231116100f9578063b4b5ea5711610097578063dd62ed3e11610071578063dd62ed3e14610503578063e7a324dc14610555578063f1127ed81461057c578063f2fde38b146105ee57600080fd5b8063b4b5ea57146104ca578063c3cda520146104dd578063d505accf146104f057600080fd5b806395d89b41116100d357806395d89b411461045b5780639742ca4614610497578063a9059cbb146104aa578063b0660c3d146104bd57600080fd5b806370a08231146103c7578063782d6fe11461040b5780637ecebe001461043b57600080fd5b806330adf81f11610166578063481c6a7511610140578063481c6a751461031e578063587cde1e146103435780635c19a95c146103795780636fcfff451461038c57600080fd5b806330adf81f14610298578063313ce567146102bf578063349dc329146102d957600080fd5b806320606b701161019757806320606b70146102545780632185810b1461027b57806323b872dd1461028557600080fd5b806306fdde03146101be578063095ea7b31461021057806318160ddd14610233575b600080fd5b6101fa6040518060400160405280600781526020017f47656172626f780000000000000000000000000000000000000000000000000081525081565b60405161020791906124a3565b60405180910390f35b61022361021e36600461253f565b610601565b6040519015158152602001610207565b6102466b204fce5e3e2502611000000081565b604051908152602001610207565b6102467f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b61028361070d565b005b610223610293366004612569565b6107ee565b6102467f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b6102c7601281565b60405160ff9091168152602001610207565b6007546102f99073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610207565b6006546102f990610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6102f96103513660046125a5565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6102836103873660046125a5565b61098a565b6103b261039a3660046125a5565b60046020526000908152604090205463ffffffff1681565b60405163ffffffff9091168152602001610207565b6102466103d53660046125a5565b73ffffffffffffffffffffffffffffffffffffffff166000908152600160205260409020546bffffffffffffffffffffffff1690565b61041e61041936600461253f565b610997565b6040516bffffffffffffffffffffffff9091168152602001610207565b6102466104493660046125a5565b60056020526000908152604090205481565b6101fa6040518060400160405280600481526020017f474541520000000000000000000000000000000000000000000000000000000081525081565b6102836104a53660046125a5565b610cae565b6102236104b836600461253f565b610e20565b6006546102239060ff1681565b61041e6104d83660046125a5565b610e5c565b6102836104eb3660046125d1565b610efa565b6102836104fe366004612629565b611310565b610246610511366004612693565b73ffffffffffffffffffffffffffffffffffffffff9182166000908152602081815260408083209390941682529190915220546bffffffffffffffffffffffff1690565b6102467fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b6105c561058a3660046126c6565b600360209081526000928352604080842090915290825290205463ffffffff81169064010000000090046bffffffffffffffffffffffff1682565b6040805163ffffffff90931683526bffffffffffffffffffffffff909116602083015201610207565b6102836105fc3660046125a5565b61187a565b6000807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83141561063f57506bffffffffffffffffffffffff610664565b6106618360405180606001604052806025815260200161285260259139611a15565b90505b3360008181526020818152604080832073ffffffffffffffffffffffffffffffffffffffff89168085529083529281902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff871690811790915590519081529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a360019150505b92915050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314610798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e616765720060448201526064015b60405180910390fd5b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f795b0e16c8da9807b0a215f3749bd6dbcc49fc0472183f4e446abb7dcbd9d00790600090a1565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081815260408083203380855290835281842054825160608101909352602580845291936bffffffffffffffffffffffff909116928592610856928892919061285290830139611a15565b90508673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156108a257506bffffffffffffffffffffffff82811614155b156109725760006108cc83836040518060600160405280603d8152602001612974603d9139611a67565b73ffffffffffffffffffffffffffffffffffffffff898116600081815260208181526040808320948a168084529482529182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff87169081179091559151918252939450919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505b61097d878783611ad5565b5060019695505050505050565b6109943382611e9c565b50565b6000438210610a28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f476561723a3a6765745072696f72566f7465733a206e6f74207965742064657460448201527f65726d696e656400000000000000000000000000000000000000000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff831660009081526004602052604090205463ffffffff1680610a63576000915050610707565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604081208491610a95600185612735565b63ffffffff90811682526020820192909252604001600020541611610b1b5773ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812090610ae5600184612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff1691506107079050565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020908152604080832083805290915290205463ffffffff16831015610b63576000915050610707565b600080610b71600184612735565b90505b8163ffffffff168163ffffffff161115610c565760006002610b968484612735565b610ba0919061275a565b610baa9083612735565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260036020908152604080832063ffffffff8581168552908352928190208151808301909252549283168082526401000000009093046bffffffffffffffffffffffff1691810191909152919250871415610c2a576020015194506107079350505050565b805163ffffffff16871115610c4157819350610c4f565b610c4c600183612735565b92505b5050610b74565b5073ffffffffffffffffffffffffffffffffffffffff8516600090815260036020908152604080832063ffffffff909416835292905220546bffffffffffffffffffffffff6401000000009091041691505092915050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314610d34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e6167657200604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff8116610db1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640161078f565b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f2f834d1c8c4b956018fff5faca4d99868ae635487424d9c265c257ccbc698c6a90600090a250565b600080610e45836040518060600160405280602681526020016128a760269139611a15565b9050610e52338583611ad5565b5060019392505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526004602052604081205463ffffffff1680610e94576000610ef3565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812090610ec5600184612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b9392505050565b604080518082018252600781527f47656172626f780000000000000000000000000000000000000000000000000060209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f028ef9f797075f74ac647c65fde04fb0f128c2d59fd40f45732269917642fd4681840152466060820152306080808301919091528351808303909101815260a0820184528051908301207fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60c083015273ffffffffffffffffffffffffffffffffffffffff8a1660e08301526101008201899052610120808301899052845180840390910181526101408301909452835193909201929092207f19010000000000000000000000000000000000000000000000000000000000006101608401526101628301829052610182830181905290916000906101a201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa1580156110d8573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166111a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f476561723a3a64656c656761746542795369673a20696e76616c69642073696760448201527f6e61747572650000000000000000000000000000000000000000000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff811660009081526005602052604081208054916111d7836127a4565b919050558914611269576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f476561723a3a64656c656761746542795369673a20696e76616c6964206e6f6e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161078f565b874211156112f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f476561723a3a64656c656761746542795369673a207369676e6174757265206560448201527f7870697265640000000000000000000000000000000000000000000000000000606482015260840161078f565b611303818b611e9c565b505050505b505050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86141561134d57506bffffffffffffffffffffffff611372565b61136f8660405180606001604052806024815260200161291c60249139611a15565b90505b604080518082018252600781527f47656172626f780000000000000000000000000000000000000000000000000060209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f028ef9f797075f74ac647c65fde04fb0f128c2d59fd40f45732269917642fd4681840152466060820152306080808301919091528351808303909101815260a0909101835280519082012073ffffffffffffffffffffffffffffffffffffffff8b166000908152600590925291812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918c918c918c919086611472836127a4565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810188905260e001604051602081830303815290604052805190602001209050600082826040516020016115199291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff8b169284019290925260608301899052608083018890529092509060019060a0016020604051602081039080840390855afa1580156115a2573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661164a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a7065726d69743a20696e76616c6964207369676e617475726500604482015260640161078f565b8b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146116df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f476561723a3a7065726d69743a20756e617574686f72697a6564000000000000604482015260640161078f565b88421115611749576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a7065726d69743a207369676e6174757265206578706972656400604482015260640161078f565b846000808e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508a73ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258760405161186491906bffffffffffffffffffffffff91909116815260200190565b60405180910390a3505050505050505050505050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314611900576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e6167657200604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff811661197d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640161078f565b60065460405173ffffffffffffffffffffffffffffffffffffffff80841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36006805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b6000816c010000000000000000000000008410611a5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b509192915050565b6000836bffffffffffffffffffffffff16836bffffffffffffffffffffffff1611158290611ac2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b50611acd83856127dd565b949350505050565b60065460ff1680611b025750600654610100900473ffffffffffffffffffffffffffffffffffffffff1633145b80611b24575060075473ffffffffffffffffffffffffffffffffffffffff1633145b611b8a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f476561723a3a7472616e73666572732061726520666f7262696464656e000000604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff8316611c2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603c60248201527f476561723a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260448201527f616e736665722066726f6d20746865207a65726f206164647265737300000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff8216611cd0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f476561723a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260448201527f616e7366657220746f20746865207a65726f2061646472657373000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260016020908152604091829020548251606081019093526036808452611d2d936bffffffffffffffffffffffff90921692859291906129b190830139611a67565b73ffffffffffffffffffffffffffffffffffffffff848116600090815260016020908152604080832080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff968716179055928616825290829020548251606081019093526030808452611dbf949190911692859290919061287790830139611f50565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260409182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff968716179055905193851684529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a373ffffffffffffffffffffffffffffffffffffffff808416600090815260026020526040808220548584168352912054611e9792918216911683611fc1565b505050565b73ffffffffffffffffffffffffffffffffffffffff808316600081815260026020818152604080842080546001845282862054949093528787167fffffffffffffffffffffffff000000000000000000000000000000000000000084168117909155905191909516946bffffffffffffffffffffffff9092169391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4611f4a828483611fc1565b50505050565b600080611f5d8486612802565b9050846bffffffffffffffffffffffff16816bffffffffffffffffffffffff1610158390611fb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b50949350505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561200b57506000816bffffffffffffffffffffffff16115b15611e975773ffffffffffffffffffffffffffffffffffffffff8316156120fd5773ffffffffffffffffffffffffffffffffffffffff831660009081526004602052604081205463ffffffff1690816120655760006120c4565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812090612096600185612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b905060006120eb82856040518060600160405280602881526020016128cd60289139611a67565b90506120f9868484846121e2565b5050505b73ffffffffffffffffffffffffffffffffffffffff821615611e975773ffffffffffffffffffffffffffffffffffffffff821660009081526004602052604081205463ffffffff1690816121525760006121b1565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812090612183600185612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b905060006121d882856040518060600160405280602781526020016128f560279139611f50565b9050611308858484845b60006122064360405180606001604052806034815260200161294060349139612465565b905060008463ffffffff1611801561226d575073ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812063ffffffff831691612251600188612735565b63ffffffff908116825260208201929092526040016000205416145b156123035773ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812083916122a4600188612735565b63ffffffff168152602081019190915260400160002080546bffffffffffffffffffffffff92909216640100000000027fffffffffffffffffffffffffffffffff000000000000000000000000ffffffff9092169190911790556123fe565b60408051808201825263ffffffff80841682526bffffffffffffffffffffffff808616602080850191825273ffffffffffffffffffffffffffffffffffffffff8b166000908152600382528681208b8616825290915294909420925183549451909116640100000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009094169116179190911790556123a5846001612832565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260046020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff929092169190911790555b604080516bffffffffffffffffffffffff80861682528416602082015273ffffffffffffffffffffffffffffffffffffffff8716917fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724910160405180910390a25050505050565b6000816401000000008410611a5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91905b600060208083528351808285015260005b818110156124d0578581018301518582016040015282016124b4565b818111156124e2576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461253a57600080fd5b919050565b6000806040838503121561255257600080fd5b61255b83612516565b946020939093013593505050565b60008060006060848603121561257e57600080fd5b61258784612516565b925061259560208501612516565b9150604084013590509250925092565b6000602082840312156125b757600080fd5b610ef382612516565b803560ff8116811461253a57600080fd5b60008060008060008060c087890312156125ea57600080fd5b6125f387612516565b9550602087013594506040870135935061260f606088016125c0565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a03121561264457600080fd5b61264d88612516565b965061265b60208901612516565b95506040880135945060608801359350612677608089016125c0565b925060a0880135915060c0880135905092959891949750929550565b600080604083850312156126a657600080fd5b6126af83612516565b91506126bd60208401612516565b90509250929050565b600080604083850312156126d957600080fd5b6126e283612516565b9150602083013563ffffffff811681146126fb57600080fd5b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600063ffffffff8381169083168181101561275257612752612706565b039392505050565b600063ffffffff80841680612798577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156127d6576127d6612706565b5060010190565b60006bffffffffffffffffffffffff8381169083168181101561275257612752612706565b60006bffffffffffffffffffffffff80831681851680830382111561282957612829612706565b01949350505050565b600063ffffffff8083168185168083038211156128295761282961270656fe476561723a3a617070726f76653a20616d6f756e7420657863656564732039362062697473476561723a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e74206f766572666c6f7773476561723a3a7472616e736665723a20616d6f756e7420657863656564732039362062697473476561723a3a5f6d6f7665566f7465733a20766f746520616d6f756e7420756e646572666c6f7773476561723a3a5f6d6f7665566f7465733a20766f746520616d6f756e74206f766572666c6f7773476561723a3a7065726d69743a20616d6f756e7420657863656564732039362062697473476561723a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d62657220657863656564732033322062697473476561723a3a7472616e7366657246726f6d3a207472616e7366657220616d6f756e742065786365656473207370656e64657220616c6c6f77616e6365476561723a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e7420657863656564732062616c616e6365a26469706673582212201b84fd7789a35c022f692420863210a30e82d2405659f5a28275d433fa53467f64736f6c634300080a003360806040526016805460ff1916905534801561001a57600080fd5b506040516110a73803806110a7833981016040819052610039916100b6565b600080546001600160a01b038085166001600160a01b0319928316179092556003805492841692909116919091179055610080600a6b033b2e3c9fd0803ce80000006100e9565b60075550506b033b2e3c9fd0803ce800000060155561010b565b80516001600160a01b03811681146100b157600080fd5b919050565b600080604083850312156100c957600080fd5b6100d28361009a565b91506100e06020840161009a565b90509250929050565b60008261010657634e487b7160e01b600052601260045260246000fd5b500490565b610f8d8061011a6000396000f3fe608060405234801561001057600080fd5b50600436106102e95760003560e01c806367c99d5811610191578063c5f956af116100e3578063dbcb313b11610097578063f11a648711610071578063f11a648714610320578063f3fdb15a146105f1578063fe14112d1461061157600080fd5b8063dbcb313b146105d6578063e941fa78146105df578063ef8d9603146105e857600080fd5b8063cb3905e1116100c8578063cb3905e1146105c4578063cf33d95514610320578063d0efe753146105cd57600080fd5b8063c5f956af14610588578063ca9505e4146105a857600080fd5b80639aa5d46211610145578063b6ac642a1161011f578063b6ac642a14610567578063bb04b19314610567578063bf28068b1461057557600080fd5b80639aa5d46214610544578063a4e8273e14610557578063b3554a0a1461055e57600080fd5b8063788c6bfe11610176578063788c6bfe146104ef5780638456cb591461050157806396df5dc01461053157600080fd5b806367c99d58146104de57806374375359146104e757600080fd5b806336dda7d51161024a5780634d778ad1116101fe57806354fd4d50116101d857806354fd4d50146104c05780635c975abb146104c8578063609ae317146104d557600080fd5b80634d778ad114610491578063532fe502146104a45780635427c938146104ad57600080fd5b80633f4ba83a1161022f5780633f4ba83a1461045257806345d31f9d1461047f5780634c19386c1461048857600080fd5b806336dda7d51461040f5780633e163df01461042f57600080fd5b80632495a599116102a157806329f3d3b61161028657806329f3d3b6146103b35780632a3354c9146103bc5780632e97ca21146103dc57600080fd5b80632495a599146103735780632954018c1461039357600080fd5b8063078c4781116102d2578063078c4781146103205780630fce70fb146103335780631e16e4fc1461033b57600080fd5b8063030dbb04146102ee57806305fe138b1461030a575b600080fd5b6102f760105481565b6040519081526020015b60405180910390f35b6102f7610318366004610ce8565b600092915050565b61033161032e366004610d14565b50565b005b6015546102f7565b61034e610349366004610d2f565b610618565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610301565b60035461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b60005461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6102f760095481565b600a5461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103ff6103ea366004610d14565b60066020526000908152604090205460ff1681565b6040519015158152602001610301565b60055461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103ff61043d366004610d14565b60146020526000908152604090205460ff1681565b610331601680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b6102f760075481565b6102f760015481565b6102f761049f366004610d2f565b61064f565b6102f760115481565b6102f76104bb366004610d2f565b61066d565b6102f7600181565b6016546103ff9060ff1681565b6102f760085481565b6102f7600d5481565b6102f7610685565b6b033b2e3c9fd0803ce80000006102f7565b610331601680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b61033161053f366004610d2f565b601555565b610331610552366004610d48565b505050565b60016102f7565b6102f7600e5481565b61033161032e366004610d2f565b610331610583366004610ce8565b61071d565b60135461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103316105b6366004610d7d565b600b92909255600c55600d55565b6102f7600c5481565b6102f7600b5481565b6102f760155481565b6102f7600f5481565b6102f760025481565b60125461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b60006102f7565b6004818154811061062857600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6000610667826b033b2e3c9fd0803ce800000061077a565b92915050565b6000610667826b033b2e3c9fd0803ce80000006108e9565b6003546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156106f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107189190610da9565b905090565b6009829055600a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691909117909155600354610776911682846109fe565b5050565b60408051808201909152600281527f4d330000000000000000000000000000000000000000000000000000000000006020820152600090826107f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b60405180910390fd5b506000610800600284610e72565b90506b033b2e3c9fd0803ce8000000610839827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610ead565b6108439190610e72565b8411156040518060400160405280600281526020017f4d31000000000000000000000000000000000000000000000000000000000000815250906108b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b5082816108cd6b033b2e3c9fd0803ce800000087610ec4565b6108d79190610f01565b6108e19190610e72565b949350505050565b60008215806108f6575081155b1561090357506000610667565b8161091b60026b033b2e3c9fd0803ce8000000610e72565b610945907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610ead565b61094f9190610e72565b8311156040518060400160405280600281526020017f4d31000000000000000000000000000000000000000000000000000000000000815250906109c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b506b033b2e3c9fd0803ce80000006109d9600282610e72565b6109e38486610ec4565b6109ed9190610f01565b6109f79190610e72565b9392505050565b6040805173ffffffffffffffffffffffffffffffffffffffff848116602483015260448083018590528351808403909101815260649092018352602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65649084015261055292869291600091610ac9918516908490610b73565b8051909150156105525780806020019051810190610ae79190610f19565b610552576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016107e9565b60606108e1848460008585843b610be6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107e9565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051610c0f9190610f3b565b60006040518083038185875af1925050503d8060008114610c4c576040519150601f19603f3d011682016040523d82523d6000602084013e610c51565b606091505b5091509150610c61828286610c6c565b979650505050505050565b60608315610c7b5750816109f7565b825115610c8b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ce357600080fd5b919050565b60008060408385031215610cfb57600080fd5b82359150610d0b60208401610cbf565b90509250929050565b600060208284031215610d2657600080fd5b6109f782610cbf565b600060208284031215610d4157600080fd5b5035919050565b600080600060608486031215610d5d57600080fd5b83359250610d6d60208501610cbf565b9150604084013590509250925092565b600080600060608486031215610d9257600080fd5b505081359360208301359350604090920135919050565b600060208284031215610dbb57600080fd5b5051919050565b60005b83811015610ddd578181015183820152602001610dc5565b83811115610dec576000848401525b50505050565b6020815260008251806020840152610e11816040850160208701610dc2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082610ea8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600082821015610ebf57610ebf610e43565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610efc57610efc610e43565b500290565b60008219821115610f1457610f14610e43565b500190565b600060208284031215610f2b57600080fd5b815180151581146109f757600080fd5b60008251610f4d818460208701610dc2565b919091019291505056fea26469706673582212204edb887d94928b3914f60ab48df0182da9eb30ddbb7021b164cc728b60a655d564736f6c634300080a003360e06040523480156200001157600080fd5b5060405162013af238038062013af2833981016040819052620000349162000630565b826001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000073573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000999190620007bf565b620000a433620004ab565b6001600160a01b038116608081905260408051630873769560e01b815290516308737695916004808201926020929091908290030181865afa158015620000ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001159190620007bf565b6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000153573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001799190620007bf565b6001600160a01b0390811660a052841660c0525060405183906200019d9062000519565b6001600160a01b039091168152602001604051809103906000f080158015620001ca573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b0392909216918217905560608301516080840151604051620002029062000527565b6001600160a01b03938416815292909116602083015215156040820152606001604051809103906000f0801580156200023f573d6000803e3d6000fd5b50600280546001600160a01b0319166001600160a01b0392909216919091179055604051600090620002746020820162000535565b601f1982820381018352601f909101166040819052600154600254620002b0926001600160a01b039283169291909116908790602001620007e6565b60408051601f1981840301815290829052620002d09291602001620008e8565b60408051601f19818403018152919052905060006200035982848151602092830120604080517fff00000000000000000000000000000000000000000000000000000000000000818601523060601b6001600160601b03191660218201526035810193909352605580840192909252805180840390920182526075909201909152805191012090565b600154604051634fafc35760e11b81526001600160a01b038084166004830152929350911690639f5f86ae90602401600060405180830381600087803b158015620003a357600080fd5b505af1158015620003b8573d6000803e3d6000fd5b50505050620003ce8284620004fb60201b60201c565b600380546001600160a01b0319166001600160a01b0383811691821790925560015460408051630304b08760e61b81529051919093169263c12c21c09160048083019260209291908290030181865afa15801562000430573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004569190620007bf565b6001600160a01b031614620004a05760405162461bcd60e51b815260206004820152600c60248201526b496e636f727265637420434d60a01b604482015260640160405180910390fd5b505050505062000909565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008183516020850134f59050803b6200051457600080fd5b505050565b6158e8806200243683390190565b615e978062007d1e83390190565b615f3d806200dbb583390190565b6001600160a01b03811681146200055957600080fd5b50565b8051620005698162000543565b919050565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b0381118282101715620005a957620005a96200056e565b60405290565b604080519081016001600160401b0381118282101715620005a957620005a96200056e565b604051601f8201601f191681016001600160401b0381118282101715620005ff57620005ff6200056e565b604052919050565b80516001600160801b03811681146200056957600080fd5b805180151581146200056957600080fd5b6000806000606084860312156200064657600080fd5b8351620006538162000543565b602085810151919450906001600160401b03808211156200067357600080fd5b9086019060a082890312156200068857600080fd5b6200069262000584565b6200069d8362000607565b8152620006ac84840162000607565b8482015260408084015183811115620006c457600080fd5b8401601f81018b13620006d657600080fd5b805184811115620006eb57620006eb6200056e565b620006fb878260051b01620005d4565b818152878101955060069190911b82018701908c8211156200071c57600080fd5b918701915b818310156200077e5783838e0312156200073b5760008081fd5b62000745620005af565b8351620007528162000543565b81528389015161ffff811681146200076a5760008081fd5b818a01528652948701949183019162000721565b8484015250620007939050606085016200055c565b6060830152620007a6608085016200061f565b6080830152979097015195989697509495945050505050565b600060208284031215620007d257600080fd5b8151620007df8162000543565b9392505050565b600060018060a01b0380861683526020818616818501526040606081860152610100850160018060801b038088511660608801528084890151166080880152508187015160a080880152818151808452610120890191508583019350600092505b808310156200087857835180518816835286015161ffff168683015292850192600192909201919084019062000847565b5060608901516001600160a01b031660c0890152608090980151151560e0909701969096525094979650505050505050565b6000815160005b81811015620008cd5760208185018101518683015201620008b1565b81811115620008dd576000828601525b509290920192915050565b600062000901620008fa8386620008aa565b84620008aa565b949350505050565b60805160a05160c051611ad3620009636000396000818161010a0152610ea00152600081816103790152610b170152600081816101680152818161068c01528181610a4d01528181610b860152610c190152611ad36000f3fe6080604052600436106100f35760003560e01c80638da5cb5b1161008a578063ebf0c71711610059578063ebf0c71714610367578063f2fde38b1461039b578063f4747c58146103bb578063f9aa028a146103db57600080fd5b80638da5cb5b1461025a57806394ca2cb5146102855780639c4ae2d014610327578063c12c21c01461033a57600080fd5b80633e0b1a23116100c65780633e0b1a23146101ce5780634ef501ac146101e3578063715018a614610230578063805abe6a1461024557600080fd5b806316f0115b146100f85780632954018c146101565780632f7a18811461018a578063318d0d10146101b7575b600080fd5b34801561010457600080fd5b5061012c7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561016257600080fd5b5061012c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561019657600080fd5b5060025461012c9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156101c357600080fd5b506101cc610408565b005b3480156101da57600080fd5b506101cc610498565b3480156101ef57600080fd5b506102036101fe366004611726565b610521565b6040805173ffffffffffffffffffffffffffffffffffffffff93841681529290911660208301520161014d565b34801561023c57600080fd5b506101cc610567565b34801561025157600080fd5b506101cc6105f2565b34801561026657600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff1661012c565b34801561029157600080fd5b5061012c6102a03660046117e6565b8151602092830120604080517fff00000000000000000000000000000000000000000000000000000000000000818601523060601b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660218201526035810193909352605580840192909252805180840390920182526075909201909152805191012090565b6101cc6103353660046117e6565b6107d8565b34801561034657600080fd5b5060015461012c9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561037357600080fd5b5061012c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103a757600080fd5b506101cc6103b63660046118c0565b6107f5565b3480156103c757600080fd5b506101cc6103d63660046118e4565b610925565b3480156103e757600080fd5b5060035461012c9073ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff16331461048e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b610496610a49565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610519576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b61048e610b82565b6004818154811061053157600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff91821692501682565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b61049660006116b1565b60005473ffffffffffffffffffffffffffffffffffffffff163314610673576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b3073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106f5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071991906119c4565b73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610763573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078791906119c4565b73ffffffffffffffffffffffffffffffffffffffff1614156107d5576040517fbdebb83f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33ff5b60008183516020850134f59050803b6107f057600080fd5b505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b73ffffffffffffffffffffffffffffffffffffffff8116610919576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610485565b610922816116b1565b50565b60005473ffffffffffffffffffffffffffffffffffffffff1633146109a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b805160005b818110156107f05760048382815181106109c7576109c76119e1565b602090810291909101810151825460018082018555600094855293839020825160029092020180547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff938416178255929093015192840180549092169216919091179055016109ab565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ab6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ada91906119c4565b6040517ff2fde38b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301529192509082169063f2fde38b90602401600060405180830381600087803b158015610b6757600080fd5b505af1158015610b7b573d6000803e3d6000fd5b5050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1391906119c4565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca691906119c4565b60045490915060005b81811015610dd4576003546004805473ffffffffffffffffffffffffffffffffffffffff90921691637bccacee919084908110610cee57610cee6119e1565b906000526020600020906002020160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660048481548110610d3357610d336119e1565b600091825260209091206002909102015460405160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b158015610db157600080fd5b505af1158015610dc5573d6000803e3d6000fd5b50505050806001019050610caf565b506001546040517fe26b2f6300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529084169063e26b2f6390602401600060405180830381600087803b158015610e4257600080fd5b505af1158015610e56573d6000803e3d6000fd5b50506001546040517fcf33d95500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201527f0000000000000000000000000000000000000000000000000000000000000000909116925063cf33d9559150602401600060405180830381600087803b158015610ee857600080fd5b505af1158015610efc573d6000803e3d6000fd5b50505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f919190611a10565b905060005b818110156116ab576003546040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810183905260009173ffffffffffffffffffffffffffffffffffffffff1690635094cb4f90602401602060405180830381865afa15801561100e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103291906119c4565b6001546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80841660048301529293506000929091169063fdd5764590602401602060405180830381865afa1580156110a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110cc91906119c4565b905060008173ffffffffffffffffffffffffffffffffffffffff1663ce30bbdb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561111b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113f9190611a29565b9050600c81601081111561115557611155611a4a565b14156116225760008273ffffffffffffffffffffffffffffffffffffffff166320b2c1516040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111cc91906119c4565b905060008373ffffffffffffffffffffffffffffffffffffffff1663927188d96040518163ffffffff1660e01b8152600401602060405180830381865afa15801561121b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123f91906119c4565b905060008473ffffffffffffffffffffffffffffffffffffffff166399253ac06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561128e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b291906119c4565b6040517f9dcb511a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152919250908a169063e8a97a3e9083908390639dcb511a90602401602060405180830381865afa15801561132c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135091906119c4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156113bd57600080fd5b505af11580156113d1573d6000803e3d6000fd5b50506040517f9dcb511a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301528c16925063e8a97a3e915085908390639dcb511a90602401602060405180830381865afa15801561144b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061146f91906119c4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156114dc57600080fd5b505af11580156114f0573d6000803e3d6000fd5b50506003546001546040517f7832743800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301529283169450633e7c88d69350879290911690637832743890602401602060405180830381865afa158015611573573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115979190611a79565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015261ffff166024820152604401600060405180830381600087803b15801561160657600080fd5b505af115801561161a573d6000803e3d6000fd5b505050505050505b600d81601081111561163657611636611a4a565b141561169d578173ffffffffffffffffffffffffffffffffffffffff16639b51ecd36040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561168457600080fd5b505af1158015611698573d6000803e3d6000fd5b505050505b836001019350505050610f96565b50505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561173857600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156117915761179161173f565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156117de576117de61173f565b604052919050565b600080604083850312156117f957600080fd5b823567ffffffffffffffff8082111561181157600080fd5b818501915085601f83011261182557600080fd5b81356020828211156118395761183961173f565b611869817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011601611797565b9250818352878183860101111561187f57600080fd5b8181850182850137600091830181019190915290969401359450505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461092257600080fd5b6000602082840312156118d257600080fd5b81356118dd8161189e565b9392505050565b600060208083850312156118f757600080fd5b823567ffffffffffffffff8082111561190f57600080fd5b818501915085601f83011261192357600080fd5b8135818111156119355761193561173f565b611943848260051b01611797565b818152848101925060069190911b83018401908782111561196357600080fd5b928401925b818410156119b957604084890312156119815760008081fd5b61198961176e565b84356119948161189e565b8152848601356119a38161189e565b8187015283526040939093019291840191611968565b979650505050505050565b6000602082840312156119d657600080fd5b81516118dd8161189e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215611a2257600080fd5b5051919050565b600060208284031215611a3b57600080fd5b8151601181106118dd57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060208284031215611a8b57600080fd5b815161ffff811681146118dd57600080fdfea264697066735822122090f5e4310a8b66bfdd7fdfbe64bc5b98570e7c1a415ffb0ced3c857cf6c5b14064736f6c634300080a00336101606040526000805462ff00001916620c00001790553480156200002357600080fd5b50604051620058e8380380620058e8833981016040819052620000469162000537565b806001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000085573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ab919062000537565b6000805460ff191690556001600160a01b038116620000dd57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200011c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000142919062000537565b6001600160a01b03166080816001600160a01b031681525050506000816001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200019d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c3919062000537565b6001600160a01b03831661010081905260e081905260408051632495a59960e01b81529051929350600092632495a599916004808201926020929091908290030181865afa1580156200021a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000240919062000537565b6001600160a01b03811660c05290506200025a8162000472565b816001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000299573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002bf919062000537565b6001600160a01b0316610120816001600160a01b031681525050816001600160a01b03166377532ed96040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000318573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033e919062000537565b6001600160a01b0316610140816001600160a01b031681525050816001600160a01b031663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000397573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003bd919062000537565b6001600001600a6101000a8154816001600160a01b0302191690836001600160a01b03160217905550816001600160a01b0316639068a8686040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000425573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044b919062000537565b6001600160a01b031660a0525050600380546001600160a01b031916331790555062000588565b6001600160a01b03811660009081526006602052604090205415620004aa57604051632e5a5c7760e01b815260040160405180910390fd5b61010060055410620004cf57604051631cbbe18560e01b815260040160405180910390fd5b600580546001600160a01b0383166000818152600660209081526040808320600190951b948590558483526004909152812091909155825491929062000515836200055e565b91905055505050565b6001600160a01b03811681146200053457600080fd5b50565b6000602082840312156200054a57600080fd5b815162000557816200051e565b9392505050565b60006000198214156200058157634e487b7160e01b600052601160045260246000fd5b5060010190565b60805160a05160c05160e051610100516101205161014051615248620006a0600039600081816107e20152818161371001526137c501526000818161052f01526136780152600081816103d301528181610e5701528181610ebb015281816124ff0152818161265a01528181612aa101528181612b8c01528181612c4e01528181612d0d0152613b8f015260006105a401526000818161062701528181610d2201528181610db301528181610e0001528181610e3601528181610f3f0152818161203a01528181612b6b015281816130ee015281816134dc015281816135a90152613fe601526000818161081c01528181610fe101526124c20152600081816107a80152818161118401526122cb01526152486000f3fe608060405234801561001057600080fd5b50600436106103415760003560e01c8063830aa745116101bd578063a70bc542116100f9578063e75538c7116100a2578063f9aa028a1161007c578063f9aa028a1461089d578063fdd57645146108bd578063fe47cde7146108f3578063ff6875431461091357600080fd5b8063e75538c714610864578063e958b70414610877578063f67c5bd01461088a57600080fd5b8063db7ceb80116100d3578063db7ceb8014610817578063dc2b21c11461083e578063e1998cf91461085157600080fd5b8063a70bc542146107ca578063c5e10eef146107dd578063d48bfca71461080457600080fd5b806394cf073a116101665780639f5f86ae116101405780639f5f86ae146107745780639fd12b7714610787578063a366f49614610790578063a50cf2c8146107a357600080fd5b806394cf073a146106f557806395373018146107085780639af1d35a1461071b57600080fd5b80638991b2f1116101975780638991b2f1146106af5780638fe3f93f146106cf578063944ac59f146106e257600080fd5b8063830aa7451461066f5780638345f26e146106825780638456cb59146106a757600080fd5b8063458936f51161028c578063570a7af2116102355780636ce4074a1161020f5780636ce4074a146105ef5780636e98e5e41461060f5780636f307dc314610622578063783274381461064957600080fd5b8063570a7af21461059f5780635c975abb146105c6578063654a9eda146105dc57600080fd5b80635063524a116102665780635063524a1461055157806351e3f1601461058457806354fd4d501461059757600080fd5b8063458936f51461050e57806346fb371d146105175780634f0e0ef31461052a57600080fd5b80632630c12f116102ee5780633192195c116102c85780633192195c146104be5780633e8297ca146104e65780633f4ba83a1461050657600080fd5b80632630c12f1461045857806329df0b93146104845780632f7a18811461049757600080fd5b806316f0115b1161031f57806316f0115b146103ce578063172c48c7146103f55780632362a2d81461043757600080fd5b8063055ee9b5146103465780630d8f9cee146103a657806311ca4fc2146103bb575b600080fd5b61037c610354366004614a87565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6103b96103b4366004614aa4565b610949565b005b6103b96103c9366004614aa4565b610a76565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b610408610403366004614add565b610b4e565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835261ffff90911660208301520161039d565b61044a610445366004614b13565b610b66565b60405190815260200161039d565b6001546a0100000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1661037c565b6103b9610492366004614a87565b6110be565b60005461037c906301000000900473ffffffffffffffffffffffffffffffffffffffff1681565b6104d16104cc366004614a87565b611122565b6040805192835260208301919091520161039d565b61044a6104f4366004614a87565b60096020526000908152604090205481565b6103b9611156565b61044a60055481565b6103b9610525366004614b95565b611244565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b61056461055f366004614be6565b61149b565b60408051948552602085019390935291830152606082015260800161039d565b6103b9610592366004614aa4565b611602565b61044a600281565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b60005460ff16604051901515815260200161039d565b6103b96105ea366004614c21565b611703565b6106026105fd366004614d40565b611bbb565b60405161039d9190614e5b565b6103b961061d366004614aa4565b611e8e565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b61065c610657366004614a87565b612036565b60405161ffff909116815260200161039d565b6103b961067d366004614b95565b61210f565b6000546106959062010000900460ff1681565b60405160ff909116815260200161039d565b6103b961229d565b61044a6106bd366004614a87565b60086020526000908152604090205481565b61037c6106dd366004614e6e565b612389565b6103b96106f0366004614ea5565b612718565b61044a610703366004614f0a565b612845565b6103b9610716366004614a87565b612e5a565b6001546040805161ffff808416825262010000840481166020830152640100000000840481169282019290925266010000000000008304821660608201526801000000000000000090920416608082015260a00161039d565b6103b9610782366004614a87565b612f85565b61044a60075481565b6103b961079e366004614add565b613045565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b96107d8366004614f4c565b61309b565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b9610812366004614a87565b613221565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b961084c366004614f81565b61327b565b6103b961085f366004614aa4565b613306565b610408610872366004614add565b6134c9565b61037c610885366004614a87565b613541565b61044a610898366004614a87565b6135a5565b60035461037c9073ffffffffffffffffffffffffffffffffffffffff1681565b61037c6108cb366004614a87565b600b6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b600c5461037c9073ffffffffffffffffffffffffffffffffffffffff1681565b61037c610921366004614a87565b600a6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561099b57506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b156109d2576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff1615610a14576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055610a4a828261362e565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b60035473ffffffffffffffffffffffffffffffffffffffff163314610ac7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805473ffffffffffffffffffffffffffffffffffffffff9384166301000000027fffffffffffffffffff0000000000000000000000000000000000000000ffffff90911617905560018054919092166a0100000000000000000000027fffff0000000000000000000000000000000000000000ffffffffffffffffffff909116179055565b600080610b5d6001841b6134c9565b91509150915091565b6000805460ff1615610bd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064015b60405180910390fd5b600054610100900460ff1615610c1b576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff163314610ca0576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610cab89613541565b90506000806000806000610cbe86611122565b9094509050610ccf8c8e868461149b565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152939b5093985090955093506000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015610d6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8f9190614fa4565b9050610d9b8887614fec565b610da6906001614fec565b811115610de657610de1877f00000000000000000000000000000000000000000000000000000000000000008d60018c8b870303038d61366e565b610e30565b610e3073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168d8960018a8d01869003016138c0565b610e7e877f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000089600061366e565b6040517fca9505e40000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604481018490527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ca9505e490606401600060405180830381600087803b158015610f1457600080fd5b505af1158015610f28573d6000803e3d6000fd5b50505050505050506001841115610f6757610f67837f00000000000000000000000000000000000000000000000000000000000000008d87600061366e565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260086020526040902054861916610f9c8489888461395b565b6040517f89b77b3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f000000000000000000000000000000000000000000000000000000000000000016906389b77b3e90602401600060405180830381600087803b15801561102557600080fd5b505af1158015611039573d6000803e3d6000fd5b50505073ffffffffffffffffffffffffffffffffffffffff909c16600090815260026020526040812080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550929a9950505050505050505050565b6000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314611116576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61111f81613a35565b50565b60008060008061113185613aa6565b91955092509050816111438286615004565b61114d9190615041565b92505050915091565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156111e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611204919061507c565b61123a576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611242613c24565b565b60005460ff16156112b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156112f3576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100178155338152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff9081169084161480159061137457506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b80156113985750600c5473ffffffffffffffffffffffffffffffffffffffff163314155b806113b7575073ffffffffffffffffffffffffffffffffffffffff8316155b156113ee576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113f7826135a5565b61142d576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061143885613541565b9050611448838583856000613d05565b61146c5761145b83858360006001613d05565b5061146a838583856001613d05565b505b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b6001546000908190819081906127109061ffff166114b98888615099565b6114c39190615004565b6114cd9190615041565b6114d79086614fec565b935060018760028111156114ed576114ed6150b0565b1415611587576001546000906127109061151390640100000000900461ffff168b615004565b61151d9190615041565b6001549091506127109061153b9062010000900461ffff168b615004565b6115459190615041565b61154f9086614fec565b94508481111561156657600185820303935061156a565b8094505b85811061157b578585039250611581565b84860391505b506115f7565b600287600281111561159b5761159b6150b0565b14156115f157600154600090612710906115c59068010000000000000000900461ffff168b615004565b6115cf9190615041565b6001549091506127109061153b906601000000000000900461ffff168b615004565b84840391505b945094509450949050565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561165457506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b1561168b576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff16156116cd576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055610a4a8282613ea6565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561175557506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b1561178c576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff16156117ce576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790556118048584613ea6565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152600091908616906370a0823190602401602060405180830381865afa158015611874573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118989190614fa4565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529192506000918616906370a0823190602401602060405180830381865afa15801561190a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192e9190614fa4565b60015490915060009081906a0100000000000000000000900473ffffffffffffffffffffffffffffffffffffffff16635cecbd0e61196c8689615099565b8a6119778988615099565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152600481019390935273ffffffffffffffffffffffffffffffffffffffff918216602484015260448301528a1660648201526084016040805180830381865afa1580156119f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1791906150df565b9150915060018411611a2d57611a2d898961362e565b611a3687612036565b611a449061ffff1682615004565b9050611a4f88612036565b611a5d9061ffff1683615004565b9150818110611a7857611a6f89613a35565b5050505061146c565b73ffffffffffffffffffffffffffffffffffffffff891660009081526009602052604081205483611ab56b033b2e3c9fd0803ce800000085615004565b611abf9190615041565b611ad5906b033b2e3c9fd0803ce8000000615099565b611adf9190614fec565b60015490915061271090611b0a906b033b2e3c9fd0803ce80000009062010000900461ffff16615004565b611b149190615041565b8111611b555773ffffffffffffffffffffffffffffffffffffffff8a166000908152600960205260409020819055611b4b8a613a35565b505050505061146c565b611b5e8a613f56565b50505073ffffffffffffffffffffffffffffffffffffffff871660009081526009602052604090206001905550505050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b6060611bc960005460ff1690565b15611c30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff1615611c72576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100178155338152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff908116908416141580611ce7575073ffffffffffffffffffffffffffffffffffffffff8316155b15611d3d57600c5473ffffffffffffffffffffffffffffffffffffffff163314611d3d576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611d4885613541565b90508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167faed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab0360405160405180910390a36040517f1cff79cd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821690631cff79cd90611df89087908790600401615103565b6000604051808303816000875af1158015611e17573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611e5d9190810190615132565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905595945050505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314611edf576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821615611f4f5773ffffffffffffffffffffffffffffffffffffffff8281166000908152600a6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169183169190911790555b73ffffffffffffffffffffffffffffffffffffffff811615611fbf5773ffffffffffffffffffffffffffffffffffffffff8181166000908152600b6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169184169190911790555b73ffffffffffffffffffffffffffffffffffffffff811673cccccccccccccccccccccccccccccccccccccccc141561203257600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790555b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120ba5750506001547e01000000000000000000000000000000000000000000000000000000000000900461ffff1690565b60006120c5836135a5565b9050806120fe576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612107816134c9565b949350505050565b60005460ff161561217c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156121be576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff163314612243576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61224d8383613ea6565b61226f73ffffffffffffffffffffffffffffffffffffffff83168585846138c0565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555050565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015612327573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061234b919061507c565b612381576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112426142d4565b6000805460ff16156123f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff1615612439576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff1633146124be576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166321d18456857f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612568573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061258c9190614fa4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168152600481019290925260248201526044016020604051808303816000875af11580156125e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061260b91906151a0565b6040517fbf28068b0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff80831660248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063bf28068b90604401600060405180830381600087803b1580156126a057600080fd5b505af11580156126b4573d6000803e3d6000fd5b505050506126c28382614394565b73ffffffffffffffffffffffffffffffffffffffff811660009081526008602052604081206001905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690559392505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314612769576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805461ffff92831668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9484166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff96851664010000000002969096167fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff97851662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000090931694909816939093171794909416949094179190911716919091179055565b6000805460ff16156128b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156128f5576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff16331461297a576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080600061298887613aa6565b925092509250846129a25761299d8684615099565b6129ac565b6129ac8684614fec565b935060008515612b045769021e19e0c9bab24000008510612a15576129d583603689901c615004565b6129e3603686901c84615004565b6129ed9190614fec565b603686901c6129fc8585615004565b612a069190615004565b612a109190615041565b612a52565b612a1f8388615004565b612a298584615004565b612a339190614fec565b85612a3e8585615004565b612a489190615004565b612a529190615041565b6040517fbf28068b0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff8a811660248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063bf28068b90604401600060405180830381600087803b158015612ae757600080fd5b505af1158015612afb573d6000803e3d6000fd5b50505050612d9f565b60008484612b128583615004565b612b1c9190615041565b612b269190615099565b60015490915060009061271090612b419061ffff1684615004565b612b4b9190615041565b905073ffffffffffffffffffffffffffffffffffffffff8a1663d1660f997f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000084612bb6878f614fec565b612bc09190614fec565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b158015612c3457600080fd5b505af1158015612c48573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ca9505e4838b612c949190614fec565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815260048101919091526024810184905260006044820152606401600060405180830381600087803b158015612cf357600080fd5b505af1158015612d07573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d9a9190614fa4565b925050505b6040517f16128211000000000000000000000000000000000000000000000000000000008152600481018690526024810182905273ffffffffffffffffffffffffffffffffffffffff891690631612821190604401600060405180830381600087803b158015612e0e57600080fd5b505af1158015612e22573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055509498975050505050505050565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff16158015612eac57506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b15612ee3576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff1615612f25576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055612f5a81613f56565b50600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b60035473ffffffffffffffffffffffffffffffffffffffff163314612fd6576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517ff62005acebe9b616aefb5f248b48f5e89f28437b27d1eebc0b2d911209f297af90600090a250565b60035473ffffffffffffffffffffffffffffffffffffffff163314613096576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600755565b60035473ffffffffffffffffffffffffffffffffffffffff1633146130ec576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613193576001805461ffff83167e01000000000000000000000000000000000000000000000000000000000000027dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790555050565b600061319e836135a5565b9050806131d7576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000908152600460205260409020805473ffffffffffffffffffffffffffffffffffffffff1675ffff000000000000000000000000000000000000000060a084901b161790555050565b60035473ffffffffffffffffffffffffffffffffffffffff163314613272576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61111f81614467565b60035473ffffffffffffffffffffffffffffffffffffffff1633146132cc576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805460ff90921662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff909216919091179055565b60005460ff1615613373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156133b5576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff16331461343a576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061344583613541565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260026020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055905061349c8282614394565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b60008082600114156135275750506001547f0000000000000000000000000000000000000000000000000000000000000000927e0100000000000000000000000000000000000000000000000000000000000090910461ffff169150565b50506000908152600460205260409020549060a082901c90565b73ffffffffffffffffffffffffffffffffffffffff80821660009081526002602052604090205416806135a0576040517fb5ba4c4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146136255773ffffffffffffffffffffffffffffffffffffffff8216600090815260066020526040902054613628565b60015b92915050565b6000613639826135a5565b73ffffffffffffffffffffffffffffffffffffffff909316600090815260086020526040902080549319939093169092555050565b8080156136c657507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b15613828576040517fd1660f9900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301526044820184905286169063d1660f9990606401600060405180830381600087803b15801561376357600080fd5b505af1158015613777573d6000803e3d6000fd5b50506040517f5869dba800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690527f0000000000000000000000000000000000000000000000000000000000000000169250635869dba89150604401600060405180830381600087803b15801561380b57600080fd5b505af115801561381f573d6000803e3d6000fd5b505050506138b9565b6040517fd1660f9900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301526044820184905286169063d1660f9990606401600060405180830381600087803b1580156138a057600080fd5b505af11580156138b4573d6000803e3d6000fd5b505050505b5050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261395590859061455b565b50505050565b60025b8181116138b95781811615613a2d576000613978826134c9565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529192506000918316906370a0823190602401602060405180830381865afa1580156139eb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a0f9190614fa4565b90506002811115613a2a57613a2a878388600185038961366e565b50505b60011b61395e565b73ffffffffffffffffffffffffffffffffffffffff811660009081526008602052604081205490613a6582614667565b60005490915062010000900460ff16811115613aa1576000613a86836146a7565b613a91906001614fec565b905061395584848460008561470b565b505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff16631afbb7a46040518163ffffffff1660e01b8152600401602060405180830381865afa158015613af6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b1a9190614fa4565b92508373ffffffffffffffffffffffffffffffffffffffff166317d11a156040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b8b9190614fa4565b91507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bf8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c1c9190614fa4565b929491935050565b60005460ff16613c90576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610bd0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6040805173ffffffffffffffffffffffffffffffffffffffff8681166024830152604480830186905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b30000000000000000000000000000000000000000000000000000000017905291517f1cff79cd000000000000000000000000000000000000000000000000000000008152600092861691631cff79cd91613dc6918a91600401615103565b6000604051808303816000875af1925050508015613e2457506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052613e219190810190615132565b60015b613e2d57613e61565b80511580613e50575080806020019051810190613e4a919061507c565b15156001145b15613e5f576001915050613e9d565b505b8115613e99576040517f76e3e29c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060005b95945050505050565b6000613eb1826135a5565b9050801580613ec35750600754811615155b15613efa576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83166000908152600860205260409020548116613aa15773ffffffffffffffffffffffffffffffffffffffff83166000908152600860205260409020805482179055505050565b60015473ffffffffffffffffffffffffffffffffffffffff8281166000908152600860205260408120546a010000000000000000000090930490911691908080613f9f86611122565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526127108202600482015273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350908716915063f9a6503090604401602060405180830381865afa15801561403a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061405e9190614fa4565b9250614069846146a7565b6001019150506000806000805b848110156142a157801561408f5760018186031b614092565b60015b935086841615614299576000806140a8866134c9565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8e811660048301529294509092506000918416906370a0823190602401602060405180830381865afa15801561411d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141419190614fa4565b9050600181111561428c576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff848116602483015261ffff841691908d169063f9a6503090604401602060405180830381865afa1580156141c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141ea9190614fa4565b6141f49190615004565b6141fe9087614fec565b95508886106142875760006142128b614667565b60005490915062010000900460ff16811115614249576142448d8c836001891561423e57898e0361470b565b8d61470b565b614278565b85156142785773ffffffffffffffffffffffffffffffffffffffff8d1660009081526008602052604090208b90555b50505050505050505050505050565b614295565b98861898600194505b5050505b600101614076565b506040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005460ff1615614341576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613cdb3390565b73ffffffffffffffffffffffffffffffffffffffff821615806143dd575073ffffffffffffffffffffffffffffffffffffffff8281166000908152600260205260409020541615155b15614414576040517f9e59609e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff918216600090815260026020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001691909216179055565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260066020526040902054156144c4576040517f2e5a5c7700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61010060055410614501576040517f1cbbe18500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005805473ffffffffffffffffffffffffffffffffffffffff83166000818152600660209081526040808320600190951b9485905584835260049091528120919091558254919290614552836151bd565b91905055505050565b60006145bd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166148799092919063ffffffff16565b805190915015613aa157808060200190518101906145db919061507c565b613aa1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610bd0565b60008060005b6101008110156146a0576001811b91508382161561468c578260010192505b838210614698576146a0565b60010161466d565b5050919050565b600081600114156146ba57506000919050565b61010060015b60016146cc8284614fec565b901c92506001831b848116158015906146e75750600185851c145b156146f257506146a0565b84811061470157839250614705565b8391505b506146c0565b815b81811015614846576001811b8581161561483d57600061472c826134c9565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529192506000918316906370a0823190602401602060405180830381865afa15801561479f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147c39190614fa4565b90506001811161483a57600054978318977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9097019660ff6201000090910416871161483a5750505073ffffffffffffffffffffffffffffffffffffffff86166000908152600860205260409020859055506138b9565b50505b5060010161470d565b506040517f53275fcb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606148888484600085614892565b90505b9392505050565b606082471015614924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610bd0565b843b61498c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610bd0565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516149b591906151f6565b60006040518083038185875af1925050503d80600081146149f2576040519150601f19603f3d011682016040523d82523d6000602084013e6149f7565b606091505b5091509150614a07828286614a12565b979650505050505050565b60608315614a2157508161488b565b825115614a315782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd09190614e5b565b73ffffffffffffffffffffffffffffffffffffffff8116811461111f57600080fd5b600060208284031215614a9957600080fd5b813561488b81614a65565b60008060408385031215614ab757600080fd5b8235614ac281614a65565b91506020830135614ad281614a65565b809150509250929050565b600060208284031215614aef57600080fd5b5035919050565b8035600381106135a057600080fd5b801515811461111f57600080fd5b600080600080600080600060e0888a031215614b2e57600080fd5b8735614b3981614a65565b9650614b4760208901614af6565b9550604088013594506060880135614b5e81614a65565b93506080880135614b6e81614a65565b925060a0880135915060c0880135614b8581614b05565b8091505092959891949750929550565b60008060008060808587031215614bab57600080fd5b8435614bb681614a65565b93506020850135614bc681614a65565b92506040850135614bd681614a65565b9396929550929360600135925050565b60008060008060808587031215614bfc57600080fd5b84359350614c0c60208601614af6565b93969395505050506040820135916060013590565b600080600080600060a08688031215614c3957600080fd5b8535614c4481614a65565b94506020860135614c5481614a65565b93506040860135614c6481614a65565b94979396509394606081013594506080013592915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614cf257614cf2614c7c565b604052919050565b600067ffffffffffffffff821115614d1457614d14614c7c565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600080600060608486031215614d5557600080fd5b8335614d6081614a65565b92506020840135614d7081614a65565b9150604084013567ffffffffffffffff811115614d8c57600080fd5b8401601f81018613614d9d57600080fd5b8035614db0614dab82614cfa565b614cab565b818152876020838501011115614dc557600080fd5b816020840160208301376000602083830101528093505050509250925092565b60005b83811015614e00578181015183820152602001614de8565b838111156139555750506000910152565b60008151808452614e29816020860160208601614de5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061488b6020830184614e11565b60008060408385031215614e8157600080fd5b823591506020830135614ad281614a65565b803561ffff811681146135a057600080fd5b600080600080600060a08688031215614ebd57600080fd5b614ec686614e93565b9450614ed460208701614e93565b9350614ee260408701614e93565b9250614ef060608701614e93565b9150614efe60808701614e93565b90509295509295909350565b600080600060608486031215614f1f57600080fd5b8335614f2a81614a65565b9250602084013591506040840135614f4181614b05565b809150509250925092565b60008060408385031215614f5f57600080fd5b8235614f6a81614a65565b9150614f7860208401614e93565b90509250929050565b600060208284031215614f9357600080fd5b813560ff8116811461488b57600080fd5b600060208284031215614fb657600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115614fff57614fff614fbd565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561503c5761503c614fbd565b500290565b600082615077577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60006020828403121561508e57600080fd5b815161488b81614b05565b6000828210156150ab576150ab614fbd565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600080604083850312156150f257600080fd5b505080516020909101519092909150565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015260006148886040830184614e11565b60006020828403121561514457600080fd5b815167ffffffffffffffff81111561515b57600080fd5b8201601f8101841361516c57600080fd5b805161517a614dab82614cfa565b81815285602083850101111561518f57600080fd5b613e9d826020830160208601614de5565b6000602082840312156151b257600080fd5b815161488b81614a65565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156151ef576151ef614fbd565b5060010190565b60008251615208818460208701614de5565b919091019291505056fea26469706673582212209d39bb9d4972b515acdad1ffb757acd15e103ca6ee762f88a6382b36243734ba64736f6c634300080a00336101406040523480156200001257600080fd5b5060405162005e9738038062005e97833981016040819052620000359162000198565b60016000556001600160a01b0383166200006257604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038316608081905260408051636f307dc360e01b81529051636f307dc3916004808201926020929091908290030181865afa158015620000ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d39190620001ea565b6001600160a01b031660a0816001600160a01b031681525050826001600160a01b0316634f0e0ef36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200012b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001519190620001ea565b6001600160a01b0390811660c0529190911660e0819052151561010052151561012052506200020f565b80516001600160a01b03811681146200019357600080fd5b919050565b600080600060608486031215620001ae57600080fd5b620001b9846200017b565b9250620001c9602085016200017b565b915060408401518015158114620001df57600080fd5b809150509250925092565b600060208284031215620001fd57600080fd5b62000208826200017b565b9392505050565b60805160a05160c05160e0516101005161012051615a86620004116000396000818161061101528181612fb5015261481f01526000818161031701528181610dde015281816144f901526146e5015260008181610557015281816146a901526147a901526000818161034b0152818161387d015261392d01526000818161047301528181611bfe0152818161274f0152818161280d0152818161366a01526137dd015260008181610665015281816109d801528181610b0301528181610bd501528181610cdd01528181610e6501528181610fe30152818161114e0152818161120e0152818161132e015281816114510152818161162b01528181611708015281816117e0015281816119e501528181611b1201528181611d9501528181611ed5015281816120040152818161216801528181612290015281816123c601528181612568015281816126390152818161266f0152818161293d01528181612a2101528181612a8a01528181612bde01528181612d2601528181612e6801528181612ec2015281816130a10152818161311b015281816131b401528181613341015281816134c10152818161358a0152818161372f01528181613a1a01528181613b2e01528181613dbb015281816142200152818161432801528181614492015281816148e7015281816149e801528181614aae0152614d8f0152615a866000f3fe6080604052600436106102695760003560e01c8063860aefcf11610153578063c7de38a6116100cb578063dfd594651161007f578063eb9606df11610064578063eb9606df1461081e578063f9eaee0d1461083e578063ffd9b9071461085e57600080fd5b8063dfd59465146107de578063e1f21c67146107fe57600080fd5b8063cff0ab96116100b0578063cff0ab96146106ef578063d9ccbec114610783578063dcf65482146107be57600080fd5b8063c7de38a6146106a7578063caa5c23f146106dc57600080fd5b80639c55a05411610122578063b55bb84b11610107578063b55bb84b14610633578063c12c21c014610653578063c690908a1461068757600080fd5b80639c55a054146105df578063b1836d32146105ff57600080fd5b8063860aefcf146104db5780639408b63f146105455780639b67ab30146105795780639be0536a146105bd57600080fd5b80635d91a0e0116101e65780636d19b486116101b55780637071b7c51161019a5780637071b7c51461049557806379c0ef91146104a857806382871ace146104c857600080fd5b80636d19b486146104415780636f307dc31461046157600080fd5b80635d91a0e0146103e85780635f73fbec146103fb578063601d66f61461040e5780636c8f225d1461042e57600080fd5b80633d9287fa1161023d5780635019e20a116102225780635019e20a1461039257806354fd4d50146103b257806359781034146103d557600080fd5b80633d9287fa146103055780634f0e0ef31461033957600080fd5b8062842b571461026e578063256ac915146102905780632a7ba1f7146102c55780632b7c7b11146102e5575b600080fd5b34801561027a57600080fd5b5061028e6102893660046151bf565b61087e565b005b34801561029c57600080fd5b506102b06102ab3660046151f8565b61098e565b60405190151581526020015b60405180910390f35b3480156102d157600080fd5b5061028e6102e0366004615215565b610a61565b3480156102f157600080fd5b5061028e610300366004615215565b610c3b565b34801561031157600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561034557600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102bc565b34801561039e57600080fd5b5061028e6103ad3660046151f8565b610d6a565b3480156103be57600080fd5b506103c7600281565b6040519081526020016102bc565b61028e6103e336600461522e565b61108c565b61028e6103f63660046152bb565b611275565b61028e610409366004615340565b611589565b34801561041a57600080fd5b5061028e6104293660046153d8565b6117de565b61028e61043c36600461541b565b611900565b34801561044d57600080fd5b506102b061045c3660046151f8565b611c31565b34801561046d57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b61028e6104a336600461546e565b611c60565b3480156104b457600080fd5b5061036d6104c3366004615215565b611f3e565b61028e6104d63660046152bb565b611f4b565b3480156104e757600080fd5b5060025461051c906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041682565b604080516fffffffffffffffffffffffffffffffff9384168152929091166020830152016102bc565b34801561055157600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561058557600080fd5b506004546040805167ffffffffffffffff608084901c1681526fffffffffffffffffffffffffffffffff9092166020830152016102bc565b3480156105c957600080fd5b506105d261227d565b6040516102bc91906154e2565b3480156105eb57600080fd5b5061028e6105fa36600461553c565b61228e565b34801561060b57600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561063f57600080fd5b5061028e61064e3660046151f8565b6123c4565b34801561065f57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561069357600080fd5b5061028e6106a23660046151f8565b6124c6565b3480156106b357600080fd5b506106c76106c23660046151f8565b612668565b604080519283526020830191909152016102bc565b61028e6106ea366004615557565b61289b565b3480156106fb57600080fd5b5060015461074e906fffffffffffffffffffffffffffffffff811690700100000000000000000000000000000000810460ff169071010000000000000000000000000000000000900464ffffffffff1683565b604080516fffffffffffffffffffffffffffffffff9094168452911515602084015264ffffffffff16908201526060016102bc565b34801561078f57600080fd5b506102b061079e366004615599565b600360209081526000928352604080842090915290825290205460ff1681565b3480156107ca57600080fd5b5061028e6107d93660046151f8565b612a88565b3480156107ea57600080fd5b506103c76107f93660046151f8565b612b86565b34801561080a57600080fd5b5061028e61081936600461522e565b612c6d565b34801561082a57600080fd5b5061028e6108393660046155c7565b612ec0565b34801561084a57600080fd5b506102b06108593660046151f8565b613057565b34801561086a57600080fd5b5061028e6108793660046155ee565b6131b2565b600260005414156108f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b6002600090815573ffffffffffffffffffffffffffffffffffffffff8316808252600360209081526040808420338086529083529381902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081527f9b3258bc4904fd6426b99843e206c6c7cdb1fd0f040121c25b71dafbb3851ee0910160405180910390a350506001600055565b6040517f055ee9b500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063055ee9b590602401602060405180830381865afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a43919061560b565b73ffffffffffffffffffffffffffffffffffffffff16141592915050565b60026000541415610ace576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610b5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b83919061560b565b9050610b903382846132eb565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906395373018906024015b600060405180830381600087803b158015610c1a57600080fd5b505af1158015610c2e573d6000803e3d6000fd5b5050600160005550505050565b60026000541415610ca8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610d39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5d919061560b565b9050610b90338284613411565b60026000541415610dd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000557f000000000000000000000000000000000000000000000000000000000000000015610e34576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610ec1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee5919061560b565b33600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915290205490915060ff16610f52576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f5d82613583565b5090508015610f98576040517ff713841e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b15801561102757600080fd5b505af115801561103b573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692503391507f93c70cc9715bef0d83edf2095f3595402279d274f402a73ffc17f1bcb19d863d90600090a35050600160005550565b600260005414156110f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611106613875565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063e958b70490602401602060405180830381865afa158015611197573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bb919061560b565b90506111c9848285856139b7565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401600060405180830381600087803b15801561125257600080fd5b505af1158015611266573d6000803e3d6000fd5b50506001600055505050505050565b600260005414156112e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611375573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611399919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166113e8576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806113f483613583565b915091508161142f576040517f1fdd676f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611437613875565b831561144d5761144d85858b8660016000613ae3565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632362a2d88b600185338e8e8e6040518863ffffffff1660e01b81526004016114b59796959493929190615663565b6020604051808303816000875af11580156114d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f891906156bf565b90508873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f7dfecd8419723a9d3954585a30c2a270165d70aafa146c11c1e1b88ae14390648460405161157091815260200190565b60405180910390a4505060016000555050505050505050565b600260005414156115f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ab919061560b565b90506116b5613875565b81156116cb576116cb8383338460016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d89061174a903390600090819083908d908d908d90600401615663565b6020604051808303816000875af1158015611769573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178d91906156bf565b5060405173ffffffffffffffffffffffffffffffffffffffff87169033907f460ad03b1cf79b1d64d3aefa28475f110ab66e84649c52bb41ed796b9b39198190600090a35050600160005550505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611849573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118d1576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff90811670010000000000000000000000000000000002911617600255565b6002600054141561196d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000908155606461198461ffff851687615707565b61198e9190615744565b9050611999816144f7565b6119a2816145e8565b6119ab84614668565b6119b3613875565b6040517f172c48c7000000000000000000000000000000000000000000000000000000008152600060048201819052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a64919061577f565b61ffff169150611a789050816127106157ae565b611a829083615707565b611a8c8288615707565b11611ac3576040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff86811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611b5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b81919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638587604051611bef92919091825261ffff16602082015260400190565b60405180910390a3611c2386827f00000000000000000000000000000000000000000000000000000000000000008a6139b7565b505060016000555050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526006602052604081205415155b92915050565b60026000541415611ccd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611cdb856144f7565b611ce484614668565b611ced856145e8565b600154700100000000000000000000000000000000900460ff1615611d3e576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d46613875565b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff85811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611de0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e04919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638885604051611e7292919091825261ffff16602082015260400190565b60405180910390a38215611e9057611e908484878460006001613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015611f1957600080fd5b505af1158015611f2d573d6000803e3d6000fd5b505060016000555050505050505050565b6000611c5a60058361480f565b60026000541415611fb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa15801561204b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206f919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166120be576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120c661481b565b6120fc576040517f7e52ccb400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061210782612668565b509050612112613875565b82156121285761212884848a8560016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d8906121aa908c90600290879033908f908f908f90600401615663565b6020604051808303816000875af11580156121c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ed91906156bf565b90508773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167ffada13ff2d5e1a1d9da37ad4a4130893b34e3c69c32b17f87ec31fd661b867078460405161226591815260200190565b60405180910390a45050600160005550505050505050565b6060612289600561486b565b905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612381576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561242f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612453919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146124b7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614878565b5050565b60026000541415612533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156125c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e8919061560b565b90506125f4818361489a565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401610c00565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126fc919061560b565b905060008061270b8387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156127a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127c991906156bf565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015291965061271091851690637afb010490604401602060405180830381865afa158015612863573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061288791906156bf565b6128919190615744565b9350505050915091565b60026000541415612908576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129bd919061560b565b90506129c7613875565b8115612a7e576129dc83833384600080613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015612a6557600080fd5b505af1158015612a79573d6000803e3d6000fd5b505050505b5050600160005550565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612af3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b17919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b7b576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614c92565b600080612b9283612668565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152919350600092507f000000000000000000000000000000000000000000000000000000000000000090911690633192195c906024016040805180830381865afa158015612c26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4a91906157c5565b9150819050612c5b61271084615707565b612c659190615744565b949350505050565b60026000541415612cda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063fdd5764590602401602060405180830381865afa158015612d6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d91919061560b565b73ffffffffffffffffffffffffffffffffffffffff161480612dd7575073ffffffffffffffffffffffffffffffffffffffff831660009081526006602052604090205415155b15612e0e576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612eac57600080fd5b505af1158015611c23573d6000803e3d6000fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f4f919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612fb3576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000061300a576040517f50dd11fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805464ffffffffff90921671010000000000000000000000000000000000027fffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffffff909216919091179055565b6040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063f67c5bd090602401602060405180830381865afa1580156130e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061310c91906156bf565b905080158015906131ab5750807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015613184573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a891906156bf565b16155b9392505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561321d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613241919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146132a5576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018054911515700100000000000000000000000000000000027fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff909216919091179055565b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600060448301819052917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561338c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133b091906156bf565b90506133bb816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f98274bf834d179ee08dc0604071b0dc90b54731bd5f725a5a96a39a86bce025a8360405161340391815260200190565b60405180910390a250505050565b61341a816144f7565b600154700100000000000000000000000000000000900460ff161561346b576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600160448301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561350c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061353091906156bf565b905061353b816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f9cac51154cc0d835e2f9c9d1f59a9344588cee107f4203bf58a8c797e3a58c458360405161340391815260200190565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613617919061560b565b90506000806136268387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156136c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136e491906156bf565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529195506000917f00000000000000000000000000000000000000000000000000000000000000001690633192195c906024016040805180830381865afa158015613775573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061379991906157c5565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350600092506127109187169063f9a6503090604401602060405180830381865afa158015613837573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061385b91906156bf565b6138659190615707565b9092109794965093945050505050565b34156139b5577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156138e357600080fd5b505af11580156138f7573d6000803e3d6000fd5b50506040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201523460248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16935063a9059cbb925060440190506020604051808303816000875af115801561398f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139b391906157e9565b505b565b6139c084614cb4565b6040517f830aa74500000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f0000000000000000000000000000000000000000000000000000000000000000169063830aa74590608401600060405180830381600087803b158015613a5e57600080fd5b505af1158015613a72573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fa32435755c235de2976ed44a75a2f85cb01faf0c894f639fe0c32bb9455fea8f83604051613ad591815260200190565b60405180910390a350505050565b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301523060248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b158015613b7257600080fd5b505af1158015613b86573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff871692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a28460005b8181101561441d5736888883818110613bea57613bea615806565b9050602002810190613bfc9190615835565b90506004613c0d6020830183615873565b90501015613c47576040517fe2b0e50600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b30613c5560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16141561421c578415613ca9576040517f5fb9107f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613cb86020830183615873565b613cc1916158d8565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167f59781034000000000000000000000000000000000000000000000000000000001415613e3c5760008080613d1e6020860186615873565b613d2c916004908290615920565b810190613d39919061522e565b925092509250613e34838c73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614613e2b576040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015613e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e26919061560b565b613e2d565b8b5b84846139b7565b505050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2b7c7b11000000000000000000000000000000000000000000000000000000001415613ec757600194506000613e996020840184615873565b613ea7916004908290615920565b810190613eb49190615215565b9050613ec1898983613411565b50614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2a7ba1f7000000000000000000000000000000000000000000000000000000001415613f80578415613f49576040517fc0b0caa800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613f586020840184615873565b613f66916004908290615920565b810190613f739190615215565b9050613ec18989836132eb565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f233a8caa0000000000000000000000000000000000000000000000000000000014156140e457600080613fda6020850185615873565b613fe8916004908290615920565b810190613ff5919061594a565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c8116600483015292945090925082918416906370a0823190602401602060405180830381865afa158015614069573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061408d91906156bf565b10156140dd576040517fa5ac537300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016108e7565b5050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fc690908a00000000000000000000000000000000000000000000000000000000141561416457600061413d6020840184615873565b61414b916004908290615920565b81019061415891906151f8565b9050613ec1888261489a565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f23e27a640000000000000000000000000000000000000000000000000000000014156141e45760006141bd6020840184615873565b6141cb916004908290615920565b8101906141d891906151f8565b9050613ec18882614d42565b6040517f1e9e7e7a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50614414565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff68754361426760208501856151f8565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156142d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142f4919061560b565b73ffffffffffffffffffffffffffffffffffffffff16148061436d575073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001661435560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16145b156143a4576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6144126143b46020830183615873565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506143f69250505060208401846151f8565b73ffffffffffffffffffffffffffffffffffffffff1690614e39565b505b50600101613bcf565b506040517f60c8e8938c9a0c0d88a98d6f1c562ce68077e12bf3edb8047378f2f736cb45b490600090a16040517fe1998cf900000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff86811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b1580156144d657600080fd5b505af11580156144ea573d6000803e3d6000fd5b5050505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006139b3576001546fffffffffffffffffffffffffffffffff9081169081146124c257600454608081901c906fffffffffffffffffffffffffffffffff16600067ffffffffffffffff8316431461456e578461458a565b61458a6fffffffffffffffffffffffffffffffff831686615976565b9050838111156145c6576040517f675f1a5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff81164360801b176004555050505050565b6002546fffffffffffffffffffffffffffffffff16811080614631575060025470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681115b156139b3576040517fce16799400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61467061481b565b156146a7576040517f63fc31c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1615614806577f0000000000000000000000000000000000000000000000000000000000000000801561472657503373ffffffffffffffffffffffffffffffffffffffff821614155b1561475d576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600160248301527f00000000000000000000000000000000000000000000000000000000000000001690639dc29fac90604401600060405180830381600087803b1580156147ed57600080fd5b505af1158015614801573d6000803e3d6000fd5b505050505b6139b381614cb4565b60006131ab8383614e7b565b60007f0000000000000000000000000000000000000000000000000000000000000000801561228957505060015471010000000000000000000000000000000000900464ffffffffff1642101590565b606060006131ab83614ea5565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f01565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561492b57600080fd5b505af115801561493f573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527fdf498aa1c340e992665d6fb4f3be8436d452c45a630cb6d7fab7963da39bac8793500190505b60405180910390a15050565b6040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600091829160019183917f00000000000000000000000000000000000000000000000000000000000000001690638991b2f190602401602060405180830381865afa158015614a2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a5391906156bf565b90505b808211614c895780821615614c7d576040517fe75538c700000000000000000000000000000000000000000000000000000000815260048101839052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e75538c7906024016040805180830381865afa158015614af4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b18919061577f565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529294509092506000918416906370a0823190602401602060405180830381865afa158015614b8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bb191906156bf565b90506001811115614c79576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff8481166024830152600091908b169063f9a6503090604401602060405180830381865afa158015614c33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c5791906156bf565b978801979050614c6b61ffff841682615707565b614c759088615976565b9650505b5050505b600182901b9150614a56565b50509250929050565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f50565b3373ffffffffffffffffffffffffffffffffffffffff821614801590614d0b575033600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16155b156139b3576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b158015614dd357600080fd5b505af1158015614de7573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527f69db9e9764da61b6681b89fb0f5be018506e0342036e56b59c3015a620d60977935001905061498d565b60606131ab83836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250615043565b6000826000018281548110614e9257614e92615806565b9060005260206000200154905092915050565b606081600001805480602002602001604051908101604052809291908181526020018280548015614ef557602002820191906000526020600020905b815481526020019060010190808311614ee1575b50505050509050919050565b6000818152600183016020526040812054614f4857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611c5a565b506000611c5a565b60008181526001830160205260408120548015615039576000614f746001836157ae565b8554909150600090614f88906001906157ae565b9050818114614fed576000866000018281548110614fa857614fa8615806565b9060005260206000200154905080876000018481548110614fcb57614fcb615806565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080614ffe57614ffe61598e565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611c5a565b6000915050611c5a565b6060612c65848460008585843b6150b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108e7565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516150df91906159ed565b60006040518083038185875af1925050503d806000811461511c576040519150601f19603f3d011682016040523d82523d6000602084013e615121565b606091505b509150915061513182828661513c565b979650505050505050565b6060831561514b5750816131ab565b82511561515b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e791906159ff565b73ffffffffffffffffffffffffffffffffffffffff811681146139b357600080fd5b80151581146139b357600080fd5b600080604083850312156151d257600080fd5b82356151dd8161518f565b915060208301356151ed816151b1565b809150509250929050565b60006020828403121561520a57600080fd5b81356131ab8161518f565b60006020828403121561522757600080fd5b5035919050565b60008060006060848603121561524357600080fd5b833561524e8161518f565b9250602084013561525e8161518f565b929592945050506040919091013590565b60008083601f84011261528157600080fd5b50813567ffffffffffffffff81111561529957600080fd5b6020830191508360208260051b85010111156152b457600080fd5b9250929050565b60008060008060008060a087890312156152d457600080fd5b86356152df8161518f565b955060208701356152ef8161518f565b9450604087013593506060870135615306816151b1565b9250608087013567ffffffffffffffff81111561532257600080fd5b61532e89828a0161526f565b979a9699509497509295939492505050565b60008060008060006080868803121561535857600080fd5b85356153638161518f565b945060208601359350604086013561537a816151b1565b9250606086013567ffffffffffffffff81111561539657600080fd5b6153a28882890161526f565b969995985093965092949392505050565b80356fffffffffffffffffffffffffffffffff811681146153d357600080fd5b919050565b600080604083850312156153eb57600080fd5b6153f4836153b3565b9150615402602084016153b3565b90509250929050565b61ffff811681146139b357600080fd5b6000806000806080858703121561543157600080fd5b8435935060208501356154438161518f565b925060408501356154538161540b565b915060608501356154638161540b565b939692955090935050565b60008060008060006080868803121561548657600080fd5b8535945060208601356154988161518f565b9350604086013567ffffffffffffffff8111156154b457600080fd5b6154c08882890161526f565b90945092505060608601356154d48161540b565b809150509295509295909350565b6020808252825182820181905260009190848201906040850190845b8181101561553057835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016154fe565b50909695505050505050565b60006020828403121561554e57600080fd5b6131ab826153b3565b6000806020838503121561556a57600080fd5b823567ffffffffffffffff81111561558157600080fd5b61558d8582860161526f565b90969095509350505050565b600080604083850312156155ac57600080fd5b82356155b78161518f565b915060208301356151ed8161518f565b6000602082840312156155d957600080fd5b813564ffffffffff811681146131ab57600080fd5b60006020828403121561560057600080fd5b81356131ab816151b1565b60006020828403121561561d57600080fd5b81516131ab8161518f565b6003811061565f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b73ffffffffffffffffffffffffffffffffffffffff888116825260e082019061568f602084018a615628565b6040830197909752948616606082015292909416608083015260a082015291151560c09092019190915292915050565b6000602082840312156156d157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561573f5761573f6156d8565b500290565b60008261577a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000806040838503121561579257600080fd5b825161579d8161518f565b60208401519092506151ed8161540b565b6000828210156157c0576157c06156d8565b500390565b600080604083850312156157d857600080fd5b505080516020909101519092909150565b6000602082840312156157fb57600080fd5b81516131ab816151b1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc183360301811261586957600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126158a857600080fd5b83018035915067ffffffffffffffff8211156158c357600080fd5b6020019150368190038213156152b457600080fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156159185780818660040360031b1b83161692505b505092915050565b6000808585111561593057600080fd5b8386111561593d57600080fd5b5050820193919092039150565b6000806040838503121561595d57600080fd5b82356159688161518f565b946020939093013593505050565b60008219821115615989576159896156d8565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60005b838110156159d85781810151838201526020016159c0565b838111156159e7576000848401525b50505050565b600082516158698184602087016159bd565b6020815260008251806020840152615a1e8160408501602087016159bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea2646970667358221220a3f4a705ab580a6ada1e438cd2ee4abc001b62d1d171fce12c41994900fef21664736f6c634300080a003360a06040523480156200001157600080fd5b5060405162005f3d38038062005f3d8339810160408190526200003491620012eb565b826001600160a01b031663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000073573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200009991906200147f565b6001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000d7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000fd91906200147f565b6000805460ff191690556001600160a01b0381166200012f57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200016e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200019491906200147f565b6001600160a01b03908116608052600180546001600160a01b031916918616918217905560408051636f307dc360e01b81529051919250636f307dc39160048083019260209291908290030181865afa158015620001f6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200021c91906200147f565b600260006101000a8154816001600160a01b0302191690836001600160a01b03160217905550826001600160a01b031663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000281573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a791906200147f565b6001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200030b91906200147f565b600080546001600160a01b039290921661010002610100600160a81b0319909216919091179055620003626103e860c86200034b6101f4612710620014bc565b60646200035c60c8612710620014bc565b620005e8565b60408101515160005b81811015620003ee576000836040015182815181106200038f576200038f620014e2565b6020026020010151600001519050620003ae81620007c260201b60201c565b620003e48185604001518481518110620003cc57620003cc620014e2565b60200260200101516020015162000a5e60201b60201c565b506001016200036b565b5060015460408051632630c12f60e01b815290516001600160a01b03909216916311ca4fc29186918491632630c12f9160048083019260209291908290030181865afa15801562000443573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200046991906200147f565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401600060405180830381600087803b158015620004b257600080fd5b505af1158015620004c7573d6000803e3d6000fd5b50506040516001600160a01b03861692507fa8b21f72cb83bce808df32dc2330217d744a1c22f3e9e44e4b11bbf049d37d9d9150600090a2600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000553573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200057991906200147f565b6001600160a01b03167f3f82447be465b0b5a4a9e54c74d5f6ae73f2e9537f2cc1590a340524703d096160405160405180910390a26020820151620005cb90620005c5906002620014f8565b62000bda565b81516020830151620005de919062000dc8565b5050505062001604565b6000620005f68585620014bc565b60015460405163172c48c760e01b81526000600482018190529293506001600160a01b039091169063172c48c7906024016040805180830381865afa15801562000644573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200066a91906200152a565b9150508061ffff168261ffff1614620006be57620006888262000f47565b60025460405161ffff841681526001600160a01b039091169060008051602062005f1d8339815191529060200160405180910390a25b60015460405163944ac59f60e01b815261ffff808a166004830152808916602483015280881660448301528087166064830152851660848201526001600160a01b039091169063944ac59f9060a401600060405180830381600087803b1580156200072857600080fd5b505af11580156200073d573d6000803e3d6000fd5b505050507f2214a403d5f8d049e52eacca974c6dea01a471e41d6a18903bfaf7dbc709741f878787612710620007749190620014bc565b876200078388612710620014bc565b6040805161ffff96871681529486166020860152928516848401529084166060840152909216608082015290519081900360a00190a150505050505050565b6001600160a01b038116620007ea57604051635919af9760e11b815260040160405180910390fd5b62000809816001600160a01b03166200116f60201b620023381760201c565b620008365760405163df4c572d60e01b81526001600160a01b038216600482015260240160405180910390fd5b6040516370a0823160e01b81523060048201526001600160a01b038216906370a0823190602401602060405180830381865afa92505050801562000899575060408051601f3d908101601f19168201909252620008969181019062001564565b60015b620008b75760405163528ca31d60e01b815260040160405180910390fd5b50600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200090c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200093291906200147f565b604051630f9a650360e41b8152670de0b6b3a764000060048201526001600160a01b038381166024830152919091169063f9a6503090604401602060405180830381865afa925050508015620009a7575060408051601f3d908101601f19168201909252620009a49181019062001564565b60015b620009c5576040516367a7cd4360e01b815260040160405180910390fd5b5060015460405163d48bfca760e01b81526001600160a01b0383811660048301529091169063d48bfca790602401600060405180830381600087803b15801562000a0e57600080fd5b505af115801562000a23573d6000803e3d6000fd5b50506040516001600160a01b03841692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a250565b6002546001600160a01b038381169116141562000a8e57604051633b899cf960e01b815260040160405180910390fd5b60015460405163172c48c760e01b8152600060048201819052916001600160a01b03169063172c48c7906024016040805180830381865afa15801562000ad8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000afe91906200152a565b91505061ffff8216158062000b1a57508061ffff168261ffff16115b1562000b39576040516333c6608d60e01b815260040160405180910390fd5b600154604051635385e2a160e11b81526001600160a01b03858116600483015261ffff851660248301529091169063a70bc54290604401600060405180830381600087803b15801562000b8b57600080fd5b505af115801562000ba0573d6000803e3d6000fd5b505060405161ffff851681526001600160a01b038616925060008051602062005f1d833981519152915060200160405180910390a2505050565b600062000be662001175565b6001600160a01b031663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801562000c24573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c4a91906200157e565b50509050600062000c606200117560201b60201c565b6001600160a01b031663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa15801562000c9d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000cc39190620015d5565b915050806001600160801b0316836001600160801b0316101562000cfa576040516309aadd6f60e41b815260040160405180910390fd5b826001600160801b0316826001600160801b03161462000dc35762000d1e62001175565b604051632715681560e21b81526001600160801b03851660048201526001600160a01b039190911690639c55a05490602401600060405180830381600087803b15801562000d6b57600080fd5b505af115801562000d80573d6000803e3d6000fd5b50506040516001600160801b03861681527fa030eec20ae970821387224ec3bb15b4bd22b89bfb86dc4d2b3827aa3d99e48d925060200190505b60405180910390a15b505050565b600062000dd462001175565b6001600160a01b031663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801562000e12573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e3891906200157e565b50509050816001600160801b0316836001600160801b0316118062000e6e5750806001600160801b0316826001600160801b0316115b1562000e8d576040516309aadd6f60e41b815260040160405180910390fd5b62000e9762001175565b60405163300eb37b60e11b81526001600160801b038086166004830152841660248201526001600160a01b03919091169063601d66f690604401600060405180830381600087803b15801562000eec57600080fd5b505af115801562000f01573d6000803e3d6000fd5b5050604080516001600160801b038088168252861660208201527f4d4981437d0211f9e6843eb024d9ada1fa3a99514d4343d4aece106dd11524bb935001905062000dba565b600154600254604051635385e2a160e11b81526001600160a01b03918216600482015261ffff8416602482015291169063a70bc54290604401600060405180830381600087803b15801562000f9b57600080fd5b505af115801562000fb0573d6000803e3d6000fd5b505050506000600160009054906101000a90046001600160a01b03166001600160a01b031663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200100a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001030919062001564565b905060015b8181101562000dc35760015460405163172c48c760e01b81526004810183905260009182916001600160a01b039091169063172c48c7906024016040805180830381865afa1580156200108c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010b291906200152a565b915091508461ffff168161ffff1611156200116457600154604051635385e2a160e11b81526001600160a01b03848116600483015261ffff881660248301529091169063a70bc54290604401600060405180830381600087803b1580156200111957600080fd5b505af11580156200112e573d6000803e3d6000fd5b505060405161ffff881681526001600160a01b038516925060008051602062005f1d833981519152915060200160405180910390a25b505060010162001035565b3b151590565b60015460408051632f7a188160e01b815290516000926001600160a01b031691632f7a18819160048083019260209291908290030181865afa158015620011c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011e691906200147f565b905090565b6001600160a01b03811681146200120157600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b03811182821017156200123f576200123f62001204565b60405290565b604080519081016001600160401b03811182821017156200123f576200123f62001204565b604051601f8201601f191681016001600160401b038111828210171562001295576200129562001204565b604052919050565b80516001600160801b0381168114620012b557600080fd5b919050565b8051620012b581620011eb565b805161ffff81168114620012b557600080fd5b80518015158114620012b557600080fd5b6000806000606084860312156200130157600080fd5b83516200130e81620011eb565b809350506020808501516200132381620011eb565b604086810151919450906001600160401b03808211156200134357600080fd5b9087019060a0828a0312156200135857600080fd5b620013626200121a565b6200136d836200129d565b81526200137c8584016200129d565b8582015283830151828111156200139257600080fd5b8301601f81018b13620013a457600080fd5b805183811115620013b957620013b962001204565b620013c9878260051b016200126a565b818152878101945060069190911b82018701908c821115620013ea57600080fd5b918701915b81831015620014435786838e031215620014095760008081fd5b6200141362001245565b83516200142081620011eb565b81526200142f848a01620012c7565b818a015285529387019391860191620013ef565b838701525062001458905060608401620012ba565b60608201526200146b60808401620012da565b608082015280955050505050509250925092565b6000602082840312156200149257600080fd5b81516200149f81620011eb565b9392505050565b634e487b7160e01b600052601160045260246000fd5b600061ffff83811690831681811015620014da57620014da620014a6565b039392505050565b634e487b7160e01b600052603260045260246000fd5b60006001600160801b0382811684821681151582840482111615620015215762001521620014a6565b02949350505050565b600080604083850312156200153e57600080fd5b82516200154b81620011eb565b91506200155b60208401620012c7565b90509250929050565b6000602082840312156200157757600080fd5b5051919050565b6000806000606084860312156200159457600080fd5b6200159f846200129d565b9250620015af60208501620012da565b9150604084015164ffffffffff81168114620015ca57600080fd5b809150509250925092565b60008060408385031215620015e957600080fd5b620015f4836200129d565b91506200155b602084016200129d565b608051614878620016a56000396000818161033601528181610446015281816107c5015281816108c0015281816109ae01528181610b8301528181610f0a015281816113e1015281816114cf015281816115bb015281816116ab015281816117990152818161187d01528181611ad901528181611bc601528181611cb301528181611da0015281816120090152818161218c015261227901526148786000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80638456cb59116100f9578063dc2b21c111610097578063f0527ac611610071578063f0527ac6146103d7578063f206d32a146103df578063fb1bd8c4146103f2578063ffd9b9071461040557600080fd5b8063dc2b21c11461039e578063e6492d7b146103b1578063eb9606df146103c457600080fd5b8063a50cf2c8116100d3578063a50cf2c814610331578063a70bc54214610358578063b53472ef1461036b578063c12c21c01461037e57600080fd5b80638456cb59146103035780639c55a0541461030b5780639f1c50691461031e57600080fd5b806350e036ff1161016657806354fd4d501161014057806354fd4d50146102b25780635c975abb146102ba5780636f307dc3146102d05780637bccacee146102f057600080fd5b806350e036ff1461027657806352438e541461028c578063526a41e81461029f57600080fd5b80633e7c88d6116101a25780633e7c88d6146102355780633f4ba83a14610248578063456e0742146102505780635094cb4f1461026357600080fd5b806324147708146101c95780632954018c146101de5780632f7a18811461022d575b600080fd5b6101dc6101d7366004614307565b610418565b005b60005461020390610100900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6102036106fe565b6101dc610243366004614334565b610797565b6101dc610892565b6101dc61025e366004614307565b610980565b61020361027136600461436d565b610b36565b61027e610b49565b604051908152602001610224565b6101dc61029a366004614307565b610b55565b6101dc6102ad366004614394565b610edc565b61027e600281565b60005460ff166040519015158152602001610224565b6002546102039073ffffffffffffffffffffffffffffffffffffffff1681565b6101dc6102fe3660046143c2565b6113b3565b6101dc6114a1565b6101dc61031936600461440e565b61158d565b6101dc61032c36600461442b565b61167d565b6102037f000000000000000000000000000000000000000000000000000000000000000081565b6101dc610366366004614334565b61176b565b6101dc610379366004614307565b61184f565b6001546102039073ffffffffffffffffffffffffffffffffffffffff1681565b6101dc6103ac366004614459565b611aab565b6101dc6103bf366004614307565b611b98565b6101dc6103d236600461448f565b611c85565b6101dc611d72565b6101dc6103ed3660046144ac565b611fdb565b6101dc610400366004614307565b61215e565b6101dc61041336600461451d565b61224b565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156104a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c6919061453a565b6104fc576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006105078261233e565b90506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015610578573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059c9190614557565b90508181166106f9576001546040517fa366f496000000000000000000000000000000000000000000000000000000008152918317600483018190529173ffffffffffffffffffffffffffffffffffffffff9091169063a366f49690602401600060405180830381600087803b15801561061557600080fd5b505af1158015610629573d6000803e3d6000fd5b505050506106356106fe565b6040517fffd9b9070000000000000000000000000000000000000000000000000000000081526001600482015273ffffffffffffffffffffffffffffffffffffffff919091169063ffd9b90790602401600060405180830381600087803b15801561069f57600080fd5b505af11580156106b3573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692507ff17b849746e74d7186170c9553d4bbf60b4f8bb1ed81fe50c099b934fb078f059150600090a25b505050565b600154604080517f2f7a1881000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691632f7a18819160048083019260209291908290030181865afa15801561076e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610792919061457b565b905090565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610821573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610845919061453a565b61087b576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108848261241e565b61088e82826127f8565b5050565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa15801561091c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610940919061453a565b610976576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61097e612a15565b565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610a0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2e919061453a565b610a64576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a6d81612af6565b6001546040517f9f5f86ae00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015290911690639f5f86ae90602401600060405180830381600087803b158015610ada57600080fd5b505af1158015610aee573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507f5a0b7d0f9c24b39256e112a0584b4c5ce38d8f1dee2e7c56f15b852604cdc8869150600090a250565b6000610b43600383612cb8565b92915050565b60006107926003612ccb565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610bdf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c03919061453a565b610c39576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610c86576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063fdd5764590602401602060405180830381865afa158015610cf7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1b919061457b565b905073ffffffffffffffffffffffffffffffffffffffff8116610d6a576040517f1170cc2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f6e98e5e400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526000602483015290911690636e98e5e490604401600060405180830381600087803b158015610dde57600080fd5b505af1158015610df2573d6000803e3d6000fd5b50506001546040517f6e98e5e40000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff86811660248301529091169250636e98e5e49150604401600060405180830381600087803b158015610e6a57600080fd5b505af1158015610e7e573d6000803e3d6000fd5b50505050610e96826003612cd590919063ffffffff16565b5060405173ffffffffffffffffffffffffffffffffffffffff8316907fab9f405bf0c19b97f65a7031634db41569cd2f0e0376a610a1e977f9ab22b58f90600090a25050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610f66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8a919061453a565b610fc0576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fc982612af6565b6000806000610fd66106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015611020573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110449190614598565b9250925092506000806110556106fe565b73ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa15801561109e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c291906145e5565b9150915060006110d06106fe565b73ffffffffffffffffffffffffffffffffffffffff16639be0536a6040518163ffffffff1660e01b8152600401600060405180830381865afa15801561111a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526111609190810190614643565b9050600061116c6106fe565b73ffffffffffffffffffffffffffffffffffffffff1663b1836d326040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111da919061453a565b600154604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905192935073ffffffffffffffffffffffffffffffffffffffff909116916311ca4fc2918c918491632630c12f9160048083019260209291908290030181865afa158015611256573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061127a919061457b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156112e757600080fd5b505af11580156112fb573d6000803e3d6000fd5b5050505087156113675761130e87612cf7565b6113188484612f5d565b61132186613152565b60005b82518110156113575761134f83828151811061134257611342614726565b60200260200101516132a3565b600101611324565b50801561136757611367856133c9565b60405173ffffffffffffffffffffffffffffffffffffffff8a16907fa8b21f72cb83bce808df32dc2330217d744a1c22f3e9e44e4b11bbf049d37d9d90600090a2505050505050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561143d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611461919061453a565b611497576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61088e828261357b565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561152b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061154f919061453a565b611585576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61097e6139c3565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611617573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163b919061453a565b611671576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81612cf7565b50565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611707573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172b919061453a565b611761576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61088e8282612f5d565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156117f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611819919061453a565b610884576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156118d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fd919061453a565b611933576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061193e8261233e565b90506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d39190614557565b9050818116156106f9576001546040517fa366f496000000000000000000000000000000000000000000000000000000008152918318600483018190529173ffffffffffffffffffffffffffffffffffffffff9091169063a366f49690602401600060405180830381600087803b158015611a4d57600080fd5b505af1158015611a61573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a2505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611b35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b59919061453a565b611b8f576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81613a83565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611c22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c46919061453a565b611c7c576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81613b3d565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611d0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d33919061453a565b611d69576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a816133c9565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611dfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e20919061453a565b611e56576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ec4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee8919061457b565b60015490915073ffffffffffffffffffffffffffffffffffffffff166311ca4fc2611f116106fe565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff91821660048201529084166024820152604401600060405180830381600087803b158015611f7f57600080fd5b505af1158015611f93573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507f3f82447be465b0b5a4a9e54c74d5f6ae73f2e9537f2cc1590a340524703d09619150600090a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015612065573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612089919061453a565b6120bf576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61271061ffff86161015806120e357506127106120dc8585614784565b61ffff1610155b806120fd57506127106120f68383614784565b61ffff1610155b15612134576040517f0b361d6900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6121578585612145866127106147aa565b85612152866127106147aa565b613c5c565b5050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156121e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061220c919061453a565b612242576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a816132a3565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156122d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122f9919061453a565b61232f576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81613152565b3b151590565b6001546040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063f67c5bd090602401602060405180830381865afa1580156123af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123d39190614557565b90508015806123e25750806001145b15612419576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b73ffffffffffffffffffffffffffffffffffffffff811661246b576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163b6124d6576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024015b60405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8216906370a0823190602401602060405180830381865afa92505050801561257a575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261257791810190614557565b60015b6125b0576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561261e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612642919061457b565b6040517ff9a65030000000000000000000000000000000000000000000000000000000008152670de0b6b3a7640000600482015273ffffffffffffffffffffffffffffffffffffffff8381166024830152919091169063f9a6503090604401602060405180830381865afa9250505080156126f8575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526126f591810190614557565b60015b61272e576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506001546040517fd48bfca700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301529091169063d48bfca790602401600060405180830381600087803b15801561279c57600080fd5b505af11580156127b0573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a250565b60025473ffffffffffffffffffffffffffffffffffffffff8381169116141561284d576040517f3b899cf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f172c48c70000000000000000000000000000000000000000000000000000000081526000600482018190529173ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa1580156128bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128e091906147cd565b91505061ffff821615806128fb57508061ffff168261ffff16115b15612932576040517f33c6608d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015261ffff851660248301529091169063a70bc54290604401600060405180830381600087803b1580156129a957600080fd5b505af11580156129bd573d6000803e3d6000fd5b505060405161ffff8516815273ffffffffffffffffffffffffffffffffffffffff861692507f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650915060200160405180910390a2505050565b60005460ff16612a81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016124cd565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b73ffffffffffffffffffffffffffffffffffffffff8116612b43576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163b612ba9576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024016124cd565b8073ffffffffffffffffffffffffffffffffffffffff1663c12c21c06040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612c2e575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252612c2b9181019061457b565b60015b612c64576040517fe9eddd1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60015473ffffffffffffffffffffffffffffffffffffffff82811691161461088e576040517fe9eddd1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612cc48383613e92565b9392505050565b6000610b43825490565b6000612cc48373ffffffffffffffffffffffffffffffffffffffff8416613ebc565b6000612d016106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015612d4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d6f9190614598565b505090506000612d7d6106fe565b73ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa158015612dc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dea91906145e5565b915050806fffffffffffffffffffffffffffffffff16836fffffffffffffffffffffffffffffffff161015612e4b576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826fffffffffffffffffffffffffffffffff16826fffffffffffffffffffffffffffffffff16146106f957612e7e6106fe565b6040517f9c55a0540000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff8516600482015273ffffffffffffffffffffffffffffffffffffffff9190911690639c55a05490602401600060405180830381600087803b158015612ef957600080fd5b505af1158015612f0d573d6000803e3d6000fd5b50506040516fffffffffffffffffffffffffffffffff861681527fa030eec20ae970821387224ec3bb15b4bd22b89bfb86dc4d2b3827aa3d99e48d925060200190505b60405180910390a1505050565b6000612f676106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015612fb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fd59190614598565b50509050816fffffffffffffffffffffffffffffffff16836fffffffffffffffffffffffffffffffff16118061302e5750806fffffffffffffffffffffffffffffffff16826fffffffffffffffffffffffffffffffff16115b15613065576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61306d6106fe565b6040517f601d66f60000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff80861660048301528416602482015273ffffffffffffffffffffffffffffffffffffffff919091169063601d66f690604401600060405180830381600087803b1580156130f057600080fd5b505af1158015613104573d6000803e3d6000fd5b5050604080516fffffffffffffffffffffffffffffffff8088168252861660208201527f4d4981437d0211f9e6843eb024d9ada1fa3a99514d4343d4aece106dd11524bb9350019050612f50565b600061315c6106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa1580156131a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131ca9190614598565b509150508015158215151461088e576131e16106fe565b6040517fffd9b907000000000000000000000000000000000000000000000000000000008152831515600482015273ffffffffffffffffffffffffffffffffffffffff919091169063ffd9b90790602401600060405180830381600087803b15801561324c57600080fd5b505af1158015613260573d6000803e3d6000fd5b505050507ff97ba903470ff3262b4a68a938fe81def401bac1bd742169d2e8d5c4ed2185d382604051613297911515815260200190565b60405180910390a15050565b73ffffffffffffffffffffffffffffffffffffffff81166132f0576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6132f86106fe565b6040517fb55bb84b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152919091169063b55bb84b90602401600060405180830381600087803b15801561336357600080fd5b505af1158015613377573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841681527fdac9a7995cbc0c0f01d78970fb6fd0b52fe0fe869eb6635e65cc1b5682b8325c925060200190505b60405180910390a150565b60006133d36106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801561341d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134419190614598565b925050508064ffffffffff168264ffffffffff161461088e578164ffffffffff168164ffffffffff16118061347c57508164ffffffffff1642115b156134b3576040517fe4eaca7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134bb6106fe565b6040517feb9606df00000000000000000000000000000000000000000000000000000000815264ffffffffff8416600482015273ffffffffffffffffffffffffffffffffffffffff919091169063eb9606df90602401600060405180830381600087803b15801561352b57600080fd5b505af115801561353f573d6000803e3d6000fd5b505060405164ffffffffff851681527f0b3eb35ba750e7a7e4d26c9eee3d226f4e1f68c5568f4a3d051c94b241b02ac092506020019050613297565b73ffffffffffffffffffffffffffffffffffffffff82166135c8576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82163b61362e576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016124cd565b61363781612af6565b60015473ffffffffffffffffffffffffffffffffffffffff8381169116148061369257506136636106fe565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b806136b7575060015473ffffffffffffffffffffffffffffffffffffffff8281169116145b806136f457506136c56106fe565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b1561372b576040517f727de5c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517fff68754300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063ff68754390602401602060405180830381865afa15801561379c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137c0919061457b565b73ffffffffffffffffffffffffffffffffffffffff1614158061388c57506001546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063fdd5764590602401602060405180830381865afa15801561384f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613873919061457b565b73ffffffffffffffffffffffffffffffffffffffff1614155b156138c3576040517f21ff1e7100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f6e98e5e400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152848116602483015290911690636e98e5e490604401600060405180830381600087803b15801561393857600080fd5b505af115801561394c573d6000803e3d6000fd5b50505050613964826003613faf90919063ffffffff16565b508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4bcbefaef68b99503d502f5a6abe7bca2b183ab8ac55457013c77d084ebd130560405160405180910390a35050565b60005460ff1615613a30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016124cd565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612acc3390565b6001546040517fdc2b21c100000000000000000000000000000000000000000000000000000000815260ff8316600482015273ffffffffffffffffffffffffffffffffffffffff9091169063dc2b21c190602401600060405180830381600087803b158015613af157600080fd5b505af1158015613b05573d6000803e3d6000fd5b505060405160ff841681527f73caacd705657a7d283e48ecf288b73bc517e3aea1bbc9da2fd54a979e8aa950925060200190506133be565b73ffffffffffffffffffffffffffffffffffffffff8116613b8a576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613b926106fe565b6040517fdcf6548200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152919091169063dcf6548290602401600060405180830381600087803b158015613bfd57600080fd5b505af1158015613c11573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841681527f32e53e2e527af8518ae889e5f7e674bc83f7cf68e4cc059aceeaa0e64208b85b925060200190506133be565b6000613c6885856147aa565b6001546040517f172c48c700000000000000000000000000000000000000000000000000000000815260006004820181905292935073ffffffffffffffffffffffffffffffffffffffff9091169063172c48c7906024016040805180830381865afa158015613cdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cff91906147cd565b9150508061ffff168261ffff1614613d6e57613d1a82613fd1565b60025460405161ffff8416815273ffffffffffffffffffffffffffffffffffffffff909116907f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac6509060200160405180910390a25b6001546040517f944ac59f00000000000000000000000000000000000000000000000000000000815261ffff808a1660048301528089166024830152808816604483015280871660648301528516608482015273ffffffffffffffffffffffffffffffffffffffff9091169063944ac59f9060a401600060405180830381600087803b158015613dfd57600080fd5b505af1158015613e11573d6000803e3d6000fd5b505050507f2214a403d5f8d049e52eacca974c6dea01a471e41d6a18903bfaf7dbc709741f878787612710613e4691906147aa565b87613e53886127106147aa565b6040805161ffff96871681529486166020860152928516848401529084166060840152909216608082015290519081900360a00190a150505050505050565b6000826000018281548110613ea957613ea9614726565b9060005260206000200154905092915050565b60008181526001830160205260408120548015613fa5576000613ee06001836147fc565b8554909150600090613ef4906001906147fc565b9050818114613f59576000866000018281548110613f1457613f14614726565b9060005260206000200154905080876000018481548110613f3757613f37614726565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080613f6a57613f6a614813565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610b43565b6000915050610b43565b6000612cc48373ffffffffffffffffffffffffffffffffffffffff8416614296565b6001546002546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015261ffff8416602482015291169063a70bc54290604401600060405180830381600087803b15801561404a57600080fd5b505af115801561405e573d6000803e3d6000fd5b505050506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156140d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140f59190614557565b905060015b818110156106f9576001546040517f172c48c700000000000000000000000000000000000000000000000000000000815260048101839052600091829173ffffffffffffffffffffffffffffffffffffffff9091169063172c48c7906024016040805180830381865afa158015614175573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061419991906147cd565b915091508461ffff168161ffff16111561428c576001546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015261ffff881660248301529091169063a70bc54290604401600060405180830381600087803b15801561422457600080fd5b505af1158015614238573d6000803e3d6000fd5b505060405161ffff8816815273ffffffffffffffffffffffffffffffffffffffff851692507f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650915060200160405180910390a25b50506001016140fa565b60008181526001830160205260408120546142dd57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610b43565b506000610b43565b73ffffffffffffffffffffffffffffffffffffffff8116811461167a57600080fd5b60006020828403121561431957600080fd5b8135612cc4816142e5565b61ffff8116811461167a57600080fd5b6000806040838503121561434757600080fd5b8235614352816142e5565b9150602083013561436281614324565b809150509250929050565b60006020828403121561437f57600080fd5b5035919050565b801515811461167a57600080fd5b600080604083850312156143a757600080fd5b82356143b2816142e5565b9150602083013561436281614386565b600080604083850312156143d557600080fd5b82356143e0816142e5565b91506020830135614362816142e5565b6fffffffffffffffffffffffffffffffff8116811461167a57600080fd5b60006020828403121561442057600080fd5b8135612cc4816143f0565b6000806040838503121561443e57600080fd5b8235614449816143f0565b91506020830135614362816143f0565b60006020828403121561446b57600080fd5b813560ff81168114612cc457600080fd5b64ffffffffff8116811461167a57600080fd5b6000602082840312156144a157600080fd5b8135612cc48161447c565b600080600080600060a086880312156144c457600080fd5b85356144cf81614324565b945060208601356144df81614324565b935060408601356144ef81614324565b925060608601356144ff81614324565b9150608086013561450f81614324565b809150509295509295909350565b60006020828403121561452f57600080fd5b8135612cc481614386565b60006020828403121561454c57600080fd5b8151612cc481614386565b60006020828403121561456957600080fd5b5051919050565b8051612419816142e5565b60006020828403121561458d57600080fd5b8151612cc4816142e5565b6000806000606084860312156145ad57600080fd5b83516145b8816143f0565b60208501519093506145c981614386565b60408501519092506145da8161447c565b809150509250925092565b600080604083850312156145f857600080fd5b8251614603816143f0565b6020840151909250614362816143f0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000602080838503121561465657600080fd5b825167ffffffffffffffff8082111561466e57600080fd5b818501915085601f83011261468257600080fd5b81518181111561469457614694614614565b8060051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f830116810181811085821117156146d7576146d7614614565b6040529182528482019250838101850191888311156146f557600080fd5b938501935b8285101561471a5761470b85614570565b845293850193928501926146fa565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061ffff8083168185168083038211156147a1576147a1614755565b01949350505050565b600061ffff838116908316818110156147c5576147c5614755565b039392505050565b600080604083850312156147e057600080fd5b82516147eb816142e5565b602084015190925061436281614324565b60008282101561480e5761480e614755565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea264697066735822122046c364b67d38a3dd85b57e027716324d90dd1df102f265f0a0e2697babdb3f3b64736f6c634300080a003394525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650608060405234801561001057600080fd5b50611a3c806100206000396000f3fe6080604052600436106101a15760003560e01c806385f8c259116100e1578063baa2abde1161008a578063ded9382a11610064578063ded9382a14610424578063e8e3370014610451578063f305d7191461049a578063fb3bdb41146104b957600080fd5b8063baa2abde146103da578063c45a015514610382578063d06ca61f1461040457600080fd5b8063ad615dec116100bb578063ad615dec146101e9578063af2979eb1461039e578063b6f9de95146103c557600080fd5b806385f8c259146101e95780638803dbee14610362578063ad5c46481461038257600080fd5b806338ed17391161014e5780635b0d5984116101285780635b0d5984146102fb5780635c11d79514610326578063791ac947146103265780637ff36ab51461034957600080fd5b806338ed1739146102b95780634a25d94a146102175780635911fb9a146102d957600080fd5b80631f00ca741161017f5780631f00ca741461024b5780632195995c1461026b578063379b87ea1461029957600080fd5b806302751cec146101a6578063054d50d4146101e957806318cbafe514610217575b600080fd5b3480156101b257600080fd5b506101cf6101c13660046112b8565b600080965096945050505050565b604080519283526020830191909152015b60405180910390f35b3480156101f557600080fd5b50610209610204366004611310565b6104cc565b6040519081526020016101e0565b34801561022357600080fd5b5061023e610232366004611388565b60609695505050505050565b6040516101e091906113f8565b34801561025757600080fd5b5061023e61026636600461143c565b6104d6565b34801561027757600080fd5b506101cf6102863660046114aa565b6000809b509b9950505050505050505050565b3480156102a557600080fd5b506102096102b436600461154e565b610728565b3480156102c557600080fd5b5061023e6102d4366004611388565b6107c6565b3480156102e557600080fd5b506102f96102f4366004611581565b6109a6565b005b34801561030757600080fd5b506102096103163660046115bd565b60009a9950505050505050505050565b34801561033257600080fd5b506102f9610341366004611388565b505050505050565b61023e61035736600461164f565b606095945050505050565b34801561036e57600080fd5b5061023e61037d366004611388565b610a28565b34801561038e57600080fd5b50604051600081526020016101e0565b3480156103aa57600080fd5b506102096103b93660046112b8565b60009695505050505050565b6102f96103d336600461164f565b5050505050565b3480156103e657600080fd5b506101cf6103f53660046116b5565b60008097509795505050505050565b34801561041057600080fd5b5061023e61041f36600461143c565b610b7e565b34801561043057600080fd5b506101cf61043f3660046115bd565b6000809a509a98505050505050505050565b34801561045d57600080fd5b5061047f61046c36600461171f565b6000806000985098509895505050505050565b604080519384526020840192909252908201526060016101e0565b61047f6104a83660046112b8565b600080600096509650969350505050565b61023e6104c736600461164f565b610d65565b60005b9392505050565b60606002821015610548576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f496e636f72726563742070617468206c656e677468000000000000000000000060448201526064015b60405180910390fd5b8167ffffffffffffffff81111561056157610561611793565b60405190808252806020026020018201604052801561058a578160200160208202803683370190505b509050838161059a6001856117f1565b815181106105aa576105aa611808565b602090810291909101015260006105c26001846117f1565b90505b801561072057600061062885856105dd6001866117f1565b8181106105ec576105ec611808565b90506020020160208101906106019190611837565b86868581811061061357610613611808565b90506020020160208101906102b49190611837565b905080610691576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f556e69737761704d6f636b3a2052617465206973206e6f742073657475700000604482015260640161053f565b6103e5816b033b2e3c9fd0803ce80000008585815181106106b4576106b4611808565b60200260200101516106c69190611852565b6106d0919061188f565b6106dc906103e8611852565b6106e6919061188f565b836106f26001856117f1565b8151811061070257610702611808565b60209081029190910101525080610718816118ca565b9150506105c5565b509392505050565b73ffffffffffffffffffffffffffffffffffffffff80831660009081526020818152604080832093851683529290522054806107c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f546f6b656e2070616972206e6f7420666f756e64000000000000000000000000604482015260640161053f565b92915050565b60608142811015610833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015260640161053f565b6000610840898888610b7e565b90506000816108506001896117f1565b8151811061086057610860611808565b60200260200101519050888110156108fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f556e69737761705632526f757465723a20494e53554646494349454e545f4f5560448201527f545055545f414d4f554e54000000000000000000000000000000000000000000606482015260840161053f565b61094633308c8b8b600081811061091357610913611808565b90506020020160208101906109289190611837565b73ffffffffffffffffffffffffffffffffffffffff16929190610d94565b61099986828a8a6109586001826117f1565b81811061096757610967611808565b905060200201602081019061097c9190611837565b73ffffffffffffffffffffffffffffffffffffffff169190610e76565b5098975050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152602081815260408083209386168352929052208190556109ef6b033b2e3c9fd0803ce800000082610ed1565b73ffffffffffffffffffffffffffffffffffffffff92831660009081526020818152604080832096909516825294909452919092205550565b60608142811015610a95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015260640161053f565b6000610aa28988886104d6565b9050600081600081518110610ab957610ab9611808565b6020026020010151905088811115610b53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f556e69737761705632526f757465723a204558434553534956455f494e50555460448201527f5f414d4f554e5400000000000000000000000000000000000000000000000000606482015260840161053f565b610b6c3330838b8b600081811061091357610913611808565b610999868b8a8a6109586001826117f1565b60606002821015610beb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f496e636f72726563742070617468206c656e6774680000000000000000000000604482015260640161053f565b8167ffffffffffffffff811115610c0457610c04611793565b604051908082528060200260200182016040528015610c2d578160200160208202803683370190505b5090508381600081518110610c4457610c44611808565b602090810291909101015260015b82811015610720576000610c6c85856105dd6001866117f1565b905080610cd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f556e69737761704d6f636b3a2052617465206973206e6f742073657475700000604482015260640161053f565b6103e86103e56b033b2e3c9fd0803ce80000008386610cf56001886117f1565b81518110610d0557610d05611808565b6020026020010151610d179190611852565b610d21919061188f565b610d2b9190611852565b610d35919061188f565b838381518110610d4757610d47611808565b60209081029190910101525080610d5d816118ff565b915050610c52565b604080516001808252818301909252606091600091906020808301908036833701905050979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052610e709085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611037565b50505050565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610ecc9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401610dee565b505050565b60408051808201909152600281527f4d33000000000000000000000000000000000000000000000000000000000000602082015260009082610f40576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053f9190611964565b506000610f4e60028461188f565b90506b033b2e3c9fd0803ce8000000610f87827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6117f1565b610f91919061188f565b8411156040518060400160405280600281526020017f4d3100000000000000000000000000000000000000000000000000000000000081525090611002576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053f9190611964565b50828161101b6b033b2e3c9fd0803ce800000087611852565b61102591906119b5565b61102f919061188f565b949350505050565b6000611099826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166111439092919063ffffffff16565b805190915015610ecc57808060200190518101906110b791906119cd565b610ecc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161053f565b606061102f848460008585843b6111b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161053f565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516111df91906119ea565b60006040518083038185875af1925050503d806000811461121c576040519150601f19603f3d011682016040523d82523d6000602084013e611221565b606091505b509150915061123182828661123c565b979650505050505050565b6060831561124b5750816104cf565b82511561125b5782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053f9190611964565b803573ffffffffffffffffffffffffffffffffffffffff811681146112b357600080fd5b919050565b60008060008060008060c087890312156112d157600080fd5b6112da8761128f565b95506020870135945060408701359350606087013592506112fd6080880161128f565b915060a087013590509295509295509295565b60008060006060848603121561132557600080fd5b505081359360208301359350604090920135919050565b60008083601f84011261134e57600080fd5b50813567ffffffffffffffff81111561136657600080fd5b6020830191508360208260051b850101111561138157600080fd5b9250929050565b60008060008060008060a087890312156113a157600080fd5b8635955060208701359450604087013567ffffffffffffffff8111156113c657600080fd5b6113d289828a0161133c565b90955093506113e590506060880161128f565b9150608087013590509295509295509295565b6020808252825182820181905260009190848201906040850190845b8181101561143057835183529284019291840191600101611414565b50909695505050505050565b60008060006040848603121561145157600080fd5b83359250602084013567ffffffffffffffff81111561146f57600080fd5b61147b8682870161133c565b9497909650939450505050565b801515811461149657600080fd5b50565b803560ff811681146112b357600080fd5b60008060008060008060008060008060006101608c8e0312156114cc57600080fd5b6114d58c61128f565b9a506114e360208d0161128f565b995060408c0135985060608c0135975060808c0135965061150660a08d0161128f565b955060c08c0135945060e08c013561151d81611488565b935061152c6101008d01611499565b92506101208c013591506101408c013590509295989b509295989b9093969950565b6000806040838503121561156157600080fd5b61156a8361128f565b91506115786020840161128f565b90509250929050565b60008060006060848603121561159657600080fd5b61159f8461128f565b92506115ad6020850161128f565b9150604084013590509250925092565b6000806000806000806000806000806101408b8d0312156115dd57600080fd5b6115e68b61128f565b995060208b0135985060408b0135975060608b0135965061160960808c0161128f565b955060a08b0135945060c08b013561162081611488565b935061162e60e08c01611499565b92506101008b013591506101208b013590509295989b9194979a5092959850565b60008060008060006080868803121561166757600080fd5b85359450602086013567ffffffffffffffff81111561168557600080fd5b6116918882890161133c565b90955093506116a490506040870161128f565b949793965091946060013592915050565b600080600080600080600060e0888a0312156116d057600080fd5b6116d98861128f565b96506116e76020890161128f565b955060408801359450606088013593506080880135925061170a60a0890161128f565b915060c0880135905092959891949750929550565b600080600080600080600080610100898b03121561173c57600080fd5b6117458961128f565b975061175360208a0161128f565b965060408901359550606089013594506080890135935060a0890135925061177d60c08a0161128f565b915060e089013590509295985092959890939650565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015611803576118036117c2565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561184957600080fd5b6104cf8261128f565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561188a5761188a6117c2565b500290565b6000826118c5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000816118d9576118d96117c2565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611931576119316117c2565b5060010190565b60005b8381101561195357818101518382015260200161193b565b83811115610e705750506000910152565b6020815260008251806020840152611983816040850160208701611938565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b600082198211156119c8576119c86117c2565b500190565b6000602082840312156119df57600080fd5b81516104cf81611488565b600082516119fc818460208701611938565b919091019291505056fea2646970667358221220c83ba4b7a780d6bcd42d58ce63ee43d73cb764a70cd33e8cc91609b9554a872e64736f6c634300080a003360e06040523480156200001157600080fd5b506040516200251b3803806200251b833981016040819052620000349162000121565b81816001600160a01b03821615806200005457506001600160a01b038116155b156200007357604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038216608081905260408051632f7a188160e01b81529051632f7a1881916004808201926020929091908290030181865afa158015620000be573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e4919062000159565b6001600160a01b0390811660a0521660c05250506001600055506200017e565b80516001600160a01b03811681146200011c57600080fd5b919050565b600080604083850312156200013557600080fd5b620001408362000104565b9150620001506020840162000104565b90509250929050565b6000602082840312156200016c57600080fd5b620001778262000104565b9392505050565b60805160a05160c0516122da620002416000396000818161045e015281816106040152818161070101528181610aa401528181610c9c01528181610d6e015281816110dd01528181611186015281816113a8015281816114c701526115a10152600081816102b40152818161121301526116860152600081816104b20152818161084601528181610b8c01528181610e56015281816113fe01528181611498015281816115f70152818161170e015281816117c2015261186c01526122da6000f3fe6080604052600436106101cd5760003560e01c8063ad5c4648116100f7578063c12c21c011610095578063ded9382a11610064578063ded9382a1461052b578063e8e3370014610546578063f305d71914610581578063fb3bdb411461038557600080fd5b8063c12c21c0146104a0578063c45a0155146104d4578063ce30bbdb146104e9578063d06ca61f1461050b57600080fd5b8063b6f9de95116100d1578063b6f9de9514610423578063baa2abde14610431578063bd90df701461044c578063bdbeaa311461048057600080fd5b8063ad5c4648146103d3578063ad615dec146103e8578063af2979eb1461040857600080fd5b80634a25d94a1161016f578063791ac9471161013e578063791ac9471461033b5780637ff36ab51461038557806385f8c259146103935780638803dbee146103b357600080fd5b80634a25d94a1461023a5780635b0d59841461031b5780635c11d7951461033b57806378aa73a41461035d57600080fd5b80631f00ca74116101ab5780631f00ca74146102675780632195995c146102875780632f7a1881146102a257806338ed1739146102fb57600080fd5b806302751cec146101d2578063054d50d41461020c57806318cbafe51461023a575b600080fd5b3480156101de57600080fd5b506101f26101ed3660046118f6565b61058f565b604080519283526020830191909152015b60405180910390f35b34801561021857600080fd5b5061022c610227366004611954565b6105c4565b604051908152602001610203565b34801561024657600080fd5b5061025a6102553660046119cc565b61068d565b6040516102039190611a3f565b34801561027357600080fd5b5061025a610282366004611a83565b6106c1565b34801561029357600080fd5b506101f26101ed366004611af5565b3480156102ae57600080fd5b506102d67f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610203565b34801561030757600080fd5b5061025a6103163660046119cc565b61079d565b34801561032757600080fd5b5061022c610336366004611b9d565b6109fe565b34801561034757600080fd5b5061035b6103563660046119cc565b610a32565b005b34801561036957600080fd5b50610372600281565b60405161ffff9091168152602001610203565b61025a610255366004611c31565b34801561039f57600080fd5b5061022c6103ae366004611954565b610a64565b3480156103bf57600080fd5b5061025a6103ce3660046119cc565b610ae8565b3480156103df57600080fd5b506102d6610c98565b3480156103f457600080fd5b5061022c610403366004611954565b610d2e565b34801561041457600080fd5b5061022c6103363660046118f6565b61035b610356366004611c31565b34801561043d57600080fd5b506101f26101ed366004611c98565b34801561045857600080fd5b506102d67f000000000000000000000000000000000000000000000000000000000000000081565b34801561048c57600080fd5b5061025a61049b366004611d0a565b610db2565b3480156104ac57600080fd5b506102d67f000000000000000000000000000000000000000000000000000000000000000081565b3480156104e057600080fd5b506102d66110d9565b3480156104f557600080fd5b506104fe600181565b6040516102039190611d5d565b34801561051757600080fd5b5061025a610526366004611a83565b611146565b34801561053757600080fd5b506101f26101ed366004611b9d565b34801561055257600080fd5b50610566610561366004611d9e565b6111bf565b60408051938452602084019290925290820152606001610203565b6105666105613660046118f6565b6000806040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f054d50d40000000000000000000000000000000000000000000000000000000081526004810184905260248101839052604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063054d50d4906064015b602060405180830381865afa158015610661573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106859190611e1a565b949350505050565b60606040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1f00ca7400000000000000000000000000000000000000000000000000000000815260609073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690631f00ca749061073a90879087908790600401611e89565b600060405180830381865afa158015610757573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526106859190810190611f2a565b606060026000541415610811576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156108a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c69190611fd0565b90506000868660008181106108dd576108dd611ff4565b90506020020160208101906108f29190612023565b90506000878761090360018261206f565b81811061091257610912611ff4565b90506020020160208101906109279190612023565b90506109d88383836338ed173960e01b8e8e8e8e8b8e60405160240161095296959493929190612086565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152600160006111f6565b8060200190518101906109eb9190611f2a565b60016000559a9950505050505050505050565b60006040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f85f8c2590000000000000000000000000000000000000000000000000000000081526004810184905260248101839052604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906385f8c25990606401610644565b606060026000541415610b57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610808565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610be8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0c9190611fd0565b9050600086866000818110610c2357610c23611ff4565b9050602002016020810190610c389190612023565b905060008787610c4960018261206f565b818110610c5857610c58611ff4565b9050602002016020810190610c6d9190612023565b90506109d8838383638803dbee60e01b8e8e8e8e8b8e60405160240161095296959493929190612086565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d299190611fd0565b905090565b6040517fad615dec0000000000000000000000000000000000000000000000000000000081526004810184905260248101839052604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ad615dec90606401610644565b606060026000541415610e21576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610808565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610eb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed69190611fd0565b9050600085856000818110610eed57610eed611ff4565b9050602002016020810190610f029190612023565b905060008686610f1360018261206f565b818110610f2257610f22611ff4565b9050602002016020810190610f379190612023565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529192506000918416906370a0823190602401602060405180830381865afa158015610fa9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fcd9190611e1a565b905060018111156110c7578080600190039150506110b18484846338ed173960e01b856b033b2e3c9fd0803ce80000008f8861100991906120d1565b611013919061210e565b8e8e8c8f60405160240161102c96959493929190612086565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526001806111f6565b8060200190518101906110c49190611f2a565b94505b50506001600055509095945050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d05573d6000803e3d6000fd5b6040517fd06ca61f00000000000000000000000000000000000000000000000000000000815260609073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063d06ca61f9061073a90879087908790600401611e89565b60008060006040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606000803373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461135f576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301528916906370a0823190602401602060405180830381865afa1580156112a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c89190611e1a565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152919350908816906370a0823190602401602060405180830381865afa158015611338573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135c9190611e1a565b90505b841561145b576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561144257600080fd5b505af1158015611456573d6000803e3d6000fd5b505050505b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a906114f19033907f0000000000000000000000000000000000000000000000000000000000000000908b90600401612179565b6000604051808303816000875af1158015611510573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261155691908101906121f2565b92508415611654576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561163b57600080fd5b505af115801561164f573d6000803e3d6000fd5b505050505b61166289898985858961166e565b50509695505050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461176f576040517f654a9eda00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528681166024830152858116604483015260648201859052608482018490527f0000000000000000000000000000000000000000000000000000000000000000169063654a9eda9060a401600060405180830381600087803b15801561175257600080fd5b505af1158015611766573d6000803e3d6000fd5b505050506118c9565b801561181f576040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015286811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b15801561180657600080fd5b505af115801561181a573d6000803e3d6000fd5b505050505b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015285811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156118b057600080fd5b505af11580156118c4573d6000803e3d6000fd5b505050505b505050505050565b73ffffffffffffffffffffffffffffffffffffffff811681146118f357600080fd5b50565b60008060008060008060c0878903121561190f57600080fd5b863561191a816118d1565b9550602087013594506040870135935060608701359250608087013561193f816118d1565b8092505060a087013590509295509295509295565b60008060006060848603121561196957600080fd5b505081359360208301359350604090920135919050565b60008083601f84011261199257600080fd5b50813567ffffffffffffffff8111156119aa57600080fd5b6020830191508360208260051b85010111156119c557600080fd5b9250929050565b60008060008060008060a087890312156119e557600080fd5b8635955060208701359450604087013567ffffffffffffffff811115611a0a57600080fd5b611a1689828a01611980565b9095509350506060870135611a2a816118d1565b80925050608087013590509295509295509295565b6020808252825182820181905260009190848201906040850190845b81811015611a7757835183529284019291840191600101611a5b565b50909695505050505050565b600080600060408486031215611a9857600080fd5b83359250602084013567ffffffffffffffff811115611ab657600080fd5b611ac286828701611980565b9497909650939450505050565b80358015158114611adf57600080fd5b919050565b803560ff81168114611adf57600080fd5b60008060008060008060008060008060006101608c8e031215611b1757600080fd5b8b35611b22816118d1565b9a5060208c0135611b32816118d1565b995060408c0135985060608c0135975060808c0135965060a08c0135611b57816118d1565b955060c08c01359450611b6c60e08d01611acf565b9350611b7b6101008d01611ae4565b92506101208c013591506101408c013590509295989b509295989b9093969950565b6000806000806000806000806000806101408b8d031215611bbd57600080fd5b8a35611bc8816118d1565b995060208b0135985060408b0135975060608b0135965060808b0135611bed816118d1565b955060a08b01359450611c0260c08c01611acf565b9350611c1060e08c01611ae4565b92506101008b013591506101208b013590509295989b9194979a5092959850565b600080600080600060808688031215611c4957600080fd5b85359450602086013567ffffffffffffffff811115611c6757600080fd5b611c7388828901611980565b9095509350506040860135611c87816118d1565b949793965091946060013592915050565b600080600080600080600060e0888a031215611cb357600080fd5b8735611cbe816118d1565b96506020880135611cce816118d1565b955060408801359450606088013593506080880135925060a0880135611cf3816118d1565b8092505060c0880135905092959891949750929550565b60008060008060608587031215611d2057600080fd5b84359350602085013567ffffffffffffffff811115611d3e57600080fd5b611d4a87828801611980565b9598909750949560400135949350505050565b6020810160118310611d98577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b600080600080600080600080610100898b031215611dbb57600080fd5b8835611dc6816118d1565b97506020890135611dd6816118d1565b965060408901359550606089013594506080890135935060a0890135925060c0890135611e02816118d1565b8092505060e089013590509295985092959890939650565b600060208284031215611e2c57600080fd5b5051919050565b8183526000602080850194508260005b85811015611e7e578135611e56816118d1565b73ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101611e43565b509495945050505050565b838152604060208201526000611ea3604083018486611e33565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611f2257611f22611eac565b604052919050565b60006020808385031215611f3d57600080fd5b825167ffffffffffffffff80821115611f5557600080fd5b818501915085601f830112611f6957600080fd5b815181811115611f7b57611f7b611eac565b8060051b9150611f8c848301611edb565b8181529183018401918481019088841115611fa657600080fd5b938501935b83851015611fc457845182529385019390850190611fab565b98975050505050505050565b600060208284031215611fe257600080fd5b8151611fed816118d1565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561203557600080fd5b8135611fed816118d1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561208157612081612040565b500390565b86815285602082015260a0604082015260006120a660a083018688611e33565b73ffffffffffffffffffffffffffffffffffffffff9490941660608301525060800152949350505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561210957612109612040565b500290565b600082612144577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b8381101561216457818101518382015260200161214c565b83811115612173576000848401525b50505050565b600073ffffffffffffffffffffffffffffffffffffffff80861683528085166020840152506060604083015282518060608401526121be816080850160208701612149565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01691909101608001949350505050565b60006020828403121561220457600080fd5b815167ffffffffffffffff8082111561221c57600080fd5b818401915084601f83011261223057600080fd5b81518181111561224257612242611eac565b61227360207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611edb565b915080825285602082850101111561228a57600080fd5b61229b816020840160208601612149565b5094935050505056fea2646970667358221220eb17abe05eeba3a20acf423d9c0b916f7c22eba6424cd918d18ad2a760eea1ba64736f6c634300080a0033608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611a018061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c8063715018a61161005b578063715018a6146100f45780638da5cb5b146100fc578063d7aa2e3514610124578063f2fde38b1461015557600080fd5b80631bf64c411461008d57806345330666146100b657806354fd4d50146100cb5780636f33547d146100e1575b600080fd5b6100a061009b366004611436565b610168565b6040516100ad919061158a565b60405180910390f35b6100c96100c43660046115f9565b61027d565b005b6100d3600281565b6040519081526020016100ad565b6100a06100ef366004611436565b61035a565b6100c9610514565b60005460405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100ad565b6100d361013236600461164a565b600160209081526000938452604080852082529284528284209052825290205481565b6100c9610163366004611695565b6105a1565b6101a56040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b6040805160028082526060820183526000926020830190803683370190505090508360400151816000815181106101de576101de6116b9565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050836060015181600181518110610230576102306116b9565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506102758484836106d1565b949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610303576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff93841660009081526001602090815260408083209587168084528683528184209590971683529381528382208390559384528281209481529390925290912055565b6103976040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b60808381015151604080516003808252938101909152909160009190602082016060803683370190505090508460400151816000815181106103db576103db6116b9565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505084606001518160028151811061042d5761042d6116b9565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060005b8281101561050b5785608001518181518110610488576104886116b9565b6020026020010151826001815181106104a3576104a36116b9565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060006104ea8787856106d1565b90506104f98188876000610aa7565b15610502578094505b5060010161046a565b50505092915050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610595576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102fa565b61059f6000610ac3565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610622576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102fa565b73ffffffffffffffffffffffffffffffffffffffff81166106c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102fa565b6106ce81610ac3565b50565b61070e6040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b600061071985610b38565b1561080a5760a08501516040517fd06ca61f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86169163d06ca61f9161077691908790600401611739565b600060405180830381865afa9250505080156107d257506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526107cf9190810190611752565b60015b6107db576108e6565b80600182516107ea9190611812565b815181106107fa576107fa6116b9565b60200260200101519150506108e6565b60a08501516040517f1f00ca7400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff861691631f00ca749161086291908790600401611739565b600060405180830381865afa9250505080156108be57506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108bb9190810190611752565b60015b6108c7576108e6565b806000815181106108da576108da6116b9565b60200260200101519150505b8015610a9f57602082018190526001604083015261090685858584610bd1565b826000018190525060008473ffffffffffffffffffffffffffffffffffffffff1663bd90df706040518163ffffffff1660e01b8152600401602060405180830381865afa15801561095b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097f9190611829565b90506000600185516109919190611812565b905060005b81811015610a9b5773ffffffffffffffffffffffffffffffffffffffff8316600090815260016020526040812087519091908890849081106109da576109da6116b9565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600087836001610a2c9190611846565b81518110610a3c57610a3c6116b9565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205485606001818151610a909190611846565b905250600101610996565b5050505b509392505050565b6000610aba858585866060015186610e3c565b95945050505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008082516002811115610b4e57610b4e61185e565b1480610b6c5750600182516002811115610b6a57610b6a61185e565b145b15610b7957506001919050565b600282516002811115610b8e57610b8e61185e565b1415610b9c57506000919050565b81516040517ffe7995cf0000000000000000000000000000000000000000000000000000000081526102fa919060040161188d565b604080518082019091526000815260606020820152600185516002811115610bfb57610bfb61185e565b1415610cf8576040805180820190915273ffffffffffffffffffffffffffffffffffffffff85168152602081017fbdbeaa3100000000000000000000000000000000000000000000000000000000610c538886610f56565b86610c6042610e10611846565b604051602401610c72939291906118ce565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290529050610275565b600085516002811115610d0d57610d0d61185e565b1415610d93576040805180820190915273ffffffffffffffffffffffffffffffffffffffff8516815260a086015160208201907f38ed17390000000000000000000000000000000000000000000000000000000090610d6c8987610f90565b60208a01518890610d7f42610e10611846565b604051602401610c729594939291906118f7565b600285516002811115610da857610da861185e565b1415610e07576040805180820190915273ffffffffffffffffffffffffffffffffffffffff8516815260a086015160208201907f8803dbee0000000000000000000000000000000000000000000000000000000090610d6c8987610f90565b84516040517ffe7995cf0000000000000000000000000000000000000000000000000000000081526102fa919060040161188d565b60008560400151610e4f57506000610aba565b8360400151610e6057506001610aba565b6000610ebd8688602001516b033b2e3c9fd0803ce8000000868b60600151610e889190611940565b610e92919061197d565b60208901516b033b2e3c9fd0803ce8000000610eae898b611940565b610eb8919061197d565b611077565b9050600086516002811115610ed457610ed461185e565b1480610ef25750600186516002811115610ef057610ef061185e565b145b15610efe579050610aba565b600286516002811115610f1357610f1361185e565b1415610f2157159050610aba565b85516040517ffe7995cf0000000000000000000000000000000000000000000000000000000081526102fa919060040161188d565b60a0820151600090610f7d84610f78856b033b2e3c9fd0803ce8000000611940565b610f90565b610f87919061197d565b90505b92915050565b60008260e0015115610fa457506000610f8a565b600083516002811115610fb957610fb961185e565b1480610fd75750600183516002811115610fd557610fd561185e565b145b1561100a5760c083015161271090610fef9082611812565b610ff99084611940565b611003919061197d565b9050610f8a565b60028351600281111561101f5761101f61185e565b14156110425760c083015161103690612710611846565b610ff961271084611940565b82516040517ffe7995cf0000000000000000000000000000000000000000000000000000000081526102fa919060040161188d565b60006110b76040518060400160405280600c81526020017f414141202d20616d6f756e740000000000000000000000000000000000000000815250611168565b6110c0856111f7565b6110c9846111f7565b6110d2836111f7565b6110db826111f7565b6110ed6110e88587611812565b6111f7565b6110fa6110e88385611812565b61110386610b38565b611124576111118284611846565b61111b8587611846565b10159050610aba565b8385101580156111345750818310155b1561114d576111438284611812565b61111b8587611812565b83851061115b57600161115e565b60005b9695505050505050565b6106ce8160405160240161117c91906119b8565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f41304fac00000000000000000000000000000000000000000000000000000000179052611284565b6106ce8160405160240161120d91815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff5b1bba9000000000000000000000000000000000000000000000000000000001790525b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610100810167ffffffffffffffff811182821017156112f8576112f86112a5565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611345576113456112a5565b604052919050565b80356003811061135c57600080fd5b919050565b73ffffffffffffffffffffffffffffffffffffffff811681146106ce57600080fd5b803561135c81611361565b600067ffffffffffffffff8211156113a8576113a86112a5565b5060051b60200190565b600082601f8301126113c357600080fd5b813560206113d86113d38361138e565b6112fe565b82815260059290921b840181019181810190868411156113f757600080fd5b8286015b8481101561141b57803561140e81611361565b83529183019183016113fb565b509695505050505050565b8035801515811461135c57600080fd5b6000806040838503121561144957600080fd5b823567ffffffffffffffff8082111561146157600080fd5b90840190610100828703121561147657600080fd5b61147e6112d4565b6114878361134d565b815261149560208401611383565b60208201526114a660408401611383565b60408201526114b760608401611383565b60608201526080830135828111156114ce57600080fd5b6114da888286016113b2565b60808301525060a083013560a082015260c083013560c082015261150060e08401611426565b60e0820152935061151691505060208401611383565b90509250929050565b6000815180845260005b8181101561154557602081850181015186830182015201611529565b81811115611557576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208082528251608083830152805173ffffffffffffffffffffffffffffffffffffffff1660a08401520151604060c08301526000906115cd60e084018261151f565b905060208401516040840152604084015115156060840152606084015160808401528091505092915050565b6000806000806080858703121561160f57600080fd5b843561161a81611361565b9350602085013561162a81611361565b9250604085013561163a81611361565b9396929550929360600135925050565b60008060006060848603121561165f57600080fd5b833561166a81611361565b9250602084013561167a81611361565b9150604084013561168a81611361565b809150509250925092565b6000602082840312156116a757600080fd5b81356116b281611361565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081518084526020808501945080840160005b8381101561172e57815173ffffffffffffffffffffffffffffffffffffffff16875295820195908201906001016116fc565b509495945050505050565b82815260406020820152600061027560408301846116e8565b6000602080838503121561176557600080fd5b825167ffffffffffffffff81111561177c57600080fd5b8301601f8101851361178d57600080fd5b805161179b6113d38261138e565b81815260059190911b820183019083810190878311156117ba57600080fd5b928401925b828410156117d8578351825292840192908401906117bf565b979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015611824576118246117e3565b500390565b60006020828403121561183b57600080fd5b81516116b281611361565b60008219821115611859576118596117e3565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60208101600383106118c8577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b8381526060602082015260006118e760608301856116e8565b9050826040830152949350505050565b85815284602082015260a06040820152600061191660a08301866116e8565b73ffffffffffffffffffffffffffffffffffffffff94909416606083015250608001529392505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611978576119786117e3565b500290565b6000826119b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b602081526000610f87602083018461151f56fea2646970667358221220042a62b4d425a2205fa828887bf063a55ef88bc4c19cee1e98235c23b32ccdf764736f6c634300080a003360806040526000805460ff1916600117905534801561001d57600080fd5b50611be18061002d6000396000f3fe6080604052600436106100d25760003560e01c8063ba414fa61161007f578063db3e219811610059578063db3e219814610215578063f28c049814610228578063f7729d431461023b578063fa7626d41461025b57600080fd5b8063ba414fa6146101bd578063c04b8d59146101e2578063cdca1753146101f557600080fd5b8063414bf389116100b0578063414bf3891461014c57806347485d2a1461015f5780635911fb9a1461019d57600080fd5b80632ccbc99b146100d75780632f80bb1d146100f957806330d07f211461012c575b600080fd5b3480156100e357600080fd5b506100f76100f2366004611672565b610275565b005b34801561010557600080fd5b506101196101143660046116f0565b61031f565b6040519081526020015b60405180910390f35b34801561013857600080fd5b506101196101473660046117c3565b610468565b61011961015a366004611842565b610566565b34801561016b57600080fd5b5061011961017a36600461185f565b600160209081526000938452604080852082529284528284209052825290205481565b3480156101a957600080fd5b506100f76101b83660046118a6565b6106b5565b3480156101c957600080fd5b506101d26106c8565b6040519015158152602001610123565b6101196101f03660046118f9565b610826565b34801561020157600080fd5b506101196102103660046116f0565b6109b5565b610119610223366004611842565b610af1565b6101196102363660046118f9565b610c00565b34801561024757600080fd5b506101196102563660046117c3565b610d4e565b34801561026757600080fd5b506000546101d29060ff1681565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160209081526040808320938716835292815282822062ffffff86168352905220819055806102ce6b033b2e3c9fd0803ce80000008061195d565b6102d8919061199a565b73ffffffffffffffffffffffffffffffffffffffff938416600090815260016020908152604080832097909616825295865284812062ffffff909416815292909452502055565b805b600361032f6014600261195d565b61033991906119d5565b83511061046257600080600061034e86610e35565b73ffffffffffffffffffffffffffffffffffffffff8083166000908152600160209081526040808320938716835292815282822062ffffff8516835290522054929550909350915080610402576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f556e697377617056334d6f636b3a2052617465206973206e6f7420736574757060448201526064015b60405180910390fd5b61041462ffffff8316620f42406119ed565b8161042b6b033b2e3c9fd0803ce80000008861195d565b610435919061199a565b61044290620f424061195d565b61044c919061199a565b945061045787610e71565b965050505050610321565b92915050565b73ffffffffffffffffffffffffffffffffffffffff8086166000908152600160209081526040808320938816835292815282822062ffffff8716835290529081205480610511576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f556e697377617056334d6f636b3a2052617465206973206e6f7420736574757060448201526064016103f9565b61052362ffffff8616620f42406119ed565b8161053a6b033b2e3c9fd0803ce80000008761195d565b610544919061199a565b61055190620f424061195d565b61055b919061199a565b979650505050505050565b60006105a46105786020840184611a04565b6105886040850160208601611a04565b6105986060860160408701611a21565b8560a001356000610d4e565b90508160c0013581101561063a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f556e69737761705632526f757465723a20494e53554646494349454e545f4f5560448201527f545055545f414d4f554e5400000000000000000000000000000000000000000060648201526084016103f9565b61066f333060a08501356106516020870187611a04565b73ffffffffffffffffffffffffffffffffffffffff16929190610ea2565b6106b06106826080840160608501611a04565b826106936040860160208701611a04565b73ffffffffffffffffffffffffffffffffffffffff169190610f84565b919050565b6106c38383610bb884610275565b505050565b60008054610100900460ff16156106e85750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106b05760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000008284015282518083038401815260608301909352600092909161078d917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc491608001611a68565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526107c591611ab0565b6000604051808303816000865af19150503d8060008114610802576040519150601f19603f3d011682016040523d82523d6000602084013e610807565b606091505b509150508080602001905181019061081f9190611acc565b9392505050565b600080806108716108378580611aee565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610fda92505050565b90925090506108c16108838580611aee565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505060608601356109b5565b92508360800135831015610957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f556e69737761705632526f757465723a20494e53554646494349454e545f4f5560448201527f545055545f414d4f554e5400000000000000000000000000000000000000000060648201526084016103f9565b61097d73ffffffffffffffffffffffffffffffffffffffff831633306060880135610ea2565b6109ae6109906040860160208701611a04565b73ffffffffffffffffffffffffffffffffffffffff83169085610f84565b5050919050565b805b60036109c56014600261195d565b6109cf91906119d5565b8351106104625760008060006109e486610e35565b73ffffffffffffffffffffffffffffffffffffffff8084166000908152600160209081526040808320938616835292815282822062ffffff8516835290522054929550909350915080610a93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f556e697377617056334d6f636b3a2052617465206973206e6f7420736574757060448201526064016103f9565b620f4240610aa662ffffff8416826119ed565b6b033b2e3c9fd0803ce8000000610abd848961195d565b610ac7919061199a565b610ad1919061195d565b610adb919061199a565b9450610ae687610e71565b9650505050506109b7565b6000610b2f610b036020840184611a04565b610b136040850160208601611a04565b610b236060860160408701611a21565b8560a001356000610468565b90508160c00135811115610bc5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f556e69737761705632526f757465723a20494e53554646494349454e545f4f5560448201527f545055545f414d4f554e5400000000000000000000000000000000000000000060648201526084016103f9565b610bd83330836106516020870187611a04565b6106b0610beb6080840160608501611a04565b60a08401356106936040860160208701611a04565b60008080610c116108378580611aee565b9092509050610c61610c238580611aee565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050606086013561031f565b92508360800135831115610cf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f556e69737761705632526f757465723a20494e53554646494349454e545f4f5560448201527f545055545f414d4f554e5400000000000000000000000000000000000000000060648201526084016103f9565b610d1973ffffffffffffffffffffffffffffffffffffffff8216333086610ea2565b6109ae610d2c6040860160208701611a04565b73ffffffffffffffffffffffffffffffffffffffff8416906060870135610f84565b73ffffffffffffffffffffffffffffffffffffffff8086166000908152600160209081526040808320938816835292815282822062ffffff8716835290529081205480610df7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f556e697377617056334d6f636b3a2052617465206973206e6f7420736574757060448201526064016103f9565b620f4240610e0a62ffffff8716826119ed565b6b033b2e3c9fd0803ce8000000610e21848861195d565b610e2b919061199a565b610551919061195d565b60008080610e43848261101c565b9250610e508460146110ac565b9050610e68610e61600360146119d5565b859061101c565b91509193909250565b6060610462610e82600360146119d5565b610e8e600360146119d5565b8451610e9a91906119ed565b8491906111a0565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052610f7e9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261131a565b50505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526106c39084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401610efc565b600080610fe683610e35565b50909250610ff5905083611426565b1561100a5761100383610e71565b9250915091565b61101383610e35565b50915050915091565b60006110298260146119d5565b83511015611093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f746f416464726573735f6f75744f66426f756e6473000000000000000000000060448201526064016103f9565b5001602001516c01000000000000000000000000900490565b6000816110ba8160036119d5565b1015611122576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f746f55696e7432345f6f766572666c6f7700000000000000000000000000000060448201526064016103f9565b61112d8260036119d5565b83511015611197576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f746f55696e7432345f6f75744f66426f756e647300000000000000000000000060448201526064016103f9565b50016003015190565b6060816111ae81601f6119d5565b1015611216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016103f9565b61122082846119d5565b8451101561128a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e647300000000000000000000000000000060448201526064016103f9565b6060821580156112a95760405191506000825260208201604052611311565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156112e25780518352602092830192016112ca565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b600061137c826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166114609092919063ffffffff16565b8051909150156106c3578080602001905181019061139a9190611acc565b6106c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016103f9565b6000611434600360146119d5565b60146114416003826119d5565b61144b91906119d5565b61145591906119d5565b825110159050919050565b606061146f8484600085611477565b949350505050565b606082471015611509576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016103f9565b843b611571576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016103f9565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161159a9190611ab0565b60006040518083038185875af1925050503d80600081146115d7576040519150601f19603f3d011682016040523d82523d6000602084013e6115dc565b606091505b509150915061055b828286606083156115f657508161081f565b8251156116065782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103f99190611b5a565b73ffffffffffffffffffffffffffffffffffffffff8116811461165c57600080fd5b50565b803562ffffff811681146106b057600080fd5b6000806000806080858703121561168857600080fd5b84356116938161163a565b935060208501356116a38161163a565b92506116b16040860161165f565b9396929550929360600135925050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561170357600080fd5b823567ffffffffffffffff8082111561171b57600080fd5b818501915085601f83011261172f57600080fd5b813581811115611741576117416116c1565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715611787576117876116c1565b816040528281528860208487010111156117a057600080fd5b826020860160208301376000602093820184015298969091013596505050505050565b600080600080600060a086880312156117db57600080fd5b85356117e68161163a565b945060208601356117f68161163a565b93506118046040870161165f565b925060608601359150608086013561181b8161163a565b809150509295509295909350565b6000610100828403121561183c57600080fd5b50919050565b6000610100828403121561185557600080fd5b61081f8383611829565b60008060006060848603121561187457600080fd5b833561187f8161163a565b9250602084013561188f8161163a565b915061189d6040850161165f565b90509250925092565b6000806000606084860312156118bb57600080fd5b83356118c68161163a565b925060208401356118d68161163a565b929592945050506040919091013590565b600060a0828403121561183c57600080fd5b60006020828403121561190b57600080fd5b813567ffffffffffffffff81111561192257600080fd5b61146f848285016118e7565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156119955761199561192e565b500290565b6000826119d0577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600082198211156119e8576119e861192e565b500190565b6000828210156119ff576119ff61192e565b500390565b600060208284031215611a1657600080fd5b813561081f8161163a565b600060208284031215611a3357600080fd5b61081f8261165f565b60005b83811015611a57578181015183820152602001611a3f565b83811115610f7e5750506000910152565b7fffffffff000000000000000000000000000000000000000000000000000000008316815260008251611aa2816004850160208701611a3c565b919091016004019392505050565b60008251611ac2818460208701611a3c565b9190910192915050565b600060208284031215611ade57600080fd5b8151801515811461081f57600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112611b2357600080fd5b83018035915067ffffffffffffffff821115611b3e57600080fd5b602001915036819003821315611b5357600080fd5b9250929050565b6020815260008251806020840152611b79816040850160208701611a3c565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea26469706673582212204cf30f1ca2431e63304f0a45d5cefa0164fe6393b35a339d16bca5512d511dd064736f6c634300080a003360e06040523480156200001157600080fd5b506040516200221a3803806200221a833981016040819052620000349162000121565b81816001600160a01b03821615806200005457506001600160a01b038116155b156200007357604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038216608081905260408051632f7a188160e01b81529051632f7a1881916004808201926020929091908290030181865afa158015620000be573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e4919062000159565b6001600160a01b0390811660a0521660c05250506001600055506200017e565b80516001600160a01b03811681146200011c57600080fd5b919050565b600080604083850312156200013557600080fd5b620001408362000104565b9150620001506020840162000104565b90509250929050565b6000602082840312156200016c57600080fd5b620001778262000104565b9392505050565b60805160a05160c051611ff6620002246000396000818161017a015281816111a8015281816112c701526113a101526000818160d30152818161101301526115330152600081816101c101528181610314015281816105630152818161070501528181610ae001528181610c7801528181610dbe015281816111fe01528181611298015281816113f7015281816115bb0152818161166f01526117190152611ff66000f3fe6080604052600436106100bc5760003560e01c8063c12c21c011610074578063db3e21981161004e578063db3e219814610225578063f28c049814610238578063f4f18d901461024b57600080fd5b8063c12c21c0146101af578063c7fbf4de146101e3578063ce30bbdb1461020357600080fd5b806378aa73a4116100a557806378aa73a414610140578063bd90df7014610168578063c04b8d591461019c57600080fd5b80632f7a1881146100c1578063414bf3891461011f575b600080fd5b3480156100cd57600080fd5b506100f57f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61013261012d36600461182d565b61026b565b604051908152602001610116565b34801561014c57600080fd5b50610155600281565b60405161ffff9091168152602001610116565b34801561017457600080fd5b506100f57f000000000000000000000000000000000000000000000000000000000000000081565b6101326101aa366004611863565b6104bf565b3480156101bb57600080fd5b506100f57f000000000000000000000000000000000000000000000000000000000000000081565b3480156101ef57600080fd5b506101326101fe3660046118a0565b6106bd565b34801561020f57600080fd5b50610218600281565b60405161011691906118b2565b61013261023336600461182d565b610a3c565b610132610246366004611863565b610bd4565b34801561025757600080fd5b506101326102663660046118f3565b610d76565b6000600260005414156102df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610370573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103949190611953565b905060006103a736859003850185611af2565b73ffffffffffffffffffffffffffffffffffffffff83166060820152905061049f826103d66020870187611b0f565b6103e66040880160208901611b0f565b6040517f414bf3890000000000000000000000000000000000000000000000000000000090610419908790602401611b2c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915260016000610ff6565b8060200190518101906104b29190611ba7565b6001600055949350505050565b60006002600054141561052e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016102d6565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156105bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105e39190611953565b905060008061062f6105f58680611bc0565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061146e92505050565b9150915060008561063f90611d27565b73ffffffffffffffffffffffffffffffffffffffff8516602082015260405190915061069b908590859085907fc04b8d590000000000000000000000000000000000000000000000000000000090610419908790602401611e0c565b8060200190518101906106ae9190611ba7565b60016000559695505050505050565b6040517fe958b704000000000000000000000000000000000000000000000000000000008152336004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa15801561074c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107709190611953565b905060006107816020850185611b0f565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015291909116906370a0823190602401602060405180830381865afa1580156107ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108139190611ba7565b90506001811115610a35576040805161010081019091527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90910190600090806108606020880188611b0f565b73ffffffffffffffffffffffffffffffffffffffff16815260200186602001602081019061088e9190611b0f565b73ffffffffffffffffffffffffffffffffffffffff1681526020016108b96060880160408901611e1f565b62ffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff168152602001866060013581526020018381526020016b033b2e3c9fd0803ce800000087608001358561090c9190611e69565b6109169190611ea6565b815260200161092b60c0880160a08901611b0f565b73ffffffffffffffffffffffffffffffffffffffff1690529050610a1e836109566020880188611b0f565b6109666040890160208a01611b0f565b6040517f414bf3890000000000000000000000000000000000000000000000000000000090610999908790602401611b2c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152600180610ff6565b806020019051810190610a319190611ba7565b9350505b5050919050565b600060026000541415610aab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016102d6565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610b3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b609190611953565b90506000610b7336859003850185611af2565b73ffffffffffffffffffffffffffffffffffffffff831660608201528051602082015160405192935061049f92859291907fdb3e21980000000000000000000000000000000000000000000000000000000090610419908790602401611b2c565b600060026000541415610c43576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016102d6565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610cd4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf89190611953565b9050600080610d0a6105f58680611bc0565b91509150600085610d1a90611d27565b73ffffffffffffffffffffffffffffffffffffffff8516602082015260405190915061069b908590849086907ff28c04980000000000000000000000000000000000000000000000000000000090610419908790602401611e0c565b6040517fe958b704000000000000000000000000000000000000000000000000000000008152336004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015610e05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e299190611953565b9050600080610e3b6105f58680611bc0565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301529294509092506000918416906370a0823190602401602060405180830381865afa158015610eb0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed49190611ba7565b90506001811115610fed576040805160a081019091527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091019060009080610f1d8980611bc0565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509082525073ffffffffffffffffffffffffffffffffffffffff8716602080830191909152890135604080830191909152606082018590526080909101906b033b2e3c9fd0803ce800000090610fa8908b013586611e69565b610fb29190611ea6565b8152509050610fd685858563c04b8d5960e01b856040516024016109999190611e0c565b806020019051810190610fe99190611ba7565b9550505b50505050919050565b60606000803373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461115f576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301528916906370a0823190602401602060405180830381865afa1580156110a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c89190611ba7565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152919350908816906370a0823190602401602060405180830381865afa158015611138573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115c9190611ba7565b90505b841561125b576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561124257600080fd5b505af1158015611256573d6000803e3d6000fd5b505050505b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a906112f19033907f0000000000000000000000000000000000000000000000000000000000000000908b90600401611ee1565b6000604051808303816000875af1158015611310573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526113569190810190611f23565b92508415611454576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561143b57600080fd5b505af115801561144f573d6000803e3d6000fd5b505050505b61146289898985858961151b565b50509695505050505050565b600080600361147f60146002611e69565b6114899190611f91565b835110156114c3576040517f8287466d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114ce83600061177e565b91506115146114df60036014611f91565b6114eb60036014611f91565b601486516114f99190611fa9565b6115039190611ea6565b61150d9190611e69565b849061177e565b9050915091565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461161c576040517f654a9eda00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528681166024830152858116604483015260648201859052608482018490527f0000000000000000000000000000000000000000000000000000000000000000169063654a9eda9060a401600060405180830381600087803b1580156115ff57600080fd5b505af1158015611613573d6000803e3d6000fd5b50505050611776565b80156116cc576040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015286811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b1580156116b357600080fd5b505af11580156116c7573d6000803e3d6000fd5b505050505b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015285811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561175d57600080fd5b505af1158015611771573d6000803e3d6000fd5b505050505b505050505050565b600061178b826014611f91565b835110156117f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f746f416464726573735f6f75744f66426f756e6473000000000000000000000060448201526064016102d6565b50818101602001516c0100000000000000000000000090045b92915050565b6000610100828403121561182757600080fd5b50919050565b6000610100828403121561184057600080fd5b61184a8383611814565b9392505050565b600060a0828403121561182757600080fd5b60006020828403121561187557600080fd5b813567ffffffffffffffff81111561188c57600080fd5b61189884828501611851565b949350505050565b600060c0828403121561182757600080fd5b60208101601183106118ed577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561190557600080fd5b813567ffffffffffffffff81111561191c57600080fd5b82016060818503121561184a57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8116811461195057600080fd5b50565b60006020828403121561196557600080fd5b815161184a8161192e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff811182821017156119c2576119c2611970565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611a0f57611a0f611970565b604052919050565b8035611a228161192e565b919050565b803562ffffff81168114611a2257600080fd5b6000610100808385031215611a4e57600080fd5b6040519081019067ffffffffffffffff82118183101715611a7157611a71611970565b8160405280925083359150611a858261192e565b818152611a9460208501611a17565b6020820152611aa560408501611a27565b6040820152611ab660608501611a17565b60608201526080840135608082015260a084013560a082015260c084013560c0820152611ae560e08501611a17565b60e0820152505092915050565b60006101008284031215611b0557600080fd5b61184a8383611a3a565b600060208284031215611b2157600080fd5b813561184a8161192e565b610100810161180e828473ffffffffffffffffffffffffffffffffffffffff80825116835280602083015116602084015262ffffff60408301511660408401528060608301511660608401526080820151608084015260a082015160a084015260c082015160c08401528060e08301511660e0840152505050565b600060208284031215611bb957600080fd5b5051919050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112611bf557600080fd5b83018035915067ffffffffffffffff821115611c1057600080fd5b602001915036819003821315611c2557600080fd5b9250929050565b600067ffffffffffffffff821115611c4657611c46611970565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600060a08284031215611c8457600080fd5b611c8c61199f565b9050813567ffffffffffffffff811115611ca557600080fd5b8201601f81018413611cb657600080fd5b80356020611ccb611cc683611c2c565b6119c8565b8281528682848601011115611cdf57600080fd5b828285018383013760008184018301528452611cfc858201611a17565b8185015250505060408201356040820152606082013560608201526080820135608082015292915050565b600061180e3683611c72565b60005b83811015611d4e578181015183820152602001611d36565b83811115611d5d576000848401525b50505050565b60008151808452611d7b816020860160208601611d33565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6000815160a08452611dc260a0850182611d63565b905073ffffffffffffffffffffffffffffffffffffffff60208401511660208501526040830151604085015260608301516060850152608083015160808501528091505092915050565b60208152600061184a6020830184611dad565b600060208284031215611e3157600080fd5b61184a82611a27565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611ea157611ea1611e3a565b500290565b600082611edc577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600073ffffffffffffffffffffffffffffffffffffffff808616835280851660208401525060606040830152611f1a6060830184611d63565b95945050505050565b600060208284031215611f3557600080fd5b815167ffffffffffffffff811115611f4c57600080fd5b8201601f81018413611f5d57600080fd5b8051611f6b611cc682611c2c565b818152856020838501011115611f8057600080fd5b611f1a826020830160208601611d33565b60008219821115611fa457611fa4611e3a565b500190565b600082821015611fbb57611fbb611e3a565b50039056fea26469706673582212205e5422ac5bcae72b08548a48e40a231ab28c72dbc2d7f2b1b2c453222770f56564736f6c634300080a0033608060405234801561001057600080fd5b5061001a33610081565b73e592427a0aece92de3edee1f18e0157c0586156460005260016020527fbad1c9453febe4a6446e59e386c36af7924acc0d372d29859fea25e7a6eaac1780546001600160a01b03191673b27308f9f90d607463bb33ea1bebb41c27ce5ab61790556100d1565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b612604806100e06000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c80636f33547d11610081578063c67903ea1161005b578063c67903ea14610208578063d7aa2e3514610269578063f2fde38b1461029a57600080fd5b80636f33547d146101cf578063715018a6146101e25780638da5cb5b146101ea57600080fd5b806345330666116100b2578063453306661461017d5780634acc79ed1461019257806354fd4d50146101b957600080fd5b80631b162e56146100d95780631bf64c41146101025780632a10672614610122575b600080fd5b6100ec6100e7366004611e57565b6102ad565b6040516100f99190611f30565b60405180910390f35b61011561011036600461206e565b610427565b6040516100f99190612157565b6101586101303660046121c6565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100f9565b61019061018b3660046121ea565b610805565b005b6101a56101a036600461223b565b6108e2565b60405162ffffff90911681526020016100f9565b6101c1600281565b6040519081526020016100f9565b6101156101dd36600461206e565b61094a565b610190610f2e565b60005473ffffffffffffffffffffffffffffffffffffffff16610158565b610190610216366004612254565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001691909216179055565b6101c161027736600461228d565b600260209081526000938452604080852082529284528284209052825290205481565b6101906102a83660046121c6565b610fbb565b606060006102ba866108e2565b905060006102c7856108e2565b905060008960028111156102dd576102dd6122d8565b14806102fa575060018960028111156102f8576102f86122d8565b145b61038e576040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606086811b821660208401527fffffff000000000000000000000000000000000000000000000000000000000060e885811b821660348601528a831b8416603786015286901b16604b8401528a901b16604e82015260620160405160208183030381529060405261041a565b6040517fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b821660208401527fffffff000000000000000000000000000000000000000000000000000000000060e886811b821660348601528a831b8416603786015285901b16604b84015286901b16604e8201526062016040516020818303038152906040525b9998505050505050505050565b6104646040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b600283516002811115610479576104796122d8565b146104855760006104a7565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b8160200181815250506000600160008473ffffffffffffffffffffffffffffffffffffffff1663bd90df706040518163ffffffff1660e01b8152600401602060405180830381865afa158015610501573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105259190612307565b73ffffffffffffffffffffffffffffffffffffffff9081168252602082019290925260400160009081205490911691505b60038110156107fd5761059c6040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b6105a5866110eb565b156106c6578273ffffffffffffffffffffffffffffffffffffffff1663f7729d43876040015188606001516105d9866108e2565b60a08b01516040517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b16815273ffffffffffffffffffffffffffffffffffffffff948516600482015293909216602484015262ffffff16604483015260648201526000608482015260a4016020604051808303816000875af19250505080156106a2575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261069f91810190612324565b60015b6106ab576107de565b80156106c0576106bd87828886611184565b91505b506107de565b8273ffffffffffffffffffffffffffffffffffffffff166330d07f21876040015188606001516106f5866108e2565b60a08b01516040517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b16815273ffffffffffffffffffffffffffffffffffffffff948516600482015293909216602484015262ffffff16604483015260648201526000608482015260a4016020604051808303816000875af19250505080156107be575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526107bb91810190612324565b60015b6107c7576107de565b80156107dc576107d987828886611184565b91505b505b6107eb81878660006112a9565b156107f4578093505b50600101610556565b505092915050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461088b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff93841660009081526002602090815260408083209587168084528683528184209590971683529381528382208390559384528281209481529390925290912055565b60006003821061091e576040517f50c1fe4a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b811561093c578160011461093457611388610940565b610bb8610940565b6103e85b61ffff1692915050565b6109876040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1663bd90df706040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109fc9190612307565b73ffffffffffffffffffffffffffffffffffffffff908116825260208201929092526040016000908120546080870151519216925085516002811115610a4457610a446122d8565b1480610a625750600185516002811115610a6057610a606122d8565b145b610a8c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610a8f565b60005b602084015260005b81811015610f255760005b6003811015610f1c5760005b6003811015610f13576000610af089600001518a60400151858c608001518881518110610add57610add61233d565b6020026020010151868e606001516102ad565b9050600080610afe8b6110eb565b15610be15760a08b01516040517fcdca175300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a169163cdca175391610b5a91879160040161236c565b6020604051808303816000875af1925050508015610bb3575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610bb091810190612324565b60015b610bbc57610cbb565b8015801590610bce5750896020015181115b15610bdb57809250600191505b50610cbb565b60a08b01516040517f2f80bb1d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a1691632f80bb1d91610c3891879160040161236c565b6020604051808303816000875af1925050508015610c91575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610c8e91810190612324565b60015b610c9a57610cbb565b8015801590610cac5750896020015181105b15610cb957809250600191505b505b8015610f0557600160408a015260208901829052610cdb8b838c866112c7565b896000018190525060008a73ffffffffffffffffffffffffffffffffffffffff1663bd90df706040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d549190612307565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260026020526040812060808f0151805193945090928a908110610d9557610d9561233d565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008d6060015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008e6040015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008e608001518a81518110610eb157610eb161233d565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610efe91906123bd565b60608b0152505b505050806001019050610aae565b50600101610aa2565b50600101610a97565b50505092915050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610faf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610882565b610fb9600061159d565b565b60005473ffffffffffffffffffffffffffffffffffffffff16331461103c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610882565b73ffffffffffffffffffffffffffffffffffffffff81166110df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610882565b6110e88161159d565b50565b60008082516002811115611101576111016122d8565b148061111f575060018251600281111561111d5761111d6122d8565b145b1561112c57506001919050565b600282516002811115611141576111416122d8565b141561114f57506000919050565b81516040517ffe7995cf00000000000000000000000000000000000000000000000000000000815261088291906004016123d5565b6111c16040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b60016040820152602081018490526111db85858585611612565b816000018190525060008373ffffffffffffffffffffffffffffffffffffffff1663bd90df706040518163ffffffff1660e01b8152600401602060405180830381865afa158015611230573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112549190612307565b73ffffffffffffffffffffffffffffffffffffffff90811660009081526002602090815260408083208a82015185168452825280832060609a8b01519094168352929052205495820195909552949350505050565b60006112bc8585858660600151866119a4565b90505b949350505050565b6040805180820190915260008152606060208201526001855160028111156112f1576112f16122d8565b14156113f4576000604051806060016040528084815260200142610e1061131891906123bd565b81526020016113278888611ac7565b815250905060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff16815260200163f4f18d9060e01b8360405160240161136c9190612416565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152905291506112bf9050565b600085516002811115611409576114096122d8565b14156114ae5760006040518060a00160405280848152602001876020015173ffffffffffffffffffffffffffffffffffffffff16815260200142610e1061145091906123bd565b815260a088015160208201526040016114698888611b01565b815250905060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff16815260200163c04b8d5960e01b8360405160240161136c91906124b1565b6002855160028111156114c3576114c36122d8565b14156115685760006040518060a00160405280848152602001876020015173ffffffffffffffffffffffffffffffffffffffff16815260200142610e1061150a91906123bd565b815260a088015160208201526040016115238888611b01565b815250905060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff16815260200163f28c049860e01b8360405160240161136c91906124b1565b84516040517ffe7995cf00000000000000000000000000000000000000000000000000000000815261088291906004016123d5565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60408051808201909152600081526060602082015260018551600281111561163c5761163c6122d8565b141561175e5760006040518060c00160405280876040015173ffffffffffffffffffffffffffffffffffffffff168152602001876060015173ffffffffffffffffffffffffffffffffffffffff168152602001611698856108e2565b62ffffff1681526020016116ae42610e106123bd565b81526020016116bd8888611ac7565b8152600060209182015260408051808201825273ffffffffffffffffffffffffffffffffffffffff8881168252825185518216602482015285850151821660448201529285015162ffffff16606484015260608501516084840152608085015160a484015260a08501511660c4830152929350908201907fc7fbf4de000000000000000000000000000000000000000000000000000000009060e40161136c565b600085516002811115611773576117736122d8565b1415611881576000604051806101000160405280876040015173ffffffffffffffffffffffffffffffffffffffff168152602001876060015173ffffffffffffffffffffffffffffffffffffffff1681526020016117d0856108e2565b62ffffff16815260208881015173ffffffffffffffffffffffffffffffffffffffff169082015260400161180642610e106123bd565b815260a0880151602082015260400161181f8888611b01565b8152602001600073ffffffffffffffffffffffffffffffffffffffff16815250905060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff16815260200163414bf38960e01b8360405160240161136c91906124c4565b600285516002811115611896576118966122d8565b1415611568576000604051806101000160405280876040015173ffffffffffffffffffffffffffffffffffffffff168152602001876060015173ffffffffffffffffffffffffffffffffffffffff1681526020016118f3856108e2565b62ffffff16815260208881015173ffffffffffffffffffffffffffffffffffffffff169082015260400161192942610e106123bd565b815260a088015160208201526040016119428888611b01565b8152602001600073ffffffffffffffffffffffffffffffffffffffff16815250905060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff16815260200163db3e219860e01b8360405160240161136c91906124c4565b600085604001516119b757506000611abe565b83604001516119c857506001611abe565b6000611a258688602001516b033b2e3c9fd0803ce8000000868b606001516119f0919061253f565b6119fa919061257c565b60208901516b033b2e3c9fd0803ce8000000611a16898b61253f565b611a20919061257c565b611be8565b9050600086516002811115611a3c57611a3c6122d8565b1480611a5a5750600186516002811115611a5857611a586122d8565b145b15611a66579050611abe565b600286516002811115611a7b57611a7b6122d8565b1415611a8957159050611abe565b85516040517ffe7995cf00000000000000000000000000000000000000000000000000000000815261088291906004016123d5565b95945050505050565b60a0820151600090611aee84611ae9856b033b2e3c9fd0803ce800000061253f565b611b01565b611af8919061257c565b90505b92915050565b60008260e0015115611b1557506000611afb565b600083516002811115611b2a57611b2a6122d8565b1480611b485750600183516002811115611b4657611b466122d8565b145b15611b7b5760c083015161271090611b6090826125b7565b611b6a908461253f565b611b74919061257c565b9050611afb565b600283516002811115611b9057611b906122d8565b1415611bb35760c0830151611ba7906127106123bd565b611b6a6127108461253f565b82516040517ffe7995cf00000000000000000000000000000000000000000000000000000000815261088291906004016123d5565b6000611c286040518060400160405280600c81526020017f414141202d20616d6f756e740000000000000000000000000000000000000000815250611cd9565b611c3185611d68565b611c3a84611d68565b611c4383611d68565b611c4c82611d68565b611c5e611c5985876125b7565b611d68565b611c6b611c5983856125b7565b611c74866110eb565b611c9557611c8282846123bd565b611c8c85876123bd565b10159050611abe565b838510158015611ca55750818310155b15611cbe57611cb482846125b7565b611c8c85876125b7565b838510611ccc576001611ccf565b60005b9695505050505050565b6110e881604051602401611ced9190611f30565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f41304fac00000000000000000000000000000000000000000000000000000000179052611df5565b6110e881604051602401611d7e91815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff5b1bba9000000000000000000000000000000000000000000000000000000001790525b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b803560038110611e2557600080fd5b919050565b73ffffffffffffffffffffffffffffffffffffffff811681146110e857600080fd5b8035611e2581611e2a565b60008060008060008060c08789031215611e7057600080fd5b611e7987611e16565b95506020870135611e8981611e2a565b9450604087013593506060870135611ea081611e2a565b92506080870135915060a0870135611eb781611e2a565b809150509295509295509295565b6000815180845260005b81811015611eeb57602081850181015186830182015201611ecf565b81811115611efd576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611af86020830184611ec5565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610100810167ffffffffffffffff81118282101715611f9657611f96611f43565b60405290565b600082601f830112611fad57600080fd5b8135602067ffffffffffffffff80831115611fca57611fca611f43565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f8301168101818110848211171561200d5761200d611f43565b60405293845285810183019383810192508785111561202b57600080fd5b83870191505b8482101561205357813561204481611e2a565b83529183019190830190612031565b979650505050505050565b80358015158114611e2557600080fd5b6000806040838503121561208157600080fd5b823567ffffffffffffffff8082111561209957600080fd5b9084019061010082870312156120ae57600080fd5b6120b6611f72565b6120bf83611e16565b81526120cd60208401611e4c565b60208201526120de60408401611e4c565b60408201526120ef60608401611e4c565b606082015260808301358281111561210657600080fd5b61211288828601611f9c565b60808301525060a083013560a082015260c083013560c082015261213860e0840161205e565b60e0820152935061214e91505060208401611e4c565b90509250929050565b60208082528251608083830152805173ffffffffffffffffffffffffffffffffffffffff1660a08401520151604060c083015260009061219a60e0840182611ec5565b905060208401516040840152604084015115156060840152606084015160808401528091505092915050565b6000602082840312156121d857600080fd5b81356121e381611e2a565b9392505050565b6000806000806080858703121561220057600080fd5b843561220b81611e2a565b9350602085013561221b81611e2a565b9250604085013561222b81611e2a565b9396929550929360600135925050565b60006020828403121561224d57600080fd5b5035919050565b6000806040838503121561226757600080fd5b823561227281611e2a565b9150602083013561228281611e2a565b809150509250929050565b6000806000606084860312156122a257600080fd5b83356122ad81611e2a565b925060208401356122bd81611e2a565b915060408401356122cd81611e2a565b809150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60006020828403121561231957600080fd5b81516121e381611e2a565b60006020828403121561233657600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60408152600061237f6040830185611ec5565b90508260208301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156123d0576123d061238e565b500190565b6020810160038310612410577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6020815260008251606060208401526124326080840182611ec5565b905060208401516040840152604084015160608401528091505092915050565b6000815160a0845261246760a0850182611ec5565b905073ffffffffffffffffffffffffffffffffffffffff60208401511660208501526040830151604085015260608301516060850152608083015160808501528091505092915050565b602081526000611af86020830184612452565b6101008101611afb828473ffffffffffffffffffffffffffffffffffffffff80825116835280602083015116602084015262ffffff60408301511660408401528060608301511660608401526080820151608084015260a082015160a084015260c082015160c08401528060e08301511660e0840152505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156125775761257761238e565b500290565b6000826125b2577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000828210156125c9576125c961238e565b50039056fea2646970667358221220f48bf290d42d727585d0174d5aecb1c111d9a28593d6c27486ce6672041893ce64736f6c634300080a0033a2646970667358221220cefb1fb69000e0a21c381827a9bf510c232b8b23e35bda5be1a3d89c2435cfab64736f6c634300080a0033"; - -type NormalTokenPathFinderTestConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: NormalTokenPathFinderTestConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class NormalTokenPathFinderTest__factory extends ContractFactory { - constructor(...args: NormalTokenPathFinderTestConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): NormalTokenPathFinderTest { - return super.attach(address) as NormalTokenPathFinderTest; - } - override connect(signer: Signer): NormalTokenPathFinderTest__factory { - return super.connect(signer) as NormalTokenPathFinderTest__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): NormalTokenPathFinderTestInterface { - return new utils.Interface(_abi) as NormalTokenPathFinderTestInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): NormalTokenPathFinderTest { - return new Contract( - address, - _abi, - signerOrProvider - ) as NormalTokenPathFinderTest; - } -} diff --git a/src/types/factories/contracts/test/pathfinder/NormalTokenPathFinder.t.sol/index.ts b/src/types/factories/contracts/test/pathfinder/NormalTokenPathFinder.t.sol/index.ts deleted file mode 100644 index 1549bd2b..00000000 --- a/src/types/factories/contracts/test/pathfinder/NormalTokenPathFinder.t.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { NormalTokenPathFinderTest__factory } from "./NormalTokenPathFinderTest__factory"; diff --git a/src/types/factories/contracts/test/pathfinder/PathFinderTestHelper__factory.ts b/src/types/factories/contracts/test/pathfinder/PathFinderTestHelper__factory.ts deleted file mode 100644 index 30cb1fd5..00000000 --- a/src/types/factories/contracts/test/pathfinder/PathFinderTestHelper__factory.ts +++ /dev/null @@ -1,652 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - PathFinderTestHelper, - PathFinderTestHelperInterface, -} from "../../../../contracts/test/pathfinder/PathFinderTestHelper"; - -const _abi = [ - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "", - type: "address", - }, - ], - name: "log_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "log_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - name: "log_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "int256", - name: "", - type: "int256", - }, - ], - name: "log_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "address", - name: "val", - type: "address", - }, - ], - name: "log_named_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes", - name: "val", - type: "bytes", - }, - ], - name: "log_named_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes32", - name: "val", - type: "bytes32", - }, - ], - name: "log_named_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - ], - name: "log_named_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "string", - name: "val", - type: "string", - }, - ], - name: "log_named_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - ], - name: "log_named_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "log_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "logs", - type: "event", - }, - { - inputs: [], - name: "IS_TEST", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bool", - name: "withUnderlyings", - type: "bool", - }, - ], - name: "_setUpCurve", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "cft", - outputs: [ - { - internalType: "contract CreditFacadeTestSuite", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditConfigurator", - outputs: [ - { - internalType: "contract CreditConfigurator", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditFacade", - outputs: [ - { - internalType: "contract CreditFacade", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditManager", - outputs: [ - { - internalType: "contract ICreditManagerV2", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "curveAdapter", - outputs: [ - { - internalType: "contract ICurveV1Adapter", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "curveLPPathFinder", - outputs: [ - { - internalType: "contract CurveLPPathFinder", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "curveMetaAdapter", - outputs: [ - { - internalType: "contract ICurveV1Adapter", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "curvePathFinder", - outputs: [ - { - internalType: "contract CurvePathFinder", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "curveV1MetaMock", - outputs: [ - { - internalType: "contract CurveV1MetapoolMock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "curveV1Mock", - outputs: [ - { - internalType: "contract CurveV1Mock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "failed", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "tokenMasksMap", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "underlying", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "uniV2adapter", - outputs: [ - { - internalType: "contract IUniswapV2Adapter", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "uniV2mock", - outputs: [ - { - internalType: "contract UniswapV2Mock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "uniV2pathFinder", - outputs: [ - { - internalType: "contract UniswapV2PathFinder", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "uniV3adapter", - outputs: [ - { - internalType: "contract IUniswapV3Adapter", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "uniV3mock", - outputs: [ - { - internalType: "contract UniswapV3Mock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "uniV3pathFinder", - outputs: [ - { - internalType: "contract UniswapV3PathFinder", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "yearnAdapter", - outputs: [ - { - internalType: "contract YearnV2Adapter", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "yearnMock", - outputs: [ - { - internalType: "contract YearnV2Mock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "yearnPathFinder", - outputs: [ - { - internalType: "contract YearnPathFinder", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x60806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d000117905534801561003957600080fd5b50620161a0806200004b6000396000f3fe60806040523480156200001157600080fd5b5060043610620001b95760003560e01c8063ba414fa611620000f5578063eeef8dd01162000097578063f9aa028a116200006e578063f9aa028a1462000494578063fa7626d414620004b5578063fca2cea514620004c357600080fd5b8063eeef8dd0146200042c578063f310c6da146200044d578063f67c5bd0146200046e57600080fd5b8063ceab138611620000cc578063ceab138614620003c9578063d8d7ca3c14620003ea578063df514433146200040b57600080fd5b8063ba414fa6146200036c578063c12c21c01462000387578063cac283c814620003a857600080fd5b80634b7b24a5116200015f5780636f307dc311620001365780636f307dc314620003095780639b6a80a7146200032a5780639f8ad9ec146200034b57600080fd5b80634b7b24a514620002a65780635a521cf814620002c75780635ebb236114620002e857600080fd5b806329d351d8116200019457806329d351d8146200024b5780632b9d0d28146200026c5780632f7a1881146200028557600080fd5b80631497761e14620001be5780631c9a755f1462000209578063287b94d7146200022a575b600080fd5b600754620001df9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b601254620001df9073ffffffffffffffffffffffffffffffffffffffff1681565b600b54620001df9073ffffffffffffffffffffffffffffffffffffffff1681565b600854620001df9073ffffffffffffffffffffffffffffffffffffffff1681565b620002836200027d36600462001ab9565b620004e4565b005b600254620001df9073ffffffffffffffffffffffffffffffffffffffff1681565b600a54620001df9073ffffffffffffffffffffffffffffffffffffffff1681565b600e54620001df9073ffffffffffffffffffffffffffffffffffffffff1681565b600c54620001df9073ffffffffffffffffffffffffffffffffffffffff1681565b600554620001df9073ffffffffffffffffffffffffffffffffffffffff1681565b601354620001df9073ffffffffffffffffffffffffffffffffffffffff1681565b600d54620001df9073ffffffffffffffffffffffffffffffffffffffff1681565b62000376620016b3565b604051901515815260200162000200565b600154620001df9073ffffffffffffffffffffffffffffffffffffffff1681565b601454620001df9073ffffffffffffffffffffffffffffffffffffffff1681565b601154620001df9073ffffffffffffffffffffffffffffffffffffffff1681565b600954620001df9073ffffffffffffffffffffffffffffffffffffffff1681565b600454620001df9073ffffffffffffffffffffffffffffffffffffffff1681565b600f54620001df9073ffffffffffffffffffffffffffffffffffffffff1681565b601554620001df9073ffffffffffffffffffffffffffffffffffffffff1681565b620004856200047f36600462001b03565b50600190565b60405190815260200162000200565b600354620001df9073ffffffffffffffffffffffffffffffffffffffff1681565b600054620003769060ff1681565b601054620001df9073ffffffffffffffffffffffffffffffffffffffff1681565b620004ee6200181d565b60085473ffffffffffffffffffffffffffffffffffffffff16620016b0576006546040517f67b42645000000000000000000000000000000000000000000000000000000008152600091620006f19173ffffffffffffffffffffffffffffffffffffffff909116906367b42645906200056d9060079060040162001b23565b602060405180830381865afa1580156200058b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005b1919062001b65565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906367b42645906200060a9060089060040162001b23565b602060405180830381865afa15801562000628573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200064e919062001b65565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906367b4264590620006a79060099060040162001b23565b602060405180830381865afa158015620006c5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006eb919062001b65565b62001948565b6006546040517f67b426450000000000000000000000000000000000000000000000000000000081529192506000916200088d9173ffffffffffffffffffffffffffffffffffffffff16906367b4264590620007539060019060040162001b23565b602060405180830381865afa15801562000771573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000797919062001b65565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906367b4264590620007f09060029060040162001b23565b602060405180830381865afa1580156200080e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000834919062001b65565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906367b4264590620006a79060059060040162001b23565b60035490915073ffffffffffffffffffffffffffffffffffffffff16151580620008b5575082155b15620008c057905060605b8181604051620008d09062001a64565b620008dd92919062001bd8565b604051809103906000f080158015620008fa573d6000803e3d6000fd5b50600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169182179055604080517ffc0c546a00000000000000000000000000000000000000000000000000000000815290516000929163fc0c546a9160048083019260209291908290030181865afa15801562000997573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620009bd919062001b65565b6000546040517fc657c71800000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff62010000909104169063c657c7189062000a6d90849060040173ffffffffffffffffffffffffffffffffffffffff9190911681526040602082018190526004908201527f3343525600000000000000000000000000000000000000000000000000000000606082015260800190565b600060405180830381600087803b15801562000a8857600080fd5b505af115801562000a9d573d6000803e3d6000fd5b505060035473ffffffffffffffffffffffffffffffffffffffff16159150620012b19050576000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000b32573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b58919062001b65565b60085460048054604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9485169490921692632630c12f9282820192602092908290030181865afa15801562000bcd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000bf3919062001b65565b73ffffffffffffffffffffffffffffffffffffffff16639dcb511a8760008151811062000c245762000c2462001c0a565b60200260200101516040518263ffffffff1660e01b815260040162000c65919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa15801562000c83573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ca9919062001b65565b60048054604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff90921692632630c12f9282820192602092908290030181865afa15801562000d17573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000d3d919062001b65565b73ffffffffffffffffffffffffffffffffffffffff16639dcb511a8860018151811062000d6e5762000d6e62001c0a565b60200260200101516040518263ffffffff1660e01b815260040162000daf919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa15801562000dcd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000df3919062001b65565b60048054604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff90921692632630c12f9282820192602092908290030181865afa15801562000e61573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e87919062001b65565b73ffffffffffffffffffffffffffffffffffffffff16639dcb511a8960028151811062000eb85762000eb862001c0a565b60200260200101516040518263ffffffff1660e01b815260040162000ef9919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa15801562000f17573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000f3d919062001b65565b60405162000f4b9062001a72565b73ffffffffffffffffffffffffffffffffffffffff95861681529385166020850152918416604084015283166060830152909116608082015260c060a082018190526011908201527f43757276654c503350726963654665656400000000000000000000000000000060e082015261010001604051809103906000f08015801562000fda573d6000803e3d6000fd5b506000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291925062010000900473ffffffffffffffffffffffffffffffffffffffff16906306447d5690602401600060405180830381600087803b1580156200106257600080fd5b505af115801562001077573d6000803e3d6000fd5b505060048054604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9092169450632630c12f935080830192602092918290030181865afa158015620010e9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200110f919062001b65565b6040517fe8a97a3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301528381166024830152919091169063e8a97a3e90604401600060405180830381600087803b1580156200118357600080fd5b505af115801562001198573d6000803e3d6000fd5b50506003546040517f3e7c88d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152611e7860248301529091169250633e7c88d69150604401600060405180830381600087803b1580156200121257600080fd5b505af115801562001227573d6000803e3d6000fd5b50505050600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200129657600080fd5b505af1158015620012ab573d6000803e3d6000fd5b50505050505b60015460085460405173ffffffffffffffffffffffffffffffffffffffff92831692909116908390600090620012e79062001a80565b73ffffffffffffffffffffffffffffffffffffffff9485168152928416602084015290831660408301529091166060820152608001604051809103906000f08015801562001339573d6000803e3d6000fd5b50600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169190911790556040516200138d9062001a8e565b604051809103906000f080158015620013aa573d6000803e3d6000fd5b50600b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283169081179091556008546040517fd914cd4b000000000000000000000000000000000000000000000000000000008152921660048301529063d914cd4b90602401600060405180830381600087803b1580156200144457600080fd5b505af115801562001459573d6000803e3d6000fd5b5050600054600754604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152600d60448201527f43555256455f414441505445520000000000000000000000000000000000000060648201526201000090920416925063c657c7189150608401600060405180830381600087803b1580156200150957600080fd5b505af11580156200151e573d6000803e3d6000fd5b5050600054600854604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152600a60448201527f43555256455f4d4f434b0000000000000000000000000000000000000000000060648201526201000090920416925063c657c7189150608401600060405180830381600087803b158015620015ce57600080fd5b505af1158015620015e3573d6000803e3d6000fd5b5050600054600b54604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152601060448201527f43555256455f5041544846494e4445520000000000000000000000000000000060648201526201000090920416925063c657c7189150608401600060405180830381600087803b1580156200169357600080fd5b505af1158015620016a8573d6000803e3d6000fd5b505050505050505b50565b60008054610100900460ff1615620016d45750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620018185760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c65640000000000000000000000000000000000000000000000000000828401528251808303840181526060830190935260009290916200177c917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc49160800162001c77565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052620017b69162001cb5565b6000604051808303816000865af19150503d8060008114620017f5576040519150601f19603f3d011682016040523d82523d6000602084013e620017fa565b606091505b509150508080602001905181019062001814919062001cc3565b9150505b919050565b60065473ffffffffffffffffffffffffffffffffffffffff166200194657604051620018499062001a9c565b604051809103906000f08015801562001866573d6000803e3d6000fd5b50600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216918217905563b36ba208620018c5670de0b6b3a7640000606462001ce3565b6040518263ffffffff1660e01b81526004016000604051808303818588803b158015620018f157600080fd5b505af115801562001906573d6000803e3d6000fd5b505060028054307fffffffffffffffffffffffff000000000000000000000000000000000000000091821681179092556001805490911690911790555050505b565b60408051600380825260808201909252606091602082018380368337019050509050838160008151811062001981576200198162001c0a565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508281600181518110620019d257620019d262001c0a565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050818160028151811062001a235762001a2362001c0a565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250509392505050565b6139608062001d4983390190565b61185280620056a983390190565b615f8c8062006efb83390190565b611893806200ce8783390190565b617a51806200e71a83390190565b8015158114620016b057600080fd5b60006020828403121562001acc57600080fd5b813562001ad98162001aaa565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff81168114620016b057600080fd5b60006020828403121562001b1657600080fd5b813562001ad98162001ae0565b60208101600b831062001b5f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121562001b7857600080fd5b815162001ad98162001ae0565b600081518084526020808501945080840160005b8381101562001bcd57815173ffffffffffffffffffffffffffffffffffffffff168752958201959082019060010162001b99565b509495945050505050565b60408152600062001bed604083018562001b85565b828103602084015262001c01818562001b85565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815160005b8181101562001c5c576020818501810151868301520162001c40565b8181111562001c6c576000828601525b509290920192915050565b7fffffffff0000000000000000000000000000000000000000000000000000000083168152600062001cad600483018462001c39565b949350505050565b600062001ad9828462001c39565b60006020828403121562001cd657600080fd5b815162001ad98162001aaa565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562001d43577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b50029056fe60806040523480156200001157600080fd5b5060405162003960380380620039608339810160408190526200003491620002a2565b8151829082906200004d90600290602085019062000133565b5080516200006390600390602084019062000133565b506000601260405162000076906200019d565b6060808252600790820152664352564d6f636b60c81b608082015260a0602082018190526015908201527f43525620666f72204375727665506f6f6c4d6f636b000000000000000000000060c082015260ff909116604082015260e001604051809103906000f080158015620000f0573d6000803e3d6000fd5b50600080546001600160a01b039092166001600160a01b03199283168117909155600180549092161790555050670de0b6b3a7640000600755506200030c915050565b8280548282559060005260206000209081019282156200018b579160200282015b828111156200018b57825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019062000154565b5062000199929150620001ab565b5090565b611758806200220883390190565b5b80821115620001995760008155600101620001ac565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b0381168114620001f057600080fd5b919050565b600082601f8301126200020757600080fd5b815160206001600160401b0380831115620002265762000226620001c2565b8260051b604051601f19603f830116810181811084821117156200024e576200024e620001c2565b6040529384528581018301938381019250878511156200026d57600080fd5b83870191505b8482101562000297576200028782620001d8565b8352918301919083019062000273565b979650505050505050565b60008060408385031215620002b657600080fd5b82516001600160401b0380821115620002ce57600080fd5b620002dc86838701620001f5565b93506020850151915080821115620002f357600080fd5b506200030285828601620001f5565b9150509250929050565b611eec806200031c6000396000f3fe608060405234801561001057600080fd5b506004361061030a5760003560e01c806382c630661161019c578063bb7b8b80116100ee578063e2e7d26411610097578063f851a44011610071578063f851a44014610597578063fc0c546a1461059e578063fee3f7f91461036257600080fd5b8063e2e7d26414610576578063ecb586a514610584578063f446c1d01461036257600080fd5b8063d96c7fce116100c8578063d96c7fce14610369578063dd62ed3e14610568578063ddca3f431461036257600080fd5b8063bb7b8b801461053a578063c661065714610542578063cc2b27d71461055557600080fd5b80639fdaea0c11610150578063b739953e1161012a578063b739953e14610501578063b91434d114610514578063b9947eb01461052757600080fd5b80639fdaea0c146104db578063a6417ed6146104ee578063b4b577ad1461036257600080fd5b80638ea875f3116101815780638ea875f3146104bf57806395d89b411461033557806399bd2ba5146104c857600080fd5b806382c630661461048c57806385ca3c6f146104ac57600080fd5b80633df02124116102605780635e0d443f1161020957806371035418116101e3578063710354181461045457806376a2f0f0146103625780637b475b681461046757600080fd5b80635e0d443f1461042d57806363543f061461036257806370a082311461044057600080fd5b80634903b0d11161023a5780634903b0d1146104075780635409491a1461036257806356ac35031461041a57600080fd5b80633df02124146103e15780634469e30e146103695780634515cef3146103f457600080fd5b806318160ddd116102c257806323746eb81161029c57806323746eb814610393578063313ce567146103625780633883e119146103cb57600080fd5b806318160ddd146103625780631a4d01d21461037e5780632081066c1461036257600080fd5b806307211ef7116102f357806307211ef71461034f578063140522881461036257806314f059791461036957600080fd5b8063065a80d81461030f57806306fdde0314610335575b600080fd5b61032261031d36600461192d565b6105be565b6040519081526020015b60405180910390f35b6040805160208101825260008152905161032c9190611974565b61032261035d3660046119c5565b610677565b6000610322565b6103716106c7565b60405161032c9190611a01565b61039161038c366004611a32565b6106f2565b005b6103a66103a136600461192d565b6107e6565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161032c565b6103226103d9366004611a79565b600092915050565b6103916103ef366004611ab1565b610826565b610391610402366004611b88565b610950565b610322610415366004611bb3565b610b1c565b6103916104283660046119c5565b610b31565b61032261043b3660046119c5565b610b92565b61032261044e366004611bf0565b50600090565b610391610462366004611bb3565b600755565b610391610475366004611c0b565b600f9190910b600090815260066020526040902055565b6001546103a69073ffffffffffffffffffffffffffffffffffffffff1681565b6103716104ba366004611c35565b610bce565b61032260075481565b6103916104d6366004611c73565b610c04565b6103916104e9366004611c8f565b610c63565b6103916104fc366004611ab1565b610de6565b6103a661050f36600461192d565b6111a6565b6103916105223660046119c5565b6111be565b6103a6610535366004611bb3565b61121f565b600754610322565b6103a6610550366004611bb3565b611234565b610322610563366004611cac565b611249565b6103226103d9366004611cd8565b61032261044e366004611bb3565b610391610592366004611d02565b61127f565b60006103a6565b6000546103a69073ffffffffffffffffffffffffffffffffffffffff1681565b6000600282600f0b815481106105d6576105d6611d26565b6000918252602090912001546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa15801561064d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106719190611d55565b92915050565b600f83810b60009081526005602090815260408083209386900b8352929052908120546b033b2e3c9fd0803ce8000000906106b3908490611d9d565b6106bd9190611dda565b90505b9392505050565b6106cf6118f8565b604051806060016040528060008152602001600081526020016000815250905090565b6000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810185905273ffffffffffffffffffffffffffffffffffffffff909116906379cc6790906044016020604051808303816000875af1158015610769573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078d9190611e15565b506107e133826002856fffffffffffffffffffffffffffffffff16815481106107b8576107b8611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169190611402565b505050565b6000600282600f0b815481106107fe576107fe611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1692915050565b6000610833858585610b92565b9050818110156108ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f437572766556314d6f636b3a20494e53554646494349454e545f4f555450555460448201527f5f414d4f554e540000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61091f3330856002896fffffffffffffffffffffffffffffffff16815481106108f5576108f5611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169291906114d6565b61094933826002876fffffffffffffffffffffffffffffffff16815481106107b8576107b8611d26565b5050505050565b60005b6003811015610a7f57600083826003811061097057610970611d26565b60200201511115610a6d576002818154811061098e5761098e611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff166323b872dd33308685600381106109c9576109c9611d26565b60200201516040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff938416600482015292909116602483015260448201526064016020604051808303816000875af1158015610a47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6b9190611e15565b505b80610a7781611e32565b915050610953565b506000546040517f40c10f190000000000000000000000000000000000000000000000000000000081523360048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f19906044015b6020604051808303816000875af1158015610af8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e19190611e15565b6000600282815481106105d6576105d6611d26565b600f83810b60009081526005602090815260408083209386900b835292905220819055610b6a6b033b2e3c9fd0803ce80000008261153a565b600f92830b60009081526005602090815260408083209690950b825294909452919092205550565b600f83810b60009081526004602090815260408083209386900b8352929052908120546b033b2e3c9fd0803ce8000000906106b3908490611d9d565b610bd66118f8565b6040805160608181019092529085906003908390839080828437600092019190915250919695505050505050565b6000546040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052909116906340c10f1990604401610ad9565b60005b6003811015610d88576000838260038110610c8357610c83611d26565b60200201351115610d765760028181548110610ca157610ca1611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33858460038110610cdb57610cdb611d26565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff9093166004840152602002013560248201526044016020604051808303816000875af1158015610d50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d749190611e15565b505b80610d8081611e32565b915050610c66565b506000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906379cc679090604401610ad9565b60006002856fffffffffffffffffffffffffffffffff1681548110610e0d57610e0d611d26565b60009182526020822001546003805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff8816908110610e5957610e59611d26565b60009182526020822001546002805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff8816908110610ea557610ea5611d26565b60009182526020822001546003805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff8916908110610ef157610ef1611d26565b600091825260208220015473ffffffffffffffffffffffffffffffffffffffff169150610f1f898989610677565b905085811015610fb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f437572766556314d6f636b3a20494e53554646494349454e545f4f555450555460448201527f5f414d4f554e540000000000000000000000000000000000000000000000000060648201526084016108c1565b610fd373ffffffffffffffffffffffffffffffffffffffff851633308a6114d6565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526024820189905285169063095ea7b3906044016020604051808303816000875af1158015611048573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061106c9190611e15565b506040517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8616906340c10f1990604401600060405180830381600087803b1580156110db57600080fd5b505af11580156110ef573d6000803e3d6000fd5b50506040517f1e9a69500000000000000000000000000000000000000000000000000000000081523060048201526024810184905273ffffffffffffffffffffffffffffffffffffffff86169250631e9a69509150604401600060405180830381600087803b15801561116157600080fd5b505af1158015611175573d6000803e3d6000fd5b5061119b9250505073ffffffffffffffffffffffffffffffffffffffff83163383611402565b505050505050505050565b6000600382600f0b815481106107fe576107fe611d26565b600f83810b60009081526004602090815260408083209386900b8352929052208190556111f76b033b2e3c9fd0803ce80000008261153a565b600f92830b60009081526004602090815260408083209690950b825294909452919092205550565b6000600382815481106107fe576107fe611d26565b6000600282815481106107fe576107fe611d26565b600f81900b6000908152600660205260408120546b033b2e3c9fd0803ce8000000906112759085611d9d565b6106c09190611dda565b60005b60038110156113a457600082826003811061129f5761129f611d26565b6020020151111561139257600281815481106112bd576112bd611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb338484600381106112f7576112f7611d26565b60200201516040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af115801561136c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113909190611e15565b505b8061139c81611e32565b915050611282565b506000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810184905273ffffffffffffffffffffffffffffffffffffffff909116906379cc679090604401610ad9565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526107e19084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526116a0565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526115349085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611454565b50505050565b60408051808201909152600281527f4d330000000000000000000000000000000000000000000000000000000000006020820152600090826115a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c19190611974565b5060006115b7600284611dda565b90506b033b2e3c9fd0803ce80000006115f0827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611e6b565b6115fa9190611dda565b8411156040518060400160405280600281526020017f4d310000000000000000000000000000000000000000000000000000000000008152509061166b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c19190611974565b5082816116846b033b2e3c9fd0803ce800000087611d9d565b61168e9190611e82565b6116989190611dda565b949350505050565b6000611702826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166117ac9092919063ffffffff16565b8051909150156107e157808060200190518101906117209190611e15565b6107e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016108c1565b60606106bd848460008585843b61181f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108c1565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516118489190611e9a565b60006040518083038185875af1925050503d8060008114611885576040519150601f19603f3d011682016040523d82523d6000602084013e61188a565b606091505b509150915061189a8282866118a5565b979650505050505050565b606083156118b45750816106c0565b8251156118c45782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c19190611974565b60405180606001604052806003906020820280368337509192915050565b8035600f81900b811461192857600080fd5b919050565b60006020828403121561193f57600080fd5b6106c082611916565b60005b8381101561196357818101518382015260200161194b565b838111156115345750506000910152565b6020815260008251806020840152611993816040850160208701611948565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000606084860312156119da57600080fd5b6119e384611916565b92506119f160208501611916565b9150604084013590509250925092565b60608101818360005b6003811015611a29578151835260209283019290910190600101611a0a565b50505092915050565b600080600060608486031215611a4757600080fd5b833592506119f160208501611916565b806060810183101561067157600080fd5b8015158114611a7657600080fd5b50565b60008060808385031215611a8c57600080fd5b611a968484611a57565b91506060830135611aa681611a68565b809150509250929050565b60008060008060808587031215611ac757600080fd5b611ad085611916565b9350611ade60208601611916565b93969395505050506040820135916060013590565b600082601f830112611b0457600080fd5b6040516060810181811067ffffffffffffffff82111715611b4e577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604052806060840185811115611b6357600080fd5b845b81811015611b7d578035835260209283019201611b65565b509195945050505050565b60008060808385031215611b9b57600080fd5b611ba58484611af3565b946060939093013593505050565b600060208284031215611bc557600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461192857600080fd5b600060208284031215611c0257600080fd5b6106c082611bcc565b60008060408385031215611c1e57600080fd5b611c2783611916565b946020939093013593505050565b600080600060e08486031215611c4a57600080fd5b611c548585611a57565b9250611c638560608601611a57565b915060c084013590509250925092565b60008060408385031215611c8657600080fd5b611c2783611bcc565b60008060808385031215611ca257600080fd5b611ba58484611a57565b60008060408385031215611cbf57600080fd5b82359150611ccf60208401611916565b90509250929050565b60008060408385031215611ceb57600080fd5b611cf483611bcc565b9150611ccf60208401611bcc565b60008060808385031215611d1557600080fd5b82359150611ccf8460208501611af3565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215611d6757600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611dd557611dd5611d6e565b500290565b600082611e10577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600060208284031215611e2757600080fd5b81516106c081611a68565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611e6457611e64611d6e565b5060010190565b600082821015611e7d57611e7d611d6e565b500390565b60008219821115611e9557611e95611d6e565b500190565b60008251611eac818460208701611948565b919091019291505056fea2646970667358221220a76213374b33de2cb1c5d61e9c1133f6d8163c7b90c32a6142a6f4fd98fe430364736f6c634300080a003360a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a00336101606040523480156200001257600080fd5b5060405162001852380380620018528339810160408190526200003591620003a3565b6000805460ff191690558585828260c882826001600160a01b0381166200006f57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000ae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d49190620004de565b6001600160a01b0316608052508051620000f6906002906020840190620002ca565b505060a052506001600160a01b0382166200012457604051635919af9760e11b815260040160405180910390fd5b6001600160a01b03821660c0819052670de0b6b3a764000060e05260408051630176f71760e71b815290516000929163bb7b8b809160048083019260209291908290030181865afa1580156200017e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001a4919062000503565b9050620001b1816200022a565b505050506001600160a01b0384161580620001d357506001600160a01b038316155b80620001e657506001600160a01b038216155b156200020557604051635919af9760e11b815260040160405180910390fd5b506001600160a01b039283166101005290821661012052166101405250620005d09050565b8062000249576040516309aadd6f60e41b815260040160405180910390fd5b60018190557f82e7ee47180a631312683eeb2a85ad264c9af490d54de5a75bbdb95b968c6de2816200027b8162000296565b6040805192835260208301919091520160405180910390a150565b60a05160009061271090620002ac908262000533565b620002b890846200054e565b620002c4919062000570565b92915050565b828054620002d89062000593565b90600052602060002090601f016020900481019282620002fc576000855562000347565b82601f106200031757805160ff191683800117855562000347565b8280016001018555821562000347579182015b82811115620003475782518255916020019190600101906200032a565b506200035592915062000359565b5090565b5b808211156200035557600081556001016200035a565b80516001600160a01b03811681146200038857600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60008060008060008060c08789031215620003bd57600080fd5b620003c88762000370565b95506020620003d981890162000370565b9550620003e96040890162000370565b9450620003f96060890162000370565b9350620004096080890162000370565b60a08901519093506001600160401b03808211156200042757600080fd5b818a0191508a601f8301126200043c57600080fd5b8151818111156200045157620004516200038d565b604051601f8201601f19908116603f011681019083821181831017156200047c576200047c6200038d565b816040528281528d868487010111156200049557600080fd5b600093505b82841015620004b957848401860151818501870152928501926200049a565b82841115620004cb5760008684830101525b8096505050505050509295509295509295565b600060208284031215620004f157600080fd5b620004fc8262000370565b9392505050565b6000602082840312156200051657600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156200054957620005496200051d565b500190565b60008160001904831182151516156200056b576200056b6200051d565b500290565b6000826200058e57634e487b7160e01b600052601260045260246000fd5b500490565b600181811c90821680620005a857607f821691505b60208210811415620005ca57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c05160e0516101005161012051610140516111e86200066a6000396000818161023501526108c8015260008181610383015261080901526000818161033901526107620152600081816103120152610a250152600081816101b001526109890152600081816101760152610c170152600081816102eb015281816103db01528181610557015261068f01526111e86000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c80639a6fc8f5116100cd578063b09ad8a011610081578063d62ada1111610066578063d62ada1114610376578063e5693f411461037e578063feaf968c146103a557600080fd5b8063b09ad8a01461035b578063bc489a651461036357600080fd5b8063a50cf2c8116100b2578063a50cf2c8146102e6578063a834559e1461030d578063ab0ca0e11461033457600080fd5b80639a6fc8f514610293578063a384d6ff146102dd57600080fd5b8063427cb6fe116101245780635c975abb116101095780635c975abb1461025f5780637284e416146102765780638456cb591461028b57600080fd5b8063427cb6fe1461023057806354fd4d501461025757600080fd5b8063313ce56711610155578063313ce567146101f75780633f4ba83a146102115780633fd0875f1461021b57600080fd5b806312b495a814610171578063218751b2146101ab575b600080fd5b6101987f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101a2565b6101ff600881565b60405160ff90911681526020016101a2565b6102196103ad565b005b610223600381565b6040516101a29190610dd7565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b610198600181565b60005460ff165b60405190151581526020016101a2565b61027e61049b565b6040516101a29190610e18565b610219610529565b6102a66102a1366004610ea3565b610615565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a0016101a2565b61019860015481565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b6101987f000000000000000000000000000000000000000000000000000000000000000081565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b61019861064f565b610219610371366004610ec7565b610661565b610266600181565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b6102a6610751565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa158015610437573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061045b9190610ee0565b610491576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610499610a67565b565b600280546104a890610f02565b80601f01602080910402602001604051908101604052809291908181526020018280546104d490610f02565b80156105215780601f106104f657610100808354040283529160200191610521565b820191906000526020600020905b81548152906001019060200180831161050457829003601f168201915b505050505081565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa1580156105b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105d79190610ee0565b61060d576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610499610b4d565b60008060008060006040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061065c600154610c0d565b905090565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156106eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070f9190610ee0565b610745576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61074e81610c56565b50565b6000806000806000806000806000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156107cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ef9190610f56565b939d50919b509950975095506108078a8a8989610cd8565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610872573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108969190610f56565b9398509196509450925090506108ae85858484610cd8565b888412156108c6578499508398508297508196508095505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610931573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109559190610f56565b93985091965094509250905061096d85858484610cd8565b88841215610985578499508398508297508196508095505b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb7b8b806040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a169190610fae565b9050610a2181610d73565b90507f0000000000000000000000000000000000000000000000000000000000000000610a4e828c610ff6565b610a5891906110e1565b99505050505050509091929394565b60005460ff16610ad8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff1615610bba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610acf565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b233390565b6000612710610c3c7f000000000000000000000000000000000000000000000000000000000000000082611149565b610c469084611161565b610c50919061119e565b92915050565b80610c8d576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190557f82e7ee47180a631312683eeb2a85ad264c9af490d54de5a75bbdb95b968c6de281610cbd81610c0d565b6040805192835260208301919091520160405180910390a150565b60008313610d12576040517f56e05d2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8369ffffffffffffffffffff168169ffffffffffffffffffff161080610d36575081155b15610d6d576040517fb1cf675500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60015460009080831015610db3576040517fb416da7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610dbe82610c0d565b905080841115610dcf579392505050565b509192915050565b6020810160068310610e12577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b600060208083528351808285015260005b81811015610e4557858101830151858201604001528201610e29565b81811115610e57576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b69ffffffffffffffffffff8116811461074e57600080fd5b600060208284031215610eb557600080fd5b8135610ec081610e8b565b9392505050565b600060208284031215610ed957600080fd5b5035919050565b600060208284031215610ef257600080fd5b81518015158114610ec057600080fd5b600181811c90821680610f1657607f821691505b60208210811415610f50577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600080600080600060a08688031215610f6e57600080fd5b8551610f7981610e8b565b809550506020860151935060408601519250606086015191506080860151610fa081610e8b565b809150509295509295909350565b600060208284031215610fc057600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60008413600084138583048511828216161561103757611037610fc7565b7f8000000000000000000000000000000000000000000000000000000000000000600087128682058812818416161561107257611072610fc7565b6000871292508782058712848416161561108e5761108e610fc7565b878505871281841616156110a4576110a4610fc7565b505050929093029392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826110f0576110f06110b2565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f80000000000000000000000000000000000000000000000000000000000000008314161561114457611144610fc7565b500590565b6000821982111561115c5761115c610fc7565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561119957611199610fc7565b500290565b6000826111ad576111ad6110b2565b50049056fea2646970667358221220226b667ed6fc6db7c8ec1377cc84dae524e2dc572320ead4a7092944a6b912de64736f6c634300080a00336102606040523480156200001257600080fd5b5060405162005f8c38038062005f8c833981016040819052620000359162000ba4565b83838383600384846001600160a01b03821615806200005b57506001600160a01b038116155b156200007a57604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038216608081905260408051632f7a188160e01b81529051632f7a1881916004808201926020929091908290030181865afa158015620000c5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000eb919062000c01565b6001600160a01b0390811660a05290811660c05260016000558416151590506200012857604051635919af9760e11b815260040160405180910390fd5b608051604051630f67c5bd60e41b81526001600160a01b0385811660048301529091169063f67c5bd090602401602060405180830381865afa15801562000173573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000199919062000c26565b620001c757604051634c607af960e11b81526001600160a01b03841660048201526024015b60405180910390fd5b6001600160a01b038084166101e081905261020052821661022052610240819052620001f460006200090a565b6001600160a01b031660e0526200020c60016200090a565b6001600160a01b0316610100526200022560026200090a565b6001600160a01b0316610120526200023e60036200090a565b6001600160a01b031661014052620002576000620009fd565b6001600160a01b031661016052620002706001620009fd565b6001600160a01b031661018052620002896002620009fd565b6001600160a01b03166101a052620002a26003620009fd565b6001600160a01b039081166101c05260e051161580620002cc5750610100516001600160a01b0316155b15620002eb57604051635919af9760e11b815260040160405180910390fd5b600281118015620003065750610120516001600160a01b0316155b156200032557604051635919af9760e11b815260040160405180910390fd5b600381118015620003405750610140516001600160a01b0316155b156200035f57604051635919af9760e11b815260040160405180910390fd5b60805160e051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620003ac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003d2919062000c26565b620004005760e051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b60805161010051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa1580156200044e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000474919062000c26565b620004a35761010051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b60028111801562000525575060805161012051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620004fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000523919062000c26565b155b15620005555761012051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b600381118015620005d7575060805161014051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620005af573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005d5919062000c26565b155b15620006075761014051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b610160516001600160a01b03161580159062000694575060805161016051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa1580156200066c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000692919062000c26565b155b15620006c45761016051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b610180516001600160a01b03161580159062000751575060805161018051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa15801562000729573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200074f919062000c26565b155b15620007815761018051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b6101a0516001600160a01b0316158015906200080e57506080516101a051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620007e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200080c919062000c26565b155b156200083e576101a051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b6101c0516001600160a01b031615801590620008cb57506080516101c051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620008a3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008c9919062000c26565b155b15620008fb576101c051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b50505050505050505062000c66565b60c05160405163c661065760e01b8152600481018390526000916001600160a01b03169063c661065790602401602060405180830381865afa92505050801562000973575060408051601f3d908101601f19168201909252620009709181019062000c01565b60015b6200097e5762000984565b92915050565b60c05160405163046e8dd760e31b8152600f84900b60048201526001600160a01b03909116906323746eb8906024015b602060405180830381865afa925050508015620009f0575060408051601f3d908101601f19168201909252620009ed9181019062000c01565b60015b6200097e57506000919050565b610220516000906001600160a01b03161562000a1e576200097e8262000ac0565b60c051604051630b9947eb60e41b8152600481018490526001600160a01b039091169063b9947eb090602401602060405180830381865afa92505050801562000a86575060408051601f3d908101601f1916820190925262000a839181019062000c01565b60015b6200097e5760c051604051635b9cca9f60e11b8152600f84900b60048201526001600160a01b039091169063b739953e90602401620009b4565b60008162000ad4576200097e600062000b17565b610220516001600160a01b031663c661065762000af360018562000c40565b6040518263ffffffff1660e01b8152600401620009b491815260200190565b919050565b600081600f0b6000141562000b2b575060e0515b81600f0b6001141562000b3e5750610100515b81600f0b6002141562000b515750610120515b81600f0b6003141562000b645750610140515b6001600160a01b03811662000b12576040516334769e6f60e21b815260040160405180910390fd5b80516001600160a01b038116811462000b1257600080fd5b6000806000806080858703121562000bbb57600080fd5b62000bc68562000b8c565b935062000bd66020860162000b8c565b925062000be66040860162000b8c565b915062000bf66060860162000b8c565b905092959194509250565b60006020828403121562000c1457600080fd5b62000c1f8262000b8c565b9392505050565b60006020828403121562000c3957600080fd5b5051919050565b60008282101562000c6157634e487b7160e01b600052601160045260246000fd5b500390565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e051610200516102205161024051614fa962000fe36000396000818161078301528181613708015281816138bf015281816139d901528181613e0f0152613f01015260006105de01526000818161067501528181611f680152818161239f0152818161278901528181612e6b01528181612f0901526131ed015260006108ad01526000818161059c015261288b0152600081816103d4015261285c015260008181610605015261282d0152600081816106af01526127fe015260008181610876015281816126630152818161363501528181613f6b01526146640152600081816104d7015281816126340152818161356501528181613e7901526145480152600081816107f3015281816126050152818161349501528181613d85015261442c015260008181610448015281816125d6015281816133c501528181613cb901526143100152600081816107350152818161091a015281816109e701528181610a7701528181610b6f01528181610bfe01528181610c9501528181610d2601528181611139015281816111b1015281816112ee0152818161144101528181611578015281816115c00152818161166d015281816116b5015281816117660152818161179b01528181611ac501528181611b4301528181611ccd01528181611d4501528181611dea01528181611fb20152818161206b015281816120a00152818161213b0152818161245e015281816124cb0152818161255c01528181612aa901528181612bc801528181612ca2015281816142e801528181614404015281816145200152818161463c01526147840152600081816104fe0152818161291401528181614055015261482b01526000818161075c01528181610ec9015281816118a601528181611ef4015281816122450152818161270101528181612aff01528181612b9901528181612cf801528181612da0015281816130630152818161311a01528181613215015281816132f8015281816133ed015281816134bd0152818161358d0152818161365d01528181613bf401528181613ce401528181613dad01528181613ea101528181613f93015281816140dd015281816141910152818161423b0152818161435e0152818161447a01528181614596015281816146b20152818161475501526148950152614fa96000f3fe608060405234801561001057600080fd5b50600436106103a45760003560e01c806379bea664116101e9578063cc2b27d71161010f578063e2e7d264116100ad578063f446c1d01161007c578063f446c1d014610898578063f851a440146108a0578063fc0c546a146108a8578063fee3f7f9146108cf57600080fd5b8063e2e7d26414610838578063ec026ca71461084b578063ecb586a51461085e578063ef14101e1461087157600080fd5b8063d21220a7116100e9578063d21220a7146107ee578063d96c7fce14610815578063dd62ed3e1461081d578063ddca3f431461083057600080fd5b8063cc2b27d7146107b3578063ce30bbdb146107c6578063cf023dd0146107db57600080fd5b8063b4b577ad11610187578063bd90df7011610156578063bd90df7014610730578063c12c21c014610757578063c21ee1621461077e578063c6610657146107a557600080fd5b8063b4b577ad146106ff578063b739953e14610707578063b9947eb01461071a578063bb7b8b801461072857600080fd5b80638ba51dfc116101c35780638ba51dfc146106aa57806395d89b41146106d15780639fdaea0c146106d9578063a6417ed6146106ec57600080fd5b806379bea6641461065d57806382c630661461067057806385ca3c6f1461069757600080fd5b806333d2ebf2116102ce57806357d788751161026c5780636e1d82711161023b5780636e1d82711461060057806370a082311461062757806376a2f0f01461063a57806378aa73a41461064257600080fd5b806357d78875146105975780635e0d443f146105be57806363543f06146105d157806364a89bca146105d957600080fd5b80634469e30e116102a85780634469e30e146105615780634515cef3146105695780634903b0d11461057c5780635409491a1461058f57600080fd5b806333d2ebf2146105285780633883e1191461053b5780633df021241461054e57600080fd5b806318160ddd1161034657806323746eb81161031557806323746eb8146104bf57806325be124e146104d25780632f7a1881146104f9578063313ce5671461052057600080fd5b806318160ddd146104875780631a4d01d21461048f5780631af4de83146104a45780632081066c146104b757600080fd5b806307211ef71161038257806307211ef7146104305780630dfe168114610443578063140522881461046a57806314f059791461047257600080fd5b8063065a80d8146103a957806306871163146103cf57806306fdde031461041b575b600080fd5b6103bc6103b736600461491d565b6108d7565b6040519081526020015b60405180910390f35b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016103c6565b610423610a73565b6040516103c691906149ae565b6103bc61043e3660046149c1565b610b2b565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc610bfa565b61047a610c8b565b6040516103c691906149fd565b6103bc610d22565b6104a261049d366004614a2e565b610d8f565b005b6104a26104b23660046149c1565b610e27565b6103bc611135565b6103f66104cd36600461491d565b6111a2565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc6111ad565b6104a2610536366004614a53565b61121a565b6103bc610549366004614a8e565b6112ae565b6104a261055c366004614acb565b611366565b61047a611437565b6104a2610577366004614b0d565b6114aa565b6103bc61058a366004614b38565b611546565b6103bc6115bc565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc6105cc3660046149c1565b611629565b6103bc6116b1565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc610635366004614b73565b61171e565b6103bc611797565b61064a600281565b60405161ffff90911681526020016103c6565b6104a261066b3660046149c1565b611804565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b61047a6106a5366004614b90565b611a80565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b610423611b3f565b6104a26106e7366004614b0d565b611bac565b6104a26106fa366004614acb565b611c3f565b6103bc611cc9565b6103f661071536600461491d565b611d36565b6103f6610715366004614b38565b6103bc611d41565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc7f000000000000000000000000000000000000000000000000000000000000000081565b6103f66104cd366004614b38565b6103bc6107c1366004614bce565b611dae565b6107ce600681565b6040516103c69190614bfa565b6104a26107e9366004614a2e565b611e2e565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b61047a611fa8565b6103bc61082b366004614c3b565b61201b565b6103bc61209c565b6103bc610846366004614b38565b612109565b6104a2610859366004614a53565b61217f565b6104a261086c366004614c69565b6123e0565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc61245a565b6103f66124c7565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc612558565b6040517f4903b0d10000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff821660048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634903b0d1906024015b602060405180830381865afa9250505080156109b1575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526109ae91810190614c8d565b60015b610a68576040517f065a80d8000000000000000000000000000000000000000000000000000000008152600f83900b60048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063065a80d8906024015b602060405180830381865afa158015610a44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a689190614c8d565b92915050565b919050565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015610ae0573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b269190810190614d67565b905090565b6040517f07211ef7000000000000000000000000000000000000000000000000000000008152600f84810b600483015283900b6024820152604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906307211ef7906064015b602060405180830381865afa158015610bcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf09190614c8d565b90505b9392505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663140522886040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b269190614c8d565b610c936148ed565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166314f059796040518163ffffffff1660e01b8152600401606060405180830381865afa158015610cfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b269190614db8565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b60026000541415610e01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b60026000908155610e11836125c5565b9050610e1c816126d0565b505060016000555050565b60026000541415610e94576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610f25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f499190614e36565b90506000610f56856127ed565b90506000610f63856127ed565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529192506000918416906370a0823190602401602060405180830381865afa158015610fd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff99190614c8d565b90506001811115611127577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce800000061103f8784614e53565b6110499190614eb7565b604051600f8a810b602483015289900b60448201526064810184905260848101829052909150611124908690869086907fa6417ed6000000000000000000000000000000000000000000000000000000009060a4015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526001806128f7565b50505b505060016000555050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632081066c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6000610a68826125c5565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b60026000541415611287576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b60026000908155611297836125c5565b90506112a4838284612d6f565b5050600160005550565b6040517f3883e11900000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690633883e119906113259086908690600401614ef2565b602060405180830381865afa158015611342573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf39190614c8d565b600260005414156113d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b600260009081556113e3856125c5565b905060006113f0856125c5565b905061112782826000368080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525060019350915061301a9050565b61143f6148ed565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16634469e30e6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610cfe573d6000803e3d6000fd5b60026000541415611517576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b6002600090815561153d90600184358110916020860135821091604087013511906130e9565b50506001600055565b6040517f4903b0d1000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634903b0d19060240161095a565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635409491a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6040517f5e0d443f000000000000000000000000000000000000000000000000000000008152600f84810b600483015283900b6024820152604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635e0d443f90606401610baf565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166363543f066040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401610a27565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166376a2f0f06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b60026000541415611871576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611902573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119269190614e36565b90506000611933856125c5565b90506000611940856125c5565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529192506000918416906370a0823190602401602060405180830381865afa1580156119b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d69190614c8d565b90506001811115611127577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce8000000611a1c8784614e53565b611a269190614eb7565b604051600f8a810b602483015289900b60448201526064810184905260848101829052909150611124908690869086907f3df02124000000000000000000000000000000000000000000000000000000009060a40161109f565b611a886148ed565b6040517f85ca3c6f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906385ca3c6f90611afe90879087908790600401614f0a565b606060405180830381865afa158015611b1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf09190614db8565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610ae0573d6000803e3d6000fd5b60026000541415611c19576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b6002600090815561153d90600184358110916020860135821091604087013511906132c7565b60026000541415611cac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b60026000908155611cbc856127ed565b905060006113f0856127ed565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b4b577ad6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6000610a68826127ed565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb7b8b806040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6040517fcc2b27d700000000000000000000000000000000000000000000000000000000815260048101839052600f82900b60248201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063cc2b27d790604401611325565b60026000541415611e9b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b60026000908155611eab836125c5565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611f3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f5f9190614e36565b9050611f9b81837f0000000000000000000000000000000000000000000000000000000000000000611f92888a89613704565b600160006128f7565b5050600160005550505050565b611fb06148ed565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d96c7fce6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610cfe573d6000803e3d6000fd5b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063dd62ed3e90604401611325565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6040517fe2e7d264000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e2e7d26490602401610a27565b600260005414156121ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b600260009081556121fc836125c5565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa15801561228c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b09190614e36565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000918416906370a0823190602401602060405180830381865afa158015612322573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123469190614c8d565b905060018111156123d4577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce800000061238c8684614e53565b6123969190614eb7565b90506123d183857f00000000000000000000000000000000000000000000000000000000000000006123c98a8787613704565b6001806128f7565b50505b50506001600055505050565b6002600054141561244d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b600260005561153d613bc3565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f446c1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa158015612534573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b269190614e36565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fee3f7f96040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b600081600f0b600014156125f657507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6001141561262557507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6002141561265457507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6003141561268357507f00000000000000000000000000000000000000000000000000000000000000005b73ffffffffffffffffffffffffffffffffffffffff8116610a6e576040517fd1da79bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa15801561275d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127819190614e36565b90506127e8817f0000000000000000000000000000000000000000000000000000000000000000846000368080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525092508291506128f79050565b505050565b600081600f0b6000141561281e57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6001141561284d57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6002141561287c57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6003141561268357507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff8116610a6e576040517fd1da79bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606000803373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614612a60576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301528916906370a0823190602401602060405180830381865afa1580156129a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129c99190614c8d565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152919350908816906370a0823190602401602060405180830381865afa158015612a39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a5d9190614c8d565b90505b8415612b5c576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612b4357600080fd5b505af1158015612b57573d6000803e3d6000fd5b505050505b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a90612bf29033907f0000000000000000000000000000000000000000000000000000000000000000908b90600401614f31565b6000604051808303816000875af1158015612c11573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052612c579190810190614d67565b92508415612d55576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612d3c57600080fd5b505af1158015612d50573d6000803e3d6000fd5b505050505b612d6389898985858961403d565b50509695505050505050565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612dfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e209190614e36565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000917f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015612eb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ed69190614c8d565b90506001811115613013577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01613011827f0000000000000000000000000000000000000000000000000000000000000000867f1a4d01d200000000000000000000000000000000000000000000000000000000858a6b033b2e3c9fd0803ce8000000612f638b84614e53565b612f6d9190614eb7565b6040516024810193909352600f9190910b60448301526064820152608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152600060016128f7565b505b5050505050565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015260609060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa1580156130aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130ce9190614e36565b90506130de8188888888886128f7565b979650505050505050565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015613176573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061319a9190614e36565b90506131a88585858561429f565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561325957600080fd5b505af115801561326d573d6000803e3d6000fd5b505050506132b16000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061471592505050565b506132be8585858561429f565b61301381614813565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015613354573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133789190614e36565b9050841561344a576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561343157600080fd5b505af1158015613445573d6000803e3d6000fd5b505050505b831561351a576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561350157600080fd5b505af1158015613515573d6000803e3d6000fd5b505050505b82156135ea576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156135d157600080fd5b505af11580156135e5573d6000803e3d6000fd5b505050505b81156136ba576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156136a157600080fd5b505af11580156136b5573d6000803e3d6000fd5b505050505b6136fa6000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061471592505050565b5061301381614813565b60607f0000000000000000000000000000000000000000000000000000000000000000600214156138bd5783600f0b6000146137fa576040516000602482015260448101849052606481018390527f0b4c7e4d00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526138b6565b6040516024810184905260006044820152606481018390527f0b4c7e4d00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091525b9050610bf3565b7f0000000000000000000000000000000000000000000000000000000000000000600314156139d75783600f0b60001461398e5783600f0b60011461394557604051600060248201819052604482015260648101849052608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401613778565b604051600060248201819052604482018590526064820152608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401613778565b604051602481018490526000604482018190526064820152608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401613838565b7f000000000000000000000000000000000000000000000000000000000000000060041415613b615783600f0b600014613b115783600f0b600114613ac15783600f0b600214613a71576040516000602482018190526044820181905260648201526084810184905260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613778565b6040516000602482018190526044820181905260648201859052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613778565b6040516000602482018190526044820185905260648201819052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613778565b6040516024810184905260006044820181905260648201819052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613838565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f496e636f7272656374206e436f696e73000000000000000000000000000000006044820152606401610df8565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015613c50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c749190614e36565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301529192507f0000000000000000000000000000000000000000000000000000000000000000909116906351e3f16090604401600060405180830381600087803b158015613d2a57600080fd5b505af1158015613d3e573d6000803e3d6000fd5b50506040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f00000000000000000000000000000000000000000000000000000000000000001692506351e3f1609150604401600060405180830381600087803b158015613df357600080fd5b505af1158015613e07573d6000803e3d6000fd5b5050505060027f00000000000000000000000000000000000000000000000000000000000000001115613ff0576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015613ee557600080fd5b505af1158015613ef9573d6000803e3d6000fd5b5050505060037f00000000000000000000000000000000000000000000000000000000000000001115613ff0576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015613fd757600080fd5b505af1158015613feb573d6000803e3d6000fd5b505050505b6140306000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061471592505050565b5061403a81614813565b50565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461413e576040517f654a9eda00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528681166024830152858116604483015260648201859052608482018490527f0000000000000000000000000000000000000000000000000000000000000000169063654a9eda9060a401600060405180830381600087803b15801561412157600080fd5b505af1158015614135573d6000803e3d6000fd5b50505050613011565b80156141ee576040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015286811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b1580156141d557600080fd5b505af11580156141e9573d6000803e3d6000fd5b505050505b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015285811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561427f57600080fd5b505af1158015614293573d6000803e3d6000fd5b50505050505050505050565b83156143bb576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156143a257600080fd5b505af11580156143b6573d6000803e3d6000fd5b505050505b82156144d7576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156144be57600080fd5b505af11580156144d2573d6000803e3d6000fd5b505050505b81156145f3576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156145da57600080fd5b505af11580156145ee573d6000803e3d6000fd5b505050505b801561470f576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156146f657600080fd5b505af115801561470a573d6000803e3d6000fd5b505050505b50505050565b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815260609073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a906147ae9033907f0000000000000000000000000000000000000000000000000000000000000000908790600401614f31565b6000604051808303816000875af11580156147cd573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610a689190810190614d67565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461403a576040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b1580156148d957600080fd5b505af1158015613013573d6000803e3d6000fd5b60405180606001604052806003906020820280368337509192915050565b8035600f81900b8114610a6e57600080fd5b60006020828403121561492f57600080fd5b610bf38261490b565b60005b8381101561495357818101518382015260200161493b565b8381111561470f5750506000910152565b6000815180845261497c816020860160208601614938565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610bf36020830184614964565b6000806000606084860312156149d657600080fd5b6149df8461490b565b92506149ed6020850161490b565b9150604084013590509250925092565b60608101818360005b6003811015614a25578151835260209283019290910190600101614a06565b50505092915050565b600080600060608486031215614a4357600080fd5b833592506149ed6020850161490b565b60008060408385031215614a6657600080fd5b614a6f8361490b565b946020939093013593505050565b8060608101831015610a6857600080fd5b60008060808385031215614aa157600080fd5b614aab8484614a7d565b915060608301358015158114614ac057600080fd5b809150509250929050565b60008060008060808587031215614ae157600080fd5b614aea8561490b565b9350614af86020860161490b565b93969395505050506040820135916060013590565b60008060808385031215614b2057600080fd5b614b2a8484614a7d565b946060939093013593505050565b600060208284031215614b4a57600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461403a57600080fd5b600060208284031215614b8557600080fd5b8135610bf381614b51565b600080600060e08486031215614ba557600080fd5b614baf8585614a7d565b9250614bbe8560608601614a7d565b915060c084013590509250925092565b60008060408385031215614be157600080fd5b82359150614bf16020840161490b565b90509250929050565b6020810160118310614c35577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60008060408385031215614c4e57600080fd5b8235614c5981614b51565b91506020830135614ac081614b51565b60008060808385031215614c7c57600080fd5b82359150614bf18460208501614a7d565b600060208284031215614c9f57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff80841115614cf057614cf0614ca6565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715614d3657614d36614ca6565b81604052809350858152868686011115614d4f57600080fd5b614d5d866020830187614938565b5050509392505050565b600060208284031215614d7957600080fd5b815167ffffffffffffffff811115614d9057600080fd5b8201601f81018413614da157600080fd5b614db084825160208401614cd5565b949350505050565b600060608284031215614dca57600080fd5b82601f830112614dd957600080fd5b6040516060810181811067ffffffffffffffff82111715614dfc57614dfc614ca6565b604052806060840185811115614e1157600080fd5b845b81811015614e2b578051835260209283019201614e13565b509195945050505050565b600060208284031215614e4857600080fd5b8151610bf381614b51565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614eb2577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500290565b600082614eed577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60808101606084833791151560609190910152919050565b60e081016060858337606082016000815260608582375060c0919091019190915292915050565b600073ffffffffffffffffffffffffffffffffffffffff808616835280851660208401525060606040830152614f6a6060830184614964565b9594505050505056fea2646970667358221220efb951725986e76ee157ff0d00cd7b7a6a9b8a581784400c52be5c96516fe15064736f6c634300080a0033608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6118158061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c80638da5cb5b11610076578063d7aa2e351161005b578063d7aa2e35146101b3578063d914cd4b146101f2578063f2fde38b1461020557600080fd5b80638da5cb5b1461015d578063c488f7fe1461018557600080fd5b80634dee073b116100a75780634dee073b146101015780636f33547d14610142578063715018a61461015557600080fd5b80631bf64c41146100c357806345330666146100ec575b600080fd5b6100d66100d1366004611345565b610218565b6040516100e3919061142e565b60405180910390f35b6100ff6100fa366004611500565b6103fa565b005b61012f61010f366004611551565b6001602090815260009283526040808420909152908252902054600f0b81565b604051600f9190910b81526020016100e3565b6100d6610150366004611345565b6104d7565b6100ff610514565b60005460405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100e3565b61012f610193366004611551565b6002602090815260009283526040808420909152908252902054600f0b81565b6101e46101c136600461158a565b600360209081526000938452604080852082529284528284209052825290205481565b6040519081526020016100e3565b6100ff6102003660046115d5565b6105a1565b6100ff6102133660046115d5565b61089e565b6102556040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b61025e836109ce565b156103f45760008273ffffffffffffffffffffffffffffffffffffffff1663bd90df706040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102d491906115f2565b905060008060008060006102e88987610a67565b9450945094509450945082156103ed5760405180608001604052806103118b8b858a8a89610d8b565b8152602001828152602001600115158152602001600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008c6040015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008c6060015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481525096505b5050505050505b92915050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610480576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff93841660009081526003602090815260408083209587168084528683528184209590971683529381528382208390559384528281209481529390925290912055565b6103f46040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b60005473ffffffffffffffffffffffffffffffffffffffff163314610595576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610477565b61059f6000611045565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610622576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610477565b60005b6004600f82900b121561075d576040517f23746eb8000000000000000000000000000000000000000000000000000000008152600f82900b600482015273ffffffffffffffffffffffffffffffffffffffff8316906323746eb890602401602060405180830381865afa9250505080156106da575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526106d7918101906115f2565b60015b6106e35761075d565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160208181526040808420959094168352939093522080547fffffffffffffffffffffffffffffffff0000000000000000000000000000000016929091016fffffffffffffffffffffffffffffffff8116929092179055610625565b5060005b6004600f82900b121561089a576040517fb739953e000000000000000000000000000000000000000000000000000000008152600f82900b600482015273ffffffffffffffffffffffffffffffffffffffff83169063b739953e90602401602060405180830381865afa925050508015610816575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610813918101906115f2565b60015b61081e575050565b73ffffffffffffffffffffffffffffffffffffffff808416600090815260026020908152604080832094909316825292909252902080546fffffffffffffffffffffffffffffffff60018401167fffffffffffffffffffffffffffffffff00000000000000000000000000000000909116179055600101610761565b5050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461091f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610477565b73ffffffffffffffffffffffffffffffffffffffff81166109c2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610477565b6109cb81611045565b50565b600080825160028111156109e4576109e461160f565b1480610a025750600182516002811115610a0057610a0061160f565b145b15610a0f57506001919050565b600282516002811115610a2457610a2461160f565b1415610a3257506000919050565b81516040517ffe7995cf000000000000000000000000000000000000000000000000000000008152610477919060040161163e565b73ffffffffffffffffffffffffffffffffffffffff80821660009081526001602081815260408084208782015190951684529390529181205490918291829182918291610ab691600f0b6116ae565b73ffffffffffffffffffffffffffffffffffffffff808816600090815260016020818152604080842060608e0151909516845293905291902054919650610aff91600f0b6116ae565b9350600085600f0b12158015610b195750600084600f0b12155b15610bf85760a08701516040517f5e0d443f000000000000000000000000000000000000000000000000000000008152600f87810b600483015286900b6024820152604481019190915273ffffffffffffffffffffffffffffffffffffffff871690635e0d443f90606401602060405180830381865afa925050508015610bdb575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610bd89181019061171f565b60015b610be457610d81565b8015610bf257600193508091505b50610d81565b73ffffffffffffffffffffffffffffffffffffffff80871660009081526002602090815260408083208b82015190941683529290522054610c3e90600190600f0b6116ae565b73ffffffffffffffffffffffffffffffffffffffff808816600090815260026020908152604080832060608d015190941683529290522054909550610c8890600190600f0b6116ae565b9350600085600f0b12158015610ca25750600084600f0b12155b15610d815760a08701516040517f07211ef7000000000000000000000000000000000000000000000000000000008152600f87810b600483015286900b6024820152604481019190915273ffffffffffffffffffffffffffffffffffffffff8716906307211ef790606401602060405180830381865afa925050508015610d64575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610d619181019061171f565b60015b610d6d57610d81565b8015610d7f5760019350809150600192505b505b9295509295909350565b6040805180820190915260008152606060208201526060600188516002811115610db757610db761160f565b1415610eb75782610de8577f79bea66400000000000000000000000000000000000000000000000000000000610e0a565b7f1af4de83000000000000000000000000000000000000000000000000000000005b8585610e168b8a6110ba565b604051600f93840b60248201529190920b60448201526064810191909152608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505b600088516002811115610ecc57610ecc61160f565b1415610fcc5782610efd577f3df0212400000000000000000000000000000000000000000000000000000000610f1f565b7fa6417ed6000000000000000000000000000000000000000000000000000000005b8585610f2b8b8a6110f2565b604051600f93840b60248201529190920b60448201526064810191909152608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505b8051156110065760405180604001604052808873ffffffffffffffffffffffffffffffffffffffff1681526020018281525091505061103b565b87516040517ffe7995cf000000000000000000000000000000000000000000000000000000008152610477919060040161163e565b9695505050505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60a08201516000906110e1846110dc856b033b2e3c9fd0803ce8000000611738565b6110f2565b6110eb9190611775565b9392505050565b60008260e0015115611106575060006103f4565b60008351600281111561111b5761111b61160f565b148061113957506001835160028111156111375761113761160f565b145b1561116c5760c08301516127109061115190826117b0565b61115b9084611738565b6111659190611775565b90506103f4565b6002835160028111156111815761118161160f565b14156111a45760c0830151611198906127106117c7565b61115b61271084611738565b82516040517ffe7995cf000000000000000000000000000000000000000000000000000000008152610477919060040161163e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610100810167ffffffffffffffff8111828210171561122c5761122c6111d9565b60405290565b80356003811061124157600080fd5b919050565b73ffffffffffffffffffffffffffffffffffffffff811681146109cb57600080fd5b803561124181611246565b600082601f83011261128457600080fd5b8135602067ffffffffffffffff808311156112a1576112a16111d9565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f830116810181811084821117156112e4576112e46111d9565b60405293845285810183019383810192508785111561130257600080fd5b83870191505b8482101561132a57813561131b81611246565b83529183019190830190611308565b979650505050505050565b8035801515811461124157600080fd5b6000806040838503121561135857600080fd5b823567ffffffffffffffff8082111561137057600080fd5b90840190610100828703121561138557600080fd5b61138d611208565b61139683611232565b81526113a460208401611268565b60208201526113b560408401611268565b60408201526113c660608401611268565b60608201526080830135828111156113dd57600080fd5b6113e988828601611273565b60808301525060a083013560a082015260c083013560c082015261140f60e08401611335565b60e0820152935061142591505060208401611268565b90509250929050565b60006020808352835160808285015273ffffffffffffffffffffffffffffffffffffffff81511660a0850152818101519050604060c085015280518060e086015260005b8181101561148f5782810184015186820161010001528301611472565b818111156114a257600061010083880101525b50828601516040860152604086015192506114c1606086018415159052565b606095909501516080850152505050601f919091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016016101000190565b6000806000806080858703121561151657600080fd5b843561152181611246565b9350602085013561153181611246565b9250604085013561154181611246565b9396929550929360600135925050565b6000806040838503121561156457600080fd5b823561156f81611246565b9150602083013561157f81611246565b809150509250929050565b60008060006060848603121561159f57600080fd5b83356115aa81611246565b925060208401356115ba81611246565b915060408401356115ca81611246565b809150509250925092565b6000602082840312156115e757600080fd5b81356110eb81611246565b60006020828403121561160457600080fd5b81516110eb81611246565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160038310611679577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600081600f0b83600f0b60008112817fffffffffffffffffffffffffffffffff80000000000000000000000000000000018312811516156116f1576116f161167f565b816f7fffffffffffffffffffffffffffffff0183138116156117155761171561167f565b5090039392505050565b60006020828403121561173157600080fd5b5051919050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156117705761177061167f565b500290565b6000826117ab577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000828210156117c2576117c261167f565b500390565b600082198211156117da576117da61167f565b50019056fea2646970667358221220ed82995f9e9761ea7972d39ed0d8d0b378778cbba995315b16c90b49c74d2b7e64736f6c634300080a003360806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d00011790553480156200003a57600080fd5b506040805161018081019091526000908060c081018060018152604080518082018252600381526244414960e81b6020828101919091528301526012908201526305f5e100606082015260800160018152602001600081525081526020016040518060c001604052806002600a811115620000b957620000b962000b78565b815260408051808201825260048152635553444360e01b6020828101919091528301526006908201526305f5e100606082015260800160018152602001600081525081526020016040518060c001604052806003600a81111562000121576200012162000b78565b815260408051808201825260048152630ae8aa8960e31b602082810191909152830152601290820152644a817c8000606082015260800160028152602001600081525081526020016040518060c001604052806004600a8111156200018a576200018a62000b78565b815260408051808201825260048152634c494e4b60e01b6020828101919091528301526012908201526359682f00606082015260800160018152602001600081525081526020016040518060c001604052806005600a811115620001f257620001f262000b78565b815260408051808201825260048152631554d11560e21b602082810191909152830152601290820152633b023380606082015260800160018152602001600081525081526020016040518060c001604052806006600a8111156200025a576200025a62000b78565b815260408051808201825260058152640e6e88aa8960db1b602082810191909152830152601290820152644cd588640060608201526080016003815260200160009052905260408051610140810190915290915060009080608081018060078152602001604051806040016040528060048152602001636344414960e01b8152508152602001601260ff1681526020016305f5e100815260200160048081111562000309576200030962000b78565b8152602001600181525081526020016040518060c001604052806008600a81111562000339576200033962000b78565b81526040805180820182526005815264635553444360d81b6020828101919091528301526006908201526305f5e100606082015260800160048152602001600281525081526020016040518060c001604052806009600a811115620003a257620003a262000b78565b8152604080518082018252600581526418d554d11560da1b602082810191909152830152601290820152633b023380606082015260800160048152602001600581525081526020016040518060c00160405280600a808111156200040a576200040a62000b78565b81526040805180820182526005815264634c494e4b60d81b6020828101919091528301526012908201526359682f00606082015260800160048152602001600490529052905060005b600681101562000496576200048183826006811062000476576200047662000b8e565b6020020151620004db565b806200048d8162000ba4565b91505062000453565b5060005b6004811015620004d257620004bd82826004811062000476576200047662000b8e565b80620004c98162000ba4565b9150506200049a565b50505062000d14565b6000600282608001516004811115620004f857620004f862000b78565b14156200054e576040516200050d9062000a8c565b604051809103906000f0801580156200052a573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b03831617905590506200071e565b60038260800151600481111562000569576200056962000b78565b1415620005a4576040516200057e9062000a9a565b604051809103906000f0801580156200059b573d6000803e3d6000fd5b5090506200071e565b600182608001516004811115620005bf57620005bf62000b78565b1415620005f157816020015182602001518360400151604051620005e39062000aa8565b6200057e9392919062000c1e565b6004826080015160048111156200060c576200060c62000b78565b1415620006be576000600260008460a00151600a81111562000632576200063262000b78565b600a81111562000646576200064662000b78565b815260200190815260200160002060009054906101000a90046001600160a01b0316905082602001518360200151846040015183604051620006889062000ab6565b62000697949392919062000c5b565b604051809103906000f080158015620006b4573d6000803e3d6000fd5b509150506200071e565b60405162461bcd60e51b815260206004820152602b60248201527f74657374546f6b656e53756974653a204372656174696e6720756e6b6e6f776e60448201526a20746f6b656e207479706560a81b606482015260840160405180910390fd5b60005460208301516040516318caf8e360e31b8152620100009092046001600160a01b03169163c657c718916200075b9185919060040162000ca9565b600060405180830381600087803b1580156200077657600080fd5b505af11580156200078b573d6000803e3d6000fd5b50505050600082606001516008604051620007a69062000ac4565b91825260ff166020820152604001604051809103906000f080158015620007d1573d6000803e3d6000fd5b50905081600260008560000151600a811115620007f257620007f262000b78565b600a81111562000806576200080662000b78565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055508260600151600560008560000151600a8111156200085a576200085a62000b78565b600a8111156200086e576200086e62000b78565b8152602080820192909252604090810160009081209390935585516001600160a01b03861684526008909252909120805460ff1916600183600a811115620008ba57620008ba62000b78565b02179055508260800151600360008560000151600a811115620008e157620008e162000b78565b600a811115620008f557620008f562000b78565b81526020810191909152604001600020805460ff1916600183600481111562000922576200092262000b78565b0217905550604080518082019091526001600160a01b0380841682528281166020808401918252600780546001810182556000918252945160029095027fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688810180549686166001600160a01b031997881617905592517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c689909301805493909416929094169190911790915584015184519091600491600a811115620009eb57620009eb62000b78565b600a811115620009ff57620009ff62000b78565b8152602001908152602001600020908051906020019062000a2292919062000ad2565b5080600660008560000151600a81111562000a415762000a4162000b78565b600a81111562000a555762000a5562000b78565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550505050565b610ab1806200285183390190565b611224806200330283390190565b611758806200452683390190565b6117098062005c7e83390190565b6106ca806200738783390190565b82805462000ae09062000cd7565b90600052602060002090601f01602090048101928262000b04576000855562000b4f565b82601f1062000b1f57805160ff191683800117855562000b4f565b8280016001018555821562000b4f579182015b8281111562000b4f57825182559160200191906001019062000b32565b5062000b5d92915062000b61565b5090565b5b8082111562000b5d576000815560010162000b62565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600060001982141562000bc757634e487b7160e01b600052601160045260246000fd5b5060010190565b6000815180845260005b8181101562000bf65760208185018101518683018201520162000bd8565b8181111562000c09576000602083870101525b50601f01601f19169290920160200192915050565b60608152600062000c33606083018662000bce565b828103602084015262000c47818662000bce565b91505060ff83166040830152949350505050565b60808152600062000c70608083018762000bce565b828103602084015262000c84818762000bce565b60ff95909516604084015250506001600160a01b039190911660609091015292915050565b6001600160a01b038316815260406020820181905260009062000ccf9083018462000bce565b949350505050565b600181811c9082168062000cec57607f821691505b6020821081141562000d0e57634e487b7160e01b600052602260045260246000fd5b50919050565b611b2d8062000d246000396000f3fe6080604052600436106101635760003560e01c80638eb86e8b116100c0578063c6c3bbe611610074578063d051a62211610059578063d051a62214610490578063eebab8ef146104b0578063fa7626d4146104d057600080fd5b8063c6c3bbe614610433578063c74912d21461045357600080fd5b80639b140a85116100a55780639b140a85146103e6578063b36ba20814610406578063ba414fa61461040e57600080fd5b80638eb86e8b1461038357806398cdaadf146103a357600080fd5b80636a72bde71161011757806388327863116100fc578063883278631461030857806388f776a2146103365780638a3177a31461035657600080fd5b80636a72bde7146102c45780636ca42ae3146102e657600080fd5b8063440864fa11610148578063440864fa146102025780634b57b0be1461022f57806367b426451461028157600080fd5b806304bc3b1c1461016f57806310c7f0b9146101b557600080fd5b3661016a57005b600080fd5b34801561017b57600080fd5b5061019f61018a3660046116f6565b60086020526000908152604090205460ff1681565b6040516101ac9190611742565b60405180910390f35b3480156101c157600080fd5b506101d56101d036600461175c565b6104ea565b6040805173ffffffffffffffffffffffffffffffffffffffff9384168152929091166020830152016101ac565b34801561020e57600080fd5b5061022261021d366004611784565b610530565b6040516101ac91906117cb565b34801561023b57600080fd5b5060015461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101ac565b34801561028d57600080fd5b5061025c61029c366004611784565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156102d057600080fd5b506102e46102df36600461181c565b6105ca565b005b3480156102f257600080fd5b506102fb610730565b6040516101ac919061186b565b34801561031457600080fd5b506103286103233660046118d4565b6107b5565b6040519081526020016101ac565b34801561034257600080fd5b506102e461035136600461190b565b610888565b34801561036257600080fd5b50610328610371366004611784565b60056020526000908152604090205481565b34801561038f57600080fd5b506102e461039e366004611954565b6108b9565b3480156103af57600080fd5b5061025c6103be366004611784565b60066020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156103f257600080fd5b506102e4610401366004611993565b610a73565b6102e4610b22565b34801561041a57600080fd5b50610423610ba0565b60405190151581526020016101ac565b34801561043f57600080fd5b506102e461044e3660046119b3565b610d00565b34801561045f57600080fd5b5061048361046e366004611784565b60036020526000908152604090205460ff1681565b6040516101ac91906119d3565b34801561049c57600080fd5b506103286104ab36600461190b565b610daf565b3480156104bc57600080fd5b506102e46104cb366004611954565b610e8b565b3480156104dc57600080fd5b506000546104239060ff1681565b600781815481106104fa57600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff91821692501682565b60046020526000908152604090208054610549906119e7565b80601f0160208091040260200160405190810160405280929190818152602001828054610575906119e7565b80156105c25780601f10610597576101008083540402835291602001916105c2565b820191906000526020600020905b8154815290600101906020018083116105a557829003601f168201915b505050505081565b6000546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152620100009092049091169063ca669fa790602401600060405180830381600087803b15801561063e57600080fd5b505af1158015610652573d6000803e3d6000fd5b505050506002600085600a81111561066c5761066c611713565b600a81111561067d5761067d611713565b8152602081019190915260409081016000205490517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490529091169063095ea7b3906044016020604051808303816000875af1158015610705573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107299190611a3b565b5050505050565b60606007805480602002602001604051908101604052809291908181526020016000905b828210156107ac5760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff908116835260019182015416828401529083529092019101610754565b50505050905090565b60006002600084600a8111156107cd576107cd611713565b600a8111156107de576107de611713565b8152602081019190915260409081016000205490517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152909116906370a0823190602401602060405180830381865afa15801561085d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108819190611a5d565b9392505050565b6108b48383837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6105ca565b505050565b60016003600085600a8111156108d1576108d1611713565b600a8111156108e2576108e2611713565b815260208101919091526040016000205460ff16600481111561090757610907611713565b14610999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f74657374546f6b656e53756974653a20547279696e6720746f206275726e206160448201527f206e6f6e2d6e6f726d616c20746f6b656e00000000000000000000000000000060648201526084015b60405180910390fd5b6002600084600a8111156109af576109af611713565b600a8111156109c0576109c0611713565b8152602081019190915260409081016000205490517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526024820184905290911690639dc29fac906044015b6020604051808303816000875af1158015610a49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6d9190611a3b565b50505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604081205460ff169081600a811115610aaf57610aaf611713565b1415610b17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f20746f6b656e2077697468207375636820616464726573730000000000006044820152606401610990565b610a6d818484610888565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015610b8c57600080fd5b505af1158015610729573d6000803e3d6000fd5b60008054610100900460ff1615610bc05750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610cfb5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610c65917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc491608001611a76565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052610c9d91611abe565b6000604051808303816000865af19150503d8060008114610cda576040519150601f19603f3d011682016040523d82523d6000602084013e610cdf565b606091505b5091505080806020019051810190610cf79190611a3b565b9150505b919050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604081205460ff169081600a811115610d3c57610d3c611713565b1415610da4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f20746f6b656e2077697468207375636820616464726573730000000000006044820152606401610990565b610a6d818484610e8b565b60006002600085600a811115610dc757610dc7611713565b600a811115610dd857610dd8611713565b8152602081019190915260409081016000205490517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301529091169063dd62ed3e90604401602060405180830381865afa158015610e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e839190611a5d565b949350505050565b60026003600085600a811115610ea357610ea3611713565b600a811115610eb457610eb4611713565b815260208101919091526040016000205460ff166004811115610ed957610ed9611713565b1415610ff6576000546040517fc88a5e6d000000000000000000000000000000000000000000000000000000008152306004820152602481018390526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c88a5e6d90604401600060405180830381600087803b158015610f5657600080fd5b505af1158015610f6a573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015610fd857600080fd5b505af1158015610fec573d6000803e3d6000fd5b505050505061163c565b600380600085600a81111561100d5761100d611713565b600a81111561101e5761101e611713565b815260208101919091526040016000205460ff16600481111561104357611043611713565b14156111aa576000546040517fc88a5e6d000000000000000000000000000000000000000000000000000000008152306004820152602481018390526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c88a5e6d90604401600060405180830381600087803b1580156110c057600080fd5b505af11580156110d4573d6000803e3d6000fd5b505050506002600084600a8111156110ee576110ee611713565b600a8111156110ff576110ff611713565b8152602081019190915260409081016000205490517fa1903eab00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a1903eab90839060240160206040518083038185885af115801561117f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906111a49190611a5d565b5061163c565b60046003600085600a8111156111c2576111c2611713565b600a8111156111d3576111d3611713565b815260208101919091526040016000205460ff1660048111156111f8576111f8611713565b141561148f5760006002600085600a81111561121657611216611713565b600a81111561122757611227611713565b815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c49190611ada565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600860205260409020549091506112fb9060ff163084610e8b565b8073ffffffffffffffffffffffffffffffffffffffff1663095ea7b36002600087600a81111561132d5761132d611713565b600a81111561133e5761133e611713565b81526020810191909152604090810160002054905160e083901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602481018590526044016020604051808303816000875af11580156113c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e69190611a3b565b506002600085600a8111156113fd576113fd611713565b600a81111561140e5761140e611713565b8152602081019190915260409081016000205490517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810184905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f1990604401600060405180830381600087803b158015610fd857600080fd5b60016003600085600a8111156114a7576114a7611713565b600a8111156114b8576114b8611713565b815260208101919091526040016000205460ff1660048111156114dd576114dd611713565b14156115b4576002600084600a8111156114f9576114f9611713565b600a81111561150a5761150a611713565b8152602081019190915260409081016000205490517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f19906044016020604051808303816000875af1158015611590573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a49190611a3b565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f74657374546f6b656e53756974653a20547279696e6720746f207472616e736660448201527f657220756e6b6e6f776e20746f6b656e000000000000000000000000000000006064820152608401610990565b6002600084600a81111561165257611652611713565b600a81111561166357611663611713565b8152602081019190915260409081016000205490517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490529091169063a9059cbb90604401610a2a565b73ffffffffffffffffffffffffffffffffffffffff811681146116f357600080fd5b50565b60006020828403121561170857600080fd5b8135610881816116d1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60208101600b831061175657611756611713565b91905290565b60006020828403121561176e57600080fd5b5035919050565b8035600b8110610cfb57600080fd5b60006020828403121561179657600080fd5b61088182611775565b60005b838110156117ba5781810151838201526020016117a2565b83811115610a6d5750506000910152565b60208152600082518060208401526117ea81604085016020870161179f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000806080858703121561183257600080fd5b61183b85611775565b9350602085013561184b816116d1565b9250604085013561185b816116d1565b9396929550929360600135925050565b602080825282518282018190526000919060409081850190868401855b828110156118c7578151805173ffffffffffffffffffffffffffffffffffffffff90811686529087015116868501529284019290850190600101611888565b5091979650505050505050565b600080604083850312156118e757600080fd5b6118f083611775565b91506020830135611900816116d1565b809150509250929050565b60008060006060848603121561192057600080fd5b61192984611775565b92506020840135611939816116d1565b91506040840135611949816116d1565b809150509250925092565b60008060006060848603121561196957600080fd5b61197284611775565b92506020840135611982816116d1565b929592945050506040919091013590565b6000806000606084860312156119a857600080fd5b8335611929816116d1565b6000806000606084860312156119c857600080fd5b8335611972816116d1565b602081016005831061175657611756611713565b600181811c908216806119fb57607f821691505b60208210811415611a35577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600060208284031215611a4d57600080fd5b8151801515811461088157600080fd5b600060208284031215611a6f57600080fd5b5051919050565b7fffffffff000000000000000000000000000000000000000000000000000000008316815260008251611ab081600485016020870161179f565b919091016004019392505050565b60008251611ad081846020870161179f565b9190910192915050565b600060208284031215611aec57600080fd5b8151610881816116d156fea264697066735822122010fe735ed069aca27931edce4ba2ff14ec7886bf21b0eea685a884f9200fb49e64736f6c634300080a003360c0604052600d60808190526c2bb930b83832b21022ba3432b960991b60a090815261002e916000919061007a565b50604080518082019091526004808252630ae8aa8960e31b602090920191825261005a9160019161007a565b506002805460ff1916601217905534801561007457600080fd5b5061014e565b82805461008690610113565b90600052602060002090601f0160209004810192826100a857600085556100ee565b82601f106100c157805160ff19168380011785556100ee565b828001600101855582156100ee579182015b828111156100ee5782518255916020019190600101906100d3565b506100fa9291506100fe565b5090565b5b808211156100fa57600081556001016100ff565b600181811c9082168061012757607f821691505b6020821081141561014857634e487b7160e01b600052602260045260246000fd5b50919050565b6109548061015d6000396000f3fe6080604052600436106100cb5760003560e01c806340c10f1911610074578063a9059cbb1161004e578063a9059cbb14610225578063d0e30db014610245578063dd62ed3e1461024d57600080fd5b806340c10f19146101c357806370a08231146101e357806395d89b411461021057600080fd5b806323b872dd116100a557806323b872dd146101575780632e1a7d4d14610177578063313ce5671461019757600080fd5b806306fdde03146100df578063095ea7b31461010a57806318160ddd1461013a57600080fd5b366100da576100d8610285565b005b600080fd5b3480156100eb57600080fd5b506100f46102e0565b6040516101019190610703565b60405180910390f35b34801561011657600080fd5b5061012a61012536600461079f565b61036e565b6040519015158152602001610101565b34801561014657600080fd5b50475b604051908152602001610101565b34801561016357600080fd5b5061012a6101723660046107c9565b6103e7565b34801561018357600080fd5b506100d8610192366004610805565b6105fe565b3480156101a357600080fd5b506002546101b19060ff1681565b60405160ff9091168152602001610101565b3480156101cf57600080fd5b506100d86101de36600461079f565b6106a4565b3480156101ef57600080fd5b506101496101fe36600461081e565b60036020526000908152604090205481565b34801561021c57600080fd5b506100f46106e2565b34801561023157600080fd5b5061012a61024036600461079f565b6106ef565b6100d8610285565b34801561025957600080fd5b50610149610268366004610839565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102a490849061089b565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102ed906108b3565b80601f0160208091040260200160405190810160405280929190818152602001828054610319906108b3565b80156103665780601f1061033b57610100808354040283529160200191610366565b820191906000526020600020905b81548152906001019060200180831161034957829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103d69086815260200190565b60405180910390a350600192915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561041957600080fd5b73ffffffffffffffffffffffffffffffffffffffff8416331480159061048f575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105175773ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020548211156104d157600080fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915281208054849290610511908490610907565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061054c908490610907565b909155505073ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260408120805484929061058690849061089b565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516105ec91815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561061a57600080fd5b3360009081526003602052604081208054839290610639908490610907565b9091555050604051339082156108fc029083906000818181858888f1935050505015801561066b573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260036020526040812080548392906106d990849061089b565b90915550505050565b600180546102ed906108b3565b60006106fc3384846103e7565b9392505050565b600060208083528351808285015260005b8181101561073057858101830151858201604001528201610714565b81811115610742576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461079a57600080fd5b919050565b600080604083850312156107b257600080fd5b6107bb83610776565b946020939093013593505050565b6000806000606084860312156107de57600080fd5b6107e784610776565b92506107f560208501610776565b9150604084013590509250925092565b60006020828403121561081757600080fd5b5035919050565b60006020828403121561083057600080fd5b6106fc82610776565b6000806040838503121561084c57600080fd5b61085583610776565b915061086360208401610776565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156108ae576108ae61086c565b500190565b600181811c908216806108c757607f821691505b60208210811415610901577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000828210156109195761091961086c565b50039056fea26469706673582212206ec943fa4e3b70d8fca6c25b6aa26fa18e8f8952ce3bc4d5afcb443bf3097c0564736f6c634300080a003360806040526000600255600060035534801561001a57600080fd5b506111fa8061002a6000396000f3fe60806040526004361061016e5760003560e01c80637a28fb88116100cb578063bdd17e1c1161007f578063dd62ed3e11610059578063dd62ed3e146103ee578063ee7a7c0414610441578063f5eb42dc1461046157600080fd5b8063bdd17e1c146103ad578063cdb9a21c146103c3578063d5002f2e146103d957600080fd5b8063a1903eab116100b0578063a1903eab1461035a578063a457c2d71461036d578063a9059cbb1461038d57600080fd5b80637a28fb88146102f457806395d89b411461031457600080fd5b806323b872dd1161012257806337cfdaca1161010757806337cfdaca1461020d57806339509351146102b457806370a08231146102d457600080fd5b806323b872dd14610278578063313ce5671461029857600080fd5b806318160ddd1161015357806318160ddd1461020d578063192084511461023057806322301f6e1461025057600080fd5b806306fdde0314610185578063095ea7b3146101dd57600080fd5b366101805761017d6000610481565b50005b600080fd5b34801561019157600080fd5b5060408051808201909152601781527f4c6971756964207374616b656420457468657220322e3000000000000000000060208201525b6040516101d49190610f63565b60405180910390f35b3480156101e957600080fd5b506101fd6101f8366004610fff565b610545565b60405190151581526020016101d4565b34801561021957600080fd5b5061022261055b565b6040519081526020016101d4565b34801561023c57600080fd5b5061022261024b366004611029565b61056b565b34801561025c57600080fd5b5061027661026b366004611042565b600391909155600255565b005b34801561028457600080fd5b506101fd610293366004611064565b6105ab565b3480156102a457600080fd5b50604051601281526020016101d4565b3480156102c057600080fd5b506101fd6102cf366004610fff565b610696565b3480156102e057600080fd5b506102226102ef3660046110a0565b6106d9565b34801561030057600080fd5b5061022261030f366004611029565b61070e565b34801561032057600080fd5b5060408051808201909152600581527f737445544800000000000000000000000000000000000000000000000000000060208201526101c7565b6102226103683660046110a0565b61073a565b34801561037957600080fd5b506101fd610388366004610fff565b610745565b34801561039957600080fd5b506101fd6103a8366004610fff565b6107f9565b3480156103b957600080fd5b5061022260035481565b3480156103cf57600080fd5b5061022260025481565b3480156103e557600080fd5b50610222610806565b3480156103fa57600080fd5b506102226104093660046110bb565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b34801561044d57600080fd5b5061027661045c366004610fff565b610811565b34801561046d57600080fd5b5061022261047c3660046110a0565b61081f565b60003334806104f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f5a45524f5f4445504f534954000000000000000000000000000000000000000060448201526064015b60405180910390fd5b60006104fc8261056b565b9050806105065750805b8160036000828254610518919061111d565b909155506105289050838261084a565b61053383838761093b565b61053d8382610992565b949350505050565b60006105523384846109ea565b50600192915050565b600061056660035490565b905090565b60008061057760035490565b9050806105875750600092915050565b6105a48161059e61059760025490565b8690610b52565b90610b5e565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001602090815260408083203384529091528120548281101561066c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f5452414e534645525f414d4f554e545f455843454544535f414c4c4f57414e4360448201527f450000000000000000000000000000000000000000000000000000000000000060648201526084016104e8565b610677858585610b6a565b61068b85336106868487610bef565b6109ea565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916105529185906106869086610bfb565b73ffffffffffffffffffffffffffffffffffffffff81166000908152602081905260408120546107089061070e565b92915050565b60008061071a60025490565b90508061072a5750600092915050565b6105a48161059e61059760035490565b600061070882610481565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156107e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4445435245415345445f414c4c4f57414e43455f42454c4f575f5a45524f000060448201526064016104e8565b6107ef33856106868487610bef565b5060019392505050565b6000610552338484610b6a565b600061056660025490565b61081b8282610c07565b5050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040812054610708565b73ffffffffffffffffffffffffffffffffffffffff82166108c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4d494e545f544f5f5448455f5a45524f5f41444452455353000000000000000060448201526064016104e8565b80600260008282546108d9919061111d565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205461090e9082610bfb565b73ffffffffffffffffffffffffffffffffffffffff90921660009081526020819052604090209190915550565b6040805183815273ffffffffffffffffffffffffffffffffffffffff83811660208301528516917fed8dd430b1e4bba98e943dc5b157cf7b54d9e12916d6c474ff5733a95001d03b910160405180910390a2505050565b73ffffffffffffffffffffffffffffffffffffffff821660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6109d58461070e565b60405190815260200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff8316610a67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f415050524f56455f46524f4d5f5a45524f5f414444524553530000000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff8216610ae4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f415050524f56455f544f5f5a45524f5f4144445245535300000000000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006105a48284611135565b60006105a48284611172565b6000610b758261056b565b9050610b82848483610d64565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610be191815260200190565b60405180910390a350505050565b60006105a482846111ad565b60006105a4828461111d565b73ffffffffffffffffffffffffffffffffffffffff8216610c84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4255524e5f46524f4d5f5448455f5a45524f5f4144445245535300000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205480821115610d14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4255524e5f414d4f554e545f455843454544535f42414c414e4345000000000060448201526064016104e8565b8160026000828254610d2691906111ad565b90915550610d3690508183610bef565b73ffffffffffffffffffffffffffffffffffffffff9093166000908152602081905260409020929092555050565b73ffffffffffffffffffffffffffffffffffffffff8316610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f5452414e534645525f46524f4d5f5448455f5a45524f5f41444452455353000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff8216610e5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f5452414e534645525f544f5f5448455f5a45524f5f414444524553530000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205480821115610eee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5452414e534645525f414d4f554e545f455843454544535f42414c414e43450060448201526064016104e8565b610ef88183610bef565b73ffffffffffffffffffffffffffffffffffffffff8086166000908152602081905260408082209390935590851681522054610f349083610bfb565b73ffffffffffffffffffffffffffffffffffffffff909316600090815260208190526040902092909255505050565b600060208083528351808285015260005b81811015610f9057858101830151858201604001528201610f74565b81811115610fa2576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ffa57600080fd5b919050565b6000806040838503121561101257600080fd5b61101b83610fd6565b946020939093013593505050565b60006020828403121561103b57600080fd5b5035919050565b6000806040838503121561105557600080fd5b50508035926020909101359150565b60008060006060848603121561107957600080fd5b61108284610fd6565b925061109060208501610fd6565b9150604084013590509250925092565b6000602082840312156110b257600080fd5b6105a482610fd6565b600080604083850312156110ce57600080fd5b6110d783610fd6565b91506110e560208401610fd6565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611130576111306110ee565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561116d5761116d6110ee565b500290565b6000826111a8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000828210156111bf576111bf6110ee565b50039056fea2646970667358221220a5b4f31162ba2b8b3424cef84b31ef91d05a825243602b5fdf758ffb49b8246364736f6c634300080a003360a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a003360c06040523480156200001157600080fd5b506040516200170938038062001709833981016040819052620000349162000266565b8351849084906200004d906003906020850190620000f3565b50805162000063906004906020840190620000f3565b505050620000806200007a6200009d60201b60201c565b620000a1565b60ff9091166080526001600160a01b031660a05250620003479050565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b82805462000101906200030a565b90600052602060002090601f01602090048101928262000125576000855562000170565b82601f106200014057805160ff191683800117855562000170565b8280016001018555821562000170579182015b828111156200017057825182559160200191906001019062000153565b506200017e92915062000182565b5090565b5b808211156200017e576000815560010162000183565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c157600080fd5b81516001600160401b0380821115620001de57620001de62000199565b604051601f8301601f19908116603f0116810190828211818310171562000209576200020962000199565b816040528381526020925086838588010111156200022657600080fd5b600091505b838210156200024a57858201830151818301840152908201906200022b565b838211156200025c5760008385830101525b9695505050505050565b600080600080608085870312156200027d57600080fd5b84516001600160401b03808211156200029557600080fd5b620002a388838901620001af565b95506020870151915080821115620002ba57600080fd5b50620002c987828801620001af565b935050604085015160ff81168114620002e157600080fd5b60608601519092506001600160a01b0381168114620002ff57600080fd5b939692955090935050565b600181811c908216806200031f57607f821691505b602082108114156200034157634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05161138e6200037b600039600081816101f70152818161041f0152610600015260006101a2015261138e6000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80636f307dc3116100b257806395d89b4111610081578063a9059cbb11610066578063a9059cbb146102b5578063dd62ed3e146102c8578063f2fde38b1461030e57600080fd5b806395d89b411461029a578063a457c2d7146102a257600080fd5b80636f307dc3146101f257806370a082311461023e578063715018a6146102745780638da5cb5b1461027c57600080fd5b806323b872dd116100ee57806323b872dd14610188578063313ce5671461019b57806339509351146101cc57806340c10f19146101df57600080fd5b806306fdde0314610120578063095ea7b31461013e57806318160ddd146101615780631e9a695014610173575b600080fd5b610128610321565b604051610135919061112d565b60405180910390f35b61015161014c3660046111c9565b6103b3565b6040519015158152602001610135565b6002545b604051908152602001610135565b6101866101813660046111c9565b6103c9565b005b6101516101963660046111f3565b610491565b60405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610135565b6101516101da3660046111c9565b61057c565b6101866101ed3660046111c9565b6105c5565b6102197f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b61016561024c36600461122f565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610186610691565b60055473ffffffffffffffffffffffffffffffffffffffff16610219565b61012861071e565b6101516102b03660046111c9565b61072d565b6101516102c33660046111c9565b610805565b6101656102d6366004611251565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b61018661031c36600461122f565b610812565b60606003805461033090611284565b80601f016020809104026020016040519081016040528092919081815260200182805461035c90611284565b80156103a95780601f1061037e576101008083540402835291602001916103a9565b820191906000526020600020905b81548152906001019060200180831161038c57829003601f168201915b5050505050905090565b60006103c0338484610942565b50600192915050565b6103d33382610af5565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015610468573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048c91906112d8565b505050565b600061049e848484610ce2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6105718533858403610942565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916103c09185906105c0908690611329565b610942565b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906323b872dd906064016020604051808303816000875af115801561065e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068291906112d8565b5061068d8282610f96565b5050565b60055473ffffffffffffffffffffffffffffffffffffffff163314610712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161055b565b61071c60006110b6565b565b60606004805461033090611284565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156107ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161055b565b6107fb3385858403610942565b5060019392505050565b60006103c0338484610ce2565b60055473ffffffffffffffffffffffffffffffffffffffff163314610893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161055b565b73ffffffffffffffffffffffffffffffffffffffff8116610936576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161055b565b61093f816110b6565b50565b73ffffffffffffffffffffffffffffffffffffffff83166109e4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff8216610a87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8216610b98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015610c4e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290610c8a908490611341565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff8216610e28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610ede576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610f22908490611329565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f8891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161055b565b80600260008282546110259190611329565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152602081905260408120805483929061105f908490611329565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208083528351808285015260005b8181101561115a5785810183015185820160400152820161113e565b8181111561116c576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146111c457600080fd5b919050565b600080604083850312156111dc57600080fd5b6111e5836111a0565b946020939093013593505050565b60008060006060848603121561120857600080fd5b611211846111a0565b925061121f602085016111a0565b9150604084013590509250925092565b60006020828403121561124157600080fd5b61124a826111a0565b9392505050565b6000806040838503121561126457600080fd5b61126d836111a0565b915061127b602084016111a0565b90509250929050565b600181811c9082168061129857607f821691505b602082108114156112d2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156112ea57600080fd5b8151801515811461124a57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561133c5761133c6112fa565b500190565b600082821015611353576113536112fa565b50039056fea26469706673582212203a6db30cd3c097921df4156794aa7973eb848711deeb2cffd7c54a9df1fdb0a564736f6c634300080a003360a060405234801561001057600080fd5b506040516106ca3803806106ca83398101604081905261002f9161006c565b60009190915560ff166080526001805460506001600160501b031991821681179092556004805490911690911790554260028190556003556100a2565b6000806040838503121561007f57600080fd5b82519150602083015160ff8116811461009757600080fd5b809150509250929050565b60805161060e6100bc600039600060d3015261060e6000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80639a6fc8f511610081578063d62ada111161005b578063d62ada11146102dc578063f7a30806146102f4578063feaf968c1461030757600080fd5b80639a6fc8f5146101cd578063bd18ad531461023a578063cd653afc1461024d57600080fd5b806354fd4d50116100b257806354fd4d501461012d57806367e8d83d1461013c5780637284e4161461018e57600080fd5b8063313ce567146100ce5780633fd0875f1461010c575b600080fd5b6100f57f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020015b60405180910390f35b6004546a0100000000000000000000900460ff166040516101039190610441565b60405160018152602001610103565b61018c61014a366004610482565b600480549115156c01000000000000000000000000027fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff909216919091179055565b005b604080518082018252600c81527f7072696365206f7261636c6500000000000000000000000000000000000000006020820152905161010391906104ab565b6102036101db36600461053d565b60015460005460025460035460045469ffffffffffffffffffff948516941691939590929450565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610103565b61018c610248366004610558565b61030f565b61018c61025b366004610579565b6001805469ffffffffffffffffffff9586167fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090911617905560029290925560035560048054919092167fffffffffffffffffffffffffffffffffffffffff00ff00000000000000000000909116176b020000000000000000000000179055565b6102e461035f565b6040519015158152602001610103565b61018c6103023660046105bf565b600055565b610203610385565b600480548291907fffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff166b01000000000000000000000083600281111561035757610357610412565b021790555050565b600454600090610380906b010000000000000000000000900460ff166103d6565b905090565b60008060008060006004600c9054906101000a900460ff16156103a757600080fd5b505060015460005460025460035460045469ffffffffffffffffffff9485169893975091955093509190911690565b600060028260028111156103ec576103ec610412565b14156103f757600080fd5b600182600281111561040b5761040b610412565b1492915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016006831061047c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561049457600080fd5b813580151581146104a457600080fd5b9392505050565b600060208083528351808285015260005b818110156104d8578581018301518582016040015282016104bc565b818111156104ea576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803569ffffffffffffffffffff8116811461053857600080fd5b919050565b60006020828403121561054f57600080fd5b6104a48261051e565b60006020828403121561056a57600080fd5b8135600381106104a457600080fd5b6000806000806080858703121561058f57600080fd5b6105988561051e565b935060208501359250604085013591506105b46060860161051e565b905092959194509250565b6000602082840312156105d157600080fd5b503591905056fea264697066735822122014874f7a973b86501c4c1a8be32490fe902c8f088ee234d25f9b2497e19f9e5264736f6c634300080a0033a26469706673582212201077c49fa98c23aa045b0dc3e47fcfe16cfbf53b5a0e17c1d50d4f81f3bdf4c864736f6c634300080a0033"; - -type PathFinderTestHelperConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: PathFinderTestHelperConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class PathFinderTestHelper__factory extends ContractFactory { - constructor(...args: PathFinderTestHelperConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): PathFinderTestHelper { - return super.attach(address) as PathFinderTestHelper; - } - override connect(signer: Signer): PathFinderTestHelper__factory { - return super.connect(signer) as PathFinderTestHelper__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): PathFinderTestHelperInterface { - return new utils.Interface(_abi) as PathFinderTestHelperInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): PathFinderTestHelper { - return new Contract( - address, - _abi, - signerOrProvider - ) as PathFinderTestHelper; - } -} diff --git a/src/types/factories/contracts/test/pathfinder/SwapPathFinder.t.sol/SwapPathFinderTest__factory.ts b/src/types/factories/contracts/test/pathfinder/SwapPathFinder.t.sol/SwapPathFinderTest__factory.ts deleted file mode 100644 index bfb678e9..00000000 --- a/src/types/factories/contracts/test/pathfinder/SwapPathFinder.t.sol/SwapPathFinderTest__factory.ts +++ /dev/null @@ -1,912 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - SwapPathFinderTest, - SwapPathFinderTestInterface, -} from "../../../../../contracts/test/pathfinder/SwapPathFinder.t.sol/SwapPathFinderTest"; - -const _abi = [ - { - inputs: [ - { - internalType: "enum SwapOperation", - name: "", - type: "uint8", - }, - ], - name: "UnsupportedSwapOperation", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "", - type: "address", - }, - ], - name: "log_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "log_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - name: "log_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "int256", - name: "", - type: "int256", - }, - ], - name: "log_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "address", - name: "val", - type: "address", - }, - ], - name: "log_named_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes", - name: "val", - type: "bytes", - }, - ], - name: "log_named_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes32", - name: "val", - type: "bytes32", - }, - ], - name: "log_named_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - ], - name: "log_named_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "string", - name: "val", - type: "string", - }, - ], - name: "log_named_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - ], - name: "log_named_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "log_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "logs", - type: "event", - }, - { - inputs: [], - name: "IS_TEST", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bool", - name: "withUnderlyings", - type: "bool", - }, - ], - name: "_setUpCurve", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "cft", - outputs: [ - { - internalType: "contract CreditFacadeTestSuite", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditConfigurator", - outputs: [ - { - internalType: "contract CreditConfigurator", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditFacade", - outputs: [ - { - internalType: "contract CreditFacade", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditManager", - outputs: [ - { - internalType: "contract ICreditManagerV2", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "curveAdapter", - outputs: [ - { - internalType: "contract ICurveV1Adapter", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "curveLPPathFinder", - outputs: [ - { - internalType: "contract CurveLPPathFinder", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "curveMetaAdapter", - outputs: [ - { - internalType: "contract ICurveV1Adapter", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "curvePathFinder", - outputs: [ - { - internalType: "contract CurvePathFinder", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "curveV1MetaMock", - outputs: [ - { - internalType: "contract CurveV1MetapoolMock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "curveV1Mock", - outputs: [ - { - internalType: "contract CurveV1Mock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "failed", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "setUp", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_NTP_01_constructor_correctly_sets_initial_values", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_NTP_02_getPathFinder_returns_correct_values", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bool", - name: "isAll", - type: "bool", - }, - ], - name: "test_NTP_03_findAllSwaps_found_a_pair_if_only_one_is_depdloyed", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountIn", - type: "uint256", - }, - { - internalType: "uint16", - name: "slippage", - type: "uint16", - }, - { - internalType: "bool", - name: "isAll", - type: "bool", - }, - { - internalType: "bool", - name: "externalSlippage", - type: "bool", - }, - ], - name: "test_NTP_04_findAllSwaps_found_quotes_INPUT", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountOut", - type: "uint256", - }, - { - internalType: "uint16", - name: "slippage", - type: "uint16", - }, - { - internalType: "bool", - name: "externalSlippage", - type: "bool", - }, - ], - name: "test_NTP_05_findAllSwaps_found_quotes_OUTPUT", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountIn", - type: "uint256", - }, - { - internalType: "uint16", - name: "slippage", - type: "uint16", - }, - { - internalType: "bool", - name: "isAll", - type: "bool", - }, - { - internalType: "bool", - name: "externalSlippage", - type: "bool", - }, - ], - name: "test_NTP_06_findAllSwaps_found_connector_quotes_and_take_the_best_INPUT", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountOut", - type: "uint256", - }, - { - internalType: "uint16", - name: "slippage", - type: "uint16", - }, - { - internalType: "bool", - name: "externalSlippage", - type: "bool", - }, - ], - name: "test_NTP_07_findAllSwaps_found_connector_quotes_and_take_the_best_OUTPUT", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountIn", - type: "uint256", - }, - { - internalType: "uint16", - name: "slippage", - type: "uint16", - }, - { - internalType: "bool", - name: "isAll", - type: "bool", - }, - { - internalType: "bool", - name: "externalSlippage", - type: "bool", - }, - ], - name: "test_NTP_08_getBestDirectPairSwap_found_the_best_swap_with_INPUT_GP_0", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountIn", - type: "uint256", - }, - { - internalType: "uint16", - name: "slippage", - type: "uint16", - }, - { - internalType: "bool", - name: "isAll", - type: "bool", - }, - { - internalType: "bool", - name: "externalSlippage", - type: "bool", - }, - { - internalType: "uint8", - name: "whoWins", - type: "uint8", - }, - ], - name: "test_NTP_08_getBestDirectPairSwap_found_the_best_swap_with_INPUT_GP_non_zero", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountOut", - type: "uint256", - }, - { - internalType: "uint16", - name: "slippage", - type: "uint16", - }, - { - internalType: "bool", - name: "isAll", - type: "bool", - }, - { - internalType: "bool", - name: "externalSlippage", - type: "bool", - }, - ], - name: "test_NTP_09_getBestDirectPairSwap_found_the_best_swap_with_OUTPUT_GP_0", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountOut", - type: "uint256", - }, - { - internalType: "uint16", - name: "slippage", - type: "uint16", - }, - { - internalType: "bool", - name: "externalSlippage", - type: "bool", - }, - { - internalType: "uint8", - name: "whoWins", - type: "uint8", - }, - ], - name: "test_NTP_10_getBestDirectPairSwap_found_the_best_swap_with_OUTPUT_GP_non_zero", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "tokenMasksMap", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "underlying", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "uniV2adapter", - outputs: [ - { - internalType: "contract IUniswapV2Adapter", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "uniV2mock", - outputs: [ - { - internalType: "contract UniswapV2Mock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "uniV2pathFinder", - outputs: [ - { - internalType: "contract UniswapV2PathFinder", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "uniV3adapter", - outputs: [ - { - internalType: "contract IUniswapV3Adapter", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "uniV3mock", - outputs: [ - { - internalType: "contract UniswapV3Mock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "uniV3pathFinder", - outputs: [ - { - internalType: "contract UniswapV3PathFinder", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "yearnAdapter", - outputs: [ - { - internalType: "contract YearnV2Adapter", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "yearnMock", - outputs: [ - { - internalType: "contract YearnV2Mock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "yearnPathFinder", - outputs: [ - { - internalType: "contract YearnPathFinder", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x60806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d00011790553480156200003a57600080fd5b506202ac2a806200004c6000396000f3fe60806040523480156200001157600080fd5b50600436106200028d5760003560e01c80639b6a80a7116200015f578063df51443311620000cc578063f7a6a10a1162000097578063f9aa028a116200007a578063f9aa028a1462000655578063fa7626d41462000676578063fca2cea5146200068457600080fd5b8063f7a6a10a1462000627578063f986740c146200063e57600080fd5b8063df514433146200059e578063eeef8dd014620005bf578063f310c6da14620005e0578063f67c5bd0146200060157600080fd5b8063bb49900a116200012a578063cac283c8116200010d578063cac283c8146200053b578063ceab1386146200055c578063d8d7ca3c146200057d57600080fd5b8063bb49900a1462000503578063c12c21c0146200051a57600080fd5b80639b6a80a7146200048f5780639f2f4bed14620004b05780639f8ad9ec14620004c7578063ba414fa614620004e857600080fd5b80632b9d0d2811620001fe5780634b7b24a511620001c95780635d9bb10311620001ac5780635d9bb10314620004365780635ebb2361146200044d5780636f307dc3146200046e57600080fd5b80634b7b24a514620003f45780635a521cf8146200041557600080fd5b80632b9d0d28146200039b5780632f7a188114620003b25780633669eb9c14620003d35780633e1a8dd314620003ea57600080fd5b80631c9a755f116200025c57806322a1398c116200023f57806322a1398c146200034f578063287b94d7146200035957806329d351d8146200037a57600080fd5b80631c9a755f14620003175780632294bb0f146200033857600080fd5b80630a9254e414620002925780631398d247146200029e5780631497761e14620002b557806318486d631462000300575b600080fd5b6200029c620006a5565b005b6200029c620002af36600462007f7a565b6200078f565b600754620002d69073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6200029c6200031136600462007f7a565b62000b9c565b601254620002d69073ffffffffffffffffffffffffffffffffffffffff1681565b6200029c6200034936600462007fe4565b62000fa9565b6200029c620014d3565b600b54620002d69073ffffffffffffffffffffffffffffffffffffffff1681565b600854620002d69073ffffffffffffffffffffffffffffffffffffffff1681565b6200029c620003ac3660046200803a565b62001766565b600254620002d69073ffffffffffffffffffffffffffffffffffffffff1681565b6200029c620003e43660046200803a565b62002935565b6200029c62002e46565b600a54620002d69073ffffffffffffffffffffffffffffffffffffffff1681565b600e54620002d69073ffffffffffffffffffffffffffffffffffffffff1681565b6200029c620004473660046200805a565b62002f9f565b600c54620002d69073ffffffffffffffffffffffffffffffffffffffff1681565b600554620002d69073ffffffffffffffffffffffffffffffffffffffff1681565b601354620002d69073ffffffffffffffffffffffffffffffffffffffff1681565b6200029c620004c13660046200809f565b6200326d565b600d54620002d69073ffffffffffffffffffffffffffffffffffffffff1681565b620004f2620038a7565b6040519015158152602001620002f7565b6200029c620005143660046200805a565b62003a11565b600154620002d69073ffffffffffffffffffffffffffffffffffffffff1681565b601454620002d69073ffffffffffffffffffffffffffffffffffffffff1681565b601154620002d69073ffffffffffffffffffffffffffffffffffffffff1681565b600954620002d69073ffffffffffffffffffffffffffffffffffffffff1681565b600454620002d69073ffffffffffffffffffffffffffffffffffffffff1681565b600f54620002d69073ffffffffffffffffffffffffffffffffffffffff1681565b601554620002d69073ffffffffffffffffffffffffffffffffffffffff1681565b62000618620006123660046200812d565b50600190565b604051908152602001620002f7565b6200029c6200063836600462007f7a565b62003e0e565b6200029c6200064f36600462007f7a565b62004079565b600354620002d69073ffffffffffffffffffffffffffffffffffffffff1681565b600054620004f29060ff1681565b601054620002d69073ffffffffffffffffffffffffffffffffffffffff1681565b620006b1600162001766565b620006bb620042af565b620006c562004667565b600b54600f5460125460405173ffffffffffffffffffffffffffffffffffffffff938416939283169290911690620006fd9062007eb0565b73ffffffffffffffffffffffffffffffffffffffff938416815291831660208301529091166040820152606001604051809103906000f08015801562000747573d6000803e3d6000fd5b50601680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000546040517f4c63e56200000000000000000000000000000000000000000000000000000000815261271061ffff86161060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff1690634c63e56290602401600060405180830381600087803b1580156200080857600080fd5b505af11580156200081d573d6000803e3d6000fd5b505060005462010000900473ffffffffffffffffffffffffffffffffffffffff169150634c63e5629050600a861180156200087057506200086d6b033b2e3c9fd0803ce80000006103e86200817c565b86105b6040518263ffffffff1660e01b815260040162000891911515815260200190565b600060405180830381600087803b158015620008ac57600080fd5b505af1158015620008c1573d6000803e3d6000fd5b50505050600061138890506000620008ed84620008e0576000620008e3565b60015b8787868662004a82565b60165490915060009073ffffffffffffffffffffffffffffffffffffffff166337c605f7836200091c62004f00565b6040518363ffffffff1660e01b81526004016200093b9291906200831e565b6000604051808303816000875af11580156200095b573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620009a391908101906200858b565b90506000620009b48860046200817c565b905062000a2882600081518110620009d057620009d06200865c565b6020026020010151620009ec8584600160006001600062004f48565b6040518060400160405280601681526020017f43555256452051554f544520494e434f52524543543a0000000000000000000081525062004fc2565b6103e86103e562000a3b8a60026200817c565b62000a4791906200817c565b62000a5391906200868b565b9050600062000a6b84604001518560600151620050e9565b905062000ada8360018151811062000a875762000a876200865c565b602002602001015162000a9e8685856000620051b1565b6040518060400160405280601781526020017f554e495f56322051554f544520494e434f52524543543a00000000000000000081525062004fc2565b620f424062000aea8682620086c7565b62ffffff16600a62000afe8c600f6200817c565b62000b0a91906200868b565b62000b1691906200817c565b62000b2291906200868b565b915062000b918360028151811062000b3e5762000b3e6200865c565b602002602001015162000b55868589600062005227565b6040518060400160405280601781526020017f554e495f56332051554f544520494e434f52524543543a00000000000000000081525062004fc2565b505050505050505050565b6000546040517f4c63e56200000000000000000000000000000000000000000000000000000000815261271061ffff86161060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff1690634c63e56290602401600060405180830381600087803b15801562000c1557600080fd5b505af115801562000c2a573d6000803e3d6000fd5b505060005462010000900473ffffffffffffffffffffffffffffffffffffffff169150634c63e5629050600a8611801562000c7d575062000c7a6b033b2e3c9fd0803ce80000006103e86200817c565b86105b6040518263ffffffff1660e01b815260040162000c9e911515815260200190565b600060405180830381600087803b15801562000cb957600080fd5b505af115801562000cce573d6000803e3d6000fd5b506103e89250611388915060009050808062000cff8762000cf157600062000cf4565b60015b8a8a8989896200527d565b601654929550909350915060009073ffffffffffffffffffffffffffffffffffffffff166337c605f78562000d3362004f00565b6040518363ffffffff1660e01b815260040162000d529291906200831e565b6000604051808303816000875af115801562000d72573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262000dba91908101906200858b565b905060006103e86103e5818162000dd38f60026200817c565b62000ddf91906200817c565b62000deb91906200868b565b62000df89060026200817c565b62000e0491906200817c565b62000e1091906200868b565b9050600062000e29866040015186886060015162006122565b905062000e5c8360008151811062000e455762000e456200865c565b602002602001015162000a9e8885856000620051b1565b5060408086015160608088015183517fffffffffffffffffffffffffffffffffffffffff00000000000000000000000093831b841660208201527fffffff000000000000000000000000000000000000000000000000000000000060e88d811b8216603484015289851b861660378401528c901b16604b820152911b909116604e820152815180820360420181526062909101909152620f424062000f028982620086c7565b62ffffff1662000f148e60026200817c565b62000f2091906200817c565b62000f2c91906200868b565b9150620f424062000f3e8882620086c7565b62ffffff1662000f508460026200817c565b62000f5c91906200817c565b62000f6891906200868b565b915062000f9b8360018151811062000f845762000f846200865c565b602002602001015162000b5588858560006200623e565b505050505050505050505050565b6000546040517f4c63e56200000000000000000000000000000000000000000000000000000000815261271061ffff86161060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff1690634c63e56290602401600060405180830381600087803b1580156200102257600080fd5b505af115801562001037573d6000803e3d6000fd5b505060005462010000900473ffffffffffffffffffffffffffffffffffffffff169150634c63e56290506103e8861180156200108b5750620010886b033b2e3c9fd0803ce80000006103e86200817c565b86105b6040518263ffffffff1660e01b8152600401620010ac911515815260200190565b600060405180830381600087803b158015620010c757600080fd5b505af1158015620010dc573d6000803e3d6000fd5b50506000546040517f4c63e562000000000000000000000000000000000000000000000000000000008152600260ff86161060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169250634c63e5629150602401600060405180830381600087803b1580156200115757600080fd5b505af11580156200116c573d6000803e3d6000fd5b505050506000611388905060006200118960028787878662004a82565b600f54600e54604083810151606085015191517f4533066600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff93841660048201529083166024820152908216604482015261300c60648201529293501690634533066690608401600060405180830381600087803b1580156200121d57600080fd5b505af115801562001232573d6000803e3d6000fd5b5050505060006103e56002886200124a91906200868b565b62001258906103e86200817c565b6200126491906200868b565b905060006200127784620f4240620086c7565b62ffffff16600f6200128b8a600a6200817c565b6200129791906200868b565b620012a690620f42406200817c565b620012b291906200868b565b9050600060ff861615620013145761300c6b033b2e3c9fd0803ce8000000620012dc8585620086ee565b620012e990600162008708565b620012f591906200817c565b6200130191906200868b565b6200130e90600162008708565b62001317565b60005b60165490915060009073ffffffffffffffffffffffffffffffffffffffff1663ebf9deac866200134662004f00565b856040518463ffffffff1660e01b8152600401620013679392919062008723565b6000604051808303816000875af115801562001387573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620013cf91908101906200875d565b90507f2cab9790510fd8bdfbd2115288db33fec66691d476efc5427cfd4c09693017556b033b2e3c9fd0803ce80000006200140d8461300c6200817c565b6200141991906200868b565b62001425908662008708565b60405190815260200160405180910390a16040518381527f2cab9790510fd8bdfbd2115288db33fec66691d476efc5427cfd4c09693017559060200160405180910390a160ff8716620014a65760006200148886604001518760600151620050e9565b90506200149f8262000a9e88888561300c620051b1565b50620014c7565b8660ff1660011415620014c757620014c78162000b5587868a600062005227565b50505050505050505050565b6016546007546040517f8e8a085200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152620015ae929190911690638e8a085290602401602060405180830381865afa1580156200154d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200157391906200879e565b600b546040805160608101909152602580825273ffffffffffffffffffffffffffffffffffffffff909216916202abab602083013962006294565b601654600d546040517f8e8a085200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015262001689929190911690638e8a085290602401602060405180830381865afa15801562001628573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200164e91906200879e565b600f546040805160608101909152602580825273ffffffffffffffffffffffffffffffffffffffff909216916202ab86602083013962006294565b6016546010546040517f8e8a085200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015262001764929190911690638e8a085290602401602060405180830381865afa15801562001703573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200172991906200879e565b6012546040805160608101909152602580825273ffffffffffffffffffffffffffffffffffffffff909216916202abd0602083013962006294565b565b620017706200630d565b60085473ffffffffffffffffffffffffffffffffffffffff1662002932576006546040517f67b42645000000000000000000000000000000000000000000000000000000008152600091620019739173ffffffffffffffffffffffffffffffffffffffff909116906367b4264590620017ef90600790600401620087be565b602060405180830381865afa1580156200180d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200183391906200879e565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906367b42645906200188c90600890600401620087be565b602060405180830381865afa158015620018aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620018d091906200879e565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906367b42645906200192990600990600401620087be565b602060405180830381865afa15801562001947573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200196d91906200879e565b62006122565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815291925060009162001b0f9173ffffffffffffffffffffffffffffffffffffffff16906367b4264590620019d590600190600401620087be565b602060405180830381865afa158015620019f3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001a1991906200879e565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906367b426459062001a7290600290600401620087be565b602060405180830381865afa15801562001a90573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001ab691906200879e565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906367b42645906200192990600590600401620087be565b60035490915073ffffffffffffffffffffffffffffffffffffffff1615158062001b37575082155b1562001b4257905060605b818160405162001b529062007ebe565b62001b5f929190620087db565b604051809103906000f08015801562001b7c573d6000803e3d6000fd5b50600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169182179055604080517ffc0c546a00000000000000000000000000000000000000000000000000000000815290516000929163fc0c546a9160048083019260209291908290030181865afa15801562001c19573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c3f91906200879e565b6000546040517fc657c71800000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff62010000909104169063c657c7189062001cef90849060040173ffffffffffffffffffffffffffffffffffffffff9190911681526040602082018190526004908201527f3343525600000000000000000000000000000000000000000000000000000000606082015260800190565b600060405180830381600087803b15801562001d0a57600080fd5b505af115801562001d1f573d6000803e3d6000fd5b505060035473ffffffffffffffffffffffffffffffffffffffff16159150620025339050576000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001db4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001dda91906200879e565b60085460048054604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9485169490921692632630c12f9282820192602092908290030181865afa15801562001e4f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001e7591906200879e565b73ffffffffffffffffffffffffffffffffffffffff16639dcb511a8760008151811062001ea65762001ea66200865c565b60200260200101516040518263ffffffff1660e01b815260040162001ee7919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa15801562001f05573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001f2b91906200879e565b60048054604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff90921692632630c12f9282820192602092908290030181865afa15801562001f99573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001fbf91906200879e565b73ffffffffffffffffffffffffffffffffffffffff16639dcb511a8860018151811062001ff05762001ff06200865c565b60200260200101516040518263ffffffff1660e01b815260040162002031919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa1580156200204f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200207591906200879e565b60048054604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff90921692632630c12f9282820192602092908290030181865afa158015620020e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200210991906200879e565b73ffffffffffffffffffffffffffffffffffffffff16639dcb511a896002815181106200213a576200213a6200865c565b60200260200101516040518263ffffffff1660e01b81526004016200217b919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa15801562002199573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620021bf91906200879e565b604051620021cd9062007ecc565b73ffffffffffffffffffffffffffffffffffffffff95861681529385166020850152918416604084015283166060830152909116608082015260c060a082018190526011908201527f43757276654c503350726963654665656400000000000000000000000000000060e082015261010001604051809103906000f0801580156200225c573d6000803e3d6000fd5b506000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291925062010000900473ffffffffffffffffffffffffffffffffffffffff16906306447d5690602401600060405180830381600087803b158015620022e457600080fd5b505af1158015620022f9573d6000803e3d6000fd5b505060048054604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9092169450632630c12f935080830192602092918290030181865afa1580156200236b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200239191906200879e565b6040517fe8a97a3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301528381166024830152919091169063e8a97a3e90604401600060405180830381600087803b1580156200240557600080fd5b505af11580156200241a573d6000803e3d6000fd5b50506003546040517f3e7c88d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152611e7860248301529091169250633e7c88d69150604401600060405180830381600087803b1580156200249457600080fd5b505af1158015620024a9573d6000803e3d6000fd5b50505050600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200251857600080fd5b505af11580156200252d573d6000803e3d6000fd5b50505050505b60015460085460405173ffffffffffffffffffffffffffffffffffffffff92831692909116908390600090620025699062007eda565b73ffffffffffffffffffffffffffffffffffffffff9485168152928416602084015290831660408301529091166060820152608001604051809103906000f080158015620025bb573d6000803e3d6000fd5b50600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169190911790556040516200260f9062007ee8565b604051809103906000f0801580156200262c573d6000803e3d6000fd5b50600b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283169081179091556008546040517fd914cd4b000000000000000000000000000000000000000000000000000000008152921660048301529063d914cd4b90602401600060405180830381600087803b158015620026c657600080fd5b505af1158015620026db573d6000803e3d6000fd5b5050600054600754604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152600d60448201527f43555256455f414441505445520000000000000000000000000000000000000060648201526201000090920416925063c657c7189150608401600060405180830381600087803b1580156200278b57600080fd5b505af1158015620027a0573d6000803e3d6000fd5b5050600054600854604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152600a60448201527f43555256455f4d4f434b0000000000000000000000000000000000000000000060648201526201000090920416925063c657c7189150608401600060405180830381600087803b1580156200285057600080fd5b505af115801562002865573d6000803e3d6000fd5b5050600054600b54604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152601060448201527f43555256455f5041544846494e4445520000000000000000000000000000000060648201526201000090920416925063c657c7189150608401600060405180830381600087803b1580156200291557600080fd5b505af11580156200292a573d6000803e3d6000fd5b505050505050505b50565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815260009173ffffffffffffffffffffffffffffffffffffffff16906367b42645906200298f90600290600401620087be565b602060405180830381865afa158015620029ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620029d391906200879e565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815291925060009173ffffffffffffffffffffffffffffffffffffffff909116906367b426459062002a3290600190600401620087be565b602060405180830381865afa15801562002a50573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002a7691906200879e565b905060005b600381101562002e40578062002b33576011546040517f5911fb9a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301526b033b2e3c9fd0803ce8000000604483015290911690635911fb9a906064015b600060405180830381600087803b15801562002b1457600080fd5b505af115801562002b29573d6000803e3d6000fd5b5050505062002c80565b806001141562002bd657600e5473ffffffffffffffffffffffffffffffffffffffff16635911fb9a848462002b766b033b2e3c9fd0803ce800000060026200817c565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff9384166004820152929091166024830152604482015260640162002af9565b806002141562002c80576008546040517f56ac350300000000000000000000000000000000000000000000000000000000815260006004820152600160248201526b033b2e3c9fd0803ce8000000604482015273ffffffffffffffffffffffffffffffffffffffff909116906356ac350390606401600060405180830381600087803b15801562002c6657600080fd5b505af115801562002c7b573d6000803e3d6000fd5b505050505b60006040518061010001604052808662002c9c57600062002c9f565b60015b600281111562002cb35762002cb3620081bc565b815273c4375b7de8af5a38a93548eb8453a498222c4ff2602082015273ffffffffffffffffffffffffffffffffffffffff86811660408301528516606082015260800162002cff606090565b8152670de0b6b3a7640000602082015261012c6040820152600060609091018190526016549192509073ffffffffffffffffffffffffffffffffffffffff166337c605f78362002d4e62004f00565b6040518363ffffffff1660e01b815260040162002d6d9291906200831e565b6000604051808303816000875af115801562002d8d573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262002dd591908101906200858b565b905062002e28815184600162002dec919062008708565b6040518060400160405280601881526020017f496e636f727265637420726573756c7473206c656e677468000000000000000081525062006437565b5050808062002e3790620087f0565b91505062002a7b565b50505050565b601654604080517f287b94d7000000000000000000000000000000000000000000000000000000008152905162002eb99273ffffffffffffffffffffffffffffffffffffffff169163287b94d79160048083019260209291908290030181865afa1580156200154d573d6000803e3d6000fd5b601654604080517feeef8dd0000000000000000000000000000000000000000000000000000000008152905162002f2c9273ffffffffffffffffffffffffffffffffffffffff169163eeef8dd09160048083019260209291908290030181865afa15801562001628573d6000803e3d6000fd5b601654604080517f1c9a755f0000000000000000000000000000000000000000000000000000000081529051620017649273ffffffffffffffffffffffffffffffffffffffff1691631c9a755f9160048083019260209291908290030181865afa15801562001703573d6000803e3d6000fd5b6000546040517f4c63e56200000000000000000000000000000000000000000000000000000000815261271061ffff85161060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff1690634c63e56290602401600060405180830381600087803b1580156200301857600080fd5b505af11580156200302d573d6000803e3d6000fd5b505060005462010000900473ffffffffffffffffffffffffffffffffffffffff169150634c63e56290506103e8851180156200308157506200307e6b033b2e3c9fd0803ce80000006103e86200817c565b85105b6040518263ffffffff1660e01b8152600401620030a2911515815260200190565b600060405180830381600087803b158015620030bd57600080fd5b505af1158015620030d2573d6000803e3d6000fd5b50505050600061138890506000620030ef60028686868662004a82565b60165490915060009073ffffffffffffffffffffffffffffffffffffffff166337c605f7836200311e62004f00565b6040518363ffffffff1660e01b81526004016200313d9291906200831e565b6000604051808303816000875af11580156200315d573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620031a591908101906200858b565b905060006103e5620031b96002896200868b565b620031c7906103e86200817c565b620031d391906200868b565b90506000620031eb84604001518560600151620050e9565b9050620032078360008151811062000a875762000a876200865c565b6200321685620f4240620086c7565b62ffffff16600f6200322a8a600a6200817c565b6200323691906200868b565b6200324590620f42406200817c565b6200325191906200868b565b91506200292a8360018151811062000b3e5762000b3e6200865c565b6000546040517f4c63e56200000000000000000000000000000000000000000000000000000000815261271061ffff87161060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff1690634c63e56290602401600060405180830381600087803b158015620032e657600080fd5b505af1158015620032fb573d6000803e3d6000fd5b505060005462010000900473ffffffffffffffffffffffffffffffffffffffff169150634c63e5629050600a871180156200334e57506200334b6b033b2e3c9fd0803ce80000006103e86200817c565b87105b6040518263ffffffff1660e01b81526004016200336f911515815260200190565b600060405180830381600087803b1580156200338a57600080fd5b505af11580156200339f573d6000803e3d6000fd5b50506000546040517f4c63e562000000000000000000000000000000000000000000000000000000008152600360ff86161060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169250634c63e5629150602401600060405180830381600087803b1580156200341a57600080fd5b505af11580156200342f573d6000803e3d6000fd5b505050506000611388905060006200345b856200344e57600062003451565b60015b8888878662004a82565b600b54600854604083810151606085015191517f4533066600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff93841660048201529083166024820152908216604482015261300c60648201529293501690634533066690608401600060405180830381600087803b158015620034ef57600080fd5b505af115801562003504573d6000803e3d6000fd5b505050506000620035158262006484565b620035225760006200352f565b6200352f8860046200817c565b905060006103e86103e5620035468b60026200817c565b6200355291906200817c565b6200355e91906200868b565b90506000620f4240620035728682620086c7565b62ffffff16600a620035868d600f6200817c565b6200359291906200868b565b6200359e91906200817c565b620035aa91906200868b565b9050600060ff871615620036145761300c6b033b2e3c9fd0803ce80000008860ff16600114620035db5783620035dd565b845b620035e99087620086ee565b620035f591906200817c565b6200360191906200868b565b6200360e90600162008708565b62003617565b60005b905060008760ff166002146200362f5760006200366e565b816b033b2e3c9fd0803ce8000000620036498587620086ee565b6200365591906200817c565b6200366191906200868b565b6200366e90600162008708565b600f54600e5460408981015160608b015191517f4533066600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff938416600482015290831660248201529082166044820152606481018490529293501690634533066690608401600060405180830381600087803b1580156200370157600080fd5b505af115801562003716573d6000803e3d6000fd5b50506016546000925073ffffffffffffffffffffffffffffffffffffffff16905063ebf9deac886200374762004f00565b866040518463ffffffff1660e01b8152600401620037689392919062008723565b6000604051808303816000875af115801562003788573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620037d091908101906200875d565b905060ff891662003837576200383181620037f5898960016000600161300c62004f48565b6040518060400160405280601c81526020017f494e434f52524543542051554f5445205741532053454c45435445440000000081525062004fc2565b62003898565b8860ff1660011415620038775760006200385a88604001518960600151620050e9565b9050620038708262000a9e8a89856000620051b1565b5062003898565b8860ff16600214156200389857620038988162000b5589878c600062005227565b50505050505050505050505050565b60008054610100900460ff1615620038c85750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1562003a0c5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000008284015282518083038401815260608301909352600092909162003970917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016200882c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052620039aa9162008876565b6000604051808303816000865af19150503d8060008114620039e9576040519150601f19603f3d011682016040523d82523d6000602084013e620039ee565b606091505b509150508080602001905181019062003a08919062008894565b9150505b919050565b6000546040517f4c63e56200000000000000000000000000000000000000000000000000000000815261271061ffff85161060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff1690634c63e56290602401600060405180830381600087803b15801562003a8a57600080fd5b505af115801562003a9f573d6000803e3d6000fd5b505060005462010000900473ffffffffffffffffffffffffffffffffffffffff169150634c63e56290506103e88511801562003af3575062003af06b033b2e3c9fd0803ce80000006103e86200817c565b85105b6040518263ffffffff1660e01b815260040162003b14911515815260200190565b600060405180830381600087803b15801562003b2f57600080fd5b505af115801562003b44573d6000803e3d6000fd5b506103e89250611388915060009050808062003b66600289898989896200527d565b925092509250600062003b83846040015184866060015162006122565b60608086015160408088015181517fffffffffffffffffffffffffffffffffffffffff00000000000000000000000093851b841660208201527fffffff000000000000000000000000000000000000000000000000000000000060e88c811b8216603484015289871b861660378401528d901b16604b820152931b909116604e830152805180830360420181526062909201905290915060009060165490915060009073ffffffffffffffffffffffffffffffffffffffff166337c605f78762003c4c62004f00565b6040518363ffffffff1660e01b815260040162003c6b9291906200831e565b6000604051808303816000875af115801562003c8b573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262003cd391908101906200858b565b905060006103e560026103e560028f62003cee91906200868b565b62003cfc906103e86200817c565b62003d0891906200868b565b62003d1491906200868b565b62003d22906103e86200817c565b62003d2e91906200868b565b905062003d618260008151811062003d4a5762003d4a6200865c565b602002602001015162000a9e8984886000620051b1565b62003d7562ffffff8916620f4240620086ee565b62003d8260028e6200868b565b62003d9190620f42406200817c565b62003d9d91906200868b565b905062003db362ffffff8a16620f4240620086ee565b62003dc06002836200868b565b62003dcf90620f42406200817c565b62003ddb91906200868b565b905062000f9b8260018151811062003df75762003df76200865c565b602002602001015162000b5589848760006200623e565b6000546040517f4c63e56200000000000000000000000000000000000000000000000000000000815261271061ffff86161060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff1690634c63e56290602401600060405180830381600087803b15801562003e8757600080fd5b505af115801562003e9c573d6000803e3d6000fd5b505060005462010000900473ffffffffffffffffffffffffffffffffffffffff169150634c63e56290506103e88611801562003ef0575062003eed6b033b2e3c9fd0803ce80000006103e86200817c565b86105b6040518263ffffffff1660e01b815260040162003f11911515815260200190565b600060405180830381600087803b15801562003f2c57600080fd5b505af115801562003f41573d6000803e3d6000fd5b5050505060006113889050600062003f5e60028787868662004a82565b60165490915060009073ffffffffffffffffffffffffffffffffffffffff1663ebf9deac8362003f8d62004f00565b60006040518463ffffffff1660e01b815260040162003faf9392919062008723565b6000604051808303816000875af115801562003fcf573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200401791908101906200875d565b905060006103e56200402b60028a6200868b565b62004039906103e86200817c565b6200404591906200868b565b905060006200405d84604001518560600151620050e9565b905062000b9183620040738685856000620051b1565b62006534565b6000546040517f4c63e56200000000000000000000000000000000000000000000000000000000815261271061ffff86161060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff1690634c63e56290602401600060405180830381600087803b158015620040f257600080fd5b505af115801562004107573d6000803e3d6000fd5b505060005462010000900473ffffffffffffffffffffffffffffffffffffffff169150634c63e5629050600a861180156200415a5750620041576b033b2e3c9fd0803ce80000006103e86200817c565b86105b6040518263ffffffff1660e01b81526004016200417b911515815260200190565b600060405180830381600087803b1580156200419657600080fd5b505af1158015620041ab573d6000803e3d6000fd5b50505050600061138890506000620041ca84620008e0576000620008e3565b60165490915060009073ffffffffffffffffffffffffffffffffffffffff1663ebf9deac83620041f962004f00565b60006040518463ffffffff1660e01b81526004016200421b9392919062008723565b6000604051808303816000875af11580156200423b573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200428391908101906200875d565b90506000620042948860046200817c565b90506200292a82620037f58584600160006001600062004f48565b620042b96200630d565b604051620042c79062007ef6565b604051809103906000f080158015620042e4573d6000803e3d6000fd5b50600e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283169081179091556001546040519216916200433d9062007f04565b73ffffffffffffffffffffffffffffffffffffffff928316815291166020820152604001604051809103906000f0801580156200437e573d6000803e3d6000fd5b50600d80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055604051620043d29062007f12565b604051809103906000f080158015620043ef573d6000803e3d6000fd5b50600f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600054600d54604080517fc657c71800000000000000000000000000000000000000000000000000000000815291841660048301526024820152601260448201527f554e49535741505f56325f4144415054455200000000000000000000000000006064820152620100009091049091169063c657c71890608401600060405180830381600087803b158015620044c757600080fd5b505af1158015620044dc573d6000803e3d6000fd5b5050600054600e54604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152600f60448201527f554e49535741505f56325f4d4f434b000000000000000000000000000000000060648201526201000090920416925063c657c7189150608401600060405180830381600087803b1580156200458c57600080fd5b505af1158015620045a1573d6000803e3d6000fd5b5050600054600f54604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152601560448201527f554e49535741505f56325f5041544846494e444552000000000000000000000060648201526201000090920416925063c657c71891506084015b600060405180830381600087803b1580156200465257600080fd5b505af115801562002e40573d6000803e3d6000fd5b620046716200630d565b6040516200467f9062007f20565b604051809103906000f0801580156200469c573d6000803e3d6000fd5b50601180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316908117909155600154604051921691620046f59062007f2e565b73ffffffffffffffffffffffffffffffffffffffff928316815291166020820152604001604051809103906000f08015801562004736573d6000803e3d6000fd5b50601080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169190911790556040516200478a9062007f3c565b604051809103906000f080158015620047a7573d6000803e3d6000fd5b50601280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283169081179091556011546040517fc67903ea00000000000000000000000000000000000000000000000000000000815292166004830181905260248301529063c67903ea90604401600060405180830381600087803b1580156200484857600080fd5b505af11580156200485d573d6000803e3d6000fd5b5050600054601054604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152601260448201527f554e49535741505f56335f41444150544552000000000000000000000000000060648201526201000090920416925063c657c7189150608401600060405180830381600087803b1580156200490d57600080fd5b505af115801562004922573d6000803e3d6000fd5b5050600054601154604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152600f60448201527f554e49535741505f56335f4d4f434b000000000000000000000000000000000060648201526201000090920416925063c657c7189150608401600060405180830381600087803b158015620049d257600080fd5b505af1158015620049e7573d6000803e3d6000fd5b5050600054601254604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152601560448201527f554e49535741505f56335f5041544846494e444552000000000000000000000060648201526201000090920416925063c657c718915060840162004637565b60408051610100810182526000808252602082018190529181018290526060808201839052608082015260a0810182905260c0810182905260e08101919091526006546040517f67b4264500000000000000000000000000000000000000000000000000000000815260009173ffffffffffffffffffffffffffffffffffffffff16906367b426459062004b1c90600290600401620087be565b602060405180830381865afa15801562004b3a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004b6091906200879e565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815291925060009173ffffffffffffffffffffffffffffffffffffffff909116906367b426459062004bbf90600190600401620087be565b602060405180830381865afa15801562004bdd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004c0391906200879e565b60085490915073ffffffffffffffffffffffffffffffffffffffff166356ac35036001600062004c416b033b2e3c9fd0803ce800000060046200817c565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152600f93840b60048201529190920b60248201526044810191909152606401600060405180830381600087803b15801562004ca657600080fd5b505af115801562004cbb573d6000803e3d6000fd5b5050600e5473ffffffffffffffffffffffffffffffffffffffff169150635911fb9a9050838362004cfa6b033b2e3c9fd0803ce800000060026200817c565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b15801562004d6f57600080fd5b505af115801562004d84573d6000803e3d6000fd5b505060115473ffffffffffffffffffffffffffffffffffffffff169150632ccbc99b9050838387600a62004dc66b033b2e3c9fd0803ce8000000600f6200817c565b62004dd291906200868b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b16815273ffffffffffffffffffffffffffffffffffffffff948516600482015293909216602484015262ffffff1660448301526064820152608401600060405180830381600087803b15801562004e5157600080fd5b505af115801562004e66573d6000803e3d6000fd5b5050505060405180610100016040528089600281111562004e8b5762004e8b620081bc565b815273c4375b7de8af5a38a93548eb8453a498222c4ff2602082015273ffffffffffffffffffffffffffffffffffffffff84811660408301528316606082015260800162004ed7606090565b81526020018881526020018761ffff168152602001861515815250925050505b95945050505050565b600754600d54601054601354600a5460609462004f439473ffffffffffffffffffffffffffffffffffffffff918216949082169390821692908216911662006554565b905090565b62004f866040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b604051806080016040528062004fa0898989898962006715565b8152602081018890526001604082015260600183905290509695505050505050565b62004ffd8260400151151584604001511515148260405160200162004fe89190620088b4565b60405160208183030381529060405262006a6c565b6040830151151560011480156200501a5750604082015115156001145b15620050e457620050568360200151836020015183604051602001620050419190620088f7565b60405160208183030381529060405262006437565b6200507783606001518360600151836040516020016200504191906200893a565b825151825151604051620050ac929190620050979085906020016200897d565b60405160208183030381529060405262006294565b82516020908101518351820151604051620050e493620050cf91869101620089e6565b60405160208183030381529060405262006ab6565b505050565b604080516002808252606080830184529260208301908036833701905050905082816000815181106200512057620051206200865c565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505081816001815181106200517157620051716200865c565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505092915050565b620051ef6040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b60405180608001604052806200520787878762006b0c565b815260208101869052600160408201526060018390529050949350505050565b620052656040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b60405180608001604052806200520787878762006f38565b60408051610100810182526000808252602082018190529181018290526060808201839052608082015260a0810182905260c0810182905260e08101919091526006546040517f67b426450000000000000000000000000000000000000000000000000000000081526000918291829173ffffffffffffffffffffffffffffffffffffffff16906367b42645906200531b90600290600401620087be565b602060405180830381865afa15801562005339573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200535f91906200879e565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff16906367b4264590620053b990600190600401620087be565b602060405180830381865afa158015620053d7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620053fd91906200879e565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815291945073ffffffffffffffffffffffffffffffffffffffff16906367b42645906200545790600390600401620087be565b602060405180830381865afa15801562005475573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200549b91906200879e565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815291935060009173ffffffffffffffffffffffffffffffffffffffff909116906367b4264590620054f9906004908101620087be565b602060405180830381865afa15801562005517573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200553d91906200879e565b600e546040517f5911fb9a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015280841660248301526b033b2e3c9fd0803ce80000006044830152929350911690635911fb9a90606401600060405180830381600087803b158015620055c757600080fd5b505af1158015620055dc573d6000803e3d6000fd5b5050600e5473ffffffffffffffffffffffffffffffffffffffff169150635911fb9a905083866200561b6b033b2e3c9fd0803ce800000060026200817c565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b1580156200569057600080fd5b505af1158015620056a5573d6000803e3d6000fd5b5050600e5473ffffffffffffffffffffffffffffffffffffffff169150635911fb9a90508583620056e46b033b2e3c9fd0803ce800000060026200817c565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b1580156200575957600080fd5b505af11580156200576e573d6000803e3d6000fd5b5050600e5473ffffffffffffffffffffffffffffffffffffffff169150635911fb9a90508385600a620057af6b033b2e3c9fd0803ce8000000600f6200817c565b620057bb91906200868b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b1580156200583057600080fd5b505af115801562005845573d6000803e3d6000fd5b5050600e5473ffffffffffffffffffffffffffffffffffffffff169150635911fb9a90508483600a620058866b033b2e3c9fd0803ce8000000600f6200817c565b6200589291906200868b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b1580156200590757600080fd5b505af11580156200591c573d6000803e3d6000fd5b50506011546040517f5911fb9a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015285811660248301526b033b2e3c9fd0803ce800000060448301529091169250635911fb9a9150606401600060405180830381600087803b158015620059a857600080fd5b505af1158015620059bd573d6000803e3d6000fd5b505060115473ffffffffffffffffffffffffffffffffffffffff169150632ccbc99b90508386610bb8620059ff6b033b2e3c9fd0803ce800000060016200817c565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b16815273ffffffffffffffffffffffffffffffffffffffff948516600482015293909216602484015262ffffff1660448301526064820152608401600060405180830381600087803b15801562005a7e57600080fd5b505af115801562005a93573d6000803e3d6000fd5b505060115473ffffffffffffffffffffffffffffffffffffffff169150632ccbc99b90508583610bb862005ad560026b033b2e3c9fd0803ce80000006200868b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b16815273ffffffffffffffffffffffffffffffffffffffff948516600482015293909216602484015262ffffff1660448301526064820152608401600060405180830381600087803b15801562005b5457600080fd5b505af115801562005b69573d6000803e3d6000fd5b505060115473ffffffffffffffffffffffffffffffffffffffff169150635911fb9a90508386600a62005baa6b033b2e3c9fd0803ce8000000600f6200817c565b62005bb691906200868b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b15801562005c2b57600080fd5b505af115801562005c40573d6000803e3d6000fd5b505060115473ffffffffffffffffffffffffffffffffffffffff169150635911fb9a90508583600a62005c816b033b2e3c9fd0803ce8000000600f6200817c565b62005c8d91906200868b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b15801562005d0257600080fd5b505af115801562005d17573d6000803e3d6000fd5b505060115473ffffffffffffffffffffffffffffffffffffffff169150632ccbc99b905083858a62005d576b033b2e3c9fd0803ce800000060026200817c565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b16815273ffffffffffffffffffffffffffffffffffffffff948516600482015293909216602484015262ffffff1660448301526064820152608401600060405180830381600087803b15801562005dd657600080fd5b505af115801562005deb573d6000803e3d6000fd5b505060115473ffffffffffffffffffffffffffffffffffffffff169150632ccbc99b9050838589600a62005e2d6b033b2e3c9fd0803ce8000000600f6200817c565b62005e3991906200868b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b16815273ffffffffffffffffffffffffffffffffffffffff948516600482015293909216602484015262ffffff1660448301526064820152608401600060405180830381600087803b15801562005eb857600080fd5b505af115801562005ecd573d6000803e3d6000fd5b505060115473ffffffffffffffffffffffffffffffffffffffff169150632ccbc99b905084838962005f0d6b033b2e3c9fd0803ce800000060026200817c565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b16815273ffffffffffffffffffffffffffffffffffffffff948516600482015293909216602484015262ffffff1660448301526064820152608401600060405180830381600087803b15801562005f8c57600080fd5b505af115801562005fa1573d6000803e3d6000fd5b505060115473ffffffffffffffffffffffffffffffffffffffff169150632ccbc99b905084838a60c862005fe36b033b2e3c9fd0803ce800000060c76200817c565b62005fef91906200868b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b16815273ffffffffffffffffffffffffffffffffffffffff948516600482015293909216602484015262ffffff1660448301526064820152608401600060405180830381600087803b1580156200606e57600080fd5b505af115801562006083573d6000803e3d6000fd5b505050506040518061010001604052808c6002811115620060a857620060a8620081bc565b815273c4375b7de8af5a38a93548eb8453a498222c4ff2602082015273ffffffffffffffffffffffffffffffffffffffff848116604083015283166060820152608001620060f78686620050e9565b81526020018b81526020018a61ffff1681526020018915158152509450505096509650969350505050565b6040805160038082526080820190925260609160208201838036833701905050905083816000815181106200615b576200615b6200865c565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508281600181518110620061ac57620061ac6200865c565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508181600281518110620061fd57620061fd6200865c565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250509392505050565b6200627c6040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b604051806080016040528062005207878787620074c4565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614620050e4577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf358381604051620062f9919062008a9b565b60405180910390a1620050e48383620078a4565b60065473ffffffffffffffffffffffffffffffffffffffff166200176457604051620063399062007f4a565b604051809103906000f08015801562006356573d6000803e3d6000fd5b50600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216918217905563b36ba208620063b5670de0b6b3a764000060646200817c565b6040518263ffffffff1660e01b81526004016000604051808303818588803b158015620063e157600080fd5b505af1158015620063f6573d6000803e3d6000fd5b505060028054307fffffffffffffffffffffffff00000000000000000000000000000000000000009182168117909255600180549091169091179055505050565b818314620050e4577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf35838160405162006470919062008a9b565b60405180910390a1620050e48383620079e2565b600080825160028111156200649d576200649d620081bc565b1480620064bf5750600182516002811115620064bd57620064bd620081bc565b145b15620064cd57506001919050565b600282516002811115620064e557620064e5620081bc565b1415620064f457506000919050565b81516040517ffe7995cf0000000000000000000000000000000000000000000000000000000081526200652b919060040162008ae4565b60405180910390fd5b6200655082826040518060200160405280600081525062004fc2565b5050565b60408051600580825260c082019092526060916020820160a08036833701905050905085816000815181106200658e576200658e6200865c565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508481600181518110620065df57620065df6200865c565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505083816002815181106200663057620066306200865c565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505082816003815181106200668157620066816200865c565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508181600481518110620066d257620066d26200865c565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505095945050505050565b6040805180820190915260008152606060208201526060600087516002811115620067445762006744620081bc565b14156200687d578262006778577f3df02124000000000000000000000000000000000000000000000000000000006200679a565b7fa6417ed6000000000000000000000000000000000000000000000000000000005b85858960e00151620067d95760c08a015161271090620067bb9082620086ee565b620067c7908b6200817c565b620067d391906200868b565b620067dc565b60005b604051600f93840b60248201529190920b60448201526064810191909152608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505b600187516002811115620068955762006895620081bc565b1415620069f85782620068c9577f79bea66400000000000000000000000000000000000000000000000000000000620068eb565b7f1af4de83000000000000000000000000000000000000000000000000000000005b85858960e00151620069545760a08a01516200690b90612710906200817c565b60c08b01516200691e90612710620086ee565b620069368b6b033b2e3c9fd0803ce80000006200817c565b6200694291906200817c565b6200694e91906200868b565b62006957565b60005b604051600f93840b60248201529190920b60448201526064810191909152608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505b80511562006a35576040805180820190915260075473ffffffffffffffffffffffffffffffffffffffff1681526020810191909152905062004ef7565b86516040517ffe7995cf0000000000000000000000000000000000000000000000000000000081526200652b919060040162008ae4565b8162006550577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf35838160405162006aa3919062008a9b565b60405180910390a1620065508262007ae2565b62006ac2838362007b5a565b620050e4577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf35838160405162006af8919062008a9b565b60405180910390a1620050e4838362007c24565b604080518082019091526000815260606020820152606060008551600281111562006b3b5762006b3b620081bc565b141562006c49576338ed173960e01b8560a001518660e0015162006b8c5760c08701516127109062006b6e9082620086ee565b62006b7a90886200817c565b62006b8691906200868b565b62006b8f565b60005b8573c4375b7de8af5a38a93548eb8453a498222c4ff262006bb342610e1062008708565b60405160240162006bc995949392919062008af4565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505b60018551600281111562006c615762006c61620081bc565b141562006d975760e08501517fbdbeaa31000000000000000000000000000000000000000000000000000000009062006cf15760a086015162006ca890612710906200817c565b60c087015162006cbb90612710620086ee565b62006cd3876b033b2e3c9fd0803ce80000006200817c565b62006cdf91906200817c565b62006ceb91906200868b565b62006cf4565b60005b8462006d0342610e1062008708565b60405160240162006d179392919062008b3f565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505b60028551600281111562006daf5762006daf620081bc565b141562006ebd57638803dbee60e01b8560a001518660e0015162006e005760c087015162006de09061271062008708565b62006dee612710886200817c565b62006dfa91906200868b565b62006e03565b60005b8573c4375b7de8af5a38a93548eb8453a498222c4ff262006e2742610e1062008708565b60405160240162006e3d95949392919062008af4565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505b80511562006efa5760408051808201909152600d5473ffffffffffffffffffffffffffffffffffffffff1681526020810191909152905062006f31565b84516040517ffe7995cf0000000000000000000000000000000000000000000000000000000081526200652b919060040162008ae4565b9392505050565b604080518082019091526000815260606020820152606060008551600281111562006f675762006f67620081bc565b141562007109576000604051806101000160405280876040015173ffffffffffffffffffffffffffffffffffffffff168152602001876060015173ffffffffffffffffffffffffffffffffffffffff1681526020018562ffffff168152602001876020015173ffffffffffffffffffffffffffffffffffffffff16815260200142610e1062006ff7919062008708565b81526020018760a0015181526020018760e00151620070435760c088015161271090620070259082620086ee565b6200703190896200817c565b6200703d91906200868b565b62007046565b60005b815260006020909101526040519091507f414bf38900000000000000000000000000000000000000000000000000000000906200708890839060240162008b6a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529150505b600185516002811115620071215762007121620081bc565b1415620072cd5760008560e00151620071915760a08601516200714890612710906200817c565b60c08701516200715b90612710620086ee565b62007173876b033b2e3c9fd0803ce80000006200817c565b6200717f91906200817c565b6200718b91906200868b565b62007194565b60005b905060006040518060c00160405280886040015173ffffffffffffffffffffffffffffffffffffffff168152602001886060015173ffffffffffffffffffffffffffffffffffffffff1681526020018662ffffff16815260200142610e10620071fe919062008708565b815260208082019490945260006040918201528051825173ffffffffffffffffffffffffffffffffffffffff908116602483015283860151811660448301528383015162ffffff16606483015260608401516084830152608084015160a483015260a09093015190921660c4808401919091528151808403909101815260e4909201905291820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc7fbf4de000000000000000000000000000000000000000000000000000000001790525090505b600285516002811115620072e557620072e5620081bc565b141562007487576000604051806101000160405280876040015173ffffffffffffffffffffffffffffffffffffffff168152602001876060015173ffffffffffffffffffffffffffffffffffffffff1681526020018562ffffff168152602001876020015173ffffffffffffffffffffffffffffffffffffffff16815260200142610e1062007375919062008708565b81526020018760a0015181526020018760e00151620073c15760c0880151620073a19061271062008708565b620073af612710896200817c565b620073bb91906200868b565b620073c4565b60005b815260006020909101526040519091507fdb3e219800000000000000000000000000000000000000000000000000000000906200740690839060240162008b6a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529150505b80511562006efa576040805180820190915260105473ffffffffffffffffffffffffffffffffffffffff1681526020810191909152905062006f31565b6040805180820190915260008152606060208201526060600085516002811115620074f357620074f3620081bc565b1415620076475760006040518060a00160405280858152602001876020015173ffffffffffffffffffffffffffffffffffffffff16815260200142610e106200753d919062008708565b81526020018760a0015181526020018760e00151620075895760c0880151612710906200756b9082620086ee565b6200757790896200817c565b6200758391906200868b565b6200758c565b60005b90526040519091507fc04b8d590000000000000000000000000000000000000000000000000000000090620075c690839060240162008c47565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529150505b6001855160028111156200765f576200765f620081bc565b1415620077b95760008560e00151620076cf5760a08601516200768690612710906200817c565b60c08701516200769990612710620086ee565b620076b1876b033b2e3c9fd0803ce80000006200817c565b620076bd91906200817c565b620076c991906200868b565b620076d2565b60005b90506000604051806060016040528086815260200142610e10620076f7919062008708565b81526020018390526040519091507ff4f18d9000000000000000000000000000000000000000000000000000000000906200773790839060240162008c5c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152925050505b600285516002811115620077d157620077d1620081bc565b1415620074875760006040518060a00160405280858152602001876020015173ffffffffffffffffffffffffffffffffffffffff16815260200142610e106200781b919062008708565b81526020018760a0015181526020018760e00151620078675760c0880151620078479061271062008708565b62007855612710896200817c565b6200786191906200868b565b6200786a565b60005b90526040519091507ff28c049800000000000000000000000000000000000000000000000000000000906200740690839060240162008c47565b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462006550577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f506040516200795e9060208082526025908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b61646460408201527f726573735d000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f8160405162007997919062008c9a565b60405180910390a17f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f82604051620079d0919062008cfc565b60405180910390a16200655062007d2d565b80821462006550577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f5060405162007a709060208082526022908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b75696e60408201527f745d000000000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a88160405162007aa9919062008d3a565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a882604051620079d0919062008d86565b8062002932577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f5060405162007b489060208082526017908201527f4572726f723a20417373657274696f6e204661696c6564000000000000000000604082015260600190565b60405180910390a16200293262007d2d565b80518251600191141562007c1a5760005b835181101562007c135782818151811062007b8a5762007b8a6200865c565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684828151811062007bcc5762007bcc6200865c565b01602001517fff00000000000000000000000000000000000000000000000000000000000000161462007bfe57600091505b8062007c0a81620087f0565b91505062007b6b565b5062007c1e565b5060005b92915050565b62007c30828262007b5a565b62006550577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f5060405162007cbb9060208082526023908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b62797460408201527f65735d0000000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17fd26e16cad4548705e4c9e2d94f98ee91c289085ee425594fd5635fa2964ccf188160405162007cf4919062008dc4565b60405180910390a17fd26e16cad4548705e4c9e2d94f98ee91c289085ee425594fd5635fa2964ccf1882604051620079d0919062008e16565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1562007e825760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000009282019290925260016060820152600091907f70ca10bbd0dbfd9020a9f4b13402c16cb120705e0d1c0aeab10fa353ae586fc490608001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905262007dff92916020016200882c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905262007e399162008876565b6000604051808303816000865af19150503d806000811462007e78576040519150601f19603f3d011682016040523d82523d6000602084013e62007e7d565b606091505b505050505b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055565b611a0d8062008e5583390190565b613960806200a86283390190565b611852806200e1c283390190565b615f8c806200fa1483390190565b61189380620159a083390190565b611a5c806201723383390190565b61251b8062018c8f83390190565b611a7f806201b1aa83390190565b611c0e806201cc2983390190565b61221a806201e83783390190565b6126e48062020a5183390190565b617a51806202313583390190565b803561ffff8116811462003a0c57600080fd5b80151581146200293257600080fd5b6000806000806080858703121562007f9157600080fd5b8435935062007fa36020860162007f58565b9250604085013562007fb58162007f6b565b9150606085013562007fc78162007f6b565b939692955090935050565b803560ff8116811462003a0c57600080fd5b6000806000806080858703121562007ffb57600080fd5b843593506200800d6020860162007f58565b925060408501356200801f8162007f6b565b91506200802f6060860162007fd2565b905092959194509250565b6000602082840312156200804d57600080fd5b813562006f318162007f6b565b6000806000606084860312156200807057600080fd5b83359250620080826020850162007f58565b91506040840135620080948162007f6b565b809150509250925092565b600080600080600060a08688031215620080b857600080fd5b85359450620080ca6020870162007f58565b93506040860135620080dc8162007f6b565b92506060860135620080ee8162007f6b565b9150620080fe6080870162007fd2565b90509295509295909350565b73ffffffffffffffffffffffffffffffffffffffff811681146200293257600080fd5b6000602082840312156200814057600080fd5b813562006f31816200810a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620081b757620081b76200814d565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60038110620081fe57620081fe620081bc565b9052565b600061010080840162008217858551620081eb565b60208481015173ffffffffffffffffffffffffffffffffffffffff9081168783015260408087015182169088015260608087015182169088015260808087015190880194909452835192839052610120870193820192600091905b80831015620082965784518216865294830194938301936001929092019162008272565b505050505060a083015160a085015260c083015160c085015260e0830151620082c360e086018215159052565b509392505050565b600081518084526020808501945080840160005b838110156200831357815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101620082df565b509495945050505050565b60408152600062008333604083018562008202565b828103602084015262004ef78185620082cb565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff811182821017156200839c576200839c62008347565b60405290565b6040805190810167ffffffffffffffff811182821017156200839c576200839c62008347565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171562008412576200841262008347565b604052919050565b60005b83811015620084375781810151838201526020016200841d565b8381111562002e405750506000910152565b805162003a0c8162007f6b565b6000608082840312156200846957600080fd5b6200847362008376565b9050815167ffffffffffffffff808211156200848e57600080fd5b9083019060408286031215620084a357600080fd5b620084ad620083a2565b8251620084ba816200810a565b815260208381015183811115620084d057600080fd5b80850194505086601f850112620084e657600080fd5b835183811115620084fb57620084fb62008347565b6200852d827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601620083c8565b935080845287828287010111156200854457600080fd5b62008555818386018488016200841a565b50818101929092528352838101519083015250620085766040830162008449565b60408201526060820151606082015292915050565b600060208083850312156200859f57600080fd5b825167ffffffffffffffff80821115620085b857600080fd5b818501915085601f830112620085cd57600080fd5b815181811115620085e257620085e262008347565b8060051b620085f3858201620083c8565b91825283810185019185810190898411156200860e57600080fd5b86860192505b838310156200864f578251858111156200862e5760008081fd5b6200863e8b89838a010162008456565b835250918601919086019062008614565b9998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082620086c2577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600062ffffff83811690831681811015620086e657620086e66200814d565b039392505050565b6000828210156200870357620087036200814d565b500390565b600082198211156200871e576200871e6200814d565b500190565b60608152600062008738606083018662008202565b82810360208401526200874c8186620082cb565b915050826040830152949350505050565b6000602082840312156200877057600080fd5b815167ffffffffffffffff8111156200878857600080fd5b620087968482850162008456565b949350505050565b600060208284031215620087b157600080fd5b815162006f31816200810a565b60208101600b8310620087d557620087d5620081bc565b91905290565b604081526000620083336040830185620082cb565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156200882557620088256200814d565b5060010190565b7fffffffff000000000000000000000000000000000000000000000000000000008316815260008251620088688160048501602087016200841a565b919091016004019392505050565b600082516200888a8184602087016200841a565b9190910192915050565b600060208284031215620088a757600080fd5b815162006f318162007f6b565b60008251620088c88184602087016200841a565b7f446966666572656e7420666f756e6420706172616d7300000000000000000000920191825250601601919050565b600082516200890b8184602087016200841a565b7f71312e616d6f756e7420213d2071322e616d6f756e7400000000000000000000920191825250601601919050565b600082516200894e8184602087016200841a565b7f71312e676173557361676520213d2071322e6761735573616765000000000000920191825250601a01919050565b60008251620089918184602087016200841a565b7f71312e6d756c746943616c6c2e74617267657420213d2071322e6d756c7469439201918252507f616c6c2e746172676574000000000000000000000000000000000000000000006020820152602a01919050565b60008251620089fa8184602087016200841a565b7f71312e6d756c746943616c6c2e63616c6c4461746120213d2071322e6d756c749201918252507f6943616c6c2e63616c6c446174610000000000000000000000000000000000006020820152602e01919050565b6000815180845262008a698160208601602086016200841a565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60408152600560408201527f4572726f72000000000000000000000000000000000000000000000000000000606082015260806020820152600062006f31608083018462008a4f565b6020810162007c1e8284620081eb565b85815284602082015260a06040820152600062008b1560a0830186620082cb565b73ffffffffffffffffffffffffffffffffffffffff94909416606083015250608001529392505050565b83815260606020820152600062008b5a6060830185620082cb565b9050826040830152949350505050565b610100810162007c1e828473ffffffffffffffffffffffffffffffffffffffff80825116835280602083015116602084015262ffffff60408301511660408401528060608301511660608401526080820151608084015260a082015160a084015260c082015160c08401528060e08301511660e0840152505050565b6000815160a0845262008bfd60a085018262008a4f565b905073ffffffffffffffffffffffffffffffffffffffff60208401511660208501526040830151604085015260608301516060850152608083015160808501528091505092915050565b60208152600062006f31602083018462008be6565b60208152600082516060602084015262008c7a608084018262008a4f565b905060208401516040840152604084015160608401528091505092915050565b60408152600062008cd860408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b905073ffffffffffffffffffffffffffffffffffffffff8316602083015292915050565b60408152600062008cd860408301600a81527f2020202041637475616c00000000000000000000000000000000000000000000602082015260400190565b60408152600062008d7860408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b905082602083015292915050565b60408152600062008d7860408301600a81527f2020202041637475616c00000000000000000000000000000000000000000000602082015260400190565b60408152600062008e0260408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b828103602084015262008796818562008a4f565b60408152600062008e0260408301600a81527f2020202041637475616c0000000000000000000000000000000000000000000060208201526040019056fe60806040523480156200001157600080fd5b5060405162001a0d38038062001a0d8339810160408190526200003491620000ef565b6200003f3362000082565b600180546001600160a01b039485166001600160a01b03199182161790915560028054938516938216939093179092556003805491909316911617905562000139565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b0381168114620000ea57600080fd5b919050565b6000806000606084860312156200010557600080fd5b6200011084620000d2565b92506200012060208501620000d2565b91506200013060408501620000d2565b90509250925092565b6118c480620001496000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c80638da5cb5b11610076578063ebf9deac1161005b578063ebf9deac1461019e578063eeef8dd0146101be578063f2fde38b146101de57600080fd5b80638da5cb5b1461016d5780638e8a08521461018b57600080fd5b806337c605f7116100a757806337c605f71461012d57806354fd4d501461014d578063715018a61461016357600080fd5b80631c9a755f146100c3578063287b94d71461010d575b600080fd5b6003546100e39073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6001546100e39073ffffffffffffffffffffffffffffffffffffffff1681565b61014061013b3660046111c2565b6101f1565b604051610104919061130a565b610155600181565b604051908152602001610104565b61016b6104d0565b005b60005473ffffffffffffffffffffffffffffffffffffffff166100e3565b6100e361019936600461138a565b610562565b6101b16101ac3660046113ae565b61070c565b604051610104919061141b565b6002546100e39073ffffffffffffffffffffffffffffffffffffffff1681565b61016b6101ec36600461138a565b610873565b6040805160c081018252600060808201818152606060a08401819052908352602083018290529282018190528183015282516000908067ffffffffffffffff81111561023f5761023f610f44565b6040519080825280602002602001820160405280156102ad57816020015b61029a6040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b81526020019060019003908161025d5790505b50935060005b818110156104ba5760008682815181106102cf576102cf61142e565b6020026020010151905060006102e482610562565b905073ffffffffffffffffffffffffffffffffffffffff8116156104b0576040517f1bf64c4100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821690631bf64c4190610356908c908690600401611518565b6000604051808303816000875af1158015610375573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526103bb91908101906115f9565b955060008173ffffffffffffffffffffffffffffffffffffffff16636f33547d8b856040518363ffffffff1660e01b81526004016103fa929190611518565b6000604051808303816000875af1158015610419573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261045f91908101906115f9565b905061046e818b8960006109a3565b15610477578096505b8660400151156104ae57868887815181106104945761049461142e565b602002602001018190525085806104aa9061176c565b9650505b505b50506001016102b3565b506104c4846109bf565b93505050505b92915050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610556576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6105606000610aea565b565b600073ffffffffffffffffffffffffffffffffffffffff8216156107075760008273ffffffffffffffffffffffffffffffffffffffff1663ce30bbdb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f191906117a5565b905060018160108111156106075761060761145d565b14156106295760025473ffffffffffffffffffffffffffffffffffffffff1691505b600281601081111561063d5761063d61145d565b141561065f5760035473ffffffffffffffffffffffffffffffffffffffff1691505b60038160108111156106735761067361145d565b14806106905750600581601081111561068e5761068e61145d565b145b806106ac575060068160108111156106aa576106aa61145d565b145b806106c8575060078160108111156106c6576106c661145d565b145b806106e4575060088160108111156106e2576106e261145d565b145b156107055760015473ffffffffffffffffffffffffffffffffffffffff1691505b505b919050565b6107496040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b825160005b8181101561086a57600085828151811061076a5761076a61142e565b60200260200101519050600061077f82610562565b905073ffffffffffffffffffffffffffffffffffffffff8116156108605760006107a883610562565b73ffffffffffffffffffffffffffffffffffffffff16631bf64c418a856040518363ffffffff1660e01b81526004016107e2929190611518565b6000604051808303816000875af1158015610801573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261084791908101906115f9565b9050610855818a888a6109a3565b1561085e578095505b505b505060010161074e565b50509392505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146108f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161054d565b73ffffffffffffffffffffffffffffffffffffffff8116610997576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161054d565b6109a081610aea565b50565b60006109b6858585866060015186610b5f565b95945050505050565b8051606090806109d0575090919050565b60005b8381815181106109e5576109e561142e565b60200260200101516040015115610a0e5760010181811415610a0957509192915050565b6109d3565b8067ffffffffffffffff811115610a2757610a27610f44565b604051908082528060200260200182016040528015610a9557816020015b610a826040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b815260200190600190039081610a455790505b50925060005b81811015610ae257848181518110610ab557610ab561142e565b6020026020010151848281518110610acf57610acf61142e565b6020908102919091010152600101610a9b565b505050919050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008560400151610b72575060006109b6565b8360400151610b83575060016109b6565b6000610be08688602001516b033b2e3c9fd0803ce8000000868b60600151610bab91906117c6565b610bb59190611803565b60208901516b033b2e3c9fd0803ce8000000610bd1898b6117c6565b610bdb9190611803565b610c79565b9050600086516002811115610bf757610bf761145d565b1480610c155750600186516002811115610c1357610c1361145d565b145b15610c215790506109b6565b600286516002811115610c3657610c3661145d565b1415610c44571590506109b6565b85516040517ffe7995cf00000000000000000000000000000000000000000000000000000000815261054d919060040161183e565b6000610cb96040518060400160405280600c81526020017f414141202d20616d6f756e740000000000000000000000000000000000000000815250610d6a565b610cc285610df9565b610ccb84610df9565b610cd483610df9565b610cdd82610df9565b610cef610cea858761184c565b610df9565b610cfc610cea838561184c565b610d0586610e8a565b610d2657610d138284611863565b610d1d8587611863565b101590506109b6565b838510158015610d365750818310155b15610d4f57610d45828461184c565b610d1d858761184c565b838510610d5d576001610d60565b60005b9695505050505050565b6109a081604051602401610d7e919061187b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f41304fac00000000000000000000000000000000000000000000000000000000179052610f23565b6109a081604051602401610e0f91815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff5b1bba900000000000000000000000000000000000000000000000000000000179052610f23565b60008082516002811115610ea057610ea061145d565b1480610ebe5750600182516002811115610ebc57610ebc61145d565b145b15610ecb57506001919050565b600282516002811115610ee057610ee061145d565b1415610eee57506000919050565b81516040517ffe7995cf00000000000000000000000000000000000000000000000000000000815261054d919060040161183e565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610100810167ffffffffffffffff81118282101715610f9757610f97610f44565b60405290565b6040516080810167ffffffffffffffff81118282101715610f9757610f97610f44565b6040805190810167ffffffffffffffff81118282101715610f9757610f97610f44565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561102a5761102a610f44565b604052919050565b80356003811061070757600080fd5b73ffffffffffffffffffffffffffffffffffffffff811681146109a057600080fd5b803561070781611041565b600082601f83011261107f57600080fd5b8135602067ffffffffffffffff82111561109b5761109b610f44565b8160051b6110aa828201610fe3565b92835284810182019282810190878511156110c457600080fd5b83870192505b848310156110ec5782356110dd81611041565b825291830191908301906110ca565b979650505050505050565b80151581146109a057600080fd5b8035610707816110f7565b6000610100828403121561112357600080fd5b61112b610f73565b905061113682611032565b815261114460208301611063565b602082015261115560408301611063565b604082015261116660608301611063565b6060820152608082013567ffffffffffffffff81111561118557600080fd5b6111918482850161106e565b60808301525060a082013560a082015260c082013560c08201526111b760e08301611105565b60e082015292915050565b600080604083850312156111d557600080fd5b823567ffffffffffffffff808211156111ed57600080fd5b6111f986838701611110565b9350602085013591508082111561120f57600080fd5b5061121c8582860161106e565b9150509250929050565b60005b83811015611241578181015183820152602001611229565b83811115611250576000848401525b50505050565b6000815180845261126e816020860160208601611226565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b80516080808452815173ffffffffffffffffffffffffffffffffffffffff169084015260200151604060a08401526000906112de60c0850182611256565b905060208301516020850152604083015115156040850152606083015160608501528091505092915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561137d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc088860301845261136b8583516112a0565b94509285019290850190600101611331565b5092979650505050505050565b60006020828403121561139c57600080fd5b81356113a781611041565b9392505050565b6000806000606084860312156113c357600080fd5b833567ffffffffffffffff808211156113db57600080fd5b6113e787838801611110565b945060208601359150808211156113fd57600080fd5b5061140a8682870161106e565b925050604084013590509250925092565b6020815260006113a760208301846112a0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600381106114c3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b600081518084526020808501945080840160005b8381101561150d57815173ffffffffffffffffffffffffffffffffffffffff16875295820195908201906001016114db565b509495945050505050565b6040815261152a60408201845161148c565b6000602084015173ffffffffffffffffffffffffffffffffffffffff80821660608501528060408701511660808501525050606084015161158360a084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060808401516101008060c08501526115a06101408501836114c7565b915060a086015160e085015260c0860151818501525060e08501516115ca61012085018215159052565b5073ffffffffffffffffffffffffffffffffffffffff8416602084015290506113a7565b8051610707816110f7565b6000602080838503121561160c57600080fd5b825167ffffffffffffffff8082111561162457600080fd5b908401906080828703121561163857600080fd5b611640610f9d565b82518281111561164f57600080fd5b83016040818903121561166157600080fd5b611669610fc0565b815161167481611041565b8152818601518481111561168757600080fd5b80830192505088601f83011261169c57600080fd5b8151848111156116ae576116ae610f44565b6116de877fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601610fe3565b945080855289878285010111156116f457600080fd5b61170381888701898601611226565b508086018490528252508284015181850152611721604084016115ee565b6040820152606083015160608201528094505050505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561179e5761179e61173d565b5060010190565b6000602082840312156117b757600080fd5b8151601181106113a757600080fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156117fe576117fe61173d565b500290565b600082611839577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b602081016104ca828461148c565b60008282101561185e5761185e61173d565b500390565b600082198211156118765761187661173d565b500190565b6020815260006113a7602083018461125656fea26469706673582212204a44d119a95a7bbbbf2c6cd5403facba1ffe02ace142ee957c64cb512d488b0664736f6c634300080a003360806040523480156200001157600080fd5b5060405162003960380380620039608339810160408190526200003491620002a2565b8151829082906200004d90600290602085019062000133565b5080516200006390600390602084019062000133565b506000601260405162000076906200019d565b6060808252600790820152664352564d6f636b60c81b608082015260a0602082018190526015908201527f43525620666f72204375727665506f6f6c4d6f636b000000000000000000000060c082015260ff909116604082015260e001604051809103906000f080158015620000f0573d6000803e3d6000fd5b50600080546001600160a01b039092166001600160a01b03199283168117909155600180549092161790555050670de0b6b3a7640000600755506200030c915050565b8280548282559060005260206000209081019282156200018b579160200282015b828111156200018b57825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019062000154565b5062000199929150620001ab565b5090565b611758806200220883390190565b5b80821115620001995760008155600101620001ac565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b0381168114620001f057600080fd5b919050565b600082601f8301126200020757600080fd5b815160206001600160401b0380831115620002265762000226620001c2565b8260051b604051601f19603f830116810181811084821117156200024e576200024e620001c2565b6040529384528581018301938381019250878511156200026d57600080fd5b83870191505b8482101562000297576200028782620001d8565b8352918301919083019062000273565b979650505050505050565b60008060408385031215620002b657600080fd5b82516001600160401b0380821115620002ce57600080fd5b620002dc86838701620001f5565b93506020850151915080821115620002f357600080fd5b506200030285828601620001f5565b9150509250929050565b611eec806200031c6000396000f3fe608060405234801561001057600080fd5b506004361061030a5760003560e01c806382c630661161019c578063bb7b8b80116100ee578063e2e7d26411610097578063f851a44011610071578063f851a44014610597578063fc0c546a1461059e578063fee3f7f91461036257600080fd5b8063e2e7d26414610576578063ecb586a514610584578063f446c1d01461036257600080fd5b8063d96c7fce116100c8578063d96c7fce14610369578063dd62ed3e14610568578063ddca3f431461036257600080fd5b8063bb7b8b801461053a578063c661065714610542578063cc2b27d71461055557600080fd5b80639fdaea0c11610150578063b739953e1161012a578063b739953e14610501578063b91434d114610514578063b9947eb01461052757600080fd5b80639fdaea0c146104db578063a6417ed6146104ee578063b4b577ad1461036257600080fd5b80638ea875f3116101815780638ea875f3146104bf57806395d89b411461033557806399bd2ba5146104c857600080fd5b806382c630661461048c57806385ca3c6f146104ac57600080fd5b80633df02124116102605780635e0d443f1161020957806371035418116101e3578063710354181461045457806376a2f0f0146103625780637b475b681461046757600080fd5b80635e0d443f1461042d57806363543f061461036257806370a082311461044057600080fd5b80634903b0d11161023a5780634903b0d1146104075780635409491a1461036257806356ac35031461041a57600080fd5b80633df02124146103e15780634469e30e146103695780634515cef3146103f457600080fd5b806318160ddd116102c257806323746eb81161029c57806323746eb814610393578063313ce567146103625780633883e119146103cb57600080fd5b806318160ddd146103625780631a4d01d21461037e5780632081066c1461036257600080fd5b806307211ef7116102f357806307211ef71461034f578063140522881461036257806314f059791461036957600080fd5b8063065a80d81461030f57806306fdde0314610335575b600080fd5b61032261031d36600461192d565b6105be565b6040519081526020015b60405180910390f35b6040805160208101825260008152905161032c9190611974565b61032261035d3660046119c5565b610677565b6000610322565b6103716106c7565b60405161032c9190611a01565b61039161038c366004611a32565b6106f2565b005b6103a66103a136600461192d565b6107e6565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161032c565b6103226103d9366004611a79565b600092915050565b6103916103ef366004611ab1565b610826565b610391610402366004611b88565b610950565b610322610415366004611bb3565b610b1c565b6103916104283660046119c5565b610b31565b61032261043b3660046119c5565b610b92565b61032261044e366004611bf0565b50600090565b610391610462366004611bb3565b600755565b610391610475366004611c0b565b600f9190910b600090815260066020526040902055565b6001546103a69073ffffffffffffffffffffffffffffffffffffffff1681565b6103716104ba366004611c35565b610bce565b61032260075481565b6103916104d6366004611c73565b610c04565b6103916104e9366004611c8f565b610c63565b6103916104fc366004611ab1565b610de6565b6103a661050f36600461192d565b6111a6565b6103916105223660046119c5565b6111be565b6103a6610535366004611bb3565b61121f565b600754610322565b6103a6610550366004611bb3565b611234565b610322610563366004611cac565b611249565b6103226103d9366004611cd8565b61032261044e366004611bb3565b610391610592366004611d02565b61127f565b60006103a6565b6000546103a69073ffffffffffffffffffffffffffffffffffffffff1681565b6000600282600f0b815481106105d6576105d6611d26565b6000918252602090912001546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa15801561064d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106719190611d55565b92915050565b600f83810b60009081526005602090815260408083209386900b8352929052908120546b033b2e3c9fd0803ce8000000906106b3908490611d9d565b6106bd9190611dda565b90505b9392505050565b6106cf6118f8565b604051806060016040528060008152602001600081526020016000815250905090565b6000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810185905273ffffffffffffffffffffffffffffffffffffffff909116906379cc6790906044016020604051808303816000875af1158015610769573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078d9190611e15565b506107e133826002856fffffffffffffffffffffffffffffffff16815481106107b8576107b8611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169190611402565b505050565b6000600282600f0b815481106107fe576107fe611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1692915050565b6000610833858585610b92565b9050818110156108ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f437572766556314d6f636b3a20494e53554646494349454e545f4f555450555460448201527f5f414d4f554e540000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61091f3330856002896fffffffffffffffffffffffffffffffff16815481106108f5576108f5611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169291906114d6565b61094933826002876fffffffffffffffffffffffffffffffff16815481106107b8576107b8611d26565b5050505050565b60005b6003811015610a7f57600083826003811061097057610970611d26565b60200201511115610a6d576002818154811061098e5761098e611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff166323b872dd33308685600381106109c9576109c9611d26565b60200201516040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff938416600482015292909116602483015260448201526064016020604051808303816000875af1158015610a47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6b9190611e15565b505b80610a7781611e32565b915050610953565b506000546040517f40c10f190000000000000000000000000000000000000000000000000000000081523360048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f19906044015b6020604051808303816000875af1158015610af8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e19190611e15565b6000600282815481106105d6576105d6611d26565b600f83810b60009081526005602090815260408083209386900b835292905220819055610b6a6b033b2e3c9fd0803ce80000008261153a565b600f92830b60009081526005602090815260408083209690950b825294909452919092205550565b600f83810b60009081526004602090815260408083209386900b8352929052908120546b033b2e3c9fd0803ce8000000906106b3908490611d9d565b610bd66118f8565b6040805160608181019092529085906003908390839080828437600092019190915250919695505050505050565b6000546040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052909116906340c10f1990604401610ad9565b60005b6003811015610d88576000838260038110610c8357610c83611d26565b60200201351115610d765760028181548110610ca157610ca1611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33858460038110610cdb57610cdb611d26565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff9093166004840152602002013560248201526044016020604051808303816000875af1158015610d50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d749190611e15565b505b80610d8081611e32565b915050610c66565b506000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906379cc679090604401610ad9565b60006002856fffffffffffffffffffffffffffffffff1681548110610e0d57610e0d611d26565b60009182526020822001546003805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff8816908110610e5957610e59611d26565b60009182526020822001546002805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff8816908110610ea557610ea5611d26565b60009182526020822001546003805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff8916908110610ef157610ef1611d26565b600091825260208220015473ffffffffffffffffffffffffffffffffffffffff169150610f1f898989610677565b905085811015610fb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f437572766556314d6f636b3a20494e53554646494349454e545f4f555450555460448201527f5f414d4f554e540000000000000000000000000000000000000000000000000060648201526084016108c1565b610fd373ffffffffffffffffffffffffffffffffffffffff851633308a6114d6565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526024820189905285169063095ea7b3906044016020604051808303816000875af1158015611048573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061106c9190611e15565b506040517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8616906340c10f1990604401600060405180830381600087803b1580156110db57600080fd5b505af11580156110ef573d6000803e3d6000fd5b50506040517f1e9a69500000000000000000000000000000000000000000000000000000000081523060048201526024810184905273ffffffffffffffffffffffffffffffffffffffff86169250631e9a69509150604401600060405180830381600087803b15801561116157600080fd5b505af1158015611175573d6000803e3d6000fd5b5061119b9250505073ffffffffffffffffffffffffffffffffffffffff83163383611402565b505050505050505050565b6000600382600f0b815481106107fe576107fe611d26565b600f83810b60009081526004602090815260408083209386900b8352929052208190556111f76b033b2e3c9fd0803ce80000008261153a565b600f92830b60009081526004602090815260408083209690950b825294909452919092205550565b6000600382815481106107fe576107fe611d26565b6000600282815481106107fe576107fe611d26565b600f81900b6000908152600660205260408120546b033b2e3c9fd0803ce8000000906112759085611d9d565b6106c09190611dda565b60005b60038110156113a457600082826003811061129f5761129f611d26565b6020020151111561139257600281815481106112bd576112bd611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb338484600381106112f7576112f7611d26565b60200201516040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af115801561136c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113909190611e15565b505b8061139c81611e32565b915050611282565b506000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810184905273ffffffffffffffffffffffffffffffffffffffff909116906379cc679090604401610ad9565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526107e19084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526116a0565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526115349085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611454565b50505050565b60408051808201909152600281527f4d330000000000000000000000000000000000000000000000000000000000006020820152600090826115a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c19190611974565b5060006115b7600284611dda565b90506b033b2e3c9fd0803ce80000006115f0827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611e6b565b6115fa9190611dda565b8411156040518060400160405280600281526020017f4d310000000000000000000000000000000000000000000000000000000000008152509061166b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c19190611974565b5082816116846b033b2e3c9fd0803ce800000087611d9d565b61168e9190611e82565b6116989190611dda565b949350505050565b6000611702826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166117ac9092919063ffffffff16565b8051909150156107e157808060200190518101906117209190611e15565b6107e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016108c1565b60606106bd848460008585843b61181f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108c1565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516118489190611e9a565b60006040518083038185875af1925050503d8060008114611885576040519150601f19603f3d011682016040523d82523d6000602084013e61188a565b606091505b509150915061189a8282866118a5565b979650505050505050565b606083156118b45750816106c0565b8251156118c45782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c19190611974565b60405180606001604052806003906020820280368337509192915050565b8035600f81900b811461192857600080fd5b919050565b60006020828403121561193f57600080fd5b6106c082611916565b60005b8381101561196357818101518382015260200161194b565b838111156115345750506000910152565b6020815260008251806020840152611993816040850160208701611948565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000606084860312156119da57600080fd5b6119e384611916565b92506119f160208501611916565b9150604084013590509250925092565b60608101818360005b6003811015611a29578151835260209283019290910190600101611a0a565b50505092915050565b600080600060608486031215611a4757600080fd5b833592506119f160208501611916565b806060810183101561067157600080fd5b8015158114611a7657600080fd5b50565b60008060808385031215611a8c57600080fd5b611a968484611a57565b91506060830135611aa681611a68565b809150509250929050565b60008060008060808587031215611ac757600080fd5b611ad085611916565b9350611ade60208601611916565b93969395505050506040820135916060013590565b600082601f830112611b0457600080fd5b6040516060810181811067ffffffffffffffff82111715611b4e577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604052806060840185811115611b6357600080fd5b845b81811015611b7d578035835260209283019201611b65565b509195945050505050565b60008060808385031215611b9b57600080fd5b611ba58484611af3565b946060939093013593505050565b600060208284031215611bc557600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461192857600080fd5b600060208284031215611c0257600080fd5b6106c082611bcc565b60008060408385031215611c1e57600080fd5b611c2783611916565b946020939093013593505050565b600080600060e08486031215611c4a57600080fd5b611c548585611a57565b9250611c638560608601611a57565b915060c084013590509250925092565b60008060408385031215611c8657600080fd5b611c2783611bcc565b60008060808385031215611ca257600080fd5b611ba58484611a57565b60008060408385031215611cbf57600080fd5b82359150611ccf60208401611916565b90509250929050565b60008060408385031215611ceb57600080fd5b611cf483611bcc565b9150611ccf60208401611bcc565b60008060808385031215611d1557600080fd5b82359150611ccf8460208501611af3565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215611d6757600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611dd557611dd5611d6e565b500290565b600082611e10577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600060208284031215611e2757600080fd5b81516106c081611a68565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611e6457611e64611d6e565b5060010190565b600082821015611e7d57611e7d611d6e565b500390565b60008219821115611e9557611e95611d6e565b500190565b60008251611eac818460208701611948565b919091019291505056fea2646970667358221220a76213374b33de2cb1c5d61e9c1133f6d8163c7b90c32a6142a6f4fd98fe430364736f6c634300080a003360a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a00336101606040523480156200001257600080fd5b5060405162001852380380620018528339810160408190526200003591620003a3565b6000805460ff191690558585828260c882826001600160a01b0381166200006f57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000ae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d49190620004de565b6001600160a01b0316608052508051620000f6906002906020840190620002ca565b505060a052506001600160a01b0382166200012457604051635919af9760e11b815260040160405180910390fd5b6001600160a01b03821660c0819052670de0b6b3a764000060e05260408051630176f71760e71b815290516000929163bb7b8b809160048083019260209291908290030181865afa1580156200017e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001a4919062000503565b9050620001b1816200022a565b505050506001600160a01b0384161580620001d357506001600160a01b038316155b80620001e657506001600160a01b038216155b156200020557604051635919af9760e11b815260040160405180910390fd5b506001600160a01b039283166101005290821661012052166101405250620005d09050565b8062000249576040516309aadd6f60e41b815260040160405180910390fd5b60018190557f82e7ee47180a631312683eeb2a85ad264c9af490d54de5a75bbdb95b968c6de2816200027b8162000296565b6040805192835260208301919091520160405180910390a150565b60a05160009061271090620002ac908262000533565b620002b890846200054e565b620002c4919062000570565b92915050565b828054620002d89062000593565b90600052602060002090601f016020900481019282620002fc576000855562000347565b82601f106200031757805160ff191683800117855562000347565b8280016001018555821562000347579182015b82811115620003475782518255916020019190600101906200032a565b506200035592915062000359565b5090565b5b808211156200035557600081556001016200035a565b80516001600160a01b03811681146200038857600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60008060008060008060c08789031215620003bd57600080fd5b620003c88762000370565b95506020620003d981890162000370565b9550620003e96040890162000370565b9450620003f96060890162000370565b9350620004096080890162000370565b60a08901519093506001600160401b03808211156200042757600080fd5b818a0191508a601f8301126200043c57600080fd5b8151818111156200045157620004516200038d565b604051601f8201601f19908116603f011681019083821181831017156200047c576200047c6200038d565b816040528281528d868487010111156200049557600080fd5b600093505b82841015620004b957848401860151818501870152928501926200049a565b82841115620004cb5760008684830101525b8096505050505050509295509295509295565b600060208284031215620004f157600080fd5b620004fc8262000370565b9392505050565b6000602082840312156200051657600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156200054957620005496200051d565b500190565b60008160001904831182151516156200056b576200056b6200051d565b500290565b6000826200058e57634e487b7160e01b600052601260045260246000fd5b500490565b600181811c90821680620005a857607f821691505b60208210811415620005ca57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c05160e0516101005161012051610140516111e86200066a6000396000818161023501526108c8015260008181610383015261080901526000818161033901526107620152600081816103120152610a250152600081816101b001526109890152600081816101760152610c170152600081816102eb015281816103db01528181610557015261068f01526111e86000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c80639a6fc8f5116100cd578063b09ad8a011610081578063d62ada1111610066578063d62ada1114610376578063e5693f411461037e578063feaf968c146103a557600080fd5b8063b09ad8a01461035b578063bc489a651461036357600080fd5b8063a50cf2c8116100b2578063a50cf2c8146102e6578063a834559e1461030d578063ab0ca0e11461033457600080fd5b80639a6fc8f514610293578063a384d6ff146102dd57600080fd5b8063427cb6fe116101245780635c975abb116101095780635c975abb1461025f5780637284e416146102765780638456cb591461028b57600080fd5b8063427cb6fe1461023057806354fd4d501461025757600080fd5b8063313ce56711610155578063313ce567146101f75780633f4ba83a146102115780633fd0875f1461021b57600080fd5b806312b495a814610171578063218751b2146101ab575b600080fd5b6101987f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101a2565b6101ff600881565b60405160ff90911681526020016101a2565b6102196103ad565b005b610223600381565b6040516101a29190610dd7565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b610198600181565b60005460ff165b60405190151581526020016101a2565b61027e61049b565b6040516101a29190610e18565b610219610529565b6102a66102a1366004610ea3565b610615565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a0016101a2565b61019860015481565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b6101987f000000000000000000000000000000000000000000000000000000000000000081565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b61019861064f565b610219610371366004610ec7565b610661565b610266600181565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b6102a6610751565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa158015610437573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061045b9190610ee0565b610491576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610499610a67565b565b600280546104a890610f02565b80601f01602080910402602001604051908101604052809291908181526020018280546104d490610f02565b80156105215780601f106104f657610100808354040283529160200191610521565b820191906000526020600020905b81548152906001019060200180831161050457829003601f168201915b505050505081565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa1580156105b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105d79190610ee0565b61060d576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610499610b4d565b60008060008060006040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061065c600154610c0d565b905090565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156106eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070f9190610ee0565b610745576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61074e81610c56565b50565b6000806000806000806000806000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156107cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ef9190610f56565b939d50919b509950975095506108078a8a8989610cd8565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610872573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108969190610f56565b9398509196509450925090506108ae85858484610cd8565b888412156108c6578499508398508297508196508095505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610931573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109559190610f56565b93985091965094509250905061096d85858484610cd8565b88841215610985578499508398508297508196508095505b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb7b8b806040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a169190610fae565b9050610a2181610d73565b90507f0000000000000000000000000000000000000000000000000000000000000000610a4e828c610ff6565b610a5891906110e1565b99505050505050509091929394565b60005460ff16610ad8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff1615610bba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610acf565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b233390565b6000612710610c3c7f000000000000000000000000000000000000000000000000000000000000000082611149565b610c469084611161565b610c50919061119e565b92915050565b80610c8d576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190557f82e7ee47180a631312683eeb2a85ad264c9af490d54de5a75bbdb95b968c6de281610cbd81610c0d565b6040805192835260208301919091520160405180910390a150565b60008313610d12576040517f56e05d2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8369ffffffffffffffffffff168169ffffffffffffffffffff161080610d36575081155b15610d6d576040517fb1cf675500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60015460009080831015610db3576040517fb416da7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610dbe82610c0d565b905080841115610dcf579392505050565b509192915050565b6020810160068310610e12577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b600060208083528351808285015260005b81811015610e4557858101830151858201604001528201610e29565b81811115610e57576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b69ffffffffffffffffffff8116811461074e57600080fd5b600060208284031215610eb557600080fd5b8135610ec081610e8b565b9392505050565b600060208284031215610ed957600080fd5b5035919050565b600060208284031215610ef257600080fd5b81518015158114610ec057600080fd5b600181811c90821680610f1657607f821691505b60208210811415610f50577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600080600080600060a08688031215610f6e57600080fd5b8551610f7981610e8b565b809550506020860151935060408601519250606086015191506080860151610fa081610e8b565b809150509295509295909350565b600060208284031215610fc057600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60008413600084138583048511828216161561103757611037610fc7565b7f8000000000000000000000000000000000000000000000000000000000000000600087128682058812818416161561107257611072610fc7565b6000871292508782058712848416161561108e5761108e610fc7565b878505871281841616156110a4576110a4610fc7565b505050929093029392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826110f0576110f06110b2565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f80000000000000000000000000000000000000000000000000000000000000008314161561114457611144610fc7565b500590565b6000821982111561115c5761115c610fc7565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561119957611199610fc7565b500290565b6000826111ad576111ad6110b2565b50049056fea2646970667358221220226b667ed6fc6db7c8ec1377cc84dae524e2dc572320ead4a7092944a6b912de64736f6c634300080a00336102606040523480156200001257600080fd5b5060405162005f8c38038062005f8c833981016040819052620000359162000ba4565b83838383600384846001600160a01b03821615806200005b57506001600160a01b038116155b156200007a57604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038216608081905260408051632f7a188160e01b81529051632f7a1881916004808201926020929091908290030181865afa158015620000c5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000eb919062000c01565b6001600160a01b0390811660a05290811660c05260016000558416151590506200012857604051635919af9760e11b815260040160405180910390fd5b608051604051630f67c5bd60e41b81526001600160a01b0385811660048301529091169063f67c5bd090602401602060405180830381865afa15801562000173573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000199919062000c26565b620001c757604051634c607af960e11b81526001600160a01b03841660048201526024015b60405180910390fd5b6001600160a01b038084166101e081905261020052821661022052610240819052620001f460006200090a565b6001600160a01b031660e0526200020c60016200090a565b6001600160a01b0316610100526200022560026200090a565b6001600160a01b0316610120526200023e60036200090a565b6001600160a01b031661014052620002576000620009fd565b6001600160a01b031661016052620002706001620009fd565b6001600160a01b031661018052620002896002620009fd565b6001600160a01b03166101a052620002a26003620009fd565b6001600160a01b039081166101c05260e051161580620002cc5750610100516001600160a01b0316155b15620002eb57604051635919af9760e11b815260040160405180910390fd5b600281118015620003065750610120516001600160a01b0316155b156200032557604051635919af9760e11b815260040160405180910390fd5b600381118015620003405750610140516001600160a01b0316155b156200035f57604051635919af9760e11b815260040160405180910390fd5b60805160e051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620003ac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003d2919062000c26565b620004005760e051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b60805161010051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa1580156200044e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000474919062000c26565b620004a35761010051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b60028111801562000525575060805161012051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620004fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000523919062000c26565b155b15620005555761012051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b600381118015620005d7575060805161014051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620005af573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005d5919062000c26565b155b15620006075761014051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b610160516001600160a01b03161580159062000694575060805161016051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa1580156200066c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000692919062000c26565b155b15620006c45761016051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b610180516001600160a01b03161580159062000751575060805161018051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa15801562000729573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200074f919062000c26565b155b15620007815761018051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b6101a0516001600160a01b0316158015906200080e57506080516101a051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620007e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200080c919062000c26565b155b156200083e576101a051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b6101c0516001600160a01b031615801590620008cb57506080516101c051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620008a3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008c9919062000c26565b155b15620008fb576101c051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b50505050505050505062000c66565b60c05160405163c661065760e01b8152600481018390526000916001600160a01b03169063c661065790602401602060405180830381865afa92505050801562000973575060408051601f3d908101601f19168201909252620009709181019062000c01565b60015b6200097e5762000984565b92915050565b60c05160405163046e8dd760e31b8152600f84900b60048201526001600160a01b03909116906323746eb8906024015b602060405180830381865afa925050508015620009f0575060408051601f3d908101601f19168201909252620009ed9181019062000c01565b60015b6200097e57506000919050565b610220516000906001600160a01b03161562000a1e576200097e8262000ac0565b60c051604051630b9947eb60e41b8152600481018490526001600160a01b039091169063b9947eb090602401602060405180830381865afa92505050801562000a86575060408051601f3d908101601f1916820190925262000a839181019062000c01565b60015b6200097e5760c051604051635b9cca9f60e11b8152600f84900b60048201526001600160a01b039091169063b739953e90602401620009b4565b60008162000ad4576200097e600062000b17565b610220516001600160a01b031663c661065762000af360018562000c40565b6040518263ffffffff1660e01b8152600401620009b491815260200190565b919050565b600081600f0b6000141562000b2b575060e0515b81600f0b6001141562000b3e5750610100515b81600f0b6002141562000b515750610120515b81600f0b6003141562000b645750610140515b6001600160a01b03811662000b12576040516334769e6f60e21b815260040160405180910390fd5b80516001600160a01b038116811462000b1257600080fd5b6000806000806080858703121562000bbb57600080fd5b62000bc68562000b8c565b935062000bd66020860162000b8c565b925062000be66040860162000b8c565b915062000bf66060860162000b8c565b905092959194509250565b60006020828403121562000c1457600080fd5b62000c1f8262000b8c565b9392505050565b60006020828403121562000c3957600080fd5b5051919050565b60008282101562000c6157634e487b7160e01b600052601160045260246000fd5b500390565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e051610200516102205161024051614fa962000fe36000396000818161078301528181613708015281816138bf015281816139d901528181613e0f0152613f01015260006105de01526000818161067501528181611f680152818161239f0152818161278901528181612e6b01528181612f0901526131ed015260006108ad01526000818161059c015261288b0152600081816103d4015261285c015260008181610605015261282d0152600081816106af01526127fe015260008181610876015281816126630152818161363501528181613f6b01526146640152600081816104d7015281816126340152818161356501528181613e7901526145480152600081816107f3015281816126050152818161349501528181613d85015261442c015260008181610448015281816125d6015281816133c501528181613cb901526143100152600081816107350152818161091a015281816109e701528181610a7701528181610b6f01528181610bfe01528181610c9501528181610d2601528181611139015281816111b1015281816112ee0152818161144101528181611578015281816115c00152818161166d015281816116b5015281816117660152818161179b01528181611ac501528181611b4301528181611ccd01528181611d4501528181611dea01528181611fb20152818161206b015281816120a00152818161213b0152818161245e015281816124cb0152818161255c01528181612aa901528181612bc801528181612ca2015281816142e801528181614404015281816145200152818161463c01526147840152600081816104fe0152818161291401528181614055015261482b01526000818161075c01528181610ec9015281816118a601528181611ef4015281816122450152818161270101528181612aff01528181612b9901528181612cf801528181612da0015281816130630152818161311a01528181613215015281816132f8015281816133ed015281816134bd0152818161358d0152818161365d01528181613bf401528181613ce401528181613dad01528181613ea101528181613f93015281816140dd015281816141910152818161423b0152818161435e0152818161447a01528181614596015281816146b20152818161475501526148950152614fa96000f3fe608060405234801561001057600080fd5b50600436106103a45760003560e01c806379bea664116101e9578063cc2b27d71161010f578063e2e7d264116100ad578063f446c1d01161007c578063f446c1d014610898578063f851a440146108a0578063fc0c546a146108a8578063fee3f7f9146108cf57600080fd5b8063e2e7d26414610838578063ec026ca71461084b578063ecb586a51461085e578063ef14101e1461087157600080fd5b8063d21220a7116100e9578063d21220a7146107ee578063d96c7fce14610815578063dd62ed3e1461081d578063ddca3f431461083057600080fd5b8063cc2b27d7146107b3578063ce30bbdb146107c6578063cf023dd0146107db57600080fd5b8063b4b577ad11610187578063bd90df7011610156578063bd90df7014610730578063c12c21c014610757578063c21ee1621461077e578063c6610657146107a557600080fd5b8063b4b577ad146106ff578063b739953e14610707578063b9947eb01461071a578063bb7b8b801461072857600080fd5b80638ba51dfc116101c35780638ba51dfc146106aa57806395d89b41146106d15780639fdaea0c146106d9578063a6417ed6146106ec57600080fd5b806379bea6641461065d57806382c630661461067057806385ca3c6f1461069757600080fd5b806333d2ebf2116102ce57806357d788751161026c5780636e1d82711161023b5780636e1d82711461060057806370a082311461062757806376a2f0f01461063a57806378aa73a41461064257600080fd5b806357d78875146105975780635e0d443f146105be57806363543f06146105d157806364a89bca146105d957600080fd5b80634469e30e116102a85780634469e30e146105615780634515cef3146105695780634903b0d11461057c5780635409491a1461058f57600080fd5b806333d2ebf2146105285780633883e1191461053b5780633df021241461054e57600080fd5b806318160ddd1161034657806323746eb81161031557806323746eb8146104bf57806325be124e146104d25780632f7a1881146104f9578063313ce5671461052057600080fd5b806318160ddd146104875780631a4d01d21461048f5780631af4de83146104a45780632081066c146104b757600080fd5b806307211ef71161038257806307211ef7146104305780630dfe168114610443578063140522881461046a57806314f059791461047257600080fd5b8063065a80d8146103a957806306871163146103cf57806306fdde031461041b575b600080fd5b6103bc6103b736600461491d565b6108d7565b6040519081526020015b60405180910390f35b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016103c6565b610423610a73565b6040516103c691906149ae565b6103bc61043e3660046149c1565b610b2b565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc610bfa565b61047a610c8b565b6040516103c691906149fd565b6103bc610d22565b6104a261049d366004614a2e565b610d8f565b005b6104a26104b23660046149c1565b610e27565b6103bc611135565b6103f66104cd36600461491d565b6111a2565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc6111ad565b6104a2610536366004614a53565b61121a565b6103bc610549366004614a8e565b6112ae565b6104a261055c366004614acb565b611366565b61047a611437565b6104a2610577366004614b0d565b6114aa565b6103bc61058a366004614b38565b611546565b6103bc6115bc565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc6105cc3660046149c1565b611629565b6103bc6116b1565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc610635366004614b73565b61171e565b6103bc611797565b61064a600281565b60405161ffff90911681526020016103c6565b6104a261066b3660046149c1565b611804565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b61047a6106a5366004614b90565b611a80565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b610423611b3f565b6104a26106e7366004614b0d565b611bac565b6104a26106fa366004614acb565b611c3f565b6103bc611cc9565b6103f661071536600461491d565b611d36565b6103f6610715366004614b38565b6103bc611d41565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc7f000000000000000000000000000000000000000000000000000000000000000081565b6103f66104cd366004614b38565b6103bc6107c1366004614bce565b611dae565b6107ce600681565b6040516103c69190614bfa565b6104a26107e9366004614a2e565b611e2e565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b61047a611fa8565b6103bc61082b366004614c3b565b61201b565b6103bc61209c565b6103bc610846366004614b38565b612109565b6104a2610859366004614a53565b61217f565b6104a261086c366004614c69565b6123e0565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc61245a565b6103f66124c7565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc612558565b6040517f4903b0d10000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff821660048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634903b0d1906024015b602060405180830381865afa9250505080156109b1575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526109ae91810190614c8d565b60015b610a68576040517f065a80d8000000000000000000000000000000000000000000000000000000008152600f83900b60048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063065a80d8906024015b602060405180830381865afa158015610a44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a689190614c8d565b92915050565b919050565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015610ae0573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b269190810190614d67565b905090565b6040517f07211ef7000000000000000000000000000000000000000000000000000000008152600f84810b600483015283900b6024820152604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906307211ef7906064015b602060405180830381865afa158015610bcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf09190614c8d565b90505b9392505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663140522886040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b269190614c8d565b610c936148ed565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166314f059796040518163ffffffff1660e01b8152600401606060405180830381865afa158015610cfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b269190614db8565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b60026000541415610e01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b60026000908155610e11836125c5565b9050610e1c816126d0565b505060016000555050565b60026000541415610e94576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610f25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f499190614e36565b90506000610f56856127ed565b90506000610f63856127ed565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529192506000918416906370a0823190602401602060405180830381865afa158015610fd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff99190614c8d565b90506001811115611127577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce800000061103f8784614e53565b6110499190614eb7565b604051600f8a810b602483015289900b60448201526064810184905260848101829052909150611124908690869086907fa6417ed6000000000000000000000000000000000000000000000000000000009060a4015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526001806128f7565b50505b505060016000555050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632081066c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6000610a68826125c5565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b60026000541415611287576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b60026000908155611297836125c5565b90506112a4838284612d6f565b5050600160005550565b6040517f3883e11900000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690633883e119906113259086908690600401614ef2565b602060405180830381865afa158015611342573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf39190614c8d565b600260005414156113d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b600260009081556113e3856125c5565b905060006113f0856125c5565b905061112782826000368080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525060019350915061301a9050565b61143f6148ed565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16634469e30e6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610cfe573d6000803e3d6000fd5b60026000541415611517576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b6002600090815561153d90600184358110916020860135821091604087013511906130e9565b50506001600055565b6040517f4903b0d1000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634903b0d19060240161095a565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635409491a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6040517f5e0d443f000000000000000000000000000000000000000000000000000000008152600f84810b600483015283900b6024820152604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635e0d443f90606401610baf565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166363543f066040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401610a27565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166376a2f0f06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b60026000541415611871576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611902573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119269190614e36565b90506000611933856125c5565b90506000611940856125c5565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529192506000918416906370a0823190602401602060405180830381865afa1580156119b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d69190614c8d565b90506001811115611127577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce8000000611a1c8784614e53565b611a269190614eb7565b604051600f8a810b602483015289900b60448201526064810184905260848101829052909150611124908690869086907f3df02124000000000000000000000000000000000000000000000000000000009060a40161109f565b611a886148ed565b6040517f85ca3c6f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906385ca3c6f90611afe90879087908790600401614f0a565b606060405180830381865afa158015611b1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf09190614db8565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610ae0573d6000803e3d6000fd5b60026000541415611c19576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b6002600090815561153d90600184358110916020860135821091604087013511906132c7565b60026000541415611cac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b60026000908155611cbc856127ed565b905060006113f0856127ed565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b4b577ad6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6000610a68826127ed565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb7b8b806040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6040517fcc2b27d700000000000000000000000000000000000000000000000000000000815260048101839052600f82900b60248201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063cc2b27d790604401611325565b60026000541415611e9b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b60026000908155611eab836125c5565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611f3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f5f9190614e36565b9050611f9b81837f0000000000000000000000000000000000000000000000000000000000000000611f92888a89613704565b600160006128f7565b5050600160005550505050565b611fb06148ed565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d96c7fce6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610cfe573d6000803e3d6000fd5b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063dd62ed3e90604401611325565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6040517fe2e7d264000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e2e7d26490602401610a27565b600260005414156121ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b600260009081556121fc836125c5565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa15801561228c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b09190614e36565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000918416906370a0823190602401602060405180830381865afa158015612322573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123469190614c8d565b905060018111156123d4577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce800000061238c8684614e53565b6123969190614eb7565b90506123d183857f00000000000000000000000000000000000000000000000000000000000000006123c98a8787613704565b6001806128f7565b50505b50506001600055505050565b6002600054141561244d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b600260005561153d613bc3565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f446c1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa158015612534573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b269190614e36565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fee3f7f96040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b600081600f0b600014156125f657507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6001141561262557507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6002141561265457507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6003141561268357507f00000000000000000000000000000000000000000000000000000000000000005b73ffffffffffffffffffffffffffffffffffffffff8116610a6e576040517fd1da79bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa15801561275d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127819190614e36565b90506127e8817f0000000000000000000000000000000000000000000000000000000000000000846000368080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525092508291506128f79050565b505050565b600081600f0b6000141561281e57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6001141561284d57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6002141561287c57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6003141561268357507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff8116610a6e576040517fd1da79bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606000803373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614612a60576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301528916906370a0823190602401602060405180830381865afa1580156129a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129c99190614c8d565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152919350908816906370a0823190602401602060405180830381865afa158015612a39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a5d9190614c8d565b90505b8415612b5c576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612b4357600080fd5b505af1158015612b57573d6000803e3d6000fd5b505050505b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a90612bf29033907f0000000000000000000000000000000000000000000000000000000000000000908b90600401614f31565b6000604051808303816000875af1158015612c11573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052612c579190810190614d67565b92508415612d55576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612d3c57600080fd5b505af1158015612d50573d6000803e3d6000fd5b505050505b612d6389898985858961403d565b50509695505050505050565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612dfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e209190614e36565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000917f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015612eb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ed69190614c8d565b90506001811115613013577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01613011827f0000000000000000000000000000000000000000000000000000000000000000867f1a4d01d200000000000000000000000000000000000000000000000000000000858a6b033b2e3c9fd0803ce8000000612f638b84614e53565b612f6d9190614eb7565b6040516024810193909352600f9190910b60448301526064820152608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152600060016128f7565b505b5050505050565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015260609060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa1580156130aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130ce9190614e36565b90506130de8188888888886128f7565b979650505050505050565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015613176573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061319a9190614e36565b90506131a88585858561429f565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561325957600080fd5b505af115801561326d573d6000803e3d6000fd5b505050506132b16000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061471592505050565b506132be8585858561429f565b61301381614813565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015613354573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133789190614e36565b9050841561344a576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561343157600080fd5b505af1158015613445573d6000803e3d6000fd5b505050505b831561351a576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561350157600080fd5b505af1158015613515573d6000803e3d6000fd5b505050505b82156135ea576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156135d157600080fd5b505af11580156135e5573d6000803e3d6000fd5b505050505b81156136ba576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156136a157600080fd5b505af11580156136b5573d6000803e3d6000fd5b505050505b6136fa6000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061471592505050565b5061301381614813565b60607f0000000000000000000000000000000000000000000000000000000000000000600214156138bd5783600f0b6000146137fa576040516000602482015260448101849052606481018390527f0b4c7e4d00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526138b6565b6040516024810184905260006044820152606481018390527f0b4c7e4d00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091525b9050610bf3565b7f0000000000000000000000000000000000000000000000000000000000000000600314156139d75783600f0b60001461398e5783600f0b60011461394557604051600060248201819052604482015260648101849052608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401613778565b604051600060248201819052604482018590526064820152608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401613778565b604051602481018490526000604482018190526064820152608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401613838565b7f000000000000000000000000000000000000000000000000000000000000000060041415613b615783600f0b600014613b115783600f0b600114613ac15783600f0b600214613a71576040516000602482018190526044820181905260648201526084810184905260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613778565b6040516000602482018190526044820181905260648201859052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613778565b6040516000602482018190526044820185905260648201819052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613778565b6040516024810184905260006044820181905260648201819052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613838565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f496e636f7272656374206e436f696e73000000000000000000000000000000006044820152606401610df8565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015613c50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c749190614e36565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301529192507f0000000000000000000000000000000000000000000000000000000000000000909116906351e3f16090604401600060405180830381600087803b158015613d2a57600080fd5b505af1158015613d3e573d6000803e3d6000fd5b50506040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f00000000000000000000000000000000000000000000000000000000000000001692506351e3f1609150604401600060405180830381600087803b158015613df357600080fd5b505af1158015613e07573d6000803e3d6000fd5b5050505060027f00000000000000000000000000000000000000000000000000000000000000001115613ff0576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015613ee557600080fd5b505af1158015613ef9573d6000803e3d6000fd5b5050505060037f00000000000000000000000000000000000000000000000000000000000000001115613ff0576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015613fd757600080fd5b505af1158015613feb573d6000803e3d6000fd5b505050505b6140306000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061471592505050565b5061403a81614813565b50565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461413e576040517f654a9eda00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528681166024830152858116604483015260648201859052608482018490527f0000000000000000000000000000000000000000000000000000000000000000169063654a9eda9060a401600060405180830381600087803b15801561412157600080fd5b505af1158015614135573d6000803e3d6000fd5b50505050613011565b80156141ee576040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015286811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b1580156141d557600080fd5b505af11580156141e9573d6000803e3d6000fd5b505050505b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015285811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561427f57600080fd5b505af1158015614293573d6000803e3d6000fd5b50505050505050505050565b83156143bb576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156143a257600080fd5b505af11580156143b6573d6000803e3d6000fd5b505050505b82156144d7576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156144be57600080fd5b505af11580156144d2573d6000803e3d6000fd5b505050505b81156145f3576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156145da57600080fd5b505af11580156145ee573d6000803e3d6000fd5b505050505b801561470f576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156146f657600080fd5b505af115801561470a573d6000803e3d6000fd5b505050505b50505050565b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815260609073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a906147ae9033907f0000000000000000000000000000000000000000000000000000000000000000908790600401614f31565b6000604051808303816000875af11580156147cd573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610a689190810190614d67565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461403a576040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b1580156148d957600080fd5b505af1158015613013573d6000803e3d6000fd5b60405180606001604052806003906020820280368337509192915050565b8035600f81900b8114610a6e57600080fd5b60006020828403121561492f57600080fd5b610bf38261490b565b60005b8381101561495357818101518382015260200161493b565b8381111561470f5750506000910152565b6000815180845261497c816020860160208601614938565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610bf36020830184614964565b6000806000606084860312156149d657600080fd5b6149df8461490b565b92506149ed6020850161490b565b9150604084013590509250925092565b60608101818360005b6003811015614a25578151835260209283019290910190600101614a06565b50505092915050565b600080600060608486031215614a4357600080fd5b833592506149ed6020850161490b565b60008060408385031215614a6657600080fd5b614a6f8361490b565b946020939093013593505050565b8060608101831015610a6857600080fd5b60008060808385031215614aa157600080fd5b614aab8484614a7d565b915060608301358015158114614ac057600080fd5b809150509250929050565b60008060008060808587031215614ae157600080fd5b614aea8561490b565b9350614af86020860161490b565b93969395505050506040820135916060013590565b60008060808385031215614b2057600080fd5b614b2a8484614a7d565b946060939093013593505050565b600060208284031215614b4a57600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461403a57600080fd5b600060208284031215614b8557600080fd5b8135610bf381614b51565b600080600060e08486031215614ba557600080fd5b614baf8585614a7d565b9250614bbe8560608601614a7d565b915060c084013590509250925092565b60008060408385031215614be157600080fd5b82359150614bf16020840161490b565b90509250929050565b6020810160118310614c35577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60008060408385031215614c4e57600080fd5b8235614c5981614b51565b91506020830135614ac081614b51565b60008060808385031215614c7c57600080fd5b82359150614bf18460208501614a7d565b600060208284031215614c9f57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff80841115614cf057614cf0614ca6565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715614d3657614d36614ca6565b81604052809350858152868686011115614d4f57600080fd5b614d5d866020830187614938565b5050509392505050565b600060208284031215614d7957600080fd5b815167ffffffffffffffff811115614d9057600080fd5b8201601f81018413614da157600080fd5b614db084825160208401614cd5565b949350505050565b600060608284031215614dca57600080fd5b82601f830112614dd957600080fd5b6040516060810181811067ffffffffffffffff82111715614dfc57614dfc614ca6565b604052806060840185811115614e1157600080fd5b845b81811015614e2b578051835260209283019201614e13565b509195945050505050565b600060208284031215614e4857600080fd5b8151610bf381614b51565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614eb2577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500290565b600082614eed577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60808101606084833791151560609190910152919050565b60e081016060858337606082016000815260608582375060c0919091019190915292915050565b600073ffffffffffffffffffffffffffffffffffffffff808616835280851660208401525060606040830152614f6a6060830184614964565b9594505050505056fea2646970667358221220efb951725986e76ee157ff0d00cd7b7a6a9b8a581784400c52be5c96516fe15064736f6c634300080a0033608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6118158061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c80638da5cb5b11610076578063d7aa2e351161005b578063d7aa2e35146101b3578063d914cd4b146101f2578063f2fde38b1461020557600080fd5b80638da5cb5b1461015d578063c488f7fe1461018557600080fd5b80634dee073b116100a75780634dee073b146101015780636f33547d14610142578063715018a61461015557600080fd5b80631bf64c41146100c357806345330666146100ec575b600080fd5b6100d66100d1366004611345565b610218565b6040516100e3919061142e565b60405180910390f35b6100ff6100fa366004611500565b6103fa565b005b61012f61010f366004611551565b6001602090815260009283526040808420909152908252902054600f0b81565b604051600f9190910b81526020016100e3565b6100d6610150366004611345565b6104d7565b6100ff610514565b60005460405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100e3565b61012f610193366004611551565b6002602090815260009283526040808420909152908252902054600f0b81565b6101e46101c136600461158a565b600360209081526000938452604080852082529284528284209052825290205481565b6040519081526020016100e3565b6100ff6102003660046115d5565b6105a1565b6100ff6102133660046115d5565b61089e565b6102556040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b61025e836109ce565b156103f45760008273ffffffffffffffffffffffffffffffffffffffff1663bd90df706040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102d491906115f2565b905060008060008060006102e88987610a67565b9450945094509450945082156103ed5760405180608001604052806103118b8b858a8a89610d8b565b8152602001828152602001600115158152602001600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008c6040015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008c6060015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481525096505b5050505050505b92915050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610480576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff93841660009081526003602090815260408083209587168084528683528184209590971683529381528382208390559384528281209481529390925290912055565b6103f46040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b60005473ffffffffffffffffffffffffffffffffffffffff163314610595576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610477565b61059f6000611045565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610622576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610477565b60005b6004600f82900b121561075d576040517f23746eb8000000000000000000000000000000000000000000000000000000008152600f82900b600482015273ffffffffffffffffffffffffffffffffffffffff8316906323746eb890602401602060405180830381865afa9250505080156106da575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526106d7918101906115f2565b60015b6106e35761075d565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160208181526040808420959094168352939093522080547fffffffffffffffffffffffffffffffff0000000000000000000000000000000016929091016fffffffffffffffffffffffffffffffff8116929092179055610625565b5060005b6004600f82900b121561089a576040517fb739953e000000000000000000000000000000000000000000000000000000008152600f82900b600482015273ffffffffffffffffffffffffffffffffffffffff83169063b739953e90602401602060405180830381865afa925050508015610816575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610813918101906115f2565b60015b61081e575050565b73ffffffffffffffffffffffffffffffffffffffff808416600090815260026020908152604080832094909316825292909252902080546fffffffffffffffffffffffffffffffff60018401167fffffffffffffffffffffffffffffffff00000000000000000000000000000000909116179055600101610761565b5050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461091f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610477565b73ffffffffffffffffffffffffffffffffffffffff81166109c2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610477565b6109cb81611045565b50565b600080825160028111156109e4576109e461160f565b1480610a025750600182516002811115610a0057610a0061160f565b145b15610a0f57506001919050565b600282516002811115610a2457610a2461160f565b1415610a3257506000919050565b81516040517ffe7995cf000000000000000000000000000000000000000000000000000000008152610477919060040161163e565b73ffffffffffffffffffffffffffffffffffffffff80821660009081526001602081815260408084208782015190951684529390529181205490918291829182918291610ab691600f0b6116ae565b73ffffffffffffffffffffffffffffffffffffffff808816600090815260016020818152604080842060608e0151909516845293905291902054919650610aff91600f0b6116ae565b9350600085600f0b12158015610b195750600084600f0b12155b15610bf85760a08701516040517f5e0d443f000000000000000000000000000000000000000000000000000000008152600f87810b600483015286900b6024820152604481019190915273ffffffffffffffffffffffffffffffffffffffff871690635e0d443f90606401602060405180830381865afa925050508015610bdb575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610bd89181019061171f565b60015b610be457610d81565b8015610bf257600193508091505b50610d81565b73ffffffffffffffffffffffffffffffffffffffff80871660009081526002602090815260408083208b82015190941683529290522054610c3e90600190600f0b6116ae565b73ffffffffffffffffffffffffffffffffffffffff808816600090815260026020908152604080832060608d015190941683529290522054909550610c8890600190600f0b6116ae565b9350600085600f0b12158015610ca25750600084600f0b12155b15610d815760a08701516040517f07211ef7000000000000000000000000000000000000000000000000000000008152600f87810b600483015286900b6024820152604481019190915273ffffffffffffffffffffffffffffffffffffffff8716906307211ef790606401602060405180830381865afa925050508015610d64575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610d619181019061171f565b60015b610d6d57610d81565b8015610d7f5760019350809150600192505b505b9295509295909350565b6040805180820190915260008152606060208201526060600188516002811115610db757610db761160f565b1415610eb75782610de8577f79bea66400000000000000000000000000000000000000000000000000000000610e0a565b7f1af4de83000000000000000000000000000000000000000000000000000000005b8585610e168b8a6110ba565b604051600f93840b60248201529190920b60448201526064810191909152608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505b600088516002811115610ecc57610ecc61160f565b1415610fcc5782610efd577f3df0212400000000000000000000000000000000000000000000000000000000610f1f565b7fa6417ed6000000000000000000000000000000000000000000000000000000005b8585610f2b8b8a6110f2565b604051600f93840b60248201529190920b60448201526064810191909152608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505b8051156110065760405180604001604052808873ffffffffffffffffffffffffffffffffffffffff1681526020018281525091505061103b565b87516040517ffe7995cf000000000000000000000000000000000000000000000000000000008152610477919060040161163e565b9695505050505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60a08201516000906110e1846110dc856b033b2e3c9fd0803ce8000000611738565b6110f2565b6110eb9190611775565b9392505050565b60008260e0015115611106575060006103f4565b60008351600281111561111b5761111b61160f565b148061113957506001835160028111156111375761113761160f565b145b1561116c5760c08301516127109061115190826117b0565b61115b9084611738565b6111659190611775565b90506103f4565b6002835160028111156111815761118161160f565b14156111a45760c0830151611198906127106117c7565b61115b61271084611738565b82516040517ffe7995cf000000000000000000000000000000000000000000000000000000008152610477919060040161163e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610100810167ffffffffffffffff8111828210171561122c5761122c6111d9565b60405290565b80356003811061124157600080fd5b919050565b73ffffffffffffffffffffffffffffffffffffffff811681146109cb57600080fd5b803561124181611246565b600082601f83011261128457600080fd5b8135602067ffffffffffffffff808311156112a1576112a16111d9565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f830116810181811084821117156112e4576112e46111d9565b60405293845285810183019383810192508785111561130257600080fd5b83870191505b8482101561132a57813561131b81611246565b83529183019190830190611308565b979650505050505050565b8035801515811461124157600080fd5b6000806040838503121561135857600080fd5b823567ffffffffffffffff8082111561137057600080fd5b90840190610100828703121561138557600080fd5b61138d611208565b61139683611232565b81526113a460208401611268565b60208201526113b560408401611268565b60408201526113c660608401611268565b60608201526080830135828111156113dd57600080fd5b6113e988828601611273565b60808301525060a083013560a082015260c083013560c082015261140f60e08401611335565b60e0820152935061142591505060208401611268565b90509250929050565b60006020808352835160808285015273ffffffffffffffffffffffffffffffffffffffff81511660a0850152818101519050604060c085015280518060e086015260005b8181101561148f5782810184015186820161010001528301611472565b818111156114a257600061010083880101525b50828601516040860152604086015192506114c1606086018415159052565b606095909501516080850152505050601f919091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016016101000190565b6000806000806080858703121561151657600080fd5b843561152181611246565b9350602085013561153181611246565b9250604085013561154181611246565b9396929550929360600135925050565b6000806040838503121561156457600080fd5b823561156f81611246565b9150602083013561157f81611246565b809150509250929050565b60008060006060848603121561159f57600080fd5b83356115aa81611246565b925060208401356115ba81611246565b915060408401356115ca81611246565b809150509250925092565b6000602082840312156115e757600080fd5b81356110eb81611246565b60006020828403121561160457600080fd5b81516110eb81611246565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160038310611679577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600081600f0b83600f0b60008112817fffffffffffffffffffffffffffffffff80000000000000000000000000000000018312811516156116f1576116f161167f565b816f7fffffffffffffffffffffffffffffff0183138116156117155761171561167f565b5090039392505050565b60006020828403121561173157600080fd5b5051919050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156117705761177061167f565b500290565b6000826117ab577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000828210156117c2576117c261167f565b500390565b600082198211156117da576117da61167f565b50019056fea2646970667358221220ed82995f9e9761ea7972d39ed0d8d0b378778cbba995315b16c90b49c74d2b7e64736f6c634300080a0033608060405234801561001057600080fd5b50611a3c806100206000396000f3fe6080604052600436106101a15760003560e01c806385f8c259116100e1578063baa2abde1161008a578063ded9382a11610064578063ded9382a14610424578063e8e3370014610451578063f305d7191461049a578063fb3bdb41146104b957600080fd5b8063baa2abde146103da578063c45a015514610382578063d06ca61f1461040457600080fd5b8063ad615dec116100bb578063ad615dec146101e9578063af2979eb1461039e578063b6f9de95146103c557600080fd5b806385f8c259146101e95780638803dbee14610362578063ad5c46481461038257600080fd5b806338ed17391161014e5780635b0d5984116101285780635b0d5984146102fb5780635c11d79514610326578063791ac947146103265780637ff36ab51461034957600080fd5b806338ed1739146102b95780634a25d94a146102175780635911fb9a146102d957600080fd5b80631f00ca741161017f5780631f00ca741461024b5780632195995c1461026b578063379b87ea1461029957600080fd5b806302751cec146101a6578063054d50d4146101e957806318cbafe514610217575b600080fd5b3480156101b257600080fd5b506101cf6101c13660046112b8565b600080965096945050505050565b604080519283526020830191909152015b60405180910390f35b3480156101f557600080fd5b50610209610204366004611310565b6104cc565b6040519081526020016101e0565b34801561022357600080fd5b5061023e610232366004611388565b60609695505050505050565b6040516101e091906113f8565b34801561025757600080fd5b5061023e61026636600461143c565b6104d6565b34801561027757600080fd5b506101cf6102863660046114aa565b6000809b509b9950505050505050505050565b3480156102a557600080fd5b506102096102b436600461154e565b610728565b3480156102c557600080fd5b5061023e6102d4366004611388565b6107c6565b3480156102e557600080fd5b506102f96102f4366004611581565b6109a6565b005b34801561030757600080fd5b506102096103163660046115bd565b60009a9950505050505050505050565b34801561033257600080fd5b506102f9610341366004611388565b505050505050565b61023e61035736600461164f565b606095945050505050565b34801561036e57600080fd5b5061023e61037d366004611388565b610a28565b34801561038e57600080fd5b50604051600081526020016101e0565b3480156103aa57600080fd5b506102096103b93660046112b8565b60009695505050505050565b6102f96103d336600461164f565b5050505050565b3480156103e657600080fd5b506101cf6103f53660046116b5565b60008097509795505050505050565b34801561041057600080fd5b5061023e61041f36600461143c565b610b7e565b34801561043057600080fd5b506101cf61043f3660046115bd565b6000809a509a98505050505050505050565b34801561045d57600080fd5b5061047f61046c36600461171f565b6000806000985098509895505050505050565b604080519384526020840192909252908201526060016101e0565b61047f6104a83660046112b8565b600080600096509650969350505050565b61023e6104c736600461164f565b610d65565b60005b9392505050565b60606002821015610548576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f496e636f72726563742070617468206c656e677468000000000000000000000060448201526064015b60405180910390fd5b8167ffffffffffffffff81111561056157610561611793565b60405190808252806020026020018201604052801561058a578160200160208202803683370190505b509050838161059a6001856117f1565b815181106105aa576105aa611808565b602090810291909101015260006105c26001846117f1565b90505b801561072057600061062885856105dd6001866117f1565b8181106105ec576105ec611808565b90506020020160208101906106019190611837565b86868581811061061357610613611808565b90506020020160208101906102b49190611837565b905080610691576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f556e69737761704d6f636b3a2052617465206973206e6f742073657475700000604482015260640161053f565b6103e5816b033b2e3c9fd0803ce80000008585815181106106b4576106b4611808565b60200260200101516106c69190611852565b6106d0919061188f565b6106dc906103e8611852565b6106e6919061188f565b836106f26001856117f1565b8151811061070257610702611808565b60209081029190910101525080610718816118ca565b9150506105c5565b509392505050565b73ffffffffffffffffffffffffffffffffffffffff80831660009081526020818152604080832093851683529290522054806107c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f546f6b656e2070616972206e6f7420666f756e64000000000000000000000000604482015260640161053f565b92915050565b60608142811015610833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015260640161053f565b6000610840898888610b7e565b90506000816108506001896117f1565b8151811061086057610860611808565b60200260200101519050888110156108fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f556e69737761705632526f757465723a20494e53554646494349454e545f4f5560448201527f545055545f414d4f554e54000000000000000000000000000000000000000000606482015260840161053f565b61094633308c8b8b600081811061091357610913611808565b90506020020160208101906109289190611837565b73ffffffffffffffffffffffffffffffffffffffff16929190610d94565b61099986828a8a6109586001826117f1565b81811061096757610967611808565b905060200201602081019061097c9190611837565b73ffffffffffffffffffffffffffffffffffffffff169190610e76565b5098975050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152602081815260408083209386168352929052208190556109ef6b033b2e3c9fd0803ce800000082610ed1565b73ffffffffffffffffffffffffffffffffffffffff92831660009081526020818152604080832096909516825294909452919092205550565b60608142811015610a95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015260640161053f565b6000610aa28988886104d6565b9050600081600081518110610ab957610ab9611808565b6020026020010151905088811115610b53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f556e69737761705632526f757465723a204558434553534956455f494e50555460448201527f5f414d4f554e5400000000000000000000000000000000000000000000000000606482015260840161053f565b610b6c3330838b8b600081811061091357610913611808565b610999868b8a8a6109586001826117f1565b60606002821015610beb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f496e636f72726563742070617468206c656e6774680000000000000000000000604482015260640161053f565b8167ffffffffffffffff811115610c0457610c04611793565b604051908082528060200260200182016040528015610c2d578160200160208202803683370190505b5090508381600081518110610c4457610c44611808565b602090810291909101015260015b82811015610720576000610c6c85856105dd6001866117f1565b905080610cd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f556e69737761704d6f636b3a2052617465206973206e6f742073657475700000604482015260640161053f565b6103e86103e56b033b2e3c9fd0803ce80000008386610cf56001886117f1565b81518110610d0557610d05611808565b6020026020010151610d179190611852565b610d21919061188f565b610d2b9190611852565b610d35919061188f565b838381518110610d4757610d47611808565b60209081029190910101525080610d5d816118ff565b915050610c52565b604080516001808252818301909252606091600091906020808301908036833701905050979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052610e709085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611037565b50505050565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610ecc9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401610dee565b505050565b60408051808201909152600281527f4d33000000000000000000000000000000000000000000000000000000000000602082015260009082610f40576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053f9190611964565b506000610f4e60028461188f565b90506b033b2e3c9fd0803ce8000000610f87827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6117f1565b610f91919061188f565b8411156040518060400160405280600281526020017f4d3100000000000000000000000000000000000000000000000000000000000081525090611002576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053f9190611964565b50828161101b6b033b2e3c9fd0803ce800000087611852565b61102591906119b5565b61102f919061188f565b949350505050565b6000611099826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166111439092919063ffffffff16565b805190915015610ecc57808060200190518101906110b791906119cd565b610ecc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161053f565b606061102f848460008585843b6111b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161053f565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516111df91906119ea565b60006040518083038185875af1925050503d806000811461121c576040519150601f19603f3d011682016040523d82523d6000602084013e611221565b606091505b509150915061123182828661123c565b979650505050505050565b6060831561124b5750816104cf565b82511561125b5782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053f9190611964565b803573ffffffffffffffffffffffffffffffffffffffff811681146112b357600080fd5b919050565b60008060008060008060c087890312156112d157600080fd5b6112da8761128f565b95506020870135945060408701359350606087013592506112fd6080880161128f565b915060a087013590509295509295509295565b60008060006060848603121561132557600080fd5b505081359360208301359350604090920135919050565b60008083601f84011261134e57600080fd5b50813567ffffffffffffffff81111561136657600080fd5b6020830191508360208260051b850101111561138157600080fd5b9250929050565b60008060008060008060a087890312156113a157600080fd5b8635955060208701359450604087013567ffffffffffffffff8111156113c657600080fd5b6113d289828a0161133c565b90955093506113e590506060880161128f565b9150608087013590509295509295509295565b6020808252825182820181905260009190848201906040850190845b8181101561143057835183529284019291840191600101611414565b50909695505050505050565b60008060006040848603121561145157600080fd5b83359250602084013567ffffffffffffffff81111561146f57600080fd5b61147b8682870161133c565b9497909650939450505050565b801515811461149657600080fd5b50565b803560ff811681146112b357600080fd5b60008060008060008060008060008060006101608c8e0312156114cc57600080fd5b6114d58c61128f565b9a506114e360208d0161128f565b995060408c0135985060608c0135975060808c0135965061150660a08d0161128f565b955060c08c0135945060e08c013561151d81611488565b935061152c6101008d01611499565b92506101208c013591506101408c013590509295989b509295989b9093969950565b6000806040838503121561156157600080fd5b61156a8361128f565b91506115786020840161128f565b90509250929050565b60008060006060848603121561159657600080fd5b61159f8461128f565b92506115ad6020850161128f565b9150604084013590509250925092565b6000806000806000806000806000806101408b8d0312156115dd57600080fd5b6115e68b61128f565b995060208b0135985060408b0135975060608b0135965061160960808c0161128f565b955060a08b0135945060c08b013561162081611488565b935061162e60e08c01611499565b92506101008b013591506101208b013590509295989b9194979a5092959850565b60008060008060006080868803121561166757600080fd5b85359450602086013567ffffffffffffffff81111561168557600080fd5b6116918882890161133c565b90955093506116a490506040870161128f565b949793965091946060013592915050565b600080600080600080600060e0888a0312156116d057600080fd5b6116d98861128f565b96506116e76020890161128f565b955060408801359450606088013593506080880135925061170a60a0890161128f565b915060c0880135905092959891949750929550565b600080600080600080600080610100898b03121561173c57600080fd5b6117458961128f565b975061175360208a0161128f565b965060408901359550606089013594506080890135935060a0890135925061177d60c08a0161128f565b915060e089013590509295985092959890939650565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015611803576118036117c2565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561184957600080fd5b6104cf8261128f565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561188a5761188a6117c2565b500290565b6000826118c5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000816118d9576118d96117c2565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611931576119316117c2565b5060010190565b60005b8381101561195357818101518382015260200161193b565b83811115610e705750506000910152565b6020815260008251806020840152611983816040850160208701611938565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b600082198211156119c8576119c86117c2565b500190565b6000602082840312156119df57600080fd5b81516104cf81611488565b600082516119fc818460208701611938565b919091019291505056fea2646970667358221220c83ba4b7a780d6bcd42d58ce63ee43d73cb764a70cd33e8cc91609b9554a872e64736f6c634300080a003360e06040523480156200001157600080fd5b506040516200251b3803806200251b833981016040819052620000349162000121565b81816001600160a01b03821615806200005457506001600160a01b038116155b156200007357604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038216608081905260408051632f7a188160e01b81529051632f7a1881916004808201926020929091908290030181865afa158015620000be573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e4919062000159565b6001600160a01b0390811660a0521660c05250506001600055506200017e565b80516001600160a01b03811681146200011c57600080fd5b919050565b600080604083850312156200013557600080fd5b620001408362000104565b9150620001506020840162000104565b90509250929050565b6000602082840312156200016c57600080fd5b620001778262000104565b9392505050565b60805160a05160c0516122da620002416000396000818161045e015281816106040152818161070101528181610aa401528181610c9c01528181610d6e015281816110dd01528181611186015281816113a8015281816114c701526115a10152600081816102b40152818161121301526116860152600081816104b20152818161084601528181610b8c01528181610e56015281816113fe01528181611498015281816115f70152818161170e015281816117c2015261186c01526122da6000f3fe6080604052600436106101cd5760003560e01c8063ad5c4648116100f7578063c12c21c011610095578063ded9382a11610064578063ded9382a1461052b578063e8e3370014610546578063f305d71914610581578063fb3bdb411461038557600080fd5b8063c12c21c0146104a0578063c45a0155146104d4578063ce30bbdb146104e9578063d06ca61f1461050b57600080fd5b8063b6f9de95116100d1578063b6f9de9514610423578063baa2abde14610431578063bd90df701461044c578063bdbeaa311461048057600080fd5b8063ad5c4648146103d3578063ad615dec146103e8578063af2979eb1461040857600080fd5b80634a25d94a1161016f578063791ac9471161013e578063791ac9471461033b5780637ff36ab51461038557806385f8c259146103935780638803dbee146103b357600080fd5b80634a25d94a1461023a5780635b0d59841461031b5780635c11d7951461033b57806378aa73a41461035d57600080fd5b80631f00ca74116101ab5780631f00ca74146102675780632195995c146102875780632f7a1881146102a257806338ed1739146102fb57600080fd5b806302751cec146101d2578063054d50d41461020c57806318cbafe51461023a575b600080fd5b3480156101de57600080fd5b506101f26101ed3660046118f6565b61058f565b604080519283526020830191909152015b60405180910390f35b34801561021857600080fd5b5061022c610227366004611954565b6105c4565b604051908152602001610203565b34801561024657600080fd5b5061025a6102553660046119cc565b61068d565b6040516102039190611a3f565b34801561027357600080fd5b5061025a610282366004611a83565b6106c1565b34801561029357600080fd5b506101f26101ed366004611af5565b3480156102ae57600080fd5b506102d67f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610203565b34801561030757600080fd5b5061025a6103163660046119cc565b61079d565b34801561032757600080fd5b5061022c610336366004611b9d565b6109fe565b34801561034757600080fd5b5061035b6103563660046119cc565b610a32565b005b34801561036957600080fd5b50610372600281565b60405161ffff9091168152602001610203565b61025a610255366004611c31565b34801561039f57600080fd5b5061022c6103ae366004611954565b610a64565b3480156103bf57600080fd5b5061025a6103ce3660046119cc565b610ae8565b3480156103df57600080fd5b506102d6610c98565b3480156103f457600080fd5b5061022c610403366004611954565b610d2e565b34801561041457600080fd5b5061022c6103363660046118f6565b61035b610356366004611c31565b34801561043d57600080fd5b506101f26101ed366004611c98565b34801561045857600080fd5b506102d67f000000000000000000000000000000000000000000000000000000000000000081565b34801561048c57600080fd5b5061025a61049b366004611d0a565b610db2565b3480156104ac57600080fd5b506102d67f000000000000000000000000000000000000000000000000000000000000000081565b3480156104e057600080fd5b506102d66110d9565b3480156104f557600080fd5b506104fe600181565b6040516102039190611d5d565b34801561051757600080fd5b5061025a610526366004611a83565b611146565b34801561053757600080fd5b506101f26101ed366004611b9d565b34801561055257600080fd5b50610566610561366004611d9e565b6111bf565b60408051938452602084019290925290820152606001610203565b6105666105613660046118f6565b6000806040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f054d50d40000000000000000000000000000000000000000000000000000000081526004810184905260248101839052604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063054d50d4906064015b602060405180830381865afa158015610661573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106859190611e1a565b949350505050565b60606040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1f00ca7400000000000000000000000000000000000000000000000000000000815260609073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690631f00ca749061073a90879087908790600401611e89565b600060405180830381865afa158015610757573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526106859190810190611f2a565b606060026000541415610811576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156108a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c69190611fd0565b90506000868660008181106108dd576108dd611ff4565b90506020020160208101906108f29190612023565b90506000878761090360018261206f565b81811061091257610912611ff4565b90506020020160208101906109279190612023565b90506109d88383836338ed173960e01b8e8e8e8e8b8e60405160240161095296959493929190612086565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152600160006111f6565b8060200190518101906109eb9190611f2a565b60016000559a9950505050505050505050565b60006040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f85f8c2590000000000000000000000000000000000000000000000000000000081526004810184905260248101839052604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906385f8c25990606401610644565b606060026000541415610b57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610808565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610be8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0c9190611fd0565b9050600086866000818110610c2357610c23611ff4565b9050602002016020810190610c389190612023565b905060008787610c4960018261206f565b818110610c5857610c58611ff4565b9050602002016020810190610c6d9190612023565b90506109d8838383638803dbee60e01b8e8e8e8e8b8e60405160240161095296959493929190612086565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d299190611fd0565b905090565b6040517fad615dec0000000000000000000000000000000000000000000000000000000081526004810184905260248101839052604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ad615dec90606401610644565b606060026000541415610e21576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610808565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610eb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed69190611fd0565b9050600085856000818110610eed57610eed611ff4565b9050602002016020810190610f029190612023565b905060008686610f1360018261206f565b818110610f2257610f22611ff4565b9050602002016020810190610f379190612023565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529192506000918416906370a0823190602401602060405180830381865afa158015610fa9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fcd9190611e1a565b905060018111156110c7578080600190039150506110b18484846338ed173960e01b856b033b2e3c9fd0803ce80000008f8861100991906120d1565b611013919061210e565b8e8e8c8f60405160240161102c96959493929190612086565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526001806111f6565b8060200190518101906110c49190611f2a565b94505b50506001600055509095945050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d05573d6000803e3d6000fd5b6040517fd06ca61f00000000000000000000000000000000000000000000000000000000815260609073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063d06ca61f9061073a90879087908790600401611e89565b60008060006040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606000803373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461135f576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301528916906370a0823190602401602060405180830381865afa1580156112a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c89190611e1a565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152919350908816906370a0823190602401602060405180830381865afa158015611338573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135c9190611e1a565b90505b841561145b576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561144257600080fd5b505af1158015611456573d6000803e3d6000fd5b505050505b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a906114f19033907f0000000000000000000000000000000000000000000000000000000000000000908b90600401612179565b6000604051808303816000875af1158015611510573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261155691908101906121f2565b92508415611654576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561163b57600080fd5b505af115801561164f573d6000803e3d6000fd5b505050505b61166289898985858961166e565b50509695505050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461176f576040517f654a9eda00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528681166024830152858116604483015260648201859052608482018490527f0000000000000000000000000000000000000000000000000000000000000000169063654a9eda9060a401600060405180830381600087803b15801561175257600080fd5b505af1158015611766573d6000803e3d6000fd5b505050506118c9565b801561181f576040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015286811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b15801561180657600080fd5b505af115801561181a573d6000803e3d6000fd5b505050505b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015285811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156118b057600080fd5b505af11580156118c4573d6000803e3d6000fd5b505050505b505050505050565b73ffffffffffffffffffffffffffffffffffffffff811681146118f357600080fd5b50565b60008060008060008060c0878903121561190f57600080fd5b863561191a816118d1565b9550602087013594506040870135935060608701359250608087013561193f816118d1565b8092505060a087013590509295509295509295565b60008060006060848603121561196957600080fd5b505081359360208301359350604090920135919050565b60008083601f84011261199257600080fd5b50813567ffffffffffffffff8111156119aa57600080fd5b6020830191508360208260051b85010111156119c557600080fd5b9250929050565b60008060008060008060a087890312156119e557600080fd5b8635955060208701359450604087013567ffffffffffffffff811115611a0a57600080fd5b611a1689828a01611980565b9095509350506060870135611a2a816118d1565b80925050608087013590509295509295509295565b6020808252825182820181905260009190848201906040850190845b81811015611a7757835183529284019291840191600101611a5b565b50909695505050505050565b600080600060408486031215611a9857600080fd5b83359250602084013567ffffffffffffffff811115611ab657600080fd5b611ac286828701611980565b9497909650939450505050565b80358015158114611adf57600080fd5b919050565b803560ff81168114611adf57600080fd5b60008060008060008060008060008060006101608c8e031215611b1757600080fd5b8b35611b22816118d1565b9a5060208c0135611b32816118d1565b995060408c0135985060608c0135975060808c0135965060a08c0135611b57816118d1565b955060c08c01359450611b6c60e08d01611acf565b9350611b7b6101008d01611ae4565b92506101208c013591506101408c013590509295989b509295989b9093969950565b6000806000806000806000806000806101408b8d031215611bbd57600080fd5b8a35611bc8816118d1565b995060208b0135985060408b0135975060608b0135965060808b0135611bed816118d1565b955060a08b01359450611c0260c08c01611acf565b9350611c1060e08c01611ae4565b92506101008b013591506101208b013590509295989b9194979a5092959850565b600080600080600060808688031215611c4957600080fd5b85359450602086013567ffffffffffffffff811115611c6757600080fd5b611c7388828901611980565b9095509350506040860135611c87816118d1565b949793965091946060013592915050565b600080600080600080600060e0888a031215611cb357600080fd5b8735611cbe816118d1565b96506020880135611cce816118d1565b955060408801359450606088013593506080880135925060a0880135611cf3816118d1565b8092505060c0880135905092959891949750929550565b60008060008060608587031215611d2057600080fd5b84359350602085013567ffffffffffffffff811115611d3e57600080fd5b611d4a87828801611980565b9598909750949560400135949350505050565b6020810160118310611d98577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b600080600080600080600080610100898b031215611dbb57600080fd5b8835611dc6816118d1565b97506020890135611dd6816118d1565b965060408901359550606089013594506080890135935060a0890135925060c0890135611e02816118d1565b8092505060e089013590509295985092959890939650565b600060208284031215611e2c57600080fd5b5051919050565b8183526000602080850194508260005b85811015611e7e578135611e56816118d1565b73ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101611e43565b509495945050505050565b838152604060208201526000611ea3604083018486611e33565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611f2257611f22611eac565b604052919050565b60006020808385031215611f3d57600080fd5b825167ffffffffffffffff80821115611f5557600080fd5b818501915085601f830112611f6957600080fd5b815181811115611f7b57611f7b611eac565b8060051b9150611f8c848301611edb565b8181529183018401918481019088841115611fa657600080fd5b938501935b83851015611fc457845182529385019390850190611fab565b98975050505050505050565b600060208284031215611fe257600080fd5b8151611fed816118d1565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561203557600080fd5b8135611fed816118d1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561208157612081612040565b500390565b86815285602082015260a0604082015260006120a660a083018688611e33565b73ffffffffffffffffffffffffffffffffffffffff9490941660608301525060800152949350505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561210957612109612040565b500290565b600082612144577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b8381101561216457818101518382015260200161214c565b83811115612173576000848401525b50505050565b600073ffffffffffffffffffffffffffffffffffffffff80861683528085166020840152506060604083015282518060608401526121be816080850160208701612149565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01691909101608001949350505050565b60006020828403121561220457600080fd5b815167ffffffffffffffff8082111561221c57600080fd5b818401915084601f83011261223057600080fd5b81518181111561224257612242611eac565b61227360207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611edb565b915080825285602082850101111561228a57600080fd5b61229b816020840160208601612149565b5094935050505056fea2646970667358221220eb17abe05eeba3a20acf423d9c0b916f7c22eba6424cd918d18ad2a760eea1ba64736f6c634300080a0033608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611a018061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c8063715018a61161005b578063715018a6146100f45780638da5cb5b146100fc578063d7aa2e3514610124578063f2fde38b1461015557600080fd5b80631bf64c411461008d57806345330666146100b657806354fd4d50146100cb5780636f33547d146100e1575b600080fd5b6100a061009b366004611436565b610168565b6040516100ad919061158a565b60405180910390f35b6100c96100c43660046115f9565b61027d565b005b6100d3600281565b6040519081526020016100ad565b6100a06100ef366004611436565b61035a565b6100c9610514565b60005460405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100ad565b6100d361013236600461164a565b600160209081526000938452604080852082529284528284209052825290205481565b6100c9610163366004611695565b6105a1565b6101a56040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b6040805160028082526060820183526000926020830190803683370190505090508360400151816000815181106101de576101de6116b9565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050836060015181600181518110610230576102306116b9565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506102758484836106d1565b949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610303576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff93841660009081526001602090815260408083209587168084528683528184209590971683529381528382208390559384528281209481529390925290912055565b6103976040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b60808381015151604080516003808252938101909152909160009190602082016060803683370190505090508460400151816000815181106103db576103db6116b9565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505084606001518160028151811061042d5761042d6116b9565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060005b8281101561050b5785608001518181518110610488576104886116b9565b6020026020010151826001815181106104a3576104a36116b9565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060006104ea8787856106d1565b90506104f98188876000610aa7565b15610502578094505b5060010161046a565b50505092915050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610595576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102fa565b61059f6000610ac3565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610622576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102fa565b73ffffffffffffffffffffffffffffffffffffffff81166106c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102fa565b6106ce81610ac3565b50565b61070e6040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b600061071985610b38565b1561080a5760a08501516040517fd06ca61f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86169163d06ca61f9161077691908790600401611739565b600060405180830381865afa9250505080156107d257506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526107cf9190810190611752565b60015b6107db576108e6565b80600182516107ea9190611812565b815181106107fa576107fa6116b9565b60200260200101519150506108e6565b60a08501516040517f1f00ca7400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff861691631f00ca749161086291908790600401611739565b600060405180830381865afa9250505080156108be57506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108bb9190810190611752565b60015b6108c7576108e6565b806000815181106108da576108da6116b9565b60200260200101519150505b8015610a9f57602082018190526001604083015261090685858584610bd1565b826000018190525060008473ffffffffffffffffffffffffffffffffffffffff1663bd90df706040518163ffffffff1660e01b8152600401602060405180830381865afa15801561095b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097f9190611829565b90506000600185516109919190611812565b905060005b81811015610a9b5773ffffffffffffffffffffffffffffffffffffffff8316600090815260016020526040812087519091908890849081106109da576109da6116b9565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600087836001610a2c9190611846565b81518110610a3c57610a3c6116b9565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205485606001818151610a909190611846565b905250600101610996565b5050505b509392505050565b6000610aba858585866060015186610e3c565b95945050505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008082516002811115610b4e57610b4e61185e565b1480610b6c5750600182516002811115610b6a57610b6a61185e565b145b15610b7957506001919050565b600282516002811115610b8e57610b8e61185e565b1415610b9c57506000919050565b81516040517ffe7995cf0000000000000000000000000000000000000000000000000000000081526102fa919060040161188d565b604080518082019091526000815260606020820152600185516002811115610bfb57610bfb61185e565b1415610cf8576040805180820190915273ffffffffffffffffffffffffffffffffffffffff85168152602081017fbdbeaa3100000000000000000000000000000000000000000000000000000000610c538886610f56565b86610c6042610e10611846565b604051602401610c72939291906118ce565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290529050610275565b600085516002811115610d0d57610d0d61185e565b1415610d93576040805180820190915273ffffffffffffffffffffffffffffffffffffffff8516815260a086015160208201907f38ed17390000000000000000000000000000000000000000000000000000000090610d6c8987610f90565b60208a01518890610d7f42610e10611846565b604051602401610c729594939291906118f7565b600285516002811115610da857610da861185e565b1415610e07576040805180820190915273ffffffffffffffffffffffffffffffffffffffff8516815260a086015160208201907f8803dbee0000000000000000000000000000000000000000000000000000000090610d6c8987610f90565b84516040517ffe7995cf0000000000000000000000000000000000000000000000000000000081526102fa919060040161188d565b60008560400151610e4f57506000610aba565b8360400151610e6057506001610aba565b6000610ebd8688602001516b033b2e3c9fd0803ce8000000868b60600151610e889190611940565b610e92919061197d565b60208901516b033b2e3c9fd0803ce8000000610eae898b611940565b610eb8919061197d565b611077565b9050600086516002811115610ed457610ed461185e565b1480610ef25750600186516002811115610ef057610ef061185e565b145b15610efe579050610aba565b600286516002811115610f1357610f1361185e565b1415610f2157159050610aba565b85516040517ffe7995cf0000000000000000000000000000000000000000000000000000000081526102fa919060040161188d565b60a0820151600090610f7d84610f78856b033b2e3c9fd0803ce8000000611940565b610f90565b610f87919061197d565b90505b92915050565b60008260e0015115610fa457506000610f8a565b600083516002811115610fb957610fb961185e565b1480610fd75750600183516002811115610fd557610fd561185e565b145b1561100a5760c083015161271090610fef9082611812565b610ff99084611940565b611003919061197d565b9050610f8a565b60028351600281111561101f5761101f61185e565b14156110425760c083015161103690612710611846565b610ff961271084611940565b82516040517ffe7995cf0000000000000000000000000000000000000000000000000000000081526102fa919060040161188d565b60006110b76040518060400160405280600c81526020017f414141202d20616d6f756e740000000000000000000000000000000000000000815250611168565b6110c0856111f7565b6110c9846111f7565b6110d2836111f7565b6110db826111f7565b6110ed6110e88587611812565b6111f7565b6110fa6110e88385611812565b61110386610b38565b611124576111118284611846565b61111b8587611846565b10159050610aba565b8385101580156111345750818310155b1561114d576111438284611812565b61111b8587611812565b83851061115b57600161115e565b60005b9695505050505050565b6106ce8160405160240161117c91906119b8565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f41304fac00000000000000000000000000000000000000000000000000000000179052611284565b6106ce8160405160240161120d91815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff5b1bba9000000000000000000000000000000000000000000000000000000001790525b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610100810167ffffffffffffffff811182821017156112f8576112f86112a5565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611345576113456112a5565b604052919050565b80356003811061135c57600080fd5b919050565b73ffffffffffffffffffffffffffffffffffffffff811681146106ce57600080fd5b803561135c81611361565b600067ffffffffffffffff8211156113a8576113a86112a5565b5060051b60200190565b600082601f8301126113c357600080fd5b813560206113d86113d38361138e565b6112fe565b82815260059290921b840181019181810190868411156113f757600080fd5b8286015b8481101561141b57803561140e81611361565b83529183019183016113fb565b509695505050505050565b8035801515811461135c57600080fd5b6000806040838503121561144957600080fd5b823567ffffffffffffffff8082111561146157600080fd5b90840190610100828703121561147657600080fd5b61147e6112d4565b6114878361134d565b815261149560208401611383565b60208201526114a660408401611383565b60408201526114b760608401611383565b60608201526080830135828111156114ce57600080fd5b6114da888286016113b2565b60808301525060a083013560a082015260c083013560c082015261150060e08401611426565b60e0820152935061151691505060208401611383565b90509250929050565b6000815180845260005b8181101561154557602081850181015186830182015201611529565b81811115611557576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208082528251608083830152805173ffffffffffffffffffffffffffffffffffffffff1660a08401520151604060c08301526000906115cd60e084018261151f565b905060208401516040840152604084015115156060840152606084015160808401528091505092915050565b6000806000806080858703121561160f57600080fd5b843561161a81611361565b9350602085013561162a81611361565b9250604085013561163a81611361565b9396929550929360600135925050565b60008060006060848603121561165f57600080fd5b833561166a81611361565b9250602084013561167a81611361565b9150604084013561168a81611361565b809150509250925092565b6000602082840312156116a757600080fd5b81356116b281611361565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081518084526020808501945080840160005b8381101561172e57815173ffffffffffffffffffffffffffffffffffffffff16875295820195908201906001016116fc565b509495945050505050565b82815260406020820152600061027560408301846116e8565b6000602080838503121561176557600080fd5b825167ffffffffffffffff81111561177c57600080fd5b8301601f8101851361178d57600080fd5b805161179b6113d38261138e565b81815260059190911b820183019083810190878311156117ba57600080fd5b928401925b828410156117d8578351825292840192908401906117bf565b979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015611824576118246117e3565b500390565b60006020828403121561183b57600080fd5b81516116b281611361565b60008219821115611859576118596117e3565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60208101600383106118c8577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b8381526060602082015260006118e760608301856116e8565b9050826040830152949350505050565b85815284602082015260a06040820152600061191660a08301866116e8565b73ffffffffffffffffffffffffffffffffffffffff94909416606083015250608001529392505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611978576119786117e3565b500290565b6000826119b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b602081526000610f87602083018461151f56fea2646970667358221220042a62b4d425a2205fa828887bf063a55ef88bc4c19cee1e98235c23b32ccdf764736f6c634300080a003360806040526000805460ff1916600117905534801561001d57600080fd5b50611be18061002d6000396000f3fe6080604052600436106100d25760003560e01c8063ba414fa61161007f578063db3e219811610059578063db3e219814610215578063f28c049814610228578063f7729d431461023b578063fa7626d41461025b57600080fd5b8063ba414fa6146101bd578063c04b8d59146101e2578063cdca1753146101f557600080fd5b8063414bf389116100b0578063414bf3891461014c57806347485d2a1461015f5780635911fb9a1461019d57600080fd5b80632ccbc99b146100d75780632f80bb1d146100f957806330d07f211461012c575b600080fd5b3480156100e357600080fd5b506100f76100f2366004611672565b610275565b005b34801561010557600080fd5b506101196101143660046116f0565b61031f565b6040519081526020015b60405180910390f35b34801561013857600080fd5b506101196101473660046117c3565b610468565b61011961015a366004611842565b610566565b34801561016b57600080fd5b5061011961017a36600461185f565b600160209081526000938452604080852082529284528284209052825290205481565b3480156101a957600080fd5b506100f76101b83660046118a6565b6106b5565b3480156101c957600080fd5b506101d26106c8565b6040519015158152602001610123565b6101196101f03660046118f9565b610826565b34801561020157600080fd5b506101196102103660046116f0565b6109b5565b610119610223366004611842565b610af1565b6101196102363660046118f9565b610c00565b34801561024757600080fd5b506101196102563660046117c3565b610d4e565b34801561026757600080fd5b506000546101d29060ff1681565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160209081526040808320938716835292815282822062ffffff86168352905220819055806102ce6b033b2e3c9fd0803ce80000008061195d565b6102d8919061199a565b73ffffffffffffffffffffffffffffffffffffffff938416600090815260016020908152604080832097909616825295865284812062ffffff909416815292909452502055565b805b600361032f6014600261195d565b61033991906119d5565b83511061046257600080600061034e86610e35565b73ffffffffffffffffffffffffffffffffffffffff8083166000908152600160209081526040808320938716835292815282822062ffffff8516835290522054929550909350915080610402576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f556e697377617056334d6f636b3a2052617465206973206e6f7420736574757060448201526064015b60405180910390fd5b61041462ffffff8316620f42406119ed565b8161042b6b033b2e3c9fd0803ce80000008861195d565b610435919061199a565b61044290620f424061195d565b61044c919061199a565b945061045787610e71565b965050505050610321565b92915050565b73ffffffffffffffffffffffffffffffffffffffff8086166000908152600160209081526040808320938816835292815282822062ffffff8716835290529081205480610511576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f556e697377617056334d6f636b3a2052617465206973206e6f7420736574757060448201526064016103f9565b61052362ffffff8616620f42406119ed565b8161053a6b033b2e3c9fd0803ce80000008761195d565b610544919061199a565b61055190620f424061195d565b61055b919061199a565b979650505050505050565b60006105a46105786020840184611a04565b6105886040850160208601611a04565b6105986060860160408701611a21565b8560a001356000610d4e565b90508160c0013581101561063a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f556e69737761705632526f757465723a20494e53554646494349454e545f4f5560448201527f545055545f414d4f554e5400000000000000000000000000000000000000000060648201526084016103f9565b61066f333060a08501356106516020870187611a04565b73ffffffffffffffffffffffffffffffffffffffff16929190610ea2565b6106b06106826080840160608501611a04565b826106936040860160208701611a04565b73ffffffffffffffffffffffffffffffffffffffff169190610f84565b919050565b6106c38383610bb884610275565b505050565b60008054610100900460ff16156106e85750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106b05760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000008284015282518083038401815260608301909352600092909161078d917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc491608001611a68565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526107c591611ab0565b6000604051808303816000865af19150503d8060008114610802576040519150601f19603f3d011682016040523d82523d6000602084013e610807565b606091505b509150508080602001905181019061081f9190611acc565b9392505050565b600080806108716108378580611aee565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610fda92505050565b90925090506108c16108838580611aee565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505060608601356109b5565b92508360800135831015610957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f556e69737761705632526f757465723a20494e53554646494349454e545f4f5560448201527f545055545f414d4f554e5400000000000000000000000000000000000000000060648201526084016103f9565b61097d73ffffffffffffffffffffffffffffffffffffffff831633306060880135610ea2565b6109ae6109906040860160208701611a04565b73ffffffffffffffffffffffffffffffffffffffff83169085610f84565b5050919050565b805b60036109c56014600261195d565b6109cf91906119d5565b8351106104625760008060006109e486610e35565b73ffffffffffffffffffffffffffffffffffffffff8084166000908152600160209081526040808320938616835292815282822062ffffff8516835290522054929550909350915080610a93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f556e697377617056334d6f636b3a2052617465206973206e6f7420736574757060448201526064016103f9565b620f4240610aa662ffffff8416826119ed565b6b033b2e3c9fd0803ce8000000610abd848961195d565b610ac7919061199a565b610ad1919061195d565b610adb919061199a565b9450610ae687610e71565b9650505050506109b7565b6000610b2f610b036020840184611a04565b610b136040850160208601611a04565b610b236060860160408701611a21565b8560a001356000610468565b90508160c00135811115610bc5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f556e69737761705632526f757465723a20494e53554646494349454e545f4f5560448201527f545055545f414d4f554e5400000000000000000000000000000000000000000060648201526084016103f9565b610bd83330836106516020870187611a04565b6106b0610beb6080840160608501611a04565b60a08401356106936040860160208701611a04565b60008080610c116108378580611aee565b9092509050610c61610c238580611aee565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050606086013561031f565b92508360800135831115610cf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f556e69737761705632526f757465723a20494e53554646494349454e545f4f5560448201527f545055545f414d4f554e5400000000000000000000000000000000000000000060648201526084016103f9565b610d1973ffffffffffffffffffffffffffffffffffffffff8216333086610ea2565b6109ae610d2c6040860160208701611a04565b73ffffffffffffffffffffffffffffffffffffffff8416906060870135610f84565b73ffffffffffffffffffffffffffffffffffffffff8086166000908152600160209081526040808320938816835292815282822062ffffff8716835290529081205480610df7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f556e697377617056334d6f636b3a2052617465206973206e6f7420736574757060448201526064016103f9565b620f4240610e0a62ffffff8716826119ed565b6b033b2e3c9fd0803ce8000000610e21848861195d565b610e2b919061199a565b610551919061195d565b60008080610e43848261101c565b9250610e508460146110ac565b9050610e68610e61600360146119d5565b859061101c565b91509193909250565b6060610462610e82600360146119d5565b610e8e600360146119d5565b8451610e9a91906119ed565b8491906111a0565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052610f7e9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261131a565b50505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526106c39084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401610efc565b600080610fe683610e35565b50909250610ff5905083611426565b1561100a5761100383610e71565b9250915091565b61101383610e35565b50915050915091565b60006110298260146119d5565b83511015611093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f746f416464726573735f6f75744f66426f756e6473000000000000000000000060448201526064016103f9565b5001602001516c01000000000000000000000000900490565b6000816110ba8160036119d5565b1015611122576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f746f55696e7432345f6f766572666c6f7700000000000000000000000000000060448201526064016103f9565b61112d8260036119d5565b83511015611197576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f746f55696e7432345f6f75744f66426f756e647300000000000000000000000060448201526064016103f9565b50016003015190565b6060816111ae81601f6119d5565b1015611216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016103f9565b61122082846119d5565b8451101561128a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e647300000000000000000000000000000060448201526064016103f9565b6060821580156112a95760405191506000825260208201604052611311565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156112e25780518352602092830192016112ca565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b600061137c826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166114609092919063ffffffff16565b8051909150156106c3578080602001905181019061139a9190611acc565b6106c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016103f9565b6000611434600360146119d5565b60146114416003826119d5565b61144b91906119d5565b61145591906119d5565b825110159050919050565b606061146f8484600085611477565b949350505050565b606082471015611509576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016103f9565b843b611571576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016103f9565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161159a9190611ab0565b60006040518083038185875af1925050503d80600081146115d7576040519150601f19603f3d011682016040523d82523d6000602084013e6115dc565b606091505b509150915061055b828286606083156115f657508161081f565b8251156116065782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103f99190611b5a565b73ffffffffffffffffffffffffffffffffffffffff8116811461165c57600080fd5b50565b803562ffffff811681146106b057600080fd5b6000806000806080858703121561168857600080fd5b84356116938161163a565b935060208501356116a38161163a565b92506116b16040860161165f565b9396929550929360600135925050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561170357600080fd5b823567ffffffffffffffff8082111561171b57600080fd5b818501915085601f83011261172f57600080fd5b813581811115611741576117416116c1565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715611787576117876116c1565b816040528281528860208487010111156117a057600080fd5b826020860160208301376000602093820184015298969091013596505050505050565b600080600080600060a086880312156117db57600080fd5b85356117e68161163a565b945060208601356117f68161163a565b93506118046040870161165f565b925060608601359150608086013561181b8161163a565b809150509295509295909350565b6000610100828403121561183c57600080fd5b50919050565b6000610100828403121561185557600080fd5b61081f8383611829565b60008060006060848603121561187457600080fd5b833561187f8161163a565b9250602084013561188f8161163a565b915061189d6040850161165f565b90509250925092565b6000806000606084860312156118bb57600080fd5b83356118c68161163a565b925060208401356118d68161163a565b929592945050506040919091013590565b600060a0828403121561183c57600080fd5b60006020828403121561190b57600080fd5b813567ffffffffffffffff81111561192257600080fd5b61146f848285016118e7565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156119955761199561192e565b500290565b6000826119d0577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600082198211156119e8576119e861192e565b500190565b6000828210156119ff576119ff61192e565b500390565b600060208284031215611a1657600080fd5b813561081f8161163a565b600060208284031215611a3357600080fd5b61081f8261165f565b60005b83811015611a57578181015183820152602001611a3f565b83811115610f7e5750506000910152565b7fffffffff000000000000000000000000000000000000000000000000000000008316815260008251611aa2816004850160208701611a3c565b919091016004019392505050565b60008251611ac2818460208701611a3c565b9190910192915050565b600060208284031215611ade57600080fd5b8151801515811461081f57600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112611b2357600080fd5b83018035915067ffffffffffffffff821115611b3e57600080fd5b602001915036819003821315611b5357600080fd5b9250929050565b6020815260008251806020840152611b79816040850160208701611a3c565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea26469706673582212204cf30f1ca2431e63304f0a45d5cefa0164fe6393b35a339d16bca5512d511dd064736f6c634300080a003360e06040523480156200001157600080fd5b506040516200221a3803806200221a833981016040819052620000349162000121565b81816001600160a01b03821615806200005457506001600160a01b038116155b156200007357604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038216608081905260408051632f7a188160e01b81529051632f7a1881916004808201926020929091908290030181865afa158015620000be573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e4919062000159565b6001600160a01b0390811660a0521660c05250506001600055506200017e565b80516001600160a01b03811681146200011c57600080fd5b919050565b600080604083850312156200013557600080fd5b620001408362000104565b9150620001506020840162000104565b90509250929050565b6000602082840312156200016c57600080fd5b620001778262000104565b9392505050565b60805160a05160c051611ff6620002246000396000818161017a015281816111a8015281816112c701526113a101526000818160d30152818161101301526115330152600081816101c101528181610314015281816105630152818161070501528181610ae001528181610c7801528181610dbe015281816111fe01528181611298015281816113f7015281816115bb0152818161166f01526117190152611ff66000f3fe6080604052600436106100bc5760003560e01c8063c12c21c011610074578063db3e21981161004e578063db3e219814610225578063f28c049814610238578063f4f18d901461024b57600080fd5b8063c12c21c0146101af578063c7fbf4de146101e3578063ce30bbdb1461020357600080fd5b806378aa73a4116100a557806378aa73a414610140578063bd90df7014610168578063c04b8d591461019c57600080fd5b80632f7a1881146100c1578063414bf3891461011f575b600080fd5b3480156100cd57600080fd5b506100f57f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61013261012d36600461182d565b61026b565b604051908152602001610116565b34801561014c57600080fd5b50610155600281565b60405161ffff9091168152602001610116565b34801561017457600080fd5b506100f57f000000000000000000000000000000000000000000000000000000000000000081565b6101326101aa366004611863565b6104bf565b3480156101bb57600080fd5b506100f57f000000000000000000000000000000000000000000000000000000000000000081565b3480156101ef57600080fd5b506101326101fe3660046118a0565b6106bd565b34801561020f57600080fd5b50610218600281565b60405161011691906118b2565b61013261023336600461182d565b610a3c565b610132610246366004611863565b610bd4565b34801561025757600080fd5b506101326102663660046118f3565b610d76565b6000600260005414156102df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610370573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103949190611953565b905060006103a736859003850185611af2565b73ffffffffffffffffffffffffffffffffffffffff83166060820152905061049f826103d66020870187611b0f565b6103e66040880160208901611b0f565b6040517f414bf3890000000000000000000000000000000000000000000000000000000090610419908790602401611b2c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915260016000610ff6565b8060200190518101906104b29190611ba7565b6001600055949350505050565b60006002600054141561052e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016102d6565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156105bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105e39190611953565b905060008061062f6105f58680611bc0565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061146e92505050565b9150915060008561063f90611d27565b73ffffffffffffffffffffffffffffffffffffffff8516602082015260405190915061069b908590859085907fc04b8d590000000000000000000000000000000000000000000000000000000090610419908790602401611e0c565b8060200190518101906106ae9190611ba7565b60016000559695505050505050565b6040517fe958b704000000000000000000000000000000000000000000000000000000008152336004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa15801561074c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107709190611953565b905060006107816020850185611b0f565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015291909116906370a0823190602401602060405180830381865afa1580156107ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108139190611ba7565b90506001811115610a35576040805161010081019091527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90910190600090806108606020880188611b0f565b73ffffffffffffffffffffffffffffffffffffffff16815260200186602001602081019061088e9190611b0f565b73ffffffffffffffffffffffffffffffffffffffff1681526020016108b96060880160408901611e1f565b62ffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff168152602001866060013581526020018381526020016b033b2e3c9fd0803ce800000087608001358561090c9190611e69565b6109169190611ea6565b815260200161092b60c0880160a08901611b0f565b73ffffffffffffffffffffffffffffffffffffffff1690529050610a1e836109566020880188611b0f565b6109666040890160208a01611b0f565b6040517f414bf3890000000000000000000000000000000000000000000000000000000090610999908790602401611b2c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152600180610ff6565b806020019051810190610a319190611ba7565b9350505b5050919050565b600060026000541415610aab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016102d6565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610b3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b609190611953565b90506000610b7336859003850185611af2565b73ffffffffffffffffffffffffffffffffffffffff831660608201528051602082015160405192935061049f92859291907fdb3e21980000000000000000000000000000000000000000000000000000000090610419908790602401611b2c565b600060026000541415610c43576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016102d6565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610cd4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf89190611953565b9050600080610d0a6105f58680611bc0565b91509150600085610d1a90611d27565b73ffffffffffffffffffffffffffffffffffffffff8516602082015260405190915061069b908590849086907ff28c04980000000000000000000000000000000000000000000000000000000090610419908790602401611e0c565b6040517fe958b704000000000000000000000000000000000000000000000000000000008152336004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015610e05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e299190611953565b9050600080610e3b6105f58680611bc0565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301529294509092506000918416906370a0823190602401602060405180830381865afa158015610eb0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed49190611ba7565b90506001811115610fed576040805160a081019091527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091019060009080610f1d8980611bc0565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509082525073ffffffffffffffffffffffffffffffffffffffff8716602080830191909152890135604080830191909152606082018590526080909101906b033b2e3c9fd0803ce800000090610fa8908b013586611e69565b610fb29190611ea6565b8152509050610fd685858563c04b8d5960e01b856040516024016109999190611e0c565b806020019051810190610fe99190611ba7565b9550505b50505050919050565b60606000803373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461115f576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301528916906370a0823190602401602060405180830381865afa1580156110a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c89190611ba7565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152919350908816906370a0823190602401602060405180830381865afa158015611138573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115c9190611ba7565b90505b841561125b576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561124257600080fd5b505af1158015611256573d6000803e3d6000fd5b505050505b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a906112f19033907f0000000000000000000000000000000000000000000000000000000000000000908b90600401611ee1565b6000604051808303816000875af1158015611310573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526113569190810190611f23565b92508415611454576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561143b57600080fd5b505af115801561144f573d6000803e3d6000fd5b505050505b61146289898985858961151b565b50509695505050505050565b600080600361147f60146002611e69565b6114899190611f91565b835110156114c3576040517f8287466d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114ce83600061177e565b91506115146114df60036014611f91565b6114eb60036014611f91565b601486516114f99190611fa9565b6115039190611ea6565b61150d9190611e69565b849061177e565b9050915091565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461161c576040517f654a9eda00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528681166024830152858116604483015260648201859052608482018490527f0000000000000000000000000000000000000000000000000000000000000000169063654a9eda9060a401600060405180830381600087803b1580156115ff57600080fd5b505af1158015611613573d6000803e3d6000fd5b50505050611776565b80156116cc576040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015286811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b1580156116b357600080fd5b505af11580156116c7573d6000803e3d6000fd5b505050505b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015285811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561175d57600080fd5b505af1158015611771573d6000803e3d6000fd5b505050505b505050505050565b600061178b826014611f91565b835110156117f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f746f416464726573735f6f75744f66426f756e6473000000000000000000000060448201526064016102d6565b50818101602001516c0100000000000000000000000090045b92915050565b6000610100828403121561182757600080fd5b50919050565b6000610100828403121561184057600080fd5b61184a8383611814565b9392505050565b600060a0828403121561182757600080fd5b60006020828403121561187557600080fd5b813567ffffffffffffffff81111561188c57600080fd5b61189884828501611851565b949350505050565b600060c0828403121561182757600080fd5b60208101601183106118ed577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561190557600080fd5b813567ffffffffffffffff81111561191c57600080fd5b82016060818503121561184a57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8116811461195057600080fd5b50565b60006020828403121561196557600080fd5b815161184a8161192e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff811182821017156119c2576119c2611970565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611a0f57611a0f611970565b604052919050565b8035611a228161192e565b919050565b803562ffffff81168114611a2257600080fd5b6000610100808385031215611a4e57600080fd5b6040519081019067ffffffffffffffff82118183101715611a7157611a71611970565b8160405280925083359150611a858261192e565b818152611a9460208501611a17565b6020820152611aa560408501611a27565b6040820152611ab660608501611a17565b60608201526080840135608082015260a084013560a082015260c084013560c0820152611ae560e08501611a17565b60e0820152505092915050565b60006101008284031215611b0557600080fd5b61184a8383611a3a565b600060208284031215611b2157600080fd5b813561184a8161192e565b610100810161180e828473ffffffffffffffffffffffffffffffffffffffff80825116835280602083015116602084015262ffffff60408301511660408401528060608301511660608401526080820151608084015260a082015160a084015260c082015160c08401528060e08301511660e0840152505050565b600060208284031215611bb957600080fd5b5051919050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112611bf557600080fd5b83018035915067ffffffffffffffff821115611c1057600080fd5b602001915036819003821315611c2557600080fd5b9250929050565b600067ffffffffffffffff821115611c4657611c46611970565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600060a08284031215611c8457600080fd5b611c8c61199f565b9050813567ffffffffffffffff811115611ca557600080fd5b8201601f81018413611cb657600080fd5b80356020611ccb611cc683611c2c565b6119c8565b8281528682848601011115611cdf57600080fd5b828285018383013760008184018301528452611cfc858201611a17565b8185015250505060408201356040820152606082013560608201526080820135608082015292915050565b600061180e3683611c72565b60005b83811015611d4e578181015183820152602001611d36565b83811115611d5d576000848401525b50505050565b60008151808452611d7b816020860160208601611d33565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6000815160a08452611dc260a0850182611d63565b905073ffffffffffffffffffffffffffffffffffffffff60208401511660208501526040830151604085015260608301516060850152608083015160808501528091505092915050565b60208152600061184a6020830184611dad565b600060208284031215611e3157600080fd5b61184a82611a27565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611ea157611ea1611e3a565b500290565b600082611edc577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600073ffffffffffffffffffffffffffffffffffffffff808616835280851660208401525060606040830152611f1a6060830184611d63565b95945050505050565b600060208284031215611f3557600080fd5b815167ffffffffffffffff811115611f4c57600080fd5b8201601f81018413611f5d57600080fd5b8051611f6b611cc682611c2c565b818152856020838501011115611f8057600080fd5b611f1a826020830160208601611d33565b60008219821115611fa457611fa4611e3a565b500190565b600082821015611fbb57611fbb611e3a565b50039056fea26469706673582212205e5422ac5bcae72b08548a48e40a231ab28c72dbc2d7f2b1b2c453222770f56564736f6c634300080a0033608060405234801561001057600080fd5b5061001a33610081565b73e592427a0aece92de3edee1f18e0157c0586156460005260016020527fbad1c9453febe4a6446e59e386c36af7924acc0d372d29859fea25e7a6eaac1780546001600160a01b03191673b27308f9f90d607463bb33ea1bebb41c27ce5ab61790556100d1565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b612604806100e06000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c80636f33547d11610081578063c67903ea1161005b578063c67903ea14610208578063d7aa2e3514610269578063f2fde38b1461029a57600080fd5b80636f33547d146101cf578063715018a6146101e25780638da5cb5b146101ea57600080fd5b806345330666116100b2578063453306661461017d5780634acc79ed1461019257806354fd4d50146101b957600080fd5b80631b162e56146100d95780631bf64c41146101025780632a10672614610122575b600080fd5b6100ec6100e7366004611e57565b6102ad565b6040516100f99190611f30565b60405180910390f35b61011561011036600461206e565b610427565b6040516100f99190612157565b6101586101303660046121c6565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100f9565b61019061018b3660046121ea565b610805565b005b6101a56101a036600461223b565b6108e2565b60405162ffffff90911681526020016100f9565b6101c1600281565b6040519081526020016100f9565b6101156101dd36600461206e565b61094a565b610190610f2e565b60005473ffffffffffffffffffffffffffffffffffffffff16610158565b610190610216366004612254565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001691909216179055565b6101c161027736600461228d565b600260209081526000938452604080852082529284528284209052825290205481565b6101906102a83660046121c6565b610fbb565b606060006102ba866108e2565b905060006102c7856108e2565b905060008960028111156102dd576102dd6122d8565b14806102fa575060018960028111156102f8576102f86122d8565b145b61038e576040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606086811b821660208401527fffffff000000000000000000000000000000000000000000000000000000000060e885811b821660348601528a831b8416603786015286901b16604b8401528a901b16604e82015260620160405160208183030381529060405261041a565b6040517fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b821660208401527fffffff000000000000000000000000000000000000000000000000000000000060e886811b821660348601528a831b8416603786015285901b16604b84015286901b16604e8201526062016040516020818303038152906040525b9998505050505050505050565b6104646040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b600283516002811115610479576104796122d8565b146104855760006104a7565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b8160200181815250506000600160008473ffffffffffffffffffffffffffffffffffffffff1663bd90df706040518163ffffffff1660e01b8152600401602060405180830381865afa158015610501573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105259190612307565b73ffffffffffffffffffffffffffffffffffffffff9081168252602082019290925260400160009081205490911691505b60038110156107fd5761059c6040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b6105a5866110eb565b156106c6578273ffffffffffffffffffffffffffffffffffffffff1663f7729d43876040015188606001516105d9866108e2565b60a08b01516040517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b16815273ffffffffffffffffffffffffffffffffffffffff948516600482015293909216602484015262ffffff16604483015260648201526000608482015260a4016020604051808303816000875af19250505080156106a2575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261069f91810190612324565b60015b6106ab576107de565b80156106c0576106bd87828886611184565b91505b506107de565b8273ffffffffffffffffffffffffffffffffffffffff166330d07f21876040015188606001516106f5866108e2565b60a08b01516040517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b16815273ffffffffffffffffffffffffffffffffffffffff948516600482015293909216602484015262ffffff16604483015260648201526000608482015260a4016020604051808303816000875af19250505080156107be575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526107bb91810190612324565b60015b6107c7576107de565b80156107dc576107d987828886611184565b91505b505b6107eb81878660006112a9565b156107f4578093505b50600101610556565b505092915050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461088b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff93841660009081526002602090815260408083209587168084528683528184209590971683529381528382208390559384528281209481529390925290912055565b60006003821061091e576040517f50c1fe4a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b811561093c578160011461093457611388610940565b610bb8610940565b6103e85b61ffff1692915050565b6109876040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1663bd90df706040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109fc9190612307565b73ffffffffffffffffffffffffffffffffffffffff908116825260208201929092526040016000908120546080870151519216925085516002811115610a4457610a446122d8565b1480610a625750600185516002811115610a6057610a606122d8565b145b610a8c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610a8f565b60005b602084015260005b81811015610f255760005b6003811015610f1c5760005b6003811015610f13576000610af089600001518a60400151858c608001518881518110610add57610add61233d565b6020026020010151868e606001516102ad565b9050600080610afe8b6110eb565b15610be15760a08b01516040517fcdca175300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a169163cdca175391610b5a91879160040161236c565b6020604051808303816000875af1925050508015610bb3575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610bb091810190612324565b60015b610bbc57610cbb565b8015801590610bce5750896020015181115b15610bdb57809250600191505b50610cbb565b60a08b01516040517f2f80bb1d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a1691632f80bb1d91610c3891879160040161236c565b6020604051808303816000875af1925050508015610c91575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610c8e91810190612324565b60015b610c9a57610cbb565b8015801590610cac5750896020015181105b15610cb957809250600191505b505b8015610f0557600160408a015260208901829052610cdb8b838c866112c7565b896000018190525060008a73ffffffffffffffffffffffffffffffffffffffff1663bd90df706040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d549190612307565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260026020526040812060808f0151805193945090928a908110610d9557610d9561233d565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008d6060015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008e6040015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008e608001518a81518110610eb157610eb161233d565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610efe91906123bd565b60608b0152505b505050806001019050610aae565b50600101610aa2565b50600101610a97565b50505092915050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610faf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610882565b610fb9600061159d565b565b60005473ffffffffffffffffffffffffffffffffffffffff16331461103c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610882565b73ffffffffffffffffffffffffffffffffffffffff81166110df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610882565b6110e88161159d565b50565b60008082516002811115611101576111016122d8565b148061111f575060018251600281111561111d5761111d6122d8565b145b1561112c57506001919050565b600282516002811115611141576111416122d8565b141561114f57506000919050565b81516040517ffe7995cf00000000000000000000000000000000000000000000000000000000815261088291906004016123d5565b6111c16040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b60016040820152602081018490526111db85858585611612565b816000018190525060008373ffffffffffffffffffffffffffffffffffffffff1663bd90df706040518163ffffffff1660e01b8152600401602060405180830381865afa158015611230573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112549190612307565b73ffffffffffffffffffffffffffffffffffffffff90811660009081526002602090815260408083208a82015185168452825280832060609a8b01519094168352929052205495820195909552949350505050565b60006112bc8585858660600151866119a4565b90505b949350505050565b6040805180820190915260008152606060208201526001855160028111156112f1576112f16122d8565b14156113f4576000604051806060016040528084815260200142610e1061131891906123bd565b81526020016113278888611ac7565b815250905060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff16815260200163f4f18d9060e01b8360405160240161136c9190612416565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152905291506112bf9050565b600085516002811115611409576114096122d8565b14156114ae5760006040518060a00160405280848152602001876020015173ffffffffffffffffffffffffffffffffffffffff16815260200142610e1061145091906123bd565b815260a088015160208201526040016114698888611b01565b815250905060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff16815260200163c04b8d5960e01b8360405160240161136c91906124b1565b6002855160028111156114c3576114c36122d8565b14156115685760006040518060a00160405280848152602001876020015173ffffffffffffffffffffffffffffffffffffffff16815260200142610e1061150a91906123bd565b815260a088015160208201526040016115238888611b01565b815250905060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff16815260200163f28c049860e01b8360405160240161136c91906124b1565b84516040517ffe7995cf00000000000000000000000000000000000000000000000000000000815261088291906004016123d5565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60408051808201909152600081526060602082015260018551600281111561163c5761163c6122d8565b141561175e5760006040518060c00160405280876040015173ffffffffffffffffffffffffffffffffffffffff168152602001876060015173ffffffffffffffffffffffffffffffffffffffff168152602001611698856108e2565b62ffffff1681526020016116ae42610e106123bd565b81526020016116bd8888611ac7565b8152600060209182015260408051808201825273ffffffffffffffffffffffffffffffffffffffff8881168252825185518216602482015285850151821660448201529285015162ffffff16606484015260608501516084840152608085015160a484015260a08501511660c4830152929350908201907fc7fbf4de000000000000000000000000000000000000000000000000000000009060e40161136c565b600085516002811115611773576117736122d8565b1415611881576000604051806101000160405280876040015173ffffffffffffffffffffffffffffffffffffffff168152602001876060015173ffffffffffffffffffffffffffffffffffffffff1681526020016117d0856108e2565b62ffffff16815260208881015173ffffffffffffffffffffffffffffffffffffffff169082015260400161180642610e106123bd565b815260a0880151602082015260400161181f8888611b01565b8152602001600073ffffffffffffffffffffffffffffffffffffffff16815250905060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff16815260200163414bf38960e01b8360405160240161136c91906124c4565b600285516002811115611896576118966122d8565b1415611568576000604051806101000160405280876040015173ffffffffffffffffffffffffffffffffffffffff168152602001876060015173ffffffffffffffffffffffffffffffffffffffff1681526020016118f3856108e2565b62ffffff16815260208881015173ffffffffffffffffffffffffffffffffffffffff169082015260400161192942610e106123bd565b815260a088015160208201526040016119428888611b01565b8152602001600073ffffffffffffffffffffffffffffffffffffffff16815250905060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff16815260200163db3e219860e01b8360405160240161136c91906124c4565b600085604001516119b757506000611abe565b83604001516119c857506001611abe565b6000611a258688602001516b033b2e3c9fd0803ce8000000868b606001516119f0919061253f565b6119fa919061257c565b60208901516b033b2e3c9fd0803ce8000000611a16898b61253f565b611a20919061257c565b611be8565b9050600086516002811115611a3c57611a3c6122d8565b1480611a5a5750600186516002811115611a5857611a586122d8565b145b15611a66579050611abe565b600286516002811115611a7b57611a7b6122d8565b1415611a8957159050611abe565b85516040517ffe7995cf00000000000000000000000000000000000000000000000000000000815261088291906004016123d5565b95945050505050565b60a0820151600090611aee84611ae9856b033b2e3c9fd0803ce800000061253f565b611b01565b611af8919061257c565b90505b92915050565b60008260e0015115611b1557506000611afb565b600083516002811115611b2a57611b2a6122d8565b1480611b485750600183516002811115611b4657611b466122d8565b145b15611b7b5760c083015161271090611b6090826125b7565b611b6a908461253f565b611b74919061257c565b9050611afb565b600283516002811115611b9057611b906122d8565b1415611bb35760c0830151611ba7906127106123bd565b611b6a6127108461253f565b82516040517ffe7995cf00000000000000000000000000000000000000000000000000000000815261088291906004016123d5565b6000611c286040518060400160405280600c81526020017f414141202d20616d6f756e740000000000000000000000000000000000000000815250611cd9565b611c3185611d68565b611c3a84611d68565b611c4383611d68565b611c4c82611d68565b611c5e611c5985876125b7565b611d68565b611c6b611c5983856125b7565b611c74866110eb565b611c9557611c8282846123bd565b611c8c85876123bd565b10159050611abe565b838510158015611ca55750818310155b15611cbe57611cb482846125b7565b611c8c85876125b7565b838510611ccc576001611ccf565b60005b9695505050505050565b6110e881604051602401611ced9190611f30565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f41304fac00000000000000000000000000000000000000000000000000000000179052611df5565b6110e881604051602401611d7e91815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff5b1bba9000000000000000000000000000000000000000000000000000000001790525b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b803560038110611e2557600080fd5b919050565b73ffffffffffffffffffffffffffffffffffffffff811681146110e857600080fd5b8035611e2581611e2a565b60008060008060008060c08789031215611e7057600080fd5b611e7987611e16565b95506020870135611e8981611e2a565b9450604087013593506060870135611ea081611e2a565b92506080870135915060a0870135611eb781611e2a565b809150509295509295509295565b6000815180845260005b81811015611eeb57602081850181015186830182015201611ecf565b81811115611efd576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611af86020830184611ec5565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610100810167ffffffffffffffff81118282101715611f9657611f96611f43565b60405290565b600082601f830112611fad57600080fd5b8135602067ffffffffffffffff80831115611fca57611fca611f43565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f8301168101818110848211171561200d5761200d611f43565b60405293845285810183019383810192508785111561202b57600080fd5b83870191505b8482101561205357813561204481611e2a565b83529183019190830190612031565b979650505050505050565b80358015158114611e2557600080fd5b6000806040838503121561208157600080fd5b823567ffffffffffffffff8082111561209957600080fd5b9084019061010082870312156120ae57600080fd5b6120b6611f72565b6120bf83611e16565b81526120cd60208401611e4c565b60208201526120de60408401611e4c565b60408201526120ef60608401611e4c565b606082015260808301358281111561210657600080fd5b61211288828601611f9c565b60808301525060a083013560a082015260c083013560c082015261213860e0840161205e565b60e0820152935061214e91505060208401611e4c565b90509250929050565b60208082528251608083830152805173ffffffffffffffffffffffffffffffffffffffff1660a08401520151604060c083015260009061219a60e0840182611ec5565b905060208401516040840152604084015115156060840152606084015160808401528091505092915050565b6000602082840312156121d857600080fd5b81356121e381611e2a565b9392505050565b6000806000806080858703121561220057600080fd5b843561220b81611e2a565b9350602085013561221b81611e2a565b9250604085013561222b81611e2a565b9396929550929360600135925050565b60006020828403121561224d57600080fd5b5035919050565b6000806040838503121561226757600080fd5b823561227281611e2a565b9150602083013561228281611e2a565b809150509250929050565b6000806000606084860312156122a257600080fd5b83356122ad81611e2a565b925060208401356122bd81611e2a565b915060408401356122cd81611e2a565b809150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60006020828403121561231957600080fd5b81516121e381611e2a565b60006020828403121561233657600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60408152600061237f6040830185611ec5565b90508260208301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156123d0576123d061238e565b500190565b6020810160038310612410577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6020815260008251606060208401526124326080840182611ec5565b905060208401516040840152604084015160608401528091505092915050565b6000815160a0845261246760a0850182611ec5565b905073ffffffffffffffffffffffffffffffffffffffff60208401511660208501526040830151604085015260608301516060850152608083015160808501528091505092915050565b602081526000611af86020830184612452565b6101008101611afb828473ffffffffffffffffffffffffffffffffffffffff80825116835280602083015116602084015262ffffff60408301511660408401528060608301511660608401526080820151608084015260a082015160a084015260c082015160c08401528060e08301511660e0840152505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156125775761257761238e565b500290565b6000826125b2577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000828210156125c9576125c961238e565b50039056fea2646970667358221220f48bf290d42d727585d0174d5aecb1c111d9a28593d6c27486ce6672041893ce64736f6c634300080a003360806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d00011790553480156200003a57600080fd5b506040805161018081019091526000908060c081018060018152604080518082018252600381526244414960e81b6020828101919091528301526012908201526305f5e100606082015260800160018152602001600081525081526020016040518060c001604052806002600a811115620000b957620000b962000b78565b815260408051808201825260048152635553444360e01b6020828101919091528301526006908201526305f5e100606082015260800160018152602001600081525081526020016040518060c001604052806003600a81111562000121576200012162000b78565b815260408051808201825260048152630ae8aa8960e31b602082810191909152830152601290820152644a817c8000606082015260800160028152602001600081525081526020016040518060c001604052806004600a8111156200018a576200018a62000b78565b815260408051808201825260048152634c494e4b60e01b6020828101919091528301526012908201526359682f00606082015260800160018152602001600081525081526020016040518060c001604052806005600a811115620001f257620001f262000b78565b815260408051808201825260048152631554d11560e21b602082810191909152830152601290820152633b023380606082015260800160018152602001600081525081526020016040518060c001604052806006600a8111156200025a576200025a62000b78565b815260408051808201825260058152640e6e88aa8960db1b602082810191909152830152601290820152644cd588640060608201526080016003815260200160009052905260408051610140810190915290915060009080608081018060078152602001604051806040016040528060048152602001636344414960e01b8152508152602001601260ff1681526020016305f5e100815260200160048081111562000309576200030962000b78565b8152602001600181525081526020016040518060c001604052806008600a81111562000339576200033962000b78565b81526040805180820182526005815264635553444360d81b6020828101919091528301526006908201526305f5e100606082015260800160048152602001600281525081526020016040518060c001604052806009600a811115620003a257620003a262000b78565b8152604080518082018252600581526418d554d11560da1b602082810191909152830152601290820152633b023380606082015260800160048152602001600581525081526020016040518060c00160405280600a808111156200040a576200040a62000b78565b81526040805180820182526005815264634c494e4b60d81b6020828101919091528301526012908201526359682f00606082015260800160048152602001600490529052905060005b600681101562000496576200048183826006811062000476576200047662000b8e565b6020020151620004db565b806200048d8162000ba4565b91505062000453565b5060005b6004811015620004d257620004bd82826004811062000476576200047662000b8e565b80620004c98162000ba4565b9150506200049a565b50505062000d14565b6000600282608001516004811115620004f857620004f862000b78565b14156200054e576040516200050d9062000a8c565b604051809103906000f0801580156200052a573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b03831617905590506200071e565b60038260800151600481111562000569576200056962000b78565b1415620005a4576040516200057e9062000a9a565b604051809103906000f0801580156200059b573d6000803e3d6000fd5b5090506200071e565b600182608001516004811115620005bf57620005bf62000b78565b1415620005f157816020015182602001518360400151604051620005e39062000aa8565b6200057e9392919062000c1e565b6004826080015160048111156200060c576200060c62000b78565b1415620006be576000600260008460a00151600a81111562000632576200063262000b78565b600a81111562000646576200064662000b78565b815260200190815260200160002060009054906101000a90046001600160a01b0316905082602001518360200151846040015183604051620006889062000ab6565b62000697949392919062000c5b565b604051809103906000f080158015620006b4573d6000803e3d6000fd5b509150506200071e565b60405162461bcd60e51b815260206004820152602b60248201527f74657374546f6b656e53756974653a204372656174696e6720756e6b6e6f776e60448201526a20746f6b656e207479706560a81b606482015260840160405180910390fd5b60005460208301516040516318caf8e360e31b8152620100009092046001600160a01b03169163c657c718916200075b9185919060040162000ca9565b600060405180830381600087803b1580156200077657600080fd5b505af11580156200078b573d6000803e3d6000fd5b50505050600082606001516008604051620007a69062000ac4565b91825260ff166020820152604001604051809103906000f080158015620007d1573d6000803e3d6000fd5b50905081600260008560000151600a811115620007f257620007f262000b78565b600a81111562000806576200080662000b78565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055508260600151600560008560000151600a8111156200085a576200085a62000b78565b600a8111156200086e576200086e62000b78565b8152602080820192909252604090810160009081209390935585516001600160a01b03861684526008909252909120805460ff1916600183600a811115620008ba57620008ba62000b78565b02179055508260800151600360008560000151600a811115620008e157620008e162000b78565b600a811115620008f557620008f562000b78565b81526020810191909152604001600020805460ff1916600183600481111562000922576200092262000b78565b0217905550604080518082019091526001600160a01b0380841682528281166020808401918252600780546001810182556000918252945160029095027fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688810180549686166001600160a01b031997881617905592517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c689909301805493909416929094169190911790915584015184519091600491600a811115620009eb57620009eb62000b78565b600a811115620009ff57620009ff62000b78565b8152602001908152602001600020908051906020019062000a2292919062000ad2565b5080600660008560000151600a81111562000a415762000a4162000b78565b600a81111562000a555762000a5562000b78565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550505050565b610ab1806200285183390190565b611224806200330283390190565b611758806200452683390190565b6117098062005c7e83390190565b6106ca806200738783390190565b82805462000ae09062000cd7565b90600052602060002090601f01602090048101928262000b04576000855562000b4f565b82601f1062000b1f57805160ff191683800117855562000b4f565b8280016001018555821562000b4f579182015b8281111562000b4f57825182559160200191906001019062000b32565b5062000b5d92915062000b61565b5090565b5b8082111562000b5d576000815560010162000b62565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600060001982141562000bc757634e487b7160e01b600052601160045260246000fd5b5060010190565b6000815180845260005b8181101562000bf65760208185018101518683018201520162000bd8565b8181111562000c09576000602083870101525b50601f01601f19169290920160200192915050565b60608152600062000c33606083018662000bce565b828103602084015262000c47818662000bce565b91505060ff83166040830152949350505050565b60808152600062000c70608083018762000bce565b828103602084015262000c84818762000bce565b60ff95909516604084015250506001600160a01b039190911660609091015292915050565b6001600160a01b038316815260406020820181905260009062000ccf9083018462000bce565b949350505050565b600181811c9082168062000cec57607f821691505b6020821081141562000d0e57634e487b7160e01b600052602260045260246000fd5b50919050565b611b2d8062000d246000396000f3fe6080604052600436106101635760003560e01c80638eb86e8b116100c0578063c6c3bbe611610074578063d051a62211610059578063d051a62214610490578063eebab8ef146104b0578063fa7626d4146104d057600080fd5b8063c6c3bbe614610433578063c74912d21461045357600080fd5b80639b140a85116100a55780639b140a85146103e6578063b36ba20814610406578063ba414fa61461040e57600080fd5b80638eb86e8b1461038357806398cdaadf146103a357600080fd5b80636a72bde71161011757806388327863116100fc578063883278631461030857806388f776a2146103365780638a3177a31461035657600080fd5b80636a72bde7146102c45780636ca42ae3146102e657600080fd5b8063440864fa11610148578063440864fa146102025780634b57b0be1461022f57806367b426451461028157600080fd5b806304bc3b1c1461016f57806310c7f0b9146101b557600080fd5b3661016a57005b600080fd5b34801561017b57600080fd5b5061019f61018a3660046116f6565b60086020526000908152604090205460ff1681565b6040516101ac9190611742565b60405180910390f35b3480156101c157600080fd5b506101d56101d036600461175c565b6104ea565b6040805173ffffffffffffffffffffffffffffffffffffffff9384168152929091166020830152016101ac565b34801561020e57600080fd5b5061022261021d366004611784565b610530565b6040516101ac91906117cb565b34801561023b57600080fd5b5060015461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101ac565b34801561028d57600080fd5b5061025c61029c366004611784565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156102d057600080fd5b506102e46102df36600461181c565b6105ca565b005b3480156102f257600080fd5b506102fb610730565b6040516101ac919061186b565b34801561031457600080fd5b506103286103233660046118d4565b6107b5565b6040519081526020016101ac565b34801561034257600080fd5b506102e461035136600461190b565b610888565b34801561036257600080fd5b50610328610371366004611784565b60056020526000908152604090205481565b34801561038f57600080fd5b506102e461039e366004611954565b6108b9565b3480156103af57600080fd5b5061025c6103be366004611784565b60066020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156103f257600080fd5b506102e4610401366004611993565b610a73565b6102e4610b22565b34801561041a57600080fd5b50610423610ba0565b60405190151581526020016101ac565b34801561043f57600080fd5b506102e461044e3660046119b3565b610d00565b34801561045f57600080fd5b5061048361046e366004611784565b60036020526000908152604090205460ff1681565b6040516101ac91906119d3565b34801561049c57600080fd5b506103286104ab36600461190b565b610daf565b3480156104bc57600080fd5b506102e46104cb366004611954565b610e8b565b3480156104dc57600080fd5b506000546104239060ff1681565b600781815481106104fa57600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff91821692501682565b60046020526000908152604090208054610549906119e7565b80601f0160208091040260200160405190810160405280929190818152602001828054610575906119e7565b80156105c25780601f10610597576101008083540402835291602001916105c2565b820191906000526020600020905b8154815290600101906020018083116105a557829003601f168201915b505050505081565b6000546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152620100009092049091169063ca669fa790602401600060405180830381600087803b15801561063e57600080fd5b505af1158015610652573d6000803e3d6000fd5b505050506002600085600a81111561066c5761066c611713565b600a81111561067d5761067d611713565b8152602081019190915260409081016000205490517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490529091169063095ea7b3906044016020604051808303816000875af1158015610705573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107299190611a3b565b5050505050565b60606007805480602002602001604051908101604052809291908181526020016000905b828210156107ac5760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff908116835260019182015416828401529083529092019101610754565b50505050905090565b60006002600084600a8111156107cd576107cd611713565b600a8111156107de576107de611713565b8152602081019190915260409081016000205490517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152909116906370a0823190602401602060405180830381865afa15801561085d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108819190611a5d565b9392505050565b6108b48383837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6105ca565b505050565b60016003600085600a8111156108d1576108d1611713565b600a8111156108e2576108e2611713565b815260208101919091526040016000205460ff16600481111561090757610907611713565b14610999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f74657374546f6b656e53756974653a20547279696e6720746f206275726e206160448201527f206e6f6e2d6e6f726d616c20746f6b656e00000000000000000000000000000060648201526084015b60405180910390fd5b6002600084600a8111156109af576109af611713565b600a8111156109c0576109c0611713565b8152602081019190915260409081016000205490517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526024820184905290911690639dc29fac906044015b6020604051808303816000875af1158015610a49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6d9190611a3b565b50505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604081205460ff169081600a811115610aaf57610aaf611713565b1415610b17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f20746f6b656e2077697468207375636820616464726573730000000000006044820152606401610990565b610a6d818484610888565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015610b8c57600080fd5b505af1158015610729573d6000803e3d6000fd5b60008054610100900460ff1615610bc05750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610cfb5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610c65917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc491608001611a76565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052610c9d91611abe565b6000604051808303816000865af19150503d8060008114610cda576040519150601f19603f3d011682016040523d82523d6000602084013e610cdf565b606091505b5091505080806020019051810190610cf79190611a3b565b9150505b919050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604081205460ff169081600a811115610d3c57610d3c611713565b1415610da4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f20746f6b656e2077697468207375636820616464726573730000000000006044820152606401610990565b610a6d818484610e8b565b60006002600085600a811115610dc757610dc7611713565b600a811115610dd857610dd8611713565b8152602081019190915260409081016000205490517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301529091169063dd62ed3e90604401602060405180830381865afa158015610e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e839190611a5d565b949350505050565b60026003600085600a811115610ea357610ea3611713565b600a811115610eb457610eb4611713565b815260208101919091526040016000205460ff166004811115610ed957610ed9611713565b1415610ff6576000546040517fc88a5e6d000000000000000000000000000000000000000000000000000000008152306004820152602481018390526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c88a5e6d90604401600060405180830381600087803b158015610f5657600080fd5b505af1158015610f6a573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015610fd857600080fd5b505af1158015610fec573d6000803e3d6000fd5b505050505061163c565b600380600085600a81111561100d5761100d611713565b600a81111561101e5761101e611713565b815260208101919091526040016000205460ff16600481111561104357611043611713565b14156111aa576000546040517fc88a5e6d000000000000000000000000000000000000000000000000000000008152306004820152602481018390526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c88a5e6d90604401600060405180830381600087803b1580156110c057600080fd5b505af11580156110d4573d6000803e3d6000fd5b505050506002600084600a8111156110ee576110ee611713565b600a8111156110ff576110ff611713565b8152602081019190915260409081016000205490517fa1903eab00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a1903eab90839060240160206040518083038185885af115801561117f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906111a49190611a5d565b5061163c565b60046003600085600a8111156111c2576111c2611713565b600a8111156111d3576111d3611713565b815260208101919091526040016000205460ff1660048111156111f8576111f8611713565b141561148f5760006002600085600a81111561121657611216611713565b600a81111561122757611227611713565b815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c49190611ada565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600860205260409020549091506112fb9060ff163084610e8b565b8073ffffffffffffffffffffffffffffffffffffffff1663095ea7b36002600087600a81111561132d5761132d611713565b600a81111561133e5761133e611713565b81526020810191909152604090810160002054905160e083901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602481018590526044016020604051808303816000875af11580156113c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e69190611a3b565b506002600085600a8111156113fd576113fd611713565b600a81111561140e5761140e611713565b8152602081019190915260409081016000205490517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810184905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f1990604401600060405180830381600087803b158015610fd857600080fd5b60016003600085600a8111156114a7576114a7611713565b600a8111156114b8576114b8611713565b815260208101919091526040016000205460ff1660048111156114dd576114dd611713565b14156115b4576002600084600a8111156114f9576114f9611713565b600a81111561150a5761150a611713565b8152602081019190915260409081016000205490517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f19906044016020604051808303816000875af1158015611590573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a49190611a3b565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f74657374546f6b656e53756974653a20547279696e6720746f207472616e736660448201527f657220756e6b6e6f776e20746f6b656e000000000000000000000000000000006064820152608401610990565b6002600084600a81111561165257611652611713565b600a81111561166357611663611713565b8152602081019190915260409081016000205490517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490529091169063a9059cbb90604401610a2a565b73ffffffffffffffffffffffffffffffffffffffff811681146116f357600080fd5b50565b60006020828403121561170857600080fd5b8135610881816116d1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60208101600b831061175657611756611713565b91905290565b60006020828403121561176e57600080fd5b5035919050565b8035600b8110610cfb57600080fd5b60006020828403121561179657600080fd5b61088182611775565b60005b838110156117ba5781810151838201526020016117a2565b83811115610a6d5750506000910152565b60208152600082518060208401526117ea81604085016020870161179f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000806080858703121561183257600080fd5b61183b85611775565b9350602085013561184b816116d1565b9250604085013561185b816116d1565b9396929550929360600135925050565b602080825282518282018190526000919060409081850190868401855b828110156118c7578151805173ffffffffffffffffffffffffffffffffffffffff90811686529087015116868501529284019290850190600101611888565b5091979650505050505050565b600080604083850312156118e757600080fd5b6118f083611775565b91506020830135611900816116d1565b809150509250929050565b60008060006060848603121561192057600080fd5b61192984611775565b92506020840135611939816116d1565b91506040840135611949816116d1565b809150509250925092565b60008060006060848603121561196957600080fd5b61197284611775565b92506020840135611982816116d1565b929592945050506040919091013590565b6000806000606084860312156119a857600080fd5b8335611929816116d1565b6000806000606084860312156119c857600080fd5b8335611972816116d1565b602081016005831061175657611756611713565b600181811c908216806119fb57607f821691505b60208210811415611a35577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600060208284031215611a4d57600080fd5b8151801515811461088157600080fd5b600060208284031215611a6f57600080fd5b5051919050565b7fffffffff000000000000000000000000000000000000000000000000000000008316815260008251611ab081600485016020870161179f565b919091016004019392505050565b60008251611ad081846020870161179f565b9190910192915050565b600060208284031215611aec57600080fd5b8151610881816116d156fea264697066735822122010fe735ed069aca27931edce4ba2ff14ec7886bf21b0eea685a884f9200fb49e64736f6c634300080a003360c0604052600d60808190526c2bb930b83832b21022ba3432b960991b60a090815261002e916000919061007a565b50604080518082019091526004808252630ae8aa8960e31b602090920191825261005a9160019161007a565b506002805460ff1916601217905534801561007457600080fd5b5061014e565b82805461008690610113565b90600052602060002090601f0160209004810192826100a857600085556100ee565b82601f106100c157805160ff19168380011785556100ee565b828001600101855582156100ee579182015b828111156100ee5782518255916020019190600101906100d3565b506100fa9291506100fe565b5090565b5b808211156100fa57600081556001016100ff565b600181811c9082168061012757607f821691505b6020821081141561014857634e487b7160e01b600052602260045260246000fd5b50919050565b6109548061015d6000396000f3fe6080604052600436106100cb5760003560e01c806340c10f1911610074578063a9059cbb1161004e578063a9059cbb14610225578063d0e30db014610245578063dd62ed3e1461024d57600080fd5b806340c10f19146101c357806370a08231146101e357806395d89b411461021057600080fd5b806323b872dd116100a557806323b872dd146101575780632e1a7d4d14610177578063313ce5671461019757600080fd5b806306fdde03146100df578063095ea7b31461010a57806318160ddd1461013a57600080fd5b366100da576100d8610285565b005b600080fd5b3480156100eb57600080fd5b506100f46102e0565b6040516101019190610703565b60405180910390f35b34801561011657600080fd5b5061012a61012536600461079f565b61036e565b6040519015158152602001610101565b34801561014657600080fd5b50475b604051908152602001610101565b34801561016357600080fd5b5061012a6101723660046107c9565b6103e7565b34801561018357600080fd5b506100d8610192366004610805565b6105fe565b3480156101a357600080fd5b506002546101b19060ff1681565b60405160ff9091168152602001610101565b3480156101cf57600080fd5b506100d86101de36600461079f565b6106a4565b3480156101ef57600080fd5b506101496101fe36600461081e565b60036020526000908152604090205481565b34801561021c57600080fd5b506100f46106e2565b34801561023157600080fd5b5061012a61024036600461079f565b6106ef565b6100d8610285565b34801561025957600080fd5b50610149610268366004610839565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102a490849061089b565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102ed906108b3565b80601f0160208091040260200160405190810160405280929190818152602001828054610319906108b3565b80156103665780601f1061033b57610100808354040283529160200191610366565b820191906000526020600020905b81548152906001019060200180831161034957829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103d69086815260200190565b60405180910390a350600192915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561041957600080fd5b73ffffffffffffffffffffffffffffffffffffffff8416331480159061048f575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105175773ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020548211156104d157600080fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915281208054849290610511908490610907565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061054c908490610907565b909155505073ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260408120805484929061058690849061089b565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516105ec91815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561061a57600080fd5b3360009081526003602052604081208054839290610639908490610907565b9091555050604051339082156108fc029083906000818181858888f1935050505015801561066b573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260036020526040812080548392906106d990849061089b565b90915550505050565b600180546102ed906108b3565b60006106fc3384846103e7565b9392505050565b600060208083528351808285015260005b8181101561073057858101830151858201604001528201610714565b81811115610742576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461079a57600080fd5b919050565b600080604083850312156107b257600080fd5b6107bb83610776565b946020939093013593505050565b6000806000606084860312156107de57600080fd5b6107e784610776565b92506107f560208501610776565b9150604084013590509250925092565b60006020828403121561081757600080fd5b5035919050565b60006020828403121561083057600080fd5b6106fc82610776565b6000806040838503121561084c57600080fd5b61085583610776565b915061086360208401610776565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156108ae576108ae61086c565b500190565b600181811c908216806108c757607f821691505b60208210811415610901577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000828210156109195761091961086c565b50039056fea26469706673582212206ec943fa4e3b70d8fca6c25b6aa26fa18e8f8952ce3bc4d5afcb443bf3097c0564736f6c634300080a003360806040526000600255600060035534801561001a57600080fd5b506111fa8061002a6000396000f3fe60806040526004361061016e5760003560e01c80637a28fb88116100cb578063bdd17e1c1161007f578063dd62ed3e11610059578063dd62ed3e146103ee578063ee7a7c0414610441578063f5eb42dc1461046157600080fd5b8063bdd17e1c146103ad578063cdb9a21c146103c3578063d5002f2e146103d957600080fd5b8063a1903eab116100b0578063a1903eab1461035a578063a457c2d71461036d578063a9059cbb1461038d57600080fd5b80637a28fb88146102f457806395d89b411461031457600080fd5b806323b872dd1161012257806337cfdaca1161010757806337cfdaca1461020d57806339509351146102b457806370a08231146102d457600080fd5b806323b872dd14610278578063313ce5671461029857600080fd5b806318160ddd1161015357806318160ddd1461020d578063192084511461023057806322301f6e1461025057600080fd5b806306fdde0314610185578063095ea7b3146101dd57600080fd5b366101805761017d6000610481565b50005b600080fd5b34801561019157600080fd5b5060408051808201909152601781527f4c6971756964207374616b656420457468657220322e3000000000000000000060208201525b6040516101d49190610f63565b60405180910390f35b3480156101e957600080fd5b506101fd6101f8366004610fff565b610545565b60405190151581526020016101d4565b34801561021957600080fd5b5061022261055b565b6040519081526020016101d4565b34801561023c57600080fd5b5061022261024b366004611029565b61056b565b34801561025c57600080fd5b5061027661026b366004611042565b600391909155600255565b005b34801561028457600080fd5b506101fd610293366004611064565b6105ab565b3480156102a457600080fd5b50604051601281526020016101d4565b3480156102c057600080fd5b506101fd6102cf366004610fff565b610696565b3480156102e057600080fd5b506102226102ef3660046110a0565b6106d9565b34801561030057600080fd5b5061022261030f366004611029565b61070e565b34801561032057600080fd5b5060408051808201909152600581527f737445544800000000000000000000000000000000000000000000000000000060208201526101c7565b6102226103683660046110a0565b61073a565b34801561037957600080fd5b506101fd610388366004610fff565b610745565b34801561039957600080fd5b506101fd6103a8366004610fff565b6107f9565b3480156103b957600080fd5b5061022260035481565b3480156103cf57600080fd5b5061022260025481565b3480156103e557600080fd5b50610222610806565b3480156103fa57600080fd5b506102226104093660046110bb565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b34801561044d57600080fd5b5061027661045c366004610fff565b610811565b34801561046d57600080fd5b5061022261047c3660046110a0565b61081f565b60003334806104f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f5a45524f5f4445504f534954000000000000000000000000000000000000000060448201526064015b60405180910390fd5b60006104fc8261056b565b9050806105065750805b8160036000828254610518919061111d565b909155506105289050838261084a565b61053383838761093b565b61053d8382610992565b949350505050565b60006105523384846109ea565b50600192915050565b600061056660035490565b905090565b60008061057760035490565b9050806105875750600092915050565b6105a48161059e61059760025490565b8690610b52565b90610b5e565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001602090815260408083203384529091528120548281101561066c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f5452414e534645525f414d4f554e545f455843454544535f414c4c4f57414e4360448201527f450000000000000000000000000000000000000000000000000000000000000060648201526084016104e8565b610677858585610b6a565b61068b85336106868487610bef565b6109ea565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916105529185906106869086610bfb565b73ffffffffffffffffffffffffffffffffffffffff81166000908152602081905260408120546107089061070e565b92915050565b60008061071a60025490565b90508061072a5750600092915050565b6105a48161059e61059760035490565b600061070882610481565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156107e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4445435245415345445f414c4c4f57414e43455f42454c4f575f5a45524f000060448201526064016104e8565b6107ef33856106868487610bef565b5060019392505050565b6000610552338484610b6a565b600061056660025490565b61081b8282610c07565b5050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040812054610708565b73ffffffffffffffffffffffffffffffffffffffff82166108c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4d494e545f544f5f5448455f5a45524f5f41444452455353000000000000000060448201526064016104e8565b80600260008282546108d9919061111d565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205461090e9082610bfb565b73ffffffffffffffffffffffffffffffffffffffff90921660009081526020819052604090209190915550565b6040805183815273ffffffffffffffffffffffffffffffffffffffff83811660208301528516917fed8dd430b1e4bba98e943dc5b157cf7b54d9e12916d6c474ff5733a95001d03b910160405180910390a2505050565b73ffffffffffffffffffffffffffffffffffffffff821660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6109d58461070e565b60405190815260200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff8316610a67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f415050524f56455f46524f4d5f5a45524f5f414444524553530000000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff8216610ae4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f415050524f56455f544f5f5a45524f5f4144445245535300000000000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006105a48284611135565b60006105a48284611172565b6000610b758261056b565b9050610b82848483610d64565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610be191815260200190565b60405180910390a350505050565b60006105a482846111ad565b60006105a4828461111d565b73ffffffffffffffffffffffffffffffffffffffff8216610c84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4255524e5f46524f4d5f5448455f5a45524f5f4144445245535300000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205480821115610d14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4255524e5f414d4f554e545f455843454544535f42414c414e4345000000000060448201526064016104e8565b8160026000828254610d2691906111ad565b90915550610d3690508183610bef565b73ffffffffffffffffffffffffffffffffffffffff9093166000908152602081905260409020929092555050565b73ffffffffffffffffffffffffffffffffffffffff8316610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f5452414e534645525f46524f4d5f5448455f5a45524f5f41444452455353000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff8216610e5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f5452414e534645525f544f5f5448455f5a45524f5f414444524553530000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205480821115610eee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5452414e534645525f414d4f554e545f455843454544535f42414c414e43450060448201526064016104e8565b610ef88183610bef565b73ffffffffffffffffffffffffffffffffffffffff8086166000908152602081905260408082209390935590851681522054610f349083610bfb565b73ffffffffffffffffffffffffffffffffffffffff909316600090815260208190526040902092909255505050565b600060208083528351808285015260005b81811015610f9057858101830151858201604001528201610f74565b81811115610fa2576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ffa57600080fd5b919050565b6000806040838503121561101257600080fd5b61101b83610fd6565b946020939093013593505050565b60006020828403121561103b57600080fd5b5035919050565b6000806040838503121561105557600080fd5b50508035926020909101359150565b60008060006060848603121561107957600080fd5b61108284610fd6565b925061109060208501610fd6565b9150604084013590509250925092565b6000602082840312156110b257600080fd5b6105a482610fd6565b600080604083850312156110ce57600080fd5b6110d783610fd6565b91506110e560208401610fd6565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611130576111306110ee565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561116d5761116d6110ee565b500290565b6000826111a8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000828210156111bf576111bf6110ee565b50039056fea2646970667358221220a5b4f31162ba2b8b3424cef84b31ef91d05a825243602b5fdf758ffb49b8246364736f6c634300080a003360a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a003360c06040523480156200001157600080fd5b506040516200170938038062001709833981016040819052620000349162000266565b8351849084906200004d906003906020850190620000f3565b50805162000063906004906020840190620000f3565b505050620000806200007a6200009d60201b60201c565b620000a1565b60ff9091166080526001600160a01b031660a05250620003479050565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b82805462000101906200030a565b90600052602060002090601f01602090048101928262000125576000855562000170565b82601f106200014057805160ff191683800117855562000170565b8280016001018555821562000170579182015b828111156200017057825182559160200191906001019062000153565b506200017e92915062000182565b5090565b5b808211156200017e576000815560010162000183565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c157600080fd5b81516001600160401b0380821115620001de57620001de62000199565b604051601f8301601f19908116603f0116810190828211818310171562000209576200020962000199565b816040528381526020925086838588010111156200022657600080fd5b600091505b838210156200024a57858201830151818301840152908201906200022b565b838211156200025c5760008385830101525b9695505050505050565b600080600080608085870312156200027d57600080fd5b84516001600160401b03808211156200029557600080fd5b620002a388838901620001af565b95506020870151915080821115620002ba57600080fd5b50620002c987828801620001af565b935050604085015160ff81168114620002e157600080fd5b60608601519092506001600160a01b0381168114620002ff57600080fd5b939692955090935050565b600181811c908216806200031f57607f821691505b602082108114156200034157634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05161138e6200037b600039600081816101f70152818161041f0152610600015260006101a2015261138e6000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80636f307dc3116100b257806395d89b4111610081578063a9059cbb11610066578063a9059cbb146102b5578063dd62ed3e146102c8578063f2fde38b1461030e57600080fd5b806395d89b411461029a578063a457c2d7146102a257600080fd5b80636f307dc3146101f257806370a082311461023e578063715018a6146102745780638da5cb5b1461027c57600080fd5b806323b872dd116100ee57806323b872dd14610188578063313ce5671461019b57806339509351146101cc57806340c10f19146101df57600080fd5b806306fdde0314610120578063095ea7b31461013e57806318160ddd146101615780631e9a695014610173575b600080fd5b610128610321565b604051610135919061112d565b60405180910390f35b61015161014c3660046111c9565b6103b3565b6040519015158152602001610135565b6002545b604051908152602001610135565b6101866101813660046111c9565b6103c9565b005b6101516101963660046111f3565b610491565b60405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610135565b6101516101da3660046111c9565b61057c565b6101866101ed3660046111c9565b6105c5565b6102197f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b61016561024c36600461122f565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610186610691565b60055473ffffffffffffffffffffffffffffffffffffffff16610219565b61012861071e565b6101516102b03660046111c9565b61072d565b6101516102c33660046111c9565b610805565b6101656102d6366004611251565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b61018661031c36600461122f565b610812565b60606003805461033090611284565b80601f016020809104026020016040519081016040528092919081815260200182805461035c90611284565b80156103a95780601f1061037e576101008083540402835291602001916103a9565b820191906000526020600020905b81548152906001019060200180831161038c57829003601f168201915b5050505050905090565b60006103c0338484610942565b50600192915050565b6103d33382610af5565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015610468573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048c91906112d8565b505050565b600061049e848484610ce2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6105718533858403610942565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916103c09185906105c0908690611329565b610942565b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906323b872dd906064016020604051808303816000875af115801561065e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068291906112d8565b5061068d8282610f96565b5050565b60055473ffffffffffffffffffffffffffffffffffffffff163314610712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161055b565b61071c60006110b6565b565b60606004805461033090611284565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156107ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161055b565b6107fb3385858403610942565b5060019392505050565b60006103c0338484610ce2565b60055473ffffffffffffffffffffffffffffffffffffffff163314610893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161055b565b73ffffffffffffffffffffffffffffffffffffffff8116610936576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161055b565b61093f816110b6565b50565b73ffffffffffffffffffffffffffffffffffffffff83166109e4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff8216610a87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8216610b98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015610c4e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290610c8a908490611341565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff8216610e28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610ede576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610f22908490611329565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f8891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161055b565b80600260008282546110259190611329565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152602081905260408120805483929061105f908490611329565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208083528351808285015260005b8181101561115a5785810183015185820160400152820161113e565b8181111561116c576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146111c457600080fd5b919050565b600080604083850312156111dc57600080fd5b6111e5836111a0565b946020939093013593505050565b60008060006060848603121561120857600080fd5b611211846111a0565b925061121f602085016111a0565b9150604084013590509250925092565b60006020828403121561124157600080fd5b61124a826111a0565b9392505050565b6000806040838503121561126457600080fd5b61126d836111a0565b915061127b602084016111a0565b90509250929050565b600181811c9082168061129857607f821691505b602082108114156112d2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156112ea57600080fd5b8151801515811461124a57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561133c5761133c6112fa565b500190565b600082821015611353576113536112fa565b50039056fea26469706673582212203a6db30cd3c097921df4156794aa7973eb848711deeb2cffd7c54a9df1fdb0a564736f6c634300080a003360a060405234801561001057600080fd5b506040516106ca3803806106ca83398101604081905261002f9161006c565b60009190915560ff166080526001805460506001600160501b031991821681179092556004805490911690911790554260028190556003556100a2565b6000806040838503121561007f57600080fd5b82519150602083015160ff8116811461009757600080fd5b809150509250929050565b60805161060e6100bc600039600060d3015261060e6000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80639a6fc8f511610081578063d62ada111161005b578063d62ada11146102dc578063f7a30806146102f4578063feaf968c1461030757600080fd5b80639a6fc8f5146101cd578063bd18ad531461023a578063cd653afc1461024d57600080fd5b806354fd4d50116100b257806354fd4d501461012d57806367e8d83d1461013c5780637284e4161461018e57600080fd5b8063313ce567146100ce5780633fd0875f1461010c575b600080fd5b6100f57f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020015b60405180910390f35b6004546a0100000000000000000000900460ff166040516101039190610441565b60405160018152602001610103565b61018c61014a366004610482565b600480549115156c01000000000000000000000000027fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff909216919091179055565b005b604080518082018252600c81527f7072696365206f7261636c6500000000000000000000000000000000000000006020820152905161010391906104ab565b6102036101db36600461053d565b60015460005460025460035460045469ffffffffffffffffffff948516941691939590929450565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610103565b61018c610248366004610558565b61030f565b61018c61025b366004610579565b6001805469ffffffffffffffffffff9586167fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090911617905560029290925560035560048054919092167fffffffffffffffffffffffffffffffffffffffff00ff00000000000000000000909116176b020000000000000000000000179055565b6102e461035f565b6040519015158152602001610103565b61018c6103023660046105bf565b600055565b610203610385565b600480548291907fffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff166b01000000000000000000000083600281111561035757610357610412565b021790555050565b600454600090610380906b010000000000000000000000900460ff166103d6565b905090565b60008060008060006004600c9054906101000a900460ff16156103a757600080fd5b505060015460005460025460035460045469ffffffffffffffffffff9485169893975091955093509190911690565b600060028260028111156103ec576103ec610412565b14156103f757600080fd5b600182600281111561040b5761040b610412565b1492915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016006831061047c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561049457600080fd5b813580151581146104a457600080fd5b9392505050565b600060208083528351808285015260005b818110156104d8578581018301518582016040015282016104bc565b818111156104ea576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803569ffffffffffffffffffff8116811461053857600080fd5b919050565b60006020828403121561054f57600080fd5b6104a48261051e565b60006020828403121561056a57600080fd5b8135600381106104a457600080fd5b6000806000806080858703121561058f57600080fd5b6105988561051e565b935060208501359250604085013591506105b46060860161051e565b905092959194509250565b6000602082840312156105d157600080fd5b503591905056fea264697066735822122014874f7a973b86501c4c1a8be32490fe902c8f088ee234d25f9b2497e19f9e5264736f6c634300080a0033496e636f72726563742061646472657373206f6620556e695632207061746866696e646572496e636f72726563742061646472657373206f66204375727665207061746866696e646572496e636f72726563742061646472657373206f6620556e695633207061746866696e646572a2646970667358221220d1f25b066781f72116ea79763a3952aa8c964744c38479031d287abd83e8ca4564736f6c634300080a0033"; - -type SwapPathFinderTestConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: SwapPathFinderTestConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class SwapPathFinderTest__factory extends ContractFactory { - constructor(...args: SwapPathFinderTestConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): SwapPathFinderTest { - return super.attach(address) as SwapPathFinderTest; - } - override connect(signer: Signer): SwapPathFinderTest__factory { - return super.connect(signer) as SwapPathFinderTest__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): SwapPathFinderTestInterface { - return new utils.Interface(_abi) as SwapPathFinderTestInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): SwapPathFinderTest { - return new Contract(address, _abi, signerOrProvider) as SwapPathFinderTest; - } -} diff --git a/src/types/factories/contracts/test/pathfinder/SwapPathFinder.t.sol/index.ts b/src/types/factories/contracts/test/pathfinder/SwapPathFinder.t.sol/index.ts deleted file mode 100644 index e31c442c..00000000 --- a/src/types/factories/contracts/test/pathfinder/SwapPathFinder.t.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { SwapPathFinderTest__factory } from "./SwapPathFinderTest__factory"; diff --git a/src/types/factories/contracts/test/pathfinder/UniswapV2PathFinder.t.sol/UniswapV2PathFinderTest__factory.ts b/src/types/factories/contracts/test/pathfinder/UniswapV2PathFinder.t.sol/UniswapV2PathFinderTest__factory.ts deleted file mode 100644 index 6f46b021..00000000 --- a/src/types/factories/contracts/test/pathfinder/UniswapV2PathFinder.t.sol/UniswapV2PathFinderTest__factory.ts +++ /dev/null @@ -1,806 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - UniswapV2PathFinderTest, - UniswapV2PathFinderTestInterface, -} from "../../../../../contracts/test/pathfinder/UniswapV2PathFinder.t.sol/UniswapV2PathFinderTest"; - -const _abi = [ - { - inputs: [ - { - internalType: "enum SwapOperation", - name: "", - type: "uint8", - }, - ], - name: "UnsupportedSwapOperation", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "", - type: "address", - }, - ], - name: "log_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "log_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - name: "log_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "int256", - name: "", - type: "int256", - }, - ], - name: "log_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "address", - name: "val", - type: "address", - }, - ], - name: "log_named_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes", - name: "val", - type: "bytes", - }, - ], - name: "log_named_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes32", - name: "val", - type: "bytes32", - }, - ], - name: "log_named_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - ], - name: "log_named_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "string", - name: "val", - type: "string", - }, - ], - name: "log_named_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - ], - name: "log_named_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "log_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "logs", - type: "event", - }, - { - inputs: [], - name: "IS_TEST", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bool", - name: "withUnderlyings", - type: "bool", - }, - ], - name: "_setUpCurve", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "cft", - outputs: [ - { - internalType: "contract CreditFacadeTestSuite", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditConfigurator", - outputs: [ - { - internalType: "contract CreditConfigurator", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditFacade", - outputs: [ - { - internalType: "contract CreditFacade", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditManager", - outputs: [ - { - internalType: "contract ICreditManagerV2", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "curveAdapter", - outputs: [ - { - internalType: "contract ICurveV1Adapter", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "curveLPPathFinder", - outputs: [ - { - internalType: "contract CurveLPPathFinder", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "curveMetaAdapter", - outputs: [ - { - internalType: "contract ICurveV1Adapter", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "curvePathFinder", - outputs: [ - { - internalType: "contract CurvePathFinder", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "curveV1MetaMock", - outputs: [ - { - internalType: "contract CurveV1MetapoolMock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "curveV1Mock", - outputs: [ - { - internalType: "contract CurveV1Mock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "failed", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "setUp", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_PUV2_01_setGasUsage_correctly_sets_values", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_PUV2_02_getBestDirectPairSwap_returns_correct_swapQuote_ZERO", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountIn", - type: "uint256", - }, - { - internalType: "uint16", - name: "daiWethRate", - type: "uint16", - }, - { - internalType: "uint16", - name: "slippage", - type: "uint16", - }, - { - internalType: "bool", - name: "isAll", - type: "bool", - }, - { - internalType: "bool", - name: "externalSlippage", - type: "bool", - }, - ], - name: "test_PUV2_03_getBestDirectPairSwap_returns_correct_swapQuote_INPUT", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountOut", - type: "uint256", - }, - { - internalType: "uint16", - name: "daiWethRate", - type: "uint16", - }, - { - internalType: "uint16", - name: "slippage", - type: "uint16", - }, - { - internalType: "bool", - name: "externalSlippage", - type: "bool", - }, - ], - name: "test_PUV2_04_getBestDirectPairSwap_returns_correct_swapQuote_OUTPUT", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountIn", - type: "uint256", - }, - { - internalType: "uint8", - name: "bestConnector", - type: "uint8", - }, - { - internalType: "uint16", - name: "slippage", - type: "uint16", - }, - { - internalType: "bool", - name: "isAll", - type: "bool", - }, - { - internalType: "bool", - name: "externalSlippage", - type: "bool", - }, - ], - name: "test_PUV2_05_getBestConnectorSwap_returns_correct_swapQuote_INPUT", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountOut", - type: "uint256", - }, - { - internalType: "uint8", - name: "bestConnector", - type: "uint8", - }, - { - internalType: "uint16", - name: "slippage", - type: "uint16", - }, - { - internalType: "bool", - name: "externalSlippage", - type: "bool", - }, - ], - name: "test_PUV2_06_getBestConnectorSwap_returns_correct_swapQuote_INPUT", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "tokenMasksMap", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "underlying", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "uniV2adapter", - outputs: [ - { - internalType: "contract IUniswapV2Adapter", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "uniV2mock", - outputs: [ - { - internalType: "contract UniswapV2Mock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "uniV2pathFinder", - outputs: [ - { - internalType: "contract UniswapV2PathFinder", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "uniV3adapter", - outputs: [ - { - internalType: "contract IUniswapV3Adapter", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "uniV3mock", - outputs: [ - { - internalType: "contract UniswapV3Mock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "uniV3pathFinder", - outputs: [ - { - internalType: "contract UniswapV3PathFinder", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "yearnAdapter", - outputs: [ - { - internalType: "contract YearnV2Adapter", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "yearnMock", - outputs: [ - { - internalType: "contract YearnV2Mock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "yearnPathFinder", - outputs: [ - { - internalType: "contract YearnPathFinder", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x60806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d000117905534801561003957600080fd5b50620201f6806200004b6000396000f3fe60806040523480156200001157600080fd5b50600436106200020d5760003560e01c806384d70ad01162000125578063d8d7ca3c11620000af578063f67c5bd0116200007a578063f67c5bd0146200053c578063f9aa028a1462000562578063fa7626d41462000583578063fca2cea5146200059157600080fd5b8063d8d7ca3c14620004b8578063df51443314620004d9578063eeef8dd014620004fa578063f310c6da146200051b57600080fd5b8063c12c21c011620000f0578063c12c21c0146200044b578063c3eac4f1146200046c578063cac283c81462000476578063ceab1386146200049757600080fd5b806384d70ad014620003d75780639b6a80a714620003ee5780639f8ad9ec146200040f578063ba414fa6146200043057600080fd5b80632b9d0d2811620001a75780635ebb236111620001725780635ebb236114620003745780636f307dc3146200039557806370d0f4d514620003b65780637f2b8ed114620003cd57600080fd5b80632b9d0d2814620002fa5780632f7a188114620003115780634b7b24a514620003325780635a521cf8146200035357600080fd5b80631c9a755f11620001e85780631c9a755f146200028057806321868df514620002a1578063287b94d714620002b857806329d351d814620002d957600080fd5b80630a9254e414620002125780631082097a146200021e5780631497761e1462000235575b600080fd5b6200021c620005b2565b005b6200021c6200022f36600462005713565b620005be565b600754620002569073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b601254620002569073ffffffffffffffffffffffffffffffffffffffff1681565b6200021c620002b236600462005780565b620009aa565b600b54620002569073ffffffffffffffffffffffffffffffffffffffff1681565b600854620002569073ffffffffffffffffffffffffffffffffffffffff1681565b6200021c6200030b366004620057d6565b62000d6a565b600254620002569073ffffffffffffffffffffffffffffffffffffffff1681565b600a54620002569073ffffffffffffffffffffffffffffffffffffffff1681565b600e54620002569073ffffffffffffffffffffffffffffffffffffffff1681565b600c54620002569073ffffffffffffffffffffffffffffffffffffffff1681565b600554620002569073ffffffffffffffffffffffffffffffffffffffff1681565b6200021c620003c7366004620057f6565b62001f39565b6200021c62002579565b6200021c620003e836600462005821565b6200287f565b601354620002569073ffffffffffffffffffffffffffffffffffffffff1681565b600d54620002569073ffffffffffffffffffffffffffffffffffffffff1681565b6200043a62002ed6565b604051901515815260200162000277565b600154620002569073ffffffffffffffffffffffffffffffffffffffff1681565b6200021c62003040565b601454620002569073ffffffffffffffffffffffffffffffffffffffff1681565b601154620002569073ffffffffffffffffffffffffffffffffffffffff1681565b600954620002569073ffffffffffffffffffffffffffffffffffffffff1681565b600454620002569073ffffffffffffffffffffffffffffffffffffffff1681565b600f54620002569073ffffffffffffffffffffffffffffffffffffffff1681565b601554620002569073ffffffffffffffffffffffffffffffffffffffff1681565b620005536200054d3660046200586d565b50600190565b60405190815260200162000277565b600354620002569073ffffffffffffffffffffffffffffffffffffffff1681565b6000546200043a9060ff1681565b601054620002569073ffffffffffffffffffffffffffffffffffffffff1681565b620005bc62003651565b565b6000546040517f4c63e56200000000000000000000000000000000000000000000000000000000815261271061ffff86161060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff1690634c63e56290602401600060405180830381600087803b1580156200063757600080fd5b505af11580156200064c573d6000803e3d6000fd5b50506000546040517f4c63e562000000000000000000000000000000000000000000000000000000008152600360ff89161060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169250634c63e5629150602401600060405180830381600087803b158015620006c757600080fd5b505af1158015620006dc573d6000803e3d6000fd5b505060005462010000900473ffffffffffffffffffffffffffffffffffffffff169150634c63e5629050600b871180156200072f57506200072c6b033b2e3c9fd0803ce80000006103e8620058bc565b87105b6040518263ffffffff1660e01b815260040162000750911515815260200190565b600060405180830381600087803b1580156200076b57600080fd5b505af115801562000780573d6000803e3d6000fd5b505050506000806000620007948762003a0e565b925092509250600060405180610100016040528087620007b6576000620007b9565b60015b6002811115620007cd57620007cd620058fc565b815273c4375b7de8af5a38a93548eb8453a498222c4ff2602082015273ffffffffffffffffffffffffffffffffffffffff86811660408084019190915286821660608401526080830186905260a083018d905261ffff8b1660c084015288151560e090930192909252600f54600d5492517f6f33547d00000000000000000000000000000000000000000000000000000000815293945060009390821692636f33547d92620008859287929091169060040162005995565b600060405180830381865afa158015620008a3573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620008eb919081019062005b81565b905060006103e86103e58181620009048f6002620058bc565b620009109190620058bc565b6200091c919062005cdc565b62000929906002620058bc565b620009359190620058bc565b62000941919062005cdc565b905060006200097187868d60ff168151811062000962576200096262005d18565b60200260200101518862004573565b90506200099c836200099686858562000990620f242c61300c62005d47565b6200468f565b62004705565b505050505050505050505050565b6000546040517f4c63e56200000000000000000000000000000000000000000000000000000000815261271061ffff85161060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff1690634c63e56290602401600060405180830381600087803b15801562000a2357600080fd5b505af115801562000a38573d6000803e3d6000fd5b50506000546040517f4c63e562000000000000000000000000000000000000000000000000000000008152600360ff88161060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169250634c63e5629150602401600060405180830381600087803b15801562000ab357600080fd5b505af115801562000ac8573d6000803e3d6000fd5b505060005462010000900473ffffffffffffffffffffffffffffffffffffffff169150634c63e5629050600b8611801562000b1b575062000b186b033b2e3c9fd0803ce80000006103e8620058bc565b86105b6040518263ffffffff1660e01b815260040162000b3c911515815260200190565b600060405180830381600087803b15801562000b5757600080fd5b505af115801562000b6c573d6000803e3d6000fd5b50505050600080600062000b808662003a0e565b925092509250600060405180610100016040528060028081111562000ba95762000ba9620058fc565b815273c4375b7de8af5a38a93548eb8453a498222c4ff2602082015273ffffffffffffffffffffffffffffffffffffffff86811660408084019190915286821660608401526080830186905260a083018c905261ffff8a1660c084015288151560e090930192909252600f54600d5492517f6f33547d00000000000000000000000000000000000000000000000000000000815293945060009390821692636f33547d9262000c619287929091169060040162005995565b600060405180830381865afa15801562000c7f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262000cc7919081019062005b81565b905060006103e560028162000cdd828e62005cdc565b62000ceb906103e8620058bc565b62000cf7919062005cdc565b62000d03919062005cdc565b62000d11906103e8620058bc565b62000d1d919062005cdc565b9050600062000d3e87868c60ff168151811062000962576200096262005d18565b905062000d5d836200099686858562000990620f242c61300c62005d47565b5050505050505050505050565b62000d7462004725565b60085473ffffffffffffffffffffffffffffffffffffffff1662001f36576006546040517f67b4264500000000000000000000000000000000000000000000000000000000815260009162000f779173ffffffffffffffffffffffffffffffffffffffff909116906367b426459062000df39060079060040162005d62565b602060405180830381865afa15801562000e11573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e37919062005d7f565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906367b426459062000e909060089060040162005d62565b602060405180830381865afa15801562000eae573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ed4919062005d7f565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906367b426459062000f2d9060099060040162005d62565b602060405180830381865afa15801562000f4b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000f71919062005d7f565b62004573565b6006546040517f67b42645000000000000000000000000000000000000000000000000000000008152919250600091620011139173ffffffffffffffffffffffffffffffffffffffff16906367b426459062000fd99060019060040162005d62565b602060405180830381865afa15801562000ff7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200101d919062005d7f565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906367b4264590620010769060029060040162005d62565b602060405180830381865afa15801562001094573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010ba919062005d7f565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906367b426459062000f2d9060059060040162005d62565b60035490915073ffffffffffffffffffffffffffffffffffffffff161515806200113b575082155b156200114657905060605b818160405162001156906200566f565b6200116392919062005d9f565b604051809103906000f08015801562001180573d6000803e3d6000fd5b50600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169182179055604080517ffc0c546a00000000000000000000000000000000000000000000000000000000815290516000929163fc0c546a9160048083019260209291908290030181865afa1580156200121d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001243919062005d7f565b6000546040517fc657c71800000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff62010000909104169063c657c71890620012f390849060040173ffffffffffffffffffffffffffffffffffffffff9190911681526040602082018190526004908201527f3343525600000000000000000000000000000000000000000000000000000000606082015260800190565b600060405180830381600087803b1580156200130e57600080fd5b505af115801562001323573d6000803e3d6000fd5b505060035473ffffffffffffffffffffffffffffffffffffffff1615915062001b379050576000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620013b8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013de919062005d7f565b60085460048054604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9485169490921692632630c12f9282820192602092908290030181865afa15801562001453573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001479919062005d7f565b73ffffffffffffffffffffffffffffffffffffffff16639dcb511a87600081518110620014aa57620014aa62005d18565b60200260200101516040518263ffffffff1660e01b8152600401620014eb919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa15801562001509573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200152f919062005d7f565b60048054604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff90921692632630c12f9282820192602092908290030181865afa1580156200159d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620015c3919062005d7f565b73ffffffffffffffffffffffffffffffffffffffff16639dcb511a88600181518110620015f457620015f462005d18565b60200260200101516040518263ffffffff1660e01b815260040162001635919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa15801562001653573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001679919062005d7f565b60048054604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff90921692632630c12f9282820192602092908290030181865afa158015620016e7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200170d919062005d7f565b73ffffffffffffffffffffffffffffffffffffffff16639dcb511a896002815181106200173e576200173e62005d18565b60200260200101516040518263ffffffff1660e01b81526004016200177f919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa1580156200179d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017c3919062005d7f565b604051620017d1906200567d565b73ffffffffffffffffffffffffffffffffffffffff95861681529385166020850152918416604084015283166060830152909116608082015260c060a082018190526011908201527f43757276654c503350726963654665656400000000000000000000000000000060e082015261010001604051809103906000f08015801562001860573d6000803e3d6000fd5b506000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291925062010000900473ffffffffffffffffffffffffffffffffffffffff16906306447d5690602401600060405180830381600087803b158015620018e857600080fd5b505af1158015620018fd573d6000803e3d6000fd5b505060048054604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9092169450632630c12f935080830192602092918290030181865afa1580156200196f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001995919062005d7f565b6040517fe8a97a3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301528381166024830152919091169063e8a97a3e90604401600060405180830381600087803b15801562001a0957600080fd5b505af115801562001a1e573d6000803e3d6000fd5b50506003546040517f3e7c88d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152611e7860248301529091169250633e7c88d69150604401600060405180830381600087803b15801562001a9857600080fd5b505af115801562001aad573d6000803e3d6000fd5b50505050600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562001b1c57600080fd5b505af115801562001b31573d6000803e3d6000fd5b50505050505b60015460085460405173ffffffffffffffffffffffffffffffffffffffff9283169290911690839060009062001b6d906200568b565b73ffffffffffffffffffffffffffffffffffffffff9485168152928416602084015290831660408301529091166060820152608001604051809103906000f08015801562001bbf573d6000803e3d6000fd5b50600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905560405162001c139062005699565b604051809103906000f08015801562001c30573d6000803e3d6000fd5b50600b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283169081179091556008546040517fd914cd4b000000000000000000000000000000000000000000000000000000008152921660048301529063d914cd4b90602401600060405180830381600087803b15801562001cca57600080fd5b505af115801562001cdf573d6000803e3d6000fd5b5050600054600754604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152600d60448201527f43555256455f414441505445520000000000000000000000000000000000000060648201526201000090920416925063c657c7189150608401600060405180830381600087803b15801562001d8f57600080fd5b505af115801562001da4573d6000803e3d6000fd5b5050600054600854604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152600a60448201527f43555256455f4d4f434b0000000000000000000000000000000000000000000060648201526201000090920416925063c657c7189150608401600060405180830381600087803b15801562001e5457600080fd5b505af115801562001e69573d6000803e3d6000fd5b5050600054600b54604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152601060448201527f43555256455f5041544846494e4445520000000000000000000000000000000060648201526201000090920416925063c657c7189150608401600060405180830381600087803b15801562001f1957600080fd5b505af115801562001f2e573d6000803e3d6000fd5b505050505050505b50565b6000546040517f4c63e56200000000000000000000000000000000000000000000000000000000815261271061ffff86161060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff1690634c63e56290602401600060405180830381600087803b15801562001fb257600080fd5b505af115801562001fc7573d6000803e3d6000fd5b505060005462010000900473ffffffffffffffffffffffffffffffffffffffff169150634c63e562905061ffff8616158015906200200a57506103e88661ffff16105b6040518263ffffffff1660e01b81526004016200202b911515815260200190565b600060405180830381600087803b1580156200204657600080fd5b505af11580156200205b573d6000803e3d6000fd5b505060005462010000900473ffffffffffffffffffffffffffffffffffffffff169150634c63e5629050600a87118015620020ae5750620020ab6b033b2e3c9fd0803ce80000006103e8620058bc565b87105b6040518263ffffffff1660e01b8152600401620020cf911515815260200190565b600060405180830381600087803b158015620020ea57600080fd5b505af1158015620020ff573d6000803e3d6000fd5b50506006546040517f67b426450000000000000000000000000000000000000000000000000000000081526000935073ffffffffffffffffffffffffffffffffffffffff90911691506367b42645906200215f9060019060040162005d62565b602060405180830381865afa1580156200217d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620021a3919062005d7f565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815291925060009173ffffffffffffffffffffffffffffffffffffffff909116906367b4264590620022029060039060040162005d62565b602060405180830381865afa15801562002220573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002246919062005d7f565b600e5490915073ffffffffffffffffffffffffffffffffffffffff16635911fb9a83836200228561ffff8b166b033b2e3c9fd0803ce8000000620058bc565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b158015620022fa57600080fd5b505af11580156200230f573d6000803e3d6000fd5b5050600f54600e546040517f4533066600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201528682166024820152858216604482015261300c60648201529116925063453306669150608401600060405180830381600087803b1580156200239b57600080fd5b505af1158015620023b0573d6000803e3d6000fd5b50505050600060405180610100016040528086620023d0576000620023d3565b60015b6002811115620023e757620023e7620058fc565b815273c4375b7de8af5a38a93548eb8453a498222c4ff2602082015273ffffffffffffffffffffffffffffffffffffffff85811660408301528416606082015260800162002433606090565b8152602081018a905261ffff8816604080830191909152861515606090920191909152600f54600d5491517f1bf64c4100000000000000000000000000000000000000000000000000000000815292935060009273ffffffffffffffffffffffffffffffffffffffff91821692631bf64c4192620024ba9287929091169060040162005995565b600060405180830381865afa158015620024d8573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262002520919081019062005b81565b905060006103e86103e56200253a61ffff8c168d620058bc565b620025469190620058bc565b62002552919062005cdc565b905060006200256286866200484f565b905062000d5d836200099686858561300c6200468f565b60005b60038160ff16101562001f36576000604051806101000160405280620025a28462004917565b6002811115620025b657620025b6620058fc565b815273c4375b7de8af5a38a93548eb8453a498222c4ff26020820152600654604080517f67b4264500000000000000000000000000000000000000000000000000000000815292019173ffffffffffffffffffffffffffffffffffffffff909116906367b42645906200262f9060019060040162005d62565b602060405180830381865afa1580156200264d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002673919062005d7f565b73ffffffffffffffffffffffffffffffffffffffff90811682526006546040517f67b426450000000000000000000000000000000000000000000000000000000081526020909301929116906367b4264590620026d69060029060040162005d62565b602060405180830381865afa158015620026f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200271a919062005d7f565b73ffffffffffffffffffffffffffffffffffffffff16815260200160608152614e206020820152606460408083019190915260006060909201829052600f54600d5491517f1bf64c41000000000000000000000000000000000000000000000000000000008152939450919273ffffffffffffffffffffffffffffffffffffffff92831692631bf64c4192620027b99287929091169060040162005995565b600060405180830381865afa158015620027d7573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200281f919081019062005b81565b6040808201518151808301909252601d82527f466f756e642071756f746520666f7220756e6b6e6f776e20746f6b656e000000602083015291925062002867911590620049aa565b50508080620028769062005dd1565b9150506200257c565b6000546040517f4c63e56200000000000000000000000000000000000000000000000000000000815261271061ffff85161060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff1690634c63e56290602401600060405180830381600087803b158015620028f857600080fd5b505af11580156200290d573d6000803e3d6000fd5b505060005462010000900473ffffffffffffffffffffffffffffffffffffffff169150634c63e562905061ffff8516158015906200295057506103e88561ffff16105b6040518263ffffffff1660e01b815260040162002971911515815260200190565b600060405180830381600087803b1580156200298c57600080fd5b505af1158015620029a1573d6000803e3d6000fd5b505060005462010000900473ffffffffffffffffffffffffffffffffffffffff169150634c63e5629050600a86118015620029f45750620029f16b033b2e3c9fd0803ce80000006103e8620058bc565b86105b6040518263ffffffff1660e01b815260040162002a15911515815260200190565b600060405180830381600087803b15801562002a3057600080fd5b505af115801562002a45573d6000803e3d6000fd5b50506006546040517f67b426450000000000000000000000000000000000000000000000000000000081526000935073ffffffffffffffffffffffffffffffffffffffff90911691506367b426459062002aa59060019060040162005d62565b602060405180830381865afa15801562002ac3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002ae9919062005d7f565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815291925060009173ffffffffffffffffffffffffffffffffffffffff909116906367b426459062002b489060039060040162005d62565b602060405180830381865afa15801562002b66573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002b8c919062005d7f565b600e5490915073ffffffffffffffffffffffffffffffffffffffff16635911fb9a8383606462002bcd61ffff8b166b033b2e3c9fd0803ce8000000620058bc565b62002bd9919062005cdc565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b15801562002c4e57600080fd5b505af115801562002c63573d6000803e3d6000fd5b5050600f54600e546040517f4533066600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201528682166024820152858216604482015261300c60648201529116925063453306669150608401600060405180830381600087803b15801562002cef57600080fd5b505af115801562002d04573d6000803e3d6000fd5b50505050600060405180610100016040528060028081111562002d2b5762002d2b620058fc565b815273c4375b7de8af5a38a93548eb8453a498222c4ff2602082015273ffffffffffffffffffffffffffffffffffffffff85811660408301528416606082015260800162002d77606090565b81526020810189905261ffff8716604080830191909152861515606090920191909152600f54600d5491517f1bf64c4100000000000000000000000000000000000000000000000000000000815292935060009273ffffffffffffffffffffffffffffffffffffffff91821692631bf64c419262002dfe9287929091169060040162005995565b600060405180830381865afa15801562002e1c573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262002e64919081019062005b81565b905060006103e561ffff891662002e7d8b6064620058bc565b62002e89919062005cdc565b62002e97906103e8620058bc565b62002ea3919062005cdc565b9050600062002eb386866200484f565b905062002eca836200099686858561300c6200468f565b50505050505050505050565b60008054610100900460ff161562002ef75750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200303b5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000008284015282518083038401815260608301909352600092909162002f9f917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc49160800162005df4565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905262002fd99162005e3e565b6000604051808303816000865af19150503d806000811462003018576040519150601f19603f3d011682016040523d82523d6000602084013e6200301d565b606091505b509150508080602001905181019062003037919062005e5c565b9150505b919050565b600f54600e546006546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9384169363453306669381169216906367b4264590620030aa9060019060040162005d62565b602060405180830381865afa158015620030c8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620030ee919062005d7f565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906367b4264590620031479060039060040162005d62565b602060405180830381865afa15801562003165573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200318b919062005d7f565b60405160e085901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff938416600482015291831660248301529091166044820152620249f06064820152608401600060405180830381600087803b1580156200320b57600080fd5b505af115801562003220573d6000803e3d6000fd5b5050600f54600e546006546040517f67b426450000000000000000000000000000000000000000000000000000000081526200343b955073ffffffffffffffffffffffffffffffffffffffff938416945063d7aa2e359392831692909116906367b4264590620032969060019060040162005d62565b602060405180830381865afa158015620032b4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620032da919062005d7f565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906367b4264590620033339060039060040162005d62565b602060405180830381865afa15801562003351573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003377919062005d7f565b60405160e085901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff938416600482015291831660248301529091166044820152606401602060405180830381865afa158015620033f1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003417919062005e7c565b620249f06040518060600160405280602281526020016202019f60229139620049f4565b600f54600e546006546040517f67b42645000000000000000000000000000000000000000000000000000000008152620005bc9373ffffffffffffffffffffffffffffffffffffffff9081169363d7aa2e3593908216929116906367b4264590620034ac9060039060040162005d62565b602060405180830381865afa158015620034ca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620034f0919062005d7f565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906367b4264590620035499060019060040162005d62565b602060405180830381865afa15801562003567573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200358d919062005d7f565b60405160e085901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff938416600482015291831660248301529091166044820152606401602060405180830381865afa15801562003607573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200362d919062005e7c565b620249f06040518060600160405280602281526020016202017d60229139620049f4565b6200365b62004725565b6040516200366990620056a7565b604051809103906000f08015801562003686573d6000803e3d6000fd5b50600e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316908117909155600154604051921691620036df90620056b5565b73ffffffffffffffffffffffffffffffffffffffff928316815291166020820152604001604051809103906000f08015801562003720573d6000803e3d6000fd5b50600d80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169190911790556040516200377490620056c3565b604051809103906000f08015801562003791573d6000803e3d6000fd5b50600f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600054600d54604080517fc657c71800000000000000000000000000000000000000000000000000000000815291841660048301526024820152601260448201527f554e49535741505f56325f4144415054455200000000000000000000000000006064820152620100009091049091169063c657c71890608401600060405180830381600087803b1580156200386957600080fd5b505af11580156200387e573d6000803e3d6000fd5b5050600054600e54604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152600f60448201527f554e49535741505f56325f4d4f434b000000000000000000000000000000000060648201526201000090920416925063c657c7189150608401600060405180830381600087803b1580156200392e57600080fd5b505af115801562003943573d6000803e3d6000fd5b5050600054600f54604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152601560448201527f554e49535741505f56325f5041544846494e444552000000000000000000000060648201526201000090920416925063c657c7189150608401600060405180830381600087803b158015620039f357600080fd5b505af115801562003a08573d6000803e3d6000fd5b50505050565b6006546040517f67b42645000000000000000000000000000000000000000000000000000000008152600091829160609173ffffffffffffffffffffffffffffffffffffffff16906367b426459062003a6c90600490810162005d62565b602060405180830381865afa15801562003a8a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003ab0919062005d7f565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815291945073ffffffffffffffffffffffffffffffffffffffff16906367b426459062003b0a9060039060040162005d62565b602060405180830381865afa15801562003b28573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003b4e919062005d7f565b604080516003808252608082019092529193506020820160608036833750506006546040517f67b4264500000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff16916367b42645915062003bc89060019060040162005d62565b602060405180830381865afa15801562003be6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003c0c919062005d7f565b8160008151811062003c225762003c2262005d18565b73ffffffffffffffffffffffffffffffffffffffff92831660209182029290920101526006546040517f67b426450000000000000000000000000000000000000000000000000000000081529116906367b426459062003c889060029060040162005d62565b602060405180830381865afa15801562003ca6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003ccc919062005d7f565b8160018151811062003ce25762003ce262005d18565b73ffffffffffffffffffffffffffffffffffffffff92831660209182029290920101526006546040517f67b426450000000000000000000000000000000000000000000000000000000081529116906367b426459062003d489060059060040162005d62565b602060405180830381865afa15801562003d66573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003d8c919062005d7f565b8160028151811062003da25762003da262005d18565b73ffffffffffffffffffffffffffffffffffffffff9283166020918202929092010152600e548251911690635911fb9a908590849060ff891690811062003ded5762003ded62005d18565b60200260200101516b033b2e3c9fd0803ce8000000600262003e109190620058bc565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b15801562003e8557600080fd5b505af115801562003e9a573d6000803e3d6000fd5b5050600e54835173ffffffffffffffffffffffffffffffffffffffff9091169250635911fb9a9150839060ff881690811062003eda5762003eda62005d18565b6020026020010151846b033b2e3c9fd0803ce8000000600262003efe9190620058bc565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b15801562003f7357600080fd5b505af115801562003f88573d6000803e3d6000fd5b5050505060008460ff1660001462003fa257600062003fa5565b60015b60ff16905060008560ff1660001462003fd4578560ff1660011462003fcc57600162003fd7565b600262003fd7565b60025b600e54845160ff92909216925073ffffffffffffffffffffffffffffffffffffffff1690635911fb9a90879086908690811062004018576200401862005d18565b60200260200101516b033b2e3c9fd0803ce800000060026200403b9190620058bc565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b158015620040b057600080fd5b505af1158015620040c5573d6000803e3d6000fd5b5050600e54855173ffffffffffffffffffffffffffffffffffffffff9091169250635911fb9a915085908590811062004102576200410262005d18565b602002602001015186600a6b033b2e3c9fd0803ce8000000600f620041289190620058bc565b62004134919062005cdc565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b158015620041a957600080fd5b505af1158015620041be573d6000803e3d6000fd5b5050600e54855173ffffffffffffffffffffffffffffffffffffffff9091169250635911fb9a91508790869085908110620041fd57620041fd62005d18565b60200260200101516b033b2e3c9fd0803ce80000006001620042209190620058bc565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b1580156200429557600080fd5b505af1158015620042aa573d6000803e3d6000fd5b5050600e54855173ffffffffffffffffffffffffffffffffffffffff9091169250635911fb9a9150859084908110620042e757620042e762005d18565b6020026020010151866b033b2e3c9fd0803ce800000060026200430b9190620058bc565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b1580156200438057600080fd5b505af115801562004395573d6000803e3d6000fd5b5050600f54600e54865173ffffffffffffffffffffffffffffffffffffffff92831696506345330666955091169250879150859060ff8a16908110620043df57620043df62005d18565b60209081029190910101516040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff9384166004820152918316602483015291909116604482015261300c6064820152608401600060405180830381600087803b1580156200446a57600080fd5b505af11580156200447f573d6000803e3d6000fd5b5050600f54600e54845173ffffffffffffffffffffffffffffffffffffffff9283169450634533066693509116908590859060ff8a16908110620044c757620044c762005d18565b60209081029190910101516040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529183166024830152919091166044820152620f242c6064820152608401600060405180830381600087803b1580156200455357600080fd5b505af115801562004568573d6000803e3d6000fd5b505050509193909250565b604080516003808252608082019092526060916020820183803683370190505090508381600081518110620045ac57620045ac62005d18565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508281600181518110620045fd57620045fd62005d18565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505081816002815181106200464e576200464e62005d18565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250509392505050565b620046cd6040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b6040518060800160405280620046e587878762004a46565b815260208101869052600160408201526060018390529050949350505050565b6200472182826040518060200160405280600081525062004e72565b5050565b60065473ffffffffffffffffffffffffffffffffffffffff16620005bc576040516200475190620056d1565b604051809103906000f0801580156200476e573d6000803e3d6000fd5b50600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216918217905563b36ba208620047cd670de0b6b3a76400006064620058bc565b6040518263ffffffff1660e01b81526004016000604051808303818588803b158015620047f957600080fd5b505af11580156200480e573d6000803e3d6000fd5b505060028054307fffffffffffffffffffffffff00000000000000000000000000000000000000009182168117909255600180549091169091179055505050565b6040805160028082526060808301845292602083019080368337019050509050828160008151811062004886576200488662005d18565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508181600181518110620048d757620048d762005d18565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505092915050565b600060ff82166200492a57506001919050565b8160ff16600114156200493f57506000919050565b8160ff16600214156200495457506002919050565b8160ff1660028111156200496c576200496c620058fc565b6040517ffe7995cf000000000000000000000000000000000000000000000000000000008152600401620049a1919062005e96565b60405180910390fd5b8162004721577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf358381604051620049e1919062005ef2565b60405180910390a1620047218262004f94565b81831462004a41577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf35838160405162004a2d919062005ef2565b60405180910390a162004a4183836200500c565b505050565b604080518082019091526000815260606020820152606060008551600281111562004a755762004a75620058fc565b141562004b83576338ed173960e01b8560a001518660e0015162004ac65760c08701516127109062004aa8908262005f3b565b62004ab49088620058bc565b62004ac0919062005cdc565b62004ac9565b60005b8573c4375b7de8af5a38a93548eb8453a498222c4ff262004aed42610e1062005d47565b60405160240162004b0395949392919062005f55565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505b60018551600281111562004b9b5762004b9b620058fc565b141562004cd15760e08501517fbdbeaa31000000000000000000000000000000000000000000000000000000009062004c2b5760a086015162004be29061271090620058bc565b60c087015162004bf59061271062005f3b565b62004c0d876b033b2e3c9fd0803ce8000000620058bc565b62004c199190620058bc565b62004c25919062005cdc565b62004c2e565b60005b8462004c3d42610e1062005d47565b60405160240162004c519392919062005fa0565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505b60028551600281111562004ce95762004ce9620058fc565b141562004df757638803dbee60e01b8560a001518660e0015162004d3a5760c087015162004d1a9061271062005d47565b62004d2861271088620058bc565b62004d34919062005cdc565b62004d3d565b60005b8573c4375b7de8af5a38a93548eb8453a498222c4ff262004d6142610e1062005d47565b60405160240162004d7795949392919062005f55565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505b80511562004e345760408051808201909152600d5473ffffffffffffffffffffffffffffffffffffffff1681526020810191909152905062004e6b565b84516040517ffe7995cf000000000000000000000000000000000000000000000000000000008152620049a1919060040162005e96565b9392505050565b62004ead8260400151151584604001511515148260405160200162004e98919062005fcb565b604051602081830303815290604052620049aa565b60408301511515600114801562004eca5750604082015115156001145b1562004a415762004f06836020015183602001518360405160200162004ef191906200600e565b604051602081830303815290604052620049f4565b62004f27836060015183606001518360405160200162004ef1919062006051565b82515182515160405162004f5c92919062004f4790859060200162006094565b6040516020818303038152906040526200511e565b8251602090810151835182015160405162004a419362004f7f91869101620060fd565b60405160208183030381529060405262005197565b8062001f36577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f5060405162004ffa9060208082526017908201527f4572726f723a20417373657274696f6e204661696c6564000000000000000000604082015260600190565b60405180910390a162001f36620051ed565b80821462004721577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f506040516200509a9060208082526022908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b75696e60408201527f745d000000000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a881604051620050d3919062006166565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a8826040516200510c9190620061b2565b60405180910390a162004721620051ed565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161462004a41577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf35838160405162005183919062005ef2565b60405180910390a162004a41838362005370565b620051a383836200549c565b62004a41577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf358381604051620051d9919062005ef2565b60405180910390a162004a41838362005566565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620053425760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000009282019290925260016060820152600091907f70ca10bbd0dbfd9020a9f4b13402c16cb120705e0d1c0aeab10fa353ae586fc490608001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052620052bf929160200162005df4565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052620052f99162005e3e565b6000604051808303816000865af19150503d806000811462005338576040519150601f19603f3d011682016040523d82523d6000602084013e6200533d565b606091505b505050505b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055565b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462004721577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f506040516200542a9060208082526025908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b61646460408201527f726573735d000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f81604051620054639190620061f0565b60405180910390a17f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f826040516200510c919062006252565b8051825160019114156200555c5760005b83518110156200555557828181518110620054cc57620054cc62005d18565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168482815181106200550e576200550e62005d18565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016146200554057600091505b806200554c8162006290565b915050620054ad565b5062005560565b5060005b92915050565b6200557282826200549c565b62004721577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f50604051620055fd9060208082526023908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b62797460408201527f65735d0000000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17fd26e16cad4548705e4c9e2d94f98ee91c289085ee425594fd5635fa2964ccf1881604051620056369190620062cc565b60405180910390a17fd26e16cad4548705e4c9e2d94f98ee91c289085ee425594fd5635fa2964ccf18826040516200510c919062006326565b613960806200636583390190565b6118528062009cc583390190565b615f8c806200b51783390190565b61189380620114a383390190565b611a5c8062012d3683390190565b61251b806201479283390190565b611a7f8062016cad83390190565b617a51806201872c83390190565b803560ff811681146200303b57600080fd5b803561ffff811681146200303b57600080fd5b801515811462001f3657600080fd5b600080600080600060a086880312156200572c57600080fd5b853594506200573e60208701620056df565b93506200574e60408701620056f1565b92506060860135620057608162005704565b91506080860135620057728162005704565b809150509295509295909350565b600080600080608085870312156200579757600080fd5b84359350620057a960208601620056df565b9250620057b960408601620056f1565b91506060850135620057cb8162005704565b939692955090935050565b600060208284031215620057e957600080fd5b813562004e6b8162005704565b600080600080600060a086880312156200580f57600080fd5b853594506200573e60208701620056f1565b600080600080608085870312156200583857600080fd5b84359350620057a960208601620056f1565b73ffffffffffffffffffffffffffffffffffffffff8116811462001f3657600080fd5b6000602082840312156200588057600080fd5b813562004e6b816200584a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620058f757620058f76200588d565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600381106200593e576200593e620058fc565b9052565b600081518084526020808501945080840160005b838110156200598a57815173ffffffffffffffffffffffffffffffffffffffff168752958201959082019060010162005956565b509495945050505050565b60408152620059a96040820184516200592b565b6000602084015173ffffffffffffffffffffffffffffffffffffffff80821660608501528060408701511660808501525050606084015162005a0360a084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060808401516101008060c085015262005a2261014085018362005942565b915060a086015160e085015260c0860151818501525060e085015162005a4d61012085018215159052565b5073ffffffffffffffffffffffffffffffffffffffff84166020840152905062004e6b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff8111828210171562005ac75762005ac762005a72565b60405290565b6040805190810167ffffffffffffffff8111828210171562005ac75762005ac762005a72565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171562005b3d5762005b3d62005a72565b604052919050565b60005b8381101562005b6257818101518382015260200162005b48565b8381111562003a085750506000910152565b80516200303b8162005704565b6000602080838503121562005b9557600080fd5b825167ffffffffffffffff8082111562005bae57600080fd5b908401906080828703121562005bc357600080fd5b62005bcd62005aa1565b82518281111562005bdd57600080fd5b83016040818903121562005bf057600080fd5b62005bfa62005acd565b815162005c07816200584a565b8152818601518481111562005c1b57600080fd5b80830192505088601f83011262005c3157600080fd5b81518481111562005c465762005c4662005a72565b62005c78877fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160162005af3565b9450808552898782850101111562005c8f57600080fd5b62005ca08188870189860162005b45565b50808601849052825250828401518185015262005cc06040840162005b74565b6040820152606083015160608201528094505050505092915050565b60008262005d13577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000821982111562005d5d5762005d5d6200588d565b500190565b60208101600b831062005d795762005d79620058fc565b91905290565b60006020828403121562005d9257600080fd5b815162004e6b816200584a565b60408152600062005db4604083018562005942565b828103602084015262005dc8818562005942565b95945050505050565b600060ff821660ff81141562005deb5762005deb6200588d565b60010192915050565b7fffffffff00000000000000000000000000000000000000000000000000000000831681526000825162005e3081600485016020870162005b45565b919091016004019392505050565b6000825162005e5281846020870162005b45565b9190910192915050565b60006020828403121562005e6f57600080fd5b815162004e6b8162005704565b60006020828403121562005e8f57600080fd5b5051919050565b602081016200556082846200592b565b6000815180845262005ec081602086016020860162005b45565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60408152600560408201527f4572726f72000000000000000000000000000000000000000000000000000000606082015260806020820152600062004e6b608083018462005ea6565b60008282101562005f505762005f506200588d565b500390565b85815284602082015260a06040820152600062005f7660a083018662005942565b73ffffffffffffffffffffffffffffffffffffffff94909416606083015250608001529392505050565b83815260606020820152600062005fbb606083018562005942565b9050826040830152949350505050565b6000825162005fdf81846020870162005b45565b7f446966666572656e7420666f756e6420706172616d7300000000000000000000920191825250601601919050565b600082516200602281846020870162005b45565b7f71312e616d6f756e7420213d2071322e616d6f756e7400000000000000000000920191825250601601919050565b600082516200606581846020870162005b45565b7f71312e676173557361676520213d2071322e6761735573616765000000000000920191825250601a01919050565b60008251620060a881846020870162005b45565b7f71312e6d756c746943616c6c2e74617267657420213d2071322e6d756c7469439201918252507f616c6c2e746172676574000000000000000000000000000000000000000000006020820152602a01919050565b600082516200611181846020870162005b45565b7f71312e6d756c746943616c6c2e63616c6c4461746120213d2071322e6d756c749201918252507f6943616c6c2e63616c6c446174610000000000000000000000000000000000006020820152602e01919050565b604081526000620061a460408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b905082602083015292915050565b604081526000620061a460408301600a81527f2020202041637475616c00000000000000000000000000000000000000000000602082015260400190565b6040815260006200622e60408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b905073ffffffffffffffffffffffffffffffffffffffff8316602083015292915050565b6040815260006200622e60408301600a81527f2020202041637475616c00000000000000000000000000000000000000000000602082015260400190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415620062c557620062c56200588d565b5060010190565b6040815260006200630a60408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b82810360208401526200631e818562005ea6565b949350505050565b6040815260006200630a60408301600a81527f2020202041637475616c0000000000000000000000000000000000000000000060208201526040019056fe60806040523480156200001157600080fd5b5060405162003960380380620039608339810160408190526200003491620002a2565b8151829082906200004d90600290602085019062000133565b5080516200006390600390602084019062000133565b506000601260405162000076906200019d565b6060808252600790820152664352564d6f636b60c81b608082015260a0602082018190526015908201527f43525620666f72204375727665506f6f6c4d6f636b000000000000000000000060c082015260ff909116604082015260e001604051809103906000f080158015620000f0573d6000803e3d6000fd5b50600080546001600160a01b039092166001600160a01b03199283168117909155600180549092161790555050670de0b6b3a7640000600755506200030c915050565b8280548282559060005260206000209081019282156200018b579160200282015b828111156200018b57825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019062000154565b5062000199929150620001ab565b5090565b611758806200220883390190565b5b80821115620001995760008155600101620001ac565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b0381168114620001f057600080fd5b919050565b600082601f8301126200020757600080fd5b815160206001600160401b0380831115620002265762000226620001c2565b8260051b604051601f19603f830116810181811084821117156200024e576200024e620001c2565b6040529384528581018301938381019250878511156200026d57600080fd5b83870191505b8482101562000297576200028782620001d8565b8352918301919083019062000273565b979650505050505050565b60008060408385031215620002b657600080fd5b82516001600160401b0380821115620002ce57600080fd5b620002dc86838701620001f5565b93506020850151915080821115620002f357600080fd5b506200030285828601620001f5565b9150509250929050565b611eec806200031c6000396000f3fe608060405234801561001057600080fd5b506004361061030a5760003560e01c806382c630661161019c578063bb7b8b80116100ee578063e2e7d26411610097578063f851a44011610071578063f851a44014610597578063fc0c546a1461059e578063fee3f7f91461036257600080fd5b8063e2e7d26414610576578063ecb586a514610584578063f446c1d01461036257600080fd5b8063d96c7fce116100c8578063d96c7fce14610369578063dd62ed3e14610568578063ddca3f431461036257600080fd5b8063bb7b8b801461053a578063c661065714610542578063cc2b27d71461055557600080fd5b80639fdaea0c11610150578063b739953e1161012a578063b739953e14610501578063b91434d114610514578063b9947eb01461052757600080fd5b80639fdaea0c146104db578063a6417ed6146104ee578063b4b577ad1461036257600080fd5b80638ea875f3116101815780638ea875f3146104bf57806395d89b411461033557806399bd2ba5146104c857600080fd5b806382c630661461048c57806385ca3c6f146104ac57600080fd5b80633df02124116102605780635e0d443f1161020957806371035418116101e3578063710354181461045457806376a2f0f0146103625780637b475b681461046757600080fd5b80635e0d443f1461042d57806363543f061461036257806370a082311461044057600080fd5b80634903b0d11161023a5780634903b0d1146104075780635409491a1461036257806356ac35031461041a57600080fd5b80633df02124146103e15780634469e30e146103695780634515cef3146103f457600080fd5b806318160ddd116102c257806323746eb81161029c57806323746eb814610393578063313ce567146103625780633883e119146103cb57600080fd5b806318160ddd146103625780631a4d01d21461037e5780632081066c1461036257600080fd5b806307211ef7116102f357806307211ef71461034f578063140522881461036257806314f059791461036957600080fd5b8063065a80d81461030f57806306fdde0314610335575b600080fd5b61032261031d36600461192d565b6105be565b6040519081526020015b60405180910390f35b6040805160208101825260008152905161032c9190611974565b61032261035d3660046119c5565b610677565b6000610322565b6103716106c7565b60405161032c9190611a01565b61039161038c366004611a32565b6106f2565b005b6103a66103a136600461192d565b6107e6565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161032c565b6103226103d9366004611a79565b600092915050565b6103916103ef366004611ab1565b610826565b610391610402366004611b88565b610950565b610322610415366004611bb3565b610b1c565b6103916104283660046119c5565b610b31565b61032261043b3660046119c5565b610b92565b61032261044e366004611bf0565b50600090565b610391610462366004611bb3565b600755565b610391610475366004611c0b565b600f9190910b600090815260066020526040902055565b6001546103a69073ffffffffffffffffffffffffffffffffffffffff1681565b6103716104ba366004611c35565b610bce565b61032260075481565b6103916104d6366004611c73565b610c04565b6103916104e9366004611c8f565b610c63565b6103916104fc366004611ab1565b610de6565b6103a661050f36600461192d565b6111a6565b6103916105223660046119c5565b6111be565b6103a6610535366004611bb3565b61121f565b600754610322565b6103a6610550366004611bb3565b611234565b610322610563366004611cac565b611249565b6103226103d9366004611cd8565b61032261044e366004611bb3565b610391610592366004611d02565b61127f565b60006103a6565b6000546103a69073ffffffffffffffffffffffffffffffffffffffff1681565b6000600282600f0b815481106105d6576105d6611d26565b6000918252602090912001546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa15801561064d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106719190611d55565b92915050565b600f83810b60009081526005602090815260408083209386900b8352929052908120546b033b2e3c9fd0803ce8000000906106b3908490611d9d565b6106bd9190611dda565b90505b9392505050565b6106cf6118f8565b604051806060016040528060008152602001600081526020016000815250905090565b6000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810185905273ffffffffffffffffffffffffffffffffffffffff909116906379cc6790906044016020604051808303816000875af1158015610769573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078d9190611e15565b506107e133826002856fffffffffffffffffffffffffffffffff16815481106107b8576107b8611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169190611402565b505050565b6000600282600f0b815481106107fe576107fe611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1692915050565b6000610833858585610b92565b9050818110156108ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f437572766556314d6f636b3a20494e53554646494349454e545f4f555450555460448201527f5f414d4f554e540000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61091f3330856002896fffffffffffffffffffffffffffffffff16815481106108f5576108f5611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169291906114d6565b61094933826002876fffffffffffffffffffffffffffffffff16815481106107b8576107b8611d26565b5050505050565b60005b6003811015610a7f57600083826003811061097057610970611d26565b60200201511115610a6d576002818154811061098e5761098e611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff166323b872dd33308685600381106109c9576109c9611d26565b60200201516040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff938416600482015292909116602483015260448201526064016020604051808303816000875af1158015610a47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6b9190611e15565b505b80610a7781611e32565b915050610953565b506000546040517f40c10f190000000000000000000000000000000000000000000000000000000081523360048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f19906044015b6020604051808303816000875af1158015610af8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e19190611e15565b6000600282815481106105d6576105d6611d26565b600f83810b60009081526005602090815260408083209386900b835292905220819055610b6a6b033b2e3c9fd0803ce80000008261153a565b600f92830b60009081526005602090815260408083209690950b825294909452919092205550565b600f83810b60009081526004602090815260408083209386900b8352929052908120546b033b2e3c9fd0803ce8000000906106b3908490611d9d565b610bd66118f8565b6040805160608181019092529085906003908390839080828437600092019190915250919695505050505050565b6000546040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052909116906340c10f1990604401610ad9565b60005b6003811015610d88576000838260038110610c8357610c83611d26565b60200201351115610d765760028181548110610ca157610ca1611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33858460038110610cdb57610cdb611d26565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff9093166004840152602002013560248201526044016020604051808303816000875af1158015610d50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d749190611e15565b505b80610d8081611e32565b915050610c66565b506000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906379cc679090604401610ad9565b60006002856fffffffffffffffffffffffffffffffff1681548110610e0d57610e0d611d26565b60009182526020822001546003805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff8816908110610e5957610e59611d26565b60009182526020822001546002805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff8816908110610ea557610ea5611d26565b60009182526020822001546003805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff8916908110610ef157610ef1611d26565b600091825260208220015473ffffffffffffffffffffffffffffffffffffffff169150610f1f898989610677565b905085811015610fb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f437572766556314d6f636b3a20494e53554646494349454e545f4f555450555460448201527f5f414d4f554e540000000000000000000000000000000000000000000000000060648201526084016108c1565b610fd373ffffffffffffffffffffffffffffffffffffffff851633308a6114d6565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526024820189905285169063095ea7b3906044016020604051808303816000875af1158015611048573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061106c9190611e15565b506040517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8616906340c10f1990604401600060405180830381600087803b1580156110db57600080fd5b505af11580156110ef573d6000803e3d6000fd5b50506040517f1e9a69500000000000000000000000000000000000000000000000000000000081523060048201526024810184905273ffffffffffffffffffffffffffffffffffffffff86169250631e9a69509150604401600060405180830381600087803b15801561116157600080fd5b505af1158015611175573d6000803e3d6000fd5b5061119b9250505073ffffffffffffffffffffffffffffffffffffffff83163383611402565b505050505050505050565b6000600382600f0b815481106107fe576107fe611d26565b600f83810b60009081526004602090815260408083209386900b8352929052208190556111f76b033b2e3c9fd0803ce80000008261153a565b600f92830b60009081526004602090815260408083209690950b825294909452919092205550565b6000600382815481106107fe576107fe611d26565b6000600282815481106107fe576107fe611d26565b600f81900b6000908152600660205260408120546b033b2e3c9fd0803ce8000000906112759085611d9d565b6106c09190611dda565b60005b60038110156113a457600082826003811061129f5761129f611d26565b6020020151111561139257600281815481106112bd576112bd611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb338484600381106112f7576112f7611d26565b60200201516040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af115801561136c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113909190611e15565b505b8061139c81611e32565b915050611282565b506000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810184905273ffffffffffffffffffffffffffffffffffffffff909116906379cc679090604401610ad9565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526107e19084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526116a0565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526115349085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611454565b50505050565b60408051808201909152600281527f4d330000000000000000000000000000000000000000000000000000000000006020820152600090826115a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c19190611974565b5060006115b7600284611dda565b90506b033b2e3c9fd0803ce80000006115f0827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611e6b565b6115fa9190611dda565b8411156040518060400160405280600281526020017f4d310000000000000000000000000000000000000000000000000000000000008152509061166b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c19190611974565b5082816116846b033b2e3c9fd0803ce800000087611d9d565b61168e9190611e82565b6116989190611dda565b949350505050565b6000611702826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166117ac9092919063ffffffff16565b8051909150156107e157808060200190518101906117209190611e15565b6107e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016108c1565b60606106bd848460008585843b61181f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108c1565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516118489190611e9a565b60006040518083038185875af1925050503d8060008114611885576040519150601f19603f3d011682016040523d82523d6000602084013e61188a565b606091505b509150915061189a8282866118a5565b979650505050505050565b606083156118b45750816106c0565b8251156118c45782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c19190611974565b60405180606001604052806003906020820280368337509192915050565b8035600f81900b811461192857600080fd5b919050565b60006020828403121561193f57600080fd5b6106c082611916565b60005b8381101561196357818101518382015260200161194b565b838111156115345750506000910152565b6020815260008251806020840152611993816040850160208701611948565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000606084860312156119da57600080fd5b6119e384611916565b92506119f160208501611916565b9150604084013590509250925092565b60608101818360005b6003811015611a29578151835260209283019290910190600101611a0a565b50505092915050565b600080600060608486031215611a4757600080fd5b833592506119f160208501611916565b806060810183101561067157600080fd5b8015158114611a7657600080fd5b50565b60008060808385031215611a8c57600080fd5b611a968484611a57565b91506060830135611aa681611a68565b809150509250929050565b60008060008060808587031215611ac757600080fd5b611ad085611916565b9350611ade60208601611916565b93969395505050506040820135916060013590565b600082601f830112611b0457600080fd5b6040516060810181811067ffffffffffffffff82111715611b4e577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604052806060840185811115611b6357600080fd5b845b81811015611b7d578035835260209283019201611b65565b509195945050505050565b60008060808385031215611b9b57600080fd5b611ba58484611af3565b946060939093013593505050565b600060208284031215611bc557600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461192857600080fd5b600060208284031215611c0257600080fd5b6106c082611bcc565b60008060408385031215611c1e57600080fd5b611c2783611916565b946020939093013593505050565b600080600060e08486031215611c4a57600080fd5b611c548585611a57565b9250611c638560608601611a57565b915060c084013590509250925092565b60008060408385031215611c8657600080fd5b611c2783611bcc565b60008060808385031215611ca257600080fd5b611ba58484611a57565b60008060408385031215611cbf57600080fd5b82359150611ccf60208401611916565b90509250929050565b60008060408385031215611ceb57600080fd5b611cf483611bcc565b9150611ccf60208401611bcc565b60008060808385031215611d1557600080fd5b82359150611ccf8460208501611af3565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215611d6757600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611dd557611dd5611d6e565b500290565b600082611e10577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600060208284031215611e2757600080fd5b81516106c081611a68565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611e6457611e64611d6e565b5060010190565b600082821015611e7d57611e7d611d6e565b500390565b60008219821115611e9557611e95611d6e565b500190565b60008251611eac818460208701611948565b919091019291505056fea2646970667358221220a76213374b33de2cb1c5d61e9c1133f6d8163c7b90c32a6142a6f4fd98fe430364736f6c634300080a003360a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a00336101606040523480156200001257600080fd5b5060405162001852380380620018528339810160408190526200003591620003a3565b6000805460ff191690558585828260c882826001600160a01b0381166200006f57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000ae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d49190620004de565b6001600160a01b0316608052508051620000f6906002906020840190620002ca565b505060a052506001600160a01b0382166200012457604051635919af9760e11b815260040160405180910390fd5b6001600160a01b03821660c0819052670de0b6b3a764000060e05260408051630176f71760e71b815290516000929163bb7b8b809160048083019260209291908290030181865afa1580156200017e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001a4919062000503565b9050620001b1816200022a565b505050506001600160a01b0384161580620001d357506001600160a01b038316155b80620001e657506001600160a01b038216155b156200020557604051635919af9760e11b815260040160405180910390fd5b506001600160a01b039283166101005290821661012052166101405250620005d09050565b8062000249576040516309aadd6f60e41b815260040160405180910390fd5b60018190557f82e7ee47180a631312683eeb2a85ad264c9af490d54de5a75bbdb95b968c6de2816200027b8162000296565b6040805192835260208301919091520160405180910390a150565b60a05160009061271090620002ac908262000533565b620002b890846200054e565b620002c4919062000570565b92915050565b828054620002d89062000593565b90600052602060002090601f016020900481019282620002fc576000855562000347565b82601f106200031757805160ff191683800117855562000347565b8280016001018555821562000347579182015b82811115620003475782518255916020019190600101906200032a565b506200035592915062000359565b5090565b5b808211156200035557600081556001016200035a565b80516001600160a01b03811681146200038857600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60008060008060008060c08789031215620003bd57600080fd5b620003c88762000370565b95506020620003d981890162000370565b9550620003e96040890162000370565b9450620003f96060890162000370565b9350620004096080890162000370565b60a08901519093506001600160401b03808211156200042757600080fd5b818a0191508a601f8301126200043c57600080fd5b8151818111156200045157620004516200038d565b604051601f8201601f19908116603f011681019083821181831017156200047c576200047c6200038d565b816040528281528d868487010111156200049557600080fd5b600093505b82841015620004b957848401860151818501870152928501926200049a565b82841115620004cb5760008684830101525b8096505050505050509295509295509295565b600060208284031215620004f157600080fd5b620004fc8262000370565b9392505050565b6000602082840312156200051657600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156200054957620005496200051d565b500190565b60008160001904831182151516156200056b576200056b6200051d565b500290565b6000826200058e57634e487b7160e01b600052601260045260246000fd5b500490565b600181811c90821680620005a857607f821691505b60208210811415620005ca57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c05160e0516101005161012051610140516111e86200066a6000396000818161023501526108c8015260008181610383015261080901526000818161033901526107620152600081816103120152610a250152600081816101b001526109890152600081816101760152610c170152600081816102eb015281816103db01528181610557015261068f01526111e86000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c80639a6fc8f5116100cd578063b09ad8a011610081578063d62ada1111610066578063d62ada1114610376578063e5693f411461037e578063feaf968c146103a557600080fd5b8063b09ad8a01461035b578063bc489a651461036357600080fd5b8063a50cf2c8116100b2578063a50cf2c8146102e6578063a834559e1461030d578063ab0ca0e11461033457600080fd5b80639a6fc8f514610293578063a384d6ff146102dd57600080fd5b8063427cb6fe116101245780635c975abb116101095780635c975abb1461025f5780637284e416146102765780638456cb591461028b57600080fd5b8063427cb6fe1461023057806354fd4d501461025757600080fd5b8063313ce56711610155578063313ce567146101f75780633f4ba83a146102115780633fd0875f1461021b57600080fd5b806312b495a814610171578063218751b2146101ab575b600080fd5b6101987f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101a2565b6101ff600881565b60405160ff90911681526020016101a2565b6102196103ad565b005b610223600381565b6040516101a29190610dd7565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b610198600181565b60005460ff165b60405190151581526020016101a2565b61027e61049b565b6040516101a29190610e18565b610219610529565b6102a66102a1366004610ea3565b610615565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a0016101a2565b61019860015481565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b6101987f000000000000000000000000000000000000000000000000000000000000000081565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b61019861064f565b610219610371366004610ec7565b610661565b610266600181565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b6102a6610751565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa158015610437573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061045b9190610ee0565b610491576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610499610a67565b565b600280546104a890610f02565b80601f01602080910402602001604051908101604052809291908181526020018280546104d490610f02565b80156105215780601f106104f657610100808354040283529160200191610521565b820191906000526020600020905b81548152906001019060200180831161050457829003601f168201915b505050505081565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa1580156105b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105d79190610ee0565b61060d576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610499610b4d565b60008060008060006040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061065c600154610c0d565b905090565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156106eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070f9190610ee0565b610745576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61074e81610c56565b50565b6000806000806000806000806000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156107cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ef9190610f56565b939d50919b509950975095506108078a8a8989610cd8565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610872573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108969190610f56565b9398509196509450925090506108ae85858484610cd8565b888412156108c6578499508398508297508196508095505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610931573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109559190610f56565b93985091965094509250905061096d85858484610cd8565b88841215610985578499508398508297508196508095505b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb7b8b806040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a169190610fae565b9050610a2181610d73565b90507f0000000000000000000000000000000000000000000000000000000000000000610a4e828c610ff6565b610a5891906110e1565b99505050505050509091929394565b60005460ff16610ad8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff1615610bba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610acf565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b233390565b6000612710610c3c7f000000000000000000000000000000000000000000000000000000000000000082611149565b610c469084611161565b610c50919061119e565b92915050565b80610c8d576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190557f82e7ee47180a631312683eeb2a85ad264c9af490d54de5a75bbdb95b968c6de281610cbd81610c0d565b6040805192835260208301919091520160405180910390a150565b60008313610d12576040517f56e05d2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8369ffffffffffffffffffff168169ffffffffffffffffffff161080610d36575081155b15610d6d576040517fb1cf675500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60015460009080831015610db3576040517fb416da7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610dbe82610c0d565b905080841115610dcf579392505050565b509192915050565b6020810160068310610e12577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b600060208083528351808285015260005b81811015610e4557858101830151858201604001528201610e29565b81811115610e57576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b69ffffffffffffffffffff8116811461074e57600080fd5b600060208284031215610eb557600080fd5b8135610ec081610e8b565b9392505050565b600060208284031215610ed957600080fd5b5035919050565b600060208284031215610ef257600080fd5b81518015158114610ec057600080fd5b600181811c90821680610f1657607f821691505b60208210811415610f50577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600080600080600060a08688031215610f6e57600080fd5b8551610f7981610e8b565b809550506020860151935060408601519250606086015191506080860151610fa081610e8b565b809150509295509295909350565b600060208284031215610fc057600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60008413600084138583048511828216161561103757611037610fc7565b7f8000000000000000000000000000000000000000000000000000000000000000600087128682058812818416161561107257611072610fc7565b6000871292508782058712848416161561108e5761108e610fc7565b878505871281841616156110a4576110a4610fc7565b505050929093029392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826110f0576110f06110b2565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f80000000000000000000000000000000000000000000000000000000000000008314161561114457611144610fc7565b500590565b6000821982111561115c5761115c610fc7565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561119957611199610fc7565b500290565b6000826111ad576111ad6110b2565b50049056fea2646970667358221220226b667ed6fc6db7c8ec1377cc84dae524e2dc572320ead4a7092944a6b912de64736f6c634300080a00336102606040523480156200001257600080fd5b5060405162005f8c38038062005f8c833981016040819052620000359162000ba4565b83838383600384846001600160a01b03821615806200005b57506001600160a01b038116155b156200007a57604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038216608081905260408051632f7a188160e01b81529051632f7a1881916004808201926020929091908290030181865afa158015620000c5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000eb919062000c01565b6001600160a01b0390811660a05290811660c05260016000558416151590506200012857604051635919af9760e11b815260040160405180910390fd5b608051604051630f67c5bd60e41b81526001600160a01b0385811660048301529091169063f67c5bd090602401602060405180830381865afa15801562000173573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000199919062000c26565b620001c757604051634c607af960e11b81526001600160a01b03841660048201526024015b60405180910390fd5b6001600160a01b038084166101e081905261020052821661022052610240819052620001f460006200090a565b6001600160a01b031660e0526200020c60016200090a565b6001600160a01b0316610100526200022560026200090a565b6001600160a01b0316610120526200023e60036200090a565b6001600160a01b031661014052620002576000620009fd565b6001600160a01b031661016052620002706001620009fd565b6001600160a01b031661018052620002896002620009fd565b6001600160a01b03166101a052620002a26003620009fd565b6001600160a01b039081166101c05260e051161580620002cc5750610100516001600160a01b0316155b15620002eb57604051635919af9760e11b815260040160405180910390fd5b600281118015620003065750610120516001600160a01b0316155b156200032557604051635919af9760e11b815260040160405180910390fd5b600381118015620003405750610140516001600160a01b0316155b156200035f57604051635919af9760e11b815260040160405180910390fd5b60805160e051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620003ac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003d2919062000c26565b620004005760e051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b60805161010051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa1580156200044e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000474919062000c26565b620004a35761010051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b60028111801562000525575060805161012051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620004fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000523919062000c26565b155b15620005555761012051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b600381118015620005d7575060805161014051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620005af573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005d5919062000c26565b155b15620006075761014051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b610160516001600160a01b03161580159062000694575060805161016051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa1580156200066c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000692919062000c26565b155b15620006c45761016051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b610180516001600160a01b03161580159062000751575060805161018051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa15801562000729573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200074f919062000c26565b155b15620007815761018051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b6101a0516001600160a01b0316158015906200080e57506080516101a051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620007e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200080c919062000c26565b155b156200083e576101a051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b6101c0516001600160a01b031615801590620008cb57506080516101c051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620008a3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008c9919062000c26565b155b15620008fb576101c051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b50505050505050505062000c66565b60c05160405163c661065760e01b8152600481018390526000916001600160a01b03169063c661065790602401602060405180830381865afa92505050801562000973575060408051601f3d908101601f19168201909252620009709181019062000c01565b60015b6200097e5762000984565b92915050565b60c05160405163046e8dd760e31b8152600f84900b60048201526001600160a01b03909116906323746eb8906024015b602060405180830381865afa925050508015620009f0575060408051601f3d908101601f19168201909252620009ed9181019062000c01565b60015b6200097e57506000919050565b610220516000906001600160a01b03161562000a1e576200097e8262000ac0565b60c051604051630b9947eb60e41b8152600481018490526001600160a01b039091169063b9947eb090602401602060405180830381865afa92505050801562000a86575060408051601f3d908101601f1916820190925262000a839181019062000c01565b60015b6200097e5760c051604051635b9cca9f60e11b8152600f84900b60048201526001600160a01b039091169063b739953e90602401620009b4565b60008162000ad4576200097e600062000b17565b610220516001600160a01b031663c661065762000af360018562000c40565b6040518263ffffffff1660e01b8152600401620009b491815260200190565b919050565b600081600f0b6000141562000b2b575060e0515b81600f0b6001141562000b3e5750610100515b81600f0b6002141562000b515750610120515b81600f0b6003141562000b645750610140515b6001600160a01b03811662000b12576040516334769e6f60e21b815260040160405180910390fd5b80516001600160a01b038116811462000b1257600080fd5b6000806000806080858703121562000bbb57600080fd5b62000bc68562000b8c565b935062000bd66020860162000b8c565b925062000be66040860162000b8c565b915062000bf66060860162000b8c565b905092959194509250565b60006020828403121562000c1457600080fd5b62000c1f8262000b8c565b9392505050565b60006020828403121562000c3957600080fd5b5051919050565b60008282101562000c6157634e487b7160e01b600052601160045260246000fd5b500390565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e051610200516102205161024051614fa962000fe36000396000818161078301528181613708015281816138bf015281816139d901528181613e0f0152613f01015260006105de01526000818161067501528181611f680152818161239f0152818161278901528181612e6b01528181612f0901526131ed015260006108ad01526000818161059c015261288b0152600081816103d4015261285c015260008181610605015261282d0152600081816106af01526127fe015260008181610876015281816126630152818161363501528181613f6b01526146640152600081816104d7015281816126340152818161356501528181613e7901526145480152600081816107f3015281816126050152818161349501528181613d85015261442c015260008181610448015281816125d6015281816133c501528181613cb901526143100152600081816107350152818161091a015281816109e701528181610a7701528181610b6f01528181610bfe01528181610c9501528181610d2601528181611139015281816111b1015281816112ee0152818161144101528181611578015281816115c00152818161166d015281816116b5015281816117660152818161179b01528181611ac501528181611b4301528181611ccd01528181611d4501528181611dea01528181611fb20152818161206b015281816120a00152818161213b0152818161245e015281816124cb0152818161255c01528181612aa901528181612bc801528181612ca2015281816142e801528181614404015281816145200152818161463c01526147840152600081816104fe0152818161291401528181614055015261482b01526000818161075c01528181610ec9015281816118a601528181611ef4015281816122450152818161270101528181612aff01528181612b9901528181612cf801528181612da0015281816130630152818161311a01528181613215015281816132f8015281816133ed015281816134bd0152818161358d0152818161365d01528181613bf401528181613ce401528181613dad01528181613ea101528181613f93015281816140dd015281816141910152818161423b0152818161435e0152818161447a01528181614596015281816146b20152818161475501526148950152614fa96000f3fe608060405234801561001057600080fd5b50600436106103a45760003560e01c806379bea664116101e9578063cc2b27d71161010f578063e2e7d264116100ad578063f446c1d01161007c578063f446c1d014610898578063f851a440146108a0578063fc0c546a146108a8578063fee3f7f9146108cf57600080fd5b8063e2e7d26414610838578063ec026ca71461084b578063ecb586a51461085e578063ef14101e1461087157600080fd5b8063d21220a7116100e9578063d21220a7146107ee578063d96c7fce14610815578063dd62ed3e1461081d578063ddca3f431461083057600080fd5b8063cc2b27d7146107b3578063ce30bbdb146107c6578063cf023dd0146107db57600080fd5b8063b4b577ad11610187578063bd90df7011610156578063bd90df7014610730578063c12c21c014610757578063c21ee1621461077e578063c6610657146107a557600080fd5b8063b4b577ad146106ff578063b739953e14610707578063b9947eb01461071a578063bb7b8b801461072857600080fd5b80638ba51dfc116101c35780638ba51dfc146106aa57806395d89b41146106d15780639fdaea0c146106d9578063a6417ed6146106ec57600080fd5b806379bea6641461065d57806382c630661461067057806385ca3c6f1461069757600080fd5b806333d2ebf2116102ce57806357d788751161026c5780636e1d82711161023b5780636e1d82711461060057806370a082311461062757806376a2f0f01461063a57806378aa73a41461064257600080fd5b806357d78875146105975780635e0d443f146105be57806363543f06146105d157806364a89bca146105d957600080fd5b80634469e30e116102a85780634469e30e146105615780634515cef3146105695780634903b0d11461057c5780635409491a1461058f57600080fd5b806333d2ebf2146105285780633883e1191461053b5780633df021241461054e57600080fd5b806318160ddd1161034657806323746eb81161031557806323746eb8146104bf57806325be124e146104d25780632f7a1881146104f9578063313ce5671461052057600080fd5b806318160ddd146104875780631a4d01d21461048f5780631af4de83146104a45780632081066c146104b757600080fd5b806307211ef71161038257806307211ef7146104305780630dfe168114610443578063140522881461046a57806314f059791461047257600080fd5b8063065a80d8146103a957806306871163146103cf57806306fdde031461041b575b600080fd5b6103bc6103b736600461491d565b6108d7565b6040519081526020015b60405180910390f35b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016103c6565b610423610a73565b6040516103c691906149ae565b6103bc61043e3660046149c1565b610b2b565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc610bfa565b61047a610c8b565b6040516103c691906149fd565b6103bc610d22565b6104a261049d366004614a2e565b610d8f565b005b6104a26104b23660046149c1565b610e27565b6103bc611135565b6103f66104cd36600461491d565b6111a2565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc6111ad565b6104a2610536366004614a53565b61121a565b6103bc610549366004614a8e565b6112ae565b6104a261055c366004614acb565b611366565b61047a611437565b6104a2610577366004614b0d565b6114aa565b6103bc61058a366004614b38565b611546565b6103bc6115bc565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc6105cc3660046149c1565b611629565b6103bc6116b1565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc610635366004614b73565b61171e565b6103bc611797565b61064a600281565b60405161ffff90911681526020016103c6565b6104a261066b3660046149c1565b611804565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b61047a6106a5366004614b90565b611a80565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b610423611b3f565b6104a26106e7366004614b0d565b611bac565b6104a26106fa366004614acb565b611c3f565b6103bc611cc9565b6103f661071536600461491d565b611d36565b6103f6610715366004614b38565b6103bc611d41565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc7f000000000000000000000000000000000000000000000000000000000000000081565b6103f66104cd366004614b38565b6103bc6107c1366004614bce565b611dae565b6107ce600681565b6040516103c69190614bfa565b6104a26107e9366004614a2e565b611e2e565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b61047a611fa8565b6103bc61082b366004614c3b565b61201b565b6103bc61209c565b6103bc610846366004614b38565b612109565b6104a2610859366004614a53565b61217f565b6104a261086c366004614c69565b6123e0565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc61245a565b6103f66124c7565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc612558565b6040517f4903b0d10000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff821660048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634903b0d1906024015b602060405180830381865afa9250505080156109b1575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526109ae91810190614c8d565b60015b610a68576040517f065a80d8000000000000000000000000000000000000000000000000000000008152600f83900b60048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063065a80d8906024015b602060405180830381865afa158015610a44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a689190614c8d565b92915050565b919050565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015610ae0573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b269190810190614d67565b905090565b6040517f07211ef7000000000000000000000000000000000000000000000000000000008152600f84810b600483015283900b6024820152604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906307211ef7906064015b602060405180830381865afa158015610bcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf09190614c8d565b90505b9392505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663140522886040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b269190614c8d565b610c936148ed565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166314f059796040518163ffffffff1660e01b8152600401606060405180830381865afa158015610cfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b269190614db8565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b60026000541415610e01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b60026000908155610e11836125c5565b9050610e1c816126d0565b505060016000555050565b60026000541415610e94576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610f25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f499190614e36565b90506000610f56856127ed565b90506000610f63856127ed565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529192506000918416906370a0823190602401602060405180830381865afa158015610fd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff99190614c8d565b90506001811115611127577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce800000061103f8784614e53565b6110499190614eb7565b604051600f8a810b602483015289900b60448201526064810184905260848101829052909150611124908690869086907fa6417ed6000000000000000000000000000000000000000000000000000000009060a4015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526001806128f7565b50505b505060016000555050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632081066c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6000610a68826125c5565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b60026000541415611287576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b60026000908155611297836125c5565b90506112a4838284612d6f565b5050600160005550565b6040517f3883e11900000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690633883e119906113259086908690600401614ef2565b602060405180830381865afa158015611342573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf39190614c8d565b600260005414156113d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b600260009081556113e3856125c5565b905060006113f0856125c5565b905061112782826000368080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525060019350915061301a9050565b61143f6148ed565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16634469e30e6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610cfe573d6000803e3d6000fd5b60026000541415611517576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b6002600090815561153d90600184358110916020860135821091604087013511906130e9565b50506001600055565b6040517f4903b0d1000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634903b0d19060240161095a565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635409491a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6040517f5e0d443f000000000000000000000000000000000000000000000000000000008152600f84810b600483015283900b6024820152604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635e0d443f90606401610baf565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166363543f066040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401610a27565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166376a2f0f06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b60026000541415611871576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611902573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119269190614e36565b90506000611933856125c5565b90506000611940856125c5565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529192506000918416906370a0823190602401602060405180830381865afa1580156119b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d69190614c8d565b90506001811115611127577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce8000000611a1c8784614e53565b611a269190614eb7565b604051600f8a810b602483015289900b60448201526064810184905260848101829052909150611124908690869086907f3df02124000000000000000000000000000000000000000000000000000000009060a40161109f565b611a886148ed565b6040517f85ca3c6f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906385ca3c6f90611afe90879087908790600401614f0a565b606060405180830381865afa158015611b1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf09190614db8565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610ae0573d6000803e3d6000fd5b60026000541415611c19576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b6002600090815561153d90600184358110916020860135821091604087013511906132c7565b60026000541415611cac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b60026000908155611cbc856127ed565b905060006113f0856127ed565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b4b577ad6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6000610a68826127ed565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb7b8b806040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6040517fcc2b27d700000000000000000000000000000000000000000000000000000000815260048101839052600f82900b60248201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063cc2b27d790604401611325565b60026000541415611e9b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b60026000908155611eab836125c5565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611f3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f5f9190614e36565b9050611f9b81837f0000000000000000000000000000000000000000000000000000000000000000611f92888a89613704565b600160006128f7565b5050600160005550505050565b611fb06148ed565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d96c7fce6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610cfe573d6000803e3d6000fd5b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063dd62ed3e90604401611325565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6040517fe2e7d264000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e2e7d26490602401610a27565b600260005414156121ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b600260009081556121fc836125c5565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa15801561228c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b09190614e36565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000918416906370a0823190602401602060405180830381865afa158015612322573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123469190614c8d565b905060018111156123d4577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce800000061238c8684614e53565b6123969190614eb7565b90506123d183857f00000000000000000000000000000000000000000000000000000000000000006123c98a8787613704565b6001806128f7565b50505b50506001600055505050565b6002600054141561244d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b600260005561153d613bc3565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f446c1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa158015612534573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b269190614e36565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fee3f7f96040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b600081600f0b600014156125f657507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6001141561262557507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6002141561265457507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6003141561268357507f00000000000000000000000000000000000000000000000000000000000000005b73ffffffffffffffffffffffffffffffffffffffff8116610a6e576040517fd1da79bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa15801561275d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127819190614e36565b90506127e8817f0000000000000000000000000000000000000000000000000000000000000000846000368080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525092508291506128f79050565b505050565b600081600f0b6000141561281e57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6001141561284d57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6002141561287c57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6003141561268357507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff8116610a6e576040517fd1da79bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606000803373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614612a60576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301528916906370a0823190602401602060405180830381865afa1580156129a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129c99190614c8d565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152919350908816906370a0823190602401602060405180830381865afa158015612a39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a5d9190614c8d565b90505b8415612b5c576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612b4357600080fd5b505af1158015612b57573d6000803e3d6000fd5b505050505b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a90612bf29033907f0000000000000000000000000000000000000000000000000000000000000000908b90600401614f31565b6000604051808303816000875af1158015612c11573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052612c579190810190614d67565b92508415612d55576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612d3c57600080fd5b505af1158015612d50573d6000803e3d6000fd5b505050505b612d6389898985858961403d565b50509695505050505050565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612dfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e209190614e36565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000917f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015612eb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ed69190614c8d565b90506001811115613013577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01613011827f0000000000000000000000000000000000000000000000000000000000000000867f1a4d01d200000000000000000000000000000000000000000000000000000000858a6b033b2e3c9fd0803ce8000000612f638b84614e53565b612f6d9190614eb7565b6040516024810193909352600f9190910b60448301526064820152608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152600060016128f7565b505b5050505050565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015260609060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa1580156130aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130ce9190614e36565b90506130de8188888888886128f7565b979650505050505050565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015613176573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061319a9190614e36565b90506131a88585858561429f565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561325957600080fd5b505af115801561326d573d6000803e3d6000fd5b505050506132b16000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061471592505050565b506132be8585858561429f565b61301381614813565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015613354573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133789190614e36565b9050841561344a576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561343157600080fd5b505af1158015613445573d6000803e3d6000fd5b505050505b831561351a576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561350157600080fd5b505af1158015613515573d6000803e3d6000fd5b505050505b82156135ea576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156135d157600080fd5b505af11580156135e5573d6000803e3d6000fd5b505050505b81156136ba576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156136a157600080fd5b505af11580156136b5573d6000803e3d6000fd5b505050505b6136fa6000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061471592505050565b5061301381614813565b60607f0000000000000000000000000000000000000000000000000000000000000000600214156138bd5783600f0b6000146137fa576040516000602482015260448101849052606481018390527f0b4c7e4d00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526138b6565b6040516024810184905260006044820152606481018390527f0b4c7e4d00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091525b9050610bf3565b7f0000000000000000000000000000000000000000000000000000000000000000600314156139d75783600f0b60001461398e5783600f0b60011461394557604051600060248201819052604482015260648101849052608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401613778565b604051600060248201819052604482018590526064820152608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401613778565b604051602481018490526000604482018190526064820152608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401613838565b7f000000000000000000000000000000000000000000000000000000000000000060041415613b615783600f0b600014613b115783600f0b600114613ac15783600f0b600214613a71576040516000602482018190526044820181905260648201526084810184905260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613778565b6040516000602482018190526044820181905260648201859052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613778565b6040516000602482018190526044820185905260648201819052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613778565b6040516024810184905260006044820181905260648201819052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613838565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f496e636f7272656374206e436f696e73000000000000000000000000000000006044820152606401610df8565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015613c50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c749190614e36565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301529192507f0000000000000000000000000000000000000000000000000000000000000000909116906351e3f16090604401600060405180830381600087803b158015613d2a57600080fd5b505af1158015613d3e573d6000803e3d6000fd5b50506040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f00000000000000000000000000000000000000000000000000000000000000001692506351e3f1609150604401600060405180830381600087803b158015613df357600080fd5b505af1158015613e07573d6000803e3d6000fd5b5050505060027f00000000000000000000000000000000000000000000000000000000000000001115613ff0576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015613ee557600080fd5b505af1158015613ef9573d6000803e3d6000fd5b5050505060037f00000000000000000000000000000000000000000000000000000000000000001115613ff0576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015613fd757600080fd5b505af1158015613feb573d6000803e3d6000fd5b505050505b6140306000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061471592505050565b5061403a81614813565b50565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461413e576040517f654a9eda00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528681166024830152858116604483015260648201859052608482018490527f0000000000000000000000000000000000000000000000000000000000000000169063654a9eda9060a401600060405180830381600087803b15801561412157600080fd5b505af1158015614135573d6000803e3d6000fd5b50505050613011565b80156141ee576040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015286811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b1580156141d557600080fd5b505af11580156141e9573d6000803e3d6000fd5b505050505b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015285811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561427f57600080fd5b505af1158015614293573d6000803e3d6000fd5b50505050505050505050565b83156143bb576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156143a257600080fd5b505af11580156143b6573d6000803e3d6000fd5b505050505b82156144d7576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156144be57600080fd5b505af11580156144d2573d6000803e3d6000fd5b505050505b81156145f3576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156145da57600080fd5b505af11580156145ee573d6000803e3d6000fd5b505050505b801561470f576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156146f657600080fd5b505af115801561470a573d6000803e3d6000fd5b505050505b50505050565b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815260609073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a906147ae9033907f0000000000000000000000000000000000000000000000000000000000000000908790600401614f31565b6000604051808303816000875af11580156147cd573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610a689190810190614d67565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461403a576040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b1580156148d957600080fd5b505af1158015613013573d6000803e3d6000fd5b60405180606001604052806003906020820280368337509192915050565b8035600f81900b8114610a6e57600080fd5b60006020828403121561492f57600080fd5b610bf38261490b565b60005b8381101561495357818101518382015260200161493b565b8381111561470f5750506000910152565b6000815180845261497c816020860160208601614938565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610bf36020830184614964565b6000806000606084860312156149d657600080fd5b6149df8461490b565b92506149ed6020850161490b565b9150604084013590509250925092565b60608101818360005b6003811015614a25578151835260209283019290910190600101614a06565b50505092915050565b600080600060608486031215614a4357600080fd5b833592506149ed6020850161490b565b60008060408385031215614a6657600080fd5b614a6f8361490b565b946020939093013593505050565b8060608101831015610a6857600080fd5b60008060808385031215614aa157600080fd5b614aab8484614a7d565b915060608301358015158114614ac057600080fd5b809150509250929050565b60008060008060808587031215614ae157600080fd5b614aea8561490b565b9350614af86020860161490b565b93969395505050506040820135916060013590565b60008060808385031215614b2057600080fd5b614b2a8484614a7d565b946060939093013593505050565b600060208284031215614b4a57600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461403a57600080fd5b600060208284031215614b8557600080fd5b8135610bf381614b51565b600080600060e08486031215614ba557600080fd5b614baf8585614a7d565b9250614bbe8560608601614a7d565b915060c084013590509250925092565b60008060408385031215614be157600080fd5b82359150614bf16020840161490b565b90509250929050565b6020810160118310614c35577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60008060408385031215614c4e57600080fd5b8235614c5981614b51565b91506020830135614ac081614b51565b60008060808385031215614c7c57600080fd5b82359150614bf18460208501614a7d565b600060208284031215614c9f57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff80841115614cf057614cf0614ca6565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715614d3657614d36614ca6565b81604052809350858152868686011115614d4f57600080fd5b614d5d866020830187614938565b5050509392505050565b600060208284031215614d7957600080fd5b815167ffffffffffffffff811115614d9057600080fd5b8201601f81018413614da157600080fd5b614db084825160208401614cd5565b949350505050565b600060608284031215614dca57600080fd5b82601f830112614dd957600080fd5b6040516060810181811067ffffffffffffffff82111715614dfc57614dfc614ca6565b604052806060840185811115614e1157600080fd5b845b81811015614e2b578051835260209283019201614e13565b509195945050505050565b600060208284031215614e4857600080fd5b8151610bf381614b51565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614eb2577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500290565b600082614eed577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60808101606084833791151560609190910152919050565b60e081016060858337606082016000815260608582375060c0919091019190915292915050565b600073ffffffffffffffffffffffffffffffffffffffff808616835280851660208401525060606040830152614f6a6060830184614964565b9594505050505056fea2646970667358221220efb951725986e76ee157ff0d00cd7b7a6a9b8a581784400c52be5c96516fe15064736f6c634300080a0033608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6118158061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c80638da5cb5b11610076578063d7aa2e351161005b578063d7aa2e35146101b3578063d914cd4b146101f2578063f2fde38b1461020557600080fd5b80638da5cb5b1461015d578063c488f7fe1461018557600080fd5b80634dee073b116100a75780634dee073b146101015780636f33547d14610142578063715018a61461015557600080fd5b80631bf64c41146100c357806345330666146100ec575b600080fd5b6100d66100d1366004611345565b610218565b6040516100e3919061142e565b60405180910390f35b6100ff6100fa366004611500565b6103fa565b005b61012f61010f366004611551565b6001602090815260009283526040808420909152908252902054600f0b81565b604051600f9190910b81526020016100e3565b6100d6610150366004611345565b6104d7565b6100ff610514565b60005460405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100e3565b61012f610193366004611551565b6002602090815260009283526040808420909152908252902054600f0b81565b6101e46101c136600461158a565b600360209081526000938452604080852082529284528284209052825290205481565b6040519081526020016100e3565b6100ff6102003660046115d5565b6105a1565b6100ff6102133660046115d5565b61089e565b6102556040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b61025e836109ce565b156103f45760008273ffffffffffffffffffffffffffffffffffffffff1663bd90df706040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102d491906115f2565b905060008060008060006102e88987610a67565b9450945094509450945082156103ed5760405180608001604052806103118b8b858a8a89610d8b565b8152602001828152602001600115158152602001600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008c6040015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008c6060015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481525096505b5050505050505b92915050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610480576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff93841660009081526003602090815260408083209587168084528683528184209590971683529381528382208390559384528281209481529390925290912055565b6103f46040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b60005473ffffffffffffffffffffffffffffffffffffffff163314610595576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610477565b61059f6000611045565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610622576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610477565b60005b6004600f82900b121561075d576040517f23746eb8000000000000000000000000000000000000000000000000000000008152600f82900b600482015273ffffffffffffffffffffffffffffffffffffffff8316906323746eb890602401602060405180830381865afa9250505080156106da575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526106d7918101906115f2565b60015b6106e35761075d565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160208181526040808420959094168352939093522080547fffffffffffffffffffffffffffffffff0000000000000000000000000000000016929091016fffffffffffffffffffffffffffffffff8116929092179055610625565b5060005b6004600f82900b121561089a576040517fb739953e000000000000000000000000000000000000000000000000000000008152600f82900b600482015273ffffffffffffffffffffffffffffffffffffffff83169063b739953e90602401602060405180830381865afa925050508015610816575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610813918101906115f2565b60015b61081e575050565b73ffffffffffffffffffffffffffffffffffffffff808416600090815260026020908152604080832094909316825292909252902080546fffffffffffffffffffffffffffffffff60018401167fffffffffffffffffffffffffffffffff00000000000000000000000000000000909116179055600101610761565b5050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461091f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610477565b73ffffffffffffffffffffffffffffffffffffffff81166109c2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610477565b6109cb81611045565b50565b600080825160028111156109e4576109e461160f565b1480610a025750600182516002811115610a0057610a0061160f565b145b15610a0f57506001919050565b600282516002811115610a2457610a2461160f565b1415610a3257506000919050565b81516040517ffe7995cf000000000000000000000000000000000000000000000000000000008152610477919060040161163e565b73ffffffffffffffffffffffffffffffffffffffff80821660009081526001602081815260408084208782015190951684529390529181205490918291829182918291610ab691600f0b6116ae565b73ffffffffffffffffffffffffffffffffffffffff808816600090815260016020818152604080842060608e0151909516845293905291902054919650610aff91600f0b6116ae565b9350600085600f0b12158015610b195750600084600f0b12155b15610bf85760a08701516040517f5e0d443f000000000000000000000000000000000000000000000000000000008152600f87810b600483015286900b6024820152604481019190915273ffffffffffffffffffffffffffffffffffffffff871690635e0d443f90606401602060405180830381865afa925050508015610bdb575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610bd89181019061171f565b60015b610be457610d81565b8015610bf257600193508091505b50610d81565b73ffffffffffffffffffffffffffffffffffffffff80871660009081526002602090815260408083208b82015190941683529290522054610c3e90600190600f0b6116ae565b73ffffffffffffffffffffffffffffffffffffffff808816600090815260026020908152604080832060608d015190941683529290522054909550610c8890600190600f0b6116ae565b9350600085600f0b12158015610ca25750600084600f0b12155b15610d815760a08701516040517f07211ef7000000000000000000000000000000000000000000000000000000008152600f87810b600483015286900b6024820152604481019190915273ffffffffffffffffffffffffffffffffffffffff8716906307211ef790606401602060405180830381865afa925050508015610d64575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610d619181019061171f565b60015b610d6d57610d81565b8015610d7f5760019350809150600192505b505b9295509295909350565b6040805180820190915260008152606060208201526060600188516002811115610db757610db761160f565b1415610eb75782610de8577f79bea66400000000000000000000000000000000000000000000000000000000610e0a565b7f1af4de83000000000000000000000000000000000000000000000000000000005b8585610e168b8a6110ba565b604051600f93840b60248201529190920b60448201526064810191909152608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505b600088516002811115610ecc57610ecc61160f565b1415610fcc5782610efd577f3df0212400000000000000000000000000000000000000000000000000000000610f1f565b7fa6417ed6000000000000000000000000000000000000000000000000000000005b8585610f2b8b8a6110f2565b604051600f93840b60248201529190920b60448201526064810191909152608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505b8051156110065760405180604001604052808873ffffffffffffffffffffffffffffffffffffffff1681526020018281525091505061103b565b87516040517ffe7995cf000000000000000000000000000000000000000000000000000000008152610477919060040161163e565b9695505050505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60a08201516000906110e1846110dc856b033b2e3c9fd0803ce8000000611738565b6110f2565b6110eb9190611775565b9392505050565b60008260e0015115611106575060006103f4565b60008351600281111561111b5761111b61160f565b148061113957506001835160028111156111375761113761160f565b145b1561116c5760c08301516127109061115190826117b0565b61115b9084611738565b6111659190611775565b90506103f4565b6002835160028111156111815761118161160f565b14156111a45760c0830151611198906127106117c7565b61115b61271084611738565b82516040517ffe7995cf000000000000000000000000000000000000000000000000000000008152610477919060040161163e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610100810167ffffffffffffffff8111828210171561122c5761122c6111d9565b60405290565b80356003811061124157600080fd5b919050565b73ffffffffffffffffffffffffffffffffffffffff811681146109cb57600080fd5b803561124181611246565b600082601f83011261128457600080fd5b8135602067ffffffffffffffff808311156112a1576112a16111d9565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f830116810181811084821117156112e4576112e46111d9565b60405293845285810183019383810192508785111561130257600080fd5b83870191505b8482101561132a57813561131b81611246565b83529183019190830190611308565b979650505050505050565b8035801515811461124157600080fd5b6000806040838503121561135857600080fd5b823567ffffffffffffffff8082111561137057600080fd5b90840190610100828703121561138557600080fd5b61138d611208565b61139683611232565b81526113a460208401611268565b60208201526113b560408401611268565b60408201526113c660608401611268565b60608201526080830135828111156113dd57600080fd5b6113e988828601611273565b60808301525060a083013560a082015260c083013560c082015261140f60e08401611335565b60e0820152935061142591505060208401611268565b90509250929050565b60006020808352835160808285015273ffffffffffffffffffffffffffffffffffffffff81511660a0850152818101519050604060c085015280518060e086015260005b8181101561148f5782810184015186820161010001528301611472565b818111156114a257600061010083880101525b50828601516040860152604086015192506114c1606086018415159052565b606095909501516080850152505050601f919091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016016101000190565b6000806000806080858703121561151657600080fd5b843561152181611246565b9350602085013561153181611246565b9250604085013561154181611246565b9396929550929360600135925050565b6000806040838503121561156457600080fd5b823561156f81611246565b9150602083013561157f81611246565b809150509250929050565b60008060006060848603121561159f57600080fd5b83356115aa81611246565b925060208401356115ba81611246565b915060408401356115ca81611246565b809150509250925092565b6000602082840312156115e757600080fd5b81356110eb81611246565b60006020828403121561160457600080fd5b81516110eb81611246565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160038310611679577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600081600f0b83600f0b60008112817fffffffffffffffffffffffffffffffff80000000000000000000000000000000018312811516156116f1576116f161167f565b816f7fffffffffffffffffffffffffffffff0183138116156117155761171561167f565b5090039392505050565b60006020828403121561173157600080fd5b5051919050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156117705761177061167f565b500290565b6000826117ab577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000828210156117c2576117c261167f565b500390565b600082198211156117da576117da61167f565b50019056fea2646970667358221220ed82995f9e9761ea7972d39ed0d8d0b378778cbba995315b16c90b49c74d2b7e64736f6c634300080a0033608060405234801561001057600080fd5b50611a3c806100206000396000f3fe6080604052600436106101a15760003560e01c806385f8c259116100e1578063baa2abde1161008a578063ded9382a11610064578063ded9382a14610424578063e8e3370014610451578063f305d7191461049a578063fb3bdb41146104b957600080fd5b8063baa2abde146103da578063c45a015514610382578063d06ca61f1461040457600080fd5b8063ad615dec116100bb578063ad615dec146101e9578063af2979eb1461039e578063b6f9de95146103c557600080fd5b806385f8c259146101e95780638803dbee14610362578063ad5c46481461038257600080fd5b806338ed17391161014e5780635b0d5984116101285780635b0d5984146102fb5780635c11d79514610326578063791ac947146103265780637ff36ab51461034957600080fd5b806338ed1739146102b95780634a25d94a146102175780635911fb9a146102d957600080fd5b80631f00ca741161017f5780631f00ca741461024b5780632195995c1461026b578063379b87ea1461029957600080fd5b806302751cec146101a6578063054d50d4146101e957806318cbafe514610217575b600080fd5b3480156101b257600080fd5b506101cf6101c13660046112b8565b600080965096945050505050565b604080519283526020830191909152015b60405180910390f35b3480156101f557600080fd5b50610209610204366004611310565b6104cc565b6040519081526020016101e0565b34801561022357600080fd5b5061023e610232366004611388565b60609695505050505050565b6040516101e091906113f8565b34801561025757600080fd5b5061023e61026636600461143c565b6104d6565b34801561027757600080fd5b506101cf6102863660046114aa565b6000809b509b9950505050505050505050565b3480156102a557600080fd5b506102096102b436600461154e565b610728565b3480156102c557600080fd5b5061023e6102d4366004611388565b6107c6565b3480156102e557600080fd5b506102f96102f4366004611581565b6109a6565b005b34801561030757600080fd5b506102096103163660046115bd565b60009a9950505050505050505050565b34801561033257600080fd5b506102f9610341366004611388565b505050505050565b61023e61035736600461164f565b606095945050505050565b34801561036e57600080fd5b5061023e61037d366004611388565b610a28565b34801561038e57600080fd5b50604051600081526020016101e0565b3480156103aa57600080fd5b506102096103b93660046112b8565b60009695505050505050565b6102f96103d336600461164f565b5050505050565b3480156103e657600080fd5b506101cf6103f53660046116b5565b60008097509795505050505050565b34801561041057600080fd5b5061023e61041f36600461143c565b610b7e565b34801561043057600080fd5b506101cf61043f3660046115bd565b6000809a509a98505050505050505050565b34801561045d57600080fd5b5061047f61046c36600461171f565b6000806000985098509895505050505050565b604080519384526020840192909252908201526060016101e0565b61047f6104a83660046112b8565b600080600096509650969350505050565b61023e6104c736600461164f565b610d65565b60005b9392505050565b60606002821015610548576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f496e636f72726563742070617468206c656e677468000000000000000000000060448201526064015b60405180910390fd5b8167ffffffffffffffff81111561056157610561611793565b60405190808252806020026020018201604052801561058a578160200160208202803683370190505b509050838161059a6001856117f1565b815181106105aa576105aa611808565b602090810291909101015260006105c26001846117f1565b90505b801561072057600061062885856105dd6001866117f1565b8181106105ec576105ec611808565b90506020020160208101906106019190611837565b86868581811061061357610613611808565b90506020020160208101906102b49190611837565b905080610691576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f556e69737761704d6f636b3a2052617465206973206e6f742073657475700000604482015260640161053f565b6103e5816b033b2e3c9fd0803ce80000008585815181106106b4576106b4611808565b60200260200101516106c69190611852565b6106d0919061188f565b6106dc906103e8611852565b6106e6919061188f565b836106f26001856117f1565b8151811061070257610702611808565b60209081029190910101525080610718816118ca565b9150506105c5565b509392505050565b73ffffffffffffffffffffffffffffffffffffffff80831660009081526020818152604080832093851683529290522054806107c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f546f6b656e2070616972206e6f7420666f756e64000000000000000000000000604482015260640161053f565b92915050565b60608142811015610833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015260640161053f565b6000610840898888610b7e565b90506000816108506001896117f1565b8151811061086057610860611808565b60200260200101519050888110156108fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f556e69737761705632526f757465723a20494e53554646494349454e545f4f5560448201527f545055545f414d4f554e54000000000000000000000000000000000000000000606482015260840161053f565b61094633308c8b8b600081811061091357610913611808565b90506020020160208101906109289190611837565b73ffffffffffffffffffffffffffffffffffffffff16929190610d94565b61099986828a8a6109586001826117f1565b81811061096757610967611808565b905060200201602081019061097c9190611837565b73ffffffffffffffffffffffffffffffffffffffff169190610e76565b5098975050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152602081815260408083209386168352929052208190556109ef6b033b2e3c9fd0803ce800000082610ed1565b73ffffffffffffffffffffffffffffffffffffffff92831660009081526020818152604080832096909516825294909452919092205550565b60608142811015610a95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015260640161053f565b6000610aa28988886104d6565b9050600081600081518110610ab957610ab9611808565b6020026020010151905088811115610b53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f556e69737761705632526f757465723a204558434553534956455f494e50555460448201527f5f414d4f554e5400000000000000000000000000000000000000000000000000606482015260840161053f565b610b6c3330838b8b600081811061091357610913611808565b610999868b8a8a6109586001826117f1565b60606002821015610beb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f496e636f72726563742070617468206c656e6774680000000000000000000000604482015260640161053f565b8167ffffffffffffffff811115610c0457610c04611793565b604051908082528060200260200182016040528015610c2d578160200160208202803683370190505b5090508381600081518110610c4457610c44611808565b602090810291909101015260015b82811015610720576000610c6c85856105dd6001866117f1565b905080610cd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f556e69737761704d6f636b3a2052617465206973206e6f742073657475700000604482015260640161053f565b6103e86103e56b033b2e3c9fd0803ce80000008386610cf56001886117f1565b81518110610d0557610d05611808565b6020026020010151610d179190611852565b610d21919061188f565b610d2b9190611852565b610d35919061188f565b838381518110610d4757610d47611808565b60209081029190910101525080610d5d816118ff565b915050610c52565b604080516001808252818301909252606091600091906020808301908036833701905050979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052610e709085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611037565b50505050565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610ecc9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401610dee565b505050565b60408051808201909152600281527f4d33000000000000000000000000000000000000000000000000000000000000602082015260009082610f40576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053f9190611964565b506000610f4e60028461188f565b90506b033b2e3c9fd0803ce8000000610f87827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6117f1565b610f91919061188f565b8411156040518060400160405280600281526020017f4d3100000000000000000000000000000000000000000000000000000000000081525090611002576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053f9190611964565b50828161101b6b033b2e3c9fd0803ce800000087611852565b61102591906119b5565b61102f919061188f565b949350505050565b6000611099826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166111439092919063ffffffff16565b805190915015610ecc57808060200190518101906110b791906119cd565b610ecc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161053f565b606061102f848460008585843b6111b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161053f565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516111df91906119ea565b60006040518083038185875af1925050503d806000811461121c576040519150601f19603f3d011682016040523d82523d6000602084013e611221565b606091505b509150915061123182828661123c565b979650505050505050565b6060831561124b5750816104cf565b82511561125b5782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053f9190611964565b803573ffffffffffffffffffffffffffffffffffffffff811681146112b357600080fd5b919050565b60008060008060008060c087890312156112d157600080fd5b6112da8761128f565b95506020870135945060408701359350606087013592506112fd6080880161128f565b915060a087013590509295509295509295565b60008060006060848603121561132557600080fd5b505081359360208301359350604090920135919050565b60008083601f84011261134e57600080fd5b50813567ffffffffffffffff81111561136657600080fd5b6020830191508360208260051b850101111561138157600080fd5b9250929050565b60008060008060008060a087890312156113a157600080fd5b8635955060208701359450604087013567ffffffffffffffff8111156113c657600080fd5b6113d289828a0161133c565b90955093506113e590506060880161128f565b9150608087013590509295509295509295565b6020808252825182820181905260009190848201906040850190845b8181101561143057835183529284019291840191600101611414565b50909695505050505050565b60008060006040848603121561145157600080fd5b83359250602084013567ffffffffffffffff81111561146f57600080fd5b61147b8682870161133c565b9497909650939450505050565b801515811461149657600080fd5b50565b803560ff811681146112b357600080fd5b60008060008060008060008060008060006101608c8e0312156114cc57600080fd5b6114d58c61128f565b9a506114e360208d0161128f565b995060408c0135985060608c0135975060808c0135965061150660a08d0161128f565b955060c08c0135945060e08c013561151d81611488565b935061152c6101008d01611499565b92506101208c013591506101408c013590509295989b509295989b9093969950565b6000806040838503121561156157600080fd5b61156a8361128f565b91506115786020840161128f565b90509250929050565b60008060006060848603121561159657600080fd5b61159f8461128f565b92506115ad6020850161128f565b9150604084013590509250925092565b6000806000806000806000806000806101408b8d0312156115dd57600080fd5b6115e68b61128f565b995060208b0135985060408b0135975060608b0135965061160960808c0161128f565b955060a08b0135945060c08b013561162081611488565b935061162e60e08c01611499565b92506101008b013591506101208b013590509295989b9194979a5092959850565b60008060008060006080868803121561166757600080fd5b85359450602086013567ffffffffffffffff81111561168557600080fd5b6116918882890161133c565b90955093506116a490506040870161128f565b949793965091946060013592915050565b600080600080600080600060e0888a0312156116d057600080fd5b6116d98861128f565b96506116e76020890161128f565b955060408801359450606088013593506080880135925061170a60a0890161128f565b915060c0880135905092959891949750929550565b600080600080600080600080610100898b03121561173c57600080fd5b6117458961128f565b975061175360208a0161128f565b965060408901359550606089013594506080890135935060a0890135925061177d60c08a0161128f565b915060e089013590509295985092959890939650565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015611803576118036117c2565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561184957600080fd5b6104cf8261128f565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561188a5761188a6117c2565b500290565b6000826118c5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000816118d9576118d96117c2565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611931576119316117c2565b5060010190565b60005b8381101561195357818101518382015260200161193b565b83811115610e705750506000910152565b6020815260008251806020840152611983816040850160208701611938565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b600082198211156119c8576119c86117c2565b500190565b6000602082840312156119df57600080fd5b81516104cf81611488565b600082516119fc818460208701611938565b919091019291505056fea2646970667358221220c83ba4b7a780d6bcd42d58ce63ee43d73cb764a70cd33e8cc91609b9554a872e64736f6c634300080a003360e06040523480156200001157600080fd5b506040516200251b3803806200251b833981016040819052620000349162000121565b81816001600160a01b03821615806200005457506001600160a01b038116155b156200007357604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038216608081905260408051632f7a188160e01b81529051632f7a1881916004808201926020929091908290030181865afa158015620000be573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e4919062000159565b6001600160a01b0390811660a0521660c05250506001600055506200017e565b80516001600160a01b03811681146200011c57600080fd5b919050565b600080604083850312156200013557600080fd5b620001408362000104565b9150620001506020840162000104565b90509250929050565b6000602082840312156200016c57600080fd5b620001778262000104565b9392505050565b60805160a05160c0516122da620002416000396000818161045e015281816106040152818161070101528181610aa401528181610c9c01528181610d6e015281816110dd01528181611186015281816113a8015281816114c701526115a10152600081816102b40152818161121301526116860152600081816104b20152818161084601528181610b8c01528181610e56015281816113fe01528181611498015281816115f70152818161170e015281816117c2015261186c01526122da6000f3fe6080604052600436106101cd5760003560e01c8063ad5c4648116100f7578063c12c21c011610095578063ded9382a11610064578063ded9382a1461052b578063e8e3370014610546578063f305d71914610581578063fb3bdb411461038557600080fd5b8063c12c21c0146104a0578063c45a0155146104d4578063ce30bbdb146104e9578063d06ca61f1461050b57600080fd5b8063b6f9de95116100d1578063b6f9de9514610423578063baa2abde14610431578063bd90df701461044c578063bdbeaa311461048057600080fd5b8063ad5c4648146103d3578063ad615dec146103e8578063af2979eb1461040857600080fd5b80634a25d94a1161016f578063791ac9471161013e578063791ac9471461033b5780637ff36ab51461038557806385f8c259146103935780638803dbee146103b357600080fd5b80634a25d94a1461023a5780635b0d59841461031b5780635c11d7951461033b57806378aa73a41461035d57600080fd5b80631f00ca74116101ab5780631f00ca74146102675780632195995c146102875780632f7a1881146102a257806338ed1739146102fb57600080fd5b806302751cec146101d2578063054d50d41461020c57806318cbafe51461023a575b600080fd5b3480156101de57600080fd5b506101f26101ed3660046118f6565b61058f565b604080519283526020830191909152015b60405180910390f35b34801561021857600080fd5b5061022c610227366004611954565b6105c4565b604051908152602001610203565b34801561024657600080fd5b5061025a6102553660046119cc565b61068d565b6040516102039190611a3f565b34801561027357600080fd5b5061025a610282366004611a83565b6106c1565b34801561029357600080fd5b506101f26101ed366004611af5565b3480156102ae57600080fd5b506102d67f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610203565b34801561030757600080fd5b5061025a6103163660046119cc565b61079d565b34801561032757600080fd5b5061022c610336366004611b9d565b6109fe565b34801561034757600080fd5b5061035b6103563660046119cc565b610a32565b005b34801561036957600080fd5b50610372600281565b60405161ffff9091168152602001610203565b61025a610255366004611c31565b34801561039f57600080fd5b5061022c6103ae366004611954565b610a64565b3480156103bf57600080fd5b5061025a6103ce3660046119cc565b610ae8565b3480156103df57600080fd5b506102d6610c98565b3480156103f457600080fd5b5061022c610403366004611954565b610d2e565b34801561041457600080fd5b5061022c6103363660046118f6565b61035b610356366004611c31565b34801561043d57600080fd5b506101f26101ed366004611c98565b34801561045857600080fd5b506102d67f000000000000000000000000000000000000000000000000000000000000000081565b34801561048c57600080fd5b5061025a61049b366004611d0a565b610db2565b3480156104ac57600080fd5b506102d67f000000000000000000000000000000000000000000000000000000000000000081565b3480156104e057600080fd5b506102d66110d9565b3480156104f557600080fd5b506104fe600181565b6040516102039190611d5d565b34801561051757600080fd5b5061025a610526366004611a83565b611146565b34801561053757600080fd5b506101f26101ed366004611b9d565b34801561055257600080fd5b50610566610561366004611d9e565b6111bf565b60408051938452602084019290925290820152606001610203565b6105666105613660046118f6565b6000806040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f054d50d40000000000000000000000000000000000000000000000000000000081526004810184905260248101839052604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063054d50d4906064015b602060405180830381865afa158015610661573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106859190611e1a565b949350505050565b60606040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1f00ca7400000000000000000000000000000000000000000000000000000000815260609073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690631f00ca749061073a90879087908790600401611e89565b600060405180830381865afa158015610757573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526106859190810190611f2a565b606060026000541415610811576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156108a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c69190611fd0565b90506000868660008181106108dd576108dd611ff4565b90506020020160208101906108f29190612023565b90506000878761090360018261206f565b81811061091257610912611ff4565b90506020020160208101906109279190612023565b90506109d88383836338ed173960e01b8e8e8e8e8b8e60405160240161095296959493929190612086565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152600160006111f6565b8060200190518101906109eb9190611f2a565b60016000559a9950505050505050505050565b60006040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f85f8c2590000000000000000000000000000000000000000000000000000000081526004810184905260248101839052604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906385f8c25990606401610644565b606060026000541415610b57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610808565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610be8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0c9190611fd0565b9050600086866000818110610c2357610c23611ff4565b9050602002016020810190610c389190612023565b905060008787610c4960018261206f565b818110610c5857610c58611ff4565b9050602002016020810190610c6d9190612023565b90506109d8838383638803dbee60e01b8e8e8e8e8b8e60405160240161095296959493929190612086565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d299190611fd0565b905090565b6040517fad615dec0000000000000000000000000000000000000000000000000000000081526004810184905260248101839052604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ad615dec90606401610644565b606060026000541415610e21576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610808565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610eb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed69190611fd0565b9050600085856000818110610eed57610eed611ff4565b9050602002016020810190610f029190612023565b905060008686610f1360018261206f565b818110610f2257610f22611ff4565b9050602002016020810190610f379190612023565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529192506000918416906370a0823190602401602060405180830381865afa158015610fa9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fcd9190611e1a565b905060018111156110c7578080600190039150506110b18484846338ed173960e01b856b033b2e3c9fd0803ce80000008f8861100991906120d1565b611013919061210e565b8e8e8c8f60405160240161102c96959493929190612086565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526001806111f6565b8060200190518101906110c49190611f2a565b94505b50506001600055509095945050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d05573d6000803e3d6000fd5b6040517fd06ca61f00000000000000000000000000000000000000000000000000000000815260609073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063d06ca61f9061073a90879087908790600401611e89565b60008060006040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606000803373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461135f576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301528916906370a0823190602401602060405180830381865afa1580156112a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c89190611e1a565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152919350908816906370a0823190602401602060405180830381865afa158015611338573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135c9190611e1a565b90505b841561145b576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561144257600080fd5b505af1158015611456573d6000803e3d6000fd5b505050505b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a906114f19033907f0000000000000000000000000000000000000000000000000000000000000000908b90600401612179565b6000604051808303816000875af1158015611510573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261155691908101906121f2565b92508415611654576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561163b57600080fd5b505af115801561164f573d6000803e3d6000fd5b505050505b61166289898985858961166e565b50509695505050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461176f576040517f654a9eda00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528681166024830152858116604483015260648201859052608482018490527f0000000000000000000000000000000000000000000000000000000000000000169063654a9eda9060a401600060405180830381600087803b15801561175257600080fd5b505af1158015611766573d6000803e3d6000fd5b505050506118c9565b801561181f576040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015286811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b15801561180657600080fd5b505af115801561181a573d6000803e3d6000fd5b505050505b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015285811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156118b057600080fd5b505af11580156118c4573d6000803e3d6000fd5b505050505b505050505050565b73ffffffffffffffffffffffffffffffffffffffff811681146118f357600080fd5b50565b60008060008060008060c0878903121561190f57600080fd5b863561191a816118d1565b9550602087013594506040870135935060608701359250608087013561193f816118d1565b8092505060a087013590509295509295509295565b60008060006060848603121561196957600080fd5b505081359360208301359350604090920135919050565b60008083601f84011261199257600080fd5b50813567ffffffffffffffff8111156119aa57600080fd5b6020830191508360208260051b85010111156119c557600080fd5b9250929050565b60008060008060008060a087890312156119e557600080fd5b8635955060208701359450604087013567ffffffffffffffff811115611a0a57600080fd5b611a1689828a01611980565b9095509350506060870135611a2a816118d1565b80925050608087013590509295509295509295565b6020808252825182820181905260009190848201906040850190845b81811015611a7757835183529284019291840191600101611a5b565b50909695505050505050565b600080600060408486031215611a9857600080fd5b83359250602084013567ffffffffffffffff811115611ab657600080fd5b611ac286828701611980565b9497909650939450505050565b80358015158114611adf57600080fd5b919050565b803560ff81168114611adf57600080fd5b60008060008060008060008060008060006101608c8e031215611b1757600080fd5b8b35611b22816118d1565b9a5060208c0135611b32816118d1565b995060408c0135985060608c0135975060808c0135965060a08c0135611b57816118d1565b955060c08c01359450611b6c60e08d01611acf565b9350611b7b6101008d01611ae4565b92506101208c013591506101408c013590509295989b509295989b9093969950565b6000806000806000806000806000806101408b8d031215611bbd57600080fd5b8a35611bc8816118d1565b995060208b0135985060408b0135975060608b0135965060808b0135611bed816118d1565b955060a08b01359450611c0260c08c01611acf565b9350611c1060e08c01611ae4565b92506101008b013591506101208b013590509295989b9194979a5092959850565b600080600080600060808688031215611c4957600080fd5b85359450602086013567ffffffffffffffff811115611c6757600080fd5b611c7388828901611980565b9095509350506040860135611c87816118d1565b949793965091946060013592915050565b600080600080600080600060e0888a031215611cb357600080fd5b8735611cbe816118d1565b96506020880135611cce816118d1565b955060408801359450606088013593506080880135925060a0880135611cf3816118d1565b8092505060c0880135905092959891949750929550565b60008060008060608587031215611d2057600080fd5b84359350602085013567ffffffffffffffff811115611d3e57600080fd5b611d4a87828801611980565b9598909750949560400135949350505050565b6020810160118310611d98577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b600080600080600080600080610100898b031215611dbb57600080fd5b8835611dc6816118d1565b97506020890135611dd6816118d1565b965060408901359550606089013594506080890135935060a0890135925060c0890135611e02816118d1565b8092505060e089013590509295985092959890939650565b600060208284031215611e2c57600080fd5b5051919050565b8183526000602080850194508260005b85811015611e7e578135611e56816118d1565b73ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101611e43565b509495945050505050565b838152604060208201526000611ea3604083018486611e33565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611f2257611f22611eac565b604052919050565b60006020808385031215611f3d57600080fd5b825167ffffffffffffffff80821115611f5557600080fd5b818501915085601f830112611f6957600080fd5b815181811115611f7b57611f7b611eac565b8060051b9150611f8c848301611edb565b8181529183018401918481019088841115611fa657600080fd5b938501935b83851015611fc457845182529385019390850190611fab565b98975050505050505050565b600060208284031215611fe257600080fd5b8151611fed816118d1565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561203557600080fd5b8135611fed816118d1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561208157612081612040565b500390565b86815285602082015260a0604082015260006120a660a083018688611e33565b73ffffffffffffffffffffffffffffffffffffffff9490941660608301525060800152949350505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561210957612109612040565b500290565b600082612144577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b8381101561216457818101518382015260200161214c565b83811115612173576000848401525b50505050565b600073ffffffffffffffffffffffffffffffffffffffff80861683528085166020840152506060604083015282518060608401526121be816080850160208701612149565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01691909101608001949350505050565b60006020828403121561220457600080fd5b815167ffffffffffffffff8082111561221c57600080fd5b818401915084601f83011261223057600080fd5b81518181111561224257612242611eac565b61227360207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611edb565b915080825285602082850101111561228a57600080fd5b61229b816020840160208601612149565b5094935050505056fea2646970667358221220eb17abe05eeba3a20acf423d9c0b916f7c22eba6424cd918d18ad2a760eea1ba64736f6c634300080a0033608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611a018061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c8063715018a61161005b578063715018a6146100f45780638da5cb5b146100fc578063d7aa2e3514610124578063f2fde38b1461015557600080fd5b80631bf64c411461008d57806345330666146100b657806354fd4d50146100cb5780636f33547d146100e1575b600080fd5b6100a061009b366004611436565b610168565b6040516100ad919061158a565b60405180910390f35b6100c96100c43660046115f9565b61027d565b005b6100d3600281565b6040519081526020016100ad565b6100a06100ef366004611436565b61035a565b6100c9610514565b60005460405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100ad565b6100d361013236600461164a565b600160209081526000938452604080852082529284528284209052825290205481565b6100c9610163366004611695565b6105a1565b6101a56040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b6040805160028082526060820183526000926020830190803683370190505090508360400151816000815181106101de576101de6116b9565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050836060015181600181518110610230576102306116b9565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506102758484836106d1565b949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610303576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff93841660009081526001602090815260408083209587168084528683528184209590971683529381528382208390559384528281209481529390925290912055565b6103976040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b60808381015151604080516003808252938101909152909160009190602082016060803683370190505090508460400151816000815181106103db576103db6116b9565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505084606001518160028151811061042d5761042d6116b9565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060005b8281101561050b5785608001518181518110610488576104886116b9565b6020026020010151826001815181106104a3576104a36116b9565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060006104ea8787856106d1565b90506104f98188876000610aa7565b15610502578094505b5060010161046a565b50505092915050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610595576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102fa565b61059f6000610ac3565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610622576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102fa565b73ffffffffffffffffffffffffffffffffffffffff81166106c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102fa565b6106ce81610ac3565b50565b61070e6040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b600061071985610b38565b1561080a5760a08501516040517fd06ca61f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86169163d06ca61f9161077691908790600401611739565b600060405180830381865afa9250505080156107d257506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526107cf9190810190611752565b60015b6107db576108e6565b80600182516107ea9190611812565b815181106107fa576107fa6116b9565b60200260200101519150506108e6565b60a08501516040517f1f00ca7400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff861691631f00ca749161086291908790600401611739565b600060405180830381865afa9250505080156108be57506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108bb9190810190611752565b60015b6108c7576108e6565b806000815181106108da576108da6116b9565b60200260200101519150505b8015610a9f57602082018190526001604083015261090685858584610bd1565b826000018190525060008473ffffffffffffffffffffffffffffffffffffffff1663bd90df706040518163ffffffff1660e01b8152600401602060405180830381865afa15801561095b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097f9190611829565b90506000600185516109919190611812565b905060005b81811015610a9b5773ffffffffffffffffffffffffffffffffffffffff8316600090815260016020526040812087519091908890849081106109da576109da6116b9565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600087836001610a2c9190611846565b81518110610a3c57610a3c6116b9565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205485606001818151610a909190611846565b905250600101610996565b5050505b509392505050565b6000610aba858585866060015186610e3c565b95945050505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008082516002811115610b4e57610b4e61185e565b1480610b6c5750600182516002811115610b6a57610b6a61185e565b145b15610b7957506001919050565b600282516002811115610b8e57610b8e61185e565b1415610b9c57506000919050565b81516040517ffe7995cf0000000000000000000000000000000000000000000000000000000081526102fa919060040161188d565b604080518082019091526000815260606020820152600185516002811115610bfb57610bfb61185e565b1415610cf8576040805180820190915273ffffffffffffffffffffffffffffffffffffffff85168152602081017fbdbeaa3100000000000000000000000000000000000000000000000000000000610c538886610f56565b86610c6042610e10611846565b604051602401610c72939291906118ce565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290529050610275565b600085516002811115610d0d57610d0d61185e565b1415610d93576040805180820190915273ffffffffffffffffffffffffffffffffffffffff8516815260a086015160208201907f38ed17390000000000000000000000000000000000000000000000000000000090610d6c8987610f90565b60208a01518890610d7f42610e10611846565b604051602401610c729594939291906118f7565b600285516002811115610da857610da861185e565b1415610e07576040805180820190915273ffffffffffffffffffffffffffffffffffffffff8516815260a086015160208201907f8803dbee0000000000000000000000000000000000000000000000000000000090610d6c8987610f90565b84516040517ffe7995cf0000000000000000000000000000000000000000000000000000000081526102fa919060040161188d565b60008560400151610e4f57506000610aba565b8360400151610e6057506001610aba565b6000610ebd8688602001516b033b2e3c9fd0803ce8000000868b60600151610e889190611940565b610e92919061197d565b60208901516b033b2e3c9fd0803ce8000000610eae898b611940565b610eb8919061197d565b611077565b9050600086516002811115610ed457610ed461185e565b1480610ef25750600186516002811115610ef057610ef061185e565b145b15610efe579050610aba565b600286516002811115610f1357610f1361185e565b1415610f2157159050610aba565b85516040517ffe7995cf0000000000000000000000000000000000000000000000000000000081526102fa919060040161188d565b60a0820151600090610f7d84610f78856b033b2e3c9fd0803ce8000000611940565b610f90565b610f87919061197d565b90505b92915050565b60008260e0015115610fa457506000610f8a565b600083516002811115610fb957610fb961185e565b1480610fd75750600183516002811115610fd557610fd561185e565b145b1561100a5760c083015161271090610fef9082611812565b610ff99084611940565b611003919061197d565b9050610f8a565b60028351600281111561101f5761101f61185e565b14156110425760c083015161103690612710611846565b610ff961271084611940565b82516040517ffe7995cf0000000000000000000000000000000000000000000000000000000081526102fa919060040161188d565b60006110b76040518060400160405280600c81526020017f414141202d20616d6f756e740000000000000000000000000000000000000000815250611168565b6110c0856111f7565b6110c9846111f7565b6110d2836111f7565b6110db826111f7565b6110ed6110e88587611812565b6111f7565b6110fa6110e88385611812565b61110386610b38565b611124576111118284611846565b61111b8587611846565b10159050610aba565b8385101580156111345750818310155b1561114d576111438284611812565b61111b8587611812565b83851061115b57600161115e565b60005b9695505050505050565b6106ce8160405160240161117c91906119b8565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f41304fac00000000000000000000000000000000000000000000000000000000179052611284565b6106ce8160405160240161120d91815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff5b1bba9000000000000000000000000000000000000000000000000000000001790525b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610100810167ffffffffffffffff811182821017156112f8576112f86112a5565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611345576113456112a5565b604052919050565b80356003811061135c57600080fd5b919050565b73ffffffffffffffffffffffffffffffffffffffff811681146106ce57600080fd5b803561135c81611361565b600067ffffffffffffffff8211156113a8576113a86112a5565b5060051b60200190565b600082601f8301126113c357600080fd5b813560206113d86113d38361138e565b6112fe565b82815260059290921b840181019181810190868411156113f757600080fd5b8286015b8481101561141b57803561140e81611361565b83529183019183016113fb565b509695505050505050565b8035801515811461135c57600080fd5b6000806040838503121561144957600080fd5b823567ffffffffffffffff8082111561146157600080fd5b90840190610100828703121561147657600080fd5b61147e6112d4565b6114878361134d565b815261149560208401611383565b60208201526114a660408401611383565b60408201526114b760608401611383565b60608201526080830135828111156114ce57600080fd5b6114da888286016113b2565b60808301525060a083013560a082015260c083013560c082015261150060e08401611426565b60e0820152935061151691505060208401611383565b90509250929050565b6000815180845260005b8181101561154557602081850181015186830182015201611529565b81811115611557576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208082528251608083830152805173ffffffffffffffffffffffffffffffffffffffff1660a08401520151604060c08301526000906115cd60e084018261151f565b905060208401516040840152604084015115156060840152606084015160808401528091505092915050565b6000806000806080858703121561160f57600080fd5b843561161a81611361565b9350602085013561162a81611361565b9250604085013561163a81611361565b9396929550929360600135925050565b60008060006060848603121561165f57600080fd5b833561166a81611361565b9250602084013561167a81611361565b9150604084013561168a81611361565b809150509250925092565b6000602082840312156116a757600080fd5b81356116b281611361565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081518084526020808501945080840160005b8381101561172e57815173ffffffffffffffffffffffffffffffffffffffff16875295820195908201906001016116fc565b509495945050505050565b82815260406020820152600061027560408301846116e8565b6000602080838503121561176557600080fd5b825167ffffffffffffffff81111561177c57600080fd5b8301601f8101851361178d57600080fd5b805161179b6113d38261138e565b81815260059190911b820183019083810190878311156117ba57600080fd5b928401925b828410156117d8578351825292840192908401906117bf565b979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015611824576118246117e3565b500390565b60006020828403121561183b57600080fd5b81516116b281611361565b60008219821115611859576118596117e3565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60208101600383106118c8577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b8381526060602082015260006118e760608301856116e8565b9050826040830152949350505050565b85815284602082015260a06040820152600061191660a08301866116e8565b73ffffffffffffffffffffffffffffffffffffffff94909416606083015250608001529392505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611978576119786117e3565b500290565b6000826119b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b602081526000610f87602083018461151f56fea2646970667358221220042a62b4d425a2205fa828887bf063a55ef88bc4c19cee1e98235c23b32ccdf764736f6c634300080a003360806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d00011790553480156200003a57600080fd5b506040805161018081019091526000908060c081018060018152604080518082018252600381526244414960e81b6020828101919091528301526012908201526305f5e100606082015260800160018152602001600081525081526020016040518060c001604052806002600a811115620000b957620000b962000b78565b815260408051808201825260048152635553444360e01b6020828101919091528301526006908201526305f5e100606082015260800160018152602001600081525081526020016040518060c001604052806003600a81111562000121576200012162000b78565b815260408051808201825260048152630ae8aa8960e31b602082810191909152830152601290820152644a817c8000606082015260800160028152602001600081525081526020016040518060c001604052806004600a8111156200018a576200018a62000b78565b815260408051808201825260048152634c494e4b60e01b6020828101919091528301526012908201526359682f00606082015260800160018152602001600081525081526020016040518060c001604052806005600a811115620001f257620001f262000b78565b815260408051808201825260048152631554d11560e21b602082810191909152830152601290820152633b023380606082015260800160018152602001600081525081526020016040518060c001604052806006600a8111156200025a576200025a62000b78565b815260408051808201825260058152640e6e88aa8960db1b602082810191909152830152601290820152644cd588640060608201526080016003815260200160009052905260408051610140810190915290915060009080608081018060078152602001604051806040016040528060048152602001636344414960e01b8152508152602001601260ff1681526020016305f5e100815260200160048081111562000309576200030962000b78565b8152602001600181525081526020016040518060c001604052806008600a81111562000339576200033962000b78565b81526040805180820182526005815264635553444360d81b6020828101919091528301526006908201526305f5e100606082015260800160048152602001600281525081526020016040518060c001604052806009600a811115620003a257620003a262000b78565b8152604080518082018252600581526418d554d11560da1b602082810191909152830152601290820152633b023380606082015260800160048152602001600581525081526020016040518060c00160405280600a808111156200040a576200040a62000b78565b81526040805180820182526005815264634c494e4b60d81b6020828101919091528301526012908201526359682f00606082015260800160048152602001600490529052905060005b600681101562000496576200048183826006811062000476576200047662000b8e565b6020020151620004db565b806200048d8162000ba4565b91505062000453565b5060005b6004811015620004d257620004bd82826004811062000476576200047662000b8e565b80620004c98162000ba4565b9150506200049a565b50505062000d14565b6000600282608001516004811115620004f857620004f862000b78565b14156200054e576040516200050d9062000a8c565b604051809103906000f0801580156200052a573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b03831617905590506200071e565b60038260800151600481111562000569576200056962000b78565b1415620005a4576040516200057e9062000a9a565b604051809103906000f0801580156200059b573d6000803e3d6000fd5b5090506200071e565b600182608001516004811115620005bf57620005bf62000b78565b1415620005f157816020015182602001518360400151604051620005e39062000aa8565b6200057e9392919062000c1e565b6004826080015160048111156200060c576200060c62000b78565b1415620006be576000600260008460a00151600a81111562000632576200063262000b78565b600a81111562000646576200064662000b78565b815260200190815260200160002060009054906101000a90046001600160a01b0316905082602001518360200151846040015183604051620006889062000ab6565b62000697949392919062000c5b565b604051809103906000f080158015620006b4573d6000803e3d6000fd5b509150506200071e565b60405162461bcd60e51b815260206004820152602b60248201527f74657374546f6b656e53756974653a204372656174696e6720756e6b6e6f776e60448201526a20746f6b656e207479706560a81b606482015260840160405180910390fd5b60005460208301516040516318caf8e360e31b8152620100009092046001600160a01b03169163c657c718916200075b9185919060040162000ca9565b600060405180830381600087803b1580156200077657600080fd5b505af11580156200078b573d6000803e3d6000fd5b50505050600082606001516008604051620007a69062000ac4565b91825260ff166020820152604001604051809103906000f080158015620007d1573d6000803e3d6000fd5b50905081600260008560000151600a811115620007f257620007f262000b78565b600a81111562000806576200080662000b78565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055508260600151600560008560000151600a8111156200085a576200085a62000b78565b600a8111156200086e576200086e62000b78565b8152602080820192909252604090810160009081209390935585516001600160a01b03861684526008909252909120805460ff1916600183600a811115620008ba57620008ba62000b78565b02179055508260800151600360008560000151600a811115620008e157620008e162000b78565b600a811115620008f557620008f562000b78565b81526020810191909152604001600020805460ff1916600183600481111562000922576200092262000b78565b0217905550604080518082019091526001600160a01b0380841682528281166020808401918252600780546001810182556000918252945160029095027fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688810180549686166001600160a01b031997881617905592517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c689909301805493909416929094169190911790915584015184519091600491600a811115620009eb57620009eb62000b78565b600a811115620009ff57620009ff62000b78565b8152602001908152602001600020908051906020019062000a2292919062000ad2565b5080600660008560000151600a81111562000a415762000a4162000b78565b600a81111562000a555762000a5562000b78565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550505050565b610ab1806200285183390190565b611224806200330283390190565b611758806200452683390190565b6117098062005c7e83390190565b6106ca806200738783390190565b82805462000ae09062000cd7565b90600052602060002090601f01602090048101928262000b04576000855562000b4f565b82601f1062000b1f57805160ff191683800117855562000b4f565b8280016001018555821562000b4f579182015b8281111562000b4f57825182559160200191906001019062000b32565b5062000b5d92915062000b61565b5090565b5b8082111562000b5d576000815560010162000b62565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600060001982141562000bc757634e487b7160e01b600052601160045260246000fd5b5060010190565b6000815180845260005b8181101562000bf65760208185018101518683018201520162000bd8565b8181111562000c09576000602083870101525b50601f01601f19169290920160200192915050565b60608152600062000c33606083018662000bce565b828103602084015262000c47818662000bce565b91505060ff83166040830152949350505050565b60808152600062000c70608083018762000bce565b828103602084015262000c84818762000bce565b60ff95909516604084015250506001600160a01b039190911660609091015292915050565b6001600160a01b038316815260406020820181905260009062000ccf9083018462000bce565b949350505050565b600181811c9082168062000cec57607f821691505b6020821081141562000d0e57634e487b7160e01b600052602260045260246000fd5b50919050565b611b2d8062000d246000396000f3fe6080604052600436106101635760003560e01c80638eb86e8b116100c0578063c6c3bbe611610074578063d051a62211610059578063d051a62214610490578063eebab8ef146104b0578063fa7626d4146104d057600080fd5b8063c6c3bbe614610433578063c74912d21461045357600080fd5b80639b140a85116100a55780639b140a85146103e6578063b36ba20814610406578063ba414fa61461040e57600080fd5b80638eb86e8b1461038357806398cdaadf146103a357600080fd5b80636a72bde71161011757806388327863116100fc578063883278631461030857806388f776a2146103365780638a3177a31461035657600080fd5b80636a72bde7146102c45780636ca42ae3146102e657600080fd5b8063440864fa11610148578063440864fa146102025780634b57b0be1461022f57806367b426451461028157600080fd5b806304bc3b1c1461016f57806310c7f0b9146101b557600080fd5b3661016a57005b600080fd5b34801561017b57600080fd5b5061019f61018a3660046116f6565b60086020526000908152604090205460ff1681565b6040516101ac9190611742565b60405180910390f35b3480156101c157600080fd5b506101d56101d036600461175c565b6104ea565b6040805173ffffffffffffffffffffffffffffffffffffffff9384168152929091166020830152016101ac565b34801561020e57600080fd5b5061022261021d366004611784565b610530565b6040516101ac91906117cb565b34801561023b57600080fd5b5060015461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101ac565b34801561028d57600080fd5b5061025c61029c366004611784565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156102d057600080fd5b506102e46102df36600461181c565b6105ca565b005b3480156102f257600080fd5b506102fb610730565b6040516101ac919061186b565b34801561031457600080fd5b506103286103233660046118d4565b6107b5565b6040519081526020016101ac565b34801561034257600080fd5b506102e461035136600461190b565b610888565b34801561036257600080fd5b50610328610371366004611784565b60056020526000908152604090205481565b34801561038f57600080fd5b506102e461039e366004611954565b6108b9565b3480156103af57600080fd5b5061025c6103be366004611784565b60066020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156103f257600080fd5b506102e4610401366004611993565b610a73565b6102e4610b22565b34801561041a57600080fd5b50610423610ba0565b60405190151581526020016101ac565b34801561043f57600080fd5b506102e461044e3660046119b3565b610d00565b34801561045f57600080fd5b5061048361046e366004611784565b60036020526000908152604090205460ff1681565b6040516101ac91906119d3565b34801561049c57600080fd5b506103286104ab36600461190b565b610daf565b3480156104bc57600080fd5b506102e46104cb366004611954565b610e8b565b3480156104dc57600080fd5b506000546104239060ff1681565b600781815481106104fa57600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff91821692501682565b60046020526000908152604090208054610549906119e7565b80601f0160208091040260200160405190810160405280929190818152602001828054610575906119e7565b80156105c25780601f10610597576101008083540402835291602001916105c2565b820191906000526020600020905b8154815290600101906020018083116105a557829003601f168201915b505050505081565b6000546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152620100009092049091169063ca669fa790602401600060405180830381600087803b15801561063e57600080fd5b505af1158015610652573d6000803e3d6000fd5b505050506002600085600a81111561066c5761066c611713565b600a81111561067d5761067d611713565b8152602081019190915260409081016000205490517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490529091169063095ea7b3906044016020604051808303816000875af1158015610705573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107299190611a3b565b5050505050565b60606007805480602002602001604051908101604052809291908181526020016000905b828210156107ac5760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff908116835260019182015416828401529083529092019101610754565b50505050905090565b60006002600084600a8111156107cd576107cd611713565b600a8111156107de576107de611713565b8152602081019190915260409081016000205490517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152909116906370a0823190602401602060405180830381865afa15801561085d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108819190611a5d565b9392505050565b6108b48383837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6105ca565b505050565b60016003600085600a8111156108d1576108d1611713565b600a8111156108e2576108e2611713565b815260208101919091526040016000205460ff16600481111561090757610907611713565b14610999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f74657374546f6b656e53756974653a20547279696e6720746f206275726e206160448201527f206e6f6e2d6e6f726d616c20746f6b656e00000000000000000000000000000060648201526084015b60405180910390fd5b6002600084600a8111156109af576109af611713565b600a8111156109c0576109c0611713565b8152602081019190915260409081016000205490517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526024820184905290911690639dc29fac906044015b6020604051808303816000875af1158015610a49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6d9190611a3b565b50505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604081205460ff169081600a811115610aaf57610aaf611713565b1415610b17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f20746f6b656e2077697468207375636820616464726573730000000000006044820152606401610990565b610a6d818484610888565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015610b8c57600080fd5b505af1158015610729573d6000803e3d6000fd5b60008054610100900460ff1615610bc05750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610cfb5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610c65917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc491608001611a76565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052610c9d91611abe565b6000604051808303816000865af19150503d8060008114610cda576040519150601f19603f3d011682016040523d82523d6000602084013e610cdf565b606091505b5091505080806020019051810190610cf79190611a3b565b9150505b919050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604081205460ff169081600a811115610d3c57610d3c611713565b1415610da4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f20746f6b656e2077697468207375636820616464726573730000000000006044820152606401610990565b610a6d818484610e8b565b60006002600085600a811115610dc757610dc7611713565b600a811115610dd857610dd8611713565b8152602081019190915260409081016000205490517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301529091169063dd62ed3e90604401602060405180830381865afa158015610e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e839190611a5d565b949350505050565b60026003600085600a811115610ea357610ea3611713565b600a811115610eb457610eb4611713565b815260208101919091526040016000205460ff166004811115610ed957610ed9611713565b1415610ff6576000546040517fc88a5e6d000000000000000000000000000000000000000000000000000000008152306004820152602481018390526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c88a5e6d90604401600060405180830381600087803b158015610f5657600080fd5b505af1158015610f6a573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015610fd857600080fd5b505af1158015610fec573d6000803e3d6000fd5b505050505061163c565b600380600085600a81111561100d5761100d611713565b600a81111561101e5761101e611713565b815260208101919091526040016000205460ff16600481111561104357611043611713565b14156111aa576000546040517fc88a5e6d000000000000000000000000000000000000000000000000000000008152306004820152602481018390526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c88a5e6d90604401600060405180830381600087803b1580156110c057600080fd5b505af11580156110d4573d6000803e3d6000fd5b505050506002600084600a8111156110ee576110ee611713565b600a8111156110ff576110ff611713565b8152602081019190915260409081016000205490517fa1903eab00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a1903eab90839060240160206040518083038185885af115801561117f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906111a49190611a5d565b5061163c565b60046003600085600a8111156111c2576111c2611713565b600a8111156111d3576111d3611713565b815260208101919091526040016000205460ff1660048111156111f8576111f8611713565b141561148f5760006002600085600a81111561121657611216611713565b600a81111561122757611227611713565b815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c49190611ada565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600860205260409020549091506112fb9060ff163084610e8b565b8073ffffffffffffffffffffffffffffffffffffffff1663095ea7b36002600087600a81111561132d5761132d611713565b600a81111561133e5761133e611713565b81526020810191909152604090810160002054905160e083901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602481018590526044016020604051808303816000875af11580156113c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e69190611a3b565b506002600085600a8111156113fd576113fd611713565b600a81111561140e5761140e611713565b8152602081019190915260409081016000205490517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810184905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f1990604401600060405180830381600087803b158015610fd857600080fd5b60016003600085600a8111156114a7576114a7611713565b600a8111156114b8576114b8611713565b815260208101919091526040016000205460ff1660048111156114dd576114dd611713565b14156115b4576002600084600a8111156114f9576114f9611713565b600a81111561150a5761150a611713565b8152602081019190915260409081016000205490517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f19906044016020604051808303816000875af1158015611590573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a49190611a3b565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f74657374546f6b656e53756974653a20547279696e6720746f207472616e736660448201527f657220756e6b6e6f776e20746f6b656e000000000000000000000000000000006064820152608401610990565b6002600084600a81111561165257611652611713565b600a81111561166357611663611713565b8152602081019190915260409081016000205490517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490529091169063a9059cbb90604401610a2a565b73ffffffffffffffffffffffffffffffffffffffff811681146116f357600080fd5b50565b60006020828403121561170857600080fd5b8135610881816116d1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60208101600b831061175657611756611713565b91905290565b60006020828403121561176e57600080fd5b5035919050565b8035600b8110610cfb57600080fd5b60006020828403121561179657600080fd5b61088182611775565b60005b838110156117ba5781810151838201526020016117a2565b83811115610a6d5750506000910152565b60208152600082518060208401526117ea81604085016020870161179f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000806080858703121561183257600080fd5b61183b85611775565b9350602085013561184b816116d1565b9250604085013561185b816116d1565b9396929550929360600135925050565b602080825282518282018190526000919060409081850190868401855b828110156118c7578151805173ffffffffffffffffffffffffffffffffffffffff90811686529087015116868501529284019290850190600101611888565b5091979650505050505050565b600080604083850312156118e757600080fd5b6118f083611775565b91506020830135611900816116d1565b809150509250929050565b60008060006060848603121561192057600080fd5b61192984611775565b92506020840135611939816116d1565b91506040840135611949816116d1565b809150509250925092565b60008060006060848603121561196957600080fd5b61197284611775565b92506020840135611982816116d1565b929592945050506040919091013590565b6000806000606084860312156119a857600080fd5b8335611929816116d1565b6000806000606084860312156119c857600080fd5b8335611972816116d1565b602081016005831061175657611756611713565b600181811c908216806119fb57607f821691505b60208210811415611a35577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600060208284031215611a4d57600080fd5b8151801515811461088157600080fd5b600060208284031215611a6f57600080fd5b5051919050565b7fffffffff000000000000000000000000000000000000000000000000000000008316815260008251611ab081600485016020870161179f565b919091016004019392505050565b60008251611ad081846020870161179f565b9190910192915050565b600060208284031215611aec57600080fd5b8151610881816116d156fea264697066735822122010fe735ed069aca27931edce4ba2ff14ec7886bf21b0eea685a884f9200fb49e64736f6c634300080a003360c0604052600d60808190526c2bb930b83832b21022ba3432b960991b60a090815261002e916000919061007a565b50604080518082019091526004808252630ae8aa8960e31b602090920191825261005a9160019161007a565b506002805460ff1916601217905534801561007457600080fd5b5061014e565b82805461008690610113565b90600052602060002090601f0160209004810192826100a857600085556100ee565b82601f106100c157805160ff19168380011785556100ee565b828001600101855582156100ee579182015b828111156100ee5782518255916020019190600101906100d3565b506100fa9291506100fe565b5090565b5b808211156100fa57600081556001016100ff565b600181811c9082168061012757607f821691505b6020821081141561014857634e487b7160e01b600052602260045260246000fd5b50919050565b6109548061015d6000396000f3fe6080604052600436106100cb5760003560e01c806340c10f1911610074578063a9059cbb1161004e578063a9059cbb14610225578063d0e30db014610245578063dd62ed3e1461024d57600080fd5b806340c10f19146101c357806370a08231146101e357806395d89b411461021057600080fd5b806323b872dd116100a557806323b872dd146101575780632e1a7d4d14610177578063313ce5671461019757600080fd5b806306fdde03146100df578063095ea7b31461010a57806318160ddd1461013a57600080fd5b366100da576100d8610285565b005b600080fd5b3480156100eb57600080fd5b506100f46102e0565b6040516101019190610703565b60405180910390f35b34801561011657600080fd5b5061012a61012536600461079f565b61036e565b6040519015158152602001610101565b34801561014657600080fd5b50475b604051908152602001610101565b34801561016357600080fd5b5061012a6101723660046107c9565b6103e7565b34801561018357600080fd5b506100d8610192366004610805565b6105fe565b3480156101a357600080fd5b506002546101b19060ff1681565b60405160ff9091168152602001610101565b3480156101cf57600080fd5b506100d86101de36600461079f565b6106a4565b3480156101ef57600080fd5b506101496101fe36600461081e565b60036020526000908152604090205481565b34801561021c57600080fd5b506100f46106e2565b34801561023157600080fd5b5061012a61024036600461079f565b6106ef565b6100d8610285565b34801561025957600080fd5b50610149610268366004610839565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102a490849061089b565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102ed906108b3565b80601f0160208091040260200160405190810160405280929190818152602001828054610319906108b3565b80156103665780601f1061033b57610100808354040283529160200191610366565b820191906000526020600020905b81548152906001019060200180831161034957829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103d69086815260200190565b60405180910390a350600192915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561041957600080fd5b73ffffffffffffffffffffffffffffffffffffffff8416331480159061048f575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105175773ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020548211156104d157600080fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915281208054849290610511908490610907565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061054c908490610907565b909155505073ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260408120805484929061058690849061089b565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516105ec91815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561061a57600080fd5b3360009081526003602052604081208054839290610639908490610907565b9091555050604051339082156108fc029083906000818181858888f1935050505015801561066b573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260036020526040812080548392906106d990849061089b565b90915550505050565b600180546102ed906108b3565b60006106fc3384846103e7565b9392505050565b600060208083528351808285015260005b8181101561073057858101830151858201604001528201610714565b81811115610742576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461079a57600080fd5b919050565b600080604083850312156107b257600080fd5b6107bb83610776565b946020939093013593505050565b6000806000606084860312156107de57600080fd5b6107e784610776565b92506107f560208501610776565b9150604084013590509250925092565b60006020828403121561081757600080fd5b5035919050565b60006020828403121561083057600080fd5b6106fc82610776565b6000806040838503121561084c57600080fd5b61085583610776565b915061086360208401610776565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156108ae576108ae61086c565b500190565b600181811c908216806108c757607f821691505b60208210811415610901577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000828210156109195761091961086c565b50039056fea26469706673582212206ec943fa4e3b70d8fca6c25b6aa26fa18e8f8952ce3bc4d5afcb443bf3097c0564736f6c634300080a003360806040526000600255600060035534801561001a57600080fd5b506111fa8061002a6000396000f3fe60806040526004361061016e5760003560e01c80637a28fb88116100cb578063bdd17e1c1161007f578063dd62ed3e11610059578063dd62ed3e146103ee578063ee7a7c0414610441578063f5eb42dc1461046157600080fd5b8063bdd17e1c146103ad578063cdb9a21c146103c3578063d5002f2e146103d957600080fd5b8063a1903eab116100b0578063a1903eab1461035a578063a457c2d71461036d578063a9059cbb1461038d57600080fd5b80637a28fb88146102f457806395d89b411461031457600080fd5b806323b872dd1161012257806337cfdaca1161010757806337cfdaca1461020d57806339509351146102b457806370a08231146102d457600080fd5b806323b872dd14610278578063313ce5671461029857600080fd5b806318160ddd1161015357806318160ddd1461020d578063192084511461023057806322301f6e1461025057600080fd5b806306fdde0314610185578063095ea7b3146101dd57600080fd5b366101805761017d6000610481565b50005b600080fd5b34801561019157600080fd5b5060408051808201909152601781527f4c6971756964207374616b656420457468657220322e3000000000000000000060208201525b6040516101d49190610f63565b60405180910390f35b3480156101e957600080fd5b506101fd6101f8366004610fff565b610545565b60405190151581526020016101d4565b34801561021957600080fd5b5061022261055b565b6040519081526020016101d4565b34801561023c57600080fd5b5061022261024b366004611029565b61056b565b34801561025c57600080fd5b5061027661026b366004611042565b600391909155600255565b005b34801561028457600080fd5b506101fd610293366004611064565b6105ab565b3480156102a457600080fd5b50604051601281526020016101d4565b3480156102c057600080fd5b506101fd6102cf366004610fff565b610696565b3480156102e057600080fd5b506102226102ef3660046110a0565b6106d9565b34801561030057600080fd5b5061022261030f366004611029565b61070e565b34801561032057600080fd5b5060408051808201909152600581527f737445544800000000000000000000000000000000000000000000000000000060208201526101c7565b6102226103683660046110a0565b61073a565b34801561037957600080fd5b506101fd610388366004610fff565b610745565b34801561039957600080fd5b506101fd6103a8366004610fff565b6107f9565b3480156103b957600080fd5b5061022260035481565b3480156103cf57600080fd5b5061022260025481565b3480156103e557600080fd5b50610222610806565b3480156103fa57600080fd5b506102226104093660046110bb565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b34801561044d57600080fd5b5061027661045c366004610fff565b610811565b34801561046d57600080fd5b5061022261047c3660046110a0565b61081f565b60003334806104f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f5a45524f5f4445504f534954000000000000000000000000000000000000000060448201526064015b60405180910390fd5b60006104fc8261056b565b9050806105065750805b8160036000828254610518919061111d565b909155506105289050838261084a565b61053383838761093b565b61053d8382610992565b949350505050565b60006105523384846109ea565b50600192915050565b600061056660035490565b905090565b60008061057760035490565b9050806105875750600092915050565b6105a48161059e61059760025490565b8690610b52565b90610b5e565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001602090815260408083203384529091528120548281101561066c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f5452414e534645525f414d4f554e545f455843454544535f414c4c4f57414e4360448201527f450000000000000000000000000000000000000000000000000000000000000060648201526084016104e8565b610677858585610b6a565b61068b85336106868487610bef565b6109ea565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916105529185906106869086610bfb565b73ffffffffffffffffffffffffffffffffffffffff81166000908152602081905260408120546107089061070e565b92915050565b60008061071a60025490565b90508061072a5750600092915050565b6105a48161059e61059760035490565b600061070882610481565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156107e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4445435245415345445f414c4c4f57414e43455f42454c4f575f5a45524f000060448201526064016104e8565b6107ef33856106868487610bef565b5060019392505050565b6000610552338484610b6a565b600061056660025490565b61081b8282610c07565b5050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040812054610708565b73ffffffffffffffffffffffffffffffffffffffff82166108c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4d494e545f544f5f5448455f5a45524f5f41444452455353000000000000000060448201526064016104e8565b80600260008282546108d9919061111d565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205461090e9082610bfb565b73ffffffffffffffffffffffffffffffffffffffff90921660009081526020819052604090209190915550565b6040805183815273ffffffffffffffffffffffffffffffffffffffff83811660208301528516917fed8dd430b1e4bba98e943dc5b157cf7b54d9e12916d6c474ff5733a95001d03b910160405180910390a2505050565b73ffffffffffffffffffffffffffffffffffffffff821660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6109d58461070e565b60405190815260200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff8316610a67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f415050524f56455f46524f4d5f5a45524f5f414444524553530000000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff8216610ae4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f415050524f56455f544f5f5a45524f5f4144445245535300000000000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006105a48284611135565b60006105a48284611172565b6000610b758261056b565b9050610b82848483610d64565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610be191815260200190565b60405180910390a350505050565b60006105a482846111ad565b60006105a4828461111d565b73ffffffffffffffffffffffffffffffffffffffff8216610c84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4255524e5f46524f4d5f5448455f5a45524f5f4144445245535300000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205480821115610d14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4255524e5f414d4f554e545f455843454544535f42414c414e4345000000000060448201526064016104e8565b8160026000828254610d2691906111ad565b90915550610d3690508183610bef565b73ffffffffffffffffffffffffffffffffffffffff9093166000908152602081905260409020929092555050565b73ffffffffffffffffffffffffffffffffffffffff8316610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f5452414e534645525f46524f4d5f5448455f5a45524f5f41444452455353000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff8216610e5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f5452414e534645525f544f5f5448455f5a45524f5f414444524553530000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205480821115610eee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5452414e534645525f414d4f554e545f455843454544535f42414c414e43450060448201526064016104e8565b610ef88183610bef565b73ffffffffffffffffffffffffffffffffffffffff8086166000908152602081905260408082209390935590851681522054610f349083610bfb565b73ffffffffffffffffffffffffffffffffffffffff909316600090815260208190526040902092909255505050565b600060208083528351808285015260005b81811015610f9057858101830151858201604001528201610f74565b81811115610fa2576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ffa57600080fd5b919050565b6000806040838503121561101257600080fd5b61101b83610fd6565b946020939093013593505050565b60006020828403121561103b57600080fd5b5035919050565b6000806040838503121561105557600080fd5b50508035926020909101359150565b60008060006060848603121561107957600080fd5b61108284610fd6565b925061109060208501610fd6565b9150604084013590509250925092565b6000602082840312156110b257600080fd5b6105a482610fd6565b600080604083850312156110ce57600080fd5b6110d783610fd6565b91506110e560208401610fd6565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611130576111306110ee565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561116d5761116d6110ee565b500290565b6000826111a8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000828210156111bf576111bf6110ee565b50039056fea2646970667358221220a5b4f31162ba2b8b3424cef84b31ef91d05a825243602b5fdf758ffb49b8246364736f6c634300080a003360a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a003360c06040523480156200001157600080fd5b506040516200170938038062001709833981016040819052620000349162000266565b8351849084906200004d906003906020850190620000f3565b50805162000063906004906020840190620000f3565b505050620000806200007a6200009d60201b60201c565b620000a1565b60ff9091166080526001600160a01b031660a05250620003479050565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b82805462000101906200030a565b90600052602060002090601f01602090048101928262000125576000855562000170565b82601f106200014057805160ff191683800117855562000170565b8280016001018555821562000170579182015b828111156200017057825182559160200191906001019062000153565b506200017e92915062000182565b5090565b5b808211156200017e576000815560010162000183565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c157600080fd5b81516001600160401b0380821115620001de57620001de62000199565b604051601f8301601f19908116603f0116810190828211818310171562000209576200020962000199565b816040528381526020925086838588010111156200022657600080fd5b600091505b838210156200024a57858201830151818301840152908201906200022b565b838211156200025c5760008385830101525b9695505050505050565b600080600080608085870312156200027d57600080fd5b84516001600160401b03808211156200029557600080fd5b620002a388838901620001af565b95506020870151915080821115620002ba57600080fd5b50620002c987828801620001af565b935050604085015160ff81168114620002e157600080fd5b60608601519092506001600160a01b0381168114620002ff57600080fd5b939692955090935050565b600181811c908216806200031f57607f821691505b602082108114156200034157634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05161138e6200037b600039600081816101f70152818161041f0152610600015260006101a2015261138e6000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80636f307dc3116100b257806395d89b4111610081578063a9059cbb11610066578063a9059cbb146102b5578063dd62ed3e146102c8578063f2fde38b1461030e57600080fd5b806395d89b411461029a578063a457c2d7146102a257600080fd5b80636f307dc3146101f257806370a082311461023e578063715018a6146102745780638da5cb5b1461027c57600080fd5b806323b872dd116100ee57806323b872dd14610188578063313ce5671461019b57806339509351146101cc57806340c10f19146101df57600080fd5b806306fdde0314610120578063095ea7b31461013e57806318160ddd146101615780631e9a695014610173575b600080fd5b610128610321565b604051610135919061112d565b60405180910390f35b61015161014c3660046111c9565b6103b3565b6040519015158152602001610135565b6002545b604051908152602001610135565b6101866101813660046111c9565b6103c9565b005b6101516101963660046111f3565b610491565b60405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610135565b6101516101da3660046111c9565b61057c565b6101866101ed3660046111c9565b6105c5565b6102197f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b61016561024c36600461122f565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610186610691565b60055473ffffffffffffffffffffffffffffffffffffffff16610219565b61012861071e565b6101516102b03660046111c9565b61072d565b6101516102c33660046111c9565b610805565b6101656102d6366004611251565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b61018661031c36600461122f565b610812565b60606003805461033090611284565b80601f016020809104026020016040519081016040528092919081815260200182805461035c90611284565b80156103a95780601f1061037e576101008083540402835291602001916103a9565b820191906000526020600020905b81548152906001019060200180831161038c57829003601f168201915b5050505050905090565b60006103c0338484610942565b50600192915050565b6103d33382610af5565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015610468573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048c91906112d8565b505050565b600061049e848484610ce2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6105718533858403610942565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916103c09185906105c0908690611329565b610942565b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906323b872dd906064016020604051808303816000875af115801561065e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068291906112d8565b5061068d8282610f96565b5050565b60055473ffffffffffffffffffffffffffffffffffffffff163314610712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161055b565b61071c60006110b6565b565b60606004805461033090611284565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156107ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161055b565b6107fb3385858403610942565b5060019392505050565b60006103c0338484610ce2565b60055473ffffffffffffffffffffffffffffffffffffffff163314610893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161055b565b73ffffffffffffffffffffffffffffffffffffffff8116610936576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161055b565b61093f816110b6565b50565b73ffffffffffffffffffffffffffffffffffffffff83166109e4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff8216610a87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8216610b98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015610c4e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290610c8a908490611341565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff8216610e28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610ede576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610f22908490611329565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f8891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161055b565b80600260008282546110259190611329565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152602081905260408120805483929061105f908490611329565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208083528351808285015260005b8181101561115a5785810183015185820160400152820161113e565b8181111561116c576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146111c457600080fd5b919050565b600080604083850312156111dc57600080fd5b6111e5836111a0565b946020939093013593505050565b60008060006060848603121561120857600080fd5b611211846111a0565b925061121f602085016111a0565b9150604084013590509250925092565b60006020828403121561124157600080fd5b61124a826111a0565b9392505050565b6000806040838503121561126457600080fd5b61126d836111a0565b915061127b602084016111a0565b90509250929050565b600181811c9082168061129857607f821691505b602082108114156112d2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156112ea57600080fd5b8151801515811461124a57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561133c5761133c6112fa565b500190565b600082821015611353576113536112fa565b50039056fea26469706673582212203a6db30cd3c097921df4156794aa7973eb848711deeb2cffd7c54a9df1fdb0a564736f6c634300080a003360a060405234801561001057600080fd5b506040516106ca3803806106ca83398101604081905261002f9161006c565b60009190915560ff166080526001805460506001600160501b031991821681179092556004805490911690911790554260028190556003556100a2565b6000806040838503121561007f57600080fd5b82519150602083015160ff8116811461009757600080fd5b809150509250929050565b60805161060e6100bc600039600060d3015261060e6000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80639a6fc8f511610081578063d62ada111161005b578063d62ada11146102dc578063f7a30806146102f4578063feaf968c1461030757600080fd5b80639a6fc8f5146101cd578063bd18ad531461023a578063cd653afc1461024d57600080fd5b806354fd4d50116100b257806354fd4d501461012d57806367e8d83d1461013c5780637284e4161461018e57600080fd5b8063313ce567146100ce5780633fd0875f1461010c575b600080fd5b6100f57f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020015b60405180910390f35b6004546a0100000000000000000000900460ff166040516101039190610441565b60405160018152602001610103565b61018c61014a366004610482565b600480549115156c01000000000000000000000000027fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff909216919091179055565b005b604080518082018252600c81527f7072696365206f7261636c6500000000000000000000000000000000000000006020820152905161010391906104ab565b6102036101db36600461053d565b60015460005460025460035460045469ffffffffffffffffffff948516941691939590929450565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610103565b61018c610248366004610558565b61030f565b61018c61025b366004610579565b6001805469ffffffffffffffffffff9586167fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090911617905560029290925560035560048054919092167fffffffffffffffffffffffffffffffffffffffff00ff00000000000000000000909116176b020000000000000000000000179055565b6102e461035f565b6040519015158152602001610103565b61018c6103023660046105bf565b600055565b610203610385565b600480548291907fffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff166b01000000000000000000000083600281111561035757610357610412565b021790555050565b600454600090610380906b010000000000000000000000900460ff166103d6565b905090565b60008060008060006004600c9054906101000a900460ff16156103a757600080fd5b505060015460005460025460035460045469ffffffffffffffffffff9485169893975091955093509190911690565b600060028260028111156103ec576103ec610412565b14156103f757600080fd5b600182600281111561040b5761040b610412565b1492915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016006831061047c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561049457600080fd5b813580151581146104a457600080fd5b9392505050565b600060208083528351808285015260005b818110156104d8578581018301518582016040015282016104bc565b818111156104ea576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803569ffffffffffffffffffff8116811461053857600080fd5b919050565b60006020828403121561054f57600080fd5b6104a48261051e565b60006020828403121561056a57600080fd5b8135600381106104a457600080fd5b6000806000806080858703121561058f57600080fd5b6105988561051e565b935060208501359250604085013591506105b46060860161051e565b905092959194509250565b6000602082840312156105d157600080fd5b503591905056fea264697066735822122014874f7a973b86501c4c1a8be32490fe902c8f088ee234d25f9b2497e19f9e5264736f6c634300080a00335745544820746f204441492067617320707269636520697320696e636f727265637444414920746f20574554482067617320707269636520697320696e636f7272656374a26469706673582212202f4f9a15e9c733601a6be66cb71da3cbeb80636ef23828dc5f8d46050c11f5cd64736f6c634300080a0033"; - -type UniswapV2PathFinderTestConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: UniswapV2PathFinderTestConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class UniswapV2PathFinderTest__factory extends ContractFactory { - constructor(...args: UniswapV2PathFinderTestConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): UniswapV2PathFinderTest { - return super.attach(address) as UniswapV2PathFinderTest; - } - override connect(signer: Signer): UniswapV2PathFinderTest__factory { - return super.connect(signer) as UniswapV2PathFinderTest__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): UniswapV2PathFinderTestInterface { - return new utils.Interface(_abi) as UniswapV2PathFinderTestInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): UniswapV2PathFinderTest { - return new Contract( - address, - _abi, - signerOrProvider - ) as UniswapV2PathFinderTest; - } -} diff --git a/src/types/factories/contracts/test/pathfinder/UniswapV2PathFinder.t.sol/index.ts b/src/types/factories/contracts/test/pathfinder/UniswapV2PathFinder.t.sol/index.ts deleted file mode 100644 index da730f0a..00000000 --- a/src/types/factories/contracts/test/pathfinder/UniswapV2PathFinder.t.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { UniswapV2PathFinderTest__factory } from "./UniswapV2PathFinderTest__factory"; diff --git a/src/types/factories/contracts/test/pathfinder/UniswapV3PathFinder.t.sol/UniswapV3PathFinderTest__factory.ts b/src/types/factories/contracts/test/pathfinder/UniswapV3PathFinder.t.sol/UniswapV3PathFinderTest__factory.ts deleted file mode 100644 index 1af03096..00000000 --- a/src/types/factories/contracts/test/pathfinder/UniswapV3PathFinder.t.sol/UniswapV3PathFinderTest__factory.ts +++ /dev/null @@ -1,826 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - UniswapV3PathFinderTest, - UniswapV3PathFinderTestInterface, -} from "../../../../../contracts/test/pathfinder/UniswapV3PathFinder.t.sol/UniswapV3PathFinderTest"; - -const _abi = [ - { - inputs: [ - { - internalType: "enum SwapOperation", - name: "", - type: "uint8", - }, - ], - name: "UnsupportedSwapOperation", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "", - type: "address", - }, - ], - name: "log_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "log_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - name: "log_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "int256", - name: "", - type: "int256", - }, - ], - name: "log_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "address", - name: "val", - type: "address", - }, - ], - name: "log_named_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes", - name: "val", - type: "bytes", - }, - ], - name: "log_named_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes32", - name: "val", - type: "bytes32", - }, - ], - name: "log_named_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - ], - name: "log_named_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "string", - name: "val", - type: "string", - }, - ], - name: "log_named_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - ], - name: "log_named_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "log_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "logs", - type: "event", - }, - { - inputs: [], - name: "IS_TEST", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bool", - name: "withUnderlyings", - type: "bool", - }, - ], - name: "_setUpCurve", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "cft", - outputs: [ - { - internalType: "contract CreditFacadeTestSuite", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditConfigurator", - outputs: [ - { - internalType: "contract CreditConfigurator", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditFacade", - outputs: [ - { - internalType: "contract CreditFacade", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditManager", - outputs: [ - { - internalType: "contract ICreditManagerV2", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "curveAdapter", - outputs: [ - { - internalType: "contract ICurveV1Adapter", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "curveLPPathFinder", - outputs: [ - { - internalType: "contract CurveLPPathFinder", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "curveMetaAdapter", - outputs: [ - { - internalType: "contract ICurveV1Adapter", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "curvePathFinder", - outputs: [ - { - internalType: "contract CurvePathFinder", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "curveV1MetaMock", - outputs: [ - { - internalType: "contract CurveV1MetapoolMock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "curveV1Mock", - outputs: [ - { - internalType: "contract CurveV1Mock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "failed", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "setUp", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_PUV3_01_setGasUsage_correctly_sets_values", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_PUV3_02_getBestDirectPairSwap_returns_correct_swapQuote_ZERO", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountIn", - type: "uint256", - }, - { - internalType: "uint16", - name: "daiWethRate", - type: "uint16", - }, - { - internalType: "uint16", - name: "slippage", - type: "uint16", - }, - { - internalType: "uint8", - name: "feeIndex", - type: "uint8", - }, - { - internalType: "bool", - name: "isAll", - type: "bool", - }, - { - internalType: "bool", - name: "externalSlippage", - type: "bool", - }, - ], - name: "test_PUV3_03_getBestDirectPairSwap_returns_correct_swapQuote_INPUT", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountOut", - type: "uint256", - }, - { - internalType: "uint16", - name: "daiWethRate", - type: "uint16", - }, - { - internalType: "uint8", - name: "feeIndex", - type: "uint8", - }, - { - internalType: "uint16", - name: "slippage", - type: "uint16", - }, - { - internalType: "bool", - name: "externalSlippage", - type: "bool", - }, - ], - name: "test_PUV3_04_getBestDirectPairSwap_returns_correct_swapQuote_OUTPUT", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountIn", - type: "uint256", - }, - { - internalType: "uint8", - name: "bestConnectorIndex", - type: "uint8", - }, - { - internalType: "uint8", - name: "bestPool", - type: "uint8", - }, - { - internalType: "uint16", - name: "slippage", - type: "uint16", - }, - { - internalType: "bool", - name: "isAll", - type: "bool", - }, - { - internalType: "bool", - name: "externalSlippage", - type: "bool", - }, - ], - name: "test_PUV3_05_getBestConnectorSwap_returns_correct_swapQuote_INPUT", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amountOut", - type: "uint256", - }, - { - internalType: "uint8", - name: "bestConnectorIndex", - type: "uint8", - }, - { - internalType: "uint8", - name: "bestPool", - type: "uint8", - }, - { - internalType: "uint16", - name: "slippage", - type: "uint16", - }, - { - internalType: "bool", - name: "externalSlippage", - type: "bool", - }, - ], - name: "test_PUV3_06_getBestConnectorSwap_returns_correct_swapQuote_OUTPUT", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "tokenMasksMap", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "underlying", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "uniV2adapter", - outputs: [ - { - internalType: "contract IUniswapV2Adapter", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "uniV2mock", - outputs: [ - { - internalType: "contract UniswapV2Mock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "uniV2pathFinder", - outputs: [ - { - internalType: "contract UniswapV2PathFinder", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "uniV3adapter", - outputs: [ - { - internalType: "contract IUniswapV3Adapter", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "uniV3mock", - outputs: [ - { - internalType: "contract UniswapV3Mock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "uniV3pathFinder", - outputs: [ - { - internalType: "contract UniswapV3PathFinder", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "yearnAdapter", - outputs: [ - { - internalType: "contract YearnV2Adapter", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "yearnMock", - outputs: [ - { - internalType: "contract YearnV2Mock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "yearnPathFinder", - outputs: [ - { - internalType: "contract YearnPathFinder", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x60806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d000117905534801561003957600080fd5b5062021bc8806200004b6000396000f3fe60806040523480156200001157600080fd5b50600436106200020d5760003560e01c8063b1598c9c1162000125578063ea14898111620000af578063f9aa028a116200007a578063f9aa028a1462000558578063fa7626d41462000579578063fca2cea51462000587578063feaad07114620005a857600080fd5b8063ea14898114620004d9578063eeef8dd014620004f0578063f310c6da1462000511578063f67c5bd0146200053257600080fd5b8063cac283c811620000f0578063cac283c81462000455578063ceab13861462000476578063d8d7ca3c1462000497578063df51443314620004b857600080fd5b8063b1598c9c14620003eb578063ba414fa61462000402578063c12c21c0146200041d578063c5f583fa146200043e57600080fd5b80632f7a188111620001a75780635ebb236111620001725780635ebb236114620003675780636f307dc314620003885780639b6a80a714620003a95780639f8ad9ec14620003ca57600080fd5b80632f7a188114620002fa5780634b7b24a5146200031b578063568ea938146200033c5780635a521cf8146200034657600080fd5b80631c9a755f11620001e85780631c9a755f1462000280578063287b94d714620002a157806329d351d814620002c25780632b9d0d2814620002e357600080fd5b80630a9254e414620002125780631497761e146200021e578063191b63611462000269575b600080fd5b6200021c620005b2565b005b6007546200023f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6200021c6200027a3660046200642a565b620005be565b6012546200023f9073ffffffffffffffffffffffffffffffffffffffff1681565b600b546200023f9073ffffffffffffffffffffffffffffffffffffffff1681565b6008546200023f9073ffffffffffffffffffffffffffffffffffffffff1681565b6200021c620002f436600462006495565b62000b45565b6002546200023f9073ffffffffffffffffffffffffffffffffffffffff1681565b600a546200023f9073ffffffffffffffffffffffffffffffffffffffff1681565b6200021c62001d14565b600e546200023f9073ffffffffffffffffffffffffffffffffffffffff1681565b600c546200023f9073ffffffffffffffffffffffffffffffffffffffff1681565b6005546200023f9073ffffffffffffffffffffffffffffffffffffffff1681565b6013546200023f9073ffffffffffffffffffffffffffffffffffffffff1681565b600d546200023f9073ffffffffffffffffffffffffffffffffffffffff1681565b6200021c620003fc366004620064b5565b6200201c565b6200040c620027a6565b604051901515815260200162000260565b6001546200023f9073ffffffffffffffffffffffffffffffffffffffff1681565b6200021c6200044f366004620064e0565b62002910565b6014546200023f9073ffffffffffffffffffffffffffffffffffffffff1681565b6011546200023f9073ffffffffffffffffffffffffffffffffffffffff1681565b6009546200023f9073ffffffffffffffffffffffffffffffffffffffff1681565b6004546200023f9073ffffffffffffffffffffffffffffffffffffffff1681565b6200021c620004ea3660046200655e565b6200321b565b600f546200023f9073ffffffffffffffffffffffffffffffffffffffff1681565b6015546200023f9073ffffffffffffffffffffffffffffffffffffffff1681565b6200054962000543366004620065cd565b50600190565b60405190815260200162000260565b6003546200023f9073ffffffffffffffffffffffffffffffffffffffff1681565b6000546200040c9060ff1681565b6010546200023f9073ffffffffffffffffffffffffffffffffffffffff1681565b6200021c620037a9565b620005bc62003dba565b565b6000546040517f4c63e56200000000000000000000000000000000000000000000000000000000815261271061ffff85161060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff1690634c63e56290602401600060405180830381600087803b1580156200063757600080fd5b505af11580156200064c573d6000803e3d6000fd5b50506000546040517f4c63e562000000000000000000000000000000000000000000000000000000008152600360ff89161060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169250634c63e5629150602401600060405180830381600087803b158015620006c757600080fd5b505af1158015620006dc573d6000803e3d6000fd5b50506000546040517f4c63e562000000000000000000000000000000000000000000000000000000008152601b60ff88161060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169250634c63e5629150602401600060405180830381600087803b1580156200075757600080fd5b505af11580156200076c573d6000803e3d6000fd5b505060005462010000900473ffffffffffffffffffffffffffffffffffffffff169150634c63e56290506103e887118015620007c05750620007bd6b033b2e3c9fd0803ce80000006103e86200661c565b87105b6040518263ffffffff1660e01b8152600401620007e1911515815260200190565b600060405180830381600087803b158015620007fc57600080fd5b505af115801562000811573d6000803e3d6000fd5b50505050600080620008616040805161010081019091528060008152600060208201819052604082018190526060808301829052608083015260a0820181905260c0820181905260e09091015290565b606060008060606000620008758c62004205565b604080516101008101909152919d509b5093975091955093509150806002815260200173c4375b7de8af5a38a93548eb8453a498222c4ff273ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018e81526020018b61ffff1681526020018a15158152509550620009bd8388838b8860408051606096871b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000908116602083015260e896871b7fffffff0000000000000000000000000000000000000000000000000000000000908116603484015295881b811660378301529390951b909316604b85015290931b909216604e82015281516042818303018152606290910190915290565b94505050505060008462ffffff16620f4240620009db91906200668b565b6004620009f162ffffff8716620f42406200668b565b620009fe60068e620066d4565b62000a0d90620f42406200661c565b62000a199190620066d4565b62000a259190620066d4565b62000a3490620f42406200661c565b62000a409190620066d4565b6012546010546040517f6f33547d00000000000000000000000000000000000000000000000000000000815292935060009273ffffffffffffffffffffffffffffffffffffffff92831692636f33547d9262000aa59289929091169060040162006755565b6000604051808303816000875af115801562000ac5573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262000b0d919081019062006941565b905062000b388162000b3286858762000b2c620f242c61300c62006a9c565b62004d7e565b62004df4565b5050505050505050505050565b62000b4f62004e14565b60085473ffffffffffffffffffffffffffffffffffffffff1662001d11576006546040517f67b4264500000000000000000000000000000000000000000000000000000000815260009162000d529173ffffffffffffffffffffffffffffffffffffffff909116906367b426459062000bce9060079060040162006ab7565b602060405180830381865afa15801562000bec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c12919062006ad4565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906367b426459062000c6b9060089060040162006ab7565b602060405180830381865afa15801562000c89573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000caf919062006ad4565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906367b426459062000d089060099060040162006ab7565b602060405180830381865afa15801562000d26573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000d4c919062006ad4565b62004f3e565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815291925060009162000eee9173ffffffffffffffffffffffffffffffffffffffff16906367b426459062000db49060019060040162006ab7565b602060405180830381865afa15801562000dd2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000df8919062006ad4565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906367b426459062000e519060029060040162006ab7565b602060405180830381865afa15801562000e6f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e95919062006ad4565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906367b426459062000d089060059060040162006ab7565b60035490915073ffffffffffffffffffffffffffffffffffffffff1615158062000f16575082155b1562000f2157905060605b818160405162000f319062006386565b62000f3e92919062006af4565b604051809103906000f08015801562000f5b573d6000803e3d6000fd5b50600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169182179055604080517ffc0c546a00000000000000000000000000000000000000000000000000000000815290516000929163fc0c546a9160048083019260209291908290030181865afa15801562000ff8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200101e919062006ad4565b6000546040517fc657c71800000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff62010000909104169063c657c71890620010ce90849060040173ffffffffffffffffffffffffffffffffffffffff9190911681526040602082018190526004908201527f3343525600000000000000000000000000000000000000000000000000000000606082015260800190565b600060405180830381600087803b158015620010e957600080fd5b505af1158015620010fe573d6000803e3d6000fd5b505060035473ffffffffffffffffffffffffffffffffffffffff16159150620019129050576000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001193573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011b9919062006ad4565b60085460048054604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9485169490921692632630c12f9282820192602092908290030181865afa1580156200122e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001254919062006ad4565b73ffffffffffffffffffffffffffffffffffffffff16639dcb511a8760008151811062001285576200128562006b26565b60200260200101516040518263ffffffff1660e01b8152600401620012c6919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa158015620012e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200130a919062006ad4565b60048054604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff90921692632630c12f9282820192602092908290030181865afa15801562001378573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200139e919062006ad4565b73ffffffffffffffffffffffffffffffffffffffff16639dcb511a88600181518110620013cf57620013cf62006b26565b60200260200101516040518263ffffffff1660e01b815260040162001410919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa1580156200142e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001454919062006ad4565b60048054604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff90921692632630c12f9282820192602092908290030181865afa158015620014c2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620014e8919062006ad4565b73ffffffffffffffffffffffffffffffffffffffff16639dcb511a8960028151811062001519576200151962006b26565b60200260200101516040518263ffffffff1660e01b81526004016200155a919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa15801562001578573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200159e919062006ad4565b604051620015ac9062006394565b73ffffffffffffffffffffffffffffffffffffffff95861681529385166020850152918416604084015283166060830152909116608082015260c060a082018190526011908201527f43757276654c503350726963654665656400000000000000000000000000000060e082015261010001604051809103906000f0801580156200163b573d6000803e3d6000fd5b506000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291925062010000900473ffffffffffffffffffffffffffffffffffffffff16906306447d5690602401600060405180830381600087803b158015620016c357600080fd5b505af1158015620016d8573d6000803e3d6000fd5b505060048054604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9092169450632630c12f935080830192602092918290030181865afa1580156200174a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001770919062006ad4565b6040517fe8a97a3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301528381166024830152919091169063e8a97a3e90604401600060405180830381600087803b158015620017e457600080fd5b505af1158015620017f9573d6000803e3d6000fd5b50506003546040517f3e7c88d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152611e7860248301529091169250633e7c88d69150604401600060405180830381600087803b1580156200187357600080fd5b505af115801562001888573d6000803e3d6000fd5b50505050600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620018f757600080fd5b505af11580156200190c573d6000803e3d6000fd5b50505050505b60015460085460405173ffffffffffffffffffffffffffffffffffffffff928316929091169083906000906200194890620063a2565b73ffffffffffffffffffffffffffffffffffffffff9485168152928416602084015290831660408301529091166060820152608001604051809103906000f0801580156200199a573d6000803e3d6000fd5b50600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055604051620019ee90620063b0565b604051809103906000f08015801562001a0b573d6000803e3d6000fd5b50600b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283169081179091556008546040517fd914cd4b000000000000000000000000000000000000000000000000000000008152921660048301529063d914cd4b90602401600060405180830381600087803b15801562001aa557600080fd5b505af115801562001aba573d6000803e3d6000fd5b5050600054600754604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152600d60448201527f43555256455f414441505445520000000000000000000000000000000000000060648201526201000090920416925063c657c7189150608401600060405180830381600087803b15801562001b6a57600080fd5b505af115801562001b7f573d6000803e3d6000fd5b5050600054600854604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152600a60448201527f43555256455f4d4f434b0000000000000000000000000000000000000000000060648201526201000090920416925063c657c7189150608401600060405180830381600087803b15801562001c2f57600080fd5b505af115801562001c44573d6000803e3d6000fd5b5050600054600b54604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152601060448201527f43555256455f5041544846494e4445520000000000000000000000000000000060648201526201000090920416925063c657c7189150608401600060405180830381600087803b15801562001cf457600080fd5b505af115801562001d09573d6000803e3d6000fd5b505050505050505b50565b60005b60038160ff16101562001d1157600060405180610100016040528062001d3d846200505a565b600281111562001d515762001d516200665c565b815273c4375b7de8af5a38a93548eb8453a498222c4ff26020820152600654604080517f67b4264500000000000000000000000000000000000000000000000000000000815292019173ffffffffffffffffffffffffffffffffffffffff909116906367b426459062001dca9060019060040162006ab7565b602060405180830381865afa15801562001de8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001e0e919062006ad4565b73ffffffffffffffffffffffffffffffffffffffff90811682526006546040517f67b426450000000000000000000000000000000000000000000000000000000081526020909301929116906367b426459062001e719060029060040162006ab7565b602060405180830381865afa15801562001e8f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001eb5919062006ad4565b73ffffffffffffffffffffffffffffffffffffffff16815260200160608152614e20602082015260646040808301919091526000606090920182905260125460105491517f1bf64c41000000000000000000000000000000000000000000000000000000008152939450919273ffffffffffffffffffffffffffffffffffffffff92831692631bf64c419262001f549287929091169060040162006755565b6000604051808303816000875af115801562001f74573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262001fbc919081019062006941565b6040808201518151808301909252601d82527f466f756e642071756f746520666f7220756e6b6e6f776e20746f6b656e000000602083015291925062002004911590620050ed565b50508080620020139062006b55565b91505062001d17565b6000546040517f4c63e56200000000000000000000000000000000000000000000000000000000815261271061ffff85161060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff1690634c63e56290602401600060405180830381600087803b1580156200209557600080fd5b505af1158015620020aa573d6000803e3d6000fd5b505060005462010000900473ffffffffffffffffffffffffffffffffffffffff169150634c63e5629050600161ffff8716118015620020ee57506103e88661ffff16105b6040518263ffffffff1660e01b81526004016200210f911515815260200190565b600060405180830381600087803b1580156200212a57600080fd5b505af11580156200213f573d6000803e3d6000fd5b505060005462010000900473ffffffffffffffffffffffffffffffffffffffff169150634c63e562905061271087118015620021935750620021906b033b2e3c9fd0803ce80000006103e86200661c565b87105b6040518263ffffffff1660e01b8152600401620021b4911515815260200190565b600060405180830381600087803b158015620021cf57600080fd5b505af1158015620021e4573d6000803e3d6000fd5b50506000546040517f4c63e562000000000000000000000000000000000000000000000000000000008152600360ff88161060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169250634c63e5629150602401600060405180830381600087803b1580156200225f57600080fd5b505af115801562002274573d6000803e3d6000fd5b50506006546040517f67b426450000000000000000000000000000000000000000000000000000000081526000935073ffffffffffffffffffffffffffffffffffffffff90911691506367b4264590620022d49060019060040162006ab7565b602060405180830381865afa158015620022f2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002318919062006ad4565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815291925060009173ffffffffffffffffffffffffffffffffffffffff909116906367b4264590620023779060039060040162006ab7565b602060405180830381865afa15801562002395573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620023bb919062006ad4565b6012546040517f4acc79ed00000000000000000000000000000000000000000000000000000000815260ff8816600482015291925060009173ffffffffffffffffffffffffffffffffffffffff90911690634acc79ed90602401602060405180830381865afa15801562002433573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002459919062006b78565b60115490915073ffffffffffffffffffffffffffffffffffffffff16632ccbc99b84848460646200249b61ffff8e166b033b2e3c9fd0803ce80000006200661c565b620024a79190620066d4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b16815273ffffffffffffffffffffffffffffffffffffffff948516600482015293909216602484015262ffffff1660448301526064820152608401600060405180830381600087803b1580156200252657600080fd5b505af11580156200253b573d6000803e3d6000fd5b50506012546011546040517f4533066600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201528782166024820152868216604482015261300c60648201529116925063453306669150608401600060405180830381600087803b158015620025c757600080fd5b505af1158015620025dc573d6000803e3d6000fd5b5050505060006040518061010001604052806002808111156200260357620026036200665c565b815273c4375b7de8af5a38a93548eb8453a498222c4ff2602082015273ffffffffffffffffffffffffffffffffffffffff8681166040830152851660608201526080016200264f606090565b8152602081018b905261ffff881660408083019190915287151560609092019190915260125460105491517f1bf64c4100000000000000000000000000000000000000000000000000000000815292935060009273ffffffffffffffffffffffffffffffffffffffff91821692631bf64c4192620026d69287929091169060040162006755565b6000604051808303816000875af1158015620026f6573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200273e919081019062006941565b905060006200275184620f424062006b9f565b62ffffff1661ffff8b16620027688d60646200661c565b620027749190620066d4565b6200278390620f42406200661c565b6200278f9190620066d4565b905062000b388262000b3285848861300c62005137565b60008054610100900460ff1615620027c75750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200290b5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c65640000000000000000000000000000000000000000000000000000828401528251808303840181526060830190935260009290916200286f917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc49160800162006bc6565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052620028a99162006c10565b6000604051808303816000865af19150503d8060008114620028e8576040519150601f19603f3d011682016040523d82523d6000602084013e620028ed565b606091505b509150508080602001905181019062002907919062006c2e565b9150505b919050565b6000546040517f4c63e56200000000000000000000000000000000000000000000000000000000815261271061ffff87161060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff1690634c63e56290602401600060405180830381600087803b1580156200298957600080fd5b505af11580156200299e573d6000803e3d6000fd5b505060005462010000900473ffffffffffffffffffffffffffffffffffffffff169150634c63e562905061ffff871615801590620029e157506103e88761ffff16105b6040518263ffffffff1660e01b815260040162002a02911515815260200190565b600060405180830381600087803b15801562002a1d57600080fd5b505af115801562002a32573d6000803e3d6000fd5b505060005462010000900473ffffffffffffffffffffffffffffffffffffffff169150634c63e5629050600a8811801562002a85575062002a826b033b2e3c9fd0803ce80000006103e86200661c565b88105b6040518263ffffffff1660e01b815260040162002aa6911515815260200190565b600060405180830381600087803b15801562002ac157600080fd5b505af115801562002ad6573d6000803e3d6000fd5b50506000546040517f4c63e562000000000000000000000000000000000000000000000000000000008152600360ff88161060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169250634c63e5629150602401600060405180830381600087803b15801562002b5157600080fd5b505af115801562002b66573d6000803e3d6000fd5b50506012546040517f4acc79ed00000000000000000000000000000000000000000000000000000000815260ff871660048201526000935073ffffffffffffffffffffffffffffffffffffffff9091169150634acc79ed90602401602060405180830381865afa15801562002bdf573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002c05919062006b78565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815291925060009173ffffffffffffffffffffffffffffffffffffffff909116906367b426459062002c649060019060040162006ab7565b602060405180830381865afa15801562002c82573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002ca8919062006ad4565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815291925060009173ffffffffffffffffffffffffffffffffffffffff909116906367b426459062002d079060039060040162006ab7565b602060405180830381865afa15801562002d25573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002d4b919062006ad4565b60115490915073ffffffffffffffffffffffffffffffffffffffff16632ccbc99b83838662002d8b61ffff8e166b033b2e3c9fd0803ce80000006200661c565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b16815273ffffffffffffffffffffffffffffffffffffffff948516600482015293909216602484015262ffffff1660448301526064820152608401600060405180830381600087803b15801562002e0a57600080fd5b505af115801562002e1f573d6000803e3d6000fd5b505060115460125473ffffffffffffffffffffffffffffffffffffffff9182169350632ccbc99b92508591859116634acc79ed60ff8c161562002e6457600062002e67565b60015b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815260ff9091166004820152602401602060405180830381865afa15801562002ebe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002ee4919062006b78565b600262002f0261ffff8f166b033b2e3c9fd0803ce80000006200661c565b62002f0e9190620066d4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b16815273ffffffffffffffffffffffffffffffffffffffff948516600482015293909216602484015262ffffff1660448301526064820152608401600060405180830381600087803b15801562002f8d57600080fd5b505af115801562002fa2573d6000803e3d6000fd5b50506012546011546040517f4533066600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201528682166024820152858216604482015261300c60648201529116925063453306669150608401600060405180830381600087803b1580156200302e57600080fd5b505af115801562003043573d6000803e3d6000fd5b505050506000604051806101000160405280876200306357600062003066565b60015b60028111156200307a576200307a6200665c565b815273c4375b7de8af5a38a93548eb8453a498222c4ff2602082015273ffffffffffffffffffffffffffffffffffffffff858116604083015284166060820152608001620030c6606090565b8152602081018c905261ffff8a1660408083019190915287151560609092019190915260125460105491517f1bf64c4100000000000000000000000000000000000000000000000000000000815292935060009273ffffffffffffffffffffffffffffffffffffffff91821692631bf64c41926200314d9287929091169060040162006755565b6000604051808303816000875af11580156200316d573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620031b5919081019062006941565b90506000620f4240620031ce62ffffff8816826200668b565b620031de61ffff8e168f6200661c565b620031ea91906200661c565b620031f69190620066d4565b90506200320d8262000b3285848a61300c62005137565b505050505050505050505050565b6000546040517f4c63e56200000000000000000000000000000000000000000000000000000000815261271061ffff86161060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff1690634c63e56290602401600060405180830381600087803b1580156200329457600080fd5b505af1158015620032a9573d6000803e3d6000fd5b50506000546040517f4c63e562000000000000000000000000000000000000000000000000000000008152600360ff8a161060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169250634c63e5629150602401600060405180830381600087803b1580156200332457600080fd5b505af115801562003339573d6000803e3d6000fd5b50506000546040517f4c63e562000000000000000000000000000000000000000000000000000000008152601b60ff89161060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169250634c63e5629150602401600060405180830381600087803b158015620033b457600080fd5b505af1158015620033c9573d6000803e3d6000fd5b505060005462010000900473ffffffffffffffffffffffffffffffffffffffff169150634c63e5629050600b881180156200341c5750620034196b033b2e3c9fd0803ce80000006103e86200661c565b88105b6040518263ffffffff1660e01b81526004016200343d911515815260200190565b600060405180830381600087803b1580156200345857600080fd5b505af11580156200346d573d6000803e3d6000fd5b50505050600080620034bd6040805161010081019091528060008152600060208201819052604082018190526060808301829052608083015260a0820181905260c0820181905260e09091015290565b606060008060606000620034d18d62004205565b604080516101008101909152919d509b5093975091955093509150808b620034fb576000620034fe565b60015b60028111156200351257620035126200665c565b815260200173c4375b7de8af5a38a93548eb8453a498222c4ff273ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018f81526020018c61ffff1681526020018a151581525095506200363c8489838a8760408051606096871b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000908116602083015260e896871b7fffffff0000000000000000000000000000000000000000000000000000000000908116603484015295881b811660378301529390951b909316604b85015290931b909216604e82015281516042818303018152606290910190915290565b9450505050506000620f42408462ffffff16620f42406200365e91906200668b565b6200366b9060066200661c565b620f42406200368062ffffff8916826200668b565b6200368d8f60046200661c565b6200369991906200661c565b620036a59190620066d4565b620036b191906200661c565b620036bd9190620066d4565b6012546010546040517f6f33547d00000000000000000000000000000000000000000000000000000000815292935060009273ffffffffffffffffffffffffffffffffffffffff92831692636f33547d92620037229289929091169060040162006755565b6000604051808303816000875af115801562003742573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200378a919081019062006941565b90506200320d8162000b3286858762000b2c620f242c61300c62006a9c565b6012546011546006546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9384169363453306669381169216906367b4264590620038139060019060040162006ab7565b602060405180830381865afa15801562003831573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003857919062006ad4565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906367b4264590620038b09060039060040162006ab7565b602060405180830381865afa158015620038ce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620038f4919062006ad4565b60405160e085901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff938416600482015291831660248301529091166044820152620249f06064820152608401600060405180830381600087803b1580156200397457600080fd5b505af115801562003989573d6000803e3d6000fd5b50506012546011546006546040517f67b4264500000000000000000000000000000000000000000000000000000000815262003ba4955073ffffffffffffffffffffffffffffffffffffffff938416945063d7aa2e359392831692909116906367b4264590620039ff9060019060040162006ab7565b602060405180830381865afa15801562003a1d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003a43919062006ad4565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906367b426459062003a9c9060039060040162006ab7565b602060405180830381865afa15801562003aba573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003ae0919062006ad4565b60405160e085901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff938416600482015291831660248301529091166044820152606401602060405180830381865afa15801562003b5a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003b80919062006c4e565b620249f060405180606001604052806022815260200162021b71602291396200518d565b6012546011546006546040517f67b42645000000000000000000000000000000000000000000000000000000008152620005bc9373ffffffffffffffffffffffffffffffffffffffff9081169363d7aa2e3593908216929116906367b426459062003c159060039060040162006ab7565b602060405180830381865afa15801562003c33573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003c59919062006ad4565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906367b426459062003cb29060019060040162006ab7565b602060405180830381865afa15801562003cd0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003cf6919062006ad4565b60405160e085901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff938416600482015291831660248301529091166044820152606401602060405180830381865afa15801562003d70573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003d96919062006c4e565b620249f060405180606001604052806022815260200162021b4f602291396200518d565b62003dc462004e14565b60405162003dd290620063be565b604051809103906000f08015801562003def573d6000803e3d6000fd5b50601180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92831690811790915560015460405192169162003e4890620063cc565b73ffffffffffffffffffffffffffffffffffffffff928316815291166020820152604001604051809103906000f08015801562003e89573d6000803e3d6000fd5b50601080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905560405162003edd90620063da565b604051809103906000f08015801562003efa573d6000803e3d6000fd5b50601280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283169081179091556011546040517fc67903ea00000000000000000000000000000000000000000000000000000000815292166004830181905260248301529063c67903ea90604401600060405180830381600087803b15801562003f9b57600080fd5b505af115801562003fb0573d6000803e3d6000fd5b5050600054601054604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152601260448201527f554e49535741505f56335f41444150544552000000000000000000000000000060648201526201000090920416925063c657c7189150608401600060405180830381600087803b1580156200406057600080fd5b505af115801562004075573d6000803e3d6000fd5b5050600054601154604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152600f60448201527f554e49535741505f56335f4d4f434b000000000000000000000000000000000060648201526201000090920416925063c657c7189150608401600060405180830381600087803b1580156200412557600080fd5b505af11580156200413a573d6000803e3d6000fd5b5050600054601254604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152601560448201527f554e49535741505f56335f5041544846494e444552000000000000000000000060648201526201000090920416925063c657c7189150608401600060405180830381600087803b158015620041ea57600080fd5b505af1158015620041ff573d6000803e3d6000fd5b50505050565b6000806060818080806200421b60038962006c68565b9050600060036200422d818b62006c8d565b62004239919062006c68565b9050600060036200424c60098c62006c8d565b62004258919062006c68565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff16906367b4264590620042b190600490810162006ab7565b602060405180830381865afa158015620042cf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620042f5919062006ad4565b6006546040517f67b42645000000000000000000000000000000000000000000000000000000008152919a5073ffffffffffffffffffffffffffffffffffffffff16906367b42645906200434f9060039060040162006ab7565b602060405180830381865afa1580156200436d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004393919062006ad4565b604080516003808252608082019092529199506020820160608036833750506006546040517f67b4264500000000000000000000000000000000000000000000000000000000815292995073ffffffffffffffffffffffffffffffffffffffff16916367b4264591506200440d9060019060040162006ab7565b602060405180830381865afa1580156200442b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004451919062006ad4565b8760008151811062004467576200446762006b26565b73ffffffffffffffffffffffffffffffffffffffff92831660209182029290920101526006546040517f67b426450000000000000000000000000000000000000000000000000000000081529116906367b4264590620044cd9060029060040162006ab7565b602060405180830381865afa158015620044eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004511919062006ad4565b8760018151811062004527576200452762006b26565b73ffffffffffffffffffffffffffffffffffffffff92831660209182029290920101526006546040517f67b426450000000000000000000000000000000000000000000000000000000081529116906367b42645906200458d9060059060040162006ab7565b602060405180830381865afa158015620045ab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620045d1919062006ad4565b87600281518110620045e757620045e762006b26565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060005b600381101562004a4d5760005b600381101562004a375760005b600381101562004a215760008560ff1683146200465d57600162004660565b60025b60ff168760ff1685146200467657600162004679565b60025b620046949060ff166b033b2e3c9fd0803ce80000006200661c565b620046a091906200661c565b905060008560ff168314620046b7576001620046ba565b60025b60ff168860ff168614620046d0576002620046d3565b60035b620046ee9060ff166b033b2e3c9fd0803ce80000006200661c565b620046fa91906200661c565b9050601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632ccbc99b8f8e888151811062004750576200475062006b26565b60209081029190910101516012546040517f4acc79ed000000000000000000000000000000000000000000000000000000008152600481018a905273ffffffffffffffffffffffffffffffffffffffff90911690634acc79ed90602401602060405180830381865afa158015620047cb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620047f1919062006b78565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff938416600482015292909116602483015262ffffff16604482015260648101859052608401600060405180830381600087803b1580156200487257600080fd5b505af115801562004887573d6000803e3d6000fd5b50506011548e5173ffffffffffffffffffffffffffffffffffffffff9091169250632ccbc99b91508e9088908110620048c457620048c462006b26565b60200260200101518f601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634acc79ed886040518263ffffffff1660e01b81526004016200492b91815260200190565b602060405180830381865afa15801562004949573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200496f919062006b78565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff938416600482015292909116602483015262ffffff16604482015260648101849052608401600060405180830381600087803b158015620049f057600080fd5b505af115801562004a05573d6000803e3d6000fd5b505050505050808062004a189062006cb2565b9150506200463e565b508062004a2e8162006cb2565b91505062004631565b508062004a448162006cb2565b91505062004624565b50601254601154885173ffffffffffffffffffffffffffffffffffffffff9283169263453306669216908c908b9060ff891690811062004a915762004a9162006b26565b60209081029190910101516040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff9384166004820152918316602483015291909116604482015261300c6064820152608401600060405180830381600087803b15801562004b1c57600080fd5b505af115801562004b31573d6000803e3d6000fd5b50506012546011548a5173ffffffffffffffffffffffffffffffffffffffff9283169450634533066693509116908a9060ff881690811062004b775762004b7762006b26565b60209081029190910101516040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff92831660048201529082166024820152908b166044820152620f242c6064820152608401600060405180830381600087803b15801562004c0257600080fd5b505af115801562004c17573d6000803e3d6000fd5b50505050868360ff168151811062004c335762004c3362006b26565b60209081029190910101516012546040517f4acc79ed00000000000000000000000000000000000000000000000000000000815260ff8516600482015291975073ffffffffffffffffffffffffffffffffffffffff1690634acc79ed90602401602060405180830381865afa15801562004cb1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004cd7919062006b78565b6012546040517f4acc79ed00000000000000000000000000000000000000000000000000000000815260ff8416600482015291965073ffffffffffffffffffffffffffffffffffffffff1690634acc79ed90602401602060405180830381865afa15801562004d4a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004d70919062006b78565b935050505091939550919395565b62004dbc6040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b604051806080016040528062004dd4878787620051df565b815260208101869052600160408201526060018390529050949350505050565b62004e10828260405180602001604052806000815250620056bb565b5050565b60065473ffffffffffffffffffffffffffffffffffffffff16620005bc5760405162004e4090620063e8565b604051809103906000f08015801562004e5d573d6000803e3d6000fd5b50600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216918217905563b36ba20862004ebc670de0b6b3a764000060646200661c565b6040518263ffffffff1660e01b81526004016000604051808303818588803b15801562004ee857600080fd5b505af115801562004efd573d6000803e3d6000fd5b505060028054307fffffffffffffffffffffffff00000000000000000000000000000000000000009182168117909255600180549091169091179055505050565b60408051600380825260808201909252606091602082018380368337019050509050838160008151811062004f775762004f7762006b26565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050828160018151811062004fc85762004fc862006b26565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050818160028151811062005019576200501962006b26565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250509392505050565b600060ff82166200506d57506001919050565b8160ff16600114156200508257506000919050565b8160ff16600214156200509757506002919050565b8160ff166002811115620050af57620050af6200665c565b6040517ffe7995cf000000000000000000000000000000000000000000000000000000008152600401620050e4919062006cee565b60405180910390fd5b8162004e10577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf35838160405162005124919062006d4a565b60405180910390a162004e1082620057dd565b620051756040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b604051806080016040528062004dd487878762005855565b818314620051da577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf358381604051620051c6919062006d4a565b60405180910390a1620051da838362005d23565b505050565b60408051808201909152600081526060602082015260606000855160028111156200520e576200520e6200665c565b1415620053625760006040518060a00160405280858152602001876020015173ffffffffffffffffffffffffffffffffffffffff16815260200142610e1062005258919062006a9c565b81526020018760a0015181526020018760e00151620052a45760c0880151612710906200528690826200668b565b6200529290896200661c565b6200529e9190620066d4565b620052a7565b60005b90526040519091507fc04b8d590000000000000000000000000000000000000000000000000000000090620052e190839060240162006df4565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529150505b6001855160028111156200537a576200537a6200665c565b1415620054d45760008560e00151620053ea5760a0860151620053a190612710906200661c565b60c0870151620053b4906127106200668b565b620053cc876b033b2e3c9fd0803ce80000006200661c565b620053d891906200661c565b620053e49190620066d4565b620053ed565b60005b90506000604051806060016040528086815260200142610e1062005412919062006a9c565b81526020018390526040519091507ff4f18d9000000000000000000000000000000000000000000000000000000000906200545290839060240162006e09565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152925050505b600285516002811115620054ec57620054ec6200665c565b1415620056405760006040518060a00160405280858152602001876020015173ffffffffffffffffffffffffffffffffffffffff16815260200142610e1062005536919062006a9c565b81526020018760a0015181526020018760e00151620055825760c0880151620055629061271062006a9c565b62005570612710896200661c565b6200557c9190620066d4565b62005585565b60005b90526040519091507ff28c04980000000000000000000000000000000000000000000000000000000090620055bf90839060240162006df4565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529150505b8051156200567d576040805180820190915260105473ffffffffffffffffffffffffffffffffffffffff16815260208101919091529050620056b4565b84516040517ffe7995cf000000000000000000000000000000000000000000000000000000008152620050e4919060040162006cee565b9392505050565b620056f682604001511515846040015115151482604051602001620056e1919062006e47565b604051602081830303815290604052620050ed565b604083015115156001148015620057135750604082015115156001145b15620051da576200574f83602001518360200151836040516020016200573a919062006e8a565b6040516020818303038152906040526200518d565b6200577083606001518360600151836040516020016200573a919062006ecd565b825151825151604051620057a59291906200579090859060200162006f10565b60405160208183030381529060405262005e35565b82516020908101518351820151604051620051da93620057c89186910162006f79565b60405160208183030381529060405262005eae565b8062001d11577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f50604051620058439060208082526017908201527f4572726f723a20417373657274696f6e204661696c6564000000000000000000604082015260600190565b60405180910390a162001d1162005f04565b60408051808201909152600081526060602082015260606000855160028111156200588457620058846200665c565b141562005a26576000604051806101000160405280876040015173ffffffffffffffffffffffffffffffffffffffff168152602001876060015173ffffffffffffffffffffffffffffffffffffffff1681526020018562ffffff168152602001876020015173ffffffffffffffffffffffffffffffffffffffff16815260200142610e1062005914919062006a9c565b81526020018760a0015181526020018760e00151620059605760c0880151612710906200594290826200668b565b6200594e90896200661c565b6200595a9190620066d4565b62005963565b60005b815260006020909101526040519091507f414bf3890000000000000000000000000000000000000000000000000000000090620059a590839060240162006fe2565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529150505b60018551600281111562005a3e5762005a3e6200665c565b141562005bea5760008560e0015162005aae5760a086015162005a6590612710906200661c565b60c087015162005a78906127106200668b565b62005a90876b033b2e3c9fd0803ce80000006200661c565b62005a9c91906200661c565b62005aa89190620066d4565b62005ab1565b60005b905060006040518060c00160405280886040015173ffffffffffffffffffffffffffffffffffffffff168152602001886060015173ffffffffffffffffffffffffffffffffffffffff1681526020018662ffffff16815260200142610e1062005b1b919062006a9c565b815260208082019490945260006040918201528051825173ffffffffffffffffffffffffffffffffffffffff908116602483015283860151811660448301528383015162ffffff16606483015260608401516084830152608084015160a483015260a09093015190921660c4808401919091528151808403909101815260e4909201905291820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc7fbf4de000000000000000000000000000000000000000000000000000000001790525090505b60028551600281111562005c025762005c026200665c565b141562005640576000604051806101000160405280876040015173ffffffffffffffffffffffffffffffffffffffff168152602001876060015173ffffffffffffffffffffffffffffffffffffffff1681526020018562ffffff168152602001876020015173ffffffffffffffffffffffffffffffffffffffff16815260200142610e1062005c92919062006a9c565b81526020018760a0015181526020018760e0015162005cde5760c088015162005cbe9061271062006a9c565b62005ccc612710896200661c565b62005cd89190620066d4565b62005ce1565b60005b815260006020909101526040519091507fdb3e21980000000000000000000000000000000000000000000000000000000090620055bf90839060240162006fe2565b80821462004e10577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f5060405162005db19060208082526022908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b75696e60408201527f745d000000000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a88160405162005dea91906200705e565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a88260405162005e239190620070aa565b60405180910390a162004e1062005f04565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614620051da577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf35838160405162005e9a919062006d4a565b60405180910390a1620051da838362006087565b62005eba8383620061b3565b620051da577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf35838160405162005ef0919062006d4a565b60405180910390a1620051da83836200627d565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620060595760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000009282019290925260016060820152600091907f70ca10bbd0dbfd9020a9f4b13402c16cb120705e0d1c0aeab10fa353ae586fc490608001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905262005fd6929160200162006bc6565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052620060109162006c10565b6000604051808303816000865af19150503d80600081146200604f576040519150601f19603f3d011682016040523d82523d6000602084013e62006054565b606091505b505050505b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055565b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462004e10577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f50604051620061419060208082526025908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b61646460408201527f726573735d000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f816040516200617a9190620070e8565b60405180910390a17f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f8260405162005e2391906200714a565b805182516001911415620062735760005b83518110156200626c57828181518110620061e357620061e362006b26565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684828151811062006225576200622562006b26565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016146200625757600091505b80620062638162006cb2565b915050620061c4565b5062006277565b5060005b92915050565b620062898282620061b3565b62004e10577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f50604051620063149060208082526023908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b62797460408201527f65735d0000000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17fd26e16cad4548705e4c9e2d94f98ee91c289085ee425594fd5635fa2964ccf18816040516200634d919062007188565b60405180910390a17fd26e16cad4548705e4c9e2d94f98ee91c289085ee425594fd5635fa2964ccf188260405162005e239190620071e2565b613960806200722183390190565b611852806200ab8183390190565b615f8c806200c3d383390190565b611893806201235f83390190565b611c0e8062013bf283390190565b61221a806201580083390190565b6126e48062017a1a83390190565b617a51806201a0fe83390190565b803560ff811681146200290b57600080fd5b803561ffff811681146200290b57600080fd5b801515811462001d1157600080fd5b600080600080600060a086880312156200644357600080fd5b853594506200645560208701620063f6565b93506200646560408701620063f6565b9250620064756060870162006408565b9150608086013562006487816200641b565b809150509295509295909350565b600060208284031215620064a857600080fd5b8135620056b4816200641b565b600080600080600060a08688031215620064ce57600080fd5b85359450620064556020870162006408565b60008060008060008060c08789031215620064fa57600080fd5b863595506200650c6020880162006408565b94506200651c6040880162006408565b93506200652c60608801620063f6565b925060808701356200653e816200641b565b915060a087013562006550816200641b565b809150509295509295509295565b60008060008060008060c087890312156200657857600080fd5b863595506200658a60208801620063f6565b94506200659a60408801620063f6565b93506200652c6060880162006408565b73ffffffffffffffffffffffffffffffffffffffff8116811462001d1157600080fd5b600060208284031215620065e057600080fd5b8135620056b481620065aa565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620066575762006657620065ed565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600082821015620066a057620066a0620065ed565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082620066e657620066e6620066a5565b500490565b60038110620066fe57620066fe6200665c565b9052565b600081518084526020808501945080840160005b838110156200674a57815173ffffffffffffffffffffffffffffffffffffffff168752958201959082019060010162006716565b509495945050505050565b6040815262006769604082018451620066eb565b6000602084015173ffffffffffffffffffffffffffffffffffffffff808216606085015280604087015116608085015250506060840151620067c360a084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060808401516101008060c0850152620067e261014085018362006702565b915060a086015160e085015260c0860151818501525060e08501516200680d61012085018215159052565b5073ffffffffffffffffffffffffffffffffffffffff841660208401529050620056b4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff8111828210171562006887576200688762006832565b60405290565b6040805190810167ffffffffffffffff8111828210171562006887576200688762006832565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715620068fd57620068fd62006832565b604052919050565b60005b838110156200692257818101518382015260200162006908565b83811115620041ff5750506000910152565b80516200290b816200641b565b600060208083850312156200695557600080fd5b825167ffffffffffffffff808211156200696e57600080fd5b90840190608082870312156200698357600080fd5b6200698d62006861565b8251828111156200699d57600080fd5b830160408189031215620069b057600080fd5b620069ba6200688d565b8151620069c781620065aa565b81528186015184811115620069db57600080fd5b80830192505088601f830112620069f157600080fd5b81518481111562006a065762006a0662006832565b62006a38877fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601620068b3565b9450808552898782850101111562006a4f57600080fd5b62006a608188870189860162006905565b50808601849052825250828401518185015262006a806040840162006934565b6040820152606083015160608201528094505050505092915050565b6000821982111562006ab25762006ab2620065ed565b500190565b60208101600b831062006ace5762006ace6200665c565b91905290565b60006020828403121562006ae757600080fd5b8151620056b481620065aa565b60408152600062006b09604083018562006702565b828103602084015262006b1d818562006702565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff821660ff81141562006b6f5762006b6f620065ed565b60010192915050565b60006020828403121562006b8b57600080fd5b815162ffffff81168114620056b457600080fd5b600062ffffff8381169083168181101562006bbe5762006bbe620065ed565b039392505050565b7fffffffff00000000000000000000000000000000000000000000000000000000831681526000825162006c0281600485016020870162006905565b919091016004019392505050565b6000825162006c2481846020870162006905565b9190910192915050565b60006020828403121562006c4157600080fd5b8151620056b4816200641b565b60006020828403121562006c6157600080fd5b5051919050565b600060ff83168062006c7e5762006c7e620066a5565b8060ff84160691505092915050565b600060ff83168062006ca35762006ca3620066a5565b8060ff84160491505092915050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141562006ce75762006ce7620065ed565b5060010190565b60208101620062778284620066eb565b6000815180845262006d1881602086016020860162006905565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60408152600560408201527f4572726f720000000000000000000000000000000000000000000000000000006060820152608060208201526000620056b4608083018462006cfe565b6000815160a0845262006daa60a085018262006cfe565b905073ffffffffffffffffffffffffffffffffffffffff60208401511660208501526040830151604085015260608301516060850152608083015160808501528091505092915050565b602081526000620056b4602083018462006d93565b60208152600082516060602084015262006e27608084018262006cfe565b905060208401516040840152604084015160608401528091505092915050565b6000825162006e5b81846020870162006905565b7f446966666572656e7420666f756e6420706172616d7300000000000000000000920191825250601601919050565b6000825162006e9e81846020870162006905565b7f71312e616d6f756e7420213d2071322e616d6f756e7400000000000000000000920191825250601601919050565b6000825162006ee181846020870162006905565b7f71312e676173557361676520213d2071322e6761735573616765000000000000920191825250601a01919050565b6000825162006f2481846020870162006905565b7f71312e6d756c746943616c6c2e74617267657420213d2071322e6d756c7469439201918252507f616c6c2e746172676574000000000000000000000000000000000000000000006020820152602a01919050565b6000825162006f8d81846020870162006905565b7f71312e6d756c746943616c6c2e63616c6c4461746120213d2071322e6d756c749201918252507f6943616c6c2e63616c6c446174610000000000000000000000000000000000006020820152602e01919050565b610100810162006277828473ffffffffffffffffffffffffffffffffffffffff80825116835280602083015116602084015262ffffff60408301511660408401528060608301511660608401526080820151608084015260a082015160a084015260c082015160c08401528060e08301511660e0840152505050565b6040815260006200709c60408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b905082602083015292915050565b6040815260006200709c60408301600a81527f2020202041637475616c00000000000000000000000000000000000000000000602082015260400190565b6040815260006200712660408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b905073ffffffffffffffffffffffffffffffffffffffff8316602083015292915050565b6040815260006200712660408301600a81527f2020202041637475616c00000000000000000000000000000000000000000000602082015260400190565b604081526000620071c660408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b8281036020840152620071da818562006cfe565b949350505050565b604081526000620071c660408301600a81527f2020202041637475616c0000000000000000000000000000000000000000000060208201526040019056fe60806040523480156200001157600080fd5b5060405162003960380380620039608339810160408190526200003491620002a2565b8151829082906200004d90600290602085019062000133565b5080516200006390600390602084019062000133565b506000601260405162000076906200019d565b6060808252600790820152664352564d6f636b60c81b608082015260a0602082018190526015908201527f43525620666f72204375727665506f6f6c4d6f636b000000000000000000000060c082015260ff909116604082015260e001604051809103906000f080158015620000f0573d6000803e3d6000fd5b50600080546001600160a01b039092166001600160a01b03199283168117909155600180549092161790555050670de0b6b3a7640000600755506200030c915050565b8280548282559060005260206000209081019282156200018b579160200282015b828111156200018b57825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019062000154565b5062000199929150620001ab565b5090565b611758806200220883390190565b5b80821115620001995760008155600101620001ac565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b0381168114620001f057600080fd5b919050565b600082601f8301126200020757600080fd5b815160206001600160401b0380831115620002265762000226620001c2565b8260051b604051601f19603f830116810181811084821117156200024e576200024e620001c2565b6040529384528581018301938381019250878511156200026d57600080fd5b83870191505b8482101562000297576200028782620001d8565b8352918301919083019062000273565b979650505050505050565b60008060408385031215620002b657600080fd5b82516001600160401b0380821115620002ce57600080fd5b620002dc86838701620001f5565b93506020850151915080821115620002f357600080fd5b506200030285828601620001f5565b9150509250929050565b611eec806200031c6000396000f3fe608060405234801561001057600080fd5b506004361061030a5760003560e01c806382c630661161019c578063bb7b8b80116100ee578063e2e7d26411610097578063f851a44011610071578063f851a44014610597578063fc0c546a1461059e578063fee3f7f91461036257600080fd5b8063e2e7d26414610576578063ecb586a514610584578063f446c1d01461036257600080fd5b8063d96c7fce116100c8578063d96c7fce14610369578063dd62ed3e14610568578063ddca3f431461036257600080fd5b8063bb7b8b801461053a578063c661065714610542578063cc2b27d71461055557600080fd5b80639fdaea0c11610150578063b739953e1161012a578063b739953e14610501578063b91434d114610514578063b9947eb01461052757600080fd5b80639fdaea0c146104db578063a6417ed6146104ee578063b4b577ad1461036257600080fd5b80638ea875f3116101815780638ea875f3146104bf57806395d89b411461033557806399bd2ba5146104c857600080fd5b806382c630661461048c57806385ca3c6f146104ac57600080fd5b80633df02124116102605780635e0d443f1161020957806371035418116101e3578063710354181461045457806376a2f0f0146103625780637b475b681461046757600080fd5b80635e0d443f1461042d57806363543f061461036257806370a082311461044057600080fd5b80634903b0d11161023a5780634903b0d1146104075780635409491a1461036257806356ac35031461041a57600080fd5b80633df02124146103e15780634469e30e146103695780634515cef3146103f457600080fd5b806318160ddd116102c257806323746eb81161029c57806323746eb814610393578063313ce567146103625780633883e119146103cb57600080fd5b806318160ddd146103625780631a4d01d21461037e5780632081066c1461036257600080fd5b806307211ef7116102f357806307211ef71461034f578063140522881461036257806314f059791461036957600080fd5b8063065a80d81461030f57806306fdde0314610335575b600080fd5b61032261031d36600461192d565b6105be565b6040519081526020015b60405180910390f35b6040805160208101825260008152905161032c9190611974565b61032261035d3660046119c5565b610677565b6000610322565b6103716106c7565b60405161032c9190611a01565b61039161038c366004611a32565b6106f2565b005b6103a66103a136600461192d565b6107e6565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161032c565b6103226103d9366004611a79565b600092915050565b6103916103ef366004611ab1565b610826565b610391610402366004611b88565b610950565b610322610415366004611bb3565b610b1c565b6103916104283660046119c5565b610b31565b61032261043b3660046119c5565b610b92565b61032261044e366004611bf0565b50600090565b610391610462366004611bb3565b600755565b610391610475366004611c0b565b600f9190910b600090815260066020526040902055565b6001546103a69073ffffffffffffffffffffffffffffffffffffffff1681565b6103716104ba366004611c35565b610bce565b61032260075481565b6103916104d6366004611c73565b610c04565b6103916104e9366004611c8f565b610c63565b6103916104fc366004611ab1565b610de6565b6103a661050f36600461192d565b6111a6565b6103916105223660046119c5565b6111be565b6103a6610535366004611bb3565b61121f565b600754610322565b6103a6610550366004611bb3565b611234565b610322610563366004611cac565b611249565b6103226103d9366004611cd8565b61032261044e366004611bb3565b610391610592366004611d02565b61127f565b60006103a6565b6000546103a69073ffffffffffffffffffffffffffffffffffffffff1681565b6000600282600f0b815481106105d6576105d6611d26565b6000918252602090912001546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa15801561064d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106719190611d55565b92915050565b600f83810b60009081526005602090815260408083209386900b8352929052908120546b033b2e3c9fd0803ce8000000906106b3908490611d9d565b6106bd9190611dda565b90505b9392505050565b6106cf6118f8565b604051806060016040528060008152602001600081526020016000815250905090565b6000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810185905273ffffffffffffffffffffffffffffffffffffffff909116906379cc6790906044016020604051808303816000875af1158015610769573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078d9190611e15565b506107e133826002856fffffffffffffffffffffffffffffffff16815481106107b8576107b8611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169190611402565b505050565b6000600282600f0b815481106107fe576107fe611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1692915050565b6000610833858585610b92565b9050818110156108ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f437572766556314d6f636b3a20494e53554646494349454e545f4f555450555460448201527f5f414d4f554e540000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61091f3330856002896fffffffffffffffffffffffffffffffff16815481106108f5576108f5611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169291906114d6565b61094933826002876fffffffffffffffffffffffffffffffff16815481106107b8576107b8611d26565b5050505050565b60005b6003811015610a7f57600083826003811061097057610970611d26565b60200201511115610a6d576002818154811061098e5761098e611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff166323b872dd33308685600381106109c9576109c9611d26565b60200201516040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff938416600482015292909116602483015260448201526064016020604051808303816000875af1158015610a47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6b9190611e15565b505b80610a7781611e32565b915050610953565b506000546040517f40c10f190000000000000000000000000000000000000000000000000000000081523360048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f19906044015b6020604051808303816000875af1158015610af8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e19190611e15565b6000600282815481106105d6576105d6611d26565b600f83810b60009081526005602090815260408083209386900b835292905220819055610b6a6b033b2e3c9fd0803ce80000008261153a565b600f92830b60009081526005602090815260408083209690950b825294909452919092205550565b600f83810b60009081526004602090815260408083209386900b8352929052908120546b033b2e3c9fd0803ce8000000906106b3908490611d9d565b610bd66118f8565b6040805160608181019092529085906003908390839080828437600092019190915250919695505050505050565b6000546040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052909116906340c10f1990604401610ad9565b60005b6003811015610d88576000838260038110610c8357610c83611d26565b60200201351115610d765760028181548110610ca157610ca1611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33858460038110610cdb57610cdb611d26565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff9093166004840152602002013560248201526044016020604051808303816000875af1158015610d50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d749190611e15565b505b80610d8081611e32565b915050610c66565b506000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906379cc679090604401610ad9565b60006002856fffffffffffffffffffffffffffffffff1681548110610e0d57610e0d611d26565b60009182526020822001546003805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff8816908110610e5957610e59611d26565b60009182526020822001546002805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff8816908110610ea557610ea5611d26565b60009182526020822001546003805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff8916908110610ef157610ef1611d26565b600091825260208220015473ffffffffffffffffffffffffffffffffffffffff169150610f1f898989610677565b905085811015610fb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f437572766556314d6f636b3a20494e53554646494349454e545f4f555450555460448201527f5f414d4f554e540000000000000000000000000000000000000000000000000060648201526084016108c1565b610fd373ffffffffffffffffffffffffffffffffffffffff851633308a6114d6565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526024820189905285169063095ea7b3906044016020604051808303816000875af1158015611048573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061106c9190611e15565b506040517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8616906340c10f1990604401600060405180830381600087803b1580156110db57600080fd5b505af11580156110ef573d6000803e3d6000fd5b50506040517f1e9a69500000000000000000000000000000000000000000000000000000000081523060048201526024810184905273ffffffffffffffffffffffffffffffffffffffff86169250631e9a69509150604401600060405180830381600087803b15801561116157600080fd5b505af1158015611175573d6000803e3d6000fd5b5061119b9250505073ffffffffffffffffffffffffffffffffffffffff83163383611402565b505050505050505050565b6000600382600f0b815481106107fe576107fe611d26565b600f83810b60009081526004602090815260408083209386900b8352929052208190556111f76b033b2e3c9fd0803ce80000008261153a565b600f92830b60009081526004602090815260408083209690950b825294909452919092205550565b6000600382815481106107fe576107fe611d26565b6000600282815481106107fe576107fe611d26565b600f81900b6000908152600660205260408120546b033b2e3c9fd0803ce8000000906112759085611d9d565b6106c09190611dda565b60005b60038110156113a457600082826003811061129f5761129f611d26565b6020020151111561139257600281815481106112bd576112bd611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb338484600381106112f7576112f7611d26565b60200201516040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af115801561136c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113909190611e15565b505b8061139c81611e32565b915050611282565b506000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810184905273ffffffffffffffffffffffffffffffffffffffff909116906379cc679090604401610ad9565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526107e19084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526116a0565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526115349085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611454565b50505050565b60408051808201909152600281527f4d330000000000000000000000000000000000000000000000000000000000006020820152600090826115a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c19190611974565b5060006115b7600284611dda565b90506b033b2e3c9fd0803ce80000006115f0827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611e6b565b6115fa9190611dda565b8411156040518060400160405280600281526020017f4d310000000000000000000000000000000000000000000000000000000000008152509061166b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c19190611974565b5082816116846b033b2e3c9fd0803ce800000087611d9d565b61168e9190611e82565b6116989190611dda565b949350505050565b6000611702826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166117ac9092919063ffffffff16565b8051909150156107e157808060200190518101906117209190611e15565b6107e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016108c1565b60606106bd848460008585843b61181f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108c1565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516118489190611e9a565b60006040518083038185875af1925050503d8060008114611885576040519150601f19603f3d011682016040523d82523d6000602084013e61188a565b606091505b509150915061189a8282866118a5565b979650505050505050565b606083156118b45750816106c0565b8251156118c45782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c19190611974565b60405180606001604052806003906020820280368337509192915050565b8035600f81900b811461192857600080fd5b919050565b60006020828403121561193f57600080fd5b6106c082611916565b60005b8381101561196357818101518382015260200161194b565b838111156115345750506000910152565b6020815260008251806020840152611993816040850160208701611948565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000606084860312156119da57600080fd5b6119e384611916565b92506119f160208501611916565b9150604084013590509250925092565b60608101818360005b6003811015611a29578151835260209283019290910190600101611a0a565b50505092915050565b600080600060608486031215611a4757600080fd5b833592506119f160208501611916565b806060810183101561067157600080fd5b8015158114611a7657600080fd5b50565b60008060808385031215611a8c57600080fd5b611a968484611a57565b91506060830135611aa681611a68565b809150509250929050565b60008060008060808587031215611ac757600080fd5b611ad085611916565b9350611ade60208601611916565b93969395505050506040820135916060013590565b600082601f830112611b0457600080fd5b6040516060810181811067ffffffffffffffff82111715611b4e577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604052806060840185811115611b6357600080fd5b845b81811015611b7d578035835260209283019201611b65565b509195945050505050565b60008060808385031215611b9b57600080fd5b611ba58484611af3565b946060939093013593505050565b600060208284031215611bc557600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461192857600080fd5b600060208284031215611c0257600080fd5b6106c082611bcc565b60008060408385031215611c1e57600080fd5b611c2783611916565b946020939093013593505050565b600080600060e08486031215611c4a57600080fd5b611c548585611a57565b9250611c638560608601611a57565b915060c084013590509250925092565b60008060408385031215611c8657600080fd5b611c2783611bcc565b60008060808385031215611ca257600080fd5b611ba58484611a57565b60008060408385031215611cbf57600080fd5b82359150611ccf60208401611916565b90509250929050565b60008060408385031215611ceb57600080fd5b611cf483611bcc565b9150611ccf60208401611bcc565b60008060808385031215611d1557600080fd5b82359150611ccf8460208501611af3565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215611d6757600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611dd557611dd5611d6e565b500290565b600082611e10577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600060208284031215611e2757600080fd5b81516106c081611a68565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611e6457611e64611d6e565b5060010190565b600082821015611e7d57611e7d611d6e565b500390565b60008219821115611e9557611e95611d6e565b500190565b60008251611eac818460208701611948565b919091019291505056fea2646970667358221220a76213374b33de2cb1c5d61e9c1133f6d8163c7b90c32a6142a6f4fd98fe430364736f6c634300080a003360a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a00336101606040523480156200001257600080fd5b5060405162001852380380620018528339810160408190526200003591620003a3565b6000805460ff191690558585828260c882826001600160a01b0381166200006f57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000ae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d49190620004de565b6001600160a01b0316608052508051620000f6906002906020840190620002ca565b505060a052506001600160a01b0382166200012457604051635919af9760e11b815260040160405180910390fd5b6001600160a01b03821660c0819052670de0b6b3a764000060e05260408051630176f71760e71b815290516000929163bb7b8b809160048083019260209291908290030181865afa1580156200017e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001a4919062000503565b9050620001b1816200022a565b505050506001600160a01b0384161580620001d357506001600160a01b038316155b80620001e657506001600160a01b038216155b156200020557604051635919af9760e11b815260040160405180910390fd5b506001600160a01b039283166101005290821661012052166101405250620005d09050565b8062000249576040516309aadd6f60e41b815260040160405180910390fd5b60018190557f82e7ee47180a631312683eeb2a85ad264c9af490d54de5a75bbdb95b968c6de2816200027b8162000296565b6040805192835260208301919091520160405180910390a150565b60a05160009061271090620002ac908262000533565b620002b890846200054e565b620002c4919062000570565b92915050565b828054620002d89062000593565b90600052602060002090601f016020900481019282620002fc576000855562000347565b82601f106200031757805160ff191683800117855562000347565b8280016001018555821562000347579182015b82811115620003475782518255916020019190600101906200032a565b506200035592915062000359565b5090565b5b808211156200035557600081556001016200035a565b80516001600160a01b03811681146200038857600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60008060008060008060c08789031215620003bd57600080fd5b620003c88762000370565b95506020620003d981890162000370565b9550620003e96040890162000370565b9450620003f96060890162000370565b9350620004096080890162000370565b60a08901519093506001600160401b03808211156200042757600080fd5b818a0191508a601f8301126200043c57600080fd5b8151818111156200045157620004516200038d565b604051601f8201601f19908116603f011681019083821181831017156200047c576200047c6200038d565b816040528281528d868487010111156200049557600080fd5b600093505b82841015620004b957848401860151818501870152928501926200049a565b82841115620004cb5760008684830101525b8096505050505050509295509295509295565b600060208284031215620004f157600080fd5b620004fc8262000370565b9392505050565b6000602082840312156200051657600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156200054957620005496200051d565b500190565b60008160001904831182151516156200056b576200056b6200051d565b500290565b6000826200058e57634e487b7160e01b600052601260045260246000fd5b500490565b600181811c90821680620005a857607f821691505b60208210811415620005ca57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c05160e0516101005161012051610140516111e86200066a6000396000818161023501526108c8015260008181610383015261080901526000818161033901526107620152600081816103120152610a250152600081816101b001526109890152600081816101760152610c170152600081816102eb015281816103db01528181610557015261068f01526111e86000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c80639a6fc8f5116100cd578063b09ad8a011610081578063d62ada1111610066578063d62ada1114610376578063e5693f411461037e578063feaf968c146103a557600080fd5b8063b09ad8a01461035b578063bc489a651461036357600080fd5b8063a50cf2c8116100b2578063a50cf2c8146102e6578063a834559e1461030d578063ab0ca0e11461033457600080fd5b80639a6fc8f514610293578063a384d6ff146102dd57600080fd5b8063427cb6fe116101245780635c975abb116101095780635c975abb1461025f5780637284e416146102765780638456cb591461028b57600080fd5b8063427cb6fe1461023057806354fd4d501461025757600080fd5b8063313ce56711610155578063313ce567146101f75780633f4ba83a146102115780633fd0875f1461021b57600080fd5b806312b495a814610171578063218751b2146101ab575b600080fd5b6101987f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101a2565b6101ff600881565b60405160ff90911681526020016101a2565b6102196103ad565b005b610223600381565b6040516101a29190610dd7565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b610198600181565b60005460ff165b60405190151581526020016101a2565b61027e61049b565b6040516101a29190610e18565b610219610529565b6102a66102a1366004610ea3565b610615565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a0016101a2565b61019860015481565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b6101987f000000000000000000000000000000000000000000000000000000000000000081565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b61019861064f565b610219610371366004610ec7565b610661565b610266600181565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b6102a6610751565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa158015610437573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061045b9190610ee0565b610491576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610499610a67565b565b600280546104a890610f02565b80601f01602080910402602001604051908101604052809291908181526020018280546104d490610f02565b80156105215780601f106104f657610100808354040283529160200191610521565b820191906000526020600020905b81548152906001019060200180831161050457829003601f168201915b505050505081565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa1580156105b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105d79190610ee0565b61060d576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610499610b4d565b60008060008060006040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061065c600154610c0d565b905090565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156106eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070f9190610ee0565b610745576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61074e81610c56565b50565b6000806000806000806000806000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156107cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ef9190610f56565b939d50919b509950975095506108078a8a8989610cd8565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610872573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108969190610f56565b9398509196509450925090506108ae85858484610cd8565b888412156108c6578499508398508297508196508095505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610931573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109559190610f56565b93985091965094509250905061096d85858484610cd8565b88841215610985578499508398508297508196508095505b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb7b8b806040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a169190610fae565b9050610a2181610d73565b90507f0000000000000000000000000000000000000000000000000000000000000000610a4e828c610ff6565b610a5891906110e1565b99505050505050509091929394565b60005460ff16610ad8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff1615610bba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610acf565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b233390565b6000612710610c3c7f000000000000000000000000000000000000000000000000000000000000000082611149565b610c469084611161565b610c50919061119e565b92915050565b80610c8d576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190557f82e7ee47180a631312683eeb2a85ad264c9af490d54de5a75bbdb95b968c6de281610cbd81610c0d565b6040805192835260208301919091520160405180910390a150565b60008313610d12576040517f56e05d2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8369ffffffffffffffffffff168169ffffffffffffffffffff161080610d36575081155b15610d6d576040517fb1cf675500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60015460009080831015610db3576040517fb416da7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610dbe82610c0d565b905080841115610dcf579392505050565b509192915050565b6020810160068310610e12577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b600060208083528351808285015260005b81811015610e4557858101830151858201604001528201610e29565b81811115610e57576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b69ffffffffffffffffffff8116811461074e57600080fd5b600060208284031215610eb557600080fd5b8135610ec081610e8b565b9392505050565b600060208284031215610ed957600080fd5b5035919050565b600060208284031215610ef257600080fd5b81518015158114610ec057600080fd5b600181811c90821680610f1657607f821691505b60208210811415610f50577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600080600080600060a08688031215610f6e57600080fd5b8551610f7981610e8b565b809550506020860151935060408601519250606086015191506080860151610fa081610e8b565b809150509295509295909350565b600060208284031215610fc057600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60008413600084138583048511828216161561103757611037610fc7565b7f8000000000000000000000000000000000000000000000000000000000000000600087128682058812818416161561107257611072610fc7565b6000871292508782058712848416161561108e5761108e610fc7565b878505871281841616156110a4576110a4610fc7565b505050929093029392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826110f0576110f06110b2565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f80000000000000000000000000000000000000000000000000000000000000008314161561114457611144610fc7565b500590565b6000821982111561115c5761115c610fc7565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561119957611199610fc7565b500290565b6000826111ad576111ad6110b2565b50049056fea2646970667358221220226b667ed6fc6db7c8ec1377cc84dae524e2dc572320ead4a7092944a6b912de64736f6c634300080a00336102606040523480156200001257600080fd5b5060405162005f8c38038062005f8c833981016040819052620000359162000ba4565b83838383600384846001600160a01b03821615806200005b57506001600160a01b038116155b156200007a57604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038216608081905260408051632f7a188160e01b81529051632f7a1881916004808201926020929091908290030181865afa158015620000c5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000eb919062000c01565b6001600160a01b0390811660a05290811660c05260016000558416151590506200012857604051635919af9760e11b815260040160405180910390fd5b608051604051630f67c5bd60e41b81526001600160a01b0385811660048301529091169063f67c5bd090602401602060405180830381865afa15801562000173573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000199919062000c26565b620001c757604051634c607af960e11b81526001600160a01b03841660048201526024015b60405180910390fd5b6001600160a01b038084166101e081905261020052821661022052610240819052620001f460006200090a565b6001600160a01b031660e0526200020c60016200090a565b6001600160a01b0316610100526200022560026200090a565b6001600160a01b0316610120526200023e60036200090a565b6001600160a01b031661014052620002576000620009fd565b6001600160a01b031661016052620002706001620009fd565b6001600160a01b031661018052620002896002620009fd565b6001600160a01b03166101a052620002a26003620009fd565b6001600160a01b039081166101c05260e051161580620002cc5750610100516001600160a01b0316155b15620002eb57604051635919af9760e11b815260040160405180910390fd5b600281118015620003065750610120516001600160a01b0316155b156200032557604051635919af9760e11b815260040160405180910390fd5b600381118015620003405750610140516001600160a01b0316155b156200035f57604051635919af9760e11b815260040160405180910390fd5b60805160e051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620003ac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003d2919062000c26565b620004005760e051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b60805161010051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa1580156200044e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000474919062000c26565b620004a35761010051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b60028111801562000525575060805161012051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620004fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000523919062000c26565b155b15620005555761012051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b600381118015620005d7575060805161014051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620005af573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005d5919062000c26565b155b15620006075761014051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b610160516001600160a01b03161580159062000694575060805161016051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa1580156200066c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000692919062000c26565b155b15620006c45761016051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b610180516001600160a01b03161580159062000751575060805161018051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa15801562000729573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200074f919062000c26565b155b15620007815761018051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b6101a0516001600160a01b0316158015906200080e57506080516101a051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620007e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200080c919062000c26565b155b156200083e576101a051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b6101c0516001600160a01b031615801590620008cb57506080516101c051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620008a3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008c9919062000c26565b155b15620008fb576101c051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b50505050505050505062000c66565b60c05160405163c661065760e01b8152600481018390526000916001600160a01b03169063c661065790602401602060405180830381865afa92505050801562000973575060408051601f3d908101601f19168201909252620009709181019062000c01565b60015b6200097e5762000984565b92915050565b60c05160405163046e8dd760e31b8152600f84900b60048201526001600160a01b03909116906323746eb8906024015b602060405180830381865afa925050508015620009f0575060408051601f3d908101601f19168201909252620009ed9181019062000c01565b60015b6200097e57506000919050565b610220516000906001600160a01b03161562000a1e576200097e8262000ac0565b60c051604051630b9947eb60e41b8152600481018490526001600160a01b039091169063b9947eb090602401602060405180830381865afa92505050801562000a86575060408051601f3d908101601f1916820190925262000a839181019062000c01565b60015b6200097e5760c051604051635b9cca9f60e11b8152600f84900b60048201526001600160a01b039091169063b739953e90602401620009b4565b60008162000ad4576200097e600062000b17565b610220516001600160a01b031663c661065762000af360018562000c40565b6040518263ffffffff1660e01b8152600401620009b491815260200190565b919050565b600081600f0b6000141562000b2b575060e0515b81600f0b6001141562000b3e5750610100515b81600f0b6002141562000b515750610120515b81600f0b6003141562000b645750610140515b6001600160a01b03811662000b12576040516334769e6f60e21b815260040160405180910390fd5b80516001600160a01b038116811462000b1257600080fd5b6000806000806080858703121562000bbb57600080fd5b62000bc68562000b8c565b935062000bd66020860162000b8c565b925062000be66040860162000b8c565b915062000bf66060860162000b8c565b905092959194509250565b60006020828403121562000c1457600080fd5b62000c1f8262000b8c565b9392505050565b60006020828403121562000c3957600080fd5b5051919050565b60008282101562000c6157634e487b7160e01b600052601160045260246000fd5b500390565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e051610200516102205161024051614fa962000fe36000396000818161078301528181613708015281816138bf015281816139d901528181613e0f0152613f01015260006105de01526000818161067501528181611f680152818161239f0152818161278901528181612e6b01528181612f0901526131ed015260006108ad01526000818161059c015261288b0152600081816103d4015261285c015260008181610605015261282d0152600081816106af01526127fe015260008181610876015281816126630152818161363501528181613f6b01526146640152600081816104d7015281816126340152818161356501528181613e7901526145480152600081816107f3015281816126050152818161349501528181613d85015261442c015260008181610448015281816125d6015281816133c501528181613cb901526143100152600081816107350152818161091a015281816109e701528181610a7701528181610b6f01528181610bfe01528181610c9501528181610d2601528181611139015281816111b1015281816112ee0152818161144101528181611578015281816115c00152818161166d015281816116b5015281816117660152818161179b01528181611ac501528181611b4301528181611ccd01528181611d4501528181611dea01528181611fb20152818161206b015281816120a00152818161213b0152818161245e015281816124cb0152818161255c01528181612aa901528181612bc801528181612ca2015281816142e801528181614404015281816145200152818161463c01526147840152600081816104fe0152818161291401528181614055015261482b01526000818161075c01528181610ec9015281816118a601528181611ef4015281816122450152818161270101528181612aff01528181612b9901528181612cf801528181612da0015281816130630152818161311a01528181613215015281816132f8015281816133ed015281816134bd0152818161358d0152818161365d01528181613bf401528181613ce401528181613dad01528181613ea101528181613f93015281816140dd015281816141910152818161423b0152818161435e0152818161447a01528181614596015281816146b20152818161475501526148950152614fa96000f3fe608060405234801561001057600080fd5b50600436106103a45760003560e01c806379bea664116101e9578063cc2b27d71161010f578063e2e7d264116100ad578063f446c1d01161007c578063f446c1d014610898578063f851a440146108a0578063fc0c546a146108a8578063fee3f7f9146108cf57600080fd5b8063e2e7d26414610838578063ec026ca71461084b578063ecb586a51461085e578063ef14101e1461087157600080fd5b8063d21220a7116100e9578063d21220a7146107ee578063d96c7fce14610815578063dd62ed3e1461081d578063ddca3f431461083057600080fd5b8063cc2b27d7146107b3578063ce30bbdb146107c6578063cf023dd0146107db57600080fd5b8063b4b577ad11610187578063bd90df7011610156578063bd90df7014610730578063c12c21c014610757578063c21ee1621461077e578063c6610657146107a557600080fd5b8063b4b577ad146106ff578063b739953e14610707578063b9947eb01461071a578063bb7b8b801461072857600080fd5b80638ba51dfc116101c35780638ba51dfc146106aa57806395d89b41146106d15780639fdaea0c146106d9578063a6417ed6146106ec57600080fd5b806379bea6641461065d57806382c630661461067057806385ca3c6f1461069757600080fd5b806333d2ebf2116102ce57806357d788751161026c5780636e1d82711161023b5780636e1d82711461060057806370a082311461062757806376a2f0f01461063a57806378aa73a41461064257600080fd5b806357d78875146105975780635e0d443f146105be57806363543f06146105d157806364a89bca146105d957600080fd5b80634469e30e116102a85780634469e30e146105615780634515cef3146105695780634903b0d11461057c5780635409491a1461058f57600080fd5b806333d2ebf2146105285780633883e1191461053b5780633df021241461054e57600080fd5b806318160ddd1161034657806323746eb81161031557806323746eb8146104bf57806325be124e146104d25780632f7a1881146104f9578063313ce5671461052057600080fd5b806318160ddd146104875780631a4d01d21461048f5780631af4de83146104a45780632081066c146104b757600080fd5b806307211ef71161038257806307211ef7146104305780630dfe168114610443578063140522881461046a57806314f059791461047257600080fd5b8063065a80d8146103a957806306871163146103cf57806306fdde031461041b575b600080fd5b6103bc6103b736600461491d565b6108d7565b6040519081526020015b60405180910390f35b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016103c6565b610423610a73565b6040516103c691906149ae565b6103bc61043e3660046149c1565b610b2b565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc610bfa565b61047a610c8b565b6040516103c691906149fd565b6103bc610d22565b6104a261049d366004614a2e565b610d8f565b005b6104a26104b23660046149c1565b610e27565b6103bc611135565b6103f66104cd36600461491d565b6111a2565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc6111ad565b6104a2610536366004614a53565b61121a565b6103bc610549366004614a8e565b6112ae565b6104a261055c366004614acb565b611366565b61047a611437565b6104a2610577366004614b0d565b6114aa565b6103bc61058a366004614b38565b611546565b6103bc6115bc565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc6105cc3660046149c1565b611629565b6103bc6116b1565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc610635366004614b73565b61171e565b6103bc611797565b61064a600281565b60405161ffff90911681526020016103c6565b6104a261066b3660046149c1565b611804565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b61047a6106a5366004614b90565b611a80565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b610423611b3f565b6104a26106e7366004614b0d565b611bac565b6104a26106fa366004614acb565b611c3f565b6103bc611cc9565b6103f661071536600461491d565b611d36565b6103f6610715366004614b38565b6103bc611d41565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc7f000000000000000000000000000000000000000000000000000000000000000081565b6103f66104cd366004614b38565b6103bc6107c1366004614bce565b611dae565b6107ce600681565b6040516103c69190614bfa565b6104a26107e9366004614a2e565b611e2e565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b61047a611fa8565b6103bc61082b366004614c3b565b61201b565b6103bc61209c565b6103bc610846366004614b38565b612109565b6104a2610859366004614a53565b61217f565b6104a261086c366004614c69565b6123e0565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc61245a565b6103f66124c7565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc612558565b6040517f4903b0d10000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff821660048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634903b0d1906024015b602060405180830381865afa9250505080156109b1575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526109ae91810190614c8d565b60015b610a68576040517f065a80d8000000000000000000000000000000000000000000000000000000008152600f83900b60048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063065a80d8906024015b602060405180830381865afa158015610a44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a689190614c8d565b92915050565b919050565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015610ae0573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b269190810190614d67565b905090565b6040517f07211ef7000000000000000000000000000000000000000000000000000000008152600f84810b600483015283900b6024820152604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906307211ef7906064015b602060405180830381865afa158015610bcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf09190614c8d565b90505b9392505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663140522886040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b269190614c8d565b610c936148ed565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166314f059796040518163ffffffff1660e01b8152600401606060405180830381865afa158015610cfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b269190614db8565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b60026000541415610e01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b60026000908155610e11836125c5565b9050610e1c816126d0565b505060016000555050565b60026000541415610e94576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610f25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f499190614e36565b90506000610f56856127ed565b90506000610f63856127ed565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529192506000918416906370a0823190602401602060405180830381865afa158015610fd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff99190614c8d565b90506001811115611127577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce800000061103f8784614e53565b6110499190614eb7565b604051600f8a810b602483015289900b60448201526064810184905260848101829052909150611124908690869086907fa6417ed6000000000000000000000000000000000000000000000000000000009060a4015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526001806128f7565b50505b505060016000555050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632081066c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6000610a68826125c5565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b60026000541415611287576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b60026000908155611297836125c5565b90506112a4838284612d6f565b5050600160005550565b6040517f3883e11900000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690633883e119906113259086908690600401614ef2565b602060405180830381865afa158015611342573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf39190614c8d565b600260005414156113d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b600260009081556113e3856125c5565b905060006113f0856125c5565b905061112782826000368080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525060019350915061301a9050565b61143f6148ed565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16634469e30e6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610cfe573d6000803e3d6000fd5b60026000541415611517576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b6002600090815561153d90600184358110916020860135821091604087013511906130e9565b50506001600055565b6040517f4903b0d1000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634903b0d19060240161095a565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635409491a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6040517f5e0d443f000000000000000000000000000000000000000000000000000000008152600f84810b600483015283900b6024820152604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635e0d443f90606401610baf565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166363543f066040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401610a27565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166376a2f0f06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b60026000541415611871576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611902573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119269190614e36565b90506000611933856125c5565b90506000611940856125c5565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529192506000918416906370a0823190602401602060405180830381865afa1580156119b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d69190614c8d565b90506001811115611127577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce8000000611a1c8784614e53565b611a269190614eb7565b604051600f8a810b602483015289900b60448201526064810184905260848101829052909150611124908690869086907f3df02124000000000000000000000000000000000000000000000000000000009060a40161109f565b611a886148ed565b6040517f85ca3c6f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906385ca3c6f90611afe90879087908790600401614f0a565b606060405180830381865afa158015611b1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf09190614db8565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610ae0573d6000803e3d6000fd5b60026000541415611c19576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b6002600090815561153d90600184358110916020860135821091604087013511906132c7565b60026000541415611cac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b60026000908155611cbc856127ed565b905060006113f0856127ed565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b4b577ad6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6000610a68826127ed565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb7b8b806040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6040517fcc2b27d700000000000000000000000000000000000000000000000000000000815260048101839052600f82900b60248201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063cc2b27d790604401611325565b60026000541415611e9b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b60026000908155611eab836125c5565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611f3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f5f9190614e36565b9050611f9b81837f0000000000000000000000000000000000000000000000000000000000000000611f92888a89613704565b600160006128f7565b5050600160005550505050565b611fb06148ed565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d96c7fce6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610cfe573d6000803e3d6000fd5b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063dd62ed3e90604401611325565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6040517fe2e7d264000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e2e7d26490602401610a27565b600260005414156121ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b600260009081556121fc836125c5565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa15801561228c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b09190614e36565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000918416906370a0823190602401602060405180830381865afa158015612322573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123469190614c8d565b905060018111156123d4577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce800000061238c8684614e53565b6123969190614eb7565b90506123d183857f00000000000000000000000000000000000000000000000000000000000000006123c98a8787613704565b6001806128f7565b50505b50506001600055505050565b6002600054141561244d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b600260005561153d613bc3565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f446c1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa158015612534573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b269190614e36565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fee3f7f96040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b600081600f0b600014156125f657507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6001141561262557507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6002141561265457507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6003141561268357507f00000000000000000000000000000000000000000000000000000000000000005b73ffffffffffffffffffffffffffffffffffffffff8116610a6e576040517fd1da79bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa15801561275d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127819190614e36565b90506127e8817f0000000000000000000000000000000000000000000000000000000000000000846000368080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525092508291506128f79050565b505050565b600081600f0b6000141561281e57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6001141561284d57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6002141561287c57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6003141561268357507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff8116610a6e576040517fd1da79bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606000803373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614612a60576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301528916906370a0823190602401602060405180830381865afa1580156129a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129c99190614c8d565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152919350908816906370a0823190602401602060405180830381865afa158015612a39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a5d9190614c8d565b90505b8415612b5c576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612b4357600080fd5b505af1158015612b57573d6000803e3d6000fd5b505050505b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a90612bf29033907f0000000000000000000000000000000000000000000000000000000000000000908b90600401614f31565b6000604051808303816000875af1158015612c11573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052612c579190810190614d67565b92508415612d55576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612d3c57600080fd5b505af1158015612d50573d6000803e3d6000fd5b505050505b612d6389898985858961403d565b50509695505050505050565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612dfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e209190614e36565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000917f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015612eb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ed69190614c8d565b90506001811115613013577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01613011827f0000000000000000000000000000000000000000000000000000000000000000867f1a4d01d200000000000000000000000000000000000000000000000000000000858a6b033b2e3c9fd0803ce8000000612f638b84614e53565b612f6d9190614eb7565b6040516024810193909352600f9190910b60448301526064820152608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152600060016128f7565b505b5050505050565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015260609060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa1580156130aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130ce9190614e36565b90506130de8188888888886128f7565b979650505050505050565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015613176573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061319a9190614e36565b90506131a88585858561429f565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561325957600080fd5b505af115801561326d573d6000803e3d6000fd5b505050506132b16000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061471592505050565b506132be8585858561429f565b61301381614813565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015613354573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133789190614e36565b9050841561344a576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561343157600080fd5b505af1158015613445573d6000803e3d6000fd5b505050505b831561351a576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561350157600080fd5b505af1158015613515573d6000803e3d6000fd5b505050505b82156135ea576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156135d157600080fd5b505af11580156135e5573d6000803e3d6000fd5b505050505b81156136ba576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156136a157600080fd5b505af11580156136b5573d6000803e3d6000fd5b505050505b6136fa6000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061471592505050565b5061301381614813565b60607f0000000000000000000000000000000000000000000000000000000000000000600214156138bd5783600f0b6000146137fa576040516000602482015260448101849052606481018390527f0b4c7e4d00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526138b6565b6040516024810184905260006044820152606481018390527f0b4c7e4d00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091525b9050610bf3565b7f0000000000000000000000000000000000000000000000000000000000000000600314156139d75783600f0b60001461398e5783600f0b60011461394557604051600060248201819052604482015260648101849052608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401613778565b604051600060248201819052604482018590526064820152608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401613778565b604051602481018490526000604482018190526064820152608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401613838565b7f000000000000000000000000000000000000000000000000000000000000000060041415613b615783600f0b600014613b115783600f0b600114613ac15783600f0b600214613a71576040516000602482018190526044820181905260648201526084810184905260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613778565b6040516000602482018190526044820181905260648201859052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613778565b6040516000602482018190526044820185905260648201819052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613778565b6040516024810184905260006044820181905260648201819052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613838565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f496e636f7272656374206e436f696e73000000000000000000000000000000006044820152606401610df8565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015613c50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c749190614e36565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301529192507f0000000000000000000000000000000000000000000000000000000000000000909116906351e3f16090604401600060405180830381600087803b158015613d2a57600080fd5b505af1158015613d3e573d6000803e3d6000fd5b50506040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f00000000000000000000000000000000000000000000000000000000000000001692506351e3f1609150604401600060405180830381600087803b158015613df357600080fd5b505af1158015613e07573d6000803e3d6000fd5b5050505060027f00000000000000000000000000000000000000000000000000000000000000001115613ff0576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015613ee557600080fd5b505af1158015613ef9573d6000803e3d6000fd5b5050505060037f00000000000000000000000000000000000000000000000000000000000000001115613ff0576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015613fd757600080fd5b505af1158015613feb573d6000803e3d6000fd5b505050505b6140306000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061471592505050565b5061403a81614813565b50565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461413e576040517f654a9eda00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528681166024830152858116604483015260648201859052608482018490527f0000000000000000000000000000000000000000000000000000000000000000169063654a9eda9060a401600060405180830381600087803b15801561412157600080fd5b505af1158015614135573d6000803e3d6000fd5b50505050613011565b80156141ee576040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015286811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b1580156141d557600080fd5b505af11580156141e9573d6000803e3d6000fd5b505050505b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015285811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561427f57600080fd5b505af1158015614293573d6000803e3d6000fd5b50505050505050505050565b83156143bb576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156143a257600080fd5b505af11580156143b6573d6000803e3d6000fd5b505050505b82156144d7576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156144be57600080fd5b505af11580156144d2573d6000803e3d6000fd5b505050505b81156145f3576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156145da57600080fd5b505af11580156145ee573d6000803e3d6000fd5b505050505b801561470f576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156146f657600080fd5b505af115801561470a573d6000803e3d6000fd5b505050505b50505050565b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815260609073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a906147ae9033907f0000000000000000000000000000000000000000000000000000000000000000908790600401614f31565b6000604051808303816000875af11580156147cd573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610a689190810190614d67565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461403a576040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b1580156148d957600080fd5b505af1158015613013573d6000803e3d6000fd5b60405180606001604052806003906020820280368337509192915050565b8035600f81900b8114610a6e57600080fd5b60006020828403121561492f57600080fd5b610bf38261490b565b60005b8381101561495357818101518382015260200161493b565b8381111561470f5750506000910152565b6000815180845261497c816020860160208601614938565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610bf36020830184614964565b6000806000606084860312156149d657600080fd5b6149df8461490b565b92506149ed6020850161490b565b9150604084013590509250925092565b60608101818360005b6003811015614a25578151835260209283019290910190600101614a06565b50505092915050565b600080600060608486031215614a4357600080fd5b833592506149ed6020850161490b565b60008060408385031215614a6657600080fd5b614a6f8361490b565b946020939093013593505050565b8060608101831015610a6857600080fd5b60008060808385031215614aa157600080fd5b614aab8484614a7d565b915060608301358015158114614ac057600080fd5b809150509250929050565b60008060008060808587031215614ae157600080fd5b614aea8561490b565b9350614af86020860161490b565b93969395505050506040820135916060013590565b60008060808385031215614b2057600080fd5b614b2a8484614a7d565b946060939093013593505050565b600060208284031215614b4a57600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461403a57600080fd5b600060208284031215614b8557600080fd5b8135610bf381614b51565b600080600060e08486031215614ba557600080fd5b614baf8585614a7d565b9250614bbe8560608601614a7d565b915060c084013590509250925092565b60008060408385031215614be157600080fd5b82359150614bf16020840161490b565b90509250929050565b6020810160118310614c35577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60008060408385031215614c4e57600080fd5b8235614c5981614b51565b91506020830135614ac081614b51565b60008060808385031215614c7c57600080fd5b82359150614bf18460208501614a7d565b600060208284031215614c9f57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff80841115614cf057614cf0614ca6565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715614d3657614d36614ca6565b81604052809350858152868686011115614d4f57600080fd5b614d5d866020830187614938565b5050509392505050565b600060208284031215614d7957600080fd5b815167ffffffffffffffff811115614d9057600080fd5b8201601f81018413614da157600080fd5b614db084825160208401614cd5565b949350505050565b600060608284031215614dca57600080fd5b82601f830112614dd957600080fd5b6040516060810181811067ffffffffffffffff82111715614dfc57614dfc614ca6565b604052806060840185811115614e1157600080fd5b845b81811015614e2b578051835260209283019201614e13565b509195945050505050565b600060208284031215614e4857600080fd5b8151610bf381614b51565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614eb2577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500290565b600082614eed577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60808101606084833791151560609190910152919050565b60e081016060858337606082016000815260608582375060c0919091019190915292915050565b600073ffffffffffffffffffffffffffffffffffffffff808616835280851660208401525060606040830152614f6a6060830184614964565b9594505050505056fea2646970667358221220efb951725986e76ee157ff0d00cd7b7a6a9b8a581784400c52be5c96516fe15064736f6c634300080a0033608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6118158061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c80638da5cb5b11610076578063d7aa2e351161005b578063d7aa2e35146101b3578063d914cd4b146101f2578063f2fde38b1461020557600080fd5b80638da5cb5b1461015d578063c488f7fe1461018557600080fd5b80634dee073b116100a75780634dee073b146101015780636f33547d14610142578063715018a61461015557600080fd5b80631bf64c41146100c357806345330666146100ec575b600080fd5b6100d66100d1366004611345565b610218565b6040516100e3919061142e565b60405180910390f35b6100ff6100fa366004611500565b6103fa565b005b61012f61010f366004611551565b6001602090815260009283526040808420909152908252902054600f0b81565b604051600f9190910b81526020016100e3565b6100d6610150366004611345565b6104d7565b6100ff610514565b60005460405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100e3565b61012f610193366004611551565b6002602090815260009283526040808420909152908252902054600f0b81565b6101e46101c136600461158a565b600360209081526000938452604080852082529284528284209052825290205481565b6040519081526020016100e3565b6100ff6102003660046115d5565b6105a1565b6100ff6102133660046115d5565b61089e565b6102556040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b61025e836109ce565b156103f45760008273ffffffffffffffffffffffffffffffffffffffff1663bd90df706040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102d491906115f2565b905060008060008060006102e88987610a67565b9450945094509450945082156103ed5760405180608001604052806103118b8b858a8a89610d8b565b8152602001828152602001600115158152602001600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008c6040015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008c6060015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481525096505b5050505050505b92915050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610480576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff93841660009081526003602090815260408083209587168084528683528184209590971683529381528382208390559384528281209481529390925290912055565b6103f46040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b60005473ffffffffffffffffffffffffffffffffffffffff163314610595576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610477565b61059f6000611045565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610622576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610477565b60005b6004600f82900b121561075d576040517f23746eb8000000000000000000000000000000000000000000000000000000008152600f82900b600482015273ffffffffffffffffffffffffffffffffffffffff8316906323746eb890602401602060405180830381865afa9250505080156106da575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526106d7918101906115f2565b60015b6106e35761075d565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160208181526040808420959094168352939093522080547fffffffffffffffffffffffffffffffff0000000000000000000000000000000016929091016fffffffffffffffffffffffffffffffff8116929092179055610625565b5060005b6004600f82900b121561089a576040517fb739953e000000000000000000000000000000000000000000000000000000008152600f82900b600482015273ffffffffffffffffffffffffffffffffffffffff83169063b739953e90602401602060405180830381865afa925050508015610816575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610813918101906115f2565b60015b61081e575050565b73ffffffffffffffffffffffffffffffffffffffff808416600090815260026020908152604080832094909316825292909252902080546fffffffffffffffffffffffffffffffff60018401167fffffffffffffffffffffffffffffffff00000000000000000000000000000000909116179055600101610761565b5050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461091f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610477565b73ffffffffffffffffffffffffffffffffffffffff81166109c2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610477565b6109cb81611045565b50565b600080825160028111156109e4576109e461160f565b1480610a025750600182516002811115610a0057610a0061160f565b145b15610a0f57506001919050565b600282516002811115610a2457610a2461160f565b1415610a3257506000919050565b81516040517ffe7995cf000000000000000000000000000000000000000000000000000000008152610477919060040161163e565b73ffffffffffffffffffffffffffffffffffffffff80821660009081526001602081815260408084208782015190951684529390529181205490918291829182918291610ab691600f0b6116ae565b73ffffffffffffffffffffffffffffffffffffffff808816600090815260016020818152604080842060608e0151909516845293905291902054919650610aff91600f0b6116ae565b9350600085600f0b12158015610b195750600084600f0b12155b15610bf85760a08701516040517f5e0d443f000000000000000000000000000000000000000000000000000000008152600f87810b600483015286900b6024820152604481019190915273ffffffffffffffffffffffffffffffffffffffff871690635e0d443f90606401602060405180830381865afa925050508015610bdb575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610bd89181019061171f565b60015b610be457610d81565b8015610bf257600193508091505b50610d81565b73ffffffffffffffffffffffffffffffffffffffff80871660009081526002602090815260408083208b82015190941683529290522054610c3e90600190600f0b6116ae565b73ffffffffffffffffffffffffffffffffffffffff808816600090815260026020908152604080832060608d015190941683529290522054909550610c8890600190600f0b6116ae565b9350600085600f0b12158015610ca25750600084600f0b12155b15610d815760a08701516040517f07211ef7000000000000000000000000000000000000000000000000000000008152600f87810b600483015286900b6024820152604481019190915273ffffffffffffffffffffffffffffffffffffffff8716906307211ef790606401602060405180830381865afa925050508015610d64575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610d619181019061171f565b60015b610d6d57610d81565b8015610d7f5760019350809150600192505b505b9295509295909350565b6040805180820190915260008152606060208201526060600188516002811115610db757610db761160f565b1415610eb75782610de8577f79bea66400000000000000000000000000000000000000000000000000000000610e0a565b7f1af4de83000000000000000000000000000000000000000000000000000000005b8585610e168b8a6110ba565b604051600f93840b60248201529190920b60448201526064810191909152608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505b600088516002811115610ecc57610ecc61160f565b1415610fcc5782610efd577f3df0212400000000000000000000000000000000000000000000000000000000610f1f565b7fa6417ed6000000000000000000000000000000000000000000000000000000005b8585610f2b8b8a6110f2565b604051600f93840b60248201529190920b60448201526064810191909152608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505b8051156110065760405180604001604052808873ffffffffffffffffffffffffffffffffffffffff1681526020018281525091505061103b565b87516040517ffe7995cf000000000000000000000000000000000000000000000000000000008152610477919060040161163e565b9695505050505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60a08201516000906110e1846110dc856b033b2e3c9fd0803ce8000000611738565b6110f2565b6110eb9190611775565b9392505050565b60008260e0015115611106575060006103f4565b60008351600281111561111b5761111b61160f565b148061113957506001835160028111156111375761113761160f565b145b1561116c5760c08301516127109061115190826117b0565b61115b9084611738565b6111659190611775565b90506103f4565b6002835160028111156111815761118161160f565b14156111a45760c0830151611198906127106117c7565b61115b61271084611738565b82516040517ffe7995cf000000000000000000000000000000000000000000000000000000008152610477919060040161163e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610100810167ffffffffffffffff8111828210171561122c5761122c6111d9565b60405290565b80356003811061124157600080fd5b919050565b73ffffffffffffffffffffffffffffffffffffffff811681146109cb57600080fd5b803561124181611246565b600082601f83011261128457600080fd5b8135602067ffffffffffffffff808311156112a1576112a16111d9565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f830116810181811084821117156112e4576112e46111d9565b60405293845285810183019383810192508785111561130257600080fd5b83870191505b8482101561132a57813561131b81611246565b83529183019190830190611308565b979650505050505050565b8035801515811461124157600080fd5b6000806040838503121561135857600080fd5b823567ffffffffffffffff8082111561137057600080fd5b90840190610100828703121561138557600080fd5b61138d611208565b61139683611232565b81526113a460208401611268565b60208201526113b560408401611268565b60408201526113c660608401611268565b60608201526080830135828111156113dd57600080fd5b6113e988828601611273565b60808301525060a083013560a082015260c083013560c082015261140f60e08401611335565b60e0820152935061142591505060208401611268565b90509250929050565b60006020808352835160808285015273ffffffffffffffffffffffffffffffffffffffff81511660a0850152818101519050604060c085015280518060e086015260005b8181101561148f5782810184015186820161010001528301611472565b818111156114a257600061010083880101525b50828601516040860152604086015192506114c1606086018415159052565b606095909501516080850152505050601f919091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016016101000190565b6000806000806080858703121561151657600080fd5b843561152181611246565b9350602085013561153181611246565b9250604085013561154181611246565b9396929550929360600135925050565b6000806040838503121561156457600080fd5b823561156f81611246565b9150602083013561157f81611246565b809150509250929050565b60008060006060848603121561159f57600080fd5b83356115aa81611246565b925060208401356115ba81611246565b915060408401356115ca81611246565b809150509250925092565b6000602082840312156115e757600080fd5b81356110eb81611246565b60006020828403121561160457600080fd5b81516110eb81611246565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160038310611679577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600081600f0b83600f0b60008112817fffffffffffffffffffffffffffffffff80000000000000000000000000000000018312811516156116f1576116f161167f565b816f7fffffffffffffffffffffffffffffff0183138116156117155761171561167f565b5090039392505050565b60006020828403121561173157600080fd5b5051919050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156117705761177061167f565b500290565b6000826117ab577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000828210156117c2576117c261167f565b500390565b600082198211156117da576117da61167f565b50019056fea2646970667358221220ed82995f9e9761ea7972d39ed0d8d0b378778cbba995315b16c90b49c74d2b7e64736f6c634300080a003360806040526000805460ff1916600117905534801561001d57600080fd5b50611be18061002d6000396000f3fe6080604052600436106100d25760003560e01c8063ba414fa61161007f578063db3e219811610059578063db3e219814610215578063f28c049814610228578063f7729d431461023b578063fa7626d41461025b57600080fd5b8063ba414fa6146101bd578063c04b8d59146101e2578063cdca1753146101f557600080fd5b8063414bf389116100b0578063414bf3891461014c57806347485d2a1461015f5780635911fb9a1461019d57600080fd5b80632ccbc99b146100d75780632f80bb1d146100f957806330d07f211461012c575b600080fd5b3480156100e357600080fd5b506100f76100f2366004611672565b610275565b005b34801561010557600080fd5b506101196101143660046116f0565b61031f565b6040519081526020015b60405180910390f35b34801561013857600080fd5b506101196101473660046117c3565b610468565b61011961015a366004611842565b610566565b34801561016b57600080fd5b5061011961017a36600461185f565b600160209081526000938452604080852082529284528284209052825290205481565b3480156101a957600080fd5b506100f76101b83660046118a6565b6106b5565b3480156101c957600080fd5b506101d26106c8565b6040519015158152602001610123565b6101196101f03660046118f9565b610826565b34801561020157600080fd5b506101196102103660046116f0565b6109b5565b610119610223366004611842565b610af1565b6101196102363660046118f9565b610c00565b34801561024757600080fd5b506101196102563660046117c3565b610d4e565b34801561026757600080fd5b506000546101d29060ff1681565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160209081526040808320938716835292815282822062ffffff86168352905220819055806102ce6b033b2e3c9fd0803ce80000008061195d565b6102d8919061199a565b73ffffffffffffffffffffffffffffffffffffffff938416600090815260016020908152604080832097909616825295865284812062ffffff909416815292909452502055565b805b600361032f6014600261195d565b61033991906119d5565b83511061046257600080600061034e86610e35565b73ffffffffffffffffffffffffffffffffffffffff8083166000908152600160209081526040808320938716835292815282822062ffffff8516835290522054929550909350915080610402576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f556e697377617056334d6f636b3a2052617465206973206e6f7420736574757060448201526064015b60405180910390fd5b61041462ffffff8316620f42406119ed565b8161042b6b033b2e3c9fd0803ce80000008861195d565b610435919061199a565b61044290620f424061195d565b61044c919061199a565b945061045787610e71565b965050505050610321565b92915050565b73ffffffffffffffffffffffffffffffffffffffff8086166000908152600160209081526040808320938816835292815282822062ffffff8716835290529081205480610511576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f556e697377617056334d6f636b3a2052617465206973206e6f7420736574757060448201526064016103f9565b61052362ffffff8616620f42406119ed565b8161053a6b033b2e3c9fd0803ce80000008761195d565b610544919061199a565b61055190620f424061195d565b61055b919061199a565b979650505050505050565b60006105a46105786020840184611a04565b6105886040850160208601611a04565b6105986060860160408701611a21565b8560a001356000610d4e565b90508160c0013581101561063a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f556e69737761705632526f757465723a20494e53554646494349454e545f4f5560448201527f545055545f414d4f554e5400000000000000000000000000000000000000000060648201526084016103f9565b61066f333060a08501356106516020870187611a04565b73ffffffffffffffffffffffffffffffffffffffff16929190610ea2565b6106b06106826080840160608501611a04565b826106936040860160208701611a04565b73ffffffffffffffffffffffffffffffffffffffff169190610f84565b919050565b6106c38383610bb884610275565b505050565b60008054610100900460ff16156106e85750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106b05760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000008284015282518083038401815260608301909352600092909161078d917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc491608001611a68565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526107c591611ab0565b6000604051808303816000865af19150503d8060008114610802576040519150601f19603f3d011682016040523d82523d6000602084013e610807565b606091505b509150508080602001905181019061081f9190611acc565b9392505050565b600080806108716108378580611aee565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610fda92505050565b90925090506108c16108838580611aee565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505060608601356109b5565b92508360800135831015610957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f556e69737761705632526f757465723a20494e53554646494349454e545f4f5560448201527f545055545f414d4f554e5400000000000000000000000000000000000000000060648201526084016103f9565b61097d73ffffffffffffffffffffffffffffffffffffffff831633306060880135610ea2565b6109ae6109906040860160208701611a04565b73ffffffffffffffffffffffffffffffffffffffff83169085610f84565b5050919050565b805b60036109c56014600261195d565b6109cf91906119d5565b8351106104625760008060006109e486610e35565b73ffffffffffffffffffffffffffffffffffffffff8084166000908152600160209081526040808320938616835292815282822062ffffff8516835290522054929550909350915080610a93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f556e697377617056334d6f636b3a2052617465206973206e6f7420736574757060448201526064016103f9565b620f4240610aa662ffffff8416826119ed565b6b033b2e3c9fd0803ce8000000610abd848961195d565b610ac7919061199a565b610ad1919061195d565b610adb919061199a565b9450610ae687610e71565b9650505050506109b7565b6000610b2f610b036020840184611a04565b610b136040850160208601611a04565b610b236060860160408701611a21565b8560a001356000610468565b90508160c00135811115610bc5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f556e69737761705632526f757465723a20494e53554646494349454e545f4f5560448201527f545055545f414d4f554e5400000000000000000000000000000000000000000060648201526084016103f9565b610bd83330836106516020870187611a04565b6106b0610beb6080840160608501611a04565b60a08401356106936040860160208701611a04565b60008080610c116108378580611aee565b9092509050610c61610c238580611aee565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050606086013561031f565b92508360800135831115610cf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f556e69737761705632526f757465723a20494e53554646494349454e545f4f5560448201527f545055545f414d4f554e5400000000000000000000000000000000000000000060648201526084016103f9565b610d1973ffffffffffffffffffffffffffffffffffffffff8216333086610ea2565b6109ae610d2c6040860160208701611a04565b73ffffffffffffffffffffffffffffffffffffffff8416906060870135610f84565b73ffffffffffffffffffffffffffffffffffffffff8086166000908152600160209081526040808320938816835292815282822062ffffff8716835290529081205480610df7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f556e697377617056334d6f636b3a2052617465206973206e6f7420736574757060448201526064016103f9565b620f4240610e0a62ffffff8716826119ed565b6b033b2e3c9fd0803ce8000000610e21848861195d565b610e2b919061199a565b610551919061195d565b60008080610e43848261101c565b9250610e508460146110ac565b9050610e68610e61600360146119d5565b859061101c565b91509193909250565b6060610462610e82600360146119d5565b610e8e600360146119d5565b8451610e9a91906119ed565b8491906111a0565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052610f7e9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261131a565b50505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526106c39084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401610efc565b600080610fe683610e35565b50909250610ff5905083611426565b1561100a5761100383610e71565b9250915091565b61101383610e35565b50915050915091565b60006110298260146119d5565b83511015611093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f746f416464726573735f6f75744f66426f756e6473000000000000000000000060448201526064016103f9565b5001602001516c01000000000000000000000000900490565b6000816110ba8160036119d5565b1015611122576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f746f55696e7432345f6f766572666c6f7700000000000000000000000000000060448201526064016103f9565b61112d8260036119d5565b83511015611197576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f746f55696e7432345f6f75744f66426f756e647300000000000000000000000060448201526064016103f9565b50016003015190565b6060816111ae81601f6119d5565b1015611216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016103f9565b61122082846119d5565b8451101561128a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e647300000000000000000000000000000060448201526064016103f9565b6060821580156112a95760405191506000825260208201604052611311565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156112e25780518352602092830192016112ca565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b600061137c826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166114609092919063ffffffff16565b8051909150156106c3578080602001905181019061139a9190611acc565b6106c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016103f9565b6000611434600360146119d5565b60146114416003826119d5565b61144b91906119d5565b61145591906119d5565b825110159050919050565b606061146f8484600085611477565b949350505050565b606082471015611509576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016103f9565b843b611571576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016103f9565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161159a9190611ab0565b60006040518083038185875af1925050503d80600081146115d7576040519150601f19603f3d011682016040523d82523d6000602084013e6115dc565b606091505b509150915061055b828286606083156115f657508161081f565b8251156116065782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103f99190611b5a565b73ffffffffffffffffffffffffffffffffffffffff8116811461165c57600080fd5b50565b803562ffffff811681146106b057600080fd5b6000806000806080858703121561168857600080fd5b84356116938161163a565b935060208501356116a38161163a565b92506116b16040860161165f565b9396929550929360600135925050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561170357600080fd5b823567ffffffffffffffff8082111561171b57600080fd5b818501915085601f83011261172f57600080fd5b813581811115611741576117416116c1565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715611787576117876116c1565b816040528281528860208487010111156117a057600080fd5b826020860160208301376000602093820184015298969091013596505050505050565b600080600080600060a086880312156117db57600080fd5b85356117e68161163a565b945060208601356117f68161163a565b93506118046040870161165f565b925060608601359150608086013561181b8161163a565b809150509295509295909350565b6000610100828403121561183c57600080fd5b50919050565b6000610100828403121561185557600080fd5b61081f8383611829565b60008060006060848603121561187457600080fd5b833561187f8161163a565b9250602084013561188f8161163a565b915061189d6040850161165f565b90509250925092565b6000806000606084860312156118bb57600080fd5b83356118c68161163a565b925060208401356118d68161163a565b929592945050506040919091013590565b600060a0828403121561183c57600080fd5b60006020828403121561190b57600080fd5b813567ffffffffffffffff81111561192257600080fd5b61146f848285016118e7565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156119955761199561192e565b500290565b6000826119d0577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600082198211156119e8576119e861192e565b500190565b6000828210156119ff576119ff61192e565b500390565b600060208284031215611a1657600080fd5b813561081f8161163a565b600060208284031215611a3357600080fd5b61081f8261165f565b60005b83811015611a57578181015183820152602001611a3f565b83811115610f7e5750506000910152565b7fffffffff000000000000000000000000000000000000000000000000000000008316815260008251611aa2816004850160208701611a3c565b919091016004019392505050565b60008251611ac2818460208701611a3c565b9190910192915050565b600060208284031215611ade57600080fd5b8151801515811461081f57600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112611b2357600080fd5b83018035915067ffffffffffffffff821115611b3e57600080fd5b602001915036819003821315611b5357600080fd5b9250929050565b6020815260008251806020840152611b79816040850160208701611a3c565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea26469706673582212204cf30f1ca2431e63304f0a45d5cefa0164fe6393b35a339d16bca5512d511dd064736f6c634300080a003360e06040523480156200001157600080fd5b506040516200221a3803806200221a833981016040819052620000349162000121565b81816001600160a01b03821615806200005457506001600160a01b038116155b156200007357604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038216608081905260408051632f7a188160e01b81529051632f7a1881916004808201926020929091908290030181865afa158015620000be573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e4919062000159565b6001600160a01b0390811660a0521660c05250506001600055506200017e565b80516001600160a01b03811681146200011c57600080fd5b919050565b600080604083850312156200013557600080fd5b620001408362000104565b9150620001506020840162000104565b90509250929050565b6000602082840312156200016c57600080fd5b620001778262000104565b9392505050565b60805160a05160c051611ff6620002246000396000818161017a015281816111a8015281816112c701526113a101526000818160d30152818161101301526115330152600081816101c101528181610314015281816105630152818161070501528181610ae001528181610c7801528181610dbe015281816111fe01528181611298015281816113f7015281816115bb0152818161166f01526117190152611ff66000f3fe6080604052600436106100bc5760003560e01c8063c12c21c011610074578063db3e21981161004e578063db3e219814610225578063f28c049814610238578063f4f18d901461024b57600080fd5b8063c12c21c0146101af578063c7fbf4de146101e3578063ce30bbdb1461020357600080fd5b806378aa73a4116100a557806378aa73a414610140578063bd90df7014610168578063c04b8d591461019c57600080fd5b80632f7a1881146100c1578063414bf3891461011f575b600080fd5b3480156100cd57600080fd5b506100f57f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61013261012d36600461182d565b61026b565b604051908152602001610116565b34801561014c57600080fd5b50610155600281565b60405161ffff9091168152602001610116565b34801561017457600080fd5b506100f57f000000000000000000000000000000000000000000000000000000000000000081565b6101326101aa366004611863565b6104bf565b3480156101bb57600080fd5b506100f57f000000000000000000000000000000000000000000000000000000000000000081565b3480156101ef57600080fd5b506101326101fe3660046118a0565b6106bd565b34801561020f57600080fd5b50610218600281565b60405161011691906118b2565b61013261023336600461182d565b610a3c565b610132610246366004611863565b610bd4565b34801561025757600080fd5b506101326102663660046118f3565b610d76565b6000600260005414156102df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610370573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103949190611953565b905060006103a736859003850185611af2565b73ffffffffffffffffffffffffffffffffffffffff83166060820152905061049f826103d66020870187611b0f565b6103e66040880160208901611b0f565b6040517f414bf3890000000000000000000000000000000000000000000000000000000090610419908790602401611b2c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915260016000610ff6565b8060200190518101906104b29190611ba7565b6001600055949350505050565b60006002600054141561052e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016102d6565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156105bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105e39190611953565b905060008061062f6105f58680611bc0565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061146e92505050565b9150915060008561063f90611d27565b73ffffffffffffffffffffffffffffffffffffffff8516602082015260405190915061069b908590859085907fc04b8d590000000000000000000000000000000000000000000000000000000090610419908790602401611e0c565b8060200190518101906106ae9190611ba7565b60016000559695505050505050565b6040517fe958b704000000000000000000000000000000000000000000000000000000008152336004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa15801561074c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107709190611953565b905060006107816020850185611b0f565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015291909116906370a0823190602401602060405180830381865afa1580156107ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108139190611ba7565b90506001811115610a35576040805161010081019091527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90910190600090806108606020880188611b0f565b73ffffffffffffffffffffffffffffffffffffffff16815260200186602001602081019061088e9190611b0f565b73ffffffffffffffffffffffffffffffffffffffff1681526020016108b96060880160408901611e1f565b62ffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff168152602001866060013581526020018381526020016b033b2e3c9fd0803ce800000087608001358561090c9190611e69565b6109169190611ea6565b815260200161092b60c0880160a08901611b0f565b73ffffffffffffffffffffffffffffffffffffffff1690529050610a1e836109566020880188611b0f565b6109666040890160208a01611b0f565b6040517f414bf3890000000000000000000000000000000000000000000000000000000090610999908790602401611b2c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152600180610ff6565b806020019051810190610a319190611ba7565b9350505b5050919050565b600060026000541415610aab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016102d6565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610b3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b609190611953565b90506000610b7336859003850185611af2565b73ffffffffffffffffffffffffffffffffffffffff831660608201528051602082015160405192935061049f92859291907fdb3e21980000000000000000000000000000000000000000000000000000000090610419908790602401611b2c565b600060026000541415610c43576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016102d6565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610cd4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf89190611953565b9050600080610d0a6105f58680611bc0565b91509150600085610d1a90611d27565b73ffffffffffffffffffffffffffffffffffffffff8516602082015260405190915061069b908590849086907ff28c04980000000000000000000000000000000000000000000000000000000090610419908790602401611e0c565b6040517fe958b704000000000000000000000000000000000000000000000000000000008152336004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015610e05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e299190611953565b9050600080610e3b6105f58680611bc0565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301529294509092506000918416906370a0823190602401602060405180830381865afa158015610eb0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed49190611ba7565b90506001811115610fed576040805160a081019091527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091019060009080610f1d8980611bc0565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509082525073ffffffffffffffffffffffffffffffffffffffff8716602080830191909152890135604080830191909152606082018590526080909101906b033b2e3c9fd0803ce800000090610fa8908b013586611e69565b610fb29190611ea6565b8152509050610fd685858563c04b8d5960e01b856040516024016109999190611e0c565b806020019051810190610fe99190611ba7565b9550505b50505050919050565b60606000803373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461115f576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301528916906370a0823190602401602060405180830381865afa1580156110a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c89190611ba7565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152919350908816906370a0823190602401602060405180830381865afa158015611138573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115c9190611ba7565b90505b841561125b576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561124257600080fd5b505af1158015611256573d6000803e3d6000fd5b505050505b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a906112f19033907f0000000000000000000000000000000000000000000000000000000000000000908b90600401611ee1565b6000604051808303816000875af1158015611310573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526113569190810190611f23565b92508415611454576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561143b57600080fd5b505af115801561144f573d6000803e3d6000fd5b505050505b61146289898985858961151b565b50509695505050505050565b600080600361147f60146002611e69565b6114899190611f91565b835110156114c3576040517f8287466d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114ce83600061177e565b91506115146114df60036014611f91565b6114eb60036014611f91565b601486516114f99190611fa9565b6115039190611ea6565b61150d9190611e69565b849061177e565b9050915091565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461161c576040517f654a9eda00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528681166024830152858116604483015260648201859052608482018490527f0000000000000000000000000000000000000000000000000000000000000000169063654a9eda9060a401600060405180830381600087803b1580156115ff57600080fd5b505af1158015611613573d6000803e3d6000fd5b50505050611776565b80156116cc576040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015286811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b1580156116b357600080fd5b505af11580156116c7573d6000803e3d6000fd5b505050505b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015285811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561175d57600080fd5b505af1158015611771573d6000803e3d6000fd5b505050505b505050505050565b600061178b826014611f91565b835110156117f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f746f416464726573735f6f75744f66426f756e6473000000000000000000000060448201526064016102d6565b50818101602001516c0100000000000000000000000090045b92915050565b6000610100828403121561182757600080fd5b50919050565b6000610100828403121561184057600080fd5b61184a8383611814565b9392505050565b600060a0828403121561182757600080fd5b60006020828403121561187557600080fd5b813567ffffffffffffffff81111561188c57600080fd5b61189884828501611851565b949350505050565b600060c0828403121561182757600080fd5b60208101601183106118ed577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561190557600080fd5b813567ffffffffffffffff81111561191c57600080fd5b82016060818503121561184a57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8116811461195057600080fd5b50565b60006020828403121561196557600080fd5b815161184a8161192e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff811182821017156119c2576119c2611970565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611a0f57611a0f611970565b604052919050565b8035611a228161192e565b919050565b803562ffffff81168114611a2257600080fd5b6000610100808385031215611a4e57600080fd5b6040519081019067ffffffffffffffff82118183101715611a7157611a71611970565b8160405280925083359150611a858261192e565b818152611a9460208501611a17565b6020820152611aa560408501611a27565b6040820152611ab660608501611a17565b60608201526080840135608082015260a084013560a082015260c084013560c0820152611ae560e08501611a17565b60e0820152505092915050565b60006101008284031215611b0557600080fd5b61184a8383611a3a565b600060208284031215611b2157600080fd5b813561184a8161192e565b610100810161180e828473ffffffffffffffffffffffffffffffffffffffff80825116835280602083015116602084015262ffffff60408301511660408401528060608301511660608401526080820151608084015260a082015160a084015260c082015160c08401528060e08301511660e0840152505050565b600060208284031215611bb957600080fd5b5051919050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112611bf557600080fd5b83018035915067ffffffffffffffff821115611c1057600080fd5b602001915036819003821315611c2557600080fd5b9250929050565b600067ffffffffffffffff821115611c4657611c46611970565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600060a08284031215611c8457600080fd5b611c8c61199f565b9050813567ffffffffffffffff811115611ca557600080fd5b8201601f81018413611cb657600080fd5b80356020611ccb611cc683611c2c565b6119c8565b8281528682848601011115611cdf57600080fd5b828285018383013760008184018301528452611cfc858201611a17565b8185015250505060408201356040820152606082013560608201526080820135608082015292915050565b600061180e3683611c72565b60005b83811015611d4e578181015183820152602001611d36565b83811115611d5d576000848401525b50505050565b60008151808452611d7b816020860160208601611d33565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6000815160a08452611dc260a0850182611d63565b905073ffffffffffffffffffffffffffffffffffffffff60208401511660208501526040830151604085015260608301516060850152608083015160808501528091505092915050565b60208152600061184a6020830184611dad565b600060208284031215611e3157600080fd5b61184a82611a27565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611ea157611ea1611e3a565b500290565b600082611edc577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600073ffffffffffffffffffffffffffffffffffffffff808616835280851660208401525060606040830152611f1a6060830184611d63565b95945050505050565b600060208284031215611f3557600080fd5b815167ffffffffffffffff811115611f4c57600080fd5b8201601f81018413611f5d57600080fd5b8051611f6b611cc682611c2c565b818152856020838501011115611f8057600080fd5b611f1a826020830160208601611d33565b60008219821115611fa457611fa4611e3a565b500190565b600082821015611fbb57611fbb611e3a565b50039056fea26469706673582212205e5422ac5bcae72b08548a48e40a231ab28c72dbc2d7f2b1b2c453222770f56564736f6c634300080a0033608060405234801561001057600080fd5b5061001a33610081565b73e592427a0aece92de3edee1f18e0157c0586156460005260016020527fbad1c9453febe4a6446e59e386c36af7924acc0d372d29859fea25e7a6eaac1780546001600160a01b03191673b27308f9f90d607463bb33ea1bebb41c27ce5ab61790556100d1565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b612604806100e06000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c80636f33547d11610081578063c67903ea1161005b578063c67903ea14610208578063d7aa2e3514610269578063f2fde38b1461029a57600080fd5b80636f33547d146101cf578063715018a6146101e25780638da5cb5b146101ea57600080fd5b806345330666116100b2578063453306661461017d5780634acc79ed1461019257806354fd4d50146101b957600080fd5b80631b162e56146100d95780631bf64c41146101025780632a10672614610122575b600080fd5b6100ec6100e7366004611e57565b6102ad565b6040516100f99190611f30565b60405180910390f35b61011561011036600461206e565b610427565b6040516100f99190612157565b6101586101303660046121c6565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100f9565b61019061018b3660046121ea565b610805565b005b6101a56101a036600461223b565b6108e2565b60405162ffffff90911681526020016100f9565b6101c1600281565b6040519081526020016100f9565b6101156101dd36600461206e565b61094a565b610190610f2e565b60005473ffffffffffffffffffffffffffffffffffffffff16610158565b610190610216366004612254565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001691909216179055565b6101c161027736600461228d565b600260209081526000938452604080852082529284528284209052825290205481565b6101906102a83660046121c6565b610fbb565b606060006102ba866108e2565b905060006102c7856108e2565b905060008960028111156102dd576102dd6122d8565b14806102fa575060018960028111156102f8576102f86122d8565b145b61038e576040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606086811b821660208401527fffffff000000000000000000000000000000000000000000000000000000000060e885811b821660348601528a831b8416603786015286901b16604b8401528a901b16604e82015260620160405160208183030381529060405261041a565b6040517fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b821660208401527fffffff000000000000000000000000000000000000000000000000000000000060e886811b821660348601528a831b8416603786015285901b16604b84015286901b16604e8201526062016040516020818303038152906040525b9998505050505050505050565b6104646040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b600283516002811115610479576104796122d8565b146104855760006104a7565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b8160200181815250506000600160008473ffffffffffffffffffffffffffffffffffffffff1663bd90df706040518163ffffffff1660e01b8152600401602060405180830381865afa158015610501573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105259190612307565b73ffffffffffffffffffffffffffffffffffffffff9081168252602082019290925260400160009081205490911691505b60038110156107fd5761059c6040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b6105a5866110eb565b156106c6578273ffffffffffffffffffffffffffffffffffffffff1663f7729d43876040015188606001516105d9866108e2565b60a08b01516040517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b16815273ffffffffffffffffffffffffffffffffffffffff948516600482015293909216602484015262ffffff16604483015260648201526000608482015260a4016020604051808303816000875af19250505080156106a2575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261069f91810190612324565b60015b6106ab576107de565b80156106c0576106bd87828886611184565b91505b506107de565b8273ffffffffffffffffffffffffffffffffffffffff166330d07f21876040015188606001516106f5866108e2565b60a08b01516040517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b16815273ffffffffffffffffffffffffffffffffffffffff948516600482015293909216602484015262ffffff16604483015260648201526000608482015260a4016020604051808303816000875af19250505080156107be575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526107bb91810190612324565b60015b6107c7576107de565b80156107dc576107d987828886611184565b91505b505b6107eb81878660006112a9565b156107f4578093505b50600101610556565b505092915050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461088b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff93841660009081526002602090815260408083209587168084528683528184209590971683529381528382208390559384528281209481529390925290912055565b60006003821061091e576040517f50c1fe4a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b811561093c578160011461093457611388610940565b610bb8610940565b6103e85b61ffff1692915050565b6109876040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1663bd90df706040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109fc9190612307565b73ffffffffffffffffffffffffffffffffffffffff908116825260208201929092526040016000908120546080870151519216925085516002811115610a4457610a446122d8565b1480610a625750600185516002811115610a6057610a606122d8565b145b610a8c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610a8f565b60005b602084015260005b81811015610f255760005b6003811015610f1c5760005b6003811015610f13576000610af089600001518a60400151858c608001518881518110610add57610add61233d565b6020026020010151868e606001516102ad565b9050600080610afe8b6110eb565b15610be15760a08b01516040517fcdca175300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a169163cdca175391610b5a91879160040161236c565b6020604051808303816000875af1925050508015610bb3575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610bb091810190612324565b60015b610bbc57610cbb565b8015801590610bce5750896020015181115b15610bdb57809250600191505b50610cbb565b60a08b01516040517f2f80bb1d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a1691632f80bb1d91610c3891879160040161236c565b6020604051808303816000875af1925050508015610c91575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610c8e91810190612324565b60015b610c9a57610cbb565b8015801590610cac5750896020015181105b15610cb957809250600191505b505b8015610f0557600160408a015260208901829052610cdb8b838c866112c7565b896000018190525060008a73ffffffffffffffffffffffffffffffffffffffff1663bd90df706040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d549190612307565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260026020526040812060808f0151805193945090928a908110610d9557610d9561233d565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008d6060015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008e6040015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008e608001518a81518110610eb157610eb161233d565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610efe91906123bd565b60608b0152505b505050806001019050610aae565b50600101610aa2565b50600101610a97565b50505092915050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610faf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610882565b610fb9600061159d565b565b60005473ffffffffffffffffffffffffffffffffffffffff16331461103c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610882565b73ffffffffffffffffffffffffffffffffffffffff81166110df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610882565b6110e88161159d565b50565b60008082516002811115611101576111016122d8565b148061111f575060018251600281111561111d5761111d6122d8565b145b1561112c57506001919050565b600282516002811115611141576111416122d8565b141561114f57506000919050565b81516040517ffe7995cf00000000000000000000000000000000000000000000000000000000815261088291906004016123d5565b6111c16040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b60016040820152602081018490526111db85858585611612565b816000018190525060008373ffffffffffffffffffffffffffffffffffffffff1663bd90df706040518163ffffffff1660e01b8152600401602060405180830381865afa158015611230573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112549190612307565b73ffffffffffffffffffffffffffffffffffffffff90811660009081526002602090815260408083208a82015185168452825280832060609a8b01519094168352929052205495820195909552949350505050565b60006112bc8585858660600151866119a4565b90505b949350505050565b6040805180820190915260008152606060208201526001855160028111156112f1576112f16122d8565b14156113f4576000604051806060016040528084815260200142610e1061131891906123bd565b81526020016113278888611ac7565b815250905060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff16815260200163f4f18d9060e01b8360405160240161136c9190612416565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152905291506112bf9050565b600085516002811115611409576114096122d8565b14156114ae5760006040518060a00160405280848152602001876020015173ffffffffffffffffffffffffffffffffffffffff16815260200142610e1061145091906123bd565b815260a088015160208201526040016114698888611b01565b815250905060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff16815260200163c04b8d5960e01b8360405160240161136c91906124b1565b6002855160028111156114c3576114c36122d8565b14156115685760006040518060a00160405280848152602001876020015173ffffffffffffffffffffffffffffffffffffffff16815260200142610e1061150a91906123bd565b815260a088015160208201526040016115238888611b01565b815250905060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff16815260200163f28c049860e01b8360405160240161136c91906124b1565b84516040517ffe7995cf00000000000000000000000000000000000000000000000000000000815261088291906004016123d5565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60408051808201909152600081526060602082015260018551600281111561163c5761163c6122d8565b141561175e5760006040518060c00160405280876040015173ffffffffffffffffffffffffffffffffffffffff168152602001876060015173ffffffffffffffffffffffffffffffffffffffff168152602001611698856108e2565b62ffffff1681526020016116ae42610e106123bd565b81526020016116bd8888611ac7565b8152600060209182015260408051808201825273ffffffffffffffffffffffffffffffffffffffff8881168252825185518216602482015285850151821660448201529285015162ffffff16606484015260608501516084840152608085015160a484015260a08501511660c4830152929350908201907fc7fbf4de000000000000000000000000000000000000000000000000000000009060e40161136c565b600085516002811115611773576117736122d8565b1415611881576000604051806101000160405280876040015173ffffffffffffffffffffffffffffffffffffffff168152602001876060015173ffffffffffffffffffffffffffffffffffffffff1681526020016117d0856108e2565b62ffffff16815260208881015173ffffffffffffffffffffffffffffffffffffffff169082015260400161180642610e106123bd565b815260a0880151602082015260400161181f8888611b01565b8152602001600073ffffffffffffffffffffffffffffffffffffffff16815250905060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff16815260200163414bf38960e01b8360405160240161136c91906124c4565b600285516002811115611896576118966122d8565b1415611568576000604051806101000160405280876040015173ffffffffffffffffffffffffffffffffffffffff168152602001876060015173ffffffffffffffffffffffffffffffffffffffff1681526020016118f3856108e2565b62ffffff16815260208881015173ffffffffffffffffffffffffffffffffffffffff169082015260400161192942610e106123bd565b815260a088015160208201526040016119428888611b01565b8152602001600073ffffffffffffffffffffffffffffffffffffffff16815250905060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff16815260200163db3e219860e01b8360405160240161136c91906124c4565b600085604001516119b757506000611abe565b83604001516119c857506001611abe565b6000611a258688602001516b033b2e3c9fd0803ce8000000868b606001516119f0919061253f565b6119fa919061257c565b60208901516b033b2e3c9fd0803ce8000000611a16898b61253f565b611a20919061257c565b611be8565b9050600086516002811115611a3c57611a3c6122d8565b1480611a5a5750600186516002811115611a5857611a586122d8565b145b15611a66579050611abe565b600286516002811115611a7b57611a7b6122d8565b1415611a8957159050611abe565b85516040517ffe7995cf00000000000000000000000000000000000000000000000000000000815261088291906004016123d5565b95945050505050565b60a0820151600090611aee84611ae9856b033b2e3c9fd0803ce800000061253f565b611b01565b611af8919061257c565b90505b92915050565b60008260e0015115611b1557506000611afb565b600083516002811115611b2a57611b2a6122d8565b1480611b485750600183516002811115611b4657611b466122d8565b145b15611b7b5760c083015161271090611b6090826125b7565b611b6a908461253f565b611b74919061257c565b9050611afb565b600283516002811115611b9057611b906122d8565b1415611bb35760c0830151611ba7906127106123bd565b611b6a6127108461253f565b82516040517ffe7995cf00000000000000000000000000000000000000000000000000000000815261088291906004016123d5565b6000611c286040518060400160405280600c81526020017f414141202d20616d6f756e740000000000000000000000000000000000000000815250611cd9565b611c3185611d68565b611c3a84611d68565b611c4383611d68565b611c4c82611d68565b611c5e611c5985876125b7565b611d68565b611c6b611c5983856125b7565b611c74866110eb565b611c9557611c8282846123bd565b611c8c85876123bd565b10159050611abe565b838510158015611ca55750818310155b15611cbe57611cb482846125b7565b611c8c85876125b7565b838510611ccc576001611ccf565b60005b9695505050505050565b6110e881604051602401611ced9190611f30565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f41304fac00000000000000000000000000000000000000000000000000000000179052611df5565b6110e881604051602401611d7e91815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff5b1bba9000000000000000000000000000000000000000000000000000000001790525b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b803560038110611e2557600080fd5b919050565b73ffffffffffffffffffffffffffffffffffffffff811681146110e857600080fd5b8035611e2581611e2a565b60008060008060008060c08789031215611e7057600080fd5b611e7987611e16565b95506020870135611e8981611e2a565b9450604087013593506060870135611ea081611e2a565b92506080870135915060a0870135611eb781611e2a565b809150509295509295509295565b6000815180845260005b81811015611eeb57602081850181015186830182015201611ecf565b81811115611efd576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611af86020830184611ec5565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610100810167ffffffffffffffff81118282101715611f9657611f96611f43565b60405290565b600082601f830112611fad57600080fd5b8135602067ffffffffffffffff80831115611fca57611fca611f43565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f8301168101818110848211171561200d5761200d611f43565b60405293845285810183019383810192508785111561202b57600080fd5b83870191505b8482101561205357813561204481611e2a565b83529183019190830190612031565b979650505050505050565b80358015158114611e2557600080fd5b6000806040838503121561208157600080fd5b823567ffffffffffffffff8082111561209957600080fd5b9084019061010082870312156120ae57600080fd5b6120b6611f72565b6120bf83611e16565b81526120cd60208401611e4c565b60208201526120de60408401611e4c565b60408201526120ef60608401611e4c565b606082015260808301358281111561210657600080fd5b61211288828601611f9c565b60808301525060a083013560a082015260c083013560c082015261213860e0840161205e565b60e0820152935061214e91505060208401611e4c565b90509250929050565b60208082528251608083830152805173ffffffffffffffffffffffffffffffffffffffff1660a08401520151604060c083015260009061219a60e0840182611ec5565b905060208401516040840152604084015115156060840152606084015160808401528091505092915050565b6000602082840312156121d857600080fd5b81356121e381611e2a565b9392505050565b6000806000806080858703121561220057600080fd5b843561220b81611e2a565b9350602085013561221b81611e2a565b9250604085013561222b81611e2a565b9396929550929360600135925050565b60006020828403121561224d57600080fd5b5035919050565b6000806040838503121561226757600080fd5b823561227281611e2a565b9150602083013561228281611e2a565b809150509250929050565b6000806000606084860312156122a257600080fd5b83356122ad81611e2a565b925060208401356122bd81611e2a565b915060408401356122cd81611e2a565b809150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60006020828403121561231957600080fd5b81516121e381611e2a565b60006020828403121561233657600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60408152600061237f6040830185611ec5565b90508260208301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156123d0576123d061238e565b500190565b6020810160038310612410577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6020815260008251606060208401526124326080840182611ec5565b905060208401516040840152604084015160608401528091505092915050565b6000815160a0845261246760a0850182611ec5565b905073ffffffffffffffffffffffffffffffffffffffff60208401511660208501526040830151604085015260608301516060850152608083015160808501528091505092915050565b602081526000611af86020830184612452565b6101008101611afb828473ffffffffffffffffffffffffffffffffffffffff80825116835280602083015116602084015262ffffff60408301511660408401528060608301511660608401526080820151608084015260a082015160a084015260c082015160c08401528060e08301511660e0840152505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156125775761257761238e565b500290565b6000826125b2577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000828210156125c9576125c961238e565b50039056fea2646970667358221220f48bf290d42d727585d0174d5aecb1c111d9a28593d6c27486ce6672041893ce64736f6c634300080a003360806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d00011790553480156200003a57600080fd5b506040805161018081019091526000908060c081018060018152604080518082018252600381526244414960e81b6020828101919091528301526012908201526305f5e100606082015260800160018152602001600081525081526020016040518060c001604052806002600a811115620000b957620000b962000b78565b815260408051808201825260048152635553444360e01b6020828101919091528301526006908201526305f5e100606082015260800160018152602001600081525081526020016040518060c001604052806003600a81111562000121576200012162000b78565b815260408051808201825260048152630ae8aa8960e31b602082810191909152830152601290820152644a817c8000606082015260800160028152602001600081525081526020016040518060c001604052806004600a8111156200018a576200018a62000b78565b815260408051808201825260048152634c494e4b60e01b6020828101919091528301526012908201526359682f00606082015260800160018152602001600081525081526020016040518060c001604052806005600a811115620001f257620001f262000b78565b815260408051808201825260048152631554d11560e21b602082810191909152830152601290820152633b023380606082015260800160018152602001600081525081526020016040518060c001604052806006600a8111156200025a576200025a62000b78565b815260408051808201825260058152640e6e88aa8960db1b602082810191909152830152601290820152644cd588640060608201526080016003815260200160009052905260408051610140810190915290915060009080608081018060078152602001604051806040016040528060048152602001636344414960e01b8152508152602001601260ff1681526020016305f5e100815260200160048081111562000309576200030962000b78565b8152602001600181525081526020016040518060c001604052806008600a81111562000339576200033962000b78565b81526040805180820182526005815264635553444360d81b6020828101919091528301526006908201526305f5e100606082015260800160048152602001600281525081526020016040518060c001604052806009600a811115620003a257620003a262000b78565b8152604080518082018252600581526418d554d11560da1b602082810191909152830152601290820152633b023380606082015260800160048152602001600581525081526020016040518060c00160405280600a808111156200040a576200040a62000b78565b81526040805180820182526005815264634c494e4b60d81b6020828101919091528301526012908201526359682f00606082015260800160048152602001600490529052905060005b600681101562000496576200048183826006811062000476576200047662000b8e565b6020020151620004db565b806200048d8162000ba4565b91505062000453565b5060005b6004811015620004d257620004bd82826004811062000476576200047662000b8e565b80620004c98162000ba4565b9150506200049a565b50505062000d14565b6000600282608001516004811115620004f857620004f862000b78565b14156200054e576040516200050d9062000a8c565b604051809103906000f0801580156200052a573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b03831617905590506200071e565b60038260800151600481111562000569576200056962000b78565b1415620005a4576040516200057e9062000a9a565b604051809103906000f0801580156200059b573d6000803e3d6000fd5b5090506200071e565b600182608001516004811115620005bf57620005bf62000b78565b1415620005f157816020015182602001518360400151604051620005e39062000aa8565b6200057e9392919062000c1e565b6004826080015160048111156200060c576200060c62000b78565b1415620006be576000600260008460a00151600a81111562000632576200063262000b78565b600a81111562000646576200064662000b78565b815260200190815260200160002060009054906101000a90046001600160a01b0316905082602001518360200151846040015183604051620006889062000ab6565b62000697949392919062000c5b565b604051809103906000f080158015620006b4573d6000803e3d6000fd5b509150506200071e565b60405162461bcd60e51b815260206004820152602b60248201527f74657374546f6b656e53756974653a204372656174696e6720756e6b6e6f776e60448201526a20746f6b656e207479706560a81b606482015260840160405180910390fd5b60005460208301516040516318caf8e360e31b8152620100009092046001600160a01b03169163c657c718916200075b9185919060040162000ca9565b600060405180830381600087803b1580156200077657600080fd5b505af11580156200078b573d6000803e3d6000fd5b50505050600082606001516008604051620007a69062000ac4565b91825260ff166020820152604001604051809103906000f080158015620007d1573d6000803e3d6000fd5b50905081600260008560000151600a811115620007f257620007f262000b78565b600a81111562000806576200080662000b78565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055508260600151600560008560000151600a8111156200085a576200085a62000b78565b600a8111156200086e576200086e62000b78565b8152602080820192909252604090810160009081209390935585516001600160a01b03861684526008909252909120805460ff1916600183600a811115620008ba57620008ba62000b78565b02179055508260800151600360008560000151600a811115620008e157620008e162000b78565b600a811115620008f557620008f562000b78565b81526020810191909152604001600020805460ff1916600183600481111562000922576200092262000b78565b0217905550604080518082019091526001600160a01b0380841682528281166020808401918252600780546001810182556000918252945160029095027fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688810180549686166001600160a01b031997881617905592517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c689909301805493909416929094169190911790915584015184519091600491600a811115620009eb57620009eb62000b78565b600a811115620009ff57620009ff62000b78565b8152602001908152602001600020908051906020019062000a2292919062000ad2565b5080600660008560000151600a81111562000a415762000a4162000b78565b600a81111562000a555762000a5562000b78565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550505050565b610ab1806200285183390190565b611224806200330283390190565b611758806200452683390190565b6117098062005c7e83390190565b6106ca806200738783390190565b82805462000ae09062000cd7565b90600052602060002090601f01602090048101928262000b04576000855562000b4f565b82601f1062000b1f57805160ff191683800117855562000b4f565b8280016001018555821562000b4f579182015b8281111562000b4f57825182559160200191906001019062000b32565b5062000b5d92915062000b61565b5090565b5b8082111562000b5d576000815560010162000b62565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600060001982141562000bc757634e487b7160e01b600052601160045260246000fd5b5060010190565b6000815180845260005b8181101562000bf65760208185018101518683018201520162000bd8565b8181111562000c09576000602083870101525b50601f01601f19169290920160200192915050565b60608152600062000c33606083018662000bce565b828103602084015262000c47818662000bce565b91505060ff83166040830152949350505050565b60808152600062000c70608083018762000bce565b828103602084015262000c84818762000bce565b60ff95909516604084015250506001600160a01b039190911660609091015292915050565b6001600160a01b038316815260406020820181905260009062000ccf9083018462000bce565b949350505050565b600181811c9082168062000cec57607f821691505b6020821081141562000d0e57634e487b7160e01b600052602260045260246000fd5b50919050565b611b2d8062000d246000396000f3fe6080604052600436106101635760003560e01c80638eb86e8b116100c0578063c6c3bbe611610074578063d051a62211610059578063d051a62214610490578063eebab8ef146104b0578063fa7626d4146104d057600080fd5b8063c6c3bbe614610433578063c74912d21461045357600080fd5b80639b140a85116100a55780639b140a85146103e6578063b36ba20814610406578063ba414fa61461040e57600080fd5b80638eb86e8b1461038357806398cdaadf146103a357600080fd5b80636a72bde71161011757806388327863116100fc578063883278631461030857806388f776a2146103365780638a3177a31461035657600080fd5b80636a72bde7146102c45780636ca42ae3146102e657600080fd5b8063440864fa11610148578063440864fa146102025780634b57b0be1461022f57806367b426451461028157600080fd5b806304bc3b1c1461016f57806310c7f0b9146101b557600080fd5b3661016a57005b600080fd5b34801561017b57600080fd5b5061019f61018a3660046116f6565b60086020526000908152604090205460ff1681565b6040516101ac9190611742565b60405180910390f35b3480156101c157600080fd5b506101d56101d036600461175c565b6104ea565b6040805173ffffffffffffffffffffffffffffffffffffffff9384168152929091166020830152016101ac565b34801561020e57600080fd5b5061022261021d366004611784565b610530565b6040516101ac91906117cb565b34801561023b57600080fd5b5060015461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101ac565b34801561028d57600080fd5b5061025c61029c366004611784565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156102d057600080fd5b506102e46102df36600461181c565b6105ca565b005b3480156102f257600080fd5b506102fb610730565b6040516101ac919061186b565b34801561031457600080fd5b506103286103233660046118d4565b6107b5565b6040519081526020016101ac565b34801561034257600080fd5b506102e461035136600461190b565b610888565b34801561036257600080fd5b50610328610371366004611784565b60056020526000908152604090205481565b34801561038f57600080fd5b506102e461039e366004611954565b6108b9565b3480156103af57600080fd5b5061025c6103be366004611784565b60066020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156103f257600080fd5b506102e4610401366004611993565b610a73565b6102e4610b22565b34801561041a57600080fd5b50610423610ba0565b60405190151581526020016101ac565b34801561043f57600080fd5b506102e461044e3660046119b3565b610d00565b34801561045f57600080fd5b5061048361046e366004611784565b60036020526000908152604090205460ff1681565b6040516101ac91906119d3565b34801561049c57600080fd5b506103286104ab36600461190b565b610daf565b3480156104bc57600080fd5b506102e46104cb366004611954565b610e8b565b3480156104dc57600080fd5b506000546104239060ff1681565b600781815481106104fa57600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff91821692501682565b60046020526000908152604090208054610549906119e7565b80601f0160208091040260200160405190810160405280929190818152602001828054610575906119e7565b80156105c25780601f10610597576101008083540402835291602001916105c2565b820191906000526020600020905b8154815290600101906020018083116105a557829003601f168201915b505050505081565b6000546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152620100009092049091169063ca669fa790602401600060405180830381600087803b15801561063e57600080fd5b505af1158015610652573d6000803e3d6000fd5b505050506002600085600a81111561066c5761066c611713565b600a81111561067d5761067d611713565b8152602081019190915260409081016000205490517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490529091169063095ea7b3906044016020604051808303816000875af1158015610705573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107299190611a3b565b5050505050565b60606007805480602002602001604051908101604052809291908181526020016000905b828210156107ac5760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff908116835260019182015416828401529083529092019101610754565b50505050905090565b60006002600084600a8111156107cd576107cd611713565b600a8111156107de576107de611713565b8152602081019190915260409081016000205490517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152909116906370a0823190602401602060405180830381865afa15801561085d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108819190611a5d565b9392505050565b6108b48383837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6105ca565b505050565b60016003600085600a8111156108d1576108d1611713565b600a8111156108e2576108e2611713565b815260208101919091526040016000205460ff16600481111561090757610907611713565b14610999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f74657374546f6b656e53756974653a20547279696e6720746f206275726e206160448201527f206e6f6e2d6e6f726d616c20746f6b656e00000000000000000000000000000060648201526084015b60405180910390fd5b6002600084600a8111156109af576109af611713565b600a8111156109c0576109c0611713565b8152602081019190915260409081016000205490517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526024820184905290911690639dc29fac906044015b6020604051808303816000875af1158015610a49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6d9190611a3b565b50505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604081205460ff169081600a811115610aaf57610aaf611713565b1415610b17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f20746f6b656e2077697468207375636820616464726573730000000000006044820152606401610990565b610a6d818484610888565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015610b8c57600080fd5b505af1158015610729573d6000803e3d6000fd5b60008054610100900460ff1615610bc05750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610cfb5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610c65917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc491608001611a76565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052610c9d91611abe565b6000604051808303816000865af19150503d8060008114610cda576040519150601f19603f3d011682016040523d82523d6000602084013e610cdf565b606091505b5091505080806020019051810190610cf79190611a3b565b9150505b919050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604081205460ff169081600a811115610d3c57610d3c611713565b1415610da4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f20746f6b656e2077697468207375636820616464726573730000000000006044820152606401610990565b610a6d818484610e8b565b60006002600085600a811115610dc757610dc7611713565b600a811115610dd857610dd8611713565b8152602081019190915260409081016000205490517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301529091169063dd62ed3e90604401602060405180830381865afa158015610e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e839190611a5d565b949350505050565b60026003600085600a811115610ea357610ea3611713565b600a811115610eb457610eb4611713565b815260208101919091526040016000205460ff166004811115610ed957610ed9611713565b1415610ff6576000546040517fc88a5e6d000000000000000000000000000000000000000000000000000000008152306004820152602481018390526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c88a5e6d90604401600060405180830381600087803b158015610f5657600080fd5b505af1158015610f6a573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015610fd857600080fd5b505af1158015610fec573d6000803e3d6000fd5b505050505061163c565b600380600085600a81111561100d5761100d611713565b600a81111561101e5761101e611713565b815260208101919091526040016000205460ff16600481111561104357611043611713565b14156111aa576000546040517fc88a5e6d000000000000000000000000000000000000000000000000000000008152306004820152602481018390526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c88a5e6d90604401600060405180830381600087803b1580156110c057600080fd5b505af11580156110d4573d6000803e3d6000fd5b505050506002600084600a8111156110ee576110ee611713565b600a8111156110ff576110ff611713565b8152602081019190915260409081016000205490517fa1903eab00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a1903eab90839060240160206040518083038185885af115801561117f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906111a49190611a5d565b5061163c565b60046003600085600a8111156111c2576111c2611713565b600a8111156111d3576111d3611713565b815260208101919091526040016000205460ff1660048111156111f8576111f8611713565b141561148f5760006002600085600a81111561121657611216611713565b600a81111561122757611227611713565b815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c49190611ada565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600860205260409020549091506112fb9060ff163084610e8b565b8073ffffffffffffffffffffffffffffffffffffffff1663095ea7b36002600087600a81111561132d5761132d611713565b600a81111561133e5761133e611713565b81526020810191909152604090810160002054905160e083901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602481018590526044016020604051808303816000875af11580156113c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e69190611a3b565b506002600085600a8111156113fd576113fd611713565b600a81111561140e5761140e611713565b8152602081019190915260409081016000205490517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810184905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f1990604401600060405180830381600087803b158015610fd857600080fd5b60016003600085600a8111156114a7576114a7611713565b600a8111156114b8576114b8611713565b815260208101919091526040016000205460ff1660048111156114dd576114dd611713565b14156115b4576002600084600a8111156114f9576114f9611713565b600a81111561150a5761150a611713565b8152602081019190915260409081016000205490517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f19906044016020604051808303816000875af1158015611590573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a49190611a3b565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f74657374546f6b656e53756974653a20547279696e6720746f207472616e736660448201527f657220756e6b6e6f776e20746f6b656e000000000000000000000000000000006064820152608401610990565b6002600084600a81111561165257611652611713565b600a81111561166357611663611713565b8152602081019190915260409081016000205490517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490529091169063a9059cbb90604401610a2a565b73ffffffffffffffffffffffffffffffffffffffff811681146116f357600080fd5b50565b60006020828403121561170857600080fd5b8135610881816116d1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60208101600b831061175657611756611713565b91905290565b60006020828403121561176e57600080fd5b5035919050565b8035600b8110610cfb57600080fd5b60006020828403121561179657600080fd5b61088182611775565b60005b838110156117ba5781810151838201526020016117a2565b83811115610a6d5750506000910152565b60208152600082518060208401526117ea81604085016020870161179f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000806080858703121561183257600080fd5b61183b85611775565b9350602085013561184b816116d1565b9250604085013561185b816116d1565b9396929550929360600135925050565b602080825282518282018190526000919060409081850190868401855b828110156118c7578151805173ffffffffffffffffffffffffffffffffffffffff90811686529087015116868501529284019290850190600101611888565b5091979650505050505050565b600080604083850312156118e757600080fd5b6118f083611775565b91506020830135611900816116d1565b809150509250929050565b60008060006060848603121561192057600080fd5b61192984611775565b92506020840135611939816116d1565b91506040840135611949816116d1565b809150509250925092565b60008060006060848603121561196957600080fd5b61197284611775565b92506020840135611982816116d1565b929592945050506040919091013590565b6000806000606084860312156119a857600080fd5b8335611929816116d1565b6000806000606084860312156119c857600080fd5b8335611972816116d1565b602081016005831061175657611756611713565b600181811c908216806119fb57607f821691505b60208210811415611a35577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600060208284031215611a4d57600080fd5b8151801515811461088157600080fd5b600060208284031215611a6f57600080fd5b5051919050565b7fffffffff000000000000000000000000000000000000000000000000000000008316815260008251611ab081600485016020870161179f565b919091016004019392505050565b60008251611ad081846020870161179f565b9190910192915050565b600060208284031215611aec57600080fd5b8151610881816116d156fea264697066735822122010fe735ed069aca27931edce4ba2ff14ec7886bf21b0eea685a884f9200fb49e64736f6c634300080a003360c0604052600d60808190526c2bb930b83832b21022ba3432b960991b60a090815261002e916000919061007a565b50604080518082019091526004808252630ae8aa8960e31b602090920191825261005a9160019161007a565b506002805460ff1916601217905534801561007457600080fd5b5061014e565b82805461008690610113565b90600052602060002090601f0160209004810192826100a857600085556100ee565b82601f106100c157805160ff19168380011785556100ee565b828001600101855582156100ee579182015b828111156100ee5782518255916020019190600101906100d3565b506100fa9291506100fe565b5090565b5b808211156100fa57600081556001016100ff565b600181811c9082168061012757607f821691505b6020821081141561014857634e487b7160e01b600052602260045260246000fd5b50919050565b6109548061015d6000396000f3fe6080604052600436106100cb5760003560e01c806340c10f1911610074578063a9059cbb1161004e578063a9059cbb14610225578063d0e30db014610245578063dd62ed3e1461024d57600080fd5b806340c10f19146101c357806370a08231146101e357806395d89b411461021057600080fd5b806323b872dd116100a557806323b872dd146101575780632e1a7d4d14610177578063313ce5671461019757600080fd5b806306fdde03146100df578063095ea7b31461010a57806318160ddd1461013a57600080fd5b366100da576100d8610285565b005b600080fd5b3480156100eb57600080fd5b506100f46102e0565b6040516101019190610703565b60405180910390f35b34801561011657600080fd5b5061012a61012536600461079f565b61036e565b6040519015158152602001610101565b34801561014657600080fd5b50475b604051908152602001610101565b34801561016357600080fd5b5061012a6101723660046107c9565b6103e7565b34801561018357600080fd5b506100d8610192366004610805565b6105fe565b3480156101a357600080fd5b506002546101b19060ff1681565b60405160ff9091168152602001610101565b3480156101cf57600080fd5b506100d86101de36600461079f565b6106a4565b3480156101ef57600080fd5b506101496101fe36600461081e565b60036020526000908152604090205481565b34801561021c57600080fd5b506100f46106e2565b34801561023157600080fd5b5061012a61024036600461079f565b6106ef565b6100d8610285565b34801561025957600080fd5b50610149610268366004610839565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102a490849061089b565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102ed906108b3565b80601f0160208091040260200160405190810160405280929190818152602001828054610319906108b3565b80156103665780601f1061033b57610100808354040283529160200191610366565b820191906000526020600020905b81548152906001019060200180831161034957829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103d69086815260200190565b60405180910390a350600192915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561041957600080fd5b73ffffffffffffffffffffffffffffffffffffffff8416331480159061048f575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105175773ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020548211156104d157600080fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915281208054849290610511908490610907565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061054c908490610907565b909155505073ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260408120805484929061058690849061089b565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516105ec91815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561061a57600080fd5b3360009081526003602052604081208054839290610639908490610907565b9091555050604051339082156108fc029083906000818181858888f1935050505015801561066b573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260036020526040812080548392906106d990849061089b565b90915550505050565b600180546102ed906108b3565b60006106fc3384846103e7565b9392505050565b600060208083528351808285015260005b8181101561073057858101830151858201604001528201610714565b81811115610742576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461079a57600080fd5b919050565b600080604083850312156107b257600080fd5b6107bb83610776565b946020939093013593505050565b6000806000606084860312156107de57600080fd5b6107e784610776565b92506107f560208501610776565b9150604084013590509250925092565b60006020828403121561081757600080fd5b5035919050565b60006020828403121561083057600080fd5b6106fc82610776565b6000806040838503121561084c57600080fd5b61085583610776565b915061086360208401610776565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156108ae576108ae61086c565b500190565b600181811c908216806108c757607f821691505b60208210811415610901577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000828210156109195761091961086c565b50039056fea26469706673582212206ec943fa4e3b70d8fca6c25b6aa26fa18e8f8952ce3bc4d5afcb443bf3097c0564736f6c634300080a003360806040526000600255600060035534801561001a57600080fd5b506111fa8061002a6000396000f3fe60806040526004361061016e5760003560e01c80637a28fb88116100cb578063bdd17e1c1161007f578063dd62ed3e11610059578063dd62ed3e146103ee578063ee7a7c0414610441578063f5eb42dc1461046157600080fd5b8063bdd17e1c146103ad578063cdb9a21c146103c3578063d5002f2e146103d957600080fd5b8063a1903eab116100b0578063a1903eab1461035a578063a457c2d71461036d578063a9059cbb1461038d57600080fd5b80637a28fb88146102f457806395d89b411461031457600080fd5b806323b872dd1161012257806337cfdaca1161010757806337cfdaca1461020d57806339509351146102b457806370a08231146102d457600080fd5b806323b872dd14610278578063313ce5671461029857600080fd5b806318160ddd1161015357806318160ddd1461020d578063192084511461023057806322301f6e1461025057600080fd5b806306fdde0314610185578063095ea7b3146101dd57600080fd5b366101805761017d6000610481565b50005b600080fd5b34801561019157600080fd5b5060408051808201909152601781527f4c6971756964207374616b656420457468657220322e3000000000000000000060208201525b6040516101d49190610f63565b60405180910390f35b3480156101e957600080fd5b506101fd6101f8366004610fff565b610545565b60405190151581526020016101d4565b34801561021957600080fd5b5061022261055b565b6040519081526020016101d4565b34801561023c57600080fd5b5061022261024b366004611029565b61056b565b34801561025c57600080fd5b5061027661026b366004611042565b600391909155600255565b005b34801561028457600080fd5b506101fd610293366004611064565b6105ab565b3480156102a457600080fd5b50604051601281526020016101d4565b3480156102c057600080fd5b506101fd6102cf366004610fff565b610696565b3480156102e057600080fd5b506102226102ef3660046110a0565b6106d9565b34801561030057600080fd5b5061022261030f366004611029565b61070e565b34801561032057600080fd5b5060408051808201909152600581527f737445544800000000000000000000000000000000000000000000000000000060208201526101c7565b6102226103683660046110a0565b61073a565b34801561037957600080fd5b506101fd610388366004610fff565b610745565b34801561039957600080fd5b506101fd6103a8366004610fff565b6107f9565b3480156103b957600080fd5b5061022260035481565b3480156103cf57600080fd5b5061022260025481565b3480156103e557600080fd5b50610222610806565b3480156103fa57600080fd5b506102226104093660046110bb565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b34801561044d57600080fd5b5061027661045c366004610fff565b610811565b34801561046d57600080fd5b5061022261047c3660046110a0565b61081f565b60003334806104f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f5a45524f5f4445504f534954000000000000000000000000000000000000000060448201526064015b60405180910390fd5b60006104fc8261056b565b9050806105065750805b8160036000828254610518919061111d565b909155506105289050838261084a565b61053383838761093b565b61053d8382610992565b949350505050565b60006105523384846109ea565b50600192915050565b600061056660035490565b905090565b60008061057760035490565b9050806105875750600092915050565b6105a48161059e61059760025490565b8690610b52565b90610b5e565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001602090815260408083203384529091528120548281101561066c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f5452414e534645525f414d4f554e545f455843454544535f414c4c4f57414e4360448201527f450000000000000000000000000000000000000000000000000000000000000060648201526084016104e8565b610677858585610b6a565b61068b85336106868487610bef565b6109ea565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916105529185906106869086610bfb565b73ffffffffffffffffffffffffffffffffffffffff81166000908152602081905260408120546107089061070e565b92915050565b60008061071a60025490565b90508061072a5750600092915050565b6105a48161059e61059760035490565b600061070882610481565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156107e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4445435245415345445f414c4c4f57414e43455f42454c4f575f5a45524f000060448201526064016104e8565b6107ef33856106868487610bef565b5060019392505050565b6000610552338484610b6a565b600061056660025490565b61081b8282610c07565b5050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040812054610708565b73ffffffffffffffffffffffffffffffffffffffff82166108c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4d494e545f544f5f5448455f5a45524f5f41444452455353000000000000000060448201526064016104e8565b80600260008282546108d9919061111d565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205461090e9082610bfb565b73ffffffffffffffffffffffffffffffffffffffff90921660009081526020819052604090209190915550565b6040805183815273ffffffffffffffffffffffffffffffffffffffff83811660208301528516917fed8dd430b1e4bba98e943dc5b157cf7b54d9e12916d6c474ff5733a95001d03b910160405180910390a2505050565b73ffffffffffffffffffffffffffffffffffffffff821660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6109d58461070e565b60405190815260200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff8316610a67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f415050524f56455f46524f4d5f5a45524f5f414444524553530000000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff8216610ae4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f415050524f56455f544f5f5a45524f5f4144445245535300000000000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006105a48284611135565b60006105a48284611172565b6000610b758261056b565b9050610b82848483610d64565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610be191815260200190565b60405180910390a350505050565b60006105a482846111ad565b60006105a4828461111d565b73ffffffffffffffffffffffffffffffffffffffff8216610c84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4255524e5f46524f4d5f5448455f5a45524f5f4144445245535300000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205480821115610d14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4255524e5f414d4f554e545f455843454544535f42414c414e4345000000000060448201526064016104e8565b8160026000828254610d2691906111ad565b90915550610d3690508183610bef565b73ffffffffffffffffffffffffffffffffffffffff9093166000908152602081905260409020929092555050565b73ffffffffffffffffffffffffffffffffffffffff8316610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f5452414e534645525f46524f4d5f5448455f5a45524f5f41444452455353000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff8216610e5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f5452414e534645525f544f5f5448455f5a45524f5f414444524553530000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205480821115610eee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5452414e534645525f414d4f554e545f455843454544535f42414c414e43450060448201526064016104e8565b610ef88183610bef565b73ffffffffffffffffffffffffffffffffffffffff8086166000908152602081905260408082209390935590851681522054610f349083610bfb565b73ffffffffffffffffffffffffffffffffffffffff909316600090815260208190526040902092909255505050565b600060208083528351808285015260005b81811015610f9057858101830151858201604001528201610f74565b81811115610fa2576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ffa57600080fd5b919050565b6000806040838503121561101257600080fd5b61101b83610fd6565b946020939093013593505050565b60006020828403121561103b57600080fd5b5035919050565b6000806040838503121561105557600080fd5b50508035926020909101359150565b60008060006060848603121561107957600080fd5b61108284610fd6565b925061109060208501610fd6565b9150604084013590509250925092565b6000602082840312156110b257600080fd5b6105a482610fd6565b600080604083850312156110ce57600080fd5b6110d783610fd6565b91506110e560208401610fd6565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611130576111306110ee565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561116d5761116d6110ee565b500290565b6000826111a8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000828210156111bf576111bf6110ee565b50039056fea2646970667358221220a5b4f31162ba2b8b3424cef84b31ef91d05a825243602b5fdf758ffb49b8246364736f6c634300080a003360a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a003360c06040523480156200001157600080fd5b506040516200170938038062001709833981016040819052620000349162000266565b8351849084906200004d906003906020850190620000f3565b50805162000063906004906020840190620000f3565b505050620000806200007a6200009d60201b60201c565b620000a1565b60ff9091166080526001600160a01b031660a05250620003479050565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b82805462000101906200030a565b90600052602060002090601f01602090048101928262000125576000855562000170565b82601f106200014057805160ff191683800117855562000170565b8280016001018555821562000170579182015b828111156200017057825182559160200191906001019062000153565b506200017e92915062000182565b5090565b5b808211156200017e576000815560010162000183565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c157600080fd5b81516001600160401b0380821115620001de57620001de62000199565b604051601f8301601f19908116603f0116810190828211818310171562000209576200020962000199565b816040528381526020925086838588010111156200022657600080fd5b600091505b838210156200024a57858201830151818301840152908201906200022b565b838211156200025c5760008385830101525b9695505050505050565b600080600080608085870312156200027d57600080fd5b84516001600160401b03808211156200029557600080fd5b620002a388838901620001af565b95506020870151915080821115620002ba57600080fd5b50620002c987828801620001af565b935050604085015160ff81168114620002e157600080fd5b60608601519092506001600160a01b0381168114620002ff57600080fd5b939692955090935050565b600181811c908216806200031f57607f821691505b602082108114156200034157634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05161138e6200037b600039600081816101f70152818161041f0152610600015260006101a2015261138e6000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80636f307dc3116100b257806395d89b4111610081578063a9059cbb11610066578063a9059cbb146102b5578063dd62ed3e146102c8578063f2fde38b1461030e57600080fd5b806395d89b411461029a578063a457c2d7146102a257600080fd5b80636f307dc3146101f257806370a082311461023e578063715018a6146102745780638da5cb5b1461027c57600080fd5b806323b872dd116100ee57806323b872dd14610188578063313ce5671461019b57806339509351146101cc57806340c10f19146101df57600080fd5b806306fdde0314610120578063095ea7b31461013e57806318160ddd146101615780631e9a695014610173575b600080fd5b610128610321565b604051610135919061112d565b60405180910390f35b61015161014c3660046111c9565b6103b3565b6040519015158152602001610135565b6002545b604051908152602001610135565b6101866101813660046111c9565b6103c9565b005b6101516101963660046111f3565b610491565b60405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610135565b6101516101da3660046111c9565b61057c565b6101866101ed3660046111c9565b6105c5565b6102197f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b61016561024c36600461122f565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610186610691565b60055473ffffffffffffffffffffffffffffffffffffffff16610219565b61012861071e565b6101516102b03660046111c9565b61072d565b6101516102c33660046111c9565b610805565b6101656102d6366004611251565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b61018661031c36600461122f565b610812565b60606003805461033090611284565b80601f016020809104026020016040519081016040528092919081815260200182805461035c90611284565b80156103a95780601f1061037e576101008083540402835291602001916103a9565b820191906000526020600020905b81548152906001019060200180831161038c57829003601f168201915b5050505050905090565b60006103c0338484610942565b50600192915050565b6103d33382610af5565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015610468573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048c91906112d8565b505050565b600061049e848484610ce2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6105718533858403610942565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916103c09185906105c0908690611329565b610942565b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906323b872dd906064016020604051808303816000875af115801561065e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068291906112d8565b5061068d8282610f96565b5050565b60055473ffffffffffffffffffffffffffffffffffffffff163314610712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161055b565b61071c60006110b6565b565b60606004805461033090611284565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156107ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161055b565b6107fb3385858403610942565b5060019392505050565b60006103c0338484610ce2565b60055473ffffffffffffffffffffffffffffffffffffffff163314610893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161055b565b73ffffffffffffffffffffffffffffffffffffffff8116610936576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161055b565b61093f816110b6565b50565b73ffffffffffffffffffffffffffffffffffffffff83166109e4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff8216610a87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8216610b98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015610c4e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290610c8a908490611341565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff8216610e28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610ede576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610f22908490611329565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f8891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161055b565b80600260008282546110259190611329565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152602081905260408120805483929061105f908490611329565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208083528351808285015260005b8181101561115a5785810183015185820160400152820161113e565b8181111561116c576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146111c457600080fd5b919050565b600080604083850312156111dc57600080fd5b6111e5836111a0565b946020939093013593505050565b60008060006060848603121561120857600080fd5b611211846111a0565b925061121f602085016111a0565b9150604084013590509250925092565b60006020828403121561124157600080fd5b61124a826111a0565b9392505050565b6000806040838503121561126457600080fd5b61126d836111a0565b915061127b602084016111a0565b90509250929050565b600181811c9082168061129857607f821691505b602082108114156112d2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156112ea57600080fd5b8151801515811461124a57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561133c5761133c6112fa565b500190565b600082821015611353576113536112fa565b50039056fea26469706673582212203a6db30cd3c097921df4156794aa7973eb848711deeb2cffd7c54a9df1fdb0a564736f6c634300080a003360a060405234801561001057600080fd5b506040516106ca3803806106ca83398101604081905261002f9161006c565b60009190915560ff166080526001805460506001600160501b031991821681179092556004805490911690911790554260028190556003556100a2565b6000806040838503121561007f57600080fd5b82519150602083015160ff8116811461009757600080fd5b809150509250929050565b60805161060e6100bc600039600060d3015261060e6000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80639a6fc8f511610081578063d62ada111161005b578063d62ada11146102dc578063f7a30806146102f4578063feaf968c1461030757600080fd5b80639a6fc8f5146101cd578063bd18ad531461023a578063cd653afc1461024d57600080fd5b806354fd4d50116100b257806354fd4d501461012d57806367e8d83d1461013c5780637284e4161461018e57600080fd5b8063313ce567146100ce5780633fd0875f1461010c575b600080fd5b6100f57f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020015b60405180910390f35b6004546a0100000000000000000000900460ff166040516101039190610441565b60405160018152602001610103565b61018c61014a366004610482565b600480549115156c01000000000000000000000000027fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff909216919091179055565b005b604080518082018252600c81527f7072696365206f7261636c6500000000000000000000000000000000000000006020820152905161010391906104ab565b6102036101db36600461053d565b60015460005460025460035460045469ffffffffffffffffffff948516941691939590929450565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610103565b61018c610248366004610558565b61030f565b61018c61025b366004610579565b6001805469ffffffffffffffffffff9586167fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090911617905560029290925560035560048054919092167fffffffffffffffffffffffffffffffffffffffff00ff00000000000000000000909116176b020000000000000000000000179055565b6102e461035f565b6040519015158152602001610103565b61018c6103023660046105bf565b600055565b610203610385565b600480548291907fffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff166b01000000000000000000000083600281111561035757610357610412565b021790555050565b600454600090610380906b010000000000000000000000900460ff166103d6565b905090565b60008060008060006004600c9054906101000a900460ff16156103a757600080fd5b505060015460005460025460035460045469ffffffffffffffffffff9485169893975091955093509190911690565b600060028260028111156103ec576103ec610412565b14156103f757600080fd5b600182600281111561040b5761040b610412565b1492915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016006831061047c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561049457600080fd5b813580151581146104a457600080fd5b9392505050565b600060208083528351808285015260005b818110156104d8578581018301518582016040015282016104bc565b818111156104ea576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803569ffffffffffffffffffff8116811461053857600080fd5b919050565b60006020828403121561054f57600080fd5b6104a48261051e565b60006020828403121561056a57600080fd5b8135600381106104a457600080fd5b6000806000806080858703121561058f57600080fd5b6105988561051e565b935060208501359250604085013591506105b46060860161051e565b905092959194509250565b6000602082840312156105d157600080fd5b503591905056fea264697066735822122014874f7a973b86501c4c1a8be32490fe902c8f088ee234d25f9b2497e19f9e5264736f6c634300080a00335745544820746f204441492067617320707269636520697320696e636f727265637444414920746f20574554482067617320707269636520697320696e636f7272656374a264697066735822122033d7e129869a1b72260adb220be696d9ae79023e1f0258b3ddb95738d0dc652064736f6c634300080a0033"; - -type UniswapV3PathFinderTestConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: UniswapV3PathFinderTestConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class UniswapV3PathFinderTest__factory extends ContractFactory { - constructor(...args: UniswapV3PathFinderTestConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): UniswapV3PathFinderTest { - return super.attach(address) as UniswapV3PathFinderTest; - } - override connect(signer: Signer): UniswapV3PathFinderTest__factory { - return super.connect(signer) as UniswapV3PathFinderTest__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): UniswapV3PathFinderTestInterface { - return new utils.Interface(_abi) as UniswapV3PathFinderTestInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): UniswapV3PathFinderTest { - return new Contract( - address, - _abi, - signerOrProvider - ) as UniswapV3PathFinderTest; - } -} diff --git a/src/types/factories/contracts/test/pathfinder/UniswapV3PathFinder.t.sol/index.ts b/src/types/factories/contracts/test/pathfinder/UniswapV3PathFinder.t.sol/index.ts deleted file mode 100644 index 03023d43..00000000 --- a/src/types/factories/contracts/test/pathfinder/UniswapV3PathFinder.t.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { UniswapV3PathFinderTest__factory } from "./UniswapV3PathFinderTest__factory"; diff --git a/src/types/factories/contracts/test/pathfinder/YearnPathFinder.t.sol/YearnPathFinderTest__factory.ts b/src/types/factories/contracts/test/pathfinder/YearnPathFinder.t.sol/YearnPathFinderTest__factory.ts deleted file mode 100644 index 1f814d2e..00000000 --- a/src/types/factories/contracts/test/pathfinder/YearnPathFinder.t.sol/YearnPathFinderTest__factory.ts +++ /dev/null @@ -1,676 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - YearnPathFinderTest, - YearnPathFinderTestInterface, -} from "../../../../../contracts/test/pathfinder/YearnPathFinder.t.sol/YearnPathFinderTest"; - -const _abi = [ - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "", - type: "address", - }, - ], - name: "log_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "log_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - name: "log_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "int256", - name: "", - type: "int256", - }, - ], - name: "log_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "address", - name: "val", - type: "address", - }, - ], - name: "log_named_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes", - name: "val", - type: "bytes", - }, - ], - name: "log_named_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes32", - name: "val", - type: "bytes32", - }, - ], - name: "log_named_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - ], - name: "log_named_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "string", - name: "val", - type: "string", - }, - ], - name: "log_named_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - ], - name: "log_named_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "log_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "logs", - type: "event", - }, - { - inputs: [], - name: "IS_TEST", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bool", - name: "withUnderlyings", - type: "bool", - }, - ], - name: "_setUpCurve", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "cft", - outputs: [ - { - internalType: "contract CreditFacadeTestSuite", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditConfigurator", - outputs: [ - { - internalType: "contract CreditConfigurator", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditFacade", - outputs: [ - { - internalType: "contract CreditFacade", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditManager", - outputs: [ - { - internalType: "contract ICreditManagerV2", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "curveAdapter", - outputs: [ - { - internalType: "contract ICurveV1Adapter", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "curveLPPathFinder", - outputs: [ - { - internalType: "contract CurveLPPathFinder", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "curveMetaAdapter", - outputs: [ - { - internalType: "contract ICurveV1Adapter", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "curvePathFinder", - outputs: [ - { - internalType: "contract CurvePathFinder", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "curveV1MetaMock", - outputs: [ - { - internalType: "contract CurveV1MetapoolMock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "curveV1Mock", - outputs: [ - { - internalType: "contract CurveV1Mock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "failed", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "setUp", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_YPF_01_filterYearnAdapters_finds_yearn_adapters_only", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_YPF_02_estimateWithdraw_coverts_withfdraw_correctly", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_YPF_03_withdrawAll_works_correctly", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "tokenMasksMap", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "underlying", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "uniV2adapter", - outputs: [ - { - internalType: "contract IUniswapV2Adapter", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "uniV2mock", - outputs: [ - { - internalType: "contract UniswapV2Mock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "uniV2pathFinder", - outputs: [ - { - internalType: "contract UniswapV2PathFinder", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "uniV3adapter", - outputs: [ - { - internalType: "contract IUniswapV3Adapter", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "uniV3mock", - outputs: [ - { - internalType: "contract UniswapV3Mock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "uniV3pathFinder", - outputs: [ - { - internalType: "contract UniswapV3PathFinder", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "yearnAdapter", - outputs: [ - { - internalType: "contract YearnV2Adapter", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "yearnMock", - outputs: [ - { - internalType: "contract YearnV2Mock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "yearnPathFinder", - outputs: [ - { - internalType: "contract YearnPathFinder", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x60806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d000117905534801561003957600080fd5b506202bed0806200004b6000396000f3fe60806040523480156200001157600080fd5b5060043610620001e95760003560e01c80639f8ad9ec116200010d578063df51443311620000a3578063f67c5bd0116200007a578063f67c5bd014620004c6578063f9aa028a14620004ec578063fa7626d4146200050d578063fca2cea5146200051b57600080fd5b8063df5144331462000463578063eeef8dd01462000484578063f310c6da14620004a557600080fd5b8063c12c21c011620000e4578063c12c21c014620003df578063cac283c81462000400578063ceab13861462000421578063d8d7ca3c146200044257600080fd5b80639f8ad9ec1462000399578063b726558714620003ba578063ba414fa614620003c457600080fd5b80634b7b24a511620001835780636f307dc3116200015a5780636f307dc31462000343578063888411d814620003645780639848c4dc146200036e5780639b6a80a7146200037857600080fd5b80634b7b24a514620002e05780635a521cf814620003015780635ebb2361146200032257600080fd5b8063287b94d711620001c4578063287b94d7146200026657806329d351d814620002875780632b9d0d2814620002a85780632f7a188114620002bf57600080fd5b80630a9254e414620001ee5780631497761e14620001fa5780631c9a755f1462000245575b600080fd5b620001f86200053c565b005b6007546200021b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6012546200021b9073ffffffffffffffffffffffffffffffffffffffff1681565b600b546200021b9073ffffffffffffffffffffffffffffffffffffffff1681565b6008546200021b9073ffffffffffffffffffffffffffffffffffffffff1681565b620001f8620002b9366004620043bc565b62000548565b6002546200021b9073ffffffffffffffffffffffffffffffffffffffff1681565b600a546200021b9073ffffffffffffffffffffffffffffffffffffffff1681565b600e546200021b9073ffffffffffffffffffffffffffffffffffffffff1681565b600c546200021b9073ffffffffffffffffffffffffffffffffffffffff1681565b6005546200021b9073ffffffffffffffffffffffffffffffffffffffff1681565b620001f862001717565b620001f862001e83565b6013546200021b9073ffffffffffffffffffffffffffffffffffffffff1681565b600d546200021b9073ffffffffffffffffffffffffffffffffffffffff1681565b620001f86200203e565b620003ce620021d4565b60405190151581526020016200023c565b6001546200021b9073ffffffffffffffffffffffffffffffffffffffff1681565b6014546200021b9073ffffffffffffffffffffffffffffffffffffffff1681565b6011546200021b9073ffffffffffffffffffffffffffffffffffffffff1681565b6009546200021b9073ffffffffffffffffffffffffffffffffffffffff1681565b6004546200021b9073ffffffffffffffffffffffffffffffffffffffff1681565b600f546200021b9073ffffffffffffffffffffffffffffffffffffffff1681565b6015546200021b9073ffffffffffffffffffffffffffffffffffffffff1681565b620004dd620004d736600462004406565b50600190565b6040519081526020016200023c565b6003546200021b9073ffffffffffffffffffffffffffffffffffffffff1681565b600054620003ce9060ff1681565b6010546200021b9073ffffffffffffffffffffffffffffffffffffffff1681565b620005466200233e565b565b620005526200241b565b60085473ffffffffffffffffffffffffffffffffffffffff1662001714576006546040517f67b42645000000000000000000000000000000000000000000000000000000008152600091620007559173ffffffffffffffffffffffffffffffffffffffff909116906367b4264590620005d19060079060040162004426565b602060405180830381865afa158015620005ef573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000615919062004468565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906367b42645906200066e9060089060040162004426565b602060405180830381865afa1580156200068c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006b2919062004468565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906367b42645906200070b9060099060040162004426565b602060405180830381865afa15801562000729573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200074f919062004468565b62002545565b6006546040517f67b42645000000000000000000000000000000000000000000000000000000008152919250600091620008f19173ffffffffffffffffffffffffffffffffffffffff16906367b4264590620007b79060019060040162004426565b602060405180830381865afa158015620007d5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007fb919062004468565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906367b4264590620008549060029060040162004426565b602060405180830381865afa15801562000872573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000898919062004468565b6006546040517f67b4264500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906367b42645906200070b9060059060040162004426565b60035490915073ffffffffffffffffffffffffffffffffffffffff1615158062000919575082155b156200092457905060605b81816040516200093490620042db565b62000941929190620044db565b604051809103906000f0801580156200095e573d6000803e3d6000fd5b50600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169182179055604080517ffc0c546a00000000000000000000000000000000000000000000000000000000815290516000929163fc0c546a9160048083019260209291908290030181865afa158015620009fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a21919062004468565b6000546040517fc657c71800000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff62010000909104169063c657c7189062000ad190849060040173ffffffffffffffffffffffffffffffffffffffff9190911681526040602082018190526004908201527f3343525600000000000000000000000000000000000000000000000000000000606082015260800190565b600060405180830381600087803b15801562000aec57600080fd5b505af115801562000b01573d6000803e3d6000fd5b505060035473ffffffffffffffffffffffffffffffffffffffff16159150620013159050576000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000b96573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000bbc919062004468565b60085460048054604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9485169490921692632630c12f9282820192602092908290030181865afa15801562000c31573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c57919062004468565b73ffffffffffffffffffffffffffffffffffffffff16639dcb511a8760008151811062000c885762000c886200450d565b60200260200101516040518263ffffffff1660e01b815260040162000cc9919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa15801562000ce7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000d0d919062004468565b60048054604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff90921692632630c12f9282820192602092908290030181865afa15801562000d7b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000da1919062004468565b73ffffffffffffffffffffffffffffffffffffffff16639dcb511a8860018151811062000dd25762000dd26200450d565b60200260200101516040518263ffffffff1660e01b815260040162000e13919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa15801562000e31573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e57919062004468565b60048054604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff90921692632630c12f9282820192602092908290030181865afa15801562000ec5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000eeb919062004468565b73ffffffffffffffffffffffffffffffffffffffff16639dcb511a8960028151811062000f1c5762000f1c6200450d565b60200260200101516040518263ffffffff1660e01b815260040162000f5d919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa15801562000f7b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000fa1919062004468565b60405162000faf90620042e9565b73ffffffffffffffffffffffffffffffffffffffff95861681529385166020850152918416604084015283166060830152909116608082015260c060a082018190526011908201527f43757276654c503350726963654665656400000000000000000000000000000060e082015261010001604051809103906000f0801580156200103e573d6000803e3d6000fd5b506000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291925062010000900473ffffffffffffffffffffffffffffffffffffffff16906306447d5690602401600060405180830381600087803b158015620010c657600080fd5b505af1158015620010db573d6000803e3d6000fd5b505060048054604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9092169450632630c12f935080830192602092918290030181865afa1580156200114d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001173919062004468565b6040517fe8a97a3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301528381166024830152919091169063e8a97a3e90604401600060405180830381600087803b158015620011e757600080fd5b505af1158015620011fc573d6000803e3d6000fd5b50506003546040517f3e7c88d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152611e7860248301529091169250633e7c88d69150604401600060405180830381600087803b1580156200127657600080fd5b505af11580156200128b573d6000803e3d6000fd5b50505050600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620012fa57600080fd5b505af11580156200130f573d6000803e3d6000fd5b50505050505b60015460085460405173ffffffffffffffffffffffffffffffffffffffff928316929091169083906000906200134b90620042f7565b73ffffffffffffffffffffffffffffffffffffffff9485168152928416602084015290831660408301529091166060820152608001604051809103906000f0801580156200139d573d6000803e3d6000fd5b50600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055604051620013f19062004305565b604051809103906000f0801580156200140e573d6000803e3d6000fd5b50600b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283169081179091556008546040517fd914cd4b000000000000000000000000000000000000000000000000000000008152921660048301529063d914cd4b90602401600060405180830381600087803b158015620014a857600080fd5b505af1158015620014bd573d6000803e3d6000fd5b5050600054600754604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152600d60448201527f43555256455f414441505445520000000000000000000000000000000000000060648201526201000090920416925063c657c7189150608401600060405180830381600087803b1580156200156d57600080fd5b505af115801562001582573d6000803e3d6000fd5b5050600054600854604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152600a60448201527f43555256455f4d4f434b0000000000000000000000000000000000000000000060648201526201000090920416925063c657c7189150608401600060405180830381600087803b1580156200163257600080fd5b505af115801562001647573d6000803e3d6000fd5b5050600054600b54604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152601060448201527f43555256455f5041544846494e4445520000000000000000000000000000000060648201526201000090920416925063c657c7189150608401600060405180830381600087803b158015620016f757600080fd5b505af11580156200170c573d6000803e3d6000fd5b505050505050505b50565b62001723600062000548565b6200172d62002661565b6000806200173c600362002a1f565b601454604080517f313ce567000000000000000000000000000000000000000000000000000000008152905193955091935073ffffffffffffffffffffffffffffffffffffffff169163118c9a0791839163313ce567916004808201926020929091908290030181865afa158015620017b9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017df91906200453c565b620017ec90600a620046c9565b620017f9906002620046da565b6040518263ffffffff1660e01b81526004016200181891815260200190565b600060405180830381600087803b1580156200183357600080fd5b505af115801562001848573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff1663118c9a078373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620018b4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620018da91906200453c565b620018e790600a620046c9565b620018f4906003620046da565b6040518263ffffffff1660e01b81526004016200191391815260200190565b600060405180830381600087803b1580156200192e57600080fd5b505af115801562001943573d6000803e3d6000fd5b506000925060059150620019549050565b6040519080825280602002602001820160405280156200199b57816020015b6040805180820190915260008082526020820152815260200190600190039081620019735790505b509050620019ad60016103e862003093565b81600081518110620019c357620019c36200450d565b6020026020010181905250620019dd6002610b4a62003093565b81600181518110620019f357620019f36200450d565b602002602001018190525062001a0c6003600062003093565b8160028151811062001a225762001a226200450d565b60200260200101819052506040518060400160405280601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016107d08152508160038151811062001a925762001a926200450d565b602002602001018190525060405180604001604052808473ffffffffffffffffffffffffffffffffffffffff1681526020016101f48152508160048151811062001ae05762001ae06200450d565b6020908102919091010152601554600754600d54601354600093849373ffffffffffffffffffffffffffffffffffffffff9182169363242414fd93889362001b32938116928b9290821691166200316f565b6040518363ffffffff1660e01b815260040162001b5192919062004749565b600060405180830381865afa15801562001b6f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262001bb7919081019062004a04565b9150915062001c208260008151811062001bd55762001bd56200450d565b6020026020010151602001516113886040518060400160405280601581526020017f496e636f7272656374204441492042616c616e63650000000000000000000000815250620032de565b62001c858260018151811062001c3a5762001c3a6200450d565b602002602001015160200151610b4a6040518060400160405280601681526020017f496e636f727265637420555344432042616c616e636500000000000000000000815250620032de565b62001cea8260028151811062001c9f5762001c9f6200450d565b6020026020010151602001516105dc6040518060400160405280601681526020017f496e636f727265637420574554482042616c616e636500000000000000000000815250620032de565b62001d4e8260038151811062001d045762001d046200450d565b60200260200101516020015160016040518060400160405280601781526020017f496e636f72726563742079764441492042616c616e6365000000000000000000815250620032de565b62001db28260048151811062001d685762001d686200450d565b60200260200101516020015160016040518060400160405280601881526020017f496e636f7272656374207976574554482042616c616e63650000000000000000815250620032de565b60408051808201825273ffffffffffffffffffffffffffffffffffffffff86811682528251600480825260248083018652602080840180517f3ccfd60b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff91821681179092528288019590955287518089018952601354909616865287519384529183019096528186018051909316179091529281019290925262001e7c91839162001e769162003330565b620033bb565b5050505050565b601454604080517f313ce567000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9092169163118c9a0791839163313ce567916004808201926020929091908290030181865afa15801562001efc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001f2291906200453c565b62001f2f90600a620046c9565b62001f3c906002620046da565b6040518263ffffffff1660e01b815260040162001f5b91815260200190565b600060405180830381600087803b15801562001f7657600080fd5b505af115801562001f8b573d6000803e3d6000fd5b50506015546014546040517fa5b8103000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152614e2060248201526200054694509116915063a5b8103090604401602060405180830381865afa1580156200200f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002035919062004afe565b619c4062003651565b6200204862002661565b6200205262003767565b6200205e600062000548565b60155460009073ffffffffffffffffffffffffffffffffffffffff1663174b55276200208962003b82565b6040518263ffffffff1660e01b8152600401620020a7919062004b18565b600060405180830381865afa158015620020c5573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200210d919081019062004b2d565b905062002153815160016040518060400160405280601981526020017f496e636f7272656374206164617074657273206c656e67746800000000000000815250620032de565b62001714816000815181106200216d576200216d6200450d565b6020026020010151601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518060400160405280601881526020017f496e636f727265637420796561726e206164617074726572000000000000000081525062003bca565b60008054610100900460ff1615620021f55750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620023395760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c65640000000000000000000000000000000000000000000000000000828401528251808303840181526060830190935260009290916200229d917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc49160800162004bc7565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052620022d79162004c11565b6000604051808303816000865af19150503d806000811462002316576040519150601f19603f3d011682016040523d82523d6000602084013e6200231b565b606091505b509150508080602001905181019062002335919062004c2f565b9150505b919050565b620023486200241b565b62002354600162002a1f565b6013805473ffffffffffffffffffffffffffffffffffffffff9283167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560148054939092169216919091179055604051620023b69062004313565b604051809103906000f080158015620023d3573d6000803e3d6000fd5b50601580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60065473ffffffffffffffffffffffffffffffffffffffff166200054657604051620024479062004321565b604051809103906000f08015801562002464573d6000803e3d6000fd5b50600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216918217905563b36ba208620024c3670de0b6b3a76400006064620046da565b6040518263ffffffff1660e01b81526004016000604051808303818588803b158015620024ef57600080fd5b505af115801562002504573d6000803e3d6000fd5b505060028054307fffffffffffffffffffffffff00000000000000000000000000000000000000009182168117909255600180549091169091179055505050565b6040805160038082526080820190925260609160208201838036833701905050905083816000815181106200257e576200257e6200450d565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508281600181518110620025cf57620025cf6200450d565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505081816002815181106200262057620026206200450d565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250509392505050565b6200266b6200241b565b60405162002679906200432f565b604051809103906000f08015801562002696573d6000803e3d6000fd5b50600e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316908117909155600154604051921691620026ef906200433d565b73ffffffffffffffffffffffffffffffffffffffff928316815291166020820152604001604051809103906000f08015801562002730573d6000803e3d6000fd5b50600d80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905560405162002784906200434b565b604051809103906000f080158015620027a1573d6000803e3d6000fd5b50600f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600054600d54604080517fc657c71800000000000000000000000000000000000000000000000000000000815291841660048301526024820152601260448201527f554e49535741505f56325f4144415054455200000000000000000000000000006064820152620100009091049091169063c657c71890608401600060405180830381600087803b1580156200287957600080fd5b505af11580156200288e573d6000803e3d6000fd5b5050600054600e54604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152600f60448201527f554e49535741505f56325f4d4f434b000000000000000000000000000000000060648201526201000090920416925063c657c7189150608401600060405180830381600087803b1580156200293e57600080fd5b505af115801562002953573d6000803e3d6000fd5b5050600054600f54604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152601560448201527f554e49535741505f56325f5041544846494e444552000000000000000000000060648201526201000090920416925063c657c71891506084015b600060405180830381600087803b15801562002a0457600080fd5b505af115801562002a19573d6000803e3d6000fd5b50505050565b6006546040517f67b426450000000000000000000000000000000000000000000000000000000081526000918291829173ffffffffffffffffffffffffffffffffffffffff16906367b426459062002a7c90879060040162004426565b602060405180830381865afa15801562002a9a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002ac0919062004468565b90508060405162002ad19062004359565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103906000f08015801562002b0b573d6000803e3d6000fd5b5060035490935073ffffffffffffffffffffffffffffffffffffffff16156200301d576000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002b9e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002bc4919062004468565b84600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002c33573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002c59919062004468565b6040517f9dcb511a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301529190911690639dcb511a90602401602060405180830381865afa15801562002cc8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002cee919062004468565b60405162002cfc9062004367565b73ffffffffffffffffffffffffffffffffffffffff938416815291831660208301529091166040820152606001604051809103906000f08015801562002d46573d6000803e3d6000fd5b506000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291925062010000900473ffffffffffffffffffffffffffffffffffffffff16906306447d5690602401600060405180830381600087803b15801562002dce57600080fd5b505af115801562002de3573d6000803e3d6000fd5b505060048054604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9092169450632630c12f935080830192602092918290030181865afa15801562002e55573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002e7b919062004468565b6040517fe8a97a3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301528381166024830152919091169063e8a97a3e90604401600060405180830381600087803b15801562002eef57600080fd5b505af115801562002f04573d6000803e3d6000fd5b50506003546040517f3e7c88d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152611e7860248301529091169250633e7c88d69150604401600060405180830381600087803b15801562002f7e57600080fd5b505af115801562002f93573d6000803e3d6000fd5b50505050600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200300257600080fd5b505af115801562003017573d6000803e3d6000fd5b50505050505b60015460405173ffffffffffffffffffffffffffffffffffffffff909116908490620030499062004375565b73ffffffffffffffffffffffffffffffffffffffff928316815291166020820152604001604051809103906000f0801580156200308a573d6000803e3d6000fd5b50915050915091565b604080518082018252600080825260208201528151808301928390526006547f67b42645000000000000000000000000000000000000000000000000000000009093529091819073ffffffffffffffffffffffffffffffffffffffff166367b4264562003104876044850162004426565b602060405180830381865afa15801562003122573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003148919062004468565b73ffffffffffffffffffffffffffffffffffffffff16815260200183905290505b92915050565b60408051600480825260a08201909252606091602082016080803683370190505090508481600081518110620031a957620031a96200450d565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508381600181518110620031fa57620031fa6200450d565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505082816002815181106200324b576200324b6200450d565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505081816003815181106200329c576200329c6200450d565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050949350505050565b8183146200332b577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf35838160405162003317919062004c9b565b60405180910390a16200332b838362003651565b505050565b6040805160028082526060828101909352816020015b6040805180820190915260008152606060208201528152602001906001900390816200334657905050905082816000815181106200338857620033886200450d565b60200260200101819052508181600181518110620033aa57620033aa6200450d565b602002602001018190525092915050565b620033ff825182516040518060400160405280601681526020017f496e636f72726563742063616c6c73206c656e67746800000000000000000000815250620032de565b815160005b8181101562002a19578281815181106200342257620034226200450d565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff168482815181106200345957620034596200450d565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff16141580620034d757508281815181106200349957620034996200450d565b60200260200101516020015180519060200120848281518110620034c157620034c16200450d565b6020026020010151602001518051906020012014155b15620035445760408051818152601b818301527f4572726f7220696e206d756c746963616c6c20617420696e646578000000000060608201526020810183905290517fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a89181900360800190a15b620035c68482815181106200355d576200355d6200450d565b6020026020010151600001518483815181106200357e576200357e6200450d565b6020026020010151600001516040518060400160405280601881526020017f496e636f7272656374207461726765742061646472657373000000000000000081525062003bca565b62003648848281518110620035df57620035df6200450d565b6020026020010151602001518483815181106200360057620036006200450d565b6020026020010151602001516040518060400160405280601281526020017f496e636f72726563742063616c6c64617461000000000000000000000000000081525062003c43565b60010162003404565b80821462003763577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f50604051620036df9060208082526022908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b75696e60408201527f745d000000000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a88160405162003718919062004ce4565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a88260405162003751919062004d30565b60405180910390a16200376362003c99565b5050565b620037716200241b565b6040516200377f9062004383565b604051809103906000f0801580156200379c573d6000803e3d6000fd5b50601180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316908117909155600154604051921691620037f59062004391565b73ffffffffffffffffffffffffffffffffffffffff928316815291166020820152604001604051809103906000f08015801562003836573d6000803e3d6000fd5b50601080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169190911790556040516200388a906200439f565b604051809103906000f080158015620038a7573d6000803e3d6000fd5b50601280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283169081179091556011546040517fc67903ea00000000000000000000000000000000000000000000000000000000815292166004830181905260248301529063c67903ea90604401600060405180830381600087803b1580156200394857600080fd5b505af11580156200395d573d6000803e3d6000fd5b5050600054601054604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152601260448201527f554e49535741505f56335f41444150544552000000000000000000000000000060648201526201000090920416925063c657c7189150608401600060405180830381600087803b15801562003a0d57600080fd5b505af115801562003a22573d6000803e3d6000fd5b5050600054601154604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152600f60448201527f554e49535741505f56335f4d4f434b000000000000000000000000000000000060648201526201000090920416925063c657c7189150608401600060405180830381600087803b15801562003ad257600080fd5b505af115801562003ae7573d6000803e3d6000fd5b5050600054601254604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152601560448201527f554e49535741505f56335f5041544846494e444552000000000000000000000060648201526201000090920416925063c657c7189150608401620029e9565b600754600d54601054601354600a5460609462003bc59473ffffffffffffffffffffffffffffffffffffffff918216949082169390821692908216911662003e1c565b905090565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146200332b577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf35838160405162003c2f919062004c9b565b60405180910390a16200332b838362003fdd565b62003c4f838362004109565b6200332b577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf35838160405162003c85919062004c9b565b60405180910390a16200332b8383620041d2565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1562003dee5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000009282019290925260016060820152600091907f70ca10bbd0dbfd9020a9f4b13402c16cb120705e0d1c0aeab10fa353ae586fc490608001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905262003d6b929160200162004bc7565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905262003da59162004c11565b6000604051808303816000865af19150503d806000811462003de4576040519150601f19603f3d011682016040523d82523d6000602084013e62003de9565b606091505b505050505b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055565b60408051600580825260c082019092526060916020820160a080368337019050509050858160008151811062003e565762003e566200450d565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050848160018151811062003ea75762003ea76200450d565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050838160028151811062003ef85762003ef86200450d565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050828160038151811062003f495762003f496200450d565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050818160048151811062003f9a5762003f9a6200450d565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505095945050505050565b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462003763577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f50604051620040979060208082526025908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b61646460408201527f726573735d000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f81604051620040d0919062004d6e565b60405180910390a17f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f8260405162003751919062004dd0565b805182516001911415620041c95760005b8351811015620041c2578281815181106200413957620041396200450d565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168482815181106200417b576200417b6200450d565b01602001517fff000000000000000000000000000000000000000000000000000000000000001614620041ad57600091505b80620041b98162004e0e565b9150506200411a565b5062003169565b50600092915050565b620041de828262004109565b62003763577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f50604051620042699060208082526023908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b62797460408201527f65735d0000000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17fd26e16cad4548705e4c9e2d94f98ee91c289085ee425594fd5635fa2964ccf1881604051620042a2919062004e4a565b60405180910390a17fd26e16cad4548705e4c9e2d94f98ee91c289085ee425594fd5635fa2964ccf188260405162003751919062004ea4565b6139608062004ee383390190565b611852806200884383390190565b615f8c806200a09583390190565b611893806201002183390190565b610fd780620118b483390190565b617a51806201288b83390190565b611a5c806201a2dc83390190565b61251b806201bd3883390190565b611a7f806201e25383390190565b6121d0806201fcd283390190565b6117178062021ea283390190565b6123d680620235b983390190565b611c0e806202598f83390190565b61221a806202759d83390190565b6126e480620297b783390190565b80151581146200171457600080fd5b600060208284031215620043cf57600080fd5b8135620043dc81620043ad565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146200171457600080fd5b6000602082840312156200441957600080fd5b8135620043dc81620043e3565b60208101600b831062004462577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000602082840312156200447b57600080fd5b8151620043dc81620043e3565b600081518084526020808501945080840160005b83811015620044d057815173ffffffffffffffffffffffffffffffffffffffff16875295820195908201906001016200449c565b509495945050505050565b604081526000620044f0604083018562004488565b828103602084015262004504818562004488565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000602082840312156200454f57600080fd5b815160ff81168114620043dc57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b80851115620045ef57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115620045d357620045d362004561565b80851615620045e157918102915b93841c939080029062004595565b509250929050565b600082620046085750600162003169565b81620046175750600062003169565b81600181146200463057600281146200463b576200465b565b600191505062003169565b60ff8411156200464f576200464f62004561565b50506001821b62003169565b5060208310610133831016604e8410600b841016171562004680575081810a62003169565b6200468c838362004590565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115620046c157620046c162004561565b029392505050565b6000620043dc60ff841683620045f7565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562004715576200471562004561565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60408082528351828201819052600091906020906060850190828801855b82811015620047a4578151805173ffffffffffffffffffffffffffffffffffffffff16855285015185850152928501929084019060010162004767565b50505084810382860152620047ba818762004488565b979650505050505050565b6040805190810167ffffffffffffffff81118282101715620047eb57620047eb6200471a565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156200483b576200483b6200471a565b604052919050565b600067ffffffffffffffff8211156200486057620048606200471a565b5060051b60200190565b60005b83811015620048875781810151838201526020016200486d565b8381111562002a195750506000910152565b6000601f8381840112620048ac57600080fd5b82516020620048c5620048bf8362004843565b620047f1565b82815260059290921b85018101918181019087841115620048e557600080fd5b8287015b84811015620049f857805167ffffffffffffffff808211156200490c5760008081fd5b818a01915060407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08181858f03011215620049475760008081fd5b62004951620047c5565b888501516200496081620043e3565b81528483015184811115620049755760008081fd5b8086019550508d603f8601126200498c5760008081fd5b8885015184811115620049a357620049a36200471a565b620049b48a848e84011601620047f1565b94508085528e84828801011115620049ce57600092508283fd5b620049df818b87018689016200486a565b50808901939093525050845250918301918301620048e9565b50979650505050505050565b600080604080848603121562004a1957600080fd5b835167ffffffffffffffff8082111562004a3257600080fd5b818601915086601f83011262004a4757600080fd5b8151602062004a5a620048bf8362004843565b82815260069290921b8401810191818101908a84111562004a7a57600080fd5b948201945b8386101562004aca5786868c03121562004a995760008081fd5b62004aa3620047c5565b865162004ab081620043e3565b815286840151848201528252948601949082019062004a7f565b9189015191975090945050508083111562004ae457600080fd5b505062004af48582860162004899565b9150509250929050565b60006020828403121562004b1157600080fd5b5051919050565b602081526000620043dc602083018462004488565b6000602080838503121562004b4157600080fd5b825167ffffffffffffffff81111562004b5957600080fd5b8301601f8101851362004b6b57600080fd5b805162004b7c620048bf8262004843565b81815260059190911b8201830190838101908783111562004b9c57600080fd5b928401925b82841015620047ba57835162004bb781620043e3565b8252928401929084019062004ba1565b7fffffffff00000000000000000000000000000000000000000000000000000000831681526000825162004c038160048501602087016200486a565b919091016004019392505050565b6000825162004c258184602087016200486a565b9190910192915050565b60006020828403121562004c4257600080fd5b8151620043dc81620043ad565b6000815180845262004c698160208601602086016200486a565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60408152600560408201527f4572726f720000000000000000000000000000000000000000000000000000006060820152608060208201526000620043dc608083018462004c4f565b60408152600062004d2260408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b905082602083015292915050565b60408152600062004d2260408301600a81527f2020202041637475616c00000000000000000000000000000000000000000000602082015260400190565b60408152600062004dac60408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b905073ffffffffffffffffffffffffffffffffffffffff8316602083015292915050565b60408152600062004dac60408301600a81527f2020202041637475616c00000000000000000000000000000000000000000000602082015260400190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141562004e435762004e4362004561565b5060010190565b60408152600062004e8860408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b828103602084015262004e9c818562004c4f565b949350505050565b60408152600062004e8860408301600a81527f2020202041637475616c0000000000000000000000000000000000000000000060208201526040019056fe60806040523480156200001157600080fd5b5060405162003960380380620039608339810160408190526200003491620002a2565b8151829082906200004d90600290602085019062000133565b5080516200006390600390602084019062000133565b506000601260405162000076906200019d565b6060808252600790820152664352564d6f636b60c81b608082015260a0602082018190526015908201527f43525620666f72204375727665506f6f6c4d6f636b000000000000000000000060c082015260ff909116604082015260e001604051809103906000f080158015620000f0573d6000803e3d6000fd5b50600080546001600160a01b039092166001600160a01b03199283168117909155600180549092161790555050670de0b6b3a7640000600755506200030c915050565b8280548282559060005260206000209081019282156200018b579160200282015b828111156200018b57825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019062000154565b5062000199929150620001ab565b5090565b611758806200220883390190565b5b80821115620001995760008155600101620001ac565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b0381168114620001f057600080fd5b919050565b600082601f8301126200020757600080fd5b815160206001600160401b0380831115620002265762000226620001c2565b8260051b604051601f19603f830116810181811084821117156200024e576200024e620001c2565b6040529384528581018301938381019250878511156200026d57600080fd5b83870191505b8482101562000297576200028782620001d8565b8352918301919083019062000273565b979650505050505050565b60008060408385031215620002b657600080fd5b82516001600160401b0380821115620002ce57600080fd5b620002dc86838701620001f5565b93506020850151915080821115620002f357600080fd5b506200030285828601620001f5565b9150509250929050565b611eec806200031c6000396000f3fe608060405234801561001057600080fd5b506004361061030a5760003560e01c806382c630661161019c578063bb7b8b80116100ee578063e2e7d26411610097578063f851a44011610071578063f851a44014610597578063fc0c546a1461059e578063fee3f7f91461036257600080fd5b8063e2e7d26414610576578063ecb586a514610584578063f446c1d01461036257600080fd5b8063d96c7fce116100c8578063d96c7fce14610369578063dd62ed3e14610568578063ddca3f431461036257600080fd5b8063bb7b8b801461053a578063c661065714610542578063cc2b27d71461055557600080fd5b80639fdaea0c11610150578063b739953e1161012a578063b739953e14610501578063b91434d114610514578063b9947eb01461052757600080fd5b80639fdaea0c146104db578063a6417ed6146104ee578063b4b577ad1461036257600080fd5b80638ea875f3116101815780638ea875f3146104bf57806395d89b411461033557806399bd2ba5146104c857600080fd5b806382c630661461048c57806385ca3c6f146104ac57600080fd5b80633df02124116102605780635e0d443f1161020957806371035418116101e3578063710354181461045457806376a2f0f0146103625780637b475b681461046757600080fd5b80635e0d443f1461042d57806363543f061461036257806370a082311461044057600080fd5b80634903b0d11161023a5780634903b0d1146104075780635409491a1461036257806356ac35031461041a57600080fd5b80633df02124146103e15780634469e30e146103695780634515cef3146103f457600080fd5b806318160ddd116102c257806323746eb81161029c57806323746eb814610393578063313ce567146103625780633883e119146103cb57600080fd5b806318160ddd146103625780631a4d01d21461037e5780632081066c1461036257600080fd5b806307211ef7116102f357806307211ef71461034f578063140522881461036257806314f059791461036957600080fd5b8063065a80d81461030f57806306fdde0314610335575b600080fd5b61032261031d36600461192d565b6105be565b6040519081526020015b60405180910390f35b6040805160208101825260008152905161032c9190611974565b61032261035d3660046119c5565b610677565b6000610322565b6103716106c7565b60405161032c9190611a01565b61039161038c366004611a32565b6106f2565b005b6103a66103a136600461192d565b6107e6565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161032c565b6103226103d9366004611a79565b600092915050565b6103916103ef366004611ab1565b610826565b610391610402366004611b88565b610950565b610322610415366004611bb3565b610b1c565b6103916104283660046119c5565b610b31565b61032261043b3660046119c5565b610b92565b61032261044e366004611bf0565b50600090565b610391610462366004611bb3565b600755565b610391610475366004611c0b565b600f9190910b600090815260066020526040902055565b6001546103a69073ffffffffffffffffffffffffffffffffffffffff1681565b6103716104ba366004611c35565b610bce565b61032260075481565b6103916104d6366004611c73565b610c04565b6103916104e9366004611c8f565b610c63565b6103916104fc366004611ab1565b610de6565b6103a661050f36600461192d565b6111a6565b6103916105223660046119c5565b6111be565b6103a6610535366004611bb3565b61121f565b600754610322565b6103a6610550366004611bb3565b611234565b610322610563366004611cac565b611249565b6103226103d9366004611cd8565b61032261044e366004611bb3565b610391610592366004611d02565b61127f565b60006103a6565b6000546103a69073ffffffffffffffffffffffffffffffffffffffff1681565b6000600282600f0b815481106105d6576105d6611d26565b6000918252602090912001546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa15801561064d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106719190611d55565b92915050565b600f83810b60009081526005602090815260408083209386900b8352929052908120546b033b2e3c9fd0803ce8000000906106b3908490611d9d565b6106bd9190611dda565b90505b9392505050565b6106cf6118f8565b604051806060016040528060008152602001600081526020016000815250905090565b6000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810185905273ffffffffffffffffffffffffffffffffffffffff909116906379cc6790906044016020604051808303816000875af1158015610769573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078d9190611e15565b506107e133826002856fffffffffffffffffffffffffffffffff16815481106107b8576107b8611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169190611402565b505050565b6000600282600f0b815481106107fe576107fe611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1692915050565b6000610833858585610b92565b9050818110156108ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f437572766556314d6f636b3a20494e53554646494349454e545f4f555450555460448201527f5f414d4f554e540000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61091f3330856002896fffffffffffffffffffffffffffffffff16815481106108f5576108f5611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169291906114d6565b61094933826002876fffffffffffffffffffffffffffffffff16815481106107b8576107b8611d26565b5050505050565b60005b6003811015610a7f57600083826003811061097057610970611d26565b60200201511115610a6d576002818154811061098e5761098e611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff166323b872dd33308685600381106109c9576109c9611d26565b60200201516040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff938416600482015292909116602483015260448201526064016020604051808303816000875af1158015610a47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6b9190611e15565b505b80610a7781611e32565b915050610953565b506000546040517f40c10f190000000000000000000000000000000000000000000000000000000081523360048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f19906044015b6020604051808303816000875af1158015610af8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e19190611e15565b6000600282815481106105d6576105d6611d26565b600f83810b60009081526005602090815260408083209386900b835292905220819055610b6a6b033b2e3c9fd0803ce80000008261153a565b600f92830b60009081526005602090815260408083209690950b825294909452919092205550565b600f83810b60009081526004602090815260408083209386900b8352929052908120546b033b2e3c9fd0803ce8000000906106b3908490611d9d565b610bd66118f8565b6040805160608181019092529085906003908390839080828437600092019190915250919695505050505050565b6000546040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052909116906340c10f1990604401610ad9565b60005b6003811015610d88576000838260038110610c8357610c83611d26565b60200201351115610d765760028181548110610ca157610ca1611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33858460038110610cdb57610cdb611d26565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff9093166004840152602002013560248201526044016020604051808303816000875af1158015610d50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d749190611e15565b505b80610d8081611e32565b915050610c66565b506000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906379cc679090604401610ad9565b60006002856fffffffffffffffffffffffffffffffff1681548110610e0d57610e0d611d26565b60009182526020822001546003805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff8816908110610e5957610e59611d26565b60009182526020822001546002805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff8816908110610ea557610ea5611d26565b60009182526020822001546003805473ffffffffffffffffffffffffffffffffffffffff9092169350906fffffffffffffffffffffffffffffffff8916908110610ef157610ef1611d26565b600091825260208220015473ffffffffffffffffffffffffffffffffffffffff169150610f1f898989610677565b905085811015610fb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f437572766556314d6f636b3a20494e53554646494349454e545f4f555450555460448201527f5f414d4f554e540000000000000000000000000000000000000000000000000060648201526084016108c1565b610fd373ffffffffffffffffffffffffffffffffffffffff851633308a6114d6565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526024820189905285169063095ea7b3906044016020604051808303816000875af1158015611048573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061106c9190611e15565b506040517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8616906340c10f1990604401600060405180830381600087803b1580156110db57600080fd5b505af11580156110ef573d6000803e3d6000fd5b50506040517f1e9a69500000000000000000000000000000000000000000000000000000000081523060048201526024810184905273ffffffffffffffffffffffffffffffffffffffff86169250631e9a69509150604401600060405180830381600087803b15801561116157600080fd5b505af1158015611175573d6000803e3d6000fd5b5061119b9250505073ffffffffffffffffffffffffffffffffffffffff83163383611402565b505050505050505050565b6000600382600f0b815481106107fe576107fe611d26565b600f83810b60009081526004602090815260408083209386900b8352929052208190556111f76b033b2e3c9fd0803ce80000008261153a565b600f92830b60009081526004602090815260408083209690950b825294909452919092205550565b6000600382815481106107fe576107fe611d26565b6000600282815481106107fe576107fe611d26565b600f81900b6000908152600660205260408120546b033b2e3c9fd0803ce8000000906112759085611d9d565b6106c09190611dda565b60005b60038110156113a457600082826003811061129f5761129f611d26565b6020020151111561139257600281815481106112bd576112bd611d26565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb338484600381106112f7576112f7611d26565b60200201516040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af115801561136c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113909190611e15565b505b8061139c81611e32565b915050611282565b506000546040517f79cc67900000000000000000000000000000000000000000000000000000000081523360048201526024810184905273ffffffffffffffffffffffffffffffffffffffff909116906379cc679090604401610ad9565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526107e19084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526116a0565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526115349085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611454565b50505050565b60408051808201909152600281527f4d330000000000000000000000000000000000000000000000000000000000006020820152600090826115a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c19190611974565b5060006115b7600284611dda565b90506b033b2e3c9fd0803ce80000006115f0827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611e6b565b6115fa9190611dda565b8411156040518060400160405280600281526020017f4d310000000000000000000000000000000000000000000000000000000000008152509061166b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c19190611974565b5082816116846b033b2e3c9fd0803ce800000087611d9d565b61168e9190611e82565b6116989190611dda565b949350505050565b6000611702826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166117ac9092919063ffffffff16565b8051909150156107e157808060200190518101906117209190611e15565b6107e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016108c1565b60606106bd848460008585843b61181f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108c1565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516118489190611e9a565b60006040518083038185875af1925050503d8060008114611885576040519150601f19603f3d011682016040523d82523d6000602084013e61188a565b606091505b509150915061189a8282866118a5565b979650505050505050565b606083156118b45750816106c0565b8251156118c45782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c19190611974565b60405180606001604052806003906020820280368337509192915050565b8035600f81900b811461192857600080fd5b919050565b60006020828403121561193f57600080fd5b6106c082611916565b60005b8381101561196357818101518382015260200161194b565b838111156115345750506000910152565b6020815260008251806020840152611993816040850160208701611948565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000606084860312156119da57600080fd5b6119e384611916565b92506119f160208501611916565b9150604084013590509250925092565b60608101818360005b6003811015611a29578151835260209283019290910190600101611a0a565b50505092915050565b600080600060608486031215611a4757600080fd5b833592506119f160208501611916565b806060810183101561067157600080fd5b8015158114611a7657600080fd5b50565b60008060808385031215611a8c57600080fd5b611a968484611a57565b91506060830135611aa681611a68565b809150509250929050565b60008060008060808587031215611ac757600080fd5b611ad085611916565b9350611ade60208601611916565b93969395505050506040820135916060013590565b600082601f830112611b0457600080fd5b6040516060810181811067ffffffffffffffff82111715611b4e577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604052806060840185811115611b6357600080fd5b845b81811015611b7d578035835260209283019201611b65565b509195945050505050565b60008060808385031215611b9b57600080fd5b611ba58484611af3565b946060939093013593505050565b600060208284031215611bc557600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461192857600080fd5b600060208284031215611c0257600080fd5b6106c082611bcc565b60008060408385031215611c1e57600080fd5b611c2783611916565b946020939093013593505050565b600080600060e08486031215611c4a57600080fd5b611c548585611a57565b9250611c638560608601611a57565b915060c084013590509250925092565b60008060408385031215611c8657600080fd5b611c2783611bcc565b60008060808385031215611ca257600080fd5b611ba58484611a57565b60008060408385031215611cbf57600080fd5b82359150611ccf60208401611916565b90509250929050565b60008060408385031215611ceb57600080fd5b611cf483611bcc565b9150611ccf60208401611bcc565b60008060808385031215611d1557600080fd5b82359150611ccf8460208501611af3565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215611d6757600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611dd557611dd5611d6e565b500290565b600082611e10577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600060208284031215611e2757600080fd5b81516106c081611a68565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611e6457611e64611d6e565b5060010190565b600082821015611e7d57611e7d611d6e565b500390565b60008219821115611e9557611e95611d6e565b500190565b60008251611eac818460208701611948565b919091019291505056fea2646970667358221220a76213374b33de2cb1c5d61e9c1133f6d8163c7b90c32a6142a6f4fd98fe430364736f6c634300080a003360a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a00336101606040523480156200001257600080fd5b5060405162001852380380620018528339810160408190526200003591620003a3565b6000805460ff191690558585828260c882826001600160a01b0381166200006f57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000ae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d49190620004de565b6001600160a01b0316608052508051620000f6906002906020840190620002ca565b505060a052506001600160a01b0382166200012457604051635919af9760e11b815260040160405180910390fd5b6001600160a01b03821660c0819052670de0b6b3a764000060e05260408051630176f71760e71b815290516000929163bb7b8b809160048083019260209291908290030181865afa1580156200017e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001a4919062000503565b9050620001b1816200022a565b505050506001600160a01b0384161580620001d357506001600160a01b038316155b80620001e657506001600160a01b038216155b156200020557604051635919af9760e11b815260040160405180910390fd5b506001600160a01b039283166101005290821661012052166101405250620005d09050565b8062000249576040516309aadd6f60e41b815260040160405180910390fd5b60018190557f82e7ee47180a631312683eeb2a85ad264c9af490d54de5a75bbdb95b968c6de2816200027b8162000296565b6040805192835260208301919091520160405180910390a150565b60a05160009061271090620002ac908262000533565b620002b890846200054e565b620002c4919062000570565b92915050565b828054620002d89062000593565b90600052602060002090601f016020900481019282620002fc576000855562000347565b82601f106200031757805160ff191683800117855562000347565b8280016001018555821562000347579182015b82811115620003475782518255916020019190600101906200032a565b506200035592915062000359565b5090565b5b808211156200035557600081556001016200035a565b80516001600160a01b03811681146200038857600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60008060008060008060c08789031215620003bd57600080fd5b620003c88762000370565b95506020620003d981890162000370565b9550620003e96040890162000370565b9450620003f96060890162000370565b9350620004096080890162000370565b60a08901519093506001600160401b03808211156200042757600080fd5b818a0191508a601f8301126200043c57600080fd5b8151818111156200045157620004516200038d565b604051601f8201601f19908116603f011681019083821181831017156200047c576200047c6200038d565b816040528281528d868487010111156200049557600080fd5b600093505b82841015620004b957848401860151818501870152928501926200049a565b82841115620004cb5760008684830101525b8096505050505050509295509295509295565b600060208284031215620004f157600080fd5b620004fc8262000370565b9392505050565b6000602082840312156200051657600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156200054957620005496200051d565b500190565b60008160001904831182151516156200056b576200056b6200051d565b500290565b6000826200058e57634e487b7160e01b600052601260045260246000fd5b500490565b600181811c90821680620005a857607f821691505b60208210811415620005ca57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c05160e0516101005161012051610140516111e86200066a6000396000818161023501526108c8015260008181610383015261080901526000818161033901526107620152600081816103120152610a250152600081816101b001526109890152600081816101760152610c170152600081816102eb015281816103db01528181610557015261068f01526111e86000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c80639a6fc8f5116100cd578063b09ad8a011610081578063d62ada1111610066578063d62ada1114610376578063e5693f411461037e578063feaf968c146103a557600080fd5b8063b09ad8a01461035b578063bc489a651461036357600080fd5b8063a50cf2c8116100b2578063a50cf2c8146102e6578063a834559e1461030d578063ab0ca0e11461033457600080fd5b80639a6fc8f514610293578063a384d6ff146102dd57600080fd5b8063427cb6fe116101245780635c975abb116101095780635c975abb1461025f5780637284e416146102765780638456cb591461028b57600080fd5b8063427cb6fe1461023057806354fd4d501461025757600080fd5b8063313ce56711610155578063313ce567146101f75780633f4ba83a146102115780633fd0875f1461021b57600080fd5b806312b495a814610171578063218751b2146101ab575b600080fd5b6101987f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101a2565b6101ff600881565b60405160ff90911681526020016101a2565b6102196103ad565b005b610223600381565b6040516101a29190610dd7565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b610198600181565b60005460ff165b60405190151581526020016101a2565b61027e61049b565b6040516101a29190610e18565b610219610529565b6102a66102a1366004610ea3565b610615565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a0016101a2565b61019860015481565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b6101987f000000000000000000000000000000000000000000000000000000000000000081565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b61019861064f565b610219610371366004610ec7565b610661565b610266600181565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b6102a6610751565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa158015610437573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061045b9190610ee0565b610491576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610499610a67565b565b600280546104a890610f02565b80601f01602080910402602001604051908101604052809291908181526020018280546104d490610f02565b80156105215780601f106104f657610100808354040283529160200191610521565b820191906000526020600020905b81548152906001019060200180831161050457829003601f168201915b505050505081565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa1580156105b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105d79190610ee0565b61060d576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610499610b4d565b60008060008060006040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061065c600154610c0d565b905090565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156106eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070f9190610ee0565b610745576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61074e81610c56565b50565b6000806000806000806000806000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156107cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ef9190610f56565b939d50919b509950975095506108078a8a8989610cd8565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610872573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108969190610f56565b9398509196509450925090506108ae85858484610cd8565b888412156108c6578499508398508297508196508095505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610931573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109559190610f56565b93985091965094509250905061096d85858484610cd8565b88841215610985578499508398508297508196508095505b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb7b8b806040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a169190610fae565b9050610a2181610d73565b90507f0000000000000000000000000000000000000000000000000000000000000000610a4e828c610ff6565b610a5891906110e1565b99505050505050509091929394565b60005460ff16610ad8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff1615610bba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610acf565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b233390565b6000612710610c3c7f000000000000000000000000000000000000000000000000000000000000000082611149565b610c469084611161565b610c50919061119e565b92915050565b80610c8d576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190557f82e7ee47180a631312683eeb2a85ad264c9af490d54de5a75bbdb95b968c6de281610cbd81610c0d565b6040805192835260208301919091520160405180910390a150565b60008313610d12576040517f56e05d2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8369ffffffffffffffffffff168169ffffffffffffffffffff161080610d36575081155b15610d6d576040517fb1cf675500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60015460009080831015610db3576040517fb416da7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610dbe82610c0d565b905080841115610dcf579392505050565b509192915050565b6020810160068310610e12577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b600060208083528351808285015260005b81811015610e4557858101830151858201604001528201610e29565b81811115610e57576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b69ffffffffffffffffffff8116811461074e57600080fd5b600060208284031215610eb557600080fd5b8135610ec081610e8b565b9392505050565b600060208284031215610ed957600080fd5b5035919050565b600060208284031215610ef257600080fd5b81518015158114610ec057600080fd5b600181811c90821680610f1657607f821691505b60208210811415610f50577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600080600080600060a08688031215610f6e57600080fd5b8551610f7981610e8b565b809550506020860151935060408601519250606086015191506080860151610fa081610e8b565b809150509295509295909350565b600060208284031215610fc057600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60008413600084138583048511828216161561103757611037610fc7565b7f8000000000000000000000000000000000000000000000000000000000000000600087128682058812818416161561107257611072610fc7565b6000871292508782058712848416161561108e5761108e610fc7565b878505871281841616156110a4576110a4610fc7565b505050929093029392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826110f0576110f06110b2565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f80000000000000000000000000000000000000000000000000000000000000008314161561114457611144610fc7565b500590565b6000821982111561115c5761115c610fc7565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561119957611199610fc7565b500290565b6000826111ad576111ad6110b2565b50049056fea2646970667358221220226b667ed6fc6db7c8ec1377cc84dae524e2dc572320ead4a7092944a6b912de64736f6c634300080a00336102606040523480156200001257600080fd5b5060405162005f8c38038062005f8c833981016040819052620000359162000ba4565b83838383600384846001600160a01b03821615806200005b57506001600160a01b038116155b156200007a57604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038216608081905260408051632f7a188160e01b81529051632f7a1881916004808201926020929091908290030181865afa158015620000c5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000eb919062000c01565b6001600160a01b0390811660a05290811660c05260016000558416151590506200012857604051635919af9760e11b815260040160405180910390fd5b608051604051630f67c5bd60e41b81526001600160a01b0385811660048301529091169063f67c5bd090602401602060405180830381865afa15801562000173573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000199919062000c26565b620001c757604051634c607af960e11b81526001600160a01b03841660048201526024015b60405180910390fd5b6001600160a01b038084166101e081905261020052821661022052610240819052620001f460006200090a565b6001600160a01b031660e0526200020c60016200090a565b6001600160a01b0316610100526200022560026200090a565b6001600160a01b0316610120526200023e60036200090a565b6001600160a01b031661014052620002576000620009fd565b6001600160a01b031661016052620002706001620009fd565b6001600160a01b031661018052620002896002620009fd565b6001600160a01b03166101a052620002a26003620009fd565b6001600160a01b039081166101c05260e051161580620002cc5750610100516001600160a01b0316155b15620002eb57604051635919af9760e11b815260040160405180910390fd5b600281118015620003065750610120516001600160a01b0316155b156200032557604051635919af9760e11b815260040160405180910390fd5b600381118015620003405750610140516001600160a01b0316155b156200035f57604051635919af9760e11b815260040160405180910390fd5b60805160e051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620003ac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003d2919062000c26565b620004005760e051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b60805161010051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa1580156200044e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000474919062000c26565b620004a35761010051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b60028111801562000525575060805161012051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620004fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000523919062000c26565b155b15620005555761012051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b600381118015620005d7575060805161014051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620005af573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005d5919062000c26565b155b15620006075761014051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b610160516001600160a01b03161580159062000694575060805161016051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa1580156200066c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000692919062000c26565b155b15620006c45761016051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b610180516001600160a01b03161580159062000751575060805161018051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa15801562000729573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200074f919062000c26565b155b15620007815761018051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b6101a0516001600160a01b0316158015906200080e57506080516101a051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620007e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200080c919062000c26565b155b156200083e576101a051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b6101c0516001600160a01b031615801590620008cb57506080516101c051604051630f67c5bd60e41b81526001600160a01b03918216600482015291169063f67c5bd090602401602060405180830381865afa158015620008a3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008c9919062000c26565b155b15620008fb576101c051604051634c607af960e11b81526001600160a01b039091166004820152602401620001be565b50505050505050505062000c66565b60c05160405163c661065760e01b8152600481018390526000916001600160a01b03169063c661065790602401602060405180830381865afa92505050801562000973575060408051601f3d908101601f19168201909252620009709181019062000c01565b60015b6200097e5762000984565b92915050565b60c05160405163046e8dd760e31b8152600f84900b60048201526001600160a01b03909116906323746eb8906024015b602060405180830381865afa925050508015620009f0575060408051601f3d908101601f19168201909252620009ed9181019062000c01565b60015b6200097e57506000919050565b610220516000906001600160a01b03161562000a1e576200097e8262000ac0565b60c051604051630b9947eb60e41b8152600481018490526001600160a01b039091169063b9947eb090602401602060405180830381865afa92505050801562000a86575060408051601f3d908101601f1916820190925262000a839181019062000c01565b60015b6200097e5760c051604051635b9cca9f60e11b8152600f84900b60048201526001600160a01b039091169063b739953e90602401620009b4565b60008162000ad4576200097e600062000b17565b610220516001600160a01b031663c661065762000af360018562000c40565b6040518263ffffffff1660e01b8152600401620009b491815260200190565b919050565b600081600f0b6000141562000b2b575060e0515b81600f0b6001141562000b3e5750610100515b81600f0b6002141562000b515750610120515b81600f0b6003141562000b645750610140515b6001600160a01b03811662000b12576040516334769e6f60e21b815260040160405180910390fd5b80516001600160a01b038116811462000b1257600080fd5b6000806000806080858703121562000bbb57600080fd5b62000bc68562000b8c565b935062000bd66020860162000b8c565b925062000be66040860162000b8c565b915062000bf66060860162000b8c565b905092959194509250565b60006020828403121562000c1457600080fd5b62000c1f8262000b8c565b9392505050565b60006020828403121562000c3957600080fd5b5051919050565b60008282101562000c6157634e487b7160e01b600052601160045260246000fd5b500390565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e051610200516102205161024051614fa962000fe36000396000818161078301528181613708015281816138bf015281816139d901528181613e0f0152613f01015260006105de01526000818161067501528181611f680152818161239f0152818161278901528181612e6b01528181612f0901526131ed015260006108ad01526000818161059c015261288b0152600081816103d4015261285c015260008181610605015261282d0152600081816106af01526127fe015260008181610876015281816126630152818161363501528181613f6b01526146640152600081816104d7015281816126340152818161356501528181613e7901526145480152600081816107f3015281816126050152818161349501528181613d85015261442c015260008181610448015281816125d6015281816133c501528181613cb901526143100152600081816107350152818161091a015281816109e701528181610a7701528181610b6f01528181610bfe01528181610c9501528181610d2601528181611139015281816111b1015281816112ee0152818161144101528181611578015281816115c00152818161166d015281816116b5015281816117660152818161179b01528181611ac501528181611b4301528181611ccd01528181611d4501528181611dea01528181611fb20152818161206b015281816120a00152818161213b0152818161245e015281816124cb0152818161255c01528181612aa901528181612bc801528181612ca2015281816142e801528181614404015281816145200152818161463c01526147840152600081816104fe0152818161291401528181614055015261482b01526000818161075c01528181610ec9015281816118a601528181611ef4015281816122450152818161270101528181612aff01528181612b9901528181612cf801528181612da0015281816130630152818161311a01528181613215015281816132f8015281816133ed015281816134bd0152818161358d0152818161365d01528181613bf401528181613ce401528181613dad01528181613ea101528181613f93015281816140dd015281816141910152818161423b0152818161435e0152818161447a01528181614596015281816146b20152818161475501526148950152614fa96000f3fe608060405234801561001057600080fd5b50600436106103a45760003560e01c806379bea664116101e9578063cc2b27d71161010f578063e2e7d264116100ad578063f446c1d01161007c578063f446c1d014610898578063f851a440146108a0578063fc0c546a146108a8578063fee3f7f9146108cf57600080fd5b8063e2e7d26414610838578063ec026ca71461084b578063ecb586a51461085e578063ef14101e1461087157600080fd5b8063d21220a7116100e9578063d21220a7146107ee578063d96c7fce14610815578063dd62ed3e1461081d578063ddca3f431461083057600080fd5b8063cc2b27d7146107b3578063ce30bbdb146107c6578063cf023dd0146107db57600080fd5b8063b4b577ad11610187578063bd90df7011610156578063bd90df7014610730578063c12c21c014610757578063c21ee1621461077e578063c6610657146107a557600080fd5b8063b4b577ad146106ff578063b739953e14610707578063b9947eb01461071a578063bb7b8b801461072857600080fd5b80638ba51dfc116101c35780638ba51dfc146106aa57806395d89b41146106d15780639fdaea0c146106d9578063a6417ed6146106ec57600080fd5b806379bea6641461065d57806382c630661461067057806385ca3c6f1461069757600080fd5b806333d2ebf2116102ce57806357d788751161026c5780636e1d82711161023b5780636e1d82711461060057806370a082311461062757806376a2f0f01461063a57806378aa73a41461064257600080fd5b806357d78875146105975780635e0d443f146105be57806363543f06146105d157806364a89bca146105d957600080fd5b80634469e30e116102a85780634469e30e146105615780634515cef3146105695780634903b0d11461057c5780635409491a1461058f57600080fd5b806333d2ebf2146105285780633883e1191461053b5780633df021241461054e57600080fd5b806318160ddd1161034657806323746eb81161031557806323746eb8146104bf57806325be124e146104d25780632f7a1881146104f9578063313ce5671461052057600080fd5b806318160ddd146104875780631a4d01d21461048f5780631af4de83146104a45780632081066c146104b757600080fd5b806307211ef71161038257806307211ef7146104305780630dfe168114610443578063140522881461046a57806314f059791461047257600080fd5b8063065a80d8146103a957806306871163146103cf57806306fdde031461041b575b600080fd5b6103bc6103b736600461491d565b6108d7565b6040519081526020015b60405180910390f35b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016103c6565b610423610a73565b6040516103c691906149ae565b6103bc61043e3660046149c1565b610b2b565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc610bfa565b61047a610c8b565b6040516103c691906149fd565b6103bc610d22565b6104a261049d366004614a2e565b610d8f565b005b6104a26104b23660046149c1565b610e27565b6103bc611135565b6103f66104cd36600461491d565b6111a2565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc6111ad565b6104a2610536366004614a53565b61121a565b6103bc610549366004614a8e565b6112ae565b6104a261055c366004614acb565b611366565b61047a611437565b6104a2610577366004614b0d565b6114aa565b6103bc61058a366004614b38565b611546565b6103bc6115bc565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc6105cc3660046149c1565b611629565b6103bc6116b1565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc610635366004614b73565b61171e565b6103bc611797565b61064a600281565b60405161ffff90911681526020016103c6565b6104a261066b3660046149c1565b611804565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b61047a6106a5366004614b90565b611a80565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b610423611b3f565b6104a26106e7366004614b0d565b611bac565b6104a26106fa366004614acb565b611c3f565b6103bc611cc9565b6103f661071536600461491d565b611d36565b6103f6610715366004614b38565b6103bc611d41565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc7f000000000000000000000000000000000000000000000000000000000000000081565b6103f66104cd366004614b38565b6103bc6107c1366004614bce565b611dae565b6107ce600681565b6040516103c69190614bfa565b6104a26107e9366004614a2e565b611e2e565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b61047a611fa8565b6103bc61082b366004614c3b565b61201b565b6103bc61209c565b6103bc610846366004614b38565b612109565b6104a2610859366004614a53565b61217f565b6104a261086c366004614c69565b6123e0565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc61245a565b6103f66124c7565b6103f67f000000000000000000000000000000000000000000000000000000000000000081565b6103bc612558565b6040517f4903b0d10000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff821660048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634903b0d1906024015b602060405180830381865afa9250505080156109b1575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526109ae91810190614c8d565b60015b610a68576040517f065a80d8000000000000000000000000000000000000000000000000000000008152600f83900b60048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063065a80d8906024015b602060405180830381865afa158015610a44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a689190614c8d565b92915050565b919050565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015610ae0573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b269190810190614d67565b905090565b6040517f07211ef7000000000000000000000000000000000000000000000000000000008152600f84810b600483015283900b6024820152604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906307211ef7906064015b602060405180830381865afa158015610bcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf09190614c8d565b90505b9392505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663140522886040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b269190614c8d565b610c936148ed565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166314f059796040518163ffffffff1660e01b8152600401606060405180830381865afa158015610cfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b269190614db8565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b60026000541415610e01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b60026000908155610e11836125c5565b9050610e1c816126d0565b505060016000555050565b60026000541415610e94576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610f25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f499190614e36565b90506000610f56856127ed565b90506000610f63856127ed565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529192506000918416906370a0823190602401602060405180830381865afa158015610fd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff99190614c8d565b90506001811115611127577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce800000061103f8784614e53565b6110499190614eb7565b604051600f8a810b602483015289900b60448201526064810184905260848101829052909150611124908690869086907fa6417ed6000000000000000000000000000000000000000000000000000000009060a4015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526001806128f7565b50505b505060016000555050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632081066c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6000610a68826125c5565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b60026000541415611287576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b60026000908155611297836125c5565b90506112a4838284612d6f565b5050600160005550565b6040517f3883e11900000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690633883e119906113259086908690600401614ef2565b602060405180830381865afa158015611342573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf39190614c8d565b600260005414156113d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b600260009081556113e3856125c5565b905060006113f0856125c5565b905061112782826000368080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525060019350915061301a9050565b61143f6148ed565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16634469e30e6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610cfe573d6000803e3d6000fd5b60026000541415611517576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b6002600090815561153d90600184358110916020860135821091604087013511906130e9565b50506001600055565b6040517f4903b0d1000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634903b0d19060240161095a565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635409491a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6040517f5e0d443f000000000000000000000000000000000000000000000000000000008152600f84810b600483015283900b6024820152604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635e0d443f90606401610baf565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166363543f066040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401610a27565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166376a2f0f06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b60026000541415611871576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611902573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119269190614e36565b90506000611933856125c5565b90506000611940856125c5565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529192506000918416906370a0823190602401602060405180830381865afa1580156119b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d69190614c8d565b90506001811115611127577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce8000000611a1c8784614e53565b611a269190614eb7565b604051600f8a810b602483015289900b60448201526064810184905260848101829052909150611124908690869086907f3df02124000000000000000000000000000000000000000000000000000000009060a40161109f565b611a886148ed565b6040517f85ca3c6f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906385ca3c6f90611afe90879087908790600401614f0a565b606060405180830381865afa158015611b1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf09190614db8565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610ae0573d6000803e3d6000fd5b60026000541415611c19576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b6002600090815561153d90600184358110916020860135821091604087013511906132c7565b60026000541415611cac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b60026000908155611cbc856127ed565b905060006113f0856127ed565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b4b577ad6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6000610a68826127ed565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb7b8b806040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6040517fcc2b27d700000000000000000000000000000000000000000000000000000000815260048101839052600f82900b60248201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063cc2b27d790604401611325565b60026000541415611e9b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b60026000908155611eab836125c5565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611f3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f5f9190614e36565b9050611f9b81837f0000000000000000000000000000000000000000000000000000000000000000611f92888a89613704565b600160006128f7565b5050600160005550505050565b611fb06148ed565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d96c7fce6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610cfe573d6000803e3d6000fd5b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063dd62ed3e90604401611325565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b6040517fe2e7d264000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e2e7d26490602401610a27565b600260005414156121ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b600260009081556121fc836125c5565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa15801561228c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b09190614e36565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000918416906370a0823190602401602060405180830381865afa158015612322573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123469190614c8d565b905060018111156123d4577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160006b033b2e3c9fd0803ce800000061238c8684614e53565b6123969190614eb7565b90506123d183857f00000000000000000000000000000000000000000000000000000000000000006123c98a8787613704565b6001806128f7565b50505b50506001600055505050565b6002600054141561244d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df8565b600260005561153d613bc3565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f446c1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa158015612534573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b269190614e36565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fee3f7f96040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b600081600f0b600014156125f657507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6001141561262557507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6002141561265457507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6003141561268357507f00000000000000000000000000000000000000000000000000000000000000005b73ffffffffffffffffffffffffffffffffffffffff8116610a6e576040517fd1da79bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa15801561275d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127819190614e36565b90506127e8817f0000000000000000000000000000000000000000000000000000000000000000846000368080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525092508291506128f79050565b505050565b600081600f0b6000141561281e57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6001141561284d57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6002141561287c57507f00000000000000000000000000000000000000000000000000000000000000005b81600f0b6003141561268357507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff8116610a6e576040517fd1da79bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606000803373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614612a60576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301528916906370a0823190602401602060405180830381865afa1580156129a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129c99190614c8d565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152919350908816906370a0823190602401602060405180830381865afa158015612a39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a5d9190614c8d565b90505b8415612b5c576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612b4357600080fd5b505af1158015612b57573d6000803e3d6000fd5b505050505b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a90612bf29033907f0000000000000000000000000000000000000000000000000000000000000000908b90600401614f31565b6000604051808303816000875af1158015612c11573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052612c579190810190614d67565b92508415612d55576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612d3c57600080fd5b505af1158015612d50573d6000803e3d6000fd5b505050505b612d6389898985858961403d565b50509695505050505050565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612dfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e209190614e36565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000917f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015612eb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ed69190614c8d565b90506001811115613013577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01613011827f0000000000000000000000000000000000000000000000000000000000000000867f1a4d01d200000000000000000000000000000000000000000000000000000000858a6b033b2e3c9fd0803ce8000000612f638b84614e53565b612f6d9190614eb7565b6040516024810193909352600f9190910b60448301526064820152608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152600060016128f7565b505b5050505050565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015260609060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa1580156130aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130ce9190614e36565b90506130de8188888888886128f7565b979650505050505050565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015613176573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061319a9190614e36565b90506131a88585858561429f565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561325957600080fd5b505af115801561326d573d6000803e3d6000fd5b505050506132b16000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061471592505050565b506132be8585858561429f565b61301381614813565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015613354573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133789190614e36565b9050841561344a576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561343157600080fd5b505af1158015613445573d6000803e3d6000fd5b505050505b831561351a576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561350157600080fd5b505af1158015613515573d6000803e3d6000fd5b505050505b82156135ea576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156135d157600080fd5b505af11580156135e5573d6000803e3d6000fd5b505050505b81156136ba576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156136a157600080fd5b505af11580156136b5573d6000803e3d6000fd5b505050505b6136fa6000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061471592505050565b5061301381614813565b60607f0000000000000000000000000000000000000000000000000000000000000000600214156138bd5783600f0b6000146137fa576040516000602482015260448101849052606481018390527f0b4c7e4d00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526138b6565b6040516024810184905260006044820152606481018390527f0b4c7e4d00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091525b9050610bf3565b7f0000000000000000000000000000000000000000000000000000000000000000600314156139d75783600f0b60001461398e5783600f0b60011461394557604051600060248201819052604482015260648101849052608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401613778565b604051600060248201819052604482018590526064820152608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401613778565b604051602481018490526000604482018190526064820152608481018390527f4515cef3000000000000000000000000000000000000000000000000000000009060a401613838565b7f000000000000000000000000000000000000000000000000000000000000000060041415613b615783600f0b600014613b115783600f0b600114613ac15783600f0b600214613a71576040516000602482018190526044820181905260648201526084810184905260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613778565b6040516000602482018190526044820181905260648201859052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613778565b6040516000602482018190526044820185905260648201819052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613778565b6040516024810184905260006044820181905260648201819052608482015260a481018390527f029b2f34000000000000000000000000000000000000000000000000000000009060c401613838565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f496e636f7272656374206e436f696e73000000000000000000000000000000006044820152606401610df8565b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015613c50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c749190614e36565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301529192507f0000000000000000000000000000000000000000000000000000000000000000909116906351e3f16090604401600060405180830381600087803b158015613d2a57600080fd5b505af1158015613d3e573d6000803e3d6000fd5b50506040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f00000000000000000000000000000000000000000000000000000000000000001692506351e3f1609150604401600060405180830381600087803b158015613df357600080fd5b505af1158015613e07573d6000803e3d6000fd5b5050505060027f00000000000000000000000000000000000000000000000000000000000000001115613ff0576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015613ee557600080fd5b505af1158015613ef9573d6000803e3d6000fd5b5050505060037f00000000000000000000000000000000000000000000000000000000000000001115613ff0576040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015613fd757600080fd5b505af1158015613feb573d6000803e3d6000fd5b505050505b6140306000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061471592505050565b5061403a81614813565b50565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461413e576040517f654a9eda00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528681166024830152858116604483015260648201859052608482018490527f0000000000000000000000000000000000000000000000000000000000000000169063654a9eda9060a401600060405180830381600087803b15801561412157600080fd5b505af1158015614135573d6000803e3d6000fd5b50505050613011565b80156141ee576040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015286811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b1580156141d557600080fd5b505af11580156141e9573d6000803e3d6000fd5b505050505b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015285811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561427f57600080fd5b505af1158015614293573d6000803e3d6000fd5b50505050505050505050565b83156143bb576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156143a257600080fd5b505af11580156143b6573d6000803e3d6000fd5b505050505b82156144d7576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156144be57600080fd5b505af11580156144d2573d6000803e3d6000fd5b505050505b81156145f3576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156145da57600080fd5b505af11580156145ee573d6000803e3d6000fd5b505050505b801561470f576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156146f657600080fd5b505af115801561470a573d6000803e3d6000fd5b505050505b50505050565b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815260609073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a906147ae9033907f0000000000000000000000000000000000000000000000000000000000000000908790600401614f31565b6000604051808303816000875af11580156147cd573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610a689190810190614d67565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461403a576040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b1580156148d957600080fd5b505af1158015613013573d6000803e3d6000fd5b60405180606001604052806003906020820280368337509192915050565b8035600f81900b8114610a6e57600080fd5b60006020828403121561492f57600080fd5b610bf38261490b565b60005b8381101561495357818101518382015260200161493b565b8381111561470f5750506000910152565b6000815180845261497c816020860160208601614938565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610bf36020830184614964565b6000806000606084860312156149d657600080fd5b6149df8461490b565b92506149ed6020850161490b565b9150604084013590509250925092565b60608101818360005b6003811015614a25578151835260209283019290910190600101614a06565b50505092915050565b600080600060608486031215614a4357600080fd5b833592506149ed6020850161490b565b60008060408385031215614a6657600080fd5b614a6f8361490b565b946020939093013593505050565b8060608101831015610a6857600080fd5b60008060808385031215614aa157600080fd5b614aab8484614a7d565b915060608301358015158114614ac057600080fd5b809150509250929050565b60008060008060808587031215614ae157600080fd5b614aea8561490b565b9350614af86020860161490b565b93969395505050506040820135916060013590565b60008060808385031215614b2057600080fd5b614b2a8484614a7d565b946060939093013593505050565b600060208284031215614b4a57600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461403a57600080fd5b600060208284031215614b8557600080fd5b8135610bf381614b51565b600080600060e08486031215614ba557600080fd5b614baf8585614a7d565b9250614bbe8560608601614a7d565b915060c084013590509250925092565b60008060408385031215614be157600080fd5b82359150614bf16020840161490b565b90509250929050565b6020810160118310614c35577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60008060408385031215614c4e57600080fd5b8235614c5981614b51565b91506020830135614ac081614b51565b60008060808385031215614c7c57600080fd5b82359150614bf18460208501614a7d565b600060208284031215614c9f57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff80841115614cf057614cf0614ca6565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715614d3657614d36614ca6565b81604052809350858152868686011115614d4f57600080fd5b614d5d866020830187614938565b5050509392505050565b600060208284031215614d7957600080fd5b815167ffffffffffffffff811115614d9057600080fd5b8201601f81018413614da157600080fd5b614db084825160208401614cd5565b949350505050565b600060608284031215614dca57600080fd5b82601f830112614dd957600080fd5b6040516060810181811067ffffffffffffffff82111715614dfc57614dfc614ca6565b604052806060840185811115614e1157600080fd5b845b81811015614e2b578051835260209283019201614e13565b509195945050505050565b600060208284031215614e4857600080fd5b8151610bf381614b51565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614eb2577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500290565b600082614eed577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60808101606084833791151560609190910152919050565b60e081016060858337606082016000815260608582375060c0919091019190915292915050565b600073ffffffffffffffffffffffffffffffffffffffff808616835280851660208401525060606040830152614f6a6060830184614964565b9594505050505056fea2646970667358221220efb951725986e76ee157ff0d00cd7b7a6a9b8a581784400c52be5c96516fe15064736f6c634300080a0033608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6118158061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c80638da5cb5b11610076578063d7aa2e351161005b578063d7aa2e35146101b3578063d914cd4b146101f2578063f2fde38b1461020557600080fd5b80638da5cb5b1461015d578063c488f7fe1461018557600080fd5b80634dee073b116100a75780634dee073b146101015780636f33547d14610142578063715018a61461015557600080fd5b80631bf64c41146100c357806345330666146100ec575b600080fd5b6100d66100d1366004611345565b610218565b6040516100e3919061142e565b60405180910390f35b6100ff6100fa366004611500565b6103fa565b005b61012f61010f366004611551565b6001602090815260009283526040808420909152908252902054600f0b81565b604051600f9190910b81526020016100e3565b6100d6610150366004611345565b6104d7565b6100ff610514565b60005460405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100e3565b61012f610193366004611551565b6002602090815260009283526040808420909152908252902054600f0b81565b6101e46101c136600461158a565b600360209081526000938452604080852082529284528284209052825290205481565b6040519081526020016100e3565b6100ff6102003660046115d5565b6105a1565b6100ff6102133660046115d5565b61089e565b6102556040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b61025e836109ce565b156103f45760008273ffffffffffffffffffffffffffffffffffffffff1663bd90df706040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102d491906115f2565b905060008060008060006102e88987610a67565b9450945094509450945082156103ed5760405180608001604052806103118b8b858a8a89610d8b565b8152602001828152602001600115158152602001600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008c6040015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008c6060015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481525096505b5050505050505b92915050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610480576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff93841660009081526003602090815260408083209587168084528683528184209590971683529381528382208390559384528281209481529390925290912055565b6103f46040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b60005473ffffffffffffffffffffffffffffffffffffffff163314610595576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610477565b61059f6000611045565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610622576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610477565b60005b6004600f82900b121561075d576040517f23746eb8000000000000000000000000000000000000000000000000000000008152600f82900b600482015273ffffffffffffffffffffffffffffffffffffffff8316906323746eb890602401602060405180830381865afa9250505080156106da575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526106d7918101906115f2565b60015b6106e35761075d565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160208181526040808420959094168352939093522080547fffffffffffffffffffffffffffffffff0000000000000000000000000000000016929091016fffffffffffffffffffffffffffffffff8116929092179055610625565b5060005b6004600f82900b121561089a576040517fb739953e000000000000000000000000000000000000000000000000000000008152600f82900b600482015273ffffffffffffffffffffffffffffffffffffffff83169063b739953e90602401602060405180830381865afa925050508015610816575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610813918101906115f2565b60015b61081e575050565b73ffffffffffffffffffffffffffffffffffffffff808416600090815260026020908152604080832094909316825292909252902080546fffffffffffffffffffffffffffffffff60018401167fffffffffffffffffffffffffffffffff00000000000000000000000000000000909116179055600101610761565b5050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461091f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610477565b73ffffffffffffffffffffffffffffffffffffffff81166109c2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610477565b6109cb81611045565b50565b600080825160028111156109e4576109e461160f565b1480610a025750600182516002811115610a0057610a0061160f565b145b15610a0f57506001919050565b600282516002811115610a2457610a2461160f565b1415610a3257506000919050565b81516040517ffe7995cf000000000000000000000000000000000000000000000000000000008152610477919060040161163e565b73ffffffffffffffffffffffffffffffffffffffff80821660009081526001602081815260408084208782015190951684529390529181205490918291829182918291610ab691600f0b6116ae565b73ffffffffffffffffffffffffffffffffffffffff808816600090815260016020818152604080842060608e0151909516845293905291902054919650610aff91600f0b6116ae565b9350600085600f0b12158015610b195750600084600f0b12155b15610bf85760a08701516040517f5e0d443f000000000000000000000000000000000000000000000000000000008152600f87810b600483015286900b6024820152604481019190915273ffffffffffffffffffffffffffffffffffffffff871690635e0d443f90606401602060405180830381865afa925050508015610bdb575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610bd89181019061171f565b60015b610be457610d81565b8015610bf257600193508091505b50610d81565b73ffffffffffffffffffffffffffffffffffffffff80871660009081526002602090815260408083208b82015190941683529290522054610c3e90600190600f0b6116ae565b73ffffffffffffffffffffffffffffffffffffffff808816600090815260026020908152604080832060608d015190941683529290522054909550610c8890600190600f0b6116ae565b9350600085600f0b12158015610ca25750600084600f0b12155b15610d815760a08701516040517f07211ef7000000000000000000000000000000000000000000000000000000008152600f87810b600483015286900b6024820152604481019190915273ffffffffffffffffffffffffffffffffffffffff8716906307211ef790606401602060405180830381865afa925050508015610d64575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610d619181019061171f565b60015b610d6d57610d81565b8015610d7f5760019350809150600192505b505b9295509295909350565b6040805180820190915260008152606060208201526060600188516002811115610db757610db761160f565b1415610eb75782610de8577f79bea66400000000000000000000000000000000000000000000000000000000610e0a565b7f1af4de83000000000000000000000000000000000000000000000000000000005b8585610e168b8a6110ba565b604051600f93840b60248201529190920b60448201526064810191909152608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505b600088516002811115610ecc57610ecc61160f565b1415610fcc5782610efd577f3df0212400000000000000000000000000000000000000000000000000000000610f1f565b7fa6417ed6000000000000000000000000000000000000000000000000000000005b8585610f2b8b8a6110f2565b604051600f93840b60248201529190920b60448201526064810191909152608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505b8051156110065760405180604001604052808873ffffffffffffffffffffffffffffffffffffffff1681526020018281525091505061103b565b87516040517ffe7995cf000000000000000000000000000000000000000000000000000000008152610477919060040161163e565b9695505050505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60a08201516000906110e1846110dc856b033b2e3c9fd0803ce8000000611738565b6110f2565b6110eb9190611775565b9392505050565b60008260e0015115611106575060006103f4565b60008351600281111561111b5761111b61160f565b148061113957506001835160028111156111375761113761160f565b145b1561116c5760c08301516127109061115190826117b0565b61115b9084611738565b6111659190611775565b90506103f4565b6002835160028111156111815761118161160f565b14156111a45760c0830151611198906127106117c7565b61115b61271084611738565b82516040517ffe7995cf000000000000000000000000000000000000000000000000000000008152610477919060040161163e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610100810167ffffffffffffffff8111828210171561122c5761122c6111d9565b60405290565b80356003811061124157600080fd5b919050565b73ffffffffffffffffffffffffffffffffffffffff811681146109cb57600080fd5b803561124181611246565b600082601f83011261128457600080fd5b8135602067ffffffffffffffff808311156112a1576112a16111d9565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f830116810181811084821117156112e4576112e46111d9565b60405293845285810183019383810192508785111561130257600080fd5b83870191505b8482101561132a57813561131b81611246565b83529183019190830190611308565b979650505050505050565b8035801515811461124157600080fd5b6000806040838503121561135857600080fd5b823567ffffffffffffffff8082111561137057600080fd5b90840190610100828703121561138557600080fd5b61138d611208565b61139683611232565b81526113a460208401611268565b60208201526113b560408401611268565b60408201526113c660608401611268565b60608201526080830135828111156113dd57600080fd5b6113e988828601611273565b60808301525060a083013560a082015260c083013560c082015261140f60e08401611335565b60e0820152935061142591505060208401611268565b90509250929050565b60006020808352835160808285015273ffffffffffffffffffffffffffffffffffffffff81511660a0850152818101519050604060c085015280518060e086015260005b8181101561148f5782810184015186820161010001528301611472565b818111156114a257600061010083880101525b50828601516040860152604086015192506114c1606086018415159052565b606095909501516080850152505050601f919091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016016101000190565b6000806000806080858703121561151657600080fd5b843561152181611246565b9350602085013561153181611246565b9250604085013561154181611246565b9396929550929360600135925050565b6000806040838503121561156457600080fd5b823561156f81611246565b9150602083013561157f81611246565b809150509250929050565b60008060006060848603121561159f57600080fd5b83356115aa81611246565b925060208401356115ba81611246565b915060408401356115ca81611246565b809150509250925092565b6000602082840312156115e757600080fd5b81356110eb81611246565b60006020828403121561160457600080fd5b81516110eb81611246565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160038310611679577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600081600f0b83600f0b60008112817fffffffffffffffffffffffffffffffff80000000000000000000000000000000018312811516156116f1576116f161167f565b816f7fffffffffffffffffffffffffffffff0183138116156117155761171561167f565b5090039392505050565b60006020828403121561173157600080fd5b5051919050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156117705761177061167f565b500290565b6000826117ab577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000828210156117c2576117c261167f565b500390565b600082198211156117da576117da61167f565b50019056fea2646970667358221220ed82995f9e9761ea7972d39ed0d8d0b378778cbba995315b16c90b49c74d2b7e64736f6c634300080a0033608060405234801561001057600080fd5b50610fb7806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c8063174b552714610046578063242414fd1461006f578063a5b8103014610090575b600080fd5b6100596100543660046109da565b6100b1565b6040516100669190610a0f565b60405180910390f35b61008261007d366004610a69565b610253565b604051610066929190610b4f565b6100a361009e366004610c88565b610516565b604051908152602001610066565b80516060908067ffffffffffffffff8111156100cf576100cf610876565b6040519080825280602002602001820160405280156100f8578160200160208202803683370190505b5091506000805b8281101561023157600085828151811061011b5761011b610cb4565b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156101605750610229565b60048173ffffffffffffffffffffffffffffffffffffffff1663ce30bbdb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d19190610d12565b60108111156101e2576101e2610ce3565b141561022757808584815181106101fb576101fb610cb4565b73ffffffffffffffffffffffffffffffffffffffff909216602092830291909101909101526001909201915b505b6001016100ff565b508181101561024c57610244838261061e565b949350505050565b5050919050565b6060806000610261846100b1565b805190915060008167ffffffffffffffff81111561028157610281610876565b6040519080825280602002602001820160405280156102c757816020015b60408051808201909152600081526060602082015281526020019060019003908161029f5790505b5090506000805b838110156104fb5760008582815181106102ea576102ea610cb4565b6020026020010151905060008173ffffffffffffffffffffffffffffffffffffffff1663bd90df706040518163ffffffff1660e01b8152600401602060405180830381865afa158015610341573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103659190610d3a565b905060006103738c836106d0565b905060008c828151811061038957610389610cb4565b602002602001015160200151905060018111156104ec5760018d83815181106103b4576103b4610cb4565b602002602001015160200181815250506104488373ffffffffffffffffffffffffffffffffffffffff1663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610412573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104369190610d3a565b6104408584610516565b8f919061078c565b60408051808201825273ffffffffffffffffffffffffffffffffffffffff8616815281516004815260248101909252602082810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f3ccfd60b0000000000000000000000000000000000000000000000000000000017905281019190915287518890889081106104da576104da610cb4565b60200260200101819052508560010195505b846001019450505050506102ce565b508761050783836107c8565b95509550505050509250929050565b60008273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610563573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105879190610d57565b61059290600a610ec9565b8373ffffffffffffffffffffffffffffffffffffffff166399530b066040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106019190610ed8565b61060b9084610ef1565b6106159190610f2e565b90505b92915050565b60608167ffffffffffffffff81111561063957610639610876565b604051908082528060200260200182016040528015610662578160200160208202803683370190505b50905060005b828110156106c95783818151811061068257610682610cb4565b602002602001015182828151811061069c5761069c610cb4565b73ffffffffffffffffffffffffffffffffffffffff90921660209283029190910190910152600101610668565b5092915050565b6000805b835181101561073d578273ffffffffffffffffffffffffffffffffffffffff1684828151811061070657610706610cb4565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff161415610735579050610618565b6001016106d4565b506040517f81a3b1be00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316600482015260240160405180910390fd5b808361079885856106d0565b815181106107a8576107a8610cb4565b60200260200101516020018181516107c09190610f69565b905250505050565b60608167ffffffffffffffff8111156107e3576107e3610876565b60405190808252806020026020018201604052801561082957816020015b6040805180820190915260008152606060208201528152602001906001900390816108015790505b50905060005b828110156106c95783818151811061084957610849610cb4565b602002602001015182828151811061086357610863610cb4565b602090810291909101015260010161082f565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156108c8576108c8610876565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561091557610915610876565b604052919050565b600067ffffffffffffffff82111561093757610937610876565b5060051b60200190565b73ffffffffffffffffffffffffffffffffffffffff8116811461096357600080fd5b50565b600082601f83011261097757600080fd5b8135602061098c6109878361091d565b6108ce565b82815260059290921b840181019181810190868411156109ab57600080fd5b8286015b848110156109cf5780356109c281610941565b83529183019183016109af565b509695505050505050565b6000602082840312156109ec57600080fd5b813567ffffffffffffffff811115610a0357600080fd5b61024484828501610966565b6020808252825182820181905260009190848201906040850190845b81811015610a5d57835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101610a2b565b50909695505050505050565b6000806040808486031215610a7d57600080fd5b833567ffffffffffffffff80821115610a9557600080fd5b818601915086601f830112610aa957600080fd5b81356020610ab96109878361091d565b82815260069290921b8401810191818101908a841115610ad857600080fd5b948201945b83861015610b215786868c031215610af55760008081fd5b610afd6108a5565b8635610b0881610941565b8152868401358482015282529486019490820190610add565b97505087013593505080831115610b3757600080fd5b5050610b4585828601610966565b9150509250929050565b6040808252835182820181905260009190606090818501906020808901865b83811015610ba9578151805173ffffffffffffffffffffffffffffffffffffffff168652830151838601529386019390820190600101610b6e565b50508683038188015287518084528184019250600581901b8401820189830160005b83811015610c77577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe080888503018752825173ffffffffffffffffffffffffffffffffffffffff81511685528681015190508a878601528051808c87015260005b81811015610c47578281018901518782018d01528801610c2c565b81811115610c585760008c83890101525b5097870197601f01909116939093018801925090840190600101610bcb565b50909b9a5050505050505050505050565b60008060408385031215610c9b57600080fd5b8235610ca681610941565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060208284031215610d2457600080fd5b815160118110610d3357600080fd5b9392505050565b600060208284031215610d4c57600080fd5b8151610d3381610941565b600060208284031215610d6957600080fd5b815160ff81168114610d3357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b80851115610e0257817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115610de857610de8610d7a565b80851615610df557918102915b93841c9390800290610dae565b509250929050565b600082610e1957506001610618565b81610e2657506000610618565b8160018114610e3c5760028114610e4657610e62565b6001915050610618565b60ff841115610e5757610e57610d7a565b50506001821b610618565b5060208310610133831016604e8410600b8410161715610e85575081810a610618565b610e8f8383610da9565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115610ec157610ec1610d7a565b029392505050565b600061061560ff841683610e0a565b600060208284031215610eea57600080fd5b5051919050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610f2957610f29610d7a565b500290565b600082610f64577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60008219821115610f7c57610f7c610d7a565b50019056fea264697066735822122080046f4a9e6a3f536420bbcf2610f92fb00a3550b3f427b7571f337837aa625664736f6c634300080a003360806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d00011790553480156200003a57600080fd5b506040805161018081019091526000908060c081018060018152604080518082018252600381526244414960e81b6020828101919091528301526012908201526305f5e100606082015260800160018152602001600081525081526020016040518060c001604052806002600a811115620000b957620000b962000b78565b815260408051808201825260048152635553444360e01b6020828101919091528301526006908201526305f5e100606082015260800160018152602001600081525081526020016040518060c001604052806003600a81111562000121576200012162000b78565b815260408051808201825260048152630ae8aa8960e31b602082810191909152830152601290820152644a817c8000606082015260800160028152602001600081525081526020016040518060c001604052806004600a8111156200018a576200018a62000b78565b815260408051808201825260048152634c494e4b60e01b6020828101919091528301526012908201526359682f00606082015260800160018152602001600081525081526020016040518060c001604052806005600a811115620001f257620001f262000b78565b815260408051808201825260048152631554d11560e21b602082810191909152830152601290820152633b023380606082015260800160018152602001600081525081526020016040518060c001604052806006600a8111156200025a576200025a62000b78565b815260408051808201825260058152640e6e88aa8960db1b602082810191909152830152601290820152644cd588640060608201526080016003815260200160009052905260408051610140810190915290915060009080608081018060078152602001604051806040016040528060048152602001636344414960e01b8152508152602001601260ff1681526020016305f5e100815260200160048081111562000309576200030962000b78565b8152602001600181525081526020016040518060c001604052806008600a81111562000339576200033962000b78565b81526040805180820182526005815264635553444360d81b6020828101919091528301526006908201526305f5e100606082015260800160048152602001600281525081526020016040518060c001604052806009600a811115620003a257620003a262000b78565b8152604080518082018252600581526418d554d11560da1b602082810191909152830152601290820152633b023380606082015260800160048152602001600581525081526020016040518060c00160405280600a808111156200040a576200040a62000b78565b81526040805180820182526005815264634c494e4b60d81b6020828101919091528301526012908201526359682f00606082015260800160048152602001600490529052905060005b600681101562000496576200048183826006811062000476576200047662000b8e565b6020020151620004db565b806200048d8162000ba4565b91505062000453565b5060005b6004811015620004d257620004bd82826004811062000476576200047662000b8e565b80620004c98162000ba4565b9150506200049a565b50505062000d14565b6000600282608001516004811115620004f857620004f862000b78565b14156200054e576040516200050d9062000a8c565b604051809103906000f0801580156200052a573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b03831617905590506200071e565b60038260800151600481111562000569576200056962000b78565b1415620005a4576040516200057e9062000a9a565b604051809103906000f0801580156200059b573d6000803e3d6000fd5b5090506200071e565b600182608001516004811115620005bf57620005bf62000b78565b1415620005f157816020015182602001518360400151604051620005e39062000aa8565b6200057e9392919062000c1e565b6004826080015160048111156200060c576200060c62000b78565b1415620006be576000600260008460a00151600a81111562000632576200063262000b78565b600a81111562000646576200064662000b78565b815260200190815260200160002060009054906101000a90046001600160a01b0316905082602001518360200151846040015183604051620006889062000ab6565b62000697949392919062000c5b565b604051809103906000f080158015620006b4573d6000803e3d6000fd5b509150506200071e565b60405162461bcd60e51b815260206004820152602b60248201527f74657374546f6b656e53756974653a204372656174696e6720756e6b6e6f776e60448201526a20746f6b656e207479706560a81b606482015260840160405180910390fd5b60005460208301516040516318caf8e360e31b8152620100009092046001600160a01b03169163c657c718916200075b9185919060040162000ca9565b600060405180830381600087803b1580156200077657600080fd5b505af11580156200078b573d6000803e3d6000fd5b50505050600082606001516008604051620007a69062000ac4565b91825260ff166020820152604001604051809103906000f080158015620007d1573d6000803e3d6000fd5b50905081600260008560000151600a811115620007f257620007f262000b78565b600a81111562000806576200080662000b78565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055508260600151600560008560000151600a8111156200085a576200085a62000b78565b600a8111156200086e576200086e62000b78565b8152602080820192909252604090810160009081209390935585516001600160a01b03861684526008909252909120805460ff1916600183600a811115620008ba57620008ba62000b78565b02179055508260800151600360008560000151600a811115620008e157620008e162000b78565b600a811115620008f557620008f562000b78565b81526020810191909152604001600020805460ff1916600183600481111562000922576200092262000b78565b0217905550604080518082019091526001600160a01b0380841682528281166020808401918252600780546001810182556000918252945160029095027fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688810180549686166001600160a01b031997881617905592517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c689909301805493909416929094169190911790915584015184519091600491600a811115620009eb57620009eb62000b78565b600a811115620009ff57620009ff62000b78565b8152602001908152602001600020908051906020019062000a2292919062000ad2565b5080600660008560000151600a81111562000a415762000a4162000b78565b600a81111562000a555762000a5562000b78565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550505050565b610ab1806200285183390190565b611224806200330283390190565b611758806200452683390190565b6117098062005c7e83390190565b6106ca806200738783390190565b82805462000ae09062000cd7565b90600052602060002090601f01602090048101928262000b04576000855562000b4f565b82601f1062000b1f57805160ff191683800117855562000b4f565b8280016001018555821562000b4f579182015b8281111562000b4f57825182559160200191906001019062000b32565b5062000b5d92915062000b61565b5090565b5b8082111562000b5d576000815560010162000b62565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600060001982141562000bc757634e487b7160e01b600052601160045260246000fd5b5060010190565b6000815180845260005b8181101562000bf65760208185018101518683018201520162000bd8565b8181111562000c09576000602083870101525b50601f01601f19169290920160200192915050565b60608152600062000c33606083018662000bce565b828103602084015262000c47818662000bce565b91505060ff83166040830152949350505050565b60808152600062000c70608083018762000bce565b828103602084015262000c84818762000bce565b60ff95909516604084015250506001600160a01b039190911660609091015292915050565b6001600160a01b038316815260406020820181905260009062000ccf9083018462000bce565b949350505050565b600181811c9082168062000cec57607f821691505b6020821081141562000d0e57634e487b7160e01b600052602260045260246000fd5b50919050565b611b2d8062000d246000396000f3fe6080604052600436106101635760003560e01c80638eb86e8b116100c0578063c6c3bbe611610074578063d051a62211610059578063d051a62214610490578063eebab8ef146104b0578063fa7626d4146104d057600080fd5b8063c6c3bbe614610433578063c74912d21461045357600080fd5b80639b140a85116100a55780639b140a85146103e6578063b36ba20814610406578063ba414fa61461040e57600080fd5b80638eb86e8b1461038357806398cdaadf146103a357600080fd5b80636a72bde71161011757806388327863116100fc578063883278631461030857806388f776a2146103365780638a3177a31461035657600080fd5b80636a72bde7146102c45780636ca42ae3146102e657600080fd5b8063440864fa11610148578063440864fa146102025780634b57b0be1461022f57806367b426451461028157600080fd5b806304bc3b1c1461016f57806310c7f0b9146101b557600080fd5b3661016a57005b600080fd5b34801561017b57600080fd5b5061019f61018a3660046116f6565b60086020526000908152604090205460ff1681565b6040516101ac9190611742565b60405180910390f35b3480156101c157600080fd5b506101d56101d036600461175c565b6104ea565b6040805173ffffffffffffffffffffffffffffffffffffffff9384168152929091166020830152016101ac565b34801561020e57600080fd5b5061022261021d366004611784565b610530565b6040516101ac91906117cb565b34801561023b57600080fd5b5060015461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101ac565b34801561028d57600080fd5b5061025c61029c366004611784565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156102d057600080fd5b506102e46102df36600461181c565b6105ca565b005b3480156102f257600080fd5b506102fb610730565b6040516101ac919061186b565b34801561031457600080fd5b506103286103233660046118d4565b6107b5565b6040519081526020016101ac565b34801561034257600080fd5b506102e461035136600461190b565b610888565b34801561036257600080fd5b50610328610371366004611784565b60056020526000908152604090205481565b34801561038f57600080fd5b506102e461039e366004611954565b6108b9565b3480156103af57600080fd5b5061025c6103be366004611784565b60066020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156103f257600080fd5b506102e4610401366004611993565b610a73565b6102e4610b22565b34801561041a57600080fd5b50610423610ba0565b60405190151581526020016101ac565b34801561043f57600080fd5b506102e461044e3660046119b3565b610d00565b34801561045f57600080fd5b5061048361046e366004611784565b60036020526000908152604090205460ff1681565b6040516101ac91906119d3565b34801561049c57600080fd5b506103286104ab36600461190b565b610daf565b3480156104bc57600080fd5b506102e46104cb366004611954565b610e8b565b3480156104dc57600080fd5b506000546104239060ff1681565b600781815481106104fa57600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff91821692501682565b60046020526000908152604090208054610549906119e7565b80601f0160208091040260200160405190810160405280929190818152602001828054610575906119e7565b80156105c25780601f10610597576101008083540402835291602001916105c2565b820191906000526020600020905b8154815290600101906020018083116105a557829003601f168201915b505050505081565b6000546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152620100009092049091169063ca669fa790602401600060405180830381600087803b15801561063e57600080fd5b505af1158015610652573d6000803e3d6000fd5b505050506002600085600a81111561066c5761066c611713565b600a81111561067d5761067d611713565b8152602081019190915260409081016000205490517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490529091169063095ea7b3906044016020604051808303816000875af1158015610705573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107299190611a3b565b5050505050565b60606007805480602002602001604051908101604052809291908181526020016000905b828210156107ac5760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff908116835260019182015416828401529083529092019101610754565b50505050905090565b60006002600084600a8111156107cd576107cd611713565b600a8111156107de576107de611713565b8152602081019190915260409081016000205490517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152909116906370a0823190602401602060405180830381865afa15801561085d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108819190611a5d565b9392505050565b6108b48383837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6105ca565b505050565b60016003600085600a8111156108d1576108d1611713565b600a8111156108e2576108e2611713565b815260208101919091526040016000205460ff16600481111561090757610907611713565b14610999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f74657374546f6b656e53756974653a20547279696e6720746f206275726e206160448201527f206e6f6e2d6e6f726d616c20746f6b656e00000000000000000000000000000060648201526084015b60405180910390fd5b6002600084600a8111156109af576109af611713565b600a8111156109c0576109c0611713565b8152602081019190915260409081016000205490517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526024820184905290911690639dc29fac906044015b6020604051808303816000875af1158015610a49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6d9190611a3b565b50505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604081205460ff169081600a811115610aaf57610aaf611713565b1415610b17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f20746f6b656e2077697468207375636820616464726573730000000000006044820152606401610990565b610a6d818484610888565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015610b8c57600080fd5b505af1158015610729573d6000803e3d6000fd5b60008054610100900460ff1615610bc05750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610cfb5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610c65917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc491608001611a76565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052610c9d91611abe565b6000604051808303816000865af19150503d8060008114610cda576040519150601f19603f3d011682016040523d82523d6000602084013e610cdf565b606091505b5091505080806020019051810190610cf79190611a3b565b9150505b919050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604081205460ff169081600a811115610d3c57610d3c611713565b1415610da4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f20746f6b656e2077697468207375636820616464726573730000000000006044820152606401610990565b610a6d818484610e8b565b60006002600085600a811115610dc757610dc7611713565b600a811115610dd857610dd8611713565b8152602081019190915260409081016000205490517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301529091169063dd62ed3e90604401602060405180830381865afa158015610e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e839190611a5d565b949350505050565b60026003600085600a811115610ea357610ea3611713565b600a811115610eb457610eb4611713565b815260208101919091526040016000205460ff166004811115610ed957610ed9611713565b1415610ff6576000546040517fc88a5e6d000000000000000000000000000000000000000000000000000000008152306004820152602481018390526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c88a5e6d90604401600060405180830381600087803b158015610f5657600080fd5b505af1158015610f6a573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015610fd857600080fd5b505af1158015610fec573d6000803e3d6000fd5b505050505061163c565b600380600085600a81111561100d5761100d611713565b600a81111561101e5761101e611713565b815260208101919091526040016000205460ff16600481111561104357611043611713565b14156111aa576000546040517fc88a5e6d000000000000000000000000000000000000000000000000000000008152306004820152602481018390526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c88a5e6d90604401600060405180830381600087803b1580156110c057600080fd5b505af11580156110d4573d6000803e3d6000fd5b505050506002600084600a8111156110ee576110ee611713565b600a8111156110ff576110ff611713565b8152602081019190915260409081016000205490517fa1903eab00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a1903eab90839060240160206040518083038185885af115801561117f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906111a49190611a5d565b5061163c565b60046003600085600a8111156111c2576111c2611713565b600a8111156111d3576111d3611713565b815260208101919091526040016000205460ff1660048111156111f8576111f8611713565b141561148f5760006002600085600a81111561121657611216611713565b600a81111561122757611227611713565b815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c49190611ada565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600860205260409020549091506112fb9060ff163084610e8b565b8073ffffffffffffffffffffffffffffffffffffffff1663095ea7b36002600087600a81111561132d5761132d611713565b600a81111561133e5761133e611713565b81526020810191909152604090810160002054905160e083901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602481018590526044016020604051808303816000875af11580156113c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e69190611a3b565b506002600085600a8111156113fd576113fd611713565b600a81111561140e5761140e611713565b8152602081019190915260409081016000205490517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810184905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f1990604401600060405180830381600087803b158015610fd857600080fd5b60016003600085600a8111156114a7576114a7611713565b600a8111156114b8576114b8611713565b815260208101919091526040016000205460ff1660048111156114dd576114dd611713565b14156115b4576002600084600a8111156114f9576114f9611713565b600a81111561150a5761150a611713565b8152602081019190915260409081016000205490517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f19906044016020604051808303816000875af1158015611590573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a49190611a3b565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f74657374546f6b656e53756974653a20547279696e6720746f207472616e736660448201527f657220756e6b6e6f776e20746f6b656e000000000000000000000000000000006064820152608401610990565b6002600084600a81111561165257611652611713565b600a81111561166357611663611713565b8152602081019190915260409081016000205490517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490529091169063a9059cbb90604401610a2a565b73ffffffffffffffffffffffffffffffffffffffff811681146116f357600080fd5b50565b60006020828403121561170857600080fd5b8135610881816116d1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60208101600b831061175657611756611713565b91905290565b60006020828403121561176e57600080fd5b5035919050565b8035600b8110610cfb57600080fd5b60006020828403121561179657600080fd5b61088182611775565b60005b838110156117ba5781810151838201526020016117a2565b83811115610a6d5750506000910152565b60208152600082518060208401526117ea81604085016020870161179f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000806080858703121561183257600080fd5b61183b85611775565b9350602085013561184b816116d1565b9250604085013561185b816116d1565b9396929550929360600135925050565b602080825282518282018190526000919060409081850190868401855b828110156118c7578151805173ffffffffffffffffffffffffffffffffffffffff90811686529087015116868501529284019290850190600101611888565b5091979650505050505050565b600080604083850312156118e757600080fd5b6118f083611775565b91506020830135611900816116d1565b809150509250929050565b60008060006060848603121561192057600080fd5b61192984611775565b92506020840135611939816116d1565b91506040840135611949816116d1565b809150509250925092565b60008060006060848603121561196957600080fd5b61197284611775565b92506020840135611982816116d1565b929592945050506040919091013590565b6000806000606084860312156119a857600080fd5b8335611929816116d1565b6000806000606084860312156119c857600080fd5b8335611972816116d1565b602081016005831061175657611756611713565b600181811c908216806119fb57607f821691505b60208210811415611a35577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600060208284031215611a4d57600080fd5b8151801515811461088157600080fd5b600060208284031215611a6f57600080fd5b5051919050565b7fffffffff000000000000000000000000000000000000000000000000000000008316815260008251611ab081600485016020870161179f565b919091016004019392505050565b60008251611ad081846020870161179f565b9190910192915050565b600060208284031215611aec57600080fd5b8151610881816116d156fea264697066735822122010fe735ed069aca27931edce4ba2ff14ec7886bf21b0eea685a884f9200fb49e64736f6c634300080a003360c0604052600d60808190526c2bb930b83832b21022ba3432b960991b60a090815261002e916000919061007a565b50604080518082019091526004808252630ae8aa8960e31b602090920191825261005a9160019161007a565b506002805460ff1916601217905534801561007457600080fd5b5061014e565b82805461008690610113565b90600052602060002090601f0160209004810192826100a857600085556100ee565b82601f106100c157805160ff19168380011785556100ee565b828001600101855582156100ee579182015b828111156100ee5782518255916020019190600101906100d3565b506100fa9291506100fe565b5090565b5b808211156100fa57600081556001016100ff565b600181811c9082168061012757607f821691505b6020821081141561014857634e487b7160e01b600052602260045260246000fd5b50919050565b6109548061015d6000396000f3fe6080604052600436106100cb5760003560e01c806340c10f1911610074578063a9059cbb1161004e578063a9059cbb14610225578063d0e30db014610245578063dd62ed3e1461024d57600080fd5b806340c10f19146101c357806370a08231146101e357806395d89b411461021057600080fd5b806323b872dd116100a557806323b872dd146101575780632e1a7d4d14610177578063313ce5671461019757600080fd5b806306fdde03146100df578063095ea7b31461010a57806318160ddd1461013a57600080fd5b366100da576100d8610285565b005b600080fd5b3480156100eb57600080fd5b506100f46102e0565b6040516101019190610703565b60405180910390f35b34801561011657600080fd5b5061012a61012536600461079f565b61036e565b6040519015158152602001610101565b34801561014657600080fd5b50475b604051908152602001610101565b34801561016357600080fd5b5061012a6101723660046107c9565b6103e7565b34801561018357600080fd5b506100d8610192366004610805565b6105fe565b3480156101a357600080fd5b506002546101b19060ff1681565b60405160ff9091168152602001610101565b3480156101cf57600080fd5b506100d86101de36600461079f565b6106a4565b3480156101ef57600080fd5b506101496101fe36600461081e565b60036020526000908152604090205481565b34801561021c57600080fd5b506100f46106e2565b34801561023157600080fd5b5061012a61024036600461079f565b6106ef565b6100d8610285565b34801561025957600080fd5b50610149610268366004610839565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102a490849061089b565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102ed906108b3565b80601f0160208091040260200160405190810160405280929190818152602001828054610319906108b3565b80156103665780601f1061033b57610100808354040283529160200191610366565b820191906000526020600020905b81548152906001019060200180831161034957829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103d69086815260200190565b60405180910390a350600192915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561041957600080fd5b73ffffffffffffffffffffffffffffffffffffffff8416331480159061048f575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105175773ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020548211156104d157600080fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915281208054849290610511908490610907565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061054c908490610907565b909155505073ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260408120805484929061058690849061089b565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516105ec91815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561061a57600080fd5b3360009081526003602052604081208054839290610639908490610907565b9091555050604051339082156108fc029083906000818181858888f1935050505015801561066b573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260036020526040812080548392906106d990849061089b565b90915550505050565b600180546102ed906108b3565b60006106fc3384846103e7565b9392505050565b600060208083528351808285015260005b8181101561073057858101830151858201604001528201610714565b81811115610742576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461079a57600080fd5b919050565b600080604083850312156107b257600080fd5b6107bb83610776565b946020939093013593505050565b6000806000606084860312156107de57600080fd5b6107e784610776565b92506107f560208501610776565b9150604084013590509250925092565b60006020828403121561081757600080fd5b5035919050565b60006020828403121561083057600080fd5b6106fc82610776565b6000806040838503121561084c57600080fd5b61085583610776565b915061086360208401610776565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156108ae576108ae61086c565b500190565b600181811c908216806108c757607f821691505b60208210811415610901577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000828210156109195761091961086c565b50039056fea26469706673582212206ec943fa4e3b70d8fca6c25b6aa26fa18e8f8952ce3bc4d5afcb443bf3097c0564736f6c634300080a003360806040526000600255600060035534801561001a57600080fd5b506111fa8061002a6000396000f3fe60806040526004361061016e5760003560e01c80637a28fb88116100cb578063bdd17e1c1161007f578063dd62ed3e11610059578063dd62ed3e146103ee578063ee7a7c0414610441578063f5eb42dc1461046157600080fd5b8063bdd17e1c146103ad578063cdb9a21c146103c3578063d5002f2e146103d957600080fd5b8063a1903eab116100b0578063a1903eab1461035a578063a457c2d71461036d578063a9059cbb1461038d57600080fd5b80637a28fb88146102f457806395d89b411461031457600080fd5b806323b872dd1161012257806337cfdaca1161010757806337cfdaca1461020d57806339509351146102b457806370a08231146102d457600080fd5b806323b872dd14610278578063313ce5671461029857600080fd5b806318160ddd1161015357806318160ddd1461020d578063192084511461023057806322301f6e1461025057600080fd5b806306fdde0314610185578063095ea7b3146101dd57600080fd5b366101805761017d6000610481565b50005b600080fd5b34801561019157600080fd5b5060408051808201909152601781527f4c6971756964207374616b656420457468657220322e3000000000000000000060208201525b6040516101d49190610f63565b60405180910390f35b3480156101e957600080fd5b506101fd6101f8366004610fff565b610545565b60405190151581526020016101d4565b34801561021957600080fd5b5061022261055b565b6040519081526020016101d4565b34801561023c57600080fd5b5061022261024b366004611029565b61056b565b34801561025c57600080fd5b5061027661026b366004611042565b600391909155600255565b005b34801561028457600080fd5b506101fd610293366004611064565b6105ab565b3480156102a457600080fd5b50604051601281526020016101d4565b3480156102c057600080fd5b506101fd6102cf366004610fff565b610696565b3480156102e057600080fd5b506102226102ef3660046110a0565b6106d9565b34801561030057600080fd5b5061022261030f366004611029565b61070e565b34801561032057600080fd5b5060408051808201909152600581527f737445544800000000000000000000000000000000000000000000000000000060208201526101c7565b6102226103683660046110a0565b61073a565b34801561037957600080fd5b506101fd610388366004610fff565b610745565b34801561039957600080fd5b506101fd6103a8366004610fff565b6107f9565b3480156103b957600080fd5b5061022260035481565b3480156103cf57600080fd5b5061022260025481565b3480156103e557600080fd5b50610222610806565b3480156103fa57600080fd5b506102226104093660046110bb565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b34801561044d57600080fd5b5061027661045c366004610fff565b610811565b34801561046d57600080fd5b5061022261047c3660046110a0565b61081f565b60003334806104f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f5a45524f5f4445504f534954000000000000000000000000000000000000000060448201526064015b60405180910390fd5b60006104fc8261056b565b9050806105065750805b8160036000828254610518919061111d565b909155506105289050838261084a565b61053383838761093b565b61053d8382610992565b949350505050565b60006105523384846109ea565b50600192915050565b600061056660035490565b905090565b60008061057760035490565b9050806105875750600092915050565b6105a48161059e61059760025490565b8690610b52565b90610b5e565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001602090815260408083203384529091528120548281101561066c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f5452414e534645525f414d4f554e545f455843454544535f414c4c4f57414e4360448201527f450000000000000000000000000000000000000000000000000000000000000060648201526084016104e8565b610677858585610b6a565b61068b85336106868487610bef565b6109ea565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916105529185906106869086610bfb565b73ffffffffffffffffffffffffffffffffffffffff81166000908152602081905260408120546107089061070e565b92915050565b60008061071a60025490565b90508061072a5750600092915050565b6105a48161059e61059760035490565b600061070882610481565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156107e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4445435245415345445f414c4c4f57414e43455f42454c4f575f5a45524f000060448201526064016104e8565b6107ef33856106868487610bef565b5060019392505050565b6000610552338484610b6a565b600061056660025490565b61081b8282610c07565b5050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040812054610708565b73ffffffffffffffffffffffffffffffffffffffff82166108c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4d494e545f544f5f5448455f5a45524f5f41444452455353000000000000000060448201526064016104e8565b80600260008282546108d9919061111d565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205461090e9082610bfb565b73ffffffffffffffffffffffffffffffffffffffff90921660009081526020819052604090209190915550565b6040805183815273ffffffffffffffffffffffffffffffffffffffff83811660208301528516917fed8dd430b1e4bba98e943dc5b157cf7b54d9e12916d6c474ff5733a95001d03b910160405180910390a2505050565b73ffffffffffffffffffffffffffffffffffffffff821660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6109d58461070e565b60405190815260200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff8316610a67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f415050524f56455f46524f4d5f5a45524f5f414444524553530000000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff8216610ae4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f415050524f56455f544f5f5a45524f5f4144445245535300000000000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006105a48284611135565b60006105a48284611172565b6000610b758261056b565b9050610b82848483610d64565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610be191815260200190565b60405180910390a350505050565b60006105a482846111ad565b60006105a4828461111d565b73ffffffffffffffffffffffffffffffffffffffff8216610c84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4255524e5f46524f4d5f5448455f5a45524f5f4144445245535300000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205480821115610d14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4255524e5f414d4f554e545f455843454544535f42414c414e4345000000000060448201526064016104e8565b8160026000828254610d2691906111ad565b90915550610d3690508183610bef565b73ffffffffffffffffffffffffffffffffffffffff9093166000908152602081905260409020929092555050565b73ffffffffffffffffffffffffffffffffffffffff8316610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f5452414e534645525f46524f4d5f5448455f5a45524f5f41444452455353000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff8216610e5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f5452414e534645525f544f5f5448455f5a45524f5f414444524553530000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205480821115610eee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5452414e534645525f414d4f554e545f455843454544535f42414c414e43450060448201526064016104e8565b610ef88183610bef565b73ffffffffffffffffffffffffffffffffffffffff8086166000908152602081905260408082209390935590851681522054610f349083610bfb565b73ffffffffffffffffffffffffffffffffffffffff909316600090815260208190526040902092909255505050565b600060208083528351808285015260005b81811015610f9057858101830151858201604001528201610f74565b81811115610fa2576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ffa57600080fd5b919050565b6000806040838503121561101257600080fd5b61101b83610fd6565b946020939093013593505050565b60006020828403121561103b57600080fd5b5035919050565b6000806040838503121561105557600080fd5b50508035926020909101359150565b60008060006060848603121561107957600080fd5b61108284610fd6565b925061109060208501610fd6565b9150604084013590509250925092565b6000602082840312156110b257600080fd5b6105a482610fd6565b600080604083850312156110ce57600080fd5b6110d783610fd6565b91506110e560208401610fd6565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611130576111306110ee565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561116d5761116d6110ee565b500290565b6000826111a8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000828210156111bf576111bf6110ee565b50039056fea2646970667358221220a5b4f31162ba2b8b3424cef84b31ef91d05a825243602b5fdf758ffb49b8246364736f6c634300080a003360a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a003360c06040523480156200001157600080fd5b506040516200170938038062001709833981016040819052620000349162000266565b8351849084906200004d906003906020850190620000f3565b50805162000063906004906020840190620000f3565b505050620000806200007a6200009d60201b60201c565b620000a1565b60ff9091166080526001600160a01b031660a05250620003479050565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b82805462000101906200030a565b90600052602060002090601f01602090048101928262000125576000855562000170565b82601f106200014057805160ff191683800117855562000170565b8280016001018555821562000170579182015b828111156200017057825182559160200191906001019062000153565b506200017e92915062000182565b5090565b5b808211156200017e576000815560010162000183565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c157600080fd5b81516001600160401b0380821115620001de57620001de62000199565b604051601f8301601f19908116603f0116810190828211818310171562000209576200020962000199565b816040528381526020925086838588010111156200022657600080fd5b600091505b838210156200024a57858201830151818301840152908201906200022b565b838211156200025c5760008385830101525b9695505050505050565b600080600080608085870312156200027d57600080fd5b84516001600160401b03808211156200029557600080fd5b620002a388838901620001af565b95506020870151915080821115620002ba57600080fd5b50620002c987828801620001af565b935050604085015160ff81168114620002e157600080fd5b60608601519092506001600160a01b0381168114620002ff57600080fd5b939692955090935050565b600181811c908216806200031f57607f821691505b602082108114156200034157634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05161138e6200037b600039600081816101f70152818161041f0152610600015260006101a2015261138e6000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80636f307dc3116100b257806395d89b4111610081578063a9059cbb11610066578063a9059cbb146102b5578063dd62ed3e146102c8578063f2fde38b1461030e57600080fd5b806395d89b411461029a578063a457c2d7146102a257600080fd5b80636f307dc3146101f257806370a082311461023e578063715018a6146102745780638da5cb5b1461027c57600080fd5b806323b872dd116100ee57806323b872dd14610188578063313ce5671461019b57806339509351146101cc57806340c10f19146101df57600080fd5b806306fdde0314610120578063095ea7b31461013e57806318160ddd146101615780631e9a695014610173575b600080fd5b610128610321565b604051610135919061112d565b60405180910390f35b61015161014c3660046111c9565b6103b3565b6040519015158152602001610135565b6002545b604051908152602001610135565b6101866101813660046111c9565b6103c9565b005b6101516101963660046111f3565b610491565b60405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610135565b6101516101da3660046111c9565b61057c565b6101866101ed3660046111c9565b6105c5565b6102197f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b61016561024c36600461122f565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610186610691565b60055473ffffffffffffffffffffffffffffffffffffffff16610219565b61012861071e565b6101516102b03660046111c9565b61072d565b6101516102c33660046111c9565b610805565b6101656102d6366004611251565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b61018661031c36600461122f565b610812565b60606003805461033090611284565b80601f016020809104026020016040519081016040528092919081815260200182805461035c90611284565b80156103a95780601f1061037e576101008083540402835291602001916103a9565b820191906000526020600020905b81548152906001019060200180831161038c57829003601f168201915b5050505050905090565b60006103c0338484610942565b50600192915050565b6103d33382610af5565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015610468573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048c91906112d8565b505050565b600061049e848484610ce2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6105718533858403610942565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916103c09185906105c0908690611329565b610942565b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906323b872dd906064016020604051808303816000875af115801561065e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068291906112d8565b5061068d8282610f96565b5050565b60055473ffffffffffffffffffffffffffffffffffffffff163314610712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161055b565b61071c60006110b6565b565b60606004805461033090611284565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156107ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161055b565b6107fb3385858403610942565b5060019392505050565b60006103c0338484610ce2565b60055473ffffffffffffffffffffffffffffffffffffffff163314610893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161055b565b73ffffffffffffffffffffffffffffffffffffffff8116610936576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161055b565b61093f816110b6565b50565b73ffffffffffffffffffffffffffffffffffffffff83166109e4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff8216610a87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8216610b98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015610c4e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290610c8a908490611341565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff8216610e28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610ede576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610f22908490611329565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f8891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161055b565b80600260008282546110259190611329565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152602081905260408120805483929061105f908490611329565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208083528351808285015260005b8181101561115a5785810183015185820160400152820161113e565b8181111561116c576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146111c457600080fd5b919050565b600080604083850312156111dc57600080fd5b6111e5836111a0565b946020939093013593505050565b60008060006060848603121561120857600080fd5b611211846111a0565b925061121f602085016111a0565b9150604084013590509250925092565b60006020828403121561124157600080fd5b61124a826111a0565b9392505050565b6000806040838503121561126457600080fd5b61126d836111a0565b915061127b602084016111a0565b90509250929050565b600181811c9082168061129857607f821691505b602082108114156112d2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156112ea57600080fd5b8151801515811461124a57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561133c5761133c6112fa565b500190565b600082821015611353576113536112fa565b50039056fea26469706673582212203a6db30cd3c097921df4156794aa7973eb848711deeb2cffd7c54a9df1fdb0a564736f6c634300080a003360a060405234801561001057600080fd5b506040516106ca3803806106ca83398101604081905261002f9161006c565b60009190915560ff166080526001805460506001600160501b031991821681179092556004805490911690911790554260028190556003556100a2565b6000806040838503121561007f57600080fd5b82519150602083015160ff8116811461009757600080fd5b809150509250929050565b60805161060e6100bc600039600060d3015261060e6000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80639a6fc8f511610081578063d62ada111161005b578063d62ada11146102dc578063f7a30806146102f4578063feaf968c1461030757600080fd5b80639a6fc8f5146101cd578063bd18ad531461023a578063cd653afc1461024d57600080fd5b806354fd4d50116100b257806354fd4d501461012d57806367e8d83d1461013c5780637284e4161461018e57600080fd5b8063313ce567146100ce5780633fd0875f1461010c575b600080fd5b6100f57f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020015b60405180910390f35b6004546a0100000000000000000000900460ff166040516101039190610441565b60405160018152602001610103565b61018c61014a366004610482565b600480549115156c01000000000000000000000000027fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff909216919091179055565b005b604080518082018252600c81527f7072696365206f7261636c6500000000000000000000000000000000000000006020820152905161010391906104ab565b6102036101db36600461053d565b60015460005460025460035460045469ffffffffffffffffffff948516941691939590929450565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610103565b61018c610248366004610558565b61030f565b61018c61025b366004610579565b6001805469ffffffffffffffffffff9586167fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090911617905560029290925560035560048054919092167fffffffffffffffffffffffffffffffffffffffff00ff00000000000000000000909116176b020000000000000000000000179055565b6102e461035f565b6040519015158152602001610103565b61018c6103023660046105bf565b600055565b610203610385565b600480548291907fffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff166b01000000000000000000000083600281111561035757610357610412565b021790555050565b600454600090610380906b010000000000000000000000900460ff166103d6565b905090565b60008060008060006004600c9054906101000a900460ff16156103a757600080fd5b505060015460005460025460035460045469ffffffffffffffffffff9485169893975091955093509190911690565b600060028260028111156103ec576103ec610412565b14156103f757600080fd5b600182600281111561040b5761040b610412565b1492915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016006831061047c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561049457600080fd5b813580151581146104a457600080fd5b9392505050565b600060208083528351808285015260005b818110156104d8578581018301518582016040015282016104bc565b818111156104ea576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803569ffffffffffffffffffff8116811461053857600080fd5b919050565b60006020828403121561054f57600080fd5b6104a48261051e565b60006020828403121561056a57600080fd5b8135600381106104a457600080fd5b6000806000806080858703121561058f57600080fd5b6105988561051e565b935060208501359250604085013591506105b46060860161051e565b905092959194509250565b6000602082840312156105d157600080fd5b503591905056fea264697066735822122014874f7a973b86501c4c1a8be32490fe902c8f088ee234d25f9b2497e19f9e5264736f6c634300080a0033608060405234801561001057600080fd5b50611a3c806100206000396000f3fe6080604052600436106101a15760003560e01c806385f8c259116100e1578063baa2abde1161008a578063ded9382a11610064578063ded9382a14610424578063e8e3370014610451578063f305d7191461049a578063fb3bdb41146104b957600080fd5b8063baa2abde146103da578063c45a015514610382578063d06ca61f1461040457600080fd5b8063ad615dec116100bb578063ad615dec146101e9578063af2979eb1461039e578063b6f9de95146103c557600080fd5b806385f8c259146101e95780638803dbee14610362578063ad5c46481461038257600080fd5b806338ed17391161014e5780635b0d5984116101285780635b0d5984146102fb5780635c11d79514610326578063791ac947146103265780637ff36ab51461034957600080fd5b806338ed1739146102b95780634a25d94a146102175780635911fb9a146102d957600080fd5b80631f00ca741161017f5780631f00ca741461024b5780632195995c1461026b578063379b87ea1461029957600080fd5b806302751cec146101a6578063054d50d4146101e957806318cbafe514610217575b600080fd5b3480156101b257600080fd5b506101cf6101c13660046112b8565b600080965096945050505050565b604080519283526020830191909152015b60405180910390f35b3480156101f557600080fd5b50610209610204366004611310565b6104cc565b6040519081526020016101e0565b34801561022357600080fd5b5061023e610232366004611388565b60609695505050505050565b6040516101e091906113f8565b34801561025757600080fd5b5061023e61026636600461143c565b6104d6565b34801561027757600080fd5b506101cf6102863660046114aa565b6000809b509b9950505050505050505050565b3480156102a557600080fd5b506102096102b436600461154e565b610728565b3480156102c557600080fd5b5061023e6102d4366004611388565b6107c6565b3480156102e557600080fd5b506102f96102f4366004611581565b6109a6565b005b34801561030757600080fd5b506102096103163660046115bd565b60009a9950505050505050505050565b34801561033257600080fd5b506102f9610341366004611388565b505050505050565b61023e61035736600461164f565b606095945050505050565b34801561036e57600080fd5b5061023e61037d366004611388565b610a28565b34801561038e57600080fd5b50604051600081526020016101e0565b3480156103aa57600080fd5b506102096103b93660046112b8565b60009695505050505050565b6102f96103d336600461164f565b5050505050565b3480156103e657600080fd5b506101cf6103f53660046116b5565b60008097509795505050505050565b34801561041057600080fd5b5061023e61041f36600461143c565b610b7e565b34801561043057600080fd5b506101cf61043f3660046115bd565b6000809a509a98505050505050505050565b34801561045d57600080fd5b5061047f61046c36600461171f565b6000806000985098509895505050505050565b604080519384526020840192909252908201526060016101e0565b61047f6104a83660046112b8565b600080600096509650969350505050565b61023e6104c736600461164f565b610d65565b60005b9392505050565b60606002821015610548576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f496e636f72726563742070617468206c656e677468000000000000000000000060448201526064015b60405180910390fd5b8167ffffffffffffffff81111561056157610561611793565b60405190808252806020026020018201604052801561058a578160200160208202803683370190505b509050838161059a6001856117f1565b815181106105aa576105aa611808565b602090810291909101015260006105c26001846117f1565b90505b801561072057600061062885856105dd6001866117f1565b8181106105ec576105ec611808565b90506020020160208101906106019190611837565b86868581811061061357610613611808565b90506020020160208101906102b49190611837565b905080610691576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f556e69737761704d6f636b3a2052617465206973206e6f742073657475700000604482015260640161053f565b6103e5816b033b2e3c9fd0803ce80000008585815181106106b4576106b4611808565b60200260200101516106c69190611852565b6106d0919061188f565b6106dc906103e8611852565b6106e6919061188f565b836106f26001856117f1565b8151811061070257610702611808565b60209081029190910101525080610718816118ca565b9150506105c5565b509392505050565b73ffffffffffffffffffffffffffffffffffffffff80831660009081526020818152604080832093851683529290522054806107c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f546f6b656e2070616972206e6f7420666f756e64000000000000000000000000604482015260640161053f565b92915050565b60608142811015610833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015260640161053f565b6000610840898888610b7e565b90506000816108506001896117f1565b8151811061086057610860611808565b60200260200101519050888110156108fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f556e69737761705632526f757465723a20494e53554646494349454e545f4f5560448201527f545055545f414d4f554e54000000000000000000000000000000000000000000606482015260840161053f565b61094633308c8b8b600081811061091357610913611808565b90506020020160208101906109289190611837565b73ffffffffffffffffffffffffffffffffffffffff16929190610d94565b61099986828a8a6109586001826117f1565b81811061096757610967611808565b905060200201602081019061097c9190611837565b73ffffffffffffffffffffffffffffffffffffffff169190610e76565b5098975050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152602081815260408083209386168352929052208190556109ef6b033b2e3c9fd0803ce800000082610ed1565b73ffffffffffffffffffffffffffffffffffffffff92831660009081526020818152604080832096909516825294909452919092205550565b60608142811015610a95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015260640161053f565b6000610aa28988886104d6565b9050600081600081518110610ab957610ab9611808565b6020026020010151905088811115610b53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f556e69737761705632526f757465723a204558434553534956455f494e50555460448201527f5f414d4f554e5400000000000000000000000000000000000000000000000000606482015260840161053f565b610b6c3330838b8b600081811061091357610913611808565b610999868b8a8a6109586001826117f1565b60606002821015610beb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f496e636f72726563742070617468206c656e6774680000000000000000000000604482015260640161053f565b8167ffffffffffffffff811115610c0457610c04611793565b604051908082528060200260200182016040528015610c2d578160200160208202803683370190505b5090508381600081518110610c4457610c44611808565b602090810291909101015260015b82811015610720576000610c6c85856105dd6001866117f1565b905080610cd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f556e69737761704d6f636b3a2052617465206973206e6f742073657475700000604482015260640161053f565b6103e86103e56b033b2e3c9fd0803ce80000008386610cf56001886117f1565b81518110610d0557610d05611808565b6020026020010151610d179190611852565b610d21919061188f565b610d2b9190611852565b610d35919061188f565b838381518110610d4757610d47611808565b60209081029190910101525080610d5d816118ff565b915050610c52565b604080516001808252818301909252606091600091906020808301908036833701905050979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052610e709085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611037565b50505050565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610ecc9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401610dee565b505050565b60408051808201909152600281527f4d33000000000000000000000000000000000000000000000000000000000000602082015260009082610f40576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053f9190611964565b506000610f4e60028461188f565b90506b033b2e3c9fd0803ce8000000610f87827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6117f1565b610f91919061188f565b8411156040518060400160405280600281526020017f4d3100000000000000000000000000000000000000000000000000000000000081525090611002576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053f9190611964565b50828161101b6b033b2e3c9fd0803ce800000087611852565b61102591906119b5565b61102f919061188f565b949350505050565b6000611099826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166111439092919063ffffffff16565b805190915015610ecc57808060200190518101906110b791906119cd565b610ecc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161053f565b606061102f848460008585843b6111b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161053f565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516111df91906119ea565b60006040518083038185875af1925050503d806000811461121c576040519150601f19603f3d011682016040523d82523d6000602084013e611221565b606091505b509150915061123182828661123c565b979650505050505050565b6060831561124b5750816104cf565b82511561125b5782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053f9190611964565b803573ffffffffffffffffffffffffffffffffffffffff811681146112b357600080fd5b919050565b60008060008060008060c087890312156112d157600080fd5b6112da8761128f565b95506020870135945060408701359350606087013592506112fd6080880161128f565b915060a087013590509295509295509295565b60008060006060848603121561132557600080fd5b505081359360208301359350604090920135919050565b60008083601f84011261134e57600080fd5b50813567ffffffffffffffff81111561136657600080fd5b6020830191508360208260051b850101111561138157600080fd5b9250929050565b60008060008060008060a087890312156113a157600080fd5b8635955060208701359450604087013567ffffffffffffffff8111156113c657600080fd5b6113d289828a0161133c565b90955093506113e590506060880161128f565b9150608087013590509295509295509295565b6020808252825182820181905260009190848201906040850190845b8181101561143057835183529284019291840191600101611414565b50909695505050505050565b60008060006040848603121561145157600080fd5b83359250602084013567ffffffffffffffff81111561146f57600080fd5b61147b8682870161133c565b9497909650939450505050565b801515811461149657600080fd5b50565b803560ff811681146112b357600080fd5b60008060008060008060008060008060006101608c8e0312156114cc57600080fd5b6114d58c61128f565b9a506114e360208d0161128f565b995060408c0135985060608c0135975060808c0135965061150660a08d0161128f565b955060c08c0135945060e08c013561151d81611488565b935061152c6101008d01611499565b92506101208c013591506101408c013590509295989b509295989b9093969950565b6000806040838503121561156157600080fd5b61156a8361128f565b91506115786020840161128f565b90509250929050565b60008060006060848603121561159657600080fd5b61159f8461128f565b92506115ad6020850161128f565b9150604084013590509250925092565b6000806000806000806000806000806101408b8d0312156115dd57600080fd5b6115e68b61128f565b995060208b0135985060408b0135975060608b0135965061160960808c0161128f565b955060a08b0135945060c08b013561162081611488565b935061162e60e08c01611499565b92506101008b013591506101208b013590509295989b9194979a5092959850565b60008060008060006080868803121561166757600080fd5b85359450602086013567ffffffffffffffff81111561168557600080fd5b6116918882890161133c565b90955093506116a490506040870161128f565b949793965091946060013592915050565b600080600080600080600060e0888a0312156116d057600080fd5b6116d98861128f565b96506116e76020890161128f565b955060408801359450606088013593506080880135925061170a60a0890161128f565b915060c0880135905092959891949750929550565b600080600080600080600080610100898b03121561173c57600080fd5b6117458961128f565b975061175360208a0161128f565b965060408901359550606089013594506080890135935060a0890135925061177d60c08a0161128f565b915060e089013590509295985092959890939650565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015611803576118036117c2565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561184957600080fd5b6104cf8261128f565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561188a5761188a6117c2565b500290565b6000826118c5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000816118d9576118d96117c2565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611931576119316117c2565b5060010190565b60005b8381101561195357818101518382015260200161193b565b83811115610e705750506000910152565b6020815260008251806020840152611983816040850160208701611938565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b600082198211156119c8576119c86117c2565b500190565b6000602082840312156119df57600080fd5b81516104cf81611488565b600082516119fc818460208701611938565b919091019291505056fea2646970667358221220c83ba4b7a780d6bcd42d58ce63ee43d73cb764a70cd33e8cc91609b9554a872e64736f6c634300080a003360e06040523480156200001157600080fd5b506040516200251b3803806200251b833981016040819052620000349162000121565b81816001600160a01b03821615806200005457506001600160a01b038116155b156200007357604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038216608081905260408051632f7a188160e01b81529051632f7a1881916004808201926020929091908290030181865afa158015620000be573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e4919062000159565b6001600160a01b0390811660a0521660c05250506001600055506200017e565b80516001600160a01b03811681146200011c57600080fd5b919050565b600080604083850312156200013557600080fd5b620001408362000104565b9150620001506020840162000104565b90509250929050565b6000602082840312156200016c57600080fd5b620001778262000104565b9392505050565b60805160a05160c0516122da620002416000396000818161045e015281816106040152818161070101528181610aa401528181610c9c01528181610d6e015281816110dd01528181611186015281816113a8015281816114c701526115a10152600081816102b40152818161121301526116860152600081816104b20152818161084601528181610b8c01528181610e56015281816113fe01528181611498015281816115f70152818161170e015281816117c2015261186c01526122da6000f3fe6080604052600436106101cd5760003560e01c8063ad5c4648116100f7578063c12c21c011610095578063ded9382a11610064578063ded9382a1461052b578063e8e3370014610546578063f305d71914610581578063fb3bdb411461038557600080fd5b8063c12c21c0146104a0578063c45a0155146104d4578063ce30bbdb146104e9578063d06ca61f1461050b57600080fd5b8063b6f9de95116100d1578063b6f9de9514610423578063baa2abde14610431578063bd90df701461044c578063bdbeaa311461048057600080fd5b8063ad5c4648146103d3578063ad615dec146103e8578063af2979eb1461040857600080fd5b80634a25d94a1161016f578063791ac9471161013e578063791ac9471461033b5780637ff36ab51461038557806385f8c259146103935780638803dbee146103b357600080fd5b80634a25d94a1461023a5780635b0d59841461031b5780635c11d7951461033b57806378aa73a41461035d57600080fd5b80631f00ca74116101ab5780631f00ca74146102675780632195995c146102875780632f7a1881146102a257806338ed1739146102fb57600080fd5b806302751cec146101d2578063054d50d41461020c57806318cbafe51461023a575b600080fd5b3480156101de57600080fd5b506101f26101ed3660046118f6565b61058f565b604080519283526020830191909152015b60405180910390f35b34801561021857600080fd5b5061022c610227366004611954565b6105c4565b604051908152602001610203565b34801561024657600080fd5b5061025a6102553660046119cc565b61068d565b6040516102039190611a3f565b34801561027357600080fd5b5061025a610282366004611a83565b6106c1565b34801561029357600080fd5b506101f26101ed366004611af5565b3480156102ae57600080fd5b506102d67f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610203565b34801561030757600080fd5b5061025a6103163660046119cc565b61079d565b34801561032757600080fd5b5061022c610336366004611b9d565b6109fe565b34801561034757600080fd5b5061035b6103563660046119cc565b610a32565b005b34801561036957600080fd5b50610372600281565b60405161ffff9091168152602001610203565b61025a610255366004611c31565b34801561039f57600080fd5b5061022c6103ae366004611954565b610a64565b3480156103bf57600080fd5b5061025a6103ce3660046119cc565b610ae8565b3480156103df57600080fd5b506102d6610c98565b3480156103f457600080fd5b5061022c610403366004611954565b610d2e565b34801561041457600080fd5b5061022c6103363660046118f6565b61035b610356366004611c31565b34801561043d57600080fd5b506101f26101ed366004611c98565b34801561045857600080fd5b506102d67f000000000000000000000000000000000000000000000000000000000000000081565b34801561048c57600080fd5b5061025a61049b366004611d0a565b610db2565b3480156104ac57600080fd5b506102d67f000000000000000000000000000000000000000000000000000000000000000081565b3480156104e057600080fd5b506102d66110d9565b3480156104f557600080fd5b506104fe600181565b6040516102039190611d5d565b34801561051757600080fd5b5061025a610526366004611a83565b611146565b34801561053757600080fd5b506101f26101ed366004611b9d565b34801561055257600080fd5b50610566610561366004611d9e565b6111bf565b60408051938452602084019290925290820152606001610203565b6105666105613660046118f6565b6000806040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f054d50d40000000000000000000000000000000000000000000000000000000081526004810184905260248101839052604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063054d50d4906064015b602060405180830381865afa158015610661573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106859190611e1a565b949350505050565b60606040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1f00ca7400000000000000000000000000000000000000000000000000000000815260609073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690631f00ca749061073a90879087908790600401611e89565b600060405180830381865afa158015610757573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526106859190810190611f2a565b606060026000541415610811576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156108a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c69190611fd0565b90506000868660008181106108dd576108dd611ff4565b90506020020160208101906108f29190612023565b90506000878761090360018261206f565b81811061091257610912611ff4565b90506020020160208101906109279190612023565b90506109d88383836338ed173960e01b8e8e8e8e8b8e60405160240161095296959493929190612086565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152600160006111f6565b8060200190518101906109eb9190611f2a565b60016000559a9950505050505050505050565b60006040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f85f8c2590000000000000000000000000000000000000000000000000000000081526004810184905260248101839052604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906385f8c25990606401610644565b606060026000541415610b57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610808565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610be8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0c9190611fd0565b9050600086866000818110610c2357610c23611ff4565b9050602002016020810190610c389190612023565b905060008787610c4960018261206f565b818110610c5857610c58611ff4565b9050602002016020810190610c6d9190612023565b90506109d8838383638803dbee60e01b8e8e8e8e8b8e60405160240161095296959493929190612086565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d299190611fd0565b905090565b6040517fad615dec0000000000000000000000000000000000000000000000000000000081526004810184905260248101839052604481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ad615dec90606401610644565b606060026000541415610e21576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610808565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610eb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed69190611fd0565b9050600085856000818110610eed57610eed611ff4565b9050602002016020810190610f029190612023565b905060008686610f1360018261206f565b818110610f2257610f22611ff4565b9050602002016020810190610f379190612023565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529192506000918416906370a0823190602401602060405180830381865afa158015610fa9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fcd9190611e1a565b905060018111156110c7578080600190039150506110b18484846338ed173960e01b856b033b2e3c9fd0803ce80000008f8861100991906120d1565b611013919061210e565b8e8e8c8f60405160240161102c96959493929190612086565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526001806111f6565b8060200190518101906110c49190611f2a565b94505b50506001600055509095945050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d05573d6000803e3d6000fd5b6040517fd06ca61f00000000000000000000000000000000000000000000000000000000815260609073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063d06ca61f9061073a90879087908790600401611e89565b60008060006040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606000803373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461135f576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301528916906370a0823190602401602060405180830381865afa1580156112a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c89190611e1a565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152919350908816906370a0823190602401602060405180830381865afa158015611338573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135c9190611e1a565b90505b841561145b576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561144257600080fd5b505af1158015611456573d6000803e3d6000fd5b505050505b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a906114f19033907f0000000000000000000000000000000000000000000000000000000000000000908b90600401612179565b6000604051808303816000875af1158015611510573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261155691908101906121f2565b92508415611654576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561163b57600080fd5b505af115801561164f573d6000803e3d6000fd5b505050505b61166289898985858961166e565b50509695505050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461176f576040517f654a9eda00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528681166024830152858116604483015260648201859052608482018490527f0000000000000000000000000000000000000000000000000000000000000000169063654a9eda9060a401600060405180830381600087803b15801561175257600080fd5b505af1158015611766573d6000803e3d6000fd5b505050506118c9565b801561181f576040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015286811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b15801561180657600080fd5b505af115801561181a573d6000803e3d6000fd5b505050505b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015285811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156118b057600080fd5b505af11580156118c4573d6000803e3d6000fd5b505050505b505050505050565b73ffffffffffffffffffffffffffffffffffffffff811681146118f357600080fd5b50565b60008060008060008060c0878903121561190f57600080fd5b863561191a816118d1565b9550602087013594506040870135935060608701359250608087013561193f816118d1565b8092505060a087013590509295509295509295565b60008060006060848603121561196957600080fd5b505081359360208301359350604090920135919050565b60008083601f84011261199257600080fd5b50813567ffffffffffffffff8111156119aa57600080fd5b6020830191508360208260051b85010111156119c557600080fd5b9250929050565b60008060008060008060a087890312156119e557600080fd5b8635955060208701359450604087013567ffffffffffffffff811115611a0a57600080fd5b611a1689828a01611980565b9095509350506060870135611a2a816118d1565b80925050608087013590509295509295509295565b6020808252825182820181905260009190848201906040850190845b81811015611a7757835183529284019291840191600101611a5b565b50909695505050505050565b600080600060408486031215611a9857600080fd5b83359250602084013567ffffffffffffffff811115611ab657600080fd5b611ac286828701611980565b9497909650939450505050565b80358015158114611adf57600080fd5b919050565b803560ff81168114611adf57600080fd5b60008060008060008060008060008060006101608c8e031215611b1757600080fd5b8b35611b22816118d1565b9a5060208c0135611b32816118d1565b995060408c0135985060608c0135975060808c0135965060a08c0135611b57816118d1565b955060c08c01359450611b6c60e08d01611acf565b9350611b7b6101008d01611ae4565b92506101208c013591506101408c013590509295989b509295989b9093969950565b6000806000806000806000806000806101408b8d031215611bbd57600080fd5b8a35611bc8816118d1565b995060208b0135985060408b0135975060608b0135965060808b0135611bed816118d1565b955060a08b01359450611c0260c08c01611acf565b9350611c1060e08c01611ae4565b92506101008b013591506101208b013590509295989b9194979a5092959850565b600080600080600060808688031215611c4957600080fd5b85359450602086013567ffffffffffffffff811115611c6757600080fd5b611c7388828901611980565b9095509350506040860135611c87816118d1565b949793965091946060013592915050565b600080600080600080600060e0888a031215611cb357600080fd5b8735611cbe816118d1565b96506020880135611cce816118d1565b955060408801359450606088013593506080880135925060a0880135611cf3816118d1565b8092505060c0880135905092959891949750929550565b60008060008060608587031215611d2057600080fd5b84359350602085013567ffffffffffffffff811115611d3e57600080fd5b611d4a87828801611980565b9598909750949560400135949350505050565b6020810160118310611d98577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b600080600080600080600080610100898b031215611dbb57600080fd5b8835611dc6816118d1565b97506020890135611dd6816118d1565b965060408901359550606089013594506080890135935060a0890135925060c0890135611e02816118d1565b8092505060e089013590509295985092959890939650565b600060208284031215611e2c57600080fd5b5051919050565b8183526000602080850194508260005b85811015611e7e578135611e56816118d1565b73ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101611e43565b509495945050505050565b838152604060208201526000611ea3604083018486611e33565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611f2257611f22611eac565b604052919050565b60006020808385031215611f3d57600080fd5b825167ffffffffffffffff80821115611f5557600080fd5b818501915085601f830112611f6957600080fd5b815181811115611f7b57611f7b611eac565b8060051b9150611f8c848301611edb565b8181529183018401918481019088841115611fa657600080fd5b938501935b83851015611fc457845182529385019390850190611fab565b98975050505050505050565b600060208284031215611fe257600080fd5b8151611fed816118d1565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561203557600080fd5b8135611fed816118d1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561208157612081612040565b500390565b86815285602082015260a0604082015260006120a660a083018688611e33565b73ffffffffffffffffffffffffffffffffffffffff9490941660608301525060800152949350505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561210957612109612040565b500290565b600082612144577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b8381101561216457818101518382015260200161214c565b83811115612173576000848401525b50505050565b600073ffffffffffffffffffffffffffffffffffffffff80861683528085166020840152506060604083015282518060608401526121be816080850160208701612149565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01691909101608001949350505050565b60006020828403121561220457600080fd5b815167ffffffffffffffff8082111561221c57600080fd5b818401915084601f83011261223057600080fd5b81518181111561224257612242611eac565b61227360207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611edb565b915080825285602082850101111561228a57600080fd5b61229b816020840160208601612149565b5094935050505056fea2646970667358221220eb17abe05eeba3a20acf423d9c0b916f7c22eba6424cd918d18ad2a760eea1ba64736f6c634300080a0033608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611a018061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c8063715018a61161005b578063715018a6146100f45780638da5cb5b146100fc578063d7aa2e3514610124578063f2fde38b1461015557600080fd5b80631bf64c411461008d57806345330666146100b657806354fd4d50146100cb5780636f33547d146100e1575b600080fd5b6100a061009b366004611436565b610168565b6040516100ad919061158a565b60405180910390f35b6100c96100c43660046115f9565b61027d565b005b6100d3600281565b6040519081526020016100ad565b6100a06100ef366004611436565b61035a565b6100c9610514565b60005460405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100ad565b6100d361013236600461164a565b600160209081526000938452604080852082529284528284209052825290205481565b6100c9610163366004611695565b6105a1565b6101a56040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b6040805160028082526060820183526000926020830190803683370190505090508360400151816000815181106101de576101de6116b9565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050836060015181600181518110610230576102306116b9565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506102758484836106d1565b949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610303576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff93841660009081526001602090815260408083209587168084528683528184209590971683529381528382208390559384528281209481529390925290912055565b6103976040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b60808381015151604080516003808252938101909152909160009190602082016060803683370190505090508460400151816000815181106103db576103db6116b9565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505084606001518160028151811061042d5761042d6116b9565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060005b8281101561050b5785608001518181518110610488576104886116b9565b6020026020010151826001815181106104a3576104a36116b9565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060006104ea8787856106d1565b90506104f98188876000610aa7565b15610502578094505b5060010161046a565b50505092915050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610595576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102fa565b61059f6000610ac3565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610622576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102fa565b73ffffffffffffffffffffffffffffffffffffffff81166106c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102fa565b6106ce81610ac3565b50565b61070e6040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b600061071985610b38565b1561080a5760a08501516040517fd06ca61f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86169163d06ca61f9161077691908790600401611739565b600060405180830381865afa9250505080156107d257506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526107cf9190810190611752565b60015b6107db576108e6565b80600182516107ea9190611812565b815181106107fa576107fa6116b9565b60200260200101519150506108e6565b60a08501516040517f1f00ca7400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff861691631f00ca749161086291908790600401611739565b600060405180830381865afa9250505080156108be57506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108bb9190810190611752565b60015b6108c7576108e6565b806000815181106108da576108da6116b9565b60200260200101519150505b8015610a9f57602082018190526001604083015261090685858584610bd1565b826000018190525060008473ffffffffffffffffffffffffffffffffffffffff1663bd90df706040518163ffffffff1660e01b8152600401602060405180830381865afa15801561095b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097f9190611829565b90506000600185516109919190611812565b905060005b81811015610a9b5773ffffffffffffffffffffffffffffffffffffffff8316600090815260016020526040812087519091908890849081106109da576109da6116b9565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600087836001610a2c9190611846565b81518110610a3c57610a3c6116b9565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205485606001818151610a909190611846565b905250600101610996565b5050505b509392505050565b6000610aba858585866060015186610e3c565b95945050505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008082516002811115610b4e57610b4e61185e565b1480610b6c5750600182516002811115610b6a57610b6a61185e565b145b15610b7957506001919050565b600282516002811115610b8e57610b8e61185e565b1415610b9c57506000919050565b81516040517ffe7995cf0000000000000000000000000000000000000000000000000000000081526102fa919060040161188d565b604080518082019091526000815260606020820152600185516002811115610bfb57610bfb61185e565b1415610cf8576040805180820190915273ffffffffffffffffffffffffffffffffffffffff85168152602081017fbdbeaa3100000000000000000000000000000000000000000000000000000000610c538886610f56565b86610c6042610e10611846565b604051602401610c72939291906118ce565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290529050610275565b600085516002811115610d0d57610d0d61185e565b1415610d93576040805180820190915273ffffffffffffffffffffffffffffffffffffffff8516815260a086015160208201907f38ed17390000000000000000000000000000000000000000000000000000000090610d6c8987610f90565b60208a01518890610d7f42610e10611846565b604051602401610c729594939291906118f7565b600285516002811115610da857610da861185e565b1415610e07576040805180820190915273ffffffffffffffffffffffffffffffffffffffff8516815260a086015160208201907f8803dbee0000000000000000000000000000000000000000000000000000000090610d6c8987610f90565b84516040517ffe7995cf0000000000000000000000000000000000000000000000000000000081526102fa919060040161188d565b60008560400151610e4f57506000610aba565b8360400151610e6057506001610aba565b6000610ebd8688602001516b033b2e3c9fd0803ce8000000868b60600151610e889190611940565b610e92919061197d565b60208901516b033b2e3c9fd0803ce8000000610eae898b611940565b610eb8919061197d565b611077565b9050600086516002811115610ed457610ed461185e565b1480610ef25750600186516002811115610ef057610ef061185e565b145b15610efe579050610aba565b600286516002811115610f1357610f1361185e565b1415610f2157159050610aba565b85516040517ffe7995cf0000000000000000000000000000000000000000000000000000000081526102fa919060040161188d565b60a0820151600090610f7d84610f78856b033b2e3c9fd0803ce8000000611940565b610f90565b610f87919061197d565b90505b92915050565b60008260e0015115610fa457506000610f8a565b600083516002811115610fb957610fb961185e565b1480610fd75750600183516002811115610fd557610fd561185e565b145b1561100a5760c083015161271090610fef9082611812565b610ff99084611940565b611003919061197d565b9050610f8a565b60028351600281111561101f5761101f61185e565b14156110425760c083015161103690612710611846565b610ff961271084611940565b82516040517ffe7995cf0000000000000000000000000000000000000000000000000000000081526102fa919060040161188d565b60006110b76040518060400160405280600c81526020017f414141202d20616d6f756e740000000000000000000000000000000000000000815250611168565b6110c0856111f7565b6110c9846111f7565b6110d2836111f7565b6110db826111f7565b6110ed6110e88587611812565b6111f7565b6110fa6110e88385611812565b61110386610b38565b611124576111118284611846565b61111b8587611846565b10159050610aba565b8385101580156111345750818310155b1561114d576111438284611812565b61111b8587611812565b83851061115b57600161115e565b60005b9695505050505050565b6106ce8160405160240161117c91906119b8565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f41304fac00000000000000000000000000000000000000000000000000000000179052611284565b6106ce8160405160240161120d91815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff5b1bba9000000000000000000000000000000000000000000000000000000001790525b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610100810167ffffffffffffffff811182821017156112f8576112f86112a5565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611345576113456112a5565b604052919050565b80356003811061135c57600080fd5b919050565b73ffffffffffffffffffffffffffffffffffffffff811681146106ce57600080fd5b803561135c81611361565b600067ffffffffffffffff8211156113a8576113a86112a5565b5060051b60200190565b600082601f8301126113c357600080fd5b813560206113d86113d38361138e565b6112fe565b82815260059290921b840181019181810190868411156113f757600080fd5b8286015b8481101561141b57803561140e81611361565b83529183019183016113fb565b509695505050505050565b8035801515811461135c57600080fd5b6000806040838503121561144957600080fd5b823567ffffffffffffffff8082111561146157600080fd5b90840190610100828703121561147657600080fd5b61147e6112d4565b6114878361134d565b815261149560208401611383565b60208201526114a660408401611383565b60408201526114b760608401611383565b60608201526080830135828111156114ce57600080fd5b6114da888286016113b2565b60808301525060a083013560a082015260c083013560c082015261150060e08401611426565b60e0820152935061151691505060208401611383565b90509250929050565b6000815180845260005b8181101561154557602081850181015186830182015201611529565b81811115611557576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208082528251608083830152805173ffffffffffffffffffffffffffffffffffffffff1660a08401520151604060c08301526000906115cd60e084018261151f565b905060208401516040840152604084015115156060840152606084015160808401528091505092915050565b6000806000806080858703121561160f57600080fd5b843561161a81611361565b9350602085013561162a81611361565b9250604085013561163a81611361565b9396929550929360600135925050565b60008060006060848603121561165f57600080fd5b833561166a81611361565b9250602084013561167a81611361565b9150604084013561168a81611361565b809150509250925092565b6000602082840312156116a757600080fd5b81356116b281611361565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081518084526020808501945080840160005b8381101561172e57815173ffffffffffffffffffffffffffffffffffffffff16875295820195908201906001016116fc565b509495945050505050565b82815260406020820152600061027560408301846116e8565b6000602080838503121561176557600080fd5b825167ffffffffffffffff81111561177c57600080fd5b8301601f8101851361178d57600080fd5b805161179b6113d38261138e565b81815260059190911b820183019083810190878311156117ba57600080fd5b928401925b828410156117d8578351825292840192908401906117bf565b979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015611824576118246117e3565b500390565b60006020828403121561183b57600080fd5b81516116b281611361565b60008219821115611859576118596117e3565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60208101600383106118c8577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b8381526060602082015260006118e760608301856116e8565b9050826040830152949350505050565b85815284602082015260a06040820152600061191660a08301866116e8565b73ffffffffffffffffffffffffffffffffffffffff94909416606083015250608001529392505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611978576119786117e3565b500290565b6000826119b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b602081526000610f87602083018461151f56fea2646970667358221220042a62b4d425a2205fa828887bf063a55ef88bc4c19cee1e98235c23b32ccdf764736f6c634300080a003360a06040523480156200001157600080fd5b50604051620021d0380380620021d08339810160408190526200003491620002f9565b806001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000073573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200009d919081019062000374565b604051602001620000af91906200042c565b604051602081830303815290604052816001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015620000fd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000127919081019062000374565b6040516020016200013991906200045c565b60408051601f1981840301815291905281516200015e90600390602085019062000253565b5080516200017490600490602084019062000253565b505050620001916200018b620001f860201b60201c565b620001fc565b600680546001600160a01b0319166001600160a01b038316179055620001c26200024e602090811b62000b9817901c565b620001cf90600a6200059d565b608081905260075550336000908152600860205260409020805460ff19166001179055620005eb565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b601290565b8280546200026190620005ae565b90600052602060002090601f016020900481019282620002855760008555620002d0565b82601f10620002a057805160ff1916838001178555620002d0565b82800160010185558215620002d0579182015b82811115620002d0578251825591602001919060010190620002b3565b50620002de929150620002e2565b5090565b5b80821115620002de5760008155600101620002e3565b6000602082840312156200030c57600080fd5b81516001600160a01b03811681146200032457600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200035e57818101518382015260200162000344565b838111156200036e576000848401525b50505050565b6000602082840312156200038757600080fd5b81516001600160401b03808211156200039f57600080fd5b818401915084601f830112620003b457600080fd5b815181811115620003c957620003c96200032b565b604051601f8201601f19908116603f01168101908382118183101715620003f457620003f46200032b565b816040528281528760208487010111156200040e57600080fd5b6200042183602083016020880162000341565b979650505050505050565b6503cb2b0b937160d51b8152600082516200044f81600685016020870162000341565b9190910160060192915050565b613cbb60f11b8152600082516200047b81600285016020870162000341565b9190910160020192915050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620004df578160001904821115620004c357620004c362000488565b80851615620004d157918102915b93841c9390800290620004a3565b509250929050565b600082620004f85750600162000597565b81620005075750600062000597565b81600181146200052057600281146200052b576200054b565b600191505062000597565b60ff8411156200053f576200053f62000488565b50506001821b62000597565b5060208310610133831016604e8410600b841016171562000570575081810a62000597565b6200057c83836200049e565b806000190482111562000593576200059362000488565b0290505b92915050565b60006200032460ff841683620004e7565b600181811c90821680620005c357607f821691505b60208210811415620005e557634e487b7160e01b600052602260045260246000fd5b50919050565b608051611bc26200060e6000396000818161073601526109a00152611bc26000f3fe608060405234801561001057600080fd5b50600436106101ad5760003560e01c806370a08231116100ee578063a9059cbb11610097578063dd62ed3e11610071578063dd62ed3e14610395578063e63697c8146103db578063f2fde38b146103ee578063fc0c546a1461040157600080fd5b8063a9059cbb14610367578063b6b55f251461037a578063d0e30db01461038d57600080fd5b806395d89b41116100c857806395d89b411461034357806399530b061461034b578063a457c2d71461035457600080fd5b806370a08231146102c6578063715018a6146102fc5780638da5cb5b1461030457600080fd5b80632e1a7d4d1161015b5780633ccfd60b116101355780633ccfd60b1461027557806343d24a5e1461027d57806354a055c1146102905780636e553f65146102b357600080fd5b80632e1a7d4d14610240578063313ce56714610253578063395093511461026257600080fd5b8063118c9a071161018c578063118c9a071461021057806318160ddd1461022557806323b872dd1461022d57600080fd5b8062f714ce146101b257806306fdde03146101d8578063095ea7b3146101ed575b600080fd5b6101c56101c0366004611879565b610421565b6040519081526020015b60405180910390f35b6101e0610438565b6040516101cf91906118d1565b6102006101fb366004611922565b610447565b60405190151581526020016101cf565b61022361021e36600461194c565b61045d565b005b6002546101c5565b61020061023b366004611965565b6104e0565b6101c561024e36600461194c565b6105c8565b604051601281526020016101cf565b610200610270366004611922565b6105d4565b6101c561061d565b61022361028b3660046119a1565b610636565b61020061029e3660046119a1565b60086020526000908152604090205460ff1681565b6101c56102c1366004611879565b610706565b6101c56102d43660046119a1565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610223610771565b60055473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101cf565b6101e06107fe565b6101c560075481565b610200610362366004611922565b610808565b610200610375366004611922565b6108e0565b6101c561038836600461194c565b6108ed565b6101c56108f9565b6101c56103a33660046119bc565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101c56103e93660046119e6565b610992565b6102236103fc3660046119a1565b610a68565b60065461031e9073ffffffffffffffffffffffffffffffffffffffff1681565b600061042f83836001610992565b90505b92915050565b6060610442610b9d565b905090565b6000610454338484610c2f565b50600192915050565b3360009081526008602052604090205460ff166104db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f666f72207570646174657273206f6e6c7900000000000000000000000000000060448201526064015b60405180910390fd5b600755565b60006104ed848484610de3565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600160209081526040808320338452909152902054828110156105ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084016104d2565b6105bb8533858403610c2f565b60019150505b9392505050565b60006104328233610421565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091610454918590610618908690611a3a565b610c2f565b33600090815260208190526040812054610442906105c8565b60055473ffffffffffffffffffffffffffffffffffffffff1633146106b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104d2565b73ffffffffffffffffffffffffffffffffffffffff16600090815260086020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b60065460009061072e9073ffffffffffffffffffffffffffffffffffffffff16333086611098565b60075461075b7f000000000000000000000000000000000000000000000000000000000000000085611a52565b6107659190611a8f565b90506104328282611174565b60055473ffffffffffffffffffffffffffffffffffffffff1633146107f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104d2565b6107fc6000611294565b565b606061044261130b565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156108c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084016104d2565b6108d63385858403610c2f565b5060019392505050565b6000610454338484610de3565b60006104328233610706565b6006546040517f70a082310000000000000000000000000000000000000000000000000000000081523360048201526000916104429173ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa15801561096e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103889190611aca565b600061099e338561131a565b7f0000000000000000000000000000000000000000000000000000000000000000600754856109cd9190611a52565b6109d79190611a8f565b90506001821115610a44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4c6f737320746f6f20626967000000000000000000000000000000000000000060448201526064016104d2565b6006546105c19073ffffffffffffffffffffffffffffffffffffffff163383611504565b60055473ffffffffffffffffffffffffffffffffffffffff163314610ae9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104d2565b73ffffffffffffffffffffffffffffffffffffffff8116610b8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016104d2565b610b9581611294565b50565b601290565b606060038054610bac90611ae3565b80601f0160208091040260200160405190810160405280929190818152602001828054610bd890611ae3565b8015610c255780601f10610bfa57610100808354040283529160200191610c25565b820191906000526020600020905b815481529060010190602001808311610c0857829003601f168201915b5050505050905090565b73ffffffffffffffffffffffffffffffffffffffff8316610cd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016104d2565b73ffffffffffffffffffffffffffffffffffffffff8216610d74576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f737300000000000000000000000000000000000000000000000000000000000060648201526084016104d2565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610e86576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016104d2565b73ffffffffffffffffffffffffffffffffffffffff8216610f29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016104d2565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610fdf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e6365000000000000000000000000000000000000000000000000000060648201526084016104d2565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290611023908490611a3a565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161108991815260200190565b60405180910390a35b50505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526110929085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261155a565b73ffffffffffffffffffffffffffffffffffffffff82166111f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104d2565b80600260008282546112039190611a3a565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152602081905260408120805483929061123d908490611a3a565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b606060048054610bac90611ae3565b73ffffffffffffffffffffffffffffffffffffffff82166113bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f730000000000000000000000000000000000000000000000000000000000000060648201526084016104d2565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611473576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f636500000000000000000000000000000000000000000000000000000000000060648201526084016104d2565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906114af908490611b37565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610dd6565b505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526114ff9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016110f2565b60006115bc826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166116669092919063ffffffff16565b8051909150156114ff57808060200190518101906115da9190611b4e565b6114ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016104d2565b6060611675848460008561167d565b949350505050565b60608247101561170f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016104d2565b843b611777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016104d2565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516117a09190611b70565b60006040518083038185875af1925050503d80600081146117dd576040519150601f19603f3d011682016040523d82523d6000602084013e6117e2565b606091505b50915091506117f28282866117fd565b979650505050505050565b6060831561180c5750816105c1565b82511561181c5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d291906118d1565b803573ffffffffffffffffffffffffffffffffffffffff8116811461187457600080fd5b919050565b6000806040838503121561188c57600080fd5b8235915061189c60208401611850565b90509250929050565b60005b838110156118c05781810151838201526020016118a8565b838111156110925750506000910152565b60208152600082518060208401526118f08160408501602087016118a5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806040838503121561193557600080fd5b61193e83611850565b946020939093013593505050565b60006020828403121561195e57600080fd5b5035919050565b60008060006060848603121561197a57600080fd5b61198384611850565b925061199160208501611850565b9150604084013590509250925092565b6000602082840312156119b357600080fd5b61042f82611850565b600080604083850312156119cf57600080fd5b6119d883611850565b915061189c60208401611850565b6000806000606084860312156119fb57600080fd5b8335925061199160208501611850565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611a4d57611a4d611a0b565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611a8a57611a8a611a0b565b500290565b600082611ac5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600060208284031215611adc57600080fd5b5051919050565b600181811c90821680611af757607f821691505b60208210811415611b31577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600082821015611b4957611b49611a0b565b500390565b600060208284031215611b6057600080fd5b815180151581146105c157600080fd5b60008251611b828184602087016118a5565b919091019291505056fea2646970667358221220dd6ab68a357bcb22f83ca9169f71d50eab420f577d6615614a08c2ea63f4ce2f64736f6c634300080a00336101206040523480156200001257600080fd5b506040516200171738038062001717833981016040819052620000359162000453565b8260c86001600160a01b0384166200005d5760405180602001604052806000815250620000e8565b836001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200009c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620000c69190810190620004e6565b604051602001620000d891906200059e565b6040516020818303038152906040525b6000805460ff19169055826001600160a01b0381166200011b57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200015a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001809190620005ce565b6001600160a01b0316608052508051620001a290600290602084019062000390565b505060a052506001600160a01b0382161580620001c657506001600160a01b038116155b15620001e557604051635919af9760e11b815260040160405180910390fd5b6001600160a01b0380831660e081905290821660c0526040805163313ce56760e01b8152905163313ce567916004808201926020929091908290030181865afa15801562000237573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025d9190620005f3565b6200026a90600a6200072b565b61010081815250506000826001600160a01b03166399530b066040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002b3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d991906200073c565b9050620002e681620002f0565b50505050620007f3565b806200030f576040516309aadd6f60e41b815260040160405180910390fd5b60018190557f82e7ee47180a631312683eeb2a85ad264c9af490d54de5a75bbdb95b968c6de28162000341816200035c565b6040805192835260208301919091520160405180910390a150565b60a0516000906127109062000372908262000756565b6200037e908462000771565b6200038a919062000793565b92915050565b8280546200039e90620007b6565b90600052602060002090601f016020900481019282620003c257600085556200040d565b82601f10620003dd57805160ff19168380011785556200040d565b828001600101855582156200040d579182015b828111156200040d578251825591602001919060010190620003f0565b506200041b9291506200041f565b5090565b5b808211156200041b576000815560010162000420565b80516001600160a01b03811681146200044e57600080fd5b919050565b6000806000606084860312156200046957600080fd5b620004748462000436565b9250620004846020850162000436565b9150620004946040850162000436565b90509250925092565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620004d0578181015183820152602001620004b6565b83811115620004e0576000848401525b50505050565b600060208284031215620004f957600080fd5b81516001600160401b03808211156200051157600080fd5b818401915084601f8301126200052657600080fd5b8151818111156200053b576200053b6200049d565b604051601f8201601f19908116603f011681019083821181831017156200056657620005666200049d565b816040528281528760208487010111156200058057600080fd5b62000593836020830160208801620004b3565b979650505050505050565b60008251620005b2818460208701620004b3565b69081c1c9a58d95199595960b21b920191825250600a01919050565b600060208284031215620005e157600080fd5b620005ec8262000436565b9392505050565b6000602082840312156200060657600080fd5b815160ff81168114620005ec57600080fd5b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200066f57816000190482111562000653576200065362000618565b808516156200066157918102915b93841c939080029062000633565b509250929050565b60008262000688575060016200038a565b8162000697575060006200038a565b8160018114620006b05760028114620006bb57620006db565b60019150506200038a565b60ff841115620006cf57620006cf62000618565b50506001821b6200038a565b5060208310610133831016604e8410600b841016171562000700575081810a6200038a565b6200070c83836200062e565b806000190482111562000723576200072362000618565b029392505050565b6000620005ec60ff84168362000677565b6000602082840312156200074f57600080fd5b5051919050565b600082198211156200076c576200076c62000618565b500190565b60008160001904831182151516156200078e576200078e62000618565b500290565b600082620007b157634e487b7160e01b600052601260045260246000fd5b500490565b600181811c90821680620007cb57607f821691505b60208210811415620007ed57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c05160e05161010051610eae62000869600039600081816102dc015261081c015260008181610194015261078001526000818161023301526106d70152600081816101400152610a090152600081816102b501528181610357015281816104d3015261060b0152610eae6000f3fe608060405234801561001057600080fd5b50600436106101365760003560e01c80638456cb59116100b2578063a834559e11610081578063bc489a6511610066578063bc489a6514610306578063d62ada1114610319578063feaf968c1461032157600080fd5b8063a834559e146102d7578063b09ad8a0146102fe57600080fd5b80638456cb59146102555780639a6fc8f51461025d578063a384d6ff146102a7578063a50cf2c8146102b057600080fd5b80633fd0875f116101095780635c975abb116100ee5780635c975abb146102025780637284e41614610219578063741bef1a1461022e57600080fd5b80633fd0875f146101e557806354fd4d50146101fa57600080fd5b806312b495a81461013b578063313ce5671461017557806333303f8e1461018f5780633f4ba83a146101db575b600080fd5b6101627f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b61017d600881565b60405160ff909116815260200161016c565b6101b67f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016c565b6101e3610329565b005b6101ed600181565b60405161016c9190610bc9565b610162600281565b60005460ff165b604051901515815260200161016c565b610221610417565b60405161016c9190610c0a565b6101b67f000000000000000000000000000000000000000000000000000000000000000081565b6101e36104a5565b61027061026b366004610c95565b610591565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a00161016c565b61016260015481565b6101b67f000000000000000000000000000000000000000000000000000000000000000081565b6101627f000000000000000000000000000000000000000000000000000000000000000081565b6101626105cb565b6101e3610314366004610cb9565b6105dd565b610209600181565b6102706106cd565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156103b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103d79190610cd2565b61040d576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610415610859565b565b6002805461042490610cf4565b80601f016020809104026020016040519081016040528092919081815260200182805461045090610cf4565b801561049d5780601f106104725761010080835404028352916020019161049d565b820191906000526020600020905b81548152906001019060200180831161048057829003601f168201915b505050505081565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561052f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105539190610cd2565b610589576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61041561093f565b60008060008060006040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006105d86001546109ff565b905090565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610667573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068b9190610cd2565b6106c1576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106ca81610a48565b50565b60008060008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610740573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107649190610d48565b93985091965094509250905061077c85858484610aca565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166399530b066040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080d9190610da0565b905061081881610b65565b90507f00000000000000000000000000000000000000000000000000000000000000006108458683610de8565b61084f9190610e25565b9450509091929394565b60005460ff166108ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff16156109ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016108c1565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586109153390565b6000612710610a2e7f000000000000000000000000000000000000000000000000000000000000000082610e60565b610a389084610de8565b610a429190610e25565b92915050565b80610a7f576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190557f82e7ee47180a631312683eeb2a85ad264c9af490d54de5a75bbdb95b968c6de281610aaf816109ff565b6040805192835260208301919091520160405180910390a150565b60008313610b04576040517f56e05d2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8369ffffffffffffffffffff168169ffffffffffffffffffff161080610b28575081155b15610b5f576040517fb1cf675500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60015460009080831015610ba5576040517fb416da7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610bb0826109ff565b905080841115610bc1579392505050565b509192915050565b6020810160068310610c04577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b600060208083528351808285015260005b81811015610c3757858101830151858201604001528201610c1b565b81811115610c49576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b69ffffffffffffffffffff811681146106ca57600080fd5b600060208284031215610ca757600080fd5b8135610cb281610c7d565b9392505050565b600060208284031215610ccb57600080fd5b5035919050565b600060208284031215610ce457600080fd5b81518015158114610cb257600080fd5b600181811c90821680610d0857607f821691505b60208210811415610d42577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600080600080600060a08688031215610d6057600080fd5b8551610d6b81610c7d565b809550506020860151935060408601519250606086015191506080860151610d9281610c7d565b809150509295509295909350565b600060208284031215610db257600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610e2057610e20610db9565b500290565b600082610e5b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60008219821115610e7357610e73610db9565b50019056fea264697066735822122033f071fae3fea6aa014d596b65f986292bf0f88262db5a9aebc2674ec8efeeea64736f6c634300080a00336101006040523480156200001257600080fd5b50604051620023d6380380620023d68339810160408190526200003591620002cd565b81816001600160a01b03821615806200005557506001600160a01b038116155b156200007457604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038216608081905260408051632f7a188160e01b81529051632f7a1881916004808201926020929091908290030181865afa158015620000bf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e5919062000305565b6001600160a01b0390811660a0521660c0819052600160005560408051637e062a3560e11b8152905191925063fc0c546a9160048083019260209291908290030181865afa1580156200013c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000162919062000305565b6001600160a01b0390811660e0819052608051604051630f67c5bd60e41b815260048101929092529091169063f67c5bd090602401602060405180830381865afa158015620001b5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001db91906200032a565b6200020d5760e051604051634c607af960e11b81526001600160a01b0390911660048201526024015b60405180910390fd5b608051604051630f67c5bd60e41b81526001600160a01b0383811660048301529091169063f67c5bd090602401602060405180830381865afa15801562000258573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200027e91906200032a565b620002a857604051634c607af960e11b81526001600160a01b038216600482015260240162000204565b505062000344565b80516001600160a01b0381168114620002c857600080fd5b919050565b60008060408385031215620002e157600080fd5b620002ec83620002b0565b9150620002fc60208401620002b0565b90509250929050565b6000602082840312156200031857600080fd5b6200032382620002b0565b9392505050565b6000602082840312156200033d57600080fd5b5051919050565b60805160a05160c05160e051611f71620004656000396000818161038c01528181610f7301528181611224015281816112f701526114220152600081816102fb015281816104f6015281816105ae0152818161077d0152818161097901528181610b8501528181610bfc01528181610c69015281816110480152818161120301528181611318015281816114000152818161167101528181611790015261186a015260008181610229015281816114dc015261193001526000818161032201528181610457015281816106df015281816108ae01528181610aaf01528181610d7601528181610ea801528181611160015281816116c701528181611761015281816118a1015281816119b801528181611a6c0152611b160152611f716000f3fe608060405234801561001057600080fd5b506004361061018c5760003560e01c806378aa73a4116100e3578063c12c21c01161008c578063dd62ed3e11610066578063dd62ed3e14610361578063e63697c814610374578063fc0c546a1461038757600080fd5b8063c12c21c01461031d578063ce30bbdb14610344578063d0e30db01461035957600080fd5b8063a9059cbb116100bd578063a9059cbb146101cc578063b6b55f25146102e3578063bd90df70146102f657600080fd5b806378aa73a4146102b857806395d89b41146102d357806399530b06146102db57600080fd5b80632e1a7d4d116101455780633ccfd60b1161011f5780633ccfd60b1461028a5780636e553f651461029257806370a08231146102a557600080fd5b80632e1a7d4d146102115780632f7a188114610224578063313ce5671461027057600080fd5b8063095ea7b311610176578063095ea7b3146101cc57806318160ddd146101f257806323b872dd146101fa57600080fd5b8062f714ce1461019157806306fdde03146101b7575b600080fd5b6101a461019f366004611ba0565b6103ae565b6040519081526020015b60405180910390f35b6101bf6104f2565b6040516101ae9190611c4a565b6101e26101da366004611c5d565b600092915050565b60405190151581526020016101ae565b6101a46105aa565b6101e2610208366004611c89565b60009392505050565b6101a461021f366004611cca565b61063b565b61024b7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101ae565b610278610779565b60405160ff90911681526020016101ae565b6101a461080a565b6101a46102a0366004611ba0565b610a0b565b6101a46102b3366004611ce3565b610b3d565b6102c0600281565b60405161ffff90911681526020016101ae565b6101bf610bf8565b6101a4610c65565b6101a46102f1366004611cca565b610cd2565b61024b7f000000000000000000000000000000000000000000000000000000000000000081565b61024b7f000000000000000000000000000000000000000000000000000000000000000081565b61034c600481565b6040516101ae9190611d00565b6101a4610e04565b6101a461036f366004611d41565b610ff8565b6101a4610382366004611d6f565b6110bc565b61024b7f000000000000000000000000000000000000000000000000000000000000000081565b600060026000541415610422576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156104b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104d79190611d96565b90506104e5818560006111fb565b6001600055949350505050565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801561055f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526105a59190810190611e74565b905090565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610617573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a59190611ebd565b6000600260005414156106aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610419565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa15801561073b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075f9190611d96565b905061076d818460006111fb565b60016000559392505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a59190611ed6565b600060026000541415610879576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610419565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa15801561090a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092e9190611d96565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000917f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa1580156109c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e49190611ebd565b90506001811115610a01576109fe826001830360016111fb565b92505b5050600160005590565b600060026000541415610a7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610419565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610b0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2f9190611d96565b90506104e5818560006112ef565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015610bce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf29190611ebd565b92915050565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801561055f573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166399530b066040518163ffffffff1660e01b8152600401602060405180830381865afa158015610617573d6000803e3d6000fd5b600060026000541415610d41576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610419565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610dd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df69190611d96565b905061076d818460006112ef565b600060026000541415610e73576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610419565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610f04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f289190611d96565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000917f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015610fba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fde9190611ebd565b90506001811115610a01576109fe826001830360016112ef565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063dd62ed3e90604401602060405180830381865afa158015611091573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b59190611ebd565b9392505050565b60006002600054141561112b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610419565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156111bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e09190611d96565b90506111ed8186856113c8565b600160005595945050505050565b60006112d4847f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008660405160240161125691815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f2e1a7d4d000000000000000000000000000000000000000000000000000000001790526000876114bf565b8060200190518101906112e79190611ebd565b949350505050565b60006112d4847f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008660405160240161134a91815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fb6b55f25000000000000000000000000000000000000000000000000000000001790526001876114bf565b6040516024810183905273ffffffffffffffffffffffffffffffffffffffff84166044820152606481018290526000906112d49085907f0000000000000000000000000000000000000000000000000000000000000000907f000000000000000000000000000000000000000000000000000000000000000090608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe63697c8000000000000000000000000000000000000000000000000000000001790526000805b60606000803373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614611628576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301528916906370a0823190602401602060405180830381865afa15801561156d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115919190611ebd565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152919350908816906370a0823190602401602060405180830381865afa158015611601573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116259190611ebd565b90505b8415611724576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561170b57600080fd5b505af115801561171f573d6000803e3d6000fd5b505050505b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a906117ba9033907f0000000000000000000000000000000000000000000000000000000000000000908b90600401611ef9565b6000604051808303816000875af11580156117d9573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261181f9190810190611e74565b925084156118fe576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301528981166044830152600160648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156118e557600080fd5b505af11580156118f9573d6000803e3d6000fd5b505050505b61190c898989858589611918565b50509695505050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614611a19576040517f654a9eda00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528681166024830152858116604483015260648201859052608482018490527f0000000000000000000000000000000000000000000000000000000000000000169063654a9eda9060a401600060405180830381600087803b1580156119fc57600080fd5b505af1158015611a10573d6000803e3d6000fd5b50505050611b73565b8015611ac9576040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015286811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b158015611ab057600080fd5b505af1158015611ac4573d6000803e3d6000fd5b505050505b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015285811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b158015611b5a57600080fd5b505af1158015611b6e573d6000803e3d6000fd5b505050505b505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114611b9d57600080fd5b50565b60008060408385031215611bb357600080fd5b823591506020830135611bc581611b7b565b809150509250929050565b60005b83811015611beb578181015183820152602001611bd3565b83811115611bfa576000848401525b50505050565b60008151808452611c18816020860160208601611bd0565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006110b56020830184611c00565b60008060408385031215611c7057600080fd5b8235611c7b81611b7b565b946020939093013593505050565b600080600060608486031215611c9e57600080fd5b8335611ca981611b7b565b92506020840135611cb981611b7b565b929592945050506040919091013590565b600060208284031215611cdc57600080fd5b5035919050565b600060208284031215611cf557600080fd5b81356110b581611b7b565b6020810160118310611d3b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60008060408385031215611d5457600080fd5b8235611d5f81611b7b565b91506020830135611bc581611b7b565b600080600060608486031215611d8457600080fd5b833592506020840135611cb981611b7b565b600060208284031215611da857600080fd5b81516110b581611b7b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff80841115611dfd57611dfd611db3565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611e4357611e43611db3565b81604052809350858152868686011115611e5c57600080fd5b611e6a866020830187611bd0565b5050509392505050565b600060208284031215611e8657600080fd5b815167ffffffffffffffff811115611e9d57600080fd5b8201601f81018413611eae57600080fd5b6112e784825160208401611de2565b600060208284031215611ecf57600080fd5b5051919050565b600060208284031215611ee857600080fd5b815160ff811681146110b557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff808616835280851660208401525060606040830152611f326060830184611c00565b9594505050505056fea2646970667358221220aecb71ead328fdb83f4bc503b07a4f5985eda47bcbdf6a22bcbbd3dee47273b064736f6c634300080a003360806040526000805460ff1916600117905534801561001d57600080fd5b50611be18061002d6000396000f3fe6080604052600436106100d25760003560e01c8063ba414fa61161007f578063db3e219811610059578063db3e219814610215578063f28c049814610228578063f7729d431461023b578063fa7626d41461025b57600080fd5b8063ba414fa6146101bd578063c04b8d59146101e2578063cdca1753146101f557600080fd5b8063414bf389116100b0578063414bf3891461014c57806347485d2a1461015f5780635911fb9a1461019d57600080fd5b80632ccbc99b146100d75780632f80bb1d146100f957806330d07f211461012c575b600080fd5b3480156100e357600080fd5b506100f76100f2366004611672565b610275565b005b34801561010557600080fd5b506101196101143660046116f0565b61031f565b6040519081526020015b60405180910390f35b34801561013857600080fd5b506101196101473660046117c3565b610468565b61011961015a366004611842565b610566565b34801561016b57600080fd5b5061011961017a36600461185f565b600160209081526000938452604080852082529284528284209052825290205481565b3480156101a957600080fd5b506100f76101b83660046118a6565b6106b5565b3480156101c957600080fd5b506101d26106c8565b6040519015158152602001610123565b6101196101f03660046118f9565b610826565b34801561020157600080fd5b506101196102103660046116f0565b6109b5565b610119610223366004611842565b610af1565b6101196102363660046118f9565b610c00565b34801561024757600080fd5b506101196102563660046117c3565b610d4e565b34801561026757600080fd5b506000546101d29060ff1681565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160209081526040808320938716835292815282822062ffffff86168352905220819055806102ce6b033b2e3c9fd0803ce80000008061195d565b6102d8919061199a565b73ffffffffffffffffffffffffffffffffffffffff938416600090815260016020908152604080832097909616825295865284812062ffffff909416815292909452502055565b805b600361032f6014600261195d565b61033991906119d5565b83511061046257600080600061034e86610e35565b73ffffffffffffffffffffffffffffffffffffffff8083166000908152600160209081526040808320938716835292815282822062ffffff8516835290522054929550909350915080610402576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f556e697377617056334d6f636b3a2052617465206973206e6f7420736574757060448201526064015b60405180910390fd5b61041462ffffff8316620f42406119ed565b8161042b6b033b2e3c9fd0803ce80000008861195d565b610435919061199a565b61044290620f424061195d565b61044c919061199a565b945061045787610e71565b965050505050610321565b92915050565b73ffffffffffffffffffffffffffffffffffffffff8086166000908152600160209081526040808320938816835292815282822062ffffff8716835290529081205480610511576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f556e697377617056334d6f636b3a2052617465206973206e6f7420736574757060448201526064016103f9565b61052362ffffff8616620f42406119ed565b8161053a6b033b2e3c9fd0803ce80000008761195d565b610544919061199a565b61055190620f424061195d565b61055b919061199a565b979650505050505050565b60006105a46105786020840184611a04565b6105886040850160208601611a04565b6105986060860160408701611a21565b8560a001356000610d4e565b90508160c0013581101561063a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f556e69737761705632526f757465723a20494e53554646494349454e545f4f5560448201527f545055545f414d4f554e5400000000000000000000000000000000000000000060648201526084016103f9565b61066f333060a08501356106516020870187611a04565b73ffffffffffffffffffffffffffffffffffffffff16929190610ea2565b6106b06106826080840160608501611a04565b826106936040860160208701611a04565b73ffffffffffffffffffffffffffffffffffffffff169190610f84565b919050565b6106c38383610bb884610275565b505050565b60008054610100900460ff16156106e85750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106b05760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000008284015282518083038401815260608301909352600092909161078d917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc491608001611a68565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526107c591611ab0565b6000604051808303816000865af19150503d8060008114610802576040519150601f19603f3d011682016040523d82523d6000602084013e610807565b606091505b509150508080602001905181019061081f9190611acc565b9392505050565b600080806108716108378580611aee565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610fda92505050565b90925090506108c16108838580611aee565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505060608601356109b5565b92508360800135831015610957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f556e69737761705632526f757465723a20494e53554646494349454e545f4f5560448201527f545055545f414d4f554e5400000000000000000000000000000000000000000060648201526084016103f9565b61097d73ffffffffffffffffffffffffffffffffffffffff831633306060880135610ea2565b6109ae6109906040860160208701611a04565b73ffffffffffffffffffffffffffffffffffffffff83169085610f84565b5050919050565b805b60036109c56014600261195d565b6109cf91906119d5565b8351106104625760008060006109e486610e35565b73ffffffffffffffffffffffffffffffffffffffff8084166000908152600160209081526040808320938616835292815282822062ffffff8516835290522054929550909350915080610a93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f556e697377617056334d6f636b3a2052617465206973206e6f7420736574757060448201526064016103f9565b620f4240610aa662ffffff8416826119ed565b6b033b2e3c9fd0803ce8000000610abd848961195d565b610ac7919061199a565b610ad1919061195d565b610adb919061199a565b9450610ae687610e71565b9650505050506109b7565b6000610b2f610b036020840184611a04565b610b136040850160208601611a04565b610b236060860160408701611a21565b8560a001356000610468565b90508160c00135811115610bc5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f556e69737761705632526f757465723a20494e53554646494349454e545f4f5560448201527f545055545f414d4f554e5400000000000000000000000000000000000000000060648201526084016103f9565b610bd83330836106516020870187611a04565b6106b0610beb6080840160608501611a04565b60a08401356106936040860160208701611a04565b60008080610c116108378580611aee565b9092509050610c61610c238580611aee565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050606086013561031f565b92508360800135831115610cf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f556e69737761705632526f757465723a20494e53554646494349454e545f4f5560448201527f545055545f414d4f554e5400000000000000000000000000000000000000000060648201526084016103f9565b610d1973ffffffffffffffffffffffffffffffffffffffff8216333086610ea2565b6109ae610d2c6040860160208701611a04565b73ffffffffffffffffffffffffffffffffffffffff8416906060870135610f84565b73ffffffffffffffffffffffffffffffffffffffff8086166000908152600160209081526040808320938816835292815282822062ffffff8716835290529081205480610df7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f556e697377617056334d6f636b3a2052617465206973206e6f7420736574757060448201526064016103f9565b620f4240610e0a62ffffff8716826119ed565b6b033b2e3c9fd0803ce8000000610e21848861195d565b610e2b919061199a565b610551919061195d565b60008080610e43848261101c565b9250610e508460146110ac565b9050610e68610e61600360146119d5565b859061101c565b91509193909250565b6060610462610e82600360146119d5565b610e8e600360146119d5565b8451610e9a91906119ed565b8491906111a0565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052610f7e9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261131a565b50505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526106c39084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401610efc565b600080610fe683610e35565b50909250610ff5905083611426565b1561100a5761100383610e71565b9250915091565b61101383610e35565b50915050915091565b60006110298260146119d5565b83511015611093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f746f416464726573735f6f75744f66426f756e6473000000000000000000000060448201526064016103f9565b5001602001516c01000000000000000000000000900490565b6000816110ba8160036119d5565b1015611122576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f746f55696e7432345f6f766572666c6f7700000000000000000000000000000060448201526064016103f9565b61112d8260036119d5565b83511015611197576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f746f55696e7432345f6f75744f66426f756e647300000000000000000000000060448201526064016103f9565b50016003015190565b6060816111ae81601f6119d5565b1015611216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016103f9565b61122082846119d5565b8451101561128a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e647300000000000000000000000000000060448201526064016103f9565b6060821580156112a95760405191506000825260208201604052611311565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156112e25780518352602092830192016112ca565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b600061137c826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166114609092919063ffffffff16565b8051909150156106c3578080602001905181019061139a9190611acc565b6106c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016103f9565b6000611434600360146119d5565b60146114416003826119d5565b61144b91906119d5565b61145591906119d5565b825110159050919050565b606061146f8484600085611477565b949350505050565b606082471015611509576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016103f9565b843b611571576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016103f9565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161159a9190611ab0565b60006040518083038185875af1925050503d80600081146115d7576040519150601f19603f3d011682016040523d82523d6000602084013e6115dc565b606091505b509150915061055b828286606083156115f657508161081f565b8251156116065782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103f99190611b5a565b73ffffffffffffffffffffffffffffffffffffffff8116811461165c57600080fd5b50565b803562ffffff811681146106b057600080fd5b6000806000806080858703121561168857600080fd5b84356116938161163a565b935060208501356116a38161163a565b92506116b16040860161165f565b9396929550929360600135925050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561170357600080fd5b823567ffffffffffffffff8082111561171b57600080fd5b818501915085601f83011261172f57600080fd5b813581811115611741576117416116c1565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715611787576117876116c1565b816040528281528860208487010111156117a057600080fd5b826020860160208301376000602093820184015298969091013596505050505050565b600080600080600060a086880312156117db57600080fd5b85356117e68161163a565b945060208601356117f68161163a565b93506118046040870161165f565b925060608601359150608086013561181b8161163a565b809150509295509295909350565b6000610100828403121561183c57600080fd5b50919050565b6000610100828403121561185557600080fd5b61081f8383611829565b60008060006060848603121561187457600080fd5b833561187f8161163a565b9250602084013561188f8161163a565b915061189d6040850161165f565b90509250925092565b6000806000606084860312156118bb57600080fd5b83356118c68161163a565b925060208401356118d68161163a565b929592945050506040919091013590565b600060a0828403121561183c57600080fd5b60006020828403121561190b57600080fd5b813567ffffffffffffffff81111561192257600080fd5b61146f848285016118e7565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156119955761199561192e565b500290565b6000826119d0577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600082198211156119e8576119e861192e565b500190565b6000828210156119ff576119ff61192e565b500390565b600060208284031215611a1657600080fd5b813561081f8161163a565b600060208284031215611a3357600080fd5b61081f8261165f565b60005b83811015611a57578181015183820152602001611a3f565b83811115610f7e5750506000910152565b7fffffffff000000000000000000000000000000000000000000000000000000008316815260008251611aa2816004850160208701611a3c565b919091016004019392505050565b60008251611ac2818460208701611a3c565b9190910192915050565b600060208284031215611ade57600080fd5b8151801515811461081f57600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112611b2357600080fd5b83018035915067ffffffffffffffff821115611b3e57600080fd5b602001915036819003821315611b5357600080fd5b9250929050565b6020815260008251806020840152611b79816040850160208701611a3c565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea26469706673582212204cf30f1ca2431e63304f0a45d5cefa0164fe6393b35a339d16bca5512d511dd064736f6c634300080a003360e06040523480156200001157600080fd5b506040516200221a3803806200221a833981016040819052620000349162000121565b81816001600160a01b03821615806200005457506001600160a01b038116155b156200007357604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038216608081905260408051632f7a188160e01b81529051632f7a1881916004808201926020929091908290030181865afa158015620000be573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e4919062000159565b6001600160a01b0390811660a0521660c05250506001600055506200017e565b80516001600160a01b03811681146200011c57600080fd5b919050565b600080604083850312156200013557600080fd5b620001408362000104565b9150620001506020840162000104565b90509250929050565b6000602082840312156200016c57600080fd5b620001778262000104565b9392505050565b60805160a05160c051611ff6620002246000396000818161017a015281816111a8015281816112c701526113a101526000818160d30152818161101301526115330152600081816101c101528181610314015281816105630152818161070501528181610ae001528181610c7801528181610dbe015281816111fe01528181611298015281816113f7015281816115bb0152818161166f01526117190152611ff66000f3fe6080604052600436106100bc5760003560e01c8063c12c21c011610074578063db3e21981161004e578063db3e219814610225578063f28c049814610238578063f4f18d901461024b57600080fd5b8063c12c21c0146101af578063c7fbf4de146101e3578063ce30bbdb1461020357600080fd5b806378aa73a4116100a557806378aa73a414610140578063bd90df7014610168578063c04b8d591461019c57600080fd5b80632f7a1881146100c1578063414bf3891461011f575b600080fd5b3480156100cd57600080fd5b506100f57f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61013261012d36600461182d565b61026b565b604051908152602001610116565b34801561014c57600080fd5b50610155600281565b60405161ffff9091168152602001610116565b34801561017457600080fd5b506100f57f000000000000000000000000000000000000000000000000000000000000000081565b6101326101aa366004611863565b6104bf565b3480156101bb57600080fd5b506100f57f000000000000000000000000000000000000000000000000000000000000000081565b3480156101ef57600080fd5b506101326101fe3660046118a0565b6106bd565b34801561020f57600080fd5b50610218600281565b60405161011691906118b2565b61013261023336600461182d565b610a3c565b610132610246366004611863565b610bd4565b34801561025757600080fd5b506101326102663660046118f3565b610d76565b6000600260005414156102df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610370573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103949190611953565b905060006103a736859003850185611af2565b73ffffffffffffffffffffffffffffffffffffffff83166060820152905061049f826103d66020870187611b0f565b6103e66040880160208901611b0f565b6040517f414bf3890000000000000000000000000000000000000000000000000000000090610419908790602401611b2c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915260016000610ff6565b8060200190518101906104b29190611ba7565b6001600055949350505050565b60006002600054141561052e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016102d6565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156105bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105e39190611953565b905060008061062f6105f58680611bc0565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061146e92505050565b9150915060008561063f90611d27565b73ffffffffffffffffffffffffffffffffffffffff8516602082015260405190915061069b908590859085907fc04b8d590000000000000000000000000000000000000000000000000000000090610419908790602401611e0c565b8060200190518101906106ae9190611ba7565b60016000559695505050505050565b6040517fe958b704000000000000000000000000000000000000000000000000000000008152336004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa15801561074c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107709190611953565b905060006107816020850185611b0f565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015291909116906370a0823190602401602060405180830381865afa1580156107ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108139190611ba7565b90506001811115610a35576040805161010081019091527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90910190600090806108606020880188611b0f565b73ffffffffffffffffffffffffffffffffffffffff16815260200186602001602081019061088e9190611b0f565b73ffffffffffffffffffffffffffffffffffffffff1681526020016108b96060880160408901611e1f565b62ffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff168152602001866060013581526020018381526020016b033b2e3c9fd0803ce800000087608001358561090c9190611e69565b6109169190611ea6565b815260200161092b60c0880160a08901611b0f565b73ffffffffffffffffffffffffffffffffffffffff1690529050610a1e836109566020880188611b0f565b6109666040890160208a01611b0f565b6040517f414bf3890000000000000000000000000000000000000000000000000000000090610999908790602401611b2c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152600180610ff6565b806020019051810190610a319190611ba7565b9350505b5050919050565b600060026000541415610aab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016102d6565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610b3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b609190611953565b90506000610b7336859003850185611af2565b73ffffffffffffffffffffffffffffffffffffffff831660608201528051602082015160405192935061049f92859291907fdb3e21980000000000000000000000000000000000000000000000000000000090610419908790602401611b2c565b600060026000541415610c43576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016102d6565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610cd4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf89190611953565b9050600080610d0a6105f58680611bc0565b91509150600085610d1a90611d27565b73ffffffffffffffffffffffffffffffffffffffff8516602082015260405190915061069b908590849086907ff28c04980000000000000000000000000000000000000000000000000000000090610419908790602401611e0c565b6040517fe958b704000000000000000000000000000000000000000000000000000000008152336004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015610e05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e299190611953565b9050600080610e3b6105f58680611bc0565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301529294509092506000918416906370a0823190602401602060405180830381865afa158015610eb0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed49190611ba7565b90506001811115610fed576040805160a081019091527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091019060009080610f1d8980611bc0565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509082525073ffffffffffffffffffffffffffffffffffffffff8716602080830191909152890135604080830191909152606082018590526080909101906b033b2e3c9fd0803ce800000090610fa8908b013586611e69565b610fb29190611ea6565b8152509050610fd685858563c04b8d5960e01b856040516024016109999190611e0c565b806020019051810190610fe99190611ba7565b9550505b50505050919050565b60606000803373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461115f576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301528916906370a0823190602401602060405180830381865afa1580156110a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c89190611ba7565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152919350908816906370a0823190602401602060405180830381865afa158015611138573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115c9190611ba7565b90505b841561125b576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561124257600080fd5b505af1158015611256573d6000803e3d6000fd5b505050505b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a906112f19033907f0000000000000000000000000000000000000000000000000000000000000000908b90600401611ee1565b6000604051808303816000875af1158015611310573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526113569190810190611f23565b92508415611454576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b15801561143b57600080fd5b505af115801561144f573d6000803e3d6000fd5b505050505b61146289898985858961151b565b50509695505050505050565b600080600361147f60146002611e69565b6114899190611f91565b835110156114c3576040517f8287466d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114ce83600061177e565b91506115146114df60036014611f91565b6114eb60036014611f91565b601486516114f99190611fa9565b6115039190611ea6565b61150d9190611e69565b849061177e565b9050915091565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461161c576040517f654a9eda00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528681166024830152858116604483015260648201859052608482018490527f0000000000000000000000000000000000000000000000000000000000000000169063654a9eda9060a401600060405180830381600087803b1580156115ff57600080fd5b505af1158015611613573d6000803e3d6000fd5b50505050611776565b80156116cc576040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015286811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b1580156116b357600080fd5b505af11580156116c7573d6000803e3d6000fd5b505050505b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015285811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561175d57600080fd5b505af1158015611771573d6000803e3d6000fd5b505050505b505050505050565b600061178b826014611f91565b835110156117f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f746f416464726573735f6f75744f66426f756e6473000000000000000000000060448201526064016102d6565b50818101602001516c0100000000000000000000000090045b92915050565b6000610100828403121561182757600080fd5b50919050565b6000610100828403121561184057600080fd5b61184a8383611814565b9392505050565b600060a0828403121561182757600080fd5b60006020828403121561187557600080fd5b813567ffffffffffffffff81111561188c57600080fd5b61189884828501611851565b949350505050565b600060c0828403121561182757600080fd5b60208101601183106118ed577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561190557600080fd5b813567ffffffffffffffff81111561191c57600080fd5b82016060818503121561184a57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8116811461195057600080fd5b50565b60006020828403121561196557600080fd5b815161184a8161192e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff811182821017156119c2576119c2611970565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611a0f57611a0f611970565b604052919050565b8035611a228161192e565b919050565b803562ffffff81168114611a2257600080fd5b6000610100808385031215611a4e57600080fd5b6040519081019067ffffffffffffffff82118183101715611a7157611a71611970565b8160405280925083359150611a858261192e565b818152611a9460208501611a17565b6020820152611aa560408501611a27565b6040820152611ab660608501611a17565b60608201526080840135608082015260a084013560a082015260c084013560c0820152611ae560e08501611a17565b60e0820152505092915050565b60006101008284031215611b0557600080fd5b61184a8383611a3a565b600060208284031215611b2157600080fd5b813561184a8161192e565b610100810161180e828473ffffffffffffffffffffffffffffffffffffffff80825116835280602083015116602084015262ffffff60408301511660408401528060608301511660608401526080820151608084015260a082015160a084015260c082015160c08401528060e08301511660e0840152505050565b600060208284031215611bb957600080fd5b5051919050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112611bf557600080fd5b83018035915067ffffffffffffffff821115611c1057600080fd5b602001915036819003821315611c2557600080fd5b9250929050565b600067ffffffffffffffff821115611c4657611c46611970565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600060a08284031215611c8457600080fd5b611c8c61199f565b9050813567ffffffffffffffff811115611ca557600080fd5b8201601f81018413611cb657600080fd5b80356020611ccb611cc683611c2c565b6119c8565b8281528682848601011115611cdf57600080fd5b828285018383013760008184018301528452611cfc858201611a17565b8185015250505060408201356040820152606082013560608201526080820135608082015292915050565b600061180e3683611c72565b60005b83811015611d4e578181015183820152602001611d36565b83811115611d5d576000848401525b50505050565b60008151808452611d7b816020860160208601611d33565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6000815160a08452611dc260a0850182611d63565b905073ffffffffffffffffffffffffffffffffffffffff60208401511660208501526040830151604085015260608301516060850152608083015160808501528091505092915050565b60208152600061184a6020830184611dad565b600060208284031215611e3157600080fd5b61184a82611a27565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611ea157611ea1611e3a565b500290565b600082611edc577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600073ffffffffffffffffffffffffffffffffffffffff808616835280851660208401525060606040830152611f1a6060830184611d63565b95945050505050565b600060208284031215611f3557600080fd5b815167ffffffffffffffff811115611f4c57600080fd5b8201601f81018413611f5d57600080fd5b8051611f6b611cc682611c2c565b818152856020838501011115611f8057600080fd5b611f1a826020830160208601611d33565b60008219821115611fa457611fa4611e3a565b500190565b600082821015611fbb57611fbb611e3a565b50039056fea26469706673582212205e5422ac5bcae72b08548a48e40a231ab28c72dbc2d7f2b1b2c453222770f56564736f6c634300080a0033608060405234801561001057600080fd5b5061001a33610081565b73e592427a0aece92de3edee1f18e0157c0586156460005260016020527fbad1c9453febe4a6446e59e386c36af7924acc0d372d29859fea25e7a6eaac1780546001600160a01b03191673b27308f9f90d607463bb33ea1bebb41c27ce5ab61790556100d1565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b612604806100e06000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c80636f33547d11610081578063c67903ea1161005b578063c67903ea14610208578063d7aa2e3514610269578063f2fde38b1461029a57600080fd5b80636f33547d146101cf578063715018a6146101e25780638da5cb5b146101ea57600080fd5b806345330666116100b2578063453306661461017d5780634acc79ed1461019257806354fd4d50146101b957600080fd5b80631b162e56146100d95780631bf64c41146101025780632a10672614610122575b600080fd5b6100ec6100e7366004611e57565b6102ad565b6040516100f99190611f30565b60405180910390f35b61011561011036600461206e565b610427565b6040516100f99190612157565b6101586101303660046121c6565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100f9565b61019061018b3660046121ea565b610805565b005b6101a56101a036600461223b565b6108e2565b60405162ffffff90911681526020016100f9565b6101c1600281565b6040519081526020016100f9565b6101156101dd36600461206e565b61094a565b610190610f2e565b60005473ffffffffffffffffffffffffffffffffffffffff16610158565b610190610216366004612254565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001691909216179055565b6101c161027736600461228d565b600260209081526000938452604080852082529284528284209052825290205481565b6101906102a83660046121c6565b610fbb565b606060006102ba866108e2565b905060006102c7856108e2565b905060008960028111156102dd576102dd6122d8565b14806102fa575060018960028111156102f8576102f86122d8565b145b61038e576040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606086811b821660208401527fffffff000000000000000000000000000000000000000000000000000000000060e885811b821660348601528a831b8416603786015286901b16604b8401528a901b16604e82015260620160405160208183030381529060405261041a565b6040517fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b821660208401527fffffff000000000000000000000000000000000000000000000000000000000060e886811b821660348601528a831b8416603786015285901b16604b84015286901b16604e8201526062016040516020818303038152906040525b9998505050505050505050565b6104646040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b600283516002811115610479576104796122d8565b146104855760006104a7565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b8160200181815250506000600160008473ffffffffffffffffffffffffffffffffffffffff1663bd90df706040518163ffffffff1660e01b8152600401602060405180830381865afa158015610501573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105259190612307565b73ffffffffffffffffffffffffffffffffffffffff9081168252602082019290925260400160009081205490911691505b60038110156107fd5761059c6040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b6105a5866110eb565b156106c6578273ffffffffffffffffffffffffffffffffffffffff1663f7729d43876040015188606001516105d9866108e2565b60a08b01516040517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b16815273ffffffffffffffffffffffffffffffffffffffff948516600482015293909216602484015262ffffff16604483015260648201526000608482015260a4016020604051808303816000875af19250505080156106a2575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261069f91810190612324565b60015b6106ab576107de565b80156106c0576106bd87828886611184565b91505b506107de565b8273ffffffffffffffffffffffffffffffffffffffff166330d07f21876040015188606001516106f5866108e2565b60a08b01516040517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b16815273ffffffffffffffffffffffffffffffffffffffff948516600482015293909216602484015262ffffff16604483015260648201526000608482015260a4016020604051808303816000875af19250505080156107be575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526107bb91810190612324565b60015b6107c7576107de565b80156107dc576107d987828886611184565b91505b505b6107eb81878660006112a9565b156107f4578093505b50600101610556565b505092915050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461088b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff93841660009081526002602090815260408083209587168084528683528184209590971683529381528382208390559384528281209481529390925290912055565b60006003821061091e576040517f50c1fe4a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b811561093c578160011461093457611388610940565b610bb8610940565b6103e85b61ffff1692915050565b6109876040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1663bd90df706040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109fc9190612307565b73ffffffffffffffffffffffffffffffffffffffff908116825260208201929092526040016000908120546080870151519216925085516002811115610a4457610a446122d8565b1480610a625750600185516002811115610a6057610a606122d8565b145b610a8c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610a8f565b60005b602084015260005b81811015610f255760005b6003811015610f1c5760005b6003811015610f13576000610af089600001518a60400151858c608001518881518110610add57610add61233d565b6020026020010151868e606001516102ad565b9050600080610afe8b6110eb565b15610be15760a08b01516040517fcdca175300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a169163cdca175391610b5a91879160040161236c565b6020604051808303816000875af1925050508015610bb3575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610bb091810190612324565b60015b610bbc57610cbb565b8015801590610bce5750896020015181115b15610bdb57809250600191505b50610cbb565b60a08b01516040517f2f80bb1d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a1691632f80bb1d91610c3891879160040161236c565b6020604051808303816000875af1925050508015610c91575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610c8e91810190612324565b60015b610c9a57610cbb565b8015801590610cac5750896020015181105b15610cb957809250600191505b505b8015610f0557600160408a015260208901829052610cdb8b838c866112c7565b896000018190525060008a73ffffffffffffffffffffffffffffffffffffffff1663bd90df706040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d549190612307565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260026020526040812060808f0151805193945090928a908110610d9557610d9561233d565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008d6060015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008e6040015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008e608001518a81518110610eb157610eb161233d565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610efe91906123bd565b60608b0152505b505050806001019050610aae565b50600101610aa2565b50600101610a97565b50505092915050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610faf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610882565b610fb9600061159d565b565b60005473ffffffffffffffffffffffffffffffffffffffff16331461103c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610882565b73ffffffffffffffffffffffffffffffffffffffff81166110df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610882565b6110e88161159d565b50565b60008082516002811115611101576111016122d8565b148061111f575060018251600281111561111d5761111d6122d8565b145b1561112c57506001919050565b600282516002811115611141576111416122d8565b141561114f57506000919050565b81516040517ffe7995cf00000000000000000000000000000000000000000000000000000000815261088291906004016123d5565b6111c16040805160c08101909152600060808201908152606060a08301528190815260200160008152602001600015158152602001600081525090565b60016040820152602081018490526111db85858585611612565b816000018190525060008373ffffffffffffffffffffffffffffffffffffffff1663bd90df706040518163ffffffff1660e01b8152600401602060405180830381865afa158015611230573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112549190612307565b73ffffffffffffffffffffffffffffffffffffffff90811660009081526002602090815260408083208a82015185168452825280832060609a8b01519094168352929052205495820195909552949350505050565b60006112bc8585858660600151866119a4565b90505b949350505050565b6040805180820190915260008152606060208201526001855160028111156112f1576112f16122d8565b14156113f4576000604051806060016040528084815260200142610e1061131891906123bd565b81526020016113278888611ac7565b815250905060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff16815260200163f4f18d9060e01b8360405160240161136c9190612416565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152905291506112bf9050565b600085516002811115611409576114096122d8565b14156114ae5760006040518060a00160405280848152602001876020015173ffffffffffffffffffffffffffffffffffffffff16815260200142610e1061145091906123bd565b815260a088015160208201526040016114698888611b01565b815250905060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff16815260200163c04b8d5960e01b8360405160240161136c91906124b1565b6002855160028111156114c3576114c36122d8565b14156115685760006040518060a00160405280848152602001876020015173ffffffffffffffffffffffffffffffffffffffff16815260200142610e1061150a91906123bd565b815260a088015160208201526040016115238888611b01565b815250905060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff16815260200163f28c049860e01b8360405160240161136c91906124b1565b84516040517ffe7995cf00000000000000000000000000000000000000000000000000000000815261088291906004016123d5565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60408051808201909152600081526060602082015260018551600281111561163c5761163c6122d8565b141561175e5760006040518060c00160405280876040015173ffffffffffffffffffffffffffffffffffffffff168152602001876060015173ffffffffffffffffffffffffffffffffffffffff168152602001611698856108e2565b62ffffff1681526020016116ae42610e106123bd565b81526020016116bd8888611ac7565b8152600060209182015260408051808201825273ffffffffffffffffffffffffffffffffffffffff8881168252825185518216602482015285850151821660448201529285015162ffffff16606484015260608501516084840152608085015160a484015260a08501511660c4830152929350908201907fc7fbf4de000000000000000000000000000000000000000000000000000000009060e40161136c565b600085516002811115611773576117736122d8565b1415611881576000604051806101000160405280876040015173ffffffffffffffffffffffffffffffffffffffff168152602001876060015173ffffffffffffffffffffffffffffffffffffffff1681526020016117d0856108e2565b62ffffff16815260208881015173ffffffffffffffffffffffffffffffffffffffff169082015260400161180642610e106123bd565b815260a0880151602082015260400161181f8888611b01565b8152602001600073ffffffffffffffffffffffffffffffffffffffff16815250905060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff16815260200163414bf38960e01b8360405160240161136c91906124c4565b600285516002811115611896576118966122d8565b1415611568576000604051806101000160405280876040015173ffffffffffffffffffffffffffffffffffffffff168152602001876060015173ffffffffffffffffffffffffffffffffffffffff1681526020016118f3856108e2565b62ffffff16815260208881015173ffffffffffffffffffffffffffffffffffffffff169082015260400161192942610e106123bd565b815260a088015160208201526040016119428888611b01565b8152602001600073ffffffffffffffffffffffffffffffffffffffff16815250905060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff16815260200163db3e219860e01b8360405160240161136c91906124c4565b600085604001516119b757506000611abe565b83604001516119c857506001611abe565b6000611a258688602001516b033b2e3c9fd0803ce8000000868b606001516119f0919061253f565b6119fa919061257c565b60208901516b033b2e3c9fd0803ce8000000611a16898b61253f565b611a20919061257c565b611be8565b9050600086516002811115611a3c57611a3c6122d8565b1480611a5a5750600186516002811115611a5857611a586122d8565b145b15611a66579050611abe565b600286516002811115611a7b57611a7b6122d8565b1415611a8957159050611abe565b85516040517ffe7995cf00000000000000000000000000000000000000000000000000000000815261088291906004016123d5565b95945050505050565b60a0820151600090611aee84611ae9856b033b2e3c9fd0803ce800000061253f565b611b01565b611af8919061257c565b90505b92915050565b60008260e0015115611b1557506000611afb565b600083516002811115611b2a57611b2a6122d8565b1480611b485750600183516002811115611b4657611b466122d8565b145b15611b7b5760c083015161271090611b6090826125b7565b611b6a908461253f565b611b74919061257c565b9050611afb565b600283516002811115611b9057611b906122d8565b1415611bb35760c0830151611ba7906127106123bd565b611b6a6127108461253f565b82516040517ffe7995cf00000000000000000000000000000000000000000000000000000000815261088291906004016123d5565b6000611c286040518060400160405280600c81526020017f414141202d20616d6f756e740000000000000000000000000000000000000000815250611cd9565b611c3185611d68565b611c3a84611d68565b611c4383611d68565b611c4c82611d68565b611c5e611c5985876125b7565b611d68565b611c6b611c5983856125b7565b611c74866110eb565b611c9557611c8282846123bd565b611c8c85876123bd565b10159050611abe565b838510158015611ca55750818310155b15611cbe57611cb482846125b7565b611c8c85876125b7565b838510611ccc576001611ccf565b60005b9695505050505050565b6110e881604051602401611ced9190611f30565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f41304fac00000000000000000000000000000000000000000000000000000000179052611df5565b6110e881604051602401611d7e91815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff5b1bba9000000000000000000000000000000000000000000000000000000001790525b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b803560038110611e2557600080fd5b919050565b73ffffffffffffffffffffffffffffffffffffffff811681146110e857600080fd5b8035611e2581611e2a565b60008060008060008060c08789031215611e7057600080fd5b611e7987611e16565b95506020870135611e8981611e2a565b9450604087013593506060870135611ea081611e2a565b92506080870135915060a0870135611eb781611e2a565b809150509295509295509295565b6000815180845260005b81811015611eeb57602081850181015186830182015201611ecf565b81811115611efd576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611af86020830184611ec5565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610100810167ffffffffffffffff81118282101715611f9657611f96611f43565b60405290565b600082601f830112611fad57600080fd5b8135602067ffffffffffffffff80831115611fca57611fca611f43565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f8301168101818110848211171561200d5761200d611f43565b60405293845285810183019383810192508785111561202b57600080fd5b83870191505b8482101561205357813561204481611e2a565b83529183019190830190612031565b979650505050505050565b80358015158114611e2557600080fd5b6000806040838503121561208157600080fd5b823567ffffffffffffffff8082111561209957600080fd5b9084019061010082870312156120ae57600080fd5b6120b6611f72565b6120bf83611e16565b81526120cd60208401611e4c565b60208201526120de60408401611e4c565b60408201526120ef60608401611e4c565b606082015260808301358281111561210657600080fd5b61211288828601611f9c565b60808301525060a083013560a082015260c083013560c082015261213860e0840161205e565b60e0820152935061214e91505060208401611e4c565b90509250929050565b60208082528251608083830152805173ffffffffffffffffffffffffffffffffffffffff1660a08401520151604060c083015260009061219a60e0840182611ec5565b905060208401516040840152604084015115156060840152606084015160808401528091505092915050565b6000602082840312156121d857600080fd5b81356121e381611e2a565b9392505050565b6000806000806080858703121561220057600080fd5b843561220b81611e2a565b9350602085013561221b81611e2a565b9250604085013561222b81611e2a565b9396929550929360600135925050565b60006020828403121561224d57600080fd5b5035919050565b6000806040838503121561226757600080fd5b823561227281611e2a565b9150602083013561228281611e2a565b809150509250929050565b6000806000606084860312156122a257600080fd5b83356122ad81611e2a565b925060208401356122bd81611e2a565b915060408401356122cd81611e2a565b809150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60006020828403121561231957600080fd5b81516121e381611e2a565b60006020828403121561233657600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60408152600061237f6040830185611ec5565b90508260208301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156123d0576123d061238e565b500190565b6020810160038310612410577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6020815260008251606060208401526124326080840182611ec5565b905060208401516040840152604084015160608401528091505092915050565b6000815160a0845261246760a0850182611ec5565b905073ffffffffffffffffffffffffffffffffffffffff60208401511660208501526040830151604085015260608301516060850152608083015160808501528091505092915050565b602081526000611af86020830184612452565b6101008101611afb828473ffffffffffffffffffffffffffffffffffffffff80825116835280602083015116602084015262ffffff60408301511660408401528060608301511660608401526080820151608084015260a082015160a084015260c082015160c08401528060e08301511660e0840152505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156125775761257761238e565b500290565b6000826125b2577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000828210156125c9576125c961238e565b50039056fea2646970667358221220f48bf290d42d727585d0174d5aecb1c111d9a28593d6c27486ce6672041893ce64736f6c634300080a0033a2646970667358221220cae7881b892940538af4dbf28ca24ab3a828c47bf93f4b4f319693c331c75ae864736f6c634300080a0033"; - -type YearnPathFinderTestConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: YearnPathFinderTestConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class YearnPathFinderTest__factory extends ContractFactory { - constructor(...args: YearnPathFinderTestConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): YearnPathFinderTest { - return super.attach(address) as YearnPathFinderTest; - } - override connect(signer: Signer): YearnPathFinderTest__factory { - return super.connect(signer) as YearnPathFinderTest__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): YearnPathFinderTestInterface { - return new utils.Interface(_abi) as YearnPathFinderTestInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): YearnPathFinderTest { - return new Contract(address, _abi, signerOrProvider) as YearnPathFinderTest; - } -} diff --git a/src/types/factories/contracts/test/pathfinder/YearnPathFinder.t.sol/index.ts b/src/types/factories/contracts/test/pathfinder/YearnPathFinder.t.sol/index.ts deleted file mode 100644 index 989f8d45..00000000 --- a/src/types/factories/contracts/test/pathfinder/YearnPathFinder.t.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { YearnPathFinderTest__factory } from "./YearnPathFinderTest__factory"; diff --git a/src/types/factories/contracts/test/pathfinder/index.ts b/src/types/factories/contracts/test/pathfinder/index.ts deleted file mode 100644 index 1c4f7d4c..00000000 --- a/src/types/factories/contracts/test/pathfinder/index.ts +++ /dev/null @@ -1,11 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export * as curveLpPathFinderTSol from "./CurveLPPathFinder.t.sol"; -export * as curvePathFinderTSol from "./CurvePathFinder.t.sol"; -export * as normalTokenPathFinderTSol from "./NormalTokenPathFinder.t.sol"; -export * as swapPathFinderTSol from "./SwapPathFinder.t.sol"; -export * as uniswapV2PathFinderTSol from "./UniswapV2PathFinder.t.sol"; -export * as uniswapV3PathFinderTSol from "./UniswapV3PathFinder.t.sol"; -export * as yearnPathFinderTSol from "./YearnPathFinder.t.sol"; -export { PathFinderTestHelper__factory } from "./PathFinderTestHelper__factory"; diff --git a/src/types/factories/contracts/test/pool/PoolService.t.sol/PoolServiceTest__factory.ts b/src/types/factories/contracts/test/pool/PoolService.t.sol/PoolServiceTest__factory.ts deleted file mode 100644 index d8091abe..00000000 --- a/src/types/factories/contracts/test/pool/PoolService.t.sol/PoolServiceTest__factory.ts +++ /dev/null @@ -1,804 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - PoolServiceTest, - PoolServiceTestInterface, -} from "../../../../../contracts/test/pool/PoolService.t.sol/PoolServiceTest"; - -const _abi = [ - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "sender", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "onBehalfOf", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "referralCode", - type: "uint256", - }, - ], - name: "AddLiquidity", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "creditManager", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "creditAccount", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "Borrow", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "creditManager", - type: "address", - }, - ], - name: "BorrowForbidden", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "creditManager", - type: "address", - }, - ], - name: "NewCreditManagerConnected", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "newLimit", - type: "uint256", - }, - ], - name: "NewExpectedLiquidityLimit", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newInterestRateModel", - type: "address", - }, - ], - name: "NewInterestRateModel", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "fee", - type: "uint256", - }, - ], - name: "NewWithdrawFee", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "sender", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "RemoveLiquidity", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "creditManager", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "borrowedAmount", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "profit", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "loss", - type: "uint256", - }, - ], - name: "Repay", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "creditManager", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "loss", - type: "uint256", - }, - ], - name: "UncoveredLoss", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "", - type: "address", - }, - ], - name: "log_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "log_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - name: "log_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "int256", - name: "", - type: "int256", - }, - ], - name: "log_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "address", - name: "val", - type: "address", - }, - ], - name: "log_named_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes", - name: "val", - type: "bytes", - }, - ], - name: "log_named_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes32", - name: "val", - type: "bytes32", - }, - ], - name: "log_named_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - ], - name: "log_named_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "string", - name: "val", - type: "string", - }, - ], - name: "log_named_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - ], - name: "log_named_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "log_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "logs", - type: "event", - }, - { - inputs: [], - name: "IS_TEST", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "failed", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "setUp", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_PS_01_start_parameters_correct", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_PS_02_add_liquidity_adds_correctly", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_PS_03_remove_liquidity_removes_correctly", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_PS_04_cannot_be_used_while_paused", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_PS_05_starting_cumulative_index_correct", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_PS_06_diesel_rate_computes_correctly", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_PS_07_correctly_adds_liquidity_at_new_diesel_rate", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_PS_08_correctly_removes_liquidity_at_new_diesel_rate", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_PS_09_admin_functions_revert_on_non_admin", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_PS_10_connectCreditManager_fails_on_incompatible_CM", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_PS_11_CM_is_connected_correctly", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_PS_12_CA_can_be_lent_repaid_only_by_CM", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_PS_13_lendCreditAccount_reverts_on_forbidden_CM", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_PS_14_lendCreditAccount_correctly_transfers_tokens", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_PS_15_lendCreditAccount_emits_event", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_PS_16_lendCreditAccount_correctly_updates_parameters", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_PS_17_lendCreditAccount_correctly_updates_borrow_rate", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_PS_18_repayCreditAccount_emits_event", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_PS_19_repayCreditAccount_correctly_updates_on_uncovered_loss", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_PS_20_repayCreditAccount_correctly_updates_on_covered_loss", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_PS_21_repayCreditAccount_correctly_updates_on_profit", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_PS_22_repayCreditAccount_does_not_change_diesel_rate", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_PS_23_diesel_conversion_is_correct", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_PS_24_updateInterestRateModel_works_correctly_and_emits_event", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_PS_25_updateInterestRateModel_correctly_computes_new_borrow_rate", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_PS_26_updateBorrowRate_correct", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_PS_27_calcLinearCumulative_RAY_correct", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_PS_28_expectedLiquidity_correct", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_PS_29_setExpectedLiquidityLimit_correct_and_emits_event", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_PS_30_addLiquidity_reverts_above_liquidity_limit", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_PS_31_setWithdrawFee_reverts_on_fee_too_lage", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_PS_32_setWithdrawFee_correct_and_emits_event", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_PS_33_removeLiquidity_takes_withdrawal_fee", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_PS_34_connectCreditManager_reverts_on_duplicate", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_PS_35_updateInterestRateModel_reverts_on_zero_address", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, -]; - -const _bytecode = - "0x60806040526000805460ff1916600190811790915580546001600160a01b031916737109709ecfa91a80626ff3989d68f67f5b1dd12d1790553480156200004557600080fd5b506201db0080620000576000396000f3fe60806040523480156200001157600080fd5b5060043610620002c75760003560e01c80639ff0b56d116200017c578063d7ddc66811620000e9578063f2aeb7e01162000097578063fc96889e116200007a578063fc96889e1462000444578063fdaaba84146200044e578063fe37254f146200045857600080fd5b8063f2aeb7e0146200042c578063fa7626d4146200043657600080fd5b8063daafd16011620000cc578063daafd160146200040e578063dff598901462000418578063e903addd146200042257600080fd5b8063d7ddc66814620003fa578063da9bea59146200040457600080fd5b8063b2b035741162000147578063bcf055df116200012a578063bcf055df14620003dc578063ce14b9f814620003e6578063d3e74fdc14620003f057600080fd5b8063b2b0357414620003b4578063ba414fa614620003be57600080fd5b80639ff0b56d146200038c578063a71dcc401462000396578063aa1b5dc614620003a0578063af79065714620003aa57600080fd5b806348d594df11620002385780638b029e5f11620001e6578063924c65f511620001c9578063924c65f5146200036e57806393621926146200037857806398e13788146200038257600080fd5b80638b029e5f146200035a5780639193708a146200036457600080fd5b806368dcdb74116200021b57806368dcdb74146200033c5780636d4b37df1462000346578063760c8ecd146200035057600080fd5b806348d594df146200032857806349551d02146200033257600080fd5b80632a14119d116200029657806336d9daa1116200027957806336d9daa1146200030a5780633f5ece03146200031457806342f36c15146200031e57600080fd5b80632a14119d14620002f65780633133cc90146200030057600080fd5b80630a9254e414620002cc5780630d9e915f14620002d85780631c2e7ac714620002e257806326edea9514620002ec575b600080fd5b620002d662000462565b005b620002d66200093a565b620002d662000eaf565b620002d6620011de565b620002d6620015ac565b620002d662001878565b620002d662001f01565b620002d6620022ff565b620002d662002866565b620002d662002b76565b620002d662003705565b620002d662003db9565b620002d6620047c2565b620002d662004bde565b620002d662004de8565b620002d662005355565b620002d662005787565b620002d662005cdb565b620002d662005f26565b620002d6620060d2565b620002d662006280565b620002d662006918565b620002d6620070ff565b620002d662007f1f565b620003c8620083f4565b604051901515815260200160405180910390f35b620002d66200855e565b620002d662008811565b620002d662008f31565b620002d6620090df565b620002d6620096e6565b620002d662009c45565b620002d66200a3ed565b620002d66200b115565b620002d66200b94a565b600054620003c89060ff1681565b620002d66200bd6b565b620002d66200bddd565b620002d66200c1ba565b60405162000470906200cf78565b604051809103906000f0801580156200048d573d6000803e3d6000fd5b50600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff166201000073ffffffffffffffffffffffffffffffffffffffff93841681029190911791829055604051910490911690620004ee906200cf86565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103906000f08015801562000528573d6000803e3d6000fd5b50600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169182179055604080517f570a7af2000000000000000000000000000000000000000000000000000000008152905163570a7af2916004808201926020929091908290030181865afa158015620005c2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005e891906200cfc5565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316178155600254604080517f36dda7d5000000000000000000000000000000000000000000000000000000008152905191909316926336dda7d592818101926020929091908290030181865afa15801562000684573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006aa91906200cfc5565b600580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600254604080517f6f307dc300000000000000000000000000000000000000000000000000000000815290519190921691636f307dc39160048083019260209291908290030181865afa15801562000747573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200076d91906200cfc5565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600254604080517fe1463e580000000000000000000000000000000000000000000000000000000081529051919092169163e1463e589160048083019260209291908290030181865afa1580156200080a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200083091906200cfc5565b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600254604080517fde2873590000000000000000000000000000000000000000000000000000000081529051919092169163de2873599160048083019260209291908290030181865afa158015620008cd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008f391906200cfc5565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b158015620009ba57600080fd5b505af1158015620009cf573d6000803e3d6000fd5b5050600480546040517f9aa5d462000000000000000000000000000000000000000000000000000000008152678ac7230489e80000928101929092527390f79bf6eb2c4f870365e785982e1f101e93b906602483015261302d604483015273ffffffffffffffffffffffffffffffffffffffff169250639aa5d4629150606401600060405180830381600087803b15801562000a6a57600080fd5b505af115801562000a7f573d6000803e3d6000fd5b505060045473ffffffffffffffffffffffffffffffffffffffff169150637dfc6afe905062000ab8678ac7230489e8000060026200d01b565b6040518263ffffffff1660e01b815260040162000ad791815260200190565b600060405180830381600087803b15801562000af257600080fd5b505af115801562000b07573d6000803e3d6000fd5b50506001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527390f79bf6eb2c4f870365e785982e1f101e93b906600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b15801562000b8b57600080fd5b505af115801562000ba0573d6000803e3d6000fd5b5050600480546040517f05fe138b000000000000000000000000000000000000000000000000000000008152674563918244f400009281019290925273f39fd6e51aad88f6f4ce6ab8827279cfffb92266602483015273ffffffffffffffffffffffffffffffffffffffff1692506305fe138b91506044016020604051808303816000875af115801562000c38573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c5e91906200d05b565b5060055462000cb49073ffffffffffffffffffffffffffffffffffffffff167390f79bf6eb2c4f870365e785982e1f101e93b90662000cae674563918244f40000678ac7230489e800006200d075565b6200c76d565b60065462000d259073ffffffffffffffffffffffffffffffffffffffff1673f39fd6e51aad88f6f4ce6ab8827279cfffb9226662000cfc674563918244f4000060026200d01b565b62000d19678ac7230489e8000068056bc75e2d631000006200d075565b62000cae91906200d08f565b62000dec600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fe14112d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000d97573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000dbd91906200d05b565b62000dd9674563918244f40000678ac7230489e800006200d075565b62000de69060026200d01b565b6200c78a565b62000ead600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663743753596040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000e5e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e8491906200d05b565b62000e99674563918244f4000060026200d01b565b62000de690678ac7230489e800006200d075565b565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b15801562000f2f57600080fd5b505af115801562000f44573d6000803e3d6000fd5b5050600480546040517f9aa5d462000000000000000000000000000000000000000000000000000000008152678ac7230489e80000928101929092527390f79bf6eb2c4f870365e785982e1f101e93b906602483015261302d604483015273ffffffffffffffffffffffffffffffffffffffff169250639aa5d4629150606401600060405180830381600087803b15801562000fdf57600080fd5b505af115801562000ff4573d6000803e3d6000fd5b505060045473ffffffffffffffffffffffffffffffffffffffff169150637dfc6afe90506200102d678ac7230489e8000060026200d01b565b6040518263ffffffff1660e01b81526004016200104c91815260200190565b600060405180830381600087803b1580156200106757600080fd5b505af11580156200107c573d6000803e3d6000fd5b505050506200112d600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fe14112d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620010f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200111891906200d05b565b62000de6678ac7230489e8000060026200d01b565b62000ead600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663788c6bfe6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200119f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011c591906200d05b565b62000de66b033b2e3c9fd0803ce800000060026200d01b565b6001546040517f06447d5600000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116906306447d5690602401600060405180830381600087803b1580156200125e57600080fd5b505af115801562001273573d6000803e3d6000fd5b5050600154604080518082018252600381527f5053300000000000000000000000000000000000000000000000000000000000602082015290517ff28dceb300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909216935063f28dceb39250620012ff916004016200d125565b600060405180830381600087803b1580156200131a57600080fd5b505af11580156200132f573d6000803e3d6000fd5b5050600480546040517fbf28068b00000000000000000000000000000000000000000000000000000000815260009281019290925273c4375b7de8af5a38a93548eb8453a498222c4ff2602483015273ffffffffffffffffffffffffffffffffffffffff16925063bf28068b9150604401600060405180830381600087803b158015620013bb57600080fd5b505af1158015620013d0573d6000803e3d6000fd5b5050600154604080518082018252600381527f5053300000000000000000000000000000000000000000000000000000000000602082015290517ff28dceb300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909216935063f28dceb392506200145c916004016200d125565b600060405180830381600087803b1580156200147757600080fd5b505af11580156200148c573d6000803e3d6000fd5b5050600480546040517fca9505e4000000000000000000000000000000000000000000000000000000008152600092810183905260248101839052604481019290925273ffffffffffffffffffffffffffffffffffffffff16925063ca9505e491506064015b600060405180830381600087803b1580156200150d57600080fd5b505af115801562001522573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200159157600080fd5b505af1158015620015a6573d6000803e3d6000fd5b50505050565b600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600060048201819052602482018190526044820152606481019290925273ffffffffffffffffffffffffffffffffffffffff169063491cc7c290608401600060405180830381600087803b1580156200162e57600080fd5b505af115801562001643573d6000803e3d6000fd5b505050507fd5fe46099fa396290a7f57e36c3c3c8774e2562c18ed5d1dcc0fa75071e03f1d60326040516200167a91815260200190565b60405180910390a16001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b1580156200170257600080fd5b505af115801562001717573d6000803e3d6000fd5b5050600480546040517fb6ac642a00000000000000000000000000000000000000000000000000000000815260329281019290925273ffffffffffffffffffffffffffffffffffffffff16925063b6ac642a9150602401600060405180830381600087803b1580156200178957600080fd5b505af11580156200179e573d6000803e3d6000fd5b5050505062000ead600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e941fa786040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200183a91906200d05b565b60326040518060400160405280601d81526020017f7769746864726177466565206e6f742073657420636f72726563746c790000008152506200c89c565b6001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b158015620018f857600080fd5b505af11580156200190d573d6000803e3d6000fd5b5050600480546007546040517fcf33d95500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182169381019390935216925063cf33d9559150602401600060405180830381600087803b1580156200198357600080fd5b505af115801562001998573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b15801562001a1c57600080fd5b505af115801562001a31573d6000803e3d6000fd5b5050600480546040517f9aa5d462000000000000000000000000000000000000000000000000000000008152678ac7230489e800009281019290925273f39fd6e51aad88f6f4ce6ab8827279cfffb92266602483015261302d604483015273ffffffffffffffffffffffffffffffffffffffff169250639aa5d4629150606401600060405180830381600087803b15801562001acc57600080fd5b505af115801562001ae1573d6000803e3d6000fd5b505060075473ffffffffffffffffffffffffffffffffffffffff16915063bf28068b905062001b1a6002678ac7230489e800006200d13a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b168152600481019190915273c4375b7de8af5a38a93548eb8453a498222c4ff26024820152604401600060405180830381600087803b15801562001b8657600080fd5b505af115801562001b9b573d6000803e3d6000fd5b5050600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600060048201819052602482018190526044820152606481019290925273ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b15801562001c2157600080fd5b505af115801562001c36573d6000803e3d6000fd5b505060075460405173ffffffffffffffffffffffffffffffffffffffff90911692507f9181736fce85d2d4cca2e4406f10679302ae5c387180fdb62963af3cd9a24fd69150600090a26001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b15801562001cff57600080fd5b505af115801562001d14573d6000803e3d6000fd5b5050600480546007546040517f078c478100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182169381019390935216925063078c47819150602401600060405180830381600087803b15801562001d8a57600080fd5b505af115801562001d9f573d6000803e3d6000fd5b5050600154604080518082018252600381527f5053300000000000000000000000000000000000000000000000000000000000602082015290517ff28dceb300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909216935063f28dceb3925062001e2b916004016200d125565b600060405180830381600087803b15801562001e4657600080fd5b505af115801562001e5b573d6000803e3d6000fd5b505060075473ffffffffffffffffffffffffffffffffffffffff16915063bf28068b905062001e946002678ac7230489e800006200d13a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b168152600481019190915273c4375b7de8af5a38a93548eb8453a498222c4ff260248201526044015b600060405180830381600087803b1580156200159157600080fd5b600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526024810183905260006044820152606481019290925273ffffffffffffffffffffffffffffffffffffffff169063491cc7c290608401600060405180830381600087803b15801562001f8357600080fd5b505af115801562001f98573d6000803e3d6000fd5b505060408051678ac7230489e80000815261302d60208201527390f79bf6eb2c4f870365e785982e1f101e93b906935073f39fd6e51aad88f6f4ce6ab8827279cfffb9226692507fd2491a9b4fe81a7cd4511e8b7b7743951b061dad5bed7da8a7795b080ee08c7e910160405180910390a36001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b1580156200208a57600080fd5b505af11580156200209f573d6000803e3d6000fd5b5050600480546040517f9aa5d462000000000000000000000000000000000000000000000000000000008152678ac7230489e80000928101929092527390f79bf6eb2c4f870365e785982e1f101e93b906602483015261302d604483015273ffffffffffffffffffffffffffffffffffffffff169250639aa5d4629150606401600060405180830381600087803b1580156200213a57600080fd5b505af11580156200214f573d6000803e3d6000fd5b505060055462002196925073ffffffffffffffffffffffffffffffffffffffff1690507390f79bf6eb2c4f870365e785982e1f101e93b906678ac7230489e800006200c76d565b600654620021e69073ffffffffffffffffffffffffffffffffffffffff1673f39fd6e51aad88f6f4ce6ab8827279cfffb9226662000cae678ac7230489e8000068056bc75e2d631000006200d075565b6200228d600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fe14112d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002258573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200227e91906200d05b565b678ac7230489e800006200c78a565b62000ead600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663743753596040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002258573d6000803e3d6000fd5b6001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b1580156200237f57600080fd5b505af115801562002394573d6000803e3d6000fd5b5050600480546007546040517fcf33d95500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182169381019390935216925063cf33d9559150602401600060405180830381600087803b1580156200240a57600080fd5b505af11580156200241f573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b158015620024a357600080fd5b505af1158015620024b8573d6000803e3d6000fd5b5050600480546040517f9aa5d462000000000000000000000000000000000000000000000000000000008152678ac7230489e800009281019290925273f39fd6e51aad88f6f4ce6ab8827279cfffb92266602483015261302d604483015273ffffffffffffffffffffffffffffffffffffffff169250639aa5d4629150606401600060405180830381600087803b1580156200255357600080fd5b505af115801562002568573d6000803e3d6000fd5b50506007546040517fe958b70400000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff260048201526000935073ffffffffffffffffffffffffffffffffffffffff909116915063e958b70490602401602060405180830381865afa158015620025f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200261891906200cfc5565b90506000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634c19386c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200268a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620026b091906200d05b565b60075490915073ffffffffffffffffffffffffffffffffffffffff1663bf28068b620026e66002678ac7230489e800006200d13a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b168152600481019190915273ffffffffffffffffffffffffffffffffffffffff85166024820152604401600060405180830381600087803b1580156200275457600080fd5b505af115801562002769573d6000803e3d6000fd5b5050505062002862600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634c19386c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620027df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200280591906200d05b565b6200281a6002678ac7230489e800006200d13a565b6200282690846200d08f565b6040518060400160405280601b81526020017f496e636f7272656374206e657720626f72726f7720616d6f756e7400000000008152506200c89c565b5050565b6000611f4060c86101f4611d4c60405162002881906200cf94565b938452602084019290925260408301526060820152608001604051809103906000f080158015620028b6573d6000803e3d6000fd5b50600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481019290925260006024830181905260448301819052606483015291925073ffffffffffffffffffffffffffffffffffffffff9091169063491cc7c290608401600060405180830381600087803b1580156200293e57600080fd5b505af115801562002953573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507f0ec6cb7631d36954a05ffd646135bfd9995c71e7fa36d26abb1ad9f24a040ea19150600090a26001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b15801562002a1857600080fd5b505af115801562002a2d573d6000803e3d6000fd5b5050600480546040517f5664cacf00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681169382019390935291169250635664cacf9150602401600060405180830381600087803b15801562002aa157600080fd5b505af115801562002ab6573d6000803e3d6000fd5b5050505062002b73600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f3fdb15a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002b2c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002b5291906200cfc5565b826040518060600160405280602981526020016201d9be602991396200c8e9565b50565b600254604080517f61d027b3000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff16916361d027b39160048083019260209291908290030181865afa15801562002be7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002c0d91906200cfc5565b6001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291925073ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b15801562002c8e57600080fd5b505af115801562002ca3573d6000803e3d6000fd5b5050600480546007546040517fcf33d95500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182169381019390935216925063cf33d9559150602401600060405180830381600087803b15801562002d1957600080fd5b505af115801562002d2e573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b15801562002db257600080fd5b505af115801562002dc7573d6000803e3d6000fd5b5050600480546040517f9aa5d462000000000000000000000000000000000000000000000000000000008152678ac7230489e800009281019290925273f39fd6e51aad88f6f4ce6ab8827279cfffb92266602483015261302d604483015273ffffffffffffffffffffffffffffffffffffffff169250639aa5d4629150606401600060405180830381600087803b15801562002e6257600080fd5b505af115801562002e77573d6000803e3d6000fd5b50506007546040517fe958b70400000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff260048201526000935073ffffffffffffffffffffffffffffffffffffffff909116915063e958b70490602401602060405180830381865afa15801562002f01573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002f2791906200cfc5565b60075490915073ffffffffffffffffffffffffffffffffffffffff1663bf28068b62002f5d6002678ac7230489e800006200d13a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b168152600481019190915273ffffffffffffffffffffffffffffffffffffffff84166024820152604401600060405180830381600087803b15801562002fcb57600080fd5b505af115801562002fe0573d6000803e3d6000fd5b505050506000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166345d31f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562003054573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200307a91906200d05b565b6001549091506301e133809073ffffffffffffffffffffffffffffffffffffffff1663e5d6bf02620030ad83426200d08f565b6040518263ffffffff1660e01b8152600401620030cc91815260200190565b600060405180830381600087803b158015620030e757600080fd5b505af1158015620030fc573d6000803e3d6000fd5b5050505060006b033b2e3c9fd0803ce8000000836002678ac7230489e800006200312791906200d13a565b6200313391906200d01b565b6200313f91906200d13a565b905060006200315782678ac7230489e800006200d08f565b620031649060646200d08f565b90506000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630f69630b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620031d6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620031fc91906200cfc5565b73ffffffffffffffffffffffffffffffffffffffff166342568d44836200322c86678ac7230489e800006200d08f565b620032399060646200d08f565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815260048101929092526024820152604401602060405180830381865afa15801562003293573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620032b991906200d05b565b60005460045491925073ffffffffffffffffffffffffffffffffffffffff6201000090910481169163eebab8ef916001911686620033016002678ac7230489e800006200d13a565b6200330d91906200d08f565b6200331a9060646200d08f565b6040518463ffffffff1660e01b81526004016200333a939291906200d176565b600060405180830381600087803b1580156200335557600080fd5b505af11580156200336a573d6000803e3d6000fd5b505060075473ffffffffffffffffffffffffffffffffffffffff16915063ca9505e49050620033a36002678ac7230489e800006200d13a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815260048101919091526064602482018190526000604483015201600060405180830381600087803b1580156200340357600080fd5b505af115801562003418573d6000803e3d6000fd5b50505050620034d5600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fe14112d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200348e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620034b491906200d05b565b836040518060600160405280602c81526020016201da54602c91396200c89c565b6005546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8981166004830152620036439216906370a0823190602401602060405180830381865afa15801562003549573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200356f91906200d05b565b600480546040517f4d778ad100000000000000000000000000000000000000000000000000000000815260649281019290925273ffffffffffffffffffffffffffffffffffffffff1690634d778ad1906024015b602060405180830381865afa158015620035e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200360791906200d05b565b6040518060400160405280601881526020017f64546f6b656e2062616c616e636520696e636f727265637400000000000000008152506200c89c565b620036fc600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166345d31f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620036b5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620036db91906200d05b565b826040518060600160405280602581526020016201d9e7602591396200c89c565b50505050505050565b6001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b1580156200378557600080fd5b505af11580156200379a573d6000803e3d6000fd5b5050600480546007546040517fcf33d95500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182169381019390935216925063cf33d9559150602401600060405180830381600087803b1580156200381057600080fd5b505af115801562003825573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b158015620038a957600080fd5b505af1158015620038be573d6000803e3d6000fd5b5050600480546040517f9aa5d462000000000000000000000000000000000000000000000000000000008152678ac7230489e800009281019290925273f39fd6e51aad88f6f4ce6ab8827279cfffb92266602483015261302d604483015273ffffffffffffffffffffffffffffffffffffffff169250639aa5d4629150606401600060405180830381600087803b1580156200395957600080fd5b505af11580156200396e573d6000803e3d6000fd5b50506007546040517fe958b70400000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff260048201526000935073ffffffffffffffffffffffffffffffffffffffff909116915063e958b70490602401602060405180830381865afa158015620039f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003a1e91906200cfc5565b60075490915073ffffffffffffffffffffffffffffffffffffffff1663bf28068b62003a546002678ac7230489e800006200d13a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b168152600481019190915273ffffffffffffffffffffffffffffffffffffffff84166024820152604401600060405180830381600087803b15801562003ac257600080fd5b505af115801562003ad7573d6000803e3d6000fd5b50506001546301e13380925073ffffffffffffffffffffffffffffffffffffffff16905063e5d6bf0262003b0c83426200d08f565b6040518263ffffffff1660e01b815260040162003b2b91815260200190565b600060405180830381600087803b15801562003b4657600080fd5b505af115801562003b5b573d6000803e3d6000fd5b505050506000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663788c6bfe6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562003bcf573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003bf591906200d05b565b600480546040517f4d778ad1000000000000000000000000000000000000000000000000000000008152678ac7230489e800009281019290925291925062003ce89173ffffffffffffffffffffffffffffffffffffffff1690634d778ad190602401602060405180830381865afa15801562003c75573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003c9b91906200d05b565b8262003cbc6b033b2e3c9fd0803ce8000000678ac7230489e800006200d01b565b62003cc891906200d13a565b6040518060600160405280602381526020016201da0c602391396200c89c565b600480546040517f5427c93800000000000000000000000000000000000000000000000000000000815262003db49273ffffffffffffffffffffffffffffffffffffffff90921691635427c9389162003d4f91678ac7230489e80000910190815260200190565b602060405180830381865afa15801562003d6d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003d9391906200d05b565b6b033b2e3c9fd0803ce800000062003cbc84678ac7230489e800006200d01b565b505050565b6001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b15801562003e3957600080fd5b505af115801562003e4e573d6000803e3d6000fd5b5050600480546007546040517fcf33d95500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182169381019390935216925063cf33d9559150602401600060405180830381600087803b15801562003ec457600080fd5b505af115801562003ed9573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b15801562003f5d57600080fd5b505af115801562003f72573d6000803e3d6000fd5b5050600480546040517f9aa5d462000000000000000000000000000000000000000000000000000000008152678ac7230489e800009281019290925273f39fd6e51aad88f6f4ce6ab8827279cfffb92266602483015261302d604483015273ffffffffffffffffffffffffffffffffffffffff169250639aa5d4629150606401600060405180830381600087803b1580156200400d57600080fd5b505af115801562004022573d6000803e3d6000fd5b50506007546040517fe958b70400000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff260048201526000935073ffffffffffffffffffffffffffffffffffffffff909116915063e958b70490602401602060405180830381865afa158015620040ac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620040d291906200cfc5565b60075490915073ffffffffffffffffffffffffffffffffffffffff1663bf28068b620041086002678ac7230489e800006200d13a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b168152600481019190915273ffffffffffffffffffffffffffffffffffffffff84166024820152604401600060405180830381600087803b1580156200417657600080fd5b505af11580156200418b573d6000803e3d6000fd5b505050506000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166345d31f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620041ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200422591906200d05b565b6001549091506301e133809073ffffffffffffffffffffffffffffffffffffffff1663e5d6bf026200425883426200d08f565b6040518263ffffffff1660e01b81526004016200427791815260200190565b600060405180830381600087803b1580156200429257600080fd5b505af1158015620042a7573d6000803e3d6000fd5b5050505060006b033b2e3c9fd0803ce8000000836002678ac7230489e80000620042d291906200d13a565b620042de91906200d01b565b620042ea91906200d13a565b905060006200430282678ac7230489e800006200d08f565b90506000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630f69630b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562004374573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200439a91906200cfc5565b73ffffffffffffffffffffffffffffffffffffffff166342568d4483620043cb6002678ac7230489e800006200d13a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815260048101929092526024820152604401602060405180830381865afa15801562004425573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200444b91906200d05b565b9050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d41ee0f76040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620044b857600080fd5b505af1158015620044cd573d6000803e3d6000fd5b5050505062004543600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fe14112d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200348e573d6000803e3d6000fd5b620045fc600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663609ae3176040518163ffffffff1660e01b8152600401602060405180830381865afa158015620045b5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620045db91906200d05b565b426040518060600160405280602381526020016201daa8602391396200c89c565b6200466e600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166345d31f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620036b5573d6000803e3d6000fd5b620047ba600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620046e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200470691906200d05b565b60048054604080517fa7a5eccc000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9092169263a7a5eccc9282820192602092908290030181865afa15801562004774573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200479a91906200d05b565b6040518060600160405280602581526020016201da2f602591396200c89c565b505050505050565b6001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b1580156200484257600080fd5b505af115801562004857573d6000803e3d6000fd5b5050600480546007546040517fcf33d95500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182169381019390935216925063cf33d9559150602401600060405180830381600087803b158015620048cd57600080fd5b505af1158015620048e2573d6000803e3d6000fd5b50506001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b1580156200496657600080fd5b505af11580156200497b573d6000803e3d6000fd5b5050600480546040517fbb04b1930000000000000000000000000000000000000000000000000000000081526127109281019290925273ffffffffffffffffffffffffffffffffffffffff16925063bb04b1939150602401600060405180830381600087803b158015620049ee57600080fd5b505af115801562004a03573d6000803e3d6000fd5b5050600154604080518082018252600381527f5053320000000000000000000000000000000000000000000000000000000000602082015290517ff28dceb300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909216935063f28dceb3925062004a8f916004016200d125565b600060405180830381600087803b15801562004aaa57600080fd5b505af115801562004abf573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b15801562004b4357600080fd5b505af115801562004b58573d6000803e3d6000fd5b5050600480546040517f9aa5d462000000000000000000000000000000000000000000000000000000008152678ac7230489e800009281019290925273f39fd6e51aad88f6f4ce6ab8827279cfffb92266602483015261302d604483015273ffffffffffffffffffffffffffffffffffffffff169250639aa5d462915060640162001ee6565b62004c89600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663788c6bfe6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562004c50573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004c7691906200d05b565b6b033b2e3c9fd0803ce80000006200c78a565b62004d29600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e941fa786040518163ffffffff1660e01b8152600401602060405180830381865afa15801562004cfb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004d2191906200d05b565b60006200c78a565b62000ead600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ef8d96036040518163ffffffff1660e01b8152600401602060405180830381865afa15801562004d9b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004dc191906200d05b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6200c78a565b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b15801562004e6857600080fd5b505af115801562004e7d573d6000803e3d6000fd5b5050600480546040517f9aa5d462000000000000000000000000000000000000000000000000000000008152678ac7230489e80000928101929092527390f79bf6eb2c4f870365e785982e1f101e93b906602483015261302d604483015273ffffffffffffffffffffffffffffffffffffffff169250639aa5d4629150606401600060405180830381600087803b15801562004f1857600080fd5b505af115801562004f2d573d6000803e3d6000fd5b5050600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526024810183905260006044820152606481019290925273ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b15801562004fb357600080fd5b505af115801562004fc8573d6000803e3d6000fd5b5050604051674563918244f40000815273f39fd6e51aad88f6f4ce6ab8827279cfffb9226692507390f79bf6eb2c4f870365e785982e1f101e93b90691507fd8ae9b9ba89e637bcb66a69ac91e8f688018e81d6f92c57e02226425c8efbdf69060200160405180910390a36001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527390f79bf6eb2c4f870365e785982e1f101e93b906600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b158015620050b357600080fd5b505af1158015620050c8573d6000803e3d6000fd5b5050600480546040517f05fe138b000000000000000000000000000000000000000000000000000000008152674563918244f400009281019290925273f39fd6e51aad88f6f4ce6ab8827279cfffb92266602483015273ffffffffffffffffffffffffffffffffffffffff1692506305fe138b91506044016020604051808303816000875af115801562005160573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200518691906200d05b565b50600554620051d69073ffffffffffffffffffffffffffffffffffffffff167390f79bf6eb2c4f870365e785982e1f101e93b90662000cae674563918244f40000678ac7230489e800006200d075565b6006546200522f9073ffffffffffffffffffffffffffffffffffffffff1673f39fd6e51aad88f6f4ce6ab8827279cfffb92266674563918244f4000062000d19678ac7230489e8000068056bc75e2d631000006200d075565b620052e3600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fe14112d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620052a1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620052c791906200d05b565b62000de6674563918244f40000678ac7230489e800006200d075565b62000ead600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663743753596040518163ffffffff1660e01b8152600401602060405180830381865afa158015620052a1573d6000803e3d6000fd5b6001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b158015620053d557600080fd5b505af1158015620053ea573d6000803e3d6000fd5b5050600480546007546040517fcf33d95500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182169381019390935216925063cf33d9559150602401600060405180830381600087803b1580156200546057600080fd5b505af115801562005475573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b158015620054f957600080fd5b505af11580156200550e573d6000803e3d6000fd5b5050600480546040517f9aa5d462000000000000000000000000000000000000000000000000000000008152678ac7230489e800009281019290925273f39fd6e51aad88f6f4ce6ab8827279cfffb92266602483015261302d604483015273ffffffffffffffffffffffffffffffffffffffff169250639aa5d4629150606401600060405180830381600087803b158015620055a957600080fd5b505af1158015620055be573d6000803e3d6000fd5b50506007546040517fe958b70400000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff260048201526000935073ffffffffffffffffffffffffffffffffffffffff909116915063e958b70490602401602060405180830381865afa15801562005648573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200566e91906200cfc5565b600654909150620056989073ffffffffffffffffffffffffffffffffffffffff168260006200c76d565b60075473ffffffffffffffffffffffffffffffffffffffff1663bf28068b620056cb6002678ac7230489e800006200d13a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b168152600481019190915273ffffffffffffffffffffffffffffffffffffffff84166024820152604401600060405180830381600087803b1580156200573957600080fd5b505af11580156200574e573d6000803e3d6000fd5b505060065462002b73925073ffffffffffffffffffffffffffffffffffffffff1690508262000cae6002678ac7230489e800006200d13a565b6001546040517f06447d5600000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116906306447d5690602401600060405180830381600087803b1580156200580757600080fd5b505af11580156200581c573d6000803e3d6000fd5b50506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f61081c1500000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff909116925063c31eb0e09150602401600060405180830381600087803b158015620058ac57600080fd5b505af1158015620058c1573d6000803e3d6000fd5b5050600480546040517fcf33d95500000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff29281019290925273ffffffffffffffffffffffffffffffffffffffff16925063cf33d9559150602401600060405180830381600087803b1580156200594657600080fd5b505af11580156200595b573d6000803e3d6000fd5b50506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f61081c1500000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff909116925063c31eb0e09150602401600060405180830381600087803b158015620059eb57600080fd5b505af115801562005a00573d6000803e3d6000fd5b5050600480546040517f078c478100000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff29281019290925273ffffffffffffffffffffffffffffffffffffffff16925063078c47819150602401600060405180830381600087803b15801562005a8557600080fd5b505af115801562005a9a573d6000803e3d6000fd5b50506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f61081c1500000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff909116925063c31eb0e09150602401600060405180830381600087803b15801562005b2a57600080fd5b505af115801562005b3f573d6000803e3d6000fd5b5050600480546040517f5664cacf00000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff29281019290925273ffffffffffffffffffffffffffffffffffffffff169250635664cacf9150602401600060405180830381600087803b15801562005bc457600080fd5b505af115801562005bd9573d6000803e3d6000fd5b50506001546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f61081c1500000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff909116925063c31eb0e09150602401600060405180830381600087803b15801562005c6957600080fd5b505af115801562005c7e573d6000803e3d6000fd5b5050600480546040517fbb04b19300000000000000000000000000000000000000000000000000000000815260009281019290925273ffffffffffffffffffffffffffffffffffffffff16925063bb04b1939150602401620014f2565b6007546040517fc8cca9e500000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff2600482015273ffffffffffffffffffffffffffffffffffffffff9091169063c8cca9e590602401600060405180830381600087803b15801562005d5b57600080fd5b505af115801562005d70573d6000803e3d6000fd5b5050600154604080518082018252600381527f5053310000000000000000000000000000000000000000000000000000000000602082015290517ff28dceb300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909216935063f28dceb3925062005dfc916004016200d125565b600060405180830381600087803b15801562005e1757600080fd5b505af115801562005e2c573d6000803e3d6000fd5b50506001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b15801562005eb057600080fd5b505af115801562005ec5573d6000803e3d6000fd5b5050600480546007546040517fcf33d95500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182169381019390935216925063cf33d955915060240162001ee6565b6001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b15801562005fa657600080fd5b505af115801562005fbb573d6000803e3d6000fd5b5050600480546007546040517fcf33d95500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182169381019390935216925063cf33d9559150602401600060405180830381600087803b1580156200603157600080fd5b505af115801562006046573d6000803e3d6000fd5b5050600154604080518082018252600381527f5053340000000000000000000000000000000000000000000000000000000000602082015290517ff28dceb300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909216935063f28dceb3925062005dfc916004016200d125565b600154604080518082018252600281527f5a30000000000000000000000000000000000000000000000000000000000000602082015290517ff28dceb300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163f28dceb3916200615a916004016200d125565b600060405180830381600087803b1580156200617557600080fd5b505af11580156200618a573d6000803e3d6000fd5b50506001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b1580156200620e57600080fd5b505af115801562006223573d6000803e3d6000fd5b5050600480546040517f5664cacf00000000000000000000000000000000000000000000000000000000815260009281019290925273ffffffffffffffffffffffffffffffffffffffff169250635664cacf915060240162001ee6565b6001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b1580156200630057600080fd5b505af115801562006315573d6000803e3d6000fd5b5050600480546007546040517fcf33d95500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182169381019390935216925063cf33d9559150602401600060405180830381600087803b1580156200638b57600080fd5b505af1158015620063a0573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b1580156200642457600080fd5b505af115801562006439573d6000803e3d6000fd5b5050600480546040517f9aa5d462000000000000000000000000000000000000000000000000000000008152678ac7230489e800009281019290925273f39fd6e51aad88f6f4ce6ab8827279cfffb92266602483015261302d604483015273ffffffffffffffffffffffffffffffffffffffff169250639aa5d4629150606401600060405180830381600087803b158015620064d457600080fd5b505af1158015620064e9573d6000803e3d6000fd5b50506007546040517fe958b70400000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff260048201526000935073ffffffffffffffffffffffffffffffffffffffff909116915063e958b70490602401602060405180830381865afa15801562006573573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200659991906200cfc5565b60075490915073ffffffffffffffffffffffffffffffffffffffff1663bf28068b620065cf6002678ac7230489e800006200d13a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b168152600481019190915273ffffffffffffffffffffffffffffffffffffffff84166024820152604401600060405180830381600087803b1580156200663d57600080fd5b505af115801562006652573d6000803e3d6000fd5b505050506000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166345d31f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620066c6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620066ec91906200d05b565b6001549091506301e133809073ffffffffffffffffffffffffffffffffffffffff1663e5d6bf026200671f83426200d08f565b6040518263ffffffff1660e01b81526004016200673e91815260200190565b600060405180830381600087803b1580156200675957600080fd5b505af11580156200676e573d6000803e3d6000fd5b5050505060006b033b2e3c9fd0803ce8000000836002678ac7230489e800006200679991906200d13a565b620067a591906200d01b565b620067b191906200d13a565b9050600081600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663030dbb046040518163ffffffff1660e01b8152600401602060405180830381865afa15801562006824573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200684a91906200d05b565b6200685691906200d08f565b905062006911600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fe14112d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620068ca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620068f091906200d05b565b826040518060600160405280602581526020016201da2f602591396200c89c565b5050505050565b6000611f4060c86101f4611d4c60405162006933906200cf94565b938452602084019290925260408301526060820152608001604051809103906000f08015801562006968573d6000803e3d6000fd5b506001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291925073ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b158015620069ea57600080fd5b505af1158015620069ff573d6000803e3d6000fd5b5050600480546007546040517fcf33d95500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182169381019390935216925063cf33d9559150602401600060405180830381600087803b15801562006a7557600080fd5b505af115801562006a8a573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b15801562006b0e57600080fd5b505af115801562006b23573d6000803e3d6000fd5b5050600480546040517f9aa5d462000000000000000000000000000000000000000000000000000000008152678ac7230489e800009281019290925273f39fd6e51aad88f6f4ce6ab8827279cfffb92266602483015261302d604483015273ffffffffffffffffffffffffffffffffffffffff169250639aa5d4629150606401600060405180830381600087803b15801562006bbe57600080fd5b505af115801562006bd3573d6000803e3d6000fd5b50506007546040517fe958b70400000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff260048201526000935073ffffffffffffffffffffffffffffffffffffffff909116915063e958b70490602401602060405180830381865afa15801562006c5d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062006c8391906200cfc5565b60075490915073ffffffffffffffffffffffffffffffffffffffff1663bf28068b62006cb96002678ac7230489e800006200d13a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b168152600481019190915273ffffffffffffffffffffffffffffffffffffffff84166024820152604401600060405180830381600087803b15801562006d2757600080fd5b505af115801562006d3c573d6000803e3d6000fd5b505050506000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fe14112d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562006db0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062006dd691906200d05b565b90506000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663743753596040518163ffffffff1660e01b8152600401602060405180830381865afa15801562006e48573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062006e6e91906200d05b565b6001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291925073ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b15801562006eef57600080fd5b505af115801562006f04573d6000803e3d6000fd5b5050600480546040517f5664cacf00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8981169382019390935291169250635664cacf9150602401600060405180830381600087803b15801562006f7857600080fd5b505af115801562006f8d573d6000803e3d6000fd5b50506040517f42568d440000000000000000000000000000000000000000000000000000000081526004810185905260248101849052620015a6925073ffffffffffffffffffffffffffffffffffffffff871691506342568d4490604401602060405180830381865afa15801562007009573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200702f91906200d05b565b60048054604080517f45d31f9d000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff909216926345d31f9d9282820192602092908290030181865afa1580156200709d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620070c391906200d05b565b6040518060400160405280601a81526020017f426f72726f77207261746520646f6573206e6f74206d617463680000000000008152506200c89c565b600254604080517f61d027b3000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff16916361d027b39160048083019260209291908290030181865afa15801562007170573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200719691906200cfc5565b6001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291925073ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b1580156200721757600080fd5b505af11580156200722c573d6000803e3d6000fd5b5050600480546007546040517fcf33d95500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182169381019390935216925063cf33d9559150602401600060405180830381600087803b158015620072a257600080fd5b505af1158015620072b7573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b1580156200733b57600080fd5b505af115801562007350573d6000803e3d6000fd5b5050600480546040517f9aa5d462000000000000000000000000000000000000000000000000000000008152678ac7230489e800009281019290925273f39fd6e51aad88f6f4ce6ab8827279cfffb92266602483015261302d604483015273ffffffffffffffffffffffffffffffffffffffff169250639aa5d4629150606401600060405180830381600087803b158015620073eb57600080fd5b505af115801562007400573d6000803e3d6000fd5b5050600154600480546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821692810192909252909116925063ca669fa79150602401600060405180830381600087803b1580156200747857600080fd5b505af11580156200748d573d6000803e3d6000fd5b50506005546040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152612710602483015290911692506340c10f199150604401600060405180830381600087803b1580156200750757600080fd5b505af11580156200751c573d6000803e3d6000fd5b50506007546040517fe958b70400000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff260048201526000935073ffffffffffffffffffffffffffffffffffffffff909116915063e958b70490602401602060405180830381865afa158015620075a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620075cc91906200cfc5565b60075490915073ffffffffffffffffffffffffffffffffffffffff1663bf28068b620076026002678ac7230489e800006200d13a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b168152600481019190915273ffffffffffffffffffffffffffffffffffffffff84166024820152604401600060405180830381600087803b1580156200767057600080fd5b505af115801562007685573d6000803e3d6000fd5b505050506000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166345d31f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620076f9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200771f91906200d05b565b90506301e1338060006b033b2e3c9fd0803ce8000000836200774b6002678ac7230489e800006200d13a565b6200775791906200d01b565b6200776391906200d13a565b90506000620f42406200777f83678ac7230489e800006200d08f565b6200778b91906200d075565b90506000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630f69630b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620077fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200782391906200cfc5565b73ffffffffffffffffffffffffffffffffffffffff166342568d4483620f42406200785787678ac7230489e800006200d08f565b6200786391906200d075565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815260048101929092526024820152604401602060405180830381865afa158015620078bd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620078e391906200d05b565b60015490915073ffffffffffffffffffffffffffffffffffffffff1663e5d6bf026200791086426200d08f565b6040518263ffffffff1660e01b81526004016200792f91815260200190565b600060405180830381600087803b1580156200794a57600080fd5b505af11580156200795f573d6000803e3d6000fd5b5050600480546005546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8d811694820194909452600095509183169350635427c9389216906370a0823190602401602060405180830381865afa158015620079e5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062007a0b91906200d05b565b6040518263ffffffff1660e01b815260040162007a2a91815260200190565b602060405180830381865afa15801562007a48573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062007a6e91906200d05b565b60005460045491925073ffffffffffffffffffffffffffffffffffffffff6201000090910481169163eebab8ef9160019116620f42408862007aba6002678ac7230489e800006200d13a565b62007ac691906200d08f565b62007ad291906200d075565b6040518463ffffffff1660e01b815260040162007af2939291906200d176565b600060405180830381600087803b15801562007b0d57600080fd5b505af115801562007b22573d6000803e3d6000fd5b5050600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526000602482018190526044820152606481019290925273ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b15801562007ba857600080fd5b505af115801562007bbd573d6000803e3d6000fd5b505060075473ffffffffffffffffffffffffffffffffffffffff1691507fef3653ded679720ab04913b6f3820be7cedc8286d42ff5dd8dff17e91bd2964c905062007c0c83620f42406200d075565b60405190815260200160405180910390a260075473ffffffffffffffffffffffffffffffffffffffff1663ca9505e462007c506002678ac7230489e800006200d13a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b168152600481019190915260006024820152620f42406044820152606401600060405180830381600087803b15801562007cb257600080fd5b505af115801562007cc7573d6000803e3d6000fd5b5050505062007d84600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fe14112d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562007d3d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062007d6391906200d05b565b846040518060600160405280602c81526020016201da54602c91396200c89c565b6005546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a8116600483015262007e5c9216906370a0823190602401602060405180830381865afa15801562007df8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062007e1e91906200d05b565b60006040518060400160405280601e81526020017f64546f6b656e2072656d61696e7320696e2074686520747265617375727900008152506200c89c565b62007f15600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166345d31f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562007ece573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062007ef491906200d05b565b836040518060600160405280602581526020016201d9e7602591396200c89c565b5050505050505050565b6001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b15801562007f9f57600080fd5b505af115801562007fb4573d6000803e3d6000fd5b5050600480546007546040517fcf33d95500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182169381019390935216925063cf33d9559150602401600060405180830381600087803b1580156200802a57600080fd5b505af11580156200803f573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b158015620080c357600080fd5b505af1158015620080d8573d6000803e3d6000fd5b5050600480546040517f9aa5d462000000000000000000000000000000000000000000000000000000008152678ac7230489e800009281019290925273f39fd6e51aad88f6f4ce6ab8827279cfffb92266602483015261302d604483015273ffffffffffffffffffffffffffffffffffffffff169250639aa5d4629150606401600060405180830381600087803b1580156200817357600080fd5b505af115801562008188573d6000803e3d6000fd5b50506007546040517fe958b70400000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff260048201526000935073ffffffffffffffffffffffffffffffffffffffff909116915063e958b70490602401602060405180830381865afa15801562008212573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200823891906200cfc5565b600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600060048201819052602482018190526044820152606481019290925291925073ffffffffffffffffffffffffffffffffffffffff9091169063491cc7c290608401600060405180830381600087803b158015620082bf57600080fd5b505af1158015620082d4573d6000803e3d6000fd5b505060075473ffffffffffffffffffffffffffffffffffffffff80851693501690507f312a5e5e1079f5dda4e95dbbd0b908b291fd5b992ef22073643ab691572c5b526200832c6002678ac7230489e800006200d13a565b60405190815260200160405180910390a360075473ffffffffffffffffffffffffffffffffffffffff1663bf28068b620083706002678ac7230489e800006200d13a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b168152600481019190915273ffffffffffffffffffffffffffffffffffffffff841660248201526044015b600060405180830381600087803b158015620083df57600080fd5b505af115801562006911573d6000803e3d6000fd5b60008054610100900460ff1615620084155750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620085595760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091620084bd917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016200d1dc565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052620084f7916200d226565b6000604051808303816000865af19150503d806000811462008536576040519150601f19603f3d011682016040523d82523d6000602084013e6200853b565b606091505b50915050808060200190518101906200855591906200d244565b9150505b919050565b600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600060048201819052602482018190526044820152606481019290925273ffffffffffffffffffffffffffffffffffffffff169063491cc7c290608401600060405180830381600087803b158015620085e057600080fd5b505af1158015620085f5573d6000803e3d6000fd5b505050507fd7a183c9fe85b604c25d54bd676e0866f6c13bcca9fb9b0850213de118fdc99c6127106040516200862d91815260200190565b60405180910390a16001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b158015620086b557600080fd5b505af1158015620086ca573d6000803e3d6000fd5b5050600480546040517fbb04b1930000000000000000000000000000000000000000000000000000000081526127109281019290925273ffffffffffffffffffffffffffffffffffffffff16925063bb04b1939150602401600060405180830381600087803b1580156200873d57600080fd5b505af115801562008752573d6000803e3d6000fd5b5050505062000ead600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ef8d96036040518163ffffffff1660e01b8152600401602060405180830381865afa158015620087c8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620087ee91906200d05b565b6127106040518060600160405280602881526020016201da80602891396200c89c565b600254604080517f61d027b3000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff16916361d027b39160048083019260209291908290030181865afa15801562008882573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620088a891906200cfc5565b6001546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291925073ffffffffffffffffffffffffffffffffffffffff16906306447d5690602401600060405180830381600087803b1580156200892957600080fd5b505af11580156200893e573d6000803e3d6000fd5b5050600480546007546040517fcf33d95500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182169381019390935216925063cf33d9559150602401600060405180830381600087803b158015620089b457600080fd5b505af1158015620089c9573d6000803e3d6000fd5b5050600480546040517fb6ac642a00000000000000000000000000000000000000000000000000000000815260329281019290925273ffffffffffffffffffffffffffffffffffffffff16925063b6ac642a9150602401600060405180830381600087803b15801562008a3b57600080fd5b505af115801562008a50573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562008abf57600080fd5b505af115801562008ad4573d6000803e3d6000fd5b50506001546040517f06447d5600000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff90911692506306447d569150602401600060405180830381600087803b15801562008b5857600080fd5b505af115801562008b6d573d6000803e3d6000fd5b5050600480546040517f9aa5d462000000000000000000000000000000000000000000000000000000008152678ac7230489e800009281019290925273f39fd6e51aad88f6f4ce6ab8827279cfffb92266602483015261302d604483015273ffffffffffffffffffffffffffffffffffffffff169250639aa5d4629150606401600060405180830381600087803b15801562008c0857600080fd5b505af115801562008c1d573d6000803e3d6000fd5b50506006546040517f70a0823100000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660048201526000935073ffffffffffffffffffffffffffffffffffffffff90911691506370a0823190602401602060405180830381865afa15801562008ca7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062008ccd91906200d05b565b600480546040517f05fe138b000000000000000000000000000000000000000000000000000000008152678ac7230489e800009281019290925273f39fd6e51aad88f6f4ce6ab8827279cfffb92266602483015291925073ffffffffffffffffffffffffffffffffffffffff909116906305fe138b906044016020604051808303816000875af115801562008d66573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062008d8c91906200d05b565b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562008df857600080fd5b505af115801562008e0d573d6000803e3d6000fd5b505060065462008e91925073ffffffffffffffffffffffffffffffffffffffff1690508361271062008e49678ac7230489e8000060326200d01b565b62008e5591906200d13a565b6040518060400160405280601d81526020017f496e636f72726563742062616c616e636520696e2074726561737572790000008152506200c962565b600654620028629073ffffffffffffffffffffffffffffffffffffffff1673f39fd6e51aad88f6f4ce6ab8827279cfffb9226661271062008edd678ac7230489e800006126de6200d01b565b62008ee991906200d13a565b62008ef590856200d08f565b6040518060400160405280601a81526020017f496e636f72726563742062616c616e636520666f7220757365720000000000008152506200c962565b600154604080518082018252600381527f5053330000000000000000000000000000000000000000000000000000000000602082015290517ff28dceb300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163f28dceb39162008fb9916004016200d125565b600060405180830381600087803b15801562008fd457600080fd5b505af115801562008fe9573d6000803e3d6000fd5b50506001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b1580156200906d57600080fd5b505af115801562009082573d6000803e3d6000fd5b5050600480546040517fb6ac642a00000000000000000000000000000000000000000000000000000000815260659281019290925273ffffffffffffffffffffffffffffffffffffffff16925063b6ac642a915060240162001ee6565b6001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b1580156200915f57600080fd5b505af115801562009174573d6000803e3d6000fd5b5050600480546007546040517fcf33d95500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182169381019390935216925063cf33d9559150602401600060405180830381600087803b158015620091ea57600080fd5b505af1158015620091ff573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b1580156200928357600080fd5b505af115801562009298573d6000803e3d6000fd5b5050600480546040517f9aa5d462000000000000000000000000000000000000000000000000000000008152678ac7230489e800009281019290925273f39fd6e51aad88f6f4ce6ab8827279cfffb92266602483015261302d604483015273ffffffffffffffffffffffffffffffffffffffff169250639aa5d4629150606401600060405180830381600087803b1580156200933357600080fd5b505af115801562009348573d6000803e3d6000fd5b50506007546040517fe958b70400000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff260048201526000935073ffffffffffffffffffffffffffffffffffffffff909116915063e958b70490602401602060405180830381865afa158015620093d2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620093f891906200cfc5565b60075490915073ffffffffffffffffffffffffffffffffffffffff1663bf28068b6200942e6002678ac7230489e800006200d13a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b168152600481019190915273ffffffffffffffffffffffffffffffffffffffff84166024820152604401600060405180830381600087803b1580156200949c57600080fd5b505af1158015620094b1573d6000803e3d6000fd5b50678ac7230489e80000925060009150620094d090506002836200d13a565b620094dc90836200d075565b90506000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630f69630b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200954e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200957491906200cfc5565b6040517f42568d44000000000000000000000000000000000000000000000000000000008152600481018590526024810184905273ffffffffffffffffffffffffffffffffffffffff91909116906342568d4490604401602060405180830381865afa158015620095e9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200960f91906200d05b565b9050620015a681600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166345d31f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562009684573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620096aa91906200d05b565b6040518060400160405280601881526020017f426f72726f77207261746520697320696e636f727265637400000000000000008152506200c89c565b6001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b1580156200976657600080fd5b505af11580156200977b573d6000803e3d6000fd5b5050600480546007546040517fcf33d95500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182169381019390935216925063cf33d9559150602401600060405180830381600087803b158015620097f157600080fd5b505af115801562009806573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b1580156200988a57600080fd5b505af11580156200989f573d6000803e3d6000fd5b5050600480546040517f9aa5d462000000000000000000000000000000000000000000000000000000008152678ac7230489e800009281019290925273f39fd6e51aad88f6f4ce6ab8827279cfffb92266602483015261302d604483015273ffffffffffffffffffffffffffffffffffffffff169250639aa5d4629150606401600060405180830381600087803b1580156200993a57600080fd5b505af11580156200994f573d6000803e3d6000fd5b50506007546040517fe958b70400000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff260048201526000935073ffffffffffffffffffffffffffffffffffffffff909116915063e958b70490602401602060405180830381865afa158015620099d9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620099ff91906200cfc5565b60075490915073ffffffffffffffffffffffffffffffffffffffff1663bf28068b62009a356002678ac7230489e800006200d13a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b168152600481019190915273ffffffffffffffffffffffffffffffffffffffff84166024820152604401600060405180830381600087803b15801562009aa357600080fd5b505af115801562009ab8573d6000803e3d6000fd5b5050600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526000602482018190526044820152606481019290925273ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b15801562009b3e57600080fd5b505af115801562009b53573d6000803e3d6000fd5b505060075473ffffffffffffffffffffffffffffffffffffffff1691507f2fe77b1c99aca6b022b8efc6e3e8dd1b48b30748709339b65c50ef3263443e09905062009ba86002678ac7230489e800006200d13a565b604080519182526001602083015260009082015260600160405180910390a260075473ffffffffffffffffffffffffffffffffffffffff1663ca9505e462009bfa6002678ac7230489e800006200d13a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815260048101919091526001602482015260006044820152606401620083c4565b6001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b15801562009cc557600080fd5b505af115801562009cda573d6000803e3d6000fd5b5050600480546007546040517fcf33d95500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182169381019390935216925063cf33d9559150602401600060405180830381600087803b15801562009d5057600080fd5b505af115801562009d65573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b15801562009de957600080fd5b505af115801562009dfe573d6000803e3d6000fd5b5050600480546040517f9aa5d462000000000000000000000000000000000000000000000000000000008152678ac7230489e800009281019290925273f39fd6e51aad88f6f4ce6ab8827279cfffb92266602483015261302d604483015273ffffffffffffffffffffffffffffffffffffffff169250639aa5d4629150606401600060405180830381600087803b15801562009e9957600080fd5b505af115801562009eae573d6000803e3d6000fd5b50506007546040517fe958b70400000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff260048201526000935073ffffffffffffffffffffffffffffffffffffffff909116915063e958b70490602401602060405180830381865afa15801562009f38573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062009f5e91906200cfc5565b60075490915073ffffffffffffffffffffffffffffffffffffffff1663bf28068b62009f946002678ac7230489e800006200d13a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b168152600481019190915273ffffffffffffffffffffffffffffffffffffffff84166024820152604401600060405180830381600087803b1580156200a00257600080fd5b505af11580156200a017573d6000803e3d6000fd5b505050506000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166345d31f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200a08b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200a0b191906200d05b565b6001549091506301e133809073ffffffffffffffffffffffffffffffffffffffff1663e5d6bf026200a0e483426200d08f565b6040518263ffffffff1660e01b81526004016200a10391815260200190565b600060405180830381600087803b1580156200a11e57600080fd5b505af11580156200a133573d6000803e3d6000fd5b5050505060006b033b2e3c9fd0803ce8000000836002678ac7230489e800006200a15e91906200d13a565b6200a16a91906200d01b565b6200a17691906200d13a565b905060006200a18e82678ac7230489e800006200d08f565b60005460045491925073ffffffffffffffffffffffffffffffffffffffff6201000090910481169163eebab8ef9160019116856200a1d66002678ac7230489e800006200d13a565b6200a1e291906200d08f565b6040518463ffffffff1660e01b81526004016200a202939291906200d176565b600060405180830381600087803b1580156200a21d57600080fd5b505af11580156200a232573d6000803e3d6000fd5b505060075473ffffffffffffffffffffffffffffffffffffffff16915063ca9505e490506200a26b6002678ac7230489e800006200d13a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815260048101919091526064602482018190526000604483015201600060405180830381600087803b1580156200a2cb57600080fd5b505af11580156200a2e0573d6000803e3d6000fd5b50505050620069116305f5e100678ac7230489e80000836b033b2e3c9fd0803ce80000006200a31091906200d01b565b6200a31c91906200d13a565b6200a32891906200d13a565b6305f5e100600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663788c6bfe6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200a39b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200a3c191906200d05b565b6200a3cd91906200d13a565b6040518060600160405280602c81526020016201da54602c91396200c89c565b600254604080517f61d027b3000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff16916361d027b39160048083019260209291908290030181865afa1580156200a45e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200a48491906200cfc5565b6001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291925073ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b1580156200a50557600080fd5b505af11580156200a51a573d6000803e3d6000fd5b5050600480546007546040517fcf33d95500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182169381019390935216925063cf33d9559150602401600060405180830381600087803b1580156200a59057600080fd5b505af11580156200a5a5573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b1580156200a62957600080fd5b505af11580156200a63e573d6000803e3d6000fd5b5050600480546040517f9aa5d462000000000000000000000000000000000000000000000000000000008152678ac7230489e800009281019290925273f39fd6e51aad88f6f4ce6ab8827279cfffb92266602483015261302d604483015273ffffffffffffffffffffffffffffffffffffffff169250639aa5d4629150606401600060405180830381600087803b1580156200a6d957600080fd5b505af11580156200a6ee573d6000803e3d6000fd5b505050506000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200a762573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200a78891906200d05b565b600154600480546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182169281019290925292935091169063ca669fa790602401600060405180830381600087803b1580156200a7fe57600080fd5b505af11580156200a813573d6000803e3d6000fd5b50506005546040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526024820186905290911692506340c10f199150604401600060405180830381600087803b1580156200a88c57600080fd5b505af11580156200a8a1573d6000803e3d6000fd5b50506007546040517fe958b70400000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff260048201526000935073ffffffffffffffffffffffffffffffffffffffff909116915063e958b70490602401602060405180830381865afa1580156200a92b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200a95191906200cfc5565b60075490915073ffffffffffffffffffffffffffffffffffffffff1663bf28068b6200a9876002678ac7230489e800006200d13a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b168152600481019190915273ffffffffffffffffffffffffffffffffffffffff84166024820152604401600060405180830381600087803b1580156200a9f557600080fd5b505af11580156200aa0a573d6000803e3d6000fd5b505050506000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166345d31f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200aa7e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200aaa491906200d05b565b6001549091506301e133809073ffffffffffffffffffffffffffffffffffffffff1663e5d6bf026200aad783426200d08f565b6040518263ffffffff1660e01b81526004016200aaf691815260200190565b600060405180830381600087803b1580156200ab1157600080fd5b505af11580156200ab26573d6000803e3d6000fd5b5050600480546005546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b811694820194909452600095509183169350635427c9389216906370a0823190602401602060405180830381865afa1580156200abac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200abd291906200d05b565b6040518263ffffffff1660e01b81526004016200abf191815260200190565b602060405180830381865afa1580156200ac0f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200ac3591906200d05b565b905060006b033b2e3c9fd0803ce8000000846200ac5c6002678ac7230489e800006200d13a565b6200ac6891906200d01b565b6200ac7491906200d13a565b905060006200ac856002846200d13a565b6200ac9983678ac7230489e800006200d08f565b6200aca591906200d075565b90506000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630f69630b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200ad17573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200ad3d91906200cfc5565b6040517f42568d4400000000000000000000000000000000000000000000000000000000815260048101849052678ac7230489e80000602482015273ffffffffffffffffffffffffffffffffffffffff91909116906342568d4490604401602060405180830381865afa1580156200adb9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200addf91906200d05b565b60005460045491925073ffffffffffffffffffffffffffffffffffffffff6201000090910481169163eebab8ef91600191166200ae266002678ac7230489e800006200d13a565b6040518463ffffffff1660e01b81526004016200ae46939291906200d176565b600060405180830381600087803b1580156200ae6157600080fd5b505af11580156200ae76573d6000803e3d6000fd5b505060075473ffffffffffffffffffffffffffffffffffffffff16915063ca9505e490506200aeaf6002678ac7230489e800006200d13a565b60006200aebe6002896200d13a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152600481019390935260248301919091526044820152606401600060405180830381600087803b1580156200af1d57600080fd5b505af11580156200af32573d6000803e3d6000fd5b505050506200afa8600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fe14112d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200348e573d6000803e3d6000fd5b6005546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b811660048301526200b0989216906370a0823190602401602060405180830381865afa1580156200b01c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200b04291906200d05b565b60045473ffffffffffffffffffffffffffffffffffffffff16634d778ad16200b06d6002896200d13a565b6200b07990896200d075565b6040518263ffffffff1660e01b8152600401620035c391815260200190565b6200b10a600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166345d31f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620036b5573d6000803e3d6000fd5b505050505050505050565b6001546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff909116906306447d5690602401600060405180830381600087803b1580156200b19557600080fd5b505af11580156200b1aa573d6000803e3d6000fd5b50506003546040517f4910832f0000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff9091169250634910832f9150602401600060405180830381600087803b1580156200b22e57600080fd5b505af11580156200b243573d6000803e3d6000fd5b505060048054604080517f8456cb59000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9092169450638456cb599350808301926000929182900301818387803b1580156200b2b157600080fd5b505af11580156200b2c6573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200b33557600080fd5b505af11580156200b34a573d6000803e3d6000fd5b50506001546040517f06447d5600000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff90911692506306447d569150602401600060405180830381600087803b1580156200b3ce57600080fd5b505af11580156200b3e3573d6000803e3d6000fd5b5050600154604080518082018252601081527f5061757361626c653a2070617573656400000000000000000000000000000000602082015290517ff28dceb300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909216935063f28dceb392506200b46f916004016200d125565b600060405180830381600087803b1580156200b48a57600080fd5b505af11580156200b49f573d6000803e3d6000fd5b5050600480546040517f9aa5d462000000000000000000000000000000000000000000000000000000008152678ac7230489e80000928101929092527390f79bf6eb2c4f870365e785982e1f101e93b906602483015261302d604483015273ffffffffffffffffffffffffffffffffffffffff169250639aa5d4629150606401600060405180830381600087803b1580156200b53a57600080fd5b505af11580156200b54f573d6000803e3d6000fd5b5050600154604080518082018252601081527f5061757361626c653a2070617573656400000000000000000000000000000000602082015290517ff28dceb300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909216935063f28dceb392506200b5db916004016200d125565b600060405180830381600087803b1580156200b5f657600080fd5b505af11580156200b60b573d6000803e3d6000fd5b5050600480546040517f05fe138b000000000000000000000000000000000000000000000000000000008152674563918244f40000928101929092527390f79bf6eb2c4f870365e785982e1f101e93b906602483015273ffffffffffffffffffffffffffffffffffffffff1692506305fe138b91506044016020604051808303816000875af11580156200b6a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200b6c991906200d05b565b50600154604080518082018252601081527f5061757361626c653a2070617573656400000000000000000000000000000000602082015290517ff28dceb300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163f28dceb3916200b752916004016200d125565b600060405180830381600087803b1580156200b76d57600080fd5b505af11580156200b782573d6000803e3d6000fd5b5050600480546040517fbf28068b0000000000000000000000000000000000000000000000000000000081526001928101929092527390f79bf6eb2c4f870365e785982e1f101e93b906602483015273ffffffffffffffffffffffffffffffffffffffff16925063bf28068b9150604401600060405180830381600087803b1580156200b80e57600080fd5b505af11580156200b823573d6000803e3d6000fd5b5050600154604080518082018252601081527f5061757361626c653a2070617573656400000000000000000000000000000000602082015290517ff28dceb300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909216935063f28dceb392506200b8af916004016200d125565b600060405180830381600087803b1580156200b8ca57600080fd5b505af11580156200b8df573d6000803e3d6000fd5b5050600480546040517fca9505e4000000000000000000000000000000000000000000000000000000008152600192810192909252600060248301819052604483015273ffffffffffffffffffffffffffffffffffffffff16925063ca9505e49150606401620014f2565b6200b9bc600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a4e8273e6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562004cfb573d6000803e3d6000fd5b600180546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481019290925260006024830181905260448301819052606483015273ffffffffffffffffffffffffffffffffffffffff169063491cc7c290608401600060405180830381600087803b1580156200ba3e57600080fd5b505af11580156200ba53573d6000803e3d6000fd5b505060075460405173ffffffffffffffffffffffffffffffffffffffff90911692507fe076020e7eac3915d33aec40c24f95e73eb6c9921ff89747d50aa8fd934d2c019150600090a26001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b1580156200bb1c57600080fd5b505af11580156200bb31573d6000803e3d6000fd5b5050600480546007546040517fcf33d95500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182169381019390935216925063cf33d9559150602401600060405180830381600087803b1580156200bba757600080fd5b505af11580156200bbbc573d6000803e3d6000fd5b505050506200bc60600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a4e8273e6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200bc32573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200bc5891906200d05b565b60016200c78a565b600480546007546040517f2e97ca2100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216938101939093526200bd0892911690632e97ca21906024015b602060405180830381865afa1580156200bcdc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200bd0291906200d244565b6200cb1d565b600480546007546040517f3e163df000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182169381019390935262000ead92911690633e163df0906024016200bcbe565b62000ead600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a7a5eccc6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562004c50573d6000803e3d6000fd5b6001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b1580156200be5d57600080fd5b505af11580156200be72573d6000803e3d6000fd5b5050600480546040517f9aa5d462000000000000000000000000000000000000000000000000000000008152678ac7230489e800009281019290925273f39fd6e51aad88f6f4ce6ab8827279cfffb92266602483015261302d604483015273ffffffffffffffffffffffffffffffffffffffff169250639aa5d4629150606401600060405180830381600087803b1580156200bf0d57600080fd5b505af11580156200bf22573d6000803e3d6000fd5b505060045473ffffffffffffffffffffffffffffffffffffffff169150637dfc6afe90506200bf5b678ac7230489e8000060026200d01b565b6040518263ffffffff1660e01b81526004016200bf7a91815260200190565b600060405180830381600087803b1580156200bf9557600080fd5b505af11580156200bfaa573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b1580156200c02e57600080fd5b505af11580156200c043573d6000803e3d6000fd5b5050600480546040517f9aa5d462000000000000000000000000000000000000000000000000000000008152678ac7230489e80000928101929092527390f79bf6eb2c4f870365e785982e1f101e93b906602483015261302d604483015273ffffffffffffffffffffffffffffffffffffffff169250639aa5d4629150606401600060405180830381600087803b1580156200c0de57600080fd5b505af11580156200c0f3573d6000803e3d6000fd5b50506005546040517f70a082310000000000000000000000000000000000000000000000000000000081527390f79bf6eb2c4f870365e785982e1f101e93b906600482015262000ead935073ffffffffffffffffffffffffffffffffffffffff90911691506370a0823190602401602060405180830381865afa1580156200c17f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200c1a591906200d05b565b62000de66002678ac7230489e800006200d13a565b6001546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff9091169063ca669fa790602401600060405180830381600087803b1580156200c23a57600080fd5b505af11580156200c24f573d6000803e3d6000fd5b5050600480546007546040517fcf33d95500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182169381019390935216925063cf33d9559150602401600060405180830381600087803b1580156200c2c557600080fd5b505af11580156200c2da573d6000803e3d6000fd5b50506001546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ca669fa79150602401600060405180830381600087803b1580156200c35e57600080fd5b505af11580156200c373573d6000803e3d6000fd5b5050600480546040517f9aa5d462000000000000000000000000000000000000000000000000000000008152678ac7230489e800009281019290925273f39fd6e51aad88f6f4ce6ab8827279cfffb92266602483015261302d604483015273ffffffffffffffffffffffffffffffffffffffff169250639aa5d4629150606401600060405180830381600087803b1580156200c40e57600080fd5b505af11580156200c423573d6000803e3d6000fd5b50506007546040517fe958b70400000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff260048201526000935073ffffffffffffffffffffffffffffffffffffffff909116915063e958b70490602401602060405180830381865afa1580156200c4ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200c4d391906200cfc5565b60075490915073ffffffffffffffffffffffffffffffffffffffff1663bf28068b6200c5096002678ac7230489e800006200d13a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b168152600481019190915273ffffffffffffffffffffffffffffffffffffffff84166024820152604401600060405180830381600087803b1580156200c57757600080fd5b505af11580156200c58c573d6000803e3d6000fd5b505060015462ed4e00925073ffffffffffffffffffffffffffffffffffffffff16905063e5d6bf026200c5c083426200d08f565b6040518263ffffffff1660e01b81526004016200c5df91815260200190565b600060405180830381600087803b1580156200c5fa57600080fd5b505af11580156200c60f573d6000803e3d6000fd5b505050506000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166345d31f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200c683573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200c6a991906200d05b565b905060006200c6f96b033b2e3c9fd0803ce80000006301e133806200c6cf86866200d01b565b6200c6db91906200d13a565b6200c6f3906b033b2e3c9fd0803ce80000006200d08f565b6200cb95565b9050620015a6600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620068ca573d6000803e3d6000fd5b62003db4838383604051806020016040528060008152506200c962565b80821462002862577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f506040516200c8189060208082526022908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b75696e60408201527f745d000000000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a8816040516200c85191906200d268565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a8826040516200c88a91906200d2b4565b60405180910390a1620028626200ccc9565b81831462003db4577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf3583816040516200c8d591906200d2f2565b60405180910390a162003db483836200c78a565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161462003db4577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf3583816040516200c94e91906200d2f2565b60405180910390a162003db483836200ce4c565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600091908616906370a0823190602401602060405180830381865afa1580156200c9d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200c9f991906200d05b565b90508281146200cb11577f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f828673ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200ca71573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200cab991908101906200d36a565b6040516020016200cacc9291906200d441565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526200cb089187906200d4c7565b60405180910390a15b6200691181846200c78a565b8062002b73577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f506040516200cb839060208082526017908201527f4572726f723a20417373657274696f6e204661696c6564000000000000000000604082015260600190565b60405180910390a162002b736200ccc9565b60008215806200cba3575081155b156200cbb2575060006200ccc3565b816200cbcc60026b033b2e3c9fd0803ce80000006200d13a565b6200cbf8907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6200d075565b6200cc0491906200d13a565b8311156040518060400160405280600281526020017f4d31000000000000000000000000000000000000000000000000000000000000815250906200cc81576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200cc7891906200d125565b60405180910390fd5b506b033b2e3c9fd0803ce80000006200cc9c6002826200d13a565b6200cca884866200d01b565b6200ccb491906200d08f565b6200ccc091906200d13a565b90505b92915050565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200ce1e5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000009282019290925260016060820152600091907f70ca10bbd0dbfd9020a9f4b13402c16cb120705e0d1c0aeab10fa353ae586fc490608001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526200cd9b92916020016200d1dc565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526200cdd5916200d226565b6000604051808303816000865af19150503d80600081146200ce14576040519150601f19603f3d011682016040523d82523d6000602084013e6200ce19565b606091505b505050505b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055565b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462002862577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f506040516200cf069060208082526025908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b61646460408201527f726573735d000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f816040516200cf3f91906200d501565b60405180910390a17f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f826040516200c88a91906200d563565b617a51806200d5a283390190565b617eb98062014ff383390190565b610b12806201ceac83390190565b73ffffffffffffffffffffffffffffffffffffffff8116811462002b7357600080fd5b6000602082840312156200cfd857600080fd5b81516200cfe5816200cfa2565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156200d056576200d0566200cfec565b500290565b6000602082840312156200d06e57600080fd5b5051919050565b6000828210156200d08a576200d08a6200cfec565b500390565b600082198211156200d0a5576200d0a56200cfec565b500190565b60005b838110156200d0c75781810151838201526020016200d0ad565b83811115620015a65750506000910152565b600081518084526200d0f38160208601602086016200d0aa565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006200ccc060208301846200d0d9565b6000826200d171577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60608101600b85106200d1b2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b93815273ffffffffffffffffffffffffffffffffffffffff92909216602083015260409091015290565b7fffffffff0000000000000000000000000000000000000000000000000000000083168152600082516200d2188160048501602087016200d0aa565b919091016004019392505050565b600082516200d23a8184602087016200d0aa565b9190910192915050565b6000602082840312156200d25757600080fd5b815180151581146200cfe557600080fd5b6040815260006200d2a660408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b905082602083015292915050565b6040815260006200d2a660408301600a81527f2020202041637475616c00000000000000000000000000000000000000000000602082015260400190565b60408152600560408201527f4572726f7200000000000000000000000000000000000000000000000000000060608201526080602082015260006200ccc060808301846200d0d9565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000602082840312156200d37d57600080fd5b815167ffffffffffffffff808211156200d39657600080fd5b818401915084601f8301126200d3ab57600080fd5b8151818111156200d3c0576200d3c06200d33b565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156200d409576200d4096200d33b565b816040528281528760208487010111156200d42357600080fd5b6200d4368360208301602088016200d0aa565b979650505050505050565b600083516200d4558184602088016200d0aa565b7f496e636f7272656374200000000000000000000000000000000000000000000090830190815283516200d49181600a8401602088016200d0aa565b7f2062616c616e6365206f6e206163636f756e743a200000000000000000000000600a9290910191820152601f01949350505050565b6040815260006200d4dc60408301856200d0d9565b905073ffffffffffffffffffffffffffffffffffffffff831660208301529392505050565b6040815260006200d53f60408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b905073ffffffffffffffffffffffffffffffffffffffff8316602083015292915050565b6040815260006200d53f60408301600a81527f2020202041637475616c0000000000000000000000000000000000000000000060208201526040019056fe60806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d00011790553480156200003a57600080fd5b506040805161018081019091526000908060c081018060018152604080518082018252600381526244414960e81b6020828101919091528301526012908201526305f5e100606082015260800160018152602001600081525081526020016040518060c001604052806002600a811115620000b957620000b962000b78565b815260408051808201825260048152635553444360e01b6020828101919091528301526006908201526305f5e100606082015260800160018152602001600081525081526020016040518060c001604052806003600a81111562000121576200012162000b78565b815260408051808201825260048152630ae8aa8960e31b602082810191909152830152601290820152644a817c8000606082015260800160028152602001600081525081526020016040518060c001604052806004600a8111156200018a576200018a62000b78565b815260408051808201825260048152634c494e4b60e01b6020828101919091528301526012908201526359682f00606082015260800160018152602001600081525081526020016040518060c001604052806005600a811115620001f257620001f262000b78565b815260408051808201825260048152631554d11560e21b602082810191909152830152601290820152633b023380606082015260800160018152602001600081525081526020016040518060c001604052806006600a8111156200025a576200025a62000b78565b815260408051808201825260058152640e6e88aa8960db1b602082810191909152830152601290820152644cd588640060608201526080016003815260200160009052905260408051610140810190915290915060009080608081018060078152602001604051806040016040528060048152602001636344414960e01b8152508152602001601260ff1681526020016305f5e100815260200160048081111562000309576200030962000b78565b8152602001600181525081526020016040518060c001604052806008600a81111562000339576200033962000b78565b81526040805180820182526005815264635553444360d81b6020828101919091528301526006908201526305f5e100606082015260800160048152602001600281525081526020016040518060c001604052806009600a811115620003a257620003a262000b78565b8152604080518082018252600581526418d554d11560da1b602082810191909152830152601290820152633b023380606082015260800160048152602001600581525081526020016040518060c00160405280600a808111156200040a576200040a62000b78565b81526040805180820182526005815264634c494e4b60d81b6020828101919091528301526012908201526359682f00606082015260800160048152602001600490529052905060005b600681101562000496576200048183826006811062000476576200047662000b8e565b6020020151620004db565b806200048d8162000ba4565b91505062000453565b5060005b6004811015620004d257620004bd82826004811062000476576200047662000b8e565b80620004c98162000ba4565b9150506200049a565b50505062000d14565b6000600282608001516004811115620004f857620004f862000b78565b14156200054e576040516200050d9062000a8c565b604051809103906000f0801580156200052a573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b03831617905590506200071e565b60038260800151600481111562000569576200056962000b78565b1415620005a4576040516200057e9062000a9a565b604051809103906000f0801580156200059b573d6000803e3d6000fd5b5090506200071e565b600182608001516004811115620005bf57620005bf62000b78565b1415620005f157816020015182602001518360400151604051620005e39062000aa8565b6200057e9392919062000c1e565b6004826080015160048111156200060c576200060c62000b78565b1415620006be576000600260008460a00151600a81111562000632576200063262000b78565b600a81111562000646576200064662000b78565b815260200190815260200160002060009054906101000a90046001600160a01b0316905082602001518360200151846040015183604051620006889062000ab6565b62000697949392919062000c5b565b604051809103906000f080158015620006b4573d6000803e3d6000fd5b509150506200071e565b60405162461bcd60e51b815260206004820152602b60248201527f74657374546f6b656e53756974653a204372656174696e6720756e6b6e6f776e60448201526a20746f6b656e207479706560a81b606482015260840160405180910390fd5b60005460208301516040516318caf8e360e31b8152620100009092046001600160a01b03169163c657c718916200075b9185919060040162000ca9565b600060405180830381600087803b1580156200077657600080fd5b505af11580156200078b573d6000803e3d6000fd5b50505050600082606001516008604051620007a69062000ac4565b91825260ff166020820152604001604051809103906000f080158015620007d1573d6000803e3d6000fd5b50905081600260008560000151600a811115620007f257620007f262000b78565b600a81111562000806576200080662000b78565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055508260600151600560008560000151600a8111156200085a576200085a62000b78565b600a8111156200086e576200086e62000b78565b8152602080820192909252604090810160009081209390935585516001600160a01b03861684526008909252909120805460ff1916600183600a811115620008ba57620008ba62000b78565b02179055508260800151600360008560000151600a811115620008e157620008e162000b78565b600a811115620008f557620008f562000b78565b81526020810191909152604001600020805460ff1916600183600481111562000922576200092262000b78565b0217905550604080518082019091526001600160a01b0380841682528281166020808401918252600780546001810182556000918252945160029095027fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688810180549686166001600160a01b031997881617905592517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c689909301805493909416929094169190911790915584015184519091600491600a811115620009eb57620009eb62000b78565b600a811115620009ff57620009ff62000b78565b8152602001908152602001600020908051906020019062000a2292919062000ad2565b5080600660008560000151600a81111562000a415762000a4162000b78565b600a81111562000a555762000a5562000b78565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550505050565b610ab1806200285183390190565b611224806200330283390190565b611758806200452683390190565b6117098062005c7e83390190565b6106ca806200738783390190565b82805462000ae09062000cd7565b90600052602060002090601f01602090048101928262000b04576000855562000b4f565b82601f1062000b1f57805160ff191683800117855562000b4f565b8280016001018555821562000b4f579182015b8281111562000b4f57825182559160200191906001019062000b32565b5062000b5d92915062000b61565b5090565b5b8082111562000b5d576000815560010162000b62565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600060001982141562000bc757634e487b7160e01b600052601160045260246000fd5b5060010190565b6000815180845260005b8181101562000bf65760208185018101518683018201520162000bd8565b8181111562000c09576000602083870101525b50601f01601f19169290920160200192915050565b60608152600062000c33606083018662000bce565b828103602084015262000c47818662000bce565b91505060ff83166040830152949350505050565b60808152600062000c70608083018762000bce565b828103602084015262000c84818762000bce565b60ff95909516604084015250506001600160a01b039190911660609091015292915050565b6001600160a01b038316815260406020820181905260009062000ccf9083018462000bce565b949350505050565b600181811c9082168062000cec57607f821691505b6020821081141562000d0e57634e487b7160e01b600052602260045260246000fd5b50919050565b611b2d8062000d246000396000f3fe6080604052600436106101635760003560e01c80638eb86e8b116100c0578063c6c3bbe611610074578063d051a62211610059578063d051a62214610490578063eebab8ef146104b0578063fa7626d4146104d057600080fd5b8063c6c3bbe614610433578063c74912d21461045357600080fd5b80639b140a85116100a55780639b140a85146103e6578063b36ba20814610406578063ba414fa61461040e57600080fd5b80638eb86e8b1461038357806398cdaadf146103a357600080fd5b80636a72bde71161011757806388327863116100fc578063883278631461030857806388f776a2146103365780638a3177a31461035657600080fd5b80636a72bde7146102c45780636ca42ae3146102e657600080fd5b8063440864fa11610148578063440864fa146102025780634b57b0be1461022f57806367b426451461028157600080fd5b806304bc3b1c1461016f57806310c7f0b9146101b557600080fd5b3661016a57005b600080fd5b34801561017b57600080fd5b5061019f61018a3660046116f6565b60086020526000908152604090205460ff1681565b6040516101ac9190611742565b60405180910390f35b3480156101c157600080fd5b506101d56101d036600461175c565b6104ea565b6040805173ffffffffffffffffffffffffffffffffffffffff9384168152929091166020830152016101ac565b34801561020e57600080fd5b5061022261021d366004611784565b610530565b6040516101ac91906117cb565b34801561023b57600080fd5b5060015461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101ac565b34801561028d57600080fd5b5061025c61029c366004611784565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156102d057600080fd5b506102e46102df36600461181c565b6105ca565b005b3480156102f257600080fd5b506102fb610730565b6040516101ac919061186b565b34801561031457600080fd5b506103286103233660046118d4565b6107b5565b6040519081526020016101ac565b34801561034257600080fd5b506102e461035136600461190b565b610888565b34801561036257600080fd5b50610328610371366004611784565b60056020526000908152604090205481565b34801561038f57600080fd5b506102e461039e366004611954565b6108b9565b3480156103af57600080fd5b5061025c6103be366004611784565b60066020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156103f257600080fd5b506102e4610401366004611993565b610a73565b6102e4610b22565b34801561041a57600080fd5b50610423610ba0565b60405190151581526020016101ac565b34801561043f57600080fd5b506102e461044e3660046119b3565b610d00565b34801561045f57600080fd5b5061048361046e366004611784565b60036020526000908152604090205460ff1681565b6040516101ac91906119d3565b34801561049c57600080fd5b506103286104ab36600461190b565b610daf565b3480156104bc57600080fd5b506102e46104cb366004611954565b610e8b565b3480156104dc57600080fd5b506000546104239060ff1681565b600781815481106104fa57600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff91821692501682565b60046020526000908152604090208054610549906119e7565b80601f0160208091040260200160405190810160405280929190818152602001828054610575906119e7565b80156105c25780601f10610597576101008083540402835291602001916105c2565b820191906000526020600020905b8154815290600101906020018083116105a557829003601f168201915b505050505081565b6000546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152620100009092049091169063ca669fa790602401600060405180830381600087803b15801561063e57600080fd5b505af1158015610652573d6000803e3d6000fd5b505050506002600085600a81111561066c5761066c611713565b600a81111561067d5761067d611713565b8152602081019190915260409081016000205490517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490529091169063095ea7b3906044016020604051808303816000875af1158015610705573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107299190611a3b565b5050505050565b60606007805480602002602001604051908101604052809291908181526020016000905b828210156107ac5760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff908116835260019182015416828401529083529092019101610754565b50505050905090565b60006002600084600a8111156107cd576107cd611713565b600a8111156107de576107de611713565b8152602081019190915260409081016000205490517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152909116906370a0823190602401602060405180830381865afa15801561085d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108819190611a5d565b9392505050565b6108b48383837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6105ca565b505050565b60016003600085600a8111156108d1576108d1611713565b600a8111156108e2576108e2611713565b815260208101919091526040016000205460ff16600481111561090757610907611713565b14610999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f74657374546f6b656e53756974653a20547279696e6720746f206275726e206160448201527f206e6f6e2d6e6f726d616c20746f6b656e00000000000000000000000000000060648201526084015b60405180910390fd5b6002600084600a8111156109af576109af611713565b600a8111156109c0576109c0611713565b8152602081019190915260409081016000205490517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526024820184905290911690639dc29fac906044015b6020604051808303816000875af1158015610a49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6d9190611a3b565b50505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604081205460ff169081600a811115610aaf57610aaf611713565b1415610b17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f20746f6b656e2077697468207375636820616464726573730000000000006044820152606401610990565b610a6d818484610888565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015610b8c57600080fd5b505af1158015610729573d6000803e3d6000fd5b60008054610100900460ff1615610bc05750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610cfb5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610c65917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc491608001611a76565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052610c9d91611abe565b6000604051808303816000865af19150503d8060008114610cda576040519150601f19603f3d011682016040523d82523d6000602084013e610cdf565b606091505b5091505080806020019051810190610cf79190611a3b565b9150505b919050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604081205460ff169081600a811115610d3c57610d3c611713565b1415610da4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f20746f6b656e2077697468207375636820616464726573730000000000006044820152606401610990565b610a6d818484610e8b565b60006002600085600a811115610dc757610dc7611713565b600a811115610dd857610dd8611713565b8152602081019190915260409081016000205490517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301529091169063dd62ed3e90604401602060405180830381865afa158015610e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e839190611a5d565b949350505050565b60026003600085600a811115610ea357610ea3611713565b600a811115610eb457610eb4611713565b815260208101919091526040016000205460ff166004811115610ed957610ed9611713565b1415610ff6576000546040517fc88a5e6d000000000000000000000000000000000000000000000000000000008152306004820152602481018390526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c88a5e6d90604401600060405180830381600087803b158015610f5657600080fd5b505af1158015610f6a573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015610fd857600080fd5b505af1158015610fec573d6000803e3d6000fd5b505050505061163c565b600380600085600a81111561100d5761100d611713565b600a81111561101e5761101e611713565b815260208101919091526040016000205460ff16600481111561104357611043611713565b14156111aa576000546040517fc88a5e6d000000000000000000000000000000000000000000000000000000008152306004820152602481018390526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c88a5e6d90604401600060405180830381600087803b1580156110c057600080fd5b505af11580156110d4573d6000803e3d6000fd5b505050506002600084600a8111156110ee576110ee611713565b600a8111156110ff576110ff611713565b8152602081019190915260409081016000205490517fa1903eab00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a1903eab90839060240160206040518083038185885af115801561117f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906111a49190611a5d565b5061163c565b60046003600085600a8111156111c2576111c2611713565b600a8111156111d3576111d3611713565b815260208101919091526040016000205460ff1660048111156111f8576111f8611713565b141561148f5760006002600085600a81111561121657611216611713565b600a81111561122757611227611713565b815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c49190611ada565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600860205260409020549091506112fb9060ff163084610e8b565b8073ffffffffffffffffffffffffffffffffffffffff1663095ea7b36002600087600a81111561132d5761132d611713565b600a81111561133e5761133e611713565b81526020810191909152604090810160002054905160e083901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602481018590526044016020604051808303816000875af11580156113c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e69190611a3b565b506002600085600a8111156113fd576113fd611713565b600a81111561140e5761140e611713565b8152602081019190915260409081016000205490517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810184905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f1990604401600060405180830381600087803b158015610fd857600080fd5b60016003600085600a8111156114a7576114a7611713565b600a8111156114b8576114b8611713565b815260208101919091526040016000205460ff1660048111156114dd576114dd611713565b14156115b4576002600084600a8111156114f9576114f9611713565b600a81111561150a5761150a611713565b8152602081019190915260409081016000205490517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f19906044016020604051808303816000875af1158015611590573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a49190611a3b565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f74657374546f6b656e53756974653a20547279696e6720746f207472616e736660448201527f657220756e6b6e6f776e20746f6b656e000000000000000000000000000000006064820152608401610990565b6002600084600a81111561165257611652611713565b600a81111561166357611663611713565b8152602081019190915260409081016000205490517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490529091169063a9059cbb90604401610a2a565b73ffffffffffffffffffffffffffffffffffffffff811681146116f357600080fd5b50565b60006020828403121561170857600080fd5b8135610881816116d1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60208101600b831061175657611756611713565b91905290565b60006020828403121561176e57600080fd5b5035919050565b8035600b8110610cfb57600080fd5b60006020828403121561179657600080fd5b61088182611775565b60005b838110156117ba5781810151838201526020016117a2565b83811115610a6d5750506000910152565b60208152600082518060208401526117ea81604085016020870161179f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000806080858703121561183257600080fd5b61183b85611775565b9350602085013561184b816116d1565b9250604085013561185b816116d1565b9396929550929360600135925050565b602080825282518282018190526000919060409081850190868401855b828110156118c7578151805173ffffffffffffffffffffffffffffffffffffffff90811686529087015116868501529284019290850190600101611888565b5091979650505050505050565b600080604083850312156118e757600080fd5b6118f083611775565b91506020830135611900816116d1565b809150509250929050565b60008060006060848603121561192057600080fd5b61192984611775565b92506020840135611939816116d1565b91506040840135611949816116d1565b809150509250925092565b60008060006060848603121561196957600080fd5b61197284611775565b92506020840135611982816116d1565b929592945050506040919091013590565b6000806000606084860312156119a857600080fd5b8335611929816116d1565b6000806000606084860312156119c857600080fd5b8335611972816116d1565b602081016005831061175657611756611713565b600181811c908216806119fb57607f821691505b60208210811415611a35577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600060208284031215611a4d57600080fd5b8151801515811461088157600080fd5b600060208284031215611a6f57600080fd5b5051919050565b7fffffffff000000000000000000000000000000000000000000000000000000008316815260008251611ab081600485016020870161179f565b919091016004019392505050565b60008251611ad081846020870161179f565b9190910192915050565b600060208284031215611aec57600080fd5b8151610881816116d156fea264697066735822122010fe735ed069aca27931edce4ba2ff14ec7886bf21b0eea685a884f9200fb49e64736f6c634300080a003360c0604052600d60808190526c2bb930b83832b21022ba3432b960991b60a090815261002e916000919061007a565b50604080518082019091526004808252630ae8aa8960e31b602090920191825261005a9160019161007a565b506002805460ff1916601217905534801561007457600080fd5b5061014e565b82805461008690610113565b90600052602060002090601f0160209004810192826100a857600085556100ee565b82601f106100c157805160ff19168380011785556100ee565b828001600101855582156100ee579182015b828111156100ee5782518255916020019190600101906100d3565b506100fa9291506100fe565b5090565b5b808211156100fa57600081556001016100ff565b600181811c9082168061012757607f821691505b6020821081141561014857634e487b7160e01b600052602260045260246000fd5b50919050565b6109548061015d6000396000f3fe6080604052600436106100cb5760003560e01c806340c10f1911610074578063a9059cbb1161004e578063a9059cbb14610225578063d0e30db014610245578063dd62ed3e1461024d57600080fd5b806340c10f19146101c357806370a08231146101e357806395d89b411461021057600080fd5b806323b872dd116100a557806323b872dd146101575780632e1a7d4d14610177578063313ce5671461019757600080fd5b806306fdde03146100df578063095ea7b31461010a57806318160ddd1461013a57600080fd5b366100da576100d8610285565b005b600080fd5b3480156100eb57600080fd5b506100f46102e0565b6040516101019190610703565b60405180910390f35b34801561011657600080fd5b5061012a61012536600461079f565b61036e565b6040519015158152602001610101565b34801561014657600080fd5b50475b604051908152602001610101565b34801561016357600080fd5b5061012a6101723660046107c9565b6103e7565b34801561018357600080fd5b506100d8610192366004610805565b6105fe565b3480156101a357600080fd5b506002546101b19060ff1681565b60405160ff9091168152602001610101565b3480156101cf57600080fd5b506100d86101de36600461079f565b6106a4565b3480156101ef57600080fd5b506101496101fe36600461081e565b60036020526000908152604090205481565b34801561021c57600080fd5b506100f46106e2565b34801561023157600080fd5b5061012a61024036600461079f565b6106ef565b6100d8610285565b34801561025957600080fd5b50610149610268366004610839565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102a490849061089b565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102ed906108b3565b80601f0160208091040260200160405190810160405280929190818152602001828054610319906108b3565b80156103665780601f1061033b57610100808354040283529160200191610366565b820191906000526020600020905b81548152906001019060200180831161034957829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103d69086815260200190565b60405180910390a350600192915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561041957600080fd5b73ffffffffffffffffffffffffffffffffffffffff8416331480159061048f575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105175773ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020548211156104d157600080fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915281208054849290610511908490610907565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061054c908490610907565b909155505073ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260408120805484929061058690849061089b565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516105ec91815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561061a57600080fd5b3360009081526003602052604081208054839290610639908490610907565b9091555050604051339082156108fc029083906000818181858888f1935050505015801561066b573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260036020526040812080548392906106d990849061089b565b90915550505050565b600180546102ed906108b3565b60006106fc3384846103e7565b9392505050565b600060208083528351808285015260005b8181101561073057858101830151858201604001528201610714565b81811115610742576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461079a57600080fd5b919050565b600080604083850312156107b257600080fd5b6107bb83610776565b946020939093013593505050565b6000806000606084860312156107de57600080fd5b6107e784610776565b92506107f560208501610776565b9150604084013590509250925092565b60006020828403121561081757600080fd5b5035919050565b60006020828403121561083057600080fd5b6106fc82610776565b6000806040838503121561084c57600080fd5b61085583610776565b915061086360208401610776565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156108ae576108ae61086c565b500190565b600181811c908216806108c757607f821691505b60208210811415610901577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000828210156109195761091961086c565b50039056fea26469706673582212206ec943fa4e3b70d8fca6c25b6aa26fa18e8f8952ce3bc4d5afcb443bf3097c0564736f6c634300080a003360806040526000600255600060035534801561001a57600080fd5b506111fa8061002a6000396000f3fe60806040526004361061016e5760003560e01c80637a28fb88116100cb578063bdd17e1c1161007f578063dd62ed3e11610059578063dd62ed3e146103ee578063ee7a7c0414610441578063f5eb42dc1461046157600080fd5b8063bdd17e1c146103ad578063cdb9a21c146103c3578063d5002f2e146103d957600080fd5b8063a1903eab116100b0578063a1903eab1461035a578063a457c2d71461036d578063a9059cbb1461038d57600080fd5b80637a28fb88146102f457806395d89b411461031457600080fd5b806323b872dd1161012257806337cfdaca1161010757806337cfdaca1461020d57806339509351146102b457806370a08231146102d457600080fd5b806323b872dd14610278578063313ce5671461029857600080fd5b806318160ddd1161015357806318160ddd1461020d578063192084511461023057806322301f6e1461025057600080fd5b806306fdde0314610185578063095ea7b3146101dd57600080fd5b366101805761017d6000610481565b50005b600080fd5b34801561019157600080fd5b5060408051808201909152601781527f4c6971756964207374616b656420457468657220322e3000000000000000000060208201525b6040516101d49190610f63565b60405180910390f35b3480156101e957600080fd5b506101fd6101f8366004610fff565b610545565b60405190151581526020016101d4565b34801561021957600080fd5b5061022261055b565b6040519081526020016101d4565b34801561023c57600080fd5b5061022261024b366004611029565b61056b565b34801561025c57600080fd5b5061027661026b366004611042565b600391909155600255565b005b34801561028457600080fd5b506101fd610293366004611064565b6105ab565b3480156102a457600080fd5b50604051601281526020016101d4565b3480156102c057600080fd5b506101fd6102cf366004610fff565b610696565b3480156102e057600080fd5b506102226102ef3660046110a0565b6106d9565b34801561030057600080fd5b5061022261030f366004611029565b61070e565b34801561032057600080fd5b5060408051808201909152600581527f737445544800000000000000000000000000000000000000000000000000000060208201526101c7565b6102226103683660046110a0565b61073a565b34801561037957600080fd5b506101fd610388366004610fff565b610745565b34801561039957600080fd5b506101fd6103a8366004610fff565b6107f9565b3480156103b957600080fd5b5061022260035481565b3480156103cf57600080fd5b5061022260025481565b3480156103e557600080fd5b50610222610806565b3480156103fa57600080fd5b506102226104093660046110bb565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b34801561044d57600080fd5b5061027661045c366004610fff565b610811565b34801561046d57600080fd5b5061022261047c3660046110a0565b61081f565b60003334806104f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f5a45524f5f4445504f534954000000000000000000000000000000000000000060448201526064015b60405180910390fd5b60006104fc8261056b565b9050806105065750805b8160036000828254610518919061111d565b909155506105289050838261084a565b61053383838761093b565b61053d8382610992565b949350505050565b60006105523384846109ea565b50600192915050565b600061056660035490565b905090565b60008061057760035490565b9050806105875750600092915050565b6105a48161059e61059760025490565b8690610b52565b90610b5e565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001602090815260408083203384529091528120548281101561066c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f5452414e534645525f414d4f554e545f455843454544535f414c4c4f57414e4360448201527f450000000000000000000000000000000000000000000000000000000000000060648201526084016104e8565b610677858585610b6a565b61068b85336106868487610bef565b6109ea565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916105529185906106869086610bfb565b73ffffffffffffffffffffffffffffffffffffffff81166000908152602081905260408120546107089061070e565b92915050565b60008061071a60025490565b90508061072a5750600092915050565b6105a48161059e61059760035490565b600061070882610481565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156107e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4445435245415345445f414c4c4f57414e43455f42454c4f575f5a45524f000060448201526064016104e8565b6107ef33856106868487610bef565b5060019392505050565b6000610552338484610b6a565b600061056660025490565b61081b8282610c07565b5050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040812054610708565b73ffffffffffffffffffffffffffffffffffffffff82166108c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4d494e545f544f5f5448455f5a45524f5f41444452455353000000000000000060448201526064016104e8565b80600260008282546108d9919061111d565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205461090e9082610bfb565b73ffffffffffffffffffffffffffffffffffffffff90921660009081526020819052604090209190915550565b6040805183815273ffffffffffffffffffffffffffffffffffffffff83811660208301528516917fed8dd430b1e4bba98e943dc5b157cf7b54d9e12916d6c474ff5733a95001d03b910160405180910390a2505050565b73ffffffffffffffffffffffffffffffffffffffff821660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6109d58461070e565b60405190815260200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff8316610a67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f415050524f56455f46524f4d5f5a45524f5f414444524553530000000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff8216610ae4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f415050524f56455f544f5f5a45524f5f4144445245535300000000000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006105a48284611135565b60006105a48284611172565b6000610b758261056b565b9050610b82848483610d64565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610be191815260200190565b60405180910390a350505050565b60006105a482846111ad565b60006105a4828461111d565b73ffffffffffffffffffffffffffffffffffffffff8216610c84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4255524e5f46524f4d5f5448455f5a45524f5f4144445245535300000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205480821115610d14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4255524e5f414d4f554e545f455843454544535f42414c414e4345000000000060448201526064016104e8565b8160026000828254610d2691906111ad565b90915550610d3690508183610bef565b73ffffffffffffffffffffffffffffffffffffffff9093166000908152602081905260409020929092555050565b73ffffffffffffffffffffffffffffffffffffffff8316610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f5452414e534645525f46524f4d5f5448455f5a45524f5f41444452455353000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff8216610e5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f5452414e534645525f544f5f5448455f5a45524f5f414444524553530000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205480821115610eee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5452414e534645525f414d4f554e545f455843454544535f42414c414e43450060448201526064016104e8565b610ef88183610bef565b73ffffffffffffffffffffffffffffffffffffffff8086166000908152602081905260408082209390935590851681522054610f349083610bfb565b73ffffffffffffffffffffffffffffffffffffffff909316600090815260208190526040902092909255505050565b600060208083528351808285015260005b81811015610f9057858101830151858201604001528201610f74565b81811115610fa2576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ffa57600080fd5b919050565b6000806040838503121561101257600080fd5b61101b83610fd6565b946020939093013593505050565b60006020828403121561103b57600080fd5b5035919050565b6000806040838503121561105557600080fd5b50508035926020909101359150565b60008060006060848603121561107957600080fd5b61108284610fd6565b925061109060208501610fd6565b9150604084013590509250925092565b6000602082840312156110b257600080fd5b6105a482610fd6565b600080604083850312156110ce57600080fd5b6110d783610fd6565b91506110e560208401610fd6565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611130576111306110ee565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561116d5761116d6110ee565b500290565b6000826111a8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000828210156111bf576111bf6110ee565b50039056fea2646970667358221220a5b4f31162ba2b8b3424cef84b31ef91d05a825243602b5fdf758ffb49b8246364736f6c634300080a003360a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a003360c06040523480156200001157600080fd5b506040516200170938038062001709833981016040819052620000349162000266565b8351849084906200004d906003906020850190620000f3565b50805162000063906004906020840190620000f3565b505050620000806200007a6200009d60201b60201c565b620000a1565b60ff9091166080526001600160a01b031660a05250620003479050565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b82805462000101906200030a565b90600052602060002090601f01602090048101928262000125576000855562000170565b82601f106200014057805160ff191683800117855562000170565b8280016001018555821562000170579182015b828111156200017057825182559160200191906001019062000153565b506200017e92915062000182565b5090565b5b808211156200017e576000815560010162000183565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c157600080fd5b81516001600160401b0380821115620001de57620001de62000199565b604051601f8301601f19908116603f0116810190828211818310171562000209576200020962000199565b816040528381526020925086838588010111156200022657600080fd5b600091505b838210156200024a57858201830151818301840152908201906200022b565b838211156200025c5760008385830101525b9695505050505050565b600080600080608085870312156200027d57600080fd5b84516001600160401b03808211156200029557600080fd5b620002a388838901620001af565b95506020870151915080821115620002ba57600080fd5b50620002c987828801620001af565b935050604085015160ff81168114620002e157600080fd5b60608601519092506001600160a01b0381168114620002ff57600080fd5b939692955090935050565b600181811c908216806200031f57607f821691505b602082108114156200034157634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05161138e6200037b600039600081816101f70152818161041f0152610600015260006101a2015261138e6000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80636f307dc3116100b257806395d89b4111610081578063a9059cbb11610066578063a9059cbb146102b5578063dd62ed3e146102c8578063f2fde38b1461030e57600080fd5b806395d89b411461029a578063a457c2d7146102a257600080fd5b80636f307dc3146101f257806370a082311461023e578063715018a6146102745780638da5cb5b1461027c57600080fd5b806323b872dd116100ee57806323b872dd14610188578063313ce5671461019b57806339509351146101cc57806340c10f19146101df57600080fd5b806306fdde0314610120578063095ea7b31461013e57806318160ddd146101615780631e9a695014610173575b600080fd5b610128610321565b604051610135919061112d565b60405180910390f35b61015161014c3660046111c9565b6103b3565b6040519015158152602001610135565b6002545b604051908152602001610135565b6101866101813660046111c9565b6103c9565b005b6101516101963660046111f3565b610491565b60405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610135565b6101516101da3660046111c9565b61057c565b6101866101ed3660046111c9565b6105c5565b6102197f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b61016561024c36600461122f565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610186610691565b60055473ffffffffffffffffffffffffffffffffffffffff16610219565b61012861071e565b6101516102b03660046111c9565b61072d565b6101516102c33660046111c9565b610805565b6101656102d6366004611251565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b61018661031c36600461122f565b610812565b60606003805461033090611284565b80601f016020809104026020016040519081016040528092919081815260200182805461035c90611284565b80156103a95780601f1061037e576101008083540402835291602001916103a9565b820191906000526020600020905b81548152906001019060200180831161038c57829003601f168201915b5050505050905090565b60006103c0338484610942565b50600192915050565b6103d33382610af5565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015610468573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048c91906112d8565b505050565b600061049e848484610ce2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6105718533858403610942565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916103c09185906105c0908690611329565b610942565b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906323b872dd906064016020604051808303816000875af115801561065e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068291906112d8565b5061068d8282610f96565b5050565b60055473ffffffffffffffffffffffffffffffffffffffff163314610712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161055b565b61071c60006110b6565b565b60606004805461033090611284565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156107ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161055b565b6107fb3385858403610942565b5060019392505050565b60006103c0338484610ce2565b60055473ffffffffffffffffffffffffffffffffffffffff163314610893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161055b565b73ffffffffffffffffffffffffffffffffffffffff8116610936576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161055b565b61093f816110b6565b50565b73ffffffffffffffffffffffffffffffffffffffff83166109e4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff8216610a87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8216610b98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015610c4e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290610c8a908490611341565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff8216610e28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610ede576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610f22908490611329565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f8891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161055b565b80600260008282546110259190611329565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152602081905260408120805483929061105f908490611329565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208083528351808285015260005b8181101561115a5785810183015185820160400152820161113e565b8181111561116c576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146111c457600080fd5b919050565b600080604083850312156111dc57600080fd5b6111e5836111a0565b946020939093013593505050565b60008060006060848603121561120857600080fd5b611211846111a0565b925061121f602085016111a0565b9150604084013590509250925092565b60006020828403121561124157600080fd5b61124a826111a0565b9392505050565b6000806040838503121561126457600080fd5b61126d836111a0565b915061127b602084016111a0565b90509250929050565b600181811c9082168061129857607f821691505b602082108114156112d2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156112ea57600080fd5b8151801515811461124a57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561133c5761133c6112fa565b500190565b600082821015611353576113536112fa565b50039056fea26469706673582212203a6db30cd3c097921df4156794aa7973eb848711deeb2cffd7c54a9df1fdb0a564736f6c634300080a003360a060405234801561001057600080fd5b506040516106ca3803806106ca83398101604081905261002f9161006c565b60009190915560ff166080526001805460506001600160501b031991821681179092556004805490911690911790554260028190556003556100a2565b6000806040838503121561007f57600080fd5b82519150602083015160ff8116811461009757600080fd5b809150509250929050565b60805161060e6100bc600039600060d3015261060e6000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80639a6fc8f511610081578063d62ada111161005b578063d62ada11146102dc578063f7a30806146102f4578063feaf968c1461030757600080fd5b80639a6fc8f5146101cd578063bd18ad531461023a578063cd653afc1461024d57600080fd5b806354fd4d50116100b257806354fd4d501461012d57806367e8d83d1461013c5780637284e4161461018e57600080fd5b8063313ce567146100ce5780633fd0875f1461010c575b600080fd5b6100f57f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020015b60405180910390f35b6004546a0100000000000000000000900460ff166040516101039190610441565b60405160018152602001610103565b61018c61014a366004610482565b600480549115156c01000000000000000000000000027fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff909216919091179055565b005b604080518082018252600c81527f7072696365206f7261636c6500000000000000000000000000000000000000006020820152905161010391906104ab565b6102036101db36600461053d565b60015460005460025460035460045469ffffffffffffffffffff948516941691939590929450565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610103565b61018c610248366004610558565b61030f565b61018c61025b366004610579565b6001805469ffffffffffffffffffff9586167fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090911617905560029290925560035560048054919092167fffffffffffffffffffffffffffffffffffffffff00ff00000000000000000000909116176b020000000000000000000000179055565b6102e461035f565b6040519015158152602001610103565b61018c6103023660046105bf565b600055565b610203610385565b600480548291907fffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff166b01000000000000000000000083600281111561035757610357610412565b021790555050565b600454600090610380906b010000000000000000000000900460ff166103d6565b905090565b60008060008060006004600c9054906101000a900460ff16156103a757600080fd5b505060015460005460025460035460045469ffffffffffffffffffff9485169893975091955093509190911690565b600060028260028111156103ec576103ec610412565b14156103f757600080fd5b600182600281111561040b5761040b610412565b1492915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016006831061047c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561049457600080fd5b813580151581146104a457600080fd5b9392505050565b600060208083528351808285015260005b818110156104d8578581018301518582016040015282016104bc565b818111156104ea576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803569ffffffffffffffffffff8116811461053857600080fd5b919050565b60006020828403121561054f57600080fd5b6104a48261051e565b60006020828403121561056a57600080fd5b8135600381106104a457600080fd5b6000806000806080858703121561058f57600080fd5b6105988561051e565b935060208501359250604085013591506105b46060860161051e565b905092959194509250565b6000602082840312156105d157600080fd5b503591905056fea264697066735822122014874f7a973b86501c4c1a8be32490fe902c8f088ee234d25f9b2497e19f9e5264736f6c634300080a00336080604052600080546001600160a01b031916737109709ecfa91a80626ff3989d68f67f5b1dd12d1790553480156200003757600080fd5b5060405162007eb938038062007eb98339810160408190526200005a91620009d5565b611f4060c8610190611d4c604051620000739062000968565b938452602084019290925260408301526060820152608001604051809103906000f080158015620000a8573d6000803e3d6000fd5b50600780546001600160a01b0319166001600160a01b039283161790556000546040516303223eab60e11b81527370997970c51812dc3a010c7d01b50e0d17dc79c860048201529116906306447d5690602401600060405180830381600087803b1580156200011657600080fd5b505af11580156200012b573d6000803e3d6000fd5b505050506040516200013d9062000976565b604051809103906000f0801580156200015a573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b0392909216919091179055604051620001899062000984565b604051809103906000f080158015620001a6573d6000803e3d6000fd5b50600280546001600160a01b0319166001600160a01b039283169081179091556001546040516376aad60560e01b815292166004830152906376aad60590602401600060405180830381600087803b1580156200020257600080fd5b505af115801562000217573d6000803e3d6000fd5b50506002546040516301ed651160e41b81527393548eb8453a498222c4ff2c4375b7de8af5a38a60048201526001600160a01b039091169250631ed651109150602401600060405180830381600087803b1580156200027557600080fd5b505af11580156200028a573d6000803e3d6000fd5b5050600880546001600160a01b0319167393548eb8453a498222c4ff2c4375b7de8af5a38a1790555050604051601290620002c59062000992565b6060808252600a908201526944696573656c2044414960b01b608082015260a060208201819052600490820152636444414960e01b60c082015260ff909116604082015260e001604051809103906000f08015801562000329573d6000803e3d6000fd5b50600680546001600160a01b0319166001600160a01b039283161790556040516367b4264560e01b8152908216906367b42645906200036e9060019060040162000a1f565b602060405180830381865afa1580156200038c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003b29190620009d5565b600580546001600160a01b0319166001600160a01b0392831617905560405163eebab8ef60e01b81529082169063eebab8ef90620004179060019073f39fd6e51aad88f6f4ce6ab8827279cfffb922669068056bc75e2d631000009060040162000a35565b600060405180830381600087803b1580156200043257600080fd5b505af115801562000447573d6000803e3d6000fd5b50506002546005546006546007546040516001600160a01b0394851696509284169450908316921690600019906200047f90620009a0565b6001600160a01b039586168152938516602085015291841660408401529092166060820152608081019190915260a001604051809103906000f080158015620004cc573d6000803e3d6000fd5b50600380546001600160a01b0319166001600160a01b0392831617905560008054604080516390c5013b60e01b8152905191909316926390c5013b92600480830193919282900301818387803b1580156200052657600080fd5b505af11580156200053b573d6000803e3d6000fd5b505060005460405163ca669fa760e01b815273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660048201526001600160a01b03909116925063ca669fa79150602401600060405180830381600087803b1580156200059957600080fd5b505af1158015620005ae573d6000803e3d6000fd5b505060055460035460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529116925063095ea7b391506044016020604051808303816000875af115801562000609573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200062f919062000a5f565b506000546040516303223eab60e11b81527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526001600160a01b03909116906306447d5690602401600060405180830381600087803b1580156200068a57600080fd5b505af11580156200069f573d6000803e3d6000fd5b505060065460035460405163f2fde38b60e01b81526001600160a01b0391821660048201529116925063f2fde38b9150602401600060405180830381600087803b158015620006ed57600080fd5b505af115801562000702573d6000803e3d6000fd5b50506003546040516001600160a01b039091169250620007239150620009ae565b6001600160a01b039091168152602001604051809103906000f08015801562000750573d6000803e3d6000fd5b50600480546001600160a01b0319166001600160a01b03928316178155600054600354604080516318caf8e360e31b8152918516938201939093526024810192909252600b60448301526a506f6f6c5365727669636560a81b60648301529091169063c657c71890608401600060405180830381600087803b158015620007d657600080fd5b505af1158015620007eb573d6000803e3d6000fd5b5050600054600654604080516318caf8e360e31b81526001600160a01b0392831660048201526024810191909152600b60448201526a2234b2b9b2b62a37b5b2b760a91b60648201529116925063c657c7189150608401600060405180830381600087803b1580156200085d57600080fd5b505af115801562000872573d6000803e3d6000fd5b5050600054600554604080516318caf8e360e31b81526001600160a01b03928316600482015260248101919091526012604482015271556e6465726c79696e67546f6b656e44414960701b60648201529116925063c657c7189150608401600060405180830381600087803b158015620008eb57600080fd5b505af115801562000900573d6000803e3d6000fd5b505060008054604080516390c5013b60e01b815290516001600160a01b0390921694506390c5013b9350600480820193929182900301818387803b1580156200094857600080fd5b505af11580156200095d573d6000803e3d6000fd5b505050505062000a83565b610b128062000c7f83390190565b61098c806200179183390190565b610fcd806200211d83390190565b6115c480620030ea83390190565b61339f80620046ae83390190565b61046c8062007a4d83390190565b6001600160a01b0381168114620009d257600080fd5b50565b600060208284031215620009e857600080fd5b8151620009f581620009bc565b9392505050565b600b811062000a1b57634e487b7160e01b600052602160045260246000fd5b9052565b6020810162000a2f8284620009fc565b92915050565b6060810162000a458286620009fc565b6001600160a01b0393909316602082015260400152919050565b60006020828403121562000a7257600080fd5b81518015158114620009f557600080fd5b6101ec8062000a936000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c806361d027b31161005b57806361d027b3146101365780636f307dc314610156578063de28735914610176578063e1463e581461019657600080fd5b80630f69630b1461008d5780632954018c146100d657806336dda7d5146100f6578063570a7af214610116575b600080fd5b6007546100ad9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6002546100ad9073ffffffffffffffffffffffffffffffffffffffff1681565b6006546100ad9073ffffffffffffffffffffffffffffffffffffffff1681565b6003546100ad9073ffffffffffffffffffffffffffffffffffffffff1681565b6008546100ad9073ffffffffffffffffffffffffffffffffffffffff1681565b6005546100ad9073ffffffffffffffffffffffffffffffffffffffff1681565b6001546100ad9073ffffffffffffffffffffffffffffffffffffffff1681565b6004546100ad9073ffffffffffffffffffffffffffffffffffffffff168156fea264697066735822122063b4e5f1b51a3534a7042b6016357775e0cfc8b2398c440305270eb714cf575964736f6c634300080a00336101206040523480156200001257600080fd5b5060405162000b1238038062000b1283398101604081905262000035916200021f565b604080518082019091526002815261049560f41b602082015261271085106200007c5760405162461bcd60e51b815260040162000073919062000256565b60405180910390fd5b50604080518082019091526002815261049560f41b6020820152612710841115620000bc5760405162461bcd60e51b815260040162000073919062000256565b50604080518082019091526002815261049560f41b6020820152612710831115620000fc5760405162461bcd60e51b815260040162000073919062000256565b5060006200012185670de0b6b3a7640000620001c160201b6200043c1790919060201c565b608081905290506200013c81670de0b6b3a7640000620002c4565b60a052620001636b033b2e3c9fd0803ce800000085620001c1602090811b6200043c17901c565b60c0526200018a6b033b2e3c9fd0803ce800000084620001c1602090811b6200043c17901c565b60e052620001b16b033b2e3c9fd0803ce800000083620001c1602090811b6200043c17901c565b61010052506200036c9350505050565b6000821580620001cf575081155b15620001de5750600062000219565b612710620001ee600282620002f4565b61ffff16620001fe848662000318565b6200020a91906200033a565b62000216919062000355565b90505b92915050565b600080600080608085870312156200023657600080fd5b505082516020840151604085015160609095015191969095509092509050565b600060208083528351808285015260005b81811015620002855785810183015185820160400152820162000267565b8181111562000298576000604083870101525b50601f01601f1916929092016040019392505050565b634e487b7160e01b600052601160045260246000fd5b600082821015620002d957620002d9620002ae565b500390565b634e487b7160e01b600052601260045260246000fd5b600061ffff808416806200030c576200030c620002de565b92169190910492915050565b6000816000190483118215151615620003355762000335620002ae565b500290565b60008219821115620003505762000350620002ae565b500190565b600082620003675762000367620002de565b500490565b60805160a05160c05160e0516101005161070162000411600039600081816101840152818161030b015261041701526000818160e70152818161025a0152818161033e01526103f401526000818161010e015281816101bc0152818161028e0152818161035f01526103d101526000818161015d01526102bc01526000818160b80152818161020d01528181610235015281816102e001526103a101526107016000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80639cd3fdb51161005b5780639cd3fdb514610109578063c8284e6d14610130578063f81d438114610158578063fc4b2b781461017f57600080fd5b806342568d441461008d57806350ced104146100b357806354fd4d50146100da5780639aec06ea146100e2575b600080fd5b6100a061009b366004610537565b6101a6565b6040519081526020015b60405180910390f35b6100a07f000000000000000000000000000000000000000000000000000000000000000081565b6100a0600181565b6100a07f000000000000000000000000000000000000000000000000000000000000000081565b6100a07f000000000000000000000000000000000000000000000000000000000000000081565b610138610397565b6040805194855260208501939093529183015260608201526080016100aa565b6100a07f000000000000000000000000000000000000000000000000000000000000000081565b6100a07f000000000000000000000000000000000000000000000000000000000000000081565b60008215806101b457508183105b156101e057507f0000000000000000000000000000000000000000000000000000000000000000610391565b6000836101ed8482610588565b6101ff90670de0b6b3a764000061059f565b610209919061060b565b90507f00000000000000000000000000000000000000000000000000000000000000008110156102ba577f000000000000000000000000000000000000000000000000000000000000000061027e827f000000000000000000000000000000000000000000000000000000000000000061059f565b610288919061060b565b6102b2907f000000000000000000000000000000000000000000000000000000000000000061061f565b915050610391565b7f00000000000000000000000000000000000000000000000000000000000000006103057f000000000000000000000000000000000000000000000000000000000000000083610588565b61032f907f000000000000000000000000000000000000000000000000000000000000000061059f565b610339919061060b565b6103837f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000061061f565b61038d919061061f565b9150505b92915050565b60008080806103ce7f0000000000000000000000000000000000000000000000000000000000000000670de0b6b3a764000061048d565b947f000000000000000000000000000000000000000000000000000000000000000094507f000000000000000000000000000000000000000000000000000000000000000093507f000000000000000000000000000000000000000000000000000000000000000092509050565b6000821580610449575081155b1561045657506000610391565b612710610464600282610637565b61ffff16610472848661059f565b61047c919061061f565b610486919061060b565b9392505050565b60408051808201909152600281527f4d33000000000000000000000000000000000000000000000000000000000000602082015260009082610505576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104fc9190610658565b60405180910390fd5b50600061051360028461060b565b905082816105236127108761059f565b61052d919061061f565b61038d919061060b565b6000806040838503121561054a57600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561059a5761059a610559565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156105d7576105d7610559565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261061a5761061a6105dc565b500490565b6000821982111561063257610632610559565b500190565b600061ffff8084168061064c5761064c6105dc565b92169190910492915050565b600060208083528351808285015260005b8181101561068557858101830151858201604001528201610669565b81811115610697576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea26469706673582212205428f2a5431c3c1928793ca5c2c8825fc467250326c6d5ae84382a87d1e80b2164736f6c634300080a0033608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61090e8061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063732818191161008c578063adce758d11610066578063adce758d14610215578063ba306df114610228578063d4eb5db01461023b578063f2fde38b1461027457600080fd5b806373281819146101b7578063819ad68e146101da5780638da5cb5b146101ed57600080fd5b806354fd4d50116100bd57806354fd4d501461016a5780635f259aba14610180578063715018a6146101af57600080fd5b806335914829146100e45780633a41ec641461011c5780634910832f14610155575b600080fd5b6101076100f236600461089b565b60016020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61010761012a36600461089b565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205460ff1690565b61016861016336600461089b565b610287565b005b610172600181565b604051908152602001610113565b61010761018e36600461089b565b60005473ffffffffffffffffffffffffffffffffffffffff91821691161490565b610168610387565b6101076101c536600461089b565b60026020526000908152604090205460ff1681565b6101686101e836600461089b565b610414565b60005460405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610113565b61016861022336600461089b565b61050c565b61016861023636600461089b565b610601565b61010761024936600461089b565b73ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205460ff1690565b61016861028236600461089b565b6106f6565b60005473ffffffffffffffffffffffffffffffffffffffff16331461030d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909217909155517fae26b1cfe9454ba87274a4e8330b6654684362d0f3d7bbd17f7449a1d38387c69190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610408576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b6104126000610826565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517fd400da6c0c0a894dacc0981730b88af0545d00272ee8fff1437bf560ff245fc49190a250565b60005473ffffffffffffffffffffffffffffffffffffffff16331461058d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f1998397e7203f7baca9d6f41b9e4da6e768daac5caad4234fb9bf5869d2715459190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610682576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526001602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f28b01395b7e25d20552a0c8dc8ecd3b1d4abc986f14dad7885fd45b6fd73c8d99190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811661081a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610304565b61082381610826565b50565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156108ad57600080fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146108d157600080fd5b939250505056fea26469706673582212204712efbfe997070def77285a5b8753bc882b62da2133ce1937ad26cd2b48e49864736f6c634300080a0033608060405234801561001057600080fd5b5061001a3361005f565b60405130906f20a2222922a9a9afa82927ab24a222a960811b907fb37614c7d254ea8d16eb81fa11dddaeb266aa8ba4917980859c7740aff30c69190600090a36100af565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610f0f806100be6000396000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c806377532ed9116100e3578063bcaead981161008c578063ce3c4ae411610066578063ce3c4ae414610308578063f2fde38b1461031b578063fca513a81461032e57600080fd5b8063bcaead98146102da578063c5120b39146102ed578063c513c9bb1461030057600080fd5b80639068a868116100bd5780639068a868146102b7578063addc1a76146102bf578063affd9243146102d257600080fd5b806377532ed91461027e57806386e09c08146102865780638da5cb5b1461029957600080fd5b80634c252f9111610145578063699f200f1161011f578063699f200f1461022d578063715018a61461026357806376aad6051461026b57600080fd5b80634c252f91146101fc578063530e784f1461020457806354fd4d501461021757600080fd5b80631ed65110116101765780631ed65110146101cc57806321da5837146101e157806326c74fc3146101f457600080fd5b8063060678c21461019257806308737695146101c4575b600080fd5b61019a610336565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61019a610366565b6101df6101da366004610e10565b610391565b005b6101df6101ef366004610e10565b610444565b61019a6104ef565b61019a61051a565b6101df610212366004610e10565b610545565b61021f600281565b6040519081526020016101bb565b61019a61023b366004610e4d565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6101df6105f0565b6101df610279366004610e10565b61067d565b61019a610728565b6101df610294366004610e10565b610753565b60005473ffffffffffffffffffffffffffffffffffffffff1661019a565b61019a6107fe565b6101df6102cd366004610e10565b610829565b61019a6108d4565b6101df6102e8366004610e10565b6108ff565b6101df6102fb366004610e10565b6109aa565b61019a610a55565b6101df610316366004610e10565b610a80565b6101df610329366004610e10565b610b2b565b61019a610c58565b60006103617f444154415f434f4d50524553534f520000000000000000000000000000000000610c7f565b905090565b60006103617f41434c0000000000000000000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610417576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6104417f54524541535552595f434f4e545241435400000000000000000000000000000082610d1d565b50565b60005473ffffffffffffffffffffffffffffffffffffffff1633146104c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f574554485f47415445574159000000000000000000000000000000000000000082610d1d565b60006103617f54524541535552595f434f4e5452414354000000000000000000000000000000610c7f565b60006103617f574554485f544f4b454e00000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f50524943455f4f5241434c45000000000000000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610671576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b61067b6000610d9b565b565b60005473ffffffffffffffffffffffffffffffffffffffff1633146106fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f41434c000000000000000000000000000000000000000000000000000000000082610d1d565b60006103617f574554485f474154455741590000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146107d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f574554485f544f4b454e0000000000000000000000000000000000000000000082610d1d565b60006103617f4143434f554e545f464143544f52590000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146108aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f4143434f554e545f464143544f5259000000000000000000000000000000000082610d1d565b60006103617f474541525f544f4b454e00000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610980576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f474541525f544f4b454e0000000000000000000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f444154415f434f4d50524553534f52000000000000000000000000000000000082610d1d565b60006103617f434f4e5452414354535f52454749535445520000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610b01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f434f4e5452414354535f5245474953544552000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610bac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b73ffffffffffffffffffffffffffffffffffffffff8116610c4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161040e565b61044181610d9b565b60006103617f50524943455f4f5241434c4500000000000000000000000000000000000000005b6000818152600160209081526040808320548151808301909252600382527f41503100000000000000000000000000000000000000000000000000000000009282019290925273ffffffffffffffffffffffffffffffffffffffff9091169081610d16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040e9190610e66565b5092915050565b60008281526001602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091559051909184917fb37614c7d254ea8d16eb81fa11dddaeb266aa8ba4917980859c7740aff30c6919190a35050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215610e2257600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610e4657600080fd5b9392505050565b600060208284031215610e5f57600080fd5b5035919050565b600060208083528351808285015260005b81811015610e9357858101830151858201604001528201610e77565b81811115610ea5576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea264697066735822122083c228af017c6f5cf8c395cdf7a53276ff56fdd4f4313c39f680ab73bd75417364736f6c634300080a003360a06040523480156200001157600080fd5b50604051620015c4380380620015c4833981016040819052620000349162000258565b8251839083906200004d906003906020850190620000e5565b50805162000063906004906020840190620000e5565b505050620000806200007a6200008f60201b60201c565b62000093565b60ff16608052506200031a9050565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054620000f390620002dd565b90600052602060002090601f01602090048101928262000117576000855562000162565b82601f106200013257805160ff191683800117855562000162565b8280016001018555821562000162579182015b828111156200016257825182559160200191906001019062000145565b506200017092915062000174565b5090565b5b8082111562000170576000815560010162000175565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001b357600080fd5b81516001600160401b0380821115620001d057620001d06200018b565b604051601f8301601f19908116603f01168101908282118183101715620001fb57620001fb6200018b565b816040528381526020925086838588010111156200021857600080fd5b600091505b838210156200023c57858201830151818301840152908201906200021d565b838211156200024e5760008385830101525b9695505050505050565b6000806000606084860312156200026e57600080fd5b83516001600160401b03808211156200028657600080fd5b6200029487838801620001a1565b94506020860151915080821115620002ab57600080fd5b50620002ba86828701620001a1565b925050604084015160ff81168114620002d257600080fd5b809150509250925092565b600181811c90821680620002f257607f821691505b602082108114156200031457634e487b7160e01b600052602260045260246000fd5b50919050565b60805161128e620003366000396000610172015261128e6000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c8063715018a611610097578063a457c2d711610066578063a457c2d714610245578063a9059cbb14610258578063dd62ed3e1461026b578063f2fde38b146102b157600080fd5b8063715018a6146101fa5780638da5cb5b1461020257806395d89b411461022a5780639dc29fac1461023257600080fd5b8063313ce567116100d3578063313ce5671461016b578063395093511461019c57806340c10f19146101af57806370a08231146101c457600080fd5b806306fdde0314610105578063095ea7b31461012357806318160ddd1461014657806323b872dd14610158575b600080fd5b61010d6102c4565b60405161011a919061104f565b60405180910390f35b6101366101313660046110eb565b610356565b604051901515815260200161011a565b6002545b60405190815260200161011a565b610136610166366004611115565b61036c565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161011a565b6101366101aa3660046110eb565b610457565b6101c26101bd3660046110eb565b6104a0565b005b61014a6101d2366004611151565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c261052f565b60055460405173ffffffffffffffffffffffffffffffffffffffff909116815260200161011a565b61010d6105bc565b6101c26102403660046110eb565b6105cb565b6101366102533660046110eb565b610656565b6101366102663660046110eb565b61072e565b61014a610279366004611173565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101c26102bf366004611151565b61073b565b6060600380546102d3906111a6565b80601f01602080910402602001604051908101604052809291908181526020018280546102ff906111a6565b801561034c5780601f106103215761010080835404028352916020019161034c565b820191906000526020600020905b81548152906001019060200180831161032f57829003601f168201915b5050505050905090565b600061036333848461086b565b50600192915050565b6000610379848484610a1f565b73ffffffffffffffffffffffffffffffffffffffff841660009081526001602090815260408083203384529091529020548281101561043f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61044c853385840361086b565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161036391859061049b908690611229565b61086b565b60055473ffffffffffffffffffffffffffffffffffffffff163314610521576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610436565b61052b8282610cd3565b5050565b60055473ffffffffffffffffffffffffffffffffffffffff1633146105b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610436565b6105ba6000610df3565b565b6060600480546102d3906111a6565b60055473ffffffffffffffffffffffffffffffffffffffff16331461064c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610436565b61052b8282610e6a565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915281205482811015610717576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610436565b610724338585840361086b565b5060019392505050565b6000610363338484610a1f565b60055473ffffffffffffffffffffffffffffffffffffffff1633146107bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610436565b73ffffffffffffffffffffffffffffffffffffffff811661085f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610436565b61086881610df3565b50565b73ffffffffffffffffffffffffffffffffffffffff831661090d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610436565b73ffffffffffffffffffffffffffffffffffffffff82166109b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610436565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610ac2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610436565b73ffffffffffffffffffffffffffffffffffffffff8216610b65576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610436565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610c1b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610436565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610c5f908490611229565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610cc591815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610d50576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610436565b8060026000828254610d629190611229565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610d9c908490611229565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216610f0d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610436565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015610fc3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610436565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290610fff908490611241565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610a12565b600060208083528351808285015260005b8181101561107c57858101830151858201604001528201611060565b8181111561108e576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146110e657600080fd5b919050565b600080604083850312156110fe57600080fd5b611107836110c2565b946020939093013593505050565b60008060006060848603121561112a57600080fd5b611133846110c2565b9250611141602085016110c2565b9150604084013590509250925092565b60006020828403121561116357600080fd5b61116c826110c2565b9392505050565b6000806040838503121561118657600080fd5b61118f836110c2565b915061119d602084016110c2565b90509250929050565b600181811c908216806111ba57607f821691505b602082108114156111f4577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561123c5761123c6111fa565b500190565b600082821015611253576112536111fa565b50039056fea26469706673582212200343c2cef6c2ca469c25e4abb24e7e37ea95105bc70df4cbd4741229aafc595064736f6c634300080a003360a06040523480156200001157600080fd5b506040516200339f3803806200339f833981016040819052620000349162000627565b6000805460ff191690558484848484846001600160a01b0381166200006c57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000ab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d191906200068e565b6001600160a01b039081166080526001805586161580159150620000fd57506001600160a01b03841615155b80156200011257506001600160a01b03831615155b80156200012757506001600160a01b03821615155b6040518060400160405280600281526020016105a360f41b815250906200016c5760405162461bcd60e51b8152600401620001639190620006ac565b60405180910390fd5b50600580546001600160a01b038088166001600160a01b03199283168117909355600780548883169084161790556008805491871691909216179055604080516326c74fc360e01b815290516326c74fc3916004808201926020929091908290030181865afa158015620001e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200020a91906200068e565b600c80546001600160a01b0319166001600160a01b03929092169190911790556b033b2e3c9fd0803ce8000000600d55620002458262000258565b60035550620007ae975050505050505050565b60408051808201909152600281526105a360f41b60208201526001600160a01b0382166200029b5760405162461bcd60e51b8152600401620001639190620006ac565b50600680546001600160a01b0319166001600160a01b038316179055620002c36000620002fa565b6040516001600160a01b038216907f0ec6cb7631d36954a05ffd646135bfd9995c71e7fa36d26abb1ad9f24a040ea190600090a250565b8062000305620003b5565b6200031191906200071a565b6002556200031e6200042e565b600d556006546002546001600160a01b03909116906342568d44906200034362000460565b6040516001600160e01b031960e085901b16815260048101929092526024820152604401602060405180830381865afa15801562000385573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003ab919062000734565b600e555042600f55565b600080600f5442620003c891906200071a565b905060006301e133806b033b2e3c9fd0803ce800000083600e54600454620003f191906200074e565b620003fd91906200074e565b62000409919062000770565b62000415919062000770565b90508060025462000427919062000793565b9250505090565b600080600f54426200044191906200071a565b90506200045a600d54600e5483620004d560201b60201c565b91505090565b6007546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015620004aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004d0919062000734565b905090565b6000806301e13380620004e984866200074e565b620004f5919062000770565b6200050d906b033b2e3c9fd0803ce800000062000793565b90506200052981866200053260201b62001f941790919060201c565b95945050505050565b600082158062000540575081155b156200054f5750600062000604565b816200056960026b033b2e3c9fd0803ce800000062000770565b62000577906000196200071a565b62000583919062000770565b831115604051806040016040528060028152602001614d3160f01b81525090620005c25760405162461bcd60e51b8152600401620001639190620006ac565b506b033b2e3c9fd0803ce8000000620005dd60028262000770565b620005e984866200074e565b620005f5919062000793565b62000601919062000770565b90505b92915050565b80516001600160a01b03811681146200062257600080fd5b919050565b600080600080600060a086880312156200064057600080fd5b6200064b866200060a565b94506200065b602087016200060a565b93506200066b604087016200060a565b92506200067b606087016200060a565b9150608086015190509295509295909350565b600060208284031215620006a157600080fd5b62000601826200060a565b600060208083528351808285015260005b81811015620006db57858101830151858201604001528201620006bd565b81811115620006ee576000604083870101525b50601f01601f1916929092016040019392505050565b634e487b7160e01b600052601160045260246000fd5b6000828210156200072f576200072f62000704565b500390565b6000602082840312156200074757600080fd5b5051919050565b60008160001904831182151516156200076b576200076b62000704565b500290565b6000826200078e57634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115620007a957620007a962000704565b500190565b608051612ba4620007fb600039600081816104fa0152818161090d01528181610b0d01528181610c4c01528181610eac015281816113ff015281816115900152611bdb0152612ba46000f3fe608060405234801561001057600080fd5b50600436106102de5760003560e01c8063609ae31711610186578063bb04b193116100e3578063d41ee0f711610097578063ef8d960311610071578063ef8d9603146105bd578063f3fdb15a146105c6578063fe14112d146105e657600080fd5b8063d41ee0f7146105a3578063dbcb313b146105ab578063e941fa78146105b457600080fd5b8063c5f956af116100c8578063c5f956af1461055d578063ca9505e41461057d578063cf33d9551461059057600080fd5b8063bb04b19314610537578063bf28068b1461054a57600080fd5b80639aa5d4621161013a578063a50cf2c81161011f578063a50cf2c8146104f5578063a7a5eccc1461051c578063b6ac642a1461052457600080fd5b80639aa5d462146104da578063a4e8273e146104ed57600080fd5b8063788c6bfe1161016b578063788c6bfe146104b75780637dfc6afe146104bf5780638456cb59146104d257600080fd5b8063609ae317146104a657806374375359146104af57600080fd5b80633e163df01161023f57806352cb995f116101f35780635664cacf116101cd5780635664cacf146104805780635b29233b146104935780635c975abb1461049b57600080fd5b806352cb995f1461045d5780635427c9381461046557806354fd4d501461047857600080fd5b806345d31f9d1161022457806345d31f9d146104385780634c19386c146104415780634d778ad11461044a57600080fd5b80633e163df01461040d5780633f4ba83a1461043057600080fd5b80632495a599116102965780632e97ca211161027b5780632e97ca21146103a757806331d8bc27146103da57806336dda7d5146103ed57600080fd5b80632495a599146103675780632954018c1461038757600080fd5b8063078c4781116102c7578063078c4781146103125780630fce70fb146103275780631e16e4fc1461032f57600080fd5b8063030dbb04146102e357806305fe138b146102ff575b600080fd5b6102ec60025481565b6040519081526020015b60405180910390f35b6102ec61030d3660046128b4565b6105ee565b6103256103203660046128e4565b6108df565b005b6102ec610a37565b61034261033d366004612901565b610a5f565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102f6565b6007546103429073ffffffffffffffffffffffffffffffffffffffff1681565b6005546103429073ffffffffffffffffffffffffffffffffffffffff1681565b6103ca6103b53660046128e4565b60096020526000908152604090205460ff1681565b60405190151581526020016102f6565b6102ec6103e836600461291a565b610a96565b6008546103429073ffffffffffffffffffffffffffffffffffffffff1681565b6103ca61041b3660046128e4565b600a6020526000908152604090205460ff1681565b610325610adf565b6102ec600e5481565b6102ec60045481565b6102ec610458366004612901565b610bcd565b6002546102ec565b6102ec610473366004612901565b610bfd565b6102ec600181565b61032561048e3660046128e4565b610c1e565b600f546102ec565b60005460ff166103ca565b6102ec600f5481565b6102ec610d0e565b6102ec610da6565b6103256104cd366004612901565b600255565b610325610e7e565b6103256104e8366004612946565b610f6a565b600b546102ec565b6103427f000000000000000000000000000000000000000000000000000000000000000081565b600d546102ec565b610325610532366004612901565b6113d1565b610325610545366004612901565b611562565b6103256105583660046128b4565b61167b565b600c546103429073ffffffffffffffffffffffffffffffffffffffff1681565b61032561058b36600461291a565b6117fb565b61032561059e3660046128e4565b611bad565b610325611f1d565b6102ec600d5481565b6102ec60105481565b6102ec60035481565b6006546103429073ffffffffffffffffffffffffffffffffffffffff1681565b6102ec611f27565b6000805460ff1615610661576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064015b60405180910390fd5b600260015414156106ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610658565b60026001819055604080518082019091529081527f5a30000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8316610756576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065891906129aa565b50600061076284610bfd565b9050600061077b601054836120a290919063ffffffff16565b905060006107898284612a2a565b6007549091506107b09073ffffffffffffffffffffffffffffffffffffffff1686836120d8565b81156107e057600c546007546107e09173ffffffffffffffffffffffffffffffffffffffff9182169116846120d8565b6008546040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff90911690639dc29fac90604401600060405180830381600087803b15801561085257600080fd5b505af1158015610866573d6000803e3d6000fd5b50505050826002546108789190612a2a565b60025561088560006121b1565b60405186815273ffffffffffffffffffffffffffffffffffffffff86169033907fd8ae9b9ba89e637bcb66a69ac91e8f688018e81d6f92c57e02226425c8efbdf69060200160405180910390a36001805595945050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610969573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061098d9190612a41565b6109c3576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff811660008181526009602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f9181736fce85d2d4cca2e4406f10679302ae5c387180fdb62963af3cd9a24fd69190a250565b600080600f5442610a489190612a2a565b9050610a59600d54600e5483610a96565b91505090565b600b8181548110610a6f57600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6000806301e13380610aa88486612a63565b610ab29190612acf565b610ac8906b033b2e3c9fd0803ce8000000612ae3565b9050610ad48582611f94565b9150505b9392505050565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa158015610b69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8d9190612a41565b610bc3576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bcb612286565b565b6000610bd7610da6565b610bed6b033b2e3c9fd0803ce800000084612a63565b610bf79190612acf565b92915050565b60006b033b2e3c9fd0803ce8000000610c14610da6565b610bed9084612a63565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610ca8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ccc9190612a41565b610d02576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d0b81612367565b50565b6007546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015610d7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da19190612afb565b905090565b600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3a9190612afb565b905080610e54576b033b2e3c9fd0803ce800000091505090565b806b033b2e3c9fd0803ce8000000610e6a611f27565b610e749190612a63565b610a599190612acf565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015610f08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2c9190612a41565b610f62576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bcb612478565b60005460ff1615610fd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610658565b60026001541415611044576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610658565b60026001819055604080518082019091529081527f5a30000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff83166110cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065891906129aa565b50600354836110d9611f27565b6110e39190612ae3565b11156040518060400160405280600381526020017f505332000000000000000000000000000000000000000000000000000000000081525090611153576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065891906129aa565b506007546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156111c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e79190612afb565b60075490915061120f9073ffffffffffffffffffffffffffffffffffffffff16333087612538565b6007546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152829173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa15801561127d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a19190612afb565b6112ab9190612a2a565b60085490945073ffffffffffffffffffffffffffffffffffffffff166340c10f19846112d687610bcd565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401600060405180830381600087803b15801561134157600080fd5b505af1158015611355573d6000803e3d6000fd5b50505050836002546113679190612ae3565b60025561137460006121b1565b604080518581526020810184905273ffffffffffffffffffffffffffffffffffffffff85169133917fd2491a9b4fe81a7cd4511e8b7b7743951b061dad5bed7da8a7795b080ee08c7e910160405180910390a35050600180555050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561145b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061147f9190612a41565b6114b5576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051808201909152600381527f505333000000000000000000000000000000000000000000000000000000000060208201526064821115611525576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065891906129aa565b5060108190556040518181527fd5fe46099fa396290a7f57e36c3c3c8774e2562c18ed5d1dcc0fa75071e03f1d906020015b60405180910390a150565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156115ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116109190612a41565b611646576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60038190556040518181527fd7a183c9fe85b604c25d54bd676e0866f6c13bcca9fb9b0850213de118fdc99c90602001611557565b60005460ff16156116e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610658565b33600090815260096020908152604091829020548251808401909352600383527f50533000000000000000000000000000000000000000000000000000000000009183019190915260ff1661176a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065891906129aa565b5060075461178f9073ffffffffffffffffffffffffffffffffffffffff1682846120d8565b61179960006121b1565b816004546117a79190612ae3565b60045560405182815273ffffffffffffffffffffffffffffffffffffffff82169033907f312a5e5e1079f5dda4e95dbbd0b908b291fd5b992ef22073643ab691572c5b529060200160405180910390a35050565b60005460ff1615611868576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610658565b336000908152600a6020908152604091829020548251808401909352600383527f50533000000000000000000000000000000000000000000000000000000000009183019190915260ff166118ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065891906129aa565b5081156119b957600854600c5473ffffffffffffffffffffffffffffffffffffffff918216916340c10f19911661192085610bcd565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401600060405180830381600087803b15801561198b57600080fd5b505af115801561199f573d6000803e3d6000fd5b50505050816002546119b19190612ae3565b600255611b45565b60006119c482610bcd565b600854600c546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529293506000929116906370a0823190602401602060405180830381865afa158015611a3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a609190612afb565b905081811015611ab457905080337fef3653ded679720ab04913b6f3820be7cedc8286d42ff5dd8dff17e91bd2964c611a9883610bfd565b611aa29086612a2a565b60405190815260200160405180910390a25b600854600c546040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015260248101859052911690639dc29fac90604401600060405180830381600087803b158015611b2a57600080fd5b505af1158015611b3e573d6000803e3d6000fd5b5050505050505b611b4e816121b1565b8260046000828254611b609190612a2a565b9091555050604080518481526020810184905290810182905233907f2fe77b1c99aca6b022b8efc6e3e8dd1b48b30748709339b65c50ef3263443e099060600160405180910390a2505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611c37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c5b9190612a41565b611c91576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cdc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d009190612b14565b73ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600381526020017f505331000000000000000000000000000000000000000000000000000000000081525090611d9c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065891906129aa565b5073ffffffffffffffffffffffffffffffffffffffff81166000908152600a6020908152604091829020548251808401909352600383527f50533400000000000000000000000000000000000000000000000000000000009183019190915260ff1615611e36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065891906129aa565b5073ffffffffffffffffffffffffffffffffffffffff81166000818152600960209081526040808320805460017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009182168117909255600a90935281842080549093168117909255600b8054928301815583527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db990910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055517fe076020e7eac3915d33aec40c24f95e73eb6c9921ff89747d50aa8fd934d2c019190a250565b610bcb60006121b1565b600080600f5442611f389190612a2a565b905060006301e133806b033b2e3c9fd0803ce800000083600e54600454611f5f9190612a63565b611f699190612a63565b611f739190612acf565b611f7d9190612acf565b905080600254611f8d9190612ae3565b9250505090565b6000821580611fa1575081155b15611fae57506000610bf7565b81611fc660026b033b2e3c9fd0803ce8000000612acf565b611ff0907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612a2a565b611ffa9190612acf565b8311156040518060400160405280600281526020017f4d310000000000000000000000000000000000000000000000000000000000008152509061206b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065891906129aa565b506b033b2e3c9fd0803ce8000000612084600282612acf565b61208e8486612a63565b6120989190612ae3565b610ad89190612acf565b60008215806120af575081155b156120bc57506000610bf7565b6127106120ca600282612b31565b61ffff1661208e8486612a63565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526121ac9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261259c565b505050565b806121ba611f27565b6121c49190612a2a565b6002556121cf610a37565b600d5560065460025473ffffffffffffffffffffffffffffffffffffffff909116906342568d44906121ff610d0e565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815260048101929092526024820152604401602060405180830381865afa158015612258573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061227c9190612afb565b600e555042600f55565b60005460ff166122f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610658565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60408051808201909152600281527f5a30000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff82166123e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065891906129aa565b50600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff831617905561243460006121b1565b60405173ffffffffffffffffffffffffffffffffffffffff8216907f0ec6cb7631d36954a05ffd646135bfd9995c71e7fa36d26abb1ad9f24a040ea190600090a250565b60005460ff16156124e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610658565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861233d3390565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526125969085907f23b872dd000000000000000000000000000000000000000000000000000000009060840161212a565b50505050565b60006125fe826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166126a89092919063ffffffff16565b8051909150156121ac578080602001905181019061261c9190612a41565b6121ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610658565b60606126b784846000856126bf565b949350505050565b606082471015612751576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610658565b843b6127b9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610658565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516127e29190612b52565b60006040518083038185875af1925050503d806000811461281f576040519150601f19603f3d011682016040523d82523d6000602084013e612824565b606091505b509150915061283482828661283f565b979650505050505050565b6060831561284e575081610ad8565b82511561285e5782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065891906129aa565b73ffffffffffffffffffffffffffffffffffffffff81168114610d0b57600080fd5b600080604083850312156128c757600080fd5b8235915060208301356128d981612892565b809150509250929050565b6000602082840312156128f657600080fd5b8135610ad881612892565b60006020828403121561291357600080fd5b5035919050565b60008060006060848603121561292f57600080fd5b505081359360208301359350604090920135919050565b60008060006060848603121561295b57600080fd5b83359250602084013561296d81612892565b929592945050506040919091013590565b60005b83811015612999578181015183820152602001612981565b838111156125965750506000910152565b60208152600082518060208401526129c981604085016020870161297e565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612a3c57612a3c6129fb565b500390565b600060208284031215612a5357600080fd5b81518015158114610ad857600080fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612a9b57612a9b6129fb565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082612ade57612ade612aa0565b500490565b60008219821115612af657612af66129fb565b500190565b600060208284031215612b0d57600080fd5b5051919050565b600060208284031215612b2657600080fd5b8151610ad881612892565b600061ffff80841680612b4657612b46612aa0565b92169190910492915050565b60008251612b6481846020870161297e565b919091019291505056fea2646970667358221220aa576a1f3048229fbbd4b2babbd3d404feadeb799dd811619fe8b62885256f2164736f6c634300080a00336080604052600280546001600160a01b03191673c4375b7de8af5a38a93548eb8453a498222c4ff217905534801561003657600080fd5b5060405161046c38038061046c8339810160408190526100559161007a565b600080546001600160a01b0319166001600160a01b03929092169190911790556100aa565b60006020828403121561008c57600080fd5b81516001600160a01b03811681146100a357600080fd5b9392505050565b6103b3806100b96000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063bf28068b1161005b578063bf28068b1461010b578063c8cca9e514610120578063ca9505e414610175578063e958b7041461018857600080fd5b8063570a7af2146100825780636d0a1218146100cb5780636f307dc3146100eb575b600080fd5b6000546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6002546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b6001546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b61011e610119366004610303565b6101b3565b005b61011e61012e36600461032f565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b61011e610183366004610351565b610243565b6100a261019636600461032f565b5060025473ffffffffffffffffffffffffffffffffffffffff1690565b6000546040517fbf28068b0000000000000000000000000000000000000000000000000000000081526004810184905273ffffffffffffffffffffffffffffffffffffffff83811660248301529091169063bf28068b90604401600060405180830381600087803b15801561022757600080fd5b505af115801561023b573d6000803e3d6000fd5b505050505050565b6000546040517fca9505e400000000000000000000000000000000000000000000000000000000815260048101859052602481018490526044810183905273ffffffffffffffffffffffffffffffffffffffff9091169063ca9505e490606401600060405180830381600087803b1580156102bd57600080fd5b505af11580156102d1573d6000803e3d6000fd5b50505050505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146102fe57600080fd5b919050565b6000806040838503121561031657600080fd5b82359150610326602084016102da565b90509250929050565b60006020828403121561034157600080fd5b61034a826102da565b9392505050565b60008060006060848603121561036657600080fd5b50508135936020830135935060409092013591905056fea2646970667358221220e29e625436d382630e7a0373aafe5230ccc0f5a960595820d041897bf0d7850c64736f6c634300080a00336101206040523480156200001257600080fd5b5060405162000b1238038062000b1283398101604081905262000035916200021f565b604080518082019091526002815261049560f41b602082015261271085106200007c5760405162461bcd60e51b815260040162000073919062000256565b60405180910390fd5b50604080518082019091526002815261049560f41b6020820152612710841115620000bc5760405162461bcd60e51b815260040162000073919062000256565b50604080518082019091526002815261049560f41b6020820152612710831115620000fc5760405162461bcd60e51b815260040162000073919062000256565b5060006200012185670de0b6b3a7640000620001c160201b6200043c1790919060201c565b608081905290506200013c81670de0b6b3a7640000620002c4565b60a052620001636b033b2e3c9fd0803ce800000085620001c1602090811b6200043c17901c565b60c0526200018a6b033b2e3c9fd0803ce800000084620001c1602090811b6200043c17901c565b60e052620001b16b033b2e3c9fd0803ce800000083620001c1602090811b6200043c17901c565b61010052506200036c9350505050565b6000821580620001cf575081155b15620001de5750600062000219565b612710620001ee600282620002f4565b61ffff16620001fe848662000318565b6200020a91906200033a565b62000216919062000355565b90505b92915050565b600080600080608085870312156200023657600080fd5b505082516020840151604085015160609095015191969095509092509050565b600060208083528351808285015260005b81811015620002855785810183015185820160400152820162000267565b8181111562000298576000604083870101525b50601f01601f1916929092016040019392505050565b634e487b7160e01b600052601160045260246000fd5b600082821015620002d957620002d9620002ae565b500390565b634e487b7160e01b600052601260045260246000fd5b600061ffff808416806200030c576200030c620002de565b92169190910492915050565b6000816000190483118215151615620003355762000335620002ae565b500290565b60008219821115620003505762000350620002ae565b500190565b600082620003675762000367620002de565b500490565b60805160a05160c05160e0516101005161070162000411600039600081816101840152818161030b015261041701526000818160e70152818161025a0152818161033e01526103f401526000818161010e015281816101bc0152818161028e0152818161035f01526103d101526000818161015d01526102bc01526000818160b80152818161020d01528181610235015281816102e001526103a101526107016000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80639cd3fdb51161005b5780639cd3fdb514610109578063c8284e6d14610130578063f81d438114610158578063fc4b2b781461017f57600080fd5b806342568d441461008d57806350ced104146100b357806354fd4d50146100da5780639aec06ea146100e2575b600080fd5b6100a061009b366004610537565b6101a6565b6040519081526020015b60405180910390f35b6100a07f000000000000000000000000000000000000000000000000000000000000000081565b6100a0600181565b6100a07f000000000000000000000000000000000000000000000000000000000000000081565b6100a07f000000000000000000000000000000000000000000000000000000000000000081565b610138610397565b6040805194855260208501939093529183015260608201526080016100aa565b6100a07f000000000000000000000000000000000000000000000000000000000000000081565b6100a07f000000000000000000000000000000000000000000000000000000000000000081565b60008215806101b457508183105b156101e057507f0000000000000000000000000000000000000000000000000000000000000000610391565b6000836101ed8482610588565b6101ff90670de0b6b3a764000061059f565b610209919061060b565b90507f00000000000000000000000000000000000000000000000000000000000000008110156102ba577f000000000000000000000000000000000000000000000000000000000000000061027e827f000000000000000000000000000000000000000000000000000000000000000061059f565b610288919061060b565b6102b2907f000000000000000000000000000000000000000000000000000000000000000061061f565b915050610391565b7f00000000000000000000000000000000000000000000000000000000000000006103057f000000000000000000000000000000000000000000000000000000000000000083610588565b61032f907f000000000000000000000000000000000000000000000000000000000000000061059f565b610339919061060b565b6103837f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000061061f565b61038d919061061f565b9150505b92915050565b60008080806103ce7f0000000000000000000000000000000000000000000000000000000000000000670de0b6b3a764000061048d565b947f000000000000000000000000000000000000000000000000000000000000000094507f000000000000000000000000000000000000000000000000000000000000000093507f000000000000000000000000000000000000000000000000000000000000000092509050565b6000821580610449575081155b1561045657506000610391565b612710610464600282610637565b61ffff16610472848661059f565b61047c919061061f565b610486919061060b565b9392505050565b60408051808201909152600281527f4d33000000000000000000000000000000000000000000000000000000000000602082015260009082610505576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104fc9190610658565b60405180910390fd5b50600061051360028461060b565b905082816105236127108761059f565b61052d919061061f565b61038d919061060b565b6000806040838503121561054a57600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561059a5761059a610559565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156105d7576105d7610559565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261061a5761061a6105dc565b500490565b6000821982111561063257610632610559565b500190565b600061ffff8084168061064c5761064c6105dc565b92169190910492915050565b600060208083528351808285015260005b8181101561068557858101830151858201604001528201610669565b81811115610697576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea26469706673582212205428f2a5431c3c1928793ca5c2c8825fc467250326c6d5ae84382a87d1e80b2164736f6c634300080a0033496e7465726573742072617465206d6f64656c20776173206e6f742073657420636f72726563746c79426f72726f77207261746520776173206e6f74207570646174656420636f72726563746c79546f44696573656c20646f6573206e6f7420636f6d7075746520636f72726563746c79496e6465782076616c756520776173206e6f74207570646174656420636f72726563746c794578706563746564206c697175696469747920776173206e6f74207570646174656420636f72726563746c7965787065637465644c69717569646974794c696d6974206e6f742073657420636f72726563746c7954696d657374616d7020776173206e6f74207570646174656420636f72726563746c79a26469706673582212207942c7774c14e142a0142689d2f12018f84d11e556a8f6d415d0ed173fc4f07764736f6c634300080a0033"; - -type PoolServiceTestConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: PoolServiceTestConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class PoolServiceTest__factory extends ContractFactory { - constructor(...args: PoolServiceTestConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): PoolServiceTest { - return super.attach(address) as PoolServiceTest; - } - override connect(signer: Signer): PoolServiceTest__factory { - return super.connect(signer) as PoolServiceTest__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): PoolServiceTestInterface { - return new utils.Interface(_abi) as PoolServiceTestInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): PoolServiceTest { - return new Contract(address, _abi, signerOrProvider) as PoolServiceTest; - } -} diff --git a/src/types/factories/contracts/test/pool/PoolService.t.sol/index.ts b/src/types/factories/contracts/test/pool/PoolService.t.sol/index.ts deleted file mode 100644 index 3f3d4f3b..00000000 --- a/src/types/factories/contracts/test/pool/PoolService.t.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { PoolServiceTest__factory } from "./PoolServiceTest__factory"; diff --git a/src/types/factories/contracts/test/pool/index.ts b/src/types/factories/contracts/test/pool/index.ts deleted file mode 100644 index f7e3dd47..00000000 --- a/src/types/factories/contracts/test/pool/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export * as poolServiceTSol from "./PoolService.t.sol"; diff --git a/src/types/factories/contracts/test/sigp/AttackingContractNonPayable.sol/AttackContractNonPayable__factory.ts b/src/types/factories/contracts/test/sigp/AttackingContractNonPayable.sol/AttackContractNonPayable__factory.ts deleted file mode 100644 index 53c251fc..00000000 --- a/src/types/factories/contracts/test/sigp/AttackingContractNonPayable.sol/AttackContractNonPayable__factory.ts +++ /dev/null @@ -1,88 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - AttackContractNonPayable, - AttackContractNonPayableInterface, -} from "../../../../../contracts/test/sigp/AttackingContractNonPayable.sol/AttackContractNonPayable"; - -const _abi = [ - { - inputs: [], - stateMutability: "nonpayable", - type: "constructor", - }, - { - stateMutability: "payable", - type: "fallback", - }, - { - inputs: [], - name: "owner", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x608060405234801561001057600080fd5b50600080546001600160a01b0319163317905561012c806100326000396000f3fe608060405260043610601c5760003560e01c80638da5cb5b1460a2575b60005473ffffffffffffffffffffffffffffffffffffffff16331460a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f5265766572743a20455448207472616e7366657220626c6f636b656421000000604482015260640160405180910390fd5b005b34801560ad57600080fd5b5060005460cd9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f3fea2646970667358221220f16831e91347b2904da02ba96b52cba7f595f3424154199aa0c59781dc84d43864736f6c634300080a0033"; - -type AttackContractNonPayableConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: AttackContractNonPayableConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class AttackContractNonPayable__factory extends ContractFactory { - constructor(...args: AttackContractNonPayableConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): AttackContractNonPayable { - return super.attach(address) as AttackContractNonPayable; - } - override connect(signer: Signer): AttackContractNonPayable__factory { - return super.connect(signer) as AttackContractNonPayable__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): AttackContractNonPayableInterface { - return new utils.Interface(_abi) as AttackContractNonPayableInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): AttackContractNonPayable { - return new Contract( - address, - _abi, - signerOrProvider - ) as AttackContractNonPayable; - } -} diff --git a/src/types/factories/contracts/test/sigp/AttackingContractNonPayable.sol/index.ts b/src/types/factories/contracts/test/sigp/AttackingContractNonPayable.sol/index.ts deleted file mode 100644 index 308c4095..00000000 --- a/src/types/factories/contracts/test/sigp/AttackingContractNonPayable.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { AttackContractNonPayable__factory } from "./AttackContractNonPayable__factory"; diff --git a/src/types/factories/contracts/test/sigp/DummyMulticallTarget__factory.ts b/src/types/factories/contracts/test/sigp/DummyMulticallTarget__factory.ts deleted file mode 100644 index 1339a88f..00000000 --- a/src/types/factories/contracts/test/sigp/DummyMulticallTarget__factory.ts +++ /dev/null @@ -1,131 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - DummyMulticallTarget, - DummyMulticallTargetInterface, -} from "../../../../contracts/test/sigp/DummyMulticallTarget"; - -const _abi = [ - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "_data", - type: "uint256", - }, - ], - name: "Log1", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "_data", - type: "uint256", - }, - ], - name: "Log2", - type: "event", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "failedCall", - outputs: [], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_data", - type: "uint256", - }, - ], - name: "log1", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_data", - type: "uint256", - }, - ], - name: "log2", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, -]; - -const _bytecode = - "0x608060405234801561001057600080fd5b5061019d806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80635456bf1314610046578063ba2a8a681461005b578063c670f8641461006e575b600080fd5b61005961005436600461014e565b610081565b005b61005961006936600461014e565b6100b8565b61005961007c36600461014e565b61011e565b6040518181527f624fb00c2ce79f34cb543884c3af64816dce0f4cec3d32661959e49d488a7a93906020015b60405180910390a150565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f63616c6c206661696c6564000000000000000000000000000000000000000000604482015260640160405180910390fd5b6040518181527f46692c0e59ca9cd1ad8f984a9d11715ec83424398b7eed4e05c8ce84662415a8906020016100ad565b60006020828403121561016057600080fd5b503591905056fea26469706673582212208e75f679da4f4472325407ea6f86e057fa363b6922298cfeac5bf483d53787c364736f6c634300080a0033"; - -type DummyMulticallTargetConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: DummyMulticallTargetConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class DummyMulticallTarget__factory extends ContractFactory { - constructor(...args: DummyMulticallTargetConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): DummyMulticallTarget { - return super.attach(address) as DummyMulticallTarget; - } - override connect(signer: Signer): DummyMulticallTarget__factory { - return super.connect(signer) as DummyMulticallTarget__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): DummyMulticallTargetInterface { - return new utils.Interface(_abi) as DummyMulticallTargetInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): DummyMulticallTarget { - return new Contract( - address, - _abi, - signerOrProvider - ) as DummyMulticallTarget; - } -} diff --git a/src/types/factories/contracts/test/sigp/FlashLoanAttacker2__factory.ts b/src/types/factories/contracts/test/sigp/FlashLoanAttacker2__factory.ts deleted file mode 100644 index 30c71516..00000000 --- a/src/types/factories/contracts/test/sigp/FlashLoanAttacker2__factory.ts +++ /dev/null @@ -1,164 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - FlashLoanAttacker2, - FlashLoanAttacker2Interface, -} from "../../../../contracts/test/sigp/FlashLoanAttacker2"; - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "creditFacade", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - stateMutability: "payable", - type: "fallback", - }, - { - inputs: [ - { - internalType: "address", - name: "to", - type: "address", - }, - ], - name: "closeCreditAccount", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "onBehalfOf", - type: "address", - }, - { - internalType: "address", - name: "token", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "fundAndCloseAttack", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "address", - name: "onBehalfOf", - type: "address", - }, - { - internalType: "uint16", - name: "leverageFactor", - type: "uint16", - }, - ], - name: "openAndCloseAttack", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "address", - name: "onBehalfOf", - type: "address", - }, - { - internalType: "uint16", - name: "leverageFactor", - type: "uint16", - }, - ], - name: "openCreditAccount", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, -]; - -const _bytecode = - "0x608060405234801561001057600080fd5b506040516105f13803806105f183398101604081905261002f91610054565b600080546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b61055e806100936000396000f3fe60806040526004361061003f5760003560e01c80630ea24e4814610041578063395190eb146100615780633ab45f94146100815780637687f670146100a1575b005b34801561004d57600080fd5b5061003f61005c366004610366565b6100c1565b34801561006d57600080fd5b5061003f61007c3660046103a2565b6101e7565b34801561008d57600080fd5b5061003f61009c3660046103a2565b61028c565b3480156100ad57600080fd5b5061003f6100bc3660046103e9565b61029c565b6000546040517f5978103400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301526044820184905290911690635978103490606401600060405180830381600087803b15801561013d57600080fd5b505af1158015610151573d6000803e3d6000fd5b50506000546040517f2b7c7b110000000000000000000000000000000000000000000000000000000081526004810185905273ffffffffffffffffffffffffffffffffffffffff9091169250632b7c7b119150602401600060405180830381600087803b1580156101c157600080fd5b505af11580156101d5573d6000803e3d6000fd5b505050506101e28361029c565b505050565b600080546040517f6c8f225d0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff858116602483015261ffff851660448301526064820184905290911690636c8f225d906084015b600060405180830381600087803b15801561026e57600080fd5b505af1158015610282573d6000803e3d6000fd5b5050505050505050565b6102978383836101e7565b6101e2825b604080516000808252602082019092526001908290816102df565b6040805180820190915260008152606060208201528152602001906001900390816102b75790505b506000546040517f5f73fbec00000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff1690635f73fbec9061025490879087908790879060040161040b565b803573ffffffffffffffffffffffffffffffffffffffff8116811461036157600080fd5b919050565b60008060006060848603121561037b57600080fd5b6103848461033d565b92506103926020850161033d565b9150604084013590509250925092565b6000806000606084860312156103b757600080fd5b833592506103c76020850161033d565b9150604084013561ffff811681146103de57600080fd5b809150509250925092565b6000602082840312156103fb57600080fd5b6104048261033d565b9392505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff808816845260208781860152604087151581870152606060808188015284885180875260a08901915060a08160051b8a01019650848a016000805b83811015610514578b8a037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60018552825180518a168b52880151888b018890528051888c01819052835b818110156104c6578281018b01518d82018a01528a016104ab565b818111156104d6578489838f0101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169a909a01860199509387019391870191600101610461565b50979e9d505050505050505050505050505056fea2646970667358221220b90dda72c254c0cd7fc20283437938cf3c62a0e6209caf9d26c10123fa5f01f664736f6c634300080a0033"; - -type FlashLoanAttacker2ConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: FlashLoanAttacker2ConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class FlashLoanAttacker2__factory extends ContractFactory { - constructor(...args: FlashLoanAttacker2ConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - creditFacade: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - creditFacade, - overrides || {} - ) as Promise; - } - override getDeployTransaction( - creditFacade: string, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(creditFacade, overrides || {}); - } - override attach(address: string): FlashLoanAttacker2 { - return super.attach(address) as FlashLoanAttacker2; - } - override connect(signer: Signer): FlashLoanAttacker2__factory { - return super.connect(signer) as FlashLoanAttacker2__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): FlashLoanAttacker2Interface { - return new utils.Interface(_abi) as FlashLoanAttacker2Interface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): FlashLoanAttacker2 { - return new Contract(address, _abi, signerOrProvider) as FlashLoanAttacker2; - } -} diff --git a/src/types/factories/contracts/test/sigp/NewConvexBaseRewardPoolMock.sol/NewBaseRewardPoolMock__factory.ts b/src/types/factories/contracts/test/sigp/NewConvexBaseRewardPoolMock.sol/NewBaseRewardPoolMock__factory.ts deleted file mode 100644 index 7d5d0095..00000000 --- a/src/types/factories/contracts/test/sigp/NewConvexBaseRewardPoolMock.sol/NewBaseRewardPoolMock__factory.ts +++ /dev/null @@ -1,767 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { - Signer, - utils, - Contract, - ContractFactory, - BigNumberish, - Overrides, -} from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - NewBaseRewardPoolMock, - NewBaseRewardPoolMockInterface, -} from "../../../../../contracts/test/sigp/NewConvexBaseRewardPoolMock.sol/NewBaseRewardPoolMock"; - -const _abi = [ - { - inputs: [ - { - internalType: "uint256", - name: "pid_", - type: "uint256", - }, - { - internalType: "address", - name: "stakingToken_", - type: "address", - }, - { - internalType: "address", - name: "rewardToken_", - type: "address", - }, - { - internalType: "address", - name: "operator_", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "index", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "user", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "reward", - type: "uint256", - }, - ], - name: "Mock_BaseRewardPaid", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "index", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "user", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "Mock_BaseStaked", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "index", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "user", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "Mock_BaseWithdrawn", - type: "event", - }, - { - inputs: [ - { - internalType: "address", - name: "_reward", - type: "address", - }, - ], - name: "addExtraReward", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "addRewardAmount", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "clearExtraRewards", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "currentRewards", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "donate", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "duration", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "earned", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "extraRewards", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "extraRewardsLength", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "getReward", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - { - internalType: "bool", - name: "_claimExtras", - type: "bool", - }, - ], - name: "getReward", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "historicalRewards", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "lastTimeRewardApplicable", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "lastUpdateTime", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "newRewardRatio", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "operator", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "periodFinish", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "pid", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "queueNewRewards", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "queuedRewards", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "rewardManager", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "rewardPerToken", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "rewardPerTokenStored", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "rewardRate", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "rewardToken", - outputs: [ - { - internalType: "contract ERC20Mock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "rewards", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "stake", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "stakeAll", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_for", - type: "address", - }, - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "stakeFor", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "stakingToken", - outputs: [ - { - internalType: "contract IERC20", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "totalSupply", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "userRewardPerTokenPaid", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "bool", - name: "claim", - type: "bool", - }, - ], - name: "withdraw", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bool", - name: "claim", - type: "bool", - }, - ], - name: "withdrawAll", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bool", - name: "claim", - type: "bool", - }, - ], - name: "withdrawAllAndUnwrap", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "bool", - name: "claim", - type: "bool", - }, - ], - name: "withdrawAndUnwrap", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, -]; - -const _bytecode = - "0x60806040526000600555600060065560006009556000600a556000600b55600060115560006012553480156200003457600080fd5b5060405162001cd738038062001cd78339810160408190526200005791620000bd565b600493909355600180546001600160a01b03199081166001600160a01b039485161790915560008054821692841692909217909155600280549091169190921617905562000111565b80516001600160a01b0381168114620000b857600080fd5b919050565b60008060008060808587031215620000d457600080fd5b84519350620000e660208601620000a0565b9250620000f660408601620000a0565b91506200010660608601620000a0565b905092959194509250565b611bb680620001216000396000f3fe608060405234801561001057600080fd5b50600436106102765760003560e01c80637050ccd911610160578063a694fc3a116100d8578063df136d651161008c578063f106845411610071578063f10684541461050a578063f14faf6f146103c2578063f7c618c11461051357600080fd5b8063df136d65146104f8578063ebe2b12b1461050157600080fd5b8063c8f33c91116100bd578063c8f33c91146104df578063cd3daf9d146104e8578063d55a23f4146104f057600080fd5b8063a694fc3a146104b9578063c32e7202146104cc57600080fd5b806380faa57d1161012f5780638dcb4061116101145780638dcb406114610495578063901a7d531461049d5780639b7ccf4c146104a657600080fd5b806380faa57d1461046d5780638b8763471461047557600080fd5b80637050ccd9146103fb57806370a082311461040e57806372f702f3146104445780637b0a47ee1461046457600080fd5b806338d07436116101f3578063570ca735116101c25780635e43c47b116101a75780635e43c47b146103d657806363d38c3b146103e95780636c8bcee8146103f257600080fd5b8063570ca735146103a2578063590a41f5146103c257600080fd5b806338d07436146103615780633d18b9121461037457806340c354461461037c57806349f039a21461038f57600080fd5b80630fb5a6b41161024a5780631c1c6fe51161022f5780631c1c6fe514610322578063262d3d6d146103355780632ee409081461033e57600080fd5b80630fb5a6b41461031057806318160ddd1461031a57600080fd5b80628cc2621461027b5780630569d388146102a15780630700037d146102ab5780630f4ef8a6146102cb575b600080fd5b61028e61028936600461188e565b610533565b6040519081526020015b60405180910390f35b6102a96105cc565b005b61028e6102b936600461188e565b600e6020526000908152604090205481565b6003546102eb9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610298565b61028e62093a8081565b600c5461028e565b6102a96103303660046118b7565b6105da565b61028e600b5481565b61035161034c3660046118d4565b6105f8565b6040519015158152602001610298565b61035161036f3660046118fe565b61087f565b610351610aa7565b6102eb61038a36600461192e565b610abc565b6102a961039d3660046118b7565b610af3565b6002546102eb9073ffffffffffffffffffffffffffffffffffffffff1681565b6103516103d036600461192e565b50600190565b6103516103e436600461188e565b610b0d565b61028e60095481565b61028e61033e81565b610351610409366004611947565b610c07565b61028e61041c36600461188e565b73ffffffffffffffffffffffffffffffffffffffff166000908152600f602052604090205490565b6001546102eb9073ffffffffffffffffffffffffffffffffffffffff1681565b61028e60065481565b61028e610e85565b61028e61048336600461188e565b600d6020526000908152604090205481565b610351610e98565b61028e600a5481565b6102a96104b436600461192e565b610f43565b6103516104c736600461192e565b610f84565b6103516104da3660046118fe565b6111bd565b61028e60075481565b60085461028e565b60105461028e565b61028e60085481565b61028e60055481565b61028e60045481565b6000546102eb9073ffffffffffffffffffffffffffffffffffffffff1681565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600e6020908152604080832054600d9092528220546105c691906105c090670de0b6b3a7640000906105ba9061058e9061058860085490565b906113b3565b73ffffffffffffffffffffffffffffffffffffffff88166000908152600f6020526040902054906113c6565b906113d2565b906113de565b92915050565b6105d860106000611833565b565b336000908152600f60205260409020546105f4908261087f565b5050565b60008273ffffffffffffffffffffffffffffffffffffffff8116156106595761062081610533565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600e6020908152604080832093909355600854600d909152919020555b600083116106c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f526577617264506f6f6c203a2043616e6e6f74207374616b652030000000000060448201526064015b60405180910390fd5b60005b60105481101561079057601081815481106106e8576106e8611973565b6000918252602090912001546040517fadc9772e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018790529091169063adc9772e90604401600060405180830381600087803b15801561076557600080fd5b505af1158015610779573d6000803e3d6000fd5b505050508080610788906119d1565b9150506106cb565b50600c5461079e90846113de565b600c5573ffffffffffffffffffffffffffffffffffffffff84166000908152600f60205260409020546107d190846113de565b73ffffffffffffffffffffffffffffffffffffffff8086166000908152600f602052604090209190915560015461080b91163330866113ea565b8373ffffffffffffffffffffffffffffffffffffffff166012547e12ea37eafadc86c304798c357ee0b9923724f92be4e45c4796ccf0e33f84ce8560405161085591815260200190565b60405180910390a36001601260008282546108709190611a0a565b90915550600195945050505050565b60003380156108ca5761089181610533565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600e6020908152604080832093909355600854600d909152919020555b60008411610934576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f526577617264506f6f6c203a2043616e6e6f742077697468647261772030000060448201526064016106bf565b60005b6010548110156109fa576010818154811061095457610954611973565b6000918252602090912001546040517ff3fef3a30000000000000000000000000000000000000000000000000000000081523360048201526024810187905273ffffffffffffffffffffffffffffffffffffffff9091169063f3fef3a390604401600060405180830381600087803b1580156109cf57600080fd5b505af11580156109e3573d6000803e3d6000fd5b5050505080806109f2906119d1565b915050610937565b50600c54610a0890856113b3565b600c55336000908152600f6020526040902054610a2590856113b3565b336000818152600f6020526040902091909155600154610a5e9173ffffffffffffffffffffffffffffffffffffffff90911690866114cc565b8215610a7157610a6f336001610c07565b505b6012546040518581523391907f5512f168a2a6322c28d70f2b2811c8857ea8b1f256d7be8ee8ef770665c3f96290602001610855565b6000610ab4336001610c07565b506001905090565b60108181548110610acc57600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b336000908152600f60205260409020546105f490826111bd565b600073ffffffffffffffffffffffffffffffffffffffff8216610b8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f217265776172642073657474696e67000000000000000000000000000000000060448201526064016106bf565b5060108054600180820183556000929092527f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6720180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff939093169290921790915590565b60008273ffffffffffffffffffffffffffffffffffffffff811615610c6857610c2f81610533565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600e6020908152604080832093909355600854600d909152919020555b6000610c7385610533565b90508015610d465773ffffffffffffffffffffffffffffffffffffffff8086166000908152600e6020526040812081905554610cb1911686836114cc565b600254600480546040517f71192b170000000000000000000000000000000000000000000000000000000081529182015273ffffffffffffffffffffffffffffffffffffffff878116602483015260448201849052909116906371192b1790606401600060405180830381600087803b158015610d2d57600080fd5b505af1158015610d41573d6000803e3d6000fd5b505050505b8315610e0f5760005b601054811015610e0d5760108181548110610d6c57610d6c611973565b6000918252602090912001546040517fc00007b000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529091169063c00007b090602401600060405180830381600087803b158015610de257600080fd5b505af1158015610df6573d6000803e3d6000fd5b505050508080610e05906119d1565b915050610d4f565b505b8473ffffffffffffffffffffffffffffffffffffffff166012547fa7283f521536f3db5cd5c50a1f053bbba463b20de118ee0f9dd4c3ff2bc9532f83604051610e5a91815260200190565b60405180910390a3600160126000828254610e759190611a0a565b9091555060019695505050505050565b6000610e9342600554611527565b905090565b6001546040517f70a08231000000000000000000000000000000000000000000000000000000008152336004820152600091829173ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa158015610f0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2f9190611a22565b9050610f3a81610f84565b50600191505090565b600c5415610f8157600c54610f6082670de0b6b3a7640000611a3b565b610f6a9190611a78565b60086000828254610f7b9190611a0a565b90915550505b50565b6000338015610fcf57610f9681610533565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600e6020908152604080832093909355600854600d909152919020555b60008311611039576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f526577617264506f6f6c203a2043616e6e6f74207374616b652030000000000060448201526064016106bf565b60005b6010548110156110ff576010818154811061105957611059611973565b6000918252602090912001546040517fadc9772e0000000000000000000000000000000000000000000000000000000081523360048201526024810186905273ffffffffffffffffffffffffffffffffffffffff9091169063adc9772e90604401600060405180830381600087803b1580156110d457600080fd5b505af11580156110e8573d6000803e3d6000fd5b5050505080806110f7906119d1565b91505061103c565b50600c5461110d90846113de565b600c55336000908152600f602052604090205461112a90846113de565b336000818152600f60205260409020919091556001546111649173ffffffffffffffffffffffffffffffffffffffff9091169030866113ea565b6012546040518481523391907e12ea37eafadc86c304798c357ee0b9923724f92be4e45c4796ccf0e33f84ce9060200160405180910390a36001601260008282546111af9190611a0a565b909155506001949350505050565b6000338015611208576111cf81610533565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600e6020908152604080832093909355600854600d909152919020555b60005b6010548110156112ce576010818154811061122857611228611973565b6000918252602090912001546040517ff3fef3a30000000000000000000000000000000000000000000000000000000081523360048201526024810187905273ffffffffffffffffffffffffffffffffffffffff9091169063f3fef3a390604401600060405180830381600087803b1580156112a357600080fd5b505af11580156112b7573d6000803e3d6000fd5b5050505080806112c6906119d1565b91505061120b565b50600c546112dc90856113b3565b600c55336000908152600f60205260409020546112f990856113b3565b336000818152600f602052604090819020929092556002546004805493517f14cd70e40000000000000000000000000000000000000000000000000000000081529081019390935260248301879052604483019190915273ffffffffffffffffffffffffffffffffffffffff16906314cd70e490606401600060405180830381600087803b15801561138a57600080fd5b505af115801561139e573d6000803e3d6000fd5b505050508215610a7157610a6f336001610c07565b60006113bf8284611ab3565b9392505050565b60006113bf8284611a3b565b60006113bf8284611a78565b60006113bf8284611a0a565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526114c69085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261153d565b50505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526115229084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401611444565b505050565b600081831061153657816113bf565b5090919050565b600061159f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166116499092919063ffffffff16565b80519091501561152257808060200190518101906115bd9190611aca565b611522576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016106bf565b60606116588484600085611660565b949350505050565b6060824710156116f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016106bf565b843b61175a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016106bf565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516117839190611b13565b60006040518083038185875af1925050503d80600081146117c0576040519150601f19603f3d011682016040523d82523d6000602084013e6117c5565b606091505b50915091506117d58282866117e0565b979650505050505050565b606083156117ef5750816113bf565b8251156117ff5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106bf9190611b2f565b5080546000825590600052602060002090810190610f8191905b80821115611861576000815560010161184d565b5090565b803573ffffffffffffffffffffffffffffffffffffffff8116811461188957600080fd5b919050565b6000602082840312156118a057600080fd5b6113bf82611865565b8015158114610f8157600080fd5b6000602082840312156118c957600080fd5b81356113bf816118a9565b600080604083850312156118e757600080fd5b6118f083611865565b946020939093013593505050565b6000806040838503121561191157600080fd5b823591506020830135611923816118a9565b809150509250929050565b60006020828403121561194057600080fd5b5035919050565b6000806040838503121561195a57600080fd5b61196383611865565b91506020830135611923816118a9565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611a0357611a036119a2565b5060010190565b60008219821115611a1d57611a1d6119a2565b500190565b600060208284031215611a3457600080fd5b5051919050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611a7357611a736119a2565b500290565b600082611aae577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600082821015611ac557611ac56119a2565b500390565b600060208284031215611adc57600080fd5b81516113bf816118a9565b60005b83811015611b02578181015183820152602001611aea565b838111156114c65750506000910152565b60008251611b25818460208701611ae7565b9190910192915050565b6020815260008251806020840152611b4e816040850160208701611ae7565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea26469706673582212207617fdeb11a4435e71b1c7ba9196963159099b4fb00b53cb02d7b5708165f28064736f6c634300080a0033"; - -type NewBaseRewardPoolMockConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: NewBaseRewardPoolMockConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class NewBaseRewardPoolMock__factory extends ContractFactory { - constructor(...args: NewBaseRewardPoolMockConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - pid_: BigNumberish, - stakingToken_: string, - rewardToken_: string, - operator_: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - pid_, - stakingToken_, - rewardToken_, - operator_, - overrides || {} - ) as Promise; - } - override getDeployTransaction( - pid_: BigNumberish, - stakingToken_: string, - rewardToken_: string, - operator_: string, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction( - pid_, - stakingToken_, - rewardToken_, - operator_, - overrides || {} - ); - } - override attach(address: string): NewBaseRewardPoolMock { - return super.attach(address) as NewBaseRewardPoolMock; - } - override connect(signer: Signer): NewBaseRewardPoolMock__factory { - return super.connect(signer) as NewBaseRewardPoolMock__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): NewBaseRewardPoolMockInterface { - return new utils.Interface(_abi) as NewBaseRewardPoolMockInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): NewBaseRewardPoolMock { - return new Contract( - address, - _abi, - signerOrProvider - ) as NewBaseRewardPoolMock; - } -} diff --git a/src/types/factories/contracts/test/sigp/NewConvexBaseRewardPoolMock.sol/index.ts b/src/types/factories/contracts/test/sigp/NewConvexBaseRewardPoolMock.sol/index.ts deleted file mode 100644 index f124a9c9..00000000 --- a/src/types/factories/contracts/test/sigp/NewConvexBaseRewardPoolMock.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { NewBaseRewardPoolMock__factory } from "./NewBaseRewardPoolMock__factory"; diff --git a/src/types/factories/contracts/test/sigp/NewConvexBoosterMock.sol/NewBoosterMock__factory.ts b/src/types/factories/contracts/test/sigp/NewConvexBoosterMock.sol/NewBoosterMock__factory.ts deleted file mode 100644 index 97ce89b8..00000000 --- a/src/types/factories/contracts/test/sigp/NewConvexBoosterMock.sol/NewBoosterMock__factory.ts +++ /dev/null @@ -1,776 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - NewBoosterMock, - NewBoosterMockInterface, -} from "../../../../../contracts/test/sigp/NewConvexBoosterMock.sol/NewBoosterMock"; - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "_crv", - type: "address", - }, - { - internalType: "address", - name: "_cvx", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "index", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "user", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "poolid", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - indexed: false, - internalType: "bool", - name: "_stake", - type: "bool", - }, - ], - name: "Mock_Deposited", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "index", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "user", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "poolid", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "Mock_Withdrawn", - type: "event", - }, - { - inputs: [], - name: "FEE_DENOMINATOR", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "MaxFees", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_lptoken", - type: "address", - }, - ], - name: "addPool", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "crv", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_pid", - type: "uint256", - }, - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - { - internalType: "bool", - name: "_stake", - type: "bool", - }, - ], - name: "deposit", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_pid", - type: "uint256", - }, - { - internalType: "bool", - name: "_stake", - type: "bool", - }, - ], - name: "depositAll", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "distributionAddressId", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "earmarkIncentive", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "feeDistro", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "feeManager", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "feeToken", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "gaugeMap", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "index", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "isShutdown", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "lockFees", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "lockIncentive", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "lockRewards", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "minter", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "owner", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "platformFee", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "poolInfo", - outputs: [ - { - internalType: "address", - name: "lptoken", - type: "address", - }, - { - internalType: "address", - name: "token", - type: "address", - }, - { - internalType: "address", - name: "gauge", - type: "address", - }, - { - internalType: "address", - name: "crvRewards", - type: "address", - }, - { - internalType: "address", - name: "stash", - type: "address", - }, - { - internalType: "bool", - name: "shutdown", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "poolLength", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "poolManager", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "registry", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "rewardArbitrator", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_pid", - type: "uint256", - }, - { - internalType: "address", - name: "_address", - type: "address", - }, - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "rewardClaimed", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "rewardFactory", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "staker", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "stakerIncentive", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "stakerRewards", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "stashFactory", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "tokenFactory", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "treasury", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "voteDelegate", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "voteOwnership", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "voteParameter", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_pid", - type: "uint256", - }, - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "withdraw", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_pid", - type: "uint256", - }, - ], - name: "withdrawAll", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_pid", - type: "uint256", - }, - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - { - internalType: "address", - name: "_to", - type: "address", - }, - ], - name: "withdrawTo", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, -]; - -const _bytecode = - "0x60c06040526103e86001556101c26002556032600355600060045560006013553480156200002c57600080fd5b5060405162005205380380620052058339810160408190526200004f91620000ed565b601280546000608081905260058054336001600160a01b03199182168117909255600c80548216831790556006805482168317905560078054821690921790915560118054821690556001600160a81b0319909216909255600d8054821690556001600160a01b0392831660a0528154169290911691909117905562000125565b80516001600160a01b0381168114620000e857600080fd5b919050565b600080604083850312156200010157600080fd5b6200010c83620000d0565b91506200011c60208401620000d0565b90509250929050565b60805160a0516150b3620001526000396000818161035b0152610d7b015260006104be01526150b36000f3fe60806040523480156200001157600080fd5b5060043610620002e45760003560e01c80636a4874a11162000199578063b42eda7111620000e9578063d6a0f5301162000097578063d914cd4b116200007a578063d914cd4b1462000711578063dc4c90d31462000728578063e77772fe146200074957600080fd5b8063d6a0f53014620006e6578063d73792a9146200070757600080fd5b8063cb0d5b5211620000cc578063cb0d5b52146200067e578063cfb9cfba14620006a4578063d0fb020314620006c557600080fd5b8063b42eda71146200063c578063bf86d690146200065857600080fd5b806393e846a011620001475780639f00332b116200012a5780639f00332b14620005de578063a386a08014620005ff578063ab366292146200061b57600080fd5b806393e846a014620005be578063958e2d3114620005c757600080fd5b80637303df9a116200017c5780637303df9a146200057b5780637b10399914620005855780638da5cb5b146200059d57600080fd5b80636a4874a1146200054357806371192b17146200056457600080fd5b8063376d771a11620002555780635ebaf1db116200020357806361d027b311620001e657806361d027b314620004f757806362d28ac71462000518578063647846a5146200052257600080fd5b80635ebaf1db14620004b857806360759fce14620004e057600080fd5b806343a0d066116200023857806343a0d0661462000480578063441a3e7014620004975780635094061814620004ae57600080fd5b8063376d771a14620004555780633a088cd2146200047657600080fd5b806314cd70e411620002b3578063245e4bf01162000296578063245e4bf0146200042057806326232a2e14620004415780632986c0e5146200044b57600080fd5b806314cd70e414620003905780631526fe2714620003b857600080fd5b8063043b684a14620002e9578063068eb19e1462000334578063075461721462000355578063081e3eda146200037d575b600080fd5b600b546200030a9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6009546200030a9073ffffffffffffffffffffffffffffffffffffffff1681565b6200030a7f000000000000000000000000000000000000000000000000000000000000000081565b6014545b6040519081526020016200032b565b620003a7620003a1366004620019b9565b6200076a565b60405190151581526020016200032b565b620003cf620003c9366004620019f1565b62000839565b6040805173ffffffffffffffffffffffffffffffffffffffff97881681529587166020870152938616938501939093529084166060840152909216608082015290151560a082015260c0016200032b565b6008546200030a9073ffffffffffffffffffffffffffffffffffffffff1681565b6200038160045481565b6200038160135481565b600f546200030a9073ffffffffffffffffffffffffffffffffffffffff1681565b6200038160035481565b620003a76200049136600462001a1d565b620008b9565b620003a7620004a836600462001a59565b62000b8c565b6200038160015481565b6200030a7f000000000000000000000000000000000000000000000000000000000000000081565b620003a7620004f136600462001a7c565b62000ba5565b600d546200030a9073ffffffffffffffffffffffffffffffffffffffff1681565b6200038160025481565b6012546200030a9073ffffffffffffffffffffffffffffffffffffffff1681565b6000546200030a9073ffffffffffffffffffffffffffffffffffffffff1681565b620003a76200057536600462001aaf565b62000c7f565b620003816107d081565b6200030a6f22d53366457f9d5e68ec105046fc438381565b6005546200030a9073ffffffffffffffffffffffffffffffffffffffff1681565b62000381600481565b620003a7620005d8366004620019f1565b62000de4565b600c546200030a9073ffffffffffffffffffffffffffffffffffffffff1681565b6200030a73e478de485ad2fe566d49342cbd03e49ed7db335681565b6010546200030a9073ffffffffffffffffffffffffffffffffffffffff1681565b6200030a73bcff8b0b9419b9a88c44546519b1e909cf33039981565b601254620003a79074010000000000000000000000000000000000000000900460ff1681565b620003a76200068f36600462001ae7565b60156020526000908152604090205460ff1681565b600e546200030a9073ffffffffffffffffffffffffffffffffffffffff1681565b6006546200030a9073ffffffffffffffffffffffffffffffffffffffff1681565b6011546200030a9073ffffffffffffffffffffffffffffffffffffffff1681565b6200038161271081565b620003a76200072236600462001ae7565b62000ebf565b6007546200030a9073ffffffffffffffffffffffffffffffffffffffff1681565b600a546200030a9073ffffffffffffffffffffffffffffffffffffffff1681565b6000806014858154811062000783576200078362001b05565b600091825260209091206003600590920201015473ffffffffffffffffffffffffffffffffffffffff1690503381146200081e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f216175746800000000000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b6200082c8585338662001235565b60019150505b9392505050565b601481815481106200084a57600080fd5b60009182526020909120600590910201805460018201546002830154600384015460049094015473ffffffffffffffffffffffffffffffffffffffff93841695509183169390831692908116919081169074010000000000000000000000000000000000000000900460ff1686565b60008060148581548110620008d257620008d262001b05565b60009182526020909120600590910201805490915073ffffffffffffffffffffffffffffffffffffffff166200090b813330886200139a565b600182015473ffffffffffffffffffffffffffffffffffffffff16841562000a95576040517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810187905273ffffffffffffffffffffffffffffffffffffffff8216906340c10f1990604401600060405180830381600087803b1580156200099c57600080fd5b505af1158015620009b1573d6000803e3d6000fd5b505050600384015473ffffffffffffffffffffffffffffffffffffffff9081169150620009e39083168260006200147e565b62000a0673ffffffffffffffffffffffffffffffffffffffff831682896200147e565b6040517f2ee409080000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff821690632ee4090890604401600060405180830381600087803b15801562000a7557600080fd5b505af115801562000a8a573d6000803e3d6000fd5b505050505062000b1e565b6040517f40c10f190000000000000000000000000000000000000000000000000000000081523360048201526024810187905273ffffffffffffffffffffffffffffffffffffffff8216906340c10f1990604401600060405180830381600087803b15801562000b0457600080fd5b505af115801562000b19573d6000803e3d6000fd5b505050505b60135460408051918252602082018890528615158282015251889133917fb16197b2bc5f21de7d21259f49728a7ae0f7f294f8b5d0815aed6ab550b137829181900360600190a360016013600082825462000b7a919062001b34565b90915550600198975050505050505050565b600062000b9c8383333362001235565b50600192915050565b6000806014848154811062000bbe5762000bbe62001b05565b60009182526020822060059190910201546040517f70a0823100000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff909116925082906370a0823190602401602060405180830381865afa15801562000c3e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c64919062001b74565b905062000c73858286620008b9565b50600195945050505050565b6000806014858154811062000c985762000c9862001b05565b600091825260209091206003600590920201015473ffffffffffffffffffffffffffffffffffffffff16905033811462000d2f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f2161757468000000000000000000000000000000000000000000000000000000604482015260640162000815565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590527f000000000000000000000000000000000000000000000000000000000000000016906340c10f1990604401600060405180830381600087803b15801562000dc057600080fd5b505af115801562000dd5573d6000803e3d6000fd5b50600198975050505050505050565b6000806014838154811062000dfd5762000dfd62001b05565b60009182526020822060059190910201600101546040517f70a0823100000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff909116925082906370a0823190602401602060405180830381865afa15801562000e80573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ea6919062001b74565b905062000eb4848262000b8c565b506001949350505050565b600073ffffffffffffffffffffffffffffffffffffffff821662000f40576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f21706172616d0000000000000000000000000000000000000000000000000000604482015260640162000815565b60145460405160009060129062000f579062001973565b6060808252600b908201527f436f6e766578546f6b656e000000000000000000000000000000000000000000608082015260a0602082018190526008908201527f435658544f4b454e00000000000000000000000000000000000000000000000060c082015260ff909116604082015260e001604051809103906000f08015801562000fe7573d6000803e3d6000fd5b5090506000828260008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16306040516200101e9062001981565b93845273ffffffffffffffffffffffffffffffffffffffff92831660208501529082166040840152166060820152608001604051809103906000f0801580156200106c573d6000803e3d6000fd5b506040805160c08101825273ffffffffffffffffffffffffffffffffffffffff978816815293871660208501908152600191850182815292881660608601908152600260808701908152600060a088018181526014805480880182559252975160059091027fce6d7b5282bd9a3661ae061feed1dbda4e52ab073b1f9285be6e155d9c38d4ec81018054928d167fffffffffffffffffffffffff000000000000000000000000000000000000000093841617905593517fce6d7b5282bd9a3661ae061feed1dbda4e52ab073b1f9285be6e155d9c38d4ed85018054918d1691831691909117905594517fce6d7b5282bd9a3661ae061feed1dbda4e52ab073b1f9285be6e155d9c38d4ee84018054918c1691871691909117905590517fce6d7b5282bd9a3661ae061feed1dbda4e52ab073b1f9285be6e155d9c38d4ef83018054918b16919095161790935591517fce6d7b5282bd9a3661ae061feed1dbda4e52ab073b1f9285be6e155d9c38d4f090920180549451151574010000000000000000000000000000000000000000027fffffffffffffffffffffff0000000000000000000000000000000000000000009095169290971691909117929092179094559392505050565b6000601485815481106200124d576200124d62001b05565b60009182526020909120600590910201805460018201546040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018990529394509183169216908190639dc29fac90604401600060405180830381600087803b158015620012dd57600080fd5b505af1158015620012f2573d6000803e3d6000fd5b506200131a9250505073ffffffffffffffffffffffffffffffffffffffff831685886200160d565b868473ffffffffffffffffffffffffffffffffffffffff167f617ecc79b6b01a6f07d16c413645249f6c6b38105ddcd843e4d4c0d11009db8c601354896040516200136f929190918252602082015260400190565b60405180910390a36001601360008282546200138c919062001b34565b909155505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052620014789085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262001665565b50505050565b8015806200152257506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015284169063dd62ed3e90604401602060405180830381865afa158015620014fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001520919062001b74565b155b620015b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e636500000000000000000000606482015260840162000815565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052620016089084907f095ea7b30000000000000000000000000000000000000000000000000000000090606401620013f5565b505050565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052620016089084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401620013f5565b6000620016c9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16620017789092919063ffffffff16565b805190915015620016085780806020019051810190620016ea919062001b8e565b62001608576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840162000815565b606062001789848460008562001791565b949350505050565b60608247101562001825576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c0000000000000000000000000000000000000000000000000000606482015260840162000815565b843b6200188f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000815565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051620018ba919062001bdd565b60006040518083038185875af1925050503d8060008114620018f9576040519150601f19603f3d011682016040523d82523d6000602084013e620018fe565b606091505b5091509150620019108282866200191b565b979650505050505050565b606083156200192c57508162000832565b8251156200193d5782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000815919062001bfb565b6117588062001c4f83390190565b611cd780620033a783390190565b803573ffffffffffffffffffffffffffffffffffffffff81168114620019b457600080fd5b919050565b600080600060608486031215620019cf57600080fd5b8335925060208401359150620019e8604085016200198f565b90509250925092565b60006020828403121562001a0457600080fd5b5035919050565b801515811462001a1a57600080fd5b50565b60008060006060848603121562001a3357600080fd5b8335925060208401359150604084013562001a4e8162001a0b565b809150509250925092565b6000806040838503121562001a6d57600080fd5b50508035926020909101359150565b6000806040838503121562001a9057600080fd5b82359150602083013562001aa48162001a0b565b809150509250929050565b60008060006060848603121562001ac557600080fd5b8335925062001ad7602085016200198f565b9150604084013590509250925092565b60006020828403121562001afa57600080fd5b62000832826200198f565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000821982111562001b6f577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500190565b60006020828403121562001b8757600080fd5b5051919050565b60006020828403121562001ba157600080fd5b8151620008328162001a0b565b60005b8381101562001bcb57818101518382015260200162001bb1565b83811115620014785750506000910152565b6000825162001bf181846020870162001bae565b9190910192915050565b602081526000825180602084015262001c1c81604085016020870162001bae565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe60a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a003360806040526000600555600060065560006009556000600a556000600b55600060115560006012553480156200003457600080fd5b5060405162001cd738038062001cd78339810160408190526200005791620000bd565b600493909355600180546001600160a01b03199081166001600160a01b039485161790915560008054821692841692909217909155600280549091169190921617905562000111565b80516001600160a01b0381168114620000b857600080fd5b919050565b60008060008060808587031215620000d457600080fd5b84519350620000e660208601620000a0565b9250620000f660408601620000a0565b91506200010660608601620000a0565b905092959194509250565b611bb680620001216000396000f3fe608060405234801561001057600080fd5b50600436106102765760003560e01c80637050ccd911610160578063a694fc3a116100d8578063df136d651161008c578063f106845411610071578063f10684541461050a578063f14faf6f146103c2578063f7c618c11461051357600080fd5b8063df136d65146104f8578063ebe2b12b1461050157600080fd5b8063c8f33c91116100bd578063c8f33c91146104df578063cd3daf9d146104e8578063d55a23f4146104f057600080fd5b8063a694fc3a146104b9578063c32e7202146104cc57600080fd5b806380faa57d1161012f5780638dcb4061116101145780638dcb406114610495578063901a7d531461049d5780639b7ccf4c146104a657600080fd5b806380faa57d1461046d5780638b8763471461047557600080fd5b80637050ccd9146103fb57806370a082311461040e57806372f702f3146104445780637b0a47ee1461046457600080fd5b806338d07436116101f3578063570ca735116101c25780635e43c47b116101a75780635e43c47b146103d657806363d38c3b146103e95780636c8bcee8146103f257600080fd5b8063570ca735146103a2578063590a41f5146103c257600080fd5b806338d07436146103615780633d18b9121461037457806340c354461461037c57806349f039a21461038f57600080fd5b80630fb5a6b41161024a5780631c1c6fe51161022f5780631c1c6fe514610322578063262d3d6d146103355780632ee409081461033e57600080fd5b80630fb5a6b41461031057806318160ddd1461031a57600080fd5b80628cc2621461027b5780630569d388146102a15780630700037d146102ab5780630f4ef8a6146102cb575b600080fd5b61028e61028936600461188e565b610533565b6040519081526020015b60405180910390f35b6102a96105cc565b005b61028e6102b936600461188e565b600e6020526000908152604090205481565b6003546102eb9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610298565b61028e62093a8081565b600c5461028e565b6102a96103303660046118b7565b6105da565b61028e600b5481565b61035161034c3660046118d4565b6105f8565b6040519015158152602001610298565b61035161036f3660046118fe565b61087f565b610351610aa7565b6102eb61038a36600461192e565b610abc565b6102a961039d3660046118b7565b610af3565b6002546102eb9073ffffffffffffffffffffffffffffffffffffffff1681565b6103516103d036600461192e565b50600190565b6103516103e436600461188e565b610b0d565b61028e60095481565b61028e61033e81565b610351610409366004611947565b610c07565b61028e61041c36600461188e565b73ffffffffffffffffffffffffffffffffffffffff166000908152600f602052604090205490565b6001546102eb9073ffffffffffffffffffffffffffffffffffffffff1681565b61028e60065481565b61028e610e85565b61028e61048336600461188e565b600d6020526000908152604090205481565b610351610e98565b61028e600a5481565b6102a96104b436600461192e565b610f43565b6103516104c736600461192e565b610f84565b6103516104da3660046118fe565b6111bd565b61028e60075481565b60085461028e565b60105461028e565b61028e60085481565b61028e60055481565b61028e60045481565b6000546102eb9073ffffffffffffffffffffffffffffffffffffffff1681565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600e6020908152604080832054600d9092528220546105c691906105c090670de0b6b3a7640000906105ba9061058e9061058860085490565b906113b3565b73ffffffffffffffffffffffffffffffffffffffff88166000908152600f6020526040902054906113c6565b906113d2565b906113de565b92915050565b6105d860106000611833565b565b336000908152600f60205260409020546105f4908261087f565b5050565b60008273ffffffffffffffffffffffffffffffffffffffff8116156106595761062081610533565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600e6020908152604080832093909355600854600d909152919020555b600083116106c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f526577617264506f6f6c203a2043616e6e6f74207374616b652030000000000060448201526064015b60405180910390fd5b60005b60105481101561079057601081815481106106e8576106e8611973565b6000918252602090912001546040517fadc9772e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018790529091169063adc9772e90604401600060405180830381600087803b15801561076557600080fd5b505af1158015610779573d6000803e3d6000fd5b505050508080610788906119d1565b9150506106cb565b50600c5461079e90846113de565b600c5573ffffffffffffffffffffffffffffffffffffffff84166000908152600f60205260409020546107d190846113de565b73ffffffffffffffffffffffffffffffffffffffff8086166000908152600f602052604090209190915560015461080b91163330866113ea565b8373ffffffffffffffffffffffffffffffffffffffff166012547e12ea37eafadc86c304798c357ee0b9923724f92be4e45c4796ccf0e33f84ce8560405161085591815260200190565b60405180910390a36001601260008282546108709190611a0a565b90915550600195945050505050565b60003380156108ca5761089181610533565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600e6020908152604080832093909355600854600d909152919020555b60008411610934576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f526577617264506f6f6c203a2043616e6e6f742077697468647261772030000060448201526064016106bf565b60005b6010548110156109fa576010818154811061095457610954611973565b6000918252602090912001546040517ff3fef3a30000000000000000000000000000000000000000000000000000000081523360048201526024810187905273ffffffffffffffffffffffffffffffffffffffff9091169063f3fef3a390604401600060405180830381600087803b1580156109cf57600080fd5b505af11580156109e3573d6000803e3d6000fd5b5050505080806109f2906119d1565b915050610937565b50600c54610a0890856113b3565b600c55336000908152600f6020526040902054610a2590856113b3565b336000818152600f6020526040902091909155600154610a5e9173ffffffffffffffffffffffffffffffffffffffff90911690866114cc565b8215610a7157610a6f336001610c07565b505b6012546040518581523391907f5512f168a2a6322c28d70f2b2811c8857ea8b1f256d7be8ee8ef770665c3f96290602001610855565b6000610ab4336001610c07565b506001905090565b60108181548110610acc57600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b336000908152600f60205260409020546105f490826111bd565b600073ffffffffffffffffffffffffffffffffffffffff8216610b8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f217265776172642073657474696e67000000000000000000000000000000000060448201526064016106bf565b5060108054600180820183556000929092527f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6720180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff939093169290921790915590565b60008273ffffffffffffffffffffffffffffffffffffffff811615610c6857610c2f81610533565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600e6020908152604080832093909355600854600d909152919020555b6000610c7385610533565b90508015610d465773ffffffffffffffffffffffffffffffffffffffff8086166000908152600e6020526040812081905554610cb1911686836114cc565b600254600480546040517f71192b170000000000000000000000000000000000000000000000000000000081529182015273ffffffffffffffffffffffffffffffffffffffff878116602483015260448201849052909116906371192b1790606401600060405180830381600087803b158015610d2d57600080fd5b505af1158015610d41573d6000803e3d6000fd5b505050505b8315610e0f5760005b601054811015610e0d5760108181548110610d6c57610d6c611973565b6000918252602090912001546040517fc00007b000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529091169063c00007b090602401600060405180830381600087803b158015610de257600080fd5b505af1158015610df6573d6000803e3d6000fd5b505050508080610e05906119d1565b915050610d4f565b505b8473ffffffffffffffffffffffffffffffffffffffff166012547fa7283f521536f3db5cd5c50a1f053bbba463b20de118ee0f9dd4c3ff2bc9532f83604051610e5a91815260200190565b60405180910390a3600160126000828254610e759190611a0a565b9091555060019695505050505050565b6000610e9342600554611527565b905090565b6001546040517f70a08231000000000000000000000000000000000000000000000000000000008152336004820152600091829173ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa158015610f0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2f9190611a22565b9050610f3a81610f84565b50600191505090565b600c5415610f8157600c54610f6082670de0b6b3a7640000611a3b565b610f6a9190611a78565b60086000828254610f7b9190611a0a565b90915550505b50565b6000338015610fcf57610f9681610533565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600e6020908152604080832093909355600854600d909152919020555b60008311611039576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f526577617264506f6f6c203a2043616e6e6f74207374616b652030000000000060448201526064016106bf565b60005b6010548110156110ff576010818154811061105957611059611973565b6000918252602090912001546040517fadc9772e0000000000000000000000000000000000000000000000000000000081523360048201526024810186905273ffffffffffffffffffffffffffffffffffffffff9091169063adc9772e90604401600060405180830381600087803b1580156110d457600080fd5b505af11580156110e8573d6000803e3d6000fd5b5050505080806110f7906119d1565b91505061103c565b50600c5461110d90846113de565b600c55336000908152600f602052604090205461112a90846113de565b336000818152600f60205260409020919091556001546111649173ffffffffffffffffffffffffffffffffffffffff9091169030866113ea565b6012546040518481523391907e12ea37eafadc86c304798c357ee0b9923724f92be4e45c4796ccf0e33f84ce9060200160405180910390a36001601260008282546111af9190611a0a565b909155506001949350505050565b6000338015611208576111cf81610533565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600e6020908152604080832093909355600854600d909152919020555b60005b6010548110156112ce576010818154811061122857611228611973565b6000918252602090912001546040517ff3fef3a30000000000000000000000000000000000000000000000000000000081523360048201526024810187905273ffffffffffffffffffffffffffffffffffffffff9091169063f3fef3a390604401600060405180830381600087803b1580156112a357600080fd5b505af11580156112b7573d6000803e3d6000fd5b5050505080806112c6906119d1565b91505061120b565b50600c546112dc90856113b3565b600c55336000908152600f60205260409020546112f990856113b3565b336000818152600f602052604090819020929092556002546004805493517f14cd70e40000000000000000000000000000000000000000000000000000000081529081019390935260248301879052604483019190915273ffffffffffffffffffffffffffffffffffffffff16906314cd70e490606401600060405180830381600087803b15801561138a57600080fd5b505af115801561139e573d6000803e3d6000fd5b505050508215610a7157610a6f336001610c07565b60006113bf8284611ab3565b9392505050565b60006113bf8284611a3b565b60006113bf8284611a78565b60006113bf8284611a0a565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526114c69085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261153d565b50505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526115229084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401611444565b505050565b600081831061153657816113bf565b5090919050565b600061159f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166116499092919063ffffffff16565b80519091501561152257808060200190518101906115bd9190611aca565b611522576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016106bf565b60606116588484600085611660565b949350505050565b6060824710156116f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016106bf565b843b61175a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016106bf565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516117839190611b13565b60006040518083038185875af1925050503d80600081146117c0576040519150601f19603f3d011682016040523d82523d6000602084013e6117c5565b606091505b50915091506117d58282866117e0565b979650505050505050565b606083156117ef5750816113bf565b8251156117ff5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106bf9190611b2f565b5080546000825590600052602060002090810190610f8191905b80821115611861576000815560010161184d565b5090565b803573ffffffffffffffffffffffffffffffffffffffff8116811461188957600080fd5b919050565b6000602082840312156118a057600080fd5b6113bf82611865565b8015158114610f8157600080fd5b6000602082840312156118c957600080fd5b81356113bf816118a9565b600080604083850312156118e757600080fd5b6118f083611865565b946020939093013593505050565b6000806040838503121561191157600080fd5b823591506020830135611923816118a9565b809150509250929050565b60006020828403121561194057600080fd5b5035919050565b6000806040838503121561195a57600080fd5b61196383611865565b91506020830135611923816118a9565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611a0357611a036119a2565b5060010190565b60008219821115611a1d57611a1d6119a2565b500190565b600060208284031215611a3457600080fd5b5051919050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611a7357611a736119a2565b500290565b600082611aae577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600082821015611ac557611ac56119a2565b500390565b600060208284031215611adc57600080fd5b81516113bf816118a9565b60005b83811015611b02578181015183820152602001611aea565b838111156114c65750506000910152565b60008251611b25818460208701611ae7565b9190910192915050565b6020815260008251806020840152611b4e816040850160208701611ae7565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea26469706673582212207617fdeb11a4435e71b1c7ba9196963159099b4fb00b53cb02d7b5708165f28064736f6c634300080a0033a26469706673582212205d2c4fa9002c2ed4257220bd56beb53a620cf58ef7fcf1b50f78c1bf79b3929864736f6c634300080a0033"; - -type NewBoosterMockConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: NewBoosterMockConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class NewBoosterMock__factory extends ContractFactory { - constructor(...args: NewBoosterMockConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - _crv: string, - _cvx: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(_crv, _cvx, overrides || {}) as Promise; - } - override getDeployTransaction( - _crv: string, - _cvx: string, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(_crv, _cvx, overrides || {}); - } - override attach(address: string): NewBoosterMock { - return super.attach(address) as NewBoosterMock; - } - override connect(signer: Signer): NewBoosterMock__factory { - return super.connect(signer) as NewBoosterMock__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): NewBoosterMockInterface { - return new utils.Interface(_abi) as NewBoosterMockInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): NewBoosterMock { - return new Contract(address, _abi, signerOrProvider) as NewBoosterMock; - } -} diff --git a/src/types/factories/contracts/test/sigp/NewConvexBoosterMock.sol/index.ts b/src/types/factories/contracts/test/sigp/NewConvexBoosterMock.sol/index.ts deleted file mode 100644 index 86405596..00000000 --- a/src/types/factories/contracts/test/sigp/NewConvexBoosterMock.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { NewBoosterMock__factory } from "./NewBoosterMock__factory"; diff --git a/src/types/factories/contracts/test/sigp/NewCreditConfigurator__factory.ts b/src/types/factories/contracts/test/sigp/NewCreditConfigurator__factory.ts deleted file mode 100644 index c460e561..00000000 --- a/src/types/factories/contracts/test/sigp/NewCreditConfigurator__factory.ts +++ /dev/null @@ -1,922 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - NewCreditConfigurator, - NewCreditConfiguratorInterface, - CreditManagerOptsStruct, -} from "../../../../contracts/test/sigp/NewCreditConfigurator"; - -const _abi = [ - { - inputs: [ - { - internalType: "contract CreditManager", - name: "_creditManager", - type: "address", - }, - { - internalType: "contract CreditFacade", - name: "_creditFacade", - type: "address", - }, - { - components: [ - { - internalType: "uint128", - name: "minBorrowedAmount", - type: "uint128", - }, - { - internalType: "uint128", - name: "maxBorrowedAmount", - type: "uint128", - }, - { - components: [ - { - internalType: "address", - name: "token", - type: "address", - }, - { - internalType: "uint16", - name: "liquidationThreshold", - type: "uint16", - }, - ], - internalType: "struct CollateralToken[]", - name: "collateralTokens", - type: "tuple[]", - }, - { - internalType: "address", - name: "degenNFT", - type: "address", - }, - { - internalType: "bool", - name: "expirable", - type: "bool", - }, - ], - internalType: "struct CreditManagerOpts", - name: "opts", - type: "tuple", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "AdapterUsedTwiceException", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "AddressIsNotContractException", - type: "error", - }, - { - inputs: [], - name: "CallerNotConfiguratorException", - type: "error", - }, - { - inputs: [], - name: "CallerNotPausableAdminException", - type: "error", - }, - { - inputs: [], - name: "CallerNotUnPausableAdminException", - type: "error", - }, - { - inputs: [], - name: "ChiThresholdMoreOneException", - type: "error", - }, - { - inputs: [], - name: "ContractNotInAllowedList", - type: "error", - }, - { - inputs: [], - name: "CreditManagerOrFacadeUsedAsAllowContractsException", - type: "error", - }, - { - inputs: [], - name: "DegenNFTnotSetException", - type: "error", - }, - { - inputs: [], - name: "FastCheckNotCoverCollateralDropException", - type: "error", - }, - { - inputs: [], - name: "IncompatibleContractException", - type: "error", - }, - { - inputs: [], - name: "IncorrectExpirationDateException", - type: "error", - }, - { - inputs: [], - name: "IncorrectFeesException", - type: "error", - }, - { - inputs: [], - name: "IncorrectLimitsException", - type: "error", - }, - { - inputs: [], - name: "IncorrectLiquidationThresholdException", - type: "error", - }, - { - inputs: [], - name: "IncorrectPriceFeedException", - type: "error", - }, - { - inputs: [], - name: "IncorrectTokenContractException", - type: "error", - }, - { - inputs: [], - name: "SetLTForUnderlyingException", - type: "error", - }, - { - inputs: [], - name: "TokenNotAllowedException", - type: "error", - }, - { - inputs: [], - name: "ZeroAddressException", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "", - type: "address", - }, - ], - name: "AddedToUpgradeable", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "protocol", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "adapter", - type: "address", - }, - ], - name: "ContractAllowed", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "protocol", - type: "address", - }, - ], - name: "ContractForbidden", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newCreditConfigurator", - type: "address", - }, - ], - name: "CreditConfiguratorUpgraded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newCreditFacade", - type: "address", - }, - ], - name: "CreditFacadeUpgraded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bool", - name: "", - type: "bool", - }, - ], - name: "DegenModeUpdated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint40", - name: "", - type: "uint40", - }, - ], - name: "ExpirationDateUpdated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint16", - name: "feeInterest", - type: "uint16", - }, - { - indexed: false, - internalType: "uint16", - name: "feeLiquidation", - type: "uint16", - }, - { - indexed: false, - internalType: "uint16", - name: "liquidationPremium", - type: "uint16", - }, - { - indexed: false, - internalType: "uint16", - name: "feeLiquidationExpired", - type: "uint16", - }, - { - indexed: false, - internalType: "uint16", - name: "liquidationPremiumExpired", - type: "uint16", - }, - ], - name: "FeesUpdated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bool", - name: "", - type: "bool", - }, - ], - name: "IncreaseDebtModeUpdated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint128", - name: "", - type: "uint128", - }, - ], - name: "LimitPerBlockUpdated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "minBorrowedAmount", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "maxBorrowedAmount", - type: "uint256", - }, - ], - name: "LimitsUpdated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint8", - name: "", - type: "uint8", - }, - ], - name: "MaxEnabledTokensUpdated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "Paused", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newPriceOracle", - type: "address", - }, - ], - name: "PriceOracleUpgraded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "", - type: "address", - }, - ], - name: "RemovedFromUpgradeable", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "token", - type: "address", - }, - ], - name: "TokenAllowed", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "token", - type: "address", - }, - ], - name: "TokenForbidden", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "token", - type: "address", - }, - { - indexed: false, - internalType: "uint16", - name: "liquidityThreshold", - type: "uint16", - }, - ], - name: "TokenLiquidationThresholdUpdated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "Unpaused", - type: "event", - }, - { - inputs: [], - name: "_acl", - outputs: [ - { - internalType: "contract ACL", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "token", - type: "address", - }, - { - internalType: "uint16", - name: "liquidationThreshold", - type: "uint16", - }, - ], - name: "addCollateralToken", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "addr", - type: "address", - }, - ], - name: "addContractToUpgradeable", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "addressProvider", - outputs: [ - { - internalType: "contract IAddressProvider", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "targetContract", - type: "address", - }, - { - internalType: "address", - name: "adapter", - type: "address", - }, - ], - name: "allowContract", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "token", - type: "address", - }, - ], - name: "allowToken", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "i", - type: "uint256", - }, - ], - name: "allowedContracts", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "allowedContractsCount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditFacade", - outputs: [ - { - internalType: "contract CreditFacade", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditManager", - outputs: [ - { - internalType: "contract CreditManager", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "targetContract", - type: "address", - }, - ], - name: "forbidContract", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "token", - type: "address", - }, - ], - name: "forbidToken", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "pause", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "paused", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "addr", - type: "address", - }, - ], - name: "removeContractFromUpgradeable", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint40", - name: "newExpirationDate", - type: "uint40", - }, - ], - name: "setExpirationDate", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint16", - name: "_feeInterest", - type: "uint16", - }, - { - internalType: "uint16", - name: "_feeLiquidation", - type: "uint16", - }, - { - internalType: "uint16", - name: "_liquidationPremium", - type: "uint16", - }, - { - internalType: "uint16", - name: "_feeLiquidationExpired", - type: "uint16", - }, - { - internalType: "uint16", - name: "_liquidationPremiumExpired", - type: "uint16", - }, - ], - name: "setFees", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bool", - name: "_mode", - type: "bool", - }, - ], - name: "setIncreaseDebtForbidden", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint128", - name: "newLimit", - type: "uint128", - }, - ], - name: "setLimitPerBlock", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint128", - name: "_minBorrowedAmount", - type: "uint128", - }, - { - internalType: "uint128", - name: "_maxBorrowedAmount", - type: "uint128", - }, - ], - name: "setLimits", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "token", - type: "address", - }, - { - internalType: "uint16", - name: "liquidationThreshold", - type: "uint16", - }, - ], - name: "setLiquidationThreshold", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "underlying", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "unpause", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_creditConfigurator", - type: "address", - }, - ], - name: "upgradeCreditConfigurator", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_creditFacade", - type: "address", - }, - { - internalType: "bool", - name: "migrateParams", - type: "bool", - }, - ], - name: "upgradeCreditFacade", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "upgradePriceOracle", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x60a06040523480156200001157600080fd5b5060405162004cf138038062004cf1833981016040819052620000349162000427565b826001600160a01b031663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000073573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000999190620005c4565b6001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000d7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000fd9190620005c4565b6000805460ff191690556001600160a01b0381166200012f57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200016e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001949190620005c4565b6001600160a01b03908116608052600180546001600160a01b031916918616918217905560408051636f307dc360e01b81529051919250636f307dc39160048083019260209291908290030181865afa158015620001f6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200021c9190620005c4565b600260006101000a8154816001600160a01b0302191690836001600160a01b03160217905550826001600160a01b031663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000281573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a79190620005c4565b6001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200030b9190620005c4565b600060016101000a8154816001600160a01b0302191690836001600160a01b03160217905550505050620005eb565b6001600160a01b03811681146200035057600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b03811182821017156200038e576200038e62000353565b60405290565b604080519081016001600160401b03811182821017156200038e576200038e62000353565b604051601f8201601f191681016001600160401b0381118282101715620003e457620003e462000353565b604052919050565b80516001600160801b03811681146200040457600080fd5b919050565b805162000404816200033a565b805180151581146200040457600080fd5b6000806000606084860312156200043d57600080fd5b83516200044a816200033a565b809350506020808501516200045f816200033a565b604086810151919450906001600160401b03808211156200047f57600080fd5b9087019060a0828a0312156200049457600080fd5b6200049e62000369565b620004a983620003ec565b8152620004b8858401620003ec565b858201528383015182811115620004ce57600080fd5b8301601f81018b13620004e057600080fd5b805183811115620004f557620004f562000353565b62000505878260051b01620003b9565b818152878101945060069190911b82018701908c8211156200052657600080fd5b918701915b81831015620005885786838e031215620005455760008081fd5b6200054f62000394565b83516200055c816200033a565b81528389015161ffff81168114620005745760008081fd5b818a0152855293870193918601916200052b565b83870152506200059d90506060840162000409565b6060820152620005b06080840162000416565b608082015280955050505050509250925092565b600060208284031215620005d757600080fd5b8151620005e4816200033a565b9392505050565b60805161466c620006856000396000818161032b01528181610428015281816107a7015281816108a20152818161099001528181610b6501528181610eec015281816113c3015281816114b10152818161159d0152818161168d0152818161177b0152818161185f01528181611abb01528181611ba801528181611c9501528181611efe015281816120d701526121c4015261466c6000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c80637bccacee116100f9578063c12c21c011610097578063f0527ac611610071578063f0527ac6146103b9578063f206d32a146103c1578063fb1bd8c4146103d4578063ffd9b907146103e757600080fd5b8063c12c21c014610373578063e6492d7b14610393578063eb9606df146103a657600080fd5b80639f1c5069116100d35780639f1c506914610313578063a50cf2c814610326578063a70bc5421461034d578063b53472ef1461036057600080fd5b80637bccacee146102e55780638456cb59146102f85780639c55a0541461030057600080fd5b80635094cb4f11610166578063526a41e811610140578063526a41e81461029457806354fd4d50146102a75780635c975abb146102af5780636f307dc3146102c557600080fd5b80635094cb4f1461025857806350e036ff1461026b57806352438e541461028157600080fd5b80633e7c88d6116101975780633e7c88d61461022a5780633f4ba83a1461023d578063456e07421461024557600080fd5b806324147708146101be5780632954018c146101d35780632f7a188114610222575b600080fd5b6101d16101cc36600461411e565b6103fa565b005b6000546101f890610100900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6101f86106e0565b6101d161023836600461414b565b610779565b6101d1610874565b6101d161025336600461411e565b610962565b6101f8610266366004614184565b610b18565b610273610b2b565b604051908152602001610219565b6101d161028f36600461411e565b610b37565b6101d16102a23660046141ab565b610ebe565b610273600281565b60005460ff166040519015158152602001610219565b6002546101f89073ffffffffffffffffffffffffffffffffffffffff1681565b6101d16102f33660046141d9565b611395565b6101d1611483565b6101d161030e366004614225565b61156f565b6101d1610321366004614242565b61165f565b6101f87f000000000000000000000000000000000000000000000000000000000000000081565b6101d161035b36600461414b565b61174d565b6101d161036e36600461411e565b611831565b6001546101f89073ffffffffffffffffffffffffffffffffffffffff1681565b6101d16103a136600461411e565b611a8d565b6101d16103b4366004614283565b611b7a565b6101d1611c67565b6101d16103cf3660046142a0565b611ed0565b6101d16103e236600461411e565b6120a9565b6101d16103f5366004614311565b612196565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610484573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104a8919061432e565b6104de576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006104e982612283565b90506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa15801561055a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057e919061434b565b90508181166106db576001546040517fa366f496000000000000000000000000000000000000000000000000000000008152918317600483018190529173ffffffffffffffffffffffffffffffffffffffff9091169063a366f49690602401600060405180830381600087803b1580156105f757600080fd5b505af115801561060b573d6000803e3d6000fd5b505050506106176106e0565b6040517fffd9b9070000000000000000000000000000000000000000000000000000000081526001600482015273ffffffffffffffffffffffffffffffffffffffff919091169063ffd9b90790602401600060405180830381600087803b15801561068157600080fd5b505af1158015610695573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692507ff17b849746e74d7186170c9553d4bbf60b4f8bb1ed81fe50c099b934fb078f059150600090a25b505050565b600154604080517f2f7a1881000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691632f7a18819160048083019260209291908290030181865afa158015610750573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610774919061436f565b905090565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610803573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610827919061432e565b61085d576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61086682612363565b610870828261273d565b5050565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156108fe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610922919061432e565b610958576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61096061295a565b565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156109ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a10919061432e565b610a46576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a4f81612a3b565b6001546040517f9f5f86ae00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015290911690639f5f86ae90602401600060405180830381600087803b158015610abc57600080fd5b505af1158015610ad0573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507f5a0b7d0f9c24b39256e112a0584b4c5ce38d8f1dee2e7c56f15b852604cdc8869150600090a250565b6000610b25600383612bfd565b92915050565b60006107746003612c10565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610bc1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be5919061432e565b610c1b576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610c68576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063fdd5764590602401602060405180830381865afa158015610cd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cfd919061436f565b905073ffffffffffffffffffffffffffffffffffffffff8116610d4c576040517f1170cc2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f6e98e5e400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526000602483015290911690636e98e5e490604401600060405180830381600087803b158015610dc057600080fd5b505af1158015610dd4573d6000803e3d6000fd5b50506001546040517f6e98e5e40000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff86811660248301529091169250636e98e5e49150604401600060405180830381600087803b158015610e4c57600080fd5b505af1158015610e60573d6000803e3d6000fd5b50505050610e78826003612c1a90919063ffffffff16565b5060405173ffffffffffffffffffffffffffffffffffffffff8316907fab9f405bf0c19b97f65a7031634db41569cd2f0e0376a610a1e977f9ab22b58f90600090a25050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610f48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6c919061432e565b610fa2576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fab82612a3b565b6000806000610fb86106e0565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015611002573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611026919061438c565b9250925092506000806110376106e0565b73ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa158015611080573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a491906143d9565b9150915060006110b26106e0565b73ffffffffffffffffffffffffffffffffffffffff16639be0536a6040518163ffffffff1660e01b8152600401600060405180830381865afa1580156110fc573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526111429190810190614437565b9050600061114e6106e0565b73ffffffffffffffffffffffffffffffffffffffff1663b1836d326040518163ffffffff1660e01b8152600401602060405180830381865afa158015611198573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bc919061432e565b600154604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905192935073ffffffffffffffffffffffffffffffffffffffff909116916311ca4fc2918c918491632630c12f9160048083019260209291908290030181865afa158015611238573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061125c919061436f565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156112c957600080fd5b505af11580156112dd573d6000803e3d6000fd5b505050508715611349576112f087612c3c565b6112fa8484612ea2565b61130386613097565b60005b8251811015611339576113318382815181106113245761132461451a565b60200260200101516131e8565b600101611306565b508015611349576113498561330e565b60405173ffffffffffffffffffffffffffffffffffffffff8a16907fa8b21f72cb83bce808df32dc2330217d744a1c22f3e9e44e4b11bbf049d37d9d90600090a2505050505050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561141f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611443919061432e565b611479576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61087082826134c0565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561150d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611531919061432e565b611567576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610960613908565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156115f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061161d919061432e565b611653576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61165c81612c3c565b50565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156116e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061170d919061432e565b611743576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108708282612ea2565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156117d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117fb919061432e565b610866576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156118bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118df919061432e565b611915576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061192082612283565b90506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015611991573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119b5919061434b565b9050818116156106db576001546040517fa366f496000000000000000000000000000000000000000000000000000000008152918318600483018190529173ffffffffffffffffffffffffffffffffffffffff9091169063a366f49690602401600060405180830381600087803b158015611a2f57600080fd5b505af1158015611a43573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a2505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611b17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b3b919061432e565b611b71576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61165c816139c8565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611c04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c28919061432e565b611c5e576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61165c8161330e565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611cf1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d15919061432e565b611d4b576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611db9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ddd919061436f565b60015490915073ffffffffffffffffffffffffffffffffffffffff166311ca4fc2611e066106e0565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff91821660048201529084166024820152604401600060405180830381600087803b158015611e7457600080fd5b505af1158015611e88573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507f3f82447be465b0b5a4a9e54c74d5f6ae73f2e9537f2cc1590a340524703d09619150600090a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611f5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f7e919061432e565b611fb4576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61271061ffff8616101580611fd85750612710611fd18585614578565b61ffff1610155b80611ff25750612710611feb8383614578565b61ffff1610155b15612029576040517f0b361d6900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61204c858561203a8661271061459e565b856120478661271061459e565b613ae7565b6040805161ffff878116825286811660208301528581168284015284811660608301528316608082015290517f2214a403d5f8d049e52eacca974c6dea01a471e41d6a18903bfaf7dbc709741f9181900360a00190a15050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015612133573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612157919061432e565b61218d576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61165c816131e8565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015612220573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612244919061432e565b61227a576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61165c81613097565b6001546040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063f67c5bd090602401602060405180830381865afa1580156122f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612318919061434b565b90508015806123275750806001145b1561235e576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b73ffffffffffffffffffffffffffffffffffffffff81166123b0576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163b61241b576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024015b60405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8216906370a0823190602401602060405180830381865afa9250505080156124bf575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526124bc9181019061434b565b60015b6124f5576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612563573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612587919061436f565b6040517ff9a65030000000000000000000000000000000000000000000000000000000008152670de0b6b3a7640000600482015273ffffffffffffffffffffffffffffffffffffffff8381166024830152919091169063f9a6503090604401602060405180830381865afa92505050801561263d575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261263a9181019061434b565b60015b612673576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506001546040517fd48bfca700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301529091169063d48bfca790602401600060405180830381600087803b1580156126e157600080fd5b505af11580156126f5573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a250565b60025473ffffffffffffffffffffffffffffffffffffffff83811691161415612792576040517f3b899cf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f172c48c70000000000000000000000000000000000000000000000000000000081526000600482018190529173ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa158015612801573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061282591906145c1565b91505061ffff8216158061284057508061ffff168261ffff16115b15612877576040517f33c6608d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015261ffff851660248301529091169063a70bc54290604401600060405180830381600087803b1580156128ee57600080fd5b505af1158015612902573d6000803e3d6000fd5b505060405161ffff8516815273ffffffffffffffffffffffffffffffffffffffff861692507f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650915060200160405180910390a2505050565b60005460ff166129c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401612412565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b73ffffffffffffffffffffffffffffffffffffffff8116612a88576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163b612aee576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401612412565b8073ffffffffffffffffffffffffffffffffffffffff1663c12c21c06040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612b73575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252612b709181019061436f565b60015b612ba9576040517fe9eddd1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60015473ffffffffffffffffffffffffffffffffffffffff828116911614610870576040517fe9eddd1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612c098383613ca9565b9392505050565b6000610b25825490565b6000612c098373ffffffffffffffffffffffffffffffffffffffff8416613cd3565b6000612c466106e0565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015612c90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cb4919061438c565b505090506000612cc26106e0565b73ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa158015612d0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d2f91906143d9565b915050806fffffffffffffffffffffffffffffffff16836fffffffffffffffffffffffffffffffff161015612d90576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826fffffffffffffffffffffffffffffffff16826fffffffffffffffffffffffffffffffff16146106db57612dc36106e0565b6040517f9c55a0540000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff8516600482015273ffffffffffffffffffffffffffffffffffffffff9190911690639c55a05490602401600060405180830381600087803b158015612e3e57600080fd5b505af1158015612e52573d6000803e3d6000fd5b50506040516fffffffffffffffffffffffffffffffff861681527fa030eec20ae970821387224ec3bb15b4bd22b89bfb86dc4d2b3827aa3d99e48d925060200190505b60405180910390a1505050565b6000612eac6106e0565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015612ef6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f1a919061438c565b50509050816fffffffffffffffffffffffffffffffff16836fffffffffffffffffffffffffffffffff161180612f735750806fffffffffffffffffffffffffffffffff16826fffffffffffffffffffffffffffffffff16115b15612faa576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612fb26106e0565b6040517f601d66f60000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff80861660048301528416602482015273ffffffffffffffffffffffffffffffffffffffff919091169063601d66f690604401600060405180830381600087803b15801561303557600080fd5b505af1158015613049573d6000803e3d6000fd5b5050604080516fffffffffffffffffffffffffffffffff8088168252861660208201527f4d4981437d0211f9e6843eb024d9ada1fa3a99514d4343d4aece106dd11524bb9350019050612e95565b60006130a16106e0565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa1580156130eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061310f919061438c565b5091505080151582151514610870576131266106e0565b6040517fffd9b907000000000000000000000000000000000000000000000000000000008152831515600482015273ffffffffffffffffffffffffffffffffffffffff919091169063ffd9b90790602401600060405180830381600087803b15801561319157600080fd5b505af11580156131a5573d6000803e3d6000fd5b505050507ff97ba903470ff3262b4a68a938fe81def401bac1bd742169d2e8d5c4ed2185d3826040516131dc911515815260200190565b60405180910390a15050565b73ffffffffffffffffffffffffffffffffffffffff8116613235576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61323d6106e0565b6040517fb55bb84b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152919091169063b55bb84b90602401600060405180830381600087803b1580156132a857600080fd5b505af11580156132bc573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841681527fdac9a7995cbc0c0f01d78970fb6fd0b52fe0fe869eb6635e65cc1b5682b8325c925060200190505b60405180910390a150565b60006133186106e0565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015613362573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613386919061438c565b925050508064ffffffffff168264ffffffffff1614610870578164ffffffffff168164ffffffffff1611806133c157508164ffffffffff1642115b156133f8576040517fe4eaca7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134006106e0565b6040517feb9606df00000000000000000000000000000000000000000000000000000000815264ffffffffff8416600482015273ffffffffffffffffffffffffffffffffffffffff919091169063eb9606df90602401600060405180830381600087803b15801561347057600080fd5b505af1158015613484573d6000803e3d6000fd5b505060405164ffffffffff851681527f0b3eb35ba750e7a7e4d26c9eee3d226f4e1f68c5568f4a3d051c94b241b02ac0925060200190506131dc565b73ffffffffffffffffffffffffffffffffffffffff821661350d576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82163b613573576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83166004820152602401612412565b61357c81612a3b565b60015473ffffffffffffffffffffffffffffffffffffffff838116911614806135d757506135a86106e0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b806135fc575060015473ffffffffffffffffffffffffffffffffffffffff8281169116145b80613639575061360a6106e0565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b15613670576040517f727de5c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517fff68754300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063ff68754390602401602060405180830381865afa1580156136e1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613705919061436f565b73ffffffffffffffffffffffffffffffffffffffff161415806137d157506001546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063fdd5764590602401602060405180830381865afa158015613794573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137b8919061436f565b73ffffffffffffffffffffffffffffffffffffffff1614155b15613808576040517f21ff1e7100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f6e98e5e400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152848116602483015290911690636e98e5e490604401600060405180830381600087803b15801561387d57600080fd5b505af1158015613891573d6000803e3d6000fd5b505050506138a9826003613dc690919063ffffffff16565b508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4bcbefaef68b99503d502f5a6abe7bca2b183ab8ac55457013c77d084ebd130560405160405180910390a35050565b60005460ff1615613975576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401612412565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612a113390565b73ffffffffffffffffffffffffffffffffffffffff8116613a15576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613a1d6106e0565b6040517fdcf6548200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152919091169063dcf6548290602401600060405180830381600087803b158015613a8857600080fd5b505af1158015613a9c573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841681527f32e53e2e527af8518ae889e5f7e674bc83f7cf68e4cc059aceeaa0e64208b85b92506020019050613303565b6000613af3858561459e565b6001546040517f172c48c700000000000000000000000000000000000000000000000000000000815260006004820181905292935073ffffffffffffffffffffffffffffffffffffffff9091169063172c48c7906024016040805180830381865afa158015613b66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b8a91906145c1565b9150508061ffff168261ffff1614613bf957613ba582613de8565b60025460405161ffff8416815273ffffffffffffffffffffffffffffffffffffffff909116907f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac6509060200160405180910390a25b6001546040517f944ac59f00000000000000000000000000000000000000000000000000000000815261ffff808a1660048301528089166024830152808816604483015280871660648301528516608482015273ffffffffffffffffffffffffffffffffffffffff9091169063944ac59f9060a401600060405180830381600087803b158015613c8857600080fd5b505af1158015613c9c573d6000803e3d6000fd5b5050505050505050505050565b6000826000018281548110613cc057613cc061451a565b9060005260206000200154905092915050565b60008181526001830160205260408120548015613dbc576000613cf76001836145f0565b8554909150600090613d0b906001906145f0565b9050818114613d70576000866000018281548110613d2b57613d2b61451a565b9060005260206000200154905080876000018481548110613d4e57613d4e61451a565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080613d8157613d81614607565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610b25565b6000915050610b25565b6000612c098373ffffffffffffffffffffffffffffffffffffffff84166140ad565b6001546002546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015261ffff8416602482015291169063a70bc54290604401600060405180830381600087803b158015613e6157600080fd5b505af1158015613e75573d6000803e3d6000fd5b505050506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ee8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f0c919061434b565b905060015b818110156106db576001546040517f172c48c700000000000000000000000000000000000000000000000000000000815260048101839052600091829173ffffffffffffffffffffffffffffffffffffffff9091169063172c48c7906024016040805180830381865afa158015613f8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fb091906145c1565b915091508461ffff168161ffff1611156140a3576001546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015261ffff881660248301529091169063a70bc54290604401600060405180830381600087803b15801561403b57600080fd5b505af115801561404f573d6000803e3d6000fd5b505060405161ffff8816815273ffffffffffffffffffffffffffffffffffffffff851692507f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650915060200160405180910390a25b5050600101613f11565b60008181526001830160205260408120546140f457508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610b25565b506000610b25565b73ffffffffffffffffffffffffffffffffffffffff8116811461165c57600080fd5b60006020828403121561413057600080fd5b8135612c09816140fc565b61ffff8116811461165c57600080fd5b6000806040838503121561415e57600080fd5b8235614169816140fc565b915060208301356141798161413b565b809150509250929050565b60006020828403121561419657600080fd5b5035919050565b801515811461165c57600080fd5b600080604083850312156141be57600080fd5b82356141c9816140fc565b915060208301356141798161419d565b600080604083850312156141ec57600080fd5b82356141f7816140fc565b91506020830135614179816140fc565b6fffffffffffffffffffffffffffffffff8116811461165c57600080fd5b60006020828403121561423757600080fd5b8135612c0981614207565b6000806040838503121561425557600080fd5b823561426081614207565b9150602083013561417981614207565b64ffffffffff8116811461165c57600080fd5b60006020828403121561429557600080fd5b8135612c0981614270565b600080600080600060a086880312156142b857600080fd5b85356142c38161413b565b945060208601356142d38161413b565b935060408601356142e38161413b565b925060608601356142f38161413b565b915060808601356143038161413b565b809150509295509295909350565b60006020828403121561432357600080fd5b8135612c098161419d565b60006020828403121561434057600080fd5b8151612c098161419d565b60006020828403121561435d57600080fd5b5051919050565b805161235e816140fc565b60006020828403121561438157600080fd5b8151612c09816140fc565b6000806000606084860312156143a157600080fd5b83516143ac81614207565b60208501519093506143bd8161419d565b60408501519092506143ce81614270565b809150509250925092565b600080604083850312156143ec57600080fd5b82516143f781614207565b602084015190925061417981614207565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000602080838503121561444a57600080fd5b825167ffffffffffffffff8082111561446257600080fd5b818501915085601f83011261447657600080fd5b81518181111561448857614488614408565b8060051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f830116810181811085821117156144cb576144cb614408565b6040529182528482019250838101850191888311156144e957600080fd5b938501935b8285101561450e576144ff85614364565b845293850193928501926144ee565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061ffff80831681851680830382111561459557614595614549565b01949350505050565b600061ffff838116908316818110156145b9576145b9614549565b039392505050565b600080604083850312156145d457600080fd5b82516145df816140fc565b60208401519092506141798161413b565b60008282101561460257614602614549565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea26469706673582212200894d1ee969658f391c83d861486b6d106cb2c08ec552117430e3b4a88c34a8f64736f6c634300080a0033"; - -type NewCreditConfiguratorConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: NewCreditConfiguratorConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class NewCreditConfigurator__factory extends ContractFactory { - constructor(...args: NewCreditConfiguratorConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - _creditManager: string, - _creditFacade: string, - opts: CreditManagerOptsStruct, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - _creditManager, - _creditFacade, - opts, - overrides || {} - ) as Promise; - } - override getDeployTransaction( - _creditManager: string, - _creditFacade: string, - opts: CreditManagerOptsStruct, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction( - _creditManager, - _creditFacade, - opts, - overrides || {} - ); - } - override attach(address: string): NewCreditConfigurator { - return super.attach(address) as NewCreditConfigurator; - } - override connect(signer: Signer): NewCreditConfigurator__factory { - return super.connect(signer) as NewCreditConfigurator__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): NewCreditConfiguratorInterface { - return new utils.Interface(_abi) as NewCreditConfiguratorInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): NewCreditConfigurator { - return new Contract( - address, - _abi, - signerOrProvider - ) as NewCreditConfigurator; - } -} diff --git a/src/types/factories/contracts/test/sigp/UniswapHelper.sol/UniswapV3AdapterTestHelper__factory.ts b/src/types/factories/contracts/test/sigp/UniswapHelper.sol/UniswapV3AdapterTestHelper__factory.ts deleted file mode 100644 index da08fe8a..00000000 --- a/src/types/factories/contracts/test/sigp/UniswapHelper.sol/UniswapV3AdapterTestHelper__factory.ts +++ /dev/null @@ -1,244 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - UniswapV3AdapterTestHelper, - UniswapV3AdapterTestHelperInterface, -} from "../../../../../contracts/test/sigp/UniswapHelper.sol/UniswapV3AdapterTestHelper"; - -const _abi = [ - { - inputs: [ - { - internalType: "bytes", - name: "v3path", - type: "bytes", - }, - ], - name: "decodeFirstPool", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint24", - name: "", - type: "uint24", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "token1", - type: "address", - }, - { - internalType: "uint24", - name: "fee", - type: "uint24", - }, - { - internalType: "address", - name: "token2", - type: "address", - }, - { - internalType: "address", - name: "token3", - type: "address", - }, - ], - name: "encodePathMalicious", - outputs: [ - { - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "token1", - type: "address", - }, - { - internalType: "uint24", - name: "fee", - type: "uint24", - }, - { - internalType: "address", - name: "token2", - type: "address", - }, - ], - name: "encodePathSingle", - outputs: [ - { - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes", - name: "path", - type: "bytes", - }, - ], - name: "extractTokens", - outputs: [ - { - internalType: "address", - name: "tokenA", - type: "address", - }, - { - internalType: "address", - name: "tokenB", - type: "address", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes", - name: "path", - type: "bytes", - }, - ], - name: "extractTokensNew", - outputs: [ - { - internalType: "address", - name: "tokenA", - type: "address", - }, - { - internalType: "address", - name: "tokenB", - type: "address", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes", - name: "path", - type: "bytes", - }, - ], - name: "hasMultiplePools", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes", - name: "v3path", - type: "bytes", - }, - ], - name: "skipToken", - outputs: [ - { - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x608060405234801561001057600080fd5b50610c8e806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063649fc2b61161005b578063649fc2b6146100fa5780639dc1c3911461010d578063bf8b627b14610130578063eadc682a1461014357600080fd5b806326efca5d1461008257806338812174146100c757806357df22c1146100da575b600080fd5b61009561009036600461096d565b61018e565b6040805173ffffffffffffffffffffffffffffffffffffffff9384168152929091166020830152015b60405180910390f35b6100956100d536600461096d565b610270565b6100ed6100e8366004610a78565b610290565b6040516100be9190610acc565b6100ed610108366004610b3f565b6103d6565b61012061011b36600461096d565b6104c7565b60405190151581526020016100be565b6100ed61013e36600461096d565b6104d8565b61015661015136600461096d565b6104e3565b6040805173ffffffffffffffffffffffffffffffffffffffff948516815293909216602084015262ffffff16908201526060016100be565b600080600361019f60146002610bb1565b6101a99190610bee565b83511015610218576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f496e636f7272656374506174684c656e677468457863657074696f6e0000000060448201526064015b60405180910390fd5b6102238360006104fe565b915061026961023460036014610bee565b61024060036014610bee565b6014865161024e9190610c06565b6102589190610c1d565b6102629190610bb1565b84906104fe565b9050915091565b60008061027d83826104fe565b9150610269601484516102629190610c06565b606060006103cc836040516020016102d3919060609190911b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016815260140190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018152828252606088811b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000090811660208601528351601481870301815260348601855260e88c901b7fffffff00000000000000000000000000000000000000000000000000000000001660548701528451603781880301815260578701909552918c901b16607785015290926103c6928391608b015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529061058e565b9061058e565b9695505050505050565b606060006104be83604051602001610419919060609190911b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016815260140190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815282825260e888901b7fffffff00000000000000000000000000000000000000000000000000000000001660208401528151600381850301815260238401909252606089901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166043840152916103c69190605701610392565b95945050505050565b60006104d282610629565b92915050565b60606104d282610663565b60008060006104f184610694565b9250925092509193909250565b600061050b826014610bee565b83511015610575576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f746f416464726573735f6f75744f66426f756e64730000000000000000000000604482015260640161020f565b5001602001516c01000000000000000000000000900490565b6060806040519050835180825260208201818101602087015b818310156105bf5780518352602092830192016105a7565b50855184518101855292509050808201602086015b818310156105ec5780518352602092830192016105d4565b508651929092011591909101601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660405250905092915050565b600061063760036014610bee565b6014610644600382610bee565b61064e9190610bee565b6106589190610bee565b825110159050919050565b60606104d261067460036014610bee565b61068060036014610bee565b845161068c9190610c06565b8491906106d0565b600080806106a284826104fe565b92506106af84601461084a565b90506106c76106c060036014610bee565b85906104fe565b91509193909250565b6060816106de81601f610bee565b1015610746576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015260640161020f565b6107508284610bee565b845110156107ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e6473000000000000000000000000000000604482015260640161020f565b6060821580156107d95760405191506000825260208201604052610841565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156108125780518352602092830192016107fa565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b600081610858816003610bee565b10156108c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f746f55696e7432345f6f766572666c6f77000000000000000000000000000000604482015260640161020f565b6108cb826003610bee565b83511015610935576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f746f55696e7432345f6f75744f66426f756e6473000000000000000000000000604482015260640161020f565b50016003015190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561097f57600080fd5b813567ffffffffffffffff8082111561099757600080fd5b818401915084601f8301126109ab57600080fd5b8135818111156109bd576109bd61093e565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715610a0357610a0361093e565b81604052828152876020848701011115610a1c57600080fd5b826020860160208301376000928101602001929092525095945050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610a6057600080fd5b919050565b803562ffffff81168114610a6057600080fd5b60008060008060808587031215610a8e57600080fd5b610a9785610a3c565b9350610aa560208601610a65565b9250610ab360408601610a3c565b9150610ac160608601610a3c565b905092959194509250565b600060208083528351808285015260005b81811015610af957858101830151858201604001528201610add565b81811115610b0b576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b600080600060608486031215610b5457600080fd5b610b5d84610a3c565b9250610b6b60208501610a65565b9150610b7960408501610a3c565b90509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610be957610be9610b82565b500290565b60008219821115610c0157610c01610b82565b500190565b600082821015610c1857610c18610b82565b500390565b600082610c53577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fea26469706673582212208488602c75ae7d3ace59df832acd71c08679b5690beb140316f15b341587e84064736f6c634300080a0033"; - -type UniswapV3AdapterTestHelperConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: UniswapV3AdapterTestHelperConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class UniswapV3AdapterTestHelper__factory extends ContractFactory { - constructor(...args: UniswapV3AdapterTestHelperConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): UniswapV3AdapterTestHelper { - return super.attach(address) as UniswapV3AdapterTestHelper; - } - override connect(signer: Signer): UniswapV3AdapterTestHelper__factory { - return super.connect(signer) as UniswapV3AdapterTestHelper__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): UniswapV3AdapterTestHelperInterface { - return new utils.Interface(_abi) as UniswapV3AdapterTestHelperInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): UniswapV3AdapterTestHelper { - return new Contract( - address, - _abi, - signerOrProvider - ) as UniswapV3AdapterTestHelper; - } -} diff --git a/src/types/factories/contracts/test/sigp/UniswapHelper.sol/index.ts b/src/types/factories/contracts/test/sigp/UniswapHelper.sol/index.ts deleted file mode 100644 index 6f42b0a2..00000000 --- a/src/types/factories/contracts/test/sigp/UniswapHelper.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { UniswapV3AdapterTestHelper__factory } from "./UniswapV3AdapterTestHelper__factory"; diff --git a/src/types/factories/contracts/test/sigp/index.ts b/src/types/factories/contracts/test/sigp/index.ts index 2d5e4dce..2f641ef4 100644 --- a/src/types/factories/contracts/test/sigp/index.ts +++ b/src/types/factories/contracts/test/sigp/index.ts @@ -1,13 +1,5 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ -export * as attackingContractNonPayableSol from "./AttackingContractNonPayable.sol"; export * as interfacesSol from "./Interfaces.sol"; -export * as newConvexBaseRewardPoolMockSol from "./NewConvexBaseRewardPoolMock.sol"; -export * as newConvexBoosterMockSol from "./NewConvexBoosterMock.sol"; -export * as uniswapHelperSol from "./UniswapHelper.sol"; export * as interfaces from "./interfaces"; -export * as stEthMockSol from "./stETHMock.sol"; -export { DummyMulticallTarget__factory } from "./DummyMulticallTarget__factory"; -export { FlashLoanAttacker2__factory } from "./FlashLoanAttacker2__factory"; -export { NewCreditConfigurator__factory } from "./NewCreditConfigurator__factory"; diff --git a/src/types/factories/contracts/test/sigp/stETHMock.sol/StETHMockERC20__factory.ts b/src/types/factories/contracts/test/sigp/stETHMock.sol/StETHMockERC20__factory.ts deleted file mode 100644 index 99ce1f29..00000000 --- a/src/types/factories/contracts/test/sigp/stETHMock.sol/StETHMockERC20__factory.ts +++ /dev/null @@ -1,482 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - StETHMockERC20, - StETHMockERC20Interface, -} from "../../../../../contracts/test/sigp/stETHMock.sol/StETHMockERC20"; - -const _abi = [ - { - inputs: [], - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "spender", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "Approval", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "Transfer", - type: "event", - }, - { - inputs: [ - { - internalType: "address", - name: "owner", - type: "address", - }, - { - internalType: "address", - name: "spender", - type: "address", - }, - ], - name: "allowance", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "approve", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "decimals", - outputs: [ - { - internalType: "uint8", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "subtractedValue", - type: "uint256", - }, - ], - name: "decreaseAllowance", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_sharesAmount", - type: "uint256", - }, - ], - name: "getPooledEthByShares", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_pooledEthAmount", - type: "uint256", - }, - ], - name: "getSharesByPooledEth", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "addedValue", - type: "uint256", - }, - ], - name: "increaseAllowance", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "recipient", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "mint", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_totalPooledEther", - type: "uint256", - }, - ], - name: "setTotalPooledEther", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_totalShares", - type: "uint256", - }, - ], - name: "setTotalShares", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "holder", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "slash", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "referral", - type: "address", - }, - ], - name: "submit", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "payable", - type: "function", - }, - { - inputs: [], - name: "symbol", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "totalPooledEther", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "totalShares", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "totalSupply", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "recipient", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "transfer", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "sender", - type: "address", - }, - { - internalType: "address", - name: "recipient", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "transferFrom", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, -]; - -const _bytecode = - "0x60806040523480156200001157600080fd5b50604080518082018252601881527f4c6971756964207374616b6564204c69646f20457468657200000000000000006020808301918252835180850190945260058452640a6e88aa8960db1b908401528151919291620000749160039162000093565b5080516200008a90600490602084019062000093565b50505062000176565b828054620000a19062000139565b90600052602060002090601f016020900481019282620000c5576000855562000110565b82601f10620000e057805160ff191683800117855562000110565b8280016001018555821562000110579182015b8281111562000110578251825591602001919060010190620000f3565b506200011e92915062000122565b5090565b5b808211156200011e576000815560010162000123565b600181811c908216806200014e57607f821691505b602082108114156200017057634e487b7160e01b600052602260045260246000fd5b50919050565b6111b280620001866000396000f3fe60806040526004361061015f5760003560e01c806369415b86116100c0578063a1903eab11610074578063a77384c111610059578063a77384c114610393578063a9059cbb146103b3578063dd62ed3e146103d357600080fd5b8063a1903eab14610360578063a457c2d71461037357600080fd5b80637a28fb88116100a55780637a28fb881461030b57806384041a581461032b57806395d89b411461034b57600080fd5b806369415b86146102b257806370a08231146102c857600080fd5b806323b872dd1161011757806339509351116100fc578063395093511461025c5780633a98ef391461027c57806340c10f191461029257600080fd5b806323b872dd14610220578063313ce5671461024057600080fd5b8063095ea7b311610148578063095ea7b3146101b157806318160ddd146101e1578063192084511461020057600080fd5b806302fb4d851461016457806306fdde0314610186575b600080fd5b34801561017057600080fd5b5061018461017f366004610f0b565b610426565b005b34801561019257600080fd5b5061019b610434565b6040516101a89190610f35565b60405180910390f35b3480156101bd57600080fd5b506101d16101cc366004610f0b565b6104c6565b60405190151581526020016101a8565b3480156101ed57600080fd5b506002545b6040519081526020016101a8565b34801561020c57600080fd5b506101f261021b366004610fa8565b6104dc565b34801561022c57600080fd5b506101d161023b366004610fc1565b610511565b34801561024c57600080fd5b50604051601281526020016101a8565b34801561026857600080fd5b506101d1610277366004610f0b565b6105fc565b34801561028857600080fd5b506101f260055481565b34801561029e57600080fd5b506101846102ad366004610f0b565b610645565b3480156102be57600080fd5b506101f260065481565b3480156102d457600080fd5b506101f26102e3366004610ffd565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b34801561031757600080fd5b506101f2610326366004610fa8565b61064f565b34801561033757600080fd5b50610184610346366004610fa8565b600655565b34801561035757600080fd5b5061019b610674565b6101f261036e366004610ffd565b610683565b34801561037f57600080fd5b506101d161038e366004610f0b565b610690565b34801561039f57600080fd5b506101846103ae366004610fa8565b600555565b3480156103bf57600080fd5b506101d16103ce366004610f0b565b610768565b3480156103df57600080fd5b506101f26103ee36600461101f565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6104308282610775565b5050565b60606003805461044390611052565b80601f016020809104026020016040519081016040528092919081815260200182805461046f90611052565b80156104bc5780601f10610491576101008083540402835291602001916104bc565b820191906000526020600020905b81548152906001019060200180831161049f57829003601f168201915b5050505050905090565b60006104d3338484610963565b50600192915050565b6000600654600014156104f157506000919050565b60065460055461050190846110d5565b61050b9190611112565b92915050565b600061051e848484610b0e565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600160209081526040808320338452909152902054828110156105e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6105f18533858403610963565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916104d391859061064090869061114d565b610963565b6104308282610dc2565b60006005546000141561066457506000919050565b60055460065461050190846110d5565b60606004805461044390611052565b60003461050b3382610dc2565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915281205482811015610751576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084016105db565b61075e3385858403610963565b5060019392505050565b60006104d3338484610b0e565b73ffffffffffffffffffffffffffffffffffffffff8216610818576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f730000000000000000000000000000000000000000000000000000000000000060648201526084016105db565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156108ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f636500000000000000000000000000000000000000000000000000000000000060648201526084016105db565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040812083830390556002805484929061090a908490611165565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610a05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016105db565b73ffffffffffffffffffffffffffffffffffffffff8216610aa8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f737300000000000000000000000000000000000000000000000000000000000060648201526084016105db565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259101610956565b73ffffffffffffffffffffffffffffffffffffffff8316610bb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016105db565b73ffffffffffffffffffffffffffffffffffffffff8216610c54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016105db565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d0a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e6365000000000000000000000000000000000000000000000000000060648201526084016105db565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610d4e90849061114d565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610db491815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610e3f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016105db565b8060026000828254610e51919061114d565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610e8b90849061114d565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610f0657600080fd5b919050565b60008060408385031215610f1e57600080fd5b610f2783610ee2565b946020939093013593505050565b600060208083528351808285015260005b81811015610f6257858101830151858201604001528201610f46565b81811115610f74576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b600060208284031215610fba57600080fd5b5035919050565b600080600060608486031215610fd657600080fd5b610fdf84610ee2565b9250610fed60208501610ee2565b9150604084013590509250925092565b60006020828403121561100f57600080fd5b61101882610ee2565b9392505050565b6000806040838503121561103257600080fd5b61103b83610ee2565b915061104960208401610ee2565b90509250929050565b600181811c9082168061106657607f821691505b602082108114156110a0577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561110d5761110d6110a6565b500290565b600082611148577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60008219821115611160576111606110a6565b500190565b600082821015611177576111776110a6565b50039056fea26469706673582212205c4bc9494ae5eefe72ed2a79f07174f1606d86fc855f115449df2a739978ab1364736f6c634300080a0033"; - -type StETHMockERC20ConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: StETHMockERC20ConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class StETHMockERC20__factory extends ContractFactory { - constructor(...args: StETHMockERC20ConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): StETHMockERC20 { - return super.attach(address) as StETHMockERC20; - } - override connect(signer: Signer): StETHMockERC20__factory { - return super.connect(signer) as StETHMockERC20__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): StETHMockERC20Interface { - return new utils.Interface(_abi) as StETHMockERC20Interface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): StETHMockERC20 { - return new Contract(address, _abi, signerOrProvider) as StETHMockERC20; - } -} diff --git a/src/types/factories/contracts/test/sigp/stETHMock.sol/index.ts b/src/types/factories/contracts/test/sigp/stETHMock.sol/index.ts deleted file mode 100644 index f240c320..00000000 --- a/src/types/factories/contracts/test/sigp/stETHMock.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { StETHMockERC20__factory } from "./StETHMockERC20__factory"; diff --git a/src/types/factories/contracts/test/suites/BalanceHelper__factory.ts b/src/types/factories/contracts/test/suites/BalanceHelper__factory.ts deleted file mode 100644 index 80eb6204..00000000 --- a/src/types/factories/contracts/test/suites/BalanceHelper__factory.ts +++ /dev/null @@ -1,356 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - BalanceHelper, - BalanceHelperInterface, -} from "../../../../contracts/test/suites/BalanceHelper"; - -const _abi = [ - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "", - type: "address", - }, - ], - name: "log_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "log_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - name: "log_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "int256", - name: "", - type: "int256", - }, - ], - name: "log_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "address", - name: "val", - type: "address", - }, - ], - name: "log_named_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes", - name: "val", - type: "bytes", - }, - ], - name: "log_named_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes32", - name: "val", - type: "bytes32", - }, - ], - name: "log_named_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - ], - name: "log_named_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "string", - name: "val", - type: "string", - }, - ], - name: "log_named_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - ], - name: "log_named_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "log_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "logs", - type: "event", - }, - { - inputs: [], - name: "IS_TEST", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "failed", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, -]; - -const _bytecode = - "0x60806040526000805460ff1916600117905534801561001d57600080fd5b506102a68061002d6000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063ba414fa61461003b578063fa7626d414610057575b600080fd5b610043610064565b604051901515815260200160405180910390f35b6000546100439060ff1681565b60008054610100900460ff16156100845750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156101bf5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610129917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016101ff565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526101619161023b565b6000604051808303816000865af19150503d806000811461019e576040519150601f19603f3d011682016040523d82523d6000602084013e6101a3565b606091505b50915050808060200190518101906101bb919061024e565b9150505b919050565b6000815160005b818110156101e557602081850181015186830152016101cb565b818111156101f4576000828601525b509290920192915050565b7fffffffff0000000000000000000000000000000000000000000000000000000083168152600061023360048301846101c4565b949350505050565b600061024782846101c4565b9392505050565b60006020828403121561026057600080fd5b8151801515811461024757600080fdfea264697066735822122062937d485190af036604d6fa9067c5b3b1ae63c3c9895409701e3904d8c1b60864736f6c634300080a0033"; - -type BalanceHelperConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: BalanceHelperConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class BalanceHelper__factory extends ContractFactory { - constructor(...args: BalanceHelperConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): BalanceHelper { - return super.attach(address) as BalanceHelper; - } - override connect(signer: Signer): BalanceHelper__factory { - return super.connect(signer) as BalanceHelper__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): BalanceHelperInterface { - return new utils.Interface(_abi) as BalanceHelperInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): BalanceHelper { - return new Contract(address, _abi, signerOrProvider) as BalanceHelper; - } -} diff --git a/src/types/factories/contracts/test/suites/BaseCreditTestSuite__factory.ts b/src/types/factories/contracts/test/suites/BaseCreditTestSuite__factory.ts deleted file mode 100644 index bddd6c44..00000000 --- a/src/types/factories/contracts/test/suites/BaseCreditTestSuite__factory.ts +++ /dev/null @@ -1,589 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { - Signer, - utils, - Contract, - ContractFactory, - BigNumberish, - Overrides, -} from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - BaseCreditTestSuite, - BaseCreditTestSuiteInterface, -} from "../../../../contracts/test/suites/BaseCreditTestSuite"; - -const _abi = [ - { - inputs: [ - { - internalType: "contract TokensTestSuite", - name: "_testTokenSuite", - type: "address", - }, - { - internalType: "enum Tokens", - name: "_underlying", - type: "uint8", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "", - type: "address", - }, - ], - name: "log_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "log_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - name: "log_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "int256", - name: "", - type: "int256", - }, - ], - name: "log_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "address", - name: "val", - type: "address", - }, - ], - name: "log_named_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes", - name: "val", - type: "bytes", - }, - ], - name: "log_named_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes32", - name: "val", - type: "bytes32", - }, - ], - name: "log_named_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - ], - name: "log_named_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "string", - name: "val", - type: "string", - }, - ], - name: "log_named_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - ], - name: "log_named_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "log_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "logs", - type: "event", - }, - { - inputs: [], - name: "IS_TEST", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "_getAccountAmount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "enum Tokens", - name: "t", - type: "uint8", - }, - ], - name: "_getCollateralTokens", - outputs: [ - { - components: [ - { - internalType: "address", - name: "token", - type: "address", - }, - { - internalType: "uint16", - name: "liquidationThreshold", - type: "uint16", - }, - ], - internalType: "struct CollateralToken[]", - name: "collateralTokens", - type: "tuple[]", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "acl", - outputs: [ - { - internalType: "contract ACL", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "token", - type: "address", - }, - { - internalType: "uint256", - name: "price", - type: "uint256", - }, - ], - name: "addMockPriceFeed", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "addressProvider", - outputs: [ - { - internalType: "contract AddressProvider", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "af", - outputs: [ - { - internalType: "contract AccountFactory", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "cr", - outputs: [ - { - internalType: "contract ContractsRegister", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "failed", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "gp", - outputs: [ - { - internalType: "contract GenesisFactory", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "enum Tokens", - name: "", - type: "uint8", - }, - ], - name: "lt", - outputs: [ - { - internalType: "uint16", - name: "", - type: "uint16", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "poolMock", - outputs: [ - { - internalType: "contract PoolServiceMock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "priceOracle", - outputs: [ - { - internalType: "contract IPriceOracleV2Ext", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "testTokenSuite", - outputs: [ - { - internalType: "contract TokensTestSuite", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "underlying", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x60806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d00011790553480156200003a57600080fd5b506040516201480e3803806201480e8339810160408190526200005d91620009f2565b6040516200006b90620009ae565b604051809103906000f08015801562000088573d6000803e3d6000fd5b5050600180546001600160a01b0319166001600160a01b038416908117909155604080516325abd85f60e11b81529051634b57b0be916004808201926020929091908290030181865afa158015620000e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200010a919062000a34565b73c4375b7de8af5a38a93548eb8453a498222c4ff26040516200012d90620009bc565b6001600160a01b03928316815291166020820152604001604051809103906000f08015801562000161573d6000803e3d6000fd5b50600380546001600160a01b0319166001600160a01b039290921691821790556040805163de28735960e01b8152905163de287359916004808201926020929091908290030181865afa158015620001bd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e3919062000a34565b604051634910832f60e01b81527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526001600160a01b039190911690634910832f90602401600060405180830381600087803b1580156200023b57600080fd5b505af115801562000250573d6000803e3d6000fd5b50505050600360009054906101000a90046001600160a01b03166001600160a01b031663de2873596040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002a8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ce919062000a34565b60035460405163f2fde38b60e01b81526001600160a01b03918216600482015291169063f2fde38b90602401600060405180830381600087803b1580156200031557600080fd5b505af11580156200032a573d6000803e3d6000fd5b505060035460015460408051636ca42ae360e01b815290516001600160a01b039384169550638874ff1f94509190921691636ca42ae39160048083019260009291908290030181865afa15801562000386573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620003b0919081019062000acf565b6040518263ffffffff1660e01b8152600401620003ce919062000bc0565b600060405180830381600087803b158015620003e957600080fd5b505af1158015620003fe573d6000803e3d6000fd5b50505050600360009054906101000a90046001600160a01b03166001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000456573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200047c919062000a34565b600280546001600160a01b0319166001600160a01b039290921691821790556040805163120d150d60e31b81529051639068a868916004808201926020929091908290030181865afa158015620004d7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004fd919062000a34565b600480546001600160a01b0319166001600160a01b0392831617815560025460408051631f94a27560e31b81529051919093169263fca513a892818101926020929091908290030181865afa1580156200055b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000581919062000a34565b600880546001600160a01b0319166001600160a01b0392831617905560025460408051630873769560e01b81529051919092169163087376959160048083019260209291908290030181865afa158015620005e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000606919062000a34565b600780546001600160a01b0319166001600160a01b039283161790556002546040805163c513c9bb60e01b81529051919092169163c513c9bb9160048083019260209291908290030181865afa15801562000665573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200068b919062000a34565b600680546001600160a01b0319166001600160a01b039283161790556001546040516367b4264560e01b81529116906367b4264590620006d090849060040162000c41565b602060405180830381865afa158015620006ee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000714919062000a34565b600980546001600160a01b0319166001600160a01b0392831617905560035460408051630a55006360e21b815290519190921691632954018c9160048083019260209291908290030181865afa15801562000773573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000799919062000a34565b6009546040516001600160a01b0390911690620007b690620009cb565b6001600160a01b03928316815291166020820152604001604051809103906000f080158015620007ea573d6000803e3d6000fd5b50600580546001600160a01b0319166001600160a01b039283169081179091556001549091169063eebab8ef90839062000823620008ef565b6200083090600a62000c57565b6040518463ffffffff1660e01b8152600401620008509392919062000c85565b600060405180830381600087803b1580156200086b57600080fd5b505af115801562000880573d6000803e3d6000fd5b505060065460055460405163d914cd4b60e01b81526001600160a01b0391821660048201529116925063d914cd4b9150602401600060405180830381600087803b158015620008ce57600080fd5b505af1158015620008e3573d6000803e3d6000fd5b50505050505062000caf565b600180546040516367b4264560e01b81526000926001600160a01b03909216916367b426459162000924919060040162000c41565b602060405180830381865afa15801562000942573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000968919062000a34565b6009546001600160a01b03908116911614620009985762000993670de0b6b3a764000060c862000c57565b905090565b62000993670de0b6b3a7640000614e2062000c57565b6105e6806200207c83390190565b62011105806200266283390190565b6110a7806201376783390190565b6001600160a01b0381168114620009ef57600080fd5b50565b6000806040838503121562000a0657600080fd5b825162000a1381620009d9565b6020840151909250600b811062000a2957600080fd5b809150509250929050565b60006020828403121562000a4757600080fd5b815162000a5481620009d9565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b038111828210171562000a965762000a9662000a5b565b60405290565b604051601f8201601f191681016001600160401b038111828210171562000ac75762000ac762000a5b565b604052919050565b6000602080838503121562000ae357600080fd5b82516001600160401b038082111562000afb57600080fd5b818501915085601f83011262000b1057600080fd5b81518181111562000b255762000b2562000a5b565b62000b35848260051b0162000a9c565b818152848101925060069190911b83018401908782111562000b5657600080fd5b928401925b8184101562000bb5576040848903121562000b765760008081fd5b62000b8062000a71565b845162000b8d81620009d9565b81528486015162000b9e81620009d9565b818701528352604093909301929184019162000b5b565b979650505050505050565b602080825282518282018190526000919060409081850190868401855b8281101562000c1157815180516001600160a01b039081168652908701511686850152928401929085019060010162000bdd565b5091979650505050505050565b600b811062000c3d57634e487b7160e01b600052602160045260246000fd5b9052565b6020810162000c51828462000c1e565b92915050565b600081600019048311821515161562000c8057634e487b7160e01b600052601160045260246000fd5b500290565b6060810162000c95828662000c1e565b6001600160a01b0393909316602082015260400152919050565b6113bd8062000cbf6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806362eb33e311610097578063ba414fa611610066578063ba414fa614610286578063d46b93301461029e578063de287359146102be578063fa7626d4146102de57600080fd5b806362eb33e3146102115780636b70b04c146102315780636f307dc3146102515780639dd55b451461027157600080fd5b80632954018c116100d35780632954018c1461019b578063406c8e2f146101bb5780635e813a8b146101db5780635f7c9bd0146101fb57600080fd5b80630c75f806146100fa5780630e42bc5d146101365780632630c12f14610156575b600080fd5b61011e6101083660046109d5565b600a6020526000908152604090205461ffff1681565b60405161ffff90911681526020015b60405180910390f35b6101496101443660046109d5565b6102eb565b60405161012d91906109fd565b6008546101769073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161012d565b6002546101769073ffffffffffffffffffffffffffffffffffffffff1681565b6001546101769073ffffffffffffffffffffffffffffffffffffffff1681565b6004546101769073ffffffffffffffffffffffffffffffffffffffff1681565b610203610614565b60405190815260200161012d565b6006546101769073ffffffffffffffffffffffffffffffffffffffff1681565b6005546101769073ffffffffffffffffffffffffffffffffffffffff1681565b6009546101769073ffffffffffffffffffffffffffffffffffffffff1681565b61028461027f366004610a8b565b6106fc565b005b61028e610868565b604051901515815260200161012d565b6003546101769073ffffffffffffffffffffffffffffffffffffffff1681565b6007546101769073ffffffffffffffffffffffffffffffffffffffff1681565b60005461028e9060ff1681565b6040805160c08101825260026080820190815261232860a08301528152815180830183526005815261226060208281019190915282015281518083018352606092600092919082019080600387600a81111561034957610349610ab7565b14610355576003610358565b60015b600a81111561036957610369610ab7565b815261206c6020918201529082526040805180820190915260048152611c84818301529101529050612454600a600085828111156103a9576103a9610ab7565b600a8111156103ba576103ba610ab7565b815260208101919091526040908101600020805461ffff939093167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909316929092179091558051600480825260a0820190925281816020015b604080518082019091526000808252602082015281526020019060019003908161041457905050925060005b8181101561060c5782816004811061045a5761045a610ae6565b602002015160200151600a600085846004811061047957610479610ae6565b602002015151600a81111561049057610490610ab7565b600a8111156104a1576104a1610ab7565b81526020810191909152604090810160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff93909316929092179091558051808201909152600154819073ffffffffffffffffffffffffffffffffffffffff166367b4264586856004811061051f5761051f610ae6565b6020020151516040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815261055e9190600401610b15565b602060405180830381865afa15801561057b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059f9190610b56565b73ffffffffffffffffffffffffffffffffffffffff1681526020018483600481106105cc576105cc610ae6565b60200201516020015161ffff168152508482815181106105ee576105ee610ae6565b6020026020010181905250808061060490610ba2565b915050610440565b505050919050565b600180546040517f67b4264500000000000000000000000000000000000000000000000000000000815260009273ffffffffffffffffffffffffffffffffffffffff909216916367b426459161066d9190600401610b15565b602060405180830381865afa15801561068a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ae9190610b56565b60095473ffffffffffffffffffffffffffffffffffffffff9081169116146106e8576106e3670de0b6b3a764000060c8610bdb565b905090565b6106e3670de0b6b3a7640000614e20610bdb565b600081600860405161070d906109c8565b91825260ff166020820152604001604051809103906000f080158015610737573d6000803e3d6000fd5b506000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291925062010000900473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b1580156107be57600080fd5b505af11580156107d2573d6000803e3d6000fd5b50506008546040517fe8a97a3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528581166024830152909116925063e8a97a3e9150604401600060405180830381600087803b15801561084b57600080fd5b505af115801561085f573d6000803e3d6000fd5b50505050505050565b60008054610100900460ff16156108885750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156109c35760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000008284015282518083038401815260608301909352600092909161092d917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc491608001610c53565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261096591610c8f565b6000604051808303816000865af19150503d80600081146109a2576040519150601f19603f3d011682016040523d82523d6000602084013e6109a7565b606091505b50915050808060200190518101906109bf9190610c9b565b9150505b919050565b6106ca80610cbe83390190565b6000602082840312156109e757600080fd5b8135600b81106109f657600080fd5b9392505050565b602080825282518282018190526000919060409081850190868401855b82811015610a59578151805173ffffffffffffffffffffffffffffffffffffffff16855286015161ffff16868501529284019290850190600101610a1a565b5091979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114610a8857600080fd5b50565b60008060408385031215610a9e57600080fd5b8235610aa981610a66565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60208101600b8310610b50577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b600060208284031215610b6857600080fd5b81516109f681610a66565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415610bd457610bd4610b73565b5060010190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610c1357610c13610b73565b500290565b6000815160005b81811015610c395760208185018101518683015201610c1f565b81811115610c48576000828601525b509290920192915050565b7fffffffff00000000000000000000000000000000000000000000000000000000831681526000610c876004830184610c18565b949350505050565b60006109f68284610c18565b600060208284031215610cad57600080fd5b815180151581146109f657600080fdfe60a060405234801561001057600080fd5b506040516106ca3803806106ca83398101604081905261002f9161006c565b60009190915560ff166080526001805460506001600160501b031991821681179092556004805490911690911790554260028190556003556100a2565b6000806040838503121561007f57600080fd5b82519150602083015160ff8116811461009757600080fd5b809150509250929050565b60805161060e6100bc600039600060d3015261060e6000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80639a6fc8f511610081578063d62ada111161005b578063d62ada11146102dc578063f7a30806146102f4578063feaf968c1461030757600080fd5b80639a6fc8f5146101cd578063bd18ad531461023a578063cd653afc1461024d57600080fd5b806354fd4d50116100b257806354fd4d501461012d57806367e8d83d1461013c5780637284e4161461018e57600080fd5b8063313ce567146100ce5780633fd0875f1461010c575b600080fd5b6100f57f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020015b60405180910390f35b6004546a0100000000000000000000900460ff166040516101039190610441565b60405160018152602001610103565b61018c61014a366004610482565b600480549115156c01000000000000000000000000027fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff909216919091179055565b005b604080518082018252600c81527f7072696365206f7261636c6500000000000000000000000000000000000000006020820152905161010391906104ab565b6102036101db36600461053d565b60015460005460025460035460045469ffffffffffffffffffff948516941691939590929450565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610103565b61018c610248366004610558565b61030f565b61018c61025b366004610579565b6001805469ffffffffffffffffffff9586167fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090911617905560029290925560035560048054919092167fffffffffffffffffffffffffffffffffffffffff00ff00000000000000000000909116176b020000000000000000000000179055565b6102e461035f565b6040519015158152602001610103565b61018c6103023660046105bf565b600055565b610203610385565b600480548291907fffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff166b01000000000000000000000083600281111561035757610357610412565b021790555050565b600454600090610380906b010000000000000000000000900460ff166103d6565b905090565b60008060008060006004600c9054906101000a900460ff16156103a757600080fd5b505060015460005460025460035460045469ffffffffffffffffffff9485169893975091955093509190911690565b600060028260028111156103ec576103ec610412565b14156103f757600080fd5b600182600281111561040b5761040b610412565b1492915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016006831061047c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561049457600080fd5b813580151581146104a457600080fd5b9392505050565b600060208083528351808285015260005b818110156104d8578581018301518582016040015282016104bc565b818111156104ea576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803569ffffffffffffffffffff8116811461053857600080fd5b919050565b60006020828403121561054f57600080fd5b6104a48261051e565b60006020828403121561056a57600080fd5b8135600381106104a457600080fd5b6000806000806080858703121561058f57600080fd5b6105988561051e565b935060208501359250604085013591506105b46060860161051e565b905092959194509250565b6000602082840312156105d157600080fd5b503591905056fea264697066735822122014874f7a973b86501c4c1a8be32490fe902c8f088ee234d25f9b2497e19f9e5264736f6c634300080a0033a2646970667358221220adc109711a3120f12c9ed7fe8f0498029b2fdd2c6e05337786a0e0e39d15a1db64736f6c634300080a003360806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d000117905534801561003957600080fd5b50600054604080516318caf8e360e31b815273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660048083019190915260248201929092526044810191909152632aa9a2a960e11b6064820152620100009091046001600160a01b03169063c657c71890608401600060405180830381600087803b1580156100ba57600080fd5b505af11580156100ce573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b81527390f79bf6eb2c4f870365e785982e1f101e93b90660048201526024810191909152600660448201526511949251539160d21b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561014f57600080fd5b505af1158015610163573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b8152733c44cdddb6a900fa2b585dd299e03d12fa4293bc60048201526024810191909152600a6044820152692624a8aaa4a220aa27a960b11b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b1580156101e857600080fd5b505af11580156101fc573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b815273c4375b7de8af5a38a93548eb8453a498222c4ff260048201526024810191909152600c60448201526b44554d425f4144445245535360a01b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561028357600080fd5b505af1158015610297573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b8152739965507d1a55bcc2695c58ba16fb37d819b0a4dc60048201526024810191909152600760448201526620a220a82a22a960c91b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561031957600080fd5b505af115801561032d573d6000803e3d6000fd5b505050506102a6806103406000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063ba414fa61461003b578063fa7626d414610057575b600080fd5b610043610064565b604051901515815260200160405180910390f35b6000546100439060ff1681565b60008054610100900460ff16156100845750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156101bf5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610129917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016101ff565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526101619161023b565b6000604051808303816000865af19150503d806000811461019e576040519150601f19603f3d011682016040523d82523d6000602084013e6101a3565b606091505b50915050808060200190518101906101bb919061024e565b9150505b919050565b6000815160005b818110156101e557602081850181015186830152016101cb565b818111156101f4576000828601525b509290920192915050565b7fffffffff0000000000000000000000000000000000000000000000000000000083168152600061023360048301846101c4565b949350505050565b600061024782846101c4565b9392505050565b60006020828403121561026057600080fd5b8151801515811461024757600080fdfea2646970667358221220293f55a0ef7b60c31a89dbc50e3339c80a8fdb1f9567614b200e97598226671f64736f6c634300080a003360806040523480156200001157600080fd5b506040516201110538038062011105833981016040819052620000349162000811565b6200003f3362000734565b6040516200004d9062000784565b604051809103906000f0801580156200006a573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b039283169081179091556040516310dc138160e31b81529184166004830152906386e09c0890602401600060405180830381600087803b158015620000c457600080fd5b505af1158015620000d9573d6000803e3d6000fd5b50506001546040516301ed651160e41b81526001600160a01b0385811660048301529091169250631ed651109150602401600060405180830381600087803b1580156200012557600080fd5b505af11580156200013a573d6000803e3d6000fd5b505050506040516200014c9062000792565b604051809103906000f08015801562000169573d6000803e3d6000fd5b50600280546001600160a01b0319166001600160a01b039283169081179091556001546040516376aad60560e01b81526004810192909252909116906376aad60590602401600060405180830381600087803b158015620001c957600080fd5b505af1158015620001de573d6000803e3d6000fd5b5050600154604051600093506001600160a01b0390911691506200020290620007a0565b6001600160a01b039091168152602001604051809103906000f0801580156200022f573d6000803e3d6000fd5b5060015460405163338f12b960e21b81526001600160a01b03808416600483015292935091169063ce3c4ae490602401600060405180830381600087803b1580156200027a57600080fd5b505af11580156200028f573d6000803e3d6000fd5b5050600154604051600093506001600160a01b039091169150620002b390620007ae565b6001600160a01b039091168152602001604051809103906000f080158015620002e0573d6000803e3d6000fd5b5060015460405163c5120b3960e01b81526001600160a01b03808416600483015292935091169063c5120b3990602401600060405180830381600087803b1580156200032b57600080fd5b505af115801562000340573d6000803e3d6000fd5b5050600154604051606093506001600160a01b03909116915082906200036690620007bc565b6200037392919062000849565b604051809103906000f08015801562000390573d6000803e3d6000fd5b50600380546001600160a01b0319166001600160a01b0392831690811790915560015460405163530e784f60e01b815260048101929092529091169063530e784f90602401600060405180830381600087803b158015620003f057600080fd5b505af115801562000405573d6000803e3d6000fd5b5050600154604051600093506001600160a01b0390911691506200042990620007ca565b6001600160a01b039091168152602001604051809103906000f08015801562000456573d6000803e3d6000fd5b506001546040516356ee0d3b60e11b81526001600160a01b03808416600483015292935091169063addc1a7690602401600060405180830381600087803b158015620004a157600080fd5b505af1158015620004b6573d6000803e3d6000fd5b5050600154604051600093506001600160a01b039091169150620004da90620007d8565b6001600160a01b039091168152602001604051809103906000f08015801562000507573d6000803e3d6000fd5b506001546040516321da583760e01b81526001600160a01b0380841660048301529293509116906321da583790602401600060405180830381600087803b1580156200055257600080fd5b505af115801562000567573d6000803e3d6000fd5b505050506000306040516200057c90620007e6565b6001600160a01b039091168152602001604051809103906000f080158015620005a9573d6000803e3d6000fd5b50600154604051631795d5b360e31b81526001600160a01b03808416600483015292935091169063bcaead9890602401600060405180830381600087803b158015620005f457600080fd5b505af115801562000609573d6000803e3d6000fd5b505060405163f2fde38b60e01b81523360048201526001600160a01b038416925063f2fde38b9150602401600060405180830381600087803b1580156200064f57600080fd5b505af115801562000664573d6000803e3d6000fd5b505060015460405163f2fde38b60e01b81523360048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b158015620006ae57600080fd5b505af1158015620006c3573d6000803e3d6000fd5b505060025460405163f2fde38b60e01b81523360048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b1580156200070d57600080fd5b505af115801562000722573d6000803e3d6000fd5b505050505050505050505050620008b2565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610fcd80620010dd83390190565b61098c80620020aa83390190565b610f508062002a3683390190565b614da6806200398683390190565b611b45806200872c83390190565b612ced806200a27183390190565b611627806200cf5e83390190565b612b80806200e58583390190565b80516001600160a01b03811681146200080c57600080fd5b919050565b600080604083850312156200082557600080fd5b6200083083620007f4565b91506200084060208401620007f4565b90509250929050565b6001600160a01b0383811682526040602080840182905284518483018190526000938683019290916060870190865b81811015620008a3578551805186168452840151851684840152948301949186019160010162000878565b50909998505050505050505050565b61081b80620008c26000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80638874ff1f1161005b5780638874ff1f146100f55780638da5cb5b14610108578063de28735914610126578063f2fde38b1461014657600080fd5b80632630c12f146100825780632954018c146100cb578063715018a6146100eb575b600080fd5b6003546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6001546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b6100f3610159565b005b6100f3610103366004610658565b6101eb565b60005473ffffffffffffffffffffffffffffffffffffffff166100a2565b6002546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b6100f3610154366004610734565b6103e3565b60005473ffffffffffffffffffffffffffffffffffffffff1633146101df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6101e96000610513565b565b60005473ffffffffffffffffffffffffffffffffffffffff16331461026c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101d6565b60005b815181101561035c57600354825173ffffffffffffffffffffffffffffffffffffffff9091169063e8a97a3e908490849081106102ae576102ae610756565b6020026020010151600001518484815181106102cc576102cc610756565b6020026020010151602001516040518363ffffffff1660e01b815260040161031792919073ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b600060405180830381600087803b15801561033157600080fd5b505af1158015610345573d6000803e3d6000fd5b50505050808061035490610785565b91505061026f565b506002546040517ff2fde38b00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063f2fde38b90602401600060405180830381600087803b1580156103c857600080fd5b505af11580156103dc573d6000803e3d6000fd5b5050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101d6565b73ffffffffffffffffffffffffffffffffffffffff8116610507576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016101d6565b61051081610513565b50565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156105da576105da610588565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561062757610627610588565b604052919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461065357600080fd5b919050565b6000602080838503121561066b57600080fd5b823567ffffffffffffffff8082111561068357600080fd5b818501915085601f83011261069757600080fd5b8135818111156106a9576106a9610588565b6106b7848260051b016105e0565b818152848101925060069190911b8301840190878211156106d757600080fd5b928401925b8184101561072957604084890312156106f55760008081fd5b6106fd6105b7565b6107068561062f565b815261071386860161062f565b81870152835260409390930192918401916106dc565b979650505050505050565b60006020828403121561074657600080fd5b61074f8261062f565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156107de577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea26469706673582212205ee75e57bb635aa49a1758f4ab0b04182a73115bff08f420c56a8ddb433c029364736f6c634300080a0033608060405234801561001057600080fd5b5061001a3361005f565b60405130906f20a2222922a9a9afa82927ab24a222a960811b907fb37614c7d254ea8d16eb81fa11dddaeb266aa8ba4917980859c7740aff30c69190600090a36100af565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610f0f806100be6000396000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c806377532ed9116100e3578063bcaead981161008c578063ce3c4ae411610066578063ce3c4ae414610308578063f2fde38b1461031b578063fca513a81461032e57600080fd5b8063bcaead98146102da578063c5120b39146102ed578063c513c9bb1461030057600080fd5b80639068a868116100bd5780639068a868146102b7578063addc1a76146102bf578063affd9243146102d257600080fd5b806377532ed91461027e57806386e09c08146102865780638da5cb5b1461029957600080fd5b80634c252f9111610145578063699f200f1161011f578063699f200f1461022d578063715018a61461026357806376aad6051461026b57600080fd5b80634c252f91146101fc578063530e784f1461020457806354fd4d501461021757600080fd5b80631ed65110116101765780631ed65110146101cc57806321da5837146101e157806326c74fc3146101f457600080fd5b8063060678c21461019257806308737695146101c4575b600080fd5b61019a610336565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61019a610366565b6101df6101da366004610e10565b610391565b005b6101df6101ef366004610e10565b610444565b61019a6104ef565b61019a61051a565b6101df610212366004610e10565b610545565b61021f600281565b6040519081526020016101bb565b61019a61023b366004610e4d565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6101df6105f0565b6101df610279366004610e10565b61067d565b61019a610728565b6101df610294366004610e10565b610753565b60005473ffffffffffffffffffffffffffffffffffffffff1661019a565b61019a6107fe565b6101df6102cd366004610e10565b610829565b61019a6108d4565b6101df6102e8366004610e10565b6108ff565b6101df6102fb366004610e10565b6109aa565b61019a610a55565b6101df610316366004610e10565b610a80565b6101df610329366004610e10565b610b2b565b61019a610c58565b60006103617f444154415f434f4d50524553534f520000000000000000000000000000000000610c7f565b905090565b60006103617f41434c0000000000000000000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610417576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6104417f54524541535552595f434f4e545241435400000000000000000000000000000082610d1d565b50565b60005473ffffffffffffffffffffffffffffffffffffffff1633146104c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f574554485f47415445574159000000000000000000000000000000000000000082610d1d565b60006103617f54524541535552595f434f4e5452414354000000000000000000000000000000610c7f565b60006103617f574554485f544f4b454e00000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f50524943455f4f5241434c45000000000000000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610671576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b61067b6000610d9b565b565b60005473ffffffffffffffffffffffffffffffffffffffff1633146106fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f41434c000000000000000000000000000000000000000000000000000000000082610d1d565b60006103617f574554485f474154455741590000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146107d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f574554485f544f4b454e0000000000000000000000000000000000000000000082610d1d565b60006103617f4143434f554e545f464143544f52590000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146108aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f4143434f554e545f464143544f5259000000000000000000000000000000000082610d1d565b60006103617f474541525f544f4b454e00000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610980576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f474541525f544f4b454e0000000000000000000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f444154415f434f4d50524553534f52000000000000000000000000000000000082610d1d565b60006103617f434f4e5452414354535f52454749535445520000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610b01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f434f4e5452414354535f5245474953544552000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610bac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b73ffffffffffffffffffffffffffffffffffffffff8116610c4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161040e565b61044181610d9b565b60006103617f50524943455f4f5241434c4500000000000000000000000000000000000000005b6000818152600160209081526040808320548151808301909252600382527f41503100000000000000000000000000000000000000000000000000000000009282019290925273ffffffffffffffffffffffffffffffffffffffff9091169081610d16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040e9190610e66565b5092915050565b60008281526001602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091559051909184917fb37614c7d254ea8d16eb81fa11dddaeb266aa8ba4917980859c7740aff30c6919190a35050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215610e2257600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610e4657600080fd5b9392505050565b600060208284031215610e5f57600080fd5b5035919050565b600060208083528351808285015260005b81811015610e9357858101830151858201604001528201610e77565b81811115610ea5576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea264697066735822122083c228af017c6f5cf8c395cdf7a53276ff56fdd4f4313c39f680ab73bd75417364736f6c634300080a0033608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61090e8061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063732818191161008c578063adce758d11610066578063adce758d14610215578063ba306df114610228578063d4eb5db01461023b578063f2fde38b1461027457600080fd5b806373281819146101b7578063819ad68e146101da5780638da5cb5b146101ed57600080fd5b806354fd4d50116100bd57806354fd4d501461016a5780635f259aba14610180578063715018a6146101af57600080fd5b806335914829146100e45780633a41ec641461011c5780634910832f14610155575b600080fd5b6101076100f236600461089b565b60016020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61010761012a36600461089b565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205460ff1690565b61016861016336600461089b565b610287565b005b610172600181565b604051908152602001610113565b61010761018e36600461089b565b60005473ffffffffffffffffffffffffffffffffffffffff91821691161490565b610168610387565b6101076101c536600461089b565b60026020526000908152604090205460ff1681565b6101686101e836600461089b565b610414565b60005460405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610113565b61016861022336600461089b565b61050c565b61016861023636600461089b565b610601565b61010761024936600461089b565b73ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205460ff1690565b61016861028236600461089b565b6106f6565b60005473ffffffffffffffffffffffffffffffffffffffff16331461030d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909217909155517fae26b1cfe9454ba87274a4e8330b6654684362d0f3d7bbd17f7449a1d38387c69190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610408576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b6104126000610826565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517fd400da6c0c0a894dacc0981730b88af0545d00272ee8fff1437bf560ff245fc49190a250565b60005473ffffffffffffffffffffffffffffffffffffffff16331461058d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f1998397e7203f7baca9d6f41b9e4da6e768daac5caad4234fb9bf5869d2715459190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610682576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526001602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f28b01395b7e25d20552a0c8dc8ecd3b1d4abc986f14dad7885fd45b6fd73c8d99190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811661081a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610304565b61082381610826565b50565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156108ad57600080fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146108d157600080fd5b939250505056fea26469706673582212204712efbfe997070def77285a5b8753bc882b62da2133ce1937ad26cd2b48e49864736f6c634300080a003360a060405234801561001057600080fd5b50604051610f50380380610f5083398101604081905261002f916100d7565b6000805460ff19169055806001600160a01b03811661006157604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa15801561009f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100c391906100d7565b6001600160a01b0316608052506101079050565b6000602082840312156100e957600080fd5b81516001600160a01b038116811461010057600080fd5b9392505050565b608051610e1261013e600039600081816101e2015281816102b20152818161040f0152818161057801526108510152610e126000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80638456cb5911610097578063b4ac686011610066578063b4ac686014610217578063c29277cd1461021f578063d914cd4b14610227578063e26b2f631461023a57600080fd5b80638456cb59146101cd57806394144856146101d5578063a50cf2c8146101dd578063ac4afa381461020457600080fd5b80635b16ebb7116100d35780635b16ebb7146101575780635c975abb1461018a578063673a2a1f146101955780636fbc6f6b146101aa57600080fd5b80631e16e4fc146100fa5780633f4ba83a1461013757806354fd4d5014610141575b600080fd5b61010d610108366004610c97565b61024d565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61013f610284565b005b610149600181565b60405190815260200161012e565b61017a610165366004610cb0565b60026020526000908152604090205460ff1681565b604051901515815260200161012e565b60005460ff1661017a565b61019d610372565b60405161012e9190610ced565b61017a6101b8366004610cb0565b60046020526000908152604090205460ff1681565b61013f6103e1565b61019d6104cd565b61010d7f000000000000000000000000000000000000000000000000000000000000000081565b61010d610212366004610c97565b61053a565b600154610149565b600354610149565b61013f610235366004610cb0565b61054a565b61013f610248366004610cb0565b610823565b6003818154811061025d57600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa15801561030e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103329190610d47565b610368576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610370610af6565b565b606060018054806020026020016040519081016040528092919081815260200182805480156103d757602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116103ac575b5050505050905090565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561046b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048f9190610d47565b6104c5576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610370610bd7565b606060038054806020026020016040519081016040528092919081815260200182805480156103d75760200282019190600052602060002090815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116103ac575050505050905090565b6001818154811061025d57600080fd5b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156105d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f89190610d47565b61062e576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051808201909152600281527f5a30000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff82166106b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b60405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff8116600090815260026020908152604091829020548251808401909352600383527f43523100000000000000000000000000000000000000000000000000000000009183019190915260ff1615610753576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b506001805480820182557fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915560008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909417909355915190917ff816b5143086c89d103a0683286be86c2b741e83ebfa75135aae606e2f5c6e5391a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156108ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d19190610d47565b610907576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051808201909152600281527f5a30000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8216610989576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b5073ffffffffffffffffffffffffffffffffffffffff8116600090815260046020908152604091829020548251808401909352600383527f43523200000000000000000000000000000000000000000000000000000000009183019190915260ff1615610a23576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b506003805460018082019092557fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915560008181526004602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909417909355915190917f58ad3cfc4b6552a53c8c4128ae9b080e14b4378a159280643a62c6f709cee24f91a250565b60005460ff16610b62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016106b0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff1615610c44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016106b0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610bad3390565b600060208284031215610ca957600080fd5b5035919050565b600060208284031215610cc257600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610ce657600080fd5b9392505050565b6020808252825182820181905260009190848201906040850190845b81811015610d3b57835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101610d09565b50909695505050505050565b600060208284031215610d5957600080fd5b81518015158114610ce657600080fd5b600060208083528351808285015260005b81811015610d9657858101830151858201604001528201610d7a565b81811115610da8576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea26469706673582212208f2d91c863db9ab1494a9c5db20e3fddc4b6c779ea3c3621737c105c60d9440a64736f6c634300080a003360e06040523480156200001157600080fd5b5060405162004da638038062004da6833981016040819052620000349162000160565b6001600160a01b0381166200005c57604051635919af9760e11b815260040160405180910390fd5b6001600160a01b03811660808190526040805163c513c9bb60e01b8152905163c513c9bb916004808201926020929091908290030181865afa158015620000a7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cd919062000160565b6001600160a01b031660a0816001600160a01b0316815250506080516001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000127573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200014d919062000160565b6001600160a01b031660c0525062000192565b6000602082840312156200017357600080fd5b81516001600160a01b03811681146200018b57600080fd5b9392505050565b60805160a05160c051614b896200021d6000396000818161018801528181611c4f0152612c5a0152600081816101ed015281816115e201528181611f5f0152818161213f0152818161223f0152818161243801528181612604015281816126bc01528181612788015281816129a501528181613c410152613d000152600061013c0152614b896000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c806354fd4d5011610081578063a80deda31161005b578063a80deda31461020f578063ae093f3f1461022f578063fc9914cb1461024f57600080fd5b806354fd4d50146101bd578063663b8fdb146101d35780637a0c7b21146101e857600080fd5b80632954018c116100b25780632954018c146101375780634b2f336d146101835780634c472fc9146101aa57600080fd5b80630dbd616d146100d957806313d21cdf146101025780631bcd8fc014610122575b600080fd5b6100ec6100e73660046140fc565b610272565b6040516100f9919061430b565b60405180910390f35b61011561011036600461431e565b6114d4565b6040516100f99190614444565b61012a611f59565b6040516100f99190614453565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100f9565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b61015e6101b83660046140fc565b6121f5565b6101c5600281565b6040519081526020016100f9565b6101db612432565b6040516100f991906146ea565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b61022261021d36600461431e565b6126b5565b6040516100f9919061476a565b61024261023d36600461431e565b612a75565b6040516100f991906147dd565b61026261025d3660046140fc565b613bf7565b60405190151581526020016100f9565b61035f604051806102400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160008152602001606081526020016000815260200160008152602001600015158152602001600081526020016000815260200160008152602001600060ff168152602001600081525090565b600080600080600061037088613cf4565b509450945094509450945060008560ff1660011461041d576040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015284169063e958b70490602401602060405180830381865afa1580156103f4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061041891906147f0565b6104ad565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015286169063e958b70490602401602060405180830381865afa158015610489573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ad91906147f0565b60ff8716610200890181905273ffffffffffffffffffffffffffffffffffffffff808b1660208b01528b811660608b015282168952909150600114156109e9578473ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610538573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055c91906147f0565b73ffffffffffffffffffffffffffffffffffffffff90811660808901526040517fc7de38a600000000000000000000000000000000000000000000000000000000815282821660048201529085169063c7de38a690602401602060405180830381865afa1580156105d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f5919061480d565b60c08801526040517fdfd5946500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015285169063dfd5946590602401602060405180830381865afa158015610666573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068a919061480d565b60e08801526040517f3ce0735500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015260006024830152861690633ce0735590604401602060405180830381865afa92505050801561073c575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526107399181019061480d565b60015b6107455761074c565b6101408801525b6040517f3ce0735500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015260016024830152861690633ce0735590604401602060405180830381865afa9250505080156107f9575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526107f69181019061480d565b60015b61080257610809565b6101608801525b60c08701516040517f996329f800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526024820192909252600060448201529086169063996329f89060640160a060405180830381865afa9250505080156108c4575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526108c191810190614826565b60015b6108cd576108da565b505015156101808a015250505b8073ffffffffffffffffffffffffffffffffffffffff16631afbb7a46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610925573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610949919061480d565b6101a08801526040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152851690633192195c90602401602060405180830381865afa1580156109bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109df919061480d565b60a0880152610c26565b8273ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5891906147f0565b73ffffffffffffffffffffffffffffffffffffffff90811660808901526040517fc7de38a600000000000000000000000000000000000000000000000000000000815282821660048201529083169063c7de38a6906024016040805180830381865afa158015610acc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af09190614866565b5060c08801526040517fdfd5946500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015283169063dfd5946590602401602060405180830381865afa158015610b62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b86919061480d565b60e08801526040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152841690633192195c906024016040805180830381865afa158015610bf6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1a9190614866565b60a08901526101a08801525b60008660ff16600114610ca7578373ffffffffffffffffffffffffffffffffffffffff166316f0115b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca291906147f0565b610d16565b8573ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1691906147f0565b90508073ffffffffffffffffffffffffffffffffffffffff166345d31f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d87919061480d565b6101008901526000600160ff891614610e0e578473ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610de5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e09919061480d565b610e7d565b8573ffffffffffffffffffffffffffffffffffffffff166320a05ff76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7d919061480d565b90508760ff16600114610f1f576040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152861690638991b2f190602401602060405180830381865afa158015610ef6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1a919061480d565b610faf565b6040517fb451cecc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015287169063b451cecc90602401602060405180830381865afa158015610f8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610faf919061480d565b6102208a01528067ffffffffffffffff811115610fce57610fce61488a565b60405190808252806020026020018201604052801561103e57816020015b6040805160808101825260008082526020808301829052928201819052606082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181610fec5790505b506101208a015260005b818110156113d657604080516080810182526000808252602082018190529181018290526060810191909152600180831b9060ff8c1614156111c5576040517faf0a650200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018590528a169063af0a650290604401608060405180830381865afa1580156110f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111b91906148b9565b5050602084015273ffffffffffffffffffffffffffffffffffffffff9081168084526040517ff9eaee0d0000000000000000000000000000000000000000000000000000000081526004810191909152908a169063f9eaee0d90602401602060405180830381865afa158015611195573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b9919061490d565b15156040830152611388565b6040517f172c48c70000000000000000000000000000000000000000000000000000000081526004810184905273ffffffffffffffffffffffffffffffffffffffff89169063172c48c7906024016040805180830381865afa15801561122f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112539190614928565b5073ffffffffffffffffffffffffffffffffffffffff9081168084526040517f70a082310000000000000000000000000000000000000000000000000000000081529188166004830152906370a0823190602401602060405180830381865afa1580156112c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e8919061480d565b602083015281516040517ff9eaee0d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529088169063f9eaee0d90602401602060405180830381865afa15801561135c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611380919061490d565b151560408301525b6102208c015181161561139c57600161139f565b60005b151560608301526101208c01518051839190859081106113c1576113c161495e565b60209081029190910101525050600101611048565b508273ffffffffffffffffffffffffffffffffffffffff166317d11a156040518163ffffffff1660e01b8152600401602060405180830381865afa158015611422573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611446919061480d565b896101c00181815250508273ffffffffffffffffffffffffffffffffffffffff16633dc54b406040518163ffffffff1660e01b8152600401602060405180830381865afa15801561149b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bf919061480d565b6101e08a015250969998505050505050505050565b61159b604051806102000160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600060ff1681525090565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015283917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa15801561162b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164f919061490d565b611685576040517fd384b23800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316808352604080517ffe14112d000000000000000000000000000000000000000000000000000000008152905185929163fe14112d9160048083019260209291908290030181865afa1580156116f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611719919061480d565b8360c00181815250508073ffffffffffffffffffffffffffffffffffffffff1663ef8d96036040518163ffffffff1660e01b8152600401602060405180830381865afa15801561176d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611791919061480d565b8360e00181815250508073ffffffffffffffffffffffffffffffffffffffff1663743753596040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611809919061480d565b8360a00181815250508073ffffffffffffffffffffffffffffffffffffffff16634c19386c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561185d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611881919061480d565b836101000181815250508073ffffffffffffffffffffffffffffffffffffffff1663788c6bfe6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fa919061480d565b836101600181815250508073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561194f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611973919061480d565b8360800181815250508073ffffffffffffffffffffffffffffffffffffffff166345d31f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119eb919061480d565b836101400181815250508073ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6491906147f0565b836040019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff166336dda7d56040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0a91906147f0565b836060019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663788c6bfe6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb0919061480d565b836101600181815250508073ffffffffffffffffffffffffffffffffffffffff1663e941fa786040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c29919061480d565b61018084015260408084015173ffffffffffffffffffffffffffffffffffffffff9081167f000000000000000000000000000000000000000000000000000000000000000082161460208087019190915282517f609ae31700000000000000000000000000000000000000000000000000000000815292519184169263609ae31792600480830193928290030181865afa158015611ccb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cef919061480d565b836101c00181815250508073ffffffffffffffffffffffffffffffffffffffff1663dbcb313b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d68919061480d565b836101a00181815250506000836060015173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de7919061480d565b6040517f5427c9380000000000000000000000000000000000000000000000000000000081526004810182905290915060009073ffffffffffffffffffffffffffffffffffffffff841690635427c93890602401602060405180830381865afa158015611e58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7c919061480d565b90508015611ec7576101808501518190611eb890611e9c906127106149bc565b876101000151886101400151611eb291906149d3565b90613fd0565b611ec29190614a3f565b611ece565b8461014001515b856101200181815250508273ffffffffffffffffffffffffffffffffffffffff166354fd4d506040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f47919061480d565b60ff166101e086015250505050919050565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b4ac68606040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fec919061480d565b90508067ffffffffffffffff8111156120075761200761488a565b6040519080825280602002602001820160405280156120ff57816020015b6120ec604051806102000160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600060ff1681525090565b8152602001906001900390816120255790505b50915060005b818110156121f0576040517fac4afa38000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ac4afa3890602401602060405180830381865afa15801561219b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121bf91906147f0565b90506121ca816114d4565b8483815181106121dc576121dc61495e565b602090810291909101015250600101612105565b505090565b6040517f6fbc6f6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015260009184917f00000000000000000000000000000000000000000000000000000000000000001690636fbc6f6b90602401602060405180830381865afa158015612286573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122aa919061490d565b6122e0576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060006122ee87613cf4565b5050935093505092508260ff16600114612397576040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015282169063fdd5764590602401602060405180830381865afa15801561236e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061239291906147f0565b612427565b6040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015283169063fdd5764590602401602060405180830381865afa158015612403573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061242791906147f0565b979650505050505050565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c29277cd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124c5919061480d565b90508067ffffffffffffffff8111156124e0576124e061488a565b6040519080825280602002602001820160405280156125c457816020015b60408051610260810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083018290526101208301819052610140830181905261016083015261018082018190526101a082018190526101c082018190526101e082018190526102008201819052610220820181905261024082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816124fe5790505b50915060005b818110156121f0576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa158015612660573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061268491906147f0565b905061268f81612a75565b8483815181106126a1576126a161495e565b6020908102919091010152506001016125ca565b60606000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c29277cd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612725573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612749919061480d565b905060005b81811015612829576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa1580156127e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061280891906147f0565b90506128148187613bf7565b15612820578360010193505b5060010161274e565b508167ffffffffffffffff8111156128435761284361488a565b60405190808252806020026020018201604052801561296157816020015b61294e604051806102400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160008152602001606081526020016000815260200160008152602001600015158152602001600081526020016000815260200160008152602001600060ff168152602001600081525090565b8152602001906001900390816128615790505b5092506000915060005b81811015612a6d576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa158015612a01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a2591906147f0565b9050612a318187613bf7565b15612a6457612a408187610272565b858581518110612a5257612a5261495e565b60209081029190910101526001909301925b5060010161296b565b505050919050565b604080516102608101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082018390526101208201819052610140820181905261016082015261018081018290526101a081018290526101c081018290526101e08101829052610200810182905261022081018290526102408101829052908080808080612b1b88613cf4565b73ffffffffffffffffffffffffffffffffffffffff8e168d5260ff86166101808e01819052959b50939950919750955093509150600114612bca578273ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ba1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bc591906147f0565b612c39565b8473ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c3991906147f0565b73ffffffffffffffffffffffffffffffffffffffff908116602089018190527f00000000000000000000000000000000000000000000000000000000000000009091161460408801526000600160ff881614612d03578373ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cfe91906147f0565b612d72565b8573ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d7291906147f0565b6040517f2e97ca2100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b8116600483015291925090821690632e97ca2190602401602060405180830381865afa158015612de2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e06919061490d565b15156060890152604080517f45d31f9d000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff8316916345d31f9d9160048083019260209291908290030181865afa158015612e78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e9c919061480d565b8860800181815250508073ffffffffffffffffffffffffffffffffffffffff1663743753596040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ef0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f14919061480d565b610100890152600160ff88161415613017578573ffffffffffffffffffffffffffffffffffffffff16639b2cb5d86040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f95919061480d565b8860a00181815250508573ffffffffffffffffffffffffffffffffffffffff16635f48f3936040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fe9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061300d919061480d565b60c08901526130a5565b8273ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa158015613061573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130859190614a73565b6fffffffffffffffffffffffffffffffff90811660c08b01521660a08901525b60008760ff16600114613126578473ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613121919061480d565b613195565b8573ffffffffffffffffffffffffffffffffffffffff166320a05ff76040518163ffffffff1660e01b8152600401602060405180830381865afa158015613171573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613195919061480d565b90508067ffffffffffffffff8111156131b0576131b061488a565b6040519080825280602002602001820160405280156131d9578160200160208202803683370190505b506101208a01528067ffffffffffffffff8111156131f9576131f961488a565b604051908082528060200260200182016040528015613222578160200160208202803683370190505b506101608a015260005b818110156134c4578860ff16600114156133b4576040517f5e5f2e260000000000000000000000000000000000000000000000000000000081526004810182905260009073ffffffffffffffffffffffffffffffffffffffff891690635e5f2e2690602401602060405180830381865afa1580156132ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132d291906147f0565b9050808b610120015183815181106132ec576132ec61495e565b73ffffffffffffffffffffffffffffffffffffffff92831660209182029290920101526040517f78327438000000000000000000000000000000000000000000000000000000008152828216600482015290891690637832743890602401602060405180830381865afa158015613367573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061338b919061480d565b8b610160015183815181106133a2576133a261495e565b602002602001018181525050506134bc565b6040517f172c48c70000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff87169063172c48c7906024016040805180830381865afa15801561341e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134429190614928565b8061ffff1690508b610120015183815181106134605761346061495e565b602002602001018c6101600151848151811061347e5761347e61495e565b60200260200101828152508273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525050505b60010161322c565b5060008860ff16600114613546578373ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561351d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613541919061480d565b6135b5565b8673ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613591573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135b5919061480d565b90508067ffffffffffffffff8111156135d0576135d061488a565b60405190808252806020026020018201604052801561361557816020015b60408051808201909152600080825260208201528152602001906001900390816135ee5790505b506101408b015260005b818110156139015760408051808201909152600080825260208201528a60ff166001146136da576040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff871690635094cb4f90602401602060405180830381865afa1580156136b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136d591906147f0565b613769565b6040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff8a1690635094cb4f90602401602060405180830381865afa158015613745573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061376991906147f0565b73ffffffffffffffffffffffffffffffffffffffff168152600160ff8c16146138245780516040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529089169063fdd5764590602401602060405180830381865afa1580156137fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061381f91906147f0565b6138b7565b80516040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152908a169063fdd5764590602401602060405180830381865afa158015613893573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138b791906147f0565b73ffffffffffffffffffffffffffffffffffffffff1660208201526101408c01518051829190849081106138ed576138ed61495e565b60209081029190910101525060010161361f565b508860ff166001141561398f578773ffffffffffffffffffffffffffffffffffffffff1663b2c53a6c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613959573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061397d919061480d565b60e08b015260ff6102408b0152613be9565b73ffffffffffffffffffffffffffffffffffffffff85166101a08b01819052604080517f9408b63f0000000000000000000000000000000000000000000000000000000081529051639408b63f916004808201926020929091908290030181865afa158015613a02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a2691906147f0565b8a6101e0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508473ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015613aa9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613acd9190614aa6565b5015156102008c015250604080517f9fd12b77000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff881691639fd12b779160048083019260209291908290030181865afa158015613b42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b66919061480d565b8a6102200181815250508573ffffffffffffffffffffffffffffffffffffffff16638345f26e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bdf9190614af7565b60ff166102408b01525b505050505050505050919050565b6040517f6fbc6f6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015260009184917f00000000000000000000000000000000000000000000000000000000000000001690636fbc6f6b90602401602060405180830381865afa158015613c88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cac919061490d565b613ce2576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613cec8484614023565b949350505050565b600080600080600080867f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636fbc6f6b826040518263ffffffff1660e01b8152600401613d73919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa158015613d90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613db4919061490d565b613dea576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8773ffffffffffffffffffffffffffffffffffffffff166354fd4d506040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e59919061480d565b96508660ff1660011415613ee0578795508573ffffffffffffffffffffffffffffffffffffffff1663f93f515b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613eb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ed991906147f0565b9450613fc6565b8793508373ffffffffffffffffffffffffffffffffffffffff16632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f5291906147f0565b92508373ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fc391906147f0565b91505b5091939550919395565b6000821580613fdd575081155b15613fea5750600061401d565b612710613ff8600282614b1a565b61ffff1661400684866149d3565b6140109190614b3b565b61401a9190614a3f565b90505b92915050565b6040517f055ee9b500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600091829185169063055ee9b590602401602060405180830381865afa158015614094573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140b891906147f0565b73ffffffffffffffffffffffffffffffffffffffff1614159392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146140f957600080fd5b50565b6000806040838503121561410f57600080fd5b823561411a816140d7565b9150602083013561412a816140d7565b809150509250929050565b600081518084526020808501945080840160005b8381101561419f578151805173ffffffffffffffffffffffffffffffffffffffff168852838101518489015260408082015115159089015260609081015115159088015260809096019590820190600101614149565b509495945050505050565b805173ffffffffffffffffffffffffffffffffffffffff168252600061024060208301516141f0602086018273ffffffffffffffffffffffffffffffffffffffff169052565b506040830151614204604086018215159052565b50606083015161422c606086018273ffffffffffffffffffffffffffffffffffffffff169052565b506080830151614254608086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060a083015160a085015260c083015160c085015260e083015160e085015261010080840151818601525061012080840151828287015261429783870182614135565b92505050610140808401518186015250610160808401518186015250610180808401516142c78287018215159052565b50506101a083810151908501526101c080840151908501526101e080840151908501526102008084015160ff16908501526102209283015192909301919091525090565b60208152600061401a60208301846141aa565b60006020828403121561433057600080fd5b813561433b816140d7565b9392505050565b805173ffffffffffffffffffffffffffffffffffffffff168252602081015161436f602084018215159052565b506040810151614397604084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060608101516143bf606084018273ffffffffffffffffffffffffffffffffffffffff169052565b506080818101519083015260a0808201519083015260c0808201519083015260e08082015190830152610100808201519083015261012080820151908301526101408082015190830152610160808201519083015261018080820151908301526101a080820151908301526101c080820151908301526101e09081015160ff16910152565b610200810161401d8284614342565b6020808252825182820181905260009190848201906040850190845b8181101561449657614482838551614342565b92840192610200929092019160010161446f565b50909695505050505050565b600081518084526020808501945080840160005b8381101561419f57815173ffffffffffffffffffffffffffffffffffffffff16875295820195908201906001016144b6565b600081518084526020808501945080840160005b8381101561419f578151805173ffffffffffffffffffffffffffffffffffffffff9081168952908401511683880152604090960195908201906001016144fc565b600081518084526020808501945080840160005b8381101561419f57815187529582019590820190600101614551565b805173ffffffffffffffffffffffffffffffffffffffff168252600061026060208301516145b3602086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060408301516145c7604086018215159052565b5060608301516145db606086018215159052565b506080830151608085015260a083015160a085015260c083015160c085015260e083015160e0850152610100808401518186015250610120808401518282870152614628838701826144a2565b92505050610140808401518583038287015261464483826144e8565b925050506101608084015185830382870152614660838261453d565b92505050610180808401516146798287018260ff169052565b50506101a08381015173ffffffffffffffffffffffffffffffffffffffff908116918601919091526101c0808501511515908601526101e080850151909116908501526102008084015115159085015261022080840151908501526102409283015160ff1692909301919091525090565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561475d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc088860301845261474b85835161456d565b94509285019290850190600101614711565b5092979650505050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561475d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08886030184526147cb8583516141aa565b94509285019290850190600101614791565b60208152600061401a602083018461456d565b60006020828403121561480257600080fd5b815161433b816140d7565b60006020828403121561481f57600080fd5b5051919050565b600080600080600060a0868803121561483e57600080fd5b5050835160208501516040860151606087015160809097015192989197509594509092509050565b6000806040838503121561487957600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080600080608085870312156148cf57600080fd5b84516148da816140d7565b60208601516040870151606090970151919890975090945092505050565b8051801515811461490857600080fd5b919050565b60006020828403121561491f57600080fd5b61401a826148f8565b6000806040838503121561493b57600080fd5b8251614946816140d7565b602084015190925061ffff8116811461412a57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156149ce576149ce61498d565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614a0b57614a0b61498d565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614a4e57614a4e614a10565b500490565b80516fffffffffffffffffffffffffffffffff8116811461490857600080fd5b60008060408385031215614a8657600080fd5b614a8f83614a53565b9150614a9d60208401614a53565b90509250929050565b600080600060608486031215614abb57600080fd5b614ac484614a53565b9250614ad2602085016148f8565b9150604084015164ffffffffff81168114614aec57600080fd5b809150509250925092565b600060208284031215614b0957600080fd5b815160ff8116811461433b57600080fd5b600061ffff80841680614b2f57614b2f614a10565b92169190910492915050565b60008219821115614b4e57614b4e61498d565b50019056fea2646970667358221220d15108d0bec9cc6f3903875dd8412869a3da1b36661bdc780e2e2f0ae3136d2464736f6c634300080a003360a06040523480156200001157600080fd5b5060405162001b4538038062001b45833981016040819052620000349162000608565b6000805460ff19169055816001600160a01b0381166200006757604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cc91906200070a565b6001600160a01b031660805250805160005b818110156200014257620001398382815181106200010057620001006200072f565b6020026020010151600001518483815181106200012157620001216200072f565b6020026020010151602001516200014c60201b60201c565b600101620000de565b5050505062000822565b6001600160a01b03821615806200016a57506001600160a01b038116155b156200018957604051635919af9760e11b815260040160405180910390fd5b620001a8826001600160a01b0316620004ba60201b620006751760201c565b620001d65760405163df4c572d60e01b81526001600160a01b03831660048201526024015b60405180910390fd5b620001f5816001600160a01b0316620004ba60201b620006751760201c565b6200021f5760405163df4c572d60e01b81526001600160a01b0382166004820152602401620001cd565b806001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200027c575060408051601f3d908101601f19168201909252620002799181019062000745565b60015b6200029a576040516367a7cd4360e01b815260040160405180910390fd5b8060ff16600814620002bf576040516367a7cd4360e01b815260040160405180910390fd5b506000816001600160a01b031663d62ada116040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200031f575060408051601f3d908101601f191682019092526200031c918101906200076a565b60015b6200032a576200032d565b90505b6000836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200038c575060408051601f3d908101601f19168201909252620003899181019062000745565b60015b620003aa5760405163528ca31d60e01b815260040160405180910390fd5b60128160ff161115620003d05760405163528ca31d60e01b815260040160405180910390fd5b9050826001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa9250505080156200042f575060408051601f3d908101601f191682019092526200042c91810190620007a6565b60015b6200044d576040516367a7cd4360e01b815260040160405180910390fd5b8662000461576200046185858484620004c0565b5050505050620004748484848462000526565b826001600160a01b0316846001600160a01b03167fe263805b03657ab13064915d0723c5ce14981547e7cba5283f66b9e5d81f6e6e60405160405180910390a350505050565b3b151590565b60008313620004e2576040516356e05d2b60e01b815260040160405180910390fd5b836001600160501b0316816001600160501b0316108062000501575081155b15620005205760405163b1cf675560e01b815260040160405180910390fd5b50505050565b6001600160a01b03831682156200053e57600160a11b175b6200055460ff60a21b60a284901b1682620007fb565b6001600160a01b0390951660009081526001602052604090209490945550505050565b80516001600160a01b03811681146200058f57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715620005cf57620005cf62000594565b60405290565b604051601f8201601f191681016001600160401b038111828210171562000600576200060062000594565b604052919050565b60008060408084860312156200061d57600080fd5b620006288462000577565b602085810151919450906001600160401b03808211156200064857600080fd5b818701915087601f8301126200065d57600080fd5b81518181111562000672576200067262000594565b62000682848260051b01620005d5565b818152848101925060069190911b830184019089821115620006a357600080fd5b928401925b81841015620006fa5785848b031215620006c25760008081fd5b620006cc620005aa565b620006d78562000577565b8152620006e686860162000577565b8187015283529285019291840191620006a8565b8096505050505050509250929050565b6000602082840312156200071d57600080fd5b620007288262000577565b9392505050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156200075857600080fd5b815160ff811681146200072857600080fd5b6000602082840312156200077d57600080fd5b815180151581146200072857600080fd5b80516001600160501b03811681146200058f57600080fd5b600080600080600060a08688031215620007bf57600080fd5b620007ca866200078e565b9450602086015193506040860151925060608601519150620007ef608087016200078e565b90509295509295909350565b600082198211156200081d57634e487b7160e01b600052601160045260246000fd5b500190565b6080516112f262000853600039600081816101b201528181610280015281816103e201526104ff01526112f26000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c80638456cb591161008c578063b66102df11610066578063b66102df146101d4578063e8a97a3e146101e7578063f190e5fa146101fa578063f9a650301461023f57600080fd5b80638456cb591461016d5780639dcb511a14610175578063a50cf2c8146101ad57600080fd5b80635c975abb116100bd5780635c975abb1461011c5780635cecbd0e146101325780637afb01041461015a57600080fd5b80633f4ba83a146100e457806341976e09146100ee57806354fd4d5014610114575b600080fd5b6100ec610252565b005b6101016100fc366004610f28565b610340565b6040519081526020015b60405180910390f35b610101600281565b60005460ff16604051901515815260200161010b565b610145610140366004610f4a565b610352565b6040805192835260208301919091520161010b565b610101610168366004610f90565b610376565b6100ec6103b4565b610188610183366004610f28565b6104a0565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010b565b6101887f000000000000000000000000000000000000000000000000000000000000000081565b6101016101e2366004610fbc565b6104b4565b6100ec6101f5366004610ff8565b6104d1565b61020d610208366004610f28565b6105c3565b6040805173ffffffffffffffffffffffffffffffffffffffff909416845291151560208401529082015260600161010b565b61010161024d366004610f90565b61064d565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156102dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103009190611022565b610336576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033e61067b565b565b600061034b82610761565b5092915050565b60008061035f868661064d565b915061036b848461064d565b905094509492505050565b600080600061038484610761565b90925090508161039582600a611193565b61039f908761119f565b6103a991906111dc565b925050505b92915050565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561043e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104629190611022565b610498576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033e610819565b60006104ab826105c3565b50909392505050565b60006104c96104c3858561064d565b83610376565b949350505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561055b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057f9190611022565b6105b5576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105bf82826108d9565b5050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600160205260408120548190819080610624576040517f4bb8ad8200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b947402000000000000000000000000000000000000000086161515945060a286901c9350915050565b600080600061065b84610761565b909250905061066b81600a611193565b61039f838761119f565b3b151590565b60005460ff166106ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b600080600080610770856105c3565b8095508193508294505050506000806000808573ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156107cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f19190611231565b9450945050935093508461080b5761080b84848484610dd9565b829750505050505050915091565b60005460ff1615610886576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016106e3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586107373390565b73ffffffffffffffffffffffffffffffffffffffff82161580610910575073ffffffffffffffffffffffffffffffffffffffff8116155b15610947576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82163b6109ad576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016106e3565b73ffffffffffffffffffffffffffffffffffffffff81163b610a13576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024016106e3565b8073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610a98575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610a9591810190611281565b60015b610ace576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060ff16600814610b0b576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060008173ffffffffffffffffffffffffffffffffffffffff1663d62ada116040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610b93575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610b9091810190611022565b60015b610b9c57610b9f565b90505b60008373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610c26575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610c2391810190611281565b60015b610c5c576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60128160ff161115610c9a576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b90508273ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa925050508015610d21575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610d1e91810190611231565b60015b610d57576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b86610d6857610d6885858484610dd9565b5050505050610d7984848484610e74565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fe263805b03657ab13064915d0723c5ce14981547e7cba5283f66b9e5d81f6e6e60405160405180910390a350505050565b60008313610e13576040517f56e05d2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8369ffffffffffffffffffff168169ffffffffffffffffffff161080610e37575081155b15610e6e576040517fb1cf675500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b73ffffffffffffffffffffffffffffffffffffffff83168215610ea95774020000000000000000000000000000000000000000175b610ecf7503fc000000000000000000000000000000000000000060a284901b16826112a4565b73ffffffffffffffffffffffffffffffffffffffff90951660009081526001602052604090209490945550505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610f2357600080fd5b919050565b600060208284031215610f3a57600080fd5b610f4382610eff565b9392505050565b60008060008060808587031215610f6057600080fd5b84359350610f7060208601610eff565b925060408501359150610f8560608601610eff565b905092959194509250565b60008060408385031215610fa357600080fd5b82359150610fb360208401610eff565b90509250929050565b600080600060608486031215610fd157600080fd5b83359250610fe160208501610eff565b9150610fef60408501610eff565b90509250925092565b6000806040838503121561100b57600080fd5b61101483610eff565b9150610fb360208401610eff565b60006020828403121561103457600080fd5b81518015158114610f4357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b808511156110cc57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156110b2576110b2611044565b808516156110bf57918102915b93841c9390800290611078565b509250929050565b6000826110e3575060016103ae565b816110f0575060006103ae565b816001811461110657600281146111105761112c565b60019150506103ae565b60ff84111561112157611121611044565b50506001821b6103ae565b5060208310610133831016604e8410600b841016171561114f575081810a6103ae565b6111598383611073565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561118b5761118b611044565b029392505050565b6000610f4383836110d4565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156111d7576111d7611044565b500290565b600082611212577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b805169ffffffffffffffffffff81168114610f2357600080fd5b600080600080600060a0868803121561124957600080fd5b61125286611217565b945060208601519350604086015192506060860151915061127560808701611217565b90509295509295909350565b60006020828403121561129357600080fd5b815160ff81168114610f4357600080fd5b600082198211156112b7576112b7611044565b50019056fea2646970667358221220e7485a2cb5750973f539ca59d2211008b42bb92b6c49605a53f5d9c88c330fb164736f6c634300080a003360e06040523480156200001157600080fd5b5060405162002ced38038062002ced8339810160408190526200003491620004bb565b6000805460ff19169055806001600160a01b0381166200006757604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cc9190620004bb565b6001600160a01b039081166080526001805560408051808201909152600281526105a360f41b602082015291508216620001245760405162461bcd60e51b81526004016200011b9190620004ed565b60405180910390fd5b50806001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000164573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200018a9190620004bb565b6001600160a01b031660c052604051620001a490620004ad565b604051809103906000f080158015620001c1573d6000803e3d6000fd5b506001600160a01b031660a08190526040805163204a7f0760e21b81529051638129fc1c9160048082019260009290919082900301818387803b1580156200020857600080fd5b505af11580156200021d573d6000803e3d6000fd5b50505050620002316200028a60201b60201c565b50600454600380546001600160a01b039092166001600160a01b03199283161790556000805260026020527fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b8054909116905562000545565b6000620002a460a0516200038c60201b6200119b1760201c565b9050806001600160a01b0316638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620002e257600080fd5b505af1158015620002f7573d6000803e3d6000fd5b5050600480546001600160a01b03908116600090815260026020908152604090912080546001600160a01b03199081169388169384179091558354169091179091556200035492506005915083906200043b811b6200127d17901c565b506040516001600160a01b038216907f9f69b6c10f6810213e055b0ba6bc0a4e2603f73c221aad77ea35da819cda7dc390600090a250565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260601b60148201526e5af43d82803e903d91602b57fd5bf360881b60288201526037816000f09150506001600160a01b038116620004365760405162461bcd60e51b815260206004820152601660248201527f455243313136373a20637265617465206661696c65640000000000000000000060448201526064016200011b565b919050565b600062000452836001600160a01b0384166200045b565b90505b92915050565b6000818152600183016020526040812054620004a45750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000455565b50600062000455565b610e788062001e7583390190565b600060208284031215620004ce57600080fd5b81516001600160a01b0381168114620004e657600080fd5b9392505050565b600060208083528351808285015260005b818110156200051c57858101830151858201604001528201620004fe565b818111156200052f576000604083870101525b50601f01601f1916929092016040019392505050565b60805160a05160c0516118cf620005a66000396000818161026a015281816103680152610b7001526000818161020201526110650152600081816102c4015281816105b80152818161099601528181610a840152610e7401526118cf6000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806388f64c54116100cd578063b193976311610081578063d82ecc4811610066578063d82ecc4814610309578063e3ba9ace1461031c578063f23953ab1461032f57600080fd5b8063b1939763146102f9578063b60e85181461030157600080fd5b80638f7dcfa3116100b25780638f7dcfa31461029f578063a50cf2c8146102bf578063a904aab6146102e657600080fd5b806388f64c541461026557806389b77b3e1461028c57600080fd5b806354fd4d50116101245780635da33c5b116101095780635da33c5b146101fd578063765e0159146102245780638456cb591461025d57600080fd5b806354fd4d50146101d05780635c975abb146101e657600080fd5b806313d8c8401461015657806321d18456146101a05780632932472f146101b35780633f4ba83a146101c8575b600080fd5b6004546101769073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6101766101ae366004611651565b610337565b6101c66101c1366004611697565b61058a565b005b6101c6610968565b6101d8600181565b604051908152602001610197565b60005460ff165b6040519015158152602001610197565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101766102323660046116da565b73ffffffffffffffffffffffffffffffffffffffff9081166000908152600260205260409020541690565b6101c6610a56565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101c661029a3660046116da565b610b42565b6003546101769073ffffffffffffffffffffffffffffffffffffffff1681565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101c66102f4366004611697565b610e46565b6101d8610fb8565b6101d8611033565b6101ed6103173660046116da565b611044565b61017661032a3660046116f5565b611051565b6101c661105e565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa1580156103c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103e8919061170e565b6040518060400160405280600281526020017f43500000000000000000000000000000000000000000000000000000000000008152509061045f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b60405180910390fd5b506104686112a6565b6003805473ffffffffffffffffffffffffffffffffffffffff8082166000818152600260205260409081902080549093167fffffffffffffffffffffffff0000000000000000000000000000000000000000948516179094558154909216905590517fc75b5a710000000000000000000000000000000000000000000000000000000081523360048201526024810185905260448101849052819063c75b5a7190606401600060405180830381600087803b15801561052657600080fd5b505af115801561053a573d6000803e3d6000fd5b505060405133925073ffffffffffffffffffffffffffffffffffffffff841691507ff3ede7039176503a8ad1fe7cfaa29475a9dbe0cdcaf04ecf9a5c10570c47b10390600090a390505b92915050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610614573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610638919061170e565b61066e576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106766112a6565b60035473ffffffffffffffffffffffffffffffffffffffff838116911614156106fa576003805473ffffffffffffffffffffffffffffffffffffffff808216600090815260026020526040902080549091167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092558154169055610865565b73ffffffffffffffffffffffffffffffffffffffff838116600090815260026020908152604091829020548251808401909352600383527f4146330000000000000000000000000000000000000000000000000000000000918301919091529091848116911614610798576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b5060045473ffffffffffffffffffffffffffffffffffffffff838116911614156107fd57600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85161790555b73ffffffffffffffffffffffffffffffffffffffff828116600081815260026020526040808220805488861684529183208054929095167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790945591905281541690555b6040517fc75b5a7100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600060248301819052604483015283169063c75b5a7190606401600060405180830381600087803b1580156108dc57600080fd5b505af11580156108f0573d6000803e3d6000fd5b505050506109088260056112dd90919063ffffffff16565b508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f25e267469ba2ae82515be7b3d45df60bf8308343f0809e8cf7319058e2255ce660405160405180910390a3505050565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156109f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a16919061170e565b610a4c576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a546112ff565b565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015610ae0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b04919061170e565b610b3a576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a546113e0565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa158015610bcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf0919061170e565b6040518060400160405280600281526020017f435000000000000000000000000000000000000000000000000000000000000081525090610c5e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b50610c6a6005826114a0565b6040518060400160405280600381526020017f414634000000000000000000000000000000000000000000000000000000000081525090610cd8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b50438173ffffffffffffffffffffffffffffffffffffffff16633dc54b406040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4991906117a3565b14156040518060400160405280600381526020017f414631000000000000000000000000000000000000000000000000000000000081525090610db9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b506004805473ffffffffffffffffffffffffffffffffffffffff90811660009081526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081169487169485179091558454168317909355915190917fced6ab9afc868b3a088366f6631ae20752993b5cce5d5f0534ea5a59fcc57d5691a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610ed0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef4919061170e565b610f2a576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f19a1603900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301528416906319a1603990604401600060405180830381600087803b158015610f9b57600080fd5b505af1158015610faf573d6000803e3d6000fd5b50505050505050565b600354600090819073ffffffffffffffffffffffffffffffffffffffff165b73ffffffffffffffffffffffffffffffffffffffff81161561102d5773ffffffffffffffffffffffffffffffffffffffff9081166000908152600260205260409020541681611025816117eb565b925050610fd7565b50919050565b600061103f60056114cf565b905090565b60006105846005836114a0565b60006105846005836114d9565b60006110897f000000000000000000000000000000000000000000000000000000000000000061119b565b90508073ffffffffffffffffffffffffffffffffffffffff16638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156110d357600080fd5b505af11580156110e7573d6000803e3d6000fd5b50506004805473ffffffffffffffffffffffffffffffffffffffff908116600090815260026020526040902080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811692871692831790915582541617905550611156905060058261127d565b5060405173ffffffffffffffffffffffffffffffffffffffff8216907f9f69b6c10f6810213e055b0ba6bc0a4e2603f73c221aad77ea35da819cda7dc390600090a250565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260601b60148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f091505073ffffffffffffffffffffffffffffffffffffffff8116611278576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f455243313136373a20637265617465206661696c6564000000000000000000006044820152606401610456565b919050565b600061129f8373ffffffffffffffffffffffffffffffffffffffff84166114e5565b9392505050565b60035473ffffffffffffffffffffffffffffffffffffffff90811660009081526002602052604090205416610a5457610a5461105e565b600061129f8373ffffffffffffffffffffffffffffffffffffffff8416611534565b60005460ff1661136b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610456565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff161561144d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610456565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586113b63390565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600183016020526040812054151561129f565b6000610584825490565b600061129f8383611627565b600081815260018301602052604081205461152c57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610584565b506000610584565b6000818152600183016020526040812054801561161d576000611558600183611824565b855490915060009061156c90600190611824565b90508181146115d157600086600001828154811061158c5761158c61183b565b90600052602060002001549050808760000184815481106115af576115af61183b565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806115e2576115e261186a565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610584565b6000915050610584565b600082600001828154811061163e5761163e61183b565b9060005260206000200154905092915050565b6000806040838503121561166457600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff8116811461127857600080fd5b6000806000606084860312156116ac57600080fd5b6116b584611673565b92506116c360208501611673565b91506116d160408501611673565b90509250925092565b6000602082840312156116ec57600080fd5b61129f82611673565b60006020828403121561170757600080fd5b5035919050565b60006020828403121561172057600080fd5b8151801515811461129f57600080fd5b600060208083528351808285015260005b8181101561175d57858101830151858201604001528201611741565b8181111561176f576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b6000602082840312156117b557600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561181d5761181d6117bc565b5060010190565b600082821015611836576118366117bc565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220f1e9c81b8c3af2491c907ee66cf24e1bb76111b821db02df8f98dbb48b5ab5fa64736f6c634300080a0033608060405234801561001057600080fd5b50610e58806100206000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c806354fd4d5011610081578063c45a01551161005b578063c45a0155146101a4578063c75b5a71146101ca578063d1660f99146101dd57600080fd5b806354fd4d501461014f5780638129fc1c14610157578063c12c21c01461015f57600080fd5b80631afbb7a4116100b25780631afbb7a41461011d5780631cff79cd146101265780633dc54b401461014657600080fd5b806316128211146100d957806317d11a15146100ee57806319a160391461010a575b600080fd5b6100ec6100e7366004610b42565b6101f0565b005b6100f760035481565b6040519081526020015b60405180910390f35b6100ec610118366004610b8d565b61024c565b6100f760025481565b610139610134366004610bef565b6102c9565b6040516101019190610d49565b6100f760045481565b6100f7600181565b6100ec610344565b60015461017f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610101565b60005461017f9062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b6100ec6101d8366004610d5c565b610494565b6100ec6101eb366004610d8f565b61053d565b60015473ffffffffffffffffffffffffffffffffffffffff163314610241576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600291909155600355565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1633146102a3576040517fb126b84800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102c573ffffffffffffffffffffffffffffffffffffffff83168260006105b4565b5050565b60015460609073ffffffffffffffffffffffffffffffffffffffff16331461031d576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033d73ffffffffffffffffffffffffffffffffffffffff8416836107b4565b9392505050565b600054610100900460ff1661035f5760005460ff1615610363565b303b155b6103f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600054610100900460ff1615801561043357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000166101011790555b600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16336201000002179055801561049157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b50565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1633146104eb576040517fb126b84800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff949094169390931790925560025560035543600455565b60015473ffffffffffffffffffffffffffffffffffffffff16331461058e576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105af73ffffffffffffffffffffffffffffffffffffffff841683836107f6565b505050565b80158061065457506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015284169063dd62ed3e90604401602060405180830381865afa15801561062e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106529190610dcb565b155b6106e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e63650000000000000000000060648201526084016103eb565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526105af9084907f095ea7b300000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261084c565b606061033d83836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250610958565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526105af9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401610732565b60006108ae826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166109589092919063ffffffff16565b8051909150156105af57808060200190518101906108cc9190610de4565b6105af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016103eb565b6060610967848460008561096f565b949350505050565b606082471015610a01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016103eb565b843b610a69576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016103eb565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051610a929190610e06565b60006040518083038185875af1925050503d8060008114610acf576040519150601f19603f3d011682016040523d82523d6000602084013e610ad4565b606091505b5091509150610ae4828286610aef565b979650505050505050565b60608315610afe57508161033d565b825115610b0e5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103eb9190610d49565b60008060408385031215610b5557600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff81168114610b8857600080fd5b919050565b60008060408385031215610ba057600080fd5b610ba983610b64565b9150610bb760208401610b64565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215610c0257600080fd5b610c0b83610b64565b9150602083013567ffffffffffffffff80821115610c2857600080fd5b818501915085601f830112610c3c57600080fd5b813581811115610c4e57610c4e610bc0565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715610c9457610c94610bc0565b81604052828152886020848701011115610cad57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b83811015610cea578181015183820152602001610cd2565b83811115610cf9576000848401525b50505050565b60008151808452610d17816020860160208601610ccf565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061033d6020830184610cff565b600080600060608486031215610d7157600080fd5b610d7a84610b64565b95602085013595506040909401359392505050565b600080600060608486031215610da457600080fd5b610dad84610b64565b9250610dbb60208501610b64565b9150604084013590509250925092565b600060208284031215610ddd57600080fd5b5051919050565b600060208284031215610df657600080fd5b8151801515811461033d57600080fd5b60008251610e18818460208701610ccf565b919091019291505056fea2646970667358221220448e7046078cd668c09328d857e534e2aab6cdc0e691d3d4f2c8baae8e084b1364736f6c634300080a003360c06040523480156200001157600080fd5b506040516200162738038062001627833981016040819052620000349162000177565b60408051808201909152600281526105a360f41b60208201526001600160a01b038216620000805760405162461bcd60e51b8152600401620000779190620001a9565b60405180910390fd5b50806001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e6919062000177565b6001600160a01b03166080816001600160a01b031681525050806001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200013e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000164919062000177565b6001600160a01b031660a0525062000201565b6000602082840312156200018a57600080fd5b81516001600160a01b0381168114620001a257600080fd5b9392505050565b600060208083528351808285015260005b81811015620001d857858101830151858201604001528201620001ba565b81811115620001eb576000604083870101525b50601f01601f1916929092016040019392505050565b60805160a0516113c2620002656000396000818161021f0152818161036401526106d501526000818160af0152818161012a015281816104420152818161056e015281816107b301528181610aa601528181610b890152610c6701526113c26000f3fe60806040526004361061005e5760003560e01c80635869dba8116100435780635869dba814610199578063deecfbc9146101bb578063e79a4089146101ce57600080fd5b80634f0e0ef31461011857806354fd4d501461017657600080fd5b366101135760408051808201909152600381527f574732000000000000000000000000000000000000000000000000000000000060208201523373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b60405180910390fd5b50005b600080fd5b34801561012457600080fd5b5061014c7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561018257600080fd5b5061018b600181565b60405190815260200161016d565b3480156101a557600080fd5b506101b96101b4366004611263565b6101ee565b005b6101b96101c936600461128f565b61031d565b3480156101da57600080fd5b506101b96101e93660046112e1565b61068e565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201819052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa15801561027b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061029f9190611318565b6040518060400160405280600281526020017f43500000000000000000000000000000000000000000000000000000000000008152509061030d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b506103188383610a77565b505050565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808516600483015284917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa1580156103ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103d19190611318565b6040518060400160405280600281526020017f52500000000000000000000000000000000000000000000000000000000000008152509061043f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e6919061133a565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600381526020017f57473100000000000000000000000000000000000000000000000000000000008152509061056b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156105d457600080fd5b505af11580156105e8573d6000803e3d6000fd5b50505050506105f78434610b3c565b6040517f9aa5d46200000000000000000000000000000000000000000000000000000000815234600482015273ffffffffffffffffffffffffffffffffffffffff848116602483015261ffff84166044830152851690639aa5d46290606401600060405180830381600087803b15801561067057600080fd5b505af1158015610684573d6000803e3d6000fd5b5050505050505050565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808516600483015284917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa15801561071e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107429190611318565b6040518060400160405280600281526020017f5250000000000000000000000000000000000000000000000000000000000000815250906107b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610833573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610857919061133a565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600381526020017f5747310000000000000000000000000000000000000000000000000000000000815250906108dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b506109703330858773ffffffffffffffffffffffffffffffffffffffff166336dda7d56040518163ffffffff1660e01b8152600401602060405180830381865afa15801561092e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610952919061133a565b73ffffffffffffffffffffffffffffffffffffffff16929190610cd4565b6040517f05fe138b0000000000000000000000000000000000000000000000000000000081526004810184905230602482015260009073ffffffffffffffffffffffffffffffffffffffff8616906305fe138b906044016020604051808303816000875af11580156109e6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0a9190611357565b9050610a168382610a77565b8273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f6de63bb986f2779478e384365c03cc2e62f06b453856acca87d5a519ce02664960405160405180910390a35050505050565b6040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632e1a7d4d90602401600060405180830381600087803b158015610aff57600080fd5b505af1158015610b13573d6000803e3d6000fd5b50610b389250505073ffffffffffffffffffffffffffffffffffffffff831682610d6f565b5050565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015282917f00000000000000000000000000000000000000000000000000000000000000009091169063dd62ed3e90604401602060405180830381865afa158015610bd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf69190611357565b1015610b38576040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303816000875af1158015610cb0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103189190611318565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052610d69908590610ec9565b50505050565b80471015610dd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610107565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114610e33576040519150601f19603f3d011682016040523d82523d6000602084013e610e38565b606091505b5050905080610318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610107565b6000610f2b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16610fd59092919063ffffffff16565b8051909150156103185780806020019051810190610f499190611318565b610318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610107565b6060610fe48484600085610fee565b90505b9392505050565b606082471015611080576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610107565b843b6110e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610107565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516111119190611370565b60006040518083038185875af1925050503d806000811461114e576040519150601f19603f3d011682016040523d82523d6000602084013e611153565b606091505b509150915061116382828661116e565b979650505050505050565b6060831561117d575081610fe7565b82511561118d5782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b60005b838110156111dc5781810151838201526020016111c4565b83811115610d695750506000910152565b602081526000825180602084015261120c8160408501602087016111c1565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461126057600080fd5b50565b6000806040838503121561127657600080fd5b82356112818161123e565b946020939093013593505050565b6000806000606084860312156112a457600080fd5b83356112af8161123e565b925060208401356112bf8161123e565b9150604084013561ffff811681146112d657600080fd5b809150509250925092565b6000806000606084860312156112f657600080fd5b83356113018161123e565b92506020840135915060408401356112d68161123e565b60006020828403121561132a57600080fd5b81518015158114610fe757600080fd5b60006020828403121561134c57600080fd5b8151610fe78161123e565b60006020828403121561136957600080fd5b5051919050565b600082516113828184602087016111c1565b919091019291505056fea264697066735822122017fd7fc76e4a1efcf24b78a3417fad7ab9576f0a23aa756ddb211c5e2227aa9564736f6c634300080a003360806040523480156200001157600080fd5b5060405162002b8038038062002b80833981016040819052620000349162000122565b6001600160a01b0381166200008f5760405162461bcd60e51b815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640160405180910390fd5b6001600160a01b03811660008181526001602052604080822080546001600160601b0319166b204fce5e3e2502611000000090811790915590517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91620000f99190815260200190565b60405180910390a350600680546001600160a81b031916336101000260ff191617905562000154565b6000602082840312156200013557600080fd5b81516001600160a01b03811681146200014d57600080fd5b9392505050565b612a1c80620001646000396000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c806370a08231116100f9578063b4b5ea5711610097578063dd62ed3e11610071578063dd62ed3e14610503578063e7a324dc14610555578063f1127ed81461057c578063f2fde38b146105ee57600080fd5b8063b4b5ea57146104ca578063c3cda520146104dd578063d505accf146104f057600080fd5b806395d89b41116100d357806395d89b411461045b5780639742ca4614610497578063a9059cbb146104aa578063b0660c3d146104bd57600080fd5b806370a08231146103c7578063782d6fe11461040b5780637ecebe001461043b57600080fd5b806330adf81f11610166578063481c6a7511610140578063481c6a751461031e578063587cde1e146103435780635c19a95c146103795780636fcfff451461038c57600080fd5b806330adf81f14610298578063313ce567146102bf578063349dc329146102d957600080fd5b806320606b701161019757806320606b70146102545780632185810b1461027b57806323b872dd1461028557600080fd5b806306fdde03146101be578063095ea7b31461021057806318160ddd14610233575b600080fd5b6101fa6040518060400160405280600781526020017f47656172626f780000000000000000000000000000000000000000000000000081525081565b60405161020791906124a3565b60405180910390f35b61022361021e36600461253f565b610601565b6040519015158152602001610207565b6102466b204fce5e3e2502611000000081565b604051908152602001610207565b6102467f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b61028361070d565b005b610223610293366004612569565b6107ee565b6102467f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b6102c7601281565b60405160ff9091168152602001610207565b6007546102f99073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610207565b6006546102f990610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6102f96103513660046125a5565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6102836103873660046125a5565b61098a565b6103b261039a3660046125a5565b60046020526000908152604090205463ffffffff1681565b60405163ffffffff9091168152602001610207565b6102466103d53660046125a5565b73ffffffffffffffffffffffffffffffffffffffff166000908152600160205260409020546bffffffffffffffffffffffff1690565b61041e61041936600461253f565b610997565b6040516bffffffffffffffffffffffff9091168152602001610207565b6102466104493660046125a5565b60056020526000908152604090205481565b6101fa6040518060400160405280600481526020017f474541520000000000000000000000000000000000000000000000000000000081525081565b6102836104a53660046125a5565b610cae565b6102236104b836600461253f565b610e20565b6006546102239060ff1681565b61041e6104d83660046125a5565b610e5c565b6102836104eb3660046125d1565b610efa565b6102836104fe366004612629565b611310565b610246610511366004612693565b73ffffffffffffffffffffffffffffffffffffffff9182166000908152602081815260408083209390941682529190915220546bffffffffffffffffffffffff1690565b6102467fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b6105c561058a3660046126c6565b600360209081526000928352604080842090915290825290205463ffffffff81169064010000000090046bffffffffffffffffffffffff1682565b6040805163ffffffff90931683526bffffffffffffffffffffffff909116602083015201610207565b6102836105fc3660046125a5565b61187a565b6000807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83141561063f57506bffffffffffffffffffffffff610664565b6106618360405180606001604052806025815260200161285260259139611a15565b90505b3360008181526020818152604080832073ffffffffffffffffffffffffffffffffffffffff89168085529083529281902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff871690811790915590519081529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a360019150505b92915050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314610798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e616765720060448201526064015b60405180910390fd5b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f795b0e16c8da9807b0a215f3749bd6dbcc49fc0472183f4e446abb7dcbd9d00790600090a1565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081815260408083203380855290835281842054825160608101909352602580845291936bffffffffffffffffffffffff909116928592610856928892919061285290830139611a15565b90508673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156108a257506bffffffffffffffffffffffff82811614155b156109725760006108cc83836040518060600160405280603d8152602001612974603d9139611a67565b73ffffffffffffffffffffffffffffffffffffffff898116600081815260208181526040808320948a168084529482529182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff87169081179091559151918252939450919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505b61097d878783611ad5565b5060019695505050505050565b6109943382611e9c565b50565b6000438210610a28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f476561723a3a6765745072696f72566f7465733a206e6f74207965742064657460448201527f65726d696e656400000000000000000000000000000000000000000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff831660009081526004602052604090205463ffffffff1680610a63576000915050610707565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604081208491610a95600185612735565b63ffffffff90811682526020820192909252604001600020541611610b1b5773ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812090610ae5600184612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff1691506107079050565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020908152604080832083805290915290205463ffffffff16831015610b63576000915050610707565b600080610b71600184612735565b90505b8163ffffffff168163ffffffff161115610c565760006002610b968484612735565b610ba0919061275a565b610baa9083612735565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260036020908152604080832063ffffffff8581168552908352928190208151808301909252549283168082526401000000009093046bffffffffffffffffffffffff1691810191909152919250871415610c2a576020015194506107079350505050565b805163ffffffff16871115610c4157819350610c4f565b610c4c600183612735565b92505b5050610b74565b5073ffffffffffffffffffffffffffffffffffffffff8516600090815260036020908152604080832063ffffffff909416835292905220546bffffffffffffffffffffffff6401000000009091041691505092915050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314610d34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e6167657200604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff8116610db1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640161078f565b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f2f834d1c8c4b956018fff5faca4d99868ae635487424d9c265c257ccbc698c6a90600090a250565b600080610e45836040518060600160405280602681526020016128a760269139611a15565b9050610e52338583611ad5565b5060019392505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526004602052604081205463ffffffff1680610e94576000610ef3565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812090610ec5600184612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b9392505050565b604080518082018252600781527f47656172626f780000000000000000000000000000000000000000000000000060209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f028ef9f797075f74ac647c65fde04fb0f128c2d59fd40f45732269917642fd4681840152466060820152306080808301919091528351808303909101815260a0820184528051908301207fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60c083015273ffffffffffffffffffffffffffffffffffffffff8a1660e08301526101008201899052610120808301899052845180840390910181526101408301909452835193909201929092207f19010000000000000000000000000000000000000000000000000000000000006101608401526101628301829052610182830181905290916000906101a201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa1580156110d8573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166111a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f476561723a3a64656c656761746542795369673a20696e76616c69642073696760448201527f6e61747572650000000000000000000000000000000000000000000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff811660009081526005602052604081208054916111d7836127a4565b919050558914611269576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f476561723a3a64656c656761746542795369673a20696e76616c6964206e6f6e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161078f565b874211156112f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f476561723a3a64656c656761746542795369673a207369676e6174757265206560448201527f7870697265640000000000000000000000000000000000000000000000000000606482015260840161078f565b611303818b611e9c565b505050505b505050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86141561134d57506bffffffffffffffffffffffff611372565b61136f8660405180606001604052806024815260200161291c60249139611a15565b90505b604080518082018252600781527f47656172626f780000000000000000000000000000000000000000000000000060209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f028ef9f797075f74ac647c65fde04fb0f128c2d59fd40f45732269917642fd4681840152466060820152306080808301919091528351808303909101815260a0909101835280519082012073ffffffffffffffffffffffffffffffffffffffff8b166000908152600590925291812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918c918c918c919086611472836127a4565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810188905260e001604051602081830303815290604052805190602001209050600082826040516020016115199291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff8b169284019290925260608301899052608083018890529092509060019060a0016020604051602081039080840390855afa1580156115a2573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661164a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a7065726d69743a20696e76616c6964207369676e617475726500604482015260640161078f565b8b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146116df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f476561723a3a7065726d69743a20756e617574686f72697a6564000000000000604482015260640161078f565b88421115611749576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a7065726d69743a207369676e6174757265206578706972656400604482015260640161078f565b846000808e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508a73ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258760405161186491906bffffffffffffffffffffffff91909116815260200190565b60405180910390a3505050505050505050505050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314611900576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e6167657200604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff811661197d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640161078f565b60065460405173ffffffffffffffffffffffffffffffffffffffff80841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36006805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b6000816c010000000000000000000000008410611a5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b509192915050565b6000836bffffffffffffffffffffffff16836bffffffffffffffffffffffff1611158290611ac2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b50611acd83856127dd565b949350505050565b60065460ff1680611b025750600654610100900473ffffffffffffffffffffffffffffffffffffffff1633145b80611b24575060075473ffffffffffffffffffffffffffffffffffffffff1633145b611b8a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f476561723a3a7472616e73666572732061726520666f7262696464656e000000604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff8316611c2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603c60248201527f476561723a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260448201527f616e736665722066726f6d20746865207a65726f206164647265737300000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff8216611cd0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f476561723a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260448201527f616e7366657220746f20746865207a65726f2061646472657373000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260016020908152604091829020548251606081019093526036808452611d2d936bffffffffffffffffffffffff90921692859291906129b190830139611a67565b73ffffffffffffffffffffffffffffffffffffffff848116600090815260016020908152604080832080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff968716179055928616825290829020548251606081019093526030808452611dbf949190911692859290919061287790830139611f50565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260409182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff968716179055905193851684529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a373ffffffffffffffffffffffffffffffffffffffff808416600090815260026020526040808220548584168352912054611e9792918216911683611fc1565b505050565b73ffffffffffffffffffffffffffffffffffffffff808316600081815260026020818152604080842080546001845282862054949093528787167fffffffffffffffffffffffff000000000000000000000000000000000000000084168117909155905191909516946bffffffffffffffffffffffff9092169391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4611f4a828483611fc1565b50505050565b600080611f5d8486612802565b9050846bffffffffffffffffffffffff16816bffffffffffffffffffffffff1610158390611fb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b50949350505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561200b57506000816bffffffffffffffffffffffff16115b15611e975773ffffffffffffffffffffffffffffffffffffffff8316156120fd5773ffffffffffffffffffffffffffffffffffffffff831660009081526004602052604081205463ffffffff1690816120655760006120c4565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812090612096600185612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b905060006120eb82856040518060600160405280602881526020016128cd60289139611a67565b90506120f9868484846121e2565b5050505b73ffffffffffffffffffffffffffffffffffffffff821615611e975773ffffffffffffffffffffffffffffffffffffffff821660009081526004602052604081205463ffffffff1690816121525760006121b1565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812090612183600185612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b905060006121d882856040518060600160405280602781526020016128f560279139611f50565b9050611308858484845b60006122064360405180606001604052806034815260200161294060349139612465565b905060008463ffffffff1611801561226d575073ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812063ffffffff831691612251600188612735565b63ffffffff908116825260208201929092526040016000205416145b156123035773ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812083916122a4600188612735565b63ffffffff168152602081019190915260400160002080546bffffffffffffffffffffffff92909216640100000000027fffffffffffffffffffffffffffffffff000000000000000000000000ffffffff9092169190911790556123fe565b60408051808201825263ffffffff80841682526bffffffffffffffffffffffff808616602080850191825273ffffffffffffffffffffffffffffffffffffffff8b166000908152600382528681208b8616825290915294909420925183549451909116640100000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009094169116179190911790556123a5846001612832565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260046020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff929092169190911790555b604080516bffffffffffffffffffffffff80861682528416602082015273ffffffffffffffffffffffffffffffffffffffff8716917fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724910160405180910390a25050505050565b6000816401000000008410611a5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91905b600060208083528351808285015260005b818110156124d0578581018301518582016040015282016124b4565b818111156124e2576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461253a57600080fd5b919050565b6000806040838503121561255257600080fd5b61255b83612516565b946020939093013593505050565b60008060006060848603121561257e57600080fd5b61258784612516565b925061259560208501612516565b9150604084013590509250925092565b6000602082840312156125b757600080fd5b610ef382612516565b803560ff8116811461253a57600080fd5b60008060008060008060c087890312156125ea57600080fd5b6125f387612516565b9550602087013594506040870135935061260f606088016125c0565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a03121561264457600080fd5b61264d88612516565b965061265b60208901612516565b95506040880135945060608801359350612677608089016125c0565b925060a0880135915060c0880135905092959891949750929550565b600080604083850312156126a657600080fd5b6126af83612516565b91506126bd60208401612516565b90509250929050565b600080604083850312156126d957600080fd5b6126e283612516565b9150602083013563ffffffff811681146126fb57600080fd5b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600063ffffffff8381169083168181101561275257612752612706565b039392505050565b600063ffffffff80841680612798577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156127d6576127d6612706565b5060010190565b60006bffffffffffffffffffffffff8381169083168181101561275257612752612706565b60006bffffffffffffffffffffffff80831681851680830382111561282957612829612706565b01949350505050565b600063ffffffff8083168185168083038211156128295761282961270656fe476561723a3a617070726f76653a20616d6f756e7420657863656564732039362062697473476561723a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e74206f766572666c6f7773476561723a3a7472616e736665723a20616d6f756e7420657863656564732039362062697473476561723a3a5f6d6f7665566f7465733a20766f746520616d6f756e7420756e646572666c6f7773476561723a3a5f6d6f7665566f7465733a20766f746520616d6f756e74206f766572666c6f7773476561723a3a7065726d69743a20616d6f756e7420657863656564732039362062697473476561723a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d62657220657863656564732033322062697473476561723a3a7472616e7366657246726f6d3a207472616e7366657220616d6f756e742065786365656473207370656e64657220616c6c6f77616e6365476561723a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e7420657863656564732062616c616e6365a26469706673582212201b84fd7789a35c022f692420863210a30e82d2405659f5a28275d433fa53467f64736f6c634300080a003360806040526016805460ff1916905534801561001a57600080fd5b506040516110a73803806110a7833981016040819052610039916100b6565b600080546001600160a01b038085166001600160a01b0319928316179092556003805492841692909116919091179055610080600a6b033b2e3c9fd0803ce80000006100e9565b60075550506b033b2e3c9fd0803ce800000060155561010b565b80516001600160a01b03811681146100b157600080fd5b919050565b600080604083850312156100c957600080fd5b6100d28361009a565b91506100e06020840161009a565b90509250929050565b60008261010657634e487b7160e01b600052601260045260246000fd5b500490565b610f8d8061011a6000396000f3fe608060405234801561001057600080fd5b50600436106102e95760003560e01c806367c99d5811610191578063c5f956af116100e3578063dbcb313b11610097578063f11a648711610071578063f11a648714610320578063f3fdb15a146105f1578063fe14112d1461061157600080fd5b8063dbcb313b146105d6578063e941fa78146105df578063ef8d9603146105e857600080fd5b8063cb3905e1116100c8578063cb3905e1146105c4578063cf33d95514610320578063d0efe753146105cd57600080fd5b8063c5f956af14610588578063ca9505e4146105a857600080fd5b80639aa5d46211610145578063b6ac642a1161011f578063b6ac642a14610567578063bb04b19314610567578063bf28068b1461057557600080fd5b80639aa5d46214610544578063a4e8273e14610557578063b3554a0a1461055e57600080fd5b8063788c6bfe11610176578063788c6bfe146104ef5780638456cb591461050157806396df5dc01461053157600080fd5b806367c99d58146104de57806374375359146104e757600080fd5b806336dda7d51161024a5780634d778ad1116101fe57806354fd4d50116101d857806354fd4d50146104c05780635c975abb146104c8578063609ae317146104d557600080fd5b80634d778ad114610491578063532fe502146104a45780635427c938146104ad57600080fd5b80633f4ba83a1161022f5780633f4ba83a1461045257806345d31f9d1461047f5780634c19386c1461048857600080fd5b806336dda7d51461040f5780633e163df01461042f57600080fd5b80632495a599116102a157806329f3d3b61161028657806329f3d3b6146103b35780632a3354c9146103bc5780632e97ca21146103dc57600080fd5b80632495a599146103735780632954018c1461039357600080fd5b8063078c4781116102d2578063078c4781146103205780630fce70fb146103335780631e16e4fc1461033b57600080fd5b8063030dbb04146102ee57806305fe138b1461030a575b600080fd5b6102f760105481565b6040519081526020015b60405180910390f35b6102f7610318366004610ce8565b600092915050565b61033161032e366004610d14565b50565b005b6015546102f7565b61034e610349366004610d2f565b610618565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610301565b60035461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b60005461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6102f760095481565b600a5461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103ff6103ea366004610d14565b60066020526000908152604090205460ff1681565b6040519015158152602001610301565b60055461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103ff61043d366004610d14565b60146020526000908152604090205460ff1681565b610331601680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b6102f760075481565b6102f760015481565b6102f761049f366004610d2f565b61064f565b6102f760115481565b6102f76104bb366004610d2f565b61066d565b6102f7600181565b6016546103ff9060ff1681565b6102f760085481565b6102f7600d5481565b6102f7610685565b6b033b2e3c9fd0803ce80000006102f7565b610331601680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b61033161053f366004610d2f565b601555565b610331610552366004610d48565b505050565b60016102f7565b6102f7600e5481565b61033161032e366004610d2f565b610331610583366004610ce8565b61071d565b60135461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103316105b6366004610d7d565b600b92909255600c55600d55565b6102f7600c5481565b6102f7600b5481565b6102f760155481565b6102f7600f5481565b6102f760025481565b60125461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b60006102f7565b6004818154811061062857600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6000610667826b033b2e3c9fd0803ce800000061077a565b92915050565b6000610667826b033b2e3c9fd0803ce80000006108e9565b6003546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156106f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107189190610da9565b905090565b6009829055600a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691909117909155600354610776911682846109fe565b5050565b60408051808201909152600281527f4d330000000000000000000000000000000000000000000000000000000000006020820152600090826107f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b60405180910390fd5b506000610800600284610e72565b90506b033b2e3c9fd0803ce8000000610839827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610ead565b6108439190610e72565b8411156040518060400160405280600281526020017f4d31000000000000000000000000000000000000000000000000000000000000815250906108b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b5082816108cd6b033b2e3c9fd0803ce800000087610ec4565b6108d79190610f01565b6108e19190610e72565b949350505050565b60008215806108f6575081155b1561090357506000610667565b8161091b60026b033b2e3c9fd0803ce8000000610e72565b610945907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610ead565b61094f9190610e72565b8311156040518060400160405280600281526020017f4d31000000000000000000000000000000000000000000000000000000000000815250906109c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b506b033b2e3c9fd0803ce80000006109d9600282610e72565b6109e38486610ec4565b6109ed9190610f01565b6109f79190610e72565b9392505050565b6040805173ffffffffffffffffffffffffffffffffffffffff848116602483015260448083018590528351808403909101815260649092018352602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65649084015261055292869291600091610ac9918516908490610b73565b8051909150156105525780806020019051810190610ae79190610f19565b610552576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016107e9565b60606108e1848460008585843b610be6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107e9565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051610c0f9190610f3b565b60006040518083038185875af1925050503d8060008114610c4c576040519150601f19603f3d011682016040523d82523d6000602084013e610c51565b606091505b5091509150610c61828286610c6c565b979650505050505050565b60608315610c7b5750816109f7565b825115610c8b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ce357600080fd5b919050565b60008060408385031215610cfb57600080fd5b82359150610d0b60208401610cbf565b90509250929050565b600060208284031215610d2657600080fd5b6109f782610cbf565b600060208284031215610d4157600080fd5b5035919050565b600080600060608486031215610d5d57600080fd5b83359250610d6d60208501610cbf565b9150604084013590509250925092565b600080600060608486031215610d9257600080fd5b505081359360208301359350604090920135919050565b600060208284031215610dbb57600080fd5b5051919050565b60005b83811015610ddd578181015183820152602001610dc5565b83811115610dec576000848401525b50505050565b6020815260008251806020840152610e11816040850160208701610dc2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082610ea8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600082821015610ebf57610ebf610e43565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610efc57610efc610e43565b500290565b60008219821115610f1457610f14610e43565b500190565b600060208284031215610f2b57600080fd5b815180151581146109f757600080fd5b60008251610f4d818460208701610dc2565b919091019291505056fea26469706673582212204edb887d94928b3914f60ab48df0182da9eb30ddbb7021b164cc728b60a655d564736f6c634300080a0033"; - -type BaseCreditTestSuiteConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: BaseCreditTestSuiteConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class BaseCreditTestSuite__factory extends ContractFactory { - constructor(...args: BaseCreditTestSuiteConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - _testTokenSuite: string, - _underlying: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - _testTokenSuite, - _underlying, - overrides || {} - ) as Promise; - } - override getDeployTransaction( - _testTokenSuite: string, - _underlying: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction( - _testTokenSuite, - _underlying, - overrides || {} - ); - } - override attach(address: string): BaseCreditTestSuite { - return super.attach(address) as BaseCreditTestSuite; - } - override connect(signer: Signer): BaseCreditTestSuite__factory { - return super.connect(signer) as BaseCreditTestSuite__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): BaseCreditTestSuiteInterface { - return new utils.Interface(_abi) as BaseCreditTestSuiteInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): BaseCreditTestSuite { - return new Contract(address, _abi, signerOrProvider) as BaseCreditTestSuite; - } -} diff --git a/src/types/factories/contracts/test/suites/CreditFacadeHelper__factory.ts b/src/types/factories/contracts/test/suites/CreditFacadeHelper__factory.ts deleted file mode 100644 index 11647ffe..00000000 --- a/src/types/factories/contracts/test/suites/CreditFacadeHelper__factory.ts +++ /dev/null @@ -1,421 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - CreditFacadeHelper, - CreditFacadeHelperInterface, -} from "../../../../contracts/test/suites/CreditFacadeHelper"; - -const _abi = [ - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "", - type: "address", - }, - ], - name: "log_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "log_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - name: "log_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "int256", - name: "", - type: "int256", - }, - ], - name: "log_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "address", - name: "val", - type: "address", - }, - ], - name: "log_named_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes", - name: "val", - type: "bytes", - }, - ], - name: "log_named_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes32", - name: "val", - type: "bytes32", - }, - ], - name: "log_named_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - ], - name: "log_named_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "string", - name: "val", - type: "string", - }, - ], - name: "log_named_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - ], - name: "log_named_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "log_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "logs", - type: "event", - }, - { - inputs: [], - name: "IS_TEST", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "cft", - outputs: [ - { - internalType: "contract CreditFacadeTestSuite", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditConfigurator", - outputs: [ - { - internalType: "contract CreditConfigurator", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditFacade", - outputs: [ - { - internalType: "contract CreditFacade", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditManager", - outputs: [ - { - internalType: "contract ICreditManagerV2", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "failed", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "underlying", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x60806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d000117905534801561003957600080fd5b506103b3806100496000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063c12c21c01161005b578063c12c21c014610104578063df51443314610124578063f9aa028a14610144578063fa7626d41461016457600080fd5b80632f7a1881146100825780636f307dc3146100cc578063ba414fa6146100ec575b600080fd5b6002546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6005546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b6100f4610171565b60405190151581526020016100c3565b6001546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b6004546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b6003546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b6000546100f49060ff1681565b60008054610100900460ff16156101915750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156102cc5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610236917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc49160800161030c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261026e91610348565b6000604051808303816000865af19150503d80600081146102ab576040519150601f19603f3d011682016040523d82523d6000602084013e6102b0565b606091505b50915050808060200190518101906102c8919061035b565b9150505b919050565b6000815160005b818110156102f257602081850181015186830152016102d8565b81811115610301576000828601525b509290920192915050565b7fffffffff0000000000000000000000000000000000000000000000000000000083168152600061034060048301846102d1565b949350505050565b600061035482846102d1565b9392505050565b60006020828403121561036d57600080fd5b8151801515811461035457600080fdfea2646970667358221220b6d67693f4cd46410ef2bff9243e24c9e4e62dcc08e3a02f52704a0003bf6abb64736f6c634300080a0033"; - -type CreditFacadeHelperConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: CreditFacadeHelperConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class CreditFacadeHelper__factory extends ContractFactory { - constructor(...args: CreditFacadeHelperConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): CreditFacadeHelper { - return super.attach(address) as CreditFacadeHelper; - } - override connect(signer: Signer): CreditFacadeHelper__factory { - return super.connect(signer) as CreditFacadeHelper__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): CreditFacadeHelperInterface { - return new utils.Interface(_abi) as CreditFacadeHelperInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): CreditFacadeHelper { - return new Contract(address, _abi, signerOrProvider) as CreditFacadeHelper; - } -} diff --git a/src/types/factories/contracts/test/suites/CreditFacadeTestSuite__factory.ts b/src/types/factories/contracts/test/suites/CreditFacadeTestSuite__factory.ts deleted file mode 100644 index 9c92e40d..00000000 --- a/src/types/factories/contracts/test/suites/CreditFacadeTestSuite__factory.ts +++ /dev/null @@ -1,685 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { - Signer, - utils, - Contract, - ContractFactory, - BigNumberish, - Overrides, -} from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - CreditFacadeTestSuite, - CreditFacadeTestSuiteInterface, -} from "../../../../contracts/test/suites/CreditFacadeTestSuite"; - -const _abi = [ - { - inputs: [ - { - internalType: "contract TokensTestSuite", - name: "_testTokenSuite", - type: "address", - }, - { - internalType: "enum Tokens", - name: "_underlying", - type: "uint8", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "", - type: "address", - }, - ], - name: "log_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "log_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - name: "log_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "int256", - name: "", - type: "int256", - }, - ], - name: "log_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "address", - name: "val", - type: "address", - }, - ], - name: "log_named_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes", - name: "val", - type: "bytes", - }, - ], - name: "log_named_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes32", - name: "val", - type: "bytes32", - }, - ], - name: "log_named_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - ], - name: "log_named_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "string", - name: "val", - type: "string", - }, - ], - name: "log_named_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - ], - name: "log_named_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "log_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "logs", - type: "event", - }, - { - inputs: [], - name: "IS_TEST", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "_getAccountAmount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "enum Tokens", - name: "t", - type: "uint8", - }, - ], - name: "_getCollateralTokens", - outputs: [ - { - components: [ - { - internalType: "address", - name: "token", - type: "address", - }, - { - internalType: "uint16", - name: "liquidationThreshold", - type: "uint16", - }, - ], - internalType: "struct CollateralToken[]", - name: "collateralTokens", - type: "tuple[]", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "acl", - outputs: [ - { - internalType: "contract ACL", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "token", - type: "address", - }, - { - internalType: "uint256", - name: "price", - type: "uint256", - }, - ], - name: "addMockPriceFeed", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "addressProvider", - outputs: [ - { - internalType: "contract AddressProvider", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "af", - outputs: [ - { - internalType: "contract AccountFactory", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "cr", - outputs: [ - { - internalType: "contract ContractsRegister", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditConfigurator", - outputs: [ - { - internalType: "contract CreditConfigurator", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditFacade", - outputs: [ - { - internalType: "contract CreditFacade", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditManager", - outputs: [ - { - internalType: "contract CreditManager", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "degenNFT", - outputs: [ - { - internalType: "contract DegenNFT", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "failed", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "gp", - outputs: [ - { - internalType: "contract GenesisFactory", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "enum Tokens", - name: "", - type: "uint8", - }, - ], - name: "lt", - outputs: [ - { - internalType: "uint16", - name: "", - type: "uint16", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "maxBorrowedAmount", - outputs: [ - { - internalType: "uint128", - name: "", - type: "uint128", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "minBorrowedAmount", - outputs: [ - { - internalType: "uint128", - name: "", - type: "uint128", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "poolMock", - outputs: [ - { - internalType: "contract PoolServiceMock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "priceOracle", - outputs: [ - { - internalType: "contract IPriceOracleV2Ext", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "testFacadeWithDegenNFT", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "testFacadeWithExpiration", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "testTokenSuite", - outputs: [ - { - internalType: "contract TokensTestSuite", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "underlying", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x60806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d00011790553480156200003a57600080fd5b5060405162031ed638038062031ed68339810160408190526200005d91620015e8565b81816040516200006d9062001595565b604051809103906000f0801580156200008a573d6000803e3d6000fd5b5050600180546001600160a01b0319166001600160a01b038416908117909155604080516325abd85f60e11b81529051634b57b0be916004808201926020929091908290030181865afa158015620000e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200010c91906200162a565b73c4375b7de8af5a38a93548eb8453a498222c4ff26040516200012f90620015a3565b6001600160a01b03928316815291166020820152604001604051809103906000f08015801562000163573d6000803e3d6000fd5b50600380546001600160a01b0319166001600160a01b039290921691821790556040805163de28735960e01b8152905163de287359916004808201926020929091908290030181865afa158015620001bf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e591906200162a565b604051634910832f60e01b81527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526001600160a01b039190911690634910832f90602401600060405180830381600087803b1580156200023d57600080fd5b505af115801562000252573d6000803e3d6000fd5b50505050600360009054906101000a90046001600160a01b03166001600160a01b031663de2873596040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d091906200162a565b60035460405163f2fde38b60e01b81526001600160a01b03918216600482015291169063f2fde38b90602401600060405180830381600087803b1580156200031757600080fd5b505af11580156200032c573d6000803e3d6000fd5b505060035460015460408051636ca42ae360e01b815290516001600160a01b039384169550638874ff1f94509190921691636ca42ae39160048083019260009291908290030181865afa15801562000388573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620003b29190810190620016c5565b6040518263ffffffff1660e01b8152600401620003d09190620017b6565b600060405180830381600087803b158015620003eb57600080fd5b505af115801562000400573d6000803e3d6000fd5b50505050600360009054906101000a90046001600160a01b03166001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000458573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200047e91906200162a565b600280546001600160a01b0319166001600160a01b039290921691821790556040805163120d150d60e31b81529051639068a868916004808201926020929091908290030181865afa158015620004d9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004ff91906200162a565b600480546001600160a01b0319166001600160a01b0392831617815560025460408051631f94a27560e31b81529051919093169263fca513a892818101926020929091908290030181865afa1580156200055d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200058391906200162a565b600880546001600160a01b0319166001600160a01b0392831617905560025460408051630873769560e01b81529051919092169163087376959160048083019260209291908290030181865afa158015620005e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200060891906200162a565b600780546001600160a01b0319166001600160a01b039283161790556002546040805163c513c9bb60e01b81529051919092169163c513c9bb9160048083019260209291908290030181865afa15801562000667573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200068d91906200162a565b600680546001600160a01b0319166001600160a01b039283161790556001546040516367b4264560e01b81529116906367b4264590620006d29084906004016200184d565b602060405180830381865afa158015620006f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200071691906200162a565b600980546001600160a01b0319166001600160a01b0392831617905560035460408051630a55006360e21b815290519190921691632954018c9160048083019260209291908290030181865afa15801562000775573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200079b91906200162a565b6009546040516001600160a01b0390911690620007b890620015b2565b6001600160a01b03928316815291166020820152604001604051809103906000f080158015620007ec573d6000803e3d6000fd5b50600580546001600160a01b0319166001600160a01b039283169081179091556001549091169063eebab8ef90839062000825620011ec565b6200083290600a62001879565b6040518463ffffffff1660e01b815260040162000852939291906200189b565b600060405180830381600087803b1580156200086d57600080fd5b505af115801562000882573d6000803e3d6000fd5b505060065460055460405163d914cd4b60e01b81526001600160a01b0391821660048201529116925063d914cd4b9150602401600060405180830381600087803b158015620008d057600080fd5b505af1158015620008e5573d6000803e3d6000fd5b5050600f80546001600160801b031916670de0b6b3a76400001790555062000911925050620011ec9050565b6200091e90600a62001879565b600f80546001600160801b03908116600160801b9382168402818117938490556040805160a0810182529184169092178152939092041660208301526000919081016200096b84620012ab565b815260006020820181905260409182018190526005549151929350916001600160a01b039091169083908390620009a290620015c0565b620009b093929190620018c5565b604051809103906000f080158015620009cd573d6000803e3d6000fd5b509050806001600160a01b031663c12c21c06040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a0f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a3591906200162a565b600b60006101000a8154816001600160a01b0302191690836001600160a01b03160217905550806001600160a01b0316632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a9a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ac091906200162a565b600c60006101000a8154816001600160a01b0302191690836001600160a01b03160217905550806001600160a01b031663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000b25573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b4b91906200162a565b600d80546001600160a01b0319166001600160a01b03928316179055600654600b5460405163e26b2f6360e01b8152908316600482015291169063e26b2f6390602401600060405180830381600087803b15801562000ba957600080fd5b505af115801562000bbe573d6000803e3d6000fd5b5050600054600554604080516318caf8e360e31b81526001600160a01b039283166004808301919091526024820192909252604481019190915263141bdbdb60e21b60648201526201000090920416925063c657c7189150608401600060405180830381600087803b15801562000c3457600080fd5b505af115801562000c49573d6000803e3d6000fd5b5050600054600c8054604080516318caf8e360e31b81526001600160a01b039283166004820152602481019190915260448101929092526b43726564697446616361646560a01b606483015262010000909204909116925063c657c7189150608401600060405180830381600087803b15801562000cc657600080fd5b505af115801562000cdb573d6000803e3d6000fd5b5050600054600b54604080516318caf8e360e31b81526001600160a01b0392831660048201526024810191909152600d60448201526c21b932b234ba26b0b730b3b2b960991b60648201526201000090920416925063c657c7189150608401600060405180830381600087803b15801562000d5557600080fd5b505af115801562000d6a573d6000803e3d6000fd5b5050600054600d54604080516318caf8e360e31b81526001600160a01b0392831660048201526024810191909152601260448201527121b932b234ba21b7b73334b3bab930ba37b960711b60648201526201000090920416925063c657c7189150608401600060405180830381600087803b15801562000de957600080fd5b505af115801562000dfe573d6000803e3d6000fd5b50506001546001600160a01b0316915063eebab8ef90508473f39fd6e51aad88f6f4ce6ab8827279cfffb9226662000e35620011ec565b6040518463ffffffff1660e01b815260040162000e55939291906200189b565b600060405180830381600087803b15801562000e7057600080fd5b505af115801562000e85573d6000803e3d6000fd5b50506001546001600160a01b0316915063eebab8ef9050847390f79bf6eb2c4f870365e785982e1f101e93b90662000ebc620011ec565b6040518463ffffffff1660e01b815260040162000edc939291906200189b565b600060405180830381600087803b15801562000ef757600080fd5b505af115801562000f0c573d6000803e3d6000fd5b505060005460405163ca669fa760e01b815273f39fd6e51aad88f6f4ce6ab8827279cfffb922666004820152620100009091046001600160a01b0316925063ca669fa79150602401600060405180830381600087803b15801562000f6f57600080fd5b505af115801562000f84573d6000803e3d6000fd5b5050600954600b5460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529116925063095ea7b391506044016020604051808303816000875af115801562000fdf573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001005919062001989565b5060005460405163ca669fa760e01b81527390f79bf6eb2c4f870365e785982e1f101e93b9066004820152620100009091046001600160a01b03169063ca669fa790602401600060405180830381600087803b1580156200106557600080fd5b505af11580156200107a573d6000803e3d6000fd5b5050600954600b5460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529116925063095ea7b391506044016020604051808303816000875af1158015620010d5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010fb919062001989565b5060025460405163f2fde38b60e01b81527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526001600160a01b039091169063f2fde38b90602401600060405180830381600087803b1580156200115657600080fd5b505af11580156200116b573d6000803e3d6000fd5b505060075460405163f2fde38b60e01b81527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b158015620011c957600080fd5b505af1158015620011de573d6000803e3d6000fd5b5050505050505050620019e1565b600180546040516367b4264560e01b81526000926001600160a01b03909216916367b42645916200122191906004016200184d565b602060405180830381865afa1580156200123f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200126591906200162a565b6009546001600160a01b03908116911614620012955762001290670de0b6b3a764000060c862001879565b905090565b62001290670de0b6b3a7640000614e2062001879565b6040805160c08101825260026080820190815261232860a08301528152815180830183526005815261226060208281019190915282015281518083018352606092600092919082019080600387600a8111156200130c576200130c62001814565b146200131a5760036200131d565b60015b600a81111562001331576200133162001814565b815261206c6020918201529082526040805180820190915260048152611c84818301529101529050612454600a6000858281111562001374576200137462001814565b600a81111562001388576200138862001814565b815260208101919091526040908101600020805461ffff9390931661ffff19909316929092179091558051600480825260a0820190925281816020015b6040805180820190915260008082526020820152815260200190600190039081620013c557905050925060005b818110156200158d57828160048110620014105762001410620019ad565b602002015160200151600a6000858460048110620014325762001432620019ad565b602002015151600a8111156200144c576200144c62001814565b600a81111562001460576200146062001814565b815260208101919091526040908101600020805461ffff191661ffff9390931692909217909155805180820190915260015481906001600160a01b03166367b42645868560048110620014b757620014b7620019ad565b6020020151516040516001600160e01b031960e084901b168152620014e091906004016200184d565b602060405180830381865afa158015620014fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200152491906200162a565b6001600160a01b03168152602001848360048110620015475762001547620019ad565b60200201516020015161ffff168152508482815181106200156c576200156c620019ad565b602002602001018190525080806200158490620019c3565b915050620013f2565b505050919050565b6105e6806200bc5283390190565b62011105806200c23883390190565b6110a7806201d33d83390190565b62013af2806201e3e483390190565b6001600160a01b0381168114620015e557600080fd5b50565b60008060408385031215620015fc57600080fd5b82516200160981620015cf565b6020840151909250600b81106200161f57600080fd5b809150509250929050565b6000602082840312156200163d57600080fd5b81516200164a81620015cf565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156200168c576200168c62001651565b60405290565b604051601f8201601f191681016001600160401b0381118282101715620016bd57620016bd62001651565b604052919050565b60006020808385031215620016d957600080fd5b82516001600160401b0380821115620016f157600080fd5b818501915085601f8301126200170657600080fd5b8151818111156200171b576200171b62001651565b6200172b848260051b0162001692565b818152848101925060069190911b8301840190878211156200174c57600080fd5b928401925b81841015620017ab57604084890312156200176c5760008081fd5b6200177662001667565b84516200178381620015cf565b8152848601516200179481620015cf565b818701528352604093909301929184019162001751565b979650505050505050565b602080825282518282018190526000919060409081850190868401855b828110156200180757815180516001600160a01b0390811686529087015116868501529284019290850190600101620017d3565b5091979650505050505050565b634e487b7160e01b600052602160045260246000fd5b600b81106200184957634e487b7160e01b600052602160045260246000fd5b9052565b602081016200185d82846200182a565b92915050565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161562001896576200189662001863565b500290565b60608101620018ab82866200182a565b6001600160a01b0393909316602082015260400152919050565b6001600160a01b0384811682526060602080840182905285516001600160801b039081169285019290925285810151909116608084015260408086015160a085810152805161010086018190526000949392918301919085906101208801905b808310156200195657845180518816835286015161ffff168683015293850193600192909201919083019062001925565b5060608a01516001600160a01b031660c0890152608090990151151560e088015250909401949094525092949350505050565b6000602082840312156200199c57600080fd5b815180151581146200164a57600080fd5b634e487b7160e01b600052603260045260246000fd5b6000600019821415620019da57620019da62001863565b5060010190565b61a26180620019f16000396000f3fe60806040523480156200001157600080fd5b5060043610620001ad5760003560e01c806362eb33e311620000f5578063ba414fa61162000097578063de287359116200006e578063de2873591462000479578063f9aa028a146200049a578063fa7626d414620004bb57600080fd5b8063ba414fa6146200041c578063c12c21c01462000437578063d46b9330146200045857600080fd5b80637785ff5d11620000cc5780637785ff5d14620003da5780639408b63f14620003e45780639dd55b45146200040557600080fd5b806362eb33e314620003775780636b70b04c14620003985780636f307dc314620003b957600080fd5b80632f7a1881116200015f5780635e813a8b11620001365780635e813a8b146200030c5780635f7c9bd0146200032d57806362186905146200034657600080fd5b80632f7a188114620002be578063406c8e2f14620002df57806354cae56e146200030057600080fd5b80630e42bc5d11620001945780630e42bc5d14620002305780632630c12f14620002565780632954018c146200029d57600080fd5b80630bc772da14620001b25780630c75f80614620001f5575b600080fd5b600f54620001cf906fffffffffffffffffffffffffffffffff1681565b6040516fffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6200021c62000206366004620012dd565b600a6020526000908152604090205461ffff1681565b60405161ffff9091168152602001620001ec565b6200024762000241366004620012dd565b620004c9565b604051620001ec919062001307565b600854620002779073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001620001ec565b600254620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600c54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600154620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200030a6200081f565b005b600454620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200033762000b1a565b604051908152602001620001ec565b600f54620001cf9070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681565b600654620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600554620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600954620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200030a62000c0c565b600e54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200030a6200041636600462001398565b62000fd6565b6200042662001149565b6040519015158152602001620001ec565b600b54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600354620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600754620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600d54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600054620004269060ff1681565b6040805160c08101825260026080820190815261232860a08301528152815180830183526005815261226060208281019190915282015281518083018352606092600092919082019080600387600a8111156200052a576200052a620013c7565b14620005385760036200053b565b60015b600a8111156200054f576200054f620013c7565b815261206c6020918201529082526040805180820190915260048152611c84818301529101529050612454600a60008582811115620005925762000592620013c7565b600a811115620005a657620005a6620013c7565b815260208101919091526040908101600020805461ffff939093167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909316929092179091558051600480825260a0820190925281816020015b60408051808201909152600080825260208201528152602001906001900390816200060057905050925060005b8181101562000817578281600481106200064b576200064b620013f6565b602002015160200151600a60008584600481106200066d576200066d620013f6565b602002015151600a811115620006875762000687620013c7565b600a8111156200069b576200069b620013c7565b81526020810191909152604090810160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff93909316929092179091558051808201909152600154819073ffffffffffffffffffffffffffffffffffffffff166367b426458685600481106200071c576200071c620013f6565b6020020151516040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526200075d919060040162001425565b602060405180830381865afa1580156200077b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007a1919062001467565b73ffffffffffffffffffffffffffffffffffffffff168152602001848360048110620007d157620007d1620013f6565b60200201516020015161ffff16815250848281518110620007f657620007f6620013f6565b602002602001018190525080806200080e90620014b6565b9150506200062d565b505050919050565b6000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16906306447d5690602401600060405180830381600087803b158015620008a457600080fd5b505af1158015620008b9573d6000803e3d6000fd5b5050600b5460405173ffffffffffffffffffffffffffffffffffffffff909116925060009150600190620008ed90620012b3565b73ffffffffffffffffffffffffffffffffffffffff938416815292909116602083015215156040820152606001604051809103906000f08015801562000937573d6000803e3d6000fd5b50600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316908117909155600d546040517f526a41e80000000000000000000000000000000000000000000000000000000081526004810192909252600160248301529091169063526a41e890604401600060405180830381600087803b158015620009dc57600080fd5b505af1158015620009f1573d6000803e3d6000fd5b5050600d5473ffffffffffffffffffffffffffffffffffffffff16915063eb9606df905062000a22426001620014f2565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815264ffffffffff90911660048201526024015b600060405180830381600087803b15801562000a7b57600080fd5b505af115801562000a90573d6000803e3d6000fd5b50505050600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562000aff57600080fd5b505af115801562000b14573d6000803e3d6000fd5b50505050565b600180546040517f67b4264500000000000000000000000000000000000000000000000000000000815260009273ffffffffffffffffffffffffffffffffffffffff909216916367b426459162000b75919060040162001425565b602060405180830381865afa15801562000b93573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000bb9919062001467565b60095473ffffffffffffffffffffffffffffffffffffffff90811691161462000bf65762000bf1670de0b6b3a764000060c86200150d565b905090565b62000bf1670de0b6b3a7640000614e206200150d565b60025460405173ffffffffffffffffffffffffffffffffffffffff9091169062000c3690620012c1565b73ffffffffffffffffffffffffffffffffffffffff90911681526060602082018190526008908201527f446567656e4e4654000000000000000000000000000000000000000000000000608082015260a060408201819052600a908201527f476561722d446567656e0000000000000000000000000000000000000000000060c082015260e001604051809103906000f08015801562000cda573d6000803e3d6000fd5b50600e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283161790556000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015262010000909104909116906306447d5690602401600060405180830381600087803b15801562000d8e57600080fd5b505af115801562000da3573d6000803e3d6000fd5b5050600e546040517ffca3b5aa0000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff909116925063fca3b5aa9150602401600060405180830381600087803b15801562000e2757600080fd5b505af115801562000e3c573d6000803e3d6000fd5b5050600b54600e5460405173ffffffffffffffffffffffffffffffffffffffff92831694509116915060009062000e7390620012b3565b73ffffffffffffffffffffffffffffffffffffffff938416815292909116602083015215156040820152606001604051809103906000f08015801562000ebd573d6000803e3d6000fd5b50600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316908117909155600d546040517f526a41e80000000000000000000000000000000000000000000000000000000081526004810192909252600160248301529091169063526a41e890604401600060405180830381600087803b15801562000f6257600080fd5b505af115801562000f77573d6000803e3d6000fd5b5050600e54600c546040517f4610f6ac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015291169250634610f6ac915060240162000a60565b600081600860405162000fe990620012cf565b91825260ff166020820152604001604051809103906000f08015801562001014573d6000803e3d6000fd5b506000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291925062010000900473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b1580156200109c57600080fd5b505af1158015620010b1573d6000803e3d6000fd5b50506008546040517fe8a97a3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528581166024830152909116925063e8a97a3e9150604401600060405180830381600087803b1580156200112b57600080fd5b505af115801562001140573d6000803e3d6000fd5b50505050505050565b60008054610100900460ff16156200116a5750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620012ae5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000008284015282518083038401815260608301909352600092909162001212917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016200158b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526200124c91620015c9565b6000604051808303816000865af19150503d80600081146200128b576040519150601f19603f3d011682016040523d82523d6000602084013e62001290565b606091505b5091505080806020019051810190620012aa9190620015d7565b9150505b919050565b615e9780620015fc83390190565b6126cf806200749383390190565b6106ca8062009b6283390190565b600060208284031215620012f057600080fd5b8135600b81106200130057600080fd5b9392505050565b602080825282518282018190526000919060409081850190868401855b8281101562001365578151805173ffffffffffffffffffffffffffffffffffffffff16855286015161ffff1686850152928401929085019060010162001324565b5091979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff811681146200139557600080fd5b50565b60008060408385031215620013ac57600080fd5b8235620013b98162001372565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60208101600b831062001461577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000602082840312156200147a57600080fd5b8151620013008162001372565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415620014eb57620014eb62001487565b5060010190565b6000821982111562001508576200150862001487565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562001548576200154862001487565b500290565b6000815160005b8181101562001570576020818501810151868301520162001554565b8181111562001580576000828601525b509290920192915050565b7fffffffff00000000000000000000000000000000000000000000000000000000831681526000620015c160048301846200154d565b949350505050565b60006200130082846200154d565b600060208284031215620015ea57600080fd5b815180151581146200130057600080fdfe6101406040523480156200001257600080fd5b5060405162005e9738038062005e97833981016040819052620000359162000198565b60016000556001600160a01b0383166200006257604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038316608081905260408051636f307dc360e01b81529051636f307dc3916004808201926020929091908290030181865afa158015620000ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d39190620001ea565b6001600160a01b031660a0816001600160a01b031681525050826001600160a01b0316634f0e0ef36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200012b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001519190620001ea565b6001600160a01b0390811660c0529190911660e0819052151561010052151561012052506200020f565b80516001600160a01b03811681146200019357600080fd5b919050565b600080600060608486031215620001ae57600080fd5b620001b9846200017b565b9250620001c9602085016200017b565b915060408401518015158114620001df57600080fd5b809150509250925092565b600060208284031215620001fd57600080fd5b62000208826200017b565b9392505050565b60805160a05160c05160e0516101005161012051615a86620004116000396000818161061101528181612fb5015261481f01526000818161031701528181610dde015281816144f901526146e5015260008181610557015281816146a901526147a901526000818161034b0152818161387d015261392d01526000818161047301528181611bfe0152818161274f0152818161280d0152818161366a01526137dd015260008181610665015281816109d801528181610b0301528181610bd501528181610cdd01528181610e6501528181610fe30152818161114e0152818161120e0152818161132e015281816114510152818161162b01528181611708015281816117e0015281816119e501528181611b1201528181611d9501528181611ed5015281816120040152818161216801528181612290015281816123c601528181612568015281816126390152818161266f0152818161293d01528181612a2101528181612a8a01528181612bde01528181612d2601528181612e6801528181612ec2015281816130a10152818161311b015281816131b401528181613341015281816134c10152818161358a0152818161372f01528181613a1a01528181613b2e01528181613dbb015281816142200152818161432801528181614492015281816148e7015281816149e801528181614aae0152614d8f0152615a866000f3fe6080604052600436106102695760003560e01c8063860aefcf11610153578063c7de38a6116100cb578063dfd594651161007f578063eb9606df11610064578063eb9606df1461081e578063f9eaee0d1461083e578063ffd9b9071461085e57600080fd5b8063dfd59465146107de578063e1f21c67146107fe57600080fd5b8063cff0ab96116100b0578063cff0ab96146106ef578063d9ccbec114610783578063dcf65482146107be57600080fd5b8063c7de38a6146106a7578063caa5c23f146106dc57600080fd5b80639c55a05411610122578063b55bb84b11610107578063b55bb84b14610633578063c12c21c014610653578063c690908a1461068757600080fd5b80639c55a054146105df578063b1836d32146105ff57600080fd5b8063860aefcf146104db5780639408b63f146105455780639b67ab30146105795780639be0536a146105bd57600080fd5b80635d91a0e0116101e65780636d19b486116101b55780637071b7c51161019a5780637071b7c51461049557806379c0ef91146104a857806382871ace146104c857600080fd5b80636d19b486146104415780636f307dc31461046157600080fd5b80635d91a0e0146103e85780635f73fbec146103fb578063601d66f61461040e5780636c8f225d1461042e57600080fd5b80633d9287fa1161023d5780635019e20a116102225780635019e20a1461039257806354fd4d50146103b257806359781034146103d557600080fd5b80633d9287fa146103055780634f0e0ef31461033957600080fd5b8062842b571461026e578063256ac915146102905780632a7ba1f7146102c55780632b7c7b11146102e5575b600080fd5b34801561027a57600080fd5b5061028e6102893660046151bf565b61087e565b005b34801561029c57600080fd5b506102b06102ab3660046151f8565b61098e565b60405190151581526020015b60405180910390f35b3480156102d157600080fd5b5061028e6102e0366004615215565b610a61565b3480156102f157600080fd5b5061028e610300366004615215565b610c3b565b34801561031157600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561034557600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102bc565b34801561039e57600080fd5b5061028e6103ad3660046151f8565b610d6a565b3480156103be57600080fd5b506103c7600281565b6040519081526020016102bc565b61028e6103e336600461522e565b61108c565b61028e6103f63660046152bb565b611275565b61028e610409366004615340565b611589565b34801561041a57600080fd5b5061028e6104293660046153d8565b6117de565b61028e61043c36600461541b565b611900565b34801561044d57600080fd5b506102b061045c3660046151f8565b611c31565b34801561046d57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b61028e6104a336600461546e565b611c60565b3480156104b457600080fd5b5061036d6104c3366004615215565b611f3e565b61028e6104d63660046152bb565b611f4b565b3480156104e757600080fd5b5060025461051c906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041682565b604080516fffffffffffffffffffffffffffffffff9384168152929091166020830152016102bc565b34801561055157600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561058557600080fd5b506004546040805167ffffffffffffffff608084901c1681526fffffffffffffffffffffffffffffffff9092166020830152016102bc565b3480156105c957600080fd5b506105d261227d565b6040516102bc91906154e2565b3480156105eb57600080fd5b5061028e6105fa36600461553c565b61228e565b34801561060b57600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561063f57600080fd5b5061028e61064e3660046151f8565b6123c4565b34801561065f57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561069357600080fd5b5061028e6106a23660046151f8565b6124c6565b3480156106b357600080fd5b506106c76106c23660046151f8565b612668565b604080519283526020830191909152016102bc565b61028e6106ea366004615557565b61289b565b3480156106fb57600080fd5b5060015461074e906fffffffffffffffffffffffffffffffff811690700100000000000000000000000000000000810460ff169071010000000000000000000000000000000000900464ffffffffff1683565b604080516fffffffffffffffffffffffffffffffff9094168452911515602084015264ffffffffff16908201526060016102bc565b34801561078f57600080fd5b506102b061079e366004615599565b600360209081526000928352604080842090915290825290205460ff1681565b3480156107ca57600080fd5b5061028e6107d93660046151f8565b612a88565b3480156107ea57600080fd5b506103c76107f93660046151f8565b612b86565b34801561080a57600080fd5b5061028e61081936600461522e565b612c6d565b34801561082a57600080fd5b5061028e6108393660046155c7565b612ec0565b34801561084a57600080fd5b506102b06108593660046151f8565b613057565b34801561086a57600080fd5b5061028e6108793660046155ee565b6131b2565b600260005414156108f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b6002600090815573ffffffffffffffffffffffffffffffffffffffff8316808252600360209081526040808420338086529083529381902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081527f9b3258bc4904fd6426b99843e206c6c7cdb1fd0f040121c25b71dafbb3851ee0910160405180910390a350506001600055565b6040517f055ee9b500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063055ee9b590602401602060405180830381865afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a43919061560b565b73ffffffffffffffffffffffffffffffffffffffff16141592915050565b60026000541415610ace576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610b5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b83919061560b565b9050610b903382846132eb565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906395373018906024015b600060405180830381600087803b158015610c1a57600080fd5b505af1158015610c2e573d6000803e3d6000fd5b5050600160005550505050565b60026000541415610ca8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610d39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5d919061560b565b9050610b90338284613411565b60026000541415610dd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000557f000000000000000000000000000000000000000000000000000000000000000015610e34576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610ec1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee5919061560b565b33600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915290205490915060ff16610f52576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f5d82613583565b5090508015610f98576040517ff713841e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b15801561102757600080fd5b505af115801561103b573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692503391507f93c70cc9715bef0d83edf2095f3595402279d274f402a73ffc17f1bcb19d863d90600090a35050600160005550565b600260005414156110f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611106613875565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063e958b70490602401602060405180830381865afa158015611197573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bb919061560b565b90506111c9848285856139b7565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401600060405180830381600087803b15801561125257600080fd5b505af1158015611266573d6000803e3d6000fd5b50506001600055505050505050565b600260005414156112e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611375573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611399919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166113e8576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806113f483613583565b915091508161142f576040517f1fdd676f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611437613875565b831561144d5761144d85858b8660016000613ae3565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632362a2d88b600185338e8e8e6040518863ffffffff1660e01b81526004016114b59796959493929190615663565b6020604051808303816000875af11580156114d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f891906156bf565b90508873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f7dfecd8419723a9d3954585a30c2a270165d70aafa146c11c1e1b88ae14390648460405161157091815260200190565b60405180910390a4505060016000555050505050505050565b600260005414156115f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ab919061560b565b90506116b5613875565b81156116cb576116cb8383338460016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d89061174a903390600090819083908d908d908d90600401615663565b6020604051808303816000875af1158015611769573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178d91906156bf565b5060405173ffffffffffffffffffffffffffffffffffffffff87169033907f460ad03b1cf79b1d64d3aefa28475f110ab66e84649c52bb41ed796b9b39198190600090a35050600160005550505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611849573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118d1576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff90811670010000000000000000000000000000000002911617600255565b6002600054141561196d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000908155606461198461ffff851687615707565b61198e9190615744565b9050611999816144f7565b6119a2816145e8565b6119ab84614668565b6119b3613875565b6040517f172c48c7000000000000000000000000000000000000000000000000000000008152600060048201819052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a64919061577f565b61ffff169150611a789050816127106157ae565b611a829083615707565b611a8c8288615707565b11611ac3576040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff86811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611b5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b81919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638587604051611bef92919091825261ffff16602082015260400190565b60405180910390a3611c2386827f00000000000000000000000000000000000000000000000000000000000000008a6139b7565b505060016000555050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526006602052604081205415155b92915050565b60026000541415611ccd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611cdb856144f7565b611ce484614668565b611ced856145e8565b600154700100000000000000000000000000000000900460ff1615611d3e576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d46613875565b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff85811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611de0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e04919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638885604051611e7292919091825261ffff16602082015260400190565b60405180910390a38215611e9057611e908484878460006001613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015611f1957600080fd5b505af1158015611f2d573d6000803e3d6000fd5b505060016000555050505050505050565b6000611c5a60058361480f565b60026000541415611fb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa15801561204b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206f919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166120be576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120c661481b565b6120fc576040517f7e52ccb400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061210782612668565b509050612112613875565b82156121285761212884848a8560016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d8906121aa908c90600290879033908f908f908f90600401615663565b6020604051808303816000875af11580156121c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ed91906156bf565b90508773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167ffada13ff2d5e1a1d9da37ad4a4130893b34e3c69c32b17f87ec31fd661b867078460405161226591815260200190565b60405180910390a45050600160005550505050505050565b6060612289600561486b565b905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612381576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561242f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612453919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146124b7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614878565b5050565b60026000541415612533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156125c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e8919061560b565b90506125f4818361489a565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401610c00565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126fc919061560b565b905060008061270b8387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156127a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127c991906156bf565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015291965061271091851690637afb010490604401602060405180830381865afa158015612863573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061288791906156bf565b6128919190615744565b9350505050915091565b60026000541415612908576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129bd919061560b565b90506129c7613875565b8115612a7e576129dc83833384600080613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015612a6557600080fd5b505af1158015612a79573d6000803e3d6000fd5b505050505b5050600160005550565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612af3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b17919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b7b576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614c92565b600080612b9283612668565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152919350600092507f000000000000000000000000000000000000000000000000000000000000000090911690633192195c906024016040805180830381865afa158015612c26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4a91906157c5565b9150819050612c5b61271084615707565b612c659190615744565b949350505050565b60026000541415612cda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063fdd5764590602401602060405180830381865afa158015612d6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d91919061560b565b73ffffffffffffffffffffffffffffffffffffffff161480612dd7575073ffffffffffffffffffffffffffffffffffffffff831660009081526006602052604090205415155b15612e0e576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612eac57600080fd5b505af1158015611c23573d6000803e3d6000fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f4f919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612fb3576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000061300a576040517f50dd11fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805464ffffffffff90921671010000000000000000000000000000000000027fffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffffff909216919091179055565b6040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063f67c5bd090602401602060405180830381865afa1580156130e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061310c91906156bf565b905080158015906131ab5750807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015613184573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a891906156bf565b16155b9392505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561321d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613241919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146132a5576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018054911515700100000000000000000000000000000000027fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff909216919091179055565b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600060448301819052917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561338c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133b091906156bf565b90506133bb816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f98274bf834d179ee08dc0604071b0dc90b54731bd5f725a5a96a39a86bce025a8360405161340391815260200190565b60405180910390a250505050565b61341a816144f7565b600154700100000000000000000000000000000000900460ff161561346b576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600160448301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561350c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061353091906156bf565b905061353b816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f9cac51154cc0d835e2f9c9d1f59a9344588cee107f4203bf58a8c797e3a58c458360405161340391815260200190565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613617919061560b565b90506000806136268387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156136c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136e491906156bf565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529195506000917f00000000000000000000000000000000000000000000000000000000000000001690633192195c906024016040805180830381865afa158015613775573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061379991906157c5565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350600092506127109187169063f9a6503090604401602060405180830381865afa158015613837573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061385b91906156bf565b6138659190615707565b9092109794965093945050505050565b34156139b5577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156138e357600080fd5b505af11580156138f7573d6000803e3d6000fd5b50506040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201523460248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16935063a9059cbb925060440190506020604051808303816000875af115801561398f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139b391906157e9565b505b565b6139c084614cb4565b6040517f830aa74500000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f0000000000000000000000000000000000000000000000000000000000000000169063830aa74590608401600060405180830381600087803b158015613a5e57600080fd5b505af1158015613a72573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fa32435755c235de2976ed44a75a2f85cb01faf0c894f639fe0c32bb9455fea8f83604051613ad591815260200190565b60405180910390a350505050565b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301523060248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b158015613b7257600080fd5b505af1158015613b86573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff871692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a28460005b8181101561441d5736888883818110613bea57613bea615806565b9050602002810190613bfc9190615835565b90506004613c0d6020830183615873565b90501015613c47576040517fe2b0e50600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b30613c5560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16141561421c578415613ca9576040517f5fb9107f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613cb86020830183615873565b613cc1916158d8565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167f59781034000000000000000000000000000000000000000000000000000000001415613e3c5760008080613d1e6020860186615873565b613d2c916004908290615920565b810190613d39919061522e565b925092509250613e34838c73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614613e2b576040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015613e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e26919061560b565b613e2d565b8b5b84846139b7565b505050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2b7c7b11000000000000000000000000000000000000000000000000000000001415613ec757600194506000613e996020840184615873565b613ea7916004908290615920565b810190613eb49190615215565b9050613ec1898983613411565b50614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2a7ba1f7000000000000000000000000000000000000000000000000000000001415613f80578415613f49576040517fc0b0caa800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613f586020840184615873565b613f66916004908290615920565b810190613f739190615215565b9050613ec18989836132eb565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f233a8caa0000000000000000000000000000000000000000000000000000000014156140e457600080613fda6020850185615873565b613fe8916004908290615920565b810190613ff5919061594a565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c8116600483015292945090925082918416906370a0823190602401602060405180830381865afa158015614069573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061408d91906156bf565b10156140dd576040517fa5ac537300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016108e7565b5050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fc690908a00000000000000000000000000000000000000000000000000000000141561416457600061413d6020840184615873565b61414b916004908290615920565b81019061415891906151f8565b9050613ec1888261489a565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f23e27a640000000000000000000000000000000000000000000000000000000014156141e45760006141bd6020840184615873565b6141cb916004908290615920565b8101906141d891906151f8565b9050613ec18882614d42565b6040517f1e9e7e7a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50614414565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff68754361426760208501856151f8565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156142d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142f4919061560b565b73ffffffffffffffffffffffffffffffffffffffff16148061436d575073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001661435560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16145b156143a4576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6144126143b46020830183615873565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506143f69250505060208401846151f8565b73ffffffffffffffffffffffffffffffffffffffff1690614e39565b505b50600101613bcf565b506040517f60c8e8938c9a0c0d88a98d6f1c562ce68077e12bf3edb8047378f2f736cb45b490600090a16040517fe1998cf900000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff86811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b1580156144d657600080fd5b505af11580156144ea573d6000803e3d6000fd5b5050505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006139b3576001546fffffffffffffffffffffffffffffffff9081169081146124c257600454608081901c906fffffffffffffffffffffffffffffffff16600067ffffffffffffffff8316431461456e578461458a565b61458a6fffffffffffffffffffffffffffffffff831686615976565b9050838111156145c6576040517f675f1a5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff81164360801b176004555050505050565b6002546fffffffffffffffffffffffffffffffff16811080614631575060025470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681115b156139b3576040517fce16799400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61467061481b565b156146a7576040517f63fc31c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1615614806577f0000000000000000000000000000000000000000000000000000000000000000801561472657503373ffffffffffffffffffffffffffffffffffffffff821614155b1561475d576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600160248301527f00000000000000000000000000000000000000000000000000000000000000001690639dc29fac90604401600060405180830381600087803b1580156147ed57600080fd5b505af1158015614801573d6000803e3d6000fd5b505050505b6139b381614cb4565b60006131ab8383614e7b565b60007f0000000000000000000000000000000000000000000000000000000000000000801561228957505060015471010000000000000000000000000000000000900464ffffffffff1642101590565b606060006131ab83614ea5565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f01565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561492b57600080fd5b505af115801561493f573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527fdf498aa1c340e992665d6fb4f3be8436d452c45a630cb6d7fab7963da39bac8793500190505b60405180910390a15050565b6040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600091829160019183917f00000000000000000000000000000000000000000000000000000000000000001690638991b2f190602401602060405180830381865afa158015614a2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a5391906156bf565b90505b808211614c895780821615614c7d576040517fe75538c700000000000000000000000000000000000000000000000000000000815260048101839052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e75538c7906024016040805180830381865afa158015614af4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b18919061577f565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529294509092506000918416906370a0823190602401602060405180830381865afa158015614b8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bb191906156bf565b90506001811115614c79576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff8481166024830152600091908b169063f9a6503090604401602060405180830381865afa158015614c33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c5791906156bf565b978801979050614c6b61ffff841682615707565b614c759088615976565b9650505b5050505b600182901b9150614a56565b50509250929050565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f50565b3373ffffffffffffffffffffffffffffffffffffffff821614801590614d0b575033600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16155b156139b3576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b158015614dd357600080fd5b505af1158015614de7573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527f69db9e9764da61b6681b89fb0f5be018506e0342036e56b59c3015a620d60977935001905061498d565b60606131ab83836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250615043565b6000826000018281548110614e9257614e92615806565b9060005260206000200154905092915050565b606081600001805480602002602001604051908101604052809291908181526020018280548015614ef557602002820191906000526020600020905b815481526020019060010190808311614ee1575b50505050509050919050565b6000818152600183016020526040812054614f4857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611c5a565b506000611c5a565b60008181526001830160205260408120548015615039576000614f746001836157ae565b8554909150600090614f88906001906157ae565b9050818114614fed576000866000018281548110614fa857614fa8615806565b9060005260206000200154905080876000018481548110614fcb57614fcb615806565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080614ffe57614ffe61598e565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611c5a565b6000915050611c5a565b6060612c65848460008585843b6150b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108e7565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516150df91906159ed565b60006040518083038185875af1925050503d806000811461511c576040519150601f19603f3d011682016040523d82523d6000602084013e615121565b606091505b509150915061513182828661513c565b979650505050505050565b6060831561514b5750816131ab565b82511561515b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e791906159ff565b73ffffffffffffffffffffffffffffffffffffffff811681146139b357600080fd5b80151581146139b357600080fd5b600080604083850312156151d257600080fd5b82356151dd8161518f565b915060208301356151ed816151b1565b809150509250929050565b60006020828403121561520a57600080fd5b81356131ab8161518f565b60006020828403121561522757600080fd5b5035919050565b60008060006060848603121561524357600080fd5b833561524e8161518f565b9250602084013561525e8161518f565b929592945050506040919091013590565b60008083601f84011261528157600080fd5b50813567ffffffffffffffff81111561529957600080fd5b6020830191508360208260051b85010111156152b457600080fd5b9250929050565b60008060008060008060a087890312156152d457600080fd5b86356152df8161518f565b955060208701356152ef8161518f565b9450604087013593506060870135615306816151b1565b9250608087013567ffffffffffffffff81111561532257600080fd5b61532e89828a0161526f565b979a9699509497509295939492505050565b60008060008060006080868803121561535857600080fd5b85356153638161518f565b945060208601359350604086013561537a816151b1565b9250606086013567ffffffffffffffff81111561539657600080fd5b6153a28882890161526f565b969995985093965092949392505050565b80356fffffffffffffffffffffffffffffffff811681146153d357600080fd5b919050565b600080604083850312156153eb57600080fd5b6153f4836153b3565b9150615402602084016153b3565b90509250929050565b61ffff811681146139b357600080fd5b6000806000806080858703121561543157600080fd5b8435935060208501356154438161518f565b925060408501356154538161540b565b915060608501356154638161540b565b939692955090935050565b60008060008060006080868803121561548657600080fd5b8535945060208601356154988161518f565b9350604086013567ffffffffffffffff8111156154b457600080fd5b6154c08882890161526f565b90945092505060608601356154d48161540b565b809150509295509295909350565b6020808252825182820181905260009190848201906040850190845b8181101561553057835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016154fe565b50909695505050505050565b60006020828403121561554e57600080fd5b6131ab826153b3565b6000806020838503121561556a57600080fd5b823567ffffffffffffffff81111561558157600080fd5b61558d8582860161526f565b90969095509350505050565b600080604083850312156155ac57600080fd5b82356155b78161518f565b915060208301356151ed8161518f565b6000602082840312156155d957600080fd5b813564ffffffffff811681146131ab57600080fd5b60006020828403121561560057600080fd5b81356131ab816151b1565b60006020828403121561561d57600080fd5b81516131ab8161518f565b6003811061565f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b73ffffffffffffffffffffffffffffffffffffffff888116825260e082019061568f602084018a615628565b6040830197909752948616606082015292909416608083015260a082015291151560c09092019190915292915050565b6000602082840312156156d157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561573f5761573f6156d8565b500290565b60008261577a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000806040838503121561579257600080fd5b825161579d8161518f565b60208401519092506151ed8161540b565b6000828210156157c0576157c06156d8565b500390565b600080604083850312156157d857600080fd5b505080516020909101519092909150565b6000602082840312156157fb57600080fd5b81516131ab816151b1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc183360301811261586957600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126158a857600080fd5b83018035915067ffffffffffffffff8211156158c357600080fd5b6020019150368190038213156152b457600080fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156159185780818660040360031b1b83161692505b505092915050565b6000808585111561593057600080fd5b8386111561593d57600080fd5b5050820193919092039150565b6000806040838503121561595d57600080fd5b82356159688161518f565b946020939093013593505050565b60008219821115615989576159896156d8565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60005b838110156159d85781810151838201526020016159c0565b838111156159e7576000848401525b50505050565b600082516158698184602087016159bd565b6020815260008251806020840152615a1e8160408501602087016159bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea2646970667358221220a3f4a705ab580a6ada1e438cd2ee4abc001b62d1d171fce12c41994900fef21664736f6c634300080a003360c06040523480156200001157600080fd5b50604051620026cf380380620026cf833981016040819052620000349162000324565b82828281600090805190602001906200004f92919062000194565b5080516200006590600190602084019062000194565b50506006805460ff19169055506001600160a01b0381166200009a57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000d9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ff9190620003a1565b6001600160a01b03166080816001600160a01b03168152505050826001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000158573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200017e9190620003a1565b6001600160a01b031660a0525062000403915050565b828054620001a290620003c6565b90600052602060002090601f016020900481019282620001c6576000855562000211565b82601f10620001e157805160ff191683800117855562000211565b8280016001018555821562000211579182015b8281111562000211578251825591602001919060010190620001f4565b506200021f92915062000223565b5090565b5b808211156200021f576000815560010162000224565b80516001600160a01b03811681146200025257600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200027f57600080fd5b81516001600160401b03808211156200029c576200029c62000257565b604051601f8301601f19908116603f01168101908282118183101715620002c757620002c762000257565b81604052838152602092508683858801011115620002e457600080fd5b600091505b83821015620003085785820183015181830184015290820190620002e9565b838211156200031a5760008385830101525b9695505050505050565b6000806000606084860312156200033a57600080fd5b62000345846200023a565b60208501519093506001600160401b03808211156200036357600080fd5b62000371878388016200026d565b935060408601519150808211156200038857600080fd5b5062000397868287016200026d565b9150509250925092565b600060208284031215620003b457600080fd5b620003bf826200023a565b9392505050565b600181811c90821680620003db57607f821691505b60208210811415620003fd57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a0516122756200045a6000396000610a9a015260008181610386015281816106db0152818161089101528181610f15015281816110010152818161115b015281816112f401526114f901526122756000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80636352211e116100f9578063a0bcfc7f11610097578063b88d4fde11610071578063b88d4fde146103a8578063c87b56dd146103b6578063e985e9c5146103c9578063fca3b5aa1461041257600080fd5b8063a0bcfc7f14610360578063a22cb46514610373578063a50cf2c81461038157600080fd5b80638456cb59116100d35780638456cb591461032a57806389406ff51461033257806395d89b41146103455780639dc29fac1461034d57600080fd5b80636352211e146102fc5780636c0360eb1461030f57806370a082311461031757600080fd5b80633f4ba83a116101665780634610f6ac116101405780634610f6ac146102b357806354fd4d50146102c6578063576cd2d1146102ce5780635c975abb146102f157600080fd5b80633f4ba83a1461029857806340c10f19146102a057806342842e0e1461028a57600080fd5b8063081812fc116101a2578063081812fc1461024b578063095ea7b31461025e57806318160ddd1461027357806323b872dd1461028a57600080fd5b806301ffc9a7146101c957806306fdde03146101f15780630754617214610206575b600080fd5b6101dc6101d7366004611cc6565b610425565b60405190151581526020015b60405180910390f35b6101f961050a565b6040516101e89190611d38565b6008546102269073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e8565b610226610259366004611d89565b61059c565b61027161026c366004611dc7565b61067b565b005b61027c60075481565b6040519081526020016101e8565b61027161026c366004611df3565b6102716106ad565b6102716102ae366004611dc7565b61079b565b6102716102c1366004611e34565b610863565b61027c600181565b6101dc6102dc366004611e34565b60096020526000908152604090205460ff1681565b60065460ff166101dc565b61022661030a366004611d89565b610cd9565b6101f9610d8b565b61027c610325366004611e34565b610e19565b610271610ee7565b610271610340366004611e34565b610fd3565b6101f9611103565b61027161035b366004611dc7565b611112565b61027161036e366004611e51565b6112c6565b61027161026c366004611ed1565b6102267f000000000000000000000000000000000000000000000000000000000000000081565b61027161026c366004611f39565b6101f96103c4366004611d89565b6113bb565b6101dc6103d7366004612037565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205460ff1690565b610271610420366004611e34565b6114cb565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd0000000000000000000000000000000000000000000000000000000014806104b857507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061050457507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60606000805461051990612065565b80601f016020809104026020016040519081016040528092919081815260200182805461054590612065565b80156105925780601f1061056757610100808354040283529160200191610592565b820191906000526020600020905b81548152906001019060200180831161057557829003601f168201915b5050505050905090565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff16610652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084015b60405180910390fd5b5060009081526004602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b6040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa158015610737573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075b91906120b9565b610791576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107996115f6565b565b60085473ffffffffffffffffffffffffffffffffffffffff1633146107ec576040517f5c2967f500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006107f783610e19565b905060005b82811015610846576000816108278473ffffffffffffffffffffffffffffffffffffffff8816612105565b6108319190612105565b905061083d85826116d7565b506001016107fc565b5081600760008282546108599190612105565b9091555050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156108ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091191906120b9565b610947576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163b610995576040517f9c01f6a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff1663c12c21c06040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610a1c575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610a199181019061211d565b60015b610a52576040517f9c01f6a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f6fbc6f6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192507f000000000000000000000000000000000000000000000000000000000000000090911690636fbc6f6b90602401602060405180830381865afa158015610ae3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0791906120b9565b1580610bad57503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16639408b63f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b94919061211d565b73ffffffffffffffffffffffffffffffffffffffff1614155b80610c5257508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c39919061211d565b73ffffffffffffffffffffffffffffffffffffffff1614155b15610c89576040517f9c01f6a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff16600090815260096020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff1680610504576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e00000000000000000000000000000000000000000000006064820152608401610649565b600a8054610d9890612065565b80601f0160208091040260200160405190810160405280929190818152602001828054610dc490612065565b8015610e115780601f10610de657610100808354040283529160200191610e11565b820191906000526020600020905b815481529060010190602001808311610df457829003601f168201915b505050505081565b600073ffffffffffffffffffffffffffffffffffffffff8216610ebe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152608401610649565b5073ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015610f71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9591906120b9565b610fcb576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610799611899565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561105d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108191906120b9565b6110b7576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff16600090815260096020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b60606001805461051990612065565b3360009081526009602052604090205460ff161580156111dd57506040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156111b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111db91906120b9565b155b15611214576040517f1e0d048500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061121f83610e19565b90508181101561125b576040517f90c9142d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b828110156112b357600060018261128b8573ffffffffffffffffffffffffffffffffffffffff8916612105565b611295919061213a565b61129f919061213a565b90506112aa81611959565b5060010161125e565b508160076000828254610859919061213a565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611350573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137491906120b9565b6113aa576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113b6600a8383611c0f565b505050565b60008181526002602052604090205460609073ffffffffffffffffffffffffffffffffffffffff1661146f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006064820152608401610649565b6000611479611a26565b9050600081511161149957604051806020016040528060008152506114c4565b806114a384611a35565b6040516020016114b4929190612151565b6040516020818303038152906040525b9392505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611555573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157991906120b9565b6115af576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60065460ff16611662576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610649565b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b73ffffffffffffffffffffffffffffffffffffffff8216611754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610649565b60008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff16156117e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610649565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805460019290611816908490612105565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60065460ff1615611906576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610649565b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586116ad3390565b600061196482610cd9565b9050611971600083611b6f565b73ffffffffffffffffffffffffffffffffffffffff811660009081526003602052604081208054600192906119a790849061213a565b909155505060008281526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555183919073ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6060600a805461051990612065565b606081611a7557505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611a9f5780611a8981612180565b9150611a989050600a836121e8565b9150611a79565b60008167ffffffffffffffff811115611aba57611aba611f0a565b6040519080825280601f01601f191660200182016040528015611ae4576020820181803683370190505b5090505b8415611b6757611af960018361213a565b9150611b06600a866121fc565b611b11906030612105565b60f81b818381518110611b2657611b26612210565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611b60600a866121e8565b9450611ae8565b949350505050565b600081815260046020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091558190611bc982610cd9565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b828054611c1b90612065565b90600052602060002090601f016020900481019282611c3d5760008555611ca1565b82601f10611c74578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00823516178555611ca1565b82800160010185558215611ca1579182015b82811115611ca1578235825591602001919060010190611c86565b50611cad929150611cb1565b5090565b5b80821115611cad5760008155600101611cb2565b600060208284031215611cd857600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146114c457600080fd5b60005b83811015611d23578181015183820152602001611d0b565b83811115611d32576000848401525b50505050565b6020815260008251806020840152611d57816040850160208701611d08565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b600060208284031215611d9b57600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff81168114611dc457600080fd5b50565b60008060408385031215611dda57600080fd5b8235611de581611da2565b946020939093013593505050565b600080600060608486031215611e0857600080fd5b8335611e1381611da2565b92506020840135611e2381611da2565b929592945050506040919091013590565b600060208284031215611e4657600080fd5b81356114c481611da2565b60008060208385031215611e6457600080fd5b823567ffffffffffffffff80821115611e7c57600080fd5b818501915085601f830112611e9057600080fd5b813581811115611e9f57600080fd5b866020828501011115611eb157600080fd5b60209290920196919550909350505050565b8015158114611dc457600080fd5b60008060408385031215611ee457600080fd5b8235611eef81611da2565b91506020830135611eff81611ec3565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060008060808587031215611f4f57600080fd5b8435611f5a81611da2565b93506020850135611f6a81611da2565b925060408501359150606085013567ffffffffffffffff80821115611f8e57600080fd5b818701915087601f830112611fa257600080fd5b813581811115611fb457611fb4611f0a565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715611ffa57611ffa611f0a565b816040528281528a602084870101111561201357600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000806040838503121561204a57600080fd5b823561205581611da2565b91506020830135611eff81611da2565b600181811c9082168061207957607f821691505b602082108114156120b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156120cb57600080fd5b81516114c481611ec3565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115612118576121186120d6565b500190565b60006020828403121561212f57600080fd5b81516114c481611da2565b60008282101561214c5761214c6120d6565b500390565b60008351612163818460208801611d08565b835190830190612177818360208801611d08565b01949350505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156121b2576121b26120d6565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826121f7576121f76121b9565b500490565b60008261220b5761220b6121b9565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea2646970667358221220ffdd83a2fc9a158347ca248f021e63fcef3a7985b3deb793f75cd1835b068aab64736f6c634300080a003360a060405234801561001057600080fd5b506040516106ca3803806106ca83398101604081905261002f9161006c565b60009190915560ff166080526001805460506001600160501b031991821681179092556004805490911690911790554260028190556003556100a2565b6000806040838503121561007f57600080fd5b82519150602083015160ff8116811461009757600080fd5b809150509250929050565b60805161060e6100bc600039600060d3015261060e6000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80639a6fc8f511610081578063d62ada111161005b578063d62ada11146102dc578063f7a30806146102f4578063feaf968c1461030757600080fd5b80639a6fc8f5146101cd578063bd18ad531461023a578063cd653afc1461024d57600080fd5b806354fd4d50116100b257806354fd4d501461012d57806367e8d83d1461013c5780637284e4161461018e57600080fd5b8063313ce567146100ce5780633fd0875f1461010c575b600080fd5b6100f57f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020015b60405180910390f35b6004546a0100000000000000000000900460ff166040516101039190610441565b60405160018152602001610103565b61018c61014a366004610482565b600480549115156c01000000000000000000000000027fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff909216919091179055565b005b604080518082018252600c81527f7072696365206f7261636c6500000000000000000000000000000000000000006020820152905161010391906104ab565b6102036101db36600461053d565b60015460005460025460035460045469ffffffffffffffffffff948516941691939590929450565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610103565b61018c610248366004610558565b61030f565b61018c61025b366004610579565b6001805469ffffffffffffffffffff9586167fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090911617905560029290925560035560048054919092167fffffffffffffffffffffffffffffffffffffffff00ff00000000000000000000909116176b020000000000000000000000179055565b6102e461035f565b6040519015158152602001610103565b61018c6103023660046105bf565b600055565b610203610385565b600480548291907fffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff166b01000000000000000000000083600281111561035757610357610412565b021790555050565b600454600090610380906b010000000000000000000000900460ff166103d6565b905090565b60008060008060006004600c9054906101000a900460ff16156103a757600080fd5b505060015460005460025460035460045469ffffffffffffffffffff9485169893975091955093509190911690565b600060028260028111156103ec576103ec610412565b14156103f757600080fd5b600182600281111561040b5761040b610412565b1492915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016006831061047c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561049457600080fd5b813580151581146104a457600080fd5b9392505050565b600060208083528351808285015260005b818110156104d8578581018301518582016040015282016104bc565b818111156104ea576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803569ffffffffffffffffffff8116811461053857600080fd5b919050565b60006020828403121561054f57600080fd5b6104a48261051e565b60006020828403121561056a57600080fd5b8135600381106104a457600080fd5b6000806000806080858703121561058f57600080fd5b6105988561051e565b935060208501359250604085013591506105b46060860161051e565b905092959194509250565b6000602082840312156105d157600080fd5b503591905056fea264697066735822122014874f7a973b86501c4c1a8be32490fe902c8f088ee234d25f9b2497e19f9e5264736f6c634300080a0033a2646970667358221220d8fdaadc825c43ac2783715ebcfe33e7b0ce3a396ac7717d65e4c95e98b6cf7f64736f6c634300080a003360806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d000117905534801561003957600080fd5b50600054604080516318caf8e360e31b815273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660048083019190915260248201929092526044810191909152632aa9a2a960e11b6064820152620100009091046001600160a01b03169063c657c71890608401600060405180830381600087803b1580156100ba57600080fd5b505af11580156100ce573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b81527390f79bf6eb2c4f870365e785982e1f101e93b90660048201526024810191909152600660448201526511949251539160d21b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561014f57600080fd5b505af1158015610163573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b8152733c44cdddb6a900fa2b585dd299e03d12fa4293bc60048201526024810191909152600a6044820152692624a8aaa4a220aa27a960b11b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b1580156101e857600080fd5b505af11580156101fc573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b815273c4375b7de8af5a38a93548eb8453a498222c4ff260048201526024810191909152600c60448201526b44554d425f4144445245535360a01b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561028357600080fd5b505af1158015610297573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b8152739965507d1a55bcc2695c58ba16fb37d819b0a4dc60048201526024810191909152600760448201526620a220a82a22a960c91b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561031957600080fd5b505af115801561032d573d6000803e3d6000fd5b505050506102a6806103406000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063ba414fa61461003b578063fa7626d414610057575b600080fd5b610043610064565b604051901515815260200160405180910390f35b6000546100439060ff1681565b60008054610100900460ff16156100845750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156101bf5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610129917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016101ff565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526101619161023b565b6000604051808303816000865af19150503d806000811461019e576040519150601f19603f3d011682016040523d82523d6000602084013e6101a3565b606091505b50915050808060200190518101906101bb919061024e565b9150505b919050565b6000815160005b818110156101e557602081850181015186830152016101cb565b818111156101f4576000828601525b509290920192915050565b7fffffffff0000000000000000000000000000000000000000000000000000000083168152600061023360048301846101c4565b949350505050565b600061024782846101c4565b9392505050565b60006020828403121561026057600080fd5b8151801515811461024757600080fdfea2646970667358221220293f55a0ef7b60c31a89dbc50e3339c80a8fdb1f9567614b200e97598226671f64736f6c634300080a003360806040523480156200001157600080fd5b506040516201110538038062011105833981016040819052620000349162000811565b6200003f3362000734565b6040516200004d9062000784565b604051809103906000f0801580156200006a573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b039283169081179091556040516310dc138160e31b81529184166004830152906386e09c0890602401600060405180830381600087803b158015620000c457600080fd5b505af1158015620000d9573d6000803e3d6000fd5b50506001546040516301ed651160e41b81526001600160a01b0385811660048301529091169250631ed651109150602401600060405180830381600087803b1580156200012557600080fd5b505af11580156200013a573d6000803e3d6000fd5b505050506040516200014c9062000792565b604051809103906000f08015801562000169573d6000803e3d6000fd5b50600280546001600160a01b0319166001600160a01b039283169081179091556001546040516376aad60560e01b81526004810192909252909116906376aad60590602401600060405180830381600087803b158015620001c957600080fd5b505af1158015620001de573d6000803e3d6000fd5b5050600154604051600093506001600160a01b0390911691506200020290620007a0565b6001600160a01b039091168152602001604051809103906000f0801580156200022f573d6000803e3d6000fd5b5060015460405163338f12b960e21b81526001600160a01b03808416600483015292935091169063ce3c4ae490602401600060405180830381600087803b1580156200027a57600080fd5b505af11580156200028f573d6000803e3d6000fd5b5050600154604051600093506001600160a01b039091169150620002b390620007ae565b6001600160a01b039091168152602001604051809103906000f080158015620002e0573d6000803e3d6000fd5b5060015460405163c5120b3960e01b81526001600160a01b03808416600483015292935091169063c5120b3990602401600060405180830381600087803b1580156200032b57600080fd5b505af115801562000340573d6000803e3d6000fd5b5050600154604051606093506001600160a01b03909116915082906200036690620007bc565b6200037392919062000849565b604051809103906000f08015801562000390573d6000803e3d6000fd5b50600380546001600160a01b0319166001600160a01b0392831690811790915560015460405163530e784f60e01b815260048101929092529091169063530e784f90602401600060405180830381600087803b158015620003f057600080fd5b505af115801562000405573d6000803e3d6000fd5b5050600154604051600093506001600160a01b0390911691506200042990620007ca565b6001600160a01b039091168152602001604051809103906000f08015801562000456573d6000803e3d6000fd5b506001546040516356ee0d3b60e11b81526001600160a01b03808416600483015292935091169063addc1a7690602401600060405180830381600087803b158015620004a157600080fd5b505af1158015620004b6573d6000803e3d6000fd5b5050600154604051600093506001600160a01b039091169150620004da90620007d8565b6001600160a01b039091168152602001604051809103906000f08015801562000507573d6000803e3d6000fd5b506001546040516321da583760e01b81526001600160a01b0380841660048301529293509116906321da583790602401600060405180830381600087803b1580156200055257600080fd5b505af115801562000567573d6000803e3d6000fd5b505050506000306040516200057c90620007e6565b6001600160a01b039091168152602001604051809103906000f080158015620005a9573d6000803e3d6000fd5b50600154604051631795d5b360e31b81526001600160a01b03808416600483015292935091169063bcaead9890602401600060405180830381600087803b158015620005f457600080fd5b505af115801562000609573d6000803e3d6000fd5b505060405163f2fde38b60e01b81523360048201526001600160a01b038416925063f2fde38b9150602401600060405180830381600087803b1580156200064f57600080fd5b505af115801562000664573d6000803e3d6000fd5b505060015460405163f2fde38b60e01b81523360048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b158015620006ae57600080fd5b505af1158015620006c3573d6000803e3d6000fd5b505060025460405163f2fde38b60e01b81523360048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b1580156200070d57600080fd5b505af115801562000722573d6000803e3d6000fd5b505050505050505050505050620008b2565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610fcd80620010dd83390190565b61098c80620020aa83390190565b610f508062002a3683390190565b614da6806200398683390190565b611b45806200872c83390190565b612ced806200a27183390190565b611627806200cf5e83390190565b612b80806200e58583390190565b80516001600160a01b03811681146200080c57600080fd5b919050565b600080604083850312156200082557600080fd5b6200083083620007f4565b91506200084060208401620007f4565b90509250929050565b6001600160a01b0383811682526040602080840182905284518483018190526000938683019290916060870190865b81811015620008a3578551805186168452840151851684840152948301949186019160010162000878565b50909998505050505050505050565b61081b80620008c26000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80638874ff1f1161005b5780638874ff1f146100f55780638da5cb5b14610108578063de28735914610126578063f2fde38b1461014657600080fd5b80632630c12f146100825780632954018c146100cb578063715018a6146100eb575b600080fd5b6003546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6001546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b6100f3610159565b005b6100f3610103366004610658565b6101eb565b60005473ffffffffffffffffffffffffffffffffffffffff166100a2565b6002546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b6100f3610154366004610734565b6103e3565b60005473ffffffffffffffffffffffffffffffffffffffff1633146101df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6101e96000610513565b565b60005473ffffffffffffffffffffffffffffffffffffffff16331461026c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101d6565b60005b815181101561035c57600354825173ffffffffffffffffffffffffffffffffffffffff9091169063e8a97a3e908490849081106102ae576102ae610756565b6020026020010151600001518484815181106102cc576102cc610756565b6020026020010151602001516040518363ffffffff1660e01b815260040161031792919073ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b600060405180830381600087803b15801561033157600080fd5b505af1158015610345573d6000803e3d6000fd5b50505050808061035490610785565b91505061026f565b506002546040517ff2fde38b00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063f2fde38b90602401600060405180830381600087803b1580156103c857600080fd5b505af11580156103dc573d6000803e3d6000fd5b5050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101d6565b73ffffffffffffffffffffffffffffffffffffffff8116610507576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016101d6565b61051081610513565b50565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156105da576105da610588565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561062757610627610588565b604052919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461065357600080fd5b919050565b6000602080838503121561066b57600080fd5b823567ffffffffffffffff8082111561068357600080fd5b818501915085601f83011261069757600080fd5b8135818111156106a9576106a9610588565b6106b7848260051b016105e0565b818152848101925060069190911b8301840190878211156106d757600080fd5b928401925b8184101561072957604084890312156106f55760008081fd5b6106fd6105b7565b6107068561062f565b815261071386860161062f565b81870152835260409390930192918401916106dc565b979650505050505050565b60006020828403121561074657600080fd5b61074f8261062f565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156107de577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea26469706673582212205ee75e57bb635aa49a1758f4ab0b04182a73115bff08f420c56a8ddb433c029364736f6c634300080a0033608060405234801561001057600080fd5b5061001a3361005f565b60405130906f20a2222922a9a9afa82927ab24a222a960811b907fb37614c7d254ea8d16eb81fa11dddaeb266aa8ba4917980859c7740aff30c69190600090a36100af565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610f0f806100be6000396000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c806377532ed9116100e3578063bcaead981161008c578063ce3c4ae411610066578063ce3c4ae414610308578063f2fde38b1461031b578063fca513a81461032e57600080fd5b8063bcaead98146102da578063c5120b39146102ed578063c513c9bb1461030057600080fd5b80639068a868116100bd5780639068a868146102b7578063addc1a76146102bf578063affd9243146102d257600080fd5b806377532ed91461027e57806386e09c08146102865780638da5cb5b1461029957600080fd5b80634c252f9111610145578063699f200f1161011f578063699f200f1461022d578063715018a61461026357806376aad6051461026b57600080fd5b80634c252f91146101fc578063530e784f1461020457806354fd4d501461021757600080fd5b80631ed65110116101765780631ed65110146101cc57806321da5837146101e157806326c74fc3146101f457600080fd5b8063060678c21461019257806308737695146101c4575b600080fd5b61019a610336565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61019a610366565b6101df6101da366004610e10565b610391565b005b6101df6101ef366004610e10565b610444565b61019a6104ef565b61019a61051a565b6101df610212366004610e10565b610545565b61021f600281565b6040519081526020016101bb565b61019a61023b366004610e4d565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6101df6105f0565b6101df610279366004610e10565b61067d565b61019a610728565b6101df610294366004610e10565b610753565b60005473ffffffffffffffffffffffffffffffffffffffff1661019a565b61019a6107fe565b6101df6102cd366004610e10565b610829565b61019a6108d4565b6101df6102e8366004610e10565b6108ff565b6101df6102fb366004610e10565b6109aa565b61019a610a55565b6101df610316366004610e10565b610a80565b6101df610329366004610e10565b610b2b565b61019a610c58565b60006103617f444154415f434f4d50524553534f520000000000000000000000000000000000610c7f565b905090565b60006103617f41434c0000000000000000000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610417576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6104417f54524541535552595f434f4e545241435400000000000000000000000000000082610d1d565b50565b60005473ffffffffffffffffffffffffffffffffffffffff1633146104c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f574554485f47415445574159000000000000000000000000000000000000000082610d1d565b60006103617f54524541535552595f434f4e5452414354000000000000000000000000000000610c7f565b60006103617f574554485f544f4b454e00000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f50524943455f4f5241434c45000000000000000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610671576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b61067b6000610d9b565b565b60005473ffffffffffffffffffffffffffffffffffffffff1633146106fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f41434c000000000000000000000000000000000000000000000000000000000082610d1d565b60006103617f574554485f474154455741590000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146107d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f574554485f544f4b454e0000000000000000000000000000000000000000000082610d1d565b60006103617f4143434f554e545f464143544f52590000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146108aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f4143434f554e545f464143544f5259000000000000000000000000000000000082610d1d565b60006103617f474541525f544f4b454e00000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610980576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f474541525f544f4b454e0000000000000000000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f444154415f434f4d50524553534f52000000000000000000000000000000000082610d1d565b60006103617f434f4e5452414354535f52454749535445520000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610b01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f434f4e5452414354535f5245474953544552000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610bac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b73ffffffffffffffffffffffffffffffffffffffff8116610c4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161040e565b61044181610d9b565b60006103617f50524943455f4f5241434c4500000000000000000000000000000000000000005b6000818152600160209081526040808320548151808301909252600382527f41503100000000000000000000000000000000000000000000000000000000009282019290925273ffffffffffffffffffffffffffffffffffffffff9091169081610d16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040e9190610e66565b5092915050565b60008281526001602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091559051909184917fb37614c7d254ea8d16eb81fa11dddaeb266aa8ba4917980859c7740aff30c6919190a35050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215610e2257600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610e4657600080fd5b9392505050565b600060208284031215610e5f57600080fd5b5035919050565b600060208083528351808285015260005b81811015610e9357858101830151858201604001528201610e77565b81811115610ea5576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea264697066735822122083c228af017c6f5cf8c395cdf7a53276ff56fdd4f4313c39f680ab73bd75417364736f6c634300080a0033608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61090e8061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063732818191161008c578063adce758d11610066578063adce758d14610215578063ba306df114610228578063d4eb5db01461023b578063f2fde38b1461027457600080fd5b806373281819146101b7578063819ad68e146101da5780638da5cb5b146101ed57600080fd5b806354fd4d50116100bd57806354fd4d501461016a5780635f259aba14610180578063715018a6146101af57600080fd5b806335914829146100e45780633a41ec641461011c5780634910832f14610155575b600080fd5b6101076100f236600461089b565b60016020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61010761012a36600461089b565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205460ff1690565b61016861016336600461089b565b610287565b005b610172600181565b604051908152602001610113565b61010761018e36600461089b565b60005473ffffffffffffffffffffffffffffffffffffffff91821691161490565b610168610387565b6101076101c536600461089b565b60026020526000908152604090205460ff1681565b6101686101e836600461089b565b610414565b60005460405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610113565b61016861022336600461089b565b61050c565b61016861023636600461089b565b610601565b61010761024936600461089b565b73ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205460ff1690565b61016861028236600461089b565b6106f6565b60005473ffffffffffffffffffffffffffffffffffffffff16331461030d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909217909155517fae26b1cfe9454ba87274a4e8330b6654684362d0f3d7bbd17f7449a1d38387c69190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610408576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b6104126000610826565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517fd400da6c0c0a894dacc0981730b88af0545d00272ee8fff1437bf560ff245fc49190a250565b60005473ffffffffffffffffffffffffffffffffffffffff16331461058d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f1998397e7203f7baca9d6f41b9e4da6e768daac5caad4234fb9bf5869d2715459190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610682576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526001602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f28b01395b7e25d20552a0c8dc8ecd3b1d4abc986f14dad7885fd45b6fd73c8d99190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811661081a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610304565b61082381610826565b50565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156108ad57600080fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146108d157600080fd5b939250505056fea26469706673582212204712efbfe997070def77285a5b8753bc882b62da2133ce1937ad26cd2b48e49864736f6c634300080a003360a060405234801561001057600080fd5b50604051610f50380380610f5083398101604081905261002f916100d7565b6000805460ff19169055806001600160a01b03811661006157604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa15801561009f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100c391906100d7565b6001600160a01b0316608052506101079050565b6000602082840312156100e957600080fd5b81516001600160a01b038116811461010057600080fd5b9392505050565b608051610e1261013e600039600081816101e2015281816102b20152818161040f0152818161057801526108510152610e126000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80638456cb5911610097578063b4ac686011610066578063b4ac686014610217578063c29277cd1461021f578063d914cd4b14610227578063e26b2f631461023a57600080fd5b80638456cb59146101cd57806394144856146101d5578063a50cf2c8146101dd578063ac4afa381461020457600080fd5b80635b16ebb7116100d35780635b16ebb7146101575780635c975abb1461018a578063673a2a1f146101955780636fbc6f6b146101aa57600080fd5b80631e16e4fc146100fa5780633f4ba83a1461013757806354fd4d5014610141575b600080fd5b61010d610108366004610c97565b61024d565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61013f610284565b005b610149600181565b60405190815260200161012e565b61017a610165366004610cb0565b60026020526000908152604090205460ff1681565b604051901515815260200161012e565b60005460ff1661017a565b61019d610372565b60405161012e9190610ced565b61017a6101b8366004610cb0565b60046020526000908152604090205460ff1681565b61013f6103e1565b61019d6104cd565b61010d7f000000000000000000000000000000000000000000000000000000000000000081565b61010d610212366004610c97565b61053a565b600154610149565b600354610149565b61013f610235366004610cb0565b61054a565b61013f610248366004610cb0565b610823565b6003818154811061025d57600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa15801561030e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103329190610d47565b610368576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610370610af6565b565b606060018054806020026020016040519081016040528092919081815260200182805480156103d757602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116103ac575b5050505050905090565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561046b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048f9190610d47565b6104c5576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610370610bd7565b606060038054806020026020016040519081016040528092919081815260200182805480156103d75760200282019190600052602060002090815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116103ac575050505050905090565b6001818154811061025d57600080fd5b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156105d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f89190610d47565b61062e576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051808201909152600281527f5a30000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff82166106b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b60405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff8116600090815260026020908152604091829020548251808401909352600383527f43523100000000000000000000000000000000000000000000000000000000009183019190915260ff1615610753576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b506001805480820182557fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915560008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909417909355915190917ff816b5143086c89d103a0683286be86c2b741e83ebfa75135aae606e2f5c6e5391a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156108ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d19190610d47565b610907576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051808201909152600281527f5a30000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8216610989576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b5073ffffffffffffffffffffffffffffffffffffffff8116600090815260046020908152604091829020548251808401909352600383527f43523200000000000000000000000000000000000000000000000000000000009183019190915260ff1615610a23576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b506003805460018082019092557fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915560008181526004602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909417909355915190917f58ad3cfc4b6552a53c8c4128ae9b080e14b4378a159280643a62c6f709cee24f91a250565b60005460ff16610b62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016106b0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff1615610c44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016106b0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610bad3390565b600060208284031215610ca957600080fd5b5035919050565b600060208284031215610cc257600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610ce657600080fd5b9392505050565b6020808252825182820181905260009190848201906040850190845b81811015610d3b57835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101610d09565b50909695505050505050565b600060208284031215610d5957600080fd5b81518015158114610ce657600080fd5b600060208083528351808285015260005b81811015610d9657858101830151858201604001528201610d7a565b81811115610da8576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea26469706673582212208f2d91c863db9ab1494a9c5db20e3fddc4b6c779ea3c3621737c105c60d9440a64736f6c634300080a003360e06040523480156200001157600080fd5b5060405162004da638038062004da6833981016040819052620000349162000160565b6001600160a01b0381166200005c57604051635919af9760e11b815260040160405180910390fd5b6001600160a01b03811660808190526040805163c513c9bb60e01b8152905163c513c9bb916004808201926020929091908290030181865afa158015620000a7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cd919062000160565b6001600160a01b031660a0816001600160a01b0316815250506080516001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000127573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200014d919062000160565b6001600160a01b031660c0525062000192565b6000602082840312156200017357600080fd5b81516001600160a01b03811681146200018b57600080fd5b9392505050565b60805160a05160c051614b896200021d6000396000818161018801528181611c4f0152612c5a0152600081816101ed015281816115e201528181611f5f0152818161213f0152818161223f0152818161243801528181612604015281816126bc01528181612788015281816129a501528181613c410152613d000152600061013c0152614b896000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c806354fd4d5011610081578063a80deda31161005b578063a80deda31461020f578063ae093f3f1461022f578063fc9914cb1461024f57600080fd5b806354fd4d50146101bd578063663b8fdb146101d35780637a0c7b21146101e857600080fd5b80632954018c116100b25780632954018c146101375780634b2f336d146101835780634c472fc9146101aa57600080fd5b80630dbd616d146100d957806313d21cdf146101025780631bcd8fc014610122575b600080fd5b6100ec6100e73660046140fc565b610272565b6040516100f9919061430b565b60405180910390f35b61011561011036600461431e565b6114d4565b6040516100f99190614444565b61012a611f59565b6040516100f99190614453565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100f9565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b61015e6101b83660046140fc565b6121f5565b6101c5600281565b6040519081526020016100f9565b6101db612432565b6040516100f991906146ea565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b61022261021d36600461431e565b6126b5565b6040516100f9919061476a565b61024261023d36600461431e565b612a75565b6040516100f991906147dd565b61026261025d3660046140fc565b613bf7565b60405190151581526020016100f9565b61035f604051806102400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160008152602001606081526020016000815260200160008152602001600015158152602001600081526020016000815260200160008152602001600060ff168152602001600081525090565b600080600080600061037088613cf4565b509450945094509450945060008560ff1660011461041d576040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015284169063e958b70490602401602060405180830381865afa1580156103f4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061041891906147f0565b6104ad565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015286169063e958b70490602401602060405180830381865afa158015610489573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ad91906147f0565b60ff8716610200890181905273ffffffffffffffffffffffffffffffffffffffff808b1660208b01528b811660608b015282168952909150600114156109e9578473ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610538573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055c91906147f0565b73ffffffffffffffffffffffffffffffffffffffff90811660808901526040517fc7de38a600000000000000000000000000000000000000000000000000000000815282821660048201529085169063c7de38a690602401602060405180830381865afa1580156105d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f5919061480d565b60c08801526040517fdfd5946500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015285169063dfd5946590602401602060405180830381865afa158015610666573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068a919061480d565b60e08801526040517f3ce0735500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015260006024830152861690633ce0735590604401602060405180830381865afa92505050801561073c575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526107399181019061480d565b60015b6107455761074c565b6101408801525b6040517f3ce0735500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015260016024830152861690633ce0735590604401602060405180830381865afa9250505080156107f9575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526107f69181019061480d565b60015b61080257610809565b6101608801525b60c08701516040517f996329f800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526024820192909252600060448201529086169063996329f89060640160a060405180830381865afa9250505080156108c4575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526108c191810190614826565b60015b6108cd576108da565b505015156101808a015250505b8073ffffffffffffffffffffffffffffffffffffffff16631afbb7a46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610925573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610949919061480d565b6101a08801526040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152851690633192195c90602401602060405180830381865afa1580156109bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109df919061480d565b60a0880152610c26565b8273ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5891906147f0565b73ffffffffffffffffffffffffffffffffffffffff90811660808901526040517fc7de38a600000000000000000000000000000000000000000000000000000000815282821660048201529083169063c7de38a6906024016040805180830381865afa158015610acc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af09190614866565b5060c08801526040517fdfd5946500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015283169063dfd5946590602401602060405180830381865afa158015610b62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b86919061480d565b60e08801526040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152841690633192195c906024016040805180830381865afa158015610bf6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1a9190614866565b60a08901526101a08801525b60008660ff16600114610ca7578373ffffffffffffffffffffffffffffffffffffffff166316f0115b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca291906147f0565b610d16565b8573ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1691906147f0565b90508073ffffffffffffffffffffffffffffffffffffffff166345d31f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d87919061480d565b6101008901526000600160ff891614610e0e578473ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610de5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e09919061480d565b610e7d565b8573ffffffffffffffffffffffffffffffffffffffff166320a05ff76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7d919061480d565b90508760ff16600114610f1f576040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152861690638991b2f190602401602060405180830381865afa158015610ef6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1a919061480d565b610faf565b6040517fb451cecc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015287169063b451cecc90602401602060405180830381865afa158015610f8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610faf919061480d565b6102208a01528067ffffffffffffffff811115610fce57610fce61488a565b60405190808252806020026020018201604052801561103e57816020015b6040805160808101825260008082526020808301829052928201819052606082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181610fec5790505b506101208a015260005b818110156113d657604080516080810182526000808252602082018190529181018290526060810191909152600180831b9060ff8c1614156111c5576040517faf0a650200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018590528a169063af0a650290604401608060405180830381865afa1580156110f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111b91906148b9565b5050602084015273ffffffffffffffffffffffffffffffffffffffff9081168084526040517ff9eaee0d0000000000000000000000000000000000000000000000000000000081526004810191909152908a169063f9eaee0d90602401602060405180830381865afa158015611195573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b9919061490d565b15156040830152611388565b6040517f172c48c70000000000000000000000000000000000000000000000000000000081526004810184905273ffffffffffffffffffffffffffffffffffffffff89169063172c48c7906024016040805180830381865afa15801561122f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112539190614928565b5073ffffffffffffffffffffffffffffffffffffffff9081168084526040517f70a082310000000000000000000000000000000000000000000000000000000081529188166004830152906370a0823190602401602060405180830381865afa1580156112c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e8919061480d565b602083015281516040517ff9eaee0d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529088169063f9eaee0d90602401602060405180830381865afa15801561135c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611380919061490d565b151560408301525b6102208c015181161561139c57600161139f565b60005b151560608301526101208c01518051839190859081106113c1576113c161495e565b60209081029190910101525050600101611048565b508273ffffffffffffffffffffffffffffffffffffffff166317d11a156040518163ffffffff1660e01b8152600401602060405180830381865afa158015611422573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611446919061480d565b896101c00181815250508273ffffffffffffffffffffffffffffffffffffffff16633dc54b406040518163ffffffff1660e01b8152600401602060405180830381865afa15801561149b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bf919061480d565b6101e08a015250969998505050505050505050565b61159b604051806102000160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600060ff1681525090565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015283917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa15801561162b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164f919061490d565b611685576040517fd384b23800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316808352604080517ffe14112d000000000000000000000000000000000000000000000000000000008152905185929163fe14112d9160048083019260209291908290030181865afa1580156116f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611719919061480d565b8360c00181815250508073ffffffffffffffffffffffffffffffffffffffff1663ef8d96036040518163ffffffff1660e01b8152600401602060405180830381865afa15801561176d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611791919061480d565b8360e00181815250508073ffffffffffffffffffffffffffffffffffffffff1663743753596040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611809919061480d565b8360a00181815250508073ffffffffffffffffffffffffffffffffffffffff16634c19386c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561185d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611881919061480d565b836101000181815250508073ffffffffffffffffffffffffffffffffffffffff1663788c6bfe6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fa919061480d565b836101600181815250508073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561194f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611973919061480d565b8360800181815250508073ffffffffffffffffffffffffffffffffffffffff166345d31f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119eb919061480d565b836101400181815250508073ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6491906147f0565b836040019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff166336dda7d56040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0a91906147f0565b836060019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663788c6bfe6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb0919061480d565b836101600181815250508073ffffffffffffffffffffffffffffffffffffffff1663e941fa786040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c29919061480d565b61018084015260408084015173ffffffffffffffffffffffffffffffffffffffff9081167f000000000000000000000000000000000000000000000000000000000000000082161460208087019190915282517f609ae31700000000000000000000000000000000000000000000000000000000815292519184169263609ae31792600480830193928290030181865afa158015611ccb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cef919061480d565b836101c00181815250508073ffffffffffffffffffffffffffffffffffffffff1663dbcb313b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d68919061480d565b836101a00181815250506000836060015173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de7919061480d565b6040517f5427c9380000000000000000000000000000000000000000000000000000000081526004810182905290915060009073ffffffffffffffffffffffffffffffffffffffff841690635427c93890602401602060405180830381865afa158015611e58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7c919061480d565b90508015611ec7576101808501518190611eb890611e9c906127106149bc565b876101000151886101400151611eb291906149d3565b90613fd0565b611ec29190614a3f565b611ece565b8461014001515b856101200181815250508273ffffffffffffffffffffffffffffffffffffffff166354fd4d506040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f47919061480d565b60ff166101e086015250505050919050565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b4ac68606040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fec919061480d565b90508067ffffffffffffffff8111156120075761200761488a565b6040519080825280602002602001820160405280156120ff57816020015b6120ec604051806102000160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600060ff1681525090565b8152602001906001900390816120255790505b50915060005b818110156121f0576040517fac4afa38000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ac4afa3890602401602060405180830381865afa15801561219b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121bf91906147f0565b90506121ca816114d4565b8483815181106121dc576121dc61495e565b602090810291909101015250600101612105565b505090565b6040517f6fbc6f6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015260009184917f00000000000000000000000000000000000000000000000000000000000000001690636fbc6f6b90602401602060405180830381865afa158015612286573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122aa919061490d565b6122e0576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060006122ee87613cf4565b5050935093505092508260ff16600114612397576040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015282169063fdd5764590602401602060405180830381865afa15801561236e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061239291906147f0565b612427565b6040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015283169063fdd5764590602401602060405180830381865afa158015612403573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061242791906147f0565b979650505050505050565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c29277cd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124c5919061480d565b90508067ffffffffffffffff8111156124e0576124e061488a565b6040519080825280602002602001820160405280156125c457816020015b60408051610260810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083018290526101208301819052610140830181905261016083015261018082018190526101a082018190526101c082018190526101e082018190526102008201819052610220820181905261024082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816124fe5790505b50915060005b818110156121f0576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa158015612660573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061268491906147f0565b905061268f81612a75565b8483815181106126a1576126a161495e565b6020908102919091010152506001016125ca565b60606000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c29277cd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612725573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612749919061480d565b905060005b81811015612829576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa1580156127e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061280891906147f0565b90506128148187613bf7565b15612820578360010193505b5060010161274e565b508167ffffffffffffffff8111156128435761284361488a565b60405190808252806020026020018201604052801561296157816020015b61294e604051806102400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160008152602001606081526020016000815260200160008152602001600015158152602001600081526020016000815260200160008152602001600060ff168152602001600081525090565b8152602001906001900390816128615790505b5092506000915060005b81811015612a6d576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa158015612a01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a2591906147f0565b9050612a318187613bf7565b15612a6457612a408187610272565b858581518110612a5257612a5261495e565b60209081029190910101526001909301925b5060010161296b565b505050919050565b604080516102608101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082018390526101208201819052610140820181905261016082015261018081018290526101a081018290526101c081018290526101e08101829052610200810182905261022081018290526102408101829052908080808080612b1b88613cf4565b73ffffffffffffffffffffffffffffffffffffffff8e168d5260ff86166101808e01819052959b50939950919750955093509150600114612bca578273ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ba1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bc591906147f0565b612c39565b8473ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c3991906147f0565b73ffffffffffffffffffffffffffffffffffffffff908116602089018190527f00000000000000000000000000000000000000000000000000000000000000009091161460408801526000600160ff881614612d03578373ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cfe91906147f0565b612d72565b8573ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d7291906147f0565b6040517f2e97ca2100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b8116600483015291925090821690632e97ca2190602401602060405180830381865afa158015612de2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e06919061490d565b15156060890152604080517f45d31f9d000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff8316916345d31f9d9160048083019260209291908290030181865afa158015612e78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e9c919061480d565b8860800181815250508073ffffffffffffffffffffffffffffffffffffffff1663743753596040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ef0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f14919061480d565b610100890152600160ff88161415613017578573ffffffffffffffffffffffffffffffffffffffff16639b2cb5d86040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f95919061480d565b8860a00181815250508573ffffffffffffffffffffffffffffffffffffffff16635f48f3936040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fe9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061300d919061480d565b60c08901526130a5565b8273ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa158015613061573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130859190614a73565b6fffffffffffffffffffffffffffffffff90811660c08b01521660a08901525b60008760ff16600114613126578473ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613121919061480d565b613195565b8573ffffffffffffffffffffffffffffffffffffffff166320a05ff76040518163ffffffff1660e01b8152600401602060405180830381865afa158015613171573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613195919061480d565b90508067ffffffffffffffff8111156131b0576131b061488a565b6040519080825280602002602001820160405280156131d9578160200160208202803683370190505b506101208a01528067ffffffffffffffff8111156131f9576131f961488a565b604051908082528060200260200182016040528015613222578160200160208202803683370190505b506101608a015260005b818110156134c4578860ff16600114156133b4576040517f5e5f2e260000000000000000000000000000000000000000000000000000000081526004810182905260009073ffffffffffffffffffffffffffffffffffffffff891690635e5f2e2690602401602060405180830381865afa1580156132ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132d291906147f0565b9050808b610120015183815181106132ec576132ec61495e565b73ffffffffffffffffffffffffffffffffffffffff92831660209182029290920101526040517f78327438000000000000000000000000000000000000000000000000000000008152828216600482015290891690637832743890602401602060405180830381865afa158015613367573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061338b919061480d565b8b610160015183815181106133a2576133a261495e565b602002602001018181525050506134bc565b6040517f172c48c70000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff87169063172c48c7906024016040805180830381865afa15801561341e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134429190614928565b8061ffff1690508b610120015183815181106134605761346061495e565b602002602001018c6101600151848151811061347e5761347e61495e565b60200260200101828152508273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525050505b60010161322c565b5060008860ff16600114613546578373ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561351d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613541919061480d565b6135b5565b8673ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613591573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135b5919061480d565b90508067ffffffffffffffff8111156135d0576135d061488a565b60405190808252806020026020018201604052801561361557816020015b60408051808201909152600080825260208201528152602001906001900390816135ee5790505b506101408b015260005b818110156139015760408051808201909152600080825260208201528a60ff166001146136da576040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff871690635094cb4f90602401602060405180830381865afa1580156136b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136d591906147f0565b613769565b6040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff8a1690635094cb4f90602401602060405180830381865afa158015613745573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061376991906147f0565b73ffffffffffffffffffffffffffffffffffffffff168152600160ff8c16146138245780516040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529089169063fdd5764590602401602060405180830381865afa1580156137fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061381f91906147f0565b6138b7565b80516040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152908a169063fdd5764590602401602060405180830381865afa158015613893573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138b791906147f0565b73ffffffffffffffffffffffffffffffffffffffff1660208201526101408c01518051829190849081106138ed576138ed61495e565b60209081029190910101525060010161361f565b508860ff166001141561398f578773ffffffffffffffffffffffffffffffffffffffff1663b2c53a6c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613959573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061397d919061480d565b60e08b015260ff6102408b0152613be9565b73ffffffffffffffffffffffffffffffffffffffff85166101a08b01819052604080517f9408b63f0000000000000000000000000000000000000000000000000000000081529051639408b63f916004808201926020929091908290030181865afa158015613a02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a2691906147f0565b8a6101e0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508473ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015613aa9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613acd9190614aa6565b5015156102008c015250604080517f9fd12b77000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff881691639fd12b779160048083019260209291908290030181865afa158015613b42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b66919061480d565b8a6102200181815250508573ffffffffffffffffffffffffffffffffffffffff16638345f26e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bdf9190614af7565b60ff166102408b01525b505050505050505050919050565b6040517f6fbc6f6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015260009184917f00000000000000000000000000000000000000000000000000000000000000001690636fbc6f6b90602401602060405180830381865afa158015613c88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cac919061490d565b613ce2576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613cec8484614023565b949350505050565b600080600080600080867f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636fbc6f6b826040518263ffffffff1660e01b8152600401613d73919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa158015613d90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613db4919061490d565b613dea576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8773ffffffffffffffffffffffffffffffffffffffff166354fd4d506040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e59919061480d565b96508660ff1660011415613ee0578795508573ffffffffffffffffffffffffffffffffffffffff1663f93f515b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613eb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ed991906147f0565b9450613fc6565b8793508373ffffffffffffffffffffffffffffffffffffffff16632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f5291906147f0565b92508373ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fc391906147f0565b91505b5091939550919395565b6000821580613fdd575081155b15613fea5750600061401d565b612710613ff8600282614b1a565b61ffff1661400684866149d3565b6140109190614b3b565b61401a9190614a3f565b90505b92915050565b6040517f055ee9b500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600091829185169063055ee9b590602401602060405180830381865afa158015614094573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140b891906147f0565b73ffffffffffffffffffffffffffffffffffffffff1614159392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146140f957600080fd5b50565b6000806040838503121561410f57600080fd5b823561411a816140d7565b9150602083013561412a816140d7565b809150509250929050565b600081518084526020808501945080840160005b8381101561419f578151805173ffffffffffffffffffffffffffffffffffffffff168852838101518489015260408082015115159089015260609081015115159088015260809096019590820190600101614149565b509495945050505050565b805173ffffffffffffffffffffffffffffffffffffffff168252600061024060208301516141f0602086018273ffffffffffffffffffffffffffffffffffffffff169052565b506040830151614204604086018215159052565b50606083015161422c606086018273ffffffffffffffffffffffffffffffffffffffff169052565b506080830151614254608086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060a083015160a085015260c083015160c085015260e083015160e085015261010080840151818601525061012080840151828287015261429783870182614135565b92505050610140808401518186015250610160808401518186015250610180808401516142c78287018215159052565b50506101a083810151908501526101c080840151908501526101e080840151908501526102008084015160ff16908501526102209283015192909301919091525090565b60208152600061401a60208301846141aa565b60006020828403121561433057600080fd5b813561433b816140d7565b9392505050565b805173ffffffffffffffffffffffffffffffffffffffff168252602081015161436f602084018215159052565b506040810151614397604084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060608101516143bf606084018273ffffffffffffffffffffffffffffffffffffffff169052565b506080818101519083015260a0808201519083015260c0808201519083015260e08082015190830152610100808201519083015261012080820151908301526101408082015190830152610160808201519083015261018080820151908301526101a080820151908301526101c080820151908301526101e09081015160ff16910152565b610200810161401d8284614342565b6020808252825182820181905260009190848201906040850190845b8181101561449657614482838551614342565b92840192610200929092019160010161446f565b50909695505050505050565b600081518084526020808501945080840160005b8381101561419f57815173ffffffffffffffffffffffffffffffffffffffff16875295820195908201906001016144b6565b600081518084526020808501945080840160005b8381101561419f578151805173ffffffffffffffffffffffffffffffffffffffff9081168952908401511683880152604090960195908201906001016144fc565b600081518084526020808501945080840160005b8381101561419f57815187529582019590820190600101614551565b805173ffffffffffffffffffffffffffffffffffffffff168252600061026060208301516145b3602086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060408301516145c7604086018215159052565b5060608301516145db606086018215159052565b506080830151608085015260a083015160a085015260c083015160c085015260e083015160e0850152610100808401518186015250610120808401518282870152614628838701826144a2565b92505050610140808401518583038287015261464483826144e8565b925050506101608084015185830382870152614660838261453d565b92505050610180808401516146798287018260ff169052565b50506101a08381015173ffffffffffffffffffffffffffffffffffffffff908116918601919091526101c0808501511515908601526101e080850151909116908501526102008084015115159085015261022080840151908501526102409283015160ff1692909301919091525090565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561475d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc088860301845261474b85835161456d565b94509285019290850190600101614711565b5092979650505050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561475d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08886030184526147cb8583516141aa565b94509285019290850190600101614791565b60208152600061401a602083018461456d565b60006020828403121561480257600080fd5b815161433b816140d7565b60006020828403121561481f57600080fd5b5051919050565b600080600080600060a0868803121561483e57600080fd5b5050835160208501516040860151606087015160809097015192989197509594509092509050565b6000806040838503121561487957600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080600080608085870312156148cf57600080fd5b84516148da816140d7565b60208601516040870151606090970151919890975090945092505050565b8051801515811461490857600080fd5b919050565b60006020828403121561491f57600080fd5b61401a826148f8565b6000806040838503121561493b57600080fd5b8251614946816140d7565b602084015190925061ffff8116811461412a57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156149ce576149ce61498d565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614a0b57614a0b61498d565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614a4e57614a4e614a10565b500490565b80516fffffffffffffffffffffffffffffffff8116811461490857600080fd5b60008060408385031215614a8657600080fd5b614a8f83614a53565b9150614a9d60208401614a53565b90509250929050565b600080600060608486031215614abb57600080fd5b614ac484614a53565b9250614ad2602085016148f8565b9150604084015164ffffffffff81168114614aec57600080fd5b809150509250925092565b600060208284031215614b0957600080fd5b815160ff8116811461433b57600080fd5b600061ffff80841680614b2f57614b2f614a10565b92169190910492915050565b60008219821115614b4e57614b4e61498d565b50019056fea2646970667358221220d15108d0bec9cc6f3903875dd8412869a3da1b36661bdc780e2e2f0ae3136d2464736f6c634300080a003360a06040523480156200001157600080fd5b5060405162001b4538038062001b45833981016040819052620000349162000608565b6000805460ff19169055816001600160a01b0381166200006757604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cc91906200070a565b6001600160a01b031660805250805160005b818110156200014257620001398382815181106200010057620001006200072f565b6020026020010151600001518483815181106200012157620001216200072f565b6020026020010151602001516200014c60201b60201c565b600101620000de565b5050505062000822565b6001600160a01b03821615806200016a57506001600160a01b038116155b156200018957604051635919af9760e11b815260040160405180910390fd5b620001a8826001600160a01b0316620004ba60201b620006751760201c565b620001d65760405163df4c572d60e01b81526001600160a01b03831660048201526024015b60405180910390fd5b620001f5816001600160a01b0316620004ba60201b620006751760201c565b6200021f5760405163df4c572d60e01b81526001600160a01b0382166004820152602401620001cd565b806001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200027c575060408051601f3d908101601f19168201909252620002799181019062000745565b60015b6200029a576040516367a7cd4360e01b815260040160405180910390fd5b8060ff16600814620002bf576040516367a7cd4360e01b815260040160405180910390fd5b506000816001600160a01b031663d62ada116040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200031f575060408051601f3d908101601f191682019092526200031c918101906200076a565b60015b6200032a576200032d565b90505b6000836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200038c575060408051601f3d908101601f19168201909252620003899181019062000745565b60015b620003aa5760405163528ca31d60e01b815260040160405180910390fd5b60128160ff161115620003d05760405163528ca31d60e01b815260040160405180910390fd5b9050826001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa9250505080156200042f575060408051601f3d908101601f191682019092526200042c91810190620007a6565b60015b6200044d576040516367a7cd4360e01b815260040160405180910390fd5b8662000461576200046185858484620004c0565b5050505050620004748484848462000526565b826001600160a01b0316846001600160a01b03167fe263805b03657ab13064915d0723c5ce14981547e7cba5283f66b9e5d81f6e6e60405160405180910390a350505050565b3b151590565b60008313620004e2576040516356e05d2b60e01b815260040160405180910390fd5b836001600160501b0316816001600160501b0316108062000501575081155b15620005205760405163b1cf675560e01b815260040160405180910390fd5b50505050565b6001600160a01b03831682156200053e57600160a11b175b6200055460ff60a21b60a284901b1682620007fb565b6001600160a01b0390951660009081526001602052604090209490945550505050565b80516001600160a01b03811681146200058f57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715620005cf57620005cf62000594565b60405290565b604051601f8201601f191681016001600160401b038111828210171562000600576200060062000594565b604052919050565b60008060408084860312156200061d57600080fd5b620006288462000577565b602085810151919450906001600160401b03808211156200064857600080fd5b818701915087601f8301126200065d57600080fd5b81518181111562000672576200067262000594565b62000682848260051b01620005d5565b818152848101925060069190911b830184019089821115620006a357600080fd5b928401925b81841015620006fa5785848b031215620006c25760008081fd5b620006cc620005aa565b620006d78562000577565b8152620006e686860162000577565b8187015283529285019291840191620006a8565b8096505050505050509250929050565b6000602082840312156200071d57600080fd5b620007288262000577565b9392505050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156200075857600080fd5b815160ff811681146200072857600080fd5b6000602082840312156200077d57600080fd5b815180151581146200072857600080fd5b80516001600160501b03811681146200058f57600080fd5b600080600080600060a08688031215620007bf57600080fd5b620007ca866200078e565b9450602086015193506040860151925060608601519150620007ef608087016200078e565b90509295509295909350565b600082198211156200081d57634e487b7160e01b600052601160045260246000fd5b500190565b6080516112f262000853600039600081816101b201528181610280015281816103e201526104ff01526112f26000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c80638456cb591161008c578063b66102df11610066578063b66102df146101d4578063e8a97a3e146101e7578063f190e5fa146101fa578063f9a650301461023f57600080fd5b80638456cb591461016d5780639dcb511a14610175578063a50cf2c8146101ad57600080fd5b80635c975abb116100bd5780635c975abb1461011c5780635cecbd0e146101325780637afb01041461015a57600080fd5b80633f4ba83a146100e457806341976e09146100ee57806354fd4d5014610114575b600080fd5b6100ec610252565b005b6101016100fc366004610f28565b610340565b6040519081526020015b60405180910390f35b610101600281565b60005460ff16604051901515815260200161010b565b610145610140366004610f4a565b610352565b6040805192835260208301919091520161010b565b610101610168366004610f90565b610376565b6100ec6103b4565b610188610183366004610f28565b6104a0565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010b565b6101887f000000000000000000000000000000000000000000000000000000000000000081565b6101016101e2366004610fbc565b6104b4565b6100ec6101f5366004610ff8565b6104d1565b61020d610208366004610f28565b6105c3565b6040805173ffffffffffffffffffffffffffffffffffffffff909416845291151560208401529082015260600161010b565b61010161024d366004610f90565b61064d565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156102dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103009190611022565b610336576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033e61067b565b565b600061034b82610761565b5092915050565b60008061035f868661064d565b915061036b848461064d565b905094509492505050565b600080600061038484610761565b90925090508161039582600a611193565b61039f908761119f565b6103a991906111dc565b925050505b92915050565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561043e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104629190611022565b610498576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033e610819565b60006104ab826105c3565b50909392505050565b60006104c96104c3858561064d565b83610376565b949350505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561055b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057f9190611022565b6105b5576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105bf82826108d9565b5050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600160205260408120548190819080610624576040517f4bb8ad8200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b947402000000000000000000000000000000000000000086161515945060a286901c9350915050565b600080600061065b84610761565b909250905061066b81600a611193565b61039f838761119f565b3b151590565b60005460ff166106ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b600080600080610770856105c3565b8095508193508294505050506000806000808573ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156107cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f19190611231565b9450945050935093508461080b5761080b84848484610dd9565b829750505050505050915091565b60005460ff1615610886576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016106e3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586107373390565b73ffffffffffffffffffffffffffffffffffffffff82161580610910575073ffffffffffffffffffffffffffffffffffffffff8116155b15610947576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82163b6109ad576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016106e3565b73ffffffffffffffffffffffffffffffffffffffff81163b610a13576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024016106e3565b8073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610a98575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610a9591810190611281565b60015b610ace576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060ff16600814610b0b576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060008173ffffffffffffffffffffffffffffffffffffffff1663d62ada116040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610b93575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610b9091810190611022565b60015b610b9c57610b9f565b90505b60008373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610c26575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610c2391810190611281565b60015b610c5c576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60128160ff161115610c9a576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b90508273ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa925050508015610d21575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610d1e91810190611231565b60015b610d57576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b86610d6857610d6885858484610dd9565b5050505050610d7984848484610e74565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fe263805b03657ab13064915d0723c5ce14981547e7cba5283f66b9e5d81f6e6e60405160405180910390a350505050565b60008313610e13576040517f56e05d2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8369ffffffffffffffffffff168169ffffffffffffffffffff161080610e37575081155b15610e6e576040517fb1cf675500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b73ffffffffffffffffffffffffffffffffffffffff83168215610ea95774020000000000000000000000000000000000000000175b610ecf7503fc000000000000000000000000000000000000000060a284901b16826112a4565b73ffffffffffffffffffffffffffffffffffffffff90951660009081526001602052604090209490945550505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610f2357600080fd5b919050565b600060208284031215610f3a57600080fd5b610f4382610eff565b9392505050565b60008060008060808587031215610f6057600080fd5b84359350610f7060208601610eff565b925060408501359150610f8560608601610eff565b905092959194509250565b60008060408385031215610fa357600080fd5b82359150610fb360208401610eff565b90509250929050565b600080600060608486031215610fd157600080fd5b83359250610fe160208501610eff565b9150610fef60408501610eff565b90509250925092565b6000806040838503121561100b57600080fd5b61101483610eff565b9150610fb360208401610eff565b60006020828403121561103457600080fd5b81518015158114610f4357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b808511156110cc57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156110b2576110b2611044565b808516156110bf57918102915b93841c9390800290611078565b509250929050565b6000826110e3575060016103ae565b816110f0575060006103ae565b816001811461110657600281146111105761112c565b60019150506103ae565b60ff84111561112157611121611044565b50506001821b6103ae565b5060208310610133831016604e8410600b841016171561114f575081810a6103ae565b6111598383611073565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561118b5761118b611044565b029392505050565b6000610f4383836110d4565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156111d7576111d7611044565b500290565b600082611212577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b805169ffffffffffffffffffff81168114610f2357600080fd5b600080600080600060a0868803121561124957600080fd5b61125286611217565b945060208601519350604086015192506060860151915061127560808701611217565b90509295509295909350565b60006020828403121561129357600080fd5b815160ff81168114610f4357600080fd5b600082198211156112b7576112b7611044565b50019056fea2646970667358221220e7485a2cb5750973f539ca59d2211008b42bb92b6c49605a53f5d9c88c330fb164736f6c634300080a003360e06040523480156200001157600080fd5b5060405162002ced38038062002ced8339810160408190526200003491620004bb565b6000805460ff19169055806001600160a01b0381166200006757604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cc9190620004bb565b6001600160a01b039081166080526001805560408051808201909152600281526105a360f41b602082015291508216620001245760405162461bcd60e51b81526004016200011b9190620004ed565b60405180910390fd5b50806001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000164573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200018a9190620004bb565b6001600160a01b031660c052604051620001a490620004ad565b604051809103906000f080158015620001c1573d6000803e3d6000fd5b506001600160a01b031660a08190526040805163204a7f0760e21b81529051638129fc1c9160048082019260009290919082900301818387803b1580156200020857600080fd5b505af11580156200021d573d6000803e3d6000fd5b50505050620002316200028a60201b60201c565b50600454600380546001600160a01b039092166001600160a01b03199283161790556000805260026020527fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b8054909116905562000545565b6000620002a460a0516200038c60201b6200119b1760201c565b9050806001600160a01b0316638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620002e257600080fd5b505af1158015620002f7573d6000803e3d6000fd5b5050600480546001600160a01b03908116600090815260026020908152604090912080546001600160a01b03199081169388169384179091558354169091179091556200035492506005915083906200043b811b6200127d17901c565b506040516001600160a01b038216907f9f69b6c10f6810213e055b0ba6bc0a4e2603f73c221aad77ea35da819cda7dc390600090a250565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260601b60148201526e5af43d82803e903d91602b57fd5bf360881b60288201526037816000f09150506001600160a01b038116620004365760405162461bcd60e51b815260206004820152601660248201527f455243313136373a20637265617465206661696c65640000000000000000000060448201526064016200011b565b919050565b600062000452836001600160a01b0384166200045b565b90505b92915050565b6000818152600183016020526040812054620004a45750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000455565b50600062000455565b610e788062001e7583390190565b600060208284031215620004ce57600080fd5b81516001600160a01b0381168114620004e657600080fd5b9392505050565b600060208083528351808285015260005b818110156200051c57858101830151858201604001528201620004fe565b818111156200052f576000604083870101525b50601f01601f1916929092016040019392505050565b60805160a05160c0516118cf620005a66000396000818161026a015281816103680152610b7001526000818161020201526110650152600081816102c4015281816105b80152818161099601528181610a840152610e7401526118cf6000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806388f64c54116100cd578063b193976311610081578063d82ecc4811610066578063d82ecc4814610309578063e3ba9ace1461031c578063f23953ab1461032f57600080fd5b8063b1939763146102f9578063b60e85181461030157600080fd5b80638f7dcfa3116100b25780638f7dcfa31461029f578063a50cf2c8146102bf578063a904aab6146102e657600080fd5b806388f64c541461026557806389b77b3e1461028c57600080fd5b806354fd4d50116101245780635da33c5b116101095780635da33c5b146101fd578063765e0159146102245780638456cb591461025d57600080fd5b806354fd4d50146101d05780635c975abb146101e657600080fd5b806313d8c8401461015657806321d18456146101a05780632932472f146101b35780633f4ba83a146101c8575b600080fd5b6004546101769073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6101766101ae366004611651565b610337565b6101c66101c1366004611697565b61058a565b005b6101c6610968565b6101d8600181565b604051908152602001610197565b60005460ff165b6040519015158152602001610197565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101766102323660046116da565b73ffffffffffffffffffffffffffffffffffffffff9081166000908152600260205260409020541690565b6101c6610a56565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101c661029a3660046116da565b610b42565b6003546101769073ffffffffffffffffffffffffffffffffffffffff1681565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101c66102f4366004611697565b610e46565b6101d8610fb8565b6101d8611033565b6101ed6103173660046116da565b611044565b61017661032a3660046116f5565b611051565b6101c661105e565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa1580156103c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103e8919061170e565b6040518060400160405280600281526020017f43500000000000000000000000000000000000000000000000000000000000008152509061045f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b60405180910390fd5b506104686112a6565b6003805473ffffffffffffffffffffffffffffffffffffffff8082166000818152600260205260409081902080549093167fffffffffffffffffffffffff0000000000000000000000000000000000000000948516179094558154909216905590517fc75b5a710000000000000000000000000000000000000000000000000000000081523360048201526024810185905260448101849052819063c75b5a7190606401600060405180830381600087803b15801561052657600080fd5b505af115801561053a573d6000803e3d6000fd5b505060405133925073ffffffffffffffffffffffffffffffffffffffff841691507ff3ede7039176503a8ad1fe7cfaa29475a9dbe0cdcaf04ecf9a5c10570c47b10390600090a390505b92915050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610614573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610638919061170e565b61066e576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106766112a6565b60035473ffffffffffffffffffffffffffffffffffffffff838116911614156106fa576003805473ffffffffffffffffffffffffffffffffffffffff808216600090815260026020526040902080549091167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092558154169055610865565b73ffffffffffffffffffffffffffffffffffffffff838116600090815260026020908152604091829020548251808401909352600383527f4146330000000000000000000000000000000000000000000000000000000000918301919091529091848116911614610798576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b5060045473ffffffffffffffffffffffffffffffffffffffff838116911614156107fd57600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85161790555b73ffffffffffffffffffffffffffffffffffffffff828116600081815260026020526040808220805488861684529183208054929095167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790945591905281541690555b6040517fc75b5a7100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600060248301819052604483015283169063c75b5a7190606401600060405180830381600087803b1580156108dc57600080fd5b505af11580156108f0573d6000803e3d6000fd5b505050506109088260056112dd90919063ffffffff16565b508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f25e267469ba2ae82515be7b3d45df60bf8308343f0809e8cf7319058e2255ce660405160405180910390a3505050565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156109f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a16919061170e565b610a4c576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a546112ff565b565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015610ae0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b04919061170e565b610b3a576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a546113e0565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa158015610bcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf0919061170e565b6040518060400160405280600281526020017f435000000000000000000000000000000000000000000000000000000000000081525090610c5e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b50610c6a6005826114a0565b6040518060400160405280600381526020017f414634000000000000000000000000000000000000000000000000000000000081525090610cd8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b50438173ffffffffffffffffffffffffffffffffffffffff16633dc54b406040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4991906117a3565b14156040518060400160405280600381526020017f414631000000000000000000000000000000000000000000000000000000000081525090610db9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b506004805473ffffffffffffffffffffffffffffffffffffffff90811660009081526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081169487169485179091558454168317909355915190917fced6ab9afc868b3a088366f6631ae20752993b5cce5d5f0534ea5a59fcc57d5691a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610ed0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef4919061170e565b610f2a576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f19a1603900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301528416906319a1603990604401600060405180830381600087803b158015610f9b57600080fd5b505af1158015610faf573d6000803e3d6000fd5b50505050505050565b600354600090819073ffffffffffffffffffffffffffffffffffffffff165b73ffffffffffffffffffffffffffffffffffffffff81161561102d5773ffffffffffffffffffffffffffffffffffffffff9081166000908152600260205260409020541681611025816117eb565b925050610fd7565b50919050565b600061103f60056114cf565b905090565b60006105846005836114a0565b60006105846005836114d9565b60006110897f000000000000000000000000000000000000000000000000000000000000000061119b565b90508073ffffffffffffffffffffffffffffffffffffffff16638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156110d357600080fd5b505af11580156110e7573d6000803e3d6000fd5b50506004805473ffffffffffffffffffffffffffffffffffffffff908116600090815260026020526040902080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811692871692831790915582541617905550611156905060058261127d565b5060405173ffffffffffffffffffffffffffffffffffffffff8216907f9f69b6c10f6810213e055b0ba6bc0a4e2603f73c221aad77ea35da819cda7dc390600090a250565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260601b60148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f091505073ffffffffffffffffffffffffffffffffffffffff8116611278576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f455243313136373a20637265617465206661696c6564000000000000000000006044820152606401610456565b919050565b600061129f8373ffffffffffffffffffffffffffffffffffffffff84166114e5565b9392505050565b60035473ffffffffffffffffffffffffffffffffffffffff90811660009081526002602052604090205416610a5457610a5461105e565b600061129f8373ffffffffffffffffffffffffffffffffffffffff8416611534565b60005460ff1661136b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610456565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff161561144d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610456565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586113b63390565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600183016020526040812054151561129f565b6000610584825490565b600061129f8383611627565b600081815260018301602052604081205461152c57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610584565b506000610584565b6000818152600183016020526040812054801561161d576000611558600183611824565b855490915060009061156c90600190611824565b90508181146115d157600086600001828154811061158c5761158c61183b565b90600052602060002001549050808760000184815481106115af576115af61183b565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806115e2576115e261186a565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610584565b6000915050610584565b600082600001828154811061163e5761163e61183b565b9060005260206000200154905092915050565b6000806040838503121561166457600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff8116811461127857600080fd5b6000806000606084860312156116ac57600080fd5b6116b584611673565b92506116c360208501611673565b91506116d160408501611673565b90509250925092565b6000602082840312156116ec57600080fd5b61129f82611673565b60006020828403121561170757600080fd5b5035919050565b60006020828403121561172057600080fd5b8151801515811461129f57600080fd5b600060208083528351808285015260005b8181101561175d57858101830151858201604001528201611741565b8181111561176f576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b6000602082840312156117b557600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561181d5761181d6117bc565b5060010190565b600082821015611836576118366117bc565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220f1e9c81b8c3af2491c907ee66cf24e1bb76111b821db02df8f98dbb48b5ab5fa64736f6c634300080a0033608060405234801561001057600080fd5b50610e58806100206000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c806354fd4d5011610081578063c45a01551161005b578063c45a0155146101a4578063c75b5a71146101ca578063d1660f99146101dd57600080fd5b806354fd4d501461014f5780638129fc1c14610157578063c12c21c01461015f57600080fd5b80631afbb7a4116100b25780631afbb7a41461011d5780631cff79cd146101265780633dc54b401461014657600080fd5b806316128211146100d957806317d11a15146100ee57806319a160391461010a575b600080fd5b6100ec6100e7366004610b42565b6101f0565b005b6100f760035481565b6040519081526020015b60405180910390f35b6100ec610118366004610b8d565b61024c565b6100f760025481565b610139610134366004610bef565b6102c9565b6040516101019190610d49565b6100f760045481565b6100f7600181565b6100ec610344565b60015461017f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610101565b60005461017f9062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b6100ec6101d8366004610d5c565b610494565b6100ec6101eb366004610d8f565b61053d565b60015473ffffffffffffffffffffffffffffffffffffffff163314610241576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600291909155600355565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1633146102a3576040517fb126b84800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102c573ffffffffffffffffffffffffffffffffffffffff83168260006105b4565b5050565b60015460609073ffffffffffffffffffffffffffffffffffffffff16331461031d576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033d73ffffffffffffffffffffffffffffffffffffffff8416836107b4565b9392505050565b600054610100900460ff1661035f5760005460ff1615610363565b303b155b6103f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600054610100900460ff1615801561043357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000166101011790555b600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16336201000002179055801561049157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b50565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1633146104eb576040517fb126b84800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff949094169390931790925560025560035543600455565b60015473ffffffffffffffffffffffffffffffffffffffff16331461058e576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105af73ffffffffffffffffffffffffffffffffffffffff841683836107f6565b505050565b80158061065457506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015284169063dd62ed3e90604401602060405180830381865afa15801561062e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106529190610dcb565b155b6106e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e63650000000000000000000060648201526084016103eb565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526105af9084907f095ea7b300000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261084c565b606061033d83836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250610958565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526105af9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401610732565b60006108ae826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166109589092919063ffffffff16565b8051909150156105af57808060200190518101906108cc9190610de4565b6105af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016103eb565b6060610967848460008561096f565b949350505050565b606082471015610a01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016103eb565b843b610a69576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016103eb565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051610a929190610e06565b60006040518083038185875af1925050503d8060008114610acf576040519150601f19603f3d011682016040523d82523d6000602084013e610ad4565b606091505b5091509150610ae4828286610aef565b979650505050505050565b60608315610afe57508161033d565b825115610b0e5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103eb9190610d49565b60008060408385031215610b5557600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff81168114610b8857600080fd5b919050565b60008060408385031215610ba057600080fd5b610ba983610b64565b9150610bb760208401610b64565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215610c0257600080fd5b610c0b83610b64565b9150602083013567ffffffffffffffff80821115610c2857600080fd5b818501915085601f830112610c3c57600080fd5b813581811115610c4e57610c4e610bc0565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715610c9457610c94610bc0565b81604052828152886020848701011115610cad57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b83811015610cea578181015183820152602001610cd2565b83811115610cf9576000848401525b50505050565b60008151808452610d17816020860160208601610ccf565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061033d6020830184610cff565b600080600060608486031215610d7157600080fd5b610d7a84610b64565b95602085013595506040909401359392505050565b600080600060608486031215610da457600080fd5b610dad84610b64565b9250610dbb60208501610b64565b9150604084013590509250925092565b600060208284031215610ddd57600080fd5b5051919050565b600060208284031215610df657600080fd5b8151801515811461033d57600080fd5b60008251610e18818460208701610ccf565b919091019291505056fea2646970667358221220448e7046078cd668c09328d857e534e2aab6cdc0e691d3d4f2c8baae8e084b1364736f6c634300080a003360c06040523480156200001157600080fd5b506040516200162738038062001627833981016040819052620000349162000177565b60408051808201909152600281526105a360f41b60208201526001600160a01b038216620000805760405162461bcd60e51b8152600401620000779190620001a9565b60405180910390fd5b50806001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e6919062000177565b6001600160a01b03166080816001600160a01b031681525050806001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200013e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000164919062000177565b6001600160a01b031660a0525062000201565b6000602082840312156200018a57600080fd5b81516001600160a01b0381168114620001a257600080fd5b9392505050565b600060208083528351808285015260005b81811015620001d857858101830151858201604001528201620001ba565b81811115620001eb576000604083870101525b50601f01601f1916929092016040019392505050565b60805160a0516113c2620002656000396000818161021f0152818161036401526106d501526000818160af0152818161012a015281816104420152818161056e015281816107b301528181610aa601528181610b890152610c6701526113c26000f3fe60806040526004361061005e5760003560e01c80635869dba8116100435780635869dba814610199578063deecfbc9146101bb578063e79a4089146101ce57600080fd5b80634f0e0ef31461011857806354fd4d501461017657600080fd5b366101135760408051808201909152600381527f574732000000000000000000000000000000000000000000000000000000000060208201523373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b60405180910390fd5b50005b600080fd5b34801561012457600080fd5b5061014c7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561018257600080fd5b5061018b600181565b60405190815260200161016d565b3480156101a557600080fd5b506101b96101b4366004611263565b6101ee565b005b6101b96101c936600461128f565b61031d565b3480156101da57600080fd5b506101b96101e93660046112e1565b61068e565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201819052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa15801561027b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061029f9190611318565b6040518060400160405280600281526020017f43500000000000000000000000000000000000000000000000000000000000008152509061030d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b506103188383610a77565b505050565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808516600483015284917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa1580156103ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103d19190611318565b6040518060400160405280600281526020017f52500000000000000000000000000000000000000000000000000000000000008152509061043f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e6919061133a565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600381526020017f57473100000000000000000000000000000000000000000000000000000000008152509061056b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156105d457600080fd5b505af11580156105e8573d6000803e3d6000fd5b50505050506105f78434610b3c565b6040517f9aa5d46200000000000000000000000000000000000000000000000000000000815234600482015273ffffffffffffffffffffffffffffffffffffffff848116602483015261ffff84166044830152851690639aa5d46290606401600060405180830381600087803b15801561067057600080fd5b505af1158015610684573d6000803e3d6000fd5b5050505050505050565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808516600483015284917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa15801561071e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107429190611318565b6040518060400160405280600281526020017f5250000000000000000000000000000000000000000000000000000000000000815250906107b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610833573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610857919061133a565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600381526020017f5747310000000000000000000000000000000000000000000000000000000000815250906108dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b506109703330858773ffffffffffffffffffffffffffffffffffffffff166336dda7d56040518163ffffffff1660e01b8152600401602060405180830381865afa15801561092e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610952919061133a565b73ffffffffffffffffffffffffffffffffffffffff16929190610cd4565b6040517f05fe138b0000000000000000000000000000000000000000000000000000000081526004810184905230602482015260009073ffffffffffffffffffffffffffffffffffffffff8616906305fe138b906044016020604051808303816000875af11580156109e6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0a9190611357565b9050610a168382610a77565b8273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f6de63bb986f2779478e384365c03cc2e62f06b453856acca87d5a519ce02664960405160405180910390a35050505050565b6040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632e1a7d4d90602401600060405180830381600087803b158015610aff57600080fd5b505af1158015610b13573d6000803e3d6000fd5b50610b389250505073ffffffffffffffffffffffffffffffffffffffff831682610d6f565b5050565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015282917f00000000000000000000000000000000000000000000000000000000000000009091169063dd62ed3e90604401602060405180830381865afa158015610bd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf69190611357565b1015610b38576040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303816000875af1158015610cb0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103189190611318565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052610d69908590610ec9565b50505050565b80471015610dd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610107565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114610e33576040519150601f19603f3d011682016040523d82523d6000602084013e610e38565b606091505b5050905080610318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610107565b6000610f2b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16610fd59092919063ffffffff16565b8051909150156103185780806020019051810190610f499190611318565b610318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610107565b6060610fe48484600085610fee565b90505b9392505050565b606082471015611080576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610107565b843b6110e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610107565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516111119190611370565b60006040518083038185875af1925050503d806000811461114e576040519150601f19603f3d011682016040523d82523d6000602084013e611153565b606091505b509150915061116382828661116e565b979650505050505050565b6060831561117d575081610fe7565b82511561118d5782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b60005b838110156111dc5781810151838201526020016111c4565b83811115610d695750506000910152565b602081526000825180602084015261120c8160408501602087016111c1565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461126057600080fd5b50565b6000806040838503121561127657600080fd5b82356112818161123e565b946020939093013593505050565b6000806000606084860312156112a457600080fd5b83356112af8161123e565b925060208401356112bf8161123e565b9150604084013561ffff811681146112d657600080fd5b809150509250925092565b6000806000606084860312156112f657600080fd5b83356113018161123e565b92506020840135915060408401356112d68161123e565b60006020828403121561132a57600080fd5b81518015158114610fe757600080fd5b60006020828403121561134c57600080fd5b8151610fe78161123e565b60006020828403121561136957600080fd5b5051919050565b600082516113828184602087016111c1565b919091019291505056fea264697066735822122017fd7fc76e4a1efcf24b78a3417fad7ab9576f0a23aa756ddb211c5e2227aa9564736f6c634300080a003360806040523480156200001157600080fd5b5060405162002b8038038062002b80833981016040819052620000349162000122565b6001600160a01b0381166200008f5760405162461bcd60e51b815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640160405180910390fd5b6001600160a01b03811660008181526001602052604080822080546001600160601b0319166b204fce5e3e2502611000000090811790915590517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91620000f99190815260200190565b60405180910390a350600680546001600160a81b031916336101000260ff191617905562000154565b6000602082840312156200013557600080fd5b81516001600160a01b03811681146200014d57600080fd5b9392505050565b612a1c80620001646000396000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c806370a08231116100f9578063b4b5ea5711610097578063dd62ed3e11610071578063dd62ed3e14610503578063e7a324dc14610555578063f1127ed81461057c578063f2fde38b146105ee57600080fd5b8063b4b5ea57146104ca578063c3cda520146104dd578063d505accf146104f057600080fd5b806395d89b41116100d357806395d89b411461045b5780639742ca4614610497578063a9059cbb146104aa578063b0660c3d146104bd57600080fd5b806370a08231146103c7578063782d6fe11461040b5780637ecebe001461043b57600080fd5b806330adf81f11610166578063481c6a7511610140578063481c6a751461031e578063587cde1e146103435780635c19a95c146103795780636fcfff451461038c57600080fd5b806330adf81f14610298578063313ce567146102bf578063349dc329146102d957600080fd5b806320606b701161019757806320606b70146102545780632185810b1461027b57806323b872dd1461028557600080fd5b806306fdde03146101be578063095ea7b31461021057806318160ddd14610233575b600080fd5b6101fa6040518060400160405280600781526020017f47656172626f780000000000000000000000000000000000000000000000000081525081565b60405161020791906124a3565b60405180910390f35b61022361021e36600461253f565b610601565b6040519015158152602001610207565b6102466b204fce5e3e2502611000000081565b604051908152602001610207565b6102467f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b61028361070d565b005b610223610293366004612569565b6107ee565b6102467f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b6102c7601281565b60405160ff9091168152602001610207565b6007546102f99073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610207565b6006546102f990610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6102f96103513660046125a5565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6102836103873660046125a5565b61098a565b6103b261039a3660046125a5565b60046020526000908152604090205463ffffffff1681565b60405163ffffffff9091168152602001610207565b6102466103d53660046125a5565b73ffffffffffffffffffffffffffffffffffffffff166000908152600160205260409020546bffffffffffffffffffffffff1690565b61041e61041936600461253f565b610997565b6040516bffffffffffffffffffffffff9091168152602001610207565b6102466104493660046125a5565b60056020526000908152604090205481565b6101fa6040518060400160405280600481526020017f474541520000000000000000000000000000000000000000000000000000000081525081565b6102836104a53660046125a5565b610cae565b6102236104b836600461253f565b610e20565b6006546102239060ff1681565b61041e6104d83660046125a5565b610e5c565b6102836104eb3660046125d1565b610efa565b6102836104fe366004612629565b611310565b610246610511366004612693565b73ffffffffffffffffffffffffffffffffffffffff9182166000908152602081815260408083209390941682529190915220546bffffffffffffffffffffffff1690565b6102467fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b6105c561058a3660046126c6565b600360209081526000928352604080842090915290825290205463ffffffff81169064010000000090046bffffffffffffffffffffffff1682565b6040805163ffffffff90931683526bffffffffffffffffffffffff909116602083015201610207565b6102836105fc3660046125a5565b61187a565b6000807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83141561063f57506bffffffffffffffffffffffff610664565b6106618360405180606001604052806025815260200161285260259139611a15565b90505b3360008181526020818152604080832073ffffffffffffffffffffffffffffffffffffffff89168085529083529281902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff871690811790915590519081529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a360019150505b92915050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314610798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e616765720060448201526064015b60405180910390fd5b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f795b0e16c8da9807b0a215f3749bd6dbcc49fc0472183f4e446abb7dcbd9d00790600090a1565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081815260408083203380855290835281842054825160608101909352602580845291936bffffffffffffffffffffffff909116928592610856928892919061285290830139611a15565b90508673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156108a257506bffffffffffffffffffffffff82811614155b156109725760006108cc83836040518060600160405280603d8152602001612974603d9139611a67565b73ffffffffffffffffffffffffffffffffffffffff898116600081815260208181526040808320948a168084529482529182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff87169081179091559151918252939450919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505b61097d878783611ad5565b5060019695505050505050565b6109943382611e9c565b50565b6000438210610a28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f476561723a3a6765745072696f72566f7465733a206e6f74207965742064657460448201527f65726d696e656400000000000000000000000000000000000000000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff831660009081526004602052604090205463ffffffff1680610a63576000915050610707565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604081208491610a95600185612735565b63ffffffff90811682526020820192909252604001600020541611610b1b5773ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812090610ae5600184612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff1691506107079050565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020908152604080832083805290915290205463ffffffff16831015610b63576000915050610707565b600080610b71600184612735565b90505b8163ffffffff168163ffffffff161115610c565760006002610b968484612735565b610ba0919061275a565b610baa9083612735565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260036020908152604080832063ffffffff8581168552908352928190208151808301909252549283168082526401000000009093046bffffffffffffffffffffffff1691810191909152919250871415610c2a576020015194506107079350505050565b805163ffffffff16871115610c4157819350610c4f565b610c4c600183612735565b92505b5050610b74565b5073ffffffffffffffffffffffffffffffffffffffff8516600090815260036020908152604080832063ffffffff909416835292905220546bffffffffffffffffffffffff6401000000009091041691505092915050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314610d34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e6167657200604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff8116610db1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640161078f565b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f2f834d1c8c4b956018fff5faca4d99868ae635487424d9c265c257ccbc698c6a90600090a250565b600080610e45836040518060600160405280602681526020016128a760269139611a15565b9050610e52338583611ad5565b5060019392505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526004602052604081205463ffffffff1680610e94576000610ef3565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812090610ec5600184612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b9392505050565b604080518082018252600781527f47656172626f780000000000000000000000000000000000000000000000000060209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f028ef9f797075f74ac647c65fde04fb0f128c2d59fd40f45732269917642fd4681840152466060820152306080808301919091528351808303909101815260a0820184528051908301207fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60c083015273ffffffffffffffffffffffffffffffffffffffff8a1660e08301526101008201899052610120808301899052845180840390910181526101408301909452835193909201929092207f19010000000000000000000000000000000000000000000000000000000000006101608401526101628301829052610182830181905290916000906101a201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa1580156110d8573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166111a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f476561723a3a64656c656761746542795369673a20696e76616c69642073696760448201527f6e61747572650000000000000000000000000000000000000000000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff811660009081526005602052604081208054916111d7836127a4565b919050558914611269576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f476561723a3a64656c656761746542795369673a20696e76616c6964206e6f6e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161078f565b874211156112f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f476561723a3a64656c656761746542795369673a207369676e6174757265206560448201527f7870697265640000000000000000000000000000000000000000000000000000606482015260840161078f565b611303818b611e9c565b505050505b505050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86141561134d57506bffffffffffffffffffffffff611372565b61136f8660405180606001604052806024815260200161291c60249139611a15565b90505b604080518082018252600781527f47656172626f780000000000000000000000000000000000000000000000000060209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f028ef9f797075f74ac647c65fde04fb0f128c2d59fd40f45732269917642fd4681840152466060820152306080808301919091528351808303909101815260a0909101835280519082012073ffffffffffffffffffffffffffffffffffffffff8b166000908152600590925291812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918c918c918c919086611472836127a4565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810188905260e001604051602081830303815290604052805190602001209050600082826040516020016115199291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff8b169284019290925260608301899052608083018890529092509060019060a0016020604051602081039080840390855afa1580156115a2573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661164a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a7065726d69743a20696e76616c6964207369676e617475726500604482015260640161078f565b8b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146116df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f476561723a3a7065726d69743a20756e617574686f72697a6564000000000000604482015260640161078f565b88421115611749576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a7065726d69743a207369676e6174757265206578706972656400604482015260640161078f565b846000808e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508a73ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258760405161186491906bffffffffffffffffffffffff91909116815260200190565b60405180910390a3505050505050505050505050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314611900576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e6167657200604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff811661197d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640161078f565b60065460405173ffffffffffffffffffffffffffffffffffffffff80841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36006805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b6000816c010000000000000000000000008410611a5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b509192915050565b6000836bffffffffffffffffffffffff16836bffffffffffffffffffffffff1611158290611ac2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b50611acd83856127dd565b949350505050565b60065460ff1680611b025750600654610100900473ffffffffffffffffffffffffffffffffffffffff1633145b80611b24575060075473ffffffffffffffffffffffffffffffffffffffff1633145b611b8a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f476561723a3a7472616e73666572732061726520666f7262696464656e000000604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff8316611c2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603c60248201527f476561723a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260448201527f616e736665722066726f6d20746865207a65726f206164647265737300000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff8216611cd0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f476561723a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260448201527f616e7366657220746f20746865207a65726f2061646472657373000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260016020908152604091829020548251606081019093526036808452611d2d936bffffffffffffffffffffffff90921692859291906129b190830139611a67565b73ffffffffffffffffffffffffffffffffffffffff848116600090815260016020908152604080832080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff968716179055928616825290829020548251606081019093526030808452611dbf949190911692859290919061287790830139611f50565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260409182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff968716179055905193851684529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a373ffffffffffffffffffffffffffffffffffffffff808416600090815260026020526040808220548584168352912054611e9792918216911683611fc1565b505050565b73ffffffffffffffffffffffffffffffffffffffff808316600081815260026020818152604080842080546001845282862054949093528787167fffffffffffffffffffffffff000000000000000000000000000000000000000084168117909155905191909516946bffffffffffffffffffffffff9092169391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4611f4a828483611fc1565b50505050565b600080611f5d8486612802565b9050846bffffffffffffffffffffffff16816bffffffffffffffffffffffff1610158390611fb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b50949350505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561200b57506000816bffffffffffffffffffffffff16115b15611e975773ffffffffffffffffffffffffffffffffffffffff8316156120fd5773ffffffffffffffffffffffffffffffffffffffff831660009081526004602052604081205463ffffffff1690816120655760006120c4565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812090612096600185612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b905060006120eb82856040518060600160405280602881526020016128cd60289139611a67565b90506120f9868484846121e2565b5050505b73ffffffffffffffffffffffffffffffffffffffff821615611e975773ffffffffffffffffffffffffffffffffffffffff821660009081526004602052604081205463ffffffff1690816121525760006121b1565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812090612183600185612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b905060006121d882856040518060600160405280602781526020016128f560279139611f50565b9050611308858484845b60006122064360405180606001604052806034815260200161294060349139612465565b905060008463ffffffff1611801561226d575073ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812063ffffffff831691612251600188612735565b63ffffffff908116825260208201929092526040016000205416145b156123035773ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812083916122a4600188612735565b63ffffffff168152602081019190915260400160002080546bffffffffffffffffffffffff92909216640100000000027fffffffffffffffffffffffffffffffff000000000000000000000000ffffffff9092169190911790556123fe565b60408051808201825263ffffffff80841682526bffffffffffffffffffffffff808616602080850191825273ffffffffffffffffffffffffffffffffffffffff8b166000908152600382528681208b8616825290915294909420925183549451909116640100000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009094169116179190911790556123a5846001612832565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260046020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff929092169190911790555b604080516bffffffffffffffffffffffff80861682528416602082015273ffffffffffffffffffffffffffffffffffffffff8716917fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724910160405180910390a25050505050565b6000816401000000008410611a5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91905b600060208083528351808285015260005b818110156124d0578581018301518582016040015282016124b4565b818111156124e2576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461253a57600080fd5b919050565b6000806040838503121561255257600080fd5b61255b83612516565b946020939093013593505050565b60008060006060848603121561257e57600080fd5b61258784612516565b925061259560208501612516565b9150604084013590509250925092565b6000602082840312156125b757600080fd5b610ef382612516565b803560ff8116811461253a57600080fd5b60008060008060008060c087890312156125ea57600080fd5b6125f387612516565b9550602087013594506040870135935061260f606088016125c0565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a03121561264457600080fd5b61264d88612516565b965061265b60208901612516565b95506040880135945060608801359350612677608089016125c0565b925060a0880135915060c0880135905092959891949750929550565b600080604083850312156126a657600080fd5b6126af83612516565b91506126bd60208401612516565b90509250929050565b600080604083850312156126d957600080fd5b6126e283612516565b9150602083013563ffffffff811681146126fb57600080fd5b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600063ffffffff8381169083168181101561275257612752612706565b039392505050565b600063ffffffff80841680612798577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156127d6576127d6612706565b5060010190565b60006bffffffffffffffffffffffff8381169083168181101561275257612752612706565b60006bffffffffffffffffffffffff80831681851680830382111561282957612829612706565b01949350505050565b600063ffffffff8083168185168083038211156128295761282961270656fe476561723a3a617070726f76653a20616d6f756e7420657863656564732039362062697473476561723a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e74206f766572666c6f7773476561723a3a7472616e736665723a20616d6f756e7420657863656564732039362062697473476561723a3a5f6d6f7665566f7465733a20766f746520616d6f756e7420756e646572666c6f7773476561723a3a5f6d6f7665566f7465733a20766f746520616d6f756e74206f766572666c6f7773476561723a3a7065726d69743a20616d6f756e7420657863656564732039362062697473476561723a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d62657220657863656564732033322062697473476561723a3a7472616e7366657246726f6d3a207472616e7366657220616d6f756e742065786365656473207370656e64657220616c6c6f77616e6365476561723a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e7420657863656564732062616c616e6365a26469706673582212201b84fd7789a35c022f692420863210a30e82d2405659f5a28275d433fa53467f64736f6c634300080a003360806040526016805460ff1916905534801561001a57600080fd5b506040516110a73803806110a7833981016040819052610039916100b6565b600080546001600160a01b038085166001600160a01b0319928316179092556003805492841692909116919091179055610080600a6b033b2e3c9fd0803ce80000006100e9565b60075550506b033b2e3c9fd0803ce800000060155561010b565b80516001600160a01b03811681146100b157600080fd5b919050565b600080604083850312156100c957600080fd5b6100d28361009a565b91506100e06020840161009a565b90509250929050565b60008261010657634e487b7160e01b600052601260045260246000fd5b500490565b610f8d8061011a6000396000f3fe608060405234801561001057600080fd5b50600436106102e95760003560e01c806367c99d5811610191578063c5f956af116100e3578063dbcb313b11610097578063f11a648711610071578063f11a648714610320578063f3fdb15a146105f1578063fe14112d1461061157600080fd5b8063dbcb313b146105d6578063e941fa78146105df578063ef8d9603146105e857600080fd5b8063cb3905e1116100c8578063cb3905e1146105c4578063cf33d95514610320578063d0efe753146105cd57600080fd5b8063c5f956af14610588578063ca9505e4146105a857600080fd5b80639aa5d46211610145578063b6ac642a1161011f578063b6ac642a14610567578063bb04b19314610567578063bf28068b1461057557600080fd5b80639aa5d46214610544578063a4e8273e14610557578063b3554a0a1461055e57600080fd5b8063788c6bfe11610176578063788c6bfe146104ef5780638456cb591461050157806396df5dc01461053157600080fd5b806367c99d58146104de57806374375359146104e757600080fd5b806336dda7d51161024a5780634d778ad1116101fe57806354fd4d50116101d857806354fd4d50146104c05780635c975abb146104c8578063609ae317146104d557600080fd5b80634d778ad114610491578063532fe502146104a45780635427c938146104ad57600080fd5b80633f4ba83a1161022f5780633f4ba83a1461045257806345d31f9d1461047f5780634c19386c1461048857600080fd5b806336dda7d51461040f5780633e163df01461042f57600080fd5b80632495a599116102a157806329f3d3b61161028657806329f3d3b6146103b35780632a3354c9146103bc5780632e97ca21146103dc57600080fd5b80632495a599146103735780632954018c1461039357600080fd5b8063078c4781116102d2578063078c4781146103205780630fce70fb146103335780631e16e4fc1461033b57600080fd5b8063030dbb04146102ee57806305fe138b1461030a575b600080fd5b6102f760105481565b6040519081526020015b60405180910390f35b6102f7610318366004610ce8565b600092915050565b61033161032e366004610d14565b50565b005b6015546102f7565b61034e610349366004610d2f565b610618565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610301565b60035461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b60005461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6102f760095481565b600a5461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103ff6103ea366004610d14565b60066020526000908152604090205460ff1681565b6040519015158152602001610301565b60055461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103ff61043d366004610d14565b60146020526000908152604090205460ff1681565b610331601680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b6102f760075481565b6102f760015481565b6102f761049f366004610d2f565b61064f565b6102f760115481565b6102f76104bb366004610d2f565b61066d565b6102f7600181565b6016546103ff9060ff1681565b6102f760085481565b6102f7600d5481565b6102f7610685565b6b033b2e3c9fd0803ce80000006102f7565b610331601680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b61033161053f366004610d2f565b601555565b610331610552366004610d48565b505050565b60016102f7565b6102f7600e5481565b61033161032e366004610d2f565b610331610583366004610ce8565b61071d565b60135461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103316105b6366004610d7d565b600b92909255600c55600d55565b6102f7600c5481565b6102f7600b5481565b6102f760155481565b6102f7600f5481565b6102f760025481565b60125461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b60006102f7565b6004818154811061062857600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6000610667826b033b2e3c9fd0803ce800000061077a565b92915050565b6000610667826b033b2e3c9fd0803ce80000006108e9565b6003546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156106f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107189190610da9565b905090565b6009829055600a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691909117909155600354610776911682846109fe565b5050565b60408051808201909152600281527f4d330000000000000000000000000000000000000000000000000000000000006020820152600090826107f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b60405180910390fd5b506000610800600284610e72565b90506b033b2e3c9fd0803ce8000000610839827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610ead565b6108439190610e72565b8411156040518060400160405280600281526020017f4d31000000000000000000000000000000000000000000000000000000000000815250906108b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b5082816108cd6b033b2e3c9fd0803ce800000087610ec4565b6108d79190610f01565b6108e19190610e72565b949350505050565b60008215806108f6575081155b1561090357506000610667565b8161091b60026b033b2e3c9fd0803ce8000000610e72565b610945907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610ead565b61094f9190610e72565b8311156040518060400160405280600281526020017f4d31000000000000000000000000000000000000000000000000000000000000815250906109c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b506b033b2e3c9fd0803ce80000006109d9600282610e72565b6109e38486610ec4565b6109ed9190610f01565b6109f79190610e72565b9392505050565b6040805173ffffffffffffffffffffffffffffffffffffffff848116602483015260448083018590528351808403909101815260649092018352602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65649084015261055292869291600091610ac9918516908490610b73565b8051909150156105525780806020019051810190610ae79190610f19565b610552576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016107e9565b60606108e1848460008585843b610be6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107e9565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051610c0f9190610f3b565b60006040518083038185875af1925050503d8060008114610c4c576040519150601f19603f3d011682016040523d82523d6000602084013e610c51565b606091505b5091509150610c61828286610c6c565b979650505050505050565b60608315610c7b5750816109f7565b825115610c8b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ce357600080fd5b919050565b60008060408385031215610cfb57600080fd5b82359150610d0b60208401610cbf565b90509250929050565b600060208284031215610d2657600080fd5b6109f782610cbf565b600060208284031215610d4157600080fd5b5035919050565b600080600060608486031215610d5d57600080fd5b83359250610d6d60208501610cbf565b9150604084013590509250925092565b600080600060608486031215610d9257600080fd5b505081359360208301359350604090920135919050565b600060208284031215610dbb57600080fd5b5051919050565b60005b83811015610ddd578181015183820152602001610dc5565b83811115610dec576000848401525b50505050565b6020815260008251806020840152610e11816040850160208701610dc2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082610ea8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600082821015610ebf57610ebf610e43565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610efc57610efc610e43565b500290565b60008219821115610f1457610f14610e43565b500190565b600060208284031215610f2b57600080fd5b815180151581146109f757600080fd5b60008251610f4d818460208701610dc2565b919091019291505056fea26469706673582212204edb887d94928b3914f60ab48df0182da9eb30ddbb7021b164cc728b60a655d564736f6c634300080a003360e06040523480156200001157600080fd5b5060405162013af238038062013af2833981016040819052620000349162000630565b826001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000073573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000999190620007bf565b620000a433620004ab565b6001600160a01b038116608081905260408051630873769560e01b815290516308737695916004808201926020929091908290030181865afa158015620000ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001159190620007bf565b6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000153573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001799190620007bf565b6001600160a01b0390811660a052841660c0525060405183906200019d9062000519565b6001600160a01b039091168152602001604051809103906000f080158015620001ca573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b0392909216918217905560608301516080840151604051620002029062000527565b6001600160a01b03938416815292909116602083015215156040820152606001604051809103906000f0801580156200023f573d6000803e3d6000fd5b50600280546001600160a01b0319166001600160a01b0392909216919091179055604051600090620002746020820162000535565b601f1982820381018352601f909101166040819052600154600254620002b0926001600160a01b039283169291909116908790602001620007e6565b60408051601f1981840301815290829052620002d09291602001620008e8565b60408051601f19818403018152919052905060006200035982848151602092830120604080517fff00000000000000000000000000000000000000000000000000000000000000818601523060601b6001600160601b03191660218201526035810193909352605580840192909252805180840390920182526075909201909152805191012090565b600154604051634fafc35760e11b81526001600160a01b038084166004830152929350911690639f5f86ae90602401600060405180830381600087803b158015620003a357600080fd5b505af1158015620003b8573d6000803e3d6000fd5b50505050620003ce8284620004fb60201b60201c565b600380546001600160a01b0319166001600160a01b0383811691821790925560015460408051630304b08760e61b81529051919093169263c12c21c09160048083019260209291908290030181865afa15801562000430573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004569190620007bf565b6001600160a01b031614620004a05760405162461bcd60e51b815260206004820152600c60248201526b496e636f727265637420434d60a01b604482015260640160405180910390fd5b505050505062000909565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008183516020850134f59050803b6200051457600080fd5b505050565b6158e8806200243683390190565b615e978062007d1e83390190565b615f3d806200dbb583390190565b6001600160a01b03811681146200055957600080fd5b50565b8051620005698162000543565b919050565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b0381118282101715620005a957620005a96200056e565b60405290565b604080519081016001600160401b0381118282101715620005a957620005a96200056e565b604051601f8201601f191681016001600160401b0381118282101715620005ff57620005ff6200056e565b604052919050565b80516001600160801b03811681146200056957600080fd5b805180151581146200056957600080fd5b6000806000606084860312156200064657600080fd5b8351620006538162000543565b602085810151919450906001600160401b03808211156200067357600080fd5b9086019060a082890312156200068857600080fd5b6200069262000584565b6200069d8362000607565b8152620006ac84840162000607565b8482015260408084015183811115620006c457600080fd5b8401601f81018b13620006d657600080fd5b805184811115620006eb57620006eb6200056e565b620006fb878260051b01620005d4565b818152878101955060069190911b82018701908c8211156200071c57600080fd5b918701915b818310156200077e5783838e0312156200073b5760008081fd5b62000745620005af565b8351620007528162000543565b81528389015161ffff811681146200076a5760008081fd5b818a01528652948701949183019162000721565b8484015250620007939050606085016200055c565b6060830152620007a6608085016200061f565b6080830152979097015195989697509495945050505050565b600060208284031215620007d257600080fd5b8151620007df8162000543565b9392505050565b600060018060a01b0380861683526020818616818501526040606081860152610100850160018060801b038088511660608801528084890151166080880152508187015160a080880152818151808452610120890191508583019350600092505b808310156200087857835180518816835286015161ffff168683015292850192600192909201919084019062000847565b5060608901516001600160a01b031660c0890152608090980151151560e0909701969096525094979650505050505050565b6000815160005b81811015620008cd5760208185018101518683015201620008b1565b81811115620008dd576000828601525b509290920192915050565b600062000901620008fa8386620008aa565b84620008aa565b949350505050565b60805160a05160c051611ad3620009636000396000818161010a0152610ea00152600081816103790152610b170152600081816101680152818161068c01528181610a4d01528181610b860152610c190152611ad36000f3fe6080604052600436106100f35760003560e01c80638da5cb5b1161008a578063ebf0c71711610059578063ebf0c71714610367578063f2fde38b1461039b578063f4747c58146103bb578063f9aa028a146103db57600080fd5b80638da5cb5b1461025a57806394ca2cb5146102855780639c4ae2d014610327578063c12c21c01461033a57600080fd5b80633e0b1a23116100c65780633e0b1a23146101ce5780634ef501ac146101e3578063715018a614610230578063805abe6a1461024557600080fd5b806316f0115b146100f85780632954018c146101565780632f7a18811461018a578063318d0d10146101b7575b600080fd5b34801561010457600080fd5b5061012c7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561016257600080fd5b5061012c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561019657600080fd5b5060025461012c9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156101c357600080fd5b506101cc610408565b005b3480156101da57600080fd5b506101cc610498565b3480156101ef57600080fd5b506102036101fe366004611726565b610521565b6040805173ffffffffffffffffffffffffffffffffffffffff93841681529290911660208301520161014d565b34801561023c57600080fd5b506101cc610567565b34801561025157600080fd5b506101cc6105f2565b34801561026657600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff1661012c565b34801561029157600080fd5b5061012c6102a03660046117e6565b8151602092830120604080517fff00000000000000000000000000000000000000000000000000000000000000818601523060601b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660218201526035810193909352605580840192909252805180840390920182526075909201909152805191012090565b6101cc6103353660046117e6565b6107d8565b34801561034657600080fd5b5060015461012c9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561037357600080fd5b5061012c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103a757600080fd5b506101cc6103b63660046118c0565b6107f5565b3480156103c757600080fd5b506101cc6103d63660046118e4565b610925565b3480156103e757600080fd5b5060035461012c9073ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff16331461048e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b610496610a49565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610519576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b61048e610b82565b6004818154811061053157600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff91821692501682565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b61049660006116b1565b60005473ffffffffffffffffffffffffffffffffffffffff163314610673576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b3073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106f5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071991906119c4565b73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610763573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078791906119c4565b73ffffffffffffffffffffffffffffffffffffffff1614156107d5576040517fbdebb83f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33ff5b60008183516020850134f59050803b6107f057600080fd5b505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b73ffffffffffffffffffffffffffffffffffffffff8116610919576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610485565b610922816116b1565b50565b60005473ffffffffffffffffffffffffffffffffffffffff1633146109a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b805160005b818110156107f05760048382815181106109c7576109c76119e1565b602090810291909101810151825460018082018555600094855293839020825160029092020180547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff938416178255929093015192840180549092169216919091179055016109ab565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ab6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ada91906119c4565b6040517ff2fde38b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301529192509082169063f2fde38b90602401600060405180830381600087803b158015610b6757600080fd5b505af1158015610b7b573d6000803e3d6000fd5b5050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1391906119c4565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca691906119c4565b60045490915060005b81811015610dd4576003546004805473ffffffffffffffffffffffffffffffffffffffff90921691637bccacee919084908110610cee57610cee6119e1565b906000526020600020906002020160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660048481548110610d3357610d336119e1565b600091825260209091206002909102015460405160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b158015610db157600080fd5b505af1158015610dc5573d6000803e3d6000fd5b50505050806001019050610caf565b506001546040517fe26b2f6300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529084169063e26b2f6390602401600060405180830381600087803b158015610e4257600080fd5b505af1158015610e56573d6000803e3d6000fd5b50506001546040517fcf33d95500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201527f0000000000000000000000000000000000000000000000000000000000000000909116925063cf33d9559150602401600060405180830381600087803b158015610ee857600080fd5b505af1158015610efc573d6000803e3d6000fd5b50505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f919190611a10565b905060005b818110156116ab576003546040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810183905260009173ffffffffffffffffffffffffffffffffffffffff1690635094cb4f90602401602060405180830381865afa15801561100e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103291906119c4565b6001546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80841660048301529293506000929091169063fdd5764590602401602060405180830381865afa1580156110a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110cc91906119c4565b905060008173ffffffffffffffffffffffffffffffffffffffff1663ce30bbdb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561111b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113f9190611a29565b9050600c81601081111561115557611155611a4a565b14156116225760008273ffffffffffffffffffffffffffffffffffffffff166320b2c1516040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111cc91906119c4565b905060008373ffffffffffffffffffffffffffffffffffffffff1663927188d96040518163ffffffff1660e01b8152600401602060405180830381865afa15801561121b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123f91906119c4565b905060008473ffffffffffffffffffffffffffffffffffffffff166399253ac06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561128e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b291906119c4565b6040517f9dcb511a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152919250908a169063e8a97a3e9083908390639dcb511a90602401602060405180830381865afa15801561132c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135091906119c4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156113bd57600080fd5b505af11580156113d1573d6000803e3d6000fd5b50506040517f9dcb511a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301528c16925063e8a97a3e915085908390639dcb511a90602401602060405180830381865afa15801561144b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061146f91906119c4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156114dc57600080fd5b505af11580156114f0573d6000803e3d6000fd5b50506003546001546040517f7832743800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301529283169450633e7c88d69350879290911690637832743890602401602060405180830381865afa158015611573573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115979190611a79565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015261ffff166024820152604401600060405180830381600087803b15801561160657600080fd5b505af115801561161a573d6000803e3d6000fd5b505050505050505b600d81601081111561163657611636611a4a565b141561169d578173ffffffffffffffffffffffffffffffffffffffff16639b51ecd36040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561168457600080fd5b505af1158015611698573d6000803e3d6000fd5b505050505b836001019350505050610f96565b50505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561173857600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156117915761179161173f565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156117de576117de61173f565b604052919050565b600080604083850312156117f957600080fd5b823567ffffffffffffffff8082111561181157600080fd5b818501915085601f83011261182557600080fd5b81356020828211156118395761183961173f565b611869817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011601611797565b9250818352878183860101111561187f57600080fd5b8181850182850137600091830181019190915290969401359450505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461092257600080fd5b6000602082840312156118d257600080fd5b81356118dd8161189e565b9392505050565b600060208083850312156118f757600080fd5b823567ffffffffffffffff8082111561190f57600080fd5b818501915085601f83011261192357600080fd5b8135818111156119355761193561173f565b611943848260051b01611797565b818152848101925060069190911b83018401908782111561196357600080fd5b928401925b818410156119b957604084890312156119815760008081fd5b61198961176e565b84356119948161189e565b8152848601356119a38161189e565b8187015283526040939093019291840191611968565b979650505050505050565b6000602082840312156119d657600080fd5b81516118dd8161189e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215611a2257600080fd5b5051919050565b600060208284031215611a3b57600080fd5b8151601181106118dd57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060208284031215611a8b57600080fd5b815161ffff811681146118dd57600080fdfea264697066735822122090f5e4310a8b66bfdd7fdfbe64bc5b98570e7c1a415ffb0ced3c857cf6c5b14064736f6c634300080a00336101606040526000805462ff00001916620c00001790553480156200002357600080fd5b50604051620058e8380380620058e8833981016040819052620000469162000537565b806001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000085573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ab919062000537565b6000805460ff191690556001600160a01b038116620000dd57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200011c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000142919062000537565b6001600160a01b03166080816001600160a01b031681525050506000816001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200019d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c3919062000537565b6001600160a01b03831661010081905260e081905260408051632495a59960e01b81529051929350600092632495a599916004808201926020929091908290030181865afa1580156200021a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000240919062000537565b6001600160a01b03811660c05290506200025a8162000472565b816001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000299573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002bf919062000537565b6001600160a01b0316610120816001600160a01b031681525050816001600160a01b03166377532ed96040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000318573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033e919062000537565b6001600160a01b0316610140816001600160a01b031681525050816001600160a01b031663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000397573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003bd919062000537565b6001600001600a6101000a8154816001600160a01b0302191690836001600160a01b03160217905550816001600160a01b0316639068a8686040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000425573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044b919062000537565b6001600160a01b031660a0525050600380546001600160a01b031916331790555062000588565b6001600160a01b03811660009081526006602052604090205415620004aa57604051632e5a5c7760e01b815260040160405180910390fd5b61010060055410620004cf57604051631cbbe18560e01b815260040160405180910390fd5b600580546001600160a01b0383166000818152600660209081526040808320600190951b948590558483526004909152812091909155825491929062000515836200055e565b91905055505050565b6001600160a01b03811681146200053457600080fd5b50565b6000602082840312156200054a57600080fd5b815162000557816200051e565b9392505050565b60006000198214156200058157634e487b7160e01b600052601160045260246000fd5b5060010190565b60805160a05160c05160e051610100516101205161014051615248620006a0600039600081816107e20152818161371001526137c501526000818161052f01526136780152600081816103d301528181610e5701528181610ebb015281816124ff0152818161265a01528181612aa101528181612b8c01528181612c4e01528181612d0d0152613b8f015260006105a401526000818161062701528181610d2201528181610db301528181610e0001528181610e3601528181610f3f0152818161203a01528181612b6b015281816130ee015281816134dc015281816135a90152613fe601526000818161081c01528181610fe101526124c20152600081816107a80152818161118401526122cb01526152486000f3fe608060405234801561001057600080fd5b50600436106103415760003560e01c8063830aa745116101bd578063a70bc542116100f9578063e75538c7116100a2578063f9aa028a1161007c578063f9aa028a1461089d578063fdd57645146108bd578063fe47cde7146108f3578063ff6875431461091357600080fd5b8063e75538c714610864578063e958b70414610877578063f67c5bd01461088a57600080fd5b8063db7ceb80116100d3578063db7ceb8014610817578063dc2b21c11461083e578063e1998cf91461085157600080fd5b8063a70bc542146107ca578063c5e10eef146107dd578063d48bfca71461080457600080fd5b806394cf073a116101665780639f5f86ae116101405780639f5f86ae146107745780639fd12b7714610787578063a366f49614610790578063a50cf2c8146107a357600080fd5b806394cf073a146106f557806395373018146107085780639af1d35a1461071b57600080fd5b80638991b2f1116101975780638991b2f1146106af5780638fe3f93f146106cf578063944ac59f146106e257600080fd5b8063830aa7451461066f5780638345f26e146106825780638456cb59146106a757600080fd5b8063458936f51161028c578063570a7af2116102355780636ce4074a1161020f5780636ce4074a146105ef5780636e98e5e41461060f5780636f307dc314610622578063783274381461064957600080fd5b8063570a7af21461059f5780635c975abb146105c6578063654a9eda146105dc57600080fd5b80635063524a116102665780635063524a1461055157806351e3f1601461058457806354fd4d501461059757600080fd5b8063458936f51461050e57806346fb371d146105175780634f0e0ef31461052a57600080fd5b80632630c12f116102ee5780633192195c116102c85780633192195c146104be5780633e8297ca146104e65780633f4ba83a1461050657600080fd5b80632630c12f1461045857806329df0b93146104845780632f7a18811461049757600080fd5b806316f0115b1161031f57806316f0115b146103ce578063172c48c7146103f55780632362a2d81461043757600080fd5b8063055ee9b5146103465780630d8f9cee146103a657806311ca4fc2146103bb575b600080fd5b61037c610354366004614a87565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6103b96103b4366004614aa4565b610949565b005b6103b96103c9366004614aa4565b610a76565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b610408610403366004614add565b610b4e565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835261ffff90911660208301520161039d565b61044a610445366004614b13565b610b66565b60405190815260200161039d565b6001546a0100000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1661037c565b6103b9610492366004614a87565b6110be565b60005461037c906301000000900473ffffffffffffffffffffffffffffffffffffffff1681565b6104d16104cc366004614a87565b611122565b6040805192835260208301919091520161039d565b61044a6104f4366004614a87565b60096020526000908152604090205481565b6103b9611156565b61044a60055481565b6103b9610525366004614b95565b611244565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b61056461055f366004614be6565b61149b565b60408051948552602085019390935291830152606082015260800161039d565b6103b9610592366004614aa4565b611602565b61044a600281565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b60005460ff16604051901515815260200161039d565b6103b96105ea366004614c21565b611703565b6106026105fd366004614d40565b611bbb565b60405161039d9190614e5b565b6103b961061d366004614aa4565b611e8e565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b61065c610657366004614a87565b612036565b60405161ffff909116815260200161039d565b6103b961067d366004614b95565b61210f565b6000546106959062010000900460ff1681565b60405160ff909116815260200161039d565b6103b961229d565b61044a6106bd366004614a87565b60086020526000908152604090205481565b61037c6106dd366004614e6e565b612389565b6103b96106f0366004614ea5565b612718565b61044a610703366004614f0a565b612845565b6103b9610716366004614a87565b612e5a565b6001546040805161ffff808416825262010000840481166020830152640100000000840481169282019290925266010000000000008304821660608201526801000000000000000090920416608082015260a00161039d565b6103b9610782366004614a87565b612f85565b61044a60075481565b6103b961079e366004614add565b613045565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b96107d8366004614f4c565b61309b565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b9610812366004614a87565b613221565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b961084c366004614f81565b61327b565b6103b961085f366004614aa4565b613306565b610408610872366004614add565b6134c9565b61037c610885366004614a87565b613541565b61044a610898366004614a87565b6135a5565b60035461037c9073ffffffffffffffffffffffffffffffffffffffff1681565b61037c6108cb366004614a87565b600b6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b600c5461037c9073ffffffffffffffffffffffffffffffffffffffff1681565b61037c610921366004614a87565b600a6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561099b57506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b156109d2576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff1615610a14576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055610a4a828261362e565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b60035473ffffffffffffffffffffffffffffffffffffffff163314610ac7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805473ffffffffffffffffffffffffffffffffffffffff9384166301000000027fffffffffffffffffff0000000000000000000000000000000000000000ffffff90911617905560018054919092166a0100000000000000000000027fffff0000000000000000000000000000000000000000ffffffffffffffffffff909116179055565b600080610b5d6001841b6134c9565b91509150915091565b6000805460ff1615610bd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064015b60405180910390fd5b600054610100900460ff1615610c1b576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff163314610ca0576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610cab89613541565b90506000806000806000610cbe86611122565b9094509050610ccf8c8e868461149b565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152939b5093985090955093506000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015610d6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8f9190614fa4565b9050610d9b8887614fec565b610da6906001614fec565b811115610de657610de1877f00000000000000000000000000000000000000000000000000000000000000008d60018c8b870303038d61366e565b610e30565b610e3073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168d8960018a8d01869003016138c0565b610e7e877f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000089600061366e565b6040517fca9505e40000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604481018490527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ca9505e490606401600060405180830381600087803b158015610f1457600080fd5b505af1158015610f28573d6000803e3d6000fd5b50505050505050506001841115610f6757610f67837f00000000000000000000000000000000000000000000000000000000000000008d87600061366e565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260086020526040902054861916610f9c8489888461395b565b6040517f89b77b3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f000000000000000000000000000000000000000000000000000000000000000016906389b77b3e90602401600060405180830381600087803b15801561102557600080fd5b505af1158015611039573d6000803e3d6000fd5b50505073ffffffffffffffffffffffffffffffffffffffff909c16600090815260026020526040812080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550929a9950505050505050505050565b6000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314611116576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61111f81613a35565b50565b60008060008061113185613aa6565b91955092509050816111438286615004565b61114d9190615041565b92505050915091565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156111e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611204919061507c565b61123a576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611242613c24565b565b60005460ff16156112b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156112f3576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100178155338152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff9081169084161480159061137457506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b80156113985750600c5473ffffffffffffffffffffffffffffffffffffffff163314155b806113b7575073ffffffffffffffffffffffffffffffffffffffff8316155b156113ee576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113f7826135a5565b61142d576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061143885613541565b9050611448838583856000613d05565b61146c5761145b83858360006001613d05565b5061146a838583856001613d05565b505b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b6001546000908190819081906127109061ffff166114b98888615099565b6114c39190615004565b6114cd9190615041565b6114d79086614fec565b935060018760028111156114ed576114ed6150b0565b1415611587576001546000906127109061151390640100000000900461ffff168b615004565b61151d9190615041565b6001549091506127109061153b9062010000900461ffff168b615004565b6115459190615041565b61154f9086614fec565b94508481111561156657600185820303935061156a565b8094505b85811061157b578585039250611581565b84860391505b506115f7565b600287600281111561159b5761159b6150b0565b14156115f157600154600090612710906115c59068010000000000000000900461ffff168b615004565b6115cf9190615041565b6001549091506127109061153b906601000000000000900461ffff168b615004565b84840391505b945094509450949050565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561165457506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b1561168b576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff16156116cd576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055610a4a8282613ea6565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561175557506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b1561178c576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff16156117ce576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790556118048584613ea6565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152600091908616906370a0823190602401602060405180830381865afa158015611874573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118989190614fa4565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529192506000918616906370a0823190602401602060405180830381865afa15801561190a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192e9190614fa4565b60015490915060009081906a0100000000000000000000900473ffffffffffffffffffffffffffffffffffffffff16635cecbd0e61196c8689615099565b8a6119778988615099565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152600481019390935273ffffffffffffffffffffffffffffffffffffffff918216602484015260448301528a1660648201526084016040805180830381865afa1580156119f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1791906150df565b9150915060018411611a2d57611a2d898961362e565b611a3687612036565b611a449061ffff1682615004565b9050611a4f88612036565b611a5d9061ffff1683615004565b9150818110611a7857611a6f89613a35565b5050505061146c565b73ffffffffffffffffffffffffffffffffffffffff891660009081526009602052604081205483611ab56b033b2e3c9fd0803ce800000085615004565b611abf9190615041565b611ad5906b033b2e3c9fd0803ce8000000615099565b611adf9190614fec565b60015490915061271090611b0a906b033b2e3c9fd0803ce80000009062010000900461ffff16615004565b611b149190615041565b8111611b555773ffffffffffffffffffffffffffffffffffffffff8a166000908152600960205260409020819055611b4b8a613a35565b505050505061146c565b611b5e8a613f56565b50505073ffffffffffffffffffffffffffffffffffffffff871660009081526009602052604090206001905550505050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b6060611bc960005460ff1690565b15611c30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff1615611c72576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100178155338152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff908116908416141580611ce7575073ffffffffffffffffffffffffffffffffffffffff8316155b15611d3d57600c5473ffffffffffffffffffffffffffffffffffffffff163314611d3d576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611d4885613541565b90508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167faed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab0360405160405180910390a36040517f1cff79cd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821690631cff79cd90611df89087908790600401615103565b6000604051808303816000875af1158015611e17573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611e5d9190810190615132565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905595945050505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314611edf576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821615611f4f5773ffffffffffffffffffffffffffffffffffffffff8281166000908152600a6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169183169190911790555b73ffffffffffffffffffffffffffffffffffffffff811615611fbf5773ffffffffffffffffffffffffffffffffffffffff8181166000908152600b6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169184169190911790555b73ffffffffffffffffffffffffffffffffffffffff811673cccccccccccccccccccccccccccccccccccccccc141561203257600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790555b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120ba5750506001547e01000000000000000000000000000000000000000000000000000000000000900461ffff1690565b60006120c5836135a5565b9050806120fe576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612107816134c9565b949350505050565b60005460ff161561217c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156121be576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff163314612243576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61224d8383613ea6565b61226f73ffffffffffffffffffffffffffffffffffffffff83168585846138c0565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555050565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015612327573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061234b919061507c565b612381576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112426142d4565b6000805460ff16156123f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff1615612439576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff1633146124be576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166321d18456857f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612568573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061258c9190614fa4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168152600481019290925260248201526044016020604051808303816000875af11580156125e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061260b91906151a0565b6040517fbf28068b0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff80831660248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063bf28068b90604401600060405180830381600087803b1580156126a057600080fd5b505af11580156126b4573d6000803e3d6000fd5b505050506126c28382614394565b73ffffffffffffffffffffffffffffffffffffffff811660009081526008602052604081206001905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690559392505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314612769576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805461ffff92831668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9484166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff96851664010000000002969096167fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff97851662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000090931694909816939093171794909416949094179190911716919091179055565b6000805460ff16156128b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156128f5576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff16331461297a576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080600061298887613aa6565b925092509250846129a25761299d8684615099565b6129ac565b6129ac8684614fec565b935060008515612b045769021e19e0c9bab24000008510612a15576129d583603689901c615004565b6129e3603686901c84615004565b6129ed9190614fec565b603686901c6129fc8585615004565b612a069190615004565b612a109190615041565b612a52565b612a1f8388615004565b612a298584615004565b612a339190614fec565b85612a3e8585615004565b612a489190615004565b612a529190615041565b6040517fbf28068b0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff8a811660248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063bf28068b90604401600060405180830381600087803b158015612ae757600080fd5b505af1158015612afb573d6000803e3d6000fd5b50505050612d9f565b60008484612b128583615004565b612b1c9190615041565b612b269190615099565b60015490915060009061271090612b419061ffff1684615004565b612b4b9190615041565b905073ffffffffffffffffffffffffffffffffffffffff8a1663d1660f997f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000084612bb6878f614fec565b612bc09190614fec565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b158015612c3457600080fd5b505af1158015612c48573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ca9505e4838b612c949190614fec565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815260048101919091526024810184905260006044820152606401600060405180830381600087803b158015612cf357600080fd5b505af1158015612d07573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d9a9190614fa4565b925050505b6040517f16128211000000000000000000000000000000000000000000000000000000008152600481018690526024810182905273ffffffffffffffffffffffffffffffffffffffff891690631612821190604401600060405180830381600087803b158015612e0e57600080fd5b505af1158015612e22573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055509498975050505050505050565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff16158015612eac57506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b15612ee3576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff1615612f25576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055612f5a81613f56565b50600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b60035473ffffffffffffffffffffffffffffffffffffffff163314612fd6576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517ff62005acebe9b616aefb5f248b48f5e89f28437b27d1eebc0b2d911209f297af90600090a250565b60035473ffffffffffffffffffffffffffffffffffffffff163314613096576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600755565b60035473ffffffffffffffffffffffffffffffffffffffff1633146130ec576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613193576001805461ffff83167e01000000000000000000000000000000000000000000000000000000000000027dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790555050565b600061319e836135a5565b9050806131d7576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000908152600460205260409020805473ffffffffffffffffffffffffffffffffffffffff1675ffff000000000000000000000000000000000000000060a084901b161790555050565b60035473ffffffffffffffffffffffffffffffffffffffff163314613272576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61111f81614467565b60035473ffffffffffffffffffffffffffffffffffffffff1633146132cc576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805460ff90921662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff909216919091179055565b60005460ff1615613373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156133b5576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff16331461343a576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061344583613541565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260026020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055905061349c8282614394565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b60008082600114156135275750506001547f0000000000000000000000000000000000000000000000000000000000000000927e0100000000000000000000000000000000000000000000000000000000000090910461ffff169150565b50506000908152600460205260409020549060a082901c90565b73ffffffffffffffffffffffffffffffffffffffff80821660009081526002602052604090205416806135a0576040517fb5ba4c4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146136255773ffffffffffffffffffffffffffffffffffffffff8216600090815260066020526040902054613628565b60015b92915050565b6000613639826135a5565b73ffffffffffffffffffffffffffffffffffffffff909316600090815260086020526040902080549319939093169092555050565b8080156136c657507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b15613828576040517fd1660f9900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301526044820184905286169063d1660f9990606401600060405180830381600087803b15801561376357600080fd5b505af1158015613777573d6000803e3d6000fd5b50506040517f5869dba800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690527f0000000000000000000000000000000000000000000000000000000000000000169250635869dba89150604401600060405180830381600087803b15801561380b57600080fd5b505af115801561381f573d6000803e3d6000fd5b505050506138b9565b6040517fd1660f9900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301526044820184905286169063d1660f9990606401600060405180830381600087803b1580156138a057600080fd5b505af11580156138b4573d6000803e3d6000fd5b505050505b5050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261395590859061455b565b50505050565b60025b8181116138b95781811615613a2d576000613978826134c9565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529192506000918316906370a0823190602401602060405180830381865afa1580156139eb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a0f9190614fa4565b90506002811115613a2a57613a2a878388600185038961366e565b50505b60011b61395e565b73ffffffffffffffffffffffffffffffffffffffff811660009081526008602052604081205490613a6582614667565b60005490915062010000900460ff16811115613aa1576000613a86836146a7565b613a91906001614fec565b905061395584848460008561470b565b505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff16631afbb7a46040518163ffffffff1660e01b8152600401602060405180830381865afa158015613af6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b1a9190614fa4565b92508373ffffffffffffffffffffffffffffffffffffffff166317d11a156040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b8b9190614fa4565b91507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bf8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c1c9190614fa4565b929491935050565b60005460ff16613c90576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610bd0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6040805173ffffffffffffffffffffffffffffffffffffffff8681166024830152604480830186905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b30000000000000000000000000000000000000000000000000000000017905291517f1cff79cd000000000000000000000000000000000000000000000000000000008152600092861691631cff79cd91613dc6918a91600401615103565b6000604051808303816000875af1925050508015613e2457506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052613e219190810190615132565b60015b613e2d57613e61565b80511580613e50575080806020019051810190613e4a919061507c565b15156001145b15613e5f576001915050613e9d565b505b8115613e99576040517f76e3e29c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060005b95945050505050565b6000613eb1826135a5565b9050801580613ec35750600754811615155b15613efa576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83166000908152600860205260409020548116613aa15773ffffffffffffffffffffffffffffffffffffffff83166000908152600860205260409020805482179055505050565b60015473ffffffffffffffffffffffffffffffffffffffff8281166000908152600860205260408120546a010000000000000000000090930490911691908080613f9f86611122565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526127108202600482015273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350908716915063f9a6503090604401602060405180830381865afa15801561403a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061405e9190614fa4565b9250614069846146a7565b6001019150506000806000805b848110156142a157801561408f5760018186031b614092565b60015b935086841615614299576000806140a8866134c9565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8e811660048301529294509092506000918416906370a0823190602401602060405180830381865afa15801561411d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141419190614fa4565b9050600181111561428c576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff848116602483015261ffff841691908d169063f9a6503090604401602060405180830381865afa1580156141c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141ea9190614fa4565b6141f49190615004565b6141fe9087614fec565b95508886106142875760006142128b614667565b60005490915062010000900460ff16811115614249576142448d8c836001891561423e57898e0361470b565b8d61470b565b614278565b85156142785773ffffffffffffffffffffffffffffffffffffffff8d1660009081526008602052604090208b90555b50505050505050505050505050565b614295565b98861898600194505b5050505b600101614076565b506040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005460ff1615614341576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613cdb3390565b73ffffffffffffffffffffffffffffffffffffffff821615806143dd575073ffffffffffffffffffffffffffffffffffffffff8281166000908152600260205260409020541615155b15614414576040517f9e59609e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff918216600090815260026020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001691909216179055565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260066020526040902054156144c4576040517f2e5a5c7700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61010060055410614501576040517f1cbbe18500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005805473ffffffffffffffffffffffffffffffffffffffff83166000818152600660209081526040808320600190951b9485905584835260049091528120919091558254919290614552836151bd565b91905055505050565b60006145bd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166148799092919063ffffffff16565b805190915015613aa157808060200190518101906145db919061507c565b613aa1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610bd0565b60008060005b6101008110156146a0576001811b91508382161561468c578260010192505b838210614698576146a0565b60010161466d565b5050919050565b600081600114156146ba57506000919050565b61010060015b60016146cc8284614fec565b901c92506001831b848116158015906146e75750600185851c145b156146f257506146a0565b84811061470157839250614705565b8391505b506146c0565b815b81811015614846576001811b8581161561483d57600061472c826134c9565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529192506000918316906370a0823190602401602060405180830381865afa15801561479f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147c39190614fa4565b90506001811161483a57600054978318977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9097019660ff6201000090910416871161483a5750505073ffffffffffffffffffffffffffffffffffffffff86166000908152600860205260409020859055506138b9565b50505b5060010161470d565b506040517f53275fcb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606148888484600085614892565b90505b9392505050565b606082471015614924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610bd0565b843b61498c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610bd0565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516149b591906151f6565b60006040518083038185875af1925050503d80600081146149f2576040519150601f19603f3d011682016040523d82523d6000602084013e6149f7565b606091505b5091509150614a07828286614a12565b979650505050505050565b60608315614a2157508161488b565b825115614a315782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd09190614e5b565b73ffffffffffffffffffffffffffffffffffffffff8116811461111f57600080fd5b600060208284031215614a9957600080fd5b813561488b81614a65565b60008060408385031215614ab757600080fd5b8235614ac281614a65565b91506020830135614ad281614a65565b809150509250929050565b600060208284031215614aef57600080fd5b5035919050565b8035600381106135a057600080fd5b801515811461111f57600080fd5b600080600080600080600060e0888a031215614b2e57600080fd5b8735614b3981614a65565b9650614b4760208901614af6565b9550604088013594506060880135614b5e81614a65565b93506080880135614b6e81614a65565b925060a0880135915060c0880135614b8581614b05565b8091505092959891949750929550565b60008060008060808587031215614bab57600080fd5b8435614bb681614a65565b93506020850135614bc681614a65565b92506040850135614bd681614a65565b9396929550929360600135925050565b60008060008060808587031215614bfc57600080fd5b84359350614c0c60208601614af6565b93969395505050506040820135916060013590565b600080600080600060a08688031215614c3957600080fd5b8535614c4481614a65565b94506020860135614c5481614a65565b93506040860135614c6481614a65565b94979396509394606081013594506080013592915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614cf257614cf2614c7c565b604052919050565b600067ffffffffffffffff821115614d1457614d14614c7c565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600080600060608486031215614d5557600080fd5b8335614d6081614a65565b92506020840135614d7081614a65565b9150604084013567ffffffffffffffff811115614d8c57600080fd5b8401601f81018613614d9d57600080fd5b8035614db0614dab82614cfa565b614cab565b818152876020838501011115614dc557600080fd5b816020840160208301376000602083830101528093505050509250925092565b60005b83811015614e00578181015183820152602001614de8565b838111156139555750506000910152565b60008151808452614e29816020860160208601614de5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061488b6020830184614e11565b60008060408385031215614e8157600080fd5b823591506020830135614ad281614a65565b803561ffff811681146135a057600080fd5b600080600080600060a08688031215614ebd57600080fd5b614ec686614e93565b9450614ed460208701614e93565b9350614ee260408701614e93565b9250614ef060608701614e93565b9150614efe60808701614e93565b90509295509295909350565b600080600060608486031215614f1f57600080fd5b8335614f2a81614a65565b9250602084013591506040840135614f4181614b05565b809150509250925092565b60008060408385031215614f5f57600080fd5b8235614f6a81614a65565b9150614f7860208401614e93565b90509250929050565b600060208284031215614f9357600080fd5b813560ff8116811461488b57600080fd5b600060208284031215614fb657600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115614fff57614fff614fbd565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561503c5761503c614fbd565b500290565b600082615077577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60006020828403121561508e57600080fd5b815161488b81614b05565b6000828210156150ab576150ab614fbd565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600080604083850312156150f257600080fd5b505080516020909101519092909150565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015260006148886040830184614e11565b60006020828403121561514457600080fd5b815167ffffffffffffffff81111561515b57600080fd5b8201601f8101841361516c57600080fd5b805161517a614dab82614cfa565b81815285602083850101111561518f57600080fd5b613e9d826020830160208601614de5565b6000602082840312156151b257600080fd5b815161488b81614a65565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156151ef576151ef614fbd565b5060010190565b60008251615208818460208701614de5565b919091019291505056fea26469706673582212209d39bb9d4972b515acdad1ffb757acd15e103ca6ee762f88a6382b36243734ba64736f6c634300080a00336101406040523480156200001257600080fd5b5060405162005e9738038062005e97833981016040819052620000359162000198565b60016000556001600160a01b0383166200006257604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038316608081905260408051636f307dc360e01b81529051636f307dc3916004808201926020929091908290030181865afa158015620000ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d39190620001ea565b6001600160a01b031660a0816001600160a01b031681525050826001600160a01b0316634f0e0ef36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200012b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001519190620001ea565b6001600160a01b0390811660c0529190911660e0819052151561010052151561012052506200020f565b80516001600160a01b03811681146200019357600080fd5b919050565b600080600060608486031215620001ae57600080fd5b620001b9846200017b565b9250620001c9602085016200017b565b915060408401518015158114620001df57600080fd5b809150509250925092565b600060208284031215620001fd57600080fd5b62000208826200017b565b9392505050565b60805160a05160c05160e0516101005161012051615a86620004116000396000818161061101528181612fb5015261481f01526000818161031701528181610dde015281816144f901526146e5015260008181610557015281816146a901526147a901526000818161034b0152818161387d015261392d01526000818161047301528181611bfe0152818161274f0152818161280d0152818161366a01526137dd015260008181610665015281816109d801528181610b0301528181610bd501528181610cdd01528181610e6501528181610fe30152818161114e0152818161120e0152818161132e015281816114510152818161162b01528181611708015281816117e0015281816119e501528181611b1201528181611d9501528181611ed5015281816120040152818161216801528181612290015281816123c601528181612568015281816126390152818161266f0152818161293d01528181612a2101528181612a8a01528181612bde01528181612d2601528181612e6801528181612ec2015281816130a10152818161311b015281816131b401528181613341015281816134c10152818161358a0152818161372f01528181613a1a01528181613b2e01528181613dbb015281816142200152818161432801528181614492015281816148e7015281816149e801528181614aae0152614d8f0152615a866000f3fe6080604052600436106102695760003560e01c8063860aefcf11610153578063c7de38a6116100cb578063dfd594651161007f578063eb9606df11610064578063eb9606df1461081e578063f9eaee0d1461083e578063ffd9b9071461085e57600080fd5b8063dfd59465146107de578063e1f21c67146107fe57600080fd5b8063cff0ab96116100b0578063cff0ab96146106ef578063d9ccbec114610783578063dcf65482146107be57600080fd5b8063c7de38a6146106a7578063caa5c23f146106dc57600080fd5b80639c55a05411610122578063b55bb84b11610107578063b55bb84b14610633578063c12c21c014610653578063c690908a1461068757600080fd5b80639c55a054146105df578063b1836d32146105ff57600080fd5b8063860aefcf146104db5780639408b63f146105455780639b67ab30146105795780639be0536a146105bd57600080fd5b80635d91a0e0116101e65780636d19b486116101b55780637071b7c51161019a5780637071b7c51461049557806379c0ef91146104a857806382871ace146104c857600080fd5b80636d19b486146104415780636f307dc31461046157600080fd5b80635d91a0e0146103e85780635f73fbec146103fb578063601d66f61461040e5780636c8f225d1461042e57600080fd5b80633d9287fa1161023d5780635019e20a116102225780635019e20a1461039257806354fd4d50146103b257806359781034146103d557600080fd5b80633d9287fa146103055780634f0e0ef31461033957600080fd5b8062842b571461026e578063256ac915146102905780632a7ba1f7146102c55780632b7c7b11146102e5575b600080fd5b34801561027a57600080fd5b5061028e6102893660046151bf565b61087e565b005b34801561029c57600080fd5b506102b06102ab3660046151f8565b61098e565b60405190151581526020015b60405180910390f35b3480156102d157600080fd5b5061028e6102e0366004615215565b610a61565b3480156102f157600080fd5b5061028e610300366004615215565b610c3b565b34801561031157600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561034557600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102bc565b34801561039e57600080fd5b5061028e6103ad3660046151f8565b610d6a565b3480156103be57600080fd5b506103c7600281565b6040519081526020016102bc565b61028e6103e336600461522e565b61108c565b61028e6103f63660046152bb565b611275565b61028e610409366004615340565b611589565b34801561041a57600080fd5b5061028e6104293660046153d8565b6117de565b61028e61043c36600461541b565b611900565b34801561044d57600080fd5b506102b061045c3660046151f8565b611c31565b34801561046d57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b61028e6104a336600461546e565b611c60565b3480156104b457600080fd5b5061036d6104c3366004615215565b611f3e565b61028e6104d63660046152bb565b611f4b565b3480156104e757600080fd5b5060025461051c906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041682565b604080516fffffffffffffffffffffffffffffffff9384168152929091166020830152016102bc565b34801561055157600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561058557600080fd5b506004546040805167ffffffffffffffff608084901c1681526fffffffffffffffffffffffffffffffff9092166020830152016102bc565b3480156105c957600080fd5b506105d261227d565b6040516102bc91906154e2565b3480156105eb57600080fd5b5061028e6105fa36600461553c565b61228e565b34801561060b57600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561063f57600080fd5b5061028e61064e3660046151f8565b6123c4565b34801561065f57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561069357600080fd5b5061028e6106a23660046151f8565b6124c6565b3480156106b357600080fd5b506106c76106c23660046151f8565b612668565b604080519283526020830191909152016102bc565b61028e6106ea366004615557565b61289b565b3480156106fb57600080fd5b5060015461074e906fffffffffffffffffffffffffffffffff811690700100000000000000000000000000000000810460ff169071010000000000000000000000000000000000900464ffffffffff1683565b604080516fffffffffffffffffffffffffffffffff9094168452911515602084015264ffffffffff16908201526060016102bc565b34801561078f57600080fd5b506102b061079e366004615599565b600360209081526000928352604080842090915290825290205460ff1681565b3480156107ca57600080fd5b5061028e6107d93660046151f8565b612a88565b3480156107ea57600080fd5b506103c76107f93660046151f8565b612b86565b34801561080a57600080fd5b5061028e61081936600461522e565b612c6d565b34801561082a57600080fd5b5061028e6108393660046155c7565b612ec0565b34801561084a57600080fd5b506102b06108593660046151f8565b613057565b34801561086a57600080fd5b5061028e6108793660046155ee565b6131b2565b600260005414156108f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b6002600090815573ffffffffffffffffffffffffffffffffffffffff8316808252600360209081526040808420338086529083529381902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081527f9b3258bc4904fd6426b99843e206c6c7cdb1fd0f040121c25b71dafbb3851ee0910160405180910390a350506001600055565b6040517f055ee9b500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063055ee9b590602401602060405180830381865afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a43919061560b565b73ffffffffffffffffffffffffffffffffffffffff16141592915050565b60026000541415610ace576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610b5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b83919061560b565b9050610b903382846132eb565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906395373018906024015b600060405180830381600087803b158015610c1a57600080fd5b505af1158015610c2e573d6000803e3d6000fd5b5050600160005550505050565b60026000541415610ca8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610d39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5d919061560b565b9050610b90338284613411565b60026000541415610dd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000557f000000000000000000000000000000000000000000000000000000000000000015610e34576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610ec1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee5919061560b565b33600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915290205490915060ff16610f52576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f5d82613583565b5090508015610f98576040517ff713841e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b15801561102757600080fd5b505af115801561103b573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692503391507f93c70cc9715bef0d83edf2095f3595402279d274f402a73ffc17f1bcb19d863d90600090a35050600160005550565b600260005414156110f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611106613875565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063e958b70490602401602060405180830381865afa158015611197573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bb919061560b565b90506111c9848285856139b7565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401600060405180830381600087803b15801561125257600080fd5b505af1158015611266573d6000803e3d6000fd5b50506001600055505050505050565b600260005414156112e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611375573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611399919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166113e8576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806113f483613583565b915091508161142f576040517f1fdd676f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611437613875565b831561144d5761144d85858b8660016000613ae3565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632362a2d88b600185338e8e8e6040518863ffffffff1660e01b81526004016114b59796959493929190615663565b6020604051808303816000875af11580156114d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f891906156bf565b90508873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f7dfecd8419723a9d3954585a30c2a270165d70aafa146c11c1e1b88ae14390648460405161157091815260200190565b60405180910390a4505060016000555050505050505050565b600260005414156115f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ab919061560b565b90506116b5613875565b81156116cb576116cb8383338460016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d89061174a903390600090819083908d908d908d90600401615663565b6020604051808303816000875af1158015611769573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178d91906156bf565b5060405173ffffffffffffffffffffffffffffffffffffffff87169033907f460ad03b1cf79b1d64d3aefa28475f110ab66e84649c52bb41ed796b9b39198190600090a35050600160005550505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611849573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118d1576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff90811670010000000000000000000000000000000002911617600255565b6002600054141561196d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000908155606461198461ffff851687615707565b61198e9190615744565b9050611999816144f7565b6119a2816145e8565b6119ab84614668565b6119b3613875565b6040517f172c48c7000000000000000000000000000000000000000000000000000000008152600060048201819052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a64919061577f565b61ffff169150611a789050816127106157ae565b611a829083615707565b611a8c8288615707565b11611ac3576040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff86811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611b5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b81919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638587604051611bef92919091825261ffff16602082015260400190565b60405180910390a3611c2386827f00000000000000000000000000000000000000000000000000000000000000008a6139b7565b505060016000555050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526006602052604081205415155b92915050565b60026000541415611ccd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611cdb856144f7565b611ce484614668565b611ced856145e8565b600154700100000000000000000000000000000000900460ff1615611d3e576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d46613875565b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff85811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611de0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e04919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638885604051611e7292919091825261ffff16602082015260400190565b60405180910390a38215611e9057611e908484878460006001613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015611f1957600080fd5b505af1158015611f2d573d6000803e3d6000fd5b505060016000555050505050505050565b6000611c5a60058361480f565b60026000541415611fb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa15801561204b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206f919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166120be576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120c661481b565b6120fc576040517f7e52ccb400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061210782612668565b509050612112613875565b82156121285761212884848a8560016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d8906121aa908c90600290879033908f908f908f90600401615663565b6020604051808303816000875af11580156121c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ed91906156bf565b90508773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167ffada13ff2d5e1a1d9da37ad4a4130893b34e3c69c32b17f87ec31fd661b867078460405161226591815260200190565b60405180910390a45050600160005550505050505050565b6060612289600561486b565b905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612381576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561242f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612453919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146124b7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614878565b5050565b60026000541415612533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156125c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e8919061560b565b90506125f4818361489a565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401610c00565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126fc919061560b565b905060008061270b8387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156127a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127c991906156bf565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015291965061271091851690637afb010490604401602060405180830381865afa158015612863573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061288791906156bf565b6128919190615744565b9350505050915091565b60026000541415612908576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129bd919061560b565b90506129c7613875565b8115612a7e576129dc83833384600080613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015612a6557600080fd5b505af1158015612a79573d6000803e3d6000fd5b505050505b5050600160005550565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612af3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b17919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b7b576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614c92565b600080612b9283612668565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152919350600092507f000000000000000000000000000000000000000000000000000000000000000090911690633192195c906024016040805180830381865afa158015612c26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4a91906157c5565b9150819050612c5b61271084615707565b612c659190615744565b949350505050565b60026000541415612cda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063fdd5764590602401602060405180830381865afa158015612d6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d91919061560b565b73ffffffffffffffffffffffffffffffffffffffff161480612dd7575073ffffffffffffffffffffffffffffffffffffffff831660009081526006602052604090205415155b15612e0e576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612eac57600080fd5b505af1158015611c23573d6000803e3d6000fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f4f919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612fb3576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000061300a576040517f50dd11fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805464ffffffffff90921671010000000000000000000000000000000000027fffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffffff909216919091179055565b6040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063f67c5bd090602401602060405180830381865afa1580156130e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061310c91906156bf565b905080158015906131ab5750807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015613184573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a891906156bf565b16155b9392505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561321d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613241919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146132a5576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018054911515700100000000000000000000000000000000027fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff909216919091179055565b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600060448301819052917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561338c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133b091906156bf565b90506133bb816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f98274bf834d179ee08dc0604071b0dc90b54731bd5f725a5a96a39a86bce025a8360405161340391815260200190565b60405180910390a250505050565b61341a816144f7565b600154700100000000000000000000000000000000900460ff161561346b576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600160448301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561350c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061353091906156bf565b905061353b816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f9cac51154cc0d835e2f9c9d1f59a9344588cee107f4203bf58a8c797e3a58c458360405161340391815260200190565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613617919061560b565b90506000806136268387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156136c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136e491906156bf565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529195506000917f00000000000000000000000000000000000000000000000000000000000000001690633192195c906024016040805180830381865afa158015613775573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061379991906157c5565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350600092506127109187169063f9a6503090604401602060405180830381865afa158015613837573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061385b91906156bf565b6138659190615707565b9092109794965093945050505050565b34156139b5577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156138e357600080fd5b505af11580156138f7573d6000803e3d6000fd5b50506040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201523460248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16935063a9059cbb925060440190506020604051808303816000875af115801561398f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139b391906157e9565b505b565b6139c084614cb4565b6040517f830aa74500000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f0000000000000000000000000000000000000000000000000000000000000000169063830aa74590608401600060405180830381600087803b158015613a5e57600080fd5b505af1158015613a72573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fa32435755c235de2976ed44a75a2f85cb01faf0c894f639fe0c32bb9455fea8f83604051613ad591815260200190565b60405180910390a350505050565b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301523060248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b158015613b7257600080fd5b505af1158015613b86573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff871692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a28460005b8181101561441d5736888883818110613bea57613bea615806565b9050602002810190613bfc9190615835565b90506004613c0d6020830183615873565b90501015613c47576040517fe2b0e50600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b30613c5560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16141561421c578415613ca9576040517f5fb9107f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613cb86020830183615873565b613cc1916158d8565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167f59781034000000000000000000000000000000000000000000000000000000001415613e3c5760008080613d1e6020860186615873565b613d2c916004908290615920565b810190613d39919061522e565b925092509250613e34838c73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614613e2b576040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015613e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e26919061560b565b613e2d565b8b5b84846139b7565b505050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2b7c7b11000000000000000000000000000000000000000000000000000000001415613ec757600194506000613e996020840184615873565b613ea7916004908290615920565b810190613eb49190615215565b9050613ec1898983613411565b50614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2a7ba1f7000000000000000000000000000000000000000000000000000000001415613f80578415613f49576040517fc0b0caa800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613f586020840184615873565b613f66916004908290615920565b810190613f739190615215565b9050613ec18989836132eb565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f233a8caa0000000000000000000000000000000000000000000000000000000014156140e457600080613fda6020850185615873565b613fe8916004908290615920565b810190613ff5919061594a565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c8116600483015292945090925082918416906370a0823190602401602060405180830381865afa158015614069573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061408d91906156bf565b10156140dd576040517fa5ac537300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016108e7565b5050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fc690908a00000000000000000000000000000000000000000000000000000000141561416457600061413d6020840184615873565b61414b916004908290615920565b81019061415891906151f8565b9050613ec1888261489a565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f23e27a640000000000000000000000000000000000000000000000000000000014156141e45760006141bd6020840184615873565b6141cb916004908290615920565b8101906141d891906151f8565b9050613ec18882614d42565b6040517f1e9e7e7a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50614414565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff68754361426760208501856151f8565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156142d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142f4919061560b565b73ffffffffffffffffffffffffffffffffffffffff16148061436d575073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001661435560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16145b156143a4576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6144126143b46020830183615873565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506143f69250505060208401846151f8565b73ffffffffffffffffffffffffffffffffffffffff1690614e39565b505b50600101613bcf565b506040517f60c8e8938c9a0c0d88a98d6f1c562ce68077e12bf3edb8047378f2f736cb45b490600090a16040517fe1998cf900000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff86811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b1580156144d657600080fd5b505af11580156144ea573d6000803e3d6000fd5b5050505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006139b3576001546fffffffffffffffffffffffffffffffff9081169081146124c257600454608081901c906fffffffffffffffffffffffffffffffff16600067ffffffffffffffff8316431461456e578461458a565b61458a6fffffffffffffffffffffffffffffffff831686615976565b9050838111156145c6576040517f675f1a5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff81164360801b176004555050505050565b6002546fffffffffffffffffffffffffffffffff16811080614631575060025470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681115b156139b3576040517fce16799400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61467061481b565b156146a7576040517f63fc31c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1615614806577f0000000000000000000000000000000000000000000000000000000000000000801561472657503373ffffffffffffffffffffffffffffffffffffffff821614155b1561475d576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600160248301527f00000000000000000000000000000000000000000000000000000000000000001690639dc29fac90604401600060405180830381600087803b1580156147ed57600080fd5b505af1158015614801573d6000803e3d6000fd5b505050505b6139b381614cb4565b60006131ab8383614e7b565b60007f0000000000000000000000000000000000000000000000000000000000000000801561228957505060015471010000000000000000000000000000000000900464ffffffffff1642101590565b606060006131ab83614ea5565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f01565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561492b57600080fd5b505af115801561493f573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527fdf498aa1c340e992665d6fb4f3be8436d452c45a630cb6d7fab7963da39bac8793500190505b60405180910390a15050565b6040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600091829160019183917f00000000000000000000000000000000000000000000000000000000000000001690638991b2f190602401602060405180830381865afa158015614a2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a5391906156bf565b90505b808211614c895780821615614c7d576040517fe75538c700000000000000000000000000000000000000000000000000000000815260048101839052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e75538c7906024016040805180830381865afa158015614af4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b18919061577f565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529294509092506000918416906370a0823190602401602060405180830381865afa158015614b8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bb191906156bf565b90506001811115614c79576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff8481166024830152600091908b169063f9a6503090604401602060405180830381865afa158015614c33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c5791906156bf565b978801979050614c6b61ffff841682615707565b614c759088615976565b9650505b5050505b600182901b9150614a56565b50509250929050565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f50565b3373ffffffffffffffffffffffffffffffffffffffff821614801590614d0b575033600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16155b156139b3576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b158015614dd357600080fd5b505af1158015614de7573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527f69db9e9764da61b6681b89fb0f5be018506e0342036e56b59c3015a620d60977935001905061498d565b60606131ab83836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250615043565b6000826000018281548110614e9257614e92615806565b9060005260206000200154905092915050565b606081600001805480602002602001604051908101604052809291908181526020018280548015614ef557602002820191906000526020600020905b815481526020019060010190808311614ee1575b50505050509050919050565b6000818152600183016020526040812054614f4857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611c5a565b506000611c5a565b60008181526001830160205260408120548015615039576000614f746001836157ae565b8554909150600090614f88906001906157ae565b9050818114614fed576000866000018281548110614fa857614fa8615806565b9060005260206000200154905080876000018481548110614fcb57614fcb615806565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080614ffe57614ffe61598e565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611c5a565b6000915050611c5a565b6060612c65848460008585843b6150b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108e7565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516150df91906159ed565b60006040518083038185875af1925050503d806000811461511c576040519150601f19603f3d011682016040523d82523d6000602084013e615121565b606091505b509150915061513182828661513c565b979650505050505050565b6060831561514b5750816131ab565b82511561515b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e791906159ff565b73ffffffffffffffffffffffffffffffffffffffff811681146139b357600080fd5b80151581146139b357600080fd5b600080604083850312156151d257600080fd5b82356151dd8161518f565b915060208301356151ed816151b1565b809150509250929050565b60006020828403121561520a57600080fd5b81356131ab8161518f565b60006020828403121561522757600080fd5b5035919050565b60008060006060848603121561524357600080fd5b833561524e8161518f565b9250602084013561525e8161518f565b929592945050506040919091013590565b60008083601f84011261528157600080fd5b50813567ffffffffffffffff81111561529957600080fd5b6020830191508360208260051b85010111156152b457600080fd5b9250929050565b60008060008060008060a087890312156152d457600080fd5b86356152df8161518f565b955060208701356152ef8161518f565b9450604087013593506060870135615306816151b1565b9250608087013567ffffffffffffffff81111561532257600080fd5b61532e89828a0161526f565b979a9699509497509295939492505050565b60008060008060006080868803121561535857600080fd5b85356153638161518f565b945060208601359350604086013561537a816151b1565b9250606086013567ffffffffffffffff81111561539657600080fd5b6153a28882890161526f565b969995985093965092949392505050565b80356fffffffffffffffffffffffffffffffff811681146153d357600080fd5b919050565b600080604083850312156153eb57600080fd5b6153f4836153b3565b9150615402602084016153b3565b90509250929050565b61ffff811681146139b357600080fd5b6000806000806080858703121561543157600080fd5b8435935060208501356154438161518f565b925060408501356154538161540b565b915060608501356154638161540b565b939692955090935050565b60008060008060006080868803121561548657600080fd5b8535945060208601356154988161518f565b9350604086013567ffffffffffffffff8111156154b457600080fd5b6154c08882890161526f565b90945092505060608601356154d48161540b565b809150509295509295909350565b6020808252825182820181905260009190848201906040850190845b8181101561553057835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016154fe565b50909695505050505050565b60006020828403121561554e57600080fd5b6131ab826153b3565b6000806020838503121561556a57600080fd5b823567ffffffffffffffff81111561558157600080fd5b61558d8582860161526f565b90969095509350505050565b600080604083850312156155ac57600080fd5b82356155b78161518f565b915060208301356151ed8161518f565b6000602082840312156155d957600080fd5b813564ffffffffff811681146131ab57600080fd5b60006020828403121561560057600080fd5b81356131ab816151b1565b60006020828403121561561d57600080fd5b81516131ab8161518f565b6003811061565f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b73ffffffffffffffffffffffffffffffffffffffff888116825260e082019061568f602084018a615628565b6040830197909752948616606082015292909416608083015260a082015291151560c09092019190915292915050565b6000602082840312156156d157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561573f5761573f6156d8565b500290565b60008261577a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000806040838503121561579257600080fd5b825161579d8161518f565b60208401519092506151ed8161540b565b6000828210156157c0576157c06156d8565b500390565b600080604083850312156157d857600080fd5b505080516020909101519092909150565b6000602082840312156157fb57600080fd5b81516131ab816151b1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc183360301811261586957600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126158a857600080fd5b83018035915067ffffffffffffffff8211156158c357600080fd5b6020019150368190038213156152b457600080fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156159185780818660040360031b1b83161692505b505092915050565b6000808585111561593057600080fd5b8386111561593d57600080fd5b5050820193919092039150565b6000806040838503121561595d57600080fd5b82356159688161518f565b946020939093013593505050565b60008219821115615989576159896156d8565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60005b838110156159d85781810151838201526020016159c0565b838111156159e7576000848401525b50505050565b600082516158698184602087016159bd565b6020815260008251806020840152615a1e8160408501602087016159bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea2646970667358221220a3f4a705ab580a6ada1e438cd2ee4abc001b62d1d171fce12c41994900fef21664736f6c634300080a003360a06040523480156200001157600080fd5b5060405162005f3d38038062005f3d8339810160408190526200003491620012eb565b826001600160a01b031663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000073573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200009991906200147f565b6001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000d7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000fd91906200147f565b6000805460ff191690556001600160a01b0381166200012f57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200016e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200019491906200147f565b6001600160a01b03908116608052600180546001600160a01b031916918616918217905560408051636f307dc360e01b81529051919250636f307dc39160048083019260209291908290030181865afa158015620001f6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200021c91906200147f565b600260006101000a8154816001600160a01b0302191690836001600160a01b03160217905550826001600160a01b031663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000281573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a791906200147f565b6001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200030b91906200147f565b600080546001600160a01b039290921661010002610100600160a81b0319909216919091179055620003626103e860c86200034b6101f4612710620014bc565b60646200035c60c8612710620014bc565b620005e8565b60408101515160005b81811015620003ee576000836040015182815181106200038f576200038f620014e2565b6020026020010151600001519050620003ae81620007c260201b60201c565b620003e48185604001518481518110620003cc57620003cc620014e2565b60200260200101516020015162000a5e60201b60201c565b506001016200036b565b5060015460408051632630c12f60e01b815290516001600160a01b03909216916311ca4fc29186918491632630c12f9160048083019260209291908290030181865afa15801562000443573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200046991906200147f565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401600060405180830381600087803b158015620004b257600080fd5b505af1158015620004c7573d6000803e3d6000fd5b50506040516001600160a01b03861692507fa8b21f72cb83bce808df32dc2330217d744a1c22f3e9e44e4b11bbf049d37d9d9150600090a2600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000553573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200057991906200147f565b6001600160a01b03167f3f82447be465b0b5a4a9e54c74d5f6ae73f2e9537f2cc1590a340524703d096160405160405180910390a26020820151620005cb90620005c5906002620014f8565b62000bda565b81516020830151620005de919062000dc8565b5050505062001604565b6000620005f68585620014bc565b60015460405163172c48c760e01b81526000600482018190529293506001600160a01b039091169063172c48c7906024016040805180830381865afa15801562000644573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200066a91906200152a565b9150508061ffff168261ffff1614620006be57620006888262000f47565b60025460405161ffff841681526001600160a01b039091169060008051602062005f1d8339815191529060200160405180910390a25b60015460405163944ac59f60e01b815261ffff808a166004830152808916602483015280881660448301528087166064830152851660848201526001600160a01b039091169063944ac59f9060a401600060405180830381600087803b1580156200072857600080fd5b505af11580156200073d573d6000803e3d6000fd5b505050507f2214a403d5f8d049e52eacca974c6dea01a471e41d6a18903bfaf7dbc709741f878787612710620007749190620014bc565b876200078388612710620014bc565b6040805161ffff96871681529486166020860152928516848401529084166060840152909216608082015290519081900360a00190a150505050505050565b6001600160a01b038116620007ea57604051635919af9760e11b815260040160405180910390fd5b62000809816001600160a01b03166200116f60201b620023381760201c565b620008365760405163df4c572d60e01b81526001600160a01b038216600482015260240160405180910390fd5b6040516370a0823160e01b81523060048201526001600160a01b038216906370a0823190602401602060405180830381865afa92505050801562000899575060408051601f3d908101601f19168201909252620008969181019062001564565b60015b620008b75760405163528ca31d60e01b815260040160405180910390fd5b50600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200090c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200093291906200147f565b604051630f9a650360e41b8152670de0b6b3a764000060048201526001600160a01b038381166024830152919091169063f9a6503090604401602060405180830381865afa925050508015620009a7575060408051601f3d908101601f19168201909252620009a49181019062001564565b60015b620009c5576040516367a7cd4360e01b815260040160405180910390fd5b5060015460405163d48bfca760e01b81526001600160a01b0383811660048301529091169063d48bfca790602401600060405180830381600087803b15801562000a0e57600080fd5b505af115801562000a23573d6000803e3d6000fd5b50506040516001600160a01b03841692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a250565b6002546001600160a01b038381169116141562000a8e57604051633b899cf960e01b815260040160405180910390fd5b60015460405163172c48c760e01b8152600060048201819052916001600160a01b03169063172c48c7906024016040805180830381865afa15801562000ad8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000afe91906200152a565b91505061ffff8216158062000b1a57508061ffff168261ffff16115b1562000b39576040516333c6608d60e01b815260040160405180910390fd5b600154604051635385e2a160e11b81526001600160a01b03858116600483015261ffff851660248301529091169063a70bc54290604401600060405180830381600087803b15801562000b8b57600080fd5b505af115801562000ba0573d6000803e3d6000fd5b505060405161ffff851681526001600160a01b038616925060008051602062005f1d833981519152915060200160405180910390a2505050565b600062000be662001175565b6001600160a01b031663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801562000c24573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c4a91906200157e565b50509050600062000c606200117560201b60201c565b6001600160a01b031663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa15801562000c9d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000cc39190620015d5565b915050806001600160801b0316836001600160801b0316101562000cfa576040516309aadd6f60e41b815260040160405180910390fd5b826001600160801b0316826001600160801b03161462000dc35762000d1e62001175565b604051632715681560e21b81526001600160801b03851660048201526001600160a01b039190911690639c55a05490602401600060405180830381600087803b15801562000d6b57600080fd5b505af115801562000d80573d6000803e3d6000fd5b50506040516001600160801b03861681527fa030eec20ae970821387224ec3bb15b4bd22b89bfb86dc4d2b3827aa3d99e48d925060200190505b60405180910390a15b505050565b600062000dd462001175565b6001600160a01b031663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801562000e12573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e3891906200157e565b50509050816001600160801b0316836001600160801b0316118062000e6e5750806001600160801b0316826001600160801b0316115b1562000e8d576040516309aadd6f60e41b815260040160405180910390fd5b62000e9762001175565b60405163300eb37b60e11b81526001600160801b038086166004830152841660248201526001600160a01b03919091169063601d66f690604401600060405180830381600087803b15801562000eec57600080fd5b505af115801562000f01573d6000803e3d6000fd5b5050604080516001600160801b038088168252861660208201527f4d4981437d0211f9e6843eb024d9ada1fa3a99514d4343d4aece106dd11524bb935001905062000dba565b600154600254604051635385e2a160e11b81526001600160a01b03918216600482015261ffff8416602482015291169063a70bc54290604401600060405180830381600087803b15801562000f9b57600080fd5b505af115801562000fb0573d6000803e3d6000fd5b505050506000600160009054906101000a90046001600160a01b03166001600160a01b031663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200100a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001030919062001564565b905060015b8181101562000dc35760015460405163172c48c760e01b81526004810183905260009182916001600160a01b039091169063172c48c7906024016040805180830381865afa1580156200108c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010b291906200152a565b915091508461ffff168161ffff1611156200116457600154604051635385e2a160e11b81526001600160a01b03848116600483015261ffff881660248301529091169063a70bc54290604401600060405180830381600087803b1580156200111957600080fd5b505af11580156200112e573d6000803e3d6000fd5b505060405161ffff881681526001600160a01b038516925060008051602062005f1d833981519152915060200160405180910390a25b505060010162001035565b3b151590565b60015460408051632f7a188160e01b815290516000926001600160a01b031691632f7a18819160048083019260209291908290030181865afa158015620011c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011e691906200147f565b905090565b6001600160a01b03811681146200120157600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b03811182821017156200123f576200123f62001204565b60405290565b604080519081016001600160401b03811182821017156200123f576200123f62001204565b604051601f8201601f191681016001600160401b038111828210171562001295576200129562001204565b604052919050565b80516001600160801b0381168114620012b557600080fd5b919050565b8051620012b581620011eb565b805161ffff81168114620012b557600080fd5b80518015158114620012b557600080fd5b6000806000606084860312156200130157600080fd5b83516200130e81620011eb565b809350506020808501516200132381620011eb565b604086810151919450906001600160401b03808211156200134357600080fd5b9087019060a0828a0312156200135857600080fd5b620013626200121a565b6200136d836200129d565b81526200137c8584016200129d565b8582015283830151828111156200139257600080fd5b8301601f81018b13620013a457600080fd5b805183811115620013b957620013b962001204565b620013c9878260051b016200126a565b818152878101945060069190911b82018701908c821115620013ea57600080fd5b918701915b81831015620014435786838e031215620014095760008081fd5b6200141362001245565b83516200142081620011eb565b81526200142f848a01620012c7565b818a015285529387019391860191620013ef565b838701525062001458905060608401620012ba565b60608201526200146b60808401620012da565b608082015280955050505050509250925092565b6000602082840312156200149257600080fd5b81516200149f81620011eb565b9392505050565b634e487b7160e01b600052601160045260246000fd5b600061ffff83811690831681811015620014da57620014da620014a6565b039392505050565b634e487b7160e01b600052603260045260246000fd5b60006001600160801b0382811684821681151582840482111615620015215762001521620014a6565b02949350505050565b600080604083850312156200153e57600080fd5b82516200154b81620011eb565b91506200155b60208401620012c7565b90509250929050565b6000602082840312156200157757600080fd5b5051919050565b6000806000606084860312156200159457600080fd5b6200159f846200129d565b9250620015af60208501620012da565b9150604084015164ffffffffff81168114620015ca57600080fd5b809150509250925092565b60008060408385031215620015e957600080fd5b620015f4836200129d565b91506200155b602084016200129d565b608051614878620016a56000396000818161033601528181610446015281816107c5015281816108c0015281816109ae01528181610b8301528181610f0a015281816113e1015281816114cf015281816115bb015281816116ab015281816117990152818161187d01528181611ad901528181611bc601528181611cb301528181611da0015281816120090152818161218c015261227901526148786000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80638456cb59116100f9578063dc2b21c111610097578063f0527ac611610071578063f0527ac6146103d7578063f206d32a146103df578063fb1bd8c4146103f2578063ffd9b9071461040557600080fd5b8063dc2b21c11461039e578063e6492d7b146103b1578063eb9606df146103c457600080fd5b8063a50cf2c8116100d3578063a50cf2c814610331578063a70bc54214610358578063b53472ef1461036b578063c12c21c01461037e57600080fd5b80638456cb59146103035780639c55a0541461030b5780639f1c50691461031e57600080fd5b806350e036ff1161016657806354fd4d501161014057806354fd4d50146102b25780635c975abb146102ba5780636f307dc3146102d05780637bccacee146102f057600080fd5b806350e036ff1461027657806352438e541461028c578063526a41e81461029f57600080fd5b80633e7c88d6116101a25780633e7c88d6146102355780633f4ba83a14610248578063456e0742146102505780635094cb4f1461026357600080fd5b806324147708146101c95780632954018c146101de5780632f7a18811461022d575b600080fd5b6101dc6101d7366004614307565b610418565b005b60005461020390610100900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6102036106fe565b6101dc610243366004614334565b610797565b6101dc610892565b6101dc61025e366004614307565b610980565b61020361027136600461436d565b610b36565b61027e610b49565b604051908152602001610224565b6101dc61029a366004614307565b610b55565b6101dc6102ad366004614394565b610edc565b61027e600281565b60005460ff166040519015158152602001610224565b6002546102039073ffffffffffffffffffffffffffffffffffffffff1681565b6101dc6102fe3660046143c2565b6113b3565b6101dc6114a1565b6101dc61031936600461440e565b61158d565b6101dc61032c36600461442b565b61167d565b6102037f000000000000000000000000000000000000000000000000000000000000000081565b6101dc610366366004614334565b61176b565b6101dc610379366004614307565b61184f565b6001546102039073ffffffffffffffffffffffffffffffffffffffff1681565b6101dc6103ac366004614459565b611aab565b6101dc6103bf366004614307565b611b98565b6101dc6103d236600461448f565b611c85565b6101dc611d72565b6101dc6103ed3660046144ac565b611fdb565b6101dc610400366004614307565b61215e565b6101dc61041336600461451d565b61224b565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156104a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c6919061453a565b6104fc576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006105078261233e565b90506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015610578573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059c9190614557565b90508181166106f9576001546040517fa366f496000000000000000000000000000000000000000000000000000000008152918317600483018190529173ffffffffffffffffffffffffffffffffffffffff9091169063a366f49690602401600060405180830381600087803b15801561061557600080fd5b505af1158015610629573d6000803e3d6000fd5b505050506106356106fe565b6040517fffd9b9070000000000000000000000000000000000000000000000000000000081526001600482015273ffffffffffffffffffffffffffffffffffffffff919091169063ffd9b90790602401600060405180830381600087803b15801561069f57600080fd5b505af11580156106b3573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692507ff17b849746e74d7186170c9553d4bbf60b4f8bb1ed81fe50c099b934fb078f059150600090a25b505050565b600154604080517f2f7a1881000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691632f7a18819160048083019260209291908290030181865afa15801561076e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610792919061457b565b905090565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610821573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610845919061453a565b61087b576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108848261241e565b61088e82826127f8565b5050565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa15801561091c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610940919061453a565b610976576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61097e612a15565b565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610a0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2e919061453a565b610a64576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a6d81612af6565b6001546040517f9f5f86ae00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015290911690639f5f86ae90602401600060405180830381600087803b158015610ada57600080fd5b505af1158015610aee573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507f5a0b7d0f9c24b39256e112a0584b4c5ce38d8f1dee2e7c56f15b852604cdc8869150600090a250565b6000610b43600383612cb8565b92915050565b60006107926003612ccb565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610bdf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c03919061453a565b610c39576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610c86576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063fdd5764590602401602060405180830381865afa158015610cf7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1b919061457b565b905073ffffffffffffffffffffffffffffffffffffffff8116610d6a576040517f1170cc2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f6e98e5e400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526000602483015290911690636e98e5e490604401600060405180830381600087803b158015610dde57600080fd5b505af1158015610df2573d6000803e3d6000fd5b50506001546040517f6e98e5e40000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff86811660248301529091169250636e98e5e49150604401600060405180830381600087803b158015610e6a57600080fd5b505af1158015610e7e573d6000803e3d6000fd5b50505050610e96826003612cd590919063ffffffff16565b5060405173ffffffffffffffffffffffffffffffffffffffff8316907fab9f405bf0c19b97f65a7031634db41569cd2f0e0376a610a1e977f9ab22b58f90600090a25050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610f66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8a919061453a565b610fc0576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fc982612af6565b6000806000610fd66106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015611020573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110449190614598565b9250925092506000806110556106fe565b73ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa15801561109e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c291906145e5565b9150915060006110d06106fe565b73ffffffffffffffffffffffffffffffffffffffff16639be0536a6040518163ffffffff1660e01b8152600401600060405180830381865afa15801561111a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526111609190810190614643565b9050600061116c6106fe565b73ffffffffffffffffffffffffffffffffffffffff1663b1836d326040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111da919061453a565b600154604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905192935073ffffffffffffffffffffffffffffffffffffffff909116916311ca4fc2918c918491632630c12f9160048083019260209291908290030181865afa158015611256573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061127a919061457b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156112e757600080fd5b505af11580156112fb573d6000803e3d6000fd5b5050505087156113675761130e87612cf7565b6113188484612f5d565b61132186613152565b60005b82518110156113575761134f83828151811061134257611342614726565b60200260200101516132a3565b600101611324565b50801561136757611367856133c9565b60405173ffffffffffffffffffffffffffffffffffffffff8a16907fa8b21f72cb83bce808df32dc2330217d744a1c22f3e9e44e4b11bbf049d37d9d90600090a2505050505050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561143d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611461919061453a565b611497576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61088e828261357b565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561152b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061154f919061453a565b611585576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61097e6139c3565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611617573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163b919061453a565b611671576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81612cf7565b50565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611707573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172b919061453a565b611761576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61088e8282612f5d565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156117f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611819919061453a565b610884576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156118d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fd919061453a565b611933576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061193e8261233e565b90506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d39190614557565b9050818116156106f9576001546040517fa366f496000000000000000000000000000000000000000000000000000000008152918318600483018190529173ffffffffffffffffffffffffffffffffffffffff9091169063a366f49690602401600060405180830381600087803b158015611a4d57600080fd5b505af1158015611a61573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a2505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611b35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b59919061453a565b611b8f576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81613a83565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611c22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c46919061453a565b611c7c576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81613b3d565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611d0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d33919061453a565b611d69576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a816133c9565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611dfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e20919061453a565b611e56576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ec4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee8919061457b565b60015490915073ffffffffffffffffffffffffffffffffffffffff166311ca4fc2611f116106fe565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff91821660048201529084166024820152604401600060405180830381600087803b158015611f7f57600080fd5b505af1158015611f93573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507f3f82447be465b0b5a4a9e54c74d5f6ae73f2e9537f2cc1590a340524703d09619150600090a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015612065573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612089919061453a565b6120bf576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61271061ffff86161015806120e357506127106120dc8585614784565b61ffff1610155b806120fd57506127106120f68383614784565b61ffff1610155b15612134576040517f0b361d6900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6121578585612145866127106147aa565b85612152866127106147aa565b613c5c565b5050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156121e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061220c919061453a565b612242576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a816132a3565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156122d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122f9919061453a565b61232f576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81613152565b3b151590565b6001546040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063f67c5bd090602401602060405180830381865afa1580156123af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123d39190614557565b90508015806123e25750806001145b15612419576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b73ffffffffffffffffffffffffffffffffffffffff811661246b576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163b6124d6576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024015b60405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8216906370a0823190602401602060405180830381865afa92505050801561257a575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261257791810190614557565b60015b6125b0576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561261e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612642919061457b565b6040517ff9a65030000000000000000000000000000000000000000000000000000000008152670de0b6b3a7640000600482015273ffffffffffffffffffffffffffffffffffffffff8381166024830152919091169063f9a6503090604401602060405180830381865afa9250505080156126f8575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526126f591810190614557565b60015b61272e576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506001546040517fd48bfca700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301529091169063d48bfca790602401600060405180830381600087803b15801561279c57600080fd5b505af11580156127b0573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a250565b60025473ffffffffffffffffffffffffffffffffffffffff8381169116141561284d576040517f3b899cf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f172c48c70000000000000000000000000000000000000000000000000000000081526000600482018190529173ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa1580156128bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128e091906147cd565b91505061ffff821615806128fb57508061ffff168261ffff16115b15612932576040517f33c6608d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015261ffff851660248301529091169063a70bc54290604401600060405180830381600087803b1580156129a957600080fd5b505af11580156129bd573d6000803e3d6000fd5b505060405161ffff8516815273ffffffffffffffffffffffffffffffffffffffff861692507f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650915060200160405180910390a2505050565b60005460ff16612a81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016124cd565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b73ffffffffffffffffffffffffffffffffffffffff8116612b43576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163b612ba9576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024016124cd565b8073ffffffffffffffffffffffffffffffffffffffff1663c12c21c06040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612c2e575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252612c2b9181019061457b565b60015b612c64576040517fe9eddd1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60015473ffffffffffffffffffffffffffffffffffffffff82811691161461088e576040517fe9eddd1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612cc48383613e92565b9392505050565b6000610b43825490565b6000612cc48373ffffffffffffffffffffffffffffffffffffffff8416613ebc565b6000612d016106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015612d4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d6f9190614598565b505090506000612d7d6106fe565b73ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa158015612dc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dea91906145e5565b915050806fffffffffffffffffffffffffffffffff16836fffffffffffffffffffffffffffffffff161015612e4b576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826fffffffffffffffffffffffffffffffff16826fffffffffffffffffffffffffffffffff16146106f957612e7e6106fe565b6040517f9c55a0540000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff8516600482015273ffffffffffffffffffffffffffffffffffffffff9190911690639c55a05490602401600060405180830381600087803b158015612ef957600080fd5b505af1158015612f0d573d6000803e3d6000fd5b50506040516fffffffffffffffffffffffffffffffff861681527fa030eec20ae970821387224ec3bb15b4bd22b89bfb86dc4d2b3827aa3d99e48d925060200190505b60405180910390a1505050565b6000612f676106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015612fb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fd59190614598565b50509050816fffffffffffffffffffffffffffffffff16836fffffffffffffffffffffffffffffffff16118061302e5750806fffffffffffffffffffffffffffffffff16826fffffffffffffffffffffffffffffffff16115b15613065576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61306d6106fe565b6040517f601d66f60000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff80861660048301528416602482015273ffffffffffffffffffffffffffffffffffffffff919091169063601d66f690604401600060405180830381600087803b1580156130f057600080fd5b505af1158015613104573d6000803e3d6000fd5b5050604080516fffffffffffffffffffffffffffffffff8088168252861660208201527f4d4981437d0211f9e6843eb024d9ada1fa3a99514d4343d4aece106dd11524bb9350019050612f50565b600061315c6106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa1580156131a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131ca9190614598565b509150508015158215151461088e576131e16106fe565b6040517fffd9b907000000000000000000000000000000000000000000000000000000008152831515600482015273ffffffffffffffffffffffffffffffffffffffff919091169063ffd9b90790602401600060405180830381600087803b15801561324c57600080fd5b505af1158015613260573d6000803e3d6000fd5b505050507ff97ba903470ff3262b4a68a938fe81def401bac1bd742169d2e8d5c4ed2185d382604051613297911515815260200190565b60405180910390a15050565b73ffffffffffffffffffffffffffffffffffffffff81166132f0576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6132f86106fe565b6040517fb55bb84b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152919091169063b55bb84b90602401600060405180830381600087803b15801561336357600080fd5b505af1158015613377573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841681527fdac9a7995cbc0c0f01d78970fb6fd0b52fe0fe869eb6635e65cc1b5682b8325c925060200190505b60405180910390a150565b60006133d36106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801561341d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134419190614598565b925050508064ffffffffff168264ffffffffff161461088e578164ffffffffff168164ffffffffff16118061347c57508164ffffffffff1642115b156134b3576040517fe4eaca7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134bb6106fe565b6040517feb9606df00000000000000000000000000000000000000000000000000000000815264ffffffffff8416600482015273ffffffffffffffffffffffffffffffffffffffff919091169063eb9606df90602401600060405180830381600087803b15801561352b57600080fd5b505af115801561353f573d6000803e3d6000fd5b505060405164ffffffffff851681527f0b3eb35ba750e7a7e4d26c9eee3d226f4e1f68c5568f4a3d051c94b241b02ac092506020019050613297565b73ffffffffffffffffffffffffffffffffffffffff82166135c8576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82163b61362e576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016124cd565b61363781612af6565b60015473ffffffffffffffffffffffffffffffffffffffff8381169116148061369257506136636106fe565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b806136b7575060015473ffffffffffffffffffffffffffffffffffffffff8281169116145b806136f457506136c56106fe565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b1561372b576040517f727de5c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517fff68754300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063ff68754390602401602060405180830381865afa15801561379c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137c0919061457b565b73ffffffffffffffffffffffffffffffffffffffff1614158061388c57506001546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063fdd5764590602401602060405180830381865afa15801561384f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613873919061457b565b73ffffffffffffffffffffffffffffffffffffffff1614155b156138c3576040517f21ff1e7100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f6e98e5e400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152848116602483015290911690636e98e5e490604401600060405180830381600087803b15801561393857600080fd5b505af115801561394c573d6000803e3d6000fd5b50505050613964826003613faf90919063ffffffff16565b508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4bcbefaef68b99503d502f5a6abe7bca2b183ab8ac55457013c77d084ebd130560405160405180910390a35050565b60005460ff1615613a30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016124cd565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612acc3390565b6001546040517fdc2b21c100000000000000000000000000000000000000000000000000000000815260ff8316600482015273ffffffffffffffffffffffffffffffffffffffff9091169063dc2b21c190602401600060405180830381600087803b158015613af157600080fd5b505af1158015613b05573d6000803e3d6000fd5b505060405160ff841681527f73caacd705657a7d283e48ecf288b73bc517e3aea1bbc9da2fd54a979e8aa950925060200190506133be565b73ffffffffffffffffffffffffffffffffffffffff8116613b8a576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613b926106fe565b6040517fdcf6548200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152919091169063dcf6548290602401600060405180830381600087803b158015613bfd57600080fd5b505af1158015613c11573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841681527f32e53e2e527af8518ae889e5f7e674bc83f7cf68e4cc059aceeaa0e64208b85b925060200190506133be565b6000613c6885856147aa565b6001546040517f172c48c700000000000000000000000000000000000000000000000000000000815260006004820181905292935073ffffffffffffffffffffffffffffffffffffffff9091169063172c48c7906024016040805180830381865afa158015613cdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cff91906147cd565b9150508061ffff168261ffff1614613d6e57613d1a82613fd1565b60025460405161ffff8416815273ffffffffffffffffffffffffffffffffffffffff909116907f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac6509060200160405180910390a25b6001546040517f944ac59f00000000000000000000000000000000000000000000000000000000815261ffff808a1660048301528089166024830152808816604483015280871660648301528516608482015273ffffffffffffffffffffffffffffffffffffffff9091169063944ac59f9060a401600060405180830381600087803b158015613dfd57600080fd5b505af1158015613e11573d6000803e3d6000fd5b505050507f2214a403d5f8d049e52eacca974c6dea01a471e41d6a18903bfaf7dbc709741f878787612710613e4691906147aa565b87613e53886127106147aa565b6040805161ffff96871681529486166020860152928516848401529084166060840152909216608082015290519081900360a00190a150505050505050565b6000826000018281548110613ea957613ea9614726565b9060005260206000200154905092915050565b60008181526001830160205260408120548015613fa5576000613ee06001836147fc565b8554909150600090613ef4906001906147fc565b9050818114613f59576000866000018281548110613f1457613f14614726565b9060005260206000200154905080876000018481548110613f3757613f37614726565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080613f6a57613f6a614813565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610b43565b6000915050610b43565b6000612cc48373ffffffffffffffffffffffffffffffffffffffff8416614296565b6001546002546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015261ffff8416602482015291169063a70bc54290604401600060405180830381600087803b15801561404a57600080fd5b505af115801561405e573d6000803e3d6000fd5b505050506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156140d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140f59190614557565b905060015b818110156106f9576001546040517f172c48c700000000000000000000000000000000000000000000000000000000815260048101839052600091829173ffffffffffffffffffffffffffffffffffffffff9091169063172c48c7906024016040805180830381865afa158015614175573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061419991906147cd565b915091508461ffff168161ffff16111561428c576001546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015261ffff881660248301529091169063a70bc54290604401600060405180830381600087803b15801561422457600080fd5b505af1158015614238573d6000803e3d6000fd5b505060405161ffff8816815273ffffffffffffffffffffffffffffffffffffffff851692507f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650915060200160405180910390a25b50506001016140fa565b60008181526001830160205260408120546142dd57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610b43565b506000610b43565b73ffffffffffffffffffffffffffffffffffffffff8116811461167a57600080fd5b60006020828403121561431957600080fd5b8135612cc4816142e5565b61ffff8116811461167a57600080fd5b6000806040838503121561434757600080fd5b8235614352816142e5565b9150602083013561436281614324565b809150509250929050565b60006020828403121561437f57600080fd5b5035919050565b801515811461167a57600080fd5b600080604083850312156143a757600080fd5b82356143b2816142e5565b9150602083013561436281614386565b600080604083850312156143d557600080fd5b82356143e0816142e5565b91506020830135614362816142e5565b6fffffffffffffffffffffffffffffffff8116811461167a57600080fd5b60006020828403121561442057600080fd5b8135612cc4816143f0565b6000806040838503121561443e57600080fd5b8235614449816143f0565b91506020830135614362816143f0565b60006020828403121561446b57600080fd5b813560ff81168114612cc457600080fd5b64ffffffffff8116811461167a57600080fd5b6000602082840312156144a157600080fd5b8135612cc48161447c565b600080600080600060a086880312156144c457600080fd5b85356144cf81614324565b945060208601356144df81614324565b935060408601356144ef81614324565b925060608601356144ff81614324565b9150608086013561450f81614324565b809150509295509295909350565b60006020828403121561452f57600080fd5b8135612cc481614386565b60006020828403121561454c57600080fd5b8151612cc481614386565b60006020828403121561456957600080fd5b5051919050565b8051612419816142e5565b60006020828403121561458d57600080fd5b8151612cc4816142e5565b6000806000606084860312156145ad57600080fd5b83516145b8816143f0565b60208501519093506145c981614386565b60408501519092506145da8161447c565b809150509250925092565b600080604083850312156145f857600080fd5b8251614603816143f0565b6020840151909250614362816143f0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000602080838503121561465657600080fd5b825167ffffffffffffffff8082111561466e57600080fd5b818501915085601f83011261468257600080fd5b81518181111561469457614694614614565b8060051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f830116810181811085821117156146d7576146d7614614565b6040529182528482019250838101850191888311156146f557600080fd5b938501935b8285101561471a5761470b85614570565b845293850193928501926146fa565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061ffff8083168185168083038211156147a1576147a1614755565b01949350505050565b600061ffff838116908316818110156147c5576147c5614755565b039392505050565b600080604083850312156147e057600080fd5b82516147eb816142e5565b602084015190925061436281614324565b60008282101561480e5761480e614755565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea264697066735822122046c364b67d38a3dd85b57e027716324d90dd1df102f265f0a0e2697babdb3f3b64736f6c634300080a003394525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650"; - -type CreditFacadeTestSuiteConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: CreditFacadeTestSuiteConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class CreditFacadeTestSuite__factory extends ContractFactory { - constructor(...args: CreditFacadeTestSuiteConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - _testTokenSuite: string, - _underlying: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - _testTokenSuite, - _underlying, - overrides || {} - ) as Promise; - } - override getDeployTransaction( - _testTokenSuite: string, - _underlying: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction( - _testTokenSuite, - _underlying, - overrides || {} - ); - } - override attach(address: string): CreditFacadeTestSuite { - return super.attach(address) as CreditFacadeTestSuite; - } - override connect(signer: Signer): CreditFacadeTestSuite__factory { - return super.connect(signer) as CreditFacadeTestSuite__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): CreditFacadeTestSuiteInterface { - return new utils.Interface(_abi) as CreditFacadeTestSuiteInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): CreditFacadeTestSuite { - return new Contract( - address, - _abi, - signerOrProvider - ) as CreditFacadeTestSuite; - } -} diff --git a/src/types/factories/contracts/test/suites/CreditManagerTestSuite__factory.ts b/src/types/factories/contracts/test/suites/CreditManagerTestSuite__factory.ts deleted file mode 100644 index 70542ed5..00000000 --- a/src/types/factories/contracts/test/suites/CreditManagerTestSuite__factory.ts +++ /dev/null @@ -1,677 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { - Signer, - utils, - Contract, - ContractFactory, - BigNumberish, - Overrides, -} from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - CreditManagerTestSuite, - CreditManagerTestSuiteInterface, -} from "../../../../contracts/test/suites/CreditManagerTestSuite"; - -const _abi = [ - { - inputs: [ - { - internalType: "contract TokensTestSuite", - name: "_testTokenSuite", - type: "address", - }, - { - internalType: "enum Tokens", - name: "_underlying", - type: "uint8", - }, - { - internalType: "bool", - name: "internalSuite", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "", - type: "address", - }, - ], - name: "log_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "log_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - name: "log_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "int256", - name: "", - type: "int256", - }, - ], - name: "log_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "address", - name: "val", - type: "address", - }, - ], - name: "log_named_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes", - name: "val", - type: "bytes", - }, - ], - name: "log_named_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes32", - name: "val", - type: "bytes32", - }, - ], - name: "log_named_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - ], - name: "log_named_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "string", - name: "val", - type: "string", - }, - ], - name: "log_named_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - ], - name: "log_named_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "log_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "logs", - type: "event", - }, - { - inputs: [], - name: "IS_TEST", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "_getAccountAmount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "enum Tokens", - name: "t", - type: "uint8", - }, - ], - name: "_getCollateralTokens", - outputs: [ - { - components: [ - { - internalType: "address", - name: "token", - type: "address", - }, - { - internalType: "uint16", - name: "liquidationThreshold", - type: "uint16", - }, - ], - internalType: "struct CollateralToken[]", - name: "collateralTokens", - type: "tuple[]", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "acl", - outputs: [ - { - internalType: "contract ACL", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "token", - type: "address", - }, - { - internalType: "uint256", - name: "price", - type: "uint256", - }, - ], - name: "addMockPriceFeed", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "addressProvider", - outputs: [ - { - internalType: "contract AddressProvider", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "af", - outputs: [ - { - internalType: "contract AccountFactory", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "cr", - outputs: [ - { - internalType: "contract ContractsRegister", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditManager", - outputs: [ - { - internalType: "contract CreditManager", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "failed", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "gp", - outputs: [ - { - internalType: "contract GenesisFactory", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "enum Tokens", - name: "", - type: "uint8", - }, - ], - name: "lt", - outputs: [ - { - internalType: "uint16", - name: "", - type: "uint16", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "openCreditAccount", - outputs: [ - { - internalType: "uint256", - name: "borrowedAmount", - type: "uint256", - }, - { - internalType: "uint256", - name: "cumulativeIndexAtOpen", - type: "uint256", - }, - { - internalType: "uint256", - name: "cumulativeIndexAtClose", - type: "uint256", - }, - { - internalType: "address", - name: "creditAccount", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_borrowedAmount", - type: "uint256", - }, - ], - name: "openCreditAccount", - outputs: [ - { - internalType: "uint256", - name: "borrowedAmount", - type: "uint256", - }, - { - internalType: "uint256", - name: "cumulativeIndexAtOpen", - type: "uint256", - }, - { - internalType: "uint256", - name: "cumulativeIndexAtClose", - type: "uint256", - }, - { - internalType: "address", - name: "creditAccount", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "poolMock", - outputs: [ - { - internalType: "contract PoolServiceMock", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "priceOracle", - outputs: [ - { - internalType: "contract IPriceOracleV2Ext", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "testTokenSuite", - outputs: [ - { - internalType: "contract TokensTestSuite", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "underlying", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x60806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d00011790553480156200003a57600080fd5b5060405162021314380380620213148339810160408190526200005d91620017f0565b82826040516200006d9062001790565b604051809103906000f0801580156200008a573d6000803e3d6000fd5b5050600180546001600160a01b0319166001600160a01b038416908117909155604080516325abd85f60e11b81529051634b57b0be916004808201926020929091908290030181865afa158015620000e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200010c91906200184b565b73c4375b7de8af5a38a93548eb8453a498222c4ff26040516200012f906200179e565b6001600160a01b03928316815291166020820152604001604051809103906000f08015801562000163573d6000803e3d6000fd5b50600380546001600160a01b0319166001600160a01b039290921691821790556040805163de28735960e01b8152905163de287359916004808201926020929091908290030181865afa158015620001bf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e591906200184b565b604051634910832f60e01b8152600080516020620212f483398151915260048201526001600160a01b039190911690634910832f90602401600060405180830381600087803b1580156200023857600080fd5b505af11580156200024d573d6000803e3d6000fd5b50505050600360009054906101000a90046001600160a01b03166001600160a01b031663de2873596040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002a5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002cb91906200184b565b60035460405163f2fde38b60e01b81526001600160a01b03918216600482015291169063f2fde38b90602401600060405180830381600087803b1580156200031257600080fd5b505af115801562000327573d6000803e3d6000fd5b505060035460015460408051636ca42ae360e01b815290516001600160a01b039384169550638874ff1f94509190921691636ca42ae39160048083019260009291908290030181865afa15801562000383573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620003ad9190810190620018e6565b6040518263ffffffff1660e01b8152600401620003cb9190620019d7565b600060405180830381600087803b158015620003e657600080fd5b505af1158015620003fb573d6000803e3d6000fd5b50505050600360009054906101000a90046001600160a01b03166001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000453573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200047991906200184b565b600280546001600160a01b0319166001600160a01b039290921691821790556040805163120d150d60e31b81529051639068a868916004808201926020929091908290030181865afa158015620004d4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004fa91906200184b565b600480546001600160a01b0319166001600160a01b0392831617815560025460408051631f94a27560e31b81529051919093169263fca513a892818101926020929091908290030181865afa15801562000558573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200057e91906200184b565b600880546001600160a01b0319166001600160a01b0392831617905560025460408051630873769560e01b81529051919092169163087376959160048083019260209291908290030181865afa158015620005dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200060391906200184b565b600780546001600160a01b0319166001600160a01b039283161790556002546040805163c513c9bb60e01b81529051919092169163c513c9bb9160048083019260209291908290030181865afa15801562000662573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200068891906200184b565b600680546001600160a01b0319166001600160a01b039283161790556001546040516367b4264560e01b81529116906367b4264590620006cd90849060040162001a6e565b602060405180830381865afa158015620006eb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200071191906200184b565b600980546001600160a01b0319166001600160a01b0392831617905560035460408051630a55006360e21b815290519190921691632954018c9160048083019260209291908290030181865afa15801562000770573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200079691906200184b565b6009546040516001600160a01b0390911690620007b390620017ad565b6001600160a01b03928316815291166020820152604001604051809103906000f080158015620007e7573d6000803e3d6000fd5b50600580546001600160a01b0319166001600160a01b039283169081179091556001549091169063eebab8ef908390620008206200113e565b6200082d90600a62001a9a565b6040518463ffffffff1660e01b81526004016200084d9392919062001abc565b600060405180830381600087803b1580156200086857600080fd5b505af11580156200087d573d6000803e3d6000fd5b505060065460055460405163d914cd4b60e01b81526001600160a01b0391821660048201529116925063d914cd4b9150602401600060405180830381600087803b158015620008cb57600080fd5b505af1158015620008e0573d6000803e3d6000fd5b505050505050806200093d576005546040516001600160a01b03909116906200090990620017bb565b6001600160a01b039091168152602001604051809103906000f08015801562000936573d6000803e3d6000fd5b5062000989565b6005546040516001600160a01b03909116906200095a90620017c9565b6001600160a01b039091168152602001604051809103906000f08015801562000987573d6000803e3d6000fd5b505b600b80546001600160a01b03929092166001600160a01b03199283168117909155600d80549092163317909155604051634fafc35760e11b8152600080516020620212f48339815191526004820152639f5f86ae90602401600060405180830381600087803b158015620009fc57600080fd5b505af115801562000a11573d6000803e3d6000fd5b50506000546040516303223eab60e11b8152600080516020620212f48339815191526004820152620100009091046001600160a01b031692506306447d569150602401600060405180830381600087803b15801562000a6f57600080fd5b505af115801562000a84573d6000803e3d6000fd5b5050600b54600d5460408051632630c12f60e01b815290516001600160a01b0393841695506311ca4fc2945092909116918491632630c12f9160048083019260209291908290030181865afa15801562000ae2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b0891906200184b565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401600060405180830381600087803b15801562000b5157600080fd5b505af115801562000b66573d6000803e3d6000fd5b5050600b546001600160a01b0316915063944ac59f90506103e860c862000b926101f461271062001ae6565b606462000ba360c861271062001ae6565b60405160e087901b6001600160e01b031916815261ffff95861660048201529385166024850152918416604484015283166064830152909116608482015260a401600060405180830381600087803b15801562000bff57600080fd5b505af115801562000c14573d6000803e3d6000fd5b50505050600062000c2c6001620011fd60201b60201c565b905060005b815181101562000dbd5760095482516001600160a01b039091169083908390811062000c615762000c6162001b0c565b6020026020010151600001516001600160a01b03161462000da857600082828151811062000c935762000c9362001b0c565b602090810291909101015151600b5460405163d48bfca760e01b81526001600160a01b03808416600483015292935091169063d48bfca790602401600060405180830381600087803b15801562000ce957600080fd5b505af115801562000cfe573d6000803e3d6000fd5b5050600b5485516001600160a01b03909116925063a70bc5429150839086908690811062000d305762000d3062001b0c565b6020026020010151602001516040518363ffffffff1660e01b815260040162000d729291906001600160a01b0392909216825261ffff16602082015260400190565b600060405180830381600087803b15801562000d8d57600080fd5b505af115801562000da2573d6000803e3d6000fd5b50505050505b8062000db48162001b22565b91505062000c31565b50600060029054906101000a90046001600160a01b03166001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562000e0f57600080fd5b505af115801562000e24573d6000803e3d6000fd5b5050505062000ef1600b60009054906101000a90046001600160a01b03166001600160a01b031663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000e80573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ea691906200184b565b60408051808201909152601781527f436f6e666967757261746f72207761736e2774207365740000000000000000006020820152600080516020620212f483398151915290620014e7565b600654600b5460405163e26b2f6360e01b81526001600160a01b03918216600482015291169063e26b2f6390602401600060405180830381600087803b15801562000f3b57600080fd5b505af115801562000f50573d6000803e3d6000fd5b5050600154600b5460405163447bbb5160e11b81526001600160a01b0392831694506388f776a2935062000fa292889273f39fd6e51aad88f6f4ce6ab8827279cfffb922669291169060040162001b40565b600060405180830381600087803b15801562000fbd57600080fd5b505af115801562000fd2573d6000803e3d6000fd5b5050600154600b5460405163447bbb5160e11b81526001600160a01b0392831694506388f776a2935062001024928892733c44cdddb6a900fa2b585dd299e03d12fa4293bc9291169060040162001b40565b600060405180830381600087803b1580156200103f57600080fd5b505af115801562001054573d6000803e3d6000fd5b505060025460405163f2fde38b60e01b8152600080516020620212f483398151915260048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b158015620010ad57600080fd5b505af1158015620010c2573d6000803e3d6000fd5b505060075460405163f2fde38b60e01b8152600080516020620212f483398151915260048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b1580156200111b57600080fd5b505af115801562001130573d6000803e3d6000fd5b505050505050505062001c47565b600180546040516367b4264560e01b81526000926001600160a01b03909216916367b426459162001173919060040162001a6e565b602060405180830381865afa15801562001191573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011b791906200184b565b6009546001600160a01b03908116911614620011e757620011e2670de0b6b3a764000060c862001a9a565b905090565b620011e2670de0b6b3a7640000614e2062001a9a565b6040805160c08101825260026080820190815261232860a08301528152815180830183526005815261226060208281019190915282015281518083018352606092600092919082019080600387600a8111156200125e576200125e62001a35565b146200126c5760036200126f565b60015b600a81111562001283576200128362001a35565b815261206c6020918201529082526040805180820190915260048152611c84818301529101529050612454600a60008582811115620012c657620012c662001a35565b600a811115620012da57620012da62001a35565b815260208101919091526040908101600020805461ffff9390931661ffff19909316929092179091558051600480825260a0820190925281816020015b60408051808201909152600080825260208201528152602001906001900390816200131757905050925060005b81811015620014df5782816004811062001362576200136262001b0c565b602002015160200151600a600085846004811062001384576200138462001b0c565b602002015151600a8111156200139e576200139e62001a35565b600a811115620013b257620013b262001a35565b815260208101919091526040908101600020805461ffff191661ffff9390931692909217909155805180820190915260015481906001600160a01b03166367b4264586856004811062001409576200140962001b0c565b6020020151516040516001600160e01b031960e084901b16815262001432919060040162001a6e565b602060405180830381865afa15801562001450573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200147691906200184b565b6001600160a01b0316815260200184836004811062001499576200149962001b0c565b60200201516020015161ffff16815250848281518110620014be57620014be62001b0c565b60200260200101819052508080620014d69062001b22565b91505062001344565b505050919050565b816001600160a01b0316836001600160a01b03161462001546577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf35838160405162001532919062001ba5565b60405180910390a16200154683836200154b565b505050565b806001600160a01b0316826001600160a01b03161462001679577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f50604051620015d39060208082526025908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b616464604082015264726573735d60d81b606082015260800190565b60405180910390a160408051818152600a81830152690808115e1c1958dd195960b21b60608201526001600160a01b03831660208201529051600080516020620212d48339815191529181900360800190a160408051818152600a8183015269080808081058dd1d585b60b21b60608201526001600160a01b03841660208201529051600080516020620212d48339815191529181900360800190a1620016796200167d565b5050565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200177f5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190526519985a5b195960d21b9282019290925260016060820152600091907f70ca10bbd0dbfd9020a9f4b13402c16cb120705e0d1c0aeab10fa353ae586fc49060800160408051601f19818403018152908290526200171a929160200162001bf6565b60408051601f1981840301815290829052620017369162001c29565b6000604051808303816000865af19150503d806000811462001775576040519150601f19603f3d011682016040523d82523d6000602084013e6200177a565b606091505b505050505b6000805461ff001916610100179055565b6105e680620035d683390190565b620111058062003bbc83390190565b6110a78062014cc183390190565b6158e88062015d6883390190565b615c84806201b65083390190565b6001600160a01b0381168114620017ed57600080fd5b50565b6000806000606084860312156200180657600080fd5b83516200181381620017d7565b6020850151909350600b81106200182957600080fd5b604085015190925080151581146200184057600080fd5b809150509250925092565b6000602082840312156200185e57600080fd5b81516200186b81620017d7565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715620018ad57620018ad62001872565b60405290565b604051601f8201601f191681016001600160401b0381118282101715620018de57620018de62001872565b604052919050565b60006020808385031215620018fa57600080fd5b82516001600160401b03808211156200191257600080fd5b818501915085601f8301126200192757600080fd5b8151818111156200193c576200193c62001872565b6200194c848260051b01620018b3565b818152848101925060069190911b8301840190878211156200196d57600080fd5b928401925b81841015620019cc57604084890312156200198d5760008081fd5b6200199762001888565b8451620019a481620017d7565b815284860151620019b581620017d7565b818701528352604093909301929184019162001972565b979650505050505050565b602080825282518282018190526000919060409081850190868401855b8281101562001a2857815180516001600160a01b0390811686529087015116868501529284019290850190600101620019f4565b5091979650505050505050565b634e487b7160e01b600052602160045260246000fd5b600b811062001a6a57634e487b7160e01b600052602160045260246000fd5b9052565b6020810162001a7e828462001a4b565b92915050565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161562001ab75762001ab762001a84565b500290565b6060810162001acc828662001a4b565b6001600160a01b0393909316602082015260400152919050565b600061ffff8381169083168181101562001b045762001b0462001a84565b039392505050565b634e487b7160e01b600052603260045260246000fd5b600060001982141562001b395762001b3962001a84565b5060010190565b6060810162001b50828662001a4b565b6001600160a01b03938416602083015291909216604090920191909152919050565b60005b8381101562001b8f57818101518382015260200162001b75565b8381111562001b9f576000848401525b50505050565b60408152600560408201526422b93937b960d91b6060820152608060208201526000825180608084015262001be28160a085016020870162001b72565b601f01601f19169190910160a00192915050565b6001600160e01b031983168152815160009062001c1b81600485016020870162001b72565b919091016004019392505050565b6000825162001c3d81846020870162001b72565b9190910192915050565b61197f8062001c576000396000f3fe608060405234801561001057600080fd5b50600436106101365760003560e01c80636b70b04c116100b2578063ba414fa611610081578063d46b933011610066578063d46b933014610350578063de28735914610370578063fa7626d41461039057600080fd5b8063ba414fa614610318578063c12c21c01461033057600080fd5b80636b70b04c146102b05780636f307dc3146102d05780637d6bc094146102f05780639dd55b451461030357600080fd5b8063406c8e2f116101095780635e813a8b116100ee5780635e813a8b1461025a5780635f7c9bd01461027a57806362eb33e31461029057600080fd5b8063406c8e2f146101fc5780635aba4b241461021c57600080fd5b80630c75f8061461013b5780630e42bc5d146101775780632630c12f146101975780632954018c146101dc575b600080fd5b61015f610149366004610f08565b600a6020526000908152604090205461ffff1681565b60405161ffff90911681526020015b60405180910390f35b61018a610185366004610f08565b61039d565b60405161016e9190610f30565b6008546101b79073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016e565b6002546101b79073ffffffffffffffffffffffffffffffffffffffff1681565b6001546101b79073ffffffffffffffffffffffffffffffffffffffff1681565b6102246106c6565b6040805194855260208501939093529183015273ffffffffffffffffffffffffffffffffffffffff16606082015260800161016e565b6004546101b79073ffffffffffffffffffffffffffffffffffffffff1681565b6102826106e5565b60405190815260200161016e565b6006546101b79073ffffffffffffffffffffffffffffffffffffffff1681565b6005546101b79073ffffffffffffffffffffffffffffffffffffffff1681565b6009546101b79073ffffffffffffffffffffffffffffffffffffffff1681565b6102246102fe366004610f99565b6107cd565b610316610311366004610fd7565b610c2f565b005b610320610d9b565b604051901515815260200161016e565b600b546101b79073ffffffffffffffffffffffffffffffffffffffff1681565b6003546101b79073ffffffffffffffffffffffffffffffffffffffff1681565b6007546101b79073ffffffffffffffffffffffffffffffffffffffff1681565b6000546103209060ff1681565b6040805160c08101825260026080820190815261232860a08301528152815180830183526005815261226060208281019190915282015281518083018352606092600092919082019080600387600a8111156103fb576103fb611003565b1461040757600361040a565b60015b600a81111561041b5761041b611003565b815261206c6020918201529082526040805180820190915260048152611c84818301529101529050612454600a6000858281111561045b5761045b611003565b600a81111561046c5761046c611003565b815260208101919091526040908101600020805461ffff939093167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909316929092179091558051600480825260a0820190925281816020015b60408051808201909152600080825260208201528152602001906001900390816104c657905050925060005b818110156106be5782816004811061050c5761050c611032565b602002015160200151600a600085846004811061052b5761052b611032565b602002015151600a81111561054257610542611003565b600a81111561055357610553611003565b81526020810191909152604090810160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff93909316929092179091558051808201909152600154819073ffffffffffffffffffffffffffffffffffffffff166367b426458685600481106105d1576105d1611032565b6020020151516040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526106109190600401611061565b602060405180830381865afa15801561062d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061065191906110a2565b73ffffffffffffffffffffffffffffffffffffffff16815260200184836004811061067e5761067e611032565b60200201516020015161ffff168152508482815181106106a0576106a0611032565b602002602001018190525080806106b6906110ee565b9150506104f2565b505050919050565b6000806000806106d76102fe6106e5565b935093509350935090919293565b600180546040517f67b4264500000000000000000000000000000000000000000000000000000000815260009273ffffffffffffffffffffffffffffffffffffffff909216916367b426459161073e9190600401611061565b602060405180830381865afa15801561075b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077f91906110a2565b60095473ffffffffffffffffffffffffffffffffffffffff9081169116146107b9576107b4670de0b6b3a764000060c8611127565b905090565b6107b4670de0b6b3a7640000614e20611127565b600080546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015282918291829162010000900473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b15801561085757600080fd5b505af115801561086b573d6000803e3d6000fd5b5050600b5460095473ffffffffffffffffffffffffffffffffffffffff918216935063a70bc5429250166101f46108a560c8612710611164565b6108af9190611164565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015261ffff166024820152604401600060405180830381600087803b15801561091e57600080fd5b505af1158015610932573d6000803e3d6000fd5b50506005546040517f96df5dc00000000000000000000000000000000000000000000000000000000081526b033b2e3c9fd0803ce800000060048201819052899850965073ffffffffffffffffffffffffffffffffffffffff90911692506396df5dc09150602401600060405180830381600087803b1580156109b457600080fd5b505af11580156109c8573d6000803e3d6000fd5b5050600054600d546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526201000090920416925063ca669fa79150602401600060405180830381600087803b158015610a4157600080fd5b505af1158015610a55573d6000803e3d6000fd5b5050600b546040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810188905273f39fd6e51aad88f6f4ce6ab8827279cfffb92266602482015273ffffffffffffffffffffffffffffffffffffffff9091169250638fe3f93f91506044016020604051808303816000875af1158015610ae4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0891906110a2565b60005490915062010000900473ffffffffffffffffffffffffffffffffffffffff16631f7b4f30610b3a436001611187565b6040518263ffffffff1660e01b8152600401610b5891815260200190565b600060405180830381600087803b158015610b7257600080fd5b505af1158015610b86573d6000803e3d6000fd5b50505050600a83600c610b999190611127565b610ba3919061119f565b6005546040517f96df5dc00000000000000000000000000000000000000000000000000000000081526004810183905291935073ffffffffffffffffffffffffffffffffffffffff16906396df5dc090602401600060405180830381600087803b158015610c1057600080fd5b505af1158015610c24573d6000803e3d6000fd5b505050509193509193565b6000816008604051610c4090610efb565b91825260ff166020820152604001604051809103906000f080158015610c6a573d6000803e3d6000fd5b506000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291925062010000900473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b158015610cf157600080fd5b505af1158015610d05573d6000803e3d6000fd5b50506008546040517fe8a97a3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528581166024830152909116925063e8a97a3e9150604401600060405180830381600087803b158015610d7e57600080fd5b505af1158015610d92573d6000803e3d6000fd5b50505050505050565b60008054610100900460ff1615610dbb5750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610ef65760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610e60917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc491608001611215565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052610e9891611251565b6000604051808303816000865af19150503d8060008114610ed5576040519150601f19603f3d011682016040523d82523d6000602084013e610eda565b606091505b5091505080806020019051810190610ef2919061125d565b9150505b919050565b6106ca8061128083390190565b600060208284031215610f1a57600080fd5b8135600b8110610f2957600080fd5b9392505050565b602080825282518282018190526000919060409081850190868401855b82811015610f8c578151805173ffffffffffffffffffffffffffffffffffffffff16855286015161ffff16868501529284019290850190600101610f4d565b5091979650505050505050565b600060208284031215610fab57600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff81168114610fd457600080fd5b50565b60008060408385031215610fea57600080fd5b8235610ff581610fb2565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60208101600b831061109c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000602082840312156110b457600080fd5b8151610f2981610fb2565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611120576111206110bf565b5060010190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561115f5761115f6110bf565b500290565b600061ffff8381169083168181101561117f5761117f6110bf565b039392505050565b6000821982111561119a5761119a6110bf565b500190565b6000826111d5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000815160005b818110156111fb57602081850181015186830152016111e1565b8181111561120a576000828601525b509290920192915050565b7fffffffff0000000000000000000000000000000000000000000000000000000083168152600061124960048301846111da565b949350505050565b6000610f2982846111da565b60006020828403121561126f57600080fd5b81518015158114610f2957600080fdfe60a060405234801561001057600080fd5b506040516106ca3803806106ca83398101604081905261002f9161006c565b60009190915560ff166080526001805460506001600160501b031991821681179092556004805490911690911790554260028190556003556100a2565b6000806040838503121561007f57600080fd5b82519150602083015160ff8116811461009757600080fd5b809150509250929050565b60805161060e6100bc600039600060d3015261060e6000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80639a6fc8f511610081578063d62ada111161005b578063d62ada11146102dc578063f7a30806146102f4578063feaf968c1461030757600080fd5b80639a6fc8f5146101cd578063bd18ad531461023a578063cd653afc1461024d57600080fd5b806354fd4d50116100b257806354fd4d501461012d57806367e8d83d1461013c5780637284e4161461018e57600080fd5b8063313ce567146100ce5780633fd0875f1461010c575b600080fd5b6100f57f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020015b60405180910390f35b6004546a0100000000000000000000900460ff166040516101039190610441565b60405160018152602001610103565b61018c61014a366004610482565b600480549115156c01000000000000000000000000027fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff909216919091179055565b005b604080518082018252600c81527f7072696365206f7261636c6500000000000000000000000000000000000000006020820152905161010391906104ab565b6102036101db36600461053d565b60015460005460025460035460045469ffffffffffffffffffff948516941691939590929450565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610103565b61018c610248366004610558565b61030f565b61018c61025b366004610579565b6001805469ffffffffffffffffffff9586167fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090911617905560029290925560035560048054919092167fffffffffffffffffffffffffffffffffffffffff00ff00000000000000000000909116176b020000000000000000000000179055565b6102e461035f565b6040519015158152602001610103565b61018c6103023660046105bf565b600055565b610203610385565b600480548291907fffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff166b01000000000000000000000083600281111561035757610357610412565b021790555050565b600454600090610380906b010000000000000000000000900460ff166103d6565b905090565b60008060008060006004600c9054906101000a900460ff16156103a757600080fd5b505060015460005460025460035460045469ffffffffffffffffffff9485169893975091955093509190911690565b600060028260028111156103ec576103ec610412565b14156103f757600080fd5b600182600281111561040b5761040b610412565b1492915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016006831061047c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561049457600080fd5b813580151581146104a457600080fd5b9392505050565b600060208083528351808285015260005b818110156104d8578581018301518582016040015282016104bc565b818111156104ea576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803569ffffffffffffffffffff8116811461053857600080fd5b919050565b60006020828403121561054f57600080fd5b6104a48261051e565b60006020828403121561056a57600080fd5b8135600381106104a457600080fd5b6000806000806080858703121561058f57600080fd5b6105988561051e565b935060208501359250604085013591506105b46060860161051e565b905092959194509250565b6000602082840312156105d157600080fd5b503591905056fea264697066735822122014874f7a973b86501c4c1a8be32490fe902c8f088ee234d25f9b2497e19f9e5264736f6c634300080a0033a2646970667358221220db8bf1b20c3ed39fd8eb2d77267ba8a606c43060a1321f93c24a8edb8117a9fb64736f6c634300080a003360806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d000117905534801561003957600080fd5b50600054604080516318caf8e360e31b815273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660048083019190915260248201929092526044810191909152632aa9a2a960e11b6064820152620100009091046001600160a01b03169063c657c71890608401600060405180830381600087803b1580156100ba57600080fd5b505af11580156100ce573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b81527390f79bf6eb2c4f870365e785982e1f101e93b90660048201526024810191909152600660448201526511949251539160d21b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561014f57600080fd5b505af1158015610163573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b8152733c44cdddb6a900fa2b585dd299e03d12fa4293bc60048201526024810191909152600a6044820152692624a8aaa4a220aa27a960b11b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b1580156101e857600080fd5b505af11580156101fc573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b815273c4375b7de8af5a38a93548eb8453a498222c4ff260048201526024810191909152600c60448201526b44554d425f4144445245535360a01b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561028357600080fd5b505af1158015610297573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b8152739965507d1a55bcc2695c58ba16fb37d819b0a4dc60048201526024810191909152600760448201526620a220a82a22a960c91b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561031957600080fd5b505af115801561032d573d6000803e3d6000fd5b505050506102a6806103406000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063ba414fa61461003b578063fa7626d414610057575b600080fd5b610043610064565b604051901515815260200160405180910390f35b6000546100439060ff1681565b60008054610100900460ff16156100845750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156101bf5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610129917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016101ff565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526101619161023b565b6000604051808303816000865af19150503d806000811461019e576040519150601f19603f3d011682016040523d82523d6000602084013e6101a3565b606091505b50915050808060200190518101906101bb919061024e565b9150505b919050565b6000815160005b818110156101e557602081850181015186830152016101cb565b818111156101f4576000828601525b509290920192915050565b7fffffffff0000000000000000000000000000000000000000000000000000000083168152600061023360048301846101c4565b949350505050565b600061024782846101c4565b9392505050565b60006020828403121561026057600080fd5b8151801515811461024757600080fdfea2646970667358221220293f55a0ef7b60c31a89dbc50e3339c80a8fdb1f9567614b200e97598226671f64736f6c634300080a003360806040523480156200001157600080fd5b506040516201110538038062011105833981016040819052620000349162000811565b6200003f3362000734565b6040516200004d9062000784565b604051809103906000f0801580156200006a573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b039283169081179091556040516310dc138160e31b81529184166004830152906386e09c0890602401600060405180830381600087803b158015620000c457600080fd5b505af1158015620000d9573d6000803e3d6000fd5b50506001546040516301ed651160e41b81526001600160a01b0385811660048301529091169250631ed651109150602401600060405180830381600087803b1580156200012557600080fd5b505af11580156200013a573d6000803e3d6000fd5b505050506040516200014c9062000792565b604051809103906000f08015801562000169573d6000803e3d6000fd5b50600280546001600160a01b0319166001600160a01b039283169081179091556001546040516376aad60560e01b81526004810192909252909116906376aad60590602401600060405180830381600087803b158015620001c957600080fd5b505af1158015620001de573d6000803e3d6000fd5b5050600154604051600093506001600160a01b0390911691506200020290620007a0565b6001600160a01b039091168152602001604051809103906000f0801580156200022f573d6000803e3d6000fd5b5060015460405163338f12b960e21b81526001600160a01b03808416600483015292935091169063ce3c4ae490602401600060405180830381600087803b1580156200027a57600080fd5b505af11580156200028f573d6000803e3d6000fd5b5050600154604051600093506001600160a01b039091169150620002b390620007ae565b6001600160a01b039091168152602001604051809103906000f080158015620002e0573d6000803e3d6000fd5b5060015460405163c5120b3960e01b81526001600160a01b03808416600483015292935091169063c5120b3990602401600060405180830381600087803b1580156200032b57600080fd5b505af115801562000340573d6000803e3d6000fd5b5050600154604051606093506001600160a01b03909116915082906200036690620007bc565b6200037392919062000849565b604051809103906000f08015801562000390573d6000803e3d6000fd5b50600380546001600160a01b0319166001600160a01b0392831690811790915560015460405163530e784f60e01b815260048101929092529091169063530e784f90602401600060405180830381600087803b158015620003f057600080fd5b505af115801562000405573d6000803e3d6000fd5b5050600154604051600093506001600160a01b0390911691506200042990620007ca565b6001600160a01b039091168152602001604051809103906000f08015801562000456573d6000803e3d6000fd5b506001546040516356ee0d3b60e11b81526001600160a01b03808416600483015292935091169063addc1a7690602401600060405180830381600087803b158015620004a157600080fd5b505af1158015620004b6573d6000803e3d6000fd5b5050600154604051600093506001600160a01b039091169150620004da90620007d8565b6001600160a01b039091168152602001604051809103906000f08015801562000507573d6000803e3d6000fd5b506001546040516321da583760e01b81526001600160a01b0380841660048301529293509116906321da583790602401600060405180830381600087803b1580156200055257600080fd5b505af115801562000567573d6000803e3d6000fd5b505050506000306040516200057c90620007e6565b6001600160a01b039091168152602001604051809103906000f080158015620005a9573d6000803e3d6000fd5b50600154604051631795d5b360e31b81526001600160a01b03808416600483015292935091169063bcaead9890602401600060405180830381600087803b158015620005f457600080fd5b505af115801562000609573d6000803e3d6000fd5b505060405163f2fde38b60e01b81523360048201526001600160a01b038416925063f2fde38b9150602401600060405180830381600087803b1580156200064f57600080fd5b505af115801562000664573d6000803e3d6000fd5b505060015460405163f2fde38b60e01b81523360048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b158015620006ae57600080fd5b505af1158015620006c3573d6000803e3d6000fd5b505060025460405163f2fde38b60e01b81523360048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b1580156200070d57600080fd5b505af115801562000722573d6000803e3d6000fd5b505050505050505050505050620008b2565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610fcd80620010dd83390190565b61098c80620020aa83390190565b610f508062002a3683390190565b614da6806200398683390190565b611b45806200872c83390190565b612ced806200a27183390190565b611627806200cf5e83390190565b612b80806200e58583390190565b80516001600160a01b03811681146200080c57600080fd5b919050565b600080604083850312156200082557600080fd5b6200083083620007f4565b91506200084060208401620007f4565b90509250929050565b6001600160a01b0383811682526040602080840182905284518483018190526000938683019290916060870190865b81811015620008a3578551805186168452840151851684840152948301949186019160010162000878565b50909998505050505050505050565b61081b80620008c26000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80638874ff1f1161005b5780638874ff1f146100f55780638da5cb5b14610108578063de28735914610126578063f2fde38b1461014657600080fd5b80632630c12f146100825780632954018c146100cb578063715018a6146100eb575b600080fd5b6003546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6001546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b6100f3610159565b005b6100f3610103366004610658565b6101eb565b60005473ffffffffffffffffffffffffffffffffffffffff166100a2565b6002546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b6100f3610154366004610734565b6103e3565b60005473ffffffffffffffffffffffffffffffffffffffff1633146101df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6101e96000610513565b565b60005473ffffffffffffffffffffffffffffffffffffffff16331461026c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101d6565b60005b815181101561035c57600354825173ffffffffffffffffffffffffffffffffffffffff9091169063e8a97a3e908490849081106102ae576102ae610756565b6020026020010151600001518484815181106102cc576102cc610756565b6020026020010151602001516040518363ffffffff1660e01b815260040161031792919073ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b600060405180830381600087803b15801561033157600080fd5b505af1158015610345573d6000803e3d6000fd5b50505050808061035490610785565b91505061026f565b506002546040517ff2fde38b00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063f2fde38b90602401600060405180830381600087803b1580156103c857600080fd5b505af11580156103dc573d6000803e3d6000fd5b5050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101d6565b73ffffffffffffffffffffffffffffffffffffffff8116610507576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016101d6565b61051081610513565b50565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156105da576105da610588565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561062757610627610588565b604052919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461065357600080fd5b919050565b6000602080838503121561066b57600080fd5b823567ffffffffffffffff8082111561068357600080fd5b818501915085601f83011261069757600080fd5b8135818111156106a9576106a9610588565b6106b7848260051b016105e0565b818152848101925060069190911b8301840190878211156106d757600080fd5b928401925b8184101561072957604084890312156106f55760008081fd5b6106fd6105b7565b6107068561062f565b815261071386860161062f565b81870152835260409390930192918401916106dc565b979650505050505050565b60006020828403121561074657600080fd5b61074f8261062f565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156107de577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea26469706673582212205ee75e57bb635aa49a1758f4ab0b04182a73115bff08f420c56a8ddb433c029364736f6c634300080a0033608060405234801561001057600080fd5b5061001a3361005f565b60405130906f20a2222922a9a9afa82927ab24a222a960811b907fb37614c7d254ea8d16eb81fa11dddaeb266aa8ba4917980859c7740aff30c69190600090a36100af565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610f0f806100be6000396000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c806377532ed9116100e3578063bcaead981161008c578063ce3c4ae411610066578063ce3c4ae414610308578063f2fde38b1461031b578063fca513a81461032e57600080fd5b8063bcaead98146102da578063c5120b39146102ed578063c513c9bb1461030057600080fd5b80639068a868116100bd5780639068a868146102b7578063addc1a76146102bf578063affd9243146102d257600080fd5b806377532ed91461027e57806386e09c08146102865780638da5cb5b1461029957600080fd5b80634c252f9111610145578063699f200f1161011f578063699f200f1461022d578063715018a61461026357806376aad6051461026b57600080fd5b80634c252f91146101fc578063530e784f1461020457806354fd4d501461021757600080fd5b80631ed65110116101765780631ed65110146101cc57806321da5837146101e157806326c74fc3146101f457600080fd5b8063060678c21461019257806308737695146101c4575b600080fd5b61019a610336565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61019a610366565b6101df6101da366004610e10565b610391565b005b6101df6101ef366004610e10565b610444565b61019a6104ef565b61019a61051a565b6101df610212366004610e10565b610545565b61021f600281565b6040519081526020016101bb565b61019a61023b366004610e4d565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6101df6105f0565b6101df610279366004610e10565b61067d565b61019a610728565b6101df610294366004610e10565b610753565b60005473ffffffffffffffffffffffffffffffffffffffff1661019a565b61019a6107fe565b6101df6102cd366004610e10565b610829565b61019a6108d4565b6101df6102e8366004610e10565b6108ff565b6101df6102fb366004610e10565b6109aa565b61019a610a55565b6101df610316366004610e10565b610a80565b6101df610329366004610e10565b610b2b565b61019a610c58565b60006103617f444154415f434f4d50524553534f520000000000000000000000000000000000610c7f565b905090565b60006103617f41434c0000000000000000000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610417576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6104417f54524541535552595f434f4e545241435400000000000000000000000000000082610d1d565b50565b60005473ffffffffffffffffffffffffffffffffffffffff1633146104c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f574554485f47415445574159000000000000000000000000000000000000000082610d1d565b60006103617f54524541535552595f434f4e5452414354000000000000000000000000000000610c7f565b60006103617f574554485f544f4b454e00000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f50524943455f4f5241434c45000000000000000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610671576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b61067b6000610d9b565b565b60005473ffffffffffffffffffffffffffffffffffffffff1633146106fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f41434c000000000000000000000000000000000000000000000000000000000082610d1d565b60006103617f574554485f474154455741590000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146107d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f574554485f544f4b454e0000000000000000000000000000000000000000000082610d1d565b60006103617f4143434f554e545f464143544f52590000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146108aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f4143434f554e545f464143544f5259000000000000000000000000000000000082610d1d565b60006103617f474541525f544f4b454e00000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610980576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f474541525f544f4b454e0000000000000000000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f444154415f434f4d50524553534f52000000000000000000000000000000000082610d1d565b60006103617f434f4e5452414354535f52454749535445520000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610b01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f434f4e5452414354535f5245474953544552000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610bac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b73ffffffffffffffffffffffffffffffffffffffff8116610c4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161040e565b61044181610d9b565b60006103617f50524943455f4f5241434c4500000000000000000000000000000000000000005b6000818152600160209081526040808320548151808301909252600382527f41503100000000000000000000000000000000000000000000000000000000009282019290925273ffffffffffffffffffffffffffffffffffffffff9091169081610d16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040e9190610e66565b5092915050565b60008281526001602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091559051909184917fb37614c7d254ea8d16eb81fa11dddaeb266aa8ba4917980859c7740aff30c6919190a35050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215610e2257600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610e4657600080fd5b9392505050565b600060208284031215610e5f57600080fd5b5035919050565b600060208083528351808285015260005b81811015610e9357858101830151858201604001528201610e77565b81811115610ea5576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea264697066735822122083c228af017c6f5cf8c395cdf7a53276ff56fdd4f4313c39f680ab73bd75417364736f6c634300080a0033608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61090e8061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063732818191161008c578063adce758d11610066578063adce758d14610215578063ba306df114610228578063d4eb5db01461023b578063f2fde38b1461027457600080fd5b806373281819146101b7578063819ad68e146101da5780638da5cb5b146101ed57600080fd5b806354fd4d50116100bd57806354fd4d501461016a5780635f259aba14610180578063715018a6146101af57600080fd5b806335914829146100e45780633a41ec641461011c5780634910832f14610155575b600080fd5b6101076100f236600461089b565b60016020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61010761012a36600461089b565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205460ff1690565b61016861016336600461089b565b610287565b005b610172600181565b604051908152602001610113565b61010761018e36600461089b565b60005473ffffffffffffffffffffffffffffffffffffffff91821691161490565b610168610387565b6101076101c536600461089b565b60026020526000908152604090205460ff1681565b6101686101e836600461089b565b610414565b60005460405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610113565b61016861022336600461089b565b61050c565b61016861023636600461089b565b610601565b61010761024936600461089b565b73ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205460ff1690565b61016861028236600461089b565b6106f6565b60005473ffffffffffffffffffffffffffffffffffffffff16331461030d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909217909155517fae26b1cfe9454ba87274a4e8330b6654684362d0f3d7bbd17f7449a1d38387c69190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610408576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b6104126000610826565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517fd400da6c0c0a894dacc0981730b88af0545d00272ee8fff1437bf560ff245fc49190a250565b60005473ffffffffffffffffffffffffffffffffffffffff16331461058d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f1998397e7203f7baca9d6f41b9e4da6e768daac5caad4234fb9bf5869d2715459190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610682576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526001602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f28b01395b7e25d20552a0c8dc8ecd3b1d4abc986f14dad7885fd45b6fd73c8d99190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811661081a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610304565b61082381610826565b50565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156108ad57600080fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146108d157600080fd5b939250505056fea26469706673582212204712efbfe997070def77285a5b8753bc882b62da2133ce1937ad26cd2b48e49864736f6c634300080a003360a060405234801561001057600080fd5b50604051610f50380380610f5083398101604081905261002f916100d7565b6000805460ff19169055806001600160a01b03811661006157604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa15801561009f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100c391906100d7565b6001600160a01b0316608052506101079050565b6000602082840312156100e957600080fd5b81516001600160a01b038116811461010057600080fd5b9392505050565b608051610e1261013e600039600081816101e2015281816102b20152818161040f0152818161057801526108510152610e126000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80638456cb5911610097578063b4ac686011610066578063b4ac686014610217578063c29277cd1461021f578063d914cd4b14610227578063e26b2f631461023a57600080fd5b80638456cb59146101cd57806394144856146101d5578063a50cf2c8146101dd578063ac4afa381461020457600080fd5b80635b16ebb7116100d35780635b16ebb7146101575780635c975abb1461018a578063673a2a1f146101955780636fbc6f6b146101aa57600080fd5b80631e16e4fc146100fa5780633f4ba83a1461013757806354fd4d5014610141575b600080fd5b61010d610108366004610c97565b61024d565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61013f610284565b005b610149600181565b60405190815260200161012e565b61017a610165366004610cb0565b60026020526000908152604090205460ff1681565b604051901515815260200161012e565b60005460ff1661017a565b61019d610372565b60405161012e9190610ced565b61017a6101b8366004610cb0565b60046020526000908152604090205460ff1681565b61013f6103e1565b61019d6104cd565b61010d7f000000000000000000000000000000000000000000000000000000000000000081565b61010d610212366004610c97565b61053a565b600154610149565b600354610149565b61013f610235366004610cb0565b61054a565b61013f610248366004610cb0565b610823565b6003818154811061025d57600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa15801561030e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103329190610d47565b610368576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610370610af6565b565b606060018054806020026020016040519081016040528092919081815260200182805480156103d757602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116103ac575b5050505050905090565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561046b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048f9190610d47565b6104c5576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610370610bd7565b606060038054806020026020016040519081016040528092919081815260200182805480156103d75760200282019190600052602060002090815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116103ac575050505050905090565b6001818154811061025d57600080fd5b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156105d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f89190610d47565b61062e576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051808201909152600281527f5a30000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff82166106b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b60405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff8116600090815260026020908152604091829020548251808401909352600383527f43523100000000000000000000000000000000000000000000000000000000009183019190915260ff1615610753576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b506001805480820182557fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915560008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909417909355915190917ff816b5143086c89d103a0683286be86c2b741e83ebfa75135aae606e2f5c6e5391a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156108ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d19190610d47565b610907576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051808201909152600281527f5a30000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8216610989576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b5073ffffffffffffffffffffffffffffffffffffffff8116600090815260046020908152604091829020548251808401909352600383527f43523200000000000000000000000000000000000000000000000000000000009183019190915260ff1615610a23576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b506003805460018082019092557fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915560008181526004602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909417909355915190917f58ad3cfc4b6552a53c8c4128ae9b080e14b4378a159280643a62c6f709cee24f91a250565b60005460ff16610b62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016106b0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff1615610c44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016106b0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610bad3390565b600060208284031215610ca957600080fd5b5035919050565b600060208284031215610cc257600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610ce657600080fd5b9392505050565b6020808252825182820181905260009190848201906040850190845b81811015610d3b57835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101610d09565b50909695505050505050565b600060208284031215610d5957600080fd5b81518015158114610ce657600080fd5b600060208083528351808285015260005b81811015610d9657858101830151858201604001528201610d7a565b81811115610da8576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea26469706673582212208f2d91c863db9ab1494a9c5db20e3fddc4b6c779ea3c3621737c105c60d9440a64736f6c634300080a003360e06040523480156200001157600080fd5b5060405162004da638038062004da6833981016040819052620000349162000160565b6001600160a01b0381166200005c57604051635919af9760e11b815260040160405180910390fd5b6001600160a01b03811660808190526040805163c513c9bb60e01b8152905163c513c9bb916004808201926020929091908290030181865afa158015620000a7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cd919062000160565b6001600160a01b031660a0816001600160a01b0316815250506080516001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000127573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200014d919062000160565b6001600160a01b031660c0525062000192565b6000602082840312156200017357600080fd5b81516001600160a01b03811681146200018b57600080fd5b9392505050565b60805160a05160c051614b896200021d6000396000818161018801528181611c4f0152612c5a0152600081816101ed015281816115e201528181611f5f0152818161213f0152818161223f0152818161243801528181612604015281816126bc01528181612788015281816129a501528181613c410152613d000152600061013c0152614b896000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c806354fd4d5011610081578063a80deda31161005b578063a80deda31461020f578063ae093f3f1461022f578063fc9914cb1461024f57600080fd5b806354fd4d50146101bd578063663b8fdb146101d35780637a0c7b21146101e857600080fd5b80632954018c116100b25780632954018c146101375780634b2f336d146101835780634c472fc9146101aa57600080fd5b80630dbd616d146100d957806313d21cdf146101025780631bcd8fc014610122575b600080fd5b6100ec6100e73660046140fc565b610272565b6040516100f9919061430b565b60405180910390f35b61011561011036600461431e565b6114d4565b6040516100f99190614444565b61012a611f59565b6040516100f99190614453565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100f9565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b61015e6101b83660046140fc565b6121f5565b6101c5600281565b6040519081526020016100f9565b6101db612432565b6040516100f991906146ea565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b61022261021d36600461431e565b6126b5565b6040516100f9919061476a565b61024261023d36600461431e565b612a75565b6040516100f991906147dd565b61026261025d3660046140fc565b613bf7565b60405190151581526020016100f9565b61035f604051806102400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160008152602001606081526020016000815260200160008152602001600015158152602001600081526020016000815260200160008152602001600060ff168152602001600081525090565b600080600080600061037088613cf4565b509450945094509450945060008560ff1660011461041d576040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015284169063e958b70490602401602060405180830381865afa1580156103f4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061041891906147f0565b6104ad565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015286169063e958b70490602401602060405180830381865afa158015610489573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ad91906147f0565b60ff8716610200890181905273ffffffffffffffffffffffffffffffffffffffff808b1660208b01528b811660608b015282168952909150600114156109e9578473ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610538573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055c91906147f0565b73ffffffffffffffffffffffffffffffffffffffff90811660808901526040517fc7de38a600000000000000000000000000000000000000000000000000000000815282821660048201529085169063c7de38a690602401602060405180830381865afa1580156105d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f5919061480d565b60c08801526040517fdfd5946500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015285169063dfd5946590602401602060405180830381865afa158015610666573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068a919061480d565b60e08801526040517f3ce0735500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015260006024830152861690633ce0735590604401602060405180830381865afa92505050801561073c575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526107399181019061480d565b60015b6107455761074c565b6101408801525b6040517f3ce0735500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015260016024830152861690633ce0735590604401602060405180830381865afa9250505080156107f9575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526107f69181019061480d565b60015b61080257610809565b6101608801525b60c08701516040517f996329f800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526024820192909252600060448201529086169063996329f89060640160a060405180830381865afa9250505080156108c4575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526108c191810190614826565b60015b6108cd576108da565b505015156101808a015250505b8073ffffffffffffffffffffffffffffffffffffffff16631afbb7a46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610925573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610949919061480d565b6101a08801526040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152851690633192195c90602401602060405180830381865afa1580156109bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109df919061480d565b60a0880152610c26565b8273ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5891906147f0565b73ffffffffffffffffffffffffffffffffffffffff90811660808901526040517fc7de38a600000000000000000000000000000000000000000000000000000000815282821660048201529083169063c7de38a6906024016040805180830381865afa158015610acc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af09190614866565b5060c08801526040517fdfd5946500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015283169063dfd5946590602401602060405180830381865afa158015610b62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b86919061480d565b60e08801526040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152841690633192195c906024016040805180830381865afa158015610bf6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1a9190614866565b60a08901526101a08801525b60008660ff16600114610ca7578373ffffffffffffffffffffffffffffffffffffffff166316f0115b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca291906147f0565b610d16565b8573ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1691906147f0565b90508073ffffffffffffffffffffffffffffffffffffffff166345d31f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d87919061480d565b6101008901526000600160ff891614610e0e578473ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610de5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e09919061480d565b610e7d565b8573ffffffffffffffffffffffffffffffffffffffff166320a05ff76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7d919061480d565b90508760ff16600114610f1f576040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152861690638991b2f190602401602060405180830381865afa158015610ef6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1a919061480d565b610faf565b6040517fb451cecc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015287169063b451cecc90602401602060405180830381865afa158015610f8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610faf919061480d565b6102208a01528067ffffffffffffffff811115610fce57610fce61488a565b60405190808252806020026020018201604052801561103e57816020015b6040805160808101825260008082526020808301829052928201819052606082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181610fec5790505b506101208a015260005b818110156113d657604080516080810182526000808252602082018190529181018290526060810191909152600180831b9060ff8c1614156111c5576040517faf0a650200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018590528a169063af0a650290604401608060405180830381865afa1580156110f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111b91906148b9565b5050602084015273ffffffffffffffffffffffffffffffffffffffff9081168084526040517ff9eaee0d0000000000000000000000000000000000000000000000000000000081526004810191909152908a169063f9eaee0d90602401602060405180830381865afa158015611195573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b9919061490d565b15156040830152611388565b6040517f172c48c70000000000000000000000000000000000000000000000000000000081526004810184905273ffffffffffffffffffffffffffffffffffffffff89169063172c48c7906024016040805180830381865afa15801561122f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112539190614928565b5073ffffffffffffffffffffffffffffffffffffffff9081168084526040517f70a082310000000000000000000000000000000000000000000000000000000081529188166004830152906370a0823190602401602060405180830381865afa1580156112c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e8919061480d565b602083015281516040517ff9eaee0d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529088169063f9eaee0d90602401602060405180830381865afa15801561135c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611380919061490d565b151560408301525b6102208c015181161561139c57600161139f565b60005b151560608301526101208c01518051839190859081106113c1576113c161495e565b60209081029190910101525050600101611048565b508273ffffffffffffffffffffffffffffffffffffffff166317d11a156040518163ffffffff1660e01b8152600401602060405180830381865afa158015611422573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611446919061480d565b896101c00181815250508273ffffffffffffffffffffffffffffffffffffffff16633dc54b406040518163ffffffff1660e01b8152600401602060405180830381865afa15801561149b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bf919061480d565b6101e08a015250969998505050505050505050565b61159b604051806102000160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600060ff1681525090565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015283917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa15801561162b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164f919061490d565b611685576040517fd384b23800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316808352604080517ffe14112d000000000000000000000000000000000000000000000000000000008152905185929163fe14112d9160048083019260209291908290030181865afa1580156116f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611719919061480d565b8360c00181815250508073ffffffffffffffffffffffffffffffffffffffff1663ef8d96036040518163ffffffff1660e01b8152600401602060405180830381865afa15801561176d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611791919061480d565b8360e00181815250508073ffffffffffffffffffffffffffffffffffffffff1663743753596040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611809919061480d565b8360a00181815250508073ffffffffffffffffffffffffffffffffffffffff16634c19386c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561185d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611881919061480d565b836101000181815250508073ffffffffffffffffffffffffffffffffffffffff1663788c6bfe6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fa919061480d565b836101600181815250508073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561194f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611973919061480d565b8360800181815250508073ffffffffffffffffffffffffffffffffffffffff166345d31f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119eb919061480d565b836101400181815250508073ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6491906147f0565b836040019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff166336dda7d56040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0a91906147f0565b836060019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663788c6bfe6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb0919061480d565b836101600181815250508073ffffffffffffffffffffffffffffffffffffffff1663e941fa786040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c29919061480d565b61018084015260408084015173ffffffffffffffffffffffffffffffffffffffff9081167f000000000000000000000000000000000000000000000000000000000000000082161460208087019190915282517f609ae31700000000000000000000000000000000000000000000000000000000815292519184169263609ae31792600480830193928290030181865afa158015611ccb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cef919061480d565b836101c00181815250508073ffffffffffffffffffffffffffffffffffffffff1663dbcb313b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d68919061480d565b836101a00181815250506000836060015173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de7919061480d565b6040517f5427c9380000000000000000000000000000000000000000000000000000000081526004810182905290915060009073ffffffffffffffffffffffffffffffffffffffff841690635427c93890602401602060405180830381865afa158015611e58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7c919061480d565b90508015611ec7576101808501518190611eb890611e9c906127106149bc565b876101000151886101400151611eb291906149d3565b90613fd0565b611ec29190614a3f565b611ece565b8461014001515b856101200181815250508273ffffffffffffffffffffffffffffffffffffffff166354fd4d506040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f47919061480d565b60ff166101e086015250505050919050565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b4ac68606040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fec919061480d565b90508067ffffffffffffffff8111156120075761200761488a565b6040519080825280602002602001820160405280156120ff57816020015b6120ec604051806102000160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600060ff1681525090565b8152602001906001900390816120255790505b50915060005b818110156121f0576040517fac4afa38000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ac4afa3890602401602060405180830381865afa15801561219b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121bf91906147f0565b90506121ca816114d4565b8483815181106121dc576121dc61495e565b602090810291909101015250600101612105565b505090565b6040517f6fbc6f6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015260009184917f00000000000000000000000000000000000000000000000000000000000000001690636fbc6f6b90602401602060405180830381865afa158015612286573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122aa919061490d565b6122e0576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060006122ee87613cf4565b5050935093505092508260ff16600114612397576040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015282169063fdd5764590602401602060405180830381865afa15801561236e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061239291906147f0565b612427565b6040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015283169063fdd5764590602401602060405180830381865afa158015612403573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061242791906147f0565b979650505050505050565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c29277cd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124c5919061480d565b90508067ffffffffffffffff8111156124e0576124e061488a565b6040519080825280602002602001820160405280156125c457816020015b60408051610260810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083018290526101208301819052610140830181905261016083015261018082018190526101a082018190526101c082018190526101e082018190526102008201819052610220820181905261024082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816124fe5790505b50915060005b818110156121f0576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa158015612660573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061268491906147f0565b905061268f81612a75565b8483815181106126a1576126a161495e565b6020908102919091010152506001016125ca565b60606000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c29277cd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612725573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612749919061480d565b905060005b81811015612829576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa1580156127e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061280891906147f0565b90506128148187613bf7565b15612820578360010193505b5060010161274e565b508167ffffffffffffffff8111156128435761284361488a565b60405190808252806020026020018201604052801561296157816020015b61294e604051806102400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160008152602001606081526020016000815260200160008152602001600015158152602001600081526020016000815260200160008152602001600060ff168152602001600081525090565b8152602001906001900390816128615790505b5092506000915060005b81811015612a6d576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa158015612a01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a2591906147f0565b9050612a318187613bf7565b15612a6457612a408187610272565b858581518110612a5257612a5261495e565b60209081029190910101526001909301925b5060010161296b565b505050919050565b604080516102608101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082018390526101208201819052610140820181905261016082015261018081018290526101a081018290526101c081018290526101e08101829052610200810182905261022081018290526102408101829052908080808080612b1b88613cf4565b73ffffffffffffffffffffffffffffffffffffffff8e168d5260ff86166101808e01819052959b50939950919750955093509150600114612bca578273ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ba1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bc591906147f0565b612c39565b8473ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c3991906147f0565b73ffffffffffffffffffffffffffffffffffffffff908116602089018190527f00000000000000000000000000000000000000000000000000000000000000009091161460408801526000600160ff881614612d03578373ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cfe91906147f0565b612d72565b8573ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d7291906147f0565b6040517f2e97ca2100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b8116600483015291925090821690632e97ca2190602401602060405180830381865afa158015612de2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e06919061490d565b15156060890152604080517f45d31f9d000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff8316916345d31f9d9160048083019260209291908290030181865afa158015612e78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e9c919061480d565b8860800181815250508073ffffffffffffffffffffffffffffffffffffffff1663743753596040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ef0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f14919061480d565b610100890152600160ff88161415613017578573ffffffffffffffffffffffffffffffffffffffff16639b2cb5d86040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f95919061480d565b8860a00181815250508573ffffffffffffffffffffffffffffffffffffffff16635f48f3936040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fe9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061300d919061480d565b60c08901526130a5565b8273ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa158015613061573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130859190614a73565b6fffffffffffffffffffffffffffffffff90811660c08b01521660a08901525b60008760ff16600114613126578473ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613121919061480d565b613195565b8573ffffffffffffffffffffffffffffffffffffffff166320a05ff76040518163ffffffff1660e01b8152600401602060405180830381865afa158015613171573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613195919061480d565b90508067ffffffffffffffff8111156131b0576131b061488a565b6040519080825280602002602001820160405280156131d9578160200160208202803683370190505b506101208a01528067ffffffffffffffff8111156131f9576131f961488a565b604051908082528060200260200182016040528015613222578160200160208202803683370190505b506101608a015260005b818110156134c4578860ff16600114156133b4576040517f5e5f2e260000000000000000000000000000000000000000000000000000000081526004810182905260009073ffffffffffffffffffffffffffffffffffffffff891690635e5f2e2690602401602060405180830381865afa1580156132ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132d291906147f0565b9050808b610120015183815181106132ec576132ec61495e565b73ffffffffffffffffffffffffffffffffffffffff92831660209182029290920101526040517f78327438000000000000000000000000000000000000000000000000000000008152828216600482015290891690637832743890602401602060405180830381865afa158015613367573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061338b919061480d565b8b610160015183815181106133a2576133a261495e565b602002602001018181525050506134bc565b6040517f172c48c70000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff87169063172c48c7906024016040805180830381865afa15801561341e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134429190614928565b8061ffff1690508b610120015183815181106134605761346061495e565b602002602001018c6101600151848151811061347e5761347e61495e565b60200260200101828152508273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525050505b60010161322c565b5060008860ff16600114613546578373ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561351d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613541919061480d565b6135b5565b8673ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613591573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135b5919061480d565b90508067ffffffffffffffff8111156135d0576135d061488a565b60405190808252806020026020018201604052801561361557816020015b60408051808201909152600080825260208201528152602001906001900390816135ee5790505b506101408b015260005b818110156139015760408051808201909152600080825260208201528a60ff166001146136da576040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff871690635094cb4f90602401602060405180830381865afa1580156136b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136d591906147f0565b613769565b6040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff8a1690635094cb4f90602401602060405180830381865afa158015613745573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061376991906147f0565b73ffffffffffffffffffffffffffffffffffffffff168152600160ff8c16146138245780516040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529089169063fdd5764590602401602060405180830381865afa1580156137fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061381f91906147f0565b6138b7565b80516040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152908a169063fdd5764590602401602060405180830381865afa158015613893573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138b791906147f0565b73ffffffffffffffffffffffffffffffffffffffff1660208201526101408c01518051829190849081106138ed576138ed61495e565b60209081029190910101525060010161361f565b508860ff166001141561398f578773ffffffffffffffffffffffffffffffffffffffff1663b2c53a6c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613959573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061397d919061480d565b60e08b015260ff6102408b0152613be9565b73ffffffffffffffffffffffffffffffffffffffff85166101a08b01819052604080517f9408b63f0000000000000000000000000000000000000000000000000000000081529051639408b63f916004808201926020929091908290030181865afa158015613a02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a2691906147f0565b8a6101e0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508473ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015613aa9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613acd9190614aa6565b5015156102008c015250604080517f9fd12b77000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff881691639fd12b779160048083019260209291908290030181865afa158015613b42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b66919061480d565b8a6102200181815250508573ffffffffffffffffffffffffffffffffffffffff16638345f26e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bdf9190614af7565b60ff166102408b01525b505050505050505050919050565b6040517f6fbc6f6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015260009184917f00000000000000000000000000000000000000000000000000000000000000001690636fbc6f6b90602401602060405180830381865afa158015613c88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cac919061490d565b613ce2576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613cec8484614023565b949350505050565b600080600080600080867f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636fbc6f6b826040518263ffffffff1660e01b8152600401613d73919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa158015613d90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613db4919061490d565b613dea576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8773ffffffffffffffffffffffffffffffffffffffff166354fd4d506040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e59919061480d565b96508660ff1660011415613ee0578795508573ffffffffffffffffffffffffffffffffffffffff1663f93f515b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613eb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ed991906147f0565b9450613fc6565b8793508373ffffffffffffffffffffffffffffffffffffffff16632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f5291906147f0565b92508373ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fc391906147f0565b91505b5091939550919395565b6000821580613fdd575081155b15613fea5750600061401d565b612710613ff8600282614b1a565b61ffff1661400684866149d3565b6140109190614b3b565b61401a9190614a3f565b90505b92915050565b6040517f055ee9b500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600091829185169063055ee9b590602401602060405180830381865afa158015614094573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140b891906147f0565b73ffffffffffffffffffffffffffffffffffffffff1614159392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146140f957600080fd5b50565b6000806040838503121561410f57600080fd5b823561411a816140d7565b9150602083013561412a816140d7565b809150509250929050565b600081518084526020808501945080840160005b8381101561419f578151805173ffffffffffffffffffffffffffffffffffffffff168852838101518489015260408082015115159089015260609081015115159088015260809096019590820190600101614149565b509495945050505050565b805173ffffffffffffffffffffffffffffffffffffffff168252600061024060208301516141f0602086018273ffffffffffffffffffffffffffffffffffffffff169052565b506040830151614204604086018215159052565b50606083015161422c606086018273ffffffffffffffffffffffffffffffffffffffff169052565b506080830151614254608086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060a083015160a085015260c083015160c085015260e083015160e085015261010080840151818601525061012080840151828287015261429783870182614135565b92505050610140808401518186015250610160808401518186015250610180808401516142c78287018215159052565b50506101a083810151908501526101c080840151908501526101e080840151908501526102008084015160ff16908501526102209283015192909301919091525090565b60208152600061401a60208301846141aa565b60006020828403121561433057600080fd5b813561433b816140d7565b9392505050565b805173ffffffffffffffffffffffffffffffffffffffff168252602081015161436f602084018215159052565b506040810151614397604084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060608101516143bf606084018273ffffffffffffffffffffffffffffffffffffffff169052565b506080818101519083015260a0808201519083015260c0808201519083015260e08082015190830152610100808201519083015261012080820151908301526101408082015190830152610160808201519083015261018080820151908301526101a080820151908301526101c080820151908301526101e09081015160ff16910152565b610200810161401d8284614342565b6020808252825182820181905260009190848201906040850190845b8181101561449657614482838551614342565b92840192610200929092019160010161446f565b50909695505050505050565b600081518084526020808501945080840160005b8381101561419f57815173ffffffffffffffffffffffffffffffffffffffff16875295820195908201906001016144b6565b600081518084526020808501945080840160005b8381101561419f578151805173ffffffffffffffffffffffffffffffffffffffff9081168952908401511683880152604090960195908201906001016144fc565b600081518084526020808501945080840160005b8381101561419f57815187529582019590820190600101614551565b805173ffffffffffffffffffffffffffffffffffffffff168252600061026060208301516145b3602086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060408301516145c7604086018215159052565b5060608301516145db606086018215159052565b506080830151608085015260a083015160a085015260c083015160c085015260e083015160e0850152610100808401518186015250610120808401518282870152614628838701826144a2565b92505050610140808401518583038287015261464483826144e8565b925050506101608084015185830382870152614660838261453d565b92505050610180808401516146798287018260ff169052565b50506101a08381015173ffffffffffffffffffffffffffffffffffffffff908116918601919091526101c0808501511515908601526101e080850151909116908501526102008084015115159085015261022080840151908501526102409283015160ff1692909301919091525090565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561475d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc088860301845261474b85835161456d565b94509285019290850190600101614711565b5092979650505050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561475d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08886030184526147cb8583516141aa565b94509285019290850190600101614791565b60208152600061401a602083018461456d565b60006020828403121561480257600080fd5b815161433b816140d7565b60006020828403121561481f57600080fd5b5051919050565b600080600080600060a0868803121561483e57600080fd5b5050835160208501516040860151606087015160809097015192989197509594509092509050565b6000806040838503121561487957600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080600080608085870312156148cf57600080fd5b84516148da816140d7565b60208601516040870151606090970151919890975090945092505050565b8051801515811461490857600080fd5b919050565b60006020828403121561491f57600080fd5b61401a826148f8565b6000806040838503121561493b57600080fd5b8251614946816140d7565b602084015190925061ffff8116811461412a57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156149ce576149ce61498d565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614a0b57614a0b61498d565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614a4e57614a4e614a10565b500490565b80516fffffffffffffffffffffffffffffffff8116811461490857600080fd5b60008060408385031215614a8657600080fd5b614a8f83614a53565b9150614a9d60208401614a53565b90509250929050565b600080600060608486031215614abb57600080fd5b614ac484614a53565b9250614ad2602085016148f8565b9150604084015164ffffffffff81168114614aec57600080fd5b809150509250925092565b600060208284031215614b0957600080fd5b815160ff8116811461433b57600080fd5b600061ffff80841680614b2f57614b2f614a10565b92169190910492915050565b60008219821115614b4e57614b4e61498d565b50019056fea2646970667358221220d15108d0bec9cc6f3903875dd8412869a3da1b36661bdc780e2e2f0ae3136d2464736f6c634300080a003360a06040523480156200001157600080fd5b5060405162001b4538038062001b45833981016040819052620000349162000608565b6000805460ff19169055816001600160a01b0381166200006757604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cc91906200070a565b6001600160a01b031660805250805160005b818110156200014257620001398382815181106200010057620001006200072f565b6020026020010151600001518483815181106200012157620001216200072f565b6020026020010151602001516200014c60201b60201c565b600101620000de565b5050505062000822565b6001600160a01b03821615806200016a57506001600160a01b038116155b156200018957604051635919af9760e11b815260040160405180910390fd5b620001a8826001600160a01b0316620004ba60201b620006751760201c565b620001d65760405163df4c572d60e01b81526001600160a01b03831660048201526024015b60405180910390fd5b620001f5816001600160a01b0316620004ba60201b620006751760201c565b6200021f5760405163df4c572d60e01b81526001600160a01b0382166004820152602401620001cd565b806001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200027c575060408051601f3d908101601f19168201909252620002799181019062000745565b60015b6200029a576040516367a7cd4360e01b815260040160405180910390fd5b8060ff16600814620002bf576040516367a7cd4360e01b815260040160405180910390fd5b506000816001600160a01b031663d62ada116040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200031f575060408051601f3d908101601f191682019092526200031c918101906200076a565b60015b6200032a576200032d565b90505b6000836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200038c575060408051601f3d908101601f19168201909252620003899181019062000745565b60015b620003aa5760405163528ca31d60e01b815260040160405180910390fd5b60128160ff161115620003d05760405163528ca31d60e01b815260040160405180910390fd5b9050826001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa9250505080156200042f575060408051601f3d908101601f191682019092526200042c91810190620007a6565b60015b6200044d576040516367a7cd4360e01b815260040160405180910390fd5b8662000461576200046185858484620004c0565b5050505050620004748484848462000526565b826001600160a01b0316846001600160a01b03167fe263805b03657ab13064915d0723c5ce14981547e7cba5283f66b9e5d81f6e6e60405160405180910390a350505050565b3b151590565b60008313620004e2576040516356e05d2b60e01b815260040160405180910390fd5b836001600160501b0316816001600160501b0316108062000501575081155b15620005205760405163b1cf675560e01b815260040160405180910390fd5b50505050565b6001600160a01b03831682156200053e57600160a11b175b6200055460ff60a21b60a284901b1682620007fb565b6001600160a01b0390951660009081526001602052604090209490945550505050565b80516001600160a01b03811681146200058f57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715620005cf57620005cf62000594565b60405290565b604051601f8201601f191681016001600160401b038111828210171562000600576200060062000594565b604052919050565b60008060408084860312156200061d57600080fd5b620006288462000577565b602085810151919450906001600160401b03808211156200064857600080fd5b818701915087601f8301126200065d57600080fd5b81518181111562000672576200067262000594565b62000682848260051b01620005d5565b818152848101925060069190911b830184019089821115620006a357600080fd5b928401925b81841015620006fa5785848b031215620006c25760008081fd5b620006cc620005aa565b620006d78562000577565b8152620006e686860162000577565b8187015283529285019291840191620006a8565b8096505050505050509250929050565b6000602082840312156200071d57600080fd5b620007288262000577565b9392505050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156200075857600080fd5b815160ff811681146200072857600080fd5b6000602082840312156200077d57600080fd5b815180151581146200072857600080fd5b80516001600160501b03811681146200058f57600080fd5b600080600080600060a08688031215620007bf57600080fd5b620007ca866200078e565b9450602086015193506040860151925060608601519150620007ef608087016200078e565b90509295509295909350565b600082198211156200081d57634e487b7160e01b600052601160045260246000fd5b500190565b6080516112f262000853600039600081816101b201528181610280015281816103e201526104ff01526112f26000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c80638456cb591161008c578063b66102df11610066578063b66102df146101d4578063e8a97a3e146101e7578063f190e5fa146101fa578063f9a650301461023f57600080fd5b80638456cb591461016d5780639dcb511a14610175578063a50cf2c8146101ad57600080fd5b80635c975abb116100bd5780635c975abb1461011c5780635cecbd0e146101325780637afb01041461015a57600080fd5b80633f4ba83a146100e457806341976e09146100ee57806354fd4d5014610114575b600080fd5b6100ec610252565b005b6101016100fc366004610f28565b610340565b6040519081526020015b60405180910390f35b610101600281565b60005460ff16604051901515815260200161010b565b610145610140366004610f4a565b610352565b6040805192835260208301919091520161010b565b610101610168366004610f90565b610376565b6100ec6103b4565b610188610183366004610f28565b6104a0565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010b565b6101887f000000000000000000000000000000000000000000000000000000000000000081565b6101016101e2366004610fbc565b6104b4565b6100ec6101f5366004610ff8565b6104d1565b61020d610208366004610f28565b6105c3565b6040805173ffffffffffffffffffffffffffffffffffffffff909416845291151560208401529082015260600161010b565b61010161024d366004610f90565b61064d565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156102dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103009190611022565b610336576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033e61067b565b565b600061034b82610761565b5092915050565b60008061035f868661064d565b915061036b848461064d565b905094509492505050565b600080600061038484610761565b90925090508161039582600a611193565b61039f908761119f565b6103a991906111dc565b925050505b92915050565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561043e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104629190611022565b610498576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033e610819565b60006104ab826105c3565b50909392505050565b60006104c96104c3858561064d565b83610376565b949350505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561055b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057f9190611022565b6105b5576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105bf82826108d9565b5050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600160205260408120548190819080610624576040517f4bb8ad8200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b947402000000000000000000000000000000000000000086161515945060a286901c9350915050565b600080600061065b84610761565b909250905061066b81600a611193565b61039f838761119f565b3b151590565b60005460ff166106ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b600080600080610770856105c3565b8095508193508294505050506000806000808573ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156107cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f19190611231565b9450945050935093508461080b5761080b84848484610dd9565b829750505050505050915091565b60005460ff1615610886576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016106e3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586107373390565b73ffffffffffffffffffffffffffffffffffffffff82161580610910575073ffffffffffffffffffffffffffffffffffffffff8116155b15610947576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82163b6109ad576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016106e3565b73ffffffffffffffffffffffffffffffffffffffff81163b610a13576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024016106e3565b8073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610a98575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610a9591810190611281565b60015b610ace576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060ff16600814610b0b576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060008173ffffffffffffffffffffffffffffffffffffffff1663d62ada116040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610b93575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610b9091810190611022565b60015b610b9c57610b9f565b90505b60008373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610c26575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610c2391810190611281565b60015b610c5c576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60128160ff161115610c9a576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b90508273ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa925050508015610d21575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610d1e91810190611231565b60015b610d57576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b86610d6857610d6885858484610dd9565b5050505050610d7984848484610e74565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fe263805b03657ab13064915d0723c5ce14981547e7cba5283f66b9e5d81f6e6e60405160405180910390a350505050565b60008313610e13576040517f56e05d2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8369ffffffffffffffffffff168169ffffffffffffffffffff161080610e37575081155b15610e6e576040517fb1cf675500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b73ffffffffffffffffffffffffffffffffffffffff83168215610ea95774020000000000000000000000000000000000000000175b610ecf7503fc000000000000000000000000000000000000000060a284901b16826112a4565b73ffffffffffffffffffffffffffffffffffffffff90951660009081526001602052604090209490945550505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610f2357600080fd5b919050565b600060208284031215610f3a57600080fd5b610f4382610eff565b9392505050565b60008060008060808587031215610f6057600080fd5b84359350610f7060208601610eff565b925060408501359150610f8560608601610eff565b905092959194509250565b60008060408385031215610fa357600080fd5b82359150610fb360208401610eff565b90509250929050565b600080600060608486031215610fd157600080fd5b83359250610fe160208501610eff565b9150610fef60408501610eff565b90509250925092565b6000806040838503121561100b57600080fd5b61101483610eff565b9150610fb360208401610eff565b60006020828403121561103457600080fd5b81518015158114610f4357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b808511156110cc57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156110b2576110b2611044565b808516156110bf57918102915b93841c9390800290611078565b509250929050565b6000826110e3575060016103ae565b816110f0575060006103ae565b816001811461110657600281146111105761112c565b60019150506103ae565b60ff84111561112157611121611044565b50506001821b6103ae565b5060208310610133831016604e8410600b841016171561114f575081810a6103ae565b6111598383611073565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561118b5761118b611044565b029392505050565b6000610f4383836110d4565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156111d7576111d7611044565b500290565b600082611212577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b805169ffffffffffffffffffff81168114610f2357600080fd5b600080600080600060a0868803121561124957600080fd5b61125286611217565b945060208601519350604086015192506060860151915061127560808701611217565b90509295509295909350565b60006020828403121561129357600080fd5b815160ff81168114610f4357600080fd5b600082198211156112b7576112b7611044565b50019056fea2646970667358221220e7485a2cb5750973f539ca59d2211008b42bb92b6c49605a53f5d9c88c330fb164736f6c634300080a003360e06040523480156200001157600080fd5b5060405162002ced38038062002ced8339810160408190526200003491620004bb565b6000805460ff19169055806001600160a01b0381166200006757604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cc9190620004bb565b6001600160a01b039081166080526001805560408051808201909152600281526105a360f41b602082015291508216620001245760405162461bcd60e51b81526004016200011b9190620004ed565b60405180910390fd5b50806001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000164573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200018a9190620004bb565b6001600160a01b031660c052604051620001a490620004ad565b604051809103906000f080158015620001c1573d6000803e3d6000fd5b506001600160a01b031660a08190526040805163204a7f0760e21b81529051638129fc1c9160048082019260009290919082900301818387803b1580156200020857600080fd5b505af11580156200021d573d6000803e3d6000fd5b50505050620002316200028a60201b60201c565b50600454600380546001600160a01b039092166001600160a01b03199283161790556000805260026020527fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b8054909116905562000545565b6000620002a460a0516200038c60201b6200119b1760201c565b9050806001600160a01b0316638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620002e257600080fd5b505af1158015620002f7573d6000803e3d6000fd5b5050600480546001600160a01b03908116600090815260026020908152604090912080546001600160a01b03199081169388169384179091558354169091179091556200035492506005915083906200043b811b6200127d17901c565b506040516001600160a01b038216907f9f69b6c10f6810213e055b0ba6bc0a4e2603f73c221aad77ea35da819cda7dc390600090a250565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260601b60148201526e5af43d82803e903d91602b57fd5bf360881b60288201526037816000f09150506001600160a01b038116620004365760405162461bcd60e51b815260206004820152601660248201527f455243313136373a20637265617465206661696c65640000000000000000000060448201526064016200011b565b919050565b600062000452836001600160a01b0384166200045b565b90505b92915050565b6000818152600183016020526040812054620004a45750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000455565b50600062000455565b610e788062001e7583390190565b600060208284031215620004ce57600080fd5b81516001600160a01b0381168114620004e657600080fd5b9392505050565b600060208083528351808285015260005b818110156200051c57858101830151858201604001528201620004fe565b818111156200052f576000604083870101525b50601f01601f1916929092016040019392505050565b60805160a05160c0516118cf620005a66000396000818161026a015281816103680152610b7001526000818161020201526110650152600081816102c4015281816105b80152818161099601528181610a840152610e7401526118cf6000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806388f64c54116100cd578063b193976311610081578063d82ecc4811610066578063d82ecc4814610309578063e3ba9ace1461031c578063f23953ab1461032f57600080fd5b8063b1939763146102f9578063b60e85181461030157600080fd5b80638f7dcfa3116100b25780638f7dcfa31461029f578063a50cf2c8146102bf578063a904aab6146102e657600080fd5b806388f64c541461026557806389b77b3e1461028c57600080fd5b806354fd4d50116101245780635da33c5b116101095780635da33c5b146101fd578063765e0159146102245780638456cb591461025d57600080fd5b806354fd4d50146101d05780635c975abb146101e657600080fd5b806313d8c8401461015657806321d18456146101a05780632932472f146101b35780633f4ba83a146101c8575b600080fd5b6004546101769073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6101766101ae366004611651565b610337565b6101c66101c1366004611697565b61058a565b005b6101c6610968565b6101d8600181565b604051908152602001610197565b60005460ff165b6040519015158152602001610197565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101766102323660046116da565b73ffffffffffffffffffffffffffffffffffffffff9081166000908152600260205260409020541690565b6101c6610a56565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101c661029a3660046116da565b610b42565b6003546101769073ffffffffffffffffffffffffffffffffffffffff1681565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101c66102f4366004611697565b610e46565b6101d8610fb8565b6101d8611033565b6101ed6103173660046116da565b611044565b61017661032a3660046116f5565b611051565b6101c661105e565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa1580156103c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103e8919061170e565b6040518060400160405280600281526020017f43500000000000000000000000000000000000000000000000000000000000008152509061045f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b60405180910390fd5b506104686112a6565b6003805473ffffffffffffffffffffffffffffffffffffffff8082166000818152600260205260409081902080549093167fffffffffffffffffffffffff0000000000000000000000000000000000000000948516179094558154909216905590517fc75b5a710000000000000000000000000000000000000000000000000000000081523360048201526024810185905260448101849052819063c75b5a7190606401600060405180830381600087803b15801561052657600080fd5b505af115801561053a573d6000803e3d6000fd5b505060405133925073ffffffffffffffffffffffffffffffffffffffff841691507ff3ede7039176503a8ad1fe7cfaa29475a9dbe0cdcaf04ecf9a5c10570c47b10390600090a390505b92915050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610614573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610638919061170e565b61066e576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106766112a6565b60035473ffffffffffffffffffffffffffffffffffffffff838116911614156106fa576003805473ffffffffffffffffffffffffffffffffffffffff808216600090815260026020526040902080549091167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092558154169055610865565b73ffffffffffffffffffffffffffffffffffffffff838116600090815260026020908152604091829020548251808401909352600383527f4146330000000000000000000000000000000000000000000000000000000000918301919091529091848116911614610798576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b5060045473ffffffffffffffffffffffffffffffffffffffff838116911614156107fd57600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85161790555b73ffffffffffffffffffffffffffffffffffffffff828116600081815260026020526040808220805488861684529183208054929095167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790945591905281541690555b6040517fc75b5a7100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600060248301819052604483015283169063c75b5a7190606401600060405180830381600087803b1580156108dc57600080fd5b505af11580156108f0573d6000803e3d6000fd5b505050506109088260056112dd90919063ffffffff16565b508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f25e267469ba2ae82515be7b3d45df60bf8308343f0809e8cf7319058e2255ce660405160405180910390a3505050565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156109f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a16919061170e565b610a4c576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a546112ff565b565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015610ae0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b04919061170e565b610b3a576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a546113e0565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa158015610bcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf0919061170e565b6040518060400160405280600281526020017f435000000000000000000000000000000000000000000000000000000000000081525090610c5e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b50610c6a6005826114a0565b6040518060400160405280600381526020017f414634000000000000000000000000000000000000000000000000000000000081525090610cd8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b50438173ffffffffffffffffffffffffffffffffffffffff16633dc54b406040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4991906117a3565b14156040518060400160405280600381526020017f414631000000000000000000000000000000000000000000000000000000000081525090610db9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b506004805473ffffffffffffffffffffffffffffffffffffffff90811660009081526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081169487169485179091558454168317909355915190917fced6ab9afc868b3a088366f6631ae20752993b5cce5d5f0534ea5a59fcc57d5691a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610ed0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef4919061170e565b610f2a576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f19a1603900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301528416906319a1603990604401600060405180830381600087803b158015610f9b57600080fd5b505af1158015610faf573d6000803e3d6000fd5b50505050505050565b600354600090819073ffffffffffffffffffffffffffffffffffffffff165b73ffffffffffffffffffffffffffffffffffffffff81161561102d5773ffffffffffffffffffffffffffffffffffffffff9081166000908152600260205260409020541681611025816117eb565b925050610fd7565b50919050565b600061103f60056114cf565b905090565b60006105846005836114a0565b60006105846005836114d9565b60006110897f000000000000000000000000000000000000000000000000000000000000000061119b565b90508073ffffffffffffffffffffffffffffffffffffffff16638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156110d357600080fd5b505af11580156110e7573d6000803e3d6000fd5b50506004805473ffffffffffffffffffffffffffffffffffffffff908116600090815260026020526040902080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811692871692831790915582541617905550611156905060058261127d565b5060405173ffffffffffffffffffffffffffffffffffffffff8216907f9f69b6c10f6810213e055b0ba6bc0a4e2603f73c221aad77ea35da819cda7dc390600090a250565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260601b60148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f091505073ffffffffffffffffffffffffffffffffffffffff8116611278576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f455243313136373a20637265617465206661696c6564000000000000000000006044820152606401610456565b919050565b600061129f8373ffffffffffffffffffffffffffffffffffffffff84166114e5565b9392505050565b60035473ffffffffffffffffffffffffffffffffffffffff90811660009081526002602052604090205416610a5457610a5461105e565b600061129f8373ffffffffffffffffffffffffffffffffffffffff8416611534565b60005460ff1661136b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610456565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff161561144d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610456565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586113b63390565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600183016020526040812054151561129f565b6000610584825490565b600061129f8383611627565b600081815260018301602052604081205461152c57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610584565b506000610584565b6000818152600183016020526040812054801561161d576000611558600183611824565b855490915060009061156c90600190611824565b90508181146115d157600086600001828154811061158c5761158c61183b565b90600052602060002001549050808760000184815481106115af576115af61183b565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806115e2576115e261186a565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610584565b6000915050610584565b600082600001828154811061163e5761163e61183b565b9060005260206000200154905092915050565b6000806040838503121561166457600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff8116811461127857600080fd5b6000806000606084860312156116ac57600080fd5b6116b584611673565b92506116c360208501611673565b91506116d160408501611673565b90509250925092565b6000602082840312156116ec57600080fd5b61129f82611673565b60006020828403121561170757600080fd5b5035919050565b60006020828403121561172057600080fd5b8151801515811461129f57600080fd5b600060208083528351808285015260005b8181101561175d57858101830151858201604001528201611741565b8181111561176f576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b6000602082840312156117b557600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561181d5761181d6117bc565b5060010190565b600082821015611836576118366117bc565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220f1e9c81b8c3af2491c907ee66cf24e1bb76111b821db02df8f98dbb48b5ab5fa64736f6c634300080a0033608060405234801561001057600080fd5b50610e58806100206000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c806354fd4d5011610081578063c45a01551161005b578063c45a0155146101a4578063c75b5a71146101ca578063d1660f99146101dd57600080fd5b806354fd4d501461014f5780638129fc1c14610157578063c12c21c01461015f57600080fd5b80631afbb7a4116100b25780631afbb7a41461011d5780631cff79cd146101265780633dc54b401461014657600080fd5b806316128211146100d957806317d11a15146100ee57806319a160391461010a575b600080fd5b6100ec6100e7366004610b42565b6101f0565b005b6100f760035481565b6040519081526020015b60405180910390f35b6100ec610118366004610b8d565b61024c565b6100f760025481565b610139610134366004610bef565b6102c9565b6040516101019190610d49565b6100f760045481565b6100f7600181565b6100ec610344565b60015461017f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610101565b60005461017f9062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b6100ec6101d8366004610d5c565b610494565b6100ec6101eb366004610d8f565b61053d565b60015473ffffffffffffffffffffffffffffffffffffffff163314610241576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600291909155600355565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1633146102a3576040517fb126b84800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102c573ffffffffffffffffffffffffffffffffffffffff83168260006105b4565b5050565b60015460609073ffffffffffffffffffffffffffffffffffffffff16331461031d576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033d73ffffffffffffffffffffffffffffffffffffffff8416836107b4565b9392505050565b600054610100900460ff1661035f5760005460ff1615610363565b303b155b6103f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600054610100900460ff1615801561043357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000166101011790555b600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16336201000002179055801561049157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b50565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1633146104eb576040517fb126b84800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff949094169390931790925560025560035543600455565b60015473ffffffffffffffffffffffffffffffffffffffff16331461058e576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105af73ffffffffffffffffffffffffffffffffffffffff841683836107f6565b505050565b80158061065457506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015284169063dd62ed3e90604401602060405180830381865afa15801561062e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106529190610dcb565b155b6106e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e63650000000000000000000060648201526084016103eb565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526105af9084907f095ea7b300000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261084c565b606061033d83836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250610958565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526105af9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401610732565b60006108ae826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166109589092919063ffffffff16565b8051909150156105af57808060200190518101906108cc9190610de4565b6105af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016103eb565b6060610967848460008561096f565b949350505050565b606082471015610a01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016103eb565b843b610a69576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016103eb565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051610a929190610e06565b60006040518083038185875af1925050503d8060008114610acf576040519150601f19603f3d011682016040523d82523d6000602084013e610ad4565b606091505b5091509150610ae4828286610aef565b979650505050505050565b60608315610afe57508161033d565b825115610b0e5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103eb9190610d49565b60008060408385031215610b5557600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff81168114610b8857600080fd5b919050565b60008060408385031215610ba057600080fd5b610ba983610b64565b9150610bb760208401610b64565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215610c0257600080fd5b610c0b83610b64565b9150602083013567ffffffffffffffff80821115610c2857600080fd5b818501915085601f830112610c3c57600080fd5b813581811115610c4e57610c4e610bc0565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715610c9457610c94610bc0565b81604052828152886020848701011115610cad57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b83811015610cea578181015183820152602001610cd2565b83811115610cf9576000848401525b50505050565b60008151808452610d17816020860160208601610ccf565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061033d6020830184610cff565b600080600060608486031215610d7157600080fd5b610d7a84610b64565b95602085013595506040909401359392505050565b600080600060608486031215610da457600080fd5b610dad84610b64565b9250610dbb60208501610b64565b9150604084013590509250925092565b600060208284031215610ddd57600080fd5b5051919050565b600060208284031215610df657600080fd5b8151801515811461033d57600080fd5b60008251610e18818460208701610ccf565b919091019291505056fea2646970667358221220448e7046078cd668c09328d857e534e2aab6cdc0e691d3d4f2c8baae8e084b1364736f6c634300080a003360c06040523480156200001157600080fd5b506040516200162738038062001627833981016040819052620000349162000177565b60408051808201909152600281526105a360f41b60208201526001600160a01b038216620000805760405162461bcd60e51b8152600401620000779190620001a9565b60405180910390fd5b50806001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e6919062000177565b6001600160a01b03166080816001600160a01b031681525050806001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200013e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000164919062000177565b6001600160a01b031660a0525062000201565b6000602082840312156200018a57600080fd5b81516001600160a01b0381168114620001a257600080fd5b9392505050565b600060208083528351808285015260005b81811015620001d857858101830151858201604001528201620001ba565b81811115620001eb576000604083870101525b50601f01601f1916929092016040019392505050565b60805160a0516113c2620002656000396000818161021f0152818161036401526106d501526000818160af0152818161012a015281816104420152818161056e015281816107b301528181610aa601528181610b890152610c6701526113c26000f3fe60806040526004361061005e5760003560e01c80635869dba8116100435780635869dba814610199578063deecfbc9146101bb578063e79a4089146101ce57600080fd5b80634f0e0ef31461011857806354fd4d501461017657600080fd5b366101135760408051808201909152600381527f574732000000000000000000000000000000000000000000000000000000000060208201523373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b60405180910390fd5b50005b600080fd5b34801561012457600080fd5b5061014c7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561018257600080fd5b5061018b600181565b60405190815260200161016d565b3480156101a557600080fd5b506101b96101b4366004611263565b6101ee565b005b6101b96101c936600461128f565b61031d565b3480156101da57600080fd5b506101b96101e93660046112e1565b61068e565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201819052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa15801561027b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061029f9190611318565b6040518060400160405280600281526020017f43500000000000000000000000000000000000000000000000000000000000008152509061030d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b506103188383610a77565b505050565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808516600483015284917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa1580156103ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103d19190611318565b6040518060400160405280600281526020017f52500000000000000000000000000000000000000000000000000000000000008152509061043f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e6919061133a565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600381526020017f57473100000000000000000000000000000000000000000000000000000000008152509061056b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156105d457600080fd5b505af11580156105e8573d6000803e3d6000fd5b50505050506105f78434610b3c565b6040517f9aa5d46200000000000000000000000000000000000000000000000000000000815234600482015273ffffffffffffffffffffffffffffffffffffffff848116602483015261ffff84166044830152851690639aa5d46290606401600060405180830381600087803b15801561067057600080fd5b505af1158015610684573d6000803e3d6000fd5b5050505050505050565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808516600483015284917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa15801561071e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107429190611318565b6040518060400160405280600281526020017f5250000000000000000000000000000000000000000000000000000000000000815250906107b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610833573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610857919061133a565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600381526020017f5747310000000000000000000000000000000000000000000000000000000000815250906108dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b506109703330858773ffffffffffffffffffffffffffffffffffffffff166336dda7d56040518163ffffffff1660e01b8152600401602060405180830381865afa15801561092e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610952919061133a565b73ffffffffffffffffffffffffffffffffffffffff16929190610cd4565b6040517f05fe138b0000000000000000000000000000000000000000000000000000000081526004810184905230602482015260009073ffffffffffffffffffffffffffffffffffffffff8616906305fe138b906044016020604051808303816000875af11580156109e6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0a9190611357565b9050610a168382610a77565b8273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f6de63bb986f2779478e384365c03cc2e62f06b453856acca87d5a519ce02664960405160405180910390a35050505050565b6040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632e1a7d4d90602401600060405180830381600087803b158015610aff57600080fd5b505af1158015610b13573d6000803e3d6000fd5b50610b389250505073ffffffffffffffffffffffffffffffffffffffff831682610d6f565b5050565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015282917f00000000000000000000000000000000000000000000000000000000000000009091169063dd62ed3e90604401602060405180830381865afa158015610bd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf69190611357565b1015610b38576040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303816000875af1158015610cb0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103189190611318565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052610d69908590610ec9565b50505050565b80471015610dd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610107565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114610e33576040519150601f19603f3d011682016040523d82523d6000602084013e610e38565b606091505b5050905080610318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610107565b6000610f2b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16610fd59092919063ffffffff16565b8051909150156103185780806020019051810190610f499190611318565b610318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610107565b6060610fe48484600085610fee565b90505b9392505050565b606082471015611080576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610107565b843b6110e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610107565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516111119190611370565b60006040518083038185875af1925050503d806000811461114e576040519150601f19603f3d011682016040523d82523d6000602084013e611153565b606091505b509150915061116382828661116e565b979650505050505050565b6060831561117d575081610fe7565b82511561118d5782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b60005b838110156111dc5781810151838201526020016111c4565b83811115610d695750506000910152565b602081526000825180602084015261120c8160408501602087016111c1565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461126057600080fd5b50565b6000806040838503121561127657600080fd5b82356112818161123e565b946020939093013593505050565b6000806000606084860312156112a457600080fd5b83356112af8161123e565b925060208401356112bf8161123e565b9150604084013561ffff811681146112d657600080fd5b809150509250925092565b6000806000606084860312156112f657600080fd5b83356113018161123e565b92506020840135915060408401356112d68161123e565b60006020828403121561132a57600080fd5b81518015158114610fe757600080fd5b60006020828403121561134c57600080fd5b8151610fe78161123e565b60006020828403121561136957600080fd5b5051919050565b600082516113828184602087016111c1565b919091019291505056fea264697066735822122017fd7fc76e4a1efcf24b78a3417fad7ab9576f0a23aa756ddb211c5e2227aa9564736f6c634300080a003360806040523480156200001157600080fd5b5060405162002b8038038062002b80833981016040819052620000349162000122565b6001600160a01b0381166200008f5760405162461bcd60e51b815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640160405180910390fd5b6001600160a01b03811660008181526001602052604080822080546001600160601b0319166b204fce5e3e2502611000000090811790915590517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91620000f99190815260200190565b60405180910390a350600680546001600160a81b031916336101000260ff191617905562000154565b6000602082840312156200013557600080fd5b81516001600160a01b03811681146200014d57600080fd5b9392505050565b612a1c80620001646000396000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c806370a08231116100f9578063b4b5ea5711610097578063dd62ed3e11610071578063dd62ed3e14610503578063e7a324dc14610555578063f1127ed81461057c578063f2fde38b146105ee57600080fd5b8063b4b5ea57146104ca578063c3cda520146104dd578063d505accf146104f057600080fd5b806395d89b41116100d357806395d89b411461045b5780639742ca4614610497578063a9059cbb146104aa578063b0660c3d146104bd57600080fd5b806370a08231146103c7578063782d6fe11461040b5780637ecebe001461043b57600080fd5b806330adf81f11610166578063481c6a7511610140578063481c6a751461031e578063587cde1e146103435780635c19a95c146103795780636fcfff451461038c57600080fd5b806330adf81f14610298578063313ce567146102bf578063349dc329146102d957600080fd5b806320606b701161019757806320606b70146102545780632185810b1461027b57806323b872dd1461028557600080fd5b806306fdde03146101be578063095ea7b31461021057806318160ddd14610233575b600080fd5b6101fa6040518060400160405280600781526020017f47656172626f780000000000000000000000000000000000000000000000000081525081565b60405161020791906124a3565b60405180910390f35b61022361021e36600461253f565b610601565b6040519015158152602001610207565b6102466b204fce5e3e2502611000000081565b604051908152602001610207565b6102467f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b61028361070d565b005b610223610293366004612569565b6107ee565b6102467f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b6102c7601281565b60405160ff9091168152602001610207565b6007546102f99073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610207565b6006546102f990610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6102f96103513660046125a5565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6102836103873660046125a5565b61098a565b6103b261039a3660046125a5565b60046020526000908152604090205463ffffffff1681565b60405163ffffffff9091168152602001610207565b6102466103d53660046125a5565b73ffffffffffffffffffffffffffffffffffffffff166000908152600160205260409020546bffffffffffffffffffffffff1690565b61041e61041936600461253f565b610997565b6040516bffffffffffffffffffffffff9091168152602001610207565b6102466104493660046125a5565b60056020526000908152604090205481565b6101fa6040518060400160405280600481526020017f474541520000000000000000000000000000000000000000000000000000000081525081565b6102836104a53660046125a5565b610cae565b6102236104b836600461253f565b610e20565b6006546102239060ff1681565b61041e6104d83660046125a5565b610e5c565b6102836104eb3660046125d1565b610efa565b6102836104fe366004612629565b611310565b610246610511366004612693565b73ffffffffffffffffffffffffffffffffffffffff9182166000908152602081815260408083209390941682529190915220546bffffffffffffffffffffffff1690565b6102467fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b6105c561058a3660046126c6565b600360209081526000928352604080842090915290825290205463ffffffff81169064010000000090046bffffffffffffffffffffffff1682565b6040805163ffffffff90931683526bffffffffffffffffffffffff909116602083015201610207565b6102836105fc3660046125a5565b61187a565b6000807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83141561063f57506bffffffffffffffffffffffff610664565b6106618360405180606001604052806025815260200161285260259139611a15565b90505b3360008181526020818152604080832073ffffffffffffffffffffffffffffffffffffffff89168085529083529281902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff871690811790915590519081529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a360019150505b92915050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314610798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e616765720060448201526064015b60405180910390fd5b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f795b0e16c8da9807b0a215f3749bd6dbcc49fc0472183f4e446abb7dcbd9d00790600090a1565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081815260408083203380855290835281842054825160608101909352602580845291936bffffffffffffffffffffffff909116928592610856928892919061285290830139611a15565b90508673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156108a257506bffffffffffffffffffffffff82811614155b156109725760006108cc83836040518060600160405280603d8152602001612974603d9139611a67565b73ffffffffffffffffffffffffffffffffffffffff898116600081815260208181526040808320948a168084529482529182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff87169081179091559151918252939450919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505b61097d878783611ad5565b5060019695505050505050565b6109943382611e9c565b50565b6000438210610a28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f476561723a3a6765745072696f72566f7465733a206e6f74207965742064657460448201527f65726d696e656400000000000000000000000000000000000000000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff831660009081526004602052604090205463ffffffff1680610a63576000915050610707565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604081208491610a95600185612735565b63ffffffff90811682526020820192909252604001600020541611610b1b5773ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812090610ae5600184612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff1691506107079050565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020908152604080832083805290915290205463ffffffff16831015610b63576000915050610707565b600080610b71600184612735565b90505b8163ffffffff168163ffffffff161115610c565760006002610b968484612735565b610ba0919061275a565b610baa9083612735565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260036020908152604080832063ffffffff8581168552908352928190208151808301909252549283168082526401000000009093046bffffffffffffffffffffffff1691810191909152919250871415610c2a576020015194506107079350505050565b805163ffffffff16871115610c4157819350610c4f565b610c4c600183612735565b92505b5050610b74565b5073ffffffffffffffffffffffffffffffffffffffff8516600090815260036020908152604080832063ffffffff909416835292905220546bffffffffffffffffffffffff6401000000009091041691505092915050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314610d34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e6167657200604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff8116610db1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640161078f565b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f2f834d1c8c4b956018fff5faca4d99868ae635487424d9c265c257ccbc698c6a90600090a250565b600080610e45836040518060600160405280602681526020016128a760269139611a15565b9050610e52338583611ad5565b5060019392505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526004602052604081205463ffffffff1680610e94576000610ef3565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812090610ec5600184612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b9392505050565b604080518082018252600781527f47656172626f780000000000000000000000000000000000000000000000000060209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f028ef9f797075f74ac647c65fde04fb0f128c2d59fd40f45732269917642fd4681840152466060820152306080808301919091528351808303909101815260a0820184528051908301207fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60c083015273ffffffffffffffffffffffffffffffffffffffff8a1660e08301526101008201899052610120808301899052845180840390910181526101408301909452835193909201929092207f19010000000000000000000000000000000000000000000000000000000000006101608401526101628301829052610182830181905290916000906101a201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa1580156110d8573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166111a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f476561723a3a64656c656761746542795369673a20696e76616c69642073696760448201527f6e61747572650000000000000000000000000000000000000000000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff811660009081526005602052604081208054916111d7836127a4565b919050558914611269576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f476561723a3a64656c656761746542795369673a20696e76616c6964206e6f6e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161078f565b874211156112f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f476561723a3a64656c656761746542795369673a207369676e6174757265206560448201527f7870697265640000000000000000000000000000000000000000000000000000606482015260840161078f565b611303818b611e9c565b505050505b505050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86141561134d57506bffffffffffffffffffffffff611372565b61136f8660405180606001604052806024815260200161291c60249139611a15565b90505b604080518082018252600781527f47656172626f780000000000000000000000000000000000000000000000000060209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f028ef9f797075f74ac647c65fde04fb0f128c2d59fd40f45732269917642fd4681840152466060820152306080808301919091528351808303909101815260a0909101835280519082012073ffffffffffffffffffffffffffffffffffffffff8b166000908152600590925291812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918c918c918c919086611472836127a4565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810188905260e001604051602081830303815290604052805190602001209050600082826040516020016115199291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff8b169284019290925260608301899052608083018890529092509060019060a0016020604051602081039080840390855afa1580156115a2573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661164a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a7065726d69743a20696e76616c6964207369676e617475726500604482015260640161078f565b8b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146116df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f476561723a3a7065726d69743a20756e617574686f72697a6564000000000000604482015260640161078f565b88421115611749576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a7065726d69743a207369676e6174757265206578706972656400604482015260640161078f565b846000808e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508a73ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258760405161186491906bffffffffffffffffffffffff91909116815260200190565b60405180910390a3505050505050505050505050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314611900576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e6167657200604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff811661197d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640161078f565b60065460405173ffffffffffffffffffffffffffffffffffffffff80841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36006805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b6000816c010000000000000000000000008410611a5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b509192915050565b6000836bffffffffffffffffffffffff16836bffffffffffffffffffffffff1611158290611ac2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b50611acd83856127dd565b949350505050565b60065460ff1680611b025750600654610100900473ffffffffffffffffffffffffffffffffffffffff1633145b80611b24575060075473ffffffffffffffffffffffffffffffffffffffff1633145b611b8a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f476561723a3a7472616e73666572732061726520666f7262696464656e000000604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff8316611c2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603c60248201527f476561723a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260448201527f616e736665722066726f6d20746865207a65726f206164647265737300000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff8216611cd0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f476561723a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260448201527f616e7366657220746f20746865207a65726f2061646472657373000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260016020908152604091829020548251606081019093526036808452611d2d936bffffffffffffffffffffffff90921692859291906129b190830139611a67565b73ffffffffffffffffffffffffffffffffffffffff848116600090815260016020908152604080832080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff968716179055928616825290829020548251606081019093526030808452611dbf949190911692859290919061287790830139611f50565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260409182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff968716179055905193851684529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a373ffffffffffffffffffffffffffffffffffffffff808416600090815260026020526040808220548584168352912054611e9792918216911683611fc1565b505050565b73ffffffffffffffffffffffffffffffffffffffff808316600081815260026020818152604080842080546001845282862054949093528787167fffffffffffffffffffffffff000000000000000000000000000000000000000084168117909155905191909516946bffffffffffffffffffffffff9092169391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4611f4a828483611fc1565b50505050565b600080611f5d8486612802565b9050846bffffffffffffffffffffffff16816bffffffffffffffffffffffff1610158390611fb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b50949350505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561200b57506000816bffffffffffffffffffffffff16115b15611e975773ffffffffffffffffffffffffffffffffffffffff8316156120fd5773ffffffffffffffffffffffffffffffffffffffff831660009081526004602052604081205463ffffffff1690816120655760006120c4565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812090612096600185612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b905060006120eb82856040518060600160405280602881526020016128cd60289139611a67565b90506120f9868484846121e2565b5050505b73ffffffffffffffffffffffffffffffffffffffff821615611e975773ffffffffffffffffffffffffffffffffffffffff821660009081526004602052604081205463ffffffff1690816121525760006121b1565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812090612183600185612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b905060006121d882856040518060600160405280602781526020016128f560279139611f50565b9050611308858484845b60006122064360405180606001604052806034815260200161294060349139612465565b905060008463ffffffff1611801561226d575073ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812063ffffffff831691612251600188612735565b63ffffffff908116825260208201929092526040016000205416145b156123035773ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812083916122a4600188612735565b63ffffffff168152602081019190915260400160002080546bffffffffffffffffffffffff92909216640100000000027fffffffffffffffffffffffffffffffff000000000000000000000000ffffffff9092169190911790556123fe565b60408051808201825263ffffffff80841682526bffffffffffffffffffffffff808616602080850191825273ffffffffffffffffffffffffffffffffffffffff8b166000908152600382528681208b8616825290915294909420925183549451909116640100000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009094169116179190911790556123a5846001612832565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260046020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff929092169190911790555b604080516bffffffffffffffffffffffff80861682528416602082015273ffffffffffffffffffffffffffffffffffffffff8716917fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724910160405180910390a25050505050565b6000816401000000008410611a5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91905b600060208083528351808285015260005b818110156124d0578581018301518582016040015282016124b4565b818111156124e2576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461253a57600080fd5b919050565b6000806040838503121561255257600080fd5b61255b83612516565b946020939093013593505050565b60008060006060848603121561257e57600080fd5b61258784612516565b925061259560208501612516565b9150604084013590509250925092565b6000602082840312156125b757600080fd5b610ef382612516565b803560ff8116811461253a57600080fd5b60008060008060008060c087890312156125ea57600080fd5b6125f387612516565b9550602087013594506040870135935061260f606088016125c0565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a03121561264457600080fd5b61264d88612516565b965061265b60208901612516565b95506040880135945060608801359350612677608089016125c0565b925060a0880135915060c0880135905092959891949750929550565b600080604083850312156126a657600080fd5b6126af83612516565b91506126bd60208401612516565b90509250929050565b600080604083850312156126d957600080fd5b6126e283612516565b9150602083013563ffffffff811681146126fb57600080fd5b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600063ffffffff8381169083168181101561275257612752612706565b039392505050565b600063ffffffff80841680612798577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156127d6576127d6612706565b5060010190565b60006bffffffffffffffffffffffff8381169083168181101561275257612752612706565b60006bffffffffffffffffffffffff80831681851680830382111561282957612829612706565b01949350505050565b600063ffffffff8083168185168083038211156128295761282961270656fe476561723a3a617070726f76653a20616d6f756e7420657863656564732039362062697473476561723a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e74206f766572666c6f7773476561723a3a7472616e736665723a20616d6f756e7420657863656564732039362062697473476561723a3a5f6d6f7665566f7465733a20766f746520616d6f756e7420756e646572666c6f7773476561723a3a5f6d6f7665566f7465733a20766f746520616d6f756e74206f766572666c6f7773476561723a3a7065726d69743a20616d6f756e7420657863656564732039362062697473476561723a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d62657220657863656564732033322062697473476561723a3a7472616e7366657246726f6d3a207472616e7366657220616d6f756e742065786365656473207370656e64657220616c6c6f77616e6365476561723a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e7420657863656564732062616c616e6365a26469706673582212201b84fd7789a35c022f692420863210a30e82d2405659f5a28275d433fa53467f64736f6c634300080a003360806040526016805460ff1916905534801561001a57600080fd5b506040516110a73803806110a7833981016040819052610039916100b6565b600080546001600160a01b038085166001600160a01b0319928316179092556003805492841692909116919091179055610080600a6b033b2e3c9fd0803ce80000006100e9565b60075550506b033b2e3c9fd0803ce800000060155561010b565b80516001600160a01b03811681146100b157600080fd5b919050565b600080604083850312156100c957600080fd5b6100d28361009a565b91506100e06020840161009a565b90509250929050565b60008261010657634e487b7160e01b600052601260045260246000fd5b500490565b610f8d8061011a6000396000f3fe608060405234801561001057600080fd5b50600436106102e95760003560e01c806367c99d5811610191578063c5f956af116100e3578063dbcb313b11610097578063f11a648711610071578063f11a648714610320578063f3fdb15a146105f1578063fe14112d1461061157600080fd5b8063dbcb313b146105d6578063e941fa78146105df578063ef8d9603146105e857600080fd5b8063cb3905e1116100c8578063cb3905e1146105c4578063cf33d95514610320578063d0efe753146105cd57600080fd5b8063c5f956af14610588578063ca9505e4146105a857600080fd5b80639aa5d46211610145578063b6ac642a1161011f578063b6ac642a14610567578063bb04b19314610567578063bf28068b1461057557600080fd5b80639aa5d46214610544578063a4e8273e14610557578063b3554a0a1461055e57600080fd5b8063788c6bfe11610176578063788c6bfe146104ef5780638456cb591461050157806396df5dc01461053157600080fd5b806367c99d58146104de57806374375359146104e757600080fd5b806336dda7d51161024a5780634d778ad1116101fe57806354fd4d50116101d857806354fd4d50146104c05780635c975abb146104c8578063609ae317146104d557600080fd5b80634d778ad114610491578063532fe502146104a45780635427c938146104ad57600080fd5b80633f4ba83a1161022f5780633f4ba83a1461045257806345d31f9d1461047f5780634c19386c1461048857600080fd5b806336dda7d51461040f5780633e163df01461042f57600080fd5b80632495a599116102a157806329f3d3b61161028657806329f3d3b6146103b35780632a3354c9146103bc5780632e97ca21146103dc57600080fd5b80632495a599146103735780632954018c1461039357600080fd5b8063078c4781116102d2578063078c4781146103205780630fce70fb146103335780631e16e4fc1461033b57600080fd5b8063030dbb04146102ee57806305fe138b1461030a575b600080fd5b6102f760105481565b6040519081526020015b60405180910390f35b6102f7610318366004610ce8565b600092915050565b61033161032e366004610d14565b50565b005b6015546102f7565b61034e610349366004610d2f565b610618565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610301565b60035461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b60005461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6102f760095481565b600a5461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103ff6103ea366004610d14565b60066020526000908152604090205460ff1681565b6040519015158152602001610301565b60055461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103ff61043d366004610d14565b60146020526000908152604090205460ff1681565b610331601680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b6102f760075481565b6102f760015481565b6102f761049f366004610d2f565b61064f565b6102f760115481565b6102f76104bb366004610d2f565b61066d565b6102f7600181565b6016546103ff9060ff1681565b6102f760085481565b6102f7600d5481565b6102f7610685565b6b033b2e3c9fd0803ce80000006102f7565b610331601680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b61033161053f366004610d2f565b601555565b610331610552366004610d48565b505050565b60016102f7565b6102f7600e5481565b61033161032e366004610d2f565b610331610583366004610ce8565b61071d565b60135461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103316105b6366004610d7d565b600b92909255600c55600d55565b6102f7600c5481565b6102f7600b5481565b6102f760155481565b6102f7600f5481565b6102f760025481565b60125461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b60006102f7565b6004818154811061062857600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6000610667826b033b2e3c9fd0803ce800000061077a565b92915050565b6000610667826b033b2e3c9fd0803ce80000006108e9565b6003546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156106f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107189190610da9565b905090565b6009829055600a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691909117909155600354610776911682846109fe565b5050565b60408051808201909152600281527f4d330000000000000000000000000000000000000000000000000000000000006020820152600090826107f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b60405180910390fd5b506000610800600284610e72565b90506b033b2e3c9fd0803ce8000000610839827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610ead565b6108439190610e72565b8411156040518060400160405280600281526020017f4d31000000000000000000000000000000000000000000000000000000000000815250906108b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b5082816108cd6b033b2e3c9fd0803ce800000087610ec4565b6108d79190610f01565b6108e19190610e72565b949350505050565b60008215806108f6575081155b1561090357506000610667565b8161091b60026b033b2e3c9fd0803ce8000000610e72565b610945907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610ead565b61094f9190610e72565b8311156040518060400160405280600281526020017f4d31000000000000000000000000000000000000000000000000000000000000815250906109c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b506b033b2e3c9fd0803ce80000006109d9600282610e72565b6109e38486610ec4565b6109ed9190610f01565b6109f79190610e72565b9392505050565b6040805173ffffffffffffffffffffffffffffffffffffffff848116602483015260448083018590528351808403909101815260649092018352602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65649084015261055292869291600091610ac9918516908490610b73565b8051909150156105525780806020019051810190610ae79190610f19565b610552576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016107e9565b60606108e1848460008585843b610be6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107e9565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051610c0f9190610f3b565b60006040518083038185875af1925050503d8060008114610c4c576040519150601f19603f3d011682016040523d82523d6000602084013e610c51565b606091505b5091509150610c61828286610c6c565b979650505050505050565b60608315610c7b5750816109f7565b825115610c8b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ce357600080fd5b919050565b60008060408385031215610cfb57600080fd5b82359150610d0b60208401610cbf565b90509250929050565b600060208284031215610d2657600080fd5b6109f782610cbf565b600060208284031215610d4157600080fd5b5035919050565b600080600060608486031215610d5d57600080fd5b83359250610d6d60208501610cbf565b9150604084013590509250925092565b600080600060608486031215610d9257600080fd5b505081359360208301359350604090920135919050565b600060208284031215610dbb57600080fd5b5051919050565b60005b83811015610ddd578181015183820152602001610dc5565b83811115610dec576000848401525b50505050565b6020815260008251806020840152610e11816040850160208701610dc2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082610ea8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600082821015610ebf57610ebf610e43565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610efc57610efc610e43565b500290565b60008219821115610f1457610f14610e43565b500190565b600060208284031215610f2b57600080fd5b815180151581146109f757600080fd5b60008251610f4d818460208701610dc2565b919091019291505056fea26469706673582212204edb887d94928b3914f60ab48df0182da9eb30ddbb7021b164cc728b60a655d564736f6c634300080a00336101606040526000805462ff00001916620c00001790553480156200002357600080fd5b50604051620058e8380380620058e8833981016040819052620000469162000537565b806001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000085573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ab919062000537565b6000805460ff191690556001600160a01b038116620000dd57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200011c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000142919062000537565b6001600160a01b03166080816001600160a01b031681525050506000816001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200019d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c3919062000537565b6001600160a01b03831661010081905260e081905260408051632495a59960e01b81529051929350600092632495a599916004808201926020929091908290030181865afa1580156200021a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000240919062000537565b6001600160a01b03811660c05290506200025a8162000472565b816001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000299573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002bf919062000537565b6001600160a01b0316610120816001600160a01b031681525050816001600160a01b03166377532ed96040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000318573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033e919062000537565b6001600160a01b0316610140816001600160a01b031681525050816001600160a01b031663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000397573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003bd919062000537565b6001600001600a6101000a8154816001600160a01b0302191690836001600160a01b03160217905550816001600160a01b0316639068a8686040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000425573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044b919062000537565b6001600160a01b031660a0525050600380546001600160a01b031916331790555062000588565b6001600160a01b03811660009081526006602052604090205415620004aa57604051632e5a5c7760e01b815260040160405180910390fd5b61010060055410620004cf57604051631cbbe18560e01b815260040160405180910390fd5b600580546001600160a01b0383166000818152600660209081526040808320600190951b948590558483526004909152812091909155825491929062000515836200055e565b91905055505050565b6001600160a01b03811681146200053457600080fd5b50565b6000602082840312156200054a57600080fd5b815162000557816200051e565b9392505050565b60006000198214156200058157634e487b7160e01b600052601160045260246000fd5b5060010190565b60805160a05160c05160e051610100516101205161014051615248620006a0600039600081816107e20152818161371001526137c501526000818161052f01526136780152600081816103d301528181610e5701528181610ebb015281816124ff0152818161265a01528181612aa101528181612b8c01528181612c4e01528181612d0d0152613b8f015260006105a401526000818161062701528181610d2201528181610db301528181610e0001528181610e3601528181610f3f0152818161203a01528181612b6b015281816130ee015281816134dc015281816135a90152613fe601526000818161081c01528181610fe101526124c20152600081816107a80152818161118401526122cb01526152486000f3fe608060405234801561001057600080fd5b50600436106103415760003560e01c8063830aa745116101bd578063a70bc542116100f9578063e75538c7116100a2578063f9aa028a1161007c578063f9aa028a1461089d578063fdd57645146108bd578063fe47cde7146108f3578063ff6875431461091357600080fd5b8063e75538c714610864578063e958b70414610877578063f67c5bd01461088a57600080fd5b8063db7ceb80116100d3578063db7ceb8014610817578063dc2b21c11461083e578063e1998cf91461085157600080fd5b8063a70bc542146107ca578063c5e10eef146107dd578063d48bfca71461080457600080fd5b806394cf073a116101665780639f5f86ae116101405780639f5f86ae146107745780639fd12b7714610787578063a366f49614610790578063a50cf2c8146107a357600080fd5b806394cf073a146106f557806395373018146107085780639af1d35a1461071b57600080fd5b80638991b2f1116101975780638991b2f1146106af5780638fe3f93f146106cf578063944ac59f146106e257600080fd5b8063830aa7451461066f5780638345f26e146106825780638456cb59146106a757600080fd5b8063458936f51161028c578063570a7af2116102355780636ce4074a1161020f5780636ce4074a146105ef5780636e98e5e41461060f5780636f307dc314610622578063783274381461064957600080fd5b8063570a7af21461059f5780635c975abb146105c6578063654a9eda146105dc57600080fd5b80635063524a116102665780635063524a1461055157806351e3f1601461058457806354fd4d501461059757600080fd5b8063458936f51461050e57806346fb371d146105175780634f0e0ef31461052a57600080fd5b80632630c12f116102ee5780633192195c116102c85780633192195c146104be5780633e8297ca146104e65780633f4ba83a1461050657600080fd5b80632630c12f1461045857806329df0b93146104845780632f7a18811461049757600080fd5b806316f0115b1161031f57806316f0115b146103ce578063172c48c7146103f55780632362a2d81461043757600080fd5b8063055ee9b5146103465780630d8f9cee146103a657806311ca4fc2146103bb575b600080fd5b61037c610354366004614a87565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6103b96103b4366004614aa4565b610949565b005b6103b96103c9366004614aa4565b610a76565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b610408610403366004614add565b610b4e565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835261ffff90911660208301520161039d565b61044a610445366004614b13565b610b66565b60405190815260200161039d565b6001546a0100000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1661037c565b6103b9610492366004614a87565b6110be565b60005461037c906301000000900473ffffffffffffffffffffffffffffffffffffffff1681565b6104d16104cc366004614a87565b611122565b6040805192835260208301919091520161039d565b61044a6104f4366004614a87565b60096020526000908152604090205481565b6103b9611156565b61044a60055481565b6103b9610525366004614b95565b611244565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b61056461055f366004614be6565b61149b565b60408051948552602085019390935291830152606082015260800161039d565b6103b9610592366004614aa4565b611602565b61044a600281565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b60005460ff16604051901515815260200161039d565b6103b96105ea366004614c21565b611703565b6106026105fd366004614d40565b611bbb565b60405161039d9190614e5b565b6103b961061d366004614aa4565b611e8e565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b61065c610657366004614a87565b612036565b60405161ffff909116815260200161039d565b6103b961067d366004614b95565b61210f565b6000546106959062010000900460ff1681565b60405160ff909116815260200161039d565b6103b961229d565b61044a6106bd366004614a87565b60086020526000908152604090205481565b61037c6106dd366004614e6e565b612389565b6103b96106f0366004614ea5565b612718565b61044a610703366004614f0a565b612845565b6103b9610716366004614a87565b612e5a565b6001546040805161ffff808416825262010000840481166020830152640100000000840481169282019290925266010000000000008304821660608201526801000000000000000090920416608082015260a00161039d565b6103b9610782366004614a87565b612f85565b61044a60075481565b6103b961079e366004614add565b613045565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b96107d8366004614f4c565b61309b565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b9610812366004614a87565b613221565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b961084c366004614f81565b61327b565b6103b961085f366004614aa4565b613306565b610408610872366004614add565b6134c9565b61037c610885366004614a87565b613541565b61044a610898366004614a87565b6135a5565b60035461037c9073ffffffffffffffffffffffffffffffffffffffff1681565b61037c6108cb366004614a87565b600b6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b600c5461037c9073ffffffffffffffffffffffffffffffffffffffff1681565b61037c610921366004614a87565b600a6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561099b57506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b156109d2576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff1615610a14576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055610a4a828261362e565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b60035473ffffffffffffffffffffffffffffffffffffffff163314610ac7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805473ffffffffffffffffffffffffffffffffffffffff9384166301000000027fffffffffffffffffff0000000000000000000000000000000000000000ffffff90911617905560018054919092166a0100000000000000000000027fffff0000000000000000000000000000000000000000ffffffffffffffffffff909116179055565b600080610b5d6001841b6134c9565b91509150915091565b6000805460ff1615610bd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064015b60405180910390fd5b600054610100900460ff1615610c1b576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff163314610ca0576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610cab89613541565b90506000806000806000610cbe86611122565b9094509050610ccf8c8e868461149b565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152939b5093985090955093506000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015610d6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8f9190614fa4565b9050610d9b8887614fec565b610da6906001614fec565b811115610de657610de1877f00000000000000000000000000000000000000000000000000000000000000008d60018c8b870303038d61366e565b610e30565b610e3073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168d8960018a8d01869003016138c0565b610e7e877f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000089600061366e565b6040517fca9505e40000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604481018490527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ca9505e490606401600060405180830381600087803b158015610f1457600080fd5b505af1158015610f28573d6000803e3d6000fd5b50505050505050506001841115610f6757610f67837f00000000000000000000000000000000000000000000000000000000000000008d87600061366e565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260086020526040902054861916610f9c8489888461395b565b6040517f89b77b3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f000000000000000000000000000000000000000000000000000000000000000016906389b77b3e90602401600060405180830381600087803b15801561102557600080fd5b505af1158015611039573d6000803e3d6000fd5b50505073ffffffffffffffffffffffffffffffffffffffff909c16600090815260026020526040812080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550929a9950505050505050505050565b6000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314611116576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61111f81613a35565b50565b60008060008061113185613aa6565b91955092509050816111438286615004565b61114d9190615041565b92505050915091565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156111e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611204919061507c565b61123a576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611242613c24565b565b60005460ff16156112b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156112f3576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100178155338152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff9081169084161480159061137457506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b80156113985750600c5473ffffffffffffffffffffffffffffffffffffffff163314155b806113b7575073ffffffffffffffffffffffffffffffffffffffff8316155b156113ee576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113f7826135a5565b61142d576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061143885613541565b9050611448838583856000613d05565b61146c5761145b83858360006001613d05565b5061146a838583856001613d05565b505b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b6001546000908190819081906127109061ffff166114b98888615099565b6114c39190615004565b6114cd9190615041565b6114d79086614fec565b935060018760028111156114ed576114ed6150b0565b1415611587576001546000906127109061151390640100000000900461ffff168b615004565b61151d9190615041565b6001549091506127109061153b9062010000900461ffff168b615004565b6115459190615041565b61154f9086614fec565b94508481111561156657600185820303935061156a565b8094505b85811061157b578585039250611581565b84860391505b506115f7565b600287600281111561159b5761159b6150b0565b14156115f157600154600090612710906115c59068010000000000000000900461ffff168b615004565b6115cf9190615041565b6001549091506127109061153b906601000000000000900461ffff168b615004565b84840391505b945094509450949050565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561165457506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b1561168b576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff16156116cd576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055610a4a8282613ea6565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561175557506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b1561178c576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff16156117ce576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790556118048584613ea6565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152600091908616906370a0823190602401602060405180830381865afa158015611874573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118989190614fa4565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529192506000918616906370a0823190602401602060405180830381865afa15801561190a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192e9190614fa4565b60015490915060009081906a0100000000000000000000900473ffffffffffffffffffffffffffffffffffffffff16635cecbd0e61196c8689615099565b8a6119778988615099565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152600481019390935273ffffffffffffffffffffffffffffffffffffffff918216602484015260448301528a1660648201526084016040805180830381865afa1580156119f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1791906150df565b9150915060018411611a2d57611a2d898961362e565b611a3687612036565b611a449061ffff1682615004565b9050611a4f88612036565b611a5d9061ffff1683615004565b9150818110611a7857611a6f89613a35565b5050505061146c565b73ffffffffffffffffffffffffffffffffffffffff891660009081526009602052604081205483611ab56b033b2e3c9fd0803ce800000085615004565b611abf9190615041565b611ad5906b033b2e3c9fd0803ce8000000615099565b611adf9190614fec565b60015490915061271090611b0a906b033b2e3c9fd0803ce80000009062010000900461ffff16615004565b611b149190615041565b8111611b555773ffffffffffffffffffffffffffffffffffffffff8a166000908152600960205260409020819055611b4b8a613a35565b505050505061146c565b611b5e8a613f56565b50505073ffffffffffffffffffffffffffffffffffffffff871660009081526009602052604090206001905550505050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b6060611bc960005460ff1690565b15611c30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff1615611c72576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100178155338152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff908116908416141580611ce7575073ffffffffffffffffffffffffffffffffffffffff8316155b15611d3d57600c5473ffffffffffffffffffffffffffffffffffffffff163314611d3d576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611d4885613541565b90508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167faed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab0360405160405180910390a36040517f1cff79cd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821690631cff79cd90611df89087908790600401615103565b6000604051808303816000875af1158015611e17573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611e5d9190810190615132565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905595945050505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314611edf576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821615611f4f5773ffffffffffffffffffffffffffffffffffffffff8281166000908152600a6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169183169190911790555b73ffffffffffffffffffffffffffffffffffffffff811615611fbf5773ffffffffffffffffffffffffffffffffffffffff8181166000908152600b6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169184169190911790555b73ffffffffffffffffffffffffffffffffffffffff811673cccccccccccccccccccccccccccccccccccccccc141561203257600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790555b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120ba5750506001547e01000000000000000000000000000000000000000000000000000000000000900461ffff1690565b60006120c5836135a5565b9050806120fe576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612107816134c9565b949350505050565b60005460ff161561217c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156121be576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff163314612243576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61224d8383613ea6565b61226f73ffffffffffffffffffffffffffffffffffffffff83168585846138c0565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555050565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015612327573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061234b919061507c565b612381576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112426142d4565b6000805460ff16156123f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff1615612439576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff1633146124be576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166321d18456857f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612568573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061258c9190614fa4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168152600481019290925260248201526044016020604051808303816000875af11580156125e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061260b91906151a0565b6040517fbf28068b0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff80831660248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063bf28068b90604401600060405180830381600087803b1580156126a057600080fd5b505af11580156126b4573d6000803e3d6000fd5b505050506126c28382614394565b73ffffffffffffffffffffffffffffffffffffffff811660009081526008602052604081206001905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690559392505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314612769576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805461ffff92831668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9484166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff96851664010000000002969096167fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff97851662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000090931694909816939093171794909416949094179190911716919091179055565b6000805460ff16156128b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156128f5576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff16331461297a576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080600061298887613aa6565b925092509250846129a25761299d8684615099565b6129ac565b6129ac8684614fec565b935060008515612b045769021e19e0c9bab24000008510612a15576129d583603689901c615004565b6129e3603686901c84615004565b6129ed9190614fec565b603686901c6129fc8585615004565b612a069190615004565b612a109190615041565b612a52565b612a1f8388615004565b612a298584615004565b612a339190614fec565b85612a3e8585615004565b612a489190615004565b612a529190615041565b6040517fbf28068b0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff8a811660248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063bf28068b90604401600060405180830381600087803b158015612ae757600080fd5b505af1158015612afb573d6000803e3d6000fd5b50505050612d9f565b60008484612b128583615004565b612b1c9190615041565b612b269190615099565b60015490915060009061271090612b419061ffff1684615004565b612b4b9190615041565b905073ffffffffffffffffffffffffffffffffffffffff8a1663d1660f997f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000084612bb6878f614fec565b612bc09190614fec565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b158015612c3457600080fd5b505af1158015612c48573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ca9505e4838b612c949190614fec565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815260048101919091526024810184905260006044820152606401600060405180830381600087803b158015612cf357600080fd5b505af1158015612d07573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d9a9190614fa4565b925050505b6040517f16128211000000000000000000000000000000000000000000000000000000008152600481018690526024810182905273ffffffffffffffffffffffffffffffffffffffff891690631612821190604401600060405180830381600087803b158015612e0e57600080fd5b505af1158015612e22573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055509498975050505050505050565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff16158015612eac57506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b15612ee3576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff1615612f25576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055612f5a81613f56565b50600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b60035473ffffffffffffffffffffffffffffffffffffffff163314612fd6576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517ff62005acebe9b616aefb5f248b48f5e89f28437b27d1eebc0b2d911209f297af90600090a250565b60035473ffffffffffffffffffffffffffffffffffffffff163314613096576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600755565b60035473ffffffffffffffffffffffffffffffffffffffff1633146130ec576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613193576001805461ffff83167e01000000000000000000000000000000000000000000000000000000000000027dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790555050565b600061319e836135a5565b9050806131d7576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000908152600460205260409020805473ffffffffffffffffffffffffffffffffffffffff1675ffff000000000000000000000000000000000000000060a084901b161790555050565b60035473ffffffffffffffffffffffffffffffffffffffff163314613272576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61111f81614467565b60035473ffffffffffffffffffffffffffffffffffffffff1633146132cc576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805460ff90921662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff909216919091179055565b60005460ff1615613373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156133b5576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff16331461343a576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061344583613541565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260026020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055905061349c8282614394565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b60008082600114156135275750506001547f0000000000000000000000000000000000000000000000000000000000000000927e0100000000000000000000000000000000000000000000000000000000000090910461ffff169150565b50506000908152600460205260409020549060a082901c90565b73ffffffffffffffffffffffffffffffffffffffff80821660009081526002602052604090205416806135a0576040517fb5ba4c4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146136255773ffffffffffffffffffffffffffffffffffffffff8216600090815260066020526040902054613628565b60015b92915050565b6000613639826135a5565b73ffffffffffffffffffffffffffffffffffffffff909316600090815260086020526040902080549319939093169092555050565b8080156136c657507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b15613828576040517fd1660f9900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301526044820184905286169063d1660f9990606401600060405180830381600087803b15801561376357600080fd5b505af1158015613777573d6000803e3d6000fd5b50506040517f5869dba800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690527f0000000000000000000000000000000000000000000000000000000000000000169250635869dba89150604401600060405180830381600087803b15801561380b57600080fd5b505af115801561381f573d6000803e3d6000fd5b505050506138b9565b6040517fd1660f9900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301526044820184905286169063d1660f9990606401600060405180830381600087803b1580156138a057600080fd5b505af11580156138b4573d6000803e3d6000fd5b505050505b5050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261395590859061455b565b50505050565b60025b8181116138b95781811615613a2d576000613978826134c9565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529192506000918316906370a0823190602401602060405180830381865afa1580156139eb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a0f9190614fa4565b90506002811115613a2a57613a2a878388600185038961366e565b50505b60011b61395e565b73ffffffffffffffffffffffffffffffffffffffff811660009081526008602052604081205490613a6582614667565b60005490915062010000900460ff16811115613aa1576000613a86836146a7565b613a91906001614fec565b905061395584848460008561470b565b505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff16631afbb7a46040518163ffffffff1660e01b8152600401602060405180830381865afa158015613af6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b1a9190614fa4565b92508373ffffffffffffffffffffffffffffffffffffffff166317d11a156040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b8b9190614fa4565b91507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bf8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c1c9190614fa4565b929491935050565b60005460ff16613c90576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610bd0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6040805173ffffffffffffffffffffffffffffffffffffffff8681166024830152604480830186905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b30000000000000000000000000000000000000000000000000000000017905291517f1cff79cd000000000000000000000000000000000000000000000000000000008152600092861691631cff79cd91613dc6918a91600401615103565b6000604051808303816000875af1925050508015613e2457506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052613e219190810190615132565b60015b613e2d57613e61565b80511580613e50575080806020019051810190613e4a919061507c565b15156001145b15613e5f576001915050613e9d565b505b8115613e99576040517f76e3e29c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060005b95945050505050565b6000613eb1826135a5565b9050801580613ec35750600754811615155b15613efa576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83166000908152600860205260409020548116613aa15773ffffffffffffffffffffffffffffffffffffffff83166000908152600860205260409020805482179055505050565b60015473ffffffffffffffffffffffffffffffffffffffff8281166000908152600860205260408120546a010000000000000000000090930490911691908080613f9f86611122565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526127108202600482015273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350908716915063f9a6503090604401602060405180830381865afa15801561403a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061405e9190614fa4565b9250614069846146a7565b6001019150506000806000805b848110156142a157801561408f5760018186031b614092565b60015b935086841615614299576000806140a8866134c9565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8e811660048301529294509092506000918416906370a0823190602401602060405180830381865afa15801561411d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141419190614fa4565b9050600181111561428c576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff848116602483015261ffff841691908d169063f9a6503090604401602060405180830381865afa1580156141c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141ea9190614fa4565b6141f49190615004565b6141fe9087614fec565b95508886106142875760006142128b614667565b60005490915062010000900460ff16811115614249576142448d8c836001891561423e57898e0361470b565b8d61470b565b614278565b85156142785773ffffffffffffffffffffffffffffffffffffffff8d1660009081526008602052604090208b90555b50505050505050505050505050565b614295565b98861898600194505b5050505b600101614076565b506040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005460ff1615614341576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613cdb3390565b73ffffffffffffffffffffffffffffffffffffffff821615806143dd575073ffffffffffffffffffffffffffffffffffffffff8281166000908152600260205260409020541615155b15614414576040517f9e59609e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff918216600090815260026020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001691909216179055565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260066020526040902054156144c4576040517f2e5a5c7700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61010060055410614501576040517f1cbbe18500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005805473ffffffffffffffffffffffffffffffffffffffff83166000818152600660209081526040808320600190951b9485905584835260049091528120919091558254919290614552836151bd565b91905055505050565b60006145bd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166148799092919063ffffffff16565b805190915015613aa157808060200190518101906145db919061507c565b613aa1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610bd0565b60008060005b6101008110156146a0576001811b91508382161561468c578260010192505b838210614698576146a0565b60010161466d565b5050919050565b600081600114156146ba57506000919050565b61010060015b60016146cc8284614fec565b901c92506001831b848116158015906146e75750600185851c145b156146f257506146a0565b84811061470157839250614705565b8391505b506146c0565b815b81811015614846576001811b8581161561483d57600061472c826134c9565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529192506000918316906370a0823190602401602060405180830381865afa15801561479f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147c39190614fa4565b90506001811161483a57600054978318977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9097019660ff6201000090910416871161483a5750505073ffffffffffffffffffffffffffffffffffffffff86166000908152600860205260409020859055506138b9565b50505b5060010161470d565b506040517f53275fcb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606148888484600085614892565b90505b9392505050565b606082471015614924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610bd0565b843b61498c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610bd0565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516149b591906151f6565b60006040518083038185875af1925050503d80600081146149f2576040519150601f19603f3d011682016040523d82523d6000602084013e6149f7565b606091505b5091509150614a07828286614a12565b979650505050505050565b60608315614a2157508161488b565b825115614a315782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd09190614e5b565b73ffffffffffffffffffffffffffffffffffffffff8116811461111f57600080fd5b600060208284031215614a9957600080fd5b813561488b81614a65565b60008060408385031215614ab757600080fd5b8235614ac281614a65565b91506020830135614ad281614a65565b809150509250929050565b600060208284031215614aef57600080fd5b5035919050565b8035600381106135a057600080fd5b801515811461111f57600080fd5b600080600080600080600060e0888a031215614b2e57600080fd5b8735614b3981614a65565b9650614b4760208901614af6565b9550604088013594506060880135614b5e81614a65565b93506080880135614b6e81614a65565b925060a0880135915060c0880135614b8581614b05565b8091505092959891949750929550565b60008060008060808587031215614bab57600080fd5b8435614bb681614a65565b93506020850135614bc681614a65565b92506040850135614bd681614a65565b9396929550929360600135925050565b60008060008060808587031215614bfc57600080fd5b84359350614c0c60208601614af6565b93969395505050506040820135916060013590565b600080600080600060a08688031215614c3957600080fd5b8535614c4481614a65565b94506020860135614c5481614a65565b93506040860135614c6481614a65565b94979396509394606081013594506080013592915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614cf257614cf2614c7c565b604052919050565b600067ffffffffffffffff821115614d1457614d14614c7c565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600080600060608486031215614d5557600080fd5b8335614d6081614a65565b92506020840135614d7081614a65565b9150604084013567ffffffffffffffff811115614d8c57600080fd5b8401601f81018613614d9d57600080fd5b8035614db0614dab82614cfa565b614cab565b818152876020838501011115614dc557600080fd5b816020840160208301376000602083830101528093505050509250925092565b60005b83811015614e00578181015183820152602001614de8565b838111156139555750506000910152565b60008151808452614e29816020860160208601614de5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061488b6020830184614e11565b60008060408385031215614e8157600080fd5b823591506020830135614ad281614a65565b803561ffff811681146135a057600080fd5b600080600080600060a08688031215614ebd57600080fd5b614ec686614e93565b9450614ed460208701614e93565b9350614ee260408701614e93565b9250614ef060608701614e93565b9150614efe60808701614e93565b90509295509295909350565b600080600060608486031215614f1f57600080fd5b8335614f2a81614a65565b9250602084013591506040840135614f4181614b05565b809150509250925092565b60008060408385031215614f5f57600080fd5b8235614f6a81614a65565b9150614f7860208401614e93565b90509250929050565b600060208284031215614f9357600080fd5b813560ff8116811461488b57600080fd5b600060208284031215614fb657600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115614fff57614fff614fbd565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561503c5761503c614fbd565b500290565b600082615077577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60006020828403121561508e57600080fd5b815161488b81614b05565b6000828210156150ab576150ab614fbd565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600080604083850312156150f257600080fd5b505080516020909101519092909150565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015260006148886040830184614e11565b60006020828403121561514457600080fd5b815167ffffffffffffffff81111561515b57600080fd5b8201601f8101841361516c57600080fd5b805161517a614dab82614cfa565b81815285602083850101111561518f57600080fd5b613e9d826020830160208601614de5565b6000602082840312156151b257600080fd5b815161488b81614a65565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156151ef576151ef614fbd565b5060010190565b60008251615208818460208701614de5565b919091019291505056fea26469706673582212209d39bb9d4972b515acdad1ffb757acd15e103ca6ee762f88a6382b36243734ba64736f6c634300080a00336101606040526000805462ff00001916620c00001790553480156200002357600080fd5b5060405162005c8438038062005c8483398101604081905262000046916200053a565b80806001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000086573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ac91906200053a565b6000805460ff191690556001600160a01b038116620000de57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200011d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200014391906200053a565b6001600160a01b03166080816001600160a01b031681525050506000816001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200019e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c491906200053a565b6001600160a01b03831661010081905260e081905260408051632495a59960e01b81529051929350600092632495a599916004808201926020929091908290030181865afa1580156200021b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200024191906200053a565b6001600160a01b03811660c05290506200025b8162000475565b816001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200029a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c091906200053a565b6001600160a01b0316610120816001600160a01b031681525050816001600160a01b03166377532ed96040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000319573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033f91906200053a565b6001600160a01b0316610140816001600160a01b031681525050816001600160a01b031663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000398573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003be91906200053a565b6001600001600a6101000a8154816001600160a01b0302191690836001600160a01b03160217905550816001600160a01b0316639068a8686040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000426573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044c91906200053a565b6001600160a01b031660a0525050600380546001600160a01b03191633179055506200058b9050565b6001600160a01b03811660009081526006602052604090205415620004ad57604051632e5a5c7760e01b815260040160405180910390fd5b61010060055410620004d257604051631cbbe18560e01b815260040160405180910390fd5b600580546001600160a01b0383166000818152600660209081526040808320600190951b9485905584835260049091528120919091558254919290620005188362000561565b91905055505050565b6001600160a01b03811681146200053757600080fd5b50565b6000602082840312156200054d57600080fd5b81516200055a8162000521565b9392505050565b60006000198214156200058457634e487b7160e01b600052601160045260246000fd5b5060010190565b60805160a05160c05160e0516101005161012051610140516155e1620006a3600039600081816109040152818161397e0152613a330152600081816105e001526138e601526000818161043e01528181610fda0152818161103e01528181612680015281816127db01528181612c2201528181612d0d01528181612dcf01528181612e8e0152613df6015260006106470152600081816106ca01528181610ea501528181610f3601528181610f8301528181610fb9015281816110c2015281816121bb01528181612cec015281816132800152818161374b01528181613818015261424d01526000818161095301528181611164015261264301526000818161084b01528181611307015261244c01526155e16000f3fe608060405234801561001057600080fd5b50600436106103995760003560e01c8063830aa745116101e9578063b5b12cd71161010f578063e1998cf9116100ad578063f9aa028a1161007c578063f9aa028a146109d4578063fdd57645146109f4578063fe47cde714610a2a578063ff68754314610a4a57600080fd5b8063e1998cf914610988578063e75538c71461099b578063e958b704146109ae578063f67c5bd0146109c157600080fd5b8063ced342b5116100e9578063ced342b514610926578063d48bfca71461093b578063db7ceb801461094e578063dc2b21c11461097557600080fd5b8063b5b12cd714610893578063b7ac50c6146108c1578063c5e10eef146108ff57600080fd5b80639537301811610187578063a366f49611610156578063a366f49614610833578063a50cf2c814610846578063a64bec9e1461086d578063a70bc5421461088057600080fd5b806395373018146107ab5780639af1d35a146107be5780639f5f86ae146108175780639fd12b771461082a57600080fd5b80638991b2f1116101c35780638991b2f1146107525780638fe3f93f14610772578063944ac59f1461078557806394cf073a1461079857600080fd5b8063830aa745146107125780638345f26e146107255780638456cb591461074a57600080fd5b80633f4ba83a116102ce57806355aabafd1161026c5780636ce4074a1161023b5780636ce4074a146106925780636e98e5e4146106b25780636f307dc3146106c557806378327438146106ec57600080fd5b806355aabafd14610630578063570a7af2146106425780635c975abb14610669578063654a9eda1461067f57600080fd5b80634f0e0ef3116102a85780634f0e0ef3146105db5780635063524a1461060257806351e3f1601461061557806354fd4d501461062857600080fd5b80633f4ba83a146105b7578063458936f5146105bf57806346fb371d146105c857600080fd5b806322995f5d1161033b57806329df0b931161031557806329df0b93146105355780632f7a1881146105485780633192195c1461056f5780633e8297ca1461059757600080fd5b806322995f5d146104d55780632362a2d8146104e85780632630c12f1461050957600080fd5b806311ca4fc21161037757806311ca4fc21461042657806316f0115b14610439578063172c48c7146104605780631b0c8234146104a257600080fd5b8063055ee9b51461039e5780630d8f9cee146103fe5780630d92632d14610413575b600080fd5b6103d46103ac366004614cee565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61041161040c366004614d0b565b610a80565b005b610411610421366004614d52565b610bad565b610411610434366004614d0b565b610bc1565b6103d47f000000000000000000000000000000000000000000000000000000000000000081565b61047361046e366004614dba565b610c99565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835261ffff9091166020830152016103f5565b6104b56104b0366004614de2565b610cb1565b6040805194855260208501939093529183015260608201526080016103f5565b6104116104e3366004614e1d565b610cd7565b6104fb6104f6366004614e6e565b610ce9565b6040519081526020016103f5565b6001546a0100000000000000000000900473ffffffffffffffffffffffffffffffffffffffff166103d4565b610411610543366004614cee565b611241565b6000546103d4906301000000900473ffffffffffffffffffffffffffffffffffffffff1681565b61058261057d366004614cee565b6112a5565b604080519283526020830191909152016103f5565b6104fb6105a5366004614cee565b60096020526000908152604090205481565b6104116112d9565b6104fb60055481565b6104116105d6366004614ef0565b6113c7565b6103d47f000000000000000000000000000000000000000000000000000000000000000081565b6104b5610610366004614de2565b61161e565b610411610623366004614d0b565b611783565b6104fb600281565b6104fb61063e366004614dba565b5490565b6103d47f000000000000000000000000000000000000000000000000000000000000000081565b60005460ff1660405190151581526020016103f5565b61041161068d366004614f31565b611884565b6106a56106a0366004615050565b611d3c565b6040516103f5919061516b565b6104116106c0366004614d0b565b61200f565b6103d47f000000000000000000000000000000000000000000000000000000000000000081565b6106ff6106fa366004614cee565b6121b7565b60405161ffff90911681526020016103f5565b610411610720366004614ef0565b612290565b6000546107389062010000900460ff1681565b60405160ff90911681526020016103f5565b61041161241e565b6104fb610760366004614cee565b60086020526000908152604090205481565b6103d461078036600461517e565b61250a565b6104116107933660046151b5565b612899565b6104fb6107a636600461521a565b6129c6565b6104116107b9366004614cee565b612fdb565b6001546040805161ffff808416825262010000840481166020830152640100000000840481169282019290925266010000000000008304821660608201526801000000000000000090920416608082015260a0016103f5565b610411610825366004614cee565b613106565b6104fb60075481565b610411610841366004614dba565b6131c6565b6103d47f000000000000000000000000000000000000000000000000000000000000000081565b6104fb61087b366004614dba565b61321c565b61041161088e36600461525c565b61322d565b6108a66108a1366004614cee565b6133b3565b604080519384526020840192909252908201526060016103f5565b6104116108cf36600461525c565b73ffffffffffffffffffffffffffffffffffffffff909116600090815260096020526040902061ffff9091169055565b6103d47f000000000000000000000000000000000000000000000000000000000000000081565b61092e6133ce565b6040516103f59190615291565b610411610949366004614cee565b613490565b6103d47f000000000000000000000000000000000000000000000000000000000000000081565b6104116109833660046152eb565b6134ea565b610411610996366004614d0b565b613575565b6104736109a9366004614dba565b613738565b6103d46109bc366004614cee565b6137b0565b6104fb6109cf366004614cee565b613814565b6003546103d49073ffffffffffffffffffffffffffffffffffffffff1681565b6103d4610a02366004614cee565b600b6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b600c546103d49073ffffffffffffffffffffffffffffffffffffffff1681565b6103d4610a58366004614cee565b600a6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff16158015610ad257506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b15610b09576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff1615610b4b576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055610b81828261389c565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b610bba85858585856138dc565b5050505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314610c12576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805473ffffffffffffffffffffffffffffffffffffffff9384166301000000027fffffffffffffffffff0000000000000000000000000000000000000000ffffff90911617905560018054919092166a0100000000000000000000027fffff0000000000000000000000000000000000000000ffffffffffffffffffff909116179055565b600080610ca86001841b613738565b91509150915091565b600080600080610cc38888888861161e565b93509350935093505b945094509450949050565b610ce384848484613b2d565b50505050565b6000805460ff1615610d5c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064015b60405180910390fd5b600054610100900460ff1615610d9e576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff163314610e23576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610e2e896137b0565b90506000806000806000610e41866112a5565b9094509050610e528c8e868461161e565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152939b5093985090955093506000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015610eee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f12919061530e565b9050610f1e8887615356565b610f29906001615356565b811115610f6957610f64877f00000000000000000000000000000000000000000000000000000000000000008d60018c8b870303038d6138dc565b610fb3565b610fb373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168d8960018a8d0186900301613c07565b611001877f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008960006138dc565b6040517fca9505e40000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604481018490527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ca9505e490606401600060405180830381600087803b15801561109757600080fd5b505af11580156110ab573d6000803e3d6000fd5b505050505050505060018411156110ea576110ea837f00000000000000000000000000000000000000000000000000000000000000008d8760006138dc565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604090205486191661111f84898884613b2d565b6040517f89b77b3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f000000000000000000000000000000000000000000000000000000000000000016906389b77b3e90602401600060405180830381600087803b1580156111a857600080fd5b505af11580156111bc573d6000803e3d6000fd5b50505073ffffffffffffffffffffffffffffffffffffffff909c16600090815260026020526040812080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550929a9950505050505050505050565b6000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314611299576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112a281613c9c565b50565b6000806000806112b485613d0d565b91955092509050816112c6828661536e565b6112d091906153ab565b92505050915091565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa158015611363573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061138791906153e6565b6113bd576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113c5613e8b565b565b60005460ff1615611434576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610d53565b600054610100900460ff1615611476576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100178155338152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff908116908416148015906114f757506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b801561151b5750600c5473ffffffffffffffffffffffffffffffffffffffff163314155b8061153a575073ffffffffffffffffffffffffffffffffffffffff8316155b15611571576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61157a82613814565b6115b0576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006115bb856137b0565b90506115cb838583856000613f6c565b6115ef576115de83858360006001613f6c565b506115ed838583856001613f6c565b505b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b6001546000908190819081906127109061ffff1661163c8888615403565b611646919061536e565b61165091906153ab565b61165a9086615356565b935060018760028111156116705761167061541a565b141561170a576001546000906127109061169690640100000000900461ffff168b61536e565b6116a091906153ab565b600154909150612710906116be9062010000900461ffff168b61536e565b6116c891906153ab565b6116d29086615356565b9450848111156116e95760018582030393506116ed565b8094505b8581106116fe578585039250611704565b84860391505b50610ccc565b600287600281111561171e5761171e61541a565b141561177457600154600090612710906117489068010000000000000000900461ffff168b61536e565b61175291906153ab565b600154909150612710906116be906601000000000000900461ffff168b61536e565b92979196505091860393509150565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff161580156117d557506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b1561180c576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff161561184e576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055610b81828261410d565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff161580156118d657506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b1561190d576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff161561194f576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055611985858461410d565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152600091908616906370a0823190602401602060405180830381865afa1580156119f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a19919061530e565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529192506000918616906370a0823190602401602060405180830381865afa158015611a8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aaf919061530e565b60015490915060009081906a0100000000000000000000900473ffffffffffffffffffffffffffffffffffffffff16635cecbd0e611aed8689615403565b8a611af88988615403565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152600481019390935273ffffffffffffffffffffffffffffffffffffffff918216602484015260448301528a1660648201526084016040805180830381865afa158015611b74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b989190615449565b9150915060018411611bae57611bae898961389c565b611bb7876121b7565b611bc59061ffff168261536e565b9050611bd0886121b7565b611bde9061ffff168361536e565b9150818110611bf957611bf089613c9c565b505050506115ef565b73ffffffffffffffffffffffffffffffffffffffff891660009081526009602052604081205483611c366b033b2e3c9fd0803ce80000008561536e565b611c4091906153ab565b611c56906b033b2e3c9fd0803ce8000000615403565b611c609190615356565b60015490915061271090611c8b906b033b2e3c9fd0803ce80000009062010000900461ffff1661536e565b611c9591906153ab565b8111611cd65773ffffffffffffffffffffffffffffffffffffffff8a166000908152600960205260409020819055611ccc8a613c9c565b50505050506115ef565b611cdf8a6141bd565b50505073ffffffffffffffffffffffffffffffffffffffff871660009081526009602052604090206001905550505050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b6060611d4a60005460ff1690565b15611db1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610d53565b600054610100900460ff1615611df3576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100178155338152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff908116908416141580611e68575073ffffffffffffffffffffffffffffffffffffffff8316155b15611ebe57600c5473ffffffffffffffffffffffffffffffffffffffff163314611ebe576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611ec9856137b0565b90508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167faed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab0360405160405180910390a36040517f1cff79cd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821690631cff79cd90611f79908790879060040161546d565b6000604051808303816000875af1158015611f98573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611fde919081019061549c565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905595945050505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314612060576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216156120d05773ffffffffffffffffffffffffffffffffffffffff8281166000908152600a6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169183169190911790555b73ffffffffffffffffffffffffffffffffffffffff8116156121405773ffffffffffffffffffffffffffffffffffffffff8181166000908152600b6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169184169190911790555b73ffffffffffffffffffffffffffffffffffffffff811673cccccccccccccccccccccccccccccccccccccccc14156121b357600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790555b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561223b5750506001547e01000000000000000000000000000000000000000000000000000000000000900461ffff1690565b600061224683613814565b90508061227f576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61228881613738565b949350505050565b60005460ff16156122fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610d53565b600054610100900460ff161561233f576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff1633146123c4576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6123ce838361410d565b6123f073ffffffffffffffffffffffffffffffffffffffff8316858584613c07565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555050565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa1580156124a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124cc91906153e6565b612502576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113c561453b565b6000805460ff1615612578576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610d53565b600054610100900460ff16156125ba576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff16331461263f576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166321d18456857f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061270d919061530e565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168152600481019290925260248201526044016020604051808303816000875af1158015612768573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061278c919061550a565b6040517fbf28068b0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff80831660248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063bf28068b90604401600060405180830381600087803b15801561282157600080fd5b505af1158015612835573d6000803e3d6000fd5b5050505061284383826145fb565b73ffffffffffffffffffffffffffffffffffffffff811660009081526008602052604081206001905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690559392505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633146128ea576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805461ffff92831668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9484166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff96851664010000000002969096167fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff97851662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000090931694909816939093171794909416949094179190911716919091179055565b6000805460ff1615612a34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610d53565b600054610100900460ff1615612a76576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff163314612afb576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806000612b0987613d0d565b92509250925084612b2357612b1e8684615403565b612b2d565b612b2d8684615356565b935060008515612c855769021e19e0c9bab24000008510612b9657612b5683603689901c61536e565b612b64603686901c8461536e565b612b6e9190615356565b603686901c612b7d858561536e565b612b87919061536e565b612b9191906153ab565b612bd3565b612ba0838861536e565b612baa858461536e565b612bb49190615356565b85612bbf858561536e565b612bc9919061536e565b612bd391906153ab565b6040517fbf28068b0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff8a811660248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063bf28068b90604401600060405180830381600087803b158015612c6857600080fd5b505af1158015612c7c573d6000803e3d6000fd5b50505050612f20565b60008484612c93858361536e565b612c9d91906153ab565b612ca79190615403565b60015490915060009061271090612cc29061ffff168461536e565b612ccc91906153ab565b905073ffffffffffffffffffffffffffffffffffffffff8a1663d1660f997f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000084612d37878f615356565b612d419190615356565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b158015612db557600080fd5b505af1158015612dc9573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ca9505e4838b612e159190615356565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815260048101919091526024810184905260006044820152606401600060405180830381600087803b158015612e7457600080fd5b505af1158015612e88573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ef7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f1b919061530e565b925050505b6040517f16128211000000000000000000000000000000000000000000000000000000008152600481018690526024810182905273ffffffffffffffffffffffffffffffffffffffff891690631612821190604401600060405180830381600087803b158015612f8f57600080fd5b505af1158015612fa3573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055509498975050505050505050565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561302d57506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b15613064576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff16156130a6576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790556130db816141bd565b50600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b60035473ffffffffffffffffffffffffffffffffffffffff163314613157576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517ff62005acebe9b616aefb5f248b48f5e89f28437b27d1eebc0b2d911209f297af90600090a250565b60035473ffffffffffffffffffffffffffffffffffffffff163314613217576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600755565b6000613227826146ce565b92915050565b60035473ffffffffffffffffffffffffffffffffffffffff16331461327e576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613325576001805461ffff83167e01000000000000000000000000000000000000000000000000000000000000027dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790555050565b600061333083613814565b905080613369576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000908152600460205260409020805473ffffffffffffffffffffffffffffffffffffffff1675ffff000000000000000000000000000000000000000060a084901b161790555050565b60008060006133c184613d0d565b9250925092509193909250565b6005546060908067ffffffffffffffff8111156133ed576133ed614f8c565b604051908082528060200260200182016040528015613416578160200160208202803683370190505b50915060005b8181101561348b5761342d81610c99565b5083828151811061344057613440615527565b602002602001018173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525050808061348390615556565b91505061341c565b505090565b60035473ffffffffffffffffffffffffffffffffffffffff1633146134e1576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112a281614739565b60035473ffffffffffffffffffffffffffffffffffffffff16331461353b576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805460ff90921662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff909216919091179055565b60005460ff16156135e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610d53565b600054610100900460ff1615613624576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff1633146136a9576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006136b4836137b0565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260026020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055905061370b82826145fb565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b60008082600114156137965750506001547f0000000000000000000000000000000000000000000000000000000000000000927e0100000000000000000000000000000000000000000000000000000000000090910461ffff169150565b50506000908152600460205260409020549060a082901c90565b73ffffffffffffffffffffffffffffffffffffffff808216600090815260026020526040902054168061380f576040517fb5ba4c4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146138945773ffffffffffffffffffffffffffffffffffffffff8216600090815260066020526040902054613227565b600192915050565b60006138a782613814565b73ffffffffffffffffffffffffffffffffffffffff909316600090815260086020526040902080549319939093169092555050565b80801561393457507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b15613a96576040517fd1660f9900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301526044820184905286169063d1660f9990606401600060405180830381600087803b1580156139d157600080fd5b505af11580156139e5573d6000803e3d6000fd5b50506040517f5869dba800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690527f0000000000000000000000000000000000000000000000000000000000000000169250635869dba89150604401600060405180830381600087803b158015613a7957600080fd5b505af1158015613a8d573d6000803e3d6000fd5b50505050610bba565b6040517fd1660f9900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301526044820184905286169063d1660f9990606401600060405180830381600087803b158015613b0e57600080fd5b505af1158015613b22573d6000803e3d6000fd5b505050505050505050565b60025b818111610bba5781811615613bff576000613b4a82613738565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529192506000918316906370a0823190602401602060405180830381865afa158015613bbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613be1919061530e565b90506002811115613bfc57613bfc87838860018503896138dc565b50505b60011b613b30565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052610ce390859061482d565b73ffffffffffffffffffffffffffffffffffffffff811660009081526008602052604081205490613ccc82614939565b60005490915062010000900460ff16811115613d08576000613ced836146ce565b613cf8906001615356565b9050610ce3848484600085614972565b505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff16631afbb7a46040518163ffffffff1660e01b8152600401602060405180830381865afa158015613d5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d81919061530e565b92508373ffffffffffffffffffffffffffffffffffffffff166317d11a156040518163ffffffff1660e01b8152600401602060405180830381865afa158015613dce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613df2919061530e565b91507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e83919061530e565b929491935050565b60005460ff16613ef7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610d53565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6040805173ffffffffffffffffffffffffffffffffffffffff8681166024830152604480830186905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b30000000000000000000000000000000000000000000000000000000017905291517f1cff79cd000000000000000000000000000000000000000000000000000000008152600092861691631cff79cd9161402d918a9160040161546d565b6000604051808303816000875af192505050801561408b57506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052614088919081019061549c565b60015b614094576140c8565b805115806140b75750808060200190518101906140b191906153e6565b15156001145b156140c6576001915050614104565b505b8115614100576040517f76e3e29c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060005b95945050505050565b600061411882613814565b905080158061412a5750600754811615155b15614161576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83166000908152600860205260409020548116613d085773ffffffffffffffffffffffffffffffffffffffff83166000908152600860205260409020805482179055505050565b60015473ffffffffffffffffffffffffffffffffffffffff8281166000908152600860205260408120546a010000000000000000000090930490911691908080614206866112a5565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526127108202600482015273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350908716915063f9a6503090604401602060405180830381865afa1580156142a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142c5919061530e565b92506142d0846146ce565b6001019150506000806000805b848110156145085780156142f65760018186031b6142f9565b60015b9350868416156145005760008061430f86613738565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8e811660048301529294509092506000918416906370a0823190602401602060405180830381865afa158015614384573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143a8919061530e565b905060018111156144f3576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff848116602483015261ffff841691908d169063f9a6503090604401602060405180830381865afa15801561442d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614451919061530e565b61445b919061536e565b6144659087615356565b95508886106144ee5760006144798b614939565b60005490915062010000900460ff168111156144b0576144ab8d8c83600189156144a557898e03614972565b8d614972565b6144df565b85156144df5773ffffffffffffffffffffffffffffffffffffffff8d1660009081526008602052604090208b90555b50505050505050505050505050565b6144fc565b98861898600194505b5050505b6001016142dd565b506040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005460ff16156145a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610d53565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613f423390565b73ffffffffffffffffffffffffffffffffffffffff82161580614644575073ffffffffffffffffffffffffffffffffffffffff8281166000908152600260205260409020541615155b1561467b576040517f9e59609e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff918216600090815260026020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001691909216179055565b600081600114156146e157506000919050565b61010060015b60016146f38284615356565b901c92506001831b8481161580159061470e5750600185851c145b156147195750614732565b8481106147285783925061472c565b8391505b506146e7565b5050919050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526006602052604090205415614796576040517f2e5a5c7700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610100600554106147d3576040517f1cbbe18500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005805473ffffffffffffffffffffffffffffffffffffffff83166000818152600660209081526040808320600190951b948590558483526004909152812091909155825491929061482483615556565b91905055505050565b600061488f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16614ae09092919063ffffffff16565b805190915015613d0857808060200190518101906148ad91906153e6565b613d08576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610d53565b60008060005b610100811015614732576001811b91508382161561495e578260010192505b83821061496a57614732565b60010161493f565b815b81811015614aad576001811b85811615614aa457600061499382613738565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529192506000918316906370a0823190602401602060405180830381865afa158015614a06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a2a919061530e565b905060018111614aa157600054978318977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9097019660ff62010000909104168711614aa15750505073ffffffffffffffffffffffffffffffffffffffff8616600090815260086020526040902085905550610bba565b50505b50600101614974565b506040517f53275fcb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060614aef8484600085614af9565b90505b9392505050565b606082471015614b8b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610d53565b843b614bf3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610d53565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051614c1c919061558f565b60006040518083038185875af1925050503d8060008114614c59576040519150601f19603f3d011682016040523d82523d6000602084013e614c5e565b606091505b5091509150614c6e828286614c79565b979650505050505050565b60608315614c88575081614af2565b825115614c985782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d53919061516b565b73ffffffffffffffffffffffffffffffffffffffff811681146112a257600080fd5b600060208284031215614d0057600080fd5b8135614af281614ccc565b60008060408385031215614d1e57600080fd5b8235614d2981614ccc565b91506020830135614d3981614ccc565b809150509250929050565b80151581146112a257600080fd5b600080600080600060a08688031215614d6a57600080fd5b8535614d7581614ccc565b94506020860135614d8581614ccc565b93506040860135614d9581614ccc565b9250606086013591506080860135614dac81614d44565b809150509295509295909350565b600060208284031215614dcc57600080fd5b5035919050565b80356003811061380f57600080fd5b60008060008060808587031215614df857600080fd5b84359350614e0860208601614dd3565b93969395505050506040820135916060013590565b60008060008060808587031215614e3357600080fd5b8435614e3e81614ccc565b93506020850135614e4e81614ccc565b92506040850135614e5e81614d44565b9396929550929360600135925050565b600080600080600080600060e0888a031215614e8957600080fd5b8735614e9481614ccc565b9650614ea260208901614dd3565b9550604088013594506060880135614eb981614ccc565b93506080880135614ec981614ccc565b925060a0880135915060c0880135614ee081614d44565b8091505092959891949750929550565b60008060008060808587031215614f0657600080fd5b8435614f1181614ccc565b93506020850135614f2181614ccc565b92506040850135614e5e81614ccc565b600080600080600060a08688031215614f4957600080fd5b8535614f5481614ccc565b94506020860135614f6481614ccc565b93506040860135614f7481614ccc565b94979396509394606081013594506080013592915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561500257615002614f8c565b604052919050565b600067ffffffffffffffff82111561502457615024614f8c565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60008060006060848603121561506557600080fd5b833561507081614ccc565b9250602084013561508081614ccc565b9150604084013567ffffffffffffffff81111561509c57600080fd5b8401601f810186136150ad57600080fd5b80356150c06150bb8261500a565b614fbb565b8181528760208385010111156150d557600080fd5b816020840160208301376000602083830101528093505050509250925092565b60005b838110156151105781810151838201526020016150f8565b83811115610ce35750506000910152565b600081518084526151398160208601602086016150f5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000614af26020830184615121565b6000806040838503121561519157600080fd5b823591506020830135614d3981614ccc565b803561ffff8116811461380f57600080fd5b600080600080600060a086880312156151cd57600080fd5b6151d6866151a3565b94506151e4602087016151a3565b93506151f2604087016151a3565b9250615200606087016151a3565b915061520e608087016151a3565b90509295509295909350565b60008060006060848603121561522f57600080fd5b833561523a81614ccc565b925060208401359150604084013561525181614d44565b809150509250925092565b6000806040838503121561526f57600080fd5b823561527a81614ccc565b9150615288602084016151a3565b90509250929050565b6020808252825182820181905260009190848201906040850190845b818110156152df57835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016152ad565b50909695505050505050565b6000602082840312156152fd57600080fd5b813560ff81168114614af257600080fd5b60006020828403121561532057600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561536957615369615327565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156153a6576153a6615327565b500290565b6000826153e1577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000602082840312156153f857600080fd5b8151614af281614d44565b60008282101561541557615415615327565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6000806040838503121561545c57600080fd5b505080516020909101519092909150565b73ffffffffffffffffffffffffffffffffffffffff83168152604060208201526000614aef6040830184615121565b6000602082840312156154ae57600080fd5b815167ffffffffffffffff8111156154c557600080fd5b8201601f810184136154d657600080fd5b80516154e46150bb8261500a565b8181528560208385010111156154f957600080fd5b6141048260208301602086016150f5565b60006020828403121561551c57600080fd5b8151614af281614ccc565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561558857615588615327565b5060010190565b600082516155a18184602087016150f5565b919091019291505056fea26469706673582212209a61b2b1203f2f5e63c5e3bdfef5184c4cbbb88b745f884592632c989b91297064736f6c634300080a00339c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c8"; - -type CreditManagerTestSuiteConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: CreditManagerTestSuiteConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class CreditManagerTestSuite__factory extends ContractFactory { - constructor(...args: CreditManagerTestSuiteConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - _testTokenSuite: string, - _underlying: BigNumberish, - internalSuite: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - _testTokenSuite, - _underlying, - internalSuite, - overrides || {} - ) as Promise; - } - override getDeployTransaction( - _testTokenSuite: string, - _underlying: BigNumberish, - internalSuite: boolean, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction( - _testTokenSuite, - _underlying, - internalSuite, - overrides || {} - ); - } - override attach(address: string): CreditManagerTestSuite { - return super.attach(address) as CreditManagerTestSuite; - } - override connect(signer: Signer): CreditManagerTestSuite__factory { - return super.connect(signer) as CreditManagerTestSuite__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): CreditManagerTestSuiteInterface { - return new utils.Interface(_abi) as CreditManagerTestSuiteInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): CreditManagerTestSuite { - return new Contract( - address, - _abi, - signerOrProvider - ) as CreditManagerTestSuite; - } -} diff --git a/src/types/factories/contracts/test/suites/PoolServiceTestSuite__factory.ts b/src/types/factories/contracts/test/suites/PoolServiceTestSuite__factory.ts deleted file mode 100644 index 59010746..00000000 --- a/src/types/factories/contracts/test/suites/PoolServiceTestSuite__factory.ts +++ /dev/null @@ -1,186 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - PoolServiceTestSuite, - PoolServiceTestSuiteInterface, -} from "../../../../contracts/test/suites/PoolServiceTestSuite"; - -const _abi = [ - { - inputs: [ - { - internalType: "contract TokensTestSuite", - name: "_testTokenSuite", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "acl", - outputs: [ - { - internalType: "contract ACL", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "addressProvider", - outputs: [ - { - internalType: "contract AddressProvider", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "cmMock", - outputs: [ - { - internalType: "contract CreditManagerMockForPoolTest", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "dieselToken", - outputs: [ - { - internalType: "contract DieselToken", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "linearIRModel", - outputs: [ - { - internalType: "contract LinearInterestRateModel", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "poolService", - outputs: [ - { - internalType: "contract TestPoolService", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "treasury", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "underlying", - outputs: [ - { - internalType: "contract IERC20", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x6080604052600080546001600160a01b031916737109709ecfa91a80626ff3989d68f67f5b1dd12d1790553480156200003757600080fd5b5060405162007eb938038062007eb98339810160408190526200005a91620009d5565b611f4060c8610190611d4c604051620000739062000968565b938452602084019290925260408301526060820152608001604051809103906000f080158015620000a8573d6000803e3d6000fd5b50600780546001600160a01b0319166001600160a01b039283161790556000546040516303223eab60e11b81527370997970c51812dc3a010c7d01b50e0d17dc79c860048201529116906306447d5690602401600060405180830381600087803b1580156200011657600080fd5b505af11580156200012b573d6000803e3d6000fd5b505050506040516200013d9062000976565b604051809103906000f0801580156200015a573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b0392909216919091179055604051620001899062000984565b604051809103906000f080158015620001a6573d6000803e3d6000fd5b50600280546001600160a01b0319166001600160a01b039283169081179091556001546040516376aad60560e01b815292166004830152906376aad60590602401600060405180830381600087803b1580156200020257600080fd5b505af115801562000217573d6000803e3d6000fd5b50506002546040516301ed651160e41b81527393548eb8453a498222c4ff2c4375b7de8af5a38a60048201526001600160a01b039091169250631ed651109150602401600060405180830381600087803b1580156200027557600080fd5b505af11580156200028a573d6000803e3d6000fd5b5050600880546001600160a01b0319167393548eb8453a498222c4ff2c4375b7de8af5a38a1790555050604051601290620002c59062000992565b6060808252600a908201526944696573656c2044414960b01b608082015260a060208201819052600490820152636444414960e01b60c082015260ff909116604082015260e001604051809103906000f08015801562000329573d6000803e3d6000fd5b50600680546001600160a01b0319166001600160a01b039283161790556040516367b4264560e01b8152908216906367b42645906200036e9060019060040162000a1f565b602060405180830381865afa1580156200038c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003b29190620009d5565b600580546001600160a01b0319166001600160a01b0392831617905560405163eebab8ef60e01b81529082169063eebab8ef90620004179060019073f39fd6e51aad88f6f4ce6ab8827279cfffb922669068056bc75e2d631000009060040162000a35565b600060405180830381600087803b1580156200043257600080fd5b505af115801562000447573d6000803e3d6000fd5b50506002546005546006546007546040516001600160a01b0394851696509284169450908316921690600019906200047f90620009a0565b6001600160a01b039586168152938516602085015291841660408401529092166060820152608081019190915260a001604051809103906000f080158015620004cc573d6000803e3d6000fd5b50600380546001600160a01b0319166001600160a01b0392831617905560008054604080516390c5013b60e01b8152905191909316926390c5013b92600480830193919282900301818387803b1580156200052657600080fd5b505af11580156200053b573d6000803e3d6000fd5b505060005460405163ca669fa760e01b815273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660048201526001600160a01b03909116925063ca669fa79150602401600060405180830381600087803b1580156200059957600080fd5b505af1158015620005ae573d6000803e3d6000fd5b505060055460035460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529116925063095ea7b391506044016020604051808303816000875af115801562000609573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200062f919062000a5f565b506000546040516303223eab60e11b81527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526001600160a01b03909116906306447d5690602401600060405180830381600087803b1580156200068a57600080fd5b505af11580156200069f573d6000803e3d6000fd5b505060065460035460405163f2fde38b60e01b81526001600160a01b0391821660048201529116925063f2fde38b9150602401600060405180830381600087803b158015620006ed57600080fd5b505af115801562000702573d6000803e3d6000fd5b50506003546040516001600160a01b039091169250620007239150620009ae565b6001600160a01b039091168152602001604051809103906000f08015801562000750573d6000803e3d6000fd5b50600480546001600160a01b0319166001600160a01b03928316178155600054600354604080516318caf8e360e31b8152918516938201939093526024810192909252600b60448301526a506f6f6c5365727669636560a81b60648301529091169063c657c71890608401600060405180830381600087803b158015620007d657600080fd5b505af1158015620007eb573d6000803e3d6000fd5b5050600054600654604080516318caf8e360e31b81526001600160a01b0392831660048201526024810191909152600b60448201526a2234b2b9b2b62a37b5b2b760a91b60648201529116925063c657c7189150608401600060405180830381600087803b1580156200085d57600080fd5b505af115801562000872573d6000803e3d6000fd5b5050600054600554604080516318caf8e360e31b81526001600160a01b03928316600482015260248101919091526012604482015271556e6465726c79696e67546f6b656e44414960701b60648201529116925063c657c7189150608401600060405180830381600087803b158015620008eb57600080fd5b505af115801562000900573d6000803e3d6000fd5b505060008054604080516390c5013b60e01b815290516001600160a01b0390921694506390c5013b9350600480820193929182900301818387803b1580156200094857600080fd5b505af11580156200095d573d6000803e3d6000fd5b505050505062000a83565b610b128062000c7f83390190565b61098c806200179183390190565b610fcd806200211d83390190565b6115c480620030ea83390190565b61339f80620046ae83390190565b61046c8062007a4d83390190565b6001600160a01b0381168114620009d257600080fd5b50565b600060208284031215620009e857600080fd5b8151620009f581620009bc565b9392505050565b600b811062000a1b57634e487b7160e01b600052602160045260246000fd5b9052565b6020810162000a2f8284620009fc565b92915050565b6060810162000a458286620009fc565b6001600160a01b0393909316602082015260400152919050565b60006020828403121562000a7257600080fd5b81518015158114620009f557600080fd5b6101ec8062000a936000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c806361d027b31161005b57806361d027b3146101365780636f307dc314610156578063de28735914610176578063e1463e581461019657600080fd5b80630f69630b1461008d5780632954018c146100d657806336dda7d5146100f6578063570a7af214610116575b600080fd5b6007546100ad9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6002546100ad9073ffffffffffffffffffffffffffffffffffffffff1681565b6006546100ad9073ffffffffffffffffffffffffffffffffffffffff1681565b6003546100ad9073ffffffffffffffffffffffffffffffffffffffff1681565b6008546100ad9073ffffffffffffffffffffffffffffffffffffffff1681565b6005546100ad9073ffffffffffffffffffffffffffffffffffffffff1681565b6001546100ad9073ffffffffffffffffffffffffffffffffffffffff1681565b6004546100ad9073ffffffffffffffffffffffffffffffffffffffff168156fea264697066735822122063b4e5f1b51a3534a7042b6016357775e0cfc8b2398c440305270eb714cf575964736f6c634300080a00336101206040523480156200001257600080fd5b5060405162000b1238038062000b1283398101604081905262000035916200021f565b604080518082019091526002815261049560f41b602082015261271085106200007c5760405162461bcd60e51b815260040162000073919062000256565b60405180910390fd5b50604080518082019091526002815261049560f41b6020820152612710841115620000bc5760405162461bcd60e51b815260040162000073919062000256565b50604080518082019091526002815261049560f41b6020820152612710831115620000fc5760405162461bcd60e51b815260040162000073919062000256565b5060006200012185670de0b6b3a7640000620001c160201b6200043c1790919060201c565b608081905290506200013c81670de0b6b3a7640000620002c4565b60a052620001636b033b2e3c9fd0803ce800000085620001c1602090811b6200043c17901c565b60c0526200018a6b033b2e3c9fd0803ce800000084620001c1602090811b6200043c17901c565b60e052620001b16b033b2e3c9fd0803ce800000083620001c1602090811b6200043c17901c565b61010052506200036c9350505050565b6000821580620001cf575081155b15620001de5750600062000219565b612710620001ee600282620002f4565b61ffff16620001fe848662000318565b6200020a91906200033a565b62000216919062000355565b90505b92915050565b600080600080608085870312156200023657600080fd5b505082516020840151604085015160609095015191969095509092509050565b600060208083528351808285015260005b81811015620002855785810183015185820160400152820162000267565b8181111562000298576000604083870101525b50601f01601f1916929092016040019392505050565b634e487b7160e01b600052601160045260246000fd5b600082821015620002d957620002d9620002ae565b500390565b634e487b7160e01b600052601260045260246000fd5b600061ffff808416806200030c576200030c620002de565b92169190910492915050565b6000816000190483118215151615620003355762000335620002ae565b500290565b60008219821115620003505762000350620002ae565b500190565b600082620003675762000367620002de565b500490565b60805160a05160c05160e0516101005161070162000411600039600081816101840152818161030b015261041701526000818160e70152818161025a0152818161033e01526103f401526000818161010e015281816101bc0152818161028e0152818161035f01526103d101526000818161015d01526102bc01526000818160b80152818161020d01528181610235015281816102e001526103a101526107016000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80639cd3fdb51161005b5780639cd3fdb514610109578063c8284e6d14610130578063f81d438114610158578063fc4b2b781461017f57600080fd5b806342568d441461008d57806350ced104146100b357806354fd4d50146100da5780639aec06ea146100e2575b600080fd5b6100a061009b366004610537565b6101a6565b6040519081526020015b60405180910390f35b6100a07f000000000000000000000000000000000000000000000000000000000000000081565b6100a0600181565b6100a07f000000000000000000000000000000000000000000000000000000000000000081565b6100a07f000000000000000000000000000000000000000000000000000000000000000081565b610138610397565b6040805194855260208501939093529183015260608201526080016100aa565b6100a07f000000000000000000000000000000000000000000000000000000000000000081565b6100a07f000000000000000000000000000000000000000000000000000000000000000081565b60008215806101b457508183105b156101e057507f0000000000000000000000000000000000000000000000000000000000000000610391565b6000836101ed8482610588565b6101ff90670de0b6b3a764000061059f565b610209919061060b565b90507f00000000000000000000000000000000000000000000000000000000000000008110156102ba577f000000000000000000000000000000000000000000000000000000000000000061027e827f000000000000000000000000000000000000000000000000000000000000000061059f565b610288919061060b565b6102b2907f000000000000000000000000000000000000000000000000000000000000000061061f565b915050610391565b7f00000000000000000000000000000000000000000000000000000000000000006103057f000000000000000000000000000000000000000000000000000000000000000083610588565b61032f907f000000000000000000000000000000000000000000000000000000000000000061059f565b610339919061060b565b6103837f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000061061f565b61038d919061061f565b9150505b92915050565b60008080806103ce7f0000000000000000000000000000000000000000000000000000000000000000670de0b6b3a764000061048d565b947f000000000000000000000000000000000000000000000000000000000000000094507f000000000000000000000000000000000000000000000000000000000000000093507f000000000000000000000000000000000000000000000000000000000000000092509050565b6000821580610449575081155b1561045657506000610391565b612710610464600282610637565b61ffff16610472848661059f565b61047c919061061f565b610486919061060b565b9392505050565b60408051808201909152600281527f4d33000000000000000000000000000000000000000000000000000000000000602082015260009082610505576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104fc9190610658565b60405180910390fd5b50600061051360028461060b565b905082816105236127108761059f565b61052d919061061f565b61038d919061060b565b6000806040838503121561054a57600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561059a5761059a610559565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156105d7576105d7610559565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261061a5761061a6105dc565b500490565b6000821982111561063257610632610559565b500190565b600061ffff8084168061064c5761064c6105dc565b92169190910492915050565b600060208083528351808285015260005b8181101561068557858101830151858201604001528201610669565b81811115610697576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea26469706673582212205428f2a5431c3c1928793ca5c2c8825fc467250326c6d5ae84382a87d1e80b2164736f6c634300080a0033608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61090e8061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063732818191161008c578063adce758d11610066578063adce758d14610215578063ba306df114610228578063d4eb5db01461023b578063f2fde38b1461027457600080fd5b806373281819146101b7578063819ad68e146101da5780638da5cb5b146101ed57600080fd5b806354fd4d50116100bd57806354fd4d501461016a5780635f259aba14610180578063715018a6146101af57600080fd5b806335914829146100e45780633a41ec641461011c5780634910832f14610155575b600080fd5b6101076100f236600461089b565b60016020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61010761012a36600461089b565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205460ff1690565b61016861016336600461089b565b610287565b005b610172600181565b604051908152602001610113565b61010761018e36600461089b565b60005473ffffffffffffffffffffffffffffffffffffffff91821691161490565b610168610387565b6101076101c536600461089b565b60026020526000908152604090205460ff1681565b6101686101e836600461089b565b610414565b60005460405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610113565b61016861022336600461089b565b61050c565b61016861023636600461089b565b610601565b61010761024936600461089b565b73ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205460ff1690565b61016861028236600461089b565b6106f6565b60005473ffffffffffffffffffffffffffffffffffffffff16331461030d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909217909155517fae26b1cfe9454ba87274a4e8330b6654684362d0f3d7bbd17f7449a1d38387c69190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610408576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b6104126000610826565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517fd400da6c0c0a894dacc0981730b88af0545d00272ee8fff1437bf560ff245fc49190a250565b60005473ffffffffffffffffffffffffffffffffffffffff16331461058d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f1998397e7203f7baca9d6f41b9e4da6e768daac5caad4234fb9bf5869d2715459190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610682576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526001602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f28b01395b7e25d20552a0c8dc8ecd3b1d4abc986f14dad7885fd45b6fd73c8d99190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811661081a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610304565b61082381610826565b50565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156108ad57600080fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146108d157600080fd5b939250505056fea26469706673582212204712efbfe997070def77285a5b8753bc882b62da2133ce1937ad26cd2b48e49864736f6c634300080a0033608060405234801561001057600080fd5b5061001a3361005f565b60405130906f20a2222922a9a9afa82927ab24a222a960811b907fb37614c7d254ea8d16eb81fa11dddaeb266aa8ba4917980859c7740aff30c69190600090a36100af565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610f0f806100be6000396000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c806377532ed9116100e3578063bcaead981161008c578063ce3c4ae411610066578063ce3c4ae414610308578063f2fde38b1461031b578063fca513a81461032e57600080fd5b8063bcaead98146102da578063c5120b39146102ed578063c513c9bb1461030057600080fd5b80639068a868116100bd5780639068a868146102b7578063addc1a76146102bf578063affd9243146102d257600080fd5b806377532ed91461027e57806386e09c08146102865780638da5cb5b1461029957600080fd5b80634c252f9111610145578063699f200f1161011f578063699f200f1461022d578063715018a61461026357806376aad6051461026b57600080fd5b80634c252f91146101fc578063530e784f1461020457806354fd4d501461021757600080fd5b80631ed65110116101765780631ed65110146101cc57806321da5837146101e157806326c74fc3146101f457600080fd5b8063060678c21461019257806308737695146101c4575b600080fd5b61019a610336565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61019a610366565b6101df6101da366004610e10565b610391565b005b6101df6101ef366004610e10565b610444565b61019a6104ef565b61019a61051a565b6101df610212366004610e10565b610545565b61021f600281565b6040519081526020016101bb565b61019a61023b366004610e4d565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6101df6105f0565b6101df610279366004610e10565b61067d565b61019a610728565b6101df610294366004610e10565b610753565b60005473ffffffffffffffffffffffffffffffffffffffff1661019a565b61019a6107fe565b6101df6102cd366004610e10565b610829565b61019a6108d4565b6101df6102e8366004610e10565b6108ff565b6101df6102fb366004610e10565b6109aa565b61019a610a55565b6101df610316366004610e10565b610a80565b6101df610329366004610e10565b610b2b565b61019a610c58565b60006103617f444154415f434f4d50524553534f520000000000000000000000000000000000610c7f565b905090565b60006103617f41434c0000000000000000000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610417576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6104417f54524541535552595f434f4e545241435400000000000000000000000000000082610d1d565b50565b60005473ffffffffffffffffffffffffffffffffffffffff1633146104c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f574554485f47415445574159000000000000000000000000000000000000000082610d1d565b60006103617f54524541535552595f434f4e5452414354000000000000000000000000000000610c7f565b60006103617f574554485f544f4b454e00000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f50524943455f4f5241434c45000000000000000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610671576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b61067b6000610d9b565b565b60005473ffffffffffffffffffffffffffffffffffffffff1633146106fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f41434c000000000000000000000000000000000000000000000000000000000082610d1d565b60006103617f574554485f474154455741590000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146107d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f574554485f544f4b454e0000000000000000000000000000000000000000000082610d1d565b60006103617f4143434f554e545f464143544f52590000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146108aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f4143434f554e545f464143544f5259000000000000000000000000000000000082610d1d565b60006103617f474541525f544f4b454e00000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610980576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f474541525f544f4b454e0000000000000000000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f444154415f434f4d50524553534f52000000000000000000000000000000000082610d1d565b60006103617f434f4e5452414354535f52454749535445520000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610b01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f434f4e5452414354535f5245474953544552000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610bac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b73ffffffffffffffffffffffffffffffffffffffff8116610c4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161040e565b61044181610d9b565b60006103617f50524943455f4f5241434c4500000000000000000000000000000000000000005b6000818152600160209081526040808320548151808301909252600382527f41503100000000000000000000000000000000000000000000000000000000009282019290925273ffffffffffffffffffffffffffffffffffffffff9091169081610d16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040e9190610e66565b5092915050565b60008281526001602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091559051909184917fb37614c7d254ea8d16eb81fa11dddaeb266aa8ba4917980859c7740aff30c6919190a35050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215610e2257600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610e4657600080fd5b9392505050565b600060208284031215610e5f57600080fd5b5035919050565b600060208083528351808285015260005b81811015610e9357858101830151858201604001528201610e77565b81811115610ea5576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea264697066735822122083c228af017c6f5cf8c395cdf7a53276ff56fdd4f4313c39f680ab73bd75417364736f6c634300080a003360a06040523480156200001157600080fd5b50604051620015c4380380620015c4833981016040819052620000349162000258565b8251839083906200004d906003906020850190620000e5565b50805162000063906004906020840190620000e5565b505050620000806200007a6200008f60201b60201c565b62000093565b60ff16608052506200031a9050565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054620000f390620002dd565b90600052602060002090601f01602090048101928262000117576000855562000162565b82601f106200013257805160ff191683800117855562000162565b8280016001018555821562000162579182015b828111156200016257825182559160200191906001019062000145565b506200017092915062000174565b5090565b5b8082111562000170576000815560010162000175565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001b357600080fd5b81516001600160401b0380821115620001d057620001d06200018b565b604051601f8301601f19908116603f01168101908282118183101715620001fb57620001fb6200018b565b816040528381526020925086838588010111156200021857600080fd5b600091505b838210156200023c57858201830151818301840152908201906200021d565b838211156200024e5760008385830101525b9695505050505050565b6000806000606084860312156200026e57600080fd5b83516001600160401b03808211156200028657600080fd5b6200029487838801620001a1565b94506020860151915080821115620002ab57600080fd5b50620002ba86828701620001a1565b925050604084015160ff81168114620002d257600080fd5b809150509250925092565b600181811c90821680620002f257607f821691505b602082108114156200031457634e487b7160e01b600052602260045260246000fd5b50919050565b60805161128e620003366000396000610172015261128e6000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c8063715018a611610097578063a457c2d711610066578063a457c2d714610245578063a9059cbb14610258578063dd62ed3e1461026b578063f2fde38b146102b157600080fd5b8063715018a6146101fa5780638da5cb5b1461020257806395d89b411461022a5780639dc29fac1461023257600080fd5b8063313ce567116100d3578063313ce5671461016b578063395093511461019c57806340c10f19146101af57806370a08231146101c457600080fd5b806306fdde0314610105578063095ea7b31461012357806318160ddd1461014657806323b872dd14610158575b600080fd5b61010d6102c4565b60405161011a919061104f565b60405180910390f35b6101366101313660046110eb565b610356565b604051901515815260200161011a565b6002545b60405190815260200161011a565b610136610166366004611115565b61036c565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161011a565b6101366101aa3660046110eb565b610457565b6101c26101bd3660046110eb565b6104a0565b005b61014a6101d2366004611151565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c261052f565b60055460405173ffffffffffffffffffffffffffffffffffffffff909116815260200161011a565b61010d6105bc565b6101c26102403660046110eb565b6105cb565b6101366102533660046110eb565b610656565b6101366102663660046110eb565b61072e565b61014a610279366004611173565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101c26102bf366004611151565b61073b565b6060600380546102d3906111a6565b80601f01602080910402602001604051908101604052809291908181526020018280546102ff906111a6565b801561034c5780601f106103215761010080835404028352916020019161034c565b820191906000526020600020905b81548152906001019060200180831161032f57829003601f168201915b5050505050905090565b600061036333848461086b565b50600192915050565b6000610379848484610a1f565b73ffffffffffffffffffffffffffffffffffffffff841660009081526001602090815260408083203384529091529020548281101561043f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61044c853385840361086b565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161036391859061049b908690611229565b61086b565b60055473ffffffffffffffffffffffffffffffffffffffff163314610521576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610436565b61052b8282610cd3565b5050565b60055473ffffffffffffffffffffffffffffffffffffffff1633146105b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610436565b6105ba6000610df3565b565b6060600480546102d3906111a6565b60055473ffffffffffffffffffffffffffffffffffffffff16331461064c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610436565b61052b8282610e6a565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915281205482811015610717576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610436565b610724338585840361086b565b5060019392505050565b6000610363338484610a1f565b60055473ffffffffffffffffffffffffffffffffffffffff1633146107bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610436565b73ffffffffffffffffffffffffffffffffffffffff811661085f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610436565b61086881610df3565b50565b73ffffffffffffffffffffffffffffffffffffffff831661090d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610436565b73ffffffffffffffffffffffffffffffffffffffff82166109b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610436565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610ac2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610436565b73ffffffffffffffffffffffffffffffffffffffff8216610b65576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610436565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610c1b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610436565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610c5f908490611229565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610cc591815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610d50576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610436565b8060026000828254610d629190611229565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610d9c908490611229565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216610f0d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610436565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015610fc3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610436565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290610fff908490611241565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610a12565b600060208083528351808285015260005b8181101561107c57858101830151858201604001528201611060565b8181111561108e576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146110e657600080fd5b919050565b600080604083850312156110fe57600080fd5b611107836110c2565b946020939093013593505050565b60008060006060848603121561112a57600080fd5b611133846110c2565b9250611141602085016110c2565b9150604084013590509250925092565b60006020828403121561116357600080fd5b61116c826110c2565b9392505050565b6000806040838503121561118657600080fd5b61118f836110c2565b915061119d602084016110c2565b90509250929050565b600181811c908216806111ba57607f821691505b602082108114156111f4577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561123c5761123c6111fa565b500190565b600082821015611253576112536111fa565b50039056fea26469706673582212200343c2cef6c2ca469c25e4abb24e7e37ea95105bc70df4cbd4741229aafc595064736f6c634300080a003360a06040523480156200001157600080fd5b506040516200339f3803806200339f833981016040819052620000349162000627565b6000805460ff191690558484848484846001600160a01b0381166200006c57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000ab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d191906200068e565b6001600160a01b039081166080526001805586161580159150620000fd57506001600160a01b03841615155b80156200011257506001600160a01b03831615155b80156200012757506001600160a01b03821615155b6040518060400160405280600281526020016105a360f41b815250906200016c5760405162461bcd60e51b8152600401620001639190620006ac565b60405180910390fd5b50600580546001600160a01b038088166001600160a01b03199283168117909355600780548883169084161790556008805491871691909216179055604080516326c74fc360e01b815290516326c74fc3916004808201926020929091908290030181865afa158015620001e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200020a91906200068e565b600c80546001600160a01b0319166001600160a01b03929092169190911790556b033b2e3c9fd0803ce8000000600d55620002458262000258565b60035550620007ae975050505050505050565b60408051808201909152600281526105a360f41b60208201526001600160a01b0382166200029b5760405162461bcd60e51b8152600401620001639190620006ac565b50600680546001600160a01b0319166001600160a01b038316179055620002c36000620002fa565b6040516001600160a01b038216907f0ec6cb7631d36954a05ffd646135bfd9995c71e7fa36d26abb1ad9f24a040ea190600090a250565b8062000305620003b5565b6200031191906200071a565b6002556200031e6200042e565b600d556006546002546001600160a01b03909116906342568d44906200034362000460565b6040516001600160e01b031960e085901b16815260048101929092526024820152604401602060405180830381865afa15801562000385573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003ab919062000734565b600e555042600f55565b600080600f5442620003c891906200071a565b905060006301e133806b033b2e3c9fd0803ce800000083600e54600454620003f191906200074e565b620003fd91906200074e565b62000409919062000770565b62000415919062000770565b90508060025462000427919062000793565b9250505090565b600080600f54426200044191906200071a565b90506200045a600d54600e5483620004d560201b60201c565b91505090565b6007546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015620004aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004d0919062000734565b905090565b6000806301e13380620004e984866200074e565b620004f5919062000770565b6200050d906b033b2e3c9fd0803ce800000062000793565b90506200052981866200053260201b62001f941790919060201c565b95945050505050565b600082158062000540575081155b156200054f5750600062000604565b816200056960026b033b2e3c9fd0803ce800000062000770565b62000577906000196200071a565b62000583919062000770565b831115604051806040016040528060028152602001614d3160f01b81525090620005c25760405162461bcd60e51b8152600401620001639190620006ac565b506b033b2e3c9fd0803ce8000000620005dd60028262000770565b620005e984866200074e565b620005f5919062000793565b62000601919062000770565b90505b92915050565b80516001600160a01b03811681146200062257600080fd5b919050565b600080600080600060a086880312156200064057600080fd5b6200064b866200060a565b94506200065b602087016200060a565b93506200066b604087016200060a565b92506200067b606087016200060a565b9150608086015190509295509295909350565b600060208284031215620006a157600080fd5b62000601826200060a565b600060208083528351808285015260005b81811015620006db57858101830151858201604001528201620006bd565b81811115620006ee576000604083870101525b50601f01601f1916929092016040019392505050565b634e487b7160e01b600052601160045260246000fd5b6000828210156200072f576200072f62000704565b500390565b6000602082840312156200074757600080fd5b5051919050565b60008160001904831182151516156200076b576200076b62000704565b500290565b6000826200078e57634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115620007a957620007a962000704565b500190565b608051612ba4620007fb600039600081816104fa0152818161090d01528181610b0d01528181610c4c01528181610eac015281816113ff015281816115900152611bdb0152612ba46000f3fe608060405234801561001057600080fd5b50600436106102de5760003560e01c8063609ae31711610186578063bb04b193116100e3578063d41ee0f711610097578063ef8d960311610071578063ef8d9603146105bd578063f3fdb15a146105c6578063fe14112d146105e657600080fd5b8063d41ee0f7146105a3578063dbcb313b146105ab578063e941fa78146105b457600080fd5b8063c5f956af116100c8578063c5f956af1461055d578063ca9505e41461057d578063cf33d9551461059057600080fd5b8063bb04b19314610537578063bf28068b1461054a57600080fd5b80639aa5d4621161013a578063a50cf2c81161011f578063a50cf2c8146104f5578063a7a5eccc1461051c578063b6ac642a1461052457600080fd5b80639aa5d462146104da578063a4e8273e146104ed57600080fd5b8063788c6bfe1161016b578063788c6bfe146104b75780637dfc6afe146104bf5780638456cb59146104d257600080fd5b8063609ae317146104a657806374375359146104af57600080fd5b80633e163df01161023f57806352cb995f116101f35780635664cacf116101cd5780635664cacf146104805780635b29233b146104935780635c975abb1461049b57600080fd5b806352cb995f1461045d5780635427c9381461046557806354fd4d501461047857600080fd5b806345d31f9d1161022457806345d31f9d146104385780634c19386c146104415780634d778ad11461044a57600080fd5b80633e163df01461040d5780633f4ba83a1461043057600080fd5b80632495a599116102965780632e97ca211161027b5780632e97ca21146103a757806331d8bc27146103da57806336dda7d5146103ed57600080fd5b80632495a599146103675780632954018c1461038757600080fd5b8063078c4781116102c7578063078c4781146103125780630fce70fb146103275780631e16e4fc1461032f57600080fd5b8063030dbb04146102e357806305fe138b146102ff575b600080fd5b6102ec60025481565b6040519081526020015b60405180910390f35b6102ec61030d3660046128b4565b6105ee565b6103256103203660046128e4565b6108df565b005b6102ec610a37565b61034261033d366004612901565b610a5f565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102f6565b6007546103429073ffffffffffffffffffffffffffffffffffffffff1681565b6005546103429073ffffffffffffffffffffffffffffffffffffffff1681565b6103ca6103b53660046128e4565b60096020526000908152604090205460ff1681565b60405190151581526020016102f6565b6102ec6103e836600461291a565b610a96565b6008546103429073ffffffffffffffffffffffffffffffffffffffff1681565b6103ca61041b3660046128e4565b600a6020526000908152604090205460ff1681565b610325610adf565b6102ec600e5481565b6102ec60045481565b6102ec610458366004612901565b610bcd565b6002546102ec565b6102ec610473366004612901565b610bfd565b6102ec600181565b61032561048e3660046128e4565b610c1e565b600f546102ec565b60005460ff166103ca565b6102ec600f5481565b6102ec610d0e565b6102ec610da6565b6103256104cd366004612901565b600255565b610325610e7e565b6103256104e8366004612946565b610f6a565b600b546102ec565b6103427f000000000000000000000000000000000000000000000000000000000000000081565b600d546102ec565b610325610532366004612901565b6113d1565b610325610545366004612901565b611562565b6103256105583660046128b4565b61167b565b600c546103429073ffffffffffffffffffffffffffffffffffffffff1681565b61032561058b36600461291a565b6117fb565b61032561059e3660046128e4565b611bad565b610325611f1d565b6102ec600d5481565b6102ec60105481565b6102ec60035481565b6006546103429073ffffffffffffffffffffffffffffffffffffffff1681565b6102ec611f27565b6000805460ff1615610661576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064015b60405180910390fd5b600260015414156106ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610658565b60026001819055604080518082019091529081527f5a30000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8316610756576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065891906129aa565b50600061076284610bfd565b9050600061077b601054836120a290919063ffffffff16565b905060006107898284612a2a565b6007549091506107b09073ffffffffffffffffffffffffffffffffffffffff1686836120d8565b81156107e057600c546007546107e09173ffffffffffffffffffffffffffffffffffffffff9182169116846120d8565b6008546040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff90911690639dc29fac90604401600060405180830381600087803b15801561085257600080fd5b505af1158015610866573d6000803e3d6000fd5b50505050826002546108789190612a2a565b60025561088560006121b1565b60405186815273ffffffffffffffffffffffffffffffffffffffff86169033907fd8ae9b9ba89e637bcb66a69ac91e8f688018e81d6f92c57e02226425c8efbdf69060200160405180910390a36001805595945050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610969573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061098d9190612a41565b6109c3576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff811660008181526009602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f9181736fce85d2d4cca2e4406f10679302ae5c387180fdb62963af3cd9a24fd69190a250565b600080600f5442610a489190612a2a565b9050610a59600d54600e5483610a96565b91505090565b600b8181548110610a6f57600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6000806301e13380610aa88486612a63565b610ab29190612acf565b610ac8906b033b2e3c9fd0803ce8000000612ae3565b9050610ad48582611f94565b9150505b9392505050565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa158015610b69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8d9190612a41565b610bc3576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bcb612286565b565b6000610bd7610da6565b610bed6b033b2e3c9fd0803ce800000084612a63565b610bf79190612acf565b92915050565b60006b033b2e3c9fd0803ce8000000610c14610da6565b610bed9084612a63565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610ca8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ccc9190612a41565b610d02576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d0b81612367565b50565b6007546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015610d7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da19190612afb565b905090565b600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3a9190612afb565b905080610e54576b033b2e3c9fd0803ce800000091505090565b806b033b2e3c9fd0803ce8000000610e6a611f27565b610e749190612a63565b610a599190612acf565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015610f08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2c9190612a41565b610f62576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bcb612478565b60005460ff1615610fd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610658565b60026001541415611044576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610658565b60026001819055604080518082019091529081527f5a30000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff83166110cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065891906129aa565b50600354836110d9611f27565b6110e39190612ae3565b11156040518060400160405280600381526020017f505332000000000000000000000000000000000000000000000000000000000081525090611153576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065891906129aa565b506007546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156111c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e79190612afb565b60075490915061120f9073ffffffffffffffffffffffffffffffffffffffff16333087612538565b6007546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152829173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa15801561127d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a19190612afb565b6112ab9190612a2a565b60085490945073ffffffffffffffffffffffffffffffffffffffff166340c10f19846112d687610bcd565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401600060405180830381600087803b15801561134157600080fd5b505af1158015611355573d6000803e3d6000fd5b50505050836002546113679190612ae3565b60025561137460006121b1565b604080518581526020810184905273ffffffffffffffffffffffffffffffffffffffff85169133917fd2491a9b4fe81a7cd4511e8b7b7743951b061dad5bed7da8a7795b080ee08c7e910160405180910390a35050600180555050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561145b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061147f9190612a41565b6114b5576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051808201909152600381527f505333000000000000000000000000000000000000000000000000000000000060208201526064821115611525576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065891906129aa565b5060108190556040518181527fd5fe46099fa396290a7f57e36c3c3c8774e2562c18ed5d1dcc0fa75071e03f1d906020015b60405180910390a150565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156115ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116109190612a41565b611646576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60038190556040518181527fd7a183c9fe85b604c25d54bd676e0866f6c13bcca9fb9b0850213de118fdc99c90602001611557565b60005460ff16156116e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610658565b33600090815260096020908152604091829020548251808401909352600383527f50533000000000000000000000000000000000000000000000000000000000009183019190915260ff1661176a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065891906129aa565b5060075461178f9073ffffffffffffffffffffffffffffffffffffffff1682846120d8565b61179960006121b1565b816004546117a79190612ae3565b60045560405182815273ffffffffffffffffffffffffffffffffffffffff82169033907f312a5e5e1079f5dda4e95dbbd0b908b291fd5b992ef22073643ab691572c5b529060200160405180910390a35050565b60005460ff1615611868576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610658565b336000908152600a6020908152604091829020548251808401909352600383527f50533000000000000000000000000000000000000000000000000000000000009183019190915260ff166118ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065891906129aa565b5081156119b957600854600c5473ffffffffffffffffffffffffffffffffffffffff918216916340c10f19911661192085610bcd565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401600060405180830381600087803b15801561198b57600080fd5b505af115801561199f573d6000803e3d6000fd5b50505050816002546119b19190612ae3565b600255611b45565b60006119c482610bcd565b600854600c546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529293506000929116906370a0823190602401602060405180830381865afa158015611a3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a609190612afb565b905081811015611ab457905080337fef3653ded679720ab04913b6f3820be7cedc8286d42ff5dd8dff17e91bd2964c611a9883610bfd565b611aa29086612a2a565b60405190815260200160405180910390a25b600854600c546040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015260248101859052911690639dc29fac90604401600060405180830381600087803b158015611b2a57600080fd5b505af1158015611b3e573d6000803e3d6000fd5b5050505050505b611b4e816121b1565b8260046000828254611b609190612a2a565b9091555050604080518481526020810184905290810182905233907f2fe77b1c99aca6b022b8efc6e3e8dd1b48b30748709339b65c50ef3263443e099060600160405180910390a2505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611c37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c5b9190612a41565b611c91576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cdc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d009190612b14565b73ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600381526020017f505331000000000000000000000000000000000000000000000000000000000081525090611d9c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065891906129aa565b5073ffffffffffffffffffffffffffffffffffffffff81166000908152600a6020908152604091829020548251808401909352600383527f50533400000000000000000000000000000000000000000000000000000000009183019190915260ff1615611e36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065891906129aa565b5073ffffffffffffffffffffffffffffffffffffffff81166000818152600960209081526040808320805460017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009182168117909255600a90935281842080549093168117909255600b8054928301815583527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db990910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055517fe076020e7eac3915d33aec40c24f95e73eb6c9921ff89747d50aa8fd934d2c019190a250565b610bcb60006121b1565b600080600f5442611f389190612a2a565b905060006301e133806b033b2e3c9fd0803ce800000083600e54600454611f5f9190612a63565b611f699190612a63565b611f739190612acf565b611f7d9190612acf565b905080600254611f8d9190612ae3565b9250505090565b6000821580611fa1575081155b15611fae57506000610bf7565b81611fc660026b033b2e3c9fd0803ce8000000612acf565b611ff0907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612a2a565b611ffa9190612acf565b8311156040518060400160405280600281526020017f4d310000000000000000000000000000000000000000000000000000000000008152509061206b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065891906129aa565b506b033b2e3c9fd0803ce8000000612084600282612acf565b61208e8486612a63565b6120989190612ae3565b610ad89190612acf565b60008215806120af575081155b156120bc57506000610bf7565b6127106120ca600282612b31565b61ffff1661208e8486612a63565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526121ac9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261259c565b505050565b806121ba611f27565b6121c49190612a2a565b6002556121cf610a37565b600d5560065460025473ffffffffffffffffffffffffffffffffffffffff909116906342568d44906121ff610d0e565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815260048101929092526024820152604401602060405180830381865afa158015612258573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061227c9190612afb565b600e555042600f55565b60005460ff166122f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610658565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60408051808201909152600281527f5a30000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff82166123e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065891906129aa565b50600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff831617905561243460006121b1565b60405173ffffffffffffffffffffffffffffffffffffffff8216907f0ec6cb7631d36954a05ffd646135bfd9995c71e7fa36d26abb1ad9f24a040ea190600090a250565b60005460ff16156124e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610658565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861233d3390565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526125969085907f23b872dd000000000000000000000000000000000000000000000000000000009060840161212a565b50505050565b60006125fe826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166126a89092919063ffffffff16565b8051909150156121ac578080602001905181019061261c9190612a41565b6121ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610658565b60606126b784846000856126bf565b949350505050565b606082471015612751576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610658565b843b6127b9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610658565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516127e29190612b52565b60006040518083038185875af1925050503d806000811461281f576040519150601f19603f3d011682016040523d82523d6000602084013e612824565b606091505b509150915061283482828661283f565b979650505050505050565b6060831561284e575081610ad8565b82511561285e5782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065891906129aa565b73ffffffffffffffffffffffffffffffffffffffff81168114610d0b57600080fd5b600080604083850312156128c757600080fd5b8235915060208301356128d981612892565b809150509250929050565b6000602082840312156128f657600080fd5b8135610ad881612892565b60006020828403121561291357600080fd5b5035919050565b60008060006060848603121561292f57600080fd5b505081359360208301359350604090920135919050565b60008060006060848603121561295b57600080fd5b83359250602084013561296d81612892565b929592945050506040919091013590565b60005b83811015612999578181015183820152602001612981565b838111156125965750506000910152565b60208152600082518060208401526129c981604085016020870161297e565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612a3c57612a3c6129fb565b500390565b600060208284031215612a5357600080fd5b81518015158114610ad857600080fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612a9b57612a9b6129fb565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082612ade57612ade612aa0565b500490565b60008219821115612af657612af66129fb565b500190565b600060208284031215612b0d57600080fd5b5051919050565b600060208284031215612b2657600080fd5b8151610ad881612892565b600061ffff80841680612b4657612b46612aa0565b92169190910492915050565b60008251612b6481846020870161297e565b919091019291505056fea2646970667358221220aa576a1f3048229fbbd4b2babbd3d404feadeb799dd811619fe8b62885256f2164736f6c634300080a00336080604052600280546001600160a01b03191673c4375b7de8af5a38a93548eb8453a498222c4ff217905534801561003657600080fd5b5060405161046c38038061046c8339810160408190526100559161007a565b600080546001600160a01b0319166001600160a01b03929092169190911790556100aa565b60006020828403121561008c57600080fd5b81516001600160a01b03811681146100a357600080fd5b9392505050565b6103b3806100b96000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063bf28068b1161005b578063bf28068b1461010b578063c8cca9e514610120578063ca9505e414610175578063e958b7041461018857600080fd5b8063570a7af2146100825780636d0a1218146100cb5780636f307dc3146100eb575b600080fd5b6000546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6002546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b6001546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b61011e610119366004610303565b6101b3565b005b61011e61012e36600461032f565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b61011e610183366004610351565b610243565b6100a261019636600461032f565b5060025473ffffffffffffffffffffffffffffffffffffffff1690565b6000546040517fbf28068b0000000000000000000000000000000000000000000000000000000081526004810184905273ffffffffffffffffffffffffffffffffffffffff83811660248301529091169063bf28068b90604401600060405180830381600087803b15801561022757600080fd5b505af115801561023b573d6000803e3d6000fd5b505050505050565b6000546040517fca9505e400000000000000000000000000000000000000000000000000000000815260048101859052602481018490526044810183905273ffffffffffffffffffffffffffffffffffffffff9091169063ca9505e490606401600060405180830381600087803b1580156102bd57600080fd5b505af11580156102d1573d6000803e3d6000fd5b50505050505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146102fe57600080fd5b919050565b6000806040838503121561031657600080fd5b82359150610326602084016102da565b90509250929050565b60006020828403121561034157600080fd5b61034a826102da565b9392505050565b60008060006060848603121561036657600080fd5b50508135936020830135935060409092013591905056fea2646970667358221220e29e625436d382630e7a0373aafe5230ccc0f5a960595820d041897bf0d7850c64736f6c634300080a0033"; - -type PoolServiceTestSuiteConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: PoolServiceTestSuiteConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class PoolServiceTestSuite__factory extends ContractFactory { - constructor(...args: PoolServiceTestSuiteConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - _testTokenSuite: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - _testTokenSuite, - overrides || {} - ) as Promise; - } - override getDeployTransaction( - _testTokenSuite: string, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(_testTokenSuite, overrides || {}); - } - override attach(address: string): PoolServiceTestSuite { - return super.attach(address) as PoolServiceTestSuite; - } - override connect(signer: Signer): PoolServiceTestSuite__factory { - return super.connect(signer) as PoolServiceTestSuite__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): PoolServiceTestSuiteInterface { - return new utils.Interface(_abi) as PoolServiceTestSuiteInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): PoolServiceTestSuite { - return new Contract( - address, - _abi, - signerOrProvider - ) as PoolServiceTestSuite; - } -} diff --git a/src/types/factories/contracts/test/suites/TokensTestSuite__factory.ts b/src/types/factories/contracts/test/suites/TokensTestSuite__factory.ts deleted file mode 100644 index e4d77f6a..00000000 --- a/src/types/factories/contracts/test/suites/TokensTestSuite__factory.ts +++ /dev/null @@ -1,744 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - TokensTestSuite, - TokensTestSuiteInterface, -} from "../../../../contracts/test/suites/TokensTestSuite"; - -const _abi = [ - { - inputs: [], - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "", - type: "address", - }, - ], - name: "log_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "log_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - name: "log_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "int256", - name: "", - type: "int256", - }, - ], - name: "log_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "address", - name: "val", - type: "address", - }, - ], - name: "log_named_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes", - name: "val", - type: "bytes", - }, - ], - name: "log_named_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes32", - name: "val", - type: "bytes32", - }, - ], - name: "log_named_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - ], - name: "log_named_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "string", - name: "val", - type: "string", - }, - ], - name: "log_named_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - ], - name: "log_named_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "log_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "logs", - type: "event", - }, - { - inputs: [], - name: "IS_TEST", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "enum Tokens", - name: "", - type: "uint8", - }, - ], - name: "addressOf", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "enum Tokens", - name: "t", - type: "uint8", - }, - { - internalType: "address", - name: "holder", - type: "address", - }, - { - internalType: "address", - name: "targetContract", - type: "address", - }, - ], - name: "allowance", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "enum Tokens", - name: "t", - type: "uint8", - }, - { - internalType: "address", - name: "holder", - type: "address", - }, - { - internalType: "address", - name: "targetContract", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "approve", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "enum Tokens", - name: "t", - type: "uint8", - }, - { - internalType: "address", - name: "holder", - type: "address", - }, - { - internalType: "address", - name: "targetContract", - type: "address", - }, - ], - name: "approve", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "token", - type: "address", - }, - { - internalType: "address", - name: "holder", - type: "address", - }, - { - internalType: "address", - name: "targetContract", - type: "address", - }, - ], - name: "approve", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "enum Tokens", - name: "t", - type: "uint8", - }, - { - internalType: "address", - name: "holder", - type: "address", - }, - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "balance", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "enum Tokens", - name: "t", - type: "uint8", - }, - { - internalType: "address", - name: "from", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "burn", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "failed", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "getPriceFeeds", - outputs: [ - { - components: [ - { - internalType: "address", - name: "token", - type: "address", - }, - { - internalType: "address", - name: "priceFeed", - type: "address", - }, - ], - internalType: "struct PriceFeedConfig[]", - name: "", - type: "tuple[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "token", - type: "address", - }, - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "mint", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "enum Tokens", - name: "t", - type: "uint8", - }, - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "mint", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "priceFeeds", - outputs: [ - { - internalType: "address", - name: "token", - type: "address", - }, - { - internalType: "address", - name: "priceFeed", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "enum Tokens", - name: "", - type: "uint8", - }, - ], - name: "priceFeedsMap", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "enum Tokens", - name: "", - type: "uint8", - }, - ], - name: "prices", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "enum Tokens", - name: "", - type: "uint8", - }, - ], - name: "symbols", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "tokenIndexes", - outputs: [ - { - internalType: "enum Tokens", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "enum Tokens", - name: "", - type: "uint8", - }, - ], - name: "tokenToType", - outputs: [ - { - internalType: "enum TokenTypes", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "topUpWETH", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [], - name: "wethToken", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - stateMutability: "payable", - type: "receive", - }, -]; - -const _bytecode = - "0x60806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d00011790553480156200003a57600080fd5b506040805161018081019091526000908060c081018060018152604080518082018252600381526244414960e81b6020828101919091528301526012908201526305f5e100606082015260800160018152602001600081525081526020016040518060c001604052806002600a811115620000b957620000b962000b78565b815260408051808201825260048152635553444360e01b6020828101919091528301526006908201526305f5e100606082015260800160018152602001600081525081526020016040518060c001604052806003600a81111562000121576200012162000b78565b815260408051808201825260048152630ae8aa8960e31b602082810191909152830152601290820152644a817c8000606082015260800160028152602001600081525081526020016040518060c001604052806004600a8111156200018a576200018a62000b78565b815260408051808201825260048152634c494e4b60e01b6020828101919091528301526012908201526359682f00606082015260800160018152602001600081525081526020016040518060c001604052806005600a811115620001f257620001f262000b78565b815260408051808201825260048152631554d11560e21b602082810191909152830152601290820152633b023380606082015260800160018152602001600081525081526020016040518060c001604052806006600a8111156200025a576200025a62000b78565b815260408051808201825260058152640e6e88aa8960db1b602082810191909152830152601290820152644cd588640060608201526080016003815260200160009052905260408051610140810190915290915060009080608081018060078152602001604051806040016040528060048152602001636344414960e01b8152508152602001601260ff1681526020016305f5e100815260200160048081111562000309576200030962000b78565b8152602001600181525081526020016040518060c001604052806008600a81111562000339576200033962000b78565b81526040805180820182526005815264635553444360d81b6020828101919091528301526006908201526305f5e100606082015260800160048152602001600281525081526020016040518060c001604052806009600a811115620003a257620003a262000b78565b8152604080518082018252600581526418d554d11560da1b602082810191909152830152601290820152633b023380606082015260800160048152602001600581525081526020016040518060c00160405280600a808111156200040a576200040a62000b78565b81526040805180820182526005815264634c494e4b60d81b6020828101919091528301526012908201526359682f00606082015260800160048152602001600490529052905060005b600681101562000496576200048183826006811062000476576200047662000b8e565b6020020151620004db565b806200048d8162000ba4565b91505062000453565b5060005b6004811015620004d257620004bd82826004811062000476576200047662000b8e565b80620004c98162000ba4565b9150506200049a565b50505062000d14565b6000600282608001516004811115620004f857620004f862000b78565b14156200054e576040516200050d9062000a8c565b604051809103906000f0801580156200052a573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b03831617905590506200071e565b60038260800151600481111562000569576200056962000b78565b1415620005a4576040516200057e9062000a9a565b604051809103906000f0801580156200059b573d6000803e3d6000fd5b5090506200071e565b600182608001516004811115620005bf57620005bf62000b78565b1415620005f157816020015182602001518360400151604051620005e39062000aa8565b6200057e9392919062000c1e565b6004826080015160048111156200060c576200060c62000b78565b1415620006be576000600260008460a00151600a81111562000632576200063262000b78565b600a81111562000646576200064662000b78565b815260200190815260200160002060009054906101000a90046001600160a01b0316905082602001518360200151846040015183604051620006889062000ab6565b62000697949392919062000c5b565b604051809103906000f080158015620006b4573d6000803e3d6000fd5b509150506200071e565b60405162461bcd60e51b815260206004820152602b60248201527f74657374546f6b656e53756974653a204372656174696e6720756e6b6e6f776e60448201526a20746f6b656e207479706560a81b606482015260840160405180910390fd5b60005460208301516040516318caf8e360e31b8152620100009092046001600160a01b03169163c657c718916200075b9185919060040162000ca9565b600060405180830381600087803b1580156200077657600080fd5b505af11580156200078b573d6000803e3d6000fd5b50505050600082606001516008604051620007a69062000ac4565b91825260ff166020820152604001604051809103906000f080158015620007d1573d6000803e3d6000fd5b50905081600260008560000151600a811115620007f257620007f262000b78565b600a81111562000806576200080662000b78565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055508260600151600560008560000151600a8111156200085a576200085a62000b78565b600a8111156200086e576200086e62000b78565b8152602080820192909252604090810160009081209390935585516001600160a01b03861684526008909252909120805460ff1916600183600a811115620008ba57620008ba62000b78565b02179055508260800151600360008560000151600a811115620008e157620008e162000b78565b600a811115620008f557620008f562000b78565b81526020810191909152604001600020805460ff1916600183600481111562000922576200092262000b78565b0217905550604080518082019091526001600160a01b0380841682528281166020808401918252600780546001810182556000918252945160029095027fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688810180549686166001600160a01b031997881617905592517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c689909301805493909416929094169190911790915584015184519091600491600a811115620009eb57620009eb62000b78565b600a811115620009ff57620009ff62000b78565b8152602001908152602001600020908051906020019062000a2292919062000ad2565b5080600660008560000151600a81111562000a415762000a4162000b78565b600a81111562000a555762000a5562000b78565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550505050565b610ab1806200285183390190565b611224806200330283390190565b611758806200452683390190565b6117098062005c7e83390190565b6106ca806200738783390190565b82805462000ae09062000cd7565b90600052602060002090601f01602090048101928262000b04576000855562000b4f565b82601f1062000b1f57805160ff191683800117855562000b4f565b8280016001018555821562000b4f579182015b8281111562000b4f57825182559160200191906001019062000b32565b5062000b5d92915062000b61565b5090565b5b8082111562000b5d576000815560010162000b62565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600060001982141562000bc757634e487b7160e01b600052601160045260246000fd5b5060010190565b6000815180845260005b8181101562000bf65760208185018101518683018201520162000bd8565b8181111562000c09576000602083870101525b50601f01601f19169290920160200192915050565b60608152600062000c33606083018662000bce565b828103602084015262000c47818662000bce565b91505060ff83166040830152949350505050565b60808152600062000c70608083018762000bce565b828103602084015262000c84818762000bce565b60ff95909516604084015250506001600160a01b039190911660609091015292915050565b6001600160a01b038316815260406020820181905260009062000ccf9083018462000bce565b949350505050565b600181811c9082168062000cec57607f821691505b6020821081141562000d0e57634e487b7160e01b600052602260045260246000fd5b50919050565b611b2d8062000d246000396000f3fe6080604052600436106101635760003560e01c80638eb86e8b116100c0578063c6c3bbe611610074578063d051a62211610059578063d051a62214610490578063eebab8ef146104b0578063fa7626d4146104d057600080fd5b8063c6c3bbe614610433578063c74912d21461045357600080fd5b80639b140a85116100a55780639b140a85146103e6578063b36ba20814610406578063ba414fa61461040e57600080fd5b80638eb86e8b1461038357806398cdaadf146103a357600080fd5b80636a72bde71161011757806388327863116100fc578063883278631461030857806388f776a2146103365780638a3177a31461035657600080fd5b80636a72bde7146102c45780636ca42ae3146102e657600080fd5b8063440864fa11610148578063440864fa146102025780634b57b0be1461022f57806367b426451461028157600080fd5b806304bc3b1c1461016f57806310c7f0b9146101b557600080fd5b3661016a57005b600080fd5b34801561017b57600080fd5b5061019f61018a3660046116f6565b60086020526000908152604090205460ff1681565b6040516101ac9190611742565b60405180910390f35b3480156101c157600080fd5b506101d56101d036600461175c565b6104ea565b6040805173ffffffffffffffffffffffffffffffffffffffff9384168152929091166020830152016101ac565b34801561020e57600080fd5b5061022261021d366004611784565b610530565b6040516101ac91906117cb565b34801561023b57600080fd5b5060015461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101ac565b34801561028d57600080fd5b5061025c61029c366004611784565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156102d057600080fd5b506102e46102df36600461181c565b6105ca565b005b3480156102f257600080fd5b506102fb610730565b6040516101ac919061186b565b34801561031457600080fd5b506103286103233660046118d4565b6107b5565b6040519081526020016101ac565b34801561034257600080fd5b506102e461035136600461190b565b610888565b34801561036257600080fd5b50610328610371366004611784565b60056020526000908152604090205481565b34801561038f57600080fd5b506102e461039e366004611954565b6108b9565b3480156103af57600080fd5b5061025c6103be366004611784565b60066020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156103f257600080fd5b506102e4610401366004611993565b610a73565b6102e4610b22565b34801561041a57600080fd5b50610423610ba0565b60405190151581526020016101ac565b34801561043f57600080fd5b506102e461044e3660046119b3565b610d00565b34801561045f57600080fd5b5061048361046e366004611784565b60036020526000908152604090205460ff1681565b6040516101ac91906119d3565b34801561049c57600080fd5b506103286104ab36600461190b565b610daf565b3480156104bc57600080fd5b506102e46104cb366004611954565b610e8b565b3480156104dc57600080fd5b506000546104239060ff1681565b600781815481106104fa57600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff91821692501682565b60046020526000908152604090208054610549906119e7565b80601f0160208091040260200160405190810160405280929190818152602001828054610575906119e7565b80156105c25780601f10610597576101008083540402835291602001916105c2565b820191906000526020600020905b8154815290600101906020018083116105a557829003601f168201915b505050505081565b6000546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152620100009092049091169063ca669fa790602401600060405180830381600087803b15801561063e57600080fd5b505af1158015610652573d6000803e3d6000fd5b505050506002600085600a81111561066c5761066c611713565b600a81111561067d5761067d611713565b8152602081019190915260409081016000205490517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490529091169063095ea7b3906044016020604051808303816000875af1158015610705573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107299190611a3b565b5050505050565b60606007805480602002602001604051908101604052809291908181526020016000905b828210156107ac5760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff908116835260019182015416828401529083529092019101610754565b50505050905090565b60006002600084600a8111156107cd576107cd611713565b600a8111156107de576107de611713565b8152602081019190915260409081016000205490517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152909116906370a0823190602401602060405180830381865afa15801561085d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108819190611a5d565b9392505050565b6108b48383837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6105ca565b505050565b60016003600085600a8111156108d1576108d1611713565b600a8111156108e2576108e2611713565b815260208101919091526040016000205460ff16600481111561090757610907611713565b14610999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f74657374546f6b656e53756974653a20547279696e6720746f206275726e206160448201527f206e6f6e2d6e6f726d616c20746f6b656e00000000000000000000000000000060648201526084015b60405180910390fd5b6002600084600a8111156109af576109af611713565b600a8111156109c0576109c0611713565b8152602081019190915260409081016000205490517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526024820184905290911690639dc29fac906044015b6020604051808303816000875af1158015610a49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6d9190611a3b565b50505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604081205460ff169081600a811115610aaf57610aaf611713565b1415610b17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f20746f6b656e2077697468207375636820616464726573730000000000006044820152606401610990565b610a6d818484610888565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015610b8c57600080fd5b505af1158015610729573d6000803e3d6000fd5b60008054610100900460ff1615610bc05750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610cfb5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610c65917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc491608001611a76565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052610c9d91611abe565b6000604051808303816000865af19150503d8060008114610cda576040519150601f19603f3d011682016040523d82523d6000602084013e610cdf565b606091505b5091505080806020019051810190610cf79190611a3b565b9150505b919050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604081205460ff169081600a811115610d3c57610d3c611713565b1415610da4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f20746f6b656e2077697468207375636820616464726573730000000000006044820152606401610990565b610a6d818484610e8b565b60006002600085600a811115610dc757610dc7611713565b600a811115610dd857610dd8611713565b8152602081019190915260409081016000205490517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301529091169063dd62ed3e90604401602060405180830381865afa158015610e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e839190611a5d565b949350505050565b60026003600085600a811115610ea357610ea3611713565b600a811115610eb457610eb4611713565b815260208101919091526040016000205460ff166004811115610ed957610ed9611713565b1415610ff6576000546040517fc88a5e6d000000000000000000000000000000000000000000000000000000008152306004820152602481018390526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c88a5e6d90604401600060405180830381600087803b158015610f5657600080fd5b505af1158015610f6a573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015610fd857600080fd5b505af1158015610fec573d6000803e3d6000fd5b505050505061163c565b600380600085600a81111561100d5761100d611713565b600a81111561101e5761101e611713565b815260208101919091526040016000205460ff16600481111561104357611043611713565b14156111aa576000546040517fc88a5e6d000000000000000000000000000000000000000000000000000000008152306004820152602481018390526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c88a5e6d90604401600060405180830381600087803b1580156110c057600080fd5b505af11580156110d4573d6000803e3d6000fd5b505050506002600084600a8111156110ee576110ee611713565b600a8111156110ff576110ff611713565b8152602081019190915260409081016000205490517fa1903eab00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a1903eab90839060240160206040518083038185885af115801561117f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906111a49190611a5d565b5061163c565b60046003600085600a8111156111c2576111c2611713565b600a8111156111d3576111d3611713565b815260208101919091526040016000205460ff1660048111156111f8576111f8611713565b141561148f5760006002600085600a81111561121657611216611713565b600a81111561122757611227611713565b815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c49190611ada565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600860205260409020549091506112fb9060ff163084610e8b565b8073ffffffffffffffffffffffffffffffffffffffff1663095ea7b36002600087600a81111561132d5761132d611713565b600a81111561133e5761133e611713565b81526020810191909152604090810160002054905160e083901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602481018590526044016020604051808303816000875af11580156113c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e69190611a3b565b506002600085600a8111156113fd576113fd611713565b600a81111561140e5761140e611713565b8152602081019190915260409081016000205490517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810184905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f1990604401600060405180830381600087803b158015610fd857600080fd5b60016003600085600a8111156114a7576114a7611713565b600a8111156114b8576114b8611713565b815260208101919091526040016000205460ff1660048111156114dd576114dd611713565b14156115b4576002600084600a8111156114f9576114f9611713565b600a81111561150a5761150a611713565b8152602081019190915260409081016000205490517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f19906044016020604051808303816000875af1158015611590573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a49190611a3b565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f74657374546f6b656e53756974653a20547279696e6720746f207472616e736660448201527f657220756e6b6e6f776e20746f6b656e000000000000000000000000000000006064820152608401610990565b6002600084600a81111561165257611652611713565b600a81111561166357611663611713565b8152602081019190915260409081016000205490517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490529091169063a9059cbb90604401610a2a565b73ffffffffffffffffffffffffffffffffffffffff811681146116f357600080fd5b50565b60006020828403121561170857600080fd5b8135610881816116d1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60208101600b831061175657611756611713565b91905290565b60006020828403121561176e57600080fd5b5035919050565b8035600b8110610cfb57600080fd5b60006020828403121561179657600080fd5b61088182611775565b60005b838110156117ba5781810151838201526020016117a2565b83811115610a6d5750506000910152565b60208152600082518060208401526117ea81604085016020870161179f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000806080858703121561183257600080fd5b61183b85611775565b9350602085013561184b816116d1565b9250604085013561185b816116d1565b9396929550929360600135925050565b602080825282518282018190526000919060409081850190868401855b828110156118c7578151805173ffffffffffffffffffffffffffffffffffffffff90811686529087015116868501529284019290850190600101611888565b5091979650505050505050565b600080604083850312156118e757600080fd5b6118f083611775565b91506020830135611900816116d1565b809150509250929050565b60008060006060848603121561192057600080fd5b61192984611775565b92506020840135611939816116d1565b91506040840135611949816116d1565b809150509250925092565b60008060006060848603121561196957600080fd5b61197284611775565b92506020840135611982816116d1565b929592945050506040919091013590565b6000806000606084860312156119a857600080fd5b8335611929816116d1565b6000806000606084860312156119c857600080fd5b8335611972816116d1565b602081016005831061175657611756611713565b600181811c908216806119fb57607f821691505b60208210811415611a35577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600060208284031215611a4d57600080fd5b8151801515811461088157600080fd5b600060208284031215611a6f57600080fd5b5051919050565b7fffffffff000000000000000000000000000000000000000000000000000000008316815260008251611ab081600485016020870161179f565b919091016004019392505050565b60008251611ad081846020870161179f565b9190910192915050565b600060208284031215611aec57600080fd5b8151610881816116d156fea264697066735822122010fe735ed069aca27931edce4ba2ff14ec7886bf21b0eea685a884f9200fb49e64736f6c634300080a003360c0604052600d60808190526c2bb930b83832b21022ba3432b960991b60a090815261002e916000919061007a565b50604080518082019091526004808252630ae8aa8960e31b602090920191825261005a9160019161007a565b506002805460ff1916601217905534801561007457600080fd5b5061014e565b82805461008690610113565b90600052602060002090601f0160209004810192826100a857600085556100ee565b82601f106100c157805160ff19168380011785556100ee565b828001600101855582156100ee579182015b828111156100ee5782518255916020019190600101906100d3565b506100fa9291506100fe565b5090565b5b808211156100fa57600081556001016100ff565b600181811c9082168061012757607f821691505b6020821081141561014857634e487b7160e01b600052602260045260246000fd5b50919050565b6109548061015d6000396000f3fe6080604052600436106100cb5760003560e01c806340c10f1911610074578063a9059cbb1161004e578063a9059cbb14610225578063d0e30db014610245578063dd62ed3e1461024d57600080fd5b806340c10f19146101c357806370a08231146101e357806395d89b411461021057600080fd5b806323b872dd116100a557806323b872dd146101575780632e1a7d4d14610177578063313ce5671461019757600080fd5b806306fdde03146100df578063095ea7b31461010a57806318160ddd1461013a57600080fd5b366100da576100d8610285565b005b600080fd5b3480156100eb57600080fd5b506100f46102e0565b6040516101019190610703565b60405180910390f35b34801561011657600080fd5b5061012a61012536600461079f565b61036e565b6040519015158152602001610101565b34801561014657600080fd5b50475b604051908152602001610101565b34801561016357600080fd5b5061012a6101723660046107c9565b6103e7565b34801561018357600080fd5b506100d8610192366004610805565b6105fe565b3480156101a357600080fd5b506002546101b19060ff1681565b60405160ff9091168152602001610101565b3480156101cf57600080fd5b506100d86101de36600461079f565b6106a4565b3480156101ef57600080fd5b506101496101fe36600461081e565b60036020526000908152604090205481565b34801561021c57600080fd5b506100f46106e2565b34801561023157600080fd5b5061012a61024036600461079f565b6106ef565b6100d8610285565b34801561025957600080fd5b50610149610268366004610839565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102a490849061089b565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102ed906108b3565b80601f0160208091040260200160405190810160405280929190818152602001828054610319906108b3565b80156103665780601f1061033b57610100808354040283529160200191610366565b820191906000526020600020905b81548152906001019060200180831161034957829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103d69086815260200190565b60405180910390a350600192915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561041957600080fd5b73ffffffffffffffffffffffffffffffffffffffff8416331480159061048f575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105175773ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020548211156104d157600080fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915281208054849290610511908490610907565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061054c908490610907565b909155505073ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260408120805484929061058690849061089b565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516105ec91815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561061a57600080fd5b3360009081526003602052604081208054839290610639908490610907565b9091555050604051339082156108fc029083906000818181858888f1935050505015801561066b573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260036020526040812080548392906106d990849061089b565b90915550505050565b600180546102ed906108b3565b60006106fc3384846103e7565b9392505050565b600060208083528351808285015260005b8181101561073057858101830151858201604001528201610714565b81811115610742576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461079a57600080fd5b919050565b600080604083850312156107b257600080fd5b6107bb83610776565b946020939093013593505050565b6000806000606084860312156107de57600080fd5b6107e784610776565b92506107f560208501610776565b9150604084013590509250925092565b60006020828403121561081757600080fd5b5035919050565b60006020828403121561083057600080fd5b6106fc82610776565b6000806040838503121561084c57600080fd5b61085583610776565b915061086360208401610776565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156108ae576108ae61086c565b500190565b600181811c908216806108c757607f821691505b60208210811415610901577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000828210156109195761091961086c565b50039056fea26469706673582212206ec943fa4e3b70d8fca6c25b6aa26fa18e8f8952ce3bc4d5afcb443bf3097c0564736f6c634300080a003360806040526000600255600060035534801561001a57600080fd5b506111fa8061002a6000396000f3fe60806040526004361061016e5760003560e01c80637a28fb88116100cb578063bdd17e1c1161007f578063dd62ed3e11610059578063dd62ed3e146103ee578063ee7a7c0414610441578063f5eb42dc1461046157600080fd5b8063bdd17e1c146103ad578063cdb9a21c146103c3578063d5002f2e146103d957600080fd5b8063a1903eab116100b0578063a1903eab1461035a578063a457c2d71461036d578063a9059cbb1461038d57600080fd5b80637a28fb88146102f457806395d89b411461031457600080fd5b806323b872dd1161012257806337cfdaca1161010757806337cfdaca1461020d57806339509351146102b457806370a08231146102d457600080fd5b806323b872dd14610278578063313ce5671461029857600080fd5b806318160ddd1161015357806318160ddd1461020d578063192084511461023057806322301f6e1461025057600080fd5b806306fdde0314610185578063095ea7b3146101dd57600080fd5b366101805761017d6000610481565b50005b600080fd5b34801561019157600080fd5b5060408051808201909152601781527f4c6971756964207374616b656420457468657220322e3000000000000000000060208201525b6040516101d49190610f63565b60405180910390f35b3480156101e957600080fd5b506101fd6101f8366004610fff565b610545565b60405190151581526020016101d4565b34801561021957600080fd5b5061022261055b565b6040519081526020016101d4565b34801561023c57600080fd5b5061022261024b366004611029565b61056b565b34801561025c57600080fd5b5061027661026b366004611042565b600391909155600255565b005b34801561028457600080fd5b506101fd610293366004611064565b6105ab565b3480156102a457600080fd5b50604051601281526020016101d4565b3480156102c057600080fd5b506101fd6102cf366004610fff565b610696565b3480156102e057600080fd5b506102226102ef3660046110a0565b6106d9565b34801561030057600080fd5b5061022261030f366004611029565b61070e565b34801561032057600080fd5b5060408051808201909152600581527f737445544800000000000000000000000000000000000000000000000000000060208201526101c7565b6102226103683660046110a0565b61073a565b34801561037957600080fd5b506101fd610388366004610fff565b610745565b34801561039957600080fd5b506101fd6103a8366004610fff565b6107f9565b3480156103b957600080fd5b5061022260035481565b3480156103cf57600080fd5b5061022260025481565b3480156103e557600080fd5b50610222610806565b3480156103fa57600080fd5b506102226104093660046110bb565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b34801561044d57600080fd5b5061027661045c366004610fff565b610811565b34801561046d57600080fd5b5061022261047c3660046110a0565b61081f565b60003334806104f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f5a45524f5f4445504f534954000000000000000000000000000000000000000060448201526064015b60405180910390fd5b60006104fc8261056b565b9050806105065750805b8160036000828254610518919061111d565b909155506105289050838261084a565b61053383838761093b565b61053d8382610992565b949350505050565b60006105523384846109ea565b50600192915050565b600061056660035490565b905090565b60008061057760035490565b9050806105875750600092915050565b6105a48161059e61059760025490565b8690610b52565b90610b5e565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001602090815260408083203384529091528120548281101561066c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f5452414e534645525f414d4f554e545f455843454544535f414c4c4f57414e4360448201527f450000000000000000000000000000000000000000000000000000000000000060648201526084016104e8565b610677858585610b6a565b61068b85336106868487610bef565b6109ea565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916105529185906106869086610bfb565b73ffffffffffffffffffffffffffffffffffffffff81166000908152602081905260408120546107089061070e565b92915050565b60008061071a60025490565b90508061072a5750600092915050565b6105a48161059e61059760035490565b600061070882610481565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156107e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4445435245415345445f414c4c4f57414e43455f42454c4f575f5a45524f000060448201526064016104e8565b6107ef33856106868487610bef565b5060019392505050565b6000610552338484610b6a565b600061056660025490565b61081b8282610c07565b5050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040812054610708565b73ffffffffffffffffffffffffffffffffffffffff82166108c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4d494e545f544f5f5448455f5a45524f5f41444452455353000000000000000060448201526064016104e8565b80600260008282546108d9919061111d565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205461090e9082610bfb565b73ffffffffffffffffffffffffffffffffffffffff90921660009081526020819052604090209190915550565b6040805183815273ffffffffffffffffffffffffffffffffffffffff83811660208301528516917fed8dd430b1e4bba98e943dc5b157cf7b54d9e12916d6c474ff5733a95001d03b910160405180910390a2505050565b73ffffffffffffffffffffffffffffffffffffffff821660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6109d58461070e565b60405190815260200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff8316610a67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f415050524f56455f46524f4d5f5a45524f5f414444524553530000000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff8216610ae4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f415050524f56455f544f5f5a45524f5f4144445245535300000000000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006105a48284611135565b60006105a48284611172565b6000610b758261056b565b9050610b82848483610d64565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610be191815260200190565b60405180910390a350505050565b60006105a482846111ad565b60006105a4828461111d565b73ffffffffffffffffffffffffffffffffffffffff8216610c84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4255524e5f46524f4d5f5448455f5a45524f5f4144445245535300000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205480821115610d14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4255524e5f414d4f554e545f455843454544535f42414c414e4345000000000060448201526064016104e8565b8160026000828254610d2691906111ad565b90915550610d3690508183610bef565b73ffffffffffffffffffffffffffffffffffffffff9093166000908152602081905260409020929092555050565b73ffffffffffffffffffffffffffffffffffffffff8316610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f5452414e534645525f46524f4d5f5448455f5a45524f5f41444452455353000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff8216610e5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f5452414e534645525f544f5f5448455f5a45524f5f414444524553530000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205480821115610eee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5452414e534645525f414d4f554e545f455843454544535f42414c414e43450060448201526064016104e8565b610ef88183610bef565b73ffffffffffffffffffffffffffffffffffffffff8086166000908152602081905260408082209390935590851681522054610f349083610bfb565b73ffffffffffffffffffffffffffffffffffffffff909316600090815260208190526040902092909255505050565b600060208083528351808285015260005b81811015610f9057858101830151858201604001528201610f74565b81811115610fa2576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ffa57600080fd5b919050565b6000806040838503121561101257600080fd5b61101b83610fd6565b946020939093013593505050565b60006020828403121561103b57600080fd5b5035919050565b6000806040838503121561105557600080fd5b50508035926020909101359150565b60008060006060848603121561107957600080fd5b61108284610fd6565b925061109060208501610fd6565b9150604084013590509250925092565b6000602082840312156110b257600080fd5b6105a482610fd6565b600080604083850312156110ce57600080fd5b6110d783610fd6565b91506110e560208401610fd6565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611130576111306110ee565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561116d5761116d6110ee565b500290565b6000826111a8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000828210156111bf576111bf6110ee565b50039056fea2646970667358221220a5b4f31162ba2b8b3424cef84b31ef91d05a825243602b5fdf758ffb49b8246364736f6c634300080a003360a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a003360c06040523480156200001157600080fd5b506040516200170938038062001709833981016040819052620000349162000266565b8351849084906200004d906003906020850190620000f3565b50805162000063906004906020840190620000f3565b505050620000806200007a6200009d60201b60201c565b620000a1565b60ff9091166080526001600160a01b031660a05250620003479050565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b82805462000101906200030a565b90600052602060002090601f01602090048101928262000125576000855562000170565b82601f106200014057805160ff191683800117855562000170565b8280016001018555821562000170579182015b828111156200017057825182559160200191906001019062000153565b506200017e92915062000182565b5090565b5b808211156200017e576000815560010162000183565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c157600080fd5b81516001600160401b0380821115620001de57620001de62000199565b604051601f8301601f19908116603f0116810190828211818310171562000209576200020962000199565b816040528381526020925086838588010111156200022657600080fd5b600091505b838210156200024a57858201830151818301840152908201906200022b565b838211156200025c5760008385830101525b9695505050505050565b600080600080608085870312156200027d57600080fd5b84516001600160401b03808211156200029557600080fd5b620002a388838901620001af565b95506020870151915080821115620002ba57600080fd5b50620002c987828801620001af565b935050604085015160ff81168114620002e157600080fd5b60608601519092506001600160a01b0381168114620002ff57600080fd5b939692955090935050565b600181811c908216806200031f57607f821691505b602082108114156200034157634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05161138e6200037b600039600081816101f70152818161041f0152610600015260006101a2015261138e6000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80636f307dc3116100b257806395d89b4111610081578063a9059cbb11610066578063a9059cbb146102b5578063dd62ed3e146102c8578063f2fde38b1461030e57600080fd5b806395d89b411461029a578063a457c2d7146102a257600080fd5b80636f307dc3146101f257806370a082311461023e578063715018a6146102745780638da5cb5b1461027c57600080fd5b806323b872dd116100ee57806323b872dd14610188578063313ce5671461019b57806339509351146101cc57806340c10f19146101df57600080fd5b806306fdde0314610120578063095ea7b31461013e57806318160ddd146101615780631e9a695014610173575b600080fd5b610128610321565b604051610135919061112d565b60405180910390f35b61015161014c3660046111c9565b6103b3565b6040519015158152602001610135565b6002545b604051908152602001610135565b6101866101813660046111c9565b6103c9565b005b6101516101963660046111f3565b610491565b60405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610135565b6101516101da3660046111c9565b61057c565b6101866101ed3660046111c9565b6105c5565b6102197f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b61016561024c36600461122f565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610186610691565b60055473ffffffffffffffffffffffffffffffffffffffff16610219565b61012861071e565b6101516102b03660046111c9565b61072d565b6101516102c33660046111c9565b610805565b6101656102d6366004611251565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b61018661031c36600461122f565b610812565b60606003805461033090611284565b80601f016020809104026020016040519081016040528092919081815260200182805461035c90611284565b80156103a95780601f1061037e576101008083540402835291602001916103a9565b820191906000526020600020905b81548152906001019060200180831161038c57829003601f168201915b5050505050905090565b60006103c0338484610942565b50600192915050565b6103d33382610af5565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015610468573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048c91906112d8565b505050565b600061049e848484610ce2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6105718533858403610942565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916103c09185906105c0908690611329565b610942565b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906323b872dd906064016020604051808303816000875af115801561065e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068291906112d8565b5061068d8282610f96565b5050565b60055473ffffffffffffffffffffffffffffffffffffffff163314610712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161055b565b61071c60006110b6565b565b60606004805461033090611284565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156107ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161055b565b6107fb3385858403610942565b5060019392505050565b60006103c0338484610ce2565b60055473ffffffffffffffffffffffffffffffffffffffff163314610893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161055b565b73ffffffffffffffffffffffffffffffffffffffff8116610936576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161055b565b61093f816110b6565b50565b73ffffffffffffffffffffffffffffffffffffffff83166109e4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff8216610a87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8216610b98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015610c4e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290610c8a908490611341565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff8216610e28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610ede576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610f22908490611329565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f8891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161055b565b80600260008282546110259190611329565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152602081905260408120805483929061105f908490611329565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208083528351808285015260005b8181101561115a5785810183015185820160400152820161113e565b8181111561116c576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146111c457600080fd5b919050565b600080604083850312156111dc57600080fd5b6111e5836111a0565b946020939093013593505050565b60008060006060848603121561120857600080fd5b611211846111a0565b925061121f602085016111a0565b9150604084013590509250925092565b60006020828403121561124157600080fd5b61124a826111a0565b9392505050565b6000806040838503121561126457600080fd5b61126d836111a0565b915061127b602084016111a0565b90509250929050565b600181811c9082168061129857607f821691505b602082108114156112d2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156112ea57600080fd5b8151801515811461124a57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561133c5761133c6112fa565b500190565b600082821015611353576113536112fa565b50039056fea26469706673582212203a6db30cd3c097921df4156794aa7973eb848711deeb2cffd7c54a9df1fdb0a564736f6c634300080a003360a060405234801561001057600080fd5b506040516106ca3803806106ca83398101604081905261002f9161006c565b60009190915560ff166080526001805460506001600160501b031991821681179092556004805490911690911790554260028190556003556100a2565b6000806040838503121561007f57600080fd5b82519150602083015160ff8116811461009757600080fd5b809150509250929050565b60805161060e6100bc600039600060d3015261060e6000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80639a6fc8f511610081578063d62ada111161005b578063d62ada11146102dc578063f7a30806146102f4578063feaf968c1461030757600080fd5b80639a6fc8f5146101cd578063bd18ad531461023a578063cd653afc1461024d57600080fd5b806354fd4d50116100b257806354fd4d501461012d57806367e8d83d1461013c5780637284e4161461018e57600080fd5b8063313ce567146100ce5780633fd0875f1461010c575b600080fd5b6100f57f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020015b60405180910390f35b6004546a0100000000000000000000900460ff166040516101039190610441565b60405160018152602001610103565b61018c61014a366004610482565b600480549115156c01000000000000000000000000027fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff909216919091179055565b005b604080518082018252600c81527f7072696365206f7261636c6500000000000000000000000000000000000000006020820152905161010391906104ab565b6102036101db36600461053d565b60015460005460025460035460045469ffffffffffffffffffff948516941691939590929450565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610103565b61018c610248366004610558565b61030f565b61018c61025b366004610579565b6001805469ffffffffffffffffffff9586167fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090911617905560029290925560035560048054919092167fffffffffffffffffffffffffffffffffffffffff00ff00000000000000000000909116176b020000000000000000000000179055565b6102e461035f565b6040519015158152602001610103565b61018c6103023660046105bf565b600055565b610203610385565b600480548291907fffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff166b01000000000000000000000083600281111561035757610357610412565b021790555050565b600454600090610380906b010000000000000000000000900460ff166103d6565b905090565b60008060008060006004600c9054906101000a900460ff16156103a757600080fd5b505060015460005460025460035460045469ffffffffffffffffffff9485169893975091955093509190911690565b600060028260028111156103ec576103ec610412565b14156103f757600080fd5b600182600281111561040b5761040b610412565b1492915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016006831061047c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561049457600080fd5b813580151581146104a457600080fd5b9392505050565b600060208083528351808285015260005b818110156104d8578581018301518582016040015282016104bc565b818111156104ea576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803569ffffffffffffffffffff8116811461053857600080fd5b919050565b60006020828403121561054f57600080fd5b6104a48261051e565b60006020828403121561056a57600080fd5b8135600381106104a457600080fd5b6000806000806080858703121561058f57600080fd5b6105988561051e565b935060208501359250604085013591506105b46060860161051e565b905092959194509250565b6000602082840312156105d157600080fd5b503591905056fea264697066735822122014874f7a973b86501c4c1a8be32490fe902c8f088ee234d25f9b2497e19f9e5264736f6c634300080a0033"; - -type TokensTestSuiteConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: TokensTestSuiteConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class TokensTestSuite__factory extends ContractFactory { - constructor(...args: TokensTestSuiteConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): TokensTestSuite { - return super.attach(address) as TokensTestSuite; - } - override connect(signer: Signer): TokensTestSuite__factory { - return super.connect(signer) as TokensTestSuite__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): TokensTestSuiteInterface { - return new utils.Interface(_abi) as TokensTestSuiteInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): TokensTestSuite { - return new Contract(address, _abi, signerOrProvider) as TokensTestSuite; - } -} diff --git a/src/types/factories/contracts/test/suites/index.ts b/src/types/factories/contracts/test/suites/index.ts deleted file mode 100644 index 9fc53dbb..00000000 --- a/src/types/factories/contracts/test/suites/index.ts +++ /dev/null @@ -1,10 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { BalanceHelper__factory } from "./BalanceHelper__factory"; -export { BaseCreditTestSuite__factory } from "./BaseCreditTestSuite__factory"; -export { CreditFacadeHelper__factory } from "./CreditFacadeHelper__factory"; -export { CreditFacadeTestSuite__factory } from "./CreditFacadeTestSuite__factory"; -export { CreditManagerTestSuite__factory } from "./CreditManagerTestSuite__factory"; -export { PoolServiceTestSuite__factory } from "./PoolServiceTestSuite__factory"; -export { TokensTestSuite__factory } from "./TokensTestSuite__factory"; diff --git a/src/types/factories/contracts/test/support/PauseMulticall.t.sol/PauseMulticallTest__factory.ts b/src/types/factories/contracts/test/support/PauseMulticall.t.sol/PauseMulticallTest__factory.ts deleted file mode 100644 index 8298da60..00000000 --- a/src/types/factories/contracts/test/support/PauseMulticall.t.sol/PauseMulticallTest__factory.ts +++ /dev/null @@ -1,398 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - PauseMulticallTest, - PauseMulticallTestInterface, -} from "../../../../../contracts/test/support/PauseMulticall.t.sol/PauseMulticallTest"; - -const _abi = [ - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "", - type: "address", - }, - ], - name: "log_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "log_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - name: "log_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "int256", - name: "", - type: "int256", - }, - ], - name: "log_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "address", - name: "val", - type: "address", - }, - ], - name: "log_named_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes", - name: "val", - type: "bytes", - }, - ], - name: "log_named_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes32", - name: "val", - type: "bytes32", - }, - ], - name: "log_named_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - ], - name: "log_named_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "string", - name: "val", - type: "string", - }, - ], - name: "log_named_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - ], - name: "log_named_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "log_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "logs", - type: "event", - }, - { - inputs: [], - name: "IS_TEST", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "failed", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "setUp", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_PM_01_constructor_sets_correct_values", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_PM_02_pauseAllCreditManagers_works_correctly", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_PM_03_pauseAllPools_works_correctly", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_PM_04_pauseAllContracts_works_correctly", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_PM_05_functions_revert_when_caller_not_pausable_admin", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, -]; - -const _bytecode = - "0x60806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d000117905534801561003957600080fd5b5062032a39806200004b6000396000f3fe60806040523480156200001157600080fd5b5060043610620000935760003560e01c80636e2eef9c11620000625780636e2eef9c14620000c2578063ba414fa614620000cc578063fa7626d414620000ea578063fb864ce514620000f857600080fd5b80630a9254e41462000098578063212902bf14620000a45780635ee50de714620000ae57806368f8382414620000b8575b600080fd5b620000a262000102565b005b620000a262000d1e565b620000a262000feb565b620000a262001228565b620000a262001773565b620000d662001ab1565b604051901515815260200160405180910390f35b600054620000d69060ff1681565b620000a262001c1b565b6040516200011090620022a9565b604051809103906000f0801580156200012d573d6000803e3d6000fd5b50600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691821790556040516001906000906200018690620022b7565b6200019493929190620022f0565b604051809103906000f080158015620001b1573d6000803e3d6000fd5b50600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169182179055604080517f2954018c0000000000000000000000000000000000000000000000000000000081529051632954018c916004808201926020929091908290030181865afa1580156200024b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200027191906200237e565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600154604080517f6b70b04c00000000000000000000000000000000000000000000000000000000815290519190921691636b70b04c9160048083019260209291908290030181865afa1580156200030e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033491906200237e565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600154604080517fc12c21c00000000000000000000000000000000000000000000000000000000081529051919092169163c12c21c09160048083019260209291908290030181865afa158015620003d1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003f791906200237e565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169182178155604080517f6f307dc30000000000000000000000000000000000000000000000000000000081529051636f307dc3928281019260209291908290030181865afa1580156200048d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004b391906200237e565b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600154604080517f62eb33e3000000000000000000000000000000000000000000000000000000008152905191909216916362eb33e39160048083019260209291908290030181865afa15801562000550573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200057691906200237e565b600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600354600854604051918316921690620005d190620022c6565b73ffffffffffffffffffffffffffffffffffffffff928316815291166020820152604001604051809103906000f08015801562000612573d6000803e3d6000fd5b50600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283161790556000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c86004820152620100009091049091169063ca669fa790602401600060405180830381600087803b158015620006c657600080fd5b505af1158015620006db573d6000803e3d6000fd5b50506009546007546040517fd914cd4b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529116925063d914cd4b9150602401600060405180830381600087803b1580156200074f57600080fd5b505af115801562000764573d6000803e3d6000fd5b505060075460405173ffffffffffffffffffffffffffffffffffffffff9091169250620007929150620022d4565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103906000f080158015620007cc573d6000803e3d6000fd5b50600580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283161790556000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c86004820152620100009091049091169063ca669fa790602401600060405180830381600087803b1580156200088057600080fd5b505af115801562000895573d6000803e3d6000fd5b50506009546005546040517fe26b2f6300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529116925063e26b2f639150602401600060405180830381600087803b1580156200090957600080fd5b505af11580156200091e573d6000803e3d6000fd5b505060035460405173ffffffffffffffffffffffffffffffffffffffff90911692506200094c9150620022e2565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103906000f08015801562000986573d6000803e3d6000fd5b50600a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283161790556000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015262010000909104909116906306447d5690602401600060405180830381600087803b15801562000a3a57600080fd5b505af115801562000a4f573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663de2873596040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000ac1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ae791906200237e565b600a546040517f4910832f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152911690634910832f90602401600060405180830381600087803b15801562000b5457600080fd5b505af115801562000b69573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663de2873596040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000bdb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c0191906200237e565b6040517f4910832f00000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015273ffffffffffffffffffffffffffffffffffffffff9190911690634910832f90602401600060405180830381600087803b15801562000c7f57600080fd5b505af115801562000c94573d6000803e3d6000fd5b50505050600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562000d0357600080fd5b505af115801562000d18573d6000803e3d6000fd5b50505050565b6000546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b15801562000da357600080fd5b505af115801562000db8573d6000803e3d6000fd5b50505050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663488bf5b46040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562000e2757600080fd5b505af115801562000e3c573d6000803e3d6000fd5b5050505062000f14600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000eb2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ed89190620023a5565b6040518060400160405280601181526020017f506f6f6c2031206e6f742070617573656400000000000000000000000000000081525062001e22565b600754604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905162000fe99273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa15801562000f87573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000fad9190620023a5565b6040518060400160405280601181526020017f506f6f6c2032206e6f742070617573656400000000000000000000000000000081525062001e22565b565b600a54604080517fde2873590000000000000000000000000000000000000000000000000000000081529051620011549273ffffffffffffffffffffffffffffffffffffffff169163de2873599160048083019260209291908290030181865afa1580156200105e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200108491906200237e565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663de2873596040518163ffffffff1660e01b8152600401602060405180830381865afa158015620010f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200111891906200237e565b6040518060400160405280601381526020017f41434c2073657420696e636f72726563746c790000000000000000000000000081525062001e70565b600a54604080517f62eb33e3000000000000000000000000000000000000000000000000000000008152905162000fe99273ffffffffffffffffffffffffffffffffffffffff16916362eb33e39160048083019260209291908290030181865afa158015620011c7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011ed91906200237e565b6009546040805160608101909152602180825273ffffffffffffffffffffffffffffffffffffffff90921691620329e3602083013962001e70565b6000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd794b1e70000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c31eb0e090602401600060405180830381600087803b158015620012b957600080fd5b505af1158015620012ce573d6000803e3d6000fd5b50506000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527390f79bf6eb2c4f870365e785982e1f101e93b90660048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063ca669fa79150602401600060405180830381600087803b1580156200135757600080fd5b505af11580156200136c573d6000803e3d6000fd5b50505050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636f0744366040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620013db57600080fd5b505af1158015620013f0573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd794b1e70000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b1580156200148557600080fd5b505af11580156200149a573d6000803e3d6000fd5b50506000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527390f79bf6eb2c4f870365e785982e1f101e93b90660048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063ca669fa79150602401600060405180830381600087803b1580156200152357600080fd5b505af115801562001538573d6000803e3d6000fd5b50505050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663488bf5b46040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620015a757600080fd5b505af1158015620015bc573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd794b1e70000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b1580156200165157600080fd5b505af115801562001666573d6000803e3d6000fd5b50506000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527390f79bf6eb2c4f870365e785982e1f101e93b90660048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063ca669fa79150602401600060405180830381600087803b158015620016ef57600080fd5b505af115801562001704573d6000803e3d6000fd5b50505050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637c205cc46040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562000d0357600080fd5b6000546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b158015620017f857600080fd5b505af11580156200180d573d6000803e3d6000fd5b50505050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637c205cc46040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200187c57600080fd5b505af115801562001891573d6000803e3d6000fd5b5050505062001969600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001907573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200192d9190620023a5565b6040518060400160405280601b81526020017f437265646974206d616e616765722031206e6f7420706175736564000000000081525062001e22565b600554604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905162001a3e9273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa158015620019dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001a029190620023a5565b6040518060400160405280601b81526020017f437265646974206d616e616765722032206e6f7420706175736564000000000081525062001e22565b600654604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905162000f149273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa15801562000eb2573d6000803e3d6000fd5b60008054610100900460ff161562001ad25750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1562001c165760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000008284015282518083038401815260608301909352600092909162001b7a917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc491608001620023f8565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905262001bb49162002442565b6000604051808303816000865af19150503d806000811462001bf3576040519150601f19603f3d011682016040523d82523d6000602084013e62001bf8565b606091505b509150508080602001905181019062001c129190620023a5565b9150505b919050565b6000546040517fca669fa700000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b15801562001ca057600080fd5b505af115801562001cb5573d6000803e3d6000fd5b50505050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636f0744366040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562001d2457600080fd5b505af115801562001d39573d6000803e3d6000fd5b5050505062001daf600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001907573d6000803e3d6000fd5b600554604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905162000fe99273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa158015620019dc573d6000803e3d6000fd5b8162001e6c577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf35838160405162001e59919062002460565b60405180910390a162001e6c8262001eee565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161462001ee9577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf35838160405162001ed5919062002460565b60405180910390a162001ee9838362001f69565b505050565b8062001f66577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f5060405162001f549060208082526017908201527f4572726f723a20417373657274696f6e204661696c6564000000000000000000604082015260600190565b60405180910390a162001f6662002126565b50565b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462001e6c577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f50604051620020239060208082526025908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b61646460408201527f726573735d000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a160408051818152600a818301527f2020457870656374656400000000000000000000000000000000000000000000606082015273ffffffffffffffffffffffffffffffffffffffff8316602082015290517f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f9181900360800190a160408051818152600a818301527f2020202041637475616c00000000000000000000000000000000000000000000606082015273ffffffffffffffffffffffffffffffffffffffff8416602082015290517f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f9181900360800190a162001e6c5b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200227b5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000009282019290925260016060820152600091907f70ca10bbd0dbfd9020a9f4b13402c16cb120705e0d1c0aeab10fa353ae586fc490608001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052620021f89291602001620023f8565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052620022329162002442565b6000604051808303816000865af19150503d806000811462002271576040519150601f19603f3d011682016040523d82523d6000602084013e62002276565b606091505b505050505b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055565b617a5180620024e883390190565b620213148062009f3983390190565b6110a7806202b24d83390190565b6158e8806202c2f483390190565b610e078062031bdc83390190565b73ffffffffffffffffffffffffffffffffffffffff8416815260608101600b841062002345577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8360208301528215156040830152949350505050565b73ffffffffffffffffffffffffffffffffffffffff8116811462001f6657600080fd5b6000602082840312156200239157600080fd5b81516200239e816200235b565b9392505050565b600060208284031215620023b857600080fd5b815180151581146200239e57600080fd5b60005b83811015620023e6578181015183820152602001620023cc565b8381111562000d185750506000910152565b7fffffffff00000000000000000000000000000000000000000000000000000000831681526000825162002434816004850160208701620023c9565b919091016004019392505050565b6000825162002456818460208701620023c9565b9190910192915050565b60408152600560408201527f4572726f7200000000000000000000000000000000000000000000000000000060608201526080602082015260008251806080840152620024b58160a0850160208701620023c9565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160a0019291505056fe60806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d00011790553480156200003a57600080fd5b506040805161018081019091526000908060c081018060018152604080518082018252600381526244414960e81b6020828101919091528301526012908201526305f5e100606082015260800160018152602001600081525081526020016040518060c001604052806002600a811115620000b957620000b962000b78565b815260408051808201825260048152635553444360e01b6020828101919091528301526006908201526305f5e100606082015260800160018152602001600081525081526020016040518060c001604052806003600a81111562000121576200012162000b78565b815260408051808201825260048152630ae8aa8960e31b602082810191909152830152601290820152644a817c8000606082015260800160028152602001600081525081526020016040518060c001604052806004600a8111156200018a576200018a62000b78565b815260408051808201825260048152634c494e4b60e01b6020828101919091528301526012908201526359682f00606082015260800160018152602001600081525081526020016040518060c001604052806005600a811115620001f257620001f262000b78565b815260408051808201825260048152631554d11560e21b602082810191909152830152601290820152633b023380606082015260800160018152602001600081525081526020016040518060c001604052806006600a8111156200025a576200025a62000b78565b815260408051808201825260058152640e6e88aa8960db1b602082810191909152830152601290820152644cd588640060608201526080016003815260200160009052905260408051610140810190915290915060009080608081018060078152602001604051806040016040528060048152602001636344414960e01b8152508152602001601260ff1681526020016305f5e100815260200160048081111562000309576200030962000b78565b8152602001600181525081526020016040518060c001604052806008600a81111562000339576200033962000b78565b81526040805180820182526005815264635553444360d81b6020828101919091528301526006908201526305f5e100606082015260800160048152602001600281525081526020016040518060c001604052806009600a811115620003a257620003a262000b78565b8152604080518082018252600581526418d554d11560da1b602082810191909152830152601290820152633b023380606082015260800160048152602001600581525081526020016040518060c00160405280600a808111156200040a576200040a62000b78565b81526040805180820182526005815264634c494e4b60d81b6020828101919091528301526012908201526359682f00606082015260800160048152602001600490529052905060005b600681101562000496576200048183826006811062000476576200047662000b8e565b6020020151620004db565b806200048d8162000ba4565b91505062000453565b5060005b6004811015620004d257620004bd82826004811062000476576200047662000b8e565b80620004c98162000ba4565b9150506200049a565b50505062000d14565b6000600282608001516004811115620004f857620004f862000b78565b14156200054e576040516200050d9062000a8c565b604051809103906000f0801580156200052a573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b03831617905590506200071e565b60038260800151600481111562000569576200056962000b78565b1415620005a4576040516200057e9062000a9a565b604051809103906000f0801580156200059b573d6000803e3d6000fd5b5090506200071e565b600182608001516004811115620005bf57620005bf62000b78565b1415620005f157816020015182602001518360400151604051620005e39062000aa8565b6200057e9392919062000c1e565b6004826080015160048111156200060c576200060c62000b78565b1415620006be576000600260008460a00151600a81111562000632576200063262000b78565b600a81111562000646576200064662000b78565b815260200190815260200160002060009054906101000a90046001600160a01b0316905082602001518360200151846040015183604051620006889062000ab6565b62000697949392919062000c5b565b604051809103906000f080158015620006b4573d6000803e3d6000fd5b509150506200071e565b60405162461bcd60e51b815260206004820152602b60248201527f74657374546f6b656e53756974653a204372656174696e6720756e6b6e6f776e60448201526a20746f6b656e207479706560a81b606482015260840160405180910390fd5b60005460208301516040516318caf8e360e31b8152620100009092046001600160a01b03169163c657c718916200075b9185919060040162000ca9565b600060405180830381600087803b1580156200077657600080fd5b505af11580156200078b573d6000803e3d6000fd5b50505050600082606001516008604051620007a69062000ac4565b91825260ff166020820152604001604051809103906000f080158015620007d1573d6000803e3d6000fd5b50905081600260008560000151600a811115620007f257620007f262000b78565b600a81111562000806576200080662000b78565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055508260600151600560008560000151600a8111156200085a576200085a62000b78565b600a8111156200086e576200086e62000b78565b8152602080820192909252604090810160009081209390935585516001600160a01b03861684526008909252909120805460ff1916600183600a811115620008ba57620008ba62000b78565b02179055508260800151600360008560000151600a811115620008e157620008e162000b78565b600a811115620008f557620008f562000b78565b81526020810191909152604001600020805460ff1916600183600481111562000922576200092262000b78565b0217905550604080518082019091526001600160a01b0380841682528281166020808401918252600780546001810182556000918252945160029095027fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688810180549686166001600160a01b031997881617905592517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c689909301805493909416929094169190911790915584015184519091600491600a811115620009eb57620009eb62000b78565b600a811115620009ff57620009ff62000b78565b8152602001908152602001600020908051906020019062000a2292919062000ad2565b5080600660008560000151600a81111562000a415762000a4162000b78565b600a81111562000a555762000a5562000b78565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550505050565b610ab1806200285183390190565b611224806200330283390190565b611758806200452683390190565b6117098062005c7e83390190565b6106ca806200738783390190565b82805462000ae09062000cd7565b90600052602060002090601f01602090048101928262000b04576000855562000b4f565b82601f1062000b1f57805160ff191683800117855562000b4f565b8280016001018555821562000b4f579182015b8281111562000b4f57825182559160200191906001019062000b32565b5062000b5d92915062000b61565b5090565b5b8082111562000b5d576000815560010162000b62565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600060001982141562000bc757634e487b7160e01b600052601160045260246000fd5b5060010190565b6000815180845260005b8181101562000bf65760208185018101518683018201520162000bd8565b8181111562000c09576000602083870101525b50601f01601f19169290920160200192915050565b60608152600062000c33606083018662000bce565b828103602084015262000c47818662000bce565b91505060ff83166040830152949350505050565b60808152600062000c70608083018762000bce565b828103602084015262000c84818762000bce565b60ff95909516604084015250506001600160a01b039190911660609091015292915050565b6001600160a01b038316815260406020820181905260009062000ccf9083018462000bce565b949350505050565b600181811c9082168062000cec57607f821691505b6020821081141562000d0e57634e487b7160e01b600052602260045260246000fd5b50919050565b611b2d8062000d246000396000f3fe6080604052600436106101635760003560e01c80638eb86e8b116100c0578063c6c3bbe611610074578063d051a62211610059578063d051a62214610490578063eebab8ef146104b0578063fa7626d4146104d057600080fd5b8063c6c3bbe614610433578063c74912d21461045357600080fd5b80639b140a85116100a55780639b140a85146103e6578063b36ba20814610406578063ba414fa61461040e57600080fd5b80638eb86e8b1461038357806398cdaadf146103a357600080fd5b80636a72bde71161011757806388327863116100fc578063883278631461030857806388f776a2146103365780638a3177a31461035657600080fd5b80636a72bde7146102c45780636ca42ae3146102e657600080fd5b8063440864fa11610148578063440864fa146102025780634b57b0be1461022f57806367b426451461028157600080fd5b806304bc3b1c1461016f57806310c7f0b9146101b557600080fd5b3661016a57005b600080fd5b34801561017b57600080fd5b5061019f61018a3660046116f6565b60086020526000908152604090205460ff1681565b6040516101ac9190611742565b60405180910390f35b3480156101c157600080fd5b506101d56101d036600461175c565b6104ea565b6040805173ffffffffffffffffffffffffffffffffffffffff9384168152929091166020830152016101ac565b34801561020e57600080fd5b5061022261021d366004611784565b610530565b6040516101ac91906117cb565b34801561023b57600080fd5b5060015461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101ac565b34801561028d57600080fd5b5061025c61029c366004611784565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156102d057600080fd5b506102e46102df36600461181c565b6105ca565b005b3480156102f257600080fd5b506102fb610730565b6040516101ac919061186b565b34801561031457600080fd5b506103286103233660046118d4565b6107b5565b6040519081526020016101ac565b34801561034257600080fd5b506102e461035136600461190b565b610888565b34801561036257600080fd5b50610328610371366004611784565b60056020526000908152604090205481565b34801561038f57600080fd5b506102e461039e366004611954565b6108b9565b3480156103af57600080fd5b5061025c6103be366004611784565b60066020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156103f257600080fd5b506102e4610401366004611993565b610a73565b6102e4610b22565b34801561041a57600080fd5b50610423610ba0565b60405190151581526020016101ac565b34801561043f57600080fd5b506102e461044e3660046119b3565b610d00565b34801561045f57600080fd5b5061048361046e366004611784565b60036020526000908152604090205460ff1681565b6040516101ac91906119d3565b34801561049c57600080fd5b506103286104ab36600461190b565b610daf565b3480156104bc57600080fd5b506102e46104cb366004611954565b610e8b565b3480156104dc57600080fd5b506000546104239060ff1681565b600781815481106104fa57600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff91821692501682565b60046020526000908152604090208054610549906119e7565b80601f0160208091040260200160405190810160405280929190818152602001828054610575906119e7565b80156105c25780601f10610597576101008083540402835291602001916105c2565b820191906000526020600020905b8154815290600101906020018083116105a557829003601f168201915b505050505081565b6000546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152620100009092049091169063ca669fa790602401600060405180830381600087803b15801561063e57600080fd5b505af1158015610652573d6000803e3d6000fd5b505050506002600085600a81111561066c5761066c611713565b600a81111561067d5761067d611713565b8152602081019190915260409081016000205490517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490529091169063095ea7b3906044016020604051808303816000875af1158015610705573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107299190611a3b565b5050505050565b60606007805480602002602001604051908101604052809291908181526020016000905b828210156107ac5760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff908116835260019182015416828401529083529092019101610754565b50505050905090565b60006002600084600a8111156107cd576107cd611713565b600a8111156107de576107de611713565b8152602081019190915260409081016000205490517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152909116906370a0823190602401602060405180830381865afa15801561085d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108819190611a5d565b9392505050565b6108b48383837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6105ca565b505050565b60016003600085600a8111156108d1576108d1611713565b600a8111156108e2576108e2611713565b815260208101919091526040016000205460ff16600481111561090757610907611713565b14610999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f74657374546f6b656e53756974653a20547279696e6720746f206275726e206160448201527f206e6f6e2d6e6f726d616c20746f6b656e00000000000000000000000000000060648201526084015b60405180910390fd5b6002600084600a8111156109af576109af611713565b600a8111156109c0576109c0611713565b8152602081019190915260409081016000205490517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526024820184905290911690639dc29fac906044015b6020604051808303816000875af1158015610a49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6d9190611a3b565b50505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604081205460ff169081600a811115610aaf57610aaf611713565b1415610b17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f20746f6b656e2077697468207375636820616464726573730000000000006044820152606401610990565b610a6d818484610888565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015610b8c57600080fd5b505af1158015610729573d6000803e3d6000fd5b60008054610100900460ff1615610bc05750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610cfb5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610c65917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc491608001611a76565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052610c9d91611abe565b6000604051808303816000865af19150503d8060008114610cda576040519150601f19603f3d011682016040523d82523d6000602084013e610cdf565b606091505b5091505080806020019051810190610cf79190611a3b565b9150505b919050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604081205460ff169081600a811115610d3c57610d3c611713565b1415610da4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f20746f6b656e2077697468207375636820616464726573730000000000006044820152606401610990565b610a6d818484610e8b565b60006002600085600a811115610dc757610dc7611713565b600a811115610dd857610dd8611713565b8152602081019190915260409081016000205490517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301529091169063dd62ed3e90604401602060405180830381865afa158015610e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e839190611a5d565b949350505050565b60026003600085600a811115610ea357610ea3611713565b600a811115610eb457610eb4611713565b815260208101919091526040016000205460ff166004811115610ed957610ed9611713565b1415610ff6576000546040517fc88a5e6d000000000000000000000000000000000000000000000000000000008152306004820152602481018390526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c88a5e6d90604401600060405180830381600087803b158015610f5657600080fd5b505af1158015610f6a573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015610fd857600080fd5b505af1158015610fec573d6000803e3d6000fd5b505050505061163c565b600380600085600a81111561100d5761100d611713565b600a81111561101e5761101e611713565b815260208101919091526040016000205460ff16600481111561104357611043611713565b14156111aa576000546040517fc88a5e6d000000000000000000000000000000000000000000000000000000008152306004820152602481018390526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c88a5e6d90604401600060405180830381600087803b1580156110c057600080fd5b505af11580156110d4573d6000803e3d6000fd5b505050506002600084600a8111156110ee576110ee611713565b600a8111156110ff576110ff611713565b8152602081019190915260409081016000205490517fa1903eab00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a1903eab90839060240160206040518083038185885af115801561117f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906111a49190611a5d565b5061163c565b60046003600085600a8111156111c2576111c2611713565b600a8111156111d3576111d3611713565b815260208101919091526040016000205460ff1660048111156111f8576111f8611713565b141561148f5760006002600085600a81111561121657611216611713565b600a81111561122757611227611713565b815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c49190611ada565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600860205260409020549091506112fb9060ff163084610e8b565b8073ffffffffffffffffffffffffffffffffffffffff1663095ea7b36002600087600a81111561132d5761132d611713565b600a81111561133e5761133e611713565b81526020810191909152604090810160002054905160e083901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602481018590526044016020604051808303816000875af11580156113c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e69190611a3b565b506002600085600a8111156113fd576113fd611713565b600a81111561140e5761140e611713565b8152602081019190915260409081016000205490517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810184905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f1990604401600060405180830381600087803b158015610fd857600080fd5b60016003600085600a8111156114a7576114a7611713565b600a8111156114b8576114b8611713565b815260208101919091526040016000205460ff1660048111156114dd576114dd611713565b14156115b4576002600084600a8111156114f9576114f9611713565b600a81111561150a5761150a611713565b8152602081019190915260409081016000205490517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f19906044016020604051808303816000875af1158015611590573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a49190611a3b565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f74657374546f6b656e53756974653a20547279696e6720746f207472616e736660448201527f657220756e6b6e6f776e20746f6b656e000000000000000000000000000000006064820152608401610990565b6002600084600a81111561165257611652611713565b600a81111561166357611663611713565b8152602081019190915260409081016000205490517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490529091169063a9059cbb90604401610a2a565b73ffffffffffffffffffffffffffffffffffffffff811681146116f357600080fd5b50565b60006020828403121561170857600080fd5b8135610881816116d1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60208101600b831061175657611756611713565b91905290565b60006020828403121561176e57600080fd5b5035919050565b8035600b8110610cfb57600080fd5b60006020828403121561179657600080fd5b61088182611775565b60005b838110156117ba5781810151838201526020016117a2565b83811115610a6d5750506000910152565b60208152600082518060208401526117ea81604085016020870161179f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000806080858703121561183257600080fd5b61183b85611775565b9350602085013561184b816116d1565b9250604085013561185b816116d1565b9396929550929360600135925050565b602080825282518282018190526000919060409081850190868401855b828110156118c7578151805173ffffffffffffffffffffffffffffffffffffffff90811686529087015116868501529284019290850190600101611888565b5091979650505050505050565b600080604083850312156118e757600080fd5b6118f083611775565b91506020830135611900816116d1565b809150509250929050565b60008060006060848603121561192057600080fd5b61192984611775565b92506020840135611939816116d1565b91506040840135611949816116d1565b809150509250925092565b60008060006060848603121561196957600080fd5b61197284611775565b92506020840135611982816116d1565b929592945050506040919091013590565b6000806000606084860312156119a857600080fd5b8335611929816116d1565b6000806000606084860312156119c857600080fd5b8335611972816116d1565b602081016005831061175657611756611713565b600181811c908216806119fb57607f821691505b60208210811415611a35577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600060208284031215611a4d57600080fd5b8151801515811461088157600080fd5b600060208284031215611a6f57600080fd5b5051919050565b7fffffffff000000000000000000000000000000000000000000000000000000008316815260008251611ab081600485016020870161179f565b919091016004019392505050565b60008251611ad081846020870161179f565b9190910192915050565b600060208284031215611aec57600080fd5b8151610881816116d156fea264697066735822122010fe735ed069aca27931edce4ba2ff14ec7886bf21b0eea685a884f9200fb49e64736f6c634300080a003360c0604052600d60808190526c2bb930b83832b21022ba3432b960991b60a090815261002e916000919061007a565b50604080518082019091526004808252630ae8aa8960e31b602090920191825261005a9160019161007a565b506002805460ff1916601217905534801561007457600080fd5b5061014e565b82805461008690610113565b90600052602060002090601f0160209004810192826100a857600085556100ee565b82601f106100c157805160ff19168380011785556100ee565b828001600101855582156100ee579182015b828111156100ee5782518255916020019190600101906100d3565b506100fa9291506100fe565b5090565b5b808211156100fa57600081556001016100ff565b600181811c9082168061012757607f821691505b6020821081141561014857634e487b7160e01b600052602260045260246000fd5b50919050565b6109548061015d6000396000f3fe6080604052600436106100cb5760003560e01c806340c10f1911610074578063a9059cbb1161004e578063a9059cbb14610225578063d0e30db014610245578063dd62ed3e1461024d57600080fd5b806340c10f19146101c357806370a08231146101e357806395d89b411461021057600080fd5b806323b872dd116100a557806323b872dd146101575780632e1a7d4d14610177578063313ce5671461019757600080fd5b806306fdde03146100df578063095ea7b31461010a57806318160ddd1461013a57600080fd5b366100da576100d8610285565b005b600080fd5b3480156100eb57600080fd5b506100f46102e0565b6040516101019190610703565b60405180910390f35b34801561011657600080fd5b5061012a61012536600461079f565b61036e565b6040519015158152602001610101565b34801561014657600080fd5b50475b604051908152602001610101565b34801561016357600080fd5b5061012a6101723660046107c9565b6103e7565b34801561018357600080fd5b506100d8610192366004610805565b6105fe565b3480156101a357600080fd5b506002546101b19060ff1681565b60405160ff9091168152602001610101565b3480156101cf57600080fd5b506100d86101de36600461079f565b6106a4565b3480156101ef57600080fd5b506101496101fe36600461081e565b60036020526000908152604090205481565b34801561021c57600080fd5b506100f46106e2565b34801561023157600080fd5b5061012a61024036600461079f565b6106ef565b6100d8610285565b34801561025957600080fd5b50610149610268366004610839565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102a490849061089b565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102ed906108b3565b80601f0160208091040260200160405190810160405280929190818152602001828054610319906108b3565b80156103665780601f1061033b57610100808354040283529160200191610366565b820191906000526020600020905b81548152906001019060200180831161034957829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103d69086815260200190565b60405180910390a350600192915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561041957600080fd5b73ffffffffffffffffffffffffffffffffffffffff8416331480159061048f575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105175773ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020548211156104d157600080fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915281208054849290610511908490610907565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061054c908490610907565b909155505073ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260408120805484929061058690849061089b565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516105ec91815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561061a57600080fd5b3360009081526003602052604081208054839290610639908490610907565b9091555050604051339082156108fc029083906000818181858888f1935050505015801561066b573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260036020526040812080548392906106d990849061089b565b90915550505050565b600180546102ed906108b3565b60006106fc3384846103e7565b9392505050565b600060208083528351808285015260005b8181101561073057858101830151858201604001528201610714565b81811115610742576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461079a57600080fd5b919050565b600080604083850312156107b257600080fd5b6107bb83610776565b946020939093013593505050565b6000806000606084860312156107de57600080fd5b6107e784610776565b92506107f560208501610776565b9150604084013590509250925092565b60006020828403121561081757600080fd5b5035919050565b60006020828403121561083057600080fd5b6106fc82610776565b6000806040838503121561084c57600080fd5b61085583610776565b915061086360208401610776565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156108ae576108ae61086c565b500190565b600181811c908216806108c757607f821691505b60208210811415610901577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000828210156109195761091961086c565b50039056fea26469706673582212206ec943fa4e3b70d8fca6c25b6aa26fa18e8f8952ce3bc4d5afcb443bf3097c0564736f6c634300080a003360806040526000600255600060035534801561001a57600080fd5b506111fa8061002a6000396000f3fe60806040526004361061016e5760003560e01c80637a28fb88116100cb578063bdd17e1c1161007f578063dd62ed3e11610059578063dd62ed3e146103ee578063ee7a7c0414610441578063f5eb42dc1461046157600080fd5b8063bdd17e1c146103ad578063cdb9a21c146103c3578063d5002f2e146103d957600080fd5b8063a1903eab116100b0578063a1903eab1461035a578063a457c2d71461036d578063a9059cbb1461038d57600080fd5b80637a28fb88146102f457806395d89b411461031457600080fd5b806323b872dd1161012257806337cfdaca1161010757806337cfdaca1461020d57806339509351146102b457806370a08231146102d457600080fd5b806323b872dd14610278578063313ce5671461029857600080fd5b806318160ddd1161015357806318160ddd1461020d578063192084511461023057806322301f6e1461025057600080fd5b806306fdde0314610185578063095ea7b3146101dd57600080fd5b366101805761017d6000610481565b50005b600080fd5b34801561019157600080fd5b5060408051808201909152601781527f4c6971756964207374616b656420457468657220322e3000000000000000000060208201525b6040516101d49190610f63565b60405180910390f35b3480156101e957600080fd5b506101fd6101f8366004610fff565b610545565b60405190151581526020016101d4565b34801561021957600080fd5b5061022261055b565b6040519081526020016101d4565b34801561023c57600080fd5b5061022261024b366004611029565b61056b565b34801561025c57600080fd5b5061027661026b366004611042565b600391909155600255565b005b34801561028457600080fd5b506101fd610293366004611064565b6105ab565b3480156102a457600080fd5b50604051601281526020016101d4565b3480156102c057600080fd5b506101fd6102cf366004610fff565b610696565b3480156102e057600080fd5b506102226102ef3660046110a0565b6106d9565b34801561030057600080fd5b5061022261030f366004611029565b61070e565b34801561032057600080fd5b5060408051808201909152600581527f737445544800000000000000000000000000000000000000000000000000000060208201526101c7565b6102226103683660046110a0565b61073a565b34801561037957600080fd5b506101fd610388366004610fff565b610745565b34801561039957600080fd5b506101fd6103a8366004610fff565b6107f9565b3480156103b957600080fd5b5061022260035481565b3480156103cf57600080fd5b5061022260025481565b3480156103e557600080fd5b50610222610806565b3480156103fa57600080fd5b506102226104093660046110bb565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b34801561044d57600080fd5b5061027661045c366004610fff565b610811565b34801561046d57600080fd5b5061022261047c3660046110a0565b61081f565b60003334806104f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f5a45524f5f4445504f534954000000000000000000000000000000000000000060448201526064015b60405180910390fd5b60006104fc8261056b565b9050806105065750805b8160036000828254610518919061111d565b909155506105289050838261084a565b61053383838761093b565b61053d8382610992565b949350505050565b60006105523384846109ea565b50600192915050565b600061056660035490565b905090565b60008061057760035490565b9050806105875750600092915050565b6105a48161059e61059760025490565b8690610b52565b90610b5e565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001602090815260408083203384529091528120548281101561066c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f5452414e534645525f414d4f554e545f455843454544535f414c4c4f57414e4360448201527f450000000000000000000000000000000000000000000000000000000000000060648201526084016104e8565b610677858585610b6a565b61068b85336106868487610bef565b6109ea565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916105529185906106869086610bfb565b73ffffffffffffffffffffffffffffffffffffffff81166000908152602081905260408120546107089061070e565b92915050565b60008061071a60025490565b90508061072a5750600092915050565b6105a48161059e61059760035490565b600061070882610481565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156107e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4445435245415345445f414c4c4f57414e43455f42454c4f575f5a45524f000060448201526064016104e8565b6107ef33856106868487610bef565b5060019392505050565b6000610552338484610b6a565b600061056660025490565b61081b8282610c07565b5050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040812054610708565b73ffffffffffffffffffffffffffffffffffffffff82166108c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4d494e545f544f5f5448455f5a45524f5f41444452455353000000000000000060448201526064016104e8565b80600260008282546108d9919061111d565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205461090e9082610bfb565b73ffffffffffffffffffffffffffffffffffffffff90921660009081526020819052604090209190915550565b6040805183815273ffffffffffffffffffffffffffffffffffffffff83811660208301528516917fed8dd430b1e4bba98e943dc5b157cf7b54d9e12916d6c474ff5733a95001d03b910160405180910390a2505050565b73ffffffffffffffffffffffffffffffffffffffff821660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6109d58461070e565b60405190815260200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff8316610a67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f415050524f56455f46524f4d5f5a45524f5f414444524553530000000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff8216610ae4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f415050524f56455f544f5f5a45524f5f4144445245535300000000000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006105a48284611135565b60006105a48284611172565b6000610b758261056b565b9050610b82848483610d64565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610be191815260200190565b60405180910390a350505050565b60006105a482846111ad565b60006105a4828461111d565b73ffffffffffffffffffffffffffffffffffffffff8216610c84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4255524e5f46524f4d5f5448455f5a45524f5f4144445245535300000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205480821115610d14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4255524e5f414d4f554e545f455843454544535f42414c414e4345000000000060448201526064016104e8565b8160026000828254610d2691906111ad565b90915550610d3690508183610bef565b73ffffffffffffffffffffffffffffffffffffffff9093166000908152602081905260409020929092555050565b73ffffffffffffffffffffffffffffffffffffffff8316610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f5452414e534645525f46524f4d5f5448455f5a45524f5f41444452455353000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff8216610e5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f5452414e534645525f544f5f5448455f5a45524f5f414444524553530000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205480821115610eee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5452414e534645525f414d4f554e545f455843454544535f42414c414e43450060448201526064016104e8565b610ef88183610bef565b73ffffffffffffffffffffffffffffffffffffffff8086166000908152602081905260408082209390935590851681522054610f349083610bfb565b73ffffffffffffffffffffffffffffffffffffffff909316600090815260208190526040902092909255505050565b600060208083528351808285015260005b81811015610f9057858101830151858201604001528201610f74565b81811115610fa2576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ffa57600080fd5b919050565b6000806040838503121561101257600080fd5b61101b83610fd6565b946020939093013593505050565b60006020828403121561103b57600080fd5b5035919050565b6000806040838503121561105557600080fd5b50508035926020909101359150565b60008060006060848603121561107957600080fd5b61108284610fd6565b925061109060208501610fd6565b9150604084013590509250925092565b6000602082840312156110b257600080fd5b6105a482610fd6565b600080604083850312156110ce57600080fd5b6110d783610fd6565b91506110e560208401610fd6565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611130576111306110ee565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561116d5761116d6110ee565b500290565b6000826111a8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000828210156111bf576111bf6110ee565b50039056fea2646970667358221220a5b4f31162ba2b8b3424cef84b31ef91d05a825243602b5fdf758ffb49b8246364736f6c634300080a003360a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a003360c06040523480156200001157600080fd5b506040516200170938038062001709833981016040819052620000349162000266565b8351849084906200004d906003906020850190620000f3565b50805162000063906004906020840190620000f3565b505050620000806200007a6200009d60201b60201c565b620000a1565b60ff9091166080526001600160a01b031660a05250620003479050565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b82805462000101906200030a565b90600052602060002090601f01602090048101928262000125576000855562000170565b82601f106200014057805160ff191683800117855562000170565b8280016001018555821562000170579182015b828111156200017057825182559160200191906001019062000153565b506200017e92915062000182565b5090565b5b808211156200017e576000815560010162000183565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c157600080fd5b81516001600160401b0380821115620001de57620001de62000199565b604051601f8301601f19908116603f0116810190828211818310171562000209576200020962000199565b816040528381526020925086838588010111156200022657600080fd5b600091505b838210156200024a57858201830151818301840152908201906200022b565b838211156200025c5760008385830101525b9695505050505050565b600080600080608085870312156200027d57600080fd5b84516001600160401b03808211156200029557600080fd5b620002a388838901620001af565b95506020870151915080821115620002ba57600080fd5b50620002c987828801620001af565b935050604085015160ff81168114620002e157600080fd5b60608601519092506001600160a01b0381168114620002ff57600080fd5b939692955090935050565b600181811c908216806200031f57607f821691505b602082108114156200034157634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05161138e6200037b600039600081816101f70152818161041f0152610600015260006101a2015261138e6000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80636f307dc3116100b257806395d89b4111610081578063a9059cbb11610066578063a9059cbb146102b5578063dd62ed3e146102c8578063f2fde38b1461030e57600080fd5b806395d89b411461029a578063a457c2d7146102a257600080fd5b80636f307dc3146101f257806370a082311461023e578063715018a6146102745780638da5cb5b1461027c57600080fd5b806323b872dd116100ee57806323b872dd14610188578063313ce5671461019b57806339509351146101cc57806340c10f19146101df57600080fd5b806306fdde0314610120578063095ea7b31461013e57806318160ddd146101615780631e9a695014610173575b600080fd5b610128610321565b604051610135919061112d565b60405180910390f35b61015161014c3660046111c9565b6103b3565b6040519015158152602001610135565b6002545b604051908152602001610135565b6101866101813660046111c9565b6103c9565b005b6101516101963660046111f3565b610491565b60405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610135565b6101516101da3660046111c9565b61057c565b6101866101ed3660046111c9565b6105c5565b6102197f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b61016561024c36600461122f565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610186610691565b60055473ffffffffffffffffffffffffffffffffffffffff16610219565b61012861071e565b6101516102b03660046111c9565b61072d565b6101516102c33660046111c9565b610805565b6101656102d6366004611251565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b61018661031c36600461122f565b610812565b60606003805461033090611284565b80601f016020809104026020016040519081016040528092919081815260200182805461035c90611284565b80156103a95780601f1061037e576101008083540402835291602001916103a9565b820191906000526020600020905b81548152906001019060200180831161038c57829003601f168201915b5050505050905090565b60006103c0338484610942565b50600192915050565b6103d33382610af5565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015610468573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048c91906112d8565b505050565b600061049e848484610ce2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6105718533858403610942565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916103c09185906105c0908690611329565b610942565b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906323b872dd906064016020604051808303816000875af115801561065e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068291906112d8565b5061068d8282610f96565b5050565b60055473ffffffffffffffffffffffffffffffffffffffff163314610712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161055b565b61071c60006110b6565b565b60606004805461033090611284565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156107ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161055b565b6107fb3385858403610942565b5060019392505050565b60006103c0338484610ce2565b60055473ffffffffffffffffffffffffffffffffffffffff163314610893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161055b565b73ffffffffffffffffffffffffffffffffffffffff8116610936576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161055b565b61093f816110b6565b50565b73ffffffffffffffffffffffffffffffffffffffff83166109e4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff8216610a87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8216610b98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015610c4e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290610c8a908490611341565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff8216610e28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610ede576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610f22908490611329565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f8891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161055b565b80600260008282546110259190611329565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152602081905260408120805483929061105f908490611329565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208083528351808285015260005b8181101561115a5785810183015185820160400152820161113e565b8181111561116c576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146111c457600080fd5b919050565b600080604083850312156111dc57600080fd5b6111e5836111a0565b946020939093013593505050565b60008060006060848603121561120857600080fd5b611211846111a0565b925061121f602085016111a0565b9150604084013590509250925092565b60006020828403121561124157600080fd5b61124a826111a0565b9392505050565b6000806040838503121561126457600080fd5b61126d836111a0565b915061127b602084016111a0565b90509250929050565b600181811c9082168061129857607f821691505b602082108114156112d2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156112ea57600080fd5b8151801515811461124a57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561133c5761133c6112fa565b500190565b600082821015611353576113536112fa565b50039056fea26469706673582212203a6db30cd3c097921df4156794aa7973eb848711deeb2cffd7c54a9df1fdb0a564736f6c634300080a003360a060405234801561001057600080fd5b506040516106ca3803806106ca83398101604081905261002f9161006c565b60009190915560ff166080526001805460506001600160501b031991821681179092556004805490911690911790554260028190556003556100a2565b6000806040838503121561007f57600080fd5b82519150602083015160ff8116811461009757600080fd5b809150509250929050565b60805161060e6100bc600039600060d3015261060e6000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80639a6fc8f511610081578063d62ada111161005b578063d62ada11146102dc578063f7a30806146102f4578063feaf968c1461030757600080fd5b80639a6fc8f5146101cd578063bd18ad531461023a578063cd653afc1461024d57600080fd5b806354fd4d50116100b257806354fd4d501461012d57806367e8d83d1461013c5780637284e4161461018e57600080fd5b8063313ce567146100ce5780633fd0875f1461010c575b600080fd5b6100f57f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020015b60405180910390f35b6004546a0100000000000000000000900460ff166040516101039190610441565b60405160018152602001610103565b61018c61014a366004610482565b600480549115156c01000000000000000000000000027fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff909216919091179055565b005b604080518082018252600c81527f7072696365206f7261636c6500000000000000000000000000000000000000006020820152905161010391906104ab565b6102036101db36600461053d565b60015460005460025460035460045469ffffffffffffffffffff948516941691939590929450565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610103565b61018c610248366004610558565b61030f565b61018c61025b366004610579565b6001805469ffffffffffffffffffff9586167fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090911617905560029290925560035560048054919092167fffffffffffffffffffffffffffffffffffffffff00ff00000000000000000000909116176b020000000000000000000000179055565b6102e461035f565b6040519015158152602001610103565b61018c6103023660046105bf565b600055565b610203610385565b600480548291907fffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff166b01000000000000000000000083600281111561035757610357610412565b021790555050565b600454600090610380906b010000000000000000000000900460ff166103d6565b905090565b60008060008060006004600c9054906101000a900460ff16156103a757600080fd5b505060015460005460025460035460045469ffffffffffffffffffff9485169893975091955093509190911690565b600060028260028111156103ec576103ec610412565b14156103f757600080fd5b600182600281111561040b5761040b610412565b1492915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016006831061047c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561049457600080fd5b813580151581146104a457600080fd5b9392505050565b600060208083528351808285015260005b818110156104d8578581018301518582016040015282016104bc565b818111156104ea576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803569ffffffffffffffffffff8116811461053857600080fd5b919050565b60006020828403121561054f57600080fd5b6104a48261051e565b60006020828403121561056a57600080fd5b8135600381106104a457600080fd5b6000806000806080858703121561058f57600080fd5b6105988561051e565b935060208501359250604085013591506105b46060860161051e565b905092959194509250565b6000602082840312156105d157600080fd5b503591905056fea264697066735822122014874f7a973b86501c4c1a8be32490fe902c8f088ee234d25f9b2497e19f9e5264736f6c634300080a003360806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d00011790553480156200003a57600080fd5b5060405162021314380380620213148339810160408190526200005d91620017f0565b82826040516200006d9062001790565b604051809103906000f0801580156200008a573d6000803e3d6000fd5b5050600180546001600160a01b0319166001600160a01b038416908117909155604080516325abd85f60e11b81529051634b57b0be916004808201926020929091908290030181865afa158015620000e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200010c91906200184b565b73c4375b7de8af5a38a93548eb8453a498222c4ff26040516200012f906200179e565b6001600160a01b03928316815291166020820152604001604051809103906000f08015801562000163573d6000803e3d6000fd5b50600380546001600160a01b0319166001600160a01b039290921691821790556040805163de28735960e01b8152905163de287359916004808201926020929091908290030181865afa158015620001bf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e591906200184b565b604051634910832f60e01b8152600080516020620212f483398151915260048201526001600160a01b039190911690634910832f90602401600060405180830381600087803b1580156200023857600080fd5b505af11580156200024d573d6000803e3d6000fd5b50505050600360009054906101000a90046001600160a01b03166001600160a01b031663de2873596040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002a5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002cb91906200184b565b60035460405163f2fde38b60e01b81526001600160a01b03918216600482015291169063f2fde38b90602401600060405180830381600087803b1580156200031257600080fd5b505af115801562000327573d6000803e3d6000fd5b505060035460015460408051636ca42ae360e01b815290516001600160a01b039384169550638874ff1f94509190921691636ca42ae39160048083019260009291908290030181865afa15801562000383573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620003ad9190810190620018e6565b6040518263ffffffff1660e01b8152600401620003cb9190620019d7565b600060405180830381600087803b158015620003e657600080fd5b505af1158015620003fb573d6000803e3d6000fd5b50505050600360009054906101000a90046001600160a01b03166001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000453573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200047991906200184b565b600280546001600160a01b0319166001600160a01b039290921691821790556040805163120d150d60e31b81529051639068a868916004808201926020929091908290030181865afa158015620004d4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004fa91906200184b565b600480546001600160a01b0319166001600160a01b0392831617815560025460408051631f94a27560e31b81529051919093169263fca513a892818101926020929091908290030181865afa15801562000558573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200057e91906200184b565b600880546001600160a01b0319166001600160a01b0392831617905560025460408051630873769560e01b81529051919092169163087376959160048083019260209291908290030181865afa158015620005dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200060391906200184b565b600780546001600160a01b0319166001600160a01b039283161790556002546040805163c513c9bb60e01b81529051919092169163c513c9bb9160048083019260209291908290030181865afa15801562000662573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200068891906200184b565b600680546001600160a01b0319166001600160a01b039283161790556001546040516367b4264560e01b81529116906367b4264590620006cd90849060040162001a6e565b602060405180830381865afa158015620006eb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200071191906200184b565b600980546001600160a01b0319166001600160a01b0392831617905560035460408051630a55006360e21b815290519190921691632954018c9160048083019260209291908290030181865afa15801562000770573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200079691906200184b565b6009546040516001600160a01b0390911690620007b390620017ad565b6001600160a01b03928316815291166020820152604001604051809103906000f080158015620007e7573d6000803e3d6000fd5b50600580546001600160a01b0319166001600160a01b039283169081179091556001549091169063eebab8ef908390620008206200113e565b6200082d90600a62001a9a565b6040518463ffffffff1660e01b81526004016200084d9392919062001abc565b600060405180830381600087803b1580156200086857600080fd5b505af11580156200087d573d6000803e3d6000fd5b505060065460055460405163d914cd4b60e01b81526001600160a01b0391821660048201529116925063d914cd4b9150602401600060405180830381600087803b158015620008cb57600080fd5b505af1158015620008e0573d6000803e3d6000fd5b505050505050806200093d576005546040516001600160a01b03909116906200090990620017bb565b6001600160a01b039091168152602001604051809103906000f08015801562000936573d6000803e3d6000fd5b5062000989565b6005546040516001600160a01b03909116906200095a90620017c9565b6001600160a01b039091168152602001604051809103906000f08015801562000987573d6000803e3d6000fd5b505b600b80546001600160a01b03929092166001600160a01b03199283168117909155600d80549092163317909155604051634fafc35760e11b8152600080516020620212f48339815191526004820152639f5f86ae90602401600060405180830381600087803b158015620009fc57600080fd5b505af115801562000a11573d6000803e3d6000fd5b50506000546040516303223eab60e11b8152600080516020620212f48339815191526004820152620100009091046001600160a01b031692506306447d569150602401600060405180830381600087803b15801562000a6f57600080fd5b505af115801562000a84573d6000803e3d6000fd5b5050600b54600d5460408051632630c12f60e01b815290516001600160a01b0393841695506311ca4fc2945092909116918491632630c12f9160048083019260209291908290030181865afa15801562000ae2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b0891906200184b565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401600060405180830381600087803b15801562000b5157600080fd5b505af115801562000b66573d6000803e3d6000fd5b5050600b546001600160a01b0316915063944ac59f90506103e860c862000b926101f461271062001ae6565b606462000ba360c861271062001ae6565b60405160e087901b6001600160e01b031916815261ffff95861660048201529385166024850152918416604484015283166064830152909116608482015260a401600060405180830381600087803b15801562000bff57600080fd5b505af115801562000c14573d6000803e3d6000fd5b50505050600062000c2c6001620011fd60201b60201c565b905060005b815181101562000dbd5760095482516001600160a01b039091169083908390811062000c615762000c6162001b0c565b6020026020010151600001516001600160a01b03161462000da857600082828151811062000c935762000c9362001b0c565b602090810291909101015151600b5460405163d48bfca760e01b81526001600160a01b03808416600483015292935091169063d48bfca790602401600060405180830381600087803b15801562000ce957600080fd5b505af115801562000cfe573d6000803e3d6000fd5b5050600b5485516001600160a01b03909116925063a70bc5429150839086908690811062000d305762000d3062001b0c565b6020026020010151602001516040518363ffffffff1660e01b815260040162000d729291906001600160a01b0392909216825261ffff16602082015260400190565b600060405180830381600087803b15801562000d8d57600080fd5b505af115801562000da2573d6000803e3d6000fd5b50505050505b8062000db48162001b22565b91505062000c31565b50600060029054906101000a90046001600160a01b03166001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562000e0f57600080fd5b505af115801562000e24573d6000803e3d6000fd5b5050505062000ef1600b60009054906101000a90046001600160a01b03166001600160a01b031663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000e80573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ea691906200184b565b60408051808201909152601781527f436f6e666967757261746f72207761736e2774207365740000000000000000006020820152600080516020620212f483398151915290620014e7565b600654600b5460405163e26b2f6360e01b81526001600160a01b03918216600482015291169063e26b2f6390602401600060405180830381600087803b15801562000f3b57600080fd5b505af115801562000f50573d6000803e3d6000fd5b5050600154600b5460405163447bbb5160e11b81526001600160a01b0392831694506388f776a2935062000fa292889273f39fd6e51aad88f6f4ce6ab8827279cfffb922669291169060040162001b40565b600060405180830381600087803b15801562000fbd57600080fd5b505af115801562000fd2573d6000803e3d6000fd5b5050600154600b5460405163447bbb5160e11b81526001600160a01b0392831694506388f776a2935062001024928892733c44cdddb6a900fa2b585dd299e03d12fa4293bc9291169060040162001b40565b600060405180830381600087803b1580156200103f57600080fd5b505af115801562001054573d6000803e3d6000fd5b505060025460405163f2fde38b60e01b8152600080516020620212f483398151915260048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b158015620010ad57600080fd5b505af1158015620010c2573d6000803e3d6000fd5b505060075460405163f2fde38b60e01b8152600080516020620212f483398151915260048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b1580156200111b57600080fd5b505af115801562001130573d6000803e3d6000fd5b505050505050505062001c47565b600180546040516367b4264560e01b81526000926001600160a01b03909216916367b426459162001173919060040162001a6e565b602060405180830381865afa15801562001191573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011b791906200184b565b6009546001600160a01b03908116911614620011e757620011e2670de0b6b3a764000060c862001a9a565b905090565b620011e2670de0b6b3a7640000614e2062001a9a565b6040805160c08101825260026080820190815261232860a08301528152815180830183526005815261226060208281019190915282015281518083018352606092600092919082019080600387600a8111156200125e576200125e62001a35565b146200126c5760036200126f565b60015b600a81111562001283576200128362001a35565b815261206c6020918201529082526040805180820190915260048152611c84818301529101529050612454600a60008582811115620012c657620012c662001a35565b600a811115620012da57620012da62001a35565b815260208101919091526040908101600020805461ffff9390931661ffff19909316929092179091558051600480825260a0820190925281816020015b60408051808201909152600080825260208201528152602001906001900390816200131757905050925060005b81811015620014df5782816004811062001362576200136262001b0c565b602002015160200151600a600085846004811062001384576200138462001b0c565b602002015151600a8111156200139e576200139e62001a35565b600a811115620013b257620013b262001a35565b815260208101919091526040908101600020805461ffff191661ffff9390931692909217909155805180820190915260015481906001600160a01b03166367b4264586856004811062001409576200140962001b0c565b6020020151516040516001600160e01b031960e084901b16815262001432919060040162001a6e565b602060405180830381865afa15801562001450573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200147691906200184b565b6001600160a01b0316815260200184836004811062001499576200149962001b0c565b60200201516020015161ffff16815250848281518110620014be57620014be62001b0c565b60200260200101819052508080620014d69062001b22565b91505062001344565b505050919050565b816001600160a01b0316836001600160a01b03161462001546577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf35838160405162001532919062001ba5565b60405180910390a16200154683836200154b565b505050565b806001600160a01b0316826001600160a01b03161462001679577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f50604051620015d39060208082526025908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b616464604082015264726573735d60d81b606082015260800190565b60405180910390a160408051818152600a81830152690808115e1c1958dd195960b21b60608201526001600160a01b03831660208201529051600080516020620212d48339815191529181900360800190a160408051818152600a8183015269080808081058dd1d585b60b21b60608201526001600160a01b03841660208201529051600080516020620212d48339815191529181900360800190a1620016796200167d565b5050565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200177f5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190526519985a5b195960d21b9282019290925260016060820152600091907f70ca10bbd0dbfd9020a9f4b13402c16cb120705e0d1c0aeab10fa353ae586fc49060800160408051601f19818403018152908290526200171a929160200162001bf6565b60408051601f1981840301815290829052620017369162001c29565b6000604051808303816000865af19150503d806000811462001775576040519150601f19603f3d011682016040523d82523d6000602084013e6200177a565b606091505b505050505b6000805461ff001916610100179055565b6105e680620035d683390190565b620111058062003bbc83390190565b6110a78062014cc183390190565b6158e88062015d6883390190565b615c84806201b65083390190565b6001600160a01b0381168114620017ed57600080fd5b50565b6000806000606084860312156200180657600080fd5b83516200181381620017d7565b6020850151909350600b81106200182957600080fd5b604085015190925080151581146200184057600080fd5b809150509250925092565b6000602082840312156200185e57600080fd5b81516200186b81620017d7565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715620018ad57620018ad62001872565b60405290565b604051601f8201601f191681016001600160401b0381118282101715620018de57620018de62001872565b604052919050565b60006020808385031215620018fa57600080fd5b82516001600160401b03808211156200191257600080fd5b818501915085601f8301126200192757600080fd5b8151818111156200193c576200193c62001872565b6200194c848260051b01620018b3565b818152848101925060069190911b8301840190878211156200196d57600080fd5b928401925b81841015620019cc57604084890312156200198d5760008081fd5b6200199762001888565b8451620019a481620017d7565b815284860151620019b581620017d7565b818701528352604093909301929184019162001972565b979650505050505050565b602080825282518282018190526000919060409081850190868401855b8281101562001a2857815180516001600160a01b0390811686529087015116868501529284019290850190600101620019f4565b5091979650505050505050565b634e487b7160e01b600052602160045260246000fd5b600b811062001a6a57634e487b7160e01b600052602160045260246000fd5b9052565b6020810162001a7e828462001a4b565b92915050565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161562001ab75762001ab762001a84565b500290565b6060810162001acc828662001a4b565b6001600160a01b0393909316602082015260400152919050565b600061ffff8381169083168181101562001b045762001b0462001a84565b039392505050565b634e487b7160e01b600052603260045260246000fd5b600060001982141562001b395762001b3962001a84565b5060010190565b6060810162001b50828662001a4b565b6001600160a01b03938416602083015291909216604090920191909152919050565b60005b8381101562001b8f57818101518382015260200162001b75565b8381111562001b9f576000848401525b50505050565b60408152600560408201526422b93937b960d91b6060820152608060208201526000825180608084015262001be28160a085016020870162001b72565b601f01601f19169190910160a00192915050565b6001600160e01b031983168152815160009062001c1b81600485016020870162001b72565b919091016004019392505050565b6000825162001c3d81846020870162001b72565b9190910192915050565b61197f8062001c576000396000f3fe608060405234801561001057600080fd5b50600436106101365760003560e01c80636b70b04c116100b2578063ba414fa611610081578063d46b933011610066578063d46b933014610350578063de28735914610370578063fa7626d41461039057600080fd5b8063ba414fa614610318578063c12c21c01461033057600080fd5b80636b70b04c146102b05780636f307dc3146102d05780637d6bc094146102f05780639dd55b451461030357600080fd5b8063406c8e2f116101095780635e813a8b116100ee5780635e813a8b1461025a5780635f7c9bd01461027a57806362eb33e31461029057600080fd5b8063406c8e2f146101fc5780635aba4b241461021c57600080fd5b80630c75f8061461013b5780630e42bc5d146101775780632630c12f146101975780632954018c146101dc575b600080fd5b61015f610149366004610f08565b600a6020526000908152604090205461ffff1681565b60405161ffff90911681526020015b60405180910390f35b61018a610185366004610f08565b61039d565b60405161016e9190610f30565b6008546101b79073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016e565b6002546101b79073ffffffffffffffffffffffffffffffffffffffff1681565b6001546101b79073ffffffffffffffffffffffffffffffffffffffff1681565b6102246106c6565b6040805194855260208501939093529183015273ffffffffffffffffffffffffffffffffffffffff16606082015260800161016e565b6004546101b79073ffffffffffffffffffffffffffffffffffffffff1681565b6102826106e5565b60405190815260200161016e565b6006546101b79073ffffffffffffffffffffffffffffffffffffffff1681565b6005546101b79073ffffffffffffffffffffffffffffffffffffffff1681565b6009546101b79073ffffffffffffffffffffffffffffffffffffffff1681565b6102246102fe366004610f99565b6107cd565b610316610311366004610fd7565b610c2f565b005b610320610d9b565b604051901515815260200161016e565b600b546101b79073ffffffffffffffffffffffffffffffffffffffff1681565b6003546101b79073ffffffffffffffffffffffffffffffffffffffff1681565b6007546101b79073ffffffffffffffffffffffffffffffffffffffff1681565b6000546103209060ff1681565b6040805160c08101825260026080820190815261232860a08301528152815180830183526005815261226060208281019190915282015281518083018352606092600092919082019080600387600a8111156103fb576103fb611003565b1461040757600361040a565b60015b600a81111561041b5761041b611003565b815261206c6020918201529082526040805180820190915260048152611c84818301529101529050612454600a6000858281111561045b5761045b611003565b600a81111561046c5761046c611003565b815260208101919091526040908101600020805461ffff939093167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909316929092179091558051600480825260a0820190925281816020015b60408051808201909152600080825260208201528152602001906001900390816104c657905050925060005b818110156106be5782816004811061050c5761050c611032565b602002015160200151600a600085846004811061052b5761052b611032565b602002015151600a81111561054257610542611003565b600a81111561055357610553611003565b81526020810191909152604090810160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff93909316929092179091558051808201909152600154819073ffffffffffffffffffffffffffffffffffffffff166367b426458685600481106105d1576105d1611032565b6020020151516040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526106109190600401611061565b602060405180830381865afa15801561062d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061065191906110a2565b73ffffffffffffffffffffffffffffffffffffffff16815260200184836004811061067e5761067e611032565b60200201516020015161ffff168152508482815181106106a0576106a0611032565b602002602001018190525080806106b6906110ee565b9150506104f2565b505050919050565b6000806000806106d76102fe6106e5565b935093509350935090919293565b600180546040517f67b4264500000000000000000000000000000000000000000000000000000000815260009273ffffffffffffffffffffffffffffffffffffffff909216916367b426459161073e9190600401611061565b602060405180830381865afa15801561075b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077f91906110a2565b60095473ffffffffffffffffffffffffffffffffffffffff9081169116146107b9576107b4670de0b6b3a764000060c8611127565b905090565b6107b4670de0b6b3a7640000614e20611127565b600080546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015282918291829162010000900473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b15801561085757600080fd5b505af115801561086b573d6000803e3d6000fd5b5050600b5460095473ffffffffffffffffffffffffffffffffffffffff918216935063a70bc5429250166101f46108a560c8612710611164565b6108af9190611164565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015261ffff166024820152604401600060405180830381600087803b15801561091e57600080fd5b505af1158015610932573d6000803e3d6000fd5b50506005546040517f96df5dc00000000000000000000000000000000000000000000000000000000081526b033b2e3c9fd0803ce800000060048201819052899850965073ffffffffffffffffffffffffffffffffffffffff90911692506396df5dc09150602401600060405180830381600087803b1580156109b457600080fd5b505af11580156109c8573d6000803e3d6000fd5b5050600054600d546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526201000090920416925063ca669fa79150602401600060405180830381600087803b158015610a4157600080fd5b505af1158015610a55573d6000803e3d6000fd5b5050600b546040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810188905273f39fd6e51aad88f6f4ce6ab8827279cfffb92266602482015273ffffffffffffffffffffffffffffffffffffffff9091169250638fe3f93f91506044016020604051808303816000875af1158015610ae4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0891906110a2565b60005490915062010000900473ffffffffffffffffffffffffffffffffffffffff16631f7b4f30610b3a436001611187565b6040518263ffffffff1660e01b8152600401610b5891815260200190565b600060405180830381600087803b158015610b7257600080fd5b505af1158015610b86573d6000803e3d6000fd5b50505050600a83600c610b999190611127565b610ba3919061119f565b6005546040517f96df5dc00000000000000000000000000000000000000000000000000000000081526004810183905291935073ffffffffffffffffffffffffffffffffffffffff16906396df5dc090602401600060405180830381600087803b158015610c1057600080fd5b505af1158015610c24573d6000803e3d6000fd5b505050509193509193565b6000816008604051610c4090610efb565b91825260ff166020820152604001604051809103906000f080158015610c6a573d6000803e3d6000fd5b506000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291925062010000900473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b158015610cf157600080fd5b505af1158015610d05573d6000803e3d6000fd5b50506008546040517fe8a97a3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528581166024830152909116925063e8a97a3e9150604401600060405180830381600087803b158015610d7e57600080fd5b505af1158015610d92573d6000803e3d6000fd5b50505050505050565b60008054610100900460ff1615610dbb5750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610ef65760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610e60917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc491608001611215565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052610e9891611251565b6000604051808303816000865af19150503d8060008114610ed5576040519150601f19603f3d011682016040523d82523d6000602084013e610eda565b606091505b5091505080806020019051810190610ef2919061125d565b9150505b919050565b6106ca8061128083390190565b600060208284031215610f1a57600080fd5b8135600b8110610f2957600080fd5b9392505050565b602080825282518282018190526000919060409081850190868401855b82811015610f8c578151805173ffffffffffffffffffffffffffffffffffffffff16855286015161ffff16868501529284019290850190600101610f4d565b5091979650505050505050565b600060208284031215610fab57600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff81168114610fd457600080fd5b50565b60008060408385031215610fea57600080fd5b8235610ff581610fb2565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60208101600b831061109c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000602082840312156110b457600080fd5b8151610f2981610fb2565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611120576111206110bf565b5060010190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561115f5761115f6110bf565b500290565b600061ffff8381169083168181101561117f5761117f6110bf565b039392505050565b6000821982111561119a5761119a6110bf565b500190565b6000826111d5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000815160005b818110156111fb57602081850181015186830152016111e1565b8181111561120a576000828601525b509290920192915050565b7fffffffff0000000000000000000000000000000000000000000000000000000083168152600061124960048301846111da565b949350505050565b6000610f2982846111da565b60006020828403121561126f57600080fd5b81518015158114610f2957600080fdfe60a060405234801561001057600080fd5b506040516106ca3803806106ca83398101604081905261002f9161006c565b60009190915560ff166080526001805460506001600160501b031991821681179092556004805490911690911790554260028190556003556100a2565b6000806040838503121561007f57600080fd5b82519150602083015160ff8116811461009757600080fd5b809150509250929050565b60805161060e6100bc600039600060d3015261060e6000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80639a6fc8f511610081578063d62ada111161005b578063d62ada11146102dc578063f7a30806146102f4578063feaf968c1461030757600080fd5b80639a6fc8f5146101cd578063bd18ad531461023a578063cd653afc1461024d57600080fd5b806354fd4d50116100b257806354fd4d501461012d57806367e8d83d1461013c5780637284e4161461018e57600080fd5b8063313ce567146100ce5780633fd0875f1461010c575b600080fd5b6100f57f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020015b60405180910390f35b6004546a0100000000000000000000900460ff166040516101039190610441565b60405160018152602001610103565b61018c61014a366004610482565b600480549115156c01000000000000000000000000027fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff909216919091179055565b005b604080518082018252600c81527f7072696365206f7261636c6500000000000000000000000000000000000000006020820152905161010391906104ab565b6102036101db36600461053d565b60015460005460025460035460045469ffffffffffffffffffff948516941691939590929450565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610103565b61018c610248366004610558565b61030f565b61018c61025b366004610579565b6001805469ffffffffffffffffffff9586167fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090911617905560029290925560035560048054919092167fffffffffffffffffffffffffffffffffffffffff00ff00000000000000000000909116176b020000000000000000000000179055565b6102e461035f565b6040519015158152602001610103565b61018c6103023660046105bf565b600055565b610203610385565b600480548291907fffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff166b01000000000000000000000083600281111561035757610357610412565b021790555050565b600454600090610380906b010000000000000000000000900460ff166103d6565b905090565b60008060008060006004600c9054906101000a900460ff16156103a757600080fd5b505060015460005460025460035460045469ffffffffffffffffffff9485169893975091955093509190911690565b600060028260028111156103ec576103ec610412565b14156103f757600080fd5b600182600281111561040b5761040b610412565b1492915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016006831061047c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561049457600080fd5b813580151581146104a457600080fd5b9392505050565b600060208083528351808285015260005b818110156104d8578581018301518582016040015282016104bc565b818111156104ea576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803569ffffffffffffffffffff8116811461053857600080fd5b919050565b60006020828403121561054f57600080fd5b6104a48261051e565b60006020828403121561056a57600080fd5b8135600381106104a457600080fd5b6000806000806080858703121561058f57600080fd5b6105988561051e565b935060208501359250604085013591506105b46060860161051e565b905092959194509250565b6000602082840312156105d157600080fd5b503591905056fea264697066735822122014874f7a973b86501c4c1a8be32490fe902c8f088ee234d25f9b2497e19f9e5264736f6c634300080a0033a2646970667358221220db8bf1b20c3ed39fd8eb2d77267ba8a606c43060a1321f93c24a8edb8117a9fb64736f6c634300080a003360806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d000117905534801561003957600080fd5b50600054604080516318caf8e360e31b815273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660048083019190915260248201929092526044810191909152632aa9a2a960e11b6064820152620100009091046001600160a01b03169063c657c71890608401600060405180830381600087803b1580156100ba57600080fd5b505af11580156100ce573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b81527390f79bf6eb2c4f870365e785982e1f101e93b90660048201526024810191909152600660448201526511949251539160d21b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561014f57600080fd5b505af1158015610163573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b8152733c44cdddb6a900fa2b585dd299e03d12fa4293bc60048201526024810191909152600a6044820152692624a8aaa4a220aa27a960b11b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b1580156101e857600080fd5b505af11580156101fc573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b815273c4375b7de8af5a38a93548eb8453a498222c4ff260048201526024810191909152600c60448201526b44554d425f4144445245535360a01b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561028357600080fd5b505af1158015610297573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b8152739965507d1a55bcc2695c58ba16fb37d819b0a4dc60048201526024810191909152600760448201526620a220a82a22a960c91b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561031957600080fd5b505af115801561032d573d6000803e3d6000fd5b505050506102a6806103406000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063ba414fa61461003b578063fa7626d414610057575b600080fd5b610043610064565b604051901515815260200160405180910390f35b6000546100439060ff1681565b60008054610100900460ff16156100845750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156101bf5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610129917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016101ff565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526101619161023b565b6000604051808303816000865af19150503d806000811461019e576040519150601f19603f3d011682016040523d82523d6000602084013e6101a3565b606091505b50915050808060200190518101906101bb919061024e565b9150505b919050565b6000815160005b818110156101e557602081850181015186830152016101cb565b818111156101f4576000828601525b509290920192915050565b7fffffffff0000000000000000000000000000000000000000000000000000000083168152600061023360048301846101c4565b949350505050565b600061024782846101c4565b9392505050565b60006020828403121561026057600080fd5b8151801515811461024757600080fdfea2646970667358221220293f55a0ef7b60c31a89dbc50e3339c80a8fdb1f9567614b200e97598226671f64736f6c634300080a003360806040523480156200001157600080fd5b506040516201110538038062011105833981016040819052620000349162000811565b6200003f3362000734565b6040516200004d9062000784565b604051809103906000f0801580156200006a573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b039283169081179091556040516310dc138160e31b81529184166004830152906386e09c0890602401600060405180830381600087803b158015620000c457600080fd5b505af1158015620000d9573d6000803e3d6000fd5b50506001546040516301ed651160e41b81526001600160a01b0385811660048301529091169250631ed651109150602401600060405180830381600087803b1580156200012557600080fd5b505af11580156200013a573d6000803e3d6000fd5b505050506040516200014c9062000792565b604051809103906000f08015801562000169573d6000803e3d6000fd5b50600280546001600160a01b0319166001600160a01b039283169081179091556001546040516376aad60560e01b81526004810192909252909116906376aad60590602401600060405180830381600087803b158015620001c957600080fd5b505af1158015620001de573d6000803e3d6000fd5b5050600154604051600093506001600160a01b0390911691506200020290620007a0565b6001600160a01b039091168152602001604051809103906000f0801580156200022f573d6000803e3d6000fd5b5060015460405163338f12b960e21b81526001600160a01b03808416600483015292935091169063ce3c4ae490602401600060405180830381600087803b1580156200027a57600080fd5b505af11580156200028f573d6000803e3d6000fd5b5050600154604051600093506001600160a01b039091169150620002b390620007ae565b6001600160a01b039091168152602001604051809103906000f080158015620002e0573d6000803e3d6000fd5b5060015460405163c5120b3960e01b81526001600160a01b03808416600483015292935091169063c5120b3990602401600060405180830381600087803b1580156200032b57600080fd5b505af115801562000340573d6000803e3d6000fd5b5050600154604051606093506001600160a01b03909116915082906200036690620007bc565b6200037392919062000849565b604051809103906000f08015801562000390573d6000803e3d6000fd5b50600380546001600160a01b0319166001600160a01b0392831690811790915560015460405163530e784f60e01b815260048101929092529091169063530e784f90602401600060405180830381600087803b158015620003f057600080fd5b505af115801562000405573d6000803e3d6000fd5b5050600154604051600093506001600160a01b0390911691506200042990620007ca565b6001600160a01b039091168152602001604051809103906000f08015801562000456573d6000803e3d6000fd5b506001546040516356ee0d3b60e11b81526001600160a01b03808416600483015292935091169063addc1a7690602401600060405180830381600087803b158015620004a157600080fd5b505af1158015620004b6573d6000803e3d6000fd5b5050600154604051600093506001600160a01b039091169150620004da90620007d8565b6001600160a01b039091168152602001604051809103906000f08015801562000507573d6000803e3d6000fd5b506001546040516321da583760e01b81526001600160a01b0380841660048301529293509116906321da583790602401600060405180830381600087803b1580156200055257600080fd5b505af115801562000567573d6000803e3d6000fd5b505050506000306040516200057c90620007e6565b6001600160a01b039091168152602001604051809103906000f080158015620005a9573d6000803e3d6000fd5b50600154604051631795d5b360e31b81526001600160a01b03808416600483015292935091169063bcaead9890602401600060405180830381600087803b158015620005f457600080fd5b505af115801562000609573d6000803e3d6000fd5b505060405163f2fde38b60e01b81523360048201526001600160a01b038416925063f2fde38b9150602401600060405180830381600087803b1580156200064f57600080fd5b505af115801562000664573d6000803e3d6000fd5b505060015460405163f2fde38b60e01b81523360048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b158015620006ae57600080fd5b505af1158015620006c3573d6000803e3d6000fd5b505060025460405163f2fde38b60e01b81523360048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b1580156200070d57600080fd5b505af115801562000722573d6000803e3d6000fd5b505050505050505050505050620008b2565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610fcd80620010dd83390190565b61098c80620020aa83390190565b610f508062002a3683390190565b614da6806200398683390190565b611b45806200872c83390190565b612ced806200a27183390190565b611627806200cf5e83390190565b612b80806200e58583390190565b80516001600160a01b03811681146200080c57600080fd5b919050565b600080604083850312156200082557600080fd5b6200083083620007f4565b91506200084060208401620007f4565b90509250929050565b6001600160a01b0383811682526040602080840182905284518483018190526000938683019290916060870190865b81811015620008a3578551805186168452840151851684840152948301949186019160010162000878565b50909998505050505050505050565b61081b80620008c26000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80638874ff1f1161005b5780638874ff1f146100f55780638da5cb5b14610108578063de28735914610126578063f2fde38b1461014657600080fd5b80632630c12f146100825780632954018c146100cb578063715018a6146100eb575b600080fd5b6003546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6001546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b6100f3610159565b005b6100f3610103366004610658565b6101eb565b60005473ffffffffffffffffffffffffffffffffffffffff166100a2565b6002546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b6100f3610154366004610734565b6103e3565b60005473ffffffffffffffffffffffffffffffffffffffff1633146101df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6101e96000610513565b565b60005473ffffffffffffffffffffffffffffffffffffffff16331461026c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101d6565b60005b815181101561035c57600354825173ffffffffffffffffffffffffffffffffffffffff9091169063e8a97a3e908490849081106102ae576102ae610756565b6020026020010151600001518484815181106102cc576102cc610756565b6020026020010151602001516040518363ffffffff1660e01b815260040161031792919073ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b600060405180830381600087803b15801561033157600080fd5b505af1158015610345573d6000803e3d6000fd5b50505050808061035490610785565b91505061026f565b506002546040517ff2fde38b00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063f2fde38b90602401600060405180830381600087803b1580156103c857600080fd5b505af11580156103dc573d6000803e3d6000fd5b5050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101d6565b73ffffffffffffffffffffffffffffffffffffffff8116610507576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016101d6565b61051081610513565b50565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156105da576105da610588565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561062757610627610588565b604052919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461065357600080fd5b919050565b6000602080838503121561066b57600080fd5b823567ffffffffffffffff8082111561068357600080fd5b818501915085601f83011261069757600080fd5b8135818111156106a9576106a9610588565b6106b7848260051b016105e0565b818152848101925060069190911b8301840190878211156106d757600080fd5b928401925b8184101561072957604084890312156106f55760008081fd5b6106fd6105b7565b6107068561062f565b815261071386860161062f565b81870152835260409390930192918401916106dc565b979650505050505050565b60006020828403121561074657600080fd5b61074f8261062f565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156107de577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea26469706673582212205ee75e57bb635aa49a1758f4ab0b04182a73115bff08f420c56a8ddb433c029364736f6c634300080a0033608060405234801561001057600080fd5b5061001a3361005f565b60405130906f20a2222922a9a9afa82927ab24a222a960811b907fb37614c7d254ea8d16eb81fa11dddaeb266aa8ba4917980859c7740aff30c69190600090a36100af565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610f0f806100be6000396000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c806377532ed9116100e3578063bcaead981161008c578063ce3c4ae411610066578063ce3c4ae414610308578063f2fde38b1461031b578063fca513a81461032e57600080fd5b8063bcaead98146102da578063c5120b39146102ed578063c513c9bb1461030057600080fd5b80639068a868116100bd5780639068a868146102b7578063addc1a76146102bf578063affd9243146102d257600080fd5b806377532ed91461027e57806386e09c08146102865780638da5cb5b1461029957600080fd5b80634c252f9111610145578063699f200f1161011f578063699f200f1461022d578063715018a61461026357806376aad6051461026b57600080fd5b80634c252f91146101fc578063530e784f1461020457806354fd4d501461021757600080fd5b80631ed65110116101765780631ed65110146101cc57806321da5837146101e157806326c74fc3146101f457600080fd5b8063060678c21461019257806308737695146101c4575b600080fd5b61019a610336565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61019a610366565b6101df6101da366004610e10565b610391565b005b6101df6101ef366004610e10565b610444565b61019a6104ef565b61019a61051a565b6101df610212366004610e10565b610545565b61021f600281565b6040519081526020016101bb565b61019a61023b366004610e4d565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6101df6105f0565b6101df610279366004610e10565b61067d565b61019a610728565b6101df610294366004610e10565b610753565b60005473ffffffffffffffffffffffffffffffffffffffff1661019a565b61019a6107fe565b6101df6102cd366004610e10565b610829565b61019a6108d4565b6101df6102e8366004610e10565b6108ff565b6101df6102fb366004610e10565b6109aa565b61019a610a55565b6101df610316366004610e10565b610a80565b6101df610329366004610e10565b610b2b565b61019a610c58565b60006103617f444154415f434f4d50524553534f520000000000000000000000000000000000610c7f565b905090565b60006103617f41434c0000000000000000000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610417576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6104417f54524541535552595f434f4e545241435400000000000000000000000000000082610d1d565b50565b60005473ffffffffffffffffffffffffffffffffffffffff1633146104c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f574554485f47415445574159000000000000000000000000000000000000000082610d1d565b60006103617f54524541535552595f434f4e5452414354000000000000000000000000000000610c7f565b60006103617f574554485f544f4b454e00000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f50524943455f4f5241434c45000000000000000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610671576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b61067b6000610d9b565b565b60005473ffffffffffffffffffffffffffffffffffffffff1633146106fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f41434c000000000000000000000000000000000000000000000000000000000082610d1d565b60006103617f574554485f474154455741590000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146107d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f574554485f544f4b454e0000000000000000000000000000000000000000000082610d1d565b60006103617f4143434f554e545f464143544f52590000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146108aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f4143434f554e545f464143544f5259000000000000000000000000000000000082610d1d565b60006103617f474541525f544f4b454e00000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610980576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f474541525f544f4b454e0000000000000000000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f444154415f434f4d50524553534f52000000000000000000000000000000000082610d1d565b60006103617f434f4e5452414354535f52454749535445520000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610b01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f434f4e5452414354535f5245474953544552000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610bac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b73ffffffffffffffffffffffffffffffffffffffff8116610c4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161040e565b61044181610d9b565b60006103617f50524943455f4f5241434c4500000000000000000000000000000000000000005b6000818152600160209081526040808320548151808301909252600382527f41503100000000000000000000000000000000000000000000000000000000009282019290925273ffffffffffffffffffffffffffffffffffffffff9091169081610d16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040e9190610e66565b5092915050565b60008281526001602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091559051909184917fb37614c7d254ea8d16eb81fa11dddaeb266aa8ba4917980859c7740aff30c6919190a35050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215610e2257600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610e4657600080fd5b9392505050565b600060208284031215610e5f57600080fd5b5035919050565b600060208083528351808285015260005b81811015610e9357858101830151858201604001528201610e77565b81811115610ea5576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea264697066735822122083c228af017c6f5cf8c395cdf7a53276ff56fdd4f4313c39f680ab73bd75417364736f6c634300080a0033608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61090e8061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063732818191161008c578063adce758d11610066578063adce758d14610215578063ba306df114610228578063d4eb5db01461023b578063f2fde38b1461027457600080fd5b806373281819146101b7578063819ad68e146101da5780638da5cb5b146101ed57600080fd5b806354fd4d50116100bd57806354fd4d501461016a5780635f259aba14610180578063715018a6146101af57600080fd5b806335914829146100e45780633a41ec641461011c5780634910832f14610155575b600080fd5b6101076100f236600461089b565b60016020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61010761012a36600461089b565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205460ff1690565b61016861016336600461089b565b610287565b005b610172600181565b604051908152602001610113565b61010761018e36600461089b565b60005473ffffffffffffffffffffffffffffffffffffffff91821691161490565b610168610387565b6101076101c536600461089b565b60026020526000908152604090205460ff1681565b6101686101e836600461089b565b610414565b60005460405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610113565b61016861022336600461089b565b61050c565b61016861023636600461089b565b610601565b61010761024936600461089b565b73ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205460ff1690565b61016861028236600461089b565b6106f6565b60005473ffffffffffffffffffffffffffffffffffffffff16331461030d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909217909155517fae26b1cfe9454ba87274a4e8330b6654684362d0f3d7bbd17f7449a1d38387c69190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610408576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b6104126000610826565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517fd400da6c0c0a894dacc0981730b88af0545d00272ee8fff1437bf560ff245fc49190a250565b60005473ffffffffffffffffffffffffffffffffffffffff16331461058d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f1998397e7203f7baca9d6f41b9e4da6e768daac5caad4234fb9bf5869d2715459190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610682576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526001602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f28b01395b7e25d20552a0c8dc8ecd3b1d4abc986f14dad7885fd45b6fd73c8d99190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811661081a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610304565b61082381610826565b50565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156108ad57600080fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146108d157600080fd5b939250505056fea26469706673582212204712efbfe997070def77285a5b8753bc882b62da2133ce1937ad26cd2b48e49864736f6c634300080a003360a060405234801561001057600080fd5b50604051610f50380380610f5083398101604081905261002f916100d7565b6000805460ff19169055806001600160a01b03811661006157604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa15801561009f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100c391906100d7565b6001600160a01b0316608052506101079050565b6000602082840312156100e957600080fd5b81516001600160a01b038116811461010057600080fd5b9392505050565b608051610e1261013e600039600081816101e2015281816102b20152818161040f0152818161057801526108510152610e126000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80638456cb5911610097578063b4ac686011610066578063b4ac686014610217578063c29277cd1461021f578063d914cd4b14610227578063e26b2f631461023a57600080fd5b80638456cb59146101cd57806394144856146101d5578063a50cf2c8146101dd578063ac4afa381461020457600080fd5b80635b16ebb7116100d35780635b16ebb7146101575780635c975abb1461018a578063673a2a1f146101955780636fbc6f6b146101aa57600080fd5b80631e16e4fc146100fa5780633f4ba83a1461013757806354fd4d5014610141575b600080fd5b61010d610108366004610c97565b61024d565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61013f610284565b005b610149600181565b60405190815260200161012e565b61017a610165366004610cb0565b60026020526000908152604090205460ff1681565b604051901515815260200161012e565b60005460ff1661017a565b61019d610372565b60405161012e9190610ced565b61017a6101b8366004610cb0565b60046020526000908152604090205460ff1681565b61013f6103e1565b61019d6104cd565b61010d7f000000000000000000000000000000000000000000000000000000000000000081565b61010d610212366004610c97565b61053a565b600154610149565b600354610149565b61013f610235366004610cb0565b61054a565b61013f610248366004610cb0565b610823565b6003818154811061025d57600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa15801561030e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103329190610d47565b610368576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610370610af6565b565b606060018054806020026020016040519081016040528092919081815260200182805480156103d757602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116103ac575b5050505050905090565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561046b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048f9190610d47565b6104c5576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610370610bd7565b606060038054806020026020016040519081016040528092919081815260200182805480156103d75760200282019190600052602060002090815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116103ac575050505050905090565b6001818154811061025d57600080fd5b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156105d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f89190610d47565b61062e576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051808201909152600281527f5a30000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff82166106b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b60405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff8116600090815260026020908152604091829020548251808401909352600383527f43523100000000000000000000000000000000000000000000000000000000009183019190915260ff1615610753576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b506001805480820182557fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915560008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909417909355915190917ff816b5143086c89d103a0683286be86c2b741e83ebfa75135aae606e2f5c6e5391a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156108ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d19190610d47565b610907576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051808201909152600281527f5a30000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8216610989576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b5073ffffffffffffffffffffffffffffffffffffffff8116600090815260046020908152604091829020548251808401909352600383527f43523200000000000000000000000000000000000000000000000000000000009183019190915260ff1615610a23576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b506003805460018082019092557fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915560008181526004602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909417909355915190917f58ad3cfc4b6552a53c8c4128ae9b080e14b4378a159280643a62c6f709cee24f91a250565b60005460ff16610b62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016106b0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff1615610c44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016106b0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610bad3390565b600060208284031215610ca957600080fd5b5035919050565b600060208284031215610cc257600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610ce657600080fd5b9392505050565b6020808252825182820181905260009190848201906040850190845b81811015610d3b57835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101610d09565b50909695505050505050565b600060208284031215610d5957600080fd5b81518015158114610ce657600080fd5b600060208083528351808285015260005b81811015610d9657858101830151858201604001528201610d7a565b81811115610da8576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea26469706673582212208f2d91c863db9ab1494a9c5db20e3fddc4b6c779ea3c3621737c105c60d9440a64736f6c634300080a003360e06040523480156200001157600080fd5b5060405162004da638038062004da6833981016040819052620000349162000160565b6001600160a01b0381166200005c57604051635919af9760e11b815260040160405180910390fd5b6001600160a01b03811660808190526040805163c513c9bb60e01b8152905163c513c9bb916004808201926020929091908290030181865afa158015620000a7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cd919062000160565b6001600160a01b031660a0816001600160a01b0316815250506080516001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000127573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200014d919062000160565b6001600160a01b031660c0525062000192565b6000602082840312156200017357600080fd5b81516001600160a01b03811681146200018b57600080fd5b9392505050565b60805160a05160c051614b896200021d6000396000818161018801528181611c4f0152612c5a0152600081816101ed015281816115e201528181611f5f0152818161213f0152818161223f0152818161243801528181612604015281816126bc01528181612788015281816129a501528181613c410152613d000152600061013c0152614b896000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c806354fd4d5011610081578063a80deda31161005b578063a80deda31461020f578063ae093f3f1461022f578063fc9914cb1461024f57600080fd5b806354fd4d50146101bd578063663b8fdb146101d35780637a0c7b21146101e857600080fd5b80632954018c116100b25780632954018c146101375780634b2f336d146101835780634c472fc9146101aa57600080fd5b80630dbd616d146100d957806313d21cdf146101025780631bcd8fc014610122575b600080fd5b6100ec6100e73660046140fc565b610272565b6040516100f9919061430b565b60405180910390f35b61011561011036600461431e565b6114d4565b6040516100f99190614444565b61012a611f59565b6040516100f99190614453565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100f9565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b61015e6101b83660046140fc565b6121f5565b6101c5600281565b6040519081526020016100f9565b6101db612432565b6040516100f991906146ea565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b61022261021d36600461431e565b6126b5565b6040516100f9919061476a565b61024261023d36600461431e565b612a75565b6040516100f991906147dd565b61026261025d3660046140fc565b613bf7565b60405190151581526020016100f9565b61035f604051806102400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160008152602001606081526020016000815260200160008152602001600015158152602001600081526020016000815260200160008152602001600060ff168152602001600081525090565b600080600080600061037088613cf4565b509450945094509450945060008560ff1660011461041d576040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015284169063e958b70490602401602060405180830381865afa1580156103f4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061041891906147f0565b6104ad565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015286169063e958b70490602401602060405180830381865afa158015610489573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ad91906147f0565b60ff8716610200890181905273ffffffffffffffffffffffffffffffffffffffff808b1660208b01528b811660608b015282168952909150600114156109e9578473ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610538573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055c91906147f0565b73ffffffffffffffffffffffffffffffffffffffff90811660808901526040517fc7de38a600000000000000000000000000000000000000000000000000000000815282821660048201529085169063c7de38a690602401602060405180830381865afa1580156105d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f5919061480d565b60c08801526040517fdfd5946500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015285169063dfd5946590602401602060405180830381865afa158015610666573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068a919061480d565b60e08801526040517f3ce0735500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015260006024830152861690633ce0735590604401602060405180830381865afa92505050801561073c575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526107399181019061480d565b60015b6107455761074c565b6101408801525b6040517f3ce0735500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015260016024830152861690633ce0735590604401602060405180830381865afa9250505080156107f9575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526107f69181019061480d565b60015b61080257610809565b6101608801525b60c08701516040517f996329f800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526024820192909252600060448201529086169063996329f89060640160a060405180830381865afa9250505080156108c4575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526108c191810190614826565b60015b6108cd576108da565b505015156101808a015250505b8073ffffffffffffffffffffffffffffffffffffffff16631afbb7a46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610925573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610949919061480d565b6101a08801526040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152851690633192195c90602401602060405180830381865afa1580156109bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109df919061480d565b60a0880152610c26565b8273ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5891906147f0565b73ffffffffffffffffffffffffffffffffffffffff90811660808901526040517fc7de38a600000000000000000000000000000000000000000000000000000000815282821660048201529083169063c7de38a6906024016040805180830381865afa158015610acc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af09190614866565b5060c08801526040517fdfd5946500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015283169063dfd5946590602401602060405180830381865afa158015610b62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b86919061480d565b60e08801526040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152841690633192195c906024016040805180830381865afa158015610bf6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1a9190614866565b60a08901526101a08801525b60008660ff16600114610ca7578373ffffffffffffffffffffffffffffffffffffffff166316f0115b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca291906147f0565b610d16565b8573ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1691906147f0565b90508073ffffffffffffffffffffffffffffffffffffffff166345d31f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d87919061480d565b6101008901526000600160ff891614610e0e578473ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610de5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e09919061480d565b610e7d565b8573ffffffffffffffffffffffffffffffffffffffff166320a05ff76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7d919061480d565b90508760ff16600114610f1f576040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152861690638991b2f190602401602060405180830381865afa158015610ef6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1a919061480d565b610faf565b6040517fb451cecc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015287169063b451cecc90602401602060405180830381865afa158015610f8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610faf919061480d565b6102208a01528067ffffffffffffffff811115610fce57610fce61488a565b60405190808252806020026020018201604052801561103e57816020015b6040805160808101825260008082526020808301829052928201819052606082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181610fec5790505b506101208a015260005b818110156113d657604080516080810182526000808252602082018190529181018290526060810191909152600180831b9060ff8c1614156111c5576040517faf0a650200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018590528a169063af0a650290604401608060405180830381865afa1580156110f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111b91906148b9565b5050602084015273ffffffffffffffffffffffffffffffffffffffff9081168084526040517ff9eaee0d0000000000000000000000000000000000000000000000000000000081526004810191909152908a169063f9eaee0d90602401602060405180830381865afa158015611195573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b9919061490d565b15156040830152611388565b6040517f172c48c70000000000000000000000000000000000000000000000000000000081526004810184905273ffffffffffffffffffffffffffffffffffffffff89169063172c48c7906024016040805180830381865afa15801561122f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112539190614928565b5073ffffffffffffffffffffffffffffffffffffffff9081168084526040517f70a082310000000000000000000000000000000000000000000000000000000081529188166004830152906370a0823190602401602060405180830381865afa1580156112c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e8919061480d565b602083015281516040517ff9eaee0d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529088169063f9eaee0d90602401602060405180830381865afa15801561135c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611380919061490d565b151560408301525b6102208c015181161561139c57600161139f565b60005b151560608301526101208c01518051839190859081106113c1576113c161495e565b60209081029190910101525050600101611048565b508273ffffffffffffffffffffffffffffffffffffffff166317d11a156040518163ffffffff1660e01b8152600401602060405180830381865afa158015611422573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611446919061480d565b896101c00181815250508273ffffffffffffffffffffffffffffffffffffffff16633dc54b406040518163ffffffff1660e01b8152600401602060405180830381865afa15801561149b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bf919061480d565b6101e08a015250969998505050505050505050565b61159b604051806102000160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600060ff1681525090565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015283917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa15801561162b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164f919061490d565b611685576040517fd384b23800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316808352604080517ffe14112d000000000000000000000000000000000000000000000000000000008152905185929163fe14112d9160048083019260209291908290030181865afa1580156116f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611719919061480d565b8360c00181815250508073ffffffffffffffffffffffffffffffffffffffff1663ef8d96036040518163ffffffff1660e01b8152600401602060405180830381865afa15801561176d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611791919061480d565b8360e00181815250508073ffffffffffffffffffffffffffffffffffffffff1663743753596040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611809919061480d565b8360a00181815250508073ffffffffffffffffffffffffffffffffffffffff16634c19386c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561185d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611881919061480d565b836101000181815250508073ffffffffffffffffffffffffffffffffffffffff1663788c6bfe6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fa919061480d565b836101600181815250508073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561194f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611973919061480d565b8360800181815250508073ffffffffffffffffffffffffffffffffffffffff166345d31f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119eb919061480d565b836101400181815250508073ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6491906147f0565b836040019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff166336dda7d56040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0a91906147f0565b836060019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663788c6bfe6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb0919061480d565b836101600181815250508073ffffffffffffffffffffffffffffffffffffffff1663e941fa786040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c29919061480d565b61018084015260408084015173ffffffffffffffffffffffffffffffffffffffff9081167f000000000000000000000000000000000000000000000000000000000000000082161460208087019190915282517f609ae31700000000000000000000000000000000000000000000000000000000815292519184169263609ae31792600480830193928290030181865afa158015611ccb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cef919061480d565b836101c00181815250508073ffffffffffffffffffffffffffffffffffffffff1663dbcb313b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d68919061480d565b836101a00181815250506000836060015173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de7919061480d565b6040517f5427c9380000000000000000000000000000000000000000000000000000000081526004810182905290915060009073ffffffffffffffffffffffffffffffffffffffff841690635427c93890602401602060405180830381865afa158015611e58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7c919061480d565b90508015611ec7576101808501518190611eb890611e9c906127106149bc565b876101000151886101400151611eb291906149d3565b90613fd0565b611ec29190614a3f565b611ece565b8461014001515b856101200181815250508273ffffffffffffffffffffffffffffffffffffffff166354fd4d506040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f47919061480d565b60ff166101e086015250505050919050565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b4ac68606040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fec919061480d565b90508067ffffffffffffffff8111156120075761200761488a565b6040519080825280602002602001820160405280156120ff57816020015b6120ec604051806102000160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600060ff1681525090565b8152602001906001900390816120255790505b50915060005b818110156121f0576040517fac4afa38000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ac4afa3890602401602060405180830381865afa15801561219b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121bf91906147f0565b90506121ca816114d4565b8483815181106121dc576121dc61495e565b602090810291909101015250600101612105565b505090565b6040517f6fbc6f6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015260009184917f00000000000000000000000000000000000000000000000000000000000000001690636fbc6f6b90602401602060405180830381865afa158015612286573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122aa919061490d565b6122e0576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060006122ee87613cf4565b5050935093505092508260ff16600114612397576040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015282169063fdd5764590602401602060405180830381865afa15801561236e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061239291906147f0565b612427565b6040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015283169063fdd5764590602401602060405180830381865afa158015612403573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061242791906147f0565b979650505050505050565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c29277cd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124c5919061480d565b90508067ffffffffffffffff8111156124e0576124e061488a565b6040519080825280602002602001820160405280156125c457816020015b60408051610260810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083018290526101208301819052610140830181905261016083015261018082018190526101a082018190526101c082018190526101e082018190526102008201819052610220820181905261024082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816124fe5790505b50915060005b818110156121f0576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa158015612660573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061268491906147f0565b905061268f81612a75565b8483815181106126a1576126a161495e565b6020908102919091010152506001016125ca565b60606000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c29277cd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612725573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612749919061480d565b905060005b81811015612829576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa1580156127e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061280891906147f0565b90506128148187613bf7565b15612820578360010193505b5060010161274e565b508167ffffffffffffffff8111156128435761284361488a565b60405190808252806020026020018201604052801561296157816020015b61294e604051806102400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160008152602001606081526020016000815260200160008152602001600015158152602001600081526020016000815260200160008152602001600060ff168152602001600081525090565b8152602001906001900390816128615790505b5092506000915060005b81811015612a6d576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa158015612a01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a2591906147f0565b9050612a318187613bf7565b15612a6457612a408187610272565b858581518110612a5257612a5261495e565b60209081029190910101526001909301925b5060010161296b565b505050919050565b604080516102608101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082018390526101208201819052610140820181905261016082015261018081018290526101a081018290526101c081018290526101e08101829052610200810182905261022081018290526102408101829052908080808080612b1b88613cf4565b73ffffffffffffffffffffffffffffffffffffffff8e168d5260ff86166101808e01819052959b50939950919750955093509150600114612bca578273ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ba1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bc591906147f0565b612c39565b8473ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c3991906147f0565b73ffffffffffffffffffffffffffffffffffffffff908116602089018190527f00000000000000000000000000000000000000000000000000000000000000009091161460408801526000600160ff881614612d03578373ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cfe91906147f0565b612d72565b8573ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d7291906147f0565b6040517f2e97ca2100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b8116600483015291925090821690632e97ca2190602401602060405180830381865afa158015612de2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e06919061490d565b15156060890152604080517f45d31f9d000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff8316916345d31f9d9160048083019260209291908290030181865afa158015612e78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e9c919061480d565b8860800181815250508073ffffffffffffffffffffffffffffffffffffffff1663743753596040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ef0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f14919061480d565b610100890152600160ff88161415613017578573ffffffffffffffffffffffffffffffffffffffff16639b2cb5d86040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f95919061480d565b8860a00181815250508573ffffffffffffffffffffffffffffffffffffffff16635f48f3936040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fe9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061300d919061480d565b60c08901526130a5565b8273ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa158015613061573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130859190614a73565b6fffffffffffffffffffffffffffffffff90811660c08b01521660a08901525b60008760ff16600114613126578473ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613121919061480d565b613195565b8573ffffffffffffffffffffffffffffffffffffffff166320a05ff76040518163ffffffff1660e01b8152600401602060405180830381865afa158015613171573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613195919061480d565b90508067ffffffffffffffff8111156131b0576131b061488a565b6040519080825280602002602001820160405280156131d9578160200160208202803683370190505b506101208a01528067ffffffffffffffff8111156131f9576131f961488a565b604051908082528060200260200182016040528015613222578160200160208202803683370190505b506101608a015260005b818110156134c4578860ff16600114156133b4576040517f5e5f2e260000000000000000000000000000000000000000000000000000000081526004810182905260009073ffffffffffffffffffffffffffffffffffffffff891690635e5f2e2690602401602060405180830381865afa1580156132ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132d291906147f0565b9050808b610120015183815181106132ec576132ec61495e565b73ffffffffffffffffffffffffffffffffffffffff92831660209182029290920101526040517f78327438000000000000000000000000000000000000000000000000000000008152828216600482015290891690637832743890602401602060405180830381865afa158015613367573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061338b919061480d565b8b610160015183815181106133a2576133a261495e565b602002602001018181525050506134bc565b6040517f172c48c70000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff87169063172c48c7906024016040805180830381865afa15801561341e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134429190614928565b8061ffff1690508b610120015183815181106134605761346061495e565b602002602001018c6101600151848151811061347e5761347e61495e565b60200260200101828152508273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525050505b60010161322c565b5060008860ff16600114613546578373ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561351d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613541919061480d565b6135b5565b8673ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613591573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135b5919061480d565b90508067ffffffffffffffff8111156135d0576135d061488a565b60405190808252806020026020018201604052801561361557816020015b60408051808201909152600080825260208201528152602001906001900390816135ee5790505b506101408b015260005b818110156139015760408051808201909152600080825260208201528a60ff166001146136da576040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff871690635094cb4f90602401602060405180830381865afa1580156136b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136d591906147f0565b613769565b6040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff8a1690635094cb4f90602401602060405180830381865afa158015613745573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061376991906147f0565b73ffffffffffffffffffffffffffffffffffffffff168152600160ff8c16146138245780516040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529089169063fdd5764590602401602060405180830381865afa1580156137fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061381f91906147f0565b6138b7565b80516040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152908a169063fdd5764590602401602060405180830381865afa158015613893573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138b791906147f0565b73ffffffffffffffffffffffffffffffffffffffff1660208201526101408c01518051829190849081106138ed576138ed61495e565b60209081029190910101525060010161361f565b508860ff166001141561398f578773ffffffffffffffffffffffffffffffffffffffff1663b2c53a6c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613959573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061397d919061480d565b60e08b015260ff6102408b0152613be9565b73ffffffffffffffffffffffffffffffffffffffff85166101a08b01819052604080517f9408b63f0000000000000000000000000000000000000000000000000000000081529051639408b63f916004808201926020929091908290030181865afa158015613a02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a2691906147f0565b8a6101e0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508473ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015613aa9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613acd9190614aa6565b5015156102008c015250604080517f9fd12b77000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff881691639fd12b779160048083019260209291908290030181865afa158015613b42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b66919061480d565b8a6102200181815250508573ffffffffffffffffffffffffffffffffffffffff16638345f26e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bdf9190614af7565b60ff166102408b01525b505050505050505050919050565b6040517f6fbc6f6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015260009184917f00000000000000000000000000000000000000000000000000000000000000001690636fbc6f6b90602401602060405180830381865afa158015613c88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cac919061490d565b613ce2576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613cec8484614023565b949350505050565b600080600080600080867f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636fbc6f6b826040518263ffffffff1660e01b8152600401613d73919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa158015613d90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613db4919061490d565b613dea576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8773ffffffffffffffffffffffffffffffffffffffff166354fd4d506040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e59919061480d565b96508660ff1660011415613ee0578795508573ffffffffffffffffffffffffffffffffffffffff1663f93f515b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613eb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ed991906147f0565b9450613fc6565b8793508373ffffffffffffffffffffffffffffffffffffffff16632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f5291906147f0565b92508373ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fc391906147f0565b91505b5091939550919395565b6000821580613fdd575081155b15613fea5750600061401d565b612710613ff8600282614b1a565b61ffff1661400684866149d3565b6140109190614b3b565b61401a9190614a3f565b90505b92915050565b6040517f055ee9b500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600091829185169063055ee9b590602401602060405180830381865afa158015614094573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140b891906147f0565b73ffffffffffffffffffffffffffffffffffffffff1614159392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146140f957600080fd5b50565b6000806040838503121561410f57600080fd5b823561411a816140d7565b9150602083013561412a816140d7565b809150509250929050565b600081518084526020808501945080840160005b8381101561419f578151805173ffffffffffffffffffffffffffffffffffffffff168852838101518489015260408082015115159089015260609081015115159088015260809096019590820190600101614149565b509495945050505050565b805173ffffffffffffffffffffffffffffffffffffffff168252600061024060208301516141f0602086018273ffffffffffffffffffffffffffffffffffffffff169052565b506040830151614204604086018215159052565b50606083015161422c606086018273ffffffffffffffffffffffffffffffffffffffff169052565b506080830151614254608086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060a083015160a085015260c083015160c085015260e083015160e085015261010080840151818601525061012080840151828287015261429783870182614135565b92505050610140808401518186015250610160808401518186015250610180808401516142c78287018215159052565b50506101a083810151908501526101c080840151908501526101e080840151908501526102008084015160ff16908501526102209283015192909301919091525090565b60208152600061401a60208301846141aa565b60006020828403121561433057600080fd5b813561433b816140d7565b9392505050565b805173ffffffffffffffffffffffffffffffffffffffff168252602081015161436f602084018215159052565b506040810151614397604084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060608101516143bf606084018273ffffffffffffffffffffffffffffffffffffffff169052565b506080818101519083015260a0808201519083015260c0808201519083015260e08082015190830152610100808201519083015261012080820151908301526101408082015190830152610160808201519083015261018080820151908301526101a080820151908301526101c080820151908301526101e09081015160ff16910152565b610200810161401d8284614342565b6020808252825182820181905260009190848201906040850190845b8181101561449657614482838551614342565b92840192610200929092019160010161446f565b50909695505050505050565b600081518084526020808501945080840160005b8381101561419f57815173ffffffffffffffffffffffffffffffffffffffff16875295820195908201906001016144b6565b600081518084526020808501945080840160005b8381101561419f578151805173ffffffffffffffffffffffffffffffffffffffff9081168952908401511683880152604090960195908201906001016144fc565b600081518084526020808501945080840160005b8381101561419f57815187529582019590820190600101614551565b805173ffffffffffffffffffffffffffffffffffffffff168252600061026060208301516145b3602086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060408301516145c7604086018215159052565b5060608301516145db606086018215159052565b506080830151608085015260a083015160a085015260c083015160c085015260e083015160e0850152610100808401518186015250610120808401518282870152614628838701826144a2565b92505050610140808401518583038287015261464483826144e8565b925050506101608084015185830382870152614660838261453d565b92505050610180808401516146798287018260ff169052565b50506101a08381015173ffffffffffffffffffffffffffffffffffffffff908116918601919091526101c0808501511515908601526101e080850151909116908501526102008084015115159085015261022080840151908501526102409283015160ff1692909301919091525090565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561475d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc088860301845261474b85835161456d565b94509285019290850190600101614711565b5092979650505050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561475d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08886030184526147cb8583516141aa565b94509285019290850190600101614791565b60208152600061401a602083018461456d565b60006020828403121561480257600080fd5b815161433b816140d7565b60006020828403121561481f57600080fd5b5051919050565b600080600080600060a0868803121561483e57600080fd5b5050835160208501516040860151606087015160809097015192989197509594509092509050565b6000806040838503121561487957600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080600080608085870312156148cf57600080fd5b84516148da816140d7565b60208601516040870151606090970151919890975090945092505050565b8051801515811461490857600080fd5b919050565b60006020828403121561491f57600080fd5b61401a826148f8565b6000806040838503121561493b57600080fd5b8251614946816140d7565b602084015190925061ffff8116811461412a57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156149ce576149ce61498d565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614a0b57614a0b61498d565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614a4e57614a4e614a10565b500490565b80516fffffffffffffffffffffffffffffffff8116811461490857600080fd5b60008060408385031215614a8657600080fd5b614a8f83614a53565b9150614a9d60208401614a53565b90509250929050565b600080600060608486031215614abb57600080fd5b614ac484614a53565b9250614ad2602085016148f8565b9150604084015164ffffffffff81168114614aec57600080fd5b809150509250925092565b600060208284031215614b0957600080fd5b815160ff8116811461433b57600080fd5b600061ffff80841680614b2f57614b2f614a10565b92169190910492915050565b60008219821115614b4e57614b4e61498d565b50019056fea2646970667358221220d15108d0bec9cc6f3903875dd8412869a3da1b36661bdc780e2e2f0ae3136d2464736f6c634300080a003360a06040523480156200001157600080fd5b5060405162001b4538038062001b45833981016040819052620000349162000608565b6000805460ff19169055816001600160a01b0381166200006757604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cc91906200070a565b6001600160a01b031660805250805160005b818110156200014257620001398382815181106200010057620001006200072f565b6020026020010151600001518483815181106200012157620001216200072f565b6020026020010151602001516200014c60201b60201c565b600101620000de565b5050505062000822565b6001600160a01b03821615806200016a57506001600160a01b038116155b156200018957604051635919af9760e11b815260040160405180910390fd5b620001a8826001600160a01b0316620004ba60201b620006751760201c565b620001d65760405163df4c572d60e01b81526001600160a01b03831660048201526024015b60405180910390fd5b620001f5816001600160a01b0316620004ba60201b620006751760201c565b6200021f5760405163df4c572d60e01b81526001600160a01b0382166004820152602401620001cd565b806001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200027c575060408051601f3d908101601f19168201909252620002799181019062000745565b60015b6200029a576040516367a7cd4360e01b815260040160405180910390fd5b8060ff16600814620002bf576040516367a7cd4360e01b815260040160405180910390fd5b506000816001600160a01b031663d62ada116040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200031f575060408051601f3d908101601f191682019092526200031c918101906200076a565b60015b6200032a576200032d565b90505b6000836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200038c575060408051601f3d908101601f19168201909252620003899181019062000745565b60015b620003aa5760405163528ca31d60e01b815260040160405180910390fd5b60128160ff161115620003d05760405163528ca31d60e01b815260040160405180910390fd5b9050826001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa9250505080156200042f575060408051601f3d908101601f191682019092526200042c91810190620007a6565b60015b6200044d576040516367a7cd4360e01b815260040160405180910390fd5b8662000461576200046185858484620004c0565b5050505050620004748484848462000526565b826001600160a01b0316846001600160a01b03167fe263805b03657ab13064915d0723c5ce14981547e7cba5283f66b9e5d81f6e6e60405160405180910390a350505050565b3b151590565b60008313620004e2576040516356e05d2b60e01b815260040160405180910390fd5b836001600160501b0316816001600160501b0316108062000501575081155b15620005205760405163b1cf675560e01b815260040160405180910390fd5b50505050565b6001600160a01b03831682156200053e57600160a11b175b6200055460ff60a21b60a284901b1682620007fb565b6001600160a01b0390951660009081526001602052604090209490945550505050565b80516001600160a01b03811681146200058f57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715620005cf57620005cf62000594565b60405290565b604051601f8201601f191681016001600160401b038111828210171562000600576200060062000594565b604052919050565b60008060408084860312156200061d57600080fd5b620006288462000577565b602085810151919450906001600160401b03808211156200064857600080fd5b818701915087601f8301126200065d57600080fd5b81518181111562000672576200067262000594565b62000682848260051b01620005d5565b818152848101925060069190911b830184019089821115620006a357600080fd5b928401925b81841015620006fa5785848b031215620006c25760008081fd5b620006cc620005aa565b620006d78562000577565b8152620006e686860162000577565b8187015283529285019291840191620006a8565b8096505050505050509250929050565b6000602082840312156200071d57600080fd5b620007288262000577565b9392505050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156200075857600080fd5b815160ff811681146200072857600080fd5b6000602082840312156200077d57600080fd5b815180151581146200072857600080fd5b80516001600160501b03811681146200058f57600080fd5b600080600080600060a08688031215620007bf57600080fd5b620007ca866200078e565b9450602086015193506040860151925060608601519150620007ef608087016200078e565b90509295509295909350565b600082198211156200081d57634e487b7160e01b600052601160045260246000fd5b500190565b6080516112f262000853600039600081816101b201528181610280015281816103e201526104ff01526112f26000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c80638456cb591161008c578063b66102df11610066578063b66102df146101d4578063e8a97a3e146101e7578063f190e5fa146101fa578063f9a650301461023f57600080fd5b80638456cb591461016d5780639dcb511a14610175578063a50cf2c8146101ad57600080fd5b80635c975abb116100bd5780635c975abb1461011c5780635cecbd0e146101325780637afb01041461015a57600080fd5b80633f4ba83a146100e457806341976e09146100ee57806354fd4d5014610114575b600080fd5b6100ec610252565b005b6101016100fc366004610f28565b610340565b6040519081526020015b60405180910390f35b610101600281565b60005460ff16604051901515815260200161010b565b610145610140366004610f4a565b610352565b6040805192835260208301919091520161010b565b610101610168366004610f90565b610376565b6100ec6103b4565b610188610183366004610f28565b6104a0565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010b565b6101887f000000000000000000000000000000000000000000000000000000000000000081565b6101016101e2366004610fbc565b6104b4565b6100ec6101f5366004610ff8565b6104d1565b61020d610208366004610f28565b6105c3565b6040805173ffffffffffffffffffffffffffffffffffffffff909416845291151560208401529082015260600161010b565b61010161024d366004610f90565b61064d565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156102dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103009190611022565b610336576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033e61067b565b565b600061034b82610761565b5092915050565b60008061035f868661064d565b915061036b848461064d565b905094509492505050565b600080600061038484610761565b90925090508161039582600a611193565b61039f908761119f565b6103a991906111dc565b925050505b92915050565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561043e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104629190611022565b610498576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033e610819565b60006104ab826105c3565b50909392505050565b60006104c96104c3858561064d565b83610376565b949350505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561055b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057f9190611022565b6105b5576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105bf82826108d9565b5050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600160205260408120548190819080610624576040517f4bb8ad8200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b947402000000000000000000000000000000000000000086161515945060a286901c9350915050565b600080600061065b84610761565b909250905061066b81600a611193565b61039f838761119f565b3b151590565b60005460ff166106ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b600080600080610770856105c3565b8095508193508294505050506000806000808573ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156107cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f19190611231565b9450945050935093508461080b5761080b84848484610dd9565b829750505050505050915091565b60005460ff1615610886576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016106e3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586107373390565b73ffffffffffffffffffffffffffffffffffffffff82161580610910575073ffffffffffffffffffffffffffffffffffffffff8116155b15610947576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82163b6109ad576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016106e3565b73ffffffffffffffffffffffffffffffffffffffff81163b610a13576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024016106e3565b8073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610a98575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610a9591810190611281565b60015b610ace576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060ff16600814610b0b576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060008173ffffffffffffffffffffffffffffffffffffffff1663d62ada116040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610b93575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610b9091810190611022565b60015b610b9c57610b9f565b90505b60008373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610c26575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610c2391810190611281565b60015b610c5c576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60128160ff161115610c9a576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b90508273ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa925050508015610d21575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610d1e91810190611231565b60015b610d57576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b86610d6857610d6885858484610dd9565b5050505050610d7984848484610e74565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fe263805b03657ab13064915d0723c5ce14981547e7cba5283f66b9e5d81f6e6e60405160405180910390a350505050565b60008313610e13576040517f56e05d2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8369ffffffffffffffffffff168169ffffffffffffffffffff161080610e37575081155b15610e6e576040517fb1cf675500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b73ffffffffffffffffffffffffffffffffffffffff83168215610ea95774020000000000000000000000000000000000000000175b610ecf7503fc000000000000000000000000000000000000000060a284901b16826112a4565b73ffffffffffffffffffffffffffffffffffffffff90951660009081526001602052604090209490945550505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610f2357600080fd5b919050565b600060208284031215610f3a57600080fd5b610f4382610eff565b9392505050565b60008060008060808587031215610f6057600080fd5b84359350610f7060208601610eff565b925060408501359150610f8560608601610eff565b905092959194509250565b60008060408385031215610fa357600080fd5b82359150610fb360208401610eff565b90509250929050565b600080600060608486031215610fd157600080fd5b83359250610fe160208501610eff565b9150610fef60408501610eff565b90509250925092565b6000806040838503121561100b57600080fd5b61101483610eff565b9150610fb360208401610eff565b60006020828403121561103457600080fd5b81518015158114610f4357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b808511156110cc57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156110b2576110b2611044565b808516156110bf57918102915b93841c9390800290611078565b509250929050565b6000826110e3575060016103ae565b816110f0575060006103ae565b816001811461110657600281146111105761112c565b60019150506103ae565b60ff84111561112157611121611044565b50506001821b6103ae565b5060208310610133831016604e8410600b841016171561114f575081810a6103ae565b6111598383611073565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561118b5761118b611044565b029392505050565b6000610f4383836110d4565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156111d7576111d7611044565b500290565b600082611212577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b805169ffffffffffffffffffff81168114610f2357600080fd5b600080600080600060a0868803121561124957600080fd5b61125286611217565b945060208601519350604086015192506060860151915061127560808701611217565b90509295509295909350565b60006020828403121561129357600080fd5b815160ff81168114610f4357600080fd5b600082198211156112b7576112b7611044565b50019056fea2646970667358221220e7485a2cb5750973f539ca59d2211008b42bb92b6c49605a53f5d9c88c330fb164736f6c634300080a003360e06040523480156200001157600080fd5b5060405162002ced38038062002ced8339810160408190526200003491620004bb565b6000805460ff19169055806001600160a01b0381166200006757604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cc9190620004bb565b6001600160a01b039081166080526001805560408051808201909152600281526105a360f41b602082015291508216620001245760405162461bcd60e51b81526004016200011b9190620004ed565b60405180910390fd5b50806001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000164573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200018a9190620004bb565b6001600160a01b031660c052604051620001a490620004ad565b604051809103906000f080158015620001c1573d6000803e3d6000fd5b506001600160a01b031660a08190526040805163204a7f0760e21b81529051638129fc1c9160048082019260009290919082900301818387803b1580156200020857600080fd5b505af11580156200021d573d6000803e3d6000fd5b50505050620002316200028a60201b60201c565b50600454600380546001600160a01b039092166001600160a01b03199283161790556000805260026020527fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b8054909116905562000545565b6000620002a460a0516200038c60201b6200119b1760201c565b9050806001600160a01b0316638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620002e257600080fd5b505af1158015620002f7573d6000803e3d6000fd5b5050600480546001600160a01b03908116600090815260026020908152604090912080546001600160a01b03199081169388169384179091558354169091179091556200035492506005915083906200043b811b6200127d17901c565b506040516001600160a01b038216907f9f69b6c10f6810213e055b0ba6bc0a4e2603f73c221aad77ea35da819cda7dc390600090a250565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260601b60148201526e5af43d82803e903d91602b57fd5bf360881b60288201526037816000f09150506001600160a01b038116620004365760405162461bcd60e51b815260206004820152601660248201527f455243313136373a20637265617465206661696c65640000000000000000000060448201526064016200011b565b919050565b600062000452836001600160a01b0384166200045b565b90505b92915050565b6000818152600183016020526040812054620004a45750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000455565b50600062000455565b610e788062001e7583390190565b600060208284031215620004ce57600080fd5b81516001600160a01b0381168114620004e657600080fd5b9392505050565b600060208083528351808285015260005b818110156200051c57858101830151858201604001528201620004fe565b818111156200052f576000604083870101525b50601f01601f1916929092016040019392505050565b60805160a05160c0516118cf620005a66000396000818161026a015281816103680152610b7001526000818161020201526110650152600081816102c4015281816105b80152818161099601528181610a840152610e7401526118cf6000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806388f64c54116100cd578063b193976311610081578063d82ecc4811610066578063d82ecc4814610309578063e3ba9ace1461031c578063f23953ab1461032f57600080fd5b8063b1939763146102f9578063b60e85181461030157600080fd5b80638f7dcfa3116100b25780638f7dcfa31461029f578063a50cf2c8146102bf578063a904aab6146102e657600080fd5b806388f64c541461026557806389b77b3e1461028c57600080fd5b806354fd4d50116101245780635da33c5b116101095780635da33c5b146101fd578063765e0159146102245780638456cb591461025d57600080fd5b806354fd4d50146101d05780635c975abb146101e657600080fd5b806313d8c8401461015657806321d18456146101a05780632932472f146101b35780633f4ba83a146101c8575b600080fd5b6004546101769073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6101766101ae366004611651565b610337565b6101c66101c1366004611697565b61058a565b005b6101c6610968565b6101d8600181565b604051908152602001610197565b60005460ff165b6040519015158152602001610197565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101766102323660046116da565b73ffffffffffffffffffffffffffffffffffffffff9081166000908152600260205260409020541690565b6101c6610a56565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101c661029a3660046116da565b610b42565b6003546101769073ffffffffffffffffffffffffffffffffffffffff1681565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101c66102f4366004611697565b610e46565b6101d8610fb8565b6101d8611033565b6101ed6103173660046116da565b611044565b61017661032a3660046116f5565b611051565b6101c661105e565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa1580156103c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103e8919061170e565b6040518060400160405280600281526020017f43500000000000000000000000000000000000000000000000000000000000008152509061045f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b60405180910390fd5b506104686112a6565b6003805473ffffffffffffffffffffffffffffffffffffffff8082166000818152600260205260409081902080549093167fffffffffffffffffffffffff0000000000000000000000000000000000000000948516179094558154909216905590517fc75b5a710000000000000000000000000000000000000000000000000000000081523360048201526024810185905260448101849052819063c75b5a7190606401600060405180830381600087803b15801561052657600080fd5b505af115801561053a573d6000803e3d6000fd5b505060405133925073ffffffffffffffffffffffffffffffffffffffff841691507ff3ede7039176503a8ad1fe7cfaa29475a9dbe0cdcaf04ecf9a5c10570c47b10390600090a390505b92915050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610614573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610638919061170e565b61066e576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106766112a6565b60035473ffffffffffffffffffffffffffffffffffffffff838116911614156106fa576003805473ffffffffffffffffffffffffffffffffffffffff808216600090815260026020526040902080549091167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092558154169055610865565b73ffffffffffffffffffffffffffffffffffffffff838116600090815260026020908152604091829020548251808401909352600383527f4146330000000000000000000000000000000000000000000000000000000000918301919091529091848116911614610798576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b5060045473ffffffffffffffffffffffffffffffffffffffff838116911614156107fd57600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85161790555b73ffffffffffffffffffffffffffffffffffffffff828116600081815260026020526040808220805488861684529183208054929095167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790945591905281541690555b6040517fc75b5a7100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600060248301819052604483015283169063c75b5a7190606401600060405180830381600087803b1580156108dc57600080fd5b505af11580156108f0573d6000803e3d6000fd5b505050506109088260056112dd90919063ffffffff16565b508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f25e267469ba2ae82515be7b3d45df60bf8308343f0809e8cf7319058e2255ce660405160405180910390a3505050565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156109f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a16919061170e565b610a4c576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a546112ff565b565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015610ae0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b04919061170e565b610b3a576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a546113e0565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa158015610bcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf0919061170e565b6040518060400160405280600281526020017f435000000000000000000000000000000000000000000000000000000000000081525090610c5e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b50610c6a6005826114a0565b6040518060400160405280600381526020017f414634000000000000000000000000000000000000000000000000000000000081525090610cd8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b50438173ffffffffffffffffffffffffffffffffffffffff16633dc54b406040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4991906117a3565b14156040518060400160405280600381526020017f414631000000000000000000000000000000000000000000000000000000000081525090610db9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b506004805473ffffffffffffffffffffffffffffffffffffffff90811660009081526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081169487169485179091558454168317909355915190917fced6ab9afc868b3a088366f6631ae20752993b5cce5d5f0534ea5a59fcc57d5691a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610ed0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef4919061170e565b610f2a576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f19a1603900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301528416906319a1603990604401600060405180830381600087803b158015610f9b57600080fd5b505af1158015610faf573d6000803e3d6000fd5b50505050505050565b600354600090819073ffffffffffffffffffffffffffffffffffffffff165b73ffffffffffffffffffffffffffffffffffffffff81161561102d5773ffffffffffffffffffffffffffffffffffffffff9081166000908152600260205260409020541681611025816117eb565b925050610fd7565b50919050565b600061103f60056114cf565b905090565b60006105846005836114a0565b60006105846005836114d9565b60006110897f000000000000000000000000000000000000000000000000000000000000000061119b565b90508073ffffffffffffffffffffffffffffffffffffffff16638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156110d357600080fd5b505af11580156110e7573d6000803e3d6000fd5b50506004805473ffffffffffffffffffffffffffffffffffffffff908116600090815260026020526040902080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811692871692831790915582541617905550611156905060058261127d565b5060405173ffffffffffffffffffffffffffffffffffffffff8216907f9f69b6c10f6810213e055b0ba6bc0a4e2603f73c221aad77ea35da819cda7dc390600090a250565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260601b60148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f091505073ffffffffffffffffffffffffffffffffffffffff8116611278576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f455243313136373a20637265617465206661696c6564000000000000000000006044820152606401610456565b919050565b600061129f8373ffffffffffffffffffffffffffffffffffffffff84166114e5565b9392505050565b60035473ffffffffffffffffffffffffffffffffffffffff90811660009081526002602052604090205416610a5457610a5461105e565b600061129f8373ffffffffffffffffffffffffffffffffffffffff8416611534565b60005460ff1661136b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610456565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff161561144d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610456565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586113b63390565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600183016020526040812054151561129f565b6000610584825490565b600061129f8383611627565b600081815260018301602052604081205461152c57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610584565b506000610584565b6000818152600183016020526040812054801561161d576000611558600183611824565b855490915060009061156c90600190611824565b90508181146115d157600086600001828154811061158c5761158c61183b565b90600052602060002001549050808760000184815481106115af576115af61183b565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806115e2576115e261186a565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610584565b6000915050610584565b600082600001828154811061163e5761163e61183b565b9060005260206000200154905092915050565b6000806040838503121561166457600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff8116811461127857600080fd5b6000806000606084860312156116ac57600080fd5b6116b584611673565b92506116c360208501611673565b91506116d160408501611673565b90509250925092565b6000602082840312156116ec57600080fd5b61129f82611673565b60006020828403121561170757600080fd5b5035919050565b60006020828403121561172057600080fd5b8151801515811461129f57600080fd5b600060208083528351808285015260005b8181101561175d57858101830151858201604001528201611741565b8181111561176f576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b6000602082840312156117b557600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561181d5761181d6117bc565b5060010190565b600082821015611836576118366117bc565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220f1e9c81b8c3af2491c907ee66cf24e1bb76111b821db02df8f98dbb48b5ab5fa64736f6c634300080a0033608060405234801561001057600080fd5b50610e58806100206000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c806354fd4d5011610081578063c45a01551161005b578063c45a0155146101a4578063c75b5a71146101ca578063d1660f99146101dd57600080fd5b806354fd4d501461014f5780638129fc1c14610157578063c12c21c01461015f57600080fd5b80631afbb7a4116100b25780631afbb7a41461011d5780631cff79cd146101265780633dc54b401461014657600080fd5b806316128211146100d957806317d11a15146100ee57806319a160391461010a575b600080fd5b6100ec6100e7366004610b42565b6101f0565b005b6100f760035481565b6040519081526020015b60405180910390f35b6100ec610118366004610b8d565b61024c565b6100f760025481565b610139610134366004610bef565b6102c9565b6040516101019190610d49565b6100f760045481565b6100f7600181565b6100ec610344565b60015461017f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610101565b60005461017f9062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b6100ec6101d8366004610d5c565b610494565b6100ec6101eb366004610d8f565b61053d565b60015473ffffffffffffffffffffffffffffffffffffffff163314610241576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600291909155600355565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1633146102a3576040517fb126b84800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102c573ffffffffffffffffffffffffffffffffffffffff83168260006105b4565b5050565b60015460609073ffffffffffffffffffffffffffffffffffffffff16331461031d576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033d73ffffffffffffffffffffffffffffffffffffffff8416836107b4565b9392505050565b600054610100900460ff1661035f5760005460ff1615610363565b303b155b6103f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600054610100900460ff1615801561043357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000166101011790555b600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16336201000002179055801561049157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b50565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1633146104eb576040517fb126b84800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff949094169390931790925560025560035543600455565b60015473ffffffffffffffffffffffffffffffffffffffff16331461058e576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105af73ffffffffffffffffffffffffffffffffffffffff841683836107f6565b505050565b80158061065457506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015284169063dd62ed3e90604401602060405180830381865afa15801561062e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106529190610dcb565b155b6106e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e63650000000000000000000060648201526084016103eb565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526105af9084907f095ea7b300000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261084c565b606061033d83836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250610958565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526105af9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401610732565b60006108ae826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166109589092919063ffffffff16565b8051909150156105af57808060200190518101906108cc9190610de4565b6105af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016103eb565b6060610967848460008561096f565b949350505050565b606082471015610a01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016103eb565b843b610a69576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016103eb565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051610a929190610e06565b60006040518083038185875af1925050503d8060008114610acf576040519150601f19603f3d011682016040523d82523d6000602084013e610ad4565b606091505b5091509150610ae4828286610aef565b979650505050505050565b60608315610afe57508161033d565b825115610b0e5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103eb9190610d49565b60008060408385031215610b5557600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff81168114610b8857600080fd5b919050565b60008060408385031215610ba057600080fd5b610ba983610b64565b9150610bb760208401610b64565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215610c0257600080fd5b610c0b83610b64565b9150602083013567ffffffffffffffff80821115610c2857600080fd5b818501915085601f830112610c3c57600080fd5b813581811115610c4e57610c4e610bc0565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715610c9457610c94610bc0565b81604052828152886020848701011115610cad57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b83811015610cea578181015183820152602001610cd2565b83811115610cf9576000848401525b50505050565b60008151808452610d17816020860160208601610ccf565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061033d6020830184610cff565b600080600060608486031215610d7157600080fd5b610d7a84610b64565b95602085013595506040909401359392505050565b600080600060608486031215610da457600080fd5b610dad84610b64565b9250610dbb60208501610b64565b9150604084013590509250925092565b600060208284031215610ddd57600080fd5b5051919050565b600060208284031215610df657600080fd5b8151801515811461033d57600080fd5b60008251610e18818460208701610ccf565b919091019291505056fea2646970667358221220448e7046078cd668c09328d857e534e2aab6cdc0e691d3d4f2c8baae8e084b1364736f6c634300080a003360c06040523480156200001157600080fd5b506040516200162738038062001627833981016040819052620000349162000177565b60408051808201909152600281526105a360f41b60208201526001600160a01b038216620000805760405162461bcd60e51b8152600401620000779190620001a9565b60405180910390fd5b50806001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e6919062000177565b6001600160a01b03166080816001600160a01b031681525050806001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200013e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000164919062000177565b6001600160a01b031660a0525062000201565b6000602082840312156200018a57600080fd5b81516001600160a01b0381168114620001a257600080fd5b9392505050565b600060208083528351808285015260005b81811015620001d857858101830151858201604001528201620001ba565b81811115620001eb576000604083870101525b50601f01601f1916929092016040019392505050565b60805160a0516113c2620002656000396000818161021f0152818161036401526106d501526000818160af0152818161012a015281816104420152818161056e015281816107b301528181610aa601528181610b890152610c6701526113c26000f3fe60806040526004361061005e5760003560e01c80635869dba8116100435780635869dba814610199578063deecfbc9146101bb578063e79a4089146101ce57600080fd5b80634f0e0ef31461011857806354fd4d501461017657600080fd5b366101135760408051808201909152600381527f574732000000000000000000000000000000000000000000000000000000000060208201523373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b60405180910390fd5b50005b600080fd5b34801561012457600080fd5b5061014c7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561018257600080fd5b5061018b600181565b60405190815260200161016d565b3480156101a557600080fd5b506101b96101b4366004611263565b6101ee565b005b6101b96101c936600461128f565b61031d565b3480156101da57600080fd5b506101b96101e93660046112e1565b61068e565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201819052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa15801561027b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061029f9190611318565b6040518060400160405280600281526020017f43500000000000000000000000000000000000000000000000000000000000008152509061030d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b506103188383610a77565b505050565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808516600483015284917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa1580156103ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103d19190611318565b6040518060400160405280600281526020017f52500000000000000000000000000000000000000000000000000000000000008152509061043f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e6919061133a565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600381526020017f57473100000000000000000000000000000000000000000000000000000000008152509061056b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156105d457600080fd5b505af11580156105e8573d6000803e3d6000fd5b50505050506105f78434610b3c565b6040517f9aa5d46200000000000000000000000000000000000000000000000000000000815234600482015273ffffffffffffffffffffffffffffffffffffffff848116602483015261ffff84166044830152851690639aa5d46290606401600060405180830381600087803b15801561067057600080fd5b505af1158015610684573d6000803e3d6000fd5b5050505050505050565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808516600483015284917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa15801561071e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107429190611318565b6040518060400160405280600281526020017f5250000000000000000000000000000000000000000000000000000000000000815250906107b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610833573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610857919061133a565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600381526020017f5747310000000000000000000000000000000000000000000000000000000000815250906108dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b506109703330858773ffffffffffffffffffffffffffffffffffffffff166336dda7d56040518163ffffffff1660e01b8152600401602060405180830381865afa15801561092e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610952919061133a565b73ffffffffffffffffffffffffffffffffffffffff16929190610cd4565b6040517f05fe138b0000000000000000000000000000000000000000000000000000000081526004810184905230602482015260009073ffffffffffffffffffffffffffffffffffffffff8616906305fe138b906044016020604051808303816000875af11580156109e6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0a9190611357565b9050610a168382610a77565b8273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f6de63bb986f2779478e384365c03cc2e62f06b453856acca87d5a519ce02664960405160405180910390a35050505050565b6040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632e1a7d4d90602401600060405180830381600087803b158015610aff57600080fd5b505af1158015610b13573d6000803e3d6000fd5b50610b389250505073ffffffffffffffffffffffffffffffffffffffff831682610d6f565b5050565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015282917f00000000000000000000000000000000000000000000000000000000000000009091169063dd62ed3e90604401602060405180830381865afa158015610bd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf69190611357565b1015610b38576040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303816000875af1158015610cb0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103189190611318565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052610d69908590610ec9565b50505050565b80471015610dd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610107565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114610e33576040519150601f19603f3d011682016040523d82523d6000602084013e610e38565b606091505b5050905080610318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610107565b6000610f2b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16610fd59092919063ffffffff16565b8051909150156103185780806020019051810190610f499190611318565b610318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610107565b6060610fe48484600085610fee565b90505b9392505050565b606082471015611080576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610107565b843b6110e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610107565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516111119190611370565b60006040518083038185875af1925050503d806000811461114e576040519150601f19603f3d011682016040523d82523d6000602084013e611153565b606091505b509150915061116382828661116e565b979650505050505050565b6060831561117d575081610fe7565b82511561118d5782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b60005b838110156111dc5781810151838201526020016111c4565b83811115610d695750506000910152565b602081526000825180602084015261120c8160408501602087016111c1565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461126057600080fd5b50565b6000806040838503121561127657600080fd5b82356112818161123e565b946020939093013593505050565b6000806000606084860312156112a457600080fd5b83356112af8161123e565b925060208401356112bf8161123e565b9150604084013561ffff811681146112d657600080fd5b809150509250925092565b6000806000606084860312156112f657600080fd5b83356113018161123e565b92506020840135915060408401356112d68161123e565b60006020828403121561132a57600080fd5b81518015158114610fe757600080fd5b60006020828403121561134c57600080fd5b8151610fe78161123e565b60006020828403121561136957600080fd5b5051919050565b600082516113828184602087016111c1565b919091019291505056fea264697066735822122017fd7fc76e4a1efcf24b78a3417fad7ab9576f0a23aa756ddb211c5e2227aa9564736f6c634300080a003360806040523480156200001157600080fd5b5060405162002b8038038062002b80833981016040819052620000349162000122565b6001600160a01b0381166200008f5760405162461bcd60e51b815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640160405180910390fd5b6001600160a01b03811660008181526001602052604080822080546001600160601b0319166b204fce5e3e2502611000000090811790915590517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91620000f99190815260200190565b60405180910390a350600680546001600160a81b031916336101000260ff191617905562000154565b6000602082840312156200013557600080fd5b81516001600160a01b03811681146200014d57600080fd5b9392505050565b612a1c80620001646000396000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c806370a08231116100f9578063b4b5ea5711610097578063dd62ed3e11610071578063dd62ed3e14610503578063e7a324dc14610555578063f1127ed81461057c578063f2fde38b146105ee57600080fd5b8063b4b5ea57146104ca578063c3cda520146104dd578063d505accf146104f057600080fd5b806395d89b41116100d357806395d89b411461045b5780639742ca4614610497578063a9059cbb146104aa578063b0660c3d146104bd57600080fd5b806370a08231146103c7578063782d6fe11461040b5780637ecebe001461043b57600080fd5b806330adf81f11610166578063481c6a7511610140578063481c6a751461031e578063587cde1e146103435780635c19a95c146103795780636fcfff451461038c57600080fd5b806330adf81f14610298578063313ce567146102bf578063349dc329146102d957600080fd5b806320606b701161019757806320606b70146102545780632185810b1461027b57806323b872dd1461028557600080fd5b806306fdde03146101be578063095ea7b31461021057806318160ddd14610233575b600080fd5b6101fa6040518060400160405280600781526020017f47656172626f780000000000000000000000000000000000000000000000000081525081565b60405161020791906124a3565b60405180910390f35b61022361021e36600461253f565b610601565b6040519015158152602001610207565b6102466b204fce5e3e2502611000000081565b604051908152602001610207565b6102467f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b61028361070d565b005b610223610293366004612569565b6107ee565b6102467f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b6102c7601281565b60405160ff9091168152602001610207565b6007546102f99073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610207565b6006546102f990610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6102f96103513660046125a5565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6102836103873660046125a5565b61098a565b6103b261039a3660046125a5565b60046020526000908152604090205463ffffffff1681565b60405163ffffffff9091168152602001610207565b6102466103d53660046125a5565b73ffffffffffffffffffffffffffffffffffffffff166000908152600160205260409020546bffffffffffffffffffffffff1690565b61041e61041936600461253f565b610997565b6040516bffffffffffffffffffffffff9091168152602001610207565b6102466104493660046125a5565b60056020526000908152604090205481565b6101fa6040518060400160405280600481526020017f474541520000000000000000000000000000000000000000000000000000000081525081565b6102836104a53660046125a5565b610cae565b6102236104b836600461253f565b610e20565b6006546102239060ff1681565b61041e6104d83660046125a5565b610e5c565b6102836104eb3660046125d1565b610efa565b6102836104fe366004612629565b611310565b610246610511366004612693565b73ffffffffffffffffffffffffffffffffffffffff9182166000908152602081815260408083209390941682529190915220546bffffffffffffffffffffffff1690565b6102467fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b6105c561058a3660046126c6565b600360209081526000928352604080842090915290825290205463ffffffff81169064010000000090046bffffffffffffffffffffffff1682565b6040805163ffffffff90931683526bffffffffffffffffffffffff909116602083015201610207565b6102836105fc3660046125a5565b61187a565b6000807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83141561063f57506bffffffffffffffffffffffff610664565b6106618360405180606001604052806025815260200161285260259139611a15565b90505b3360008181526020818152604080832073ffffffffffffffffffffffffffffffffffffffff89168085529083529281902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff871690811790915590519081529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a360019150505b92915050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314610798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e616765720060448201526064015b60405180910390fd5b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f795b0e16c8da9807b0a215f3749bd6dbcc49fc0472183f4e446abb7dcbd9d00790600090a1565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081815260408083203380855290835281842054825160608101909352602580845291936bffffffffffffffffffffffff909116928592610856928892919061285290830139611a15565b90508673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156108a257506bffffffffffffffffffffffff82811614155b156109725760006108cc83836040518060600160405280603d8152602001612974603d9139611a67565b73ffffffffffffffffffffffffffffffffffffffff898116600081815260208181526040808320948a168084529482529182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff87169081179091559151918252939450919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505b61097d878783611ad5565b5060019695505050505050565b6109943382611e9c565b50565b6000438210610a28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f476561723a3a6765745072696f72566f7465733a206e6f74207965742064657460448201527f65726d696e656400000000000000000000000000000000000000000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff831660009081526004602052604090205463ffffffff1680610a63576000915050610707565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604081208491610a95600185612735565b63ffffffff90811682526020820192909252604001600020541611610b1b5773ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812090610ae5600184612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff1691506107079050565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020908152604080832083805290915290205463ffffffff16831015610b63576000915050610707565b600080610b71600184612735565b90505b8163ffffffff168163ffffffff161115610c565760006002610b968484612735565b610ba0919061275a565b610baa9083612735565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260036020908152604080832063ffffffff8581168552908352928190208151808301909252549283168082526401000000009093046bffffffffffffffffffffffff1691810191909152919250871415610c2a576020015194506107079350505050565b805163ffffffff16871115610c4157819350610c4f565b610c4c600183612735565b92505b5050610b74565b5073ffffffffffffffffffffffffffffffffffffffff8516600090815260036020908152604080832063ffffffff909416835292905220546bffffffffffffffffffffffff6401000000009091041691505092915050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314610d34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e6167657200604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff8116610db1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640161078f565b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f2f834d1c8c4b956018fff5faca4d99868ae635487424d9c265c257ccbc698c6a90600090a250565b600080610e45836040518060600160405280602681526020016128a760269139611a15565b9050610e52338583611ad5565b5060019392505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526004602052604081205463ffffffff1680610e94576000610ef3565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812090610ec5600184612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b9392505050565b604080518082018252600781527f47656172626f780000000000000000000000000000000000000000000000000060209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f028ef9f797075f74ac647c65fde04fb0f128c2d59fd40f45732269917642fd4681840152466060820152306080808301919091528351808303909101815260a0820184528051908301207fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60c083015273ffffffffffffffffffffffffffffffffffffffff8a1660e08301526101008201899052610120808301899052845180840390910181526101408301909452835193909201929092207f19010000000000000000000000000000000000000000000000000000000000006101608401526101628301829052610182830181905290916000906101a201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa1580156110d8573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166111a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f476561723a3a64656c656761746542795369673a20696e76616c69642073696760448201527f6e61747572650000000000000000000000000000000000000000000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff811660009081526005602052604081208054916111d7836127a4565b919050558914611269576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f476561723a3a64656c656761746542795369673a20696e76616c6964206e6f6e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161078f565b874211156112f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f476561723a3a64656c656761746542795369673a207369676e6174757265206560448201527f7870697265640000000000000000000000000000000000000000000000000000606482015260840161078f565b611303818b611e9c565b505050505b505050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86141561134d57506bffffffffffffffffffffffff611372565b61136f8660405180606001604052806024815260200161291c60249139611a15565b90505b604080518082018252600781527f47656172626f780000000000000000000000000000000000000000000000000060209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f028ef9f797075f74ac647c65fde04fb0f128c2d59fd40f45732269917642fd4681840152466060820152306080808301919091528351808303909101815260a0909101835280519082012073ffffffffffffffffffffffffffffffffffffffff8b166000908152600590925291812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918c918c918c919086611472836127a4565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810188905260e001604051602081830303815290604052805190602001209050600082826040516020016115199291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff8b169284019290925260608301899052608083018890529092509060019060a0016020604051602081039080840390855afa1580156115a2573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661164a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a7065726d69743a20696e76616c6964207369676e617475726500604482015260640161078f565b8b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146116df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f476561723a3a7065726d69743a20756e617574686f72697a6564000000000000604482015260640161078f565b88421115611749576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a7065726d69743a207369676e6174757265206578706972656400604482015260640161078f565b846000808e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508a73ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258760405161186491906bffffffffffffffffffffffff91909116815260200190565b60405180910390a3505050505050505050505050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314611900576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e6167657200604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff811661197d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640161078f565b60065460405173ffffffffffffffffffffffffffffffffffffffff80841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36006805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b6000816c010000000000000000000000008410611a5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b509192915050565b6000836bffffffffffffffffffffffff16836bffffffffffffffffffffffff1611158290611ac2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b50611acd83856127dd565b949350505050565b60065460ff1680611b025750600654610100900473ffffffffffffffffffffffffffffffffffffffff1633145b80611b24575060075473ffffffffffffffffffffffffffffffffffffffff1633145b611b8a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f476561723a3a7472616e73666572732061726520666f7262696464656e000000604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff8316611c2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603c60248201527f476561723a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260448201527f616e736665722066726f6d20746865207a65726f206164647265737300000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff8216611cd0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f476561723a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260448201527f616e7366657220746f20746865207a65726f2061646472657373000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260016020908152604091829020548251606081019093526036808452611d2d936bffffffffffffffffffffffff90921692859291906129b190830139611a67565b73ffffffffffffffffffffffffffffffffffffffff848116600090815260016020908152604080832080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff968716179055928616825290829020548251606081019093526030808452611dbf949190911692859290919061287790830139611f50565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260409182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff968716179055905193851684529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a373ffffffffffffffffffffffffffffffffffffffff808416600090815260026020526040808220548584168352912054611e9792918216911683611fc1565b505050565b73ffffffffffffffffffffffffffffffffffffffff808316600081815260026020818152604080842080546001845282862054949093528787167fffffffffffffffffffffffff000000000000000000000000000000000000000084168117909155905191909516946bffffffffffffffffffffffff9092169391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4611f4a828483611fc1565b50505050565b600080611f5d8486612802565b9050846bffffffffffffffffffffffff16816bffffffffffffffffffffffff1610158390611fb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b50949350505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561200b57506000816bffffffffffffffffffffffff16115b15611e975773ffffffffffffffffffffffffffffffffffffffff8316156120fd5773ffffffffffffffffffffffffffffffffffffffff831660009081526004602052604081205463ffffffff1690816120655760006120c4565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812090612096600185612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b905060006120eb82856040518060600160405280602881526020016128cd60289139611a67565b90506120f9868484846121e2565b5050505b73ffffffffffffffffffffffffffffffffffffffff821615611e975773ffffffffffffffffffffffffffffffffffffffff821660009081526004602052604081205463ffffffff1690816121525760006121b1565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812090612183600185612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b905060006121d882856040518060600160405280602781526020016128f560279139611f50565b9050611308858484845b60006122064360405180606001604052806034815260200161294060349139612465565b905060008463ffffffff1611801561226d575073ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812063ffffffff831691612251600188612735565b63ffffffff908116825260208201929092526040016000205416145b156123035773ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812083916122a4600188612735565b63ffffffff168152602081019190915260400160002080546bffffffffffffffffffffffff92909216640100000000027fffffffffffffffffffffffffffffffff000000000000000000000000ffffffff9092169190911790556123fe565b60408051808201825263ffffffff80841682526bffffffffffffffffffffffff808616602080850191825273ffffffffffffffffffffffffffffffffffffffff8b166000908152600382528681208b8616825290915294909420925183549451909116640100000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009094169116179190911790556123a5846001612832565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260046020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff929092169190911790555b604080516bffffffffffffffffffffffff80861682528416602082015273ffffffffffffffffffffffffffffffffffffffff8716917fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724910160405180910390a25050505050565b6000816401000000008410611a5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91905b600060208083528351808285015260005b818110156124d0578581018301518582016040015282016124b4565b818111156124e2576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461253a57600080fd5b919050565b6000806040838503121561255257600080fd5b61255b83612516565b946020939093013593505050565b60008060006060848603121561257e57600080fd5b61258784612516565b925061259560208501612516565b9150604084013590509250925092565b6000602082840312156125b757600080fd5b610ef382612516565b803560ff8116811461253a57600080fd5b60008060008060008060c087890312156125ea57600080fd5b6125f387612516565b9550602087013594506040870135935061260f606088016125c0565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a03121561264457600080fd5b61264d88612516565b965061265b60208901612516565b95506040880135945060608801359350612677608089016125c0565b925060a0880135915060c0880135905092959891949750929550565b600080604083850312156126a657600080fd5b6126af83612516565b91506126bd60208401612516565b90509250929050565b600080604083850312156126d957600080fd5b6126e283612516565b9150602083013563ffffffff811681146126fb57600080fd5b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600063ffffffff8381169083168181101561275257612752612706565b039392505050565b600063ffffffff80841680612798577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156127d6576127d6612706565b5060010190565b60006bffffffffffffffffffffffff8381169083168181101561275257612752612706565b60006bffffffffffffffffffffffff80831681851680830382111561282957612829612706565b01949350505050565b600063ffffffff8083168185168083038211156128295761282961270656fe476561723a3a617070726f76653a20616d6f756e7420657863656564732039362062697473476561723a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e74206f766572666c6f7773476561723a3a7472616e736665723a20616d6f756e7420657863656564732039362062697473476561723a3a5f6d6f7665566f7465733a20766f746520616d6f756e7420756e646572666c6f7773476561723a3a5f6d6f7665566f7465733a20766f746520616d6f756e74206f766572666c6f7773476561723a3a7065726d69743a20616d6f756e7420657863656564732039362062697473476561723a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d62657220657863656564732033322062697473476561723a3a7472616e7366657246726f6d3a207472616e7366657220616d6f756e742065786365656473207370656e64657220616c6c6f77616e6365476561723a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e7420657863656564732062616c616e6365a26469706673582212201b84fd7789a35c022f692420863210a30e82d2405659f5a28275d433fa53467f64736f6c634300080a003360806040526016805460ff1916905534801561001a57600080fd5b506040516110a73803806110a7833981016040819052610039916100b6565b600080546001600160a01b038085166001600160a01b0319928316179092556003805492841692909116919091179055610080600a6b033b2e3c9fd0803ce80000006100e9565b60075550506b033b2e3c9fd0803ce800000060155561010b565b80516001600160a01b03811681146100b157600080fd5b919050565b600080604083850312156100c957600080fd5b6100d28361009a565b91506100e06020840161009a565b90509250929050565b60008261010657634e487b7160e01b600052601260045260246000fd5b500490565b610f8d8061011a6000396000f3fe608060405234801561001057600080fd5b50600436106102e95760003560e01c806367c99d5811610191578063c5f956af116100e3578063dbcb313b11610097578063f11a648711610071578063f11a648714610320578063f3fdb15a146105f1578063fe14112d1461061157600080fd5b8063dbcb313b146105d6578063e941fa78146105df578063ef8d9603146105e857600080fd5b8063cb3905e1116100c8578063cb3905e1146105c4578063cf33d95514610320578063d0efe753146105cd57600080fd5b8063c5f956af14610588578063ca9505e4146105a857600080fd5b80639aa5d46211610145578063b6ac642a1161011f578063b6ac642a14610567578063bb04b19314610567578063bf28068b1461057557600080fd5b80639aa5d46214610544578063a4e8273e14610557578063b3554a0a1461055e57600080fd5b8063788c6bfe11610176578063788c6bfe146104ef5780638456cb591461050157806396df5dc01461053157600080fd5b806367c99d58146104de57806374375359146104e757600080fd5b806336dda7d51161024a5780634d778ad1116101fe57806354fd4d50116101d857806354fd4d50146104c05780635c975abb146104c8578063609ae317146104d557600080fd5b80634d778ad114610491578063532fe502146104a45780635427c938146104ad57600080fd5b80633f4ba83a1161022f5780633f4ba83a1461045257806345d31f9d1461047f5780634c19386c1461048857600080fd5b806336dda7d51461040f5780633e163df01461042f57600080fd5b80632495a599116102a157806329f3d3b61161028657806329f3d3b6146103b35780632a3354c9146103bc5780632e97ca21146103dc57600080fd5b80632495a599146103735780632954018c1461039357600080fd5b8063078c4781116102d2578063078c4781146103205780630fce70fb146103335780631e16e4fc1461033b57600080fd5b8063030dbb04146102ee57806305fe138b1461030a575b600080fd5b6102f760105481565b6040519081526020015b60405180910390f35b6102f7610318366004610ce8565b600092915050565b61033161032e366004610d14565b50565b005b6015546102f7565b61034e610349366004610d2f565b610618565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610301565b60035461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b60005461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6102f760095481565b600a5461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103ff6103ea366004610d14565b60066020526000908152604090205460ff1681565b6040519015158152602001610301565b60055461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103ff61043d366004610d14565b60146020526000908152604090205460ff1681565b610331601680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b6102f760075481565b6102f760015481565b6102f761049f366004610d2f565b61064f565b6102f760115481565b6102f76104bb366004610d2f565b61066d565b6102f7600181565b6016546103ff9060ff1681565b6102f760085481565b6102f7600d5481565b6102f7610685565b6b033b2e3c9fd0803ce80000006102f7565b610331601680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b61033161053f366004610d2f565b601555565b610331610552366004610d48565b505050565b60016102f7565b6102f7600e5481565b61033161032e366004610d2f565b610331610583366004610ce8565b61071d565b60135461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103316105b6366004610d7d565b600b92909255600c55600d55565b6102f7600c5481565b6102f7600b5481565b6102f760155481565b6102f7600f5481565b6102f760025481565b60125461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b60006102f7565b6004818154811061062857600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6000610667826b033b2e3c9fd0803ce800000061077a565b92915050565b6000610667826b033b2e3c9fd0803ce80000006108e9565b6003546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156106f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107189190610da9565b905090565b6009829055600a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691909117909155600354610776911682846109fe565b5050565b60408051808201909152600281527f4d330000000000000000000000000000000000000000000000000000000000006020820152600090826107f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b60405180910390fd5b506000610800600284610e72565b90506b033b2e3c9fd0803ce8000000610839827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610ead565b6108439190610e72565b8411156040518060400160405280600281526020017f4d31000000000000000000000000000000000000000000000000000000000000815250906108b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b5082816108cd6b033b2e3c9fd0803ce800000087610ec4565b6108d79190610f01565b6108e19190610e72565b949350505050565b60008215806108f6575081155b1561090357506000610667565b8161091b60026b033b2e3c9fd0803ce8000000610e72565b610945907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610ead565b61094f9190610e72565b8311156040518060400160405280600281526020017f4d31000000000000000000000000000000000000000000000000000000000000815250906109c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b506b033b2e3c9fd0803ce80000006109d9600282610e72565b6109e38486610ec4565b6109ed9190610f01565b6109f79190610e72565b9392505050565b6040805173ffffffffffffffffffffffffffffffffffffffff848116602483015260448083018590528351808403909101815260649092018352602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65649084015261055292869291600091610ac9918516908490610b73565b8051909150156105525780806020019051810190610ae79190610f19565b610552576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016107e9565b60606108e1848460008585843b610be6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107e9565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051610c0f9190610f3b565b60006040518083038185875af1925050503d8060008114610c4c576040519150601f19603f3d011682016040523d82523d6000602084013e610c51565b606091505b5091509150610c61828286610c6c565b979650505050505050565b60608315610c7b5750816109f7565b825115610c8b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ce357600080fd5b919050565b60008060408385031215610cfb57600080fd5b82359150610d0b60208401610cbf565b90509250929050565b600060208284031215610d2657600080fd5b6109f782610cbf565b600060208284031215610d4157600080fd5b5035919050565b600080600060608486031215610d5d57600080fd5b83359250610d6d60208501610cbf565b9150604084013590509250925092565b600080600060608486031215610d9257600080fd5b505081359360208301359350604090920135919050565b600060208284031215610dbb57600080fd5b5051919050565b60005b83811015610ddd578181015183820152602001610dc5565b83811115610dec576000848401525b50505050565b6020815260008251806020840152610e11816040850160208701610dc2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082610ea8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600082821015610ebf57610ebf610e43565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610efc57610efc610e43565b500290565b60008219821115610f1457610f14610e43565b500190565b600060208284031215610f2b57600080fd5b815180151581146109f757600080fd5b60008251610f4d818460208701610dc2565b919091019291505056fea26469706673582212204edb887d94928b3914f60ab48df0182da9eb30ddbb7021b164cc728b60a655d564736f6c634300080a00336101606040526000805462ff00001916620c00001790553480156200002357600080fd5b50604051620058e8380380620058e8833981016040819052620000469162000537565b806001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000085573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ab919062000537565b6000805460ff191690556001600160a01b038116620000dd57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200011c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000142919062000537565b6001600160a01b03166080816001600160a01b031681525050506000816001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200019d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c3919062000537565b6001600160a01b03831661010081905260e081905260408051632495a59960e01b81529051929350600092632495a599916004808201926020929091908290030181865afa1580156200021a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000240919062000537565b6001600160a01b03811660c05290506200025a8162000472565b816001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000299573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002bf919062000537565b6001600160a01b0316610120816001600160a01b031681525050816001600160a01b03166377532ed96040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000318573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033e919062000537565b6001600160a01b0316610140816001600160a01b031681525050816001600160a01b031663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000397573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003bd919062000537565b6001600001600a6101000a8154816001600160a01b0302191690836001600160a01b03160217905550816001600160a01b0316639068a8686040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000425573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044b919062000537565b6001600160a01b031660a0525050600380546001600160a01b031916331790555062000588565b6001600160a01b03811660009081526006602052604090205415620004aa57604051632e5a5c7760e01b815260040160405180910390fd5b61010060055410620004cf57604051631cbbe18560e01b815260040160405180910390fd5b600580546001600160a01b0383166000818152600660209081526040808320600190951b948590558483526004909152812091909155825491929062000515836200055e565b91905055505050565b6001600160a01b03811681146200053457600080fd5b50565b6000602082840312156200054a57600080fd5b815162000557816200051e565b9392505050565b60006000198214156200058157634e487b7160e01b600052601160045260246000fd5b5060010190565b60805160a05160c05160e051610100516101205161014051615248620006a0600039600081816107e20152818161371001526137c501526000818161052f01526136780152600081816103d301528181610e5701528181610ebb015281816124ff0152818161265a01528181612aa101528181612b8c01528181612c4e01528181612d0d0152613b8f015260006105a401526000818161062701528181610d2201528181610db301528181610e0001528181610e3601528181610f3f0152818161203a01528181612b6b015281816130ee015281816134dc015281816135a90152613fe601526000818161081c01528181610fe101526124c20152600081816107a80152818161118401526122cb01526152486000f3fe608060405234801561001057600080fd5b50600436106103415760003560e01c8063830aa745116101bd578063a70bc542116100f9578063e75538c7116100a2578063f9aa028a1161007c578063f9aa028a1461089d578063fdd57645146108bd578063fe47cde7146108f3578063ff6875431461091357600080fd5b8063e75538c714610864578063e958b70414610877578063f67c5bd01461088a57600080fd5b8063db7ceb80116100d3578063db7ceb8014610817578063dc2b21c11461083e578063e1998cf91461085157600080fd5b8063a70bc542146107ca578063c5e10eef146107dd578063d48bfca71461080457600080fd5b806394cf073a116101665780639f5f86ae116101405780639f5f86ae146107745780639fd12b7714610787578063a366f49614610790578063a50cf2c8146107a357600080fd5b806394cf073a146106f557806395373018146107085780639af1d35a1461071b57600080fd5b80638991b2f1116101975780638991b2f1146106af5780638fe3f93f146106cf578063944ac59f146106e257600080fd5b8063830aa7451461066f5780638345f26e146106825780638456cb59146106a757600080fd5b8063458936f51161028c578063570a7af2116102355780636ce4074a1161020f5780636ce4074a146105ef5780636e98e5e41461060f5780636f307dc314610622578063783274381461064957600080fd5b8063570a7af21461059f5780635c975abb146105c6578063654a9eda146105dc57600080fd5b80635063524a116102665780635063524a1461055157806351e3f1601461058457806354fd4d501461059757600080fd5b8063458936f51461050e57806346fb371d146105175780634f0e0ef31461052a57600080fd5b80632630c12f116102ee5780633192195c116102c85780633192195c146104be5780633e8297ca146104e65780633f4ba83a1461050657600080fd5b80632630c12f1461045857806329df0b93146104845780632f7a18811461049757600080fd5b806316f0115b1161031f57806316f0115b146103ce578063172c48c7146103f55780632362a2d81461043757600080fd5b8063055ee9b5146103465780630d8f9cee146103a657806311ca4fc2146103bb575b600080fd5b61037c610354366004614a87565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6103b96103b4366004614aa4565b610949565b005b6103b96103c9366004614aa4565b610a76565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b610408610403366004614add565b610b4e565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835261ffff90911660208301520161039d565b61044a610445366004614b13565b610b66565b60405190815260200161039d565b6001546a0100000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1661037c565b6103b9610492366004614a87565b6110be565b60005461037c906301000000900473ffffffffffffffffffffffffffffffffffffffff1681565b6104d16104cc366004614a87565b611122565b6040805192835260208301919091520161039d565b61044a6104f4366004614a87565b60096020526000908152604090205481565b6103b9611156565b61044a60055481565b6103b9610525366004614b95565b611244565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b61056461055f366004614be6565b61149b565b60408051948552602085019390935291830152606082015260800161039d565b6103b9610592366004614aa4565b611602565b61044a600281565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b60005460ff16604051901515815260200161039d565b6103b96105ea366004614c21565b611703565b6106026105fd366004614d40565b611bbb565b60405161039d9190614e5b565b6103b961061d366004614aa4565b611e8e565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b61065c610657366004614a87565b612036565b60405161ffff909116815260200161039d565b6103b961067d366004614b95565b61210f565b6000546106959062010000900460ff1681565b60405160ff909116815260200161039d565b6103b961229d565b61044a6106bd366004614a87565b60086020526000908152604090205481565b61037c6106dd366004614e6e565b612389565b6103b96106f0366004614ea5565b612718565b61044a610703366004614f0a565b612845565b6103b9610716366004614a87565b612e5a565b6001546040805161ffff808416825262010000840481166020830152640100000000840481169282019290925266010000000000008304821660608201526801000000000000000090920416608082015260a00161039d565b6103b9610782366004614a87565b612f85565b61044a60075481565b6103b961079e366004614add565b613045565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b96107d8366004614f4c565b61309b565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b9610812366004614a87565b613221565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b961084c366004614f81565b61327b565b6103b961085f366004614aa4565b613306565b610408610872366004614add565b6134c9565b61037c610885366004614a87565b613541565b61044a610898366004614a87565b6135a5565b60035461037c9073ffffffffffffffffffffffffffffffffffffffff1681565b61037c6108cb366004614a87565b600b6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b600c5461037c9073ffffffffffffffffffffffffffffffffffffffff1681565b61037c610921366004614a87565b600a6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561099b57506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b156109d2576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff1615610a14576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055610a4a828261362e565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b60035473ffffffffffffffffffffffffffffffffffffffff163314610ac7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805473ffffffffffffffffffffffffffffffffffffffff9384166301000000027fffffffffffffffffff0000000000000000000000000000000000000000ffffff90911617905560018054919092166a0100000000000000000000027fffff0000000000000000000000000000000000000000ffffffffffffffffffff909116179055565b600080610b5d6001841b6134c9565b91509150915091565b6000805460ff1615610bd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064015b60405180910390fd5b600054610100900460ff1615610c1b576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff163314610ca0576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610cab89613541565b90506000806000806000610cbe86611122565b9094509050610ccf8c8e868461149b565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152939b5093985090955093506000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015610d6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8f9190614fa4565b9050610d9b8887614fec565b610da6906001614fec565b811115610de657610de1877f00000000000000000000000000000000000000000000000000000000000000008d60018c8b870303038d61366e565b610e30565b610e3073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168d8960018a8d01869003016138c0565b610e7e877f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000089600061366e565b6040517fca9505e40000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604481018490527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ca9505e490606401600060405180830381600087803b158015610f1457600080fd5b505af1158015610f28573d6000803e3d6000fd5b50505050505050506001841115610f6757610f67837f00000000000000000000000000000000000000000000000000000000000000008d87600061366e565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260086020526040902054861916610f9c8489888461395b565b6040517f89b77b3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f000000000000000000000000000000000000000000000000000000000000000016906389b77b3e90602401600060405180830381600087803b15801561102557600080fd5b505af1158015611039573d6000803e3d6000fd5b50505073ffffffffffffffffffffffffffffffffffffffff909c16600090815260026020526040812080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550929a9950505050505050505050565b6000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314611116576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61111f81613a35565b50565b60008060008061113185613aa6565b91955092509050816111438286615004565b61114d9190615041565b92505050915091565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156111e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611204919061507c565b61123a576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611242613c24565b565b60005460ff16156112b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156112f3576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100178155338152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff9081169084161480159061137457506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b80156113985750600c5473ffffffffffffffffffffffffffffffffffffffff163314155b806113b7575073ffffffffffffffffffffffffffffffffffffffff8316155b156113ee576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113f7826135a5565b61142d576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061143885613541565b9050611448838583856000613d05565b61146c5761145b83858360006001613d05565b5061146a838583856001613d05565b505b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b6001546000908190819081906127109061ffff166114b98888615099565b6114c39190615004565b6114cd9190615041565b6114d79086614fec565b935060018760028111156114ed576114ed6150b0565b1415611587576001546000906127109061151390640100000000900461ffff168b615004565b61151d9190615041565b6001549091506127109061153b9062010000900461ffff168b615004565b6115459190615041565b61154f9086614fec565b94508481111561156657600185820303935061156a565b8094505b85811061157b578585039250611581565b84860391505b506115f7565b600287600281111561159b5761159b6150b0565b14156115f157600154600090612710906115c59068010000000000000000900461ffff168b615004565b6115cf9190615041565b6001549091506127109061153b906601000000000000900461ffff168b615004565b84840391505b945094509450949050565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561165457506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b1561168b576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff16156116cd576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055610a4a8282613ea6565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561175557506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b1561178c576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff16156117ce576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790556118048584613ea6565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152600091908616906370a0823190602401602060405180830381865afa158015611874573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118989190614fa4565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529192506000918616906370a0823190602401602060405180830381865afa15801561190a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192e9190614fa4565b60015490915060009081906a0100000000000000000000900473ffffffffffffffffffffffffffffffffffffffff16635cecbd0e61196c8689615099565b8a6119778988615099565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152600481019390935273ffffffffffffffffffffffffffffffffffffffff918216602484015260448301528a1660648201526084016040805180830381865afa1580156119f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1791906150df565b9150915060018411611a2d57611a2d898961362e565b611a3687612036565b611a449061ffff1682615004565b9050611a4f88612036565b611a5d9061ffff1683615004565b9150818110611a7857611a6f89613a35565b5050505061146c565b73ffffffffffffffffffffffffffffffffffffffff891660009081526009602052604081205483611ab56b033b2e3c9fd0803ce800000085615004565b611abf9190615041565b611ad5906b033b2e3c9fd0803ce8000000615099565b611adf9190614fec565b60015490915061271090611b0a906b033b2e3c9fd0803ce80000009062010000900461ffff16615004565b611b149190615041565b8111611b555773ffffffffffffffffffffffffffffffffffffffff8a166000908152600960205260409020819055611b4b8a613a35565b505050505061146c565b611b5e8a613f56565b50505073ffffffffffffffffffffffffffffffffffffffff871660009081526009602052604090206001905550505050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b6060611bc960005460ff1690565b15611c30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff1615611c72576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100178155338152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff908116908416141580611ce7575073ffffffffffffffffffffffffffffffffffffffff8316155b15611d3d57600c5473ffffffffffffffffffffffffffffffffffffffff163314611d3d576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611d4885613541565b90508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167faed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab0360405160405180910390a36040517f1cff79cd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821690631cff79cd90611df89087908790600401615103565b6000604051808303816000875af1158015611e17573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611e5d9190810190615132565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905595945050505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314611edf576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821615611f4f5773ffffffffffffffffffffffffffffffffffffffff8281166000908152600a6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169183169190911790555b73ffffffffffffffffffffffffffffffffffffffff811615611fbf5773ffffffffffffffffffffffffffffffffffffffff8181166000908152600b6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169184169190911790555b73ffffffffffffffffffffffffffffffffffffffff811673cccccccccccccccccccccccccccccccccccccccc141561203257600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790555b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120ba5750506001547e01000000000000000000000000000000000000000000000000000000000000900461ffff1690565b60006120c5836135a5565b9050806120fe576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612107816134c9565b949350505050565b60005460ff161561217c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156121be576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff163314612243576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61224d8383613ea6565b61226f73ffffffffffffffffffffffffffffffffffffffff83168585846138c0565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555050565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015612327573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061234b919061507c565b612381576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112426142d4565b6000805460ff16156123f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff1615612439576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff1633146124be576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166321d18456857f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612568573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061258c9190614fa4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168152600481019290925260248201526044016020604051808303816000875af11580156125e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061260b91906151a0565b6040517fbf28068b0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff80831660248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063bf28068b90604401600060405180830381600087803b1580156126a057600080fd5b505af11580156126b4573d6000803e3d6000fd5b505050506126c28382614394565b73ffffffffffffffffffffffffffffffffffffffff811660009081526008602052604081206001905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690559392505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314612769576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805461ffff92831668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9484166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff96851664010000000002969096167fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff97851662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000090931694909816939093171794909416949094179190911716919091179055565b6000805460ff16156128b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156128f5576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff16331461297a576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080600061298887613aa6565b925092509250846129a25761299d8684615099565b6129ac565b6129ac8684614fec565b935060008515612b045769021e19e0c9bab24000008510612a15576129d583603689901c615004565b6129e3603686901c84615004565b6129ed9190614fec565b603686901c6129fc8585615004565b612a069190615004565b612a109190615041565b612a52565b612a1f8388615004565b612a298584615004565b612a339190614fec565b85612a3e8585615004565b612a489190615004565b612a529190615041565b6040517fbf28068b0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff8a811660248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063bf28068b90604401600060405180830381600087803b158015612ae757600080fd5b505af1158015612afb573d6000803e3d6000fd5b50505050612d9f565b60008484612b128583615004565b612b1c9190615041565b612b269190615099565b60015490915060009061271090612b419061ffff1684615004565b612b4b9190615041565b905073ffffffffffffffffffffffffffffffffffffffff8a1663d1660f997f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000084612bb6878f614fec565b612bc09190614fec565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b158015612c3457600080fd5b505af1158015612c48573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ca9505e4838b612c949190614fec565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815260048101919091526024810184905260006044820152606401600060405180830381600087803b158015612cf357600080fd5b505af1158015612d07573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d9a9190614fa4565b925050505b6040517f16128211000000000000000000000000000000000000000000000000000000008152600481018690526024810182905273ffffffffffffffffffffffffffffffffffffffff891690631612821190604401600060405180830381600087803b158015612e0e57600080fd5b505af1158015612e22573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055509498975050505050505050565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff16158015612eac57506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b15612ee3576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff1615612f25576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055612f5a81613f56565b50600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b60035473ffffffffffffffffffffffffffffffffffffffff163314612fd6576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517ff62005acebe9b616aefb5f248b48f5e89f28437b27d1eebc0b2d911209f297af90600090a250565b60035473ffffffffffffffffffffffffffffffffffffffff163314613096576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600755565b60035473ffffffffffffffffffffffffffffffffffffffff1633146130ec576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613193576001805461ffff83167e01000000000000000000000000000000000000000000000000000000000000027dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790555050565b600061319e836135a5565b9050806131d7576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000908152600460205260409020805473ffffffffffffffffffffffffffffffffffffffff1675ffff000000000000000000000000000000000000000060a084901b161790555050565b60035473ffffffffffffffffffffffffffffffffffffffff163314613272576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61111f81614467565b60035473ffffffffffffffffffffffffffffffffffffffff1633146132cc576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805460ff90921662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff909216919091179055565b60005460ff1615613373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156133b5576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff16331461343a576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061344583613541565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260026020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055905061349c8282614394565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b60008082600114156135275750506001547f0000000000000000000000000000000000000000000000000000000000000000927e0100000000000000000000000000000000000000000000000000000000000090910461ffff169150565b50506000908152600460205260409020549060a082901c90565b73ffffffffffffffffffffffffffffffffffffffff80821660009081526002602052604090205416806135a0576040517fb5ba4c4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146136255773ffffffffffffffffffffffffffffffffffffffff8216600090815260066020526040902054613628565b60015b92915050565b6000613639826135a5565b73ffffffffffffffffffffffffffffffffffffffff909316600090815260086020526040902080549319939093169092555050565b8080156136c657507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b15613828576040517fd1660f9900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301526044820184905286169063d1660f9990606401600060405180830381600087803b15801561376357600080fd5b505af1158015613777573d6000803e3d6000fd5b50506040517f5869dba800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690527f0000000000000000000000000000000000000000000000000000000000000000169250635869dba89150604401600060405180830381600087803b15801561380b57600080fd5b505af115801561381f573d6000803e3d6000fd5b505050506138b9565b6040517fd1660f9900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301526044820184905286169063d1660f9990606401600060405180830381600087803b1580156138a057600080fd5b505af11580156138b4573d6000803e3d6000fd5b505050505b5050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261395590859061455b565b50505050565b60025b8181116138b95781811615613a2d576000613978826134c9565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529192506000918316906370a0823190602401602060405180830381865afa1580156139eb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a0f9190614fa4565b90506002811115613a2a57613a2a878388600185038961366e565b50505b60011b61395e565b73ffffffffffffffffffffffffffffffffffffffff811660009081526008602052604081205490613a6582614667565b60005490915062010000900460ff16811115613aa1576000613a86836146a7565b613a91906001614fec565b905061395584848460008561470b565b505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff16631afbb7a46040518163ffffffff1660e01b8152600401602060405180830381865afa158015613af6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b1a9190614fa4565b92508373ffffffffffffffffffffffffffffffffffffffff166317d11a156040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b8b9190614fa4565b91507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bf8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c1c9190614fa4565b929491935050565b60005460ff16613c90576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610bd0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6040805173ffffffffffffffffffffffffffffffffffffffff8681166024830152604480830186905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b30000000000000000000000000000000000000000000000000000000017905291517f1cff79cd000000000000000000000000000000000000000000000000000000008152600092861691631cff79cd91613dc6918a91600401615103565b6000604051808303816000875af1925050508015613e2457506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052613e219190810190615132565b60015b613e2d57613e61565b80511580613e50575080806020019051810190613e4a919061507c565b15156001145b15613e5f576001915050613e9d565b505b8115613e99576040517f76e3e29c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060005b95945050505050565b6000613eb1826135a5565b9050801580613ec35750600754811615155b15613efa576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83166000908152600860205260409020548116613aa15773ffffffffffffffffffffffffffffffffffffffff83166000908152600860205260409020805482179055505050565b60015473ffffffffffffffffffffffffffffffffffffffff8281166000908152600860205260408120546a010000000000000000000090930490911691908080613f9f86611122565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526127108202600482015273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350908716915063f9a6503090604401602060405180830381865afa15801561403a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061405e9190614fa4565b9250614069846146a7565b6001019150506000806000805b848110156142a157801561408f5760018186031b614092565b60015b935086841615614299576000806140a8866134c9565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8e811660048301529294509092506000918416906370a0823190602401602060405180830381865afa15801561411d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141419190614fa4565b9050600181111561428c576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff848116602483015261ffff841691908d169063f9a6503090604401602060405180830381865afa1580156141c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141ea9190614fa4565b6141f49190615004565b6141fe9087614fec565b95508886106142875760006142128b614667565b60005490915062010000900460ff16811115614249576142448d8c836001891561423e57898e0361470b565b8d61470b565b614278565b85156142785773ffffffffffffffffffffffffffffffffffffffff8d1660009081526008602052604090208b90555b50505050505050505050505050565b614295565b98861898600194505b5050505b600101614076565b506040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005460ff1615614341576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613cdb3390565b73ffffffffffffffffffffffffffffffffffffffff821615806143dd575073ffffffffffffffffffffffffffffffffffffffff8281166000908152600260205260409020541615155b15614414576040517f9e59609e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff918216600090815260026020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001691909216179055565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260066020526040902054156144c4576040517f2e5a5c7700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61010060055410614501576040517f1cbbe18500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005805473ffffffffffffffffffffffffffffffffffffffff83166000818152600660209081526040808320600190951b9485905584835260049091528120919091558254919290614552836151bd565b91905055505050565b60006145bd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166148799092919063ffffffff16565b805190915015613aa157808060200190518101906145db919061507c565b613aa1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610bd0565b60008060005b6101008110156146a0576001811b91508382161561468c578260010192505b838210614698576146a0565b60010161466d565b5050919050565b600081600114156146ba57506000919050565b61010060015b60016146cc8284614fec565b901c92506001831b848116158015906146e75750600185851c145b156146f257506146a0565b84811061470157839250614705565b8391505b506146c0565b815b81811015614846576001811b8581161561483d57600061472c826134c9565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529192506000918316906370a0823190602401602060405180830381865afa15801561479f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147c39190614fa4565b90506001811161483a57600054978318977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9097019660ff6201000090910416871161483a5750505073ffffffffffffffffffffffffffffffffffffffff86166000908152600860205260409020859055506138b9565b50505b5060010161470d565b506040517f53275fcb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606148888484600085614892565b90505b9392505050565b606082471015614924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610bd0565b843b61498c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610bd0565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516149b591906151f6565b60006040518083038185875af1925050503d80600081146149f2576040519150601f19603f3d011682016040523d82523d6000602084013e6149f7565b606091505b5091509150614a07828286614a12565b979650505050505050565b60608315614a2157508161488b565b825115614a315782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd09190614e5b565b73ffffffffffffffffffffffffffffffffffffffff8116811461111f57600080fd5b600060208284031215614a9957600080fd5b813561488b81614a65565b60008060408385031215614ab757600080fd5b8235614ac281614a65565b91506020830135614ad281614a65565b809150509250929050565b600060208284031215614aef57600080fd5b5035919050565b8035600381106135a057600080fd5b801515811461111f57600080fd5b600080600080600080600060e0888a031215614b2e57600080fd5b8735614b3981614a65565b9650614b4760208901614af6565b9550604088013594506060880135614b5e81614a65565b93506080880135614b6e81614a65565b925060a0880135915060c0880135614b8581614b05565b8091505092959891949750929550565b60008060008060808587031215614bab57600080fd5b8435614bb681614a65565b93506020850135614bc681614a65565b92506040850135614bd681614a65565b9396929550929360600135925050565b60008060008060808587031215614bfc57600080fd5b84359350614c0c60208601614af6565b93969395505050506040820135916060013590565b600080600080600060a08688031215614c3957600080fd5b8535614c4481614a65565b94506020860135614c5481614a65565b93506040860135614c6481614a65565b94979396509394606081013594506080013592915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614cf257614cf2614c7c565b604052919050565b600067ffffffffffffffff821115614d1457614d14614c7c565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600080600060608486031215614d5557600080fd5b8335614d6081614a65565b92506020840135614d7081614a65565b9150604084013567ffffffffffffffff811115614d8c57600080fd5b8401601f81018613614d9d57600080fd5b8035614db0614dab82614cfa565b614cab565b818152876020838501011115614dc557600080fd5b816020840160208301376000602083830101528093505050509250925092565b60005b83811015614e00578181015183820152602001614de8565b838111156139555750506000910152565b60008151808452614e29816020860160208601614de5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061488b6020830184614e11565b60008060408385031215614e8157600080fd5b823591506020830135614ad281614a65565b803561ffff811681146135a057600080fd5b600080600080600060a08688031215614ebd57600080fd5b614ec686614e93565b9450614ed460208701614e93565b9350614ee260408701614e93565b9250614ef060608701614e93565b9150614efe60808701614e93565b90509295509295909350565b600080600060608486031215614f1f57600080fd5b8335614f2a81614a65565b9250602084013591506040840135614f4181614b05565b809150509250925092565b60008060408385031215614f5f57600080fd5b8235614f6a81614a65565b9150614f7860208401614e93565b90509250929050565b600060208284031215614f9357600080fd5b813560ff8116811461488b57600080fd5b600060208284031215614fb657600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115614fff57614fff614fbd565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561503c5761503c614fbd565b500290565b600082615077577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60006020828403121561508e57600080fd5b815161488b81614b05565b6000828210156150ab576150ab614fbd565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600080604083850312156150f257600080fd5b505080516020909101519092909150565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015260006148886040830184614e11565b60006020828403121561514457600080fd5b815167ffffffffffffffff81111561515b57600080fd5b8201601f8101841361516c57600080fd5b805161517a614dab82614cfa565b81815285602083850101111561518f57600080fd5b613e9d826020830160208601614de5565b6000602082840312156151b257600080fd5b815161488b81614a65565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156151ef576151ef614fbd565b5060010190565b60008251615208818460208701614de5565b919091019291505056fea26469706673582212209d39bb9d4972b515acdad1ffb757acd15e103ca6ee762f88a6382b36243734ba64736f6c634300080a00336101606040526000805462ff00001916620c00001790553480156200002357600080fd5b5060405162005c8438038062005c8483398101604081905262000046916200053a565b80806001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000086573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ac91906200053a565b6000805460ff191690556001600160a01b038116620000de57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200011d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200014391906200053a565b6001600160a01b03166080816001600160a01b031681525050506000816001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200019e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c491906200053a565b6001600160a01b03831661010081905260e081905260408051632495a59960e01b81529051929350600092632495a599916004808201926020929091908290030181865afa1580156200021b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200024191906200053a565b6001600160a01b03811660c05290506200025b8162000475565b816001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200029a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c091906200053a565b6001600160a01b0316610120816001600160a01b031681525050816001600160a01b03166377532ed96040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000319573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033f91906200053a565b6001600160a01b0316610140816001600160a01b031681525050816001600160a01b031663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000398573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003be91906200053a565b6001600001600a6101000a8154816001600160a01b0302191690836001600160a01b03160217905550816001600160a01b0316639068a8686040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000426573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044c91906200053a565b6001600160a01b031660a0525050600380546001600160a01b03191633179055506200058b9050565b6001600160a01b03811660009081526006602052604090205415620004ad57604051632e5a5c7760e01b815260040160405180910390fd5b61010060055410620004d257604051631cbbe18560e01b815260040160405180910390fd5b600580546001600160a01b0383166000818152600660209081526040808320600190951b9485905584835260049091528120919091558254919290620005188362000561565b91905055505050565b6001600160a01b03811681146200053757600080fd5b50565b6000602082840312156200054d57600080fd5b81516200055a8162000521565b9392505050565b60006000198214156200058457634e487b7160e01b600052601160045260246000fd5b5060010190565b60805160a05160c05160e0516101005161012051610140516155e1620006a3600039600081816109040152818161397e0152613a330152600081816105e001526138e601526000818161043e01528181610fda0152818161103e01528181612680015281816127db01528181612c2201528181612d0d01528181612dcf01528181612e8e0152613df6015260006106470152600081816106ca01528181610ea501528181610f3601528181610f8301528181610fb9015281816110c2015281816121bb01528181612cec015281816132800152818161374b01528181613818015261424d01526000818161095301528181611164015261264301526000818161084b01528181611307015261244c01526155e16000f3fe608060405234801561001057600080fd5b50600436106103995760003560e01c8063830aa745116101e9578063b5b12cd71161010f578063e1998cf9116100ad578063f9aa028a1161007c578063f9aa028a146109d4578063fdd57645146109f4578063fe47cde714610a2a578063ff68754314610a4a57600080fd5b8063e1998cf914610988578063e75538c71461099b578063e958b704146109ae578063f67c5bd0146109c157600080fd5b8063ced342b5116100e9578063ced342b514610926578063d48bfca71461093b578063db7ceb801461094e578063dc2b21c11461097557600080fd5b8063b5b12cd714610893578063b7ac50c6146108c1578063c5e10eef146108ff57600080fd5b80639537301811610187578063a366f49611610156578063a366f49614610833578063a50cf2c814610846578063a64bec9e1461086d578063a70bc5421461088057600080fd5b806395373018146107ab5780639af1d35a146107be5780639f5f86ae146108175780639fd12b771461082a57600080fd5b80638991b2f1116101c35780638991b2f1146107525780638fe3f93f14610772578063944ac59f1461078557806394cf073a1461079857600080fd5b8063830aa745146107125780638345f26e146107255780638456cb591461074a57600080fd5b80633f4ba83a116102ce57806355aabafd1161026c5780636ce4074a1161023b5780636ce4074a146106925780636e98e5e4146106b25780636f307dc3146106c557806378327438146106ec57600080fd5b806355aabafd14610630578063570a7af2146106425780635c975abb14610669578063654a9eda1461067f57600080fd5b80634f0e0ef3116102a85780634f0e0ef3146105db5780635063524a1461060257806351e3f1601461061557806354fd4d501461062857600080fd5b80633f4ba83a146105b7578063458936f5146105bf57806346fb371d146105c857600080fd5b806322995f5d1161033b57806329df0b931161031557806329df0b93146105355780632f7a1881146105485780633192195c1461056f5780633e8297ca1461059757600080fd5b806322995f5d146104d55780632362a2d8146104e85780632630c12f1461050957600080fd5b806311ca4fc21161037757806311ca4fc21461042657806316f0115b14610439578063172c48c7146104605780631b0c8234146104a257600080fd5b8063055ee9b51461039e5780630d8f9cee146103fe5780630d92632d14610413575b600080fd5b6103d46103ac366004614cee565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61041161040c366004614d0b565b610a80565b005b610411610421366004614d52565b610bad565b610411610434366004614d0b565b610bc1565b6103d47f000000000000000000000000000000000000000000000000000000000000000081565b61047361046e366004614dba565b610c99565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835261ffff9091166020830152016103f5565b6104b56104b0366004614de2565b610cb1565b6040805194855260208501939093529183015260608201526080016103f5565b6104116104e3366004614e1d565b610cd7565b6104fb6104f6366004614e6e565b610ce9565b6040519081526020016103f5565b6001546a0100000000000000000000900473ffffffffffffffffffffffffffffffffffffffff166103d4565b610411610543366004614cee565b611241565b6000546103d4906301000000900473ffffffffffffffffffffffffffffffffffffffff1681565b61058261057d366004614cee565b6112a5565b604080519283526020830191909152016103f5565b6104fb6105a5366004614cee565b60096020526000908152604090205481565b6104116112d9565b6104fb60055481565b6104116105d6366004614ef0565b6113c7565b6103d47f000000000000000000000000000000000000000000000000000000000000000081565b6104b5610610366004614de2565b61161e565b610411610623366004614d0b565b611783565b6104fb600281565b6104fb61063e366004614dba565b5490565b6103d47f000000000000000000000000000000000000000000000000000000000000000081565b60005460ff1660405190151581526020016103f5565b61041161068d366004614f31565b611884565b6106a56106a0366004615050565b611d3c565b6040516103f5919061516b565b6104116106c0366004614d0b565b61200f565b6103d47f000000000000000000000000000000000000000000000000000000000000000081565b6106ff6106fa366004614cee565b6121b7565b60405161ffff90911681526020016103f5565b610411610720366004614ef0565b612290565b6000546107389062010000900460ff1681565b60405160ff90911681526020016103f5565b61041161241e565b6104fb610760366004614cee565b60086020526000908152604090205481565b6103d461078036600461517e565b61250a565b6104116107933660046151b5565b612899565b6104fb6107a636600461521a565b6129c6565b6104116107b9366004614cee565b612fdb565b6001546040805161ffff808416825262010000840481166020830152640100000000840481169282019290925266010000000000008304821660608201526801000000000000000090920416608082015260a0016103f5565b610411610825366004614cee565b613106565b6104fb60075481565b610411610841366004614dba565b6131c6565b6103d47f000000000000000000000000000000000000000000000000000000000000000081565b6104fb61087b366004614dba565b61321c565b61041161088e36600461525c565b61322d565b6108a66108a1366004614cee565b6133b3565b604080519384526020840192909252908201526060016103f5565b6104116108cf36600461525c565b73ffffffffffffffffffffffffffffffffffffffff909116600090815260096020526040902061ffff9091169055565b6103d47f000000000000000000000000000000000000000000000000000000000000000081565b61092e6133ce565b6040516103f59190615291565b610411610949366004614cee565b613490565b6103d47f000000000000000000000000000000000000000000000000000000000000000081565b6104116109833660046152eb565b6134ea565b610411610996366004614d0b565b613575565b6104736109a9366004614dba565b613738565b6103d46109bc366004614cee565b6137b0565b6104fb6109cf366004614cee565b613814565b6003546103d49073ffffffffffffffffffffffffffffffffffffffff1681565b6103d4610a02366004614cee565b600b6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b600c546103d49073ffffffffffffffffffffffffffffffffffffffff1681565b6103d4610a58366004614cee565b600a6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff16158015610ad257506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b15610b09576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff1615610b4b576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055610b81828261389c565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b610bba85858585856138dc565b5050505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314610c12576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805473ffffffffffffffffffffffffffffffffffffffff9384166301000000027fffffffffffffffffff0000000000000000000000000000000000000000ffffff90911617905560018054919092166a0100000000000000000000027fffff0000000000000000000000000000000000000000ffffffffffffffffffff909116179055565b600080610ca86001841b613738565b91509150915091565b600080600080610cc38888888861161e565b93509350935093505b945094509450949050565b610ce384848484613b2d565b50505050565b6000805460ff1615610d5c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064015b60405180910390fd5b600054610100900460ff1615610d9e576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff163314610e23576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610e2e896137b0565b90506000806000806000610e41866112a5565b9094509050610e528c8e868461161e565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152939b5093985090955093506000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015610eee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f12919061530e565b9050610f1e8887615356565b610f29906001615356565b811115610f6957610f64877f00000000000000000000000000000000000000000000000000000000000000008d60018c8b870303038d6138dc565b610fb3565b610fb373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168d8960018a8d0186900301613c07565b611001877f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008960006138dc565b6040517fca9505e40000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604481018490527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ca9505e490606401600060405180830381600087803b15801561109757600080fd5b505af11580156110ab573d6000803e3d6000fd5b505050505050505060018411156110ea576110ea837f00000000000000000000000000000000000000000000000000000000000000008d8760006138dc565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604090205486191661111f84898884613b2d565b6040517f89b77b3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f000000000000000000000000000000000000000000000000000000000000000016906389b77b3e90602401600060405180830381600087803b1580156111a857600080fd5b505af11580156111bc573d6000803e3d6000fd5b50505073ffffffffffffffffffffffffffffffffffffffff909c16600090815260026020526040812080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550929a9950505050505050505050565b6000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314611299576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112a281613c9c565b50565b6000806000806112b485613d0d565b91955092509050816112c6828661536e565b6112d091906153ab565b92505050915091565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa158015611363573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061138791906153e6565b6113bd576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113c5613e8b565b565b60005460ff1615611434576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610d53565b600054610100900460ff1615611476576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100178155338152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff908116908416148015906114f757506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b801561151b5750600c5473ffffffffffffffffffffffffffffffffffffffff163314155b8061153a575073ffffffffffffffffffffffffffffffffffffffff8316155b15611571576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61157a82613814565b6115b0576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006115bb856137b0565b90506115cb838583856000613f6c565b6115ef576115de83858360006001613f6c565b506115ed838583856001613f6c565b505b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b6001546000908190819081906127109061ffff1661163c8888615403565b611646919061536e565b61165091906153ab565b61165a9086615356565b935060018760028111156116705761167061541a565b141561170a576001546000906127109061169690640100000000900461ffff168b61536e565b6116a091906153ab565b600154909150612710906116be9062010000900461ffff168b61536e565b6116c891906153ab565b6116d29086615356565b9450848111156116e95760018582030393506116ed565b8094505b8581106116fe578585039250611704565b84860391505b50610ccc565b600287600281111561171e5761171e61541a565b141561177457600154600090612710906117489068010000000000000000900461ffff168b61536e565b61175291906153ab565b600154909150612710906116be906601000000000000900461ffff168b61536e565b92979196505091860393509150565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff161580156117d557506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b1561180c576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff161561184e576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055610b81828261410d565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff161580156118d657506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b1561190d576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff161561194f576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055611985858461410d565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152600091908616906370a0823190602401602060405180830381865afa1580156119f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a19919061530e565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529192506000918616906370a0823190602401602060405180830381865afa158015611a8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aaf919061530e565b60015490915060009081906a0100000000000000000000900473ffffffffffffffffffffffffffffffffffffffff16635cecbd0e611aed8689615403565b8a611af88988615403565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152600481019390935273ffffffffffffffffffffffffffffffffffffffff918216602484015260448301528a1660648201526084016040805180830381865afa158015611b74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b989190615449565b9150915060018411611bae57611bae898961389c565b611bb7876121b7565b611bc59061ffff168261536e565b9050611bd0886121b7565b611bde9061ffff168361536e565b9150818110611bf957611bf089613c9c565b505050506115ef565b73ffffffffffffffffffffffffffffffffffffffff891660009081526009602052604081205483611c366b033b2e3c9fd0803ce80000008561536e565b611c4091906153ab565b611c56906b033b2e3c9fd0803ce8000000615403565b611c609190615356565b60015490915061271090611c8b906b033b2e3c9fd0803ce80000009062010000900461ffff1661536e565b611c9591906153ab565b8111611cd65773ffffffffffffffffffffffffffffffffffffffff8a166000908152600960205260409020819055611ccc8a613c9c565b50505050506115ef565b611cdf8a6141bd565b50505073ffffffffffffffffffffffffffffffffffffffff871660009081526009602052604090206001905550505050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b6060611d4a60005460ff1690565b15611db1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610d53565b600054610100900460ff1615611df3576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100178155338152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff908116908416141580611e68575073ffffffffffffffffffffffffffffffffffffffff8316155b15611ebe57600c5473ffffffffffffffffffffffffffffffffffffffff163314611ebe576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611ec9856137b0565b90508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167faed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab0360405160405180910390a36040517f1cff79cd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821690631cff79cd90611f79908790879060040161546d565b6000604051808303816000875af1158015611f98573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611fde919081019061549c565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905595945050505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314612060576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216156120d05773ffffffffffffffffffffffffffffffffffffffff8281166000908152600a6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169183169190911790555b73ffffffffffffffffffffffffffffffffffffffff8116156121405773ffffffffffffffffffffffffffffffffffffffff8181166000908152600b6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169184169190911790555b73ffffffffffffffffffffffffffffffffffffffff811673cccccccccccccccccccccccccccccccccccccccc14156121b357600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790555b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561223b5750506001547e01000000000000000000000000000000000000000000000000000000000000900461ffff1690565b600061224683613814565b90508061227f576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61228881613738565b949350505050565b60005460ff16156122fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610d53565b600054610100900460ff161561233f576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff1633146123c4576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6123ce838361410d565b6123f073ffffffffffffffffffffffffffffffffffffffff8316858584613c07565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555050565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa1580156124a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124cc91906153e6565b612502576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113c561453b565b6000805460ff1615612578576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610d53565b600054610100900460ff16156125ba576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff16331461263f576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166321d18456857f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061270d919061530e565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168152600481019290925260248201526044016020604051808303816000875af1158015612768573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061278c919061550a565b6040517fbf28068b0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff80831660248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063bf28068b90604401600060405180830381600087803b15801561282157600080fd5b505af1158015612835573d6000803e3d6000fd5b5050505061284383826145fb565b73ffffffffffffffffffffffffffffffffffffffff811660009081526008602052604081206001905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690559392505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633146128ea576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805461ffff92831668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9484166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff96851664010000000002969096167fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff97851662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000090931694909816939093171794909416949094179190911716919091179055565b6000805460ff1615612a34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610d53565b600054610100900460ff1615612a76576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff163314612afb576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806000612b0987613d0d565b92509250925084612b2357612b1e8684615403565b612b2d565b612b2d8684615356565b935060008515612c855769021e19e0c9bab24000008510612b9657612b5683603689901c61536e565b612b64603686901c8461536e565b612b6e9190615356565b603686901c612b7d858561536e565b612b87919061536e565b612b9191906153ab565b612bd3565b612ba0838861536e565b612baa858461536e565b612bb49190615356565b85612bbf858561536e565b612bc9919061536e565b612bd391906153ab565b6040517fbf28068b0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff8a811660248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063bf28068b90604401600060405180830381600087803b158015612c6857600080fd5b505af1158015612c7c573d6000803e3d6000fd5b50505050612f20565b60008484612c93858361536e565b612c9d91906153ab565b612ca79190615403565b60015490915060009061271090612cc29061ffff168461536e565b612ccc91906153ab565b905073ffffffffffffffffffffffffffffffffffffffff8a1663d1660f997f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000084612d37878f615356565b612d419190615356565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b158015612db557600080fd5b505af1158015612dc9573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ca9505e4838b612e159190615356565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815260048101919091526024810184905260006044820152606401600060405180830381600087803b158015612e7457600080fd5b505af1158015612e88573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ef7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f1b919061530e565b925050505b6040517f16128211000000000000000000000000000000000000000000000000000000008152600481018690526024810182905273ffffffffffffffffffffffffffffffffffffffff891690631612821190604401600060405180830381600087803b158015612f8f57600080fd5b505af1158015612fa3573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055509498975050505050505050565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561302d57506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b15613064576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff16156130a6576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790556130db816141bd565b50600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b60035473ffffffffffffffffffffffffffffffffffffffff163314613157576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517ff62005acebe9b616aefb5f248b48f5e89f28437b27d1eebc0b2d911209f297af90600090a250565b60035473ffffffffffffffffffffffffffffffffffffffff163314613217576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600755565b6000613227826146ce565b92915050565b60035473ffffffffffffffffffffffffffffffffffffffff16331461327e576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613325576001805461ffff83167e01000000000000000000000000000000000000000000000000000000000000027dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790555050565b600061333083613814565b905080613369576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000908152600460205260409020805473ffffffffffffffffffffffffffffffffffffffff1675ffff000000000000000000000000000000000000000060a084901b161790555050565b60008060006133c184613d0d565b9250925092509193909250565b6005546060908067ffffffffffffffff8111156133ed576133ed614f8c565b604051908082528060200260200182016040528015613416578160200160208202803683370190505b50915060005b8181101561348b5761342d81610c99565b5083828151811061344057613440615527565b602002602001018173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525050808061348390615556565b91505061341c565b505090565b60035473ffffffffffffffffffffffffffffffffffffffff1633146134e1576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112a281614739565b60035473ffffffffffffffffffffffffffffffffffffffff16331461353b576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805460ff90921662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff909216919091179055565b60005460ff16156135e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610d53565b600054610100900460ff1615613624576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff1633146136a9576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006136b4836137b0565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260026020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055905061370b82826145fb565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b60008082600114156137965750506001547f0000000000000000000000000000000000000000000000000000000000000000927e0100000000000000000000000000000000000000000000000000000000000090910461ffff169150565b50506000908152600460205260409020549060a082901c90565b73ffffffffffffffffffffffffffffffffffffffff808216600090815260026020526040902054168061380f576040517fb5ba4c4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146138945773ffffffffffffffffffffffffffffffffffffffff8216600090815260066020526040902054613227565b600192915050565b60006138a782613814565b73ffffffffffffffffffffffffffffffffffffffff909316600090815260086020526040902080549319939093169092555050565b80801561393457507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b15613a96576040517fd1660f9900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301526044820184905286169063d1660f9990606401600060405180830381600087803b1580156139d157600080fd5b505af11580156139e5573d6000803e3d6000fd5b50506040517f5869dba800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690527f0000000000000000000000000000000000000000000000000000000000000000169250635869dba89150604401600060405180830381600087803b158015613a7957600080fd5b505af1158015613a8d573d6000803e3d6000fd5b50505050610bba565b6040517fd1660f9900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301526044820184905286169063d1660f9990606401600060405180830381600087803b158015613b0e57600080fd5b505af1158015613b22573d6000803e3d6000fd5b505050505050505050565b60025b818111610bba5781811615613bff576000613b4a82613738565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529192506000918316906370a0823190602401602060405180830381865afa158015613bbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613be1919061530e565b90506002811115613bfc57613bfc87838860018503896138dc565b50505b60011b613b30565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052610ce390859061482d565b73ffffffffffffffffffffffffffffffffffffffff811660009081526008602052604081205490613ccc82614939565b60005490915062010000900460ff16811115613d08576000613ced836146ce565b613cf8906001615356565b9050610ce3848484600085614972565b505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff16631afbb7a46040518163ffffffff1660e01b8152600401602060405180830381865afa158015613d5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d81919061530e565b92508373ffffffffffffffffffffffffffffffffffffffff166317d11a156040518163ffffffff1660e01b8152600401602060405180830381865afa158015613dce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613df2919061530e565b91507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e83919061530e565b929491935050565b60005460ff16613ef7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610d53565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6040805173ffffffffffffffffffffffffffffffffffffffff8681166024830152604480830186905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b30000000000000000000000000000000000000000000000000000000017905291517f1cff79cd000000000000000000000000000000000000000000000000000000008152600092861691631cff79cd9161402d918a9160040161546d565b6000604051808303816000875af192505050801561408b57506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052614088919081019061549c565b60015b614094576140c8565b805115806140b75750808060200190518101906140b191906153e6565b15156001145b156140c6576001915050614104565b505b8115614100576040517f76e3e29c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060005b95945050505050565b600061411882613814565b905080158061412a5750600754811615155b15614161576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83166000908152600860205260409020548116613d085773ffffffffffffffffffffffffffffffffffffffff83166000908152600860205260409020805482179055505050565b60015473ffffffffffffffffffffffffffffffffffffffff8281166000908152600860205260408120546a010000000000000000000090930490911691908080614206866112a5565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526127108202600482015273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350908716915063f9a6503090604401602060405180830381865afa1580156142a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142c5919061530e565b92506142d0846146ce565b6001019150506000806000805b848110156145085780156142f65760018186031b6142f9565b60015b9350868416156145005760008061430f86613738565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8e811660048301529294509092506000918416906370a0823190602401602060405180830381865afa158015614384573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143a8919061530e565b905060018111156144f3576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff848116602483015261ffff841691908d169063f9a6503090604401602060405180830381865afa15801561442d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614451919061530e565b61445b919061536e565b6144659087615356565b95508886106144ee5760006144798b614939565b60005490915062010000900460ff168111156144b0576144ab8d8c83600189156144a557898e03614972565b8d614972565b6144df565b85156144df5773ffffffffffffffffffffffffffffffffffffffff8d1660009081526008602052604090208b90555b50505050505050505050505050565b6144fc565b98861898600194505b5050505b6001016142dd565b506040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005460ff16156145a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610d53565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613f423390565b73ffffffffffffffffffffffffffffffffffffffff82161580614644575073ffffffffffffffffffffffffffffffffffffffff8281166000908152600260205260409020541615155b1561467b576040517f9e59609e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff918216600090815260026020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001691909216179055565b600081600114156146e157506000919050565b61010060015b60016146f38284615356565b901c92506001831b8481161580159061470e5750600185851c145b156147195750614732565b8481106147285783925061472c565b8391505b506146e7565b5050919050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526006602052604090205415614796576040517f2e5a5c7700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610100600554106147d3576040517f1cbbe18500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005805473ffffffffffffffffffffffffffffffffffffffff83166000818152600660209081526040808320600190951b948590558483526004909152812091909155825491929061482483615556565b91905055505050565b600061488f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16614ae09092919063ffffffff16565b805190915015613d0857808060200190518101906148ad91906153e6565b613d08576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610d53565b60008060005b610100811015614732576001811b91508382161561495e578260010192505b83821061496a57614732565b60010161493f565b815b81811015614aad576001811b85811615614aa457600061499382613738565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529192506000918316906370a0823190602401602060405180830381865afa158015614a06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a2a919061530e565b905060018111614aa157600054978318977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9097019660ff62010000909104168711614aa15750505073ffffffffffffffffffffffffffffffffffffffff8616600090815260086020526040902085905550610bba565b50505b50600101614974565b506040517f53275fcb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060614aef8484600085614af9565b90505b9392505050565b606082471015614b8b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610d53565b843b614bf3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610d53565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051614c1c919061558f565b60006040518083038185875af1925050503d8060008114614c59576040519150601f19603f3d011682016040523d82523d6000602084013e614c5e565b606091505b5091509150614c6e828286614c79565b979650505050505050565b60608315614c88575081614af2565b825115614c985782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d53919061516b565b73ffffffffffffffffffffffffffffffffffffffff811681146112a257600080fd5b600060208284031215614d0057600080fd5b8135614af281614ccc565b60008060408385031215614d1e57600080fd5b8235614d2981614ccc565b91506020830135614d3981614ccc565b809150509250929050565b80151581146112a257600080fd5b600080600080600060a08688031215614d6a57600080fd5b8535614d7581614ccc565b94506020860135614d8581614ccc565b93506040860135614d9581614ccc565b9250606086013591506080860135614dac81614d44565b809150509295509295909350565b600060208284031215614dcc57600080fd5b5035919050565b80356003811061380f57600080fd5b60008060008060808587031215614df857600080fd5b84359350614e0860208601614dd3565b93969395505050506040820135916060013590565b60008060008060808587031215614e3357600080fd5b8435614e3e81614ccc565b93506020850135614e4e81614ccc565b92506040850135614e5e81614d44565b9396929550929360600135925050565b600080600080600080600060e0888a031215614e8957600080fd5b8735614e9481614ccc565b9650614ea260208901614dd3565b9550604088013594506060880135614eb981614ccc565b93506080880135614ec981614ccc565b925060a0880135915060c0880135614ee081614d44565b8091505092959891949750929550565b60008060008060808587031215614f0657600080fd5b8435614f1181614ccc565b93506020850135614f2181614ccc565b92506040850135614e5e81614ccc565b600080600080600060a08688031215614f4957600080fd5b8535614f5481614ccc565b94506020860135614f6481614ccc565b93506040860135614f7481614ccc565b94979396509394606081013594506080013592915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561500257615002614f8c565b604052919050565b600067ffffffffffffffff82111561502457615024614f8c565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60008060006060848603121561506557600080fd5b833561507081614ccc565b9250602084013561508081614ccc565b9150604084013567ffffffffffffffff81111561509c57600080fd5b8401601f810186136150ad57600080fd5b80356150c06150bb8261500a565b614fbb565b8181528760208385010111156150d557600080fd5b816020840160208301376000602083830101528093505050509250925092565b60005b838110156151105781810151838201526020016150f8565b83811115610ce35750506000910152565b600081518084526151398160208601602086016150f5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000614af26020830184615121565b6000806040838503121561519157600080fd5b823591506020830135614d3981614ccc565b803561ffff8116811461380f57600080fd5b600080600080600060a086880312156151cd57600080fd5b6151d6866151a3565b94506151e4602087016151a3565b93506151f2604087016151a3565b9250615200606087016151a3565b915061520e608087016151a3565b90509295509295909350565b60008060006060848603121561522f57600080fd5b833561523a81614ccc565b925060208401359150604084013561525181614d44565b809150509250925092565b6000806040838503121561526f57600080fd5b823561527a81614ccc565b9150615288602084016151a3565b90509250929050565b6020808252825182820181905260009190848201906040850190845b818110156152df57835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016152ad565b50909695505050505050565b6000602082840312156152fd57600080fd5b813560ff81168114614af257600080fd5b60006020828403121561532057600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561536957615369615327565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156153a6576153a6615327565b500290565b6000826153e1577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000602082840312156153f857600080fd5b8151614af281614d44565b60008282101561541557615415615327565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6000806040838503121561545c57600080fd5b505080516020909101519092909150565b73ffffffffffffffffffffffffffffffffffffffff83168152604060208201526000614aef6040830184615121565b6000602082840312156154ae57600080fd5b815167ffffffffffffffff8111156154c557600080fd5b8201601f810184136154d657600080fd5b80516154e46150bb8261500a565b8181528560208385010111156154f957600080fd5b6141048260208301602086016150f5565b60006020828403121561551c57600080fd5b8151614af281614ccc565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561558857615588615327565b5060010190565b600082516155a18184602087016150f5565b919091019291505056fea26469706673582212209a61b2b1203f2f5e63c5e3bdfef5184c4cbbb88b745f884592632c989b91297064736f6c634300080a00339c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c860806040526016805460ff1916905534801561001a57600080fd5b506040516110a73803806110a7833981016040819052610039916100b6565b600080546001600160a01b038085166001600160a01b0319928316179092556003805492841692909116919091179055610080600a6b033b2e3c9fd0803ce80000006100e9565b60075550506b033b2e3c9fd0803ce800000060155561010b565b80516001600160a01b03811681146100b157600080fd5b919050565b600080604083850312156100c957600080fd5b6100d28361009a565b91506100e06020840161009a565b90509250929050565b60008261010657634e487b7160e01b600052601260045260246000fd5b500490565b610f8d8061011a6000396000f3fe608060405234801561001057600080fd5b50600436106102e95760003560e01c806367c99d5811610191578063c5f956af116100e3578063dbcb313b11610097578063f11a648711610071578063f11a648714610320578063f3fdb15a146105f1578063fe14112d1461061157600080fd5b8063dbcb313b146105d6578063e941fa78146105df578063ef8d9603146105e857600080fd5b8063cb3905e1116100c8578063cb3905e1146105c4578063cf33d95514610320578063d0efe753146105cd57600080fd5b8063c5f956af14610588578063ca9505e4146105a857600080fd5b80639aa5d46211610145578063b6ac642a1161011f578063b6ac642a14610567578063bb04b19314610567578063bf28068b1461057557600080fd5b80639aa5d46214610544578063a4e8273e14610557578063b3554a0a1461055e57600080fd5b8063788c6bfe11610176578063788c6bfe146104ef5780638456cb591461050157806396df5dc01461053157600080fd5b806367c99d58146104de57806374375359146104e757600080fd5b806336dda7d51161024a5780634d778ad1116101fe57806354fd4d50116101d857806354fd4d50146104c05780635c975abb146104c8578063609ae317146104d557600080fd5b80634d778ad114610491578063532fe502146104a45780635427c938146104ad57600080fd5b80633f4ba83a1161022f5780633f4ba83a1461045257806345d31f9d1461047f5780634c19386c1461048857600080fd5b806336dda7d51461040f5780633e163df01461042f57600080fd5b80632495a599116102a157806329f3d3b61161028657806329f3d3b6146103b35780632a3354c9146103bc5780632e97ca21146103dc57600080fd5b80632495a599146103735780632954018c1461039357600080fd5b8063078c4781116102d2578063078c4781146103205780630fce70fb146103335780631e16e4fc1461033b57600080fd5b8063030dbb04146102ee57806305fe138b1461030a575b600080fd5b6102f760105481565b6040519081526020015b60405180910390f35b6102f7610318366004610ce8565b600092915050565b61033161032e366004610d14565b50565b005b6015546102f7565b61034e610349366004610d2f565b610618565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610301565b60035461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b60005461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6102f760095481565b600a5461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103ff6103ea366004610d14565b60066020526000908152604090205460ff1681565b6040519015158152602001610301565b60055461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103ff61043d366004610d14565b60146020526000908152604090205460ff1681565b610331601680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b6102f760075481565b6102f760015481565b6102f761049f366004610d2f565b61064f565b6102f760115481565b6102f76104bb366004610d2f565b61066d565b6102f7600181565b6016546103ff9060ff1681565b6102f760085481565b6102f7600d5481565b6102f7610685565b6b033b2e3c9fd0803ce80000006102f7565b610331601680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b61033161053f366004610d2f565b601555565b610331610552366004610d48565b505050565b60016102f7565b6102f7600e5481565b61033161032e366004610d2f565b610331610583366004610ce8565b61071d565b60135461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103316105b6366004610d7d565b600b92909255600c55600d55565b6102f7600c5481565b6102f7600b5481565b6102f760155481565b6102f7600f5481565b6102f760025481565b60125461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b60006102f7565b6004818154811061062857600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6000610667826b033b2e3c9fd0803ce800000061077a565b92915050565b6000610667826b033b2e3c9fd0803ce80000006108e9565b6003546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156106f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107189190610da9565b905090565b6009829055600a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691909117909155600354610776911682846109fe565b5050565b60408051808201909152600281527f4d330000000000000000000000000000000000000000000000000000000000006020820152600090826107f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b60405180910390fd5b506000610800600284610e72565b90506b033b2e3c9fd0803ce8000000610839827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610ead565b6108439190610e72565b8411156040518060400160405280600281526020017f4d31000000000000000000000000000000000000000000000000000000000000815250906108b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b5082816108cd6b033b2e3c9fd0803ce800000087610ec4565b6108d79190610f01565b6108e19190610e72565b949350505050565b60008215806108f6575081155b1561090357506000610667565b8161091b60026b033b2e3c9fd0803ce8000000610e72565b610945907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610ead565b61094f9190610e72565b8311156040518060400160405280600281526020017f4d31000000000000000000000000000000000000000000000000000000000000815250906109c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b506b033b2e3c9fd0803ce80000006109d9600282610e72565b6109e38486610ec4565b6109ed9190610f01565b6109f79190610e72565b9392505050565b6040805173ffffffffffffffffffffffffffffffffffffffff848116602483015260448083018590528351808403909101815260649092018352602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65649084015261055292869291600091610ac9918516908490610b73565b8051909150156105525780806020019051810190610ae79190610f19565b610552576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016107e9565b60606108e1848460008585843b610be6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107e9565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051610c0f9190610f3b565b60006040518083038185875af1925050503d8060008114610c4c576040519150601f19603f3d011682016040523d82523d6000602084013e610c51565b606091505b5091509150610c61828286610c6c565b979650505050505050565b60608315610c7b5750816109f7565b825115610c8b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ce357600080fd5b919050565b60008060408385031215610cfb57600080fd5b82359150610d0b60208401610cbf565b90509250929050565b600060208284031215610d2657600080fd5b6109f782610cbf565b600060208284031215610d4157600080fd5b5035919050565b600080600060608486031215610d5d57600080fd5b83359250610d6d60208501610cbf565b9150604084013590509250925092565b600080600060608486031215610d9257600080fd5b505081359360208301359350604090920135919050565b600060208284031215610dbb57600080fd5b5051919050565b60005b83811015610ddd578181015183820152602001610dc5565b83811115610dec576000848401525b50505050565b6020815260008251806020840152610e11816040850160208701610dc2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082610ea8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600082821015610ebf57610ebf610e43565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610efc57610efc610e43565b500290565b60008219821115610f1457610f14610e43565b500190565b600060208284031215610f2b57600080fd5b815180151581146109f757600080fd5b60008251610f4d818460208701610dc2565b919091019291505056fea26469706673582212204edb887d94928b3914f60ab48df0182da9eb30ddbb7021b164cc728b60a655d564736f6c634300080a00336101606040526000805462ff00001916620c00001790553480156200002357600080fd5b50604051620058e8380380620058e8833981016040819052620000469162000537565b806001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000085573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ab919062000537565b6000805460ff191690556001600160a01b038116620000dd57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200011c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000142919062000537565b6001600160a01b03166080816001600160a01b031681525050506000816001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200019d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c3919062000537565b6001600160a01b03831661010081905260e081905260408051632495a59960e01b81529051929350600092632495a599916004808201926020929091908290030181865afa1580156200021a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000240919062000537565b6001600160a01b03811660c05290506200025a8162000472565b816001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000299573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002bf919062000537565b6001600160a01b0316610120816001600160a01b031681525050816001600160a01b03166377532ed96040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000318573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033e919062000537565b6001600160a01b0316610140816001600160a01b031681525050816001600160a01b031663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000397573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003bd919062000537565b6001600001600a6101000a8154816001600160a01b0302191690836001600160a01b03160217905550816001600160a01b0316639068a8686040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000425573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044b919062000537565b6001600160a01b031660a0525050600380546001600160a01b031916331790555062000588565b6001600160a01b03811660009081526006602052604090205415620004aa57604051632e5a5c7760e01b815260040160405180910390fd5b61010060055410620004cf57604051631cbbe18560e01b815260040160405180910390fd5b600580546001600160a01b0383166000818152600660209081526040808320600190951b948590558483526004909152812091909155825491929062000515836200055e565b91905055505050565b6001600160a01b03811681146200053457600080fd5b50565b6000602082840312156200054a57600080fd5b815162000557816200051e565b9392505050565b60006000198214156200058157634e487b7160e01b600052601160045260246000fd5b5060010190565b60805160a05160c05160e051610100516101205161014051615248620006a0600039600081816107e20152818161371001526137c501526000818161052f01526136780152600081816103d301528181610e5701528181610ebb015281816124ff0152818161265a01528181612aa101528181612b8c01528181612c4e01528181612d0d0152613b8f015260006105a401526000818161062701528181610d2201528181610db301528181610e0001528181610e3601528181610f3f0152818161203a01528181612b6b015281816130ee015281816134dc015281816135a90152613fe601526000818161081c01528181610fe101526124c20152600081816107a80152818161118401526122cb01526152486000f3fe608060405234801561001057600080fd5b50600436106103415760003560e01c8063830aa745116101bd578063a70bc542116100f9578063e75538c7116100a2578063f9aa028a1161007c578063f9aa028a1461089d578063fdd57645146108bd578063fe47cde7146108f3578063ff6875431461091357600080fd5b8063e75538c714610864578063e958b70414610877578063f67c5bd01461088a57600080fd5b8063db7ceb80116100d3578063db7ceb8014610817578063dc2b21c11461083e578063e1998cf91461085157600080fd5b8063a70bc542146107ca578063c5e10eef146107dd578063d48bfca71461080457600080fd5b806394cf073a116101665780639f5f86ae116101405780639f5f86ae146107745780639fd12b7714610787578063a366f49614610790578063a50cf2c8146107a357600080fd5b806394cf073a146106f557806395373018146107085780639af1d35a1461071b57600080fd5b80638991b2f1116101975780638991b2f1146106af5780638fe3f93f146106cf578063944ac59f146106e257600080fd5b8063830aa7451461066f5780638345f26e146106825780638456cb59146106a757600080fd5b8063458936f51161028c578063570a7af2116102355780636ce4074a1161020f5780636ce4074a146105ef5780636e98e5e41461060f5780636f307dc314610622578063783274381461064957600080fd5b8063570a7af21461059f5780635c975abb146105c6578063654a9eda146105dc57600080fd5b80635063524a116102665780635063524a1461055157806351e3f1601461058457806354fd4d501461059757600080fd5b8063458936f51461050e57806346fb371d146105175780634f0e0ef31461052a57600080fd5b80632630c12f116102ee5780633192195c116102c85780633192195c146104be5780633e8297ca146104e65780633f4ba83a1461050657600080fd5b80632630c12f1461045857806329df0b93146104845780632f7a18811461049757600080fd5b806316f0115b1161031f57806316f0115b146103ce578063172c48c7146103f55780632362a2d81461043757600080fd5b8063055ee9b5146103465780630d8f9cee146103a657806311ca4fc2146103bb575b600080fd5b61037c610354366004614a87565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6103b96103b4366004614aa4565b610949565b005b6103b96103c9366004614aa4565b610a76565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b610408610403366004614add565b610b4e565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835261ffff90911660208301520161039d565b61044a610445366004614b13565b610b66565b60405190815260200161039d565b6001546a0100000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1661037c565b6103b9610492366004614a87565b6110be565b60005461037c906301000000900473ffffffffffffffffffffffffffffffffffffffff1681565b6104d16104cc366004614a87565b611122565b6040805192835260208301919091520161039d565b61044a6104f4366004614a87565b60096020526000908152604090205481565b6103b9611156565b61044a60055481565b6103b9610525366004614b95565b611244565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b61056461055f366004614be6565b61149b565b60408051948552602085019390935291830152606082015260800161039d565b6103b9610592366004614aa4565b611602565b61044a600281565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b60005460ff16604051901515815260200161039d565b6103b96105ea366004614c21565b611703565b6106026105fd366004614d40565b611bbb565b60405161039d9190614e5b565b6103b961061d366004614aa4565b611e8e565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b61065c610657366004614a87565b612036565b60405161ffff909116815260200161039d565b6103b961067d366004614b95565b61210f565b6000546106959062010000900460ff1681565b60405160ff909116815260200161039d565b6103b961229d565b61044a6106bd366004614a87565b60086020526000908152604090205481565b61037c6106dd366004614e6e565b612389565b6103b96106f0366004614ea5565b612718565b61044a610703366004614f0a565b612845565b6103b9610716366004614a87565b612e5a565b6001546040805161ffff808416825262010000840481166020830152640100000000840481169282019290925266010000000000008304821660608201526801000000000000000090920416608082015260a00161039d565b6103b9610782366004614a87565b612f85565b61044a60075481565b6103b961079e366004614add565b613045565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b96107d8366004614f4c565b61309b565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b9610812366004614a87565b613221565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b961084c366004614f81565b61327b565b6103b961085f366004614aa4565b613306565b610408610872366004614add565b6134c9565b61037c610885366004614a87565b613541565b61044a610898366004614a87565b6135a5565b60035461037c9073ffffffffffffffffffffffffffffffffffffffff1681565b61037c6108cb366004614a87565b600b6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b600c5461037c9073ffffffffffffffffffffffffffffffffffffffff1681565b61037c610921366004614a87565b600a6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561099b57506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b156109d2576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff1615610a14576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055610a4a828261362e565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b60035473ffffffffffffffffffffffffffffffffffffffff163314610ac7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805473ffffffffffffffffffffffffffffffffffffffff9384166301000000027fffffffffffffffffff0000000000000000000000000000000000000000ffffff90911617905560018054919092166a0100000000000000000000027fffff0000000000000000000000000000000000000000ffffffffffffffffffff909116179055565b600080610b5d6001841b6134c9565b91509150915091565b6000805460ff1615610bd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064015b60405180910390fd5b600054610100900460ff1615610c1b576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff163314610ca0576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610cab89613541565b90506000806000806000610cbe86611122565b9094509050610ccf8c8e868461149b565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152939b5093985090955093506000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015610d6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8f9190614fa4565b9050610d9b8887614fec565b610da6906001614fec565b811115610de657610de1877f00000000000000000000000000000000000000000000000000000000000000008d60018c8b870303038d61366e565b610e30565b610e3073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168d8960018a8d01869003016138c0565b610e7e877f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000089600061366e565b6040517fca9505e40000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604481018490527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ca9505e490606401600060405180830381600087803b158015610f1457600080fd5b505af1158015610f28573d6000803e3d6000fd5b50505050505050506001841115610f6757610f67837f00000000000000000000000000000000000000000000000000000000000000008d87600061366e565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260086020526040902054861916610f9c8489888461395b565b6040517f89b77b3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f000000000000000000000000000000000000000000000000000000000000000016906389b77b3e90602401600060405180830381600087803b15801561102557600080fd5b505af1158015611039573d6000803e3d6000fd5b50505073ffffffffffffffffffffffffffffffffffffffff909c16600090815260026020526040812080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550929a9950505050505050505050565b6000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314611116576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61111f81613a35565b50565b60008060008061113185613aa6565b91955092509050816111438286615004565b61114d9190615041565b92505050915091565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156111e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611204919061507c565b61123a576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611242613c24565b565b60005460ff16156112b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156112f3576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100178155338152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff9081169084161480159061137457506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b80156113985750600c5473ffffffffffffffffffffffffffffffffffffffff163314155b806113b7575073ffffffffffffffffffffffffffffffffffffffff8316155b156113ee576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113f7826135a5565b61142d576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061143885613541565b9050611448838583856000613d05565b61146c5761145b83858360006001613d05565b5061146a838583856001613d05565b505b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b6001546000908190819081906127109061ffff166114b98888615099565b6114c39190615004565b6114cd9190615041565b6114d79086614fec565b935060018760028111156114ed576114ed6150b0565b1415611587576001546000906127109061151390640100000000900461ffff168b615004565b61151d9190615041565b6001549091506127109061153b9062010000900461ffff168b615004565b6115459190615041565b61154f9086614fec565b94508481111561156657600185820303935061156a565b8094505b85811061157b578585039250611581565b84860391505b506115f7565b600287600281111561159b5761159b6150b0565b14156115f157600154600090612710906115c59068010000000000000000900461ffff168b615004565b6115cf9190615041565b6001549091506127109061153b906601000000000000900461ffff168b615004565b84840391505b945094509450949050565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561165457506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b1561168b576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff16156116cd576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055610a4a8282613ea6565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561175557506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b1561178c576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff16156117ce576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790556118048584613ea6565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152600091908616906370a0823190602401602060405180830381865afa158015611874573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118989190614fa4565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529192506000918616906370a0823190602401602060405180830381865afa15801561190a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192e9190614fa4565b60015490915060009081906a0100000000000000000000900473ffffffffffffffffffffffffffffffffffffffff16635cecbd0e61196c8689615099565b8a6119778988615099565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152600481019390935273ffffffffffffffffffffffffffffffffffffffff918216602484015260448301528a1660648201526084016040805180830381865afa1580156119f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1791906150df565b9150915060018411611a2d57611a2d898961362e565b611a3687612036565b611a449061ffff1682615004565b9050611a4f88612036565b611a5d9061ffff1683615004565b9150818110611a7857611a6f89613a35565b5050505061146c565b73ffffffffffffffffffffffffffffffffffffffff891660009081526009602052604081205483611ab56b033b2e3c9fd0803ce800000085615004565b611abf9190615041565b611ad5906b033b2e3c9fd0803ce8000000615099565b611adf9190614fec565b60015490915061271090611b0a906b033b2e3c9fd0803ce80000009062010000900461ffff16615004565b611b149190615041565b8111611b555773ffffffffffffffffffffffffffffffffffffffff8a166000908152600960205260409020819055611b4b8a613a35565b505050505061146c565b611b5e8a613f56565b50505073ffffffffffffffffffffffffffffffffffffffff871660009081526009602052604090206001905550505050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b6060611bc960005460ff1690565b15611c30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff1615611c72576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100178155338152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff908116908416141580611ce7575073ffffffffffffffffffffffffffffffffffffffff8316155b15611d3d57600c5473ffffffffffffffffffffffffffffffffffffffff163314611d3d576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611d4885613541565b90508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167faed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab0360405160405180910390a36040517f1cff79cd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821690631cff79cd90611df89087908790600401615103565b6000604051808303816000875af1158015611e17573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611e5d9190810190615132565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905595945050505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314611edf576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821615611f4f5773ffffffffffffffffffffffffffffffffffffffff8281166000908152600a6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169183169190911790555b73ffffffffffffffffffffffffffffffffffffffff811615611fbf5773ffffffffffffffffffffffffffffffffffffffff8181166000908152600b6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169184169190911790555b73ffffffffffffffffffffffffffffffffffffffff811673cccccccccccccccccccccccccccccccccccccccc141561203257600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790555b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120ba5750506001547e01000000000000000000000000000000000000000000000000000000000000900461ffff1690565b60006120c5836135a5565b9050806120fe576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612107816134c9565b949350505050565b60005460ff161561217c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156121be576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff163314612243576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61224d8383613ea6565b61226f73ffffffffffffffffffffffffffffffffffffffff83168585846138c0565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555050565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015612327573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061234b919061507c565b612381576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112426142d4565b6000805460ff16156123f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff1615612439576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff1633146124be576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166321d18456857f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612568573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061258c9190614fa4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168152600481019290925260248201526044016020604051808303816000875af11580156125e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061260b91906151a0565b6040517fbf28068b0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff80831660248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063bf28068b90604401600060405180830381600087803b1580156126a057600080fd5b505af11580156126b4573d6000803e3d6000fd5b505050506126c28382614394565b73ffffffffffffffffffffffffffffffffffffffff811660009081526008602052604081206001905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690559392505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314612769576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805461ffff92831668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9484166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff96851664010000000002969096167fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff97851662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000090931694909816939093171794909416949094179190911716919091179055565b6000805460ff16156128b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156128f5576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff16331461297a576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080600061298887613aa6565b925092509250846129a25761299d8684615099565b6129ac565b6129ac8684614fec565b935060008515612b045769021e19e0c9bab24000008510612a15576129d583603689901c615004565b6129e3603686901c84615004565b6129ed9190614fec565b603686901c6129fc8585615004565b612a069190615004565b612a109190615041565b612a52565b612a1f8388615004565b612a298584615004565b612a339190614fec565b85612a3e8585615004565b612a489190615004565b612a529190615041565b6040517fbf28068b0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff8a811660248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063bf28068b90604401600060405180830381600087803b158015612ae757600080fd5b505af1158015612afb573d6000803e3d6000fd5b50505050612d9f565b60008484612b128583615004565b612b1c9190615041565b612b269190615099565b60015490915060009061271090612b419061ffff1684615004565b612b4b9190615041565b905073ffffffffffffffffffffffffffffffffffffffff8a1663d1660f997f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000084612bb6878f614fec565b612bc09190614fec565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b158015612c3457600080fd5b505af1158015612c48573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ca9505e4838b612c949190614fec565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815260048101919091526024810184905260006044820152606401600060405180830381600087803b158015612cf357600080fd5b505af1158015612d07573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d9a9190614fa4565b925050505b6040517f16128211000000000000000000000000000000000000000000000000000000008152600481018690526024810182905273ffffffffffffffffffffffffffffffffffffffff891690631612821190604401600060405180830381600087803b158015612e0e57600080fd5b505af1158015612e22573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055509498975050505050505050565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff16158015612eac57506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b15612ee3576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff1615612f25576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055612f5a81613f56565b50600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b60035473ffffffffffffffffffffffffffffffffffffffff163314612fd6576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517ff62005acebe9b616aefb5f248b48f5e89f28437b27d1eebc0b2d911209f297af90600090a250565b60035473ffffffffffffffffffffffffffffffffffffffff163314613096576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600755565b60035473ffffffffffffffffffffffffffffffffffffffff1633146130ec576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613193576001805461ffff83167e01000000000000000000000000000000000000000000000000000000000000027dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790555050565b600061319e836135a5565b9050806131d7576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000908152600460205260409020805473ffffffffffffffffffffffffffffffffffffffff1675ffff000000000000000000000000000000000000000060a084901b161790555050565b60035473ffffffffffffffffffffffffffffffffffffffff163314613272576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61111f81614467565b60035473ffffffffffffffffffffffffffffffffffffffff1633146132cc576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805460ff90921662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff909216919091179055565b60005460ff1615613373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156133b5576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff16331461343a576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061344583613541565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260026020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055905061349c8282614394565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b60008082600114156135275750506001547f0000000000000000000000000000000000000000000000000000000000000000927e0100000000000000000000000000000000000000000000000000000000000090910461ffff169150565b50506000908152600460205260409020549060a082901c90565b73ffffffffffffffffffffffffffffffffffffffff80821660009081526002602052604090205416806135a0576040517fb5ba4c4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146136255773ffffffffffffffffffffffffffffffffffffffff8216600090815260066020526040902054613628565b60015b92915050565b6000613639826135a5565b73ffffffffffffffffffffffffffffffffffffffff909316600090815260086020526040902080549319939093169092555050565b8080156136c657507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b15613828576040517fd1660f9900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301526044820184905286169063d1660f9990606401600060405180830381600087803b15801561376357600080fd5b505af1158015613777573d6000803e3d6000fd5b50506040517f5869dba800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690527f0000000000000000000000000000000000000000000000000000000000000000169250635869dba89150604401600060405180830381600087803b15801561380b57600080fd5b505af115801561381f573d6000803e3d6000fd5b505050506138b9565b6040517fd1660f9900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301526044820184905286169063d1660f9990606401600060405180830381600087803b1580156138a057600080fd5b505af11580156138b4573d6000803e3d6000fd5b505050505b5050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261395590859061455b565b50505050565b60025b8181116138b95781811615613a2d576000613978826134c9565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529192506000918316906370a0823190602401602060405180830381865afa1580156139eb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a0f9190614fa4565b90506002811115613a2a57613a2a878388600185038961366e565b50505b60011b61395e565b73ffffffffffffffffffffffffffffffffffffffff811660009081526008602052604081205490613a6582614667565b60005490915062010000900460ff16811115613aa1576000613a86836146a7565b613a91906001614fec565b905061395584848460008561470b565b505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff16631afbb7a46040518163ffffffff1660e01b8152600401602060405180830381865afa158015613af6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b1a9190614fa4565b92508373ffffffffffffffffffffffffffffffffffffffff166317d11a156040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b8b9190614fa4565b91507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bf8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c1c9190614fa4565b929491935050565b60005460ff16613c90576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610bd0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6040805173ffffffffffffffffffffffffffffffffffffffff8681166024830152604480830186905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b30000000000000000000000000000000000000000000000000000000017905291517f1cff79cd000000000000000000000000000000000000000000000000000000008152600092861691631cff79cd91613dc6918a91600401615103565b6000604051808303816000875af1925050508015613e2457506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052613e219190810190615132565b60015b613e2d57613e61565b80511580613e50575080806020019051810190613e4a919061507c565b15156001145b15613e5f576001915050613e9d565b505b8115613e99576040517f76e3e29c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060005b95945050505050565b6000613eb1826135a5565b9050801580613ec35750600754811615155b15613efa576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83166000908152600860205260409020548116613aa15773ffffffffffffffffffffffffffffffffffffffff83166000908152600860205260409020805482179055505050565b60015473ffffffffffffffffffffffffffffffffffffffff8281166000908152600860205260408120546a010000000000000000000090930490911691908080613f9f86611122565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526127108202600482015273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350908716915063f9a6503090604401602060405180830381865afa15801561403a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061405e9190614fa4565b9250614069846146a7565b6001019150506000806000805b848110156142a157801561408f5760018186031b614092565b60015b935086841615614299576000806140a8866134c9565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8e811660048301529294509092506000918416906370a0823190602401602060405180830381865afa15801561411d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141419190614fa4565b9050600181111561428c576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff848116602483015261ffff841691908d169063f9a6503090604401602060405180830381865afa1580156141c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141ea9190614fa4565b6141f49190615004565b6141fe9087614fec565b95508886106142875760006142128b614667565b60005490915062010000900460ff16811115614249576142448d8c836001891561423e57898e0361470b565b8d61470b565b614278565b85156142785773ffffffffffffffffffffffffffffffffffffffff8d1660009081526008602052604090208b90555b50505050505050505050505050565b614295565b98861898600194505b5050505b600101614076565b506040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005460ff1615614341576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613cdb3390565b73ffffffffffffffffffffffffffffffffffffffff821615806143dd575073ffffffffffffffffffffffffffffffffffffffff8281166000908152600260205260409020541615155b15614414576040517f9e59609e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff918216600090815260026020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001691909216179055565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260066020526040902054156144c4576040517f2e5a5c7700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61010060055410614501576040517f1cbbe18500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005805473ffffffffffffffffffffffffffffffffffffffff83166000818152600660209081526040808320600190951b9485905584835260049091528120919091558254919290614552836151bd565b91905055505050565b60006145bd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166148799092919063ffffffff16565b805190915015613aa157808060200190518101906145db919061507c565b613aa1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610bd0565b60008060005b6101008110156146a0576001811b91508382161561468c578260010192505b838210614698576146a0565b60010161466d565b5050919050565b600081600114156146ba57506000919050565b61010060015b60016146cc8284614fec565b901c92506001831b848116158015906146e75750600185851c145b156146f257506146a0565b84811061470157839250614705565b8391505b506146c0565b815b81811015614846576001811b8581161561483d57600061472c826134c9565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529192506000918316906370a0823190602401602060405180830381865afa15801561479f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147c39190614fa4565b90506001811161483a57600054978318977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9097019660ff6201000090910416871161483a5750505073ffffffffffffffffffffffffffffffffffffffff86166000908152600860205260409020859055506138b9565b50505b5060010161470d565b506040517f53275fcb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606148888484600085614892565b90505b9392505050565b606082471015614924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610bd0565b843b61498c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610bd0565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516149b591906151f6565b60006040518083038185875af1925050503d80600081146149f2576040519150601f19603f3d011682016040523d82523d6000602084013e6149f7565b606091505b5091509150614a07828286614a12565b979650505050505050565b60608315614a2157508161488b565b825115614a315782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd09190614e5b565b73ffffffffffffffffffffffffffffffffffffffff8116811461111f57600080fd5b600060208284031215614a9957600080fd5b813561488b81614a65565b60008060408385031215614ab757600080fd5b8235614ac281614a65565b91506020830135614ad281614a65565b809150509250929050565b600060208284031215614aef57600080fd5b5035919050565b8035600381106135a057600080fd5b801515811461111f57600080fd5b600080600080600080600060e0888a031215614b2e57600080fd5b8735614b3981614a65565b9650614b4760208901614af6565b9550604088013594506060880135614b5e81614a65565b93506080880135614b6e81614a65565b925060a0880135915060c0880135614b8581614b05565b8091505092959891949750929550565b60008060008060808587031215614bab57600080fd5b8435614bb681614a65565b93506020850135614bc681614a65565b92506040850135614bd681614a65565b9396929550929360600135925050565b60008060008060808587031215614bfc57600080fd5b84359350614c0c60208601614af6565b93969395505050506040820135916060013590565b600080600080600060a08688031215614c3957600080fd5b8535614c4481614a65565b94506020860135614c5481614a65565b93506040860135614c6481614a65565b94979396509394606081013594506080013592915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614cf257614cf2614c7c565b604052919050565b600067ffffffffffffffff821115614d1457614d14614c7c565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600080600060608486031215614d5557600080fd5b8335614d6081614a65565b92506020840135614d7081614a65565b9150604084013567ffffffffffffffff811115614d8c57600080fd5b8401601f81018613614d9d57600080fd5b8035614db0614dab82614cfa565b614cab565b818152876020838501011115614dc557600080fd5b816020840160208301376000602083830101528093505050509250925092565b60005b83811015614e00578181015183820152602001614de8565b838111156139555750506000910152565b60008151808452614e29816020860160208601614de5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061488b6020830184614e11565b60008060408385031215614e8157600080fd5b823591506020830135614ad281614a65565b803561ffff811681146135a057600080fd5b600080600080600060a08688031215614ebd57600080fd5b614ec686614e93565b9450614ed460208701614e93565b9350614ee260408701614e93565b9250614ef060608701614e93565b9150614efe60808701614e93565b90509295509295909350565b600080600060608486031215614f1f57600080fd5b8335614f2a81614a65565b9250602084013591506040840135614f4181614b05565b809150509250925092565b60008060408385031215614f5f57600080fd5b8235614f6a81614a65565b9150614f7860208401614e93565b90509250929050565b600060208284031215614f9357600080fd5b813560ff8116811461488b57600080fd5b600060208284031215614fb657600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115614fff57614fff614fbd565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561503c5761503c614fbd565b500290565b600082615077577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60006020828403121561508e57600080fd5b815161488b81614b05565b6000828210156150ab576150ab614fbd565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600080604083850312156150f257600080fd5b505080516020909101519092909150565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015260006148886040830184614e11565b60006020828403121561514457600080fd5b815167ffffffffffffffff81111561515b57600080fd5b8201601f8101841361516c57600080fd5b805161517a614dab82614cfa565b81815285602083850101111561518f57600080fd5b613e9d826020830160208601614de5565b6000602082840312156151b257600080fd5b815161488b81614a65565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156151ef576151ef614fbd565b5060010190565b60008251615208818460208701614de5565b919091019291505056fea26469706673582212209d39bb9d4972b515acdad1ffb757acd15e103ca6ee762f88a6382b36243734ba64736f6c634300080a003360e060405234801561001057600080fd5b50604051610e07380380610e0783398101604081905261002f916101d3565b6000805460ff19169055806001600160a01b03811661006157604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa15801561009f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100c391906101d3565b6001600160a01b03166080816001600160a01b031681525050506000819050806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015610120573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061014491906101d3565b6001600160a01b031660a0816001600160a01b031681525050806001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561019b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101bf91906101d3565b6001600160a01b031660c052506102039050565b6000602082840312156101e557600080fd5b81516001600160a01b03811681146101fc57600080fd5b9392505050565b60805160a05160c051610b9e6102696000396000818160da0152818161035e015281816104fb015261064d015260008181610165015281816102a301528181610440015261059201526000818161013e015281816101b501526106e40152610b9e6000f3fe608060405234801561001057600080fd5b50600436106100a35760003560e01c80636f074436116100765780638456cb591161005b5780638456cb5914610131578063a50cf2c814610139578063de2873591461016057600080fd5b80636f074436146101215780637c205cc41461012957600080fd5b80633f4ba83a146100a8578063488bf5b4146100b25780635c975abb146100ba57806362eb33e3146100d5575b600080fd5b6100b0610187565b005b6100b0610275565b60005460ff1660405190151581526020015b60405180910390f35b6100fc7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100cc565b6100b0610412565b6100b0610564565b6100b06106b6565b6100fc7f000000000000000000000000000000000000000000000000000000000000000081565b6100fc7f000000000000000000000000000000000000000000000000000000000000000081565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa158015610211573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061023591906109d5565b61026b576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102736107a2565b565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa1580156102ff573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061032391906109d5565b610359576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102737f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663673a2a1f6040518163ffffffff1660e01b8152600401600060405180830381865afa1580156103c7573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261040d9190810190610a56565b610888565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561049c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c091906109d5565b6104f6576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102737f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663941448566040518163ffffffff1660e01b8152600401600060405180830381865afa1580156103c7573d6000803e3d6000fd5b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa1580156105ee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061061291906109d5565b610648576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104f67f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663673a2a1f6040518163ffffffff1660e01b8152600401600060405180830381865afa1580156103c7573d6000803e3d6000fd5b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015610740573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061076491906109d5565b61079a576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610273610915565b60005460ff16610813576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b805160005b81811015610910578281815181106108a7576108a7610b39565b602002602001015173ffffffffffffffffffffffffffffffffffffffff16638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156108f657600080fd5b505af1925050508015610907575060015b5060010161088d565b505050565b60005460ff1615610982576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015260640161080a565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861085e3390565b6000602082840312156109e757600080fd5b815180151581146109f757600080fd5b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b805173ffffffffffffffffffffffffffffffffffffffff81168114610a5157600080fd5b919050565b60006020808385031215610a6957600080fd5b825167ffffffffffffffff80821115610a8157600080fd5b818501915085601f830112610a9557600080fd5b815181811115610aa757610aa76109fe565b8060051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108582111715610aea57610aea6109fe565b604052918252848201925083810185019188831115610b0857600080fd5b938501935b82851015610b2d57610b1e85610a2d565b84529385019392850192610b0d565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea2646970667358221220447f0f77525e705c0a5e6b52ca0e24e5cc01de5da45af8d70c2ebe6c0db8851364736f6c634300080a0033436f6e74726163747352656769737465722073657420696e636f72726563746c79a2646970667358221220786bbdb1798a270d75cf09193c4c055e6f04691ac4727d5e11e25d8fa8f0c0ec64736f6c634300080a0033"; - -type PauseMulticallTestConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: PauseMulticallTestConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class PauseMulticallTest__factory extends ContractFactory { - constructor(...args: PauseMulticallTestConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): PauseMulticallTest { - return super.attach(address) as PauseMulticallTest; - } - override connect(signer: Signer): PauseMulticallTest__factory { - return super.connect(signer) as PauseMulticallTest__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): PauseMulticallTestInterface { - return new utils.Interface(_abi) as PauseMulticallTestInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): PauseMulticallTest { - return new Contract(address, _abi, signerOrProvider) as PauseMulticallTest; - } -} diff --git a/src/types/factories/contracts/test/support/PauseMulticall.t.sol/index.ts b/src/types/factories/contracts/test/support/PauseMulticall.t.sol/index.ts deleted file mode 100644 index ae52cb01..00000000 --- a/src/types/factories/contracts/test/support/PauseMulticall.t.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { PauseMulticallTest__factory } from "./PauseMulticallTest__factory"; diff --git a/src/types/factories/contracts/test/support/index.ts b/src/types/factories/contracts/test/support/index.ts deleted file mode 100644 index 9aec78fd..00000000 --- a/src/types/factories/contracts/test/support/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export * as pauseMulticallTSol from "./PauseMulticall.t.sol"; diff --git a/src/types/factories/contracts/test/tokens/DegenNFT.t.sol/DegenNFTTest__factory.ts b/src/types/factories/contracts/test/tokens/DegenNFT.t.sol/DegenNFTTest__factory.ts deleted file mode 100644 index ac4a9328..00000000 --- a/src/types/factories/contracts/test/tokens/DegenNFT.t.sol/DegenNFTTest__factory.ts +++ /dev/null @@ -1,560 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - DegenNFTTest, - DegenNFTTestInterface, -} from "../../../../../contracts/test/tokens/DegenNFT.t.sol/DegenNFTTest"; - -const _abi = [ - { - inputs: [], - name: "CreditFacadeOrConfiguratorOnlyException", - type: "error", - }, - { - inputs: [], - name: "InsufficientBalanceException", - type: "error", - }, - { - inputs: [], - name: "InvalidCreditFacadeException", - type: "error", - }, - { - inputs: [], - name: "MinterOnlyException", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "", - type: "address", - }, - ], - name: "log_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "log_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - name: "log_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "int256", - name: "", - type: "int256", - }, - ], - name: "log_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "address", - name: "val", - type: "address", - }, - ], - name: "log_named_address", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes", - name: "val", - type: "bytes", - }, - ], - name: "log_named_bytes", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "bytes32", - name: "val", - type: "bytes32", - }, - ], - name: "log_named_bytes32", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "decimals", - type: "uint256", - }, - ], - name: "log_named_decimal_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "int256", - name: "val", - type: "int256", - }, - ], - name: "log_named_int", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "string", - name: "val", - type: "string", - }, - ], - name: "log_named_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "key", - type: "string", - }, - { - indexed: false, - internalType: "uint256", - name: "val", - type: "uint256", - }, - ], - name: "log_named_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "", - type: "string", - }, - ], - name: "log_string", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "log_uint", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "logs", - type: "event", - }, - { - inputs: [], - name: "IS_TEST", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "cft", - outputs: [ - { - internalType: "contract CreditFacadeTestSuite", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditConfigurator", - outputs: [ - { - internalType: "contract CreditConfigurator", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditFacade", - outputs: [ - { - internalType: "contract CreditFacade", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "creditManager", - outputs: [ - { - internalType: "contract ICreditManagerV2", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "failed", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "setUp", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_DNFT_01_constructor_sets_correct_values", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_DNFT_02A_setBaseUri_reverts_on_non_Configurator", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_DNFT_02B_setMinter_reverts_on_non_Configurator", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_DNFT_02C_addCreditFacade_reverts_on_non_Configurator", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_DNFT_02D_addCreditFacade_reverts_on_non_Configurator", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_DNFT_03_mint_reverts_on_non_minter", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_DNFT_04_burn_reverts_on_non_CreditFacade", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_DNFT_05A_setBasUri_correctly_sets_uri", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_DNFT_05_setBasUri_correctly_sets_uri", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_DNFT_06_addCreditFacade_reverts_on_invalid_address", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_DNFT_07_mint_is_correct", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_DNFT_08A_burn_reverts_on_insufficient_balance", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_DNFT_08_burn_is_correct", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_DNFT_09_removeCreditFacade_sets_value", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_DNFT_10_addCreditFacade_sets_value", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "test_DNFT_11_transfer_and_approval_functions_revert", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "underlying", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x60806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d000117905534801561003957600080fd5b506204a639806200004b6000396000f3fe60806040523480156200001157600080fd5b5060043610620001b95760003560e01c806384dc135c11620000f5578063df5144331162000097578063f9aa028a116200006e578063f9aa028a1462000329578063fa7626d4146200034a578063fcd598b6146200035857600080fd5b8063df51443314620002f4578063e3d7775b1462000315578063ebd29d98146200031f57600080fd5b8063ba414fa611620000cc578063ba414fa614620002ae578063c12c21c014620002c9578063dcbd2d0114620002ea57600080fd5b806384dc135c14620002905780638713b17d146200029a578063a85afe6e14620002a457600080fd5b80633a9a1c56116200015f57806359d85f47116200013657806359d85f47146200025b5780636f307dc31462000265578063755c2bc2146200028657600080fd5b80633a9a1c56146200023d5780633c4e6ac51462000247578063448bdba2146200025157600080fd5b8063267eb98d1162000194578063267eb98d14620001de5780632f7a188114620001e857806333a452dc146200023357600080fd5b8063099a2fd214620001be5780630a9254e414620001ca578063107554b414620001d4575b600080fd5b620001c862000362565b005b620001c8620005e1565b620001c862000c47565b620001c8620013ac565b600254620002099073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b620001c8620014f2565b620001c862001b79565b620001c862001c8e565b620001c862001ee8565b620001c862001ffd565b600554620002099073ffffffffffffffffffffffffffffffffffffffff1681565b620001c8620021f3565b620001c8620024ed565b620001c8620027b1565b620001c862002bcb565b620002b862002deb565b60405190151581526020016200022a565b600154620002099073ffffffffffffffffffffffffffffffffffffffff1681565b620001c862002f55565b600454620002099073ffffffffffffffffffffffffffffffffffffffff1681565b620001c86200314b565b620001c86200327a565b600354620002099073ffffffffffffffffffffffffffffffffffffffff1681565b600054620002b89060ff1681565b620001c862003e03565b6000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b158015620003e757600080fd5b505af1158015620003fc573d6000803e3d6000fd5b50506006546040517fa0bcfc7f00000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f446567656e657261637900000000000000000000000000000000000000000000604482015273ffffffffffffffffffffffffffffffffffffffff909116925063a0bcfc7f9150606401600060405180830381600087803b1580156200049a57600080fd5b505af1158015620004af573d6000803e3d6000fd5b50505050620005df600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636c0360eb6040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000525573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200056d9190810190620049d1565b6040518060400160405280600a81526020017f446567656e6572616379000000000000000000000000000000000000000000008152506040518060400160405280601c81526020017f4261736520555249207761732073657420696e636f72726563746c7900000000815250620041ed565b565b604051620005ef906200492c565b604051809103906000f0801580156200060c573d6000803e3d6000fd5b505060006040516200061e906200493a565b604051809103906000f0801580156200063b573d6000803e3d6000fd5b50905073ffffffffffffffffffffffffffffffffffffffff811663b36ba2086200066f670de0b6b3a7640000606462004ad7565b6040518263ffffffff1660e01b81526004016000604051808303818588803b1580156200069b57600080fd5b505af1158015620006b0573d6000803e3d6000fd5b5050505050806001604051620006c69062004948565b620006d392919062004b17565b604051809103906000f080158015620006f0573d6000803e3d6000fd5b50600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169182178155604080517f7785ff5d0000000000000000000000000000000000000000000000000000000081529051637785ff5d9282810192600092919082900301818387803b1580156200078357600080fd5b505af115801562000798573d6000803e3d6000fd5b505060048054604080517fc12c21c0000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff909216945063c12c21c0935080830192602092918290030181865afa1580156200080a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000830919062004b9c565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92831617905560048054604080517f2f7a188100000000000000000000000000000000000000000000000000000000815290519190931692632f7a188192818101926020929091908290030181865afa158015620008cd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008f3919062004b9c565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92831617905560048054604080517ff9aa028a0000000000000000000000000000000000000000000000000000000081529051919093169263f9aa028a92818101926020929091908290030181865afa15801562000990573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620009b6919062004b9c565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600254604080517f9408b63f00000000000000000000000000000000000000000000000000000000815290519190921691639408b63f9160048083019260209291908290030181865afa15801562000a53573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a79919062004b9c565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92831617905560048054604080517f2954018c00000000000000000000000000000000000000000000000000000000815290519190931692632954018c92818101926020929091908290030181865afa15801562000b16573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b3c919062004b9c565b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92831617905560048054604080517f5e813a8b00000000000000000000000000000000000000000000000000000000815290519190931692635e813a8b92818101926020929091908290030181865afa15801562000bd9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000bff919062004b9c565b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b6000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b15801562000ccc57600080fd5b505af115801562000ce1573d6000803e3d6000fd5b50506006546040517f40c10f1900000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660048201526003602482015273ffffffffffffffffffffffffffffffffffffffff90911692506340c10f199150604401600060405180830381600087803b15801562000d6c57600080fd5b505af115801562000d81573d6000803e3d6000fd5b50506000546002546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526201000090920416925063ca669fa79150602401600060405180830381600087803b15801562000dfb57600080fd5b505af115801562000e10573d6000803e3d6000fd5b50506006546040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660048201526002602482015273ffffffffffffffffffffffffffffffffffffffff9091169250639dc29fac9150604401600060405180830381600087803b15801562000e9b57600080fd5b505af115801562000eb0573d6000803e3d6000fd5b50506006546040517f70a0823100000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600482015262000fa0935073ffffffffffffffffffffffffffffffffffffffff90911691506370a0823190602401602060405180830381865afa15801562000f3c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000f62919062004bc3565b60016040518060400160405280601981526020017f557365722062616c616e636520697320696e636f7272656374000000000000008152506200428f565b600062000fc373f39fd6e51aad88f6f4ce6ab8827279cfffb92266600262004bdd565b6000546040517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e0000000000000000000000000000000000000000000000606482015291925062010000900473ffffffffffffffffffffffffffffffffffffffff169063f28dceb390608401600060405180830381600087803b1580156200108a57600080fd5b505af11580156200109f573d6000803e3d6000fd5b50506006546040517f6352211e0000000000000000000000000000000000000000000000000000000081526004810185905273ffffffffffffffffffffffffffffffffffffffff9091169250636352211e9150602401602060405180830381865afa15801562001113573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001139919062004b9c565b506200115b73f39fd6e51aad88f6f4ce6ab8827279cfffb92266600162004bdd565b6000546040517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e0000000000000000000000000000000000000000000000606482015291925062010000900473ffffffffffffffffffffffffffffffffffffffff169063f28dceb390608401600060405180830381600087803b1580156200122257600080fd5b505af115801562001237573d6000803e3d6000fd5b50506006546040517f6352211e0000000000000000000000000000000000000000000000000000000081526004810185905273ffffffffffffffffffffffffffffffffffffffff9091169250636352211e9150602401602060405180830381865afa158015620012ab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620012d1919062004b9c565b50600654604080517f18160ddd0000000000000000000000000000000000000000000000000000000081529051620013a99273ffffffffffffffffffffffffffffffffffffffff16916318160ddd9160048083019260209291908290030181865afa15801562001345573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200136b919062004bc3565b60016040518060400160405280601981526020017f546f74616c20737570706c7920697320696e636f7272656374000000000000008152506200428f565b50565b6000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f61081c150000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c31eb0e090602401600060405180830381600087803b1580156200143d57600080fd5b505af115801562001452573d6000803e3d6000fd5b50506006546040517f89406ff500000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff2600482015273ffffffffffffffffffffffffffffffffffffffff90911692506389406ff591506024015b600060405180830381600087803b158015620014d757600080fd5b505af1158015620014ec573d6000803e3d6000fd5b50505050565b6000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f24e46f700000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c31eb0e090602401600060405180830381600087803b1580156200158357600080fd5b505af115801562001598573d6000803e3d6000fd5b50506006546040517f23b872dd00000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb922666004820181905260248201526000604482015273ffffffffffffffffffffffffffffffffffffffff90911692506323b872dd915060640160006040518083038186803b1580156200162857600080fd5b505afa1580156200163d573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f24e46f700000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b158015620016d257600080fd5b505af1158015620016e7573d6000803e3d6000fd5b50506006546040517f42842e0e00000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb922666004820181905260248201526000604482015273ffffffffffffffffffffffffffffffffffffffff90911692506342842e0e915060640160006040518083038186803b1580156200177757600080fd5b505afa1580156200178c573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f24e46f700000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b1580156200182157600080fd5b505af115801562001836573d6000803e3d6000fd5b50506006546040517fb88d4fde00000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660048201819052602482015260006044820181905260806064830152608482015273ffffffffffffffffffffffffffffffffffffffff909116925063b88d4fde915060a40160006040518083038186803b158015620018d457600080fd5b505afa158015620018e9573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f24e46f700000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b1580156200197e57600080fd5b505af115801562001993573d6000803e3d6000fd5b50506006546040517fa22cb4650000000000000000000000000000000000000000000000000000000081527390f79bf6eb2c4f870365e785982e1f101e93b90660048201526001602482015273ffffffffffffffffffffffffffffffffffffffff909116925063a22cb465915060440160006040518083038186803b15801562001a1c57600080fd5b505afa15801562001a31573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f24e46f700000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b15801562001ac657600080fd5b505af115801562001adb573d6000803e3d6000fd5b50506006546040517f095ea7b30000000000000000000000000000000000000000000000000000000081527390f79bf6eb2c4f870365e785982e1f101e93b90660048201526000602482015273ffffffffffffffffffffffffffffffffffffffff909116925063095ea7b3915060440160006040518083038186803b15801562001b6457600080fd5b505afa158015620014ec573d6000803e3d6000fd5b6000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f61081c150000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c31eb0e090602401600060405180830381600087803b15801562001c0a57600080fd5b505af115801562001c1f573d6000803e3d6000fd5b50506006546040517ffca3b5aa00000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff2600482015273ffffffffffffffffffffffffffffffffffffffff909116925063fca3b5aa9150602401620014bc565b600654604080517f06fdde03000000000000000000000000000000000000000000000000000000008152905162001dbb9273ffffffffffffffffffffffffffffffffffffffff16916306fdde039160048083019260009291908290030181865afa15801562001d01573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262001d499190810190620049d1565b6040518060400160405280600881526020017f446567656e4e46540000000000000000000000000000000000000000000000008152506040518060400160405280600e81526020017f496e636f7272656374206e616d65000000000000000000000000000000000000815250620041ed565b600654604080517f95d89b410000000000000000000000000000000000000000000000000000000081529051620005df9273ffffffffffffffffffffffffffffffffffffffff16916395d89b419160048083019260009291908290030181865afa15801562001e2e573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262001e769190810190620049d1565b6040518060400160405280600a81526020017f476561722d446567656e000000000000000000000000000000000000000000008152506040518060400160405280601081526020017f496e636f72726563742073796d626f6c00000000000000000000000000000000815250620041ed565b6000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f61081c150000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c31eb0e090602401600060405180830381600087803b15801562001f7957600080fd5b505af115801562001f8e573d6000803e3d6000fd5b50506006546040517f4610f6ac00000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff2600482015273ffffffffffffffffffffffffffffffffffffffff9091169250634610f6ac9150602401620014bc565b6000546040805160048082526024820183526020820180517f1e0d0485000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff90911617905291517ff28dceb30000000000000000000000000000000000000000000000000000000081526201000090930473ffffffffffffffffffffffffffffffffffffffff169263f28dceb392620020af92910162004c44565b600060405180830381600087803b158015620020ca57600080fd5b505af1158015620020df573d6000803e3d6000fd5b50506000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527390f79bf6eb2c4f870365e785982e1f101e93b90660048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063ca669fa79150602401600060405180830381600087803b1580156200216857600080fd5b505af11580156200217d573d6000803e3d6000fd5b50506006546040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660048201526001602482015273ffffffffffffffffffffffffffffffffffffffff9091169250639dc29fac9150604401620014bc565b6000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b1580156200227857600080fd5b505af11580156200228d573d6000803e3d6000fd5b50506006546040517f40c10f1900000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660048201526003602482015273ffffffffffffffffffffffffffffffffffffffff90911692506340c10f199150604401600060405180830381600087803b1580156200231857600080fd5b505af11580156200232d573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f90c9142d0000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b158015620023c257600080fd5b505af1158015620023d7573d6000803e3d6000fd5b50506000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063ca669fa79150602401600060405180830381600087803b1580156200246057600080fd5b505af115801562002475573d6000803e3d6000fd5b50506006546040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb92266600480830191909152602482015273ffffffffffffffffffffffffffffffffffffffff9091169250639dc29fac9150604401620014bc565b6006546002546040517f576cd2d100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152620025ae92919091169063576cd2d1906024015b602060405180830381865afa15801562002568573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200258e919062004c59565b6040518060600160405280602381526020016204a5e160239139620042dc565b6000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b1580156200263357600080fd5b505af115801562002648573d6000803e3d6000fd5b50506006546002546040517f89406ff500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152911692506389406ff59150602401600060405180830381600087803b158015620026bc57600080fd5b505af1158015620026d1573d6000803e3d6000fd5b50506006546002546040517f576cd2d100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152620005df94509116915063576cd2d1906024015b602060405180830381865afa1580156200274e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002774919062004c59565b156040518060400160405280601d81526020017f4372656469742046616361646520776173206e6f742072656d6f766564000000815250620042dc565b6000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b1580156200283657600080fd5b505af11580156200284b573d6000803e3d6000fd5b50506006546040517f40c10f1900000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660048201526003602482015273ffffffffffffffffffffffffffffffffffffffff90911692506340c10f199150604401600060405180830381600087803b158015620028d657600080fd5b505af1158015620028eb573d6000803e3d6000fd5b50506006546040517f70a0823100000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb922666004820152620029db935073ffffffffffffffffffffffffffffffffffffffff90911691506370a0823190602401602060405180830381865afa15801562002977573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200299d919062004bc3565b60036040518060400160405280601981526020017f557365722062616c616e636520697320696e636f7272656374000000000000008152506200428f565b60005b600381101562002af357600062002a0a8273f39fd6e51aad88f6f4ce6ab8827279cfffb9226662004bdd565b6006546040517f6352211e0000000000000000000000000000000000000000000000000000000081526004810183905291925062002add9173ffffffffffffffffffffffffffffffffffffffff90911690636352211e90602401602060405180830381865afa15801562002a82573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002aa8919062004b9c565b73f39fd6e51aad88f6f4ce6ab8827279cfffb922666040518060600160405280602881526020016204a5b9602891396200432a565b508062002aea8162004c7d565b915050620029de565b50600654604080517f18160ddd0000000000000000000000000000000000000000000000000000000081529051620005df9273ffffffffffffffffffffffffffffffffffffffff16916318160ddd9160048083019260209291908290030181865afa15801562002b67573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002b8d919062004bc3565b60036040518060400160405280601981526020017f546f74616c20737570706c7920697320696e636f7272656374000000000000008152506200428f565b6000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b15801562002c5057600080fd5b505af115801562002c65573d6000803e3d6000fd5b50506006546040517ffca3b5aa00000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff2600482015273ffffffffffffffffffffffffffffffffffffffff909116925063fca3b5aa9150602401600060405180830381600087803b15801562002ce957600080fd5b505af115801562002cfe573d6000803e3d6000fd5b50505050620005df600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663075461726040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002d74573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002d9a919062004b9c565b73c4375b7de8af5a38a93548eb8453a498222c4ff26040518060400160405280601a81526020017f4d696e746572207761732073657420696e636f72726563746c790000000000008152506200432a565b60008054610100900460ff161562002e0c5750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1562002f505760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000008284015282518083038401815260608301909352600092909162002eb4917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc49160800162004cb9565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905262002eee9162004d03565b6000604051808303816000865af19150503d806000811462002f2d576040519150601f19603f3d011682016040523d82523d6000602084013e62002f32565b606091505b509150508080602001905181019062002f4c919062004c59565b9150505b919050565b6000546040805160048082526024820183526020820180517f5c2967f5000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff90911617905291517ff28dceb30000000000000000000000000000000000000000000000000000000081526201000090930473ffffffffffffffffffffffffffffffffffffffff169263f28dceb3926200300792910162004c44565b600060405180830381600087803b1580156200302257600080fd5b505af115801562003037573d6000803e3d6000fd5b50506000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527390f79bf6eb2c4f870365e785982e1f101e93b90660048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063ca669fa79150602401600060405180830381600087803b158015620030c057600080fd5b505af1158015620030d5573d6000803e3d6000fd5b50506006546040517f40c10f1900000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660048201526001602482015273ffffffffffffffffffffffffffffffffffffffff90911692506340c10f199150604401620014bc565b6000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f61081c150000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c31eb0e090602401600060405180830381600087803b158015620031dc57600080fd5b505af1158015620031f1573d6000803e3d6000fd5b50506006546040517fa0bcfc7f00000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f446567656e657261637900000000000000000000000000000000000000000000604482015273ffffffffffffffffffffffffffffffffffffffff909116925063a0bcfc7f9150606401620014bc565b6000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f9c01f6a90000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c31eb0e090602401600060405180830381600087803b1580156200330b57600080fd5b505af115801562003320573d6000803e3d6000fd5b50506000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063ca669fa79150602401600060405180830381600087803b158015620033a957600080fd5b505af1158015620033be573d6000803e3d6000fd5b50506006546040517f4610f6ac00000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff2600482015273ffffffffffffffffffffffffffffffffffffffff9091169250634610f6ac9150602401600060405180830381600087803b1580156200344257600080fd5b505af115801562003457573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f9c01f6a90000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b158015620034ec57600080fd5b505af115801562003501573d6000803e3d6000fd5b50506000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063ca669fa79150602401600060405180830381600087803b1580156200358a57600080fd5b505af11580156200359f573d6000803e3d6000fd5b50506006546008546040517f4610f6ac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015291169250634610f6ac9150602401600060405180830381600087803b1580156200361357600080fd5b505af115801562003628573d6000803e3d6000fd5b505050506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166316f0115b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200369c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620036c2919062004b9c565b604051620036d09062004957565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103906000f0801580156200370a573d6000803e3d6000fd5b50905060008173c4375b7de8af5a38a93548eb8453a498222c4ff26000604051620037359062004965565b73ffffffffffffffffffffffffffffffffffffffff938416815292909116602083015215156040820152606001604051809103906000f0801580156200377f573d6000803e3d6000fd5b506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f9c01f6a900000000000000000000000000000000000000000000000000000000600482015291925062010000900473ffffffffffffffffffffffffffffffffffffffff169063c31eb0e090602401600060405180830381600087803b1580156200381357600080fd5b505af115801562003828573d6000803e3d6000fd5b50506000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063ca669fa79150602401600060405180830381600087803b158015620038b157600080fd5b505af1158015620038c6573d6000803e3d6000fd5b50506006546040517f4610f6ac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529091169250634610f6ac9150602401600060405180830381600087803b1580156200393857600080fd5b505af11580156200394d573d6000803e3d6000fd5b505060015460405173ffffffffffffffffffffffffffffffffffffffff909116925073c4375b7de8af5a38a93548eb8453a498222c4ff29150600090620039949062004965565b73ffffffffffffffffffffffffffffffffffffffff938416815292909116602083015215156040820152606001604051809103906000f080158015620039de573d6000803e3d6000fd5b506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f9c01f6a900000000000000000000000000000000000000000000000000000000600482015291925062010000900473ffffffffffffffffffffffffffffffffffffffff169063c31eb0e090602401600060405180830381600087803b15801562003a7257600080fd5b505af115801562003a87573d6000803e3d6000fd5b50506000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063ca669fa79150602401600060405180830381600087803b15801562003b1057600080fd5b505af115801562003b25573d6000803e3d6000fd5b50506006546040517f4610f6ac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529091169250634610f6ac9150602401600060405180830381600087803b15801562003b9757600080fd5b505af115801562003bac573d6000803e3d6000fd5b505060015460065460405173ffffffffffffffffffffffffffffffffffffffff92831694509116915060009062003be39062004965565b73ffffffffffffffffffffffffffffffffffffffff938416815292909116602083015215156040820152606001604051809103906000f08015801562003c2d573d6000803e3d6000fd5b506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f9c01f6a900000000000000000000000000000000000000000000000000000000600482015291925062010000900473ffffffffffffffffffffffffffffffffffffffff169063c31eb0e090602401600060405180830381600087803b15801562003cc157600080fd5b505af115801562003cd6573d6000803e3d6000fd5b50506000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063ca669fa79150602401600060405180830381600087803b15801562003d5f57600080fd5b505af115801562003d74573d6000803e3d6000fd5b50506006546040517f4610f6ac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529091169250634610f6ac9150602401600060405180830381600087803b15801562003de657600080fd5b505af115801562003dfb573d6000803e3d6000fd5b505050505050565b6006546002546040517f576cd2d100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015262003e6592919091169063576cd2d1906024016200254a565b6000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b15801562003eea57600080fd5b505af115801562003eff573d6000803e3d6000fd5b50506006546002546040517f89406ff500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152911692506389406ff59150602401600060405180830381600087803b15801562003f7357600080fd5b505af115801562003f88573d6000803e3d6000fd5b50506006546002546040517f576cd2d100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015262003fec94509116915063576cd2d19060240162002730565b6000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b1580156200407157600080fd5b505af115801562004086573d6000803e3d6000fd5b50506006546002546040517f4610f6ac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015291169250634610f6ac9150602401600060405180830381600087803b158015620040fa57600080fd5b505af11580156200410f573d6000803e3d6000fd5b50506006546002546040517f576cd2d100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152620005df94509116915063576cd2d190602401602060405180830381865afa1580156200418b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620041b1919062004c59565b6040518060400160405280601b81526020017f4372656469742046616361646520776173206e6f742061646465640000000000815250620042dc565b8160405160200162004200919062004d03565b604051602081830303815290604052805190602001208360405160200162004229919062004d03565b60405160208183030381529060405280519060200120146200428a577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf35838160405162004276919062004d21565b60405180910390a16200428a8383620043a3565b505050565b8183146200428a577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf358381604051620042c8919062004d21565b60405180910390a16200428a838362004505565b8162004326577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf35838160405162004313919062004d21565b60405180910390a1620043268262004605565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146200428a577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf3583816040516200438f919062004d21565b60405180910390a16200428a83836200467d565b80604051602001620043b6919062004d03565b6040516020818303038152906040528051906020012082604051602001620043df919062004d03565b604051602081830303815290604052805190602001201462004326577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f50604051620044819060208082526024908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b73747260408201527f696e675d00000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf358381604051620044ba919062004d6a565b60405180910390a17f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf358382604051620044f3919062004dc4565b60405180910390a162004326620047a9565b80821462004326577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f50604051620045939060208082526022908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b75696e60408201527f745d000000000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a881604051620045cc919062004e02565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a882604051620044f3919062004e4e565b80620013a9577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f506040516200466b9060208082526017908201527f4572726f723a20417373657274696f6e204661696c6564000000000000000000604082015260600190565b60405180910390a1620013a9620047a9565b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462004326577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f50604051620047379060208082526025908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b61646460408201527f726573735d000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f8160405162004770919062004e8c565b60405180910390a17f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f82604051620044f3919062004eee565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620048fe5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000009282019290925260016060820152600091907f70ca10bbd0dbfd9020a9f4b13402c16cb120705e0d1c0aeab10fa353ae586fc490608001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526200487b929160200162004cb9565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052620048b59162004d03565b6000604051808303816000865af19150503d8060008114620048f4576040519150601f19603f3d011682016040523d82523d6000602084013e620048f9565b606091505b505050505b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055565b6105e68062004f2d83390190565b617a51806200551383390190565b62031ed6806200cf6483390190565b6158e8806203ee3a83390190565b615e97806204472283390190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60005b83811015620049bf578181015183820152602001620049a5565b83811115620014ec5750506000910152565b600060208284031215620049e457600080fd5b815167ffffffffffffffff80821115620049fd57600080fd5b818401915084601f83011262004a1257600080fd5b81518181111562004a275762004a2762004973565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171562004a705762004a7062004973565b8160405282815287602084870101111562004a8a57600080fd5b62004a9d836020830160208801620049a2565b979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562004b125762004b1262004aa8565b500290565b73ffffffffffffffffffffffffffffffffffffffff8316815260408101600b831062004b6c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8260208301529392505050565b73ffffffffffffffffffffffffffffffffffffffff81168114620013a957600080fd5b60006020828403121562004baf57600080fd5b815162004bbc8162004b79565b9392505050565b60006020828403121562004bd657600080fd5b5051919050565b6000821982111562004bf35762004bf362004aa8565b500190565b6000815180845262004c12816020860160208601620049a2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600062004bbc602083018462004bf8565b60006020828403121562004c6c57600080fd5b8151801515811462004bbc57600080fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141562004cb25762004cb262004aa8565b5060010190565b7fffffffff00000000000000000000000000000000000000000000000000000000831681526000825162004cf5816004850160208701620049a2565b919091016004019392505050565b6000825162004d17818460208701620049a2565b9190910192915050565b60408152600560408201527f4572726f72000000000000000000000000000000000000000000000000000000606082015260806020820152600062004bbc608083018462004bf8565b60408152600062004da860408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b828103602084015262004dbc818562004bf8565b949350505050565b60408152600062004da860408301600a81527f2020202041637475616c00000000000000000000000000000000000000000000602082015260400190565b60408152600062004e4060408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b905082602083015292915050565b60408152600062004e4060408301600a81527f2020202041637475616c00000000000000000000000000000000000000000000602082015260400190565b60408152600062004eca60408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b905073ffffffffffffffffffffffffffffffffffffffff8316602083015292915050565b60408152600062004eca60408301600a81527f2020202041637475616c0000000000000000000000000000000000000000000060208201526040019056fe60806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d000117905534801561003957600080fd5b50600054604080516318caf8e360e31b815273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660048083019190915260248201929092526044810191909152632aa9a2a960e11b6064820152620100009091046001600160a01b03169063c657c71890608401600060405180830381600087803b1580156100ba57600080fd5b505af11580156100ce573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b81527390f79bf6eb2c4f870365e785982e1f101e93b90660048201526024810191909152600660448201526511949251539160d21b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561014f57600080fd5b505af1158015610163573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b8152733c44cdddb6a900fa2b585dd299e03d12fa4293bc60048201526024810191909152600a6044820152692624a8aaa4a220aa27a960b11b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b1580156101e857600080fd5b505af11580156101fc573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b815273c4375b7de8af5a38a93548eb8453a498222c4ff260048201526024810191909152600c60448201526b44554d425f4144445245535360a01b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561028357600080fd5b505af1158015610297573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b8152739965507d1a55bcc2695c58ba16fb37d819b0a4dc60048201526024810191909152600760448201526620a220a82a22a960c91b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561031957600080fd5b505af115801561032d573d6000803e3d6000fd5b505050506102a6806103406000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063ba414fa61461003b578063fa7626d414610057575b600080fd5b610043610064565b604051901515815260200160405180910390f35b6000546100439060ff1681565b60008054610100900460ff16156100845750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156101bf5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610129917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016101ff565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526101619161023b565b6000604051808303816000865af19150503d806000811461019e576040519150601f19603f3d011682016040523d82523d6000602084013e6101a3565b606091505b50915050808060200190518101906101bb919061024e565b9150505b919050565b6000815160005b818110156101e557602081850181015186830152016101cb565b818111156101f4576000828601525b509290920192915050565b7fffffffff0000000000000000000000000000000000000000000000000000000083168152600061023360048301846101c4565b949350505050565b600061024782846101c4565b9392505050565b60006020828403121561026057600080fd5b8151801515811461024757600080fdfea2646970667358221220293f55a0ef7b60c31a89dbc50e3339c80a8fdb1f9567614b200e97598226671f64736f6c634300080a003360806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d00011790553480156200003a57600080fd5b506040805161018081019091526000908060c081018060018152604080518082018252600381526244414960e81b6020828101919091528301526012908201526305f5e100606082015260800160018152602001600081525081526020016040518060c001604052806002600a811115620000b957620000b962000b78565b815260408051808201825260048152635553444360e01b6020828101919091528301526006908201526305f5e100606082015260800160018152602001600081525081526020016040518060c001604052806003600a81111562000121576200012162000b78565b815260408051808201825260048152630ae8aa8960e31b602082810191909152830152601290820152644a817c8000606082015260800160028152602001600081525081526020016040518060c001604052806004600a8111156200018a576200018a62000b78565b815260408051808201825260048152634c494e4b60e01b6020828101919091528301526012908201526359682f00606082015260800160018152602001600081525081526020016040518060c001604052806005600a811115620001f257620001f262000b78565b815260408051808201825260048152631554d11560e21b602082810191909152830152601290820152633b023380606082015260800160018152602001600081525081526020016040518060c001604052806006600a8111156200025a576200025a62000b78565b815260408051808201825260058152640e6e88aa8960db1b602082810191909152830152601290820152644cd588640060608201526080016003815260200160009052905260408051610140810190915290915060009080608081018060078152602001604051806040016040528060048152602001636344414960e01b8152508152602001601260ff1681526020016305f5e100815260200160048081111562000309576200030962000b78565b8152602001600181525081526020016040518060c001604052806008600a81111562000339576200033962000b78565b81526040805180820182526005815264635553444360d81b6020828101919091528301526006908201526305f5e100606082015260800160048152602001600281525081526020016040518060c001604052806009600a811115620003a257620003a262000b78565b8152604080518082018252600581526418d554d11560da1b602082810191909152830152601290820152633b023380606082015260800160048152602001600581525081526020016040518060c00160405280600a808111156200040a576200040a62000b78565b81526040805180820182526005815264634c494e4b60d81b6020828101919091528301526012908201526359682f00606082015260800160048152602001600490529052905060005b600681101562000496576200048183826006811062000476576200047662000b8e565b6020020151620004db565b806200048d8162000ba4565b91505062000453565b5060005b6004811015620004d257620004bd82826004811062000476576200047662000b8e565b80620004c98162000ba4565b9150506200049a565b50505062000d14565b6000600282608001516004811115620004f857620004f862000b78565b14156200054e576040516200050d9062000a8c565b604051809103906000f0801580156200052a573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b03831617905590506200071e565b60038260800151600481111562000569576200056962000b78565b1415620005a4576040516200057e9062000a9a565b604051809103906000f0801580156200059b573d6000803e3d6000fd5b5090506200071e565b600182608001516004811115620005bf57620005bf62000b78565b1415620005f157816020015182602001518360400151604051620005e39062000aa8565b6200057e9392919062000c1e565b6004826080015160048111156200060c576200060c62000b78565b1415620006be576000600260008460a00151600a81111562000632576200063262000b78565b600a81111562000646576200064662000b78565b815260200190815260200160002060009054906101000a90046001600160a01b0316905082602001518360200151846040015183604051620006889062000ab6565b62000697949392919062000c5b565b604051809103906000f080158015620006b4573d6000803e3d6000fd5b509150506200071e565b60405162461bcd60e51b815260206004820152602b60248201527f74657374546f6b656e53756974653a204372656174696e6720756e6b6e6f776e60448201526a20746f6b656e207479706560a81b606482015260840160405180910390fd5b60005460208301516040516318caf8e360e31b8152620100009092046001600160a01b03169163c657c718916200075b9185919060040162000ca9565b600060405180830381600087803b1580156200077657600080fd5b505af11580156200078b573d6000803e3d6000fd5b50505050600082606001516008604051620007a69062000ac4565b91825260ff166020820152604001604051809103906000f080158015620007d1573d6000803e3d6000fd5b50905081600260008560000151600a811115620007f257620007f262000b78565b600a81111562000806576200080662000b78565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055508260600151600560008560000151600a8111156200085a576200085a62000b78565b600a8111156200086e576200086e62000b78565b8152602080820192909252604090810160009081209390935585516001600160a01b03861684526008909252909120805460ff1916600183600a811115620008ba57620008ba62000b78565b02179055508260800151600360008560000151600a811115620008e157620008e162000b78565b600a811115620008f557620008f562000b78565b81526020810191909152604001600020805460ff1916600183600481111562000922576200092262000b78565b0217905550604080518082019091526001600160a01b0380841682528281166020808401918252600780546001810182556000918252945160029095027fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688810180549686166001600160a01b031997881617905592517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c689909301805493909416929094169190911790915584015184519091600491600a811115620009eb57620009eb62000b78565b600a811115620009ff57620009ff62000b78565b8152602001908152602001600020908051906020019062000a2292919062000ad2565b5080600660008560000151600a81111562000a415762000a4162000b78565b600a81111562000a555762000a5562000b78565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550505050565b610ab1806200285183390190565b611224806200330283390190565b611758806200452683390190565b6117098062005c7e83390190565b6106ca806200738783390190565b82805462000ae09062000cd7565b90600052602060002090601f01602090048101928262000b04576000855562000b4f565b82601f1062000b1f57805160ff191683800117855562000b4f565b8280016001018555821562000b4f579182015b8281111562000b4f57825182559160200191906001019062000b32565b5062000b5d92915062000b61565b5090565b5b8082111562000b5d576000815560010162000b62565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600060001982141562000bc757634e487b7160e01b600052601160045260246000fd5b5060010190565b6000815180845260005b8181101562000bf65760208185018101518683018201520162000bd8565b8181111562000c09576000602083870101525b50601f01601f19169290920160200192915050565b60608152600062000c33606083018662000bce565b828103602084015262000c47818662000bce565b91505060ff83166040830152949350505050565b60808152600062000c70608083018762000bce565b828103602084015262000c84818762000bce565b60ff95909516604084015250506001600160a01b039190911660609091015292915050565b6001600160a01b038316815260406020820181905260009062000ccf9083018462000bce565b949350505050565b600181811c9082168062000cec57607f821691505b6020821081141562000d0e57634e487b7160e01b600052602260045260246000fd5b50919050565b611b2d8062000d246000396000f3fe6080604052600436106101635760003560e01c80638eb86e8b116100c0578063c6c3bbe611610074578063d051a62211610059578063d051a62214610490578063eebab8ef146104b0578063fa7626d4146104d057600080fd5b8063c6c3bbe614610433578063c74912d21461045357600080fd5b80639b140a85116100a55780639b140a85146103e6578063b36ba20814610406578063ba414fa61461040e57600080fd5b80638eb86e8b1461038357806398cdaadf146103a357600080fd5b80636a72bde71161011757806388327863116100fc578063883278631461030857806388f776a2146103365780638a3177a31461035657600080fd5b80636a72bde7146102c45780636ca42ae3146102e657600080fd5b8063440864fa11610148578063440864fa146102025780634b57b0be1461022f57806367b426451461028157600080fd5b806304bc3b1c1461016f57806310c7f0b9146101b557600080fd5b3661016a57005b600080fd5b34801561017b57600080fd5b5061019f61018a3660046116f6565b60086020526000908152604090205460ff1681565b6040516101ac9190611742565b60405180910390f35b3480156101c157600080fd5b506101d56101d036600461175c565b6104ea565b6040805173ffffffffffffffffffffffffffffffffffffffff9384168152929091166020830152016101ac565b34801561020e57600080fd5b5061022261021d366004611784565b610530565b6040516101ac91906117cb565b34801561023b57600080fd5b5060015461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101ac565b34801561028d57600080fd5b5061025c61029c366004611784565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156102d057600080fd5b506102e46102df36600461181c565b6105ca565b005b3480156102f257600080fd5b506102fb610730565b6040516101ac919061186b565b34801561031457600080fd5b506103286103233660046118d4565b6107b5565b6040519081526020016101ac565b34801561034257600080fd5b506102e461035136600461190b565b610888565b34801561036257600080fd5b50610328610371366004611784565b60056020526000908152604090205481565b34801561038f57600080fd5b506102e461039e366004611954565b6108b9565b3480156103af57600080fd5b5061025c6103be366004611784565b60066020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156103f257600080fd5b506102e4610401366004611993565b610a73565b6102e4610b22565b34801561041a57600080fd5b50610423610ba0565b60405190151581526020016101ac565b34801561043f57600080fd5b506102e461044e3660046119b3565b610d00565b34801561045f57600080fd5b5061048361046e366004611784565b60036020526000908152604090205460ff1681565b6040516101ac91906119d3565b34801561049c57600080fd5b506103286104ab36600461190b565b610daf565b3480156104bc57600080fd5b506102e46104cb366004611954565b610e8b565b3480156104dc57600080fd5b506000546104239060ff1681565b600781815481106104fa57600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff91821692501682565b60046020526000908152604090208054610549906119e7565b80601f0160208091040260200160405190810160405280929190818152602001828054610575906119e7565b80156105c25780601f10610597576101008083540402835291602001916105c2565b820191906000526020600020905b8154815290600101906020018083116105a557829003601f168201915b505050505081565b6000546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152620100009092049091169063ca669fa790602401600060405180830381600087803b15801561063e57600080fd5b505af1158015610652573d6000803e3d6000fd5b505050506002600085600a81111561066c5761066c611713565b600a81111561067d5761067d611713565b8152602081019190915260409081016000205490517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490529091169063095ea7b3906044016020604051808303816000875af1158015610705573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107299190611a3b565b5050505050565b60606007805480602002602001604051908101604052809291908181526020016000905b828210156107ac5760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff908116835260019182015416828401529083529092019101610754565b50505050905090565b60006002600084600a8111156107cd576107cd611713565b600a8111156107de576107de611713565b8152602081019190915260409081016000205490517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152909116906370a0823190602401602060405180830381865afa15801561085d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108819190611a5d565b9392505050565b6108b48383837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6105ca565b505050565b60016003600085600a8111156108d1576108d1611713565b600a8111156108e2576108e2611713565b815260208101919091526040016000205460ff16600481111561090757610907611713565b14610999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f74657374546f6b656e53756974653a20547279696e6720746f206275726e206160448201527f206e6f6e2d6e6f726d616c20746f6b656e00000000000000000000000000000060648201526084015b60405180910390fd5b6002600084600a8111156109af576109af611713565b600a8111156109c0576109c0611713565b8152602081019190915260409081016000205490517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526024820184905290911690639dc29fac906044015b6020604051808303816000875af1158015610a49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6d9190611a3b565b50505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604081205460ff169081600a811115610aaf57610aaf611713565b1415610b17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f20746f6b656e2077697468207375636820616464726573730000000000006044820152606401610990565b610a6d818484610888565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015610b8c57600080fd5b505af1158015610729573d6000803e3d6000fd5b60008054610100900460ff1615610bc05750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610cfb5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610c65917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc491608001611a76565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052610c9d91611abe565b6000604051808303816000865af19150503d8060008114610cda576040519150601f19603f3d011682016040523d82523d6000602084013e610cdf565b606091505b5091505080806020019051810190610cf79190611a3b565b9150505b919050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604081205460ff169081600a811115610d3c57610d3c611713565b1415610da4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f20746f6b656e2077697468207375636820616464726573730000000000006044820152606401610990565b610a6d818484610e8b565b60006002600085600a811115610dc757610dc7611713565b600a811115610dd857610dd8611713565b8152602081019190915260409081016000205490517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301529091169063dd62ed3e90604401602060405180830381865afa158015610e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e839190611a5d565b949350505050565b60026003600085600a811115610ea357610ea3611713565b600a811115610eb457610eb4611713565b815260208101919091526040016000205460ff166004811115610ed957610ed9611713565b1415610ff6576000546040517fc88a5e6d000000000000000000000000000000000000000000000000000000008152306004820152602481018390526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c88a5e6d90604401600060405180830381600087803b158015610f5657600080fd5b505af1158015610f6a573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015610fd857600080fd5b505af1158015610fec573d6000803e3d6000fd5b505050505061163c565b600380600085600a81111561100d5761100d611713565b600a81111561101e5761101e611713565b815260208101919091526040016000205460ff16600481111561104357611043611713565b14156111aa576000546040517fc88a5e6d000000000000000000000000000000000000000000000000000000008152306004820152602481018390526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c88a5e6d90604401600060405180830381600087803b1580156110c057600080fd5b505af11580156110d4573d6000803e3d6000fd5b505050506002600084600a8111156110ee576110ee611713565b600a8111156110ff576110ff611713565b8152602081019190915260409081016000205490517fa1903eab00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a1903eab90839060240160206040518083038185885af115801561117f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906111a49190611a5d565b5061163c565b60046003600085600a8111156111c2576111c2611713565b600a8111156111d3576111d3611713565b815260208101919091526040016000205460ff1660048111156111f8576111f8611713565b141561148f5760006002600085600a81111561121657611216611713565b600a81111561122757611227611713565b815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c49190611ada565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600860205260409020549091506112fb9060ff163084610e8b565b8073ffffffffffffffffffffffffffffffffffffffff1663095ea7b36002600087600a81111561132d5761132d611713565b600a81111561133e5761133e611713565b81526020810191909152604090810160002054905160e083901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602481018590526044016020604051808303816000875af11580156113c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e69190611a3b565b506002600085600a8111156113fd576113fd611713565b600a81111561140e5761140e611713565b8152602081019190915260409081016000205490517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810184905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f1990604401600060405180830381600087803b158015610fd857600080fd5b60016003600085600a8111156114a7576114a7611713565b600a8111156114b8576114b8611713565b815260208101919091526040016000205460ff1660048111156114dd576114dd611713565b14156115b4576002600084600a8111156114f9576114f9611713565b600a81111561150a5761150a611713565b8152602081019190915260409081016000205490517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f19906044016020604051808303816000875af1158015611590573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a49190611a3b565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f74657374546f6b656e53756974653a20547279696e6720746f207472616e736660448201527f657220756e6b6e6f776e20746f6b656e000000000000000000000000000000006064820152608401610990565b6002600084600a81111561165257611652611713565b600a81111561166357611663611713565b8152602081019190915260409081016000205490517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490529091169063a9059cbb90604401610a2a565b73ffffffffffffffffffffffffffffffffffffffff811681146116f357600080fd5b50565b60006020828403121561170857600080fd5b8135610881816116d1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60208101600b831061175657611756611713565b91905290565b60006020828403121561176e57600080fd5b5035919050565b8035600b8110610cfb57600080fd5b60006020828403121561179657600080fd5b61088182611775565b60005b838110156117ba5781810151838201526020016117a2565b83811115610a6d5750506000910152565b60208152600082518060208401526117ea81604085016020870161179f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000806080858703121561183257600080fd5b61183b85611775565b9350602085013561184b816116d1565b9250604085013561185b816116d1565b9396929550929360600135925050565b602080825282518282018190526000919060409081850190868401855b828110156118c7578151805173ffffffffffffffffffffffffffffffffffffffff90811686529087015116868501529284019290850190600101611888565b5091979650505050505050565b600080604083850312156118e757600080fd5b6118f083611775565b91506020830135611900816116d1565b809150509250929050565b60008060006060848603121561192057600080fd5b61192984611775565b92506020840135611939816116d1565b91506040840135611949816116d1565b809150509250925092565b60008060006060848603121561196957600080fd5b61197284611775565b92506020840135611982816116d1565b929592945050506040919091013590565b6000806000606084860312156119a857600080fd5b8335611929816116d1565b6000806000606084860312156119c857600080fd5b8335611972816116d1565b602081016005831061175657611756611713565b600181811c908216806119fb57607f821691505b60208210811415611a35577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600060208284031215611a4d57600080fd5b8151801515811461088157600080fd5b600060208284031215611a6f57600080fd5b5051919050565b7fffffffff000000000000000000000000000000000000000000000000000000008316815260008251611ab081600485016020870161179f565b919091016004019392505050565b60008251611ad081846020870161179f565b9190910192915050565b600060208284031215611aec57600080fd5b8151610881816116d156fea264697066735822122010fe735ed069aca27931edce4ba2ff14ec7886bf21b0eea685a884f9200fb49e64736f6c634300080a003360c0604052600d60808190526c2bb930b83832b21022ba3432b960991b60a090815261002e916000919061007a565b50604080518082019091526004808252630ae8aa8960e31b602090920191825261005a9160019161007a565b506002805460ff1916601217905534801561007457600080fd5b5061014e565b82805461008690610113565b90600052602060002090601f0160209004810192826100a857600085556100ee565b82601f106100c157805160ff19168380011785556100ee565b828001600101855582156100ee579182015b828111156100ee5782518255916020019190600101906100d3565b506100fa9291506100fe565b5090565b5b808211156100fa57600081556001016100ff565b600181811c9082168061012757607f821691505b6020821081141561014857634e487b7160e01b600052602260045260246000fd5b50919050565b6109548061015d6000396000f3fe6080604052600436106100cb5760003560e01c806340c10f1911610074578063a9059cbb1161004e578063a9059cbb14610225578063d0e30db014610245578063dd62ed3e1461024d57600080fd5b806340c10f19146101c357806370a08231146101e357806395d89b411461021057600080fd5b806323b872dd116100a557806323b872dd146101575780632e1a7d4d14610177578063313ce5671461019757600080fd5b806306fdde03146100df578063095ea7b31461010a57806318160ddd1461013a57600080fd5b366100da576100d8610285565b005b600080fd5b3480156100eb57600080fd5b506100f46102e0565b6040516101019190610703565b60405180910390f35b34801561011657600080fd5b5061012a61012536600461079f565b61036e565b6040519015158152602001610101565b34801561014657600080fd5b50475b604051908152602001610101565b34801561016357600080fd5b5061012a6101723660046107c9565b6103e7565b34801561018357600080fd5b506100d8610192366004610805565b6105fe565b3480156101a357600080fd5b506002546101b19060ff1681565b60405160ff9091168152602001610101565b3480156101cf57600080fd5b506100d86101de36600461079f565b6106a4565b3480156101ef57600080fd5b506101496101fe36600461081e565b60036020526000908152604090205481565b34801561021c57600080fd5b506100f46106e2565b34801561023157600080fd5b5061012a61024036600461079f565b6106ef565b6100d8610285565b34801561025957600080fd5b50610149610268366004610839565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102a490849061089b565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102ed906108b3565b80601f0160208091040260200160405190810160405280929190818152602001828054610319906108b3565b80156103665780601f1061033b57610100808354040283529160200191610366565b820191906000526020600020905b81548152906001019060200180831161034957829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103d69086815260200190565b60405180910390a350600192915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561041957600080fd5b73ffffffffffffffffffffffffffffffffffffffff8416331480159061048f575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105175773ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020548211156104d157600080fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915281208054849290610511908490610907565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061054c908490610907565b909155505073ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260408120805484929061058690849061089b565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516105ec91815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561061a57600080fd5b3360009081526003602052604081208054839290610639908490610907565b9091555050604051339082156108fc029083906000818181858888f1935050505015801561066b573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260036020526040812080548392906106d990849061089b565b90915550505050565b600180546102ed906108b3565b60006106fc3384846103e7565b9392505050565b600060208083528351808285015260005b8181101561073057858101830151858201604001528201610714565b81811115610742576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461079a57600080fd5b919050565b600080604083850312156107b257600080fd5b6107bb83610776565b946020939093013593505050565b6000806000606084860312156107de57600080fd5b6107e784610776565b92506107f560208501610776565b9150604084013590509250925092565b60006020828403121561081757600080fd5b5035919050565b60006020828403121561083057600080fd5b6106fc82610776565b6000806040838503121561084c57600080fd5b61085583610776565b915061086360208401610776565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156108ae576108ae61086c565b500190565b600181811c908216806108c757607f821691505b60208210811415610901577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000828210156109195761091961086c565b50039056fea26469706673582212206ec943fa4e3b70d8fca6c25b6aa26fa18e8f8952ce3bc4d5afcb443bf3097c0564736f6c634300080a003360806040526000600255600060035534801561001a57600080fd5b506111fa8061002a6000396000f3fe60806040526004361061016e5760003560e01c80637a28fb88116100cb578063bdd17e1c1161007f578063dd62ed3e11610059578063dd62ed3e146103ee578063ee7a7c0414610441578063f5eb42dc1461046157600080fd5b8063bdd17e1c146103ad578063cdb9a21c146103c3578063d5002f2e146103d957600080fd5b8063a1903eab116100b0578063a1903eab1461035a578063a457c2d71461036d578063a9059cbb1461038d57600080fd5b80637a28fb88146102f457806395d89b411461031457600080fd5b806323b872dd1161012257806337cfdaca1161010757806337cfdaca1461020d57806339509351146102b457806370a08231146102d457600080fd5b806323b872dd14610278578063313ce5671461029857600080fd5b806318160ddd1161015357806318160ddd1461020d578063192084511461023057806322301f6e1461025057600080fd5b806306fdde0314610185578063095ea7b3146101dd57600080fd5b366101805761017d6000610481565b50005b600080fd5b34801561019157600080fd5b5060408051808201909152601781527f4c6971756964207374616b656420457468657220322e3000000000000000000060208201525b6040516101d49190610f63565b60405180910390f35b3480156101e957600080fd5b506101fd6101f8366004610fff565b610545565b60405190151581526020016101d4565b34801561021957600080fd5b5061022261055b565b6040519081526020016101d4565b34801561023c57600080fd5b5061022261024b366004611029565b61056b565b34801561025c57600080fd5b5061027661026b366004611042565b600391909155600255565b005b34801561028457600080fd5b506101fd610293366004611064565b6105ab565b3480156102a457600080fd5b50604051601281526020016101d4565b3480156102c057600080fd5b506101fd6102cf366004610fff565b610696565b3480156102e057600080fd5b506102226102ef3660046110a0565b6106d9565b34801561030057600080fd5b5061022261030f366004611029565b61070e565b34801561032057600080fd5b5060408051808201909152600581527f737445544800000000000000000000000000000000000000000000000000000060208201526101c7565b6102226103683660046110a0565b61073a565b34801561037957600080fd5b506101fd610388366004610fff565b610745565b34801561039957600080fd5b506101fd6103a8366004610fff565b6107f9565b3480156103b957600080fd5b5061022260035481565b3480156103cf57600080fd5b5061022260025481565b3480156103e557600080fd5b50610222610806565b3480156103fa57600080fd5b506102226104093660046110bb565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b34801561044d57600080fd5b5061027661045c366004610fff565b610811565b34801561046d57600080fd5b5061022261047c3660046110a0565b61081f565b60003334806104f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f5a45524f5f4445504f534954000000000000000000000000000000000000000060448201526064015b60405180910390fd5b60006104fc8261056b565b9050806105065750805b8160036000828254610518919061111d565b909155506105289050838261084a565b61053383838761093b565b61053d8382610992565b949350505050565b60006105523384846109ea565b50600192915050565b600061056660035490565b905090565b60008061057760035490565b9050806105875750600092915050565b6105a48161059e61059760025490565b8690610b52565b90610b5e565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001602090815260408083203384529091528120548281101561066c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f5452414e534645525f414d4f554e545f455843454544535f414c4c4f57414e4360448201527f450000000000000000000000000000000000000000000000000000000000000060648201526084016104e8565b610677858585610b6a565b61068b85336106868487610bef565b6109ea565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916105529185906106869086610bfb565b73ffffffffffffffffffffffffffffffffffffffff81166000908152602081905260408120546107089061070e565b92915050565b60008061071a60025490565b90508061072a5750600092915050565b6105a48161059e61059760035490565b600061070882610481565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156107e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4445435245415345445f414c4c4f57414e43455f42454c4f575f5a45524f000060448201526064016104e8565b6107ef33856106868487610bef565b5060019392505050565b6000610552338484610b6a565b600061056660025490565b61081b8282610c07565b5050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040812054610708565b73ffffffffffffffffffffffffffffffffffffffff82166108c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4d494e545f544f5f5448455f5a45524f5f41444452455353000000000000000060448201526064016104e8565b80600260008282546108d9919061111d565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205461090e9082610bfb565b73ffffffffffffffffffffffffffffffffffffffff90921660009081526020819052604090209190915550565b6040805183815273ffffffffffffffffffffffffffffffffffffffff83811660208301528516917fed8dd430b1e4bba98e943dc5b157cf7b54d9e12916d6c474ff5733a95001d03b910160405180910390a2505050565b73ffffffffffffffffffffffffffffffffffffffff821660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6109d58461070e565b60405190815260200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff8316610a67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f415050524f56455f46524f4d5f5a45524f5f414444524553530000000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff8216610ae4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f415050524f56455f544f5f5a45524f5f4144445245535300000000000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006105a48284611135565b60006105a48284611172565b6000610b758261056b565b9050610b82848483610d64565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610be191815260200190565b60405180910390a350505050565b60006105a482846111ad565b60006105a4828461111d565b73ffffffffffffffffffffffffffffffffffffffff8216610c84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4255524e5f46524f4d5f5448455f5a45524f5f4144445245535300000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205480821115610d14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4255524e5f414d4f554e545f455843454544535f42414c414e4345000000000060448201526064016104e8565b8160026000828254610d2691906111ad565b90915550610d3690508183610bef565b73ffffffffffffffffffffffffffffffffffffffff9093166000908152602081905260409020929092555050565b73ffffffffffffffffffffffffffffffffffffffff8316610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f5452414e534645525f46524f4d5f5448455f5a45524f5f41444452455353000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff8216610e5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f5452414e534645525f544f5f5448455f5a45524f5f414444524553530000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205480821115610eee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5452414e534645525f414d4f554e545f455843454544535f42414c414e43450060448201526064016104e8565b610ef88183610bef565b73ffffffffffffffffffffffffffffffffffffffff8086166000908152602081905260408082209390935590851681522054610f349083610bfb565b73ffffffffffffffffffffffffffffffffffffffff909316600090815260208190526040902092909255505050565b600060208083528351808285015260005b81811015610f9057858101830151858201604001528201610f74565b81811115610fa2576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ffa57600080fd5b919050565b6000806040838503121561101257600080fd5b61101b83610fd6565b946020939093013593505050565b60006020828403121561103b57600080fd5b5035919050565b6000806040838503121561105557600080fd5b50508035926020909101359150565b60008060006060848603121561107957600080fd5b61108284610fd6565b925061109060208501610fd6565b9150604084013590509250925092565b6000602082840312156110b257600080fd5b6105a482610fd6565b600080604083850312156110ce57600080fd5b6110d783610fd6565b91506110e560208401610fd6565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611130576111306110ee565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561116d5761116d6110ee565b500290565b6000826111a8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000828210156111bf576111bf6110ee565b50039056fea2646970667358221220a5b4f31162ba2b8b3424cef84b31ef91d05a825243602b5fdf758ffb49b8246364736f6c634300080a003360a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a003360c06040523480156200001157600080fd5b506040516200170938038062001709833981016040819052620000349162000266565b8351849084906200004d906003906020850190620000f3565b50805162000063906004906020840190620000f3565b505050620000806200007a6200009d60201b60201c565b620000a1565b60ff9091166080526001600160a01b031660a05250620003479050565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b82805462000101906200030a565b90600052602060002090601f01602090048101928262000125576000855562000170565b82601f106200014057805160ff191683800117855562000170565b8280016001018555821562000170579182015b828111156200017057825182559160200191906001019062000153565b506200017e92915062000182565b5090565b5b808211156200017e576000815560010162000183565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c157600080fd5b81516001600160401b0380821115620001de57620001de62000199565b604051601f8301601f19908116603f0116810190828211818310171562000209576200020962000199565b816040528381526020925086838588010111156200022657600080fd5b600091505b838210156200024a57858201830151818301840152908201906200022b565b838211156200025c5760008385830101525b9695505050505050565b600080600080608085870312156200027d57600080fd5b84516001600160401b03808211156200029557600080fd5b620002a388838901620001af565b95506020870151915080821115620002ba57600080fd5b50620002c987828801620001af565b935050604085015160ff81168114620002e157600080fd5b60608601519092506001600160a01b0381168114620002ff57600080fd5b939692955090935050565b600181811c908216806200031f57607f821691505b602082108114156200034157634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05161138e6200037b600039600081816101f70152818161041f0152610600015260006101a2015261138e6000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80636f307dc3116100b257806395d89b4111610081578063a9059cbb11610066578063a9059cbb146102b5578063dd62ed3e146102c8578063f2fde38b1461030e57600080fd5b806395d89b411461029a578063a457c2d7146102a257600080fd5b80636f307dc3146101f257806370a082311461023e578063715018a6146102745780638da5cb5b1461027c57600080fd5b806323b872dd116100ee57806323b872dd14610188578063313ce5671461019b57806339509351146101cc57806340c10f19146101df57600080fd5b806306fdde0314610120578063095ea7b31461013e57806318160ddd146101615780631e9a695014610173575b600080fd5b610128610321565b604051610135919061112d565b60405180910390f35b61015161014c3660046111c9565b6103b3565b6040519015158152602001610135565b6002545b604051908152602001610135565b6101866101813660046111c9565b6103c9565b005b6101516101963660046111f3565b610491565b60405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610135565b6101516101da3660046111c9565b61057c565b6101866101ed3660046111c9565b6105c5565b6102197f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b61016561024c36600461122f565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610186610691565b60055473ffffffffffffffffffffffffffffffffffffffff16610219565b61012861071e565b6101516102b03660046111c9565b61072d565b6101516102c33660046111c9565b610805565b6101656102d6366004611251565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b61018661031c36600461122f565b610812565b60606003805461033090611284565b80601f016020809104026020016040519081016040528092919081815260200182805461035c90611284565b80156103a95780601f1061037e576101008083540402835291602001916103a9565b820191906000526020600020905b81548152906001019060200180831161038c57829003601f168201915b5050505050905090565b60006103c0338484610942565b50600192915050565b6103d33382610af5565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015610468573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048c91906112d8565b505050565b600061049e848484610ce2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6105718533858403610942565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916103c09185906105c0908690611329565b610942565b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906323b872dd906064016020604051808303816000875af115801561065e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068291906112d8565b5061068d8282610f96565b5050565b60055473ffffffffffffffffffffffffffffffffffffffff163314610712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161055b565b61071c60006110b6565b565b60606004805461033090611284565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156107ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161055b565b6107fb3385858403610942565b5060019392505050565b60006103c0338484610ce2565b60055473ffffffffffffffffffffffffffffffffffffffff163314610893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161055b565b73ffffffffffffffffffffffffffffffffffffffff8116610936576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161055b565b61093f816110b6565b50565b73ffffffffffffffffffffffffffffffffffffffff83166109e4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff8216610a87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8216610b98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015610c4e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290610c8a908490611341565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff8216610e28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610ede576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610f22908490611329565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f8891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161055b565b80600260008282546110259190611329565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152602081905260408120805483929061105f908490611329565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208083528351808285015260005b8181101561115a5785810183015185820160400152820161113e565b8181111561116c576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146111c457600080fd5b919050565b600080604083850312156111dc57600080fd5b6111e5836111a0565b946020939093013593505050565b60008060006060848603121561120857600080fd5b611211846111a0565b925061121f602085016111a0565b9150604084013590509250925092565b60006020828403121561124157600080fd5b61124a826111a0565b9392505050565b6000806040838503121561126457600080fd5b61126d836111a0565b915061127b602084016111a0565b90509250929050565b600181811c9082168061129857607f821691505b602082108114156112d2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156112ea57600080fd5b8151801515811461124a57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561133c5761133c6112fa565b500190565b600082821015611353576113536112fa565b50039056fea26469706673582212203a6db30cd3c097921df4156794aa7973eb848711deeb2cffd7c54a9df1fdb0a564736f6c634300080a003360a060405234801561001057600080fd5b506040516106ca3803806106ca83398101604081905261002f9161006c565b60009190915560ff166080526001805460506001600160501b031991821681179092556004805490911690911790554260028190556003556100a2565b6000806040838503121561007f57600080fd5b82519150602083015160ff8116811461009757600080fd5b809150509250929050565b60805161060e6100bc600039600060d3015261060e6000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80639a6fc8f511610081578063d62ada111161005b578063d62ada11146102dc578063f7a30806146102f4578063feaf968c1461030757600080fd5b80639a6fc8f5146101cd578063bd18ad531461023a578063cd653afc1461024d57600080fd5b806354fd4d50116100b257806354fd4d501461012d57806367e8d83d1461013c5780637284e4161461018e57600080fd5b8063313ce567146100ce5780633fd0875f1461010c575b600080fd5b6100f57f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020015b60405180910390f35b6004546a0100000000000000000000900460ff166040516101039190610441565b60405160018152602001610103565b61018c61014a366004610482565b600480549115156c01000000000000000000000000027fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff909216919091179055565b005b604080518082018252600c81527f7072696365206f7261636c6500000000000000000000000000000000000000006020820152905161010391906104ab565b6102036101db36600461053d565b60015460005460025460035460045469ffffffffffffffffffff948516941691939590929450565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610103565b61018c610248366004610558565b61030f565b61018c61025b366004610579565b6001805469ffffffffffffffffffff9586167fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090911617905560029290925560035560048054919092167fffffffffffffffffffffffffffffffffffffffff00ff00000000000000000000909116176b020000000000000000000000179055565b6102e461035f565b6040519015158152602001610103565b61018c6103023660046105bf565b600055565b610203610385565b600480548291907fffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff166b01000000000000000000000083600281111561035757610357610412565b021790555050565b600454600090610380906b010000000000000000000000900460ff166103d6565b905090565b60008060008060006004600c9054906101000a900460ff16156103a757600080fd5b505060015460005460025460035460045469ffffffffffffffffffff9485169893975091955093509190911690565b600060028260028111156103ec576103ec610412565b14156103f757600080fd5b600182600281111561040b5761040b610412565b1492915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016006831061047c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561049457600080fd5b813580151581146104a457600080fd5b9392505050565b600060208083528351808285015260005b818110156104d8578581018301518582016040015282016104bc565b818111156104ea576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803569ffffffffffffffffffff8116811461053857600080fd5b919050565b60006020828403121561054f57600080fd5b6104a48261051e565b60006020828403121561056a57600080fd5b8135600381106104a457600080fd5b6000806000806080858703121561058f57600080fd5b6105988561051e565b935060208501359250604085013591506105b46060860161051e565b905092959194509250565b6000602082840312156105d157600080fd5b503591905056fea264697066735822122014874f7a973b86501c4c1a8be32490fe902c8f088ee234d25f9b2497e19f9e5264736f6c634300080a003360806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d00011790553480156200003a57600080fd5b5060405162031ed638038062031ed68339810160408190526200005d91620015e8565b81816040516200006d9062001595565b604051809103906000f0801580156200008a573d6000803e3d6000fd5b5050600180546001600160a01b0319166001600160a01b038416908117909155604080516325abd85f60e11b81529051634b57b0be916004808201926020929091908290030181865afa158015620000e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200010c91906200162a565b73c4375b7de8af5a38a93548eb8453a498222c4ff26040516200012f90620015a3565b6001600160a01b03928316815291166020820152604001604051809103906000f08015801562000163573d6000803e3d6000fd5b50600380546001600160a01b0319166001600160a01b039290921691821790556040805163de28735960e01b8152905163de287359916004808201926020929091908290030181865afa158015620001bf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e591906200162a565b604051634910832f60e01b81527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526001600160a01b039190911690634910832f90602401600060405180830381600087803b1580156200023d57600080fd5b505af115801562000252573d6000803e3d6000fd5b50505050600360009054906101000a90046001600160a01b03166001600160a01b031663de2873596040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d091906200162a565b60035460405163f2fde38b60e01b81526001600160a01b03918216600482015291169063f2fde38b90602401600060405180830381600087803b1580156200031757600080fd5b505af11580156200032c573d6000803e3d6000fd5b505060035460015460408051636ca42ae360e01b815290516001600160a01b039384169550638874ff1f94509190921691636ca42ae39160048083019260009291908290030181865afa15801562000388573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620003b29190810190620016c5565b6040518263ffffffff1660e01b8152600401620003d09190620017b6565b600060405180830381600087803b158015620003eb57600080fd5b505af115801562000400573d6000803e3d6000fd5b50505050600360009054906101000a90046001600160a01b03166001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000458573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200047e91906200162a565b600280546001600160a01b0319166001600160a01b039290921691821790556040805163120d150d60e31b81529051639068a868916004808201926020929091908290030181865afa158015620004d9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004ff91906200162a565b600480546001600160a01b0319166001600160a01b0392831617815560025460408051631f94a27560e31b81529051919093169263fca513a892818101926020929091908290030181865afa1580156200055d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200058391906200162a565b600880546001600160a01b0319166001600160a01b0392831617905560025460408051630873769560e01b81529051919092169163087376959160048083019260209291908290030181865afa158015620005e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200060891906200162a565b600780546001600160a01b0319166001600160a01b039283161790556002546040805163c513c9bb60e01b81529051919092169163c513c9bb9160048083019260209291908290030181865afa15801562000667573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200068d91906200162a565b600680546001600160a01b0319166001600160a01b039283161790556001546040516367b4264560e01b81529116906367b4264590620006d29084906004016200184d565b602060405180830381865afa158015620006f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200071691906200162a565b600980546001600160a01b0319166001600160a01b0392831617905560035460408051630a55006360e21b815290519190921691632954018c9160048083019260209291908290030181865afa15801562000775573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200079b91906200162a565b6009546040516001600160a01b0390911690620007b890620015b2565b6001600160a01b03928316815291166020820152604001604051809103906000f080158015620007ec573d6000803e3d6000fd5b50600580546001600160a01b0319166001600160a01b039283169081179091556001549091169063eebab8ef90839062000825620011ec565b6200083290600a62001879565b6040518463ffffffff1660e01b815260040162000852939291906200189b565b600060405180830381600087803b1580156200086d57600080fd5b505af115801562000882573d6000803e3d6000fd5b505060065460055460405163d914cd4b60e01b81526001600160a01b0391821660048201529116925063d914cd4b9150602401600060405180830381600087803b158015620008d057600080fd5b505af1158015620008e5573d6000803e3d6000fd5b5050600f80546001600160801b031916670de0b6b3a76400001790555062000911925050620011ec9050565b6200091e90600a62001879565b600f80546001600160801b03908116600160801b9382168402818117938490556040805160a0810182529184169092178152939092041660208301526000919081016200096b84620012ab565b815260006020820181905260409182018190526005549151929350916001600160a01b039091169083908390620009a290620015c0565b620009b093929190620018c5565b604051809103906000f080158015620009cd573d6000803e3d6000fd5b509050806001600160a01b031663c12c21c06040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a0f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a3591906200162a565b600b60006101000a8154816001600160a01b0302191690836001600160a01b03160217905550806001600160a01b0316632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a9a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ac091906200162a565b600c60006101000a8154816001600160a01b0302191690836001600160a01b03160217905550806001600160a01b031663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000b25573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b4b91906200162a565b600d80546001600160a01b0319166001600160a01b03928316179055600654600b5460405163e26b2f6360e01b8152908316600482015291169063e26b2f6390602401600060405180830381600087803b15801562000ba957600080fd5b505af115801562000bbe573d6000803e3d6000fd5b5050600054600554604080516318caf8e360e31b81526001600160a01b039283166004808301919091526024820192909252604481019190915263141bdbdb60e21b60648201526201000090920416925063c657c7189150608401600060405180830381600087803b15801562000c3457600080fd5b505af115801562000c49573d6000803e3d6000fd5b5050600054600c8054604080516318caf8e360e31b81526001600160a01b039283166004820152602481019190915260448101929092526b43726564697446616361646560a01b606483015262010000909204909116925063c657c7189150608401600060405180830381600087803b15801562000cc657600080fd5b505af115801562000cdb573d6000803e3d6000fd5b5050600054600b54604080516318caf8e360e31b81526001600160a01b0392831660048201526024810191909152600d60448201526c21b932b234ba26b0b730b3b2b960991b60648201526201000090920416925063c657c7189150608401600060405180830381600087803b15801562000d5557600080fd5b505af115801562000d6a573d6000803e3d6000fd5b5050600054600d54604080516318caf8e360e31b81526001600160a01b0392831660048201526024810191909152601260448201527121b932b234ba21b7b73334b3bab930ba37b960711b60648201526201000090920416925063c657c7189150608401600060405180830381600087803b15801562000de957600080fd5b505af115801562000dfe573d6000803e3d6000fd5b50506001546001600160a01b0316915063eebab8ef90508473f39fd6e51aad88f6f4ce6ab8827279cfffb9226662000e35620011ec565b6040518463ffffffff1660e01b815260040162000e55939291906200189b565b600060405180830381600087803b15801562000e7057600080fd5b505af115801562000e85573d6000803e3d6000fd5b50506001546001600160a01b0316915063eebab8ef9050847390f79bf6eb2c4f870365e785982e1f101e93b90662000ebc620011ec565b6040518463ffffffff1660e01b815260040162000edc939291906200189b565b600060405180830381600087803b15801562000ef757600080fd5b505af115801562000f0c573d6000803e3d6000fd5b505060005460405163ca669fa760e01b815273f39fd6e51aad88f6f4ce6ab8827279cfffb922666004820152620100009091046001600160a01b0316925063ca669fa79150602401600060405180830381600087803b15801562000f6f57600080fd5b505af115801562000f84573d6000803e3d6000fd5b5050600954600b5460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529116925063095ea7b391506044016020604051808303816000875af115801562000fdf573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001005919062001989565b5060005460405163ca669fa760e01b81527390f79bf6eb2c4f870365e785982e1f101e93b9066004820152620100009091046001600160a01b03169063ca669fa790602401600060405180830381600087803b1580156200106557600080fd5b505af11580156200107a573d6000803e3d6000fd5b5050600954600b5460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529116925063095ea7b391506044016020604051808303816000875af1158015620010d5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010fb919062001989565b5060025460405163f2fde38b60e01b81527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526001600160a01b039091169063f2fde38b90602401600060405180830381600087803b1580156200115657600080fd5b505af11580156200116b573d6000803e3d6000fd5b505060075460405163f2fde38b60e01b81527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b158015620011c957600080fd5b505af1158015620011de573d6000803e3d6000fd5b5050505050505050620019e1565b600180546040516367b4264560e01b81526000926001600160a01b03909216916367b42645916200122191906004016200184d565b602060405180830381865afa1580156200123f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200126591906200162a565b6009546001600160a01b03908116911614620012955762001290670de0b6b3a764000060c862001879565b905090565b62001290670de0b6b3a7640000614e2062001879565b6040805160c08101825260026080820190815261232860a08301528152815180830183526005815261226060208281019190915282015281518083018352606092600092919082019080600387600a8111156200130c576200130c62001814565b146200131a5760036200131d565b60015b600a81111562001331576200133162001814565b815261206c6020918201529082526040805180820190915260048152611c84818301529101529050612454600a6000858281111562001374576200137462001814565b600a81111562001388576200138862001814565b815260208101919091526040908101600020805461ffff9390931661ffff19909316929092179091558051600480825260a0820190925281816020015b6040805180820190915260008082526020820152815260200190600190039081620013c557905050925060005b818110156200158d57828160048110620014105762001410620019ad565b602002015160200151600a6000858460048110620014325762001432620019ad565b602002015151600a8111156200144c576200144c62001814565b600a81111562001460576200146062001814565b815260208101919091526040908101600020805461ffff191661ffff9390931692909217909155805180820190915260015481906001600160a01b03166367b42645868560048110620014b757620014b7620019ad565b6020020151516040516001600160e01b031960e084901b168152620014e091906004016200184d565b602060405180830381865afa158015620014fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200152491906200162a565b6001600160a01b03168152602001848360048110620015475762001547620019ad565b60200201516020015161ffff168152508482815181106200156c576200156c620019ad565b602002602001018190525080806200158490620019c3565b915050620013f2565b505050919050565b6105e6806200bc5283390190565b62011105806200c23883390190565b6110a7806201d33d83390190565b62013af2806201e3e483390190565b6001600160a01b0381168114620015e557600080fd5b50565b60008060408385031215620015fc57600080fd5b82516200160981620015cf565b6020840151909250600b81106200161f57600080fd5b809150509250929050565b6000602082840312156200163d57600080fd5b81516200164a81620015cf565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156200168c576200168c62001651565b60405290565b604051601f8201601f191681016001600160401b0381118282101715620016bd57620016bd62001651565b604052919050565b60006020808385031215620016d957600080fd5b82516001600160401b0380821115620016f157600080fd5b818501915085601f8301126200170657600080fd5b8151818111156200171b576200171b62001651565b6200172b848260051b0162001692565b818152848101925060069190911b8301840190878211156200174c57600080fd5b928401925b81841015620017ab57604084890312156200176c5760008081fd5b6200177662001667565b84516200178381620015cf565b8152848601516200179481620015cf565b818701528352604093909301929184019162001751565b979650505050505050565b602080825282518282018190526000919060409081850190868401855b828110156200180757815180516001600160a01b0390811686529087015116868501529284019290850190600101620017d3565b5091979650505050505050565b634e487b7160e01b600052602160045260246000fd5b600b81106200184957634e487b7160e01b600052602160045260246000fd5b9052565b602081016200185d82846200182a565b92915050565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161562001896576200189662001863565b500290565b60608101620018ab82866200182a565b6001600160a01b0393909316602082015260400152919050565b6001600160a01b0384811682526060602080840182905285516001600160801b039081169285019290925285810151909116608084015260408086015160a085810152805161010086018190526000949392918301919085906101208801905b808310156200195657845180518816835286015161ffff168683015293850193600192909201919083019062001925565b5060608a01516001600160a01b031660c0890152608090990151151560e088015250909401949094525092949350505050565b6000602082840312156200199c57600080fd5b815180151581146200164a57600080fd5b634e487b7160e01b600052603260045260246000fd5b6000600019821415620019da57620019da62001863565b5060010190565b61a26180620019f16000396000f3fe60806040523480156200001157600080fd5b5060043610620001ad5760003560e01c806362eb33e311620000f5578063ba414fa61162000097578063de287359116200006e578063de2873591462000479578063f9aa028a146200049a578063fa7626d414620004bb57600080fd5b8063ba414fa6146200041c578063c12c21c01462000437578063d46b9330146200045857600080fd5b80637785ff5d11620000cc5780637785ff5d14620003da5780639408b63f14620003e45780639dd55b45146200040557600080fd5b806362eb33e314620003775780636b70b04c14620003985780636f307dc314620003b957600080fd5b80632f7a1881116200015f5780635e813a8b11620001365780635e813a8b146200030c5780635f7c9bd0146200032d57806362186905146200034657600080fd5b80632f7a188114620002be578063406c8e2f14620002df57806354cae56e146200030057600080fd5b80630e42bc5d11620001945780630e42bc5d14620002305780632630c12f14620002565780632954018c146200029d57600080fd5b80630bc772da14620001b25780630c75f80614620001f5575b600080fd5b600f54620001cf906fffffffffffffffffffffffffffffffff1681565b6040516fffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6200021c62000206366004620012dd565b600a6020526000908152604090205461ffff1681565b60405161ffff9091168152602001620001ec565b6200024762000241366004620012dd565b620004c9565b604051620001ec919062001307565b600854620002779073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001620001ec565b600254620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600c54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600154620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200030a6200081f565b005b600454620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200033762000b1a565b604051908152602001620001ec565b600f54620001cf9070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681565b600654620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600554620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600954620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200030a62000c0c565b600e54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200030a6200041636600462001398565b62000fd6565b6200042662001149565b6040519015158152602001620001ec565b600b54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600354620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600754620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600d54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600054620004269060ff1681565b6040805160c08101825260026080820190815261232860a08301528152815180830183526005815261226060208281019190915282015281518083018352606092600092919082019080600387600a8111156200052a576200052a620013c7565b14620005385760036200053b565b60015b600a8111156200054f576200054f620013c7565b815261206c6020918201529082526040805180820190915260048152611c84818301529101529050612454600a60008582811115620005925762000592620013c7565b600a811115620005a657620005a6620013c7565b815260208101919091526040908101600020805461ffff939093167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909316929092179091558051600480825260a0820190925281816020015b60408051808201909152600080825260208201528152602001906001900390816200060057905050925060005b8181101562000817578281600481106200064b576200064b620013f6565b602002015160200151600a60008584600481106200066d576200066d620013f6565b602002015151600a811115620006875762000687620013c7565b600a8111156200069b576200069b620013c7565b81526020810191909152604090810160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff93909316929092179091558051808201909152600154819073ffffffffffffffffffffffffffffffffffffffff166367b426458685600481106200071c576200071c620013f6565b6020020151516040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526200075d919060040162001425565b602060405180830381865afa1580156200077b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007a1919062001467565b73ffffffffffffffffffffffffffffffffffffffff168152602001848360048110620007d157620007d1620013f6565b60200201516020015161ffff16815250848281518110620007f657620007f6620013f6565b602002602001018190525080806200080e90620014b6565b9150506200062d565b505050919050565b6000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16906306447d5690602401600060405180830381600087803b158015620008a457600080fd5b505af1158015620008b9573d6000803e3d6000fd5b5050600b5460405173ffffffffffffffffffffffffffffffffffffffff909116925060009150600190620008ed90620012b3565b73ffffffffffffffffffffffffffffffffffffffff938416815292909116602083015215156040820152606001604051809103906000f08015801562000937573d6000803e3d6000fd5b50600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316908117909155600d546040517f526a41e80000000000000000000000000000000000000000000000000000000081526004810192909252600160248301529091169063526a41e890604401600060405180830381600087803b158015620009dc57600080fd5b505af1158015620009f1573d6000803e3d6000fd5b5050600d5473ffffffffffffffffffffffffffffffffffffffff16915063eb9606df905062000a22426001620014f2565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815264ffffffffff90911660048201526024015b600060405180830381600087803b15801562000a7b57600080fd5b505af115801562000a90573d6000803e3d6000fd5b50505050600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562000aff57600080fd5b505af115801562000b14573d6000803e3d6000fd5b50505050565b600180546040517f67b4264500000000000000000000000000000000000000000000000000000000815260009273ffffffffffffffffffffffffffffffffffffffff909216916367b426459162000b75919060040162001425565b602060405180830381865afa15801562000b93573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000bb9919062001467565b60095473ffffffffffffffffffffffffffffffffffffffff90811691161462000bf65762000bf1670de0b6b3a764000060c86200150d565b905090565b62000bf1670de0b6b3a7640000614e206200150d565b60025460405173ffffffffffffffffffffffffffffffffffffffff9091169062000c3690620012c1565b73ffffffffffffffffffffffffffffffffffffffff90911681526060602082018190526008908201527f446567656e4e4654000000000000000000000000000000000000000000000000608082015260a060408201819052600a908201527f476561722d446567656e0000000000000000000000000000000000000000000060c082015260e001604051809103906000f08015801562000cda573d6000803e3d6000fd5b50600e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283161790556000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015262010000909104909116906306447d5690602401600060405180830381600087803b15801562000d8e57600080fd5b505af115801562000da3573d6000803e3d6000fd5b5050600e546040517ffca3b5aa0000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff909116925063fca3b5aa9150602401600060405180830381600087803b15801562000e2757600080fd5b505af115801562000e3c573d6000803e3d6000fd5b5050600b54600e5460405173ffffffffffffffffffffffffffffffffffffffff92831694509116915060009062000e7390620012b3565b73ffffffffffffffffffffffffffffffffffffffff938416815292909116602083015215156040820152606001604051809103906000f08015801562000ebd573d6000803e3d6000fd5b50600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316908117909155600d546040517f526a41e80000000000000000000000000000000000000000000000000000000081526004810192909252600160248301529091169063526a41e890604401600060405180830381600087803b15801562000f6257600080fd5b505af115801562000f77573d6000803e3d6000fd5b5050600e54600c546040517f4610f6ac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015291169250634610f6ac915060240162000a60565b600081600860405162000fe990620012cf565b91825260ff166020820152604001604051809103906000f08015801562001014573d6000803e3d6000fd5b506000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291925062010000900473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b1580156200109c57600080fd5b505af1158015620010b1573d6000803e3d6000fd5b50506008546040517fe8a97a3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528581166024830152909116925063e8a97a3e9150604401600060405180830381600087803b1580156200112b57600080fd5b505af115801562001140573d6000803e3d6000fd5b50505050505050565b60008054610100900460ff16156200116a5750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620012ae5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000008284015282518083038401815260608301909352600092909162001212917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016200158b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526200124c91620015c9565b6000604051808303816000865af19150503d80600081146200128b576040519150601f19603f3d011682016040523d82523d6000602084013e62001290565b606091505b5091505080806020019051810190620012aa9190620015d7565b9150505b919050565b615e9780620015fc83390190565b6126cf806200749383390190565b6106ca8062009b6283390190565b600060208284031215620012f057600080fd5b8135600b81106200130057600080fd5b9392505050565b602080825282518282018190526000919060409081850190868401855b8281101562001365578151805173ffffffffffffffffffffffffffffffffffffffff16855286015161ffff1686850152928401929085019060010162001324565b5091979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff811681146200139557600080fd5b50565b60008060408385031215620013ac57600080fd5b8235620013b98162001372565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60208101600b831062001461577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000602082840312156200147a57600080fd5b8151620013008162001372565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415620014eb57620014eb62001487565b5060010190565b6000821982111562001508576200150862001487565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562001548576200154862001487565b500290565b6000815160005b8181101562001570576020818501810151868301520162001554565b8181111562001580576000828601525b509290920192915050565b7fffffffff00000000000000000000000000000000000000000000000000000000831681526000620015c160048301846200154d565b949350505050565b60006200130082846200154d565b600060208284031215620015ea57600080fd5b815180151581146200130057600080fdfe6101406040523480156200001257600080fd5b5060405162005e9738038062005e97833981016040819052620000359162000198565b60016000556001600160a01b0383166200006257604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038316608081905260408051636f307dc360e01b81529051636f307dc3916004808201926020929091908290030181865afa158015620000ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d39190620001ea565b6001600160a01b031660a0816001600160a01b031681525050826001600160a01b0316634f0e0ef36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200012b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001519190620001ea565b6001600160a01b0390811660c0529190911660e0819052151561010052151561012052506200020f565b80516001600160a01b03811681146200019357600080fd5b919050565b600080600060608486031215620001ae57600080fd5b620001b9846200017b565b9250620001c9602085016200017b565b915060408401518015158114620001df57600080fd5b809150509250925092565b600060208284031215620001fd57600080fd5b62000208826200017b565b9392505050565b60805160a05160c05160e0516101005161012051615a86620004116000396000818161061101528181612fb5015261481f01526000818161031701528181610dde015281816144f901526146e5015260008181610557015281816146a901526147a901526000818161034b0152818161387d015261392d01526000818161047301528181611bfe0152818161274f0152818161280d0152818161366a01526137dd015260008181610665015281816109d801528181610b0301528181610bd501528181610cdd01528181610e6501528181610fe30152818161114e0152818161120e0152818161132e015281816114510152818161162b01528181611708015281816117e0015281816119e501528181611b1201528181611d9501528181611ed5015281816120040152818161216801528181612290015281816123c601528181612568015281816126390152818161266f0152818161293d01528181612a2101528181612a8a01528181612bde01528181612d2601528181612e6801528181612ec2015281816130a10152818161311b015281816131b401528181613341015281816134c10152818161358a0152818161372f01528181613a1a01528181613b2e01528181613dbb015281816142200152818161432801528181614492015281816148e7015281816149e801528181614aae0152614d8f0152615a866000f3fe6080604052600436106102695760003560e01c8063860aefcf11610153578063c7de38a6116100cb578063dfd594651161007f578063eb9606df11610064578063eb9606df1461081e578063f9eaee0d1461083e578063ffd9b9071461085e57600080fd5b8063dfd59465146107de578063e1f21c67146107fe57600080fd5b8063cff0ab96116100b0578063cff0ab96146106ef578063d9ccbec114610783578063dcf65482146107be57600080fd5b8063c7de38a6146106a7578063caa5c23f146106dc57600080fd5b80639c55a05411610122578063b55bb84b11610107578063b55bb84b14610633578063c12c21c014610653578063c690908a1461068757600080fd5b80639c55a054146105df578063b1836d32146105ff57600080fd5b8063860aefcf146104db5780639408b63f146105455780639b67ab30146105795780639be0536a146105bd57600080fd5b80635d91a0e0116101e65780636d19b486116101b55780637071b7c51161019a5780637071b7c51461049557806379c0ef91146104a857806382871ace146104c857600080fd5b80636d19b486146104415780636f307dc31461046157600080fd5b80635d91a0e0146103e85780635f73fbec146103fb578063601d66f61461040e5780636c8f225d1461042e57600080fd5b80633d9287fa1161023d5780635019e20a116102225780635019e20a1461039257806354fd4d50146103b257806359781034146103d557600080fd5b80633d9287fa146103055780634f0e0ef31461033957600080fd5b8062842b571461026e578063256ac915146102905780632a7ba1f7146102c55780632b7c7b11146102e5575b600080fd5b34801561027a57600080fd5b5061028e6102893660046151bf565b61087e565b005b34801561029c57600080fd5b506102b06102ab3660046151f8565b61098e565b60405190151581526020015b60405180910390f35b3480156102d157600080fd5b5061028e6102e0366004615215565b610a61565b3480156102f157600080fd5b5061028e610300366004615215565b610c3b565b34801561031157600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561034557600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102bc565b34801561039e57600080fd5b5061028e6103ad3660046151f8565b610d6a565b3480156103be57600080fd5b506103c7600281565b6040519081526020016102bc565b61028e6103e336600461522e565b61108c565b61028e6103f63660046152bb565b611275565b61028e610409366004615340565b611589565b34801561041a57600080fd5b5061028e6104293660046153d8565b6117de565b61028e61043c36600461541b565b611900565b34801561044d57600080fd5b506102b061045c3660046151f8565b611c31565b34801561046d57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b61028e6104a336600461546e565b611c60565b3480156104b457600080fd5b5061036d6104c3366004615215565b611f3e565b61028e6104d63660046152bb565b611f4b565b3480156104e757600080fd5b5060025461051c906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041682565b604080516fffffffffffffffffffffffffffffffff9384168152929091166020830152016102bc565b34801561055157600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561058557600080fd5b506004546040805167ffffffffffffffff608084901c1681526fffffffffffffffffffffffffffffffff9092166020830152016102bc565b3480156105c957600080fd5b506105d261227d565b6040516102bc91906154e2565b3480156105eb57600080fd5b5061028e6105fa36600461553c565b61228e565b34801561060b57600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561063f57600080fd5b5061028e61064e3660046151f8565b6123c4565b34801561065f57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561069357600080fd5b5061028e6106a23660046151f8565b6124c6565b3480156106b357600080fd5b506106c76106c23660046151f8565b612668565b604080519283526020830191909152016102bc565b61028e6106ea366004615557565b61289b565b3480156106fb57600080fd5b5060015461074e906fffffffffffffffffffffffffffffffff811690700100000000000000000000000000000000810460ff169071010000000000000000000000000000000000900464ffffffffff1683565b604080516fffffffffffffffffffffffffffffffff9094168452911515602084015264ffffffffff16908201526060016102bc565b34801561078f57600080fd5b506102b061079e366004615599565b600360209081526000928352604080842090915290825290205460ff1681565b3480156107ca57600080fd5b5061028e6107d93660046151f8565b612a88565b3480156107ea57600080fd5b506103c76107f93660046151f8565b612b86565b34801561080a57600080fd5b5061028e61081936600461522e565b612c6d565b34801561082a57600080fd5b5061028e6108393660046155c7565b612ec0565b34801561084a57600080fd5b506102b06108593660046151f8565b613057565b34801561086a57600080fd5b5061028e6108793660046155ee565b6131b2565b600260005414156108f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b6002600090815573ffffffffffffffffffffffffffffffffffffffff8316808252600360209081526040808420338086529083529381902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081527f9b3258bc4904fd6426b99843e206c6c7cdb1fd0f040121c25b71dafbb3851ee0910160405180910390a350506001600055565b6040517f055ee9b500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063055ee9b590602401602060405180830381865afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a43919061560b565b73ffffffffffffffffffffffffffffffffffffffff16141592915050565b60026000541415610ace576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610b5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b83919061560b565b9050610b903382846132eb565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906395373018906024015b600060405180830381600087803b158015610c1a57600080fd5b505af1158015610c2e573d6000803e3d6000fd5b5050600160005550505050565b60026000541415610ca8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610d39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5d919061560b565b9050610b90338284613411565b60026000541415610dd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000557f000000000000000000000000000000000000000000000000000000000000000015610e34576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610ec1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee5919061560b565b33600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915290205490915060ff16610f52576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f5d82613583565b5090508015610f98576040517ff713841e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b15801561102757600080fd5b505af115801561103b573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692503391507f93c70cc9715bef0d83edf2095f3595402279d274f402a73ffc17f1bcb19d863d90600090a35050600160005550565b600260005414156110f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611106613875565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063e958b70490602401602060405180830381865afa158015611197573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bb919061560b565b90506111c9848285856139b7565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401600060405180830381600087803b15801561125257600080fd5b505af1158015611266573d6000803e3d6000fd5b50506001600055505050505050565b600260005414156112e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611375573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611399919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166113e8576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806113f483613583565b915091508161142f576040517f1fdd676f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611437613875565b831561144d5761144d85858b8660016000613ae3565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632362a2d88b600185338e8e8e6040518863ffffffff1660e01b81526004016114b59796959493929190615663565b6020604051808303816000875af11580156114d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f891906156bf565b90508873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f7dfecd8419723a9d3954585a30c2a270165d70aafa146c11c1e1b88ae14390648460405161157091815260200190565b60405180910390a4505060016000555050505050505050565b600260005414156115f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ab919061560b565b90506116b5613875565b81156116cb576116cb8383338460016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d89061174a903390600090819083908d908d908d90600401615663565b6020604051808303816000875af1158015611769573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178d91906156bf565b5060405173ffffffffffffffffffffffffffffffffffffffff87169033907f460ad03b1cf79b1d64d3aefa28475f110ab66e84649c52bb41ed796b9b39198190600090a35050600160005550505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611849573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118d1576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff90811670010000000000000000000000000000000002911617600255565b6002600054141561196d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000908155606461198461ffff851687615707565b61198e9190615744565b9050611999816144f7565b6119a2816145e8565b6119ab84614668565b6119b3613875565b6040517f172c48c7000000000000000000000000000000000000000000000000000000008152600060048201819052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a64919061577f565b61ffff169150611a789050816127106157ae565b611a829083615707565b611a8c8288615707565b11611ac3576040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff86811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611b5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b81919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638587604051611bef92919091825261ffff16602082015260400190565b60405180910390a3611c2386827f00000000000000000000000000000000000000000000000000000000000000008a6139b7565b505060016000555050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526006602052604081205415155b92915050565b60026000541415611ccd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611cdb856144f7565b611ce484614668565b611ced856145e8565b600154700100000000000000000000000000000000900460ff1615611d3e576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d46613875565b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff85811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611de0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e04919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638885604051611e7292919091825261ffff16602082015260400190565b60405180910390a38215611e9057611e908484878460006001613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015611f1957600080fd5b505af1158015611f2d573d6000803e3d6000fd5b505060016000555050505050505050565b6000611c5a60058361480f565b60026000541415611fb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa15801561204b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206f919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166120be576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120c661481b565b6120fc576040517f7e52ccb400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061210782612668565b509050612112613875565b82156121285761212884848a8560016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d8906121aa908c90600290879033908f908f908f90600401615663565b6020604051808303816000875af11580156121c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ed91906156bf565b90508773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167ffada13ff2d5e1a1d9da37ad4a4130893b34e3c69c32b17f87ec31fd661b867078460405161226591815260200190565b60405180910390a45050600160005550505050505050565b6060612289600561486b565b905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612381576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561242f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612453919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146124b7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614878565b5050565b60026000541415612533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156125c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e8919061560b565b90506125f4818361489a565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401610c00565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126fc919061560b565b905060008061270b8387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156127a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127c991906156bf565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015291965061271091851690637afb010490604401602060405180830381865afa158015612863573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061288791906156bf565b6128919190615744565b9350505050915091565b60026000541415612908576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129bd919061560b565b90506129c7613875565b8115612a7e576129dc83833384600080613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015612a6557600080fd5b505af1158015612a79573d6000803e3d6000fd5b505050505b5050600160005550565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612af3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b17919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b7b576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614c92565b600080612b9283612668565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152919350600092507f000000000000000000000000000000000000000000000000000000000000000090911690633192195c906024016040805180830381865afa158015612c26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4a91906157c5565b9150819050612c5b61271084615707565b612c659190615744565b949350505050565b60026000541415612cda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063fdd5764590602401602060405180830381865afa158015612d6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d91919061560b565b73ffffffffffffffffffffffffffffffffffffffff161480612dd7575073ffffffffffffffffffffffffffffffffffffffff831660009081526006602052604090205415155b15612e0e576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612eac57600080fd5b505af1158015611c23573d6000803e3d6000fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f4f919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612fb3576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000061300a576040517f50dd11fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805464ffffffffff90921671010000000000000000000000000000000000027fffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffffff909216919091179055565b6040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063f67c5bd090602401602060405180830381865afa1580156130e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061310c91906156bf565b905080158015906131ab5750807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015613184573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a891906156bf565b16155b9392505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561321d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613241919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146132a5576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018054911515700100000000000000000000000000000000027fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff909216919091179055565b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600060448301819052917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561338c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133b091906156bf565b90506133bb816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f98274bf834d179ee08dc0604071b0dc90b54731bd5f725a5a96a39a86bce025a8360405161340391815260200190565b60405180910390a250505050565b61341a816144f7565b600154700100000000000000000000000000000000900460ff161561346b576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600160448301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561350c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061353091906156bf565b905061353b816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f9cac51154cc0d835e2f9c9d1f59a9344588cee107f4203bf58a8c797e3a58c458360405161340391815260200190565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613617919061560b565b90506000806136268387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156136c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136e491906156bf565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529195506000917f00000000000000000000000000000000000000000000000000000000000000001690633192195c906024016040805180830381865afa158015613775573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061379991906157c5565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350600092506127109187169063f9a6503090604401602060405180830381865afa158015613837573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061385b91906156bf565b6138659190615707565b9092109794965093945050505050565b34156139b5577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156138e357600080fd5b505af11580156138f7573d6000803e3d6000fd5b50506040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201523460248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16935063a9059cbb925060440190506020604051808303816000875af115801561398f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139b391906157e9565b505b565b6139c084614cb4565b6040517f830aa74500000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f0000000000000000000000000000000000000000000000000000000000000000169063830aa74590608401600060405180830381600087803b158015613a5e57600080fd5b505af1158015613a72573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fa32435755c235de2976ed44a75a2f85cb01faf0c894f639fe0c32bb9455fea8f83604051613ad591815260200190565b60405180910390a350505050565b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301523060248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b158015613b7257600080fd5b505af1158015613b86573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff871692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a28460005b8181101561441d5736888883818110613bea57613bea615806565b9050602002810190613bfc9190615835565b90506004613c0d6020830183615873565b90501015613c47576040517fe2b0e50600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b30613c5560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16141561421c578415613ca9576040517f5fb9107f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613cb86020830183615873565b613cc1916158d8565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167f59781034000000000000000000000000000000000000000000000000000000001415613e3c5760008080613d1e6020860186615873565b613d2c916004908290615920565b810190613d39919061522e565b925092509250613e34838c73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614613e2b576040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015613e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e26919061560b565b613e2d565b8b5b84846139b7565b505050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2b7c7b11000000000000000000000000000000000000000000000000000000001415613ec757600194506000613e996020840184615873565b613ea7916004908290615920565b810190613eb49190615215565b9050613ec1898983613411565b50614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2a7ba1f7000000000000000000000000000000000000000000000000000000001415613f80578415613f49576040517fc0b0caa800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613f586020840184615873565b613f66916004908290615920565b810190613f739190615215565b9050613ec18989836132eb565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f233a8caa0000000000000000000000000000000000000000000000000000000014156140e457600080613fda6020850185615873565b613fe8916004908290615920565b810190613ff5919061594a565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c8116600483015292945090925082918416906370a0823190602401602060405180830381865afa158015614069573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061408d91906156bf565b10156140dd576040517fa5ac537300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016108e7565b5050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fc690908a00000000000000000000000000000000000000000000000000000000141561416457600061413d6020840184615873565b61414b916004908290615920565b81019061415891906151f8565b9050613ec1888261489a565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f23e27a640000000000000000000000000000000000000000000000000000000014156141e45760006141bd6020840184615873565b6141cb916004908290615920565b8101906141d891906151f8565b9050613ec18882614d42565b6040517f1e9e7e7a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50614414565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff68754361426760208501856151f8565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156142d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142f4919061560b565b73ffffffffffffffffffffffffffffffffffffffff16148061436d575073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001661435560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16145b156143a4576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6144126143b46020830183615873565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506143f69250505060208401846151f8565b73ffffffffffffffffffffffffffffffffffffffff1690614e39565b505b50600101613bcf565b506040517f60c8e8938c9a0c0d88a98d6f1c562ce68077e12bf3edb8047378f2f736cb45b490600090a16040517fe1998cf900000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff86811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b1580156144d657600080fd5b505af11580156144ea573d6000803e3d6000fd5b5050505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006139b3576001546fffffffffffffffffffffffffffffffff9081169081146124c257600454608081901c906fffffffffffffffffffffffffffffffff16600067ffffffffffffffff8316431461456e578461458a565b61458a6fffffffffffffffffffffffffffffffff831686615976565b9050838111156145c6576040517f675f1a5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff81164360801b176004555050505050565b6002546fffffffffffffffffffffffffffffffff16811080614631575060025470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681115b156139b3576040517fce16799400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61467061481b565b156146a7576040517f63fc31c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1615614806577f0000000000000000000000000000000000000000000000000000000000000000801561472657503373ffffffffffffffffffffffffffffffffffffffff821614155b1561475d576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600160248301527f00000000000000000000000000000000000000000000000000000000000000001690639dc29fac90604401600060405180830381600087803b1580156147ed57600080fd5b505af1158015614801573d6000803e3d6000fd5b505050505b6139b381614cb4565b60006131ab8383614e7b565b60007f0000000000000000000000000000000000000000000000000000000000000000801561228957505060015471010000000000000000000000000000000000900464ffffffffff1642101590565b606060006131ab83614ea5565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f01565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561492b57600080fd5b505af115801561493f573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527fdf498aa1c340e992665d6fb4f3be8436d452c45a630cb6d7fab7963da39bac8793500190505b60405180910390a15050565b6040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600091829160019183917f00000000000000000000000000000000000000000000000000000000000000001690638991b2f190602401602060405180830381865afa158015614a2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a5391906156bf565b90505b808211614c895780821615614c7d576040517fe75538c700000000000000000000000000000000000000000000000000000000815260048101839052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e75538c7906024016040805180830381865afa158015614af4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b18919061577f565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529294509092506000918416906370a0823190602401602060405180830381865afa158015614b8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bb191906156bf565b90506001811115614c79576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff8481166024830152600091908b169063f9a6503090604401602060405180830381865afa158015614c33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c5791906156bf565b978801979050614c6b61ffff841682615707565b614c759088615976565b9650505b5050505b600182901b9150614a56565b50509250929050565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f50565b3373ffffffffffffffffffffffffffffffffffffffff821614801590614d0b575033600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16155b156139b3576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b158015614dd357600080fd5b505af1158015614de7573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527f69db9e9764da61b6681b89fb0f5be018506e0342036e56b59c3015a620d60977935001905061498d565b60606131ab83836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250615043565b6000826000018281548110614e9257614e92615806565b9060005260206000200154905092915050565b606081600001805480602002602001604051908101604052809291908181526020018280548015614ef557602002820191906000526020600020905b815481526020019060010190808311614ee1575b50505050509050919050565b6000818152600183016020526040812054614f4857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611c5a565b506000611c5a565b60008181526001830160205260408120548015615039576000614f746001836157ae565b8554909150600090614f88906001906157ae565b9050818114614fed576000866000018281548110614fa857614fa8615806565b9060005260206000200154905080876000018481548110614fcb57614fcb615806565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080614ffe57614ffe61598e565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611c5a565b6000915050611c5a565b6060612c65848460008585843b6150b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108e7565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516150df91906159ed565b60006040518083038185875af1925050503d806000811461511c576040519150601f19603f3d011682016040523d82523d6000602084013e615121565b606091505b509150915061513182828661513c565b979650505050505050565b6060831561514b5750816131ab565b82511561515b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e791906159ff565b73ffffffffffffffffffffffffffffffffffffffff811681146139b357600080fd5b80151581146139b357600080fd5b600080604083850312156151d257600080fd5b82356151dd8161518f565b915060208301356151ed816151b1565b809150509250929050565b60006020828403121561520a57600080fd5b81356131ab8161518f565b60006020828403121561522757600080fd5b5035919050565b60008060006060848603121561524357600080fd5b833561524e8161518f565b9250602084013561525e8161518f565b929592945050506040919091013590565b60008083601f84011261528157600080fd5b50813567ffffffffffffffff81111561529957600080fd5b6020830191508360208260051b85010111156152b457600080fd5b9250929050565b60008060008060008060a087890312156152d457600080fd5b86356152df8161518f565b955060208701356152ef8161518f565b9450604087013593506060870135615306816151b1565b9250608087013567ffffffffffffffff81111561532257600080fd5b61532e89828a0161526f565b979a9699509497509295939492505050565b60008060008060006080868803121561535857600080fd5b85356153638161518f565b945060208601359350604086013561537a816151b1565b9250606086013567ffffffffffffffff81111561539657600080fd5b6153a28882890161526f565b969995985093965092949392505050565b80356fffffffffffffffffffffffffffffffff811681146153d357600080fd5b919050565b600080604083850312156153eb57600080fd5b6153f4836153b3565b9150615402602084016153b3565b90509250929050565b61ffff811681146139b357600080fd5b6000806000806080858703121561543157600080fd5b8435935060208501356154438161518f565b925060408501356154538161540b565b915060608501356154638161540b565b939692955090935050565b60008060008060006080868803121561548657600080fd5b8535945060208601356154988161518f565b9350604086013567ffffffffffffffff8111156154b457600080fd5b6154c08882890161526f565b90945092505060608601356154d48161540b565b809150509295509295909350565b6020808252825182820181905260009190848201906040850190845b8181101561553057835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016154fe565b50909695505050505050565b60006020828403121561554e57600080fd5b6131ab826153b3565b6000806020838503121561556a57600080fd5b823567ffffffffffffffff81111561558157600080fd5b61558d8582860161526f565b90969095509350505050565b600080604083850312156155ac57600080fd5b82356155b78161518f565b915060208301356151ed8161518f565b6000602082840312156155d957600080fd5b813564ffffffffff811681146131ab57600080fd5b60006020828403121561560057600080fd5b81356131ab816151b1565b60006020828403121561561d57600080fd5b81516131ab8161518f565b6003811061565f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b73ffffffffffffffffffffffffffffffffffffffff888116825260e082019061568f602084018a615628565b6040830197909752948616606082015292909416608083015260a082015291151560c09092019190915292915050565b6000602082840312156156d157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561573f5761573f6156d8565b500290565b60008261577a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000806040838503121561579257600080fd5b825161579d8161518f565b60208401519092506151ed8161540b565b6000828210156157c0576157c06156d8565b500390565b600080604083850312156157d857600080fd5b505080516020909101519092909150565b6000602082840312156157fb57600080fd5b81516131ab816151b1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc183360301811261586957600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126158a857600080fd5b83018035915067ffffffffffffffff8211156158c357600080fd5b6020019150368190038213156152b457600080fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156159185780818660040360031b1b83161692505b505092915050565b6000808585111561593057600080fd5b8386111561593d57600080fd5b5050820193919092039150565b6000806040838503121561595d57600080fd5b82356159688161518f565b946020939093013593505050565b60008219821115615989576159896156d8565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60005b838110156159d85781810151838201526020016159c0565b838111156159e7576000848401525b50505050565b600082516158698184602087016159bd565b6020815260008251806020840152615a1e8160408501602087016159bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea2646970667358221220a3f4a705ab580a6ada1e438cd2ee4abc001b62d1d171fce12c41994900fef21664736f6c634300080a003360c06040523480156200001157600080fd5b50604051620026cf380380620026cf833981016040819052620000349162000324565b82828281600090805190602001906200004f92919062000194565b5080516200006590600190602084019062000194565b50506006805460ff19169055506001600160a01b0381166200009a57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000d9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ff9190620003a1565b6001600160a01b03166080816001600160a01b03168152505050826001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000158573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200017e9190620003a1565b6001600160a01b031660a0525062000403915050565b828054620001a290620003c6565b90600052602060002090601f016020900481019282620001c6576000855562000211565b82601f10620001e157805160ff191683800117855562000211565b8280016001018555821562000211579182015b8281111562000211578251825591602001919060010190620001f4565b506200021f92915062000223565b5090565b5b808211156200021f576000815560010162000224565b80516001600160a01b03811681146200025257600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200027f57600080fd5b81516001600160401b03808211156200029c576200029c62000257565b604051601f8301601f19908116603f01168101908282118183101715620002c757620002c762000257565b81604052838152602092508683858801011115620002e457600080fd5b600091505b83821015620003085785820183015181830184015290820190620002e9565b838211156200031a5760008385830101525b9695505050505050565b6000806000606084860312156200033a57600080fd5b62000345846200023a565b60208501519093506001600160401b03808211156200036357600080fd5b62000371878388016200026d565b935060408601519150808211156200038857600080fd5b5062000397868287016200026d565b9150509250925092565b600060208284031215620003b457600080fd5b620003bf826200023a565b9392505050565b600181811c90821680620003db57607f821691505b60208210811415620003fd57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a0516122756200045a6000396000610a9a015260008181610386015281816106db0152818161089101528181610f15015281816110010152818161115b015281816112f401526114f901526122756000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80636352211e116100f9578063a0bcfc7f11610097578063b88d4fde11610071578063b88d4fde146103a8578063c87b56dd146103b6578063e985e9c5146103c9578063fca3b5aa1461041257600080fd5b8063a0bcfc7f14610360578063a22cb46514610373578063a50cf2c81461038157600080fd5b80638456cb59116100d35780638456cb591461032a57806389406ff51461033257806395d89b41146103455780639dc29fac1461034d57600080fd5b80636352211e146102fc5780636c0360eb1461030f57806370a082311461031757600080fd5b80633f4ba83a116101665780634610f6ac116101405780634610f6ac146102b357806354fd4d50146102c6578063576cd2d1146102ce5780635c975abb146102f157600080fd5b80633f4ba83a1461029857806340c10f19146102a057806342842e0e1461028a57600080fd5b8063081812fc116101a2578063081812fc1461024b578063095ea7b31461025e57806318160ddd1461027357806323b872dd1461028a57600080fd5b806301ffc9a7146101c957806306fdde03146101f15780630754617214610206575b600080fd5b6101dc6101d7366004611cc6565b610425565b60405190151581526020015b60405180910390f35b6101f961050a565b6040516101e89190611d38565b6008546102269073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e8565b610226610259366004611d89565b61059c565b61027161026c366004611dc7565b61067b565b005b61027c60075481565b6040519081526020016101e8565b61027161026c366004611df3565b6102716106ad565b6102716102ae366004611dc7565b61079b565b6102716102c1366004611e34565b610863565b61027c600181565b6101dc6102dc366004611e34565b60096020526000908152604090205460ff1681565b60065460ff166101dc565b61022661030a366004611d89565b610cd9565b6101f9610d8b565b61027c610325366004611e34565b610e19565b610271610ee7565b610271610340366004611e34565b610fd3565b6101f9611103565b61027161035b366004611dc7565b611112565b61027161036e366004611e51565b6112c6565b61027161026c366004611ed1565b6102267f000000000000000000000000000000000000000000000000000000000000000081565b61027161026c366004611f39565b6101f96103c4366004611d89565b6113bb565b6101dc6103d7366004612037565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205460ff1690565b610271610420366004611e34565b6114cb565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd0000000000000000000000000000000000000000000000000000000014806104b857507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061050457507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60606000805461051990612065565b80601f016020809104026020016040519081016040528092919081815260200182805461054590612065565b80156105925780601f1061056757610100808354040283529160200191610592565b820191906000526020600020905b81548152906001019060200180831161057557829003601f168201915b5050505050905090565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff16610652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084015b60405180910390fd5b5060009081526004602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b6040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa158015610737573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075b91906120b9565b610791576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107996115f6565b565b60085473ffffffffffffffffffffffffffffffffffffffff1633146107ec576040517f5c2967f500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006107f783610e19565b905060005b82811015610846576000816108278473ffffffffffffffffffffffffffffffffffffffff8816612105565b6108319190612105565b905061083d85826116d7565b506001016107fc565b5081600760008282546108599190612105565b9091555050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156108ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091191906120b9565b610947576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163b610995576040517f9c01f6a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff1663c12c21c06040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610a1c575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610a199181019061211d565b60015b610a52576040517f9c01f6a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f6fbc6f6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192507f000000000000000000000000000000000000000000000000000000000000000090911690636fbc6f6b90602401602060405180830381865afa158015610ae3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0791906120b9565b1580610bad57503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16639408b63f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b94919061211d565b73ffffffffffffffffffffffffffffffffffffffff1614155b80610c5257508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c39919061211d565b73ffffffffffffffffffffffffffffffffffffffff1614155b15610c89576040517f9c01f6a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff16600090815260096020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff1680610504576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e00000000000000000000000000000000000000000000006064820152608401610649565b600a8054610d9890612065565b80601f0160208091040260200160405190810160405280929190818152602001828054610dc490612065565b8015610e115780601f10610de657610100808354040283529160200191610e11565b820191906000526020600020905b815481529060010190602001808311610df457829003601f168201915b505050505081565b600073ffffffffffffffffffffffffffffffffffffffff8216610ebe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152608401610649565b5073ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015610f71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9591906120b9565b610fcb576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610799611899565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561105d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108191906120b9565b6110b7576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff16600090815260096020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b60606001805461051990612065565b3360009081526009602052604090205460ff161580156111dd57506040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156111b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111db91906120b9565b155b15611214576040517f1e0d048500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061121f83610e19565b90508181101561125b576040517f90c9142d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b828110156112b357600060018261128b8573ffffffffffffffffffffffffffffffffffffffff8916612105565b611295919061213a565b61129f919061213a565b90506112aa81611959565b5060010161125e565b508160076000828254610859919061213a565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611350573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137491906120b9565b6113aa576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113b6600a8383611c0f565b505050565b60008181526002602052604090205460609073ffffffffffffffffffffffffffffffffffffffff1661146f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006064820152608401610649565b6000611479611a26565b9050600081511161149957604051806020016040528060008152506114c4565b806114a384611a35565b6040516020016114b4929190612151565b6040516020818303038152906040525b9392505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611555573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157991906120b9565b6115af576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60065460ff16611662576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610649565b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b73ffffffffffffffffffffffffffffffffffffffff8216611754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610649565b60008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff16156117e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610649565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805460019290611816908490612105565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60065460ff1615611906576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610649565b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586116ad3390565b600061196482610cd9565b9050611971600083611b6f565b73ffffffffffffffffffffffffffffffffffffffff811660009081526003602052604081208054600192906119a790849061213a565b909155505060008281526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555183919073ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6060600a805461051990612065565b606081611a7557505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611a9f5780611a8981612180565b9150611a989050600a836121e8565b9150611a79565b60008167ffffffffffffffff811115611aba57611aba611f0a565b6040519080825280601f01601f191660200182016040528015611ae4576020820181803683370190505b5090505b8415611b6757611af960018361213a565b9150611b06600a866121fc565b611b11906030612105565b60f81b818381518110611b2657611b26612210565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611b60600a866121e8565b9450611ae8565b949350505050565b600081815260046020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091558190611bc982610cd9565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b828054611c1b90612065565b90600052602060002090601f016020900481019282611c3d5760008555611ca1565b82601f10611c74578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00823516178555611ca1565b82800160010185558215611ca1579182015b82811115611ca1578235825591602001919060010190611c86565b50611cad929150611cb1565b5090565b5b80821115611cad5760008155600101611cb2565b600060208284031215611cd857600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146114c457600080fd5b60005b83811015611d23578181015183820152602001611d0b565b83811115611d32576000848401525b50505050565b6020815260008251806020840152611d57816040850160208701611d08565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b600060208284031215611d9b57600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff81168114611dc457600080fd5b50565b60008060408385031215611dda57600080fd5b8235611de581611da2565b946020939093013593505050565b600080600060608486031215611e0857600080fd5b8335611e1381611da2565b92506020840135611e2381611da2565b929592945050506040919091013590565b600060208284031215611e4657600080fd5b81356114c481611da2565b60008060208385031215611e6457600080fd5b823567ffffffffffffffff80821115611e7c57600080fd5b818501915085601f830112611e9057600080fd5b813581811115611e9f57600080fd5b866020828501011115611eb157600080fd5b60209290920196919550909350505050565b8015158114611dc457600080fd5b60008060408385031215611ee457600080fd5b8235611eef81611da2565b91506020830135611eff81611ec3565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060008060808587031215611f4f57600080fd5b8435611f5a81611da2565b93506020850135611f6a81611da2565b925060408501359150606085013567ffffffffffffffff80821115611f8e57600080fd5b818701915087601f830112611fa257600080fd5b813581811115611fb457611fb4611f0a565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715611ffa57611ffa611f0a565b816040528281528a602084870101111561201357600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000806040838503121561204a57600080fd5b823561205581611da2565b91506020830135611eff81611da2565b600181811c9082168061207957607f821691505b602082108114156120b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156120cb57600080fd5b81516114c481611ec3565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115612118576121186120d6565b500190565b60006020828403121561212f57600080fd5b81516114c481611da2565b60008282101561214c5761214c6120d6565b500390565b60008351612163818460208801611d08565b835190830190612177818360208801611d08565b01949350505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156121b2576121b26120d6565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826121f7576121f76121b9565b500490565b60008261220b5761220b6121b9565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea2646970667358221220ffdd83a2fc9a158347ca248f021e63fcef3a7985b3deb793f75cd1835b068aab64736f6c634300080a003360a060405234801561001057600080fd5b506040516106ca3803806106ca83398101604081905261002f9161006c565b60009190915560ff166080526001805460506001600160501b031991821681179092556004805490911690911790554260028190556003556100a2565b6000806040838503121561007f57600080fd5b82519150602083015160ff8116811461009757600080fd5b809150509250929050565b60805161060e6100bc600039600060d3015261060e6000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80639a6fc8f511610081578063d62ada111161005b578063d62ada11146102dc578063f7a30806146102f4578063feaf968c1461030757600080fd5b80639a6fc8f5146101cd578063bd18ad531461023a578063cd653afc1461024d57600080fd5b806354fd4d50116100b257806354fd4d501461012d57806367e8d83d1461013c5780637284e4161461018e57600080fd5b8063313ce567146100ce5780633fd0875f1461010c575b600080fd5b6100f57f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020015b60405180910390f35b6004546a0100000000000000000000900460ff166040516101039190610441565b60405160018152602001610103565b61018c61014a366004610482565b600480549115156c01000000000000000000000000027fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff909216919091179055565b005b604080518082018252600c81527f7072696365206f7261636c6500000000000000000000000000000000000000006020820152905161010391906104ab565b6102036101db36600461053d565b60015460005460025460035460045469ffffffffffffffffffff948516941691939590929450565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610103565b61018c610248366004610558565b61030f565b61018c61025b366004610579565b6001805469ffffffffffffffffffff9586167fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090911617905560029290925560035560048054919092167fffffffffffffffffffffffffffffffffffffffff00ff00000000000000000000909116176b020000000000000000000000179055565b6102e461035f565b6040519015158152602001610103565b61018c6103023660046105bf565b600055565b610203610385565b600480548291907fffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff166b01000000000000000000000083600281111561035757610357610412565b021790555050565b600454600090610380906b010000000000000000000000900460ff166103d6565b905090565b60008060008060006004600c9054906101000a900460ff16156103a757600080fd5b505060015460005460025460035460045469ffffffffffffffffffff9485169893975091955093509190911690565b600060028260028111156103ec576103ec610412565b14156103f757600080fd5b600182600281111561040b5761040b610412565b1492915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016006831061047c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561049457600080fd5b813580151581146104a457600080fd5b9392505050565b600060208083528351808285015260005b818110156104d8578581018301518582016040015282016104bc565b818111156104ea576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803569ffffffffffffffffffff8116811461053857600080fd5b919050565b60006020828403121561054f57600080fd5b6104a48261051e565b60006020828403121561056a57600080fd5b8135600381106104a457600080fd5b6000806000806080858703121561058f57600080fd5b6105988561051e565b935060208501359250604085013591506105b46060860161051e565b905092959194509250565b6000602082840312156105d157600080fd5b503591905056fea264697066735822122014874f7a973b86501c4c1a8be32490fe902c8f088ee234d25f9b2497e19f9e5264736f6c634300080a0033a2646970667358221220d8fdaadc825c43ac2783715ebcfe33e7b0ce3a396ac7717d65e4c95e98b6cf7f64736f6c634300080a003360806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d000117905534801561003957600080fd5b50600054604080516318caf8e360e31b815273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660048083019190915260248201929092526044810191909152632aa9a2a960e11b6064820152620100009091046001600160a01b03169063c657c71890608401600060405180830381600087803b1580156100ba57600080fd5b505af11580156100ce573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b81527390f79bf6eb2c4f870365e785982e1f101e93b90660048201526024810191909152600660448201526511949251539160d21b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561014f57600080fd5b505af1158015610163573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b8152733c44cdddb6a900fa2b585dd299e03d12fa4293bc60048201526024810191909152600a6044820152692624a8aaa4a220aa27a960b11b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b1580156101e857600080fd5b505af11580156101fc573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b815273c4375b7de8af5a38a93548eb8453a498222c4ff260048201526024810191909152600c60448201526b44554d425f4144445245535360a01b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561028357600080fd5b505af1158015610297573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b8152739965507d1a55bcc2695c58ba16fb37d819b0a4dc60048201526024810191909152600760448201526620a220a82a22a960c91b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561031957600080fd5b505af115801561032d573d6000803e3d6000fd5b505050506102a6806103406000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063ba414fa61461003b578063fa7626d414610057575b600080fd5b610043610064565b604051901515815260200160405180910390f35b6000546100439060ff1681565b60008054610100900460ff16156100845750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156101bf5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610129917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016101ff565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526101619161023b565b6000604051808303816000865af19150503d806000811461019e576040519150601f19603f3d011682016040523d82523d6000602084013e6101a3565b606091505b50915050808060200190518101906101bb919061024e565b9150505b919050565b6000815160005b818110156101e557602081850181015186830152016101cb565b818111156101f4576000828601525b509290920192915050565b7fffffffff0000000000000000000000000000000000000000000000000000000083168152600061023360048301846101c4565b949350505050565b600061024782846101c4565b9392505050565b60006020828403121561026057600080fd5b8151801515811461024757600080fdfea2646970667358221220293f55a0ef7b60c31a89dbc50e3339c80a8fdb1f9567614b200e97598226671f64736f6c634300080a003360806040523480156200001157600080fd5b506040516201110538038062011105833981016040819052620000349162000811565b6200003f3362000734565b6040516200004d9062000784565b604051809103906000f0801580156200006a573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b039283169081179091556040516310dc138160e31b81529184166004830152906386e09c0890602401600060405180830381600087803b158015620000c457600080fd5b505af1158015620000d9573d6000803e3d6000fd5b50506001546040516301ed651160e41b81526001600160a01b0385811660048301529091169250631ed651109150602401600060405180830381600087803b1580156200012557600080fd5b505af11580156200013a573d6000803e3d6000fd5b505050506040516200014c9062000792565b604051809103906000f08015801562000169573d6000803e3d6000fd5b50600280546001600160a01b0319166001600160a01b039283169081179091556001546040516376aad60560e01b81526004810192909252909116906376aad60590602401600060405180830381600087803b158015620001c957600080fd5b505af1158015620001de573d6000803e3d6000fd5b5050600154604051600093506001600160a01b0390911691506200020290620007a0565b6001600160a01b039091168152602001604051809103906000f0801580156200022f573d6000803e3d6000fd5b5060015460405163338f12b960e21b81526001600160a01b03808416600483015292935091169063ce3c4ae490602401600060405180830381600087803b1580156200027a57600080fd5b505af11580156200028f573d6000803e3d6000fd5b5050600154604051600093506001600160a01b039091169150620002b390620007ae565b6001600160a01b039091168152602001604051809103906000f080158015620002e0573d6000803e3d6000fd5b5060015460405163c5120b3960e01b81526001600160a01b03808416600483015292935091169063c5120b3990602401600060405180830381600087803b1580156200032b57600080fd5b505af115801562000340573d6000803e3d6000fd5b5050600154604051606093506001600160a01b03909116915082906200036690620007bc565b6200037392919062000849565b604051809103906000f08015801562000390573d6000803e3d6000fd5b50600380546001600160a01b0319166001600160a01b0392831690811790915560015460405163530e784f60e01b815260048101929092529091169063530e784f90602401600060405180830381600087803b158015620003f057600080fd5b505af115801562000405573d6000803e3d6000fd5b5050600154604051600093506001600160a01b0390911691506200042990620007ca565b6001600160a01b039091168152602001604051809103906000f08015801562000456573d6000803e3d6000fd5b506001546040516356ee0d3b60e11b81526001600160a01b03808416600483015292935091169063addc1a7690602401600060405180830381600087803b158015620004a157600080fd5b505af1158015620004b6573d6000803e3d6000fd5b5050600154604051600093506001600160a01b039091169150620004da90620007d8565b6001600160a01b039091168152602001604051809103906000f08015801562000507573d6000803e3d6000fd5b506001546040516321da583760e01b81526001600160a01b0380841660048301529293509116906321da583790602401600060405180830381600087803b1580156200055257600080fd5b505af115801562000567573d6000803e3d6000fd5b505050506000306040516200057c90620007e6565b6001600160a01b039091168152602001604051809103906000f080158015620005a9573d6000803e3d6000fd5b50600154604051631795d5b360e31b81526001600160a01b03808416600483015292935091169063bcaead9890602401600060405180830381600087803b158015620005f457600080fd5b505af115801562000609573d6000803e3d6000fd5b505060405163f2fde38b60e01b81523360048201526001600160a01b038416925063f2fde38b9150602401600060405180830381600087803b1580156200064f57600080fd5b505af115801562000664573d6000803e3d6000fd5b505060015460405163f2fde38b60e01b81523360048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b158015620006ae57600080fd5b505af1158015620006c3573d6000803e3d6000fd5b505060025460405163f2fde38b60e01b81523360048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b1580156200070d57600080fd5b505af115801562000722573d6000803e3d6000fd5b505050505050505050505050620008b2565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610fcd80620010dd83390190565b61098c80620020aa83390190565b610f508062002a3683390190565b614da6806200398683390190565b611b45806200872c83390190565b612ced806200a27183390190565b611627806200cf5e83390190565b612b80806200e58583390190565b80516001600160a01b03811681146200080c57600080fd5b919050565b600080604083850312156200082557600080fd5b6200083083620007f4565b91506200084060208401620007f4565b90509250929050565b6001600160a01b0383811682526040602080840182905284518483018190526000938683019290916060870190865b81811015620008a3578551805186168452840151851684840152948301949186019160010162000878565b50909998505050505050505050565b61081b80620008c26000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80638874ff1f1161005b5780638874ff1f146100f55780638da5cb5b14610108578063de28735914610126578063f2fde38b1461014657600080fd5b80632630c12f146100825780632954018c146100cb578063715018a6146100eb575b600080fd5b6003546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6001546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b6100f3610159565b005b6100f3610103366004610658565b6101eb565b60005473ffffffffffffffffffffffffffffffffffffffff166100a2565b6002546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b6100f3610154366004610734565b6103e3565b60005473ffffffffffffffffffffffffffffffffffffffff1633146101df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6101e96000610513565b565b60005473ffffffffffffffffffffffffffffffffffffffff16331461026c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101d6565b60005b815181101561035c57600354825173ffffffffffffffffffffffffffffffffffffffff9091169063e8a97a3e908490849081106102ae576102ae610756565b6020026020010151600001518484815181106102cc576102cc610756565b6020026020010151602001516040518363ffffffff1660e01b815260040161031792919073ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b600060405180830381600087803b15801561033157600080fd5b505af1158015610345573d6000803e3d6000fd5b50505050808061035490610785565b91505061026f565b506002546040517ff2fde38b00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063f2fde38b90602401600060405180830381600087803b1580156103c857600080fd5b505af11580156103dc573d6000803e3d6000fd5b5050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101d6565b73ffffffffffffffffffffffffffffffffffffffff8116610507576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016101d6565b61051081610513565b50565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156105da576105da610588565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561062757610627610588565b604052919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461065357600080fd5b919050565b6000602080838503121561066b57600080fd5b823567ffffffffffffffff8082111561068357600080fd5b818501915085601f83011261069757600080fd5b8135818111156106a9576106a9610588565b6106b7848260051b016105e0565b818152848101925060069190911b8301840190878211156106d757600080fd5b928401925b8184101561072957604084890312156106f55760008081fd5b6106fd6105b7565b6107068561062f565b815261071386860161062f565b81870152835260409390930192918401916106dc565b979650505050505050565b60006020828403121561074657600080fd5b61074f8261062f565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156107de577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea26469706673582212205ee75e57bb635aa49a1758f4ab0b04182a73115bff08f420c56a8ddb433c029364736f6c634300080a0033608060405234801561001057600080fd5b5061001a3361005f565b60405130906f20a2222922a9a9afa82927ab24a222a960811b907fb37614c7d254ea8d16eb81fa11dddaeb266aa8ba4917980859c7740aff30c69190600090a36100af565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610f0f806100be6000396000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c806377532ed9116100e3578063bcaead981161008c578063ce3c4ae411610066578063ce3c4ae414610308578063f2fde38b1461031b578063fca513a81461032e57600080fd5b8063bcaead98146102da578063c5120b39146102ed578063c513c9bb1461030057600080fd5b80639068a868116100bd5780639068a868146102b7578063addc1a76146102bf578063affd9243146102d257600080fd5b806377532ed91461027e57806386e09c08146102865780638da5cb5b1461029957600080fd5b80634c252f9111610145578063699f200f1161011f578063699f200f1461022d578063715018a61461026357806376aad6051461026b57600080fd5b80634c252f91146101fc578063530e784f1461020457806354fd4d501461021757600080fd5b80631ed65110116101765780631ed65110146101cc57806321da5837146101e157806326c74fc3146101f457600080fd5b8063060678c21461019257806308737695146101c4575b600080fd5b61019a610336565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61019a610366565b6101df6101da366004610e10565b610391565b005b6101df6101ef366004610e10565b610444565b61019a6104ef565b61019a61051a565b6101df610212366004610e10565b610545565b61021f600281565b6040519081526020016101bb565b61019a61023b366004610e4d565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6101df6105f0565b6101df610279366004610e10565b61067d565b61019a610728565b6101df610294366004610e10565b610753565b60005473ffffffffffffffffffffffffffffffffffffffff1661019a565b61019a6107fe565b6101df6102cd366004610e10565b610829565b61019a6108d4565b6101df6102e8366004610e10565b6108ff565b6101df6102fb366004610e10565b6109aa565b61019a610a55565b6101df610316366004610e10565b610a80565b6101df610329366004610e10565b610b2b565b61019a610c58565b60006103617f444154415f434f4d50524553534f520000000000000000000000000000000000610c7f565b905090565b60006103617f41434c0000000000000000000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610417576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6104417f54524541535552595f434f4e545241435400000000000000000000000000000082610d1d565b50565b60005473ffffffffffffffffffffffffffffffffffffffff1633146104c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f574554485f47415445574159000000000000000000000000000000000000000082610d1d565b60006103617f54524541535552595f434f4e5452414354000000000000000000000000000000610c7f565b60006103617f574554485f544f4b454e00000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f50524943455f4f5241434c45000000000000000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610671576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b61067b6000610d9b565b565b60005473ffffffffffffffffffffffffffffffffffffffff1633146106fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f41434c000000000000000000000000000000000000000000000000000000000082610d1d565b60006103617f574554485f474154455741590000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146107d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f574554485f544f4b454e0000000000000000000000000000000000000000000082610d1d565b60006103617f4143434f554e545f464143544f52590000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146108aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f4143434f554e545f464143544f5259000000000000000000000000000000000082610d1d565b60006103617f474541525f544f4b454e00000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610980576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f474541525f544f4b454e0000000000000000000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f444154415f434f4d50524553534f52000000000000000000000000000000000082610d1d565b60006103617f434f4e5452414354535f52454749535445520000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610b01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f434f4e5452414354535f5245474953544552000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610bac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b73ffffffffffffffffffffffffffffffffffffffff8116610c4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161040e565b61044181610d9b565b60006103617f50524943455f4f5241434c4500000000000000000000000000000000000000005b6000818152600160209081526040808320548151808301909252600382527f41503100000000000000000000000000000000000000000000000000000000009282019290925273ffffffffffffffffffffffffffffffffffffffff9091169081610d16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040e9190610e66565b5092915050565b60008281526001602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091559051909184917fb37614c7d254ea8d16eb81fa11dddaeb266aa8ba4917980859c7740aff30c6919190a35050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215610e2257600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610e4657600080fd5b9392505050565b600060208284031215610e5f57600080fd5b5035919050565b600060208083528351808285015260005b81811015610e9357858101830151858201604001528201610e77565b81811115610ea5576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea264697066735822122083c228af017c6f5cf8c395cdf7a53276ff56fdd4f4313c39f680ab73bd75417364736f6c634300080a0033608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61090e8061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063732818191161008c578063adce758d11610066578063adce758d14610215578063ba306df114610228578063d4eb5db01461023b578063f2fde38b1461027457600080fd5b806373281819146101b7578063819ad68e146101da5780638da5cb5b146101ed57600080fd5b806354fd4d50116100bd57806354fd4d501461016a5780635f259aba14610180578063715018a6146101af57600080fd5b806335914829146100e45780633a41ec641461011c5780634910832f14610155575b600080fd5b6101076100f236600461089b565b60016020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61010761012a36600461089b565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205460ff1690565b61016861016336600461089b565b610287565b005b610172600181565b604051908152602001610113565b61010761018e36600461089b565b60005473ffffffffffffffffffffffffffffffffffffffff91821691161490565b610168610387565b6101076101c536600461089b565b60026020526000908152604090205460ff1681565b6101686101e836600461089b565b610414565b60005460405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610113565b61016861022336600461089b565b61050c565b61016861023636600461089b565b610601565b61010761024936600461089b565b73ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205460ff1690565b61016861028236600461089b565b6106f6565b60005473ffffffffffffffffffffffffffffffffffffffff16331461030d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909217909155517fae26b1cfe9454ba87274a4e8330b6654684362d0f3d7bbd17f7449a1d38387c69190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610408576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b6104126000610826565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517fd400da6c0c0a894dacc0981730b88af0545d00272ee8fff1437bf560ff245fc49190a250565b60005473ffffffffffffffffffffffffffffffffffffffff16331461058d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f1998397e7203f7baca9d6f41b9e4da6e768daac5caad4234fb9bf5869d2715459190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610682576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526001602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f28b01395b7e25d20552a0c8dc8ecd3b1d4abc986f14dad7885fd45b6fd73c8d99190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811661081a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610304565b61082381610826565b50565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156108ad57600080fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146108d157600080fd5b939250505056fea26469706673582212204712efbfe997070def77285a5b8753bc882b62da2133ce1937ad26cd2b48e49864736f6c634300080a003360a060405234801561001057600080fd5b50604051610f50380380610f5083398101604081905261002f916100d7565b6000805460ff19169055806001600160a01b03811661006157604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa15801561009f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100c391906100d7565b6001600160a01b0316608052506101079050565b6000602082840312156100e957600080fd5b81516001600160a01b038116811461010057600080fd5b9392505050565b608051610e1261013e600039600081816101e2015281816102b20152818161040f0152818161057801526108510152610e126000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80638456cb5911610097578063b4ac686011610066578063b4ac686014610217578063c29277cd1461021f578063d914cd4b14610227578063e26b2f631461023a57600080fd5b80638456cb59146101cd57806394144856146101d5578063a50cf2c8146101dd578063ac4afa381461020457600080fd5b80635b16ebb7116100d35780635b16ebb7146101575780635c975abb1461018a578063673a2a1f146101955780636fbc6f6b146101aa57600080fd5b80631e16e4fc146100fa5780633f4ba83a1461013757806354fd4d5014610141575b600080fd5b61010d610108366004610c97565b61024d565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61013f610284565b005b610149600181565b60405190815260200161012e565b61017a610165366004610cb0565b60026020526000908152604090205460ff1681565b604051901515815260200161012e565b60005460ff1661017a565b61019d610372565b60405161012e9190610ced565b61017a6101b8366004610cb0565b60046020526000908152604090205460ff1681565b61013f6103e1565b61019d6104cd565b61010d7f000000000000000000000000000000000000000000000000000000000000000081565b61010d610212366004610c97565b61053a565b600154610149565b600354610149565b61013f610235366004610cb0565b61054a565b61013f610248366004610cb0565b610823565b6003818154811061025d57600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa15801561030e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103329190610d47565b610368576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610370610af6565b565b606060018054806020026020016040519081016040528092919081815260200182805480156103d757602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116103ac575b5050505050905090565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561046b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048f9190610d47565b6104c5576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610370610bd7565b606060038054806020026020016040519081016040528092919081815260200182805480156103d75760200282019190600052602060002090815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116103ac575050505050905090565b6001818154811061025d57600080fd5b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156105d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f89190610d47565b61062e576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051808201909152600281527f5a30000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff82166106b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b60405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff8116600090815260026020908152604091829020548251808401909352600383527f43523100000000000000000000000000000000000000000000000000000000009183019190915260ff1615610753576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b506001805480820182557fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915560008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909417909355915190917ff816b5143086c89d103a0683286be86c2b741e83ebfa75135aae606e2f5c6e5391a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156108ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d19190610d47565b610907576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051808201909152600281527f5a30000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8216610989576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b5073ffffffffffffffffffffffffffffffffffffffff8116600090815260046020908152604091829020548251808401909352600383527f43523200000000000000000000000000000000000000000000000000000000009183019190915260ff1615610a23576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b506003805460018082019092557fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915560008181526004602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909417909355915190917f58ad3cfc4b6552a53c8c4128ae9b080e14b4378a159280643a62c6f709cee24f91a250565b60005460ff16610b62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016106b0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff1615610c44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016106b0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610bad3390565b600060208284031215610ca957600080fd5b5035919050565b600060208284031215610cc257600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610ce657600080fd5b9392505050565b6020808252825182820181905260009190848201906040850190845b81811015610d3b57835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101610d09565b50909695505050505050565b600060208284031215610d5957600080fd5b81518015158114610ce657600080fd5b600060208083528351808285015260005b81811015610d9657858101830151858201604001528201610d7a565b81811115610da8576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea26469706673582212208f2d91c863db9ab1494a9c5db20e3fddc4b6c779ea3c3621737c105c60d9440a64736f6c634300080a003360e06040523480156200001157600080fd5b5060405162004da638038062004da6833981016040819052620000349162000160565b6001600160a01b0381166200005c57604051635919af9760e11b815260040160405180910390fd5b6001600160a01b03811660808190526040805163c513c9bb60e01b8152905163c513c9bb916004808201926020929091908290030181865afa158015620000a7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cd919062000160565b6001600160a01b031660a0816001600160a01b0316815250506080516001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000127573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200014d919062000160565b6001600160a01b031660c0525062000192565b6000602082840312156200017357600080fd5b81516001600160a01b03811681146200018b57600080fd5b9392505050565b60805160a05160c051614b896200021d6000396000818161018801528181611c4f0152612c5a0152600081816101ed015281816115e201528181611f5f0152818161213f0152818161223f0152818161243801528181612604015281816126bc01528181612788015281816129a501528181613c410152613d000152600061013c0152614b896000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c806354fd4d5011610081578063a80deda31161005b578063a80deda31461020f578063ae093f3f1461022f578063fc9914cb1461024f57600080fd5b806354fd4d50146101bd578063663b8fdb146101d35780637a0c7b21146101e857600080fd5b80632954018c116100b25780632954018c146101375780634b2f336d146101835780634c472fc9146101aa57600080fd5b80630dbd616d146100d957806313d21cdf146101025780631bcd8fc014610122575b600080fd5b6100ec6100e73660046140fc565b610272565b6040516100f9919061430b565b60405180910390f35b61011561011036600461431e565b6114d4565b6040516100f99190614444565b61012a611f59565b6040516100f99190614453565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100f9565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b61015e6101b83660046140fc565b6121f5565b6101c5600281565b6040519081526020016100f9565b6101db612432565b6040516100f991906146ea565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b61022261021d36600461431e565b6126b5565b6040516100f9919061476a565b61024261023d36600461431e565b612a75565b6040516100f991906147dd565b61026261025d3660046140fc565b613bf7565b60405190151581526020016100f9565b61035f604051806102400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160008152602001606081526020016000815260200160008152602001600015158152602001600081526020016000815260200160008152602001600060ff168152602001600081525090565b600080600080600061037088613cf4565b509450945094509450945060008560ff1660011461041d576040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015284169063e958b70490602401602060405180830381865afa1580156103f4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061041891906147f0565b6104ad565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015286169063e958b70490602401602060405180830381865afa158015610489573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ad91906147f0565b60ff8716610200890181905273ffffffffffffffffffffffffffffffffffffffff808b1660208b01528b811660608b015282168952909150600114156109e9578473ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610538573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055c91906147f0565b73ffffffffffffffffffffffffffffffffffffffff90811660808901526040517fc7de38a600000000000000000000000000000000000000000000000000000000815282821660048201529085169063c7de38a690602401602060405180830381865afa1580156105d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f5919061480d565b60c08801526040517fdfd5946500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015285169063dfd5946590602401602060405180830381865afa158015610666573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068a919061480d565b60e08801526040517f3ce0735500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015260006024830152861690633ce0735590604401602060405180830381865afa92505050801561073c575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526107399181019061480d565b60015b6107455761074c565b6101408801525b6040517f3ce0735500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015260016024830152861690633ce0735590604401602060405180830381865afa9250505080156107f9575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526107f69181019061480d565b60015b61080257610809565b6101608801525b60c08701516040517f996329f800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526024820192909252600060448201529086169063996329f89060640160a060405180830381865afa9250505080156108c4575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526108c191810190614826565b60015b6108cd576108da565b505015156101808a015250505b8073ffffffffffffffffffffffffffffffffffffffff16631afbb7a46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610925573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610949919061480d565b6101a08801526040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152851690633192195c90602401602060405180830381865afa1580156109bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109df919061480d565b60a0880152610c26565b8273ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5891906147f0565b73ffffffffffffffffffffffffffffffffffffffff90811660808901526040517fc7de38a600000000000000000000000000000000000000000000000000000000815282821660048201529083169063c7de38a6906024016040805180830381865afa158015610acc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af09190614866565b5060c08801526040517fdfd5946500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015283169063dfd5946590602401602060405180830381865afa158015610b62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b86919061480d565b60e08801526040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152841690633192195c906024016040805180830381865afa158015610bf6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1a9190614866565b60a08901526101a08801525b60008660ff16600114610ca7578373ffffffffffffffffffffffffffffffffffffffff166316f0115b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca291906147f0565b610d16565b8573ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1691906147f0565b90508073ffffffffffffffffffffffffffffffffffffffff166345d31f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d87919061480d565b6101008901526000600160ff891614610e0e578473ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610de5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e09919061480d565b610e7d565b8573ffffffffffffffffffffffffffffffffffffffff166320a05ff76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7d919061480d565b90508760ff16600114610f1f576040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152861690638991b2f190602401602060405180830381865afa158015610ef6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1a919061480d565b610faf565b6040517fb451cecc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015287169063b451cecc90602401602060405180830381865afa158015610f8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610faf919061480d565b6102208a01528067ffffffffffffffff811115610fce57610fce61488a565b60405190808252806020026020018201604052801561103e57816020015b6040805160808101825260008082526020808301829052928201819052606082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181610fec5790505b506101208a015260005b818110156113d657604080516080810182526000808252602082018190529181018290526060810191909152600180831b9060ff8c1614156111c5576040517faf0a650200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018590528a169063af0a650290604401608060405180830381865afa1580156110f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111b91906148b9565b5050602084015273ffffffffffffffffffffffffffffffffffffffff9081168084526040517ff9eaee0d0000000000000000000000000000000000000000000000000000000081526004810191909152908a169063f9eaee0d90602401602060405180830381865afa158015611195573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b9919061490d565b15156040830152611388565b6040517f172c48c70000000000000000000000000000000000000000000000000000000081526004810184905273ffffffffffffffffffffffffffffffffffffffff89169063172c48c7906024016040805180830381865afa15801561122f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112539190614928565b5073ffffffffffffffffffffffffffffffffffffffff9081168084526040517f70a082310000000000000000000000000000000000000000000000000000000081529188166004830152906370a0823190602401602060405180830381865afa1580156112c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e8919061480d565b602083015281516040517ff9eaee0d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529088169063f9eaee0d90602401602060405180830381865afa15801561135c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611380919061490d565b151560408301525b6102208c015181161561139c57600161139f565b60005b151560608301526101208c01518051839190859081106113c1576113c161495e565b60209081029190910101525050600101611048565b508273ffffffffffffffffffffffffffffffffffffffff166317d11a156040518163ffffffff1660e01b8152600401602060405180830381865afa158015611422573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611446919061480d565b896101c00181815250508273ffffffffffffffffffffffffffffffffffffffff16633dc54b406040518163ffffffff1660e01b8152600401602060405180830381865afa15801561149b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bf919061480d565b6101e08a015250969998505050505050505050565b61159b604051806102000160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600060ff1681525090565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015283917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa15801561162b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164f919061490d565b611685576040517fd384b23800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316808352604080517ffe14112d000000000000000000000000000000000000000000000000000000008152905185929163fe14112d9160048083019260209291908290030181865afa1580156116f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611719919061480d565b8360c00181815250508073ffffffffffffffffffffffffffffffffffffffff1663ef8d96036040518163ffffffff1660e01b8152600401602060405180830381865afa15801561176d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611791919061480d565b8360e00181815250508073ffffffffffffffffffffffffffffffffffffffff1663743753596040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611809919061480d565b8360a00181815250508073ffffffffffffffffffffffffffffffffffffffff16634c19386c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561185d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611881919061480d565b836101000181815250508073ffffffffffffffffffffffffffffffffffffffff1663788c6bfe6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fa919061480d565b836101600181815250508073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561194f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611973919061480d565b8360800181815250508073ffffffffffffffffffffffffffffffffffffffff166345d31f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119eb919061480d565b836101400181815250508073ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6491906147f0565b836040019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff166336dda7d56040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0a91906147f0565b836060019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663788c6bfe6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb0919061480d565b836101600181815250508073ffffffffffffffffffffffffffffffffffffffff1663e941fa786040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c29919061480d565b61018084015260408084015173ffffffffffffffffffffffffffffffffffffffff9081167f000000000000000000000000000000000000000000000000000000000000000082161460208087019190915282517f609ae31700000000000000000000000000000000000000000000000000000000815292519184169263609ae31792600480830193928290030181865afa158015611ccb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cef919061480d565b836101c00181815250508073ffffffffffffffffffffffffffffffffffffffff1663dbcb313b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d68919061480d565b836101a00181815250506000836060015173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de7919061480d565b6040517f5427c9380000000000000000000000000000000000000000000000000000000081526004810182905290915060009073ffffffffffffffffffffffffffffffffffffffff841690635427c93890602401602060405180830381865afa158015611e58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7c919061480d565b90508015611ec7576101808501518190611eb890611e9c906127106149bc565b876101000151886101400151611eb291906149d3565b90613fd0565b611ec29190614a3f565b611ece565b8461014001515b856101200181815250508273ffffffffffffffffffffffffffffffffffffffff166354fd4d506040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f47919061480d565b60ff166101e086015250505050919050565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b4ac68606040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fec919061480d565b90508067ffffffffffffffff8111156120075761200761488a565b6040519080825280602002602001820160405280156120ff57816020015b6120ec604051806102000160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600060ff1681525090565b8152602001906001900390816120255790505b50915060005b818110156121f0576040517fac4afa38000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ac4afa3890602401602060405180830381865afa15801561219b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121bf91906147f0565b90506121ca816114d4565b8483815181106121dc576121dc61495e565b602090810291909101015250600101612105565b505090565b6040517f6fbc6f6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015260009184917f00000000000000000000000000000000000000000000000000000000000000001690636fbc6f6b90602401602060405180830381865afa158015612286573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122aa919061490d565b6122e0576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060006122ee87613cf4565b5050935093505092508260ff16600114612397576040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015282169063fdd5764590602401602060405180830381865afa15801561236e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061239291906147f0565b612427565b6040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015283169063fdd5764590602401602060405180830381865afa158015612403573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061242791906147f0565b979650505050505050565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c29277cd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124c5919061480d565b90508067ffffffffffffffff8111156124e0576124e061488a565b6040519080825280602002602001820160405280156125c457816020015b60408051610260810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083018290526101208301819052610140830181905261016083015261018082018190526101a082018190526101c082018190526101e082018190526102008201819052610220820181905261024082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816124fe5790505b50915060005b818110156121f0576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa158015612660573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061268491906147f0565b905061268f81612a75565b8483815181106126a1576126a161495e565b6020908102919091010152506001016125ca565b60606000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c29277cd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612725573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612749919061480d565b905060005b81811015612829576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa1580156127e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061280891906147f0565b90506128148187613bf7565b15612820578360010193505b5060010161274e565b508167ffffffffffffffff8111156128435761284361488a565b60405190808252806020026020018201604052801561296157816020015b61294e604051806102400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160008152602001606081526020016000815260200160008152602001600015158152602001600081526020016000815260200160008152602001600060ff168152602001600081525090565b8152602001906001900390816128615790505b5092506000915060005b81811015612a6d576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa158015612a01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a2591906147f0565b9050612a318187613bf7565b15612a6457612a408187610272565b858581518110612a5257612a5261495e565b60209081029190910101526001909301925b5060010161296b565b505050919050565b604080516102608101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082018390526101208201819052610140820181905261016082015261018081018290526101a081018290526101c081018290526101e08101829052610200810182905261022081018290526102408101829052908080808080612b1b88613cf4565b73ffffffffffffffffffffffffffffffffffffffff8e168d5260ff86166101808e01819052959b50939950919750955093509150600114612bca578273ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ba1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bc591906147f0565b612c39565b8473ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c3991906147f0565b73ffffffffffffffffffffffffffffffffffffffff908116602089018190527f00000000000000000000000000000000000000000000000000000000000000009091161460408801526000600160ff881614612d03578373ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cfe91906147f0565b612d72565b8573ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d7291906147f0565b6040517f2e97ca2100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b8116600483015291925090821690632e97ca2190602401602060405180830381865afa158015612de2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e06919061490d565b15156060890152604080517f45d31f9d000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff8316916345d31f9d9160048083019260209291908290030181865afa158015612e78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e9c919061480d565b8860800181815250508073ffffffffffffffffffffffffffffffffffffffff1663743753596040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ef0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f14919061480d565b610100890152600160ff88161415613017578573ffffffffffffffffffffffffffffffffffffffff16639b2cb5d86040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f95919061480d565b8860a00181815250508573ffffffffffffffffffffffffffffffffffffffff16635f48f3936040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fe9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061300d919061480d565b60c08901526130a5565b8273ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa158015613061573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130859190614a73565b6fffffffffffffffffffffffffffffffff90811660c08b01521660a08901525b60008760ff16600114613126578473ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613121919061480d565b613195565b8573ffffffffffffffffffffffffffffffffffffffff166320a05ff76040518163ffffffff1660e01b8152600401602060405180830381865afa158015613171573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613195919061480d565b90508067ffffffffffffffff8111156131b0576131b061488a565b6040519080825280602002602001820160405280156131d9578160200160208202803683370190505b506101208a01528067ffffffffffffffff8111156131f9576131f961488a565b604051908082528060200260200182016040528015613222578160200160208202803683370190505b506101608a015260005b818110156134c4578860ff16600114156133b4576040517f5e5f2e260000000000000000000000000000000000000000000000000000000081526004810182905260009073ffffffffffffffffffffffffffffffffffffffff891690635e5f2e2690602401602060405180830381865afa1580156132ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132d291906147f0565b9050808b610120015183815181106132ec576132ec61495e565b73ffffffffffffffffffffffffffffffffffffffff92831660209182029290920101526040517f78327438000000000000000000000000000000000000000000000000000000008152828216600482015290891690637832743890602401602060405180830381865afa158015613367573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061338b919061480d565b8b610160015183815181106133a2576133a261495e565b602002602001018181525050506134bc565b6040517f172c48c70000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff87169063172c48c7906024016040805180830381865afa15801561341e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134429190614928565b8061ffff1690508b610120015183815181106134605761346061495e565b602002602001018c6101600151848151811061347e5761347e61495e565b60200260200101828152508273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525050505b60010161322c565b5060008860ff16600114613546578373ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561351d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613541919061480d565b6135b5565b8673ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613591573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135b5919061480d565b90508067ffffffffffffffff8111156135d0576135d061488a565b60405190808252806020026020018201604052801561361557816020015b60408051808201909152600080825260208201528152602001906001900390816135ee5790505b506101408b015260005b818110156139015760408051808201909152600080825260208201528a60ff166001146136da576040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff871690635094cb4f90602401602060405180830381865afa1580156136b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136d591906147f0565b613769565b6040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff8a1690635094cb4f90602401602060405180830381865afa158015613745573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061376991906147f0565b73ffffffffffffffffffffffffffffffffffffffff168152600160ff8c16146138245780516040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529089169063fdd5764590602401602060405180830381865afa1580156137fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061381f91906147f0565b6138b7565b80516040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152908a169063fdd5764590602401602060405180830381865afa158015613893573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138b791906147f0565b73ffffffffffffffffffffffffffffffffffffffff1660208201526101408c01518051829190849081106138ed576138ed61495e565b60209081029190910101525060010161361f565b508860ff166001141561398f578773ffffffffffffffffffffffffffffffffffffffff1663b2c53a6c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613959573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061397d919061480d565b60e08b015260ff6102408b0152613be9565b73ffffffffffffffffffffffffffffffffffffffff85166101a08b01819052604080517f9408b63f0000000000000000000000000000000000000000000000000000000081529051639408b63f916004808201926020929091908290030181865afa158015613a02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a2691906147f0565b8a6101e0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508473ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015613aa9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613acd9190614aa6565b5015156102008c015250604080517f9fd12b77000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff881691639fd12b779160048083019260209291908290030181865afa158015613b42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b66919061480d565b8a6102200181815250508573ffffffffffffffffffffffffffffffffffffffff16638345f26e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bdf9190614af7565b60ff166102408b01525b505050505050505050919050565b6040517f6fbc6f6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015260009184917f00000000000000000000000000000000000000000000000000000000000000001690636fbc6f6b90602401602060405180830381865afa158015613c88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cac919061490d565b613ce2576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613cec8484614023565b949350505050565b600080600080600080867f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636fbc6f6b826040518263ffffffff1660e01b8152600401613d73919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa158015613d90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613db4919061490d565b613dea576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8773ffffffffffffffffffffffffffffffffffffffff166354fd4d506040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e59919061480d565b96508660ff1660011415613ee0578795508573ffffffffffffffffffffffffffffffffffffffff1663f93f515b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613eb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ed991906147f0565b9450613fc6565b8793508373ffffffffffffffffffffffffffffffffffffffff16632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f5291906147f0565b92508373ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fc391906147f0565b91505b5091939550919395565b6000821580613fdd575081155b15613fea5750600061401d565b612710613ff8600282614b1a565b61ffff1661400684866149d3565b6140109190614b3b565b61401a9190614a3f565b90505b92915050565b6040517f055ee9b500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600091829185169063055ee9b590602401602060405180830381865afa158015614094573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140b891906147f0565b73ffffffffffffffffffffffffffffffffffffffff1614159392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146140f957600080fd5b50565b6000806040838503121561410f57600080fd5b823561411a816140d7565b9150602083013561412a816140d7565b809150509250929050565b600081518084526020808501945080840160005b8381101561419f578151805173ffffffffffffffffffffffffffffffffffffffff168852838101518489015260408082015115159089015260609081015115159088015260809096019590820190600101614149565b509495945050505050565b805173ffffffffffffffffffffffffffffffffffffffff168252600061024060208301516141f0602086018273ffffffffffffffffffffffffffffffffffffffff169052565b506040830151614204604086018215159052565b50606083015161422c606086018273ffffffffffffffffffffffffffffffffffffffff169052565b506080830151614254608086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060a083015160a085015260c083015160c085015260e083015160e085015261010080840151818601525061012080840151828287015261429783870182614135565b92505050610140808401518186015250610160808401518186015250610180808401516142c78287018215159052565b50506101a083810151908501526101c080840151908501526101e080840151908501526102008084015160ff16908501526102209283015192909301919091525090565b60208152600061401a60208301846141aa565b60006020828403121561433057600080fd5b813561433b816140d7565b9392505050565b805173ffffffffffffffffffffffffffffffffffffffff168252602081015161436f602084018215159052565b506040810151614397604084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060608101516143bf606084018273ffffffffffffffffffffffffffffffffffffffff169052565b506080818101519083015260a0808201519083015260c0808201519083015260e08082015190830152610100808201519083015261012080820151908301526101408082015190830152610160808201519083015261018080820151908301526101a080820151908301526101c080820151908301526101e09081015160ff16910152565b610200810161401d8284614342565b6020808252825182820181905260009190848201906040850190845b8181101561449657614482838551614342565b92840192610200929092019160010161446f565b50909695505050505050565b600081518084526020808501945080840160005b8381101561419f57815173ffffffffffffffffffffffffffffffffffffffff16875295820195908201906001016144b6565b600081518084526020808501945080840160005b8381101561419f578151805173ffffffffffffffffffffffffffffffffffffffff9081168952908401511683880152604090960195908201906001016144fc565b600081518084526020808501945080840160005b8381101561419f57815187529582019590820190600101614551565b805173ffffffffffffffffffffffffffffffffffffffff168252600061026060208301516145b3602086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060408301516145c7604086018215159052565b5060608301516145db606086018215159052565b506080830151608085015260a083015160a085015260c083015160c085015260e083015160e0850152610100808401518186015250610120808401518282870152614628838701826144a2565b92505050610140808401518583038287015261464483826144e8565b925050506101608084015185830382870152614660838261453d565b92505050610180808401516146798287018260ff169052565b50506101a08381015173ffffffffffffffffffffffffffffffffffffffff908116918601919091526101c0808501511515908601526101e080850151909116908501526102008084015115159085015261022080840151908501526102409283015160ff1692909301919091525090565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561475d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc088860301845261474b85835161456d565b94509285019290850190600101614711565b5092979650505050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561475d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08886030184526147cb8583516141aa565b94509285019290850190600101614791565b60208152600061401a602083018461456d565b60006020828403121561480257600080fd5b815161433b816140d7565b60006020828403121561481f57600080fd5b5051919050565b600080600080600060a0868803121561483e57600080fd5b5050835160208501516040860151606087015160809097015192989197509594509092509050565b6000806040838503121561487957600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080600080608085870312156148cf57600080fd5b84516148da816140d7565b60208601516040870151606090970151919890975090945092505050565b8051801515811461490857600080fd5b919050565b60006020828403121561491f57600080fd5b61401a826148f8565b6000806040838503121561493b57600080fd5b8251614946816140d7565b602084015190925061ffff8116811461412a57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156149ce576149ce61498d565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614a0b57614a0b61498d565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614a4e57614a4e614a10565b500490565b80516fffffffffffffffffffffffffffffffff8116811461490857600080fd5b60008060408385031215614a8657600080fd5b614a8f83614a53565b9150614a9d60208401614a53565b90509250929050565b600080600060608486031215614abb57600080fd5b614ac484614a53565b9250614ad2602085016148f8565b9150604084015164ffffffffff81168114614aec57600080fd5b809150509250925092565b600060208284031215614b0957600080fd5b815160ff8116811461433b57600080fd5b600061ffff80841680614b2f57614b2f614a10565b92169190910492915050565b60008219821115614b4e57614b4e61498d565b50019056fea2646970667358221220d15108d0bec9cc6f3903875dd8412869a3da1b36661bdc780e2e2f0ae3136d2464736f6c634300080a003360a06040523480156200001157600080fd5b5060405162001b4538038062001b45833981016040819052620000349162000608565b6000805460ff19169055816001600160a01b0381166200006757604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cc91906200070a565b6001600160a01b031660805250805160005b818110156200014257620001398382815181106200010057620001006200072f565b6020026020010151600001518483815181106200012157620001216200072f565b6020026020010151602001516200014c60201b60201c565b600101620000de565b5050505062000822565b6001600160a01b03821615806200016a57506001600160a01b038116155b156200018957604051635919af9760e11b815260040160405180910390fd5b620001a8826001600160a01b0316620004ba60201b620006751760201c565b620001d65760405163df4c572d60e01b81526001600160a01b03831660048201526024015b60405180910390fd5b620001f5816001600160a01b0316620004ba60201b620006751760201c565b6200021f5760405163df4c572d60e01b81526001600160a01b0382166004820152602401620001cd565b806001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200027c575060408051601f3d908101601f19168201909252620002799181019062000745565b60015b6200029a576040516367a7cd4360e01b815260040160405180910390fd5b8060ff16600814620002bf576040516367a7cd4360e01b815260040160405180910390fd5b506000816001600160a01b031663d62ada116040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200031f575060408051601f3d908101601f191682019092526200031c918101906200076a565b60015b6200032a576200032d565b90505b6000836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200038c575060408051601f3d908101601f19168201909252620003899181019062000745565b60015b620003aa5760405163528ca31d60e01b815260040160405180910390fd5b60128160ff161115620003d05760405163528ca31d60e01b815260040160405180910390fd5b9050826001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa9250505080156200042f575060408051601f3d908101601f191682019092526200042c91810190620007a6565b60015b6200044d576040516367a7cd4360e01b815260040160405180910390fd5b8662000461576200046185858484620004c0565b5050505050620004748484848462000526565b826001600160a01b0316846001600160a01b03167fe263805b03657ab13064915d0723c5ce14981547e7cba5283f66b9e5d81f6e6e60405160405180910390a350505050565b3b151590565b60008313620004e2576040516356e05d2b60e01b815260040160405180910390fd5b836001600160501b0316816001600160501b0316108062000501575081155b15620005205760405163b1cf675560e01b815260040160405180910390fd5b50505050565b6001600160a01b03831682156200053e57600160a11b175b6200055460ff60a21b60a284901b1682620007fb565b6001600160a01b0390951660009081526001602052604090209490945550505050565b80516001600160a01b03811681146200058f57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715620005cf57620005cf62000594565b60405290565b604051601f8201601f191681016001600160401b038111828210171562000600576200060062000594565b604052919050565b60008060408084860312156200061d57600080fd5b620006288462000577565b602085810151919450906001600160401b03808211156200064857600080fd5b818701915087601f8301126200065d57600080fd5b81518181111562000672576200067262000594565b62000682848260051b01620005d5565b818152848101925060069190911b830184019089821115620006a357600080fd5b928401925b81841015620006fa5785848b031215620006c25760008081fd5b620006cc620005aa565b620006d78562000577565b8152620006e686860162000577565b8187015283529285019291840191620006a8565b8096505050505050509250929050565b6000602082840312156200071d57600080fd5b620007288262000577565b9392505050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156200075857600080fd5b815160ff811681146200072857600080fd5b6000602082840312156200077d57600080fd5b815180151581146200072857600080fd5b80516001600160501b03811681146200058f57600080fd5b600080600080600060a08688031215620007bf57600080fd5b620007ca866200078e565b9450602086015193506040860151925060608601519150620007ef608087016200078e565b90509295509295909350565b600082198211156200081d57634e487b7160e01b600052601160045260246000fd5b500190565b6080516112f262000853600039600081816101b201528181610280015281816103e201526104ff01526112f26000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c80638456cb591161008c578063b66102df11610066578063b66102df146101d4578063e8a97a3e146101e7578063f190e5fa146101fa578063f9a650301461023f57600080fd5b80638456cb591461016d5780639dcb511a14610175578063a50cf2c8146101ad57600080fd5b80635c975abb116100bd5780635c975abb1461011c5780635cecbd0e146101325780637afb01041461015a57600080fd5b80633f4ba83a146100e457806341976e09146100ee57806354fd4d5014610114575b600080fd5b6100ec610252565b005b6101016100fc366004610f28565b610340565b6040519081526020015b60405180910390f35b610101600281565b60005460ff16604051901515815260200161010b565b610145610140366004610f4a565b610352565b6040805192835260208301919091520161010b565b610101610168366004610f90565b610376565b6100ec6103b4565b610188610183366004610f28565b6104a0565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010b565b6101887f000000000000000000000000000000000000000000000000000000000000000081565b6101016101e2366004610fbc565b6104b4565b6100ec6101f5366004610ff8565b6104d1565b61020d610208366004610f28565b6105c3565b6040805173ffffffffffffffffffffffffffffffffffffffff909416845291151560208401529082015260600161010b565b61010161024d366004610f90565b61064d565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156102dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103009190611022565b610336576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033e61067b565b565b600061034b82610761565b5092915050565b60008061035f868661064d565b915061036b848461064d565b905094509492505050565b600080600061038484610761565b90925090508161039582600a611193565b61039f908761119f565b6103a991906111dc565b925050505b92915050565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561043e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104629190611022565b610498576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033e610819565b60006104ab826105c3565b50909392505050565b60006104c96104c3858561064d565b83610376565b949350505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561055b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057f9190611022565b6105b5576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105bf82826108d9565b5050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600160205260408120548190819080610624576040517f4bb8ad8200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b947402000000000000000000000000000000000000000086161515945060a286901c9350915050565b600080600061065b84610761565b909250905061066b81600a611193565b61039f838761119f565b3b151590565b60005460ff166106ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b600080600080610770856105c3565b8095508193508294505050506000806000808573ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156107cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f19190611231565b9450945050935093508461080b5761080b84848484610dd9565b829750505050505050915091565b60005460ff1615610886576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016106e3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586107373390565b73ffffffffffffffffffffffffffffffffffffffff82161580610910575073ffffffffffffffffffffffffffffffffffffffff8116155b15610947576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82163b6109ad576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016106e3565b73ffffffffffffffffffffffffffffffffffffffff81163b610a13576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024016106e3565b8073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610a98575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610a9591810190611281565b60015b610ace576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060ff16600814610b0b576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060008173ffffffffffffffffffffffffffffffffffffffff1663d62ada116040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610b93575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610b9091810190611022565b60015b610b9c57610b9f565b90505b60008373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610c26575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610c2391810190611281565b60015b610c5c576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60128160ff161115610c9a576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b90508273ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa925050508015610d21575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610d1e91810190611231565b60015b610d57576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b86610d6857610d6885858484610dd9565b5050505050610d7984848484610e74565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fe263805b03657ab13064915d0723c5ce14981547e7cba5283f66b9e5d81f6e6e60405160405180910390a350505050565b60008313610e13576040517f56e05d2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8369ffffffffffffffffffff168169ffffffffffffffffffff161080610e37575081155b15610e6e576040517fb1cf675500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b73ffffffffffffffffffffffffffffffffffffffff83168215610ea95774020000000000000000000000000000000000000000175b610ecf7503fc000000000000000000000000000000000000000060a284901b16826112a4565b73ffffffffffffffffffffffffffffffffffffffff90951660009081526001602052604090209490945550505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610f2357600080fd5b919050565b600060208284031215610f3a57600080fd5b610f4382610eff565b9392505050565b60008060008060808587031215610f6057600080fd5b84359350610f7060208601610eff565b925060408501359150610f8560608601610eff565b905092959194509250565b60008060408385031215610fa357600080fd5b82359150610fb360208401610eff565b90509250929050565b600080600060608486031215610fd157600080fd5b83359250610fe160208501610eff565b9150610fef60408501610eff565b90509250925092565b6000806040838503121561100b57600080fd5b61101483610eff565b9150610fb360208401610eff565b60006020828403121561103457600080fd5b81518015158114610f4357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b808511156110cc57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156110b2576110b2611044565b808516156110bf57918102915b93841c9390800290611078565b509250929050565b6000826110e3575060016103ae565b816110f0575060006103ae565b816001811461110657600281146111105761112c565b60019150506103ae565b60ff84111561112157611121611044565b50506001821b6103ae565b5060208310610133831016604e8410600b841016171561114f575081810a6103ae565b6111598383611073565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561118b5761118b611044565b029392505050565b6000610f4383836110d4565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156111d7576111d7611044565b500290565b600082611212577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b805169ffffffffffffffffffff81168114610f2357600080fd5b600080600080600060a0868803121561124957600080fd5b61125286611217565b945060208601519350604086015192506060860151915061127560808701611217565b90509295509295909350565b60006020828403121561129357600080fd5b815160ff81168114610f4357600080fd5b600082198211156112b7576112b7611044565b50019056fea2646970667358221220e7485a2cb5750973f539ca59d2211008b42bb92b6c49605a53f5d9c88c330fb164736f6c634300080a003360e06040523480156200001157600080fd5b5060405162002ced38038062002ced8339810160408190526200003491620004bb565b6000805460ff19169055806001600160a01b0381166200006757604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cc9190620004bb565b6001600160a01b039081166080526001805560408051808201909152600281526105a360f41b602082015291508216620001245760405162461bcd60e51b81526004016200011b9190620004ed565b60405180910390fd5b50806001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000164573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200018a9190620004bb565b6001600160a01b031660c052604051620001a490620004ad565b604051809103906000f080158015620001c1573d6000803e3d6000fd5b506001600160a01b031660a08190526040805163204a7f0760e21b81529051638129fc1c9160048082019260009290919082900301818387803b1580156200020857600080fd5b505af11580156200021d573d6000803e3d6000fd5b50505050620002316200028a60201b60201c565b50600454600380546001600160a01b039092166001600160a01b03199283161790556000805260026020527fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b8054909116905562000545565b6000620002a460a0516200038c60201b6200119b1760201c565b9050806001600160a01b0316638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620002e257600080fd5b505af1158015620002f7573d6000803e3d6000fd5b5050600480546001600160a01b03908116600090815260026020908152604090912080546001600160a01b03199081169388169384179091558354169091179091556200035492506005915083906200043b811b6200127d17901c565b506040516001600160a01b038216907f9f69b6c10f6810213e055b0ba6bc0a4e2603f73c221aad77ea35da819cda7dc390600090a250565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260601b60148201526e5af43d82803e903d91602b57fd5bf360881b60288201526037816000f09150506001600160a01b038116620004365760405162461bcd60e51b815260206004820152601660248201527f455243313136373a20637265617465206661696c65640000000000000000000060448201526064016200011b565b919050565b600062000452836001600160a01b0384166200045b565b90505b92915050565b6000818152600183016020526040812054620004a45750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000455565b50600062000455565b610e788062001e7583390190565b600060208284031215620004ce57600080fd5b81516001600160a01b0381168114620004e657600080fd5b9392505050565b600060208083528351808285015260005b818110156200051c57858101830151858201604001528201620004fe565b818111156200052f576000604083870101525b50601f01601f1916929092016040019392505050565b60805160a05160c0516118cf620005a66000396000818161026a015281816103680152610b7001526000818161020201526110650152600081816102c4015281816105b80152818161099601528181610a840152610e7401526118cf6000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806388f64c54116100cd578063b193976311610081578063d82ecc4811610066578063d82ecc4814610309578063e3ba9ace1461031c578063f23953ab1461032f57600080fd5b8063b1939763146102f9578063b60e85181461030157600080fd5b80638f7dcfa3116100b25780638f7dcfa31461029f578063a50cf2c8146102bf578063a904aab6146102e657600080fd5b806388f64c541461026557806389b77b3e1461028c57600080fd5b806354fd4d50116101245780635da33c5b116101095780635da33c5b146101fd578063765e0159146102245780638456cb591461025d57600080fd5b806354fd4d50146101d05780635c975abb146101e657600080fd5b806313d8c8401461015657806321d18456146101a05780632932472f146101b35780633f4ba83a146101c8575b600080fd5b6004546101769073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6101766101ae366004611651565b610337565b6101c66101c1366004611697565b61058a565b005b6101c6610968565b6101d8600181565b604051908152602001610197565b60005460ff165b6040519015158152602001610197565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101766102323660046116da565b73ffffffffffffffffffffffffffffffffffffffff9081166000908152600260205260409020541690565b6101c6610a56565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101c661029a3660046116da565b610b42565b6003546101769073ffffffffffffffffffffffffffffffffffffffff1681565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101c66102f4366004611697565b610e46565b6101d8610fb8565b6101d8611033565b6101ed6103173660046116da565b611044565b61017661032a3660046116f5565b611051565b6101c661105e565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa1580156103c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103e8919061170e565b6040518060400160405280600281526020017f43500000000000000000000000000000000000000000000000000000000000008152509061045f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b60405180910390fd5b506104686112a6565b6003805473ffffffffffffffffffffffffffffffffffffffff8082166000818152600260205260409081902080549093167fffffffffffffffffffffffff0000000000000000000000000000000000000000948516179094558154909216905590517fc75b5a710000000000000000000000000000000000000000000000000000000081523360048201526024810185905260448101849052819063c75b5a7190606401600060405180830381600087803b15801561052657600080fd5b505af115801561053a573d6000803e3d6000fd5b505060405133925073ffffffffffffffffffffffffffffffffffffffff841691507ff3ede7039176503a8ad1fe7cfaa29475a9dbe0cdcaf04ecf9a5c10570c47b10390600090a390505b92915050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610614573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610638919061170e565b61066e576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106766112a6565b60035473ffffffffffffffffffffffffffffffffffffffff838116911614156106fa576003805473ffffffffffffffffffffffffffffffffffffffff808216600090815260026020526040902080549091167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092558154169055610865565b73ffffffffffffffffffffffffffffffffffffffff838116600090815260026020908152604091829020548251808401909352600383527f4146330000000000000000000000000000000000000000000000000000000000918301919091529091848116911614610798576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b5060045473ffffffffffffffffffffffffffffffffffffffff838116911614156107fd57600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85161790555b73ffffffffffffffffffffffffffffffffffffffff828116600081815260026020526040808220805488861684529183208054929095167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790945591905281541690555b6040517fc75b5a7100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600060248301819052604483015283169063c75b5a7190606401600060405180830381600087803b1580156108dc57600080fd5b505af11580156108f0573d6000803e3d6000fd5b505050506109088260056112dd90919063ffffffff16565b508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f25e267469ba2ae82515be7b3d45df60bf8308343f0809e8cf7319058e2255ce660405160405180910390a3505050565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156109f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a16919061170e565b610a4c576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a546112ff565b565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015610ae0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b04919061170e565b610b3a576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a546113e0565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa158015610bcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf0919061170e565b6040518060400160405280600281526020017f435000000000000000000000000000000000000000000000000000000000000081525090610c5e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b50610c6a6005826114a0565b6040518060400160405280600381526020017f414634000000000000000000000000000000000000000000000000000000000081525090610cd8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b50438173ffffffffffffffffffffffffffffffffffffffff16633dc54b406040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4991906117a3565b14156040518060400160405280600381526020017f414631000000000000000000000000000000000000000000000000000000000081525090610db9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b506004805473ffffffffffffffffffffffffffffffffffffffff90811660009081526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081169487169485179091558454168317909355915190917fced6ab9afc868b3a088366f6631ae20752993b5cce5d5f0534ea5a59fcc57d5691a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610ed0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef4919061170e565b610f2a576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f19a1603900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301528416906319a1603990604401600060405180830381600087803b158015610f9b57600080fd5b505af1158015610faf573d6000803e3d6000fd5b50505050505050565b600354600090819073ffffffffffffffffffffffffffffffffffffffff165b73ffffffffffffffffffffffffffffffffffffffff81161561102d5773ffffffffffffffffffffffffffffffffffffffff9081166000908152600260205260409020541681611025816117eb565b925050610fd7565b50919050565b600061103f60056114cf565b905090565b60006105846005836114a0565b60006105846005836114d9565b60006110897f000000000000000000000000000000000000000000000000000000000000000061119b565b90508073ffffffffffffffffffffffffffffffffffffffff16638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156110d357600080fd5b505af11580156110e7573d6000803e3d6000fd5b50506004805473ffffffffffffffffffffffffffffffffffffffff908116600090815260026020526040902080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811692871692831790915582541617905550611156905060058261127d565b5060405173ffffffffffffffffffffffffffffffffffffffff8216907f9f69b6c10f6810213e055b0ba6bc0a4e2603f73c221aad77ea35da819cda7dc390600090a250565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260601b60148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f091505073ffffffffffffffffffffffffffffffffffffffff8116611278576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f455243313136373a20637265617465206661696c6564000000000000000000006044820152606401610456565b919050565b600061129f8373ffffffffffffffffffffffffffffffffffffffff84166114e5565b9392505050565b60035473ffffffffffffffffffffffffffffffffffffffff90811660009081526002602052604090205416610a5457610a5461105e565b600061129f8373ffffffffffffffffffffffffffffffffffffffff8416611534565b60005460ff1661136b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610456565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff161561144d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610456565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586113b63390565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600183016020526040812054151561129f565b6000610584825490565b600061129f8383611627565b600081815260018301602052604081205461152c57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610584565b506000610584565b6000818152600183016020526040812054801561161d576000611558600183611824565b855490915060009061156c90600190611824565b90508181146115d157600086600001828154811061158c5761158c61183b565b90600052602060002001549050808760000184815481106115af576115af61183b565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806115e2576115e261186a565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610584565b6000915050610584565b600082600001828154811061163e5761163e61183b565b9060005260206000200154905092915050565b6000806040838503121561166457600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff8116811461127857600080fd5b6000806000606084860312156116ac57600080fd5b6116b584611673565b92506116c360208501611673565b91506116d160408501611673565b90509250925092565b6000602082840312156116ec57600080fd5b61129f82611673565b60006020828403121561170757600080fd5b5035919050565b60006020828403121561172057600080fd5b8151801515811461129f57600080fd5b600060208083528351808285015260005b8181101561175d57858101830151858201604001528201611741565b8181111561176f576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b6000602082840312156117b557600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561181d5761181d6117bc565b5060010190565b600082821015611836576118366117bc565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220f1e9c81b8c3af2491c907ee66cf24e1bb76111b821db02df8f98dbb48b5ab5fa64736f6c634300080a0033608060405234801561001057600080fd5b50610e58806100206000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c806354fd4d5011610081578063c45a01551161005b578063c45a0155146101a4578063c75b5a71146101ca578063d1660f99146101dd57600080fd5b806354fd4d501461014f5780638129fc1c14610157578063c12c21c01461015f57600080fd5b80631afbb7a4116100b25780631afbb7a41461011d5780631cff79cd146101265780633dc54b401461014657600080fd5b806316128211146100d957806317d11a15146100ee57806319a160391461010a575b600080fd5b6100ec6100e7366004610b42565b6101f0565b005b6100f760035481565b6040519081526020015b60405180910390f35b6100ec610118366004610b8d565b61024c565b6100f760025481565b610139610134366004610bef565b6102c9565b6040516101019190610d49565b6100f760045481565b6100f7600181565b6100ec610344565b60015461017f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610101565b60005461017f9062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b6100ec6101d8366004610d5c565b610494565b6100ec6101eb366004610d8f565b61053d565b60015473ffffffffffffffffffffffffffffffffffffffff163314610241576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600291909155600355565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1633146102a3576040517fb126b84800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102c573ffffffffffffffffffffffffffffffffffffffff83168260006105b4565b5050565b60015460609073ffffffffffffffffffffffffffffffffffffffff16331461031d576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033d73ffffffffffffffffffffffffffffffffffffffff8416836107b4565b9392505050565b600054610100900460ff1661035f5760005460ff1615610363565b303b155b6103f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600054610100900460ff1615801561043357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000166101011790555b600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16336201000002179055801561049157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b50565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1633146104eb576040517fb126b84800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff949094169390931790925560025560035543600455565b60015473ffffffffffffffffffffffffffffffffffffffff16331461058e576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105af73ffffffffffffffffffffffffffffffffffffffff841683836107f6565b505050565b80158061065457506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015284169063dd62ed3e90604401602060405180830381865afa15801561062e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106529190610dcb565b155b6106e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e63650000000000000000000060648201526084016103eb565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526105af9084907f095ea7b300000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261084c565b606061033d83836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250610958565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526105af9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401610732565b60006108ae826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166109589092919063ffffffff16565b8051909150156105af57808060200190518101906108cc9190610de4565b6105af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016103eb565b6060610967848460008561096f565b949350505050565b606082471015610a01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016103eb565b843b610a69576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016103eb565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051610a929190610e06565b60006040518083038185875af1925050503d8060008114610acf576040519150601f19603f3d011682016040523d82523d6000602084013e610ad4565b606091505b5091509150610ae4828286610aef565b979650505050505050565b60608315610afe57508161033d565b825115610b0e5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103eb9190610d49565b60008060408385031215610b5557600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff81168114610b8857600080fd5b919050565b60008060408385031215610ba057600080fd5b610ba983610b64565b9150610bb760208401610b64565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215610c0257600080fd5b610c0b83610b64565b9150602083013567ffffffffffffffff80821115610c2857600080fd5b818501915085601f830112610c3c57600080fd5b813581811115610c4e57610c4e610bc0565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715610c9457610c94610bc0565b81604052828152886020848701011115610cad57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b83811015610cea578181015183820152602001610cd2565b83811115610cf9576000848401525b50505050565b60008151808452610d17816020860160208601610ccf565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061033d6020830184610cff565b600080600060608486031215610d7157600080fd5b610d7a84610b64565b95602085013595506040909401359392505050565b600080600060608486031215610da457600080fd5b610dad84610b64565b9250610dbb60208501610b64565b9150604084013590509250925092565b600060208284031215610ddd57600080fd5b5051919050565b600060208284031215610df657600080fd5b8151801515811461033d57600080fd5b60008251610e18818460208701610ccf565b919091019291505056fea2646970667358221220448e7046078cd668c09328d857e534e2aab6cdc0e691d3d4f2c8baae8e084b1364736f6c634300080a003360c06040523480156200001157600080fd5b506040516200162738038062001627833981016040819052620000349162000177565b60408051808201909152600281526105a360f41b60208201526001600160a01b038216620000805760405162461bcd60e51b8152600401620000779190620001a9565b60405180910390fd5b50806001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e6919062000177565b6001600160a01b03166080816001600160a01b031681525050806001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200013e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000164919062000177565b6001600160a01b031660a0525062000201565b6000602082840312156200018a57600080fd5b81516001600160a01b0381168114620001a257600080fd5b9392505050565b600060208083528351808285015260005b81811015620001d857858101830151858201604001528201620001ba565b81811115620001eb576000604083870101525b50601f01601f1916929092016040019392505050565b60805160a0516113c2620002656000396000818161021f0152818161036401526106d501526000818160af0152818161012a015281816104420152818161056e015281816107b301528181610aa601528181610b890152610c6701526113c26000f3fe60806040526004361061005e5760003560e01c80635869dba8116100435780635869dba814610199578063deecfbc9146101bb578063e79a4089146101ce57600080fd5b80634f0e0ef31461011857806354fd4d501461017657600080fd5b366101135760408051808201909152600381527f574732000000000000000000000000000000000000000000000000000000000060208201523373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b60405180910390fd5b50005b600080fd5b34801561012457600080fd5b5061014c7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561018257600080fd5b5061018b600181565b60405190815260200161016d565b3480156101a557600080fd5b506101b96101b4366004611263565b6101ee565b005b6101b96101c936600461128f565b61031d565b3480156101da57600080fd5b506101b96101e93660046112e1565b61068e565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201819052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa15801561027b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061029f9190611318565b6040518060400160405280600281526020017f43500000000000000000000000000000000000000000000000000000000000008152509061030d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b506103188383610a77565b505050565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808516600483015284917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa1580156103ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103d19190611318565b6040518060400160405280600281526020017f52500000000000000000000000000000000000000000000000000000000000008152509061043f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e6919061133a565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600381526020017f57473100000000000000000000000000000000000000000000000000000000008152509061056b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156105d457600080fd5b505af11580156105e8573d6000803e3d6000fd5b50505050506105f78434610b3c565b6040517f9aa5d46200000000000000000000000000000000000000000000000000000000815234600482015273ffffffffffffffffffffffffffffffffffffffff848116602483015261ffff84166044830152851690639aa5d46290606401600060405180830381600087803b15801561067057600080fd5b505af1158015610684573d6000803e3d6000fd5b5050505050505050565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808516600483015284917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa15801561071e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107429190611318565b6040518060400160405280600281526020017f5250000000000000000000000000000000000000000000000000000000000000815250906107b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610833573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610857919061133a565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600381526020017f5747310000000000000000000000000000000000000000000000000000000000815250906108dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b506109703330858773ffffffffffffffffffffffffffffffffffffffff166336dda7d56040518163ffffffff1660e01b8152600401602060405180830381865afa15801561092e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610952919061133a565b73ffffffffffffffffffffffffffffffffffffffff16929190610cd4565b6040517f05fe138b0000000000000000000000000000000000000000000000000000000081526004810184905230602482015260009073ffffffffffffffffffffffffffffffffffffffff8616906305fe138b906044016020604051808303816000875af11580156109e6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0a9190611357565b9050610a168382610a77565b8273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f6de63bb986f2779478e384365c03cc2e62f06b453856acca87d5a519ce02664960405160405180910390a35050505050565b6040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632e1a7d4d90602401600060405180830381600087803b158015610aff57600080fd5b505af1158015610b13573d6000803e3d6000fd5b50610b389250505073ffffffffffffffffffffffffffffffffffffffff831682610d6f565b5050565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015282917f00000000000000000000000000000000000000000000000000000000000000009091169063dd62ed3e90604401602060405180830381865afa158015610bd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf69190611357565b1015610b38576040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303816000875af1158015610cb0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103189190611318565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052610d69908590610ec9565b50505050565b80471015610dd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610107565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114610e33576040519150601f19603f3d011682016040523d82523d6000602084013e610e38565b606091505b5050905080610318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610107565b6000610f2b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16610fd59092919063ffffffff16565b8051909150156103185780806020019051810190610f499190611318565b610318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610107565b6060610fe48484600085610fee565b90505b9392505050565b606082471015611080576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610107565b843b6110e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610107565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516111119190611370565b60006040518083038185875af1925050503d806000811461114e576040519150601f19603f3d011682016040523d82523d6000602084013e611153565b606091505b509150915061116382828661116e565b979650505050505050565b6060831561117d575081610fe7565b82511561118d5782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b60005b838110156111dc5781810151838201526020016111c4565b83811115610d695750506000910152565b602081526000825180602084015261120c8160408501602087016111c1565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461126057600080fd5b50565b6000806040838503121561127657600080fd5b82356112818161123e565b946020939093013593505050565b6000806000606084860312156112a457600080fd5b83356112af8161123e565b925060208401356112bf8161123e565b9150604084013561ffff811681146112d657600080fd5b809150509250925092565b6000806000606084860312156112f657600080fd5b83356113018161123e565b92506020840135915060408401356112d68161123e565b60006020828403121561132a57600080fd5b81518015158114610fe757600080fd5b60006020828403121561134c57600080fd5b8151610fe78161123e565b60006020828403121561136957600080fd5b5051919050565b600082516113828184602087016111c1565b919091019291505056fea264697066735822122017fd7fc76e4a1efcf24b78a3417fad7ab9576f0a23aa756ddb211c5e2227aa9564736f6c634300080a003360806040523480156200001157600080fd5b5060405162002b8038038062002b80833981016040819052620000349162000122565b6001600160a01b0381166200008f5760405162461bcd60e51b815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640160405180910390fd5b6001600160a01b03811660008181526001602052604080822080546001600160601b0319166b204fce5e3e2502611000000090811790915590517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91620000f99190815260200190565b60405180910390a350600680546001600160a81b031916336101000260ff191617905562000154565b6000602082840312156200013557600080fd5b81516001600160a01b03811681146200014d57600080fd5b9392505050565b612a1c80620001646000396000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c806370a08231116100f9578063b4b5ea5711610097578063dd62ed3e11610071578063dd62ed3e14610503578063e7a324dc14610555578063f1127ed81461057c578063f2fde38b146105ee57600080fd5b8063b4b5ea57146104ca578063c3cda520146104dd578063d505accf146104f057600080fd5b806395d89b41116100d357806395d89b411461045b5780639742ca4614610497578063a9059cbb146104aa578063b0660c3d146104bd57600080fd5b806370a08231146103c7578063782d6fe11461040b5780637ecebe001461043b57600080fd5b806330adf81f11610166578063481c6a7511610140578063481c6a751461031e578063587cde1e146103435780635c19a95c146103795780636fcfff451461038c57600080fd5b806330adf81f14610298578063313ce567146102bf578063349dc329146102d957600080fd5b806320606b701161019757806320606b70146102545780632185810b1461027b57806323b872dd1461028557600080fd5b806306fdde03146101be578063095ea7b31461021057806318160ddd14610233575b600080fd5b6101fa6040518060400160405280600781526020017f47656172626f780000000000000000000000000000000000000000000000000081525081565b60405161020791906124a3565b60405180910390f35b61022361021e36600461253f565b610601565b6040519015158152602001610207565b6102466b204fce5e3e2502611000000081565b604051908152602001610207565b6102467f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b61028361070d565b005b610223610293366004612569565b6107ee565b6102467f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b6102c7601281565b60405160ff9091168152602001610207565b6007546102f99073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610207565b6006546102f990610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6102f96103513660046125a5565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6102836103873660046125a5565b61098a565b6103b261039a3660046125a5565b60046020526000908152604090205463ffffffff1681565b60405163ffffffff9091168152602001610207565b6102466103d53660046125a5565b73ffffffffffffffffffffffffffffffffffffffff166000908152600160205260409020546bffffffffffffffffffffffff1690565b61041e61041936600461253f565b610997565b6040516bffffffffffffffffffffffff9091168152602001610207565b6102466104493660046125a5565b60056020526000908152604090205481565b6101fa6040518060400160405280600481526020017f474541520000000000000000000000000000000000000000000000000000000081525081565b6102836104a53660046125a5565b610cae565b6102236104b836600461253f565b610e20565b6006546102239060ff1681565b61041e6104d83660046125a5565b610e5c565b6102836104eb3660046125d1565b610efa565b6102836104fe366004612629565b611310565b610246610511366004612693565b73ffffffffffffffffffffffffffffffffffffffff9182166000908152602081815260408083209390941682529190915220546bffffffffffffffffffffffff1690565b6102467fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b6105c561058a3660046126c6565b600360209081526000928352604080842090915290825290205463ffffffff81169064010000000090046bffffffffffffffffffffffff1682565b6040805163ffffffff90931683526bffffffffffffffffffffffff909116602083015201610207565b6102836105fc3660046125a5565b61187a565b6000807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83141561063f57506bffffffffffffffffffffffff610664565b6106618360405180606001604052806025815260200161285260259139611a15565b90505b3360008181526020818152604080832073ffffffffffffffffffffffffffffffffffffffff89168085529083529281902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff871690811790915590519081529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a360019150505b92915050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314610798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e616765720060448201526064015b60405180910390fd5b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f795b0e16c8da9807b0a215f3749bd6dbcc49fc0472183f4e446abb7dcbd9d00790600090a1565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081815260408083203380855290835281842054825160608101909352602580845291936bffffffffffffffffffffffff909116928592610856928892919061285290830139611a15565b90508673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156108a257506bffffffffffffffffffffffff82811614155b156109725760006108cc83836040518060600160405280603d8152602001612974603d9139611a67565b73ffffffffffffffffffffffffffffffffffffffff898116600081815260208181526040808320948a168084529482529182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff87169081179091559151918252939450919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505b61097d878783611ad5565b5060019695505050505050565b6109943382611e9c565b50565b6000438210610a28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f476561723a3a6765745072696f72566f7465733a206e6f74207965742064657460448201527f65726d696e656400000000000000000000000000000000000000000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff831660009081526004602052604090205463ffffffff1680610a63576000915050610707565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604081208491610a95600185612735565b63ffffffff90811682526020820192909252604001600020541611610b1b5773ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812090610ae5600184612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff1691506107079050565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020908152604080832083805290915290205463ffffffff16831015610b63576000915050610707565b600080610b71600184612735565b90505b8163ffffffff168163ffffffff161115610c565760006002610b968484612735565b610ba0919061275a565b610baa9083612735565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260036020908152604080832063ffffffff8581168552908352928190208151808301909252549283168082526401000000009093046bffffffffffffffffffffffff1691810191909152919250871415610c2a576020015194506107079350505050565b805163ffffffff16871115610c4157819350610c4f565b610c4c600183612735565b92505b5050610b74565b5073ffffffffffffffffffffffffffffffffffffffff8516600090815260036020908152604080832063ffffffff909416835292905220546bffffffffffffffffffffffff6401000000009091041691505092915050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314610d34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e6167657200604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff8116610db1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640161078f565b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f2f834d1c8c4b956018fff5faca4d99868ae635487424d9c265c257ccbc698c6a90600090a250565b600080610e45836040518060600160405280602681526020016128a760269139611a15565b9050610e52338583611ad5565b5060019392505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526004602052604081205463ffffffff1680610e94576000610ef3565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812090610ec5600184612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b9392505050565b604080518082018252600781527f47656172626f780000000000000000000000000000000000000000000000000060209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f028ef9f797075f74ac647c65fde04fb0f128c2d59fd40f45732269917642fd4681840152466060820152306080808301919091528351808303909101815260a0820184528051908301207fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60c083015273ffffffffffffffffffffffffffffffffffffffff8a1660e08301526101008201899052610120808301899052845180840390910181526101408301909452835193909201929092207f19010000000000000000000000000000000000000000000000000000000000006101608401526101628301829052610182830181905290916000906101a201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa1580156110d8573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166111a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f476561723a3a64656c656761746542795369673a20696e76616c69642073696760448201527f6e61747572650000000000000000000000000000000000000000000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff811660009081526005602052604081208054916111d7836127a4565b919050558914611269576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f476561723a3a64656c656761746542795369673a20696e76616c6964206e6f6e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161078f565b874211156112f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f476561723a3a64656c656761746542795369673a207369676e6174757265206560448201527f7870697265640000000000000000000000000000000000000000000000000000606482015260840161078f565b611303818b611e9c565b505050505b505050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86141561134d57506bffffffffffffffffffffffff611372565b61136f8660405180606001604052806024815260200161291c60249139611a15565b90505b604080518082018252600781527f47656172626f780000000000000000000000000000000000000000000000000060209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f028ef9f797075f74ac647c65fde04fb0f128c2d59fd40f45732269917642fd4681840152466060820152306080808301919091528351808303909101815260a0909101835280519082012073ffffffffffffffffffffffffffffffffffffffff8b166000908152600590925291812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918c918c918c919086611472836127a4565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810188905260e001604051602081830303815290604052805190602001209050600082826040516020016115199291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff8b169284019290925260608301899052608083018890529092509060019060a0016020604051602081039080840390855afa1580156115a2573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661164a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a7065726d69743a20696e76616c6964207369676e617475726500604482015260640161078f565b8b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146116df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f476561723a3a7065726d69743a20756e617574686f72697a6564000000000000604482015260640161078f565b88421115611749576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a7065726d69743a207369676e6174757265206578706972656400604482015260640161078f565b846000808e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508a73ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258760405161186491906bffffffffffffffffffffffff91909116815260200190565b60405180910390a3505050505050505050505050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314611900576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e6167657200604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff811661197d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640161078f565b60065460405173ffffffffffffffffffffffffffffffffffffffff80841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36006805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b6000816c010000000000000000000000008410611a5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b509192915050565b6000836bffffffffffffffffffffffff16836bffffffffffffffffffffffff1611158290611ac2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b50611acd83856127dd565b949350505050565b60065460ff1680611b025750600654610100900473ffffffffffffffffffffffffffffffffffffffff1633145b80611b24575060075473ffffffffffffffffffffffffffffffffffffffff1633145b611b8a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f476561723a3a7472616e73666572732061726520666f7262696464656e000000604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff8316611c2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603c60248201527f476561723a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260448201527f616e736665722066726f6d20746865207a65726f206164647265737300000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff8216611cd0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f476561723a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260448201527f616e7366657220746f20746865207a65726f2061646472657373000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260016020908152604091829020548251606081019093526036808452611d2d936bffffffffffffffffffffffff90921692859291906129b190830139611a67565b73ffffffffffffffffffffffffffffffffffffffff848116600090815260016020908152604080832080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff968716179055928616825290829020548251606081019093526030808452611dbf949190911692859290919061287790830139611f50565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260409182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff968716179055905193851684529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a373ffffffffffffffffffffffffffffffffffffffff808416600090815260026020526040808220548584168352912054611e9792918216911683611fc1565b505050565b73ffffffffffffffffffffffffffffffffffffffff808316600081815260026020818152604080842080546001845282862054949093528787167fffffffffffffffffffffffff000000000000000000000000000000000000000084168117909155905191909516946bffffffffffffffffffffffff9092169391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4611f4a828483611fc1565b50505050565b600080611f5d8486612802565b9050846bffffffffffffffffffffffff16816bffffffffffffffffffffffff1610158390611fb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b50949350505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561200b57506000816bffffffffffffffffffffffff16115b15611e975773ffffffffffffffffffffffffffffffffffffffff8316156120fd5773ffffffffffffffffffffffffffffffffffffffff831660009081526004602052604081205463ffffffff1690816120655760006120c4565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812090612096600185612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b905060006120eb82856040518060600160405280602881526020016128cd60289139611a67565b90506120f9868484846121e2565b5050505b73ffffffffffffffffffffffffffffffffffffffff821615611e975773ffffffffffffffffffffffffffffffffffffffff821660009081526004602052604081205463ffffffff1690816121525760006121b1565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812090612183600185612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b905060006121d882856040518060600160405280602781526020016128f560279139611f50565b9050611308858484845b60006122064360405180606001604052806034815260200161294060349139612465565b905060008463ffffffff1611801561226d575073ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812063ffffffff831691612251600188612735565b63ffffffff908116825260208201929092526040016000205416145b156123035773ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812083916122a4600188612735565b63ffffffff168152602081019190915260400160002080546bffffffffffffffffffffffff92909216640100000000027fffffffffffffffffffffffffffffffff000000000000000000000000ffffffff9092169190911790556123fe565b60408051808201825263ffffffff80841682526bffffffffffffffffffffffff808616602080850191825273ffffffffffffffffffffffffffffffffffffffff8b166000908152600382528681208b8616825290915294909420925183549451909116640100000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009094169116179190911790556123a5846001612832565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260046020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff929092169190911790555b604080516bffffffffffffffffffffffff80861682528416602082015273ffffffffffffffffffffffffffffffffffffffff8716917fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724910160405180910390a25050505050565b6000816401000000008410611a5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91905b600060208083528351808285015260005b818110156124d0578581018301518582016040015282016124b4565b818111156124e2576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461253a57600080fd5b919050565b6000806040838503121561255257600080fd5b61255b83612516565b946020939093013593505050565b60008060006060848603121561257e57600080fd5b61258784612516565b925061259560208501612516565b9150604084013590509250925092565b6000602082840312156125b757600080fd5b610ef382612516565b803560ff8116811461253a57600080fd5b60008060008060008060c087890312156125ea57600080fd5b6125f387612516565b9550602087013594506040870135935061260f606088016125c0565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a03121561264457600080fd5b61264d88612516565b965061265b60208901612516565b95506040880135945060608801359350612677608089016125c0565b925060a0880135915060c0880135905092959891949750929550565b600080604083850312156126a657600080fd5b6126af83612516565b91506126bd60208401612516565b90509250929050565b600080604083850312156126d957600080fd5b6126e283612516565b9150602083013563ffffffff811681146126fb57600080fd5b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600063ffffffff8381169083168181101561275257612752612706565b039392505050565b600063ffffffff80841680612798577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156127d6576127d6612706565b5060010190565b60006bffffffffffffffffffffffff8381169083168181101561275257612752612706565b60006bffffffffffffffffffffffff80831681851680830382111561282957612829612706565b01949350505050565b600063ffffffff8083168185168083038211156128295761282961270656fe476561723a3a617070726f76653a20616d6f756e7420657863656564732039362062697473476561723a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e74206f766572666c6f7773476561723a3a7472616e736665723a20616d6f756e7420657863656564732039362062697473476561723a3a5f6d6f7665566f7465733a20766f746520616d6f756e7420756e646572666c6f7773476561723a3a5f6d6f7665566f7465733a20766f746520616d6f756e74206f766572666c6f7773476561723a3a7065726d69743a20616d6f756e7420657863656564732039362062697473476561723a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d62657220657863656564732033322062697473476561723a3a7472616e7366657246726f6d3a207472616e7366657220616d6f756e742065786365656473207370656e64657220616c6c6f77616e6365476561723a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e7420657863656564732062616c616e6365a26469706673582212201b84fd7789a35c022f692420863210a30e82d2405659f5a28275d433fa53467f64736f6c634300080a003360806040526016805460ff1916905534801561001a57600080fd5b506040516110a73803806110a7833981016040819052610039916100b6565b600080546001600160a01b038085166001600160a01b0319928316179092556003805492841692909116919091179055610080600a6b033b2e3c9fd0803ce80000006100e9565b60075550506b033b2e3c9fd0803ce800000060155561010b565b80516001600160a01b03811681146100b157600080fd5b919050565b600080604083850312156100c957600080fd5b6100d28361009a565b91506100e06020840161009a565b90509250929050565b60008261010657634e487b7160e01b600052601260045260246000fd5b500490565b610f8d8061011a6000396000f3fe608060405234801561001057600080fd5b50600436106102e95760003560e01c806367c99d5811610191578063c5f956af116100e3578063dbcb313b11610097578063f11a648711610071578063f11a648714610320578063f3fdb15a146105f1578063fe14112d1461061157600080fd5b8063dbcb313b146105d6578063e941fa78146105df578063ef8d9603146105e857600080fd5b8063cb3905e1116100c8578063cb3905e1146105c4578063cf33d95514610320578063d0efe753146105cd57600080fd5b8063c5f956af14610588578063ca9505e4146105a857600080fd5b80639aa5d46211610145578063b6ac642a1161011f578063b6ac642a14610567578063bb04b19314610567578063bf28068b1461057557600080fd5b80639aa5d46214610544578063a4e8273e14610557578063b3554a0a1461055e57600080fd5b8063788c6bfe11610176578063788c6bfe146104ef5780638456cb591461050157806396df5dc01461053157600080fd5b806367c99d58146104de57806374375359146104e757600080fd5b806336dda7d51161024a5780634d778ad1116101fe57806354fd4d50116101d857806354fd4d50146104c05780635c975abb146104c8578063609ae317146104d557600080fd5b80634d778ad114610491578063532fe502146104a45780635427c938146104ad57600080fd5b80633f4ba83a1161022f5780633f4ba83a1461045257806345d31f9d1461047f5780634c19386c1461048857600080fd5b806336dda7d51461040f5780633e163df01461042f57600080fd5b80632495a599116102a157806329f3d3b61161028657806329f3d3b6146103b35780632a3354c9146103bc5780632e97ca21146103dc57600080fd5b80632495a599146103735780632954018c1461039357600080fd5b8063078c4781116102d2578063078c4781146103205780630fce70fb146103335780631e16e4fc1461033b57600080fd5b8063030dbb04146102ee57806305fe138b1461030a575b600080fd5b6102f760105481565b6040519081526020015b60405180910390f35b6102f7610318366004610ce8565b600092915050565b61033161032e366004610d14565b50565b005b6015546102f7565b61034e610349366004610d2f565b610618565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610301565b60035461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b60005461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6102f760095481565b600a5461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103ff6103ea366004610d14565b60066020526000908152604090205460ff1681565b6040519015158152602001610301565b60055461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103ff61043d366004610d14565b60146020526000908152604090205460ff1681565b610331601680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b6102f760075481565b6102f760015481565b6102f761049f366004610d2f565b61064f565b6102f760115481565b6102f76104bb366004610d2f565b61066d565b6102f7600181565b6016546103ff9060ff1681565b6102f760085481565b6102f7600d5481565b6102f7610685565b6b033b2e3c9fd0803ce80000006102f7565b610331601680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b61033161053f366004610d2f565b601555565b610331610552366004610d48565b505050565b60016102f7565b6102f7600e5481565b61033161032e366004610d2f565b610331610583366004610ce8565b61071d565b60135461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103316105b6366004610d7d565b600b92909255600c55600d55565b6102f7600c5481565b6102f7600b5481565b6102f760155481565b6102f7600f5481565b6102f760025481565b60125461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b60006102f7565b6004818154811061062857600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6000610667826b033b2e3c9fd0803ce800000061077a565b92915050565b6000610667826b033b2e3c9fd0803ce80000006108e9565b6003546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156106f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107189190610da9565b905090565b6009829055600a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691909117909155600354610776911682846109fe565b5050565b60408051808201909152600281527f4d330000000000000000000000000000000000000000000000000000000000006020820152600090826107f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b60405180910390fd5b506000610800600284610e72565b90506b033b2e3c9fd0803ce8000000610839827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610ead565b6108439190610e72565b8411156040518060400160405280600281526020017f4d31000000000000000000000000000000000000000000000000000000000000815250906108b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b5082816108cd6b033b2e3c9fd0803ce800000087610ec4565b6108d79190610f01565b6108e19190610e72565b949350505050565b60008215806108f6575081155b1561090357506000610667565b8161091b60026b033b2e3c9fd0803ce8000000610e72565b610945907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610ead565b61094f9190610e72565b8311156040518060400160405280600281526020017f4d31000000000000000000000000000000000000000000000000000000000000815250906109c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b506b033b2e3c9fd0803ce80000006109d9600282610e72565b6109e38486610ec4565b6109ed9190610f01565b6109f79190610e72565b9392505050565b6040805173ffffffffffffffffffffffffffffffffffffffff848116602483015260448083018590528351808403909101815260649092018352602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65649084015261055292869291600091610ac9918516908490610b73565b8051909150156105525780806020019051810190610ae79190610f19565b610552576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016107e9565b60606108e1848460008585843b610be6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107e9565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051610c0f9190610f3b565b60006040518083038185875af1925050503d8060008114610c4c576040519150601f19603f3d011682016040523d82523d6000602084013e610c51565b606091505b5091509150610c61828286610c6c565b979650505050505050565b60608315610c7b5750816109f7565b825115610c8b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ce357600080fd5b919050565b60008060408385031215610cfb57600080fd5b82359150610d0b60208401610cbf565b90509250929050565b600060208284031215610d2657600080fd5b6109f782610cbf565b600060208284031215610d4157600080fd5b5035919050565b600080600060608486031215610d5d57600080fd5b83359250610d6d60208501610cbf565b9150604084013590509250925092565b600080600060608486031215610d9257600080fd5b505081359360208301359350604090920135919050565b600060208284031215610dbb57600080fd5b5051919050565b60005b83811015610ddd578181015183820152602001610dc5565b83811115610dec576000848401525b50505050565b6020815260008251806020840152610e11816040850160208701610dc2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082610ea8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600082821015610ebf57610ebf610e43565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610efc57610efc610e43565b500290565b60008219821115610f1457610f14610e43565b500190565b600060208284031215610f2b57600080fd5b815180151581146109f757600080fd5b60008251610f4d818460208701610dc2565b919091019291505056fea26469706673582212204edb887d94928b3914f60ab48df0182da9eb30ddbb7021b164cc728b60a655d564736f6c634300080a003360e06040523480156200001157600080fd5b5060405162013af238038062013af2833981016040819052620000349162000630565b826001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000073573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000999190620007bf565b620000a433620004ab565b6001600160a01b038116608081905260408051630873769560e01b815290516308737695916004808201926020929091908290030181865afa158015620000ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001159190620007bf565b6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000153573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001799190620007bf565b6001600160a01b0390811660a052841660c0525060405183906200019d9062000519565b6001600160a01b039091168152602001604051809103906000f080158015620001ca573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b0392909216918217905560608301516080840151604051620002029062000527565b6001600160a01b03938416815292909116602083015215156040820152606001604051809103906000f0801580156200023f573d6000803e3d6000fd5b50600280546001600160a01b0319166001600160a01b0392909216919091179055604051600090620002746020820162000535565b601f1982820381018352601f909101166040819052600154600254620002b0926001600160a01b039283169291909116908790602001620007e6565b60408051601f1981840301815290829052620002d09291602001620008e8565b60408051601f19818403018152919052905060006200035982848151602092830120604080517fff00000000000000000000000000000000000000000000000000000000000000818601523060601b6001600160601b03191660218201526035810193909352605580840192909252805180840390920182526075909201909152805191012090565b600154604051634fafc35760e11b81526001600160a01b038084166004830152929350911690639f5f86ae90602401600060405180830381600087803b158015620003a357600080fd5b505af1158015620003b8573d6000803e3d6000fd5b50505050620003ce8284620004fb60201b60201c565b600380546001600160a01b0319166001600160a01b0383811691821790925560015460408051630304b08760e61b81529051919093169263c12c21c09160048083019260209291908290030181865afa15801562000430573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004569190620007bf565b6001600160a01b031614620004a05760405162461bcd60e51b815260206004820152600c60248201526b496e636f727265637420434d60a01b604482015260640160405180910390fd5b505050505062000909565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008183516020850134f59050803b6200051457600080fd5b505050565b6158e8806200243683390190565b615e978062007d1e83390190565b615f3d806200dbb583390190565b6001600160a01b03811681146200055957600080fd5b50565b8051620005698162000543565b919050565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b0381118282101715620005a957620005a96200056e565b60405290565b604080519081016001600160401b0381118282101715620005a957620005a96200056e565b604051601f8201601f191681016001600160401b0381118282101715620005ff57620005ff6200056e565b604052919050565b80516001600160801b03811681146200056957600080fd5b805180151581146200056957600080fd5b6000806000606084860312156200064657600080fd5b8351620006538162000543565b602085810151919450906001600160401b03808211156200067357600080fd5b9086019060a082890312156200068857600080fd5b6200069262000584565b6200069d8362000607565b8152620006ac84840162000607565b8482015260408084015183811115620006c457600080fd5b8401601f81018b13620006d657600080fd5b805184811115620006eb57620006eb6200056e565b620006fb878260051b01620005d4565b818152878101955060069190911b82018701908c8211156200071c57600080fd5b918701915b818310156200077e5783838e0312156200073b5760008081fd5b62000745620005af565b8351620007528162000543565b81528389015161ffff811681146200076a5760008081fd5b818a01528652948701949183019162000721565b8484015250620007939050606085016200055c565b6060830152620007a6608085016200061f565b6080830152979097015195989697509495945050505050565b600060208284031215620007d257600080fd5b8151620007df8162000543565b9392505050565b600060018060a01b0380861683526020818616818501526040606081860152610100850160018060801b038088511660608801528084890151166080880152508187015160a080880152818151808452610120890191508583019350600092505b808310156200087857835180518816835286015161ffff168683015292850192600192909201919084019062000847565b5060608901516001600160a01b031660c0890152608090980151151560e0909701969096525094979650505050505050565b6000815160005b81811015620008cd5760208185018101518683015201620008b1565b81811115620008dd576000828601525b509290920192915050565b600062000901620008fa8386620008aa565b84620008aa565b949350505050565b60805160a05160c051611ad3620009636000396000818161010a0152610ea00152600081816103790152610b170152600081816101680152818161068c01528181610a4d01528181610b860152610c190152611ad36000f3fe6080604052600436106100f35760003560e01c80638da5cb5b1161008a578063ebf0c71711610059578063ebf0c71714610367578063f2fde38b1461039b578063f4747c58146103bb578063f9aa028a146103db57600080fd5b80638da5cb5b1461025a57806394ca2cb5146102855780639c4ae2d014610327578063c12c21c01461033a57600080fd5b80633e0b1a23116100c65780633e0b1a23146101ce5780634ef501ac146101e3578063715018a614610230578063805abe6a1461024557600080fd5b806316f0115b146100f85780632954018c146101565780632f7a18811461018a578063318d0d10146101b7575b600080fd5b34801561010457600080fd5b5061012c7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561016257600080fd5b5061012c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561019657600080fd5b5060025461012c9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156101c357600080fd5b506101cc610408565b005b3480156101da57600080fd5b506101cc610498565b3480156101ef57600080fd5b506102036101fe366004611726565b610521565b6040805173ffffffffffffffffffffffffffffffffffffffff93841681529290911660208301520161014d565b34801561023c57600080fd5b506101cc610567565b34801561025157600080fd5b506101cc6105f2565b34801561026657600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff1661012c565b34801561029157600080fd5b5061012c6102a03660046117e6565b8151602092830120604080517fff00000000000000000000000000000000000000000000000000000000000000818601523060601b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660218201526035810193909352605580840192909252805180840390920182526075909201909152805191012090565b6101cc6103353660046117e6565b6107d8565b34801561034657600080fd5b5060015461012c9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561037357600080fd5b5061012c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103a757600080fd5b506101cc6103b63660046118c0565b6107f5565b3480156103c757600080fd5b506101cc6103d63660046118e4565b610925565b3480156103e757600080fd5b5060035461012c9073ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff16331461048e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b610496610a49565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610519576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b61048e610b82565b6004818154811061053157600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff91821692501682565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b61049660006116b1565b60005473ffffffffffffffffffffffffffffffffffffffff163314610673576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b3073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106f5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071991906119c4565b73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610763573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078791906119c4565b73ffffffffffffffffffffffffffffffffffffffff1614156107d5576040517fbdebb83f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33ff5b60008183516020850134f59050803b6107f057600080fd5b505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b73ffffffffffffffffffffffffffffffffffffffff8116610919576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610485565b610922816116b1565b50565b60005473ffffffffffffffffffffffffffffffffffffffff1633146109a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b805160005b818110156107f05760048382815181106109c7576109c76119e1565b602090810291909101810151825460018082018555600094855293839020825160029092020180547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff938416178255929093015192840180549092169216919091179055016109ab565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ab6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ada91906119c4565b6040517ff2fde38b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301529192509082169063f2fde38b90602401600060405180830381600087803b158015610b6757600080fd5b505af1158015610b7b573d6000803e3d6000fd5b5050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1391906119c4565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca691906119c4565b60045490915060005b81811015610dd4576003546004805473ffffffffffffffffffffffffffffffffffffffff90921691637bccacee919084908110610cee57610cee6119e1565b906000526020600020906002020160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660048481548110610d3357610d336119e1565b600091825260209091206002909102015460405160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b158015610db157600080fd5b505af1158015610dc5573d6000803e3d6000fd5b50505050806001019050610caf565b506001546040517fe26b2f6300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529084169063e26b2f6390602401600060405180830381600087803b158015610e4257600080fd5b505af1158015610e56573d6000803e3d6000fd5b50506001546040517fcf33d95500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201527f0000000000000000000000000000000000000000000000000000000000000000909116925063cf33d9559150602401600060405180830381600087803b158015610ee857600080fd5b505af1158015610efc573d6000803e3d6000fd5b50505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f919190611a10565b905060005b818110156116ab576003546040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810183905260009173ffffffffffffffffffffffffffffffffffffffff1690635094cb4f90602401602060405180830381865afa15801561100e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103291906119c4565b6001546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80841660048301529293506000929091169063fdd5764590602401602060405180830381865afa1580156110a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110cc91906119c4565b905060008173ffffffffffffffffffffffffffffffffffffffff1663ce30bbdb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561111b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113f9190611a29565b9050600c81601081111561115557611155611a4a565b14156116225760008273ffffffffffffffffffffffffffffffffffffffff166320b2c1516040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111cc91906119c4565b905060008373ffffffffffffffffffffffffffffffffffffffff1663927188d96040518163ffffffff1660e01b8152600401602060405180830381865afa15801561121b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123f91906119c4565b905060008473ffffffffffffffffffffffffffffffffffffffff166399253ac06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561128e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b291906119c4565b6040517f9dcb511a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152919250908a169063e8a97a3e9083908390639dcb511a90602401602060405180830381865afa15801561132c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135091906119c4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156113bd57600080fd5b505af11580156113d1573d6000803e3d6000fd5b50506040517f9dcb511a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301528c16925063e8a97a3e915085908390639dcb511a90602401602060405180830381865afa15801561144b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061146f91906119c4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156114dc57600080fd5b505af11580156114f0573d6000803e3d6000fd5b50506003546001546040517f7832743800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301529283169450633e7c88d69350879290911690637832743890602401602060405180830381865afa158015611573573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115979190611a79565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015261ffff166024820152604401600060405180830381600087803b15801561160657600080fd5b505af115801561161a573d6000803e3d6000fd5b505050505050505b600d81601081111561163657611636611a4a565b141561169d578173ffffffffffffffffffffffffffffffffffffffff16639b51ecd36040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561168457600080fd5b505af1158015611698573d6000803e3d6000fd5b505050505b836001019350505050610f96565b50505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561173857600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156117915761179161173f565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156117de576117de61173f565b604052919050565b600080604083850312156117f957600080fd5b823567ffffffffffffffff8082111561181157600080fd5b818501915085601f83011261182557600080fd5b81356020828211156118395761183961173f565b611869817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011601611797565b9250818352878183860101111561187f57600080fd5b8181850182850137600091830181019190915290969401359450505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461092257600080fd5b6000602082840312156118d257600080fd5b81356118dd8161189e565b9392505050565b600060208083850312156118f757600080fd5b823567ffffffffffffffff8082111561190f57600080fd5b818501915085601f83011261192357600080fd5b8135818111156119355761193561173f565b611943848260051b01611797565b818152848101925060069190911b83018401908782111561196357600080fd5b928401925b818410156119b957604084890312156119815760008081fd5b61198961176e565b84356119948161189e565b8152848601356119a38161189e565b8187015283526040939093019291840191611968565b979650505050505050565b6000602082840312156119d657600080fd5b81516118dd8161189e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215611a2257600080fd5b5051919050565b600060208284031215611a3b57600080fd5b8151601181106118dd57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060208284031215611a8b57600080fd5b815161ffff811681146118dd57600080fdfea264697066735822122090f5e4310a8b66bfdd7fdfbe64bc5b98570e7c1a415ffb0ced3c857cf6c5b14064736f6c634300080a00336101606040526000805462ff00001916620c00001790553480156200002357600080fd5b50604051620058e8380380620058e8833981016040819052620000469162000537565b806001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000085573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ab919062000537565b6000805460ff191690556001600160a01b038116620000dd57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200011c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000142919062000537565b6001600160a01b03166080816001600160a01b031681525050506000816001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200019d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c3919062000537565b6001600160a01b03831661010081905260e081905260408051632495a59960e01b81529051929350600092632495a599916004808201926020929091908290030181865afa1580156200021a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000240919062000537565b6001600160a01b03811660c05290506200025a8162000472565b816001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000299573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002bf919062000537565b6001600160a01b0316610120816001600160a01b031681525050816001600160a01b03166377532ed96040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000318573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033e919062000537565b6001600160a01b0316610140816001600160a01b031681525050816001600160a01b031663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000397573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003bd919062000537565b6001600001600a6101000a8154816001600160a01b0302191690836001600160a01b03160217905550816001600160a01b0316639068a8686040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000425573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044b919062000537565b6001600160a01b031660a0525050600380546001600160a01b031916331790555062000588565b6001600160a01b03811660009081526006602052604090205415620004aa57604051632e5a5c7760e01b815260040160405180910390fd5b61010060055410620004cf57604051631cbbe18560e01b815260040160405180910390fd5b600580546001600160a01b0383166000818152600660209081526040808320600190951b948590558483526004909152812091909155825491929062000515836200055e565b91905055505050565b6001600160a01b03811681146200053457600080fd5b50565b6000602082840312156200054a57600080fd5b815162000557816200051e565b9392505050565b60006000198214156200058157634e487b7160e01b600052601160045260246000fd5b5060010190565b60805160a05160c05160e051610100516101205161014051615248620006a0600039600081816107e20152818161371001526137c501526000818161052f01526136780152600081816103d301528181610e5701528181610ebb015281816124ff0152818161265a01528181612aa101528181612b8c01528181612c4e01528181612d0d0152613b8f015260006105a401526000818161062701528181610d2201528181610db301528181610e0001528181610e3601528181610f3f0152818161203a01528181612b6b015281816130ee015281816134dc015281816135a90152613fe601526000818161081c01528181610fe101526124c20152600081816107a80152818161118401526122cb01526152486000f3fe608060405234801561001057600080fd5b50600436106103415760003560e01c8063830aa745116101bd578063a70bc542116100f9578063e75538c7116100a2578063f9aa028a1161007c578063f9aa028a1461089d578063fdd57645146108bd578063fe47cde7146108f3578063ff6875431461091357600080fd5b8063e75538c714610864578063e958b70414610877578063f67c5bd01461088a57600080fd5b8063db7ceb80116100d3578063db7ceb8014610817578063dc2b21c11461083e578063e1998cf91461085157600080fd5b8063a70bc542146107ca578063c5e10eef146107dd578063d48bfca71461080457600080fd5b806394cf073a116101665780639f5f86ae116101405780639f5f86ae146107745780639fd12b7714610787578063a366f49614610790578063a50cf2c8146107a357600080fd5b806394cf073a146106f557806395373018146107085780639af1d35a1461071b57600080fd5b80638991b2f1116101975780638991b2f1146106af5780638fe3f93f146106cf578063944ac59f146106e257600080fd5b8063830aa7451461066f5780638345f26e146106825780638456cb59146106a757600080fd5b8063458936f51161028c578063570a7af2116102355780636ce4074a1161020f5780636ce4074a146105ef5780636e98e5e41461060f5780636f307dc314610622578063783274381461064957600080fd5b8063570a7af21461059f5780635c975abb146105c6578063654a9eda146105dc57600080fd5b80635063524a116102665780635063524a1461055157806351e3f1601461058457806354fd4d501461059757600080fd5b8063458936f51461050e57806346fb371d146105175780634f0e0ef31461052a57600080fd5b80632630c12f116102ee5780633192195c116102c85780633192195c146104be5780633e8297ca146104e65780633f4ba83a1461050657600080fd5b80632630c12f1461045857806329df0b93146104845780632f7a18811461049757600080fd5b806316f0115b1161031f57806316f0115b146103ce578063172c48c7146103f55780632362a2d81461043757600080fd5b8063055ee9b5146103465780630d8f9cee146103a657806311ca4fc2146103bb575b600080fd5b61037c610354366004614a87565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6103b96103b4366004614aa4565b610949565b005b6103b96103c9366004614aa4565b610a76565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b610408610403366004614add565b610b4e565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835261ffff90911660208301520161039d565b61044a610445366004614b13565b610b66565b60405190815260200161039d565b6001546a0100000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1661037c565b6103b9610492366004614a87565b6110be565b60005461037c906301000000900473ffffffffffffffffffffffffffffffffffffffff1681565b6104d16104cc366004614a87565b611122565b6040805192835260208301919091520161039d565b61044a6104f4366004614a87565b60096020526000908152604090205481565b6103b9611156565b61044a60055481565b6103b9610525366004614b95565b611244565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b61056461055f366004614be6565b61149b565b60408051948552602085019390935291830152606082015260800161039d565b6103b9610592366004614aa4565b611602565b61044a600281565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b60005460ff16604051901515815260200161039d565b6103b96105ea366004614c21565b611703565b6106026105fd366004614d40565b611bbb565b60405161039d9190614e5b565b6103b961061d366004614aa4565b611e8e565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b61065c610657366004614a87565b612036565b60405161ffff909116815260200161039d565b6103b961067d366004614b95565b61210f565b6000546106959062010000900460ff1681565b60405160ff909116815260200161039d565b6103b961229d565b61044a6106bd366004614a87565b60086020526000908152604090205481565b61037c6106dd366004614e6e565b612389565b6103b96106f0366004614ea5565b612718565b61044a610703366004614f0a565b612845565b6103b9610716366004614a87565b612e5a565b6001546040805161ffff808416825262010000840481166020830152640100000000840481169282019290925266010000000000008304821660608201526801000000000000000090920416608082015260a00161039d565b6103b9610782366004614a87565b612f85565b61044a60075481565b6103b961079e366004614add565b613045565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b96107d8366004614f4c565b61309b565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b9610812366004614a87565b613221565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b961084c366004614f81565b61327b565b6103b961085f366004614aa4565b613306565b610408610872366004614add565b6134c9565b61037c610885366004614a87565b613541565b61044a610898366004614a87565b6135a5565b60035461037c9073ffffffffffffffffffffffffffffffffffffffff1681565b61037c6108cb366004614a87565b600b6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b600c5461037c9073ffffffffffffffffffffffffffffffffffffffff1681565b61037c610921366004614a87565b600a6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561099b57506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b156109d2576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff1615610a14576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055610a4a828261362e565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b60035473ffffffffffffffffffffffffffffffffffffffff163314610ac7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805473ffffffffffffffffffffffffffffffffffffffff9384166301000000027fffffffffffffffffff0000000000000000000000000000000000000000ffffff90911617905560018054919092166a0100000000000000000000027fffff0000000000000000000000000000000000000000ffffffffffffffffffff909116179055565b600080610b5d6001841b6134c9565b91509150915091565b6000805460ff1615610bd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064015b60405180910390fd5b600054610100900460ff1615610c1b576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff163314610ca0576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610cab89613541565b90506000806000806000610cbe86611122565b9094509050610ccf8c8e868461149b565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152939b5093985090955093506000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015610d6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8f9190614fa4565b9050610d9b8887614fec565b610da6906001614fec565b811115610de657610de1877f00000000000000000000000000000000000000000000000000000000000000008d60018c8b870303038d61366e565b610e30565b610e3073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168d8960018a8d01869003016138c0565b610e7e877f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000089600061366e565b6040517fca9505e40000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604481018490527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ca9505e490606401600060405180830381600087803b158015610f1457600080fd5b505af1158015610f28573d6000803e3d6000fd5b50505050505050506001841115610f6757610f67837f00000000000000000000000000000000000000000000000000000000000000008d87600061366e565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260086020526040902054861916610f9c8489888461395b565b6040517f89b77b3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f000000000000000000000000000000000000000000000000000000000000000016906389b77b3e90602401600060405180830381600087803b15801561102557600080fd5b505af1158015611039573d6000803e3d6000fd5b50505073ffffffffffffffffffffffffffffffffffffffff909c16600090815260026020526040812080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550929a9950505050505050505050565b6000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314611116576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61111f81613a35565b50565b60008060008061113185613aa6565b91955092509050816111438286615004565b61114d9190615041565b92505050915091565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156111e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611204919061507c565b61123a576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611242613c24565b565b60005460ff16156112b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156112f3576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100178155338152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff9081169084161480159061137457506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b80156113985750600c5473ffffffffffffffffffffffffffffffffffffffff163314155b806113b7575073ffffffffffffffffffffffffffffffffffffffff8316155b156113ee576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113f7826135a5565b61142d576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061143885613541565b9050611448838583856000613d05565b61146c5761145b83858360006001613d05565b5061146a838583856001613d05565b505b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b6001546000908190819081906127109061ffff166114b98888615099565b6114c39190615004565b6114cd9190615041565b6114d79086614fec565b935060018760028111156114ed576114ed6150b0565b1415611587576001546000906127109061151390640100000000900461ffff168b615004565b61151d9190615041565b6001549091506127109061153b9062010000900461ffff168b615004565b6115459190615041565b61154f9086614fec565b94508481111561156657600185820303935061156a565b8094505b85811061157b578585039250611581565b84860391505b506115f7565b600287600281111561159b5761159b6150b0565b14156115f157600154600090612710906115c59068010000000000000000900461ffff168b615004565b6115cf9190615041565b6001549091506127109061153b906601000000000000900461ffff168b615004565b84840391505b945094509450949050565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561165457506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b1561168b576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff16156116cd576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055610a4a8282613ea6565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561175557506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b1561178c576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff16156117ce576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790556118048584613ea6565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152600091908616906370a0823190602401602060405180830381865afa158015611874573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118989190614fa4565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529192506000918616906370a0823190602401602060405180830381865afa15801561190a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192e9190614fa4565b60015490915060009081906a0100000000000000000000900473ffffffffffffffffffffffffffffffffffffffff16635cecbd0e61196c8689615099565b8a6119778988615099565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152600481019390935273ffffffffffffffffffffffffffffffffffffffff918216602484015260448301528a1660648201526084016040805180830381865afa1580156119f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1791906150df565b9150915060018411611a2d57611a2d898961362e565b611a3687612036565b611a449061ffff1682615004565b9050611a4f88612036565b611a5d9061ffff1683615004565b9150818110611a7857611a6f89613a35565b5050505061146c565b73ffffffffffffffffffffffffffffffffffffffff891660009081526009602052604081205483611ab56b033b2e3c9fd0803ce800000085615004565b611abf9190615041565b611ad5906b033b2e3c9fd0803ce8000000615099565b611adf9190614fec565b60015490915061271090611b0a906b033b2e3c9fd0803ce80000009062010000900461ffff16615004565b611b149190615041565b8111611b555773ffffffffffffffffffffffffffffffffffffffff8a166000908152600960205260409020819055611b4b8a613a35565b505050505061146c565b611b5e8a613f56565b50505073ffffffffffffffffffffffffffffffffffffffff871660009081526009602052604090206001905550505050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b6060611bc960005460ff1690565b15611c30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff1615611c72576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100178155338152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff908116908416141580611ce7575073ffffffffffffffffffffffffffffffffffffffff8316155b15611d3d57600c5473ffffffffffffffffffffffffffffffffffffffff163314611d3d576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611d4885613541565b90508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167faed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab0360405160405180910390a36040517f1cff79cd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821690631cff79cd90611df89087908790600401615103565b6000604051808303816000875af1158015611e17573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611e5d9190810190615132565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905595945050505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314611edf576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821615611f4f5773ffffffffffffffffffffffffffffffffffffffff8281166000908152600a6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169183169190911790555b73ffffffffffffffffffffffffffffffffffffffff811615611fbf5773ffffffffffffffffffffffffffffffffffffffff8181166000908152600b6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169184169190911790555b73ffffffffffffffffffffffffffffffffffffffff811673cccccccccccccccccccccccccccccccccccccccc141561203257600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790555b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120ba5750506001547e01000000000000000000000000000000000000000000000000000000000000900461ffff1690565b60006120c5836135a5565b9050806120fe576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612107816134c9565b949350505050565b60005460ff161561217c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156121be576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff163314612243576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61224d8383613ea6565b61226f73ffffffffffffffffffffffffffffffffffffffff83168585846138c0565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555050565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015612327573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061234b919061507c565b612381576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112426142d4565b6000805460ff16156123f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff1615612439576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff1633146124be576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166321d18456857f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612568573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061258c9190614fa4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168152600481019290925260248201526044016020604051808303816000875af11580156125e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061260b91906151a0565b6040517fbf28068b0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff80831660248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063bf28068b90604401600060405180830381600087803b1580156126a057600080fd5b505af11580156126b4573d6000803e3d6000fd5b505050506126c28382614394565b73ffffffffffffffffffffffffffffffffffffffff811660009081526008602052604081206001905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690559392505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314612769576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805461ffff92831668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9484166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff96851664010000000002969096167fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff97851662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000090931694909816939093171794909416949094179190911716919091179055565b6000805460ff16156128b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156128f5576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff16331461297a576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080600061298887613aa6565b925092509250846129a25761299d8684615099565b6129ac565b6129ac8684614fec565b935060008515612b045769021e19e0c9bab24000008510612a15576129d583603689901c615004565b6129e3603686901c84615004565b6129ed9190614fec565b603686901c6129fc8585615004565b612a069190615004565b612a109190615041565b612a52565b612a1f8388615004565b612a298584615004565b612a339190614fec565b85612a3e8585615004565b612a489190615004565b612a529190615041565b6040517fbf28068b0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff8a811660248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063bf28068b90604401600060405180830381600087803b158015612ae757600080fd5b505af1158015612afb573d6000803e3d6000fd5b50505050612d9f565b60008484612b128583615004565b612b1c9190615041565b612b269190615099565b60015490915060009061271090612b419061ffff1684615004565b612b4b9190615041565b905073ffffffffffffffffffffffffffffffffffffffff8a1663d1660f997f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000084612bb6878f614fec565b612bc09190614fec565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b158015612c3457600080fd5b505af1158015612c48573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ca9505e4838b612c949190614fec565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815260048101919091526024810184905260006044820152606401600060405180830381600087803b158015612cf357600080fd5b505af1158015612d07573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d9a9190614fa4565b925050505b6040517f16128211000000000000000000000000000000000000000000000000000000008152600481018690526024810182905273ffffffffffffffffffffffffffffffffffffffff891690631612821190604401600060405180830381600087803b158015612e0e57600080fd5b505af1158015612e22573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055509498975050505050505050565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff16158015612eac57506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b15612ee3576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff1615612f25576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055612f5a81613f56565b50600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b60035473ffffffffffffffffffffffffffffffffffffffff163314612fd6576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517ff62005acebe9b616aefb5f248b48f5e89f28437b27d1eebc0b2d911209f297af90600090a250565b60035473ffffffffffffffffffffffffffffffffffffffff163314613096576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600755565b60035473ffffffffffffffffffffffffffffffffffffffff1633146130ec576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613193576001805461ffff83167e01000000000000000000000000000000000000000000000000000000000000027dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790555050565b600061319e836135a5565b9050806131d7576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000908152600460205260409020805473ffffffffffffffffffffffffffffffffffffffff1675ffff000000000000000000000000000000000000000060a084901b161790555050565b60035473ffffffffffffffffffffffffffffffffffffffff163314613272576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61111f81614467565b60035473ffffffffffffffffffffffffffffffffffffffff1633146132cc576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805460ff90921662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff909216919091179055565b60005460ff1615613373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156133b5576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff16331461343a576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061344583613541565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260026020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055905061349c8282614394565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b60008082600114156135275750506001547f0000000000000000000000000000000000000000000000000000000000000000927e0100000000000000000000000000000000000000000000000000000000000090910461ffff169150565b50506000908152600460205260409020549060a082901c90565b73ffffffffffffffffffffffffffffffffffffffff80821660009081526002602052604090205416806135a0576040517fb5ba4c4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146136255773ffffffffffffffffffffffffffffffffffffffff8216600090815260066020526040902054613628565b60015b92915050565b6000613639826135a5565b73ffffffffffffffffffffffffffffffffffffffff909316600090815260086020526040902080549319939093169092555050565b8080156136c657507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b15613828576040517fd1660f9900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301526044820184905286169063d1660f9990606401600060405180830381600087803b15801561376357600080fd5b505af1158015613777573d6000803e3d6000fd5b50506040517f5869dba800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690527f0000000000000000000000000000000000000000000000000000000000000000169250635869dba89150604401600060405180830381600087803b15801561380b57600080fd5b505af115801561381f573d6000803e3d6000fd5b505050506138b9565b6040517fd1660f9900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301526044820184905286169063d1660f9990606401600060405180830381600087803b1580156138a057600080fd5b505af11580156138b4573d6000803e3d6000fd5b505050505b5050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261395590859061455b565b50505050565b60025b8181116138b95781811615613a2d576000613978826134c9565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529192506000918316906370a0823190602401602060405180830381865afa1580156139eb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a0f9190614fa4565b90506002811115613a2a57613a2a878388600185038961366e565b50505b60011b61395e565b73ffffffffffffffffffffffffffffffffffffffff811660009081526008602052604081205490613a6582614667565b60005490915062010000900460ff16811115613aa1576000613a86836146a7565b613a91906001614fec565b905061395584848460008561470b565b505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff16631afbb7a46040518163ffffffff1660e01b8152600401602060405180830381865afa158015613af6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b1a9190614fa4565b92508373ffffffffffffffffffffffffffffffffffffffff166317d11a156040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b8b9190614fa4565b91507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bf8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c1c9190614fa4565b929491935050565b60005460ff16613c90576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610bd0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6040805173ffffffffffffffffffffffffffffffffffffffff8681166024830152604480830186905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b30000000000000000000000000000000000000000000000000000000017905291517f1cff79cd000000000000000000000000000000000000000000000000000000008152600092861691631cff79cd91613dc6918a91600401615103565b6000604051808303816000875af1925050508015613e2457506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052613e219190810190615132565b60015b613e2d57613e61565b80511580613e50575080806020019051810190613e4a919061507c565b15156001145b15613e5f576001915050613e9d565b505b8115613e99576040517f76e3e29c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060005b95945050505050565b6000613eb1826135a5565b9050801580613ec35750600754811615155b15613efa576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83166000908152600860205260409020548116613aa15773ffffffffffffffffffffffffffffffffffffffff83166000908152600860205260409020805482179055505050565b60015473ffffffffffffffffffffffffffffffffffffffff8281166000908152600860205260408120546a010000000000000000000090930490911691908080613f9f86611122565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526127108202600482015273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350908716915063f9a6503090604401602060405180830381865afa15801561403a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061405e9190614fa4565b9250614069846146a7565b6001019150506000806000805b848110156142a157801561408f5760018186031b614092565b60015b935086841615614299576000806140a8866134c9565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8e811660048301529294509092506000918416906370a0823190602401602060405180830381865afa15801561411d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141419190614fa4565b9050600181111561428c576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff848116602483015261ffff841691908d169063f9a6503090604401602060405180830381865afa1580156141c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141ea9190614fa4565b6141f49190615004565b6141fe9087614fec565b95508886106142875760006142128b614667565b60005490915062010000900460ff16811115614249576142448d8c836001891561423e57898e0361470b565b8d61470b565b614278565b85156142785773ffffffffffffffffffffffffffffffffffffffff8d1660009081526008602052604090208b90555b50505050505050505050505050565b614295565b98861898600194505b5050505b600101614076565b506040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005460ff1615614341576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613cdb3390565b73ffffffffffffffffffffffffffffffffffffffff821615806143dd575073ffffffffffffffffffffffffffffffffffffffff8281166000908152600260205260409020541615155b15614414576040517f9e59609e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff918216600090815260026020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001691909216179055565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260066020526040902054156144c4576040517f2e5a5c7700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61010060055410614501576040517f1cbbe18500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005805473ffffffffffffffffffffffffffffffffffffffff83166000818152600660209081526040808320600190951b9485905584835260049091528120919091558254919290614552836151bd565b91905055505050565b60006145bd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166148799092919063ffffffff16565b805190915015613aa157808060200190518101906145db919061507c565b613aa1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610bd0565b60008060005b6101008110156146a0576001811b91508382161561468c578260010192505b838210614698576146a0565b60010161466d565b5050919050565b600081600114156146ba57506000919050565b61010060015b60016146cc8284614fec565b901c92506001831b848116158015906146e75750600185851c145b156146f257506146a0565b84811061470157839250614705565b8391505b506146c0565b815b81811015614846576001811b8581161561483d57600061472c826134c9565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529192506000918316906370a0823190602401602060405180830381865afa15801561479f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147c39190614fa4565b90506001811161483a57600054978318977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9097019660ff6201000090910416871161483a5750505073ffffffffffffffffffffffffffffffffffffffff86166000908152600860205260409020859055506138b9565b50505b5060010161470d565b506040517f53275fcb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606148888484600085614892565b90505b9392505050565b606082471015614924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610bd0565b843b61498c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610bd0565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516149b591906151f6565b60006040518083038185875af1925050503d80600081146149f2576040519150601f19603f3d011682016040523d82523d6000602084013e6149f7565b606091505b5091509150614a07828286614a12565b979650505050505050565b60608315614a2157508161488b565b825115614a315782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd09190614e5b565b73ffffffffffffffffffffffffffffffffffffffff8116811461111f57600080fd5b600060208284031215614a9957600080fd5b813561488b81614a65565b60008060408385031215614ab757600080fd5b8235614ac281614a65565b91506020830135614ad281614a65565b809150509250929050565b600060208284031215614aef57600080fd5b5035919050565b8035600381106135a057600080fd5b801515811461111f57600080fd5b600080600080600080600060e0888a031215614b2e57600080fd5b8735614b3981614a65565b9650614b4760208901614af6565b9550604088013594506060880135614b5e81614a65565b93506080880135614b6e81614a65565b925060a0880135915060c0880135614b8581614b05565b8091505092959891949750929550565b60008060008060808587031215614bab57600080fd5b8435614bb681614a65565b93506020850135614bc681614a65565b92506040850135614bd681614a65565b9396929550929360600135925050565b60008060008060808587031215614bfc57600080fd5b84359350614c0c60208601614af6565b93969395505050506040820135916060013590565b600080600080600060a08688031215614c3957600080fd5b8535614c4481614a65565b94506020860135614c5481614a65565b93506040860135614c6481614a65565b94979396509394606081013594506080013592915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614cf257614cf2614c7c565b604052919050565b600067ffffffffffffffff821115614d1457614d14614c7c565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600080600060608486031215614d5557600080fd5b8335614d6081614a65565b92506020840135614d7081614a65565b9150604084013567ffffffffffffffff811115614d8c57600080fd5b8401601f81018613614d9d57600080fd5b8035614db0614dab82614cfa565b614cab565b818152876020838501011115614dc557600080fd5b816020840160208301376000602083830101528093505050509250925092565b60005b83811015614e00578181015183820152602001614de8565b838111156139555750506000910152565b60008151808452614e29816020860160208601614de5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061488b6020830184614e11565b60008060408385031215614e8157600080fd5b823591506020830135614ad281614a65565b803561ffff811681146135a057600080fd5b600080600080600060a08688031215614ebd57600080fd5b614ec686614e93565b9450614ed460208701614e93565b9350614ee260408701614e93565b9250614ef060608701614e93565b9150614efe60808701614e93565b90509295509295909350565b600080600060608486031215614f1f57600080fd5b8335614f2a81614a65565b9250602084013591506040840135614f4181614b05565b809150509250925092565b60008060408385031215614f5f57600080fd5b8235614f6a81614a65565b9150614f7860208401614e93565b90509250929050565b600060208284031215614f9357600080fd5b813560ff8116811461488b57600080fd5b600060208284031215614fb657600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115614fff57614fff614fbd565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561503c5761503c614fbd565b500290565b600082615077577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60006020828403121561508e57600080fd5b815161488b81614b05565b6000828210156150ab576150ab614fbd565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600080604083850312156150f257600080fd5b505080516020909101519092909150565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015260006148886040830184614e11565b60006020828403121561514457600080fd5b815167ffffffffffffffff81111561515b57600080fd5b8201601f8101841361516c57600080fd5b805161517a614dab82614cfa565b81815285602083850101111561518f57600080fd5b613e9d826020830160208601614de5565b6000602082840312156151b257600080fd5b815161488b81614a65565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156151ef576151ef614fbd565b5060010190565b60008251615208818460208701614de5565b919091019291505056fea26469706673582212209d39bb9d4972b515acdad1ffb757acd15e103ca6ee762f88a6382b36243734ba64736f6c634300080a00336101406040523480156200001257600080fd5b5060405162005e9738038062005e97833981016040819052620000359162000198565b60016000556001600160a01b0383166200006257604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038316608081905260408051636f307dc360e01b81529051636f307dc3916004808201926020929091908290030181865afa158015620000ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d39190620001ea565b6001600160a01b031660a0816001600160a01b031681525050826001600160a01b0316634f0e0ef36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200012b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001519190620001ea565b6001600160a01b0390811660c0529190911660e0819052151561010052151561012052506200020f565b80516001600160a01b03811681146200019357600080fd5b919050565b600080600060608486031215620001ae57600080fd5b620001b9846200017b565b9250620001c9602085016200017b565b915060408401518015158114620001df57600080fd5b809150509250925092565b600060208284031215620001fd57600080fd5b62000208826200017b565b9392505050565b60805160a05160c05160e0516101005161012051615a86620004116000396000818161061101528181612fb5015261481f01526000818161031701528181610dde015281816144f901526146e5015260008181610557015281816146a901526147a901526000818161034b0152818161387d015261392d01526000818161047301528181611bfe0152818161274f0152818161280d0152818161366a01526137dd015260008181610665015281816109d801528181610b0301528181610bd501528181610cdd01528181610e6501528181610fe30152818161114e0152818161120e0152818161132e015281816114510152818161162b01528181611708015281816117e0015281816119e501528181611b1201528181611d9501528181611ed5015281816120040152818161216801528181612290015281816123c601528181612568015281816126390152818161266f0152818161293d01528181612a2101528181612a8a01528181612bde01528181612d2601528181612e6801528181612ec2015281816130a10152818161311b015281816131b401528181613341015281816134c10152818161358a0152818161372f01528181613a1a01528181613b2e01528181613dbb015281816142200152818161432801528181614492015281816148e7015281816149e801528181614aae0152614d8f0152615a866000f3fe6080604052600436106102695760003560e01c8063860aefcf11610153578063c7de38a6116100cb578063dfd594651161007f578063eb9606df11610064578063eb9606df1461081e578063f9eaee0d1461083e578063ffd9b9071461085e57600080fd5b8063dfd59465146107de578063e1f21c67146107fe57600080fd5b8063cff0ab96116100b0578063cff0ab96146106ef578063d9ccbec114610783578063dcf65482146107be57600080fd5b8063c7de38a6146106a7578063caa5c23f146106dc57600080fd5b80639c55a05411610122578063b55bb84b11610107578063b55bb84b14610633578063c12c21c014610653578063c690908a1461068757600080fd5b80639c55a054146105df578063b1836d32146105ff57600080fd5b8063860aefcf146104db5780639408b63f146105455780639b67ab30146105795780639be0536a146105bd57600080fd5b80635d91a0e0116101e65780636d19b486116101b55780637071b7c51161019a5780637071b7c51461049557806379c0ef91146104a857806382871ace146104c857600080fd5b80636d19b486146104415780636f307dc31461046157600080fd5b80635d91a0e0146103e85780635f73fbec146103fb578063601d66f61461040e5780636c8f225d1461042e57600080fd5b80633d9287fa1161023d5780635019e20a116102225780635019e20a1461039257806354fd4d50146103b257806359781034146103d557600080fd5b80633d9287fa146103055780634f0e0ef31461033957600080fd5b8062842b571461026e578063256ac915146102905780632a7ba1f7146102c55780632b7c7b11146102e5575b600080fd5b34801561027a57600080fd5b5061028e6102893660046151bf565b61087e565b005b34801561029c57600080fd5b506102b06102ab3660046151f8565b61098e565b60405190151581526020015b60405180910390f35b3480156102d157600080fd5b5061028e6102e0366004615215565b610a61565b3480156102f157600080fd5b5061028e610300366004615215565b610c3b565b34801561031157600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561034557600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102bc565b34801561039e57600080fd5b5061028e6103ad3660046151f8565b610d6a565b3480156103be57600080fd5b506103c7600281565b6040519081526020016102bc565b61028e6103e336600461522e565b61108c565b61028e6103f63660046152bb565b611275565b61028e610409366004615340565b611589565b34801561041a57600080fd5b5061028e6104293660046153d8565b6117de565b61028e61043c36600461541b565b611900565b34801561044d57600080fd5b506102b061045c3660046151f8565b611c31565b34801561046d57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b61028e6104a336600461546e565b611c60565b3480156104b457600080fd5b5061036d6104c3366004615215565b611f3e565b61028e6104d63660046152bb565b611f4b565b3480156104e757600080fd5b5060025461051c906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041682565b604080516fffffffffffffffffffffffffffffffff9384168152929091166020830152016102bc565b34801561055157600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561058557600080fd5b506004546040805167ffffffffffffffff608084901c1681526fffffffffffffffffffffffffffffffff9092166020830152016102bc565b3480156105c957600080fd5b506105d261227d565b6040516102bc91906154e2565b3480156105eb57600080fd5b5061028e6105fa36600461553c565b61228e565b34801561060b57600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561063f57600080fd5b5061028e61064e3660046151f8565b6123c4565b34801561065f57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561069357600080fd5b5061028e6106a23660046151f8565b6124c6565b3480156106b357600080fd5b506106c76106c23660046151f8565b612668565b604080519283526020830191909152016102bc565b61028e6106ea366004615557565b61289b565b3480156106fb57600080fd5b5060015461074e906fffffffffffffffffffffffffffffffff811690700100000000000000000000000000000000810460ff169071010000000000000000000000000000000000900464ffffffffff1683565b604080516fffffffffffffffffffffffffffffffff9094168452911515602084015264ffffffffff16908201526060016102bc565b34801561078f57600080fd5b506102b061079e366004615599565b600360209081526000928352604080842090915290825290205460ff1681565b3480156107ca57600080fd5b5061028e6107d93660046151f8565b612a88565b3480156107ea57600080fd5b506103c76107f93660046151f8565b612b86565b34801561080a57600080fd5b5061028e61081936600461522e565b612c6d565b34801561082a57600080fd5b5061028e6108393660046155c7565b612ec0565b34801561084a57600080fd5b506102b06108593660046151f8565b613057565b34801561086a57600080fd5b5061028e6108793660046155ee565b6131b2565b600260005414156108f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b6002600090815573ffffffffffffffffffffffffffffffffffffffff8316808252600360209081526040808420338086529083529381902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081527f9b3258bc4904fd6426b99843e206c6c7cdb1fd0f040121c25b71dafbb3851ee0910160405180910390a350506001600055565b6040517f055ee9b500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063055ee9b590602401602060405180830381865afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a43919061560b565b73ffffffffffffffffffffffffffffffffffffffff16141592915050565b60026000541415610ace576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610b5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b83919061560b565b9050610b903382846132eb565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906395373018906024015b600060405180830381600087803b158015610c1a57600080fd5b505af1158015610c2e573d6000803e3d6000fd5b5050600160005550505050565b60026000541415610ca8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610d39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5d919061560b565b9050610b90338284613411565b60026000541415610dd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000557f000000000000000000000000000000000000000000000000000000000000000015610e34576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610ec1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee5919061560b565b33600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915290205490915060ff16610f52576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f5d82613583565b5090508015610f98576040517ff713841e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b15801561102757600080fd5b505af115801561103b573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692503391507f93c70cc9715bef0d83edf2095f3595402279d274f402a73ffc17f1bcb19d863d90600090a35050600160005550565b600260005414156110f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611106613875565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063e958b70490602401602060405180830381865afa158015611197573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bb919061560b565b90506111c9848285856139b7565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401600060405180830381600087803b15801561125257600080fd5b505af1158015611266573d6000803e3d6000fd5b50506001600055505050505050565b600260005414156112e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611375573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611399919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166113e8576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806113f483613583565b915091508161142f576040517f1fdd676f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611437613875565b831561144d5761144d85858b8660016000613ae3565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632362a2d88b600185338e8e8e6040518863ffffffff1660e01b81526004016114b59796959493929190615663565b6020604051808303816000875af11580156114d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f891906156bf565b90508873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f7dfecd8419723a9d3954585a30c2a270165d70aafa146c11c1e1b88ae14390648460405161157091815260200190565b60405180910390a4505060016000555050505050505050565b600260005414156115f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ab919061560b565b90506116b5613875565b81156116cb576116cb8383338460016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d89061174a903390600090819083908d908d908d90600401615663565b6020604051808303816000875af1158015611769573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178d91906156bf565b5060405173ffffffffffffffffffffffffffffffffffffffff87169033907f460ad03b1cf79b1d64d3aefa28475f110ab66e84649c52bb41ed796b9b39198190600090a35050600160005550505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611849573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118d1576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff90811670010000000000000000000000000000000002911617600255565b6002600054141561196d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000908155606461198461ffff851687615707565b61198e9190615744565b9050611999816144f7565b6119a2816145e8565b6119ab84614668565b6119b3613875565b6040517f172c48c7000000000000000000000000000000000000000000000000000000008152600060048201819052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a64919061577f565b61ffff169150611a789050816127106157ae565b611a829083615707565b611a8c8288615707565b11611ac3576040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff86811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611b5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b81919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638587604051611bef92919091825261ffff16602082015260400190565b60405180910390a3611c2386827f00000000000000000000000000000000000000000000000000000000000000008a6139b7565b505060016000555050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526006602052604081205415155b92915050565b60026000541415611ccd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611cdb856144f7565b611ce484614668565b611ced856145e8565b600154700100000000000000000000000000000000900460ff1615611d3e576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d46613875565b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff85811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611de0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e04919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638885604051611e7292919091825261ffff16602082015260400190565b60405180910390a38215611e9057611e908484878460006001613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015611f1957600080fd5b505af1158015611f2d573d6000803e3d6000fd5b505060016000555050505050505050565b6000611c5a60058361480f565b60026000541415611fb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa15801561204b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206f919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166120be576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120c661481b565b6120fc576040517f7e52ccb400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061210782612668565b509050612112613875565b82156121285761212884848a8560016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d8906121aa908c90600290879033908f908f908f90600401615663565b6020604051808303816000875af11580156121c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ed91906156bf565b90508773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167ffada13ff2d5e1a1d9da37ad4a4130893b34e3c69c32b17f87ec31fd661b867078460405161226591815260200190565b60405180910390a45050600160005550505050505050565b6060612289600561486b565b905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612381576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561242f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612453919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146124b7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614878565b5050565b60026000541415612533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156125c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e8919061560b565b90506125f4818361489a565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401610c00565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126fc919061560b565b905060008061270b8387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156127a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127c991906156bf565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015291965061271091851690637afb010490604401602060405180830381865afa158015612863573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061288791906156bf565b6128919190615744565b9350505050915091565b60026000541415612908576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129bd919061560b565b90506129c7613875565b8115612a7e576129dc83833384600080613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015612a6557600080fd5b505af1158015612a79573d6000803e3d6000fd5b505050505b5050600160005550565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612af3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b17919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b7b576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614c92565b600080612b9283612668565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152919350600092507f000000000000000000000000000000000000000000000000000000000000000090911690633192195c906024016040805180830381865afa158015612c26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4a91906157c5565b9150819050612c5b61271084615707565b612c659190615744565b949350505050565b60026000541415612cda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063fdd5764590602401602060405180830381865afa158015612d6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d91919061560b565b73ffffffffffffffffffffffffffffffffffffffff161480612dd7575073ffffffffffffffffffffffffffffffffffffffff831660009081526006602052604090205415155b15612e0e576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612eac57600080fd5b505af1158015611c23573d6000803e3d6000fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f4f919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612fb3576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000061300a576040517f50dd11fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805464ffffffffff90921671010000000000000000000000000000000000027fffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffffff909216919091179055565b6040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063f67c5bd090602401602060405180830381865afa1580156130e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061310c91906156bf565b905080158015906131ab5750807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015613184573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a891906156bf565b16155b9392505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561321d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613241919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146132a5576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018054911515700100000000000000000000000000000000027fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff909216919091179055565b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600060448301819052917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561338c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133b091906156bf565b90506133bb816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f98274bf834d179ee08dc0604071b0dc90b54731bd5f725a5a96a39a86bce025a8360405161340391815260200190565b60405180910390a250505050565b61341a816144f7565b600154700100000000000000000000000000000000900460ff161561346b576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600160448301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561350c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061353091906156bf565b905061353b816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f9cac51154cc0d835e2f9c9d1f59a9344588cee107f4203bf58a8c797e3a58c458360405161340391815260200190565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613617919061560b565b90506000806136268387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156136c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136e491906156bf565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529195506000917f00000000000000000000000000000000000000000000000000000000000000001690633192195c906024016040805180830381865afa158015613775573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061379991906157c5565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350600092506127109187169063f9a6503090604401602060405180830381865afa158015613837573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061385b91906156bf565b6138659190615707565b9092109794965093945050505050565b34156139b5577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156138e357600080fd5b505af11580156138f7573d6000803e3d6000fd5b50506040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201523460248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16935063a9059cbb925060440190506020604051808303816000875af115801561398f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139b391906157e9565b505b565b6139c084614cb4565b6040517f830aa74500000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f0000000000000000000000000000000000000000000000000000000000000000169063830aa74590608401600060405180830381600087803b158015613a5e57600080fd5b505af1158015613a72573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fa32435755c235de2976ed44a75a2f85cb01faf0c894f639fe0c32bb9455fea8f83604051613ad591815260200190565b60405180910390a350505050565b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301523060248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b158015613b7257600080fd5b505af1158015613b86573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff871692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a28460005b8181101561441d5736888883818110613bea57613bea615806565b9050602002810190613bfc9190615835565b90506004613c0d6020830183615873565b90501015613c47576040517fe2b0e50600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b30613c5560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16141561421c578415613ca9576040517f5fb9107f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613cb86020830183615873565b613cc1916158d8565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167f59781034000000000000000000000000000000000000000000000000000000001415613e3c5760008080613d1e6020860186615873565b613d2c916004908290615920565b810190613d39919061522e565b925092509250613e34838c73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614613e2b576040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015613e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e26919061560b565b613e2d565b8b5b84846139b7565b505050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2b7c7b11000000000000000000000000000000000000000000000000000000001415613ec757600194506000613e996020840184615873565b613ea7916004908290615920565b810190613eb49190615215565b9050613ec1898983613411565b50614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2a7ba1f7000000000000000000000000000000000000000000000000000000001415613f80578415613f49576040517fc0b0caa800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613f586020840184615873565b613f66916004908290615920565b810190613f739190615215565b9050613ec18989836132eb565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f233a8caa0000000000000000000000000000000000000000000000000000000014156140e457600080613fda6020850185615873565b613fe8916004908290615920565b810190613ff5919061594a565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c8116600483015292945090925082918416906370a0823190602401602060405180830381865afa158015614069573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061408d91906156bf565b10156140dd576040517fa5ac537300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016108e7565b5050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fc690908a00000000000000000000000000000000000000000000000000000000141561416457600061413d6020840184615873565b61414b916004908290615920565b81019061415891906151f8565b9050613ec1888261489a565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f23e27a640000000000000000000000000000000000000000000000000000000014156141e45760006141bd6020840184615873565b6141cb916004908290615920565b8101906141d891906151f8565b9050613ec18882614d42565b6040517f1e9e7e7a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50614414565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff68754361426760208501856151f8565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156142d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142f4919061560b565b73ffffffffffffffffffffffffffffffffffffffff16148061436d575073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001661435560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16145b156143a4576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6144126143b46020830183615873565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506143f69250505060208401846151f8565b73ffffffffffffffffffffffffffffffffffffffff1690614e39565b505b50600101613bcf565b506040517f60c8e8938c9a0c0d88a98d6f1c562ce68077e12bf3edb8047378f2f736cb45b490600090a16040517fe1998cf900000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff86811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b1580156144d657600080fd5b505af11580156144ea573d6000803e3d6000fd5b5050505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006139b3576001546fffffffffffffffffffffffffffffffff9081169081146124c257600454608081901c906fffffffffffffffffffffffffffffffff16600067ffffffffffffffff8316431461456e578461458a565b61458a6fffffffffffffffffffffffffffffffff831686615976565b9050838111156145c6576040517f675f1a5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff81164360801b176004555050505050565b6002546fffffffffffffffffffffffffffffffff16811080614631575060025470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681115b156139b3576040517fce16799400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61467061481b565b156146a7576040517f63fc31c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1615614806577f0000000000000000000000000000000000000000000000000000000000000000801561472657503373ffffffffffffffffffffffffffffffffffffffff821614155b1561475d576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600160248301527f00000000000000000000000000000000000000000000000000000000000000001690639dc29fac90604401600060405180830381600087803b1580156147ed57600080fd5b505af1158015614801573d6000803e3d6000fd5b505050505b6139b381614cb4565b60006131ab8383614e7b565b60007f0000000000000000000000000000000000000000000000000000000000000000801561228957505060015471010000000000000000000000000000000000900464ffffffffff1642101590565b606060006131ab83614ea5565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f01565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561492b57600080fd5b505af115801561493f573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527fdf498aa1c340e992665d6fb4f3be8436d452c45a630cb6d7fab7963da39bac8793500190505b60405180910390a15050565b6040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600091829160019183917f00000000000000000000000000000000000000000000000000000000000000001690638991b2f190602401602060405180830381865afa158015614a2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a5391906156bf565b90505b808211614c895780821615614c7d576040517fe75538c700000000000000000000000000000000000000000000000000000000815260048101839052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e75538c7906024016040805180830381865afa158015614af4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b18919061577f565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529294509092506000918416906370a0823190602401602060405180830381865afa158015614b8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bb191906156bf565b90506001811115614c79576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff8481166024830152600091908b169063f9a6503090604401602060405180830381865afa158015614c33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c5791906156bf565b978801979050614c6b61ffff841682615707565b614c759088615976565b9650505b5050505b600182901b9150614a56565b50509250929050565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f50565b3373ffffffffffffffffffffffffffffffffffffffff821614801590614d0b575033600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16155b156139b3576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b158015614dd357600080fd5b505af1158015614de7573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527f69db9e9764da61b6681b89fb0f5be018506e0342036e56b59c3015a620d60977935001905061498d565b60606131ab83836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250615043565b6000826000018281548110614e9257614e92615806565b9060005260206000200154905092915050565b606081600001805480602002602001604051908101604052809291908181526020018280548015614ef557602002820191906000526020600020905b815481526020019060010190808311614ee1575b50505050509050919050565b6000818152600183016020526040812054614f4857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611c5a565b506000611c5a565b60008181526001830160205260408120548015615039576000614f746001836157ae565b8554909150600090614f88906001906157ae565b9050818114614fed576000866000018281548110614fa857614fa8615806565b9060005260206000200154905080876000018481548110614fcb57614fcb615806565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080614ffe57614ffe61598e565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611c5a565b6000915050611c5a565b6060612c65848460008585843b6150b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108e7565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516150df91906159ed565b60006040518083038185875af1925050503d806000811461511c576040519150601f19603f3d011682016040523d82523d6000602084013e615121565b606091505b509150915061513182828661513c565b979650505050505050565b6060831561514b5750816131ab565b82511561515b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e791906159ff565b73ffffffffffffffffffffffffffffffffffffffff811681146139b357600080fd5b80151581146139b357600080fd5b600080604083850312156151d257600080fd5b82356151dd8161518f565b915060208301356151ed816151b1565b809150509250929050565b60006020828403121561520a57600080fd5b81356131ab8161518f565b60006020828403121561522757600080fd5b5035919050565b60008060006060848603121561524357600080fd5b833561524e8161518f565b9250602084013561525e8161518f565b929592945050506040919091013590565b60008083601f84011261528157600080fd5b50813567ffffffffffffffff81111561529957600080fd5b6020830191508360208260051b85010111156152b457600080fd5b9250929050565b60008060008060008060a087890312156152d457600080fd5b86356152df8161518f565b955060208701356152ef8161518f565b9450604087013593506060870135615306816151b1565b9250608087013567ffffffffffffffff81111561532257600080fd5b61532e89828a0161526f565b979a9699509497509295939492505050565b60008060008060006080868803121561535857600080fd5b85356153638161518f565b945060208601359350604086013561537a816151b1565b9250606086013567ffffffffffffffff81111561539657600080fd5b6153a28882890161526f565b969995985093965092949392505050565b80356fffffffffffffffffffffffffffffffff811681146153d357600080fd5b919050565b600080604083850312156153eb57600080fd5b6153f4836153b3565b9150615402602084016153b3565b90509250929050565b61ffff811681146139b357600080fd5b6000806000806080858703121561543157600080fd5b8435935060208501356154438161518f565b925060408501356154538161540b565b915060608501356154638161540b565b939692955090935050565b60008060008060006080868803121561548657600080fd5b8535945060208601356154988161518f565b9350604086013567ffffffffffffffff8111156154b457600080fd5b6154c08882890161526f565b90945092505060608601356154d48161540b565b809150509295509295909350565b6020808252825182820181905260009190848201906040850190845b8181101561553057835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016154fe565b50909695505050505050565b60006020828403121561554e57600080fd5b6131ab826153b3565b6000806020838503121561556a57600080fd5b823567ffffffffffffffff81111561558157600080fd5b61558d8582860161526f565b90969095509350505050565b600080604083850312156155ac57600080fd5b82356155b78161518f565b915060208301356151ed8161518f565b6000602082840312156155d957600080fd5b813564ffffffffff811681146131ab57600080fd5b60006020828403121561560057600080fd5b81356131ab816151b1565b60006020828403121561561d57600080fd5b81516131ab8161518f565b6003811061565f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b73ffffffffffffffffffffffffffffffffffffffff888116825260e082019061568f602084018a615628565b6040830197909752948616606082015292909416608083015260a082015291151560c09092019190915292915050565b6000602082840312156156d157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561573f5761573f6156d8565b500290565b60008261577a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000806040838503121561579257600080fd5b825161579d8161518f565b60208401519092506151ed8161540b565b6000828210156157c0576157c06156d8565b500390565b600080604083850312156157d857600080fd5b505080516020909101519092909150565b6000602082840312156157fb57600080fd5b81516131ab816151b1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc183360301811261586957600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126158a857600080fd5b83018035915067ffffffffffffffff8211156158c357600080fd5b6020019150368190038213156152b457600080fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156159185780818660040360031b1b83161692505b505092915050565b6000808585111561593057600080fd5b8386111561593d57600080fd5b5050820193919092039150565b6000806040838503121561595d57600080fd5b82356159688161518f565b946020939093013593505050565b60008219821115615989576159896156d8565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60005b838110156159d85781810151838201526020016159c0565b838111156159e7576000848401525b50505050565b600082516158698184602087016159bd565b6020815260008251806020840152615a1e8160408501602087016159bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea2646970667358221220a3f4a705ab580a6ada1e438cd2ee4abc001b62d1d171fce12c41994900fef21664736f6c634300080a003360a06040523480156200001157600080fd5b5060405162005f3d38038062005f3d8339810160408190526200003491620012eb565b826001600160a01b031663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000073573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200009991906200147f565b6001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000d7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000fd91906200147f565b6000805460ff191690556001600160a01b0381166200012f57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200016e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200019491906200147f565b6001600160a01b03908116608052600180546001600160a01b031916918616918217905560408051636f307dc360e01b81529051919250636f307dc39160048083019260209291908290030181865afa158015620001f6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200021c91906200147f565b600260006101000a8154816001600160a01b0302191690836001600160a01b03160217905550826001600160a01b031663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000281573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a791906200147f565b6001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200030b91906200147f565b600080546001600160a01b039290921661010002610100600160a81b0319909216919091179055620003626103e860c86200034b6101f4612710620014bc565b60646200035c60c8612710620014bc565b620005e8565b60408101515160005b81811015620003ee576000836040015182815181106200038f576200038f620014e2565b6020026020010151600001519050620003ae81620007c260201b60201c565b620003e48185604001518481518110620003cc57620003cc620014e2565b60200260200101516020015162000a5e60201b60201c565b506001016200036b565b5060015460408051632630c12f60e01b815290516001600160a01b03909216916311ca4fc29186918491632630c12f9160048083019260209291908290030181865afa15801562000443573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200046991906200147f565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401600060405180830381600087803b158015620004b257600080fd5b505af1158015620004c7573d6000803e3d6000fd5b50506040516001600160a01b03861692507fa8b21f72cb83bce808df32dc2330217d744a1c22f3e9e44e4b11bbf049d37d9d9150600090a2600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000553573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200057991906200147f565b6001600160a01b03167f3f82447be465b0b5a4a9e54c74d5f6ae73f2e9537f2cc1590a340524703d096160405160405180910390a26020820151620005cb90620005c5906002620014f8565b62000bda565b81516020830151620005de919062000dc8565b5050505062001604565b6000620005f68585620014bc565b60015460405163172c48c760e01b81526000600482018190529293506001600160a01b039091169063172c48c7906024016040805180830381865afa15801562000644573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200066a91906200152a565b9150508061ffff168261ffff1614620006be57620006888262000f47565b60025460405161ffff841681526001600160a01b039091169060008051602062005f1d8339815191529060200160405180910390a25b60015460405163944ac59f60e01b815261ffff808a166004830152808916602483015280881660448301528087166064830152851660848201526001600160a01b039091169063944ac59f9060a401600060405180830381600087803b1580156200072857600080fd5b505af11580156200073d573d6000803e3d6000fd5b505050507f2214a403d5f8d049e52eacca974c6dea01a471e41d6a18903bfaf7dbc709741f878787612710620007749190620014bc565b876200078388612710620014bc565b6040805161ffff96871681529486166020860152928516848401529084166060840152909216608082015290519081900360a00190a150505050505050565b6001600160a01b038116620007ea57604051635919af9760e11b815260040160405180910390fd5b62000809816001600160a01b03166200116f60201b620023381760201c565b620008365760405163df4c572d60e01b81526001600160a01b038216600482015260240160405180910390fd5b6040516370a0823160e01b81523060048201526001600160a01b038216906370a0823190602401602060405180830381865afa92505050801562000899575060408051601f3d908101601f19168201909252620008969181019062001564565b60015b620008b75760405163528ca31d60e01b815260040160405180910390fd5b50600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200090c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200093291906200147f565b604051630f9a650360e41b8152670de0b6b3a764000060048201526001600160a01b038381166024830152919091169063f9a6503090604401602060405180830381865afa925050508015620009a7575060408051601f3d908101601f19168201909252620009a49181019062001564565b60015b620009c5576040516367a7cd4360e01b815260040160405180910390fd5b5060015460405163d48bfca760e01b81526001600160a01b0383811660048301529091169063d48bfca790602401600060405180830381600087803b15801562000a0e57600080fd5b505af115801562000a23573d6000803e3d6000fd5b50506040516001600160a01b03841692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a250565b6002546001600160a01b038381169116141562000a8e57604051633b899cf960e01b815260040160405180910390fd5b60015460405163172c48c760e01b8152600060048201819052916001600160a01b03169063172c48c7906024016040805180830381865afa15801562000ad8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000afe91906200152a565b91505061ffff8216158062000b1a57508061ffff168261ffff16115b1562000b39576040516333c6608d60e01b815260040160405180910390fd5b600154604051635385e2a160e11b81526001600160a01b03858116600483015261ffff851660248301529091169063a70bc54290604401600060405180830381600087803b15801562000b8b57600080fd5b505af115801562000ba0573d6000803e3d6000fd5b505060405161ffff851681526001600160a01b038616925060008051602062005f1d833981519152915060200160405180910390a2505050565b600062000be662001175565b6001600160a01b031663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801562000c24573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c4a91906200157e565b50509050600062000c606200117560201b60201c565b6001600160a01b031663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa15801562000c9d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000cc39190620015d5565b915050806001600160801b0316836001600160801b0316101562000cfa576040516309aadd6f60e41b815260040160405180910390fd5b826001600160801b0316826001600160801b03161462000dc35762000d1e62001175565b604051632715681560e21b81526001600160801b03851660048201526001600160a01b039190911690639c55a05490602401600060405180830381600087803b15801562000d6b57600080fd5b505af115801562000d80573d6000803e3d6000fd5b50506040516001600160801b03861681527fa030eec20ae970821387224ec3bb15b4bd22b89bfb86dc4d2b3827aa3d99e48d925060200190505b60405180910390a15b505050565b600062000dd462001175565b6001600160a01b031663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801562000e12573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e3891906200157e565b50509050816001600160801b0316836001600160801b0316118062000e6e5750806001600160801b0316826001600160801b0316115b1562000e8d576040516309aadd6f60e41b815260040160405180910390fd5b62000e9762001175565b60405163300eb37b60e11b81526001600160801b038086166004830152841660248201526001600160a01b03919091169063601d66f690604401600060405180830381600087803b15801562000eec57600080fd5b505af115801562000f01573d6000803e3d6000fd5b5050604080516001600160801b038088168252861660208201527f4d4981437d0211f9e6843eb024d9ada1fa3a99514d4343d4aece106dd11524bb935001905062000dba565b600154600254604051635385e2a160e11b81526001600160a01b03918216600482015261ffff8416602482015291169063a70bc54290604401600060405180830381600087803b15801562000f9b57600080fd5b505af115801562000fb0573d6000803e3d6000fd5b505050506000600160009054906101000a90046001600160a01b03166001600160a01b031663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200100a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001030919062001564565b905060015b8181101562000dc35760015460405163172c48c760e01b81526004810183905260009182916001600160a01b039091169063172c48c7906024016040805180830381865afa1580156200108c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010b291906200152a565b915091508461ffff168161ffff1611156200116457600154604051635385e2a160e11b81526001600160a01b03848116600483015261ffff881660248301529091169063a70bc54290604401600060405180830381600087803b1580156200111957600080fd5b505af11580156200112e573d6000803e3d6000fd5b505060405161ffff881681526001600160a01b038516925060008051602062005f1d833981519152915060200160405180910390a25b505060010162001035565b3b151590565b60015460408051632f7a188160e01b815290516000926001600160a01b031691632f7a18819160048083019260209291908290030181865afa158015620011c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011e691906200147f565b905090565b6001600160a01b03811681146200120157600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b03811182821017156200123f576200123f62001204565b60405290565b604080519081016001600160401b03811182821017156200123f576200123f62001204565b604051601f8201601f191681016001600160401b038111828210171562001295576200129562001204565b604052919050565b80516001600160801b0381168114620012b557600080fd5b919050565b8051620012b581620011eb565b805161ffff81168114620012b557600080fd5b80518015158114620012b557600080fd5b6000806000606084860312156200130157600080fd5b83516200130e81620011eb565b809350506020808501516200132381620011eb565b604086810151919450906001600160401b03808211156200134357600080fd5b9087019060a0828a0312156200135857600080fd5b620013626200121a565b6200136d836200129d565b81526200137c8584016200129d565b8582015283830151828111156200139257600080fd5b8301601f81018b13620013a457600080fd5b805183811115620013b957620013b962001204565b620013c9878260051b016200126a565b818152878101945060069190911b82018701908c821115620013ea57600080fd5b918701915b81831015620014435786838e031215620014095760008081fd5b6200141362001245565b83516200142081620011eb565b81526200142f848a01620012c7565b818a015285529387019391860191620013ef565b838701525062001458905060608401620012ba565b60608201526200146b60808401620012da565b608082015280955050505050509250925092565b6000602082840312156200149257600080fd5b81516200149f81620011eb565b9392505050565b634e487b7160e01b600052601160045260246000fd5b600061ffff83811690831681811015620014da57620014da620014a6565b039392505050565b634e487b7160e01b600052603260045260246000fd5b60006001600160801b0382811684821681151582840482111615620015215762001521620014a6565b02949350505050565b600080604083850312156200153e57600080fd5b82516200154b81620011eb565b91506200155b60208401620012c7565b90509250929050565b6000602082840312156200157757600080fd5b5051919050565b6000806000606084860312156200159457600080fd5b6200159f846200129d565b9250620015af60208501620012da565b9150604084015164ffffffffff81168114620015ca57600080fd5b809150509250925092565b60008060408385031215620015e957600080fd5b620015f4836200129d565b91506200155b602084016200129d565b608051614878620016a56000396000818161033601528181610446015281816107c5015281816108c0015281816109ae01528181610b8301528181610f0a015281816113e1015281816114cf015281816115bb015281816116ab015281816117990152818161187d01528181611ad901528181611bc601528181611cb301528181611da0015281816120090152818161218c015261227901526148786000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80638456cb59116100f9578063dc2b21c111610097578063f0527ac611610071578063f0527ac6146103d7578063f206d32a146103df578063fb1bd8c4146103f2578063ffd9b9071461040557600080fd5b8063dc2b21c11461039e578063e6492d7b146103b1578063eb9606df146103c457600080fd5b8063a50cf2c8116100d3578063a50cf2c814610331578063a70bc54214610358578063b53472ef1461036b578063c12c21c01461037e57600080fd5b80638456cb59146103035780639c55a0541461030b5780639f1c50691461031e57600080fd5b806350e036ff1161016657806354fd4d501161014057806354fd4d50146102b25780635c975abb146102ba5780636f307dc3146102d05780637bccacee146102f057600080fd5b806350e036ff1461027657806352438e541461028c578063526a41e81461029f57600080fd5b80633e7c88d6116101a25780633e7c88d6146102355780633f4ba83a14610248578063456e0742146102505780635094cb4f1461026357600080fd5b806324147708146101c95780632954018c146101de5780632f7a18811461022d575b600080fd5b6101dc6101d7366004614307565b610418565b005b60005461020390610100900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6102036106fe565b6101dc610243366004614334565b610797565b6101dc610892565b6101dc61025e366004614307565b610980565b61020361027136600461436d565b610b36565b61027e610b49565b604051908152602001610224565b6101dc61029a366004614307565b610b55565b6101dc6102ad366004614394565b610edc565b61027e600281565b60005460ff166040519015158152602001610224565b6002546102039073ffffffffffffffffffffffffffffffffffffffff1681565b6101dc6102fe3660046143c2565b6113b3565b6101dc6114a1565b6101dc61031936600461440e565b61158d565b6101dc61032c36600461442b565b61167d565b6102037f000000000000000000000000000000000000000000000000000000000000000081565b6101dc610366366004614334565b61176b565b6101dc610379366004614307565b61184f565b6001546102039073ffffffffffffffffffffffffffffffffffffffff1681565b6101dc6103ac366004614459565b611aab565b6101dc6103bf366004614307565b611b98565b6101dc6103d236600461448f565b611c85565b6101dc611d72565b6101dc6103ed3660046144ac565b611fdb565b6101dc610400366004614307565b61215e565b6101dc61041336600461451d565b61224b565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156104a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c6919061453a565b6104fc576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006105078261233e565b90506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015610578573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059c9190614557565b90508181166106f9576001546040517fa366f496000000000000000000000000000000000000000000000000000000008152918317600483018190529173ffffffffffffffffffffffffffffffffffffffff9091169063a366f49690602401600060405180830381600087803b15801561061557600080fd5b505af1158015610629573d6000803e3d6000fd5b505050506106356106fe565b6040517fffd9b9070000000000000000000000000000000000000000000000000000000081526001600482015273ffffffffffffffffffffffffffffffffffffffff919091169063ffd9b90790602401600060405180830381600087803b15801561069f57600080fd5b505af11580156106b3573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692507ff17b849746e74d7186170c9553d4bbf60b4f8bb1ed81fe50c099b934fb078f059150600090a25b505050565b600154604080517f2f7a1881000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691632f7a18819160048083019260209291908290030181865afa15801561076e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610792919061457b565b905090565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610821573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610845919061453a565b61087b576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108848261241e565b61088e82826127f8565b5050565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa15801561091c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610940919061453a565b610976576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61097e612a15565b565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610a0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2e919061453a565b610a64576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a6d81612af6565b6001546040517f9f5f86ae00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015290911690639f5f86ae90602401600060405180830381600087803b158015610ada57600080fd5b505af1158015610aee573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507f5a0b7d0f9c24b39256e112a0584b4c5ce38d8f1dee2e7c56f15b852604cdc8869150600090a250565b6000610b43600383612cb8565b92915050565b60006107926003612ccb565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610bdf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c03919061453a565b610c39576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610c86576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063fdd5764590602401602060405180830381865afa158015610cf7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1b919061457b565b905073ffffffffffffffffffffffffffffffffffffffff8116610d6a576040517f1170cc2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f6e98e5e400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526000602483015290911690636e98e5e490604401600060405180830381600087803b158015610dde57600080fd5b505af1158015610df2573d6000803e3d6000fd5b50506001546040517f6e98e5e40000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff86811660248301529091169250636e98e5e49150604401600060405180830381600087803b158015610e6a57600080fd5b505af1158015610e7e573d6000803e3d6000fd5b50505050610e96826003612cd590919063ffffffff16565b5060405173ffffffffffffffffffffffffffffffffffffffff8316907fab9f405bf0c19b97f65a7031634db41569cd2f0e0376a610a1e977f9ab22b58f90600090a25050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610f66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8a919061453a565b610fc0576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fc982612af6565b6000806000610fd66106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015611020573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110449190614598565b9250925092506000806110556106fe565b73ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa15801561109e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c291906145e5565b9150915060006110d06106fe565b73ffffffffffffffffffffffffffffffffffffffff16639be0536a6040518163ffffffff1660e01b8152600401600060405180830381865afa15801561111a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526111609190810190614643565b9050600061116c6106fe565b73ffffffffffffffffffffffffffffffffffffffff1663b1836d326040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111da919061453a565b600154604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905192935073ffffffffffffffffffffffffffffffffffffffff909116916311ca4fc2918c918491632630c12f9160048083019260209291908290030181865afa158015611256573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061127a919061457b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156112e757600080fd5b505af11580156112fb573d6000803e3d6000fd5b5050505087156113675761130e87612cf7565b6113188484612f5d565b61132186613152565b60005b82518110156113575761134f83828151811061134257611342614726565b60200260200101516132a3565b600101611324565b50801561136757611367856133c9565b60405173ffffffffffffffffffffffffffffffffffffffff8a16907fa8b21f72cb83bce808df32dc2330217d744a1c22f3e9e44e4b11bbf049d37d9d90600090a2505050505050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561143d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611461919061453a565b611497576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61088e828261357b565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561152b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061154f919061453a565b611585576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61097e6139c3565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611617573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163b919061453a565b611671576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81612cf7565b50565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611707573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172b919061453a565b611761576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61088e8282612f5d565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156117f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611819919061453a565b610884576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156118d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fd919061453a565b611933576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061193e8261233e565b90506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d39190614557565b9050818116156106f9576001546040517fa366f496000000000000000000000000000000000000000000000000000000008152918318600483018190529173ffffffffffffffffffffffffffffffffffffffff9091169063a366f49690602401600060405180830381600087803b158015611a4d57600080fd5b505af1158015611a61573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a2505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611b35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b59919061453a565b611b8f576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81613a83565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611c22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c46919061453a565b611c7c576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81613b3d565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611d0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d33919061453a565b611d69576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a816133c9565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611dfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e20919061453a565b611e56576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ec4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee8919061457b565b60015490915073ffffffffffffffffffffffffffffffffffffffff166311ca4fc2611f116106fe565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff91821660048201529084166024820152604401600060405180830381600087803b158015611f7f57600080fd5b505af1158015611f93573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507f3f82447be465b0b5a4a9e54c74d5f6ae73f2e9537f2cc1590a340524703d09619150600090a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015612065573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612089919061453a565b6120bf576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61271061ffff86161015806120e357506127106120dc8585614784565b61ffff1610155b806120fd57506127106120f68383614784565b61ffff1610155b15612134576040517f0b361d6900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6121578585612145866127106147aa565b85612152866127106147aa565b613c5c565b5050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156121e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061220c919061453a565b612242576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a816132a3565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156122d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122f9919061453a565b61232f576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81613152565b3b151590565b6001546040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063f67c5bd090602401602060405180830381865afa1580156123af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123d39190614557565b90508015806123e25750806001145b15612419576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b73ffffffffffffffffffffffffffffffffffffffff811661246b576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163b6124d6576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024015b60405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8216906370a0823190602401602060405180830381865afa92505050801561257a575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261257791810190614557565b60015b6125b0576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561261e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612642919061457b565b6040517ff9a65030000000000000000000000000000000000000000000000000000000008152670de0b6b3a7640000600482015273ffffffffffffffffffffffffffffffffffffffff8381166024830152919091169063f9a6503090604401602060405180830381865afa9250505080156126f8575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526126f591810190614557565b60015b61272e576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506001546040517fd48bfca700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301529091169063d48bfca790602401600060405180830381600087803b15801561279c57600080fd5b505af11580156127b0573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a250565b60025473ffffffffffffffffffffffffffffffffffffffff8381169116141561284d576040517f3b899cf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f172c48c70000000000000000000000000000000000000000000000000000000081526000600482018190529173ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa1580156128bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128e091906147cd565b91505061ffff821615806128fb57508061ffff168261ffff16115b15612932576040517f33c6608d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015261ffff851660248301529091169063a70bc54290604401600060405180830381600087803b1580156129a957600080fd5b505af11580156129bd573d6000803e3d6000fd5b505060405161ffff8516815273ffffffffffffffffffffffffffffffffffffffff861692507f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650915060200160405180910390a2505050565b60005460ff16612a81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016124cd565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b73ffffffffffffffffffffffffffffffffffffffff8116612b43576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163b612ba9576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024016124cd565b8073ffffffffffffffffffffffffffffffffffffffff1663c12c21c06040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612c2e575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252612c2b9181019061457b565b60015b612c64576040517fe9eddd1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60015473ffffffffffffffffffffffffffffffffffffffff82811691161461088e576040517fe9eddd1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612cc48383613e92565b9392505050565b6000610b43825490565b6000612cc48373ffffffffffffffffffffffffffffffffffffffff8416613ebc565b6000612d016106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015612d4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d6f9190614598565b505090506000612d7d6106fe565b73ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa158015612dc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dea91906145e5565b915050806fffffffffffffffffffffffffffffffff16836fffffffffffffffffffffffffffffffff161015612e4b576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826fffffffffffffffffffffffffffffffff16826fffffffffffffffffffffffffffffffff16146106f957612e7e6106fe565b6040517f9c55a0540000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff8516600482015273ffffffffffffffffffffffffffffffffffffffff9190911690639c55a05490602401600060405180830381600087803b158015612ef957600080fd5b505af1158015612f0d573d6000803e3d6000fd5b50506040516fffffffffffffffffffffffffffffffff861681527fa030eec20ae970821387224ec3bb15b4bd22b89bfb86dc4d2b3827aa3d99e48d925060200190505b60405180910390a1505050565b6000612f676106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015612fb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fd59190614598565b50509050816fffffffffffffffffffffffffffffffff16836fffffffffffffffffffffffffffffffff16118061302e5750806fffffffffffffffffffffffffffffffff16826fffffffffffffffffffffffffffffffff16115b15613065576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61306d6106fe565b6040517f601d66f60000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff80861660048301528416602482015273ffffffffffffffffffffffffffffffffffffffff919091169063601d66f690604401600060405180830381600087803b1580156130f057600080fd5b505af1158015613104573d6000803e3d6000fd5b5050604080516fffffffffffffffffffffffffffffffff8088168252861660208201527f4d4981437d0211f9e6843eb024d9ada1fa3a99514d4343d4aece106dd11524bb9350019050612f50565b600061315c6106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa1580156131a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131ca9190614598565b509150508015158215151461088e576131e16106fe565b6040517fffd9b907000000000000000000000000000000000000000000000000000000008152831515600482015273ffffffffffffffffffffffffffffffffffffffff919091169063ffd9b90790602401600060405180830381600087803b15801561324c57600080fd5b505af1158015613260573d6000803e3d6000fd5b505050507ff97ba903470ff3262b4a68a938fe81def401bac1bd742169d2e8d5c4ed2185d382604051613297911515815260200190565b60405180910390a15050565b73ffffffffffffffffffffffffffffffffffffffff81166132f0576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6132f86106fe565b6040517fb55bb84b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152919091169063b55bb84b90602401600060405180830381600087803b15801561336357600080fd5b505af1158015613377573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841681527fdac9a7995cbc0c0f01d78970fb6fd0b52fe0fe869eb6635e65cc1b5682b8325c925060200190505b60405180910390a150565b60006133d36106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801561341d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134419190614598565b925050508064ffffffffff168264ffffffffff161461088e578164ffffffffff168164ffffffffff16118061347c57508164ffffffffff1642115b156134b3576040517fe4eaca7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134bb6106fe565b6040517feb9606df00000000000000000000000000000000000000000000000000000000815264ffffffffff8416600482015273ffffffffffffffffffffffffffffffffffffffff919091169063eb9606df90602401600060405180830381600087803b15801561352b57600080fd5b505af115801561353f573d6000803e3d6000fd5b505060405164ffffffffff851681527f0b3eb35ba750e7a7e4d26c9eee3d226f4e1f68c5568f4a3d051c94b241b02ac092506020019050613297565b73ffffffffffffffffffffffffffffffffffffffff82166135c8576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82163b61362e576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016124cd565b61363781612af6565b60015473ffffffffffffffffffffffffffffffffffffffff8381169116148061369257506136636106fe565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b806136b7575060015473ffffffffffffffffffffffffffffffffffffffff8281169116145b806136f457506136c56106fe565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b1561372b576040517f727de5c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517fff68754300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063ff68754390602401602060405180830381865afa15801561379c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137c0919061457b565b73ffffffffffffffffffffffffffffffffffffffff1614158061388c57506001546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063fdd5764590602401602060405180830381865afa15801561384f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613873919061457b565b73ffffffffffffffffffffffffffffffffffffffff1614155b156138c3576040517f21ff1e7100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f6e98e5e400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152848116602483015290911690636e98e5e490604401600060405180830381600087803b15801561393857600080fd5b505af115801561394c573d6000803e3d6000fd5b50505050613964826003613faf90919063ffffffff16565b508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4bcbefaef68b99503d502f5a6abe7bca2b183ab8ac55457013c77d084ebd130560405160405180910390a35050565b60005460ff1615613a30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016124cd565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612acc3390565b6001546040517fdc2b21c100000000000000000000000000000000000000000000000000000000815260ff8316600482015273ffffffffffffffffffffffffffffffffffffffff9091169063dc2b21c190602401600060405180830381600087803b158015613af157600080fd5b505af1158015613b05573d6000803e3d6000fd5b505060405160ff841681527f73caacd705657a7d283e48ecf288b73bc517e3aea1bbc9da2fd54a979e8aa950925060200190506133be565b73ffffffffffffffffffffffffffffffffffffffff8116613b8a576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613b926106fe565b6040517fdcf6548200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152919091169063dcf6548290602401600060405180830381600087803b158015613bfd57600080fd5b505af1158015613c11573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841681527f32e53e2e527af8518ae889e5f7e674bc83f7cf68e4cc059aceeaa0e64208b85b925060200190506133be565b6000613c6885856147aa565b6001546040517f172c48c700000000000000000000000000000000000000000000000000000000815260006004820181905292935073ffffffffffffffffffffffffffffffffffffffff9091169063172c48c7906024016040805180830381865afa158015613cdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cff91906147cd565b9150508061ffff168261ffff1614613d6e57613d1a82613fd1565b60025460405161ffff8416815273ffffffffffffffffffffffffffffffffffffffff909116907f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac6509060200160405180910390a25b6001546040517f944ac59f00000000000000000000000000000000000000000000000000000000815261ffff808a1660048301528089166024830152808816604483015280871660648301528516608482015273ffffffffffffffffffffffffffffffffffffffff9091169063944ac59f9060a401600060405180830381600087803b158015613dfd57600080fd5b505af1158015613e11573d6000803e3d6000fd5b505050507f2214a403d5f8d049e52eacca974c6dea01a471e41d6a18903bfaf7dbc709741f878787612710613e4691906147aa565b87613e53886127106147aa565b6040805161ffff96871681529486166020860152928516848401529084166060840152909216608082015290519081900360a00190a150505050505050565b6000826000018281548110613ea957613ea9614726565b9060005260206000200154905092915050565b60008181526001830160205260408120548015613fa5576000613ee06001836147fc565b8554909150600090613ef4906001906147fc565b9050818114613f59576000866000018281548110613f1457613f14614726565b9060005260206000200154905080876000018481548110613f3757613f37614726565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080613f6a57613f6a614813565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610b43565b6000915050610b43565b6000612cc48373ffffffffffffffffffffffffffffffffffffffff8416614296565b6001546002546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015261ffff8416602482015291169063a70bc54290604401600060405180830381600087803b15801561404a57600080fd5b505af115801561405e573d6000803e3d6000fd5b505050506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156140d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140f59190614557565b905060015b818110156106f9576001546040517f172c48c700000000000000000000000000000000000000000000000000000000815260048101839052600091829173ffffffffffffffffffffffffffffffffffffffff9091169063172c48c7906024016040805180830381865afa158015614175573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061419991906147cd565b915091508461ffff168161ffff16111561428c576001546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015261ffff881660248301529091169063a70bc54290604401600060405180830381600087803b15801561422457600080fd5b505af1158015614238573d6000803e3d6000fd5b505060405161ffff8816815273ffffffffffffffffffffffffffffffffffffffff851692507f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650915060200160405180910390a25b50506001016140fa565b60008181526001830160205260408120546142dd57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610b43565b506000610b43565b73ffffffffffffffffffffffffffffffffffffffff8116811461167a57600080fd5b60006020828403121561431957600080fd5b8135612cc4816142e5565b61ffff8116811461167a57600080fd5b6000806040838503121561434757600080fd5b8235614352816142e5565b9150602083013561436281614324565b809150509250929050565b60006020828403121561437f57600080fd5b5035919050565b801515811461167a57600080fd5b600080604083850312156143a757600080fd5b82356143b2816142e5565b9150602083013561436281614386565b600080604083850312156143d557600080fd5b82356143e0816142e5565b91506020830135614362816142e5565b6fffffffffffffffffffffffffffffffff8116811461167a57600080fd5b60006020828403121561442057600080fd5b8135612cc4816143f0565b6000806040838503121561443e57600080fd5b8235614449816143f0565b91506020830135614362816143f0565b60006020828403121561446b57600080fd5b813560ff81168114612cc457600080fd5b64ffffffffff8116811461167a57600080fd5b6000602082840312156144a157600080fd5b8135612cc48161447c565b600080600080600060a086880312156144c457600080fd5b85356144cf81614324565b945060208601356144df81614324565b935060408601356144ef81614324565b925060608601356144ff81614324565b9150608086013561450f81614324565b809150509295509295909350565b60006020828403121561452f57600080fd5b8135612cc481614386565b60006020828403121561454c57600080fd5b8151612cc481614386565b60006020828403121561456957600080fd5b5051919050565b8051612419816142e5565b60006020828403121561458d57600080fd5b8151612cc4816142e5565b6000806000606084860312156145ad57600080fd5b83516145b8816143f0565b60208501519093506145c981614386565b60408501519092506145da8161447c565b809150509250925092565b600080604083850312156145f857600080fd5b8251614603816143f0565b6020840151909250614362816143f0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000602080838503121561465657600080fd5b825167ffffffffffffffff8082111561466e57600080fd5b818501915085601f83011261468257600080fd5b81518181111561469457614694614614565b8060051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f830116810181811085821117156146d7576146d7614614565b6040529182528482019250838101850191888311156146f557600080fd5b938501935b8285101561471a5761470b85614570565b845293850193928501926146fa565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061ffff8083168185168083038211156147a1576147a1614755565b01949350505050565b600061ffff838116908316818110156147c5576147c5614755565b039392505050565b600080604083850312156147e057600080fd5b82516147eb816142e5565b602084015190925061436281614324565b60008282101561480e5761480e614755565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea264697066735822122046c364b67d38a3dd85b57e027716324d90dd1df102f265f0a0e2697babdb3f3b64736f6c634300080a003394525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac6506101606040526000805462ff00001916620c00001790553480156200002357600080fd5b50604051620058e8380380620058e8833981016040819052620000469162000537565b806001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000085573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ab919062000537565b6000805460ff191690556001600160a01b038116620000dd57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200011c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000142919062000537565b6001600160a01b03166080816001600160a01b031681525050506000816001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200019d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c3919062000537565b6001600160a01b03831661010081905260e081905260408051632495a59960e01b81529051929350600092632495a599916004808201926020929091908290030181865afa1580156200021a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000240919062000537565b6001600160a01b03811660c05290506200025a8162000472565b816001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000299573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002bf919062000537565b6001600160a01b0316610120816001600160a01b031681525050816001600160a01b03166377532ed96040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000318573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033e919062000537565b6001600160a01b0316610140816001600160a01b031681525050816001600160a01b031663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000397573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003bd919062000537565b6001600001600a6101000a8154816001600160a01b0302191690836001600160a01b03160217905550816001600160a01b0316639068a8686040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000425573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044b919062000537565b6001600160a01b031660a0525050600380546001600160a01b031916331790555062000588565b6001600160a01b03811660009081526006602052604090205415620004aa57604051632e5a5c7760e01b815260040160405180910390fd5b61010060055410620004cf57604051631cbbe18560e01b815260040160405180910390fd5b600580546001600160a01b0383166000818152600660209081526040808320600190951b948590558483526004909152812091909155825491929062000515836200055e565b91905055505050565b6001600160a01b03811681146200053457600080fd5b50565b6000602082840312156200054a57600080fd5b815162000557816200051e565b9392505050565b60006000198214156200058157634e487b7160e01b600052601160045260246000fd5b5060010190565b60805160a05160c05160e051610100516101205161014051615248620006a0600039600081816107e20152818161371001526137c501526000818161052f01526136780152600081816103d301528181610e5701528181610ebb015281816124ff0152818161265a01528181612aa101528181612b8c01528181612c4e01528181612d0d0152613b8f015260006105a401526000818161062701528181610d2201528181610db301528181610e0001528181610e3601528181610f3f0152818161203a01528181612b6b015281816130ee015281816134dc015281816135a90152613fe601526000818161081c01528181610fe101526124c20152600081816107a80152818161118401526122cb01526152486000f3fe608060405234801561001057600080fd5b50600436106103415760003560e01c8063830aa745116101bd578063a70bc542116100f9578063e75538c7116100a2578063f9aa028a1161007c578063f9aa028a1461089d578063fdd57645146108bd578063fe47cde7146108f3578063ff6875431461091357600080fd5b8063e75538c714610864578063e958b70414610877578063f67c5bd01461088a57600080fd5b8063db7ceb80116100d3578063db7ceb8014610817578063dc2b21c11461083e578063e1998cf91461085157600080fd5b8063a70bc542146107ca578063c5e10eef146107dd578063d48bfca71461080457600080fd5b806394cf073a116101665780639f5f86ae116101405780639f5f86ae146107745780639fd12b7714610787578063a366f49614610790578063a50cf2c8146107a357600080fd5b806394cf073a146106f557806395373018146107085780639af1d35a1461071b57600080fd5b80638991b2f1116101975780638991b2f1146106af5780638fe3f93f146106cf578063944ac59f146106e257600080fd5b8063830aa7451461066f5780638345f26e146106825780638456cb59146106a757600080fd5b8063458936f51161028c578063570a7af2116102355780636ce4074a1161020f5780636ce4074a146105ef5780636e98e5e41461060f5780636f307dc314610622578063783274381461064957600080fd5b8063570a7af21461059f5780635c975abb146105c6578063654a9eda146105dc57600080fd5b80635063524a116102665780635063524a1461055157806351e3f1601461058457806354fd4d501461059757600080fd5b8063458936f51461050e57806346fb371d146105175780634f0e0ef31461052a57600080fd5b80632630c12f116102ee5780633192195c116102c85780633192195c146104be5780633e8297ca146104e65780633f4ba83a1461050657600080fd5b80632630c12f1461045857806329df0b93146104845780632f7a18811461049757600080fd5b806316f0115b1161031f57806316f0115b146103ce578063172c48c7146103f55780632362a2d81461043757600080fd5b8063055ee9b5146103465780630d8f9cee146103a657806311ca4fc2146103bb575b600080fd5b61037c610354366004614a87565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6103b96103b4366004614aa4565b610949565b005b6103b96103c9366004614aa4565b610a76565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b610408610403366004614add565b610b4e565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835261ffff90911660208301520161039d565b61044a610445366004614b13565b610b66565b60405190815260200161039d565b6001546a0100000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1661037c565b6103b9610492366004614a87565b6110be565b60005461037c906301000000900473ffffffffffffffffffffffffffffffffffffffff1681565b6104d16104cc366004614a87565b611122565b6040805192835260208301919091520161039d565b61044a6104f4366004614a87565b60096020526000908152604090205481565b6103b9611156565b61044a60055481565b6103b9610525366004614b95565b611244565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b61056461055f366004614be6565b61149b565b60408051948552602085019390935291830152606082015260800161039d565b6103b9610592366004614aa4565b611602565b61044a600281565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b60005460ff16604051901515815260200161039d565b6103b96105ea366004614c21565b611703565b6106026105fd366004614d40565b611bbb565b60405161039d9190614e5b565b6103b961061d366004614aa4565b611e8e565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b61065c610657366004614a87565b612036565b60405161ffff909116815260200161039d565b6103b961067d366004614b95565b61210f565b6000546106959062010000900460ff1681565b60405160ff909116815260200161039d565b6103b961229d565b61044a6106bd366004614a87565b60086020526000908152604090205481565b61037c6106dd366004614e6e565b612389565b6103b96106f0366004614ea5565b612718565b61044a610703366004614f0a565b612845565b6103b9610716366004614a87565b612e5a565b6001546040805161ffff808416825262010000840481166020830152640100000000840481169282019290925266010000000000008304821660608201526801000000000000000090920416608082015260a00161039d565b6103b9610782366004614a87565b612f85565b61044a60075481565b6103b961079e366004614add565b613045565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b96107d8366004614f4c565b61309b565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b9610812366004614a87565b613221565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b961084c366004614f81565b61327b565b6103b961085f366004614aa4565b613306565b610408610872366004614add565b6134c9565b61037c610885366004614a87565b613541565b61044a610898366004614a87565b6135a5565b60035461037c9073ffffffffffffffffffffffffffffffffffffffff1681565b61037c6108cb366004614a87565b600b6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b600c5461037c9073ffffffffffffffffffffffffffffffffffffffff1681565b61037c610921366004614a87565b600a6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561099b57506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b156109d2576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff1615610a14576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055610a4a828261362e565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b60035473ffffffffffffffffffffffffffffffffffffffff163314610ac7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805473ffffffffffffffffffffffffffffffffffffffff9384166301000000027fffffffffffffffffff0000000000000000000000000000000000000000ffffff90911617905560018054919092166a0100000000000000000000027fffff0000000000000000000000000000000000000000ffffffffffffffffffff909116179055565b600080610b5d6001841b6134c9565b91509150915091565b6000805460ff1615610bd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064015b60405180910390fd5b600054610100900460ff1615610c1b576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff163314610ca0576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610cab89613541565b90506000806000806000610cbe86611122565b9094509050610ccf8c8e868461149b565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152939b5093985090955093506000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015610d6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8f9190614fa4565b9050610d9b8887614fec565b610da6906001614fec565b811115610de657610de1877f00000000000000000000000000000000000000000000000000000000000000008d60018c8b870303038d61366e565b610e30565b610e3073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168d8960018a8d01869003016138c0565b610e7e877f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000089600061366e565b6040517fca9505e40000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604481018490527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ca9505e490606401600060405180830381600087803b158015610f1457600080fd5b505af1158015610f28573d6000803e3d6000fd5b50505050505050506001841115610f6757610f67837f00000000000000000000000000000000000000000000000000000000000000008d87600061366e565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260086020526040902054861916610f9c8489888461395b565b6040517f89b77b3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f000000000000000000000000000000000000000000000000000000000000000016906389b77b3e90602401600060405180830381600087803b15801561102557600080fd5b505af1158015611039573d6000803e3d6000fd5b50505073ffffffffffffffffffffffffffffffffffffffff909c16600090815260026020526040812080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550929a9950505050505050505050565b6000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314611116576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61111f81613a35565b50565b60008060008061113185613aa6565b91955092509050816111438286615004565b61114d9190615041565b92505050915091565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156111e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611204919061507c565b61123a576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611242613c24565b565b60005460ff16156112b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156112f3576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100178155338152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff9081169084161480159061137457506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b80156113985750600c5473ffffffffffffffffffffffffffffffffffffffff163314155b806113b7575073ffffffffffffffffffffffffffffffffffffffff8316155b156113ee576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113f7826135a5565b61142d576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061143885613541565b9050611448838583856000613d05565b61146c5761145b83858360006001613d05565b5061146a838583856001613d05565b505b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b6001546000908190819081906127109061ffff166114b98888615099565b6114c39190615004565b6114cd9190615041565b6114d79086614fec565b935060018760028111156114ed576114ed6150b0565b1415611587576001546000906127109061151390640100000000900461ffff168b615004565b61151d9190615041565b6001549091506127109061153b9062010000900461ffff168b615004565b6115459190615041565b61154f9086614fec565b94508481111561156657600185820303935061156a565b8094505b85811061157b578585039250611581565b84860391505b506115f7565b600287600281111561159b5761159b6150b0565b14156115f157600154600090612710906115c59068010000000000000000900461ffff168b615004565b6115cf9190615041565b6001549091506127109061153b906601000000000000900461ffff168b615004565b84840391505b945094509450949050565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561165457506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b1561168b576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff16156116cd576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055610a4a8282613ea6565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561175557506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b1561178c576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff16156117ce576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790556118048584613ea6565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152600091908616906370a0823190602401602060405180830381865afa158015611874573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118989190614fa4565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529192506000918616906370a0823190602401602060405180830381865afa15801561190a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192e9190614fa4565b60015490915060009081906a0100000000000000000000900473ffffffffffffffffffffffffffffffffffffffff16635cecbd0e61196c8689615099565b8a6119778988615099565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152600481019390935273ffffffffffffffffffffffffffffffffffffffff918216602484015260448301528a1660648201526084016040805180830381865afa1580156119f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1791906150df565b9150915060018411611a2d57611a2d898961362e565b611a3687612036565b611a449061ffff1682615004565b9050611a4f88612036565b611a5d9061ffff1683615004565b9150818110611a7857611a6f89613a35565b5050505061146c565b73ffffffffffffffffffffffffffffffffffffffff891660009081526009602052604081205483611ab56b033b2e3c9fd0803ce800000085615004565b611abf9190615041565b611ad5906b033b2e3c9fd0803ce8000000615099565b611adf9190614fec565b60015490915061271090611b0a906b033b2e3c9fd0803ce80000009062010000900461ffff16615004565b611b149190615041565b8111611b555773ffffffffffffffffffffffffffffffffffffffff8a166000908152600960205260409020819055611b4b8a613a35565b505050505061146c565b611b5e8a613f56565b50505073ffffffffffffffffffffffffffffffffffffffff871660009081526009602052604090206001905550505050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b6060611bc960005460ff1690565b15611c30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff1615611c72576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100178155338152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff908116908416141580611ce7575073ffffffffffffffffffffffffffffffffffffffff8316155b15611d3d57600c5473ffffffffffffffffffffffffffffffffffffffff163314611d3d576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611d4885613541565b90508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167faed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab0360405160405180910390a36040517f1cff79cd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821690631cff79cd90611df89087908790600401615103565b6000604051808303816000875af1158015611e17573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611e5d9190810190615132565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905595945050505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314611edf576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821615611f4f5773ffffffffffffffffffffffffffffffffffffffff8281166000908152600a6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169183169190911790555b73ffffffffffffffffffffffffffffffffffffffff811615611fbf5773ffffffffffffffffffffffffffffffffffffffff8181166000908152600b6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169184169190911790555b73ffffffffffffffffffffffffffffffffffffffff811673cccccccccccccccccccccccccccccccccccccccc141561203257600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790555b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120ba5750506001547e01000000000000000000000000000000000000000000000000000000000000900461ffff1690565b60006120c5836135a5565b9050806120fe576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612107816134c9565b949350505050565b60005460ff161561217c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156121be576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff163314612243576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61224d8383613ea6565b61226f73ffffffffffffffffffffffffffffffffffffffff83168585846138c0565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555050565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015612327573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061234b919061507c565b612381576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112426142d4565b6000805460ff16156123f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff1615612439576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff1633146124be576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166321d18456857f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612568573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061258c9190614fa4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168152600481019290925260248201526044016020604051808303816000875af11580156125e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061260b91906151a0565b6040517fbf28068b0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff80831660248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063bf28068b90604401600060405180830381600087803b1580156126a057600080fd5b505af11580156126b4573d6000803e3d6000fd5b505050506126c28382614394565b73ffffffffffffffffffffffffffffffffffffffff811660009081526008602052604081206001905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690559392505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314612769576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805461ffff92831668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9484166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff96851664010000000002969096167fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff97851662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000090931694909816939093171794909416949094179190911716919091179055565b6000805460ff16156128b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156128f5576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff16331461297a576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080600061298887613aa6565b925092509250846129a25761299d8684615099565b6129ac565b6129ac8684614fec565b935060008515612b045769021e19e0c9bab24000008510612a15576129d583603689901c615004565b6129e3603686901c84615004565b6129ed9190614fec565b603686901c6129fc8585615004565b612a069190615004565b612a109190615041565b612a52565b612a1f8388615004565b612a298584615004565b612a339190614fec565b85612a3e8585615004565b612a489190615004565b612a529190615041565b6040517fbf28068b0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff8a811660248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063bf28068b90604401600060405180830381600087803b158015612ae757600080fd5b505af1158015612afb573d6000803e3d6000fd5b50505050612d9f565b60008484612b128583615004565b612b1c9190615041565b612b269190615099565b60015490915060009061271090612b419061ffff1684615004565b612b4b9190615041565b905073ffffffffffffffffffffffffffffffffffffffff8a1663d1660f997f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000084612bb6878f614fec565b612bc09190614fec565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b158015612c3457600080fd5b505af1158015612c48573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ca9505e4838b612c949190614fec565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815260048101919091526024810184905260006044820152606401600060405180830381600087803b158015612cf357600080fd5b505af1158015612d07573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d9a9190614fa4565b925050505b6040517f16128211000000000000000000000000000000000000000000000000000000008152600481018690526024810182905273ffffffffffffffffffffffffffffffffffffffff891690631612821190604401600060405180830381600087803b158015612e0e57600080fd5b505af1158015612e22573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055509498975050505050505050565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff16158015612eac57506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b15612ee3576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff1615612f25576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055612f5a81613f56565b50600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b60035473ffffffffffffffffffffffffffffffffffffffff163314612fd6576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517ff62005acebe9b616aefb5f248b48f5e89f28437b27d1eebc0b2d911209f297af90600090a250565b60035473ffffffffffffffffffffffffffffffffffffffff163314613096576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600755565b60035473ffffffffffffffffffffffffffffffffffffffff1633146130ec576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613193576001805461ffff83167e01000000000000000000000000000000000000000000000000000000000000027dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790555050565b600061319e836135a5565b9050806131d7576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000908152600460205260409020805473ffffffffffffffffffffffffffffffffffffffff1675ffff000000000000000000000000000000000000000060a084901b161790555050565b60035473ffffffffffffffffffffffffffffffffffffffff163314613272576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61111f81614467565b60035473ffffffffffffffffffffffffffffffffffffffff1633146132cc576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805460ff90921662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff909216919091179055565b60005460ff1615613373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156133b5576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff16331461343a576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061344583613541565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260026020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055905061349c8282614394565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b60008082600114156135275750506001547f0000000000000000000000000000000000000000000000000000000000000000927e0100000000000000000000000000000000000000000000000000000000000090910461ffff169150565b50506000908152600460205260409020549060a082901c90565b73ffffffffffffffffffffffffffffffffffffffff80821660009081526002602052604090205416806135a0576040517fb5ba4c4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146136255773ffffffffffffffffffffffffffffffffffffffff8216600090815260066020526040902054613628565b60015b92915050565b6000613639826135a5565b73ffffffffffffffffffffffffffffffffffffffff909316600090815260086020526040902080549319939093169092555050565b8080156136c657507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b15613828576040517fd1660f9900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301526044820184905286169063d1660f9990606401600060405180830381600087803b15801561376357600080fd5b505af1158015613777573d6000803e3d6000fd5b50506040517f5869dba800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690527f0000000000000000000000000000000000000000000000000000000000000000169250635869dba89150604401600060405180830381600087803b15801561380b57600080fd5b505af115801561381f573d6000803e3d6000fd5b505050506138b9565b6040517fd1660f9900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301526044820184905286169063d1660f9990606401600060405180830381600087803b1580156138a057600080fd5b505af11580156138b4573d6000803e3d6000fd5b505050505b5050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261395590859061455b565b50505050565b60025b8181116138b95781811615613a2d576000613978826134c9565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529192506000918316906370a0823190602401602060405180830381865afa1580156139eb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a0f9190614fa4565b90506002811115613a2a57613a2a878388600185038961366e565b50505b60011b61395e565b73ffffffffffffffffffffffffffffffffffffffff811660009081526008602052604081205490613a6582614667565b60005490915062010000900460ff16811115613aa1576000613a86836146a7565b613a91906001614fec565b905061395584848460008561470b565b505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff16631afbb7a46040518163ffffffff1660e01b8152600401602060405180830381865afa158015613af6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b1a9190614fa4565b92508373ffffffffffffffffffffffffffffffffffffffff166317d11a156040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b8b9190614fa4565b91507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bf8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c1c9190614fa4565b929491935050565b60005460ff16613c90576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610bd0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6040805173ffffffffffffffffffffffffffffffffffffffff8681166024830152604480830186905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b30000000000000000000000000000000000000000000000000000000017905291517f1cff79cd000000000000000000000000000000000000000000000000000000008152600092861691631cff79cd91613dc6918a91600401615103565b6000604051808303816000875af1925050508015613e2457506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052613e219190810190615132565b60015b613e2d57613e61565b80511580613e50575080806020019051810190613e4a919061507c565b15156001145b15613e5f576001915050613e9d565b505b8115613e99576040517f76e3e29c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060005b95945050505050565b6000613eb1826135a5565b9050801580613ec35750600754811615155b15613efa576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83166000908152600860205260409020548116613aa15773ffffffffffffffffffffffffffffffffffffffff83166000908152600860205260409020805482179055505050565b60015473ffffffffffffffffffffffffffffffffffffffff8281166000908152600860205260408120546a010000000000000000000090930490911691908080613f9f86611122565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526127108202600482015273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350908716915063f9a6503090604401602060405180830381865afa15801561403a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061405e9190614fa4565b9250614069846146a7565b6001019150506000806000805b848110156142a157801561408f5760018186031b614092565b60015b935086841615614299576000806140a8866134c9565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8e811660048301529294509092506000918416906370a0823190602401602060405180830381865afa15801561411d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141419190614fa4565b9050600181111561428c576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff848116602483015261ffff841691908d169063f9a6503090604401602060405180830381865afa1580156141c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141ea9190614fa4565b6141f49190615004565b6141fe9087614fec565b95508886106142875760006142128b614667565b60005490915062010000900460ff16811115614249576142448d8c836001891561423e57898e0361470b565b8d61470b565b614278565b85156142785773ffffffffffffffffffffffffffffffffffffffff8d1660009081526008602052604090208b90555b50505050505050505050505050565b614295565b98861898600194505b5050505b600101614076565b506040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005460ff1615614341576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613cdb3390565b73ffffffffffffffffffffffffffffffffffffffff821615806143dd575073ffffffffffffffffffffffffffffffffffffffff8281166000908152600260205260409020541615155b15614414576040517f9e59609e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff918216600090815260026020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001691909216179055565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260066020526040902054156144c4576040517f2e5a5c7700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61010060055410614501576040517f1cbbe18500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005805473ffffffffffffffffffffffffffffffffffffffff83166000818152600660209081526040808320600190951b9485905584835260049091528120919091558254919290614552836151bd565b91905055505050565b60006145bd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166148799092919063ffffffff16565b805190915015613aa157808060200190518101906145db919061507c565b613aa1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610bd0565b60008060005b6101008110156146a0576001811b91508382161561468c578260010192505b838210614698576146a0565b60010161466d565b5050919050565b600081600114156146ba57506000919050565b61010060015b60016146cc8284614fec565b901c92506001831b848116158015906146e75750600185851c145b156146f257506146a0565b84811061470157839250614705565b8391505b506146c0565b815b81811015614846576001811b8581161561483d57600061472c826134c9565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529192506000918316906370a0823190602401602060405180830381865afa15801561479f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147c39190614fa4565b90506001811161483a57600054978318977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9097019660ff6201000090910416871161483a5750505073ffffffffffffffffffffffffffffffffffffffff86166000908152600860205260409020859055506138b9565b50505b5060010161470d565b506040517f53275fcb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606148888484600085614892565b90505b9392505050565b606082471015614924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610bd0565b843b61498c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610bd0565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516149b591906151f6565b60006040518083038185875af1925050503d80600081146149f2576040519150601f19603f3d011682016040523d82523d6000602084013e6149f7565b606091505b5091509150614a07828286614a12565b979650505050505050565b60608315614a2157508161488b565b825115614a315782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd09190614e5b565b73ffffffffffffffffffffffffffffffffffffffff8116811461111f57600080fd5b600060208284031215614a9957600080fd5b813561488b81614a65565b60008060408385031215614ab757600080fd5b8235614ac281614a65565b91506020830135614ad281614a65565b809150509250929050565b600060208284031215614aef57600080fd5b5035919050565b8035600381106135a057600080fd5b801515811461111f57600080fd5b600080600080600080600060e0888a031215614b2e57600080fd5b8735614b3981614a65565b9650614b4760208901614af6565b9550604088013594506060880135614b5e81614a65565b93506080880135614b6e81614a65565b925060a0880135915060c0880135614b8581614b05565b8091505092959891949750929550565b60008060008060808587031215614bab57600080fd5b8435614bb681614a65565b93506020850135614bc681614a65565b92506040850135614bd681614a65565b9396929550929360600135925050565b60008060008060808587031215614bfc57600080fd5b84359350614c0c60208601614af6565b93969395505050506040820135916060013590565b600080600080600060a08688031215614c3957600080fd5b8535614c4481614a65565b94506020860135614c5481614a65565b93506040860135614c6481614a65565b94979396509394606081013594506080013592915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614cf257614cf2614c7c565b604052919050565b600067ffffffffffffffff821115614d1457614d14614c7c565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600080600060608486031215614d5557600080fd5b8335614d6081614a65565b92506020840135614d7081614a65565b9150604084013567ffffffffffffffff811115614d8c57600080fd5b8401601f81018613614d9d57600080fd5b8035614db0614dab82614cfa565b614cab565b818152876020838501011115614dc557600080fd5b816020840160208301376000602083830101528093505050509250925092565b60005b83811015614e00578181015183820152602001614de8565b838111156139555750506000910152565b60008151808452614e29816020860160208601614de5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061488b6020830184614e11565b60008060408385031215614e8157600080fd5b823591506020830135614ad281614a65565b803561ffff811681146135a057600080fd5b600080600080600060a08688031215614ebd57600080fd5b614ec686614e93565b9450614ed460208701614e93565b9350614ee260408701614e93565b9250614ef060608701614e93565b9150614efe60808701614e93565b90509295509295909350565b600080600060608486031215614f1f57600080fd5b8335614f2a81614a65565b9250602084013591506040840135614f4181614b05565b809150509250925092565b60008060408385031215614f5f57600080fd5b8235614f6a81614a65565b9150614f7860208401614e93565b90509250929050565b600060208284031215614f9357600080fd5b813560ff8116811461488b57600080fd5b600060208284031215614fb657600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115614fff57614fff614fbd565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561503c5761503c614fbd565b500290565b600082615077577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60006020828403121561508e57600080fd5b815161488b81614b05565b6000828210156150ab576150ab614fbd565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600080604083850312156150f257600080fd5b505080516020909101519092909150565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015260006148886040830184614e11565b60006020828403121561514457600080fd5b815167ffffffffffffffff81111561515b57600080fd5b8201601f8101841361516c57600080fd5b805161517a614dab82614cfa565b81815285602083850101111561518f57600080fd5b613e9d826020830160208601614de5565b6000602082840312156151b257600080fd5b815161488b81614a65565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156151ef576151ef614fbd565b5060010190565b60008251615208818460208701614de5565b919091019291505056fea26469706673582212209d39bb9d4972b515acdad1ffb757acd15e103ca6ee762f88a6382b36243734ba64736f6c634300080a00336101406040523480156200001257600080fd5b5060405162005e9738038062005e97833981016040819052620000359162000198565b60016000556001600160a01b0383166200006257604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038316608081905260408051636f307dc360e01b81529051636f307dc3916004808201926020929091908290030181865afa158015620000ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d39190620001ea565b6001600160a01b031660a0816001600160a01b031681525050826001600160a01b0316634f0e0ef36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200012b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001519190620001ea565b6001600160a01b0390811660c0529190911660e0819052151561010052151561012052506200020f565b80516001600160a01b03811681146200019357600080fd5b919050565b600080600060608486031215620001ae57600080fd5b620001b9846200017b565b9250620001c9602085016200017b565b915060408401518015158114620001df57600080fd5b809150509250925092565b600060208284031215620001fd57600080fd5b62000208826200017b565b9392505050565b60805160a05160c05160e0516101005161012051615a86620004116000396000818161061101528181612fb5015261481f01526000818161031701528181610dde015281816144f901526146e5015260008181610557015281816146a901526147a901526000818161034b0152818161387d015261392d01526000818161047301528181611bfe0152818161274f0152818161280d0152818161366a01526137dd015260008181610665015281816109d801528181610b0301528181610bd501528181610cdd01528181610e6501528181610fe30152818161114e0152818161120e0152818161132e015281816114510152818161162b01528181611708015281816117e0015281816119e501528181611b1201528181611d9501528181611ed5015281816120040152818161216801528181612290015281816123c601528181612568015281816126390152818161266f0152818161293d01528181612a2101528181612a8a01528181612bde01528181612d2601528181612e6801528181612ec2015281816130a10152818161311b015281816131b401528181613341015281816134c10152818161358a0152818161372f01528181613a1a01528181613b2e01528181613dbb015281816142200152818161432801528181614492015281816148e7015281816149e801528181614aae0152614d8f0152615a866000f3fe6080604052600436106102695760003560e01c8063860aefcf11610153578063c7de38a6116100cb578063dfd594651161007f578063eb9606df11610064578063eb9606df1461081e578063f9eaee0d1461083e578063ffd9b9071461085e57600080fd5b8063dfd59465146107de578063e1f21c67146107fe57600080fd5b8063cff0ab96116100b0578063cff0ab96146106ef578063d9ccbec114610783578063dcf65482146107be57600080fd5b8063c7de38a6146106a7578063caa5c23f146106dc57600080fd5b80639c55a05411610122578063b55bb84b11610107578063b55bb84b14610633578063c12c21c014610653578063c690908a1461068757600080fd5b80639c55a054146105df578063b1836d32146105ff57600080fd5b8063860aefcf146104db5780639408b63f146105455780639b67ab30146105795780639be0536a146105bd57600080fd5b80635d91a0e0116101e65780636d19b486116101b55780637071b7c51161019a5780637071b7c51461049557806379c0ef91146104a857806382871ace146104c857600080fd5b80636d19b486146104415780636f307dc31461046157600080fd5b80635d91a0e0146103e85780635f73fbec146103fb578063601d66f61461040e5780636c8f225d1461042e57600080fd5b80633d9287fa1161023d5780635019e20a116102225780635019e20a1461039257806354fd4d50146103b257806359781034146103d557600080fd5b80633d9287fa146103055780634f0e0ef31461033957600080fd5b8062842b571461026e578063256ac915146102905780632a7ba1f7146102c55780632b7c7b11146102e5575b600080fd5b34801561027a57600080fd5b5061028e6102893660046151bf565b61087e565b005b34801561029c57600080fd5b506102b06102ab3660046151f8565b61098e565b60405190151581526020015b60405180910390f35b3480156102d157600080fd5b5061028e6102e0366004615215565b610a61565b3480156102f157600080fd5b5061028e610300366004615215565b610c3b565b34801561031157600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561034557600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102bc565b34801561039e57600080fd5b5061028e6103ad3660046151f8565b610d6a565b3480156103be57600080fd5b506103c7600281565b6040519081526020016102bc565b61028e6103e336600461522e565b61108c565b61028e6103f63660046152bb565b611275565b61028e610409366004615340565b611589565b34801561041a57600080fd5b5061028e6104293660046153d8565b6117de565b61028e61043c36600461541b565b611900565b34801561044d57600080fd5b506102b061045c3660046151f8565b611c31565b34801561046d57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b61028e6104a336600461546e565b611c60565b3480156104b457600080fd5b5061036d6104c3366004615215565b611f3e565b61028e6104d63660046152bb565b611f4b565b3480156104e757600080fd5b5060025461051c906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041682565b604080516fffffffffffffffffffffffffffffffff9384168152929091166020830152016102bc565b34801561055157600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561058557600080fd5b506004546040805167ffffffffffffffff608084901c1681526fffffffffffffffffffffffffffffffff9092166020830152016102bc565b3480156105c957600080fd5b506105d261227d565b6040516102bc91906154e2565b3480156105eb57600080fd5b5061028e6105fa36600461553c565b61228e565b34801561060b57600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561063f57600080fd5b5061028e61064e3660046151f8565b6123c4565b34801561065f57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561069357600080fd5b5061028e6106a23660046151f8565b6124c6565b3480156106b357600080fd5b506106c76106c23660046151f8565b612668565b604080519283526020830191909152016102bc565b61028e6106ea366004615557565b61289b565b3480156106fb57600080fd5b5060015461074e906fffffffffffffffffffffffffffffffff811690700100000000000000000000000000000000810460ff169071010000000000000000000000000000000000900464ffffffffff1683565b604080516fffffffffffffffffffffffffffffffff9094168452911515602084015264ffffffffff16908201526060016102bc565b34801561078f57600080fd5b506102b061079e366004615599565b600360209081526000928352604080842090915290825290205460ff1681565b3480156107ca57600080fd5b5061028e6107d93660046151f8565b612a88565b3480156107ea57600080fd5b506103c76107f93660046151f8565b612b86565b34801561080a57600080fd5b5061028e61081936600461522e565b612c6d565b34801561082a57600080fd5b5061028e6108393660046155c7565b612ec0565b34801561084a57600080fd5b506102b06108593660046151f8565b613057565b34801561086a57600080fd5b5061028e6108793660046155ee565b6131b2565b600260005414156108f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b6002600090815573ffffffffffffffffffffffffffffffffffffffff8316808252600360209081526040808420338086529083529381902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081527f9b3258bc4904fd6426b99843e206c6c7cdb1fd0f040121c25b71dafbb3851ee0910160405180910390a350506001600055565b6040517f055ee9b500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063055ee9b590602401602060405180830381865afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a43919061560b565b73ffffffffffffffffffffffffffffffffffffffff16141592915050565b60026000541415610ace576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610b5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b83919061560b565b9050610b903382846132eb565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906395373018906024015b600060405180830381600087803b158015610c1a57600080fd5b505af1158015610c2e573d6000803e3d6000fd5b5050600160005550505050565b60026000541415610ca8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610d39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5d919061560b565b9050610b90338284613411565b60026000541415610dd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000557f000000000000000000000000000000000000000000000000000000000000000015610e34576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610ec1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee5919061560b565b33600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915290205490915060ff16610f52576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f5d82613583565b5090508015610f98576040517ff713841e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b15801561102757600080fd5b505af115801561103b573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692503391507f93c70cc9715bef0d83edf2095f3595402279d274f402a73ffc17f1bcb19d863d90600090a35050600160005550565b600260005414156110f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611106613875565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063e958b70490602401602060405180830381865afa158015611197573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bb919061560b565b90506111c9848285856139b7565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401600060405180830381600087803b15801561125257600080fd5b505af1158015611266573d6000803e3d6000fd5b50506001600055505050505050565b600260005414156112e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611375573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611399919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166113e8576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806113f483613583565b915091508161142f576040517f1fdd676f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611437613875565b831561144d5761144d85858b8660016000613ae3565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632362a2d88b600185338e8e8e6040518863ffffffff1660e01b81526004016114b59796959493929190615663565b6020604051808303816000875af11580156114d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f891906156bf565b90508873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f7dfecd8419723a9d3954585a30c2a270165d70aafa146c11c1e1b88ae14390648460405161157091815260200190565b60405180910390a4505060016000555050505050505050565b600260005414156115f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ab919061560b565b90506116b5613875565b81156116cb576116cb8383338460016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d89061174a903390600090819083908d908d908d90600401615663565b6020604051808303816000875af1158015611769573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178d91906156bf565b5060405173ffffffffffffffffffffffffffffffffffffffff87169033907f460ad03b1cf79b1d64d3aefa28475f110ab66e84649c52bb41ed796b9b39198190600090a35050600160005550505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611849573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118d1576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff90811670010000000000000000000000000000000002911617600255565b6002600054141561196d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000908155606461198461ffff851687615707565b61198e9190615744565b9050611999816144f7565b6119a2816145e8565b6119ab84614668565b6119b3613875565b6040517f172c48c7000000000000000000000000000000000000000000000000000000008152600060048201819052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a64919061577f565b61ffff169150611a789050816127106157ae565b611a829083615707565b611a8c8288615707565b11611ac3576040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff86811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611b5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b81919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638587604051611bef92919091825261ffff16602082015260400190565b60405180910390a3611c2386827f00000000000000000000000000000000000000000000000000000000000000008a6139b7565b505060016000555050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526006602052604081205415155b92915050565b60026000541415611ccd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611cdb856144f7565b611ce484614668565b611ced856145e8565b600154700100000000000000000000000000000000900460ff1615611d3e576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d46613875565b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff85811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611de0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e04919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638885604051611e7292919091825261ffff16602082015260400190565b60405180910390a38215611e9057611e908484878460006001613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015611f1957600080fd5b505af1158015611f2d573d6000803e3d6000fd5b505060016000555050505050505050565b6000611c5a60058361480f565b60026000541415611fb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa15801561204b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206f919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166120be576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120c661481b565b6120fc576040517f7e52ccb400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061210782612668565b509050612112613875565b82156121285761212884848a8560016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d8906121aa908c90600290879033908f908f908f90600401615663565b6020604051808303816000875af11580156121c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ed91906156bf565b90508773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167ffada13ff2d5e1a1d9da37ad4a4130893b34e3c69c32b17f87ec31fd661b867078460405161226591815260200190565b60405180910390a45050600160005550505050505050565b6060612289600561486b565b905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612381576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561242f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612453919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146124b7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614878565b5050565b60026000541415612533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156125c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e8919061560b565b90506125f4818361489a565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401610c00565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126fc919061560b565b905060008061270b8387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156127a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127c991906156bf565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015291965061271091851690637afb010490604401602060405180830381865afa158015612863573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061288791906156bf565b6128919190615744565b9350505050915091565b60026000541415612908576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129bd919061560b565b90506129c7613875565b8115612a7e576129dc83833384600080613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015612a6557600080fd5b505af1158015612a79573d6000803e3d6000fd5b505050505b5050600160005550565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612af3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b17919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b7b576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614c92565b600080612b9283612668565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152919350600092507f000000000000000000000000000000000000000000000000000000000000000090911690633192195c906024016040805180830381865afa158015612c26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4a91906157c5565b9150819050612c5b61271084615707565b612c659190615744565b949350505050565b60026000541415612cda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063fdd5764590602401602060405180830381865afa158015612d6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d91919061560b565b73ffffffffffffffffffffffffffffffffffffffff161480612dd7575073ffffffffffffffffffffffffffffffffffffffff831660009081526006602052604090205415155b15612e0e576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612eac57600080fd5b505af1158015611c23573d6000803e3d6000fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f4f919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612fb3576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000061300a576040517f50dd11fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805464ffffffffff90921671010000000000000000000000000000000000027fffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffffff909216919091179055565b6040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063f67c5bd090602401602060405180830381865afa1580156130e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061310c91906156bf565b905080158015906131ab5750807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015613184573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a891906156bf565b16155b9392505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561321d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613241919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146132a5576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018054911515700100000000000000000000000000000000027fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff909216919091179055565b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600060448301819052917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561338c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133b091906156bf565b90506133bb816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f98274bf834d179ee08dc0604071b0dc90b54731bd5f725a5a96a39a86bce025a8360405161340391815260200190565b60405180910390a250505050565b61341a816144f7565b600154700100000000000000000000000000000000900460ff161561346b576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600160448301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561350c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061353091906156bf565b905061353b816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f9cac51154cc0d835e2f9c9d1f59a9344588cee107f4203bf58a8c797e3a58c458360405161340391815260200190565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613617919061560b565b90506000806136268387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156136c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136e491906156bf565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529195506000917f00000000000000000000000000000000000000000000000000000000000000001690633192195c906024016040805180830381865afa158015613775573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061379991906157c5565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350600092506127109187169063f9a6503090604401602060405180830381865afa158015613837573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061385b91906156bf565b6138659190615707565b9092109794965093945050505050565b34156139b5577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156138e357600080fd5b505af11580156138f7573d6000803e3d6000fd5b50506040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201523460248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16935063a9059cbb925060440190506020604051808303816000875af115801561398f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139b391906157e9565b505b565b6139c084614cb4565b6040517f830aa74500000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f0000000000000000000000000000000000000000000000000000000000000000169063830aa74590608401600060405180830381600087803b158015613a5e57600080fd5b505af1158015613a72573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fa32435755c235de2976ed44a75a2f85cb01faf0c894f639fe0c32bb9455fea8f83604051613ad591815260200190565b60405180910390a350505050565b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301523060248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b158015613b7257600080fd5b505af1158015613b86573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff871692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a28460005b8181101561441d5736888883818110613bea57613bea615806565b9050602002810190613bfc9190615835565b90506004613c0d6020830183615873565b90501015613c47576040517fe2b0e50600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b30613c5560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16141561421c578415613ca9576040517f5fb9107f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613cb86020830183615873565b613cc1916158d8565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167f59781034000000000000000000000000000000000000000000000000000000001415613e3c5760008080613d1e6020860186615873565b613d2c916004908290615920565b810190613d39919061522e565b925092509250613e34838c73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614613e2b576040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015613e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e26919061560b565b613e2d565b8b5b84846139b7565b505050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2b7c7b11000000000000000000000000000000000000000000000000000000001415613ec757600194506000613e996020840184615873565b613ea7916004908290615920565b810190613eb49190615215565b9050613ec1898983613411565b50614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2a7ba1f7000000000000000000000000000000000000000000000000000000001415613f80578415613f49576040517fc0b0caa800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613f586020840184615873565b613f66916004908290615920565b810190613f739190615215565b9050613ec18989836132eb565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f233a8caa0000000000000000000000000000000000000000000000000000000014156140e457600080613fda6020850185615873565b613fe8916004908290615920565b810190613ff5919061594a565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c8116600483015292945090925082918416906370a0823190602401602060405180830381865afa158015614069573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061408d91906156bf565b10156140dd576040517fa5ac537300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016108e7565b5050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fc690908a00000000000000000000000000000000000000000000000000000000141561416457600061413d6020840184615873565b61414b916004908290615920565b81019061415891906151f8565b9050613ec1888261489a565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f23e27a640000000000000000000000000000000000000000000000000000000014156141e45760006141bd6020840184615873565b6141cb916004908290615920565b8101906141d891906151f8565b9050613ec18882614d42565b6040517f1e9e7e7a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50614414565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff68754361426760208501856151f8565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156142d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142f4919061560b565b73ffffffffffffffffffffffffffffffffffffffff16148061436d575073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001661435560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16145b156143a4576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6144126143b46020830183615873565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506143f69250505060208401846151f8565b73ffffffffffffffffffffffffffffffffffffffff1690614e39565b505b50600101613bcf565b506040517f60c8e8938c9a0c0d88a98d6f1c562ce68077e12bf3edb8047378f2f736cb45b490600090a16040517fe1998cf900000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff86811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b1580156144d657600080fd5b505af11580156144ea573d6000803e3d6000fd5b5050505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006139b3576001546fffffffffffffffffffffffffffffffff9081169081146124c257600454608081901c906fffffffffffffffffffffffffffffffff16600067ffffffffffffffff8316431461456e578461458a565b61458a6fffffffffffffffffffffffffffffffff831686615976565b9050838111156145c6576040517f675f1a5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff81164360801b176004555050505050565b6002546fffffffffffffffffffffffffffffffff16811080614631575060025470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681115b156139b3576040517fce16799400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61467061481b565b156146a7576040517f63fc31c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1615614806577f0000000000000000000000000000000000000000000000000000000000000000801561472657503373ffffffffffffffffffffffffffffffffffffffff821614155b1561475d576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600160248301527f00000000000000000000000000000000000000000000000000000000000000001690639dc29fac90604401600060405180830381600087803b1580156147ed57600080fd5b505af1158015614801573d6000803e3d6000fd5b505050505b6139b381614cb4565b60006131ab8383614e7b565b60007f0000000000000000000000000000000000000000000000000000000000000000801561228957505060015471010000000000000000000000000000000000900464ffffffffff1642101590565b606060006131ab83614ea5565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f01565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561492b57600080fd5b505af115801561493f573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527fdf498aa1c340e992665d6fb4f3be8436d452c45a630cb6d7fab7963da39bac8793500190505b60405180910390a15050565b6040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600091829160019183917f00000000000000000000000000000000000000000000000000000000000000001690638991b2f190602401602060405180830381865afa158015614a2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a5391906156bf565b90505b808211614c895780821615614c7d576040517fe75538c700000000000000000000000000000000000000000000000000000000815260048101839052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e75538c7906024016040805180830381865afa158015614af4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b18919061577f565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529294509092506000918416906370a0823190602401602060405180830381865afa158015614b8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bb191906156bf565b90506001811115614c79576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff8481166024830152600091908b169063f9a6503090604401602060405180830381865afa158015614c33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c5791906156bf565b978801979050614c6b61ffff841682615707565b614c759088615976565b9650505b5050505b600182901b9150614a56565b50509250929050565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f50565b3373ffffffffffffffffffffffffffffffffffffffff821614801590614d0b575033600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16155b156139b3576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b158015614dd357600080fd5b505af1158015614de7573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527f69db9e9764da61b6681b89fb0f5be018506e0342036e56b59c3015a620d60977935001905061498d565b60606131ab83836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250615043565b6000826000018281548110614e9257614e92615806565b9060005260206000200154905092915050565b606081600001805480602002602001604051908101604052809291908181526020018280548015614ef557602002820191906000526020600020905b815481526020019060010190808311614ee1575b50505050509050919050565b6000818152600183016020526040812054614f4857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611c5a565b506000611c5a565b60008181526001830160205260408120548015615039576000614f746001836157ae565b8554909150600090614f88906001906157ae565b9050818114614fed576000866000018281548110614fa857614fa8615806565b9060005260206000200154905080876000018481548110614fcb57614fcb615806565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080614ffe57614ffe61598e565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611c5a565b6000915050611c5a565b6060612c65848460008585843b6150b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108e7565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516150df91906159ed565b60006040518083038185875af1925050503d806000811461511c576040519150601f19603f3d011682016040523d82523d6000602084013e615121565b606091505b509150915061513182828661513c565b979650505050505050565b6060831561514b5750816131ab565b82511561515b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e791906159ff565b73ffffffffffffffffffffffffffffffffffffffff811681146139b357600080fd5b80151581146139b357600080fd5b600080604083850312156151d257600080fd5b82356151dd8161518f565b915060208301356151ed816151b1565b809150509250929050565b60006020828403121561520a57600080fd5b81356131ab8161518f565b60006020828403121561522757600080fd5b5035919050565b60008060006060848603121561524357600080fd5b833561524e8161518f565b9250602084013561525e8161518f565b929592945050506040919091013590565b60008083601f84011261528157600080fd5b50813567ffffffffffffffff81111561529957600080fd5b6020830191508360208260051b85010111156152b457600080fd5b9250929050565b60008060008060008060a087890312156152d457600080fd5b86356152df8161518f565b955060208701356152ef8161518f565b9450604087013593506060870135615306816151b1565b9250608087013567ffffffffffffffff81111561532257600080fd5b61532e89828a0161526f565b979a9699509497509295939492505050565b60008060008060006080868803121561535857600080fd5b85356153638161518f565b945060208601359350604086013561537a816151b1565b9250606086013567ffffffffffffffff81111561539657600080fd5b6153a28882890161526f565b969995985093965092949392505050565b80356fffffffffffffffffffffffffffffffff811681146153d357600080fd5b919050565b600080604083850312156153eb57600080fd5b6153f4836153b3565b9150615402602084016153b3565b90509250929050565b61ffff811681146139b357600080fd5b6000806000806080858703121561543157600080fd5b8435935060208501356154438161518f565b925060408501356154538161540b565b915060608501356154638161540b565b939692955090935050565b60008060008060006080868803121561548657600080fd5b8535945060208601356154988161518f565b9350604086013567ffffffffffffffff8111156154b457600080fd5b6154c08882890161526f565b90945092505060608601356154d48161540b565b809150509295509295909350565b6020808252825182820181905260009190848201906040850190845b8181101561553057835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016154fe565b50909695505050505050565b60006020828403121561554e57600080fd5b6131ab826153b3565b6000806020838503121561556a57600080fd5b823567ffffffffffffffff81111561558157600080fd5b61558d8582860161526f565b90969095509350505050565b600080604083850312156155ac57600080fd5b82356155b78161518f565b915060208301356151ed8161518f565b6000602082840312156155d957600080fd5b813564ffffffffff811681146131ab57600080fd5b60006020828403121561560057600080fd5b81356131ab816151b1565b60006020828403121561561d57600080fd5b81516131ab8161518f565b6003811061565f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b73ffffffffffffffffffffffffffffffffffffffff888116825260e082019061568f602084018a615628565b6040830197909752948616606082015292909416608083015260a082015291151560c09092019190915292915050565b6000602082840312156156d157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561573f5761573f6156d8565b500290565b60008261577a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000806040838503121561579257600080fd5b825161579d8161518f565b60208401519092506151ed8161540b565b6000828210156157c0576157c06156d8565b500390565b600080604083850312156157d857600080fd5b505080516020909101519092909150565b6000602082840312156157fb57600080fd5b81516131ab816151b1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc183360301811261586957600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126158a857600080fd5b83018035915067ffffffffffffffff8211156158c357600080fd5b6020019150368190038213156152b457600080fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156159185780818660040360031b1b83161692505b505092915050565b6000808585111561593057600080fd5b8386111561593d57600080fd5b5050820193919092039150565b6000806040838503121561595d57600080fd5b82356159688161518f565b946020939093013593505050565b60008219821115615989576159896156d8565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60005b838110156159d85781810151838201526020016159c0565b838111156159e7576000848401525b50505050565b600082516158698184602087016159bd565b6020815260008251806020840152615a1e8160408501602087016159bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea2646970667358221220a3f4a705ab580a6ada1e438cd2ee4abc001b62d1d171fce12c41994900fef21664736f6c634300080a00334f776e6572206f66206e65776c79206d696e74656420746f6b656e20697320696e636f727265637445787065637465642043726564697420466163616465206973206e6f74206164646564a2646970667358221220dc189b7ac729e834ccb5813ceec85273c51e76315fffb26278f82466531f276264736f6c634300080a0033"; - -type DegenNFTTestConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: DegenNFTTestConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class DegenNFTTest__factory extends ContractFactory { - constructor(...args: DegenNFTTestConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): DegenNFTTest { - return super.attach(address) as DegenNFTTest; - } - override connect(signer: Signer): DegenNFTTest__factory { - return super.connect(signer) as DegenNFTTest__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): DegenNFTTestInterface { - return new utils.Interface(_abi) as DegenNFTTestInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): DegenNFTTest { - return new Contract(address, _abi, signerOrProvider) as DegenNFTTest; - } -} diff --git a/src/types/factories/contracts/test/tokens/DegenNFT.t.sol/index.ts b/src/types/factories/contracts/test/tokens/DegenNFT.t.sol/index.ts deleted file mode 100644 index dd9adb15..00000000 --- a/src/types/factories/contracts/test/tokens/DegenNFT.t.sol/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { DegenNFTTest__factory } from "./DegenNFTTest__factory"; diff --git a/src/types/factories/contracts/test/tokens/index.ts b/src/types/factories/contracts/test/tokens/index.ts deleted file mode 100644 index d71feae5..00000000 --- a/src/types/factories/contracts/test/tokens/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export * as degenNftTSol from "./DegenNFT.t.sol"; diff --git a/src/types/factories/contracts/tokens/DegenNFT__factory.ts b/src/types/factories/contracts/tokens/DegenNFT__factory.ts deleted file mode 100644 index a21117a6..00000000 --- a/src/types/factories/contracts/tokens/DegenNFT__factory.ts +++ /dev/null @@ -1,699 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - DegenNFT, - DegenNFTInterface, -} from "../../../contracts/tokens/DegenNFT"; - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "_addressProvider", - type: "address", - }, - { - internalType: "string", - name: "_name", - type: "string", - }, - { - internalType: "string", - name: "_symbol", - type: "string", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "CallerNotConfiguratorException", - type: "error", - }, - { - inputs: [], - name: "CallerNotPausableAdminException", - type: "error", - }, - { - inputs: [], - name: "CallerNotUnPausableAdminException", - type: "error", - }, - { - inputs: [], - name: "CreditFacadeOrConfiguratorOnlyException", - type: "error", - }, - { - inputs: [], - name: "InsufficientBalanceException", - type: "error", - }, - { - inputs: [], - name: "InvalidCreditFacadeException", - type: "error", - }, - { - inputs: [], - name: "MinterOnlyException", - type: "error", - }, - { - inputs: [], - name: "NotImplementedException", - type: "error", - }, - { - inputs: [], - name: "ZeroAddressException", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "approved", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "tokenId", - type: "uint256", - }, - ], - name: "Approval", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "operator", - type: "address", - }, - { - indexed: false, - internalType: "bool", - name: "approved", - type: "bool", - }, - ], - name: "ApprovalForAll", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "Paused", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "tokenId", - type: "uint256", - }, - ], - name: "Transfer", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "Unpaused", - type: "event", - }, - { - inputs: [], - name: "_acl", - outputs: [ - { - internalType: "contract ACL", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "creditFacade_", - type: "address", - }, - ], - name: "addCreditFacade", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "approve", - outputs: [], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "owner", - type: "address", - }, - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "baseURI", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "from", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "burn", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "tokenId", - type: "uint256", - }, - ], - name: "getApproved", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "owner", - type: "address", - }, - { - internalType: "address", - name: "operator", - type: "address", - }, - ], - name: "isApprovedForAll", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "isSupportedCreditFacade", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "mint", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "minter", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "tokenId", - type: "uint256", - }, - ], - name: "ownerOf", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "pause", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "paused", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "creditFacade_", - type: "address", - }, - ], - name: "removeCreditFacade", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "safeTransferFrom", - outputs: [], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "safeTransferFrom", - outputs: [], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - name: "setApprovalForAll", - outputs: [], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "string", - name: "baseURI_", - type: "string", - }, - ], - name: "setBaseUri", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "minter_", - type: "address", - }, - ], - name: "setMinter", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes4", - name: "interfaceId", - type: "bytes4", - }, - ], - name: "supportsInterface", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "symbol", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "tokenId", - type: "uint256", - }, - ], - name: "tokenURI", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "totalSupply", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "transferFrom", - outputs: [], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "unpause", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x60c06040523480156200001157600080fd5b50604051620026cf380380620026cf833981016040819052620000349162000324565b82828281600090805190602001906200004f92919062000194565b5080516200006590600190602084019062000194565b50506006805460ff19169055506001600160a01b0381166200009a57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000d9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ff9190620003a1565b6001600160a01b03166080816001600160a01b03168152505050826001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000158573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200017e9190620003a1565b6001600160a01b031660a0525062000403915050565b828054620001a290620003c6565b90600052602060002090601f016020900481019282620001c6576000855562000211565b82601f10620001e157805160ff191683800117855562000211565b8280016001018555821562000211579182015b8281111562000211578251825591602001919060010190620001f4565b506200021f92915062000223565b5090565b5b808211156200021f576000815560010162000224565b80516001600160a01b03811681146200025257600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200027f57600080fd5b81516001600160401b03808211156200029c576200029c62000257565b604051601f8301601f19908116603f01168101908282118183101715620002c757620002c762000257565b81604052838152602092508683858801011115620002e457600080fd5b600091505b83821015620003085785820183015181830184015290820190620002e9565b838211156200031a5760008385830101525b9695505050505050565b6000806000606084860312156200033a57600080fd5b62000345846200023a565b60208501519093506001600160401b03808211156200036357600080fd5b62000371878388016200026d565b935060408601519150808211156200038857600080fd5b5062000397868287016200026d565b9150509250925092565b600060208284031215620003b457600080fd5b620003bf826200023a565b9392505050565b600181811c90821680620003db57607f821691505b60208210811415620003fd57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a0516122756200045a6000396000610a9a015260008181610386015281816106db0152818161089101528181610f15015281816110010152818161115b015281816112f401526114f901526122756000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80636352211e116100f9578063a0bcfc7f11610097578063b88d4fde11610071578063b88d4fde146103a8578063c87b56dd146103b6578063e985e9c5146103c9578063fca3b5aa1461041257600080fd5b8063a0bcfc7f14610360578063a22cb46514610373578063a50cf2c81461038157600080fd5b80638456cb59116100d35780638456cb591461032a57806389406ff51461033257806395d89b41146103455780639dc29fac1461034d57600080fd5b80636352211e146102fc5780636c0360eb1461030f57806370a082311461031757600080fd5b80633f4ba83a116101665780634610f6ac116101405780634610f6ac146102b357806354fd4d50146102c6578063576cd2d1146102ce5780635c975abb146102f157600080fd5b80633f4ba83a1461029857806340c10f19146102a057806342842e0e1461028a57600080fd5b8063081812fc116101a2578063081812fc1461024b578063095ea7b31461025e57806318160ddd1461027357806323b872dd1461028a57600080fd5b806301ffc9a7146101c957806306fdde03146101f15780630754617214610206575b600080fd5b6101dc6101d7366004611cc6565b610425565b60405190151581526020015b60405180910390f35b6101f961050a565b6040516101e89190611d38565b6008546102269073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e8565b610226610259366004611d89565b61059c565b61027161026c366004611dc7565b61067b565b005b61027c60075481565b6040519081526020016101e8565b61027161026c366004611df3565b6102716106ad565b6102716102ae366004611dc7565b61079b565b6102716102c1366004611e34565b610863565b61027c600181565b6101dc6102dc366004611e34565b60096020526000908152604090205460ff1681565b60065460ff166101dc565b61022661030a366004611d89565b610cd9565b6101f9610d8b565b61027c610325366004611e34565b610e19565b610271610ee7565b610271610340366004611e34565b610fd3565b6101f9611103565b61027161035b366004611dc7565b611112565b61027161036e366004611e51565b6112c6565b61027161026c366004611ed1565b6102267f000000000000000000000000000000000000000000000000000000000000000081565b61027161026c366004611f39565b6101f96103c4366004611d89565b6113bb565b6101dc6103d7366004612037565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205460ff1690565b610271610420366004611e34565b6114cb565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd0000000000000000000000000000000000000000000000000000000014806104b857507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061050457507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60606000805461051990612065565b80601f016020809104026020016040519081016040528092919081815260200182805461054590612065565b80156105925780601f1061056757610100808354040283529160200191610592565b820191906000526020600020905b81548152906001019060200180831161057557829003601f168201915b5050505050905090565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff16610652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084015b60405180910390fd5b5060009081526004602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b6040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa158015610737573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075b91906120b9565b610791576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107996115f6565b565b60085473ffffffffffffffffffffffffffffffffffffffff1633146107ec576040517f5c2967f500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006107f783610e19565b905060005b82811015610846576000816108278473ffffffffffffffffffffffffffffffffffffffff8816612105565b6108319190612105565b905061083d85826116d7565b506001016107fc565b5081600760008282546108599190612105565b9091555050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156108ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091191906120b9565b610947576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163b610995576040517f9c01f6a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff1663c12c21c06040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610a1c575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610a199181019061211d565b60015b610a52576040517f9c01f6a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f6fbc6f6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192507f000000000000000000000000000000000000000000000000000000000000000090911690636fbc6f6b90602401602060405180830381865afa158015610ae3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0791906120b9565b1580610bad57503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16639408b63f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b94919061211d565b73ffffffffffffffffffffffffffffffffffffffff1614155b80610c5257508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c39919061211d565b73ffffffffffffffffffffffffffffffffffffffff1614155b15610c89576040517f9c01f6a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff16600090815260096020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff1680610504576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e00000000000000000000000000000000000000000000006064820152608401610649565b600a8054610d9890612065565b80601f0160208091040260200160405190810160405280929190818152602001828054610dc490612065565b8015610e115780601f10610de657610100808354040283529160200191610e11565b820191906000526020600020905b815481529060010190602001808311610df457829003601f168201915b505050505081565b600073ffffffffffffffffffffffffffffffffffffffff8216610ebe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152608401610649565b5073ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015610f71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9591906120b9565b610fcb576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610799611899565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561105d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108191906120b9565b6110b7576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff16600090815260096020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b60606001805461051990612065565b3360009081526009602052604090205460ff161580156111dd57506040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156111b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111db91906120b9565b155b15611214576040517f1e0d048500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061121f83610e19565b90508181101561125b576040517f90c9142d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b828110156112b357600060018261128b8573ffffffffffffffffffffffffffffffffffffffff8916612105565b611295919061213a565b61129f919061213a565b90506112aa81611959565b5060010161125e565b508160076000828254610859919061213a565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611350573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137491906120b9565b6113aa576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113b6600a8383611c0f565b505050565b60008181526002602052604090205460609073ffffffffffffffffffffffffffffffffffffffff1661146f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006064820152608401610649565b6000611479611a26565b9050600081511161149957604051806020016040528060008152506114c4565b806114a384611a35565b6040516020016114b4929190612151565b6040516020818303038152906040525b9392505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611555573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157991906120b9565b6115af576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60065460ff16611662576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610649565b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b73ffffffffffffffffffffffffffffffffffffffff8216611754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610649565b60008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff16156117e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610649565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805460019290611816908490612105565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60065460ff1615611906576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610649565b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586116ad3390565b600061196482610cd9565b9050611971600083611b6f565b73ffffffffffffffffffffffffffffffffffffffff811660009081526003602052604081208054600192906119a790849061213a565b909155505060008281526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555183919073ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6060600a805461051990612065565b606081611a7557505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611a9f5780611a8981612180565b9150611a989050600a836121e8565b9150611a79565b60008167ffffffffffffffff811115611aba57611aba611f0a565b6040519080825280601f01601f191660200182016040528015611ae4576020820181803683370190505b5090505b8415611b6757611af960018361213a565b9150611b06600a866121fc565b611b11906030612105565b60f81b818381518110611b2657611b26612210565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611b60600a866121e8565b9450611ae8565b949350505050565b600081815260046020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091558190611bc982610cd9565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b828054611c1b90612065565b90600052602060002090601f016020900481019282611c3d5760008555611ca1565b82601f10611c74578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00823516178555611ca1565b82800160010185558215611ca1579182015b82811115611ca1578235825591602001919060010190611c86565b50611cad929150611cb1565b5090565b5b80821115611cad5760008155600101611cb2565b600060208284031215611cd857600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146114c457600080fd5b60005b83811015611d23578181015183820152602001611d0b565b83811115611d32576000848401525b50505050565b6020815260008251806020840152611d57816040850160208701611d08565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b600060208284031215611d9b57600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff81168114611dc457600080fd5b50565b60008060408385031215611dda57600080fd5b8235611de581611da2565b946020939093013593505050565b600080600060608486031215611e0857600080fd5b8335611e1381611da2565b92506020840135611e2381611da2565b929592945050506040919091013590565b600060208284031215611e4657600080fd5b81356114c481611da2565b60008060208385031215611e6457600080fd5b823567ffffffffffffffff80821115611e7c57600080fd5b818501915085601f830112611e9057600080fd5b813581811115611e9f57600080fd5b866020828501011115611eb157600080fd5b60209290920196919550909350505050565b8015158114611dc457600080fd5b60008060408385031215611ee457600080fd5b8235611eef81611da2565b91506020830135611eff81611ec3565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060008060808587031215611f4f57600080fd5b8435611f5a81611da2565b93506020850135611f6a81611da2565b925060408501359150606085013567ffffffffffffffff80821115611f8e57600080fd5b818701915087601f830112611fa257600080fd5b813581811115611fb457611fb4611f0a565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715611ffa57611ffa611f0a565b816040528281528a602084870101111561201357600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000806040838503121561204a57600080fd5b823561205581611da2565b91506020830135611eff81611da2565b600181811c9082168061207957607f821691505b602082108114156120b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156120cb57600080fd5b81516114c481611ec3565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115612118576121186120d6565b500190565b60006020828403121561212f57600080fd5b81516114c481611da2565b60008282101561214c5761214c6120d6565b500390565b60008351612163818460208801611d08565b835190830190612177818360208801611d08565b01949350505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156121b2576121b26120d6565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826121f7576121f76121b9565b500490565b60008261220b5761220b6121b9565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea2646970667358221220ffdd83a2fc9a158347ca248f021e63fcef3a7985b3deb793f75cd1835b068aab64736f6c634300080a0033"; - -type DegenNFTConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: DegenNFTConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class DegenNFT__factory extends ContractFactory { - constructor(...args: DegenNFTConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - _addressProvider: string, - _name: string, - _symbol: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - _addressProvider, - _name, - _symbol, - overrides || {} - ) as Promise; - } - override getDeployTransaction( - _addressProvider: string, - _name: string, - _symbol: string, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction( - _addressProvider, - _name, - _symbol, - overrides || {} - ); - } - override attach(address: string): DegenNFT { - return super.attach(address) as DegenNFT; - } - override connect(signer: Signer): DegenNFT__factory { - return super.connect(signer) as DegenNFT__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): DegenNFTInterface { - return new utils.Interface(_abi) as DegenNFTInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): DegenNFT { - return new Contract(address, _abi, signerOrProvider) as DegenNFT; - } -} diff --git a/src/types/factories/contracts/tokens/DieselToken__factory.ts b/src/types/factories/contracts/tokens/DieselToken__factory.ts deleted file mode 100644 index 2efda9e8..00000000 --- a/src/types/factories/contracts/tokens/DieselToken__factory.ts +++ /dev/null @@ -1,464 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { - Signer, - utils, - Contract, - ContractFactory, - BigNumberish, - Overrides, -} from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - DieselToken, - DieselTokenInterface, -} from "../../../contracts/tokens/DieselToken"; - -const _abi = [ - { - inputs: [ - { - internalType: "string", - name: "name_", - type: "string", - }, - { - internalType: "string", - name: "symbol_", - type: "string", - }, - { - internalType: "uint8", - name: "decimals_", - type: "uint8", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "spender", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "Approval", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "previousOwner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "OwnershipTransferred", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "Transfer", - type: "event", - }, - { - inputs: [ - { - internalType: "address", - name: "owner", - type: "address", - }, - { - internalType: "address", - name: "spender", - type: "address", - }, - ], - name: "allowance", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "approve", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "burn", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "decimals", - outputs: [ - { - internalType: "uint8", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "subtractedValue", - type: "uint256", - }, - ], - name: "decreaseAllowance", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "addedValue", - type: "uint256", - }, - ], - name: "increaseAllowance", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "mint", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "owner", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "renounceOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "symbol", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "totalSupply", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "recipient", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "transfer", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "sender", - type: "address", - }, - { - internalType: "address", - name: "recipient", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "transferFrom", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "transferOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, -]; - -const _bytecode = - "0x60a06040523480156200001157600080fd5b50604051620015c4380380620015c4833981016040819052620000349162000258565b8251839083906200004d906003906020850190620000e5565b50805162000063906004906020840190620000e5565b505050620000806200007a6200008f60201b60201c565b62000093565b60ff16608052506200031a9050565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054620000f390620002dd565b90600052602060002090601f01602090048101928262000117576000855562000162565b82601f106200013257805160ff191683800117855562000162565b8280016001018555821562000162579182015b828111156200016257825182559160200191906001019062000145565b506200017092915062000174565b5090565b5b8082111562000170576000815560010162000175565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001b357600080fd5b81516001600160401b0380821115620001d057620001d06200018b565b604051601f8301601f19908116603f01168101908282118183101715620001fb57620001fb6200018b565b816040528381526020925086838588010111156200021857600080fd5b600091505b838210156200023c57858201830151818301840152908201906200021d565b838211156200024e5760008385830101525b9695505050505050565b6000806000606084860312156200026e57600080fd5b83516001600160401b03808211156200028657600080fd5b6200029487838801620001a1565b94506020860151915080821115620002ab57600080fd5b50620002ba86828701620001a1565b925050604084015160ff81168114620002d257600080fd5b809150509250925092565b600181811c90821680620002f257607f821691505b602082108114156200031457634e487b7160e01b600052602260045260246000fd5b50919050565b60805161128e620003366000396000610172015261128e6000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c8063715018a611610097578063a457c2d711610066578063a457c2d714610245578063a9059cbb14610258578063dd62ed3e1461026b578063f2fde38b146102b157600080fd5b8063715018a6146101fa5780638da5cb5b1461020257806395d89b411461022a5780639dc29fac1461023257600080fd5b8063313ce567116100d3578063313ce5671461016b578063395093511461019c57806340c10f19146101af57806370a08231146101c457600080fd5b806306fdde0314610105578063095ea7b31461012357806318160ddd1461014657806323b872dd14610158575b600080fd5b61010d6102c4565b60405161011a919061104f565b60405180910390f35b6101366101313660046110eb565b610356565b604051901515815260200161011a565b6002545b60405190815260200161011a565b610136610166366004611115565b61036c565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161011a565b6101366101aa3660046110eb565b610457565b6101c26101bd3660046110eb565b6104a0565b005b61014a6101d2366004611151565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c261052f565b60055460405173ffffffffffffffffffffffffffffffffffffffff909116815260200161011a565b61010d6105bc565b6101c26102403660046110eb565b6105cb565b6101366102533660046110eb565b610656565b6101366102663660046110eb565b61072e565b61014a610279366004611173565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101c26102bf366004611151565b61073b565b6060600380546102d3906111a6565b80601f01602080910402602001604051908101604052809291908181526020018280546102ff906111a6565b801561034c5780601f106103215761010080835404028352916020019161034c565b820191906000526020600020905b81548152906001019060200180831161032f57829003601f168201915b5050505050905090565b600061036333848461086b565b50600192915050565b6000610379848484610a1f565b73ffffffffffffffffffffffffffffffffffffffff841660009081526001602090815260408083203384529091529020548281101561043f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61044c853385840361086b565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161036391859061049b908690611229565b61086b565b60055473ffffffffffffffffffffffffffffffffffffffff163314610521576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610436565b61052b8282610cd3565b5050565b60055473ffffffffffffffffffffffffffffffffffffffff1633146105b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610436565b6105ba6000610df3565b565b6060600480546102d3906111a6565b60055473ffffffffffffffffffffffffffffffffffffffff16331461064c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610436565b61052b8282610e6a565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915281205482811015610717576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610436565b610724338585840361086b565b5060019392505050565b6000610363338484610a1f565b60055473ffffffffffffffffffffffffffffffffffffffff1633146107bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610436565b73ffffffffffffffffffffffffffffffffffffffff811661085f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610436565b61086881610df3565b50565b73ffffffffffffffffffffffffffffffffffffffff831661090d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610436565b73ffffffffffffffffffffffffffffffffffffffff82166109b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610436565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610ac2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610436565b73ffffffffffffffffffffffffffffffffffffffff8216610b65576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610436565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610c1b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610436565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610c5f908490611229565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610cc591815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610d50576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610436565b8060026000828254610d629190611229565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610d9c908490611229565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216610f0d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610436565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015610fc3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610436565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290610fff908490611241565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610a12565b600060208083528351808285015260005b8181101561107c57858101830151858201604001528201611060565b8181111561108e576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146110e657600080fd5b919050565b600080604083850312156110fe57600080fd5b611107836110c2565b946020939093013593505050565b60008060006060848603121561112a57600080fd5b611133846110c2565b9250611141602085016110c2565b9150604084013590509250925092565b60006020828403121561116357600080fd5b61116c826110c2565b9392505050565b6000806040838503121561118657600080fd5b61118f836110c2565b915061119d602084016110c2565b90509250929050565b600181811c908216806111ba57607f821691505b602082108114156111f4577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561123c5761123c6111fa565b500190565b600082821015611253576112536111fa565b50039056fea26469706673582212200343c2cef6c2ca469c25e4abb24e7e37ea95105bc70df4cbd4741229aafc595064736f6c634300080a0033"; - -type DieselTokenConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: DieselTokenConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class DieselToken__factory extends ContractFactory { - constructor(...args: DieselTokenConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - name_: string, - symbol_: string, - decimals_: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - name_, - symbol_, - decimals_, - overrides || {} - ) as Promise; - } - override getDeployTransaction( - name_: string, - symbol_: string, - decimals_: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction( - name_, - symbol_, - decimals_, - overrides || {} - ); - } - override attach(address: string): DieselToken { - return super.attach(address) as DieselToken; - } - override connect(signer: Signer): DieselToken__factory { - return super.connect(signer) as DieselToken__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): DieselTokenInterface { - return new utils.Interface(_abi) as DieselTokenInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): DieselToken { - return new Contract(address, _abi, signerOrProvider) as DieselToken; - } -} diff --git a/src/types/factories/contracts/tokens/GearToken__factory.ts b/src/types/factories/contracts/tokens/GearToken__factory.ts deleted file mode 100644 index 3bbaab54..00000000 --- a/src/types/factories/contracts/tokens/GearToken__factory.ts +++ /dev/null @@ -1,719 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - GearToken, - GearTokenInterface, -} from "../../../contracts/tokens/GearToken"; - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "spender", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "Approval", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "delegator", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "fromDelegate", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "toDelegate", - type: "address", - }, - ], - name: "DelegateChanged", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "delegate", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "previousBalance", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "newBalance", - type: "uint256", - }, - ], - name: "DelegateVotesChanged", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "miner", - type: "address", - }, - ], - name: "MinerSet", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "OwnershipTransferred", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "Transfer", - type: "event", - }, - { - anonymous: false, - inputs: [], - name: "TransferAllowed", - type: "event", - }, - { - inputs: [], - name: "DELEGATION_TYPEHASH", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "DOMAIN_TYPEHASH", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "PERMIT_TYPEHASH", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "allowTransfers", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "address", - name: "spender", - type: "address", - }, - ], - name: "allowance", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "rawAmount", - type: "uint256", - }, - ], - name: "approve", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint32", - name: "", - type: "uint32", - }, - ], - name: "checkpoints", - outputs: [ - { - internalType: "uint32", - name: "fromBlock", - type: "uint32", - }, - { - internalType: "uint96", - name: "votes", - type: "uint96", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "decimals", - outputs: [ - { - internalType: "uint8", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "delegatee", - type: "address", - }, - ], - name: "delegate", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "delegatee", - type: "address", - }, - { - internalType: "uint256", - name: "nonce", - type: "uint256", - }, - { - internalType: "uint256", - name: "expiry", - type: "uint256", - }, - { - internalType: "uint8", - name: "v", - type: "uint8", - }, - { - internalType: "bytes32", - name: "r", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "s", - type: "bytes32", - }, - ], - name: "delegateBySig", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "delegates", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "getCurrentVotes", - outputs: [ - { - internalType: "uint96", - name: "", - type: "uint96", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "uint256", - name: "blockNumber", - type: "uint256", - }, - ], - name: "getPriorVotes", - outputs: [ - { - internalType: "uint96", - name: "", - type: "uint96", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "manager", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "miner", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "nonces", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "numCheckpoints", - outputs: [ - { - internalType: "uint32", - name: "", - type: "uint32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "owner", - type: "address", - }, - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "rawAmount", - type: "uint256", - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256", - }, - { - internalType: "uint8", - name: "v", - type: "uint8", - }, - { - internalType: "bytes32", - name: "r", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "s", - type: "bytes32", - }, - ], - name: "permit", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_miner", - type: "address", - }, - ], - name: "setMiner", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "symbol", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "totalSupply", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "dst", - type: "address", - }, - { - internalType: "uint256", - name: "rawAmount", - type: "uint256", - }, - ], - name: "transfer", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "src", - type: "address", - }, - { - internalType: "address", - name: "dst", - type: "address", - }, - { - internalType: "uint256", - name: "rawAmount", - type: "uint256", - }, - ], - name: "transferFrom", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newManager", - type: "address", - }, - ], - name: "transferOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "transfersAllowed", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x60806040523480156200001157600080fd5b5060405162002b8038038062002b80833981016040819052620000349162000122565b6001600160a01b0381166200008f5760405162461bcd60e51b815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640160405180910390fd5b6001600160a01b03811660008181526001602052604080822080546001600160601b0319166b204fce5e3e2502611000000090811790915590517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91620000f99190815260200190565b60405180910390a350600680546001600160a81b031916336101000260ff191617905562000154565b6000602082840312156200013557600080fd5b81516001600160a01b03811681146200014d57600080fd5b9392505050565b612a1c80620001646000396000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c806370a08231116100f9578063b4b5ea5711610097578063dd62ed3e11610071578063dd62ed3e14610503578063e7a324dc14610555578063f1127ed81461057c578063f2fde38b146105ee57600080fd5b8063b4b5ea57146104ca578063c3cda520146104dd578063d505accf146104f057600080fd5b806395d89b41116100d357806395d89b411461045b5780639742ca4614610497578063a9059cbb146104aa578063b0660c3d146104bd57600080fd5b806370a08231146103c7578063782d6fe11461040b5780637ecebe001461043b57600080fd5b806330adf81f11610166578063481c6a7511610140578063481c6a751461031e578063587cde1e146103435780635c19a95c146103795780636fcfff451461038c57600080fd5b806330adf81f14610298578063313ce567146102bf578063349dc329146102d957600080fd5b806320606b701161019757806320606b70146102545780632185810b1461027b57806323b872dd1461028557600080fd5b806306fdde03146101be578063095ea7b31461021057806318160ddd14610233575b600080fd5b6101fa6040518060400160405280600781526020017f47656172626f780000000000000000000000000000000000000000000000000081525081565b60405161020791906124a3565b60405180910390f35b61022361021e36600461253f565b610601565b6040519015158152602001610207565b6102466b204fce5e3e2502611000000081565b604051908152602001610207565b6102467f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b61028361070d565b005b610223610293366004612569565b6107ee565b6102467f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b6102c7601281565b60405160ff9091168152602001610207565b6007546102f99073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610207565b6006546102f990610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6102f96103513660046125a5565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6102836103873660046125a5565b61098a565b6103b261039a3660046125a5565b60046020526000908152604090205463ffffffff1681565b60405163ffffffff9091168152602001610207565b6102466103d53660046125a5565b73ffffffffffffffffffffffffffffffffffffffff166000908152600160205260409020546bffffffffffffffffffffffff1690565b61041e61041936600461253f565b610997565b6040516bffffffffffffffffffffffff9091168152602001610207565b6102466104493660046125a5565b60056020526000908152604090205481565b6101fa6040518060400160405280600481526020017f474541520000000000000000000000000000000000000000000000000000000081525081565b6102836104a53660046125a5565b610cae565b6102236104b836600461253f565b610e20565b6006546102239060ff1681565b61041e6104d83660046125a5565b610e5c565b6102836104eb3660046125d1565b610efa565b6102836104fe366004612629565b611310565b610246610511366004612693565b73ffffffffffffffffffffffffffffffffffffffff9182166000908152602081815260408083209390941682529190915220546bffffffffffffffffffffffff1690565b6102467fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b6105c561058a3660046126c6565b600360209081526000928352604080842090915290825290205463ffffffff81169064010000000090046bffffffffffffffffffffffff1682565b6040805163ffffffff90931683526bffffffffffffffffffffffff909116602083015201610207565b6102836105fc3660046125a5565b61187a565b6000807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83141561063f57506bffffffffffffffffffffffff610664565b6106618360405180606001604052806025815260200161285260259139611a15565b90505b3360008181526020818152604080832073ffffffffffffffffffffffffffffffffffffffff89168085529083529281902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff871690811790915590519081529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a360019150505b92915050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314610798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e616765720060448201526064015b60405180910390fd5b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f795b0e16c8da9807b0a215f3749bd6dbcc49fc0472183f4e446abb7dcbd9d00790600090a1565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081815260408083203380855290835281842054825160608101909352602580845291936bffffffffffffffffffffffff909116928592610856928892919061285290830139611a15565b90508673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156108a257506bffffffffffffffffffffffff82811614155b156109725760006108cc83836040518060600160405280603d8152602001612974603d9139611a67565b73ffffffffffffffffffffffffffffffffffffffff898116600081815260208181526040808320948a168084529482529182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff87169081179091559151918252939450919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505b61097d878783611ad5565b5060019695505050505050565b6109943382611e9c565b50565b6000438210610a28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f476561723a3a6765745072696f72566f7465733a206e6f74207965742064657460448201527f65726d696e656400000000000000000000000000000000000000000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff831660009081526004602052604090205463ffffffff1680610a63576000915050610707565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604081208491610a95600185612735565b63ffffffff90811682526020820192909252604001600020541611610b1b5773ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812090610ae5600184612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff1691506107079050565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020908152604080832083805290915290205463ffffffff16831015610b63576000915050610707565b600080610b71600184612735565b90505b8163ffffffff168163ffffffff161115610c565760006002610b968484612735565b610ba0919061275a565b610baa9083612735565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260036020908152604080832063ffffffff8581168552908352928190208151808301909252549283168082526401000000009093046bffffffffffffffffffffffff1691810191909152919250871415610c2a576020015194506107079350505050565b805163ffffffff16871115610c4157819350610c4f565b610c4c600183612735565b92505b5050610b74565b5073ffffffffffffffffffffffffffffffffffffffff8516600090815260036020908152604080832063ffffffff909416835292905220546bffffffffffffffffffffffff6401000000009091041691505092915050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314610d34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e6167657200604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff8116610db1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640161078f565b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f2f834d1c8c4b956018fff5faca4d99868ae635487424d9c265c257ccbc698c6a90600090a250565b600080610e45836040518060600160405280602681526020016128a760269139611a15565b9050610e52338583611ad5565b5060019392505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526004602052604081205463ffffffff1680610e94576000610ef3565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812090610ec5600184612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b9392505050565b604080518082018252600781527f47656172626f780000000000000000000000000000000000000000000000000060209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f028ef9f797075f74ac647c65fde04fb0f128c2d59fd40f45732269917642fd4681840152466060820152306080808301919091528351808303909101815260a0820184528051908301207fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60c083015273ffffffffffffffffffffffffffffffffffffffff8a1660e08301526101008201899052610120808301899052845180840390910181526101408301909452835193909201929092207f19010000000000000000000000000000000000000000000000000000000000006101608401526101628301829052610182830181905290916000906101a201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa1580156110d8573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166111a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f476561723a3a64656c656761746542795369673a20696e76616c69642073696760448201527f6e61747572650000000000000000000000000000000000000000000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff811660009081526005602052604081208054916111d7836127a4565b919050558914611269576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f476561723a3a64656c656761746542795369673a20696e76616c6964206e6f6e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161078f565b874211156112f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f476561723a3a64656c656761746542795369673a207369676e6174757265206560448201527f7870697265640000000000000000000000000000000000000000000000000000606482015260840161078f565b611303818b611e9c565b505050505b505050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86141561134d57506bffffffffffffffffffffffff611372565b61136f8660405180606001604052806024815260200161291c60249139611a15565b90505b604080518082018252600781527f47656172626f780000000000000000000000000000000000000000000000000060209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f028ef9f797075f74ac647c65fde04fb0f128c2d59fd40f45732269917642fd4681840152466060820152306080808301919091528351808303909101815260a0909101835280519082012073ffffffffffffffffffffffffffffffffffffffff8b166000908152600590925291812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918c918c918c919086611472836127a4565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810188905260e001604051602081830303815290604052805190602001209050600082826040516020016115199291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff8b169284019290925260608301899052608083018890529092509060019060a0016020604051602081039080840390855afa1580156115a2573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661164a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a7065726d69743a20696e76616c6964207369676e617475726500604482015260640161078f565b8b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146116df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f476561723a3a7065726d69743a20756e617574686f72697a6564000000000000604482015260640161078f565b88421115611749576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a7065726d69743a207369676e6174757265206578706972656400604482015260640161078f565b846000808e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508a73ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258760405161186491906bffffffffffffffffffffffff91909116815260200190565b60405180910390a3505050505050505050505050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314611900576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e6167657200604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff811661197d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640161078f565b60065460405173ffffffffffffffffffffffffffffffffffffffff80841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36006805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b6000816c010000000000000000000000008410611a5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b509192915050565b6000836bffffffffffffffffffffffff16836bffffffffffffffffffffffff1611158290611ac2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b50611acd83856127dd565b949350505050565b60065460ff1680611b025750600654610100900473ffffffffffffffffffffffffffffffffffffffff1633145b80611b24575060075473ffffffffffffffffffffffffffffffffffffffff1633145b611b8a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f476561723a3a7472616e73666572732061726520666f7262696464656e000000604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff8316611c2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603c60248201527f476561723a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260448201527f616e736665722066726f6d20746865207a65726f206164647265737300000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff8216611cd0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f476561723a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260448201527f616e7366657220746f20746865207a65726f2061646472657373000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260016020908152604091829020548251606081019093526036808452611d2d936bffffffffffffffffffffffff90921692859291906129b190830139611a67565b73ffffffffffffffffffffffffffffffffffffffff848116600090815260016020908152604080832080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff968716179055928616825290829020548251606081019093526030808452611dbf949190911692859290919061287790830139611f50565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260409182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff968716179055905193851684529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a373ffffffffffffffffffffffffffffffffffffffff808416600090815260026020526040808220548584168352912054611e9792918216911683611fc1565b505050565b73ffffffffffffffffffffffffffffffffffffffff808316600081815260026020818152604080842080546001845282862054949093528787167fffffffffffffffffffffffff000000000000000000000000000000000000000084168117909155905191909516946bffffffffffffffffffffffff9092169391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4611f4a828483611fc1565b50505050565b600080611f5d8486612802565b9050846bffffffffffffffffffffffff16816bffffffffffffffffffffffff1610158390611fb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b50949350505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561200b57506000816bffffffffffffffffffffffff16115b15611e975773ffffffffffffffffffffffffffffffffffffffff8316156120fd5773ffffffffffffffffffffffffffffffffffffffff831660009081526004602052604081205463ffffffff1690816120655760006120c4565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812090612096600185612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b905060006120eb82856040518060600160405280602881526020016128cd60289139611a67565b90506120f9868484846121e2565b5050505b73ffffffffffffffffffffffffffffffffffffffff821615611e975773ffffffffffffffffffffffffffffffffffffffff821660009081526004602052604081205463ffffffff1690816121525760006121b1565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812090612183600185612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b905060006121d882856040518060600160405280602781526020016128f560279139611f50565b9050611308858484845b60006122064360405180606001604052806034815260200161294060349139612465565b905060008463ffffffff1611801561226d575073ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812063ffffffff831691612251600188612735565b63ffffffff908116825260208201929092526040016000205416145b156123035773ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812083916122a4600188612735565b63ffffffff168152602081019190915260400160002080546bffffffffffffffffffffffff92909216640100000000027fffffffffffffffffffffffffffffffff000000000000000000000000ffffffff9092169190911790556123fe565b60408051808201825263ffffffff80841682526bffffffffffffffffffffffff808616602080850191825273ffffffffffffffffffffffffffffffffffffffff8b166000908152600382528681208b8616825290915294909420925183549451909116640100000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009094169116179190911790556123a5846001612832565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260046020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff929092169190911790555b604080516bffffffffffffffffffffffff80861682528416602082015273ffffffffffffffffffffffffffffffffffffffff8716917fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724910160405180910390a25050505050565b6000816401000000008410611a5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91905b600060208083528351808285015260005b818110156124d0578581018301518582016040015282016124b4565b818111156124e2576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461253a57600080fd5b919050565b6000806040838503121561255257600080fd5b61255b83612516565b946020939093013593505050565b60008060006060848603121561257e57600080fd5b61258784612516565b925061259560208501612516565b9150604084013590509250925092565b6000602082840312156125b757600080fd5b610ef382612516565b803560ff8116811461253a57600080fd5b60008060008060008060c087890312156125ea57600080fd5b6125f387612516565b9550602087013594506040870135935061260f606088016125c0565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a03121561264457600080fd5b61264d88612516565b965061265b60208901612516565b95506040880135945060608801359350612677608089016125c0565b925060a0880135915060c0880135905092959891949750929550565b600080604083850312156126a657600080fd5b6126af83612516565b91506126bd60208401612516565b90509250929050565b600080604083850312156126d957600080fd5b6126e283612516565b9150602083013563ffffffff811681146126fb57600080fd5b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600063ffffffff8381169083168181101561275257612752612706565b039392505050565b600063ffffffff80841680612798577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156127d6576127d6612706565b5060010190565b60006bffffffffffffffffffffffff8381169083168181101561275257612752612706565b60006bffffffffffffffffffffffff80831681851680830382111561282957612829612706565b01949350505050565b600063ffffffff8083168185168083038211156128295761282961270656fe476561723a3a617070726f76653a20616d6f756e7420657863656564732039362062697473476561723a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e74206f766572666c6f7773476561723a3a7472616e736665723a20616d6f756e7420657863656564732039362062697473476561723a3a5f6d6f7665566f7465733a20766f746520616d6f756e7420756e646572666c6f7773476561723a3a5f6d6f7665566f7465733a20766f746520616d6f756e74206f766572666c6f7773476561723a3a7065726d69743a20616d6f756e7420657863656564732039362062697473476561723a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d62657220657863656564732033322062697473476561723a3a7472616e7366657246726f6d3a207472616e7366657220616d6f756e742065786365656473207370656e64657220616c6c6f77616e6365476561723a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e7420657863656564732062616c616e6365a26469706673582212201b84fd7789a35c022f692420863210a30e82d2405659f5a28275d433fa53467f64736f6c634300080a0033"; - -type GearTokenConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: GearTokenConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class GearToken__factory extends ContractFactory { - constructor(...args: GearTokenConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - account: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(account, overrides || {}) as Promise; - } - override getDeployTransaction( - account: string, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(account, overrides || {}); - } - override attach(address: string): GearToken { - return super.attach(address) as GearToken; - } - override connect(signer: Signer): GearToken__factory { - return super.connect(signer) as GearToken__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): GearTokenInterface { - return new utils.Interface(_abi) as GearTokenInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): GearToken { - return new Contract(address, _abi, signerOrProvider) as GearToken; - } -} diff --git a/src/types/factories/contracts/tokens/index.ts b/src/types/factories/contracts/tokens/index.ts deleted file mode 100644 index 12f72a73..00000000 --- a/src/types/factories/contracts/tokens/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { DegenNFT__factory } from "./DegenNFT__factory"; -export { DieselToken__factory } from "./DieselToken__factory"; -export { GearToken__factory } from "./GearToken__factory"; -export { PhantomERC20__factory } from "./PhantomERC20__factory"; diff --git a/src/types/hardhat.d.ts b/src/types/hardhat.d.ts deleted file mode 100644 index db9046a6..00000000 --- a/src/types/hardhat.d.ts +++ /dev/null @@ -1,2715 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import { ethers } from "ethers"; -import { - FactoryOptions, - HardhatEthersHelpers as HardhatEthersHelpersBase, -} from "@nomiclabs/hardhat-ethers/types"; - -import * as Contracts from "."; - -declare module "hardhat/types/runtime" { - interface HardhatEthersHelpers extends HardhatEthersHelpersBase { - getContractFactory( - name: "AggregatorV3Interface", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "Ownable", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "Pausable", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "ERC20", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IERC20Metadata", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IERC20", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "ERC721", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IERC721Metadata", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IERC721", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IERC721Receiver", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "ERC165", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IERC165", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "AbstractAdapter", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "ConvexV1BaseRewardPoolAdapter", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "ConvexV1BoosterAdapter", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "ConvexV1ClaimZapAdapter", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "ConvexStakedPositionToken", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "CurveV1Adapter2Assets", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "CurveV1Adapter3Assets", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "CurveV1Adapter4Assets", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "CurveV1AdapterBase", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "CurveV1AdapterDeposit", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "CurveV1AdapterStETH", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "CurveV1StETHPoolGateway", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "LidoV1Gateway", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "LidoV1Adapter", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "UniswapV2Adapter", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "UniswapV3Adapter", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "UniversalAdapter", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "YearnV2Adapter", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "AccountFactory", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "ACL", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "ACLTrait", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "AddressProvider", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "ContractsRegister", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "DataCompressor", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "WETHGateway", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "CreditAccount", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "CreditConfigurator", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "CreditFacade", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "CreditManager", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "CreditManagerFactory", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "GenesisFactory", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "PoolFactory", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IBaseRewardPool", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IBooster", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IClaimZap", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IConvexToken", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "ICrvDeposit", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "ICurveGauge", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "ICurveVoteEscrow", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IDeposit", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IFeeDistro", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IMinter", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IPools", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IRegistry", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IRewardFactory", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IRewards", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IStaker", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IStash", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IStashFactory", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "ITokenFactory", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "ITokenMinter", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IVestedEscrow", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IVoting", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IWalletChecker", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IBasicRewards", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IRewards", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "ICRVToken", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "ICurvePool2Assets", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "ICurvePool3Assets", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "ICurvePool4Assets", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "ICurvePool", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "ICurvePoolStETH", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "ICurveRegistry", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "ILidoOracle", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IstETH", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IstETHGetters", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IQuoter", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IUniswapV2Router01", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IUniswapV2Router02", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "ISwapRouter", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IUniswapV3SwapCallback", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IYVault", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IConvexV1BaseRewardPoolAdapter", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IConvexV1BaseRewardPoolAdapterErrors", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IConvexV1BoosterAdapter", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "ICurveV1Adapter", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "ICurveV1AdapterExceptions", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IAdapter", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IAdapterExceptions", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IUniversalAdapter", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IUniversalAdapterExceptions", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "ILidoV1Adapter", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "ILidoV1AdapterEvents", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "ILidoV1AdapterExceptions", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IUniswapV2Adapter", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IUniswapV3Adapter", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IUniswapV3AdapterExceptions", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IWETH", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IAccountFactory", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IAccountFactoryEvents", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IAccountFactoryGetters", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IACL", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IACLEvents", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IAddressProvider", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IAddressProviderEvents", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IContractsRegister", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IContractsRegisterEvents", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "ICrediAccountExceptions", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "ICreditAccount", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "ICreditConfigurator", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "ICreditConfiguratorEvents", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "ICreditConfiguratorExceptions", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "ICreditFacade", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "ICreditFacadeEvents", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "ICreditFacadeExceptions", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "ICreditFacadeExtended", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "ICreditManagerV2", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "ICreditManagerV2Events", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "ICreditManagerV2Exceptions", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IDataCompressor", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IDataCompressorExceptions", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IDegenNFT", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IDegenNFTExceptions", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IGearToken", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IInterestRateModel", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "ILPPriceFeed", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "ILPPriceFeedEvents", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "ILPPriceFeedExceptions", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IMerkleDistributor", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IPhantomERC20", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IPoolService", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IPoolServiceEvents", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IPriceFeedAddress", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IPriceFeedType", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IPriceOracleV2", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IPriceOracleV2Events", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IPriceOracleV2Exceptions", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IPriceOracleV2Ext", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IVersion", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IWETHGateway", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "ICreditFilter", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "ICreditManager", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IPriceOracleV2", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "Errors", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "AbstractCurveLPPriceFeed", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "CurveLP2PriceFeed", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "CurveLP3PriceFeed", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "CurveLP4PriceFeed", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "LPPriceFeed", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "PriceFeedChecker", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "PriceOracle", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "YearnPriceFeed", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "ZeroPriceFeed", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "ConvexPathFinder", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "CurveLPPathFinder", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "CurvePathFinder", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "BalanceOps", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "ISwapper", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "NormalTokenPathFinder", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "SwapPathFinder", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "UniswapV2PathFinder", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "UniswapV3PathFinder", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "YearnPathFinder", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "LinearInterestRateModel", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "PoolService", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "ContractUpgrader", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "MerkleDistributor", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "Multicall2", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "PauseMulticall", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "AbstractAdapterTest", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "AdapterTestHelper", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "ConvexAdapterHelper", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "ConvexV1AdapterBasePoolTest", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "ConvexV1AdapterBoosterTest", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "ConvexV1ClaimZapAdapterTest", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "CurveV1Adapter2AssetsTest", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "CurveV1Adapter3AssetsTest", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "CurveV1Adapter4AssetsTest", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "CurveV1AdapterBaseMetaPoolTest", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "CurveV1AdapterBaseTest", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "CurveV1AdapterHelper", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "CurveV1StEthAdapterTest", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "LidoV1AdapterTest", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "UniswapV2AdapterTest", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "UniswapV3AdapterTest", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "YearnV2AdapterTest", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "ACLTest", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "AddressProviderTest", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "CreditConfiguratorTest", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "CreditFacadeTest", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "CreditManagerTest", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "CheatCodes", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "Roles", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "DSTest", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "MainnetTokensTestSuite", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "TotalValueCalculator", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "AdapterMock", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "TargetContractMock", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "ACLTraitTest", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "AddressProviderACLMock", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "CreditManagerInternal", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "TreasuryMock", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "BaseRewardPoolMock", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IBaseRewardPoolMockEvents", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "BoosterMock", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IBoosterMockEvents", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "ClaimZapMock", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IBasicRewards", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "ExtraRewardPoolMock", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IExtraRewardPoolMockEvents", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "VirtualBalanceWrapper", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "TokenRewardContractMock", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "CurveV1MetapoolMock", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "CurveV1Mock_2Assets", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "CurveV1Mock_3Assets", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "CurveV1Mock_4Assets", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "CurveV1Mock", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "CurveV1StETHMock", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "ILidoMockEvents", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "LidoMock", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "UniswapV2Mock", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "UniswapV3Mock", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "YearnV2Mock", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "PercentageMathTest", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "WadRayMathTest", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "LPPriceFeedMock", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "PriceFeedMock", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "CreditManagerMockForPoolTest", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "PoolServiceMock", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "TestPoolService", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "CERC20Mock", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "ERC20ApproveRestrictedFalse", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "ERC20ApproveRestrictedRevert", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "ERC20BlockingMock", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "TokenFeeMock", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "ERC20Mock", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "NonCompliantERC20", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "ERC721ReceiverMock", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IERC721Receiver", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "StETHMock", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "WETHMock", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "CurveLPPriceFeedTest", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "LPPriceFeedTest", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "PriceOracleTest", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "YearnFeedTest", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "ZeroFeedTest", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "CurveLPPathFinderTest", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "CurvePathFinderTest", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "NormalTokenPathFinderTest", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "PathFinderTestHelper", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "SwapPathFinderTest", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "UniswapV2PathFinderTest", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "UniswapV3PathFinderTest", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "YearnPathFinderTest", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "PlaygroundTest", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "PoolServiceTest", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "AttackContractNonPayable", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "DummyMulticallTarget", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "FlashLoanAttacker2", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "ICrvDeposit", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "ICurveGauge", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "ICurveVoteEscrow", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IDeposit", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IFeeDistro", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IMinter", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IPools", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IRegistry", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IRewardFactory", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IRewards", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IStaker", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IStash", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IStashFactory", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "ITokenFactory", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "ITokenMinter", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IVestedEscrow", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IVoting", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "IWalletChecker", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "ILockedCvx", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "NewBaseRewardPoolMock", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "NewBoosterMock", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "NewCreditConfigurator", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "StETHMockERC20", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "UniswapV3AdapterTestHelper", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "BalanceHelper", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "BaseCreditTestSuite", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "CreditFacadeHelper", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "CreditFacadeTestSuite", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "CreditManagerTestSuite", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "PoolServiceTestSuite", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "TokensTestSuite", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "PauseMulticallTest", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "DegenNFTTest", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "DegenNFT", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "DieselToken", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "GearToken", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - name: "PhantomERC20", - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - - getContractAt( - name: "AggregatorV3Interface", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "Ownable", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "Pausable", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "ERC20", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IERC20Metadata", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IERC20", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "ERC721", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IERC721Metadata", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IERC721", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IERC721Receiver", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "ERC165", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IERC165", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "AbstractAdapter", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "ConvexV1BaseRewardPoolAdapter", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "ConvexV1BoosterAdapter", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "ConvexV1ClaimZapAdapter", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "ConvexStakedPositionToken", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "CurveV1Adapter2Assets", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "CurveV1Adapter3Assets", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "CurveV1Adapter4Assets", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "CurveV1AdapterBase", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "CurveV1AdapterDeposit", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "CurveV1AdapterStETH", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "CurveV1StETHPoolGateway", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "LidoV1Gateway", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "LidoV1Adapter", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "UniswapV2Adapter", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "UniswapV3Adapter", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "UniversalAdapter", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "YearnV2Adapter", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "AccountFactory", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "ACL", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "ACLTrait", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "AddressProvider", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "ContractsRegister", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "DataCompressor", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "WETHGateway", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "CreditAccount", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "CreditConfigurator", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "CreditFacade", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "CreditManager", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "CreditManagerFactory", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "GenesisFactory", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "PoolFactory", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IBaseRewardPool", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IBooster", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IClaimZap", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IConvexToken", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "ICrvDeposit", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "ICurveGauge", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "ICurveVoteEscrow", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IDeposit", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IFeeDistro", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IMinter", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IPools", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IRegistry", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IRewardFactory", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IRewards", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IStaker", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IStash", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IStashFactory", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "ITokenFactory", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "ITokenMinter", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IVestedEscrow", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IVoting", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IWalletChecker", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IBasicRewards", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IRewards", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "ICRVToken", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "ICurvePool2Assets", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "ICurvePool3Assets", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "ICurvePool4Assets", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "ICurvePool", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "ICurvePoolStETH", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "ICurveRegistry", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "ILidoOracle", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IstETH", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IstETHGetters", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IQuoter", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IUniswapV2Router01", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IUniswapV2Router02", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "ISwapRouter", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IUniswapV3SwapCallback", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IYVault", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IConvexV1BaseRewardPoolAdapter", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IConvexV1BaseRewardPoolAdapterErrors", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IConvexV1BoosterAdapter", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "ICurveV1Adapter", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "ICurveV1AdapterExceptions", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IAdapter", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IAdapterExceptions", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IUniversalAdapter", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IUniversalAdapterExceptions", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "ILidoV1Adapter", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "ILidoV1AdapterEvents", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "ILidoV1AdapterExceptions", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IUniswapV2Adapter", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IUniswapV3Adapter", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IUniswapV3AdapterExceptions", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IWETH", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IAccountFactory", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IAccountFactoryEvents", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IAccountFactoryGetters", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IACL", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IACLEvents", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IAddressProvider", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IAddressProviderEvents", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IContractsRegister", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IContractsRegisterEvents", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "ICrediAccountExceptions", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "ICreditAccount", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "ICreditConfigurator", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "ICreditConfiguratorEvents", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "ICreditConfiguratorExceptions", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "ICreditFacade", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "ICreditFacadeEvents", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "ICreditFacadeExceptions", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "ICreditFacadeExtended", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "ICreditManagerV2", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "ICreditManagerV2Events", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "ICreditManagerV2Exceptions", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IDataCompressor", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IDataCompressorExceptions", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IDegenNFT", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IDegenNFTExceptions", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IGearToken", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IInterestRateModel", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "ILPPriceFeed", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "ILPPriceFeedEvents", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "ILPPriceFeedExceptions", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IMerkleDistributor", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IPhantomERC20", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IPoolService", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IPoolServiceEvents", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IPriceFeedAddress", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IPriceFeedType", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IPriceOracleV2", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IPriceOracleV2Events", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IPriceOracleV2Exceptions", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IPriceOracleV2Ext", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IVersion", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IWETHGateway", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "ICreditFilter", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "ICreditManager", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IPriceOracleV2", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "Errors", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "AbstractCurveLPPriceFeed", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "CurveLP2PriceFeed", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "CurveLP3PriceFeed", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "CurveLP4PriceFeed", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "LPPriceFeed", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "PriceFeedChecker", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "PriceOracle", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "YearnPriceFeed", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "ZeroPriceFeed", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "ConvexPathFinder", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "CurveLPPathFinder", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "CurvePathFinder", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "BalanceOps", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "ISwapper", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "NormalTokenPathFinder", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "SwapPathFinder", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "UniswapV2PathFinder", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "UniswapV3PathFinder", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "YearnPathFinder", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "LinearInterestRateModel", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "PoolService", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "ContractUpgrader", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "MerkleDistributor", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "Multicall2", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "PauseMulticall", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "AbstractAdapterTest", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "AdapterTestHelper", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "ConvexAdapterHelper", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "ConvexV1AdapterBasePoolTest", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "ConvexV1AdapterBoosterTest", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "ConvexV1ClaimZapAdapterTest", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "CurveV1Adapter2AssetsTest", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "CurveV1Adapter3AssetsTest", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "CurveV1Adapter4AssetsTest", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "CurveV1AdapterBaseMetaPoolTest", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "CurveV1AdapterBaseTest", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "CurveV1AdapterHelper", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "CurveV1StEthAdapterTest", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "LidoV1AdapterTest", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "UniswapV2AdapterTest", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "UniswapV3AdapterTest", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "YearnV2AdapterTest", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "ACLTest", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "AddressProviderTest", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "CreditConfiguratorTest", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "CreditFacadeTest", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "CreditManagerTest", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "CheatCodes", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "Roles", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "DSTest", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "MainnetTokensTestSuite", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "TotalValueCalculator", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "AdapterMock", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "TargetContractMock", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "ACLTraitTest", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "AddressProviderACLMock", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "CreditManagerInternal", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "TreasuryMock", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "BaseRewardPoolMock", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IBaseRewardPoolMockEvents", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "BoosterMock", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IBoosterMockEvents", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "ClaimZapMock", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IBasicRewards", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "ExtraRewardPoolMock", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IExtraRewardPoolMockEvents", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "VirtualBalanceWrapper", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "TokenRewardContractMock", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "CurveV1MetapoolMock", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "CurveV1Mock_2Assets", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "CurveV1Mock_3Assets", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "CurveV1Mock_4Assets", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "CurveV1Mock", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "CurveV1StETHMock", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "ILidoMockEvents", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "LidoMock", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "UniswapV2Mock", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "UniswapV3Mock", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "YearnV2Mock", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "PercentageMathTest", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "WadRayMathTest", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "LPPriceFeedMock", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "PriceFeedMock", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "CreditManagerMockForPoolTest", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "PoolServiceMock", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "TestPoolService", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "CERC20Mock", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "ERC20ApproveRestrictedFalse", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "ERC20ApproveRestrictedRevert", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "ERC20BlockingMock", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "TokenFeeMock", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "ERC20Mock", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "NonCompliantERC20", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "ERC721ReceiverMock", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IERC721Receiver", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "StETHMock", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "WETHMock", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "CurveLPPriceFeedTest", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "LPPriceFeedTest", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "PriceOracleTest", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "YearnFeedTest", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "ZeroFeedTest", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "CurveLPPathFinderTest", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "CurvePathFinderTest", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "NormalTokenPathFinderTest", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "PathFinderTestHelper", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "SwapPathFinderTest", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "UniswapV2PathFinderTest", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "UniswapV3PathFinderTest", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "YearnPathFinderTest", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "PlaygroundTest", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "PoolServiceTest", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "AttackContractNonPayable", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "DummyMulticallTarget", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "FlashLoanAttacker2", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "ICrvDeposit", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "ICurveGauge", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "ICurveVoteEscrow", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IDeposit", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IFeeDistro", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IMinter", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IPools", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IRegistry", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IRewardFactory", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IRewards", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IStaker", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IStash", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IStashFactory", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "ITokenFactory", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "ITokenMinter", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IVestedEscrow", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IVoting", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "IWalletChecker", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "ILockedCvx", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "NewBaseRewardPoolMock", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "NewBoosterMock", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "NewCreditConfigurator", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "StETHMockERC20", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "UniswapV3AdapterTestHelper", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "BalanceHelper", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "BaseCreditTestSuite", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "CreditFacadeHelper", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "CreditFacadeTestSuite", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "CreditManagerTestSuite", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "PoolServiceTestSuite", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "TokensTestSuite", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "PauseMulticallTest", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "DegenNFTTest", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "DegenNFT", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "DieselToken", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "GearToken", - address: string, - signer?: ethers.Signer - ): Promise; - getContractAt( - name: "PhantomERC20", - address: string, - signer?: ethers.Signer - ): Promise; - - // default types - getContractFactory( - name: string, - signerOrOptions?: ethers.Signer | FactoryOptions - ): Promise; - getContractFactory( - abi: any[], - bytecode: ethers.utils.BytesLike, - signer?: ethers.Signer - ): Promise; - getContractAt( - nameOrAbi: string | any[], - address: string, - signer?: ethers.Signer - ): Promise; - } -} diff --git a/src/types/index.ts b/src/types/index.ts index cd9b94ac..61825b96 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -8,94 +8,18 @@ export type { openzeppelin }; import type * as contracts from "./contracts"; export type { contracts }; export * as factories from "./factories"; -export type { AggregatorV3Interface } from "./@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface"; -export { AggregatorV3Interface__factory } from "./factories/@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface__factory"; -export type { Ownable } from "./@openzeppelin/contracts/access/Ownable"; -export { Ownable__factory } from "./factories/@openzeppelin/contracts/access/Ownable__factory"; -export type { Pausable } from "./@openzeppelin/contracts/security/Pausable"; -export { Pausable__factory } from "./factories/@openzeppelin/contracts/security/Pausable__factory"; -export type { ERC20 } from "./@openzeppelin/contracts/token/ERC20/ERC20"; -export { ERC20__factory } from "./factories/@openzeppelin/contracts/token/ERC20/ERC20__factory"; export type { IERC20Metadata } from "./@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata"; export { IERC20Metadata__factory } from "./factories/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata__factory"; export type { IERC20 } from "./@openzeppelin/contracts/token/ERC20/IERC20"; export { IERC20__factory } from "./factories/@openzeppelin/contracts/token/ERC20/IERC20__factory"; -export type { ERC721 } from "./@openzeppelin/contracts/token/ERC721/ERC721"; -export { ERC721__factory } from "./factories/@openzeppelin/contracts/token/ERC721/ERC721__factory"; export type { IERC721Metadata } from "./@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata"; export { IERC721Metadata__factory } from "./factories/@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata__factory"; export type { IERC721 } from "./@openzeppelin/contracts/token/ERC721/IERC721"; export { IERC721__factory } from "./factories/@openzeppelin/contracts/token/ERC721/IERC721__factory"; export type { IERC721Receiver } from "./@openzeppelin/contracts/token/ERC721/IERC721Receiver"; export { IERC721Receiver__factory } from "./factories/@openzeppelin/contracts/token/ERC721/IERC721Receiver__factory"; -export type { ERC165 } from "./@openzeppelin/contracts/utils/introspection/ERC165"; -export { ERC165__factory } from "./factories/@openzeppelin/contracts/utils/introspection/ERC165__factory"; export type { IERC165 } from "./@openzeppelin/contracts/utils/introspection/IERC165"; export { IERC165__factory } from "./factories/@openzeppelin/contracts/utils/introspection/IERC165__factory"; -export type { AbstractAdapter } from "./contracts/adapters/AbstractAdapter"; -export { AbstractAdapter__factory } from "./factories/contracts/adapters/AbstractAdapter__factory"; -export type { ConvexV1BaseRewardPoolAdapter } from "./contracts/adapters/convex/ConvexV1_BaseRewardPool.sol/ConvexV1BaseRewardPoolAdapter"; -export { ConvexV1BaseRewardPoolAdapter__factory } from "./factories/contracts/adapters/convex/ConvexV1_BaseRewardPool.sol/ConvexV1BaseRewardPoolAdapter__factory"; -export type { ConvexV1BoosterAdapter } from "./contracts/adapters/convex/ConvexV1_Booster.sol/ConvexV1BoosterAdapter"; -export { ConvexV1BoosterAdapter__factory } from "./factories/contracts/adapters/convex/ConvexV1_Booster.sol/ConvexV1BoosterAdapter__factory"; -export type { ConvexV1ClaimZapAdapter } from "./contracts/adapters/convex/ConvexV1_ClaimZap.sol/ConvexV1ClaimZapAdapter"; -export { ConvexV1ClaimZapAdapter__factory } from "./factories/contracts/adapters/convex/ConvexV1_ClaimZap.sol/ConvexV1ClaimZapAdapter__factory"; -export type { ConvexStakedPositionToken } from "./contracts/adapters/convex/ConvexV1_StakedPositionToken.sol/ConvexStakedPositionToken"; -export { ConvexStakedPositionToken__factory } from "./factories/contracts/adapters/convex/ConvexV1_StakedPositionToken.sol/ConvexStakedPositionToken__factory"; -export type { CurveV1Adapter2Assets } from "./contracts/adapters/curve/CurveV1_2.sol/CurveV1Adapter2Assets"; -export { CurveV1Adapter2Assets__factory } from "./factories/contracts/adapters/curve/CurveV1_2.sol/CurveV1Adapter2Assets__factory"; -export type { CurveV1Adapter3Assets } from "./contracts/adapters/curve/CurveV1_3.sol/CurveV1Adapter3Assets"; -export { CurveV1Adapter3Assets__factory } from "./factories/contracts/adapters/curve/CurveV1_3.sol/CurveV1Adapter3Assets__factory"; -export type { CurveV1Adapter4Assets } from "./contracts/adapters/curve/CurveV1_4.sol/CurveV1Adapter4Assets"; -export { CurveV1Adapter4Assets__factory } from "./factories/contracts/adapters/curve/CurveV1_4.sol/CurveV1Adapter4Assets__factory"; -export type { CurveV1AdapterBase } from "./contracts/adapters/curve/CurveV1_Base.sol/CurveV1AdapterBase"; -export { CurveV1AdapterBase__factory } from "./factories/contracts/adapters/curve/CurveV1_Base.sol/CurveV1AdapterBase__factory"; -export type { CurveV1AdapterDeposit } from "./contracts/adapters/curve/CurveV1_DepositZap.sol/CurveV1AdapterDeposit"; -export { CurveV1AdapterDeposit__factory } from "./factories/contracts/adapters/curve/CurveV1_DepositZap.sol/CurveV1AdapterDeposit__factory"; -export type { CurveV1AdapterStETH } from "./contracts/adapters/curve/CurveV1_stETH.sol/CurveV1AdapterStETH"; -export { CurveV1AdapterStETH__factory } from "./factories/contracts/adapters/curve/CurveV1_stETH.sol/CurveV1AdapterStETH__factory"; -export type { CurveV1StETHPoolGateway } from "./contracts/adapters/curve/CurveV1_stETHGateway.sol/CurveV1StETHPoolGateway"; -export { CurveV1StETHPoolGateway__factory } from "./factories/contracts/adapters/curve/CurveV1_stETHGateway.sol/CurveV1StETHPoolGateway__factory"; -export type { LidoV1Gateway } from "./contracts/adapters/lido/LidoV1_WETHGateway.sol/LidoV1Gateway"; -export { LidoV1Gateway__factory } from "./factories/contracts/adapters/lido/LidoV1_WETHGateway.sol/LidoV1Gateway__factory"; -export type { LidoV1Adapter } from "./contracts/adapters/lido/LidoV1.sol/LidoV1Adapter"; -export { LidoV1Adapter__factory } from "./factories/contracts/adapters/lido/LidoV1.sol/LidoV1Adapter__factory"; -export type { UniswapV2Adapter } from "./contracts/adapters/uniswap/UniswapV2.sol/UniswapV2Adapter"; -export { UniswapV2Adapter__factory } from "./factories/contracts/adapters/uniswap/UniswapV2.sol/UniswapV2Adapter__factory"; -export type { UniswapV3Adapter } from "./contracts/adapters/uniswap/UniswapV3.sol/UniswapV3Adapter"; -export { UniswapV3Adapter__factory } from "./factories/contracts/adapters/uniswap/UniswapV3.sol/UniswapV3Adapter__factory"; -export type { UniversalAdapter } from "./contracts/adapters/UniversalAdapter"; -export { UniversalAdapter__factory } from "./factories/contracts/adapters/UniversalAdapter__factory"; -export type { YearnV2Adapter } from "./contracts/adapters/yearn/YearnV2.sol/YearnV2Adapter"; -export { YearnV2Adapter__factory } from "./factories/contracts/adapters/yearn/YearnV2.sol/YearnV2Adapter__factory"; -export type { AccountFactory } from "./contracts/core/AccountFactory"; -export { AccountFactory__factory } from "./factories/contracts/core/AccountFactory__factory"; -export type { ACL } from "./contracts/core/ACL"; -export { ACL__factory } from "./factories/contracts/core/ACL__factory"; -export type { ACLTrait } from "./contracts/core/ACLTrait"; -export { ACLTrait__factory } from "./factories/contracts/core/ACLTrait__factory"; -export type { AddressProvider } from "./contracts/core/AddressProvider"; -export { AddressProvider__factory } from "./factories/contracts/core/AddressProvider__factory"; -export type { ContractsRegister } from "./contracts/core/ContractsRegister"; -export { ContractsRegister__factory } from "./factories/contracts/core/ContractsRegister__factory"; -export type { DataCompressor } from "./contracts/core/DataCompressor"; -export { DataCompressor__factory } from "./factories/contracts/core/DataCompressor__factory"; -export type { WETHGateway } from "./contracts/core/WETHGateway"; -export { WETHGateway__factory } from "./factories/contracts/core/WETHGateway__factory"; -export type { CreditAccount } from "./contracts/credit/CreditAccount"; -export { CreditAccount__factory } from "./factories/contracts/credit/CreditAccount__factory"; -export type { CreditConfigurator } from "./contracts/credit/CreditConfigurator"; -export { CreditConfigurator__factory } from "./factories/contracts/credit/CreditConfigurator__factory"; -export type { CreditFacade } from "./contracts/credit/CreditFacade"; -export { CreditFacade__factory } from "./factories/contracts/credit/CreditFacade__factory"; -export type { CreditManager } from "./contracts/credit/CreditManager"; -export { CreditManager__factory } from "./factories/contracts/credit/CreditManager__factory"; -export type { CreditManagerFactory } from "./contracts/factories/CreditManagerFactory"; -export { CreditManagerFactory__factory } from "./factories/contracts/factories/CreditManagerFactory__factory"; -export type { GenesisFactory } from "./contracts/factories/GenesisFactory"; -export { GenesisFactory__factory } from "./factories/contracts/factories/GenesisFactory__factory"; -export type { PoolFactory } from "./contracts/factories/PoolFactory"; -export { PoolFactory__factory } from "./factories/contracts/factories/PoolFactory__factory"; export type { IBaseRewardPool } from "./contracts/integrations/convex/IBaseRewardPool"; export { IBaseRewardPool__factory } from "./factories/contracts/integrations/convex/IBaseRewardPool__factory"; export type { IBooster } from "./contracts/integrations/convex/IBooster"; @@ -216,6 +140,8 @@ export type { IACL } from "./contracts/interfaces/IACL.sol/IACL"; export { IACL__factory } from "./factories/contracts/interfaces/IACL.sol/IACL__factory"; export type { IACLEvents } from "./contracts/interfaces/IACL.sol/IACLEvents"; export { IACLEvents__factory } from "./factories/contracts/interfaces/IACL.sol/IACLEvents__factory"; +export type { IACLExceptions } from "./contracts/interfaces/IACL.sol/IACLExceptions"; +export { IACLExceptions__factory } from "./factories/contracts/interfaces/IACL.sol/IACLExceptions__factory"; export type { IAddressProvider } from "./contracts/interfaces/IAddressProvider.sol/IAddressProvider"; export { IAddressProvider__factory } from "./factories/contracts/interfaces/IAddressProvider.sol/IAddressProvider__factory"; export type { IAddressProviderEvents } from "./contracts/interfaces/IAddressProvider.sol/IAddressProviderEvents"; @@ -256,6 +182,10 @@ export type { IDegenNFT } from "./contracts/interfaces/IDegenNFT.sol/IDegenNFT"; export { IDegenNFT__factory } from "./factories/contracts/interfaces/IDegenNFT.sol/IDegenNFT__factory"; export type { IDegenNFTExceptions } from "./contracts/interfaces/IDegenNFT.sol/IDegenNFTExceptions"; export { IDegenNFTExceptions__factory } from "./factories/contracts/interfaces/IDegenNFT.sol/IDegenNFTExceptions__factory"; +export type { IDieselToken } from "./contracts/interfaces/IDieselToken.sol/IDieselToken"; +export { IDieselToken__factory } from "./factories/contracts/interfaces/IDieselToken.sol/IDieselToken__factory"; +export type { IDieselTokenExceptions } from "./contracts/interfaces/IDieselToken.sol/IDieselTokenExceptions"; +export { IDieselTokenExceptions__factory } from "./factories/contracts/interfaces/IDieselToken.sol/IDieselTokenExceptions__factory"; export type { IGearToken } from "./contracts/interfaces/IGearToken"; export { IGearToken__factory } from "./factories/contracts/interfaces/IGearToken__factory"; export type { IInterestRateModel } from "./contracts/interfaces/IInterestRateModel"; @@ -294,269 +224,15 @@ export type { ICreditFilter } from "./contracts/interfaces/V1/ICreditFilter"; export { ICreditFilter__factory } from "./factories/contracts/interfaces/V1/ICreditFilter__factory"; export type { ICreditManager } from "./contracts/interfaces/V1/ICreditManager"; export { ICreditManager__factory } from "./factories/contracts/interfaces/V1/ICreditManager__factory"; -export type { Errors } from "./contracts/libraries/Errors"; -export { Errors__factory } from "./factories/contracts/libraries/Errors__factory"; -export type { AbstractCurveLPPriceFeed } from "./contracts/oracles/curve/AbstractCurveLPPriceFeed"; -export { AbstractCurveLPPriceFeed__factory } from "./factories/contracts/oracles/curve/AbstractCurveLPPriceFeed__factory"; -export type { CurveLP2PriceFeed } from "./contracts/oracles/curve/CurveLP2PriceFeed"; -export { CurveLP2PriceFeed__factory } from "./factories/contracts/oracles/curve/CurveLP2PriceFeed__factory"; -export type { CurveLP3PriceFeed } from "./contracts/oracles/curve/CurveLP3PriceFeed"; -export { CurveLP3PriceFeed__factory } from "./factories/contracts/oracles/curve/CurveLP3PriceFeed__factory"; -export type { CurveLP4PriceFeed } from "./contracts/oracles/curve/CurveLP4PriceFeed"; -export { CurveLP4PriceFeed__factory } from "./factories/contracts/oracles/curve/CurveLP4PriceFeed__factory"; -export type { LPPriceFeed } from "./contracts/oracles/LPPriceFeed"; -export { LPPriceFeed__factory } from "./factories/contracts/oracles/LPPriceFeed__factory"; -export type { PriceFeedChecker } from "./contracts/oracles/PriceFeedChecker"; -export { PriceFeedChecker__factory } from "./factories/contracts/oracles/PriceFeedChecker__factory"; -export type { PriceOracle } from "./contracts/oracles/PriceOracle"; -export { PriceOracle__factory } from "./factories/contracts/oracles/PriceOracle__factory"; -export type { YearnPriceFeed } from "./contracts/oracles/yearn/YearnPriceFeed"; -export { YearnPriceFeed__factory } from "./factories/contracts/oracles/yearn/YearnPriceFeed__factory"; -export type { ZeroPriceFeed } from "./contracts/oracles/ZeroPriceFeed"; -export { ZeroPriceFeed__factory } from "./factories/contracts/oracles/ZeroPriceFeed__factory"; -export type { ConvexPathFinder } from "./contracts/pathfinder/ConvexPathFinder"; -export { ConvexPathFinder__factory } from "./factories/contracts/pathfinder/ConvexPathFinder__factory"; -export type { CurveLPPathFinder } from "./contracts/pathfinder/CurveLPPathFinder"; -export { CurveLPPathFinder__factory } from "./factories/contracts/pathfinder/CurveLPPathFinder__factory"; -export type { CurvePathFinder } from "./contracts/pathfinder/CurvePathFinder"; -export { CurvePathFinder__factory } from "./factories/contracts/pathfinder/CurvePathFinder__factory"; -export type { BalanceOps } from "./contracts/pathfinder/data/Balances.sol/BalanceOps"; -export { BalanceOps__factory } from "./factories/contracts/pathfinder/data/Balances.sol/BalanceOps__factory"; +export type { ISwapPathFinder } from "./contracts/pathfinder/interfaces/ISwapPathFinder"; +export { ISwapPathFinder__factory } from "./factories/contracts/pathfinder/interfaces/ISwapPathFinder__factory"; export type { ISwapper } from "./contracts/pathfinder/ISwapper"; export { ISwapper__factory } from "./factories/contracts/pathfinder/ISwapper__factory"; -export type { NormalTokenPathFinder } from "./contracts/pathfinder/NormalTokenPathFinder"; -export { NormalTokenPathFinder__factory } from "./factories/contracts/pathfinder/NormalTokenPathFinder__factory"; -export type { SwapPathFinder } from "./contracts/pathfinder/SwapPathFinder"; -export { SwapPathFinder__factory } from "./factories/contracts/pathfinder/SwapPathFinder__factory"; -export type { UniswapV2PathFinder } from "./contracts/pathfinder/UniswapV2PathFinder"; -export { UniswapV2PathFinder__factory } from "./factories/contracts/pathfinder/UniswapV2PathFinder__factory"; -export type { UniswapV3PathFinder } from "./contracts/pathfinder/UniswapV3PathFinder"; -export { UniswapV3PathFinder__factory } from "./factories/contracts/pathfinder/UniswapV3PathFinder__factory"; -export type { YearnPathFinder } from "./contracts/pathfinder/YearnPathFinder"; -export { YearnPathFinder__factory } from "./factories/contracts/pathfinder/YearnPathFinder__factory"; -export type { LinearInterestRateModel } from "./contracts/pool/LinearInterestRateModel"; -export { LinearInterestRateModel__factory } from "./factories/contracts/pool/LinearInterestRateModel__factory"; -export type { PoolService } from "./contracts/pool/PoolService"; -export { PoolService__factory } from "./factories/contracts/pool/PoolService__factory"; -export type { ContractUpgrader } from "./contracts/support/ContractUpgrader"; -export { ContractUpgrader__factory } from "./factories/contracts/support/ContractUpgrader__factory"; -export type { MerkleDistributor } from "./contracts/support/MerkleDistributor"; -export { MerkleDistributor__factory } from "./factories/contracts/support/MerkleDistributor__factory"; -export type { Multicall2 } from "./contracts/support/MultiCall.sol/Multicall2"; -export { Multicall2__factory } from "./factories/contracts/support/MultiCall.sol/Multicall2__factory"; -export type { PauseMulticall } from "./contracts/support/PauseMulticall"; -export { PauseMulticall__factory } from "./factories/contracts/support/PauseMulticall__factory"; -export type { AbstractAdapterTest } from "./contracts/test/adapters/AbstractAdapter.t.sol/AbstractAdapterTest"; -export { AbstractAdapterTest__factory } from "./factories/contracts/test/adapters/AbstractAdapter.t.sol/AbstractAdapterTest__factory"; -export type { AdapterTestHelper } from "./contracts/test/adapters/AdapterTestHelper"; -export { AdapterTestHelper__factory } from "./factories/contracts/test/adapters/AdapterTestHelper__factory"; -export type { ConvexAdapterHelper } from "./contracts/test/adapters/ConvexAdapterHelper"; -export { ConvexAdapterHelper__factory } from "./factories/contracts/test/adapters/ConvexAdapterHelper__factory"; -export type { ConvexV1AdapterBasePoolTest } from "./contracts/test/adapters/ConvexV1_BaseRewardPool.t.sol/ConvexV1AdapterBasePoolTest"; -export { ConvexV1AdapterBasePoolTest__factory } from "./factories/contracts/test/adapters/ConvexV1_BaseRewardPool.t.sol/ConvexV1AdapterBasePoolTest__factory"; -export type { ConvexV1AdapterBoosterTest } from "./contracts/test/adapters/ConvexV1_Booster.t.sol/ConvexV1AdapterBoosterTest"; -export { ConvexV1AdapterBoosterTest__factory } from "./factories/contracts/test/adapters/ConvexV1_Booster.t.sol/ConvexV1AdapterBoosterTest__factory"; -export type { ConvexV1ClaimZapAdapterTest } from "./contracts/test/adapters/ConvexV1_ClaimZap.t.sol/ConvexV1ClaimZapAdapterTest"; -export { ConvexV1ClaimZapAdapterTest__factory } from "./factories/contracts/test/adapters/ConvexV1_ClaimZap.t.sol/ConvexV1ClaimZapAdapterTest__factory"; -export type { CurveV1Adapter2AssetsTest } from "./contracts/test/adapters/CurveV1Adapter_2AssetsTest.t.sol/CurveV1Adapter2AssetsTest"; -export { CurveV1Adapter2AssetsTest__factory } from "./factories/contracts/test/adapters/CurveV1Adapter_2AssetsTest.t.sol/CurveV1Adapter2AssetsTest__factory"; -export type { CurveV1Adapter3AssetsTest } from "./contracts/test/adapters/CurveV1Adapter_3AssetsTest.t.sol/CurveV1Adapter3AssetsTest"; -export { CurveV1Adapter3AssetsTest__factory } from "./factories/contracts/test/adapters/CurveV1Adapter_3AssetsTest.t.sol/CurveV1Adapter3AssetsTest__factory"; -export type { CurveV1Adapter4AssetsTest } from "./contracts/test/adapters/CurveV1Adapter_4AssetsTest.t.sol/CurveV1Adapter4AssetsTest"; -export { CurveV1Adapter4AssetsTest__factory } from "./factories/contracts/test/adapters/CurveV1Adapter_4AssetsTest.t.sol/CurveV1Adapter4AssetsTest__factory"; -export type { CurveV1AdapterBaseMetaPoolTest } from "./contracts/test/adapters/CurveV1AdapterBaseMetapoolTest.t.sol/CurveV1AdapterBaseMetaPoolTest"; -export { CurveV1AdapterBaseMetaPoolTest__factory } from "./factories/contracts/test/adapters/CurveV1AdapterBaseMetapoolTest.t.sol/CurveV1AdapterBaseMetaPoolTest__factory"; -export type { CurveV1AdapterBaseTest } from "./contracts/test/adapters/CurveV1AdapterBaseTest.t.sol/CurveV1AdapterBaseTest"; -export { CurveV1AdapterBaseTest__factory } from "./factories/contracts/test/adapters/CurveV1AdapterBaseTest.t.sol/CurveV1AdapterBaseTest__factory"; -export type { CurveV1AdapterHelper } from "./contracts/test/adapters/CurveV1AdapterHelper"; -export { CurveV1AdapterHelper__factory } from "./factories/contracts/test/adapters/CurveV1AdapterHelper__factory"; -export type { CurveV1StEthAdapterTest } from "./contracts/test/adapters/CurveV1StETHTest.t.sol/CurveV1StEthAdapterTest"; -export { CurveV1StEthAdapterTest__factory } from "./factories/contracts/test/adapters/CurveV1StETHTest.t.sol/CurveV1StEthAdapterTest__factory"; -export type { LidoV1AdapterTest } from "./contracts/test/adapters/LidoV1Adapter.t.sol/LidoV1AdapterTest"; -export { LidoV1AdapterTest__factory } from "./factories/contracts/test/adapters/LidoV1Adapter.t.sol/LidoV1AdapterTest__factory"; -export type { UniswapV2AdapterTest } from "./contracts/test/adapters/UniswapV2Adapter.t.sol/UniswapV2AdapterTest"; -export { UniswapV2AdapterTest__factory } from "./factories/contracts/test/adapters/UniswapV2Adapter.t.sol/UniswapV2AdapterTest__factory"; -export type { UniswapV3AdapterTest } from "./contracts/test/adapters/UniswapV3Adapter.t.sol/UniswapV3AdapterTest"; -export { UniswapV3AdapterTest__factory } from "./factories/contracts/test/adapters/UniswapV3Adapter.t.sol/UniswapV3AdapterTest__factory"; -export type { YearnV2AdapterTest } from "./contracts/test/adapters/YearnV2Adapter.t.sol/YearnV2AdapterTest"; -export { YearnV2AdapterTest__factory } from "./factories/contracts/test/adapters/YearnV2Adapter.t.sol/YearnV2AdapterTest__factory"; -export type { ACLTest } from "./contracts/test/core/ACL.t.sol/ACLTest"; -export { ACLTest__factory } from "./factories/contracts/test/core/ACL.t.sol/ACLTest__factory"; -export type { AddressProviderTest } from "./contracts/test/core/AddressProvider.t.sol/AddressProviderTest"; -export { AddressProviderTest__factory } from "./factories/contracts/test/core/AddressProvider.t.sol/AddressProviderTest__factory"; -export type { CreditConfiguratorTest } from "./contracts/test/credit/CreditConfigurator.t.sol/CreditConfiguratorTest"; -export { CreditConfiguratorTest__factory } from "./factories/contracts/test/credit/CreditConfigurator.t.sol/CreditConfiguratorTest__factory"; -export type { CreditFacadeTest } from "./contracts/test/credit/CreditFacade.t.sol/CreditFacadeTest"; -export { CreditFacadeTest__factory } from "./factories/contracts/test/credit/CreditFacade.t.sol/CreditFacadeTest__factory"; -export type { CreditManagerTest } from "./contracts/test/credit/CreditManager.t.sol/CreditManagerTest"; -export { CreditManagerTest__factory } from "./factories/contracts/test/credit/CreditManager.t.sol/CreditManagerTest__factory"; -export type { CheatCodes } from "./contracts/test/lib/cheatCodes.sol/CheatCodes"; -export { CheatCodes__factory } from "./factories/contracts/test/lib/cheatCodes.sol/CheatCodes__factory"; -export type { Roles } from "./contracts/test/lib/constants.sol/Roles"; -export { Roles__factory } from "./factories/contracts/test/lib/constants.sol/Roles__factory"; -export type { DSTest } from "./contracts/test/lib/test.sol/DSTest"; -export { DSTest__factory } from "./factories/contracts/test/lib/test.sol/DSTest__factory"; -export type { MainnetTokensTestSuite } from "./contracts/test/mainnet/MainnetTokens.sol/MainnetTokensTestSuite"; -export { MainnetTokensTestSuite__factory } from "./factories/contracts/test/mainnet/MainnetTokens.sol/MainnetTokensTestSuite__factory"; -export type { TotalValueCalculator } from "./contracts/test/mainnet/TotalValueCalculator"; -export { TotalValueCalculator__factory } from "./factories/contracts/test/mainnet/TotalValueCalculator__factory"; -export type { AdapterMock } from "./contracts/test/mocks/adapters/AdapterMock"; -export { AdapterMock__factory } from "./factories/contracts/test/mocks/adapters/AdapterMock__factory"; -export type { TargetContractMock } from "./contracts/test/mocks/adapters/TargetContractMock"; -export { TargetContractMock__factory } from "./factories/contracts/test/mocks/adapters/TargetContractMock__factory"; -export type { ACLTraitTest } from "./contracts/test/mocks/core/ACLTraitTest"; -export { ACLTraitTest__factory } from "./factories/contracts/test/mocks/core/ACLTraitTest__factory"; -export type { AddressProviderACLMock } from "./contracts/test/mocks/core/AddressProviderACLMock"; -export { AddressProviderACLMock__factory } from "./factories/contracts/test/mocks/core/AddressProviderACLMock__factory"; -export type { CreditManagerInternal } from "./contracts/test/mocks/credit/CreditManagerInternal"; -export { CreditManagerInternal__factory } from "./factories/contracts/test/mocks/credit/CreditManagerInternal__factory"; -export type { TreasuryMock } from "./contracts/test/mocks/dao/TreasuryMock"; -export { TreasuryMock__factory } from "./factories/contracts/test/mocks/dao/TreasuryMock__factory"; -export type { BaseRewardPoolMock } from "./contracts/test/mocks/integrations/ConvexBaseRewardPoolMock.sol/BaseRewardPoolMock"; -export { BaseRewardPoolMock__factory } from "./factories/contracts/test/mocks/integrations/ConvexBaseRewardPoolMock.sol/BaseRewardPoolMock__factory"; -export type { IBaseRewardPoolMockEvents } from "./contracts/test/mocks/integrations/ConvexBaseRewardPoolMock.sol/IBaseRewardPoolMockEvents"; -export { IBaseRewardPoolMockEvents__factory } from "./factories/contracts/test/mocks/integrations/ConvexBaseRewardPoolMock.sol/IBaseRewardPoolMockEvents__factory"; -export type { BoosterMock } from "./contracts/test/mocks/integrations/ConvexBoosterMock.sol/BoosterMock"; -export { BoosterMock__factory } from "./factories/contracts/test/mocks/integrations/ConvexBoosterMock.sol/BoosterMock__factory"; -export type { IBoosterMockEvents } from "./contracts/test/mocks/integrations/ConvexBoosterMock.sol/IBoosterMockEvents"; -export { IBoosterMockEvents__factory } from "./factories/contracts/test/mocks/integrations/ConvexBoosterMock.sol/IBoosterMockEvents__factory"; -export type { ClaimZapMock } from "./contracts/test/mocks/integrations/ConvexClaimZapMock.sol/ClaimZapMock"; -export { ClaimZapMock__factory } from "./factories/contracts/test/mocks/integrations/ConvexClaimZapMock.sol/ClaimZapMock__factory"; -export type { ExtraRewardPoolMock } from "./contracts/test/mocks/integrations/ConvexExtraRewardPoolMock.sol/ExtraRewardPoolMock"; -export { ExtraRewardPoolMock__factory } from "./factories/contracts/test/mocks/integrations/ConvexExtraRewardPoolMock.sol/ExtraRewardPoolMock__factory"; -export type { IExtraRewardPoolMockEvents } from "./contracts/test/mocks/integrations/ConvexExtraRewardPoolMock.sol/IExtraRewardPoolMockEvents"; -export { IExtraRewardPoolMockEvents__factory } from "./factories/contracts/test/mocks/integrations/ConvexExtraRewardPoolMock.sol/IExtraRewardPoolMockEvents__factory"; -export type { VirtualBalanceWrapper } from "./contracts/test/mocks/integrations/ConvexExtraRewardPoolMock.sol/VirtualBalanceWrapper"; -export { VirtualBalanceWrapper__factory } from "./factories/contracts/test/mocks/integrations/ConvexExtraRewardPoolMock.sol/VirtualBalanceWrapper__factory"; -export type { TokenRewardContractMock } from "./contracts/test/mocks/integrations/ConvexTokenRewardContractMock.sol/TokenRewardContractMock"; -export { TokenRewardContractMock__factory } from "./factories/contracts/test/mocks/integrations/ConvexTokenRewardContractMock.sol/TokenRewardContractMock__factory"; -export type { CurveV1MetapoolMock } from "./contracts/test/mocks/integrations/CurveV1MetapoolMock"; -export { CurveV1MetapoolMock__factory } from "./factories/contracts/test/mocks/integrations/CurveV1MetapoolMock__factory"; -export type { CurveV1Mock_2Assets } from "./contracts/test/mocks/integrations/CurveV1Mock_2Assets"; -export { CurveV1Mock_2Assets__factory } from "./factories/contracts/test/mocks/integrations/CurveV1Mock_2Assets__factory"; -export type { CurveV1Mock_3Assets } from "./contracts/test/mocks/integrations/CurveV1Mock_3Assets"; -export { CurveV1Mock_3Assets__factory } from "./factories/contracts/test/mocks/integrations/CurveV1Mock_3Assets__factory"; -export type { CurveV1Mock_4Assets } from "./contracts/test/mocks/integrations/CurveV1Mock_4Assets"; -export { CurveV1Mock_4Assets__factory } from "./factories/contracts/test/mocks/integrations/CurveV1Mock_4Assets__factory"; -export type { CurveV1Mock } from "./contracts/test/mocks/integrations/CurveV1Mock"; -export { CurveV1Mock__factory } from "./factories/contracts/test/mocks/integrations/CurveV1Mock__factory"; -export type { CurveV1StETHMock } from "./contracts/test/mocks/integrations/CurveV1StETHMock"; -export { CurveV1StETHMock__factory } from "./factories/contracts/test/mocks/integrations/CurveV1StETHMock__factory"; export type { ILidoMockEvents } from "./contracts/test/mocks/integrations/LidoMock.sol/ILidoMockEvents"; export { ILidoMockEvents__factory } from "./factories/contracts/test/mocks/integrations/LidoMock.sol/ILidoMockEvents__factory"; -export type { LidoMock } from "./contracts/test/mocks/integrations/LidoMock.sol/LidoMock"; -export { LidoMock__factory } from "./factories/contracts/test/mocks/integrations/LidoMock.sol/LidoMock__factory"; -export type { UniswapV2Mock } from "./contracts/test/mocks/integrations/UniswapV2Mock"; -export { UniswapV2Mock__factory } from "./factories/contracts/test/mocks/integrations/UniswapV2Mock__factory"; -export type { UniswapV3Mock } from "./contracts/test/mocks/integrations/UniswapV3Mock"; -export { UniswapV3Mock__factory } from "./factories/contracts/test/mocks/integrations/UniswapV3Mock__factory"; -export type { YearnV2Mock } from "./contracts/test/mocks/integrations/YearnV2Mock"; -export { YearnV2Mock__factory } from "./factories/contracts/test/mocks/integrations/YearnV2Mock__factory"; -export type { PercentageMathTest } from "./contracts/test/mocks/libraries/PercentageMathTest"; -export { PercentageMathTest__factory } from "./factories/contracts/test/mocks/libraries/PercentageMathTest__factory"; -export type { WadRayMathTest } from "./contracts/test/mocks/libraries/WadRayMathTest"; -export { WadRayMathTest__factory } from "./factories/contracts/test/mocks/libraries/WadRayMathTest__factory"; -export type { LPPriceFeedMock } from "./contracts/test/mocks/oracles/LPPriceFeedMock"; -export { LPPriceFeedMock__factory } from "./factories/contracts/test/mocks/oracles/LPPriceFeedMock__factory"; -export type { PriceFeedMock } from "./contracts/test/mocks/oracles/PriceFeedMock"; -export { PriceFeedMock__factory } from "./factories/contracts/test/mocks/oracles/PriceFeedMock__factory"; -export type { CreditManagerMockForPoolTest } from "./contracts/test/mocks/pool/CreditManagerMockForPoolTest"; -export { CreditManagerMockForPoolTest__factory } from "./factories/contracts/test/mocks/pool/CreditManagerMockForPoolTest__factory"; -export type { PoolServiceMock } from "./contracts/test/mocks/pool/PoolServiceMock"; -export { PoolServiceMock__factory } from "./factories/contracts/test/mocks/pool/PoolServiceMock__factory"; -export type { TestPoolService } from "./contracts/test/mocks/pool/TestPoolService"; -export { TestPoolService__factory } from "./factories/contracts/test/mocks/pool/TestPoolService__factory"; -export type { CERC20Mock } from "./contracts/test/mocks/token/CERC20Mock"; -export { CERC20Mock__factory } from "./factories/contracts/test/mocks/token/CERC20Mock__factory"; -export type { ERC20ApproveRestrictedFalse } from "./contracts/test/mocks/token/ERC20ApproveRestricted.sol/ERC20ApproveRestrictedFalse"; -export { ERC20ApproveRestrictedFalse__factory } from "./factories/contracts/test/mocks/token/ERC20ApproveRestricted.sol/ERC20ApproveRestrictedFalse__factory"; -export type { ERC20ApproveRestrictedRevert } from "./contracts/test/mocks/token/ERC20ApproveRestricted.sol/ERC20ApproveRestrictedRevert"; -export { ERC20ApproveRestrictedRevert__factory } from "./factories/contracts/test/mocks/token/ERC20ApproveRestricted.sol/ERC20ApproveRestrictedRevert__factory"; -export type { ERC20BlockingMock } from "./contracts/test/mocks/token/ERC20Blocking.sol/ERC20BlockingMock"; -export { ERC20BlockingMock__factory } from "./factories/contracts/test/mocks/token/ERC20Blocking.sol/ERC20BlockingMock__factory"; -export type { TokenFeeMock } from "./contracts/test/mocks/token/ERC20Fee.sol/TokenFeeMock"; -export { TokenFeeMock__factory } from "./factories/contracts/test/mocks/token/ERC20Fee.sol/TokenFeeMock__factory"; -export type { ERC20Mock } from "./contracts/test/mocks/token/ERC20Mock"; -export { ERC20Mock__factory } from "./factories/contracts/test/mocks/token/ERC20Mock__factory"; -export type { NonCompliantERC20 } from "./contracts/test/mocks/token/ERC20NonCompliant.sol/NonCompliantERC20"; -export { NonCompliantERC20__factory } from "./factories/contracts/test/mocks/token/ERC20NonCompliant.sol/NonCompliantERC20__factory"; -export type { ERC721ReceiverMock } from "./contracts/test/mocks/token/ERC721ReceiverMock.sol/ERC721ReceiverMock"; -export { ERC721ReceiverMock__factory } from "./factories/contracts/test/mocks/token/ERC721ReceiverMock.sol/ERC721ReceiverMock__factory"; -export type { StETHMock } from "./contracts/test/mocks/token/StETHMock"; -export { StETHMock__factory } from "./factories/contracts/test/mocks/token/StETHMock__factory"; -export type { WETHMock } from "./contracts/test/mocks/token/WETHMock"; -export { WETHMock__factory } from "./factories/contracts/test/mocks/token/WETHMock__factory"; -export type { CurveLPPriceFeedTest } from "./contracts/test/oracles/CurveLPPriceFeed.t.sol/CurveLPPriceFeedTest"; -export { CurveLPPriceFeedTest__factory } from "./factories/contracts/test/oracles/CurveLPPriceFeed.t.sol/CurveLPPriceFeedTest__factory"; -export type { LPPriceFeedTest } from "./contracts/test/oracles/LPPriceFeed.t.sol/LPPriceFeedTest"; -export { LPPriceFeedTest__factory } from "./factories/contracts/test/oracles/LPPriceFeed.t.sol/LPPriceFeedTest__factory"; -export type { PriceOracleTest } from "./contracts/test/oracles/PriceOracle.t.sol/PriceOracleTest"; -export { PriceOracleTest__factory } from "./factories/contracts/test/oracles/PriceOracle.t.sol/PriceOracleTest__factory"; -export type { YearnFeedTest } from "./contracts/test/oracles/YearnPriceFeed.t.sol/YearnFeedTest"; -export { YearnFeedTest__factory } from "./factories/contracts/test/oracles/YearnPriceFeed.t.sol/YearnFeedTest__factory"; -export type { ZeroFeedTest } from "./contracts/test/oracles/ZeroPriceFeed.t.sol/ZeroFeedTest"; -export { ZeroFeedTest__factory } from "./factories/contracts/test/oracles/ZeroPriceFeed.t.sol/ZeroFeedTest__factory"; -export type { CurveLPPathFinderTest } from "./contracts/test/pathfinder/CurveLPPathFinder.t.sol/CurveLPPathFinderTest"; -export { CurveLPPathFinderTest__factory } from "./factories/contracts/test/pathfinder/CurveLPPathFinder.t.sol/CurveLPPathFinderTest__factory"; -export type { CurvePathFinderTest } from "./contracts/test/pathfinder/CurvePathFinder.t.sol/CurvePathFinderTest"; -export { CurvePathFinderTest__factory } from "./factories/contracts/test/pathfinder/CurvePathFinder.t.sol/CurvePathFinderTest__factory"; -export type { NormalTokenPathFinderTest } from "./contracts/test/pathfinder/NormalTokenPathFinder.t.sol/NormalTokenPathFinderTest"; -export { NormalTokenPathFinderTest__factory } from "./factories/contracts/test/pathfinder/NormalTokenPathFinder.t.sol/NormalTokenPathFinderTest__factory"; -export type { PathFinderTestHelper } from "./contracts/test/pathfinder/PathFinderTestHelper"; -export { PathFinderTestHelper__factory } from "./factories/contracts/test/pathfinder/PathFinderTestHelper__factory"; -export type { SwapPathFinderTest } from "./contracts/test/pathfinder/SwapPathFinder.t.sol/SwapPathFinderTest"; -export { SwapPathFinderTest__factory } from "./factories/contracts/test/pathfinder/SwapPathFinder.t.sol/SwapPathFinderTest__factory"; -export type { UniswapV2PathFinderTest } from "./contracts/test/pathfinder/UniswapV2PathFinder.t.sol/UniswapV2PathFinderTest"; -export { UniswapV2PathFinderTest__factory } from "./factories/contracts/test/pathfinder/UniswapV2PathFinder.t.sol/UniswapV2PathFinderTest__factory"; -export type { UniswapV3PathFinderTest } from "./contracts/test/pathfinder/UniswapV3PathFinder.t.sol/UniswapV3PathFinderTest"; -export { UniswapV3PathFinderTest__factory } from "./factories/contracts/test/pathfinder/UniswapV3PathFinder.t.sol/UniswapV3PathFinderTest__factory"; -export type { YearnPathFinderTest } from "./contracts/test/pathfinder/YearnPathFinder.t.sol/YearnPathFinderTest"; -export { YearnPathFinderTest__factory } from "./factories/contracts/test/pathfinder/YearnPathFinder.t.sol/YearnPathFinderTest__factory"; -export type { PlaygroundTest } from "./contracts/test/Playground.t.sol/PlaygroundTest"; -export { PlaygroundTest__factory } from "./factories/contracts/test/Playground.t.sol/PlaygroundTest__factory"; -export type { PoolServiceTest } from "./contracts/test/pool/PoolService.t.sol/PoolServiceTest"; -export { PoolServiceTest__factory } from "./factories/contracts/test/pool/PoolService.t.sol/PoolServiceTest__factory"; -export type { AttackContractNonPayable } from "./contracts/test/sigp/AttackingContractNonPayable.sol/AttackContractNonPayable"; -export { AttackContractNonPayable__factory } from "./factories/contracts/test/sigp/AttackingContractNonPayable.sol/AttackContractNonPayable__factory"; -export type { DummyMulticallTarget } from "./contracts/test/sigp/DummyMulticallTarget"; -export { DummyMulticallTarget__factory } from "./factories/contracts/test/sigp/DummyMulticallTarget__factory"; -export type { FlashLoanAttacker2 } from "./contracts/test/sigp/FlashLoanAttacker2"; -export { FlashLoanAttacker2__factory } from "./factories/contracts/test/sigp/FlashLoanAttacker2__factory"; export type { ILockedCvx } from "./contracts/test/sigp/interfaces/ILockedCvx"; export { ILockedCvx__factory } from "./factories/contracts/test/sigp/interfaces/ILockedCvx__factory"; -export type { NewBaseRewardPoolMock } from "./contracts/test/sigp/NewConvexBaseRewardPoolMock.sol/NewBaseRewardPoolMock"; -export { NewBaseRewardPoolMock__factory } from "./factories/contracts/test/sigp/NewConvexBaseRewardPoolMock.sol/NewBaseRewardPoolMock__factory"; -export type { NewBoosterMock } from "./contracts/test/sigp/NewConvexBoosterMock.sol/NewBoosterMock"; -export { NewBoosterMock__factory } from "./factories/contracts/test/sigp/NewConvexBoosterMock.sol/NewBoosterMock__factory"; -export type { NewCreditConfigurator } from "./contracts/test/sigp/NewCreditConfigurator"; -export { NewCreditConfigurator__factory } from "./factories/contracts/test/sigp/NewCreditConfigurator__factory"; -export type { StETHMockERC20 } from "./contracts/test/sigp/stETHMock.sol/StETHMockERC20"; -export { StETHMockERC20__factory } from "./factories/contracts/test/sigp/stETHMock.sol/StETHMockERC20__factory"; -export type { UniswapV3AdapterTestHelper } from "./contracts/test/sigp/UniswapHelper.sol/UniswapV3AdapterTestHelper"; -export { UniswapV3AdapterTestHelper__factory } from "./factories/contracts/test/sigp/UniswapHelper.sol/UniswapV3AdapterTestHelper__factory"; -export type { BalanceHelper } from "./contracts/test/suites/BalanceHelper"; -export { BalanceHelper__factory } from "./factories/contracts/test/suites/BalanceHelper__factory"; -export type { BaseCreditTestSuite } from "./contracts/test/suites/BaseCreditTestSuite"; -export { BaseCreditTestSuite__factory } from "./factories/contracts/test/suites/BaseCreditTestSuite__factory"; -export type { CreditFacadeHelper } from "./contracts/test/suites/CreditFacadeHelper"; -export { CreditFacadeHelper__factory } from "./factories/contracts/test/suites/CreditFacadeHelper__factory"; -export type { CreditFacadeTestSuite } from "./contracts/test/suites/CreditFacadeTestSuite"; -export { CreditFacadeTestSuite__factory } from "./factories/contracts/test/suites/CreditFacadeTestSuite__factory"; -export type { CreditManagerTestSuite } from "./contracts/test/suites/CreditManagerTestSuite"; -export { CreditManagerTestSuite__factory } from "./factories/contracts/test/suites/CreditManagerTestSuite__factory"; -export type { PoolServiceTestSuite } from "./contracts/test/suites/PoolServiceTestSuite"; -export { PoolServiceTestSuite__factory } from "./factories/contracts/test/suites/PoolServiceTestSuite__factory"; -export type { TokensTestSuite } from "./contracts/test/suites/TokensTestSuite"; -export { TokensTestSuite__factory } from "./factories/contracts/test/suites/TokensTestSuite__factory"; -export type { PauseMulticallTest } from "./contracts/test/support/PauseMulticall.t.sol/PauseMulticallTest"; -export { PauseMulticallTest__factory } from "./factories/contracts/test/support/PauseMulticall.t.sol/PauseMulticallTest__factory"; -export type { DegenNFTTest } from "./contracts/test/tokens/DegenNFT.t.sol/DegenNFTTest"; -export { DegenNFTTest__factory } from "./factories/contracts/test/tokens/DegenNFT.t.sol/DegenNFTTest__factory"; -export type { DegenNFT } from "./contracts/tokens/DegenNFT"; -export { DegenNFT__factory } from "./factories/contracts/tokens/DegenNFT__factory"; -export type { DieselToken } from "./contracts/tokens/DieselToken"; -export { DieselToken__factory } from "./factories/contracts/tokens/DieselToken__factory"; -export type { GearToken } from "./contracts/tokens/GearToken"; -export { GearToken__factory } from "./factories/contracts/tokens/GearToken__factory"; -export type { PhantomERC20 } from "./contracts/tokens/PhantomERC20"; -export { PhantomERC20__factory } from "./factories/contracts/tokens/PhantomERC20__factory"; +export type { AggregatorV3Interface } from "./@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface"; +export { AggregatorV3Interface__factory } from "./factories/@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface__factory"; +export type { Multicall2 } from "./contracts/support/MultiCall.sol/Multicall2"; +export { Multicall2__factory } from "./factories/contracts/support/MultiCall.sol/Multicall2__factory"; diff --git a/src/utils/network.ts b/src/utils/network.ts index 5e034d84..bb47fd8d 100644 --- a/src/utils/network.ts +++ b/src/utils/network.ts @@ -2,13 +2,13 @@ import { ethers } from "ethers"; import { ADDRESS_0X0, NetworkType } from "../core/constants"; import { tokenDataByNetwork } from "../tokens/token"; -import { ERC20__factory } from "../types"; +import { IERC20__factory } from "../types"; export async function detectNetwork( provider: ethers.providers.Provider, ): Promise { try { - const usdcMainnet = ERC20__factory.connect( + const usdcMainnet = IERC20__factory.connect( tokenDataByNetwork.Mainnet.USDC, provider, ); @@ -16,7 +16,7 @@ export async function detectNetwork( return "Mainnet"; } catch { try { - const usdcMainnet = ERC20__factory.connect( + const usdcMainnet = IERC20__factory.connect( tokenDataByNetwork.Goerli.USDC, provider, ); diff --git a/yarn.lock b/yarn.lock index 5b3210bc..22927624 100644 --- a/yarn.lock +++ b/yarn.lock @@ -18,46 +18,37 @@ "@babel/highlight" "^7.18.6" "@babel/compat-data@^7.18.8": - version "7.18.8" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.18.8.tgz#2483f565faca607b8535590e84e7de323f27764d" - integrity sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ== + version "7.18.13" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.18.13.tgz#6aff7b350a1e8c3e40b029e46cbe78e24a913483" + integrity sha512-5yUzC5LqyTFp2HLmDoxGQelcdYgSpP9xsnMWBphAscOdFrHSAVbLNzWiy32sVNDqJRDiJK6klfDnAgu6PAGSHw== "@babel/core@^7.11.6", "@babel/core@^7.12.3": - version "7.18.10" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.18.10.tgz#39ad504991d77f1f3da91be0b8b949a5bc466fb8" - integrity sha512-JQM6k6ENcBFKVtWvLavlvi/mPcpYZ3+R+2EySDEMSMbp7Mn4FexlbbJVrx2R7Ijhr01T8gyqrOaABWIOgxeUyw== + version "7.18.13" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.18.13.tgz#9be8c44512751b05094a4d3ab05fc53a47ce00ac" + integrity sha512-ZisbOvRRusFktksHSG6pjj1CSvkPkcZq/KHD45LAkVP/oiHJkNBZWfpvlLmX8OtHDG8IuzsFlVRWo08w7Qxn0A== dependencies: "@ampproject/remapping" "^2.1.0" "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.18.10" + "@babel/generator" "^7.18.13" "@babel/helper-compilation-targets" "^7.18.9" "@babel/helper-module-transforms" "^7.18.9" "@babel/helpers" "^7.18.9" - "@babel/parser" "^7.18.10" + "@babel/parser" "^7.18.13" "@babel/template" "^7.18.10" - "@babel/traverse" "^7.18.10" - "@babel/types" "^7.18.10" + "@babel/traverse" "^7.18.13" + "@babel/types" "^7.18.13" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.1" semver "^6.3.0" -"@babel/generator@^7.18.10": - version "7.18.10" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.18.10.tgz#794f328bfabdcbaf0ebf9bf91b5b57b61fa77a2a" - integrity sha512-0+sW7e3HjQbiHbj1NeU/vN8ornohYlacAfZIaXhdoGweQqgcNy69COVciYYqEXJ/v+9OBA7Frxm4CVAuNqKeNA== +"@babel/generator@^7.18.13", "@babel/generator@^7.7.2": + version "7.18.13" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.18.13.tgz#59550cbb9ae79b8def15587bdfbaa388c4abf212" + integrity sha512-CkPg8ySSPuHTYPJYo7IRALdqyjM9HCbt/3uOBEFbzyGVP6Mn8bwFPB0jX6982JVNBlYzM1nnPkfjuXSOPtQeEQ== dependencies: - "@babel/types" "^7.18.10" - "@jridgewell/gen-mapping" "^0.3.2" - jsesc "^2.5.1" - -"@babel/generator@^7.7.2": - version "7.18.12" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.18.12.tgz#fa58daa303757bd6f5e4bbca91b342040463d9f4" - integrity sha512-dfQ8ebCN98SvyL7IxNMCUtZQSq5R7kxgN+r8qYTGDmmSion1hX2C0zq2yo1bsCDhXixokv1SAWTZUMYbO/V5zg== - dependencies: - "@babel/types" "^7.18.10" + "@babel/types" "^7.18.13" "@jridgewell/gen-mapping" "^0.3.2" jsesc "^2.5.1" @@ -164,10 +155,10 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.18.10", "@babel/parser@^7.18.11": - version "7.18.11" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.11.tgz#68bb07ab3d380affa9a3f96728df07969645d2d9" - integrity sha512-9JKn5vN+hDt0Hdqn1PiJ2guflwP+B6Ga8qbDuoF0PzzVhrzsKIJo8yGqVk6CmMHiMei9w1C1Bp9IMJSIK+HPIQ== +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.18.10", "@babel/parser@^7.18.13": + version "7.18.13" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.13.tgz#5b2dd21cae4a2c5145f1fbd8ca103f9313d3b7e4" + integrity sha512-dgXcIfMuQ0kgzLB2b9tRZs7TTFFaGM2AbtA4fJgUUYukzGH4jwsS7hzQHEGs67jdehpm22vkgKwvbU+aEflgwg== "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" @@ -269,26 +260,26 @@ "@babel/parser" "^7.18.10" "@babel/types" "^7.18.10" -"@babel/traverse@^7.18.10", "@babel/traverse@^7.18.9", "@babel/traverse@^7.7.2": - version "7.18.11" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.11.tgz#3d51f2afbd83ecf9912bcbb5c4d94e3d2ddaa16f" - integrity sha512-TG9PiM2R/cWCAy6BPJKeHzNbu4lPzOSZpeMfeNErskGpTJx6trEvFaVCbDvpcxwy49BKWmEPwiW8mrysNiDvIQ== +"@babel/traverse@^7.18.13", "@babel/traverse@^7.18.9", "@babel/traverse@^7.7.2": + version "7.18.13" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.13.tgz#5ab59ef51a997b3f10c4587d648b9696b6cb1a68" + integrity sha512-N6kt9X1jRMLPxxxPYWi7tgvJRH/rtoU+dbKAPDM44RFHiMH8igdsaSBgFeskhSl/kLWLDUvIh1RXCrTmg0/zvA== dependencies: "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.18.10" + "@babel/generator" "^7.18.13" "@babel/helper-environment-visitor" "^7.18.9" "@babel/helper-function-name" "^7.18.9" "@babel/helper-hoist-variables" "^7.18.6" "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/parser" "^7.18.11" - "@babel/types" "^7.18.10" + "@babel/parser" "^7.18.13" + "@babel/types" "^7.18.13" debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.3.0", "@babel/types@^7.3.3": - version "7.18.10" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.10.tgz#4908e81b6b339ca7c6b7a555a5fc29446f26dde6" - integrity sha512-MJvnbEiiNkpjo+LknnmRrqbY1GPUUggjv+wQVjetM/AONoupqRALB7I6jGqNUAZsKcRIEu2J6FRFvsczljjsaQ== +"@babel/types@^7.0.0", "@babel/types@^7.18.10", "@babel/types@^7.18.13", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.3.0", "@babel/types@^7.3.3": + version "7.18.13" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.13.tgz#30aeb9e514f4100f7c1cb6e5ba472b30e48f519a" + integrity sha512-ePqfTihzW0W6XAU+aMw2ykilisStJfDnsejDCXRchCcMJ4O0+8DhPXf2YUbZ6wjBlsEmZwLK/sPweWtu8hcJYQ== dependencies: "@babel/helper-string-parser" "^7.18.10" "@babel/helper-validator-identifier" "^7.18.6" @@ -474,7 +465,7 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@ethersproject/abi@5.6.4", "@ethersproject/abi@^5.6.3": +"@ethersproject/abi@5.6.4": version "5.6.4" resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.6.4.tgz#f6e01b6ed391a505932698ecc0d9e7a99ee60362" integrity sha512-TTeZUlCeIHG6527/2goZA6gW5F8Emoc7MrZDC7hhP84aRGvW3TEdTnZR08Ls88YXM1m2SuK42Osw/jSi3uO8gg== @@ -489,7 +480,22 @@ "@ethersproject/properties" "^5.6.0" "@ethersproject/strings" "^5.6.1" -"@ethersproject/abstract-provider@5.6.1", "@ethersproject/abstract-provider@^5.6.1": +"@ethersproject/abi@^5.6.3": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449" + integrity sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA== + dependencies: + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@ethersproject/abstract-provider@5.6.1": version "5.6.1" resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.6.1.tgz#02ddce150785caf0c77fe036a0ebfcee61878c59" integrity sha512-BxlIgogYJtp1FS8Muvj8YfdClk3unZH0vRMVX791Z9INBNT/kuACZ9GzaY1Y4yFq+YSy6/w4gzj3HCRKrK9hsQ== @@ -502,7 +508,20 @@ "@ethersproject/transactions" "^5.6.2" "@ethersproject/web" "^5.6.1" -"@ethersproject/abstract-signer@5.6.2", "@ethersproject/abstract-signer@^5.6.2": +"@ethersproject/abstract-provider@^5.6.1", "@ethersproject/abstract-provider@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz#b0a8550f88b6bf9d51f90e4795d48294630cb9ef" + integrity sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/networks" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/web" "^5.7.0" + +"@ethersproject/abstract-signer@5.6.2": version "5.6.2" resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.6.2.tgz#491f07fc2cbd5da258f46ec539664713950b0b33" integrity sha512-n1r6lttFBG0t2vNiI3HoWaS/KdOt8xyDjzlP2cuevlWLG6EX0OwcKLyG/Kp/cuwNxdy/ous+R/DEMdTUwWQIjQ== @@ -513,7 +532,18 @@ "@ethersproject/logger" "^5.6.0" "@ethersproject/properties" "^5.6.0" -"@ethersproject/address@5.6.1", "@ethersproject/address@^5.6.1": +"@ethersproject/abstract-signer@^5.6.2", "@ethersproject/abstract-signer@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz#13f4f32117868452191a4649723cb086d2b596b2" + integrity sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ== + dependencies: + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + +"@ethersproject/address@5.6.1": version "5.6.1" resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.6.1.tgz#ab57818d9aefee919c5721d28cd31fd95eff413d" integrity sha512-uOgF0kS5MJv9ZvCz7x6T2EXJSzotiybApn4XlOgoTX0xdtyVIJ7pF+6cGPxiEq/dpBiTfMiw7Yc81JcwhSYA0Q== @@ -524,14 +554,32 @@ "@ethersproject/logger" "^5.6.0" "@ethersproject/rlp" "^5.6.1" -"@ethersproject/base64@5.6.1", "@ethersproject/base64@^5.6.1": +"@ethersproject/address@^5.6.1", "@ethersproject/address@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.7.0.tgz#19b56c4d74a3b0a46bfdbb6cfcc0a153fc697f37" + integrity sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/rlp" "^5.7.0" + +"@ethersproject/base64@5.6.1": version "5.6.1" resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.6.1.tgz#2c40d8a0310c9d1606c2c37ae3092634b41d87cb" integrity sha512-qB76rjop6a0RIYYMiB4Eh/8n+Hxu2NIZm8S/Q7kNo5pmZfXhHGHmS4MinUainiBC54SCyRnwzL+KZjj8zbsSsw== dependencies: "@ethersproject/bytes" "^5.6.1" -"@ethersproject/basex@5.6.1", "@ethersproject/basex@^5.6.1": +"@ethersproject/base64@^5.6.1", "@ethersproject/base64@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.7.0.tgz#ac4ee92aa36c1628173e221d0d01f53692059e1c" + integrity sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ== + dependencies: + "@ethersproject/bytes" "^5.7.0" + +"@ethersproject/basex@5.6.1": version "5.6.1" resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.6.1.tgz#badbb2f1d4a6f52ce41c9064f01eab19cc4c5305" integrity sha512-a52MkVz4vuBXR06nvflPMotld1FJWSj2QT0985v7P/emPZO00PucFAkbcmq2vpVU7Ts7umKiSI6SppiLykVWsA== @@ -539,7 +587,15 @@ "@ethersproject/bytes" "^5.6.1" "@ethersproject/properties" "^5.6.0" -"@ethersproject/bignumber@5.6.2", "@ethersproject/bignumber@^5.6.2": +"@ethersproject/basex@^5.6.1", "@ethersproject/basex@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.7.0.tgz#97034dc7e8938a8ca943ab20f8a5e492ece4020b" + integrity sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + +"@ethersproject/bignumber@5.6.2": version "5.6.2" resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.6.2.tgz#72a0717d6163fab44c47bcc82e0c550ac0315d66" integrity sha512-v7+EEUbhGqT3XJ9LMPsKvXYHFc8eHxTowFCG/HgJErmq4XHJ2WR7aeyICg3uTOAQ7Icn0GFHAohXEhxQHq4Ubw== @@ -548,20 +604,43 @@ "@ethersproject/logger" "^5.6.0" bn.js "^5.2.1" -"@ethersproject/bytes@5.6.1", "@ethersproject/bytes@^5.6.1": +"@ethersproject/bignumber@^5.6.2", "@ethersproject/bignumber@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.7.0.tgz#e2f03837f268ba655ffba03a57853e18a18dc9c2" + integrity sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + bn.js "^5.2.1" + +"@ethersproject/bytes@5.6.1": version "5.6.1" resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.6.1.tgz#24f916e411f82a8a60412344bf4a813b917eefe7" integrity sha512-NwQt7cKn5+ZE4uDn+X5RAXLp46E1chXoaMmrxAyA0rblpxz8t58lVkrHXoRIn0lz1joQElQ8410GqhTqMOwc6g== dependencies: "@ethersproject/logger" "^5.6.0" -"@ethersproject/constants@5.6.1", "@ethersproject/constants@^5.6.1": +"@ethersproject/bytes@^5.6.1", "@ethersproject/bytes@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.7.0.tgz#a00f6ea8d7e7534d6d87f47188af1148d71f155d" + integrity sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A== + dependencies: + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/constants@5.6.1": version "5.6.1" resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.6.1.tgz#e2e974cac160dd101cf79fdf879d7d18e8cb1370" integrity sha512-QSq9WVnZbxXYFftrjSjZDUshp6/eKp6qrtdBtUCm0QxCV5z1fG/w3kdlcsjMCQuQHUnAclKoK7XpXMezhRDOLg== dependencies: "@ethersproject/bignumber" "^5.6.2" +"@ethersproject/constants@^5.6.1", "@ethersproject/constants@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.7.0.tgz#df80a9705a7e08984161f09014ea012d1c75295e" + integrity sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/contracts@5.6.2": version "5.6.2" resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.6.2.tgz#20b52e69ebc1b74274ff8e3d4e508de971c287bc" @@ -578,7 +657,7 @@ "@ethersproject/properties" "^5.6.0" "@ethersproject/transactions" "^5.6.2" -"@ethersproject/hash@5.6.1", "@ethersproject/hash@^5.6.1": +"@ethersproject/hash@5.6.1": version "5.6.1" resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.6.1.tgz#224572ea4de257f05b4abf8ae58b03a67e99b0f4" integrity sha512-L1xAHurbaxG8VVul4ankNX5HgQ8PNCTrnVXEiFnE9xoRnaUcgfD12tZINtDinSllxPLCtGwguQxJ5E6keE84pA== @@ -592,7 +671,22 @@ "@ethersproject/properties" "^5.6.0" "@ethersproject/strings" "^5.6.1" -"@ethersproject/hdnode@5.6.2", "@ethersproject/hdnode@^5.6.2": +"@ethersproject/hash@^5.6.1", "@ethersproject/hash@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.7.0.tgz#eb7aca84a588508369562e16e514b539ba5240a7" + integrity sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g== + dependencies: + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/base64" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@ethersproject/hdnode@5.6.2": version "5.6.2" resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.6.2.tgz#26f3c83a3e8f1b7985c15d1db50dc2903418b2d2" integrity sha512-tERxW8Ccf9CxW2db3WsN01Qao3wFeRsfYY9TCuhmG0xNpl2IO8wgXU3HtWIZ49gUWPggRy4Yg5axU0ACaEKf1Q== @@ -610,7 +704,25 @@ "@ethersproject/transactions" "^5.6.2" "@ethersproject/wordlists" "^5.6.1" -"@ethersproject/json-wallets@5.6.1", "@ethersproject/json-wallets@^5.6.1": +"@ethersproject/hdnode@^5.6.2", "@ethersproject/hdnode@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.7.0.tgz#e627ddc6b466bc77aebf1a6b9e47405ca5aef9cf" + integrity sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg== + dependencies: + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/basex" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/pbkdf2" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" + "@ethersproject/signing-key" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/wordlists" "^5.7.0" + +"@ethersproject/json-wallets@5.6.1": version "5.6.1" resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.6.1.tgz#3f06ba555c9c0d7da46756a12ac53483fe18dd91" integrity sha512-KfyJ6Zwz3kGeX25nLihPwZYlDqamO6pfGKNnVMWWfEVVp42lTfCZVXXy5Ie8IZTN0HKwAngpIPi7gk4IJzgmqQ== @@ -629,7 +741,26 @@ aes-js "3.0.0" scrypt-js "3.0.1" -"@ethersproject/keccak256@5.6.1", "@ethersproject/keccak256@^5.6.1": +"@ethersproject/json-wallets@^5.6.1": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz#5e3355287b548c32b368d91014919ebebddd5360" + integrity sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g== + dependencies: + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/hdnode" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/pbkdf2" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/random" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + aes-js "3.0.0" + scrypt-js "3.0.1" + +"@ethersproject/keccak256@5.6.1": version "5.6.1" resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.6.1.tgz#b867167c9b50ba1b1a92bccdd4f2d6bd168a91cc" integrity sha512-bB7DQHCTRDooZZdL3lk9wpL0+XuG3XLGHLh3cePnybsO3V0rdCAOQGpn/0R3aODmnTOOkCATJiD2hnL+5bwthA== @@ -637,19 +768,39 @@ "@ethersproject/bytes" "^5.6.1" js-sha3 "0.8.0" -"@ethersproject/logger@5.6.0", "@ethersproject/logger@^5.6.0": +"@ethersproject/keccak256@^5.6.1", "@ethersproject/keccak256@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.7.0.tgz#3186350c6e1cd6aba7940384ec7d6d9db01f335a" + integrity sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg== + dependencies: + "@ethersproject/bytes" "^5.7.0" + js-sha3 "0.8.0" + +"@ethersproject/logger@5.6.0": version "5.6.0" resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.6.0.tgz#d7db1bfcc22fd2e4ab574cba0bb6ad779a9a3e7a" integrity sha512-BiBWllUROH9w+P21RzoxJKzqoqpkyM1pRnEKG69bulE9TSQD8SAIvTQqIMZmmCO8pUNkgLP1wndX1gKghSpBmg== -"@ethersproject/networks@5.6.4", "@ethersproject/networks@^5.6.3": +"@ethersproject/logger@^5.6.0", "@ethersproject/logger@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.7.0.tgz#6ce9ae168e74fecf287be17062b590852c311892" + integrity sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig== + +"@ethersproject/networks@5.6.4": version "5.6.4" resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.6.4.tgz#51296d8fec59e9627554f5a8a9c7791248c8dc07" integrity sha512-KShHeHPahHI2UlWdtDMn2lJETcbtaJge4k7XSjDR9h79QTd6yQJmv6Cp2ZA4JdqWnhszAOLSuJEd9C0PRw7hSQ== dependencies: "@ethersproject/logger" "^5.6.0" -"@ethersproject/pbkdf2@5.6.1", "@ethersproject/pbkdf2@^5.6.1": +"@ethersproject/networks@^5.6.3", "@ethersproject/networks@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.7.0.tgz#df72a392f1a63a57f87210515695a31a245845ad" + integrity sha512-MG6oHSQHd4ebvJrleEQQ4HhVu8Ichr0RDYEfHzsVAVjHNM+w36x9wp9r+hf1JstMXtseXDtkiVoARAG6M959AA== + dependencies: + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/pbkdf2@5.6.1": version "5.6.1" resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.6.1.tgz#f462fe320b22c0d6b1d72a9920a3963b09eb82d1" integrity sha512-k4gRQ+D93zDRPNUfmduNKq065uadC2YjMP/CqwwX5qG6R05f47boq6pLZtV/RnC4NZAYOPH1Cyo54q0c9sshRQ== @@ -657,13 +808,28 @@ "@ethersproject/bytes" "^5.6.1" "@ethersproject/sha2" "^5.6.1" -"@ethersproject/properties@5.6.0", "@ethersproject/properties@^5.6.0": +"@ethersproject/pbkdf2@^5.6.1", "@ethersproject/pbkdf2@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz#d2267d0a1f6e123f3771007338c47cccd83d3102" + integrity sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" + +"@ethersproject/properties@5.6.0": version "5.6.0" resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.6.0.tgz#38904651713bc6bdd5bdd1b0a4287ecda920fa04" integrity sha512-szoOkHskajKePTJSZ46uHUWWkbv7TzP2ypdEK6jGMqJaEt2sb0jCgfBo0gH0m2HBpRixMuJ6TBRaQCF7a9DoCg== dependencies: "@ethersproject/logger" "^5.6.0" +"@ethersproject/properties@^5.6.0", "@ethersproject/properties@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.7.0.tgz#a6e12cb0439b878aaf470f1902a176033067ed30" + integrity sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw== + dependencies: + "@ethersproject/logger" "^5.7.0" + "@ethersproject/providers@5.6.8": version "5.6.8" resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.6.8.tgz#22e6c57be215ba5545d3a46cf759d265bb4e879d" @@ -690,7 +856,7 @@ bech32 "1.1.4" ws "7.4.6" -"@ethersproject/random@5.6.1", "@ethersproject/random@^5.6.1": +"@ethersproject/random@5.6.1": version "5.6.1" resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.6.1.tgz#66915943981bcd3e11bbd43733f5c3ba5a790255" integrity sha512-/wtPNHwbmng+5yi3fkipA8YBT59DdkGRoC2vWk09Dci/q5DlgnMkhIycjHlavrvrjJBkFjO/ueLyT+aUDfc4lA== @@ -698,7 +864,15 @@ "@ethersproject/bytes" "^5.6.1" "@ethersproject/logger" "^5.6.0" -"@ethersproject/rlp@5.6.1", "@ethersproject/rlp@^5.6.1": +"@ethersproject/random@^5.6.1", "@ethersproject/random@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.7.0.tgz#af19dcbc2484aae078bb03656ec05df66253280c" + integrity sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/rlp@5.6.1": version "5.6.1" resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.6.1.tgz#df8311e6f9f24dcb03d59a2bac457a28a4fe2bd8" integrity sha512-uYjmcZx+DKlFUk7a5/W9aQVaoEC7+1MOBgNtvNg13+RnuUwT4F0zTovC0tmay5SmRslb29V1B7Y5KCri46WhuQ== @@ -706,7 +880,15 @@ "@ethersproject/bytes" "^5.6.1" "@ethersproject/logger" "^5.6.0" -"@ethersproject/sha2@5.6.1", "@ethersproject/sha2@^5.6.1": +"@ethersproject/rlp@^5.6.1", "@ethersproject/rlp@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.7.0.tgz#de39e4d5918b9d74d46de93af80b7685a9c21304" + integrity sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/sha2@5.6.1": version "5.6.1" resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.6.1.tgz#211f14d3f5da5301c8972a8827770b6fd3e51656" integrity sha512-5K2GyqcW7G4Yo3uenHegbXRPDgARpWUiXc6RiF7b6i/HXUoWlb7uCARh7BAHg7/qT/Q5ydofNwiZcim9qpjB6g== @@ -715,7 +897,16 @@ "@ethersproject/logger" "^5.6.0" hash.js "1.1.7" -"@ethersproject/signing-key@5.6.2", "@ethersproject/signing-key@^5.6.2": +"@ethersproject/sha2@^5.6.1", "@ethersproject/sha2@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.7.0.tgz#9a5f7a7824ef784f7f7680984e593a800480c9fb" + integrity sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + hash.js "1.1.7" + +"@ethersproject/signing-key@5.6.2": version "5.6.2" resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.6.2.tgz#8a51b111e4d62e5a62aee1da1e088d12de0614a3" integrity sha512-jVbu0RuP7EFpw82vHcL+GP35+KaNruVAZM90GxgQnGqB6crhBqW/ozBfFvdeImtmb4qPko0uxXjn8l9jpn0cwQ== @@ -727,6 +918,18 @@ elliptic "6.5.4" hash.js "1.1.7" +"@ethersproject/signing-key@^5.6.2", "@ethersproject/signing-key@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.7.0.tgz#06b2df39411b00bc57c7c09b01d1e41cf1b16ab3" + integrity sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + bn.js "^5.2.1" + elliptic "6.5.4" + hash.js "1.1.7" + "@ethersproject/solidity@5.6.1": version "5.6.1" resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.6.1.tgz#5845e71182c66d32e6ec5eefd041fca091a473e2" @@ -739,7 +942,7 @@ "@ethersproject/sha2" "^5.6.1" "@ethersproject/strings" "^5.6.1" -"@ethersproject/strings@5.6.1", "@ethersproject/strings@^5.6.1": +"@ethersproject/strings@5.6.1": version "5.6.1" resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.6.1.tgz#dbc1b7f901db822b5cafd4ebf01ca93c373f8952" integrity sha512-2X1Lgk6Jyfg26MUnsHiT456U9ijxKUybz8IM1Vih+NJxYtXhmvKBcHOmvGqpFSVJ0nQ4ZCoIViR8XlRw1v/+Cw== @@ -748,7 +951,16 @@ "@ethersproject/constants" "^5.6.1" "@ethersproject/logger" "^5.6.0" -"@ethersproject/transactions@5.6.2", "@ethersproject/transactions@^5.6.2": +"@ethersproject/strings@^5.6.1", "@ethersproject/strings@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.7.0.tgz#54c9d2a7c57ae8f1205c88a9d3a56471e14d5ed2" + integrity sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/transactions@5.6.2": version "5.6.2" resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.6.2.tgz#793a774c01ced9fe7073985bb95a4b4e57a6370b" integrity sha512-BuV63IRPHmJvthNkkt9G70Ullx6AcM+SDc+a8Aw/8Yew6YwT51TcBKEp1P4oOQ/bP25I18JJr7rcFRgFtU9B2Q== @@ -763,6 +975,21 @@ "@ethersproject/rlp" "^5.6.1" "@ethersproject/signing-key" "^5.6.2" +"@ethersproject/transactions@^5.6.2", "@ethersproject/transactions@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.7.0.tgz#91318fc24063e057885a6af13fdb703e1f993d3b" + integrity sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ== + dependencies: + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/rlp" "^5.7.0" + "@ethersproject/signing-key" "^5.7.0" + "@ethersproject/units@5.6.1": version "5.6.1" resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.6.1.tgz#ecc590d16d37c8f9ef4e89e2005bda7ddc6a4e6f" @@ -793,7 +1020,7 @@ "@ethersproject/transactions" "^5.6.2" "@ethersproject/wordlists" "^5.6.1" -"@ethersproject/web@5.6.1", "@ethersproject/web@^5.6.1": +"@ethersproject/web@5.6.1": version "5.6.1" resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.6.1.tgz#6e2bd3ebadd033e6fe57d072db2b69ad2c9bdf5d" integrity sha512-/vSyzaQlNXkO1WV+RneYKqCJwualcUdx/Z3gseVovZP0wIlOFcCE1hkRhKBH8ImKbGQbMl9EAAyJFrJu7V0aqA== @@ -804,7 +1031,18 @@ "@ethersproject/properties" "^5.6.0" "@ethersproject/strings" "^5.6.1" -"@ethersproject/wordlists@5.6.1", "@ethersproject/wordlists@^5.6.1": +"@ethersproject/web@^5.6.1", "@ethersproject/web@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.7.0.tgz#40850c05260edad8b54827923bbad23d96aac0bc" + integrity sha512-ApHcbbj+muRASVDSCl/tgxaH2LBkRMEYfLOLVa0COipx0+nlu0QKet7U2lEg0vdkh8XRSLf2nd1f1Uk9SrVSGA== + dependencies: + "@ethersproject/base64" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@ethersproject/wordlists@5.6.1": version "5.6.1" resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.6.1.tgz#1e78e2740a8a21e9e99947e47979d72e130aeda1" integrity sha512-wiPRgBpNbNwCQFoCr8bcWO8o5I810cqO6mkdtKfLKFlLxeCWcnzDi4Alu8iyNzlhYuS9npCwivMbRWF19dyblw== @@ -815,16 +1053,29 @@ "@ethersproject/properties" "^5.6.0" "@ethersproject/strings" "^5.6.1" +"@ethersproject/wordlists@^5.6.1", "@ethersproject/wordlists@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.7.0.tgz#8fb2c07185d68c3e09eb3bfd6e779ba2774627f5" + integrity sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + "@gearbox-protocol/eslint-config@^1.4.1": - version "1.4.1" - resolved "https://registry.yarnpkg.com/@gearbox-protocol/eslint-config/-/eslint-config-1.4.1.tgz#1289239d51503e1065bf1b814ec76dabd1551c84" - integrity sha512-7uUzRc/uS0eZa/lGI44YfQYCuigCQRa6b/zC3+Xzx8LH25qOEsG6O9SnXKouZz7TPe/UMss8Z9zFi1qbZ6TkHQ== + version "1.5.7" + resolved "https://registry.yarnpkg.com/@gearbox-protocol/eslint-config/-/eslint-config-1.5.7.tgz#3e2982b189df35f265760cf7a42830d4a9739f79" + integrity sha512-jw/EANWNk0ZXGdiS8f9ukDQbWga+5tWQy/zbHBcWYmozWj4jkD9YUgtbF1n4UbAEozzKiazfRhkh4YhgEM4foQ== dependencies: "@typescript-eslint/eslint-plugin" "^5.33.0" "@typescript-eslint/parser" "^5.33.0" eslint-config-alloy "^4.6.2" eslint-import-resolver-typescript "^3.4.1" eslint-plugin-import "^2.26.0" + eslint-plugin-react "^7.30.1" + eslint-plugin-react-hooks "^4.6.0" eslint-plugin-simple-import-sort "^7.0.0" eslint-plugin-unused-imports "^2.0.0" @@ -1101,7 +1352,7 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" -"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.13": +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.13", "@jridgewell/trace-mapping@^0.3.9": version "0.3.15" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz#aba35c48a38d3fd84b37e66c9c0423f9744f9774" integrity sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g== @@ -1109,14 +1360,6 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" -"@jridgewell/trace-mapping@^0.3.9": - version "0.3.14" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz#b231a081d8f66796e475ad588a1ef473112701ed" - integrity sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ== - dependencies: - "@jridgewell/resolve-uri" "^3.0.3" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" @@ -1139,9 +1382,9 @@ fastq "^1.6.0" "@pkgr/utils@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@pkgr/utils/-/utils-2.3.0.tgz#3b8491f112a80839450498816767eb03b7db6139" - integrity sha512-7dIJ9CRVzBnqyEl7diUHPUFJf/oty2SeoVzcMocc5PeOUDK9KGzvgIBjGRRzzlRDaOjh3ADwH0WeibQvi3ls2Q== + version "2.3.1" + resolved "https://registry.yarnpkg.com/@pkgr/utils/-/utils-2.3.1.tgz#0a9b06ffddee364d6642b3cd562ca76f55b34a03" + integrity sha512-wfzX8kc1PMyUILA+1Z/EqoE4UCXGy0iRGMhPwdfae1+f0OXlLqCk+By+aMzgJBzR9AzS4CDizioG6Ss1gvAFJw== dependencies: cross-spawn "^7.0.3" is-glob "^4.0.3" @@ -1189,6 +1432,14 @@ resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.3.tgz#472eaab5f15c1ffdd7f8628bd4c4f753995ec79e" integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ== +"@typechain/ethers-v5@10.0.0": + version "10.0.0" + resolved "https://registry.yarnpkg.com/@typechain/ethers-v5/-/ethers-v5-10.0.0.tgz#1b6e292d2ed9afb0d2f7a4674cc199bb95bad714" + integrity sha512-Kot7fwAqnH96ZbI8xrRgj5Kpv9yCEdjo7mxRqrH7bYpEgijT5MmuOo8IVsdhOu7Uog4ONg7k/d5UdbAtTKUgsA== + dependencies: + lodash "^4.17.15" + ts-essentials "^7.0.1" + "@types/babel__core@^7.1.14": version "7.1.19" resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.19.tgz#7b497495b7d1b4812bdb9d02804d0576f43ee460" @@ -1222,6 +1473,14 @@ dependencies: "@babel/types" "^7.3.0" +"@types/glob@*": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb" + integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA== + dependencies: + "@types/minimatch" "*" + "@types/node" "*" + "@types/graceful-fs@^4.1.3": version "4.1.5" resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15" @@ -1249,9 +1508,9 @@ "@types/istanbul-lib-report" "*" "@types/jest@^28.1.7": - version "28.1.7" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-28.1.7.tgz#a680c5d05b69634c2d54a63cb106d7fb1adaba16" - integrity sha512-acDN4VHD40V24tgu0iC44jchXavRNVFXQ/E6Z5XNsswgoSO/4NgsXoEYmPUGookKldlZQyIpmrEXsHI9cA3ZTA== + version "28.1.8" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-28.1.8.tgz#6936409f3c9724ea431efd412ea0238a0f03b09b" + integrity sha512-8TJkV++s7B6XqnDrzR1m/TT0A0h948Pnl/097veySPN67VRAgQ4gZ7n2KfJo2rVq6njQjdxU3GCCyDvAeuHoiw== dependencies: expect "^28.0.0" pretty-format "^28.0.0" @@ -1266,25 +1525,20 @@ resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== +"@types/minimatch@*": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-5.1.0.tgz#c3018161691376002f8a22ebb87f341e0dba3219" + integrity sha512-0RJHq5FqDWo17kdHe+SMDJLfxmLaqHbWnqZ6gNKzDvStUlrmx/eKIY17+ifLS1yybo7X86aUshQMlittDOVNnw== + "@types/minimist@^1.2.0": version "1.2.2" resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.2.tgz#ee771e2ba4b3dc5b372935d549fd9617bf345b8c" integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ== -"@types/node@*": - version "18.6.4" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.6.4.tgz#fd26723a8a3f8f46729812a7f9b4fc2d1608ed39" - integrity sha512-I4BD3L+6AWiUobfxZ49DlU43gtI+FTHSv9pE2Zekg6KjMpre4ByusaljW3vYSLJrvQ1ck1hUaeVu8HVlY3vzHg== - -"@types/node@>=12": - version "18.7.11" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.7.11.tgz#486e72cfccde88da24e1f23ff1b7d8bfb64e6250" - integrity sha512-KZhFpSLlmK/sdocfSAjqPETTMd0ug6HIMIAwkwUpU79olnZdQtMxpQP+G1wDzCH7na+FltSIhbaZuKdwZ8RDrw== - -"@types/node@^18.7.6": - version "18.7.6" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.7.6.tgz#31743bc5772b6ac223845e18c3fc26f042713c83" - integrity sha512-EdxgKRXgYsNITy5mjjXjVE/CS8YENSdhiagGrLqjG0pvA2owgJ6i4l7wy/PFZGC0B1/H20lWKN7ONVDNYDZm7A== +"@types/node@*", "@types/node@>=12", "@types/node@^18.7.6": + version "18.7.13" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.7.13.tgz#23e6c5168333480d454243378b69e861ab5c011a" + integrity sha512-46yIhxSe5xEaJZXWdIBP7GU4HDTG8/eo0qd9atdiL+lFpA03y8KS+lkTN834TWJj5767GbWv4n/P6efyTFt1Dw== "@types/normalize-package-data@^2.4.0": version "2.4.1" @@ -1296,11 +1550,19 @@ resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== -"@types/prettier@^2.1.5": +"@types/prettier@^2.1.1", "@types/prettier@^2.1.5": version "2.7.0" resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.0.tgz#ea03e9f0376a4446f44797ca19d9c46c36e352dc" integrity sha512-RI1L7N4JnW5gQw2spvL7Sllfuf1SaHdrZpCHiBlCXjIlufi1SMNnbu2teze3/QE67Fg2tBlH7W+mi4hVNk4p0A== +"@types/rimraf@^3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@types/rimraf/-/rimraf-3.0.2.tgz#a63d175b331748e5220ad48c901d7bbf1f44eef8" + integrity sha512-F3OznnSLAUxFrCEu/L5PY8+ny8DtcFRjx7fZZ9bycvXRi3KPTRS9HOitGZwvPg0juRhXFWIeKX58cnX5YqLohQ== + dependencies: + "@types/glob" "*" + "@types/node" "*" + "@types/stack-utils@^2.0.0": version "2.0.1" resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" @@ -1319,13 +1581,13 @@ "@types/yargs-parser" "*" "@typescript-eslint/eslint-plugin@^5.33.0": - version "5.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.33.0.tgz#059798888720ec52ffa96c5f868e31a8f70fa3ec" - integrity sha512-jHvZNSW2WZ31OPJ3enhLrEKvAZNyAFWZ6rx9tUwaessTc4sx9KmgMNhVcqVAl1ETnT5rU5fpXTLmY9YvC1DCNg== + version "5.35.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.35.1.tgz#0d822bfea7469904dfc1bb8f13cabd362b967c93" + integrity sha512-RBZZXZlI4XCY4Wzgy64vB+0slT9+yAPQRjj/HSaRwUot33xbDjF1oN9BLwOLTewoOI0jothIltZRe9uJCHf8gg== dependencies: - "@typescript-eslint/scope-manager" "5.33.0" - "@typescript-eslint/type-utils" "5.33.0" - "@typescript-eslint/utils" "5.33.0" + "@typescript-eslint/scope-manager" "5.35.1" + "@typescript-eslint/type-utils" "5.35.1" + "@typescript-eslint/utils" "5.35.1" debug "^4.3.4" functional-red-black-tree "^1.0.1" ignore "^5.2.0" @@ -1334,68 +1596,68 @@ tsutils "^3.21.0" "@typescript-eslint/parser@^5.33.0": - version "5.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.33.0.tgz#26ec3235b74f0667414613727cb98f9b69dc5383" - integrity sha512-cgM5cJrWmrDV2KpvlcSkelTBASAs1mgqq+IUGKJvFxWrapHpaRy5EXPQz9YaKF3nZ8KY18ILTiVpUtbIac86/w== + version "5.35.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.35.1.tgz#bf2ee2ebeaa0a0567213748243fb4eec2857f04f" + integrity sha512-XL2TBTSrh3yWAsMYpKseBYTVpvudNf69rPOWXWVBI08My2JVT5jR66eTt4IgQFHA/giiKJW5dUD4x/ZviCKyGg== dependencies: - "@typescript-eslint/scope-manager" "5.33.0" - "@typescript-eslint/types" "5.33.0" - "@typescript-eslint/typescript-estree" "5.33.0" + "@typescript-eslint/scope-manager" "5.35.1" + "@typescript-eslint/types" "5.35.1" + "@typescript-eslint/typescript-estree" "5.35.1" debug "^4.3.4" -"@typescript-eslint/scope-manager@5.33.0": - version "5.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.33.0.tgz#509d7fa540a2c58f66bdcfcf278a3fa79002e18d" - integrity sha512-/Jta8yMNpXYpRDl8EwF/M8It2A9sFJTubDo0ATZefGXmOqlaBffEw0ZbkbQ7TNDK6q55NPHFshGBPAZvZkE8Pw== +"@typescript-eslint/scope-manager@5.35.1": + version "5.35.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.35.1.tgz#ccb69d54b7fd0f2d0226a11a75a8f311f525ff9e" + integrity sha512-kCYRSAzIW9ByEIzmzGHE50NGAvAP3wFTaZevgWva7GpquDyFPFcmvVkFJGWJJktg/hLwmys/FZwqM9EKr2u24Q== dependencies: - "@typescript-eslint/types" "5.33.0" - "@typescript-eslint/visitor-keys" "5.33.0" + "@typescript-eslint/types" "5.35.1" + "@typescript-eslint/visitor-keys" "5.35.1" -"@typescript-eslint/type-utils@5.33.0": - version "5.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.33.0.tgz#92ad1fba973c078d23767ce2d8d5a601baaa9338" - integrity sha512-2zB8uEn7hEH2pBeyk3NpzX1p3lF9dKrEbnXq1F7YkpZ6hlyqb2yZujqgRGqXgRBTHWIUG3NGx/WeZk224UKlIA== +"@typescript-eslint/type-utils@5.35.1": + version "5.35.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.35.1.tgz#d50903b56758c5c8fc3be52b3be40569f27f9c4a" + integrity sha512-8xT8ljvo43Mp7BiTn1vxLXkjpw8wS4oAc00hMSB4L1/jIiYbjjnc3Qp2GAUOG/v8zsNCd1qwcqfCQ0BuishHkw== dependencies: - "@typescript-eslint/utils" "5.33.0" + "@typescript-eslint/utils" "5.35.1" debug "^4.3.4" tsutils "^3.21.0" -"@typescript-eslint/types@5.33.0": - version "5.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.33.0.tgz#d41c584831805554b063791338b0220b613a275b" - integrity sha512-nIMt96JngB4MYFYXpZ/3ZNU4GWPNdBbcB5w2rDOCpXOVUkhtNlG2mmm8uXhubhidRZdwMaMBap7Uk8SZMU/ppw== +"@typescript-eslint/types@5.35.1": + version "5.35.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.35.1.tgz#af355fe52a0cc88301e889bc4ada72f279b63d61" + integrity sha512-FDaujtsH07VHzG0gQ6NDkVVhi1+rhq0qEvzHdJAQjysN+LHDCKDKCBRlZFFE0ec0jKxiv0hN63SNfExy0KrbQQ== -"@typescript-eslint/typescript-estree@5.33.0": - version "5.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.33.0.tgz#02d9c9ade6f4897c09e3508c27de53ad6bfa54cf" - integrity sha512-tqq3MRLlggkJKJUrzM6wltk8NckKyyorCSGMq4eVkyL5sDYzJJcMgZATqmF8fLdsWrW7OjjIZ1m9v81vKcaqwQ== +"@typescript-eslint/typescript-estree@5.35.1": + version "5.35.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.35.1.tgz#db878a39a0dbdc9bb133f11cdad451770bfba211" + integrity sha512-JUqE1+VRTGyoXlDWWjm6MdfpBYVq+hixytrv1oyjYIBEOZhBCwtpp5ZSvBt4wIA1MKWlnaC2UXl2XmYGC3BoQA== dependencies: - "@typescript-eslint/types" "5.33.0" - "@typescript-eslint/visitor-keys" "5.33.0" + "@typescript-eslint/types" "5.35.1" + "@typescript-eslint/visitor-keys" "5.35.1" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/utils@5.33.0": - version "5.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.33.0.tgz#46797461ce3146e21c095d79518cc0f8ec574038" - integrity sha512-JxOAnXt9oZjXLIiXb5ZIcZXiwVHCkqZgof0O8KPgz7C7y0HS42gi75PdPlqh1Tf109M0fyUw45Ao6JLo7S5AHw== +"@typescript-eslint/utils@5.35.1": + version "5.35.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.35.1.tgz#ae1399afbfd6aa7d0ed1b7d941e9758d950250eb" + integrity sha512-v6F8JNXgeBWI4pzZn36hT2HXXzoBBBJuOYvoQiaQaEEjdi5STzux3Yj8v7ODIpx36i/5s8TdzuQ54TPc5AITQQ== dependencies: "@types/json-schema" "^7.0.9" - "@typescript-eslint/scope-manager" "5.33.0" - "@typescript-eslint/types" "5.33.0" - "@typescript-eslint/typescript-estree" "5.33.0" + "@typescript-eslint/scope-manager" "5.35.1" + "@typescript-eslint/types" "5.35.1" + "@typescript-eslint/typescript-estree" "5.35.1" eslint-scope "^5.1.1" eslint-utils "^3.0.0" -"@typescript-eslint/visitor-keys@5.33.0": - version "5.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.33.0.tgz#fbcbb074e460c11046e067bc3384b5d66b555484" - integrity sha512-/XsqCzD4t+Y9p5wd9HZiptuGKBlaZO5showwqODii5C0nZawxWLF+Q6k5wYHBrQv96h6GYKyqqMHCSTqta8Kiw== +"@typescript-eslint/visitor-keys@5.35.1": + version "5.35.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.35.1.tgz#285e9e34aed7c876f16ff646a3984010035898e6" + integrity sha512-cEB1DvBVo1bxbW/S5axbGPE6b7FIMAbo3w+AGq6zNDA7+NYJOIkKj/sInfTv4edxd4PxJSgdN4t6/pbvgA+n5g== dependencies: - "@typescript-eslint/types" "5.33.0" + "@typescript-eslint/types" "5.35.1" eslint-visitor-keys "^3.3.0" JSONStream@^1.0.4: @@ -1520,12 +1782,22 @@ argparse@^2.0.1: resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== +array-back@^3.0.1, array-back@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/array-back/-/array-back-3.1.0.tgz#b8859d7a508871c9a7b2cf42f99428f65e96bfb0" + integrity sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q== + +array-back@^4.0.1, array-back@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/array-back/-/array-back-4.0.2.tgz#8004e999a6274586beeb27342168652fdb89fa1e" + integrity sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg== + array-ify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" integrity sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng== -array-includes@^3.1.4: +array-includes@^3.1.4, array-includes@^3.1.5: version "3.1.5" resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.5.tgz#2c320010db8d31031fd2a5f6b3bbd4b1aad31bdb" integrity sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ== @@ -1551,6 +1823,16 @@ array.prototype.flat@^1.2.5: es-abstract "^1.19.2" es-shim-unscopables "^1.0.0" +array.prototype.flatmap@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.0.tgz#a7e8ed4225f4788a70cd910abcf0791e76a5534f" + integrity sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.2" + es-shim-unscopables "^1.0.0" + arrify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" @@ -1729,11 +2011,11 @@ camelcase@^6.2.0: integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== caniuse-lite@^1.0.30001370: - version "1.0.30001374" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001374.tgz#3dab138e3f5485ba2e74bd13eca7fe1037ce6f57" - integrity sha512-mWvzatRx3w+j5wx/mpFN5v5twlPrabG8NqX2c6e45LCpymdoGqNvRkRutFUqpRTXKFQFNQJasvK0YT7suW6/Hw== + version "1.0.30001383" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001383.tgz#aecf317ccd940690725ae3ae4f28293c5fb8050e" + integrity sha512-swMpEoTp5vDoGBZsYZX7L7nXHe6dsHxi9o6/LKf/f0LukVtnrxly5GVb/fWdCDTqi/yw6Km6tiJ0pmBacm0gbg== -chalk@^2.0.0: +chalk@^2.0.0, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -1848,6 +2130,26 @@ combined-stream@^1.0.8: dependencies: delayed-stream "~1.0.0" +command-line-args@^5.1.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/command-line-args/-/command-line-args-5.2.1.tgz#c44c32e437a57d7c51157696893c5909e9cec42e" + integrity sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg== + dependencies: + array-back "^3.1.0" + find-replace "^3.0.0" + lodash.camelcase "^4.3.0" + typical "^4.0.0" + +command-line-usage@^6.1.0: + version "6.1.3" + resolved "https://registry.yarnpkg.com/command-line-usage/-/command-line-usage-6.1.3.tgz#428fa5acde6a838779dfa30e44686f4b6761d957" + integrity sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw== + dependencies: + array-back "^4.0.2" + chalk "^2.4.2" + table-layout "^1.0.2" + typical "^5.2.0" + commander@^9.3.0: version "9.4.0" resolved "https://registry.yarnpkg.com/commander/-/commander-9.4.0.tgz#bc4a40918fefe52e22450c111ecd6b7acce6f11c" @@ -1954,7 +2256,7 @@ debug@^3.2.7: dependencies: ms "^2.1.1" -debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: +debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -1984,6 +2286,11 @@ dedent@^0.7.0: resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== +deep-extend@~0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + deep-is@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" @@ -2066,9 +2373,9 @@ eastasianwidth@^0.2.0: integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== electron-to-chromium@^1.4.202: - version "1.4.211" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.211.tgz#afaa8b58313807501312d598d99b953568d60f91" - integrity sha512-BZSbMpyFQU0KBJ1JG26XGeFI3i4op+qOYGxftmZXFZoHkhLgsSv4DHDJfl8ogII3hIuzGt51PaZ195OVu0yJ9A== + version "1.4.231" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.231.tgz#ae6de219c20aa690bc3d217ff151b208a9bd8ed6" + integrity sha512-E8WsUC60chToZUfxvVUXBb1U/mR/Df3GFX+mO3edtQnRTUt6L2XgpqBVWcGD/xrzQdINL1g/CEBPPn0YJ86Y6Q== elliptic@6.5.4: version "6.5.4" @@ -2192,17 +2499,17 @@ eslint-import-resolver-node@^0.3.6: resolve "^1.20.0" eslint-import-resolver-typescript@^3.4.1: - version "3.4.1" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.4.1.tgz#072e5f7b4bf5d62d32d0b3a071fe551b45d15454" - integrity sha512-rcD4V2nnxk76JF6nuLcclGpya18KLhr/lwpl5xFXrVWZtdRSepfCGHk/oFn9HNstWX317Nuo/E3Z1vymPyPhlQ== + version "3.5.0" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.5.0.tgz#490ba48cafc5a2fb209bbc7e360defb4c292ed59" + integrity sha512-DEfpfuk+O/T5e9HBZOxocmwMuUGkvQQd5WRiMJF9kKNT9amByqOyGlWoAZAQiv0SZSy4GMtG1clmnvQA/RzA0A== dependencies: debug "^4.3.4" enhanced-resolve "^5.10.0" get-tsconfig "^4.2.0" globby "^13.1.2" - is-core-module "^2.9.0" + is-core-module "^2.10.0" is-glob "^4.0.3" - synckit "^0.8.1" + synckit "^0.8.3" eslint-module-utils@^2.7.3: version "2.7.4" @@ -2230,6 +2537,31 @@ eslint-plugin-import@^2.26.0: resolve "^1.22.0" tsconfig-paths "^3.14.1" +eslint-plugin-react-hooks@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3" + integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== + +eslint-plugin-react@^7.30.1: + version "7.31.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.31.0.tgz#fd3f81c9db5971095b3521ede22781afd37442b0" + integrity sha512-BWriBttYYCnfb4RO9SB91Og8uA9CPcBMl5UlCOCtuYW1UjhN3QypzEcEHky4ZIRZDKjbO2Blh9BjP8E7W/b1SA== + dependencies: + array-includes "^3.1.5" + array.prototype.flatmap "^1.3.0" + doctrine "^2.1.0" + estraverse "^5.3.0" + jsx-ast-utils "^2.4.1 || ^3.0.0" + minimatch "^3.1.2" + object.entries "^1.1.5" + object.fromentries "^2.0.5" + object.hasown "^1.1.1" + object.values "^1.1.5" + prop-types "^15.8.1" + resolve "^2.0.0-next.3" + semver "^6.3.0" + string.prototype.matchall "^4.0.7" + eslint-plugin-simple-import-sort@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-7.0.0.tgz#a1dad262f46d2184a90095a60c66fef74727f0f8" @@ -2358,7 +2690,7 @@ estraverse@^4.1.1: resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== -estraverse@^5.1.0, estraverse@^5.2.0: +estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== @@ -2504,6 +2836,13 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" +find-replace@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-replace/-/find-replace-3.0.0.tgz#3e7e23d3b05167a76f770c9fbd5258b0def68c38" + integrity sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ== + dependencies: + array-back "^3.0.1" + find-up@^4.0.0, find-up@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" @@ -2529,9 +2868,9 @@ flat-cache@^3.0.4: rimraf "^3.0.2" flatted@^3.1.0: - version "3.2.6" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.6.tgz#022e9218c637f9f3fc9c35ab9c9193f05add60b2" - integrity sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ== + version "3.2.7" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" + integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== follow-redirects@^1.14.9: version "1.15.1" @@ -2556,6 +2895,15 @@ fs-extra@^10.0.0: jsonfile "^6.0.1" universalify "^2.0.0" +fs-extra@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" + integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" @@ -2658,6 +3006,18 @@ glob-parent@^6.0.1: dependencies: is-glob "^4.0.3" +glob@7.1.7: + version "7.1.7" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" + integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + glob@^7.1.3, glob@^7.1.4: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" @@ -2722,7 +3082,7 @@ globrex@^0.1.2: resolved "https://registry.yarnpkg.com/globrex/-/globrex-0.1.2.tgz#dd5d9ec826232730cd6793a5e33a9302985e6098" integrity sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg== -graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.9: +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.9: version "4.2.10" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== @@ -2910,7 +3270,7 @@ is-callable@^1.1.4, is-callable@^1.2.4: resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== -is-core-module@^2.5.0, is-core-module@^2.8.1, is-core-module@^2.9.0: +is-core-module@^2.10.0, is-core-module@^2.5.0, is-core-module@^2.8.1, is-core-module@^2.9.0: version "2.10.0" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.10.0.tgz#9012ede0a91c69587e647514e1d5277019e728ed" integrity sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg== @@ -3448,12 +3808,12 @@ jest@^28.1.3: import-local "^3.0.2" jest-cli "^28.1.3" -js-sha3@0.8.0: +js-sha3@0.8.0, js-sha3@^0.8.0: version "0.8.0" resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== -js-tokens@^4.0.0: +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== @@ -3510,6 +3870,13 @@ json5@^2.2.1: resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c" integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== + optionalDependencies: + graceful-fs "^4.1.6" + jsonfile@^6.0.1: version "6.1.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" @@ -3524,6 +3891,14 @@ jsonparse@^1.2.0: resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== +"jsx-ast-utils@^2.4.1 || ^3.0.0": + version "3.3.3" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz#76b3e6e6cece5c69d49a5792c3d01bd1a0cdc7ea" + integrity sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw== + dependencies: + array-includes "^3.1.5" + object.assign "^4.1.3" + kind-of@^6.0.3: version "6.0.3" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" @@ -3604,6 +3979,11 @@ locate-path@^6.0.0: dependencies: p-locate "^5.0.0" +lodash.camelcase@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" + integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== + lodash.merge@^4.6.2: version "4.6.2" resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" @@ -3624,6 +4004,13 @@ log-update@^4.0.0: slice-ansi "^4.0.0" wrap-ansi "^6.2.0" +loose-envify@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + lru-cache@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" @@ -3753,6 +4140,11 @@ minimist@^1.2.0, minimist@^1.2.6: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== +mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + moment@^2.29.4: version "2.29.4" resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108" @@ -3827,6 +4219,11 @@ npm-run-path@^5.1.0: dependencies: path-key "^4.0.0" +object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + object-inspect@^1.12.0, object-inspect@^1.12.2, object-inspect@^1.9.0: version "1.12.2" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" @@ -3837,16 +4234,42 @@ object-keys@^1.1.1: resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== -object.assign@^4.1.2: - version "4.1.3" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.3.tgz#d36b7700ddf0019abb6b1df1bb13f6445f79051f" - integrity sha512-ZFJnX3zltyjcYJL0RoCJuzb+11zWGyaDbjgxZbdV7rFEcHQuYxrZqhow67aA7xpes6LhojyFDaBKAFfogQrikA== +object.assign@^4.1.2, object.assign@^4.1.3: + version "4.1.4" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" + integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== dependencies: call-bind "^1.0.2" define-properties "^1.1.4" has-symbols "^1.0.3" object-keys "^1.1.1" +object.entries@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.5.tgz#e1acdd17c4de2cd96d5a08487cfb9db84d881861" + integrity sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.1" + +object.fromentries@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.5.tgz#7b37b205109c21e741e605727fe8b0ad5fa08251" + integrity sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.1" + +object.hasown@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.1.tgz#ad1eecc60d03f49460600430d97f23882cf592a3" + integrity sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A== + dependencies: + define-properties "^1.1.4" + es-abstract "^1.19.5" + object.values@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.5.tgz#959f63e3ce9ef108720333082131e4a459b716ac" @@ -4017,7 +4440,7 @@ prelude-ls@^1.2.1: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== -prettier@^2.7.1: +prettier@^2.3.1, prettier@^2.7.1: version "2.7.1" resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.7.1.tgz#e235806850d057f97bb08368a4f7d899f7760c64" integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g== @@ -4040,6 +4463,15 @@ prompts@^2.0.1: kleur "^3.0.3" sisteransi "^1.0.5" +prop-types@^15.8.1: + version "15.8.1" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" + integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== + dependencies: + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.13.1" + punycode@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" @@ -4060,6 +4492,11 @@ quick-lru@^4.0.1: resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== +react-is@^16.13.1: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + react-is@^18.0.0: version "18.2.0" resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" @@ -4101,7 +4538,12 @@ redent@^3.0.0: indent-string "^4.0.0" strip-indent "^3.0.0" -regexp.prototype.flags@^1.4.3: +reduce-flatten@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/reduce-flatten/-/reduce-flatten-2.0.0.tgz#734fd84e65f375d7ca4465c69798c25c9d10ae27" + integrity sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w== + +regexp.prototype.flags@^1.4.1, regexp.prototype.flags@^1.4.3: version "1.4.3" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== @@ -4163,6 +4605,15 @@ resolve@^1.10.0, resolve@^1.20.0, resolve@^1.22.0: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" +resolve@^2.0.0-next.3: + version "2.0.0-next.4" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.4.tgz#3d37a113d6429f496ec4752d2a2e58efb1fd4660" + integrity sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ== + dependencies: + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + restore-cursor@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" @@ -4372,6 +4823,11 @@ string-argv@^0.3.1: resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da" integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg== +string-format@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/string-format/-/string-format-2.0.0.tgz#f2df2e7097440d3b65de31b6d40d54c96eaffb9b" + integrity sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA== + string-length@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" @@ -4398,6 +4854,20 @@ string-width@^5.0.0: emoji-regex "^9.2.2" strip-ansi "^7.0.1" +string.prototype.matchall@^4.0.7: + version "4.0.7" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz#8e6ecb0d8a1fb1fda470d81acecb2dba057a481d" + integrity sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.1" + get-intrinsic "^1.1.1" + has-symbols "^1.0.3" + internal-slot "^1.0.3" + regexp.prototype.flags "^1.4.1" + side-channel "^1.0.4" + string.prototype.trimend@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz#914a65baaab25fbdd4ee291ca7dde57e869cb8d0" @@ -4503,7 +4973,7 @@ supports-preserve-symlinks-flag@^1.0.0: resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== -synckit@^0.8.1: +synckit@^0.8.3: version "0.8.3" resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.8.3.tgz#f36ca23fb7cbcf2b2b78c9e553ce6764dc6aa415" integrity sha512-1goXnDYNJlKwCM37f5MTzRwo+8SqutgVtg2d37D6YnHHT4E3IhQMRfKiGdfTZU7LBlI6T8inCQUxnMBFHrbqWw== @@ -4511,6 +4981,16 @@ synckit@^0.8.1: "@pkgr/utils" "^2.3.0" tslib "^2.4.0" +table-layout@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/table-layout/-/table-layout-1.0.2.tgz#c4038a1853b0136d63365a734b6931cf4fad4a04" + integrity sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A== + dependencies: + array-back "^4.0.1" + deep-extend "~0.6.0" + typical "^5.2.0" + wordwrapjs "^4.0.0" + tapable@^2.2.0: version "2.2.1" resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" @@ -4585,6 +5065,21 @@ trim-newlines@^3.0.0: resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== +ts-command-line-args@^2.2.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/ts-command-line-args/-/ts-command-line-args-2.3.1.tgz#b6188e42efc6cf7a8898e438a873fbb15505ddd6" + integrity sha512-FR3y7pLl/fuUNSmnPhfLArGqRrpojQgIEEOVzYx9DhTmfIN7C9RWSfpkJEF4J+Gk7aVx5pak8I7vWZsaN4N84g== + dependencies: + chalk "^4.1.0" + command-line-args "^5.1.1" + command-line-usage "^6.1.0" + string-format "^2.0.0" + +ts-essentials@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/ts-essentials/-/ts-essentials-7.0.3.tgz#686fd155a02133eedcc5362dc8b5056cde3e5a38" + integrity sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ== + ts-node@^10.8.1, ts-node@^10.9.1: version "10.9.1" resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" @@ -4625,9 +5120,9 @@ tslib@^2.1.0, tslib@^2.4.0: integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== tslog@^3.3.3: - version "3.3.3" - resolved "https://registry.yarnpkg.com/tslog/-/tslog-3.3.3.tgz#751a469e0d36841bd7e03676c27e53e7ffe9bc3d" - integrity sha512-lGrkndwpAohZ9ntQpT+xtUw5k9YFV1DjsksiWQlBSf82TTqsSAWBARPRD9juI730r8o3Awpkjp2aXy9k+6vr+g== + version "3.3.4" + resolved "https://registry.yarnpkg.com/tslog/-/tslog-3.3.4.tgz#083197a908c97b3b714a0576b9dac293f223f368" + integrity sha512-N0HHuHE0e/o75ALfkioFObknHR5dVchUad4F0XyFf3gXJYB++DewEzwGI/uIOM216E5a43ovnRNEeQIq9qgm4Q== dependencies: source-map-support "^0.5.21" @@ -4675,10 +5170,36 @@ type-fest@^0.8.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== +typechain@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/typechain/-/typechain-8.1.0.tgz#fc4902ce596519cb2ccfd012e4ddf92a9945b569" + integrity sha512-5jToLgKTjHdI1VKqs/K8BLYy42Sr3o8bV5ojh4MnR9ExHO83cyyUdw+7+vMJCpKXUiVUvARM4qmHTFuyaCMAZQ== + dependencies: + "@types/prettier" "^2.1.1" + debug "^4.3.1" + fs-extra "^7.0.0" + glob "7.1.7" + js-sha3 "^0.8.0" + lodash "^4.17.15" + mkdirp "^1.0.4" + prettier "^2.3.1" + ts-command-line-args "^2.2.0" + ts-essentials "^7.0.1" + typescript@^4.6.4, typescript@^4.7.4: - version "4.7.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.4.tgz#1a88596d1cf47d59507a1bcdfb5b9dfe4d488235" - integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ== + version "4.8.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.8.2.tgz#e3b33d5ccfb5914e4eeab6699cf208adee3fd790" + integrity sha512-C0I1UsrrDHo2fYI5oaCGbSejwX4ch+9Y5jTQELvovfmFkK3HHSZJB8MSJcWLmCUBzQBchCrZ9rMRV6GuNrvGtw== + +typical@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/typical/-/typical-4.0.0.tgz#cbeaff3b9d7ae1e2bbfaf5a4e6f11eccfde94fc4" + integrity sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw== + +typical@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/typical/-/typical-5.2.0.tgz#4daaac4f2b5315460804f0acf6cb69c52bb93066" + integrity sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg== unbox-primitive@^1.0.2: version "1.0.2" @@ -4690,6 +5211,11 @@ unbox-primitive@^1.0.2: has-symbols "^1.0.3" which-boxed-primitive "^1.0.2" +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + universalify@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" @@ -4772,6 +5298,14 @@ word-wrap@^1.2.3: resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== +wordwrapjs@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/wordwrapjs/-/wordwrapjs-4.0.1.tgz#d9790bccfb110a0fc7836b5ebce0937b37a8b98f" + integrity sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA== + dependencies: + reduce-flatten "^2.0.0" + typical "^5.2.0" + wrap-ansi@^6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" @@ -4796,9 +5330,9 @@ wrappy@1: integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== write-file-atomic@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.1.tgz#9faa33a964c1c85ff6f849b80b42a88c2c537c8f" - integrity sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ== + version "4.0.2" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" + integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== dependencies: imurmurhash "^0.1.4" signal-exit "^3.0.7"